]> git.proxmox.com Git - ceph.git/commitdiff
update ceph source to reef 18.2.1
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 19 Dec 2023 08:13:36 +0000 (09:13 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 19 Dec 2023 08:13:36 +0000 (09:13 +0100)
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
1396 files changed:
ceph/.github/pull_request_template.md
ceph/CMakeLists.txt
ceph/PendingReleaseNotes
ceph/README.md
ceph/ceph.spec
ceph/changelog.upstream
ceph/debian/ceph-base.docs [deleted file]
ceph/debian/ceph-mon.postinst
ceph/debian/ceph-osd.postinst
ceph/debian/compat
ceph/debian/control
ceph/debian/copyright
ceph/debian/rules
ceph/doc/architecture.rst
ceph/doc/ceph-volume/lvm/activate.rst
ceph/doc/cephadm/host-management.rst
ceph/doc/cephadm/install.rst
ceph/doc/cephadm/services/index.rst
ceph/doc/cephadm/services/mds.rst
ceph/doc/cephadm/services/mgr.rst
ceph/doc/cephadm/services/nfs.rst
ceph/doc/cephadm/services/osd.rst
ceph/doc/cephadm/services/rgw.rst
ceph/doc/cephadm/troubleshooting.rst
ceph/doc/cephfs/administration.rst
ceph/doc/cephfs/cache-configuration.rst
ceph/doc/cephfs/fs-volumes.rst
ceph/doc/cephfs/mount-using-fuse.rst
ceph/doc/cephfs/multimds.rst
ceph/doc/cephfs/scrub.rst
ceph/doc/cephfs/snap-schedule.rst
ceph/doc/cephfs/troubleshooting.rst
ceph/doc/dev/balancer-design.rst [new file with mode: 0644]
ceph/doc/dev/cache-pool.rst [deleted file]
ceph/doc/dev/cephfs-mirroring.rst
ceph/doc/dev/deduplication.rst
ceph/doc/dev/developer_guide/dash-devel.rst
ceph/doc/dev/developer_guide/running-tests-locally.rst
ceph/doc/dev/mon-elections.rst
ceph/doc/dev/osd_internals/manifest.rst
ceph/doc/dev/osd_internals/mclock_wpq_cmp_study.rst
ceph/doc/dev/prim-balancer-design.rst [deleted file]
ceph/doc/dev/release-checklists.rst
ceph/doc/glossary.rst
ceph/doc/index.rst
ceph/doc/install/get-packages.rst
ceph/doc/man/8/ceph-monstore-tool.rst [new file with mode: 0644]
ceph/doc/man/8/osdmaptool.rst
ceph/doc/man/8/radosgw-admin.rst
ceph/doc/man/8/radosgw.rst
ceph/doc/mgr/nfs.rst
ceph/doc/mgr/prometheus.rst
ceph/doc/monitoring/index.rst [new file with mode: 0644]
ceph/doc/rados/configuration/ceph-conf.rst
ceph/doc/rados/configuration/filestore-config-ref.rst
ceph/doc/rados/configuration/mon-config-ref.rst
ceph/doc/rados/configuration/msgr2.rst
ceph/doc/rados/configuration/osd-config-ref.rst
ceph/doc/rados/configuration/pool-pg-config-ref.rst
ceph/doc/rados/operations/add-or-rm-mons.rst
ceph/doc/rados/operations/balancer.rst
ceph/doc/rados/operations/control.rst
ceph/doc/rados/operations/crush-map.rst
ceph/doc/rados/operations/erasure-code-profile.rst
ceph/doc/rados/operations/health-checks.rst
ceph/doc/rados/operations/index.rst
ceph/doc/rados/operations/monitoring-osd-pg.rst
ceph/doc/rados/operations/placement-groups.rst
ceph/doc/rados/operations/pools.rst
ceph/doc/rados/operations/read-balancer.rst [new file with mode: 0644]
ceph/doc/rados/operations/upmap.rst
ceph/doc/rados/troubleshooting/community.rst
ceph/doc/rados/troubleshooting/cpu-profiling.rst
ceph/doc/rados/troubleshooting/index.rst
ceph/doc/rados/troubleshooting/memory-profiling.rst
ceph/doc/rados/troubleshooting/troubleshooting-mon.rst
ceph/doc/rados/troubleshooting/troubleshooting-osd.rst
ceph/doc/rados/troubleshooting/troubleshooting-pg.rst
ceph/doc/radosgw/admin.rst
ceph/doc/radosgw/config-ref.rst
ceph/doc/radosgw/dynamicresharding.rst
ceph/doc/radosgw/multisite.rst
ceph/doc/radosgw/notifications.rst
ceph/doc/radosgw/s3-notification-compatibility.rst
ceph/doc/radosgw/s3.rst
ceph/doc/releases/index.rst
ceph/doc/releases/reef.rst [new file with mode: 0644]
ceph/doc/releases/releases.yml
ceph/doc/start/documenting-ceph.rst
ceph/doc/start/hardware-recommendations.rst
ceph/doc/start/os-recommendations.rst
ceph/install-deps.sh
ceph/make-dist
ceph/qa/cephfs/begin/1-ceph.yaml
ceph/qa/cephfs/overrides/ignorelist_health.yaml
ceph/qa/distros/crimson-supported-all-distro/centos_8.yaml [new symlink]
ceph/qa/distros/crimson-supported-all-distro/centos_latest.yaml [new symlink]
ceph/qa/distros/supported-all-distro/centos_latest.yaml [new symlink]
ceph/qa/distros/supported-all-distro/ubuntu_20.04.yaml [new symlink]
ceph/qa/distros/supported-all-distro/ubuntu_latest.yaml
ceph/qa/rbd/conf/+ [new file with mode: 0644]
ceph/qa/rbd/conf/disable-pool-app.yaml [new file with mode: 0644]
ceph/qa/rbd/data-pool/ec.yaml [new file with mode: 0644]
ceph/qa/rbd/data-pool/none.yaml [new file with mode: 0644]
ceph/qa/rbd/data-pool/replicated.yaml [new file with mode: 0644]
ceph/qa/rgw/ignore-pg-availability.yaml
ceph/qa/standalone/ceph-helpers.sh
ceph/qa/standalone/mon-stretch/mon-stretch-fail-recovery.sh
ceph/qa/standalone/mon-stretch/mon-stretch-uneven-crush-weights.sh [new file with mode: 0755]
ceph/qa/standalone/mon/mon-last-epoch-clean.sh
ceph/qa/standalone/osd/divergent-priors.sh
ceph/qa/suites/crimson-rados/basic/centos_8.stream.yaml [new symlink]
ceph/qa/suites/crimson-rados/basic/centos_latest.yaml [deleted symlink]
ceph/qa/suites/crimson-rados/basic/crimson-supported-all-distro [new symlink]
ceph/qa/suites/crimson-rados/rbd/centos_8.stream.yaml [new symlink]
ceph/qa/suites/crimson-rados/rbd/centos_latest.yaml [deleted symlink]
ceph/qa/suites/crimson-rados/rbd/crimson-supported-all-distro [new symlink]
ceph/qa/suites/crimson-rados/singleton/% [new file with mode: 0644]
ceph/qa/suites/crimson-rados/singleton/.qa [new symlink]
ceph/qa/suites/crimson-rados/singleton/all/.qa [new symlink]
ceph/qa/suites/crimson-rados/singleton/all/osd-backfill.yaml [new file with mode: 0644]
ceph/qa/suites/crimson-rados/singleton/crimson-supported-all-distro [new symlink]
ceph/qa/suites/crimson-rados/singleton/crimson_qa_overrides.yaml [new symlink]
ceph/qa/suites/crimson-rados/singleton/objectstore [new symlink]
ceph/qa/suites/crimson-rados/singleton/rados.yaml [new symlink]
ceph/qa/suites/crimson-rados/thrash/centos_8.stream.yaml [new symlink]
ceph/qa/suites/crimson-rados/thrash/centos_latest.yaml [deleted symlink]
ceph/qa/suites/crimson-rados/thrash/crimson-supported-all-distro [new symlink]
ceph/qa/suites/fs/functional/tasks/damage.yaml
ceph/qa/suites/fs/mirror-ha/cephfs-mirror/+ [new file with mode: 0644]
ceph/qa/suites/fs/mirror-ha/cephfs-mirror/1-volume-create-rm.yaml [new file with mode: 0644]
ceph/qa/suites/fs/mirror-ha/cephfs-mirror/2-three-per-cluster.yaml [new file with mode: 0644]
ceph/qa/suites/fs/mirror-ha/cephfs-mirror/three-per-cluster.yaml [deleted file]
ceph/qa/suites/fs/mirror-ha/workloads/cephfs-mirror-ha-workunit.yaml
ceph/qa/suites/fs/multiclient/tasks/ior-shared-file.yaml
ceph/qa/suites/fs/multiclient/tasks/mdtest.yaml
ceph/qa/suites/fs/nfs/% [new file with mode: 0644]
ceph/qa/suites/fs/nfs/.qa [new symlink]
ceph/qa/suites/fs/nfs/cluster/+ [new file with mode: 0644]
ceph/qa/suites/fs/nfs/cluster/.qa [new symlink]
ceph/qa/suites/fs/nfs/cluster/1-node.yaml [new file with mode: 0644]
ceph/qa/suites/fs/nfs/overrides/.qa [new symlink]
ceph/qa/suites/fs/nfs/overrides/ignorelist_health.yaml [new file with mode: 0644]
ceph/qa/suites/fs/nfs/supported-random-distros$ [new symlink]
ceph/qa/suites/fs/nfs/tasks/.qa [new symlink]
ceph/qa/suites/fs/nfs/tasks/nfs.yaml [new file with mode: 0644]
ceph/qa/suites/fs/thrash/multifs/overrides/client-shutdown.yaml [new file with mode: 0644]
ceph/qa/suites/fs/thrash/workloads/overrides/client-shutdown.yaml [new file with mode: 0644]
ceph/qa/suites/fs/workload/tasks/5-workunit/postgres.yaml
ceph/qa/suites/krbd/basic/conf.yaml
ceph/qa/suites/krbd/fsx/conf.yaml
ceph/qa/suites/krbd/ms_modeless/conf.yaml
ceph/qa/suites/krbd/rbd-nomount/conf.yaml
ceph/qa/suites/krbd/rbd/conf.yaml
ceph/qa/suites/krbd/singleton-msgr-failures/% [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/.qa [new symlink]
ceph/qa/suites/krbd/singleton-msgr-failures/bluestore-bitmap.yaml [new symlink]
ceph/qa/suites/krbd/singleton-msgr-failures/conf.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/.qa [new symlink]
ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/crc-rxbounce.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/crc.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/legacy-rxbounce.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/legacy.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/secure.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/.qa [new symlink]
ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/few.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/many.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton-msgr-failures/tasks/.qa [new symlink]
ceph/qa/suites/krbd/singleton-msgr-failures/tasks/rbd_xfstests.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton/conf.yaml
ceph/qa/suites/krbd/singleton/msgr-failures/.qa [deleted symlink]
ceph/qa/suites/krbd/singleton/msgr-failures/few.yaml [deleted file]
ceph/qa/suites/krbd/singleton/msgr-failures/many.yaml [deleted file]
ceph/qa/suites/krbd/singleton/tasks/krbd_watch_errors.yaml [new file with mode: 0644]
ceph/qa/suites/krbd/singleton/tasks/rbd_xfstests.yaml [deleted file]
ceph/qa/suites/krbd/thrash/conf.yaml
ceph/qa/suites/krbd/unmap/conf.yaml
ceph/qa/suites/krbd/wac/sysfs/conf.yaml
ceph/qa/suites/krbd/wac/wac/conf.yaml
ceph/qa/suites/orch/cephadm/nfs [new symlink]
ceph/qa/suites/orch/cephadm/orchestrator_cli/orchestrator_cli.yaml
ceph/qa/suites/orch/cephadm/smoke-roleless/2-services/nfs-haproxy-proto.yaml [new file with mode: 0644]
ceph/qa/suites/orch/cephadm/smoke-roleless/2-services/nvmeof.yaml [new file with mode: 0644]
ceph/qa/suites/orch/cephadm/workunits/task/test_ca_signed_key.yaml [new file with mode: 0644]
ceph/qa/suites/orch/cephadm/workunits/task/test_nfs.yaml [deleted file]
ceph/qa/suites/perf-basic/objectstore/bluestore.yaml
ceph/qa/suites/rados/basic/tasks/rados_stress_watch.yaml
ceph/qa/suites/rados/basic/tasks/rados_striper.yaml
ceph/qa/suites/rados/basic/tasks/readwrite.yaml
ceph/qa/suites/rados/basic/tasks/repair_test.yaml
ceph/qa/suites/rados/basic/tasks/scrub_test.yaml
ceph/qa/suites/rados/dashboard/tasks/dashboard.yaml
ceph/qa/suites/rados/mgr/tasks/crash.yaml
ceph/qa/suites/rados/mgr/tasks/failover.yaml
ceph/qa/suites/rados/mgr/tasks/insights.yaml
ceph/qa/suites/rados/mgr/tasks/module_selftest.yaml
ceph/qa/suites/rados/mgr/tasks/per_module_finisher_stats.yaml
ceph/qa/suites/rados/mgr/tasks/progress.yaml
ceph/qa/suites/rados/mgr/tasks/prometheus.yaml
ceph/qa/suites/rados/mgr/tasks/workunits.yaml
ceph/qa/suites/rados/monthrash/thrashers/force-sync-many.yaml
ceph/qa/suites/rados/monthrash/thrashers/many.yaml
ceph/qa/suites/rados/monthrash/thrashers/one.yaml
ceph/qa/suites/rados/monthrash/thrashers/sync-many.yaml
ceph/qa/suites/rados/monthrash/thrashers/sync.yaml
ceph/qa/suites/rados/monthrash/workloads/pool-create-delete.yaml
ceph/qa/suites/rados/monthrash/workloads/rados_5925.yaml
ceph/qa/suites/rados/monthrash/workloads/rados_api_tests.yaml
ceph/qa/suites/rados/multimon/tasks/mon_clock_no_skews.yaml
ceph/qa/suites/rados/multimon/tasks/mon_clock_with_skews.yaml
ceph/qa/suites/rados/multimon/tasks/mon_recovery.yaml
ceph/qa/suites/rados/objectstore/backends/objectcacher-stress.yaml
ceph/qa/suites/rados/perf/ceph.yaml
ceph/qa/suites/rados/rest/mgr-restful.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/admin_socket_output.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/balancer.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/cache-fs-trunc.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/ceph-kvstore-tool.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/export-after-evict.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/full-tiering.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/health-warnings.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/multi-backfill-reject.yaml
ceph/qa/suites/rados/singleton-nomsgr/all/pool-access.yaml
ceph/qa/suites/rados/singleton/all/admin-socket.yaml
ceph/qa/suites/rados/singleton/all/backfill-toofull.yaml
ceph/qa/suites/rados/singleton/all/dump-stuck.yaml
ceph/qa/suites/rados/singleton/all/ec-inconsistent-hinfo.yaml
ceph/qa/suites/rados/singleton/all/ec-lost-unfound.yaml
ceph/qa/suites/rados/singleton/all/lost-unfound-delete.yaml
ceph/qa/suites/rados/singleton/all/lost-unfound.yaml
ceph/qa/suites/rados/singleton/all/max-pg-per-osd.from-mon.yaml
ceph/qa/suites/rados/singleton/all/max-pg-per-osd.from-primary.yaml
ceph/qa/suites/rados/singleton/all/max-pg-per-osd.from-replica.yaml
ceph/qa/suites/rados/singleton/all/mon-auth-caps.yaml
ceph/qa/suites/rados/singleton/all/mon-config-key-caps.yaml
ceph/qa/suites/rados/singleton/all/mon-config.yaml
ceph/qa/suites/rados/singleton/all/osd-backfill.yaml
ceph/qa/suites/rados/singleton/all/osd-recovery-incomplete.yaml
ceph/qa/suites/rados/singleton/all/osd-recovery.yaml
ceph/qa/suites/rados/singleton/all/peer.yaml
ceph/qa/suites/rados/singleton/all/pg-autoscaler-progress-off.yaml
ceph/qa/suites/rados/singleton/all/pg-autoscaler.yaml
ceph/qa/suites/rados/singleton/all/pg-removal-interruption.yaml
ceph/qa/suites/rados/singleton/all/rebuild-mondb.yaml
ceph/qa/suites/rados/singleton/all/test-crash.yaml
ceph/qa/suites/rados/singleton/all/test-noautoscale-flag.yaml
ceph/qa/suites/rados/singleton/all/thrash-backfill-full.yaml
ceph/qa/suites/rados/singleton/all/thrash-eio.yaml
ceph/qa/suites/rados/singleton/all/thrash-rados/thrash-rados.yaml
ceph/qa/suites/rados/singleton/all/thrash_cache_writeback_proxy_none.yaml
ceph/qa/suites/rados/singleton/all/watch-notify-same-primary.yaml
ceph/qa/suites/rados/thrash-erasure-code-big/thrashers/careful.yaml
ceph/qa/suites/rados/thrash-erasure-code-big/thrashers/default.yaml
ceph/qa/suites/rados/thrash-erasure-code-big/thrashers/fastread.yaml
ceph/qa/suites/rados/thrash-erasure-code-big/thrashers/mapgap.yaml
ceph/qa/suites/rados/thrash-erasure-code-big/thrashers/morepggrow.yaml
ceph/qa/suites/rados/thrash-erasure-code-big/thrashers/pggrow.yaml
ceph/qa/suites/rados/thrash-erasure-code-shec/thrashers/careful.yaml
ceph/qa/suites/rados/thrash-erasure-code-shec/thrashers/default.yaml
ceph/qa/suites/rados/thrash-erasure-code/thrashers/careful.yaml
ceph/qa/suites/rados/thrash-erasure-code/thrashers/default.yaml
ceph/qa/suites/rados/thrash-erasure-code/thrashers/fastread.yaml
ceph/qa/suites/rados/thrash-erasure-code/thrashers/minsize_recovery.yaml
ceph/qa/suites/rados/thrash-erasure-code/thrashers/morepggrow.yaml
ceph/qa/suites/rados/thrash-erasure-code/thrashers/pggrow.yaml
ceph/qa/suites/rados/thrash-old-clients/thrashers/careful.yaml
ceph/qa/suites/rados/thrash-old-clients/thrashers/default.yaml
ceph/qa/suites/rados/thrash-old-clients/thrashers/mapgap.yaml
ceph/qa/suites/rados/thrash-old-clients/thrashers/morepggrow.yaml
ceph/qa/suites/rados/thrash-old-clients/thrashers/pggrow.yaml
ceph/qa/suites/rados/thrash/workloads/admin_socket_objecter_requests.yaml
ceph/qa/suites/rados/thrash/workloads/cache-agent-big.yaml
ceph/qa/suites/rados/thrash/workloads/cache-agent-small.yaml
ceph/qa/suites/rados/thrash/workloads/cache-pool-snaps-readproxy.yaml
ceph/qa/suites/rados/thrash/workloads/cache-pool-snaps.yaml
ceph/qa/suites/rados/thrash/workloads/cache-snaps-balanced.yaml
ceph/qa/suites/rados/thrash/workloads/cache-snaps.yaml
ceph/qa/suites/rados/thrash/workloads/cache.yaml
ceph/qa/suites/rados/thrash/workloads/dedup-io-mixed.yaml
ceph/qa/suites/rados/thrash/workloads/dedup-io-snaps.yaml
ceph/qa/suites/rados/thrash/workloads/pool-snaps-few-objects.yaml
ceph/qa/suites/rados/thrash/workloads/radosbench-high-concurrency.yaml
ceph/qa/suites/rados/thrash/workloads/radosbench.yaml
ceph/qa/suites/rados/thrash/workloads/redirect.yaml
ceph/qa/suites/rados/thrash/workloads/redirect_promote_tests.yaml
ceph/qa/suites/rados/thrash/workloads/redirect_set_object.yaml
ceph/qa/suites/rados/thrash/workloads/set-chunks-read.yaml
ceph/qa/suites/rados/thrash/workloads/small-objects-balanced.yaml
ceph/qa/suites/rados/thrash/workloads/small-objects-localized.yaml
ceph/qa/suites/rados/thrash/workloads/small-objects.yaml
ceph/qa/suites/rados/thrash/workloads/snaps-few-objects-balanced.yaml
ceph/qa/suites/rados/thrash/workloads/snaps-few-objects-localized.yaml
ceph/qa/suites/rados/thrash/workloads/snaps-few-objects.yaml
ceph/qa/suites/rados/thrash/workloads/write_fadvise_dontneed.yaml
ceph/qa/suites/rados/valgrind-leaks/1-start.yaml
ceph/qa/suites/rados/verify/tasks/rados_cls_all.yaml
ceph/qa/suites/rbd/basic/cachepool/.qa [deleted symlink]
ceph/qa/suites/rbd/basic/cachepool/none.yaml [deleted file]
ceph/qa/suites/rbd/basic/cachepool/small.yaml [deleted file]
ceph/qa/suites/rbd/basic/conf [new symlink]
ceph/qa/suites/rbd/basic/tasks/rbd_api_tests_old_format.yaml
ceph/qa/suites/rbd/cli/conf [new symlink]
ceph/qa/suites/rbd/cli/data-pool [new symlink]
ceph/qa/suites/rbd/cli/pool/.qa [deleted symlink]
ceph/qa/suites/rbd/cli/pool/ec-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/cli/pool/none.yaml [deleted file]
ceph/qa/suites/rbd/cli/pool/replicated-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/cli/pool/small-cache-pool.yaml [deleted file]
ceph/qa/suites/rbd/cli/workloads/rbd_support_module_recovery.yaml [new file with mode: 0644]
ceph/qa/suites/rbd/cli_v1/conf [new symlink]
ceph/qa/suites/rbd/cli_v1/pool/.qa [deleted symlink]
ceph/qa/suites/rbd/cli_v1/pool/none.yaml [deleted file]
ceph/qa/suites/rbd/cli_v1/pool/small-cache-pool.yaml [deleted file]
ceph/qa/suites/rbd/encryption/conf [new symlink]
ceph/qa/suites/rbd/encryption/data-pool [new symlink]
ceph/qa/suites/rbd/encryption/pool/.qa [deleted symlink]
ceph/qa/suites/rbd/encryption/pool/ec-cache-pool.yaml [deleted file]
ceph/qa/suites/rbd/encryption/pool/ec-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/encryption/pool/none.yaml [deleted file]
ceph/qa/suites/rbd/encryption/pool/replicated-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/encryption/pool/small-cache-pool.yaml [deleted file]
ceph/qa/suites/rbd/immutable-object-cache/conf [new symlink]
ceph/qa/suites/rbd/iscsi/conf [new symlink]
ceph/qa/suites/rbd/librbd/conf [new symlink]
ceph/qa/suites/rbd/librbd/config/.qa [deleted symlink]
ceph/qa/suites/rbd/librbd/config/copy-on-read.yaml [deleted file]
ceph/qa/suites/rbd/librbd/config/none.yaml [deleted file]
ceph/qa/suites/rbd/librbd/config/permit-partial-discard.yaml [deleted file]
ceph/qa/suites/rbd/librbd/data-pool [new symlink]
ceph/qa/suites/rbd/librbd/extra-conf/.qa [new symlink]
ceph/qa/suites/rbd/librbd/extra-conf/copy-on-read.yaml [new file with mode: 0644]
ceph/qa/suites/rbd/librbd/extra-conf/none.yaml [new file with mode: 0644]
ceph/qa/suites/rbd/librbd/extra-conf/permit-partial-discard.yaml [new file with mode: 0644]
ceph/qa/suites/rbd/librbd/pool/.qa [deleted symlink]
ceph/qa/suites/rbd/librbd/pool/ec-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/librbd/pool/none.yaml [deleted file]
ceph/qa/suites/rbd/librbd/pool/replicated-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/librbd/pool/small-cache-pool.yaml [deleted file]
ceph/qa/suites/rbd/librbd/workloads/c_api_tests.yaml
ceph/qa/suites/rbd/librbd/workloads/c_api_tests_with_defaults.yaml
ceph/qa/suites/rbd/librbd/workloads/c_api_tests_with_journaling.yaml
ceph/qa/suites/rbd/maintenance/conf [new symlink]
ceph/qa/suites/rbd/migration/5-data-pool [new symlink]
ceph/qa/suites/rbd/migration/5-pool/.qa [deleted symlink]
ceph/qa/suites/rbd/migration/5-pool/ec-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/migration/5-pool/none.yaml [deleted file]
ceph/qa/suites/rbd/migration/5-pool/replicated-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/migration/conf [new symlink]
ceph/qa/suites/rbd/mirror-thrash/conf [new symlink]
ceph/qa/suites/rbd/mirror/conf [new symlink]
ceph/qa/suites/rbd/nbd/conf [new symlink]
ceph/qa/suites/rbd/pwl-cache/home/conf [new symlink]
ceph/qa/suites/rbd/pwl-cache/tmpfs/conf [new symlink]
ceph/qa/suites/rbd/qemu/conf [new symlink]
ceph/qa/suites/rbd/qemu/data-pool [new symlink]
ceph/qa/suites/rbd/qemu/pool/.qa [deleted symlink]
ceph/qa/suites/rbd/qemu/pool/ec-cache-pool.yaml [deleted file]
ceph/qa/suites/rbd/qemu/pool/ec-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/qemu/pool/none.yaml [deleted file]
ceph/qa/suites/rbd/qemu/pool/replicated-data-pool.yaml [deleted file]
ceph/qa/suites/rbd/qemu/pool/small-cache-pool.yaml [deleted file]
ceph/qa/suites/rbd/singleton-bluestore/all/issue-20295.yaml
ceph/qa/suites/rbd/singleton-bluestore/conf [new symlink]
ceph/qa/suites/rbd/singleton/all/rbd_mirror.yaml
ceph/qa/suites/rbd/singleton/all/rbd_tasks.yaml
ceph/qa/suites/rbd/singleton/conf [new symlink]
ceph/qa/suites/rbd/thrash/conf [new symlink]
ceph/qa/suites/rbd/thrash/thrashers/cache.yaml [deleted file]
ceph/qa/suites/rbd/thrash/workloads/rbd_api_tests.yaml
ceph/qa/suites/rbd/thrash/workloads/rbd_api_tests_copy_on_read.yaml
ceph/qa/suites/rbd/thrash/workloads/rbd_api_tests_journaling.yaml
ceph/qa/suites/rbd/thrash/workloads/rbd_api_tests_no_locking.yaml
ceph/qa/suites/rbd/valgrind/conf [new symlink]
ceph/qa/suites/rbd/valgrind/workloads/c_api_tests.yaml
ceph/qa/suites/rbd/valgrind/workloads/c_api_tests_with_defaults.yaml
ceph/qa/suites/rbd/valgrind/workloads/c_api_tests_with_journaling.yaml
ceph/qa/suites/rbd/valgrind/workloads/rbd_mirror.yaml
ceph/qa/suites/rgw/cloud-transition/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/crypt/2-kms/barbican.yaml
ceph/qa/suites/rgw/crypt/supported-random-distro$ [deleted symlink]
ceph/qa/suites/rgw/crypt/ubuntu_latest.yaml [new symlink]
ceph/qa/suites/rgw/dbstore/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/hadoop-s3a/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/lifecycle/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/notifications/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/service-token/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/tempest/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/thrash/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/tools/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/upgrade/1-install/pacific/overrides.yaml
ceph/qa/suites/rgw/upgrade/1-install/quincy/overrides.yaml
ceph/qa/suites/rgw/upgrade/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/rgw/verify/tasks/bucket-check.yaml [new file with mode: 0644]
ceph/qa/suites/rgw/verify/tasks/mp_reupload.yaml [new file with mode: 0644]
ceph/qa/suites/rgw/website/ignore-pg-availability.yaml [new symlink]
ceph/qa/suites/smoke/basic/supported-all-distro [new symlink]
ceph/qa/suites/smoke/basic/supported-random-distro$ [deleted symlink]
ceph/qa/suites/smoke/basic/tasks/test/cfuse_workunit_suites_blogbench.yaml
ceph/qa/suites/smoke/basic/tasks/test/cfuse_workunit_suites_fsstress.yaml
ceph/qa/suites/smoke/basic/tasks/test/cfuse_workunit_suites_iozone.yaml
ceph/qa/suites/smoke/basic/tasks/test/cfuse_workunit_suites_pjd.yaml
ceph/qa/suites/smoke/basic/tasks/test/kclient_workunit_direct_io.yaml
ceph/qa/suites/smoke/basic/tasks/test/kclient_workunit_suites_dbench.yaml
ceph/qa/suites/smoke/basic/tasks/test/kclient_workunit_suites_fsstress.yaml
ceph/qa/suites/smoke/basic/tasks/test/kclient_workunit_suites_pjd.yaml
ceph/qa/suites/smoke/basic/tasks/test/libcephfs_interface_tests.yaml
ceph/qa/suites/smoke/basic/tasks/test/rados_cls_all.yaml
ceph/qa/suites/smoke/basic/tasks/test/rbd_cli_import_export.yaml
ceph/qa/suites/smoke/basic/tasks/test/rbd_python_api_tests.yaml
ceph/qa/suites/smoke/basic/tasks/test/rbd_workunit_suites_iozone.yaml
ceph/qa/suites/smoke/basic/tasks/test/rgw_ec_s3tests.yaml
ceph/qa/suites/smoke/basic/tasks/test/rgw_s3tests.yaml
ceph/qa/suites/upgrade/pacific-x/parallel/workload/test_rbd_api.yaml
ceph/qa/suites/upgrade/pacific-x/parallel/workload/test_rbd_python.yaml
ceph/qa/suites/upgrade/pacific-x/stress-split/2-first-half-tasks/rbd_api.yaml
ceph/qa/suites/upgrade/pacific-x/stress-split/3-stress-tasks/rbd_api.yaml
ceph/qa/suites/upgrade/quincy-x/filestore-remove-check/0-cluster/start.yaml
ceph/qa/suites/upgrade/quincy-x/parallel/workload/test_rbd_api.yaml
ceph/qa/suites/upgrade/quincy-x/parallel/workload/test_rbd_python.yaml
ceph/qa/suites/upgrade/quincy-x/stress-split/2-first-half-tasks/rbd_api.yaml
ceph/qa/suites/upgrade/quincy-x/stress-split/3-stress-tasks/rbd_api.yaml
ceph/qa/tasks/barbican.py
ceph/qa/tasks/cephadm.py
ceph/qa/tasks/cephfs/cephfs_test_case.py
ceph/qa/tasks/cephfs/kernel_mount.py
ceph/qa/tasks/cephfs/mount.py
ceph/qa/tasks/cephfs/test_admin.py
ceph/qa/tasks/cephfs/test_client_limits.py
ceph/qa/tasks/cephfs/test_client_recovery.py
ceph/qa/tasks/cephfs/test_damage.py
ceph/qa/tasks/cephfs/test_failover.py
ceph/qa/tasks/cephfs/test_mirroring.py
ceph/qa/tasks/cephfs/test_misc.py
ceph/qa/tasks/cephfs/test_scrub_checks.py
ceph/qa/tasks/cephfs/test_snap_schedules.py
ceph/qa/tasks/cephfs/test_volumes.py
ceph/qa/tasks/cephfs/xfstests_dev.py
ceph/qa/tasks/mgr/dashboard/test_pool.py
ceph/qa/tasks/mgr/mgr_test_case.py
ceph/qa/tasks/mgr/test_failover.py
ceph/qa/valgrind.supp
ceph/qa/workunits/cephadm/test_cephadm.sh
ceph/qa/workunits/cephtool/test.sh
ceph/qa/workunits/mon/pg_autoscaler.sh
ceph/qa/workunits/mon/test_noautoscale_flag.sh
ceph/qa/workunits/rbd/krbd_watch_errors.sh [new file with mode: 0755]
ceph/qa/workunits/rbd/rbd-nbd.sh
ceph/qa/workunits/rbd/rbd_mirror_helpers.sh
ceph/qa/workunits/rbd/rbd_mirror_journal.sh
ceph/qa/workunits/rbd/rbd_mirror_snapshot.sh
ceph/qa/workunits/rbd/rbd_support_module_recovery.sh [new file with mode: 0755]
ceph/qa/workunits/rgw/common.py
ceph/qa/workunits/rgw/run-bucket-check.sh [new file with mode: 0755]
ceph/qa/workunits/rgw/test_rgw_bucket_check.py [new file with mode: 0755]
ceph/qa/workunits/rgw/test_rgw_reshard.py
ceph/qa/workunits/rgw/test_rgw_s3_mp_reupload.py [new file with mode: 0755]
ceph/qa/workunits/rgw/test_rgw_s3_mp_reupload.sh [new file with mode: 0755]
ceph/src/.git_version
ceph/src/CMakeLists.txt
ceph/src/SimpleRADOSStriper.cc
ceph/src/ceph-volume/ceph_volume/api/lvm.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/deactivate.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/migrate.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/prepare.py
ceph/src/ceph-volume/ceph_volume/devices/lvm/zap.py
ceph/src/ceph-volume/ceph_volume/devices/raw/common.py
ceph/src/ceph-volume/ceph_volume/devices/raw/list.py
ceph/src/ceph-volume/ceph_volume/devices/raw/prepare.py
ceph/src/ceph-volume/ceph_volume/inventory/main.py
ceph/src/ceph-volume/ceph_volume/tests/api/test_lvm.py
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_deactivate.py
ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_migrate.py
ceph/src/ceph-volume/ceph_volume/tests/util/test_disk.py
ceph/src/ceph-volume/ceph_volume/util/device.py
ceph/src/ceph-volume/ceph_volume/util/disk.py
ceph/src/ceph-volume/ceph_volume/util/encryption.py
ceph/src/cephadm/CMakeLists.txt
ceph/src/cephadm/build.py
ceph/src/cephadm/cephadm.py
ceph/src/cephadm/tests/fixtures.py
ceph/src/cephadm/tests/test_agent.py
ceph/src/cephadm/tests/test_cephadm.py
ceph/src/cephadm/tests/test_util_funcs.py
ceph/src/client/Client.cc
ceph/src/client/Client.h
ceph/src/client/Dentry.h
ceph/src/client/MetaRequest.cc
ceph/src/client/MetaRequest.h
ceph/src/client/MetaSession.h
ceph/src/cls/rgw/cls_rgw.cc
ceph/src/cls/rgw/cls_rgw_types.cc
ceph/src/common/Formatter.cc
ceph/src/common/Formatter.h
ceph/src/common/TrackedOp.cc
ceph/src/common/TrackedOp.h
ceph/src/common/ceph_strings.cc
ceph/src/common/options/mds.yaml.in
ceph/src/common/options/rgw.yaml.in
ceph/src/crimson/admin/admin_socket.cc
ceph/src/crimson/common/config_proxy.h
ceph/src/crimson/common/errorator.h
ceph/src/crimson/common/operation.h
ceph/src/crimson/mgr/client.cc
ceph/src/crimson/mgr/client.h
ceph/src/crimson/net/Connection.h
ceph/src/crimson/net/Dispatcher.h
ceph/src/crimson/net/FrameAssemblerV2.cc
ceph/src/crimson/net/FrameAssemblerV2.h
ceph/src/crimson/net/Fwd.h
ceph/src/crimson/net/Interceptor.h
ceph/src/crimson/net/Messenger.cc
ceph/src/crimson/net/Messenger.h
ceph/src/crimson/net/ProtocolV2.cc
ceph/src/crimson/net/ProtocolV2.h
ceph/src/crimson/net/Socket.cc
ceph/src/crimson/net/Socket.h
ceph/src/crimson/net/SocketConnection.cc
ceph/src/crimson/net/SocketConnection.h
ceph/src/crimson/net/SocketMessenger.cc
ceph/src/crimson/net/SocketMessenger.h
ceph/src/crimson/net/chained_dispatchers.cc
ceph/src/crimson/net/chained_dispatchers.h
ceph/src/crimson/net/io_handler.cc
ceph/src/crimson/net/io_handler.h
ceph/src/crimson/os/futurized_store.h
ceph/src/crimson/os/seastore/CMakeLists.txt
ceph/src/crimson/os/seastore/async_cleaner.cc
ceph/src/crimson/os/seastore/backref/btree_backref_manager.cc
ceph/src/crimson/os/seastore/backref/btree_backref_manager.h
ceph/src/crimson/os/seastore/backref_manager.h
ceph/src/crimson/os/seastore/btree/btree_range_pin.h
ceph/src/crimson/os/seastore/btree/fixed_kv_btree.h
ceph/src/crimson/os/seastore/btree/fixed_kv_node.h
ceph/src/crimson/os/seastore/cache.cc
ceph/src/crimson/os/seastore/cache.h
ceph/src/crimson/os/seastore/cached_extent.h
ceph/src/crimson/os/seastore/collection_manager/collection_flat_node.cc
ceph/src/crimson/os/seastore/collection_manager/collection_flat_node.h
ceph/src/crimson/os/seastore/collection_manager/flat_collection_manager.cc
ceph/src/crimson/os/seastore/journal/circular_bounded_journal.cc
ceph/src/crimson/os/seastore/journal/circular_bounded_journal.h
ceph/src/crimson/os/seastore/journal/circular_journal_space.cc
ceph/src/crimson/os/seastore/journal/circular_journal_space.h
ceph/src/crimson/os/seastore/lba_manager.h
ceph/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc
ceph/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h
ceph/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.cc
ceph/src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h
ceph/src/crimson/os/seastore/object_data_handler.cc
ceph/src/crimson/os/seastore/object_data_handler.h
ceph/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc
ceph/src/crimson/os/seastore/omap_manager/btree/string_kv_node_layout.h
ceph/src/crimson/os/seastore/onode.h
ceph/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc
ceph/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h
ceph/src/crimson/os/seastore/random_block_manager.h
ceph/src/crimson/os/seastore/random_block_manager/block_rb_manager.cc
ceph/src/crimson/os/seastore/random_block_manager/block_rb_manager.h
ceph/src/crimson/os/seastore/random_block_manager/nvme_block_device.cc
ceph/src/crimson/os/seastore/random_block_manager/nvme_block_device.h
ceph/src/crimson/os/seastore/random_block_manager/rbm_device.cc
ceph/src/crimson/os/seastore/random_block_manager/rbm_device.h
ceph/src/crimson/os/seastore/record_scanner.cc [new file with mode: 0644]
ceph/src/crimson/os/seastore/record_scanner.h [new file with mode: 0644]
ceph/src/crimson/os/seastore/root_block.h
ceph/src/crimson/os/seastore/seastore.cc
ceph/src/crimson/os/seastore/seastore.h
ceph/src/crimson/os/seastore/seastore_types.cc
ceph/src/crimson/os/seastore/seastore_types.h
ceph/src/crimson/os/seastore/segment_manager.cc
ceph/src/crimson/os/seastore/segment_manager.h
ceph/src/crimson/os/seastore/segment_manager/zbd.cc [new file with mode: 0644]
ceph/src/crimson/os/seastore/segment_manager/zbd.h [new file with mode: 0644]
ceph/src/crimson/os/seastore/segment_manager/zns.cc [deleted file]
ceph/src/crimson/os/seastore/segment_manager/zns.h [deleted file]
ceph/src/crimson/os/seastore/segment_manager_group.cc
ceph/src/crimson/os/seastore/segment_manager_group.h
ceph/src/crimson/os/seastore/transaction_manager.cc
ceph/src/crimson/os/seastore/transaction_manager.h
ceph/src/crimson/osd/CMakeLists.txt
ceph/src/crimson/osd/heartbeat.cc
ceph/src/crimson/osd/heartbeat.h
ceph/src/crimson/osd/lsan_suppressions.cc [new file with mode: 0644]
ceph/src/crimson/osd/main.cc
ceph/src/crimson/osd/main_config_bootstrap_helpers.cc
ceph/src/crimson/osd/object_context_loader.cc
ceph/src/crimson/osd/object_context_loader.h
ceph/src/crimson/osd/osd.cc
ceph/src/crimson/osd/osd.h
ceph/src/crimson/osd/osd_meta.cc
ceph/src/crimson/osd/osd_operations/background_recovery.cc
ceph/src/crimson/osd/osd_operations/background_recovery.h
ceph/src/crimson/osd/osd_operations/client_request.cc
ceph/src/crimson/osd/osd_operations/client_request.h
ceph/src/crimson/osd/osd_operations/internal_client_request.cc
ceph/src/crimson/osd/osd_operations/internal_client_request.h
ceph/src/crimson/osd/osd_operations/logmissing_request.cc
ceph/src/crimson/osd/osd_operations/logmissing_request.h
ceph/src/crimson/osd/osd_operations/logmissing_request_reply.cc
ceph/src/crimson/osd/osd_operations/logmissing_request_reply.h
ceph/src/crimson/osd/osd_operations/peering_event.cc
ceph/src/crimson/osd/osd_operations/peering_event.h
ceph/src/crimson/osd/osd_operations/pg_advance_map.cc
ceph/src/crimson/osd/osd_operations/pg_advance_map.h
ceph/src/crimson/osd/osd_operations/replicated_request.cc
ceph/src/crimson/osd/osd_operations/replicated_request.h
ceph/src/crimson/osd/osd_operations/snaptrim_event.cc
ceph/src/crimson/osd/osd_operations/snaptrim_event.h
ceph/src/crimson/osd/osdmap_gate.cc
ceph/src/crimson/osd/pg.cc
ceph/src/crimson/osd/pg.h
ceph/src/crimson/osd/pg_backend.cc
ceph/src/crimson/osd/pg_map.h
ceph/src/crimson/osd/pg_shard_manager.cc
ceph/src/crimson/osd/pg_shard_manager.h
ceph/src/crimson/osd/shard_services.cc
ceph/src/crimson/osd/shard_services.h
ceph/src/crimson/osd/state.h
ceph/src/crimson/osd/watch.cc
ceph/src/crimson/osd/watch.h
ceph/src/crimson/tools/CMakeLists.txt
ceph/src/crimson/tools/perf_async_msgr.cc
ceph/src/crimson/tools/perf_crimson_msgr.cc
ceph/src/exporter/DaemonMetricCollector.cc
ceph/src/exporter/DaemonMetricCollector.h
ceph/src/include/ceph_fs.h
ceph/src/include/cephfs/libcephfs.h
ceph/src/include/compat.h
ceph/src/include/rados.h
ceph/src/include/win32/fs_compat.h
ceph/src/libcephfs.cc
ceph/src/libcephsqlite.cc
ceph/src/librbd/ImageWatcher.cc
ceph/src/librbd/ManagedLock.cc
ceph/src/librbd/mirror/snapshot/CreatePrimaryRequest.cc
ceph/src/librbd/operation/SnapshotRemoveRequest.cc
ceph/src/mds/BatchOp.h
ceph/src/mds/CDentry.cc
ceph/src/mds/CDentry.h
ceph/src/mds/CDir.cc
ceph/src/mds/CDir.h
ceph/src/mds/CInode.cc
ceph/src/mds/CInode.h
ceph/src/mds/Capability.cc
ceph/src/mds/Capability.h
ceph/src/mds/FSMap.h
ceph/src/mds/FSMapUser.cc
ceph/src/mds/FSMapUser.h
ceph/src/mds/Locker.cc
ceph/src/mds/MDCache.cc
ceph/src/mds/MDCache.h
ceph/src/mds/MDLog.cc
ceph/src/mds/MDSAuthCaps.cc
ceph/src/mds/MDSAuthCaps.h
ceph/src/mds/MDSCacheObject.h
ceph/src/mds/MDSDaemon.cc
ceph/src/mds/MDSDaemon.h
ceph/src/mds/MDSRank.cc
ceph/src/mds/MDSRank.h
ceph/src/mds/Migrator.cc
ceph/src/mds/Mutation.cc
ceph/src/mds/Mutation.h
ceph/src/mds/ScrubHeader.h
ceph/src/mds/ScrubStack.cc
ceph/src/mds/ScrubStack.h
ceph/src/mds/Server.cc
ceph/src/mds/Server.h
ceph/src/mds/SessionMap.cc
ceph/src/mds/SessionMap.h
ceph/src/mds/SimpleLock.cc
ceph/src/mds/SimpleLock.h
ceph/src/mds/SnapRealm.cc
ceph/src/mds/StrayManager.cc
ceph/src/mds/cephfs_features.cc
ceph/src/mds/cephfs_features.h
ceph/src/mds/mdstypes.cc
ceph/src/mds/mdstypes.h
ceph/src/messages/MClientRequest.h
ceph/src/messages/MDentryUnlink.h
ceph/src/mgr/ActivePyModules.cc
ceph/src/mgr/ActivePyModules.h
ceph/src/mgr/BaseMgrModule.cc
ceph/src/mgr/DaemonServer.cc
ceph/src/mgr/DaemonServer.h
ceph/src/mgr/Mgr.cc
ceph/src/mgr/MgrClient.cc
ceph/src/mgr/PyFormatter.cc
ceph/src/mgr/PyFormatter.h
ceph/src/mgr/PyModuleRegistry.h
ceph/src/mon/AuthMonitor.cc
ceph/src/mon/ConfigMonitor.cc
ceph/src/mon/ElectionLogic.cc
ceph/src/mon/FSCommands.cc
ceph/src/mon/MDSMonitor.cc
ceph/src/mon/MonClient.cc
ceph/src/mon/MonCommands.h
ceph/src/mon/MonMap.cc
ceph/src/mon/MonOpRequest.h
ceph/src/mon/Monitor.cc
ceph/src/mon/Monitor.h
ceph/src/mon/OSDMonitor.cc
ceph/src/mon/PGMap.cc
ceph/src/msg/Dispatcher.h
ceph/src/msg/Message.cc
ceph/src/msg/Message.h
ceph/src/msg/async/AsyncConnection.cc
ceph/src/msg/async/AsyncConnection.h
ceph/src/msg/async/ProtocolV1.cc
ceph/src/msg/async/ProtocolV2.cc
ceph/src/msg/async/Stack.h
ceph/src/os/bluestore/AvlAllocator.cc
ceph/src/os/bluestore/BlueFS.cc
ceph/src/os/bluestore/BlueStore.cc
ceph/src/os/bluestore/BtreeAllocator.cc
ceph/src/os/bluestore/StupidAllocator.cc
ceph/src/os/bluestore/StupidAllocator.h
ceph/src/os/bluestore/bluestore_tool.cc
ceph/src/os/bluestore/fastbmap_allocator_impl.cc
ceph/src/osd/OSD.cc
ceph/src/osd/OSD.h
ceph/src/osd/OSDMap.cc
ceph/src/osd/OpRequest.cc
ceph/src/osd/OpRequest.h
ceph/src/osd/object_state_fmt.h [new file with mode: 0644]
ceph/src/osd/scheduler/mClockScheduler.cc
ceph/src/osd/scheduler/mClockScheduler.h
ceph/src/perfglue/CMakeLists.txt
ceph/src/pybind/cephfs/c_cephfs.pxd
ceph/src/pybind/cephfs/cephfs.pyx
ceph/src/pybind/cephfs/mock_cephfs.pxi
ceph/src/pybind/mgr/ceph_module.pyi
ceph/src/pybind/mgr/cephadm/agent.py
ceph/src/pybind/mgr/cephadm/exchange.py [new file with mode: 0644]
ceph/src/pybind/mgr/cephadm/inventory.py
ceph/src/pybind/mgr/cephadm/migrations.py
ceph/src/pybind/mgr/cephadm/module.py
ceph/src/pybind/mgr/cephadm/schedule.py
ceph/src/pybind/mgr/cephadm/serve.py
ceph/src/pybind/mgr/cephadm/services/cephadmservice.py
ceph/src/pybind/mgr/cephadm/services/ingress.py
ceph/src/pybind/mgr/cephadm/services/monitoring.py
ceph/src/pybind/mgr/cephadm/services/nfs.py
ceph/src/pybind/mgr/cephadm/services/nvmeof.py [new file with mode: 0644]
ceph/src/pybind/mgr/cephadm/services/osd.py
ceph/src/pybind/mgr/cephadm/ssh.py
ceph/src/pybind/mgr/cephadm/templates/services/ingress/haproxy.cfg.j2
ceph/src/pybind/mgr/cephadm/templates/services/ingress/keepalived.conf.j2
ceph/src/pybind/mgr/cephadm/templates/services/nfs/ganesha.conf.j2
ceph/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 [new file with mode: 0644]
ceph/src/pybind/mgr/cephadm/tests/test_cephadm.py
ceph/src/pybind/mgr/cephadm/tests/test_services.py
ceph/src/pybind/mgr/cephadm/tests/test_ssh.py
ceph/src/pybind/mgr/cephadm/tests/test_tuned_profiles.py
ceph/src/pybind/mgr/cephadm/tests/test_upgrade.py
ceph/src/pybind/mgr/cephadm/tuned_profiles.py
ceph/src/pybind/mgr/cephadm/upgrade.py
ceph/src/pybind/mgr/cephadm/utils.py
ceph/src/pybind/mgr/dashboard/ci/cephadm/run-cephadm-e2e-tests.sh
ceph/src/pybind/mgr/dashboard/controllers/cephfs.py
ceph/src/pybind/mgr/dashboard/controllers/cluster.py
ceph/src/pybind/mgr/dashboard/controllers/daemon.py
ceph/src/pybind/mgr/dashboard/controllers/host.py
ceph/src/pybind/mgr/dashboard/controllers/perf_counters.py
ceph/src/pybind/mgr/dashboard/controllers/prometheus.py
ceph/src/pybind/mgr/dashboard/controllers/rbd.py
ceph/src/pybind/mgr/dashboard/controllers/rbd_mirroring.py
ceph/src/pybind/mgr/dashboard/controllers/rgw.py
ceph/src/pybind/mgr/dashboard/frontend/.npmrc
ceph/src/pybind/mgr/dashboard/frontend/CMakeLists.txt
ceph/src/pybind/mgr/dashboard/frontend/angular.json
ceph/src/pybind/mgr/dashboard/frontend/cypress.config.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/cluster/hosts.po.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/cluster/logs.po.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/01-global.feature.po.ts [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/forms-helper.feature.po.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/global.feature.po.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/table-helper.feature.po.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/urls.po.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.e2e-spec.feature [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.e2e-spec.ts [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.po.ts [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/subvolume-groups.e2e-spec.feature [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/subvolumes.e2e-spec.feature [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/orchestrator/01-hosts.e2e-spec.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/orchestrator/workflow/02-create-cluster-add-host.feature
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/buckets.po.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/ui/dashboard-v3.e2e-spec.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/ui/notification.e2e-spec.ts
ceph/src/pybind/mgr/dashboard/frontend/cypress/support/commands.ts
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/119.066087561586659c.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/25.9d84971ea743706b.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/3rdpartylicenses.txt
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/43.cf51dac96ed4b14e.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/543.eec5c8f9f29060da.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/803.08339784f3bb5d16.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/95.1ae8f43a396d3fea.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/index.html
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.871e04c0fd27227d.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.8be028f171baab96.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.374f1f989f34e1be.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.4b60b22744014b0b.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.4bd595c16d7c473d.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.a53144ca583f6e2c.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.177a7ad3f45b4499.js [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.cfd741a72b67f696.js [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.5f6140b407c420b8.css [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.84a45510313e718c.css [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/jest.config.cjs
ceph/src/pybind/mgr/dashboard/frontend/package-lock.json
ceph/src/pybind/mgr/dashboard/frontend/package.json
ceph/src/pybind/mgr/dashboard/frontend/src/app/app-routing.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-setting/iscsi-setting.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-discovery-modal/iscsi-target-discovery-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-form/iscsi-target-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-image-settings-modal/iscsi-target-image-settings-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/iscsi-target-iqn-settings-modal/iscsi-target-iqn-settings-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-create-modal/bootstrap-create-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/bootstrap-import-modal/bootstrap-import-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/image-list/image-list.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/image-list/image-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/overview/overview.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-mode-modal/pool-edit-mode-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/mirroring/pool-edit-peer-modal/pool-edit-peer-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-configuration-form/rbd-configuration-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-feature.interface.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-list/rbd-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-namespace-form/rbd-namespace-form-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-form/rbd-snapshot-form-modal.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-form/rbd-snapshot-form-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-actions.model.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-list.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-snapshot-list/rbd-snapshot-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-directories/cephfs-directories.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-list/cephfs-list.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-list/cephfs-list.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-list/cephfs-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-tabs/cephfs-tabs.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/cluster.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/configuration/configuration-form/configuration-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster-review.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/create-cluster/create-cluster.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/host-form/host-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/hosts/hosts.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/logs/logs.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-indiv-modal/osd-flags-indiv-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-flags-modal/osd-flags-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-form/osd-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-list/osd-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-recv-speed-modal/osd-recv-speed-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/osd/osd-scrub-modal/osd-scrub-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/rules-list/rules-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-matcher-modal/silence-matcher-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-form/service-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-form/service-form.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/service-form/service-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/services/services.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.html [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.scss [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.spec.ts [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.ts [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.html [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.scss [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.spec.ts [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.ts [deleted file]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard-area-chart/dashboard-area-chart.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard-area-chart/dashboard-area-chart.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard-area-chart/dashboard-area-chart.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard-pie/dashboard-pie.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard-pie/dashboard-pie.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard-time-selector/dashboard-time-selector.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard-time-selector/dashboard-time-selector.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard-v3.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard/dashboard-v3.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard/dashboard-v3.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard/dashboard-v3.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/dashboard/dashboard-v3.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health-pie/health-pie.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard/health/health.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form-client/nfs-form-client.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/nfs/nfs-form/nfs-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/pool-form/pool-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-details/rgw-bucket-details.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-bucket-list/rgw-bucket-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-card-popover.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-form/rgw-user-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-list/rgw-user-list.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-user-tabs/rgw-user-tabs.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/shared/feedback/feedback.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/login-password-form/login-password-form.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/login/login.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/login/login.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/role-form/role-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-password-form/user-password-form.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/error/error.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/error/error.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/layouts/workbench-layout/workbench-layout.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/layouts/workbench-layout/workbench-layout.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/navigation/navigation/navigation.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/core/navigation/navigation/navigation.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume-group.service.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume-group.service.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume.service.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume.service.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs.service.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/daemon.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/host.service.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/host.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/prometheus.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rbd.service.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-bucket.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-daemon.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-multisite.service.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zone.service.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zone.service.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zonegroup.service.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zonegroup.service.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/upgrade.service.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/upgrade.service.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/alert-panel/alert-panel.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/alert-panel/alert-panel.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/back-button/back-button.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/cd-label/cd-label.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/cd-label/cd-label.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/cd-label/cd-label.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/components.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/config-option/config-option.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/confirmation-modal/confirmation-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/copy2clipboard-button/copy2clipboard-button.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/copy2clipboard-button/copy2clipboard-button.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/date-time-picker/date-time-picker.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-button-panel/form-button-panel.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/form-modal/form-modal.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/select/select.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/submit-button/submit-button.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/usage-bar/usage-bar.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/usage-bar/usage-bar.component.scss
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/usage-bar/usage-bar.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/constants/app.constants.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.html [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.scss [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/datatable.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-pagination/table-pagination.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table/table.component.html
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table/table.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/dimless-binary.directive.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-control.directive.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/ng-bootstrap-form-validation/cd-form-validation.directive.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/stateful-tab.directive.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/directives/stateful-tab.directive.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/enum/cell-template.enum.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/enum/dashboard-promqls.enum.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/enum/health-icon.enum.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/enum/icons.enum.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-builder.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-form-group.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/cd-validators.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/crud-form/crud-form.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/crud-form/crud-form.component.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/crud-form/formly-array-type/formly-array-type.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/crud-form/formly-file-type/formly-file-type.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/crud-form/formly-input-type/formly-input-type.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/crud-form/formly-input-wrapper/formly-input-wrapper.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/crud-form/formly-object-type/formly-object-type.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/forms/crud-form/formly-textarea-type/formly-textarea-type.component.spec.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolume-group.model.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolume.model.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolumegroup.model.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/service.interface.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/upgrade.interface.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/dimless-binary-per-second.pipe.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/dimless-binary.pipe.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/dimless.pipe.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/octal-to-human-readable.pipe.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/octal-to-human-readable.pipe.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/path.pipe.spec.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/path.pipe.ts [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/pipes.module.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/relative-date.pipe.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/doc.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/formatter.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/module-status-guard.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/number-formatter.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/prometheus-alert.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/services/task-message.service.ts
ceph/src/pybind/mgr/dashboard/frontend/src/setupJest.ts
ceph/src/pybind/mgr/dashboard/frontend/src/styles.scss
ceph/src/pybind/mgr/dashboard/frontend/src/styles/defaults/_bootstrap-defaults.scss
ceph/src/pybind/mgr/dashboard/frontend/src/testing/unit-test-helper.ts
ceph/src/pybind/mgr/dashboard/frontend/tsconfig.json
ceph/src/pybind/mgr/dashboard/module.py
ceph/src/pybind/mgr/dashboard/openapi.yaml
ceph/src/pybind/mgr/dashboard/plugins/ttl_cache.py
ceph/src/pybind/mgr/dashboard/requirements-test.txt
ceph/src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh
ceph/src/pybind/mgr/dashboard/services/auth.py
ceph/src/pybind/mgr/dashboard/services/ceph_service.py
ceph/src/pybind/mgr/dashboard/services/cluster.py
ceph/src/pybind/mgr/dashboard/services/orchestrator.py
ceph/src/pybind/mgr/dashboard/services/rbd.py
ceph/src/pybind/mgr/dashboard/services/rgw_client.py
ceph/src/pybind/mgr/dashboard/settings.py
ceph/src/pybind/mgr/dashboard/tests/test_cache.py [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/tests/test_cluster_upgrade.py [new file with mode: 0644]
ceph/src/pybind/mgr/dashboard/tests/test_daemon.py
ceph/src/pybind/mgr/dashboard/tests/test_host.py
ceph/src/pybind/mgr/dashboard/tests/test_prometheus.py
ceph/src/pybind/mgr/dashboard/tests/test_rgw.py
ceph/src/pybind/mgr/dashboard/tests/test_rgw_client.py
ceph/src/pybind/mgr/devicehealth/module.py
ceph/src/pybind/mgr/influx/module.py
ceph/src/pybind/mgr/mgr_module.py
ceph/src/pybind/mgr/mgr_util.py
ceph/src/pybind/mgr/nfs/cluster.py
ceph/src/pybind/mgr/orchestrator/_interface.py
ceph/src/pybind/mgr/orchestrator/module.py
ceph/src/pybind/mgr/pg_autoscaler/module.py
ceph/src/pybind/mgr/pg_autoscaler/tests/test_overlapping_roots.py
ceph/src/pybind/mgr/prometheus/module.py
ceph/src/pybind/mgr/rbd_support/mirror_snapshot_schedule.py
ceph/src/pybind/mgr/rbd_support/perf.py
ceph/src/pybind/mgr/rbd_support/trash_purge_schedule.py
ceph/src/pybind/mgr/restful/api/perf.py
ceph/src/pybind/mgr/rgw/module.py
ceph/src/pybind/mgr/rook/ci/Dockerfile [new file with mode: 0644]
ceph/src/pybind/mgr/rook/ci/run-rook-e2e-tests.sh [new file with mode: 0755]
ceph/src/pybind/mgr/rook/ci/scripts/bootstrap-rook-cluster.sh [new file with mode: 0755]
ceph/src/pybind/mgr/rook/ci/tests/features/rook.feature [new file with mode: 0644]
ceph/src/pybind/mgr/rook/ci/tests/features/steps/implementation.py [new file with mode: 0644]
ceph/src/pybind/mgr/rook/ci/tests/features/steps/utils.py [new file with mode: 0644]
ceph/src/pybind/mgr/rook/module.py
ceph/src/pybind/mgr/rook/rook_cluster.py
ceph/src/pybind/mgr/rook/tests/fixtures.py [new file with mode: 0644]
ceph/src/pybind/mgr/rook/tests/test_rook.py [new file with mode: 0644]
ceph/src/pybind/mgr/snap_schedule/fs/schedule_client.py
ceph/src/pybind/mgr/snap_schedule/module.py
ceph/src/pybind/mgr/snap_schedule/tests/fs/test_schedule_client.py
ceph/src/pybind/mgr/telegraf/module.py
ceph/src/pybind/mgr/telemetry/module.py
ceph/src/pybind/mgr/tox.ini
ceph/src/pybind/mgr/volumes/fs/async_job.py
ceph/src/pybind/mgr/volumes/fs/fs_util.py
ceph/src/pybind/mgr/volumes/fs/operations/volume.py
ceph/src/pybind/mgr/volumes/fs/volume.py
ceph/src/pybind/rbd/rbd.pyx
ceph/src/python-common/ceph/deployment/drive_group.py
ceph/src/python-common/ceph/deployment/drive_selection/selector.py
ceph/src/python-common/ceph/deployment/service_spec.py
ceph/src/python-common/ceph/tests/test_drive_group.py
ceph/src/python-common/ceph/tests/test_service_spec.py
ceph/src/rgw/driver/rados/rgw_bucket.cc
ceph/src/rgw/driver/rados/rgw_bucket.h
ceph/src/rgw/driver/rados/rgw_cr_rados.cc
ceph/src/rgw/driver/rados/rgw_notify.cc
ceph/src/rgw/driver/rados/rgw_notify.h
ceph/src/rgw/driver/rados/rgw_obj_manifest.h
ceph/src/rgw/driver/rados/rgw_pubsub_push.cc
ceph/src/rgw/driver/rados/rgw_rados.cc
ceph/src/rgw/driver/rados/rgw_rados.h
ceph/src/rgw/driver/rados/rgw_sal_rados.cc
ceph/src/rgw/driver/rados/rgw_sal_rados.h
ceph/src/rgw/rgw_admin.cc
ceph/src/rgw/rgw_amqp.cc
ceph/src/rgw/rgw_amqp.h
ceph/src/rgw/rgw_auth_keystone.cc
ceph/src/rgw/rgw_auth_s3.cc
ceph/src/rgw/rgw_auth_s3.h
ceph/src/rgw/rgw_common.cc
ceph/src/rgw/rgw_common.h
ceph/src/rgw/rgw_cors.h
ceph/src/rgw/rgw_crypt.cc
ceph/src/rgw/rgw_crypt.h
ceph/src/rgw/rgw_env.cc
ceph/src/rgw/rgw_formats.cc
ceph/src/rgw/rgw_formats.h
ceph/src/rgw/rgw_kafka.cc
ceph/src/rgw/rgw_kms.cc
ceph/src/rgw/rgw_object_lock.cc
ceph/src/rgw/rgw_op.cc
ceph/src/rgw/rgw_opa.cc
ceph/src/rgw/rgw_pubsub.cc
ceph/src/rgw/rgw_pubsub.h
ceph/src/rgw/rgw_rest_pubsub.cc
ceph/src/rgw/rgw_rest_s3.cc
ceph/src/rgw/rgw_rest_swift.cc
ceph/src/rgw/rgw_s3select.cc
ceph/src/rgw/rgw_sal.h
ceph/src/rgw/rgw_sal_daos.cc
ceph/src/rgw/rgw_sal_daos.h
ceph/src/rgw/rgw_sal_dbstore.cc
ceph/src/rgw/rgw_sal_dbstore.h
ceph/src/rgw/rgw_sal_filter.h
ceph/src/rgw/rgw_sal_motr.cc
ceph/src/rgw/rgw_sal_motr.h
ceph/src/rgw/rgw_swift_auth.cc
ceph/src/rgw/services/svc_notify.cc
ceph/src/rgw/services/svc_notify.h
ceph/src/rgw/services/svc_zone.cc
ceph/src/rgw/services/svc_zone.h
ceph/src/s3select/TPCDS/ddl/create_tpcds_tables.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/README.md [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query1.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query10.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query11.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query12.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query13.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query14.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query15.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query16.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query17.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query18.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query19.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query2.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query20.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query21.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query22.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query23.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query24.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query25.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query26.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query27.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query28.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query29.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query3.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query30.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query31.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query32.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query33.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query34.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query35.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query36.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query37.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query38.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query39.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query4.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query40.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query41.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query42.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query43.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query44.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query45.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query46.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query47.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query48.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query49.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query5.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query50.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query51.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query52.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query53.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query54.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query55.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query56.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query57.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query58.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query59.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query6.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query60.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query61.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query62.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query63.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query64.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query65.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query66.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query67.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query68.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query69.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query7.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query70.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query71.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query72.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query73.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query74.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query75.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query76.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query77.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query78.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query79.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query8.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query80.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query81.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query82.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query83.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query84.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query85.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query86.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query87.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query88.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query89.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query9.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query90.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query91.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query92.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query93.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query94.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query95.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query96.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query97.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query98.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/sample-queries-tpcds/query99.sql [new file with mode: 0644]
ceph/src/s3select/TPCDS/tpcds_functions.bash [new file with mode: 0644]
ceph/src/s3select/container/trino/hms_trino.yaml [new file with mode: 0644]
ceph/src/s3select/container/trino/run_trino_on_ceph.bash [new file with mode: 0644]
ceph/src/s3select/container/trino/trino/catalog/hive.properties [new file with mode: 0644]
ceph/src/s3select/container/trino/trino/config.properties [new file with mode: 0644]
ceph/src/s3select/container/trino/trino/jvm.config [new file with mode: 0644]
ceph/src/s3select/container/trino/trino/log.properties [new file with mode: 0644]
ceph/src/s3select/container/trino/trino/node.properties [new file with mode: 0644]
ceph/src/s3select/example/s3select_example.cpp
ceph/src/s3select/include/s3select.h
ceph/src/s3select/include/s3select_functions.h
ceph/src/s3select/include/s3select_json_parser.h
ceph/src/s3select/include/s3select_oper.h
ceph/src/s3select/test/s3select_test.cpp
ceph/src/test/cli/radosgw-admin/help.t
ceph/src/test/crimson/CMakeLists.txt
ceph/src/test/crimson/seastore/CMakeLists.txt
ceph/src/test/crimson/seastore/nvmedevice/test_nvmedevice.cc
ceph/src/test/crimson/seastore/onode_tree/test_fltree_onode_manager.cc
ceph/src/test/crimson/seastore/onode_tree/test_staged_fltree.cc
ceph/src/test/crimson/seastore/test_btree_lba_manager.cc
ceph/src/test/crimson/seastore/test_cbjournal.cc
ceph/src/test/crimson/seastore/test_collection_manager.cc
ceph/src/test/crimson/seastore/test_object_data_handler.cc
ceph/src/test/crimson/seastore/test_omap_manager.cc
ceph/src/test/crimson/seastore/test_seastore.cc
ceph/src/test/crimson/seastore/test_transaction_manager.cc
ceph/src/test/crimson/seastore/transaction_manager_test_state.h
ceph/src/test/crimson/test_alien_echo.cc
ceph/src/test/crimson/test_messenger.cc
ceph/src/test/crimson/test_messenger_thrash.cc
ceph/src/test/crimson/test_monc.cc
ceph/src/test/crimson/test_socket.cc
ceph/src/test/exporter/CMakeLists.txt
ceph/src/test/exporter/test_exporter.cc
ceph/src/test/fio/fio_ceph_messenger.cc
ceph/src/test/libcephfs/CMakeLists.txt
ceph/src/test/libcephfs/multiclient.cc
ceph/src/test/libcephfs/snapdiff.cc [new file with mode: 0644]
ceph/src/test/librados/misc.cc
ceph/src/test/librbd/fsx.cc
ceph/src/test/librbd/mirror/snapshot/test_mock_CreatePrimaryRequest.cc
ceph/src/test/librbd/operation/test_mock_SnapshotRemoveRequest.cc
ceph/src/test/mds/TestMDSAuthCaps.cc
ceph/src/test/msgr/perf_msgr_client.cc
ceph/src/test/msgr/perf_msgr_server.cc
ceph/src/test/msgr/test_msgr.cc
ceph/src/test/objectstore/Allocator_test.cc
ceph/src/test/objectstore/fastbmap_allocator_test.cc
ceph/src/test/objectstore/store_test.cc
ceph/src/test/osd/TestOSDMap.cc
ceph/src/test/pybind/test_cephfs.py
ceph/src/test/rbd_mirror/image_replayer/test_mock_BootstrapRequest.cc
ceph/src/test/rbd_mirror/test_mock_ImageReplayer.cc
ceph/src/test/rgw/bucket_notification/test_bn.py
ceph/src/test/rgw/test_rgw_amqp.cc
ceph/src/test/rgw/test_rgw_crypto.cc
ceph/src/tools/cephfs/JournalTool.cc
ceph/src/tools/cephfs_mirror/FSMirror.h
ceph/src/tools/cephfs_mirror/InstanceWatcher.cc
ceph/src/tools/cephfs_mirror/InstanceWatcher.h
ceph/src/tools/cephfs_mirror/Mirror.cc
ceph/src/tools/cephfs_mirror/Mirror.h
ceph/src/tools/cephfs_mirror/MirrorWatcher.cc
ceph/src/tools/cephfs_mirror/MirrorWatcher.h
ceph/src/tools/cephfs_mirror/PeerReplayer.cc
ceph/src/tools/cephfs_mirror/PeerReplayer.h
ceph/src/tools/rados/rados.cc
ceph/src/tools/rbd_mirror/ImageReplayer.cc
ceph/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc
ceph/src/tools/rbd_nbd/rbd-nbd.cc
ceph/src/vstart.sh

index 834ef742832fdeed910f921431a5a710559b9a6d..494a3f23e06a50ea7b2fb76220694b5f191793e1 100644 (file)
@@ -22,7 +22,9 @@
 ## Contribution Guidelines
 - To sign and title your commits, please refer to [Submitting Patches to Ceph](https://github.com/ceph/ceph/blob/main/SubmittingPatches.rst).
 
-- If you are submitting a fix for a stable branch (e.g. "pacific"), please refer to [Submitting Patches to Ceph - Backports](https://github.com/ceph/ceph/blob/master/SubmittingPatches-backports.rst) for the proper workflow.
+- If you are submitting a fix for a stable branch (e.g. "quincy"), please refer to [Submitting Patches to Ceph - Backports](https://github.com/ceph/ceph/blob/master/SubmittingPatches-backports.rst) for the proper workflow.
+
+- When filling out the below checklist, you may click boxes directly in the GitHub web UI.  When entering or editing the entire PR message in the GitHub web UI editor, you may also select a checklist item by adding an `x` between the brackets: `[x]`.  Spaces and capitalization matter when checking off items this way.
 
 ## Checklist
 - Tracker (select at least one)
@@ -62,4 +64,5 @@
 - `jenkins test ceph-volume all`
 - `jenkins test ceph-volume tox`
 - `jenkins test windows`
+- `jenkins test rook e2e`
 </details>
index 91f4923c5791f2858e2a31f8fdf7ea8d0872b5a2..47a239d2be189a3c5e736f3a38e8a21090c5c25f 100644 (file)
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.16)
 
 project(ceph
-  VERSION 18.2.0
+  VERSION 18.2.1
   LANGUAGES CXX C ASM)
 
 cmake_policy(SET CMP0028 NEW)
index 5113444f99cb585972b1238d447e4340a14abfcc..03520c97b5e91983ec34b8f2316c65970dfd325c 100644 (file)
@@ -1,3 +1,53 @@
+>=19.0.0
+
+* RGW: S3 multipart uploads using Server-Side Encryption now replicate correctly in
+  multi-site. Previously, the replicas of such objects were corrupted on decryption.
+  A new tool, ``radosgw-admin bucket resync encrypted multipart``, can be used to
+  identify these original multipart uploads. The ``LastModified`` timestamp of any
+  identified object is incremented by 1ns to cause peer zones to replicate it again.
+  For multi-site deployments that make any use of Server-Side Encryption, we
+  recommended running this command against every bucket in every zone after all
+  zones have upgraded.
+* CEPHFS: MDS evicts clients which are not advancing their request tids which causes
+  a large buildup of session metadata resulting in the MDS going read-only due to
+  the RADOS operation exceeding the size threshold. `mds_session_metadata_threshold`
+  config controls the maximum size that a (encoded) session metadata can grow.
+* RGW: New tools have been added to radosgw-admin for identifying and
+  correcting issues with versioned bucket indexes. Historical bugs with the
+  versioned bucket index transaction workflow made it possible for the index
+  to accumulate extraneous "book-keeping" olh entries and plain placeholder
+  entries. In some specific scenarios where clients made concurrent requests
+  referencing the same object key, it was likely that a lot of extra index
+  entries would accumulate. When a significant number of these entries are
+  present in a single bucket index shard, they can cause high bucket listing
+  latencies and lifecycle processing failures. To check whether a versioned
+  bucket has unnecessary olh entries, users can now run ``radosgw-admin
+  bucket check olh``. If the ``--fix`` flag is used, the extra entries will
+  be safely removed. A distinct issue from the one described thus far, it is
+  also possible that some versioned buckets are maintaining extra unlinked
+  objects that are not listable from the S3/ Swift APIs. These extra objects
+  are typically a result of PUT requests that exited abnormally, in the middle
+  of a bucket index transaction - so the client would not have received a
+  successful response. Bugs in prior releases made these unlinked objects easy
+  to reproduce with any PUT request that was made on a bucket that was actively
+  resharding. Besides the extra space that these hidden, unlinked objects
+  consume, there can be another side effect in certain scenarios, caused by
+  the nature of the failure mode that produced them, where a client of a bucket
+  that was a victim of this bug may find the object associated with the key to
+  be in an inconsistent state. To check whether a versioned bucket has unlinked
+  entries, users can now run ``radosgw-admin bucket check unlinked``. If the
+  ``--fix`` flag is used, the unlinked objects will be safely removed. Finally,
+  a third issue made it possible for versioned bucket index stats to be
+  accounted inaccurately. The tooling for recalculating versioned bucket stats
+  also had a bug, and was not previously capable of fixing these inaccuracies.
+  This release resolves those issues and users can now expect that the existing
+  ``radosgw-admin bucket check`` command will produce correct results. We
+  recommend that users with versioned buckets, especially those that existed
+  on prior releases, use these new tools to check whether their buckets are
+  affected and to clean them up accordingly.
+* mgr/snap-schedule: For clusters with multiple CephFS file systems, all the
+  snap-schedule commands now expect the '--fs' argument.
+
 >=18.0.0
 
 * The RGW policy parser now rejects unknown principals by default. If you are
     https://docs.ceph.com/en/reef/rados/configuration/mclock-config-ref/
 * CEPHFS: After recovering a Ceph File System post following the disaster recovery
   procedure, the recovered files under `lost+found` directory can now be deleted.
+    https://docs.ceph.com/en/latest/rados/configuration/mclock-config-ref/
+* mgr/snap_schedule: The snap-schedule mgr module now retains one less snapshot
+  than the number mentioned against the config tunable `mds_max_snaps_per_dir`
+  so that a new snapshot can be created and retained during the next schedule
+  run.
 
 >=17.2.1
 
index 1f00c5dd1d44c02ff383788bb0c8f942c1b1cacc..7cb2c240f34b4f95342cb287f447eea770b5b2d3 100644 (file)
@@ -1,23 +1,25 @@
 # Ceph - a scalable distributed storage system
 
-Please see https://ceph.com/ for current info.
+See https://ceph.com/ for current information about Ceph.
 
 
 ## Contributing Code
 
-Most of Ceph is dual licensed under the LGPL version 2.1 or 3.0.  Some
-miscellaneous code is under a BSD-style license or is public domain.
-The documentation is licensed under Creative Commons
-Attribution Share Alike 3.0 (CC-BY-SA-3.0).  There are a handful of headers
-included here that are licensed under the GPL.  Please see the file
-COPYING for a full inventory of licenses by file.
+Most of Ceph is dual-licensed under the LGPL version 2.1 or 3.0. Some
+miscellaneous code is either public domain or licensed under a BSD-style
+license.
 
-Code contributions must include a valid "Signed-off-by" acknowledging
-the license for the modified or contributed file.  Please see the file
-SubmittingPatches.rst for details on what that means and on how to
-generate and submit patches.
+The Ceph documentation is licensed under Creative Commons Attribution Share
+Alike 3.0 (CC-BY-SA-3.0). 
 
-We do not require assignment of copyright to contribute code; code is
+Some headers included in the `ceph/ceph` repository are licensed under the GPL.
+See the file `COPYING` for a full inventory of licenses by file.
+
+All code contributions must include a valid "Signed-off-by" line. See the file
+`SubmittingPatches.rst` for details on this and instructions on how to generate
+and submit patches.
+
+Assignment of copyright is not required to contribute code. Code is
 contributed under the terms of the applicable license.
 
 
@@ -33,10 +35,11 @@ command on a system that has git installed:
 
        git clone https://github.com/ceph/ceph.git
 
-When the ceph/ceph repository has been cloned to your system, run the following
-command to check out the git submodules associated with the ceph/ceph
-repository: 
+When the `ceph/ceph` repository has been cloned to your system, run the
+following commands to move into the cloned `ceph/ceph` repository and to check
+out the git submodules associated with it:
 
+    cd ceph
        git submodule update --init --recursive
 
 
@@ -63,34 +66,42 @@ Install the ``python3-routes`` package:
 
 These instructions are meant for developers who are compiling the code for
 development and testing. To build binaries that are suitable for installation
-we recommend that you build .deb or .rpm packages, or refer to ``ceph.spec.in``
-or ``debian/rules`` to see which configuration options are specified for
-production builds.
+we recommend that you build `.deb` or `.rpm` packages, or refer to
+``ceph.spec.in`` or ``debian/rules`` to see which configuration options are
+specified for production builds.
 
-Build instructions:
+To build Ceph, make sure that you are in the top-level `ceph` directory that
+contains `do_cmake.sh` and `CONTRIBUTING.rst` and run the following commands:
 
        ./do_cmake.sh
        cd build
        ninja
 
-``do_cmake.sh`` defaults to creating a debug build of Ceph that can be up to 5x
-slower with some workloads. Pass ``-DCMAKE_BUILD_TYPE=RelWithDebInfo`` to
-``do_cmake.sh`` to create a non-debug release.
-
-The number of jobs used by `ninja` is derived from the number of CPU cores of
-the building host if unspecified. Use the `-j` option to limit the job number
-if the build jobs are running out of memory. On average, each job takes around
-2.5GiB memory.
-
-This assumes that you make your build directory a subdirectory of the ceph.git
-checkout. If you put it elsewhere, just point `CEPH_GIT_DIR` to the correct
-path to the checkout. Additional CMake args can be specified by setting ARGS
-before invoking ``do_cmake.sh``. See [cmake options](#cmake-options)
-for more details. For example:
+``do_cmake.sh`` by default creates a "debug build" of Ceph, which can be up to
+five times slower than a non-debug build.  Pass
+``-DCMAKE_BUILD_TYPE=RelWithDebInfo`` to ``do_cmake.sh`` to create a non-debug
+build.
+
+[Ninja](https://ninja-build.org/) is the buildsystem used by the Ceph project
+to build test builds.  The number of jobs used by `ninja` is derived from the
+number of CPU cores of the building host if unspecified. Use the `-j` option to
+limit the job number if the build jobs are running out of memory. If you
+attempt to run `ninja` and receive a message that reads `g++: fatal error:
+Killed signal terminated program cc1plus`, then you have run out of memory.
+Using the `-j` option with an argument appropriate to the hardware on which the
+`ninja` command is run is expected to result in a successful build. For example,
+to limit the job number to 3, run the command `ninja -j 3`. On average, each
+`ninja` job run in parallel needs approximately 2.5 GiB of RAM.
+
+This documentation assumes that your build directory is a subdirectory of the
+`ceph.git` checkout. If the build directory is located elsewhere, point
+`CEPH_GIT_DIR` to the correct path of the checkout. Additional CMake args can
+be specified by setting ARGS before invoking ``do_cmake.sh``.  See [cmake
+options](#cmake-options) for more details. For example:
 
     ARGS="-DCMAKE_C_COMPILER=gcc-7" ./do_cmake.sh
 
-To build only certain targets use:
+To build only certain targets, run a command of the following form:
 
        ninja [target name]
 
@@ -153,24 +164,25 @@ are committed to git.)
 
 ## Running a test cluster
 
-To run a functional test cluster,
+From the `ceph/` directory, run the following commands to launch a test Ceph
+cluster:
 
        cd build
        ninja vstart        # builds just enough to run vstart
        ../src/vstart.sh --debug --new -x --localhost --bluestore
        ./bin/ceph -s
 
-Almost all of the usual commands are available in the bin/ directory.
-For example,
+Most Ceph commands are available in the `bin/` directory. For example:
 
-       ./bin/rados -p rbd bench 30 write
        ./bin/rbd create foo --size 1000
+       ./bin/rados -p foo bench 30 write
 
-To shut down the test cluster,
+To shut down the test cluster, run the following command from the `build/`
+directory:
 
        ../src/stop.sh
 
-To start or stop individual daemons, the sysvinit script can be used:
+Use the sysvinit script to start or stop individual daemons: 
 
        ./bin/init-ceph restart osd.0
        ./bin/init-ceph stop
index 0d559f9238f38ef24acfd523c44f13903772ed74..9c5703b6e472ea01c2f3f7d258e331291123fad8 100644 (file)
 # main package definition
 #################################################################################
 Name:          ceph
-Version:       18.2.0
+Version:       18.2.1
 Release:       0%{?dist}
 %if 0%{?fedora} || 0%{?rhel}
 Epoch:         2
@@ -186,7 +186,7 @@ License:    LGPL-2.1 and LGPL-3.0 and CC-BY-SA-3.0 and GPL-2.0 and BSL-1.0 and BSD-
 Group:         System/Filesystems
 %endif
 URL:           http://ceph.com/
-Source0:       %{?_remote_tarball_prefix}ceph-18.2.0.tar.bz2
+Source0:       %{?_remote_tarball_prefix}ceph-18.2.1.tar.bz2
 %if 0%{?suse_version}
 # _insert_obs_source_lines_here
 ExclusiveArch:  x86_64 aarch64 ppc64le s390x
@@ -1292,7 +1292,7 @@ This package provides a Ceph MIB for SNMP traps.
 # common
 #################################################################################
 %prep
-%autosetup -p1 -n ceph-18.2.0
+%autosetup -p1 -n ceph-18.2.1
 
 %build
 # Disable lto on systems that do not support symver attribute
index f76511bb4420f70f928c1d06597f33bfe2db5258..44c7d4fdfc101ec7887a5240703fa055fc7c3f38 100644 (file)
@@ -1,7 +1,13 @@
-ceph (18.2.0-1jammy) jammy; urgency=medium
+ceph (18.2.1-1jammy) jammy; urgency=medium
 
 
- -- Jenkins Build Slave User <jenkins-build@braggi17.front.sepia.ceph.com>  Thu, 03 Aug 2023 18:57:50 +0000
+ -- Jenkins Build Slave User <jenkins-build@braggi13.front.sepia.ceph.com>  Mon, 11 Dec 2023 22:07:48 +0000
+
+ceph (18.2.1-1) stable; urgency=medium
+
+  * New upstream release
+
+ -- Ceph Release Team <ceph-maintainers@ceph.io>  Mon, 11 Dec 2023 21:55:36 +0000
 
 ceph (18.2.0-1) stable; urgency=medium
 
diff --git a/ceph/debian/ceph-base.docs b/ceph/debian/ceph-base.docs
deleted file mode 100644 (file)
index e845566..0000000
+++ /dev/null
@@ -1 +0,0 @@
-README
index b33f34b6b5eddb4c59a995a7cdb472e39eccf0ff..688d8141d39a29a37e0303127c336cd58a8cef3f 100644 (file)
@@ -1,3 +1,4 @@
+#!/bin/sh
 # vim: set noet ts=8:
 # postinst script for ceph-mon
 #
index 5e44548fe826177d9c78c589f0611207d334d7e5..04e33b8601f9468a94dbfeefe21fcdbea802b966 100644 (file)
@@ -1,3 +1,4 @@
+#!/bin/sh
 # vim: set noet ts=8:
 # postinst script for ceph-osd
 #
index ec635144f60048986bc560c5576355344005e6e7..48082f72f087ce7e6fa75b9c41d7387daecd447b 100644 (file)
@@ -1 +1 @@
-9
+12
index 89b3b3741eaf31634ed4d690fba091d54e35b517..837a55a371670874dc91efb835f417e63f16481a 100644 (file)
@@ -4,7 +4,7 @@ Priority: optional
 Homepage: http://ceph.com/
 Vcs-Git: git://github.com/ceph/ceph.git
 Vcs-Browser: https://github.com/ceph/ceph
-Maintainer: Ceph Maintainers <ceph-maintainers@lists.ceph.com>
+Maintainer: Ceph Maintainers <ceph-maintainers@ceph.io>
 Uploaders: Ken Dreyer <kdreyer@redhat.com>,
            Alfredo Deza <adeza@redhat.com>,
 Build-Depends: automake,
@@ -20,8 +20,7 @@ Build-Depends: automake,
                git,
                golang,
                gperf,
-               g++ (>= 7),
-               hostname <pkg.ceph.check>,
+               g++ (>= 11),
                javahelper,
                jq <pkg.ceph.check>,
                jsonnet <pkg.ceph.check>,
@@ -135,9 +134,6 @@ Package: ceph-base
 Architecture: linux-any
 Depends: binutils,
          ceph-common (= ${binary:Version}),
-         debianutils,
-         findutils,
-         grep,
          logrotate,
          parted,
          psmisc,
@@ -187,8 +183,9 @@ Description: debugging symbols for ceph-base
 
 Package: cephadm
 Architecture: linux-any
-Recommends: podman (>= 2.0.2) | docker.io
+Recommends: podman (>= 2.0.2) | docker.io | docker-ce
 Depends: lvm2,
+        python3,
         ${python3:Depends},
 Description: cephadm utility to bootstrap ceph daemons with systemd and containers
  Ceph is a massively scalable, open-source, distributed
@@ -431,7 +428,6 @@ Depends: ceph-osd (= ${binary:Version}),
          e2fsprogs,
          lvm2,
          parted,
-         util-linux,
          xfsprogs,
          ${misc:Depends},
          ${python3:Depends}
@@ -759,7 +755,7 @@ Architecture: any
 Section: debug
 Priority: extra
 Depends: libsqlite3-mod-ceph (= ${binary:Version}),
-         libsqlite3-0-dbgsym
+         libsqlite3-0-dbgsym,
          ${misc:Depends},
 Description: debugging symbols for libsqlite3-mod-ceph
  A SQLite3 VFS for storing and manipulating databases stored on Ceph's RADOS
@@ -1207,14 +1203,14 @@ Description: Java Native Interface library for CephFS Java bindings
 Package: rados-objclass-dev
 Architecture: linux-any
 Section: libdevel
-Depends: librados-dev (= ${binary:Version}) ${misc:Depends},
+Depends: librados-dev (= ${binary:Version}), ${misc:Depends},
 Description: RADOS object class development kit.
  .
  This package contains development files needed for building RADOS object class plugins.
 
 Package: cephfs-shell
 Architecture: all
-Depends: ${misc:Depends}
+Depends: ${misc:Depends},
          ${python3:Depends}
 Description: interactive shell for the Ceph distributed file system
  Ceph is a massively scalable, open-source, distributed
@@ -1227,7 +1223,7 @@ Description: interactive shell for the Ceph distributed file system
 
 Package: cephfs-top
 Architecture: all
-Depends: ${misc:Depends}
+Depends: ${misc:Depends},
          ${python3:Depends}
 Description: This package provides a top(1) like utility to display various
  filesystem metrics in realtime.
index 8375e4c4b84f51b43546de2c9abc492df88d5ba4..8dc4b9e4f49ac921f4b12a1ecc9b016ec51f750f 100644 (file)
@@ -1,6 +1,6 @@
-Format-Specification: http://anonscm.debian.org/viewvc/dep/web/deps/dep5/copyright-format.xml?revision=279&view=markup
-Name: ceph
-Maintainer: Sage Weil <sage@newdream.net>
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: ceph
+Upstream-Contact: Ceph Developers <dev@ceph.io>
 Source: http://ceph.com/
 
 Files: *
@@ -180,3 +180,553 @@ Files: src/include/timegm.h
   Copyright (C) Copyright Howard Hinnant
   Copyright (C) Copyright 2010-2011 Vicente J. Botet Escriba
   License: Boost Software License, Version 1.0
+
+License: Apache-2.0
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ .
+      http://www.apache.org/licenses/LICENSE-2.0
+ .
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ .
+ The complete text of the Apache License, Version 2.0
+ can be found in "/usr/share/common-licenses/Apache-2.0".
+
+
+License: GPL-2
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ .
+ On Debian systems, the complete text of the GNU General Public License
+ version 2 can be found in `/usr/share/common-licenses/GPL-2' file.
+
+License: GPL-2+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General Public License
+ version 2 can be found in `/usr/share/common-licenses/GPL-2'.
+
+License: GPL-3+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+ .
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ .
+ On Debian systems, the complete text of the GNU General Public
+ License version 3 can be found in `/usr/share/common-licenses/GPL-3'.
+
+License: LGPL-2.1
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2.1 as published by the Free Software Foundation.
+ .
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License can be found in `/usr/share/common-licenses/LGPL-2.1'.
+
+License: LGPL-2.1+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+ .
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License can be found in `/usr/share/common-licenses/LGPL-2.1'.
+
+License: LGPL-2+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License version 2 (or later) as published by the Free Software Foundation.
+ .
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ Lesser General Public License for more details.
+ .
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ .
+ On Debian systems, the complete text of the GNU Lesser General
+ Public License 2 can be found in `/usr/share/common-licenses/LGPL-2'.
+
+License: MIT
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ .
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+
+License: CC-BY-SA-3.0
+ Creative Commons Attribution-ShareAlike 3.0 Unported
+ ․
+ CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+ LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
+ ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
+ ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE
+ INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+ ITS USE.
+ ․
+ License
+ ․
+ THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
+ COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
+ COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
+ AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+ ․
+ BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
+ TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
+ BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
+ CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
+ CONDITIONS.
+ ․
+ 1. Definitions
+ ․
+ a. "Adaptation" means a work based upon the Work, or upon the Work and
+ other pre-existing works, such as a translation, adaptation, derivative
+ work, arrangement of music or other alterations of a literary or
+ artistic work, or phonogram or performance and includes cinematographic
+ adaptations or any other form in which the Work may be recast,
+ transformed, or adapted including in any form recognizably derived from
+ the original, except that a work that constitutes a Collection will not
+ be considered an Adaptation for the purpose of this License. For the
+ avoidance of doubt, where the Work is a musical work, performance or
+ phonogram, the synchronization of the Work in timed-relation with a
+ moving image ("synching") will be considered an Adaptation for the
+ purpose of this License.
+ ․
+ b. "Collection" means a collection of literary or artistic works, such
+ as encyclopedias and anthologies, or performances, phonograms or
+ broadcasts, or other works or subject matter other than works listed in
+ Section 1(f) below, which, by reason of the selection and arrangement of
+ their contents, constitute intellectual creations, in which the Work is
+ included in its entirety in unmodified form along with one or more other
+ contributions, each constituting separate and independent works in
+ themselves, which together are assembled into a collective whole. A work
+ that constitutes a Collection will not be considered an Adaptation (as
+ defined below) for the purposes of this License.
+ ․
+ c. "Creative Commons Compatible License" means a license that is listed
+ at http://creativecommons.org/compatiblelicenses that has been approved
+ by Creative Commons as being essentially equivalent to this License,
+ including, at a minimum, because that license: (i) contains terms that
+ have the same purpose, meaning and effect as the License Elements of
+ this License; and, (ii) explicitly permits the relicensing of
+ adaptations of works made available under that license under this
+ License or a Creative Commons jurisdiction license with the same License
+ Elements as this License.
+ ․
+ d. "Distribute" means to make available to the public the original and
+ copies of the Work or Adaptation, as appropriate, through sale or other
+ transfer of ownership.
+ ․
+ e. "License Elements" means the following high-level license attributes
+ as selected by Licensor and indicated in the title of this License:
+ Attribution, ShareAlike.
+ ․
+ f. "Licensor" means the individual, individuals, entity or entities that
+ offer(s) the Work under the terms of this License.
+ ․
+ g. "Original Author" means, in the case of a literary or artistic work,
+ the individual, individuals, entity or entities who created the Work or
+ if no individual or entity can be identified, the publisher; and in
+ addition (i) in the case of a performance the actors, singers,
+ musicians, dancers, and other persons who act, sing, deliver, declaim,
+ play in, interpret or otherwise perform literary or artistic works or
+ expressions of folklore; (ii) in the case of a phonogram the producer
+ being the person or legal entity who first fixes the sounds of a
+ performance or other sounds; and, (iii) in the case of broadcasts, the
+ organization that transmits the broadcast.
+ ․
+ h. "Work" means the literary and/or artistic work offered under the
+ terms of this License including without limitation any production in the
+ literary, scientific and artistic domain, whatever may be the mode or
+ form of its expression including digital form, such as a book, pamphlet
+ and other writing; a lecture, address, sermon or other work of the same
+ nature; a dramatic or dramatico-musical work; a choreographic work or
+ entertainment in dumb show; a musical composition with or without words;
+ a cinematographic work to which are assimilated works expressed by a
+ process analogous to cinematography; a work of drawing, painting,
+ architecture, sculpture, engraving or lithography; a photographic work
+ to which are assimilated works expressed by a process analogous to
+ photography; a work of applied art; an illustration, map, plan, sketch
+ or three-dimensional work relative to geography, topography,
+ architecture or science; a performance; a broadcast; a phonogram; a
+ compilation of data to the extent it is protected as a copyrightable
+ work; or a work performed by a variety or circus performer to the extent
+ it is not otherwise considered a literary or artistic work.
+ ․
+ i. "You" means an individual or entity exercising rights under this
+ License who has not previously violated the terms of this License with
+ respect to the Work, or who has received express permission from the
+ Licensor to exercise rights under this License despite a previous
+ violation.
+ ․
+ j. "Publicly Perform" means to perform public recitations of the Work
+ and to communicate to the public those public recitations, by any means
+ or process, including by wire or wireless means or public digital
+ performances; to make available to the public Works in such a way that
+ members of the public may access these Works from a place and at a place
+ individually chosen by them; to perform the Work to the public by any
+ means or process and the communication to the public of the performances
+ of the Work, including by public digital performance; to broadcast and
+ rebroadcast the Work by any means including signs, sounds or images.
+ ․
+ k. "Reproduce" means to make copies of the Work by any means including
+ without limitation by sound or visual recordings and the right of
+ fixation and reproducing fixations of the Work, including storage of a
+ protected performance or phonogram in digital form or other electronic
+ medium.
+ ․
+ 2. Fair Dealing Rights. Nothing in this License is intended to reduce,
+ limit, or restrict any uses free from copyright or rights arising from
+ limitations or exceptions that are provided for in connection with the
+ copyright protection under copyright law or other applicable laws.
+ ․
+ 3. License Grant. Subject to the terms and conditions of this License,
+ Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
+ perpetual (for the duration of the applicable copyright) license to
+ exercise the rights in the Work as stated below:
+ ․
+ a. to Reproduce the Work, to incorporate the Work into one or more
+ Collections, and to Reproduce the Work as incorporated in the
+ Collections;
+ ․
+ b. to create and Reproduce Adaptations provided that any such
+ Adaptation, including any translation in any medium, takes reasonable
+ steps to clearly label, demarcate or otherwise identify that changes
+ were made to the original Work. For example, a translation could be
+ marked "The original work was translated from English to Spanish," or a
+ modification could indicate "The original work has been modified.";
+ ․
+ c. to Distribute and Publicly Perform the Work including as incorporated
+ in Collections; and,
+ ․
+ d. to Distribute and Publicly Perform Adaptations.
+ ․
+ e. For the avoidance of doubt:
+ ․
+ i. Non-waivable Compulsory License Schemes. In those jurisdictions in
+ which the right to collect royalties through any statutory or compulsory
+ licensing scheme cannot be waived, the Licensor reserves the exclusive
+ right to collect such royalties for any exercise by You of the rights
+ granted under this License;
+ ․
+ ii. Waivable Compulsory License Schemes. In those jurisdictions in which
+ the right to collect royalties through any statutory or compulsory
+ licensing scheme can be waived, the Licensor waives the exclusive right
+ to collect such royalties for any exercise by You of the rights granted
+ under this License; and,
+ ․
+ iii. Voluntary License Schemes. The Licensor waives the right to collect
+ royalties, whether individually or, in the event that the Licensor is a
+ member of a collecting society that administers voluntary licensing
+ schemes, via that society, from any exercise by You of the rights
+ granted under this License.
+ ․
+ The above rights may be exercised in all media and formats whether now
+ known or hereafter devised. The above rights include the right to make
+ such modifications as are technically necessary to exercise the rights
+ in other media and formats. Subject to Section 8(f), all rights not
+ expressly granted by Licensor are hereby reserved.
+ ․
+ 4. Restrictions. The license granted in Section 3 above is expressly
+ made subject to and limited by the following restrictions:
+ ․
+ a. You may Distribute or Publicly Perform the Work only under the terms
+ of this License. You must include a copy of, or the Uniform Resource
+ Identifier (URI) for, this License with every copy of the Work You
+ Distribute or Publicly Perform. You may not offer or impose any terms on
+ the Work that restrict the terms of this License or the ability of the
+ recipient of the Work to exercise the rights granted to that recipient
+ under the terms of the License. You may not sublicense the Work. You
+ must keep intact all notices that refer to this License and to the
+ disclaimer of warranties with every copy of the Work You Distribute or
+ Publicly Perform. When You Distribute or Publicly Perform the Work, You
+ may not impose any effective technological measures on the Work that
+ restrict the ability of a recipient of the Work from You to exercise the
+ rights granted to that recipient under the terms of the License. This
+ Section 4(a) applies to the Work as incorporated in a Collection, but
+ this does not require the Collection apart from the Work itself to be
+ made subject to the terms of this License. If You create a Collection,
+ upon notice from any Licensor You must, to the extent practicable,
+ remove from the Collection any credit as required by Section 4(c), as
+ requested. If You create an Adaptation, upon notice from any Licensor
+ You must, to the extent practicable, remove from the Adaptation any
+ credit as required by Section 4(c), as requested.
+ ․
+ b. You may Distribute or Publicly Perform an Adaptation only under the
+ terms of: (i) this License; (ii) a later version of this License with
+ the same License Elements as this License; (iii) a Creative Commons
+ jurisdiction license (either this or a later license version) that
+ contains the same License Elements as this License (e.g.,
+ Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible
+ License. If you license the Adaptation under one of the licenses
+ mentioned in (iv), you must comply with the terms of that license. If
+ you license the Adaptation under the terms of any of the licenses
+ mentioned in (i), (ii) or (iii) (the "Applicable License"), you must
+ comply with the terms of the Applicable License generally and the
+ following provisions: (I) You must include a copy of, or the URI for,
+ the Applicable License with every copy of each Adaptation You Distribute
+ or Publicly Perform; (II) You may not offer or impose any terms on the
+ Adaptation that restrict the terms of the Applicable License or the
+ ability of the recipient of the Adaptation to exercise the rights
+ granted to that recipient under the terms of the Applicable License;
+ (III) You must keep intact all notices that refer to the Applicable
+ License and to the disclaimer of warranties with every copy of the Work
+ as included in the Adaptation You Distribute or Publicly Perform; (IV)
+ when You Distribute or Publicly Perform the Adaptation, You may not
+ impose any effective technological measures on the Adaptation that
+ restrict the ability of a recipient of the Adaptation from You to
+ exercise the rights granted to that recipient under the terms of the
+ Applicable License. This Section 4(b) applies to the Adaptation as
+ incorporated in a Collection, but this does not require the Collection
+ apart from the Adaptation itself to be made subject to the terms of the
+ Applicable License.
+ ․
+ c. If You Distribute, or Publicly Perform the Work or any Adaptations or
+ Collections, You must, unless a request has been made pursuant to
+ Section 4(a), keep intact all copyright notices for the Work and
+ provide, reasonable to the medium or means You are utilizing: (i) the
+ name of the Original Author (or pseudonym, if applicable) if supplied,
+ and/or if the Original Author and/or Licensor designate another party or
+ parties (e.g., a sponsor institute, publishing entity, journal) for
+ attribution ("Attribution Parties") in Licensor's copyright notice,
+ terms of service or by other reasonable means, the name of such party or
+ parties; (ii) the title of the Work if supplied; (iii) to the extent
+ reasonably practicable, the URI, if any, that Licensor specifies to be
+ associated with the Work, unless such URI does not refer to the
+ copyright notice or licensing information for the Work; and (iv) ,
+ consistent with Ssection 3(b), in the case of an Adaptation, a credit
+ identifying the use of the Work in the Adaptation (e.g., "French
+ translation of the Work by Original Author," or "Screenplay based on
+ original Work by Original Author"). The credit required by this Section
+ 4(c) may be implemented in any reasonable manner; provided, however,
+ that in the case of a Adaptation or Collection, at a minimum such credit
+ will appear, if a credit for all contributing authors of the Adaptation
+ or Collection appears, then as part of these credits and in a manner at
+ least as prominent as the credits for the other contributing authors.
+ For the avoidance of doubt, You may only use the credit required by this
+ Section for the purpose of attribution in the manner set out above and,
+ by exercising Your rights under this License, You may not implicitly or
+ explicitly assert or imply any connection with, sponsorship or
+ endorsement by the Original Author, Licensor and/or Attribution Parties,
+ as appropriate, of You or Your use of the Work, without the separate,
+ express prior written permission of the Original Author, Licensor and/or
+ Attribution Parties.
+ ․
+ d. Except as otherwise agreed in writing by the Licensor or as may be
+ otherwise permitted by applicable law, if You Reproduce, Distribute or
+ Publicly Perform the Work either by itself or as part of any Adaptations
+ or Collections, You must not distort, mutilate, modify or take other
+ derogatory action in relation to the Work which would be prejudicial to
+ the Original Author's honor or reputation. Licensor agrees that in those
+ jurisdictions (e.g. Japan), in which any exercise of the right granted
+ in Section 3(b) of this License (the right to make Adaptations) would be
+ deemed to be a distortion, mutilation, modification or other derogatory
+ action prejudicial to the Original Author's honor and reputation, the
+ Licensor will waive or not assert, as appropriate, this Section, to the
+ fullest extent permitted by the applicable national law, to enable You
+ to reasonably exercise Your right under Section 3(b) of this License
+ (right to make Adaptations) but not otherwise.
+ ․
+ 5. Representations, Warranties and Disclaimer
+ ․
+ UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
+ OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
+ KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+ INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+ FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
+ LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
+ WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+ ․
+ 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
+ LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
+ ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
+ ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
+ BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ ․
+ 7. Termination
+ ․
+ a. This License and the rights granted hereunder will terminate
+ automatically upon any breach by You of the terms of this License.
+ Individuals or entities who have received Adaptations or Collections
+ from You under this License, however, will not have their licenses
+ terminated provided such individuals or entities remain in full
+ compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
+ survive any termination of this License.
+ ․
+ b. Subject to the above terms and conditions, the license granted here
+ is perpetual (for the duration of the applicable copyright in the Work).
+ Notwithstanding the above, Licensor reserves the right to release the
+ Work under different license terms or to stop distributing the Work at
+ any time; provided, however that any such election will not serve to
+ withdraw this License (or any other license that has been, or is
+ required to be, granted under the terms of this License), and this
+ License will continue in full force and effect unless terminated as
+ stated above.
+ ․
+ 8. Miscellaneous
+ ․
+ a. Each time You Distribute or Publicly Perform the Work or a
+ Collection, the Licensor offers to the recipient a license to the Work
+ on the same terms and conditions as the license granted to You under
+ this License.
+ ․
+ b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
+ offers to the recipient a license to the original Work on the same terms
+ and conditions as the license granted to You under this License.
+ ․
+ c. If any provision of this License is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of
+ the remainder of the terms of this License, and without further action
+ by the parties to this agreement, such provision shall be reformed to
+ the minimum extent necessary to make such provision valid and
+ enforceable.
+ ․
+ d. No term or provision of this License shall be deemed waived and no
+ breach consented to unless such waiver or consent shall be in writing
+ and signed by the party to be charged with such waiver or consent.
+ ․
+ e. This License constitutes the entire agreement between the parties
+ with respect to the Work licensed here. There are no understandings,
+ agreements or representations with respect to the Work not specified
+ here. Licensor shall not be bound by any additional provisions that may
+ appear in any communication from You. This License may not be modified
+ without the mutual written agreement of the Licensor and You.
+ ․
+ f. The rights granted under, and the subject matter referenced, in this
+ License were drafted utilizing the terminology of the Berne Convention
+ for the Protection of Literary and Artistic Works (as amended on
+ September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
+ Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and
+ the Universal Copyright Convention (as revised on July 24, 1971). These
+ rights and subject matter take effect in the relevant jurisdiction in
+ which the License terms are sought to be enforced according to the
+ corresponding provisions of the implementation of those treaty
+ provisions in the applicable national law. If the standard suite of
+ rights granted under applicable copyright law includes additional rights
+ not granted under this License, such additional rights are deemed to be
+ included in the License; this License is not intended to restrict the
+ license of any rights under applicable law.
+ ․
+ ․
+ Creative Commons Notice
+ ․
+ Creative Commons is not a party to this License, and makes no warranty
+ whatsoever in connection with the Work. Creative Commons will not be
+ liable to You or any party on any legal theory for any damages
+ whatsoever, including without limitation any general, special,
+ incidental or consequential damages arising in connection to this
+ license. Notwithstanding the foregoing two (2) sentences, if Creative
+ Commons has expressly identified itself as the Licensor hereunder, it
+ shall have all rights and obligations of Licensor.
+ ․
+ Except for the limited purpose of indicating to the public that the Work
+ is licensed under the CCPL, Creative Commons does not authorize the use
+ by either party of the trademark "Creative Commons" or any related
+ trademark or logo of Creative Commons without the prior written consent
+ of Creative Commons. Any permitted use will be in compliance with
+ Creative Commons' then-current trademark usage guidelines, as may be
+ published on its website or otherwise made available upon request from
+ time to time. For the avoidance of doubt, this trademark restriction
+ does not form part of the License.
+ ․
+ Creative Commons may be contacted at http://creativecommons.org/.
+
+License: BSD-3-clause
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ .
+   1. Redistributions of source code must retain the above
+      copyright notice, this list of conditions and the following
+      disclaimer.
+ .
+   2. Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials
+      provided with the distribution.
+ .
+   3. Neither the name of the copyright holder nor the names of
+      its contributors may be used to endorse or promote products
+      derived from this software without specific prior written
+      permission.
+ .
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ OF THE POSSIBILITY OF SUCH DAMAGE.
index c163daad2c2a8bb6ba8f3f0285bc2672a21bdd0d..ed7f4a255ed4b798d710714ee368ef973c42abb6 100755 (executable)
@@ -5,7 +5,6 @@ export DESTDIR=$(CURDIR)/debian/tmp
 
 include /usr/share/dpkg/default.mk
 
-extraopts += -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11
 ifneq (,$(findstring WITH_STATIC_LIBSTDCXX,$(CEPH_EXTRA_CMAKE_ARGS)))
   # dh_auto_build sets LDFLAGS with `dpkg-buildflags --get LDFLAGS` on ubuntu,
   # which makes the application aborts when the shared library throws
@@ -59,19 +58,15 @@ py3_overrides_packages := $(basename $(notdir $(wildcard debian/*.requires)))
 py3_packages := cephfs-shell cephfs-top cephadm
 
 %:
-       dh $@ --buildsystem=cmake --with javahelper,python3,systemd --parallel
+       dh $@ --buildsystem=cmake --with javahelper,python3 --parallel
 
 override_dh_auto_configure:
        env | sort
        dh_auto_configure --buildsystem=cmake -- $(extraopts) $(CEPH_EXTRA_CMAKE_ARGS)
 
-override_dh_auto_build:
-       dh_auto_build --buildsystem=cmake
-       cp src/init-radosgw debian/radosgw.init
-
 override_dh_auto_clean:
        dh_auto_clean --buildsystem=cmake
-       rm -f debian/radosgw.init debian/ceph.logrotate
+       rm -f debian/radosgw.init debian/ceph.logrotate debian/ceph-base.docs
 
 override_dh_auto_install:
        dh_auto_install --buildsystem=cmake --destdir=$(DESTDIR)
@@ -87,13 +82,12 @@ override_dh_auto_install:
 override_dh_installchangelogs:
        dh_installchangelogs --exclude doc/changelog
 
-override_dh_installdocs:
-
 override_dh_installlogrotate:
        cp src/logrotate.conf debian/ceph-common.logrotate
        dh_installlogrotate -pceph-common
 
 override_dh_installinit:
+       cp src/init-radosgw debian/radosgw.init
        # install the systemd stuff manually since we have funny service names
        install -d -m0755 debian/ceph-common/etc/default
        install -m0644 etc/default/ceph debian/ceph-common/etc/default/
@@ -103,15 +97,9 @@ override_dh_installinit:
        dh_installinit -p ceph-base --name ceph --no-start
        dh_installinit -p radosgw --no-start
 
-       # NOTE: execute systemd helpers so they pickup dh_install'ed units and targets
-       dh_systemd_enable
-       dh_systemd_start --no-restart-on-upgrade
-
-override_dh_systemd_enable:
-       # systemd enable done as part of dh_installinit
-
-override_dh_systemd_start:
-       # systemd start done as part of dh_installinit
+override_dh_installsystemd:
+       # Only enable and start systemd targets
+       dh_installsystemd --no-stop-on-upgrade --no-restart-after-upgrade -Xceph-mon.service -Xceph-osd.service -X ceph-mds.service
 
 override_dh_strip:
        dh_strip -pceph-mds --dbg-package=ceph-mds-dbg
@@ -152,8 +140,12 @@ override_dh_python3:
        @for pkg in $(py3_packages); do \
          dh_python3 -p $$pkg;          \
        done
+       dh_python3 -p ceph-base --shebang=/usr/bin/python3
+       dh_python3 -p ceph-common --shebang=/usr/bin/python3
+       dh_python3 -p ceph-fuse --shebang=/usr/bin/python3
+       dh_python3 -p ceph-volume --shebang=/usr/bin/python3
 
 # do not run tests
 override_dh_auto_test:
 
-.PHONY: override_dh_autoreconf override_dh_auto_configure override_dh_auto_build override_dh_auto_clean override_dh_auto_install override_dh_installdocs override_dh_installlogrotate override_dh_installinit override_dh_systemd_start override_dh_strip override_dh_auto_test
+.PHONY: override_dh_autoreconf override_dh_auto_configure override_dh_auto_clean override_dh_auto_install override_dh_installlogrotate override_dh_installinit override_dh_strip override_dh_auto_test
index 405263557fd4cbedfc9c90ea2b9456c044db904d..852225ce6ad7b6516fa80486d69e071947f47386 100644 (file)
@@ -30,58 +30,54 @@ A Ceph Storage Cluster consists of multiple types of daemons:
 - :term:`Ceph Manager`
 - :term:`Ceph Metadata Server`
 
-.. ditaa::
-
-            +---------------+ +---------------+ +---------------+ +---------------+ 
-            |      OSDs     | |    Monitors   | |    Managers   | |      MDS      |
-            +---------------+ +---------------+ +---------------+ +---------------+ 
+.. _arch_monitor:
 
-A Ceph Monitor maintains a master copy of the cluster map. A cluster of Ceph
-monitors ensures high availability should a monitor daemon fail. Storage cluster
-clients retrieve a copy of the cluster map from the Ceph Monitor.
+Ceph Monitors maintain the master copy of the cluster map, which they provide
+to Ceph clients. Provisioning multiple monitors within the Ceph cluster ensures
+availability in the event that one of the monitor daemons or its host fails.
+The Ceph monitor provides copies of the cluster map to storage cluster clients.
 
 A Ceph OSD Daemon checks its own state and the state of other OSDs and reports 
 back to monitors.
 
-A Ceph Manager acts as an endpoint for monitoring, orchestration, and plug-in
+A Ceph Manager serves as an endpoint for monitoring, orchestration, and plug-in
 modules.
 
 A Ceph Metadata Server (MDS) manages file metadata when CephFS is used to
 provide file services.
 
-Storage cluster clients and each :term:`Ceph OSD Daemon` use the CRUSH algorithm
-to efficiently compute information about data location, instead of having to
-depend on a central lookup table. Ceph's high-level features include a
-native interface to the Ceph Storage Cluster via ``librados``, and a number of
-service interfaces built on top of ``librados``.
-
-
+Storage cluster clients and :term:`Ceph OSD Daemon`\s use the CRUSH algorithm
+to compute information about data location. This means that clients and OSDs
+are not bottlenecked by a central lookup table. Ceph's high-level features
+include a native interface to the Ceph Storage Cluster via ``librados``, and a
+number of service interfaces built on top of ``librados``.
 
 Storing Data
 ------------
 
 The Ceph Storage Cluster receives data from :term:`Ceph Client`\s--whether it
 comes through a :term:`Ceph Block Device`, :term:`Ceph Object Storage`, the
-:term:`Ceph File System` or a custom implementation you create using
-``librados``-- which is stored as RADOS objects. Each object is stored on an
-:term:`Object Storage Device`. Ceph OSD Daemons handle read, write, and
-replication operations on storage drives. With the default BlueStore back end,
-objects are stored in a monolithic database-like fashion.
+:term:`Ceph File System`, or a custom implementation that you create by using
+``librados``. The data received by the Ceph Storage Cluster is stored as RADOS
+objects. Each object is stored on an :term:`Object Storage Device` (this is
+also called an "OSD"). Ceph OSDs control read, write, and replication
+operations on storage drives. The default BlueStore back end stores objects 
+in a monolithic, database-like fashion.
 
 .. ditaa::
 
-           /-----\       +-----+       +-----+
-           | obj |------>| {d} |------>| {s} |
-           \-----/       +-----+       +-----+
+           /------\       +-----+       +-----+
+           | obj  |------>| {d} |------>| {s} |
+           \------/       +-----+       +-----+
    
             Object         OSD          Drive
 
-Ceph OSD Daemons store data as objects in a flat namespace (e.g., no
-hierarchy of directories). An object has an identifier, binary data, and
-metadata consisting of a set of name/value pairs. The semantics are completely
-up to :term:`Ceph Client`\s. For example, CephFS uses metadata to store file
-attributes such as the file owner, created date, last modified date, and so
-forth.
+Ceph OSD Daemons store data as objects in a flat namespace. This means that
+objects are not stored in a hierarchy of directories. An object has an
+identifier, binary data, and metadata consisting of name/value pairs.
+:term:`Ceph Client`\s determine the semantics of the object data. For example,
+CephFS uses metadata to store file attributes such as the file owner, the
+created date, and the last modified date.
 
 
 .. ditaa::
@@ -100,20 +96,23 @@ forth.
 
 .. index:: architecture; high availability, scalability
 
+.. _arch_scalability_and_high_availability:
+
 Scalability and High Availability
 ---------------------------------
 
-In traditional architectures, clients talk to a centralized component (e.g., a
-gateway, broker, API, facade, etc.), which acts as a single point of entry to a
-complex subsystem. This imposes a limit to both performance and scalability,
-while introducing a single point of failure (i.e., if the centralized component
-goes down, the whole system goes down, too).
+In traditional architectures, clients talk to a centralized component. This
+centralized component might be a gateway, a broker, an API, or a facade. A
+centralized component of this kind acts as a single point of entry to a complex
+subsystem. Architectures that rely upon such a centralized component have a
+single point of failure and incur limits to performance and scalability. If
+the centralized component goes down, the whole system becomes unavailable.
 
-Ceph eliminates the centralized gateway to enable clients to interact with 
-Ceph OSD Daemons directly. Ceph OSD Daemons create object replicas on other
-Ceph Nodes to ensure data safety and high availability. Ceph also uses a cluster
-of monitors to ensure high availability. To eliminate centralization, Ceph 
-uses an algorithm called CRUSH.
+Ceph eliminates this centralized component. This enables clients to interact
+with Ceph OSDs directly. Ceph OSDs create object replicas on other Ceph Nodes
+to ensure data safety and high availability. Ceph also uses a cluster of
+monitors to ensure high availability. To eliminate centralization, Ceph uses an
+algorithm called :abbr:`CRUSH (Controlled Replication Under Scalable Hashing)`.
 
 
 .. index:: CRUSH; architecture
@@ -122,15 +121,15 @@ CRUSH Introduction
 ~~~~~~~~~~~~~~~~~~
 
 Ceph Clients and Ceph OSD Daemons both use the :abbr:`CRUSH (Controlled
-Replication Under Scalable Hashing)` algorithm to efficiently compute
-information about object location, instead of having to depend on a
-central lookup table. CRUSH provides a better data management mechanism compared
-to older approaches, and enables massive scale by cleanly distributing the work
-to all the clients and OSD daemons in the cluster. CRUSH uses intelligent data
-replication to ensure resiliency, which is better suited to hyper-scale storage.
-The following sections provide additional details on how CRUSH works. For a
-detailed discussion of CRUSH, see `CRUSH - Controlled, Scalable, Decentralized
-Placement of Replicated Data`_.
+Replication Under Scalable Hashing)` algorithm to compute information about
+object location instead of relying upon a central lookup table. CRUSH provides
+a better data management mechanism than do older approaches, and CRUSH enables
+massive scale by distributing the work to all the OSD daemons in the cluster
+and all the clients that communicate with them. CRUSH uses intelligent data
+replication to ensure resiliency, which is better suited to hyper-scale
+storage. The following sections provide additional details on how CRUSH works.
+For a detailed discussion of CRUSH, see `CRUSH - Controlled, Scalable,
+Decentralized Placement of Replicated Data`_.
 
 .. index:: architecture; cluster map
 
@@ -139,61 +138,71 @@ Placement of Replicated Data`_.
 Cluster Map
 ~~~~~~~~~~~
 
-Ceph depends upon Ceph Clients and Ceph OSD Daemons having knowledge of the
-cluster topology, which is inclusive of 5 maps collectively referred to as the
-"Cluster Map":
+In order for a Ceph cluster to function properly, Ceph Clients and Ceph OSDs
+must have current information about the cluster's topology. Current information
+is stored in the "Cluster Map", which is in fact a collection of five maps. The
+five maps that constitute the cluster map are:
 
-#. **The Monitor Map:** Contains the cluster ``fsid``, the position, name 
-   address and port of each monitor. It also indicates the current epoch, 
-   when the map was created, and the last time it changed. To view a monitor
-   map, execute ``ceph mon dump``.   
+#. **The Monitor Map:** Contains the cluster ``fsid``, the position, the name,
+   the address, and the TCP port of each monitor. The monitor map specifies the
+   current epoch, the time of the monitor map's creation, and the time of the
+   monitor map's last modification.  To view a monitor map, run ``ceph mon
+   dump``.   
    
-#. **The OSD Map:** Contains the cluster ``fsid``, when the map was created and
-   last modified, a list of pools, replica sizes, PG numbers, a list of OSDs
-   and their status (e.g., ``up``, ``in``). To view an OSD map, execute
-   ``ceph osd dump``. 
+#. **The OSD Map:** Contains the cluster ``fsid``, the time of the OSD map's
+   creation, the time of the OSD map's last modification, a list of pools, a
+   list of replica sizes, a list of PG numbers, and a list of OSDs and their
+   statuses (for example, ``up``, ``in``). To view an OSD map, run ``ceph
+   osd dump``. 
    
-#. **The PG Map:** Contains the PG version, its time stamp, the last OSD
-   map epoch, the full ratios, and details on each placement group such as
-   the PG ID, the `Up Set`, the `Acting Set`, the state of the PG (e.g., 
-   ``active + clean``), and data usage statistics for each pool.
+#. **The PG Map:** Contains the PG version, its time stamp, the last OSD map
+   epoch, the full ratios, and the details of each placement group. This
+   includes the PG ID, the `Up Set`, the `Acting Set`, the state of the PG (for
+   example, ``active + clean``), and data usage statistics for each pool.
 
 #. **The CRUSH Map:** Contains a list of storage devices, the failure domain
-   hierarchy (e.g., device, host, rack, row, room, etc.), and rules for 
-   traversing the hierarchy when storing data. To view a CRUSH map, execute
-   ``ceph osd getcrushmap -o {filename}``; then, decompile it by executing
-   ``crushtool -d {comp-crushmap-filename} -o {decomp-crushmap-filename}``.
-   You can view the decompiled map in a text editor or with ``cat``. 
+   hierarchy (for example, ``device``, ``host``, ``rack``, ``row``, ``room``),
+   and rules for traversing the hierarchy when storing data. To view a CRUSH
+   map, run ``ceph osd getcrushmap -o {filename}`` and then decompile it by
+   running ``crushtool -d {comp-crushmap-filename} -o
+   {decomp-crushmap-filename}``. Use a text editor or ``cat`` to view the
+   decompiled map.
 
 #. **The MDS Map:** Contains the current MDS map epoch, when the map was 
    created, and the last time it changed. It also contains the pool for 
    storing metadata, a list of metadata servers, and which metadata servers
    are ``up`` and ``in``. To view an MDS map, execute ``ceph fs dump``.
 
-Each map maintains an iterative history of its operating state changes. Ceph
-Monitors maintain a master copy of the cluster map including the cluster
-members, state, changes, and the overall health of the Ceph Storage Cluster.
+Each map maintains a history of changes to its operating state. Ceph Monitors
+maintain a master copy of the cluster map. This master copy includes the
+cluster members, the state of the cluster, changes to the cluster, and
+information recording the overall health of the Ceph Storage Cluster.
 
 .. index:: high availability; monitor architecture
 
 High Availability Monitors
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Before Ceph Clients can read or write data, they must contact a Ceph Monitor
-to obtain the most recent copy of the cluster map. A Ceph Storage Cluster
-can operate with a single monitor; however, this introduces a single 
-point of failure (i.e., if the monitor goes down, Ceph Clients cannot
-read or write data).
+A Ceph Client must contact a Ceph Monitor and obtain a current copy of the
+cluster map in order to read data from or to write data to the Ceph cluster.
+
+It is possible for a Ceph cluster to function properly with only a single
+monitor, but a Ceph cluster that has only a single monitor has a single point
+of failure: if the monitor goes down, Ceph clients will be unable to read data
+from or write data to the cluster.
 
-For added reliability and fault tolerance, Ceph supports a cluster of monitors.
-In a cluster of monitors, latency and other faults can cause one or more
-monitors to fall behind the current state of the cluster. For this reason, Ceph
-must have agreement among various monitor instances regarding the state of the
-cluster. Ceph always uses a majority of monitors (e.g., 1, 2:3, 3:5, 4:6, etc.)
-and the `Paxos`_ algorithm to establish a consensus among the monitors about the
-current state of the cluster.
+Ceph leverages a cluster of monitors in order to increase reliability and fault
+tolerance. When a cluster of monitors is used, however, one or more of the
+monitors in the cluster can fall behind due to latency or other faults. Ceph
+mitigates these negative effects by requiring multiple monitor instances to
+agree about the state of the cluster. To establish consensus among the monitors
+regarding the state of the cluster, Ceph uses the `Paxos`_ algorithm and a
+majority of monitors (for example, one in a cluster that contains only one
+monitor, two in a cluster that contains three monitors, three in a cluster that
+contains five monitors, four in a cluster that contains six monitors, and so
+on).
 
-For details on configuring monitors, see the `Monitor Config Reference`_.
+See the `Monitor Config Reference`_ for more detail on configuring monitors.
 
 .. index:: architecture; high availability authentication
 
@@ -202,48 +211,57 @@ For details on configuring monitors, see the `Monitor Config Reference`_.
 High Availability Authentication
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-To identify users and protect against man-in-the-middle attacks, Ceph provides
-its ``cephx`` authentication system to authenticate users and daemons.
+The ``cephx`` authentication system is used by Ceph to authenticate users and
+daemons and to protect against man-in-the-middle attacks. 
 
 .. note:: The ``cephx`` protocol does not address data encryption in transport 
-   (e.g., SSL/TLS) or encryption at rest.
-
-Cephx uses shared secret keys for authentication, meaning both the client and
-the monitor cluster have a copy of the client's secret key. The authentication
-protocol is such that both parties are able to prove to each other they have a
-copy of the key without actually revealing it. This provides mutual
-authentication, which means the cluster is sure the user possesses the secret
-key, and the user is sure that the cluster has a copy of the secret key.
-
-A key scalability feature of Ceph is to avoid a centralized interface to the
-Ceph object store, which means that Ceph clients must be able to interact with
-OSDs directly. To protect data, Ceph provides its ``cephx`` authentication
-system, which authenticates users operating Ceph clients. The ``cephx`` protocol
-operates in a manner with behavior similar to `Kerberos`_. 
-
-A user/actor invokes a Ceph client to contact a monitor. Unlike Kerberos, each
-monitor can authenticate users and distribute keys, so there is no single point
-of failure or bottleneck when using ``cephx``. The monitor returns an
-authentication data structure similar to a Kerberos ticket that contains a
-session key for use in obtaining Ceph services.  This session key is itself
-encrypted with the user's permanent  secret key, so that only the user can
-request services from the Ceph Monitor(s). The client then uses the session key
-to request its desired services from the monitor, and the monitor provides the
-client with a ticket that will authenticate the client to the OSDs that actually
-handle data. Ceph Monitors and OSDs share a secret, so the client can use the
-ticket provided by the monitor with any OSD or metadata server in the cluster.
-Like Kerberos, ``cephx`` tickets expire, so an attacker cannot use an expired
-ticket or session key obtained surreptitiously. This form of authentication will
-prevent attackers with access to the communications medium from either creating
-bogus messages under another user's identity or altering another user's
-legitimate messages, as long as the user's secret key is not divulged before it
-expires.
-
-To use ``cephx``, an administrator must set up users first. In the following
-diagram, the ``client.admin`` user invokes  ``ceph auth get-or-create-key`` from
+   (for example, SSL/TLS) or encryption at rest.
+
+``cephx`` uses shared secret keys for authentication. This means that both the
+client and the monitor cluster keep a copy of the client's secret key. 
+
+The ``cephx`` protocol makes it possible for each party to prove to the other
+that it has a copy of the key without revealing it. This provides mutual
+authentication and allows the cluster to confirm (1) that the user has the
+secret key and (2) that the user can be confident that the cluster has a copy
+of the secret key.
+
+As stated in :ref:`Scalability and High Availability
+<arch_scalability_and_high_availability>`, Ceph does not have any centralized
+interface between clients and the Ceph object store. By avoiding such a
+centralized interface, Ceph avoids the bottlenecks that attend such centralized
+interfaces. However, this means that clients must interact directly with OSDs.
+Direct interactions between Ceph clients and OSDs require authenticated
+connections. The ``cephx`` authentication system establishes and sustains these
+authenticated connections.
+
+The ``cephx`` protocol operates in a manner similar to `Kerberos`_. 
+
+A user invokes a Ceph client to contact a monitor. Unlike Kerberos, each
+monitor can authenticate users and distribute keys, which means that there is
+no single point of failure and no bottleneck when using ``cephx``. The monitor
+returns an authentication data structure that is similar to a Kerberos ticket.
+This authentication data structure contains a session key for use in obtaining
+Ceph services. The session key is itself encrypted with the user's permanent
+secret key, which means that only the user can request services from the Ceph
+Monitors. The client then uses the session key to request services from the
+monitors, and the monitors provide the client with a ticket that authenticates
+the client against the OSDs that actually handle data. Ceph Monitors and OSDs
+share a secret, which means that the clients can use the ticket provided by the
+monitors to authenticate against any OSD or metadata server in the cluster. 
+
+Like Kerberos tickets, ``cephx`` tickets expire. An attacker cannot use an
+expired ticket or session key that has been obtained surreptitiously. This form
+of authentication prevents attackers who have access to the communications
+medium from creating bogus messages under another user's identity and prevents
+attackers from altering another user's legitimate messages, as long as the
+user's secret key is not divulged before it expires.
+
+An administrator must set up users before using ``cephx``.  In the following
+diagram, the ``client.admin`` user invokes ``ceph auth get-or-create-key`` from
 the command line to generate a username and secret key. Ceph's ``auth``
-subsystem generates the username and key, stores a copy with the monitor(s) and
-transmits the user's secret back to the ``client.admin`` user. This means that 
+subsystem generates the username and key, stores a copy on the monitor(s), and
+transmits the user's secret back to the ``client.admin`` user. This means that
 the client and the monitor share a secret key.
 
 .. note:: The ``client.admin`` user must provide the user ID and 
@@ -262,17 +280,16 @@ the client and the monitor share a secret key.
                 | transmit key  |
                 |               |
 
-
-To authenticate with the monitor, the client passes in the user name to the
-monitor, and the monitor generates a session key and encrypts it with the secret
-key associated to the user name. Then, the monitor transmits the encrypted
-ticket back to the client. The client then decrypts the payload with the shared
-secret key to retrieve the session key. The session key identifies the user for
-the current session. The client then requests a ticket on behalf of the user
-signed by the session key. The monitor generates a ticket, encrypts it with the
-user's secret key and transmits it back to the client. The client decrypts the
-ticket and uses it to sign requests to OSDs and metadata servers throughout the
-cluster.
+Here is how a client authenticates with a monitor. The client passes the user
+name to the monitor. The monitor generates a session key that is encrypted with
+the secret key associated with the ``username``. The monitor transmits the
+encrypted ticket to the client. The client uses the shared secret key to
+decrypt the payload. The session key identifies the user, and this act of
+identification will last for the duration of the session.  The client requests
+a ticket for the user, and the ticket is signed with the session key. The
+monitor generates a ticket and uses the user's secret key to encrypt it. The
+encrypted ticket is transmitted to the client. The client decrypts the ticket
+and uses it to sign requests to OSDs and to metadata servers in the cluster.
 
 .. ditaa::
 
@@ -302,10 +319,11 @@ cluster.
                 |<----+         |              
 
 
-The ``cephx`` protocol authenticates ongoing communications between the client
-machine and the Ceph servers. Each message sent between a client and server,
-subsequent to the initial authentication, is signed using a ticket that the
-monitors, OSDs and metadata servers can verify with their shared secret.
+The ``cephx`` protocol authenticates ongoing communications between the clients
+and Ceph daemons. After initial authentication, each message sent between a
+client and a daemon is signed using a ticket that can be verified by monitors,
+OSDs, and metadata daemons. This ticket is verified by using the secret shared
+between the client and the daemon.
 
 .. ditaa::
 
@@ -341,83 +359,93 @@ monitors, OSDs and metadata servers can verify with their shared secret.
                 |<-------------------------------------------|
                                receive response
 
-The protection offered by this authentication is between the Ceph client and the
-Ceph server hosts. The authentication is not extended beyond the Ceph client. If
-the user accesses the Ceph client from a remote host, Ceph authentication is not
+This authentication protects only the connections between Ceph clients and Ceph
+daemons. The authentication is not extended beyond the Ceph client. If a user
+accesses the Ceph client from a remote host, cephx authentication will not be
 applied to the connection between the user's host and the client host.
 
+See `Cephx Config Guide`_ for more on configuration details. 
 
-For configuration details, see `Cephx Config Guide`_. For user management 
-details, see `User Management`_.
+See `User Management`_ for more on user management.
 
+See :ref:`A Detailed Description of the Cephx Authentication Protocol
+<cephx_2012_peter>` for more on the distinction between authorization and
+authentication and for a step-by-step explanation of the setup of ``cephx``
+tickets and session keys.
 
 .. index:: architecture; smart daemons and scalability
 
 Smart Daemons Enable Hyperscale
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-In many clustered architectures, the primary purpose of cluster membership is 
-so that a centralized interface knows which nodes it can access. Then the
-centralized interface provides services to the client through a double
-dispatch--which is a **huge** bottleneck at the petabyte-to-exabyte scale.
-
-Ceph eliminates the bottleneck: Ceph's OSD Daemons AND Ceph Clients are cluster
-aware. Like Ceph clients, each Ceph OSD Daemon knows about other Ceph OSD
-Daemons in the cluster.  This enables Ceph OSD Daemons to interact directly with
-other Ceph OSD Daemons and Ceph Monitors. Additionally, it enables Ceph Clients
-to interact directly with Ceph OSD Daemons.
-
-The ability of Ceph Clients, Ceph Monitors and Ceph OSD Daemons to interact with
-each other means that Ceph OSD Daemons can utilize the CPU and RAM of the Ceph
-nodes to easily perform tasks that would bog down a centralized server. The
-ability to leverage this computing power leads to several major benefits:
-
-#. **OSDs Service Clients Directly:** Since any network device has a limit to 
-   the number of concurrent connections it can support, a centralized system 
-   has a low physical limit at high scales. By enabling Ceph Clients to contact 
-   Ceph OSD Daemons directly, Ceph increases both performance and total system 
-   capacity simultaneously, while removing a single point of failure. Ceph 
-   Clients can maintain a session when they need to, and with a particular Ceph 
-   OSD Daemon instead of a centralized server.
-
-#. **OSD Membership and Status**: Ceph OSD Daemons join a cluster and report 
-   on their status. At the lowest level, the Ceph OSD Daemon status is ``up`` 
-   or ``down`` reflecting whether or not it is running and able to service 
-   Ceph Client requests. If a Ceph OSD Daemon is ``down`` and ``in`` the Ceph 
-   Storage Cluster, this status may indicate the failure of the Ceph OSD 
-   Daemon. If a Ceph OSD Daemon is not running (e.g., it crashes), the Ceph OSD 
-   Daemon cannot notify the Ceph Monitor that it is ``down``. The OSDs
-   periodically send messages to the Ceph Monitor (``MPGStats`` pre-luminous,
-   and a new ``MOSDBeacon`` in luminous).  If the Ceph Monitor doesn't see that
-   message after a configurable period of time then it marks the OSD down.
-   This mechanism is a failsafe, however. Normally, Ceph OSD Daemons will
-   determine if a neighboring OSD is down and report it to the Ceph Monitor(s).
-   This assures that Ceph Monitors are lightweight processes.  See `Monitoring
-   OSDs`_ and `Heartbeats`_ for additional details.
-
-#. **Data Scrubbing:** As part of maintaining data consistency and cleanliness, 
-   Ceph OSD Daemons can scrub objects. That is, Ceph OSD Daemons can compare
-   their local objects metadata with its replicas stored on other OSDs. Scrubbing
-   happens on a per-Placement Group base. Scrubbing (usually performed daily)
-   catches mismatches in size and other metadata. Ceph OSD Daemons also perform deeper
-   scrubbing by comparing data in objects bit-for-bit with their checksums.
-   Deep scrubbing (usually performed weekly) finds bad sectors on a drive that
-   weren't apparent in a light scrub. See `Data Scrubbing`_ for details on
-   configuring scrubbing.
-
-#. **Replication:** Like Ceph Clients, Ceph OSD Daemons use the CRUSH 
-   algorithm, but the Ceph OSD Daemon uses it to compute where replicas of 
-   objects should be stored (and for rebalancing). In a typical write scenario, 
-   a client uses the CRUSH algorithm to compute where to store an object, maps 
-   the object to a pool and placement group, then looks at the CRUSH map to 
-   identify the primary OSD for the placement group.
-   
-   The client writes the object to the identified placement group in the 
-   primary OSD. Then, the primary OSD with its own copy of the CRUSH map 
-   identifies the secondary and tertiary OSDs for replication purposes, and 
-   replicates the object to the appropriate placement groups in the secondary 
-   and tertiary OSDs (as many OSDs as additional replicas), and responds to the
-   client once it has confirmed the object was stored successfully.
+A feature of many storage clusters is a centralized interface that keeps track
+of the nodes that clients are permitted to access. Such centralized
+architectures provide services to clients by means of a double dispatch. At the
+petabyte-to-exabyte scale, such double dispatches are a significant
+bottleneck.
+
+Ceph obviates this bottleneck: Ceph's OSD Daemons AND Ceph clients are
+cluster-aware. Like Ceph clients, each Ceph OSD Daemon is aware of other Ceph
+OSD Daemons in the cluster. This enables Ceph OSD Daemons to interact directly
+with other Ceph OSD Daemons and to interact directly with Ceph Monitors.  Being
+cluster-aware makes it possible for Ceph clients to interact directly with Ceph
+OSD Daemons.
+
+Because Ceph clients, Ceph monitors, and Ceph OSD daemons interact with one
+another directly, Ceph OSD daemons can make use of the aggregate CPU and RAM
+resources of the nodes in the Ceph cluster. This means that a Ceph cluster can
+easily perform tasks that a cluster with a centralized interface would struggle
+to perform. The ability of Ceph nodes to make use of the computing power of
+the greater cluster provides several benefits:
+
+#. **OSDs Service Clients Directly:** Network devices can support only a
+   limited number of concurrent connections. Because Ceph clients contact
+   Ceph OSD daemons directly without first connecting to a central interface,
+   Ceph enjoys improved perfomance and increased system capacity relative to
+   storage redundancy strategies that include a central interface. Ceph clients
+   maintain sessions only when needed, and maintain those sessions with only
+   particular Ceph OSD daemons, not with a centralized interface.
+
+#. **OSD Membership and Status**: When Ceph OSD Daemons join a cluster, they
+   report their status. At the lowest level, the Ceph OSD Daemon status is
+   ``up`` or ``down``: this reflects whether the Ceph OSD daemon is running and
+   able to service Ceph Client requests. If a Ceph OSD Daemon is ``down`` and
+   ``in`` the Ceph Storage Cluster, this status may indicate the failure of the
+   Ceph OSD Daemon. If a Ceph OSD Daemon is not running because it has crashed,
+   the Ceph OSD Daemon cannot notify the Ceph Monitor that it is ``down``. The
+   OSDs periodically send messages to the Ceph Monitor (in releases prior to
+   Luminous, this was done by means of ``MPGStats``, and beginning with the
+   Luminous release, this has been done with ``MOSDBeacon``). If the Ceph
+   Monitors receive no such message after a configurable period of time,
+   then they mark the OSD ``down``. This mechanism is a failsafe, however.
+   Normally, Ceph OSD Daemons determine if a neighboring OSD is ``down`` and
+   report it to the Ceph Monitors. This contributes to making Ceph Monitors 
+   lightweight processes. See `Monitoring OSDs`_ and `Heartbeats`_ for
+   additional details.
+
+#. **Data Scrubbing:** To maintain data consistency, Ceph OSD Daemons scrub
+   RADOS objects. Ceph OSD Daemons compare the metadata of their own local
+   objects against the metadata of the replicas of those objects, which are
+   stored on other OSDs. Scrubbing occurs on a per-Placement-Group basis, finds
+   mismatches in object size and finds metadata mismatches, and is usually
+   performed daily. Ceph OSD Daemons perform deeper scrubbing by comparing the
+   data in objects, bit-for-bit, against their checksums. Deep scrubbing finds
+   bad sectors on drives that are not detectable with light scrubs. See `Data
+   Scrubbing`_ for details on configuring scrubbing.
+
+#. **Replication:** Data replication involves a collaboration between Ceph
+   Clients and Ceph OSD Daemons. Ceph OSD Daemons use the CRUSH algorithm to
+   determine the storage location of object replicas. Ceph clients use the
+   CRUSH algorithm to determine the storage location of an object, then the
+   object is mapped to a pool and to a placement group, and then the client
+   consults the CRUSH map to identify the placement group's primary OSD.
+
+   After identifying the target placement group, the client writes the object
+   to the identified placement group's primary OSD. The primary OSD then
+   consults its own copy of the CRUSH map to identify secondary and tertiary
+   OSDS, replicates the object to the placement groups in those secondary and
+   tertiary OSDs, confirms that the object was stored successfully in the
+   secondary and tertiary OSDs, and reports to the client that the object
+   was stored successfully.
 
 .. ditaa::
 
@@ -444,19 +472,18 @@ ability to leverage this computing power leads to several major benefits:
  |               |   |               |
  +---------------+   +---------------+
 
-With the ability to perform data replication, Ceph OSD Daemons relieve Ceph
-clients from that duty, while ensuring high data availability and data safety.
-
+By performing this act of data replication, Ceph OSD Daemons relieve Ceph
+clients of the burden of replicating data.
 
 Dynamic Cluster Management
 --------------------------
 
 In the `Scalability and High Availability`_ section, we explained how Ceph uses
-CRUSH, cluster awareness and intelligent daemons to scale and maintain high
+CRUSH, cluster topology, and intelligent daemons to scale and maintain high
 availability. Key to Ceph's design is the autonomous, self-healing, and
 intelligent Ceph OSD Daemon. Let's take a deeper look at how CRUSH works to
-enable modern cloud storage infrastructures to place data, rebalance the cluster
-and recover from faults dynamically.
+enable modern cloud storage infrastructures to place data, rebalance the
+cluster, and adaptively place and balance data and recover from faults.
 
 .. index:: architecture; pools
 
@@ -465,10 +492,11 @@ About Pools
 
 The Ceph storage system supports the notion of 'Pools', which are logical
 partitions for storing objects.
-
-Ceph Clients retrieve a `Cluster Map`_ from a Ceph Monitor, and write objects to
-pools. The pool's ``size`` or number of replicas, the CRUSH rule and the
-number of placement groups determine how Ceph will place the data.
+   
+Ceph Clients retrieve a `Cluster Map`_ from a Ceph Monitor, and write RADOS
+objects to pools. The way that Ceph places the data in the pools is determined
+by the pool's ``size`` or number of replicas, the CRUSH rule, and the number of
+placement groups in the pool.
 
 .. ditaa::
 
@@ -501,20 +529,23 @@ See `Set Pool Values`_ for details.
 Mapping PGs to OSDs
 ~~~~~~~~~~~~~~~~~~~
 
-Each pool has a number of placement groups. CRUSH maps PGs to OSDs dynamically.
-When a Ceph Client stores objects, CRUSH will map each object to a placement
-group.
-
-Mapping objects to placement groups creates a layer of indirection between the
-Ceph OSD Daemon and the Ceph Client. The Ceph Storage Cluster must be able to
-grow (or shrink) and rebalance where it stores objects dynamically. If the Ceph
-Client "knew" which Ceph OSD Daemon had which object, that would create a tight
-coupling between the Ceph Client and the Ceph OSD Daemon. Instead, the CRUSH
-algorithm maps each object to a placement group and then maps each placement
-group to one or more Ceph OSD Daemons. This layer of indirection allows Ceph to
-rebalance dynamically when new Ceph OSD Daemons and the underlying OSD devices
-come online. The following diagram depicts how CRUSH maps objects to placement
-groups, and placement groups to OSDs.
+Each pool has a number of placement groups (PGs) within it. CRUSH dynamically
+maps PGs to OSDs. When a Ceph Client stores objects, CRUSH maps each RADOS
+object to a PG. 
+
+This mapping of RADOS objects to PGs implements an abstraction and indirection
+layer between Ceph OSD Daemons and Ceph Clients. The Ceph Storage Cluster must
+be able to grow (or shrink) and redistribute data adaptively when the internal
+topology changes. 
+
+If the Ceph Client "knew" which Ceph OSD Daemons were storing which objects, a
+tight coupling would exist between the Ceph Client and the Ceph OSD Daemon.
+But Ceph avoids any such tight coupling. Instead, the CRUSH algorithm maps each
+RADOS object to a placement group and then maps each placement group to one or
+more Ceph OSD Daemons. This "layer of indirection" allows Ceph to rebalance
+dynamically when new Ceph OSD Daemons and their underlying OSD devices come
+online. The following diagram shows how the CRUSH algorithm maps objects to
+placement groups, and how it maps placement groups to OSDs.
 
 .. ditaa::
 
@@ -540,44 +571,45 @@ groups, and placement groups to OSDs.
    |          |  |          |  |          |  |          |
    \----------/  \----------/  \----------/  \----------/  
 
-With a copy of the cluster map and the CRUSH algorithm, the client can compute
-exactly which OSD to use when reading or writing a particular object.
+The client uses its copy of the cluster map and the CRUSH algorithm to compute
+precisely which OSD it will use when reading or writing a particular object.
 
 .. index:: architecture; calculating PG IDs
 
 Calculating PG IDs
 ~~~~~~~~~~~~~~~~~~
 
-When a Ceph Client binds to a Ceph Monitor, it retrieves the latest copy of the
-`Cluster Map`_. With the cluster map, the client knows about all of the monitors,
-OSDs, and metadata servers in the cluster. **However, it doesn't know anything
-about object locations.** 
-
-.. epigraph:: 
-
-       Object locations get computed.
-
-
-The only input required by the client is the object ID and the pool.
-It's simple: Ceph stores data in named pools (e.g., "liverpool"). When a client
-wants to store a named object (e.g., "john," "paul," "george," "ringo", etc.)
-it calculates a placement group using the object name, a hash code, the
-number of PGs in the pool and the pool name. Ceph clients use the following
-steps to compute PG IDs.
-
-#. The client inputs the pool name and the object ID. (e.g., pool = "liverpool" 
-   and object-id = "john")
-#. Ceph takes the object ID and hashes it.
-#. Ceph calculates the hash modulo the number of PGs. (e.g., ``58``) to get 
-   a PG ID.
-#. Ceph gets the pool ID given the pool name (e.g., "liverpool" = ``4``)
-#. Ceph prepends the pool ID to the PG ID (e.g., ``4.58``).
-
-Computing object locations is much faster than performing object location query
-over a chatty session. The :abbr:`CRUSH (Controlled Replication Under Scalable
-Hashing)` algorithm allows a client to compute where objects *should* be stored,
-and enables the client to contact the primary OSD to store or retrieve the
-objects.
+When a Ceph Client binds to a Ceph Monitor, it retrieves the latest version of
+the `Cluster Map`_. When a client has been equipped with a copy of the cluster
+map, it is aware of all the monitors, OSDs, and metadata servers in the
+cluster. **However, even equipped with a copy of the latest version of the
+cluster map, the client doesn't know anything about object locations.** 
+
+**Object locations must be computed.**
+
+The client requies only the object ID and the name of the pool in order to
+compute the object location.
+
+Ceph stores data in named pools (for example,  "liverpool"). When a client
+stores a named object (for example, "john", "paul", "george", or "ringo") it
+calculates a placement group by using the object name, a hash code, the number
+of PGs in the pool, and the pool name. Ceph clients use the following steps to
+compute PG IDs.
+
+#. The client inputs the pool name and the object ID. (for example: pool =
+   "liverpool" and object-id = "john")
+#. Ceph hashes the object ID.
+#. Ceph calculates the hash, modulo the number of PGs (for example: ``58``), to
+   get a PG ID.
+#. Ceph uses the pool name to retrieve the pool ID: (for example: "liverpool" =
+   ``4``)
+#. Ceph prepends the pool ID to the PG ID (for example: ``4.58``).
+
+It is much faster to compute object locations than to perform object location
+query over a chatty session. The :abbr:`CRUSH (Controlled Replication Under
+Scalable Hashing)` algorithm allows a client to compute where objects are
+expected to be stored, and enables the client to contact the primary OSD to
+store or retrieve the objects.
 
 .. index:: architecture; PG Peering
 
@@ -585,46 +617,51 @@ Peering and Sets
 ~~~~~~~~~~~~~~~~
 
 In previous sections, we noted that Ceph OSD Daemons check each other's
-heartbeats and report back to the Ceph Monitor. Another thing Ceph OSD daemons
-do is called 'peering', which is the process of bringing all of the OSDs that
-store a Placement Group (PG) into agreement about the state of all of the
-objects (and their metadata) in that PG. In fact, Ceph OSD Daemons `Report
-Peering Failure`_ to the Ceph Monitors. Peering issues  usually resolve
-themselves; however, if the problem persists, you may need to refer to the
-`Troubleshooting Peering Failure`_ section.
+heartbeats and report back to Ceph Monitors. Ceph OSD daemons also 'peer',
+which is the process of bringing all of the OSDs that store a Placement Group
+(PG) into agreement about the state of all of the RADOS objects (and their
+metadata) in that PG. Ceph OSD Daemons `Report Peering Failure`_ to the Ceph
+Monitors. Peering issues usually resolve themselves; however, if the problem
+persists, you may need to refer to the `Troubleshooting Peering Failure`_
+section.
 
-.. Note:: Agreeing on the state does not mean that the PGs have the latest contents.
+.. Note:: PGs that agree on the state of the cluster do not necessarily have
+   the current data yet. 
 
 The Ceph Storage Cluster was designed to store at least two copies of an object
-(i.e., ``size = 2``), which is the minimum requirement for data safety. For high
-availability, a Ceph Storage Cluster should store more than two copies of an object
-(e.g., ``size = 3`` and ``min size = 2``) so that it can continue to run in a 
-``degraded`` state while maintaining data safety.
-
-Referring back to the diagram in `Smart Daemons Enable Hyperscale`_, we do not 
-name the Ceph OSD Daemons specifically (e.g., ``osd.0``, ``osd.1``, etc.), but 
-rather refer to them as *Primary*, *Secondary*, and so forth. By convention, 
-the *Primary* is the first OSD in the *Acting Set*, and is responsible for 
-coordinating the peering process for each placement group where it acts as 
-the *Primary*, and is the **ONLY** OSD that will accept client-initiated 
-writes to objects for a given placement group where it acts as the *Primary*.
-
-When a series of OSDs are responsible for a placement group, that series of
-OSDs, we refer to them as an *Acting Set*. An *Acting Set* may refer to the Ceph
-OSD Daemons that are currently responsible for the placement group, or the Ceph
-OSD Daemons that were responsible  for a particular placement group as of some
+(that is, ``size = 2``), which is the minimum requirement for data safety. For
+high availability, a Ceph Storage Cluster should store more than two copies of
+an object (that is, ``size = 3`` and ``min size = 2``) so that it can continue
+to run in a ``degraded`` state while maintaining data safety.
+
+.. warning:: Although we say here that R2 (replication with two copies) is the
+   minimum requirement for data safety, R3 (replication with three copies) is
+   recommended. On a long enough timeline, data stored with an R2 strategy will
+   be lost.
+
+As explained in the diagram in `Smart Daemons Enable Hyperscale`_, we do not
+name the Ceph OSD Daemons specifically (for example, ``osd.0``, ``osd.1``,
+etc.), but rather refer to them as *Primary*, *Secondary*, and so forth. By
+convention, the *Primary* is the first OSD in the *Acting Set*, and is
+responsible for orchestrating the peering process for each placement group
+where it acts as the *Primary*. The *Primary* is the **ONLY** OSD in a given
+placement group that accepts client-initiated writes to objects.
+
+The set of OSDs that is responsible for a placement group is called the
+*Acting Set*. The term "*Acting Set*" can refer either to the Ceph OSD Daemons
+that are currently responsible for the placement group, or to the Ceph OSD
+Daemons that were responsible for a particular placement group as of some
 epoch.
 
-The Ceph OSD daemons that are part of an *Acting Set* may not always be  ``up``.
-When an OSD in the *Acting Set* is ``up``, it is part of the  *Up Set*. The *Up
-Set* is an important distinction, because Ceph can remap PGs to other Ceph OSD
-Daemons when an OSD fails. 
-
-.. note:: In an *Acting Set* for a PG containing ``osd.25``, ``osd.32`` and 
-   ``osd.61``, the first OSD, ``osd.25``, is the *Primary*. If that OSD fails,
-   the Secondary, ``osd.32``, becomes the *Primary*, and ``osd.25`` will be 
-   removed from the *Up Set*.
+The Ceph OSD daemons that are part of an *Acting Set* might not always be
+``up``. When an OSD in the *Acting Set* is ``up``, it is part of the *Up Set*.
+The *Up Set* is an important distinction, because Ceph can remap PGs to other
+Ceph OSD Daemons when an OSD fails. 
 
+.. note:: Consider a hypothetical *Acting Set* for a PG that contains
+   ``osd.25``, ``osd.32`` and ``osd.61``. The first OSD (``osd.25``), is the
+   *Primary*. If that OSD fails, the Secondary (``osd.32``), becomes the
+   *Primary*, and ``osd.25`` is removed from the *Up Set*.
 
 .. index:: architecture; Rebalancing
 
@@ -1469,11 +1506,11 @@ Ceph Clients
 
 Ceph Clients include a number of service interfaces. These include:
 
-- **Block Devices:** The :term:`Ceph Block Device` (a.k.a., RBD) service 
-  provides resizable, thin-provisioned block devices with snapshotting and
-  cloning. Ceph stripes a block device across the cluster for high
-  performance. Ceph supports both kernel objects (KO) and a QEMU hypervisor 
-  that uses ``librbd`` directly--avoiding the kernel object overhead for 
+- **Block Devices:** The :term:`Ceph Block Device` (a.k.a., RBD) service
+  provides resizable, thin-provisioned block devices that can be snapshotted
+  and cloned. Ceph stripes a block device across the cluster for high
+  performance. Ceph supports both kernel objects (KO) and a QEMU hypervisor
+  that uses ``librbd`` directly--avoiding the kernel object overhead for
   virtualized systems.
 
 - **Object Storage:** The :term:`Ceph Object Storage` (a.k.a., RGW) service 
index d5129def11d5353d05a13798518cdbcebba0c8d7..fe34ecb713a98a49d165229c06f2c992be55ba22 100644 (file)
@@ -3,18 +3,20 @@
 ``activate``
 ============
 
-Once :ref:`ceph-volume-lvm-prepare` is completed, and all the various steps
-that entails are done, the volume is ready to get "activated".
+After :ref:`ceph-volume-lvm-prepare` has completed its run, the volume can be
+activated. 
 
-This activation process enables a systemd unit that persists the OSD ID and its
-UUID (also called ``fsid`` in Ceph CLI tools), so that at boot time it can
-understand what OSD is enabled and needs to be mounted.
+Activating the volume involves enabling a ``systemd`` unit that persists the
+``OSD ID`` and its ``UUID`` (which is also called the ``fsid`` in the Ceph CLI
+tools). After this information has been persisted, the cluster can determine
+which OSD is enabled and must be mounted.
 
-.. note:: The execution of this call is fully idempotent, and there is no
-          side-effects when running multiple times
+.. note:: The execution of this call is fully idempotent. This means that the
+   call can be executed multiple times without changing the result of its first
+   successful execution.
 
-For OSDs deployed by cephadm, please refer to :ref:`cephadm-osd-activate`
-instead.
+For information about OSDs deployed by cephadm, refer to
+:ref:`cephadm-osd-activate`.
 
 New OSDs
 --------
index 189e16abec2b29bf69a5bc5598265fa22f4b4305..4b964c5f455a7f57a8366e2b4f57a62c184db301 100644 (file)
@@ -101,8 +101,19 @@ To drain all daemons from a host, run a command of the following form:
 
    ceph orch host drain *<host>*
 
-The ``_no_schedule`` label will be applied to the host. See
-:ref:`cephadm-special-host-labels`.
+The ``_no_schedule`` and ``_no_conf_keyring`` labels will be applied to the
+host. See :ref:`cephadm-special-host-labels`.
+
+If you only want to drain daemons but leave managed ceph conf and keyring
+files on the host, you may pass the ``--keep-conf-keyring`` flag to the
+drain command.
+
+.. prompt:: bash #
+
+   ceph orch host drain *<host>* --keep-conf-keyring
+
+This will apply the ``_no_schedule`` label to the host but not the
+``_no_conf_keyring`` label.
 
 All OSDs on the host will be scheduled to be removed. You can check the progress of the OSD removal operation with the following command:
 
@@ -112,6 +123,14 @@ All OSDs on the host will be scheduled to be removed. You can check the progress
 
 See :ref:`cephadm-osd-removal` for more details about OSD removal.
 
+The ``orch host drain`` command also supports a ``--zap-osd-devices``
+flag. Setting this flag while draining a host will cause cephadm to zap
+the devices of the OSDs it is removing as part of the drain process
+
+.. prompt:: bash #
+
+   ceph orch host drain *<host>* --zap-osd-devices
+
 Use the following command to determine whether any daemons are still on the
 host:
 
@@ -183,6 +202,12 @@ The following host labels have a special meaning to cephadm.  All start with ``_
   an existing host that already contains Ceph daemons, it will cause cephadm to move
   those daemons elsewhere (except OSDs, which are not removed automatically).
 
+* ``_no_conf_keyring``: *Do not deploy config files or keyrings on this host*.
+
+  This label is effectively the same as ``_no_schedule`` but instead of working for
+  daemons it works for client keyrings and ceph conf files that are being managed
+  by cephadm
+
 * ``_no_autotune_memory``: *Do not autotune memory on this host*.
 
   This label will prevent daemon memory from being tuned even when the
@@ -290,7 +315,7 @@ create a new CRUSH host located in the specified hierarchy.
 .. note:: 
 
   The ``location`` attribute will be only affect the initial CRUSH location. Subsequent
-  changes of the ``location`` property will be ignored. Also, removing a host will no remove
+  changes of the ``location`` property will be ignored. Also, removing a host will not remove
   any CRUSH buckets.
 
 See also :ref:`crush_map_default_types`.
@@ -505,7 +530,23 @@ There are two ways to customize this configuration for your environment:
    manually distributed to the mgr data directory
    (``/var/lib/ceph/<cluster-fsid>/mgr.<id>`` on the host, visible at
    ``/var/lib/ceph/mgr/ceph-<id>`` from inside the container).
-   
+
+Setting up CA signed keys for the cluster
+-----------------------------------------
+
+Cephadm also supports using CA signed keys for SSH authentication
+across cluster nodes. In this setup, instead of needing a private
+key and public key, we instead need a private key and certificate
+created by signing that private key with a CA key. For more info
+on setting up nodes for authentication using a CA signed key, see
+:ref:`cephadm-bootstrap-ca-signed-keys`. Once you have your private
+key and signed cert, they can be set up for cephadm to use by running:
+
+.. prompt:: bash #
+
+   ceph config-key set mgr/cephadm/ssh_identity_key -i <private-key-file>
+   ceph config-key set mgr/cephadm/ssh_identity_cert -i <signed-cert-file>
+
 .. _cephadm-fqdn:
 
 Fully qualified domain names vs bare host names
index 58c997fda90aaadfc248fc343de2dcd134a0d4cd..b1aa736e225bf5fd173ab2d810576f110d04b527 100644 (file)
@@ -50,8 +50,8 @@ There are two ways to install ``cephadm``:
 distribution-specific installations
 -----------------------------------
 
-Some Linux distributions may already include up-to-date Ceph packages.  In that
-case, you can install cephadm directly. For example:
+Some Linux distributions  may already include up-to-date Ceph packages.  In
+that case, you can install cephadm directly. For example:
 
   In Ubuntu:
 
@@ -87,7 +87,7 @@ curl-based installation
 
 * First, determine what version of Ceph you will need. You can use the releases
   page to find the `latest active releases <https://docs.ceph.com/en/latest/releases/#active-releases>`_.
-  For example, we might look at that page and find that ``17.2.6`` is the latest
+  For example, we might look at that page and find that ``18.2.0`` is the latest
   active release.
 
 * Use ``curl`` to fetch a build of cephadm for that release.
@@ -95,7 +95,7 @@ curl-based installation
   .. prompt:: bash #
      :substitutions:
 
-     CEPH_RELEASE=17.2.6 # replace this with the active release
+     CEPH_RELEASE=18.2.0 # replace this with the active release
      curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
 
   Ensure the ``cephadm`` file is executable:
@@ -121,28 +121,41 @@ curl-based installation
 
      python3.8 ./cephadm <arguments...>
 
-* Although the standalone cephadm is sufficient to get a cluster started, it is
-  convenient to have the ``cephadm`` command installed on the host.  To install
-  the packages that provide the ``cephadm`` command, run the following
-  commands:
+.. _cephadm_update:
 
-  .. prompt:: bash #
-     :substitutions:
+update cephadm
+--------------
 
-     ./cephadm add-repo --release |stable-release|
-     ./cephadm install
+The cephadm binary can be used to bootstrap a cluster and for a variety
+of other management and debugging tasks. The Ceph team strongly recommends
+using an actively supported version of cephadm. Additionally, although
+the standalone cephadm is sufficient to get a cluster started, it is
+convenient to have the ``cephadm`` command installed on the host. Older or LTS
+distros may also have ``cephadm`` packages that are out-of-date and
+running the commands below can help install a more recent version
+from the Ceph project's repositories.
 
-  Confirm that ``cephadm`` is now in your PATH by running ``which``:
+To install the packages provided by the Ceph project that provide the
+``cephadm`` command, run the following commands:
 
-  .. prompt:: bash #
+.. prompt:: bash #
+   :substitutions:
 
-    which cephadm
+   ./cephadm add-repo --release |stable-release|
+   ./cephadm install
 
-  A successful ``which cephadm`` command will return this:
+Confirm that ``cephadm`` is now in your PATH by running ``which`` or
+``command -v``:
 
-  .. code-block:: bash
+.. prompt:: bash #
 
-    /usr/sbin/cephadm
+   which cephadm
+
+A successful ``which cephadm`` command will return this:
+
+.. code-block:: bash
+
+   /usr/sbin/cephadm
 
 Bootstrap a new cluster
 =======================
@@ -157,6 +170,9 @@ cluster's first "monitor daemon", and that monitor daemon needs an IP address.
 You must pass the IP address of the Ceph cluster's first host to the ``ceph
 bootstrap`` command, so you'll need to know the IP address of that host.
 
+.. important:: ``ssh`` must be installed and running in order for the
+   bootstrapping procedure to succeed. 
+
 .. note:: If there are multiple networks and interfaces, be sure to choose one
    that will be accessible by any host accessing the Ceph cluster.
 
@@ -184,6 +200,8 @@ This command will:
   with this label will (also) get a copy of ``/etc/ceph/ceph.conf`` and
   ``/etc/ceph/ceph.client.admin.keyring``.
 
+.. _cephadm-bootstrap-further-info:
+
 Further information about cephadm bootstrap
 -------------------------------------------
 
@@ -303,18 +321,21 @@ its status with:
 Adding Hosts
 ============
 
-Next, add all hosts to the cluster by following :ref:`cephadm-adding-hosts`.
+Add all hosts to the cluster by following the instructions in
+:ref:`cephadm-adding-hosts`.
 
-By default, a ``ceph.conf`` file and a copy of the ``client.admin`` keyring
-are maintained in ``/etc/ceph`` on all hosts with the ``_admin`` label, which is initially
-applied only to the bootstrap host. We usually recommend that one or more other hosts be
-given the ``_admin`` label so that the Ceph CLI (e.g., via ``cephadm shell``) is easily
-accessible on multiple hosts. To add the ``_admin`` label to additional host(s):
+By default, a ``ceph.conf`` file and a copy of the ``client.admin`` keyring are
+maintained in ``/etc/ceph`` on all hosts that have the ``_admin`` label. This
+label is initially applied only to the bootstrap host. We usually recommend
+that one or more other hosts be given the ``_admin`` label so that the Ceph CLI
+(for example, via ``cephadm shell``) is easily accessible on multiple hosts. To add
+the ``_admin`` label to additional host(s), run a command of the following form:
 
   .. prompt:: bash #
 
     ceph orch host label add *<host>* _admin
 
+
 Adding additional MONs
 ======================
 
@@ -454,3 +475,104 @@ have access to all hosts that you plan to add to the cluster.
       cephadm --image *<hostname>*:5000/ceph/ceph bootstrap --mon-ip *<mon-ip>*
 
 .. _cluster network: ../rados/configuration/network-config-ref#cluster-network
+
+.. _cephadm-bootstrap-custom-ssh-keys:
+
+Deployment with custom SSH keys
+-------------------------------
+
+Bootstrap allows users to create their own private/public SSH key pair
+rather than having cephadm generate them automatically.
+
+To use custom SSH keys, pass the ``--ssh-private-key`` and ``--ssh-public-key``
+fields to bootstrap. Both parameters require a path to the file where the
+keys are stored:
+
+.. prompt:: bash #
+
+  cephadm bootstrap --mon-ip <ip-addr> --ssh-private-key <private-key-filepath> --ssh-public-key <public-key-filepath>
+
+This setup allows users to use a key that has already been distributed to hosts
+the user wants in the cluster before bootstrap.
+
+.. note:: In order for cephadm to connect to other hosts you'd like to add
+   to the cluster, make sure the public key of the key pair provided is set up
+   as an authorized key for the ssh user being used, typically root. If you'd
+   like more info on using a non-root user as the ssh user, see :ref:`cephadm-bootstrap-further-info`
+
+.. _cephadm-bootstrap-ca-signed-keys:
+
+Deployment with CA signed SSH keys
+----------------------------------
+
+As an alternative to standard public key authentication, cephadm also supports
+deployment using CA signed keys. Before bootstrapping it's recommended to set up
+the CA public key as a trusted CA key on hosts you'd like to eventually add to
+the cluster. For example:
+
+.. prompt:: bash
+
+  # we will act as our own CA, therefore we'll need to make a CA key
+  [root@host1 ~]# ssh-keygen -t rsa -f ca-key -N ""
+
+  # make the ca key trusted on the host we've generated it on
+  # this requires adding in a line in our /etc/sshd_config
+  # to mark this key as trusted
+  [root@host1 ~]# cp ca-key.pub /etc/ssh
+  [root@host1 ~]# vi /etc/ssh/sshd_config
+  [root@host1 ~]# cat /etc/ssh/sshd_config | grep ca-key
+  TrustedUserCAKeys /etc/ssh/ca-key.pub
+  # now restart sshd so it picks up the config change
+  [root@host1 ~]# systemctl restart sshd
+
+  # now, on all other hosts we want in the cluster, also install the CA key
+  [root@host1 ~]# scp /etc/ssh/ca-key.pub host2:/etc/ssh/
+
+  # on other hosts, make the same changes to the sshd_config
+  [root@host2 ~]# vi /etc/ssh/sshd_config
+  [root@host2 ~]# cat /etc/ssh/sshd_config | grep ca-key
+  TrustedUserCAKeys /etc/ssh/ca-key.pub
+  # and restart sshd so it picks up the config change
+  [root@host2 ~]# systemctl restart sshd
+
+Once the CA key has been installed and marked as a trusted key, you are ready
+to use a private key/CA signed cert combination for SSH. Continuing with our
+current example, we will create a new key-pair for for host access and then
+sign it with our CA key
+
+.. prompt:: bash
+
+  # make a new key pair
+  [root@host1 ~]# ssh-keygen -t rsa -f cephadm-ssh-key -N ""
+  # sign the private key. This will create a new cephadm-ssh-key-cert.pub
+  # note here we're using user "root". If you'd like to use a non-root
+  # user the arguments to the -I and -n params would need to be adjusted
+  # Additionally, note the -V param indicates how long until the cert
+  # this creates will expire
+  [root@host1 ~]# ssh-keygen -s ca-key -I user_root -n root -V +52w cephadm-ssh-key
+  [root@host1 ~]# ls
+  ca-key  ca-key.pub  cephadm-ssh-key  cephadm-ssh-key-cert.pub  cephadm-ssh-key.pub
+
+  # verify our signed key is working. To do this, make sure the generated private
+  # key ("cephadm-ssh-key" in our example) and the newly signed cert are stored
+  # in the same directory. Then try to ssh using the private key
+  [root@host1 ~]# ssh -i cephadm-ssh-key host2
+
+Once you have your private key and corresponding CA signed cert and have tested
+SSH authentication using that key works, you can pass those keys to bootstrap
+in order to have cephadm use them for SSHing between cluster hosts
+
+.. prompt:: bash
+
+  [root@host1 ~]# cephadm bootstrap --mon-ip <ip-addr> --ssh-private-key cephadm-ssh-key --ssh-signed-cert cephadm-ssh-key-cert.pub
+
+Note that this setup does not require installing the corresponding public key
+from the private key passed to bootstrap on other nodes. In fact, cephadm will
+reject the ``--ssh-public-key`` argument when passed along with ``--ssh-signed-cert``.
+Not because having the public key breaks anything, but because it is not at all needed
+for this setup and it helps bootstrap differentiate if the user wants the CA signed
+keys setup or standard pubkey encryption. What this means is, SSH key rotation
+would simply be a matter of getting another key signed by the same CA and providing
+cephadm with the new private key and signed cert. No additional distribution of
+keys to cluster nodes is needed after the initial setup of the CA key as a trusted key,
+no matter how many new private key/signed cert pairs are rotated in.
index 6596a8acdb452d9de0734b4b2a6e309bc134fed5..82f83bfac8e7d50191264d485361e2e342b1af0c 100644 (file)
@@ -541,13 +541,60 @@ a spec like
 
 which would cause each mon daemon to be deployed with `--cpus=2`.
 
+There are two ways to express arguments in the ``extra_container_args`` list.
+To start, an item in the list can be a string. When passing an argument
+as a string and the string contains spaces, Cephadm will automatically split it
+into multiple arguments. For example, ``--cpus 2`` would become ``["--cpus",
+"2"]`` when processed. Example:
+
+.. code-block:: yaml
+
+    service_type: mon
+    service_name: mon
+    placement:
+      hosts:
+        - host1
+        - host2
+        - host3
+    extra_container_args:
+      - "--cpus 2"
+
+As an alternative, an item in the list can be an object (mapping) containing
+the required key "argument" and an optional key "split". The value associated
+with the ``argument`` key must be a single string. The value associated with
+the ``split`` key is a boolean value. The ``split`` key explicitly controls if
+spaces in the argument value cause the value to be split into multiple
+arguments. If ``split`` is true then Cephadm will automatically split the value
+into multiple arguments.  If ``split`` is false then spaces in the value will
+be retained in the argument.  The default, when ``split`` is not provided, is
+false. Examples:
+
+.. code-block:: yaml
+
+    service_type: mon
+    service_name: mon
+    placement:
+      hosts:
+        - tiebreaker
+    extra_container_args:
+      # No spaces, always treated as a single argument
+      - argument: "--timout=3000"
+      # Splitting explicitly disabled, one single argument
+      - argument: "--annotation=com.example.name=my favorite mon"
+        split: false
+      # Splitting explicitly enabled, will become two arguments
+      - argument: "--cpuset-cpus 1-3,7-11"
+        split: true
+      # Splitting implicitly disabled, one single argument
+      - argument: "--annotation=com.example.note=a simple example"
+
 Mounting Files with Extra Container Arguments
 ---------------------------------------------
 
 A common use case for extra container arguments is to mount additional
-files within the container. However, some intuitive formats for doing
-so can cause deployment to fail (see https://tracker.ceph.com/issues/57338).
-The recommended syntax for mounting a file with extra container arguments is:
+files within the container. Older versions of Ceph did not support spaces
+in arguments and therefore the examples below apply to the widest range
+of Ceph versions.
 
 .. code-block:: yaml
 
@@ -587,6 +634,55 @@ the node-exporter service , one could apply a service spec like
   extra_entrypoint_args:
     - "--collector.textfile.directory=/var/lib/node_exporter/textfile_collector2"
 
+There are two ways to express arguments in the ``extra_entrypoint_args`` list.
+To start, an item in the list can be a string. When passing an argument as a
+string and the string contains spaces, cephadm will automatically split it into
+multiple arguments. For example, ``--debug_ms 10`` would become
+``["--debug_ms", "10"]`` when processed. Example:
+
+.. code-block:: yaml
+
+    service_type: mon
+    service_name: mon
+    placement:
+      hosts:
+        - host1
+        - host2
+        - host3
+    extra_entrypoint_args:
+      - "--debug_ms 2"
+
+As an alternative, an item in the list can be an object (mapping) containing
+the required key "argument" and an optional key "split". The value associated
+with the ``argument`` key must be a single string. The value associated with
+the ``split`` key is a boolean value. The ``split`` key explicitly controls if
+spaces in the argument value cause the value to be split into multiple
+arguments. If ``split`` is true then cephadm will automatically split the value
+into multiple arguments.  If ``split`` is false then spaces in the value will
+be retained in the argument.  The default, when ``split`` is not provided, is
+false. Examples:
+
+.. code-block:: yaml
+
+    # An theoretical data migration service
+    service_type: pretend
+    service_name: imagine1
+    placement:
+      hosts:
+        - host1
+    extra_entrypoint_args:
+      # No spaces, always treated as a single argument
+      - argument: "--timout=30m"
+      # Splitting explicitly disabled, one single argument
+      - argument: "--import=/mnt/usb/My Documents"
+        split: false
+      # Splitting explicitly enabled, will become two arguments
+      - argument: "--tag documents"
+        split: true
+      # Splitting implicitly disabled, one single argument
+      - argument: "--title=Imported Documents"
+
+
 Custom Config Files
 ===================
 
index 949a0fa5d8e7a87340c5b22ecbc017993c6eeb8d..96b7c2dda78a4476bed832fcc73664c89e65e5f9 100644 (file)
@@ -20,7 +20,18 @@ For example:
   ceph fs volume create <fs_name> --placement="<placement spec>"
 
 where ``fs_name`` is the name of the CephFS and ``placement`` is a
-:ref:`orchestrator-cli-placement-spec`.
+:ref:`orchestrator-cli-placement-spec`. For example, to place
+MDS daemons for the new ``foo`` volume on hosts labeled with ``mds``:
+
+.. prompt:: bash #
+
+  ceph fs volume create foo --placement="label:mds"
+
+You can also update the placement after-the-fact via:
+
+.. prompt:: bash #
+
+  ceph orch apply mds foo 'mds-[012]'
 
 For manually deploying MDS daemons, use this specification:
 
@@ -30,6 +41,7 @@ For manually deploying MDS daemons, use this specification:
     service_id: fs_name
     placement:
       count: 3
+      label: mds
 
 
 The specification can then be applied using:
index 133a00d77217b2e299a5d714a1c0412be2b47459..9baff3a7a2a455677b378fe274ccd1bc428df9b5 100644 (file)
@@ -4,8 +4,8 @@
 MGR Service
 ===========
 
-The cephadm MGR service is hosting different modules, like the :ref:`mgr-dashboard`
-and the cephadm manager module.
+The cephadm MGR service hosts multiple modules. These include the
+:ref:`mgr-dashboard` and the cephadm manager module.
 
 .. _cephadm-mgr-networks:
 
index 0e263275d13bc2dddca26ad59392b251e8a007b7..2f12c591631f639edb9c0c35b07203d841db7591 100644 (file)
@@ -161,6 +161,53 @@ that will tell it to bind to that specific IP.
 Note that in these setups, one should make sure to include ``count: 1`` in the
 nfs placement, as it's only possible for one nfs daemon to bind to the virtual IP.
 
+NFS with HAProxy Protocol Support
+----------------------------------
+
+Cephadm supports deploying NFS in High-Availability mode with additional
+HAProxy protocol support. This works just like High-availability NFS but also
+supports client IP level configuration on NFS Exports.  This feature requires
+`NFS-Ganesha v5.0`_ or later.
+
+.. _NFS-Ganesha v5.0: https://github.com/nfs-ganesha/nfs-ganesha/wiki/ReleaseNotes_5
+
+To use this mode, you'll either want to set up the service using the nfs module
+(see :ref:`nfs-module-cluster-create`) or manually create services with the
+extra parameter ``enable_haproxy_protocol`` set to true. Both NFS Service and
+Ingress service must have ``enable_haproxy_protocol`` set to the same value.
+For example:
+
+.. code-block:: yaml
+
+    service_type: ingress
+    service_id: nfs.foo
+    placement:
+      count: 1
+      hosts:
+      - host1
+      - host2
+      - host3
+    spec:
+      backend_service: nfs.foo
+      monitor_port: 9049
+      virtual_ip: 192.168.122.100/24
+      enable_haproxy_protocol: true
+
+.. code-block:: yaml
+
+    service_type: nfs
+    service_id: foo
+    placement:
+      count: 1
+      hosts:
+      - host1
+      - host2
+      - host3
+    spec:
+      port: 2049
+      enable_haproxy_protocol: true
+
+
 Further Reading
 ===============
 
index 00e414c1b2bcf0a4afa4d4e76afd087006fbe8e4..f62b0f83116ec3bf8b1fa9621fc5cb53e159f083 100644 (file)
@@ -15,10 +15,9 @@ To print a list of devices discovered by ``cephadm``, run this command:
 
 .. prompt:: bash #
 
-    ceph orch device ls [--hostname=...] [--wide] [--refresh]
+  ceph orch device ls [--hostname=...] [--wide] [--refresh]
 
-Example
-::
+Example::
 
   Hostname  Path      Type  Serial              Size   Health   Ident  Fault  Available
   srv-01    /dev/sdb  hdd   15P0A0YFFRD6         300G  Unknown  N/A    N/A    No
@@ -44,7 +43,7 @@ enable cephadm's "enhanced device scan" option as follows;
 
 .. prompt:: bash #
 
-    ceph config set mgr mgr/cephadm/device_enhanced_scan true
+  ceph config set mgr mgr/cephadm/device_enhanced_scan true
 
 .. warning::
     Although the libstoragemgmt library performs standard SCSI inquiry calls,
@@ -173,16 +172,16 @@ will happen without actually creating the OSDs.
 
 For example:
 
-   .. prompt:: bash #
+.. prompt:: bash #
 
-     ceph orch apply osd --all-available-devices --dry-run
+  ceph orch apply osd --all-available-devices --dry-run
 
-   ::
+::
 
-     NAME                  HOST  DATA      DB  WAL
-     all-available-devices node1 /dev/vdb  -   -
-     all-available-devices node2 /dev/vdc  -   -
-     all-available-devices node3 /dev/vdd  -   -
+  NAME                  HOST  DATA      DB  WAL
+  all-available-devices node1 /dev/vdb  -   -
+  all-available-devices node2 /dev/vdc  -   -
+  all-available-devices node3 /dev/vdd  -   -
 
 .. _cephadm-osd-declarative:
 
@@ -197,9 +196,9 @@ command completes will be automatically found and added to the cluster.
 
 We will examine the effects of the following command:
 
-   .. prompt:: bash #
+.. prompt:: bash #
 
-     ceph orch apply osd --all-available-devices
+  ceph orch apply osd --all-available-devices
 
 After running the above command: 
 
@@ -212,17 +211,17 @@ If you want to avoid this behavior (disable automatic creation of OSD on availab
 
 .. prompt:: bash #
 
-   ceph orch apply osd --all-available-devices --unmanaged=true
+  ceph orch apply osd --all-available-devices --unmanaged=true
 
 .. note::
 
-  Keep these three facts in mind:
+    Keep these three facts in mind:
 
-  - The default behavior of ``ceph orch apply`` causes cephadm constantly to reconcile. This means that cephadm creates OSDs as soon as new drives are detected.
+    - The default behavior of ``ceph orch apply`` causes cephadm constantly to reconcile. This means that cephadm creates OSDs as soon as new drives are detected.
 
-  - Setting ``unmanaged: True`` disables the creation of OSDs. If ``unmanaged: True`` is set, nothing will happen even if you apply a new OSD service.
+    - Setting ``unmanaged: True`` disables the creation of OSDs. If ``unmanaged: True`` is set, nothing will happen even if you apply a new OSD service.
 
-  - ``ceph orch daemon add`` creates OSDs, but does not add an OSD service.
+    - ``ceph orch daemon add`` creates OSDs, but does not add an OSD service.
 
 * For cephadm, see also :ref:`cephadm-spec-unmanaged`.
 
@@ -250,7 +249,7 @@ Example:
 
 Expected output::
 
-   Scheduled OSD(s) for removal
+  Scheduled OSD(s) for removal
 
 OSDs that are not safe to destroy will be rejected.
 
@@ -273,14 +272,14 @@ You can query the state of OSD operation with the following command:
 
 .. prompt:: bash #
 
-   ceph orch osd rm status
+  ceph orch osd rm status
 
 Expected output::
 
-    OSD_ID  HOST         STATE                    PG_COUNT  REPLACE  FORCE  STARTED_AT
-    2       cephadm-dev  done, waiting for purge  0         True     False  2020-07-17 13:01:43.147684
-    3       cephadm-dev  draining                 17        False    True   2020-07-17 13:01:45.162158
-    4       cephadm-dev  started                  42        False    True   2020-07-17 13:01:45.162158
+  OSD_ID  HOST         STATE                    PG_COUNT  REPLACE  FORCE  STARTED_AT
+  2       cephadm-dev  done, waiting for purge  0         True     False  2020-07-17 13:01:43.147684
+  3       cephadm-dev  draining                 17        False    True   2020-07-17 13:01:45.162158
+  4       cephadm-dev  started                  42        False    True   2020-07-17 13:01:45.162158
 
 
 When no PGs are left on the OSD, it will be decommissioned and removed from the cluster.
@@ -302,11 +301,11 @@ Example:
 
 .. prompt:: bash #
 
-    ceph orch osd rm stop 4
+  ceph orch osd rm stop 4
 
 Expected output::
 
-    Stopped OSD(s) removal
+  Stopped OSD(s) removal
 
 This resets the initial state of the OSD and takes it off the removal queue.
 
@@ -327,7 +326,7 @@ Example:
 
 Expected output::
 
-   Scheduled OSD(s) for replacement
+  Scheduled OSD(s) for replacement
 
 This follows the same procedure as the procedure in the "Remove OSD" section, with
 one exception: the OSD is not permanently removed from the CRUSH hierarchy, but is
@@ -434,10 +433,10 @@ the ``ceph orch ps`` output in the ``MEM LIMIT`` column::
 To exclude an OSD from memory autotuning, disable the autotune option
 for that OSD and also set a specific memory target.  For example,
 
-  .. prompt:: bash #
+.. prompt:: bash #
 
-    ceph config set osd.123 osd_memory_target_autotune false
-    ceph config set osd.123 osd_memory_target 16G
+  ceph config set osd.123 osd_memory_target_autotune false
+  ceph config set osd.123 osd_memory_target 16G
 
 
 .. _drivegroups:
@@ -500,7 +499,7 @@ Example
 
 .. prompt:: bash [monitor.1]#
 
-   ceph orch apply -i /path/to/osd_spec.yml --dry-run
+  ceph orch apply -i /path/to/osd_spec.yml --dry-run
 
 
 
@@ -510,9 +509,9 @@ Filters
 -------
 
 .. note::
-   Filters are applied using an `AND` gate by default. This means that a drive
-   must fulfill all filter criteria in order to get selected. This behavior can
-   be adjusted by setting ``filter_logic: OR`` in the OSD specification. 
+    Filters are applied using an `AND` gate by default. This means that a drive
+    must fulfill all filter criteria in order to get selected. This behavior can
+    be adjusted by setting ``filter_logic: OR`` in the OSD specification. 
 
 Filters are used to assign disks to groups, using their attributes to group
 them. 
@@ -522,7 +521,7 @@ information about the attributes with this command:
 
 .. code-block:: bash
 
-  ceph-volume inventory </path/to/disk>
+    ceph-volume inventory </path/to/disk>
 
 Vendor or Model
 ^^^^^^^^^^^^^^^
@@ -631,9 +630,9 @@ but want to use only the first two, you could use `limit`:
 
 .. code-block:: yaml
 
-  data_devices:
-    vendor: VendorA
-    limit: 2
+    data_devices:
+      vendor: VendorA
+      limit: 2
 
 .. note:: `limit` is a last resort and shouldn't be used if it can be avoided.
 
@@ -856,8 +855,8 @@ See :ref:`orchestrator-cli-placement-spec`
 
 .. note::
 
-   Assuming each host has a unique disk layout, each OSD 
-   spec needs to have a different service id
+    Assuming each host has a unique disk layout, each OSD 
+    spec needs to have a different service id
 
 
 Dedicated wal + db
@@ -987,7 +986,7 @@ activates all existing OSDs on a host.
 
 .. prompt:: bash #
 
-   ceph cephadm osd activate <host>...
+  ceph cephadm osd activate <host>...
 
 This will scan all existing disks for OSDs and deploy corresponding daemons.
 
index 818648cf5fee46bd7145f0d42c813eec5b6a7383..20ec39a88dd1a8fa84e5d13d9c31ca716017d957 100644 (file)
@@ -239,12 +239,14 @@ It is a yaml format file with the following properties:
         - host2
         - host3
     spec:
-      backend_service: rgw.something      # adjust to match your existing RGW service
-      virtual_ip: <string>/<string>       # ex: 192.168.20.1/24
-      frontend_port: <integer>            # ex: 8080
-      monitor_port: <integer>             # ex: 1967, used by haproxy for load balancer status
-      virtual_interface_networks: [ ... ] # optional: list of CIDR networks
-      ssl_cert: |                         # optional: SSL certificate and key
+      backend_service: rgw.something            # adjust to match your existing RGW service
+      virtual_ip: <string>/<string>             # ex: 192.168.20.1/24
+      frontend_port: <integer>                  # ex: 8080
+      monitor_port: <integer>                   # ex: 1967, used by haproxy for load balancer status
+      virtual_interface_networks: [ ... ]       # optional: list of CIDR networks
+      use_keepalived_multicast: <bool>          # optional: Default is False.
+      vrrp_interface_network: <string>/<string> # optional: ex: 192.168.20.0/24
+      ssl_cert: |                               # optional: SSL certificate and key
         -----BEGIN CERTIFICATE-----
         ...
         -----END CERTIFICATE-----
@@ -270,6 +272,7 @@ It is a yaml format file with the following properties:
       frontend_port: <integer>            # ex: 8080
       monitor_port: <integer>             # ex: 1967, used by haproxy for load balancer status
       virtual_interface_networks: [ ... ] # optional: list of CIDR networks
+      first_virtual_router_id: <integer>  # optional: default 50
       ssl_cert: |                         # optional: SSL certificate and key
         -----BEGIN CERTIFICATE-----
         ...
@@ -303,6 +306,21 @@ where the properties of this service specification are:
 * ``ssl_cert``:
     SSL certificate, if SSL is to be enabled. This must contain the both the certificate and
     private key blocks in .pem format.
+* ``use_keepalived_multicast``
+    Default is False. By default, cephadm will deploy keepalived config to use unicast IPs,
+    using the IPs of the hosts. The IPs chosen will be the same IPs cephadm uses to connect
+    to the machines. But if multicast is prefered, we can set ``use_keepalived_multicast``
+    to ``True`` and Keepalived will use multicast IP (224.0.0.18) to communicate between instances,
+    using the same interfaces as where the VIPs are.
+* ``vrrp_interface_network``
+    By default, cephadm will configure keepalived to use the same interface where the VIPs are
+    for VRRP communication. If another interface is needed, it can be set via ``vrrp_interface_network``
+    with a network to identify which ethernet interface to use.
+* ``first_virtual_router_id``
+    Default is 50. When deploying more than 1 ingress, this parameter can be used to ensure each
+    keepalived will have different virtual_router_id. In the case of using ``virtual_ips_list``,
+    each IP will create its own virtual router. So the first one will have ``first_virtual_router_id``,
+    second one will have ``first_virtual_router_id`` + 1, etc. Valid values go from 1 to 255.
 
 .. _ingress-virtual-ip:
 
index 5ec692881661a76721fcd259ef63296d704f6f10..d891ebaf2e0389f5aa9ce274d2a9b579d94a38fc 100644 (file)
@@ -1,60 +1,56 @@
 Troubleshooting
 ===============
 
-You may wish to investigate why a cephadm command failed
-or why a certain service no longer runs properly.
+This section explains how to investigate why a cephadm command failed or why a
+certain service no longer runs properly.
 
-Cephadm deploys daemons within containers. This means that
-troubleshooting those containerized daemons will require
-a different process than traditional package-install daemons.
+Cephadm deploys daemons within containers. Troubleshooting containerized
+daemons requires a different process than does troubleshooting traditional
+daemons that were installed by means of packages.
 
-Here are some tools and commands to help you troubleshoot
-your Ceph environment.
+Here are some tools and commands to help you troubleshoot your Ceph
+environment.
 
 .. _cephadm-pause:
 
 Pausing or Disabling cephadm
 ----------------------------
 
-If something goes wrong and cephadm is behaving badly, you can
-pause most of the Ceph cluster's background activity by running
-the following command: 
+If something goes wrong and cephadm is behaving badly, pause most of the Ceph
+cluster's background activity by running the following command: 
 
 .. prompt:: bash #
 
   ceph orch pause
 
-This stops all changes in the Ceph cluster, but cephadm will
-still periodically check hosts to refresh its inventory of
-daemons and devices.  You can disable cephadm completely by
-running the following commands:
+This stops all changes in the Ceph cluster, but cephadm will still periodically
+check hosts to refresh its inventory of daemons and devices. Disable cephadm
+completely by running the following commands:
 
 .. prompt:: bash #
 
   ceph orch set backend ''
   ceph mgr module disable cephadm
 
-These commands disable all of the ``ceph orch ...`` CLI commands.
-All previously deployed daemon containers continue to exist and
-will start as they did before you ran these commands.
+These commands disable all of the ``ceph orch ...`` CLI commands. All
+previously deployed daemon containers continue to run and will start just as
+they were before you ran these commands.
 
-See :ref:`cephadm-spec-unmanaged` for information on disabling
-individual services.
+See :ref:`cephadm-spec-unmanaged` for more on disabling individual services.
 
 
 Per-service and Per-daemon Events
 ---------------------------------
 
-In order to facilitate debugging failed daemons,
-cephadm stores events per service and per daemon.
-These events often contain information relevant to
-troubleshooting your Ceph cluster. 
+To make it easier to debug failed daemons, cephadm stores events per service
+and per daemon. These events often contain information relevant to
+the troubleshooting of your Ceph cluster. 
 
 Listing Service Events
 ~~~~~~~~~~~~~~~~~~~~~~
 
-To see the events associated with a certain service, run a
-command of the and following form:
+To see the events associated with a certain service, run a command of the 
+following form:
 
 .. prompt:: bash #
 
@@ -81,8 +77,8 @@ This will return something in the following form:
 Listing Daemon Events
 ~~~~~~~~~~~~~~~~~~~~~
 
-To see the events associated with a certain daemon, run a
-command of the and following form:
+To see the events associated with a certain daemon, run a command of the
+following form:
 
 .. prompt:: bash #
 
@@ -105,32 +101,41 @@ This will return something in the following form:
 Checking Cephadm Logs
 ---------------------
 
-To learn how to monitor cephadm logs as they are generated, read :ref:`watching_cephadm_logs`.
+To learn how to monitor cephadm logs as they are generated, read
+:ref:`watching_cephadm_logs`.
 
-If your Ceph cluster has been configured to log events to files, there will be a
-``ceph.cephadm.log`` file on all monitor hosts (see
-:ref:`cephadm-logs` for a more complete explanation).
+If your Ceph cluster has been configured to log events to files, there will be
+a ``ceph.cephadm.log`` file on all monitor hosts. See :ref:`cephadm-logs` for a
+more complete explanation.
 
 Gathering Log Files
 -------------------
 
-Use journalctl to gather the log files of all daemons:
+Use ``journalctl`` to gather the log files of all daemons:
 
 .. note:: By default cephadm now stores logs in journald. This means
    that you will no longer find daemon logs in ``/var/log/ceph/``.
 
-To read the log file of one specific daemon, run::
+To read the log file of one specific daemon, run a command of the following
+form:
 
-    cephadm logs --name <name-of-daemon>
+.. prompt:: bash
 
-Note: this only works when run on the same host where the daemon is running. To
-get logs of a daemon running on a different host, give the ``--fsid`` option::
+   cephadm logs --name <name-of-daemon>
 
-    cephadm logs --fsid <fsid> --name <name-of-daemon>
+.. Note:: This works only when run on the same host that is running the daemon.
+   To get the logs of a daemon that is running on a different host, add the
+   ``--fsid`` option to the command, as in the following example:
 
-where the ``<fsid>`` corresponds to the cluster ID printed by ``ceph status``.
+   .. prompt:: bash
 
-To fetch all log files of all daemons on a given host, run::
+      cephadm logs --fsid <fsid> --name <name-of-daemon>
+
+   In this example, ``<fsid>`` corresponds to the cluster ID returned by the
+   ``ceph status`` command.
+
+To fetch all log files of all daemons on a given host, run the following
+for-loop::
 
     for name in $(cephadm ls | jq -r '.[].name') ; do
       cephadm logs --fsid <fsid> --name "$name" > $name;
@@ -139,39 +144,41 @@ To fetch all log files of all daemons on a given host, run::
 Collecting Systemd Status
 -------------------------
 
-To print the state of a systemd unit, run::
+To print the state of a systemd unit, run a command of the following form: 
 
-      systemctl status "ceph-$(cephadm shell ceph fsid)@<service name>.service";
+.. prompt:: bash
 
+   systemctl status "ceph-$(cephadm shell ceph fsid)@<service name>.service";
 
-To fetch all state of all daemons of a given host, run::
 
-    fsid="$(cephadm shell ceph fsid)"
-    for name in $(cephadm ls | jq -r '.[].name') ; do
-      systemctl status "ceph-$fsid@$name.service" > $name;
-    done
+To fetch the state of all daemons of a given host, run the following shell
+script::
+
+   fsid="$(cephadm shell ceph fsid)"
+   for name in $(cephadm ls | jq -r '.[].name') ; do
+     systemctl status "ceph-$fsid@$name.service" > $name;
+   done
 
 
 List all Downloaded Container Images
 ------------------------------------
 
-To list all container images that are downloaded on a host:
+To list all container images that are downloaded on a host, run the following
+commands:
 
-.. note:: ``Image`` might also be called `ImageID`
+.. prompt:: bash #
 
-::
+   podman ps -a --format json | jq '.[].Image' "docker.io/library/centos:8" "registry.opensuse.org/opensuse/leap:15.2"
 
-    podman ps -a --format json | jq '.[].Image'
-    "docker.io/library/centos:8"
-    "registry.opensuse.org/opensuse/leap:15.2"
+.. note:: ``Image`` might also be called ``ImageID``.
 
 
 Manually Running Containers
 ---------------------------
 
 Cephadm uses small wrappers when running containers. Refer to
-``/var/lib/ceph/<cluster-fsid>/<service-name>/unit.run`` for the
-container execution command.
+``/var/lib/ceph/<cluster-fsid>/<service-name>/unit.run`` for the container
+execution command.
 
 .. _cephadm-ssh-errors:
 
@@ -187,9 +194,10 @@ Error message::
   Please make sure that the host is reachable and accepts connections using the cephadm SSH key
   ...
 
-Things Ceph administrators can do:
+If you receive the above error message, try the following things to
+troubleshoot the SSH connection between ``cephadm`` and the monitor:
 
-1. Ensure cephadm has an SSH identity key::
+1. Ensure that ``cephadm`` has an SSH identity key::
 
      [root@mon1~]# cephadm shell -- ceph config-key get mgr/cephadm/ssh_identity_key > ~/cephadm_private_key
      INFO:cephadm:Inferring fsid f8edc08a-7f17-11ea-8707-000c2915dd98
@@ -202,20 +210,21 @@ Things Ceph administrators can do:
 
  or::
 
-     [root@mon1 ~]# cat ~/cephadm_private_key | cephadm shell -- ceph cephadm set-ssk-key -i -
+     [root@mon1 ~]# cat ~/cephadm_private_key | cephadm shell -- ceph cephadm set-ssh-key -i -
 
 2. Ensure that the SSH config is correct::
 
      [root@mon1 ~]# cephadm shell -- ceph cephadm get-ssh-config > config
 
-3. Verify that we can connect to the host::
+3. Verify that it is possible to connect to the host::
 
      [root@mon1 ~]# ssh -F config -i ~/cephadm_private_key root@mon1
 
 Verifying that the Public Key is Listed in the authorized_keys file
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-To verify that the public key is in the authorized_keys file, run the following commands::
+To verify that the public key is in the ``authorized_keys`` file, run the
+following commands::
 
      [root@mon1 ~]# cephadm shell -- ceph cephadm get-pub-key > ~/ceph.pub
      [root@mon1 ~]# grep "`cat ~/ceph.pub`"  /root/.ssh/authorized_keys
@@ -231,27 +240,33 @@ Or this error::
 
    Must set public_network config option or specify a CIDR network, ceph addrvec, or plain IP
 
-This means that you must run a command of this form::
+This means that you must run a command of this form:
+
+.. prompt:: bash
 
-  ceph config set mon public_network <mon_network>
+   ceph config set mon public_network <mon_network>
 
-For more detail on operations of this kind, see :ref:`deploy_additional_monitors`
+For more detail on operations of this kind, see
+:ref:`deploy_additional_monitors`.
 
 Accessing the Admin Socket
 --------------------------
 
-Each Ceph daemon provides an admin socket that bypasses the
-MONs (See :ref:`rados-monitoring-using-admin-socket`).
+Each Ceph daemon provides an admin socket that bypasses the MONs (See
+:ref:`rados-monitoring-using-admin-socket`).
 
-To access the admin socket, first enter the daemon container on the host::
+#. To access the admin socket, enter the daemon container on the host::
 
-    [root@mon1 ~]# cephadm enter --name <daemon-name>
-    [ceph: root@mon1 /]# ceph --admin-daemon /var/run/ceph/ceph-<daemon-name>.asok config show
+   [root@mon1 ~]# cephadm enter --name <daemon-name>
+
+#. Run a command of the following form to see the admin socket's configuration::
+  
+   [ceph: root@mon1 /]# ceph --admin-daemon /var/run/ceph/ceph-<daemon-name>.asok config show
 
 Running Various Ceph Tools
 --------------------------------
 
-To run Ceph tools like ``ceph-objectstore-tool`` or 
+To run Ceph tools such as ``ceph-objectstore-tool`` or 
 ``ceph-monstore-tool``, invoke the cephadm CLI with
 ``cephadm shell --name <daemon-name>``.  For example::
 
@@ -268,100 +283,232 @@ To run Ceph tools like ``ceph-objectstore-tool`` or
     election_strategy: 1
     0: [v2:127.0.0.1:3300/0,v1:127.0.0.1:6789/0] mon.myhostname
 
-The cephadm shell sets up the environment in a way that is suitable
-for extended daemon maintenance and running daemons interactively
+The cephadm shell sets up the environment in a way that is suitable for
+extended daemon maintenance and for the interactive running of daemons
 
 .. _cephadm-restore-quorum:
 
 Restoring the Monitor Quorum
 ----------------------------
 
-If the Ceph monitor daemons (mons) cannot form a quorum, cephadm will not be
-able to manage the cluster until quorum is restored.
+If the Ceph Monitor daemons (mons) cannot form a quorum, ``cephadm`` will not
+be able to manage the cluster until quorum is restored.
 
 In order to restore the quorum, remove unhealthy monitors
 form the monmap by following these steps:
 
-1. Stop all mons. For each mon host::
+1. Stop all Monitors. Use ``ssh`` to connect to each Monitor's host, and then
+   while connected to the Monitor's host use ``cephadm`` to stop the Monitor
+   daemon:
+
+   .. prompt:: bash
 
-    ssh {mon-host}
-    cephadm unit --name mon.`hostname` stop
+      ssh {mon-host}
+      cephadm unit --name {mon.hostname} stop
 
 
-2. Identify a surviving monitor and log in to that host::
+2. Identify a surviving Monitor and log in to its host:
 
-    ssh {mon-host}
-    cephadm enter --name mon.`hostname`
+   .. prompt:: bash
 
-3. Follow the steps in :ref:`rados-mon-remove-from-unhealthy`
+      ssh {mon-host}
+      cephadm enter --name {mon.hostname}
+
+3. Follow the steps in :ref:`rados-mon-remove-from-unhealthy`.
 
 .. _cephadm-manually-deploy-mgr:
 
 Manually Deploying a Manager Daemon
 -----------------------------------
-At least one manager (mgr) daemon is required by cephadm in order to manage the
-cluster. If the last mgr in a cluster has been removed, follow these steps in
-order to deploy a manager called (for example)
-``mgr.hostname.smfvfd`` on a random host of your cluster manually. 
+At least one Manager (``mgr``) daemon is required by cephadm in order to manage
+the cluster. If the last remaining Manager has been removed from the Ceph
+cluster, follow these steps in order to deploy a fresh Manager on an arbitrary
+host in your cluster. In this example, the freshly-deployed Manager daemon is
+called ``mgr.hostname.smfvfd``.
+
+#. Disable the cephadm scheduler, in order to prevent ``cephadm`` from removing
+   the new Manager. See :ref:`cephadm-enable-cli`:
+
+   .. prompt:: bash #
+
+      ceph config-key set mgr/cephadm/pause true
+
+#. Retrieve or create the "auth entry" for the new Manager:
 
-Disable the cephadm scheduler, in order to prevent cephadm from removing the new 
-manager. See :ref:`cephadm-enable-cli`::
+   .. prompt:: bash #
 
-  ceph config-key set mgr/cephadm/pause true
+      ceph auth get-or-create mgr.hostname.smfvfd mon "profile mgr" osd "allow *" mds "allow *"
 
-Then get or create the auth entry for the new manager::
+#. Retrieve the Monitor's configuration:
 
-  ceph auth get-or-create mgr.hostname.smfvfd mon "profile mgr" osd "allow *" mds "allow *"
+   .. prompt:: bash #
 
-Get the ceph.conf::
+      ceph config generate-minimal-conf
 
-  ceph config generate-minimal-conf
+#. Retrieve the container image:
 
-Get the container image::
+   .. prompt:: bash #
 
-  ceph config get "mgr.hostname.smfvfd" container_image
+      ceph config get "mgr.hostname.smfvfd" container_image
 
-Create a file ``config-json.json`` which contains the information necessary to deploy
-the daemon:
+#. Create a file called ``config-json.json``, which contains the information
+   necessary to deploy the daemon:
 
-.. code-block:: json
+   .. code-block:: json
 
-  {
-    "config": "# minimal ceph.conf for 8255263a-a97e-4934-822c-00bfe029b28f\n[global]\n\tfsid = 8255263a-a97e-4934-822c-00bfe029b28f\n\tmon_host = [v2:192.168.0.1:40483/0,v1:192.168.0.1:40484/0]\n",
-    "keyring": "[mgr.hostname.smfvfd]\n\tkey = V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4=\n"
-  }
+     {
+       "config": "# minimal ceph.conf for 8255263a-a97e-4934-822c-00bfe029b28f\n[global]\n\tfsid = 8255263a-a97e-4934-822c-00bfe029b28f\n\tmon_host = [v2:192.168.0.1:40483/0,v1:192.168.0.1:40484/0]\n",
+       "keyring": "[mgr.hostname.smfvfd]\n\tkey = V2VyIGRhcyBsaWVzdCBpc3QgZG9vZi4=\n"
+     }
 
-Deploy the daemon::
+#. Deploy the Manager daemon:
 
-  cephadm --image <container-image> deploy --fsid <fsid> --name mgr.hostname.smfvfd --config-json config-json.json
+   .. prompt:: bash #
 
-Analyzing Core Dumps
+      cephadm --image <container-image> deploy --fsid <fsid> --name mgr.hostname.smfvfd --config-json config-json.json
+
+Capturing Core Dumps
 ---------------------
 
-When a Ceph daemon crashes, cephadm supports analyzing core dumps. To enable core dumps, run
+A Ceph cluster that uses ``cephadm`` can be configured to capture core dumps.
+The initial capture and processing of the coredump is performed by
+`systemd-coredump
+<https://www.man7.org/linux/man-pages/man8/systemd-coredump.8.html>`_.
+
+
+To enable coredump handling, run the following command
 
 .. prompt:: bash #
 
-  ulimit -c unlimited
+   ulimit -c unlimited
 
-Core dumps will now be written to ``/var/lib/systemd/coredump``.
 
 .. note::
 
-  Core dumps are not namespaced by the kernel, which means
-  they will be written to ``/var/lib/systemd/coredump`` on
-  the container host. 
+  Core dumps are not namespaced by the kernel. This means that core dumps are
+  written to ``/var/lib/systemd/coredump`` on the container host. The ``ulimit
+  -c unlimited`` setting  will persist  only until the system is rebooted.
+
+Wait for the crash to happen again. To simulate the crash of a daemon, run for
+example ``killall -3 ceph-mon``.
+
+
+Running the Debugger with cephadm
+----------------------------------
+
+Running a single debugging session
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Initiate a debugging session by using the ``cephadm shell`` command.
+From within the shell container we need to install the debugger and debuginfo
+packages. To debug a core file captured by systemd, run the following:
+
+
+#. Start the shell session:
+
+   .. prompt:: bash #
+
+      cephadm shell --mount /var/lib/system/coredump
+
+#. From within the shell session, run the following commands:
+
+   .. prompt:: bash #
+
+      dnf install ceph-debuginfo gdb zstd
+
+   .. prompt:: bash #
+      
+    unzstd /var/lib/systemd/coredump/core.ceph-*.zst
+
+   .. prompt:: bash #
+
+    gdb /usr/bin/ceph-mon /mnt/coredump/core.ceph-*.zst
+
+#. Run debugger commands at gdb's prompt:
+
+   .. prompt:: bash (gdb)
+
+      bt
+      
+   ::
+
+      #0  0x00007fa9117383fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
+      #1  0x00007fa910d7f8f0 in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
+      #2  0x00007fa913d3f48f in AsyncMessenger::wait() () from /usr/lib64/ceph/libceph-common.so.2
+      #3  0x0000563085ca3d7e in main ()
+
+
+Running repeated debugging sessions
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+When using ``cephadm shell``, as in the example above, any changes made to the
+container that is spawned by the shell command are ephemeral. After the shell
+session exits, the files that were downloaded and installed cease to be
+available. You can simply re-run the same commands every time ``cephadm
+shell`` is invoked, but in order to save time and resources one can create a
+new container image and use it for repeated debugging sessions.
+
+In the following example, we create a simple file that will construct the
+container image. The command below uses podman but it is expected to work
+correctly even if ``podman`` is replaced with ``docker``::
+
+  cat >Containerfile <<EOF
+  ARG BASE_IMG=quay.io/ceph/ceph:v18
+  FROM \${BASE_IMG}
+  # install ceph debuginfo packages, gdb and other potentially useful packages
+  RUN dnf install --enablerepo='*debug*' -y ceph-debuginfo gdb zstd strace python3-debuginfo
+  EOF
+  podman build -t ceph:debugging -f Containerfile .
+  # pass --build-arg=BASE_IMG=<your image> to customize the base image
+
+The above file creates a new local image named ``ceph:debugging``. This image
+can be used on the same machine that built it. The image can also be pushed to
+a container repository or saved and copied to a node runing other Ceph
+containers. Consult the ``podman`` or ``docker`` documentation for more
+information about the container workflow.
+
+After the image has been built, it can be used to initiate repeat debugging
+sessions. By using an image in this way, you avoid the trouble of having to
+re-install the debug tools and debuginfo packages every time you need to run a
+debug session. To debug a core file using this image, in the same way as
+previously described, run:
+
+.. prompt:: bash #
+
+    cephadm --image ceph:debugging shell --mount /var/lib/system/coredump
+
+
+Debugging live processes
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+The gdb debugger can attach to running processes to debug them. This can be
+achieved with a containerized process by using the debug image and attaching it
+to the same PID namespace in which the process to be debugged resides.
+
+This requires running a container command with some custom arguments. We can
+generate a script that can debug a process in a running container.
+
+.. prompt:: bash #
+
+   cephadm --image ceph:debugging shell --dry-run > /tmp/debug.sh
+
+This creates a script that includes the container command that ``cephadm``
+would use to create a shell. Modify the script by removing the ``--init``
+argument and replace it with the argument that joins to the namespace used for
+a running running container. For example, assume we want to debug the Manager
+and have determnined that the Manager is running in a container named
+``ceph-bc615290-685b-11ee-84a6-525400220000-mgr-ceph0-sluwsk``. In this case,
+the argument
+``--pid=container:ceph-bc615290-685b-11ee-84a6-525400220000-mgr-ceph0-sluwsk``
+should be used.
 
-Now, wait for the crash to happen again. To simulate the crash of a daemon, run e.g. ``killall -3 ceph-mon``.
+We can run our debugging container with ``sh /tmp/debug.sh``. Within the shell,
+we can run commands such as ``ps`` to get the PID of the Manager process. In
+the following example this is ``2``. While running gdb, we can attach to the
+running process:
 
-Install debug packages including ``ceph-debuginfo`` by entering the cephadm shelll::
+.. prompt:: bash (gdb)
 
-  # cephadm shell --mount /var/lib/systemd/coredump
-  [ceph: root@host1 /]# dnf install ceph-debuginfo gdb zstd
-  [ceph: root@host1 /]# unzstd /mnt/coredump/core.ceph-*.zst
-  [ceph: root@host1 /]# gdb /usr/bin/ceph-mon /mnt/coredump/core.ceph-...
-  (gdb) bt
-  #0  0x00007fa9117383fc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
-  #1  0x00007fa910d7f8f0 in std::condition_variable::wait(std::unique_lock<std::mutex>&) () from /lib64/libstdc++.so.6
-  #2  0x00007fa913d3f48f in AsyncMessenger::wait() () from /usr/lib64/ceph/libceph-common.so.2
-  #3  0x0000563085ca3d7e in main ()
+   attach 2
+   info threads
+   bt
index e5acc9ab870512cc1e00aedd578dcbdee29479a0..cd912b42aeafd2010a386175276deaee7adbf74c 100644 (file)
@@ -15,7 +15,7 @@ creation of multiple file systems use ``ceph fs flag set enable_multiple true``.
 
 ::
 
-    fs new <file system name> <metadata pool name> <data pool name>
+    ceph fs new <file system name> <metadata pool name> <data pool name>
 
 This command creates a new file system. The file system name and metadata pool
 name are self-explanatory. The specified data pool is the default data pool and
@@ -25,19 +25,19 @@ to accommodate the new file system.
 
 ::
 
-    fs ls
+    ceph fs ls
 
 List all file systems by name.
 
 ::
 
-    fs lsflags <file system name>
+    ceph fs lsflags <file system name>
 
 List all the flags set on a file system.
 
 ::
 
-    fs dump [epoch]
+    ceph fs dump [epoch]
 
 This dumps the FSMap at the given epoch (default: current) which includes all
 file system settings, MDS daemons and the ranks they hold, and the list of
@@ -46,7 +46,7 @@ standby MDS daemons.
 
 ::
 
-    fs rm <file system name> [--yes-i-really-mean-it]
+    ceph fs rm <file system name> [--yes-i-really-mean-it]
 
 Destroy a CephFS file system. This wipes information about the state of the
 file system from the FSMap. The metadata pool and data pools are untouched and
@@ -54,28 +54,28 @@ must be destroyed separately.
 
 ::
 
-    fs get <file system name>
+    ceph fs get <file system name>
 
 Get information about the named file system, including settings and ranks. This
-is a subset of the same information from the ``fs dump`` command.
+is a subset of the same information from the ``ceph fs dump`` command.
 
 ::
 
-    fs set <file system name> <var> <val>
+    ceph fs set <file system name> <var> <val>
 
 Change a setting on a file system. These settings are specific to the named
 file system and do not affect other file systems.
 
 ::
 
-    fs add_data_pool <file system name> <pool name/id>
+    ceph fs add_data_pool <file system name> <pool name/id>
 
 Add a data pool to the file system. This pool can be used for file layouts
 as an alternate location to store file data.
 
 ::
 
-    fs rm_data_pool <file system name> <pool name/id>
+    ceph fs rm_data_pool <file system name> <pool name/id>
 
 This command removes the specified pool from the list of data pools for the
 file system.  If any files have layouts for the removed data pool, the file
@@ -84,7 +84,7 @@ system) cannot be removed.
 
 ::
 
-    fs rename <file system name> <new file system name> [--yes-i-really-mean-it]
+    ceph fs rename <file system name> <new file system name> [--yes-i-really-mean-it]
 
 Rename a Ceph file system. This also changes the application tags on the data
 pools and metadata pool of the file system to the new file system name.
@@ -98,7 +98,7 @@ Settings
 
 ::
 
-    fs set <fs name> max_file_size <size in bytes>
+    ceph fs set <fs name> max_file_size <size in bytes>
 
 CephFS has a configurable maximum file size, and it's 1TB by default.
 You may wish to set this limit higher if you expect to store large files
@@ -132,13 +132,13 @@ Taking a CephFS cluster down is done by setting the down flag:
  
 :: 
  
-    fs set <fs_name> down true
+    ceph fs set <fs_name> down true
  
 To bring the cluster back online:
  
 :: 
 
-    fs set <fs_name> down false
+    ceph fs set <fs_name> down false
 
 This will also restore the previous value of max_mds. MDS daemons are brought
 down in a way such that journals are flushed to the metadata pool and all
@@ -149,11 +149,11 @@ Taking the cluster down rapidly for deletion or disaster recovery
 -----------------------------------------------------------------
 
 To allow rapidly deleting a file system (for testing) or to quickly bring the
-file system and MDS daemons down, use the ``fs fail`` command:
+file system and MDS daemons down, use the ``ceph fs fail`` command:
 
 ::
 
-    fs fail <fs_name>
+    ceph fs fail <fs_name>
 
 This command sets a file system flag to prevent standbys from
 activating on the file system (the ``joinable`` flag).
@@ -162,7 +162,7 @@ This process can also be done manually by doing the following:
 
 ::
 
-    fs set <fs_name> joinable false
+    ceph fs set <fs_name> joinable false
 
 Then the operator can fail all of the ranks which causes the MDS daemons to
 respawn as standbys. The file system will be left in a degraded state.
@@ -170,7 +170,7 @@ respawn as standbys. The file system will be left in a degraded state.
 ::
 
     # For all ranks, 0-N:
-    mds fail <fs_name>:<n>
+    ceph mds fail <fs_name>:<n>
 
 Once all ranks are inactive, the file system may also be deleted or left in
 this state for other purposes (perhaps disaster recovery).
@@ -179,7 +179,7 @@ To bring the cluster back up, simply set the joinable flag:
 
 ::
 
-    fs set <fs_name> joinable true
+    ceph fs set <fs_name> joinable true
 
 
 Daemons
@@ -198,34 +198,35 @@ Commands to manipulate MDS daemons:
 
 ::
 
-    mds fail <gid/name/role>
+    ceph mds fail <gid/name/role>
 
 Mark an MDS daemon as failed.  This is equivalent to what the cluster
 would do if an MDS daemon had failed to send a message to the mon
 for ``mds_beacon_grace`` second.  If the daemon was active and a suitable
-standby is available, using ``mds fail`` will force a failover to the standby.
+standby is available, using ``ceph mds fail`` will force a failover to the
+standby.
 
-If the MDS daemon was in reality still running, then using ``mds fail``
+If the MDS daemon was in reality still running, then using ``ceph mds fail``
 will cause the daemon to restart.  If it was active and a standby was
 available, then the "failed" daemon will return as a standby.
 
 
 ::
 
-    tell mds.<daemon name> command ...
+    ceph tell mds.<daemon name> command ...
 
 Send a command to the MDS daemon(s). Use ``mds.*`` to send a command to all
 daemons. Use ``ceph tell mds.* help`` to learn available commands.
 
 ::
 
-    mds metadata <gid/name/role>
+    ceph mds metadata <gid/name/role>
 
 Get metadata about the given MDS known to the Monitors.
 
 ::
 
-    mds repaired <role>
+    ceph mds repaired <role>
 
 Mark the file system rank as repaired. Unlike the name suggests, this command
 does not change a MDS; it manipulates the file system rank which has been
@@ -244,14 +245,14 @@ Commands to manipulate required client features of a file system:
 
 ::
 
-    fs required_client_features <fs name> add reply_encoding
-    fs required_client_features <fs name> rm reply_encoding
+    ceph fs required_client_features <fs name> add reply_encoding
+    ceph fs required_client_features <fs name> rm reply_encoding
 
 To list all CephFS features
 
 ::
 
-    fs feature ls
+    ceph fs feature ls
 
 Clients that are missing newly added features will be evicted automatically.
 
@@ -346,7 +347,7 @@ Global settings
 
 ::
 
-    fs flag set <flag name> <flag val> [<confirmation string>]
+    ceph fs flag set <flag name> <flag val> [<confirmation string>]
 
 Sets a global CephFS flag (i.e. not specific to a particular file system).
 Currently, the only flag setting is 'enable_multiple' which allows having
@@ -368,13 +369,13 @@ file system.
 
 ::
 
-    mds rmfailed
+    ceph mds rmfailed
 
 This removes a rank from the failed set.
 
 ::
 
-    fs reset <file system name>
+    ceph fs reset <file system name>
 
 This command resets the file system state to defaults, except for the name and
 pools. Non-zero ranks are saved in the stopped set.
@@ -382,7 +383,7 @@ pools. Non-zero ranks are saved in the stopped set.
 
 ::
 
-    fs new <file system name> <metadata pool name> <data pool name> --fscid <fscid> --force
+    ceph fs new <file system name> <metadata pool name> <data pool name> --fscid <fscid> --force
 
 This command creates a file system with a specific **fscid** (file system cluster ID).
 You may want to do this when an application expects the file system's ID to be
index 19cf414331984b4fdee56e6daa0c11e7bfca4e66..3fc757005d1ab63085f206633e41ca972a7a7a40 100644 (file)
@@ -154,14 +154,8 @@ readdir. The behavior of the decay counter is the same as for cache trimming or
 caps recall. Each readdir call increments the counter by the number of files in
 the result.
 
-The ratio of ``mds_max_caps_per_client`` that client must exceed before readdir
-maybe throttled by cap acquisition throttle:
-
 .. confval:: mds_session_max_caps_throttle_ratio
 
-The timeout in seconds after which a client request is retried due to cap
-acquisition throttling:
-
 .. confval:: mds_cap_acquisition_throttle_retry_request_timeout
 
 If the number of caps acquired by the client per session is greater than the
index cffca11cc3d4cf2f959e8d0b2afb389bd8b03df1..e7fd377bf735833cf2eb3fba11785ed59cc1e8bb 100644 (file)
@@ -42,28 +42,21 @@ FS Volumes
 
 Create a volume by running the following command:
 
-    $ ceph fs volume create <vol_name> [<placement>]
+.. prompt:: bash #
+
+   ceph fs volume create <vol_name> [placement]
 
 This creates a CephFS file system and its data and metadata pools. It can also
 deploy MDS daemons for the filesystem using a ceph-mgr orchestrator module (for
 example Rook). See :doc:`/mgr/orchestrator`.
 
-``<vol_name>`` is the volume name (an arbitrary string). ``<placement>`` is an
-optional string that specifies the hosts that should have an MDS running on
-them and, optionally, the total number of MDS daemons that the cluster should
-have. For example, the following placement string means "deploy MDS on nodes
-``host1`` and ``host2`` (one MDS per host)::
-
-    "host1,host2"
+``<vol_name>`` is the volume name (an arbitrary string). ``[placement]`` is an
+optional string that specifies the :ref:`orchestrator-cli-placement-spec` for
+the MDS. See also :ref:`orchestrator-cli-cephfs` for more examples on
+placement.
 
-The following placement specification means "deploy two MDS daemons on each of
-nodes ``host1`` and ``host2`` (for a total of four MDS daemons in the
-cluster)"::
-
-    "4 host1,host2"
-
-See :ref:`orchestrator-cli-service-spec` for more on placement specification.
-Specifying placement via a YAML file is not supported.
+.. note:: Specifying placement via a YAML file is not supported through the
+          volume interface.
 
 To remove a volume, run the following command:
 
@@ -72,6 +65,11 @@ To remove a volume, run the following command:
 This removes a file system and its data and metadata pools. It also tries to
 remove MDS daemons using the enabled ceph-mgr orchestrator module.
 
+.. note:: After volume deletion, it is recommended to restart `ceph-mgr`
+   if a new file system is created on the same cluster and subvolume interface
+   is being used. Please see https://tracker.ceph.com/issues/49605#note-5
+   for more details.
+
 List volumes by running the following command:
 
     $ ceph fs volume ls
index bd098dc91de32fc2505aa8a7e0a259b8f54a1dc6..f3ac054c9be15d8a55c22e01e04f6000dd53ffa0 100644 (file)
@@ -28,7 +28,7 @@ To FUSE-mount the Ceph file system, use the ``ceph-fuse`` command::
     mkdir /mnt/mycephfs
     ceph-fuse --id foo /mnt/mycephfs
 
-Option ``-id`` passes the name of the CephX user whose keyring we intend to
+Option ``--id`` passes the name of the CephX user whose keyring we intend to
 use for mounting CephFS. In the above command, it's ``foo``. You can also use
 ``-n`` instead, although ``--id`` is evidently easier::
 
index 0193ae748d10d34bf12441ebd040df40e8ca664b..e50a5148ec2de662fe5ddb14145a1671bd6b3429 100644 (file)
@@ -226,6 +226,20 @@ For the reverse situation:
 The ``home/patrick`` directory and its children will be pinned to rank 2
 because its export pin overrides the policy on ``home``.
 
+To remove a partitioning policy, remove the respective extended attribute
+or set the value to 0.
+
+.. code::bash
+   $ setfattr -n ceph.dir.pin.distributed -v 0 home
+   # or
+   $ setfattr -x ceph.dir.pin.distributed home
+
+For export pins, remove the extended attribute or set the extended attribute
+value to `-1`.
+
+.. code::bash
+   $ setfattr -n ceph.dir.pin -v -1 home
+
 
 Dynamic subtree partitioning with Balancer on specific ranks
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index 114f7580a400561ea3d90c96748314aa7b2e5abe..5b813f1c41ad822051169f2e6fb59c6c26568698 100644 (file)
@@ -143,3 +143,14 @@ The types of damage that can be reported and repaired by File System Scrub are:
 
 * BACKTRACE : Inode's backtrace in the data pool is corrupted.
 
+Evaluate strays using recursive scrub
+=====================================
+
+- In order to evaluate strays i.e. purge stray directories in ``~mdsdir`` use the following command::
+
+    ceph tell mds.<fsname>:0 scrub start ~mdsdir recursive
+
+- ``~mdsdir`` is not enqueued by default when scrubbing at the CephFS root. In order to perform stray evaluation
+  at root, run scrub with flags ``scrub_mdsdir`` and ``recursive``::
+
+    ceph tell mds.<fsname>:0 scrub start / recursive,scrub_mdsdir
index 74e2e2fd96b998a77245e4de52eba13c9041814e..2b8873699796c46e87f73b4576b112f11bc961fd 100644 (file)
@@ -162,6 +162,13 @@ Examples::
    snapshot creation is accounted for in the "created_count" field, which is a
    cumulative count of the total number of snapshots created so far.
 
+.. note: The maximum number of snapshots to retain per directory is limited by the
+   config tunable `mds_max_snaps_per_dir`. This tunable defaults to 100.
+   To ensure a new snapshot can be created, one snapshot less than this will be
+   retained. So by default, a maximum of 99 snapshots will be retained.
+
+.. note: The --fs argument is now required if there is more than one file system.
+
 Active and inactive schedules
 -----------------------------
 Snapshot schedules can be added for a path that doesn't exist yet in the
index b58d2469f6e62bda7e9a779af5f47e6f2aa2b895..0e511526b96c0f72a3c4989ee0628ce44ab82598 100644 (file)
@@ -98,7 +98,7 @@ things to do:
 
 .. code:: bash
 
-   ceph config set mds mds_heartbeat_reset_grace 3600
+   ceph config set mds mds_heartbeat_grace 3600
 
   This has the effect of having the MDS continue to send beacons to the monitors
   even when its internal "heartbeat" mechanism has not been reset (beat) in one
diff --git a/ceph/doc/dev/balancer-design.rst b/ceph/doc/dev/balancer-design.rst
new file mode 100644 (file)
index 0000000..684d163
--- /dev/null
@@ -0,0 +1,58 @@
+============================
+Balancing in Ceph
+============================
+
+Introduction
+============
+
+In distributed storage systems like Ceph, it is important to balance write and read requests for optimal performance. Write balancing ensures fast storage
+and replication of data in a cluster, while read balancing ensures quick access and retrieval of data in a cluster. Both types of balancing are important
+in distributed systems for different reasons.
+
+Upmap Balancing
+==========================
+
+Importance in a Cluster
+-----------------------
+
+Capacity balancing is a functional requirement. A system like Ceph is as full as its fullest device: When one device is full, the system can not serve write
+requests anymore, and Ceph loses its function. To avoid filling up devices, we want to balance capacity across the devices in a fair way. Each device should
+get a capacity proportional to its size so all devices have the same fullness level. From a performance perspective, capacity balancing creates fair share
+workloads on the OSDs for write requests.
+
+Capacity balancing is expensive. The operation (changing the mapping of pgs) requires data movement by definition, which takes time. During this time, the
+performance of the system is reduced.
+
+In Ceph, we can balance the write performance if all devices are homogeneous (same size and performance).
+
+How to Balance Capacity in Ceph
+-------------------------------
+
+See :ref:`upmap` for more information.
+
+Read Balancing
+==============
+
+Unlike capacity balancing, read balancing is not a strict requirement for Ceph’s functionality. Instead, it is a performance requirement, as it helps the system
+“work” better. The overall goal is to ensure each device gets its fair share of primary OSDs so read requests are distributed evenly across OSDs in the cluster.
+Unbalanced read requests lead to bad performance because of reduced overall cluster bandwidth.
+
+Read balancing is cheap. Unlike capacity balancing, there is no data movement involved. It is just a metadata operation, where the osdmap is updated to change
+which participating OSD in a pg is primary. This operation is fast and has no impact on the cluster performance (except improved performance when the operation
+completes – almost immediately).
+
+In Ceph, we can balance the read performance if all devices are homogeneous (same size and performance). However, in future versions, the read balancer can be improved
+to achieve overall cluster performance in heterogeneous systems.
+
+How to Balance Reads in Ceph
+----------------------------
+See :ref:`read_balancer` for more information.
+
+Also, see the Cephalocon 2023 talk `New Read Balancer in Ceph <https://www.youtube.com/watch?v=AT_cKYaQzcU/>`_ for a demonstration of the offline version
+of the read balancer.
+
+Plans for the Next Version
+--------------------------
+
+1. Improve behavior for heterogeneous OSDs in a pool
+2. Offer read balancing as an online option to the balancer manager module
diff --git a/ceph/doc/dev/cache-pool.rst b/ceph/doc/dev/cache-pool.rst
deleted file mode 100644 (file)
index 7dc71c8..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-Cache pool
-==========
-
-Purpose
--------
-
-Use a pool of fast storage devices (probably SSDs) and use it as a
-cache for an existing slower and larger pool.
-
-Use a replicated pool as a front-end to service most I/O, and destage
-cold data to a separate erasure coded pool that does not currently (and
-cannot efficiently) handle the workload.
-
-We should be able to create and add a cache pool to an existing pool
-of data, and later remove it, without disrupting service or migrating
-data around.
-
-Use cases
----------
-
-Read-write pool, writeback
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-We have an existing data pool and put a fast cache pool "in front" of
-it.  Writes will go to the cache pool and immediately ack.  We flush
-them back to the data pool based on the defined policy.
-
-Read-only pool, weak consistency
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-We have an existing data pool and add one or more read-only cache
-pools.  We copy data to the cache pool(s) on read.  Writes are
-forwarded to the original data pool.  Stale data is expired from the
-cache pools based on the defined policy.
-
-This is likely only useful for specific applications with specific
-data access patterns.  It may be a match for rgw, for example.
-
-
-Interface
----------
-
-Set up a read/write cache pool foo-hot for pool foo::
-
- ceph osd tier add foo foo-hot
- ceph osd tier cache-mode foo-hot writeback
-
-Direct all traffic for foo to foo-hot::
-
- ceph osd tier set-overlay foo foo-hot
-
-Set the target size and enable the tiering agent for foo-hot::
-
- ceph osd pool set foo-hot hit_set_type bloom
- ceph osd pool set foo-hot hit_set_count 1
- ceph osd pool set foo-hot hit_set_period 3600   # 1 hour
- ceph osd pool set foo-hot target_max_bytes 1000000000000  # 1 TB
- ceph osd pool set foo-hot min_read_recency_for_promote 1
- ceph osd pool set foo-hot min_write_recency_for_promote 1
-
-Drain the cache in preparation for turning it off::
-
- ceph osd tier cache-mode foo-hot forward
- rados -p foo-hot cache-flush-evict-all
-
-When cache pool is finally empty, disable it::
-
- ceph osd tier remove-overlay foo
- ceph osd tier remove foo foo-hot
-
-Read-only pools with lazy consistency::
-
- ceph osd tier add foo foo-east
- ceph osd tier cache-mode foo-east readonly
- ceph osd tier add foo foo-west
- ceph osd tier cache-mode foo-west readonly
-
-
-
-Tiering agent
--------------
-
-The tiering policy is defined as properties on the cache pool itself.
-
-HitSet metadata
-~~~~~~~~~~~~~~~
-
-First, the agent requires HitSet information to be tracked on the
-cache pool in order to determine which objects in the pool are being
-accessed.  This is enabled with::
-
- ceph osd pool set foo-hot hit_set_type bloom
- ceph osd pool set foo-hot hit_set_count 1
- ceph osd pool set foo-hot hit_set_period 3600   # 1 hour
-
-The supported HitSet types include 'bloom' (a bloom filter, the
-default), 'explicit_hash', and 'explicit_object'.  The latter two
-explicitly enumerate accessed objects and are less memory efficient.
-They are there primarily for debugging and to demonstrate pluggability
-for the infrastructure.  For the bloom filter type, you can additionally
-define the false positive probability for the bloom filter (default is 0.05)::
-
- ceph osd pool set foo-hot hit_set_fpp 0.15
-
-The hit_set_count and hit_set_period define how much time each HitSet
-should cover, and how many such HitSets to store.  Binning accesses
-over time allows Ceph to independently determine whether an object was
-accessed at least once and whether it was accessed more than once over
-some time period ("age" vs "temperature").
-
-The ``min_read_recency_for_promote`` defines how many HitSets to check for the
-existence of an object when handling a read operation. The checking result is
-used to decide whether to promote the object asynchronously. Its value should be
-between 0 and ``hit_set_count``. If it's set to 0, the object is always promoted.
-If it's set to 1, the current HitSet is checked. And if this object is in the
-current HitSet, it's promoted. Otherwise not. For the other values, the exact
-number of archive HitSets are checked. The object is promoted if the object is
-found in any of the most recent ``min_read_recency_for_promote`` HitSets.
-
-A similar parameter can be set for the write operation, which is
-``min_write_recency_for_promote``. ::
-
- ceph osd pool set {cachepool} min_read_recency_for_promote 1
- ceph osd pool set {cachepool} min_write_recency_for_promote 1
-
-Note that the longer the ``hit_set_period`` and the higher the
-``min_read_recency_for_promote``/``min_write_recency_for_promote`` the more RAM
-will be consumed by the ceph-osd process. In particular, when the agent is active
-to flush or evict cache objects, all hit_set_count HitSets are loaded into RAM.
-
-Cache mode
-~~~~~~~~~~
-
-The most important policy is the cache mode:
-
- ceph osd pool set foo-hot cache-mode writeback
-
-The supported modes are 'none', 'writeback', 'forward', and
-'readonly'.  Most installations want 'writeback', which will write
-into the cache tier and only later flush updates back to the base
-tier.  Similarly, any object that is read will be promoted into the
-cache tier.
-
-The 'forward' mode is intended for when the cache is being disabled
-and needs to be drained.  No new objects will be promoted or written
-to the cache pool unless they are already present.  A background
-operation can then do something like::
-
-  rados -p foo-hot cache-try-flush-evict-all
-  rados -p foo-hot cache-flush-evict-all
-
-to force all data to be flushed back to the base tier.
-
-The 'readonly' mode is intended for read-only workloads that do not
-require consistency to be enforced by the storage system.  Writes will
-be forwarded to the base tier, but objects that are read will get
-promoted to the cache.  No attempt is made by Ceph to ensure that the
-contents of the cache tier(s) are consistent in the presence of object
-updates.
-
-Cache sizing
-~~~~~~~~~~~~
-
-The agent performs two basic functions: flushing (writing 'dirty'
-cache objects back to the base tier) and evicting (removing cold and
-clean objects from the cache).
-
-The thresholds at which Ceph will flush or evict objects is specified
-relative to a 'target size' of the pool.  For example::
-
- ceph osd pool set foo-hot cache_target_dirty_ratio .4
- ceph osd pool set foo-hot cache_target_dirty_high_ratio .6
- ceph osd pool set foo-hot cache_target_full_ratio .8
-
-will begin flushing dirty objects when 40% of the pool is dirty and begin
-evicting clean objects when we reach 80% of the target size.
-
-The target size can be specified either in terms of objects or bytes::
-
- ceph osd pool set foo-hot target_max_bytes 1000000000000  # 1 TB
- ceph osd pool set foo-hot target_max_objects 1000000       # 1 million objects
-
-Note that if both limits are specified, Ceph will begin flushing or
-evicting when either threshold is triggered.
-
-Other tunables
-~~~~~~~~~~~~~~
-
-You can specify a minimum object age before a recently updated object is
-flushed to the base tier::
-
- ceph osd pool set foo-hot cache_min_flush_age 600   # 10 minutes
-
-You can specify the minimum age of an object before it will be evicted from
-the cache tier::
-
- ceph osd pool set foo-hot cache_min_evict_age 1800   # 30 minutes
-
-
-
index acd4668052cd4667e76d6e5361e00ef8e4be5bb9..a804a0075995f88714a9e61a083b076dca709b45 100644 (file)
@@ -377,7 +377,7 @@ information. To check which mirror daemon a directory has been mapped to use::
     "state": "mapped"
   }
 
-.. note:: `instance_id` is the RAODS instance-id associated with a mirror daemon.
+.. note:: `instance_id` is the RADOS instance-id associated with a mirror daemon.
 
 Other information such as `state` and `last_shuffled` are interesting when running
 multiple mirror daemons.
index a3f35e3c2fe65ea67d46a28cc34b96dd1a463f5c..55403184086866e2f82c72c2afbbd2f1ddcc9564 100644 (file)
@@ -243,7 +243,7 @@ object size in ``POOL`` is zero (evicted) and chunks objects are genereated---th
 4. Read/write I/Os
 
 After step 3, the users don't need to consider anything about I/Os. Deduplicated objects are
-completely compatible with existing RAODS operations.
+completely compatible with existing RADOS operations.
 
 
 5. Run scrub to fix reference count 
index fb5ad79bdcd0c71e1b9698e618cbddfeff1aac46..1277cecc552f7c6bec864163a86f89cf6e200ee4 100644 (file)
@@ -214,8 +214,8 @@ The build process is based on `Node.js <https://nodejs.org/>`_ and requires the
 Prerequisites
 ~~~~~~~~~~~~~
 
- * Node 14.15.0 or higher
- * NPM 6.14.9 or higher
+ * Node 18.17.0 or higher
+ * NPM 9.6.7 or higher
 
 nodeenv:
   During Ceph's build we create a virtualenv with ``node`` and ``npm``
index 8effd97e4082af6c98c33a72e66a23e49a2cf339..262683bfba9d7f87273117f83dafc14feddc39e0 100644 (file)
@@ -55,7 +55,7 @@ using `vstart_runner.py`_. To do that, you'd need `teuthology`_ installed::
     $ virtualenv --python=python3 venv
     $ source venv/bin/activate
     $ pip install 'setuptools >= 12'
-    $ pip install git+https://github.com/ceph/teuthology#egg=teuthology[test]
+    $ pip install teuthology[test]@git+https://github.com/ceph/teuthology
     $ deactivate
 
 The above steps installs teuthology in a virtual environment. Before running
index 86cfc3803e72c5791e578c4c9e31dc4995a7b252..1f346aece4d7c57f148d86790df5f46d0fad4064 100644 (file)
@@ -1,3 +1,5 @@
+.. _dev_mon_elections:
+
 =================
 Monitor Elections
 =================
index f998a04f2e7b748b790b52fa26a42af29f0669a0..7be4350ead88488670c071b473e0940e244875bd 100644 (file)
@@ -289,40 +289,6 @@ This seems complicated, but it gets us two valuable properties:
 All clone operations will need to consider adjacent ``chunk_maps``
 when adding or removing references.
 
-Cache/Tiering
--------------
-
-There already exists a cache/tiering mechanism based on whiteouts.
-One goal here should ultimately be for this manifest machinery to
-provide a complete replacement.
-
-See ``cache-pool.rst``
-
-The manifest machinery already shares some code paths with the
-existing cache/tiering code, mainly ``stat_flush``.
-
-In no particular order, here's in incomplete list of things that need
-to be wired up to provide feature parity:
-
-* Online object access information: The osd already has pool configs
-  for maintaining bloom filters which provide estimates of access
-  recency for objects.  We probably need to modify this to permit
-  hitset maintenance for a normal pool -- there are already
-  ``CEPH_OSD_OP_PG_HITSET*`` interfaces for querying them.
-* Tiering agent: The osd already has a background tiering agent which
-  would need to be modified to instead flush and evict using
-  manifests.
-
-* Use exiting existing features regarding the cache flush policy such as
-  histset, age, ratio.
-  - hitset
-  - age, ratio, bytes
-
-* Add tiering-mode to ``manifest-tiering``
-  - Writeback
-  - Read-only
-
-
 Data Structures
 ===============
 
index 88e350c862f1df94b67f7f47b281ebb3b4c90cdb..31ad184098eab4d5828aaae3052746b7691b5c60 100644 (file)
@@ -114,29 +114,6 @@ baseline throughput for each device type was determined:
           256 KiB. For HDDs, it was 40MiB. The above throughput was obtained
           by running 4 KiB random writes at a queue depth of 64 for 300 secs.
 
-Factoring I/O Cost in mClock
-============================
-
-The services using mClock have a cost associated with them. The cost can be
-different for each service type. The mClock scheduler factors in the cost
-during calculations for parameters like *reservation*, *weight* and *limit*.
-The calculations determine when the next op for the service type can be
-dequeued from the operation queue. In general, the higher the cost, the longer
-an op remains in the operation queue.
-
-A cost modeling study was performed to determine the cost per I/O and the cost
-per byte for SSD and HDD device types. The following cost specific options are
-used under the hood by mClock,
-
-- :confval:`osd_mclock_cost_per_io_usec`
-- :confval:`osd_mclock_cost_per_io_usec_hdd`
-- :confval:`osd_mclock_cost_per_io_usec_ssd`
-- :confval:`osd_mclock_cost_per_byte_usec`
-- :confval:`osd_mclock_cost_per_byte_usec_hdd`
-- :confval:`osd_mclock_cost_per_byte_usec_ssd`
-
-See :doc:`/rados/configuration/mclock-config-ref` for more details.
-
 MClock Profile Allocations
 ==========================
 
diff --git a/ceph/doc/dev/prim-balancer-design.rst b/ceph/doc/dev/prim-balancer-design.rst
deleted file mode 100644 (file)
index 633a051..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-
-This document describes the requirements and high-level design of the primary
-balancer for Ceph.
-
-Introduction
-============
-
-In a distributed storage system such as Ceph, there are some requirements to keep the system balanced in order to make it perform well:
-
-#. Balance the capacity - This is a functional requirement, a system like Ceph is "as full as its fullest device". When one device is full the system can not serve write requests anymore. In order to do this we want to balance the capacity across the devices in a fair way - that each device gets capacity proportionally to its size and therefore all the devices have the same fullness level. This is a functional requirement. From performance perspective, capacity balancing creates fair share workloads on the OSDs for *write* requests.
-
-#. Balance the workload - This is a performance requirement, we want to make sure that all the devices will receive a workload according to their performance. Assuming all the devices in a pool use the same technology and have the same bandwidth (a strong recommendation for a well configured system), and all devices in a pool have the same capacity, this means that for each pool, each device gets its fair share of primary OSDs so that the *read* requests are distributed evenly across the OSDs in the cluster. Managing workload balancing for devices with different capacities is discussed in the future enhancements section. 
-
-Requirements
-============
-
-- For each pool, each OSD should have its fair share of PGs in which it is primary. For replicated pools, this would be the number of PGs mapped to this OSD divided by the replica size.
-  - This may be improved in future releases. (see below)
-- Improve the existing capacity balancer code to improve its maintainability
-- Primary balancing is performed without data movement (data is moved only when balancing the capacity)
-- Fix the global +/-1 balancing issue that happens since the current balancer works on a single pool at a time (this is a stretch goal for the first version)
-
-  - Problem description: In a perfectly balanced system, for each pool, each OSD has a number of PGs that ideally would have mapped to it to create a perfect capacity balancing. This number is usually not an integer, so some OSDs get a bit more PGs mapped and some a bit less. If you have many pools and you balance on a pool-by-pool basis, it is possible that some OSDs always get the "a bit more" side. When this happens, even to a single OSD, the result is non-balanced system where one OSD is more full than the others. This may happen with the current capacity balancer. 
-
-First release (Quincy) assumptions
-----------------------------------
-
-- Optional - In the first version the feature will be optional and by default will be disabled
-- CLI only - In the first version we will probably give access to the primary balancer only by ``osdmaptool`` CLI and will not enable it in the online balancer; this way, the use of the feature is more controlled for early adopters
-- No data movement
-
-Future possible enhancements
-----------------------------
-
-- Improve the behavior for non identical OSDs in a pool
-- Improve the capacity balancing behavior in extreme cases
-- Add workload balancing to the online balancer
-- A more futuristic feature can be to improve workload balancing based on real load statistics of the OSDs. 
-
-High Level Design
-=================
-
-- The capacity balancing code will remain in one function ``OSDMap::calc_pg_upmaps`` (the signature might be changed)
-- The workload (a.k.a primary) balancer will be implemented in a different function
-- The workload balancer will do its best based on the current status of the system
-
-  - When called on a balanced system (capacity-wise) with pools with identical devices, it will create a near optimal workload split among the OSDs
-  - Calling the workload balancer on an unbalanced system (capacity-wise) may yield non optimal results, and in some cases may give worse performance than before the call
-
-Helper functionality
---------------------
-
-- Set a seed for random generation in ``osdmaptool`` (For regression tests)
index 5d296621c1ffcdee5e0132be379b084308b9b595..6299c378348ea304f4b6bada8aee2fe8266421c9 100644 (file)
@@ -131,7 +131,7 @@ First release candidate
 =======================
 
 - [x] src/ceph_release: change type to `rc`
-- [ ] opt-in to all telemetry channels, generate telemetry reports, and verify no sensitive details (like pools names) are collected
+- [x] opt-in to all telemetry channels, generate telemetry reports, and verify no sensitive details (like pools names) are collected
 
 
 First stable release
index ed04de697c43b94cd0f4f8ff81aa221a28f7337d..4d70376849d5adef142310a4c0c991b1288a89ad 100644 (file)
                 introduced in the Ceph Kraken release. The Luminous release of
                 Ceph promoted BlueStore to the default OSD back end,
                 supplanting FileStore. As of the Reef release, FileStore is no
-                longer available as a storage backend.
+                longer available as a storage back end.
                 
-                BlueStore stores objects directly on Ceph block devices without
-                a mounted file system.  
+                BlueStore stores objects directly on raw block devices or
+                partitions, and does not interact with mounted file systems.
+                BlueStore uses RocksDB's key/value database to map object names
+                to block locations on disk.
 
         Bucket
                 In the context of :term:`RGW`, a bucket is a group of objects.
                 The Ceph manager software, which collects all the state from
                 the whole cluster in one place.
 
-       MON
+       :ref:`MON<arch_monitor>`
                The Ceph monitor software.
 
        Node
        Pools
                 See :term:`pool`.
 
+       :ref:`Primary Affinity <rados_ops_primary_affinity>`
+                The characteristic of an OSD that governs the likelihood that
+                a given OSD will be selected as the primary OSD (or "lead
+                OSD") in an acting set. Primary affinity was introduced in
+                Firefly (v. 0.80). See :ref:`Primary Affinity
+                <rados_ops_primary_affinity>`.
+
+        Quorum 
+                Quorum is the state that exists when a majority of the
+                :ref:`Monitors<arch_monitor>` in the cluster are ``up``. A
+                minimum of three :ref:`Monitors<arch_monitor>` must exist in
+                the cluster in order for Quorum to be possible.
+
        RADOS
                 **R**\eliable **A**\utonomic **D**\istributed **O**\bject
                 **S**\tore. RADOS is the object store that provides a scalable
index d4ccd087afbac93d2ef804de471321328f1d63e7..8edc2cb09e0ee77a9430b092c2dc9c7bfa592f5b 100644 (file)
@@ -4,11 +4,11 @@
 
 Ceph delivers **object, block, and file storage in one unified system**.
 
-.. warning:: 
+.. warning::
 
-   :ref:`If this is your first time using Ceph, read the "Basic Workflow" 
-   page in the Ceph Developer Guide to learn how to contribute to the 
-   Ceph project. (Click anywhere in this paragraph to read the "Basic 
+   :ref:`If this is your first time using Ceph, read the "Basic Workflow"
+   page in the Ceph Developer Guide to learn how to contribute to the
+   Ceph project. (Click anywhere in this paragraph to read the "Basic
    Workflow" page of the Ceph Developer Guide.) <basic workflow dev guide>`.
 
 .. note::
@@ -110,6 +110,7 @@ about Ceph, see our `Architecture`_ section.
    radosgw/index
    mgr/index
    mgr/dashboard
+   monitoring/index
    api/index
    architecture
    Developer Guide <dev/developer_guide/index>
index c3c40b015cda36fce6e0d743d5baa50a01568952..d6edc177b8a67fd8f07ddc2dcce9ae05eb06ce16 100644 (file)
@@ -25,17 +25,17 @@ There are three ways to get packages:
 Install packages with cephadm
 =============================
 
-#. Download the cephadm script
+#. Download cephadm
 
 .. prompt:: bash $
    :substitutions:
 
-   curl --silent --remote-name --location https://github.com/ceph/ceph/raw/|stable-release|/src/cephadm/cephadm
+   curl --silent --remote-name --location https://download.ceph.com/rpm-|stable-release|/el9/noarch/cephadm
    chmod +x cephadm
 
 #. Configure the Ceph repository based on the release name::
 
-     ./cephadm add-repo --release nautilus
+     ./cephadm add-repo --release |stable-release|
 
    For Octopus (15.2.0) and later releases, you can also specify a specific
    version::
@@ -47,8 +47,8 @@ Install packages with cephadm
      ./cephadm add-repo --dev my-branch
 
 #. Install the appropriate packages.  You can install them using your
-   package management tool (e.g., APT, Yum) directly, or you can also
-   use the cephadm wrapper.  For example::
+   package management tool (e.g., APT, Yum) directly, or you can
+   use the cephadm wrapper command.  For example::
 
      ./cephadm install ceph-common
    
diff --git a/ceph/doc/man/8/ceph-monstore-tool.rst b/ceph/doc/man/8/ceph-monstore-tool.rst
new file mode 100644 (file)
index 0000000..9396df0
--- /dev/null
@@ -0,0 +1,90 @@
+:orphan:
+
+======================================================
+ ceph-monstore-tool -- ceph monstore manipulation tool
+======================================================
+
+.. program:: ceph-monstore-tool
+
+Synopsis
+========
+
+| **ceph-monstore-tool** <store path> <cmd> [args|options]
+
+
+Description
+===========
+
+:program:`ceph-monstore-tool` is used to manipulate MonitorDBStore's data
+(monmap, osdmap, etc.) offline. It is similar to `ceph-kvstore-tool`.
+
+The default RocksDB debug level is `0`. This can be changed using `--debug`.
+
+Note:
+    Ceph-specific options take the format `--option-name=VAL`
+    DO NOT FORGET THE EQUALS SIGN. ('=')
+    Command-specific options must be passed after a `--`
+    for example, `get monmap --debug -- --version 10 --out /tmp/foo`
+
+Commands
+========
+
+:program:`ceph-monstore-tool` uses many commands for debugging purposes:
+
+:command:`store-copy <path>`
+    Copy the store to PATH.
+
+:command:`get monmap [-- options]`
+    Get monmap (version VER if specified) (default: last committed).
+
+:command:`get osdmap [-- options]`
+    Get osdmap (version VER if specified) (default: last committed).
+
+:command:`get msdmap [-- options]`
+    Get msdmap (version VER if specified) (default: last committed).
+
+:command:`get mgr [-- options]`
+    Get mgrmap (version VER if specified) (default: last committed).
+
+:command:`get crushmap [-- options]`
+    Get crushmap (version VER if specified) (default: last committed).
+
+:command:`get osd_snap <key> [-- options]`
+    Get osd_snap key (`purged_snap` or `purged_epoch`).
+
+:command:`dump-keys`
+    Dump store keys to FILE (default: stdout).
+
+:command:`dump-paxos [-- options]`
+    Dump Paxos transactions  (-- -- help for more info).
+
+:command:`dump-trace FILE  [-- options]`
+    Dump contents of trace file FILE (-- --help for more info).
+
+:command:`replay-trace FILE  [-- options]`
+    Replay trace from FILE (-- --help for more info).
+
+:command:`random-gen [-- options]`
+    Add randomly genererated ops to the store (-- --help for more info).
+
+:command:`rewrite-crush [-- options]`
+    Add a rewrite commit to the store
+
+:command:`rebuild`
+    Rebuild store.
+
+:command:`rm <prefix> <key>`
+    Remove specified key from the store.
+
+Availability
+============
+
+**ceph-monstore-tool** is part of Ceph, a massively scalable, open-source,
+distributed storage system. See the Ceph documentation at
+https://docs.ceph.com for more information.
+
+
+See also
+========
+
+:doc:`ceph <ceph>`\(8)
index d107c4e3069f43d970a2400549ddc1a8ee9f4cf3..4ef5458e0923a5671835ef4f4260f8d0a1d45e99 100644 (file)
@@ -183,6 +183,18 @@ Options
 
    write modified osdmap with upmap or crush-adjust changes
 
+.. option:: --read <file>
+
+   calculate pg upmap entries to balance pg primaries
+
+.. option:: --read-pool <poolname>
+
+   specify which pool the read balancer should adjust
+
+.. option:: --vstart
+
+   prefix upmap and read output with './bin/'
+
 Example
 =======
 
@@ -315,6 +327,31 @@ To simulate the active balancer in upmap mode::
    osd.20 pgs 42
    Total time elapsed 0.0167765 secs, 5 rounds
 
+To simulate the active balancer in read mode, first make sure capacity is balanced
+by running the balancer in upmap mode. Then, balance the reads on a replicated pool with::
+
+        osdmaptool osdmap --read read.out --read-pool <pool name>
+
+   ./bin/osdmaptool: osdmap file 'om'
+   writing upmap command output to: read.out
+
+   ---------- BEFORE ------------ 
+   osd.0 | primary affinity: 1 | number of prims: 3
+   osd.1 | primary affinity: 1 | number of prims: 10
+   osd.2 | primary affinity: 1 | number of prims: 3
+   read_balance_score of 'cephfs.a.meta': 1.88
+
+
+   ---------- AFTER ------------ 
+   osd.0 | primary affinity: 1 | number of prims: 5
+   osd.1 | primary affinity: 1 | number of prims: 5
+   osd.2 | primary affinity: 1 | number of prims: 6
+   read_balance_score of 'cephfs.a.meta': 1.13
+
+  
+   num changes: 5
 
 Availability
 ============
index 54a66e17a0b8af8e1ff60f32aa3aff22a951a5d5..1a6358330c593f863c1bcbe0ee059a024c9325ee 100644 (file)
@@ -15,15 +15,15 @@ Synopsis
 Description
 ===========
 
-:program:`radosgw-admin` is a RADOS gateway user administration utility. It
-allows creating and modifying users.
+:program:`radosgw-admin` is a Ceph Object Gateway user administration utility. It
+is used to create and modify users.
 
 
 Commands
 ========
 
-:program:`radosgw-admin` utility uses many commands for administration purpose
-which are as follows:
+:program:`radosgw-admin` utility provides commands for administration purposes
+as follows:
 
 :command:`user create`
   Create a new user.
@@ -32,8 +32,7 @@ which are as follows:
   Modify a user.
 
 :command:`user info`
-  Display information of a user, and any potentially available
-  subusers and keys.
+  Display information for a user including any subusers and keys.
 
 :command:`user rename`
   Renames a user.
@@ -51,7 +50,7 @@ which are as follows:
   Check user info.
 
 :command:`user stats`
-  Show user stats as accounted by quota subsystem.
+  Show user stats as accounted by the quota subsystem.
 
 :command:`user list`
   List all users.
@@ -78,10 +77,10 @@ which are as follows:
   Remove access key.
 
 :command:`bucket list`
-  List buckets, or, if bucket specified with --bucket=<bucket>,
-  list its objects. If bucket specified adding --allow-unordered
-  removes ordering requirement, possibly generating results more
-  quickly in buckets with large number of objects.
+  List buckets, or, if a bucket is specified with --bucket=<bucket>,
+  list its objects. Adding --allow-unordered
+  removes the ordering requirement, possibly generating results more
+  quickly for buckets with large number of objects.
 
 :command:`bucket limit check`
   Show bucket sharding stats.
@@ -93,8 +92,8 @@ which are as follows:
   Unlink bucket from specified user.
 
 :command:`bucket chown`
-  Link bucket to specified user and update object ACLs. 
-  Use --marker to resume if command gets interrupted.
+  Change bucket ownership to the specified user and update object ACLs. 
+  Invoke with --marker to resume if the command is interrupted.
 
 :command:`bucket stats`
   Returns bucket statistics.
@@ -109,12 +108,13 @@ which are as follows:
   Rewrite all objects in the specified bucket.
 
 :command:`bucket radoslist`
-  List the rados objects that contain the data for all objects is
-  the designated bucket, if --bucket=<bucket> is specified, or
-  otherwise all buckets.
+  List the RADOS objects that contain the data for all objects in
+  the designated bucket, if --bucket=<bucket> is specified. 
+  Otherwise, list the RADOS objects that contain data for all 
+  buckets.
 
 :command:`bucket reshard`
-  Reshard a bucket.
+  Reshard a bucket's index.
 
 :command:`bucket sync disable`
   Disable bucket sync.
@@ -306,16 +306,16 @@ which are as follows:
   Run data sync for the specified source zone.
 
 :command:`sync error list`
-  list sync error.
+  List sync errors.
 
 :command:`sync error trim`
-  trim sync error.
+  Trim sync errors.
 
 :command:`zone rename`
   Rename a zone.
 
 :command:`zone placement list`
-  List zone's placement targets.
+  List zone's placement targets.
 
 :command:`zone placement add`
   Add a zone placement target.
@@ -365,7 +365,7 @@ which are as follows:
   List all bucket lifecycle progress.
 
 :command:`lc process`
-  Manually process lifecycle.  If a bucket is specified (e.g., via
+  Manually process lifecycle transitions.  If a bucket is specified (e.g., via
   --bucket_id or via --bucket and optional --tenant), only that bucket
   is processed.
 
@@ -385,7 +385,7 @@ which are as follows:
   List metadata log which is needed for multi-site deployments.
 
 :command:`mdlog trim`
-  Trim metadata log manually instead of relying on RGWs integrated log sync.
+  Trim metadata log manually instead of relying on the gateway's integrated log sync.
   Before trimming, compare the listings and make sure the last sync was
   complete, otherwise it can reinitiate a sync.
 
@@ -397,7 +397,7 @@ which are as follows:
 
 :command:`bilog trim`
   Trim bucket index log (use start-marker, end-marker) manually instead
-  of relying on RGWs integrated log sync.
+  of relying on the gateway's integrated log sync.
   Before trimming, compare the listings and make sure the last sync was
   complete, otherwise it can reinitiate a sync.
 
@@ -405,7 +405,7 @@ which are as follows:
   List data log which is needed for multi-site deployments.
 
 :command:`datalog trim`
-  Trim data log manually instead of relying on RGWs integrated log sync.
+  Trim data log manually instead of relying on the gateway's integrated log sync.
   Before trimming, compare the listings and make sure the last sync was
   complete, otherwise it can reinitiate a sync.
 
@@ -413,19 +413,19 @@ which are as follows:
   Read data log status.
 
 :command:`orphans find`
-  Init and run search for leaked rados objects.
+  Init and run search for leaked RADOS objects.
   DEPRECATED. See the "rgw-orphan-list" tool.
 
 :command:`orphans finish`
-  Clean up search for leaked rados objects.
+  Clean up search for leaked RADOS objects.
   DEPRECATED. See the "rgw-orphan-list" tool.
 
 :command:`orphans list-jobs`
-  List the current job-ids for the orphans search.
+  List the current orphans search job IDs.
   DEPRECATED. See the "rgw-orphan-list" tool.
 
 :command:`role create`
-  create a new AWS role for use with STS.
+  Create a new role for use with STS (Security Token Service).
 
 :command:`role rm`
   Remove a role.
@@ -485,7 +485,7 @@ which are as follows:
   Show events in a pubsub subscription
              
 :command:`subscription ack`
-  Ack (remove) an events in a pubsub subscription
+  Acknowledge (remove) events in a pubsub subscription
 
 
 Options
@@ -499,7 +499,8 @@ Options
 
 .. option:: -m monaddress[:port]
 
-   Connect to specified monitor (instead of looking through ceph.conf).
+   Connect to specified monitor (instead of selecting one
+   from ceph.conf).
 
 .. option:: --tenant=<tenant>
 
@@ -507,19 +508,19 @@ Options
 
 .. option:: --uid=uid
 
-   The radosgw user ID.
+   The user on which to operate.
 
 .. option:: --new-uid=uid
 
-   ID of the new user. Used with 'user rename' command.
+   The new ID of the user. Used with 'user rename' command.
 
 .. option:: --subuser=<name>
 
-       Name of the subuser.
+    Name of the subuser.
 
 .. option:: --access-key=<key>
 
-        S3 access key.
+   S3 access key.
 
 .. option:: --email=email
 
@@ -531,28 +532,29 @@ Options
 
 .. option:: --gen-access-key
 
-       Generate random access key (for S3).
+    Generate random access key (for S3).
+
 
 .. option:: --gen-secret
 
-       Generate random secret key.
+    Generate random secret key.
 
 .. option:: --key-type=<type>
 
-       key type, options are: swift, s3.
+    Key type, options are: swift, s3.
 
 .. option:: --temp-url-key[-2]=<key>
 
-       Temporary url key.
+    Temporary URL key.
 
 .. option:: --max-buckets
 
-       max number of buckets for a user (0 for no limit, negative value to disable bucket creation).
-       Default is 1000.
+    Maximum number of buckets for a user (0 for no limit, negative value to disable bucket creation).
+    Default is 1000.
 
 .. option:: --access=<access>
 
-   Set the access permissions for the sub-user.
+   Set the access permissions for the subuser.
    Available access permissions are read, write, readwrite and full.
 
 .. option:: --display-name=<name>
@@ -600,24 +602,24 @@ Options
 .. option:: --bucket-new-name=[tenant-id/]<bucket>
 
    Optional for `bucket link`; use to rename a bucket.
-        While tenant-id/ can be specified, this is never
-        necessary for normal operation.
+   While the tenant-id can be specified, this is not
+   necessary in normal operation.
 
 .. option:: --shard-id=<shard-id>
 
-       Optional for mdlog list, bi list, data sync status. Required for ``mdlog trim``.
+   Optional for mdlog list, bi list, data sync status. Required for ``mdlog trim``.
 
 .. option:: --max-entries=<entries>
 
-       Optional for listing operations to specify the max entries.
+   Optional for listing operations to specify the max entries.
 
 .. option:: --purge-data
 
-   When specified, user removal will also purge all the user data.
+   When specified, user removal will also purge the user's data.
 
 .. option:: --purge-keys
 
-       When specified, subuser removal will also purge all the subuser keys.
+   When specified, subuser removal will also purge the subuser' keys.
    
 .. option:: --purge-objects
 
@@ -625,7 +627,7 @@ Options
 
 .. option:: --metadata-key=<key>
 
-       Key to retrieve metadata from with ``metadata get``.
+   Key from which to retrieve metadata, used with ``metadata get``.
 
 .. option:: --remote=<remote>
 
@@ -633,11 +635,11 @@ Options
 
 .. option:: --period=<id>
 
-   Period id.
+   Period ID.
 
 .. option:: --url=<url>
 
-   url for pushing/pulling period or realm.
+   URL for pushing/pulling period or realm.
 
 .. option:: --epoch=<number>
 
@@ -657,7 +659,7 @@ Options
 
 .. option:: --master-zone=<id>
 
-   Master zone id.
+   Master zone ID.
 
 .. option:: --rgw-realm=<name>
 
@@ -665,11 +667,11 @@ Options
 
 .. option:: --realm-id=<id>
 
-   The realm id.
+   The realm ID.
 
 .. option:: --realm-new-name=<name>
 
-   New name of realm.
+   New name for the realm.
 
 .. option:: --rgw-zonegroup=<name>
 
@@ -677,7 +679,7 @@ Options
 
 .. option:: --zonegroup-id=<id>
 
-   The zonegroup id.
+   The zonegroup ID.
 
 .. option:: --zonegroup-new-name=<name>
 
@@ -685,11 +687,11 @@ Options
 
 .. option:: --rgw-zone=<zone>
 
-       Zone in which radosgw is running.
+   Zone in which the gateway is running.
 
 .. option:: --zone-id=<id>
 
-   The zone id.
+   The zone ID.
 
 .. option:: --zone-new-name=<name>
 
@@ -709,7 +711,7 @@ Options
 
 .. option:: --placement-id
 
-   Placement id for the zonegroup placement commands.
+   Placement ID for the zonegroup placement commands.
 
 .. option:: --tags=<list>
 
@@ -737,7 +739,7 @@ Options
 
 .. option:: --data-extra-pool=<pool>
 
-   The placement target data extra (non-ec) pool.
+   The placement target data extra (non-EC) pool.
 
 .. option:: --placement-index-type=<type>
 
@@ -765,11 +767,11 @@ Options
 
 .. option:: --sync-from=[zone-name][,...]
 
-   Set the list of zones to sync from.
+   Set the list of zones from which to sync.
 
 .. option:: --sync-from-rm=[zone-name][,...]
 
-   Remove the zones from list of zones to sync from.
+   Remove zone(s) from list of zones from which to sync.
 
 .. option:: --bucket-index-max-shards
 
@@ -780,71 +782,71 @@ Options
 
 .. option:: --fix
 
-       Besides checking bucket index, will also fix it.
+    Fix the bucket index in addition to checking it.
 
 .. option:: --check-objects
 
-       bucket check: Rebuilds bucket index according to actual objects state.
+    Bucket check: Rebuilds the bucket index according to actual object state.
 
 .. option:: --format=<format>
 
-       Specify output format for certain operations. Supported formats: xml, json.
+    Specify output format for certain operations. Supported formats: xml, json.
 
 .. option:: --sync-stats
 
-       Option for 'user stats' command. When specified, it will update user stats with
-       the current stats reported by user's buckets indexes.
+    Option for the 'user stats' command. When specified, it will update user stats with
+    the current stats reported by the user's buckets indexes.
 
 .. option:: --show-config
 
-       Show configuration.
+    Show configuration.
 
 .. option:: --show-log-entries=<flag>
 
-       Enable/disable dump of log entries on log show.
+    Enable/disable dumping of log entries on log show.
 
 .. option:: --show-log-sum=<flag>
 
-       Enable/disable dump of log summation on log show.
+    Enable/disable dump of log summation on log show.
 
 .. option:: --skip-zero-entries
 
-       Log show only dumps entries that don't have zero value in one of the numeric
-       field.
+    Log show only dumps entries that don't have zero value in one of the numeric
+    field.
 
 .. option:: --infile
 
-       Specify a file to read in when setting data.
+    Specify a file to read when setting data.
 
 .. option:: --categories=<list>
 
-       Comma separated list of categories, used in usage show.
+    Comma separated list of categories, used in usage show.
 
 .. option:: --caps=<caps>
 
-       List of caps (e.g., "usage=read, write; user=read").
+    List of capabilities (e.g., "usage=read, write; user=read").
 
 .. option:: --compression=<compression-algorithm>
 
-    Placement target compression algorithm (lz4|snappy|zlib|zstd)
+    Placement target compression algorithm (lz4|snappy|zlib|zstd).
 
 .. option:: --yes-i-really-mean-it
 
-       Required for certain operations.
+    Required as a guardrail for certain destructive operations.
 
 .. option:: --min-rewrite-size
 
-    Specify the min object size for bucket rewrite (default 4M).
+    Specify the minimum object size for bucket rewrite (default 4M).
 
 .. option:: --max-rewrite-size
 
-    Specify the max object size for bucket rewrite (default ULLONG_MAX).
+    Specify the maximum object size for bucket rewrite (default ULLONG_MAX).
 
 .. option:: --min-rewrite-stripe-size
 
-    Specify the min stripe size for object rewrite (default 0). If the value
+    Specify the minimum stripe size for object rewrite (default 0). If the value
     is set to 0, then the specified object will always be
-    rewritten for restriping.
+    rewritten when restriping.
 
 .. option:: --warnings-only
 
@@ -854,7 +856,7 @@ Options
 .. option:: --bypass-gc
 
    When specified with bucket deletion,
-   triggers object deletions by not involving GC.
+   triggers object deletion without involving GC.
 
 .. option:: --inconsistent-index
 
@@ -863,25 +865,25 @@ Options
 
 .. option:: --max-concurrent-ios
 
-        Maximum concurrent ios for bucket operations. Affects operations that
-        scan the bucket index, e.g., listing, deletion, and all scan/search
-        operations such as finding orphans or checking the bucket index.
-        Default is 32.
+   Maximum concurrent bucket operations. Affects operations that
+   scan the bucket index, e.g., listing, deletion, and all scan/search
+   operations such as finding orphans or checking the bucket index.
+   The default is 32.
 
 Quota Options
 =============
 
 .. option:: --max-objects
 
-       Specify max objects (negative value to disable).
+   Specify the maximum number of objects (negative value to disable).
 
 .. option:: --max-size
 
-       Specify max size (in B/K/M/G/T, negative value to disable).
+    Specify the maximum object size (in B/K/M/G/T, negative value to disable).
 
 .. option:: --quota-scope
 
-       The scope of quota (bucket, user).
+    The scope of quota (bucket, user).
 
 
 Orphans Search Options
@@ -889,16 +891,16 @@ Orphans Search Options
 
 .. option:: --num-shards
 
-       Number of shards to use for keeping the temporary scan info
+    Number of shards to use for temporary scan info
 
 .. option:: --orphan-stale-secs
 
-        Number of seconds to wait before declaring an object to be an orphan.
-        Default is 86400 (24 hours).
+   Number of seconds to wait before declaring an object to be an orphan.
+   The efault is 86400 (24 hours).
 
 .. option:: --job-id
 
-        Set the job id (for orphans find)
+   Set the job id (for orphans find)
 
 
 Orphans list-jobs options
index a3cb00b82f6763b15f414edc9aabdb9d76c9728c..d31f3de8e6e8ac3f8e4969f929d290c715aacc92 100644 (file)
@@ -53,10 +53,6 @@ Options
 
    Run in foreground, log to usual location
 
-.. option:: --rgw-socket-path=path
-
-   Specify a unix domain socket path.
-
 .. option:: --rgw-region=region
 
    The region where radosgw runs
@@ -80,30 +76,24 @@ and ``mod_proxy_fcgi`` have to be present in the server. Unlike ``mod_fastcgi``,
 or process management may be available in the FastCGI application framework
 in use.
 
-``Apache`` can be configured in a way that enables ``mod_proxy_fcgi`` to be used
-with localhost tcp or through unix domain socket. ``mod_proxy_fcgi`` that doesn't
-support unix domain socket such as the ones in Apache 2.2 and earlier versions of
-Apache 2.4, needs to be configured for use with localhost tcp. Later versions of
-Apache like Apache 2.4.9 or later support unix domain socket and as such they
-allow for the configuration with unix domain socket instead of localhost tcp.
+``Apache`` must be configured in a way that enables ``mod_proxy_fcgi`` to be
+used with localhost tcp.
 
 The following steps show the configuration in Ceph's configuration file i.e,
 ``/etc/ceph/ceph.conf`` and the gateway configuration file i.e,
 ``/etc/httpd/conf.d/rgw.conf`` (RPM-based distros) or
 ``/etc/apache2/conf-available/rgw.conf`` (Debian-based distros) with localhost
-tcp and through unix domain socket:
+tcp:
 
 #. For distros with Apache 2.2 and early versions of Apache 2.4 that use
-   localhost TCP and do not support Unix Domain Socket, append the following
-   contents to ``/etc/ceph/ceph.conf``::
+   localhost TCP, append the following contents to ``/etc/ceph/ceph.conf``::
 
        [client.radosgw.gateway]
        host = {hostname}
        keyring = /etc/ceph/ceph.client.radosgw.keyring
-       rgw socket path = ""
-       log file = /var/log/ceph/client.radosgw.gateway.log
-       rgw frontends = fastcgi socket_port=9000 socket_host=0.0.0.0
-       rgw print continue = false
+       log_file = /var/log/ceph/client.radosgw.gateway.log
+       rgw_frontends = fastcgi socket_port=9000 socket_host=0.0.0.0
+       rgw_print_continue = false
 
 #. Add the following content in the gateway configuration file:
 
@@ -149,16 +139,6 @@ tcp and through unix domain socket:
 
                </VirtualHost>
 
-#. For distros with Apache 2.4.9 or later that support Unix Domain Socket,
-   append the following configuration to ``/etc/ceph/ceph.conf``::
-
-       [client.radosgw.gateway]
-       host = {hostname}
-       keyring = /etc/ceph/ceph.client.radosgw.keyring
-       rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock
-       log file = /var/log/ceph/client.radosgw.gateway.log
-       rgw print continue = false
-
 #. Add the following content in the gateway configuration file:
 
    For CentOS/RHEL add in ``/etc/httpd/conf.d/rgw.conf``::
@@ -182,10 +162,6 @@ tcp and through unix domain socket:
 
                </VirtualHost>
 
-   Please note, ``Apache 2.4.7`` does not have Unix Domain Socket support in
-   it and as such it has to be configured with localhost tcp. The Unix Domain
-   Socket support is available in ``Apache 2.4.9`` and later versions.
-
 #. Generate a key for radosgw to use for authentication with the cluster. ::
 
        ceph-authtool -C -n client.radosgw.gateway --gen-key /etc/ceph/keyring.radosgw.gateway
index c25410fcdf5e26e5211f4a5c977e13f38d58d5c0..7e6637684faa75ba036c1901277cbac9a1934e8b 100644 (file)
@@ -107,22 +107,29 @@ of the details of NFS redirecting traffic on the virtual IP to the
 appropriate backend NFS servers, and redeploying NFS servers when they
 fail.
 
-If a user additionally supplies ``--ingress-mode keepalive-only`` a
-partial *ingress* service will be deployed that still provides a virtual
-IP, but has nfs directly binding to that virtual IP and leaves out any
-sort of load balancing or traffic redirection. This setup will restrict
-users to deploying only 1 nfs daemon as multiple cannot bind to the same
-port on the virtual IP.
-
-Instead providing ``--ingress-mode default`` will result in the same setup
-as not providing the ``--ingress-mode`` flag. In this setup keepalived will be
-deployed to handle forming the virtual IP and haproxy will be deployed
-to handle load balancing and traffic redirection.
-
-Enabling ingress via the ``ceph nfs cluster create`` command deploys a
-simple ingress configuration with the most common configuration
-options.  Ingress can also be added to an existing NFS service (e.g.,
-one created without the ``--ingress`` flag), and the basic NFS service can
+An optional ``--ingress-mode`` parameter can be provided to choose
+how the *ingress* service is configured:
+
+- Setting ``--ingress-mode keepalive-only`` deploys a simplified *ingress*
+  service that provides a virtual IP with the nfs server directly binding to
+  that virtual IP and leaves out any sort of load balancing or traffic
+  redirection. This setup will restrict users to deploying only 1 nfs daemon
+  as multiple cannot bind to the same port on the virtual IP.
+- Setting ``--ingress-mode haproxy-standard`` deploys a full *ingress* service
+  to provide load balancing and high-availability using HAProxy and keepalived.
+  Client IP addresses are not visible to the back-end NFS server and IP level
+  restrictions on NFS exports will not function.
+- Setting ``--ingress-mode haproxy-protocol`` deploys a full *ingress* service
+  to provide load balancing and high-availability using HAProxy and keepalived.
+  Client IP addresses are visible to the back-end NFS server and IP level
+  restrictions on NFS exports are usable. This mode requires NFS Ganesha version
+  5.0 or later.
+- Setting ``--ingress-mode default`` is equivalent to not providing any other
+  ingress mode by name. When no other ingress mode is specified by name
+  the default ingress mode used is ``haproxy-standard``.
+
+Ingress can be added to an existing NFS service (e.g., one initially created
+without the ``--ingress`` flag), and the basic NFS service can
 also be modified after the fact to include non-default options, by modifying
 the services directly.  For more information, see :ref:`cephadm-ha-nfs`.
 
index 698b6a2d539d7312b8812842df6bd03dd0977518..25a7b0d084ee654970b9bafa2ccb8bbe3a8ab351 100644 (file)
@@ -41,6 +41,7 @@ Configuration
 .. confval:: rbd_stats_pools_refresh_interval
 .. confval:: standby_behaviour
 .. confval:: standby_error_status_code
+.. confval:: exclude_perf_counters
 
 By default the module will accept HTTP requests on port ``9283`` on all IPv4
 and IPv6 addresses on the host.  The port and listen address are both
@@ -217,6 +218,15 @@ the module option ``exclude_perf_counters`` to ``false``:
 
    ceph config set mgr mgr/prometheus/exclude_perf_counters false
 
+Ceph daemon performance counters metrics
+-----------------------------------------
+
+With the introduction of ``ceph-exporter`` daemon, the prometheus module will no longer export Ceph daemon
+perf counters as prometheus metrics by default. However, one may re-enable exporting these metrics by setting
+the module option ``exclude_perf_counters`` to ``false``::
+
+    ceph config set mgr mgr/prometheus/exclude_perf_counters false
+
 Statistic names and labels
 ==========================
 
diff --git a/ceph/doc/monitoring/index.rst b/ceph/doc/monitoring/index.rst
new file mode 100644 (file)
index 0000000..2bf2aca
--- /dev/null
@@ -0,0 +1,474 @@
+.. _monitoring:
+
+===================
+Monitoring overview
+===================
+
+The aim of this part of the documentation is to explain the Ceph monitoring
+stack and the meaning of the main Ceph metrics.
+
+With a good understand of the Ceph monitoring stack and metrics users can
+create customized monitoring tools, like Prometheus queries, Grafana
+dashboards, or scripts.
+
+
+Ceph Monitoring stack
+=====================
+
+Ceph provides a default monitoring stack wich is installed by cephadm and
+explained in the :ref:`Monitoring Services <mgr-cephadm-monitoring>` section of
+the cephadm documentation.
+
+
+Ceph metrics
+============
+
+The main source for Ceph metrics are the performance counters exposed by each
+Ceph daemon. The :doc:`../dev/perf_counters` are native Ceph monitoring data
+
+Performance counters are transformed into standard Prometheus metrics by the
+Ceph exporter daemon. This daemon runs on every Ceph cluster host and exposes a
+metrics end point where all the performance counters exposed by all the Ceph
+daemons running in the host are published in the form of Prometheus metrics.
+
+In addition to the Ceph exporter, there is another agent to expose Ceph
+metrics. It is the Prometheus manager module, wich exposes metrics related to
+the whole cluster, basically metrics that are not produced by individual Ceph
+daemons.
+
+The main source for obtaining Ceph metrics is the metrics endpoint exposed by
+the Cluster Prometheus server.  Ceph can provide you with the Prometheus
+endpoint where you can obtain the complete list of metrics (coming from Ceph
+exporter daemons and Prometheus manager module) and exeute queries.
+
+Use the following command to obtain the Prometheus server endpoint in your
+cluster:
+
+Example:
+
+.. code-block:: bash
+
+  # ceph orch ps --service_name prometheus
+  NAME                         HOST                          PORTS   STATUS          REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID
+  prometheus.cephtest-node-00  cephtest-node-00.cephlab.com  *:9095  running (103m)    50s ago   5w     142M        -  2.33.4   514e6a882f6e  efe3cbc2e521
+
+With this information you can connect to
+``http://cephtest-node-00.cephlab.com:9095`` to access the Prometheus server
+interface.
+
+And the complete list of metrics (with help) for your cluster will be available
+in:
+
+``http://cephtest-node-00.cephlab.com:9095/api/v1/targets/metadata``
+
+
+It is good to outline that the main tool allowing users to observe and monitor a Ceph cluster is the **Ceph dashboard**. It provides graphics where the most important cluster and service metrics are represented. Most of the examples in this document are extracted from the dashboard graphics or extrapolated from the metrics exposed by the Ceph dashboard.
+
+
+Performance metrics
+===================
+
+Main metrics used to measure Cluster Ceph performance:
+
+All metrics have the following labels:
+``ceph_daemon``: identifier of the OSD daemon generating the metric
+``instance``: the IP address of the ceph exporter instance exposing the metric.
+``job``: prometheus scrape job
+
+Example:
+
+.. code-block:: bash
+
+  ceph_osd_op_r{ceph_daemon="osd.0", instance="192.168.122.7:9283", job="ceph"} = 73981
+
+*Cluster I/O (throughput):*
+Use ``ceph_osd_op_r_out_bytes`` and ``ceph_osd_op_w_in_bytes`` to obtain the cluster throughput generated by clients
+
+Example:
+
+.. code-block:: bash
+
+  Writes (B/s):
+  sum(irate(ceph_osd_op_w_in_bytes[1m]))
+
+  Reads (B/s):
+  sum(irate(ceph_osd_op_r_out_bytes[1m]))
+
+
+*Cluster I/O (operations):*
+Use ``ceph_osd_op_r``, ``ceph_osd_op_w`` to obtain the number of operations generated by clients
+
+Example:
+
+.. code-block:: bash
+
+  Writes (ops/s):
+  sum(irate(ceph_osd_op_w[1m]))
+
+  Reads (ops/s):
+  sum(irate(ceph_osd_op_r[1m]))
+
+*Latency:*
+Use ``ceph_osd_op_latency_sum`` wich represents the delay before a OSD transfer of data begins following a client instruction for its transfer
+
+Example:
+
+.. code-block:: bash
+
+  sum(irate(ceph_osd_op_latency_sum[1m]))
+
+
+OSD performance
+===============
+
+The previous explained cluster performance metrics are based in OSD metrics, selecting the right label we can obtain for a single OSD the same performance information explained for the cluster:
+
+Example:
+
+.. code-block:: bash
+
+  OSD 0 read latency
+  irate(ceph_osd_op_r_latency_sum{ceph_daemon=~"osd.0"}[1m]) / on (ceph_daemon) irate(ceph_osd_op_r_latency_count[1m])
+
+  OSD 0 write IOPS
+  irate(ceph_osd_op_w{ceph_daemon=~"osd.0"}[1m])
+
+  OSD 0 write thughtput (bytes)
+  irate(ceph_osd_op_w_in_bytes{ceph_daemon=~"osd.0"}[1m])
+
+  OSD.0 total raw capacity available
+  ceph_osd_stat_bytes{ceph_daemon="osd.0", instance="cephtest-node-00.cephlab.com:9283", job="ceph"} = 536451481
+
+
+Physical disk performance:
+==========================
+
+Combining Prometheus ``node_exporter`` metrics with Ceph metrics we can have
+information about the performance provided by physical disks used by OSDs.
+
+Example:
+
+.. code-block:: bash
+
+  Read latency of device used by OSD 0:
+  label_replace(irate(node_disk_read_time_seconds_total[1m]) / irate(node_disk_reads_completed_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")
+
+  Write latency of device used by OSD 0
+  label_replace(irate(node_disk_write_time_seconds_total[1m]) / irate(node_disk_writes_completed_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")
+
+  IOPS (device used by OSD.0)
+  reads:
+  label_replace(irate(node_disk_reads_completed_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")
+
+  writes:
+  label_replace(irate(node_disk_writes_completed_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")
+
+  Throughput (device used by OSD.0)
+  reads:
+  label_replace(irate(node_disk_read_bytes_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")
+
+  writes:
+  label_replace(irate(node_disk_written_bytes_total[1m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")
+
+  Physical Device Utilization (%) for OSD.0 in the last 5 minutes
+  label_replace(irate(node_disk_io_time_seconds_total[5m]), "instance", "$1", "instance", "([^:.]*).*") and on (instance, device) label_replace(label_replace(ceph_disk_occupation_human{ceph_daemon=~"osd.0"}, "device", "$1", "device", "/dev/(.*)"), "instance", "$1", "instance", "([^:.]*).*")
+
+Pool metrics
+============
+
+These metrics have the following labels:
+``instance``: the ip address of the Ceph exporter daemon producing the metric.
+``pool_id``: identifier of the pool
+``job``: prometheus scrape job
+
+
+- ``ceph_pool_metadata``: Information about the pool It can be used together
+  with other metrics to provide more contextual information in queries and
+  graphs.  Apart of the three common labels this metric provide the following
+  extra labels:
+
+  - ``compression_mode``: compression used in the pool (lz4, snappy, zlib,
+    zstd, none). Example: compression_mode="none"
+
+  - ``description``: brief description of the pool type (replica:number of
+    replicas or Erasure code: ec profile). Example: description="replica:3"
+  - ``name``: name of the pool. Example: name=".mgr"
+  - ``type``: type of pool (replicated/erasure code). Example: type="replicated"
+
+- ``ceph_pool_bytes_used``: Total raw capacity consumed by user data and associated overheads by pool (metadata + redundancy):
+
+- ``ceph_pool_stored``: Total of CLIENT data stored in the pool
+
+- ``ceph_pool_compress_under_bytes``: Data eligible to be compressed in the pool
+
+- ``ceph_pool_compress_bytes_used``:  Data compressed in the pool
+
+- ``ceph_pool_rd``: CLIENT read operations per pool (reads per second)
+
+- ``ceph_pool_rd_bytes``: CLIENT read operations in bytes per pool
+
+- ``ceph_pool_wr``: CLIENT write operations per pool (writes per second)
+
+- ``ceph_pool_wr_bytes``: CLIENT write operation in bytes per pool
+
+
+**Useful queries**:
+
+.. code-block:: bash
+
+  Total raw capacity available in the cluster:
+  sum(ceph_osd_stat_bytes)
+
+  Total raw capacity consumed in the cluster (including metadata + redundancy):
+  sum(ceph_pool_bytes_used)
+
+  Total of CLIENT data stored in the cluster:
+  sum(ceph_pool_stored)
+
+  Compression savings:
+  sum(ceph_pool_compress_under_bytes - ceph_pool_compress_bytes_used)
+
+  CLIENT IOPS for a pool (testrbdpool)
+  reads: irate(ceph_pool_rd[1m]) * on(pool_id) group_left(instance,name) ceph_pool_metadata{name=~"testrbdpool"}
+  writes: irate(ceph_pool_wr[1m]) * on(pool_id) group_left(instance,name) ceph_pool_metadata{name=~"testrbdpool"}
+
+  CLIENT Throughput for a pool
+  reads: irate(ceph_pool_rd_bytes[1m]) * on(pool_id) group_left(instance,name) ceph_pool_metadata{name=~"testrbdpool"}
+  writes: irate(ceph_pool_wr_bytes[1m]) * on(pool_id) group_left(instance,name) ceph_pool_metadata{name=~"testrbdpool"}
+
+Object metrics
+==============
+
+These metrics have the following labels:
+``instance``: the ip address of the ceph exporter daemon providing the metric
+``instance_id``: identifier of the rgw daemon
+``job``: prometheus scrape job
+
+Example:
+
+.. code-block:: bash
+
+  ceph_rgw_req{instance="192.168.122.7:9283", instance_id="154247", job="ceph"} = 12345
+
+
+Generic metrics
+---------------
+- ``ceph_rgw_metadata``: Provides generic information about the RGW daemon.  It
+  can be used together with other metrics to provide more contextual
+  information in queries and graphs. Apart from the three common labels, this
+  metric provides the following extra labels:
+
+  - ``ceph_daemon``: Name of the Ceph daemon. Example:
+    ceph_daemon="rgw.rgwtest.cephtest-node-00.sxizyq",
+  - ``ceph_version``: Version of Ceph daemon. Example: ceph_version="ceph
+    version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)",
+  - ``hostname``: Name of the host where the daemon runs. Example:
+    hostname:"cephtest-node-00.cephlab.com",
+
+- ``ceph_rgw_req``: Number total of requests for the daemon (GET+PUT+DELETE)
+    Useful to detect bottlenecks and optimize load distribution.
+
+- ``ceph_rgw_qlen``: RGW operations queue length for the daemon.
+    Useful to detect bottlenecks and optimize load distribution.
+
+- ``ceph_rgw_failed_req``: Aborted requests.
+    Useful to detect daemon errors
+
+
+GET operations: related metrics
+-------------------------------
+- ``ceph_rgw_get_initial_lat_count``: Number of get operations
+
+- ``ceph_rgw_get_initial_lat_sum``: Total latency time for the GET operations
+
+- ``ceph_rgw_get``: Number total of GET requests
+
+- ``ceph_rgw_get_b``: Total bytes transferred in GET operations
+
+
+Put operations: related metrics
+-------------------------------
+- ``ceph_rgw_put_initial_lat_count``: Number of get operations
+
+- ``ceph_rgw_put_initial_lat_sum``: Total latency time for the PUT operations
+
+- ``ceph_rgw_put``: Total number of PUT operations
+
+- ``ceph_rgw_get_b``: Total bytes transferred in PUT operations
+
+
+Useful queries
+--------------
+
+.. code-block:: bash
+
+  The average of get latencies:
+  rate(ceph_rgw_get_initial_lat_sum[30s]) / rate(ceph_rgw_get_initial_lat_count[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata
+
+  The average of put latencies:
+  rate(ceph_rgw_put_initial_lat_sum[30s]) / rate(ceph_rgw_put_initial_lat_count[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata
+
+  Total requests per second:
+  rate(ceph_rgw_req[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata
+
+  Total number of "other" operations (LIST, DELETE)
+  rate(ceph_rgw_req[30s]) -  (rate(ceph_rgw_get[30s]) + rate(ceph_rgw_put[30s]))
+
+  GET latencies
+  rate(ceph_rgw_get_initial_lat_sum[30s]) /  rate(ceph_rgw_get_initial_lat_count[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata
+
+  PUT latencies
+  rate(ceph_rgw_put_initial_lat_sum[30s]) /  rate(ceph_rgw_put_initial_lat_count[30s]) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata
+
+  Bandwidth consumed by GET operations
+  sum(rate(ceph_rgw_get_b[30s]))
+
+  Bandwidth consumed by PUT operations
+  sum(rate(ceph_rgw_put_b[30s]))
+
+  Bandwidth consumed by RGW instance (PUTs + GETs)
+  sum by (instance_id) (rate(ceph_rgw_get_b[30s]) + rate(ceph_rgw_put_b[30s])) * on (instance_id) group_left (ceph_daemon) ceph_rgw_metadata
+
+  Http errors:
+  rate(ceph_rgw_failed_req[30s])
+
+
+Filesystem Metrics
+==================
+
+These metrics have the following labels:
+``ceph_daemon``: The name of the MDS daemon
+``instance``: the ip address (and port) of of the Ceph exporter daemon exposing the metric
+``job``: prometheus scrape job
+
+Example:
+
+.. code-block:: bash
+
+  ceph_mds_request{ceph_daemon="mds.test.cephtest-node-00.hmhsoh", instance="192.168.122.7:9283", job="ceph"} = 1452
+
+
+Main metrics
+------------
+
+- ``ceph_mds_metadata``: Provides general information about the MDS daemon.  It
+  can be used together with other metrics to provide more contextual
+  information in queries and graphs.  It provides the following extra labels:
+
+  - ``ceph_version``: MDS daemon Ceph version
+  - ``fs_id``: filesystem cluster id
+  - ``hostname``: Host name where the MDS daemon runs
+  - ``public_addr``: Public address where the MDS daemon runs
+  - ``rank``: Rank of the MDS daemon
+
+Example:
+
+.. code-block:: bash
+
+ ceph_mds_metadata{ceph_daemon="mds.test.cephtest-node-00.hmhsoh", ceph_version="ceph version 17.2.6 (d7ff0d10654d2280e08f1ab989c7cdf3064446a5) quincy (stable)", fs_id="-1", hostname="cephtest-node-00.cephlab.com", instance="cephtest-node-00.cephlab.com:9283", job="ceph", public_addr="192.168.122.145:6801/118896446", rank="-1"}
+
+
+- ``ceph_mds_request``: Total number of requests for the MDs daemon
+
+- ``ceph_mds_reply_latency_sum``: Reply latency total
+
+- ``ceph_mds_reply_latency_count``: Reply latency count
+
+- ``ceph_mds_server_handle_client_request``: Number of client requests
+
+- ``ceph_mds_sessions_session_count``: Session count
+
+- ``ceph_mds_sessions_total_load``: Total load
+
+- ``ceph_mds_sessions_sessions_open``: Sessions currently open
+
+- ``ceph_mds_sessions_sessions_stale``: Sessions currently stale
+
+- ``ceph_objecter_op_r``: Number of read operations
+
+- ``ceph_objecter_op_w``: Number of write operations
+
+- ``ceph_mds_root_rbytes``: Total number of bytes managed by the daemon
+
+- ``ceph_mds_root_rfiles``: Total number of files managed by the daemon
+
+
+Useful queries:
+---------------
+
+.. code-block:: bash
+
+  Total MDS daemons read workload:
+  sum(rate(ceph_objecter_op_r[1m]))
+
+  Total MDS daemons write workload:
+  sum(rate(ceph_objecter_op_w[1m]))
+
+  MDS daemon read workload: (daemon name is "mdstest")
+  sum(rate(ceph_objecter_op_r{ceph_daemon=~"mdstest"}[1m]))
+
+  MDS daemon write workload: (daemon name is "mdstest")
+  sum(rate(ceph_objecter_op_r{ceph_daemon=~"mdstest"}[1m]))
+
+  The average of reply latencies:
+  rate(ceph_mds_reply_latency_sum[30s]) / rate(ceph_mds_reply_latency_count[30s])
+
+  Total requests per second:
+  rate(ceph_mds_request[30s]) * on (instance) group_right (ceph_daemon) ceph_mds_metadata
+
+
+Block metrics
+=============
+
+By default RBD metrics for images are not available in order to provide the
+best performance in the prometheus manager module.
+
+To produce metrics for RBD images it is needed to configure properly the
+manager option ``mgr/prometheus/rbd_stats_pools``. For more information please
+see :ref:`prometheus-rbd-io-statistics`
+
+
+These metrics have the following labels:
+``image``: Name of the image which produces the metric value.
+``instance``: Node where the rbd metric is produced. (It points to the Ceph exporter daemon)
+``job``: Name of the Prometheus scrape job.
+``pool``: Image pool name.
+
+Example:
+
+.. code-block:: bash
+
+  ceph_rbd_read_bytes{image="test2", instance="cephtest-node-00.cephlab.com:9283", job="ceph", pool="testrbdpool"}
+
+
+Main metrics
+------------
+
+- ``ceph_rbd_read_bytes``: RBD image bytes read
+
+- ``ceph_rbd_read_latency_count``: RBD image reads latency count
+
+- ``ceph_rbd_read_latency_sum``: RBD image reads latency total
+
+- ``ceph_rbd_read_ops``: RBD image reads count
+
+- ``ceph_rbd_write_bytes``: RBD image bytes written
+
+- ``ceph_rbd_write_latency_count``: RBD image writes latency count
+
+- ``ceph_rbd_write_latency_sum``: RBD image writes latency total
+
+- ``ceph_rbd_write_ops``: RBD image writes count
+
+
+Useful queries
+--------------
+
+.. code-block:: bash
+
+  The average of read latencies:
+  rate(ceph_rbd_read_latency_sum[30s]) / rate(ceph_rbd_read_latency_count[30s]) * on (instance) group_left (ceph_daemon) ceph_rgw_metadata
+
+
+
+
index f62a215458d3659bbc3fbb989a07f26ad70fa77a..d8d5c9d03431d54745babc632dc66206b5a3b3bb 100644 (file)
@@ -4,7 +4,7 @@
  Configuring Ceph
 ==================
 
-When Ceph services start, the initialization process activates a series of
+When Ceph services start, the initialization process activates a set of
 daemons that run in the background. A :term:`Ceph Storage Cluster` runs at
 least three types of daemons:
 
@@ -12,15 +12,16 @@ least three types of daemons:
 - :term:`Ceph Manager` (``ceph-mgr``)
 - :term:`Ceph OSD Daemon` (``ceph-osd``)
 
-Ceph Storage Clusters that support the :term:`Ceph File System` also run at
-least one :term:`Ceph Metadata Server` (``ceph-mds``). Clusters that support
-:term:`Ceph Object Storage` run Ceph RADOS Gateway daemons (``radosgw``).
+Any Ceph Storage Cluster that supports the :term:`Ceph File System` also runs
+at least one :term:`Ceph Metadata Server` (``ceph-mds``). Any Cluster that
+supports :term:`Ceph Object Storage` runs Ceph RADOS Gateway daemons
+(``radosgw``).
 
-Each daemon has a number of configuration options, each of which has a default
-value. You may adjust the behavior of the system by changing these
-configuration options. Be careful to understand the consequences before
-overriding default values, as it is possible to significantly degrade the
-performance and stability of your cluster. Note too that default values
+Each daemon has a number of configuration options, and each of those options
+has a default value. Adjust the behavior of the system by changing these
+configuration options. Make sure to understand the consequences before
+overriding the default values, as it is possible to significantly degrade the
+performance and stability of your cluster. Remember that default values
 sometimes change between releases. For this reason, it is best to review the
 version of this documentation that applies to your Ceph release.
 
index 9d65d00a6cf640767c0ad4f9096ee4cc5df53c2d..7aefe26b38e03828db6f5cb977841cdad5ac1bbd 100644 (file)
@@ -4,11 +4,12 @@
 
 .. note:: Since the Luminous release of Ceph, Filestore has not been Ceph's
    default storage back end. Since the Luminous release of Ceph, BlueStore has
-   been Ceph's default storage back end.  However, Filestore OSDs are still
-   supported. See :ref:`OSD Back Ends
-   <rados_config_storage_devices_osd_backends>`. See :ref:`BlueStore Migration
-   <rados_operations_bluestore_migration>` for instructions explaining how to
-   replace an existing Filestore back end with a BlueStore back end.
+   been Ceph's default storage back end. However, Filestore OSDs are still
+   supported up to Quincy. Filestore OSDs are not supported in Reef. See
+   :ref:`OSD Back Ends <rados_config_storage_devices_osd_backends>`. See
+   :ref:`BlueStore Migration <rados_operations_bluestore_migration>` for
+   instructions explaining how to replace an existing Filestore back end with a
+   BlueStore back end.
 
 
 ``filestore_debug_omap_check``
index c19728ada7cce858b93dbe6606a07c1d6779cae1..e0a12d0938ac350a333977213e1211f0681ad399 100644 (file)
@@ -18,27 +18,25 @@ Background
 
 Ceph Monitors maintain a "master copy" of the :term:`Cluster Map`. 
 
-The maintenance by Ceph Monitors of a :term:`Cluster Map` makes it possible for
-a :term:`Ceph Client` to determine the location of all Ceph Monitors, Ceph OSD
-Daemons, and Ceph Metadata Servers by connecting to one Ceph Monitor and
-retrieving a current cluster map. Before Ceph Clients can read from or write to
-Ceph OSD Daemons or Ceph Metadata Servers, they must connect to a Ceph Monitor.
-When a Ceph client has a current copy of the cluster map and the CRUSH
-algorithm, it can compute the location for any RADOS object within in the
-cluster. This ability to compute the locations of objects makes it possible for
-Ceph Clients to talk directly to Ceph OSD Daemons. This direct communication
-with Ceph OSD Daemons represents an improvment upon traditional storage
-architectures in which clients were required to communicate with a central
-component, and that improvment contributes to Ceph's high scalability and
-performance. See `Scalability and High Availability`_ for additional details.
+The :term:`Cluster Map` makes it possible for :term:`Ceph client`\s to
+determine the location of all Ceph Monitors, Ceph OSD Daemons, and Ceph
+Metadata Servers. Clients do this by connecting to one Ceph Monitor and
+retrieving a current cluster map. Ceph clients must connect to a Ceph Monitor
+before they can read from or write to Ceph OSD Daemons or Ceph Metadata
+Servers. A Ceph client that has a current copy of the cluster map and the CRUSH
+algorithm can compute the location of any RADOS object within the cluster. This
+makes it possible for Ceph clients to talk directly to Ceph OSD Daemons. Direct
+communication between clients and Ceph OSD Daemons improves upon traditional
+storage architectures that required clients to communicate with a central
+component.  See `Scalability and High Availability`_ for more on this subject.
 
 The Ceph Monitor's primary function is to maintain a master copy of the cluster
 map. Monitors also provide authentication and logging services. All changes in
 the monitor services are written by the Ceph Monitor to a single Paxos
-instance, and Paxos writes the changes to a key/value store for strong
-consistency. Ceph Monitors are able to query the most recent version of the
-cluster map during sync operations, and they use the key/value store's
-snapshots and iterators (using leveldb) to perform store-wide synchronization.
+instance, and Paxos writes the changes to a key/value store. This provides
+strong consistency. Ceph Monitors are able to query the most recent version of
+the cluster map during sync operations, and they use the key/value store's
+snapshots and iterators (using RocksDB) to perform store-wide synchronization.
 
 .. ditaa::
  /-------------\               /-------------\
@@ -289,7 +287,6 @@ by setting it in the ``[mon]`` section of the configuration file.
 .. confval:: mon_data_size_warn
 .. confval:: mon_data_avail_warn
 .. confval:: mon_data_avail_crit
-.. confval:: mon_warn_on_cache_pools_without_hit_sets
 .. confval:: mon_warn_on_crush_straw_calc_version_zero
 .. confval:: mon_warn_on_legacy_crush_tunables
 .. confval:: mon_crush_min_required_version
@@ -540,6 +537,8 @@ Trimming requires that the placement groups are ``active+clean``.
 
 .. index:: Ceph Monitor; clock
 
+.. _mon-config-ref-clock:
+
 Clock
 -----
 
index c86707ad660df2c5465b28ce8760b0771e935407..33fe4e022b168ebff30ee40d90a3a66c15d0f9d8 100644 (file)
@@ -91,7 +91,7 @@ Similarly, two options control whether IPv4 and IPv6 addresses are used:
     to an IPv6 address
 
 .. note:: The ability to bind to multiple ports has paved the way for
-   dual-stack IPv4 and IPv6 support.  That said, dual-stack support is
+   dual-stack IPv4 and IPv6 support.  That said, dual-stack operation is
    not yet supported as of Quincy v17.2.0.
 
 Connection modes
index 3c3b378e7b4ef2afbc7b5e48886af0a439788935..0601212008383f0ec0f3841df84178788c438938 100644 (file)
@@ -145,17 +145,20 @@ See `Pool & PG Config Reference`_ for details.
 Scrubbing
 =========
 
-In addition to making multiple copies of objects, Ceph ensures data integrity by
-scrubbing placement groups. Ceph scrubbing is analogous to ``fsck`` on the
-object storage layer. For each placement group, Ceph generates a catalog of all
-objects and compares each primary object and its replicas to ensure that no
-objects are missing or mismatched. Light scrubbing (daily) checks the object
-size and attributes.  Deep scrubbing (weekly) reads the data and uses checksums
-to ensure data integrity.
-
-Scrubbing is important for maintaining data integrity, but it can reduce
-performance. You can adjust the following settings to increase or decrease
-scrubbing operations.
+One way that Ceph ensures data integrity is by "scrubbing" placement groups.
+Ceph scrubbing is analogous to ``fsck`` on the object storage layer. Ceph
+generates a catalog of all objects in each placement group and compares each
+primary object to its replicas, ensuring that no objects are missing or
+mismatched. Light scrubbing checks the object size and attributes, and is
+usually done daily. Deep scrubbing reads the data and uses checksums to ensure
+data integrity, and is usually done weekly. The freqeuncies of both light
+scrubbing and deep scrubbing are determined by the cluster's configuration,
+which is fully under your control and subject to the settings explained below
+in this section.
+
+Although scrubbing is important for maintaining data integrity, it can reduce
+the performance of the Ceph cluster. You can adjust the following settings to
+increase or decrease the frequency and depth of scrubbing operations.
 
 
 .. confval:: osd_max_scrubs
index 6fedd7c78c58d4a6f1dbdb2d4bba87c066879ecd..902c80346bbe2ba0981b996f3d372d6d62a2e482 100644 (file)
@@ -1,3 +1,5 @@
+.. _rados_config_pool_pg_crush_ref:
+
 ======================================
  Pool, PG and CRUSH Config Reference
 ======================================
index 359fa767642a6b7c6ebf5d0e71cdf8b4bec7648e..3688bb7986ee3f9c85525bb0cfd5ae85eca8af72 100644 (file)
@@ -4,74 +4,70 @@
  Adding/Removing Monitors
 ==========================
 
-When you have a cluster up and running, you may add or remove monitors
-from the cluster at runtime. To bootstrap a monitor, see `Manual Deployment`_
-or `Monitor Bootstrap`_.
+It is possible to add monitors to a running cluster as long as redundancy is
+maintained. To bootstrap a monitor, see `Manual Deployment`_ or `Monitor
+Bootstrap`_.
 
 .. _adding-monitors:
 
 Adding Monitors
 ===============
 
-Ceph monitors are lightweight processes that are the single source of truth
-for the cluster map. You can run a cluster with 1 monitor but we recommend at least 3 
-for a production cluster. Ceph monitors use a variation of the
-`Paxos`_ algorithm to establish consensus about maps and other critical
-information across the cluster. Due to the nature of Paxos, Ceph requires
-a majority of monitors to be active to establish a quorum (thus establishing
-consensus).
-
-It is advisable to run an odd number of monitors. An
-odd number of monitors is more resilient than an
-even number. For instance, with a two monitor deployment, no
-failures can be tolerated and still maintain a quorum; with three monitors,
-one failure can be tolerated; in a four monitor deployment, one failure can
-be tolerated; with five monitors, two failures can be tolerated.  This avoids
-the dreaded *split brain* phenomenon, and is why an odd number is best.
-In short, Ceph needs a majority of
-monitors to be active (and able to communicate with each other), but that
-majority can be achieved using a single monitor, or 2 out of 2 monitors,
-2 out of 3, 3 out of 4, etc.
+Ceph monitors serve as the single source of truth for the cluster map. It is
+possible to run a cluster with only one monitor, but for a production cluster
+it is recommended to have at least three monitors provisioned and in quorum.
+Ceph monitors use a variation of the `Paxos`_ algorithm to maintain consensus
+about maps and about other critical information across the cluster. Due to the
+nature of Paxos, Ceph is able to maintain quorum (and thus establish
+consensus) only if a majority of the monitors are ``active``.
+
+It is best to run an odd number of monitors. This is because a cluster that is
+running an odd number of monitors is more resilient than a cluster running an
+even number. For example, in a two-monitor deployment, no failures can be
+tolerated if quorum is to be maintained; in a three-monitor deployment, one
+failure can be tolerated; in a four-monitor deployment, one failure can be
+tolerated; and in a five-monitor deployment, two failures can be tolerated. In
+general, a cluster running an odd number of monitors is best because it avoids
+what is called the *split brain* phenomenon. In short, Ceph is able to operate
+only if a majority of monitors are ``active`` and able to communicate with each
+other, (for example: there must be a single monitor, two out of two monitors,
+two out of three monitors, three out of five monitors, or the like).
 
 For small or non-critical deployments of multi-node Ceph clusters, it is
-advisable to deploy three monitors, and to increase the number of monitors
-to five for larger clusters or to survive a double failure.  There is rarely
-justification for seven or more.
-
-Since monitors are lightweight, it is possible to run them on the same 
-host as OSDs; however, we recommend running them on separate hosts,
-because `fsync` issues with the kernel may impair performance.
-Dedicated monitor nodes also minimize disruption since monitor and OSD
-daemons are not inactive at the same time when a node crashes or is
-taken down for maintenance.
-
-Dedicated
-monitor nodes also make for cleaner maintenance by avoiding both OSDs and
-a mon going down if a node is rebooted, taken down, or crashes.
+recommended to deploy three monitors. For larger clusters or for clusters that
+are intended to survive a double failure, it is recommended to deploy five
+monitors. Only in rare circumstances is there any justification for deploying
+seven or more monitors.
+
+It is possible to run a monitor on the same host that is running an OSD.
+However, this approach has disadvantages: for example: `fsync` issues with the
+kernel might weaken performance, monitor and OSD daemons might be inactive at
+the same time and cause disruption if the node crashes, is rebooted, or is
+taken down for maintenance. Because of these risks, it is instead
+recommended to run monitors and managers on dedicated hosts.
 
 .. note:: A *majority* of monitors in your cluster must be able to 
-   reach each other in order to establish a quorum.
+   reach each other in order for quorum to be established.
 
-Deploy your Hardware
---------------------
+Deploying your Hardware
+-----------------------
 
-If you are adding a new host when adding a new monitor,  see `Hardware
-Recommendations`_ for details on minimum recommendations for monitor hardware.
-To add a monitor host to your cluster, first make sure you have an up-to-date
-version of Linux installed (typically Ubuntu 16.04 or RHEL 7). 
+Some operators choose to add a new monitor host at the same time that they add
+a new monitor. For details on the minimum recommendations for monitor hardware,
+see `Hardware Recommendations`_. Before adding a monitor host to the cluster,
+make sure that there is an up-to-date version of Linux installed.
 
-Add your monitor host to a rack in your cluster, connect it to the network
-and ensure that it has network connectivity.
+Add the newly installed monitor host to a rack in your cluster, connect the
+host to the network, and make sure that the host has network connectivity.
 
 .. _Hardware Recommendations: ../../../start/hardware-recommendations
 
-Install the Required Software
------------------------------
+Installing the Required Software
+--------------------------------
 
-For manually deployed clusters, you must install Ceph packages
-manually. See `Installing Packages`_ for details.
-You should configure SSH to a user with password-less authentication
-and root permissions.
+In manually deployed clusters, it is necessary to install Ceph packages
+manually. For details, see `Installing Packages`_. Configure SSH so that it can
+be used by a user that has passwordless authentication and root permissions.
 
 .. _Installing Packages: ../../../install/install-storage-cluster
 
@@ -81,67 +77,65 @@ and root permissions.
 Adding a Monitor (Manual)
 -------------------------
 
-This procedure creates a ``ceph-mon`` data directory, retrieves the monitor map
-and monitor keyring, and adds a ``ceph-mon`` daemon to your cluster.  If
-this results in only two monitor daemons, you may add more monitors by
-repeating this procedure until you have a sufficient number of ``ceph-mon`` 
-daemons to achieve a quorum.
+The procedure in this section creates a ``ceph-mon`` data directory, retrieves
+both the monitor map and the monitor keyring, and adds a ``ceph-mon`` daemon to
+the cluster. The procedure might result in a Ceph cluster that contains only
+two monitor daemons. To add more monitors until there are enough ``ceph-mon``
+daemons to establish quorum, repeat the procedure.
 
-At this point you should define your monitor's id.  Traditionally, monitors 
-have been named with single letters (``a``, ``b``, ``c``, ...), but you are 
-free to define the id as you see fit.  For the purpose of this document, 
-please take into account that ``{mon-id}`` should be the id you chose, 
-without the ``mon.`` prefix (i.e., ``{mon-id}`` should be the ``a`` 
-on ``mon.a``).
+This is a good point at which to define the new monitor's ``id``. Monitors have
+often been named with single letters (``a``, ``b``, ``c``, etc.), but you are
+free to define the ``id`` however you see fit. In this document, ``{mon-id}``
+refers to the ``id`` exclusive of the ``mon.`` prefix: for example, if
+``mon.a`` has been chosen as the ``id`` of a monitor, then ``{mon-id}`` is
+``a``.                                               ???
 
-#. Create the default directory on the machine that will host your 
-   new monitor:
+#. Create a data directory on the machine that will host the new monitor:
 
    .. prompt:: bash $
 
-       ssh {new-mon-host}
-       sudo mkdir /var/lib/ceph/mon/ceph-{mon-id}
+    ssh {new-mon-host}
+    sudo mkdir /var/lib/ceph/mon/ceph-{mon-id}
 
-#. Create a temporary directory ``{tmp}`` to keep the files needed during 
-   this process. This directory should be different from the monitor's default 
-   directory created in the previous step, and can be removed after all the 
-   steps are executed:
+#. Create a temporary directory ``{tmp}`` that will contain the files needed
+   during this procedure. This directory should be different from the data
+   directory created in the previous step. Because this is a temporary
+   directory, it can be removed after the procedure is complete:
 
    .. prompt:: bash $
 
-       mkdir {tmp}
+    mkdir {tmp}
 
-#. Retrieve the keyring for your monitors, where ``{tmp}`` is the path to 
-   the retrieved keyring, and ``{key-filename}`` is the name of the file 
-   containing the retrieved monitor key:
+#. Retrieve the keyring for your monitors (``{tmp}`` is the path to the
+   retrieved keyring and ``{key-filename}`` is the name of the file that
+   contains the retrieved monitor key):
 
    .. prompt:: bash $
 
       ceph auth get mon. -o {tmp}/{key-filename}
 
-#. Retrieve the monitor map, where ``{tmp}`` is the path to 
-   the retrieved monitor map, and ``{map-filename}`` is the name of the file 
-   containing the retrieved monitor map:
+#. Retrieve the monitor map (``{tmp}`` is the path to the retrieved monitor map
+   and ``{map-filename}`` is the name of the file that contains the retrieved
+   monitor map):
 
    .. prompt:: bash $
 
       ceph mon getmap -o {tmp}/{map-filename}
 
-#. Prepare the monitor's data directory created in the first step. You must 
-   specify the path to the monitor map so that you can retrieve the 
-   information about a quorum of monitors and their ``fsid``. You must also 
-   specify a path to the monitor keyring:
-   
+#. Prepare the monitor's data directory, which was created in the first step.
+   The following command must specify the path to the monitor map (so that
+   information about a quorum of monitors and their ``fsid``\s can be
+   retrieved) and specify the path to the monitor keyring:
+
    .. prompt:: bash $
 
       sudo ceph-mon -i {mon-id} --mkfs --monmap {tmp}/{map-filename} --keyring {tmp}/{key-filename}
-       
 
-#. Start the new monitor and it will automatically join the cluster.
-   The daemon needs to know which address to bind to, via either the
-   ``--public-addr {ip}`` or ``--public-network {network}`` argument.
+#. Start the new monitor. It will automatically join the cluster. To provide
+   information to the daemon about which address to bind to, use either the
+   ``--public-addr {ip}`` option or the ``--public-network {network}`` option.
    For example:
-   
+
    .. prompt:: bash $
 
       ceph-mon -i {mon-id} --public-addr {ip:port}
@@ -151,44 +145,47 @@ on ``mon.a``).
 Removing Monitors
 =================
 
-When you remove monitors from a cluster, consider that Ceph monitors use 
-Paxos to establish consensus about the master cluster map. You must have 
-a sufficient number of monitors to establish a quorum for consensus about 
-the cluster map.
+When monitors are removed from a cluster, it is important to remember
+that Ceph monitors use Paxos to maintain consensus about the cluster
+map. Such consensus is possible only if the number of monitors is sufficient
+to establish quorum.
+
 
 .. _Removing a Monitor (Manual):
 
 Removing a Monitor (Manual)
 ---------------------------
 
-This procedure removes a ``ceph-mon`` daemon from your cluster.   If this
-procedure results in only two monitor daemons, you may add or remove another
-monitor until you have a number of ``ceph-mon`` daemons that can achieve a 
-quorum.
+The procedure in this section removes a ``ceph-mon`` daemon from the cluster.
+The procedure might result in a Ceph cluster that contains a number of monitors
+insufficient to maintain quorum, so plan carefully. When replacing an old
+monitor with a new monitor, add the new monitor first, wait for quorum to be
+established, and then remove the old monitor. This ensures that quorum is not
+lost.
+
 
 #. Stop the monitor:
 
    .. prompt:: bash $
 
       service ceph -a stop mon.{mon-id}
-       
+
 #. Remove the monitor from the cluster:
 
    .. prompt:: bash $
 
       ceph mon remove {mon-id}
-       
-#. Remove the monitor entry from ``ceph.conf``. 
+
+#. Remove the monitor entry from the ``ceph.conf`` file:
 
 .. _rados-mon-remove-from-unhealthy: 
 
+
 Removing Monitors from an Unhealthy Cluster
 -------------------------------------------
 
-This procedure removes a ``ceph-mon`` daemon from an unhealthy
-cluster, for example a cluster where the monitors cannot form a
-quorum.
-
+The procedure in this section removes a ``ceph-mon`` daemon from an unhealthy
+cluster (for example, a cluster whose monitors are unable to form a quorum).
 
 #. Stop all ``ceph-mon`` daemons on all monitor hosts:
 
@@ -197,63 +194,68 @@ quorum.
       ssh {mon-host}
       systemctl stop ceph-mon.target
 
-   Repeat for all monitor hosts.
+   Repeat this step on every monitor host.
 
-#. Identify a surviving monitor and log in to that host:
+#. Identify a surviving monitor and log in to the monitor's host:
 
    .. prompt:: bash $
 
       ssh {mon-host}
 
-#. Extract a copy of the monmap file:
+#. Extract a copy of the ``monmap`` file by running a command of the following
+   form:
 
    .. prompt:: bash $
 
       ceph-mon -i {mon-id} --extract-monmap {map-path}
 
-   In most cases, this command will be:
+   Here is a more concrete example. In this example, ``hostname`` is the
+   ``{mon-id}`` and ``/tmp/monpap`` is the ``{map-path}``:
 
    .. prompt:: bash $
 
       ceph-mon -i `hostname` --extract-monmap /tmp/monmap
 
-#. Remove the non-surviving or problematic monitors.  For example, if
-   you have three monitors, ``mon.a``, ``mon.b``, and ``mon.c``, where
-   only ``mon.a`` will survive, follow the example below:
+#. Remove the non-surviving or otherwise problematic monitors:
 
    .. prompt:: bash $
 
       monmaptool {map-path} --rm {mon-id}
 
-   For example,
+   For example, suppose that there are three monitors |---| ``mon.a``, ``mon.b``,
+   and ``mon.c`` |---| and that only ``mon.a`` will survive:
 
    .. prompt:: bash $
 
       monmaptool /tmp/monmap --rm b
       monmaptool /tmp/monmap --rm c
-       
-#. Inject the surviving map with the removed monitors into the
-   surviving monitor(s).  For example, to inject a map into monitor
-   ``mon.a``, follow the example below:
+
+#. Inject the surviving map that includes the removed monitors into the
+   monmap of the surviving monitor(s):
 
    .. prompt:: bash $
 
       ceph-mon -i {mon-id} --inject-monmap {map-path}
 
-   For example:
+   Continuing with the above example, inject a map into monitor ``mon.a`` by
+   running the following command:
 
    .. prompt:: bash $
 
       ceph-mon -i a --inject-monmap /tmp/monmap
 
+
 #. Start only the surviving monitors.
 
-#. Verify the monitors form a quorum (``ceph -s``).
+#. Verify that the monitors form a quorum by running the command ``ceph -s``.
 
-#. You may wish to archive the removed monitors' data directory in
-   ``/var/lib/ceph/mon`` in a safe location, or delete it if you are
-   confident the remaining monitors are healthy and are sufficiently
-   redundant.
+#. The data directory of the removed monitors is in ``/var/lib/ceph/mon``:
+   either archive this data directory in a safe location or delete this data
+   directory. However, do not delete it unless you are confident that the
+   remaining monitors are healthy and sufficiently redundant. Make sure that
+   there is enough room for the live DB to expand and compact, and make sure
+   that there is also room for an archived copy of the DB. The archived copy
+   can be compressed.
 
 .. _Changing a Monitor's IP address:
 
@@ -262,185 +264,195 @@ Changing a Monitor's IP Address
 
 .. important:: Existing monitors are not supposed to change their IP addresses.
 
-Monitors are critical components of a Ceph cluster, and they need to maintain a
-quorum for the whole system to work properly. To establish a quorum, the
-monitors need to discover each other. Ceph has strict requirements for
-discovering monitors.
+Monitors are critical components of a Ceph cluster. The entire system can work
+properly only if the monitors maintain quorum, and quorum can be established
+only if the monitors have discovered each other by means of their IP addresses.
+Ceph has strict requirements on the discovery of monitors.
 
-Ceph clients and other Ceph daemons use ``ceph.conf`` to discover monitors.
-However, monitors discover each other using the monitor map, not ``ceph.conf``.
-For example,  if you refer to `Adding a Monitor (Manual)`_ you will see that you
-need to obtain the current monmap for the cluster when creating a new monitor,
-as it is one of the required arguments of ``ceph-mon -i {mon-id} --mkfs``. The
-following sections explain the consistency requirements for Ceph monitors, and a
-few safe ways to change a monitor's IP address.
+Although the ``ceph.conf`` file is used by Ceph clients and other Ceph daemons
+to discover monitors, the monitor map is used by monitors to discover each
+other. This is why it is necessary to obtain the current ``monmap`` at the time
+a new monitor is created: as can be seen above in `Adding a Monitor (Manual)`_,
+the ``monmap`` is one of the arguments required by the ``ceph-mon -i {mon-id}
+--mkfs`` command. The following sections explain the consistency requirements
+for Ceph monitors, and also explain a number of safe ways to change a monitor's
+IP address.
 
 
 Consistency Requirements
 ------------------------
 
-A monitor always refers to the local copy of the monmap  when discovering other
-monitors in the cluster.  Using the monmap instead of ``ceph.conf`` avoids
-errors that could  break the cluster (e.g., typos in ``ceph.conf`` when
-specifying a monitor address or port). Since monitors use monmaps for discovery
-and they share monmaps with clients and other Ceph daemons, the monmap provides
-monitors with a strict guarantee that their consensus is valid.
+When a monitor discovers other monitors in the cluster, it always refers to the
+local copy of the monitor map. Using the monitor map instead of using the
+``ceph.conf`` file avoids errors that could break the cluster (for example,
+typos or other slight errors in ``ceph.conf`` when a monitor address or port is
+specified). Because monitors use monitor maps for discovery and because they
+share monitor maps with Ceph clients and other Ceph daemons, the monitor map
+provides monitors with a strict guarantee that their consensus is valid.
 
 Strict consistency also applies to updates to the monmap. As with any other
 updates on the monitor, changes to the monmap always run through a distributed
 consensus algorithm called `Paxos`_. The monitors must agree on each update to
-the monmap, such as adding or removing a monitor, to ensure that each monitor in
-the quorum has the same version of the monmap. Updates to the monmap are
+the monmap, such as adding or removing a monitor, to ensure that each monitor
+in the quorum has the same version of the monmap. Updates to the monmap are
 incremental so that monitors have the latest agreed upon version, and a set of
-previous versions, allowing a monitor that has an older version of the monmap to
-catch up with the current state of the cluster.
-
-If monitors discovered each other through the Ceph configuration file instead of
-through the monmap, it would introduce additional risks because the Ceph
-configuration files are not updated and distributed automatically. Monitors
-might inadvertently use an older ``ceph.conf`` file, fail to recognize a
-monitor, fall out of a quorum, or develop a situation where `Paxos`_ is not able
-to determine the current state of the system accurately. Consequently,  making
-changes to an existing monitor's IP address must be done with  great care.
-
-
-Changing a Monitor's IP address (The Right Way)
------------------------------------------------
-
-Changing a monitor's IP address in ``ceph.conf`` only is not sufficient to
-ensure that other monitors in the cluster will receive the update.  To change a
-monitor's IP address, you must add a new monitor with the IP  address you want
-to use (as described in `Adding a Monitor (Manual)`_),  ensure that the new
-monitor successfully joins the  quorum; then, remove the monitor that uses the
-old IP address. Then, update the ``ceph.conf`` file to ensure that clients and
-other daemons know the IP address of the new monitor.
-
-For example, lets assume there are three monitors in place, such as :: 
-
-       [mon.a]
-               host = host01
-               addr = 10.0.0.1:6789
-       [mon.b]
-               host = host02
-               addr = 10.0.0.2:6789
-       [mon.c]
-               host = host03
-               addr = 10.0.0.3:6789
-
-To change ``mon.c`` to ``host04`` with the IP address  ``10.0.0.4``, follow the
-steps in `Adding a Monitor (Manual)`_ by adding a  new monitor ``mon.d``. Ensure
-that ``mon.d`` is  running before removing ``mon.c``, or it will break the
-quorum. Remove ``mon.c`` as described on  `Removing a Monitor (Manual)`_. Moving
-all three  monitors would thus require repeating this process as many times as
-needed.
-
-
-Changing a Monitor's IP address (The Messy Way)
------------------------------------------------
-
-There may come a time when the monitors must be moved to a different network,  a
-different part of the datacenter or a different datacenter altogether. While  it
-is possible to do it, the process becomes a bit more hazardous.
-
-In such a case, the solution is to generate a new monmap with updated IP
-addresses for all the monitors in the cluster, and inject the new map on each
-individual monitor.  This is not the most user-friendly approach, but we do not
-expect this to be something that needs to be done every other week.  As it is
-clearly stated on the top of this section, monitors are not supposed to change
-IP addresses.
-
-Using the previous monitor configuration as an example, assume you want to move
-all the  monitors from the ``10.0.0.x`` range to ``10.1.0.x``, and these
-networks  are unable to communicate.  Use the following procedure:
-
-#. Retrieve the monitor map, where ``{tmp}`` is the path to 
-   the retrieved monitor map, and ``{filename}`` is the name of the file 
-   containing the retrieved monitor map:
+previous versions, allowing a monitor that has an older version of the monmap
+to catch up with the current state of the cluster.
+
+There are additional advantages to using the monitor map rather than
+``ceph.conf`` when monitors discover each other. Because ``ceph.conf`` is not
+automatically updated and distributed, its use would bring certain risks:
+monitors might use an outdated ``ceph.conf`` file, might fail to recognize a
+specific monitor, might fall out of quorum, and might develop a situation in
+which `Paxos`_ is unable to accurately ascertain the current state of the
+system. Because of these risks, any changes to an existing monitor's IP address
+must be made with great care.
+
+.. _operations_add_or_rm_mons_changing_mon_ip:
+
+Changing a Monitor's IP address (Preferred Method)
+--------------------------------------------------
+
+If a monitor's IP address is changed only in the ``ceph.conf`` file, there is
+no guarantee that the other monitors in the cluster will receive the update.
+For this reason, the preferred method to change a monitor's IP address is as
+follows: add a new monitor with the desired IP address (as described in `Adding
+a Monitor (Manual)`_), make sure that the new monitor successfully joins the
+quorum, remove the monitor that is using the old IP address, and update the
+``ceph.conf`` file to ensure that clients and other daemons are made aware of
+the new monitor's IP address.
+
+For example, suppose that there are three monitors in place:: 
+
+    [mon.a]
+        host = host01
+        addr = 10.0.0.1:6789
+    [mon.b]
+        host = host02
+        addr = 10.0.0.2:6789
+    [mon.c]
+        host = host03
+        addr = 10.0.0.3:6789
+
+To change ``mon.c`` so that its name is ``host04`` and its IP address is
+``10.0.0.4``: (1) follow the steps in `Adding a Monitor (Manual)`_ to add a new
+monitor ``mon.d``, (2) make sure that ``mon.d`` is  running before removing
+``mon.c`` or else quorum will be broken, and (3) follow the steps in `Removing
+a Monitor (Manual)`_ to remove ``mon.c``. To move all three monitors to new IP
+addresses, repeat this process.
+
+Changing a Monitor's IP address (Advanced Method)
+-------------------------------------------------
+
+There are cases in which the method outlined in :ref"`<Changing a Monitor's IP
+Address (Preferred Method)> operations_add_or_rm_mons_changing_mon_ip` cannot
+be used. For example, it might be necessary to move the cluster's monitors to a
+different network, to a different part of the datacenter, or to a different
+datacenter altogether. It is still possible to change the monitors' IP
+addresses, but a different method must be used.
+
+For such cases, a new monitor map with updated IP addresses for every monitor
+in the cluster must be generated and injected on each monitor. Although this
+method is not particularly easy, such a major migration is unlikely to be a
+routine task. As stated at the beginning of this section, existing monitors are
+not supposed to change their IP addresses.
+
+Continue with the monitor configuration in the example from :ref"`<Changing a
+Monitor's IP Address (Preferred Method)>
+operations_add_or_rm_mons_changing_mon_ip` . Suppose that all of the monitors
+are to be moved from the ``10.0.0.x`` range to the ``10.1.0.x`` range, and that
+these networks are unable to communicate. Carry out the following procedure:
+
+#. Retrieve the monitor map (``{tmp}`` is the path to the retrieved monitor
+   map, and ``{filename}`` is the name of the file that contains the retrieved
+   monitor map):
 
    .. prompt:: bash $
 
       ceph mon getmap -o {tmp}/{filename}
 
-#. The following example demonstrates the contents of the monmap:
+#. Check the contents of the monitor map:
 
    .. prompt:: bash $
 
       monmaptool --print {tmp}/{filename}
 
-   ::  
+   ::    
 
-       monmaptool: monmap file {tmp}/{filename}
-       epoch 1
-       fsid 224e376d-c5fe-4504-96bb-ea6332a19e61
-       last_changed 2012-12-17 02:46:41.591248
-       created 2012-12-17 02:46:41.591248
-       0: 10.0.0.1:6789/0 mon.a
-       1: 10.0.0.2:6789/0 mon.b
-       2: 10.0.0.3:6789/0 mon.c
+    monmaptool: monmap file {tmp}/{filename}
+    epoch 1
+    fsid 224e376d-c5fe-4504-96bb-ea6332a19e61
+    last_changed 2012-12-17 02:46:41.591248
+    created 2012-12-17 02:46:41.591248
+    0: 10.0.0.1:6789/0 mon.a
+    1: 10.0.0.2:6789/0 mon.b
+    2: 10.0.0.3:6789/0 mon.c
 
-#. Remove the existing monitors:
+#. Remove the existing monitors from the monitor map:
 
    .. prompt:: bash $
 
       monmaptool --rm a --rm b --rm c {tmp}/{filename}
-       
 
    ::
 
-       monmaptool: monmap file {tmp}/{filename}
-       monmaptool: removing a
-       monmaptool: removing b
-       monmaptool: removing c
-       monmaptool: writing epoch 1 to {tmp}/{filename} (0 monitors)
+    monmaptool: monmap file {tmp}/{filename}
+    monmaptool: removing a
+    monmaptool: removing b
+    monmaptool: removing c
+    monmaptool: writing epoch 1 to {tmp}/{filename} (0 monitors)
 
-#. Add the new monitor locations:
+#. Add the new monitor locations to the monitor map:
 
    .. prompt:: bash $
 
       monmaptool --add a 10.1.0.1:6789 --add b 10.1.0.2:6789 --add c 10.1.0.3:6789 {tmp}/{filename}
 
-
    ::
-       
+
       monmaptool: monmap file {tmp}/{filename}
       monmaptool: writing epoch 1 to {tmp}/{filename} (3 monitors)
 
-#. Check new contents:
+#. Check the new contents of the monitor map:
 
    .. prompt:: bash $
 
        monmaptool --print {tmp}/{filename}
-       
+
    ::
 
-       monmaptool: monmap file {tmp}/{filename}
-       epoch 1
-       fsid 224e376d-c5fe-4504-96bb-ea6332a19e61
-       last_changed 2012-12-17 02:46:41.591248
-       created 2012-12-17 02:46:41.591248
-       0: 10.1.0.1:6789/0 mon.a
-       1: 10.1.0.2:6789/0 mon.b
-       2: 10.1.0.3:6789/0 mon.c
+    monmaptool: monmap file {tmp}/{filename}
+    epoch 1
+    fsid 224e376d-c5fe-4504-96bb-ea6332a19e61
+    last_changed 2012-12-17 02:46:41.591248
+    created 2012-12-17 02:46:41.591248
+    0: 10.1.0.1:6789/0 mon.a
+    1: 10.1.0.2:6789/0 mon.b
+    2: 10.1.0.3:6789/0 mon.c
 
-At this point, we assume the monitors (and stores) are installed at the new
-location. The next step is to propagate the modified monmap to the new 
-monitors, and inject the modified monmap into each new monitor.
+At this point, we assume that the monitors (and stores) have been installed at
+the new location. Next, propagate the modified monitor map to the new monitors,
+and inject the modified monitor map into each new monitor.
 
-#. First, make sure to stop all your monitors.  Injection must be done while 
-   the daemon is not running.
+#. Make sure all of your monitors have been stopped. Never inject into a
+   monitor while the monitor daemon is running.
 
-#. Inject the monmap: 
+#. Inject the monitor map:
 
    .. prompt:: bash $
 
       ceph-mon -i {mon-id} --inject-monmap {tmp}/{filename}
 
-#. Restart the monitors.
+#. Restart all of the monitors.
+
+Migration to the new location is now complete. The monitors should operate
+successfully.
 
-After this step, migration to the new location is complete and 
-the monitors should operate successfully.
 
 
 .. _Manual Deployment: ../../../install/manual-deployment
 .. _Monitor Bootstrap: ../../../dev/mon-bootstrap
 .. _Paxos: https://en.wikipedia.org/wiki/Paxos_(computer_science)
+
+.. |---|   unicode:: U+2014 .. EM DASH
+   :trim:
index a9a980f7ca962857655b8fec178003ec98a484c7..aa4eab93cf96e56f49d9e98af91d4ffd2a7edcc7 100644 (file)
@@ -1,7 +1,7 @@
 .. _balancer:
 
-Balancer
-========
+Balancer Module
+=======================
 
 The *balancer* can optimize the allocation of placement groups (PGs) across
 OSDs in order to achieve a balanced distribution. The balancer can operate
index dab7e0e79fa5e002a346fecba8ea05b94aad5eb3..033f831cd8fc489f5a473ecf5ac31c69fece15ce 100644 (file)
@@ -106,22 +106,27 @@ to be considered ``stuck`` (default: 300).
 PGs might be stuck in any of the following states:
 
 **Inactive** 
+
     PGs are unable to process reads or writes because they are waiting for an
     OSD that has the most up-to-date data to return to an ``up`` state.
 
+
 **Unclean** 
+
     PGs contain objects that have not been replicated the desired number of
     times. These PGs have not yet completed the process of recovering.
 
+
 **Stale** 
+
     PGs are in an unknown state, because the OSDs that host them have not
     reported to the monitor cluster for a certain period of time (specified by
     the ``mon_osd_report_timeout`` configuration setting).
 
 
-To delete a ``lost`` RADOS object or revert an object to its prior state
-(either by reverting it to its previous version or by deleting it because it
-was just created and has no previous version), run the following command:
+To delete a ``lost`` object or revert an object to its prior state, either by
+reverting it to its previous version or by deleting it because it was just
+created and has no previous version, run the following command:
 
 .. prompt:: bash $
 
@@ -168,10 +173,8 @@ To dump the OSD map, run the following command:
    ceph osd dump [--format {format}]
 
 The ``--format`` option accepts the following arguments: ``plain`` (default),
-``json``, ``json-pretty``, ``xml``, and ``xml-pretty``. As noted above, JSON
-format is the recommended format for consumption by tools, scripting, and other
-forms of automation. 
-
+``json``, ``json-pretty``, ``xml``, and ``xml-pretty``. As noted above, JSON is
+the recommended format for tools, scripting, and other forms of automation. 
 
 To dump the OSD map as a tree that lists one OSD per line and displays
 information about the weights and states of the OSDs, run the following
@@ -230,7 +233,7 @@ To mark an OSD as ``lost``, run the following command:
 .. warning::
    This could result in permanent data loss. Use with caution!
 
-To create an OSD in the CRUSH map, run the following command:
+To create a new OSD, run the following command:
 
 .. prompt:: bash $
 
@@ -287,47 +290,51 @@ following command:
 
    ceph osd in {osd-num}
 
-By using the ``pause`` and ``unpause`` flags in the OSD map, you can pause or
-unpause I/O requests. If the flags are set, then no I/O requests will be sent
-to any OSD. If the flags are cleared, then pending I/O requests will be resent.
-To set or clear these flags, run one of the following commands:
+By using the "pause flags" in the OSD map, you can pause or unpause I/O
+requests.  If the flags are set, then no I/O requests will be sent to any OSD.
+When the flags are cleared, then pending I/O requests will be resent. To set or
+clear pause flags, run one of the following commands:
 
 .. prompt:: bash $
 
    ceph osd pause
    ceph osd unpause
 
-You can assign an override or ``reweight`` weight value to a specific OSD
-if the normal CRUSH distribution seems to be suboptimal. The weight of an
-OSD helps determine the extent of its I/O requests and data storage: two
-OSDs with the same weight will receive approximately the same number of
-I/O requests and store approximately the same amount of data. The ``ceph
-osd reweight`` command assigns an override weight to an OSD. The weight
-value is in the range 0 to 1, and the command forces CRUSH to relocate a
-certain amount (1 - ``weight``) of the data that would otherwise be on
-this OSD. The command does not change the weights of the buckets above
-the OSD in the CRUSH map. Using the command is merely a corrective
-measure: for example, if one of your OSDs is at 90% and the others are at
-50%, you could reduce the outlier weight to correct this imbalance. To
-assign an override weight to a specific OSD, run the following command:
+You can assign an override or ``reweight`` weight value to a specific OSD if
+the normal CRUSH distribution seems to be suboptimal. The weight of an OSD
+helps determine the extent of its I/O requests and data storage: two OSDs with
+the same weight will receive approximately the same number of I/O requests and
+store approximately the same amount of data. The ``ceph osd reweight`` command
+assigns an override weight to an OSD. The weight value is in the range 0 to 1,
+and the command forces CRUSH to relocate a certain amount (1 - ``weight``) of
+the data that would otherwise be on this OSD. The command does not change the
+weights of the buckets above the OSD in the CRUSH map. Using the command is
+merely a corrective measure: for example, if one of your OSDs is at 90% and the
+others are at 50%, you could reduce the outlier weight to correct this
+imbalance. To assign an override weight to a specific OSD, run the following
+command:
 
 .. prompt:: bash $
 
    ceph osd reweight {osd-num} {weight}
 
+.. note:: Any assigned override reweight value will conflict with the balancer.
+   This means that if the balancer is in use, all override reweight values
+   should be ``1.0000`` in order to avoid suboptimal cluster behavior.
+
 A cluster's OSDs can be reweighted in order to maintain balance if some OSDs
 are being disproportionately utilized. Note that override or ``reweight``
-weights have relative values that default to 1.00000. Their values are not
-absolute, and these weights must be distinguished from CRUSH weights (which
-reflect the absolute capacity of a bucket, as measured in TiB). To reweight
-OSDs by utilization, run the following command:
+weights have values relative to one another that default to 1.00000; their
+values are not absolute, and these weights must be distinguished from CRUSH
+weights (which reflect the absolute capacity of a bucket, as measured in TiB).
+To reweight OSDs by utilization, run the following command:
 
 .. prompt:: bash $
 
    ceph osd reweight-by-utilization [threshold [max_change [max_osds]]] [--no-increasing]
 
-By default, this command adjusts the override weight of OSDs that have ±20%
-of the average utilization, but you can specify a different percentage in the
+By default, this command adjusts the override weight of OSDs that have ±20% of
+the average utilization, but you can specify a different percentage in the
 ``threshold`` argument. 
 
 To limit the increment by which any OSD's reweight is to be changed, use the
@@ -355,42 +362,38 @@ Operators of deployments that utilize Nautilus or newer (or later revisions of
 Luminous and Mimic) and that have no pre-Luminous clients might likely instead
 want to enable the `balancer`` module for ``ceph-mgr``.
 
-.. note:: The ``balancer`` module does the work for you and achieves a more
-   uniform result, shuffling less data along the way. When enabling the
-   ``balancer`` module, you will want to converge any changed override weights
-   back to 1.00000 so that the balancer can do an optimal job. If your cluster
-   is very full, reverting these override weights before enabling the balancer
-   may cause some OSDs to become full. This means that a phased approach may
-   needed.
-
-Add/remove an IP address or CIDR range to/from the blocklist.
-When adding to the blocklist,
-you can specify how long it should be blocklisted in seconds; otherwise,
-it will default to 1 hour. A blocklisted address is prevented from
-connecting to any OSD. If you blocklist an IP or range containing an OSD, be aware
-that OSD will also be prevented from performing operations on its peers where it
-acts as a client. (This includes tiering and copy-from functionality.)
-
-If you want to blocklist a range (in CIDR format), you may do so by
-including the ``range`` keyword.
-
-These commands are mostly only useful for failure testing, as
-blocklists are normally maintained automatically and shouldn't need
-manual intervention. :
+The blocklist can be modified by adding or removing an IP address or a CIDR
+range. If an address is blocklisted, it will be unable to connect to any OSD.
+If an OSD is contained within an IP address or CIDR range that has been
+blocklisted, the OSD will be unable to perform operations on its peers when it
+acts as a client: such blocked operations include tiering and copy-from
+functionality. To add or remove an IP address or CIDR range to the blocklist,
+run one of the following commands:
 
 .. prompt:: bash $
 
    ceph osd blocklist ["range"] add ADDRESS[:source_port][/netmask_bits] [TIME]
    ceph osd blocklist ["range"] rm ADDRESS[:source_port][/netmask_bits]
 
-Creates/deletes a snapshot of a pool. :
+If you add something to the blocklist with the above ``add`` command, you can
+use the ``TIME`` keyword to specify the length of time (in seconds) that it
+will remain on the blocklist (default: one hour). To add or remove a CIDR
+range, use the ``range`` keyword in the above commands.
+
+Note that these commands are useful primarily in failure testing. Under normal
+conditions, blocklists are maintained automatically and do not need any manual
+intervention.
+
+To create or delete a snapshot of a specific storage pool, run one of the
+following commands:
 
 .. prompt:: bash $
 
    ceph osd pool mksnap {pool-name} {snap-name}
    ceph osd pool rmsnap {pool-name} {snap-name}
 
-Creates/deletes/renames a storage pool. :
+To create, delete, or rename a specific storage pool, run one of the following
+commands:
 
 .. prompt:: bash $
 
@@ -398,20 +401,20 @@ Creates/deletes/renames a storage pool. :
    ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]
    ceph osd pool rename {old-name} {new-name}
 
-Changes a pool setting. 
+To change a pool setting, run the following command
 
 .. prompt:: bash $
 
    ceph osd pool set {pool-name} {field} {value}
 
-Valid fields are:
+The following are valid fields:
 
-       * ``size``: Sets the number of copies of data in the pool.
-       * ``pg_num``: The placement group number.
-       * ``pgp_num``: Effective number when calculating pg placement.
-       * ``crush_rule``: rule number for mapping placement.
+    * ``size``: The number of copies of data in the pool.
+    * ``pg_num``: The PG number.
+    * ``pgp_num``: The effective number of PGs when calculating placement.
+    * ``crush_rule``: The rule number for mapping placement.
 
-Get the value of a pool setting. :
+To retrieve the value of a pool setting, run the following command:
 
 .. prompt:: bash $
 
@@ -419,40 +422,43 @@ Get the value of a pool setting. :
 
 Valid fields are:
 
-       * ``pg_num``: The placement group number.
-       * ``pgp_num``: Effective number of placement groups when calculating placement.
+    * ``pg_num``: The PG number.
+    * ``pgp_num``: The effective number of PGs when calculating placement.
 
-
-Sends a scrub command to OSD ``{osd-num}``. To send the command to all OSDs, use ``*``. :
+To send a scrub command to a specific OSD, or to all OSDs (by using ``*``), run
+the following command:
 
 .. prompt:: bash $
 
    ceph osd scrub {osd-num}
 
-Sends a repair command to OSD.N. To send the command to all OSDs, use ``*``. :
+To send a repair command to a specific OSD, or to all OSDs (by using ``*``),
+run the following command:
 
 .. prompt:: bash $
 
    ceph osd repair N
 
-Runs a simple throughput benchmark against OSD.N, writing ``TOTAL_DATA_BYTES``
-in write requests of ``BYTES_PER_WRITE`` each. By default, the test
-writes 1 GB in total in 4-MB increments.
-The benchmark is non-destructive and will not overwrite existing live
-OSD data, but might temporarily affect the performance of clients
-concurrently accessing the OSD. :
+You can run a simple throughput benchmark test against a specific OSD. This
+test writes a total size of ``TOTAL_DATA_BYTES`` (default: 1 GB) incrementally,
+in multiple write requests that each have a size of ``BYTES_PER_WRITE``
+(default: 4 MB). The test is not destructive and it will not overwrite existing
+live OSD data, but it might temporarily affect the performance of clients that
+are concurrently accessing the OSD. To launch this benchmark test, run the
+following command:
 
 .. prompt:: bash $
 
    ceph tell osd.N bench [TOTAL_DATA_BYTES] [BYTES_PER_WRITE]
 
-To clear an OSD's caches between benchmark runs, use the 'cache drop' command :
+To clear the caches of a specific OSD during the interval between one benchmark
+run and another, run the following command:
 
 .. prompt:: bash $
 
    ceph tell osd.N cache drop
 
-To get the cache statistics of an OSD, use the 'cache status' command :
+To retrieve the cache statistics of a specific OSD, run the following command:
 
 .. prompt:: bash $
 
@@ -461,7 +467,8 @@ To get the cache statistics of an OSD, use the 'cache status' command :
 MDS Subsystem
 =============
 
-Change configuration parameters on a running mds. :
+To change the configuration parameters of a running metadata server, run the
+following command:
 
 .. prompt:: bash $
 
@@ -473,19 +480,20 @@ Example:
 
    ceph tell mds.0 config set debug_ms 1
 
-Enables debug messages. :
+To enable debug messages, run the following command:
 
 .. prompt:: bash $
 
    ceph mds stat
 
-Displays the status of all metadata servers. :
+To display the status of all metadata servers, run the following command:
 
 .. prompt:: bash $
 
    ceph mds fail 0
 
-Marks the active MDS as failed, triggering failover to a standby if present.
+To mark the active metadata server as failed (and to trigger failover to a
+standby if a standby is present), run the following command:
 
 .. todo:: ``ceph mds`` subcommands missing docs: set, dump, getmap, stop, setmap
 
@@ -493,157 +501,165 @@ Marks the active MDS as failed, triggering failover to a standby if present.
 Mon Subsystem
 =============
 
-Show monitor stats:
+To display monitor statistics, run the following command:
 
 .. prompt:: bash $
 
    ceph mon stat
 
-::
+This command returns output similar to the following:
 
-       e2: 3 mons at {a=127.0.0.1:40000/0,b=127.0.0.1:40001/0,c=127.0.0.1:40002/0}, election epoch 6, quorum 0,1,2 a,b,c
+::
 
+    e2: 3 mons at {a=127.0.0.1:40000/0,b=127.0.0.1:40001/0,c=127.0.0.1:40002/0}, election epoch 6, quorum 0,1,2 a,b,c
 
-The ``quorum`` list at the end lists monitor nodes that are part of the current quorum.
+There is a ``quorum`` list at the end of the output. It lists those monitor
+nodes that are part of the current quorum.
 
-This is also available more directly:
+To retrieve this information in a more direct way, run the following command:
 
 .. prompt:: bash $
 
    ceph quorum_status -f json-pretty
-       
-.. code-block:: javascript     
-
-       {
-           "election_epoch": 6,
-           "quorum": [
-               0,
-               1,
-               2
-           ],
-           "quorum_names": [
-               "a",
-               "b",
-               "c"
-           ],
-           "quorum_leader_name": "a",
-           "monmap": {
-               "epoch": 2,
-               "fsid": "ba807e74-b64f-4b72-b43f-597dfe60ddbc",
-               "modified": "2016-12-26 14:42:09.288066",
-               "created": "2016-12-26 14:42:03.573585",
-               "features": {
-                   "persistent": [
-                       "kraken"
-                   ],
-                   "optional": []
-               },
-               "mons": [
-                   {
-                       "rank": 0,
-                       "name": "a",
-                       "addr": "127.0.0.1:40000\/0",
-                       "public_addr": "127.0.0.1:40000\/0"
-                   },
-                   {
-                       "rank": 1,
-                       "name": "b",
-                       "addr": "127.0.0.1:40001\/0",
-                       "public_addr": "127.0.0.1:40001\/0"
-                   },
-                   {
-                       "rank": 2,
-                       "name": "c",
-                       "addr": "127.0.0.1:40002\/0",
-                       "public_addr": "127.0.0.1:40002\/0"
-                   }
-               ]
-           }
-       }
-         
+
+This command returns output similar to the following:
+
+.. code-block:: javascript    
+
+    {
+        "election_epoch": 6,
+        "quorum": [
+        0,
+        1,
+        2
+        ],
+        "quorum_names": [
+        "a",
+        "b",
+        "c"
+        ],
+        "quorum_leader_name": "a",
+        "monmap": {
+        "epoch": 2,
+        "fsid": "ba807e74-b64f-4b72-b43f-597dfe60ddbc",
+        "modified": "2016-12-26 14:42:09.288066",
+        "created": "2016-12-26 14:42:03.573585",
+        "features": {
+            "persistent": [
+            "kraken"
+            ],
+            "optional": []
+        },
+        "mons": [
+            {
+            "rank": 0,
+            "name": "a",
+            "addr": "127.0.0.1:40000\/0",
+            "public_addr": "127.0.0.1:40000\/0"
+            },
+            {
+            "rank": 1,
+            "name": "b",
+            "addr": "127.0.0.1:40001\/0",
+            "public_addr": "127.0.0.1:40001\/0"
+            },
+            {
+            "rank": 2,
+            "name": "c",
+            "addr": "127.0.0.1:40002\/0",
+            "public_addr": "127.0.0.1:40002\/0"
+            }
+        ]
+        }
+    }
+      
 
 The above will block until a quorum is reached.
 
-For a status of just a single monitor:
+To see the status of a specific monitor, run the following command:
 
 .. prompt:: bash $
 
    ceph tell mon.[name] mon_status
-       
-where the value of ``[name]`` can be taken from ``ceph quorum_status``. Sample
-output::
-       
-       {
-           "name": "b",
-           "rank": 1,
-           "state": "peon",
-           "election_epoch": 6,
-           "quorum": [
-               0,
-               1,
-               2
-           ],
-           "features": {
-               "required_con": "9025616074522624",
-               "required_mon": [
-                   "kraken"
-               ],
-               "quorum_con": "1152921504336314367",
-               "quorum_mon": [
-                   "kraken"
-               ]
-           },
-           "outside_quorum": [],
-           "extra_probe_peers": [],
-           "sync_provider": [],
-           "monmap": {
-               "epoch": 2,
-               "fsid": "ba807e74-b64f-4b72-b43f-597dfe60ddbc",
-               "modified": "2016-12-26 14:42:09.288066",
-               "created": "2016-12-26 14:42:03.573585",
-               "features": {
-                   "persistent": [
-                       "kraken"
-                   ],
-                   "optional": []
-               },
-               "mons": [
-                   {
-                       "rank": 0,
-                       "name": "a",
-                       "addr": "127.0.0.1:40000\/0",
-                       "public_addr": "127.0.0.1:40000\/0"
-                   },
-                   {
-                       "rank": 1,
-                       "name": "b",
-                       "addr": "127.0.0.1:40001\/0",
-                       "public_addr": "127.0.0.1:40001\/0"
-                   },
-                   {
-                       "rank": 2,
-                       "name": "c",
-                       "addr": "127.0.0.1:40002\/0",
-                       "public_addr": "127.0.0.1:40002\/0"
-                   }
-               ]
-           }
-       }
-
-A dump of the monitor state:
+
+Here the value of ``[name]`` can be found by consulting the output of the
+``ceph quorum_status`` command. This command returns output similar to the
+following:
+
+::
+
+    {
+        "name": "b",
+        "rank": 1,
+        "state": "peon",
+        "election_epoch": 6,
+        "quorum": [
+        0,
+        1,
+        2
+        ],
+        "features": {
+        "required_con": "9025616074522624",
+        "required_mon": [
+            "kraken"
+        ],
+        "quorum_con": "1152921504336314367",
+        "quorum_mon": [
+            "kraken"
+        ]
+        },
+        "outside_quorum": [],
+        "extra_probe_peers": [],
+        "sync_provider": [],
+        "monmap": {
+        "epoch": 2,
+        "fsid": "ba807e74-b64f-4b72-b43f-597dfe60ddbc",
+        "modified": "2016-12-26 14:42:09.288066",
+        "created": "2016-12-26 14:42:03.573585",
+        "features": {
+            "persistent": [
+            "kraken"
+            ],
+            "optional": []
+        },
+        "mons": [
+            {
+            "rank": 0,
+            "name": "a",
+            "addr": "127.0.0.1:40000\/0",
+            "public_addr": "127.0.0.1:40000\/0"
+            },
+            {
+            "rank": 1,
+            "name": "b",
+            "addr": "127.0.0.1:40001\/0",
+            "public_addr": "127.0.0.1:40001\/0"
+            },
+            {
+            "rank": 2,
+            "name": "c",
+            "addr": "127.0.0.1:40002\/0",
+            "public_addr": "127.0.0.1:40002\/0"
+            }
+        ]
+        }
+    }
+
+To see a dump of the monitor state, run the following command:
 
 .. prompt:: bash $
 
    ceph mon dump
 
-::
+This command returns output similar to the following:
 
-       dumped monmap epoch 2
-       epoch 2
-       fsid ba807e74-b64f-4b72-b43f-597dfe60ddbc
-       last_changed 2016-12-26 14:42:09.288066
-       created 2016-12-26 14:42:03.573585
-       0: 127.0.0.1:40000/0 mon.a
-       1: 127.0.0.1:40001/0 mon.b
-       2: 127.0.0.1:40002/0 mon.c
+::
 
+    dumped monmap epoch 2
+    epoch 2
+    fsid ba807e74-b64f-4b72-b43f-597dfe60ddbc
+    last_changed 2016-12-26 14:42:09.288066
+    created 2016-12-26 14:42:03.573585
+    0: 127.0.0.1:40000/0 mon.a
+    1: 127.0.0.1:40001/0 mon.b
+    2: 127.0.0.1:40002/0 mon.c
index 54ad63130cbc192994f6c49d97701f6d9a74ef2b..39151e6d4a766d0c15b85cf8a1d0d25e7f6d3e52 100644 (file)
@@ -1043,6 +1043,8 @@ operations are served from the primary OSD of each PG. For erasure-coded pools,
 however, the speed of read operations can be increased by enabling **fast
 read** (see :ref:`pool-settings`).
 
+.. _rados_ops_primary_affinity:
+
 Primary Affinity
 ----------------
 
index 45b071f8ad7f520d86adc6cc5083991f42ba69e8..947b34c1f0064c99267204e4a51d25d70587fa90 100644 (file)
@@ -110,6 +110,8 @@ To remove an erasure code profile::
 
 If the profile is referenced by a pool, the deletion will fail.
 
+.. warning:: Removing an erasure code profile using ``osd erasure-code-profile rm`` does not automatically delete the associated CRUSH rule associated with the erasure code profile. It is recommended to manually remove the associated CRUSH rule using ``ceph osd crush rule remove {rule-name}`` to avoid unexpected behavior.
+
 osd erasure-code-profile get
 ============================
 
index b97d4d64b1ffddec0777a0b8c677cbeaef2ab897..d5246560212e1621adb9bd60f7f016937048f160 100644 (file)
@@ -1226,8 +1226,8 @@ The health check will be silenced for a specific pool only if
 POOL_APP_NOT_ENABLED
 ____________________
 
-A pool exists that contains one or more objects, but the pool has not been
-tagged for use by a particular application.
+A pool exists but the pool has not been tagged for use by a particular
+application.
 
 To resolve this issue, tag the pool for use by an application. For
 example, if the pool is used by RBD, run the following command:
@@ -1406,6 +1406,31 @@ other performance issue with the OSDs.
 The exact size of the snapshot trim queue is reported by the ``snaptrimq_len``
 field of ``ceph pg ls -f json-detail``.
 
+Stretch Mode
+------------
+
+INCORRECT_NUM_BUCKETS_STRETCH_MODE
+__________________________________
+
+Stretch mode currently only support 2 dividing buckets with OSDs, this warning suggests
+that the number of dividing buckets is not equal to 2 after stretch mode is enabled.
+You can expect unpredictable failures and MON assertions until the condition is fixed.
+
+We encourage you to fix this by removing additional dividing buckets or bump the
+number of dividing buckets to 2.
+
+UNEVEN_WEIGHTS_STRETCH_MODE
+___________________________
+
+The 2 dividing buckets must have equal weights when stretch mode is enabled.
+This warning suggests that the 2 dividing buckets have uneven weights after
+stretch mode is enabled. This is not immediately fatal, however, you can expect
+Ceph to be confused when trying to process transitions between dividing buckets.
+
+We encourage you to fix this by making the weights even on both dividing buckets.
+This can be done by making sure the combined weight of the OSDs on each dividing
+bucket are the same.
+
 Miscellaneous
 -------------
 
index 2136918c724cf631ce789558d9ed9222a782b181..15525c1d35e30e5d01cc19ee109742fe359fef4b 100644 (file)
@@ -39,8 +39,9 @@ CRUSH algorithm.
        erasure-code
        cache-tiering
        placement-groups
-       balancer
        upmap
+        read-balancer
+        balancer
        crush-map
        crush-map-edits
        stretch-mode
index 8090c7e0a435432b3ae9f0804be351908e83f64c..b0a6767a1e4b42fca008dfb7190c9f0b6a187f54 100644 (file)
@@ -10,10 +10,11 @@ directly to specific OSDs. For this reason, tracking system faults
 requires finding the `placement group`_ (PG) and the underlying OSDs at the
 root of the problem.
 
-.. tip:: A fault in one part of the cluster might prevent you from accessing a 
-   particular object, but that doesn't mean that you are prevented from accessing other objects.
-   When you run into a fault, don't panic. Just follow the steps for monitoring
-   your OSDs and placement groups, and then begin troubleshooting.
+.. tip:: A fault in one part of the cluster might prevent you from accessing a
+   particular object, but that doesn't mean that you are prevented from
+   accessing other objects.  When you run into a fault, don't panic. Just
+   follow the steps for monitoring your OSDs and placement groups, and then
+   begin troubleshooting.
 
 Ceph is self-repairing. However, when problems persist, monitoring OSDs and
 placement groups will help you identify the problem.
@@ -22,17 +23,20 @@ placement groups will help you identify the problem.
 Monitoring OSDs
 ===============
 
-An OSD's status is as follows: it is either in the cluster (``in``) or out of the cluster
-(``out``); likewise, it is either up and running (``up``) or down and not
-running (``down``). If an OSD is ``up``, it can be either ``in`` the cluster
-(if so, you can read and write data) or ``out`` of the cluster. If the OSD was previously
-``in`` the cluster but was recently moved ``out`` of the cluster, Ceph will migrate its
-PGs to other OSDs. If an OSD is ``out`` of the cluster, CRUSH will                               
-not assign any PGs to that OSD. If an OSD is ``down``, it should also be
-``out``.
-
-.. note:: If an OSD is ``down`` and ``in``, then there is a problem and the cluster 
-   is not in a healthy state.
+An OSD is either *in* service (``in``) or *out* of service (``out``). An OSD is
+either running and reachable (``up``), or it is not running and not reachable
+(``down``). 
+
+If an OSD is ``up``, it may be either ``in`` service (clients can read and
+write data) or it is ``out`` of service. If the OSD was ``in`` but then due to
+a failure or a manual action was set to the ``out`` state, Ceph will migrate
+placement groups to the other OSDs to maintin the configured redundancy.  
+
+If an OSD is ``out`` of service, CRUSH will not assign placement groups to it.
+If an OSD is ``down``, it will also be ``out``.
+
+.. note:: If an OSD is ``down`` and ``in``, there is a problem and this
+   indicates that the cluster is not in a healthy state.
 
 .. ditaa::
 
index 2fd4907304dce3411f8f9783da0365f2789abec2..dda4a017715d83d76ec79f333c8438bde479ad61 100644 (file)
@@ -210,6 +210,11 @@ process. We recommend constraining each pool so that it belongs to only one
 root (that is, one OSD class) to silence the warning and ensure a successful
 scaling process.
 
+.. _managing_bulk_flagged_pools:
+
+Managing pools that are flagged with ``bulk``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 If a pool is flagged ``bulk``, then the autoscaler starts the pool with a full
 complement of PGs and then scales down the number of PGs only if the usage
 ratio across the pool is uneven.  However, if a pool is not flagged ``bulk``,
@@ -659,6 +664,7 @@ In releases of Ceph that are Nautilus and later (inclusive), when the
 ``pg_num``. This process manifests as periods of remapping of PGs and of
 backfill, and is expected behavior and normal.
 
+.. _rados_ops_pgs_get_pg_num:
 
 Get the Number of PGs
 =====================
index f53c60fe45f50c2b9b0ba1dc54d9b730ebbf1bea..dda9e844e9659ba59aa95e540a2a6fd4925ce74d 100644 (file)
@@ -46,12 +46,49 @@ operations. Do not create or manipulate pools with these names.
 List Pools
 ==========
 
-To list your cluster's pools, run the following command:
+There are multiple ways to get the list of pools in your cluster.
+
+To list just your cluster's pool names (good for scripting), execute:
+
+.. prompt:: bash $
+
+   ceph osd pool ls
+
+::
+
+   .rgw.root
+   default.rgw.log
+   default.rgw.control
+   default.rgw.meta
+
+To list your cluster's pools with the pool number, run the following command:
 
 .. prompt:: bash $
 
    ceph osd lspools
 
+::
+
+   1 .rgw.root
+   2 default.rgw.log
+   3 default.rgw.control
+   4 default.rgw.meta
+
+To list your cluster's pools with additional information, execute:
+
+.. prompt:: bash $
+
+   ceph osd pool ls detail
+
+::
+
+   pool 1 '.rgw.root' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 19 flags hashpspool stripe_width 0 application rgw read_balance_score 4.00
+   pool 2 'default.rgw.log' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 21 flags hashpspool stripe_width 0 application rgw read_balance_score 4.00
+   pool 3 'default.rgw.control' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 23 flags hashpspool stripe_width 0 application rgw read_balance_score 4.00
+   pool 4 'default.rgw.meta' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 25 flags hashpspool stripe_width 0 pg_autoscale_bias 4 application rgw read_balance_score 4.00
+
+To get even more information, you can execute this command with the ``--format`` (or ``-f``) option and the ``json``, ``json-pretty``, ``xml`` or ``xml-pretty`` value.
+
 .. _createpool:
 
 Creating a Pool
@@ -462,82 +499,6 @@ You may set values for the following keys:
    :Type: Integer
    :Valid Range: ``1`` sets flag, ``0`` unsets flag
 
-.. _hit_set_type:
-
-.. describe:: hit_set_type
-
-   :Description: Enables HitSet tracking for cache pools.
-                 For additional information, see `Bloom Filter`_.
-   :Type: String
-   :Valid Settings: ``bloom``, ``explicit_hash``, ``explicit_object``
-   :Default: ``bloom``. Other values are for testing.
-
-.. _hit_set_count:
-
-.. describe:: hit_set_count
-
-   :Description: Determines the number of HitSets to store for cache pools. The
-                 higher the value, the more RAM is consumed by the ``ceph-osd``
-                 daemon.
-   :Type: Integer
-   :Valid Range: ``1``. Agent doesn't handle > ``1`` yet.
-
-.. _hit_set_period:
-
-.. describe:: hit_set_period
-
-   :Description: Determines the duration of a HitSet period (in seconds) for
-                 cache pools. The higher the value, the more RAM is consumed
-                 by the ``ceph-osd`` daemon.
-   :Type: Integer
-   :Example: ``3600`` (3600 seconds: one hour)
-
-.. _hit_set_fpp:
-
-.. describe:: hit_set_fpp
-
-   :Description: Determines the probability of false positives for the
-                 ``bloom`` HitSet type. For additional information, see `Bloom
-                 Filter`_.
-   :Type: Double
-   :Valid Range: ``0.0`` - ``1.0``
-   :Default: ``0.05``
-
-.. _cache_target_dirty_ratio:
-
-.. describe:: cache_target_dirty_ratio
-
-   :Description: Sets a flush threshold for the percentage of the cache pool
-                 containing modified (dirty) objects. When this threshold is
-                 reached, the cache-tiering agent will flush these objects to
-                 the backing storage pool.
-   :Type: Double
-   :Default: ``.4``
-
-.. _cache_target_dirty_high_ratio:
-
-.. describe:: cache_target_dirty_high_ratio
-   
-   :Description: Sets a flush threshold for the percentage of the cache pool
-                 containing modified (dirty) objects. When this threshold is
-                 reached, the cache-tiering agent will flush these objects to
-                 the backing storage pool with a higher speed (as compared with
-                 ``cache_target_dirty_ratio``).
-   :Type: Double
-   :Default: ``.6``
-
-.. _cache_target_full_ratio:
-
-.. describe:: cache_target_full_ratio
-   
-   :Description: Sets an eviction threshold for the percentage of the cache
-                 pool containing unmodified (clean) objects. When this
-                 threshold is reached, the cache-tiering agent will evict 
-                 these objects from the cache pool.
-
-   :Type: Double
-   :Default: ``.8``
-
 .. _target_max_bytes:
 
 .. describe:: target_max_bytes
@@ -556,41 +517,6 @@ You may set values for the following keys:
    :Type: Integer
    :Example: ``1000000`` #1M objects
 
-
-.. describe:: hit_set_grade_decay_rate
-   
-   :Description: Sets the temperature decay rate between two successive 
-                 HitSets.
-   :Type: Integer
-   :Valid Range: 0 - 100
-   :Default: ``20``
-
-.. describe:: hit_set_search_last_n
-   
-   :Description: Count at most N appearances in HitSets. Used for temperature 
-                 calculation.
-   :Type: Integer
-   :Valid Range: 0 - hit_set_count
-   :Default: ``1``
-
-.. _cache_min_flush_age:
-
-.. describe:: cache_min_flush_age
-   
-   :Description: Sets the time (in seconds) before the cache-tiering agent
-                 flushes an object from the cache pool to the storage pool.
-   :Type: Integer
-   :Example: ``600`` (600 seconds: ten minutes)
-
-.. _cache_min_evict_age:
-
-.. describe:: cache_min_evict_age
-   
-   :Description: Sets the time (in seconds) before the cache-tiering agent
-                 evicts an object from the cache pool.
-   :Type: Integer
-   :Example: ``1800`` (1800 seconds: thirty minutes)
-
 .. _fast_read:
 
 .. describe:: fast_read
@@ -702,56 +628,6 @@ You may get values from the following keys:
 :Description: See crush_rule_.
 
 
-``hit_set_type``
-
-:Description: See hit_set_type_.
-
-:Type: String
-:Valid Settings: ``bloom``, ``explicit_hash``, ``explicit_object``
-
-
-``hit_set_count``
-
-:Description: See hit_set_count_.
-
-:Type: Integer
-
-
-``hit_set_period``
-
-:Description: See hit_set_period_.
-
-:Type: Integer
-
-
-``hit_set_fpp``
-
-:Description: See hit_set_fpp_.
-
-:Type: Double
-
-
-``cache_target_dirty_ratio``
-
-:Description: See cache_target_dirty_ratio_.
-
-:Type: Double
-
-
-``cache_target_dirty_high_ratio``
-
-:Description: See cache_target_dirty_high_ratio_.
-
-:Type: Double
-
-
-``cache_target_full_ratio``
-
-:Description: See cache_target_full_ratio_.
-
-:Type: Double
-
-
 ``target_max_bytes``
 
 :Description: See target_max_bytes_.
@@ -766,20 +642,6 @@ You may get values from the following keys:
 :Type: Integer
 
 
-``cache_min_flush_age``
-
-:Description: See cache_min_flush_age_.
-
-:Type: Integer
-
-
-``cache_min_evict_age``
-
-:Description: See cache_min_evict_age_.
-
-:Type: Integer
-
-
 ``fast_read``
 
 :Description: See fast_read_.
@@ -876,6 +738,10 @@ Ceph will list pools and highlight the ``replicated size`` attribute.  By
 default, Ceph creates two replicas of an object (a total of three copies, for a
 size of ``3``).
 
+Managing pools that are flagged with ``--bulk``
+===============================================
+See :ref:`managing_bulk_flagged_pools`.
+
 
 .. _pgcalc: https://old.ceph.com/pgcalc/
 .. _Pool, PG and CRUSH Config Reference: ../../configuration/pool-pg-config-ref
diff --git a/ceph/doc/rados/operations/read-balancer.rst b/ceph/doc/rados/operations/read-balancer.rst
new file mode 100644 (file)
index 0000000..0833e43
--- /dev/null
@@ -0,0 +1,64 @@
+.. _read_balancer:
+
+=======================================
+Operating the Read (Primary) Balancer
+=======================================
+
+You might be wondering: How can I improve performance in my Ceph cluster?
+One important data point you can check is the ``read_balance_score`` on each
+of your replicated pools.
+
+This metric, available via ``ceph osd pool ls detail`` (see :ref:`rados_pools`
+for more details) indicates read performance, or how balanced the primaries are
+for each replicated pool. In most cases, if a ``read_balance_score`` is above 1
+(for instance, 1.5), this means that your pool has unbalanced primaries and that
+you may want to try improving your read performance with the read balancer.
+
+Online Optimization
+===================
+
+At present, there is no online option for the read balancer. However, we plan to add
+the read balancer as an option to the :ref:`balancer` in the next Ceph version
+so it can be enabled to run automatically in the background like the upmap balancer.
+
+Offline Optimization
+====================
+
+Primaries are updated with an offline optimizer that is built into the
+:ref:`osdmaptool`.
+
+#. Grab the latest copy of your osdmap:
+
+   .. prompt:: bash $
+
+      ceph osd getmap -o om
+
+#. Run the optimizer:
+
+   .. prompt:: bash $
+
+      osdmaptool om --read out.txt --read-pool <pool name> [--vstart] 
+
+   It is highly recommended that you run the capacity balancer before running the
+   balancer to ensure optimal results. See :ref:`upmap` for details on how to balance
+   capacity in a cluster.
+
+#. Apply the changes:
+
+   .. prompt:: bash $
+
+      source out.txt
+
+   In the above example, the proposed changes are written to the output file
+   ``out.txt``. The commands in this procedure are normal Ceph CLI commands
+   that can be run in order to apply the changes to the cluster.
+
+   If you are working in a vstart cluster, you may pass the ``--vstart`` parameter
+   as shown above so the CLI commands are formatted with the `./bin/` prefix.
+
+   Note that any time the number of pgs changes (for instance, if the pg autoscaler [:ref:`pg-autoscaler`]
+   kicks in), you should consider rechecking the scores and rerunning the balancer if needed.
+
+To see some details about what the tool is doing, you can pass
+``--debug-osd 10`` to ``osdmaptool``. To see even more details, pass
+``--debug-osd 20`` to ``osdmaptool``.
index 8cce1cf8ef994d6debc4c17591de079bec10c7a1..8541680d87503f01c3c2f9aa160a5aa204c106a3 100644 (file)
@@ -1,7 +1,8 @@
 .. _upmap:
 
+=======================================
 Using pg-upmap
-==============
+=======================================
 
 In Luminous v12.2.z and later releases, there is a *pg-upmap* exception table
 in the OSDMap that allows the cluster to explicitly map specific PGs to
@@ -11,6 +12,9 @@ in most cases, uniformly distribute PGs across OSDs.
 However, there is an important caveat when it comes to this new feature: it
 requires all clients to understand the new *pg-upmap* structure in the OSDMap.
 
+Online Optimization
+===================
+
 Enabling
 --------
 
@@ -40,17 +44,17 @@ command:
 
    ceph features
 
-Balancer module
+Balancer Module
 ---------------
 
 The `balancer` module for ``ceph-mgr`` will automatically balance the number of
 PGs per OSD. See :ref:`balancer`
 
-Offline optimization
---------------------
+Offline Optimization
+====================
 
-Upmap entries are updated with an offline optimizer that is built into
-``osdmaptool``.
+Upmap entries are updated with an offline optimizer that is built into the
+:ref:`osdmaptool`.
 
 #. Grab the latest copy of your osdmap:
 
index f816584ae2764af5544a7f630a6ea8ae4fab0b57..c0d7be10c1b9800d5c57d8eb39ea49360807263f 100644 (file)
@@ -2,12 +2,18 @@
  The Ceph Community
 ====================
 
+Ceph-users email list
+=====================
+
 The Ceph community is an excellent source of information and help. For
-operational issues with Ceph releases we recommend you `subscribe to the
-ceph-users email list`_. When you no longer want to receive emails, you can
-`unsubscribe from the ceph-users email list`_.
+operational issues with Ceph we recommend that you `subscribe to the ceph-users
+email list`_. When you no longer want to receive emails, you can `unsubscribe
+from the ceph-users email list`_.
+
+Ceph-devel email list
+=====================
 
-You may also `subscribe to the ceph-devel email list`_. You should do so if
+You can also `subscribe to the ceph-devel email list`_. You should do so if
 your issue is:
 
 - Likely related to a bug
@@ -16,11 +22,14 @@ your issue is:
 - Related to your own builds
 
 If you no longer want to receive emails from the ``ceph-devel`` email list, you
-may `unsubscribe from the ceph-devel email list`_.
+can `unsubscribe from the ceph-devel email list`_.
+
+Ceph report
+===========
 
-.. tip:: The Ceph community is growing rapidly, and community members can help
-   you if you provide them with detailed information about your problem. You
-   can attach the output of the ``ceph report`` command to help people understand your issues.
+.. tip:: Community members can help you if you provide them with detailed
+   information about your problem. Attach the output of the ``ceph report``
+   command to help people understand your issues.
 
 .. _subscribe to the ceph-devel email list: mailto:dev-join@ceph.io
 .. _unsubscribe from the ceph-devel email list: mailto:dev-leave@ceph.io
index 159f7998dcb99a241138bcadab48abac3a147d3b..b7fdd1d41b31c096ef7286354ca100acd037598e 100644 (file)
@@ -9,59 +9,72 @@ you can profile Ceph's CPU usage. See `Installing Oprofile`_ for details.
 Initializing oprofile
 =====================
 
-The first time you use ``oprofile`` you need to initialize it. Locate the
-``vmlinux`` image corresponding to the kernel you are now running. :: 
+``oprofile`` must be initalized the first time it is used. Locate the
+``vmlinux`` image that corresponds to the kernel you are running:
 
-       ls /boot
-       sudo opcontrol --init
-       sudo opcontrol --setup --vmlinux={path-to-image} --separate=library --callgraph=6
+.. prompt:: bash $
+
+   ls /boot
+   sudo opcontrol --init
+   sudo opcontrol --setup --vmlinux={path-to-image} --separate=library --callgraph=6
 
 
 Starting oprofile
 =================
 
-To start ``oprofile`` execute the following command:
+Run the following command to start ``oprofile``
 
-       opcontrol --start
+.. prompt:: bash $
 
-Once you start ``oprofile``, you may run some tests with Ceph. 
+   opcontrol --start
 
 
 Stopping oprofile
 =================
 
-To stop ``oprofile`` execute the following command:: 
+Run the following command to stop ``oprofile``: 
+
+.. prompt:: bash $
 
-       opcontrol --stop
-       
-       
+   opcontrol --stop
+    
+    
 Retrieving oprofile Results
 ===========================
 
-To retrieve the top ``cmon`` results, execute the following command:: 
+Run the following command to retrieve the top ``cmon`` results: 
+
+.. prompt:: bash $
+
+   opreport -gal ./cmon | less    
+    
 
-       opreport -gal ./cmon | less     
-       
+Run the following command to retrieve the top ``cmon`` results, with call
+graphs attached: 
 
-To retrieve the top ``cmon`` results with call graphs attached, execute the
-following command:: 
+.. prompt:: bash $
 
-       opreport -cal ./cmon | less     
-       
-.. important:: After reviewing results, you should reset ``oprofile`` before
-   running it again. Resetting ``oprofile`` removes data from the session 
-   directory.
+   opreport -cal ./cmon | less    
+    
+.. important:: After you have reviewed the results, reset ``oprofile`` before
+   running it again. The act of resetting ``oprofile`` removes data from the
+   session directory.
 
 
 Resetting oprofile
 ==================
 
-To reset ``oprofile``, execute the following command:: 
+Run the following command to reset ``oprofile``:  
 
-       sudo opcontrol --reset   
+.. prompt:: bash $
+
+   sudo opcontrol --reset   
    
-.. important:: You should reset ``oprofile`` after analyzing data so that 
-   you do not commingle results from different tests.
+.. important:: Reset ``oprofile`` after analyzing data. This ensures that 
+   results from prior tests do not get mixed in with the results of the current
+   test. 
 
 .. _oprofile: http://oprofile.sourceforge.net/about/
 .. _Installing Oprofile: ../../../dev/cpu-profiler
+
+
index 80d14f3cedeacb0ecae81b5c46b7fec6f020c350..b481ee1dc9cba6b93a08e90c3a2a81480d9cfa3f 100644 (file)
@@ -2,10 +2,10 @@
  Troubleshooting
 =================
 
-Ceph is still on the leading edge, so you may encounter situations that require 
-you to examine your configuration, modify your logging output, troubleshoot
-monitors and OSDs, profile memory and CPU usage, and reach out to the 
-Ceph community for help.
+You may encounter situations that require you to examine your configuration,
+consult the documentation, modify your logging output, troubleshoot monitors
+and OSDs, profile memory and CPU usage, and, in the last resort, reach out to
+the Ceph community for help.
 
 .. toctree::
    :maxdepth: 1
index 85146653b4a304fb855d30f68ac06db9a7f71d4a..8e58f2d76fbbd4521bb06261dbe8cae0bde464b3 100644 (file)
@@ -2,16 +2,23 @@
  Memory Profiling
 ==================
 
-Ceph MON, OSD and MDS can generate heap profiles using
-``tcmalloc``. To generate heap profiles, ensure you have
-``google-perftools`` installed::
+Ceph Monitor, OSD, and MDS can report ``TCMalloc`` heap profiles. Install
+``google-perftools`` if you want to generate these. Your OS distribution might
+package this under a different name (for example, ``gperftools``), and your OS
+distribution might use a different package manager. Run a command similar to
+this one to install ``google-perftools``: 
 
-       sudo apt-get install google-perftools
+.. prompt:: bash 
 
-The profiler dumps output to your ``log file`` directory (i.e.,
-``/var/log/ceph``). See `Logging and Debugging`_ for details.
-To view the profiler logs with Google's performance tools, execute the
-following:: 
+    sudo apt-get install google-perftools
+
+The profiler dumps output to your ``log file`` directory (``/var/log/ceph``).
+See `Logging and Debugging`_ for details.
+
+To view the profiler logs with Google's performance tools, run the following
+command:
+
+.. prompt:: bash
 
     google-pprof --text {path-to-daemon}  {log-path/filename}
 
@@ -48,9 +55,9 @@ For example::
      0.0   0.4%  99.2%      0.0   0.6% decode_message
      ...
 
-Another heap dump on the same daemon will add another file. It is
-convenient to compare to a previous heap dump to show what has grown
-in the interval. For instance::
+Performing another heap dump on the same daemon creates another file. It is
+convenient to compare the new file to a file created by a previous heap dump to
+show what has grown in the interval. For example::
 
     $ google-pprof --text --base out/osd.0.profile.0001.heap \
           ceph-osd out/osd.0.profile.0003.heap
@@ -60,112 +67,137 @@ in the interval. For instance::
      0.0   0.9%  97.7%      0.0  26.1% ReplicatedPG::do_op
      0.0   0.8%  98.5%      0.0   0.8% __gnu_cxx::new_allocator::allocate
 
-Refer to `Google Heap Profiler`_ for additional details.
+See `Google Heap Profiler`_ for additional details.
+
+After you have installed the heap profiler, start your cluster and begin using
+the heap profiler. You can enable or disable the heap profiler at runtime, or
+ensure that it runs continuously. When running commands based on the examples
+that follow, do the following:
 
-Once you have the heap profiler installed, start your cluster and
-begin using the heap profiler. You may enable or disable the heap
-profiler at runtime, or ensure that it runs continuously. For the
-following commandline usage, replace ``{daemon-type}`` with ``mon``,
-``osd`` or ``mds``, and replace ``{daemon-id}`` with the OSD number or
-the MON or MDS id.
+#. replace ``{daemon-type}`` with ``mon``, ``osd`` or ``mds`` 
+#. replace ``{daemon-id}`` with the OSD number or the MON ID or the MDS ID 
 
 
 Starting the Profiler
 ---------------------
 
-To start the heap profiler, execute the following:
+To start the heap profiler, run a command of the following form
 
-       ceph tell {daemon-type}.{daemon-id} heap start_profiler
+.. prompt:: bash
 
-For example:: 
+   ceph tell {daemon-type}.{daemon-id} heap start_profiler
 
-       ceph tell osd.1 heap start_profiler
+For example:
 
-Alternatively the profile can be started when the daemon starts
-running if the ``CEPH_HEAP_PROFILER_INIT=true`` variable is found in
-the environment.
+.. prompt:: bash
+
+   ceph tell osd.1 heap start_profiler
+
+Alternatively, if the ``CEPH_HEAP_PROFILER_INIT=true`` variable is found in the
+environment, the profile will be started when the daemon starts running.
 
 Printing Stats
 --------------
 
-To print out statistics, execute the following:: 
+To print out statistics, run a command of the following form:
+
+.. prompt:: bash
+
+   ceph  tell {daemon-type}.{daemon-id} heap stats
 
-       ceph  tell {daemon-type}.{daemon-id} heap stats
+For example:
 
-For example:: 
+.. prompt:: bash
 
-       ceph tell osd.0 heap stats
+   ceph tell osd.0 heap stats
 
-.. note:: Printing stats does not require the profiler to be running and does
-   not dump the heap allocation information to a file.
+.. note:: The reporting of stats with this command does not require the
+   profiler to be running and does not dump the heap allocation information to
+   a file.
 
 
 Dumping Heap Information
 ------------------------
 
-To dump heap information, execute the following:: 
+To dump heap information, run a command of the following form:
 
-       ceph tell {daemon-type}.{daemon-id} heap dump
+.. prompt:: bash
 
-For example:: 
+   ceph tell {daemon-type}.{daemon-id} heap dump
 
-       ceph tell mds.a heap dump
+For example:
 
-.. note:: Dumping heap information only works when the profiler is running.
+.. prompt:: bash
+
+   ceph tell mds.a heap dump
+
+.. note:: Dumping heap information works only when the profiler is running.
 
 
 Releasing Memory
 ----------------
 
-To release memory that ``tcmalloc`` has allocated but which is not being used by
-the Ceph daemon itself, execute the following:: 
+To release memory that ``tcmalloc`` has allocated but which is not being used
+by the Ceph daemon itself, run a command of the following form:
+
+.. prompt:: bash
+
+   ceph tell {daemon-type}{daemon-id} heap release
 
-       ceph tell {daemon-type}{daemon-id} heap release
+For example:
 
-For example:: 
+.. prompt:: bash
 
-       ceph tell osd.2 heap release
+    ceph tell osd.2 heap release
 
 
 Stopping the Profiler
 ---------------------
 
-To stop the heap profiler, execute the following:: 
+To stop the heap profiler, run a command of the following form:
 
-       ceph tell {daemon-type}.{daemon-id} heap stop_profiler
+.. prompt:: bash
 
-For example:: 
+   ceph tell {daemon-type}.{daemon-id} heap stop_profiler
 
-       ceph tell osd.0 heap stop_profiler
+For example:
+
+.. prompt:: bash
+
+   ceph tell osd.0 heap stop_profiler
 
 .. _Logging and Debugging: ../log-and-debug
 .. _Google Heap Profiler: http://goog-perftools.sourceforge.net/doc/heap_profiler.html
 
-Alternative ways for memory profiling
--------------------------------------
+Alternative Methods of  Memory Profiling
+----------------------------------------
 
 Running Massif heap profiler with Valgrind
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-The Massif heap profiler tool can be used with Valgrind to
-measure how much heap memory is used and is good for
-troubleshooting for example Ceph RadosGW.
+The Massif heap profiler tool can be used with Valgrind to measure how much
+heap memory is used. This method is well-suited to troubleshooting RadosGW.
+
+See the `Massif documentation
+<https://valgrind.org/docs/manual/ms-manual.html>`_ for more information.
+
+Install Valgrind from the package manager for your distribution then start the
+Ceph daemon you want to troubleshoot:
 
-See the `Massif documentation <https://valgrind.org/docs/manual/ms-manual.html>`_ for
-more information.
+.. prompt:: bash
 
-Install Valgrind from the package manager for your distribution
-then start the Ceph daemon you want to troubleshoot::
+   sudo -u ceph valgrind --max-threads=1024 --tool=massif /usr/bin/radosgw -f --cluster ceph --name NAME --setuser ceph --setgroup ceph
 
-        sudo -u ceph valgrind --max-threads=1024 --tool=massif /usr/bin/radosgw -f --cluster ceph --name NAME --setuser ceph --setgroup ceph
+When this command has completed its run, a file with a name of the form
+``massif.out.<pid>`` will be saved in your current working directory. To run
+the command above, the user who runs it must have write permissions in the
+current directory.
 
-A file similar to ``massif.out.<pid>`` will be saved when it exits
-in your current working directory. The user running the process above
-must have write permissions in the current directory.
+Run the ``ms_print`` command to get a graph and statistics from the collected
+data in the ``massif.out.<pid>`` file:
 
-You can then run the ``ms_print`` command to get a graph and statistics
-from the collected data in the ``massif.out.<pid>`` file::
+.. prompt:: bash
 
-        ms_print massif.out.12345
+   ms_print massif.out.12345
 
-This output is great for inclusion in a bug report.
+The output of this command is helpful when submitting a bug report.
index a95b49058cde27e765af607aab79c1721fbcf225..1170da7c33f690363aa29d412bfe479cef08122f 100644 (file)
@@ -6,70 +6,78 @@
 
 .. index:: monitor, high availability
 
-If a cluster encounters monitor-related problems, this does not necessarily
-mean that the cluster is in danger of going down. Even if multiple monitors are
-lost, the cluster can still be up and running, as long as there are enough
-surviving monitors to form a quorum.
-
-However serious your cluster's monitor-related problems might be, we recommend
-that you take the following troubleshooting steps.
-
+Even if a cluster experiences monitor-related problems, the cluster is not
+necessarily in danger of going down. If a cluster has lost multiple monitors,
+it can still remain up and running as long as there are enough surviving
+monitors to form a quorum.
+   
+If your cluster is having monitor-related problems, we recommend that you
+consult the following troubleshooting information.
 
 Initial Troubleshooting
 =======================
 
-**Are the monitors running?**
-
-  First, make sure that the monitor (*mon*) daemon processes (``ceph-mon``) are
-  running. Sometimes Ceph admins either forget to start the mons or forget to
-  restart the mons after an upgrade. Checking for this simple oversight can
-  save hours of painstaking troubleshooting. It is also important to make sure
-  that the manager daemons (``ceph-mgr``) are running. Remember that typical
-  cluster configurations provide one ``ceph-mgr`` for each ``ceph-mon``.
-
-  .. note:: Rook will not run more than two managers.
-
-**Can you reach the monitor nodes?**
-
-  In certain rare cases, there may be ``iptables`` rules that block access to
-  monitor nodes or TCP ports. These rules might be left over from earlier
-  stress testing or rule development. To check for the presence of such rules,
-  SSH into the server and then try to connect to the monitor's ports
-  (``tcp/3300`` and ``tcp/6789``) using ``telnet``, ``nc``, or a similar tool.
-
-**Does the ``ceph status`` command run and receive a reply from the cluster?**
-
-  If the ``ceph status`` command does receive a reply from the cluster, then the
-  cluster is up and running. The monitors will answer to a ``status`` request
-  only if there is a formed quorum. Confirm that one or more ``mgr`` daemons
-  are reported as running. Under ideal conditions, all ``mgr`` daemons will be
-  reported as running.
-
-
-  If the ``ceph status`` command does not receive a reply from the cluster, then
-  there are probably not enough monitors ``up`` to form a quorum.  The ``ceph
-  -s`` command with no further options specified connects to an arbitrarily
-  selected monitor. In certain cases, however, it might be helpful to connect
-  to a specific monitor (or to several specific monitors in sequence) by adding
-  the ``-m`` flag to the command: for example, ``ceph status -m mymon1``.
-
+The first steps in the process of troubleshooting Ceph Monitors involve making
+sure that the Monitors are running and that they are able to communicate with
+the network and on the network. Follow the steps in this section to rule out
+the simplest causes of Monitor malfunction.
 
-**None of this worked. What now?**
+#. **Make sure that the Monitors are running.**
 
-  If the above solutions have not resolved your problems, you might find it
-  helpful to examine each individual monitor in turn. Whether or not a quorum
-  has been formed, it is possible to contact each monitor individually and
-  request its status by using the ``ceph tell mon.ID mon_status`` command (here
-  ``ID`` is the monitor's identifier).
-
-  Run the ``ceph tell mon.ID mon_status`` command for each monitor in the
-  cluster. For more on this command's output, see :ref:`Understanding
-  mon_status
-  <rados_troubleshoting_troubleshooting_mon_understanding_mon_status>`.
-
-  There is also an alternative method: SSH into each monitor node and query the
-  daemon's admin socket. See :ref:`Using the Monitor's Admin
-  Socket<rados_troubleshoting_troubleshooting_mon_using_admin_socket>`.
+    Make sure that the Monitor (*mon*) daemon processes (``ceph-mon``) are
+    running. It might be the case that the mons have not be restarted after an
+    upgrade. Checking for this simple oversight can save hours of painstaking
+    troubleshooting. 
+    
+    It is also important to make sure that the manager daemons (``ceph-mgr``)
+    are running. Remember that typical cluster configurations provide one
+    Manager (``ceph-mgr``) for each Monitor (``ceph-mon``).
+
+    .. note:: In releases prior to v1.12.5, Rook will not run more than two
+       managers.
+
+#. **Make sure that you can reach the Monitor nodes.**
+
+    In certain rare cases, ``iptables`` rules might be blocking access to
+    Monitor nodes or TCP ports. These rules might be left over from earlier
+    stress testing or rule development. To check for the presence of such
+    rules, SSH into each Monitor node and use ``telnet`` or ``nc`` or a similar
+    tool to attempt to connect to each of the other Monitor nodes on ports
+    ``tcp/3300`` and ``tcp/6789``. 
+
+#. **Make sure that the "ceph status" command runs and receives a reply from the cluster.**
+
+    If the ``ceph status`` command receives a reply from the cluster, then the
+    cluster is up and running. Monitors answer to a ``status`` request only if
+    there is a formed quorum. Confirm that one or more ``mgr`` daemons are
+    reported as running. In a cluster with no deficiencies, ``ceph status``
+    will report that all ``mgr`` daemons are running.
+
+    If the ``ceph status`` command does not receive a reply from the cluster,
+    then there are probably not enough Monitors ``up`` to form a quorum. If the
+    ``ceph -s`` command is run with no further options specified, it connects
+    to an arbitrarily selected Monitor. In certain cases, however, it might be
+    helpful to connect to a specific Monitor (or to several specific Monitors
+    in sequence) by adding the ``-m`` flag to the command: for example, ``ceph
+    status -m mymon1``.
+
+#. **None of this worked. What now?**
+
+    If the above solutions have not resolved your problems, you might find it
+    helpful to examine each individual Monitor in turn. Even if no quorum has
+    been formed, it is possible to contact each Monitor individually and
+    request its status by using the ``ceph tell mon.ID mon_status`` command
+    (here ``ID`` is the Monitor's identifier).
+
+    Run the ``ceph tell mon.ID mon_status`` command for each Monitor in the
+    cluster. For more on this command's output, see :ref:`Understanding
+    mon_status
+    <rados_troubleshoting_troubleshooting_mon_understanding_mon_status>`.
+
+    There is also an alternative method for contacting each individual Monitor:
+    SSH into each Monitor node and query the daemon's admin socket. See
+    :ref:`Using the Monitor's Admin
+    Socket<rados_troubleshoting_troubleshooting_mon_using_admin_socket>`.
 
 .. _rados_troubleshoting_troubleshooting_mon_using_admin_socket:
 
@@ -175,106 +183,136 @@ the quorum is formed by only two monitors, and *c* is in the quorum as a
   ``IP:PORT`` combination, the **lower** the rank. In this case, because
   ``127.0.0.1:6789`` is lower than the other two ``IP:PORT`` combinations,
   ``mon.a`` has the highest rank: namely, rank 0.
-
+  
 
 Most Common Monitor Issues
 ===========================
 
-Have Quorum but at least one Monitor is down
----------------------------------------------
+The Cluster Has Quorum but at Least One Monitor is Down
+-------------------------------------------------------
 
-When this happens, depending on the version of Ceph you are running,
-you should be seeing something similar to::
+When the cluster has quorum but at least one monitor is down, ``ceph health
+detail`` returns a message similar to the following::
 
       $ ceph health detail
       [snip]
       mon.a (rank 0) addr 127.0.0.1:6789/0 is down (out of quorum)
 
-How to troubleshoot this?
+**How do I troubleshoot a Ceph cluster that has quorum but also has at least one monitor down?**
 
-  First, make sure ``mon.a`` is running.
+  #. Make sure that ``mon.a`` is running.
 
-  Second, make sure you are able to connect to ``mon.a``'s node from the
-  other mon nodes. Check the TCP ports as well. Check ``iptables`` and
-  ``nf_conntrack`` on all nodes and ensure that you are not
-  dropping/rejecting connections.
+  #. Make sure that you can connect to ``mon.a``'s node from the
+     other Monitor nodes. Check the TCP ports as well. Check ``iptables`` and
+     ``nf_conntrack`` on all nodes and make sure that you are not
+     dropping/rejecting connections.
 
-  If this initial troubleshooting doesn't solve your problems, then it's
-  time to go deeper.
+  If this initial troubleshooting doesn't solve your problem, then further
+  investigation is necessary.
 
   First, check the problematic monitor's ``mon_status`` via the admin
   socket as explained in `Using the monitor's admin socket`_ and
   `Understanding mon_status`_.
 
-  If the monitor is out of the quorum, its state should be one of ``probing``,
-  ``electing`` or ``synchronizing``. If it happens to be either ``leader`` or
-  ``peon``, then the monitor believes to be in quorum, while the remaining
-  cluster is sure it is not; or maybe it got into the quorum while we were
-  troubleshooting the monitor, so check you ``ceph status`` again just to make
-  sure. Proceed if the monitor is not yet in the quorum.
-
-What if the state is ``probing``?
-
-  This means the monitor is still looking for the other monitors. Every time
-  you start a monitor, the monitor will stay in this state for some time while
-  trying to connect the rest of the monitors specified in the ``monmap``.  The
-  time a monitor will spend in this state can vary. For instance, when on a
-  single-monitor cluster (never do this in production), the monitor will pass
-  through the probing state almost instantaneously.  In a multi-monitor
-  cluster, the monitors will stay in this state until they find enough monitors
-  to form a quorum |---| this means that if you have 2 out of 3 monitors down, the
-  one remaining monitor will stay in this state indefinitely until you bring
-  one of the other monitors up.
-
-  If you have a quorum the starting daemon should be able to find the
-  other monitors quickly, as long as they can be reached. If your
-  monitor is stuck probing and you have gone through with all the communication
-  troubleshooting, then there is a fair chance that the monitor is trying
-  to reach the other monitors on a wrong address. ``mon_status`` outputs the
-  ``monmap`` known to the monitor: check if the other monitor's locations
-  match reality. If they don't, jump to
-  `Recovering a Monitor's Broken monmap`_; if they do, then it may be related
-  to severe clock skews amongst the monitor nodes and you should refer to
-  `Clock Skews`_ first, but if that doesn't solve your problem then it is
-  the time to prepare some logs and reach out to the community (please refer
-  to `Preparing your logs`_ on how to best prepare your logs).
-
-
-What if state is ``electing``?
-
-  This means the monitor is in the middle of an election. With recent Ceph
-  releases these typically complete quickly, but at times the monitors can
-  get stuck in what is known as an *election storm*. This can indicate
-  clock skew among the monitor nodes; jump to
-  `Clock Skews`_ for more information. If all your clocks are properly
-  synchronized, you should search the mailing lists and tracker.
-  This is not a state that is likely to persist and aside from
-  (*really*) old bugs there is not an obvious reason besides clock skews on
-  why this would happen.  Worst case, if there are enough surviving mons,
-  down the problematic one while you investigate.
-
-What if state is ``synchronizing``?
-
-  This means the monitor is catching up with the rest of the cluster in
-  order to join the quorum. Time to synchronize is a function of the size
-  of your monitor store and thus of cluster size and state, so if you have a
-  large or degraded cluster this may take a while.
-
-  If you notice that the monitor jumps from ``synchronizing`` to
-  ``electing`` and then back to ``synchronizing``, then you do have a
-  problem: the cluster state may be advancing (i.e., generating new maps)
-  too fast for the synchronization process to keep up. This was a more common
-  thing in early days (Cuttlefish), but since then the synchronization process
-  has been refactored and enhanced to avoid this dynamic. If you experience
-  this in later versions please let us know via a bug tracker. And bring some logs
-  (see `Preparing your logs`_).
-
-What if state is ``leader`` or ``peon``?
-
-  This should not happen:  famous last words.  If it does, however, it likely
-  has a lot to do with clock skew -- see `Clock Skews`_. If you are not
-  suffering from clock skew, then please prepare your logs (see
-  `Preparing your logs`_) and reach out to the community.
+  If the Monitor is out of the quorum, then its state will be one of the
+  following: ``probing``, ``electing`` or ``synchronizing``. If the state of
+  the Monitor is ``leader`` or ``peon``, then the Monitor believes itself to be
+  in quorum but the rest of the cluster believes that it is not in quorum. It
+  is possible that a Monitor that is in one of the ``probing``, ``electing``,
+  or ``synchronizing`` states has entered the quorum during the process of
+  troubleshooting. Check ``ceph status`` again to determine whether the Monitor
+  has entered quorum during your troubleshooting. If the Monitor remains out of
+  the quorum, then proceed with the investigations described in this section of
+  the documentation.
+  
+
+**What does it mean when a Monitor's state is ``probing``?**
+
+  If ``ceph health detail`` shows that a Monitor's state is
+  ``probing``, then the Monitor is still looking for the other Monitors. Every
+  Monitor remains in this state for some time when it is started. When a
+  Monitor has connected to the other Monitors specified in the ``monmap``, it
+  ceases to be in the ``probing`` state. The amount of time that a Monitor is
+  in the ``probing`` state depends upon the parameters of the cluster of which
+  it is a part. For example, when a Monitor is a part of a single-monitor
+  cluster (never do this in production), the monitor passes through the probing
+  state almost instantaneously. In a multi-monitor cluster, the Monitors stay
+  in the ``probing`` state until they find enough monitors to form a quorum
+  |---| this means that if two out of three Monitors in the cluster are
+  ``down``, the one remaining Monitor stays in the ``probing``  state
+  indefinitely until you bring one of the other monitors up.
+
+  If quorum has been established, then the Monitor daemon should be able to
+  find the other Monitors quickly, as long as they can be reached. If a Monitor
+  is stuck in the ``probing`` state and you have exhausted the procedures above
+  that describe the troubleshooting of communications between the Monitors,
+  then it is possible that the problem Monitor is trying to reach the other
+  Monitors at a wrong address. ``mon_status`` outputs the ``monmap`` that is
+  known to the monitor: determine whether the other Monitors' locations as
+  specified in the ``monmap`` match the locations of the Monitors in the
+  network. If they do not, see `Recovering a Monitor's Broken monmap`_.
+  If the locations of the Monitors as specified in the ``monmap`` match the
+  locations of the Monitors in the network, then the persistent
+  ``probing`` state could  be related to severe clock skews amongst the monitor
+  nodes.  See `Clock Skews`_.  If the information in `Clock Skews`_ does not
+  bring the Monitor out of the ``probing`` state, then prepare your system logs
+  and ask the Ceph community for help. See `Preparing your logs`_ for
+  information about the proper preparation of logs.
+
+
+**What does it mean when a Monitor's state is ``electing``?**
+
+  If ``ceph health detail`` shows that a Monitor's state is ``electing``, the
+  monitor is in the middle of an election. Elections typically complete
+  quickly, but sometimes the monitors can get stuck in what is known as an
+  *election storm*. See :ref:`Monitor Elections <dev_mon_elections>` for more
+  on monitor elections.
+  
+  The presence of election storm might indicate clock skew among the monitor
+  nodes. See `Clock Skews`_ for more information. 
+  
+  If your clocks are properly synchronized, search the mailing lists and bug
+  tracker for issues similar to your issue. The ``electing`` state is not
+  likely to persist. In versions of Ceph after the release of Cuttlefish, there
+  is no obvious reason other than clock skew that explains why an ``electing``
+  state would persist.  
+  
+  It is possible to investigate the cause of a persistent ``electing`` state if
+  you put the problematic Monitor into a ``down`` state while you investigate.
+  This is possible only if there are enough surviving Monitors to form quorum. 
+
+**What does it mean when a Monitor's state is ``synchronizing``?**
+
+  If ``ceph health detail`` shows that the Monitor is ``synchronizing``, the
+  monitor is catching up with the rest of the cluster so that it can join the
+  quorum. The amount of time that it takes for the Monitor to synchronize with
+  the rest of the quorum is a function of the size of the cluster's monitor
+  store, the cluster's size, and the state of the cluster. Larger and degraded
+  clusters generally keep Monitors in the ``synchronizing`` state longer than
+  do smaller, new clusters.
+
+  A Monitor that changes its state from ``synchronizing`` to ``electing`` and
+  then back to ``synchronizing`` indicates a problem: the cluster state may be
+  advancing (that is, generating new maps) too fast for the synchronization
+  process to keep up with the pace of the creation of the new maps. This issue
+  presented more frequently prior to the Cuttlefish release than it does in
+  more recent releases, because the synchronization process has since been
+  refactored and enhanced to avoid this dynamic. If you experience this in
+  later versions, report the issue in the `Ceph bug tracker
+  <https://tracker.ceph.com>`_. Prepare and provide logs to substantiate any
+  bug you raise. See `Preparing your logs`_ for information about the proper
+  preparation of logs.
+
+**What does it mean when a Monitor's state is ``leader`` or ``peon``?**
+
+  If ``ceph health detail`` shows that the Monitor is in the ``leader`` state
+  or in the ``peon`` state, it is likely that clock skew is present. Follow the
+  instructions in `Clock Skews`_. If you have followed those instructions and
+  ``ceph health detail`` still shows that the Monitor is in the ``leader``
+  state or the ``peon`` state, report the issue in the `Ceph bug tracker
+  <https://tracker.ceph.com>`_. If you raise an issue, provide logs to
+  substantiate it. See `Preparing your logs`_ for information about the
+  proper preparation of logs.
 
 
 Recovering a Monitor's Broken ``monmap``
@@ -317,18 +355,21 @@ Scrap the monitor and redeploy
 
 Inject a monmap into the monitor
 
-  Usually the safest path. You should grab the monmap from the remaining
-  monitors and inject it into the monitor with the corrupted/lost monmap.
-
   These are the basic steps:
 
-  1. Is there a formed quorum? If so, grab the monmap from the quorum::
+  Retrieve the ``monmap`` from the surviving monitors and inject it into the
+  monitor whose ``monmap`` is corrupted or lost.
+
+  Implement this solution by carrying out the following procedure:
+
+  1. Is there a quorum of monitors? If so, retrieve the ``monmap`` from the
+     quorum::
 
       $ ceph mon getmap -o /tmp/monmap
 
-  2. No quorum? Grab the monmap directly from another monitor (this
-     assumes the monitor you are grabbing the monmap from has id ID-FOO
-     and has been stopped)::
+  2. If there is no quorum, then retrieve the ``monmap`` directly from another
+     monitor that has been stopped (in this example, the other monitor has
+     the ID ``ID-FOO``)::
 
       $ ceph-mon -i ID-FOO --extract-monmap /tmp/monmap
 
@@ -340,97 +381,105 @@ Inject a monmap into the monitor
 
   5. Start the monitor
 
-  Please keep in mind that the ability to inject monmaps is a powerful
-  feature that can cause havoc with your monitors if misused as it will
-  overwrite the latest, existing monmap kept by the monitor.
-
+  .. warning:: Injecting ``monmaps`` can cause serious problems because doing
+     so will overwrite the latest existing ``monmap`` stored on the monitor. Be
+     careful!
 
 Clock Skews
-------------
+-----------
 
-Monitor operation can be severely affected by clock skew among the quorum's
-mons, as the PAXOS consensus algorithm requires tight time alignment.
-Skew can result in weird behavior with no obvious
-cause. To avoid such issues, you must run a clock synchronization tool
-on your monitor nodes:  ``Chrony`` or the legacy ``ntpd``.  Be sure to
-configure the mon nodes with the `iburst` option and multiple peers:
+The Paxos consensus algorithm requires close time synchroniziation, which means
+that clock skew among the monitors in the quorum can have a serious effect on
+monitor operation. The resulting behavior can be puzzling. To avoid this issue,
+run a clock synchronization tool on your monitor nodes: for example, use
+``Chrony`` or the legacy ``ntpd`` utility. Configure each monitor nodes so that
+the `iburst` option is in effect and so that each monitor has multiple peers,
+including the following: 
 
 * Each other
 * Internal ``NTP`` servers
 * Multiple external, public pool servers
 
-For good measure, *all* nodes in your cluster should also sync against
-internal and external servers, and perhaps even your mons.  ``NTP`` servers
-should run on bare metal; VM virtualized clocks are not suitable for steady
-timekeeping.  Visit `https://www.ntp.org <https://www.ntp.org>`_ for more info.  Your
-organization may already have quality internal ``NTP`` servers you can use.  
-Sources for ``NTP`` server appliances include:
+.. note:: The ``iburst`` option sends a burst of eight packets instead of the
+   usual single packet, and is used during the process of getting two peers
+   into initial synchronization.
+
+Furthermore, it is advisable to synchronize *all* nodes in your cluster against
+internal and external servers, and perhaps even against your monitors. Run
+``NTP`` servers on bare metal: VM-virtualized clocks are not suitable for
+steady timekeeping. See `https://www.ntp.org <https://www.ntp.org>`_ for more
+information about the Network Time Protocol (NTP). Your organization might
+already have quality internal ``NTP`` servers available.  Sources for ``NTP``
+server appliances include the following:
 
 * Microsemi (formerly Symmetricom) `https://microsemi.com <https://www.microsemi.com/product-directory/3425-timing-synchronization>`_
 * EndRun `https://endruntechnologies.com <https://endruntechnologies.com/products/ntp-time-servers>`_
 * Netburner `https://www.netburner.com <https://www.netburner.com/products/network-time-server/pk70-ex-ntp-network-time-server>`_
 
+Clock Skew Questions and Answers
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-What's the maximum tolerated clock skew?
-
-  By default the monitors will allow clocks to drift up to 0.05 seconds (50 ms).
+**What's the maximum tolerated clock skew?**
 
+  By default, monitors allow clocks to drift up to a maximum of 0.05 seconds
+  (50 milliseconds).
 
-Can I increase the maximum tolerated clock skew?
+**Can I increase the maximum tolerated clock skew?**
 
-  The maximum tolerated clock skew is configurable via the
-  ``mon-clock-drift-allowed`` option, and
-  although you *CAN* you almost certainly *SHOULDN'T*. The clock skew mechanism
-  is in place because clock-skewed monitors are likely to misbehave. We, as
-  developers and QA aficionados, are comfortable with the current default
-  value, as it will alert the user before the monitors get out hand. Changing
-  this value may cause unforeseen effects on the
-  stability of the monitors and overall cluster health.
+  Yes, but we strongly recommend against doing so. The maximum tolerated clock
+  skew is configurable via the ``mon-clock-drift-allowed`` option, but it is
+  almost certainly a bad idea to make changes to this option. The clock skew
+  maximum is in place because clock-skewed monitors cannot be relied upon. The
+  current default value has proven its worth at alerting the user before the
+  monitors encounter serious problems. Changing this value might cause
+  unforeseen effects on the stability of the monitors and overall cluster
+  health.
 
-How do I know there's a clock skew?
+**How do I know whether there is a clock skew?**
 
-  The monitors will warn you via the cluster status ``HEALTH_WARN``. ``ceph
-  health detail`` or ``ceph status`` should show something like::
+  The monitors will warn you via the cluster status ``HEALTH_WARN``. When clock
+  skew is present, the ``ceph health detail`` and ``ceph status`` commands
+  return an output resembling the following::
 
       mon.c addr 10.10.0.1:6789/0 clock skew 0.08235s > max 0.05s (latency 0.0045s)
 
-  That means that ``mon.c`` has been flagged as suffering from a clock skew.
-
-  On releases beginning with Luminous you can issue the ``ceph
-  time-sync-status`` command to check status.  Note that the lead mon is
-  typically the one with the numerically lowest IP address.  It will always
-  show ``0``: the reported offsets of other mons are relative to the lead mon,
-  not to any external reference source.
+  In this example, the monitor ``mon.c`` has been flagged as suffering from 
+  clock skew.
 
+  In Luminous and later releases, it is possible to check for a clock skew by
+  running the ``ceph time-sync-status`` command. Note that the lead monitor
+  typically has the numerically lowest IP address. It will always show ``0``:
+  the reported offsets of other monitors are relative to the lead monitor, not
+  to any external reference source.
 
-What should I do if there's a clock skew?
+**What should I do if there is a clock skew?**
 
-  Synchronize your clocks. Running an NTP client may help. If you are already
-  using one and you hit this sort of issues, check if you are using some NTP
-  server remote to your network and consider hosting your own NTP server on
-  your network.  This last option tends to reduce the amount of issues with
-  monitor clock skews.
+  Synchronize your clocks. Using an NTP client might help. However, if you
+  are already using an NTP client and you still encounter clock skew problems,
+  determine whether the NTP server that you are using is remote to your network
+  or instead hosted on your network. Hosting your own NTP servers tends to
+  mitigate clock skew problems.
 
 
 Client Can't Connect or Mount
-------------------------------
+-----------------------------
 
-Check your IP tables. Some OS install utilities add a ``REJECT`` rule to
-``iptables``. The rule rejects all clients trying to connect to the host except
-for ``ssh``. If your monitor host's IP tables have such a ``REJECT`` rule in
-place, clients connecting from a separate node will fail to mount with a timeout
-error. You need to address ``iptables`` rules that reject clients trying to
-connect to Ceph daemons.  For example, you would need to address rules that look
-like this appropriately::
+Check your IP tables. Some operating-system install utilities add a ``REJECT``
+rule to ``iptables``. ``iptables`` rules will reject all clients other than
+``ssh`` that try to connect to the host. If your monitor host's IP tables have
+a ``REJECT`` rule in place, clients that are connecting from a separate node
+will fail and will raise a timeout error. Any ``iptables`` rules that reject
+clients trying to connect to Ceph daemons must be addressed. For example::
 
-       REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
+    REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
 
-You may also need to add rules to IP tables on your Ceph hosts to ensure
-that clients can access the ports associated with your Ceph monitors (i.e., port
-6789 by default) and Ceph OSDs (i.e., 6800 through 7300 by default). For
+It might also be necessary to add rules to iptables on your Ceph hosts to
+ensure that clients are able to access the TCP ports associated with your Ceph
+monitors (default: port 6789) and Ceph OSDs (default: 6800 through 7300). For
 example::
 
-       iptables -A INPUT -m multiport -p tcp -s {ip-address}/{netmask} --dports 6789,6800:7300 -j ACCEPT
+    iptables -A INPUT -m multiport -p tcp -s {ip-address}/{netmask} --dports 6789,6800:7300 -j ACCEPT
+
 
 Monitor Store Failures
 ======================
@@ -438,9 +487,9 @@ Monitor Store Failures
 Symptoms of store corruption
 ----------------------------
 
-Ceph monitor stores the :term:`Cluster Map` in a key/value store such as LevelDB. If
-a monitor fails due to the key/value store corruption, following error messages
-might be found in the monitor log::
+Ceph monitors store the :term:`Cluster Map` in a key-value store.  If key-value
+store corruption causes a monitor to fail, then the monitor log might contain
+one of the following error messages::
 
   Corruption: error in middle of record
 
@@ -451,21 +500,26 @@ or::
 Recovery using healthy monitor(s)
 ---------------------------------
 
-If there are any survivors, we can always :ref:`replace <adding-and-removing-monitors>` the corrupted one with a
-new one. After booting up, the new joiner will sync up with a healthy
-peer, and once it is fully sync'ed, it will be able to serve the clients.
+If there are surviving monitors, we can always :ref:`replace
+<adding-and-removing-monitors>` the corrupted monitor with a new one. After the
+new monitor boots, it will synchronize with a healthy peer. After the new
+monitor is fully synchronized, it will be able to serve clients.
 
 .. _mon-store-recovery-using-osds:
 
 Recovery using OSDs
 -------------------
 
-But what if all monitors fail at the same time? Since users are encouraged to
-deploy at least three (and preferably five) monitors in a Ceph cluster, the chance of simultaneous
-failure is rare. But unplanned power-downs in a data center with improperly
-configured disk/fs settings could fail the underlying file system, and hence
-kill all the monitors. In this case, we can recover the monitor store with the
-information stored in OSDs.
+Even if all monitors fail at the same time, it is possible to recover the
+monitor store by using information stored in OSDs. You are encouraged to deploy
+at least three (and preferably five) monitors in a Ceph cluster. In such a
+deployment, complete monitor failure is unlikely. However, unplanned power loss
+in a data center whose disk settings or filesystem settings are improperly
+configured could cause the underlying filesystem to fail and this could kill
+all of the monitors. In such a case, data in the OSDs can be used to recover
+the monitors.  The following is such a script and can be used to recover the
+monitors:
+
 
 .. code-block:: bash
 
@@ -516,124 +570,142 @@ information stored in OSDs.
   mv $ms/store.db /var/lib/ceph/mon/mon.foo/store.db
   chown -R ceph:ceph /var/lib/ceph/mon/mon.foo/store.db
 
-The steps above
+This script performs the following steps:
+
+#. Collects the map from each OSD host.
+#. Rebuilds the store.
+#. Fills the entities in the keyring file with appropriate capabilities.
+#. Replaces the corrupted store on ``mon.foo`` with the recovered copy.
 
-#. collect the map from all OSD hosts,
-#. then rebuild the store,
-#. fill the entities in keyring file with appropriate caps
-#. replace the corrupted store on ``mon.foo`` with the recovered copy.
 
 Known limitations
 ~~~~~~~~~~~~~~~~~
 
-Following information are not recoverable using the steps above:
+The above recovery tool is unable to recover the following information:
 
-- **some added keyrings**: all the OSD keyrings added using ``ceph auth add`` command
-  are recovered from the OSD's copy. And the ``client.admin`` keyring is imported
-  using ``ceph-monstore-tool``. But the MDS keyrings and other keyrings are missing
-  in the recovered monitor store. You might need to re-add them manually.
+- **Certain added keyrings**: All of the OSD keyrings added using the ``ceph
+  auth add`` command are recovered from the OSD's copy, and the
+  ``client.admin`` keyring is imported using ``ceph-monstore-tool``. However,
+  the MDS keyrings and all other keyrings will be missing in the recovered
+  monitor store. You might need to manually re-add them.
 
-- **creating pools**: If any RADOS pools were in the process of being creating, that state is lost.  The recovery tool assumes that all pools have been created.  If there are PGs that are stuck in the 'unknown' after the recovery for a partially created pool, you can force creation of the *empty* PG with the ``ceph osd force-create-pg`` command.  Note that this will create an *empty* PG, so only do this if you know the pool is empty.
-
-- **MDS Maps**: the MDS maps are lost.
+- **Creating pools**: If any RADOS pools were in the process of being created,
+  that state is lost. The recovery tool operates on the assumption that all
+  pools have already been created. If there are PGs that are stuck in the
+  'unknown' state after the recovery for a partially created pool, you can
+  force creation of the *empty* PG by running the ``ceph osd force-create-pg``
+  command. Note that this will create an *empty* PG, so take this action only
+  if you know the pool is empty.
 
+- **MDS Maps**: The MDS maps are lost.
 
 
 Everything Failed! Now What?
-=============================
+============================
 
 Reaching out for help
-----------------------
+---------------------
 
-You can find us on IRC at #ceph and #ceph-devel at OFTC (server irc.oftc.net)
-and on ``dev@ceph.io`` and ``ceph-users@lists.ceph.com``. Make
-sure you have grabbed your logs and have them ready if someone asks: the faster
-the interaction and lower the latency in response, the better chances everyone's
-time is optimized.
+You can find help on IRC in #ceph and #ceph-devel on OFTC (server
+irc.oftc.net), or at ``dev@ceph.io`` and ``ceph-users@lists.ceph.com``. Make
+sure that you have prepared your logs and that you have them ready upon
+request.
+
+See https://ceph.io/en/community/connect/ for current (as of October 2023)
+information on getting in contact with the upstream Ceph community.
 
 
 Preparing your logs
----------------------
+-------------------
 
-Monitor logs are, by default, kept in ``/var/log/ceph/ceph-mon.FOO.log*``. We
-may want them. However, your logs may not have the necessary information. If
-you don't find your monitor logs at their default location, you can check
-where they should be by running::
+The default location for monitor logs is ``/var/log/ceph/ceph-mon.FOO.log*``.
+However, if they are not there, you can find their current location by running
+the following command:
 
-  ceph-conf --name mon.FOO --show-config-value log_file
+.. prompt:: bash
 
-The amount of information in the logs are subject to the debug levels being
-enforced by your configuration files. If you have not enforced a specific
-debug level then Ceph is using the default levels and your logs may not
-contain important information to track down you issue.
-A first step in getting relevant information into your logs will be to raise
-debug levels. In this case we will be interested in the information from the
-monitor.
-Similarly to what happens on other components, different parts of the monitor
-will output their debug information on different subsystems.
+   ceph-conf --name mon.FOO --show-config-value log_file
 
-You will have to raise the debug levels of those subsystems more closely
-related to your issue. This may not be an easy task for someone unfamiliar
-with troubleshooting Ceph. For most situations, setting the following options
-on your monitors will be enough to pinpoint a potential source of the issue::
+The amount of information in the logs is determined by the debug levels in the
+cluster's configuration files. If Ceph is using the default debug levels, then
+your logs might be missing important information that would help the upstream
+Ceph community address your issue.
+
+To make sure your monitor logs contain relevant information, you can raise
+debug levels. Here we are interested in information from the monitors.  As with
+other components, the monitors have different parts that output their debug
+information on different subsystems.
+
+If you are an experienced Ceph troubleshooter, we recommend raising the debug
+levels of the most relevant subsystems. Of course, this approach might not be
+easy for beginners. In most cases, however, enough information to address the
+issue will be secured if the following debug levels are entered::
 
       debug_mon = 10
       debug_ms = 1
 
-If we find that these debug levels are not enough, there's a chance we may
-ask you to raise them or even define other debug subsystems to obtain infos
-from -- but at least we started off with some useful information, instead
-of a massively empty log without much to go on with.
+Sometimes these debug levels do not yield enough information. In such cases,
+members of the upstream Ceph community might ask you to make additional changes
+to these or to other debug levels. In any case, it is better for us to receive
+at least some useful information than to receive an empty log.
+
 
 Do I need to restart a monitor to adjust debug levels?
 ------------------------------------------------------
 
-No. You may do it in one of two ways:
+No, restarting a monitor is not necessary. Debug levels may be adjusted by
+using two different methods, depending on whether or not there is a quorum:
 
-You have quorum
+There is a quorum
 
-  Either inject the debug option into the monitor you want to debug::
+  Either inject the debug option into the specific monitor that needs to 
+  be debugged::
 
         ceph tell mon.FOO config set debug_mon 10/10
 
-  or into all monitors at once::
+  Or inject it into all monitors at once::
 
         ceph tell mon.* config set debug_mon 10/10
 
-No quorum
 
-  Use the monitor's admin socket and directly adjust the configuration
-  options::
+There is no quorum
+
+  Use the admin socket of the specific monitor that needs to be debugged
+  and directly adjust the monitor's configuration options::
 
       ceph daemon mon.FOO config set debug_mon 10/10
 
 
-Going back to default values is as easy as rerunning the above commands
-using the debug level ``1/10`` instead.  You can check your current
-values using the admin socket and the following commands::
+To return the debug levels to their default values, run the above commands
+using the debug level ``1/10`` rather than ``10/10``. To check a monitor's
+current values, use the admin socket and run either of the following commands:
 
-      ceph daemon mon.FOO config show
+  .. prompt:: bash
 
-or::
+     ceph daemon mon.FOO config show
+
+or:
+
+  .. prompt:: bash
+
+     ceph daemon mon.FOO config get 'OPTION_NAME'
 
-      ceph daemon mon.FOO config get 'OPTION_NAME'
 
 
-Reproduced the problem with appropriate debug levels. Now what?
-----------------------------------------------------------------
+Reproduced the problem with appropriate debug levels. Now what?
+-----------------------------------------------------------------
 
-Ideally you would send us only the relevant portions of your logs.
-We realise that figuring out the corresponding portion may not be the
-easiest of tasks. Therefore, we won't hold it to you if you provide the
-full log, but common sense should be employed. If your log has hundreds
-of thousands of lines, it may get tricky to go through the whole thing,
-specially if we are not aware at which point, whatever your issue is,
-happened. For instance, when reproducing, keep in mind to write down
-current time and date and to extract the relevant portions of your logs
-based on that.
+We prefer that you send us only the portions of your logs that are relevant to
+your monitor problems. Of course, it might not be easy for you to determine
+which portions are relevant so we are willing to accept complete and
+unabridged logs. However, we request that you avoid sending logs containing
+hundreds of thousands of lines with no additional clarifying information. One
+common-sense way of making our task easier is to write down the current time
+and date when you are reproducing the problem and then extract portions of your
+logs based on that information.
 
-Finally, you should reach out to us on the mailing lists, on IRC or file
-new issue on the `tracker`_.
+Finally, reach out to us on the mailing lists or IRC or Slack, or by filing a
+new issue on the `tracker`_.
 
 .. _tracker: http://tracker.ceph.com/projects/ceph/issues/new
 
index 5d0185b9b686b7316db5d1984c81d44c3d918902..035947d7ec94bf010f3dd9b58a1c7c50e1cbe34a 100644 (file)
  Troubleshooting OSDs
 ======================
 
-Before troubleshooting your OSDs, first check your monitors and network. If
-you execute ``ceph health`` or ``ceph -s`` on the command line and Ceph shows
-``HEALTH_OK``, it means that the monitors have a quorum.
-If you don't have a monitor quorum or if there are errors with the monitor
-status, `address the monitor issues first <../troubleshooting-mon>`_.
-Check your networks to ensure they
-are running properly, because networks may have a significant impact on OSD
-operation and performance. Look for dropped packets on the host side
-and CRC errors on the switch side.
+Before troubleshooting the cluster's OSDs, check the monitors
+and the network. 
+
+First, determine whether the monitors have a quorum. Run the ``ceph health``
+command or the ``ceph -s`` command and if Ceph shows ``HEALTH_OK`` then there
+is a monitor quorum. 
+
+If the monitors don't have a quorum or if there are errors with the monitor
+status, address the monitor issues before proceeding by consulting the material
+in `Troubleshooting Monitors <../troubleshooting-mon>`_.
+
+Next, check your networks to make sure that they are running properly. Networks
+can have a significant impact on OSD operation and performance. Look for
+dropped packets on the host side and CRC errors on the switch side.
+
 
 Obtaining Data About OSDs
 =========================
 
-A good first step in troubleshooting your OSDs is to obtain topology information in
-addition to the information you collected while `monitoring your OSDs`_
-(e.g., ``ceph osd tree``).
+When troubleshooting OSDs, it is useful to collect different kinds of
+information about the OSDs. Some information comes from the practice of
+`monitoring OSDs`_ (for example, by running the ``ceph osd tree`` command).
+Additional information concerns the topology of your cluster, and is discussed
+in the following sections.
 
 
 Ceph Logs
 ---------
 
-If you haven't changed the default path, you can find Ceph log files at
-``/var/log/ceph``::
+Ceph log files are stored under ``/var/log/ceph``. Unless the path has been
+changed (or you are in a containerized environment that stores logs in a
+different location), the log files can be listed by running the following
+command:
+
+.. prompt:: bash
 
-       ls /var/log/ceph
+   ls /var/log/ceph
+
+If there is not enough log detail, change the logging level. To ensure that
+Ceph performs adequately under high logging volume, see `Logging and
+Debugging`_.
 
-If you don't see enough log detail you can change your logging level.  See
-`Logging and Debugging`_ for details to ensure that Ceph performs adequately
-under high logging volume.
 
 
 Admin Socket
 ------------
 
-Use the admin socket tool to retrieve runtime information. For details, list
-the sockets for your Ceph daemons::
+Use the admin socket tool to retrieve runtime information. First, list the
+sockets of Ceph's daemons by running the following command:
 
-       ls /var/run/ceph
+.. prompt:: bash
 
-Then, execute the following, replacing ``{daemon-name}`` with an actual
-daemon (e.g., ``osd.0``)::
+   ls /var/run/ceph
 
-  ceph daemon osd.0 help
+Next, run a command of the following form (replacing ``{daemon-name}`` with the
+name of a specific daemon: for example, ``osd.0``):
 
-Alternatively, you can specify a ``{socket-file}`` (e.g., something in ``/var/run/ceph``)::
+.. prompt:: bash
 
-  ceph daemon {socket-file} help
+   ceph daemon {daemon-name} help
 
-The admin socket, among other things, allows you to:
+Alternatively, run the command with a ``{socket-file}`` specified (a "socket
+file" is a specific file in ``/var/run/ceph``):
 
-- List your configuration at runtime
-- Dump historic operations
-- Dump the operation priority queue state
-- Dump operations in flight
-- Dump perfcounters
+.. prompt:: bash
 
-Display Freespace
------------------
+   ceph daemon {socket-file} help
+
+The admin socket makes many tasks possible, including:
+
+- Listing Ceph configuration at runtime
+- Dumping historic operations
+- Dumping the operation priority queue state
+- Dumping operations in flight
+- Dumping perfcounters
 
-Filesystem issues may arise. To display your file system's free space, execute
-``df``. ::
+Display Free Space
+------------------
+
+Filesystem issues may arise. To display your filesystems' free space, run the
+following command:
+
+.. prompt:: bash
 
-       df -h
+   df -h
 
-Execute ``df --help`` for additional usage.
+To see this command's supported syntax and options, run ``df --help``.
 
 I/O Statistics
 --------------
 
-Use `iostat`_ to identify I/O-related issues. ::
+The `iostat`_ tool can be used to identify I/O-related issues. Run the
+following command:
+
+.. prompt:: bash
+
+   iostat -x
 
-       iostat -x
 
 Diagnostic Messages
 -------------------
 
-To retrieve diagnostic messages from the kernel, use ``dmesg`` with ``less``, ``more``, ``grep``
-or ``tail``.  For example::
+To retrieve diagnostic messages from the kernel, run the ``dmesg`` command and
+specify the output with ``less``, ``more``, ``grep``, or ``tail``. For
+example: 
 
-       dmesg | grep scsi
+.. prompt:: bash
 
-Stopping w/out Rebalancing
-==========================
+    dmesg | grep scsi
+
+Stopping without Rebalancing
+============================
+
+It might be occasionally necessary to perform maintenance on a subset of your
+cluster or to resolve a problem that affects a failure domain (for example, a
+rack).  However, when you stop OSDs for maintenance, you might want to prevent
+CRUSH from automatically rebalancing the cluster. To avert this rebalancing
+behavior, set the cluster to ``noout`` by running the following command:
+
+.. prompt:: bash
 
-Periodically, you may need to perform maintenance on a subset of your cluster,
-or resolve a problem that affects a failure domain (e.g., a rack). If you do not
-want CRUSH to automatically rebalance the cluster as you stop OSDs for
-maintenance, set the cluster to ``noout`` first::
+   ceph osd set noout
 
-       ceph osd set noout
+.. warning:: This is more a thought exercise offered for the purpose of giving
+   the reader a sense of failure domains and CRUSH behavior than a suggestion
+   that anyone in the post-Luminous world run ``ceph osd set noout``. When the
+   OSDs return to an ``up`` state, rebalancing will resume and the change
+   introduced by the ``ceph osd set noout`` command will be reverted.
 
-On Luminous or newer releases it is safer to set the flag only on affected OSDs.
-You can do this individually ::
+In Luminous and later releases, however, it is a safer approach to flag only
+affected OSDs.  To add or remove a ``noout`` flag to a specific OSD, run a
+command like the following:
 
-       ceph osd add-noout osd.0
-       ceph osd rm-noout  osd.0
+.. prompt:: bash
 
-Or an entire CRUSH bucket at a time.  Say you're going to take down
-``prod-ceph-data1701`` to add RAM ::
+   ceph osd add-noout osd.0
+   ceph osd rm-noout  osd.0
 
-       ceph osd set-group noout prod-ceph-data1701
+It is also possible to flag an entire CRUSH bucket. For example, if you plan to
+take down ``prod-ceph-data1701`` in order to add RAM, you might run the
+following command:
 
-Once the flag is set you can stop the OSDs and any other colocated Ceph
-services within the failure domain that requires maintenance work. ::
+.. prompt:: bash
 
-       systemctl stop ceph\*.service ceph\*.target
+   ceph osd set-group noout prod-ceph-data1701
 
-.. note:: Placement groups within the OSDs you stop will become ``degraded``
-   while you are addressing issues with within the failure domain.
+After the flag is set, stop the OSDs and any other colocated
+Ceph services within the failure domain that requires maintenance work::
 
-Once you have completed your maintenance, restart the OSDs and any other
-daemons.  If you rebooted the host as part of the maintenance, these should
-come back on their own without intervention. ::
+   systemctl stop ceph\*.service ceph\*.target
 
-       sudo systemctl start ceph.target
+.. note:: When an OSD is stopped, any placement groups within the OSD are
+   marked as ``degraded``.
 
-Finally, you must unset the cluster-wide``noout`` flag::
+After the maintenance is complete, it will be necessary to restart the OSDs
+and any other daemons that have stopped. However, if the host was rebooted as
+part of the maintenance, they do not need to be restarted and will come back up
+automatically. To restart OSDs or other daemons, use a command of the following
+form:
 
-       ceph osd unset noout
-       ceph osd unset-group noout prod-ceph-data1701
+.. prompt:: bash
+
+   sudo systemctl start ceph.target
+
+Finally, unset the ``noout`` flag as needed by running commands like the
+following:
+
+.. prompt:: bash
+
+   ceph osd unset noout
+   ceph osd unset-group noout prod-ceph-data1701
+
+Many contemporary Linux distributions employ ``systemd`` for service
+management.  However, for certain operating systems (especially older ones) it
+might be necessary to issue equivalent ``service`` or ``start``/``stop``
+commands.
 
-Note that most Linux distributions that Ceph supports today employ ``systemd``
-for service management.  For other or older operating systems you may need
-to issue equivalent ``service`` or ``start``/``stop`` commands.
 
 .. _osd-not-running:
 
 OSD Not Running
 ===============
 
-Under normal circumstances, simply restarting the ``ceph-osd`` daemon will
-allow it to rejoin the cluster and recover.
+Under normal conditions, restarting a ``ceph-osd`` daemon will allow it to
+rejoin the cluster and recover.
+
 
 An OSD Won't Start
 ------------------
 
-If you start your cluster and an OSD won't start, check the following:
-
-- **Configuration File:** If you were not able to get OSDs running from
-  a new installation, check your configuration file to ensure it conforms
-  (e.g., ``host`` not ``hostname``, etc.).
-
-- **Check Paths:** Check the paths in your configuration, and the actual
-  paths themselves for data and metadata (journals, WAL, DB). If you separate the OSD data from
-  the metadata and there are errors in your configuration file or in the
-  actual mounts, you may have trouble starting OSDs. If you want to store the
-  metadata on a separate block device, you should partition or LVM your
-  drive and assign one partition per OSD.
-
-- **Check Max Threadcount:** If you have a node with a lot of OSDs, you may be
-  hitting the default maximum number of threads (e.g., usually 32k), especially
-  during recovery. You can increase the number of threads using ``sysctl`` to
-  see if increasing the maximum number of threads to the maximum possible
-  number of threads allowed (i.e.,  4194303) will help. For example::
-
-       sysctl -w kernel.pid_max=4194303
-
-  If increasing the maximum thread count resolves the issue, you can make it
-  permanent by including a ``kernel.pid_max`` setting in a file under ``/etc/sysctl.d`` or
-  within the master ``/etc/sysctl.conf`` file. For example::
-
-       kernel.pid_max = 4194303
-
-- **Check ``nf_conntrack``:** This connection tracking and limiting system
-  is the bane of many production Ceph clusters, and can be insidious in that
-  everything is fine at first. As cluster topology and client workload
-  grow, mysterious and intermittent connection failures and performance
-  glitches manifest, becoming worse over time and at certain times of day.
-  Check ``syslog`` history for table fillage events.  You can mitigate this
-  bother by raising ``nf_conntrack_max`` to a much higher value via ``sysctl``.
-  Be sure to raise ``nf_conntrack_buckets`` accordingly to
-  ``nf_conntrack_max / 4``, which may require action outside of ``sysctl`` e.g.
-  ``"echo 131072 > /sys/module/nf_conntrack/parameters/hashsize``
-  More interdictive but fussier is to blacklist the associated kernel modules
-  to disable processing altogether.  This is fragile in that the modules
-  vary among kernel versions, as does the order in which they must be listed.
-  Even when blacklisted there are situations in which ``iptables`` or ``docker``
-  may activate connection tracking anyway, so a "set and forget" strategy for
-  the tunables is advised.  On modern systems this will not consume appreciable
-  resources.
-
-- **Kernel Version:** Identify the kernel version and distribution you
-  are using. Ceph uses some third party tools by default, which may be
-  buggy or may conflict with certain distributions and/or kernel
-  versions (e.g., Google ``gperftools`` and ``TCMalloc``). Check the
-  `OS recommendations`_ and the release notes for each Ceph version
-  to ensure you have addressed any issues related to your kernel.
-
-- **Segment Fault:** If there is a segment fault, increase log levels
-  and start the problematic daemon(s) again. If segment faults recur,
-  search the Ceph bug tracker `https://tracker.ceph/com/projects/ceph <https://tracker.ceph.com/projects/ceph/>`_
-  and the ``dev`` and ``ceph-users`` mailing list archives `https://ceph.io/resources <https://ceph.io/resources>`_.
-  If this is truly a new and unique
-  failure, post to the ``dev`` email list and provide the specific Ceph
-  release being run, ``ceph.conf`` (with secrets XXX'd out),
-  your monitor status output and excerpts from your log file(s).
+If the cluster has started but an OSD isn't starting, check the following:
+
+- **Configuration File:** If you were not able to get OSDs running from a new
+  installation, check your configuration file to ensure it conforms to the
+  standard (for example, make sure that it says ``host`` and not ``hostname``,
+  etc.).
+
+- **Check Paths:** Ensure that the paths specified in the configuration
+  correspond to the paths for data and metadata that actually exist (for
+  example, the paths to the journals, the WAL, and the DB). Separate the OSD
+  data from the metadata in order to see whether there are errors in the
+  configuration file and in the actual mounts. If so, these errors might
+  explain why OSDs are not starting. To store the metadata on a separate block
+  device, partition or LVM the drive and assign one partition per OSD.
+
+- **Check Max Threadcount:** If the cluster has a node with an especially high
+  number of OSDs, it might be hitting the default maximum number of threads
+  (usually 32,000).  This is especially likely to happen during recovery.
+  Increasing the maximum number of threads to the maximum possible number of
+  threads allowed (4194303) might help with the problem. To increase the number
+  of threads to the maximum, run the following command:
+
+  .. prompt:: bash
+
+     sysctl -w kernel.pid_max=4194303
+
+  If this increase resolves the issue, you must make the increase permanent by
+  including a ``kernel.pid_max`` setting either in a file under
+  ``/etc/sysctl.d`` or within the master ``/etc/sysctl.conf`` file. For
+  example::
+
+     kernel.pid_max = 4194303
+
+- **Check ``nf_conntrack``:** This connection-tracking and connection-limiting
+  system causes problems for many production Ceph clusters. The problems often
+  emerge slowly and subtly. As cluster topology and client workload grow,
+  mysterious and intermittent connection failures and performance glitches
+  occur more and more, especially at certain times of the day. To begin taking
+  the measure of your problem, check the ``syslog`` history for "table full"
+  events. One way to address this kind of problem is as follows: First, use the
+  ``sysctl`` utility to assign ``nf_conntrack_max`` a much higher value. Next,
+  raise the value of ``nf_conntrack_buckets`` so that ``nf_conntrack_buckets``
+  × 8 = ``nf_conntrack_max``; this action might require running commands
+  outside of ``sysctl`` (for example, ``"echo 131072 >
+  /sys/module/nf_conntrack/parameters/hashsize``). Another way to address the
+  problem is to blacklist the associated kernel modules in order to disable
+  processing altogether. This approach is powerful, but fragile. The modules
+  and the order in which the modules must be listed can vary among kernel
+  versions. Even when blacklisted, ``iptables`` and ``docker`` might sometimes
+  activate connection tracking anyway, so we advise a "set and forget" strategy
+  for the tunables. On modern systems, this approach will not consume
+  appreciable resources.
+
+- **Kernel Version:** Identify the kernel version and distribution that are in
+  use. By default, Ceph uses third-party tools that might be buggy or come into
+  conflict with certain distributions or kernel versions (for example, Google's
+  ``gperftools`` and ``TCMalloc``). Check the `OS recommendations`_ and the
+  release notes for each Ceph version in order to make sure that you have
+  addressed any issues related to your kernel.
+
+- **Segment Fault:** If there is a segment fault, increase log levels and
+  restart the problematic daemon(s). If segment faults recur, search the Ceph
+  bug tracker `https://tracker.ceph/com/projects/ceph
+  <https://tracker.ceph.com/projects/ceph/>`_ and the ``dev`` and
+  ``ceph-users`` mailing list archives `https://ceph.io/resources
+  <https://ceph.io/resources>`_ to see if others have experienced and reported
+  these issues. If this truly is a new and unique failure, post to the ``dev``
+  email list and provide the following information: the specific Ceph release
+  being run, ``ceph.conf`` (with secrets XXX'd out), your monitor status
+  output, and excerpts from your log file(s).
+
 
 An OSD Failed
 -------------
 
-When a ``ceph-osd`` process dies, surviving ``ceph-osd`` daemons will report
-to the mons that it appears down, which will in turn surface the new status
-via the ``ceph health`` command::
+When an OSD fails, this means that a ``ceph-osd`` process is unresponsive or
+has died and that the corresponding OSD has been marked ``down``. Surviving
+``ceph-osd`` daemons will report to the monitors that the OSD appears to be
+down, and a new status will be visible in the output of the ``ceph health``
+command, as in the following example:
+
+.. prompt:: bash
+
+   ceph health
+
+::
+
+   HEALTH_WARN 1/3 in osds are down
+
+This health alert is raised whenever there are one or more OSDs marked ``in``
+and ``down``. To see which OSDs are ``down``, add ``detail`` to the command as in
+the following example:
+
+.. prompt:: bash
+
+   ceph health detail
+
+::
 
-       ceph health
-       HEALTH_WARN 1/3 in osds are down
+   HEALTH_WARN 1/3 in osds are down
+   osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
 
-Specifically, you will get a warning whenever there are OSDs marked ``in``
-and ``down``.  You can identify which  are ``down`` with::
+Alternatively, run the following command:
 
-       ceph health detail
-       HEALTH_WARN 1/3 in osds are down
-       osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
+.. prompt:: bash
 
-or ::
+    ceph osd tree down
 
-       ceph osd tree down
+If there is a drive failure or another fault that is preventing a given
+``ceph-osd`` daemon from functioning or restarting, then there should be an
+error message present in its log file under ``/var/log/ceph``.
 
-If there is a drive
-failure or other fault preventing ``ceph-osd`` from functioning or
-restarting, an error message should be present in its log file under
-``/var/log/ceph``.
+If the ``ceph-osd`` daemon stopped because of a heartbeat failure or a
+``suicide timeout`` error, then the underlying drive or filesystem might be
+unresponsive. Check ``dmesg`` output and `syslog`  output for drive errors or
+kernel errors. It might be necessary to specify certain flags (for example,
+``dmesg -T`` to see human-readable timestamps) in order to avoid mistaking old
+errors for new errors.
 
-If the daemon stopped because of a heartbeat failure or ``suicide timeout``,
-the underlying drive or filesystem may be unresponsive. Check ``dmesg``
-and `syslog`  output for drive or other kernel errors.  You may need to
-specify something like ``dmesg -T`` to get timestamps, otherwise it's
-easy to mistake old errors for new.
+If an entire host's OSDs are ``down``, check to see if there is a network
+error or a hardware issue with the host.
+
+If the OSD problem is the result of a software error (for example, a failed
+assertion or another unexpected error), search for reports of the issue in the
+`bug tracker <https://tracker.ceph/com/projects/ceph>`_ , the `dev mailing list
+archives <https://lists.ceph.io/hyperkitty/list/dev@ceph.io/>`_, and the
+`ceph-users mailing list archives
+<https://lists.ceph.io/hyperkitty/list/ceph-users@ceph.io/>`_.  If there is no
+clear fix or existing bug, then :ref:`report the problem to the ceph-devel
+email list <Get Involved>`.
 
-If the problem is a software error (failed assertion or other
-unexpected error), search the archives and tracker as above, and
-report it to the `ceph-devel`_ email list if there's no clear fix or
-existing bug.
 
 .. _no-free-drive-space:
 
 No Free Drive Space
 -------------------
 
-Ceph prevents you from writing to a full OSD so that you don't lose data.
-In an operational cluster, you should receive a warning when your cluster's OSDs
-and pools approach the full ratio. The ``mon_osd_full_ratio`` defaults to
-``0.95``, or 95% of capacity before it stops clients from writing data.
-The ``mon_osd_backfillfull_ratio`` defaults to ``0.90``, or 90 % of
-capacity above which backfills will not start. The
-OSD nearfull ratio defaults to ``0.85``, or 85% of capacity
-when it generates a health warning.
+If an OSD is full, Ceph prevents data loss by ensuring that no new data is
+written to the OSD. In an properly running cluster, health checks are raised
+when the cluster's OSDs and pools approach certain "fullness" ratios. The
+``mon_osd_full_ratio`` threshold defaults to ``0.95`` (or 95% of capacity):
+this is the point above which clients are prevented from writing data. The
+``mon_osd_backfillfull_ratio`` threshold defaults to ``0.90`` (or 90% of
+capacity): this is the point above which backfills will not start. The
+``mon_osd_nearfull_ratio`` threshold defaults to ``0.85`` (or 85% of capacity):
+this is the point at which it raises the ``OSD_NEARFULL`` health check.
+
+OSDs within a cluster will vary in how much data is allocated to them by Ceph.
+To check "fullness" by displaying data utilization for every OSD, run the
+following command:
+
+.. prompt:: bash
+
+   ceph osd df
+
+To check "fullness" by displaying a cluster’s overall data usage and data
+distribution among pools, run the following command:
+
+.. prompt:: bash
+
+   ceph df 
+
+When examining the output of the ``ceph df`` command, pay special attention to
+the **most full** OSDs, as opposed to the percentage of raw space used. If a
+single outlier OSD becomes full, all writes to this OSD's pool might fail as a
+result. When ``ceph df`` reports the space available to a pool, it considers
+the ratio settings relative to the *most full* OSD that is part of the pool. To
+flatten the distribution, two approaches are available: (1) Using the
+``reweight-by-utilization`` command to progressively move data from excessively
+full OSDs or move data to insufficiently full OSDs, and (2) in later revisions
+of Luminous and subsequent releases, exploiting the ``ceph-mgr`` ``balancer``
+module to perform the same task automatically.
+
+To adjust the "fullness" ratios, run a command or commands of the following
+form:
 
-Note that individual OSDs within a cluster will vary in how much data Ceph
-allocates to them.  This utilization can be displayed for each OSD with ::
+.. prompt:: bash
 
-       ceph osd df
+   ceph osd set-nearfull-ratio <float[0.0-1.0]>
+   ceph osd set-full-ratio <float[0.0-1.0]>
+   ceph osd set-backfillfull-ratio <float[0.0-1.0]>
 
-Overall cluster / pool fullness can be checked with ::
+Sometimes full cluster issues arise because an OSD has failed. This can happen
+either because of a test or because the cluster is small, very full, or
+unbalanced. When an OSD or node holds an excessive percentage of the cluster's
+data, component failures or natural growth can result in the ``nearfull`` and
+``full`` ratios being exceeded.  When testing Ceph's resilience to OSD failures
+on a small cluster, it is advised to leave ample free disk space and to
+consider temporarily lowering the OSD ``full ratio``, OSD ``backfillfull
+ratio``, and OSD ``nearfull ratio``.
 
-       ceph df 
+The "fullness" status of OSDs is visible in the output of the ``ceph health``
+command, as in the following example:
 
-Pay close attention to the **most full** OSDs, not the percentage of raw space
-used as reported by ``ceph df``.  It only takes one outlier OSD filling up to
-fail writes to its pool.  The space available to each pool as reported by
-``ceph df`` considers the ratio settings relative to the *most full* OSD that
-is part of a given pool.  The distribution can be flattened by progressively
-moving data from overfull or to underfull OSDs using the ``reweight-by-utilization``
-command.  With Ceph releases beginning with later revisions of Luminous one can also
-exploit the ``ceph-mgr`` ``balancer`` module to perform this task automatically
-and rather effectively.
+.. prompt:: bash
 
-The ratios can be adjusted:
+   ceph health
 
 ::
 
-    ceph osd set-nearfull-ratio <float[0.0-1.0]>
-    ceph osd set-full-ratio <float[0.0-1.0]>
-    ceph osd set-backfillfull-ratio <float[0.0-1.0]>
+  HEALTH_WARN 1 nearfull osd(s)
 
-Full cluster issues can arise when an OSD fails either as a test or organically
-within small and/or very full or unbalanced cluster. When an OSD or node
-holds an outsize percentage of the cluster's data, the ``nearfull`` and ``full``
-ratios may be exceeded as a result of component failures or even natural growth.
-If you are testing how Ceph reacts to OSD failures on a small
-cluster, you should leave ample free disk space and consider temporarily
-lowering the OSD ``full ratio``, OSD ``backfillfull ratio`` and
-OSD ``nearfull ratio``
+For details, add the ``detail`` command as in the following example:
 
-Full ``ceph-osds`` will be reported by ``ceph health``::
+.. prompt:: bash
 
-       ceph health
-       HEALTH_WARN 1 nearfull osd(s)
+    ceph health detail
 
-Or::
+::
+
+    HEALTH_ERR 1 full osd(s); 1 backfillfull osd(s); 1 nearfull osd(s)
+    osd.3 is full at 97%
+    osd.4 is backfill full at 91%
+    osd.2 is near full at 87%
 
-       ceph health detail
-       HEALTH_ERR 1 full osd(s); 1 backfillfull osd(s); 1 nearfull osd(s)
-       osd.3 is full at 97%
-       osd.4 is backfill full at 91%
-       osd.2 is near full at 87%
+To address full cluster issues, it is recommended to add capacity by adding
+OSDs. Adding new OSDs allows the cluster to redistribute data to newly
+available storage. Search for ``rados bench`` orphans that are wasting space.
 
-The best way to deal with a full cluster is to add capacity via new OSDs, enabling
-the cluster to redistribute data to newly available storage.
+If a legacy Filestore OSD cannot be started because it is full, it is possible
+to reclaim space by deleting a small number of placement group directories in
+the full OSD.
 
-If you cannot start a legacy Filestore OSD because it is full, you may reclaim
-some space deleting a few placement group directories in the full OSD.
+.. important:: If you choose to delete a placement group directory on a full
+   OSD, **DO NOT** delete the same placement group directory on another full
+   OSD. **OTHERWISE YOU WILL LOSE DATA**. You **MUST** maintain at least one
+   copy of your data on at least one OSD. Deleting placement group directories
+   is a rare and extreme intervention. It is not to be undertaken lightly.
 
-.. important:: If you choose to delete a placement group directory on a full OSD,
-   **DO NOT** delete the same placement group directory on another full OSD, or
-   **YOU WILL LOSE DATA**. You **MUST** maintain at least one copy of your data on
-   at least one OSD.  This is a rare and extreme intervention, and is not to be
-   undertaken lightly.
+See `Monitor Config Reference`_ for more information.
 
-See `Monitor Config Reference`_ for additional details.
 
 OSDs are Slow/Unresponsive
 ==========================
 
-A common issue involves slow or unresponsive OSDs. Ensure that you
-have eliminated other troubleshooting possibilities before delving into OSD
-performance issues. For example, ensure that your network(s) is working properly
-and your OSDs are running. Check to see if OSDs are throttling recovery traffic.
+OSDs are sometimes slow or unresponsive. When troubleshooting this common
+problem, it is advised to eliminate other possibilities before investigating
+OSD performance issues. For example, be sure to confirm that your network(s)
+are working properly, to verify that your OSDs are running, and to check
+whether OSDs are throttling recovery traffic.
+
+.. tip:: In pre-Luminous releases of Ceph, ``up`` and ``in`` OSDs were
+   sometimes not available or were otherwise slow because recovering OSDs were
+   consuming system resources. Newer releases provide better recovery handling
+   by preventing this phenomenon.
 
-.. tip:: Newer versions of Ceph provide better recovery handling by preventing
-   recovering OSDs from using up system resources so that ``up`` and ``in``
-   OSDs are not available or are otherwise slow.
 
 Networking Issues
 -----------------
 
-Ceph is a distributed storage system, so it relies upon networks for OSD peering
-and replication, recovery from faults, and periodic heartbeats. Networking
-issues can cause OSD latency and flapping OSDs. See `Flapping OSDs`_ for
-details.
+As a distributed storage system, Ceph relies upon networks for OSD peering and
+replication, recovery from faults, and periodic heartbeats. Networking issues
+can cause OSD latency and flapping OSDs. For more information, see `Flapping
+OSDs`_.
+
+To make sure that Ceph processes and Ceph-dependent processes are connected and
+listening, run the following commands:
 
-Ensure that Ceph processes and Ceph-dependent processes are connected and/or
-listening. ::
+.. prompt:: bash
 
-       netstat -a | grep ceph
-       netstat -l | grep ceph
-       sudo netstat -p | grep ceph
+   netstat -a | grep ceph
+   netstat -l | grep ceph
+   sudo netstat -p | grep ceph
 
-Check network statistics. ::
+To check network statistics, run the following command:
 
-       netstat -s
+.. prompt:: bash
+
+   netstat -s
 
 Drive Configuration
 -------------------
 
-A SAS or SATA storage drive should only house one OSD; NVMe drives readily
-handle two or more. Read and write throughput can bottleneck if other processes
-share the drive, including journals / metadata, operating systems, Ceph monitors,
-`syslog` logs, other OSDs, and non-Ceph processes.
+An SAS or SATA storage drive should house only one OSD, but a NVMe drive can
+easily house two or more. However, it is possible for read and write throughput
+to bottleneck if other processes share the drive. Such processes include:
+journals / metadata, operating systems, Ceph monitors, ``syslog`` logs, other
+OSDs, and non-Ceph processes.
 
-Ceph acknowledges writes *after* journaling, so fast SSDs are an
-attractive option to accelerate the response time--particularly when
-using the ``XFS`` or ``ext4`` file systems for legacy Filestore OSDs.
-By contrast, the ``Btrfs``
-file system can write and journal simultaneously.  (Note, however, that
-we recommend against using ``Btrfs`` for production deployments.)
+Because Ceph acknowledges writes *after* journaling, fast SSDs are an
+attractive option for accelerating response time -- particularly when using the
+``XFS`` or ``ext4`` filesystems for legacy FileStore OSDs.  By contrast, the
+``Btrfs`` file system can write and journal simultaneously. (However, use of
+``Btrfs`` is not recommended for production deployments.)
 
 .. note:: Partitioning a drive does not change its total throughput or
-   sequential read/write limits. Running a journal in a separate partition
-   may help, but you should prefer a separate physical drive.
+   sequential read/write limits. Throughput might be improved somewhat by
+   running a journal in a separate partition, but it is better still to run
+   such a journal in a separate physical drive.
+   
+.. warning:: Reef does not support FileStore. Releases after Reef do not
+   support FileStore. Any information that mentions FileStore is pertinent only
+   to the Quincy release of Ceph and to releases prior to Quincy.
+
 
 Bad Sectors / Fragmented Disk
 -----------------------------
 
-Check your drives for bad blocks, fragmentation, and other errors that can cause
-performance to drop substantially.  Invaluable tools include ``dmesg``, ``syslog``
-logs, and ``smartctl`` (from the ``smartmontools`` package).
+Check your drives for bad blocks, fragmentation, and other errors that can
+cause significantly degraded performance. Tools that are useful in checking for
+drive errors include ``dmesg``, ``syslog`` logs, and ``smartctl`` (found in the
+``smartmontools`` package).
+
+.. note:: ``smartmontools`` 7.0 and late provides NVMe stat passthrough and
+   JSON output.
+
 
 Co-resident Monitors/OSDs
 -------------------------
 
-Monitors are relatively lightweight processes, but they issue lots of
-``fsync()`` calls,
-which can interfere with other workloads, particularly if monitors run on the
-same drive as an OSD. Additionally, if you run monitors on the same host as
-OSDs, you may incur performance issues related to:
+Although monitors are relatively lightweight processes, performance issues can
+result when monitors are run on the same host machine as an OSD. Monitors issue
+many ``fsync()`` calls and this can interfere with other workloads. The danger
+of performance issues is especially acute when the monitors are co-resident on
+the same storage drive as an OSD. In addition, if the monitors are running an
+older kernel (pre-3.0) or a kernel with no ``syncfs(2)`` syscall, then multiple
+OSDs running on the same host might make so many commits as to undermine each
+other's performance.  This problem sometimes results in what is called "the
+bursty writes".
 
-- Running an older kernel (pre-3.0)
-- Running a kernel with no ``syncfs(2)`` syscall.
-
-In these cases, multiple OSDs running on the same host can drag each other down
-by doing lots of commits. That often leads to the bursty writes.
 
 Co-resident Processes
 ---------------------
 
-Spinning up co-resident processes (convergence) such as a cloud-based solution, virtual
-machines and other applications that write data to Ceph while operating on the
-same hardware as OSDs can introduce significant OSD latency. Generally, we
-recommend optimizing hosts for use with Ceph and using other hosts for other
-processes. The practice of separating Ceph operations from other applications
-may help improve performance and may streamline troubleshooting and maintenance.
+Significant OSD latency can result from processes that write data to Ceph (for
+example, cloud-based solutions and virtual machines) while operating on the
+same hardware as OSDs. For this reason, making such processes co-resident with
+OSDs is not generally recommended. Instead, the recommended practice is to
+optimize certain hosts for use with Ceph and use other hosts for other
+processes. This practice of separating Ceph operations from other applications
+might help improve performance and might also streamline troubleshooting and
+maintenance.
+
+Running co-resident processes on the same hardware is sometimes called
+"convergence". When using Ceph, engage in convergence only with expertise and
+after consideration.
+
 
 Logging Levels
 --------------
 
-If you turned logging levels up to track an issue and then forgot to turn
-logging levels back down, the OSD may be putting a lot of logs onto the disk. If
-you intend to keep logging levels high, you may consider mounting a drive to the
-default path for logging (i.e., ``/var/log/ceph/$cluster-$name.log``).
+Performance issues can result from high logging levels. Operators sometimes
+raise logging levels in order to track an issue and then forget to lower them
+afterwards. In such a situation, OSDs might consume valuable system resources to
+write needlessly verbose logs onto the disk. Anyone who does want to use high logging
+levels is advised to consider mounting a drive to the default path for logging
+(for example, ``/var/log/ceph/$cluster-$name.log``).
 
 Recovery Throttling
 -------------------
 
 Depending upon your configuration, Ceph may reduce recovery rates to maintain
-performance or it may increase recovery rates to the point that recovery
-impacts OSD performance. Check to see if the OSD is recovering.
+client or OSD performance, or it may increase recovery rates to the point that
+recovery impacts client or OSD performance. Check to see if the client or OSD
+is recovering.
+
 
 Kernel Version
 --------------
 
-Check the kernel version you are running. Older kernels may not receive
-new backports that Ceph depends upon for better performance.
+Check the kernel version that you are running. Older kernels may lack updates
+that improve Ceph performance. 
+
 
 Kernel Issues with SyncFS
 -------------------------
 
-Try running one OSD per host to see if performance improves. Old kernels
-might not have a recent enough version of ``glibc`` to support ``syncfs(2)``.
+If you have kernel issues with SyncFS, try running one OSD per host to see if
+performance improves. Old kernels might not have a recent enough version of
+``glibc`` to support ``syncfs(2)``.
+
 
 Filesystem Issues
 -----------------
 
-Currently, we recommend deploying clusters with the BlueStore back end.
-When running a pre-Luminous release or if you have a specific reason to deploy
-OSDs with the previous Filestore backend, we recommend ``XFS``.
+In post-Luminous releases, we recommend deploying clusters with the BlueStore
+back end.  When running a pre-Luminous release, or if you have a specific
+reason to deploy OSDs with the previous Filestore backend, we recommend
+``XFS``.
 
 We recommend against using ``Btrfs`` or ``ext4``.  The ``Btrfs`` filesystem has
-many attractive features, but bugs may lead to
-performance issues and spurious ENOSPC errors.  We do not recommend
-``ext4`` for Filestore OSDs because ``xattr`` limitations break support for long
-object names, which are needed for RGW.
+many attractive features, but bugs may lead to performance issues and spurious
+ENOSPC errors.  We do not recommend ``ext4`` for Filestore OSDs because
+``xattr`` limitations break support for long object names, which are needed for
+RGW.
 
 For more information, see `Filesystem Recommendations`_.
 
@@ -442,31 +585,32 @@ For more information, see `Filesystem Recommendations`_.
 Insufficient RAM
 ----------------
 
-We recommend a *minimum* of 4GB of RAM per OSD daemon and suggest rounding up
-from 6-8GB.  You may notice that during normal operations, ``ceph-osd``
-processes only use a fraction of that amount.
-Unused RAM makes it tempting to use the excess RAM for co-resident
-applications or to skimp on each node's memory capacity.  However,
-when OSDs experience recovery their memory utilization spikes. If
-there is insufficient RAM available, OSD performance will slow considerably
-and the daemons may even crash or be killed by the Linux ``OOM Killer``.
+We recommend a *minimum* of 4GB of RAM per OSD daemon and we suggest rounding
+up from 6GB to 8GB. During normal operations, you may notice that ``ceph-osd``
+processes use only a fraction of that amount.  You might be tempted to use the
+excess RAM for co-resident applications or to skimp on each node's memory
+capacity. However, when OSDs experience recovery their memory utilization
+spikes. If there is insufficient RAM available during recovery, OSD performance
+will slow considerably and the daemons may even crash or be killed by the Linux
+``OOM Killer``.
+
 
 Blocked Requests or Slow Requests
 ---------------------------------
 
-If a ``ceph-osd`` daemon is slow to respond to a request, messages will be logged
-noting ops that are taking too long.  The warning threshold
+When a ``ceph-osd`` daemon is slow to respond to a request, the cluster log
+receives messages reporting ops that are taking too long. The warning threshold
 defaults to 30 seconds and is configurable via the ``osd_op_complaint_time``
-setting.  When this happens, the cluster log will receive messages.
+setting.
 
 Legacy versions of Ceph complain about ``old requests``::
 
-       osd.0 192.168.106.220:6800/18813 312 : [WRN] old request osd_op(client.5099.0:790 fatty_26485_object789 [write 0~4096] 2.5e54f643) v4 received at 2012-03-06 15:42:56.054801 currently waiting for sub ops
+    osd.0 192.168.106.220:6800/18813 312 : [WRN] old request osd_op(client.5099.0:790 fatty_26485_object789 [write 0~4096] 2.5e54f643) v4 received at 2012-03-06 15:42:56.054801 currently waiting for sub ops
 
-New versions of Ceph complain about ``slow requests``::
+Newer versions of Ceph complain about ``slow requests``::
 
-       {date} {osd.num} [WRN] 1 slow requests, 1 included below; oldest blocked for > 30.005692 secs
-       {date} {osd.num}  [WRN] slow request 30.005692 seconds old, received at {date-time}: osd_op(client.4240.0:8 benchmark_data_ceph-1_39426_object7 [write 0~4194304] 0.69848840) v4 currently waiting for subops from [610]
+    {date} {osd.num} [WRN] 1 slow requests, 1 included below; oldest blocked for > 30.005692 secs
+    {date} {osd.num}  [WRN] slow request 30.005692 seconds old, received at {date-time}: osd_op(client.4240.0:8 benchmark_data_ceph-1_39426_object7 [write 0~4194304] 0.69848840) v4 currently waiting for subops from [610]
 
 Possible causes include:
 
@@ -486,27 +630,27 @@ Possible solutions:
 Debugging Slow Requests
 -----------------------
 
-If you run ``ceph daemon osd.<id> dump_historic_ops`` or ``ceph daemon osd.<id> dump_ops_in_flight``,
-you will see a set of operations and a list of events each operation went
-through. These are briefly described below.
+If you run ``ceph daemon osd.<id> dump_historic_ops`` or ``ceph daemon osd.<id>
+dump_ops_in_flight``, you will see a set of operations and a list of events
+each operation went through. These are briefly described below.
 
 Events from the Messenger layer:
 
-- ``header_read``: When the messenger first started reading the message off the wire.
-- ``throttled``: When the messenger tried to acquire memory throttle space to read
+- ``header_read``: The time that the messenger first started reading the message off the wire.
+- ``throttled``: The time that the messenger tried to acquire memory throttle space to read
   the message into memory.
-- ``all_read``: When the messenger finished reading the message off the wire.
-- ``dispatched``: When the messenger gave the message to the OSD.
+- ``all_read``: The time that the messenger finished reading the message off the wire.
+- ``dispatched``: The time that the messenger gave the message to the OSD.
 - ``initiated``: This is identical to ``header_read``. The existence of both is a
   historical oddity.
 
 Events from the OSD as it processes ops:
 
 - ``queued_for_pg``: The op has been put into the queue for processing by its PG.
-- ``reached_pg``: The PG has started doing the op.
-- ``waiting for \*``: The op is waiting for some other work to complete before it
-  can proceed (e.g. a new OSDMap; for its object target to scrub; for the PG to
-  finish peering; all as specified in the message).
+- ``reached_pg``: The PG has started performing the op.
+- ``waiting for \*``: The op is waiting for some other work to complete before
+  it can proceed (for example, a new OSDMap; the scrubbing of its object
+  target; the completion of a PG's peering; all as specified in the message).
 - ``started``: The op has been accepted as something the OSD should do and 
   is now being performed.
 - ``waiting for subops from``: The op has been sent to replica OSDs.
@@ -514,95 +658,115 @@ Events from the OSD as it processes ops:
 Events from ```Filestore```:
 
 - ``commit_queued_for_journal_write``: The op has been given to the FileStore.
-- ``write_thread_in_journal_buffer``: The op is in the journal's buffer and waiting
+- ``write_thread_in_journal_buffer``: The op is in the journal's buffer and is waiting
   to be persisted (as the next disk write).
 - ``journaled_completion_queued``: The op was journaled to disk and its callback
-  queued for invocation.
+  has been queued for invocation.
 
 Events from the OSD after data has been given to underlying storage:
 
-- ``op_commit``: The op has been committed (i.e. written to journal) by the
+- ``op_commit``: The op has been committed (that is, written to journal) by the
   primary OSD.
-- ``op_applied``: The op has been `write()'en <https://www.freebsd.org/cgi/man.cgi?write(2)>`_ to the backing FS (i.e.   applied in memory but not flushed out to disk) on the primary.
+- ``op_applied``: The op has been `write()'en
+  <https://www.freebsd.org/cgi/man.cgi?write(2)>`_ to the backing FS (that is,
+  applied in memory but not flushed out to disk) on the primary.
 - ``sub_op_applied``: ``op_applied``, but for a replica's "subop".
 - ``sub_op_committed``: ``op_commit``, but for a replica's subop (only for EC pools).
 - ``sub_op_commit_rec/sub_op_apply_rec from <X>``: The primary marks this when it
   hears about the above, but for a particular replica (i.e. ``<X>``).
 - ``commit_sent``: We sent a reply back to the client (or primary OSD, for sub ops).
 
-Many of these events are seemingly redundant, but cross important boundaries in
-the internal code (such as passing data across locks into new threads).
+Some of these events may appear redundant, but they cross important boundaries
+in the internal code (such as passing data across locks into new threads).
+
 
 Flapping OSDs
 =============
 
-When OSDs peer and check heartbeats, they use the cluster (back-end)
-network when it's available. See `Monitor/OSD Interaction`_ for details.
+"Flapping" is the term for the phenomenon of an OSD being repeatedly marked
+``up`` and then ``down`` in rapid succession.  This section explains how to
+recognize flapping, and how to mitigate it.
+
+When OSDs peer and check heartbeats, they use the cluster (back-end) network
+when it is available. See `Monitor/OSD Interaction`_ for details.
 
-We have traditionally recommended separate *public* (front-end) and *private*
-(cluster / back-end / replication) networks:
+The upstream Ceph community has traditionally recommended separate *public*
+(front-end) and *private* (cluster / back-end / replication) networks. This
+provides the following benefits:
 
-#. Segregation of heartbeat and replication / recovery traffic (private)
-   from client and OSD <-> mon traffic (public).  This helps keep one
-   from DoS-ing the other, which could in turn result in a cascading failure.
+#. Segregation of (1) heartbeat traffic and replication/recovery traffic
+   (private) from (2) traffic from clients and between OSDs and monitors
+   (public). This helps keep one stream of traffic from DoS-ing the other,
+   which could in turn result in a cascading failure.
 
 #. Additional throughput for both public and private traffic.
 
-When common networking technologies were 100Mb/s and 1Gb/s, this separation
-was often critical.  With today's 10Gb/s, 40Gb/s, and 25/50/100Gb/s
-networks, the above capacity concerns are often diminished or even obviated.
-For example, if your OSD nodes have two network ports, dedicating one to
-the public and the other to the private network means no path redundancy.
-This degrades your ability to weather network maintenance and failures without
-significant cluster or client impact.  Consider instead using both links
-for just a public network:  with bonding (LACP) or equal-cost routing (e.g. FRR)
-you reap the benefits of increased throughput headroom, fault tolerance, and
-reduced OSD flapping.
+In the past, when common networking technologies were measured in a range
+encompassing 100Mb/s and 1Gb/s, this separation was often critical. But with
+today's 10Gb/s, 40Gb/s, and 25/50/100Gb/s networks, the above capacity concerns
+are often diminished or even obviated.  For example, if your OSD nodes have two
+network ports, dedicating one to the public and the other to the private
+network means that you have no path redundancy.  This degrades your ability to
+endure network maintenance and network failures without significant cluster or
+client impact. In situations like this, consider instead using both links for
+only a public network: with bonding (LACP) or equal-cost routing (for example,
+FRR) you reap the benefits of increased throughput headroom, fault tolerance,
+and reduced OSD flapping.
 
 When a private network (or even a single host link) fails or degrades while the
-public network operates normally, OSDs may not handle this situation well. What
-happens is that OSDs use the public network to report each other ``down`` to
-the monitors, while marking themselves ``up``. The monitors then send out,
-again on the public network, an updated cluster map with affected OSDs marked
-`down`. These OSDs reply to the monitors "I'm not dead yet!", and the cycle
-repeats.  We call this scenario 'flapping`, and it can be difficult to isolate
-and remediate.  With no private network, this irksome dynamic is avoided:
-OSDs are generally either ``up`` or ``down`` without flapping.
-
-If something does cause OSDs to 'flap' (repeatedly getting marked ``down`` and
+public network continues operating normally, OSDs may not handle this situation
+well. In such situations, OSDs use the public network to report each other
+``down`` to the monitors, while marking themselves ``up``. The monitors then
+send out-- again on the public network--an updated cluster map with the
+affected OSDs marked `down`. These OSDs reply to the monitors "I'm not dead
+yet!", and the cycle repeats. We call this scenario 'flapping`, and it can be
+difficult to isolate and remediate. Without a private network, this irksome
+dynamic is avoided: OSDs are generally either ``up`` or ``down`` without
+flapping.
+
+If something does cause OSDs to 'flap' (repeatedly being marked ``down`` and
 then ``up`` again), you can force the monitors to halt the flapping by
-temporarily freezing their states::
+temporarily freezing their states:
 
-       ceph osd set noup      # prevent OSDs from getting marked up
-       ceph osd set nodown    # prevent OSDs from getting marked down
+.. prompt:: bash
 
-These flags are recorded in the osdmap::
+   ceph osd set noup      # prevent OSDs from getting marked up
+   ceph osd set nodown    # prevent OSDs from getting marked down
 
-       ceph osd dump | grep flags
-       flags no-up,no-down
+These flags are recorded in the osdmap:
 
-You can clear the flags with::
+.. prompt:: bash
 
-       ceph osd unset noup
-       ceph osd unset nodown
+   ceph osd dump | grep flags
 
-Two other flags are supported, ``noin`` and ``noout``, which prevent
-booting OSDs from being marked ``in`` (allocated data) or protect OSDs
-from eventually being marked ``out`` (regardless of what the current value for
-``mon_osd_down_out_interval`` is).
+::
+
+   flags no-up,no-down
+
+You can clear these flags with:
+
+.. prompt:: bash
 
-.. note:: ``noup``, ``noout``, and ``nodown`` are temporary in the
-   sense that once the flags are cleared, the action they were blocking
-   should occur shortly after.  The ``noin`` flag, on the other hand,
-   prevents OSDs from being marked ``in`` on boot, and any daemons that
-   started while the flag was set will remain that way.
+   ceph osd unset noup
+   ceph osd unset nodown
 
-.. note:: The causes and effects of flapping can be somewhat mitigated through
-   careful adjustments to the ``mon_osd_down_out_subtree_limit``,
+Two other flags are available, ``noin`` and ``noout``, which prevent booting
+OSDs from being marked ``in`` (allocated data) or protect OSDs from eventually
+being marked ``out`` (regardless of the current value of
+``mon_osd_down_out_interval``).
+
+.. note:: ``noup``, ``noout``, and ``nodown`` are temporary in the sense that
+   after the flags are cleared, the action that they were blocking should be
+   possible shortly thereafter. But the ``noin`` flag prevents OSDs from being
+   marked ``in`` on boot, and any daemons that started while the flag was set
+   will remain that way.
+
+.. note:: The causes and effects of flapping can be mitigated somewhat by
+   making careful adjustments to ``mon_osd_down_out_subtree_limit``,
    ``mon_osd_reporter_subtree_level``, and ``mon_osd_min_down_reporters``.
    Derivation of optimal settings depends on cluster size, topology, and the
-   Ceph  release in use. Their interactions are subtle and beyond the scope of
-   this document.
+   Ceph release in use. The interaction of all of these factors is subtle and
+   is beyond the scope of this document.
 
 
 .. _iostat: https://en.wikipedia.org/wiki/Iostat
@@ -612,6 +776,9 @@ from eventually being marked ``out`` (regardless of what the current value for
 .. _Monitor/OSD Interaction: ../../configuration/mon-osd-interaction
 .. _Monitor Config Reference: ../../configuration/mon-config-ref
 .. _monitoring your OSDs: ../../operations/monitoring-osd-pg
+
+.. _monitoring OSDs: ../../operations/monitoring-osd-pg/#monitoring-osds
+
 .. _subscribe to the ceph-devel email list: mailto:majordomo@vger.kernel.org?body=subscribe+ceph-devel
 .. _unsubscribe from the ceph-devel email list: mailto:majordomo@vger.kernel.org?body=unsubscribe+ceph-devel
 .. _subscribe to the ceph-users email list: mailto:ceph-users-join@lists.ceph.com
index b7ca679ae6f02caa46dd5ef3d76c3219b1e77990..74d04bd9ffe39ff5c342aa9e0840d86e018f44eb 100644 (file)
-=====================
+====================
  Troubleshooting PGs
-=====================
+====================
 
 Placement Groups Never Get Clean
 ================================
 
-When you create a cluster and your cluster remains in ``active``,
-``active+remapped`` or ``active+degraded`` status and never achieves an
-``active+clean`` status, you likely have a problem with your configuration.
+If, after you have created your cluster, any Placement Groups (PGs) remain in
+the ``active`` status, the ``active+remapped`` status or the
+``active+degraded`` status and never achieves an ``active+clean`` status, you
+likely have a problem with your configuration.
 
-You may need to review settings in the `Pool, PG and CRUSH Config Reference`_
-and make appropriate adjustments.
+In such a situation, it may be necessary to review the settings in the `Pool,
+PG and CRUSH Config Reference`_ and make appropriate adjustments.
 
-As a general rule, you should run your cluster with more than one OSD and a
-pool size greater than 1 object replica.
+As a general rule, run your cluster with more than one OSD and a pool size
+greater than two object replicas.
 
 .. _one-node-cluster:
 
 One Node Cluster
 ----------------
 
-Ceph no longer provides documentation for operating on a single node, because
-you would never deploy a system designed for distributed computing on a single
-node. Additionally, mounting client kernel modules on a single node containing a
-Ceph  daemon may cause a deadlock due to issues with the Linux kernel itself
-(unless you use VMs for the clients). You can experiment with Ceph in a 1-node
+Ceph no longer provides documentation for operating on a single node.  Systems
+designed for distributed computing by definition do not run on a single node.
+The mounting of client kernel modules on a single node that contains a Ceph
+daemon may cause a deadlock due to issues with the Linux kernel itself (unless
+VMs are used as clients). You can experiment with Ceph in a one-node
 configuration, in spite of the limitations as described herein.
 
-If you are trying to create a cluster on a single node, you must change the
-default of the ``osd_crush_chooseleaf_type`` setting from ``1`` (meaning
+To create a cluster on a single node, you must change the
+``osd_crush_chooseleaf_type`` setting from the default of ``1`` (meaning
 ``host`` or ``node``) to ``0`` (meaning ``osd``) in your Ceph configuration
-file before you create your monitors and OSDs. This tells Ceph that an OSD
-can peer with another OSD on the same host. If you are trying to set up a
-1-node cluster and ``osd_crush_chooseleaf_type`` is greater than ``0``,
-Ceph will try to peer the PGs of one OSD with the PGs of another OSD on
-another node, chassis, rack, row, or even datacenter depending on the setting.
+file before you create your monitors and OSDs. This tells Ceph that an OSD is
+permitted to place another OSD on the same host. If you are trying to set up a
+single-node cluster and ``osd_crush_chooseleaf_type`` is greater than ``0``,
+Ceph will attempt to place the PGs of one OSD with the PGs of another OSD on
+another node, chassis, rack, row, or datacenter depending on the setting.
 
-.. tip:: DO NOT mount kernel clients directly on the same node as your
-   Ceph Storage Cluster, because kernel conflicts can arise. However, you
-   can mount kernel clients within virtual machines (VMs) on a single node.
+.. tip:: DO NOT mount kernel clients directly on the same node as your Ceph
+   Storage Cluster. Kernel conflicts can arise. However, you can mount kernel
+   clients within virtual machines (VMs) on a single node.
 
-If you are creating OSDs using a single disk, you must create directories
-for the data manually first.
+If you are creating OSDs using a single disk, you must manually create
+directories for the data first.
 
 
 Fewer OSDs than Replicas
 ------------------------
 
-If you have brought up two OSDs to an ``up`` and ``in`` state, but you still
-don't see ``active + clean`` placement groups, you may have an
-``osd_pool_default_size`` set to greater than ``2``.
+If two OSDs are in an ``up`` and ``in`` state, but the placement gropus are not
+in an ``active + clean`` state, you may have an ``osd_pool_default_size`` set
+to greater than ``2``.
 
 There are a few ways to address this situation. If you want to operate your
 cluster in an ``active + degraded`` state with two replicas, you can set the
-``osd_pool_default_min_size`` to ``2`` so that you can write objects in
-an ``active + degraded`` state. You may also set the ``osd_pool_default_size``
-setting to ``2`` so that you only have two stored replicas (the original and
-one replica), in which case the cluster should achieve an ``active + clean``
+``osd_pool_default_min_size`` to ``2`` so that you can write objects in an
+``active + degraded`` state. You may also set the ``osd_pool_default_size``
+setting to ``2`` so that you have only two stored replicas (the original and
+one replica). In such a case, the cluster should achieve an ``active + clean``
 state.
 
-.. note:: You can make the changes at runtime. If you make the changes in
-   your Ceph configuration file, you may need to restart your cluster.
+.. note:: You can make the changes while the cluster is running. If you make
+   the changes in your Ceph configuration file, you might need to restart your
+   cluster.
 
 
 Pool Size = 1
 -------------
 
-If you have the ``osd_pool_default_size`` set to ``1``, you will only have
-one copy of the object. OSDs rely on other OSDs to tell them which objects
-they should have. If a first OSD has a copy of an object and there is no
-second copy, then no second OSD can tell the first OSD that it should have
-that copy. For each placement group mapped to the first OSD (see
-``ceph pg dump``), you can force the first OSD to notice the placement groups
-it needs by running::
+If you have ``osd_pool_default_size`` set to ``1``, you will have only one copy
+of the object. OSDs rely on other OSDs to tell them which objects they should
+have. If one OSD has a copy of an object and there is no second copy, then
+there is no second OSD to tell the first OSD that it should have that copy. For
+each placement group mapped to the first OSD (see ``ceph pg dump``), you can
+force the first OSD to notice the placement groups it needs by running a
+command of the following form:
 
-       ceph osd force-create-pg <pgid>
+.. prompt:: bash
+
+   ceph osd force-create-pg <pgid>
 
 
 CRUSH Map Errors
 ----------------
 
-Another candidate for placement groups remaining unclean involves errors
+If any placement groups in your cluster are unclean, then there might be errors
 in your CRUSH map.
 
 
 Stuck Placement Groups
 ======================
 
-It is normal for placement groups to enter states like "degraded" or "peering"
-following a failure.  Normally these states indicate the normal progression
-through the failure recovery process. However, if a placement group stays in one
-of these states for a long time this may be an indication of a larger problem.
-For this reason, the monitor will warn when placement groups get "stuck" in a
-non-optimal state.  Specifically, we check for:
+It is normal for placement groups to enter "degraded" or "peering" states after
+a component failure. Normally, these states reflect the expected progression
+through the failure recovery process. However, a placement group that stays in
+one of these states for a long time might be an indication of a larger problem.
+For this reason, the Ceph Monitors will warn when placement groups get "stuck"
+in a non-optimal state. Specifically, we check for:
+
+* ``inactive`` - The placement group has not been ``active`` for too long (that
+  is, it hasn't been able to service read/write requests).
 
-* ``inactive`` - The placement group has not been ``active`` for too long
-  (i.e., it hasn't been able to service read/write requests).
+* ``unclean`` - The placement group has not been ``clean`` for too long (that
+  is, it hasn't been able to completely recover from a previous failure).
 
-* ``unclean`` - The placement group has not been ``clean`` for too long
-  (i.e., it hasn't been able to completely recover from a previous failure).
+* ``stale`` - The placement group status has not been updated by a
+  ``ceph-osd``.  This indicates that all nodes storing this placement group may
+  be ``down``.
 
-* ``stale`` - The placement group status has not been updated by a ``ceph-osd``,
-  indicating that all nodes storing this placement group may be ``down``.
+List stuck placement groups by running one of the following commands:
 
-You can explicitly list stuck placement groups with one of::
+.. prompt:: bash
 
-       ceph pg dump_stuck stale
-       ceph pg dump_stuck inactive
-       ceph pg dump_stuck unclean
+   ceph pg dump_stuck stale
+   ceph pg dump_stuck inactive
+   ceph pg dump_stuck unclean
 
-For stuck ``stale`` placement groups, it is normally a matter of getting the
-right ``ceph-osd`` daemons running again.  For stuck ``inactive`` placement
-groups, it is usually a peering problem (see :ref:`failures-osd-peering`).  For
-stuck ``unclean`` placement groups, there is usually something preventing
-recovery from completing, like unfound objects (see
-:ref:`failures-osd-unfound`);
+- Stuck ``stale`` placement groups usually indicate that key ``ceph-osd``
+  daemons are not running.
+- Stuck ``inactive`` placement groups usually indicate a peering problem (see
+  :ref:`failures-osd-peering`).
+- Stuck ``unclean`` placement groups usually indicate that something is
+  preventing recovery from completing, possibly unfound objects (see
+  :ref:`failures-osd-unfound`);
 
 
 
@@ -123,21 +131,28 @@ recovery from completing, like unfound objects (see
 Placement Group Down - Peering Failure
 ======================================
 
-In certain cases, the ``ceph-osd`` `Peering` process can run into
-problems, preventing a PG from becoming active and usable.  For
-example, ``ceph health`` might report::
+In certain cases, the ``ceph-osd`` `peering` process can run into problems,
+which can prevent a PG from becoming active and usable. In such a case, running
+the command ``ceph health detail`` will report something similar to the following:
+
+.. prompt:: bash
+
+   ceph health detail
 
-       ceph health detail
-       HEALTH_ERR 7 pgs degraded; 12 pgs down; 12 pgs peering; 1 pgs recovering; 6 pgs stuck unclean; 114/3300 degraded (3.455%); 1/3 in osds are down
-       ...
-       pg 0.5 is down+peering
-       pg 1.4 is down+peering
-       ...
-       osd.1 is down since epoch 69, last address 192.168.106.220:6801/8651
+::
+
+    HEALTH_ERR 7 pgs degraded; 12 pgs down; 12 pgs peering; 1 pgs recovering; 6 pgs stuck unclean; 114/3300 degraded (3.455%); 1/3 in osds are down
+    ...
+    pg 0.5 is down+peering
+    pg 1.4 is down+peering
+    ...
+    osd.1 is down since epoch 69, last address 192.168.106.220:6801/8651
 
-We can query the cluster to determine exactly why the PG is marked ``down`` with::
+Query the cluster to determine exactly why the PG is marked ``down`` by running a command of the following form:
 
-       ceph pg 0.5 query
+.. prompt:: bash
+
+   ceph pg 0.5 query
 
 .. code-block:: javascript
 
@@ -164,21 +179,24 @@ We can query the cluster to determine exactly why the PG is marked ``down`` with
     ]
  }
 
-The ``recovery_state`` section tells us that peering is blocked due to
-down ``ceph-osd`` daemons, specifically ``osd.1``.  In this case, we can start that ``ceph-osd``
-and things will recover.
+The ``recovery_state`` section tells us that peering is blocked due to down
+``ceph-osd`` daemons, specifically ``osd.1``. In this case, we can start that
+particular ``ceph-osd`` and recovery will proceed.
+
+Alternatively, if there is a catastrophic failure of ``osd.1`` (for example, if
+there has been a disk failure), the cluster can be informed that the OSD is
+``lost`` and the cluster can be instructed that it must cope as best it can.
 
-Alternatively, if there is a catastrophic failure of ``osd.1`` (e.g., disk
-failure), we can tell the cluster that it is ``lost`` and to cope as
-best it can.
+.. important:: Informing the cluster that an OSD has been lost is dangerous
+   because the cluster cannot guarantee that the other copies of the data are
+   consistent and up to date.
 
-.. important:: This is dangerous in that the cluster cannot
-   guarantee that the other copies of the data are consistent
-   and up to date.
+To report an OSD ``lost`` and to instruct Ceph to continue to attempt recovery
+anyway, run a command of the following form:
 
-To instruct Ceph to continue anyway::
+.. prompt:: bash
 
-       ceph osd lost 1
+   ceph osd lost 1
 
 Recovery will proceed.
 
@@ -188,32 +206,43 @@ Recovery will proceed.
 Unfound Objects
 ===============
 
-Under certain combinations of failures Ceph may complain about
-``unfound`` objects::
+Under certain combinations of failures, Ceph may complain about ``unfound``
+objects, as in this example:
+
+.. prompt:: bash
 
-       ceph health detail
-       HEALTH_WARN 1 pgs degraded; 78/3778 unfound (2.065%)
-       pg 2.4 is active+degraded, 78 unfound
+   ceph health detail
 
-This means that the storage cluster knows that some objects (or newer
-copies of existing objects) exist, but it hasn't found copies of them.
-One example of how this might come about for a PG whose data is on ceph-osds
-1 and 2:
+::
+
+   HEALTH_WARN 1 pgs degraded; 78/3778 unfound (2.065%)
+   pg 2.4 is active+degraded, 78 unfound
+
+This means that the storage cluster knows that some objects (or newer copies of
+existing objects) exist, but it hasn't found copies of them.  Here is an
+example of how this might come about for a PG whose data is on two OSDS, which
+we will call "1" and "2":
 
 * 1 goes down
 * 2 handles some writes, alone
 * 1 comes up
-* 1 and 2 repeer, and the objects missing on 1 are queued for recovery.
+* 1 and 2 re-peer, and the objects missing on 1 are queued for recovery.
 * Before the new objects are copied, 2 goes down.
 
-Now 1 knows that these object exist, but there is no live ``ceph-osd`` who
-has a copy.  In this case, IO to those objects will block, and the
-cluster will hope that the failed node comes back soon; this is
-assumed to be preferable to returning an IO error to the user.
+At this point, 1 knows that these objects exist, but there is no live
+``ceph-osd`` that has a copy of the objects. In this case, IO to those objects
+will block, and the cluster will hope that the failed node comes back soon.
+This is assumed to be preferable to returning an IO error to the user.
+
+.. note:: The situation described immediately above is one reason that setting
+   ``size=2`` on a replicated pool and ``m=1`` on an erasure coded pool risks
+   data loss.
 
-First, you can identify which objects are unfound with::
+Identify which objects are unfound by running a command of the following form:
 
-       ceph pg 2.4 list_unfound [starting offset, in json]
+.. prompt:: bash
+
+   ceph pg 2.4 list_unfound [starting offset, in json]
 
 .. code-block:: javascript
 
@@ -252,22 +281,24 @@ First, you can identify which objects are unfound with::
     "more": false
   }
 
-If there are too many objects to list in a single result, the ``more``
-field will be true and you can query for more.  (Eventually the
-command line tool will hide this from you, but not yet.)
+If there are too many objects to list in a single result, the ``more`` field
+will be true and you can query for more.  (Eventually the command line tool
+will hide this from you, but not yet.)
+
+Now you can identify which OSDs have been probed or might contain data.
 
-Second, you can identify which OSDs have been probed or might contain
-data.
+At the end of the listing (before ``more: false``), ``might_have_unfound`` is
+provided when ``available_might_have_unfound`` is true.  This is equivalent to
+the output of ``ceph pg #.# query``.  This eliminates the need to use ``query``
+directly.  The ``might_have_unfound`` information given behaves the same way as
+that ``query`` does, which is described below.  The only difference is that
+OSDs that have the status of ``already probed`` are ignored.
 
-At the end of the listing (before ``more`` is false), ``might_have_unfound`` is provided
-when ``available_might_have_unfound`` is true.  This is equivalent to the output
-of ``ceph pg #.# query``.  This eliminates the need to use ``query`` directly.
-The ``might_have_unfound`` information given behaves the same way as described below for ``query``.
-The only difference is that OSDs that have ``already probed`` status are ignored.
+Use of ``query``:
 
-Use of ``query``::
+.. prompt:: bash
 
-       ceph pg 2.4 query
+   ceph pg 2.4 query
 
 .. code-block:: javascript
 
@@ -278,8 +309,8 @@ Use of ``query``::
                 { "osd": 1,
                   "status": "osd is down"}]},
 
-In this case, for example, the cluster knows that ``osd.1`` might have
-data, but it is ``down``.  The full range of possible states include:
+In this case, the cluster knows that ``osd.1`` might have data, but it is
+``down``. Here is the full range of possible states:
 
 * already probed
 * querying
@@ -289,106 +320,135 @@ data, but it is ``down``.  The full range of possible states include:
 Sometimes it simply takes some time for the cluster to query possible
 locations.
 
-It is possible that there are other locations where the object can
-exist that are not listed.  For example, if a ceph-osd is stopped and
-taken out of the cluster, the cluster fully recovers, and due to some
-future set of failures ends up with an unfound object, it won't
-consider the long-departed ceph-osd as a potential location to
-consider.  (This scenario, however, is unlikely.)
+It is possible that there are other locations where the object might exist that
+are not listed. For example: if an OSD is stopped and taken out of the cluster
+and then the cluster fully recovers, and then through a subsequent set of
+failures the cluster ends up with an unfound object, the cluster will ignore
+the removed OSD. (This scenario, however, is unlikely.)
 
-If all possible locations have been queried and objects are still
-lost, you may have to give up on the lost objects. This, again, is
-possible given unusual combinations of failures that allow the cluster
-to learn about writes that were performed before the writes themselves
-are recovered.  To mark the "unfound" objects as "lost"::
+If all possible locations have been queried and objects are still lost, you may
+have to give up on the lost objects. This, again, is possible only when unusual
+combinations of failures have occurred that allow the cluster to learn about
+writes that were performed before the writes themselves have been recovered. To
+mark the "unfound" objects as "lost", run a command of the following form:
 
-       ceph pg 2.5 mark_unfound_lost revert|delete
+.. prompt:: bash
 
-This the final argument specifies how the cluster should deal with
-lost objects.
+   ceph pg 2.5 mark_unfound_lost revert|delete
 
-The "delete" option will forget about them entirely.
+Here the final argument (``revert|delete``) specifies how the cluster should
+deal with lost objects.
 
-The "revert" option (not available for erasure coded pools) will
-either roll back to a previous version of the object or (if it was a
-new object) forget about it entirely.  Use this with caution, as it
-may confuse applications that expected the object to exist.
+The ``delete`` option will cause the cluster to forget about them entirely.
 
+The ``revert`` option (which is not available for erasure coded pools) will
+either roll back to a previous version of the object or (if it was a new
+object) forget about the object entirely. Use ``revert`` with caution, as it
+may confuse applications that expect the object to exist.
 
 Homeless Placement Groups
 =========================
 
-It is possible for all OSDs that had copies of a given placement groups to fail.
-If that's the case, that subset of the object store is unavailable, and the
-monitor will receive no status updates for those placement groups.  To detect
-this situation, the monitor marks any placement group whose primary OSD has
-failed as ``stale``.  For example::
+It is possible that every OSD that has copies of a given placement group fails.
+If this happens, then the subset of the object store that contains those
+placement groups becomes unavailable and the monitor will receive no status
+updates for those placement groups. The monitor marks as ``stale`` any
+placement group whose primary OSD has failed. For example:
+
+.. prompt:: bash
+
+   ceph health
 
-       ceph health
-       HEALTH_WARN 24 pgs stale; 3/300 in osds are down
+::
 
-You can identify which placement groups are ``stale``, and what the last OSDs to
-store them were, with::
+    HEALTH_WARN 24 pgs stale; 3/300 in osds are down
 
-       ceph health detail
-       HEALTH_WARN 24 pgs stale; 3/300 in osds are down
-       ...
-       pg 2.5 is stuck stale+active+remapped, last acting [2,0]
-       ...
-       osd.10 is down since epoch 23, last address 192.168.106.220:6800/11080
-       osd.11 is down since epoch 13, last address 192.168.106.220:6803/11539
-       osd.12 is down since epoch 24, last address 192.168.106.220:6806/11861
+Identify which placement groups are ``stale`` and which were the last OSDs to
+store the ``stale`` placement groups by running the following command:
 
-If we want to get placement group 2.5 back online, for example, this tells us that
-it was last managed by ``osd.0`` and ``osd.2``.  Restarting those ``ceph-osd``
-daemons will allow the cluster to recover that placement group (and, presumably,
-many others).
+.. prompt:: bash
+
+   ceph health detail
+
+::
+
+   HEALTH_WARN 24 pgs stale; 3/300 in osds are down
+   ...
+   pg 2.5 is stuck stale+active+remapped, last acting [2,0]
+   ...
+   osd.10 is down since epoch 23, last address 192.168.106.220:6800/11080
+   osd.11 is down since epoch 13, last address 192.168.106.220:6803/11539
+   osd.12 is down since epoch 24, last address 192.168.106.220:6806/11861
+
+This output indicates that placement group 2.5 (``pg 2.5``) was last managed by
+``osd.0`` and ``osd.2``. Restart those OSDs to allow the cluster to recover
+that placement group.
 
 
 Only a Few OSDs Receive Data
 ============================
 
-If you have many nodes in your cluster and only a few of them receive data,
-`check`_ the number of placement groups in your pool. Since placement groups get
-mapped to OSDs, a small number of placement groups will not distribute across
-your cluster. Try creating a pool with a placement group count that is a
-multiple of the number of OSDs. See `Placement Groups`_ for details. The default
-placement group count for pools is not useful, but you can change it `here`_.
+If only a few of the nodes in the cluster are receiving data, check the number
+of placement groups in the pool as instructed in the :ref:`Placement Groups
+<rados_ops_pgs_get_pg_num>` documentation. Since placement groups get mapped to
+OSDs in an operation involving dividing the number of placement groups in the
+cluster by the number of OSDs in the cluster, a small number of placement
+groups (the remainder, in this operation) are sometimes not distributed across
+the cluster. In situations like this, create a pool with a placement group
+count that is a multiple of the number of OSDs. See `Placement Groups`_ for
+details. See the :ref:`Pool, PG, and CRUSH Config Reference
+<rados_config_pool_pg_crush_ref>` for instructions on changing the default
+values used to determine how many placement groups are assigned to each pool.
 
 
 Can't Write Data
 ================
 
-If your cluster is up, but some OSDs are down and you cannot write data,
-check to ensure that you have the minimum number of OSDs running for the
-placement group. If you don't have the minimum number of OSDs running,
-Ceph will not allow you to write data because there is no guarantee
-that Ceph can replicate your data. See ``osd_pool_default_min_size``
-in the `Pool, PG and CRUSH Config Reference`_ for details.
+If the cluster is up, but some OSDs are down and you cannot write data, make
+sure that you have the minimum number of OSDs running in the pool. If you don't
+have the minimum number of OSDs running in the pool, Ceph will not allow you to
+write data to it because there is no guarantee that Ceph can replicate your
+data. See ``osd_pool_default_min_size`` in the :ref:`Pool, PG, and CRUSH
+Config Reference <rados_config_pool_pg_crush_ref>` for details.
 
 
 PGs Inconsistent
 ================
 
-If you receive an ``active + clean + inconsistent`` state, this may happen
-due to an error during scrubbing. As always, we can identify the inconsistent
-placement group(s) with::
+If the command ``ceph health detail`` returns an ``active + clean +
+inconsistent`` state, this might indicate an error during scrubbing. Identify
+the inconsistent placement group or placement groups by running the following
+command:
+
+.. prompt:: bash
 
     $ ceph health detail
+
+::
+
     HEALTH_ERR 1 pgs inconsistent; 2 scrub errors
     pg 0.6 is active+clean+inconsistent, acting [0,1,2]
     2 scrub errors
 
-Or if you prefer inspecting the output in a programmatic way::
+Alternatively, run this command if you prefer to inspect the output in a
+programmatic way:
+
+.. prompt:: bash
+
+   $ rados list-inconsistent-pg rbd
+
+::
 
-    $ rados list-inconsistent-pg rbd
     ["0.6"]
 
 There is only one consistent state, but in the worst case, we could have
 different inconsistencies in multiple perspectives found in more than one
-objects. If an object named ``foo`` in PG ``0.6`` is truncated, we will have::
+object. If an object named ``foo`` in PG ``0.6`` is truncated, the output of
+``rados list-inconsistent-pg rbd`` will look something like this:
+
+.. prompt:: bash
 
-    $ rados list-inconsistent-obj 0.6 --format=json-pretty
+   rados list-inconsistent-obj 0.6 --format=json-pretty
 
 .. code-block:: javascript
 
@@ -442,82 +502,103 @@ objects. If an object named ``foo`` in PG ``0.6`` is truncated, we will have::
         ]
     }
 
-In this case, we can learn from the output:
+In this case, the output indicates the following:
 
-* The only inconsistent object is named ``foo``, and it is its head that has
+* The only inconsistent object is named ``foo``, and its head has
   inconsistencies.
 * The inconsistencies fall into two categories:
 
-  * ``errors``: these errors indicate inconsistencies between shards without a
-    determination of which shard(s) are bad. Check for the ``errors`` in the
-    `shards` array, if available, to pinpoint the problem.
-
-    * ``data_digest_mismatch``: the digest of the replica read from OSD.2 is
-      different from the ones of OSD.0 and OSD.1
-    * ``size_mismatch``: the size of the replica read from OSD.2 is 0, while
-      the size reported by OSD.0 and OSD.1 is 968.
-  * ``union_shard_errors``: the union of all shard specific ``errors`` in
-    ``shards`` array. The ``errors`` are set for the given shard that has the
-    problem. They include errors like ``read_error``. The ``errors`` ending in
-    ``oi`` indicate a comparison with ``selected_object_info``. Look at the
-    ``shards`` array to determine which shard has which error(s).
-
-    * ``data_digest_mismatch_info``: the digest stored in the object-info is not
-      ``0xffffffff``, which is calculated from the shard read from OSD.2
-    * ``size_mismatch_info``: the size stored in the object-info is different
-      from the one read from OSD.2. The latter is 0.
-
-You can repair the inconsistent placement group by executing::
+  #. ``errors``: these errors indicate inconsistencies between shards, without
+     an indication of which shard(s) are bad. Check for the ``errors`` in the
+     ``shards`` array, if available, to pinpoint the problem.
+
+     * ``data_digest_mismatch``: the digest of the replica read from ``OSD.2``
+       is different from the digests of the replica reads of ``OSD.0`` and
+       ``OSD.1``
+     * ``size_mismatch``: the size of the replica read from ``OSD.2`` is ``0``,
+       but the size reported by ``OSD.0`` and ``OSD.1`` is ``968``.
+
+  #. ``union_shard_errors``: the union of all shard-specific ``errors`` in the
+     ``shards`` array. The ``errors`` are set for the shard with the problem.
+     These errors include ``read_error`` and other similar errors. The
+     ``errors`` ending in ``oi`` indicate a comparison with
+     ``selected_object_info``. Examine the ``shards`` array to determine
+     which shard has which error or errors.
+
+     * ``data_digest_mismatch_info``: the digest stored in the ``object-info``
+       is not ``0xffffffff``, which is calculated from the shard read from
+       ``OSD.2``
+     * ``size_mismatch_info``: the size stored in the ``object-info`` is
+       different from the size read from ``OSD.2``. The latter is ``0``.
+
+.. warning:: If ``read_error`` is listed in a shard's ``errors`` attribute, the
+   inconsistency is likely due to physical storage errors. In cases like this,
+   check the storage used by that OSD. 
+   
+   Examine the output of ``dmesg`` and ``smartctl`` before attempting a drive
+   repair.
+
+To repair the inconsistent placement group, run a command of the following
+form:
+
+.. prompt:: bash
+
+   ceph pg repair {placement-group-ID}
+    
+.. warning: This command overwrites the "bad" copies with "authoritative"
+   copies. In most cases, Ceph is able to choose authoritative copies from all
+   the available replicas by using some predefined criteria. This, however,
+   does not work in every case. For example, it might be the case that the
+   stored data digest is missing, which means that the calculated digest is
+   ignored when Ceph chooses the authoritative copies. Be aware of this, and
+   use the above command with caution.
 
-       ceph pg repair {placement-group-ID}
-
-Which overwrites the `bad` copies with the `authoritative` ones. In most cases,
-Ceph is able to choose authoritative copies from all available replicas using
-some predefined criteria. But this does not always work. For example, the stored
-data digest could be missing, and the calculated digest will be ignored when
-choosing the authoritative copies. So, please use the above command with caution.
-
-If ``read_error`` is listed in the ``errors`` attribute of a shard, the
-inconsistency is likely due to disk errors. You might want to check your disk
-used by that OSD.
 
 If you receive ``active + clean + inconsistent`` states periodically due to
-clock skew, you may consider configuring your `NTP`_ daemons on your
-monitor hosts to act as peers. See `The Network Time Protocol`_ and Ceph
-`Clock Settings`_ for additional details.
+clock skew, consider configuring the `NTP
+<https://en.wikipedia.org/wiki/Network_Time_Protocol>`_ daemons on your monitor
+hosts to act as peers. See `The Network Time Protocol <http://www.ntp.org>`_
+and Ceph :ref:`Clock Settings <mon-config-ref-clock>` for more information.
 
 
 Erasure Coded PGs are not active+clean
 ======================================
 
-When CRUSH fails to find enough OSDs to map to a PG, it will show as a
-``2147483647`` which is ITEM_NONE or ``no OSD found``. For instance::
+If CRUSH fails to find enough OSDs to map to a PG, it will show as a
+``2147483647`` which is ``ITEM_NONE`` or ``no OSD found``. For example::
 
      [2,1,6,0,5,8,2147483647,7,4]
 
 Not enough OSDs
 ---------------
 
-If the Ceph cluster only has 8 OSDs and the erasure coded pool needs
-9, that is what it will show. You can either create another erasure
-coded pool that requires less OSDs::
+If the Ceph cluster has only eight OSDs and an erasure coded pool needs nine
+OSDs, the cluster will show "Not enough OSDs". In this case, you either create
+another erasure coded pool that requires fewer OSDs, by running commands of the
+following form:
+
+.. prompt:: bash
 
      ceph osd erasure-code-profile set myprofile k=5 m=3
      ceph osd pool create erasurepool erasure myprofile
 
-or add a new OSDs and the PG will automatically use them.
+or add new OSDs, and the PG will automatically use them.
 
 CRUSH constraints cannot be satisfied
 -------------------------------------
 
-If the cluster has enough OSDs, it is possible that the CRUSH rule
-imposes constraints that cannot be satisfied. If there are 10 OSDs on
-two hosts and the CRUSH rule requires that no two OSDs from the
-same host are used in the same PG, the mapping may fail because only
-two OSDs will be found. You can check the constraint by displaying ("dumping")
-the rule::
+If the cluster has enough OSDs, it is possible that the CRUSH rule is imposing
+constraints that cannot be satisfied. If there are ten OSDs on two hosts and
+the CRUSH rule requires that no two OSDs from the same host are used in the
+same PG, the mapping may fail because only two OSDs will be found. Check the
+constraint by displaying ("dumping") the rule, as shown here:
+
+.. prompt:: bash
+
+   ceph osd crush rule ls
+
+::
 
-    $ ceph osd crush rule ls
     [
         "replicated_rule",
         "erasurepool"]
@@ -535,36 +616,43 @@ the rule::
             { "op": "emit"}]}
 
 
-You can resolve the problem by creating a new pool in which PGs are allowed
-to have OSDs residing on the same host with::
+Resolve this problem by creating a new pool in which PGs are allowed to have
+OSDs residing on the same host by running the following commands:
 
-     ceph osd erasure-code-profile set myprofile crush-failure-domain=osd
-     ceph osd pool create erasurepool erasure myprofile
+.. prompt:: bash
+
+   ceph osd erasure-code-profile set myprofile crush-failure-domain=osd
+   ceph osd pool create erasurepool erasure myprofile
 
 CRUSH gives up too soon
 -----------------------
 
-If the Ceph cluster has just enough OSDs to map the PG (for instance a
-cluster with a total of 9 OSDs and an erasure coded pool that requires
-9 OSDs per PG), it is possible that CRUSH gives up before finding a
-mapping. It can be resolved by:
+If the Ceph cluster has just enough OSDs to map the PG (for instance a cluster
+with a total of nine OSDs and an erasure coded pool that requires nine OSDs per
+PG), it is possible that CRUSH gives up before finding a mapping. This problem
+can be resolved by:
 
-* lowering the erasure coded pool requirements to use less OSDs per PG
-  (that requires the creation of another pool as erasure code profiles
-  cannot be dynamically modified).
+* lowering the erasure coded pool requirements to use fewer OSDs per PG (this
+  requires the creation of another pool, because erasure code profiles cannot
+  be modified dynamically).
 
-* adding more OSDs to the cluster (that does not require the erasure
-  coded pool to be modified, it will become clean automatically)
+* adding more OSDs to the cluster (this does not require the erasure coded pool
+  to be modified, because it will become clean automatically)
 
-* use a handmade CRUSH rule that tries more times to find a good
-  mapping. This can be done by setting ``set_choose_tries`` to a value
-  greater than the default.
+* using a handmade CRUSH rule that tries more times to find a good mapping.
+  This can be modified for an existing CRUSH rule by setting
+  ``set_choose_tries`` to a value greater than the default.
 
-You should first verify the problem with ``crushtool`` after
-extracting the crushmap from the cluster so your experiments do not
-modify the Ceph cluster and only work on a local files::
+First, verify the problem by using  ``crushtool`` after extracting the crushmap
+from the cluster. This ensures that your experiments do not modify the Ceph
+cluster and that they operate only on local files:
+
+.. prompt:: bash
+
+   ceph osd crush rule dump erasurepool
+
+::
 
-    $ ceph osd crush rule dump erasurepool
     { "rule_id": 1,
       "rule_name": "erasurepool",
       "type": 3,
@@ -586,44 +674,54 @@ modify the Ceph cluster and only work on a local files::
     bad mapping rule 8 x 79 num_rep 9 result [6,0,2,1,4,7,2147483647,5,8]
     bad mapping rule 8 x 173 num_rep 9 result [0,4,6,8,2,1,3,7,2147483647]
 
-Where ``--num-rep`` is the number of OSDs the erasure code CRUSH
-rule needs, ``--rule`` is the value of the ``rule_id`` field
-displayed by ``ceph osd crush rule dump``.  The test will try mapping
-one million values (i.e. the range defined by ``[--min-x,--max-x]``)
-and must display at least one bad mapping. If it outputs nothing it
-means all mappings are successful and you can stop right there: the
-problem is elsewhere.
+Here, ``--num-rep`` is the number of OSDs that the erasure code CRUSH rule
+needs, ``--rule`` is the value of the ``rule_id`` field that was displayed by
+``ceph osd crush rule dump``. This test will attempt to map one million values
+(in this example, the range defined by ``[--min-x,--max-x]``) and must display
+at least one bad mapping. If this test outputs nothing, all mappings have been
+successful and you can be assured that the problem with your cluster is not
+caused by bad mappings.
 
-The CRUSH rule can be edited by decompiling the crush map::
+Changing the value of set_choose_tries
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-    $ crushtool --decompile crush.map > crush.txt
+#. Decompile the CRUSH map to edit the CRUSH rule by running the following
+   command:
 
-and adding the following line to the rule::
+   .. prompt:: bash
 
-    step set_choose_tries 100
+      crushtool --decompile crush.map > crush.txt
 
-The relevant part of the ``crush.txt`` file should look something
-like::
+#. Add the following line to the rule::
 
-     rule erasurepool {
-             id 1
-             type erasure
-             step set_chooseleaf_tries 5
-             step set_choose_tries 100
-             step take default
-             step chooseleaf indep 0 type host
-             step emit
-     }
+      step set_choose_tries 100
 
-It can then be compiled and tested again::
+   The relevant part of the ``crush.txt`` file will resemble this::
 
-    $ crushtool --compile crush.txt -o better-crush.map
+      rule erasurepool {
+              id 1
+              type erasure
+              step set_chooseleaf_tries 5
+              step set_choose_tries 100
+              step take default
+              step chooseleaf indep 0 type host
+              step emit
+      }
 
-When all mappings succeed, an histogram of the number of tries that
-were necessary to find all of them can be displayed with the
-``--show-choose-tries`` option of ``crushtool``::
+#. Recompile and retest the CRUSH rule:
 
-    $ crushtool -i better-crush.map --test --show-bad-mappings \
+   .. prompt:: bash
+
+      crushtool --compile crush.txt -o better-crush.map
+
+#. When all mappings succeed, display a histogram of the number of tries that
+   were necessary to find all of the mapping by using the
+   ``--show-choose-tries`` option of the ``crushtool`` command, as in the
+   following example:
+
+   .. prompt:: bash
+
+      crushtool -i better-crush.map --test --show-bad-mappings \
        --show-choose-tries \
        --rule 1 \
        --num-rep 9 \
@@ -673,14 +771,12 @@ were necessary to find all of them can be displayed with the
     104:         0
     ...
 
-It took 11 tries to map 42 PGs, 12 tries to map 44 PGs etc. The highest number of tries is the minimum value of ``set_choose_tries`` that prevents bad mappings (i.e. 103 in the above output because it did not take more than 103 tries for any PG to be mapped).
+   This output indicates that it took eleven tries to map forty-two PGs, twelve
+   tries to map forty-four PGs etc. The highest number of tries is the minimum
+   value of ``set_choose_tries`` that prevents bad mappings (for example,
+   ``103`` in the above output, because it did not take more than 103 tries for
+   any PG to be mapped).
 
 .. _check: ../../operations/placement-groups#get-the-number-of-placement-groups
-.. _here: ../../configuration/pool-pg-config-ref
 .. _Placement Groups: ../../operations/placement-groups
 .. _Pool, PG and CRUSH Config Reference: ../../configuration/pool-pg-config-ref
-.. _NTP: https://en.wikipedia.org/wiki/Network_Time_Protocol
-.. _The Network Time Protocol: http://www.ntp.org/
-.. _Clock Settings: ../../configuration/mon-config-ref/#clock
-
-
index 687409c1edc77c200c33d5ddf5e3634fccf8132b..8d70252fee6517bfbae620016d6cdf6a7bc1790e 100644 (file)
@@ -476,23 +476,40 @@ commands. ::
 Rate Limit Management
 =====================
 
-The Ceph Object Gateway enables you to set rate limits on users and buckets. 
-Rate limit includes the maximum number of read ops and write ops per minute
-and how many bytes per minute could be written or read per user or per bucket.
-Requests that are using GET or HEAD method in the REST request are considered as "read requests", otherwise they are considered as "write requests".
-Every Object Gateway tracks per user and bucket metrics separately, these metrics are not shared with other gateways.
-That means that the desired limits configured should be divide by the number of active Object Gateways.
-For example, if userA should be limited by 10 ops per minute and there are 2 Object Gateways in the cluster,
-the limit over userA should be 5 (10 ops per minute / 2 RGWs).
-If the requests are **not** balanced between RGWs, the rate limit may be underutilized.
-For example, if the ops limit is 5 and there are 2 RGWs, **but** the Load Balancer send load only to one of those RGWs,
-The effective limit would be 5 ops, because this limit is enforced per RGW.
-If there is a limit reached for bucket not for user or vice versa the request would be cancelled as well.
-The bandwidth counting happens after the request is being accepted, as a result, even if in the middle of the request the bucket/user has reached its bandwidth limit this request will proceed.
-The RGW will keep a "debt" of used bytes more than the configured value and will prevent this user/bucket from sending more requests until there "debt" is being paid.
-The "debt" maximum size is twice the max-read/write-bytes per minute.
-If userA has 1 byte read limit per minute and this user tries to GET 1 GB object, the user will be able to do it.
-After userA completes this 1GB operation, the RGW will block the user request for up to 2 minutes until userA will be able to send GET request again.
+The Ceph Object Gateway makes it possible to set rate limits on users and
+buckets.  "Rate limit" includes the maximum number of read operations (read
+ops) and write operations (write ops) per minute and the number of bytes per
+minute that can be written or read per user or per bucket.
+
+Operations that use the ``GET`` method or the ``HEAD`` method in their REST
+requests are "read requests". All other requests are "write requests".  
+
+Each object gateway tracks per-user metrics separately from bucket metrics.
+These metrics are not shared with other gateways. The configured limits should
+be divided by the number of active object gateways. For example, if "user A" is
+to be be limited to 10 ops per minute and there are two object gateways in the
+cluster, then the limit on "user A" should be ``5`` (10 ops per minute / 2
+RGWs).  If the requests are **not** balanced between RGWs, the rate limit might
+be underutilized. For example: if the ops limit is ``5`` and there are two
+RGWs, **but** the Load Balancer sends load to only one of those RGWs, the
+effective limit is 5 ops, because this limit is enforced per RGW. If the rate
+limit that has been set for the bucket has been reached but the rate limit that
+has been set for the user has not been reached, then the request is cancelled.
+The contrary holds as well: if the rate limit that has been set for the user
+has been reached but the rate limit that has been set for the bucket has not
+been reached, then the request is cancelled.
+
+The accounting of bandwidth happens only after a request has been accepted.
+This means that requests will proceed even if the bucket rate limit or user
+rate limit is reached during the execution of the request. The RGW keeps track
+of a "debt" consisting of bytes used in excess of the configured value; users
+or buckets that incur this kind of debt are prevented  from sending more
+requests until the "debt" has been repaid. The maximum size of the "debt" is
+twice the max-read/write-bytes per minute. If "user A" is subject to a 1-byte
+read limit per minute and they attempt to GET an object that is 1 GB in size,
+then the ``GET`` action will fail. After "user A" has completed this 1 GB
+operation, RGW blocks the user's requests for up to two minutes. After this
+time has elapsed, "user A" will be able to send ``GET`` requests again.
 
 
 - **Bucket:** The ``--bucket`` option allows you to specify a rate limit for a
index b6de649dfe9220a2a536520296b2b398de2e9264..916ff4ff50972354946087e477bf7a4f4474a717 100644 (file)
@@ -79,7 +79,7 @@ workload with a smaller number of buckets but higher number of objects (hundreds
 per bucket you would consider decreasing :confval:`rgw_lc_max_wp_worker` from the default value of 3.
 
 .. note:: When looking to tune either of these specific values please validate the
-       current Cluster performance and Ceph Object Gateway utilization before increasing.
+   current Cluster performance and Ceph Object Gateway utilization before increasing.
 
 Garbage Collection Settings
 ===========================
@@ -97,8 +97,9 @@ To view the queue of objects awaiting garbage collection, execute the following
 
    radosgw-admin gc list
 
-.. note:: specify ``--include-all`` to list all entries, including unexpired
-  
+.. note:: Specify ``--include-all`` to list all entries, including unexpired
+   Garbage Collection objects.
+
 Garbage collection is a background activity that may
 execute continuously or during times of low loads, depending upon how the
 administrator configures the Ceph Object Gateway. By default, the Ceph Object
@@ -121,7 +122,9 @@ configuration parameters.
 
 :Tuning Garbage Collection for Delete Heavy Workloads:
 
-As an initial step towards tuning Ceph Garbage Collection to be more aggressive the following options are suggested to be increased from their default configuration values::
+As an initial step towards tuning Ceph Garbage Collection to be more
+aggressive the following options are suggested to be increased from their
+default configuration values::
 
   rgw_gc_max_concurrent_io = 20
   rgw_gc_max_trim_chunk = 64
@@ -270,7 +273,7 @@ to support future methods of scheduling requests.
 Currently the scheduler defaults to a throttler which throttles the active
 connections to a configured limit. QoS based on mClock is currently in an
 *experimental* phase and not recommended for production yet. Current
-implementation of *dmclock_client* op queue divides RGW Ops on admin, auth
+implementation of *dmclock_client* op queue divides RGW ops on admin, auth
 (swift auth, sts) metadata & data requests.
 
 
index db4ab57befe0aa29439e77d7eb9e5f399ad3a961..b8bd68d9e0c10dff69df05ad85c169babb2be511 100644 (file)
@@ -6,38 +6,39 @@ RGW Dynamic Bucket Index Resharding
 
 .. versionadded:: Luminous
 
-A large bucket index can lead to performance problems. In order
-to address this problem we introduced bucket index sharding.
+A large bucket index can lead to performance problems, which can
+be addressed by sharding bucket indexes.
 Until Luminous, changing the number of bucket shards (resharding)
-needed to be done offline. Starting with Luminous we support
-online bucket resharding.
+needed to be done offline, with RGW services disabled.
+Since the Luminous release Ceph has supported online bucket resharding.
 
 Each bucket index shard can handle its entries efficiently up until
-reaching a certain threshold number of entries. If this threshold is
+reaching a certain threshold. If this threshold is
 exceeded the system can suffer from performance issues. The dynamic
 resharding feature detects this situation and automatically increases
-the number of shards used by the bucket index, resulting in a
-reduction of the number of entries in each bucket index shard. This
-process is transparent to the user. Write I/Os to the target bucket
-are blocked and read I/Os are not during resharding process.
+the number of shards used by a bucket's index, resulting in a
+reduction of the number of entries in each shard. This
+process is transparent to the user. Writes to the target bucket
+are blocked (but reads are not) briefly during resharding process.
 
 By default dynamic bucket index resharding can only increase the
 number of bucket index shards to 1999, although this upper-bound is a
 configuration parameter (see Configuration below). When
-possible, the process chooses a prime number of bucket index shards to
-spread the number of bucket index entries across the bucket index
+possible, the process chooses a prime number of shards in order to
+spread the number of entries across the bucket index
 shards more evenly.
 
-The detection process runs in a background process that periodically
-scans all the buckets. A bucket that requires resharding is added to
-the resharding queue and will be scheduled to be resharded later. The
-reshard thread runs in the background and execute the scheduled
-resharding tasks, one at a time.
+Detection of resharding opportunities runs as a background process
+that periodically
+scans all buckets. A bucket that requires resharding is added to
+a queue. A thread runs in the background and processes the queueued
+resharding tasks, one at a time and in order.
 
 Multisite
 =========
 
-Prior to the Reef release, RGW does not support dynamic resharding in a
+With Ceph releases Prior to Reef, the Ceph Object Gateway (RGW) does not support
+dynamic resharding in a
 multisite environment. For information on dynamic resharding, see
 :ref:`Resharding <feature_resharding>` in the RGW multisite documentation.
 
@@ -50,11 +51,11 @@ Enable/Disable dynamic bucket index resharding:
 
 Configuration options that control the resharding process:
 
-- ``rgw_max_objs_per_shard``: maximum number of objects per bucket index shard before resharding is triggered, default: 100000 objects
+- ``rgw_max_objs_per_shard``: maximum number of objects per bucket index shard before resharding is triggered, default: 100000
 
-- ``rgw_max_dynamic_shards``: maximum number of shards that dynamic bucket index resharding can increase to, default: 1999
+- ``rgw_max_dynamic_shards``: maximum number of bucket index shards that dynamic resharding can increase to, default: 1999
 
-- ``rgw_reshard_bucket_lock_duration``: duration, in seconds, of lock on bucket obj during resharding, default: 360 seconds (i.e., 6 minutes)
+- ``rgw_reshard_bucket_lock_duration``: duration, in seconds, that writes to the bucket are locked during resharding, default: 360 (i.e., 6 minutes)
 
 - ``rgw_reshard_thread_interval``: maximum time, in seconds, between rounds of resharding queue processing, default: 600 seconds (i.e., 10 minutes)
 
@@ -91,9 +92,9 @@ Bucket resharding status
 
    # radosgw-admin reshard status --bucket <bucket_name>
 
-The output is a json array of 3 objects (reshard_status, new_bucket_instance_id, num_shards) per shard.
+The output is a JSON array of 3 objects (reshard_status, new_bucket_instance_id, num_shards) per shard.
 
-For example, the output at different Dynamic Resharding stages is shown below:
+For example, the output at each dynamic resharding stage is shown below:
 
 ``1. Before resharding occurred:``
 ::
@@ -122,7 +123,7 @@ For example, the output at different Dynamic Resharding stages is shown below:
     }
   ]
 
-``3, After resharding completed:``
+``3. After resharding completed:``
 ::
 
   [
@@ -142,7 +143,7 @@ For example, the output at different Dynamic Resharding stages is shown below:
 Cancel pending bucket resharding
 --------------------------------
 
-Note: Ongoing bucket resharding operations cannot be cancelled. ::
+Note: Bucket resharding operations cannot be cancelled while executing. ::
 
    # radosgw-admin reshard cancel --bucket <bucket_name>
 
@@ -153,25 +154,24 @@ Manual immediate bucket resharding
 
    # radosgw-admin bucket reshard --bucket <bucket_name> --num-shards <new number of shards>
 
-When choosing a number of shards, the administrator should keep a
-number of items in mind. Ideally the administrator is aiming for no
-more than 100000 entries per shard, now and through some future point
-in time.
+When choosing a number of shards, the administrator must anticipate each
+bucket's peak number of objects. Ideally one should aim for no
+more than 100000 entries per shard at any given time.
 
-Additionally, bucket index shards that are prime numbers tend to work
-better in evenly distributing bucket index entries across the
-shards. For example, 7001 bucket index shards is better than 7000
+Additionally, bucket index shards that are prime numbers are more effective
+in evenly distributing bucket index entries.
+For example, 7001 bucket index shards is better than 7000
 since the former is prime. A variety of web sites have lists of prime
-numbers; search for "list of prime numbers" withy your favorite web
+numbers; search for "list of prime numbers" with your favorite
 search engine to locate some web sites.
 
 Troubleshooting
 ===============
 
 Clusters prior to Luminous 12.2.11 and Mimic 13.2.5 left behind stale bucket
-instance entries, which were not automatically cleaned up. The issue also affected
-LifeCycle policies, which were not applied to resharded buckets anymore. Both of
-these issues can be worked around using a couple of radosgw-admin commands.
+instance entries, which were not automatically cleaned up. This issue also affected
+LifeCycle policies, which were no longer applied to resharded buckets. Both of
+these issues could be worked around by running ``radosgw-admin`` commands.
 
 Stale instance management
 -------------------------
@@ -183,7 +183,7 @@ List the stale instances in a cluster that are ready to be cleaned up.
    # radosgw-admin reshard stale-instances list
 
 Clean up the stale instances in a cluster. Note: cleanup of these
-instances should only be done on a single site cluster.
+instances should only be done on a single-site cluster.
 
 ::
 
@@ -193,11 +193,12 @@ instances should only be done on a single site cluster.
 Lifecycle fixes
 ---------------
 
-For clusters that had resharded instances, it is highly likely that the old
+For clusters with resharded instances, it is highly likely that the old
 lifecycle processes would have flagged and deleted lifecycle processing as the
-bucket instance changed during a reshard. While this is fixed for newer clusters
-(from Mimic 13.2.6 and Luminous 12.2.12), older buckets that had lifecycle policies and
-that have undergone resharding will have to be manually fixed.
+bucket instance changed during a reshard. While this is fixed for buckets
+deployed on newer Ceph releases (from Mimic 13.2.6 and Luminous 12.2.12),
+older buckets that had lifecycle policies and that have undergone
+resharding must be fixed manually.
 
 The command to do so is:
 
@@ -206,8 +207,8 @@ The command to do so is:
    # radosgw-admin lc reshard fix --bucket {bucketname}
 
 
-As a convenience wrapper, if the ``--bucket`` argument is dropped then this
-command will try and fix lifecycle policies for all the buckets in the cluster.
+If the ``--bucket`` argument is not provided, this
+command will try to fix lifecycle policies for all the buckets in the cluster.
 
 Object Expirer fixes
 --------------------
@@ -217,7 +218,7 @@ been dropped from the log pool and never deleted after the bucket was
 resharded. This would happen if their expiration time was before the
 cluster was upgraded, but if their expiration was after the upgrade
 the objects would be correctly handled. To manage these expire-stale
-objects, radosgw-admin provides two subcommands.
+objects, ``radosgw-admin`` provides two subcommands.
 
 Listing:
 
index b1ca121fed120a9eedd7b48e7e8814abde9e33b6..c7627371de74b88ed87e2e8cb8ffe794d4d586a6 100644 (file)
@@ -770,7 +770,13 @@ to a multi-site system, follow these steps:
       radosgw-admin zonegroup rename --rgw-zonegroup default --zonegroup-new-name=<name>
       radosgw-admin zone rename --rgw-zone default --zone-new-name us-east-1 --rgw-zonegroup=<name>
 
-3. Configure the master zonegroup. Replace ``<name>`` with the realm name or
+3. Rename the default zonegroup's ``api_name``. Replace ``<name>`` with the zonegroup name:
+
+   .. prompt:: bash #
+
+      radosgw-admin zonegroup modify --api-name=<name> --rgw-zonegroup=<name>
+
+4. Configure the master zonegroup. Replace ``<name>`` with the realm name or
    zonegroup name. Replace ``<fqdn>`` with the fully qualified domain name(s)
    in the zonegroup:
 
@@ -778,7 +784,7 @@ to a multi-site system, follow these steps:
 
       radosgw-admin zonegroup modify --rgw-realm=<name> --rgw-zonegroup=<name> --endpoints http://<fqdn>:80 --master --default
 
-4. Configure the master zone. Replace ``<name>`` with the realm name, zone
+5. Configure the master zone. Replace ``<name>`` with the realm name, zone
    name, or zonegroup name. Replace ``<fqdn>`` with the fully qualified domain
    name(s) in the zonegroup:
 
@@ -789,7 +795,7 @@ to a multi-site system, follow these steps:
                                 --access-key=<access-key> --secret=<secret-key> \
                                 --master --default
 
-5. Create a system user. Replace ``<user-id>`` with the username.  Replace
+6. Create a system user. Replace ``<user-id>`` with the username.  Replace
    ``<display-name>`` with a display name. The display name is allowed to
    contain spaces:
 
@@ -800,13 +806,13 @@ to a multi-site system, follow these steps:
       --access-key=<access-key> \ 
       --secret=<secret-key> --system
 
-6. Commit the updated configuration:
+7. Commit the updated configuration:
 
    .. prompt:: bash #
 
       radosgw-admin period update --commit
 
-7. Restart the Ceph Object Gateway:
+8. Restart the Ceph Object Gateway:
 
    .. prompt:: bash #
 
@@ -1588,7 +1594,7 @@ Zone Features
 
 Some multisite features require support from all zones before they can be enabled. Each zone lists its ``supported_features``, and each zonegroup lists its ``enabled_features``. Before a feature can be enabled in the zonegroup, it must be supported by all of its zones.
 
-On creation of new zones and zonegroups, all known features are supported/enabled. After upgrading an existing multisite configuration, however, new features must be enabled manually.
+On creation of new zones and zonegroups, all known features are supported and some features (see table below) are enabled by default. After upgrading an existing multisite configuration, however, new features must be enabled manually.
 
 Supported Features
 ------------------
index ad36029a276d6af4a323245501707961b93473c7..1d18772b29640046eb2f1bc0dd4bfd08d1249649 100644 (file)
@@ -188,8 +188,7 @@ Request parameters:
    specified CA will be used to authenticate the broker. The default CA will
    not be used.  
  - amqp-exchange: The exchanges must exist and must be able to route messages
-   based on topics. This parameter is mandatory.  Different topics that point
-   to the same endpoint must use the same exchange.
+   based on topics. This parameter is mandatory.
  - amqp-ack-level: No end2end acking is required. Messages may persist in the
    broker before being delivered to their final destinations. Three ack methods
    exist:
index 9a101306aa3d815150530330cf5cb82faa7588ed..1627ed0c4db0f7953fd907165d922c6e35051e05 100644 (file)
@@ -13,7 +13,7 @@ Supported Destination
 ---------------------
 
 AWS supports: **SNS**, **SQS** and **Lambda** as possible destinations (AWS internal destinations). 
-Currently, we support: **HTTP/S**, **Kafka** and **AMQP**. And also support pulling and acking of events stored in Ceph (as an internal destination).
+Currently, we support: **HTTP/S**, **Kafka** and **AMQP**.
 
 We are using the **SNS** ARNs to represent the **HTTP/S**, **Kafka** and **AMQP** destinations.
 
index 694f89167556a98c6634ec3da371ad7cef79f597..cb5eb3adbdb6faa4eb8a3424429e0c96fbe472b8 100644 (file)
@@ -91,14 +91,8 @@ The following common request header fields are not supported:
 +----------------------------+------------+
 | Name                       | Type       |
 +============================+============+
-| **Server**                 | Response   |
-+----------------------------+------------+
-| **x-amz-delete-marker**    | Response   |
-+----------------------------+------------+
 | **x-amz-id-2**             | Response   |
 +----------------------------+------------+
-| **x-amz-version-id**       | Response   |
-+----------------------------+------------+
 
 .. _Amazon S3 API: http://docs.aws.amazon.com/AmazonS3/latest/API/APIRest.html
 .. _S3 Notification Compatibility: ../s3-notification-compatibility
index 815a0282b777a3a9fdb963471ba47caddb6d5248..47279c8c5737867b7e1c9bec44920946e34b98d8 100644 (file)
@@ -21,6 +21,7 @@ security fixes.
    :maxdepth: 1
    :hidden:
 
+   Reef (v18.2.*) <reef>
    Quincy (v17.2.*) <quincy>
    Pacific (v16.2.*) <pacific>
 
@@ -58,8 +59,11 @@ receive bug fixes or backports).
 Release timeline
 ----------------
 
-.. ceph_timeline_gantt:: releases.yml quincy pacific
-.. ceph_timeline:: releases.yml quincy pacific
+.. ceph_timeline_gantt:: releases.yml reef quincy 
+.. ceph_timeline:: releases.yml reef quincy 
+
+.. _Reef: reef
+.. _18.2.0: reef#v18-2-0-reef
 
 .. _Quincy: quincy
 .. _17.2.0: quincy#v17-2-0-quincy
diff --git a/ceph/doc/releases/reef.rst b/ceph/doc/releases/reef.rst
new file mode 100644 (file)
index 0000000..6f4f827
--- /dev/null
@@ -0,0 +1,551 @@
+====
+Reef
+====
+
+Reef is the 18th stable release of Ceph. It is named after the reef squid
+(Sepioteuthis).
+
+v18.2.0 Reef
+============
+
+This is the first stable release of Ceph Reef.
+
+.. important::
+
+   We are unable to build Ceph on Debian stable (bookworm) for the 18.2.0
+   release because of Debian bug
+   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1030129. We will build as
+   soon as this bug is resolved in Debian stable.
+
+   *last updated 2023 Aug 04*
+
+Major Changes from Quincy
+--------------------------
+
+Highlights
+~~~~~~~~~~
+
+See the relevant sections below for more details on these changes.
+
+* **RADOS** FileStore is not supported in Reef.
+* **RADOS:** RocksDB has been upgraded to version 7.9.2.
+* **RADOS:** There have been significant improvements to RocksDB iteration overhead and performance.
+* **RADOS:** The ``perf dump`` and ``perf schema`` commands have been deprecated in
+  favor of the new ``counter dump`` and ``counter schema`` commands.
+* **RADOS:** Cache tiering is now deprecated.
+* **RADOS:** A new feature, the "read balancer", is now available, which allows users to balance primary PGs per pool on their clusters.
+* **RGW:** Bucket resharding is now supported for multi-site configurations.
+* **RGW:** There have been significant improvements to the stability and consistency of multi-site replication.
+* **RGW:** Compression is now supported for objects uploaded with Server-Side Encryption.
+* **Dashboard:** There is a new Dashboard page with improved layout. Active alerts and some important charts are now displayed inside cards.
+* **RBD:** Support for layered client-side encryption has been added.
+* **Telemetry**: Users can now opt in to participate in a leaderboard in the telemetry public dashboards.
+
+CephFS
+~~~~~~
+
+* CephFS: The ``mds_max_retries_on_remount_failure`` option has been renamed to
+  ``client_max_retries_on_remount_failure`` and moved from ``mds.yaml.in`` to
+  ``mds-client.yaml.in``. This change was made because the option has always
+  been used only by the MDS client.
+* CephFS: It is now possible to delete the recovered files in the
+  ``lost+found`` directory after a CephFS post has been recovered in accordance
+  with disaster recovery procedures.
+* The ``AT_NO_ATTR_SYNC`` macro has been deprecated in favor of the standard
+  ``AT_STATX_DONT_SYNC`` macro. The ``AT_NO_ATTR_SYNC`` macro will be removed
+  in the future.
+
+Dashboard
+~~~~~~~~~
+
+* There is a new Dashboard page with improved layout. Active alerts
+  and some important charts are now displayed inside cards.
+
+* Cephx Auth Management: There is a new section dedicated to listing and
+  managing Ceph cluster users.
+  
+* RGW Server Side Encryption: The SSE-S3 and KMS encryption of rgw buckets can
+  now be configured at the time of bucket creation.
+
+* RBD Snapshot mirroring: Snapshot mirroring can now be configured through UI.
+  Snapshots can now be scheduled.
+  
+* 1-Click OSD Creation Wizard: OSD creation has been broken into 3 options:
+
+  #. Cost/Capacity Optimized: Use all HDDs
+
+  #. Throughput Optimized: Combine HDDs and SSDs
+
+  #. IOPS Optimized: Use all NVMes
+
+  The current OSD-creation form has been moved to the Advanced section.
+
+* Centralized Logging: There is now a view that collects all the logs from
+  the Ceph cluster.
+
+* Accessibility WCAG-AA: Dashboard is WCAG 2.1 level A compliant and therefore
+  improved for blind and visually impaired Ceph users.
+
+* Monitoring & Alerting
+
+      * Ceph-exporter: Now the performance metrics for Ceph daemons are
+        exported by ceph-exporter, which deploys on each daemon rather than
+        using prometheus exporter. This will reduce performance bottlenecks.
+
+      * Monitoring stacks updated:
+
+            * Prometheus 2.43.0
+
+            * Node-exporter 1.5.0
+
+            * Grafana 9.4.7
+
+            * Alertmanager 0.25.0
+
+MGR
+~~~
+
+* mgr/snap_schedule: The snap-schedule manager module now retains one snapshot
+  less than the number mentioned against the config option
+  ``mds_max_snaps_per_dir``. This means that a new snapshot can be created and
+  retained during the next schedule run.
+* The ``ceph mgr dump`` command now outputs ``last_failure_osd_epoch`` and
+  ``active_clients`` fields at the top level. Previously, these fields were
+  output under the ``always_on_modules`` field.
+  
+RADOS
+~~~~~
+
+* FileStore is not supported in Reef.
+* RocksDB has been upgraded to version 7.9.2, which incorporates several
+  performance improvements and features. This is the first release that can
+  tune RocksDB settings per column family, which allows for more granular
+  tunings to be applied to different kinds of data stored in RocksDB. New
+  default settings have been used to optimize performance for most workloads, with a
+  slight penalty in some use cases. This slight penalty is outweighed by large
+  improvements in compactions and write amplification in use cases such as RGW
+  (up to a measured 13.59% improvement in 4K random write IOPs).
+* Trimming of PGLog dups is now controlled by the size rather than the version.
+  This change fixes the PGLog inflation issue that was happening when the
+  online (in OSD) trimming got jammed after a PG split operation. Also, a new
+  offline mechanism has been added: ``ceph-objectstore-tool`` has a new
+  operation called ``trim-pg-log-dups`` that targets situations in which an OSD
+  is unable to boot because of the inflated dups. In such situations, the "You
+  can be hit by THE DUPS BUG" warning is visible in OSD logs. Relevant tracker:
+  https://tracker.ceph.com/issues/53729
+* The RADOS Python bindings are now able to process (opt-in) omap keys as bytes
+  objects. This allows interacting with RADOS omap keys that are not
+  decodable as UTF-8 strings.
+* mClock Scheduler: The mClock scheduler (the default scheduler in Quincy) has
+  undergone significant usability and design improvements to address the slow
+  backfill issue. The following is a list of some important changes:
+
+  * The ``balanced`` profile is set as the default mClock profile because it
+    represents a compromise between prioritizing client I/O and prioritizing
+    recovery I/O. Users can then choose either the ``high_client_ops`` profile
+    to prioritize client I/O or the ``high_recovery_ops`` profile to prioritize
+    recovery I/O.
+  * QoS parameters including ``reservation`` and ``limit`` are now specified in 
+    terms of a fraction (range: 0.0 to 1.0) of the OSD's IOPS capacity.
+  * The cost parameters (``osd_mclock_cost_per_io_usec_*`` and
+    ``osd_mclock_cost_per_byte_usec_*``) have been removed. The cost of an 
+    operation is now a function of the random IOPS and maximum sequential
+    bandwidth capability of the OSD's underlying device.
+  * Degraded object recovery is given higher priority than misplaced
+    object recovery because degraded objects present a data safety issue that
+    is not present with objects that are merely misplaced. As a result,
+    backfilling operations with the ``balanced`` and ``high_client_ops`` mClock
+    profiles might progress more slowly than in the past, when backfilling
+    operations used the 'WeightedPriorityQueue' (WPQ) scheduler.
+  * The QoS allocations in all the mClock profiles are optimized in 
+    accordance with the above fixes and enhancements.
+  * For more details, see:
+    https://docs.ceph.com/en/reef/rados/configuration/mclock-config-ref/
+* A new feature, the "read balancer", is now available, which allows
+  users to balance primary PGs per pool on their clusters. The read balancer is
+  currently available as an offline option via the ``osdmaptool``. By providing
+  a copy of their osdmap and a pool they want balanced to the ``osdmaptool``, users
+  can generate a preview of optimal primary PG mappings that they can then choose to
+  apply to their cluster. For more details, see
+  https://docs.ceph.com/en/latest/dev/balancer-design/#read-balancing
+* The ``active_clients`` array displayed by the ``ceph mgr dump`` command now
+  has a ``name`` field that shows the name of the manager module that
+  registered a RADOS client. Previously, the ``active_clients`` array showed
+  the address of a module's RADOS client, but not the name of the module.
+* The ``perf dump`` and ``perf schema`` commands have been deprecated in 
+  favor of the new ``counter dump`` and ``counter schema`` commands. These new
+  commands add support for labeled perf counters and also emit existing
+  unlabeled perf counters. Some unlabeled perf counters became labeled in this
+  release, and more will be labeled in future releases; such converted perf
+  counters are no longer emitted by the ``perf dump`` and ``perf schema``
+  commands.
+* Cache tiering is now deprecated.
+* The SPDK backend for BlueStore can now connect to an NVMeoF target. This
+  is not an officially supported feature.
+
+RBD
+~~~
+
+* The semantics of compare-and-write C++ API (`Image::compare_and_write` and
+  `Image::aio_compare_and_write` methods) now match those of C API. Both
+  compare and write steps operate only on len bytes even if the buffers
+  associated with them are larger. The previous behavior of comparing up to the
+  size of the compare buffer was prone to subtle breakage upon straddling a
+  stripe unit boundary.
+* The ``compare-and-write`` operation is no longer limited to 512-byte
+  sectors. Assuming proper alignment, it now allows operating on stripe units
+  (4MB by default).
+* There is a new ``rbd_aio_compare_and_writev`` API method that supports
+  scatter/gather on compare buffers as well as on write buffers. This
+  complements the existing ``rbd_aio_readv`` and ``rbd_aio_writev`` methods.
+* The ``rbd device unmap`` command now has a ``--namespace`` option.
+  Support for namespaces was added to RBD in Nautilus 14.2.0, and since then it
+  has been possible to map and unmap images in namespaces using the
+  ``image-spec`` syntax. However, the corresponding option available in most
+  other commands was missing.
+* All rbd-mirror daemon perf counters have become labeled and are now
+  emitted only by the new ``counter dump`` and ``counter schema`` commands. As
+  part of the conversion, many were also renamed in order to better
+  disambiguate journal-based and snapshot-based mirroring.
+* The list-watchers C++ API (`Image::list_watchers`) now clears the passed
+  `std::list` before appending to it. This aligns with the semantics of the C
+  API (``rbd_watchers_list``).
+* Trailing newline in passphrase files (for example: the
+  ``<passphrase-file>`` argument of the ``rbd encryption format`` command and
+  the ``--encryption-passphrase-file`` option of other commands) is no longer
+  stripped.
+* Support for layered client-side encryption has been added. It is now
+  possible to encrypt cloned images with a distinct encryption format and
+  passphrase, differing from that of the parent image and from that of every
+  other cloned image. The efficient copy-on-write semantics intrinsic to
+  unformatted (regular) cloned images have been retained.
+
+RGW
+~~~
+
+* Bucket resharding is now supported for multi-site configurations. This
+  feature is enabled by default for new deployments. Existing deployments must
+  enable the ``resharding`` feature manually after all zones have upgraded.
+  See https://docs.ceph.com/en/reef/radosgw/multisite/#zone-features for
+  details.
+* The RGW policy parser now rejects unknown principals by default. If you are
+  mirroring policies between RGW and AWS, you might want to set
+  ``rgw_policy_reject_invalid_principals`` to ``false``. This change affects
+  only newly set policies, not policies that are already in place.
+* RGW's default backend for ``rgw_enable_ops_log`` has changed from ``RADOS``
+  to ``file``. The default value of ``rgw_ops_log_rados`` is now ``false``, and
+  ``rgw_ops_log_file_path`` now defaults to
+  ``/var/log/ceph/ops-log-$cluster-$name.log``.
+* RGW's pubsub interface now returns boolean fields using ``bool``. Before this
+  change, ``/topics/<topic-name>`` returned ``stored_secret`` and
+  ``persistent`` using a string of ``"true"`` or ``"false"`` that contains
+  enclosing quotation marks. After this change, these fields are returned
+  without enclosing quotation marks so that the fields can be decoded as
+  boolean values in JSON. The same is true of the ``is_truncated`` field
+  returned by ``/subscriptions/<sub-name>``.
+* RGW's response of ``Action=GetTopicAttributes&TopicArn=<topic-arn>`` REST 
+  API now returns ``HasStoredSecret`` and ``Persistent`` as boolean in the JSON
+  string that is encoded in ``Attributes/EndPoint``.
+* All boolean fields that were previously rendered as strings by the
+  ``rgw-admin`` command when the JSON format was used are now rendered as
+  boolean. If your scripts and tools rely on this behavior, update them
+  accordingly. The following is a list of the field names impacted by this
+  change:
+
+      * ``absolute``
+      * ``add``
+      * ``admin``
+      * ``appendable``
+      * ``bucket_key_enabled``
+      * ``delete_marker``
+      * ``exists``
+      * ``has_bucket_info``
+      * ``high_precision_time``
+      * ``index``
+      * ``is_master``
+      * ``is_prefix``
+      * ``is_truncated``
+      * ``linked``
+      * ``log_meta``
+      * ``log_op``
+      * ``pending_removal``
+      * ``read_only``
+      * ``retain_head_object``
+      * ``rule_exist``
+      * ``start_with_full_sync``
+      * ``sync_from_all``
+      * ``syncstopped``
+      * ``system``
+      * ``truncated``
+      * ``user_stats_sync``
+* The Beast front end's HTTP access log line now uses a new
+  ``debug_rgw_access`` configurable. It has the same defaults as
+  ``debug_rgw``, but it can be controlled independently.
+* The pubsub functionality for storing bucket notifications inside Ceph
+  has been removed. As a result, the pubsub zone should not be used anymore.
+  The following have also been removed: the REST operations, ``radosgw-admin``
+  commands for manipulating subscriptions, fetching the notifications, and
+  acking the notifications. 
+
+  If the endpoint to which the notifications are sent is down or disconnected,
+  we recommend that you use persistent notifications to guarantee their
+  delivery. If the system that consumes the notifications has to pull them
+  (instead of the notifications being pushed to the system), use an external
+  message bus (for example, RabbitMQ or Kafka) for that purpose. 
+* The serialized format of notification and topics has changed. This means
+  that new and updated topics will be unreadable by old RGWs. We recommend
+  completing the RGW upgrades before creating or modifying any notification
+  topics.
+* Compression is now supported for objects uploaded with Server-Side
+  Encryption. When both compression and encryption are enabled, compression is
+  applied before encryption. Earlier releases of multisite do not replicate
+  such objects correctly, so all zones must upgrade to Reef before enabling the
+  `compress-encrypted` zonegroup feature: see
+  https://docs.ceph.com/en/reef/radosgw/multisite/#zone-features and note the
+  security considerations.
+  
+Telemetry
+~~~~~~~~~
+
+* Users who have opted in to telemetry can also opt in to
+  participate in a leaderboard in the telemetry public dashboards
+  (https://telemetry-public.ceph.com/). In addition, users are now able to
+  provide a description of their cluster that will appear publicly in the
+  leaderboard. For more details, see:
+  https://docs.ceph.com/en/reef/mgr/telemetry/#leaderboard. To see a sample
+  report, run ``ceph telemetry preview``. To opt in to telemetry, run ``ceph
+  telemetry on``. To opt in to the leaderboard, run ``ceph config set mgr
+  mgr/telemetry/leaderboard true``. To add a leaderboard description, run
+  ``ceph config set mgr mgr/telemetry/leaderboard_description ‘Cluster
+  description’`` (entering your own cluster description).
+
+Upgrading from Pacific or Quincy
+--------------------------------
+
+Before starting, make sure your cluster is stable and healthy (no down or recovering OSDs). (This is optional, but recommended.) You can disable the autoscaler for all pools during the upgrade using the noautoscale flag.
+
+
+.. note::
+
+   You can monitor the progress of your upgrade at each stage with the ``ceph versions`` command, which will tell you what ceph version(s) are running for each type of daemon.
+
+Upgrading cephadm clusters
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If your cluster is deployed with cephadm (first introduced in Octopus), then the upgrade process is entirely automated. To initiate the upgrade,
+
+  .. prompt:: bash #
+
+    ceph orch upgrade start --image quay.io/ceph/ceph:v18.2.0
+
+The same process is used to upgrade to future minor releases.
+
+Upgrade progress can be monitored with
+
+  .. prompt:: bash #
+    
+    ceph orch upgrade status
+
+Upgrade progress can also be monitored with `ceph -s` (which provides a simple progress bar) or more verbosely with
+
+  .. prompt:: bash #
+
+    ceph -W cephadm
+
+The upgrade can be paused or resumed with
+
+  .. prompt:: bash #
+
+    ceph orch upgrade pause  # to pause
+    ceph orch upgrade resume # to resume
+
+or canceled with
+
+.. prompt:: bash #
+
+    ceph orch upgrade stop
+
+Note that canceling the upgrade simply stops the process; there is no ability to downgrade back to Pacific or Quincy.
+
+Upgrading non-cephadm clusters
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. note::
+
+   1. If your cluster is running Pacific (16.2.x) or later, you might choose to first convert it to use cephadm so that the upgrade to Reef is automated (see above).
+      For more information, see https://docs.ceph.com/en/reef/cephadm/adoption/.
+
+   2. If your cluster is running Pacific (16.2.x) or later, systemd unit file names have changed to include the cluster fsid. To find the correct systemd unit file name for your cluster, run following command:
+
+      ```
+      systemctl -l | grep <daemon type>
+      ```
+
+      Example:
+
+      ```
+      $ systemctl -l | grep mon | grep active
+      ceph-6ce0347c-314a-11ee-9b52-000af7995d6c@mon.f28-h21-000-r630.service                                           loaded active running   Ceph mon.f28-h21-000-r630 for 6ce0347c-314a-11ee-9b52-000af7995d6c
+      ```
+
+#. Set the `noout` flag for the duration of the upgrade. (Optional, but recommended.)
+
+   .. prompt:: bash #
+
+      ceph osd set noout
+
+#. Upgrade monitors by installing the new packages and restarting the monitor daemons. For example, on each monitor host
+
+   .. prompt:: bash #
+
+      systemctl restart ceph-mon.target
+
+   Once all monitors are up, verify that the monitor upgrade is complete by looking for the `reef` string in the mon map. The command
+
+   .. prompt:: bash #
+
+      ceph mon dump | grep min_mon_release
+
+   should report:
+
+   .. prompt:: bash #
+
+      min_mon_release 18 (reef)
+
+   If it does not, that implies that one or more monitors hasn't been upgraded and restarted and/or the quorum does not include all monitors.
+
+#. Upgrade `ceph-mgr` daemons by installing the new packages and restarting all manager daemons. For example, on each manager host,
+
+   .. prompt:: bash #
+
+      systemctl restart ceph-mgr.target
+
+   Verify the `ceph-mgr` daemons are running by checking `ceph -s`:
+
+   .. prompt:: bash #
+
+      ceph -s
+
+   ::
+
+     ...
+       services:
+        mon: 3 daemons, quorum foo,bar,baz
+        mgr: foo(active), standbys: bar, baz
+     ...
+
+#. Upgrade all OSDs by installing the new packages and restarting the ceph-osd daemons on all OSD hosts
+
+   .. prompt:: bash #
+   
+      systemctl restart ceph-osd.target
+
+#. Upgrade all CephFS MDS daemons. For each CephFS file system,
+
+   #. Disable standby_replay:
+
+         .. prompt:: bash #
+         
+            ceph fs set <fs_name> allow_standby_replay false
+
+   #. If upgrading from Pacific <=16.2.5:
+
+         .. prompt:: bash #
+   
+            ceph config set mon mon_mds_skip_sanity true
+
+   #. Reduce the number of ranks to 1. (Make note of the original number of MDS daemons first if you plan to restore it later.)
+   
+      .. prompt:: bash #   
+   
+         ceph status # ceph fs set <fs_name> max_mds 1
+
+   #. Wait for the cluster to deactivate any non-zero ranks by periodically checking the status
+
+      .. prompt:: bash #
+
+         ceph status
+
+   #. Take all standby MDS daemons offline on the appropriate hosts with
+
+      .. prompt:: bash #
+   
+         systemctl stop ceph-mds@<daemon_name>
+
+   #. Confirm that only one MDS is online and is rank 0 for your FS
+
+      .. prompt:: bash #
+
+         ceph status
+
+   #. Upgrade the last remaining MDS daemon by installing the new packages and restarting the daemon
+      
+      .. prompt:: bash #
+
+         systemctl restart ceph-mds.target
+
+   #. Restart all standby MDS daemons that were taken offline
+
+      .. prompt:: bash #
+
+         systemctl start ceph-mds.target
+
+   #. Restore the original value of `max_mds` for the volume
+
+      .. prompt:: bash #
+
+         ceph fs set <fs_name> max_mds <original_max_mds>
+
+   #. If upgrading from Pacific <=16.2.5 (followup to step 5.2):
+
+      .. prompt:: bash #
+
+         ceph config set mon mon_mds_skip_sanity false
+
+#. Upgrade all radosgw daemons by upgrading packages and restarting daemons on all hosts
+
+   .. prompt:: bash #
+
+      systemctl restart ceph-radosgw.target
+
+#. Complete the upgrade by disallowing pre-Reef OSDs and enabling all new Reef-only functionality
+   
+   .. prompt:: bash #
+   
+      ceph osd require-osd-release reef
+
+#. If you set `noout` at the beginning, be sure to clear it with
+
+   .. prompt:: bash #
+
+      ceph osd unset noout
+
+#. Consider transitioning your cluster to use the cephadm deployment and orchestration framework to simplify cluster management and future upgrades. For more information on converting an existing cluster to cephadm, see https://docs.ceph.com/en/reef/cephadm/adoption/.
+
+Post-upgrade
+~~~~~~~~~~~~
+
+#. Verify the cluster is healthy with `ceph health`. If your cluster is running Filestore, and you are upgrading directly from Pacific to Reef, a deprecation warning is expected. This warning can be temporarily muted using the following command
+
+   .. prompt:: bash #
+
+      ceph health mute OSD_FILESTORE
+
+#. Consider enabling the `telemetry module <https://docs.ceph.com/en/reef/mgr/telemetry/>`_ to send anonymized usage statistics and crash information to the Ceph upstream developers. To see what would be reported (without actually sending any information to anyone),
+
+   .. prompt:: bash #
+
+      ceph telemetry preview-all
+
+   If you are comfortable with the data that is reported, you can opt-in to automatically report the high-level cluster metadata with
+   
+   .. prompt:: bash #   
+   
+      ceph telemetry on
+
+   The public dashboard that aggregates Ceph telemetry can be found at https://telemetry-public.ceph.com/.
+
+Upgrading from pre-Pacific releases (like Octopus)
+__________________________________________________
+
+You **must** first upgrade to Pacific (16.2.z) or Quincy (17.2.z) before upgrading to Reef.
index 7a01c6b423dcaeb1f3c3974939f95fa593f91609..5eaffdc65059a7c5a23202085d97e899e9ecc675 100644 (file)
 # If a version might represent an actual number (e.g. 0.80) quote it.
 #
 releases:
+  reef:
+    target_eol: 2025-08-01
+    releases:
+      - version: 18.2.0
+        released: 2023-08-07
   quincy:
     target_eol: 2024-06-01
     releases:
@@ -29,7 +34,7 @@ releases:
         released: 2022-04-19
 
   pacific:
-    target_eol: 2023-06-01
+    target_eol: 2023-10-01
     releases:
       - version: 16.2.11
         released: 2023-01-26
index f9b13452dc70ae2909d8e7ef7a3477b21a8c0410..02d4dccc44afa3ce8ae57f3d187ed27fbfbe50ea 100644 (file)
@@ -973,6 +973,15 @@ convention was preferred because it made the documents more readable in a
 command line interface. As of 2023, though, we have no preference for one over
 the other. Use whichever convention makes the text easier to read.
 
+Using a part of a sentence as a hyperlink, `like this <docs.ceph.com>`_, is
+discouraged. The convention of writing "See X" is preferred. Here are some
+preferred formulations:
+
+#. For more information, see `docs.ceph.com <docs.ceph.com>`_.
+
+#. See `docs.ceph.com <docs.ceph.com>`_.
+
+
 Quirks of ReStructured Text
 ---------------------------
 
@@ -981,7 +990,8 @@ External Links
 
 .. _external_link_with_inline_text:
 
-This is the formula for links to addresses external to the Ceph documentation:
+Use the formula immediately below to render links that direct the reader to
+addresses external to the Ceph documentation:
 
 ::
 
@@ -994,10 +1004,13 @@ This is the formula for links to addresses external to the Ceph documentation:
 
    To link to addresses that are external to the Ceph documentation, include a
    space between the inline text and the angle bracket that precedes the
-   external address. This is precisely the opposite of :ref:`the convention for
-   inline text that links to a location inside the Ceph
-   documentation<internal_link_with_inline_text>`. If this seems inconsistent
-   and confusing to you, then you're right. It is inconsistent and confusing.
+   external address. This is precisely the opposite of the convention for
+   inline text that links to a location inside the Ceph documentation. See
+   :ref:`here <internal_link_with_inline_text>` for an exemplar of this
+   convention.
+
+   If this seems inconsistent and confusing to you, then you're right. It is
+   inconsistent and confusing.
 
 See also ":ref:`External Hyperlink Example<start_external_hyperlink_example>`".
 
index c759d7495a0cfab756e44906a53422349895678e..a63b5a4579643b6ff8487ae2e71cf825e4d7d669 100644 (file)
@@ -1,66 +1,83 @@
 .. _hardware-recommendations:
 
 ==========================
Hardware Recommendations
hardware recommendations
 ==========================
 
-Ceph was designed to run on commodity hardware, which makes building and
-maintaining petabyte-scale data clusters economically feasible. 
-When planning out your cluster hardware, you will need to balance a number 
-of considerations, including failure domains and potential performance
-issues. Hardware planning should include distributing Ceph daemons and 
+Ceph is designed to run on commodity hardware, which makes building and
+maintaining petabyte-scale data clusters flexible and economically feasible. 
+When planning your cluster's hardware, you will need to balance a number 
+of considerations, including failure domains, cost, and performance.
+Hardware planning should include distributing Ceph daemons and 
 other processes that use Ceph across many hosts. Generally, we recommend 
 running Ceph daemons of a specific type on a host configured for that type 
-of daemon. We recommend using other hosts for processes that utilize your 
-data cluster (e.g., OpenStack, CloudStack, etc).
+of daemon. We recommend using separate hosts for processes that utilize your 
+data cluster (e.g., OpenStack, CloudStack, Kubernetes, etc).
 
+The requirements of one Ceph cluster are not the same as the requirements of
+another, but below are some general guidelines. 
 
-.. tip:: Check out the `Ceph blog`_ too.
-
+.. tip:: check out the `ceph blog`_ too.
 
 CPU
 ===
 
-CephFS metadata servers (MDS) are CPU-intensive. CephFS metadata servers (MDS)
-should therefore have quad-core (or better) CPUs and high clock rates (GHz). OSD
-nodes need enough processing power to run the RADOS service, to calculate data
+CephFS Metadata Servers (MDS) are CPU-intensive. They are
+are single-threaded and perform best with CPUs with a high clock rate (GHz). MDS
+servers do not need a large number of CPU cores unless they are also hosting other
+services, such as SSD OSDs for the CephFS metadata pool.
+OSD nodes need enough processing power to run the RADOS service, to calculate data
 placement with CRUSH, to replicate data, and to maintain their own copies of the
 cluster map.
 
-The requirements of one Ceph cluster are not the same as the requirements of
-another, but here are some general guidelines. 
-
-In earlier versions of Ceph, we would make hardware recommendations based on
-the number of cores per OSD, but this cores-per-OSD metric is no longer as
-useful a metric as the number of cycles per IOP and the number of IOPs per OSD.
-For example, for NVMe drives, Ceph can easily utilize five or six cores on real
+With earlier releases of Ceph, we would make hardware recommendations based on
+the number of cores per OSD, but this cores-per-osd metric is no longer as
+useful a metric as the number of cycles per IOP and the number of IOPS per OSD.
+For example, with NVMe OSD drives, Ceph can easily utilize five or six cores on real
 clusters and up to about fourteen cores on single OSDs in isolation. So cores
 per OSD are no longer as pressing a concern as they were. When selecting
-hardware, select for IOPs per core.
+hardware, select for IOPS per core.
 
-Monitor nodes and manager nodes have no heavy CPU demands and require only
-modest processors. If your host machines will run CPU-intensive processes in
+.. tip:: When we speak of CPU _cores_, we mean _threads_ when hyperthreading
+        is enabled.  Hyperthreading is usually beneficial for Ceph servers.
+
+Monitor nodes and Manager nodes do not have heavy CPU demands and require only
+modest processors. if your hosts will run CPU-intensive processes in
 addition to Ceph daemons, make sure that you have enough processing power to
 run both the CPU-intensive processes and the Ceph daemons. (OpenStack Nova is
-one such example of a CPU-intensive process.) We recommend that you run
+one example of a CPU-intensive process.) We recommend that you run
 non-Ceph CPU-intensive processes on separate hosts (that is, on hosts that are
-not your monitor and manager nodes) in order to avoid resource contention.
+not your Monitor and Manager nodes) in order to avoid resource contention.
+If your cluster deployes the Ceph Object Gateway, RGW daemons may co-reside
+with your Mon and Manager services if the nodes have sufficient resources.
 
 RAM
 ===
 
-Generally, more RAM is better.  Monitor / manager nodes for a modest cluster
+Generally, more RAM is better.  Monitor / Manager nodes for a modest cluster
 might do fine with 64GB; for a larger cluster with hundreds of OSDs 128GB
-is a reasonable target.  There is a memory target for BlueStore OSDs that
+is advised.
+
+.. tip:: when we speak of RAM and storage requirements, we often describe
+        the needs of a single daemon of a given type.  A given server as
+        a whole will thus need at least the sum of the needs of the
+        daemons that it hosts as well as resources for logs and other operating
+        system components.  Keep in mind that a server's need for RAM
+        and storage will be greater at startup and when components
+        fail or are added and the cluster rebalances.  In other words,
+        allow headroom past what you might see used during a calm period
+        on a small initial cluster footprint.
+
+There is an :confval:`osd_memory_target` setting for BlueStore OSDs that
 defaults to 4GB.  Factor in a prudent margin for the operating system and
 administrative tasks (like monitoring and metrics) as well as increased
-consumption during recovery:  provisioning ~8GB per BlueStore OSD
-is advised.
+consumption during recovery:  provisioning ~8GB *per BlueStore OSD* is thus
+advised.
 
 Monitors and managers (ceph-mon and ceph-mgr)
 ---------------------------------------------
 
-Monitor and manager daemon memory usage generally scales with the size of the
+Monitor and manager daemon memory usage scales with the size of the
 cluster.  Note that at boot-time and during topology changes and recovery these
 daemons will need more RAM than they do during steady-state operation, so plan
 for peak usage. For very small clusters, 32 GB suffices. For clusters of up to,
@@ -75,8 +92,8 @@ tuning the following settings:
 Metadata servers (ceph-mds)
 ---------------------------
 
-The metadata daemon memory utilization depends on how much memory its cache is
-configured to consume.  We recommend 1 GB as a minimum for most systems.  See
+CephFS metadata daemon memory utilization depends on the configured size of
+its cache. We recommend 1 GB as a minimum for most systems.  See
 :confval:`mds_cache_memory_limit`.
 
 
@@ -88,23 +105,24 @@ operating system's page cache. In Bluestore you can adjust the amount of memory
 that the OSD attempts to consume by changing the :confval:`osd_memory_target`
 configuration option.
 
-- Setting the :confval:`osd_memory_target` below 2GB is typically not
-  recommended (Ceph may fail to keep the memory consumption under 2GB and 
-  this may cause extremely slow performance).
+- Setting the :confval:`osd_memory_target` below 2GB is not
+  recommendedCeph may fail to keep the memory consumption under 2GB and 
+  extremely slow performance is likely.
 
 - Setting the memory target between 2GB and 4GB typically works but may result
-  in degraded performance: metadata may be read from disk during IO unless the
-  active data set is relatively small.
+  in degraded performance: metadata may need to be read from disk during IO
+  unless the active data set is relatively small.
 
-- 4GB is the current default :confval:`osd_memory_target` size. This default
-  was chosen for typical use cases, and is intended to balance memory
-  requirements and OSD performance.
+- 4GB is the current default value for :confval:`osd_memory_target` This default
+  was chosen for typical use cases, and is intended to balance RAM cost and
+  OSD performance.
 
 - Setting the :confval:`osd_memory_target` higher than 4GB can improve
   performance when there many (small) objects or when large (256GB/OSD 
-  or more) data sets are processed.
+  or more) data sets are processed.  This is especially true with fast
+  NVMe OSDs.
 
-.. important:: OSD memory autotuning is "best effort". Although the OSD may
+.. important:: OSD memory management is "best effort". Although the OSD may
    unmap memory to allow the kernel to reclaim it, there is no guarantee that
    the kernel will actually reclaim freed memory within a specific time
    frame. This applies especially in older versions of Ceph, where transparent
@@ -113,14 +131,19 @@ configuration option.
    pages at the application level to avoid this, but that does not
    guarantee that the kernel will immediately reclaim unmapped memory. The OSD
    may still at times exceed its memory target. We recommend budgeting 
-   approximately 20% extra memory on your system to prevent OSDs from going OOM
+   at least 20% extra memory on your system to prevent OSDs from going OOM
    (**O**\ut **O**\f **M**\emory) during temporary spikes or due to delay in
    the kernel reclaiming freed pages. That 20% value might be more or less than
    needed, depending on the exact configuration of the system.
 
-When using the legacy FileStore back end, the page cache is used for caching
-data, so no tuning is normally needed. When using the legacy FileStore backend,
-the OSD memory consumption is related to the number of PGs per daemon in the
+.. tip:: Configuring the operating system with swap to provide additional
+        virtual memory for daemons is not advised for modern systems.  Doing
+        may result in lower performance, and your Ceph cluster may well be
+        happier with a daemon that crashes vs one that slows to a crawl.
+
+When using the legacy FileStore back end, the OS page cache was used for caching
+data, so tuning was not normally needed. When using the legacy FileStore backend,
+the OSD memory consumption was related to the number of PGs per daemon in the
 system.
 
 
@@ -130,13 +153,34 @@ Data Storage
 Plan your data storage configuration carefully. There are significant cost and
 performance tradeoffs to consider when planning for data storage. Simultaneous
 OS operations and simultaneous requests from multiple daemons for read and
-write operations against a single drive can slow performance.
+write operations against a single drive can impact performance.
+
+OSDs require substantial storage drive space for RADOS data. We recommend a
+minimum drive size of 1 terabyte. OSD drives much smaller than one terabyte
+use a significant fraction of their capacity for metadata, and drives smaller
+than 100 gigabytes will not be effective at all.
+
+It is *strongly* suggested that (enterprise-class) SSDs are provisioned for, at a
+minimum, Ceph Monitor and Ceph Manager hosts, as well as CephFS Metadata Server
+metadata pools and Ceph Object Gateway (RGW) index pools, even if HDDs are to
+be provisioned for bulk OSD data.
+
+To get the best performance out of Ceph, provision the following on separate
+drives:
+
+* The operating systems
+* OSD data
+* BlueStore WAL+DB
+
+For more
+information on how to effectively use a mix of fast drives and slow drives in
+your Ceph cluster, see the `block and block.db`_ section of the Bluestore
+Configuration Reference.
 
 Hard Disk Drives
 ----------------
 
-OSDs should have plenty of storage drive space for object data. We recommend a
-minimum disk drive size of 1 terabyte. Consider the cost-per-gigabyte advantage
+Consider carefully the cost-per-gigabyte advantage
 of larger disks. We recommend dividing the price of the disk drive by the
 number of gigabytes to arrive at a cost per gigabyte, because larger drives may
 have a significant impact on the cost-per-gigabyte. For example, a 1 terabyte
@@ -146,11 +190,10 @@ per gigabyte (i.e., $150 / 3072 = 0.0488). In the foregoing example, using the
 1 terabyte disks would generally increase the cost per gigabyte by
 40%--rendering your cluster substantially less cost efficient.
 
-.. tip:: Running multiple OSDs on a single SAS / SATA drive
-   is **NOT** a good idea.  NVMe drives, however, can achieve
-   improved performance by being split into two or more OSDs.
+.. tip:: Hosting multiple OSDs on a single SAS / SATA HDD
+   is **NOT** a good idea.
 
-.. tip:: Running an OSD and a monitor or a metadata server on a single 
+.. tip:: Hosting an OSD with monitor, manager, or MDS data on a single 
    drive is also **NOT** a good idea.
 
 .. tip:: With spinning disks, the SATA and SAS interface increasingly
@@ -162,35 +205,36 @@ Storage drives are subject to limitations on seek time, access time, read and
 write times, as well as total throughput. These physical limitations affect
 overall system performance--especially during recovery. We recommend using a
 dedicated (ideally mirrored) drive for the operating system and software, and
-one drive for each Ceph OSD Daemon you run on the host (modulo NVMe above).
+one drive for each Ceph OSD Daemon you run on the host.
 Many "slow OSD" issues (when they are not attributable to hardware failure)
 arise from running an operating system and multiple OSDs on the same drive.
+Also be aware that today's 22TB HDD uses the same SATA interface as a
+3TB HDD from ten years ago: more than seven times the data to squeeze
+through the same same interface.  For this reason, when using HDDs for
+OSDs, drives larger than 8TB may be best suited for storage of large
+files / objects that are not at all performance-sensitive.
 
-It is technically possible to run multiple Ceph OSD Daemons per SAS / SATA
-drive, but this will lead to resource contention and diminish overall
-throughput.
-
-To get the best performance out of Ceph, run the following on separate drives:
-(1) operating systems, (2) OSD data, and (3) BlueStore db.  For more
-information on how to effectively use a mix of fast drives and slow drives in
-your Ceph cluster, see the `block and block.db`_ section of the Bluestore
-Configuration Reference.
 
 Solid State Drives
 ------------------
 
-Ceph performance can be improved by using solid-state drives (SSDs). This
-reduces random access time and reduces latency while accelerating throughput. 
+Ceph performance is much improved when using solid-state drives (SSDs). This
+reduces random access time and reduces latency while increasing throughput. 
 
-SSDs cost more per gigabyte than do hard disk drives, but SSDs often offer
-access times that are, at a minimum, 100 times faster than hard disk drives.
+SSDs cost more per gigabyte than do HDDs but SSDs often offer
+access times that are, at a minimum, 100 times faster than HDDs.
 SSDs avoid hotspot issues and bottleneck issues within busy clusters, and
-they may offer better economics when TCO is evaluated holistically.
-
-SSDs do not have moving mechanical parts, so they are not necessarily subject
-to the same types of limitations as hard disk drives. SSDs do have significant
+they may offer better economics when TCO is evaluated holistically. Notably,
+the amortized drive cost for a given number of IOPS is much lower with SSDs
+than with HDDs.  SSDs do not suffer rotational or seek latency and in addition
+to improved client performance, they substantially improve the speed and
+client impact of cluster changes including rebalancing when OSDs or Monitors
+are added, removed, or fail.
+
+SSDs do not have moving mechanical parts, so they are not subject
+to many of the limitations of HDDs.  SSDs do have significant
 limitations though. When evaluating SSDs, it is important to consider the
-performance of sequential reads and writes.
+performance of sequential and random reads and writes.
 
 .. important:: We recommend exploring the use of SSDs to improve performance. 
    However, before making a significant investment in SSDs, we **strongly
@@ -198,16 +242,36 @@ performance of sequential reads and writes.
    SSD in a test configuration in order to gauge performance. 
 
 Relatively inexpensive SSDs may appeal to your sense of economy. Use caution.
-Acceptable IOPS are not the only factor to consider when selecting an SSD for
-use with Ceph. 
-
-SSDs have historically been cost prohibitive for object storage, but emerging
-QLC drives are closing the gap, offering greater density with lower power
-consumption and less power spent on cooling. HDD OSDs may see a significant
-performance improvement by offloading WAL+DB onto an SSD.
-
-To get a better sense of the factors that determine the cost of storage, you
-might use the `Storage Networking Industry Association's Total Cost of
+Acceptable IOPS are not the only factor to consider when selecting SSDs for
+use with Ceph. Bargain SSDs are often a false economy: they may experience
+"cliffing", which means that after an initial burst, sustained performance
+once a limited cache is filled declines considerably.  Consider also durability:
+a drive rated for 0.3 Drive Writes Per Day (DWPD or equivalent) may be fine for
+OSDs dedicated to certain types of sequentially-written read-mostly data, but
+are not a good choice for Ceph Monitor duty.  Enterprise-class SSDs are best
+for Ceph:  they almost always feature power less protection (PLP) and do
+not suffer the dramatic cliffing that client (desktop) models may experience.
+
+When using a single (or mirrored pair) SSD for both operating system boot
+and Ceph Monitor / Manager purposes, a minimum capacity of 256GB is advised
+and at least 480GB is recommended. A drive model rated at 1+ DWPD (or the
+equivalent in TBW (TeraBytes Written) is suggested.  However, for a given write
+workload, a larger drive than technically required will provide more endurance
+because it effectively has greater overprovsioning. We stress that
+enterprise-class drives are best for production use, as they feature power
+loss protection and increased durability compared to client (desktop) SKUs
+that are intended for much lighter and intermittent duty cycles.
+
+SSDs were historically been cost prohibitive for object storage, but
+QLC SSDs are closing the gap, offering greater density with lower power
+consumption and less power spent on cooling. Also, HDD OSDs may see a
+significant write latency improvement by offloading WAL+DB onto an SSD.
+Many Ceph OSD deployments do not require an SSD with greater endurance than
+1 DWPD (aka "read-optimized").  "Mixed-use" SSDs in the 3 DWPD class are
+often overkill for this purpose and cost signficantly more.
+
+To get a better sense of the factors that determine the total cost of storage,
+you might use the `Storage Networking Industry Association's Total Cost of
 Ownership calculator`_
 
 Partition Alignment
@@ -222,11 +286,11 @@ alignment and example commands that show how to align partitions properly, see
 CephFS Metadata Segregation
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-One way that Ceph accelerates CephFS file system performance is by segregating
+One way that Ceph accelerates CephFS file system performance is by separating
 the storage of CephFS metadata from the storage of the CephFS file contents.
 Ceph provides a default ``metadata`` pool for CephFS metadata. You will never
-have to create a pool for CephFS metadata, but you can create a CRUSH map
-hierarchy for your CephFS metadata pool that points only to SSD storage media.
+have to manually create a pool for CephFS metadata, but you can create a CRUSH map
+hierarchy for your CephFS metadata pool that includes only SSD storage media.
 See :ref:`CRUSH Device Class<crush-map-device-class>` for details.
 
 
@@ -237,8 +301,20 @@ Disk controllers (HBAs) can have a significant impact on write throughput.
 Carefully consider your selection of HBAs to ensure that they do not create a
 performance bottleneck. Notably, RAID-mode (IR) HBAs may exhibit higher latency
 than simpler "JBOD" (IT) mode HBAs. The RAID SoC, write cache, and battery
-backup can substantially increase hardware and maintenance costs. Some RAID
-HBAs can be configured with an IT-mode "personality".
+backup can substantially increase hardware and maintenance costs. Many RAID
+HBAs can be configured with an IT-mode "personality" or "JBOD mode" for
+streamlined operation.
+
+You do not need an RoC (RAID-capable) HBA. ZFS or Linux MD software mirroring
+serve well for boot volume durability.  When using SAS or SATA data drives,
+forgoing HBA RAID capabilities can reduce the gap between HDD and SSD
+media cost.  Moreover, when using NVMe SSDs, you do not need *any* HBA.  This
+additionally reduces the HDD vs SSD cost gap when the system as a whole is
+considered. The initial cost of a fancy RAID HBA plus onboard cache plus
+battery backup (BBU or supercapacitor) can easily exceed more than 1000 US
+dollars even after discounts - a sum that goes a log way toward SSD cost parity.
+An HBA-free system may also cost hundreds of US dollars less every year if one
+purchases an annual maintenance contract or extended warranty.
 
 .. tip:: The `Ceph blog`_ is often an excellent source of information on Ceph
    performance issues. See `Ceph Write Throughput 1`_ and `Ceph Write 
@@ -248,10 +324,10 @@ HBAs can be configured with an IT-mode "personality".
 Benchmarking
 ------------
 
-BlueStore opens block devices in O_DIRECT and uses fsync frequently to ensure
-that data is safely persisted to media. You can evaluate a drive's low-level
-write performance using ``fio``. For example, 4kB random write performance is
-measured as follows:
+BlueStore opens storage devices with ``O_DIRECT`` and issues ``fsync()``
+frequently to ensure that data is safely persisted to media. You can evaluate a
+drive's low-level write performance using ``fio``. For example, 4kB random write
+performance is measured as follows:
 
 .. code-block:: console
 
@@ -261,6 +337,7 @@ Write Caches
 ------------
 
 Enterprise SSDs and HDDs normally include power loss protection features which
+ensure data durability when power is lost while operating, and
 use multi-level caches to speed up direct or synchronous writes.  These devices
 can be toggled between two caching modes -- a volatile cache flushed to
 persistent media with fsync, or a non-volatile cache written synchronously.
@@ -269,9 +346,9 @@ These two modes are selected by either "enabling" or "disabling" the write
 (volatile) cache.  When the volatile cache is enabled, Linux uses a device in
 "write back" mode, and when disabled, it uses "write through".
 
-The default configuration (normally caching enabled) may not be optimal, and
+The default configuration (usually: caching is enabled) may not be optimal, and
 OSD performance may be dramatically increased in terms of increased IOPS and
-decreased commit_latency by disabling the write cache.
+decreased commit latency by disabling this write cache.
 
 Users are therefore encouraged to benchmark their devices with ``fio`` as
 described earlier and persist the optimal cache configuration for their
@@ -319,11 +396,11 @@ The write cache can be disabled with those same tools:
   === START OF ENABLE/DISABLE COMMANDS SECTION ===
   Write cache disabled
 
-Normally, disabling the cache using ``hdparm``, ``sdparm``, or ``smartctl``
+In most cases, disabling this cache  using ``hdparm``, ``sdparm``, or ``smartctl``
 results in the cache_type changing automatically to "write through". If this is
-not the case, you can try setting it directly as follows. (Users should note
+not the case, you can try setting it directly as follows. (Users should ensure
 that setting cache_type also correctly persists the caching mode of the device
-until the next reboot):
+until the next reboot as some drives require this to be repeated at every boot):
 
 .. code-block:: console
 
@@ -367,13 +444,13 @@ until the next reboot):
 Additional Considerations
 -------------------------
 
-You typically will run multiple OSDs per host, but you should ensure that the
-aggregate throughput of your OSD drives doesn't exceed the network bandwidth
-required to service a client's need to read or write data. You should also
-consider what percentage of the overall data the cluster stores on each host. If
-the percentage on a particular host is large and the host fails, it can lead to
-problems such as exceeding the ``full ratio``,  which causes Ceph to halt
-operations as a safety precaution that prevents data loss.
+Ceph operators typically provision  multiple OSDs per host, but you should
+ensure that the aggregate throughput of your OSD drives doesn't exceed the
+network bandwidth required to service a client's read and write operations.
+You should also each host's percentage of the cluster's overall capacity. If
+the percentage located on a particular host is large and the host fails, it
+can lead to problems such as recovery causing OSDs to exceed the ``full ratio``,
+which in turn causes Ceph to halt operations to prevent data loss.
 
 When you run multiple OSDs per host, you also need to ensure that the kernel
 is up to date. See `OS Recommendations`_ for notes on ``glibc`` and
@@ -384,7 +461,11 @@ multiple OSDs per host.
 Networks
 ========
 
-Provision at least 10 Gb/s networking in your racks.
+Provision at least 10 Gb/s networking in your datacenter, both among Ceph
+hosts and between clients and your Ceph cluster.  Network link active/active
+bonding across separate network switches is strongly recommended both for
+increased throughput and for tolerance of network failures and maintenance.
+Take care that your bonding hash policy distributes traffic across links.
 
 Speed
 -----
@@ -392,13 +473,20 @@ Speed
 It takes three hours to replicate 1 TB of data across a 1 Gb/s network and it
 takes thirty hours to replicate 10 TB across a 1 Gb/s network. But it takes only
 twenty minutes to replicate 1 TB across a 10 Gb/s network, and it takes
-only one hour to replicate 10 TB across a 10 Gb/s network. 
+only one hour to replicate 10 TB across a 10 Gb/s network.
+
+Note that a 40 Gb/s network link is effectively four 10 Gb/s channels in
+parallel, and that a 100Gb/s network link is effectively four 25 Gb/s channels
+in parallel.  Thus, and perhaps somewhat counterintuitively, an individual
+packet on a 25 Gb/s network has slightly lower latency compared to a 40 Gb/s
+network.
+
 
 Cost
 ----
 
 The larger the Ceph cluster, the more common OSD failures will be.
-The faster that a placement group (PG) can recover from a ``degraded`` state to
+The faster that a placement group (PG) can recover from a degraded state to
 an ``active + clean`` state, the better. Notably, fast recovery minimizes
 the likelihood of multiple, overlapping failures that can cause data to become
 temporarily unavailable or even lost. Of course, when provisioning your
@@ -410,10 +498,10 @@ switches. The added expense of this hardware may be offset by the operational
 cost savings on network setup and maintenance. When using VLANs to handle VM
 traffic between the cluster and compute stacks (e.g., OpenStack, CloudStack,
 etc.), there is additional value in using 10 Gb/s Ethernet or better; 40 Gb/s or
-25/50/100 Gb/s networking as of 2022 is common for production clusters.
+increasingly 25/50/100 Gb/s networking as of 2022 is common for production clusters.
 
-Top-of-rack (TOR) switches also need fast and redundant uplinks to spind
-spine switches / routers, often at least 40 Gb/s.
+Top-of-rack (TOR) switches also need fast and redundant uplinks to
+core / spine network switches or routers, often at least 40 Gb/s.
 
 
 Baseboard Management Controller (BMC)
@@ -425,78 +513,103 @@ Administration and deployment tools may also use BMCs extensively, especially
 via IPMI or Redfish, so consider the cost/benefit tradeoff of an out-of-band
 network for security and administration.  Hypervisor SSH access, VM image uploads,
 OS image installs, management sockets, etc. can impose significant loads on a network.
-Running three networks may seem like overkill, but each traffic path represents
+Running multiple networks may seem like overkill, but each traffic path represents
 a potential capacity, throughput and/or performance bottleneck that you should
 carefully consider before deploying a large scale data cluster.
+
+Additionally BMCs as of 2023 rarely sport network connections faster than 1 Gb/s,
+so dedicated and inexpensive 1 Gb/s switches for BMC administrative traffic
+may reduce costs by wasting fewer expenive ports on faster host switches.
  
 
 Failure Domains
 ===============
 
-A failure domain is any failure that prevents access to one or more OSDs. That
-could be a stopped daemon on a host; a disk failure, an OS crash, a
-malfunctioning NIC, a failed power supply, a network outage, a power outage,
-and so forth. When planning out your hardware needs, you must balance the
-temptation to reduce costs by placing too many responsibilities into too few
-failure domains, and the added costs of isolating every potential failure
-domain.
+A failure domain can be thought of as any component loss that prevents access to
+one or more OSDs or other Ceph daemons. These could be a stopped daemon on a host;
+a storage drive failure, an OS crash, a malfunctioning NIC, a failed power supply,
+a network outage, a power outage, and so forth. When planning your hardware
+deployment, you must balance the risk of reducing costs by placing too many
+responsibilities into too few failure domains against the added costs of
+isolating every potential failure domain.
 
 
 Minimum Hardware Recommendations
 ================================
 
 Ceph can run on inexpensive commodity hardware. Small production clusters
-and development clusters can run successfully with modest hardware.
+and development clusters can run successfully with modest hardware.  As
+we noted above: when we speak of CPU _cores_, we mean _threads_ when
+hyperthreading (HT) is enabled.  Each modern physical x64 CPU core typically
+provides two logical CPU threads; other CPU architectures may vary.
+
+Take care that there are many factors that influence resource choices.  The
+minimum resources that suffice for one purpose will not necessarily suffice for
+another.  A sandbox cluster with one OSD built on a laptop with VirtualBox or on
+a trio of Raspberry PIs will get by with fewer resources than a production
+deployment with a thousand OSDs serving five thousand of RBD clients.  The
+classic Fisher Price PXL 2000 captures video, as does an IMAX or RED camera.
+One would not expect the former to do the job of the latter.  We especially
+cannot stress enough the criticality of using enterprise-quality storage
+media for production workloads.
+
+Additional insights into resource planning for production clusters are
+found above and elsewhere within this documentation.
 
 +--------------+----------------+-----------------------------------------+
-|  Process     | Criteria       | Minimum Recommended                     |
+|  Process     | Criteria       | Bare Minimum and Recommended            |
 +==============+================+=========================================+
-| ``ceph-osd`` | Processor      | - 1 core minimum                        |
-|              |                | - 1 core per 200-500 MB/s               |
+| ``ceph-osd`` | Processor      | - 1 core minimum, 2 recommended         |
+|              |                | - 1 core per 200-500 MB/s throughput    |
 |              |                | - 1 core per 1000-3000 IOPS             |
 |              |                |                                         |
 |              |                | * Results are before replication.       |
-|              |                | * Results may vary with different       |
-|              |                |   CPU models and Ceph features.         |
+|              |                | * Results may vary across CPU and drive |
+|              |                |   models and Ceph configuration:        |
 |              |                |   (erasure coding, compression, etc)    |
 |              |                | * ARM processors specifically may       |
-|              |                |   require additional cores.             |
+|              |                |   require more cores for performance.   |
+|              |                | * SSD OSDs, especially NVMe, will       |
+|              |                |   benefit from additional cores per OSD.|
 |              |                | * Actual performance depends on many    |
 |              |                |   factors including drives, net, and    |
 |              |                |   client throughput and latency.        |
 |              |                |   Benchmarking is highly recommended.   |
 |              +----------------+-----------------------------------------+
 |              | RAM            | - 4GB+ per daemon (more is better)      |
-|              |                | - 2-4GB often functions (may be slow)   |
-|              |                | - Less than 2GB not recommended         |
+|              |                | - 2-4GB may function but may be slow    |
+|              |                | - Less than 2GB is not recommended      |
 |              +----------------+-----------------------------------------+
-|              | Volume Storage |  1x storage drive per daemon            |
+|              | Storage Drives |  1x storage drive per OSD               |
 |              +----------------+-----------------------------------------+
-|              | DB/WAL         |  1x SSD partition per daemon (optional) |
+|              | DB/WAL         |  1x SSD partion per HDD OSD             |
+|              | (optional)     |  4-5x HDD OSDs per DB/WAL SATA SSD      |
+|              |                |  <= 10 HDD OSDss per DB/WAL NVMe SSD    |
 |              +----------------+-----------------------------------------+
-|              | Network        |  1x 1GbE+ NICs (10GbE+ recommended)     |
+|              | Network        |  1x 1Gb/s (bonded 10+ Gb/s recommended) |
 +--------------+----------------+-----------------------------------------+
 | ``ceph-mon`` | Processor      | - 2 cores minimum                       |
 |              +----------------+-----------------------------------------+
-|              | RAM            |  2-4GB+ per daemon                      |
+|              | RAM            |  5GB+ per daemon (large / production    |
+|              |                |  clusters need more)                    |
 |              +----------------+-----------------------------------------+
-|              | Disk Space     |  60 GB per daemon                       |
+|              | Storage        |  100 GB per daemon, SSD is recommended  |
 |              +----------------+-----------------------------------------+
-|              | Network        |  1x 1GbE+ NICs                          |
+|              | Network        |  1x 1Gb/s (10+ Gb/s recommended)        |
 +--------------+----------------+-----------------------------------------+
 | ``ceph-mds`` | Processor      | - 2 cores minimum                       |
 |              +----------------+-----------------------------------------+
-|              | RAM            |  2GB+ per daemon                        |
+|              | RAM            |  2GB+ per daemon (more for production)  |
 |              +----------------+-----------------------------------------+
-|              | Disk Space     |  1 MB per daemon                        |
+|              | Disk Space     |  1 GB per daemon                        |
 |              +----------------+-----------------------------------------+
-|              | Network        |  1x 1GbE+ NICs                          |
+|              | Network        |  1x 1Gb/s (10+ Gb/s recommended)        |
 +--------------+----------------+-----------------------------------------+
 
-.. tip:: If you are running an OSD with a single disk, create a
-   partition for your volume storage that is separate from the partition
-   containing the OS. Generally, we recommend separate disks for the
-   OS and the volume storage.
+.. tip:: If you are running an OSD node with a single storage drive, create a
+   partition for your OSD that is separate from the partition
+   containing the OS. We recommend separate drives for the
+   OS and for OSD storage.
 
 
 
index 98cef7820fd5a610bfc6790846a1c1e21d3d0c3e..81906569ee56dcbc1a761e5c9a3fa16aaeeeccee 100644 (file)
@@ -35,20 +35,38 @@ Linux Kernel
 Platforms
 =========
 
-The charts below show how Ceph's requirements map onto various Linux
-platforms.  Generally speaking, there is very little dependence on
-specific distributions outside of the kernel and system initialization
-package (i.e., sysvinit, systemd).
-
-+--------------+--------+------------------------+--------------------------------+-------------------+-----------------+
-| Release Name | Tag    | CentOS                 | Ubuntu                         | OpenSUSE :sup:`C` | Debian :sup:`C` |
-+==============+========+========================+================================+===================+=================+
-| Quincy       | 17.2.z | 8 :sup:`A`             | 20.04 :sup:`A`                 | 15.3              | 11              |
-+--------------+--------+------------------------+--------------------------------+-------------------+-----------------+
-| Pacific      | 16.2.z | 8 :sup:`A`             | 18.04 :sup:`C`, 20.04 :sup:`A` | 15.2              | 10, 11          |
-+--------------+--------+------------------------+--------------------------------+-------------------+-----------------+
-| Octopus      | 15.2.z | 7 :sup:`B` 8 :sup:`A`  | 18.04 :sup:`C`, 20.04 :sup:`A` | 15.2              | 10              |
-+--------------+--------+------------------------+--------------------------------+-------------------+-----------------+
+The chart below shows which Linux platforms Ceph provides packages for, and
+which platforms Ceph has been tested on. 
+
+Ceph does not require a specific Linux distribution. Ceph can run on any
+distribution that includes a supported kernel and supported system startup
+framework, for example ``sysvinit`` or ``systemd``. Ceph is sometimes ported to
+non-Linux systems but these are not supported by the core Ceph effort.
+
+
++---------------+---------------+-----------------+------------------+------------------+
+|               | Reef (18.2.z) | Quincy (17.2.z) | Pacific (16.2.z) | Octopus (15.2.z) |
++===============+===============+=================+==================+==================+
+| Centos 7      |               |                 |         A        |      B           |
++---------------+---------------+-----------------+------------------+------------------+
+| Centos 8      |    A          |     A           |         A        |      A           |
++---------------+---------------+-----------------+------------------+------------------+
+| Centos 9      |    A          |                 |                  |                  |
++---------------+---------------+-----------------+------------------+------------------+
+| Debian 10     |    C          |                 |         C        |      C           |
++---------------+---------------+-----------------+------------------+------------------+
+| Debian 11     |    C          |     C           |         C        |                  |
++---------------+---------------+-----------------+------------------+------------------+
+| OpenSUSE 15.2 |    C          |                 |         C        |      C           |
++---------------+---------------+-----------------+------------------+------------------+
+| OpenSUSE 15.3 |    C          |     C           |                  |                  |
++---------------+---------------+-----------------+------------------+------------------+
+| Ubuntu 18.04  |               |                 |         C        |      C           |
++---------------+---------------+-----------------+------------------+------------------+
+| Ubuntu 20.04  |    A          |     A           |         A        |      A           |
++---------------+---------------+-----------------+------------------+------------------+
+| Ubuntu 22.04  |    A          |                 |                  |                  |
++---------------+---------------+-----------------+------------------+------------------+
 
 - **A**: Ceph provides packages and has done comprehensive tests on the software in them.
 - **B**: Ceph provides packages and has done basic tests on the software in them.
index e9dae008e289f04ddd02ec252c352048e001cc18..eb773c3eb40c1dc7a2489225e7ea1d20476beac8 100755 (executable)
@@ -141,19 +141,51 @@ function install_pkg_on_ubuntu {
     fi
 }
 
+boost_ver=1.79
+
+function clean_boost_on_ubuntu {
+    in_jenkins && echo "CI_DEBUG: Running clean_boost_on_ubuntu() in install-deps.sh"
+    # Find currently installed version. If there are multiple
+    # versions, they end up newline separated
+    local installed_ver=$(apt -qq list --installed ceph-libboost*-dev 2>/dev/null |
+                              cut -d' ' -f2 |
+                              cut -d'.' -f1,2 |
+                             sort -u)
+    # If installed_ver contains whitespace, we can't really count on it,
+    # but otherwise, bail out if the version installed is the version
+    # we want.
+    if test -n "$installed_ver" &&
+           echo -n "$installed_ver" | tr '[:space:]' ' ' | grep -v -q ' '; then
+       if echo "$installed_ver" | grep -q "^$boost_ver"; then
+           return
+        fi
+    fi
+
+    # Historical packages
+    $SUDO rm -f /etc/apt/sources.list.d/ceph-libboost*.list
+    # Currently used
+    $SUDO rm -f /etc/apt/sources.list.d/libboost.list
+    # Refresh package list so things aren't in the available list.
+    $SUDO env DEBIAN_FRONTEND=noninteractive apt-get update -y || true
+    # Remove all ceph-libboost packages. We have an early return if
+    # the desired version is already (and the only) version installed,
+    # so no need to spare it.
+    if test -n "$installed_ver"; then
+       $SUDO env DEBIAN_FRONTEND=noninteractive apt-get -y --fix-missing remove "ceph-libboost*"
+    fi
+}
+
 function install_boost_on_ubuntu {
     in_jenkins && echo "CI_DEBUG: Running install_boost_on_ubuntu() in install-deps.sh"
-    local ver=1.79
+    # Once we get to this point, clean_boost_on_ubuntu() should ensure
+    # that there is no more than one installed version.
     local installed_ver=$(apt -qq list --installed ceph-libboost*-dev 2>/dev/null |
                               grep -e 'libboost[0-9].[0-9]\+-dev' |
                               cut -d' ' -f2 |
                               cut -d'.' -f1,2)
     if test -n "$installed_ver"; then
-        if echo "$installed_ver" | grep -q "^$ver"; then
+        if echo "$installed_ver" | grep -q "^$boost_ver"; then
             return
-        else
-            $SUDO env DEBIAN_FRONTEND=noninteractive apt-get -y remove "ceph-libboost.*${installed_ver}.*"
-            $SUDO rm -f /etc/apt/sources.list.d/ceph-libboost${installed_ver}.list
         fi
     fi
     local codename=$1
@@ -164,22 +196,22 @@ function install_boost_on_ubuntu {
         $sha1 \
         $codename \
         check \
-        ceph-libboost-atomic$ver-dev \
-        ceph-libboost-chrono$ver-dev \
-        ceph-libboost-container$ver-dev \
-        ceph-libboost-context$ver-dev \
-        ceph-libboost-coroutine$ver-dev \
-        ceph-libboost-date-time$ver-dev \
-        ceph-libboost-filesystem$ver-dev \
-        ceph-libboost-iostreams$ver-dev \
-        ceph-libboost-program-options$ver-dev \
-        ceph-libboost-python$ver-dev \
-        ceph-libboost-random$ver-dev \
-        ceph-libboost-regex$ver-dev \
-        ceph-libboost-system$ver-dev \
-        ceph-libboost-test$ver-dev \
-        ceph-libboost-thread$ver-dev \
-        ceph-libboost-timer$ver-dev
+        ceph-libboost-atomic${boost_ver}-dev \
+        ceph-libboost-chrono${boost_ver}-dev \
+        ceph-libboost-container${boost_ver}-dev \
+        ceph-libboost-context${boost_ver}-dev \
+        ceph-libboost-coroutine${boost_ver}-dev \
+        ceph-libboost-date-time${boost_ver}-dev \
+        ceph-libboost-filesystem${boost_ver}-dev \
+        ceph-libboost-iostreams${boost_ver}-dev \
+        ceph-libboost-program-options${boost_ver}-dev \
+        ceph-libboost-python${boost_ver}-dev \
+        ceph-libboost-random${boost_ver}-dev \
+        ceph-libboost-regex${boost_ver}-dev \
+        ceph-libboost-system${boost_ver}-dev \
+        ceph-libboost-test${boost_ver}-dev \
+        ceph-libboost-thread${boost_ver}-dev \
+        ceph-libboost-timer${boost_ver}-dev
 }
 
 function install_libzbd_on_ubuntu {
@@ -330,6 +362,9 @@ else
     case "$ID" in
     debian|ubuntu|devuan|elementary|softiron)
         echo "Using apt-get to install dependencies"
+       # Put this before any other invocation of apt so it can clean
+       # up in a broken case.
+        clean_boost_on_ubuntu
         $SUDO apt-get install -y devscripts equivs
         $SUDO apt-get install -y dpkg-dev
         ensure_python3_sphinx_on_ubuntu
index 22bf2c98c003bf2786e8392bea831774ac623a91..721e9128c45ceeba17e86dfed0d1cd7f2e0bf3e3 100755 (executable)
@@ -132,7 +132,7 @@ build_dashboard_frontend() {
 
   $CURR_DIR/src/tools/setup-virtualenv.sh $TEMP_DIR
   $TEMP_DIR/bin/pip install nodeenv
-  $TEMP_DIR/bin/nodeenv --verbose -p --node=14.15.1
+  $TEMP_DIR/bin/nodeenv --verbose -p --node=18.17.0
   cd src/pybind/mgr/dashboard/frontend
 
   . $TEMP_DIR/bin/activate
index 6765a266a48518a42fcb34aad9a49d911f08357a..531c8e3e06b4f15c9123e2e13456b5c5acae4ed7 100644 (file)
@@ -3,3 +3,4 @@ log-rotate:
   ceph-osd: 10G
 tasks:
   - ceph:
+      create_rbd_pool: false
index 7f0d49eab63c70f2ef6e02a0c594ea0eb84b0f6d..d8b8192882e71845f92355ef0100554e47dd006f 100644 (file)
@@ -10,3 +10,4 @@ overrides:
       - \(MDS_ALL_DOWN\)
       - \(MDS_UP_LESS_THAN_MAX\)
       - \(FS_INLINE_DATA_DEPRECATED\)
+      - \(POOL_APP_NOT_ENABLED\)
diff --git a/ceph/qa/distros/crimson-supported-all-distro/centos_8.yaml b/ceph/qa/distros/crimson-supported-all-distro/centos_8.yaml
new file mode 120000 (symlink)
index 0000000..b7e6c9b
--- /dev/null
@@ -0,0 +1 @@
+../all/centos_8.yaml
\ No newline at end of file
diff --git a/ceph/qa/distros/crimson-supported-all-distro/centos_latest.yaml b/ceph/qa/distros/crimson-supported-all-distro/centos_latest.yaml
new file mode 120000 (symlink)
index 0000000..2e29883
--- /dev/null
@@ -0,0 +1 @@
+../all/centos_latest.yaml
\ No newline at end of file
diff --git a/ceph/qa/distros/supported-all-distro/centos_latest.yaml b/ceph/qa/distros/supported-all-distro/centos_latest.yaml
new file mode 120000 (symlink)
index 0000000..2e29883
--- /dev/null
@@ -0,0 +1 @@
+../all/centos_latest.yaml
\ No newline at end of file
diff --git a/ceph/qa/distros/supported-all-distro/ubuntu_20.04.yaml b/ceph/qa/distros/supported-all-distro/ubuntu_20.04.yaml
new file mode 120000 (symlink)
index 0000000..75d907e
--- /dev/null
@@ -0,0 +1 @@
+../all/ubuntu_20.04.yaml
\ No newline at end of file
index 75d907e3b9cf89b29f9582831cfc1fa1ada69533..cfcd0d1a826a527a4e08e1eb40ed20fe03d44acd 120000 (symlink)
@@ -1 +1 @@
-../all/ubuntu_20.04.yaml
\ No newline at end of file
+../all/ubuntu_latest.yaml
\ No newline at end of file
diff --git a/ceph/qa/rbd/conf/+ b/ceph/qa/rbd/conf/+
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/rbd/conf/disable-pool-app.yaml b/ceph/qa/rbd/conf/disable-pool-app.yaml
new file mode 100644 (file)
index 0000000..099532f
--- /dev/null
@@ -0,0 +1,5 @@
+overrides:
+  ceph:
+    conf:
+      global:
+        mon warn on pool no app: false
diff --git a/ceph/qa/rbd/data-pool/ec.yaml b/ceph/qa/rbd/data-pool/ec.yaml
new file mode 100644 (file)
index 0000000..f39a5bb
--- /dev/null
@@ -0,0 +1,24 @@
+tasks:
+- exec:
+    client.0:
+      - sudo ceph osd erasure-code-profile set teuthologyprofile crush-failure-domain=osd m=1 k=2
+      - sudo ceph osd pool create datapool 4 4 erasure teuthologyprofile
+      - sudo ceph osd pool set datapool allow_ec_overwrites true
+      - rbd pool init datapool
+
+overrides:
+  thrashosds:
+    bdev_inject_crash: 2
+    bdev_inject_crash_probability: .5
+  ceph:
+    fs: xfs
+    conf:
+      client:
+        rbd default data pool: datapool
+      osd: # force bluestore since it's required for ec overwrites
+        osd objectstore: bluestore
+        bluestore block size: 96636764160
+        enable experimental unrecoverable data corrupting features: "*"
+        osd debug randomize hobject sort order: false
+# this doesn't work with failures bc the log writes are not atomic across the two backends
+#        bluestore bluefs env mirror: true
diff --git a/ceph/qa/rbd/data-pool/none.yaml b/ceph/qa/rbd/data-pool/none.yaml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/rbd/data-pool/replicated.yaml b/ceph/qa/rbd/data-pool/replicated.yaml
new file mode 100644 (file)
index 0000000..c5647db
--- /dev/null
@@ -0,0 +1,11 @@
+tasks:
+- exec:
+    client.0:
+      - sudo ceph osd pool create datapool 4
+      - rbd pool init datapool
+
+overrides:
+  ceph:
+    conf:
+      client:
+        rbd default data pool: datapool
index 4b08b6b075d8d33439caf92c0571e4c1e59f8bfd..732e40306b6d105602cadd0054f72860e16a2720 100644 (file)
@@ -1,9 +1,11 @@
 # https://tracker.ceph.com/issues/45802
 # https://tracker.ceph.com/issues/51282
 # https://tracker.ceph.com/issues/61168
+# https://tracker.ceph.com/issues/62504
 overrides:
   ceph:
     log-ignorelist:
     - \(PG_AVAILABILITY\)
     - \(PG_DEGRADED\)
     - \(POOL_APP_NOT_ENABLED\)
+    - not have an application enabled
index 9f93be9233739272856946f3ef0cc8931849bc62..bf2c91bc04274d09b2c97bd18b36ff48c7015f1e 100755 (executable)
@@ -1747,6 +1747,29 @@ function test_wait_for_peered() {
 
 #######################################################################
 
+##
+# Wait until the cluster's health condition disappeared.
+# $TIMEOUT default
+#
+# @param string to grep for in health detail
+# @return 0 if the cluster health doesn't matches request,
+# 1 otherwise if after $TIMEOUT seconds health condition remains.
+#
+function wait_for_health_gone() {
+    local grepstr=$1
+    local -a delays=($(get_timeout_delays $TIMEOUT .1))
+    local -i loop=0
+
+    while ceph health detail | grep "$grepstr" ; do
+       if (( $loop >= ${#delays[*]} )) ; then
+            ceph health detail
+            return 1
+        fi
+        sleep ${delays[$loop]}
+        loop+=1
+    done
+}
+
 ##
 # Wait until the cluster has health condition passed as arg
 # again for $TIMEOUT seconds.
index 9ec5f5231345ab4ce6c25d648803e1550489e607..276d26aabbe6e9cf6c5e4ab5df8236425dc63632 100755 (executable)
@@ -144,6 +144,5 @@ EOF
     sleep 3
 
     teardown $dir || return 1
-
 }
 main mon-stretch-fail-recovery "$@"
\ No newline at end of file
diff --git a/ceph/qa/standalone/mon-stretch/mon-stretch-uneven-crush-weights.sh b/ceph/qa/standalone/mon-stretch/mon-stretch-uneven-crush-weights.sh
new file mode 100755 (executable)
index 0000000..7e13f40
--- /dev/null
@@ -0,0 +1,145 @@
+#!/usr/bin/env bash
+
+source $CEPH_ROOT/qa/standalone/ceph-helpers.sh
+function run() {
+    local dir=$1
+    shift
+
+    export CEPH_MON_A="127.0.0.1:7139" # git grep '\<7139\>' : there must be only one
+    export CEPH_MON_B="127.0.0.1:7141" # git grep '\<7141\>' : there must be only one
+    export CEPH_MON_C="127.0.0.1:7142" # git grep '\<7142\>' : there must be only one
+    export CEPH_MON_D="127.0.0.1:7143" # git grep '\<7143\>' : there must be only one
+    export CEPH_MON_E="127.0.0.1:7144" # git grep '\<7144\>' : there must be only one
+    export CEPH_ARGS
+    CEPH_ARGS+="--fsid=$(uuidgen) --auth-supported=none "
+
+    export BASE_CEPH_ARGS=$CEPH_ARGS
+    CEPH_ARGS+="--mon-host=$CEPH_MON_A"
+
+    local funcs=${@:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')}
+    for func in $funcs ; do
+        setup $dir || return 1
+        $func $dir || return 1
+        teardown $dir || return 1
+    done
+}
+TEST_stretched_cluster_uneven_weight() {
+    local dir=$1
+    local OSDS=4
+    local weight=0.09000
+    setup $dir || return 1
+
+    run_mon $dir a --public-addr $CEPH_MON_A || return 1
+    wait_for_quorum 300 1 || return 1
+
+    run_mon $dir b --public-addr $CEPH_MON_B || return 1
+    CEPH_ARGS="$BASE_CEPH_ARGS --mon-host=$CEPH_MON_A,$CEPH_MON_B"
+    wait_for_quorum 300 2 || return 1
+
+    run_mon $dir c --public-addr $CEPH_MON_C || return 1
+    CEPH_ARGS="$BASE_CEPH_ARGS --mon-host=$CEPH_MON_A,$CEPH_MON_B,$CEPH_MON_C"
+    wait_for_quorum 300 3 || return 1
+
+    run_mon $dir d --public-addr $CEPH_MON_D || return 1
+    CEPH_ARGS="$BASE_CEPH_ARGS --mon-host=$CEPH_MON_A,$CEPH_MON_B,$CEPH_MON_C,$CEPH_MON_D"
+    wait_for_quorum 300 4 || return 1
+
+    run_mon $dir e --public-addr $CEPH_MON_E || return 1
+    CEPH_ARGS="$BASE_CEPH_ARGS --mon-host=$CEPH_MON_A,$CEPH_MON_B,$CEPH_MON_C,$CEPH_MON_D,$CEPH_MON_E"
+    wait_for_quorum 300 5 || return 1
+
+    ceph mon set election_strategy connectivity
+    ceph mon add disallowed_leader e
+
+    run_mgr $dir x || return 1
+    run_mgr $dir y || return 1
+    run_mgr $dir z || return 1
+
+    for osd in $(seq 0 $(expr $OSDS - 1))
+    do
+      run_osd $dir $osd || return 1
+    done
+    
+    for zone in iris pze
+    do
+      ceph osd crush add-bucket $zone zone
+      ceph osd crush move $zone root=default
+    done
+
+    ceph osd crush add-bucket node-2 host
+    ceph osd crush add-bucket node-3 host
+    ceph osd crush add-bucket node-4 host
+    ceph osd crush add-bucket node-5 host
+
+    ceph osd crush move node-2 zone=iris
+    ceph osd crush move node-3 zone=iris
+    ceph osd crush move node-4 zone=pze
+    ceph osd crush move node-5 zone=pze
+
+    ceph osd crush move osd.0 host=node-2
+    ceph osd crush move osd.1 host=node-3
+    ceph osd crush move osd.2 host=node-4
+    ceph osd crush move osd.3 host=node-5
+    
+    ceph mon set_location a zone=iris host=node-2
+    ceph mon set_location b zone=iris host=node-3
+    ceph mon set_location c zone=pze host=node-4
+    ceph mon set_location d zone=pze host=node-5
+
+    hostname=$(hostname -s)
+    ceph osd crush remove $hostname || return 1
+    ceph osd getcrushmap > crushmap || return 1
+    crushtool --decompile crushmap > crushmap.txt || return 1
+    sed 's/^# end crush map$//' crushmap.txt > crushmap_modified.txt || return 1
+    cat >> crushmap_modified.txt << EOF
+rule stretch_rule {
+        id 1
+        type replicated
+        min_size 1
+        max_size 10
+        step take iris
+        step chooseleaf firstn 2 type host
+        step emit
+        step take pze
+        step chooseleaf firstn 2 type host
+        step emit
+}
+# end crush map
+EOF
+
+    crushtool --compile crushmap_modified.txt -o crushmap.bin || return 1
+    ceph osd setcrushmap -i crushmap.bin  || return 1
+    local stretched_poolname=stretched_rbdpool
+    ceph osd pool create $stretched_poolname 32 32 stretch_rule || return 1
+    ceph osd pool set $stretched_poolname size 4 || return 1
+
+    ceph mon set_location e zone=arbiter host=node-1 || return 1
+    ceph mon enable_stretch_mode e stretch_rule zone || return 1 # Enter strech mode
+
+    # reweight to a more round decimal.
+    ceph osd crush reweight osd.0 $weight
+    ceph osd crush reweight osd.1 $weight
+    ceph osd crush reweight osd.2 $weight
+    ceph osd crush reweight osd.3 $weight
+
+    # Firstly, we test for stretch mode buckets != 2
+    ceph osd crush add-bucket sham zone || return 1
+    ceph osd crush move sham root=default || return 1
+    wait_for_health "INCORRECT_NUM_BUCKETS_STRETCH_MODE" || return 1
+
+    ceph osd crush rm sham # clear the health warn
+    wait_for_health_gone "INCORRECT_NUM_BUCKETS_STRETCH_MODE" || return 1
+
+    # Next, we test for uneven weights across buckets
+
+    ceph osd crush reweight osd.0 0.07000
+
+    wait_for_health "UNEVEN_WEIGHTS_STRETCH_MODE" || return 1
+
+    ceph osd crush reweight osd.0 $weight # clear the health warn
+
+    wait_for_health_gone "UNEVEN_WEIGHTS_STRETCH_MODE" || return 1
+
+    teardown $dir || return 1
+}
+main mon-stretched-cluster-uneven-weight "$@"
\ No newline at end of file
index 172642e86559780a0b595c6521851e1d5e80f8ff..82243103e6e110fdccac13abdb9b3d282c089e2b 100755 (executable)
@@ -173,7 +173,7 @@ function TEST_mon_last_clean_epoch() {
   local dir=$1
 
   run_mon $dir a || return 1
-  run_mgr $dir x || return 1
+  run_mgr $dir x --mon-warn-on-pool-no-app=false || return 1
   run_osd $dir 0 || return 1
   run_osd $dir 1 || return 1
   run_osd $dir 2 || return 1
index dec0e7ad4e1bca0d048fbbf4495bf309a1fcf804..40d72544d1b062b1b17f0677ccd8f25bef3ffe59 100755 (executable)
@@ -650,13 +650,28 @@ function TEST_divergent_3() {
     # reproduce https://tracker.ceph.com/issues/41816
     ceph osd pool set $poolname pg_autoscale_mode on
 
-    flush_pg_stats || return 1
-    wait_for_clean || return 1
+    divergent=-1
+    start_time=$(date +%s)
+    max_duration=300
+
+    while [ "$divergent" -le -1 ]
+      do
+        flush_pg_stats || return 1
+        wait_for_clean || return 1
+
+        # determine primary
+        divergent="$(ceph pg dump pgs --format=json | jq '.pg_stats[0].up_primary')"
+        echo "primary and soon to be divergent is $divergent"
+        ceph pg dump pgs
+
+        current_time=$(date +%s)
+        elapsed_time=$(expr $current_time - $start_time)
+        if [ "$elapsed_time" -gt "$max_duration" ]; then
+          echo "timed out waiting for divergent"
+          return 1
+        fi
+    done
 
-    # determine primary
-    local divergent="$(ceph pg dump pgs --format=json | jq '.pg_stats[0].up_primary')"
-    echo "primary and soon to be divergent is $divergent"
-    ceph pg dump pgs
     local non_divergent=""
     for i in $osds
     do
diff --git a/ceph/qa/suites/crimson-rados/basic/centos_8.stream.yaml b/ceph/qa/suites/crimson-rados/basic/centos_8.stream.yaml
new file mode 120000 (symlink)
index 0000000..5dceec7
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/supported/centos_8.stream.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/basic/centos_latest.yaml b/ceph/qa/suites/crimson-rados/basic/centos_latest.yaml
deleted file mode 120000 (symlink)
index bd9854e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_latest.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/basic/crimson-supported-all-distro b/ceph/qa/suites/crimson-rados/basic/crimson-supported-all-distro
new file mode 120000 (symlink)
index 0000000..a5b729b
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/crimson-supported-all-distro/
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/rbd/centos_8.stream.yaml b/ceph/qa/suites/crimson-rados/rbd/centos_8.stream.yaml
new file mode 120000 (symlink)
index 0000000..5dceec7
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/supported/centos_8.stream.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/rbd/centos_latest.yaml b/ceph/qa/suites/crimson-rados/rbd/centos_latest.yaml
deleted file mode 120000 (symlink)
index bd9854e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_latest.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/rbd/crimson-supported-all-distro b/ceph/qa/suites/crimson-rados/rbd/crimson-supported-all-distro
new file mode 120000 (symlink)
index 0000000..a5b729b
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/crimson-supported-all-distro/
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/singleton/% b/ceph/qa/suites/crimson-rados/singleton/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/crimson-rados/singleton/.qa b/ceph/qa/suites/crimson-rados/singleton/.qa
new file mode 120000 (symlink)
index 0000000..fea2489
--- /dev/null
@@ -0,0 +1 @@
+../.qa
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/singleton/all/.qa b/ceph/qa/suites/crimson-rados/singleton/all/.qa
new file mode 120000 (symlink)
index 0000000..fea2489
--- /dev/null
@@ -0,0 +1 @@
+../.qa
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/singleton/all/osd-backfill.yaml b/ceph/qa/suites/crimson-rados/singleton/all/osd-backfill.yaml
new file mode 100644 (file)
index 0000000..f475d5d
--- /dev/null
@@ -0,0 +1,29 @@
+roles:
+- - mon.a
+  - mon.b
+  - mon.c
+  - mgr.x
+  - osd.0
+  - osd.1
+  - osd.2
+openstack:
+  - volumes: # attached to each instance
+      count: 3
+      size: 10 # GB
+tasks:
+- install:
+    flavor: crimson
+- ceph:
+    pre-mgr-commands:
+      - sudo ceph config set mgr mgr_pool false --force
+    log-ignorelist:
+      - but it is still running
+      - overall HEALTH_
+      - \(OSDMAP_FLAGS\)
+      - \(OSD_
+      - \(PG_
+      - \(OBJECT_
+    conf:
+      osd:
+        osd min pg log entries: 5
+- osd_backfill:
diff --git a/ceph/qa/suites/crimson-rados/singleton/crimson-supported-all-distro b/ceph/qa/suites/crimson-rados/singleton/crimson-supported-all-distro
new file mode 120000 (symlink)
index 0000000..a5b729b
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/crimson-supported-all-distro/
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/singleton/crimson_qa_overrides.yaml b/ceph/qa/suites/crimson-rados/singleton/crimson_qa_overrides.yaml
new file mode 120000 (symlink)
index 0000000..2bf67af
--- /dev/null
@@ -0,0 +1 @@
+.qa/config/crimson_qa_overrides.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/singleton/objectstore b/ceph/qa/suites/crimson-rados/singleton/objectstore
new file mode 120000 (symlink)
index 0000000..dbccf5a
--- /dev/null
@@ -0,0 +1 @@
+../thrash/objectstore
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/singleton/rados.yaml b/ceph/qa/suites/crimson-rados/singleton/rados.yaml
new file mode 120000 (symlink)
index 0000000..e95c99e
--- /dev/null
@@ -0,0 +1 @@
+./.qa/suites/rados/singleton/rados.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/thrash/centos_8.stream.yaml b/ceph/qa/suites/crimson-rados/thrash/centos_8.stream.yaml
new file mode 120000 (symlink)
index 0000000..5dceec7
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/supported/centos_8.stream.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/thrash/centos_latest.yaml b/ceph/qa/suites/crimson-rados/thrash/centos_latest.yaml
deleted file mode 120000 (symlink)
index bd9854e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported/centos_latest.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/crimson-rados/thrash/crimson-supported-all-distro b/ceph/qa/suites/crimson-rados/thrash/crimson-supported-all-distro
new file mode 120000 (symlink)
index 0000000..a5b729b
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/crimson-supported-all-distro/
\ No newline at end of file
index ff8b3a58a767ab5948ee661f05ff0ac680bb0799..7703aee9322dd75bbbcf3e3b23002a09c245603e 100644 (file)
@@ -19,6 +19,7 @@ overrides:
       - MDS_READ_ONLY
       - force file system read-only
       - with standby daemon mds
+      - MDS abort because newly corrupt dentry
 tasks:
   - cephfs_test_runner:
       modules:
diff --git a/ceph/qa/suites/fs/mirror-ha/cephfs-mirror/+ b/ceph/qa/suites/fs/mirror-ha/cephfs-mirror/+
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/fs/mirror-ha/cephfs-mirror/1-volume-create-rm.yaml b/ceph/qa/suites/fs/mirror-ha/cephfs-mirror/1-volume-create-rm.yaml
new file mode 100644 (file)
index 0000000..4ee16e1
--- /dev/null
@@ -0,0 +1,14 @@
+meta:
+- desc: create/rm volumes and set configs
+
+tasks:
+  - exec:
+      mon.a:
+        - "ceph fs volume create dc"
+        - "ceph fs volume create dc-backup"
+  - full_sequential_finally:
+    - exec:
+        mon.a:
+          - ceph config set mon mon_allow_pool_delete true
+          - ceph fs volume rm dc --yes-i-really-mean-it
+          - ceph fs volume rm dc-backup --yes-i-really-mean-it
diff --git a/ceph/qa/suites/fs/mirror-ha/cephfs-mirror/2-three-per-cluster.yaml b/ceph/qa/suites/fs/mirror-ha/cephfs-mirror/2-three-per-cluster.yaml
new file mode 100644 (file)
index 0000000..095f089
--- /dev/null
@@ -0,0 +1,12 @@
+meta:
+- desc: run one cephfs-mirror daemon on primary cluster
+tasks:
+- cephfs-mirror:
+    client: client.mirror1
+    run_in_foreground: True
+- cephfs-mirror:
+    client: client.mirror2
+    run_in_foreground: True
+- cephfs-mirror:
+    client: client.mirror3
+    run_in_foreground: True
diff --git a/ceph/qa/suites/fs/mirror-ha/cephfs-mirror/three-per-cluster.yaml b/ceph/qa/suites/fs/mirror-ha/cephfs-mirror/three-per-cluster.yaml
deleted file mode 100644 (file)
index 095f089..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-meta:
-- desc: run one cephfs-mirror daemon on primary cluster
-tasks:
-- cephfs-mirror:
-    client: client.mirror1
-    run_in_foreground: True
-- cephfs-mirror:
-    client: client.mirror2
-    run_in_foreground: True
-- cephfs-mirror:
-    client: client.mirror3
-    run_in_foreground: True
index f43a9a4ba7b258769b8ecbeb861c28b8f8405680..ce4dddf78d51e4a68a41d0d71ab8fee045f512f1 100644 (file)
@@ -8,17 +8,6 @@ overrides:
         debug client: 10
 
 tasks:
-  - exec:
-      mon.a:
-        - "ceph fs volume create dc"
-        - "ceph fs volume create dc-backup"
-  # Remove volumes during unwind to avoid MDS replacement warnings:
-  - full_sequential_finally:
-    - exec:
-        mon.a:
-          - ceph config set mon mon_allow_pool_delete true
-          - ceph fs volume rm dc --yes-i-really-mean-it
-          - ceph fs volume rm dc-backup --yes-i-really-mean-it
   - ceph-fuse:
       client.1:
         cephfs_name: dc
index 5329fa67ff1eabcbfd0a927b079f3f9bc6feecde..8293595e2d09a4304b4beaf4a1a74916aaf91a60 100644 (file)
@@ -2,16 +2,24 @@
 tasks:
 - pexec:
     clients:
+      - set -x
       - cd $TESTDIR
-      - wget http://download.ceph.com/qa/ior.tbz2
-      - tar xvfj ior.tbz2
-      - cd ior
+      # partially or incorrectly installed mpich will create a mess and the
+      # configure script or the build process (which is initiated using "make"
+      # command) for the ior project will fail
+      - sudo apt purge -y mpich
+      - sudo apt install -y mpich
+      - wget http://download.ceph.com/qa/ior-3.3.0.tar.bz2
+      - tar xvfj ior-3.3.0.tar.bz2
+      - cd ior-3.3.0
       - ./configure
       - make
       - make install DESTDIR=$TESTDIR/binary/
       - cd $TESTDIR/
-      - rm ior.tbz2
-      - rm -r ior
+      - sudo apt install -y tree
+      - tree binary/
+      - rm ior-3.3.0.tar.bz2
+      - rm -r ior-3.3.0
       - ln -s $TESTDIR/mnt.* $TESTDIR/gmnt
 - ssh_keys:
 - mpi:
index c2bbd2fbe2904ad5d959638aa32af6d01243aca7..32720e488d4f57f0cb83c5fd0de20f66ad4ee91b 100644 (file)
@@ -2,19 +2,33 @@
 tasks:
 - pexec:
     clients:
+      - set -x
       - cd $TESTDIR
-      - wget http://download.ceph.com/qa/mdtest-1.9.3.tgz
-      - mkdir mdtest-1.9.3
-      - cd mdtest-1.9.3
-      - tar xvfz $TESTDIR/mdtest-1.9.3.tgz
-      - rm $TESTDIR/mdtest-1.9.3.tgz
-      - MPI_CC=mpicc make
+      - sudo apt purge -y mpich
+      - sudo apt install -y mpich
+      # use ior project instead of mdtest project because latter has been
+      # merged into former. See:
+      # https://github.com/MDTEST-LANL/mdtest/blob/master/README.md
+      - wget http://download.ceph.com/qa/ior-3.3.0.tar.bz2
+      - tar xvfj ior-3.3.0.tar.bz2
+      - cd ior-3.3.0
+      # this option was set originall when mdtest binary was built using
+      # mdtest PR and not through ior project.
+      #- MPI_CC=mpicc make
+      - ./configure
+      - make
+      - make install DESTDIR=$TESTDIR/binary/
+      - cd $TESTDIR/
+      - sudo apt install -y tree
+      - tree binary/
+      - rm ior-3.3.0.tar.bz2
+      - rm -r ior-3.3.0
       - ln -s $TESTDIR/mnt.* $TESTDIR/gmnt
 - ssh_keys:
 - mpi:
-    exec: $TESTDIR/mdtest-1.9.3/mdtest -d $TESTDIR/gmnt -I 20 -z 5 -b 2 -R
+    exec: $TESTDIR/binary/usr/local/bin/mdtest -d $TESTDIR/gmnt -I 20 -z 5 -b 2 -R
 - pexec:
     clients:
+      - rm -f $TESTDIR/gmnt/ior.testfile
       - rm -f $TESTDIR/gmnt
-      - rm -rf $TESTDIR/mdtest-1.9.3
-      - rm -rf $TESTDIR/._mdtest-1.9.3
+      - rm -rf $TESTDIR/binary
diff --git a/ceph/qa/suites/fs/nfs/% b/ceph/qa/suites/fs/nfs/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/fs/nfs/.qa b/ceph/qa/suites/fs/nfs/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/fs/nfs/cluster/+ b/ceph/qa/suites/fs/nfs/cluster/+
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/fs/nfs/cluster/.qa b/ceph/qa/suites/fs/nfs/cluster/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/fs/nfs/cluster/1-node.yaml b/ceph/qa/suites/fs/nfs/cluster/1-node.yaml
new file mode 100644 (file)
index 0000000..8eeec7d
--- /dev/null
@@ -0,0 +1,16 @@
+meta:
+- desc: 1 ceph cluster with 1 mon, 1 mgr, 3 osds, 2 mds, 1 client
+roles:
+- - host.a
+  - mon.a
+  - mgr.x
+  - osd.0
+  - osd.1
+  - osd.2
+  - client.0
+tasks:
+- install:
+- cephadm:
+- cephadm.shell:
+    host.a:
+      - ceph orch apply mds a
diff --git a/ceph/qa/suites/fs/nfs/overrides/.qa b/ceph/qa/suites/fs/nfs/overrides/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/fs/nfs/overrides/ignorelist_health.yaml b/ceph/qa/suites/fs/nfs/overrides/ignorelist_health.yaml
new file mode 100644 (file)
index 0000000..8bfe4dc
--- /dev/null
@@ -0,0 +1,13 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - overall HEALTH_
+      - \(FS_DEGRADED\)
+      - \(MDS_FAILED\)
+      - \(MDS_DEGRADED\)
+      - \(FS_WITH_FAILED_MDS\)
+      - \(MDS_DAMAGE\)
+      - \(MDS_ALL_DOWN\)
+      - \(MDS_UP_LESS_THAN_MAX\)
+      - \(FS_INLINE_DATA_DEPRECATED\)
+      - \(OSD_DOWN\)
diff --git a/ceph/qa/suites/fs/nfs/supported-random-distros$ b/ceph/qa/suites/fs/nfs/supported-random-distros$
new file mode 120000 (symlink)
index 0000000..0862b44
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/supported-random-distro$
\ No newline at end of file
diff --git a/ceph/qa/suites/fs/nfs/tasks/.qa b/ceph/qa/suites/fs/nfs/tasks/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/fs/nfs/tasks/nfs.yaml b/ceph/qa/suites/fs/nfs/tasks/nfs.yaml
new file mode 100644 (file)
index 0000000..aa966bf
--- /dev/null
@@ -0,0 +1,4 @@
+tasks:
+  - cephfs_test_runner:
+      modules:
+        - tasks.cephfs.test_nfs
diff --git a/ceph/qa/suites/fs/thrash/multifs/overrides/client-shutdown.yaml b/ceph/qa/suites/fs/thrash/multifs/overrides/client-shutdown.yaml
new file mode 100644 (file)
index 0000000..30b2ea9
--- /dev/null
@@ -0,0 +1,6 @@
+# Lengthen the timeout for thrashed MDS
+overrides:
+  ceph:
+    conf:
+      client:
+        client_shutdown_timeout: 120
diff --git a/ceph/qa/suites/fs/thrash/workloads/overrides/client-shutdown.yaml b/ceph/qa/suites/fs/thrash/workloads/overrides/client-shutdown.yaml
new file mode 100644 (file)
index 0000000..30b2ea9
--- /dev/null
@@ -0,0 +1,6 @@
+# Lengthen the timeout for thrashed MDS
+overrides:
+  ceph:
+    conf:
+      client:
+        client_shutdown_timeout: 120
index 12a84a9ba7c98c47250a17794dd556356cea44bf..7e71dbc884da73f2ce0598e15abefe94beaeeb9a 100644 (file)
@@ -30,7 +30,7 @@ tasks:
       - sudo -u postgres -- postgresql-setup --initdb
       - sudo ls -lZaR /tmp/cephfs/postgres/
       - sudo systemctl start postgresql
-      - sudo -u postgres -- pgbench -s 500 -i
+      - sudo -u postgres -- pgbench -s 32 -i
       - sudo -u postgres -- pgbench -c 100 -j 4 --progress=5 --time=900
       - sudo systemctl stop postgresql
       - sudo ls -lZaR /tmp/cephfs/postgres/
index 5e7ed992e9048e3eeef7f12d8ec0b7024f8a378b..41292fa813980d60927ce76215b218c9bb9d59d1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
       client:
         rbd default features: 37
index 30da870b25df9a46897574a336aff82c55ee2c37..eb6d72a801afaf8ab38fb64b50077c5c8133335b 100644 (file)
@@ -2,4 +2,5 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
index 30da870b25df9a46897574a336aff82c55ee2c37..eb6d72a801afaf8ab38fb64b50077c5c8133335b 100644 (file)
@@ -2,4 +2,5 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
index 5e7ed992e9048e3eeef7f12d8ec0b7024f8a378b..41292fa813980d60927ce76215b218c9bb9d59d1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
       client:
         rbd default features: 37
index 5e7ed992e9048e3eeef7f12d8ec0b7024f8a378b..41292fa813980d60927ce76215b218c9bb9d59d1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
       client:
         rbd default features: 37
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/% b/ceph/qa/suites/krbd/singleton-msgr-failures/%
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/.qa b/ceph/qa/suites/krbd/singleton-msgr-failures/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/bluestore-bitmap.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/bluestore-bitmap.yaml
new file mode 120000 (symlink)
index 0000000..a59cf51
--- /dev/null
@@ -0,0 +1 @@
+.qa/objectstore/bluestore-bitmap.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/conf.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/conf.yaml
new file mode 100644 (file)
index 0000000..5e7ed99
--- /dev/null
@@ -0,0 +1,7 @@
+overrides:
+  ceph:
+    conf:
+      global:
+        ms die on skipped message: false
+      client:
+        rbd default features: 37
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/.qa b/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/crc-rxbounce.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/crc-rxbounce.yaml
new file mode 100644 (file)
index 0000000..4d27d01
--- /dev/null
@@ -0,0 +1,5 @@
+overrides:
+  ceph:
+    conf:
+      client:
+        rbd default map options: ms_mode=crc,rxbounce
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/crc.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/crc.yaml
new file mode 100644 (file)
index 0000000..3b07257
--- /dev/null
@@ -0,0 +1,5 @@
+overrides:
+  ceph:
+    conf:
+      client:
+        rbd default map options: ms_mode=crc
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/legacy-rxbounce.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/legacy-rxbounce.yaml
new file mode 100644 (file)
index 0000000..244e45c
--- /dev/null
@@ -0,0 +1,5 @@
+overrides:
+  ceph:
+    conf:
+      client:
+        rbd default map options: ms_mode=legacy,rxbounce
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/legacy.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/legacy.yaml
new file mode 100644 (file)
index 0000000..0048dcb
--- /dev/null
@@ -0,0 +1,5 @@
+overrides:
+  ceph:
+    conf:
+      client:
+        rbd default map options: ms_mode=legacy
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/secure.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/ms_mode$/secure.yaml
new file mode 100644 (file)
index 0000000..a735db1
--- /dev/null
@@ -0,0 +1,5 @@
+overrides:
+  ceph:
+    conf:
+      client:
+        rbd default map options: ms_mode=secure
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/.qa b/ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/few.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/few.yaml
new file mode 100644 (file)
index 0000000..5192889
--- /dev/null
@@ -0,0 +1,8 @@
+overrides:
+  ceph:
+    conf:
+      global:
+        ms inject socket failures: 5000
+        mon client directed command retry: 5
+    log-ignorelist:
+      - \(OSD_SLOW_PING_TIME
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/many.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/msgr-failures/many.yaml
new file mode 100644 (file)
index 0000000..e385529
--- /dev/null
@@ -0,0 +1,8 @@
+overrides:
+  ceph:
+    conf:
+      global:
+        ms inject socket failures: 500
+        mon client directed command retry: 5
+    log-ignorelist:
+      - \(OSD_SLOW_PING_TIME
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/tasks/.qa b/ceph/qa/suites/krbd/singleton-msgr-failures/tasks/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/krbd/singleton-msgr-failures/tasks/rbd_xfstests.yaml b/ceph/qa/suites/krbd/singleton-msgr-failures/tasks/rbd_xfstests.yaml
new file mode 100644 (file)
index 0000000..c94af02
--- /dev/null
@@ -0,0 +1,38 @@
+roles:
+- [mon.a, mon.c, osd.0, osd.1, osd.2]
+- [mon.b, mgr.x, mds.a, osd.3, osd.4, osd.5]
+- [client.0]
+- [client.1]
+openstack:
+- volumes: # attached to each instance
+    count: 3
+    size: 10 # GB
+tasks:
+- install:
+- ceph:
+- rbd.xfstests:
+    client.0: &ref
+        test_image: 'test_image-0'
+        test_size: 5120  # MB
+        scratch_image: 'scratch_image-0'
+        scratch_size: 15360  # MB
+        fs_type: ext4
+        tests: '-g auto -g blockdev -x clone'
+        exclude:
+        - generic/042
+        - generic/392
+        - generic/044
+        - generic/045
+        - generic/046
+        - generic/223
+        - ext4/002  # removed upstream
+        - ext4/304
+        - generic/388
+        - generic/405
+        - generic/422
+        - shared/298  # lockdep false positive
+        randomize: true
+    client.1:
+        <<: *ref
+        test_image: 'test_image-1'
+        scratch_image: 'scratch_image-1'
index 5e7ed992e9048e3eeef7f12d8ec0b7024f8a378b..41292fa813980d60927ce76215b218c9bb9d59d1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
       client:
         rbd default features: 37
diff --git a/ceph/qa/suites/krbd/singleton/msgr-failures/.qa b/ceph/qa/suites/krbd/singleton/msgr-failures/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/krbd/singleton/msgr-failures/few.yaml b/ceph/qa/suites/krbd/singleton/msgr-failures/few.yaml
deleted file mode 100644 (file)
index 5192889..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-overrides:
-  ceph:
-    conf:
-      global:
-        ms inject socket failures: 5000
-        mon client directed command retry: 5
-    log-ignorelist:
-      - \(OSD_SLOW_PING_TIME
diff --git a/ceph/qa/suites/krbd/singleton/msgr-failures/many.yaml b/ceph/qa/suites/krbd/singleton/msgr-failures/many.yaml
deleted file mode 100644 (file)
index e385529..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-overrides:
-  ceph:
-    conf:
-      global:
-        ms inject socket failures: 500
-        mon client directed command retry: 5
-    log-ignorelist:
-      - \(OSD_SLOW_PING_TIME
diff --git a/ceph/qa/suites/krbd/singleton/tasks/krbd_watch_errors.yaml b/ceph/qa/suites/krbd/singleton/tasks/krbd_watch_errors.yaml
new file mode 100644 (file)
index 0000000..5e30ef2
--- /dev/null
@@ -0,0 +1,19 @@
+overrides:
+  ceph:
+    conf:
+      global:
+        osd pool default size: 1
+      osd:
+        osd shutdown pgref assert: true
+roles:
+- [mon.a, mgr.x, osd.0, client.0]
+
+tasks:
+- install:
+    extra_system_packages:
+      - fio
+- ceph:
+- workunit:
+    clients:
+      all:
+        - rbd/krbd_watch_errors.sh
diff --git a/ceph/qa/suites/krbd/singleton/tasks/rbd_xfstests.yaml b/ceph/qa/suites/krbd/singleton/tasks/rbd_xfstests.yaml
deleted file mode 100644 (file)
index c94af02..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-roles:
-- [mon.a, mon.c, osd.0, osd.1, osd.2]
-- [mon.b, mgr.x, mds.a, osd.3, osd.4, osd.5]
-- [client.0]
-- [client.1]
-openstack:
-- volumes: # attached to each instance
-    count: 3
-    size: 10 # GB
-tasks:
-- install:
-- ceph:
-- rbd.xfstests:
-    client.0: &ref
-        test_image: 'test_image-0'
-        test_size: 5120  # MB
-        scratch_image: 'scratch_image-0'
-        scratch_size: 15360  # MB
-        fs_type: ext4
-        tests: '-g auto -g blockdev -x clone'
-        exclude:
-        - generic/042
-        - generic/392
-        - generic/044
-        - generic/045
-        - generic/046
-        - generic/223
-        - ext4/002  # removed upstream
-        - ext4/304
-        - generic/388
-        - generic/405
-        - generic/422
-        - shared/298  # lockdep false positive
-        randomize: true
-    client.1:
-        <<: *ref
-        test_image: 'test_image-1'
-        scratch_image: 'scratch_image-1'
index 5e7ed992e9048e3eeef7f12d8ec0b7024f8a378b..41292fa813980d60927ce76215b218c9bb9d59d1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
       client:
         rbd default features: 37
index 8984e8dc832dc688b8223b63bcfafb51bdf84a0a..e52341f29fe9b17276995718fbea446fe07614a3 100644 (file)
@@ -1,5 +1,7 @@
 overrides:
   ceph:
     conf:
+      global:
+        mon warn on pool no app: false
       client:
         rbd default features: 1 # pre-single-major is v3.13, so layering only
index 5e7ed992e9048e3eeef7f12d8ec0b7024f8a378b..41292fa813980d60927ce76215b218c9bb9d59d1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
       client:
         rbd default features: 37
index 5e7ed992e9048e3eeef7f12d8ec0b7024f8a378b..41292fa813980d60927ce76215b218c9bb9d59d1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     conf:
       global:
+        mon warn on pool no app: false
         ms die on skipped message: false
       client:
         rbd default features: 37
diff --git a/ceph/qa/suites/orch/cephadm/nfs b/ceph/qa/suites/orch/cephadm/nfs
new file mode 120000 (symlink)
index 0000000..628e2a2
--- /dev/null
@@ -0,0 +1 @@
+.qa/suites/fs/nfs/
\ No newline at end of file
index 564a2eb0252d4a71d785e79d34f1d46a55d8303a..3e6e7f95536fc472fa1428528d779201d15856de 100644 (file)
@@ -13,6 +13,7 @@ tasks:
         - \(PG_
         - replacing it with standby
         - No standby daemons available
+        - \(POOL_APP_NOT_ENABLED\)
   - cephfs_test_runner:
       modules:
-        - tasks.mgr.test_orchestrator_cli
\ No newline at end of file
+        - tasks.mgr.test_orchestrator_cli
diff --git a/ceph/qa/suites/orch/cephadm/smoke-roleless/2-services/nfs-haproxy-proto.yaml b/ceph/qa/suites/orch/cephadm/smoke-roleless/2-services/nfs-haproxy-proto.yaml
new file mode 100644 (file)
index 0000000..477e5c4
--- /dev/null
@@ -0,0 +1,35 @@
+tasks:
+- vip:
+
+# make sure cephadm notices the new IP
+- cephadm.shell:
+    host.a:
+      - ceph orch device ls --refresh
+
+# stop kernel nfs server, if running
+- vip.exec:
+    all-hosts:
+      - systemctl stop nfs-server
+
+# use nfs module to create cluster and export
+- cephadm.shell:
+    host.a:
+      - ceph fs volume create fs1
+      - ceph nfs cluster create happy --ingress --virtual-ip={{VIP0}} --ingress-mode=haproxy-protocol
+      - ceph nfs export create cephfs --fsname fs1 --cluster-id happy --pseudo-path /d1
+
+# wait for services to start
+- cephadm.wait_for_service:
+    service: nfs.happy
+- cephadm.wait_for_service:
+    service: ingress.nfs.happy
+
+# make sure mount can be reached over VIP, ensuring both that
+# keepalived is maintaining the VIP and that the nfs has bound to it
+- vip.exec:
+    host.a:
+      - mkdir /mnt/happy
+      - sleep 1
+      - mount -t nfs {{VIP0}}:/d1 /mnt/happy
+      - echo test > /mnt/happy/testfile
+      - sync
diff --git a/ceph/qa/suites/orch/cephadm/smoke-roleless/2-services/nvmeof.yaml b/ceph/qa/suites/orch/cephadm/smoke-roleless/2-services/nvmeof.yaml
new file mode 100644 (file)
index 0000000..4c5e267
--- /dev/null
@@ -0,0 +1,8 @@
+tasks:
+- cephadm.shell:
+    host.a:
+      - ceph osd pool create foo
+      - rbd pool init foo
+      - ceph orch apply nvmeof foo
+- cephadm.wait_for_service:
+    service: nvmeof.foo
diff --git a/ceph/qa/suites/orch/cephadm/workunits/task/test_ca_signed_key.yaml b/ceph/qa/suites/orch/cephadm/workunits/task/test_ca_signed_key.yaml
new file mode 100644 (file)
index 0000000..7bf51f7
--- /dev/null
@@ -0,0 +1,31 @@
+roles:
+- - host.a
+  - mon.a
+  - mgr.a
+  - osd.0
+  - client.0
+- - host.b
+  - mon.b
+  - mgr.b
+  - osd.1
+  - client.1
+overrides:
+  cephadm:
+    use-ca-signed-key: True
+tasks:
+- install:
+- cephadm:
+- cephadm.shell:
+    host.a:
+      - |
+        set -ex
+        HOSTNAMES=$(ceph orch host ls --format json | jq -r '.[] | .hostname')
+        for host in $HOSTNAMES; do
+          # do a check-host on each host to make sure it's reachable
+          ceph cephadm check-host ${host} 2> ${host}-ok.txt
+          HOST_OK=$(cat ${host}-ok.txt)
+          if ! grep -q "Host looks OK" <<< "$HOST_OK"; then
+            printf "Failed host check:\n\n$HOST_OK"
+            exit 1
+          fi
+        done
diff --git a/ceph/qa/suites/orch/cephadm/workunits/task/test_nfs.yaml b/ceph/qa/suites/orch/cephadm/workunits/task/test_nfs.yaml
deleted file mode 100644 (file)
index 8448c1a..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-roles:
-- - host.a
-  - osd.0
-  - osd.1
-  - osd.2
-  - mon.a
-  - mgr.a
-  - client.0
-tasks:
-- install:
-- cephadm:
-- cephadm.shell:
-    host.a:
-      - ceph orch apply mds a
-- cephfs_test_runner:
-    modules:
-      - tasks.cephfs.test_nfs
index f5793d76ee5d2bf4d7e1c1737c30e8eda95a20ee..699db42d74dc9e121664d9edc5baff209e3d8795 100644 (file)
@@ -1,6 +1,8 @@
 overrides:
   ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd objectstore: bluestore
index 7b5c89b9b9b601aa7f4ce003b43ee2e164e6bb63..9ff0a4150fb5df4c408a90680e6d4180f6e1ca88 100644 (file)
@@ -4,6 +4,7 @@ overrides:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
       - \(TOO_FEW_PGS\)
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - workunit:
     clients:
index c19cc83a93b94b569bbaf2359d6efd964c50e0ca..cafd824b0ee6d2387e849d1a9fe03d8b102e0b14 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+    - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
    client.0:
index f135107c7679e9223512dc5e8c540684ba7ce69e..fc13e67f02a683cece9c1a758ab228ea4709d978 100644 (file)
@@ -6,6 +6,8 @@ overrides:
         mon osd initial require min compat client: luminous
       osd:
         osd_discard_disconnected_ops: false
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index 0d3749f4daaf751ff15cb63bfa65e797b899efc7..383acc9563bcf4c2d7bdfcb6c2a6ffc06ea4339d 100644 (file)
@@ -22,6 +22,7 @@ overrides:
       - \(OSDMAP_FLAGS\)
       - \(OSD_
       - \(PG_
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         filestore debug inject read err: true
index dde468940b6d32f125d63b44a07a9b27ab2186f3..42465734375237656d9983c75c03c8fdb709ea33 100644 (file)
@@ -22,6 +22,7 @@ overrides:
     - \(PG_
     - \(OSD_SCRUB_ERRORS\)
     - \(TOO_FEW_PGS\)
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd deep scrub update digest min age: 0
index c781061de9c3427b3db71fea1809eff9bb396b99..e7622f8c324e63d142be72e90787818b02d739dc 100644 (file)
@@ -7,6 +7,8 @@ overrides:
     conf:
       osd:
         osd mclock override recovery settings: true
+      mgr:
+        mon warn on pool no app: false
 
 tasks:
   - install:
index af4c40642d11123754958a73e8deb60b1a499c45..9d2ba535efa558bc7dd9da42dda122cefbf371d0 100644 (file)
@@ -12,6 +12,7 @@ tasks:
         - \(RECENT_CRASH\)
         - replacing it with standby
         - No standby daemons available
+        - \(POOL_APP_NOT_ENABLED\)
   - cephfs_test_runner:
       modules:
         - tasks.mgr.test_crash
index 42c2f5c5bdde60563cffca1aba5c141235efd10c..6d1e0d55764e3b27d49a7d10e67230f96eb326f4 100644 (file)
@@ -11,6 +11,7 @@ tasks:
         - \(PG_
         - replacing it with standby
         - No standby daemons available
+        - \(POOL_APP_NOT_ENABLED\)
   - cephfs_test_runner:
       modules:
         - tasks.mgr.test_failover
index 5cb124bf71dc84486c0a12ded4f1dacee40c4dbe..f7c82cf7f2c8924fcdc4553525616d1f4462b631 100644 (file)
@@ -14,6 +14,7 @@ tasks:
         - \(RECENT_CRASH\)
         - replacing it with standby
         - No standby daemons available
+        - \(POOL_APP_NOT_ENABLED\)
   - cephfs_test_runner:
       modules:
         - tasks.mgr.test_insights
index 9b8209fa94d591ec1fa39f61efb78bbf1acb256b..4403d9fffc30bde454142cd3a55bccae050b11e4 100644 (file)
@@ -21,6 +21,7 @@ tasks:
         - Failed to open Telegraf
         - evicting unresponsive client
         - 1 mgr modules have recently crashed \(RECENT_MGR_MODULE_CRASH\)
+        - \(POOL_APP_NOT_ENABLED\)
   - cephfs_test_runner:
       modules:
         - tasks.mgr.test_module_selftest
index c487b21fcd42c799d4ccf90e49741e139f993164..de1d592df5f269a3ea6f09f152704aed83e7a4eb 100644 (file)
@@ -2,6 +2,8 @@ tasks:
   - install:
   - ceph:
       wait-for-scrub: false
+      log-ignorelist:
+        - \(POOL_APP_NOT_ENABLED\)
   - check-counter:
       counters:
         mgr:
index d04908eabbad968558d552b95e98009bd1f6c608..183a9a29a2ef0e2849d0660810732f1b921b8059 100644 (file)
@@ -24,6 +24,7 @@ tasks:
         - \(OSDMAP_FLAGS\)
         - replacing it with standby
         - No standby daemons available
+        - \(POOL_APP_NOT_ENABLED\)
   - cephfs_test_runner:
       modules:
         - tasks.mgr.test_progress
index 388e196783655296ca1ac0d992f302bc6916e25a..fd0e23a3555832240f957fc285b59fb622c93d65 100644 (file)
@@ -11,6 +11,7 @@ tasks:
         - \(PG_
         - replacing it with standby
         - No standby daemons available
+        - \(POOL_APP_NOT_ENABLED\)
   - cephfs_test_runner:
       modules:
         - tasks.mgr.test_prometheus
index 791adc27298b9670d65d417ac1b163a62a2d97f7..a48274033486f26235ac2badf6878eb7605bce2b 100644 (file)
@@ -10,6 +10,7 @@ tasks:
         - \(PG_
         - replacing it with standby
         - No standby daemons available
+        - \(POOL_APP_NOT_ENABLED\)
   - workunit:
       clients:
         client.0:
index c2ec78fd3e968c362492f56101157777ffce3452..f4c98ae278303a01ffcc4e7966619ddac2ec8439 100644 (file)
@@ -4,6 +4,7 @@ overrides:
       - overall HEALTH_
       - \(MON_DOWN\)
       - \(TOO_FEW_PGS\)
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - mon_thrash:
     revive_delay: 90
index 9588312329719fba9dd2218201f3b6d2591da938..2f5de97e32c6514711c94a25c8f33e719715e331 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(MON_DOWN\)
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         mon client ping interval: 4
index e969a0d8dff73749a4f884048220ebeecc01f2c4..3a71edaf1d0d515ef2c4fad489c912f54d64e5de 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(MON_DOWN\)
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - mon_thrash:
     revive_delay: 20
index e721b9b3869361ae3589dd3dd6aa69a9e3adb5c0..6bb25b7ebc4a23a44e97f6e0b7800bbc74e442c3 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(MON_DOWN\)
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       mon:
         paxos min: 10
index 8fdd1ad48b3eeaa1b1eab4df6ba2eaa6ee7768d7..30f13305594c2262cd936dde873ac394ecf6cd72 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(MON_DOWN\)
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       mon:
         paxos min: 10
index 522302cd774992385459aab1698adcfb898492ff..6e8dadaf09bd76f9ee4b5e4e841211f756f576f8 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - slow request
       - overall HEALTH_
-      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
     client.0:
index ad19bd341fa636422c2e7abdffc1b3ede274d3c8..bf7eee534d6cd4169b8df8d785466e5b309d489d 100644 (file)
@@ -2,7 +2,6 @@ overrides:
   ceph:
      log-ignorelist:
        - overall HEALTH_
-       - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
     client.0:
index 3f3c0768aa3228eb7ef0f2b95781bafcb102fa10..f14c2c2a60d73722e2164fe7e888625dbc1e412d 100644 (file)
@@ -9,7 +9,6 @@ overrides:
       - \(SLOW_OPS\)
       - \(MON_DOWN\)
       - \(PG_
-      - \(POOL_APP_NOT_ENABLED\)
       - \(SMALLER_PGP_NUM\)
       - slow request
     conf:
index 2a4bf2bac304eb56c4b7182f7a6f8c185c1c1968..691bd1efc00cbe99d8d95b59e55a6148380a13bb 100644 (file)
@@ -7,5 +7,6 @@ tasks:
     - clocks not synchronized
     - overall HEALTH_
     - \(MON_CLOCK_SKEW\)
+    - \(POOL_APP_NOT_ENABLED\)
 - mon_clock_skew_check:
     expect-skew: false
index 41749349e9b710323bdc6b9fe0bab4bfb2101180..079e1555b1b380da7fae2587f4e5d8a10956c9ab 100644 (file)
@@ -20,5 +20,6 @@ tasks:
     - \(SLOW_OPS\)
     - No standby daemons available
     - slow request
+    - \(POOL_APP_NOT_ENABLED\)
 - mon_clock_skew_check:
     expect-skew: true
index 6373663c5c11d69b43f81805809facecc335d075..18e53e092c3724d9d099acb12c6e74fc2aa1b1eb 100644 (file)
@@ -7,4 +7,5 @@ tasks:
       - \(PG_AVAILABILITY\)
       - \(SLOW_OPS\)
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
 - mon_recovery:
index e407a391807d5901d88d54d000eeaee2e2d3d5e9..ae0f8f381b4a8a2164fda59aea2a3203f83416d7 100644 (file)
@@ -8,6 +8,8 @@ tasks:
 - install:
 - ceph:
     fs: xfs
+    log-ignorelist:
+    - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all:
index 8bc0431b06ac5559cbf77154be4eff6ed9a672db..ca229dd466df2251fb0323878237ef0b67224ddc 100644 (file)
@@ -15,4 +15,5 @@ tasks:
       - \(OSD_
       - \(OBJECT_
       - overall HEALTH
+      - \(POOL_APP_NOT_ENABLED\)
 - ssh_keys:
index c863463ded12c0ddf586025ec8ce00312e84f0f9..4901f401d30140b67c3a84149cd9bb52241891ab 100644 (file)
@@ -14,6 +14,7 @@ tasks:
       - \(OSD_
       - \(OBJECT_
       - \(OSDMAP_FLAGS\)
+      - \(POOL_APP_NOT_ENABLED\)
 - exec:
     mon.a:
       - ceph restful create-key admin
index a9f8316172d6e38cf3db302d9baa4329c970c23b..341a559f3fa756ee9a4115944767299102d67a19 100644 (file)
@@ -15,6 +15,7 @@ overrides:
       - \(OSD_FULL\)
       - \(MDS_READ_ONLY\)
       - \(POOL_FULL\)
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - install:
 - ceph:
index eb30c663a72ac09b2bea0a8345dcc3c6c81e5a2f..c42c5539d8ff6720d5bde05530b740c86fd81947 100644 (file)
@@ -8,6 +8,7 @@ tasks:
     fs: xfs
     log-ignorelist:
       - \(PG_AVAILABILITY\)
+      - \(POOL_APP_NOT_ENABLED\)
 - cram:
     clients:
       client.0:
index d7699d042c1018eb31899bda34e0d27a2c173acd..fddbd0723061bb968ab9fb47f4ffa3da3450cd2c 100644 (file)
@@ -12,6 +12,7 @@ tasks:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       global:
         osd max object name len: 460
index a3085ad3d9c0cfe752d5077f8ee70c104df6fccd..6a8faa4a833c10a235319c5bd21390280290a387 100644 (file)
@@ -17,6 +17,8 @@ overrides:
 tasks:
 - install:
 - ceph:
+    log-ignorelist:
+    - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all:
index 7785f2453e6b61010dcb2a1b3c025b325e917793..b4ce5468a0b8c3999dc7bab2b60774b9b68b65f8 100644 (file)
@@ -17,6 +17,7 @@ tasks:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       global:
         osd max object name len: 460
index a3704069f9d25371059203e86b740a90464afa21..a06221449ffbaa9fd9498d0c27b45b7e0c71cbf1 100644 (file)
@@ -14,6 +14,7 @@ overrides:
       - \(POOL_NEAR_FULL\)
       - \(CACHE_POOL_NO_HIT_SET\)
       - \(CACHE_POOL_NEAR_FULL\)
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - install:
 - ceph:
index 7b7bf592ff26cbc39463e423b993d04585559095..5ed6553240d00deebe018880a995dee40c96467c 100644 (file)
@@ -16,6 +16,7 @@ tasks:
       - \(OSDMAP_FLAGS\)
       - \(OSD_
       - \(PG_
+      - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all:
index 8b95603d166693b608e56fe6959f4be77b99b072..15952b98974547b5f64073de16d2600e54ba6e1c 100644 (file)
@@ -22,6 +22,7 @@ tasks:
       - \(PG_
       - \(OSD_
       - \(OBJECT_
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .3
index e79e1aaf5700d65e86c9855be3abde858d168c77..26d5484305745ee0f6a9a87bdb656601f38ac954 100644 (file)
@@ -9,6 +9,8 @@ tasks:
 - ceph:
     pre-mgr-commands:
       - sudo ceph config set mgr mgr_pool false --force
+    log-ignorelist:
+    - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all:
index 9ed67c249dc337bc7a06c0796a35f7a159805dae..0d88e6f2a38712949571e088618df96f98fb21b7 100644 (file)
@@ -11,6 +11,8 @@ openstack:
 tasks:
 - install:
 - ceph:
+    log-ignorelist:
+    - \(POOL_APP_NOT_ENABLED\)
 - admin_socket:
     osd.0:
       version:
index fcc3d0e2942611e5aa4761e322d9f82d2b4bf879..d53e9a3b25df6e284b16e5bf93f2d91c7fab3109 100644 (file)
@@ -30,6 +30,7 @@ tasks:
       - \(TOO_FEW_PGS\)
       - Monitor daemon marked osd\.[[:digit:]]+ down, but it is still running
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd min pg log entries: 5
index eb70b70fff40ee48ee00cc68927ac984a3141d04..f561795bd41d6973494775149242e063256f462f 100644 (file)
@@ -18,4 +18,5 @@ tasks:
       - \(OSDMAP_FLAGS\)
       - \(OSD_
       - \(PG_
+      - \(POOL_APP_NOT_ENABLED\)
 - dump_stuck:
index d71eab149926084548532b1848807e689e8148e5..31724f9e81b110e4867b9c52ae4eef9b89ad7c61 100644 (file)
@@ -29,6 +29,7 @@ tasks:
       - repair
       - slow request
       - unfound
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd min pg log entries: 5
index 050365ff4df0c41dc151062ccceefab5634a75dc..d397b005ccd524414cb2b69997e7108366ad9584 100644 (file)
@@ -26,4 +26,5 @@ tasks:
       - \(OBJECT_
       - \(SLOW_OPS\)
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
 - ec_lost_unfound:
index e4b7b11e2e1b408182be3cb6d6d3ba8e8576f57d..a6b68cd50c53e826b9a88d3cbbe79c5213657283 100644 (file)
@@ -24,4 +24,5 @@ tasks:
       - \(OBJECT_
       - \(SLOW_OPS\)
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
 - rep_lost_unfound_delete:
index 280dac87b520416470e9e32c878773755d78ddc1..4010a5208dce024fb9c3ecc76f2b7fd9e0936e19 100644 (file)
@@ -24,4 +24,5 @@ tasks:
       - \(OBJECT_
       - \(SLOW_OPS\)
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
 - lost_unfound:
index 7ab94589893ca6614fad3a4468f30d3c5f0c0e6d..e7eded31ed6f7b2f2fbb3b0a1d8e9b3199240687 100644 (file)
@@ -21,6 +21,7 @@ overrides:
     log-ignorelist:
       - \(TOO_FEW_PGS\)
       - \(PENDING_CREATING_PGS\)
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - install:
 - ceph:
index a51e8921f9268150d482c5a51142248635e7f50c..dc7c3f0f5e5c9f33eb84410c72eeb630a0774f18 100644 (file)
@@ -24,6 +24,7 @@ overrides:
       - \(TOO_FEW_PGS\)
       - \(PG_
       - \(PENDING_CREATING_PGS\)
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - install:
 - ceph:
index e3658ef77b6e89258d3cea14986a856f914f10af..ee0dae1d4704f6666ca7de2d7d917010364ed937 100644 (file)
@@ -24,6 +24,7 @@ overrides:
       - \(TOO_FEW_PGS\)
       - \(PG_
       - \(PENDING_CREATING_PGS\)
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - install:
 - ceph:
index a56d164a50a4219958a7dedda18aca9de6da9cd7..264dc535a9198bdba8bc4c320cbbbb9da7596170 100644 (file)
@@ -13,6 +13,7 @@ tasks:
     log-ignorelist:
     - overall HEALTH_
     - \(AUTH_BAD_CAPS\)
+    - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all:
index f254754e270c25522e91cd7ea72fef09e4a5f204..c475a2080130b7c2fb3e6da8d0943f351c3bb5f8 100644 (file)
@@ -13,6 +13,7 @@ tasks:
     log-ignorelist:
     - overall HEALTH_
     - \(AUTH_BAD_CAPS\)
+    - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all:
index 15d48f2380f4b17e2e3ff19398b6ce6557b08908..ab1eb81b0948734048c8427d87e8b4910952c0d2 100644 (file)
@@ -16,6 +16,8 @@ tasks:
 - ceph:
     pre-mgr-commands:
       - sudo ceph config set mgr mgr_pool false --force
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all:
index 1a24f4a2938a0ca68409321e9cedfffc97180ee9..92f5959b558dced7e2350478329c716fef7e5777 100644 (file)
@@ -22,6 +22,7 @@ tasks:
       - \(OSD_
       - \(PG_
       - \(OBJECT_
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd min pg log entries: 5
index 7ade95c9ece0f28e402ba84b9f3db7bed1aa60e2..6d0955c73d96be56ba69d5c39c3c811fdf79d0d6 100644 (file)
@@ -23,6 +23,7 @@ tasks:
       - \(OSD_
       - \(PG_
       - \(OBJECT_
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd min pg log entries: 5
index 94ab85a778d2c89e7a4d132f136acbedfe50ff1d..9e33b3c393b11e1fb68c293f5a4aa8bbdd9ad119 100644 (file)
@@ -24,6 +24,7 @@ tasks:
       - \(OBJECT_DEGRADED\)
       - \(SLOW_OPS\)
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd min pg log entries: 5
index 99183c460f1d96c20858d7b179d71415eeb4e712..f01473b0fa632cacfce02f1f5a452e00c26b02fa 100644 (file)
@@ -24,4 +24,5 @@ tasks:
       - \(OSDMAP_FLAGS\)
       - \(OSD_
       - \(PG_
+      - \(POOL_APP_NOT_ENABLED\)
 - peer:
index 90fb128f0b9cdf5454ec6633801ddf0f30f57f24..e4b48189fbc7ea54bc8c89a2818af79e8c8baf9b 100644 (file)
@@ -34,6 +34,7 @@ tasks:
       - \(REQUEST_SLOW\)
       - \(TOO_FEW_PGS\)
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
 - exec:
     client.0:
     - ceph progress off
index 3d64d73acdcc660ea34cd4d8cc50d2f77be6f19a..a03c2d521eb048e1939f8d866a1d6255f767804f 100644 (file)
@@ -30,6 +30,7 @@ tasks:
       - \(REQUEST_SLOW\)
       - \(TOO_FEW_PGS\)
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all:
index 2c00192f137a8bb4caca7364fac2d37c3693ac83..0dd0fb38d037373dd21f8d50656b30f610e895e7 100644 (file)
@@ -21,6 +21,7 @@ tasks:
       - \(OSDMAP_FLAGS\)
       - \(OSD_
       - \(PG_
+      - \(POOL_APP_NOT_ENABLED\)
 - exec:
     client.0:
       - sudo ceph osd pool create foo 128 128
index af556bf415e8792cf387415298e24b5f64a3495e..0c7de00c86e0f868afbf742282333e06a086e5c9 100644 (file)
@@ -24,6 +24,7 @@ tasks:
       - \(OSDMAP_FLAGS\)
       - \(OSD_
       - \(PG_
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       mon:
         debug auth: 30
index deab84a5a3206b5d49f187e4459af8735b274b7f..ec227cec79de8befb8a5b007366f20c1a8198eed 100644 (file)
@@ -10,6 +10,7 @@ tasks:
         - Reduced data availability
         - OSD_.*DOWN
         - \(RECENT_CRASH\)
+        - \(POOL_APP_NOT_ENABLED\)
   - workunit:
       clients:
          client.0:
index f4da45ad10cc870676eb3d4bfaa0691e30982ffd..039300f7f844b66f7d6cac4eacce31364cefdbcb 100644 (file)
@@ -30,6 +30,7 @@ overrides:
       - \(REQUEST_SLOW\)
       - \(TOO_FEW_PGS\)
       - slow request
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - install:
 - ceph:
index bd3afe047fa5aebb6decdf9b208319303ca8f710..a9049560d274b44868d4b34edb6c0da3a69da004 100644 (file)
@@ -38,6 +38,7 @@ tasks:
     - \(TOO_FEW_PGS\)
     - \(POOL_BACKFILLFULL\)
     - slow request
+    - \(POOL_APP_NOT_ENABLED\)
 - thrashosds:
     op_delay: 30
     clean_interval: 120
index 515a2832b1bf2ed684134fe777d82b3523c3dd46..52e0cc51e6c0d01eeb2ce9414179494c44536240 100644 (file)
@@ -35,6 +35,7 @@ tasks:
     - \(OBJECT_
     - \(TOO_FEW_PGS\)
     - slow request
+    - \(POOL_APP_NOT_ENABLED\)
 - thrashosds:
     op_delay: 30
     clean_interval: 120
index 1caef6db57b498f0da61be69f4f3b43246f7d7db..b3b54e173b35c671515fb9e11cd7d851ab0e8057 100644 (file)
@@ -17,6 +17,7 @@ tasks:
 - ceph:
     log-ignorelist:
       - but it is still running
+      - \(POOL_APP_NOT_ENABLED\)
 - thrashosds:
     op_delay: 30
     clean_interval: 120
index d61ad0c421b3debea70987b7eef5db7360e282e4..e58fb4ef4baca12e81d377a614af2b27fd6030fd 100644 (file)
@@ -22,6 +22,7 @@ tasks:
       - slow request
       - overall HEALTH_
       - \(CACHE_POOL_
+      - \(POOL_APP_NOT_ENABLED\)
 - exec:
     client.0:
       - sudo ceph osd pool create base 4
index 1ff69c300cc9f0419e4def693ca577fa85a73e75..04d3969b2f0641813aba6d4e515179c3750974f1 100644 (file)
@@ -30,5 +30,6 @@ tasks:
       - \(OSD_
       - \(PG_
       - \(OBJECT_DEGRADED\)
+      - \(POOL_APP_NOT_ENABLED\)
 - watch_notify_same_primary:
     clients: [client.0]
index f032d88e7d9217cdf567e918e0a960658e7059c8..df0a14500d94f653d35e1c0fb0053cc85b59fa00 100644 (file)
@@ -4,6 +4,7 @@ overrides:
     - but it is still running
     - objects unfound and apparently lost
     - slow request
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .3
index d2c7b85b50ecd00dbb5231a393d56d526dc07e26..09b6c1782ad821828faf65431fbf2e36c4f4da41 100644 (file)
@@ -4,6 +4,7 @@ overrides:
     - but it is still running
     - objects unfound and apparently lost
     - slow request
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .1
index 371ed570b6283945601f0365cf8237f63e7c6afa..a36155609a21410e1312a2c073b18665c24ba07e 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       mon:
         osd pool default ec fast read: true
index 18843d87220a1ce34e9e54e2381a5d9f9dcc6335..6cf4dc930160a496ca2a46a7e48e19817c6379da 100644 (file)
@@ -4,6 +4,7 @@ overrides:
     - but it is still running
     - objects unfound and apparently lost
     - osd_map_cache_size
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       mon:
         mon min osdmap epochs: 2
index 23c9f7d848fdcbc615a4cfd4a0e4f7f483f7bf4a..794e994f2ceeb5cdabb94280553191c920a35799 100644 (file)
@@ -8,6 +8,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - thrashosds:
     timeout: 1200
index 9cbb80dba9e8372e806904877a04ac9d8cc232ef..15be6b43b31352b9dd74c3c0738c0d530ccfccd5 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd scrub min interval: 60
index 94b5d07f83810b733141af211630881d4f3da182..e18379b5f848bfbc11a3ac9dcc8143aac5f16ab8 100644 (file)
@@ -4,6 +4,7 @@ overrides:
     - but it is still running
     - objects unfound and apparently lost
     - slow request
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .3
index a869369fadd6f76f2e74fe9227f32b83673eb620..00c8689d4931c0f18680355a6e34941208f74939 100644 (file)
@@ -4,6 +4,7 @@ overrides:
     - but it is still running
     - objects unfound and apparently lost
     - slow request
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .1
index 9a708db31d416d099fa904961e7b6ac979be21f7..0602f01ad8ccd567fe2ff6bae64245152c6e0e50 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .3
index 3728bd8e718630b04ca3bcb93f7fd630889dbc58..989b83e8f7789de0d756fe95df100c51ddf1109e 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .1
index 4ba4eb2a2bff4531f8b18e0371fcc1a66541d2fe..5fbb9504b617c91da411d6017c498c61081c9875 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       mon:
         osd pool default ec fast read: true
index 2e375c7aa954c0f3ca2787a6bf15436a644459d2..771d9a1047a702302953af23d0a0b698de3cc918 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     create_rbd_pool: False
     pre-mgr-commands:
       - sudo ceph config set mgr mgr_pool false --force
index a3e66e693c37545bda5fa5e70f7b074a15b7c3b2..f8c54232381c255656c9b753ba5061447253c25f 100644 (file)
@@ -8,6 +8,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - thrashosds:
     timeout: 1200
index 98f87d6df92381ead60af804b28c10e5a6f5e5dd..ed13bfd3e936c87926887e55ac3c168ca193a2af 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd scrub min interval: 60
index cc232ab88440e4c9e8d1b12e92f5c4e9edeca9db..8820a6cd24e710e4f385e946a98a7f7df092d5b5 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .3
index c04f9535cf6f2a3da7bd3ae509741122ab9ad9fc..54dc8880281333be86c60a9c4da8c159db67bbd6 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd debug reject backfill probability: .3
index 27881d2180c62ba0eb0700c277dfc2e473e7cf29..c1ab4493edb76fbd6cca7871feb819fff5dac423 100644 (file)
@@ -4,6 +4,7 @@ overrides:
     - but it is still running
     - objects unfound and apparently lost
     - osd_map_cache_size
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       mon:
         mon min osdmap epochs: 50
index f18a88711a0066c349befd295b50c516ff1308b2..bb65d6a600cb466e9a276d8a524c06de16ecf33f 100644 (file)
@@ -12,6 +12,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - thrashosds:
     timeout: 1200
index 54498d0cfef9be93f24e8b97c83fafddbcd6761f..000550bd865d79e83487d388b365d6e31455f297 100644 (file)
@@ -3,6 +3,7 @@ overrides:
     log-ignorelist:
     - but it is still running
     - objects unfound and apparently lost
+    - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         osd scrub min interval: 60
index 8c9764ade8487550359de6633315c6fc68978899..6885f72aa44e877ca4eef88f9970946d95cd9e07 100644 (file)
@@ -3,6 +3,8 @@ overrides:
     conf:
       client.0:
         admin socket: /var/run/ceph/ceph-$name.asok
+    log-ignorelist:
+    - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - radosbench:
     clients: [client.0]
index 3f377858ae4c55ef9a5b7248bb7313399383efe1..9ca2576d4690531e5946ac8fa282b277764c9bd3 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     log-ignorelist:
       - must scrub before tier agent can activate
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         # override short_pg_log_entries.yaml (which sets these under [global])
index 29219a7e8d7f9b121a1890e5c9765d03c4ff98ff..108009e3b0b8df07ce03538775467f51892e68b7 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     log-ignorelist:
       - must scrub before tier agent can activate
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         # override short_pg_log_entries.yaml (which sets these under [global])
index 808968d6bafeaa6a73c6f86f15b24d170bb85408..f864e117056fadf662bee5c09911240962fec0b1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     log-ignorelist:
       - must scrub before tier agent can activate
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         # override short_pg_log_entries.yaml (which sets these under [global])
index 4aec8611c14d5df8d5f1f2fcd400bb0dd24eb967..6bf97c6920db1279f37a573c912d28ea6ede5dc1 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     log-ignorelist:
       - must scrub before tier agent can activate
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         # override short_pg_log_entries.yaml (which sets these under [global])
index 1e55f573f438c0619c1d009422cd072532273d04..574a1f753dc7480a3c4a4a0b8653ba0e5fa8bd3d 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     log-ignorelist:
       - must scrub before tier agent can activate
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         # override short_pg_log_entries.yaml (which sets these under [global])
index 11401d7e263f4c14608b1a5e55585f64037700c9..6d11f4cf12c71e9e18f48fee67465d87a2261b33 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     log-ignorelist:
       - must scrub before tier agent can activate
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         # override short_pg_log_entries.yaml (which sets these under [global])
index c557a67511134c9d3ae45b6479b7a120fdce92a2..bd9daac7af3f64ee485598a24d4f664db270869b 100644 (file)
@@ -2,6 +2,7 @@ overrides:
   ceph:
     log-ignorelist:
       - must scrub before tier agent can activate
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       osd:
         # override short_pg_log_entries.yaml (which sets these under [global])
index 24a41c31ffb7a3cbbc514fd911fa528c9bd731be..7758525a615fb41bd6854e791c30ac3307905fe0 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
     client.0:
index 408d1b5d91427bd509750eeb352c6505992112c5..3d2ce3026387831fb596198901fbed9ba7455681 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
     client.0:
index 1f0759d962493171cfc0b2dcd24626f50982d348..f60afb809d131a8ff584f7cef26b26ac3ec6e7d8 100644 (file)
@@ -2,6 +2,9 @@ override:
   conf:
     osd:
       osd deep scrub update digest min age: 0
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index 902c4b56a1e5a2757bfe4acb892ee0182f701496..afdb3794d986bddfb0142a48d796c4c366e05a1b 100644 (file)
@@ -5,6 +5,8 @@ overrides:
         debug ms: 1
         debug objecter: 20
         debug rados: 20
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - full_sequential:
   - radosbench:
index 071f55e3928eb5d33b46ec41de60fcf61e42cf33..32efe0ba9a0a227c4440c017f19d86dc6ab0399c 100644 (file)
@@ -5,6 +5,8 @@ overrides:
         debug ms: 1
         debug objecter: 20
         debug rados: 20
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - full_sequential:
   - radosbench:
index bebce845cd62f9e231164e23990814ad4c60661c..14cce66430b04cc6a9237c0b2a1114e639c59268 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
     client.0:
index c2787c43bc09c1c95a4974f17def38d657b78195..23226771d30e02cae734a3922ee566071728efab 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
     client.0:
index 06ba60c7c64c77772b6382bc6afafd81ffa0203b..7fe81435c5f4b0fa6470af2f6937175fec788ab6 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
     client.0:
index 1abbdd757c522bf7c6079d8a335a2a14ff9888c4..fa6d6a8b8a478aba311d0fb969e60f2c57908b18 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - exec:
     client.0:
index 56aaaf5435a370c82514a9bbf82c44e5d516baaf..ece22cd36fa859292a7cd0d05b559e7dfb39c547 100644 (file)
@@ -1,6 +1,8 @@
 overrides:
   ceph:
     crush_tunables: jewel
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index e06c717f499e36a2c938af78fd894ac9ed362393..ad791ee119c0d794366c47270e6f64bd5a791647 100644 (file)
@@ -1,6 +1,8 @@
 overrides:
   ceph:
     crush_tunables: jewel
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index ee20bc3c5632c32b27d4cb35b6b1c65715f1828d..6f9edfae84aa92d49ea982b7f2e2f70e32e83ca9 100644 (file)
@@ -1,6 +1,8 @@
 overrides:
   ceph:
     crush_tunables: jewel
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index 5752633c87fb77a8fc47672d523f024e833729f8..ffb6cbc8be91e328d0ffe457df6689e61cbf7468 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index d02a5784ef4e264c7d60bf80c1e62efaf032c11b..eca0047169af4886fc8f703879747962d35e6e46 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index aa82d973ae17a7366c994b09522140b229858159..955327b29f3ca7cf41ea505dbb7cc358fdd7b522 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+    - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index 606dcae6922f0e96c11550df8888c85508264f79..182fc1431a60d03d4fe2cdd0672e4bf86ff4d00b 100644 (file)
@@ -1,3 +1,7 @@
+overrides:
+  ceph:
+    log-ignorelist:
+    - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - rados:
     clients: [client.0]
index 9263f2a838b0bce8fb8eb43de029a1fbc43ceea8..1cdd8a688e891ee57c53ceb77c695461de9c5f5b 100644 (file)
@@ -11,6 +11,7 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(PG_
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       global:
         osd heartbeat grace: 40
index 163bc2c087250008a8a3cc56712ef1f68b873ba8..0236326f3a8adce6fb57facb27dcba0d1beb6418 100644 (file)
@@ -4,6 +4,8 @@ overrides:
       osd:
         osd_class_load_list: "*"
         osd_class_default_list: "*"
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - workunit:
     clients:
diff --git a/ceph/qa/suites/rbd/basic/cachepool/.qa b/ceph/qa/suites/rbd/basic/cachepool/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/basic/cachepool/none.yaml b/ceph/qa/suites/rbd/basic/cachepool/none.yaml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/qa/suites/rbd/basic/cachepool/small.yaml b/ceph/qa/suites/rbd/basic/cachepool/small.yaml
deleted file mode 100644 (file)
index bad95ea..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
diff --git a/ceph/qa/suites/rbd/basic/conf b/ceph/qa/suites/rbd/basic/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
index 3dbb69df40fc659626b0cab6a26cc6a9db3fe05a..5bb734d243e8257bcb829f5eda125fc481dd5a70 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
diff --git a/ceph/qa/suites/rbd/cli/conf b/ceph/qa/suites/rbd/cli/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/cli/data-pool b/ceph/qa/suites/rbd/cli/data-pool
new file mode 120000 (symlink)
index 0000000..3df8275
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/data-pool/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/cli/pool/.qa b/ceph/qa/suites/rbd/cli/pool/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/cli/pool/ec-data-pool.yaml b/ceph/qa/suites/rbd/cli/pool/ec-data-pool.yaml
deleted file mode 100644 (file)
index db289c7..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd erasure-code-profile set teuthologyprofile crush-failure-domain=osd m=1 k=2
-      - sudo ceph osd pool create datapool 4 4 erasure teuthologyprofile
-      - sudo ceph osd pool set datapool allow_ec_overwrites true
-      - rbd pool init datapool
-
-overrides:
-  thrashosds:
-    bdev_inject_crash: 2
-    bdev_inject_crash_probability: .5
-  ceph:
-    fs: xfs
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NO_HIT_SET\)
-    conf:
-      client:
-        rbd default data pool: datapool
-      osd: # force bluestore since it's required for ec overwrites
-        osd objectstore: bluestore
-        bluestore block size: 96636764160
-        enable experimental unrecoverable data corrupting features: "*"
-        osd debug randomize hobject sort order: false
-# this doesn't work with failures bc the log writes are not atomic across the two backends
-#        bluestore bluefs env mirror: true
diff --git a/ceph/qa/suites/rbd/cli/pool/none.yaml b/ceph/qa/suites/rbd/cli/pool/none.yaml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/qa/suites/rbd/cli/pool/replicated-data-pool.yaml b/ceph/qa/suites/rbd/cli/pool/replicated-data-pool.yaml
deleted file mode 100644 (file)
index c5647db..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create datapool 4
-      - rbd pool init datapool
-
-overrides:
-  ceph:
-    conf:
-      client:
-        rbd default data pool: datapool
diff --git a/ceph/qa/suites/rbd/cli/pool/small-cache-pool.yaml b/ceph/qa/suites/rbd/cli/pool/small-cache-pool.yaml
deleted file mode 100644 (file)
index bad95ea..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
diff --git a/ceph/qa/suites/rbd/cli/workloads/rbd_support_module_recovery.yaml b/ceph/qa/suites/rbd/cli/workloads/rbd_support_module_recovery.yaml
new file mode 100644 (file)
index 0000000..aa4d000
--- /dev/null
@@ -0,0 +1,13 @@
+overrides:
+  ceph:
+    conf:
+      mgr:
+        debug rbd: 20
+tasks:
+- install:
+    extra_system_packages:
+      - fio
+- workunit:
+    clients:
+      client.0:
+        - rbd/rbd_support_module_recovery.sh
diff --git a/ceph/qa/suites/rbd/cli_v1/conf b/ceph/qa/suites/rbd/cli_v1/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/cli_v1/pool/.qa b/ceph/qa/suites/rbd/cli_v1/pool/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/cli_v1/pool/none.yaml b/ceph/qa/suites/rbd/cli_v1/pool/none.yaml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/qa/suites/rbd/cli_v1/pool/small-cache-pool.yaml b/ceph/qa/suites/rbd/cli_v1/pool/small-cache-pool.yaml
deleted file mode 100644 (file)
index bad95ea..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
diff --git a/ceph/qa/suites/rbd/encryption/conf b/ceph/qa/suites/rbd/encryption/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/encryption/data-pool b/ceph/qa/suites/rbd/encryption/data-pool
new file mode 120000 (symlink)
index 0000000..3df8275
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/data-pool/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/encryption/pool/.qa b/ceph/qa/suites/rbd/encryption/pool/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/encryption/pool/ec-cache-pool.yaml b/ceph/qa/suites/rbd/encryption/pool/ec-cache-pool.yaml
deleted file mode 100644 (file)
index a0f88b4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd erasure-code-profile set teuthologyprofile crush-failure-domain=osd m=1 k=2
-      - sudo ceph osd pool delete rbd rbd --yes-i-really-really-mean-it
-      - sudo ceph osd pool create rbd 4 4 erasure teuthologyprofile
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
-      - rbd pool init rbd
diff --git a/ceph/qa/suites/rbd/encryption/pool/ec-data-pool.yaml b/ceph/qa/suites/rbd/encryption/pool/ec-data-pool.yaml
deleted file mode 100644 (file)
index f39a5bb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd erasure-code-profile set teuthologyprofile crush-failure-domain=osd m=1 k=2
-      - sudo ceph osd pool create datapool 4 4 erasure teuthologyprofile
-      - sudo ceph osd pool set datapool allow_ec_overwrites true
-      - rbd pool init datapool
-
-overrides:
-  thrashosds:
-    bdev_inject_crash: 2
-    bdev_inject_crash_probability: .5
-  ceph:
-    fs: xfs
-    conf:
-      client:
-        rbd default data pool: datapool
-      osd: # force bluestore since it's required for ec overwrites
-        osd objectstore: bluestore
-        bluestore block size: 96636764160
-        enable experimental unrecoverable data corrupting features: "*"
-        osd debug randomize hobject sort order: false
-# this doesn't work with failures bc the log writes are not atomic across the two backends
-#        bluestore bluefs env mirror: true
diff --git a/ceph/qa/suites/rbd/encryption/pool/none.yaml b/ceph/qa/suites/rbd/encryption/pool/none.yaml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/qa/suites/rbd/encryption/pool/replicated-data-pool.yaml b/ceph/qa/suites/rbd/encryption/pool/replicated-data-pool.yaml
deleted file mode 100644 (file)
index c5647db..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create datapool 4
-      - rbd pool init datapool
-
-overrides:
-  ceph:
-    conf:
-      client:
-        rbd default data pool: datapool
diff --git a/ceph/qa/suites/rbd/encryption/pool/small-cache-pool.yaml b/ceph/qa/suites/rbd/encryption/pool/small-cache-pool.yaml
deleted file mode 100644 (file)
index bad95ea..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
diff --git a/ceph/qa/suites/rbd/immutable-object-cache/conf b/ceph/qa/suites/rbd/immutable-object-cache/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/iscsi/conf b/ceph/qa/suites/rbd/iscsi/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/librbd/conf b/ceph/qa/suites/rbd/librbd/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/librbd/config/.qa b/ceph/qa/suites/rbd/librbd/config/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/librbd/config/copy-on-read.yaml b/ceph/qa/suites/rbd/librbd/config/copy-on-read.yaml
deleted file mode 100644 (file)
index ce99e7e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-overrides:
-  ceph:
-    conf:
-      client:
-        rbd clone copy on read: true
diff --git a/ceph/qa/suites/rbd/librbd/config/none.yaml b/ceph/qa/suites/rbd/librbd/config/none.yaml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/qa/suites/rbd/librbd/config/permit-partial-discard.yaml b/ceph/qa/suites/rbd/librbd/config/permit-partial-discard.yaml
deleted file mode 100644 (file)
index a992946..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-overrides:
-  ceph:
-    conf:
-      client:
-        rbd skip partial discard: false
diff --git a/ceph/qa/suites/rbd/librbd/data-pool b/ceph/qa/suites/rbd/librbd/data-pool
new file mode 120000 (symlink)
index 0000000..3df8275
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/data-pool/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/librbd/extra-conf/.qa b/ceph/qa/suites/rbd/librbd/extra-conf/.qa
new file mode 120000 (symlink)
index 0000000..a602a03
--- /dev/null
@@ -0,0 +1 @@
+../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/librbd/extra-conf/copy-on-read.yaml b/ceph/qa/suites/rbd/librbd/extra-conf/copy-on-read.yaml
new file mode 100644 (file)
index 0000000..ce99e7e
--- /dev/null
@@ -0,0 +1,5 @@
+overrides:
+  ceph:
+    conf:
+      client:
+        rbd clone copy on read: true
diff --git a/ceph/qa/suites/rbd/librbd/extra-conf/none.yaml b/ceph/qa/suites/rbd/librbd/extra-conf/none.yaml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/qa/suites/rbd/librbd/extra-conf/permit-partial-discard.yaml b/ceph/qa/suites/rbd/librbd/extra-conf/permit-partial-discard.yaml
new file mode 100644 (file)
index 0000000..a992946
--- /dev/null
@@ -0,0 +1,5 @@
+overrides:
+  ceph:
+    conf:
+      client:
+        rbd skip partial discard: false
diff --git a/ceph/qa/suites/rbd/librbd/pool/.qa b/ceph/qa/suites/rbd/librbd/pool/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/librbd/pool/ec-data-pool.yaml b/ceph/qa/suites/rbd/librbd/pool/ec-data-pool.yaml
deleted file mode 100644 (file)
index f39a5bb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd erasure-code-profile set teuthologyprofile crush-failure-domain=osd m=1 k=2
-      - sudo ceph osd pool create datapool 4 4 erasure teuthologyprofile
-      - sudo ceph osd pool set datapool allow_ec_overwrites true
-      - rbd pool init datapool
-
-overrides:
-  thrashosds:
-    bdev_inject_crash: 2
-    bdev_inject_crash_probability: .5
-  ceph:
-    fs: xfs
-    conf:
-      client:
-        rbd default data pool: datapool
-      osd: # force bluestore since it's required for ec overwrites
-        osd objectstore: bluestore
-        bluestore block size: 96636764160
-        enable experimental unrecoverable data corrupting features: "*"
-        osd debug randomize hobject sort order: false
-# this doesn't work with failures bc the log writes are not atomic across the two backends
-#        bluestore bluefs env mirror: true
diff --git a/ceph/qa/suites/rbd/librbd/pool/none.yaml b/ceph/qa/suites/rbd/librbd/pool/none.yaml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/qa/suites/rbd/librbd/pool/replicated-data-pool.yaml b/ceph/qa/suites/rbd/librbd/pool/replicated-data-pool.yaml
deleted file mode 100644 (file)
index c5647db..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create datapool 4
-      - rbd pool init datapool
-
-overrides:
-  ceph:
-    conf:
-      client:
-        rbd default data pool: datapool
diff --git a/ceph/qa/suites/rbd/librbd/pool/small-cache-pool.yaml b/ceph/qa/suites/rbd/librbd/pool/small-cache-pool.yaml
deleted file mode 100644 (file)
index bad95ea..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
index ac9dd3cfe010dcf6fd28a55baca7147b65ea0cc1..eb63fd771467da54030e01a22e26331b46621d00 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
index c410fbcb0d3fd78e4ae40e37abd880ac5ec7c197..ec41945987cbb4916e59ad834f0e067ddec5df73 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
index 3a121de3eae07ea2ad00c824adbbb0a6df9535aa..6c3686806f62ecd51fd41a4f9ac4984f1119271a 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
diff --git a/ceph/qa/suites/rbd/maintenance/conf b/ceph/qa/suites/rbd/maintenance/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/migration/5-data-pool b/ceph/qa/suites/rbd/migration/5-data-pool
new file mode 120000 (symlink)
index 0000000..3df8275
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/data-pool/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/migration/5-pool/.qa b/ceph/qa/suites/rbd/migration/5-pool/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/migration/5-pool/ec-data-pool.yaml b/ceph/qa/suites/rbd/migration/5-pool/ec-data-pool.yaml
deleted file mode 100644 (file)
index f39a5bb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd erasure-code-profile set teuthologyprofile crush-failure-domain=osd m=1 k=2
-      - sudo ceph osd pool create datapool 4 4 erasure teuthologyprofile
-      - sudo ceph osd pool set datapool allow_ec_overwrites true
-      - rbd pool init datapool
-
-overrides:
-  thrashosds:
-    bdev_inject_crash: 2
-    bdev_inject_crash_probability: .5
-  ceph:
-    fs: xfs
-    conf:
-      client:
-        rbd default data pool: datapool
-      osd: # force bluestore since it's required for ec overwrites
-        osd objectstore: bluestore
-        bluestore block size: 96636764160
-        enable experimental unrecoverable data corrupting features: "*"
-        osd debug randomize hobject sort order: false
-# this doesn't work with failures bc the log writes are not atomic across the two backends
-#        bluestore bluefs env mirror: true
diff --git a/ceph/qa/suites/rbd/migration/5-pool/none.yaml b/ceph/qa/suites/rbd/migration/5-pool/none.yaml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/qa/suites/rbd/migration/5-pool/replicated-data-pool.yaml b/ceph/qa/suites/rbd/migration/5-pool/replicated-data-pool.yaml
deleted file mode 100644 (file)
index c5647db..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create datapool 4
-      - rbd pool init datapool
-
-overrides:
-  ceph:
-    conf:
-      client:
-        rbd default data pool: datapool
diff --git a/ceph/qa/suites/rbd/migration/conf b/ceph/qa/suites/rbd/migration/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/mirror-thrash/conf b/ceph/qa/suites/rbd/mirror-thrash/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/mirror/conf b/ceph/qa/suites/rbd/mirror/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/nbd/conf b/ceph/qa/suites/rbd/nbd/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/pwl-cache/home/conf b/ceph/qa/suites/rbd/pwl-cache/home/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/pwl-cache/tmpfs/conf b/ceph/qa/suites/rbd/pwl-cache/tmpfs/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/qemu/conf b/ceph/qa/suites/rbd/qemu/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/qemu/data-pool b/ceph/qa/suites/rbd/qemu/data-pool
new file mode 120000 (symlink)
index 0000000..3df8275
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/data-pool/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/qemu/pool/.qa b/ceph/qa/suites/rbd/qemu/pool/.qa
deleted file mode 120000 (symlink)
index a602a03..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../.qa/
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/qemu/pool/ec-cache-pool.yaml b/ceph/qa/suites/rbd/qemu/pool/ec-cache-pool.yaml
deleted file mode 100644 (file)
index a0f88b4..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd erasure-code-profile set teuthologyprofile crush-failure-domain=osd m=1 k=2
-      - sudo ceph osd pool delete rbd rbd --yes-i-really-really-mean-it
-      - sudo ceph osd pool create rbd 4 4 erasure teuthologyprofile
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
-      - rbd pool init rbd
diff --git a/ceph/qa/suites/rbd/qemu/pool/ec-data-pool.yaml b/ceph/qa/suites/rbd/qemu/pool/ec-data-pool.yaml
deleted file mode 100644 (file)
index f39a5bb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd erasure-code-profile set teuthologyprofile crush-failure-domain=osd m=1 k=2
-      - sudo ceph osd pool create datapool 4 4 erasure teuthologyprofile
-      - sudo ceph osd pool set datapool allow_ec_overwrites true
-      - rbd pool init datapool
-
-overrides:
-  thrashosds:
-    bdev_inject_crash: 2
-    bdev_inject_crash_probability: .5
-  ceph:
-    fs: xfs
-    conf:
-      client:
-        rbd default data pool: datapool
-      osd: # force bluestore since it's required for ec overwrites
-        osd objectstore: bluestore
-        bluestore block size: 96636764160
-        enable experimental unrecoverable data corrupting features: "*"
-        osd debug randomize hobject sort order: false
-# this doesn't work with failures bc the log writes are not atomic across the two backends
-#        bluestore bluefs env mirror: true
diff --git a/ceph/qa/suites/rbd/qemu/pool/none.yaml b/ceph/qa/suites/rbd/qemu/pool/none.yaml
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/qa/suites/rbd/qemu/pool/replicated-data-pool.yaml b/ceph/qa/suites/rbd/qemu/pool/replicated-data-pool.yaml
deleted file mode 100644 (file)
index c5647db..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create datapool 4
-      - rbd pool init datapool
-
-overrides:
-  ceph:
-    conf:
-      client:
-        rbd default data pool: datapool
diff --git a/ceph/qa/suites/rbd/qemu/pool/small-cache-pool.yaml b/ceph/qa/suites/rbd/qemu/pool/small-cache-pool.yaml
deleted file mode 100644 (file)
index bad95ea..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
index b41f92d52249da9f1dbcdb2858bdc82e99771746..48156c7a0d3744389626549893206ee015d33fdf 100644 (file)
@@ -6,8 +6,6 @@ roles:
 tasks:
 - install:
 - ceph:
-    log-ignorelist:
-      - 'application not enabled'
 - workunit:
     timeout: 30m
     clients:
diff --git a/ceph/qa/suites/rbd/singleton-bluestore/conf b/ceph/qa/suites/rbd/singleton-bluestore/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
index 954760159c0b937f66f8822e64273997cbbe2c77..4120d21c9f285c2fe2e48c9079f4da7900fbd45b 100644 (file)
@@ -7,7 +7,6 @@ tasks:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all: [rbd/test_rbd_mirror.sh]
index b06ede60567e58250e0c333b11f5e9ec86d4b307..782b0214135e32ba1d6ec95e39e9a331d456b554 100644 (file)
@@ -4,10 +4,6 @@ tasks:
 - install:
 - ceph:
     fs: xfs
-    log-ignorelist:
-      - overall HEALTH_
-      - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       all: [rbd/test_rbd_tasks.sh]
diff --git a/ceph/qa/suites/rbd/singleton/conf b/ceph/qa/suites/rbd/singleton/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/thrash/conf b/ceph/qa/suites/rbd/thrash/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
diff --git a/ceph/qa/suites/rbd/thrash/thrashers/cache.yaml b/ceph/qa/suites/rbd/thrash/thrashers/cache.yaml
deleted file mode 100644 (file)
index b434e28..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-overrides:
-  ceph:
-    log-ignorelist:
-      - but it is still running
-      - objects unfound and apparently lost
-      - overall HEALTH_
-      - \(CACHE_POOL_NEAR_FULL\)
-      - \(CACHE_POOL_NO_HIT_SET\)
-tasks:
-- exec:
-    client.0:
-      - sudo ceph osd pool create cache 4
-      - sudo ceph osd tier add rbd cache
-      - sudo ceph osd tier cache-mode cache writeback
-      - sudo ceph osd tier set-overlay rbd cache
-      - sudo ceph osd pool set cache hit_set_type bloom
-      - sudo ceph osd pool set cache hit_set_count 8
-      - sudo ceph osd pool set cache hit_set_period 60
-      - sudo ceph osd pool set cache target_max_objects 250
-- thrashosds:
-    timeout: 1200
index c410fbcb0d3fd78e4ae40e37abd880ac5ec7c197..ec41945987cbb4916e59ad834f0e067ddec5df73 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
index ce47fc46f62ac684dcd10b73bbc19d3112b30344..26e20522c44b40f800b607dcf4ec66868f9908df 100644 (file)
@@ -10,7 +10,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
     conf:
index 3a121de3eae07ea2ad00c824adbbb0a6df9535aa..6c3686806f62ecd51fd41a4f9ac4984f1119271a 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
index ac9dd3cfe010dcf6fd28a55baca7147b65ea0cc1..eb63fd771467da54030e01a22e26331b46621d00 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
diff --git a/ceph/qa/suites/rbd/valgrind/conf b/ceph/qa/suites/rbd/valgrind/conf
new file mode 120000 (symlink)
index 0000000..4bc0fe8
--- /dev/null
@@ -0,0 +1 @@
+.qa/rbd/conf
\ No newline at end of file
index ac9dd3cfe010dcf6fd28a55baca7147b65ea0cc1..eb63fd771467da54030e01a22e26331b46621d00 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
index c410fbcb0d3fd78e4ae40e37abd880ac5ec7c197..ec41945987cbb4916e59ad834f0e067ddec5df73 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
index 3a121de3eae07ea2ad00c824adbbb0a6df9535aa..6c3686806f62ecd51fd41a4f9ac4984f1119271a 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
       - is full \(reached quota
       - \(POOL_FULL\)
 tasks:
index 251de1c1f72a063af8940b87847bc94cb94d15f7..ae5a83c300b580a617354bf4bbdecb330afd5efb 100644 (file)
@@ -3,7 +3,6 @@ overrides:
     log-ignorelist:
       - overall HEALTH_
       - \(CACHE_POOL_NO_HIT_SET\)
-      - \(POOL_APP_NOT_ENABLED\)
 tasks:
 - workunit:
     clients:
diff --git a/ceph/qa/suites/rgw/cloud-transition/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/cloud-transition/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
index bc059c0a34da031a175546490304dcdb898f041a..0c75a131cceb3fc8def6678a16e043a57d08921c 100644 (file)
@@ -27,7 +27,11 @@ tasks:
 - tox: [ client.0 ]
 - keystone:
     client.0:
-      force-branch: stable/xena
+      force-branch: stable/2023.1
+      services:
+        - name: swift
+          type: object-store
+          description: Swift Service
       projects:
         - name: rgwcrypt
           description: Encryption Tenant
@@ -62,10 +66,6 @@ tasks:
         - name: creator
           user: s3-user
           project: s3
-      services:
-        - name: swift
-          type: object-store
-          description: Swift Service
 - barbican:
     client.0:
       force-branch: stable/xena
diff --git a/ceph/qa/suites/rgw/crypt/supported-random-distro$ b/ceph/qa/suites/rgw/crypt/supported-random-distro$
deleted file mode 120000 (symlink)
index 0862b44..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.qa/distros/supported-random-distro$
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/crypt/ubuntu_latest.yaml b/ceph/qa/suites/rgw/crypt/ubuntu_latest.yaml
new file mode 120000 (symlink)
index 0000000..fe01daf
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/all/ubuntu_latest.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/dbstore/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/dbstore/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/hadoop-s3a/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/hadoop-s3a/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/lifecycle/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/lifecycle/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/notifications/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/notifications/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/service-token/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/service-token/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/tempest/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/tempest/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/thrash/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/thrash/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/tools/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/tools/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
index ab06356f6b365e0d43abb1f91e57049f5f149fe2..d882523e006c6c56f85fe2c02f7575221d1ae7da 100644 (file)
@@ -1,3 +1,3 @@
 overrides:
   ragweed:
-    default-branch: ceph-master # ceph-pacific doesn't have tox, but tests are the same
+    default-branch: ceph-reef # ceph-pacific doesn't have tox, but tests are the same
index ef9110a956d45eeabb83c797778971218a378d3d..02508d329d40d87e7f5eac1f5868544cfd89d81f 100644 (file)
@@ -1,3 +1,3 @@
 overrides:
   ragweed:
-    default-branch: ceph-master # ceph-quincy doesn't have tox, but tests are the same
+    default-branch: ceph-reef # ceph-quincy doesn't have tox, but tests are the same
diff --git a/ceph/qa/suites/rgw/upgrade/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/upgrade/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/rgw/verify/tasks/bucket-check.yaml b/ceph/qa/suites/rgw/verify/tasks/bucket-check.yaml
new file mode 100644 (file)
index 0000000..4955d41
--- /dev/null
@@ -0,0 +1,5 @@
+tasks:
+- workunit:
+    clients:
+      client.0:
+        - rgw/run-bucket-check.sh
diff --git a/ceph/qa/suites/rgw/verify/tasks/mp_reupload.yaml b/ceph/qa/suites/rgw/verify/tasks/mp_reupload.yaml
new file mode 100644 (file)
index 0000000..d817a1c
--- /dev/null
@@ -0,0 +1,5 @@
+tasks:
+- workunit:
+    clients:
+      client.0:
+        - rgw/test_rgw_s3_mp_reupload.sh
diff --git a/ceph/qa/suites/rgw/website/ignore-pg-availability.yaml b/ceph/qa/suites/rgw/website/ignore-pg-availability.yaml
new file mode 120000 (symlink)
index 0000000..32340b1
--- /dev/null
@@ -0,0 +1 @@
+.qa/rgw/ignore-pg-availability.yaml
\ No newline at end of file
diff --git a/ceph/qa/suites/smoke/basic/supported-all-distro b/ceph/qa/suites/smoke/basic/supported-all-distro
new file mode 120000 (symlink)
index 0000000..ca82dde
--- /dev/null
@@ -0,0 +1 @@
+.qa/distros/supported-all-distro
\ No newline at end of file
diff --git a/ceph/qa/suites/smoke/basic/supported-random-distro$ b/ceph/qa/suites/smoke/basic/supported-random-distro$
deleted file mode 120000 (symlink)
index 072fd83..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../../../distros/supported-random-distro$/
\ No newline at end of file
index 0e51ed0e4fd0f75aef2d0d7da0750804e003307f..bc40416ffb21ea72bf1dfa7681f32312b5a59db3 100644 (file)
@@ -1,6 +1,8 @@
 tasks:
 - ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - ceph-fuse:
 - workunit:
     clients:
index 8f0bc592c903a461ae85e3d3eb56b1eaede2cbe0..e21286d595e1b194e02d7a94f48b5e21de3d2b4d 100644 (file)
@@ -1,5 +1,7 @@
 tasks:
 - ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - ceph-fuse:
 - workunit:
     clients:
index fedc23081b4d03615b45feb865d673659712b142..871606ab87c7bf83c3efbb1f0cafe6965399c5ca 100644 (file)
@@ -1,5 +1,7 @@
 tasks:
 - ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - ceph-fuse: [client.0]
 - workunit:
     clients:
index 03501ecd3c0f0d3a1e64da51868a7cf7dbe38129..0f4469c9300baf0dde5ccde68d63b29413d9b221 100644 (file)
@@ -1,6 +1,8 @@
 tasks:
 - ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       mds:
         debug mds: 20
index 6d3ccdf05567399823634a742348d6c139bad65c..3720d418c8285d4c3e8807a5979dc7e9c14d05b7 100644 (file)
@@ -5,6 +5,8 @@ overrides:
         ms die on skipped message: false
 tasks:
 - ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - kclient:
 - workunit:
     clients:
index 2a9b991a97208ea3387bcad4f6d15abb5630f87b..256d1f1feeb3485a1f7aac510f0139b1c98c59ce 100644 (file)
@@ -6,6 +6,8 @@ overrides:
 tasks:
 - ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - kclient:
 - workunit:
     clients:
index 96a7a215db76bafe72c85f9d4e39e5a6bb9e18ca..649ea8e145924b1582d61ce9029f24695adb464b 100644 (file)
@@ -6,6 +6,8 @@ overrides:
 tasks:
 - ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - kclient:
 - workunit:
     clients:
index 60723a4164f457a335c053e15f4705ad6f0447cf..7dea45b805d6362a1a351446416356a21d8f4c10 100644 (file)
@@ -6,6 +6,8 @@ overrides:
 tasks:
 - ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - kclient:
 - workunit:
     clients:
index 2e332f0137d456b5798d4c583584c445acceff2f..3be975b6bf2c4e534408c3e03c278d7376540d01 100644 (file)
@@ -9,6 +9,8 @@ overrides:
         debug mds: 20
 tasks:
 - ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - ceph-fuse:
 - workunit:
     clients:
index 07e28a7a46d938f272d962e98ec95fd9c132f4ac..c4d55728c31dad65e390d70ed07202607bc04230 100644 (file)
@@ -7,6 +7,8 @@ overrides:
 tasks:
 - ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - workunit:
     clients:
       client.0:
index 9c2ad68a311e0060b2401171fbeada6ec7b867b2..79ff9418d8211aa08819fbe4f777ccfcaa4a0ace 100644 (file)
@@ -1,6 +1,8 @@
 tasks:
 - ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - ceph-fuse:
 - workunit:
     clients:
index a3cfaa2bc62406ca1fb5db9812ab0c090b45a0ff..73e64bb2c5b016493f115aee1a925ae0fc196e81 100644 (file)
@@ -5,6 +5,8 @@ overrides:
       - python3-pytest
 tasks:
 - ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - ceph-fuse:
 - workunit:
     clients:
index 1cbaebc89c5be75abc2496613e556598ac8327ee..8602447aad2f52d96cc0929628d5a4c2ab5a7664 100644 (file)
@@ -7,6 +7,8 @@ overrides:
         rbd default features: 5
 tasks:
 - ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - rbd:
     all:
       image_size: 20480
index c914886d68f77503c9cc6e0970ebaa5ffc6c0eb2..3214fd9009bbd9678fa26975442660d4bbc41a1d 100644 (file)
@@ -4,6 +4,8 @@ overrides:
     cache-pools: true
 tasks:
 - ceph:
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - rgw: [client.0]
 - tox: [client.0]
 - s3tests:
index 23039e51ce49bf60281a69f08b399d401512be4e..337452f75b6bd697e8c71666aa6edc6fa4f7033f 100644 (file)
@@ -1,6 +1,8 @@
 tasks:
 - ceph:
     fs: xfs
+    log-ignorelist:
+      - \(POOL_APP_NOT_ENABLED\)
 - rgw: [client.0]
 - tox: [client.0]
 - s3tests:
index 6e67e9cf169700702b67ae0257b27f3617e8a0df..6a0242b91555a3d974c94815e59db67a86de1f53 100644 (file)
@@ -9,4 +9,6 @@ workload:
         clients:
           client.0:
               - rbd/test_librbd.sh
+        env:
+          RBD_FEATURES: "61"
     - print: "**** done end test_rbd_api.yaml"
index 59ed404743882d11a2e2332095499f90be2b8299..8d1f0fd0f8bd726523c3f01fcd3e7b4d5c3d3c28 100644 (file)
@@ -14,5 +14,7 @@ workload:
         clients:
           client.0:
             - rbd/test_librbd_python.sh
+        env:
+          RBD_FEATURES: "61"
     - print: "**** done end test_rbd_python.yaml"
 
index 400cc5f7de58eb7c0f103fef6dc36cd9e027a4e7..a7060c0ac9ddf20ab5f77650a28132b6517d6eb3 100644 (file)
@@ -7,4 +7,6 @@ first-half-tasks:
      clients:
         client.0:
            - rbd/test_librbd.sh
+     env:
+       RBD_FEATURES: "61"
 - print: "**** done rbd/test_librbd.sh 7-workload"
index a3f5c9e39c37a078deae65b178411ad4fe3b7c4d..8b52658c452721708f5f223679cfea725bb42e1b 100644 (file)
@@ -7,4 +7,6 @@ stress-tasks:
      clients:
         client.0:
            - rbd/test_librbd.sh
+     env:
+       RBD_FEATURES: "61"
 - print: "**** done rbd/test_librbd.sh 7-workload"
index 4663e252745fe8cafb8456b45ed0b9b27a82ba9e..b4b6f4d900c9551574e6bed81cc02f153384df8a 100644 (file)
@@ -19,6 +19,7 @@ overrides:
       - \(MGR_DOWN\)
       - slow request
       - \(MON_MSGR2_NOT_ENABLED\)
+      - \(POOL_APP_NOT_ENABLED\)
     conf:
       global:
         enable experimental unrecoverable data corrupting features: "*"
index d8098313598e18d0f2decf4377bf6d43b90a6ba4..c871d4c8cb0f907d89a037b8e6da5e42d7593c91 100644 (file)
@@ -9,4 +9,6 @@ workload:
         clients:
           client.0:
               - rbd/test_librbd.sh
+        env:
+          RBD_FEATURES: "61"
     - print: "**** done end test_rbd_api.yaml"
index c30560895481eca2f2bd8fb55addd5167e2e57ac..3ae98ed1ea197590cdf5739ade3786139701bc38 100644 (file)
@@ -14,5 +14,7 @@ workload:
         clients:
           client.0:
             - rbd/test_librbd_python.sh
+        env:
+          RBD_FEATURES: "61"
     - print: "**** done end test_rbd_python.yaml"
 
index 87b89ec197bd4f055cda18ba9846733acc333bd5..0fa5d09447dc3a8f5be27b4a6d214ea3e79cda41 100644 (file)
@@ -7,4 +7,6 @@ first-half-tasks:
      clients:
         client.0:
            - rbd/test_librbd.sh
+     env:
+       RBD_FEATURES: "61"
 - print: "**** done rbd/test_librbd.sh 7-workload"
index 1d4714ab4a0c9999550cea861df7f04b005c77d8..cc4f29a083be973ae4727b2d1fbd699d0e305098 100644 (file)
@@ -7,4 +7,6 @@ stress-tasks:
      clients:
         client.0:
            - rbd/test_librbd.sh
+     env:
+       RBD_FEATURES: "61"
 - print: "**** done rbd/test_librbd.sh 7-workload"
index 70bd734053aee66f5ee1a2d9119e6dd5003dc239..771304fba928e18c3b0c1c3dac232743fc82700d 100644 (file)
@@ -136,9 +136,8 @@ def set_authtoken_params(ctx, cclient, cconfig):
                         ['sed', '-i',
                          '/[[]filter:authtoken]/{p;s##'+'auth_uri = {}'.format(url)+'#;}',
                          'etc/barbican/barbican-api-paste.ini'])
-    admin_host, admin_port = ctx.keystone.admin_endpoints[keystone_role]
-    admin_url = 'http://{host}:{port}/v3'.format(host=admin_host,
-                                                 port=admin_port)
+    admin_url = 'http://{host}:{port}/v3'.format(host=public_host,
+                                                 port=public_port)
     run_in_barbican_dir(ctx, cclient,
                         ['sed', '-i',
                          '/[[]filter:authtoken]/{p;s##'+'auth_url = {}'.format(admin_url)+'#;}',
index 84685b824bf462e669e1099310f85f3e73580603..e9fc25d6a86d17d1143466eecc0bf74cf5f34053 100644 (file)
@@ -441,6 +441,70 @@ def pull_image(ctx, config):
     finally:
         pass
 
+@contextlib.contextmanager
+def setup_ca_signed_keys(ctx, config):
+    # generate our ca key
+    cluster_name = config['cluster']
+    bootstrap_remote = ctx.ceph[cluster_name].bootstrap_remote
+    bootstrap_remote.run(args=[
+        'sudo', 'ssh-keygen', '-t', 'rsa', '-f', '/root/ca-key', '-N', ''
+    ])
+
+    # not using read_file here because it runs dd as a non-root
+    # user and would hit permission issues
+    r = bootstrap_remote.run(args=[
+        'sudo', 'cat', '/root/ca-key.pub'
+    ], stdout=StringIO())
+    ca_key_pub_contents = r.stdout.getvalue()
+
+    # make CA key accepted on each host
+    for remote in ctx.cluster.remotes.keys():
+        # write key to each host's /etc/ssh dir
+        remote.run(args=[
+            'sudo', 'echo', ca_key_pub_contents,
+            run.Raw('|'),
+            'sudo', 'tee', '-a', '/etc/ssh/ca-key.pub',
+        ])
+        # make sshd accept the CA signed key
+        remote.run(args=[
+            'sudo', 'echo', 'TrustedUserCAKeys /etc/ssh/ca-key.pub',
+            run.Raw('|'),
+            'sudo', 'tee', '-a', '/etc/ssh/sshd_config',
+            run.Raw('&&'),
+            'sudo', 'systemctl', 'restart', 'sshd',
+        ])
+
+    # generate a new key pair and sign the pub key to make a cert
+    bootstrap_remote.run(args=[
+        'sudo', 'ssh-keygen', '-t', 'rsa', '-f', '/root/cephadm-ssh-key', '-N', '',
+        run.Raw('&&'),
+        'sudo', 'ssh-keygen', '-s', '/root/ca-key', '-I', 'user_root', '-n', 'root', '-V', '+52w', '/root/cephadm-ssh-key',
+    ])
+
+    # for debugging, to make sure this setup has worked as intended
+    for remote in ctx.cluster.remotes.keys():
+        remote.run(args=[
+            'sudo', 'cat', '/etc/ssh/ca-key.pub'
+        ])
+        remote.run(args=[
+            'sudo', 'cat', '/etc/ssh/sshd_config',
+            run.Raw('|'),
+            'grep', 'TrustedUserCAKeys'
+        ])
+    bootstrap_remote.run(args=[
+        'sudo', 'ls', '/root/'
+    ])
+
+    ctx.ca_signed_key_info = {}
+    ctx.ca_signed_key_info['ca-key'] = '/root/ca-key'
+    ctx.ca_signed_key_info['ca-key-pub'] = '/root/ca-key.pub'
+    ctx.ca_signed_key_info['private-key'] = '/root/cephadm-ssh-key'
+    ctx.ca_signed_key_info['ca-signed-cert'] = '/root/cephadm-ssh-key-cert.pub'
+
+    try:
+        yield
+    finally:
+        pass
 
 @contextlib.contextmanager
 def ceph_bootstrap(ctx, config):
@@ -510,8 +574,20 @@ def ceph_bootstrap(ctx, config):
             '--output-config', '/etc/ceph/{}.conf'.format(cluster_name),
             '--output-keyring',
             '/etc/ceph/{}.client.admin.keyring'.format(cluster_name),
-            '--output-pub-ssh-key', '{}/{}.pub'.format(testdir, cluster_name),
         ]
+
+        if not config.get("use-ca-signed-key", False):
+            cmd += ['--output-pub-ssh-key', '{}/{}.pub'.format(testdir, cluster_name)]
+        else:
+            # ctx.ca_signed_key_info should have been set up in
+            # setup_ca_signed_keys function which we expect to have
+            # run before bootstrap if use-ca-signed-key is true
+            signed_key_info = ctx.ca_signed_key_info
+            cmd += [
+                "--ssh-private-key", signed_key_info['private-key'],
+                "--ssh-signed-cert", signed_key_info['ca-signed-cert'],
+            ]
+
         if config.get("no_cgroups_split") is True:
             cmd.insert(cmd.index("bootstrap"), "--no-cgroups-split")
 
@@ -562,21 +638,22 @@ def ceph_bootstrap(ctx, config):
         ctx.ceph[cluster_name].mon_keyring = \
             bootstrap_remote.read_file(f'/var/lib/ceph/{fsid}/mon.{first_mon}/keyring', sudo=True)
 
-        # fetch ssh key, distribute to additional nodes
-        log.info('Fetching pub ssh key...')
-        ssh_pub_key = bootstrap_remote.read_file(
-            f'{testdir}/{cluster_name}.pub').decode('ascii').strip()
+        if not config.get("use-ca-signed-key", False):
+            # fetch ssh key, distribute to additional nodes
+            log.info('Fetching pub ssh key...')
+            ssh_pub_key = bootstrap_remote.read_file(
+                f'{testdir}/{cluster_name}.pub').decode('ascii').strip()
 
-        log.info('Installing pub ssh key for root users...')
-        ctx.cluster.run(args=[
-            'sudo', 'install', '-d', '-m', '0700', '/root/.ssh',
-            run.Raw('&&'),
-            'echo', ssh_pub_key,
-            run.Raw('|'),
-            'sudo', 'tee', '-a', '/root/.ssh/authorized_keys',
-            run.Raw('&&'),
-            'sudo', 'chmod', '0600', '/root/.ssh/authorized_keys',
-        ])
+            log.info('Installing pub ssh key for root users...')
+            ctx.cluster.run(args=[
+                'sudo', 'install', '-d', '-m', '0700', '/root/.ssh',
+                run.Raw('&&'),
+                'echo', ssh_pub_key,
+                run.Raw('|'),
+                'sudo', 'tee', '-a', '/root/.ssh/authorized_keys',
+                run.Raw('&&'),
+                'sudo', 'chmod', '0600', '/root/.ssh/authorized_keys',
+            ])
 
         # set options
         if config.get('allow_ptrace', True):
@@ -1636,16 +1713,18 @@ def task(ctx, config):
 
     with contextutil.nested(
             #if the cluster is already bootstrapped bypass corresponding methods
-            lambda: _bypass() if (ctx.ceph[cluster_name].bootstrapped)\
+            lambda: _bypass() if (ctx.ceph[cluster_name].bootstrapped) \
                               else initialize_config(ctx=ctx, config=config),
             lambda: ceph_initial(),
             lambda: normalize_hostnames(ctx=ctx),
-            lambda: _bypass() if (ctx.ceph[cluster_name].bootstrapped)\
+            lambda: _bypass() if (ctx.ceph[cluster_name].bootstrapped) \
                               else download_cephadm(ctx=ctx, config=config, ref=ref),
             lambda: ceph_log(ctx=ctx, config=config),
             lambda: ceph_crash(ctx=ctx, config=config),
             lambda: pull_image(ctx=ctx, config=config),
-            lambda: _bypass() if (ctx.ceph[cluster_name].bootstrapped)\
+            lambda: _bypass() if not (config.get('use-ca-signed-key', False)) \
+                              else setup_ca_signed_keys(ctx, config),
+            lambda: _bypass() if (ctx.ceph[cluster_name].bootstrapped) \
                               else ceph_bootstrap(ctx, config),
             lambda: crush_setup(ctx=ctx, config=config),
             lambda: ceph_mons(ctx=ctx, config=config),
index 129b84790e90371de84af87d11836e87f8a2c11e..d2688929cc37ff534d943dff23be92bfa6edccda 100644 (file)
@@ -13,6 +13,12 @@ from teuthology.exceptions import CommandFailedError
 
 log = logging.getLogger(__name__)
 
+def classhook(m):
+    def dec(cls):
+        getattr(cls, m)()
+        return cls
+    return dec
+
 def for_teuthology(f):
     """
     Decorator that adds an "is_for_teuthology" attribute to the wrapped function
index 750b6b5335a4b7eafd8cf037496646a72ba6106d..89f6b66398c9b2481daed0acc974fe04a4d0887a 100644 (file)
@@ -68,7 +68,10 @@ class KernelMount(CephFSMount):
                 self.enable_dynamic_debug()
             self.ctx[f'kmount_count.{self.client_remote.hostname}'] = kmount_count + 1
 
-        self.gather_mount_info()
+        try:
+            self.gather_mount_info()
+        except:
+            log.warn('failed to fetch mount info - tests depending on mount addr/inst may fail!')
 
     def gather_mount_info(self):
         self.id = self._get_global_id()
index 23aa2f8378d6dda5db7d2fffeb02e70560c2afe3..4a81874068ff37d21a444ba8c864f4079f38fe04 100644 (file)
@@ -186,6 +186,12 @@ class CephFSMount(object):
                               sudo=True).decode())
 
     def is_blocked(self):
+        if not self.addr:
+            # can't infer if our addr is blocklisted - let the caller try to
+            # umount without lazy/force. If the client was blocklisted, then
+            # the umount would be stuck and the test would fail on timeout.
+            # happens only with Ubuntu 20.04 (missing kclient patches :/).
+            return False
         self.fs = Filesystem(self.ctx, name=self.cephfs_name)
 
         try:
@@ -935,7 +941,7 @@ class CephFSMount(object):
         ))
         p.wait()
 
-    def open_background(self, basename="background_file", write=True):
+    def open_background(self, basename="background_file", write=True, content="content"):
         """
         Open a file for writing, then block such that the client
         will hold a capability.
@@ -952,12 +958,11 @@ class CephFSMount(object):
                 import time
 
                 with open("{path}", 'w') as f:
-                    f.write('content')
+                    f.write("{content}")
                     f.flush()
-                    f.write('content2')
                     while True:
                         time.sleep(1)
-                """).format(path=path)
+                """).format(path=path, content=content)
         else:
             pyscript = dedent("""
                 import time
@@ -973,7 +978,10 @@ class CephFSMount(object):
         # This wait would not be sufficient if the file had already
         # existed, but it's simple and in practice users of open_background
         # are not using it on existing files.
-        self.wait_for_visible(basename)
+        if write:
+            self.wait_for_visible(basename, size=len(content))
+        else:
+            self.wait_for_visible(basename)
 
         return rproc
 
@@ -1011,19 +1019,27 @@ class CephFSMount(object):
                 if nr_links == 2:
                     return
 
-    def wait_for_visible(self, basename="background_file", timeout=30):
+    def wait_for_visible(self, basename="background_file", size=None, timeout=30):
         i = 0
+        args = ['stat']
+        if size is not None:
+            args += ['--printf=%s']
+        args += [os.path.join(self.hostfs_mntpt, basename)]
         while i < timeout:
-            r = self.client_remote.run(args=[
-                'stat', os.path.join(self.hostfs_mntpt, basename)
-            ], check_status=False)
-            if r.exitstatus == 0:
-                log.debug("File {0} became visible from {1} after {2}s".format(
-                    basename, self.client_id, i))
-                return
-            else:
-                time.sleep(1)
-                i += 1
+            p = self.client_remote.run(args=args, stdout=StringIO(), check_status=False)
+            if p.exitstatus == 0:
+                if size is not None:
+                    s = p.stdout.getvalue().strip()
+                    if int(s) == size:
+                        log.info(f"File {basename} became visible with size {size} from {self.client_id} after {i}s")
+                        return
+                    else:
+                        log.error(f"File {basename} became visible but with size {int(s)} not {size}")
+                else:
+                    log.info(f"File {basename} became visible from {self.client_id} after {i}s")
+                    return
+            time.sleep(1)
+            i += 1
 
         raise RuntimeError("Timed out after {0}s waiting for {1} to become visible from {2}".format(
             i, basename, self.client_id))
@@ -1229,7 +1245,8 @@ class CephFSMount(object):
         self.background_procs.append(rproc)
         return rproc
 
-    def create_n_files(self, fs_path, count, sync=False, dirsync=False, unlink=False, finaldirsync=False):
+    def create_n_files(self, fs_path, count, sync=False, dirsync=False,
+                       unlink=False, finaldirsync=False, hard_links=0):
         """
         Create n files.
 
@@ -1237,6 +1254,7 @@ class CephFSMount(object):
         :param dirsync: sync the containing directory after closing the file
         :param unlink: unlink the file after closing
         :param finaldirsync: sync the containing directory after closing the last file
+        :param hard_links: create given number of hard link(s) for each file
         """
 
         assert(self.is_mounted())
@@ -1245,8 +1263,12 @@ class CephFSMount(object):
 
         pyscript = dedent(f"""
             import os
+            import uuid
 
             n = {count}
+            create_hard_links = False
+            if {hard_links} > 0:
+                create_hard_links = True
             path = "{abs_path}"
 
             dpath = os.path.dirname(path)
@@ -1267,6 +1289,9 @@ class CephFSMount(object):
                         os.unlink(fpath)
                     if {dirsync}:
                         os.fsync(dirfd)
+                    if create_hard_links:
+                        for j in range({hard_links}):
+                            os.system(f"ln {{fpath}} {{dpath}}/{{fnameprefix}}_{{i}}_{{uuid.uuid4()}}")     
                 if {finaldirsync}:
                     os.fsync(dirfd)
             finally:
index e6ad57b5c3027941ea4727b68dea164cd119f10a..9890381c604056647c1eb13299a7b82cc570a147 100644 (file)
@@ -8,7 +8,7 @@ from os.path import join as os_path_join
 
 from teuthology.exceptions import CommandFailedError
 
-from tasks.cephfs.cephfs_test_case import CephFSTestCase
+from tasks.cephfs.cephfs_test_case import CephFSTestCase, classhook
 from tasks.cephfs.filesystem import FileLayout, FSMissing
 from tasks.cephfs.fuse_mount import FuseMount
 from tasks.cephfs.caps_helper import CapTester
@@ -37,6 +37,34 @@ class TestAdminCommands(CephFSTestCase):
         if overwrites:
             self.fs.mon_manager.raw_cluster_cmd('osd', 'pool', 'set', n+"-data", 'allow_ec_overwrites', 'true')
 
+@classhook('_add_valid_tell')
+class TestValidTell(TestAdminCommands):
+    @classmethod
+    def _add_valid_tell(cls):
+        tells = [
+          ['cache', 'status'],
+          ['damage', 'ls'],
+          ['dump_blocked_ops'],
+          ['dump_blocked_ops_count'],
+          ['dump_historic_ops'],
+          ['dump_historic_ops_by_duration'],
+          ['dump_mempools'],
+          ['dump_ops_in_flight'],
+          ['flush', 'journal'],
+          ['get', 'subtrees'],
+          ['ops', 'locks'],
+          ['ops'],
+          ['status'],
+          ['version'],
+        ]
+        def test(c):
+            def f(self):
+                J = self.fs.rank_tell(c)
+                json.dumps(J)
+                log.debug("dumped:\n%s", str(J))
+            return f
+        for c in tells:
+            setattr(cls, 'test_valid_' + '_'.join(c), test(c))
 
 class TestFsStatus(TestAdminCommands):
     """
index 93484c9aa4e72a3b79e32a2f4ecd454d959a8760..c4215df336537701905893d42ad22d7b30be1294 100644 (file)
@@ -9,7 +9,9 @@ from textwrap import dedent
 from tasks.ceph_test_case import TestTimeoutError
 from tasks.cephfs.cephfs_test_case import CephFSTestCase, needs_trimming
 from tasks.cephfs.fuse_mount import FuseMount
+from teuthology.exceptions import CommandFailedError
 import os
+from io import StringIO
 
 
 log = logging.getLogger(__name__)
@@ -156,29 +158,49 @@ class TestClientLimits(CephFSTestCase):
         a fraction of second (0.5) by default when throttling condition is met.
         """
 
-        max_caps_per_client = 500
-        cap_acquisition_throttle = 250
+        subdir_count = 4
+        files_per_dir = 25
 
-        self.config_set('mds', 'mds_max_caps_per_client', max_caps_per_client)
-        self.config_set('mds', 'mds_session_cap_acquisition_throttle', cap_acquisition_throttle)
+        # throttle in a way so that two dir reads are already hitting it.
+        throttle_value = (files_per_dir * 3) // 2
 
-        # Create 1500 files split across 6 directories, 250 each.
-        for i in range(1, 7):
-            self.mount_a.create_n_files("dir{0}/file".format(i), cap_acquisition_throttle, sync=True)
+        # activate throttling logic by setting max per client to a low value
+        self.config_set('mds', 'mds_max_caps_per_client', 1)
+        self.config_set('mds', 'mds_session_cap_acquisition_throttle', throttle_value)
 
-        mount_a_client_id = self.mount_a.get_global_id()
+        # Create files split across {subdir_count} directories, {per_dir_count} in each dir
+        for i in range(1, subdir_count+1):
+            self.mount_a.create_n_files("dir{0}/file".format(i), files_per_dir, sync=True)
 
-        # recursive readdir
-        self.mount_a.run_shell_payload("find | wc")
+        mount_a_client_id = self.mount_a.get_global_id()
 
-        # validate cap_acquisition decay counter after readdir to exceed throttle count i.e 250
-        cap_acquisition_value = self.get_session(mount_a_client_id)['cap_acquisition']['value']
-        self.assertGreaterEqual(cap_acquisition_value, cap_acquisition_throttle)
+        # recursive readdir. macOs wants an explicit directory for `find`.
+        proc = self.mount_a.run_shell_payload("find . | wc", stderr=StringIO())
+        # return code may be None if the command got interrupted
+        self.assertTrue(proc.returncode is None or proc.returncode == 0, proc.stderr.getvalue())
 
         # validate the throttle condition to be hit atleast once
         cap_acquisition_throttle_hit_count = self.perf_dump()['mds_server']['cap_acquisition_throttle']
         self.assertGreaterEqual(cap_acquisition_throttle_hit_count, 1)
 
+        # validate cap_acquisition decay counter after readdir to NOT exceed the throttle value
+        # plus one batch that could have been taken immediately before querying
+        # assuming the batch is equal to the per dir file count.
+        cap_acquisition_value = self.get_session(mount_a_client_id)['cap_acquisition']['value']
+        self.assertLessEqual(cap_acquisition_value, files_per_dir + throttle_value)
+
+        # make sure that the throttle was reported in the events
+        def historic_ops_have_event(expected_event):
+            ops_dump = self.fs.rank_tell(['dump_historic_ops'])
+            # reverse the events and the ops assuming that later ops would be throttled
+            for op in reversed(ops_dump['ops']):
+                for ev in reversed(op.get('type_data', {}).get('events', [])):
+                    if ev['event'] == expected_event:
+                        return True
+            return False
+
+        self.assertTrue(historic_ops_have_event('cap_acquisition_throttle'))
+
     def test_client_release_bug(self):
         """
         When a client has a bug (which we will simulate) preventing it from releasing caps,
@@ -218,6 +240,55 @@ class TestClientLimits(CephFSTestCase):
         self.fs.mds_asok(['session', 'evict', "%s" % mount_a_client_id])
         rproc.wait()
 
+    def test_client_blocklisted_oldest_tid(self):
+        """
+        that a client is blocklisted when its encoded session metadata exceeds the
+        configured threshold (due to ever growing `completed_requests` caused due
+        to an unidentified bug (in the client or the MDS)).
+        """
+
+        # num of requests client issues
+        max_requests = 10000
+
+        # The debug hook to inject the failure only exists in the fuse client
+        if not isinstance(self.mount_a, FuseMount):
+            self.skipTest("Require FUSE client to inject client release failure")
+
+        self.config_set('client', 'client inject fixed oldest tid', 'true')
+        self.mount_a.teardown()
+        self.mount_a.mount_wait()
+
+        self.config_set('mds', 'mds_max_completed_requests', max_requests);
+
+        # Create lots of files
+        self.mount_a.create_n_files("testdir/file1", max_requests + 100)
+
+        # Create a few files synchronously. This makes sure previous requests are completed
+        self.mount_a.create_n_files("testdir/file2", 5, True)
+
+        # Wait for the health warnings. Assume mds can handle 10 request per second at least
+        self.wait_for_health("MDS_CLIENT_OLDEST_TID", max_requests // 10, check_in_detail=str(self.mount_a.client_id))
+
+        # set the threshold low so that it has a high probability of
+        # hitting.
+        self.config_set('mds', 'mds_session_metadata_threshold', 5000);
+
+        # Create lot many files synchronously. This would hit the session metadata threshold
+        # causing the client to get blocklisted.
+        with self.assertRaises(CommandFailedError):
+            self.mount_a.create_n_files("testdir/file2", 100000, True)
+
+        self.mds_cluster.is_addr_blocklisted(self.mount_a.get_global_addr())
+        # the mds should bump up the relevant perf counter
+        pd = self.perf_dump()
+        self.assertGreater(pd['mds_sessions']['mdthresh_evicted'], 0)
+
+        # reset the config
+        self.config_set('client', 'client inject fixed oldest tid', 'false')
+
+        self.mount_a.kill_cleanup()
+        self.mount_a.mount_wait()
+
     def test_client_oldest_tid(self):
         """
         When a client does not advance its oldest tid, the MDS should notice that
index f8a50ad37a9b64f09aa5cc5db2abd9f995ee1ea4..1bd6884a9dcc4b62bf13db0e477dd611466c0bcd 100644 (file)
@@ -7,7 +7,9 @@ import logging
 from textwrap import dedent
 import time
 import distutils.version as version
+import random
 import re
+import string
 import os
 
 from teuthology.orchestra import run
@@ -217,8 +219,10 @@ class TestClientRecovery(CephFSTestCase):
         # Capability release from stale session
         # =====================================
         if write:
-            cap_holder = self.mount_a.open_background()
+            content = ''.join(random.choices(string.ascii_uppercase + string.digits, k=16))
+            cap_holder = self.mount_a.open_background(content=content)
         else:
+            content = ''
             self.mount_a.run_shell(["touch", "background_file"])
             self.mount_a.umount_wait()
             self.mount_a.mount_wait()
@@ -229,7 +233,7 @@ class TestClientRecovery(CephFSTestCase):
 
         # Wait for the file to be visible from another client, indicating
         # that mount_a has completed its network ops
-        self.mount_b.wait_for_visible()
+        self.mount_b.wait_for_visible(size=len(content))
 
         # Simulate client death
         self.mount_a.suspend_netns()
@@ -260,11 +264,9 @@ class TestClientRecovery(CephFSTestCase):
                             "Capability handover took {0}, expected approx {1}".format(
                                 cap_waited, session_timeout
                             ))
-
-            self.mount_a._kill_background(cap_holder)
         finally:
-            # teardown() doesn't quite handle this case cleanly, so help it out
-            self.mount_a.resume_netns()
+            self.mount_a.resume_netns() # allow the mount to recover otherwise background proc is unkillable
+        self.mount_a._kill_background(cap_holder)
 
     def test_stale_read_caps(self):
         self._test_stale_caps(False)
@@ -315,9 +317,9 @@ class TestClientRecovery(CephFSTestCase):
                                 cap_waited, session_timeout / 2.0
                             ))
 
-            self.mount_a._kill_background(cap_holder)
         finally:
-            self.mount_a.resume_netns()
+            self.mount_a.resume_netns() # allow the mount to recover otherwise background proc is unkillable
+        self.mount_a._kill_background(cap_holder)
 
     def test_trim_caps(self):
         # Trim capability when reconnecting MDS
@@ -383,7 +385,6 @@ class TestClientRecovery(CephFSTestCase):
 
         self.mount_b.check_filelock(do_flock=flockable)
 
-        # Tear down the background process
         self.mount_a._kill_background(lock_holder)
 
     def test_filelock_eviction(self):
@@ -412,7 +413,6 @@ class TestClientRecovery(CephFSTestCase):
             # succeed
             self.wait_until_true(lambda: lock_taker.finished, timeout=10)
         finally:
-            # Tear down the background process
             self.mount_a._kill_background(lock_holder)
 
             # teardown() doesn't quite handle this case cleanly, so help it out
index d83187017e3ff63bafc694bb01a4f2133aeed83d..bfaa23453b0fa5f1c8dcaa08663f51a39d859758 100644 (file)
@@ -608,8 +608,9 @@ class TestDamage(CephFSTestCase):
         self.fs.flush()
         self.config_set("mds", "mds_inject_rename_corrupt_dentry_first", "1.0")
         time.sleep(5) # for conf to percolate
-        p = self.mount_a.run_shell_payload("timeout 60 mv a/b a/z", wait=False)
-        self.wait_until_true(lambda: "laggy_since" in self.fs.get_rank(), timeout=self.fs.beacon_timeout)
+        with self.assert_cluster_log("MDS abort because newly corrupt dentry"):
+            p = self.mount_a.run_shell_payload("timeout 60 mv a/b a/z", wait=False)
+            self.wait_until_true(lambda: "laggy_since" in self.fs.get_rank(), timeout=self.fs.beacon_timeout)
         self.config_rm("mds", "mds_inject_rename_corrupt_dentry_first")
         self.fs.rank_freeze(False, rank=0)
         self.delete_mds_coredump(rank0['name'])
@@ -642,9 +643,10 @@ class TestDamage(CephFSTestCase):
         rank0 = self.fs.get_rank()
         self.fs.rank_freeze(True, rank=0)
         # so now we want to trigger commit but this will crash, so:
-        c = ['--connect-timeout=60', 'tell', f"mds.{fscid}:0", "flush", "journal"]
-        p = self.ceph_cluster.mon_manager.run_cluster_cmd(args=c, wait=False, timeoutcmd=30)
-        self.wait_until_true(lambda: "laggy_since" in self.fs.get_rank(), timeout=self.fs.beacon_timeout)
+        with self.assert_cluster_log("MDS abort because newly corrupt dentry"):
+            c = ['--connect-timeout=60', 'tell', f"mds.{fscid}:0", "flush", "journal"]
+            p = self.ceph_cluster.mon_manager.run_cluster_cmd(args=c, wait=False, timeoutcmd=30)
+            self.wait_until_true(lambda: "laggy_since" in self.fs.get_rank(), timeout=self.fs.beacon_timeout)
         self.config_rm("mds", "mds_inject_journal_corrupt_dentry_first")
         self.fs.rank_freeze(False, rank=0)
         self.delete_mds_coredump(rank0['name'])
index 6149c6bd62614a894107a986d613c7edd43a7832..ddcc58cccc5076565084fd670a4c5cf8ff24cb7f 100644 (file)
@@ -14,9 +14,12 @@ class TestClusterAffinity(CephFSTestCase):
     CLIENTS_REQUIRED = 0
     MDSS_REQUIRED = 4
 
-    def _verify_join_fs(self, target, status=None):
+    def _verify_join_fs(self, target, status=None, fs=None):
+        fs_select = fs
+        if fs_select is None:
+            fs_select = self.fs
         if status is None:
-            status = self.fs.wait_for_daemons(timeout=30)
+            status = fs_select.wait_for_daemons(timeout=30)
             log.debug("%s", status)
         target = sorted(target, key=operator.itemgetter('name'))
         log.info("target = %s", target)
@@ -37,11 +40,14 @@ class TestClusterAffinity(CephFSTestCase):
                 return
         self.fail("no entity")
 
-    def _verify_init(self):
-        status = self.fs.status()
+    def _verify_init(self, fs=None):
+        fs_select = fs
+        if fs_select is None:
+            fs_select = self.fs
+        status = fs_select.status()
         log.info("status = {0}".format(status))
         target = [{'join_fscid': -1, 'name': info['name']} for info in status.get_all()]
-        self._verify_join_fs(target, status=status)
+        self._verify_join_fs(target, status=status, fs=fs_select)
         return (status, target)
 
     def _reach_target(self, target):
@@ -76,7 +82,8 @@ class TestClusterAffinity(CephFSTestCase):
         self._change_target_state(target, names[0], {'join_fscid': self.fs.id})
         self._change_target_state(target, names[1], {'join_fscid': self.fs.id})
         self._reach_target(target)
-        status = self.fs.status()
+        time.sleep(5) # MDSMonitor tick
+        status = self.fs.wait_for_daemons()
         active = self.fs.get_active_names(status=status)[0]
         self.assertIn(active, names)
         self.config_rm('mds.'+active, 'mds_join_fs')
@@ -106,12 +113,21 @@ class TestClusterAffinity(CephFSTestCase):
         fs2 = self.mds_cluster.newfs(name="cephfs2")
         status, target = self._verify_init()
         active = self.fs.get_active_names(status=status)[0]
+        status2, _ = self._verify_init(fs=fs2)
+        active2 = fs2.get_active_names(status=status2)[0]
         standbys = [info['name'] for info in status.get_standbys()]
         victim = standbys.pop()
         # Set a bogus fs on the others
         for mds in standbys:
             self.config_set('mds.'+mds, 'mds_join_fs', 'cephfs2')
             self._change_target_state(target, mds, {'join_fscid': fs2.id})
+        # The active MDS for cephfs2 will be replaced by the MDS for which
+        # file system affinity has been set. Also, set the affinity for
+        # the earlier active MDS so that it is not chosen by the monitors
+        # as an active MDS for the existing file system.
+        log.info(f'assigning affinity to cephfs2 for active mds (mds.{active2})')
+        self.config_set(f'mds.{active2}', 'mds_join_fs', 'cephfs2')
+        self._change_target_state(target, active2, {'join_fscid': fs2.id})
         self.fs.rank_fail()
         self._change_target_state(target, victim, {'state': 'up:active'})
         self._reach_target(target)
index a5f8cdac75c3db5a632d9b47b546cdcd419e5169..c1a940e3f7598cdf8aa1cecbef806f7f179b8228 100644 (file)
@@ -1261,3 +1261,38 @@ class TestMirroring(CephFSTestCase):
         self.verify_snapshot('d2', 'snap0')
 
         self.disable_mirroring(self.primary_fs_name, self.primary_fs_id)
+
+    def test_local_and_remote_dir_root_mode(self):
+        log.debug('reconfigure client auth caps')
+        cid = self.mount_b.client_id
+        data_pool = self.backup_fs.get_data_pool_name()
+        self.mds_cluster.mon_manager.raw_cluster_cmd_result(
+            'auth', 'caps', f"client.{cid}",
+            'mds', 'allow rw',
+            'mon', 'allow r',
+            'osd', f"allow rw pool={data_pool}, allow rw pool={data_pool}")
+
+        log.debug(f'mounting filesystem {self.secondary_fs_name}')
+        self.mount_b.umount_wait()
+        self.mount_b.mount_wait(cephfs_name=self.secondary_fs_name)
+
+        self.mount_a.run_shell(["mkdir", "l1"])
+        self.mount_a.run_shell(["mkdir", "l1/.snap/snap0"])
+        self.mount_a.run_shell(["chmod", "go-rwx", "l1"])
+
+        self.enable_mirroring(self.primary_fs_name, self.primary_fs_id)
+        self.add_directory(self.primary_fs_name, self.primary_fs_id, '/l1')
+        self.peer_add(self.primary_fs_name, self.primary_fs_id, "client.mirror_remote@ceph", self.secondary_fs_name)
+
+        time.sleep(60)
+        self.check_peer_status(self.primary_fs_name, self.primary_fs_id,
+                               "client.mirror_remote@ceph", '/l1', 'snap0', 1)
+
+        mode_local = self.mount_a.run_shell(["stat", "--format=%A", "l1"]).stdout.getvalue().strip()
+        mode_remote = self.mount_b.run_shell(["stat", "--format=%A", "l1"]).stdout.getvalue().strip()
+
+        self.assertTrue(mode_local == mode_remote, f"mode mismatch, local mode: {mode_local}, remote mode: {mode_remote}")
+
+        self.disable_mirroring(self.primary_fs_name, self.primary_fs_id)
+        self.mount_a.run_shell(["rmdir", "l1/.snap/snap0"])
+        self.mount_a.run_shell(["rmdir", "l1"])
index 60e7c0514bdf6ec0178652865c41e170de47740a..8b48dee69fd078915f459a549bd82920f872f654 100644 (file)
@@ -483,6 +483,29 @@ class TestMisc(CephFSTestCase):
                 return
         self.assertTrue(False, "Failed to dump in-memory logs during missed internal heartbeat")
 
+    def _session_client_ls(self, cmd):
+        mount_a_client_id = self.mount_a.get_global_id()
+        info = self.fs.rank_asok(cmd)
+        mount_a_mountpoint = self.mount_a.mountpoint
+        mount_b_mountpoint = self.mount_b.mountpoint
+        self.assertIsNotNone(info)
+        for i in range(0, len(info)):
+            self.assertIn(info[i]["client_metadata"]["mount_point"], 
+                             [mount_a_mountpoint, mount_b_mountpoint])        
+        info = self.fs.rank_asok(cmd + [f"id={mount_a_client_id}"])
+        self.assertEqual(len(info), 1)
+        self.assertEqual(info[0]["id"], mount_a_client_id)
+        self.assertEqual(info[0]["client_metadata"]["mount_point"], mount_a_mountpoint)
+        info = self.fs.rank_asok(cmd + ['--cap_dump'])
+        for i in range(0, len(info)):
+            self.assertIn("caps", info[i])
+
+    def test_session_ls(self):
+        self._session_client_ls(['session', 'ls'])
+
+    def test_client_ls(self):
+        self._session_client_ls(['client', 'ls'])
+        
 class TestCacheDrop(CephFSTestCase):
     CLIENTS_REQUIRED = 1
 
index 0e84f7ed2645cfdacc8b89f05359da68a1497595..e41b997a6eebc0a693eca7c30bfd0f49d7ffcc24 100644 (file)
@@ -296,6 +296,36 @@ class TestScrubChecks(CephFSTestCase):
         command = "flush_path /"
         self.asok_command(mds_rank, command, success_validator)
 
+    def scrub_with_stray_evaluation(self, fs, mnt, path, flag, files=2000,
+                                    _hard_links=3):
+        fs.set_allow_new_snaps(True)
+
+        test_dir = "stray_eval_dir"
+        mnt.run_shell(["mkdir", test_dir])
+        client_path = os.path.join(mnt.mountpoint, test_dir)
+        mnt.create_n_files(fs_path=f"{test_dir}/file", count=files,
+                           hard_links=_hard_links)
+        mnt.run_shell(["mkdir", f"{client_path}/.snap/snap1-{test_dir}"])
+        mnt.run_shell(f"find {client_path}/ -type f -delete")
+        mnt.run_shell(["rmdir", f"{client_path}/.snap/snap1-{test_dir}"])
+        perf_dump = fs.rank_tell(["perf", "dump"], 0)
+        self.assertNotEqual(perf_dump.get('mds_cache').get('num_strays'),
+                            0, "mdcache.num_strays is zero")
+
+        log.info(
+            f"num of strays: {perf_dump.get('mds_cache').get('num_strays')}")
+
+        out_json = fs.run_scrub(["start", path, flag])
+        self.assertNotEqual(out_json, None)
+        self.assertEqual(out_json["return_code"], 0)
+
+        self.assertEqual(
+            fs.wait_until_scrub_complete(tag=out_json["scrub_tag"]), True)
+
+        perf_dump = fs.rank_tell(["perf", "dump"], 0)
+        self.assertEqual(int(perf_dump.get('mds_cache').get('num_strays')),
+                         0, "mdcache.num_strays is non-zero")
+
     def test_scrub_repair(self):
         mds_rank = 0
         test_dir = "scrub_repair_path"
@@ -332,6 +362,20 @@ class TestScrubChecks(CephFSTestCase):
         # fragstat should be fixed
         self.mount_a.run_shell(["rmdir", test_dir])
 
+    def test_stray_evaluation_with_scrub(self):
+        """
+        test that scrub can iterate over ~mdsdir and evaluate strays
+        """
+        self.scrub_with_stray_evaluation(self.fs, self.mount_a, "~mdsdir",
+                                         "recursive")
+
+    def test_flag_scrub_mdsdir(self):
+        """
+        test flag scrub_mdsdir
+        """
+        self.scrub_with_stray_evaluation(self.fs, self.mount_a, "/",
+                                         "recursive,scrub_mdsdir")
+
     @staticmethod
     def json_validator(json_out, rc, element, expected_value):
         if rc != 0:
index 736f49fe2c31426f04c3fec8792fb354c05c5b63..0264cac3236b2c372112916d8dd9f37713216956 100644 (file)
@@ -39,8 +39,9 @@ class TestSnapSchedulesHelper(CephFSTestCase):
         return self.mgr_cluster.mon_manager.raw_cluster_cmd("fs", *args)
 
     def fs_snap_schedule_cmd(self, *args, **kwargs):
-        fs = kwargs.pop('fs', self.volname)
-        args += ('--fs', fs)
+        if 'fs' in kwargs:
+            fs = kwargs.pop('fs')
+            args += ('--fs', fs)
         if 'format' in kwargs:
             fmt = kwargs.pop('format')
             args += ('--format', fmt)
@@ -372,6 +373,9 @@ class TestSnapSchedules(TestSnapSchedulesHelper):
         snap_stats['fs_count'] = fs_count
         snap_stats['db_count'] = db_count
 
+        log.debug(f'fs_count: {fs_count}')
+        log.debug(f'db_count: {db_count}')
+
         return snap_stats
 
     def verify_snap_stats(self, dir_path):
@@ -477,6 +481,42 @@ class TestSnapSchedules(TestSnapSchedulesHelper):
         # remove snapshot schedule
         self.fs_snap_schedule_cmd('remove', path="/bad-path")
 
+    def test_snap_schedule_for_number_of_snaps_retention(self):
+        """
+        Test that number of snaps retained are as per user spec.
+        """
+        total_snaps = 55
+        test_dir = '/' + TestSnapSchedules.TEST_DIRECTORY
+
+        self.mount_a.run_shell(['mkdir', '-p', test_dir[1:]])
+
+        # set a schedule on the dir
+        self.fs_snap_schedule_cmd('add', path=test_dir, snap_schedule='1M')
+        self.fs_snap_schedule_cmd('retention', 'add', path=test_dir,
+                                  retention_spec_or_period=f'{total_snaps}n')
+        exec_time = time.time()
+
+        timo_1, snap_sfx = self.calc_wait_time_and_snap_name(exec_time, '1M')
+
+        # verify snapshot schedule
+        self.verify_schedule(test_dir, ['1M'])
+
+        # we wait for total_snaps snaps to be taken
+        wait_time = timo_1 + total_snaps * 60 + 15
+        time.sleep(wait_time)
+
+        snap_stats = self.get_snap_stats(test_dir)
+        self.assertTrue(snap_stats['fs_count'] == total_snaps)
+        self.assertTrue(snap_stats['db_count'] >= total_snaps)
+
+        # remove snapshot schedule
+        self.fs_snap_schedule_cmd('remove', path=test_dir)
+
+        # remove all scheduled snapshots
+        self.remove_snapshots(test_dir[1:])
+
+        self.mount_a.run_shell(['rmdir', test_dir[1:]])
+
 
 class TestSnapSchedulesSnapdir(TestSnapSchedulesHelper):
     def remove_snapshots(self, dir_path, sdn):
@@ -523,3 +563,45 @@ class TestSnapSchedulesSnapdir(TestSnapSchedulesHelper):
         self.remove_snapshots(TestSnapSchedulesSnapdir.TEST_DIRECTORY, sdn)
 
         self.mount_a.run_shell(['rmdir', TestSnapSchedulesSnapdir.TEST_DIRECTORY])
+
+
+"""
+Note that the class TestSnapSchedulesMandatoryFSArgument tests snap-schedule
+commands only for multi-fs scenario. Commands for a single default fs should
+pass for tests defined above or elsewhere.
+"""
+
+
+class TestSnapSchedulesMandatoryFSArgument(TestSnapSchedulesHelper):
+    REQUIRE_BACKUP_FILESYSTEM = True
+    TEST_DIRECTORY = 'mandatory_fs_argument_test_dir'
+
+    def test_snap_schedule_without_fs_argument(self):
+        """Test command fails without --fs argument in presence of multiple fs"""
+        test_path = TestSnapSchedulesMandatoryFSArgument.TEST_DIRECTORY
+        self.mount_a.run_shell(['mkdir', '-p', test_path])
+
+        # try setting a schedule on the dir; this should fail now that we are
+        # working with mutliple fs; we need the --fs argument if there are more
+        # than one fs hosted by the same cluster
+        with self.assertRaises(CommandFailedError):
+            self.fs_snap_schedule_cmd('add', test_path, snap_schedule='1M')
+
+        self.mount_a.run_shell(['rmdir', test_path])
+
+    def test_snap_schedule_for_non_default_fs(self):
+        """Test command succes with --fs argument for non-default fs"""
+        test_path = TestSnapSchedulesMandatoryFSArgument.TEST_DIRECTORY
+        self.mount_a.run_shell(['mkdir', '-p', test_path])
+
+        # use the backup fs as the second fs; all these commands must pass
+        self.fs_snap_schedule_cmd('add', test_path, snap_schedule='1M', fs='backup_fs')
+        self.fs_snap_schedule_cmd('activate', test_path, snap_schedule='1M', fs='backup_fs')
+        self.fs_snap_schedule_cmd('retention', 'add', test_path, retention_spec_or_period='1M', fs='backup_fs')
+        self.fs_snap_schedule_cmd('list', test_path, fs='backup_fs', format='json')
+        self.fs_snap_schedule_cmd('status', test_path, fs='backup_fs', format='json')
+        self.fs_snap_schedule_cmd('retention', 'remove', test_path, retention_spec_or_period='1M', fs='backup_fs')
+        self.fs_snap_schedule_cmd('deactivate', test_path, snap_schedule='1M', fs='backup_fs')
+        self.fs_snap_schedule_cmd('remove', test_path, snap_schedule='1M', fs='backup_fs')
+
+        self.mount_a.run_shell(['rmdir', test_path])
index 02db70e192ff9a25075678d0d360317b33e290ee..2ecfeb32773c863cf7f05ae11d038457430b5ae4 100644 (file)
@@ -442,9 +442,21 @@ class TestVolumes(TestVolumesHelper):
 
         if not (volname in ([volume['name'] for volume in volumels])):
             raise RuntimeError("Error creating volume '{0}'".format(volname))
-        else:
-            # clean up
-            self._fs_cmd("volume", "rm", volname, "--yes-i-really-mean-it")
+
+        # check that the pools were created with the correct config
+        pool_details = json.loads(self._raw_cmd("osd", "pool", "ls", "detail", "--format=json"))
+        pool_flags = {}
+        for pool in pool_details:
+            pool_flags[pool["pool_id"]] = pool["flags_names"].split(",")
+
+        volume_details = json.loads(self._fs_cmd("get", volname, "--format=json"))
+        for data_pool_id in volume_details['mdsmap']['data_pools']:
+            self.assertIn("bulk", pool_flags[data_pool_id])
+        meta_pool_id = volume_details['mdsmap']['metadata_pool']
+        self.assertNotIn("bulk", pool_flags[meta_pool_id])
+
+        # clean up
+        self._fs_cmd("volume", "rm", volname, "--yes-i-really-mean-it")
 
     def test_volume_ls(self):
         """
@@ -649,6 +661,24 @@ class TestVolumes(TestVolumesHelper):
         self.assertEqual(vol_info["used_size"], 0,
                          "Size should be zero when volumes directory is empty")
 
+    def test_volume_info_pending_subvol_deletions(self):
+        """
+        Tests the pending_subvolume_deletions in 'fs volume info' command
+        """
+        subvolname = self._generate_random_subvolume_name()
+        # create subvolume
+        self._fs_cmd("subvolume", "create", self.volname, subvolname, "--mode=777")
+        # create 3K zero byte files
+        self._do_subvolume_io(subvolname, number_of_files=3000, file_size=0)
+        # Delete the subvolume
+        self._fs_cmd("subvolume", "rm", self.volname, subvolname)
+        # get volume metadata
+        vol_info = json.loads(self._get_volume_info(self.volname))
+        self.assertNotEqual(vol_info['pending_subvolume_deletions'], 0,
+                            "pending_subvolume_deletions should be 1")
+        # verify trash dir is clean
+        self._wait_for_trash_empty()
+
     def test_volume_info_without_subvolumegroup(self):
         """
         Tests the 'fs volume info' command without subvolume group
index bb7890001cb3441f53a39ba42b5a3943b4c7052a..cbb3443059e2d7e4a228db834dbf7c757b8a153b 100644 (file)
@@ -184,9 +184,11 @@ class XFSTestsDev(CephFSTestCase):
             gawk gcc indent libtool lvm2 make psmisc quota sed \
             xfsdump xfsprogs \
             libacl-devel libattr-devel libaio-devel libuuid-devel \
-            xfsprogs-devel btrfs-progs-devel python2 sqlite""".split()
+            xfsprogs-devel btrfs-progs-devel python3 sqlite""".split()
 
             if self.install_xfsprogs:
+                if distro == 'centosstream' and major_ver_num == 8:
+                    deps += ['--enablerepo=powertools']
                 deps += ['inih-devel', 'userspace-rcu-devel', 'libblkid-devel',
                          'gettext', 'libedit-devel', 'libattr-devel',
                          'device-mapper-devel', 'libicu-devel']
index 10fff79ffadd469a43dd4779dc316296b6f41458..0699be48c48ceeda8d18d62948fc3f6a72a332c1 100644 (file)
@@ -285,6 +285,7 @@ class PoolTest(DashboardTestCase):
                     'pool': 'dashboard_pool_quota1',
                     'pg_num': '32',
                     'pool_type': 'replicated',
+                    'application_metadata': ['rbd'],
                 },
                 'pool_quotas_to_check': {
                     'quota_max_objects': 0,
@@ -296,6 +297,7 @@ class PoolTest(DashboardTestCase):
                     'pool': 'dashboard_pool_quota2',
                     'pg_num': '32',
                     'pool_type': 'replicated',
+                    'application_metadata': ['rbd'],
                     'quota_max_objects': 1024,
                     'quota_max_bytes': 1000,
                 },
index 5fe5e0759856cb269f309e50a4f271a2b5a4d8cb..94a230c8d13b9956c5af8e6a18cfadeb2ad98cdd 100644 (file)
@@ -39,6 +39,14 @@ class MgrCluster(CephCluster):
         return json.loads(
             self.mon_manager.raw_cluster_cmd("mgr", "dump", "--format=json-pretty"))
 
+    def get_registered_clients(self, name, mgr_map = None):
+        if mgr_map is None:
+            mgr_map = self.get_mgr_map()
+        for c in mgr_map['active_clients']:
+            if c['name'] == name:
+                return c['addrvec']
+        return None
+
     def get_active_id(self):
         return self.get_mgr_map()["active_name"]
 
index a4e840883f90d2a9755f1443a0ce6de05a4da04d..bfff11262c45d8d7ee794070593a42d922796bdc 100644 (file)
@@ -146,3 +146,37 @@ class TestFailover(MgrTestCase):
             timeout=60
         )
         self.assertEqual(self.mgr_cluster.get_active_id(), original_active)
+
+class TestLibCephSQLiteFailover(MgrTestCase):
+    MGRS_REQUIRED = 1
+
+    def setUp(self):
+        super(TestLibCephSQLiteFailover, self).setUp()
+        self.setup_mgrs()
+
+    def get_libcephsqlite(self):
+        mgr_map = self.mgr_cluster.get_mgr_map()
+        addresses = self.mgr_cluster.get_registered_clients('libcephsqlite', mgr_map=mgr_map)
+        self.assertEqual(len(addresses), 1)
+        return addresses[0]
+
+    def test_maybe_reonnect(self):
+        """
+        That the devicehealth module can recover after losing its libcephsqlite lock.
+        """
+
+        # make sure the database is populated and loaded by the module
+        self.mgr_cluster.mon_manager.ceph("device scrape-health-metrics")
+
+        oldaddr = self.get_libcephsqlite()
+        self.mgr_cluster.mon_manager.ceph(f"osd blocklist add {oldaddr['addr']}/{oldaddr['nonce']}")
+
+        def test():
+            self.mgr_cluster.mon_manager.ceph("device scrape-health-metrics")
+            newaddr = self.get_libcephsqlite()
+            return oldaddr != newaddr
+
+        self.wait_until_true(
+            test,
+            timeout=30
+        )
index 8caedfd8b22fcaf7bfd29870383751c130c18ff1..6a5a08f14b09304339202454e71e258cc4696844 100644 (file)
   fun:EVP_DecryptFinal_ex
   ...
 }
+{
+   tracker #62141 : valgrind: UninitCondition under __run_exit_handlers
+   Memcheck:Cond
+   fun:free
+   fun:free_res
+   fun:__libc_freeres
+   fun:_vgnU_freeres
+   fun:__run_exit_handlers
+   fun:exit
+   fun:(below main)
+}
+
index cca9cbc7bbc6cd2a078a99d15dd979a245980459..7d06a3326083d309b1738a5c8e140be80303466d 100755 (executable)
@@ -29,9 +29,16 @@ CEPHADM_SAMPLES_DIR=${CEPHADM_SRC_DIR}/samples
 
 [ -z "$SUDO" ] && SUDO=sudo
 
+# If cephadm is already installed on the system, use that one, avoid building
+# # one if we can.
+if [ -z "$CEPHADM" ] && command -v cephadm >/dev/null ; then
+    CEPHADM="$(command -v cephadm)"
+fi
+
 if [ -z "$CEPHADM" ]; then
     CEPHADM=`mktemp -p $TMPDIR tmp.cephadm.XXXXXX`
     ${CEPHADM_SRC_DIR}/build.sh "$CEPHADM"
+    NO_BUILD_INFO=1
 fi
 
 # at this point, we need $CEPHADM set
@@ -162,17 +169,20 @@ $SUDO $CEPHADM check-host
 ## run a gather-facts (output to stdout)
 $SUDO $CEPHADM gather-facts
 
-## version + --image
-$SUDO CEPHADM_IMAGE=$IMAGE_PACIFIC $CEPHADM_BIN version
-$SUDO CEPHADM_IMAGE=$IMAGE_PACIFIC $CEPHADM_BIN version \
-    | grep 'ceph version 16'
-#$SUDO CEPHADM_IMAGE=$IMAGE_OCTOPUS $CEPHADM_BIN version
-#$SUDO CEPHADM_IMAGE=$IMAGE_OCTOPUS $CEPHADM_BIN version \
-#    | grep 'ceph version 15'
-$SUDO $CEPHADM_BIN --image $IMAGE_MAIN version | grep 'ceph version'
+## NOTE: cephadm version is, as of around May 2023, no longer basing the
+## output for `cephadm version` on the version of the containers. The version
+## reported is that of the "binary" and is determined during the ceph build.
+## `cephadm version` should NOT require sudo/root.
+$CEPHADM_BIN version
+$CEPHADM_BIN version | grep 'cephadm version'
+# Typically cmake should be running the cephadm build script with CLI arguments
+# that embed version info into the "binary". If not using a cephadm build via
+# cmake you can set `NO_BUILD_INFO` to skip this check.
+if [ -z "$NO_BUILD_INFO" ]; then
+    $CEPHADM_BIN version | grep -v 'UNSET'
+    $CEPHADM_BIN version | grep -v 'UNKNOWN'
+fi
 
-# try force docker; this won't work if docker isn't installed
-systemctl status docker > /dev/null && ( $CEPHADM --docker version | grep 'ceph version' ) || echo "docker not installed"
 
 ## test shell before bootstrap, when crash dir isn't (yet) present on this host
 $CEPHADM shell --fsid $FSID -- ceph -v | grep 'ceph version'
@@ -250,10 +260,13 @@ $CEPHADM ls | jq '.[]' | jq 'select(.name == "mon.a").version' | grep -q \\.
 # add mon.b
 cp $CONFIG $MONCONFIG
 echo "public addrv = [v2:$IP:3301,v1:$IP:6790]" >> $MONCONFIG
-$CEPHADM deploy --name mon.b \
-      --fsid $FSID \
-      --keyring /var/lib/ceph/$FSID/mon.a/keyring \
-      --config $MONCONFIG
+jq --null-input \
+    --arg fsid $FSID \
+    --arg name mon.b \
+    --arg keyring /var/lib/ceph/$FSID/mon.a/keyring \
+    --arg config "$MONCONFIG" \
+    '{"fsid": $fsid, "name": $name, "params":{"keyring": $keyring, "config": $config}}' | \
+    $CEPHADM _orch deploy
 for u in ceph-$FSID@mon.b; do
     systemctl is-enabled $u
     systemctl is-active $u
@@ -268,10 +281,13 @@ $CEPHADM shell --fsid $FSID --config $CONFIG --keyring $KEYRING -- \
       mon 'allow profile mgr' \
       osd 'allow *' \
       mds 'allow *' > $TMPDIR/keyring.mgr.y
-$CEPHADM deploy --name mgr.y \
-      --fsid $FSID \
-      --keyring $TMPDIR/keyring.mgr.y \
-      --config $CONFIG
+jq --null-input \
+    --arg fsid $FSID \
+    --arg name mgr.y \
+    --arg keyring $TMPDIR/keyring.mgr.y \
+    --arg config "$CONFIG" \
+    '{"fsid": $fsid, "name": $name, "params":{"keyring": $keyring, "config": $config}}' | \
+    $CEPHADM _orch deploy
 for u in ceph-$FSID@mgr.y; do
     systemctl is-enabled $u
     systemctl is-active $u
@@ -321,30 +337,42 @@ for id in `seq 0 $((--OSD_TO_CREATE))`; do
     osd_fsid=$($SUDO cat $TMPDIR/osd.map | jq -cr '.. | ."ceph.osd_fsid"? | select(.)')
 
     # deploy the osd
-    $CEPHADM deploy --name osd.$osd_id \
-          --fsid $FSID \
-          --keyring $TMPDIR/keyring.bootstrap.osd \
-          --config $CONFIG \
-          --osd-fsid $osd_fsid
+    jq --null-input \
+        --arg fsid $FSID \
+        --arg name osd.$osd_id \
+        --arg keyring $TMPDIR/keyring.bootstrap.osd \
+        --arg config "$CONFIG" \
+        --arg osd_fsid $osd_fsid \
+        '{"fsid": $fsid, "name": $name, "params":{"keyring": $keyring, "config": $config, "osd_fsid": $osd_fsid}}' | \
+        $CEPHADM _orch deploy
 done
 
 # add node-exporter
-${CEPHADM//--image $IMAGE_DEFAULT/} deploy \
-    --name node-exporter.a --fsid $FSID
+jq --null-input \
+    --arg fsid $FSID \
+    --arg name node-exporter.a \
+    '{"fsid": $fsid, "name": $name}' | \
+    ${CEPHADM//--image $IMAGE_DEFAULT/} _orch deploy
 cond="curl 'http://localhost:9100' | grep -q 'Node Exporter'"
 is_available "node-exporter" "$cond" 10
 
 # add prometheus
-cat ${CEPHADM_SAMPLES_DIR}/prometheus.json | \
-        ${CEPHADM//--image $IMAGE_DEFAULT/} deploy \
-           --name prometheus.a --fsid $FSID --config-json -
+jq --null-input \
+    --arg fsid $FSID \
+    --arg name prometheus.a \
+    --argjson config_blobs "$(cat ${CEPHADM_SAMPLES_DIR}/prometheus.json)" \
+    '{"fsid": $fsid, "name": $name, "config_blobs": $config_blobs}' | \
+    ${CEPHADM//--image $IMAGE_DEFAULT/} _orch deploy
 cond="curl 'localhost:9095/api/v1/query?query=up'"
 is_available "prometheus" "$cond" 10
 
 # add grafana
-cat ${CEPHADM_SAMPLES_DIR}/grafana.json | \
-        ${CEPHADM//--image $IMAGE_DEFAULT/} deploy \
-            --name grafana.a --fsid $FSID --config-json -
+jq --null-input \
+    --arg fsid $FSID \
+    --arg name grafana.a \
+    --argjson config_blobs "$(cat ${CEPHADM_SAMPLES_DIR}/grafana.json)" \
+    '{"fsid": $fsid, "name": $name, "config_blobs": $config_blobs}' | \
+    ${CEPHADM//--image $IMAGE_DEFAULT/} _orch deploy
 cond="curl --insecure 'https://localhost:3000' | grep -q 'grafana'"
 is_available "grafana" "$cond" 50
 
@@ -357,11 +385,14 @@ $CEPHADM shell --fsid $FSID --config $CONFIG --keyring $KEYRING -- \
         rados --pool nfs-ganesha --namespace nfs-ns create conf-nfs.a
 $CEPHADM shell --fsid $FSID --config $CONFIG --keyring $KEYRING -- \
         ceph orch pause
-$CEPHADM deploy --name nfs.a \
-      --fsid $FSID \
-      --keyring $KEYRING \
-      --config $CONFIG \
-      --config-json ${CEPHADM_SAMPLES_DIR}/nfs.json
+jq --null-input \
+    --arg fsid $FSID \
+    --arg name nfs.a \
+    --arg keyring "$KEYRING" \
+    --arg config "$CONFIG" \
+    --argjson config_blobs "$(cat ${CEPHADM_SAMPLES_DIR}/nfs.json)" \
+    '{"fsid": $fsid, "name": $name, "params": {"keyring": $keyring, "config": $config}, "config_blobs": $config_blobs}' | \
+    ${CEPHADM} _orch deploy
 cond="$SUDO ss -tlnp '( sport = :nfs )' | grep 'ganesha.nfsd'"
 is_available "nfs" "$cond" 10
 $CEPHADM shell --fsid $FSID --config $CONFIG --keyring $KEYRING -- \
@@ -369,15 +400,17 @@ $CEPHADM shell --fsid $FSID --config $CONFIG --keyring $KEYRING -- \
 
 # add alertmanager via custom container
 alertmanager_image=$(cat ${CEPHADM_SAMPLES_DIR}/custom_container.json | jq -r '.image')
-tcp_ports=$(cat ${CEPHADM_SAMPLES_DIR}/custom_container.json | jq -r '.ports | map_values(.|tostring) | join(" ")')
-cat ${CEPHADM_SAMPLES_DIR}/custom_container.json | \
-      ${CEPHADM//--image $IMAGE_DEFAULT/} \
-      --image $alertmanager_image \
-      deploy \
-      --tcp-ports "$tcp_ports" \
-      --name container.alertmanager.a \
-      --fsid $FSID \
-      --config-json -
+tcp_ports=$(jq .ports ${CEPHADM_SAMPLES_DIR}/custom_container.json)
+jq --null-input \
+    --arg fsid $FSID \
+    --arg name container.alertmanager.a \
+    --arg keyring $TMPDIR/keyring.bootstrap.osd \
+    --arg config "$CONFIG" \
+    --arg image "$alertmanager_image" \
+    --argjson tcp_ports "${tcp_ports}" \
+    --argjson config_blobs "$(cat ${CEPHADM_SAMPLES_DIR}/custom_container.json)" \
+    '{"fsid": $fsid, "name": $name, "image": $image, "params": {"keyring": $keyring, "config": $config, "tcp_ports": $tcp_ports}, "config_blobs": $config_blobs}' | \
+    ${CEPHADM//--image $IMAGE_DEFAULT/} _orch deploy
 cond="$CEPHADM enter --fsid $FSID --name container.alertmanager.a -- test -f \
       /etc/alertmanager/alertmanager.yml"
 is_available "alertmanager.yml" "$cond" 10
index ace8bfe6d5c1a2f4e7ebfe2ac31c288b61df3b56..aecfd56a9f53aa1edbdc80514721a794e9472d5b 100755 (executable)
@@ -1508,7 +1508,7 @@ function test_mon_osd()
   done
 
   for f in noup nodown noin noout noscrub nodeep-scrub nobackfill \
-         norebalance norecover notieragent
+         norebalance norecover notieragent noautoscale
   do
     ceph osd set $f
     ceph osd unset $f
index bc5003f4c4e0c0988cee3dc6119bd0c11be1e8d2..4cf71a31cf4c9aefa98c4d068b48d7f2338b729e 100755 (executable)
@@ -137,10 +137,20 @@ ceph osd pool set bulk0 target_size_bytes 1000
 ceph osd pool set meta0 target_size_ratio 1
 wait_for 60 "ceph health detail | grep POOL_HAS_TARGET_SIZE_BYTES_AND_RATIO"
 
+# test autoscale warn
+
+ceph osd pool create warn0 1 --autoscale-mode=warn
+wait_for 120 "ceph health detail | grep POOL_TOO_FEW_PGS"
+
+ceph osd pool create warn1 256 --autoscale-mode=warn
+wait_for 120 "ceph health detail | grep POOL_TOO_MANY_PGS"
+
 ceph osd pool rm meta0 meta0 --yes-i-really-really-mean-it
 ceph osd pool rm bulk0 bulk0 --yes-i-really-really-mean-it
 ceph osd pool rm bulk1 bulk1 --yes-i-really-really-mean-it
 ceph osd pool rm bulk2 bulk2 --yes-i-really-really-mean-it
+ceph osd pool rm warn0 warn0 --yes-i-really-really-mean-it
+ceph osd pool rm warn1 warn1 --yes-i-really-really-mean-it
 
 echo OK
 
index ca86cdf22d3872ef8049b5c4ecf2e82ade5f9098..e1a45a4d87a5e67047e7127a09edead6a5529cd6 100755 (executable)
@@ -23,7 +23,7 @@ sleep 2
 
 RESULT1=$(ceph osd pool autoscale-status | grep -oe 'off' | wc -l)
 
-# number of Pools with AUTOSCALE `off` should equal to 2
+# number of Pools with AUTOSCALE `off` should equal to $NUM_POOLS
 
 test "$RESULT1" -eq "$NUM_POOLS"
 
@@ -49,7 +49,7 @@ RESULT2=$(ceph osd pool autoscale-status | grep -oe 'on' | wc -l)
 
 # number of Pools with AUTOSCALE `on` should equal to 3
 
-test "$RESULT2" -eq "$NUM_POOLS"
+test "$RESULT2" -eq "$[NUM_POOLS-1]"
 
 ceph osd pool set noautoscale
 
@@ -74,6 +74,27 @@ RESULT3=$(ceph osd pool autoscale-status | grep -oe 'off' | wc -l)
 
 test "$RESULT3" -eq "$NUM_POOLS"
 
+# Now we test if we retain individual pool state of autoscale mode
+# when we set and unset the noautoscale flag.
+
+ceph osd pool unset noautoscale
+
+ceph osd pool set pool_a pg_autoscale_mode on
+
+ceph osd pool set pool_b pg_autoscale_mode warn
+
+ceph osd pool set noautoscale
+
+ceph osd pool unset noautoscale
+
+RESULT4=$(ceph osd pool autoscale-status | grep pool_a | grep -o -m 1 'on\|off\|warn')
+RESULT5=$(ceph osd pool autoscale-status | grep pool_b | grep -o -m 1 'on\|off\|warn')
+RESULT6=$(ceph osd pool autoscale-status | grep pool_c | grep -o -m 1 'on\|off\|warn')
+
+test "$RESULT4" == 'on'
+test "$RESULT5" == 'warn'
+test "$RESULT6" == 'off'
+
 ceph osd pool rm pool_a pool_a  --yes-i-really-really-mean-it
 
 ceph osd pool rm pool_b pool_b  --yes-i-really-really-mean-it
diff --git a/ceph/qa/workunits/rbd/krbd_watch_errors.sh b/ceph/qa/workunits/rbd/krbd_watch_errors.sh
new file mode 100755 (executable)
index 0000000..f650d2a
--- /dev/null
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+
+set -ex
+set -o pipefail
+
+function refresh_loop() {
+    local dev_id="$1"
+
+    set +x
+
+    local i
+    for ((i = 1; ; i++)); do
+        echo 1 | sudo tee "${SYSFS_DIR}/${dev_id}/refresh" > /dev/null
+        if ((i % 100 == 0)); then
+            echo "Refreshed ${i} times"
+        fi
+    done
+}
+
+readonly SYSFS_DIR="/sys/bus/rbd/devices"
+readonly IMAGE_NAME="watch-errors-test"
+
+rbd create -s 1G --image-feature exclusive-lock "${IMAGE_NAME}"
+
+# induce a watch error every 30 seconds
+dev="$(sudo rbd device map -o osdkeepalive=60 "${IMAGE_NAME}")"
+dev_id="${dev#/dev/rbd}"
+
+# constantly refresh, not just on watch errors
+refresh_loop "${dev_id}" &
+refresh_pid=$!
+
+sudo dmesg -C
+
+# test that none of the above triggers a deadlock with a workload
+fio --name test --filename="${dev}" --ioengine=libaio --direct=1 \
+    --rw=randwrite --norandommap --randrepeat=0 --bs=512 --iodepth=128 \
+    --time_based --runtime=1h --eta=never
+
+num_errors="$(dmesg | grep -c "rbd${dev_id}: encountered watch error")"
+echo "Recorded ${num_errors} watch errors"
+
+kill "${refresh_pid}"
+wait
+
+sudo rbd device unmap "${dev}"
+
+if ((num_errors < 60)); then
+    echo "Too few watch errors"
+    exit 1
+fi
+
+echo OK
index 122df3d6f35a52a47afecbc2b5d36281cfc1d6ff..bc89e9be5a185f77ca810988ef3da10887848be9 100755 (executable)
@@ -472,6 +472,16 @@ DEV=
 rbd feature disable ${POOL}/${IMAGE} journaling
 rbd config image rm ${POOL}/${IMAGE} rbd_discard_granularity_bytes
 
+# test that disabling a feature so that the op is proxied to rbd-nbd
+# (arranged here by blkdiscard before "rbd feature disable") doesn't hang
+DEV=`_sudo rbd device --device-type nbd map ${POOL}/${IMAGE}`
+get_pid ${POOL}
+rbd feature enable ${POOL}/${IMAGE} journaling
+_sudo blkdiscard --offset 0 --length 4096 ${DEV}
+rbd feature disable ${POOL}/${IMAGE} journaling
+unmap_device ${DEV} ${PID}
+DEV=
+
 # test that rbd_op_threads setting takes effect
 EXPECTED=`ceph-conf --show-config-value librados_thread_count`
 DEV=`_sudo rbd device --device-type nbd map ${POOL}/${IMAGE}`
index ca715d854c17669b09c463fa83a0580ec300e04b..f4961b925e6f3fccb02cf829d33f6b0f8ed903ed 100755 (executable)
@@ -1169,6 +1169,16 @@ wait_for_snap_removed_from_trash()
     return 1
 }
 
+count_mirror_snaps()
+{
+    local cluster=$1
+    local pool=$2
+    local image=$3
+
+    rbd --cluster ${cluster} snap ls ${pool}/${image} --all |
+        grep -c -F " mirror ("
+}
+
 write_image()
 {
     local cluster=$1
index 56a8b13a9a777a4ba226a4e445fab48fd38d084c..54f6aeec8e00b72a66960f035ac0d3ccca6458ec 100755 (executable)
@@ -214,7 +214,29 @@ wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+replaying' 'primary
 wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+stopped'
 compare_images ${POOL} ${image}
 
-# force promote
+testlog "TEST: failover / failback loop"
+for i in `seq 1 20`; do
+  demote_image ${CLUSTER2} ${POOL} ${image}
+  wait_for_image_replay_stopped ${CLUSTER1} ${POOL} ${image}
+  wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+unknown'
+  wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+unknown'
+  promote_image ${CLUSTER1} ${POOL} ${image}
+  wait_for_image_replay_started ${CLUSTER2} ${POOL} ${image}
+  wait_for_replay_complete ${CLUSTER2} ${CLUSTER1} ${POOL} ${image}
+  wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+stopped'
+  wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+replaying'
+  demote_image ${CLUSTER1} ${POOL} ${image}
+  wait_for_image_replay_stopped ${CLUSTER2} ${POOL} ${image}
+  wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+unknown'
+  wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+unknown'
+  promote_image ${CLUSTER2} ${POOL} ${image}
+  wait_for_image_replay_started ${CLUSTER1} ${POOL} ${image}
+  wait_for_replay_complete ${CLUSTER1} ${CLUSTER2} ${POOL} ${image}
+  wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+stopped'
+  wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+replaying'
+done
+
+testlog "TEST: force promote"
 force_promote_image=test_force_promote
 create_image ${CLUSTER2} ${POOL} ${force_promote_image}
 write_image ${CLUSTER2} ${POOL} ${force_promote_image} 100
index 0060440fb8d0d2409d0627d0f4147c0c9cd32102..c70d48b09db4718116899ac71eacd8d0e9c9b948 100755 (executable)
@@ -220,7 +220,32 @@ wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+replaying'
 wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+stopped'
 compare_images ${POOL} ${image}
 
-# force promote
+testlog "TEST: failover / failback loop"
+for i in `seq 1 20`; do
+  demote_image ${CLUSTER2} ${POOL} ${image}
+  wait_for_image_replay_stopped ${CLUSTER1} ${POOL} ${image}
+  wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+unknown'
+  wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+unknown'
+  promote_image ${CLUSTER1} ${POOL} ${image}
+  wait_for_image_replay_started ${CLUSTER2} ${POOL} ${image}
+  wait_for_replay_complete ${CLUSTER2} ${CLUSTER1} ${POOL} ${image}
+  wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+stopped'
+  wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+replaying'
+  demote_image ${CLUSTER1} ${POOL} ${image}
+  wait_for_image_replay_stopped ${CLUSTER2} ${POOL} ${image}
+  wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+unknown'
+  wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+unknown'
+  promote_image ${CLUSTER2} ${POOL} ${image}
+  wait_for_image_replay_started ${CLUSTER1} ${POOL} ${image}
+  wait_for_replay_complete ${CLUSTER1} ${CLUSTER2} ${POOL} ${image}
+  wait_for_status_in_pool_dir ${CLUSTER2} ${POOL} ${image} 'up+stopped'
+  wait_for_status_in_pool_dir ${CLUSTER1} ${POOL} ${image} 'up+replaying'
+done
+# check that demote (or other mirror snapshots) don't pile up
+test "$(count_mirror_snaps ${CLUSTER1} ${POOL} ${image})" -le 3
+test "$(count_mirror_snaps ${CLUSTER2} ${POOL} ${image})" -le 3
+
+testlog "TEST: force promote"
 force_promote_image=test_force_promote
 create_image_and_enable_mirror ${CLUSTER2} ${POOL} ${force_promote_image}
 write_image ${CLUSTER2} ${POOL} ${force_promote_image} 100
diff --git a/ceph/qa/workunits/rbd/rbd_support_module_recovery.sh b/ceph/qa/workunits/rbd/rbd_support_module_recovery.sh
new file mode 100755 (executable)
index 0000000..e9defce
--- /dev/null
@@ -0,0 +1,77 @@
+#!/bin/bash
+set -ex
+
+POOL=rbd
+IMAGE_PREFIX=image
+NUM_IMAGES=20
+RUN_TIME=3600
+
+rbd mirror pool enable ${POOL} image
+rbd mirror pool peer add ${POOL} dummy
+
+# Create images and schedule their mirror snapshots
+for ((i = 1; i <= ${NUM_IMAGES}; i++)); do
+    rbd create -s 1G --image-feature exclusive-lock ${POOL}/${IMAGE_PREFIX}$i
+    rbd mirror image enable ${POOL}/${IMAGE_PREFIX}$i snapshot
+    rbd mirror snapshot schedule add -p ${POOL} --image ${IMAGE_PREFIX}$i 1m
+done
+
+# Run fio workloads on images via kclient
+# Test the recovery of the rbd_support module and its scheduler from their
+# librbd client being blocklisted while a exclusive lock gets passed around
+# between their librbd client and a kclient trying to take mirror snapshots
+# and perform I/O on the same image.
+for ((i = 1; i <= ${NUM_IMAGES}; i++)); do
+    DEVS[$i]=$(sudo rbd device map ${POOL}/${IMAGE_PREFIX}$i)
+    fio --name=fiotest --filename=${DEVS[$i]} --rw=randrw --bs=4K --direct=1 \
+        --ioengine=libaio --iodepth=2 --runtime=43200 --time_based \
+        &> /dev/null &
+done
+
+# Repeatedly blocklist rbd_support module's client ~10s after the module
+# recovers from previous blocklisting
+CURRENT_TIME=$(date +%s)
+END_TIME=$((CURRENT_TIME + RUN_TIME))
+PREV_CLIENT_ADDR=""
+CLIENT_ADDR=""
+while ((CURRENT_TIME <= END_TIME)); do
+    if [[ -n "${CLIENT_ADDR}" ]] &&
+       [[ "${CLIENT_ADDR}" != "${PREV_CLIENT_ADDR}" ]]; then
+            ceph osd blocklist add ${CLIENT_ADDR}
+            # Confirm rbd_support module's client is blocklisted
+            ceph osd blocklist ls | grep -q ${CLIENT_ADDR}
+            PREV_CLIENT_ADDR=${CLIENT_ADDR}
+    fi
+    sleep 10
+    CLIENT_ADDR=$(ceph mgr dump |
+        jq .active_clients[] |
+        jq 'select(.name == "rbd_support")' |
+        jq -r '[.addrvec[0].addr, "/", .addrvec[0].nonce|tostring] | add')
+    CURRENT_TIME=$(date +%s)
+done
+
+# Confirm that rbd_support module recovered from repeated blocklisting
+# Check that you can add a mirror snapshot schedule after a few retries
+for ((i = 1; i <= 24; i++)); do
+    rbd mirror snapshot schedule add -p ${POOL} \
+        --image ${IMAGE_PREFIX}1 2m && break
+    sleep 10
+done
+rbd mirror snapshot schedule ls -p ${POOL} --image ${IMAGE_PREFIX}1 |
+    grep 'every 2m'
+# Verify that the schedule present before client blocklisting is preserved
+rbd mirror snapshot schedule ls -p ${POOL} --image ${IMAGE_PREFIX}1 |
+    grep 'every 1m'
+rbd mirror snapshot schedule rm -p ${POOL} --image ${IMAGE_PREFIX}1 2m
+for ((i = 1; i <= ${NUM_IMAGES}; i++)); do
+    rbd mirror snapshot schedule rm -p ${POOL} --image ${IMAGE_PREFIX}$i 1m
+done
+
+# cleanup
+killall fio || true
+wait
+for ((i = 1; i <= ${NUM_IMAGES}; i++)); do
+    sudo rbd device unmap ${DEVS[$i]}
+done
+
+echo OK
index 235c36c9521f88d3bef0cb22d7a2a64ccf2ce48a..2c9c5d035786d347c65bd5b39f003ec3e14b20cf 100755 (executable)
@@ -5,6 +5,9 @@ import subprocess
 import logging as log
 import boto3
 import botocore.exceptions
+import random
+import json
+from time import sleep
 
 log.basicConfig(format = '%(message)s', level=log.DEBUG)
 log.getLogger('botocore').setLevel(log.CRITICAL)
@@ -55,3 +58,46 @@ def boto_connect(access_key, secret_key, config=None):
         except botocore.exceptions.ConnectionError:
             # retry with ssl
             return try_connect('443', True, 'https')
+
+def put_objects(bucket, key_list):
+    objs = []
+    for key in key_list:
+        o = bucket.put_object(Key=key, Body=b"some_data")
+        objs.append((o.key, o.version_id))
+    return objs
+
+def create_unlinked_objects(conn, bucket, key_list):
+    # creates an unlinked/unlistable object for each key in key_list
+    
+    object_versions = []
+    try:
+        exec_cmd('ceph config set client rgw_debug_inject_set_olh_err 2')
+        exec_cmd('ceph config set client rgw_debug_inject_olh_cancel_modification_err true')
+        sleep(1)
+        for key in key_list:
+            tag = str(random.randint(0, 1_000_000))
+            try:
+                bucket.put_object(Key=key, Body=b"some_data", Metadata = {
+                    'tag': tag,
+                })
+            except Exception as e:
+                log.debug(e)
+            out = exec_cmd(f'radosgw-admin bi list --bucket {bucket.name} --object {key}')
+            instance_entries = filter(
+                lambda x: x['type'] == 'instance',
+                json.loads(out.replace(b'\x80', b'0x80')))
+            found = False
+            for ie in instance_entries:
+                instance_id = ie['entry']['instance']
+                ov = conn.ObjectVersion(bucket.name, key, instance_id).head()
+                if ov['Metadata'] and ov['Metadata']['tag'] == tag:
+                    object_versions.append((key, instance_id))
+                    found = True
+                    break
+            if not found:
+                raise Exception(f'failed to create unlinked object for key={key}')
+    finally:
+        exec_cmd('ceph config rm client rgw_debug_inject_set_olh_err')
+        exec_cmd('ceph config rm client rgw_debug_inject_olh_cancel_modification_err')
+    return object_versions
+
diff --git a/ceph/qa/workunits/rgw/run-bucket-check.sh b/ceph/qa/workunits/rgw/run-bucket-check.sh
new file mode 100755 (executable)
index 0000000..85e02db
--- /dev/null
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+set -ex
+
+# assume working ceph environment (radosgw-admin in path) and rgw on localhost:80
+# localhost::443 for ssl
+
+mydir=`dirname $0`
+
+python3 -m venv $mydir
+source $mydir/bin/activate
+pip install pip --upgrade
+pip install boto3
+
+## run test
+$mydir/bin/python3 $mydir/test_rgw_bucket_check.py
+
+deactivate
+echo OK.
+
diff --git a/ceph/qa/workunits/rgw/test_rgw_bucket_check.py b/ceph/qa/workunits/rgw/test_rgw_bucket_check.py
new file mode 100755 (executable)
index 0000000..bfa6d65
--- /dev/null
@@ -0,0 +1,194 @@
+#!/usr/bin/env python3
+
+import logging as log
+import json
+import botocore
+from common import exec_cmd, create_user, boto_connect, put_objects, create_unlinked_objects
+from botocore.config import Config
+
+"""
+Tests behavior of radosgw-admin bucket check commands. 
+"""
+# The test cases in this file have been annotated for inventory.
+# To extract the inventory (in csv format) use the command:
+#
+#   grep '^ *# TESTCASE' | sed 's/^ *# TESTCASE //'
+#
+#
+
+""" Constants """
+USER = 'check-tester'
+DISPLAY_NAME = 'Check Testing'
+ACCESS_KEY = 'OJODXSLNX4LUNHQG99PA'
+SECRET_KEY = '3l6ffld34qaymfomuh832j94738aie2x4p2o8h6n'
+BUCKET_NAME = 'check-bucket'
+
+def main():
+    """
+    execute bucket check commands
+    """
+    create_user(USER, DISPLAY_NAME, ACCESS_KEY, SECRET_KEY)
+
+    connection = boto_connect(ACCESS_KEY, SECRET_KEY, Config(retries = {
+        'total_max_attempts': 1,
+    }))
+
+    # pre-test cleanup
+    try:
+        bucket = connection.Bucket(BUCKET_NAME)
+        bucket.objects.all().delete()
+        bucket.object_versions.all().delete()
+        bucket.delete()
+    except botocore.exceptions.ClientError as e:
+        if not e.response['Error']['Code'] == 'NoSuchBucket':
+            raise
+
+    bucket = connection.create_bucket(Bucket=BUCKET_NAME)
+
+    null_version_keys = ['a', 'z']
+    null_version_objs = put_objects(bucket, null_version_keys)
+
+    connection.BucketVersioning(BUCKET_NAME).enable()
+
+    ok_keys = ['a', 'b', 'c', 'd']
+    unlinked_keys = ['c', 'd', 'e', 'f']
+    ok_objs = put_objects(bucket, ok_keys)
+    
+    # TESTCASE 'recalculated bucket check stats are correct'
+    log.debug('TEST: recalculated bucket check stats are correct\n')
+    exec_cmd(f'radosgw-admin bucket check --fix --bucket {BUCKET_NAME}')
+    out = exec_cmd(f'radosgw-admin bucket stats --bucket {BUCKET_NAME}')
+    json_out = json.loads(out)
+    log.debug(json_out['usage'])
+    assert json_out['usage']['rgw.main']['num_objects'] == 6
+    
+    # TESTCASE 'bucket check unlinked does not report normal entries'
+    log.debug('TEST: bucket check unlinked does not report normal entries\n')
+    out = exec_cmd(f'radosgw-admin bucket check unlinked --bucket {BUCKET_NAME} --min-age-hours 0 --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == 0
+
+    unlinked_objs = create_unlinked_objects(connection, bucket, unlinked_keys)
+    
+    # TESTCASE 'bucket check unlinked finds unlistable entries'
+    log.debug('TEST: bucket check unlinked finds unlistable entries\n')
+    out = exec_cmd(f'radosgw-admin bucket check unlinked --bucket {BUCKET_NAME} --min-age-hours 0 --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == len(unlinked_keys)
+
+    # TESTCASE 'unlinked entries are not listable'
+    log.debug('TEST: unlinked entries are not listable\n')
+    for ov in bucket.object_versions.all():
+        assert (ov.key, ov.version_id) not in unlinked_objs, f'object "{ov.key}:{ov.version_id}" was found in bucket listing'
+
+    # TESTCASE 'GET returns 404 for unlinked entry keys that have no other versions'
+    log.debug('TEST: GET returns 404 for unlinked entry keys that have no other versions\n')
+    noent_keys = set(unlinked_keys) - set(ok_keys)
+    for key in noent_keys:
+        try:
+            bucket.Object(key).get()
+            assert False, 'GET did not return 404 for key={key} with no prior successful PUT'
+        except botocore.exceptions.ClientError as e:
+            assert e.response['ResponseMetadata']['HTTPStatusCode'] == 404
+            
+    # TESTCASE 'bucket check unlinked fixes unlistable entries'
+    log.debug('TEST: bucket check unlinked fixes unlistable entries\n')
+    out = exec_cmd(f'radosgw-admin bucket check unlinked --bucket {BUCKET_NAME} --fix --min-age-hours 0 --rgw-olh-pending-timeout-sec 0 --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == len(unlinked_keys)
+    for o in unlinked_objs:
+        try:
+            connection.ObjectVersion(bucket.name, o[0], o[1]).head()
+            assert False, f'head for unlistable object {o[0]}:{o[1]} succeeded after fix'
+        except botocore.exceptions.ClientError as e:
+            assert e.response['ResponseMetadata']['HTTPStatusCode'] == 404
+
+    # TESTCASE 'bucket check unlinked fix does not affect normal entries'
+    log.debug('TEST: bucket check unlinked does not affect normal entries\n')
+    all_listable = list(bucket.object_versions.all())
+    assert len(all_listable) == len(ok_keys) + len(null_version_keys), 'some normal objects were not accounted for in object listing after unlinked fix'
+    for o in ok_objs:
+        assert o in map(lambda x: (x.key, x.version_id), all_listable), "normal object not listable after fix"
+        connection.ObjectVersion(bucket.name, o[0], o[1]).head()
+
+    # TESTCASE 'bucket check unlinked does not find new unlistable entries after fix'
+    log.debug('TEST: bucket check unlinked does not find new unlistable entries after fix\n')
+    out = exec_cmd(f'radosgw-admin bucket check unlinked --bucket {BUCKET_NAME} --min-age-hours 0 --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == 0
+    
+    # for this set of keys we can produce leftover OLH object/entries by
+    # deleting the normal object instance since we should already have a leftover
+    # pending xattr on the OLH object due to the errors associated with the 
+    # prior unlinked entries that were created for the same keys 
+    leftover_pending_xattr_keys = set(ok_keys).intersection(unlinked_keys)
+    objs_to_delete = filter(lambda x: x[0] in leftover_pending_xattr_keys, ok_objs)
+        
+    for o in objs_to_delete:
+        connection.ObjectVersion(bucket.name, o[0], o[1]).delete()
+
+    for key in leftover_pending_xattr_keys:
+        out = exec_cmd(f'radosgw-admin bi list --bucket {BUCKET_NAME} --object {key}')
+        idx_entries = json.loads(out.replace(b'\x80', b'0x80'))
+        assert len(idx_entries) > 0, 'failed to create leftover OLH entries for key {key}'
+        
+    # TESTCASE 'bucket check olh finds leftover OLH entries'
+    log.debug('TEST: bucket check olh finds leftover OLH entries\n')
+    out = exec_cmd(f'radosgw-admin bucket check olh --bucket {BUCKET_NAME} --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == len(leftover_pending_xattr_keys)
+
+    # TESTCASE 'bucket check olh fixes leftover OLH entries'
+    log.debug('TEST: bucket check olh fixes leftover OLH entries\n')
+    out = exec_cmd(f'radosgw-admin bucket check olh --bucket {BUCKET_NAME} --fix --rgw-olh-pending-timeout-sec 0 --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == len(leftover_pending_xattr_keys)
+    
+    for key in leftover_pending_xattr_keys:
+        out = exec_cmd(f'radosgw-admin bi list --bucket {BUCKET_NAME} --object {key}')
+        idx_entries = json.loads(out.replace(b'\x80', b'0x80'))
+        assert len(idx_entries) == 0, 'index entries still exist for key={key} after olh fix'
+
+    # TESTCASE 'bucket check olh does not find new leftover OLH entries after fix'
+    log.debug('TEST: bucket check olh does not find new leftover OLH entries after fix\n')
+    out = exec_cmd(f'radosgw-admin bucket check olh --bucket {BUCKET_NAME} --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == 0
+
+    # TESTCASE 'bucket check fixes do not affect null version objects'
+    log.debug('TEST: verify that bucket check fixes do not affect null version objects\n')
+    for o in null_version_objs:
+        connection.ObjectVersion(bucket.name, o[0], 'null').head()
+        
+    all_versions = list(map(lambda x: (x.key, x.version_id), bucket.object_versions.all()))
+    for key in null_version_keys:
+        assert (key, 'null') in all_versions
+
+    # TESTCASE 'bucket check stats are correct in the presence of unlinked entries'
+    log.debug('TEST: bucket check stats are correct in the presence of unlinked entries\n')
+    bucket.object_versions.all().delete()
+    null_version_objs = put_objects(bucket, null_version_keys)
+    ok_objs = put_objects(bucket, ok_keys)
+    unlinked_objs = create_unlinked_objects(connection, bucket, unlinked_keys)
+    exec_cmd(f'radosgw-admin bucket check --fix --bucket {BUCKET_NAME}')
+    out = exec_cmd(f'radosgw-admin bucket check unlinked --bucket {BUCKET_NAME} --fix --min-age-hours 0 --rgw-olh-pending-timeout-sec 0 --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == len(unlinked_keys)
+    bucket.object_versions.all().delete()
+    out = exec_cmd(f'radosgw-admin bucket stats --bucket {BUCKET_NAME}')
+    json_out = json.loads(out)
+    log.debug(json_out['usage'])
+    assert json_out['usage']['rgw.main']['size'] == 0
+    assert json_out['usage']['rgw.main']['num_objects'] == 0
+    assert json_out['usage']['rgw.main']['size_actual'] == 0
+    assert json_out['usage']['rgw.main']['size_kb'] == 0
+    assert json_out['usage']['rgw.main']['size_kb_actual'] == 0
+    assert json_out['usage']['rgw.main']['size_kb_utilized'] == 0
+
+    # Clean up
+    log.debug("Deleting bucket {}".format(BUCKET_NAME))
+    bucket.object_versions.all().delete()
+    bucket.delete()
+
+main()
+log.info("Completed bucket check tests")
index 0b370dc723428816fa9b105c7897a38c4503588c..6326e7b173cf4ba429bc2c412ff61f760f350e5e 100755 (executable)
@@ -5,7 +5,7 @@ import time
 import logging as log
 import json
 import os
-from common import exec_cmd, boto_connect, create_user
+from common import exec_cmd, boto_connect, create_user, put_objects, create_unlinked_objects
 
 """
 Rgw manual and dynamic resharding  testing against a running instance
@@ -145,7 +145,7 @@ def main():
     execute manual and dynamic resharding commands
     """
     create_user(USER, DISPLAY_NAME, ACCESS_KEY, SECRET_KEY)
-    
+
     connection = boto_connect(ACCESS_KEY, SECRET_KEY)
 
     # create a bucket
@@ -277,6 +277,28 @@ def main():
     ver_bucket.put_object(Key='put_during_reshard', Body=b"some_data")
     log.debug('put object successful')
 
+    # TESTCASE 'check that bucket stats are correct after reshard with unlinked entries'
+    log.debug('TEST: check that bucket stats are correct after reshard with unlinked entries\n')
+    ver_bucket.object_versions.all().delete()
+    ok_keys = ['a', 'b', 'c']
+    unlinked_keys = ['x', 'y', 'z']
+    put_objects(ver_bucket, ok_keys)
+    create_unlinked_objects(connection, ver_bucket, unlinked_keys)
+    cmd = exec_cmd(f'radosgw-admin bucket reshard --bucket {VER_BUCKET_NAME} --num-shards 17 --yes-i-really-mean-it')
+    out = exec_cmd(f'radosgw-admin bucket check unlinked --bucket {VER_BUCKET_NAME} --fix --min-age-hours 0 --rgw-olh-pending-timeout-sec 0 --dump-keys')
+    json_out = json.loads(out)
+    assert len(json_out) == len(unlinked_keys)
+    ver_bucket.object_versions.all().delete()
+    out = exec_cmd(f'radosgw-admin bucket stats --bucket {VER_BUCKET_NAME}')
+    json_out = json.loads(out)
+    log.debug(json_out['usage'])
+    assert json_out['usage']['rgw.main']['size'] == 0
+    assert json_out['usage']['rgw.main']['num_objects'] == 0
+    assert json_out['usage']['rgw.main']['size_actual'] == 0
+    assert json_out['usage']['rgw.main']['size_kb'] == 0
+    assert json_out['usage']['rgw.main']['size_kb_actual'] == 0
+    assert json_out['usage']['rgw.main']['size_kb_utilized'] == 0
+
     # Clean up
     log.debug("Deleting bucket {}".format(BUCKET_NAME))
     bucket.objects.all().delete()
diff --git a/ceph/qa/workunits/rgw/test_rgw_s3_mp_reupload.py b/ceph/qa/workunits/rgw/test_rgw_s3_mp_reupload.py
new file mode 100755 (executable)
index 0000000..b3cb2d5
--- /dev/null
@@ -0,0 +1,121 @@
+import boto3
+import botocore.exceptions
+import sys
+import os
+import subprocess
+
+#boto3.set_stream_logger(name='botocore')
+
+# handles two optional system arguments:
+#   <bucket-name> : default is "bkt134"
+#   <0 or 1>      : 0 -> upload aborted, 1 -> completed; default is completed
+
+if len(sys.argv) >= 2:
+    bucket_name = sys.argv[1]
+else:
+    bucket_name = "bkt314738362229"
+print("bucket nams is %s" % bucket_name)
+
+complete_mpu = True
+if len(sys.argv) >= 3:
+    complete_mpu = int(sys.argv[2]) > 0
+
+versioned_bucket = False
+if len(sys.argv) >= 4:
+    versioned_bucket = int(sys.argv[3]) > 0
+
+rgw_host = os.environ['RGW_HOST']
+access_key = os.environ['RGW_ACCESS_KEY']
+secret_key = os.environ['RGW_SECRET_KEY']
+
+try:
+    endpoint='http://%s:%d' % (rgw_host, 80)
+    client = boto3.client('s3',
+                          endpoint_url=endpoint,
+                          aws_access_key_id=access_key,
+                          aws_secret_access_key=secret_key)
+    res = client.create_bucket(Bucket=bucket_name)
+except botocore.exceptions.EndpointConnectionError:
+    try:
+        endpoint='https://%s:%d' % (rgw_host, 443)
+        client = boto3.client('s3',
+                              endpoint_url=endpoint,
+                              verify=False,
+                              aws_access_key_id=access_key,
+                              aws_secret_access_key=secret_key)
+        res = client.create_bucket(Bucket=bucket_name)
+    except botocore.exceptions.EndpointConnectionError:
+        endpoint='http://%s:%d' % (rgw_host, 8000)
+        client = boto3.client('s3',
+                              endpoint_url=endpoint,
+                              aws_access_key_id=access_key,
+                              aws_secret_access_key=secret_key)
+        res = client.create_bucket(Bucket=bucket_name)
+
+print("endpoint is %s" % endpoint)
+
+if versioned_bucket:
+    res = client.put_bucket_versioning(
+        Bucket=bucket_name,
+        VersioningConfiguration={
+        'MFADelete': 'Disabled',
+        'Status': 'Enabled'}
+        )
+
+key = "mpu_test4"
+nparts = 2
+ndups = 11
+do_reupload = True
+
+part_path = "/tmp/mp_part_5m"
+subprocess.run(["dd", "if=/dev/urandom", "of=" + part_path, "bs=1M", "count=5"], check=True)
+
+f = open(part_path, 'rb')
+
+res = client.create_multipart_upload(Bucket=bucket_name, Key=key)
+mpu_id = res["UploadId"]
+
+print("start UploadId=%s" % (mpu_id))
+
+parts = []
+parts2 = []
+
+for ix in range(0,nparts):
+    part_num = ix + 1
+    f.seek(0)
+    res = client.upload_part(Body=f, Bucket=bucket_name, Key=key,
+                             UploadId=mpu_id, PartNumber=part_num)
+    # save
+    etag = res['ETag']
+    part = {'ETag': etag, 'PartNumber': part_num}
+    print("phase 1 uploaded part %s" % part)
+    parts.append(part)
+
+if do_reupload:
+    # just re-upload part 1
+    part_num = 1
+    for ix in range(0,ndups):
+        f.seek(0)
+        res = client.upload_part(Body=f, Bucket=bucket_name, Key=key,
+                                UploadId=mpu_id, PartNumber=part_num)
+        etag = res['ETag']
+        part = {'ETag': etag, 'PartNumber': part_num}
+        print ("phase 2 uploaded part %s" % part)
+
+        # save
+        etag = res['ETag']
+        part = {'ETag': etag, 'PartNumber': part_num}
+        parts2.append(part)
+
+if complete_mpu:
+    print("completing multipart upload, parts=%s" % parts)
+    res = client.complete_multipart_upload(
+        Bucket=bucket_name, Key=key, UploadId=mpu_id,
+        MultipartUpload={'Parts': parts})
+else:
+    print("aborting multipart upload, parts=%s" % parts)
+    res = client.abort_multipart_upload(
+        Bucket=bucket_name, Key=key, UploadId=mpu_id)
+
+# clean up
+subprocess.run(["rm", "-f", part_path], check=True)
diff --git a/ceph/qa/workunits/rgw/test_rgw_s3_mp_reupload.sh b/ceph/qa/workunits/rgw/test_rgw_s3_mp_reupload.sh
new file mode 100755 (executable)
index 0000000..5d73fd0
--- /dev/null
@@ -0,0 +1,110 @@
+#!/usr/bin/env bash
+
+# INITIALIZATION
+
+mydir=$(dirname $0)
+data_pool=default.rgw.buckets.data
+orphan_list_out=/tmp/orphan_list.$$
+radoslist_out=/tmp/radoslist.$$
+rados_ls_out=/tmp/rados_ls.$$
+diff_out=/tmp/diff.$$
+
+rgw_host="$(hostname --fqdn)"
+echo "INFO: fully qualified domain name: $rgw_host"
+
+export RGW_ACCESS_KEY="0555b35654ad1656d804"
+export RGW_SECRET_KEY="h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
+export RGW_HOST="${RGW_HOST:-$rgw_host}"
+
+# random argument determines if multipart is aborted or completed 50/50
+outcome=$((RANDOM % 2))
+if [ $outcome -eq 0 ] ;then
+    echo "== TESTING *ABORTING* MULTIPART UPLOAD WITH RE-UPLOADS =="
+else
+    echo "== TESTING *COMPLETING* MULTIPART UPLOAD WITH RE-UPLOADS =="
+fi
+
+# random argument determines if multipart is aborted or completed 50/50
+versioning=$((RANDOM % 2))
+if [ $versioning -eq 0 ] ;then
+    echo "== TESTING NON-VERSIONED BUCKET =="
+else
+    echo "== TESTING VERSIONED BUCKET =="
+fi
+
+# create a randomized bucket name
+bucket="reupload-bkt-$((RANDOM % 899999 + 100000))"
+
+
+# SET UP PYTHON VIRTUAL ENVIRONMENT
+
+# install boto3
+python3 -m venv $mydir
+source $mydir/bin/activate
+pip install pip --upgrade
+pip install boto3
+
+
+# CREATE RGW USER IF NECESSARY
+
+if radosgw-admin user info --access-key $RGW_ACCESS_KEY 2>/dev/null ;then
+    echo INFO: user already exists
+else
+    echo INFO: creating user
+    radosgw-admin user create --uid testid \
+                 --access-key $RGW_ACCESS_KEY \
+                 --secret $RGW_SECRET_KEY \
+                 --display-name 'M. Tester' \
+                 --email tester@ceph.com 2>/dev/null
+fi
+
+
+# RUN REUPLOAD TEST
+
+$mydir/bin/python3 ${mydir}/test_rgw_s3_mp_reupload.py $bucket $outcome $versioning
+
+
+# ANALYZE FOR ERRORS
+# (NOTE: for now we're choosing not to use the rgw-orphan-list tool)
+
+# force garbage collection to remove extra parts
+radosgw-admin gc process --include-all 2>/dev/null
+
+marker=$(radosgw-admin metadata get bucket:$bucket 2>/dev/null | grep bucket_id | sed 's/.*: "\(.*\)".*/\1/')
+
+# determine expected rados objects
+radosgw-admin bucket radoslist --bucket=$bucket 2>/dev/null | sort >$radoslist_out
+echo "radosgw-admin bucket radoslist:"
+cat $radoslist_out
+
+# determine found rados objects
+rados ls -p $data_pool 2>/dev/null | grep "^$marker" | sort >$rados_ls_out
+echo "rados ls:"
+cat $rados_ls_out
+
+# compare expected and found
+diff $radoslist_out $rados_ls_out >$diff_out
+if [ $(cat $diff_out | wc -l) -ne 0 ] ;then
+    error=1
+    echo "ERROR: Found differences between expected and actual rados objects for test bucket."
+    echo "    note: indicators: '>' found but not expected; '<' expected but not found."
+    cat $diff_out
+fi
+
+
+# CLEAN UP
+
+deactivate
+
+rm -f $orphan_list_out $radoslist_out $rados_ls_out $diff_out
+
+
+# PRODUCE FINAL RESULTS
+
+if [ -n "$error" ] ;then
+    echo "== FAILED =="
+    exit 1
+fi
+
+echo "== PASSED =="
+exit 0
index 911f45990006c1b774d091f7b744ea60abe52169..d9fc6dd6bcafe03a2e32027966a200195c5a9e03 100644 (file)
@@ -1,2 +1,2 @@
-5dd24139a1eada541a3bc16b6941c5dde975e26d
-18.2.0
+7fe91d5d5842e04be3b4f514d6dd990c54b29c76
+18.2.1
index 0a841c5db37abd5aff96f3ceefa39d1d1de1551a..e1f90f72b2dbf7f3e7087f58bb571d27bea8c158 100644 (file)
@@ -321,7 +321,7 @@ if(NOT TARGET RapidJSON::RapidJSON)
 endif()
 
 option(WITH_FMT_HEADER_ONLY "use header-only version of fmt library" OFF)
-set(WITH_FMT_VERSION "7.0.0" CACHE
+set(WITH_FMT_VERSION "8.1.1" CACHE
   STRING "build with fmt version")
 find_package(fmt ${WITH_FMT_VERSION} QUIET)
 if(fmt_FOUND)
index bbbf15527938852aa61c5ff5dfafb258533e5afd..aa47d8112d9fc1b7588e8fd14d8cd1b204efda56 100644 (file)
@@ -131,7 +131,7 @@ int SimpleRADOSStriper::remove()
 
   auto ext = get_first_extent();
   if (int rc = ioctx.remove(ext.soid); rc < 0) {
-    d(5) << " remove failed: " << cpp_strerror(rc) << dendl;
+    d(1) << " remove failed: " << cpp_strerror(rc) << dendl;
     return rc;
   }
 
@@ -171,7 +171,7 @@ int SimpleRADOSStriper::wait_for_aios(bool block)
       }
     }
     if (rc) {
-      d(5) << " aio failed: " << cpp_strerror(rc) << dendl;
+      d(1) << " aio failed: " << cpp_strerror(rc) << dendl;
       if (aios_failure == 0) {
         aios_failure = rc;
       }
@@ -257,7 +257,7 @@ int SimpleRADOSStriper::open()
   op.getxattr(XATTR_ALLOCATED, &bl_alloc, &prval_alloc);
   op.getxattr(XATTR_VERSION, &bl_version, &prval_version);
   if (int rc = ioctx.operate(ext.soid, &op, &pbl); rc < 0) {
-    d(5) << " getxattr failed: " << cpp_strerror(rc) << dendl;
+    d(1) << " getxattr failed: " << cpp_strerror(rc) << dendl;
     return rc;
   }
   exclusive_holder = bl_excl.to_str();
@@ -297,7 +297,7 @@ int SimpleRADOSStriper::shrink_alloc(uint64_t a)
     auto ext = get_next_extent(offset, len);
     auto aiocp = aiocompletionptr(librados::Rados::aio_create_completion());
     if (int rc = ioctx.aio_remove(ext.soid, aiocp.get()); rc < 0) {
-      d(5) << " aio_remove failed: " << cpp_strerror(rc) << dendl;
+      d(1) << " aio_remove failed: " << cpp_strerror(rc) << dendl;
       return rc;
     }
     removes.emplace_back(std::move(aiocp));
@@ -307,7 +307,7 @@ int SimpleRADOSStriper::shrink_alloc(uint64_t a)
 
   for (auto& aiocp : removes) {
     if (int rc = aiocp->wait_for_complete(); rc < 0 && rc != -ENOENT) {
-      d(5) << " aio_remove failed: " << cpp_strerror(rc) << dendl;
+      d(1) << " aio_remove failed: " << cpp_strerror(rc) << dendl;
       return rc;
     }
   }
@@ -320,7 +320,7 @@ int SimpleRADOSStriper::shrink_alloc(uint64_t a)
   op.setxattr(XATTR_VERSION, uint2bl(version+1));
   d(15) << " updating version to " << (version+1) << dendl;
   if (int rc = ioctx.aio_operate(ext.soid, aiocp.get(), &op); rc < 0) {
-    d(5) << " update failed: " << cpp_strerror(rc) << dendl;
+    d(1) << " update failed: " << cpp_strerror(rc) << dendl;
     return rc;
   }
   /* we need to wait so we don't have dangling extents */
@@ -726,7 +726,7 @@ int SimpleRADOSStriper::lock(uint64_t timeoutms)
   }
 
   if (int rc = open(); rc < 0) {
-    d(5) << " open failed: " << cpp_strerror(rc) << dendl;
+    d(1) << " open failed: " << cpp_strerror(rc) << dendl;
     return rc;
   }
 
index 16cbc08b26254fb59b623d675f497b1552f0582c..dcc4f18627218ce98b956752312a6f5189c359e4 100644 (file)
@@ -6,6 +6,7 @@ set of utilities for interacting with LVM.
 import logging
 import os
 import uuid
+import re
 from itertools import repeat
 from math import floor
 from ceph_volume import process, util, conf
@@ -1209,3 +1210,39 @@ def get_lv_by_fullname(full_name):
     except ValueError:
         res_lv = None
     return res_lv
+
+def get_lv_path_from_mapper(mapper):
+    """
+    This functions translates a given mapper device under the format:
+    /dev/mapper/LV to the format /dev/VG/LV.
+    eg:
+    from:
+    /dev/mapper/ceph--c1a97e46--234c--46aa--a549--3ca1d1f356a9-osd--block--32e8e896--172e--4a38--a06a--3702598510ec
+    to:
+    /dev/ceph-c1a97e46-234c-46aa-a549-3ca1d1f356a9/osd-block-32e8e896-172e-4a38-a06a-3702598510ec
+    """
+    results = re.split(r'^\/dev\/mapper\/(.+\w)-(\w.+)', mapper)
+    results = list(filter(None, results))
+
+    if len(results) != 2:
+        return None
+
+    return f"/dev/{results[0].replace('--', '-')}/{results[1].replace('--', '-')}"
+
+def get_mapper_from_lv_path(lv_path):
+    """
+    This functions translates a given lv path under the format:
+    /dev/VG/LV to the format /dev/mapper/LV.
+    eg:
+    from:
+    /dev/ceph-c1a97e46-234c-46aa-a549-3ca1d1f356a9/osd-block-32e8e896-172e-4a38-a06a-3702598510ec
+    to:
+    /dev/mapper/ceph--c1a97e46--234c--46aa--a549--3ca1d1f356a9-osd--block--32e8e896--172e--4a38--a06a--3702598510ec
+    """
+    results = re.split(r'^\/dev\/(.+\w)-(\w.+)', lv_path)
+    results = list(filter(None, results))
+
+    if len(results) != 2:
+        return None
+
+    return f"/dev/mapper/{results[0].replace('-', '--')}/{results[1].replace('-', '--')}"
index 46846a1dcbede5d8dfcf5cbc694252a69365d28b..0cc8d71ae64d1cc259d583665724b2bf65b61893 100644 (file)
@@ -28,7 +28,7 @@ def deactivate_osd(osd_id=None, osd_uuid=None):
 
     for lv in lvs:
         if lv.tags.get('ceph.encrypted', '0') == '1':
-            encryption.dmcrypt_close(lv.lv_uuid)
+            encryption.dmcrypt_close(mapping=lv.lv_uuid, skip_path_check=True)
 
 
 class Deactivate(object):
index 86159fd505b777dd0a86c20865f8438629b19c3b..64589a2d62840232cbe0d1a8ff9fbcafd1a783a6 100644 (file)
@@ -6,6 +6,7 @@ from textwrap import dedent
 from ceph_volume.util import system, disk, merge_dict
 from ceph_volume.util.device import Device
 from ceph_volume.util.arg_validators import valid_osd_id
+from ceph_volume.util import encryption as encryption_utils
 from ceph_volume import decorators, terminal, process
 from ceph_volume.api import lvm as api
 from ceph_volume.systemd import systemctl
@@ -300,6 +301,15 @@ class Migrate(object):
                 osd_path, self.get_filename_by_type(type))]
         return ret
 
+    def close_encrypted(self, source_devices):
+        # close source device(-s) if they're encrypted and have been removed
+        for device,type in source_devices:
+            if (type == 'db' or type == 'wal'):
+                logger.info("closing dmcrypt volume {}"
+                   .format(device.lv_api.lv_uuid))
+                encryption_utils.dmcrypt_close(
+                   mapping = device.lv_api.lv_uuid, skip_path_check=True)
+
     @decorators.needs_root
     def migrate_to_new(self, osd_id, osd_fsid, devices, target_lv):
         source_devices = self.get_source_devices(devices)
@@ -312,9 +322,14 @@ class Migrate(object):
                 "Unable to migrate to : {}".format(self.args.target))
 
         target_path = target_lv.lv_path
-
+        tag_tracker = VolumeTagTracker(devices, target_lv)
+        # prepare and encrypt target if data volume is encrypted
+        if tag_tracker.data_device.lv_api.encrypted:
+            secret = encryption_utils.get_dmcrypt_key(osd_id, osd_fsid)
+            mlogger.info(' preparing dmcrypt for {}, uuid {}'.format(target_lv.lv_path, target_lv.lv_uuid))
+            target_path = encryption_utils.prepare_dmcrypt(
+                key=secret, device=target_path, mapping=target_lv.lv_uuid)
         try:
-            tag_tracker = VolumeTagTracker(devices, target_lv)
             # we need to update lvm tags for all the remaining volumes
             # and clear for ones which to be removed
 
@@ -340,10 +355,13 @@ class Migrate(object):
                     'Failed to migrate device, error code:{}'.format(exit_code))
                 raise SystemExit(
                     'Failed to migrate to : {}'.format(self.args.target))
-            else:
-                system.chown(os.path.join(osd_path, "block.{}".format(
-                    target_type)))
-                terminal.success('Migration successful.')
+
+            system.chown(os.path.join(osd_path, "block.{}".format(
+                target_type)))
+            if tag_tracker.data_device.lv_api.encrypted:
+                self.close_encrypted(source_devices)
+            terminal.success('Migration successful.')
+
         except:
             tag_tracker.undo()
             raise
@@ -391,8 +409,9 @@ class Migrate(object):
                     'Failed to migrate device, error code:{}'.format(exit_code))
                 raise SystemExit(
                     'Failed to migrate to : {}'.format(self.args.target))
-            else:
-                terminal.success('Migration successful.')
+            if tag_tracker.data_device.lv_api.encrypted:
+                self.close_encrypted(source_devices)
+            terminal.success('Migration successful.')
         except:
             tag_tracker.undo()
             raise
@@ -574,7 +593,14 @@ class NewVolume(object):
         mlogger.info(
             'Making new volume at {} for OSD: {} ({})'.format(
                 target_lv.lv_path, osd_id, osd_path))
+        target_path = target_lv.lv_path
         tag_tracker = VolumeTagTracker(devices, target_lv)
+        # prepare and encrypt target if data volume is encrypted
+        if tag_tracker.data_device.lv_api.encrypted:
+            secret = encryption_utils.get_dmcrypt_key(osd_id, osd_fsid)
+            mlogger.info(' preparing dmcrypt for {}, uuid {}'.format(target_lv.lv_path, target_lv.lv_uuid))
+            target_path = encryption_utils.prepare_dmcrypt(
+                key=secret, device=target_path, mapping=target_lv.lv_uuid)
 
         try:
             tag_tracker.update_tags_when_lv_create(self.create_type)
@@ -584,7 +610,7 @@ class NewVolume(object):
                 '--path',
                 osd_path,
                 '--dev-target',
-                target_lv.lv_path,
+                target_path,
                 '--command',
                 'bluefs-bdev-new-{}'.format(self.create_type)
             ])
index 1cf19d98d92844cc1a6e42818bf4d3f52349531f..85c8a14677121e2580713254e339f0d5bed990ea 100644 (file)
@@ -23,19 +23,7 @@ def prepare_dmcrypt(key, device, device_type, tags):
         return ''
     tag_name = 'ceph.%s_uuid' % device_type
     uuid = tags[tag_name]
-    # format data device
-    encryption_utils.luks_format(
-        key,
-        device
-    )
-    encryption_utils.luks_open(
-        key,
-        device,
-        uuid
-    )
-
-    return '/dev/mapper/%s' % uuid
-
+    return encryption_utils.prepare_dmcrypt(key, device, uuid)
 
 def prepare_bluestore(block, wal, db, secrets, tags, osd_id, fsid):
     """
index 2f6e00f8774986936fc2a135ef7f184d7539440c..d4d78ad0181094c6fb4375c47d1252a065ccddaa 100644 (file)
@@ -302,9 +302,8 @@ class Zap(object):
         self.zap(devices)
 
     def dmcrypt_close(self, dmcrypt_uuid):
-        dmcrypt_path = "/dev/mapper/{}".format(dmcrypt_uuid)
-        mlogger.info("Closing encrypted path %s", dmcrypt_path)
-        encryption.dmcrypt_close(dmcrypt_path)
+        mlogger.info("Closing encrypted volume %s", dmcrypt_uuid)
+        encryption.dmcrypt_close(mapping=dmcrypt_uuid, skip_path_check=True)
 
     def main(self):
         sub_command_help = dedent("""
index 19de81fe5ef8a4c7d4dd37a3ea58f2b14942c5c3..89ee285be5b423e6a1d3b3d1a32efbdbf6a735b1 100644 (file)
@@ -49,4 +49,10 @@ def create_parser(prog, description):
         action='store_true',
         help='Enable device encryption via dm-crypt',
     )
+    parser.add_argument(
+        '--osd-id',
+        help='Reuse an existing OSD id',
+        default=None,
+        type=arg_validators.valid_osd_id,
+    )
     return parser
index a9eb413120df4a2214be03217ac19058ce27c294..794bb18c103fd9db10a7c6dae892d7d5f3f319ad 100644 (file)
@@ -5,7 +5,7 @@ import logging
 from textwrap import dedent
 from ceph_volume import decorators, process
 from ceph_volume.util import disk
-
+from typing import Any, Dict, List
 
 logger = logging.getLogger(__name__)
 
@@ -66,46 +66,57 @@ class List(object):
     def __init__(self, argv):
         self.argv = argv
 
+    def is_atari_partitions(self, _lsblk: Dict[str, Any]) -> bool:
+        dev = _lsblk['NAME']
+        if _lsblk.get('PKNAME'):
+            parent = _lsblk['PKNAME']
+            try:
+                if disk.has_bluestore_label(parent):
+                    logger.warning(('ignoring child device {} whose parent {} is a BlueStore OSD.'.format(dev, parent),
+                                    'device is likely a phantom Atari partition. device info: {}'.format(_lsblk)))
+                    return True
+            except OSError as e:
+                logger.error(('ignoring child device {} to avoid reporting invalid BlueStore data from phantom Atari partitions.'.format(dev),
+                            'failed to determine if parent device {} is BlueStore. err: {}'.format(parent, e)))
+                return True
+        return False
+
+    def exclude_atari_partitions(self, _lsblk_all: Dict[str, Any]) -> List[Dict[str, Any]]:
+        return [_lsblk for _lsblk in _lsblk_all if not self.is_atari_partitions(_lsblk)]
+
     def generate(self, devs=None):
         logger.debug('Listing block devices via lsblk...')
-        info_devices = disk.lsblk_all(abspath=True)
-        if devs is None or devs == []:
+        info_devices = []
+        if not devs or not any(devs):
             # If no devs are given initially, we want to list ALL devices including children and
             # parents. Parent disks with child partitions may be the appropriate device to return if
             # the parent disk has a bluestore header, but children may be the most appropriate
             # devices to return if the parent disk does not have a bluestore header.
+            info_devices = disk.lsblk_all(abspath=True)
             devs = [device['NAME'] for device in info_devices if device.get('NAME',)]
+        else:
+            for dev in devs:
+                info_devices.append(disk.lsblk(dev, abspath=True))
+
+        # Linux kernels built with CONFIG_ATARI_PARTITION enabled can falsely interpret
+        # bluestore's on-disk format as an Atari partition table. These false Atari partitions
+        # can be interpreted as real OSDs if a bluestore OSD was previously created on the false
+        # partition. See https://tracker.ceph.com/issues/52060 for more info. If a device has a
+        # parent, it is a child. If the parent is a valid bluestore OSD, the child will only
+        # exist if it is a phantom Atari partition, and the child should be ignored. If the
+        # parent isn't bluestore, then the child could be a valid bluestore OSD. If we fail to
+        # determine whether a parent is bluestore, we should err on the side of not reporting
+        # the child so as not to give a false negative.
+        info_devices = self.exclude_atari_partitions(info_devices)
 
         result = {}
         logger.debug('inspecting devices: {}'.format(devs))
-        for dev in devs:
-            # Linux kernels built with CONFIG_ATARI_PARTITION enabled can falsely interpret
-            # bluestore's on-disk format as an Atari partition table. These false Atari partitions
-            # can be interpreted as real OSDs if a bluestore OSD was previously created on the false
-            # partition. See https://tracker.ceph.com/issues/52060 for more info. If a device has a
-            # parent, it is a child. If the parent is a valid bluestore OSD, the child will only
-            # exist if it is a phantom Atari partition, and the child should be ignored. If the
-            # parent isn't bluestore, then the child could be a valid bluestore OSD. If we fail to
-            # determine whether a parent is bluestore, we should err on the side of not reporting
-            # the child so as not to give a false negative.
-            for info_device in info_devices:
-                if 'PKNAME' in info_device and info_device['PKNAME'] != "":
-                    parent = info_device['PKNAME']
-                    try:
-                        if disk.has_bluestore_label(parent):
-                            logger.warning(('ignoring child device {} whose parent {} is a BlueStore OSD.'.format(dev, parent),
-                                            'device is likely a phantom Atari partition. device info: {}'.format(info_device)))
-                            continue
-                    except OSError as e:
-                        logger.error(('ignoring child device {} to avoid reporting invalid BlueStore data from phantom Atari partitions.'.format(dev),
-                                    'failed to determine if parent device {} is BlueStore. err: {}'.format(parent, e)))
-                        continue
-
-            bs_info = _get_bluestore_info(dev)
+        for info_device in info_devices:
+            bs_info = _get_bluestore_info(info_device['NAME'])
             if bs_info is None:
                 # None is also returned in the rare event that there is an issue reading info from
                 # a BlueStore disk, so be sure to log our assumption that it isn't bluestore
-                logger.info('device {} does not have BlueStore information'.format(dev))
+                logger.info('device {} does not have BlueStore information'.format(info_device['NAME']))
                 continue
             uuid = bs_info['osd_uuid']
             if uuid not in result:
index 6165da3a64346d3e1b8bebb6ee1b531a8129e8bc..b3201a89dafce061f3915157274cf54f7e0d4b9c 100644 (file)
@@ -22,18 +22,7 @@ def prepare_dmcrypt(key, device, device_type, fsid):
         return ''
     kname = disk.lsblk(device)['KNAME']
     mapping = 'ceph-{}-{}-{}-dmcrypt'.format(fsid, kname, device_type)
-    # format data device
-    encryption_utils.luks_format(
-        key,
-        device
-    )
-    encryption_utils.luks_open(
-        key,
-        device,
-        mapping
-    )
-
-    return '/dev/mapper/{}'.format(mapping)
+    return encryption_utils.prepare_dmcrypt(key, device, mapping)
 
 def prepare_bluestore(block, wal, db, secrets, osd_id, fsid, tmpfs):
     """
@@ -122,7 +111,9 @@ class Prepare(object):
 
         # reuse a given ID if it exists, otherwise create a new ID
         self.osd_id = prepare_utils.create_id(
-            osd_fsid, json.dumps(secrets))
+            osd_fsid,
+            json.dumps(secrets),
+            osd_id=self.args.osd_id)
 
         prepare_bluestore(
             self.args.data,
index aa70e92f19d5c949af903952aacfefb8690bcee0..da0ff6c882ee5c639444fbc72636939134784cbc 100644 (file)
@@ -45,18 +45,27 @@ class Inventory(object):
                   'libstoragemgmt'),
             default=False,
         )
+        parser.add_argument(
+            '--list-all',
+            action='store_true',
+            help=('Whether ceph-volume should list lvm devices'),
+            default=False
+        )
         self.args = parser.parse_args(self.argv)
         if self.args.path:
             self.format_report(Device(self.args.path, with_lsm=self.args.with_lsm))
         else:
             self.format_report(Devices(filter_for_batch=self.args.filter_for_batch,
-                                       with_lsm=self.args.with_lsm))
+                                       with_lsm=self.args.with_lsm,
+                                       list_all=self.args.list_all))
 
     def get_report(self):
         if self.args.path:
             return Device(self.args.path, with_lsm=self.args.with_lsm).json_report()
         else:
-            return Devices(filter_for_batch=self.args.filter_for_batch, with_lsm=self.args.with_lsm).json_report()
+            return Devices(filter_for_batch=self.args.filter_for_batch,
+                           with_lsm=self.args.with_lsm,
+                           list_all=self.args.list_all).json_report()
 
     def format_report(self, inventory):
         if self.args.format == 'json':
index 603b2b85476eb8d2f4c54814b87141741896816c..139328b4a0d576aec9371608084c748c7ec65356 100644 (file)
@@ -883,3 +883,15 @@ class TestGetSingleLV(object):
 
         assert isinstance(lv_, api.Volume)
         assert lv_.name == 'lv1'
+
+
+class TestHelpers:
+    def test_get_lv_path_from_mapper(self):
+        mapper = '/dev/mapper/ceph--c1a97e46--234c--46aa--a549--3ca1d1f356a9-osd--block--32e8e896--172e--4a38--a06a--3702598510ec'
+        lv_path = api.get_lv_path_from_mapper(mapper)
+        assert lv_path == '/dev/ceph-c1a97e46-234c-46aa-a549-3ca1d1f356a9/osd-block-32e8e896-172e-4a38-a06a-3702598510ec'
+
+    def test_get_mapper_from_lv_path(self):
+        lv_path = '/dev/ceph-c1a97e46-234c-46aa-a549-3ca1d1f356a9/osd-block-32e8e896-172e-4a38-a06a-3702598510ec'
+        mapper = api.get_mapper_from_lv_path(lv_path)
+        assert mapper == '/dev/mapper/ceph--c1a97e46--234c--46aa--a549--3ca1d1f356a9/osd--block--32e8e896--172e--4a38--a06a/3702598510ec'
index 4b8304ce6a9996ebc564086209fd03c4aee83384..044fd35196fdf716f0e7ac530716b3a0f48dd5ad 100644 (file)
@@ -56,4 +56,4 @@ class TestDeactivate(object):
         p_get_lvs.return_value = [FooVolume]
 
         deactivate.deactivate_osd(0)
-        p_dm_close.assert_called_with('123')
+        p_dm_close.assert_called_with(mapping='123', skip_path_check=True)
index 4c86d0ca1c4745de15373ae394840a1a19a26695..7e516f3d23bd9b14e8eb51aa7f97ff836a330c2a 100644 (file)
@@ -5,6 +5,7 @@ from ceph_volume.api import lvm as api
 from ceph_volume.devices.lvm import migrate
 from ceph_volume.util.device import Device
 from ceph_volume.util import system
+from ceph_volume.util import encryption as encryption_utils
 
 class TestGetClusterName(object):
 
@@ -520,6 +521,9 @@ class TestNew(object):
     def mock_get_lvs(self, *args, **kwargs):
         return self.mock_volumes.pop(0)
 
+    def mock_prepare_dmcrypt(self, *args, **kwargs):
+        return '/dev/mapper/' + kwargs['mapping']
+
     def test_newdb_non_root(self):
         with pytest.raises(Exception) as error:
             migrate.NewDB(argv=[
@@ -990,6 +994,74 @@ class TestNew(object):
             '--dev-target', '/dev/VolGroup/target_volume',
             '--command', 'bluefs-bdev-new-wal']
 
+    @patch('os.getuid')
+    def test_newwal_encrypted(self, m_getuid, monkeypatch, capsys):
+        m_getuid.return_value = 0
+
+        source_tags = \
+        'ceph.osd_id=0,ceph.type=data,ceph.osd_fsid=1234,ceph.encrypted=1'
+
+        data_vol = api.Volume(lv_name='volume1', lv_uuid='datauuid', vg_name='vg',
+                         lv_path='/dev/VolGroup/lv1', lv_tags=source_tags)
+
+        self.mock_single_volumes = {'/dev/VolGroup/lv1': data_vol}
+
+        monkeypatch.setattr(migrate.api, 'get_single_lv', self.mock_get_single_lv)
+
+        self.mock_process_input = []
+        monkeypatch.setattr(process, 'call', self.mock_process)
+
+        self.mock_volume = api.Volume(lv_name='target_volume1', lv_uuid='target_uuid', vg_name='vg',
+                                      lv_path='/dev/VolGroup/target_volume',
+                                      lv_tags='')
+        monkeypatch.setattr(api, 'get_lv_by_fullname', self.mock_get_lv_by_fullname)
+
+        monkeypatch.setattr("ceph_volume.systemd.systemctl.osd_is_active", lambda id: False)
+
+        #find_associated_devices will call get_lvs() 4 times
+        # and this needs results to be arranged that way
+        self.mock_volumes = []
+        self.mock_volumes.append([data_vol])
+        self.mock_volumes.append([data_vol])
+        self.mock_volumes.append([])
+        self.mock_volumes.append([])
+
+        monkeypatch.setattr(migrate.api, 'get_lvs', self.mock_get_lvs)
+
+        monkeypatch.setattr(migrate, 'get_cluster_name', lambda osd_id, osd_fsid: 'cluster')
+        monkeypatch.setattr(system, 'chown', lambda path: 0)
+
+        monkeypatch.setattr(encryption_utils, 'prepare_dmcrypt', self.mock_prepare_dmcrypt)
+
+        migrate.NewWAL(argv=[
+            '--osd-id', '2',
+            '--osd-fsid', '55BD4219-16A7-4037-BC20-0F158EFCC83D',
+            '--target', 'vgname/new_wal']).main()
+
+        n = len(self.mock_process_input)
+        assert n >= 3
+
+        assert self.mock_process_input[n - 3] == [
+            'lvchange',
+            '--addtag', 'ceph.wal_uuid=target_uuid',
+            '--addtag', 'ceph.wal_device=/dev/VolGroup/target_volume',
+            '/dev/VolGroup/lv1']
+
+        assert self.mock_process_input[n - 2].sort() == [
+            'lvchange',
+            '--addtag', 'ceph.osd_id=0',
+            '--addtag', 'ceph.type=wal',
+            '--addtag', 'ceph.osd_fsid=1234',
+            '--addtag', 'ceph.wal_uuid=target_uuid',
+            '--addtag', 'ceph.wal_device=/dev/VolGroup/target_volume',
+            '/dev/VolGroup/target_volume'].sort()
+
+        assert self.mock_process_input[n - 1] == [
+            'ceph-bluestore-tool',
+            '--path', '/var/lib/ceph/osd/cluster-2',
+            '--dev-target', '/dev/mapper/target_uuid',
+            '--command', 'bluefs-bdev-new-wal']
+
 class TestMigrate(object):
 
     def test_invalid_osd_id_passed(self, is_root):
@@ -1014,6 +1086,15 @@ class TestMigrate(object):
     def mock_get_lvs(self, *args, **kwargs):
         return self.mock_volumes.pop(0)
 
+    mock_prepare_dmcrypt_uuid = ''
+    def mock_prepare_dmcrypt(self, *args, **kwargs):
+        self.mock_prepare_dmcrypt_uuid = kwargs['mapping']
+        return '/dev/mapper/' + kwargs['mapping']
+
+    mock_dmcrypt_close_uuid = []
+    def mock_dmcrypt_close(self, *args, **kwargs):
+        self.mock_dmcrypt_close_uuid.append(kwargs['mapping'])
+
     def test_get_source_devices(self, monkeypatch):
 
         source_tags = 'ceph.osd_id=2,ceph.type=data,ceph.osd_fsid=1234'
@@ -1245,6 +1326,120 @@ Example calls for supported scenarios:
             '--devs-source', '/var/lib/ceph/osd/ceph-2/block',
             '--devs-source', '/var/lib/ceph/osd/ceph-2/block.db']
 
+    @patch('os.getuid')
+    def test_migrate_data_db_to_new_db_encrypted(self, m_getuid, monkeypatch):
+        m_getuid.return_value = 0
+
+        source_tags = 'ceph.osd_id=2,ceph.type=data,ceph.osd_fsid=1234,' \
+        'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,'\
+        'ceph.encrypted=1'
+        source_db_tags = 'ceph.osd_id=2,ceph.type=db,ceph.osd_fsid=1234,' \
+        'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,'\
+        'ceph.encrypted=1'
+
+        data_vol = api.Volume(lv_name='volume1',
+                              lv_uuid='datauuid',
+                              vg_name='vg',
+                              lv_path='/dev/VolGroup/lv1',
+                              lv_tags=source_tags)
+        db_vol = api.Volume(lv_name='volume2',
+                            lv_uuid='dbuuid',
+                            vg_name='vg',
+                            lv_path='/dev/VolGroup/lv2',
+                            lv_tags=source_db_tags)
+
+        self.mock_single_volumes = {
+            '/dev/VolGroup/lv1': data_vol,
+            '/dev/VolGroup/lv2': db_vol,
+        }
+        monkeypatch.setattr(migrate.api, 'get_single_lv',
+            self.mock_get_single_lv)
+
+        self.mock_volume = api.Volume(lv_name='volume2_new', lv_uuid='new-db-uuid',
+                                      vg_name='vg',
+                                      lv_path='/dev/VolGroup/lv2_new',
+                                      lv_tags='')
+        monkeypatch.setattr(api, 'get_lv_by_fullname',
+            self.mock_get_lv_by_fullname)
+
+        self.mock_process_input = []
+        monkeypatch.setattr(process, 'call', self.mock_process)
+
+        devices = []
+        devices.append([Device('/dev/VolGroup/lv1'), 'block'])
+        devices.append([Device('/dev/VolGroup/lv2'), 'db'])
+
+        monkeypatch.setattr(migrate, 'find_associated_devices',
+            lambda osd_id, osd_fsid: devices)
+
+
+        monkeypatch.setattr("ceph_volume.systemd.systemctl.osd_is_active",
+            lambda id: False)
+
+        monkeypatch.setattr(migrate, 'get_cluster_name',
+            lambda osd_id, osd_fsid: 'ceph')
+        monkeypatch.setattr(system, 'chown', lambda path: 0)
+        monkeypatch.setattr(encryption_utils, 'prepare_dmcrypt', self.mock_prepare_dmcrypt)
+        monkeypatch.setattr(encryption_utils, 'dmcrypt_close', self.mock_dmcrypt_close)
+
+        m = migrate.Migrate(argv=[
+            '--osd-id', '2',
+            '--osd-fsid', '1234',
+            '--from', 'data', 'db', 'wal',
+            '--target', 'vgname/new_wal'])
+        m.main()
+
+        assert self.mock_prepare_dmcrypt_uuid == self.mock_volume.lv_uuid
+
+        n = len(self.mock_dmcrypt_close_uuid)
+        assert n >= 1
+        assert self.mock_dmcrypt_close_uuid[n-1] == db_vol.lv_uuid
+
+        n = len(self.mock_process_input)
+        assert n >= 5
+
+        assert self. mock_process_input[n-5] == [
+            'lvchange',
+            '--deltag', 'ceph.osd_id=2',
+            '--deltag', 'ceph.type=db',
+            '--deltag', 'ceph.osd_fsid=1234',
+            '--deltag', 'ceph.cluster_name=ceph',
+            '--deltag', 'ceph.db_uuid=dbuuid',
+            '--deltag', 'ceph.db_device=db_dev',
+            '--deltag', 'ceph.encrypted=1',
+            '/dev/VolGroup/lv2']
+
+        assert self. mock_process_input[n-4] == [
+            'lvchange',
+            '--deltag', 'ceph.db_uuid=dbuuid',
+            '--deltag', 'ceph.db_device=db_dev',
+            '/dev/VolGroup/lv1']
+
+        assert self. mock_process_input[n-3] == [
+            'lvchange',
+            '--addtag', 'ceph.db_uuid=new-db-uuid',
+            '--addtag', 'ceph.db_device=/dev/VolGroup/lv2_new',
+            '/dev/VolGroup/lv1']
+
+        assert self. mock_process_input[n-2] == [
+            'lvchange',
+            '--addtag', 'ceph.osd_id=2',
+            '--addtag', 'ceph.type=db',
+            '--addtag', 'ceph.osd_fsid=1234',
+            '--addtag', 'ceph.cluster_name=ceph',
+            '--addtag', 'ceph.encrypted=1',
+            '--addtag', 'ceph.db_uuid=new-db-uuid',
+            '--addtag', 'ceph.db_device=/dev/VolGroup/lv2_new',
+            '/dev/VolGroup/lv2_new']
+
+        assert self. mock_process_input[n-1] == [
+            'ceph-bluestore-tool',
+            '--path', '/var/lib/ceph/osd/ceph-2',
+            '--dev-target', '/dev/mapper/new-db-uuid',
+            '--command', 'bluefs-bdev-migrate',
+            '--devs-source', '/var/lib/ceph/osd/ceph-2/block',
+            '--devs-source', '/var/lib/ceph/osd/ceph-2/block.db']
+
     def test_migrate_data_db_to_new_db_active_systemd(self, is_root, monkeypatch, capsys):
         source_tags = 'ceph.osd_id=2,ceph.type=data,ceph.osd_fsid=1234,' \
         'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev'
@@ -1653,6 +1848,147 @@ Example calls for supported scenarios:
             '--devs-source', '/var/lib/ceph/osd/ceph-2/block.db',
             '--devs-source', '/var/lib/ceph/osd/ceph-2/block.wal']
 
+    @patch('os.getuid')
+    def test_migrate_data_db_wal_to_new_db_encrypted(self, m_getuid, monkeypatch):
+        m_getuid.return_value = 0
+
+        source_tags = 'ceph.osd_id=2,ceph.type=data,ceph.osd_fsid=1234,' \
+        'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,' \
+        'ceph.wal_uuid=waluuid,ceph.wal_device=wal_dev,ceph.encrypted=1'
+        source_db_tags = 'ceph.osd_id=2,ceph.type=db,ceph.osd_fsid=1234,' \
+        'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,' \
+        'ceph.encrypted=1'
+        source_wal_tags = 'ceph.osd_id=0,ceph.type=wal,ceph.osd_fsid=1234,' \
+        'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,' \
+        'ceph.wal_uuid=waluuid,ceph.wal_device=wal_dev,ceph.encrypted=1'
+
+        data_vol = api.Volume(lv_name='volume1',
+                              lv_uuid='datauuid',
+                              vg_name='vg',
+                              lv_path='/dev/VolGroup/lv1',
+                              lv_tags=source_tags)
+        db_vol = api.Volume(lv_name='volume2',
+                            lv_uuid='dbuuid',
+                            vg_name='vg',
+                            lv_path='/dev/VolGroup/lv2',
+                            lv_tags=source_db_tags)
+
+        wal_vol = api.Volume(lv_name='volume3',
+                             lv_uuid='waluuid',
+                             vg_name='vg',
+                             lv_path='/dev/VolGroup/lv3',
+                             lv_tags=source_wal_tags)
+
+        self.mock_single_volumes = {
+            '/dev/VolGroup/lv1': data_vol,
+            '/dev/VolGroup/lv2': db_vol,
+            '/dev/VolGroup/lv3': wal_vol,
+        }
+        monkeypatch.setattr(migrate.api, 'get_single_lv',
+            self.mock_get_single_lv)
+
+        self.mock_volume = api.Volume(lv_name='volume2_new', lv_uuid='new-db-uuid',
+                                      vg_name='vg',
+                                      lv_path='/dev/VolGroup/lv2_new',
+                                      lv_tags='')
+        monkeypatch.setattr(api, 'get_lv_by_fullname',
+            self.mock_get_lv_by_fullname)
+
+        self.mock_process_input = []
+        monkeypatch.setattr(process, 'call', self.mock_process)
+
+        devices = []
+        devices.append([Device('/dev/VolGroup/lv1'), 'block'])
+        devices.append([Device('/dev/VolGroup/lv2'), 'db'])
+        devices.append([Device('/dev/VolGroup/lv3'), 'wal'])
+
+        monkeypatch.setattr(migrate, 'find_associated_devices',
+            lambda osd_id, osd_fsid: devices)
+
+        monkeypatch.setattr("ceph_volume.systemd.systemctl.osd_is_active",
+            lambda id: False)
+
+        monkeypatch.setattr(migrate, 'get_cluster_name',
+            lambda osd_id, osd_fsid: 'ceph')
+        monkeypatch.setattr(system, 'chown', lambda path: 0)
+        monkeypatch.setattr(encryption_utils, 'prepare_dmcrypt', self.mock_prepare_dmcrypt)
+        monkeypatch.setattr(encryption_utils, 'dmcrypt_close', self.mock_dmcrypt_close)
+
+        m = migrate.Migrate(argv=[
+            '--osd-id', '2',
+            '--osd-fsid', '1234',
+            '--from', 'data', 'db', 'wal',
+            '--target', 'vgname/new_wal'])
+        m.main()
+
+        assert self.mock_prepare_dmcrypt_uuid == self.mock_volume.lv_uuid
+
+        n = len(self.mock_dmcrypt_close_uuid)
+        assert n >= 2
+        assert self.mock_dmcrypt_close_uuid[n-2] == db_vol.lv_uuid
+        assert self.mock_dmcrypt_close_uuid[n-1] == wal_vol.lv_uuid
+
+        n = len(self.mock_process_input)
+        assert n >= 6
+
+        assert self. mock_process_input[n-6] == [
+            'lvchange',
+            '--deltag', 'ceph.osd_id=2',
+            '--deltag', 'ceph.type=db',
+            '--deltag', 'ceph.osd_fsid=1234',
+            '--deltag', 'ceph.cluster_name=ceph',
+            '--deltag', 'ceph.db_uuid=dbuuid',
+            '--deltag', 'ceph.db_device=db_dev',
+            '--deltag', 'ceph.encrypted=1',
+            '/dev/VolGroup/lv2']
+
+        assert self. mock_process_input[n-5] == [
+            'lvchange',
+            '--deltag', 'ceph.osd_id=0',
+            '--deltag', 'ceph.type=wal',
+            '--deltag', 'ceph.osd_fsid=1234',
+            '--deltag', 'ceph.cluster_name=ceph',
+            '--deltag', 'ceph.db_uuid=dbuuid',
+            '--deltag', 'ceph.db_device=db_dev',
+            '--deltag', 'ceph.wal_uuid=waluuid',
+            '--deltag', 'ceph.wal_device=wal_dev',
+            '--deltag', 'ceph.encrypted=1',
+            '/dev/VolGroup/lv3']
+
+        assert self. mock_process_input[n-4] == [
+            'lvchange',
+            '--deltag', 'ceph.db_uuid=dbuuid',
+            '--deltag', 'ceph.db_device=db_dev',
+            '--deltag', 'ceph.wal_uuid=waluuid',
+            '--deltag', 'ceph.wal_device=wal_dev',
+            '/dev/VolGroup/lv1']
+
+        assert self. mock_process_input[n-3] == [
+            'lvchange',
+            '--addtag', 'ceph.db_uuid=new-db-uuid',
+            '--addtag', 'ceph.db_device=/dev/VolGroup/lv2_new',
+            '/dev/VolGroup/lv1']
+
+        assert self. mock_process_input[n-2] == [
+            'lvchange',
+            '--addtag', 'ceph.osd_id=2',
+            '--addtag', 'ceph.type=db',
+            '--addtag', 'ceph.osd_fsid=1234',
+            '--addtag', 'ceph.cluster_name=ceph',
+            '--addtag', 'ceph.encrypted=1',
+            '--addtag', 'ceph.db_uuid=new-db-uuid',
+            '--addtag', 'ceph.db_device=/dev/VolGroup/lv2_new',
+            '/dev/VolGroup/lv2_new']
+
+        assert self. mock_process_input[n-1] == [
+            'ceph-bluestore-tool',
+            '--path', '/var/lib/ceph/osd/ceph-2',
+            '--dev-target', '/dev/mapper/new-db-uuid',
+            '--command', 'bluefs-bdev-migrate',
+            '--devs-source', '/var/lib/ceph/osd/ceph-2/block',
+            '--devs-source', '/var/lib/ceph/osd/ceph-2/block.db',
+            '--devs-source', '/var/lib/ceph/osd/ceph-2/block.wal']
+
     @patch('os.getuid')
     def test_dont_migrate_data_db_wal_to_new_data(self,
                                                   m_getuid,
@@ -2129,6 +2465,120 @@ Example calls for supported scenarios:
             '--devs-source', '/var/lib/ceph/osd/ceph-2/block',
             '--devs-source', '/var/lib/ceph/osd/ceph-2/block.wal']
 
+    @patch('os.getuid')
+    def test_migrate_data_wal_to_db_encrypted(self,
+                                              m_getuid,
+                                              monkeypatch,
+                                              capsys):
+        m_getuid.return_value = 0
+
+        source_tags = 'ceph.osd_id=2,ceph.type=data,ceph.osd_fsid=1234,' \
+        'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,' \
+        'ceph.wal_uuid=waluuid,ceph.wal_device=wal_dev,ceph.encrypted=1'
+        source_db_tags = 'ceph.osd_id=2,ceph.type=db,ceph.osd_fsid=1234,' \
+        'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,' \
+        'ceph.wal_uuid=waluuid,ceph.wal_device=wal_dev,ceph.encrypted=1'
+        source_wal_tags = 'ceph.osd_id=2,ceph.type=wal,ceph.osd_fsid=1234,' \
+        'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,' \
+        'ceph.wal_uuid=waluuid,ceph.wal_device=wal_dev,ceph.encrypted=1'
+
+        data_vol = api.Volume(lv_name='volume1',
+                              lv_uuid='datauuid',
+                              vg_name='vg',
+                              lv_path='/dev/VolGroup/lv1',
+                              lv_tags=source_tags)
+        db_vol = api.Volume(lv_name='volume2',
+                            lv_uuid='dbuuid',
+                            vg_name='vg',
+                            lv_path='/dev/VolGroup/lv2',
+                            lv_tags=source_db_tags)
+
+        wal_vol = api.Volume(lv_name='volume3',
+                             lv_uuid='waluuid',
+                             vg_name='vg',
+                             lv_path='/dev/VolGroup/lv3',
+                             lv_tags=source_wal_tags)
+
+        self.mock_single_volumes = {
+            '/dev/VolGroup/lv1': data_vol,
+            '/dev/VolGroup/lv2': db_vol,
+            '/dev/VolGroup/lv3': wal_vol,
+        }
+        monkeypatch.setattr(migrate.api, 'get_single_lv',
+            self.mock_get_single_lv)
+
+        self.mock_volume = db_vol
+        monkeypatch.setattr(api, 'get_lv_by_fullname',
+            self.mock_get_lv_by_fullname)
+
+        self.mock_process_input = []
+        monkeypatch.setattr(process, 'call', self.mock_process)
+
+        devices = []
+        devices.append([Device('/dev/VolGroup/lv1'), 'block'])
+        devices.append([Device('/dev/VolGroup/lv2'), 'db'])
+        devices.append([Device('/dev/VolGroup/lv3'), 'wal'])
+
+        monkeypatch.setattr(migrate, 'find_associated_devices',
+            lambda osd_id, osd_fsid: devices)
+
+        monkeypatch.setattr("ceph_volume.systemd.systemctl.osd_is_active",
+            lambda id: False)
+
+        monkeypatch.setattr(migrate, 'get_cluster_name',
+            lambda osd_id, osd_fsid: 'ceph')
+        monkeypatch.setattr(system, 'chown', lambda path: 0)
+        monkeypatch.setattr(encryption_utils, 'prepare_dmcrypt', self.mock_prepare_dmcrypt)
+        monkeypatch.setattr(encryption_utils, 'dmcrypt_close', self.mock_dmcrypt_close)
+        m = migrate.Migrate(argv=[
+            '--osd-id', '2',
+            '--osd-fsid', '1234',
+            '--from', 'db', 'data', 'wal',
+            '--target', 'vgname/db'])
+
+        m.main()
+
+        assert self.mock_prepare_dmcrypt_uuid == ''
+
+        n = len(self.mock_dmcrypt_close_uuid)
+        assert n >= 1
+        assert self.mock_dmcrypt_close_uuid[n-1] == wal_vol.lv_uuid
+
+        n = len(self.mock_process_input)
+        assert n >= 1
+        for s in self.mock_process_input:
+            print(s)
+
+        assert self. mock_process_input[n-4] == [
+            'lvchange',
+            '--deltag', 'ceph.osd_id=2',
+            '--deltag', 'ceph.type=wal',
+            '--deltag', 'ceph.osd_fsid=1234',
+            '--deltag', 'ceph.cluster_name=ceph',
+            '--deltag', 'ceph.db_uuid=dbuuid',
+            '--deltag', 'ceph.db_device=db_dev',
+            '--deltag', 'ceph.wal_uuid=waluuid',
+            '--deltag', 'ceph.wal_device=wal_dev',
+            '--deltag', 'ceph.encrypted=1',
+            '/dev/VolGroup/lv3']
+        assert self. mock_process_input[n-3] == [
+            'lvchange',
+            '--deltag', 'ceph.wal_uuid=waluuid',
+            '--deltag', 'ceph.wal_device=wal_dev',
+            '/dev/VolGroup/lv1']
+        assert self. mock_process_input[n-2] == [
+            'lvchange',
+            '--deltag', 'ceph.wal_uuid=waluuid',
+            '--deltag', 'ceph.wal_device=wal_dev',
+            '/dev/VolGroup/lv2']
+        assert self. mock_process_input[n-1] == [
+            'ceph-bluestore-tool',
+            '--path', '/var/lib/ceph/osd/ceph-2',
+            '--dev-target', '/var/lib/ceph/osd/ceph-2/block.db',
+            '--command', 'bluefs-bdev-migrate',
+            '--devs-source', '/var/lib/ceph/osd/ceph-2/block',
+            '--devs-source', '/var/lib/ceph/osd/ceph-2/block.wal']
+
     def test_migrate_data_wal_to_db_active_systemd(self, is_root, monkeypatch, capsys):
         source_tags = 'ceph.osd_id=2,ceph.type=data,ceph.osd_fsid=1234,' \
         'ceph.cluster_name=ceph,ceph.db_uuid=dbuuid,ceph.db_device=db_dev,' \
index f9e2b76b27d40eb7bb83b18d1b781fa5d2c2b6d5..ce1f9466fd56782360314938b7b055bf914e50a2 100644 (file)
@@ -1,7 +1,37 @@
 import os
 import pytest
 from ceph_volume.util import disk
-from mock.mock import patch
+from mock.mock import patch, MagicMock
+
+
+class TestFunctions:
+    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=False))
+    def test_is_device_path_does_not_exist(self):
+        assert not disk.is_device('/dev/foo')
+
+    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
+    def test_is_device_dev_doesnt_startswith_dev(self):
+        assert not disk.is_device('/foo')
+
+    @patch('ceph_volume.util.disk.allow_loop_devices', MagicMock(return_value=False))
+    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
+    def test_is_device_loop_not_allowed(self):
+        assert not disk.is_device('/dev/loop123')
+
+    @patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo', 'TYPE': 'disk'}))
+    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
+    def test_is_device_type_disk(self):
+        assert disk.is_device('/dev/foo')
+
+    @patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo', 'TYPE': 'mpath'}))
+    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
+    def test_is_device_type_mpath(self):
+        assert disk.is_device('/dev/foo')
+
+    @patch('ceph_volume.util.disk.lsblk', MagicMock(return_value={'NAME': 'foo1', 'TYPE': 'part'}))
+    @patch('ceph_volume.util.disk.os.path.exists', MagicMock(return_value=True))
+    def test_is_device_type_part(self):
+        assert not disk.is_device('/dev/foo1')
 
 
 class TestLsblkParser(object):
@@ -225,7 +255,6 @@ class TestGetDevices(object):
         result = disk.get_devices(_sys_block_path=str(tmpdir))
         assert result == {}
 
-    @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
     def test_sda_block_is_found(self, patched_get_block_devs_sysfs, fake_filesystem):
         sda_path = '/dev/sda'
         patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
@@ -235,7 +264,6 @@ class TestGetDevices(object):
         assert result[sda_path]['model'] == ''
         assert result[sda_path]['partitions'] == {}
 
-    @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
     def test_sda_size(self, patched_get_block_devs_sysfs, fake_filesystem):
         sda_path = '/dev/sda'
         patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
@@ -244,7 +272,6 @@ class TestGetDevices(object):
         assert list(result.keys()) == [sda_path]
         assert result[sda_path]['human_readable_size'] == '512.00 KB'
 
-    @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
     def test_sda_sectorsize_fallsback(self, patched_get_block_devs_sysfs, fake_filesystem):
         # if no sectorsize, it will use queue/hw_sector_size
         sda_path = '/dev/sda'
@@ -254,7 +281,6 @@ class TestGetDevices(object):
         assert list(result.keys()) == [sda_path]
         assert result[sda_path]['sectorsize'] == '1024'
 
-    @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
     def test_sda_sectorsize_from_logical_block(self, patched_get_block_devs_sysfs, fake_filesystem):
         sda_path = '/dev/sda'
         patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
@@ -262,7 +288,6 @@ class TestGetDevices(object):
         result = disk.get_devices()
         assert result[sda_path]['sectorsize'] == '99'
 
-    @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
     def test_sda_sectorsize_does_not_fallback(self, patched_get_block_devs_sysfs, fake_filesystem):
         sda_path = '/dev/sda'
         patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
@@ -271,7 +296,6 @@ class TestGetDevices(object):
         result = disk.get_devices()
         assert result[sda_path]['sectorsize'] == '99'
 
-    @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
     def test_is_rotational(self, patched_get_block_devs_sysfs, fake_filesystem):
         sda_path = '/dev/sda'
         patched_get_block_devs_sysfs.return_value = [[sda_path, sda_path, 'disk']]
@@ -279,14 +303,12 @@ class TestGetDevices(object):
         result = disk.get_devices()
         assert result[sda_path]['rotational'] == '1'
 
-    @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
     def test_is_ceph_rbd(self, patched_get_block_devs_sysfs, fake_filesystem):
         rbd_path = '/dev/rbd0'
         patched_get_block_devs_sysfs.return_value = [[rbd_path, rbd_path, 'disk']]
         result = disk.get_devices()
         assert rbd_path not in result
 
-    @patch('ceph_volume.util.disk.is_locked_raw_device', lambda x: False)
     def test_actuator_device(self, patched_get_block_devs_sysfs, fake_filesystem):
         sda_path = '/dev/sda'
         fake_actuator_nb = 2
index 0a3799ff1b4c0ce001e5226fa0048417c9b92c30..d61222afe0a0bcf4fc567af72df823e4608a62c8 100644 (file)
@@ -33,20 +33,30 @@ class Devices(object):
     A container for Device instances with reporting
     """
 
-    def __init__(self, filter_for_batch=False, with_lsm=False):
+    def __init__(self,
+                 filter_for_batch=False,
+                 with_lsm=False,
+                 list_all=False):
         lvs = lvm.get_lvs()
         lsblk_all = disk.lsblk_all()
         all_devices_vgs = lvm.get_all_devices_vgs()
         if not sys_info.devices:
             sys_info.devices = disk.get_devices()
-        self.devices = [Device(k,
-                               with_lsm,
-                               lvs=lvs,
-                               lsblk_all=lsblk_all,
-                               all_devices_vgs=all_devices_vgs) for k in
-                        sys_info.devices.keys()]
-        if filter_for_batch:
-            self.devices = [d for d in self.devices if d.available_lvm_batch]
+        self._devices = [Device(k,
+                                with_lsm,
+                                lvs=lvs,
+                                lsblk_all=lsblk_all,
+                                all_devices_vgs=all_devices_vgs) for k in
+                         sys_info.devices.keys()]
+        self.devices = []
+        for device in self._devices:
+            if filter_for_batch and not device.available_lvm_batch:
+                continue
+            if device.is_lv and not list_all:
+                continue
+            if device.is_partition and not list_all:
+                continue
+            self.devices.append(device)
 
     def pretty_report(self):
         output = [
@@ -490,7 +500,7 @@ class Device(object):
 
     @property
     def is_acceptable_device(self):
-        return self.is_device or self.is_partition
+        return self.is_device or self.is_partition or self.is_lv
 
     @property
     def is_encrypted(self):
@@ -586,7 +596,6 @@ class Device(object):
         reasons = [
             ('removable', 1, 'removable'),
             ('ro', 1, 'read-only'),
-            ('locked', 1, 'locked'),
         ]
         rejected = [reason for (k, v, reason) in reasons if
                     self.sys_api.get(k, '') == v]
@@ -622,6 +631,8 @@ class Device(object):
             rejected.append('Has GPT headers')
         if self.has_partitions:
             rejected.append('Has partitions')
+        if self.has_fs:
+            rejected.append('Has a FileSystem')
         return rejected
 
     def _check_lvm_reject_reasons(self):
index a69b0077eb238ca0df3488eed7da2ba24d5ccdee..ee061b724007819a5d059c0db2d96f7052d5c38f 100644 (file)
@@ -359,6 +359,10 @@ def is_device(dev):
         if not allow_loop_devices():
             return False
 
+    TYPE = lsblk(dev).get('TYPE')
+    if TYPE:
+        return TYPE in ['disk', 'mpath']
+
     # fallback to stat
     return _stat_is_device(os.lstat(dev).st_mode)
 
@@ -734,28 +738,6 @@ def is_mapper_device(device_name):
     return device_name.startswith(('/dev/mapper', '/dev/dm-'))
 
 
-def is_locked_raw_device(disk_path):
-    """
-    A device can be locked by a third party software like a database.
-    To detect that case, the device is opened in Read/Write and exclusive mode
-    """
-    open_flags = (os.O_RDWR | os.O_EXCL)
-    open_mode = 0
-    fd = None
-
-    try:
-        fd = os.open(disk_path, open_flags, open_mode)
-    except OSError:
-        return 1
-
-    try:
-        os.close(fd)
-    except OSError:
-        return 1
-
-    return 0
-
-
 class AllowLoopDevices(object):
     allow = False
     warned = False
@@ -829,6 +811,19 @@ def get_block_devs_sysfs(_sys_block_path='/sys/block', _sys_dev_block_path='/sys
         result.append([name, kname, "part"])
     return sorted(result, key=lambda x: x[0])
 
+def get_partitions(_sys_dev_block_path ='/sys/dev/block'):
+    devices = os.listdir(_sys_dev_block_path)
+    result = dict()
+    for device in devices:
+        device_path = os.path.join(_sys_dev_block_path, device)
+        is_partition = get_file_contents(os.path.join(device_path, 'partition')) == "1"
+        if not is_partition:
+            continue
+
+        partition_sys_name = os.path.basename(os.readlink(device_path))
+        parent_device_sys_name = os.readlink(device_path).split('/')[-2:-1][0]
+        result[partition_sys_name] = parent_device_sys_name
+    return result
 
 def get_devices(_sys_block_path='/sys/block', device=''):
     """
@@ -844,17 +839,22 @@ def get_devices(_sys_block_path='/sys/block', device=''):
     device_facts = {}
 
     block_devs = get_block_devs_sysfs(_sys_block_path)
+    partitions = get_partitions()
 
-    block_types = ['disk', 'mpath']
+    block_types = ['disk', 'mpath', 'lvm', 'part']
     if allow_loop_devices():
         block_types.append('loop')
 
     for block in block_devs:
+        if block[2] == 'lvm':
+            block[1] = lvm.get_lv_path_from_mapper(block[1])
         devname = os.path.basename(block[0])
         diskname = block[1]
         if block[2] not in block_types:
             continue
         sysdir = os.path.join(_sys_block_path, devname)
+        if block[2] == 'part':
+            sysdir = os.path.join(_sys_block_path, partitions[devname], devname)
         metadata = {}
 
         # If the device is ceph rbd it gets excluded
@@ -882,11 +882,17 @@ def get_devices(_sys_block_path='/sys/block', device=''):
         for key, file_ in facts:
             metadata[key] = get_file_contents(os.path.join(sysdir, file_))
 
-        device_slaves = os.listdir(os.path.join(sysdir, 'slaves'))
+        if block[2] != 'part':
+            device_slaves = os.listdir(os.path.join(sysdir, 'slaves'))
+            metadata['partitions'] = get_partitions_facts(sysdir)
+
         if device_slaves:
             metadata['device_nodes'] = ','.join(device_slaves)
         else:
-            metadata['device_nodes'] = devname
+            if block[2] == 'part':
+                metadata['device_nodes'] = partitions[devname]
+            else:
+                metadata['device_nodes'] = devname
 
         metadata['actuators'] = None
         if os.path.isdir(sysdir + "/queue/independent_access_ranges/"):
@@ -914,7 +920,6 @@ def get_devices(_sys_block_path='/sys/block', device=''):
         metadata['size'] = float(size) * 512
         metadata['human_readable_size'] = human_readable_size(metadata['size'])
         metadata['path'] = diskname
-        metadata['locked'] = is_locked_raw_device(metadata['path'])
         metadata['type'] = block[2]
 
         device_facts[diskname] = metadata
index fdb73e1b1c8ff1ac8d97c3aa32bf7727a757acc2..f8aea80b493539fe618ee239c1e15c097c864657 100644 (file)
@@ -106,20 +106,20 @@ def luks_open(key, device, mapping):
     process.call(command, stdin=key, terminal_verbose=True, show_command=True)
 
 
-def dmcrypt_close(mapping):
+def dmcrypt_close(mapping, skip_path_check=False):
     """
     Encrypt (close) a device, previously decrypted with cryptsetup
 
-    :param mapping:
+    :param mapping: mapping name or path used to correlate device.
+    :param skip_path_check: whether we need path presence validation.
     """
-    if not os.path.exists(mapping):
+    if not skip_path_check and not os.path.exists(mapping):
         logger.debug('device mapper path does not exist %s' % mapping)
         logger.debug('will skip cryptsetup removal')
         return
     # don't be strict about the remove call, but still warn on the terminal if it fails
     process.run(['cryptsetup', 'remove', mapping], stop_on_error=False)
 
-
 def get_dmcrypt_key(osd_id, osd_fsid, lockbox_keyring=None):
     """
     Retrieve the dmcrypt (secret) key stored initially on the monitor. The key
@@ -273,3 +273,22 @@ def legacy_encrypted(device):
             metadata['lockbox'] = d.path
             break
     return metadata
+
+def prepare_dmcrypt(key, device, mapping):
+    """
+    Helper for devices that are encrypted. The operations needed for
+    block, db, wal, or data/journal devices are all the same
+    """
+    if not device:
+        return ''
+    # format data device
+    luks_format(
+        key,
+        device
+    )
+    luks_open(
+        key,
+        device,
+        mapping
+    )
+    return '/dev/mapper/%s' % mapping
index fdb7c9881fa1dcf27df93172b228d95fb33f06d9..8b969bc33e7b7c4a3969b66c4fe7b254cb9ee32c 100644 (file)
@@ -11,7 +11,13 @@ add_custom_command(
     ${CMAKE_CURRENT_SOURCE_DIR}/cephadm.py
     ${CMAKE_CURRENT_SOURCE_DIR}/build.py
   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-  COMMAND ${Python3_EXECUTABLE} build.py ${bin_target_file}
+  COMMAND ${Python3_EXECUTABLE} build.py
+    --set-version-var=CEPH_GIT_VER=${CEPH_GIT_VER}
+    --set-version-var=CEPH_GIT_NICE_VER=${CEPH_GIT_NICE_VER}
+    --set-version-var=CEPH_RELEASE=${CEPH_RELEASE}
+    --set-version-var=CEPH_RELEASE_NAME=${CEPH_RELEASE_NAME}
+    --set-version-var=CEPH_RELEASE_TYPE=${CEPH_RELEASE_TYPE}
+    ${bin_target_file}
 )
 
 add_custom_target(cephadm ALL
index 39c93ce3b3028d452491a549aa050f3711807923..4264b814f1ef7ccc982cf2cdad37f0f8b2de913a 100755 (executable)
@@ -27,6 +27,15 @@ except ImportError:
 log = logging.getLogger(__name__)
 
 
+_VALID_VERS_VARS = [
+    "CEPH_GIT_VER",
+    "CEPH_GIT_NICE_VER",
+    "CEPH_RELEASE",
+    "CEPH_RELEASE_NAME",
+    "CEPH_RELEASE_TYPE",
+]
+
+
 def _reexec(python):
     """Switch to the selected version of python by exec'ing into the desired
     python path.
@@ -45,7 +54,7 @@ def _did_rexec():
     return bool(os.environ.get("_BUILD_PYTHON_SET", ""))
 
 
-def _build(dest, src):
+def _build(dest, src, versioning_vars=None):
     """Build the binary."""
     os.chdir(src)
     tempdir = pathlib.Path(tempfile.mkdtemp(suffix=".cephadm.build"))
@@ -61,6 +70,8 @@ def _build(dest, src):
         # dir to be zipped. For now we just have a simple call to copy
         # (and rename) the one file we care about.
         shutil.copy("cephadm.py", tempdir / "__main__.py")
+        if versioning_vars:
+            generate_version_file(versioning_vars, tempdir / "_version.py")
         _compile(dest, tempdir)
     finally:
         shutil.rmtree(tempdir)
@@ -115,6 +126,24 @@ def _install_deps(tempdir):
     )
 
 
+def generate_version_file(versioning_vars, dest):
+    log.info("Generating version file")
+    log.debug("versioning_vars=%r", versioning_vars)
+    with open(dest, "w") as fh:
+        print("# GENERATED FILE -- do not edit", file=fh)
+        for key, value in versioning_vars:
+            print(f"{key} = {value!r}", file=fh)
+
+
+def version_kv_pair(value):
+    if "=" not in value:
+        raise argparse.ArgumentTypeError(f"not a key=value pair: {value!r}")
+    key, value = value.split("=", 1)
+    if key not in _VALID_VERS_VARS:
+        raise argparse.ArgumentTypeError(f"Unexpected key: {key!r}")
+    return key, value
+
+
 def main():
     handler = logging.StreamHandler(sys.stdout)
     handler.setFormatter(logging.Formatter("cephadm/build.py: %(message)s"))
@@ -132,6 +161,14 @@ def main():
     parser.add_argument(
         "--python", help="The path to the desired version of python"
     )
+    parser.add_argument(
+        "--set-version-var",
+        "-S",
+        type=version_kv_pair,
+        dest="version_vars",
+        action="append",
+        help="Set a key=value pair in the generated version info file",
+    )
     args = parser.parse_args()
 
     if not _did_rexec() and args.python:
@@ -160,7 +197,7 @@ def main():
     dest = pathlib.Path(args.dest).absolute()
     log.info("Source Dir: %s", source)
     log.info("Destination Path: %s", dest)
-    _build(dest, source)
+    _build(dest, source, versioning_vars=args.version_vars)
 
 
 if __name__ == "__main__":
index 593a08f009e9a5bd9a709505333598e4346f010b..bcb82c4c4d4bf065063b21d764750aa76372c616 100755 (executable)
@@ -26,13 +26,13 @@ import errno
 import struct
 import ssl
 from enum import Enum
-from typing import Dict, List, Tuple, Optional, Union, Any, NoReturn, Callable, IO, Sequence, TypeVar, cast, Set, Iterable, TextIO
+from typing import Dict, List, Tuple, Optional, Union, Any, NoReturn, Callable, IO, Sequence, TypeVar, cast, Set, Iterable, TextIO, Generator
 
 import re
 import uuid
 
 from configparser import ConfigParser
-from contextlib import redirect_stdout
+from contextlib import redirect_stdout, contextmanager
 from functools import wraps
 from glob import glob
 from io import StringIO
@@ -55,6 +55,7 @@ DEFAULT_ALERT_MANAGER_IMAGE = 'quay.io/prometheus/alertmanager:v0.25.0'
 DEFAULT_GRAFANA_IMAGE = 'quay.io/ceph/ceph-grafana:9.4.7'
 DEFAULT_HAPROXY_IMAGE = 'quay.io/ceph/haproxy:2.3'
 DEFAULT_KEEPALIVED_IMAGE = 'quay.io/ceph/keepalived:2.2.4'
+DEFAULT_NVMEOF_IMAGE = 'quay.io/ceph/nvmeof:0.0.1'
 DEFAULT_SNMP_GATEWAY_IMAGE = 'docker.io/maxwo/snmp-notifier:v1.2.1'
 DEFAULT_ELASTICSEARCH_IMAGE = 'quay.io/omrizeneva/elasticsearch:6.8.23'
 DEFAULT_JAEGER_COLLECTOR_IMAGE = 'quay.io/jaegertracing/jaeger-collector:1.29'
@@ -79,6 +80,7 @@ CEPH_DEFAULT_KEYRING = f'/etc/ceph/{CEPH_KEYRING}'
 CEPH_DEFAULT_PUBKEY = f'/etc/ceph/{CEPH_PUBKEY}'
 LOG_DIR_MODE = 0o770
 DATA_DIR_MODE = 0o700
+DEFAULT_MODE = 0o600
 CONTAINER_INIT = True
 MIN_PODMAN_VERSION = (2, 0, 2)
 CGROUPS_SPLIT_PODMAN_VERSION = (2, 1, 0)
@@ -88,6 +90,7 @@ DEFAULT_TIMEOUT = None  # in seconds
 DEFAULT_RETRY = 15
 DATEFMT = '%Y-%m-%dT%H:%M:%S.%fZ'
 QUIET_LOG_LEVEL = 9  # DEBUG is 10, so using 9 to be lower level than DEBUG
+NO_DEPRECATED = False
 
 logger: logging.Logger = None  # type: ignore
 
@@ -169,6 +172,17 @@ class ContainerInfo:
                 and self.version == other.version)
 
 
+class DeploymentType(Enum):
+    # Fresh deployment of a daemon.
+    DEFAULT = 'Deploy'
+    # Redeploying a daemon. Works the same as fresh
+    # deployment minus port checking.
+    REDEPLOY = 'Redeploy'
+    # Reconfiguring a daemon. Rewrites config
+    # files and potentially restarts daemon.
+    RECONFIG = 'Reconfig'
+
+
 class BaseConfig:
 
     def __init__(self) -> None:
@@ -363,6 +377,10 @@ class Error(Exception):
     pass
 
 
+class ClusterAlreadyExists(Exception):
+    pass
+
+
 class TimeoutExpired(Error):
     pass
 
@@ -376,7 +394,7 @@ class UnauthorizedRegistryError(Error):
 class Ceph(object):
     daemons = ('mon', 'mgr', 'osd', 'mds', 'rgw', 'rbd-mirror',
                'crash', 'cephfs-mirror', 'ceph-exporter')
-    gateways = ('iscsi', 'nfs')
+    gateways = ('iscsi', 'nfs', 'nvmeof')
 
 ##################################
 
@@ -432,9 +450,9 @@ class SNMPGateway:
     @classmethod
     def init(cls, ctx: CephadmContext, fsid: str,
              daemon_id: Union[int, str]) -> 'SNMPGateway':
-        assert ctx.config_json
-        return cls(ctx, fsid, daemon_id,
-                   get_parm(ctx.config_json), ctx.image)
+        cfgs = fetch_configs(ctx)
+        assert cfgs  # assert some config data was found
+        return cls(ctx, fsid, daemon_id, cfgs, ctx.image)
 
     @staticmethod
     def get_version(ctx: CephadmContext, fsid: str, daemon_id: str) -> Optional[str]:
@@ -467,13 +485,10 @@ class SNMPGateway:
 
     @property
     def port(self) -> int:
-        if not self.ctx.tcp_ports:
+        endpoints = fetch_tcp_ports(self.ctx)
+        if not endpoints:
             return self.DEFAULT_PORT
-        else:
-            if len(self.ctx.tcp_ports) > 0:
-                return int(self.ctx.tcp_ports.split()[0])
-            else:
-                return self.DEFAULT_PORT
+        return endpoints[0].port
 
     def get_daemon_args(self) -> List[str]:
         v3_args = []
@@ -511,7 +526,7 @@ class SNMPGateway:
 
     def create_daemon_conf(self) -> None:
         """Creates the environment file holding 'secrets' passed to the snmp-notifier daemon"""
-        with open(os.open(self.conf_file_path, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
+        with write_new(self.conf_file_path) as f:
             if self.snmp_version == 'V2c':
                 f.write(f'SNMP_NOTIFIER_COMMUNITY={self.snmp_community}\n')
             else:
@@ -657,6 +672,42 @@ class Monitoring(object):
 ##################################
 
 
+@contextmanager
+def write_new(
+    destination: Union[str, Path],
+    *,
+    owner: Optional[Tuple[int, int]] = None,
+    perms: Optional[int] = DEFAULT_MODE,
+    encoding: Optional[str] = None,
+) -> Generator[IO, None, None]:
+    """Write a new file in a robust manner, optionally specifying the owner,
+    permissions, or encoding. This function takes care to never leave a file in
+    a partially-written state due to a crash or power outage by writing to
+    temporary file and then renaming that temp file over to the final
+    destination once all data is written.  Note that the temporary files can be
+    leaked but only for a "crash" or power outage - regular exceptions will
+    clean up the temporary file.
+    """
+    destination = os.path.abspath(destination)
+    tempname = f'{destination}.new'
+    open_kwargs: Dict[str, Any] = {}
+    if encoding:
+        open_kwargs['encoding'] = encoding
+    try:
+        with open(tempname, 'w', **open_kwargs) as fh:
+            yield fh
+            fh.flush()
+            os.fsync(fh.fileno())
+            if owner is not None:
+                os.fchown(fh.fileno(), *owner)
+            if perms is not None:
+                os.fchmod(fh.fileno(), perms)
+    except Exception:
+        os.unlink(tempname)
+        raise
+    os.rename(tempname, destination)
+
+
 def populate_files(config_dir, config_files, uid, gid):
     # type: (str, Dict, int, int) -> None
     """create config files for different services"""
@@ -664,9 +715,7 @@ def populate_files(config_dir, config_files, uid, gid):
         config_file = os.path.join(config_dir, fname)
         config_content = dict_get_join(config_files, fname)
         logger.info('Write file: %s' % (config_file))
-        with open(config_file, 'w', encoding='utf-8') as f:
-            os.fchown(f.fileno(), uid, gid)
-            os.fchmod(f.fileno(), 0o600)
+        with write_new(config_file, owner=(uid, gid), encoding='utf-8') as f:
             f.write(config_content)
 
 
@@ -709,7 +758,7 @@ class NFSGanesha(object):
     @classmethod
     def init(cls, ctx, fsid, daemon_id):
         # type: (CephadmContext, str, Union[int, str]) -> NFSGanesha
-        return cls(ctx, fsid, daemon_id, get_parm(ctx.config_json), ctx.image)
+        return cls(ctx, fsid, daemon_id, fetch_configs(ctx), ctx.image)
 
     def get_container_mounts(self, data_dir):
         # type: (str) -> Dict[str, str]
@@ -801,9 +850,7 @@ class NFSGanesha(object):
         # write the RGW keyring
         if self.rgw:
             keyring_path = os.path.join(data_dir, 'keyring.rgw')
-            with open(keyring_path, 'w') as f:
-                os.fchmod(f.fileno(), 0o600)
-                os.fchown(f.fileno(), uid, gid)
+            with write_new(keyring_path, owner=(uid, gid)) as f:
                 f.write(self.rgw.get('keyring', ''))
 
 ##################################
@@ -839,7 +886,7 @@ class CephIscsi(object):
     def init(cls, ctx, fsid, daemon_id):
         # type: (CephadmContext, str, Union[int, str]) -> CephIscsi
         return cls(ctx, fsid, daemon_id,
-                   get_parm(ctx.config_json), ctx.image)
+                   fetch_configs(ctx), ctx.image)
 
     @staticmethod
     def get_container_mounts(data_dir, log_dir):
@@ -849,6 +896,7 @@ class CephIscsi(object):
         mounts[os.path.join(data_dir, 'keyring')] = '/etc/ceph/keyring:z'
         mounts[os.path.join(data_dir, 'iscsi-gateway.cfg')] = '/etc/ceph/iscsi-gateway.cfg:z'
         mounts[os.path.join(data_dir, 'configfs')] = '/sys/kernel/config'
+        mounts[os.path.join(data_dir, 'tcmu-runner-entrypoint.sh')] = '/usr/local/scripts/tcmu-runner-entrypoint.sh'
         mounts[log_dir] = '/var/log:z'
         mounts['/dev'] = '/dev'
         return mounts
@@ -870,7 +918,8 @@ class CephIscsi(object):
         version = None
         out, err, code = call(ctx,
                               [ctx.container_engine.path, 'exec', container_id,
-                               '/usr/bin/python3', '-c', "import pkg_resources; print(pkg_resources.require('ceph_iscsi')[0].version)"],
+                               '/usr/bin/python3', '-c',
+                               "import pkg_resources; print(pkg_resources.require('ceph_iscsi')[0].version)"],
                               verbosity=CallVerbosity.QUIET)
         if code == 0:
             version = out.strip()
@@ -912,9 +961,19 @@ class CephIscsi(object):
         configfs_dir = os.path.join(data_dir, 'configfs')
         makedirs(configfs_dir, uid, gid, 0o755)
 
+        # set up the tcmu-runner entrypoint script
+        # to be mounted into the container. For more info
+        # on why we need this script, see the
+        # tcmu_runner_entrypoint_script function
+        self.files['tcmu-runner-entrypoint.sh'] = self.tcmu_runner_entrypoint_script()
+
         # populate files from the config-json
         populate_files(data_dir, self.files, uid, gid)
 
+        # we want the tcmu runner entrypoint script to be executable
+        # populate_files will give it 0o600 by default
+        os.chmod(os.path.join(data_dir, 'tcmu-runner-entrypoint.sh'), 0o700)
+
     @staticmethod
     def configfs_mount_umount(data_dir, mount=True):
         # type: (str, bool) -> List[str]
@@ -927,16 +986,182 @@ class CephIscsi(object):
                   'umount {0}; fi'.format(mount_path)
         return cmd.split()
 
+    @staticmethod
+    def tcmu_runner_entrypoint_script() -> str:
+        # since we are having tcmu-runner be a background
+        # process in its systemd unit (rbd-target-api being
+        # the main process) systemd will not restart it when
+        # it fails. in order to try and get around that for now
+        # we can have a script mounted in the container that
+        # that attempts to do the restarting for us. This script
+        # can then become the entrypoint for the tcmu-runner
+        # container
+
+        # This is intended to be dropped for a better solution
+        # for at least the squid release onward
+        return """#!/bin/bash
+RUN_DIR=/var/run/tcmu-runner
+
+if [ ! -d "${RUN_DIR}" ] ; then
+    mkdir -p "${RUN_DIR}"
+fi
+
+rm -rf "${RUN_DIR}"/*
+
+while true
+do
+    touch "${RUN_DIR}"/start-up-$(date -Ins)
+    /usr/bin/tcmu-runner
+
+    # If we got around 3 kills/segfaults in the last minute,
+    # don't start anymore
+    if [ $(find "${RUN_DIR}" -type f -cmin -1 | wc -l) -ge 3 ] ; then
+        exit 0
+    fi
+
+    sleep 1
+done
+"""
+
     def get_tcmu_runner_container(self):
         # type: () -> CephContainer
         # daemon_id, is used to generated the cid and pid files used by podman but as both tcmu-runner
         # and rbd-target-api have the same daemon_id, it conflits and prevent the second container from
         # starting. .tcmu runner is appended to the daemon_id to fix that.
-        tcmu_container = get_container(self.ctx, self.fsid, self.daemon_type, str(self.daemon_id) + '.tcmu')
-        tcmu_container.entrypoint = '/usr/bin/tcmu-runner'
+        tcmu_container = get_deployment_container(self.ctx, self.fsid, self.daemon_type, str(self.daemon_id) + '.tcmu')
+        # TODO: Eventually we don't want to run tcmu-runner through this script.
+        # This is intended to be a workaround backported to older releases
+        # and should eventually be removed in at least squid onward
+        tcmu_container.entrypoint = '/usr/local/scripts/tcmu-runner-entrypoint.sh'
         tcmu_container.cname = self.get_container_name(desc='tcmu')
         return tcmu_container
 
+
+##################################
+
+
+class CephNvmeof(object):
+    """Defines a Ceph-Nvmeof container"""
+
+    daemon_type = 'nvmeof'
+    required_files = ['ceph-nvmeof.conf']
+    default_image = DEFAULT_NVMEOF_IMAGE
+
+    def __init__(self,
+                 ctx,
+                 fsid,
+                 daemon_id,
+                 config_json,
+                 image=DEFAULT_NVMEOF_IMAGE):
+        # type: (CephadmContext, str, Union[int, str], Dict, str) -> None
+        self.ctx = ctx
+        self.fsid = fsid
+        self.daemon_id = daemon_id
+        self.image = image
+
+        # config-json options
+        self.files = dict_get(config_json, 'files', {})
+
+        # validate the supplied args
+        self.validate()
+
+    @classmethod
+    def init(cls, ctx, fsid, daemon_id):
+        # type: (CephadmContext, str, Union[int, str]) -> CephNvmeof
+        return cls(ctx, fsid, daemon_id,
+                   fetch_configs(ctx), ctx.image)
+
+    @staticmethod
+    def get_container_mounts(data_dir: str) -> Dict[str, str]:
+        mounts = dict()
+        mounts[os.path.join(data_dir, 'config')] = '/etc/ceph/ceph.conf:z'
+        mounts[os.path.join(data_dir, 'keyring')] = '/etc/ceph/keyring:z'
+        mounts[os.path.join(data_dir, 'ceph-nvmeof.conf')] = '/src/ceph-nvmeof.conf:z'
+        mounts[os.path.join(data_dir, 'configfs')] = '/sys/kernel/config'
+        mounts['/dev/hugepages'] = '/dev/hugepages'
+        mounts['/dev/vfio/vfio'] = '/dev/vfio/vfio'
+        return mounts
+
+    @staticmethod
+    def get_container_binds():
+        # type: () -> List[List[str]]
+        binds = []
+        lib_modules = ['type=bind',
+                       'source=/lib/modules',
+                       'destination=/lib/modules',
+                       'ro=true']
+        binds.append(lib_modules)
+        return binds
+
+    @staticmethod
+    def get_version(ctx: CephadmContext, container_id: str) -> Optional[str]:
+        out, err, ret = call(ctx,
+                             [ctx.container_engine.path, 'inspect',
+                              '--format', '{{index .Config.Labels "io.ceph.version"}}',
+                              ctx.image])
+        version = None
+        if ret == 0:
+            version = out.strip()
+        return version
+
+    def validate(self):
+        # type: () -> None
+        if not is_fsid(self.fsid):
+            raise Error('not an fsid: %s' % self.fsid)
+        if not self.daemon_id:
+            raise Error('invalid daemon_id: %s' % self.daemon_id)
+        if not self.image:
+            raise Error('invalid image: %s' % self.image)
+
+        # check for the required files
+        if self.required_files:
+            for fname in self.required_files:
+                if fname not in self.files:
+                    raise Error('required file missing from config-json: %s' % fname)
+
+    def get_daemon_name(self):
+        # type: () -> str
+        return '%s.%s' % (self.daemon_type, self.daemon_id)
+
+    def get_container_name(self, desc=None):
+        # type: (Optional[str]) -> str
+        cname = '%s-%s' % (self.fsid, self.get_daemon_name())
+        if desc:
+            cname = '%s-%s' % (cname, desc)
+        return cname
+
+    def create_daemon_dirs(self, data_dir, uid, gid):
+        # type: (str, int, int) -> None
+        """Create files under the container data dir"""
+        if not os.path.isdir(data_dir):
+            raise OSError('data_dir is not a directory: %s' % (data_dir))
+
+        logger.info('Creating ceph-nvmeof config...')
+        configfs_dir = os.path.join(data_dir, 'configfs')
+        makedirs(configfs_dir, uid, gid, 0o755)
+
+        # populate files from the config-json
+        populate_files(data_dir, self.files, uid, gid)
+
+    @staticmethod
+    def configfs_mount_umount(data_dir, mount=True):
+        # type: (str, bool) -> List[str]
+        mount_path = os.path.join(data_dir, 'configfs')
+        if mount:
+            cmd = 'if ! grep -qs {0} /proc/mounts; then ' \
+                  'mount -t configfs none {0}; fi'.format(mount_path)
+        else:
+            cmd = 'if grep -qs {0} /proc/mounts; then ' \
+                  'umount {0}; fi'.format(mount_path)
+        return cmd.split()
+
+    @staticmethod
+    def get_sysctl_settings() -> List[str]:
+        return [
+            'vm.nr_hugepages = 4096',
+        ]
+
+
 ##################################
 
 
@@ -974,7 +1199,7 @@ class CephExporter(object):
     def init(cls, ctx: CephadmContext, fsid: str,
              daemon_id: Union[int, str]) -> 'CephExporter':
         return cls(ctx, fsid, daemon_id,
-                   get_parm(ctx.config_json), ctx.image)
+                   fetch_configs(ctx), ctx.image)
 
     @staticmethod
     def get_container_mounts() -> Dict[str, str]:
@@ -1023,7 +1248,7 @@ class HAproxy(object):
     @classmethod
     def init(cls, ctx: CephadmContext,
              fsid: str, daemon_id: Union[int, str]) -> 'HAproxy':
-        return cls(ctx, fsid, daemon_id, get_parm(ctx.config_json),
+        return cls(ctx, fsid, daemon_id, fetch_configs(ctx),
                    ctx.image)
 
     def create_daemon_dirs(self, data_dir: str, uid: int, gid: int) -> None:
@@ -1112,7 +1337,7 @@ class Keepalived(object):
     def init(cls, ctx: CephadmContext, fsid: str,
              daemon_id: Union[int, str]) -> 'Keepalived':
         return cls(ctx, fsid, daemon_id,
-                   get_parm(ctx.config_json), ctx.image)
+                   fetch_configs(ctx), ctx.image)
 
     def create_daemon_dirs(self, data_dir: str, uid: int, gid: int) -> None:
         """Create files under the container data dir"""
@@ -1248,7 +1473,7 @@ class CustomContainer(object):
     def init(cls, ctx: CephadmContext,
              fsid: str, daemon_id: Union[int, str]) -> 'CustomContainer':
         return cls(fsid, daemon_id,
-                   get_parm(ctx.config_json), ctx.image)
+                   fetch_configs(ctx), ctx.image)
 
     def create_daemon_dirs(self, data_dir: str, uid: int, gid: int) -> None:
         """
@@ -1269,9 +1494,7 @@ class CustomContainer(object):
             logger.info('Creating file: {}'.format(file_path))
             content = dict_get_join(self.files, file_path)
             file_path = os.path.join(data_dir, file_path.strip('/'))
-            with open(file_path, 'w', encoding='utf-8') as f:
-                os.fchown(f.fileno(), uid, gid)
-                os.fchmod(f.fileno(), 0o600)
+            with write_new(file_path, owner=(uid, gid), encoding='utf-8') as f:
                 f.write(content)
 
     def get_daemon_args(self) -> List[str]:
@@ -1366,7 +1589,7 @@ def dict_get(d: Dict, key: str, default: Any = None, require: bool = False) -> A
 ##################################
 
 
-def dict_get_join(d: Dict, key: str) -> Any:
+def dict_get_join(d: Dict[str, Any], key: str) -> Any:
     """
     Helper function to get the value of a given key from a dictionary.
     `List` values will be converted to a string by joining them with a
@@ -1390,6 +1613,7 @@ def get_supported_daemons():
     supported_daemons.extend(Monitoring.components)
     supported_daemons.append(NFSGanesha.daemon_type)
     supported_daemons.append(CephIscsi.daemon_type)
+    supported_daemons.append(CephNvmeof.daemon_type)
     supported_daemons.append(CustomContainer.daemon_type)
     supported_daemons.append(HAproxy.daemon_type)
     supported_daemons.append(Keepalived.daemon_type)
@@ -1417,22 +1641,21 @@ def attempt_bind(ctx, s, address, port):
             logger.warning(msg)
             raise PortOccupiedError(msg)
         else:
-            raise Error(e)
+            raise e
     except Exception as e:
         raise Error(e)
     finally:
         s.close()
 
 
-def port_in_use(ctx, port_num):
-    # type: (CephadmContext, int) -> bool
+def port_in_use(ctx: CephadmContext, endpoint: EndPoint) -> bool:
     """Detect whether a port is in use on the local machine - IPv4 and IPv6"""
-    logger.info('Verifying port %d ...' % port_num)
+    logger.info('Verifying port %s ...' % str(endpoint))
 
     def _port_in_use(af: socket.AddressFamily, address: str) -> bool:
         try:
             s = socket.socket(af, socket.SOCK_STREAM)
-            attempt_bind(ctx, s, address, port_num)
+            attempt_bind(ctx, s, address, endpoint.port)
         except PortOccupiedError:
             return True
         except OSError as e:
@@ -1444,6 +1667,13 @@ def port_in_use(ctx, port_num):
             else:
                 raise e
         return False
+
+    if endpoint.ip != '0.0.0.0' and endpoint.ip != '::':
+        if is_ipv6(endpoint.ip):
+            return _port_in_use(socket.AF_INET6, endpoint.ip)
+        else:
+            return _port_in_use(socket.AF_INET, endpoint.ip)
+
     return any(_port_in_use(af, address) for af, address in (
         (socket.AF_INET, '0.0.0.0'),
         (socket.AF_INET6, '::')
@@ -2261,29 +2491,58 @@ def require_image(func: FuncT) -> FuncT:
 def default_image(func: FuncT) -> FuncT:
     @wraps(func)
     def _default_image(ctx: CephadmContext) -> Any:
-        if not ctx.image:
-            if 'name' in ctx and ctx.name:
-                type_ = ctx.name.split('.', 1)[0]
-                if type_ in Monitoring.components:
-                    ctx.image = Monitoring.components[type_]['image']
-                if type_ == 'haproxy':
-                    ctx.image = HAproxy.default_image
-                if type_ == 'keepalived':
-                    ctx.image = Keepalived.default_image
-                if type_ == SNMPGateway.daemon_type:
-                    ctx.image = SNMPGateway.default_image
-                if type_ in Tracing.components:
-                    ctx.image = Tracing.components[type_]['image']
-            if not ctx.image:
-                ctx.image = os.environ.get('CEPHADM_IMAGE')
-            if not ctx.image:
-                ctx.image = _get_default_image(ctx)
-
+        update_default_image(ctx)
         return func(ctx)
 
     return cast(FuncT, _default_image)
 
 
+def update_default_image(ctx: CephadmContext) -> None:
+    if getattr(ctx, 'image', None):
+        return
+    ctx.image = None  # ensure ctx.image exists to avoid repeated `getattr`s
+    name = getattr(ctx, 'name', None)
+    if name:
+        type_ = name.split('.', 1)[0]
+        if type_ in Monitoring.components:
+            ctx.image = Monitoring.components[type_]['image']
+        if type_ == 'haproxy':
+            ctx.image = HAproxy.default_image
+        if type_ == 'keepalived':
+            ctx.image = Keepalived.default_image
+        if type_ == SNMPGateway.daemon_type:
+            ctx.image = SNMPGateway.default_image
+        if type_ == CephNvmeof.daemon_type:
+            ctx.image = CephNvmeof.default_image
+        if type_ in Tracing.components:
+            ctx.image = Tracing.components[type_]['image']
+    if not ctx.image:
+        ctx.image = os.environ.get('CEPHADM_IMAGE')
+    if not ctx.image:
+        ctx.image = _get_default_image(ctx)
+
+
+def executes_early(func: FuncT) -> FuncT:
+    """Decorator that indicates the command function is meant to have no
+    dependencies and no environmental requirements and can therefore be
+    executed as non-root and with no logging, etc. Commands that have this
+    decorator applied must be simple and self-contained.
+    """
+    cast(Any, func)._execute_early = True
+    return func
+
+
+def deprecated_command(func: FuncT) -> FuncT:
+    @wraps(func)
+    def _deprecated_command(ctx: CephadmContext) -> Any:
+        logger.warning(f'Deprecated command used: {func}')
+        if NO_DEPRECATED:
+            raise Error('running deprecated commands disabled')
+        return func(ctx)
+
+    return cast(FuncT, _deprecated_command)
+
+
 def get_container_info(ctx: CephadmContext, daemon_filter: str, by_name: bool) -> Optional[ContainerInfo]:
     """
     :param ctx: Cephadm context
@@ -2733,15 +2992,15 @@ def get_daemon_args(ctx, fsid, daemon_type, daemon_id):
         if daemon_type not in ['grafana', 'loki', 'promtail']:
             ip = ''
             port = Monitoring.port_map[daemon_type][0]
-            if 'meta_json' in ctx and ctx.meta_json:
-                meta = json.loads(ctx.meta_json) or {}
+            meta = fetch_meta(ctx)
+            if meta:
                 if 'ip' in meta and meta['ip']:
                     ip = meta['ip']
                 if 'ports' in meta and meta['ports']:
                     port = meta['ports'][0]
             r += [f'--web.listen-address={ip}:{port}']
             if daemon_type == 'prometheus':
-                config = get_parm(ctx.config_json)
+                config = fetch_configs(ctx)
                 retention_time = config.get('retention_time', '15d')
                 retention_size = config.get('retention_size', '0')  # default to disabled
                 r += [f'--storage.tsdb.retention.time={retention_time}']
@@ -2757,7 +3016,7 @@ def get_daemon_args(ctx, fsid, daemon_type, daemon_id):
                     host = wrap_ipv6(addr) if addr else host
                 r += [f'--web.external-url={scheme}://{host}:{port}']
         if daemon_type == 'alertmanager':
-            config = get_parm(ctx.config_json)
+            config = fetch_configs(ctx)
             peers = config.get('peers', list())  # type: ignore
             for peer in peers:
                 r += ['--cluster.peer={}'.format(peer)]
@@ -2770,15 +3029,15 @@ def get_daemon_args(ctx, fsid, daemon_type, daemon_id):
         if daemon_type == 'promtail':
             r += ['--config.expand-env']
         if daemon_type == 'prometheus':
-            config = get_parm(ctx.config_json)
+            config = fetch_configs(ctx)
             try:
                 r += [f'--web.config.file={config["web_config"]}']
             except KeyError:
                 pass
         if daemon_type == 'node-exporter':
-            config = get_parm(ctx.config_json)
+            config = fetch_configs(ctx)
             try:
-                r += [f'--web.config={config["web_config"]}']
+                r += [f'--web.config.file={config["web_config"]}']
             except KeyError:
                 pass
             r += ['--path.procfs=/host/proc',
@@ -2815,22 +3074,16 @@ def create_daemon_dirs(ctx, fsid, daemon_type, daemon_id, uid, gid,
 
     if config:
         config_path = os.path.join(data_dir, 'config')
-        with open(config_path, 'w') as f:
-            os.fchown(f.fileno(), uid, gid)
-            os.fchmod(f.fileno(), 0o600)
+        with write_new(config_path, owner=(uid, gid)) as f:
             f.write(config)
 
     if keyring:
         keyring_path = os.path.join(data_dir, 'keyring')
-        with open(keyring_path, 'w') as f:
-            os.fchmod(f.fileno(), 0o600)
-            os.fchown(f.fileno(), uid, gid)
+        with write_new(keyring_path, owner=(uid, gid)) as f:
             f.write(keyring)
 
     if daemon_type in Monitoring.components.keys():
-        config_json: Dict[str, Any] = dict()
-        if 'config_json' in ctx:
-            config_json = get_parm(ctx.config_json)
+        config_json = fetch_configs(ctx)
 
         # Set up directories specific to the monitoring component
         config_dir = ''
@@ -2881,14 +3134,15 @@ def create_daemon_dirs(ctx, fsid, daemon_type, daemon_id, uid, gid,
         # populate the config directory for the component from the config-json
         if 'files' in config_json:
             for fname in config_json['files']:
-                content = dict_get_join(config_json['files'], fname)
+                # work around mypy wierdness where it thinks `str`s aren't Anys
+                # when used for dictionary values! feels like possibly a mypy bug?!
+                cfg = cast(Dict[str, Any], config_json['files'])
+                content = dict_get_join(cfg, fname)
                 if os.path.isabs(fname):
                     fpath = os.path.join(data_dir_root, fname.lstrip(os.path.sep))
                 else:
                     fpath = os.path.join(data_dir_root, config_dir, fname)
-                with open(fpath, 'w', encoding='utf-8') as f:
-                    os.fchown(f.fileno(), uid, gid)
-                    os.fchmod(f.fileno(), 0o600)
+                with write_new(fpath, owner=(uid, gid), encoding='utf-8') as f:
                     f.write(content)
 
     elif daemon_type == NFSGanesha.daemon_type:
@@ -2899,6 +3153,10 @@ def create_daemon_dirs(ctx, fsid, daemon_type, daemon_id, uid, gid,
         ceph_iscsi = CephIscsi.init(ctx, fsid, daemon_id)
         ceph_iscsi.create_daemon_dirs(data_dir, uid, gid)
 
+    elif daemon_type == CephNvmeof.daemon_type:
+        ceph_nvmeof = CephNvmeof.init(ctx, fsid, daemon_id)
+        ceph_nvmeof.create_daemon_dirs(data_dir, uid, gid)
+
     elif daemon_type == HAproxy.daemon_type:
         haproxy = HAproxy.init(ctx, fsid, daemon_id)
         haproxy.create_daemon_dirs(data_dir, uid, gid)
@@ -2920,40 +3178,39 @@ def create_daemon_dirs(ctx, fsid, daemon_type, daemon_id, uid, gid,
 
 def _write_custom_conf_files(ctx: CephadmContext, daemon_type: str, daemon_id: str, fsid: str, uid: int, gid: int) -> None:
     # mostly making this its own function to make unit testing easier
-    if 'config_json' not in ctx or not ctx.config_json:
+    ccfiles = fetch_custom_config_files(ctx)
+    if not ccfiles:
         return
-    config_json = get_custom_config_files(ctx.config_json)
     custom_config_dir = os.path.join(ctx.data_dir, fsid, 'custom_config_files', f'{daemon_type}.{daemon_id}')
     if not os.path.exists(custom_config_dir):
         makedirs(custom_config_dir, uid, gid, 0o755)
     mandatory_keys = ['mount_path', 'content']
-    for ccf in config_json['custom_config_files']:
+    for ccf in ccfiles:
         if all(k in ccf for k in mandatory_keys):
             file_path = os.path.join(custom_config_dir, os.path.basename(ccf['mount_path']))
-            with open(file_path, 'w+', encoding='utf-8') as f:
-                os.fchown(f.fileno(), uid, gid)
-                os.fchmod(f.fileno(), 0o600)
+            with write_new(file_path, owner=(uid, gid), encoding='utf-8') as f:
                 f.write(ccf['content'])
+            # temporary workaround to make custom config files work for tcmu-runner
+            # container we deploy with iscsi until iscsi is refactored
+            if daemon_type == 'iscsi':
+                tcmu_config_dir = custom_config_dir + '.tcmu'
+                if not os.path.exists(tcmu_config_dir):
+                    makedirs(tcmu_config_dir, uid, gid, 0o755)
+                tcmu_file_path = os.path.join(tcmu_config_dir, os.path.basename(ccf['mount_path']))
+                with write_new(tcmu_file_path, owner=(uid, gid), encoding='utf-8') as f:
+                    f.write(ccf['content'])
 
 
 def get_parm(option: str) -> Dict[str, str]:
     js = _get_config_json(option)
     # custom_config_files is a special field that may be in the config
     # dict. It is used for mounting custom config files into daemon's containers
-    # and should be accessed through the "get_custom_config_files" function.
+    # and should be accessed through the "fetch_custom_config_files" function.
     # For get_parm we need to discard it.
     js.pop('custom_config_files', None)
     return js
 
 
-def get_custom_config_files(option: str) -> Dict[str, List[Dict[str, str]]]:
-    js = _get_config_json(option)
-    res: Dict[str, List[Dict[str, str]]] = {'custom_config_files': []}
-    if 'custom_config_files' in js:
-        res['custom_config_files'] = js['custom_config_files']
-    return res
-
-
 def _get_config_json(option: str) -> Dict[str, Any]:
     if not option:
         return dict()
@@ -2984,13 +3241,94 @@ def _get_config_json(option: str) -> Dict[str, Any]:
         return js
 
 
+def fetch_meta(ctx: CephadmContext) -> Dict[str, Any]:
+    """Return a dict containing metadata about a deployment.
+    """
+    meta = getattr(ctx, 'meta_properties', None)
+    if meta is not None:
+        return meta
+    mjson = getattr(ctx, 'meta_json', None)
+    if mjson is not None:
+        meta = json.loads(mjson) or {}
+        ctx.meta_properties = meta
+        return meta
+    return {}
+
+
+def fetch_configs(ctx: CephadmContext) -> Dict[str, str]:
+    """Return a dict containing arbitrary configuration parameters.
+    This function filters out the key 'custom_config_files' which
+    must not be part of a deployment's configuration key-value pairs.
+    To access custom configuration file data, use `fetch_custom_config_files`.
+    """
+    # ctx.config_blobs is *always* a dict. it is created once when
+    # a command is parsed/processed and stored "forever"
+    cfg_blobs = getattr(ctx, 'config_blobs', None)
+    if cfg_blobs:
+        cfg_blobs = dict(cfg_blobs)
+        cfg_blobs.pop('custom_config_files', None)
+        return cfg_blobs
+    # ctx.config_json is the legacy equivalent of config_blobs. it is a
+    # string that either contains json or refers to a file name where
+    # the file contains json.
+    cfg_json = getattr(ctx, 'config_json', None)
+    if cfg_json:
+        jdata = _get_config_json(cfg_json) or {}
+        jdata.pop('custom_config_files', None)
+        return jdata
+    return {}
+
+
+def fetch_custom_config_files(ctx: CephadmContext) -> List[Dict[str, Any]]:
+    """Return a list containing dicts that can be used to populate
+    custom configuration files for containers.
+    """
+    # NOTE: this function works like the opposite of fetch_configs.
+    # instead of filtering out custom_config_files, it returns only
+    # the content in that key.
+    cfg_blobs = getattr(ctx, 'config_blobs', None)
+    if cfg_blobs:
+        return cfg_blobs.get('custom_config_files', [])
+    cfg_json = getattr(ctx, 'config_json', None)
+    if cfg_json:
+        jdata = _get_config_json(cfg_json)
+        return jdata.get('custom_config_files', [])
+    return []
+
+
+def fetch_tcp_ports(ctx: CephadmContext) -> List[EndPoint]:
+    """Return a list of Endpoints, which have a port and ip attribute
+    """
+    ports = getattr(ctx, 'tcp_ports', None)
+    if ports is None:
+        ports = []
+    if isinstance(ports, str):
+        ports = list(map(int, ports.split()))
+    port_ips: Dict[str, str] = {}
+    port_ips_attr: Union[str, Dict[str, str], None] = getattr(ctx, 'port_ips', None)
+    if isinstance(port_ips_attr, str):
+        port_ips = json.loads(port_ips_attr)
+    elif port_ips_attr is not None:
+        # if it's not None or a str, assume it's already the dict we want
+        port_ips = port_ips_attr
+
+    endpoints: List[EndPoint] = []
+    for port in ports:
+        if str(port) in port_ips:
+            endpoints.append(EndPoint(port_ips[str(port)], port))
+        else:
+            endpoints.append(EndPoint('0.0.0.0', port))
+
+    return endpoints
+
+
 def get_config_and_keyring(ctx):
     # type: (CephadmContext) -> Tuple[Optional[str], Optional[str]]
     config = None
     keyring = None
 
-    if 'config_json' in ctx and ctx.config_json:
-        d = get_parm(ctx.config_json)
+    d = fetch_configs(ctx)
+    if d:
         config = d.get('config')
         keyring = d.get('keyring')
         if config and keyring:
@@ -3021,6 +3359,8 @@ def get_container_binds(ctx, fsid, daemon_type, daemon_id):
 
     if daemon_type == CephIscsi.daemon_type:
         binds.extend(CephIscsi.get_container_binds())
+    if daemon_type == CephNvmeof.daemon_type:
+        binds.extend(CephNvmeof.get_container_binds())
     elif daemon_type == CustomContainer.daemon_type:
         assert daemon_id
         cc = CustomContainer.init(ctx, fsid, daemon_id)
@@ -3073,10 +3413,14 @@ def get_container_mounts(ctx, fsid, daemon_type, daemon_id,
     if daemon_type == 'osd':
         # selinux-policy in the container may not match the host.
         if HostFacts(ctx).selinux_enabled:
-            selinux_folder = '/var/lib/ceph/%s/selinux' % fsid
-            if not os.path.exists(selinux_folder):
-                os.makedirs(selinux_folder, mode=0o755)
-            mounts[selinux_folder] = '/sys/fs/selinux:ro'
+            cluster_dir = f'{ctx.data_dir}/{fsid}'
+            selinux_folder = f'{cluster_dir}/selinux'
+            if os.path.exists(cluster_dir):
+                if not os.path.exists(selinux_folder):
+                    os.makedirs(selinux_folder, mode=0o755)
+                mounts[selinux_folder] = '/sys/fs/selinux:ro'
+            else:
+                logger.error(f'Cluster direcotry {cluster_dir} does not exist.')
         mounts['/'] = '/rootfs'
 
     try:
@@ -3133,6 +3477,11 @@ def get_container_mounts(ctx, fsid, daemon_type, daemon_id,
         data_dir = get_data_dir(fsid, ctx.data_dir, daemon_type, daemon_id)
         mounts.update(HAproxy.get_container_mounts(data_dir))
 
+    if daemon_type == CephNvmeof.daemon_type:
+        assert daemon_id
+        data_dir = get_data_dir(fsid, ctx.data_dir, daemon_type, daemon_id)
+        mounts.update(CephNvmeof.get_container_mounts(data_dir))
+
     if daemon_type == CephIscsi.daemon_type:
         assert daemon_id
         data_dir = get_data_dir(fsid, ctx.data_dir, daemon_type, daemon_id)
@@ -3250,7 +3599,7 @@ def get_container(ctx: CephadmContext,
     elif daemon_type in Tracing.components:
         entrypoint = ''
         name = '%s.%s' % (daemon_type, daemon_id)
-        config = get_parm(ctx.config_json)
+        config = fetch_configs(ctx)
         Tracing.set_configuration(config, daemon_type)
         envs.extend(Tracing.components[daemon_type].get('envs', []))
     elif daemon_type == NFSGanesha.daemon_type:
@@ -3267,6 +3616,11 @@ def get_container(ctx: CephadmContext,
         name = '%s.%s' % (daemon_type, daemon_id)
         envs.extend(Keepalived.get_container_envs())
         container_args.extend(['--cap-add=NET_ADMIN', '--cap-add=NET_RAW'])
+    elif daemon_type == CephNvmeof.daemon_type:
+        name = '%s.%s' % (daemon_type, daemon_id)
+        container_args.extend(['--ulimit', 'memlock=-1:-1'])
+        container_args.extend(['--ulimit', 'nofile=10240'])
+        container_args.extend(['--cap-add=SYS_ADMIN', '--cap-add=CAP_SYS_NICE'])
     elif daemon_type == CephIscsi.daemon_type:
         entrypoint = CephIscsi.entrypoint
         name = '%s.%s' % (daemon_type, daemon_id)
@@ -3374,26 +3728,29 @@ def extract_uid_gid(ctx, img='', file_path='/var/lib/ceph'):
     raise RuntimeError('uid/gid not found')
 
 
-def deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid,
-                  config=None, keyring=None,
-                  osd_fsid=None,
-                  reconfig=False,
-                  ports=None):
-    # type: (CephadmContext, str, str, Union[int, str], Optional[CephContainer], int, int, Optional[str], Optional[str], Optional[str], Optional[bool], Optional[List[int]]) -> None
-
-    ports = ports or []
-    if any([port_in_use(ctx, port) for port in ports]):
-        if daemon_type == 'mgr':
-            # non-fatal for mgr when we are in mgr_standby_modules=false, but we can't
-            # tell whether that is the case here.
-            logger.warning(
-                f"ceph-mgr TCP port(s) {','.join(map(str, ports))} already in use"
-            )
-        else:
-            raise Error("TCP Port(s) '{}' required for {} already in use".format(','.join(map(str, ports)), daemon_type))
+def deploy_daemon(ctx: CephadmContext, fsid: str, daemon_type: str,
+                  daemon_id: Union[int, str], c: Optional['CephContainer'],
+                  uid: int, gid: int, config: Optional[str] = None,
+                  keyring: Optional[str] = None, osd_fsid: Optional[str] = None,
+                  deployment_type: DeploymentType = DeploymentType.DEFAULT,
+                  endpoints: Optional[List[EndPoint]] = None) -> None:
+
+    endpoints = endpoints or []
+    # only check port in use if fresh deployment since service
+    # we are redeploying/reconfiguring will already be using the port
+    if deployment_type == DeploymentType.DEFAULT:
+        if any([port_in_use(ctx, e) for e in endpoints]):
+            if daemon_type == 'mgr':
+                # non-fatal for mgr when we are in mgr_standby_modules=false, but we can't
+                # tell whether that is the case here.
+                logger.warning(
+                    f"ceph-mgr TCP port(s) {','.join(map(str, endpoints))} already in use"
+                )
+            else:
+                raise Error("TCP Port(s) '{}' required for {} already in use".format(','.join(map(str, endpoints)), daemon_type))
 
     data_dir = get_data_dir(fsid, ctx.data_dir, daemon_type, daemon_id)
-    if reconfig and not os.path.exists(data_dir):
+    if deployment_type == DeploymentType.RECONFIG and not os.path.exists(data_dir):
         raise Error('cannot reconfig, data path %s does not exist' % data_dir)
     if daemon_type == 'mon' and not os.path.exists(data_dir):
         assert config
@@ -3428,9 +3785,7 @@ def deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid,
         ).run()
 
         # write conf
-        with open(mon_dir + '/config', 'w') as f:
-            os.fchown(f.fileno(), uid, gid)
-            os.fchmod(f.fileno(), 0o600)
+        with write_new(mon_dir + '/config', owner=(uid, gid)) as f:
             f.write(config)
     else:
         # dirs, conf, keyring
@@ -3440,12 +3795,11 @@ def deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid,
             uid, gid,
             config, keyring)
 
-    if not reconfig:
+    # only write out unit files and start daemon
+    # with systemd if this is not a reconfig
+    if deployment_type != DeploymentType.RECONFIG:
         if daemon_type == CephadmAgent.daemon_type:
-            if ctx.config_json == '-':
-                config_js = get_parm('-')
-            else:
-                config_js = get_parm(ctx.config_json)
+            config_js = fetch_configs(ctx)
             assert isinstance(config_js, dict)
 
             cephadm_agent = CephadmAgent(ctx, fsid, daemon_id)
@@ -3453,30 +3807,28 @@ def deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid,
         else:
             if c:
                 deploy_daemon_units(ctx, fsid, uid, gid, daemon_type, daemon_id,
-                                    c, osd_fsid=osd_fsid, ports=ports)
+                                    c, osd_fsid=osd_fsid, endpoints=endpoints)
             else:
                 raise RuntimeError('attempting to deploy a daemon without a container image')
 
     if not os.path.exists(data_dir + '/unit.created'):
-        with open(data_dir + '/unit.created', 'w') as f:
-            os.fchmod(f.fileno(), 0o600)
-            os.fchown(f.fileno(), uid, gid)
+        with write_new(data_dir + '/unit.created', owner=(uid, gid)) as f:
             f.write('mtime is time the daemon deployment was created\n')
 
-    with open(data_dir + '/unit.configured', 'w') as f:
+    with write_new(data_dir + '/unit.configured', owner=(uid, gid)) as f:
         f.write('mtime is time we were last configured\n')
-        os.fchmod(f.fileno(), 0o600)
-        os.fchown(f.fileno(), uid, gid)
 
     update_firewalld(ctx, daemon_type)
 
     # Open ports explicitly required for the daemon
-    if ports:
+    if endpoints:
         fw = Firewalld(ctx)
-        fw.open_ports(ports + fw.external_ports.get(daemon_type, []))
+        fw.open_ports([e.port for e in endpoints] + fw.external_ports.get(daemon_type, []))
         fw.apply_rules()
 
-    if reconfig and daemon_type not in Ceph.daemons:
+    # If this was a reconfig and the daemon is not a Ceph daemon, restart it
+    # so it can pick up potential changes to its configuration files
+    if deployment_type == DeploymentType.RECONFIG and daemon_type not in Ceph.daemons:
         # ceph daemons do not need a restart; others (presumably) do to pick
         # up the new config
         call_throws(ctx, ['systemctl', 'reset-failed',
@@ -3547,7 +3899,7 @@ def deploy_daemon_units(
     enable: bool = True,
     start: bool = True,
     osd_fsid: Optional[str] = None,
-    ports: Optional[List[int]] = None,
+    endpoints: Optional[List[EndPoint]] = None,
 ) -> None:
     # cmd
 
@@ -3560,8 +3912,10 @@ def deploy_daemon_units(
         f.write(f'! {container_exists % c.cname} || {" ".join(c.stop_cmd(timeout=timeout))} \n')
 
     data_dir = get_data_dir(fsid, ctx.data_dir, daemon_type, daemon_id)
-    with open(data_dir + '/unit.run.new', 'w') as f, \
-            open(data_dir + '/unit.meta.new', 'w') as metaf:
+    run_file_path = data_dir + '/unit.run'
+    meta_file_path = data_dir + '/unit.meta'
+    with write_new(run_file_path) as f, write_new(meta_file_path) as metaf:
+
         f.write('set -e\n')
 
         if daemon_type in Ceph.daemons:
@@ -3625,30 +3979,24 @@ def deploy_daemon_units(
         _write_container_cmd_to_bash(ctx, f, c, '%s.%s' % (daemon_type, str(daemon_id)))
 
         # some metadata about the deploy
-        meta: Dict[str, Any] = {}
-        if 'meta_json' in ctx and ctx.meta_json:
-            meta = json.loads(ctx.meta_json) or {}
+        meta: Dict[str, Any] = fetch_meta(ctx)
         meta.update({
             'memory_request': int(ctx.memory_request) if ctx.memory_request else None,
             'memory_limit': int(ctx.memory_limit) if ctx.memory_limit else None,
         })
         if not meta.get('ports'):
-            meta['ports'] = ports
+            if endpoints:
+                meta['ports'] = [e.port for e in endpoints]
+            else:
+                meta['ports'] = []
         metaf.write(json.dumps(meta, indent=4) + '\n')
 
-        os.fchmod(f.fileno(), 0o600)
-        os.fchmod(metaf.fileno(), 0o600)
-        os.rename(data_dir + '/unit.run.new',
-                  data_dir + '/unit.run')
-        os.rename(data_dir + '/unit.meta.new',
-                  data_dir + '/unit.meta')
-
     timeout = 30 if daemon_type == 'osd' else None
     # post-stop command(s)
-    with open(data_dir + '/unit.poststop.new', 'w') as f:
+    with write_new(data_dir + '/unit.poststop') as f:
         # this is a fallback to eventually stop any underlying container that was not stopped properly by unit.stop,
         # this could happen in very slow setups as described in the issue https://tracker.ceph.com/issues/58242.
-        add_stop_actions(f, timeout)
+        add_stop_actions(cast(TextIO, f), timeout)
         if daemon_type == 'osd':
             assert osd_fsid
             poststop = get_ceph_volume_container(
@@ -3672,23 +4020,14 @@ def deploy_daemon_units(
             f.write('! ' + 'rm ' + runtime_dir + '/ceph-%s@%s.%s.service-pid' % (fsid, daemon_type, str(daemon_id) + '.tcmu') + '\n')
             f.write('! ' + 'rm ' + runtime_dir + '/ceph-%s@%s.%s.service-cid' % (fsid, daemon_type, str(daemon_id) + '.tcmu') + '\n')
             f.write(' '.join(CephIscsi.configfs_mount_umount(data_dir, mount=False)) + '\n')
-        os.fchmod(f.fileno(), 0o600)
-        os.rename(data_dir + '/unit.poststop.new',
-                  data_dir + '/unit.poststop')
 
     # post-stop command(s)
-    with open(data_dir + '/unit.stop.new', 'w') as f:
-        add_stop_actions(f, timeout)
-        os.fchmod(f.fileno(), 0o600)
-        os.rename(data_dir + '/unit.stop.new',
-                  data_dir + '/unit.stop')
+    with write_new(data_dir + '/unit.stop') as f:
+        add_stop_actions(cast(TextIO, f), timeout)
 
     if c:
-        with open(data_dir + '/unit.image.new', 'w') as f:
+        with write_new(data_dir + '/unit.image') as f:
             f.write(c.image + '\n')
-            os.fchmod(f.fileno(), 0o600)
-            os.rename(data_dir + '/unit.image.new',
-                      data_dir + '/unit.image')
 
     # sysctl
     install_sysctl(ctx, fsid, daemon_type)
@@ -3697,10 +4036,8 @@ def deploy_daemon_units(
     install_base_units(ctx, fsid)
     unit = get_unit_file(ctx, fsid)
     unit_file = 'ceph-%s@.service' % (fsid)
-    with open(ctx.unit_dir + '/' + unit_file + '.new', 'w') as f:
+    with write_new(ctx.unit_dir + '/' + unit_file, perms=None) as f:
         f.write(unit)
-        os.rename(ctx.unit_dir + '/' + unit_file + '.new',
-                  ctx.unit_dir + '/' + unit_file)
     call_throws(ctx, ['systemctl', 'daemon-reload'])
 
     unit_name = get_unit_name(fsid, daemon_type, daemon_id)
@@ -3852,7 +4189,7 @@ def install_sysctl(ctx: CephadmContext, fsid: str, daemon_type: str) -> None:
             *lines,
             '',
         ]
-        with open(conf, 'w') as f:
+        with write_new(conf, owner=None, perms=None) as f:
             f.write('\n'.join(lines))
 
     conf = Path(ctx.sysctl_dir).joinpath(f'90-ceph-{fsid}-{daemon_type}.conf')
@@ -3864,6 +4201,8 @@ def install_sysctl(ctx: CephadmContext, fsid: str, daemon_type: str) -> None:
         lines = HAproxy.get_sysctl_settings()
     elif daemon_type == 'keepalived':
         lines = Keepalived.get_sysctl_settings()
+    elif daemon_type == CephNvmeof.daemon_type:
+        lines = CephNvmeof.get_sysctl_settings()
     lines = filter_sysctl_settings(ctx, lines)
 
     # apply the sysctl settings
@@ -3950,14 +4289,12 @@ def install_base_units(ctx, fsid):
     """
     # global unit
     existed = os.path.exists(ctx.unit_dir + '/ceph.target')
-    with open(ctx.unit_dir + '/ceph.target.new', 'w') as f:
+    with write_new(ctx.unit_dir + '/ceph.target', perms=None) as f:
         f.write('[Unit]\n'
                 'Description=All Ceph clusters and services\n'
                 '\n'
                 '[Install]\n'
                 'WantedBy=multi-user.target\n')
-        os.rename(ctx.unit_dir + '/ceph.target.new',
-                  ctx.unit_dir + '/ceph.target')
     if not existed:
         # we disable before enable in case a different ceph.target
         # (from the traditional package) is present; while newer
@@ -3970,7 +4307,7 @@ def install_base_units(ctx, fsid):
 
     # cluster unit
     existed = os.path.exists(ctx.unit_dir + '/ceph-%s.target' % fsid)
-    with open(ctx.unit_dir + '/ceph-%s.target.new' % fsid, 'w') as f:
+    with write_new(ctx.unit_dir + f'/ceph-{fsid}.target', perms=None) as f:
         f.write(
             '[Unit]\n'
             'Description=Ceph cluster {fsid}\n'
@@ -3981,8 +4318,6 @@ def install_base_units(ctx, fsid):
             'WantedBy=multi-user.target ceph.target\n'.format(
                 fsid=fsid)
         )
-        os.rename(ctx.unit_dir + '/ceph-%s.target.new' % fsid,
-                  ctx.unit_dir + '/ceph-%s.target' % fsid)
     if not existed:
         call_throws(ctx, ['systemctl', 'enable', 'ceph-%s.target' % fsid])
         call_throws(ctx, ['systemctl', 'start', 'ceph-%s.target' % fsid])
@@ -3992,7 +4327,7 @@ def install_base_units(ctx, fsid):
         return
 
     # logrotate for the cluster
-    with open(ctx.logrotate_dir + '/ceph-%s' % fsid, 'w') as f:
+    with write_new(ctx.logrotate_dir + f'/ceph-{fsid}', perms=None) as f:
         """
         This is a bit sloppy in that the killall/pkill will touch all ceph daemons
         in all containers, but I don't see an elegant way to send SIGHUP *just* to
@@ -4001,6 +4336,18 @@ def install_base_units(ctx, fsid):
         first child (bash), but that isn't the ceph daemon.  This is simpler and
         should be harmless.
         """
+        targets: List[str] = [
+            'ceph-mon',
+            'ceph-mgr',
+            'ceph-mds',
+            'ceph-osd',
+            'ceph-fuse',
+            'radosgw',
+            'rbd-mirror',
+            'cephfs-mirror',
+            'tcmu-runner'
+        ]
+
         f.write("""# created by cephadm
 /var/log/ceph/%s/*.log {
     rotate 7
@@ -4008,13 +4355,13 @@ def install_base_units(ctx, fsid):
     compress
     sharedscripts
     postrotate
-        killall -q -1 ceph-mon ceph-mgr ceph-mds ceph-osd ceph-fuse radosgw rbd-mirror cephfs-mirror || pkill -1 -x 'ceph-mon|ceph-mgr|ceph-mds|ceph-osd|ceph-fuse|radosgw|rbd-mirror|cephfs-mirror' || true
+        killall -q -1 %s || pkill -1 -x '%s' || true
     endscript
     missingok
     notifempty
     su root root
 }
-""" % fsid)
+""" % (fsid, ' '.join(targets), '|'.join(targets)))
 
 
 def get_unit_file(ctx, fsid):
@@ -4391,9 +4738,8 @@ class MgrListener(Thread):
             for filename in config:
                 if filename in self.agent.required_files:
                     file_path = os.path.join(self.agent.daemon_dir, filename)
-                    with open(os.open(file_path + '.new', os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
+                    with write_new(file_path) as f:
                         f.write(config[filename])
-                        os.rename(file_path + '.new', file_path)
             self.agent.pull_conf_settings()
             self.agent.wakeup()
 
@@ -4454,27 +4800,21 @@ class CephadmAgent():
         for filename in config:
             if filename in self.required_files:
                 file_path = os.path.join(self.daemon_dir, filename)
-                with open(os.open(file_path + '.new', os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
+                with write_new(file_path) as f:
                     f.write(config[filename])
-                    os.rename(file_path + '.new', file_path)
 
         unit_run_path = os.path.join(self.daemon_dir, 'unit.run')
-        with open(os.open(unit_run_path + '.new', os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
+        with write_new(unit_run_path) as f:
             f.write(self.unit_run())
-            os.rename(unit_run_path + '.new', unit_run_path)
 
-        meta: Dict[str, Any] = {}
+        meta: Dict[str, Any] = fetch_meta(self.ctx)
         meta_file_path = os.path.join(self.daemon_dir, 'unit.meta')
-        if 'meta_json' in self.ctx and self.ctx.meta_json:
-            meta = json.loads(self.ctx.meta_json) or {}
-        with open(os.open(meta_file_path + '.new', os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
+        with write_new(meta_file_path) as f:
             f.write(json.dumps(meta, indent=4) + '\n')
-            os.rename(meta_file_path + '.new', meta_file_path)
 
         unit_file_path = os.path.join(self.ctx.unit_dir, self.unit_name())
-        with open(os.open(unit_file_path + '.new', os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
+        with write_new(unit_file_path) as f:
             f.write(self.unit_file())
-            os.rename(unit_file_path + '.new', unit_file_path)
 
         call_throws(self.ctx, ['systemctl', 'daemon-reload'])
         call(self.ctx, ['systemctl', 'stop', self.unit_name()],
@@ -4557,7 +4897,7 @@ WantedBy=ceph-{fsid}.target
 
         try:
             for _ in range(1001):
-                if not port_in_use(self.ctx, self.starting_port):
+                if not port_in_use(self.ctx, EndPoint('0.0.0.0', self.starting_port)):
                     self.listener_port = str(self.starting_port)
                     break
                 self.starting_port += 1
@@ -4833,15 +5173,24 @@ def command_agent(ctx: CephadmContext) -> None:
 
 ##################################
 
-
-@infer_image
+@executes_early
 def command_version(ctx):
     # type: (CephadmContext) -> int
-    c = CephContainer(ctx, ctx.image, 'ceph', ['--version'])
-    out, err, ret = call(ctx, c.run_cmd(), desc=c.entrypoint)
-    if not ret:
-        print(out.strip())
-    return ret
+    import importlib
+
+    try:
+        vmod = importlib.import_module('_version')
+    except ImportError:
+        print('cephadm version UNKNOWN')
+        return 1
+    _unset = '<UNSET>'
+    print('cephadm version {0} ({1}) {2} ({3})'.format(
+        getattr(vmod, 'CEPH_GIT_NICE_VER', _unset),
+        getattr(vmod, 'CEPH_GIT_VER', _unset),
+        getattr(vmod, 'CEPH_RELEASE_NAME', _unset),
+        getattr(vmod, 'CEPH_RELEASE_TYPE', _unset),
+    ))
+    return 0
 
 ##################################
 
@@ -5333,7 +5682,7 @@ def create_mon(
     fsid: str, mon_id: str
 ) -> None:
     mon_c = get_container(ctx, fsid, 'mon', mon_id)
-    ctx.meta_json = json.dumps({'service_name': 'mon'})
+    ctx.meta_properties = {'service_name': 'mon'}
     deploy_daemon(ctx, fsid, 'mon', mon_id, mon_c, uid, gid,
                   config=None, keyring=None)
 
@@ -5380,12 +5729,12 @@ def create_mgr(
     mgr_keyring = '[mgr.%s]\n\tkey = %s\n' % (mgr_id, mgr_key)
     mgr_c = get_container(ctx, fsid, 'mgr', mgr_id)
     # Note:the default port used by the Prometheus node exporter is opened in fw
-    ctx.meta_json = json.dumps({'service_name': 'mgr'})
-    ports = [9283, 8765]
+    ctx.meta_properties = {'service_name': 'mgr'}
+    endpoints = [EndPoint('0.0.0.0', 9283), EndPoint('0.0.0.0', 8765)]
     if not ctx.skip_monitoring_stack:
-        ports.append(8443)
+        endpoints.append(EndPoint('0.0.0.0', 8443))
     deploy_daemon(ctx, fsid, 'mgr', mgr_id, mgr_c, uid, gid,
-                  config=config, keyring=mgr_keyring, ports=ports)
+                  config=config, keyring=mgr_keyring, endpoints=endpoints)
 
     # wait for the service to become available
     logger.info('Waiting for mgr to start...')
@@ -5402,6 +5751,7 @@ def create_mgr(
         except Exception as e:
             logger.debug('status failed: %s' % e)
             return False
+
     is_available(ctx, 'mgr', is_mgr_available)
 
 
@@ -5428,6 +5778,15 @@ def prepare_ssh(
         cli(['cephadm', 'set-priv-key', '-i', '/tmp/cephadm-ssh-key'], extra_mounts=mounts)
         cli(['cephadm', 'set-pub-key', '-i', '/tmp/cephadm-ssh-key.pub'], extra_mounts=mounts)
         ssh_pub = cli(['cephadm', 'get-pub-key'])
+        authorize_ssh_key(ssh_pub, ctx.ssh_user)
+    elif ctx.ssh_private_key and ctx.ssh_signed_cert:
+        logger.info('Using provided ssh private key and signed cert ...')
+        mounts = {
+            pathify(ctx.ssh_private_key.name): '/tmp/cephadm-ssh-key:z',
+            pathify(ctx.ssh_signed_cert.name): '/tmp/cephadm-ssh-key-cert.pub:z'
+        }
+        cli(['cephadm', 'set-priv-key', '-i', '/tmp/cephadm-ssh-key'], extra_mounts=mounts)
+        cli(['cephadm', 'set-signed-cert', '-i', '/tmp/cephadm-ssh-key-cert.pub'], extra_mounts=mounts)
     else:
         logger.info('Generating ssh key...')
         cli(['cephadm', 'generate-key'])
@@ -5435,8 +5794,7 @@ def prepare_ssh(
         with open(ctx.output_pub_ssh_key, 'w') as f:
             f.write(ssh_pub)
         logger.info('Wrote public SSH key to %s' % ctx.output_pub_ssh_key)
-
-    authorize_ssh_key(ssh_pub, ctx.ssh_user)
+        authorize_ssh_key(ssh_pub, ctx.ssh_user)
 
     host = get_hostname()
     logger.info('Adding host %s...' % host)
@@ -5649,8 +6007,10 @@ def finish_bootstrap_config(
         cli(['config', 'set', 'global', 'container_image', f'{ctx.image}'])
 
     if mon_network:
-        logger.info(f'Setting mon public_network to {mon_network}')
-        cli(['config', 'set', 'mon', 'public_network', mon_network])
+        cp = read_config(ctx.config)
+        cfg_section = 'global' if cp.has_option('global', 'public_network') else 'mon'
+        logger.info(f'Setting public_network to {mon_network} in {cfg_section} config section')
+        cli(['config', 'set', cfg_section, 'public_network', mon_network])
 
     if cluster_network:
         logger.info(f'Setting cluster_network to {cluster_network}')
@@ -5787,6 +6147,43 @@ def save_cluster_config(ctx: CephadmContext, uid: int, gid: int, fsid: str) -> N
         logger.warning(f'Cannot create cluster configuration directory {conf_dir}')
 
 
+def rollback(func: FuncT) -> FuncT:
+    """
+    """
+    @wraps(func)
+    def _rollback(ctx: CephadmContext) -> Any:
+        try:
+            return func(ctx)
+        except ClusterAlreadyExists:
+            # another cluster with the provided fsid already exists: don't remove.
+            raise
+        except (KeyboardInterrupt, Exception) as e:
+            logger.error(f'{type(e).__name__}: {e}')
+            if ctx.cleanup_on_failure:
+                logger.info('\n\n'
+                            '\t***************\n'
+                            '\tCephadm hit an issue during cluster installation. Current cluster files will be deleted automatically,\n'
+                            '\tto disable this behaviour do not pass the --cleanup-on-failure flag. In case of any previous\n'
+                            '\tbroken installation user must use the following command to completely delete the broken cluster:\n\n'
+                            '\t> cephadm rm-cluster --force --zap-osds --fsid <fsid>\n\n'
+                            '\tfor more information please refer to https://docs.ceph.com/en/latest/cephadm/operations/#purging-a-cluster\n'
+                            '\t***************\n\n')
+                _rm_cluster(ctx, keep_logs=False, zap_osds=False)
+            else:
+                logger.info('\n\n'
+                            '\t***************\n'
+                            '\tCephadm hit an issue during cluster installation. Current cluster files will NOT BE DELETED automatically to change\n'
+                            '\tthis behaviour you can pass the --cleanup-on-failure. To remove this broken cluster manually please run:\n\n'
+                            f'\t   > cephadm rm-cluster --force --fsid {ctx.fsid}\n\n'
+                            '\tin case of any previous broken installation user must use the rm-cluster command to delete the broken cluster:\n\n'
+                            '\t   > cephadm rm-cluster --force --zap-osds --fsid <fsid>\n\n'
+                            '\tfor more information please refer to https://docs.ceph.com/en/latest/cephadm/operations/#purging-a-cluster\n'
+                            '\t***************\n\n')
+            raise
+    return cast(FuncT, _rollback)
+
+
+@rollback
 @default_image
 def command_bootstrap(ctx):
     # type: (CephadmContext) -> int
@@ -5800,23 +6197,38 @@ def command_bootstrap(ctx):
     if not ctx.output_pub_ssh_key:
         ctx.output_pub_ssh_key = os.path.join(ctx.output_dir, CEPH_PUBKEY)
 
-    if bool(ctx.ssh_private_key) is not bool(ctx.ssh_public_key):
-        raise Error('--ssh-private-key and --ssh-public-key must be provided together or not at all.')
+    if (
+        (bool(ctx.ssh_private_key) is not bool(ctx.ssh_public_key))
+        and (bool(ctx.ssh_private_key) is not bool(ctx.ssh_signed_cert))
+    ):
+        raise Error('--ssh-private-key must be passed with either --ssh-public-key in the case of standard pubkey '
+                    'authentication or with --ssh-signed-cert in the case of CA signed signed keys or not provided at all.')
+
+    if (bool(ctx.ssh_public_key) and bool(ctx.ssh_signed_cert)):
+        raise Error('--ssh-public-key and --ssh-signed-cert are mututally exclusive. --ssh-public-key is intended '
+                    'for standard pubkey encryption where the public key is set as an authorized key on cluster hosts. '
+                    '--ssh-signed-cert is intended for the CA signed keys use case where cluster hosts are configured to trust '
+                    'a CA pub key and authentication during SSH is done by authenticating the signed cert, requiring no '
+                    'public key to be installed on the cluster hosts.')
 
     if ctx.fsid:
         data_dir_base = os.path.join(ctx.data_dir, ctx.fsid)
         if os.path.exists(data_dir_base):
-            raise Error(f"A cluster with the same fsid '{ctx.fsid}' already exists.")
+            raise ClusterAlreadyExists(f"A cluster with the same fsid '{ctx.fsid}' already exists.")
         else:
             logger.warning('Specifying an fsid for your cluster offers no advantages and may increase the likelihood of fsid conflicts.')
 
+    # initial vars
+    ctx.fsid = ctx.fsid or make_fsid()
+    fsid = ctx.fsid
+    if not is_fsid(fsid):
+        raise Error('not an fsid: %s' % fsid)
+
     # verify output files
-    for f in [ctx.output_config, ctx.output_keyring,
-              ctx.output_pub_ssh_key]:
+    for f in [ctx.output_config, ctx.output_keyring, ctx.output_pub_ssh_key]:
         if not ctx.allow_overwrite:
             if os.path.exists(f):
-                raise Error('%s already exists; delete or pass '
-                            '--allow-overwrite to overwrite' % f)
+                raise ClusterAlreadyExists('%s already exists; delete or pass --allow-overwrite to overwrite' % f)
         dirname = os.path.dirname(f)
         if dirname and not os.path.exists(dirname):
             fname = os.path.basename(f)
@@ -5837,12 +6249,7 @@ def command_bootstrap(ctx):
     else:
         logger.info('Skip prepare_host')
 
-    # initial vars
-    fsid = ctx.fsid or make_fsid()
-    if not is_fsid(fsid):
-        raise Error('not an fsid: %s' % fsid)
     logger.info('Cluster fsid: %s' % fsid)
-
     hostname = get_hostname()
     if '.' in hostname and not ctx.allow_fqdn_hostname:
         raise Error('hostname is a fully qualified domain name (%s); either fix (e.g., "sudo hostname %s" or similar) or pass --allow-fqdn-hostname' % (hostname, hostname.split('.')[0]))
@@ -5887,9 +6294,7 @@ def command_bootstrap(ctx):
     (mon_dir, log_dir) = prepare_create_mon(ctx, uid, gid, fsid, mon_id,
                                             bootstrap_keyring.name, monmap.name)
 
-    with open(mon_dir + '/config', 'w') as f:
-        os.fchown(f.fileno(), uid, gid)
-        os.fchmod(f.fileno(), 0o600)
+    with write_new(mon_dir + '/config', owner=(uid, gid)) as f:
         f.write(config)
 
     make_var_run(ctx, fsid, uid, gid)
@@ -5924,8 +6329,7 @@ def command_bootstrap(ctx):
                             cluster_network, ipv6_cluster_network)
 
     # output files
-    with open(ctx.output_keyring, 'w') as f:
-        os.fchmod(f.fileno(), 0o600)
+    with write_new(ctx.output_keyring) as f:
         f.write('[client.admin]\n'
                 '\tkey = ' + admin_key + '\n')
     logger.info('Wrote keyring to %s' % ctx.output_keyring)
@@ -6000,7 +6404,10 @@ def command_bootstrap(ctx):
         with open(ctx.apply_spec) as f:
             host_dicts = _extract_host_info_from_applied_spec(f)
             for h in host_dicts:
-                _distribute_ssh_keys(ctx, h, hostname)
+                if ctx.ssh_signed_cert:
+                    logger.info('Key distribution is not supported for signed CA key setups. Skipping ...')
+                else:
+                    _distribute_ssh_keys(ctx, h, hostname)
 
         mounts = {}
         mounts[pathify(ctx.apply_spec)] = '/tmp/spec.yml:ro'
@@ -6076,7 +6483,7 @@ def registry_login(ctx: CephadmContext, url: Optional[str], username: Optional[s
             cmd.append('--authfile=/etc/ceph/podman-auth.json')
         out, _, _ = call_throws(ctx, cmd)
         if isinstance(engine, Podman):
-            os.chmod('/etc/ceph/podman-auth.json', 0o600)
+            os.chmod('/etc/ceph/podman-auth.json', DEFAULT_MODE)
     except Exception:
         raise Error('Failed to login to custom registry @ %s as %s with given password' % (ctx.registry_url, ctx.registry_username))
 
@@ -6115,10 +6522,10 @@ def get_deployment_container(ctx: CephadmContext,
         c.container_args.extend(ctx.extra_container_args)
     if 'extra_entrypoint_args' in ctx and ctx.extra_entrypoint_args:
         c.args.extend(ctx.extra_entrypoint_args)
-    if 'config_json' in ctx and ctx.config_json:
-        conf_files = get_custom_config_files(ctx.config_json)
+    ccfiles = fetch_custom_config_files(ctx)
+    if ccfiles:
         mandatory_keys = ['mount_path', 'content']
-        for conf in conf_files['custom_config_files']:
+        for conf in ccfiles:
             if all(k in conf for k in mandatory_keys):
                 mount_path = conf['mount_path']
                 file_path = os.path.join(
@@ -6132,50 +6539,118 @@ def get_deployment_container(ctx: CephadmContext,
     return c
 
 
+def get_deployment_type(ctx: CephadmContext, daemon_type: str, daemon_id: str) -> DeploymentType:
+    deployment_type: DeploymentType = DeploymentType.DEFAULT
+    if ctx.reconfig:
+        deployment_type = DeploymentType.RECONFIG
+    unit_name = get_unit_name(ctx.fsid, daemon_type, daemon_id)
+    (_, state, _) = check_unit(ctx, unit_name)
+    if state == 'running' or is_container_running(ctx, CephContainer.for_daemon(ctx, ctx.fsid, daemon_type, daemon_id, 'bash')):
+        # if reconfig was set, that takes priority over redeploy. If
+        # this is considered a fresh deployment at this stage,
+        # mark it as a redeploy to avoid port checking
+        if deployment_type == DeploymentType.DEFAULT:
+            deployment_type = DeploymentType.REDEPLOY
+
+    logger.info(f'{deployment_type.value} daemon {ctx.name} ...')
+
+    return deployment_type
+
+
 @default_image
+@deprecated_command
 def command_deploy(ctx):
     # type: (CephadmContext) -> None
-    daemon_type, daemon_id = ctx.name.split('.', 1)
+    _common_deploy(ctx)
 
-    lock = FileLock(ctx, ctx.fsid)
-    lock.acquire()
 
+def read_configuration_source(ctx: CephadmContext) -> Dict[str, Any]:
+    """Read a JSON configuration based on the `ctx.source` value."""
+    source = '-'
+    if 'source' in ctx and ctx.source:
+        source = ctx.source
+    if source == '-':
+        config_data = json.load(sys.stdin)
+    else:
+        with open(source, 'rb') as fh:
+            config_data = json.load(fh)
+    logger.debug('Loaded deploy configuration: %r', config_data)
+    return config_data
+
+
+def apply_deploy_config_to_ctx(
+    config_data: Dict[str, Any],
+    ctx: CephadmContext,
+) -> None:
+    """Bind properties taken from the config_data dictionary to our ctx,
+    similar to how cli options on `deploy` are bound to the context.
+    """
+    ctx.name = config_data['name']
+    image = config_data.get('image', '')
+    if image:
+        ctx.image = image
+    if 'fsid' in config_data:
+        ctx.fsid = config_data['fsid']
+    if 'meta' in config_data:
+        ctx.meta_properties = config_data['meta']
+    if 'config_blobs' in config_data:
+        ctx.config_blobs = config_data['config_blobs']
+
+    # many functions don't check that an attribute is set on the ctx
+    # (with getattr or the '__contains__' func on ctx).
+    # This reuses the defaults from the CLI options so we don't
+    # have to repeat things and they can stay in sync.
+    facade = ArgumentFacade()
+    _add_deploy_parser_args(facade)
+    facade.apply(ctx)
+    for key, value in config_data.get('params', {}).items():
+        if key not in facade.defaults:
+            logger.warning('unexpected parameter: %r=%r', key, value)
+        setattr(ctx, key, value)
+    update_default_image(ctx)
+    logger.debug('Determined image: %r', ctx.image)
+
+
+def command_deploy_from(ctx: CephadmContext) -> None:
+    """The deploy-from command is similar to deploy but sources nearly all
+    configuration parameters from an input JSON configuration file.
+    """
+    config_data = read_configuration_source(ctx)
+    apply_deploy_config_to_ctx(config_data, ctx)
+    _common_deploy(ctx)
+
+
+def _common_deploy(ctx: CephadmContext) -> None:
+    daemon_type, daemon_id = ctx.name.split('.', 1)
     if daemon_type not in get_supported_daemons():
         raise Error('daemon type %s not recognized' % daemon_type)
 
-    redeploy = False
-    unit_name = get_unit_name(ctx.fsid, daemon_type, daemon_id)
-    (_, state, _) = check_unit(ctx, unit_name)
-    if state == 'running' or is_container_running(ctx, CephContainer.for_daemon(ctx, ctx.fsid, daemon_type, daemon_id, 'bash')):
-        redeploy = True
+    lock = FileLock(ctx, ctx.fsid)
+    lock.acquire()
 
-    if ctx.reconfig:
-        logger.info('%s daemon %s ...' % ('Reconfig', ctx.name))
-    elif redeploy:
-        logger.info('%s daemon %s ...' % ('Redeploy', ctx.name))
-    else:
-        logger.info('%s daemon %s ...' % ('Deploy', ctx.name))
+    deployment_type = get_deployment_type(ctx, daemon_type, daemon_id)
 
     # Migrate sysctl conf files from /usr/lib to /etc
     migrate_sysctl_dir(ctx, ctx.fsid)
 
     # Get and check ports explicitly required to be opened
-    daemon_ports = []  # type: List[int]
+    endpoints = fetch_tcp_ports(ctx)
+    _dispatch_deploy(ctx, daemon_type, daemon_id, endpoints, deployment_type)
 
-    # only check port in use if not reconfig or redeploy since service
-    # we are redeploying/reconfiguring will already be using the port
-    if not ctx.reconfig and not redeploy:
-        if ctx.tcp_ports:
-            daemon_ports = list(map(int, ctx.tcp_ports.split()))
 
+def _dispatch_deploy(
+    ctx: CephadmContext,
+    daemon_type: str,
+    daemon_id: str,
+    daemon_endpoints: List[EndPoint],
+    deployment_type: DeploymentType,
+) -> None:
     if daemon_type in Ceph.daemons:
         config, keyring = get_config_and_keyring(ctx)
         uid, gid = extract_uid_gid(ctx)
         make_var_run(ctx, ctx.fsid, uid, gid)
 
-        config_json: Optional[Dict[str, str]] = None
-        if 'config_json' in ctx and ctx.config_json:
-            config_json = get_parm(ctx.config_json)
+        config_json = fetch_configs(ctx)
 
         c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id,
                                      ptrace=ctx.allow_ptrace)
@@ -6191,14 +6666,14 @@ def command_deploy(ctx):
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c, uid, gid,
                       config=config, keyring=keyring,
                       osd_fsid=ctx.osd_fsid,
-                      reconfig=ctx.reconfig,
-                      ports=daemon_ports)
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
 
     elif daemon_type in Monitoring.components:
         # monitoring daemon - prometheus, grafana, alertmanager, node-exporter
         # Default Checks
         # make sure provided config-json is sufficient
-        config = get_parm(ctx.config_json)  # type: ignore
+        config = fetch_configs(ctx)  # type: ignore
         required_files = Monitoring.components[daemon_type].get('config-json-files', list())
         required_args = Monitoring.components[daemon_type].get('config-json-args', list())
         if required_files:
@@ -6213,12 +6688,14 @@ def command_deploy(ctx):
         uid, gid = extract_uid_gid_monitoring(ctx, daemon_type)
         c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id)
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c, uid, gid,
-                      reconfig=ctx.reconfig,
-                      ports=daemon_ports)
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
 
     elif daemon_type == NFSGanesha.daemon_type:
-        if not ctx.reconfig and not redeploy and not daemon_ports:
-            daemon_ports = list(NFSGanesha.port_map.values())
+        # only check ports if this is a fresh deployment
+        if deployment_type == DeploymentType.DEFAULT and not daemon_endpoints:
+            nfs_ports = list(NFSGanesha.port_map.values())
+            daemon_endpoints = [EndPoint('0.0.0.0', p) for p in nfs_ports]
 
         config, keyring = get_config_and_keyring(ctx)
         # TODO: extract ganesha uid/gid (997, 994) ?
@@ -6226,8 +6703,8 @@ def command_deploy(ctx):
         c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id)
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c, uid, gid,
                       config=config, keyring=keyring,
-                      reconfig=ctx.reconfig,
-                      ports=daemon_ports)
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
 
     elif daemon_type == CephIscsi.daemon_type:
         config, keyring = get_config_and_keyring(ctx)
@@ -6235,55 +6712,68 @@ def command_deploy(ctx):
         c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id)
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c, uid, gid,
                       config=config, keyring=keyring,
-                      reconfig=ctx.reconfig,
-                      ports=daemon_ports)
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
+    elif daemon_type == CephNvmeof.daemon_type:
+        config, keyring = get_config_and_keyring(ctx)
+        uid, gid = 167, 167  # TODO: need to get properly the uid/gid
+        c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id)
+        deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c, uid, gid,
+                      config=config, keyring=keyring,
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
     elif daemon_type in Tracing.components:
         uid, gid = 65534, 65534
         c = get_container(ctx, ctx.fsid, daemon_type, daemon_id)
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c, uid, gid,
-                      reconfig=ctx.reconfig,
-                      ports=daemon_ports)
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
     elif daemon_type == HAproxy.daemon_type:
         haproxy = HAproxy.init(ctx, ctx.fsid, daemon_id)
         uid, gid = haproxy.extract_uid_gid_haproxy()
         c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id)
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c, uid, gid,
-                      reconfig=ctx.reconfig,
-                      ports=daemon_ports)
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
 
     elif daemon_type == Keepalived.daemon_type:
         keepalived = Keepalived.init(ctx, ctx.fsid, daemon_id)
         uid, gid = keepalived.extract_uid_gid_keepalived()
         c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id)
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c, uid, gid,
-                      reconfig=ctx.reconfig,
-                      ports=daemon_ports)
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
 
     elif daemon_type == CustomContainer.daemon_type:
         cc = CustomContainer.init(ctx, ctx.fsid, daemon_id)
-        if not ctx.reconfig and not redeploy:
-            daemon_ports.extend(cc.ports)
+        # only check ports if this is a fresh deployment
+        if deployment_type == DeploymentType.DEFAULT:
+            daemon_endpoints.extend([EndPoint('0.0.0.0', p) for p in cc.ports])
         c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id,
                                      privileged=cc.privileged,
                                      ptrace=ctx.allow_ptrace)
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c,
                       uid=cc.uid, gid=cc.gid, config=None,
-                      keyring=None, reconfig=ctx.reconfig,
-                      ports=daemon_ports)
+                      keyring=None,
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
 
     elif daemon_type == CephadmAgent.daemon_type:
         # get current user gid and uid
         uid = os.getuid()
         gid = os.getgid()
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, None,
-                      uid, gid, ports=daemon_ports)
+                      uid, gid,
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
 
     elif daemon_type == SNMPGateway.daemon_type:
         sc = SNMPGateway.init(ctx, ctx.fsid, daemon_id)
         c = get_deployment_container(ctx, ctx.fsid, daemon_type, daemon_id)
         deploy_daemon(ctx, ctx.fsid, daemon_type, daemon_id, c,
                       sc.uid, sc.gid,
-                      ports=daemon_ports)
+                      deployment_type=deployment_type,
+                      endpoints=daemon_endpoints)
 
     else:
         raise Error('daemon type {} not implemented in command_deploy function'
@@ -6398,6 +6888,10 @@ def command_shell(ctx):
         privileged=True)
     command = c.shell_cmd(command)
 
+    if ctx.dry_run:
+        print(' '.join(shlex.quote(arg) for arg in command))
+        return 0
+
     return call_timeout(ctx, command, ctx.timeout)
 
 ##################################
@@ -6774,6 +7268,8 @@ def list_daemons(ctx, detail=True, legacy_dir=None):
                                 version = NFSGanesha.get_version(ctx, container_id)
                             if daemon_type == CephIscsi.daemon_type:
                                 version = CephIscsi.get_version(ctx, container_id)
+                            if daemon_type == CephNvmeof.daemon_type:
+                                version = CephNvmeof.get_version(ctx, container_id)
                             elif not version:
                                 if daemon_type in Ceph.daemons:
                                     out, err, code = call(ctx,
@@ -6806,7 +7302,8 @@ def list_daemons(ctx, detail=True, legacy_dir=None):
                                                            'haproxy', '-v'],
                                                           verbosity=CallVerbosity.QUIET)
                                     if not code and \
-                                       out.startswith('HA-Proxy version '):
+                                       out.startswith('HA-Proxy version ') or \
+                                       out.startswith('HAProxy version '):
                                         version = out.split(' ')[2]
                                         seen_versions[image_id] = version
                                 elif daemon_type == 'keepalived':
@@ -7208,6 +7705,10 @@ def command_adopt_prometheus(ctx, daemon_id, fsid):
     # type: (CephadmContext, str, str) -> None
     daemon_type = 'prometheus'
     (uid, gid) = extract_uid_gid_monitoring(ctx, daemon_type)
+    # should try to set the ports we know cephadm defaults
+    # to for these services in the firewall.
+    ports = Monitoring.port_map['prometheus']
+    endpoints = [EndPoint('0.0.0.0', p) for p in ports]
 
     _stop_and_disable(ctx, 'prometheus')
 
@@ -7229,7 +7730,8 @@ def command_adopt_prometheus(ctx, daemon_id, fsid):
 
     make_var_run(ctx, fsid, uid, gid)
     c = get_container(ctx, fsid, daemon_type, daemon_id)
-    deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid)
+    deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid,
+                  deployment_type=DeploymentType.REDEPLOY, endpoints=endpoints)
     update_firewalld(ctx, daemon_type)
 
 
@@ -7238,6 +7740,10 @@ def command_adopt_grafana(ctx, daemon_id, fsid):
 
     daemon_type = 'grafana'
     (uid, gid) = extract_uid_gid_monitoring(ctx, daemon_type)
+    # should try to set the ports we know cephadm defaults
+    # to for these services in the firewall.
+    ports = Monitoring.port_map['grafana']
+    endpoints = [EndPoint('0.0.0.0', p) for p in ports]
 
     _stop_and_disable(ctx, 'grafana-server')
 
@@ -7283,7 +7789,8 @@ def command_adopt_grafana(ctx, daemon_id, fsid):
 
     make_var_run(ctx, fsid, uid, gid)
     c = get_container(ctx, fsid, daemon_type, daemon_id)
-    deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid)
+    deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid,
+                  deployment_type=DeploymentType.REDEPLOY, endpoints=endpoints)
     update_firewalld(ctx, daemon_type)
 
 
@@ -7292,6 +7799,10 @@ def command_adopt_alertmanager(ctx, daemon_id, fsid):
 
     daemon_type = 'alertmanager'
     (uid, gid) = extract_uid_gid_monitoring(ctx, daemon_type)
+    # should try to set the ports we know cephadm defaults
+    # to for these services in the firewall.
+    ports = Monitoring.port_map['alertmanager']
+    endpoints = [EndPoint('0.0.0.0', p) for p in ports]
 
     _stop_and_disable(ctx, 'prometheus-alertmanager')
 
@@ -7313,7 +7824,8 @@ def command_adopt_alertmanager(ctx, daemon_id, fsid):
 
     make_var_run(ctx, fsid, uid, gid)
     c = get_container(ctx, fsid, daemon_type, daemon_id)
-    deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid)
+    deploy_daemon(ctx, fsid, daemon_type, daemon_id, c, uid, gid,
+                  deployment_type=DeploymentType.REDEPLOY, endpoints=endpoints)
     update_firewalld(ctx, daemon_type)
 
 
@@ -7325,7 +7837,7 @@ def _adjust_grafana_ini(filename):
     try:
         with open(filename, 'r') as grafana_ini:
             lines = grafana_ini.readlines()
-        with open('{}.new'.format(filename), 'w') as grafana_ini:
+        with write_new(filename, perms=None) as grafana_ini:
             server_section = False
             for line in lines:
                 if line.startswith('['):
@@ -7338,7 +7850,6 @@ def _adjust_grafana_ini(filename):
                     line = re.sub(r'^cert_key.*',
                                   'cert_key = /etc/grafana/certs/cert_key', line)
                 grafana_ini.write(line)
-        os.rename('{}.new'.format(filename), filename)
     except OSError as err:
         raise Error('Cannot update {}: {}'.format(filename, err))
 
@@ -7396,8 +7907,9 @@ def command_rm_daemon(ctx):
     else:
         call_throws(ctx, ['rm', '-rf', data_dir])
 
-    if 'tcp_ports' in ctx and ctx.tcp_ports is not None:
-        ports: List[int] = [int(p) for p in ctx.tcp_ports.split()]
+    endpoints = fetch_tcp_ports(ctx)
+    ports: List[int] = [e.port for e in endpoints]
+    if ports:
         try:
             fw = Firewalld(ctx)
             fw.close_ports(ports)
@@ -7467,14 +7979,20 @@ def get_ceph_cluster_count(ctx: CephadmContext) -> int:
     return len([c for c in os.listdir(ctx.data_dir) if is_fsid(c)])
 
 
-def command_rm_cluster(ctx):
-    # type: (CephadmContext) -> None
+def command_rm_cluster(ctx: CephadmContext) -> None:
     if not ctx.force:
         raise Error('must pass --force to proceed: '
                     'this command may destroy precious data!')
 
     lock = FileLock(ctx, ctx.fsid)
     lock.acquire()
+    _rm_cluster(ctx, ctx.keep_logs, ctx.zap_osds)
+
+
+def _rm_cluster(ctx: CephadmContext, keep_logs: bool, zap_osds: bool) -> None:
+
+    if not ctx.fsid:
+        raise Error('must select the cluster to delete by passing --fsid to proceed')
 
     def disable_systemd_service(unit_name: str) -> None:
         call(ctx, ['systemctl', 'stop', unit_name],
@@ -7484,6 +8002,8 @@ def command_rm_cluster(ctx):
         call(ctx, ['systemctl', 'disable', unit_name],
              verbosity=CallVerbosity.DEBUG)
 
+    logger.info(f'Deleting cluster with fsid: {ctx.fsid}')
+
     # stop + disable individual daemon units
     for d in list_daemons(ctx, detail=False):
         if d['fsid'] != ctx.fsid:
@@ -7501,7 +8021,7 @@ def command_rm_cluster(ctx):
          verbosity=CallVerbosity.DEBUG)
 
     # osds?
-    if ctx.zap_osds:
+    if zap_osds:
         _zap_osds(ctx)
 
     # rm units
@@ -7514,7 +8034,7 @@ def command_rm_cluster(ctx):
     # rm data
     call_throws(ctx, ['rm', '-rf', ctx.data_dir + '/' + ctx.fsid])
 
-    if not ctx.keep_logs:
+    if not keep_logs:
         # rm logs
         call_throws(ctx, ['rm', '-rf', ctx.log_dir + '/' + ctx.fsid])
         call_throws(ctx, ['rm', '-rf', ctx.log_dir
@@ -7534,7 +8054,7 @@ def command_rm_cluster(ctx):
         # rm cephadm logrotate config
         call_throws(ctx, ['rm', '-f', ctx.logrotate_dir + '/cephadm'])
 
-        if not ctx.keep_logs:
+        if not keep_logs:
             # remove all cephadm logs
             for fname in glob(f'{ctx.log_dir}/cephadm.log*'):
                 os.remove(fname)
@@ -7547,7 +8067,7 @@ def command_rm_cluster(ctx):
             p.unlink()
 
     # cleanup remaining ceph directories
-    ceph_dirs = [f'/run/ceph/{ctx.fsid}', f'/tmp/var/lib/ceph/{ctx.fsid}', f'/var/run/ceph/{ctx.fsid}']
+    ceph_dirs = [f'/run/ceph/{ctx.fsid}', f'/tmp/cephadm-{ctx.fsid}', f'/var/run/ceph/{ctx.fsid}']
     for dd in ceph_dirs:
         shutil.rmtree(dd, ignore_errors=True)
 
@@ -7671,7 +8191,7 @@ def authorize_ssh_key(ssh_pub_key: str, ssh_user: str) -> bool:
 
     with open(auth_keys_file, 'a') as f:
         os.fchown(f.fileno(), ssh_uid, ssh_gid)  # just in case we created it
-        os.fchmod(f.fileno(), 0o600)  # just in case we created it
+        os.fchmod(f.fileno(), DEFAULT_MODE)  # just in case we created it
         if add_newline:
             f.write('\n')
         f.write(ssh_pub_key + '\n')
@@ -7690,7 +8210,7 @@ def revoke_ssh_key(key: str, ssh_user: str) -> None:
         _, filename = tempfile.mkstemp()
         with open(filename, 'w') as f:
             os.fchown(f.fileno(), ssh_uid, ssh_gid)
-            os.fchmod(f.fileno(), 0o600)  # secure access to the keys file
+            os.fchmod(f.fileno(), DEFAULT_MODE)  # secure access to the keys file
             for line in lines:
                 if line.strip() == key.strip():
                     deleted = True
@@ -7715,11 +8235,17 @@ def check_ssh_connectivity(ctx: CephadmContext) -> None:
         logger.warning('Cannot check ssh connectivity. Skipping...')
         return
 
-    logger.info('Verifying ssh connectivity ...')
+    ssh_priv_key_path = ''
+    ssh_pub_key_path = ''
+    ssh_signed_cert_path = ''
     if ctx.ssh_private_key and ctx.ssh_public_key:
         # let's use the keys provided by the user
         ssh_priv_key_path = pathify(ctx.ssh_private_key.name)
         ssh_pub_key_path = pathify(ctx.ssh_public_key.name)
+    elif ctx.ssh_private_key and ctx.ssh_signed_cert:
+        # CA signed keys use case
+        ssh_priv_key_path = pathify(ctx.ssh_private_key.name)
+        ssh_signed_cert_path = pathify(ctx.ssh_signed_cert.name)
     else:
         # no custom keys, let's generate some random keys just for this check
         ssh_priv_key_path = f'/tmp/ssh_key_{uuid.uuid1()}'
@@ -7730,31 +8256,35 @@ def check_ssh_connectivity(ctx: CephadmContext) -> None:
             logger.warning('Cannot generate keys to check ssh connectivity.')
             return
 
-    with open(ssh_pub_key_path, 'r') as f:
-        key = f.read().strip()
-    new_key = authorize_ssh_key(key, ctx.ssh_user)
-    ssh_cfg_file_arg = ['-F', pathify(ctx.ssh_config.name)] if ctx.ssh_config else []
-    _, _, code = call(ctx, ['ssh', '-o StrictHostKeyChecking=no',
-                            *ssh_cfg_file_arg, '-i', ssh_priv_key_path,
-                            '-o PasswordAuthentication=no',
-                            f'{ctx.ssh_user}@{get_hostname()}',
-                            'sudo echo'])
-
-    # we only remove the key if it's a new one. In case the user has provided
-    # some already existing key then we don't alter authorized_keys file
-    if new_key:
-        revoke_ssh_key(key, ctx.ssh_user)
-
-    pub_key_msg = '- The public key file configured by --ssh-public-key is valid\n' if ctx.ssh_public_key else ''
-    prv_key_msg = '- The private key file configured by --ssh-private-key is valid\n' if ctx.ssh_private_key else ''
-    ssh_cfg_msg = '- The ssh configuration file configured by --ssh-config is valid\n' if ctx.ssh_config else ''
-    err_msg = f"""
+    if ssh_signed_cert_path:
+        logger.info('Verification for CA signed keys authentication not implemented. Skipping ...')
+    elif ssh_pub_key_path:
+        logger.info('Verifying ssh connectivity using standard pubkey authentication ...')
+        with open(ssh_pub_key_path, 'r') as f:
+            key = f.read().strip()
+        new_key = authorize_ssh_key(key, ctx.ssh_user)
+        ssh_cfg_file_arg = ['-F', pathify(ctx.ssh_config.name)] if ctx.ssh_config else []
+        _, _, code = call(ctx, ['ssh', '-o StrictHostKeyChecking=no',
+                                *ssh_cfg_file_arg, '-i', ssh_priv_key_path,
+                                '-o PasswordAuthentication=no',
+                                f'{ctx.ssh_user}@{get_hostname()}',
+                                'sudo echo'])
+
+        # we only remove the key if it's a new one. In case the user has provided
+        # some already existing key then we don't alter authorized_keys file
+        if new_key:
+            revoke_ssh_key(key, ctx.ssh_user)
+
+        pub_key_msg = '- The public key file configured by --ssh-public-key is valid\n' if ctx.ssh_public_key else ''
+        prv_key_msg = '- The private key file configured by --ssh-private-key is valid\n' if ctx.ssh_private_key else ''
+        ssh_cfg_msg = '- The ssh configuration file configured by --ssh-config is valid\n' if ctx.ssh_config else ''
+        err_msg = f"""
 ** Please verify your user's ssh configuration and make sure:
 - User {ctx.ssh_user} must have passwordless sudo access
 {pub_key_msg}{prv_key_msg}{ssh_cfg_msg}
 """
-    if code != 0:
-        raise Error(err_msg)
+        if code != 0:
+            raise Error(err_msg)
 
 
 def command_prepare_host(ctx: CephadmContext) -> None:
@@ -9321,6 +9851,93 @@ def command_maintenance(ctx: CephadmContext) -> str:
 ##################################
 
 
+class ArgumentFacade:
+    def __init__(self) -> None:
+        self.defaults: Dict[str, Any] = {}
+
+    def add_argument(self, *args: Any, **kwargs: Any) -> None:
+        if not args:
+            raise ValueError('expected at least one argument')
+        name = args[0]
+        if not name.startswith('--'):
+            raise ValueError(f'expected long option, got: {name!r}')
+        name = name[2:].replace('-', '_')
+        value = kwargs.pop('default', None)
+        self.defaults[name] = value
+
+    def apply(self, ctx: CephadmContext) -> None:
+        for key, value in self.defaults.items():
+            setattr(ctx, key, value)
+
+
+def _add_deploy_parser_args(
+    parser_deploy: Union[argparse.ArgumentParser, ArgumentFacade],
+) -> None:
+    parser_deploy.add_argument(
+        '--config', '-c',
+        help='config file for new daemon')
+    parser_deploy.add_argument(
+        '--config-json',
+        help='Additional configuration information in JSON format')
+    parser_deploy.add_argument(
+        '--keyring',
+        help='keyring for new daemon')
+    parser_deploy.add_argument(
+        '--key',
+        help='key for new daemon')
+    parser_deploy.add_argument(
+        '--osd-fsid',
+        help='OSD uuid, if creating an OSD container')
+    parser_deploy.add_argument(
+        '--skip-firewalld',
+        action='store_true',
+        help='Do not configure firewalld')
+    parser_deploy.add_argument(
+        '--tcp-ports',
+        help='List of tcp ports to open in the host firewall')
+    parser_deploy.add_argument(
+        '--port-ips',
+        help='JSON dict mapping ports to IPs they need to be bound on'
+    )
+    parser_deploy.add_argument(
+        '--reconfig',
+        action='store_true',
+        help='Reconfigure a previously deployed daemon')
+    parser_deploy.add_argument(
+        '--allow-ptrace',
+        action='store_true',
+        help='Allow SYS_PTRACE on daemon container')
+    parser_deploy.add_argument(
+        '--container-init',
+        action='store_true',
+        default=CONTAINER_INIT,
+        help=argparse.SUPPRESS)
+    parser_deploy.add_argument(
+        '--memory-request',
+        help='Container memory request/target'
+    )
+    parser_deploy.add_argument(
+        '--memory-limit',
+        help='Container memory hard limit'
+    )
+    parser_deploy.add_argument(
+        '--meta-json',
+        help='JSON dict of additional metadata'
+    )
+    parser_deploy.add_argument(
+        '--extra-container-args',
+        action='append',
+        default=[],
+        help='Additional container arguments to apply to daemon'
+    )
+    parser_deploy.add_argument(
+        '--extra-entrypoint-args',
+        action='append',
+        default=[],
+        help='Additional entrypoint arguments to apply to deamon'
+    )
+
+
 def _get_parser():
     # type: () -> argparse.ArgumentParser
     parser = argparse.ArgumentParser(
@@ -9387,7 +10004,7 @@ def _get_parser():
     subparsers = parser.add_subparsers(help='sub-command')
 
     parser_version = subparsers.add_parser(
-        'version', help='get ceph version from container')
+        'version', help='get cephadm version')
     parser_version.set_defaults(func=command_version)
 
     parser_pull = subparsers.add_parser(
@@ -9558,6 +10175,10 @@ def _get_parser():
         '--no-hosts',
         action='store_true',
         help='dont pass /etc/hosts through to the container')
+    parser_shell.add_argument(
+        '--dry-run',
+        action='store_true',
+        help='print, but do not execute, the container command to start the shell')
 
     parser_enter = subparsers.add_parser(
         'enter', help='run an interactive shell inside a running daemon container')
@@ -9714,6 +10335,10 @@ def _get_parser():
         '--ssh-public-key',
         type=argparse.FileType('r'),
         help='SSH public key')
+    parser_bootstrap.add_argument(
+        '--ssh-signed-cert',
+        type=argparse.FileType('r'),
+        help='Signed cert for setups using CA signed SSH keys')
     parser_bootstrap.add_argument(
         '--ssh-user',
         default='root',
@@ -9750,6 +10375,11 @@ def _get_parser():
         '--allow-overwrite',
         action='store_true',
         help='allow overwrite of existing --output-* config/keyring/ssh files')
+    parser_bootstrap.add_argument(
+        '--cleanup-on-failure',
+        action='store_true',
+        default=False,
+        help='Delete cluster files in case of a failed installation')
     parser_bootstrap.add_argument(
         '--allow-fqdn-hostname',
         action='store_true',
@@ -9823,64 +10453,29 @@ def _get_parser():
         '--fsid',
         required=True,
         help='cluster FSID')
-    parser_deploy.add_argument(
-        '--config', '-c',
-        help='config file for new daemon')
-    parser_deploy.add_argument(
-        '--config-json',
-        help='Additional configuration information in JSON format')
-    parser_deploy.add_argument(
-        '--keyring',
-        help='keyring for new daemon')
-    parser_deploy.add_argument(
-        '--key',
-        help='key for new daemon')
-    parser_deploy.add_argument(
-        '--osd-fsid',
-        help='OSD uuid, if creating an OSD container')
-    parser_deploy.add_argument(
-        '--skip-firewalld',
-        action='store_true',
-        help='Do not configure firewalld')
-    parser_deploy.add_argument(
-        '--tcp-ports',
-        help='List of tcp ports to open in the host firewall')
-    parser_deploy.add_argument(
-        '--reconfig',
-        action='store_true',
-        help='Reconfigure a previously deployed daemon')
-    parser_deploy.add_argument(
-        '--allow-ptrace',
-        action='store_true',
-        help='Allow SYS_PTRACE on daemon container')
-    parser_deploy.add_argument(
-        '--container-init',
-        action='store_true',
-        default=CONTAINER_INIT,
-        help=argparse.SUPPRESS)
-    parser_deploy.add_argument(
-        '--memory-request',
-        help='Container memory request/target'
-    )
-    parser_deploy.add_argument(
-        '--memory-limit',
-        help='Container memory hard limit'
-    )
-    parser_deploy.add_argument(
-        '--meta-json',
-        help='JSON dict of additional metadata'
+    _add_deploy_parser_args(parser_deploy)
+
+    parser_orch = subparsers.add_parser(
+        '_orch',
     )
-    parser_deploy.add_argument(
-        '--extra-container-args',
-        action='append',
-        default=[],
-        help='Additional container arguments to apply to daemon'
+    subparsers_orch = parser_orch.add_subparsers(
+        title='Orchestrator Driven Commands',
+        description='Commands that are typically only run by cephadm mgr module',
     )
-    parser_deploy.add_argument(
-        '--extra-entrypoint-args',
-        action='append',
-        default=[],
-        help='Additional entrypoint arguments to apply to deamon'
+
+    parser_deploy_from = subparsers_orch.add_parser(
+        'deploy', help='deploy a daemon')
+    parser_deploy_from.set_defaults(func=command_deploy_from)
+    # currently cephadm mgr module passes an fsid option on the CLI too
+    # TODO: remove this and always source fsid from the JSON?
+    parser_deploy_from.add_argument(
+        '--fsid',
+        help='cluster FSID')
+    parser_deploy_from.add_argument(
+        'source',
+        default='-',
+        nargs='?',
+        help='Configuration input source file',
     )
 
     parser_check_host = subparsers.add_parser(
@@ -10066,6 +10661,15 @@ def main() -> None:
         sys.stderr.write('No command specified; pass -h or --help for usage\n')
         sys.exit(1)
 
+    if ctx.has_function() and getattr(ctx.func, '_execute_early', False):
+        try:
+            sys.exit(ctx.func(ctx))
+        except Error as e:
+            if ctx.verbose:
+                raise
+            logger.error('ERROR: %s' % e)
+            sys.exit(1)
+
     cephadm_require_root()
     cephadm_init_logging(ctx, av)
     try:
@@ -10082,7 +10686,7 @@ def main() -> None:
             check_container_engine(ctx)
         # command handler
         r = ctx.func(ctx)
-    except Error as e:
+    except (Error, ClusterAlreadyExists) as e:
         if ctx.verbose:
             raise
         logger.error('ERROR: %s' % e)
index b3926f9a9de840d901a99764abb3dd4ab3b04711..76ac0b44cf98740dffc4a1d9ba352b0f51ce5958 100644 (file)
@@ -1,4 +1,3 @@
-from importlib.resources import contents
 import mock
 import os
 import pytest
@@ -71,8 +70,17 @@ def cephadm_fs(
     uid = os.getuid()
     gid = os.getgid()
 
+    def fchown(fd, _uid, _gid):
+        """pyfakefs doesn't provide a working fchown or fchmod.
+        In order to get permissions working generally across renames
+        we need to provide our own implemenation.
+        """
+        file_obj = fs.get_open_file(fd).get_object()
+        file_obj.st_uid = _uid
+        file_obj.st_gid = _gid
+
     _cephadm = import_cephadm()
-    with mock.patch('os.fchown'), \
+    with mock.patch('os.fchown', side_effect=fchown), \
          mock.patch('os.fchmod'), \
          mock.patch('platform.processor', return_value='x86_64'), \
          mock.patch('cephadm.extract_uid_gid', return_value=(uid, gid)):
index f579729405a891b87fa387590499fc81bf1a1ec0..f9cf201e27527f3e7deebbbff6dafd235e54c7d7 100644 (file)
@@ -433,8 +433,8 @@ def test_agent_run(_pull_conf_settings, _port_in_use, _gatherer_start,
     host = AGENT_ID
     device_enhanced_scan = False
 
-    def _fake_port_in_use(ctx, port):
-        if port == open_listener_port:
+    def _fake_port_in_use(ctx, endpoint):
+        if endpoint.port == open_listener_port:
             return False
         return True
 
index ff6a5c9d4c969ed0634ea914bdbdaa90915911ee..d310215f6e3248144032df88ed942592ddb89145 100644 (file)
@@ -58,8 +58,8 @@ class TestCephAdm(object):
 
         for side_effect, expected_exception in (
             (os_error(errno.EADDRINUSE), _cephadm.PortOccupiedError),
-            (os_error(errno.EAFNOSUPPORT), _cephadm.Error),
-            (os_error(errno.EADDRNOTAVAIL), _cephadm.Error),
+            (os_error(errno.EAFNOSUPPORT), OSError),
+            (os_error(errno.EADDRNOTAVAIL), OSError),
             (None, None),
         ):
             _socket = mock.Mock()
@@ -77,20 +77,68 @@ class TestCephAdm(object):
     def test_port_in_use(self, _logger, _attempt_bind):
         empty_ctx = None
 
-        assert _cephadm.port_in_use(empty_ctx, 9100) == False
+        assert _cephadm.port_in_use(empty_ctx, _cephadm.EndPoint('0.0.0.0', 9100)) == False
 
         _attempt_bind.side_effect = _cephadm.PortOccupiedError('msg')
-        assert _cephadm.port_in_use(empty_ctx, 9100) == True
+        assert _cephadm.port_in_use(empty_ctx, _cephadm.EndPoint('0.0.0.0', 9100)) == True
 
         os_error = OSError()
         os_error.errno = errno.EADDRNOTAVAIL
         _attempt_bind.side_effect = os_error
-        assert _cephadm.port_in_use(empty_ctx, 9100) == False
+        assert _cephadm.port_in_use(empty_ctx, _cephadm.EndPoint('0.0.0.0', 9100)) == False
 
         os_error = OSError()
         os_error.errno = errno.EAFNOSUPPORT
         _attempt_bind.side_effect = os_error
-        assert _cephadm.port_in_use(empty_ctx, 9100) == False
+        assert _cephadm.port_in_use(empty_ctx, _cephadm.EndPoint('0.0.0.0', 9100)) == False
+
+    @mock.patch('cephadm.socket.socket.bind')
+    @mock.patch('cephadm.logger')
+    def test_port_in_use_special_cases(self, _logger, _bind):
+        # port_in_use has special handling for
+        # EAFNOSUPPORT and EADDRNOTAVAIL errno OSErrors.
+        # If we get those specific errors when attempting
+        # to bind to the ip:port we should not say the
+        # port is in use
+
+        def os_error(errno):
+            _os_error = OSError()
+            _os_error.errno = errno
+            return _os_error
+
+        _bind.side_effect = os_error(errno.EADDRNOTAVAIL)
+        in_use = _cephadm.port_in_use(None, _cephadm.EndPoint('1.2.3.4', 10000))
+        assert in_use == False
+
+        _bind.side_effect = os_error(errno.EAFNOSUPPORT)
+        in_use = _cephadm.port_in_use(None, _cephadm.EndPoint('1.2.3.4', 10000))
+        assert in_use == False
+
+        # this time, have it raise the actual port taken error
+        # so it should report the port is in use
+        _bind.side_effect = os_error(errno.EADDRINUSE)
+        in_use = _cephadm.port_in_use(None, _cephadm.EndPoint('1.2.3.4', 10000))
+        assert in_use == True
+
+    @mock.patch('cephadm.attempt_bind')
+    @mock.patch('cephadm.logger')
+    def test_port_in_use_with_specific_ips(self, _logger, _attempt_bind):
+        empty_ctx = None
+
+        def _fake_attempt_bind(ctx, s: socket.socket, addr: str, port: int) -> None:
+            occupied_error = _cephadm.PortOccupiedError('msg')
+            if addr.startswith('200'):
+                raise occupied_error
+            if addr.startswith('100'):
+                if port == 4567:
+                    raise occupied_error
+
+        _attempt_bind.side_effect = _fake_attempt_bind
+
+        assert _cephadm.port_in_use(empty_ctx, _cephadm.EndPoint('200.0.0.0', 9100)) == True
+        assert _cephadm.port_in_use(empty_ctx, _cephadm.EndPoint('100.0.0.0', 9100)) == False
+        assert _cephadm.port_in_use(empty_ctx, _cephadm.EndPoint('100.0.0.0', 4567)) == True
+        assert _cephadm.port_in_use(empty_ctx, _cephadm.EndPoint('155.0.0.0', 4567)) == False
 
     @mock.patch('socket.socket')
     @mock.patch('cephadm.logger')
@@ -126,8 +174,8 @@ class TestCephAdm(object):
         ):
             for side_effect, expected_exception in (
                 (os_error(errno.EADDRINUSE), _cephadm.PortOccupiedError),
-                (os_error(errno.EADDRNOTAVAIL), _cephadm.Error),
-                (os_error(errno.EAFNOSUPPORT), _cephadm.Error),
+                (os_error(errno.EADDRNOTAVAIL), OSError),
+                (os_error(errno.EAFNOSUPPORT), OSError),
                 (None, None),
             ):
                 mock_socket_obj = mock.Mock()
@@ -258,7 +306,7 @@ class TestCephAdm(object):
             _cephadm.prepare_dashboard(ctx, 0, 0, lambda _, extra_mounts=None, ___=None : '5', lambda : None)
 
     @mock.patch('cephadm.logger')
-    @mock.patch('cephadm.get_custom_config_files')
+    @mock.patch('cephadm.fetch_custom_config_files')
     @mock.patch('cephadm.get_container')
     def test_get_deployment_container(self, _get_container, _get_config, _logger):
         """
@@ -272,12 +320,12 @@ class TestCephAdm(object):
             '--something',
         ]
         ctx.data_dir = 'data'
-        _get_config.return_value = {'custom_config_files': [
+        _get_config.return_value = [
             {
                 'mount_path': '/etc/testing.str',
                 'content': 'this\nis\na\nstring',
             }
-        ]}
+        ]
         _get_container.return_value = _cephadm.CephContainer.for_daemon(
             ctx,
             fsid='9b9d7609-f4d5-4aba-94c8-effa764d96c9',
@@ -306,13 +354,16 @@ class TestCephAdm(object):
     @mock.patch('cephadm.logger')
     @mock.patch('cephadm.FileLock')
     @mock.patch('cephadm.deploy_daemon')
-    @mock.patch('cephadm.get_parm')
+    @mock.patch('cephadm.fetch_configs')
     @mock.patch('cephadm.make_var_run')
     @mock.patch('cephadm.migrate_sysctl_dir')
     @mock.patch('cephadm.check_unit', lambda *args, **kwargs: (None, 'running', None))
     @mock.patch('cephadm.get_unit_name', lambda *args, **kwargs: 'mon-unit-name')
     @mock.patch('cephadm.get_deployment_container')
-    def test_mon_crush_location(self, _get_deployment_container, _migrate_sysctl, _make_var_run, _get_parm, _deploy_daemon, _file_lock, _logger):
+    @mock.patch('cephadm.read_configuration_source', lambda c: {})
+    @mock.patch('cephadm.apply_deploy_config_to_ctx', lambda d, c: None)
+    @mock.patch('cephadm.extract_uid_gid', lambda *args, **kwargs: ('ceph', 'ceph'))
+    def test_mon_crush_location(self, _get_deployment_container, _migrate_sysctl, _make_var_run, _fetch_configs, _deploy_daemon, _file_lock, _logger):
         """
         test that crush location for mon is set if it is included in config_json
         """
@@ -325,7 +376,8 @@ class TestCephAdm(object):
         ctx.allow_ptrace = True
         ctx.config_json = '-'
         ctx.osd_fsid = '0'
-        _get_parm.return_value = {
+        ctx.tcp_ports = '3300 6789'
+        _fetch_configs.return_value = {
             'crush_location': 'database=a'
         }
 
@@ -352,10 +404,10 @@ class TestCephAdm(object):
         _deploy_daemon.side_effect = _crush_location_checker
 
         with pytest.raises(Exception, match='--set-crush-location database=a'):
-            _cephadm.command_deploy(ctx)
+            _cephadm.command_deploy_from(ctx)
 
     @mock.patch('cephadm.logger')
-    @mock.patch('cephadm.get_custom_config_files')
+    @mock.patch('cephadm.fetch_custom_config_files')
     def test_write_custom_conf_files(self, _get_config, _logger, cephadm_fs):
         """
         test _write_custom_conf_files writes the conf files correctly
@@ -364,7 +416,7 @@ class TestCephAdm(object):
         ctx = _cephadm.CephadmContext()
         ctx.config_json = '-'
         ctx.data_dir = _cephadm.DATA_DIR
-        _get_config.return_value = {'custom_config_files': [
+        _get_config.return_value = [
             {
                 'mount_path': '/etc/testing.str',
                 'content': 'this\nis\na\nstring',
@@ -376,7 +428,7 @@ class TestCephAdm(object):
             {
                 'mount_path': '/etc/no-content.conf',
             },
-        ]}
+        ]
         _cephadm._write_custom_conf_files(ctx, 'mon', 'host1', 'fsid', 0, 0)
         with open(os.path.join(_cephadm.DATA_DIR, 'fsid', 'custom_config_files', 'mon.host1', 'testing.str'), 'r') as f:
             assert 'this\nis\na\nstring' == f.read()
@@ -1769,11 +1821,11 @@ if ! grep -qs /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id
 # iscsi tcmu-runner container
 ! /usr/bin/docker rm -f ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9-iscsi.daemon_id-tcmu 2> /dev/null
 ! /usr/bin/docker rm -f ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9-iscsi-daemon_id-tcmu 2> /dev/null
-/usr/bin/docker run --rm --ipc=host --stop-signal=SIGTERM --ulimit nofile=1048576 --net=host --entrypoint /usr/bin/tcmu-runner --privileged --group-add=disk --init --name ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9-iscsi-daemon_id-tcmu --pids-limit=0 -e CONTAINER_IMAGE=ceph/ceph -e NODE_NAME=host1 -e CEPH_USE_RANDOM_NONCE=1 -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/config:/etc/ceph/ceph.conf:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/keyring:/etc/ceph/keyring:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/iscsi-gateway.cfg:/etc/ceph/iscsi-gateway.cfg:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/configfs:/sys/kernel/config -v /var/log/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9:/var/log:z -v /dev:/dev --mount type=bind,source=/lib/modules,destination=/lib/modules,ro=true ceph/ceph &
+/usr/bin/docker run --rm --ipc=host --stop-signal=SIGTERM --ulimit nofile=1048576 --net=host --entrypoint /usr/local/scripts/tcmu-runner-entrypoint.sh --privileged --group-add=disk --init --name ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9-iscsi-daemon_id-tcmu --pids-limit=0 -e CONTAINER_IMAGE=ceph/ceph -e NODE_NAME=host1 -e CEPH_USE_RANDOM_NONCE=1 -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/config:/etc/ceph/ceph.conf:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/keyring:/etc/ceph/keyring:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/iscsi-gateway.cfg:/etc/ceph/iscsi-gateway.cfg:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/configfs:/sys/kernel/config -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/tcmu-runner-entrypoint.sh:/usr/local/scripts/tcmu-runner-entrypoint.sh -v /var/log/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9:/var/log:z -v /dev:/dev --mount type=bind,source=/lib/modules,destination=/lib/modules,ro=true ceph/ceph &
 # iscsi.daemon_id
 ! /usr/bin/docker rm -f ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9-iscsi.daemon_id 2> /dev/null
 ! /usr/bin/docker rm -f ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9-iscsi-daemon_id 2> /dev/null
-/usr/bin/docker run --rm --ipc=host --stop-signal=SIGTERM --ulimit nofile=1048576 --net=host --entrypoint /usr/bin/rbd-target-api --privileged --group-add=disk --init --name ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9-iscsi-daemon_id --pids-limit=0 -e CONTAINER_IMAGE=ceph/ceph -e NODE_NAME=host1 -e CEPH_USE_RANDOM_NONCE=1 -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/config:/etc/ceph/ceph.conf:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/keyring:/etc/ceph/keyring:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/iscsi-gateway.cfg:/etc/ceph/iscsi-gateway.cfg:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/configfs:/sys/kernel/config -v /var/log/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9:/var/log:z -v /dev:/dev --mount type=bind,source=/lib/modules,destination=/lib/modules,ro=true ceph/ceph
+/usr/bin/docker run --rm --ipc=host --stop-signal=SIGTERM --ulimit nofile=1048576 --net=host --entrypoint /usr/bin/rbd-target-api --privileged --group-add=disk --init --name ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9-iscsi-daemon_id --pids-limit=0 -e CONTAINER_IMAGE=ceph/ceph -e NODE_NAME=host1 -e CEPH_USE_RANDOM_NONCE=1 -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/config:/etc/ceph/ceph.conf:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/keyring:/etc/ceph/keyring:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/iscsi-gateway.cfg:/etc/ceph/iscsi-gateway.cfg:z -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/configfs:/sys/kernel/config -v /var/lib/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9/iscsi.daemon_id/tcmu-runner-entrypoint.sh:/usr/local/scripts/tcmu-runner-entrypoint.sh -v /var/log/ceph/9b9d7609-f4d5-4aba-94c8-effa764d96c9:/var/log:z -v /dev:/dev --mount type=bind,source=/lib/modules,destination=/lib/modules,ro=true ceph/ceph
 """
 
     def test_get_container(self):
index 2c20dfb916b32655ec239e25789bf49b184eadd9..270753a554b86e0a2cf65bcb442a95aaebb39974 100644 (file)
@@ -94,7 +94,7 @@ class TestCopyTree:
             self._copy_tree([src1], dst, uid=0, gid=0)
             assert len(_chown.mock_calls) >= 2
             for c in _chown.mock_calls:
-                assert c.args[1:] == (0, 0)
+                assert c == mock.call(mock.ANY, 0, 0)
         assert (dst / "foo.txt").exists()
 
 
@@ -187,7 +187,7 @@ class TestCopyFiles:
             self._copy_files([file1], dst, uid=0, gid=0)
             assert len(_chown.mock_calls) >= 1
             for c in _chown.mock_calls:
-                assert c.args[1:] == (0, 0)
+                assert c == mock.call(mock.ANY, 0, 0)
         assert (dst / "f1.txt").exists()
 
 
@@ -270,7 +270,7 @@ class TestMoveFiles:
             self._move_files([file1], dst, uid=0, gid=0)
             assert len(_chown.mock_calls) >= 1
             for c in _chown.mock_calls:
-                assert c.args[1:] == (0, 0)
+                assert c == mock.call(mock.ANY, 0, 0)
         assert dst.is_file()
         assert not file1.exists()
 
@@ -288,9 +288,9 @@ def test_recursive_chown(tmp_path):
         _chown.return_value = None
         _cephadm.recursive_chown(str(d1), uid=500, gid=500)
     assert len(_chown.mock_calls) == 3
-    assert _chown.mock_calls[0].args == (str(d1), 500, 500)
-    assert _chown.mock_calls[1].args == (str(d2), 500, 500)
-    assert _chown.mock_calls[2].args == (str(f1), 500, 500)
+    assert _chown.mock_calls[0] == mock.call(str(d1), 500, 500)
+    assert _chown.mock_calls[1] == mock.call(str(d2), 500, 500)
+    assert _chown.mock_calls[2] == mock.call(str(f1), 500, 500)
 
 
 class TestFindExecutable:
@@ -663,3 +663,146 @@ def test_call(caplog, monkeypatch, pyline, expected, call_kwargs, log_check):
         assert result == expected
     if callable(log_check):
         log_check(caplog)
+
+
+class TestWriteNew:
+    def test_success(self, tmp_path):
+        "Test the simple basic feature of writing a file."
+        dest = tmp_path / "foo.txt"
+        with _cephadm.write_new(dest) as fh:
+            fh.write("something\n")
+            fh.write("something else\n")
+
+        with open(dest, "r") as fh:
+            assert fh.read() == "something\nsomething else\n"
+
+    def test_write_ower_mode(self, tmp_path):
+        "Test that the owner and perms options function."
+        dest = tmp_path / "foo.txt"
+
+        # if this is test run as non-root, we can't really change ownership
+        uid = os.getuid()
+        gid = os.getgid()
+
+        with _cephadm.write_new(dest, owner=(uid, gid), perms=0o600) as fh:
+            fh.write("xomething\n")
+            fh.write("xomething else\n")
+
+        with open(dest, "r") as fh:
+            assert fh.read() == "xomething\nxomething else\n"
+            sr = os.fstat(fh.fileno())
+            assert sr.st_uid == uid
+            assert sr.st_gid == gid
+            assert (sr.st_mode & 0o777) == 0o600
+
+    def test_encoding(self, tmp_path):
+        "Test that the encoding option functions."
+        dest = tmp_path / "foo.txt"
+        msg = "\u2603\u26C5\n"
+        with _cephadm.write_new(dest, encoding='utf-8') as fh:
+            fh.write(msg)
+        with open(dest, "rb") as fh:
+            b1 = fh.read()
+            assert b1.decode('utf-8') == msg
+
+        dest = tmp_path / "foo2.txt"
+        with _cephadm.write_new(dest, encoding='utf-16le') as fh:
+            fh.write(msg)
+        with open(dest, "rb") as fh:
+            b2 = fh.read()
+            assert b2.decode('utf-16le') == msg
+
+        # the binary data should differ due to the different encodings
+        assert b1 != b2
+
+    def test_cleanup(self, tmp_path):
+        "Test that an exception during write leaves no file behind."
+        dest = tmp_path / "foo.txt"
+        with pytest.raises(ValueError):
+            with _cephadm.write_new(dest) as fh:
+                fh.write("hello\n")
+                raise ValueError("foo")
+                fh.write("world\n")
+        assert not dest.exists()
+        assert not dest.with_name(dest.name+".new").exists()
+        assert list(dest.parent.iterdir()) == []
+
+
+class CompareContext1:
+    cfg_data = {
+        "name": "mane",
+        "fsid": "foobar",
+        "image": "fake.io/noway/nohow:gndn",
+        "meta": {
+            "fruit": "banana",
+            "vegetable": "carrot",
+        },
+        "params": {
+            "osd_fsid": "robble",
+            "tcp_ports": [404, 9999],
+        },
+        "config_blobs": {
+            "alpha": {"sloop": "John B"},
+            "beta": {"forest": "birch"},
+            "gamma": {"forest": "pine"},
+        },
+    }
+
+    def check(self, ctx):
+        assert ctx.name == 'mane'
+        assert ctx.fsid == 'foobar'
+        assert ctx.image == 'fake.io/noway/nohow:gndn'
+        assert ctx.meta_properties == {"fruit": "banana", "vegetable": "carrot"}
+        assert ctx.config_blobs == {
+            "alpha": {"sloop": "John B"},
+            "beta": {"forest": "birch"},
+            "gamma": {"forest": "pine"},
+        }
+        assert ctx.osd_fsid == "robble"
+        assert ctx.tcp_ports == [404, 9999]
+
+
+class CompareContext2:
+    cfg_data = {
+        "name": "cc2",
+        "fsid": "foobar",
+        "meta": {
+            "fruit": "banana",
+            "vegetable": "carrot",
+        },
+        "params": {},
+        "config_blobs": {
+            "alpha": {"sloop": "John B"},
+            "beta": {"forest": "birch"},
+            "gamma": {"forest": "pine"},
+        },
+    }
+
+    def check(self, ctx):
+        assert ctx.name == 'cc2'
+        assert ctx.fsid == 'foobar'
+        assert ctx.image == 'quay.io/ceph/ceph:v18'
+        assert ctx.meta_properties == {"fruit": "banana", "vegetable": "carrot"}
+        assert ctx.config_blobs == {
+            "alpha": {"sloop": "John B"},
+            "beta": {"forest": "birch"},
+            "gamma": {"forest": "pine"},
+        }
+        assert ctx.osd_fsid is None
+        assert ctx.tcp_ports is None
+
+
+@pytest.mark.parametrize(
+    "cc",
+    [
+        CompareContext1(),
+        CompareContext2(),
+    ],
+)
+def test_apply_deploy_config_to_ctx(cc, monkeypatch):
+    import logging
+
+    monkeypatch.setattr("cephadm.logger", logging.getLogger())
+    ctx = FakeContext()
+    _cephadm.apply_deploy_config_to_ctx(cc.cfg_data, ctx)
+    cc.check(ctx)
index 7c3f117a803dd281cf9ca25a04c4187604b15cae..2b7db5a894d1cc325e2fd2a3d2d7a114d24484e1 100644 (file)
@@ -72,6 +72,7 @@
 
 #include "mds/flock.h"
 #include "mds/cephfs_features.h"
+#include "mds/snap.h"
 #include "osd/OSDMap.h"
 #include "osdc/Filer.h"
 
@@ -1209,6 +1210,11 @@ Dentry *Client::insert_dentry_inode(Dir *dir, const string& dname, LeaseStat *dl
     Inode *diri = dir->parent_inode;
     clear_dir_complete_and_ordered(diri, false);
     dn = link(dir, dname, in, dn);
+
+    if (old_dentry) {
+      dn->is_renaming = false;
+      signal_cond_list(waiting_for_rename);
+    }
   }
 
   update_dentry_lease(dn, dlease, from, session);
@@ -1292,7 +1298,8 @@ void Client::clear_dir_complete_and_ordered(Inode *diri, bool complete)
 /*
  * insert results from readdir or lssnap into the metadata cache.
  */
-void Client::insert_readdir_results(MetaRequest *request, MetaSession *session, Inode *diri) {
+void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
+                                    Inode *diri, Inode *diri_other) {
 
   auto& reply = request->reply;
   ConnectionRef con = request->reply->get_connection();
@@ -1307,7 +1314,8 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
   dir_result_t *dirp = request->dirp;
   ceph_assert(dirp);
 
-  // the extra buffer list is only set for readdir and lssnap replies
+  // the extra buffer list is only set for readdir, lssnap and
+  // readdir_snapdiff replies
   auto p = reply->get_extra_bl().cbegin();
   if (!p.end()) {
     // snapdir?
@@ -1315,10 +1323,27 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
       ceph_assert(diri);
       diri = open_snapdir(diri);
     }
+    bool snapdiff_req = request->head.op == CEPH_MDS_OP_READDIR_SNAPDIFF;
+    frag_t fg;
+    unsigned offset_hash;
+    if (snapdiff_req) {
+      fg = (unsigned)request->head.args.snapdiff.frag;
+      offset_hash = (unsigned)request->head.args.snapdiff.offset_hash;
+    } else {
+      fg = (unsigned)request->head.args.readdir.frag;
+      offset_hash = (unsigned)request->head.args.readdir.offset_hash;
+    }
 
     // only open dir if we're actually adding stuff to it!
     Dir *dir = diri->open_dir();
     ceph_assert(dir);
+    //open opponent dir for snapdiff if any
+    Dir *dir_other = nullptr;
+    if (snapdiff_req) {
+      ceph_assert(diri_other);
+      dir_other = diri_other->open_dir();
+      ceph_assert(dir_other);
+    }
 
     // dirstat
     DirStat dst(p, features);
@@ -1330,7 +1355,6 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
     bool end = ((unsigned)flags & CEPH_READDIR_FRAG_END);
     bool hash_order = ((unsigned)flags & CEPH_READDIR_HASH_ORDER);
 
-    frag_t fg = (unsigned)request->head.args.readdir.frag;
     unsigned readdir_offset = dirp->next_offset;
     string readdir_start = dirp->last_name;
     ceph_assert(!readdir_start.empty() || readdir_offset == 2);
@@ -1341,7 +1365,7 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
        last_hash = ceph_frag_value(diri->hash_dentry_name(readdir_start));
       } else if (flags & CEPH_READDIR_OFFSET_HASH) {
        /* mds understands offset_hash */
-       last_hash = (unsigned)request->head.args.readdir.offset_hash;
+       last_hash = offset_hash;
       }
     }
 
@@ -1386,13 +1410,22 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
 
       Inode *in = add_update_inode(&ist, request->sent_stamp, session,
                                   request->perms);
+      auto *effective_dir = dir;
+      auto *effective_diri = diri;
+
+      if (snapdiff_req && in->snapid != diri->snapid) {
+        ceph_assert(diri_other);
+        ceph_assert(dir_other);
+        effective_diri = diri_other;
+        effective_dir = dir_other;
+      }
       Dentry *dn;
-      if (diri->dir->dentries.count(dname)) {
-       Dentry *olddn = diri->dir->dentries[dname];
+      if (effective_dir->dentries.count(dname)) {
+       Dentry *olddn = effective_dir->dentries[dname];
        if (olddn->inode != in) {
          // replace incorrect dentry
          unlink(olddn, true, true);  // keep dir, dentry
-         dn = link(dir, dname, in, olddn);
+         dn = link(effective_dir, dname, in, olddn);
          ceph_assert(dn == olddn);
        } else {
          // keep existing dn
@@ -1401,13 +1434,13 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
        }
       } else {
        // new dn
-       dn = link(dir, dname, in, NULL);
+       dn = link(effective_dir, dname, in, NULL);
       }
       dn->alternate_name = std::move(dlease.alternate_name);
 
       update_dentry_lease(dn, &dlease, request->sent_stamp, session);
       if (hash_order) {
-       unsigned hash = ceph_frag_value(diri->hash_dentry_name(dname));
+       unsigned hash = ceph_frag_value(effective_diri->hash_dentry_name(dname));
        if (hash != last_hash)
          readdir_offset = 2;
        last_hash = hash;
@@ -1416,20 +1449,21 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
        dn->offset = dir_result_t::make_fpos(fg, readdir_offset++, false);
       }
       // add to readdir cache
-      if (dirp->release_count == diri->dir_release_count &&
-         dirp->ordered_count == diri->dir_ordered_count &&
-         dirp->start_shared_gen == diri->shared_gen) {
-       if (dirp->cache_index == dir->readdir_cache.size()) {
+      if (!snapdiff_req &&
+          dirp->release_count == effective_diri->dir_release_count &&
+         dirp->ordered_count == effective_diri->dir_ordered_count &&
+         dirp->start_shared_gen == effective_diri->shared_gen) {
+       if (dirp->cache_index == effective_dir->readdir_cache.size()) {
          if (i == 0) {
            ceph_assert(!dirp->inode->is_complete_and_ordered());
            dir->readdir_cache.reserve(dirp->cache_index + numdn);
          }
-         dir->readdir_cache.push_back(dn);
-       } else if (dirp->cache_index < dir->readdir_cache.size()) {
+          effective_dir->readdir_cache.push_back(dn);
+       } else if (dirp->cache_index < effective_dir->readdir_cache.size()) {
          if (dirp->inode->is_complete_and_ordered())
-           ceph_assert(dir->readdir_cache[dirp->cache_index] == dn);
+           ceph_assert(effective_dir->readdir_cache[dirp->cache_index] == dn);
          else
-           dir->readdir_cache[dirp->cache_index] = dn;
+            effective_dir->readdir_cache[dirp->cache_index] = dn;
        } else {
          ceph_abort_msg("unexpected readdir buffer idx");
        }
@@ -1449,6 +1483,8 @@ void Client::insert_readdir_results(MetaRequest *request, MetaSession *session,
 
     if (dir->is_empty())
       close_dir(dir);
+    if (dir_other && dir_other->is_empty())
+      close_dir(dir_other);
   }
 }
 
@@ -1608,10 +1644,20 @@ Inode* Client::insert_trace(MetaRequest *request, MetaSession *session)
   if (in) {
     if (op == CEPH_MDS_OP_READDIR ||
        op == CEPH_MDS_OP_LSSNAP) {
-      insert_readdir_results(request, session, in);
+      insert_readdir_results(request,
+       session,
+       in,
+       nullptr);
     } else if (op == CEPH_MDS_OP_LOOKUPNAME) {
       // hack: return parent inode instead
       in = diri;
+    } else if (op == CEPH_MDS_OP_READDIR_SNAPDIFF) {
+      // provide both request's inode (aka snapA) and traced one (snapB)
+      // to properly match snapdiff results
+      insert_readdir_results(request,
+       session,
+       request->inode(),
+       in);
     }
 
     if (request->dentry() == NULL && in != request->inode()) {
@@ -1685,7 +1731,7 @@ mds_rank_t Client::choose_target_mds(MetaRequest *req, Inode** phash_diri)
            * I think the MDS should be able to redirect as needed*/
          in = in->get_first_parent()->dir->parent_inode;
         else {
-          ldout(cct, 10) << "got unlinked inode, can't look at parent" << dendl;
+          ldout(cct, 10) << __func__ << "got unlinked inode, can't look at parent" << dendl;
           break;
         }
       }
@@ -2333,6 +2379,12 @@ void Client::_closed_mds_session(MetaSession *s, int err, bool rejected)
     mds_sessions.erase(s->mds_num);
 }
 
+static void reinit_mds_features(MetaSession *session,
+                               const MConstRef<MClientSession>& m) {
+  session->mds_features = std::move(m->supported_features);
+  session->mds_metric_flags = std::move(m->metric_spec.metric_flags);
+}
+
 void Client::handle_client_session(const MConstRef<MClientSession>& m)
 {
   mds_rank_t from = mds_rank_t(m->get_source().num());
@@ -2351,6 +2403,13 @@ void Client::handle_client_session(const MConstRef<MClientSession>& m)
       if (session->state == MetaSession::STATE_OPEN) {
         ldout(cct, 10) << "mds." << from << " already opened, ignore it"
                        << dendl;
+       // The MDS could send a client_session(open) message even when
+       // the session state is STATE_OPEN. Normally, its fine to
+       // ignore this message, but, if the MDS sent this message just
+       // after it got upgraded, the MDS feature bits could differ
+       // than the one before the upgrade - so, refresh the feature
+       // bits the client holds.
+       reinit_mds_features(session.get(), m);
         return;
       }
       /*
@@ -2360,8 +2419,7 @@ void Client::handle_client_session(const MConstRef<MClientSession>& m)
       if (!session->seq && m->get_seq())
         session->seq = m->get_seq();
 
-      session->mds_features = std::move(m->supported_features);
-      session->mds_metric_flags = std::move(m->metric_spec.metric_flags);
+      reinit_mds_features(session.get(), m);
 
       renew_caps(session.get());
       session->state = MetaSession::STATE_OPEN;
@@ -2546,7 +2604,7 @@ ref_t<MClientRequest> Client::build_client_request(MetaRequest *request, mds_ran
     }
   }
 
-  auto req = make_message<MClientRequest>(request->get_op(), old_version);
+  auto req = make_message<MClientRequest>(request->get_op(), session->mds_features);
   req->set_tid(request->tid);
   req->set_stamp(request->op_stamp);
   memcpy(&req->head, &request->head, sizeof(ceph_mds_request_head));
@@ -3421,12 +3479,17 @@ Dentry* Client::link(Dir *dir, const string& name, Inode *in, Dentry *dn)
 
     lru.lru_insert_mid(dn);    // mid or top?
 
-    ldout(cct, 15) << "link dir " << dir->parent_inode << " '" << name << "' to inode " << in
-                  << " dn " << dn << " (new dn)" << dendl;
+    if(in) {
+      ldout(cct, 15) << "link dir " << *dir->parent_inode << " '" << name << "' to inode " << *in
+                    << " dn " << *dn << " (new dn)" << dendl;
+    } else {
+      ldout(cct, 15) << "link dir " << *dir->parent_inode << " '" << name << "' "
+        << " dn " << *dn << " (new dn)" << dendl;
+    }
   } else {
     ceph_assert(!dn->inode);
-    ldout(cct, 15) << "link dir " << dir->parent_inode << " '" << name << "' to inode " << in
-                  << " dn " << dn << " (old dn)" << dendl;
+    ldout(cct, 15) << "link dir " << *dir->parent_inode << " '" << name << "' to inode " << in
+                  << " dn " << *dn << " (old dn)" << dendl;
   }
 
   if (in) {    // link to inode
@@ -3529,7 +3592,7 @@ void Client::put_cap_ref(Inode *in, int cap)
     int put_nref = 0;
     int drop = last & ~in->caps_issued();
     if (in->snapid == CEPH_NOSNAP) {
-      if ((last & (CEPH_CAP_FILE_WR | CEPH_CAP_FILE_BUFFER)) &&
+      if ((last & CEPH_CAP_FILE_WR) &&
          !in->cap_snaps.empty() &&
          in->cap_snaps.rbegin()->second.writing) {
        ldout(cct, 10) << __func__ << " finishing pending cap_snap on " << *in << dendl;
@@ -3543,6 +3606,10 @@ void Client::put_cap_ref(Inode *in, int cap)
        signal_cond_list(in->waitfor_commit);
        ldout(cct, 5) << __func__ << " dropped last FILE_BUFFER ref on " << *in << dendl;
        ++put_nref;
+
+       if (!in->cap_snaps.empty()) {
+         flush_snaps(in);
+       }
       }
     }
     if (last & CEPH_CAP_FILE_CACHE) {
@@ -4003,15 +4070,13 @@ void Client::queue_cap_snap(Inode *in, SnapContext& old_snapc)
       in->cap_snaps.rbegin()->second.writing) {
     ldout(cct, 10) << __func__ << " already have pending cap_snap on " << *in << dendl;
     return;
-  } else if (in->caps_dirty() ||
-            (used & CEPH_CAP_FILE_WR) ||
-            (dirty & CEPH_CAP_ANY_WR)) {
+  } else if (dirty || (used & CEPH_CAP_FILE_WR)) {
     const auto &capsnapem = in->cap_snaps.emplace(std::piecewise_construct, std::make_tuple(old_snapc.seq), std::make_tuple(in));
     ceph_assert(capsnapem.second); /* element inserted */
     CapSnap &capsnap = capsnapem.first->second;
     capsnap.context = old_snapc;
     capsnap.issued = in->caps_issued();
-    capsnap.dirty = in->caps_dirty();
+    capsnap.dirty = dirty;
 
     capsnap.dirty_data = (used & CEPH_CAP_FILE_BUFFER);
 
@@ -4058,9 +4123,11 @@ void Client::finish_cap_snap(Inode *in, CapSnap &capsnap, int used)
   }
 
   if (used & CEPH_CAP_FILE_BUFFER) {
-    capsnap.writing = 1;
     ldout(cct, 10) << __func__ << " " << *in << " cap_snap " << &capsnap << " used " << used
-            << " WRBUFFER, delaying" << dendl;
+            << " WRBUFFER, trigger to flush dirty buffer" << dendl;
+
+    /* trigger to flush the buffer */
+    _flush(in, new C_Client_FlushComplete(this, in));
   } else {
     capsnap.dirty_data = 0;
     flush_snaps(in);
@@ -4412,11 +4479,19 @@ void Client::add_update_cap(Inode *in, MetaSession *mds_session, uint64_t cap_id
   if (flags & CEPH_CAP_FLAG_AUTH) {
     if (in->auth_cap != &cap &&
         (!in->auth_cap || ceph_seq_cmp(in->auth_cap->mseq, mseq) < 0)) {
-      if (in->auth_cap && in->flushing_cap_item.is_on_list()) {
-       ldout(cct, 10) << __func__ << " changing auth cap: "
-                      << "add myself to new auth MDS' flushing caps list" << dendl;
-       adjust_session_flushing_caps(in, in->auth_cap->session, mds_session);
+      if (in->auth_cap) {
+        if (in->flushing_cap_item.is_on_list()) {
+          ldout(cct, 10) << __func__ << " changing auth cap: "
+                         << "add myself to new auth MDS' flushing caps list" << dendl;
+          adjust_session_flushing_caps(in, in->auth_cap->session, mds_session);
+        }
+        if (in->dirty_cap_item.is_on_list()) {
+          ldout(cct, 10) << __func__ << " changing auth cap: "
+                         << "add myself to new auth MDS' dirty caps list" << dendl;
+          mds_session->get_dirty_list().push_back(&in->dirty_cap_item);
+        }
       }
+
       in->auth_cap = &cap;
     }
   }
@@ -5263,24 +5338,48 @@ void Client::handle_caps(const MConstRef<MClientCaps>& m)
 
   got_mds_push(session.get());
 
+  bool do_cap_release = false;
   Inode *in;
   vinodeno_t vino(m->get_ino(), CEPH_NOSNAP);
   if (auto it = inode_map.find(vino); it != inode_map.end()) {
     in = it->second;
+
+    /* MDS maybe waiting for cap release with increased seq */
+    switch (m->get_op()) {
+      case CEPH_CAP_OP_REVOKE:
+      case CEPH_CAP_OP_GRANT:
+        if (!in->caps.count(mds)) {
+         do_cap_release = true;
+          ldout(cct, 5) << __func__ << " vino " << vino << " don't have cap "
+                        << m->get_cap_id() << " op " << m->get_op()
+                        << ", immediately releasing" << dendl;
+       }
+    }
   } else {
-    if (m->get_op() == CEPH_CAP_OP_IMPORT) {
-      ldout(cct, 5) << __func__ << " don't have vino " << vino << " on IMPORT, immediately releasing" << dendl;
-      session->enqueue_cap_release(
-        m->get_ino(),
-        m->get_cap_id(),
-        m->get_seq(),
-        m->get_mseq(),
-        cap_epoch_barrier);
-    } else {
-      ldout(cct, 5) << __func__ << " don't have vino " << vino << ", dropping" << dendl;
+    /* MDS maybe waiting for cap release with increased seq */
+    switch (m->get_op()) {
+      case CEPH_CAP_OP_IMPORT:
+      case CEPH_CAP_OP_REVOKE:
+      case CEPH_CAP_OP_GRANT:
+       do_cap_release = true;
+        ldout(cct, 5) << __func__ << " don't have vino " << vino << " op "
+                      << m->get_op() << ", immediately releasing" << dendl;
+       break;
+      default:
+        ldout(cct, 5) << __func__ << " don't have vino " << vino << ", dropping" << dendl;
+       return;
     }
+  }
+
+  // In case the mds is waiting on e.g. a revocation
+  if (do_cap_release) {
+    session->enqueue_cap_release(
+      m->get_ino(),
+      m->get_cap_id(),
+      m->get_seq(),
+      m->get_mseq(),
+      cap_epoch_barrier);
 
-    // in case the mds is waiting on e.g. a revocation
     flush_cap_releases();
     return;
   }
@@ -5757,6 +5856,13 @@ void Client::handle_cap_grant(MetaSession *session, Inode *in, Cap *cap, const M
     }
   }
 
+  // just in case the caps was released just before we get the revoke msg
+  if (!check && m->get_op() == CEPH_CAP_OP_REVOKE) {
+    cap->wanted = 0; // don't let check_caps skip sending a response to MDS
+    check = true;
+    flags = CHECK_CAPS_NODELAY;
+  }
+
   if (check)
     check_caps(in, flags);
 
@@ -6888,6 +6994,13 @@ void Client::collect_and_send_global_metrics() {
   ldout(cct, 20) << __func__ << dendl;
   ceph_assert(ceph_mutex_is_locked_by_me(client_lock));
 
+  /* Do not send the metrics until the MDS rank is ready */
+  if (!mdsmap->is_active((mds_rank_t)0)) {
+    ldout(cct, 5) << __func__ << " MDS rank 0 is not ready yet -- not sending metric"
+                  << dendl;
+    return;
+  }
+
   if (!have_open_session((mds_rank_t)0)) {
     ldout(cct, 5) << __func__ << ": no session with rank=0 -- not sending metric"
                   << dendl;
@@ -7059,7 +7172,8 @@ bool Client::_dentry_valid(const Dentry *dn)
 }
 
 int Client::_lookup(Inode *dir, const string& dname, int mask, InodeRef *target,
-                   const UserPerm& perms, std::string* alternate_name)
+                    const UserPerm& perms, std::string* alternate_name,
+                    bool is_rename)
 {
   int r = 0;
   Dentry *dn = NULL;
@@ -7138,6 +7252,19 @@ relookup:
     } else {
       ldout(cct, 20) << " no cap on " << dn->inode->vino() << dendl;
     }
+
+    // In rare case during the rename if another thread tries to
+    // lookup the dst dentry, it may get an inconsistent result
+    // that both src dentry and dst dentry will link to the same
+    // inode at the same time.
+    // Will wait the rename to finish and try it again.
+    if (!is_rename && dn->is_renaming) {
+      ldout(cct, 1) << __func__ << " dir " << *dir
+                    << " rename is on the way, will wait for dn '"
+                    << dname << "'" << dendl;
+      wait_on_list(waiting_for_rename);
+      goto relookup;
+    }
   } else {
     // can we conclude ENOENT locally?
     if (dir->caps_issued_mask(CEPH_CAP_FILE_SHARED, true) &&
@@ -9055,7 +9182,8 @@ void Client::_readdir_drop_dirp_buffer(dir_result_t *dirp)
   dirp->buffer.clear();
 }
 
-int Client::_readdir_get_frag(dir_result_t *dirp)
+int Client::_readdir_get_frag(int op, dir_result_t* dirp,
+  fill_readdir_args_cb_t fill_req_cb)
 {
   ceph_assert(dirp);
   ceph_assert(dirp->inode);
@@ -9070,33 +9198,18 @@ int Client::_readdir_get_frag(dir_result_t *dirp)
   ldout(cct, 10) << __func__ << " " << dirp << " on " << dirp->inode->ino << " fg " << fg
                 << " offset " << hex << dirp->offset << dec << dendl;
 
-  int op = CEPH_MDS_OP_READDIR;
-  if (dirp->inode && dirp->inode->snapid == CEPH_SNAPDIR)
-    op = CEPH_MDS_OP_LSSNAP;
-
   InodeRef& diri = dirp->inode;
 
   MetaRequest *req = new MetaRequest(op);
-  filepath path;
-  diri->make_nosnap_relative_path(path);
-  req->set_filepath(path); 
-  req->set_inode(diri.get());
-  req->head.args.readdir.frag = fg;
-  req->head.args.readdir.flags = CEPH_READDIR_REPLY_BITFLAGS;
-  if (dirp->last_name.length()) {
-    req->path2.set_path(dirp->last_name);
-  } else if (dirp->hash_order()) {
-    req->head.args.readdir.offset_hash = dirp->offset_high();
-  }
-  req->dirp = dirp;
-  
+  fill_req_cb(dirp, req, diri, fg);
+
   bufferlist dirbl;
   int res = make_request(req, dirp->perms, NULL, NULL, -1, &dirbl);
   
   if (res == -CEPHFS_EAGAIN) {
     ldout(cct, 10) << __func__ << " got EAGAIN, retrying" << dendl;
     _readdir_rechoose_frag(dirp);
-    return _readdir_get_frag(dirp);
+    return _readdir_get_frag(op, dirp, fill_req_cb);
   }
 
   if (res == 0) {
@@ -9121,7 +9234,8 @@ int Client::_readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p,
 {
   ceph_assert(ceph_mutex_is_locked_by_me(client_lock));
   ldout(cct, 10) << __func__ << " " << dirp << " on " << dirp->inode->ino
-          << " last_name " << dirp->last_name << " offset " << hex << dirp->offset << dec
+          << " last_name " << dirp->last_name
+          << " offset " << hex << dirp->offset << dec
           << dendl;
   Dir *dir = dirp->inode->dir;
 
@@ -9210,8 +9324,57 @@ int Client::_readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p,
   return 0;
 }
 
-int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p,
-                        unsigned want, unsigned flags, bool getref)
+int Client::readdir_r_cb(dir_result_t* d,
+  add_dirent_cb_t cb,
+  void* p,
+  unsigned want,
+  unsigned flags,
+  bool getref)
+{
+  auto fill_readdir_cb = [](dir_result_t* dirp,
+                           MetaRequest* req,
+                           InodeRef& diri,
+                           frag_t fg) {
+    filepath path;
+    diri->make_nosnap_relative_path(path);
+    req->set_filepath(path);
+    req->set_inode(diri.get());
+    req->head.args.readdir.frag = fg;
+    req->head.args.readdir.flags = CEPH_READDIR_REPLY_BITFLAGS;
+    if (dirp->last_name.length()) {
+      req->path2.set_path(dirp->last_name);
+    } else if (dirp->hash_order()) {
+      req->head.args.readdir.offset_hash = dirp->offset_high();
+    }
+    req->dirp = dirp;
+  };
+  int op = CEPH_MDS_OP_READDIR;
+  if (d->inode && d->inode->snapid == CEPH_SNAPDIR)
+    op = CEPH_MDS_OP_LSSNAP;
+  return _readdir_r_cb(op,
+    d,
+    cb,
+    fill_readdir_cb,
+    p,
+    want,
+    flags,
+    getref,
+    false);
+}
+
+//
+// NB: this is used for both readdir and readdir_snapdiff results processing
+// hence it should be request type agnostic
+//
+int Client::_readdir_r_cb(int op,
+  dir_result_t *d,
+  add_dirent_cb_t cb,
+  fill_readdir_args_cb_t fill_cb,
+  void *p,
+  unsigned want,
+  unsigned flags,
+  bool getref,
+  bool bypass_cache)
 {
   int caps = statx_to_mask(flags, want);
 
@@ -9301,12 +9464,14 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p,
   }
 
   // can we read from our cache?
-  ldout(cct, 10) << "offset " << hex << dirp->offset << dec
+  ldout(cct, 10) << __func__
+           << " offset " << hex << dirp->offset << dec
           << " snapid " << dirp->inode->snapid << " (complete && ordered) "
           << dirp->inode->is_complete_and_ordered()
           << " issued " << ccap_string(dirp->inode->caps_issued())
           << dendl;
-  if (dirp->inode->snapid != CEPH_SNAPDIR &&
+  if (!bypass_cache &&
+      dirp->inode->snapid != CEPH_SNAPDIR &&
       dirp->inode->is_complete_and_ordered() &&
       dirp->inode->caps_issued_mask(CEPH_CAP_FILE_SHARED, true)) {
     int err = _readdir_cache_cb(dirp, cb, p, caps, getref);
@@ -9320,7 +9485,7 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p,
 
     bool check_caps = true;
     if (!dirp->is_cached()) {
-      int r = _readdir_get_frag(dirp);
+      int r = _readdir_get_frag(op, dirp, fill_cb);
       if (r)
        return r;
       // _readdir_get_frag () may updates dirp->offset if the replied dirfrag is
@@ -9329,7 +9494,8 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p,
     }
     frag_t fg = dirp->buffer_frag;
 
-    ldout(cct, 10) << "frag " << fg << " buffer size " << dirp->buffer.size()
+    ldout(cct, 10) << __func__
+                   << " frag " << fg << " buffer size " << dirp->buffer.size()
                   << " offset " << hex << dirp->offset << dendl;
 
     for (auto it = std::lower_bound(dirp->buffer.begin(), dirp->buffer.end(),
@@ -9364,7 +9530,9 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p,
       r = cb(p, &de, &stx, next_off, inode);  // _next_ offset
       cl.lock();
 
-      ldout(cct, 15) << " de " << de.d_name << " off " << hex << next_off - 1 << dec
+      ldout(cct, 15) << __func__
+                     << " de " << de.d_name << " off " << hex << next_off - 1 << dec
+                     << " snap " << entry.inode->snapid
                     << " = " << r << dendl;
       if (r < 0)
        return r;
@@ -9386,7 +9554,8 @@ int Client::readdir_r_cb(dir_result_t *d, add_dirent_cb_t cb, void *p,
       continue;
     }
 
-    if (diri->shared_gen == dirp->start_shared_gen &&
+    if (!bypass_cache &&
+       diri->shared_gen == dirp->start_shared_gen &&
        diri->dir_release_count == dirp->release_count) {
       if (diri->dir_ordered_count == dirp->ordered_count) {
        ldout(cct, 10) << " marking (I_COMPLETE|I_DIR_ORDERED) on " << *diri << dendl;
@@ -9492,6 +9661,81 @@ int Client::readdirplus_r(dir_result_t *d, struct dirent *de,
   return 0;
 }
 
+int Client::readdir_snapdiff(dir_result_t* d1, snapid_t snap2,
+                             struct dirent* out_de,
+                             snapid_t* out_snap)
+{
+  if (!d1 || !d1->inode || d1->inode->snapid == snap2) {
+    lderr(cct) << __func__ << " invalid parameters: "
+               << " d1:" << d1
+               << " d1->inode:" << (d1 ? d1->inode : nullptr)
+               << " snap2 id :" << snap2
+              << dendl;
+    errno = EINVAL;
+    return -errno;
+  }
+
+  auto& de = d1->de;
+  ceph_statx stx;
+  single_readdir sr;
+  sr.de = &de;
+  sr.stx = &stx;
+  sr.inode = NULL;
+  sr.full = false;
+
+  auto fill_snapdiff_cb = [&](dir_result_t* dirp,
+    MetaRequest* req,
+    InodeRef& diri,
+    frag_t fg) {
+      filepath path;
+      diri->make_nosnap_relative_path(path);
+      req->set_filepath(path);
+      req->set_inode(diri.get());
+      req->head.args.snapdiff.snap_other = snap2;
+      req->head.args.snapdiff.frag = fg;
+      req->head.args.snapdiff.flags = CEPH_READDIR_REPLY_BITFLAGS;
+      if (dirp->last_name.length()) {
+       req->path2.set_path(dirp->last_name);
+      } else if (dirp->hash_order()) {
+       req->head.args.snapdiff.offset_hash = dirp->offset_high();
+      }
+      req->dirp = dirp;
+  };
+
+  // our callback fills the dirent and sets sr.full=true on first
+  // call, and returns -1 the second time around.
+  int ret = _readdir_r_cb(CEPH_MDS_OP_READDIR_SNAPDIFF,
+    d1,
+    _readdir_single_dirent_cb,
+    fill_snapdiff_cb,
+    (void*)&sr,
+    0,
+    AT_STATX_DONT_SYNC,
+    false,
+    true);
+  if (ret < -1) {
+    lderr(cct) << __func__ << " error: "
+               << cpp_strerror(ret)
+               << dendl;
+    errno = -ret;  // this sucks.
+    return ret;
+  }
+
+  ldout(cct, 15) << __func__ << " " << ret
+    << " " << sr.de->d_name
+    << " " << stx.stx_dev
+    << dendl;
+  if (sr.full) {
+    if (out_de) {
+      *out_de = de;
+    }
+    if (out_snap) {
+      *out_snap = stx.stx_dev;
+    }
+    return 1;
+  }
+  return 0;
+}
 
 /* getdents */
 struct getdents_result {
@@ -13569,6 +13813,8 @@ int Client::_mknod(Inode *dir, const char *name, mode_t mode, dev_t rdev,
 
   MetaRequest *req = new MetaRequest(CEPH_MDS_OP_MKNOD);
 
+  req->set_inode_owner_uid_gid(perms.uid(), perms.gid());
+
   filepath path;
   dir->make_nosnap_relative_path(path);
   path.push_dentry(name);
@@ -13713,6 +13959,8 @@ int Client::_create(Inode *dir, const char *name, int flags, mode_t mode,
 
   MetaRequest *req = new MetaRequest(CEPH_MDS_OP_CREATE);
 
+  req->set_inode_owner_uid_gid(perms.uid(), perms.gid());
+
   filepath path;
   dir->make_nosnap_relative_path(path);
   path.push_dentry(name);
@@ -13790,6 +14038,9 @@ int Client::_mkdir(Inode *dir, const char *name, mode_t mode, const UserPerm& pe
   MetaRequest *req = new MetaRequest(is_snap_op ?
                                     CEPH_MDS_OP_MKSNAP : CEPH_MDS_OP_MKDIR);
 
+  if (!is_snap_op)
+    req->set_inode_owner_uid_gid(perm.uid(), perm.gid());
+
   filepath path;
   dir->make_nosnap_relative_path(path);
   path.push_dentry(name);
@@ -13928,6 +14179,8 @@ int Client::_symlink(Inode *dir, const char *name, const char *target,
 
   MetaRequest *req = new MetaRequest(CEPH_MDS_OP_SYMLINK);
 
+  req->set_inode_owner_uid_gid(perms.uid(), perms.gid());
+
   filepath path;
   dir->make_nosnap_relative_path(path);
   path.push_dentry(name);
@@ -14180,11 +14433,13 @@ int Client::_rename(Inode *fromdir, const char *fromname, Inode *todir, const ch
     else
       return -CEPHFS_EROFS;
   }
+
+  // don't allow cross-quota renames
   if (cct->_conf.get_val<bool>("client_quota") && fromdir != todir) {
     Inode *fromdir_root =
-      fromdir->quota.is_enabled(QUOTA_MAX_FILES) ? fromdir : get_quota_root(fromdir, perm, QUOTA_MAX_FILES);
+      fromdir->quota.is_enabled() ? fromdir : get_quota_root(fromdir, perm);
     Inode *todir_root =
-      todir->quota.is_enabled(QUOTA_MAX_FILES) ? todir : get_quota_root(todir, perm, QUOTA_MAX_FILES);
+      todir->quota.is_enabled() ? todir : get_quota_root(todir, perm);
     if (fromdir_root != todir_root) {
       return -CEPHFS_EXDEV;
     }
@@ -14212,12 +14467,13 @@ int Client::_rename(Inode *fromdir, const char *fromname, Inode *todir, const ch
     req->old_dentry_drop = CEPH_CAP_FILE_SHARED;
     req->old_dentry_unless = CEPH_CAP_FILE_EXCL;
 
+    de->is_renaming = true;
     req->set_dentry(de);
     req->dentry_drop = CEPH_CAP_FILE_SHARED;
     req->dentry_unless = CEPH_CAP_FILE_EXCL;
 
     InodeRef oldin, otherin;
-    res = _lookup(fromdir, fromname, 0, &oldin, perm);
+    res = _lookup(fromdir, fromname, 0, &oldin, perm, nullptr, true);
     if (res < 0)
       goto fail;
 
@@ -14226,7 +14482,7 @@ int Client::_rename(Inode *fromdir, const char *fromname, Inode *todir, const ch
     req->set_old_inode(oldinode);
     req->old_inode_drop = CEPH_CAP_LINK_SHARED;
 
-    res = _lookup(todir, toname, 0, &otherin, perm);
+    res = _lookup(todir, toname, 0, &otherin, perm, nullptr, true);
     switch (res) {
     case 0:
       {
@@ -14255,6 +14511,12 @@ int Client::_rename(Inode *fromdir, const char *fromname, Inode *todir, const ch
   res = make_request(req, perm, &target);
   ldout(cct, 10) << "rename result is " << res << dendl;
 
+  // if rename fails it will miss waking up the waiters
+  if (op == CEPH_MDS_OP_RENAME && de->is_renaming) {
+    de->is_renaming = false;
+    signal_cond_list(waiting_for_rename);
+  }
+
   // renamed item from our cache
 
   trim_cache();
index 97c2ad733788dc3df1e31eb36c3d4bd142451a52..911a8b460dfa443de42b6b4ee03944fe183e9ac7 100644 (file)
@@ -362,6 +362,13 @@ public:
   int readdir_r(dir_result_t *dirp, struct dirent *de);
   int readdirplus_r(dir_result_t *dirp, struct dirent *de, struct ceph_statx *stx, unsigned want, unsigned flags, Inode **out);
 
+  /*
+   * Get the next snapshot delta entry.
+   *
+   */
+  int readdir_snapdiff(dir_result_t* dir1, snapid_t snap2,
+    struct dirent* out_de, snapid_t* out_snap);
+
   int getdir(const char *relpath, std::list<std::string>& names,
             const UserPerm& perms);  // get the whole dir at once.
 
@@ -791,7 +798,8 @@ public:
   void update_dir_dist(Inode *in, DirStat *st, mds_rank_t from);
 
   void clear_dir_complete_and_ordered(Inode *diri, bool complete);
-  void insert_readdir_results(MetaRequest *request, MetaSession *session, Inode *diri);
+  void insert_readdir_results(MetaRequest *request, MetaSession *session,
+                              Inode *diri, Inode *diri_other);
   Inode* insert_trace(MetaRequest *request, MetaSession *session);
   void update_inode_file_size(Inode *in, int issued, uint64_t size,
                              uint64_t truncate_seq, uint64_t truncate_size);
@@ -1271,6 +1279,8 @@ private:
     MAY_READ = 4,
   };
 
+  typedef std::function<void(dir_result_t*, MetaRequest*, InodeRef&, frag_t)> fill_readdir_args_cb_t;
+
   std::unique_ptr<CephContext, std::function<void(CephContext*)>> cct_deleter;
 
   /* Flags for VXattr */
@@ -1291,8 +1301,19 @@ private:
   bool _readdir_have_frag(dir_result_t *dirp);
   void _readdir_next_frag(dir_result_t *dirp);
   void _readdir_rechoose_frag(dir_result_t *dirp);
-  int _readdir_get_frag(dir_result_t *dirp);
+  int _readdir_get_frag(int op, dir_result_t *dirp,
+    fill_readdir_args_cb_t fill_req_cb);
   int _readdir_cache_cb(dir_result_t *dirp, add_dirent_cb_t cb, void *p, int caps, bool getref);
+  int _readdir_r_cb(int op,
+    dir_result_t* d,
+    add_dirent_cb_t cb,
+    fill_readdir_args_cb_t fill_cb,
+    void* p,
+    unsigned want,
+    unsigned flags,
+    bool getref,
+    bool bypass_cache);
+
   void _closedir(dir_result_t *dirp);
 
   // other helpers
@@ -1320,7 +1341,8 @@ private:
                 const UserPerm& perms);
 
   int _lookup(Inode *dir, const std::string& dname, int mask, InodeRef *target,
-             const UserPerm& perm, std::string* alternate_name=nullptr);
+             const UserPerm& perm, std::string* alternate_name=nullptr,
+              bool is_rename=false);
 
   int _link(Inode *in, Inode *dir, const char *name, const UserPerm& perm, std::string alternate_name,
            InodeRef *inp = 0);
@@ -1573,6 +1595,8 @@ private:
   std::map<std::pair<int64_t,std::string>, int> pool_perms;
   std::list<ceph::condition_variable*> waiting_for_pool_perm;
 
+  std::list<ceph::condition_variable*> waiting_for_rename;
+
   uint64_t retries_on_invalidate = 0;
 
   // state reclaim
index 94722c5de70fde96ef25b92ab78e6ed891b7cb4a..8003dfed34be5d43427b8a04ecf3ab1d1c2089f5 100644 (file)
@@ -91,6 +91,7 @@ public:
   ceph_seq_t lease_seq = 0;
   int cap_shared_gen = 0;
   std::string alternate_name;
+  bool is_renaming = false;
 
 private:
   xlist<Dentry *>::item inode_xlist_link;
index 3994424e79360800a24badf79f322cb88d691d22..6d709db5831d20319dc03dfd79937f6f166ed320 100644 (file)
@@ -51,6 +51,9 @@ void MetaRequest::dump(Formatter *f) const
   f->dump_unsigned("num_releases", head.num_releases);
 
   f->dump_int("abort_rc", abort_rc);
+
+  f->dump_unsigned("owner_uid", head.owner_uid);
+  f->dump_unsigned("owner_gid", head.owner_gid);
 }
 
 MetaRequest::~MetaRequest()
index a1c9f94598bd96f6734f80e077e4809cc54a93d0..49ee6dc6e527b68bfd2f74dd6c7279a1a437a41b 100644 (file)
@@ -80,6 +80,8 @@ public:
     unsafe_target_item(this) {
     memset(&head, 0, sizeof(head));
     head.op = op;
+    head.owner_uid = -1;
+    head.owner_gid = -1;
   }
   ~MetaRequest();
 
@@ -153,6 +155,13 @@ public:
     return v == 0;
   }
 
+  void set_inode_owner_uid_gid(unsigned u, unsigned g) {
+    /* it makes sense to set owner_{u,g}id only for OPs which create inodes */
+    ceph_assert(IS_CEPH_MDS_OP_NEWINODE(head.op));
+    head.owner_uid = u;
+    head.owner_gid = g;
+  }
+
   // normal fields
   void set_tid(ceph_tid_t t) { tid = t; }
   void set_oldest_client_tid(ceph_tid_t t) { head.oldest_client_tid = t; }
index ad74ae58af2e1c740b32a06d5fb8006e045c1766..301306263e66ee7093e8279f2563ed4cb588b601 100644 (file)
@@ -62,6 +62,13 @@ struct MetaSession {
   MetaSession(mds_rank_t mds_num, ConnectionRef con, const entity_addrvec_t& addrs)
     : mds_num(mds_num), con(con), addrs(addrs) {
   }
+  ~MetaSession() {
+    ceph_assert(caps.empty());
+    ceph_assert(dirty_list.empty());
+    ceph_assert(flushing_caps.empty());
+    ceph_assert(requests.empty());
+    ceph_assert(unsafe_requests.empty());
+  }
 
   xlist<Inode*> &get_dirty_list() { return dirty_list; }
 
index 0e8d53e9420081027a2a298a6744b87819266bb6..a7e1b65e8a09ae2d0f23b20d8c64e28ef132bc15 100644 (file)
@@ -676,77 +676,6 @@ int rgw_bucket_list(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
   }
 } // rgw_bucket_list
 
-
-static int check_index(cls_method_context_t hctx,
-                      rgw_bucket_dir_header *existing_header,
-                      rgw_bucket_dir_header *calc_header)
-{
-  int rc = read_bucket_header(hctx, existing_header);
-  if (rc < 0) {
-    CLS_LOG(1, "ERROR: check_index(): failed to read header\n");
-    return rc;
-  }
-
-  calc_header->tag_timeout = existing_header->tag_timeout;
-  calc_header->ver = existing_header->ver;
-  calc_header->syncstopped = existing_header->syncstopped;
-
-  map<string, bufferlist> keys;
-  string start_obj;
-  string filter_prefix;
-
-#define CHECK_CHUNK_SIZE 1000
-  bool done = false;
-  bool more;
-
-  do {
-    rc = get_obj_vals(hctx, start_obj, filter_prefix, CHECK_CHUNK_SIZE, &keys, &more);
-    if (rc < 0)
-      return rc;
-
-    for (auto kiter = keys.begin(); kiter != keys.end(); ++kiter) {
-      if (!bi_is_plain_entry(kiter->first)) {
-        done = true;
-        break;
-      }
-
-      rgw_bucket_dir_entry entry;
-      auto eiter = kiter->second.cbegin();
-      try {
-        decode(entry, eiter);
-      } catch (ceph::buffer::error& err) {
-        CLS_LOG(1, "ERROR: rgw_bucket_list(): failed to decode entry, key=%s", kiter->first.c_str());
-        return -EIO;
-      }
-      if (entry.exists) {
-        rgw_bucket_category_stats& stats = calc_header->stats[entry.meta.category];
-        stats.num_entries++;
-        stats.total_size += entry.meta.accounted_size;
-        stats.total_size_rounded += cls_rgw_get_rounded_size(entry.meta.accounted_size);
-        stats.actual_size += entry.meta.size;
-      }
-      
-      start_obj = kiter->first;
-    }
-  } while (keys.size() == CHECK_CHUNK_SIZE && !done);
-
-  return 0;
-}
-
-int rgw_bucket_check_index(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
-{
-  CLS_LOG(10, "entered %s", __func__);
-  rgw_cls_check_index_ret ret;
-
-  int rc = check_index(hctx, &ret.existing_header, &ret.calculated_header);
-  if (rc < 0)
-    return rc;
-
-  encode(ret, *out);
-
-  return 0;
-}
-
 static int write_bucket_header(cls_method_context_t hctx, rgw_bucket_dir_header *header)
 {
   header->ver++;
@@ -757,18 +686,6 @@ static int write_bucket_header(cls_method_context_t hctx, rgw_bucket_dir_header
 }
 
 
-int rgw_bucket_rebuild_index(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
-{
-  CLS_LOG(10, "entered %s", __func__);
-  rgw_bucket_dir_header existing_header;
-  rgw_bucket_dir_header calc_header;
-  int rc = check_index(hctx, &existing_header, &calc_header);
-  if (rc < 0)
-    return rc;
-
-  return write_bucket_header(hctx, &calc_header);
-}
-
 int rgw_bucket_update_stats(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
 {
   CLS_LOG(10, "entered %s", __func__);
@@ -1898,6 +1815,9 @@ static int rgw_bucket_link_olh(cls_method_context_t hctx, bufferlist *in, buffer
       return ret;
     }
     olh.set_tag(op.olh_tag);
+    if (op.key.instance.empty()){
+      obj.set_epoch(1);
+    }
   }
 
   /* update the olh log */
@@ -3133,6 +3053,115 @@ static int list_olh_entries(cls_method_context_t hctx,
   return count;
 }
 
+static int check_index(cls_method_context_t hctx,
+                      rgw_bucket_dir_header *existing_header,
+                      rgw_bucket_dir_header *calc_header)
+{
+  int rc = read_bucket_header(hctx, existing_header);
+  if (rc < 0) {
+    CLS_LOG(1, "ERROR: check_index(): failed to read header\n");
+    return rc;
+  }
+
+  calc_header->tag_timeout = existing_header->tag_timeout;
+  calc_header->ver = existing_header->ver;
+  calc_header->syncstopped = existing_header->syncstopped;
+
+  std::list<rgw_cls_bi_entry> entries;
+  string start_obj;
+  string filter_prefix;
+
+#define CHECK_CHUNK_SIZE 1000
+  bool more;
+
+  do {
+    rc = list_plain_entries(hctx, filter_prefix, start_obj, CHECK_CHUNK_SIZE, &entries, &more);
+    if (rc < 0) {
+      return rc;
+    }
+
+    for (const auto & bientry : entries) {
+      rgw_bucket_dir_entry entry;
+      auto diter = bientry.data.cbegin();
+      try {
+        decode(entry, diter);
+      } catch (ceph::buffer::error& err) {
+        CLS_LOG(1, "ERROR:check_index(): failed to decode entry, key=%s", bientry.idx.c_str());
+        return -EIO;
+      }
+
+      if (entry.exists && entry.flags == 0) {
+        rgw_bucket_category_stats& stats = calc_header->stats[entry.meta.category];
+        stats.num_entries++;
+        stats.total_size += entry.meta.accounted_size;
+        stats.total_size_rounded += cls_rgw_get_rounded_size(entry.meta.accounted_size);
+        stats.actual_size += entry.meta.size;
+      }
+      start_obj = bientry.idx;
+    }
+    entries.clear();
+  } while (more);
+
+  start_obj = "";
+  do {
+    rc = list_instance_entries(hctx, filter_prefix, start_obj, CHECK_CHUNK_SIZE, &entries, &more);
+    if (rc < 0) {
+      return rc;
+    }
+
+    for (const auto & bientry : entries) {
+      rgw_bucket_dir_entry entry;
+      auto diter = bientry.data.cbegin();
+      try {
+        decode(entry, diter);
+      } catch (ceph::buffer::error& err) {
+        CLS_LOG(1, "ERROR:check_index(): failed to decode entry, key=%s", bientry.idx.c_str());
+        return -EIO;
+      }
+
+      if (entry.exists) {
+        rgw_bucket_category_stats& stats = calc_header->stats[entry.meta.category];
+        stats.num_entries++;
+        stats.total_size += entry.meta.accounted_size;
+        stats.total_size_rounded += cls_rgw_get_rounded_size(entry.meta.accounted_size);
+        stats.actual_size += entry.meta.size;
+      }
+      start_obj = bientry.idx;
+    }
+    entries.clear();
+  } while (more);
+
+  return 0;
+}
+
+int rgw_bucket_rebuild_index(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
+{
+  CLS_LOG(10, "entered %s", __func__);
+  rgw_bucket_dir_header existing_header;
+  rgw_bucket_dir_header calc_header;
+  int rc = check_index(hctx, &existing_header, &calc_header);
+  if (rc < 0)
+    return rc;
+
+  return write_bucket_header(hctx, &calc_header);
+}
+
+
+int rgw_bucket_check_index(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
+{
+  CLS_LOG(10, "entered %s", __func__);
+  rgw_cls_check_index_ret ret;
+
+  int rc = check_index(hctx, &ret.existing_header, &ret.calculated_header);
+  if (rc < 0)
+    return rc;
+
+  encode(ret, *out);
+
+  return 0;
+}
+
+
 /* Lists all the entries that appear in a bucket index listing.
  *
  * It may not be obvious why this function calls three other "segment"
index 14e0d988466af9455071bf4a9767357d5b57ef81..3a71860c316b439c8cf0d85c9754a5b7617342f0 100644 (file)
@@ -371,39 +371,31 @@ bool rgw_cls_bi_entry::get_info(cls_rgw_obj_key *key,
                                 RGWObjCategory *category,
                                 rgw_bucket_category_stats *accounted_stats)
 {
-  bool account = false;
-  auto iter = data.cbegin();
   using ceph::decode;
-  switch (type) {
-    case BIIndexType::Plain:
-        account = true;
-        // NO BREAK; falls through to case InstanceIdx:
-    case BIIndexType::Instance:
-      {
-        rgw_bucket_dir_entry entry;
-        decode(entry, iter);
-        account = (account && entry.exists);
-        *key = entry.key;
-        *category = entry.meta.category;
-        accounted_stats->num_entries++;
-        accounted_stats->total_size += entry.meta.accounted_size;
-        accounted_stats->total_size_rounded += cls_rgw_get_rounded_size(entry.meta.accounted_size);
-        accounted_stats->actual_size += entry.meta.size;
-      }
-      break;
-    case BIIndexType::OLH:
-      {
-        rgw_bucket_olh_entry entry;
-        decode(entry, iter);
-        *key = entry.key;
-      }
-      break;
-    default:
-      break;
+  auto iter = data.cbegin();
+  if (type == BIIndexType::OLH) {
+    rgw_bucket_olh_entry entry;
+    decode(entry, iter);
+    *key = entry.key;
+    return false;
   }
 
-  return account;
+  rgw_bucket_dir_entry entry;
+  decode(entry, iter);
+  *key = entry.key;
+  *category = entry.meta.category;
+  accounted_stats->num_entries++;
+  accounted_stats->total_size += entry.meta.accounted_size;
+  accounted_stats->total_size_rounded += cls_rgw_get_rounded_size(entry.meta.accounted_size);
+  accounted_stats->actual_size += entry.meta.size;
+  if (type == BIIndexType::Plain) {
+    return entry.exists && entry.flags == 0;
+  } else if (type == BIIndexType::Instance) {
+    return entry.exists;
+  }
+  return false;
 }
+
 void rgw_cls_bi_entry::generate_test_instances(list<rgw_cls_bi_entry*>& o)
 {
   using ceph::encode;
index 362deffb5ab4a35d393a9565b4447f48fd87f3f0..f121afa07a3e386ccbabde7a7b5d614d8fe695ba 100644 (file)
@@ -311,6 +311,11 @@ void JSONFormatter::add_value(std::string_view name, std::string_view val, bool
   }
 }
 
+void JSONFormatter::dump_null(std::string_view name)
+{
+  add_value(name, "null");
+}
+
 void JSONFormatter::dump_unsigned(std::string_view name, uint64_t u)
 {
   add_value(name, u);
@@ -441,14 +446,20 @@ void XMLFormatter::open_array_section_in_ns(std::string_view name, const char *n
   open_section_in_ns(name, ns, NULL);
 }
 
+std::string XMLFormatter::get_xml_name(std::string_view name) const
+{
+  std::string e(name);
+  std::transform(e.begin(), e.end(), e.begin(),
+      [this](char c) { return this->to_lower_underscore(c); });
+  return e;
+}
+
 void XMLFormatter::close_section()
 {
   ceph_assert(!m_sections.empty());
   finish_pending_string();
 
-  std::string section = m_sections.back();
-  std::transform(section.begin(), section.end(), section.begin(),
-        [this](char c) { return this->to_lower_underscore(c); });
+  auto section = get_xml_name(m_sections.back());
   m_sections.pop_back();
   print_spaces();
   m_ss << "</" << section << ">";
@@ -459,10 +470,7 @@ void XMLFormatter::close_section()
 template <class T>
 void XMLFormatter::add_value(std::string_view name, T val)
 {
-  std::string e(name);
-  std::transform(e.begin(), e.end(), e.begin(),
-      [this](char c) { return this->to_lower_underscore(c); });
-
+  auto e = get_xml_name(name);
   print_spaces();
   m_ss.precision(std::numeric_limits<T>::max_digits10);
   m_ss << "<" << e << ">" << val << "</" << e << ">";
@@ -470,6 +478,14 @@ void XMLFormatter::add_value(std::string_view name, T val)
     m_ss << "\n";
 }
 
+void XMLFormatter::dump_null(std::string_view name)
+{
+  print_spaces();
+  m_ss << "<" << get_xml_name(name) << " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\" />";
+  if (m_pretty)
+    m_ss << "\n";
+}
+
 void XMLFormatter::dump_unsigned(std::string_view name, uint64_t u)
 {
   add_value(name, u);
@@ -487,10 +503,7 @@ void XMLFormatter::dump_float(std::string_view name, double d)
 
 void XMLFormatter::dump_string(std::string_view name, std::string_view s)
 {
-  std::string e(name);
-  std::transform(e.begin(), e.end(), e.begin(),
-      [this](char c) { return this->to_lower_underscore(c); });
-
+  auto e = get_xml_name(name);
   print_spaces();
   m_ss << "<" << e << ">" << xml_stream_escaper(s) << "</" << e << ">";
   if (m_pretty)
@@ -499,10 +512,7 @@ void XMLFormatter::dump_string(std::string_view name, std::string_view s)
 
 void XMLFormatter::dump_string_with_attrs(std::string_view name, std::string_view s, const FormatterAttrs& attrs)
 {
-  std::string e(name);
-  std::transform(e.begin(), e.end(), e.begin(),
-      [this](char c) { return this->to_lower_underscore(c); });
-
+  auto e = get_xml_name(name);
   std::string attrs_str;
   get_attrs_str(&attrs, attrs_str);
   print_spaces();
@@ -523,9 +533,7 @@ void XMLFormatter::dump_format_va(std::string_view name, const char *ns, bool qu
 {
   char buf[LARGE_SIZE];
   size_t len = vsnprintf(buf, LARGE_SIZE, fmt, ap);
-  std::string e(name);
-  std::transform(e.begin(), e.end(), e.begin(),
-      [this](char c) { return this->to_lower_underscore(c); });
+  auto e = get_xml_name(name);
 
   print_spaces();
   if (ns) {
@@ -577,9 +585,7 @@ void XMLFormatter::open_section_in_ns(std::string_view name, const char *ns, con
     get_attrs_str(attrs, attrs_str);
   }
 
-  std::string e(name);
-  std::transform(e.begin(), e.end(), e.begin(),
-      [this](char c) { return this->to_lower_underscore(c); });
+  auto e = get_xml_name(name);
 
   if (ns) {
     m_ss << "<" << e << attrs_str << " xmlns=\"" << ns << "\">";
@@ -852,6 +858,11 @@ void TableFormatter::add_value(std::string_view name, T val) {
   m_ss.str("");
 }
 
+void TableFormatter::dump_null(std::string_view name)
+{
+  add_value(name, "null");
+}
+
 void TableFormatter::dump_unsigned(std::string_view name, uint64_t u)
 {
   add_value(name, u);
index abdc172cba53b329b2be78d8dc687575b0db8bc1..1919b018a67c6681afd2c798f81730c38748479a 100644 (file)
@@ -87,6 +87,7 @@ namespace ceph {
     virtual void open_object_section(std::string_view name) = 0;
     virtual void open_object_section_in_ns(std::string_view name, const char *ns) = 0;
     virtual void close_section() = 0;
+    virtual void dump_null(std::string_view name) = 0;
     virtual void dump_unsigned(std::string_view name, uint64_t u) = 0;
     virtual void dump_int(std::string_view name, int64_t s) = 0;
     virtual void dump_float(std::string_view name, double d) = 0;
@@ -156,6 +157,7 @@ namespace ceph {
     void open_object_section(std::string_view name) override;
     void open_object_section_in_ns(std::string_view name, const char *ns) override;
     void close_section() override;
+    void dump_null(std::string_view name) override;
     void dump_unsigned(std::string_view name, uint64_t u) override;
     void dump_int(std::string_view name, int64_t s) override;
     void dump_float(std::string_view name, double d) override;
@@ -228,6 +230,7 @@ namespace ceph {
     void open_object_section(std::string_view name) override;
     void open_object_section_in_ns(std::string_view name, const char *ns) override;
     void close_section() override;
+    void dump_null(std::string_view name) override;
     void dump_unsigned(std::string_view name, uint64_t u) override;
     void dump_int(std::string_view name, int64_t s) override;
     void dump_float(std::string_view name, double d) override;
@@ -249,6 +252,7 @@ namespace ceph {
     void print_spaces();
     void get_attrs_str(const FormatterAttrs *attrs, std::string& attrs_str);
     char to_lower_underscore(char c) const;
+    std::string get_xml_name(std::string_view name) const;
 
     std::stringstream m_ss, m_pending_string;
     std::deque<std::string> m_sections;
@@ -283,6 +287,7 @@ namespace ceph {
     void open_object_section_with_attrs(std::string_view name, const FormatterAttrs& attrs) override;
 
     void close_section() override;
+    void dump_null(std::string_view name) override;
     void dump_unsigned(std::string_view name, uint64_t u) override;
     void dump_int(std::string_view name, int64_t s) override;
     void dump_float(std::string_view name, double d) override;
index d63bdb8f9a5744a2d91237f3eefafeab587f6cd4..32a1ab472a89f82096454b2ed672e173963a971c 100644 (file)
@@ -134,7 +134,7 @@ void OpHistory::dump_ops(utime_t now, Formatter *f, set<string> filters, bool by
        if (!i->second->filter_out(filters))
          continue;
        f->open_object_section("op");
-       i->second->dump(now, f);
+       i->second->dump(now, f, OpTracker::default_dumper);
        f->close_section();
       }
     };
@@ -214,7 +214,7 @@ void OpHistory::dump_slow_ops(utime_t now, Formatter *f, set<string> filters)
       if (!i->second->filter_out(filters))
         continue;
       f->open_object_section("Op");
-      i->second->dump(now, f);
+      i->second->dump(now, f, OpTracker::default_dumper);
       f->close_section();
     }
     f->close_section();
@@ -233,7 +233,7 @@ bool OpTracker::dump_historic_slow_ops(Formatter *f, set<string> filters)
   return true;
 }
 
-bool OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked, set<string> filters, bool count_only)
+bool OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked, set<string> filters, bool count_only, dumper lambda)
 {
   if (!tracking_enabled)
     return false;
@@ -259,7 +259,7 @@ bool OpTracker::dump_ops_in_flight(Formatter *f, bool print_only_blocked, set<st
       
       if (!count_only) {
         f->open_object_section("op");
-        op.dump(now, f);
+        op.dump(now, f, lambda);
         f->close_section(); // this TrackedOp
       }
 
@@ -496,7 +496,7 @@ void TrackedOp::mark_event(std::string_view event, utime_t stamp)
   _event_marked();
 }
 
-void TrackedOp::dump(utime_t now, Formatter *f) const
+void TrackedOp::dump(utime_t now, Formatter *f, OpTracker::dumper lambda) const
 {
   // Ignore if still in the constructor
   if (!state)
@@ -507,7 +507,7 @@ void TrackedOp::dump(utime_t now, Formatter *f) const
   f->dump_float("duration", get_duration());
   {
     f->open_object_section("type_data");
-    _dump(f);
+    lambda(*this, f);
     f->close_section();
   }
 }
index 0ff7430b372b5b279919f45e106498ffe0bbf032..477f6c959cb3b59dd89062c328c5cb1312513f97 100644 (file)
@@ -15,6 +15,7 @@
 #define TRACKEDREQUEST_H_
 
 #include <atomic>
+#include "common/StackStringStream.h"
 #include "common/ceph_mutex.h"
 #include "common/histogram.h"
 #include "common/Thread.h"
@@ -129,6 +130,8 @@ class OpTracker {
   ceph::shared_mutex lock = ceph::make_shared_mutex("OpTracker::lock");
 
 public:
+  using dumper = std::function<void(const TrackedOp&, Formatter*)>;
+
   CephContext *cct;
   OpTracker(CephContext *cct_, bool tracking, uint32_t num_shards);
       
@@ -148,7 +151,8 @@ public:
   void set_tracking(bool enable) {
     tracking_enabled = enable;
   }
-  bool dump_ops_in_flight(ceph::Formatter *f, bool print_only_blocked = false, std::set<std::string> filters = {""}, bool count_only = false);
+  static void default_dumper(const TrackedOp& op, Formatter* f);
+  bool dump_ops_in_flight(ceph::Formatter *f, bool print_only_blocked = false, std::set<std::string> filters = {""}, bool count_only = false, dumper lambda = default_dumper);
   bool dump_historic_ops(ceph::Formatter *f, bool by_duration = false, std::set<std::string> filters = {""});
   bool dump_historic_slow_ops(ceph::Formatter *f, std::set<std::string> filters = {""});
   bool register_inflight_op(TrackedOp *i);
@@ -278,10 +282,6 @@ protected:
   };
   std::atomic<int> state = {STATE_UNTRACKED};
 
-  mutable std::string desc_str;   ///< protected by lock
-  mutable const char *desc = nullptr;  ///< readable without lock
-  mutable std::atomic<bool> want_new_desc = {false};
-
   TrackedOp(OpTracker *_tracker, const utime_t& initiated) :
     tracker(_tracker),
     initiated_at(initiated)
@@ -294,7 +294,7 @@ protected:
   /// if you want something else to happen when events are marked, implement
   virtual void _event_marked() {}
   /// return a unique descriptor of the Op; eg the message it's attached to
-  virtual void _dump_op_descriptor_unlocked(std::ostream& stream) const = 0;
+  virtual void _dump_op_descriptor(std::ostream& stream) const = 0;
   /// called when the last non-OpTracker reference is dropped
   virtual void _unregistered() {}
 
@@ -346,26 +346,41 @@ public:
     }
   }
 
-  const char *get_desc() const {
-    if (!desc || want_new_desc.load()) {
-      std::lock_guard l(lock);
-      _gen_desc();
+  std::string get_desc() const {
+    std::string ret;
+    {
+      std::lock_guard l(desc_lock);
+      ret = desc;
+    }
+    if (ret.size() == 0 || want_new_desc.load()) {
+      CachedStackStringStream css;
+      std::scoped_lock l(lock, desc_lock);
+      if (desc.size() && !want_new_desc.load()) {
+        return desc;
+      }
+      _dump_op_descriptor(*css);
+      desc = css->strv();
+      want_new_desc = false;
+      return desc;
+    } else {
+      return ret;
     }
-    return desc;
   }
+
 private:
-  void _gen_desc() const {
-    std::ostringstream ss;
-    _dump_op_descriptor_unlocked(ss);
-    desc_str = ss.str();
-    desc = desc_str.c_str();
-    want_new_desc = false;
-  }
+  mutable ceph::mutex desc_lock = ceph::make_mutex("OpTracker::desc_lock");
+  mutable std::string desc;   ///< protected by desc_lock
+  mutable std::atomic<bool> want_new_desc = {false};
+
 public:
   void reset_desc() {
     want_new_desc = true;
   }
 
+  void dump_type(Formatter* f) const {
+    return _dump(f);
+  }
+
   const utime_t& get_initiated() const {
     return initiated_at;
   }
@@ -384,12 +399,12 @@ public:
     warn_interval_multiplier = 0;
   }
 
-  virtual std::string_view state_string() const {
+  std::string state_string() const {
     std::lock_guard l(lock);
-    return events.empty() ? std::string_view() : std::string_view(events.rbegin()->str);
+    return _get_state_string();
   }
 
-  void dump(utime_t now, ceph::Formatter *f) const;
+  void dump(utime_t now, ceph::Formatter *f, OpTracker::dumper lambda) const;
 
   void tracking_start() {
     if (tracker->register_inflight_op(this)) {
@@ -406,7 +421,15 @@ public:
   friend void intrusive_ptr_release(TrackedOp *o) {
     o->put();
   }
+
+protected:
+  virtual std::string _get_state_string() const {
+    return events.empty() ? std::string() : std::string(events.rbegin()->str);
+  }
 };
 
+inline void OpTracker::default_dumper(const TrackedOp& op, Formatter* f) {
+  op._dump(f);
+}
 
 #endif
index ca044cc85d0ad23571733cf204fa7eb046e729b9..18dcc701b31d536375f7c9c1c3907911339d4bf7 100644 (file)
@@ -300,6 +300,7 @@ const char *ceph_mds_op_name(int op)
        case CEPH_MDS_OP_MKSNAP: return "mksnap";
        case CEPH_MDS_OP_RMSNAP: return "rmsnap";
        case CEPH_MDS_OP_RENAMESNAP: return "renamesnap";
+       case CEPH_MDS_OP_READDIR_SNAPDIFF: return "readdir_snapdiff";
        case CEPH_MDS_OP_SETFILELOCK: return "setfilelock";
        case CEPH_MDS_OP_GETFILELOCK: return "getfilelock";
        case CEPH_MDS_OP_FRAGMENTDIR: return "fragmentdir";
index eeb895615d6a60e1e3c6e924f274f058b25a24f7..6eb0702fcdda183ec516ee65d6a2d7c0c9632831 100644 (file)
@@ -345,10 +345,10 @@ options:
   type: float
   level: advanced
   desc: decay rate for session readdir caps leading to readdir throttle
-  long_desc: The half-life for the session cap acquisition counter of caps acquired
-    by readdir. This is used for throttling readdir requests from clients slow to
-    release caps.
-  default: 10
+  long_desc: The half-life for the session cap acquisition counter of caps
+    acquired by readdir. This is used for throttling readdir requests from
+    clients.
+  default: 30
   services:
   - mds
   flags:
@@ -356,8 +356,8 @@ options:
 - name: mds_session_cap_acquisition_throttle
   type: uint
   level: advanced
-  desc: throttle point for cap acquisition decay counter
-  default: 500000
+  desc: threshold at which the cap acquisition decay counter throttles
+  default: 100000
   services:
   - mds
 - name: mds_session_max_caps_throttle_ratio
@@ -1524,3 +1524,13 @@ options:
   - mds
   flags:
   - runtime
+- name: mds_session_metadata_threshold
+  type: size
+  level: advanced
+  desc: Evict non-advancing client-tid sessions exceeding the config size.
+  long_desc: Evict clients which are not advancing their request tids which causes a large buildup of session metadata (`completed_requests`) in the MDS causing the MDS to go read-only since the RADOS operation exceeds the size threashold. This config is the maximum size (in bytes) that a session metadata (encoded) can grow.
+  default: 16_M
+  services:
+  - mds
+  flags:
+  - runtime
index 48b58ca65a66acf7d300f9858aa1df11511000b5..241632a229be24fb8c7e0f38cacb800281642915 100644 (file)
@@ -3241,7 +3241,7 @@ options:
     is very heavily loaded. Beware that increasing this value may cause some operations
     to take longer in exceptional cases and thus may, rarely, cause clients to time
     out.
-  default: 3
+  default: 10
   tags:
   - error recovery
   services:
index 88ce8b1b73c29ac7886d0c90a2a4353606295d68..9db91369a8b5011a6fc344a239eedb343efe6b70 100644 (file)
@@ -236,6 +236,14 @@ seastar::future<> AdminSocket::start(const std::string& path)
   try {
     server_sock = seastar::engine().listen(sock_path);
   } catch (const std::system_error& e) {
+    if (e.code() == std::errc::address_in_use) {
+      logger().debug("{}: Admin Socket socket path={} already exists, retrying",
+                     __func__, path);
+      return seastar::remove_file(path).then([this, path] {
+        server_sock.reset();
+        return start(path);
+      });
+    }
     logger().error("{}: unable to listen({}): {}", __func__, path, e.what());
     server_sock.reset();
     return seastar::make_ready_future<>();
index e27db9b5bedf3d868de720f39efc579b7416fbe2..4c0e655075adb92f1ffc5cd5879dd5b99bf0fc18 100644 (file)
@@ -96,8 +96,17 @@ public:
     return values.get();
   }
 
-  // required by sharded<>
+  void get_config_bl(uint64_t have_version,
+                    ceph::buffer::list *bl,
+                    uint64_t *got_version) {
+    get_config().get_config_bl(get_config_values(), have_version,
+                               bl, got_version);
+  }
+  void get_defaults_bl(ceph::buffer::list *bl) {
+    get_config().get_defaults_bl(get_config_values(), bl);
+  }
   seastar::future<> start();
+  // required by sharded<>
   seastar::future<> stop() {
     return seastar::make_ready_future<>();
   }
index 705a9f05210ce271efde83cb49f35ac2d362eedd..c5d63d5b9c1d55252ba912359ff76241e95c656d 100644 (file)
@@ -599,7 +599,9 @@ private:
       static_assert((... && std::is_invocable_v<ErrorVisitorT,
                                                 AllowedErrors>),
                     "provided Error Visitor is not exhaustive");
-
+      static_assert(std::is_void_v<ValueT> ? std::is_invocable_v<ValueFuncT>
+                                          : std::is_invocable_v<ValueFuncT, ValueT>,
+                    "Value Func is not invocable with future's value");
       using value_func_result_t =
         typename std::conditional_t<std::is_void_v<ValueT>,
                                    std::invoke_result<ValueFuncT>,
index f26a3e860bc2b950a8ab9cd79bd165d3dec031b9..6df2c99fd2a0695dac0044f2369f9151eaede41f 100644 (file)
@@ -476,7 +476,7 @@ public:
   using Ref = std::unique_ptr<PipelineExitBarrierI>;
 
   /// Waits for exit barrier
-  virtual seastar::future<> wait() = 0;
+  virtual std::optional<seastar::future<>> wait() = 0;
 
   /// Releases pipeline stage, can only be called after wait
   virtual void exit() = 0;
@@ -503,8 +503,8 @@ public:
 class PipelineHandle {
   PipelineExitBarrierI::Ref barrier;
 
-  auto wait_barrier() {
-    return barrier ? barrier->wait() : seastar::now();
+  std::optional<seastar::future<>> wait_barrier() {
+    return barrier ? barrier->wait() : std::nullopt;
   }
 
 public:
@@ -525,15 +525,26 @@ public:
   seastar::future<>
   enter(T &stage, typename T::BlockingEvent::template Trigger<OpT>&& t) {
     ceph_assert(stage.get_core() == seastar::this_shard_id());
-    return wait_barrier().then([this, &stage, t=std::move(t)] () mutable {
-      auto fut = t.maybe_record_blocking(stage.enter(t), stage);
-      exit();
-      return std::move(fut).then(
-        [this, t=std::move(t)](auto &&barrier_ref) mutable {
-        barrier = std::move(barrier_ref);
-        return seastar::now();
+    auto wait_fut = wait_barrier();
+    if (wait_fut.has_value()) {
+      return wait_fut.value().then([this, &stage, t=std::move(t)] () mutable {
+        auto fut = t.maybe_record_blocking(stage.enter(t), stage);
+        exit();
+        return std::move(fut).then(
+          [this, t=std::move(t)](auto &&barrier_ref) mutable {
+          barrier = std::move(barrier_ref);
+          return seastar::now();
+        });
       });
-    });
+    } else {
+        auto fut = t.maybe_record_blocking(stage.enter(t), stage);
+        exit();
+        return std::move(fut).then(
+          [this, t=std::move(t)](auto &&barrier_ref) mutable {
+          barrier = std::move(barrier_ref);
+          return seastar::now();
+        });
+    }
   }
 
   /**
@@ -542,7 +553,7 @@ public:
   seastar::future<> complete() {
     auto ret = wait_barrier();
     barrier.reset();
-    return ret;
+    return ret ? std::move(ret.value()) : seastar::now();
   }
 
   /**
@@ -578,8 +589,8 @@ class OrderedExclusivePhaseT : public PipelineStageIT<T> {
     ExitBarrier(OrderedExclusivePhaseT *phase, Operation::id_t id)
       : phase(phase), op_id(id) {}
 
-    seastar::future<> wait() final {
-      return seastar::now();
+    std::optional<seastar::future<>> wait() final {
+      return std::nullopt;
     }
 
     void exit() final {
@@ -681,7 +692,7 @@ private:
       seastar::future<> &&barrier,
       TriggerT& trigger) : phase(phase), barrier(std::move(barrier)), trigger(trigger) {}
 
-    seastar::future<> wait() final {
+    std::optional<seastar::future<>> wait() final {
       assert(phase);
       assert(barrier);
       auto ret = std::move(*barrier);
@@ -739,8 +750,8 @@ class UnorderedStageT : public PipelineStageIT<T> {
   public:
     ExitBarrier() = default;
 
-    seastar::future<> wait() final {
-      return seastar::now();
+    std::optional<seastar::future<>> wait() final {
+      return std::nullopt;
     }
 
     void exit() final {}
index 6e3d7cdd848c007970be328b8e2d5b6241499eb4..169915c9eb3b2777b26610075bada9bdec2f8b00 100644 (file)
@@ -65,13 +65,18 @@ Client::ms_dispatch(crimson::net::ConnectionRef conn, MessageRef m)
   return (dispatched ? std::make_optional(seastar::now()) : std::nullopt);
 }
 
-void Client::ms_handle_connect(crimson::net::ConnectionRef c)
+void Client::ms_handle_connect(
+    crimson::net::ConnectionRef c,
+    seastar::shard_id prv_shard)
 {
+  ceph_assert_always(prv_shard == seastar::this_shard_id());
   gate.dispatch_in_background(__func__, *this, [this, c] {
     if (conn == c) {
       // ask for the mgrconfigure message
       auto m = crimson::make_message<MMgrOpen>();
       m->daemon_name = local_conf()->name.get_id();
+      local_conf().get_config_bl(0, &m->config_bl, &last_config_bl_version);
+      local_conf().get_defaults_bl(&m->config_defaults_bl);
       return conn->send(std::move(m));
     } else {
       return seastar::now();
index e8457543305681defdb7c7881bda2640e87512a3..501949768dddf89172a01f02443f3f09ead92919 100644 (file)
@@ -40,7 +40,7 @@ private:
   std::optional<seastar::future<>> ms_dispatch(
       crimson::net::ConnectionRef conn, Ref<Message> m) override;
   void ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replace) final;
-  void ms_handle_connect(crimson::net::ConnectionRef conn) final;
+  void ms_handle_connect(crimson::net::ConnectionRef conn, seastar::shard_id) final;
   seastar::future<> handle_mgr_map(crimson::net::ConnectionRef conn,
                                   Ref<MMgrMap> m);
   seastar::future<> handle_mgr_conf(crimson::net::ConnectionRef conn,
@@ -56,6 +56,7 @@ private:
   crimson::net::ConnectionRef conn;
   seastar::timer<seastar::lowres_clock> report_timer;
   crimson::common::Gated gate;
+  uint64_t last_config_bl_version = 0;
 };
 
 inline std::ostream& operator<<(std::ostream& out, const Client& client) {
index 4c90f6e6852c2f0deca5f17595a59bf00da44b91..7141e20f476df7a1461e854d0744142d4a24cb28 100644 (file)
@@ -40,6 +40,15 @@ class Connection : public seastar::enable_shared_from_this<Connection> {
 
   virtual ~Connection() {}
 
+  /**
+   * get_shard_id
+   *
+   * The shard id where the Connection is dispatching events and handling I/O.
+   *
+   * May be changed with the accept/connect events.
+   */
+  virtual const seastar::shard_id get_shard_id() const = 0;
+
   virtual const entity_name_t &get_peer_name() const = 0;
 
   entity_type_t get_peer_type() const { return get_peer_name().type(); }
@@ -71,7 +80,9 @@ class Connection : public seastar::enable_shared_from_this<Connection> {
    * send
    *
    * Send a message over a connection that has completed its handshake.
-   * May be invoked from any core.
+   *
+   * May be invoked from any core, but that requires to chain the returned
+   * future to preserve ordering.
    */
   virtual seastar::future<> send(MessageURef msg) = 0;
 
@@ -81,7 +92,8 @@ class Connection : public seastar::enable_shared_from_this<Connection> {
    * Send a keepalive message over a connection that has completed its
    * handshake.
    *
-   * May be invoked from any core.
+   * May be invoked from any core, but that requires to chain the returned
+   * future to preserve ordering.
    */
   virtual seastar::future<> send_keepalive() = 0;
 
@@ -109,9 +121,13 @@ class Connection : public seastar::enable_shared_from_this<Connection> {
   virtual void print(std::ostream& out) const = 0;
 
 #ifdef UNIT_TESTS_BUILT
-  virtual bool is_closed() const = 0;
+  virtual bool is_protocol_ready() const = 0;
+
+  virtual bool is_protocol_standby() const = 0;
+
+  virtual bool is_protocol_closed() const = 0;
 
-  virtual bool is_closed_clean() const = 0;
+  virtual bool is_protocol_closed_clean() const = 0;
 
   virtual bool peer_wins() const = 0;
 #endif
index cc6fd4574c7518da11c8471352ba1b0f35d0671d..9eea0a858f0645beb1d8284f985a402d7af60239 100644 (file)
@@ -30,11 +30,27 @@ class Dispatcher {
   // used to throttle the connection if it's too busy.
   virtual std::optional<seastar::future<>> ms_dispatch(ConnectionRef, MessageRef) = 0;
 
-  virtual void ms_handle_accept(ConnectionRef conn) {}
+  // The connection is moving to the new_shard under accept/connect.
+  // User should not operate conn in this shard thereafter.
+  virtual void ms_handle_shard_change(
+      ConnectionRef conn,
+      seastar::shard_id new_shard,
+      bool is_accept_or_connect) {}
+
+  // The connection is accepted or recoverred(lossless), all the followup
+  // events and messages will be dispatched to this shard.
+  //
+  // is_replace=true means the accepted connection has replaced
+  // another connecting connection with the same peer_addr, which currently only
+  // happens under lossy policy when both sides wish to connect to each other.
+  virtual void ms_handle_accept(ConnectionRef conn, seastar::shard_id prv_shard, bool is_replace) {}
 
-  virtual void ms_handle_connect(ConnectionRef conn) {}
+  // The connection is (re)connected, all the followup events and messages will
+  // be dispatched to this shard.
+  virtual void ms_handle_connect(ConnectionRef conn, seastar::shard_id prv_shard) {}
 
   // a reset event is dispatched when the connection is closed unexpectedly.
+  //
   // is_replace=true means the reset connection is going to be replaced by
   // another accepting connection with the same peer_addr, which currently only
   // happens under lossy policy when both sides wish to connect to each other.
index 1b6d5a0447cc9121a86af1aeae90e0148ffeb663..273a6350d71edb3a29ab0acadfe37dadf493ef5e 100644 (file)
@@ -6,10 +6,6 @@
 #include "Errors.h"
 #include "SocketConnection.h"
 
-#ifdef UNIT_TESTS_BUILT
-#include "Interceptor.h"
-#endif
-
 using ceph::msgr::v2::FrameAssembler;
 using ceph::msgr::v2::FrameError;
 using ceph::msgr::v2::preamble_block_t;
@@ -27,25 +23,45 @@ seastar::logger& logger() {
 namespace crimson::net {
 
 FrameAssemblerV2::FrameAssemblerV2(SocketConnection &_conn)
-  : conn{_conn}
-{}
+  : conn{_conn}, sid{seastar::this_shard_id()}
+{
+  assert(seastar::this_shard_id() == conn.get_messenger_shard_id());
+}
+
+FrameAssemblerV2::~FrameAssemblerV2()
+{
+  assert(seastar::this_shard_id() == conn.get_messenger_shard_id());
+  assert(seastar::this_shard_id() == sid);
+  if (has_socket()) {
+    std::ignore = move_socket();
+  }
+}
 
 #ifdef UNIT_TESTS_BUILT
 // should be consistent to intercept() in ProtocolV2.cc
-void FrameAssemblerV2::intercept_frame(Tag tag, bool is_write)
+seastar::future<> FrameAssemblerV2::intercept_frames(
+    std::vector<Breakpoint> bps,
+    bp_type_t type)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
-  if (conn.interceptor) {
-    auto type = is_write ? bp_type_t::WRITE : bp_type_t::READ;
-    auto action = conn.interceptor->intercept(
-        conn, Breakpoint{tag, type});
-    socket->set_trap(type, action, &conn.interceptor->blocker);
+  if (!conn.interceptor) {
+    return seastar::now();
   }
+  return conn.interceptor->intercept(conn, bps
+  ).then([this, type](bp_action_t action) {
+    return seastar::smp::submit_to(
+        socket->get_shard_id(),
+        [this, type, action] {
+      socket->set_trap(type, action, &conn.interceptor->blocker);
+    });
+  });
 }
 #endif
 
 void FrameAssemblerV2::set_is_rev1(bool _is_rev1)
 {
+  assert(seastar::this_shard_id() == sid);
   is_rev1 = _is_rev1;
   tx_frame_asm.set_is_rev1(_is_rev1);
   rx_frame_asm.set_is_rev1(_is_rev1);
@@ -55,12 +71,14 @@ void FrameAssemblerV2::create_session_stream_handlers(
   const AuthConnectionMeta &auth_meta,
   bool crossed)
 {
+  assert(seastar::this_shard_id() == sid);
   session_stream_handlers = ceph::crypto::onwire::rxtx_t::create_handler_pair(
       nullptr, auth_meta, is_rev1, crossed);
 }
 
 void FrameAssemblerV2::reset_handlers()
 {
+  assert(seastar::this_shard_id() == sid);
   session_stream_handlers = { nullptr, nullptr };
   session_comp_handlers = { nullptr, nullptr };
 }
@@ -68,19 +86,23 @@ void FrameAssemblerV2::reset_handlers()
 FrameAssemblerV2::mover_t
 FrameAssemblerV2::to_replace()
 {
+  assert(seastar::this_shard_id() == sid);
   assert(is_socket_valid());
-  socket = nullptr;
+
+  clear();
+
   return mover_t{
-      std::move(conn.socket),
+      move_socket(),
       std::move(session_stream_handlers),
       std::move(session_comp_handlers)};
 }
 
 seastar::future<> FrameAssemblerV2::replace_by(FrameAssemblerV2::mover_t &&mover)
 {
-  record_io = false;
-  rxbuf.clear();
-  txbuf.clear();
+  assert(seastar::this_shard_id() == sid);
+
+  clear();
+
   session_stream_handlers = std::move(mover.session_stream_handlers);
   session_comp_handlers = std::move(mover.session_comp_handlers);
   if (has_socket()) {
@@ -93,6 +115,7 @@ seastar::future<> FrameAssemblerV2::replace_by(FrameAssemblerV2::mover_t &&mover
 
 void FrameAssemblerV2::start_recording()
 {
+  assert(seastar::this_shard_id() == sid);
   record_io = true;
   rxbuf.clear();
   txbuf.clear();
@@ -101,6 +124,7 @@ void FrameAssemblerV2::start_recording()
 FrameAssemblerV2::record_bufs_t
 FrameAssemblerV2::stop_recording()
 {
+  assert(seastar::this_shard_id() == sid);
   ceph_assert_always(record_io == true);
   record_io = false;
   return record_bufs_t{std::move(rxbuf), std::move(txbuf)};
@@ -109,132 +133,256 @@ FrameAssemblerV2::stop_recording()
 bool FrameAssemblerV2::has_socket() const
 {
   assert((socket && conn.socket) || (!socket && !conn.socket));
-  return socket != nullptr;
+  return bool(socket);
 }
 
 bool FrameAssemblerV2::is_socket_valid() const
 {
-  return has_socket() && !socket->is_shutdown();
+  assert(seastar::this_shard_id() == sid);
+#ifndef NDEBUG
+  if (has_socket() && socket->get_shard_id() == sid) {
+    assert(socket->is_shutdown() == is_socket_shutdown);
+  }
+#endif
+  return has_socket() && !is_socket_shutdown;
+}
+
+seastar::shard_id
+FrameAssemblerV2::get_socket_shard_id() const
+{
+  assert(seastar::this_shard_id() == sid);
+  assert(is_socket_valid());
+  return socket->get_shard_id();
+}
+
+SocketFRef FrameAssemblerV2::move_socket()
+{
+  assert(has_socket());
+  conn.set_socket(nullptr);
+  return std::move(socket);
 }
 
-void FrameAssemblerV2::set_socket(SocketRef &&new_socket)
+void FrameAssemblerV2::set_socket(SocketFRef &&new_socket)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(!has_socket());
-  socket = new_socket.get();
-  conn.socket = std::move(new_socket);
+  assert(new_socket);
+  socket = std::move(new_socket);
+  conn.set_socket(socket.get());
+  is_socket_shutdown = false;
   assert(is_socket_valid());
 }
 
 void FrameAssemblerV2::learn_socket_ephemeral_port_as_connector(uint16_t port)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
+  // Note: may not invoke on the socket core
   socket->learn_ephemeral_port_as_connector(port);
 }
 
-void FrameAssemblerV2::shutdown_socket()
+template <bool may_cross_core>
+void FrameAssemblerV2::shutdown_socket(crimson::common::Gated *gate)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(is_socket_valid());
-  socket->shutdown();
+  is_socket_shutdown = true;
+  if constexpr (may_cross_core) {
+    assert(conn.get_messenger_shard_id() == sid);
+    assert(gate);
+    gate->dispatch_in_background("shutdown_socket", conn, [this] {
+      return seastar::smp::submit_to(
+          socket->get_shard_id(), [this] {
+        socket->shutdown();
+      });
+    });
+  } else {
+    assert(socket->get_shard_id() == sid);
+    assert(!gate);
+    socket->shutdown();
+  }
 }
+template void FrameAssemblerV2::shutdown_socket<true>(crimson::common::Gated *);
+template void FrameAssemblerV2::shutdown_socket<false>(crimson::common::Gated *);
 
-seastar::future<> FrameAssemblerV2::replace_shutdown_socket(SocketRef &&new_socket)
+seastar::future<> FrameAssemblerV2::replace_shutdown_socket(SocketFRef &&new_socket)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
-  assert(socket->is_shutdown());
-  socket = nullptr;
-  auto old_socket = std::move(conn.socket);
+  assert(!is_socket_valid());
+  auto old_socket = move_socket();
+  auto old_socket_shard_id = old_socket->get_shard_id();
   set_socket(std::move(new_socket));
-  return old_socket->close(
-  ).then([sock = std::move(old_socket)] {});
+  return seastar::smp::submit_to(
+      old_socket_shard_id,
+      [old_socket = std::move(old_socket)]() mutable {
+    return old_socket->close(
+    ).then([sock = std::move(old_socket)] {});
+  });
 }
 
 seastar::future<> FrameAssemblerV2::close_shutdown_socket()
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
-  assert(socket->is_shutdown());
-  return socket->close();
+  assert(!is_socket_valid());
+  return seastar::smp::submit_to(
+      socket->get_shard_id(), [this] {
+    return socket->close();
+  });
 }
 
-seastar::future<Socket::tmp_buf>
+template <bool may_cross_core>
+seastar::future<ceph::bufferptr>
 FrameAssemblerV2::read_exactly(std::size_t bytes)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
-  if (unlikely(record_io)) {
-    return socket->read_exactly(bytes
-    ).then([this](auto bl) {
-      rxbuf.append(buffer::create(bl.share()));
-      return bl;
+  if constexpr (may_cross_core) {
+    assert(conn.get_messenger_shard_id() == sid);
+    return seastar::smp::submit_to(
+        socket->get_shard_id(), [this, bytes] {
+      return socket->read_exactly(bytes);
+    }).then([this](auto bptr) {
+      if (record_io) {
+        rxbuf.append(bptr);
+      }
+      return bptr;
     });
   } else {
+    assert(socket->get_shard_id() == sid);
     return socket->read_exactly(bytes);
-  };
+  }
 }
+template seastar::future<ceph::bufferptr> FrameAssemblerV2::read_exactly<true>(std::size_t);
+template seastar::future<ceph::bufferptr> FrameAssemblerV2::read_exactly<false>(std::size_t);
 
+template <bool may_cross_core>
 seastar::future<ceph::bufferlist>
 FrameAssemblerV2::read(std::size_t bytes)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
-  if (unlikely(record_io)) {
-    return socket->read(bytes
-    ).then([this](auto buf) {
-      rxbuf.append(buf);
+  if constexpr (may_cross_core) {
+    assert(conn.get_messenger_shard_id() == sid);
+    return seastar::smp::submit_to(
+        socket->get_shard_id(), [this, bytes] {
+      return socket->read(bytes);
+    }).then([this](auto buf) {
+      if (record_io) {
+        rxbuf.append(buf);
+      }
       return buf;
     });
   } else {
+    assert(socket->get_shard_id() == sid);
     return socket->read(bytes);
   }
 }
+template seastar::future<ceph::bufferlist> FrameAssemblerV2::read<true>(std::size_t);
+template seastar::future<ceph::bufferlist> FrameAssemblerV2::read<false>(std::size_t);
 
+template <bool may_cross_core>
 seastar::future<>
-FrameAssemblerV2::write(ceph::bufferlist &&buf)
+FrameAssemblerV2::write(ceph::bufferlist buf)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
-  if (unlikely(record_io)) {
-    txbuf.append(buf);
+  if constexpr (may_cross_core) {
+    assert(conn.get_messenger_shard_id() == sid);
+    if (record_io) {
+      txbuf.append(buf);
+    }
+    return seastar::smp::submit_to(
+        socket->get_shard_id(), [this, buf = std::move(buf)]() mutable {
+      return socket->write(std::move(buf));
+    });
+  } else {
+    assert(socket->get_shard_id() == sid);
+    return socket->write(std::move(buf));
   }
-  return socket->write(std::move(buf));
 }
+template seastar::future<> FrameAssemblerV2::write<true>(ceph::bufferlist);
+template seastar::future<> FrameAssemblerV2::write<false>(ceph::bufferlist);
 
+template <bool may_cross_core>
 seastar::future<>
 FrameAssemblerV2::flush()
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
-  return socket->flush();
+  if constexpr (may_cross_core) {
+    assert(conn.get_messenger_shard_id() == sid);
+    return seastar::smp::submit_to(
+        socket->get_shard_id(), [this] {
+      return socket->flush();
+    });
+  } else {
+    assert(socket->get_shard_id() == sid);
+    return socket->flush();
+  }
 }
+template seastar::future<> FrameAssemblerV2::flush<true>();
+template seastar::future<> FrameAssemblerV2::flush<false>();
 
+template <bool may_cross_core>
 seastar::future<>
-FrameAssemblerV2::write_flush(ceph::bufferlist &&buf)
+FrameAssemblerV2::write_flush(ceph::bufferlist buf)
 {
+  assert(seastar::this_shard_id() == sid);
   assert(has_socket());
-  if (unlikely(record_io)) {
-    txbuf.append(buf);
+  if constexpr (may_cross_core) {
+    assert(conn.get_messenger_shard_id() == sid);
+    if (unlikely(record_io)) {
+      txbuf.append(buf);
+    }
+    return seastar::smp::submit_to(
+        socket->get_shard_id(), [this, buf = std::move(buf)]() mutable {
+      return socket->write_flush(std::move(buf));
+    });
+  } else {
+    assert(socket->get_shard_id() == sid);
+    return socket->write_flush(std::move(buf));
   }
-  return socket->write_flush(std::move(buf));
 }
+template seastar::future<> FrameAssemblerV2::write_flush<true>(ceph::bufferlist);
+template seastar::future<> FrameAssemblerV2::write_flush<false>(ceph::bufferlist);
 
+template <bool may_cross_core>
 seastar::future<FrameAssemblerV2::read_main_t>
 FrameAssemblerV2::read_main_preamble()
 {
+  assert(seastar::this_shard_id() == sid);
   rx_preamble.clear();
-  return read_exactly(rx_frame_asm.get_preamble_onwire_len()
-  ).then([this](auto bl) {
+  return read_exactly<may_cross_core>(
+    rx_frame_asm.get_preamble_onwire_len()
+  ).then([this](auto bptr) {
+    rx_preamble.append(std::move(bptr));
+    Tag tag;
     try {
-      rx_preamble.append(buffer::create(std::move(bl)));
-      const Tag tag = rx_frame_asm.disassemble_preamble(rx_preamble);
-#ifdef UNIT_TESTS_BUILT
-      intercept_frame(tag, false);
-#endif
-      return read_main_t{tag, &rx_frame_asm};
+      tag = rx_frame_asm.disassemble_preamble(rx_preamble);
     } catch (FrameError& e) {
       logger().warn("{} read_main_preamble: {}", conn, e.what());
       throw std::system_error(make_error_code(crimson::net::error::negotiation_failure));
     }
+#ifdef UNIT_TESTS_BUILT
+    return intercept_frame(tag, false
+    ).then([this, tag] {
+      return read_main_t{tag, &rx_frame_asm};
+    });
+#else
+    return read_main_t{tag, &rx_frame_asm};
+#endif
   });
 }
+template seastar::future<FrameAssemblerV2::read_main_t> FrameAssemblerV2::read_main_preamble<true>();
+template seastar::future<FrameAssemblerV2::read_main_t> FrameAssemblerV2::read_main_preamble<false>();
 
+template <bool may_cross_core>
 seastar::future<FrameAssemblerV2::read_payload_t*>
 FrameAssemblerV2::read_frame_payload()
 {
+  assert(seastar::this_shard_id() == sid);
   rx_segments_data.clear();
   return seastar::do_until(
     [this] {
@@ -250,23 +398,23 @@ FrameAssemblerV2::read_frame_payload()
       }
       uint32_t onwire_len = rx_frame_asm.get_segment_onwire_len(seg_idx);
       // TODO: create aligned and contiguous buffer from socket
-      return read_exactly(onwire_len
-      ).then([this](auto tmp_bl) {
+      return read_exactly<may_cross_core>(onwire_len
+      ).then([this](auto bptr) {
         logger().trace("{} RECV({}) frame segment[{}]",
-                       conn, tmp_bl.size(), rx_segments_data.size());
+                       conn, bptr.length(), rx_segments_data.size());
         bufferlist segment;
-        segment.append(buffer::create(std::move(tmp_bl)));
+        segment.append(std::move(bptr));
         rx_segments_data.emplace_back(std::move(segment));
       });
     }
   ).then([this] {
-    return read_exactly(rx_frame_asm.get_epilogue_onwire_len());
-  }).then([this](auto bl) {
-    logger().trace("{} RECV({}) frame epilogue", conn, bl.size());
+    return read_exactly<may_cross_core>(rx_frame_asm.get_epilogue_onwire_len());
+  }).then([this](auto bptr) {
+    logger().trace("{} RECV({}) frame epilogue", conn, bptr.length());
     bool ok = false;
     try {
       bufferlist rx_epilogue;
-      rx_epilogue.append(buffer::create(std::move(bl)));
+      rx_epilogue.append(std::move(bptr));
       ok = rx_frame_asm.disassemble_segments(rx_preamble, rx_segments_data.data(), rx_epilogue);
     } catch (FrameError& e) {
       logger().error("read_frame_payload: {} {}", conn, e.what());
@@ -284,6 +432,8 @@ FrameAssemblerV2::read_frame_payload()
     return &rx_segments_data;
   });
 }
+template seastar::future<FrameAssemblerV2::read_payload_t*> FrameAssemblerV2::read_frame_payload<true>();
+template seastar::future<FrameAssemblerV2::read_payload_t*> FrameAssemblerV2::read_frame_payload<false>();
 
 void FrameAssemblerV2::log_main_preamble(const ceph::bufferlist &bl)
 {
@@ -299,4 +449,13 @@ FrameAssemblerV2Ref FrameAssemblerV2::create(SocketConnection &conn)
   return std::make_unique<FrameAssemblerV2>(conn);
 }
 
+void FrameAssemblerV2::clear()
+{
+  record_io = false;
+  rxbuf.clear();
+  txbuf.clear();
+  rx_preamble.clear();
+  rx_segments_data.clear();
+}
+
 } // namespace crimson::net
index 06c5cb25eee05fbc77affe2b45ab6e4abe412f67..9c89c144e80a1bf69964741be13a894065896fc5 100644 (file)
@@ -7,8 +7,13 @@
 #include "msg/async/crypto_onwire.h"
 #include "msg/async/compression_onwire.h"
 
+#include "crimson/common/gated.h"
 #include "crimson/net/Socket.h"
 
+#ifdef UNIT_TESTS_BUILT
+#include "Interceptor.h"
+#endif
+
 namespace crimson::net {
 
 class SocketConnection;
@@ -19,12 +24,22 @@ class FrameAssemblerV2 {
 public:
   FrameAssemblerV2(SocketConnection &conn);
 
-  ~FrameAssemblerV2() = default;
+  ~FrameAssemblerV2();
 
   FrameAssemblerV2(const FrameAssemblerV2 &) = delete;
 
   FrameAssemblerV2(FrameAssemblerV2 &&) = delete;
 
+  void set_shard_id(seastar::shard_id _sid) {
+    assert(seastar::this_shard_id() == sid);
+    clear();
+    sid = _sid;
+  }
+
+  seastar::shard_id get_shard_id() const {
+    return sid;
+  }
+
   void set_is_rev1(bool is_rev1);
 
   void create_session_stream_handlers(
@@ -38,7 +53,7 @@ public:
    */
 
   struct mover_t {
-    SocketRef socket;
+    SocketFRef socket;
     ceph::crypto::onwire::rxtx_t session_stream_handlers;
     ceph::compression::onwire::rxtx_t session_comp_handlers;
   };
@@ -66,13 +81,17 @@ public:
   // the socket exists and not shutdown
   bool is_socket_valid() const;
 
-  void set_socket(SocketRef &&);
+  seastar::shard_id get_socket_shard_id() const;
+
+  void set_socket(SocketFRef &&);
 
   void learn_socket_ephemeral_port_as_connector(uint16_t port);
 
-  void shutdown_socket();
+  // if may_cross_core == true, gate is required for cross-core shutdown
+  template <bool may_cross_core>
+  void shutdown_socket(crimson::common::Gated *gate);
 
-  seastar::future<> replace_shutdown_socket(SocketRef &&);
+  seastar::future<> replace_shutdown_socket(SocketFRef &&);
 
   seastar::future<> close_shutdown_socket();
 
@@ -80,15 +99,20 @@ public:
    * socket read and write interfaces
    */
 
-  seastar::future<Socket::tmp_buf> read_exactly(std::size_t bytes);
+  template <bool may_cross_core = true>
+  seastar::future<ceph::bufferptr> read_exactly(std::size_t bytes);
 
+  template <bool may_cross_core = true>
   seastar::future<ceph::bufferlist> read(std::size_t bytes);
 
-  seastar::future<> write(ceph::bufferlist &&);
+  template <bool may_cross_core = true>
+  seastar::future<> write(ceph::bufferlist);
 
+  template <bool may_cross_core = true>
   seastar::future<> flush();
 
-  seastar::future<> write_flush(ceph::bufferlist &&);
+  template <bool may_cross_core = true>
+  seastar::future<> write_flush(ceph::bufferlist);
 
   /*
    * frame read and write interfaces
@@ -99,46 +123,101 @@ public:
     ceph::msgr::v2::Tag tag;
     const ceph::msgr::v2::FrameAssembler *rx_frame_asm;
   };
+  template <bool may_cross_core = true>
   seastar::future<read_main_t> read_main_preamble();
 
   /// may throw negotiation_failure as fault
   using read_payload_t = ceph::msgr::v2::segment_bls_t;
   // FIXME: read_payload_t cannot be no-throw move constructible
+  template <bool may_cross_core = true>
   seastar::future<read_payload_t*> read_frame_payload();
 
   template <class F>
   ceph::bufferlist get_buffer(F &tx_frame) {
-#ifdef UNIT_TESTS_BUILT
-    intercept_frame(F::tag, true);
-#endif
+    assert(seastar::this_shard_id() == sid);
     auto bl = tx_frame.get_buffer(tx_frame_asm);
     log_main_preamble(bl);
     return bl;
   }
 
-  template <class F>
+  template <class F, bool may_cross_core = true>
   seastar::future<> write_flush_frame(F &tx_frame) {
+    assert(seastar::this_shard_id() == sid);
     auto bl = get_buffer(tx_frame);
-    return write_flush(std::move(bl));
+#ifdef UNIT_TESTS_BUILT
+    return intercept_frame(F::tag, true
+    ).then([this, bl=std::move(bl)]() mutable {
+      return write_flush<may_cross_core>(std::move(bl));
+    });
+#else
+    return write_flush<may_cross_core>(std::move(bl));
+#endif
   }
 
   static FrameAssemblerV2Ref create(SocketConnection &conn);
 
-private:
-  bool has_socket() const;
+#ifdef UNIT_TESTS_BUILT
+  seastar::future<> intercept_frames(
+      std::vector<ceph::msgr::v2::Tag> tags,
+      bool is_write) {
+    auto type = is_write ? bp_type_t::WRITE : bp_type_t::READ;
+    std::vector<Breakpoint> bps;
+    for (auto &tag : tags) {
+      bps.emplace_back(Breakpoint{tag, type});
+    }
+    return intercept_frames(bps, type);
+  }
 
-  void log_main_preamble(const ceph::bufferlist &bl);
+  seastar::future<> intercept_frame(
+      ceph::msgr::v2::Tag tag,
+      bool is_write) {
+    auto type = is_write ? bp_type_t::WRITE : bp_type_t::READ;
+    std::vector<Breakpoint> bps;
+    bps.emplace_back(Breakpoint{tag, type});
+    return intercept_frames(bps, type);
+  }
+
+  seastar::future<> intercept_frame(
+      custom_bp_t bp,
+      bool is_write) {
+    auto type = is_write ? bp_type_t::WRITE : bp_type_t::READ;
+    std::vector<Breakpoint> bps;
+    bps.emplace_back(Breakpoint{bp});
+    return intercept_frames(bps, type);
+  }
+#endif
 
+private:
 #ifdef UNIT_TESTS_BUILT
-  void intercept_frame(ceph::msgr::v2::Tag, bool is_write);
+  seastar::future<> intercept_frames(
+      std::vector<Breakpoint> bps,
+      bp_type_t type);
 #endif
 
+  bool has_socket() const;
+
+  SocketFRef move_socket();
+
+  void clear();
+
+  void log_main_preamble(const ceph::bufferlist &bl);
+
   SocketConnection &conn;
 
-  Socket *socket = nullptr;
+  SocketFRef socket;
+
+  // checking Socket::is_shutdown() synchronously is impossible when sid is
+  // different from the socket sid.
+  bool is_socket_shutdown = false;
+
+  // the current working shard, can be messenger or socket shard.
+  // if is messenger shard, should call interfaces with may_cross_core = true.
+  seastar::shard_id sid;
 
   /*
    * auth signature
+   *
+   * only in the messenger core
    */
 
   bool record_io = false;
@@ -166,6 +245,10 @@ private:
     &session_stream_handlers, is_rev1, common::local_conf()->ms_crc_data,
     &session_comp_handlers};
 
+  // in the messenger core during handshake,
+  // and in the socket core during open,
+  // must be cleaned before switching cores.
+
   ceph::bufferlist rx_preamble;
 
   read_payload_t rx_segments_data;
index 3eb57ef9781307d83ca4dd7efdded71f24116362..2b159514193c7f23b7c0faff3c872d0cac9267a8 100644 (file)
@@ -39,8 +39,6 @@ using ConnectionLRef = seastar::shared_ptr<Connection>;
 using ConnectionFRef = seastar::foreign_ptr<ConnectionLRef>;
 using ConnectionRef = ::crimson::local_shared_foreign_ptr<ConnectionLRef>;
 
-class SocketConnection;
-
 class Dispatcher;
 class ChainedDispatchers;
 constexpr std::size_t NUM_DISPATCHERS = 4u;
@@ -49,4 +47,6 @@ using dispatchers_t = boost::container::small_vector<Dispatcher*, NUM_DISPATCHER
 class Messenger;
 using MessengerRef = seastar::shared_ptr<Messenger>;
 
+using MessageFRef = seastar::foreign_ptr<MessageURef>;
+
 } // namespace crimson::net
index 41ec31f3755768d538ea8c66c0689c518d3d8551..35b74e24369c4d6aa9db657ff052b5c8c6412b59 100644 (file)
@@ -45,16 +45,21 @@ enum class bp_action_t {
 class socket_blocker {
   std::optional<seastar::abort_source> p_blocked;
   std::optional<seastar::abort_source> p_unblocked;
+  const seastar::shard_id primary_sid;
 
  public:
+  socket_blocker() : primary_sid{seastar::this_shard_id()} {}
+
   seastar::future<> wait_blocked() {
+    ceph_assert(seastar::this_shard_id() == primary_sid);
     ceph_assert(!p_blocked);
     if (p_unblocked) {
       return seastar::make_ready_future<>();
     } else {
       p_blocked = seastar::abort_source();
-      return seastar::sleep_abortable(std::chrono::seconds(10),
-                                     *p_blocked).then([] {
+      return seastar::sleep_abortable(
+        std::chrono::seconds(10), *p_blocked
+      ).then([] {
         throw std::runtime_error(
             "Timeout (10s) in socket_blocker::wait_blocked()");
       }).handle_exception_type([] (const seastar::sleep_aborted& e) {
@@ -64,21 +69,25 @@ class socket_blocker {
   }
 
   seastar::future<> block() {
-    if (p_blocked) {
-      p_blocked->request_abort();
-      p_blocked = std::nullopt;
-    }
-    ceph_assert(!p_unblocked);
-    p_unblocked = seastar::abort_source();
-    return seastar::sleep_abortable(std::chrono::seconds(10),
-                                   *p_unblocked).then([] {
-      ceph_abort("Timeout (10s) in socket_blocker::block()");
-    }).handle_exception_type([] (const seastar::sleep_aborted& e) {
-      // wait done!
+    return seastar::smp::submit_to(primary_sid, [this] {
+      if (p_blocked) {
+        p_blocked->request_abort();
+        p_blocked = std::nullopt;
+      }
+      ceph_assert(!p_unblocked);
+      p_unblocked = seastar::abort_source();
+      return seastar::sleep_abortable(
+        std::chrono::seconds(10), *p_unblocked
+      ).then([] {
+        ceph_abort("Timeout (10s) in socket_blocker::block()");
+      }).handle_exception_type([] (const seastar::sleep_aborted& e) {
+        // wait done!
+      });
     });
   }
 
   void unblock() {
+    ceph_assert(seastar::this_shard_id() == primary_sid);
     ceph_assert(!p_blocked);
     ceph_assert(p_unblocked);
     p_unblocked->request_abort();
@@ -116,11 +125,13 @@ struct Breakpoint {
 struct Interceptor {
   socket_blocker blocker;
   virtual ~Interceptor() {}
-  virtual void register_conn(SocketConnection& conn) = 0;
-  virtual void register_conn_ready(SocketConnection& conn) = 0;
-  virtual void register_conn_closed(SocketConnection& conn) = 0;
-  virtual void register_conn_replaced(SocketConnection& conn) = 0;
-  virtual bp_action_t intercept(SocketConnection& conn, Breakpoint bp) = 0;
+  virtual void register_conn(ConnectionRef) = 0;
+  virtual void register_conn_ready(ConnectionRef) = 0;
+  virtual void register_conn_closed(ConnectionRef) = 0;
+  virtual void register_conn_replaced(ConnectionRef) = 0;
+
+  virtual seastar::future<bp_action_t>
+  intercept(Connection&, std::vector<Breakpoint> bp) = 0;
 };
 
 } // namespace crimson::net
index aab476f7a4b020ae8de86c5199cfce21118b89c7..1af1985897fdaea5bb99434b5533ede1cba97c83 100644 (file)
@@ -9,9 +9,11 @@ namespace crimson::net {
 MessengerRef
 Messenger::create(const entity_name_t& name,
                   const std::string& lname,
-                  const uint64_t nonce)
+                  uint64_t nonce,
+                  bool dispatch_only_on_this_shard)
 {
-  return seastar::make_shared<SocketMessenger>(name, lname, nonce);
+  return seastar::make_shared<SocketMessenger>(
+      name, lname, nonce, dispatch_only_on_this_shard);
 }
 
 } // namespace crimson::net
index e2fba32578b7959f6ef7f6eaa42d9a1001aeb37f..74df062d8de07984c8b4e91177917cb6df4902c8 100644 (file)
@@ -108,7 +108,8 @@ public:
   static MessengerRef
   create(const entity_name_t& name,
          const std::string& lname,
-         const uint64_t nonce);
+         uint64_t nonce,
+         bool dispatch_only_on_this_shard);
 
 #ifdef UNIT_TESTS_BUILT
   virtual void set_interceptor(Interceptor *) = 0;
index 95b756637f4e8a8de6ab2e2d49d3a2c9e65aa2f6..55b669384ed3bfd588e97192b00030217c48e4df 100644 (file)
 #include "Errors.h"
 #include "SocketMessenger.h"
 
-#ifdef UNIT_TESTS_BUILT
-#include "Interceptor.h"
-#endif
-
 using namespace ceph::msgr::v2;
 using crimson::common::local_conf;
-using io_state_t = crimson::net::IOHandler::io_state_t;
-using io_stat_printer = crimson::net::IOHandler::io_stat_printer;
 
 namespace {
 
@@ -103,26 +97,6 @@ inline uint64_t generate_client_cookie() {
 
 namespace crimson::net {
 
-#ifdef UNIT_TESTS_BUILT
-// should be consistent to intercept_frame() in FrameAssemblerV2.cc
-void intercept(Breakpoint bp,
-               bp_type_t type,
-               SocketConnection& conn,
-               Interceptor *interceptor,
-               SocketRef& socket) {
-  if (interceptor) {
-    auto action = interceptor->intercept(conn, Breakpoint(bp));
-    socket->set_trap(type, action, &interceptor->blocker);
-  }
-}
-
-#define INTERCEPT_CUSTOM(bp, type)       \
-intercept({bp}, type, conn,              \
-          conn.interceptor, conn.socket)
-#else
-#define INTERCEPT_CUSTOM(bp, type)
-#endif
-
 seastar::future<> ProtocolV2::Timer::backoff(double seconds)
 {
   logger().warn("{} waiting {} seconds ...", conn, seconds);
@@ -146,13 +120,16 @@ ProtocolV2::ProtocolV2(SocketConnection& conn,
     frame_assembler{FrameAssemblerV2::create(conn)},
     auth_meta{seastar::make_lw_shared<AuthConnectionMeta>()},
     protocol_timer{conn}
-{}
+{
+  io_states = io_handler.get_states();
+}
 
 ProtocolV2::~ProtocolV2() {}
 
 void ProtocolV2::start_connect(const entity_addr_t& _peer_addr,
                                const entity_name_t& _peer_name)
 {
+  assert(seastar::this_shard_id() == conn.get_messenger_shard_id());
   ceph_assert(state == state_t::NONE);
   ceph_assert(!gate.is_closed());
   conn.peer_addr = _peer_addr;
@@ -170,9 +147,10 @@ void ProtocolV2::start_connect(const entity_addr_t& _peer_addr,
   execute_connecting();
 }
 
-void ProtocolV2::start_accept(SocketRef&& new_socket,
+void ProtocolV2::start_accept(SocketFRef&& new_socket,
                               const entity_addr_t& _peer_addr)
 {
+  assert(seastar::this_shard_id() == conn.get_messenger_shard_id());
   ceph_assert(state == state_t::NONE);
   // until we know better
   conn.target_addr = _peer_addr;
@@ -182,12 +160,22 @@ void ProtocolV2::start_accept(SocketRef&& new_socket,
   logger().info("{} ProtocolV2::start_accept(): target_addr={}", conn, _peer_addr);
   messenger.accept_conn(
     seastar::static_pointer_cast<SocketConnection>(conn.shared_from_this()));
+
+  auto cc_seq = crosscore.prepare_submit();
+  gate.dispatch_in_background("set_accepted_sid", conn, [this, cc_seq] {
+    return io_handler.set_accepted_sid(
+        cc_seq,
+        frame_assembler->get_socket_shard_id(),
+        seastar::make_foreign(conn.shared_from_this()));
+  });
+
   execute_accepting();
 }
 
-void ProtocolV2::trigger_state(state_t new_state, io_state_t new_io_state, bool reentrant)
+void ProtocolV2::trigger_state_phase1(state_t new_state)
 {
-  if (!reentrant && new_state == state) {
+  ceph_assert_always(!gate.is_closed());
+  if (new_state == state) {
     logger().error("{} is not allowed to re-trigger state {}",
                    conn, get_state_name(state));
     ceph_abort();
@@ -199,32 +187,84 @@ void ProtocolV2::trigger_state(state_t new_state, io_state_t new_io_state, bool
   }
   logger().debug("{} TRIGGER {}, was {}",
                  conn, get_state_name(new_state), get_state_name(state));
-  auto pre_state = state;
-  if (pre_state == state_t::READY) {
-    assert(!gate.is_closed());
-    ceph_assert_always(!exit_io.has_value());
-    exit_io = seastar::shared_promise<>();
+
+  if (state == state_t::READY) {
+    // from READY
+    ceph_assert_always(!need_exit_io);
+    ceph_assert_always(!pr_exit_io.has_value());
+    need_exit_io = true;
+    pr_exit_io = seastar::shared_promise<>();
   }
+
+  if (new_state == state_t::STANDBY && !conn.policy.server) {
+    need_notify_out = true;
+  } else {
+    need_notify_out = false;
+  }
+
   state = new_state;
+}
+
+void ProtocolV2::trigger_state_phase2(
+    state_t new_state, io_state_t new_io_state)
+{
+  ceph_assert_always(new_state == state);
+  ceph_assert_always(!gate.is_closed());
+  ceph_assert_always(!pr_switch_io_shard.has_value());
+
+  FrameAssemblerV2Ref fa;
   if (new_state == state_t::READY) {
-    // I'm not responsible to shutdown the socket at READY
-    is_socket_valid = false;
-    io_handler.set_io_state(new_io_state, std::move(frame_assembler));
+    assert(new_io_state == io_state_t::open);
+    assert(io_handler.get_shard_id() ==
+           frame_assembler->get_socket_shard_id());
+    frame_assembler->set_shard_id(io_handler.get_shard_id());
+    fa = std::move(frame_assembler);
   } else {
-    io_handler.set_io_state(new_io_state, nullptr);
+    assert(new_io_state != io_state_t::open);
   }
 
-  /*
-   * not atomic below
-   */
+  auto cc_seq = crosscore.prepare_submit();
+  logger().debug("{} send {} IOHandler::set_io_state(): new_state={}, new_io_state={}, "
+                 "fa={}, set_notify_out={}",
+                 conn, cc_seq, get_state_name(new_state), new_io_state,
+                 fa ? fmt::format("(sid={})", fa->get_shard_id()) : "N/A",
+                 need_notify_out);
+  gate.dispatch_in_background(
+      "set_io_state", conn,
+      [this, cc_seq, new_io_state, fa=std::move(fa)]() mutable {
+    return seastar::smp::submit_to(
+        io_handler.get_shard_id(),
+        [this, cc_seq, new_io_state,
+         fa=std::move(fa), set_notify_out=need_notify_out]() mutable {
+      return io_handler.set_io_state(
+          cc_seq, new_io_state, std::move(fa), set_notify_out);
+    });
+  });
 
-  if (pre_state == state_t::READY) {
-    gate.dispatch_in_background("exit_io", conn, [this] {
-      return io_handler.wait_io_exit_dispatching(
-      ).then([this](FrameAssemblerV2Ref fa) {
-        frame_assembler = std::move(fa);
-        exit_io->set_value();
-        exit_io = std::nullopt;
+  if (need_exit_io) {
+    // from READY
+    auto cc_seq = crosscore.prepare_submit();
+    logger().debug("{} send {} IOHandler::wait_io_exit_dispatching() ...",
+                   conn, cc_seq);
+    assert(pr_exit_io.has_value());
+    assert(new_io_state != io_state_t::open);
+    need_exit_io = false;
+    gate.dispatch_in_background("exit_io", conn, [this, cc_seq] {
+      return seastar::smp::submit_to(
+          io_handler.get_shard_id(), [this, cc_seq] {
+        return io_handler.wait_io_exit_dispatching(cc_seq);
+      }).then([this, cc_seq](auto ret) {
+        logger().debug("{} finish {} IOHandler::wait_io_exit_dispatching(), {}",
+                       conn, cc_seq, ret.io_states);
+        frame_assembler = std::move(ret.frame_assembler);
+        assert(seastar::this_shard_id() == conn.get_messenger_shard_id());
+        ceph_assert_always(
+            seastar::this_shard_id() == frame_assembler->get_shard_id());
+        ceph_assert_always(!frame_assembler->is_socket_valid());
+        assert(!need_exit_io);
+        io_states = ret.io_states;
+        pr_exit_io->set_value();
+        pr_exit_io = std::nullopt;
       });
     });
   }
@@ -281,7 +321,7 @@ void ProtocolV2::fault(
   if (likely(has_socket)) {
     if (likely(is_socket_valid)) {
       ceph_assert_always(state != state_t::READY);
-      frame_assembler->shutdown_socket();
+      frame_assembler->shutdown_socket<true>(&gate);
       is_socket_valid = false;
     } else {
       ceph_assert_always(state != state_t::ESTABLISHING);
@@ -292,20 +332,20 @@ void ProtocolV2::fault(
   }
 
   if (conn.policy.server ||
-      (conn.policy.standby && !io_handler.is_out_queued_or_sent())) {
+      (conn.policy.standby && !io_states.is_out_queued_or_sent())) {
     if (conn.policy.server) {
       logger().info("{} protocol {} {} fault as server, going to STANDBY {} -- {}",
                     conn,
                     get_state_name(state),
                     where,
-                    io_stat_printer{io_handler},
+                    io_states,
                     e_what);
     } else {
       logger().info("{} protocol {} {} fault with nothing to send, going to STANDBY {} -- {}",
                     conn,
                     get_state_name(state),
                     where,
-                    io_stat_printer{io_handler},
+                    io_states,
                     e_what);
     }
     execute_standby();
@@ -315,7 +355,7 @@ void ProtocolV2::fault(
                   conn,
                   get_state_name(state),
                   where,
-                  io_stat_printer{io_handler},
+                  io_states,
                   e_what);
     execute_wait(false);
   } else {
@@ -325,7 +365,7 @@ void ProtocolV2::fault(
                   conn,
                   get_state_name(state),
                   where,
-                  io_stat_printer{io_handler},
+                  io_states,
                   e_what);
     execute_connecting();
   }
@@ -339,7 +379,19 @@ void ProtocolV2::reset_session(bool full)
     client_cookie = generate_client_cookie();
     peer_global_seq = 0;
   }
-  io_handler.reset_session(full);
+
+  auto cc_seq = crosscore.prepare_submit();
+  logger().debug("{} send {} IOHandler::reset_session({})",
+                 conn, cc_seq, full);
+  io_states.reset_session(full);
+  gate.dispatch_in_background(
+      "reset_session", conn, [this, cc_seq, full] {
+    return seastar::smp::submit_to(
+        io_handler.get_shard_id(), [this, cc_seq, full] {
+      return io_handler.reset_session(cc_seq, full);
+    });
+  });
+  // user can make changes
 }
 
 seastar::future<std::tuple<entity_type_t, entity_addr_t>>
@@ -361,98 +413,121 @@ ProtocolV2::banner_exchange(bool is_connect)
                  CRIMSON_MSGR2_SUPPORTED_FEATURES,
                  CEPH_MSGR2_REQUIRED_FEATURES,
                  CEPH_BANNER_V2_PREFIX);
-  INTERCEPT_CUSTOM(custom_bp_t::BANNER_WRITE, bp_type_t::WRITE);
-  return frame_assembler->write_flush(std::move(bl)).then([this] {
-      // 2. read peer banner
-      unsigned banner_len = strlen(CEPH_BANNER_V2_PREFIX) + sizeof(ceph_le16);
-      INTERCEPT_CUSTOM(custom_bp_t::BANNER_READ, bp_type_t::READ);
-      return frame_assembler->read_exactly(banner_len); // or read exactly?
-    }).then([this] (auto bl) {
-      // 3. process peer banner and read banner_payload
-      unsigned banner_prefix_len = strlen(CEPH_BANNER_V2_PREFIX);
-      logger().debug("{} RECV({}) banner: \"{}\"",
-                     conn, bl.size(),
-                     std::string((const char*)bl.get(), banner_prefix_len));
-
-      if (memcmp(bl.get(), CEPH_BANNER_V2_PREFIX, banner_prefix_len) != 0) {
-        if (memcmp(bl.get(), CEPH_BANNER, strlen(CEPH_BANNER)) == 0) {
-          logger().warn("{} peer is using V1 protocol", conn);
-        } else {
-          logger().warn("{} peer sent bad banner", conn);
-        }
-        abort_in_fault();
+#ifdef UNIT_TESTS_BUILT
+  return frame_assembler->intercept_frame(custom_bp_t::BANNER_WRITE, true
+  ).then([this, bl=std::move(bl)]() mutable {
+    return frame_assembler->write_flush(std::move(bl));
+  }
+#else
+  return frame_assembler->write_flush(std::move(bl)
+#endif
+  ).then([this] {
+    // 2. read peer banner
+    unsigned banner_len = strlen(CEPH_BANNER_V2_PREFIX) + sizeof(ceph_le16);
+#ifdef UNIT_TESTS_BUILT
+    return frame_assembler->intercept_frame(custom_bp_t::BANNER_READ, false
+    ).then([this, banner_len] {
+      return frame_assembler->read_exactly(banner_len);
+    });
+#else
+    return frame_assembler->read_exactly(banner_len);
+#endif
+  }).then([this](auto bptr) {
+    // 3. process peer banner and read banner_payload
+    unsigned banner_prefix_len = strlen(CEPH_BANNER_V2_PREFIX);
+    logger().debug("{} RECV({}) banner: \"{}\"",
+                   conn, bptr.length(),
+                   std::string(bptr.c_str(), banner_prefix_len));
+
+    if (memcmp(bptr.c_str(), CEPH_BANNER_V2_PREFIX, banner_prefix_len) != 0) {
+      if (memcmp(bptr.c_str(), CEPH_BANNER, strlen(CEPH_BANNER)) == 0) {
+        logger().warn("{} peer is using V1 protocol", conn);
+      } else {
+        logger().warn("{} peer sent bad banner", conn);
       }
-      bl.trim_front(banner_prefix_len);
+      abort_in_fault();
+    }
 
-      uint16_t payload_len;
-      bufferlist buf;
-      buf.append(buffer::create(std::move(bl)));
-      auto ti = buf.cbegin();
-      try {
-        decode(payload_len, ti);
-      } catch (const buffer::error &e) {
-        logger().warn("{} decode banner payload len failed", conn);
-        abort_in_fault();
-      }
-      logger().debug("{} GOT banner: payload_len={}", conn, payload_len);
-      INTERCEPT_CUSTOM(custom_bp_t::BANNER_PAYLOAD_READ, bp_type_t::READ);
+    bptr.set_offset(bptr.offset() + banner_prefix_len);
+    bptr.set_length(bptr.length() - banner_prefix_len);
+    assert(bptr.length() == sizeof(ceph_le16));
+
+    uint16_t payload_len;
+    bufferlist buf;
+    buf.append(std::move(bptr));
+    auto ti = buf.cbegin();
+    try {
+      decode(payload_len, ti);
+    } catch (const buffer::error &e) {
+      logger().warn("{} decode banner payload len failed", conn);
+      abort_in_fault();
+    }
+    logger().debug("{} GOT banner: payload_len={}", conn, payload_len);
+#ifdef UNIT_TESTS_BUILT
+    return frame_assembler->intercept_frame(
+      custom_bp_t::BANNER_PAYLOAD_READ, false
+    ).then([this, payload_len] {
       return frame_assembler->read(payload_len);
-    }).then([this, is_connect] (bufferlist bl) {
-      // 4. process peer banner_payload and send HelloFrame
-      auto p = bl.cbegin();
-      uint64_t _peer_supported_features;
-      uint64_t _peer_required_features;
-      try {
-        decode(_peer_supported_features, p);
-        decode(_peer_required_features, p);
-      } catch (const buffer::error &e) {
-        logger().warn("{} decode banner payload failed", conn);
-        abort_in_fault();
-      }
-      logger().debug("{} RECV({}) banner features: supported={} required={}",
-                     conn, bl.length(),
-                     _peer_supported_features, _peer_required_features);
-
-      // Check feature bit compatibility
-      uint64_t supported_features = CRIMSON_MSGR2_SUPPORTED_FEATURES;
-      uint64_t required_features = CEPH_MSGR2_REQUIRED_FEATURES;
-      if ((required_features & _peer_supported_features) != required_features) {
-        logger().error("{} peer does not support all required features"
-                       " required={} peer_supported={}",
-                       conn, required_features, _peer_supported_features);
-        ABORT_IN_CLOSE(is_connect);
-      }
-      if ((supported_features & _peer_required_features) != _peer_required_features) {
-        logger().error("{} we do not support all peer required features"
-                       " peer_required={} supported={}",
-                       conn, _peer_required_features, supported_features);
-        ABORT_IN_CLOSE(is_connect);
-      }
-      peer_supported_features = _peer_supported_features;
-      bool is_rev1 = HAVE_MSGR2_FEATURE(peer_supported_features, REVISION_1);
-      frame_assembler->set_is_rev1(is_rev1);
-
-      auto hello = HelloFrame::Encode(messenger.get_mytype(),
-                                      conn.target_addr);
-      logger().debug("{} WRITE HelloFrame: my_type={}, peer_addr={}",
-                     conn, ceph_entity_type_name(messenger.get_mytype()),
-                     conn.target_addr);
-      return frame_assembler->write_flush_frame(hello);
-    }).then([this] {
-      //5. read peer HelloFrame
-      return frame_assembler->read_main_preamble();
-    }).then([this](auto ret) {
-      expect_tag(Tag::HELLO, ret.tag, conn, "read_hello_frame");
-      return frame_assembler->read_frame_payload();
-    }).then([this](auto payload) {
-      // 6. process peer HelloFrame
-      auto hello = HelloFrame::Decode(payload->back());
-      logger().debug("{} GOT HelloFrame: my_type={} peer_addr={}",
-                     conn, ceph_entity_type_name(hello.entity_type()),
-                     hello.peer_addr());
-      return seastar::make_ready_future<std::tuple<entity_type_t, entity_addr_t>>(
-        std::make_tuple(hello.entity_type(), hello.peer_addr()));
     });
+#else
+    return frame_assembler->read(payload_len);
+#endif
+  }).then([this, is_connect] (bufferlist bl) {
+    // 4. process peer banner_payload and send HelloFrame
+    auto p = bl.cbegin();
+    uint64_t _peer_supported_features;
+    uint64_t _peer_required_features;
+    try {
+      decode(_peer_supported_features, p);
+      decode(_peer_required_features, p);
+    } catch (const buffer::error &e) {
+      logger().warn("{} decode banner payload failed", conn);
+      abort_in_fault();
+    }
+    logger().debug("{} RECV({}) banner features: supported={} required={}",
+                   conn, bl.length(),
+                   _peer_supported_features, _peer_required_features);
+
+    // Check feature bit compatibility
+    uint64_t supported_features = CRIMSON_MSGR2_SUPPORTED_FEATURES;
+    uint64_t required_features = CEPH_MSGR2_REQUIRED_FEATURES;
+    if ((required_features & _peer_supported_features) != required_features) {
+      logger().error("{} peer does not support all required features"
+                     " required={} peer_supported={}",
+                     conn, required_features, _peer_supported_features);
+      ABORT_IN_CLOSE(is_connect);
+    }
+    if ((supported_features & _peer_required_features) != _peer_required_features) {
+      logger().error("{} we do not support all peer required features"
+                     " peer_required={} supported={}",
+                     conn, _peer_required_features, supported_features);
+      ABORT_IN_CLOSE(is_connect);
+    }
+    peer_supported_features = _peer_supported_features;
+    bool is_rev1 = HAVE_MSGR2_FEATURE(peer_supported_features, REVISION_1);
+    frame_assembler->set_is_rev1(is_rev1);
+
+    auto hello = HelloFrame::Encode(messenger.get_mytype(),
+                                    conn.target_addr);
+    logger().debug("{} WRITE HelloFrame: my_type={}, peer_addr={}",
+                   conn, ceph_entity_type_name(messenger.get_mytype()),
+                   conn.target_addr);
+    return frame_assembler->write_flush_frame(hello);
+  }).then([this] {
+    //5. read peer HelloFrame
+    return frame_assembler->read_main_preamble();
+  }).then([this](auto ret) {
+    expect_tag(Tag::HELLO, ret.tag, conn, "read_hello_frame");
+    return frame_assembler->read_frame_payload();
+  }).then([this](auto payload) {
+    // 6. process peer HelloFrame
+    auto hello = HelloFrame::Decode(payload->back());
+    logger().debug("{} GOT HelloFrame: my_type={} peer_addr={}",
+                   conn, ceph_entity_type_name(hello.entity_type()),
+                   hello.peer_addr());
+    return seastar::make_ready_future<std::tuple<entity_type_t, entity_addr_t>>(
+      std::make_tuple(hello.entity_type(), hello.peer_addr()));
+  });
 }
 
 // CONNECTING state
@@ -616,8 +691,25 @@ ProtocolV2::client_connect()
       case Tag::SERVER_IDENT:
         return frame_assembler->read_frame_payload(
         ).then([this](auto payload) {
+          if (unlikely(state != state_t::CONNECTING)) {
+            logger().debug("{} triggered {} at receiving SERVER_IDENT",
+                           conn, get_state_name(state));
+            abort_protocol();
+          }
+
           // handle_server_ident() logic
-          io_handler.requeue_out_sent();
+          auto cc_seq = crosscore.prepare_submit();
+          logger().debug("{} send {} IOHandler::requeue_out_sent()",
+                         conn, cc_seq);
+          io_states.requeue_out_sent();
+          gate.dispatch_in_background(
+              "requeue_out_sent", conn, [this, cc_seq] {
+            return seastar::smp::submit_to(
+                io_handler.get_shard_id(), [this, cc_seq] {
+              return io_handler.requeue_out_sent(cc_seq);
+            });
+          });
+
           auto server_ident = ServerIdentFrame::Decode(payload->back());
           logger().debug("{} GOT ServerIdentFrame:"
                          " addrs={}, gid={}, gs={},"
@@ -693,12 +785,12 @@ ProtocolV2::client_reconnect()
                                           server_cookie,
                                           global_seq,
                                           connect_seq,
-                                          io_handler.get_in_seq());
+                                          io_states.in_seq);
   logger().debug("{} WRITE ReconnectFrame: addrs={}, client_cookie={},"
                  " server_cookie={}, gs={}, cs={}, in_seq={}",
                  conn, messenger.get_myaddrs(),
                  client_cookie, server_cookie,
-                 global_seq, connect_seq, io_handler.get_in_seq());
+                 global_seq, connect_seq, io_states.in_seq);
   return frame_assembler->write_flush_frame(reconnect).then([this] {
     return frame_assembler->read_main_preamble();
   }).then([this](auto ret) {
@@ -736,7 +828,10 @@ ProtocolV2::client_reconnect()
           // handle_session_reset() logic
           auto reset = ResetFrame::Decode(payload->back());
           logger().warn("{} GOT ResetFrame: full={}", conn, reset.full());
+
           reset_session(reset.full());
+          // user can make changes
+
           return client_connect();
         });
       case Tag::WAIT:
@@ -744,11 +839,29 @@ ProtocolV2::client_reconnect()
       case Tag::SESSION_RECONNECT_OK:
         return frame_assembler->read_frame_payload(
         ).then([this](auto payload) {
+          if (unlikely(state != state_t::CONNECTING)) {
+            logger().debug("{} triggered {} at receiving RECONNECT_OK",
+                           conn, get_state_name(state));
+            abort_protocol();
+          }
+
           // handle_reconnect_ok() logic
           auto reconnect_ok = ReconnectOkFrame::Decode(payload->back());
-          logger().debug("{} GOT ReconnectOkFrame: msg_seq={}",
-                         conn, reconnect_ok.msg_seq());
-          io_handler.requeue_out_sent_up_to(reconnect_ok.msg_seq());
+          auto cc_seq = crosscore.prepare_submit();
+          logger().debug("{} GOT ReconnectOkFrame: msg_seq={}, "
+                         "send {} IOHandler::requeue_out_sent_up_to()",
+                         conn, reconnect_ok.msg_seq(), cc_seq);
+
+          io_states.requeue_out_sent_up_to();
+          auto msg_seq = reconnect_ok.msg_seq();
+          gate.dispatch_in_background(
+              "requeue_out_reconnecting", conn, [this, cc_seq, msg_seq] {
+            return seastar::smp::submit_to(
+                io_handler.get_shard_id(), [this, cc_seq, msg_seq] {
+              return io_handler.requeue_out_sent_up_to(cc_seq, msg_seq);
+            });
+          });
+
           return seastar::make_ready_future<next_step_t>(next_step_t::ready);
         });
       default: {
@@ -762,148 +875,179 @@ ProtocolV2::client_reconnect()
 void ProtocolV2::execute_connecting()
 {
   ceph_assert_always(!is_socket_valid);
-  trigger_state(state_t::CONNECTING, io_state_t::delay, false);
+  trigger_state(state_t::CONNECTING, io_state_t::delay);
   gated_execute("execute_connecting", conn, [this] {
-      global_seq = messenger.get_global_seq();
-      assert(client_cookie != 0);
-      if (!conn.policy.lossy && server_cookie != 0) {
-        ++connect_seq;
-        logger().debug("{} UPDATE: gs={}, cs={} for reconnect",
-                       conn, global_seq, connect_seq);
-      } else { // conn.policy.lossy || server_cookie == 0
-        assert(connect_seq == 0);
-        assert(server_cookie == 0);
-        logger().debug("{} UPDATE: gs={} for connect", conn, global_seq);
-      }
-      return wait_exit_io().then([this] {
+    global_seq = messenger.get_global_seq();
+    assert(client_cookie != 0);
+    if (!conn.policy.lossy && server_cookie != 0) {
+      ++connect_seq;
+      logger().debug("{} UPDATE: gs={}, cs={} for reconnect",
+                     conn, global_seq, connect_seq);
+    } else { // conn.policy.lossy || server_cookie == 0
+      assert(connect_seq == 0);
+      assert(server_cookie == 0);
+      logger().debug("{} UPDATE: gs={} for connect", conn, global_seq);
+    }
+    return wait_exit_io().then([this] {
 #ifdef UNIT_TESTS_BUILT
-          // process custom_bp_t::SOCKET_CONNECTING
-          // supports CONTINUE/FAULT/BLOCK
-          if (conn.interceptor) {
-            auto action = conn.interceptor->intercept(
-                conn, {custom_bp_t::SOCKET_CONNECTING});
-            switch (action) {
-            case bp_action_t::CONTINUE:
-              return seastar::now();
-            case bp_action_t::FAULT:
-              logger().info("[Test] got FAULT");
-              abort_in_fault();
-            case bp_action_t::BLOCK:
-              logger().info("[Test] got BLOCK");
-              return conn.interceptor->blocker.block();
-            default:
-              ceph_abort("unexpected action from trap");
-            }
-          } else {
-            return seastar::now();
-          }
-        }).then([this] {
-#endif
-          ceph_assert_always(frame_assembler);
-          if (unlikely(state != state_t::CONNECTING)) {
-            logger().debug("{} triggered {} before Socket::connect()",
-                           conn, get_state_name(state));
-            abort_protocol();
-          }
-          return Socket::connect(conn.peer_addr);
-        }).then([this](SocketRef new_socket) {
-          logger().debug("{} socket connected", conn);
-          if (unlikely(state != state_t::CONNECTING)) {
-            logger().debug("{} triggered {} during Socket::connect()",
-                           conn, get_state_name(state));
-            return new_socket->close().then([sock=std::move(new_socket)] {
-              abort_protocol();
-            });
-          }
-          if (!has_socket) {
-            frame_assembler->set_socket(std::move(new_socket));
-            has_socket = true;
-          } else {
-            gate.dispatch_in_background(
-              "replace_socket_connecting",
-              conn,
-              [this, new_socket=std::move(new_socket)]() mutable {
-                return frame_assembler->replace_shutdown_socket(std::move(new_socket));
-              }
-            );
-          }
-          is_socket_valid = true;
+      // process custom_bp_t::SOCKET_CONNECTING
+      // supports CONTINUE/FAULT/BLOCK
+      if (!conn.interceptor) {
+        return seastar::now();
+      }
+      return conn.interceptor->intercept(
+        conn, {Breakpoint{custom_bp_t::SOCKET_CONNECTING}}
+      ).then([this](bp_action_t action) {
+        switch (action) {
+        case bp_action_t::CONTINUE:
           return seastar::now();
-        }).then([this] {
-          auth_meta = seastar::make_lw_shared<AuthConnectionMeta>();
-          frame_assembler->reset_handlers();
-          frame_assembler->start_recording();
-          return banner_exchange(true);
-        }).then([this] (auto&& ret) {
-          auto [_peer_type, _my_addr_from_peer] = std::move(ret);
-          if (conn.get_peer_type() != _peer_type) {
-            logger().warn("{} connection peer type does not match what peer advertises {} != {}",
-                          conn, ceph_entity_type_name(conn.get_peer_type()),
-                          ceph_entity_type_name(_peer_type));
-            ABORT_IN_CLOSE(true);
-          }
-          if (unlikely(state != state_t::CONNECTING)) {
-            logger().debug("{} triggered {} during banner_exchange(), abort",
-                           conn, get_state_name(state));
-            abort_protocol();
-          }
-          frame_assembler->learn_socket_ephemeral_port_as_connector(
-              _my_addr_from_peer.get_port());
-          if (unlikely(_my_addr_from_peer.is_legacy())) {
-            logger().warn("{} peer sent a legacy address for me: {}",
-                          conn, _my_addr_from_peer);
-            throw std::system_error(
-                make_error_code(crimson::net::error::bad_peer_address));
-          }
-          _my_addr_from_peer.set_type(entity_addr_t::TYPE_MSGR2);
-          messenger.learned_addr(_my_addr_from_peer, conn);
-          return client_auth();
-        }).then([this] {
-          if (server_cookie == 0) {
-            ceph_assert(connect_seq == 0);
-            return client_connect();
-          } else {
-            ceph_assert(connect_seq > 0);
-            return client_reconnect();
+        case bp_action_t::FAULT:
+          logger().info("[Test] got FAULT");
+          abort_in_fault();
+        case bp_action_t::BLOCK:
+          logger().info("[Test] got BLOCK");
+          return conn.interceptor->blocker.block();
+        default:
+          ceph_abort("unexpected action from trap");
+          return seastar::now();
+        }
+      });;
+    }).then([this] {
+#endif
+      ceph_assert_always(frame_assembler);
+      if (unlikely(state != state_t::CONNECTING)) {
+        logger().debug("{} triggered {} before Socket::connect()",
+                       conn, get_state_name(state));
+        abort_protocol();
+      }
+      return Socket::connect(conn.peer_addr);
+    }).then([this](SocketRef _new_socket) {
+      logger().debug("{} socket connected", conn);
+      if (unlikely(state != state_t::CONNECTING)) {
+        logger().debug("{} triggered {} during Socket::connect()",
+                       conn, get_state_name(state));
+        return _new_socket->close().then([sock=std::move(_new_socket)] {
+          abort_protocol();
+        });
+      }
+      SocketFRef new_socket = seastar::make_foreign(std::move(_new_socket));
+      if (!has_socket) {
+        frame_assembler->set_socket(std::move(new_socket));
+        has_socket = true;
+      } else {
+        gate.dispatch_in_background(
+          "replace_socket_connecting",
+          conn,
+          [this, new_socket=std::move(new_socket)]() mutable {
+            return frame_assembler->replace_shutdown_socket(std::move(new_socket));
           }
-        }).then([this] (next_step_t next) {
+        );
+      }
+      is_socket_valid = true;
+      return seastar::now();
+    }).then([this] {
+      auth_meta = seastar::make_lw_shared<AuthConnectionMeta>();
+      frame_assembler->reset_handlers();
+      frame_assembler->start_recording();
+      return banner_exchange(true);
+    }).then([this] (auto&& ret) {
+      auto [_peer_type, _my_addr_from_peer] = std::move(ret);
+      if (conn.get_peer_type() != _peer_type) {
+        logger().warn("{} connection peer type does not match what peer advertises {} != {}",
+                      conn, ceph_entity_type_name(conn.get_peer_type()),
+                      ceph_entity_type_name(_peer_type));
+        ABORT_IN_CLOSE(true);
+      }
+      if (unlikely(state != state_t::CONNECTING)) {
+        logger().debug("{} triggered {} during banner_exchange(), abort",
+                       conn, get_state_name(state));
+        abort_protocol();
+      }
+      frame_assembler->learn_socket_ephemeral_port_as_connector(
+          _my_addr_from_peer.get_port());
+      if (unlikely(_my_addr_from_peer.is_legacy())) {
+        logger().warn("{} peer sent a legacy address for me: {}",
+                      conn, _my_addr_from_peer);
+        throw std::system_error(
+            make_error_code(crimson::net::error::bad_peer_address));
+      }
+      _my_addr_from_peer.set_type(entity_addr_t::TYPE_MSGR2);
+      messenger.learned_addr(_my_addr_from_peer, conn);
+      return client_auth();
+    }).then([this] {
+      if (server_cookie == 0) {
+        ceph_assert(connect_seq == 0);
+        return client_connect();
+      } else {
+        ceph_assert(connect_seq > 0);
+        return client_reconnect();
+      }
+    }).then([this] (next_step_t next) {
+      if (unlikely(state != state_t::CONNECTING)) {
+        logger().debug("{} triggered {} at the end of execute_connecting()",
+                       conn, get_state_name(state));
+        abort_protocol();
+      }
+      switch (next) {
+       case next_step_t::ready: {
+        if (unlikely(state != state_t::CONNECTING)) {
+          logger().debug("{} triggered {} before dispatch_connect(), abort",
+                         conn, get_state_name(state));
+          abort_protocol();
+        }
+
+        auto cc_seq = crosscore.prepare_submit();
+        // there are 2 hops with dispatch_connect()
+        crosscore.prepare_submit();
+        logger().info("{} connected: gs={}, pgs={}, cs={}, "
+                      "client_cookie={}, server_cookie={}, {}, new_sid={}, "
+                      "send {} IOHandler::dispatch_connect()",
+                      conn, global_seq, peer_global_seq, connect_seq,
+                      client_cookie, server_cookie, io_states,
+                      frame_assembler->get_socket_shard_id(), cc_seq);
+
+        // set io_handler to a new shard
+        auto new_io_shard = frame_assembler->get_socket_shard_id();
+        ConnectionFRef conn_fref = seastar::make_foreign(
+            conn.shared_from_this());
+        ceph_assert_always(!pr_switch_io_shard.has_value());
+        pr_switch_io_shard = seastar::shared_promise<>();
+        return seastar::smp::submit_to(
+            io_handler.get_shard_id(),
+            [this, cc_seq, new_io_shard,
+             conn_fref=std::move(conn_fref)]() mutable {
+          return io_handler.dispatch_connect(
+              cc_seq, new_io_shard, std::move(conn_fref));
+        }).then([this, new_io_shard] {
+          ceph_assert_always(io_handler.get_shard_id() == new_io_shard);
+          pr_switch_io_shard->set_value();
+          pr_switch_io_shard = std::nullopt;
+          // user can make changes
+
           if (unlikely(state != state_t::CONNECTING)) {
-            logger().debug("{} triggered {} at the end of execute_connecting()",
+            logger().debug("{} triggered {} after dispatch_connect(), abort",
                            conn, get_state_name(state));
             abort_protocol();
           }
-          switch (next) {
-           case next_step_t::ready: {
-            logger().info("{} connected: gs={}, pgs={}, cs={}, "
-                          "client_cookie={}, server_cookie={}, {}",
-                          conn, global_seq, peer_global_seq, connect_seq,
-                          client_cookie, server_cookie,
-                          io_stat_printer{io_handler});
-            io_handler.dispatch_connect();
-            if (unlikely(state != state_t::CONNECTING)) {
-              logger().debug("{} triggered {} after ms_handle_connect(), abort",
-                             conn, get_state_name(state));
-              abort_protocol();
-            }
-            execute_ready();
-            break;
-           }
-           case next_step_t::wait: {
-            logger().info("{} execute_connecting(): going to WAIT(max-backoff)", conn);
-            ceph_assert_always(is_socket_valid);
-            frame_assembler->shutdown_socket();
-            is_socket_valid = false;
-            execute_wait(true);
-            break;
-           }
-           default: {
-            ceph_abort("impossible next step");
-           }
-          }
-        }).handle_exception([this](std::exception_ptr eptr) {
-          fault(state_t::CONNECTING, "execute_connecting", eptr);
+          execute_ready();
         });
+       }
+       case next_step_t::wait: {
+        logger().info("{} execute_connecting(): going to WAIT(max-backoff)", conn);
+        ceph_assert_always(is_socket_valid);
+        frame_assembler->shutdown_socket<true>(&gate);
+        is_socket_valid = false;
+        execute_wait(true);
+        return seastar::now();
+       }
+       default: {
+        ceph_abort("impossible next step");
+       }
+      }
+    }).handle_exception([this](std::exception_ptr eptr) {
+      fault(state_t::CONNECTING, "execute_connecting", eptr);
     });
+  });
 }
 
 // ACCEPTING state
@@ -1061,7 +1205,8 @@ ProtocolV2::reuse_connection(
   has_socket = false;
 #ifdef UNIT_TESTS_BUILT
   if (conn.interceptor) {
-    conn.interceptor->register_conn_replaced(conn);
+    conn.interceptor->register_conn_replaced(
+        conn.get_local_shared_foreign_from_this());
   }
 #endif
   // close this connection because all the necessary information is delivered
@@ -1476,91 +1621,89 @@ ProtocolV2::server_reconnect()
 void ProtocolV2::execute_accepting()
 {
   assert(is_socket_valid);
-  trigger_state(state_t::ACCEPTING, io_state_t::none, false);
+  trigger_state(state_t::ACCEPTING, io_state_t::none);
   gate.dispatch_in_background("execute_accepting", conn, [this] {
-      return seastar::futurize_invoke([this] {
+    return seastar::futurize_invoke([this] {
 #ifdef UNIT_TESTS_BUILT
-          if (conn.interceptor) {
-            auto action = conn.interceptor->intercept(
-                conn, {custom_bp_t::SOCKET_ACCEPTED});
-            switch (action) {
-            case bp_action_t::CONTINUE:
-              break;
-            case bp_action_t::FAULT:
-              logger().info("[Test] got FAULT");
-              abort_in_fault();
-            default:
-              ceph_abort("unexpected action from trap");
-            }
-          }
-#endif
-          auth_meta = seastar::make_lw_shared<AuthConnectionMeta>();
-          frame_assembler->reset_handlers();
-          frame_assembler->start_recording();
-          return banner_exchange(false);
-        }).then([this] (auto&& ret) {
-          auto [_peer_type, _my_addr_from_peer] = std::move(ret);
-          ceph_assert(conn.get_peer_type() == 0);
-          conn.set_peer_type(_peer_type);
-
-          conn.policy = messenger.get_policy(_peer_type);
-          logger().info("{} UPDATE: peer_type={},"
-                        " policy(lossy={} server={} standby={} resetcheck={})",
-                        conn, ceph_entity_type_name(_peer_type),
-                        conn.policy.lossy, conn.policy.server,
-                        conn.policy.standby, conn.policy.resetcheck);
-          if (!messenger.get_myaddr().is_blank_ip() &&
-              (messenger.get_myaddr().get_port() != _my_addr_from_peer.get_port() ||
-              messenger.get_myaddr().get_nonce() != _my_addr_from_peer.get_nonce())) {
-            logger().warn("{} my_addr_from_peer {} port/nonce doesn't match myaddr {}",
-                          conn, _my_addr_from_peer, messenger.get_myaddr());
-            throw std::system_error(
-                make_error_code(crimson::net::error::bad_peer_address));
-          }
-          messenger.learned_addr(_my_addr_from_peer, conn);
-          return server_auth();
-        }).then([this] {
-          return frame_assembler->read_main_preamble();
-        }).then([this](auto ret) {
-          switch (ret.tag) {
-            case Tag::CLIENT_IDENT:
-              return server_connect();
-            case Tag::SESSION_RECONNECT:
-              return server_reconnect();
-            default: {
-              unexpected_tag(ret.tag, conn, "post_server_auth");
-              return seastar::make_ready_future<next_step_t>(next_step_t::none);
-            }
-          }
-        }).then([this] (next_step_t next) {
-          switch (next) {
-           case next_step_t::ready:
-            assert(state != state_t::ACCEPTING);
-            break;
-           case next_step_t::wait:
-            if (unlikely(state != state_t::ACCEPTING)) {
-              logger().debug("{} triggered {} at the end of execute_accepting()",
-                             conn, get_state_name(state));
-              abort_protocol();
-            }
-            logger().info("{} execute_accepting(): going to SERVER_WAIT", conn);
-            execute_server_wait();
-            break;
-           default:
-            ceph_abort("impossible next step");
-          }
-        }).handle_exception([this](std::exception_ptr eptr) {
-          const char *e_what;
-          try {
-            std::rethrow_exception(eptr);
-          } catch (std::exception &e) {
-            e_what = e.what();
-          }
-          logger().info("{} execute_accepting(): fault at {}, going to CLOSING -- {}",
-                        conn, get_state_name(state), e_what);
-          do_close(false);
+      if (conn.interceptor) {
+        // only notify socket accepted
+        gate.dispatch_in_background(
+            "test_intercept_socket_accepted", conn, [this] {
+          return conn.interceptor->intercept(
+            conn, {Breakpoint{custom_bp_t::SOCKET_ACCEPTED}}
+          ).then([](bp_action_t action) {
+            ceph_assert(action == bp_action_t::CONTINUE);
+          });
         });
+      }
+#endif
+      auth_meta = seastar::make_lw_shared<AuthConnectionMeta>();
+      frame_assembler->reset_handlers();
+      frame_assembler->start_recording();
+      return banner_exchange(false);
+    }).then([this] (auto&& ret) {
+      auto [_peer_type, _my_addr_from_peer] = std::move(ret);
+      ceph_assert(conn.get_peer_type() == 0);
+      conn.set_peer_type(_peer_type);
+
+      conn.policy = messenger.get_policy(_peer_type);
+      logger().info("{} UPDATE: peer_type={},"
+                    " policy(lossy={} server={} standby={} resetcheck={})",
+                    conn, ceph_entity_type_name(_peer_type),
+                    conn.policy.lossy, conn.policy.server,
+                    conn.policy.standby, conn.policy.resetcheck);
+      if (!messenger.get_myaddr().is_blank_ip() &&
+          (messenger.get_myaddr().get_port() != _my_addr_from_peer.get_port() ||
+          messenger.get_myaddr().get_nonce() != _my_addr_from_peer.get_nonce())) {
+        logger().warn("{} my_addr_from_peer {} port/nonce doesn't match myaddr {}",
+                      conn, _my_addr_from_peer, messenger.get_myaddr());
+        throw std::system_error(
+            make_error_code(crimson::net::error::bad_peer_address));
+      }
+      messenger.learned_addr(_my_addr_from_peer, conn);
+      return server_auth();
+    }).then([this] {
+      return frame_assembler->read_main_preamble();
+    }).then([this](auto ret) {
+      switch (ret.tag) {
+        case Tag::CLIENT_IDENT:
+          return server_connect();
+        case Tag::SESSION_RECONNECT:
+          return server_reconnect();
+        default: {
+          unexpected_tag(ret.tag, conn, "post_server_auth");
+          return seastar::make_ready_future<next_step_t>(next_step_t::none);
+        }
+      }
+    }).then([this] (next_step_t next) {
+      switch (next) {
+       case next_step_t::ready:
+        assert(state != state_t::ACCEPTING);
+        break;
+       case next_step_t::wait:
+        if (unlikely(state != state_t::ACCEPTING)) {
+          logger().debug("{} triggered {} at the end of execute_accepting()",
+                         conn, get_state_name(state));
+          abort_protocol();
+        }
+        logger().info("{} execute_accepting(): going to SERVER_WAIT", conn);
+        execute_server_wait();
+        break;
+       default:
+        ceph_abort("impossible next step");
+      }
+    }).handle_exception([this](std::exception_ptr eptr) {
+      const char *e_what;
+      try {
+        std::rethrow_exception(eptr);
+      } catch (std::exception &e) {
+        e_what = e.what();
+      }
+      logger().info("{} execute_accepting(): fault at {}, going to CLOSING -- {}",
+                    conn, get_state_name(state), e_what);
+      do_close(false);
     });
+  });
 }
 
 // CONNECTING or ACCEPTING state
@@ -1609,10 +1752,22 @@ void ProtocolV2::execute_establishing(SocketConnectionRef existing_conn) {
   };
 
   ceph_assert_always(is_socket_valid);
-  trigger_state(state_t::ESTABLISHING, io_state_t::delay, false);
+  trigger_state(state_t::ESTABLISHING, io_state_t::delay);
+  bool is_replace;
   if (existing_conn) {
-    static_cast<ProtocolV2*>(existing_conn->protocol.get())->do_close(
-        true /* is_dispatch_reset */, std::move(accept_me));
+    logger().info("{} start establishing: gs={}, pgs={}, cs={}, "
+                  "client_cookie={}, server_cookie={}, {}, new_sid={}, "
+                  "close existing {}",
+                  conn, global_seq, peer_global_seq, connect_seq,
+                  client_cookie, server_cookie,
+                  io_states, frame_assembler->get_socket_shard_id(),
+                  *existing_conn);
+    is_replace = true;
+    ProtocolV2 *existing_proto = dynamic_cast<ProtocolV2*>(
+        existing_conn->protocol.get());
+    existing_proto->do_close(
+        true, // is_dispatch_reset
+        std::move(accept_me));
     if (unlikely(state != state_t::ESTABLISHING)) {
       logger().warn("{} triggered {} during execute_establishing(), "
                     "the accept event will not be delivered!",
@@ -1620,18 +1775,48 @@ void ProtocolV2::execute_establishing(SocketConnectionRef existing_conn) {
       abort_protocol();
     }
   } else {
+    logger().info("{} start establishing: gs={}, pgs={}, cs={}, "
+                  "client_cookie={}, server_cookie={}, {}, new_sid={}, "
+                  "no existing",
+                  conn, global_seq, peer_global_seq, connect_seq,
+                  client_cookie, server_cookie, io_states,
+                  frame_assembler->get_socket_shard_id());
+    is_replace = false;
     accept_me();
   }
 
-  io_handler.dispatch_accept();
-  if (unlikely(state != state_t::ESTABLISHING)) {
-    logger().debug("{} triggered {} after ms_handle_accept() during execute_establishing()",
-                   conn, get_state_name(state));
-    abort_protocol();
-  }
+  gated_execute("execute_establishing", conn, [this, is_replace] {
+    ceph_assert_always(state == state_t::ESTABLISHING);
+
+    // set io_handler to a new shard
+    auto cc_seq = crosscore.prepare_submit();
+    // there are 2 hops with dispatch_accept()
+    crosscore.prepare_submit();
+    auto new_io_shard = frame_assembler->get_socket_shard_id();
+    logger().debug("{} send {} IOHandler::dispatch_accept({})",
+                   conn, cc_seq, new_io_shard);
+    ConnectionFRef conn_fref = seastar::make_foreign(
+        conn.shared_from_this());
+    ceph_assert_always(!pr_switch_io_shard.has_value());
+    pr_switch_io_shard = seastar::shared_promise<>();
+    return seastar::smp::submit_to(
+        io_handler.get_shard_id(),
+        [this, cc_seq, new_io_shard, is_replace,
+         conn_fref=std::move(conn_fref)]() mutable {
+      return io_handler.dispatch_accept(
+          cc_seq, new_io_shard, std::move(conn_fref), is_replace);
+    }).then([this, new_io_shard] {
+      ceph_assert_always(io_handler.get_shard_id() == new_io_shard);
+      pr_switch_io_shard->set_value();
+      pr_switch_io_shard = std::nullopt;
+      // user can make changes
+
+      if (unlikely(state != state_t::ESTABLISHING)) {
+        logger().debug("{} triggered {} after dispatch_accept() during execute_establishing()",
+                       conn, get_state_name(state));
+        abort_protocol();
+      }
 
-  gated_execute("execute_establishing", conn, [this] {
-    return seastar::futurize_invoke([this] {
       return send_server_ident();
     }).then([this] {
       if (unlikely(state != state_t::ESTABLISHING)) {
@@ -1639,11 +1824,7 @@ void ProtocolV2::execute_establishing(SocketConnectionRef existing_conn) {
                        conn, get_state_name(state));
         abort_protocol();
       }
-      logger().info("{} established: gs={}, pgs={}, cs={}, "
-                    "client_cookie={}, server_cookie={}, {}",
-                    conn, global_seq, peer_global_seq, connect_seq,
-                    client_cookie, server_cookie,
-                    io_stat_printer{io_handler});
+      logger().info("{} established, going to ready", conn);
       execute_ready();
     }).handle_exception([this](std::exception_ptr eptr) {
       fault(state_t::ESTABLISHING, "execute_establishing", eptr);
@@ -1656,15 +1837,26 @@ void ProtocolV2::execute_establishing(SocketConnectionRef existing_conn) {
 seastar::future<>
 ProtocolV2::send_server_ident()
 {
+  ceph_assert_always(state == state_t::ESTABLISHING ||
+                     state == state_t::REPLACING);
   // send_server_ident() logic
 
   // refered to async-conn v2: not assign gs to global_seq
   global_seq = messenger.get_global_seq();
-  logger().debug("{} UPDATE: gs={} for server ident", conn, global_seq);
+  auto cc_seq = crosscore.prepare_submit();
+  logger().debug("{} UPDATE: gs={} for server ident, "
+                 "send {} IOHandler::reset_peer_state()",
+                 conn, global_seq, cc_seq);
 
   // this is required for the case when this connection is being replaced
-  io_handler.requeue_out_sent_up_to(0);
-  io_handler.reset_session(false);
+  io_states.reset_peer_state();
+  gate.dispatch_in_background(
+      "reset_peer_state", conn, [this, cc_seq] {
+    return seastar::smp::submit_to(
+        io_handler.get_shard_id(), [this, cc_seq] {
+      return io_handler.reset_peer_state(cc_seq);
+    });
+  });
 
   if (!conn.policy.lossy) {
     server_cookie = ceph::util::generate_random_number<uint64_t>(1, -1ll);
@@ -1709,13 +1901,21 @@ void ProtocolV2::trigger_replacing(bool reconnect,
                                    uint64_t new_connect_seq,
                                    uint64_t new_msg_seq)
 {
+  ceph_assert_always(state >= state_t::ESTABLISHING);
+  ceph_assert_always(state <= state_t::WAIT);
   ceph_assert_always(has_socket || state == state_t::CONNECTING);
-  ceph_assert_always(!mover.socket->is_shutdown());
-  trigger_state(state_t::REPLACING, io_state_t::delay, false);
+  // mover.socket shouldn't be shutdown
+
+  logger().info("{} start replacing ({}): pgs was {}, cs was {}, "
+                "client_cookie was {}, {}, new_sid={}",
+                conn, reconnect ? "reconnected" : "connected",
+                peer_global_seq, connect_seq, client_cookie,
+                io_states, mover.socket->get_shard_id());
   if (is_socket_valid) {
-    frame_assembler->shutdown_socket();
+    frame_assembler->shutdown_socket<true>(&gate);
     is_socket_valid = false;
   }
+  trigger_state_phase1(state_t::REPLACING);
   gate.dispatch_in_background(
       "trigger_replacing",
       conn,
@@ -1729,15 +1929,60 @@ void ProtocolV2::trigger_replacing(bool reconnect,
        new_peer_global_seq,
        new_connect_seq, new_msg_seq] () mutable {
     ceph_assert_always(state == state_t::REPLACING);
-    io_handler.dispatch_accept();
-    // state may become CLOSING, close mover.socket and abort later
-    return wait_exit_io(
+    auto new_io_shard = mover.socket->get_shard_id();
+    // state may become CLOSING below, but we cannot abort the chain until
+    // mover.socket is correctly handled (closed or replaced).
+
+    // this is preemptive
+    return wait_switch_io_shard(
     ).then([this] {
+      if (unlikely(state != state_t::REPLACING)) {
+        ceph_assert_always(state == state_t::CLOSING);
+        return seastar::now();
+      }
+
+      trigger_state_phase2(state_t::REPLACING, io_state_t::delay);
+      return wait_exit_io();
+    }).then([this] {
+      if (unlikely(state != state_t::REPLACING)) {
+        ceph_assert_always(state == state_t::CLOSING);
+        return seastar::now();
+      }
+
       ceph_assert_always(frame_assembler);
       protocol_timer.cancel();
       auto done = std::move(execution_done);
       execution_done = seastar::now();
       return done;
+    }).then([this, new_io_shard] {
+      if (unlikely(state != state_t::REPLACING)) {
+        ceph_assert_always(state == state_t::CLOSING);
+        return seastar::now();
+      }
+
+      // set io_handler to a new shard
+      // we should prevent parallel switching core attemps
+      auto cc_seq = crosscore.prepare_submit();
+      // there are 2 hops with dispatch_accept()
+      crosscore.prepare_submit();
+      logger().debug("{} send {} IOHandler::dispatch_accept({})",
+                     conn, cc_seq, new_io_shard);
+      ConnectionFRef conn_fref = seastar::make_foreign(
+          conn.shared_from_this());
+      ceph_assert_always(!pr_switch_io_shard.has_value());
+      pr_switch_io_shard = seastar::shared_promise<>();
+      return seastar::smp::submit_to(
+          io_handler.get_shard_id(),
+          [this, cc_seq, new_io_shard,
+           conn_fref=std::move(conn_fref)]() mutable {
+        return io_handler.dispatch_accept(
+            cc_seq, new_io_shard, std::move(conn_fref), false);
+      }).then([this, new_io_shard] {
+        ceph_assert_always(io_handler.get_shard_id() == new_io_shard);
+        pr_switch_io_shard->set_value();
+        pr_switch_io_shard = std::nullopt;
+        // user can make changes
+      });
     }).then([this,
              reconnect,
              do_reset,
@@ -1749,9 +1994,13 @@ void ProtocolV2::trigger_replacing(bool reconnect,
              new_connect_seq, new_msg_seq] () mutable {
       if (state == state_t::REPLACING && do_reset) {
         reset_session(true);
+        // user can make changes
       }
 
       if (unlikely(state != state_t::REPLACING)) {
+        logger().debug("{} triggered {} in the middle of trigger_replacing(), abort",
+                       conn, get_state_name(state));
+        ceph_assert_always(state == state_t::CLOSING);
         return mover.socket->close(
         ).then([sock = std::move(mover.socket)] {
           abort_protocol();
@@ -1773,9 +2022,21 @@ void ProtocolV2::trigger_replacing(bool reconnect,
       if (reconnect) {
         connect_seq = new_connect_seq;
         // send_reconnect_ok() logic
-        io_handler.requeue_out_sent_up_to(new_msg_seq);
-        auto reconnect_ok = ReconnectOkFrame::Encode(io_handler.get_in_seq());
-        logger().debug("{} WRITE ReconnectOkFrame: msg_seq={}", conn, io_handler.get_in_seq());
+
+        auto cc_seq = crosscore.prepare_submit();
+        logger().debug("{} send {} IOHandler::requeue_out_sent_up_to({})",
+                       conn, cc_seq, new_msg_seq);
+        io_states.requeue_out_sent_up_to();
+        gate.dispatch_in_background(
+            "requeue_out_replacing", conn, [this, cc_seq, new_msg_seq] {
+          return seastar::smp::submit_to(
+              io_handler.get_shard_id(), [this, cc_seq, new_msg_seq] {
+            return io_handler.requeue_out_sent_up_to(cc_seq, new_msg_seq);
+          });
+        });
+
+        auto reconnect_ok = ReconnectOkFrame::Encode(io_states.in_seq);
+        logger().debug("{} WRITE ReconnectOkFrame: msg_seq={}", conn, io_states.in_seq);
         return frame_assembler->write_flush_frame(reconnect_ok);
       } else {
         client_cookie = new_client_cookie;
@@ -1791,16 +2052,17 @@ void ProtocolV2::trigger_replacing(bool reconnect,
       }
     }).then([this, reconnect] {
       if (unlikely(state != state_t::REPLACING)) {
-        logger().debug("{} triggered {} at the end of trigger_replacing()",
+        logger().debug("{} triggered {} at the end of trigger_replacing(), abort",
                        conn, get_state_name(state));
+        ceph_assert_always(state == state_t::CLOSING);
         abort_protocol();
       }
-      logger().info("{} replaced ({}): gs={}, pgs={}, cs={}, "
+      logger().info("{} replaced ({}), going to ready: "
+                    "gs={}, pgs={}, cs={}, "
                     "client_cookie={}, server_cookie={}, {}",
                     conn, reconnect ? "reconnected" : "connected",
                     global_seq, peer_global_seq, connect_seq,
-                    client_cookie, server_cookie,
-                    io_stat_printer{io_handler});
+                    client_cookie, server_cookie, io_states);
       execute_ready();
     }).handle_exception([this](std::exception_ptr eptr) {
       fault(state_t::REPLACING, "trigger_replacing", eptr);
@@ -1810,9 +2072,27 @@ void ProtocolV2::trigger_replacing(bool reconnect,
 
 // READY state
 
-void ProtocolV2::notify_out_fault(const char *where, std::exception_ptr eptr)
+seastar::future<> ProtocolV2::notify_out_fault(
+    crosscore_t::seq_t cc_seq,
+    const char *where,
+    std::exception_ptr eptr,
+    io_handler_state _io_states)
 {
+  assert(seastar::this_shard_id() == conn.get_messenger_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} notify_out_fault(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq, where, eptr, _io_states] {
+      return notify_out_fault(cc_seq, where, eptr, _io_states);
+    });
+  }
+
+  io_states = _io_states;
+  logger().debug("{} got {} notify_out_fault(): io_states={}",
+                 conn, cc_seq, io_states);
   fault(state_t::READY, where, eptr);
+  return seastar::now();
 }
 
 void ProtocolV2::execute_ready()
@@ -1820,7 +2100,16 @@ void ProtocolV2::execute_ready()
   assert(conn.policy.lossy || (client_cookie != 0 && server_cookie != 0));
   protocol_timer.cancel();
   ceph_assert_always(is_socket_valid);
-  trigger_state(state_t::READY, io_state_t::open, false);
+  // I'm not responsible to shutdown the socket at READY
+  is_socket_valid = false;
+  trigger_state(state_t::READY, io_state_t::open);
+#ifdef UNIT_TESTS_BUILT
+  if (conn.interceptor) {
+    // FIXME: doesn't support cross-core
+    conn.interceptor->register_conn_ready(
+        conn.get_local_shared_foreign_from_this());
+  }
+#endif
 }
 
 // STANDBY state
@@ -1828,16 +2117,31 @@ void ProtocolV2::execute_ready()
 void ProtocolV2::execute_standby()
 {
   ceph_assert_always(!is_socket_valid);
-  trigger_state(state_t::STANDBY, io_state_t::delay, false);
+  trigger_state(state_t::STANDBY, io_state_t::delay);
 }
 
-void ProtocolV2::notify_out()
+seastar::future<> ProtocolV2::notify_out(
+    crosscore_t::seq_t cc_seq)
 {
+  assert(seastar::this_shard_id() == conn.get_messenger_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} notify_out(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq] {
+      return notify_out(cc_seq);
+    });
+  }
+
+  logger().debug("{} got {} notify_out(): at {}",
+                 conn, cc_seq, get_state_name(state));
+  io_states.is_out_queued = true;
   if (unlikely(state == state_t::STANDBY && !conn.policy.server)) {
     logger().info("{} notify_out(): at {}, going to CONNECTING",
                   conn, get_state_name(state));
     execute_connecting();
   }
+  return seastar::now();
 }
 
 // WAIT state
@@ -1845,7 +2149,7 @@ void ProtocolV2::notify_out()
 void ProtocolV2::execute_wait(bool max_backoff)
 {
   ceph_assert_always(!is_socket_valid);
-  trigger_state(state_t::WAIT, io_state_t::delay, false);
+  trigger_state(state_t::WAIT, io_state_t::delay);
   gated_execute("execute_wait", conn, [this, max_backoff] {
     double backoff = protocol_timer.last_dur();
     if (max_backoff) {
@@ -1883,10 +2187,10 @@ void ProtocolV2::execute_wait(bool max_backoff)
 void ProtocolV2::execute_server_wait()
 {
   ceph_assert_always(is_socket_valid);
-  trigger_state(state_t::SERVER_WAIT, io_state_t::none, false);
+  trigger_state(state_t::SERVER_WAIT, io_state_t::none);
   gated_execute("execute_server_wait", conn, [this] {
     return frame_assembler->read_exactly(1
-    ).then([this](auto bl) {
+    ).then([this](auto bptr) {
       logger().warn("{} SERVER_WAIT got read, abort", conn);
       abort_in_fault();
     }).handle_exception([this](std::exception_ptr eptr) {
@@ -1905,9 +2209,23 @@ void ProtocolV2::execute_server_wait()
 
 // CLOSING state
 
-void ProtocolV2::notify_mark_down()
+seastar::future<> ProtocolV2::notify_mark_down(
+    crosscore_t::seq_t cc_seq)
 {
+  assert(seastar::this_shard_id() == conn.get_messenger_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} notify_mark_down(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq] {
+      return notify_mark_down(cc_seq);
+    });
+  }
+
+  logger().debug("{} got {} notify_mark_down()",
+                 conn, cc_seq);
   do_close(false);
+  return seastar::now();
 }
 
 seastar::future<> ProtocolV2::close_clean_yielded()
@@ -1918,22 +2236,21 @@ seastar::future<> ProtocolV2::close_clean_yielded()
   // the container when seastar::parallel_for_each() is still iterating in it.
   // that'd lead to a segfault.
   return seastar::yield(
-  ).then([this, conn_ref = conn.shared_from_this()] {
+  ).then([this] {
     do_close(false);
-    // it can happen if close_clean() is called inside Dispatcher::ms_handle_reset()
-    // which will otherwise result in deadlock
-    assert(closed_clean_fut.valid());
-    return closed_clean_fut.get_future();
-  });
+    return pr_closed_clean.get_shared_future();
+
+  // connection may be unreferenced from the messenger,
+  // so need to hold the additional reference.
+  }).finally([conn_ref = conn.shared_from_this()] {});;
 }
 
 void ProtocolV2::do_close(
     bool is_dispatch_reset,
     std::optional<std::function<void()>> f_accept_new)
 {
-  if (closed) {
+  if (state == state_t::CLOSING) {
     // already closing
-    assert(state == state_t::CLOSING);
     return;
   }
 
@@ -1946,9 +2263,9 @@ void ProtocolV2::do_close(
    * atomic operations
    */
 
-  closed = true;
+  ceph_assert_always(!gate.is_closed());
 
-  // trigger close
+  // messenger registrations, must before user events
   messenger.closing_conn(
       seastar::static_pointer_cast<SocketConnection>(
         conn.shared_from_this()));
@@ -1964,48 +2281,67 @@ void ProtocolV2::do_close(
     // cannot happen
     ceph_assert(false);
   }
-  protocol_timer.cancel();
-  trigger_state(state_t::CLOSING, io_state_t::drop, false);
-
   if (f_accept_new) {
+    // the replacing connection must be registerred after the replaced
+    // connection is unreigsterred.
     (*f_accept_new)();
   }
+
+  protocol_timer.cancel();
   if (is_socket_valid) {
-    frame_assembler->shutdown_socket();
+    frame_assembler->shutdown_socket<true>(&gate);
     is_socket_valid = false;
   }
-  assert(!gate.is_closed());
-  auto handshake_closed = gate.close();
-  auto io_closed = io_handler.close_io(
-      is_dispatch_reset, is_replace);
-
-  // asynchronous operations
-  assert(!closed_clean_fut.valid());
-  closed_clean_fut = seastar::when_all(
-      std::move(handshake_closed), std::move(io_closed)
-  ).discard_result().then([this] {
-    ceph_assert_always(!exit_io.has_value());
-    if (has_socket) {
-      ceph_assert_always(frame_assembler);
-      return frame_assembler->close_shutdown_socket();
-    } else {
-      return seastar::now();
-    }
-  }).then([this] {
-    logger().debug("{} closed!", conn);
-    messenger.closed_conn(
-        seastar::static_pointer_cast<SocketConnection>(
-          conn.shared_from_this()));
+
+  trigger_state_phase1(state_t::CLOSING);
+  gate.dispatch_in_background(
+      "close_io", conn, [this, is_dispatch_reset, is_replace] {
+    // this is preemptive
+    return wait_switch_io_shard(
+    ).then([this, is_dispatch_reset, is_replace] {
+      trigger_state_phase2(state_t::CLOSING, io_state_t::drop);
+      auto cc_seq = crosscore.prepare_submit();
+      logger().debug("{} send {} IOHandler::close_io(reset={}, replace={})",
+                     conn, cc_seq, is_dispatch_reset, is_replace);
+
+      std::ignore = gate.close(
+      ).then([this] {
+        ceph_assert_always(!need_exit_io);
+        ceph_assert_always(!pr_exit_io.has_value());
+        if (has_socket) {
+          ceph_assert_always(frame_assembler);
+          return frame_assembler->close_shutdown_socket();
+        } else {
+          return seastar::now();
+        }
+      }).then([this] {
+        logger().debug("{} closed!", conn);
+        messenger.closed_conn(
+            seastar::static_pointer_cast<SocketConnection>(
+              conn.shared_from_this()));
+        pr_closed_clean.set_value();
 #ifdef UNIT_TESTS_BUILT
-    closed_clean = true;
-    if (conn.interceptor) {
-      conn.interceptor->register_conn_closed(conn);
-    }
+        closed_clean = true;
+        if (conn.interceptor) {
+          conn.interceptor->register_conn_closed(
+              conn.get_local_shared_foreign_from_this());
+        }
 #endif
-  }).handle_exception([conn_ref = conn.shared_from_this(), this] (auto eptr) {
-    logger().error("{} closing: closed_clean_fut got unexpected exception {}",
-                   conn, eptr);
-    ceph_abort();
+      // connection is unreferenced from the messenger,
+      // so need to hold the additional reference.
+      }).handle_exception([conn_ref = conn.shared_from_this(), this] (auto eptr) {
+        logger().error("{} closing got unexpected exception {}",
+                       conn, eptr);
+        ceph_abort();
+      });
+
+      return seastar::smp::submit_to(
+          io_handler.get_shard_id(),
+          [this, cc_seq, is_dispatch_reset, is_replace] {
+        return io_handler.close_io(cc_seq, is_dispatch_reset, is_replace);
+      });
+      // user can make changes
+    });
   });
 }
 
index b6f67b566510e53d1369eb346b56700efae35a62..dd7a1e7039b519e0c06dbd2a9feae13605de5393 100644 (file)
@@ -28,11 +28,17 @@ public:
  * as HandshakeListener
  */
 private:
-  void notify_out() final;
+  seastar::future<> notify_out(
+      crosscore_t::seq_t cc_seq) final;
 
-  void notify_out_fault(const char *, std::exception_ptr) final;
+  seastar::future<> notify_out_fault(
+      crosscore_t::seq_t cc_seq,
+      const char *where,
+      std::exception_ptr,
+      io_handler_state) final;
 
-  void notify_mark_down() final;
+  seastar::future<> notify_mark_down(
+      crosscore_t::seq_t cc_seq) final;
 
 /*
 * as ProtocolV2 to be called by SocketConnection
@@ -41,26 +47,45 @@ public:
   void start_connect(const entity_addr_t& peer_addr,
                      const entity_name_t& peer_name);
 
-  void start_accept(SocketRef&& socket,
+  void start_accept(SocketFRef&& socket,
                     const entity_addr_t& peer_addr);
 
   seastar::future<> close_clean_yielded();
 
 #ifdef UNIT_TESTS_BUILT
+  bool is_ready() const {
+    return state == state_t::READY;
+  }
+
+  bool is_standby() const {
+    return state == state_t::STANDBY;
+  }
+
   bool is_closed_clean() const {
     return closed_clean;
   }
 
   bool is_closed() const {
-    return closed;
+    return state == state_t::CLOSING;
   }
 
 #endif
 private:
+  using io_state_t = IOHandler::io_state_t;
+
+  seastar::future<> wait_switch_io_shard() {
+    if (pr_switch_io_shard.has_value()) {
+      return pr_switch_io_shard->get_shared_future();
+    } else {
+      return seastar::now();
+    }
+  }
+
   seastar::future<> wait_exit_io() {
-    if (exit_io.has_value()) {
-      return exit_io->get_shared_future();
+    if (pr_exit_io.has_value()) {
+      return pr_exit_io->get_shared_future();
     } else {
+      assert(!need_exit_io);
       return seastar::now();
     }
   }
@@ -92,7 +117,15 @@ private:
     return statenames[static_cast<int>(state)];
   }
 
-  void trigger_state(state_t state, IOHandler::io_state_t io_state, bool reentrant);
+  void trigger_state_phase1(state_t new_state);
+
+  void trigger_state_phase2(state_t new_state, io_state_t new_io_state);
+
+  void trigger_state(state_t new_state, io_state_t new_io_state) {
+    ceph_assert_always(!pr_switch_io_shard.has_value());
+    trigger_state_phase1(new_state);
+    trigger_state_phase2(new_state, new_io_state);
+  }
 
   template <typename Func, typename T>
   void gated_execute(const char *what, T &who, Func &&func) {
@@ -215,6 +248,11 @@ private:
 
   IOHandler &io_handler;
 
+  // asynchronously populated from io_handler
+  io_handler_state io_states;
+
+  crosscore_t crosscore;
+
   bool has_socket = false;
 
   // the socket exists and it is not shutdown
@@ -222,16 +260,19 @@ private:
 
   FrameAssemblerV2Ref frame_assembler;
 
-  std::optional<seastar::shared_promise<>> exit_io;
+  bool need_notify_out = false;
+
+  std::optional<seastar::shared_promise<>> pr_switch_io_shard;
+
+  bool need_exit_io = false;
+
+  std::optional<seastar::shared_promise<>> pr_exit_io;
 
   AuthConnectionMetaRef auth_meta;
 
   crimson::common::Gated gate;
 
-  bool closed = false;
-
-  // become valid only after closed == true
-  seastar::shared_future<> closed_clean_fut;
+  seastar::shared_promise<> pr_closed_clean;
 
 #ifdef UNIT_TESTS_BUILT
   bool closed_clean = false;
index 6434a407f22a56c6b2c3f75a8d12eedcf181e7ad..95b1e225034eb567b1bdf1a1107437d6ad84d2df 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <seastar/core/sleep.hh>
 #include <seastar/core/when_all.hh>
+#include <seastar/net/packet.hh>
 
 #include "crimson/common/log.h"
 #include "Errors.h"
@@ -19,6 +20,9 @@ seastar::logger& logger() {
   return crimson::get_logger(ceph_subsys_ms);
 }
 
+using tmp_buf = seastar::temporary_buffer<char>;
+using packet = seastar::net::packet;
+
 // an input_stream consumer that reads buffer segments into a bufferlist up to
 // the given number of remaining bytes
 struct bufferlist_consumer {
@@ -28,7 +32,6 @@ struct bufferlist_consumer {
   bufferlist_consumer(bufferlist& bl, size_t& remaining)
     : bl(bl), remaining(remaining) {}
 
-  using tmp_buf = seastar::temporary_buffer<char>;
   using consumption_result_type = typename seastar::input_stream<char>::consumption_result_type;
 
   // consume some or all of a buffer segment
@@ -59,10 +62,64 @@ struct bufferlist_consumer {
   };
 };
 
+seastar::future<> inject_delay()
+{
+  if (float delay_period = local_conf()->ms_inject_internal_delays;
+      delay_period) {
+    logger().debug("Socket::inject_delay: sleep for {}", delay_period);
+    return seastar::sleep(
+      std::chrono::milliseconds((int)(delay_period * 1000.0)));
+  }
+  return seastar::now();
+}
+
+void inject_failure()
+{
+  if (local_conf()->ms_inject_socket_failures) {
+    uint64_t rand =
+      ceph::util::generate_random_number<uint64_t>(1, RAND_MAX);
+    if (rand % local_conf()->ms_inject_socket_failures == 0) {
+      logger().warn("Socket::inject_failure: injecting socket failure");
+      throw std::system_error(make_error_code(
+        error::negotiation_failure));
+    }
+  }
+}
+
 } // anonymous namespace
 
-seastar::future<bufferlist> Socket::read(size_t bytes)
+Socket::Socket(
+    seastar::connected_socket &&_socket,
+    side_t _side,
+    uint16_t e_port,
+    construct_tag)
+  : sid{seastar::this_shard_id()},
+    socket(std::move(_socket)),
+    in(socket.input()),
+    // the default buffer size 8192 is too small that may impact our write
+    // performance. see seastar::net::connected_socket::output()
+    out(socket.output(65536)),
+    socket_is_shutdown(false),
+    side(_side),
+    ephemeral_port(e_port)
 {
+  if (local_conf()->ms_tcp_nodelay) {
+    socket.set_nodelay(true);
+  }
+}
+
+Socket::~Socket()
+{
+  assert(seastar::this_shard_id() == sid);
+#ifndef NDEBUG
+  assert(closed);
+#endif
+}
+
+seastar::future<bufferlist>
+Socket::read(size_t bytes)
+{
+  assert(seastar::this_shard_id() == sid);
 #ifdef UNIT_TESTS_BUILT
   return try_trap_pre(next_trap_read).then([bytes, this] {
 #endif
@@ -81,44 +138,103 @@ seastar::future<bufferlist> Socket::read(size_t bytes)
       });
     });
 #ifdef UNIT_TESTS_BUILT
-  }).then([this] (auto buf) {
+  }).then([this](auto buf) {
     return try_trap_post(next_trap_read
-    ).then([buf = std::move(buf)] () mutable {
+    ).then([buf = std::move(buf)]() mutable {
       return std::move(buf);
     });
   });
 #endif
 }
 
-seastar::future<seastar::temporary_buffer<char>>
+seastar::future<bufferptr>
 Socket::read_exactly(size_t bytes) {
+  assert(seastar::this_shard_id() == sid);
 #ifdef UNIT_TESTS_BUILT
   return try_trap_pre(next_trap_read).then([bytes, this] {
 #endif
     if (bytes == 0) {
-      return seastar::make_ready_future<seastar::temporary_buffer<char>>();
+      return seastar::make_ready_future<bufferptr>();
     }
     return in.read_exactly(bytes).then([bytes](auto buf) {
-      if (buf.size() < bytes) {
+      bufferptr ptr(buffer::create(buf.share()));
+      if (ptr.length() < bytes) {
         throw std::system_error(make_error_code(error::read_eof));
       }
       inject_failure();
       return inject_delay(
-      ).then([buf = std::move(buf)] () mutable {
-        return seastar::make_ready_future<tmp_buf>(std::move(buf));
+      ).then([ptr = std::move(ptr)]() mutable {
+        return seastar::make_ready_future<bufferptr>(std::move(ptr));
       });
     });
 #ifdef UNIT_TESTS_BUILT
-  }).then([this] (auto buf) {
+  }).then([this](auto ptr) {
     return try_trap_post(next_trap_read
-    ).then([buf = std::move(buf)] () mutable {
-      return std::move(buf);
+    ).then([ptr = std::move(ptr)]() mutable {
+      return std::move(ptr);
     });
   });
 #endif
 }
 
-void Socket::shutdown() {
+seastar::future<>
+Socket::write(bufferlist buf)
+{
+  assert(seastar::this_shard_id() == sid);
+#ifdef UNIT_TESTS_BUILT
+  return try_trap_pre(next_trap_write
+  ).then([buf = std::move(buf), this]() mutable {
+#endif
+    inject_failure();
+    return inject_delay(
+    ).then([buf = std::move(buf), this]() mutable {
+      packet p(std::move(buf));
+      return out.write(std::move(p));
+    });
+#ifdef UNIT_TESTS_BUILT
+  }).then([this] {
+    return try_trap_post(next_trap_write);
+  });
+#endif
+}
+
+seastar::future<>
+Socket::flush()
+{
+  assert(seastar::this_shard_id() == sid);
+  inject_failure();
+  return inject_delay().then([this] {
+    return out.flush();
+  });
+}
+
+seastar::future<>
+Socket::write_flush(bufferlist buf)
+{
+  assert(seastar::this_shard_id() == sid);
+#ifdef UNIT_TESTS_BUILT
+  return try_trap_pre(next_trap_write
+  ).then([buf = std::move(buf), this]() mutable {
+#endif
+    inject_failure();
+    return inject_delay(
+    ).then([buf = std::move(buf), this]() mutable {
+      packet p(std::move(buf));
+      return out.write(std::move(p)
+      ).then([this] {
+        return out.flush();
+      });
+    });
+#ifdef UNIT_TESTS_BUILT
+  }).then([this] {
+    return try_trap_post(next_trap_write);
+  });
+#endif
+}
+
+void Socket::shutdown()
+{
+  assert(seastar::this_shard_id() == sid);
   socket_is_shutdown = true;
   socket.shutdown_input();
   socket.shutdown_output();
@@ -127,19 +243,22 @@ void Socket::shutdown() {
 static inline seastar::future<>
 close_and_handle_errors(seastar::output_stream<char>& out)
 {
-  return out.close().handle_exception_type([] (const std::system_error& e) {
+  return out.close().handle_exception_type([](const std::system_error& e) {
     if (e.code() != std::errc::broken_pipe &&
         e.code() != std::errc::connection_reset) {
-      logger().error("Socket::close(): unexpected error {}", e);
+      logger().error("Socket::close(): unexpected error {}", e.what());
       ceph_abort();
     }
     // can happen when out is already shutdown, ignore
   });
 }
 
-seastar::future<> Socket::close() {
+seastar::future<>
+Socket::close()
+{
+  assert(seastar::this_shard_id() == sid);
 #ifndef NDEBUG
-  ceph_assert(!closed);
+  ceph_assert_always(!closed);
   closed = true;
 #endif
   return seastar::when_all_succeed(
@@ -148,39 +267,55 @@ seastar::future<> Socket::close() {
     close_and_handle_errors(out)
   ).then_unpack([] {
     return seastar::make_ready_future<>();
-  }).handle_exception([] (auto eptr) {
-    logger().error("Socket::close(): unexpected exception {}", eptr);
+  }).handle_exception([](auto eptr) {
+    const char *e_what;
+    try {
+      std::rethrow_exception(eptr);
+    } catch (std::exception &e) {
+      e_what = e.what();
+    }
+    logger().error("Socket::close(): unexpected exception {}", e_what);
     ceph_abort();
   });
 }
 
-seastar::future<> Socket::inject_delay () {
-  if (float delay_period = local_conf()->ms_inject_internal_delays;
-      delay_period) {
-    logger().debug("Socket::inject_delay: sleep for {}", delay_period);
-    return seastar::sleep(
-      std::chrono::milliseconds((int)(delay_period * 1000.0)));
-  }
-  return seastar::now();
+seastar::future<SocketRef>
+Socket::connect(const entity_addr_t &peer_addr)
+{
+  inject_failure();
+  return inject_delay(
+  ).then([peer_addr] {
+    return seastar::connect(peer_addr.in4_addr());
+  }).then([peer_addr](seastar::connected_socket socket) {
+    auto ret = std::make_unique<Socket>(
+      std::move(socket), side_t::connector, 0, construct_tag{});
+    logger().debug("Socket::connect(): connected to {}, socket {}",
+                   peer_addr, fmt::ptr(ret));
+    return ret;
+  });
 }
 
-void Socket::inject_failure()
-{
-  if (local_conf()->ms_inject_socket_failures) {
-    uint64_t rand =
-      ceph::util::generate_random_number<uint64_t>(1, RAND_MAX);
-    if (rand % local_conf()->ms_inject_socket_failures == 0) {
-      if (true) {
-        logger().warn("Socket::inject_failure: injecting socket failure");
-       throw std::system_error(make_error_code(
-         crimson::net::error::negotiation_failure));
-      }
+#ifdef UNIT_TESTS_BUILT
+void Socket::set_trap(bp_type_t type, bp_action_t action, socket_blocker* blocker_) {
+  assert(seastar::this_shard_id() == sid);
+  blocker = blocker_;
+  if (type == bp_type_t::READ) {
+    ceph_assert_always(next_trap_read == bp_action_t::CONTINUE);
+    next_trap_read = action;
+  } else { // type == bp_type_t::WRITE
+    if (next_trap_write == bp_action_t::CONTINUE) {
+      next_trap_write = action;
+    } else if (next_trap_write == bp_action_t::FAULT) {
+      // do_sweep_messages() may combine multiple write events into one socket write
+      ceph_assert_always(action == bp_action_t::FAULT || action == bp_action_t::CONTINUE);
+    } else {
+      ceph_abort();
     }
   }
 }
 
-#ifdef UNIT_TESTS_BUILT
-seastar::future<> Socket::try_trap_pre(bp_action_t& trap) {
+seastar::future<>
+Socket::try_trap_pre(bp_action_t& trap) {
   auto action = trap;
   trap = bp_action_t::CONTINUE;
   switch (action) {
@@ -188,7 +323,7 @@ seastar::future<> Socket::try_trap_pre(bp_action_t& trap) {
     break;
    case bp_action_t::FAULT:
     logger().info("[Test] got FAULT");
-    throw std::system_error(make_error_code(crimson::net::error::negotiation_failure));
+    throw std::system_error(make_error_code(error::negotiation_failure));
    case bp_action_t::BLOCK:
     logger().info("[Test] got BLOCK");
     return blocker->block();
@@ -201,7 +336,8 @@ seastar::future<> Socket::try_trap_pre(bp_action_t& trap) {
   return seastar::make_ready_future<>();
 }
 
-seastar::future<> Socket::try_trap_post(bp_action_t& trap) {
+seastar::future<>
+Socket::try_trap_post(bp_action_t& trap) {
   auto action = trap;
   trap = bp_action_t::CONTINUE;
   switch (action) {
@@ -216,94 +352,170 @@ seastar::future<> Socket::try_trap_post(bp_action_t& trap) {
   }
   return seastar::make_ready_future<>();
 }
+#endif
 
-void Socket::set_trap(bp_type_t type, bp_action_t action, socket_blocker* blocker_) {
-  blocker = blocker_;
-  if (type == bp_type_t::READ) {
-    ceph_assert(next_trap_read == bp_action_t::CONTINUE);
-    next_trap_read = action;
-  } else { // type == bp_type_t::WRITE
-    if (next_trap_write == bp_action_t::CONTINUE) {
-      next_trap_write = action;
-    } else if (next_trap_write == bp_action_t::FAULT) {
-      // do_sweep_messages() may combine multiple write events into one socket write
-      ceph_assert(action == bp_action_t::FAULT || action == bp_action_t::CONTINUE);
-    } else {
-      ceph_abort();
-    }
-  }
+ShardedServerSocket::ShardedServerSocket(
+    seastar::shard_id sid,
+    bool dispatch_only_on_primary_sid,
+    construct_tag)
+  : primary_sid{sid}, dispatch_only_on_primary_sid{dispatch_only_on_primary_sid}
+{
+}
+
+ShardedServerSocket::~ShardedServerSocket()
+{
+  assert(!listener);
+  // detect whether user have called destroy() properly
+  ceph_assert_always(!service);
 }
-#endif
 
-crimson::net::listen_ertr::future<>
-FixedCPUServerSocket::listen(entity_addr_t addr)
+listen_ertr::future<>
+ShardedServerSocket::listen(entity_addr_t addr)
 {
-  assert(seastar::this_shard_id() == cpu);
-  logger().trace("FixedCPUServerSocket::listen({})...", addr);
-  return container().invoke_on_all([addr] (auto& ss) {
-    ss.addr = addr;
+  ceph_assert_always(seastar::this_shard_id() == primary_sid);
+  logger().debug("ShardedServerSocket({})::listen()...", addr);
+  return this->container().invoke_on_all([addr](auto& ss) {
+    ss.listen_addr = addr;
     seastar::socket_address s_addr(addr.in4_addr());
     seastar::listen_options lo;
     lo.reuse_address = true;
-    lo.set_fixed_cpu(ss.cpu);
+    if (ss.dispatch_only_on_primary_sid) {
+      lo.set_fixed_cpu(ss.primary_sid);
+    }
     ss.listener = seastar::listen(s_addr, lo);
   }).then([] {
     return listen_ertr::now();
   }).handle_exception_type(
-    [addr] (const std::system_error& e) -> listen_ertr::future<> {
+    [addr](const std::system_error& e) -> listen_ertr::future<> {
     if (e.code() == std::errc::address_in_use) {
-      logger().trace("FixedCPUServerSocket::listen({}): address in use", addr);
+      logger().debug("ShardedServerSocket({})::listen(): address in use", addr);
       return crimson::ct_error::address_in_use::make();
     } else if (e.code() == std::errc::address_not_available) {
-      logger().trace("FixedCPUServerSocket::listen({}): address not available",
+      logger().debug("ShardedServerSocket({})::listen(): address not available",
                      addr);
       return crimson::ct_error::address_not_available::make();
     }
-    logger().error("FixedCPUServerSocket::listen({}): "
-                   "got unexpeted error {}", addr, e);
+    logger().error("ShardedServerSocket({})::listen(): "
+                   "got unexpeted error {}", addr, e.what());
     ceph_abort();
   });
 }
 
-seastar::future<> FixedCPUServerSocket::shutdown()
+seastar::future<>
+ShardedServerSocket::accept(accept_func_t &&_fn_accept)
 {
-  assert(seastar::this_shard_id() == cpu);
-  logger().trace("FixedCPUServerSocket({})::shutdown()...", addr);
-  return container().invoke_on_all([] (auto& ss) {
+  ceph_assert_always(seastar::this_shard_id() == primary_sid);
+  logger().debug("ShardedServerSocket({})::accept()...", listen_addr);
+  return this->container().invoke_on_all([_fn_accept](auto &ss) {
+    assert(ss.listener);
+    ss.fn_accept = _fn_accept;
+    // gate accepting
+    // ShardedServerSocket::shutdown() will drain the continuations in the gate
+    // so ignore the returned future
+    std::ignore = seastar::with_gate(ss.shutdown_gate, [&ss] {
+      return seastar::keep_doing([&ss] {
+        return ss.listener->accept(
+        ).then([&ss](seastar::accept_result accept_result) {
+#ifndef NDEBUG
+          if (ss.dispatch_only_on_primary_sid) {
+            // see seastar::listen_options::set_fixed_cpu()
+            ceph_assert_always(seastar::this_shard_id() == ss.primary_sid);
+          }
+#endif
+          auto [socket, paddr] = std::move(accept_result);
+          entity_addr_t peer_addr;
+          peer_addr.set_sockaddr(&paddr.as_posix_sockaddr());
+          peer_addr.set_type(ss.listen_addr.get_type());
+          SocketRef _socket = std::make_unique<Socket>(
+              std::move(socket), Socket::side_t::acceptor,
+              peer_addr.get_port(), Socket::construct_tag{});
+          logger().debug("ShardedServerSocket({})::accept(): accepted peer {}, "
+                         "socket {}, dispatch_only_on_primary_sid = {}",
+                         ss.listen_addr, peer_addr, fmt::ptr(_socket),
+                         ss.dispatch_only_on_primary_sid);
+          std::ignore = seastar::with_gate(
+              ss.shutdown_gate,
+              [socket=std::move(_socket), peer_addr, &ss]() mutable {
+            return ss.fn_accept(std::move(socket), peer_addr
+            ).handle_exception([&ss, peer_addr](auto eptr) {
+              const char *e_what;
+              try {
+                std::rethrow_exception(eptr);
+              } catch (std::exception &e) {
+                e_what = e.what();
+              }
+              logger().error("ShardedServerSocket({})::accept(): "
+                             "fn_accept(s, {}) got unexpected exception {}",
+                             ss.listen_addr, peer_addr, e_what);
+              ceph_abort();
+            });
+          });
+        });
+      }).handle_exception_type([&ss](const std::system_error& e) {
+        if (e.code() == std::errc::connection_aborted ||
+            e.code() == std::errc::invalid_argument) {
+          logger().debug("ShardedServerSocket({})::accept(): stopped ({})",
+                         ss.listen_addr, e.what());
+        } else {
+          throw;
+        }
+      }).handle_exception([&ss](auto eptr) {
+        const char *e_what;
+        try {
+          std::rethrow_exception(eptr);
+        } catch (std::exception &e) {
+          e_what = e.what();
+        }
+        logger().error("ShardedServerSocket({})::accept(): "
+                       "got unexpected exception {}", ss.listen_addr, e_what);
+        ceph_abort();
+      });
+    });
+  });
+}
+
+seastar::future<>
+ShardedServerSocket::shutdown_destroy()
+{
+  assert(seastar::this_shard_id() == primary_sid);
+  logger().debug("ShardedServerSocket({})::shutdown_destroy()...", listen_addr);
+  // shutdown shards
+  return this->container().invoke_on_all([](auto& ss) {
     if (ss.listener) {
       ss.listener->abort_accept();
     }
     return ss.shutdown_gate.close();
   }).then([this] {
-    return reset();
-  });
-}
-
-seastar::future<> FixedCPUServerSocket::destroy()
-{
-  assert(seastar::this_shard_id() == cpu);
-  return shutdown().then([this] {
-    // we should only construct/stop shards on #0
-    return container().invoke_on(0, [] (auto& ss) {
+    // destroy shards
+    return this->container().invoke_on_all([](auto& ss) {
+      assert(ss.shutdown_gate.is_closed());
+      ss.listen_addr = entity_addr_t();
+      ss.listener.reset();
+    });
+  }).then([this] {
+    // stop the sharded service: we should only construct/stop shards on #0
+    return this->container().invoke_on(0, [](auto& ss) {
       assert(ss.service);
       return ss.service->stop().finally([cleanup = std::move(ss.service)] {});
     });
   });
 }
 
-seastar::future<FixedCPUServerSocket*> FixedCPUServerSocket::create()
+seastar::future<ShardedServerSocket*>
+ShardedServerSocket::create(bool dispatch_only_on_this_shard)
 {
-  auto cpu = seastar::this_shard_id();
-  // we should only construct/stop shards on #0
-  return seastar::smp::submit_to(0, [cpu] {
+  auto primary_sid = seastar::this_shard_id();
+  // start the sharded service: we should only construct/stop shards on #0
+  return seastar::smp::submit_to(0, [primary_sid, dispatch_only_on_this_shard] {
     auto service = std::make_unique<sharded_service_t>();
-    return service->start(cpu, construct_tag{}
-    ).then([service = std::move(service)] () mutable {
+    return service->start(
+        primary_sid, dispatch_only_on_this_shard, construct_tag{}
+    ).then([service = std::move(service)]() mutable {
       auto p_shard = service.get();
       p_shard->local().service = std::move(service);
       return p_shard;
     });
-  }).then([] (auto p_shard) {
+  }).then([](auto p_shard) {
     return &p_shard->local();
   });
 }
index b6125eb8a02a03a60fd39b0d79632e3cdc2f7d49..478f2d630208cc699b4c0aad1a74019f35de6406 100644 (file)
@@ -6,7 +6,6 @@
 #include <seastar/core/gate.hh>
 #include <seastar/core/reactor.hh>
 #include <seastar/core/sharded.hh>
-#include <seastar/net/packet.hh>
 
 #include "include/buffer.h"
 
@@ -22,146 +21,98 @@ namespace crimson::net {
 
 class Socket;
 using SocketRef = std::unique_ptr<Socket>;
+using SocketFRef = seastar::foreign_ptr<SocketRef>;
 
-class Socket
-{
+class Socket {
   struct construct_tag {};
 
- public:
+public:
   // if acceptor side, peer is using a different port (ephemeral_port)
   // if connector side, I'm using a different port (ephemeral_port)
   enum class side_t {
     acceptor,
     connector
   };
+  Socket(seastar::connected_socket &&, side_t, uint16_t e_port, construct_tag);
 
-  Socket(seastar::connected_socket&& _socket, side_t _side, uint16_t e_port, construct_tag)
-    : sid{seastar::this_shard_id()},
-      socket(std::move(_socket)),
-      in(socket.input()),
-      // the default buffer size 8192 is too small that may impact our write
-      // performance. see seastar::net::connected_socket::output()
-      out(socket.output(65536)),
-      socket_is_shutdown(false),
-      side(_side),
-      ephemeral_port(e_port) {}
-
-  ~Socket() {
-#ifndef NDEBUG
-    assert(closed);
-#endif
-  }
+  ~Socket();
 
   Socket(Socket&& o) = delete;
 
-  static seastar::future<SocketRef>
-  connect(const entity_addr_t& peer_addr) {
-    inject_failure();
-    return inject_delay(
-    ).then([peer_addr] {
-      return seastar::connect(peer_addr.in4_addr());
-    }).then([] (seastar::connected_socket socket) {
-      return std::make_unique<Socket>(
-        std::move(socket), side_t::connector, 0, construct_tag{});
-    });
+  seastar::shard_id get_shard_id() const {
+    return sid;
   }
 
-  /// read the requested number of bytes into a bufferlist
-  seastar::future<bufferlist> read(size_t bytes);
-  using tmp_buf = seastar::temporary_buffer<char>;
-  using packet = seastar::net::packet;
-  seastar::future<tmp_buf> read_exactly(size_t bytes);
-
-  seastar::future<> write(packet&& buf) {
-#ifdef UNIT_TESTS_BUILT
-    return try_trap_pre(next_trap_write
-    ).then([buf = std::move(buf), this] () mutable {
-#endif
-      inject_failure();
-      return inject_delay(
-      ).then([buf = std::move(buf), this] () mutable {
-        return out.write(std::move(buf));
-      });
-#ifdef UNIT_TESTS_BUILT
-    }).then([this] {
-      return try_trap_post(next_trap_write);
-    });
-#endif
+  side_t get_side() const {
+    return side;
   }
-  seastar::future<> flush() {
-    inject_failure();
-    return inject_delay().then([this] {
-      return out.flush();
-    });
+
+  uint16_t get_ephemeral_port() const {
+    return ephemeral_port;
   }
-  seastar::future<> write_flush(packet&& buf) {
-#ifdef UNIT_TESTS_BUILT
-    return try_trap_pre(next_trap_write).then([buf = std::move(buf), this] () mutable {
-#endif
-      inject_failure();
-      return inject_delay(
-      ).then([buf = std::move(buf), this] () mutable {
-        return out.write(std::move(buf)).then([this] { return out.flush(); });
-      });
-#ifdef UNIT_TESTS_BUILT
-    }).then([this] {
-      return try_trap_post(next_trap_write);
-    });
-#endif
+
+  seastar::socket_address get_local_address() const {
+    return socket.local_address();
   }
 
   bool is_shutdown() const {
+    assert(seastar::this_shard_id() == sid);
     return socket_is_shutdown;
   }
 
+  // learn my ephemeral_port as connector.
+  // unfortunately, there's no way to identify which port I'm using as
+  // connector with current seastar interface.
+  void learn_ephemeral_port_as_connector(uint16_t port) {
+    assert(side == side_t::connector &&
+           (ephemeral_port == 0 || ephemeral_port == port));
+    ephemeral_port = port;
+  }
+
+  /// read the requested number of bytes into a bufferlist
+  seastar::future<bufferlist> read(size_t bytes);
+
+  seastar::future<bufferptr> read_exactly(size_t bytes);
+
+  seastar::future<> write(bufferlist);
+
+  seastar::future<> flush();
+
+  seastar::future<> write_flush(bufferlist);
+
   // preemptively disable further reads or writes, can only be shutdown once.
   void shutdown();
 
   /// Socket can only be closed once.
   seastar::future<> close();
 
-  static seastar::future<> inject_delay();
+  static seastar::future<SocketRef>
+  connect(const entity_addr_t& peer_addr);
 
-  static void inject_failure();
+  /*
+   * test interfaces
+   */
 
   // shutdown for tests
   void force_shutdown() {
+    assert(seastar::this_shard_id() == sid);
     socket.shutdown_input();
     socket.shutdown_output();
   }
 
   // shutdown input_stream only, for tests
   void force_shutdown_in() {
+    assert(seastar::this_shard_id() == sid);
     socket.shutdown_input();
   }
 
   // shutdown output_stream only, for tests
   void force_shutdown_out() {
+    assert(seastar::this_shard_id() == sid);
     socket.shutdown_output();
   }
 
-  side_t get_side() const {
-    return side;
-  }
-
-  uint16_t get_ephemeral_port() const {
-    return ephemeral_port;
-  }
-
-  // learn my ephemeral_port as connector.
-  // unfortunately, there's no way to identify which port I'm using as
-  // connector with current seastar interface.
-  void learn_ephemeral_port_as_connector(uint16_t port) {
-    assert(side == side_t::connector &&
-           (ephemeral_port == 0 || ephemeral_port == port));
-    ephemeral_port = port;
-  }
-
-  seastar::socket_address get_local_address() const {
-    return socket.local_address();
-  }
-
- private:
+private:
   const seastar::shard_id sid;
   seastar::connected_socket socket;
   seastar::input_stream<char> in;
@@ -181,18 +132,20 @@ class Socket
   } r;
 
 #ifdef UNIT_TESTS_BUILT
- public:
+public:
   void set_trap(bp_type_t type, bp_action_t action, socket_blocker* blocker_);
 
- private:
+private:
+  seastar::future<> try_trap_pre(bp_action_t& trap);
+
+  seastar::future<> try_trap_post(bp_action_t& trap);
+
   bp_action_t next_trap_read = bp_action_t::CONTINUE;
   bp_action_t next_trap_write = bp_action_t::CONTINUE;
   socket_blocker* blocker = nullptr;
-  seastar::future<> try_trap_pre(bp_action_t& trap);
-  seastar::future<> try_trap_post(bp_action_t& trap);
 
 #endif
-  friend class FixedCPUServerSocket;
+  friend class ShardedServerSocket;
 };
 
 using listen_ertr = crimson::errorator<
@@ -200,105 +153,49 @@ using listen_ertr = crimson::errorator<
   crimson::ct_error::address_not_available // https://techoverflow.net/2021/08/06/how-i-fixed-python-oserror-errno-99-cannot-assign-requested-address/
   >;
 
-class FixedCPUServerSocket
-    : public seastar::peering_sharded_service<FixedCPUServerSocket> {
-  const seastar::shard_id cpu;
-  entity_addr_t addr;
-  std::optional<seastar::server_socket> listener;
-  seastar::gate shutdown_gate;
+class ShardedServerSocket
+    : public seastar::peering_sharded_service<ShardedServerSocket> {
+  struct construct_tag {};
 
-  using sharded_service_t = seastar::sharded<FixedCPUServerSocket>;
-  std::unique_ptr<sharded_service_t> service;
+public:
+  ShardedServerSocket(
+      seastar::shard_id sid,
+      bool dispatch_only_on_primary_sid,
+      construct_tag);
 
-  struct construct_tag {};
+  ~ShardedServerSocket();
 
-  static seastar::logger& logger() {
-    return crimson::get_logger(ceph_subsys_ms);
-  }
+  ShardedServerSocket(ShardedServerSocket&&) = delete;
+  ShardedServerSocket(const ShardedServerSocket&) = delete;
+  ShardedServerSocket& operator=(ShardedServerSocket&&) = delete;
+  ShardedServerSocket& operator=(const ShardedServerSocket&) = delete;
 
-  seastar::future<> reset() {
-    return container().invoke_on_all([] (auto& ss) {
-      assert(ss.shutdown_gate.is_closed());
-      ss.addr = entity_addr_t();
-      ss.listener.reset();
-    });
+  bool is_fixed_shard_dispatching() const {
+    return dispatch_only_on_primary_sid;
   }
 
-public:
-  FixedCPUServerSocket(seastar::shard_id cpu, construct_tag) : cpu{cpu} {}
-  ~FixedCPUServerSocket() {
-    assert(!listener);
-    // detect whether user have called destroy() properly
-    ceph_assert(!service);
-  }
+  listen_ertr::future<> listen(entity_addr_t addr);
 
-  FixedCPUServerSocket(FixedCPUServerSocket&&) = delete;
-  FixedCPUServerSocket(const FixedCPUServerSocket&) = delete;
-  FixedCPUServerSocket& operator=(const FixedCPUServerSocket&) = delete;
+  using accept_func_t =
+    std::function<seastar::future<>(SocketRef, entity_addr_t)>;
+  seastar::future<> accept(accept_func_t &&_fn_accept);
 
-  listen_ertr::future<> listen(entity_addr_t addr);
+  seastar::future<> shutdown_destroy();
 
-  // fn_accept should be a nothrow function of type
-  // seastar::future<>(SocketRef, entity_addr_t)
-  template <typename Func>
-  seastar::future<> accept(Func&& fn_accept) {
-    assert(seastar::this_shard_id() == cpu);
-    logger().trace("FixedCPUServerSocket({})::accept()...", addr);
-    return container().invoke_on_all(
-        [fn_accept = std::move(fn_accept)] (auto& ss) mutable {
-      assert(ss.listener);
-      // gate accepting
-      // FixedCPUServerSocket::shutdown() will drain the continuations in the gate
-      // so ignore the returned future
-      std::ignore = seastar::with_gate(ss.shutdown_gate,
-          [&ss, fn_accept = std::move(fn_accept)] () mutable {
-        return seastar::keep_doing([&ss, fn_accept = std::move(fn_accept)] () mutable {
-          return ss.listener->accept().then(
-              [&ss, fn_accept = std::move(fn_accept)]
-              (seastar::accept_result accept_result) mutable {
-            // assert seastar::listen_options::set_fixed_cpu() works
-            assert(seastar::this_shard_id() == ss.cpu);
-            auto [socket, paddr] = std::move(accept_result);
-            entity_addr_t peer_addr;
-            peer_addr.set_sockaddr(&paddr.as_posix_sockaddr());
-            peer_addr.set_type(ss.addr.get_type());
-            SocketRef _socket = std::make_unique<Socket>(
-                std::move(socket), Socket::side_t::acceptor,
-                peer_addr.get_port(), Socket::construct_tag{});
-            std::ignore = seastar::with_gate(ss.shutdown_gate,
-                [socket = std::move(_socket), peer_addr,
-                 &ss, fn_accept = std::move(fn_accept)] () mutable {
-              logger().trace("FixedCPUServerSocket({})::accept(): "
-                             "accepted peer {}", ss.addr, peer_addr);
-              return fn_accept(std::move(socket), peer_addr
-              ).handle_exception([&ss, peer_addr] (auto eptr) {
-                logger().error("FixedCPUServerSocket({})::accept(): "
-                               "fn_accept(s, {}) got unexpected exception {}",
-                               ss.addr, peer_addr, eptr);
-                ceph_abort();
-              });
-            });
-          });
-        }).handle_exception_type([&ss] (const std::system_error& e) {
-          if (e.code() == std::errc::connection_aborted ||
-              e.code() == std::errc::invalid_argument) {
-            logger().trace("FixedCPUServerSocket({})::accept(): stopped ({})",
-                           ss.addr, e);
-          } else {
-            throw;
-          }
-        }).handle_exception([&ss] (auto eptr) {
-          logger().error("FixedCPUServerSocket({})::accept(): "
-                         "got unexpected exception {}", ss.addr, eptr);
-          ceph_abort();
-        });
-      });
-    });
-  }
+  static seastar::future<ShardedServerSocket*> create(
+      bool dispatch_only_on_this_shard);
 
-  seastar::future<> shutdown();
-  seastar::future<> destroy();
-  static seastar::future<FixedCPUServerSocket*> create();
+private:
+  const seastar::shard_id primary_sid;
+  /// XXX: Remove once all infrastructure uses multi-core messenger
+  const bool dispatch_only_on_primary_sid;
+  entity_addr_t listen_addr;
+  std::optional<seastar::server_socket> listener;
+  seastar::gate shutdown_gate;
+  accept_func_t fn_accept;
+
+  using sharded_service_t = seastar::sharded<ShardedServerSocket>;
+  std::unique_ptr<sharded_service_t> service;
 };
 
 } // namespace crimson::net
index 38e2748738f7b2b39980a92f7167c98c8c71bcad..57e5c12c1aed433e89df4c3d4b7c15348b226e08 100644 (file)
@@ -28,8 +28,7 @@ namespace crimson::net {
 
 SocketConnection::SocketConnection(SocketMessenger& messenger,
                                    ChainedDispatchers& dispatchers)
-  : core(messenger.shard_id()),
-    messenger(messenger)
+  : msgr_sid{messenger.get_shard_id()}, messenger(messenger)
 {
   auto ret = create_handlers(dispatchers, *this);
   io_handler = std::move(ret.io_handler);
@@ -37,7 +36,7 @@ SocketConnection::SocketConnection(SocketMessenger& messenger,
 #ifdef UNIT_TESTS_BUILT
   if (messenger.interceptor) {
     interceptor = messenger.interceptor;
-    interceptor->register_conn(*this);
+    interceptor->register_conn(this->get_local_shared_foreign_from_this());
   }
 #endif
 }
@@ -46,45 +45,51 @@ SocketConnection::~SocketConnection() {}
 
 bool SocketConnection::is_connected() const
 {
-  assert(seastar::this_shard_id() == shard_id());
   return io_handler->is_connected();
 }
 
 #ifdef UNIT_TESTS_BUILT
-bool SocketConnection::is_closed() const
+bool SocketConnection::is_protocol_ready() const
 {
-  assert(seastar::this_shard_id() == shard_id());
+  assert(seastar::this_shard_id() == msgr_sid);
+  return protocol->is_ready();
+}
+
+bool SocketConnection::is_protocol_standby() const {
+  assert(seastar::this_shard_id() == msgr_sid);
+  return protocol->is_standby();
+}
+
+bool SocketConnection::is_protocol_closed() const
+{
+  assert(seastar::this_shard_id() == msgr_sid);
   return protocol->is_closed();
 }
 
-bool SocketConnection::is_closed_clean() const
+bool SocketConnection::is_protocol_closed_clean() const
 {
-  assert(seastar::this_shard_id() == shard_id());
+  assert(seastar::this_shard_id() == msgr_sid);
   return protocol->is_closed_clean();
 }
 
 #endif
 bool SocketConnection::peer_wins() const
 {
+  assert(seastar::this_shard_id() == msgr_sid);
   return (messenger.get_myaddr() > peer_addr || policy.server);
 }
 
-seastar::future<> SocketConnection::send(MessageURef msg)
+seastar::future<> SocketConnection::send(MessageURef _msg)
 {
-  return seastar::smp::submit_to(
-    shard_id(),
-    [this, msg=std::move(msg)]() mutable {
-      return io_handler->send(std::move(msg));
-    });
+  // may be invoked from any core
+  MessageFRef msg = seastar::make_foreign(std::move(_msg));
+  return io_handler->send(std::move(msg));
 }
 
 seastar::future<> SocketConnection::send_keepalive()
 {
-  return seastar::smp::submit_to(
-    shard_id(),
-    [this] {
-      return io_handler->send_keepalive();
-    });
+  // may be invoked from any core
+  return io_handler->send_keepalive();
 }
 
 SocketConnection::clock_t::time_point
@@ -106,7 +111,6 @@ void SocketConnection::set_last_keepalive_ack(clock_t::time_point when)
 
 void SocketConnection::mark_down()
 {
-  assert(seastar::this_shard_id() == shard_id());
   io_handler->mark_down();
 }
 
@@ -114,50 +118,103 @@ void
 SocketConnection::start_connect(const entity_addr_t& _peer_addr,
                                 const entity_name_t& _peer_name)
 {
+  assert(seastar::this_shard_id() == msgr_sid);
   protocol->start_connect(_peer_addr, _peer_name);
 }
 
 void
-SocketConnection::start_accept(SocketRef&& sock,
+SocketConnection::start_accept(SocketFRef&& sock,
                                const entity_addr_t& _peer_addr)
 {
+  assert(seastar::this_shard_id() == msgr_sid);
   protocol->start_accept(std::move(sock), _peer_addr);
 }
 
 seastar::future<>
 SocketConnection::close_clean_yielded()
 {
+  assert(seastar::this_shard_id() == msgr_sid);
   return protocol->close_clean_yielded();
 }
 
-seastar::shard_id SocketConnection::shard_id() const {
-  return core;
-}
-
 seastar::socket_address SocketConnection::get_local_address() const {
+  assert(seastar::this_shard_id() == msgr_sid);
   return socket->get_local_address();
 }
 
 ConnectionRef
 SocketConnection::get_local_shared_foreign_from_this()
 {
-  assert(seastar::this_shard_id() == shard_id());
+  assert(seastar::this_shard_id() == msgr_sid);
   return make_local_shared_foreign(
       seastar::make_foreign(shared_from_this()));
 }
 
+SocketMessenger &
+SocketConnection::get_messenger() const
+{
+  assert(seastar::this_shard_id() == msgr_sid);
+  return messenger;
+}
+
+seastar::shard_id
+SocketConnection::get_messenger_shard_id() const
+{
+  return msgr_sid;
+}
+
+void SocketConnection::set_peer_type(entity_type_t peer_type) {
+  assert(seastar::this_shard_id() == msgr_sid);
+  // it is not allowed to assign an unknown value when the current
+  // value is known
+  assert(!(peer_type == 0 &&
+           peer_name.type() != 0));
+  // it is not allowed to assign a different known value when the
+  // current value is also known.
+  assert(!(peer_type != 0 &&
+           peer_name.type() != 0 &&
+           peer_type != peer_name.type()));
+  peer_name._type = peer_type;
+}
+
+void SocketConnection::set_peer_id(int64_t peer_id) {
+  assert(seastar::this_shard_id() == msgr_sid);
+  // it is not allowed to assign an unknown value when the current
+  // value is known
+  assert(!(peer_id == entity_name_t::NEW &&
+           peer_name.num() != entity_name_t::NEW));
+  // it is not allowed to assign a different known value when the
+  // current value is also known.
+  assert(!(peer_id != entity_name_t::NEW &&
+           peer_name.num() != entity_name_t::NEW &&
+           peer_id != peer_name.num()));
+  peer_name._num = peer_id;
+}
+
+void SocketConnection::set_features(uint64_t f) {
+  assert(seastar::this_shard_id() == msgr_sid);
+  features = f;
+}
+
+void SocketConnection::set_socket(Socket *s) {
+  assert(seastar::this_shard_id() == msgr_sid);
+  socket = s;
+}
+
 void SocketConnection::print(ostream& out) const {
-    out << (void*)this << " ";
-    messenger.print(out);
-    if (!socket) {
-      out << " >> " << get_peer_name() << " " << peer_addr;
-    } else if (socket->get_side() == Socket::side_t::acceptor) {
-      out << " >> " << get_peer_name() << " " << peer_addr
-          << "@" << socket->get_ephemeral_port();
-    } else { // socket->get_side() == Socket::side_t::connector
-      out << "@" << socket->get_ephemeral_port()
-          << " >> " << get_peer_name() << " " << peer_addr;
-    }
+  out << (void*)this << " ";
+  messenger.print(out);
+  if (seastar::this_shard_id() != msgr_sid) {
+    out << " >> " << get_peer_name() << " " << peer_addr;
+  } else if (!socket) {
+    out << " >> " << get_peer_name() << " " << peer_addr;
+  } else if (socket->get_side() == Socket::side_t::acceptor) {
+    out << " >> " << get_peer_name() << " " << peer_addr
+        << "@" << socket->get_ephemeral_port();
+  } else { // socket->get_side() == Socket::side_t::connector
+    out << "@" << socket->get_ephemeral_port()
+        << " >> " << get_peer_name() << " " << peer_addr;
+  }
 }
 
 } // namespace crimson::net
index aa791b6e1701686c26006ae312a822070abe59ca..823d6c574dad7b8f7962ffe68cbe500c0b9c443c 100644 (file)
@@ -25,6 +25,7 @@ namespace crimson::net {
 
 class ProtocolV2;
 class SocketMessenger;
+class SocketConnection;
 using SocketConnectionRef = seastar::shared_ptr<SocketConnection>;
 
 #ifdef UNIT_TESTS_BUILT
@@ -35,6 +36,8 @@ class Interceptor;
  * ConnectionHandler
  *
  * The interface class to implement Connection, called by SocketConnection.
+ *
+ * The operations must be done in get_shard_id().
  */
 class ConnectionHandler {
 public:
@@ -47,9 +50,11 @@ public:
   ConnectionHandler &operator=(const ConnectionHandler &) = delete;
   ConnectionHandler &operator=(ConnectionHandler &&) = delete;
 
+  virtual seastar::shard_id get_shard_id() const = 0;
+
   virtual bool is_connected() const = 0;
 
-  virtual seastar::future<> send(MessageURef) = 0;
+  virtual seastar::future<> send(MessageFRef) = 0;
 
   virtual seastar::future<> send_keepalive() = 0;
 
@@ -66,39 +71,20 @@ protected:
 };
 
 class SocketConnection : public Connection {
-  const seastar::shard_id core;
-
-  SocketMessenger& messenger;
-
-  std::unique_ptr<ConnectionHandler> io_handler;
-
-  std::unique_ptr<ProtocolV2> protocol;
-
-  SocketRef socket;
-
-  entity_name_t peer_name = {0, entity_name_t::NEW};
-
-  entity_addr_t peer_addr;
-
-  // which of the peer_addrs we're connecting to (as client)
-  // or should reconnect to (as peer)
-  entity_addr_t target_addr;
-
-  uint64_t features = 0;
-
-  ceph::net::Policy<crimson::common::Throttle> policy;
-
-  uint64_t peer_global_id = 0;
-
-  std::unique_ptr<user_private_t> user_private;
-
- // Connection interfaces, public to users
+ /*
+  * Connection interfaces, public to users
+  * Working in ConnectionHandler::get_shard_id()
+  */
  public:
   SocketConnection(SocketMessenger& messenger,
                    ChainedDispatchers& dispatchers);
 
   ~SocketConnection() override;
 
+  const seastar::shard_id get_shard_id() const override {
+    return io_handler->get_shard_id();
+  }
+
   const entity_name_t &get_peer_name() const override {
     return peer_name;
   }
@@ -145,7 +131,10 @@ class SocketConnection : public Connection {
 
   void print(std::ostream& out) const override;
 
- // public to SocketMessenger
+ /*
+  * Public to SocketMessenger
+  * Working in SocketMessenger::get_shard_id();
+  */
  public:
   /// start a handshake from the client's perspective,
   /// only call when SocketConnection first construct
@@ -154,61 +143,41 @@ class SocketConnection : public Connection {
 
   /// start a handshake from the server's perspective,
   /// only call when SocketConnection first construct
-  void start_accept(SocketRef&& socket,
+  void start_accept(SocketFRef&& socket,
                     const entity_addr_t& peer_addr);
 
   seastar::future<> close_clean_yielded();
 
   seastar::socket_address get_local_address() const;
 
-  SocketMessenger &get_messenger() const {
-    return messenger;
-  }
+  seastar::shard_id get_messenger_shard_id() const;
+
+  SocketMessenger &get_messenger() const;
 
   ConnectionRef get_local_shared_foreign_from_this();
 
 private:
-  seastar::shard_id shard_id() const;
-
-  void set_peer_type(entity_type_t peer_type) {
-    // it is not allowed to assign an unknown value when the current
-    // value is known
-    assert(!(peer_type == 0 &&
-             peer_name.type() != 0));
-    // it is not allowed to assign a different known value when the
-    // current value is also known.
-    assert(!(peer_type != 0 &&
-             peer_name.type() != 0 &&
-             peer_type != peer_name.type()));
-    peer_name._type = peer_type;
-  }
+  void set_peer_type(entity_type_t peer_type);
 
-  void set_peer_id(int64_t peer_id) {
-    // it is not allowed to assign an unknown value when the current
-    // value is known
-    assert(!(peer_id == entity_name_t::NEW &&
-             peer_name.num() != entity_name_t::NEW));
-    // it is not allowed to assign a different known value when the
-    // current value is also known.
-    assert(!(peer_id != entity_name_t::NEW &&
-             peer_name.num() != entity_name_t::NEW &&
-             peer_id != peer_name.num()));
-    peer_name._num = peer_id;
-  }
+  void set_peer_id(int64_t peer_id);
 
   void set_peer_name(entity_name_t name) {
     set_peer_type(name.type());
     set_peer_id(name.num());
   }
 
-  void set_features(uint64_t f) {
-    features = f;
-  }
+  void set_features(uint64_t f);
+
+  void set_socket(Socket *s);
 
 #ifdef UNIT_TESTS_BUILT
-  bool is_closed_clean() const override;
+  bool is_protocol_ready() const override;
+
+  bool is_protocol_standby() const override;
 
-  bool is_closed() const override;
+  bool is_protocol_closed_clean() const override;
+
+  bool is_protocol_closed() const override;
 
   // peer wins if myaddr > peeraddr
   bool peer_wins() const override;
@@ -219,6 +188,42 @@ private:
   bool peer_wins() const;
 #endif
 
+private:
+  const seastar::shard_id msgr_sid;
+
+  /*
+   * Core owner is messenger core, may allow to access from the I/O core.
+   */
+  SocketMessenger& messenger;
+
+  std::unique_ptr<ProtocolV2> protocol;
+
+  Socket *socket = nullptr;
+
+  entity_name_t peer_name = {0, entity_name_t::NEW};
+
+  entity_addr_t peer_addr;
+
+  // which of the peer_addrs we're connecting to (as client)
+  // or should reconnect to (as peer)
+  entity_addr_t target_addr;
+
+  uint64_t features = 0;
+
+  ceph::net::Policy<crimson::common::Throttle> policy;
+
+  uint64_t peer_global_id = 0;
+
+  /*
+   * Core owner is I/O core (mutable).
+   */
+  std::unique_ptr<ConnectionHandler> io_handler;
+
+  /*
+   * Core owner is up to the connection user.
+   */
+  std::unique_ptr<user_private_t> user_private;
+
   friend class IOHandler;
   friend class ProtocolV2;
   friend class FrameAssemblerV2;
index a112b50800d4a0f6c6daca0127aa209496485112..382d08f986ce94bf2cc1c8f38ea39d6a756d9d5a 100644 (file)
@@ -34,21 +34,25 @@ namespace crimson::net {
 
 SocketMessenger::SocketMessenger(const entity_name_t& myname,
                                  const std::string& logic_name,
-                                 uint32_t nonce)
-  : master_sid{seastar::this_shard_id()},
+                                 uint32_t nonce,
+                                 bool dispatch_only_on_this_shard)
+  : sid{seastar::this_shard_id()},
     logic_name{logic_name},
     nonce{nonce},
+    dispatch_only_on_sid{dispatch_only_on_this_shard},
     my_name{myname}
 {}
 
 SocketMessenger::~SocketMessenger()
 {
   logger().debug("~SocketMessenger: {}", logic_name);
+  ceph_assert_always(seastar::this_shard_id() == sid);
   ceph_assert(!listener);
 }
 
 bool SocketMessenger::set_addr_unknowns(const entity_addrvec_t &addrs)
 {
+  assert(seastar::this_shard_id() == sid);
   bool ret = false;
 
   entity_addrvec_t newaddrs = my_addrs;
@@ -76,7 +80,7 @@ bool SocketMessenger::set_addr_unknowns(const entity_addrvec_t &addrs)
 
 void SocketMessenger::set_myaddrs(const entity_addrvec_t& addrs)
 {
-  assert(seastar::this_shard_id() == master_sid);
+  assert(seastar::this_shard_id() == sid);
   my_addrs = addrs;
   for (auto& addr : my_addrs.v) {
     addr.nonce = nonce;
@@ -86,12 +90,12 @@ void SocketMessenger::set_myaddrs(const entity_addrvec_t& addrs)
 crimson::net::listen_ertr::future<>
 SocketMessenger::do_listen(const entity_addrvec_t& addrs)
 {
-  assert(seastar::this_shard_id() == master_sid);
   ceph_assert(addrs.front().get_family() == AF_INET);
   set_myaddrs(addrs);
   return seastar::futurize_invoke([this] {
     if (!listener) {
-      return FixedCPUServerSocket::create().then([this] (auto _listener) {
+      return ShardedServerSocket::create(dispatch_only_on_sid
+      ).then([this] (auto _listener) {
         listener = _listener;
       });
     } else {
@@ -161,6 +165,7 @@ SocketMessenger::try_bind(const entity_addrvec_t& addrs,
 SocketMessenger::bind_ertr::future<>
 SocketMessenger::bind(const entity_addrvec_t& addrs)
 {
+  assert(seastar::this_shard_id() == sid);
   using crimson::common::local_conf;
   return seastar::do_with(int64_t{local_conf()->ms_bind_retry_count},
                           [this, addrs] (auto& count) {
@@ -204,9 +209,19 @@ SocketMessenger::bind(const entity_addrvec_t& addrs)
   });
 }
 
+seastar::future<> SocketMessenger::accept(
+    SocketFRef &&socket, const entity_addr_t &peer_addr)
+{
+  assert(seastar::this_shard_id() == sid);
+  SocketConnectionRef conn =
+    seastar::make_shared<SocketConnection>(*this, dispatchers);
+  conn->start_accept(std::move(socket), peer_addr);
+  return seastar::now();
+}
+
 seastar::future<> SocketMessenger::start(
     const dispatchers_t& _dispatchers) {
-  assert(seastar::this_shard_id() == master_sid);
+  assert(seastar::this_shard_id() == sid);
 
   dispatchers.assign(_dispatchers);
   if (listener) {
@@ -214,13 +229,17 @@ seastar::future<> SocketMessenger::start(
     ceph_assert(get_myaddr().is_msgr2());
     ceph_assert(get_myaddr().get_port() > 0);
 
-    return listener->accept([this] (SocketRef socket, entity_addr_t peer_addr) {
-      assert(seastar::this_shard_id() == master_sid);
+    return listener->accept([this](SocketRef _socket, entity_addr_t peer_addr) {
       assert(get_myaddr().is_msgr2());
-      SocketConnectionRef conn =
-        seastar::make_shared<SocketConnection>(*this, dispatchers);
-      conn->start_accept(std::move(socket), peer_addr);
-      return seastar::now();
+      SocketFRef socket = seastar::make_foreign(std::move(_socket));
+      if (listener->is_fixed_shard_dispatching()) {
+        return accept(std::move(socket), peer_addr);
+      } else {
+        return seastar::smp::submit_to(sid,
+            [this, peer_addr, socket = std::move(socket)]() mutable {
+          return accept(std::move(socket), peer_addr);
+        });
+      }
     });
   }
   return seastar::now();
@@ -229,7 +248,7 @@ seastar::future<> SocketMessenger::start(
 crimson::net::ConnectionRef
 SocketMessenger::connect(const entity_addr_t& peer_addr, const entity_name_t& peer_name)
 {
-  assert(seastar::this_shard_id() == master_sid);
+  assert(seastar::this_shard_id() == sid);
 
   // make sure we connect to a valid peer_addr
   if (!peer_addr.is_msgr2()) {
@@ -249,13 +268,13 @@ SocketMessenger::connect(const entity_addr_t& peer_addr, const entity_name_t& pe
 
 seastar::future<> SocketMessenger::shutdown()
 {
-  assert(seastar::this_shard_id() == master_sid);
+  assert(seastar::this_shard_id() == sid);
   return seastar::futurize_invoke([this] {
     assert(dispatchers.empty());
     if (listener) {
       auto d_listener = listener;
       listener = nullptr;
-      return d_listener->destroy();
+      return d_listener->shutdown_destroy();
     } else {
       return seastar::now();
     }
@@ -306,7 +325,7 @@ void SocketMessenger::learned_addr(
     const entity_addr_t &peer_addr_for_me,
     const SocketConnection& conn)
 {
-  assert(seastar::this_shard_id() == master_sid);
+  assert(seastar::this_shard_id() == sid);
   if (!need_addr) {
     if ((!get_myaddr().is_any() &&
          get_myaddr().get_type() != peer_addr_for_me.get_type()) ||
@@ -363,34 +382,40 @@ void SocketMessenger::learned_addr(
 
 SocketPolicy SocketMessenger::get_policy(entity_type_t peer_type) const
 {
+  assert(seastar::this_shard_id() == sid);
   return policy_set.get(peer_type);
 }
 
 SocketPolicy SocketMessenger::get_default_policy() const
 {
+  assert(seastar::this_shard_id() == sid);
   return policy_set.get_default();
 }
 
 void SocketMessenger::set_default_policy(const SocketPolicy& p)
 {
+  assert(seastar::this_shard_id() == sid);
   policy_set.set_default(p);
 }
 
 void SocketMessenger::set_policy(entity_type_t peer_type,
                                 const SocketPolicy& p)
 {
+  assert(seastar::this_shard_id() == sid);
   policy_set.set(peer_type, p);
 }
 
 void SocketMessenger::set_policy_throttler(entity_type_t peer_type,
                                           Throttle* throttle)
 {
+  assert(seastar::this_shard_id() == sid);
   // only byte throttler is used in OSD
   policy_set.set_throttlers(peer_type, throttle, nullptr);
 }
 
 crimson::net::SocketConnectionRef SocketMessenger::lookup_conn(const entity_addr_t& addr)
 {
+  assert(seastar::this_shard_id() == sid);
   if (auto found = connections.find(addr);
       found != connections.end()) {
     return found->second;
@@ -401,16 +426,19 @@ crimson::net::SocketConnectionRef SocketMessenger::lookup_conn(const entity_addr
 
 void SocketMessenger::accept_conn(SocketConnectionRef conn)
 {
+  assert(seastar::this_shard_id() == sid);
   accepting_conns.insert(conn);
 }
 
 void SocketMessenger::unaccept_conn(SocketConnectionRef conn)
 {
+  assert(seastar::this_shard_id() == sid);
   accepting_conns.erase(conn);
 }
 
 void SocketMessenger::register_conn(SocketConnectionRef conn)
 {
+  assert(seastar::this_shard_id() == sid);
   auto [i, added] = connections.emplace(conn->get_peer_addr(), conn);
   std::ignore = i;
   ceph_assert(added);
@@ -418,6 +446,7 @@ void SocketMessenger::register_conn(SocketConnectionRef conn)
 
 void SocketMessenger::unregister_conn(SocketConnectionRef conn)
 {
+  assert(seastar::this_shard_id() == sid);
   ceph_assert(conn);
   auto found = connections.find(conn->get_peer_addr());
   ceph_assert(found != connections.end());
@@ -427,11 +456,13 @@ void SocketMessenger::unregister_conn(SocketConnectionRef conn)
 
 void SocketMessenger::closing_conn(SocketConnectionRef conn)
 {
+  assert(seastar::this_shard_id() == sid);
   closing_conns.push_back(conn);
 }
 
 void SocketMessenger::closed_conn(SocketConnectionRef conn)
 {
+  assert(seastar::this_shard_id() == sid);
   for (auto it = closing_conns.begin();
        it != closing_conns.end();) {
     if (*it == conn) {
@@ -444,6 +475,7 @@ void SocketMessenger::closed_conn(SocketConnectionRef conn)
 
 uint32_t SocketMessenger::get_global_seq(uint32_t old)
 {
+  assert(seastar::this_shard_id() == sid);
   if (old > global_seq) {
     global_seq = old;
   }
index 4eebaab3080021dce7072faebf54a22465e16c8c..e4ac631846df7b80d1df73550d457b1b2457d128 100644 (file)
 
 namespace crimson::net {
 
-class FixedCPUServerSocket;
+class ShardedServerSocket;
 
 class SocketMessenger final : public Messenger {
-  const seastar::shard_id master_sid;
-  // Distinguish messengers with meaningful names for debugging
-  const std::string logic_name;
-  const uint32_t nonce;
-
-  entity_name_t my_name;
-  entity_addrvec_t my_addrs;
-  crimson::auth::AuthClient* auth_client = nullptr;
-  crimson::auth::AuthServer* auth_server = nullptr;
-
-  FixedCPUServerSocket* listener = nullptr;
-  ChainedDispatchers dispatchers;
-  std::map<entity_addr_t, SocketConnectionRef> connections;
-  std::set<SocketConnectionRef> accepting_conns;
-  std::vector<SocketConnectionRef> closing_conns;
-  ceph::net::PolicySet<Throttle> policy_set;
-  // specifying we haven't learned our addr; set false when we find it.
-  bool need_addr = true;
-  uint32_t global_seq = 0;
-  bool started = false;
-  seastar::promise<> shutdown_promise;
-
-  listen_ertr::future<> do_listen(const entity_addrvec_t& addr);
-  /// try to bind to the first unused port of given address
-  bind_ertr::future<> try_bind(const entity_addrvec_t& addr,
-                               uint32_t min_port, uint32_t max_port);
-
-
- public:
+// Messenger public interfaces
+public:
   SocketMessenger(const entity_name_t& myname,
                   const std::string& logic_name,
-                  uint32_t nonce);
+                  uint32_t nonce,
+                  bool dispatch_only_on_this_shard);
+
   ~SocketMessenger() override;
 
   const entity_name_t &get_myname() const override {
@@ -76,18 +51,18 @@ class SocketMessenger final : public Messenger {
 
   void set_myaddrs(const entity_addrvec_t& addr) override;
 
+  bool set_addr_unknowns(const entity_addrvec_t &addr) override;
+
   void set_auth_client(crimson::auth::AuthClient *ac) override {
+    assert(seastar::this_shard_id() == sid);
     auth_client = ac;
   }
 
   void set_auth_server(crimson::auth::AuthServer *as) override {
+    assert(seastar::this_shard_id() == sid);
     auth_server = as;
   }
 
-
-  bool set_addr_unknowns(const entity_addrvec_t &addr) override;
-  // Messenger interfaces are assumed to be called from its own shard, but its
-  // behavior should be symmetric when called from any shard.
   bind_ertr::future<> bind(const entity_addrvec_t& addr) override;
 
   seastar::future<> start(const dispatchers_t& dispatchers) override;
@@ -96,20 +71,23 @@ class SocketMessenger final : public Messenger {
                         const entity_name_t& peer_name) override;
 
   bool owns_connection(Connection &conn) const override {
+    assert(seastar::this_shard_id() == sid);
     return this == &static_cast<SocketConnection&>(conn).get_messenger();
   }
 
   // can only wait once
   seastar::future<> wait() override {
-    assert(seastar::this_shard_id() == master_sid);
+    assert(seastar::this_shard_id() == sid);
     return shutdown_promise.get_future();
   }
 
   void stop() override {
+    assert(seastar::this_shard_id() == sid);
     dispatchers.clear();
   }
 
   bool is_started() const override {
+    assert(seastar::this_shard_id() == sid);
     return !dispatchers.empty();
   }
 
@@ -131,10 +109,17 @@ class SocketMessenger final : public Messenger {
 
   void set_policy_throttler(entity_type_t peer_type, Throttle* throttle) override;
 
- public:
-  crimson::auth::AuthClient* get_auth_client() const { return auth_client; }
+// SocketMessenger public interfaces
+public:
+  crimson::auth::AuthClient* get_auth_client() const {
+    assert(seastar::this_shard_id() == sid);
+    return auth_client;
+  }
 
-  crimson::auth::AuthServer* get_auth_server() const { return auth_server; }
+  crimson::auth::AuthServer* get_auth_server() const {
+    assert(seastar::this_shard_id() == sid);
+    return auth_server;
+  }
 
   uint32_t get_global_seq(uint32_t old=0);
 
@@ -142,16 +127,21 @@ class SocketMessenger final : public Messenger {
                     const SocketConnection& conn);
 
   SocketConnectionRef lookup_conn(const entity_addr_t& addr);
+
   void accept_conn(SocketConnectionRef);
+
   void unaccept_conn(SocketConnectionRef);
+
   void register_conn(SocketConnectionRef);
+
   void unregister_conn(SocketConnectionRef);
+
   void closing_conn(SocketConnectionRef);
+
   void closed_conn(SocketConnectionRef);
 
-  seastar::shard_id shard_id() const {
-    assert(seastar::this_shard_id() == master_sid);
-    return master_sid;
+  seastar::shard_id get_shard_id() const {
+    return sid;
   }
 
 #ifdef UNIT_TESTS_BUILT
@@ -161,6 +151,38 @@ class SocketMessenger final : public Messenger {
 
   Interceptor *interceptor = nullptr;
 #endif
+
+private:
+  seastar::future<> accept(SocketFRef &&, const entity_addr_t &);
+
+  listen_ertr::future<> do_listen(const entity_addrvec_t& addr);
+
+  /// try to bind to the first unused port of given address
+  bind_ertr::future<> try_bind(const entity_addrvec_t& addr,
+                               uint32_t min_port, uint32_t max_port);
+
+  const seastar::shard_id sid;
+  // Distinguish messengers with meaningful names for debugging
+  const std::string logic_name;
+  const uint32_t nonce;
+  const bool dispatch_only_on_sid;
+
+  entity_name_t my_name;
+  entity_addrvec_t my_addrs;
+  crimson::auth::AuthClient* auth_client = nullptr;
+  crimson::auth::AuthServer* auth_server = nullptr;
+
+  ShardedServerSocket *listener = nullptr;
+  ChainedDispatchers dispatchers;
+  std::map<entity_addr_t, SocketConnectionRef> connections;
+  std::set<SocketConnectionRef> accepting_conns;
+  std::vector<SocketConnectionRef> closing_conns;
+  ceph::net::PolicySet<Throttle> policy_set;
+  // specifying we haven't learned our addr; set false when we find it.
+  bool need_addr = true;
+  uint32_t global_seq = 0;
+  bool started = false;
+  seastar::promise<> shutdown_promise;
 };
 
 } // namespace crimson::net
index b13d40c8f7318d720ed0445ac37ab4e1ee8f7657..1e4af3baa7dfb52f1e3df0091c3ae4fed79bedba 100644 (file)
@@ -13,7 +13,7 @@ namespace {
 namespace crimson::net {
 
 seastar::future<>
-ChainedDispatchers::ms_dispatch(crimson::net::ConnectionRef conn,
+ChainedDispatchers::ms_dispatch(ConnectionRef conn,
                                 MessageRef m) {
   try {
     for (auto& dispatcher : dispatchers) {
@@ -39,10 +39,29 @@ ChainedDispatchers::ms_dispatch(crimson::net::ConnectionRef conn,
 }
 
 void
-ChainedDispatchers::ms_handle_accept(crimson::net::ConnectionRef conn) {
+ChainedDispatchers::ms_handle_shard_change(
+    ConnectionRef conn,
+    seastar::shard_id new_shard,
+    bool ac) {
   try {
     for (auto& dispatcher : dispatchers) {
-      dispatcher->ms_handle_accept(conn);
+      dispatcher->ms_handle_shard_change(conn, new_shard, ac);
+    }
+  } catch (...) {
+    logger().error("{} got unexpected exception in ms_handle_shard_change() {}",
+                   *conn, std::current_exception());
+    ceph_abort();
+  }
+}
+
+void
+ChainedDispatchers::ms_handle_accept(
+    ConnectionRef conn,
+    seastar::shard_id prv_shard,
+    bool is_replace) {
+  try {
+    for (auto& dispatcher : dispatchers) {
+      dispatcher->ms_handle_accept(conn, prv_shard, is_replace);
     }
   } catch (...) {
     logger().error("{} got unexpected exception in ms_handle_accept() {}",
@@ -52,10 +71,12 @@ ChainedDispatchers::ms_handle_accept(crimson::net::ConnectionRef conn) {
 }
 
 void
-ChainedDispatchers::ms_handle_connect(crimson::net::ConnectionRef conn) {
+ChainedDispatchers::ms_handle_connect(
+    ConnectionRef conn,
+    seastar::shard_id prv_shard) {
   try {
     for(auto& dispatcher : dispatchers) {
-      dispatcher->ms_handle_connect(conn);
+      dispatcher->ms_handle_connect(conn, prv_shard);
     }
   } catch (...) {
     logger().error("{} got unexpected exception in ms_handle_connect() {}",
@@ -65,7 +86,7 @@ ChainedDispatchers::ms_handle_connect(crimson::net::ConnectionRef conn) {
 }
 
 void
-ChainedDispatchers::ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replace) {
+ChainedDispatchers::ms_handle_reset(ConnectionRef conn, bool is_replace) {
   try {
     for (auto& dispatcher : dispatchers) {
       dispatcher->ms_handle_reset(conn, is_replace);
@@ -78,7 +99,7 @@ ChainedDispatchers::ms_handle_reset(crimson::net::ConnectionRef conn, bool is_re
 }
 
 void
-ChainedDispatchers::ms_handle_remote_reset(crimson::net::ConnectionRef conn) {
+ChainedDispatchers::ms_handle_remote_reset(ConnectionRef conn) {
   try {
     for (auto& dispatcher : dispatchers) {
       dispatcher->ms_handle_remote_reset(conn);
index 712b0894b9fd257518f125be2f45e65c9acfa575..ec085864ffac03d594265fab8bc46f321e01414b 100644 (file)
@@ -3,6 +3,8 @@
 
 #pragma once
 
+#include <seastar/core/smp.hh>
+
 #include "Fwd.h"
 #include "crimson/common/log.h"
 
@@ -23,11 +25,12 @@ public:
   bool empty() const {
     return dispatchers.empty();
   }
-  seastar::future<> ms_dispatch(crimson::net::ConnectionRef, MessageRef);
-  void ms_handle_accept(crimson::net::ConnectionRef conn);
-  void ms_handle_connect(crimson::net::ConnectionRef conn);
-  void ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replace);
-  void ms_handle_remote_reset(crimson::net::ConnectionRef conn);
+  seastar::future<> ms_dispatch(ConnectionRef, MessageRef);
+  void ms_handle_shard_change(ConnectionRef, seastar::shard_id, bool);
+  void ms_handle_accept(ConnectionRef conn, seastar::shard_id, bool is_replace);
+  void ms_handle_connect(ConnectionRef conn, seastar::shard_id);
+  void ms_handle_reset(ConnectionRef conn, bool is_replace);
+  void ms_handle_remote_reset(ConnectionRef conn);
 
  private:
   dispatchers_t dispatchers;
index 80d578363282e8c4b364cfd7d694328e5be5c10c..c414c48e12f8e89f63d5fcb8a736bc4d86e587f9 100644 (file)
@@ -47,18 +47,28 @@ namespace crimson::net {
 
 IOHandler::IOHandler(ChainedDispatchers &dispatchers,
                      SocketConnection &conn)
-  : dispatchers(dispatchers),
+  : shard_states(shard_states_t::create(
+        seastar::this_shard_id(), io_state_t::none)),
+    dispatchers(dispatchers),
     conn(conn),
     conn_ref(conn.get_local_shared_foreign_from_this())
 {}
 
 IOHandler::~IOHandler()
 {
-  ceph_assert(gate.is_closed());
-  assert(!out_exit_dispatching);
+  // close_io() must be finished
+  ceph_assert_always(maybe_prv_shard_states == nullptr);
+  // should be true in the according shard
+  // ceph_assert_always(shard_states->assert_closed_and_exit());
+  assert(!conn_ref);
 }
 
-ceph::bufferlist IOHandler::sweep_out_pending_msgs_to_sent(
+#ifdef UNIT_TESTS_BUILT
+IOHandler::sweep_ret
+#else
+ceph::bufferlist
+#endif
+IOHandler::sweep_out_pending_msgs_to_sent(
   bool require_keepalive,
   std::optional<utime_t> maybe_keepalive_ack,
   bool require_ack)
@@ -66,25 +76,45 @@ ceph::bufferlist IOHandler::sweep_out_pending_msgs_to_sent(
   std::size_t num_msgs = out_pending_msgs.size();
   ceph::bufferlist bl;
 
+#ifdef UNIT_TESTS_BUILT
+  std::vector<Tag> tags;
+#endif
+
   if (unlikely(require_keepalive)) {
     auto keepalive_frame = KeepAliveFrame::Encode();
     bl.append(frame_assembler->get_buffer(keepalive_frame));
+#ifdef UNIT_TESTS_BUILT
+    auto tag = KeepAliveFrame::tag;
+    tags.push_back(tag);
+#endif
   }
 
   if (unlikely(maybe_keepalive_ack.has_value())) {
     auto keepalive_ack_frame = KeepAliveFrameAck::Encode(*maybe_keepalive_ack);
     bl.append(frame_assembler->get_buffer(keepalive_ack_frame));
+#ifdef UNIT_TESTS_BUILT
+    auto tag = KeepAliveFrameAck::tag;
+    tags.push_back(tag);
+#endif
   }
 
   if (require_ack && num_msgs == 0u) {
-    auto ack_frame = AckFrame::Encode(get_in_seq());
+    auto ack_frame = AckFrame::Encode(in_seq);
     bl.append(frame_assembler->get_buffer(ack_frame));
+#ifdef UNIT_TESTS_BUILT
+    auto tag = AckFrame::tag;
+    tags.push_back(tag);
+#endif
   }
 
   std::for_each(
       out_pending_msgs.begin(),
       out_pending_msgs.begin()+num_msgs,
-      [this, &bl](const MessageURef& msg) {
+      [this, &bl
+#ifdef UNIT_TESTS_BUILT
+        , &tags
+#endif
+      ](const MessageFRef& msg) {
     // set priority
     msg->get_header().src = conn.messenger.get_myname();
 
@@ -100,7 +130,7 @@ ceph::bufferlist IOHandler::sweep_out_pending_msgs_to_sent(
                              header.type,       header.priority,
                              header.version,
                              ceph_le32(0),      header.data_off,
-                             ceph_le64(get_in_seq()),
+                             ceph_le64(in_seq),
                              footer.flags,      header.compat_version,
                              header.reserved};
 
@@ -109,6 +139,10 @@ ceph::bufferlist IOHandler::sweep_out_pending_msgs_to_sent(
     logger().debug("{} --> #{} === {} ({})",
                   conn, msg->get_seq(), *msg, msg->get_type());
     bl.append(frame_assembler->get_buffer(message));
+#ifdef UNIT_TESTS_BUILT
+    auto tag = MessageFrame::tag;
+    tags.push_back(tag);
+#endif
   });
 
   if (!conn.policy.lossy) {
@@ -118,12 +152,49 @@ ceph::bufferlist IOHandler::sweep_out_pending_msgs_to_sent(
         std::make_move_iterator(out_pending_msgs.end()));
   }
   out_pending_msgs.clear();
+
+#ifdef UNIT_TESTS_BUILT
+  return sweep_ret{std::move(bl), tags};
+#else
   return bl;
+#endif
 }
 
-seastar::future<> IOHandler::send(MessageURef msg)
+seastar::future<> IOHandler::send(MessageFRef msg)
 {
-  if (io_state != io_state_t::drop) {
+  // sid may be changed on-the-fly during the submission
+  if (seastar::this_shard_id() == get_shard_id()) {
+    return do_send(std::move(msg));
+  } else {
+    logger().trace("{} send() is directed to {} -- {}",
+                   conn, get_shard_id(), *msg);
+    return seastar::smp::submit_to(
+        get_shard_id(), [this, msg=std::move(msg)]() mutable {
+      return send_redirected(std::move(msg));
+    });
+  }
+}
+
+seastar::future<> IOHandler::send_redirected(MessageFRef msg)
+{
+  // sid may be changed on-the-fly during the submission
+  if (seastar::this_shard_id() == get_shard_id()) {
+    return do_send(std::move(msg));
+  } else {
+    logger().debug("{} send() is redirected to {} -- {}",
+                   conn, get_shard_id(), *msg);
+    return seastar::smp::submit_to(
+        get_shard_id(), [this, msg=std::move(msg)]() mutable {
+      return send_redirected(std::move(msg));
+    });
+  }
+}
+
+seastar::future<> IOHandler::do_send(MessageFRef msg)
+{
+  assert(seastar::this_shard_id() == get_shard_id());
+  logger().trace("{} do_send() got message -- {}", conn, *msg);
+  if (get_io_state() != io_state_t::drop) {
     out_pending_msgs.push_back(std::move(msg));
     notify_out_dispatch();
   }
@@ -132,6 +203,36 @@ seastar::future<> IOHandler::send(MessageURef msg)
 
 seastar::future<> IOHandler::send_keepalive()
 {
+  // sid may be changed on-the-fly during the submission
+  if (seastar::this_shard_id() == get_shard_id()) {
+    return do_send_keepalive();
+  } else {
+    logger().trace("{} send_keepalive() is directed to {}", conn, get_shard_id());
+    return seastar::smp::submit_to(
+        get_shard_id(), [this] {
+      return send_keepalive_redirected();
+    });
+  }
+}
+
+seastar::future<> IOHandler::send_keepalive_redirected()
+{
+  // sid may be changed on-the-fly during the submission
+  if (seastar::this_shard_id() == get_shard_id()) {
+    return do_send_keepalive();
+  } else {
+    logger().debug("{} send_keepalive() is redirected to {}", conn, get_shard_id());
+    return seastar::smp::submit_to(
+        get_shard_id(), [this] {
+      return send_keepalive_redirected();
+    });
+  }
+}
+
+seastar::future<> IOHandler::do_send_keepalive()
+{
+  assert(seastar::this_shard_id() == get_shard_id());
+  logger().trace("{} do_send_keeplive(): need_keepalive={}", conn, need_keepalive);
   if (!need_keepalive) {
     need_keepalive = true;
     notify_out_dispatch();
@@ -141,22 +242,31 @@ seastar::future<> IOHandler::send_keepalive()
 
 void IOHandler::mark_down()
 {
-  ceph_assert_always(io_state != io_state_t::none);
+  ceph_assert_always(seastar::this_shard_id() == get_shard_id());
+  ceph_assert_always(get_io_state() != io_state_t::none);
   need_dispatch_reset = false;
-  if (io_state == io_state_t::drop) {
+  if (get_io_state() == io_state_t::drop) {
     return;
   }
 
-  logger().info("{} mark_down() with {}",
-                conn, io_stat_printer{*this});
-  set_io_state(io_state_t::drop);
-  handshake_listener->notify_mark_down();
+  auto cc_seq = crosscore.prepare_submit();
+  logger().info("{} mark_down() at {}, send {} notify_mark_down()",
+                conn, io_stat_printer{*this}, cc_seq);
+  do_set_io_state(io_state_t::drop);
+  shard_states->dispatch_in_background(
+      "notify_mark_down", conn, [this, cc_seq] {
+    return seastar::smp::submit_to(
+        conn.get_messenger_shard_id(), [this, cc_seq] {
+      return handshake_listener->notify_mark_down(cc_seq);
+    });
+  });
 }
 
 void IOHandler::print_io_stat(std::ostream &out) const
 {
+  assert(seastar::this_shard_id() == get_shard_id());
   out << "io_stat("
-      << "io_state=" << fmt::format("{}", io_state)
+      << "io_state=" << fmt::format("{}", get_io_state())
       << ", in_seq=" << in_seq
       << ", out_seq=" << out_seq
       << ", out_pending_msgs_size=" << out_pending_msgs.size()
@@ -167,49 +277,80 @@ void IOHandler::print_io_stat(std::ostream &out) const
       << ")";
 }
 
-void IOHandler::set_io_state(
-    const IOHandler::io_state_t &new_state,
-    FrameAssemblerV2Ref fa)
+void IOHandler::assign_frame_assembler(FrameAssemblerV2Ref fa)
+{
+  assert(fa != nullptr);
+  ceph_assert_always(frame_assembler == nullptr);
+  frame_assembler = std::move(fa);
+  ceph_assert_always(
+      frame_assembler->get_shard_id() == get_shard_id());
+  // should have been set through dispatch_accept/connect()
+  ceph_assert_always(
+      frame_assembler->get_socket_shard_id() == get_shard_id());
+  ceph_assert_always(frame_assembler->is_socket_valid());
+}
+
+void IOHandler::do_set_io_state(
+    io_state_t new_state,
+    std::optional<crosscore_t::seq_t> cc_seq,
+    FrameAssemblerV2Ref fa,
+    bool set_notify_out)
 {
+  ceph_assert_always(seastar::this_shard_id() == get_shard_id());
+  auto prv_state = get_io_state();
+  logger().debug("{} got {}do_set_io_state(): prv_state={}, new_state={}, "
+                 "fa={}, set_notify_out={}, at {}",
+                 conn,
+                 cc_seq.has_value() ? fmt::format("{} ", *cc_seq) : "",
+                 prv_state, new_state,
+                 fa ? "present" : "N/A", set_notify_out,
+                 io_stat_printer{*this});
   ceph_assert_always(!(
-    (new_state == io_state_t::none && io_state != io_state_t::none) ||
-    (new_state == io_state_t::open && io_state == io_state_t::open) ||
-    (new_state != io_state_t::drop && io_state == io_state_t::drop)
+    (new_state == io_state_t::none && prv_state != io_state_t::none) ||
+    (new_state == io_state_t::open && prv_state == io_state_t::open)
   ));
 
+  if (prv_state == io_state_t::drop) {
+    // only possible due to a racing mark_down() from user
+    if (new_state == io_state_t::open) {
+      assign_frame_assembler(std::move(fa));
+      frame_assembler->shutdown_socket<false>(nullptr);
+    } else {
+      assert(fa == nullptr);
+    }
+    return;
+  }
+
   bool dispatch_in = false;
   if (new_state == io_state_t::open) {
     // to open
     ceph_assert_always(protocol_is_connected == true);
-    assert(fa != nullptr);
-    ceph_assert_always(frame_assembler == nullptr);
-    frame_assembler = std::move(fa);
-    ceph_assert_always(frame_assembler->is_socket_valid());
+    assign_frame_assembler(std::move(fa));
     dispatch_in = true;
-#ifdef UNIT_TESTS_BUILT
-    if (conn.interceptor) {
-      conn.interceptor->register_conn_ready(conn);
-    }
-#endif
-  } else if (io_state == io_state_t::open) {
+  } else if (prv_state == io_state_t::open) {
     // from open
     ceph_assert_always(protocol_is_connected == true);
     protocol_is_connected = false;
     assert(fa == nullptr);
     ceph_assert_always(frame_assembler->is_socket_valid());
-    frame_assembler->shutdown_socket();
-    if (out_dispatching) {
-      ceph_assert_always(!out_exit_dispatching.has_value());
-      out_exit_dispatching = seastar::promise<>();
-    }
+    frame_assembler->shutdown_socket<false>(nullptr);
   } else {
     assert(fa == nullptr);
   }
 
-  if (io_state != new_state) {
-    io_state = new_state;
-    io_state_changed.set_value();
-    io_state_changed = seastar::promise<>();
+  if (new_state == io_state_t::delay) {
+    need_notify_out = set_notify_out;
+    if (need_notify_out) {
+      maybe_notify_out_dispatch();
+    }
+  } else {
+    assert(set_notify_out == false);
+    need_notify_out = false;
+  }
+
+  // FIXME: simplify and drop the prv_state == new_state case
+  if (prv_state != new_state) {
+    shard_states->set_io_state(new_state);
   }
 
   /*
@@ -221,44 +362,141 @@ void IOHandler::set_io_state(
   }
 }
 
-seastar::future<FrameAssemblerV2Ref> IOHandler::wait_io_exit_dispatching()
+seastar::future<> IOHandler::set_io_state(
+    crosscore_t::seq_t cc_seq,
+    io_state_t new_state,
+    FrameAssemblerV2Ref fa,
+    bool set_notify_out)
 {
-  ceph_assert_always(io_state != io_state_t::open);
+  assert(seastar::this_shard_id() == get_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} set_io_state(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq, new_state,
+            fa=std::move(fa), set_notify_out]() mutable {
+      return set_io_state(cc_seq, new_state, std::move(fa), set_notify_out);
+    });
+  }
+
+  do_set_io_state(new_state, cc_seq, std::move(fa), set_notify_out);
+  return seastar::now();
+}
+
+seastar::future<IOHandler::exit_dispatching_ret>
+IOHandler::wait_io_exit_dispatching(
+    crosscore_t::seq_t cc_seq)
+{
+  assert(seastar::this_shard_id() == get_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} wait_io_exit_dispatching(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq] {
+      return wait_io_exit_dispatching(cc_seq);
+    });
+  }
+
+  logger().debug("{} got {} wait_io_exit_dispatching()",
+                 conn, cc_seq);
+  ceph_assert_always(get_io_state() != io_state_t::open);
   ceph_assert_always(frame_assembler != nullptr);
   ceph_assert_always(!frame_assembler->is_socket_valid());
-  return seastar::when_all(
-    [this] {
-      if (out_exit_dispatching) {
-        return out_exit_dispatching->get_future();
-      } else {
-        return seastar::now();
-      }
-    }(),
-    [this] {
-      if (in_exit_dispatching) {
-        return in_exit_dispatching->get_future();
-      } else {
-        return seastar::now();
-      }
-    }()
-  ).discard_result().then([this] {
-    return std::move(frame_assembler);
+  return seastar::futurize_invoke([this] {
+    // cannot be running in parallel with to_new_sid()
+    if (maybe_dropped_sid.has_value()) {
+      ceph_assert_always(get_io_state() == io_state_t::drop);
+      assert(shard_states->assert_closed_and_exit());
+      auto prv_sid = *maybe_dropped_sid;
+      return seastar::smp::submit_to(prv_sid, [this] {
+        logger().debug("{} got wait_io_exit_dispatching from prv_sid", conn);
+        assert(maybe_prv_shard_states != nullptr);
+        return maybe_prv_shard_states->wait_io_exit_dispatching();
+      });
+    } else {
+      return shard_states->wait_io_exit_dispatching();
+    }
+  }).then([this] {
+    logger().debug("{} finish wait_io_exit_dispatching at {}",
+                   conn, io_stat_printer{*this});
+    ceph_assert_always(frame_assembler != nullptr);
+    ceph_assert_always(!frame_assembler->is_socket_valid());
+    frame_assembler->set_shard_id(conn.get_messenger_shard_id());
+    return exit_dispatching_ret{
+      std::move(frame_assembler),
+      get_states()};
   });
 }
 
-void IOHandler::reset_session(bool full)
+seastar::future<> IOHandler::reset_session(
+    crosscore_t::seq_t cc_seq,
+    bool full)
 {
-  // reset in
-  in_seq = 0;
+  assert(seastar::this_shard_id() == get_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} reset_session(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq, full] {
+      return reset_session(cc_seq, full);
+    });
+  }
+
+  logger().debug("{} got {} reset_session({})",
+                 conn, cc_seq, full);
+  assert(get_io_state() != io_state_t::open);
+  reset_in();
   if (full) {
     reset_out();
     dispatch_remote_reset();
   }
+  return seastar::now();
 }
 
-void IOHandler::requeue_out_sent()
+seastar::future<> IOHandler::reset_peer_state(
+    crosscore_t::seq_t cc_seq)
 {
-  assert(io_state != io_state_t::open);
+  assert(seastar::this_shard_id() == get_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} reset_peer_state(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq] {
+      return reset_peer_state(cc_seq);
+    });
+  }
+
+  logger().debug("{} got {} reset_peer_state()",
+                 conn, cc_seq);
+  assert(get_io_state() != io_state_t::open);
+  reset_in();
+  do_requeue_out_sent_up_to(0);
+  discard_out_sent();
+  return seastar::now();
+}
+
+seastar::future<> IOHandler::requeue_out_sent(
+    crosscore_t::seq_t cc_seq)
+{
+  assert(seastar::this_shard_id() == get_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} requeue_out_sent(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq] {
+      return requeue_out_sent(cc_seq);
+    });
+  }
+
+  logger().debug("{} got {} requeue_out_sent()",
+                 conn, cc_seq);
+  do_requeue_out_sent();
+  return seastar::now();
+}
+
+void IOHandler::do_requeue_out_sent()
+{
+  assert(get_io_state() != io_state_t::open);
   if (out_sent_msgs.empty()) {
     return;
   }
@@ -266,7 +504,7 @@ void IOHandler::requeue_out_sent()
   out_seq -= out_sent_msgs.size();
   logger().debug("{} requeue {} items, revert out_seq to {}",
                  conn, out_sent_msgs.size(), out_seq);
-  for (MessageURef& msg : out_sent_msgs) {
+  for (MessageFRef& msg : out_sent_msgs) {
     msg->clear_payload();
     msg->set_seq(0);
   }
@@ -275,12 +513,32 @@ void IOHandler::requeue_out_sent()
       std::make_move_iterator(out_sent_msgs.begin()),
       std::make_move_iterator(out_sent_msgs.end()));
   out_sent_msgs.clear();
-  notify_out_dispatch();
+  maybe_notify_out_dispatch();
 }
 
-void IOHandler::requeue_out_sent_up_to(seq_num_t seq)
+seastar::future<> IOHandler::requeue_out_sent_up_to(
+    crosscore_t::seq_t cc_seq,
+    seq_num_t msg_seq)
 {
-  assert(io_state != io_state_t::open);
+  assert(seastar::this_shard_id() == get_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} requeue_out_sent_up_to(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq, msg_seq] {
+      return requeue_out_sent_up_to(cc_seq, msg_seq);
+    });
+  }
+
+  logger().debug("{} got {} requeue_out_sent_up_to({})",
+                 conn, cc_seq, msg_seq);
+  do_requeue_out_sent_up_to(msg_seq);
+  return seastar::now();
+}
+
+void IOHandler::do_requeue_out_sent_up_to(seq_num_t seq)
+{
+  assert(get_io_state() != io_state_t::open);
   if (out_sent_msgs.empty() && out_pending_msgs.empty()) {
     logger().debug("{} nothing to requeue, reset out_seq from {} to seq {}",
                    conn, out_seq, seq);
@@ -297,57 +555,233 @@ void IOHandler::requeue_out_sent_up_to(seq_num_t seq)
       out_sent_msgs.pop_front();
     }
   }
-  requeue_out_sent();
+  do_requeue_out_sent();
+}
+
+void IOHandler::reset_in()
+{
+  assert(get_io_state() != io_state_t::open);
+  in_seq = 0;
 }
 
 void IOHandler::reset_out()
 {
-  assert(io_state != io_state_t::open);
-  out_seq = 0;
+  assert(get_io_state() != io_state_t::open);
+  discard_out_sent();
   out_pending_msgs.clear();
-  out_sent_msgs.clear();
   need_keepalive = false;
   next_keepalive_ack = std::nullopt;
   ack_left = 0;
 }
 
-void IOHandler::dispatch_accept()
+void IOHandler::discard_out_sent()
 {
-  if (io_state == io_state_t::drop) {
-    return;
-  }
-  // protocol_is_connected can be from true to true here if the replacing is
-  // happening to a connected connection.
-  protocol_is_connected = true;
-  dispatchers.ms_handle_accept(conn_ref);
+  assert(get_io_state() != io_state_t::open);
+  out_seq = 0;
+  out_sent_msgs.clear();
 }
 
-void IOHandler::dispatch_connect()
+seastar::future<>
+IOHandler::dispatch_accept(
+    crosscore_t::seq_t cc_seq,
+    seastar::shard_id new_sid,
+    ConnectionFRef conn_fref,
+    bool is_replace)
 {
-  if (io_state == io_state_t::drop) {
-    return;
+  return to_new_sid(cc_seq, new_sid, std::move(conn_fref), is_replace);
+}
+
+seastar::future<>
+IOHandler::dispatch_connect(
+    crosscore_t::seq_t cc_seq,
+    seastar::shard_id new_sid,
+    ConnectionFRef conn_fref)
+{
+  return to_new_sid(cc_seq, new_sid, std::move(conn_fref), std::nullopt);
+}
+
+seastar::future<>
+IOHandler::cleanup_prv_shard(seastar::shard_id prv_sid)
+{
+  assert(seastar::this_shard_id() == get_shard_id());
+  return seastar::smp::submit_to(prv_sid, [this] {
+    logger().debug("{} got cleanup_prv_shard()", conn);
+    assert(maybe_prv_shard_states != nullptr);
+    auto ref_prv_states = std::move(maybe_prv_shard_states);
+    auto &prv_states = *ref_prv_states;
+    return prv_states.close(
+    ).then([ref_prv_states=std::move(ref_prv_states)] {
+      ceph_assert_always(ref_prv_states->assert_closed_and_exit());
+    });
+  }).then([this] {
+    ceph_assert_always(maybe_prv_shard_states == nullptr);
+  });
+}
+
+seastar::future<>
+IOHandler::to_new_sid(
+    crosscore_t::seq_t cc_seq,
+    seastar::shard_id new_sid,
+    ConnectionFRef conn_fref,
+    std::optional<bool> is_replace)
+{
+  ceph_assert_always(seastar::this_shard_id() == get_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} to_new_sid(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq, new_sid, is_replace,
+            conn_fref=std::move(conn_fref)]() mutable {
+      return to_new_sid(cc_seq, new_sid, std::move(conn_fref), is_replace);
+    });
   }
-  ceph_assert_always(protocol_is_connected == false);
-  protocol_is_connected = true;
-  dispatchers.ms_handle_connect(conn_ref);
+
+  bool is_accept_or_connect = is_replace.has_value();
+  logger().debug("{} got {} to_new_sid_1(new_sid={}, {}) at {}",
+                 conn, cc_seq, new_sid,
+                 fmt::format("{}",
+                   is_accept_or_connect ?
+                   (*is_replace ? "accept(replace)" : "accept(!replace)") :
+                   "connect"),
+                 io_stat_printer{*this});
+  auto next_cc_seq = ++cc_seq;
+
+  if (get_io_state() != io_state_t::drop) {
+    ceph_assert_always(conn_ref);
+    if (new_sid != seastar::this_shard_id()) {
+      dispatchers.ms_handle_shard_change(conn_ref, new_sid, is_accept_or_connect);
+      // user can make changes
+    }
+  } else {
+    // it is possible that both io_handler and protocolv2 are
+    // trying to close each other from different cores simultaneously.
+    assert(!protocol_is_connected);
+  }
+
+  if (get_io_state() != io_state_t::drop) {
+    if (is_accept_or_connect) {
+      // protocol_is_connected can be from true to true here if the replacing is
+      // happening to a connected connection.
+    } else {
+      ceph_assert_always(protocol_is_connected == false);
+    }
+    protocol_is_connected = true;
+  } else {
+    assert(!protocol_is_connected);
+  }
+
+  bool is_dropped = false;
+  if (get_io_state() == io_state_t::drop) {
+    is_dropped = true;
+  }
+  ceph_assert_always(get_io_state() != io_state_t::open);
+
+  // apply the switching atomically
+  ceph_assert_always(conn_ref);
+  conn_ref.reset();
+  auto prv_sid = get_shard_id();
+  ceph_assert_always(maybe_prv_shard_states == nullptr);
+  maybe_prv_shard_states = std::move(shard_states);
+  shard_states = shard_states_t::create_from_previous(
+      *maybe_prv_shard_states, new_sid);
+  assert(new_sid == get_shard_id());
+
+  return seastar::smp::submit_to(new_sid,
+      [this, next_cc_seq, is_dropped, prv_sid, is_replace, conn_fref=std::move(conn_fref)]() mutable {
+    logger().debug("{} got {} to_new_sid_2(prv_sid={}, is_dropped={}, {}) at {}",
+                   conn, next_cc_seq, prv_sid, is_dropped,
+                   fmt::format("{}",
+                     is_replace.has_value() ?
+                     (*is_replace ? "accept(replace)" : "accept(!replace)") :
+                     "connect"),
+                   io_stat_printer{*this});
+
+    ceph_assert_always(seastar::this_shard_id() == get_shard_id());
+    ceph_assert_always(get_io_state() != io_state_t::open);
+    ceph_assert_always(!maybe_dropped_sid.has_value());
+    ceph_assert_always(crosscore.proceed_or_wait(next_cc_seq));
+
+    if (is_dropped) {
+      ceph_assert_always(get_io_state() == io_state_t::drop);
+      ceph_assert_always(shard_states->assert_closed_and_exit());
+      maybe_dropped_sid = prv_sid;
+      // cleanup_prv_shard() will be done in a follow-up close_io()
+    } else {
+      // possible at io_state_t::drop
+
+      // previous shard is not cleaned,
+      // but close_io() is responsible to clean up the current shard,
+      // so cleanup the previous shard here.
+      shard_states->dispatch_in_background(
+          "cleanup_prv_sid", conn, [this, prv_sid] {
+        return cleanup_prv_shard(prv_sid);
+      });
+      maybe_notify_out_dispatch();
+    }
+
+    ceph_assert_always(!conn_ref);
+    // assign even if already dropping
+    conn_ref = make_local_shared_foreign(std::move(conn_fref));
+
+    if (get_io_state() != io_state_t::drop) {
+      if (is_replace.has_value()) {
+        dispatchers.ms_handle_accept(conn_ref, prv_sid, *is_replace);
+      } else {
+        dispatchers.ms_handle_connect(conn_ref, prv_sid);
+      }
+      // user can make changes
+    }
+  });
+}
+
+seastar::future<> IOHandler::set_accepted_sid(
+    crosscore_t::seq_t cc_seq,
+    seastar::shard_id sid,
+    ConnectionFRef conn_fref)
+{
+  assert(seastar::this_shard_id() == get_shard_id());
+  assert(get_io_state() == io_state_t::none);
+  ceph_assert_always(conn_ref);
+  conn_ref.reset();
+  assert(maybe_prv_shard_states == nullptr);
+  shard_states.reset();
+  shard_states = shard_states_t::create(sid, io_state_t::none);
+  return seastar::smp::submit_to(sid,
+      [this, cc_seq, conn_fref=std::move(conn_fref)]() mutable {
+    // must be the first to proceed
+    ceph_assert_always(crosscore.proceed_or_wait(cc_seq));
+
+    logger().debug("{} set accepted sid", conn);
+    ceph_assert_always(seastar::this_shard_id() == get_shard_id());
+    ceph_assert_always(get_io_state() == io_state_t::none);
+    assert(maybe_prv_shard_states == nullptr);
+    ceph_assert_always(!conn_ref);
+    conn_ref = make_local_shared_foreign(std::move(conn_fref));
+  });
 }
 
 void IOHandler::dispatch_reset(bool is_replace)
 {
-  ceph_assert_always(io_state == io_state_t::drop);
+  ceph_assert_always(get_io_state() == io_state_t::drop);
   if (!need_dispatch_reset) {
     return;
   }
   need_dispatch_reset = false;
+  ceph_assert_always(conn_ref);
+
   dispatchers.ms_handle_reset(conn_ref, is_replace);
+  // user can make changes
 }
 
 void IOHandler::dispatch_remote_reset()
 {
-  if (io_state == io_state_t::drop) {
+  if (get_io_state() == io_state_t::drop) {
     return;
   }
+  ceph_assert_always(conn_ref);
+
   dispatchers.ms_handle_remote_reset(conn_ref);
+  // user can make changes
 }
 
 void IOHandler::ack_out_sent(seq_num_t seq)
@@ -364,85 +798,74 @@ void IOHandler::ack_out_sent(seq_num_t seq)
   }
 }
 
-seastar::future<stop_t> IOHandler::try_exit_out_dispatch() {
-  assert(!is_out_queued());
-  return frame_assembler->flush(
-  ).then([this] {
-    if (!is_out_queued()) {
-      // still nothing pending to send after flush,
-      // the dispatching can ONLY stop now
-      ceph_assert(out_dispatching);
-      out_dispatching = false;
-      if (unlikely(out_exit_dispatching.has_value())) {
-        out_exit_dispatching->set_value();
-        out_exit_dispatching = std::nullopt;
-        logger().info("{} do_out_dispatch: nothing queued at {},"
-                      " set out_exit_dispatching",
-                      conn, io_state);
-      }
-      return seastar::make_ready_future<stop_t>(stop_t::yes);
-    } else {
-      // something is pending to send during flushing
-      return seastar::make_ready_future<stop_t>(stop_t::no);
-    }
-  });
-}
-
-seastar::future<> IOHandler::do_out_dispatch()
+seastar::future<>
+IOHandler::do_out_dispatch(shard_states_t &ctx)
 {
-  return seastar::repeat([this] {
-    switch (io_state) {
+  return seastar::repeat([this, &ctx] {
+    switch (ctx.get_io_state()) {
      case io_state_t::open: {
-      bool still_queued = is_out_queued();
-      if (unlikely(!still_queued)) {
-        return try_exit_out_dispatch();
+      if (unlikely(!is_out_queued())) {
+        // try exit open dispatching
+        return frame_assembler->flush<false>(
+        ).then([this, &ctx] {
+          if (ctx.get_io_state() != io_state_t::open || is_out_queued()) {
+            return seastar::make_ready_future<stop_t>(stop_t::no);
+          }
+          // still nothing pending to send after flush,
+          // open dispatching can ONLY stop now
+          ctx.exit_out_dispatching("exit-open", conn);
+          return seastar::make_ready_future<stop_t>(stop_t::yes);
+        });
       }
+
+      auto require_keepalive = need_keepalive;
+      need_keepalive = false;
+      auto maybe_keepalive_ack = next_keepalive_ack;
+      next_keepalive_ack = std::nullopt;
       auto to_ack = ack_left;
       assert(to_ack == 0 || in_seq > 0);
-      return frame_assembler->write(
-        sweep_out_pending_msgs_to_sent(
-          need_keepalive, next_keepalive_ack, to_ack > 0)
-      ).then([this, prv_keepalive_ack=next_keepalive_ack, to_ack] {
-        need_keepalive = false;
-        if (next_keepalive_ack == prv_keepalive_ack) {
-          next_keepalive_ack = std::nullopt;
-        }
-        assert(ack_left >= to_ack);
-        ack_left -= to_ack;
-        if (!is_out_queued()) {
-          return try_exit_out_dispatch();
-        } else {
-          // messages were enqueued during socket write
-          return seastar::make_ready_future<stop_t>(stop_t::no);
+      ack_left = 0;
+#ifdef UNIT_TESTS_BUILT
+      auto ret = sweep_out_pending_msgs_to_sent(
+          require_keepalive, maybe_keepalive_ack, to_ack > 0);
+      return frame_assembler->intercept_frames(ret.tags, true
+      ).then([this, bl=std::move(ret.bl)]() mutable {
+        return frame_assembler->write<false>(std::move(bl));
+      }
+#else
+      auto bl = sweep_out_pending_msgs_to_sent(
+          require_keepalive, maybe_keepalive_ack, to_ack > 0);
+      return frame_assembler->write<false>(std::move(bl)
+#endif
+      ).then([this, &ctx] {
+        if (ctx.get_io_state() != io_state_t::open) {
+          return frame_assembler->flush<false>(
+          ).then([] {
+            return seastar::make_ready_future<stop_t>(stop_t::no);
+          });
         }
+
+        // FIXME: may leak a flush if state is changed after return and before
+        // the next repeat body.
+        return seastar::make_ready_future<stop_t>(stop_t::no);
       });
      }
      case io_state_t::delay:
       // delay out dispatching until open
-      if (out_exit_dispatching) {
-        out_exit_dispatching->set_value();
-        out_exit_dispatching = std::nullopt;
-        logger().info("{} do_out_dispatch: delay and set out_exit_dispatching ...", conn);
-      } else {
-        logger().info("{} do_out_dispatch: delay ...", conn);
-      }
-      return io_state_changed.get_future(
+      ctx.notify_out_dispatching_stopped("delay...", conn);
+      return ctx.wait_state_change(
       ).then([] { return stop_t::no; });
      case io_state_t::drop:
-      ceph_assert(out_dispatching);
-      out_dispatching = false;
-      if (out_exit_dispatching) {
-        out_exit_dispatching->set_value();
-        out_exit_dispatching = std::nullopt;
-        logger().info("{} do_out_dispatch: dropped and set out_exit_dispatching", conn);
-      } else {
-        logger().info("{} do_out_dispatch: dropped", conn);
-      }
+      ctx.exit_out_dispatching("dropped", conn);
+      return seastar::make_ready_future<stop_t>(stop_t::yes);
+     case io_state_t::switched:
+      ctx.exit_out_dispatching("switched", conn);
       return seastar::make_ready_future<stop_t>(stop_t::yes);
      default:
-      ceph_assert(false);
+      ceph_abort("impossible");
     }
-  }).handle_exception_type([this] (const std::system_error& e) {
+  }).handle_exception_type([this, &ctx](const std::system_error& e) {
+    auto io_state = ctx.get_io_state();
     if (e.code() != std::errc::broken_pipe &&
         e.code() != std::errc::connection_reset &&
         e.code() != error::negotiation_failure) {
@@ -452,58 +875,83 @@ seastar::future<> IOHandler::do_out_dispatch()
     }
 
     if (io_state == io_state_t::open) {
-      logger().info("{} do_out_dispatch(): fault at {}, going to delay -- {}",
-                    conn, io_state, e.what());
+      auto cc_seq = crosscore.prepare_submit();
+      logger().info("{} do_out_dispatch(): fault at {}, {}, going to delay -- {}, "
+                    "send {} notify_out_fault()",
+                    conn, io_state, io_stat_printer{*this}, e.what(), cc_seq);
       std::exception_ptr eptr;
       try {
         throw e;
       } catch(...) {
         eptr = std::current_exception();
       }
-      set_io_state(io_state_t::delay);
-      handshake_listener->notify_out_fault("do_out_dispatch", eptr);
+      do_set_io_state(io_state_t::delay);
+      shard_states->dispatch_in_background(
+          "notify_out_fault(out)", conn, [this, cc_seq, eptr] {
+        auto states = get_states();
+        return seastar::smp::submit_to(
+            conn.get_messenger_shard_id(), [this, cc_seq, eptr, states] {
+          return handshake_listener->notify_out_fault(
+              cc_seq, "do_out_dispatch", eptr, states);
+        });
+      });
     } else {
-      logger().info("{} do_out_dispatch(): fault at {} -- {}",
-                    conn, io_state, e.what());
+      if (io_state != io_state_t::switched) {
+        logger().info("{} do_out_dispatch(): fault at {}, {} -- {}",
+                      conn, io_state, io_stat_printer{*this}, e.what());
+      } else {
+        logger().info("{} do_out_dispatch(): fault at {} -- {}",
+                      conn, io_state, e.what());
+      }
     }
 
-    return do_out_dispatch();
+    return do_out_dispatch(ctx);
   });
 }
 
+void IOHandler::maybe_notify_out_dispatch()
+{
+  ceph_assert_always(seastar::this_shard_id() == get_shard_id());
+  if (is_out_queued()) {
+    notify_out_dispatch();
+  }
+}
+
 void IOHandler::notify_out_dispatch()
 {
-  handshake_listener->notify_out();
-  if (out_dispatching) {
-    // already dispatching
-    return;
+  ceph_assert_always(seastar::this_shard_id() == get_shard_id());
+  assert(is_out_queued());
+  if (need_notify_out) {
+    auto cc_seq = crosscore.prepare_submit();
+    logger().debug("{} send {} notify_out()",
+                   conn, cc_seq);
+    shard_states->dispatch_in_background(
+        "notify_out", conn, [this, cc_seq] {
+      return seastar::smp::submit_to(
+          conn.get_messenger_shard_id(), [this, cc_seq] {
+        return handshake_listener->notify_out(cc_seq);
+      });
+    });
   }
-  out_dispatching = true;
-  switch (io_state) {
-   case io_state_t::open:
-     [[fallthrough]];
-   case io_state_t::delay:
-    assert(!gate.is_closed());
-    gate.dispatch_in_background("do_out_dispatch", conn, [this] {
-      return do_out_dispatch();
+  if (shard_states->try_enter_out_dispatching()) {
+    shard_states->dispatch_in_background(
+        "do_out_dispatch", conn, [this] {
+      return do_out_dispatch(*shard_states);
     });
-    return;
-   case io_state_t::drop:
-    out_dispatching = false;
-    return;
-   default:
-    ceph_assert(false);
   }
 }
 
 seastar::future<>
-IOHandler::read_message(utime_t throttle_stamp, std::size_t msg_size)
+IOHandler::read_message(
+    shard_states_t &ctx,
+    utime_t throttle_stamp,
+    std::size_t msg_size)
 {
-  return frame_assembler->read_frame_payload(
-  ).then([this, throttle_stamp, msg_size](auto payload) {
-    if (unlikely(io_state != io_state_t::open)) {
+  return frame_assembler->read_frame_payload<false>(
+  ).then([this, throttle_stamp, msg_size, &ctx](auto payload) {
+    if (unlikely(ctx.get_io_state() != io_state_t::open)) {
       logger().debug("{} triggered {} during read_message()",
-                     conn, io_state);
+                     conn, ctx.get_io_state());
       abort_protocol();
     }
 
@@ -561,7 +1009,7 @@ IOHandler::read_message(utime_t throttle_stamp, std::size_t msg_size)
     // client side queueing because messages can't be renumbered, but the (kernel)
     // client will occasionally pull a message out of the sent queue to send
     // elsewhere.  in that case it doesn't matter if we "got" it or not.
-    uint64_t cur_seq = get_in_seq();
+    uint64_t cur_seq = in_seq;
     if (message->get_seq() <= cur_seq) {
       logger().error("{} got old message {} <= {} {}, discarding",
                      conn, message->get_seq(), cur_seq, *message);
@@ -605,20 +1053,24 @@ IOHandler::read_message(utime_t throttle_stamp, std::size_t msg_size)
 
     // TODO: change MessageRef with seastar::shared_ptr
     auto msg_ref = MessageRef{message, false};
-    assert(io_state == io_state_t::open);
+    assert(ctx.get_io_state() == io_state_t::open);
+    assert(get_io_state() == io_state_t::open);
+    ceph_assert_always(conn_ref);
+
     // throttle the reading process by the returned future
     return dispatchers.ms_dispatch(conn_ref, std::move(msg_ref));
+    // user can make changes
   });
 }
 
 void IOHandler::do_in_dispatch()
 {
-  ceph_assert_always(!in_exit_dispatching.has_value());
-  in_exit_dispatching = seastar::promise<>();
-  gate.dispatch_in_background("do_in_dispatch", conn, [this] {
-    return seastar::keep_doing([this] {
-      return frame_assembler->read_main_preamble(
-      ).then([this](auto ret) {
+  shard_states->enter_in_dispatching();
+  shard_states->dispatch_in_background(
+      "do_in_dispatch", conn, [this, &ctx=*shard_states] {
+    return seastar::keep_doing([this, &ctx] {
+      return frame_assembler->read_main_preamble<false>(
+      ).then([this, &ctx](auto ret) {
         switch (ret.tag) {
           case Tag::MESSAGE: {
             size_t msg_size = get_msg_size(*ret.rx_frame_asm);
@@ -628,7 +1080,7 @@ void IOHandler::do_in_dispatch()
                 return seastar::now();
               }
               // TODO: message throttler
-              ceph_assert(false);
+              ceph_abort("TODO");
               return seastar::now();
             }).then([this, msg_size] {
               // throttle_bytes() logic
@@ -643,14 +1095,14 @@ void IOHandler::do_in_dispatch()
                              conn.policy.throttler_bytes->get_current(),
                              conn.policy.throttler_bytes->get_max());
               return conn.policy.throttler_bytes->get(msg_size);
-            }).then([this, msg_size] {
+            }).then([this, msg_size, &ctx] {
               // TODO: throttle_dispatch_queue() logic
               utime_t throttle_stamp{seastar::lowres_system_clock::now()};
-              return read_message(throttle_stamp, msg_size);
+              return read_message(ctx, throttle_stamp, msg_size);
             });
           }
           case Tag::ACK:
-            return frame_assembler->read_frame_payload(
+            return frame_assembler->read_frame_payload<false>(
             ).then([this](auto payload) {
               // handle_message_ack() logic
               auto ack = AckFrame::Decode(payload->back());
@@ -658,7 +1110,7 @@ void IOHandler::do_in_dispatch()
               ack_out_sent(ack.seq());
             });
           case Tag::KEEPALIVE2:
-            return frame_assembler->read_frame_payload(
+            return frame_assembler->read_frame_payload<false>(
             ).then([this](auto payload) {
               // handle_keepalive2() logic
               auto keepalive_frame = KeepAliveFrame::Decode(payload->back());
@@ -666,12 +1118,14 @@ void IOHandler::do_in_dispatch()
                              conn, keepalive_frame.timestamp());
               // notify keepalive ack
               next_keepalive_ack = keepalive_frame.timestamp();
-              notify_out_dispatch();
+              if (seastar::this_shard_id() == get_shard_id()) {
+                notify_out_dispatch();
+              }
 
               last_keepalive = seastar::lowres_system_clock::now();
             });
           case Tag::KEEPALIVE2_ACK:
-            return frame_assembler->read_frame_payload(
+            return frame_assembler->read_frame_payload<false>(
             ).then([this](auto payload) {
               // handle_keepalive2_ack() logic
               auto keepalive_ack_frame = KeepAliveFrameAck::Decode(payload->back());
@@ -688,7 +1142,7 @@ void IOHandler::do_in_dispatch()
           }
         }
       });
-    }).handle_exception([this](std::exception_ptr eptr) {
+    }).handle_exception([this, &ctx](std::exception_ptr eptr) {
       const char *e_what;
       try {
         std::rethrow_exception(eptr);
@@ -696,21 +1150,138 @@ void IOHandler::do_in_dispatch()
         e_what = e.what();
       }
 
+      auto io_state = ctx.get_io_state();
       if (io_state == io_state_t::open) {
-        logger().info("{} do_in_dispatch(): fault at {}, going to delay -- {}",
-                      conn, io_state, e_what);
-        set_io_state(io_state_t::delay);
-        handshake_listener->notify_out_fault("do_in_dispatch", eptr);
+        auto cc_seq = crosscore.prepare_submit();
+        logger().info("{} do_in_dispatch(): fault at {}, {}, going to delay -- {}, "
+                      "send {} notify_out_fault()",
+                      conn, io_state, io_stat_printer{*this}, e_what, cc_seq);
+        do_set_io_state(io_state_t::delay);
+        shard_states->dispatch_in_background(
+            "notify_out_fault(in)", conn, [this, cc_seq, eptr] {
+          auto states = get_states();
+          return seastar::smp::submit_to(
+              conn.get_messenger_shard_id(), [this, cc_seq, eptr, states] {
+            return handshake_listener->notify_out_fault(
+                cc_seq, "do_in_dispatch", eptr, states);
+          });
+        });
       } else {
-        logger().info("{} do_in_dispatch(): fault at {} -- {}",
-                      conn, io_state, e_what);
+        if (io_state != io_state_t::switched) {
+          logger().info("{} do_in_dispatch(): fault at {}, {} -- {}",
+                        conn, io_state, io_stat_printer{*this}, e_what);
+        } else {
+          logger().info("{} do_in_dispatch(): fault at {} -- {}",
+                        conn, io_state, e_what);
+        }
       }
-    }).finally([this] {
-      ceph_assert_always(in_exit_dispatching.has_value());
-      in_exit_dispatching->set_value();
-      in_exit_dispatching = std::nullopt;
+    }).finally([&ctx] {
+      ctx.exit_in_dispatching();
     });
   });
 }
 
+seastar::future<>
+IOHandler::close_io(
+    crosscore_t::seq_t cc_seq,
+    bool is_dispatch_reset,
+    bool is_replace)
+{
+  ceph_assert_always(seastar::this_shard_id() == get_shard_id());
+  if (!crosscore.proceed_or_wait(cc_seq)) {
+    logger().debug("{} got {} close_io(), wait at {}",
+                   conn, cc_seq, crosscore.get_in_seq());
+    return crosscore.wait(cc_seq
+    ).then([this, cc_seq, is_dispatch_reset, is_replace] {
+      return close_io(cc_seq, is_dispatch_reset, is_replace);
+    });
+  }
+
+  logger().debug("{} got {} close_io(reset={}, replace={})",
+                 conn, cc_seq, is_dispatch_reset, is_replace);
+  ceph_assert_always(get_io_state() == io_state_t::drop);
+
+  if (is_dispatch_reset) {
+    dispatch_reset(is_replace);
+  }
+
+  ceph_assert_always(conn_ref);
+  conn_ref.reset();
+
+  // cannot be running in parallel with to_new_sid()
+  if (maybe_dropped_sid.has_value()) {
+    assert(shard_states->assert_closed_and_exit());
+    auto prv_sid = *maybe_dropped_sid;
+    return cleanup_prv_shard(prv_sid);
+  } else {
+    return shard_states->close(
+    ).then([this] {
+      assert(shard_states->assert_closed_and_exit());
+    });
+  }
+}
+
+/*
+ * IOHandler::shard_states_t
+ */
+
+void
+IOHandler::shard_states_t::notify_out_dispatching_stopped(
+    const char *what, SocketConnection &conn)
+{
+  assert(seastar::this_shard_id() == sid);
+  if (unlikely(out_exit_dispatching.has_value())) {
+    out_exit_dispatching->set_value();
+    out_exit_dispatching = std::nullopt;
+    logger().info("{} do_out_dispatch: stop({}) at {}, set out_exit_dispatching",
+                  conn, what, io_state);
+  } else {
+    if (unlikely(io_state != io_state_t::open)) {
+      logger().info("{} do_out_dispatch: stop({}) at {}, no out_exit_dispatching",
+                    conn, what, io_state);
+    }
+  }
+}
+
+seastar::future<>
+IOHandler::shard_states_t::wait_io_exit_dispatching()
+{
+  assert(seastar::this_shard_id() == sid);
+  assert(io_state != io_state_t::open);
+  assert(!gate.is_closed());
+  return seastar::when_all(
+    [this] {
+      if (out_exit_dispatching) {
+        return out_exit_dispatching->get_future();
+      } else {
+        return seastar::now();
+      }
+    }(),
+    [this] {
+      if (in_exit_dispatching) {
+        return in_exit_dispatching->get_future();
+      } else {
+        return seastar::now();
+      }
+    }()
+  ).discard_result();
+}
+
+IOHandler::shard_states_ref_t
+IOHandler::shard_states_t::create_from_previous(
+    shard_states_t &prv_states,
+    seastar::shard_id new_sid)
+{
+  auto io_state = prv_states.io_state;
+  assert(io_state != io_state_t::open);
+  auto ret = shard_states_t::create(new_sid, io_state);
+  if (io_state == io_state_t::drop) {
+    // the new gate should not never be used
+    auto fut = ret->gate.close();
+    ceph_assert_always(fut.available());
+  }
+  prv_states.set_io_state(io_state_t::switched);
+  return ret;
+}
+
 } // namespace crimson::net
index e04b6356e8674ea9d95854616ae99426d8276e80..f53c2ba646847e4706a925838322b4627fe7a97d 100644 (file)
@@ -3,6 +3,9 @@
 
 #pragma once
 
+#include <vector>
+
+#include <seastar/core/shared_future.hh>
 #include <seastar/util/later.hh>
 
 #include "crimson/common/gated.h"
 
 namespace crimson::net {
 
+/**
+ * crosscore_t
+ *
+ * To preserve the event order across cores.
+ */
+class crosscore_t {
+public:
+  using seq_t = uint64_t;
+
+  crosscore_t() = default;
+  ~crosscore_t() = default;
+
+  seq_t get_in_seq() const {
+    return in_seq;
+  }
+
+  seq_t prepare_submit() {
+    ++out_seq;
+    return out_seq;
+  }
+
+  bool proceed_or_wait(seq_t seq) {
+    if (seq == in_seq + 1) {
+      ++in_seq;
+      if (unlikely(in_pr_wait.has_value())) {
+        in_pr_wait->set_value();
+        in_pr_wait = std::nullopt;
+      }
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  seastar::future<> wait(seq_t seq) {
+    assert(seq != in_seq + 1);
+    if (!in_pr_wait.has_value()) {
+      in_pr_wait = seastar::shared_promise<>();
+    }
+    return in_pr_wait->get_shared_future();
+  }
+
+private:
+  seq_t out_seq = 0;
+  seq_t in_seq = 0;
+  std::optional<seastar::shared_promise<>> in_pr_wait;
+};
+
+/**
+ * io_handler_state
+ *
+ * It is required to populate the states from IOHandler to ProtocolV2
+ * asynchronously.
+ */
+struct io_handler_state {
+  seq_num_t in_seq;
+  bool is_out_queued;
+  bool has_out_sent;
+
+  bool is_out_queued_or_sent() const {
+    return is_out_queued || has_out_sent;
+  }
+
+  /*
+   * should be consistent with the accroding interfaces in IOHandler
+   */
+
+  void reset_session(bool full) {
+    in_seq = 0;
+    if (full) {
+      is_out_queued = false;
+      has_out_sent = false;
+    }
+  }
+
+  void reset_peer_state() {
+    in_seq = 0;
+    is_out_queued = is_out_queued_or_sent();
+    has_out_sent = false;
+  }
+
+  void requeue_out_sent_up_to() {
+    // noop since the information is insufficient
+  }
+
+  void requeue_out_sent() {
+    if (has_out_sent) {
+      has_out_sent = false;
+      is_out_queued = true;
+    }
+  }
+};
+
 /**
  * HandshakeListener
  *
- * The interface class for IOHandler to notify the ProtocolV2 for handshake.
+ * The interface class for IOHandler to notify the ProtocolV2.
  *
- * The notifications may be cross-core and asynchronous.
+ * The notifications may be cross-core and must be sent to
+ * SocketConnection::get_messenger_shard_id()
  */
 class HandshakeListener {
 public:
@@ -28,11 +125,17 @@ public:
   HandshakeListener &operator=(const HandshakeListener &) = delete;
   HandshakeListener &operator=(HandshakeListener &&) = delete;
 
-  virtual void notify_out() = 0;
+  virtual seastar::future<> notify_out(
+      crosscore_t::seq_t cc_seq) = 0;
 
-  virtual void notify_out_fault(const char *where, std::exception_ptr) = 0;
+  virtual seastar::future<> notify_out_fault(
+      crosscore_t::seq_t cc_seq,
+      const char *where,
+      std::exception_ptr,
+      io_handler_state) = 0;
 
-  virtual void notify_mark_down() = 0;
+  virtual seastar::future<> notify_mark_down(
+      crosscore_t::seq_t cc_seq) = 0;
 
 protected:
   HandshakeListener() = default;
@@ -60,24 +163,32 @@ public:
 /*
  * as ConnectionHandler
  */
-private:
+public:
+  seastar::shard_id get_shard_id() const final {
+    return shard_states->get_shard_id();
+  }
+
   bool is_connected() const final {
+    ceph_assert_always(seastar::this_shard_id() == get_shard_id());
     return protocol_is_connected;
   }
 
-  seastar::future<> send(MessageURef msg) final;
+  seastar::future<> send(MessageFRef msg) final;
 
   seastar::future<> send_keepalive() final;
 
   clock_t::time_point get_last_keepalive() const final {
+    ceph_assert_always(seastar::this_shard_id() == get_shard_id());
     return last_keepalive;
   }
 
   clock_t::time_point get_last_keepalive_ack() const final {
+    ceph_assert_always(seastar::this_shard_id() == get_shard_id());
     return last_keepalive_ack;
   }
 
   void set_last_keepalive_ack(clock_t::time_point when) final {
+    ceph_assert_always(seastar::this_shard_id() == get_shard_id());
     last_keepalive_ack = when;
   }
 
@@ -89,31 +200,39 @@ private:
  * The calls may be cross-core and asynchronous
  */
 public:
+  /*
+   * should not be called cross-core
+   */
+
   void set_handshake_listener(HandshakeListener &hl) {
+    assert(seastar::this_shard_id() == get_shard_id());
     ceph_assert_always(handshake_listener == nullptr);
     handshake_listener = &hl;
   }
 
+  io_handler_state get_states() const {
+    // might be called from prv_sid during wait_io_exit_dispatching()
+    return {in_seq, is_out_queued(), has_out_sent()};
+  }
+
   struct io_stat_printer {
     const IOHandler &io_handler;
   };
   void print_io_stat(std::ostream &out) const;
 
-  seastar::future<> close_io(
-      bool is_dispatch_reset,
-      bool is_replace) {
-    ceph_assert_always(io_state == io_state_t::drop);
-
-    if (is_dispatch_reset) {
-      dispatch_reset(is_replace);
-    }
+  seastar::future<> set_accepted_sid(
+      crosscore_t::seq_t cc_seq,
+      seastar::shard_id sid,
+      ConnectionFRef conn_fref);
 
-    ceph_assert_always(conn_ref);
-    conn_ref.reset();
+  /*
+   * may be called cross-core
+   */
 
-    assert(!gate.is_closed());
-    return gate.close();
-  }
+  seastar::future<> close_io(
+      crosscore_t::seq_t cc_seq,
+      bool is_dispatch_reset,
+      bool is_replace);
 
   /**
    * io_state_t
@@ -122,36 +241,219 @@ public:
    * io behavior accordingly.
    */
   enum class io_state_t : uint8_t {
-    none,  // no IO is possible as the connection is not available to the user yet.
-    delay, // IO is delayed until open.
-    open,  // Dispatch In and Out concurrently.
-    drop   // Drop IO as the connection is closed.
+    none,    // no IO is possible as the connection is not available to the user yet.
+    delay,   // IO is delayed until open.
+    open,    // Dispatch In and Out concurrently.
+    drop,    // Drop IO as the connection is closed.
+    switched // IO is switched to a different core
+             // (is moved to maybe_prv_shard_states)
   };
   friend class fmt::formatter<io_state_t>;
 
-  void set_io_state(const io_state_t &new_state, FrameAssemblerV2Ref fa=nullptr);
+  seastar::future<> set_io_state(
+      crosscore_t::seq_t cc_seq,
+      io_state_t new_state,
+      FrameAssemblerV2Ref fa,
+      bool set_notify_out);
 
-  seastar::future<FrameAssemblerV2Ref> wait_io_exit_dispatching();
+  struct exit_dispatching_ret {
+    FrameAssemblerV2Ref frame_assembler;
+    io_handler_state io_states;
+  };
+  seastar::future<exit_dispatching_ret>
+  wait_io_exit_dispatching(
+      crosscore_t::seq_t cc_seq);
 
-  void reset_session(bool full);
+  seastar::future<> reset_session(
+      crosscore_t::seq_t cc_seq,
+      bool full);
 
-  void requeue_out_sent_up_to(seq_num_t seq);
+  seastar::future<> reset_peer_state(
+      crosscore_t::seq_t cc_seq);
 
-  void requeue_out_sent();
+  seastar::future<> requeue_out_sent_up_to(
+      crosscore_t::seq_t cc_seq,
+      seq_num_t msg_seq);
 
-  bool is_out_queued_or_sent() const {
-    return is_out_queued() || !out_sent_msgs.empty();
-  }
+  seastar::future<> requeue_out_sent(
+      crosscore_t::seq_t cc_seq);
 
-  seq_num_t get_in_seq() const {
-    return in_seq;
+  seastar::future<> dispatch_accept(
+      crosscore_t::seq_t cc_seq,
+      seastar::shard_id new_sid,
+      ConnectionFRef,
+      bool is_replace);
+
+  seastar::future<> dispatch_connect(
+      crosscore_t::seq_t cc_seq,
+      seastar::shard_id new_sid,
+      ConnectionFRef);
+
+ private:
+  class shard_states_t;
+  using shard_states_ref_t = std::unique_ptr<shard_states_t>;
+
+  class shard_states_t {
+  public:
+    shard_states_t(seastar::shard_id _sid, io_state_t state)
+      : sid{_sid}, io_state{state} {}
+
+    seastar::shard_id get_shard_id() const {
+      return sid;
+    }
+
+    io_state_t get_io_state() const {
+      assert(seastar::this_shard_id() == sid);
+      return io_state;
+    }
+
+    void set_io_state(io_state_t new_state) {
+      assert(seastar::this_shard_id() == sid);
+      assert(io_state != new_state);
+      pr_io_state_changed.set_value();
+      pr_io_state_changed = seastar::promise<>();
+      if (io_state == io_state_t::open) {
+        // from open
+        if (out_dispatching) {
+          ceph_assert_always(!out_exit_dispatching.has_value());
+          out_exit_dispatching = seastar::promise<>();
+        }
+      }
+      io_state = new_state;
+    }
+
+    seastar::future<> wait_state_change() {
+      assert(seastar::this_shard_id() == sid);
+      return pr_io_state_changed.get_future();
+    }
+
+    template <typename Func>
+    void dispatch_in_background(
+        const char *what, SocketConnection &who, Func &&func) {
+      assert(seastar::this_shard_id() == sid);
+      ceph_assert_always(!gate.is_closed());
+      gate.dispatch_in_background(what, who, std::move(func));
+    }
+
+    void enter_in_dispatching() {
+      assert(seastar::this_shard_id() == sid);
+      assert(io_state == io_state_t::open);
+      ceph_assert_always(!in_exit_dispatching.has_value());
+      in_exit_dispatching = seastar::promise<>();
+    }
+
+    void exit_in_dispatching() {
+      assert(seastar::this_shard_id() == sid);
+      assert(io_state != io_state_t::open);
+      ceph_assert_always(in_exit_dispatching.has_value());
+      in_exit_dispatching->set_value();
+      in_exit_dispatching = std::nullopt;
+    }
+
+    bool try_enter_out_dispatching() {
+      assert(seastar::this_shard_id() == sid);
+      if (out_dispatching) {
+        // already dispatching out
+        return false;
+      }
+      switch (io_state) {
+      case io_state_t::open:
+        [[fallthrough]];
+      case io_state_t::delay:
+        out_dispatching = true;
+        return true;
+      case io_state_t::drop:
+        [[fallthrough]];
+      case io_state_t::switched:
+        // do not dispatch out
+        return false;
+      default:
+        ceph_abort("impossible");
+      }
+    }
+
+    void notify_out_dispatching_stopped(
+        const char *what, SocketConnection &conn);
+
+    void exit_out_dispatching(
+        const char *what, SocketConnection &conn) {
+      assert(seastar::this_shard_id() == sid);
+      ceph_assert_always(out_dispatching);
+      out_dispatching = false;
+      notify_out_dispatching_stopped(what, conn);
+    }
+
+    seastar::future<> wait_io_exit_dispatching();
+
+    seastar::future<> close() {
+      assert(seastar::this_shard_id() == sid);
+      assert(!gate.is_closed());
+      return gate.close();
+    }
+
+    bool assert_closed_and_exit() const {
+      assert(seastar::this_shard_id() == sid);
+      if (gate.is_closed()) {
+        ceph_assert_always(io_state == io_state_t::drop ||
+                           io_state == io_state_t::switched);
+        ceph_assert_always(!out_dispatching);
+        ceph_assert_always(!out_exit_dispatching);
+        ceph_assert_always(!in_exit_dispatching);
+        return true;
+      } else {
+        return false;
+      }
+    }
+
+    static shard_states_ref_t create(
+        seastar::shard_id sid, io_state_t state) {
+      return std::make_unique<shard_states_t>(sid, state);
+    }
+
+    static shard_states_ref_t create_from_previous(
+        shard_states_t &prv_states, seastar::shard_id new_sid);
+
+  private:
+    const seastar::shard_id sid;
+    io_state_t io_state;
+
+    crimson::common::Gated gate;
+    seastar::promise<> pr_io_state_changed;
+    bool out_dispatching = false;
+    std::optional<seastar::promise<>> out_exit_dispatching;
+    std::optional<seastar::promise<>> in_exit_dispatching;
+  };
+
+  void do_set_io_state(
+      io_state_t new_state,
+      std::optional<crosscore_t::seq_t> cc_seq = std::nullopt,
+      FrameAssemblerV2Ref fa = nullptr,
+      bool set_notify_out = false);
+
+  io_state_t get_io_state() const {
+    return shard_states->get_io_state();
   }
 
-  void dispatch_accept();
+  void do_requeue_out_sent();
 
-  void dispatch_connect();
+  void do_requeue_out_sent_up_to(seq_num_t seq);
+
+  void assign_frame_assembler(FrameAssemblerV2Ref);
+
+  seastar::future<> send_redirected(MessageFRef msg);
+
+  seastar::future<> do_send(MessageFRef msg);
+
+  seastar::future<> send_keepalive_redirected();
+
+  seastar::future<> do_send_keepalive();
+
+  seastar::future<> to_new_sid(
+      crosscore_t::seq_t cc_seq,
+      seastar::shard_id new_sid,
+      ConnectionFRef,
+      std::optional<bool> is_replace);
 
- private:
   void dispatch_reset(bool is_replace);
 
   void dispatch_remote_reset();
@@ -163,26 +465,58 @@ public:
             next_keepalive_ack.has_value());
   }
 
+  bool has_out_sent() const {
+    return !out_sent_msgs.empty();
+  }
+
+  void reset_in();
+
   void reset_out();
 
-  seastar::future<stop_t> try_exit_out_dispatch();
+  void discard_out_sent();
 
-  seastar::future<> do_out_dispatch();
+  seastar::future<> do_out_dispatch(shard_states_t &ctx);
 
-  ceph::bufferlist sweep_out_pending_msgs_to_sent(
+#ifdef UNIT_TESTS_BUILT
+  struct sweep_ret {
+    ceph::bufferlist bl;
+    std::vector<ceph::msgr::v2::Tag> tags;
+  };
+  sweep_ret
+#else
+  ceph::bufferlist
+#endif
+  sweep_out_pending_msgs_to_sent(
       bool require_keepalive,
       std::optional<utime_t> maybe_keepalive_ack,
       bool require_ack);
 
+  void maybe_notify_out_dispatch();
+
   void notify_out_dispatch();
 
   void ack_out_sent(seq_num_t seq);
 
-  seastar::future<> read_message(utime_t throttle_stamp, std::size_t msg_size);
+  seastar::future<> read_message(
+      shard_states_t &ctx,
+      utime_t throttle_stamp,
+      std::size_t msg_size);
 
   void do_in_dispatch();
 
+  seastar::future<> cleanup_prv_shard(seastar::shard_id prv_sid);
+
 private:
+  shard_states_ref_t shard_states;
+
+  crosscore_t crosscore;
+
+  // drop was happening in the previous sid
+  std::optional<seastar::shard_id> maybe_dropped_sid;
+
+  // the remaining states in the previous sid for cleanup, see to_new_sid()
+  shard_states_ref_t maybe_prv_shard_states;
+
   ChainedDispatchers &dispatchers;
 
   SocketConnection &conn;
@@ -192,35 +526,24 @@ private:
 
   HandshakeListener *handshake_listener = nullptr;
 
-  crimson::common::Gated gate;
-
   FrameAssemblerV2Ref frame_assembler;
 
   bool protocol_is_connected = false;
 
   bool need_dispatch_reset = true;
 
-  io_state_t io_state = io_state_t::none;
-
-  // wait until current io_state changed
-  seastar::promise<> io_state_changed;
-
   /*
    * out states for writing
    */
 
-  bool out_dispatching = false;
-
-  std::optional<seastar::promise<>> out_exit_dispatching;
-
   /// the seq num of the last transmitted message
   seq_num_t out_seq = 0;
 
   // messages to be resent after connection gets reset
-  std::deque<MessageURef> out_pending_msgs;
+  std::deque<MessageFRef> out_pending_msgs;
 
   // messages sent, but not yet acked by peer
-  std::deque<MessageURef> out_sent_msgs;
+  std::deque<MessageFRef> out_sent_msgs;
 
   bool need_keepalive = false;
 
@@ -228,12 +551,12 @@ private:
 
   uint64_t ack_left = 0;
 
+  bool need_notify_out = false;
+
   /*
    * in states for reading
    */
 
-  std::optional<seastar::promise<>> in_exit_dispatching;
-
   /// the seq num of the last received message
   seq_num_t in_seq = 0;
 
@@ -250,6 +573,23 @@ inline std::ostream& operator<<(
 
 } // namespace crimson::net
 
+template <>
+struct fmt::formatter<crimson::net::io_handler_state> {
+  constexpr auto parse(format_parse_context& ctx) {
+    return ctx.begin();
+  }
+
+  template <typename FormatContext>
+  auto format(crimson::net::io_handler_state state, FormatContext& ctx) {
+    return fmt::format_to(
+        ctx.out(),
+        "io(in_seq={}, is_out_queued={}, has_out_sent={})",
+        state.in_seq,
+        state.is_out_queued,
+        state.has_out_sent);
+  }
+};
+
 template <>
 struct fmt::formatter<crimson::net::IOHandler::io_state_t>
   : fmt::formatter<std::string_view> {
@@ -270,6 +610,9 @@ struct fmt::formatter<crimson::net::IOHandler::io_state_t>
     case drop:
       name = "drop";
       break;
+    case switched:
+      name = "switched";
+      break;
     }
     return formatter<string_view>::format(name, ctx);
   }
index 1c65f5b2fda987357d3fdc33478be4db0e155381..783cd74859e3d60fa636b064f1435b9b517b1cb3 100644 (file)
@@ -25,8 +25,6 @@ class Transaction;
 namespace crimson::os {
 class FuturizedCollection;
 
-constexpr core_id_t PRIMARY_CORE = 0;
-
 class FuturizedStore {
 public:
   class Shard {
index 5b1c6187ca2a2061343cc41e4ef83ec0a68e409b..4bdbab8c4e5de8d997cc2fd2c9f11b793126b15a 100644 (file)
@@ -51,6 +51,7 @@ set(crimson_seastore_srcs
   journal.cc
   device.cc
   segment_manager_group.cc
+  record_scanner.cc
   journal/circular_bounded_journal.cc
   ../../../test/crimson/seastore/test_block.cc
   ${PROJECT_SOURCE_DIR}/src/os/Transaction.cc
@@ -61,7 +62,7 @@ CMAKE_DEPENDENT_OPTION(WITH_ZNS "enable Linux ZNS support" OFF
 if(WITH_ZNS)
   find_package(LinuxZNS REQUIRED)
   list(APPEND crimson_seastore_srcs
-    segment_manager/zns.cc)
+    segment_manager/zbd.cc)
 endif()
 
 add_library(crimson-seastore STATIC
index 84677747b77cd15d39f9ba6b98abbd48a38b4e60..d7e398f5f732ad03b0e684fbaeb1e38af7423d6a 100644 (file)
@@ -986,7 +986,7 @@ segment_id_t SegmentCleaner::allocate_segment(
   ERROR("out of space with {} {} {} {}",
         type, segment_seq_printer_t{seq}, category,
         rewrite_gen_printer_t{generation});
-  ceph_abort();
+  ceph_abort("seastore device size setting is too small");
   return NULL_SEG_ID;
 }
 
@@ -1462,6 +1462,7 @@ void SegmentCleaner::mark_space_used(
 {
   LOG_PREFIX(SegmentCleaner::mark_space_used);
   assert(background_callback->get_state() >= state_t::SCAN_SPACE);
+  assert(len);
   // TODO: drop
   if (addr.get_addr_type() != paddr_types_t::SEGMENT) {
     return;
@@ -1492,6 +1493,7 @@ void SegmentCleaner::mark_space_free(
 {
   LOG_PREFIX(SegmentCleaner::mark_space_free);
   assert(background_callback->get_state() >= state_t::SCAN_SPACE);
+  assert(len);
   // TODO: drop
   if (addr.get_addr_type() != paddr_types_t::SEGMENT) {
     return;
index ce3f737b21a8e7077e63d1fc614141ca68e8e0fd..30ff4554074eaecd084efcc8aaf2961f67cecd3d 100644 (file)
@@ -40,14 +40,14 @@ const get_phy_tree_root_node_ret get_phy_tree_root_node<
     } else {
       return {false,
              trans_intr::make_interruptible(
-               seastar::make_ready_future<
-                 CachedExtentRef>(CachedExtentRef()))};
+               Cache::get_extent_ertr::make_ready_future<
+                 CachedExtentRef>())};
     }
   } else {
     return {false,
            trans_intr::make_interruptible(
-             seastar::make_ready_future<
-               CachedExtentRef>(CachedExtentRef()))};
+             Cache::get_extent_ertr::make_ready_future<
+               CachedExtentRef>())};
   }
 }
 
@@ -114,10 +114,9 @@ BtreeBackrefManager::get_mapping(
       } else {
        TRACET("{} got {}, {}",
               c.trans, offset, iter.get_key(), iter.get_val());
-       auto e = iter.get_pin(c);
        return get_mapping_ret(
          interruptible::ready_future_marker{},
-         std::move(e));
+         iter.get_pin(c));
       }
     });
   });
@@ -151,7 +150,7 @@ BtreeBackrefManager::get_mappings(
          TRACET("{}~{} got {}, {}, repeat ...",
                 c.trans, offset, end, pos.get_key(), pos.get_val());
          ceph_assert((pos.get_key().add_offset(pos.get_val().len)) > offset);
-         ret.push_back(pos.get_pin(c));
+         ret.emplace_back(pos.get_pin(c));
          return BackrefBtree::iterate_repeat_ret_inner(
            interruptible::ready_future_marker{},
            seastar::stop_iteration::no);
@@ -248,7 +247,8 @@ BtreeBackrefManager::new_mapping(
          });
        });
     }).si_then([c](auto &&state) {
-      return state.ret->get_pin(c);
+      return new_mapping_iertr::make_ready_future<BackrefMappingRef>(
+       state.ret->get_pin(c));
     });
 }
 
@@ -332,17 +332,6 @@ BtreeBackrefManager::merge_cached_backrefs(
   });
 }
 
-BtreeBackrefManager::check_child_trackers_ret
-BtreeBackrefManager::check_child_trackers(
-  Transaction &t) {
-  auto c = get_context(t);
-  return with_btree<BackrefBtree>(
-    cache, c,
-    [c](auto &btree) {
-    return btree.check_child_trackers(c);
-  });
-}
-
 BtreeBackrefManager::scan_mapped_space_ret
 BtreeBackrefManager::scan_mapped_space(
   Transaction &t,
@@ -397,34 +386,37 @@ BtreeBackrefManager::scan_mapped_space(
       );
     }).si_then([this, &scan_visitor, c, FNAME, block_size] {
       // traverse alloc-deltas in order
-      auto &backref_entry_mset = cache.get_backref_entry_mset();
-      DEBUGT("scan {} backref entries", c.trans, backref_entry_mset.size());
-      for (auto &backref_entry : backref_entry_mset) {
-       if (backref_entry.laddr == L_ADDR_NULL) {
-         TRACET("backref entry {}~{} {} free",
-                c.trans,
-                backref_entry.paddr,
-                backref_entry.len,
-                backref_entry.type);
-       } else {
-         TRACET("backref entry {}~{} {}~{} {} used",
-                c.trans,
-                backref_entry.paddr,
-                backref_entry.len,
-                backref_entry.laddr,
-                backref_entry.len,
-                backref_entry.type);
-       }
-       ceph_assert(backref_entry.paddr.is_absolute());
-       ceph_assert(backref_entry.len > 0 &&
-                   backref_entry.len % block_size == 0);
-       ceph_assert(!is_backref_node(backref_entry.type));
-       scan_visitor(
-           backref_entry.paddr,
+      auto &backref_entryrefs = cache.get_backref_entryrefs_by_seq();
+      for (auto &[seq, refs] : backref_entryrefs) {
+       boost::ignore_unused(seq);
+       DEBUGT("scan {} backref entries", c.trans, refs.size());
+       for (auto &backref_entry : refs) {
+         if (backref_entry->laddr == L_ADDR_NULL) {
+           TRACET("backref entry {}~{} {} free",
+                  c.trans,
+                  backref_entry->paddr,
+                  backref_entry->len,
+                  backref_entry->type);
+         } else {
+           TRACET("backref entry {}~{} {}~{} {} used",
+                  c.trans,
+                  backref_entry->paddr,
+                  backref_entry->len,
+                  backref_entry->laddr,
+                  backref_entry->len,
+                  backref_entry->type);
+         }
+         ceph_assert(backref_entry->paddr.is_absolute());
+         ceph_assert(backref_entry->len > 0 &&
+                     backref_entry->len % block_size == 0);
+         ceph_assert(!is_backref_node(backref_entry->type));
+         scan_visitor(
+           backref_entry->paddr,
            P_ADDR_NULL,
-           backref_entry.len,
-           backref_entry.type,
-           backref_entry.laddr);
+           backref_entry->len,
+           backref_entry->type,
+           backref_entry->laddr);
+       }
       }
     }).si_then([this, &scan_visitor, block_size, c, FNAME] {
       BackrefBtree::mapped_space_visitor_t f =
index e19d9ce7b065b4f10e27329aa74bde5e4b8cf1f8..952e78b65189a584eaee06b244eb8d7bac30aa0d 100644 (file)
@@ -34,6 +34,13 @@ public:
   extent_types_t get_type() const final {
     return type;
   }
+
+protected:
+  std::unique_ptr<BtreeNodeMapping<paddr_t, laddr_t>> _duplicate(
+    op_context_t<paddr_t> ctx) const final {
+    return std::unique_ptr<BtreeNodeMapping<paddr_t, laddr_t>>(
+      new BtreeBackrefMapping(ctx));
+  }
 };
 
 using BackrefBtree = FixedKVBtree<
@@ -75,8 +82,6 @@ public:
     Transaction &t,
     paddr_t offset) final;
 
-  check_child_trackers_ret check_child_trackers(Transaction &t) final;
-
   scan_mapped_space_ret scan_mapped_space(
     Transaction &t,
     scan_mapped_space_func_t &&f) final;
index 4a354bdca879868cd5f83bedcc8ab47337378e2e..3feedb997b4c39c674993a5751fb8d3a33b529b8 100644 (file)
@@ -127,9 +127,6 @@ public:
     Transaction &t,
     paddr_t offset) = 0;
 
-  using check_child_trackers_ret = base_iertr::future<>;
-  virtual check_child_trackers_ret check_child_trackers(Transaction &t) = 0;
-
   /**
    * scan all extents in both tree and cache,
    * including backref extents, logical extents and lba extents,
index fef89197fd9ec6238f0d217e45faa02babf63a2b..68188e9ff55022b91df5fd528b7120a51e871d04 100644 (file)
@@ -21,21 +21,6 @@ struct op_context_t {
 
 constexpr uint16_t MAX_FIXEDKVBTREE_DEPTH = 8;
 
-template <typename T>
-struct min_max_t {};
-
-template <>
-struct min_max_t<laddr_t> {
-  static constexpr laddr_t max = L_ADDR_MAX;
-  static constexpr laddr_t min = L_ADDR_MIN;
-};
-
-template <>
-struct min_max_t<paddr_t> {
-  static constexpr paddr_t max = P_ADDR_MAX;
-  static constexpr paddr_t min = P_ADDR_MIN;
-};
-
 template <typename bound_t>
 struct fixed_kv_node_meta_t {
   bound_t begin = min_max_t<bound_t>::min;
@@ -117,7 +102,7 @@ struct fixed_kv_node_meta_le_t {
 
 template <typename key_t, typename val_t>
 class BtreeNodeMapping : public PhysicalNodeMapping<key_t, val_t> {
-
+protected:
   op_context_t<key_t> ctx;
   /**
    * parent
@@ -127,11 +112,16 @@ class BtreeNodeMapping : public PhysicalNodeMapping<key_t, val_t> {
    */
   CachedExtentRef parent;
 
-  val_t value;
-  extent_len_t len;
+  pladdr_t value;
+  extent_len_t len = 0;
   fixed_kv_node_meta_t<key_t> range;
   uint16_t pos = std::numeric_limits<uint16_t>::max();
 
+  virtual std::unique_ptr<BtreeNodeMapping> _duplicate(op_context_t<key_t>) const = 0;
+  fixed_kv_node_meta_t<key_t> _get_pin_range() const {
+    return range;
+  }
+
 public:
   using val_type = val_t;
   BtreeNodeMapping(op_context_t<key_t> ctx) : ctx(ctx) {}
@@ -140,14 +130,14 @@ public:
     op_context_t<key_t> ctx,
     CachedExtentRef parent,
     uint16_t pos,
-    val_t &value,
+    pladdr_t value,
     extent_len_t len,
-    fixed_kv_node_meta_t<key_t> &&meta)
+    fixed_kv_node_meta_t<key_t> meta)
     : ctx(ctx),
       parent(parent),
       value(value),
       len(len),
-      range(std::move(meta)),
+      range(meta),
       pos(pos)
   {
     if (!parent->is_pending()) {
@@ -182,16 +172,20 @@ public:
   }
 
   val_t get_val() const final {
-    return value;
+    if constexpr (std::is_same_v<val_t, paddr_t>) {
+      return value.get_paddr();
+    } else {
+      static_assert(std::is_same_v<val_t, laddr_t>);
+      return value.get_laddr();
+    }
   }
 
-  key_t get_key() const final {
+  key_t get_key() const override {
     return range.begin;
   }
 
   PhysicalNodeMappingRef<key_t, val_t> duplicate() const final {
-    auto ret = std::unique_ptr<BtreeNodeMapping<key_t, val_t>>(
-      new BtreeNodeMapping<key_t, val_t>(ctx));
+    auto ret = _duplicate(ctx);
     ret->range = range;
     ret->value = value;
     ret->parent = parent;
index 2aaf1620fcb4d3ac9c05075ad2f74a762a8339f3..2970d04408506905ac36363c6769448a9248d8fb 100644 (file)
@@ -28,10 +28,12 @@ bool is_valid_child_ptr(ChildableCachedExtent* child);
 template <typename T>
 phy_tree_root_t& get_phy_tree_root(root_t& r);
 
+using get_child_iertr =
+  ::crimson::interruptible::interruptible_errorator<
+    typename trans_intr::condition,
+    get_child_ertr>;
 using get_phy_tree_root_node_ret =
-  std::pair<bool,
-            ::crimson::interruptible::interruptible_future<
-              typename trans_intr::condition, CachedExtentRef>>;
+  std::pair<bool, get_child_iertr::future<CachedExtentRef>>;
 
 template <typename T, typename key_t>
 const get_phy_tree_root_node_ret get_phy_tree_root_node(
@@ -195,7 +197,10 @@ public:
       if constexpr (
         std::is_same_v<crimson::os::seastore::lba_manager::btree::lba_map_val_t,
                        node_val_t>) {
-        ret.paddr = ret.paddr.maybe_relative_to(leaf.node->get_paddr());
+        if (ret.pladdr.is_paddr()) {
+          ret.pladdr = ret.pladdr.get_paddr().maybe_relative_to(
+            leaf.node->get_paddr());
+        }
       }
       return ret;
     }
@@ -213,8 +218,7 @@ public:
       return leaf.pos == 0;
     }
 
-    PhysicalNodeMappingRef<node_key_t, typename pin_t::val_type>
-    get_pin(op_context_t<node_key_t> ctx) const {
+    std::unique_ptr<pin_t> get_pin(op_context_t<node_key_t> ctx) const {
       assert(!is_end());
       auto val = get_val();
       auto key = get_key();
@@ -485,11 +489,13 @@ public:
     return upper_bound(c, min_max_t<node_key_t>::max);
   }
 
-  template <typename child_node_t, typename node_t>
+  template <typename child_node_t, typename node_t, bool lhc = leaf_has_children,
+           typename std::enable_if<lhc, int>::type = 0>
   void check_node(
     op_context_t<node_key_t> c,
     TCachedExtentRef<node_t> node)
   {
+    assert(leaf_has_children);
     for (auto i : *node) {
       CachedExtentRef child_node;
       Transaction::get_extent_ret ret;
@@ -499,35 +505,13 @@ public:
           i->get_val().maybe_relative_to(node->get_paddr()),
           &child_node);
       } else {
-        if constexpr (leaf_has_children) {
-          ret = c.trans.get_extent(
-            i->get_val().paddr.maybe_relative_to(node->get_paddr()),
-            &child_node);
-        }
+        assert(i->get_val().pladdr.is_paddr());
+        ret = c.trans.get_extent(
+          i->get_val().pladdr.get_paddr().maybe_relative_to(node->get_paddr()),
+          &child_node);
       }
       if (ret == Transaction::get_extent_ret::PRESENT) {
-        if (child_node->is_mutation_pending()) {
-          auto &prior = (child_node_t &)*child_node->prior_instance;
-          assert(prior.is_valid());
-          assert(prior.is_parent_valid());
-          if (node->is_mutation_pending()) {
-            auto &n = node->get_stable_for_key(i->get_key());
-            assert(prior.get_parent_node().get() == &n);
-            auto pos = n.lower_bound_offset(i->get_key());
-            assert(pos < n.get_node_size());
-            assert(n.children[pos] == &prior);
-          } else {
-            assert(prior.get_parent_node().get() == node.get());
-            assert(node->children[i->get_offset()] == &prior);
-          }
-        } else if (child_node->is_initial_pending()) {
-          auto cnode = child_node->template cast<child_node_t>();
-          auto pos = node->find(i->get_key()).get_offset();
-          auto child = node->children[pos];
-          assert(child);
-          assert(child == cnode.get());
-          assert(cnode->is_parent_valid());
-        } else {
+        if (child_node->is_stable()) {
           assert(child_node->is_valid());
           auto cnode = child_node->template cast<child_node_t>();
           assert(cnode->has_parent_tracker());
@@ -541,6 +525,32 @@ public:
             assert(cnode->get_parent_node().get() == node.get());
             assert(node->children[i->get_offset()] == cnode.get());
           }
+        } else if (child_node->is_pending()) {
+          if (child_node->is_mutation_pending()) {
+            auto &prior = (child_node_t &)*child_node->prior_instance;
+            assert(prior.is_valid());
+            assert(prior.is_parent_valid());
+            if (node->is_mutation_pending()) {
+              auto &n = node->get_stable_for_key(i->get_key());
+              assert(prior.get_parent_node().get() == &n);
+              auto pos = n.lower_bound_offset(i->get_key());
+              assert(pos < n.get_node_size());
+              assert(n.children[pos] == &prior);
+            } else {
+              assert(prior.get_parent_node().get() == node.get());
+              assert(node->children[i->get_offset()] == &prior);
+            }
+          } else {
+            auto cnode = child_node->template cast<child_node_t>();
+            auto pos = node->find(i->get_key()).get_offset();
+            auto child = node->children[pos];
+            assert(child);
+            assert(child == cnode.get());
+            assert(cnode->is_parent_valid());
+          }
+        } else {
+          ceph_assert(!child_node->is_valid());
+          ceph_abort("impossible");
         }
       } else if (ret == Transaction::get_extent_ret::ABSENT) {
         ChildableCachedExtent* child = nullptr;
@@ -570,7 +580,10 @@ public:
             assert(!c.cache.query_cache(i->get_val(), nullptr));
           } else {
             if constexpr (leaf_has_children) {
-              assert(!c.cache.query_cache(i->get_val().paddr, nullptr));
+              assert(i->get_val().pladdr.is_paddr()
+                ? (bool)!c.cache.query_cache(
+                    i->get_val().pladdr.get_paddr(), nullptr)
+                : true);
             }
           }
         }
@@ -581,6 +594,8 @@ public:
   }
 
   using check_child_trackers_ret = base_iertr::future<>;
+  template <bool lhc = leaf_has_children,
+            typename std::enable_if<lhc, int>::type = 0>
   check_child_trackers_ret check_child_trackers(
     op_context_t<node_key_t> c) {
     mapped_space_visitor_t checker = [c, this](
@@ -1395,7 +1410,7 @@ private:
     };
 
     if (found) {
-      return fut.then_interruptible(
+      return fut.si_then(
         [this, c, on_found_internal=std::move(on_found_internal),
         on_found_leaf=std::move(on_found_leaf)](auto root) {
         LOG_PREFIX(FixedKVBtree::lookup_root);
@@ -1474,7 +1489,7 @@ private:
 
     auto v = parent->template get_child<internal_node_t>(c, node_iter);
     if (v.has_child()) {
-      return v.get_child_fut().then(
+      return v.get_child_fut().safe_then(
         [on_found=std::move(on_found), node_iter, c,
         parent_entry](auto child) mutable {
         LOG_PREFIX(FixedKVBtree::lookup_internal_level);
@@ -1542,7 +1557,7 @@ private:
 
     auto v = parent->template get_child<leaf_node_t>(c, node_iter);
     if (v.has_child()) {
-      return v.get_child_fut().then(
+      return v.get_child_fut().safe_then(
         [on_found=std::move(on_found), node_iter, c,
         parent_entry](auto child) mutable {
         LOG_PREFIX(FixedKVBtree::lookup_leaf);
@@ -2039,7 +2054,7 @@ private:
 
         pos.node = replacement;
         if (donor_is_left) {
-          pos.pos += r->get_size();
+          pos.pos += l->get_size();
           parent_pos.pos--;
         }
 
@@ -2095,7 +2110,7 @@ private:
 
     auto v = parent_pos.node->template get_child<NodeType>(c, donor_iter);
     if (v.has_child()) {
-      return v.get_child_fut().then(
+      return v.get_child_fut().safe_then(
         [do_merge=std::move(do_merge), &pos,
         donor_iter, donor_is_left, c, parent_pos](auto child) mutable {
         LOG_PREFIX(FixedKVBtree::merge_level);
index fe5052824dc8e742a744f0318590c14a7cc09a75..956a1824e2a50967d2990d35a767cbcc2e7450be 100644 (file)
@@ -564,7 +564,7 @@ struct FixedKVInternalNode
     return this->get_split_pivot().get_offset();
   }
 
-  void prepare_write() final {
+  void prepare_commit() final {
     if (this->is_initial_pending()) {
       if (this->is_rewrite()) {
        this->set_children_from_prior_instance();
@@ -1004,7 +1004,7 @@ struct FixedKVLeafNode
     }
   }
 
-  void prepare_write() final {
+  void prepare_commit() final {
     if constexpr (has_children) {
       if (this->is_initial_pending()) {
        if (this->is_rewrite()) {
index d6c9fdce3aa6381cedecacca5390bd9c3908face..4d1dc929607d0859f6441219a70332bd383f3904 100644 (file)
@@ -85,12 +85,6 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
   ext = query_cache(addr, nullptr);
   if (ext) {
     DEBUGT("retire {}~{} in cache -- {}", t, addr, length, *ext);
-    if (ext->get_type() != extent_types_t::RETIRED_PLACEHOLDER) {
-      t.add_to_read_set(ext);
-      t.add_to_retired_set(ext);
-      return retire_extent_iertr::now();
-    }
-    // the retired-placeholder exists
   } else {
     // add a new placeholder to Cache
     ext = CachedExtent::make_cached_extent_ref<
@@ -105,8 +99,6 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
     const auto t_src = t.get_src();
     add_extent(ext, &t_src);
   }
-
-  // add the retired-placeholder to transaction
   t.add_to_read_set(ext);
   t.add_to_retired_set(ext);
   return retire_extent_iertr::now();
@@ -225,9 +217,9 @@ void Cache::register_metrics()
           "cache",
           {
             sm::make_counter(
-              "trans_invalidated",
+              "trans_invalidated_by_extent",
               counter,
-              sm::description("total number of transaction invalidated"),
+              sm::description("total number of transactions invalidated by extents"),
               {src_label, ext_label}
             ),
           }
@@ -295,6 +287,12 @@ void Cache::register_metrics()
       metrics.add_group(
         "cache",
         {
+          sm::make_counter(
+            "trans_invalidated",
+            efforts.total_trans_invalidated,
+            sm::description("total number of transactions invalidated"),
+            {src_label}
+          ),
           sm::make_counter(
             "invalidated_delta_bytes",
             efforts.mutate_delta_bytes,
@@ -782,7 +780,7 @@ void Cache::commit_replace_extent(
   extents.replace(*next, *prev);
 
   if (prev->get_type() == extent_types_t::ROOT) {
-    assert(prev->is_clean()
+    assert(prev->is_stable_clean()
       || prev->primary_ref_list_hook.is_linked());
     if (prev->is_dirty()) {
       stats.dirty_bytes -= prev->get_length();
@@ -843,6 +841,7 @@ void Cache::mark_transaction_conflicted(
 
   auto& efforts = get_by_src(stats.invalidated_efforts_by_src,
                              t.get_src());
+  ++efforts.total_trans_invalidated;
 
   auto& counter = get_by_ext(efforts.num_trans_invalidated,
                              conflicting_extent.get_type());
@@ -1003,6 +1002,8 @@ CachedExtentRef Cache::duplicate_for_write(
   Transaction &t,
   CachedExtentRef i) {
   LOG_PREFIX(Cache::duplicate_for_write);
+  assert(i->is_fully_loaded());
+
   if (i->is_mutable())
     return i;
 
@@ -1010,6 +1011,12 @@ CachedExtentRef Cache::duplicate_for_write(
     i->version++;
     i->state = CachedExtent::extent_state_t::EXIST_MUTATION_PENDING;
     i->last_committed_crc = i->get_crc32c();
+    // deepcopy the buffer of exist clean extent beacuse it shares
+    // buffer with original clean extent.
+    auto bp = i->get_bptr();
+    auto nbp = ceph::bufferptr(bp.c_str(), bp.length());
+    i->set_bptr(std::move(nbp));
+
     t.add_mutated_extent(i);
     DEBUGT("duplicate existing extent {}", t, *i);
     return i;
@@ -1098,6 +1105,7 @@ record_t Cache::prepare_record(
 
     i->prepare_write();
     i->set_io_wait();
+    i->prepare_commit();
 
     assert(i->get_version() > 0);
     auto final_crc = i->get_crc32c();
@@ -1200,6 +1208,7 @@ record_t Cache::prepare_record(
 
     bufferlist bl;
     i->prepare_write();
+    i->prepare_commit();
     bl.append(i->get_bptr());
     if (i->get_type() == extent_types_t::ROOT) {
       ceph_assert(0 == "ROOT never gets written as a fresh block");
@@ -1240,6 +1249,7 @@ record_t Cache::prepare_record(
     assert(!i->is_inline());
     get_by_ext(efforts.fresh_ool_by_ext,
                i->get_type()).increment(i->get_length());
+    i->prepare_commit();
     if (is_backref_mapped_extent_node(i)) {
       alloc_delta.alloc_blk_ranges.emplace_back(
        i->get_paddr(),
@@ -1835,6 +1845,8 @@ Cache::get_next_dirty_extents_ret Cache::get_next_dirty_extents(
        i != dirty.end() && bytes_so_far < max_bytes;
        ++i) {
     auto dirty_from = i->get_dirty_from();
+    //dirty extents must be fully loaded
+    assert(i->is_fully_loaded());
     if (unlikely(dirty_from == JOURNAL_SEQ_NULL)) {
       ERRORT("got dirty extent with JOURNAL_SEQ_NULL -- {}", t, *i);
       ceph_abort();
index 9289dda0881b579a35fffd9c5f0a10aba3591a4f..c79473f98ba28993fcc6bcddf06c168fde449f7b 100644 (file)
@@ -332,6 +332,16 @@ public:
       extent_init_func(*ret);
       return read_extent<T>(
        std::move(ret));
+    } else if (!cached->is_fully_loaded()) {
+      auto ret = TCachedExtentRef<T>(static_cast<T*>(cached.get()));
+      on_cache(*ret);
+      SUBDEBUG(seastore_cache,
+        "{} {}~{} is present without been fully loaded, reading ... -- {}",
+        T::TYPE, offset, length, *ret);
+      auto bp = alloc_cache_buf(length);
+      ret->set_bptr(std::move(bp));
+      return read_extent<T>(
+        std::move(ret));
     } else {
       SUBTRACE(seastore_cache,
           "{} {}~{} is present in cache -- {}",
@@ -377,31 +387,43 @@ public:
     auto result = t.get_extent(offset, &ret);
     if (result == Transaction::get_extent_ret::RETIRED) {
       SUBDEBUGT(seastore_cache, "{} {} is retired on t -- {}",
-          t, type, offset, *ret);
+                t, type, offset, *ret);
       return get_extent_if_cached_iertr::make_ready_future<
         CachedExtentRef>(ret);
     } else if (result == Transaction::get_extent_ret::PRESENT) {
-      SUBTRACET(seastore_cache, "{} {} is present on t -- {}",
-          t, type, offset, *ret);
-      return ret->wait_io().then([ret] {
-       return get_extent_if_cached_iertr::make_ready_future<
-         CachedExtentRef>(ret);
-      });
+      if (ret->is_fully_loaded()) {
+        SUBTRACET(seastore_cache, "{} {} is present on t -- {}",
+                  t, type, offset, *ret);
+        return ret->wait_io().then([ret] {
+         return get_extent_if_cached_iertr::make_ready_future<
+           CachedExtentRef>(ret);
+        });
+      } else {
+        SUBDEBUGT(seastore_cache, "{} {} is present on t -- {}"
+                  " without being fully loaded", t, type, offset, *ret);
+        return get_extent_if_cached_iertr::make_ready_future<
+          CachedExtentRef>();
+      }
     }
 
     // get_extent_ret::ABSENT from transaction
     auto metric_key = std::make_pair(t.get_src(), type);
     ret = query_cache(offset, &metric_key);
-    if (!ret ||
-        // retired_placeholder is not really cached yet
-        ret->get_type() == extent_types_t::RETIRED_PLACEHOLDER) {
-      SUBDEBUGT(seastore_cache, "{} {} is absent{}",
-                t, type, offset, !!ret ? "(placeholder)" : "");
-      return get_extent_if_cached_iertr::make_ready_future<
-        CachedExtentRef>();
+    if (!ret) {
+      SUBDEBUGT(seastore_cache, "{} {} is absent", t, type, offset);
+      return get_extent_if_cached_iertr::make_ready_future<CachedExtentRef>();
+    } else if (ret->get_type() == extent_types_t::RETIRED_PLACEHOLDER) {
+      // retired_placeholder is not really cached yet
+      SUBDEBUGT(seastore_cache, "{} {} is absent(placeholder)",
+                t, type, offset);
+      return get_extent_if_cached_iertr::make_ready_future<CachedExtentRef>();
+    } else if (!ret->is_fully_loaded()) {
+      SUBDEBUGT(seastore_cache, "{} {} is present without "
+                "being fully loaded", t, type, offset);
+      return get_extent_if_cached_iertr::make_ready_future<CachedExtentRef>();
     }
 
-    // present in cache and is not a retired_placeholder
+    // present in cache(fully loaded) and is not a retired_placeholder
     SUBDEBUGT(seastore_cache, "{} {} is present in cache -- {}",
               t, type, offset, *ret);
     t.add_to_read_set(ret);
@@ -432,33 +454,42 @@ public:
     CachedExtentRef ret;
     LOG_PREFIX(Cache::get_extent);
     auto result = t.get_extent(offset, &ret);
-    if (result != Transaction::get_extent_ret::ABSENT) {
-      SUBTRACET(seastore_cache, "{} {}~{} is {} on t -- {}",
-         t,
-         T::TYPE,
-         offset,
-         length,
-         result == Transaction::get_extent_ret::PRESENT ? "present" : "retired",
-         *ret);
-      assert(result != Transaction::get_extent_ret::RETIRED);
-      return ret->wait_io().then([ret] {
-       return seastar::make_ready_future<TCachedExtentRef<T>>(
-         ret->cast<T>());
-      });
+    if (result == Transaction::get_extent_ret::RETIRED) {
+      SUBERRORT(seastore_cache, "{} {}~{} is retired on t -- {}",
+                t, T::TYPE, offset, length, *ret);
+      ceph_abort("impossible");
+    } else if (result == Transaction::get_extent_ret::PRESENT) {
+      if (ret->is_fully_loaded()) {
+        SUBTRACET(seastore_cache, "{} {}~{} is present on t -- {}",
+                  t, T::TYPE, offset, length, *ret);
+        return ret->wait_io().then([ret] {
+         return seastar::make_ready_future<TCachedExtentRef<T>>(
+            ret->cast<T>());
+        });
+      } else {
+       assert(!ret->is_mutable());
+       touch_extent(*ret);
+        SUBDEBUGT(seastore_cache, "{} {}~{} is present on t without been \
+          fully loaded, reading ... {}", t, T::TYPE, offset, length, *ret);
+        auto bp = alloc_cache_buf(ret->get_length());
+        ret->set_bptr(std::move(bp));
+        return read_extent<T>(
+          ret->cast<T>());
+      }
+    } else {
+      SUBTRACET(seastore_cache, "{} {}~{} is absent on t, query cache ...",
+                t, T::TYPE, offset, length);
+      auto f = [&t, this](CachedExtent &ext) {
+        t.add_to_read_set(CachedExtentRef(&ext));
+        touch_extent(ext);
+      };
+      auto metric_key = std::make_pair(t.get_src(), T::TYPE);
+      return trans_intr::make_interruptible(
+        get_extent<T>(
+         offset, length, &metric_key,
+         std::forward<Func>(extent_init_func), std::move(f))
+      );
     }
-
-    SUBTRACET(seastore_cache, "{} {}~{} is absent on t, query cache ...",
-             t, T::TYPE, offset, length);
-    auto f = [&t, this](CachedExtent &ext) {
-      t.add_to_read_set(CachedExtentRef(&ext));
-      touch_extent(ext);
-    };
-    auto metric_key = std::make_pair(t.get_src(), T::TYPE);
-    return trans_intr::make_interruptible(
-      get_extent<T>(
-       offset, length, &metric_key,
-       std::forward<Func>(extent_init_func), std::move(f))
-    );
   }
 
   /*
@@ -475,7 +506,7 @@ public:
     extent_len_t length,
     Func &&extent_init_func) {
     CachedExtentRef ret;
-    LOG_PREFIX(Cache::get_extent);
+    LOG_PREFIX(Cache::get_absent_extent);
 
 #ifndef NDEBUG
     auto r = t.get_extent(offset, &ret);
@@ -522,7 +553,7 @@ public:
     return get_absent_extent<T>(t, offset, length, [](T &){});
   }
 
-  seastar::future<CachedExtentRef> get_extent_viewable_by_trans(
+  get_extent_ertr::future<CachedExtentRef> get_extent_viewable_by_trans(
     Transaction &t,
     CachedExtentRef extent)
   {
@@ -533,19 +564,34 @@ public:
        touch_extent(*p_extent);
       }
     }
+    // user should not see RETIRED_PLACEHOLDER extents
+    ceph_assert(p_extent->get_type() != extent_types_t::RETIRED_PLACEHOLDER);
+    if (!p_extent->is_fully_loaded()) {
+      assert(!p_extent->is_mutable());
+      touch_extent(*p_extent);
+      LOG_PREFIX(Cache::get_extent_viewable_by_trans);
+      SUBDEBUG(seastore_cache,
+        "{} {}~{} is present without been fully loaded, reading ... -- {}",
+        p_extent->get_type(), p_extent->get_paddr(),p_extent->get_length(),
+        *p_extent);
+      auto bp = alloc_cache_buf(p_extent->get_length());
+      p_extent->set_bptr(std::move(bp));
+      return read_extent<CachedExtent>(CachedExtentRef(p_extent));
+    }
     return p_extent->wait_io(
     ).then([p_extent] {
-      return CachedExtentRef(p_extent);
+      return get_extent_ertr::make_ready_future<CachedExtentRef>(
+        CachedExtentRef(p_extent));
     });
   }
 
   template <typename T>
-  seastar::future<TCachedExtentRef<T>> get_extent_viewable_by_trans(
+  get_extent_ertr::future<TCachedExtentRef<T>> get_extent_viewable_by_trans(
     Transaction &t,
     TCachedExtentRef<T> extent)
   {
     return get_extent_viewable_by_trans(t, CachedExtentRef(extent.get())
-    ).then([](auto p_extent) {
+    ).safe_then([](auto p_extent) {
       return p_extent->template cast<T>();
     });
   }
@@ -606,15 +652,26 @@ private:
     CachedExtentRef ret;
     auto status = t.get_extent(offset, &ret);
     if (status == Transaction::get_extent_ret::RETIRED) {
-      SUBDEBUGT(seastore_cache, "{} {}~{} {} is retired on t -- {}",
+      SUBERRORT(seastore_cache, "{} {}~{} {} is retired on t -- {}",
                 t, type, offset, length, laddr, *ret);
-      return seastar::make_ready_future<CachedExtentRef>();
+      ceph_abort("impossible");
     } else if (status == Transaction::get_extent_ret::PRESENT) {
-      SUBTRACET(seastore_cache, "{} {}~{} {} is present on t -- {}",
-                t, type, offset, length, laddr, *ret);
-      return ret->wait_io().then([ret] {
-       return seastar::make_ready_future<CachedExtentRef>(ret);
-      });
+      if (ret->is_fully_loaded()) {
+        SUBTRACET(seastore_cache, "{} {}~{} {} is present on t -- {}",
+                  t, type, offset, length, laddr, *ret);
+        return ret->wait_io().then([ret] {
+         return seastar::make_ready_future<CachedExtentRef>(ret);
+        });
+      } else {
+       assert(!ret->is_mutable());
+       touch_extent(*ret);
+        SUBDEBUGT(seastore_cache, "{} {}~{} {} is present on t without been \
+                  fully loaded, reading ...", t, type, offset, length, laddr);
+        auto bp = alloc_cache_buf(ret->get_length());
+        ret->set_bptr(std::move(bp));
+        return read_extent<CachedExtent>(
+          std::move(ret));
+      }
     } else {
       SUBTRACET(seastore_cache, "{} {}~{} {} is absent on t, query cache ...",
                 t, type, offset, length, laddr);
@@ -841,6 +898,48 @@ public:
     return ret;
   }
 
+  /**
+   * alloc_remapped_extent
+   *
+   * Allocates an EXIST_CLEAN extent. Use the buffer to fill the new extent
+   * if buffer exists.
+   */
+  template <typename T>
+  TCachedExtentRef<T> alloc_remapped_extent(
+    Transaction &t,
+    laddr_t remap_laddr,
+    paddr_t remap_paddr,
+    extent_len_t remap_length,
+    laddr_t original_laddr,
+    std::optional<ceph::bufferptr> &&original_bptr) {
+    LOG_PREFIX(Cache::alloc_remapped_extent);
+    assert(remap_laddr >= original_laddr);
+    TCachedExtentRef<T> ext;
+    if (original_bptr.has_value()) {
+      // shallow copy the buffer from original extent
+      auto nbp = ceph::bufferptr(
+        *original_bptr,
+        remap_laddr - original_laddr,
+        remap_length);
+      // ExtentPlacementManager::alloc_new_extent will make a new
+      // (relative/temp) paddr, so make extent directly
+      ext = CachedExtent::make_cached_extent_ref<T>(std::move(nbp));
+    } else {
+      ext = CachedExtent::make_placeholder_cached_extent_ref<T>(remap_length);
+    }
+
+    ext->init(CachedExtent::extent_state_t::EXIST_CLEAN,
+             remap_paddr,
+             PLACEMENT_HINT_NULL,
+             NULL_GENERATION,
+              t.get_trans_id());
+
+    t.add_fresh_extent(ext);
+    SUBTRACET(seastore_cache, "allocated {} {}B, hint={}, has ptr? {} -- {}",
+      t, T::TYPE, remap_length, remap_laddr, original_bptr.has_value(), *ext);
+    return ext;
+  }
+
   /**
    * alloc_new_extent
    *
@@ -1185,7 +1284,7 @@ public:
   {
     if (p_src && is_background_transaction(*p_src))
       return;
-    if (ext.is_clean() && !ext.is_placeholder()) {
+    if (ext.is_stable_clean() && !ext.is_placeholder()) {
       lru.move_to_top(ext);
     }
   }
@@ -1265,7 +1364,7 @@ private:
     }
 
     void add_to_lru(CachedExtent &extent) {
-      assert(extent.is_clean() && !extent.is_placeholder());
+      assert(extent.is_stable_clean() && !extent.is_placeholder());
       
       if (!extent.primary_ref_list_hook.is_linked()) {
        contents += extent.get_length();
@@ -1291,7 +1390,7 @@ private:
     }
 
     void remove_from_lru(CachedExtent &extent) {
-      assert(extent.is_clean() && !extent.is_placeholder());
+      assert(extent.is_stable_clean() && !extent.is_placeholder());
 
       if (extent.primary_ref_list_hook.is_linked()) {
        lru.erase(lru.s_iterator_to(extent));
@@ -1302,7 +1401,7 @@ private:
     }
 
     void move_to_top(CachedExtent &extent) {
-      assert(extent.is_clean() && !extent.is_placeholder());
+      assert(extent.is_stable_clean() && !extent.is_placeholder());
 
       if (extent.primary_ref_list_hook.is_linked()) {
        lru.erase(lru.s_iterator_to(extent));
@@ -1342,6 +1441,7 @@ private:
     io_stat_t fresh;
     io_stat_t fresh_ool_written;
     counter_by_extent_t<uint64_t> num_trans_invalidated;
+    uint64_t total_trans_invalidated = 0;
     uint64_t num_ool_records = 0;
     uint64_t ool_record_bytes = 0;
   };
@@ -1515,7 +1615,9 @@ private:
   get_extent_ret<T> read_extent(
     TCachedExtentRef<T>&& extent
   ) {
-    assert(extent->state == CachedExtent::extent_state_t::CLEAN_PENDING);
+    assert(extent->state == CachedExtent::extent_state_t::CLEAN_PENDING ||
+      extent->state == CachedExtent::extent_state_t::EXIST_CLEAN ||
+      extent->state == CachedExtent::extent_state_t::CLEAN);
     extent->set_io_wait();
     return epm.read(
       extent->get_paddr(),
@@ -1530,7 +1632,11 @@ private:
          extent->last_committed_crc = extent->get_crc32c();
 
          extent->on_clean_read();
-       } else {
+       } else if (extent->state == CachedExtent::extent_state_t::EXIST_CLEAN ||
+          extent->state == CachedExtent::extent_state_t::CLEAN) {
+         /* TODO: crc should be checked against LBA manager */
+         extent->last_committed_crc = extent->get_crc32c();
+        } else {
          ceph_assert(!extent->is_valid());
        }
         extent->complete_io();
index 464f34d79fdc7801dd69bfbc75f35f027d85665d..02f8ae46c95c8019a73e1b78c003a1459b6913b2 100644 (file)
@@ -250,6 +250,14 @@ public:
    */
   virtual void prepare_write() {}
 
+  /**
+   * prepare_commit
+   *
+   * Called prior to committing the transaction in which this extent
+   * is living.
+   */
+  virtual void prepare_commit() {}
+
   /**
    * on_initial_write
    *
@@ -332,6 +340,7 @@ public:
        << ", last_committed_crc=" << last_committed_crc
        << ", refcount=" << use_count()
        << ", user_hint=" << user_hint
+       << ", fully_loaded=" << is_fully_loaded()
        << ", rewrite_gen=" << rewrite_gen_printer_t{rewrite_generation};
     if (state != extent_state_t::INVALID &&
         state != extent_state_t::CLEAN_PENDING) {
@@ -407,6 +416,13 @@ public:
     return is_mutable() || state == extent_state_t::EXIST_CLEAN;
   }
 
+  /// Returns true if extent is stable and shared among transactions
+  bool is_stable() const {
+    return state == extent_state_t::CLEAN_PENDING ||
+      state == extent_state_t::CLEAN ||
+      state == extent_state_t::DIRTY;
+  }
+
   /// Returns true if extent has a pending delta
   bool is_mutation_pending() const {
     return state == extent_state_t::MUTATION_PENDING;
@@ -426,6 +442,13 @@ public:
            state == extent_state_t::EXIST_CLEAN;
   }
 
+  // Returs true if extent is stable and clean
+  bool is_stable_clean() const {
+    ceph_assert(is_valid());
+    return state == extent_state_t::CLEAN ||
+           state == extent_state_t::CLEAN_PENDING;
+  }
+
   /// Ruturns true if data is persisted while metadata isn't
   bool is_exist_clean() const {
     return state == extent_state_t::EXIST_CLEAN;
@@ -473,6 +496,12 @@ public:
     return dirty_from_or_retired_at;
   }
 
+  /// Return true if extent is fully loaded or is about to be fully loaded (call 
+  /// wait_io() in this case)
+  bool is_fully_loaded() const {
+    return ptr.has_value();
+  }
+
   /**
    * get_paddr
    *
@@ -481,8 +510,18 @@ public:
    */
   paddr_t get_paddr() const { return poffset; }
 
-  /// Returns length of extent
-  virtual extent_len_t get_length() const { return ptr.length(); }
+  /// Returns length of extent data in disk
+  extent_len_t get_length() const {
+    return length;
+  }
+
+  extent_len_t get_loaded_length() const {
+    if (ptr.has_value()) {
+      return ptr->length();
+    } else {
+      return 0;
+    }
+  }
 
   /// Returns version, get_version() == 0 iff is_clean()
   extent_version_t get_version() const {
@@ -498,8 +537,14 @@ public:
   }
 
   /// Get ref to raw buffer
-  bufferptr &get_bptr() { return ptr; }
-  const bufferptr &get_bptr() const { return ptr; }
+  bufferptr &get_bptr() {
+    assert(ptr.has_value());
+    return *ptr;
+  }
+  const bufferptr &get_bptr() const {
+    assert(ptr.has_value());
+    return *ptr;
+  }
 
   /// Compare by paddr
   friend bool operator< (const CachedExtent &a, const CachedExtent &b) {
@@ -579,6 +624,11 @@ private:
     return extent_index_hook.is_linked();
   }
 
+  /// set bufferptr
+  void set_bptr(ceph::bufferptr &&nptr) {
+    ptr = nptr;
+  }
+
   /// Returns true if the extent part of the open transaction
   bool is_pending_in_trans(transaction_id_t id) const {
     return is_pending() && pending_for_transaction == id;
@@ -602,8 +652,11 @@ private:
    */
   journal_seq_t dirty_from_or_retired_at;
 
-  /// Actual data contents
-  ceph::bufferptr ptr;
+  /// cache data contents, std::nullopt if no data in cache
+  std::optional<ceph::bufferptr> ptr;
+
+  /// disk data length
+  extent_len_t length;
 
   /// number of deltas since initial write
   extent_version_t version = 0;
@@ -649,24 +702,53 @@ protected:
   trans_view_set_t mutation_pendings;
 
   CachedExtent(CachedExtent &&other) = delete;
-  CachedExtent(ceph::bufferptr &&ptr) : ptr(std::move(ptr)) {}
+  CachedExtent(ceph::bufferptr &&_ptr) : ptr(std::move(_ptr)) {
+    length = ptr->length();
+    assert(length > 0);
+  }
+
+  /// construct new CachedExtent, will deep copy the buffer
   CachedExtent(const CachedExtent &other)
     : state(other.state),
       dirty_from_or_retired_at(other.dirty_from_or_retired_at),
-      ptr(other.ptr.c_str(), other.ptr.length()),
+      length(other.get_length()),
       version(other.version),
-      poffset(other.poffset) {}
+      poffset(other.poffset) {
+      assert((length % CEPH_PAGE_SIZE) == 0);
+      if (other.is_fully_loaded()) {
+        ptr.emplace(buffer::create_page_aligned(length));
+        other.ptr->copy_out(0, length, ptr->c_str());
+      } else {
+        // the extent must be fully loaded before CoW
+        assert(length == 0); // in case of root
+      }
+  }
 
   struct share_buffer_t {};
-  CachedExtent(const CachedExtent &other, share_buffer_t) :
-    state(other.state),
-    dirty_from_or_retired_at(other.dirty_from_or_retired_at),
-    ptr(other.ptr),
-    version(other.version),
-    poffset(other.poffset) {}
+  /// construct new CachedExtent, will shallow copy the buffer
+  CachedExtent(const CachedExtent &other, share_buffer_t)
+    : state(other.state),
+      dirty_from_or_retired_at(other.dirty_from_or_retired_at),
+      ptr(other.ptr),
+      length(other.get_length()),
+      version(other.version),
+      poffset(other.poffset) {}
+
+  // 0 length is only possible for the RootBlock
+  struct zero_length_t {};
+  CachedExtent(zero_length_t) : ptr(ceph::bufferptr(0)), length(0) {};
 
   struct retired_placeholder_t{};
-  CachedExtent(retired_placeholder_t) : state(extent_state_t::INVALID) {}
+  CachedExtent(retired_placeholder_t, extent_len_t _length)
+    : state(extent_state_t::INVALID),
+      length(_length) {
+    assert(length > 0);
+  }
+
+  /// no buffer extent, for lazy read
+  CachedExtent(extent_len_t _length) : length(_length) {
+    assert(length > 0);
+  }
 
   friend class Cache;
   template <typename T, typename... Args>
@@ -675,6 +757,12 @@ protected:
     return new T(std::forward<Args>(args)...);
   }
 
+  template <typename T>
+  static TCachedExtentRef<T> make_placeholder_cached_extent_ref(
+    extent_len_t length) {
+    return new T(length);
+  }
+
   void reset_prior_instance() {
     prior_instance.reset();
   }
@@ -898,12 +986,14 @@ private:
   uint16_t pos = std::numeric_limits<uint16_t>::max();
 };
 
+using get_child_ertr = crimson::errorator<
+  crimson::ct_error::input_output_error>;
 template <typename T>
 struct get_child_ret_t {
-  std::variant<child_pos_t, seastar::future<TCachedExtentRef<T>>> ret;
+  std::variant<child_pos_t, get_child_ertr::future<TCachedExtentRef<T>>> ret;
   get_child_ret_t(child_pos_t pos)
     : ret(std::move(pos)) {}
-  get_child_ret_t(seastar::future<TCachedExtentRef<T>> child)
+  get_child_ret_t(get_child_ertr::future<TCachedExtentRef<T>> child)
     : ret(std::move(child)) {}
 
   bool has_child() const {
@@ -915,7 +1005,7 @@ struct get_child_ret_t {
     return std::get<0>(ret);
   }
 
-  seastar::future<TCachedExtentRef<T>> &get_child_fut() {
+  get_child_ertr::future<TCachedExtentRef<T>> &get_child_fut() {
     ceph_assert(ret.index() == 1);
     return std::get<1>(ret);
   }
@@ -938,6 +1028,15 @@ public:
   virtual bool has_been_invalidated() const = 0;
   virtual CachedExtentRef get_parent() const = 0;
   virtual uint16_t get_pos() const = 0;
+  // An lba pin may be indirect, see comments in lba_manager/btree/btree_lba_manager.h
+  virtual bool is_indirect() const { return false; }
+  virtual key_t get_intermediate_key() const { return min_max_t<key_t>::null; }
+  virtual key_t get_intermediate_base() const { return min_max_t<key_t>::null; }
+  virtual extent_len_t get_intermediate_length() const { return 0; }
+  // The start offset of the pin, must be 0 if the pin is not indirect
+  virtual extent_len_t get_intermediate_offset() const {
+    return std::numeric_limits<extent_len_t>::max();
+  }
 
   virtual get_child_ret_t<LogicalCachedExtent>
   get_logical_extent(Transaction &t) = 0;
@@ -978,14 +1077,10 @@ using backref_pin_list_t = std::list<BackrefMappingRef>;
  * the Cache interface boundary.
  */
 class RetiredExtentPlaceholder : public CachedExtent {
-  extent_len_t length;
 
 public:
   RetiredExtentPlaceholder(extent_len_t length)
-    : CachedExtent(CachedExtent::retired_placeholder_t{}),
-      length(length) {}
-
-  extent_len_t get_length() const final { return length; }
+    : CachedExtent(CachedExtent::retired_placeholder_t{}, length) {}
 
   CachedExtentRef duplicate_for_write(Transaction&) final {
     ceph_assert(0 == "Should never happen for a placeholder");
@@ -1109,6 +1204,12 @@ public:
     laddr = nladdr;
   }
 
+  void maybe_set_intermediate_laddr(LBAMapping &mapping) {
+    laddr = mapping.is_indirect()
+      ? mapping.get_intermediate_base()
+      : mapping.get_key();
+  }
+
   void apply_delta_and_adjust_crc(
     paddr_t base, const ceph::bufferlist &bl) final {
     apply_delta(bl);
@@ -1140,6 +1241,8 @@ protected:
   }
 
 private:
+  // the logical address of the extent, and if shared,
+  // it is the intermediate_base, see BtreeLBAMapping comments.
   laddr_t laddr = L_ADDR_NULL;
 };
 
index 9eaeefc72a67108200b8bcceca35096733a4104a..ed17e2b12ef7efbebbf04936e1322cdb5908985a 100644 (file)
@@ -46,7 +46,6 @@ std::ostream &CollectionNode::print_detail_l(std::ostream &out) const
 CollectionNode::list_ret
 CollectionNode::list()
 {
-  read_to_local();
   logger().debug("CollectionNode:{}, {}", __func__, *this);
   CollectionManager::list_ret_bare list_result;
   for (auto &[coll, bits] : decoded) {
@@ -60,7 +59,6 @@ CollectionNode::list()
 CollectionNode::create_ret
 CollectionNode::create(coll_context_t cc, coll_t coll, unsigned bits)
 {
-  read_to_local();
   logger().debug("CollectionNode:{}", __func__);
   if (!is_mutable()) {
     auto mut = cc.tm.get_mutable_extent(cc.t, this)->cast<CollectionNode>();
@@ -88,8 +86,8 @@ CollectionNode::create(coll_context_t cc, coll_t coll, unsigned bits)
 CollectionNode::update_ret
 CollectionNode::update(coll_context_t cc, coll_t coll, unsigned bits)
 {
-  read_to_local();
-  logger().debug("CollectionNode:{}", __func__);
+  logger().debug("trans.{} CollectionNode:{} {} {}",
+    cc.t.get_trans_id(), __func__, coll, bits);
   if (!is_mutable()) {
     auto mut = cc.tm.get_mutable_extent(cc.t, this)->cast<CollectionNode>();
     return mut->update(cc, coll, bits);
@@ -105,8 +103,8 @@ CollectionNode::update(coll_context_t cc, coll_t coll, unsigned bits)
 CollectionNode::remove_ret
 CollectionNode::remove(coll_context_t cc, coll_t coll)
 {
-  read_to_local();
-  logger().debug("CollectionNode:{}", __func__);
+  logger().debug("trans.{} CollectionNode:{} {}",
+    cc.t.get_trans_id(),__func__, coll);
   if (!is_mutable()) {
     auto mut = cc.tm.get_mutable_extent(cc.t, this)->cast<CollectionNode>();
     return mut->remove(cc, coll);
index 1652eb92f227ba3f7e3d0cd344df488638cc8eea..2690fb5fdf464bd64a48cb7935a8bb58367f255d 100644 (file)
@@ -94,11 +94,11 @@ struct CollectionNode
   : LogicalCachedExtent {
   using CollectionNodeRef = TCachedExtentRef<CollectionNode>;
 
-  bool loaded = false;
-
-  template <typename... T>
-  CollectionNode(T&&... t)
-    : LogicalCachedExtent(std::forward<T>(t)...) {}
+  explicit CollectionNode(ceph::bufferptr &&ptr)
+    : LogicalCachedExtent(std::move(ptr)) {}
+  explicit CollectionNode(const CollectionNode &other)
+    : LogicalCachedExtent(other),
+      decoded(other.decoded) {}
 
   static constexpr extent_types_t type = extent_types_t::COLL_BLOCK;
 
@@ -134,13 +134,11 @@ struct CollectionNode
   using update_ret = CollectionManager::update_ret;
   update_ret update(coll_context_t cc, coll_t coll, unsigned bits);
 
-  void read_to_local() {
-    if (loaded) return;
+  void on_clean_read() final {
     bufferlist bl;
     bl.append(get_bptr());
     auto iter = bl.cbegin();
     decode((base_coll_map_t&)decoded, iter);
-    loaded = true;
   }
 
   void copy_to_node() {
index 15ce920ec0a6eff361e51185aab0706349878a0b..decb095f6f98b711ba5f77fe6fdb84232ad671e4 100644 (file)
@@ -80,7 +80,6 @@ FlatCollectionManager::create(coll_root_t &coll_root, Transaction &t,
           coll_root.update(root_extent->get_laddr(), root_extent->get_length());
 
          root_extent->decoded = extent->decoded;
-         root_extent->loaded = true;
          return root_extent->create(
            get_coll_context(t), cid, info.split_bits
          ).si_then([=, this, &t](auto result) {
index 8d0de4e18ecd4247e7887bb1ea457094856a6c4d..ec41bfab142649d8ce36678003b3ca86669064ce 100644 (file)
@@ -36,7 +36,6 @@ CircularBoundedJournal::open_for_mkfs()
 {
   return record_submitter.open(true
   ).safe_then([this](auto ret) {
-    record_submitter.update_committed_to(get_written_to());
     return open_for_mkfs_ret(
       open_for_mkfs_ertr::ready_future_marker{},
       get_written_to());
@@ -48,7 +47,6 @@ CircularBoundedJournal::open_for_mount()
 {
   return record_submitter.open(false
   ).safe_then([this](auto ret) {
-    record_submitter.update_committed_to(get_written_to());
     return open_for_mount_ret(
       open_for_mount_ertr::ready_future_marker{},
       get_written_to());
@@ -111,115 +109,192 @@ CircularBoundedJournal::do_submit_record(
   });
 }
 
+Journal::replay_ret CircularBoundedJournal::replay_segment(
+   cbj_delta_handler_t &handler, scan_valid_records_cursor& cursor)
+{
+  LOG_PREFIX(Journal::replay_segment);
+  return seastar::do_with(
+    RecordScanner::found_record_handler_t(
+      [this, &handler, FNAME](
+      record_locator_t locator,
+      const record_group_header_t& r_header,
+      const bufferlist& mdbuf)
+      -> RecordScanner::scan_valid_records_ertr::future<>
+    {
+      auto maybe_record_deltas_list = try_decode_deltas(
+        r_header, mdbuf, locator.record_block_base);
+      if (!maybe_record_deltas_list) {
+        // This should be impossible, we did check the crc on the mdbuf
+        ERROR("unable to decode deltas for record {} at {}",
+              r_header, locator.record_block_base);
+        return crimson::ct_error::input_output_error::make();
+      }
+      assert(locator.write_result.start_seq != JOURNAL_SEQ_NULL);
+      auto cursor_addr = convert_paddr_to_abs_addr(locator.write_result.start_seq.offset);
+      DEBUG("{} at {}", r_header, cursor_addr);
+      journal_seq_t start_seq = locator.write_result.start_seq;
+      auto write_result = write_result_t{
+       start_seq,
+        r_header.mdlength + r_header.dlength
+      };
+      auto expected_seq = locator.write_result.start_seq.segment_seq;
+      cursor_addr += (r_header.mdlength + r_header.dlength);
+      if (cursor_addr >= get_journal_end()) {
+        cursor_addr = get_records_start();
+        ++expected_seq;
+        paddr_t addr = convert_abs_addr_to_paddr(
+          cursor_addr,
+          get_device_id());
+        write_result.start_seq.offset = addr;
+        write_result.start_seq.segment_seq = expected_seq;
+      }
+      paddr_t addr = convert_abs_addr_to_paddr(
+        cursor_addr,
+        get_device_id());
+      set_written_to(
+        journal_seq_t{expected_seq, addr});
+      return seastar::do_with(
+        std::move(*maybe_record_deltas_list),
+        [write_result,
+        &handler,
+        FNAME](auto& record_deltas_list) {
+        return crimson::do_for_each(
+          record_deltas_list,
+          [write_result,
+          &handler, FNAME](record_deltas_t& record_deltas) {
+          auto locator = record_locator_t{
+            record_deltas.record_block_base,
+            write_result
+          };
+          DEBUG("processing {} deltas at block_base {}",
+              record_deltas.deltas.size(),
+              locator);
+          return crimson::do_for_each(
+            record_deltas.deltas,
+            [locator,
+            &handler](auto& p) {
+            auto& modify_time = p.first;
+            auto& delta = p.second;
+            return handler(
+              locator,
+              delta,
+              modify_time).discard_result();
+          });
+        });
+      });
+    }),
+    [=, this, &cursor](auto &dhandler) {
+      return scan_valid_records(
+        cursor,
+       cjs.get_cbj_header().magic,
+        std::numeric_limits<size_t>::max(),
+        dhandler).safe_then([](auto){}
+      ).handle_error(
+        replay_ertr::pass_further{},
+        crimson::ct_error::assert_all{
+          "shouldn't meet with any other error other replay_ertr"
+        }
+      );
+    }
+  );
+}
+
+
 Journal::replay_ret CircularBoundedJournal::scan_valid_record_delta(
-   cbj_delta_handler_t &&delta_handler, journal_seq_t tail)
+   cbj_delta_handler_t &&handler, journal_seq_t tail)
 {
-  LOG_PREFIX(CircularBoundedJournal::scan_valid_record_delta);
+  LOG_PREFIX(Journal::scan_valid_record_delta);
+  INFO("starting at {} ", tail);
   return seastar::do_with(
+    scan_valid_records_cursor(tail),
+    std::move(handler),
     bool(false),
-    rbm_abs_addr(get_rbm_addr(tail)),
-    std::move(delta_handler),
-    segment_seq_t(NULL_SEG_SEQ),
-    [this, FNAME](auto &is_rolled, auto &cursor_addr, auto &d_handler, auto &expected_seq) {
-    return crimson::repeat(
-      [this, &is_rolled, &cursor_addr, &d_handler, &expected_seq, FNAME]() mutable
-      -> replay_ertr::future<seastar::stop_iteration> {
-      paddr_t record_paddr = convert_abs_addr_to_paddr(
-       cursor_addr,
-       get_device_id());
-      return read_record(record_paddr, expected_seq
-      ).safe_then([this, &is_rolled, &cursor_addr, &d_handler, &expected_seq, FNAME](auto ret)
-         -> replay_ertr::future<seastar::stop_iteration> {
-       if (!ret.has_value()) {
-         if (expected_seq == NULL_SEG_SEQ || is_rolled) {
-           DEBUG("no more records, stop replaying");
-           return replay_ertr::make_ready_future<
-             seastar::stop_iteration>(seastar::stop_iteration::yes);
-         } else {
-           cursor_addr = get_records_start();
-           ++expected_seq;
-           is_rolled = true;
-           return replay_ertr::make_ready_future<
-             seastar::stop_iteration>(seastar::stop_iteration::no);
-         }
-       }
-       auto [r_header, bl] = *ret;
-       bufferlist mdbuf;
-       mdbuf.substr_of(bl, 0, r_header.mdlength);
-       paddr_t record_block_base = paddr_t::make_blk_paddr(
-         get_device_id(), cursor_addr + r_header.mdlength);
-       auto maybe_record_deltas_list = try_decode_deltas(
-         r_header, mdbuf, record_block_base);
-       if (!maybe_record_deltas_list) {
-         // This should be impossible, we did check the crc on the mdbuf
-         ERROR("unable to decode deltas for record {} at {}",
-               r_header, record_block_base);
-         return crimson::ct_error::input_output_error::make();
-       }
-       DEBUG("{} at {}", r_header, cursor_addr);
-       auto write_result = write_result_t{
-         r_header.committed_to,
-         bl.length()
-       };
-       if (expected_seq == NULL_SEG_SEQ) {
-         expected_seq = r_header.committed_to.segment_seq;
-       } else {
-         assert(expected_seq == r_header.committed_to.segment_seq);
-       }
-       cursor_addr += bl.length();
-       if (cursor_addr >= get_journal_end()) {
-         assert(cursor_addr == get_journal_end());
-         cursor_addr = get_records_start();
-         ++expected_seq;
-         paddr_t addr = convert_abs_addr_to_paddr(
-           cursor_addr,
-           get_device_id());
-         write_result.start_seq.offset = addr;
-         write_result.start_seq.segment_seq = expected_seq;
-         is_rolled = true;
-       }
-       paddr_t addr = convert_abs_addr_to_paddr(
-         cursor_addr,
-         get_device_id());
-       set_written_to(
-         journal_seq_t{expected_seq, addr});
-       return seastar::do_with(
-         std::move(*maybe_record_deltas_list),
-         [write_result,
-         &d_handler,
-         FNAME](auto& record_deltas_list) {
-         return crimson::do_for_each(
-           record_deltas_list,
-           [write_result,
-           &d_handler, FNAME](record_deltas_t& record_deltas) {
-           auto locator = record_locator_t{
-             record_deltas.record_block_base,
-             write_result
-           };
-           DEBUG("processing {} deltas at block_base {}",
-               record_deltas.deltas.size(),
-               locator);
-           return crimson::do_for_each(
-             record_deltas.deltas,
-             [locator,
-             &d_handler](auto& p) {
-             auto& modify_time = p.first;
-             auto& delta = p.second;
-             return d_handler(
-               locator,
-               delta,
-               modify_time).discard_result();
-           });
-         }).safe_then([]() {
-           return replay_ertr::make_ready_future<
-             seastar::stop_iteration>(seastar::stop_iteration::no);
-         });
-       });
+    [this] (auto &cursor, auto &handler, auto &rolled) {
+    return crimson::repeat([this, &handler, &cursor, &rolled]()
+    -> replay_ertr::future<seastar::stop_iteration>
+    {
+      return replay_segment(handler, cursor
+      ).safe_then([this, &cursor, &rolled] {
+        if (!rolled) {
+          cursor.last_valid_header_found = false;
+        }
+        if (!cursor.is_complete()) {
+          try_read_rolled_header(cursor);
+         rolled = true;
+          return replay_ertr::make_ready_future<
+            seastar::stop_iteration>(seastar::stop_iteration::no);
+        }
+        return replay_ertr::make_ready_future<
+          seastar::stop_iteration>(seastar::stop_iteration::yes);
       });
     });
   });
 }
 
+RecordScanner::read_ret CircularBoundedJournal::read(paddr_t start, size_t len) 
+{
+  LOG_PREFIX(CircularBoundedJournal::read);
+  rbm_abs_addr addr = convert_paddr_to_abs_addr(start);
+  DEBUG("reading data from addr {} read length {}", addr, len);
+  auto bptr = bufferptr(ceph::buffer::create_page_aligned(len));
+  return cjs.read(addr, bptr 
+  ).safe_then([bptr=std::move(bptr)]() {
+    return read_ret(
+      RecordScanner::read_ertr::ready_future_marker{},
+      std::move(bptr)
+    );
+  });
+}
+
+bool CircularBoundedJournal::is_record_segment_seq_invalid(
+  scan_valid_records_cursor &cursor,
+  record_group_header_t &r_header) 
+{
+  LOG_PREFIX(CircularBoundedJournal::is_record_segment_seq_invalid);
+  auto print_invalid = [FNAME](auto &r_header) {
+    DEBUG("invalid header: {}", r_header);
+    return true;
+  };
+  if (cursor.seq.offset == convert_abs_addr_to_paddr(
+      get_records_start(), get_device_id())) {
+    if ((r_header.committed_to.segment_seq == NULL_SEG_SEQ &&
+       cursor.seq.segment_seq != 0) ||
+       r_header.committed_to.segment_seq != cursor.seq.segment_seq - 1) {
+      return print_invalid(r_header);
+    }
+  } else if (r_header.committed_to.segment_seq != cursor.seq.segment_seq) {
+    /*
+     * Assuing that seastore issues several records using submit_recods() 
+     * as shown in the following example. 
+     *
+     * Example )
+     *         a. submit_record(a);
+     *         b. submit_record(b);
+     *  c. submit_record(c);
+     *  d. roll to begin
+     *  e. submit_record(d);
+     *  f. submit_record(e);
+     *  g. submit_record(f);
+     *
+     * In this example, we need to consider the two cases.
+     * case 1)
+     *         records a - e were issued in a batch manner
+     * case 2)
+     *  When starts to submit_record(e) at step 6, submit(b) has completed its finalize phase, 
+     *  so the header of e's committed_to points to the end of b.
+     *
+     * To handle these cases correctly, the following condition is added.
+     */
+    if ((r_header.committed_to.offset >= cursor.last_committed.offset &&
+       r_header.committed_to.segment_seq == cursor.last_committed.segment_seq) &&
+       r_header.committed_to.segment_seq == cursor.seq.segment_seq - 1) {
+      return false;
+    }
+    return print_invalid(r_header);
+  }
+  return false;
+}
+
 Journal::replay_ret CircularBoundedJournal::replay(
     delta_handler_t &&delta_handler)
 {
@@ -286,7 +361,13 @@ Journal::replay_ret CircularBoundedJournal::replay(
        return scan_valid_record_delta(std::move(call_d_handler_if_valid), tail);
       });
     }).safe_then([this]() {
-      record_submitter.update_committed_to(get_written_to());
+      // make sure that committed_to is JOURNAL_SEQ_NULL if jounal is the initial state
+      if (get_written_to() != 
+         journal_seq_t{0,
+           convert_abs_addr_to_paddr(get_records_start(),
+           get_device_id())}) {
+       record_submitter.update_committed_to(get_written_to());
+      }
       trimmer.update_journal_tails(
        get_dirty_tail(),
        get_alloc_tail());
@@ -294,81 +375,6 @@ Journal::replay_ret CircularBoundedJournal::replay(
   });
 }
 
-CircularBoundedJournal::read_record_ret
-CircularBoundedJournal::return_record(record_group_header_t& header, bufferlist bl)
-{
-  LOG_PREFIX(CircularBoundedJournal::return_record);
-  DEBUG("record size {}", bl.length());
-  assert(bl.length() == header.mdlength + header.dlength);
-  bufferlist md_bl, data_bl;
-  md_bl.substr_of(bl, 0, header.mdlength);
-  data_bl.substr_of(bl, header.mdlength, header.dlength);
-  if (validate_records_metadata(md_bl) &&
-      validate_records_data(header, data_bl)) {
-    return read_record_ret(
-      read_record_ertr::ready_future_marker{},
-      std::make_pair(header, std::move(bl)));
-  } else {
-    DEBUG("invalid matadata");
-    return read_record_ret(
-      read_record_ertr::ready_future_marker{},
-      std::nullopt);
-  }
-}
-
-CircularBoundedJournal::read_record_ret
-CircularBoundedJournal::read_record(paddr_t off, segment_seq_t expected_seq)
-{
-  LOG_PREFIX(CircularBoundedJournal::read_record);
-  rbm_abs_addr addr = convert_paddr_to_abs_addr(off);
-  auto read_length = get_block_size();
-  assert(addr + read_length <= get_journal_end());
-  DEBUG("reading record from abs addr {} read length {}", addr, read_length);
-  auto bptr = bufferptr(ceph::buffer::create_page_aligned(read_length));
-  return cjs.read(addr, bptr
-  ).safe_then([this, addr, bptr, expected_seq, FNAME]() mutable
-    -> read_record_ret {
-    record_group_header_t h;
-    bufferlist bl;
-    bl.append(bptr);
-    auto bp = bl.cbegin();
-    try {
-      decode(h, bp);
-    } catch (ceph::buffer::error &e) {
-      return read_record_ret(
-       read_record_ertr::ready_future_marker{},
-       std::nullopt);
-    }
-    if (h.mdlength < get_block_size() ||
-        h.mdlength % get_block_size() != 0 ||
-        h.dlength % get_block_size() != 0 ||
-        addr + h.mdlength + h.dlength > get_journal_end() ||
-        h.committed_to.segment_seq == NULL_SEG_SEQ ||
-        (expected_seq != NULL_SEG_SEQ &&
-         h.committed_to.segment_seq != expected_seq)) {
-      return read_record_ret(
-        read_record_ertr::ready_future_marker{},
-        std::nullopt);
-    }
-    auto record_size = h.mdlength + h.dlength;
-    if (record_size > get_block_size()) {
-      auto next_addr = addr + get_block_size();
-      auto next_length = record_size - get_block_size();
-      auto next_bptr = bufferptr(ceph::buffer::create_page_aligned(next_length));
-      DEBUG("reading record part 2 from abs addr {} read length {}",
-            next_addr, next_length);
-      return cjs.read(next_addr, next_bptr
-      ).safe_then([this, h, next_bptr=std::move(next_bptr), bl=std::move(bl)]() mutable {
-        bl.append(next_bptr);
-        return return_record(h, bl);
-      });
-    } else {
-      assert(record_size == get_block_size());
-      return return_record(h, bl);
-    }
-  });
-}
-
 seastar::future<> CircularBoundedJournal::finish_commit(transaction_type_t type) {
   if (is_trim_transaction(type)) {
     return update_journal_tail(
index bb3e2a860659c67ff76fe54bb2f148a64101db47..debe535aef3722ef8c18344eb98e0fe6e8340a94 100644 (file)
@@ -21,6 +21,7 @@
 #include <list>
 #include "crimson/os/seastore/journal/record_submitter.h"
 #include "crimson/os/seastore/journal/circular_journal_space.h"
+#include "crimson/os/seastore/record_scanner.h"
 
 namespace crimson::os::seastore::journal {
 
@@ -55,7 +56,7 @@ using RBMDevice = random_block_device::RBMDevice;
 
 constexpr uint64_t DEFAULT_BLOCK_SIZE = 4096;
 
-class CircularBoundedJournal : public Journal {
+class CircularBoundedJournal : public Journal, RecordScanner {
 public:
   CircularBoundedJournal(
       JournalTrimmer &trimmer, RBMDevice* device, const std::string &path);
@@ -116,28 +117,6 @@ public:
     return cjs.get_alloc_tail();
   }
 
-  using read_ertr = crimson::errorator<
-    crimson::ct_error::input_output_error,
-    crimson::ct_error::invarg,
-    crimson::ct_error::enoent,
-    crimson::ct_error::erange>;
-  using read_record_ertr = read_ertr;
-  using read_record_ret = read_record_ertr::future<
-       std::optional<std::pair<record_group_header_t, bufferlist>>
-       >;
-  /*
-   * read_record
-   *
-   * read record from given address
-   *
-   * @param paddr_t to read
-   * @param expected_seq
-   *
-   */
-  read_record_ret read_record(paddr_t offset, segment_seq_t expected_seq);
-
-  read_record_ret return_record(record_group_header_t& header, bufferlist bl);
-
   void set_write_pipeline(WritePipeline *_write_pipeline) final {
     write_pipeline = _write_pipeline;
   }
@@ -179,12 +158,48 @@ public:
 
   submit_record_ret do_submit_record(record_t &&record, OrderingHandle &handle);
 
+  void try_read_rolled_header(scan_valid_records_cursor &cursor) {
+    paddr_t addr = convert_abs_addr_to_paddr(
+      get_records_start(),
+      get_device_id());
+    cursor.seq.offset = addr;
+    cursor.seq.segment_seq += 1;
+  }
+
+  void initialize_cursor(scan_valid_records_cursor& cursor) final {
+    cursor.block_size = get_block_size();
+  };
+
+  Journal::replay_ret replay_segment(
+    cbj_delta_handler_t &handler, scan_valid_records_cursor& cursor);
+
+  read_ret read(paddr_t start, size_t len) final;
+
+  bool is_record_segment_seq_invalid(scan_valid_records_cursor &cursor,
+    record_group_header_t &h) final;
+
+  int64_t get_segment_end_offset(paddr_t addr) final {
+    return get_journal_end();
+  }
+
   // Test interfaces
   
   CircularJournalSpace& get_cjs() {
     return cjs;
   }
 
+  read_validate_record_metadata_ret test_read_validate_record_metadata(
+    scan_valid_records_cursor &cursor,
+    segment_nonce_t nonce)
+  {
+    return read_validate_record_metadata(cursor, nonce);
+  }
+
+  void test_initialize_cursor(scan_valid_records_cursor &cursor)
+  {
+    initialize_cursor(cursor);
+  }
+
 private:
   JournalTrimmer &trimmer;
   std::string path;
index 7565c281557635c4e91896f6f4f2564a7db52b77..123bb91353c2e6b8ce73ddf69635a93700a35a28 100644 (file)
@@ -18,8 +18,9 @@ std::ostream &operator<<(std::ostream &out,
     const CircularJournalSpace::cbj_header_t &header)
 {
   return out << "cbj_header_t(" 
-            << "dirty_tail=" << header.dirty_tail
+            << "dirty_tail=" << header.dirty_tail
             << ", alloc_tail=" << header.alloc_tail
+            << ", magic=" << header.magic
              << ")";
 }
 
@@ -41,8 +42,10 @@ CircularJournalSpace::roll_ertr::future<> CircularJournalSpace::roll() {
     get_records_start(),
     get_device_id());
   auto seq = get_written_to();
+  seq.segment_seq++;
+  assert(seq.segment_seq < MAX_SEG_SEQ);
   set_written_to(
-    journal_seq_t{++seq.segment_seq, paddr});
+    journal_seq_t{seq.segment_seq, paddr});
   return roll_ertr::now();
 }
 
@@ -86,6 +89,15 @@ CircularJournalSpace::write(ceph::bufferlist&& to_write) {
   );
 }
 
+segment_nonce_t calc_new_nonce(
+  uint32_t crc,
+  unsigned char const *data,
+  unsigned length)
+{
+  crc &= std::numeric_limits<uint32_t>::max() >> 1;
+  return ceph_crc32c(crc, data, length);
+}
+
 CircularJournalSpace::open_ret CircularJournalSpace::open(bool is_mkfs) {
   std::ostringstream oss;
   oss << device_id_printer_t{get_device_id()};
@@ -103,13 +115,18 @@ CircularJournalSpace::open_ret CircularJournalSpace::open(bool is_mkfs) {
          get_records_start(),
          device->get_device_id())};
     head.alloc_tail = head.dirty_tail;
+    auto meta = device->get_meta();
+    head.magic = calc_new_nonce(
+      std::rand() % std::numeric_limits<uint32_t>::max(),
+      reinterpret_cast<const unsigned char *>(meta.seastore_id.bytes()),
+      sizeof(meta.seastore_id.uuid));
     encode(head, bl);
     header = head;
     set_written_to(head.dirty_tail);
     initialized = true;
     DEBUG(
-      "initialize header block in CircularJournalSpace length {}",
-      bl.length());
+      "initialize header block in CircularJournalSpace length {}, head: {}",
+      bl.length(), header);
     return write_header(
     ).safe_then([this]() {
       return open_ret(
@@ -174,8 +191,8 @@ CircularJournalSpace::read_header()
   assert(device);
   auto bptr = bufferptr(ceph::buffer::create_page_aligned(
                        device->get_block_size()));
-  DEBUG("reading {}", device->get_journal_start());
-  return device->read(device->get_journal_start(), bptr
+  DEBUG("reading {}", device->get_shard_journal_start());
+  return device->read(device->get_shard_journal_start(), bptr
   ).safe_then([bptr, FNAME]() mutable
     -> read_header_ret {
     bufferlist bl;
@@ -222,7 +239,7 @@ CircularJournalSpace::write_header()
   assert(bl.length() < get_block_size());
   bufferptr bp = bufferptr(ceph::buffer::create_page_aligned(get_block_size()));
   iter.copy(bl.length(), bp.c_str());
-  return device->write(device->get_journal_start(), std::move(bp)
+  return device->write(device->get_shard_journal_start(), std::move(bp)
   ).handle_error(
     write_ertr::pass_further{},
     crimson::ct_error::assert_all{ "Invalid error device->write" }
index 1e97f4efedc608853622508465a25144180afce1..c88b65ad5e6b3ada736574222438a5b48a9c6384 100644 (file)
@@ -39,7 +39,7 @@ class CircularJournalSpace : public JournalAllocator {
   }
 
   segment_nonce_t get_nonce() const final {
-    return 0;
+    return header.magic;
   }
 
   bool needs_roll(std::size_t length) const final;
@@ -117,11 +117,13 @@ class CircularJournalSpace : public JournalAllocator {
     // start offset of CircularBoundedJournal in the device
     journal_seq_t dirty_tail;
     journal_seq_t alloc_tail;
+    segment_nonce_t magic;
 
     DENC(cbj_header_t, v, p) {
       DENC_START(1, 1, p);
       denc(v.dirty_tail, p);
       denc(v.alloc_tail, p);
+      denc(v.magic, p);
       DENC_FINISH(p);
     }
   };
@@ -188,7 +190,7 @@ class CircularJournalSpace : public JournalAllocator {
   }
   rbm_abs_addr get_records_start() const {
     assert(device);
-    return device->get_journal_start() + get_block_size();
+    return device->get_shard_journal_start() + get_block_size();
   }
   size_t get_records_available_size() const {
     return get_records_total_size() - get_records_used_size();
@@ -206,7 +208,7 @@ class CircularJournalSpace : public JournalAllocator {
   }
   rbm_abs_addr get_journal_end() const {
     assert(device);
-    return device->get_journal_start() + device->get_journal_size();
+    return device->get_shard_journal_start() + device->get_journal_size();
   }
 
   read_ertr::future<> read(
index f36a788344ac04a2f8b7280b2f5e5222f5de70b2..d7adf2304fbb69ba27eff162d6f837597d1e7ac6 100644 (file)
@@ -39,6 +39,8 @@ public:
    * Fetches mappings for laddr_t in range [offset, offset + len)
    *
    * Future will not resolve until all pins have resolved (set_paddr called)
+   * For indirect lba mappings, get_mappings will always retrieve the original
+   * lba value.
    */
   using get_mappings_iertr = base_iertr;
   using get_mappings_ret = get_mappings_iertr::future<lba_pin_list_t>;
@@ -50,6 +52,8 @@ public:
    * Fetches mappings for a list of laddr_t in range [offset, offset + len)
    *
    * Future will not resolve until all pins have resolved (set_paddr called)
+   * For indirect lba mappings, get_mappings will always retrieve the original
+   * lba value.
    */
   virtual get_mappings_ret get_mappings(
     Transaction &t,
@@ -59,6 +63,8 @@ public:
    * Fetches the mapping for laddr_t
    *
    * Future will not resolve until the pin has resolved (set_paddr called)
+   * For indirect lba mappings, get_mapping will always retrieve the original
+   * lba value.
    */
   using get_mapping_iertr = base_iertr::extend<
     crimson::ct_error::enoent>;
@@ -81,11 +87,24 @@ public:
     laddr_t hint,
     extent_len_t len,
     paddr_t addr,
-    LogicalCachedExtent *nextent) = 0;
+    LogicalCachedExtent &nextent) = 0;
+
+  virtual alloc_extent_ret clone_extent(
+    Transaction &t,
+    laddr_t hint,
+    extent_len_t len,
+    laddr_t intermediate_key,
+    paddr_t actual_addr,
+    laddr_t intermediate_base) = 0;
+
+  virtual alloc_extent_ret reserve_region(
+    Transaction &t,
+    laddr_t hint,
+    extent_len_t len) = 0;
 
   struct ref_update_result_t {
     unsigned refcount = 0;
-    paddr_t addr;
+    pladdr_t addr;
     extent_len_t length = 0;
   };
   using ref_iertr = base_iertr::extend<
@@ -99,7 +118,8 @@ public:
    */
   virtual ref_ret decref_extent(
     Transaction &t,
-    laddr_t addr) = 0;
+    laddr_t addr,
+    bool cascade_remove) = 0;
 
   /**
    * Increments ref count on extent
@@ -110,6 +130,16 @@ public:
     Transaction &t,
     laddr_t addr) = 0;
 
+  /**
+   * Increments ref count on extent
+   *
+   * @return returns resulting refcount
+   */
+  virtual ref_ret incref_extent(
+    Transaction &t,
+    laddr_t addr,
+    int delta) = 0;
+
   /**
    * Should be called after replay on each cached extent.
    * Implementation must initialize the LBAMapping on any
index 296af756b756a67ecbf525bd02547fd776b20377..a607cd612a59abe5fa4e6a880c14f318c68ec804 100644 (file)
@@ -64,14 +64,14 @@ const get_phy_tree_root_node_ret get_phy_tree_root_node<
     } else {
       return {false,
              trans_intr::make_interruptible(
-               seastar::make_ready_future<
-                 CachedExtentRef>(CachedExtentRef()))};
+               Cache::get_extent_ertr::make_ready_future<
+                 CachedExtentRef>())};
     }
   } else {
     return {false,
            trans_intr::make_interruptible(
-             seastar::make_ready_future<
-               CachedExtentRef>(CachedExtentRef()))};
+             Cache::get_extent_ertr::make_ready_future<
+               CachedExtentRef>())};
   }
 }
 
@@ -127,29 +127,94 @@ BtreeLBAManager::get_mappings(
   return with_btree_state<LBABtree, lba_pin_list_t>(
     cache,
     c,
-    [c, offset, length, FNAME](auto &btree, auto &ret) {
-      return LBABtree::iterate_repeat(
-       c,
-       btree.upper_bound_right(c, offset),
-       [&ret, offset, length, c, FNAME](auto &pos) {
-         if (pos.is_end() || pos.get_key() >= (offset + length)) {
-           TRACET("{}~{} done with {} results",
-                  c.trans, offset, length, ret.size());
-           return typename LBABtree::iterate_repeat_ret_inner(
+    [c, offset, length, FNAME, this](auto &btree, auto &ret) {
+      return seastar::do_with(
+       std::list<BtreeLBAMappingRef>(),
+       [offset, length, c, FNAME, this, &ret, &btree](auto &pin_list) {
+       return LBABtree::iterate_repeat(
+         c,
+         btree.upper_bound_right(c, offset),
+         [&pin_list, offset, length, c, FNAME](auto &pos) {
+           if (pos.is_end() || pos.get_key() >= (offset + length)) {
+             TRACET("{}~{} done with {} results",
+                    c.trans, offset, length, pin_list.size());
+             return LBABtree::iterate_repeat_ret_inner(
+               interruptible::ready_future_marker{},
+               seastar::stop_iteration::yes);
+           }
+           TRACET("{}~{} got {}, {}, repeat ...",
+                  c.trans, offset, length, pos.get_key(), pos.get_val());
+           ceph_assert((pos.get_key() + pos.get_val().len) > offset);
+           pin_list.push_back(pos.get_pin(c));
+           return LBABtree::iterate_repeat_ret_inner(
              interruptible::ready_future_marker{},
-             seastar::stop_iteration::yes);
-         }
-         TRACET("{}~{} got {}, {}, repeat ...",
-                c.trans, offset, length, pos.get_key(), pos.get_val());
-         ceph_assert((pos.get_key() + pos.get_val().len) > offset);
-         ret.push_back(pos.get_pin(c));
-         return typename LBABtree::iterate_repeat_ret_inner(
-           interruptible::ready_future_marker{},
-           seastar::stop_iteration::no);
+             seastar::stop_iteration::no);
+         }).si_then([this, &ret, c, &pin_list] {
+           return _get_original_mappings(c, pin_list
+           ).si_then([&ret](auto _ret) {
+             ret = std::move(_ret);
+           });
+         });
        });
     });
 }
 
+BtreeLBAManager::_get_original_mappings_ret
+BtreeLBAManager::_get_original_mappings(
+  op_context_t<laddr_t> c,
+  std::list<BtreeLBAMappingRef> &pin_list)
+{
+  return seastar::do_with(
+    lba_pin_list_t(),
+    [this, c, &pin_list](auto &ret) {
+    return trans_intr::do_for_each(
+      pin_list,
+      [this, c, &ret](auto &pin) {
+       LOG_PREFIX(BtreeLBAManager::get_mappings);
+       if (pin->get_raw_val().is_paddr()) {
+         ret.emplace_back(std::move(pin));
+         return get_mappings_iertr::now();
+       }
+       TRACET(
+         "getting original mapping for indirect mapping {}~{}",
+         c.trans, pin->get_key(), pin->get_length());
+       return this->get_mappings(
+         c.trans, pin->get_raw_val().get_laddr(), pin->get_length()
+       ).si_then([&pin, &ret, c](auto new_pin_list) {
+         LOG_PREFIX(BtreeLBAManager::get_mappings);
+         assert(new_pin_list.size() == 1);
+         auto &new_pin = new_pin_list.front();
+         auto intermediate_key = pin->get_raw_val().get_laddr();
+         assert(!new_pin->is_indirect());
+         assert(new_pin->get_key() <= intermediate_key);
+         assert(new_pin->get_key() + new_pin->get_length() >=
+         intermediate_key + pin->get_length());
+
+         TRACET("Got mapping {}~{} for indirect mapping {}~{}, "
+           "intermediate_key {}",
+           c.trans,
+           new_pin->get_key(), new_pin->get_length(),
+           pin->get_key(), pin->get_length(),
+           pin->get_raw_val().get_laddr());
+         auto &btree_new_pin = static_cast<BtreeLBAMapping&>(*new_pin);
+         btree_new_pin.set_key_for_indirect(
+           pin->get_key(),
+           pin->get_length(),
+           pin->get_raw_val().get_laddr());
+         ret.emplace_back(std::move(new_pin));
+         return seastar::now();
+       }).handle_error_interruptible(
+         crimson::ct_error::input_output_error::pass_further{},
+         crimson::ct_error::assert_all("unexpected enoent")
+       );
+      }
+    ).si_then([&ret] {
+      return std::move(ret);
+    });
+  });
+}
+
+
 BtreeLBAManager::get_mappings_ret
 BtreeLBAManager::get_mappings(
   Transaction &t,
@@ -181,14 +246,27 @@ BtreeLBAManager::get_mapping(
 {
   LOG_PREFIX(BtreeLBAManager::get_mapping);
   TRACET("{}", t, offset);
+  return _get_mapping(t, offset
+  ).si_then([](auto pin) {
+    return get_mapping_iertr::make_ready_future<LBAMappingRef>(std::move(pin));
+  });
+}
+
+BtreeLBAManager::_get_mapping_ret
+BtreeLBAManager::_get_mapping(
+  Transaction &t,
+  laddr_t offset)
+{
+  LOG_PREFIX(BtreeLBAManager::_get_mapping);
+  TRACET("{}", t, offset);
   auto c = get_context(t);
-  return with_btree_ret<LBABtree, LBAMappingRef>(
+  return with_btree_ret<LBABtree, BtreeLBAMappingRef>(
     cache,
     c,
-    [FNAME, c, offset](auto &btree) {
+    [FNAME, c, offset, this](auto &btree) {
       return btree.lower_bound(
        c, offset
-      ).si_then([FNAME, offset, c](auto iter) -> get_mapping_ret {
+      ).si_then([FNAME, offset, c](auto iter) -> _get_mapping_ret {
        if (iter.is_end() || iter.get_key() != offset) {
          ERRORT("laddr={} doesn't exist", c.trans, offset);
          return crimson::ct_error::enoent::make();
@@ -196,20 +274,40 @@ BtreeLBAManager::get_mapping(
          TRACET("{} got {}, {}",
                 c.trans, offset, iter.get_key(), iter.get_val());
          auto e = iter.get_pin(c);
-         return get_mapping_ret(
+         return _get_mapping_ret(
            interruptible::ready_future_marker{},
            std::move(e));
        }
+      }).si_then([this, c](auto pin) -> _get_mapping_ret {
+       if (pin->get_raw_val().is_laddr()) {
+         return seastar::do_with(
+           std::move(pin),
+           [this, c](auto &pin) {
+           return _get_mapping(
+             c.trans, pin->get_raw_val().get_laddr()
+           ).si_then([&pin](auto new_pin) {
+             ceph_assert(pin->get_length() == new_pin->get_length());
+             new_pin->set_key_for_indirect(
+               pin->get_key(),
+               pin->get_length());
+             return new_pin;
+           });
+         });
+       } else {
+         return get_mapping_iertr::make_ready_future<BtreeLBAMappingRef>(std::move(pin));
+       }
       });
     });
 }
 
 BtreeLBAManager::alloc_extent_ret
-BtreeLBAManager::alloc_extent(
+BtreeLBAManager::_alloc_extent(
   Transaction &t,
   laddr_t hint,
   extent_len_t len,
-  paddr_t addr,
+  pladdr_t addr,
+  paddr_t actual_addr,
+  laddr_t intermediate_base,
   LogicalCachedExtent* nextent)
 {
   struct state_t {
@@ -221,7 +319,7 @@ BtreeLBAManager::alloc_extent(
     state_t(laddr_t hint) : last_end(hint) {}
   };
 
-  LOG_PREFIX(BtreeLBAManager::alloc_extent);
+  LOG_PREFIX(BtreeLBAManager::_alloc_extent);
   TRACET("{}~{}, hint={}", t, addr, len, hint);
   auto c = get_context(t);
   ++stats.num_alloc_extents;
@@ -272,21 +370,31 @@ BtreeLBAManager::alloc_extent(
            c,
            *state.insert_iter,
            state.last_end,
-           lba_map_val_t{len, addr, 1, 0},
+           lba_map_val_t{len, pladdr_t(addr), 1, 0},
            nextent
          ).si_then([&state, FNAME, c, addr, len, hint, nextent](auto &&p) {
            auto [iter, inserted] = std::move(p);
            TRACET("{}~{}, hint={}, inserted at {}",
                   c.trans, addr, len, hint, state.last_end);
            if (nextent) {
+             ceph_assert(addr.is_paddr());
              nextent->set_laddr(iter.get_key());
            }
            ceph_assert(inserted);
            state.ret = iter;
          });
        });
-    }).si_then([c](auto &&state) {
-      return state.ret->get_pin(c);
+    }).si_then([c, actual_addr, addr, intermediate_base](auto &&state) {
+      auto ret_pin = state.ret->get_pin(c);
+      if (actual_addr != P_ADDR_NULL) {
+       ceph_assert(addr.is_laddr());
+       ret_pin->set_paddr(actual_addr);
+       ret_pin->set_intermediate_base(intermediate_base);
+      } else {
+       ceph_assert(addr.is_paddr());
+      }
+      return alloc_extent_iertr::make_ready_future<LBAMappingRef>(
+       std::move(ret_pin));
     });
 }
 
@@ -311,7 +419,8 @@ _init_cached_extent(
       LOG_PREFIX(BtreeLBAManager::init_cached_extent);
       if (!iter.is_end() &&
          iter.get_key() == logn->get_laddr() &&
-         iter.get_val().paddr == logn->get_paddr()) {
+         iter.get_val().pladdr.is_paddr() &&
+         iter.get_val().pladdr.get_paddr() == logn->get_paddr()) {
        assert(!iter.get_leaf_node()->is_pending());
        iter.get_leaf_node()->link_child(logn.get(), iter.get_leaf_pos());
        logn->set_laddr(iter.get_pin(c)->get_key());
@@ -387,8 +496,8 @@ BtreeLBAManager::scan_mappings(
              seastar::stop_iteration::yes);
          }
          ceph_assert((pos.get_key() + pos.get_val().len) > begin);
-         f(pos.get_key(), pos.get_val().paddr, pos.get_val().len);
-         return typename LBABtree::iterate_repeat_ret_inner(
+         f(pos.get_key(), pos.get_val().pladdr.get_paddr(), pos.get_val().len);
+         return LBABtree::iterate_repeat_ret_inner(
            interruptible::ready_future_marker{},
            seastar::stop_iteration::no);
        });
@@ -439,8 +548,9 @@ BtreeLBAManager::update_mapping(
       const lba_map_val_t &in) {
       assert(!addr.is_null());
       lba_map_val_t ret = in;
-      ceph_assert(in.paddr == prev_addr);
-      ret.paddr = addr;
+      ceph_assert(in.pladdr.is_paddr());
+      ceph_assert(in.pladdr.get_paddr() == prev_addr);
+      ret.pladdr = addr;
       return ret;
     },
     nextent
@@ -506,11 +616,62 @@ void BtreeLBAManager::register_metrics()
   );
 }
 
+BtreeLBAManager::ref_iertr::future<std::optional<std::pair<paddr_t, extent_len_t>>>
+BtreeLBAManager::_decref_intermediate(
+  Transaction &t,
+  laddr_t addr,
+  extent_len_t len)
+{
+  auto c = get_context(t);
+  return with_btree<LBABtree>(
+    cache,
+    c,
+    [c, addr, len](auto &btree) mutable {
+    return btree.upper_bound_right(
+      c, addr
+    ).si_then([&btree, addr, len, c](auto iter) {
+      return seastar::do_with(
+       std::move(iter),
+       [&btree, addr, len, c](auto &iter) {
+       ceph_assert(!iter.is_end());
+       ceph_assert(iter.get_key() <= addr);
+       auto val = iter.get_val();
+       ceph_assert(iter.get_key() + val.len >= addr + len);
+       ceph_assert(val.pladdr.is_paddr());
+       ceph_assert(val.refcount >= 1);
+       val.refcount -= 1;
+
+       LOG_PREFIX(BtreeLBAManager::_decref_intermediate);
+       TRACET("decreased refcount of intermediate key {} -- {}",
+         c.trans,
+         iter.get_key(),
+         val);
+
+       if (!val.refcount) {
+         return btree.remove(c, iter
+         ).si_then([val] {
+           return std::make_optional<
+             std::pair<paddr_t, extent_len_t>>(
+               val.pladdr.get_paddr(), val.len);
+         });
+       } else {
+         return btree.update(c, iter, val, nullptr
+         ).si_then([](auto) {
+           return seastar::make_ready_future<
+             std::optional<std::pair<paddr_t, extent_len_t>>>(std::nullopt);
+         });
+       }
+      });
+    });
+  });
+}
+
 BtreeLBAManager::update_refcount_ret
 BtreeLBAManager::update_refcount(
   Transaction &t,
   laddr_t addr,
-  int delta)
+  int delta,
+  bool cascade_remove)
 {
   LOG_PREFIX(BtreeLBAManager::update_refcount);
   TRACET("laddr={}, delta={}", t, addr, delta);
@@ -524,13 +685,32 @@ BtreeLBAManager::update_refcount(
       return out;
     },
     nullptr
-  ).si_then([&t, addr, delta, FNAME](auto result) {
+  ).si_then([&t, addr, delta, FNAME, this, cascade_remove](auto result) {
     DEBUGT("laddr={}, delta={} done -- {}", t, addr, delta, result);
-    return ref_update_result_t{
-      result.refcount,
-      result.paddr,
-      result.len
-     };
+    auto fut = ref_iertr::make_ready_future<
+      std::optional<std::pair<paddr_t, extent_len_t>>>();
+    if (!result.refcount && result.pladdr.is_laddr() && cascade_remove) {
+      fut = _decref_intermediate(
+       t,
+       result.pladdr.get_laddr(),
+       result.len
+      );
+    }
+    return fut.si_then([result](auto removed) {
+      if (result.pladdr.is_laddr()
+         && removed) {
+       return ref_update_result_t{
+         result.refcount,
+         removed->first,
+         removed->second};
+      } else {
+       return ref_update_result_t{
+         result.refcount,
+         result.pladdr,
+         result.len
+       };
+      }
+    });
   });
 }
 
index b48abf9456bbe7b9a092453d47da48044fd1aa45..892600ed0e94c070affe9879abd3ede2f80585a5 100644 (file)
 namespace crimson::os::seastore::lba_manager::btree {
 
 class BtreeLBAMapping : public BtreeNodeMapping<laddr_t, paddr_t> {
+// To support cloning, there are two kinds of lba mappings:
+//     1. physical lba mapping: the pladdr in the value of which is the paddr of
+//        the corresponding extent;
+//     2. indirect lba mapping: the pladdr in the value of which is an laddr pointing
+//        to the physical lba mapping that's pointing to the actual paddr of the
+//        extent being searched;
+//
+// Accordingly, BtreeLBAMapping may also work under two modes: indirect or direct
+//     1. BtreeLBAMappings that come from quering an indirect lba mapping in the lba tree
+//        are indirect;
+//     2. BtreeLBAMappings that come from quering a physical lba mapping in the lba tree
+//        are direct.
+//
+// For direct BtreeLBAMappings, there are two important fields:
+//      1. key: the laddr of the lba mapping being queried;
+//      2. paddr: the paddr recorded in the value of the lba mapping being queried.
+// For indirect BtreeLBAMappings, BtreeLBAMapping has three important fields:
+//     1. key: the laddr key of the lba entry being queried;
+//     2. intermediate_key: the laddr within the scope of the physical lba mapping
+//        that the current indirect lba mapping points to; although an indirect mapping
+//        points to the start of the physical lba mapping, it may change to other
+//        laddr after remap
+//     3. intermediate_base: the laddr key of the physical lba mapping, intermediate_key
+//        and intermediate_base should be the same when doing cloning
+//     4. intermediate_offset: intermediate_key - intermediate_base
+//     5. paddr: the paddr recorded in the physical lba mapping pointed to by the
+//        indirect lba mapping being queried;
+//
+// NOTE THAT, for direct BtreeLBAMappings, their intermediate_keys are the same as
+// their keys.
 public:
   BtreeLBAMapping(op_context_t<laddr_t> ctx)
     : BtreeNodeMapping(ctx) {}
@@ -34,17 +64,112 @@ public:
     CachedExtentRef parent,
     uint16_t pos,
     lba_map_val_t &val,
-    lba_node_meta_t &&meta)
+    lba_node_meta_t meta)
     : BtreeNodeMapping(
        c,
        parent,
        pos,
-       val.paddr,
+       val.pladdr.is_paddr() ? val.pladdr.get_paddr() : P_ADDR_NULL,
        val.len,
-       std::forward<lba_node_meta_t>(meta))
+       meta),
+      key(meta.begin),
+      indirect(val.pladdr.is_laddr() ? true : false),
+      intermediate_key(indirect ? val.pladdr.get_laddr() : L_ADDR_NULL),
+      intermediate_length(indirect ? val.len : 0),
+      raw_val(val.pladdr),
+      map_val(val)
   {}
+
+  lba_map_val_t get_map_val() const {
+    return map_val;
+  }
+
+  bool is_indirect() const final {
+    return indirect;
+  }
+
+  void set_key_for_indirect(
+    laddr_t new_key,
+    extent_len_t length,
+    laddr_t interkey = L_ADDR_NULL)
+  {
+    turn_indirect(interkey);
+    key = new_key;
+    intermediate_length = len;
+    len = length;
+  }
+
+  laddr_t get_key() const final {
+    return key;
+  }
+
+  pladdr_t get_raw_val() const {
+    return raw_val;
+  }
+
+  void set_paddr(paddr_t addr) {
+    value = addr;
+  }
+
+  laddr_t get_intermediate_key() const final {
+    assert(is_indirect());
+    assert(intermediate_key != L_ADDR_NULL);
+    return intermediate_key;
+  }
+
+  laddr_t get_intermediate_base() const final {
+    assert(is_indirect());
+    assert(intermediate_base != L_ADDR_NULL);
+    return intermediate_base;
+  }
+
+  extent_len_t get_intermediate_offset() const final {
+    assert(intermediate_key >= intermediate_base);
+    assert((intermediate_key == L_ADDR_NULL)
+      == (intermediate_base == L_ADDR_NULL));
+    return intermediate_key - intermediate_base;
+  }
+
+  extent_len_t get_intermediate_length() const final {
+    assert(is_indirect());
+    assert(intermediate_length);
+    return intermediate_length;
+  }
+
+  void set_intermediate_base(laddr_t base) {
+    intermediate_base = base;
+  }
+
+protected:
+  std::unique_ptr<BtreeNodeMapping<laddr_t, paddr_t>> _duplicate(
+    op_context_t<laddr_t> ctx) const final {
+    auto pin = std::unique_ptr<BtreeLBAMapping>(new BtreeLBAMapping(ctx));
+    pin->key = key;
+    pin->intermediate_base = intermediate_base;
+    pin->intermediate_key = intermediate_key;
+    pin->indirect = indirect;
+    pin->raw_val = raw_val;
+    pin->map_val = map_val;
+    return pin;
+  }
+private:
+  void turn_indirect(laddr_t interkey) {
+    assert(value.is_paddr());
+    intermediate_base = key;
+    intermediate_key = (interkey == L_ADDR_NULL ? key : interkey);
+    indirect = true;
+  }
+  laddr_t key = L_ADDR_NULL;
+  bool indirect = false;
+  laddr_t intermediate_key = L_ADDR_NULL;
+  laddr_t intermediate_base = L_ADDR_NULL;
+  extent_len_t intermediate_length = 0;
+  pladdr_t raw_val;
+  lba_map_val_t map_val;
 };
 
+using BtreeLBAMappingRef = std::unique_ptr<BtreeLBAMapping>;
+
 using LBABtree = FixedKVBtree<
   laddr_t, lba_map_val_t, LBAInternalNode,
   LBALeafNode, BtreeLBAMapping, LBA_BLOCK_SIZE, true>;
@@ -89,23 +214,75 @@ public:
     Transaction &t,
     laddr_t offset) final;
 
+  alloc_extent_ret reserve_region(
+    Transaction &t,
+    laddr_t hint,
+    extent_len_t len)
+  {
+    return _alloc_extent(
+      t,
+      hint,
+      len,
+      P_ADDR_ZERO,
+      P_ADDR_NULL,
+      L_ADDR_NULL,
+      nullptr);
+  }
+
+  alloc_extent_ret clone_extent(
+    Transaction &t,
+    laddr_t hint,
+    extent_len_t len,
+    laddr_t intermediate_key,
+    paddr_t actual_addr,
+    laddr_t intermediate_base)
+  {
+    return _alloc_extent(
+      t,
+      hint,
+      len,
+      intermediate_key,
+      actual_addr,
+      intermediate_base,
+      nullptr);
+  }
+
   alloc_extent_ret alloc_extent(
     Transaction &t,
     laddr_t hint,
     extent_len_t len,
     paddr_t addr,
-    LogicalCachedExtent*) final;
+    LogicalCachedExtent &ext) final
+  {
+    return _alloc_extent(
+      t,
+      hint,
+      len,
+      addr,
+      P_ADDR_NULL,
+      L_ADDR_NULL,
+      &ext);
+  }
 
   ref_ret decref_extent(
     Transaction &t,
-    laddr_t addr) final {
-    return update_refcount(t, addr, -1);
+    laddr_t addr,
+    bool cascade_remove) final {
+    return update_refcount(t, addr, -1, cascade_remove);
   }
 
   ref_ret incref_extent(
     Transaction &t,
     laddr_t addr) final {
-    return update_refcount(t, addr, 1);
+    return update_refcount(t, addr, 1, false);
+  }
+
+  ref_ret incref_extent(
+    Transaction &t,
+    laddr_t addr,
+    int delta) final {
+    ceph_assert(delta > 0);
+    return update_refcount(t, addr, delta, false);
   }
 
   /**
@@ -170,7 +347,8 @@ private:
   update_refcount_ret update_refcount(
     Transaction &t,
     laddr_t addr,
-    int delta);
+    int delta,
+    bool cascade_remove);
 
   /**
    * _update_mapping
@@ -187,6 +365,31 @@ private:
     laddr_t addr,
     update_func_t &&f,
     LogicalCachedExtent*);
+
+  alloc_extent_ret _alloc_extent(
+    Transaction &t,
+    laddr_t hint,
+    extent_len_t len,
+    pladdr_t addr,
+    paddr_t actual_addr,
+    laddr_t intermediate_base,
+    LogicalCachedExtent*);
+
+  using _get_mapping_ret = get_mapping_iertr::future<BtreeLBAMappingRef>;
+  _get_mapping_ret _get_mapping(
+    Transaction &t,
+    laddr_t offset);
+
+  using _get_original_mappings_ret = get_mappings_ret;
+  _get_original_mappings_ret _get_original_mappings(
+    op_context_t<laddr_t> c,
+    std::list<BtreeLBAMappingRef> &pin_list);
+
+  ref_iertr::future<std::optional<std::pair<paddr_t, extent_len_t>>>
+  _decref_intermediate(
+    Transaction &t,
+    laddr_t addr,
+    extent_len_t len);
 };
 using BtreeLBAManagerRef = std::unique_ptr<BtreeLBAManager>;
 
index a33f75917c1f986fa7d54a630392ff0d86fd21d1..66dc94394a99e16ccdacff22ebe3808d53cff470 100644 (file)
@@ -20,7 +20,7 @@ namespace crimson::os::seastore::lba_manager::btree {
 std::ostream& operator<<(std::ostream& out, const lba_map_val_t& v)
 {
   return out << "lba_map_val_t("
-             << v.paddr
+             << v.pladdr
              << "~" << v.len
              << ", refcount=" << v.refcount
              << ", checksum=" << v.checksum
@@ -42,10 +42,11 @@ void LBALeafNode::resolve_relative_addrs(paddr_t base)
 {
   LOG_PREFIX(LBALeafNode::resolve_relative_addrs);
   for (auto i: *this) {
-    if (i->get_val().paddr.is_relative()) {
-      auto val = i->get_val();
-      val.paddr = base.add_relative(val.paddr);
-      TRACE("{} -> {}", i->get_val().paddr, val.paddr);
+    auto val = i->get_val();
+    if (val.pladdr.is_paddr() &&
+       val.pladdr.get_paddr().is_relative()) {
+      val.pladdr = base.add_relative(val.pladdr.get_paddr());
+      TRACE("{} -> {}", i->get_val().pladdr, val.pladdr);
       i->set_val(val);
     }
   }
index 62ceae6cc462a4c7ef7c33a74c8623ed91bb6c94..ffce2c1b5e68466dd6d80c07c622074cd4146128 100644 (file)
@@ -33,17 +33,18 @@ using LBANode = FixedKVNode<laddr_t>;
  */
 struct lba_map_val_t {
   extent_len_t len = 0;  ///< length of mapping
-  paddr_t paddr;         ///< physical addr of mapping
+  pladdr_t pladdr;         ///< physical addr of mapping or
+                          //   laddr of a physical lba mapping(see btree_lba_manager.h)
   uint32_t refcount = 0; ///< refcount
   uint32_t checksum = 0; ///< checksum of original block written at paddr (TODO)
 
   lba_map_val_t() = default;
   lba_map_val_t(
     extent_len_t len,
-    paddr_t paddr,
+    pladdr_t pladdr,
     uint32_t refcount,
     uint32_t checksum)
-    : len(len), paddr(paddr), refcount(refcount), checksum(checksum) {}
+    : len(len), pladdr(pladdr), refcount(refcount), checksum(checksum) {}
   bool operator==(const lba_map_val_t&) const = default;
 };
 
@@ -103,14 +104,14 @@ using LBAInternalNodeRef = LBAInternalNode::Ref;
  *   size       : uint32_t[1]                4b
  *   (padding)  :                            4b
  *   meta       : lba_node_meta_le_t[3]      (1*24)b
- *   keys       : laddr_t[170]               (145*8)b
- *   values     : lba_map_val_t[170]         (145*20)b
+ *   keys       : laddr_t[170]               (140*8)b
+ *   values     : lba_map_val_t[170]         (140*21)b
  *                                           = 4092
  *
  * TODO: update FixedKVNodeLayout to handle the above calculation
  * TODO: the above alignment probably isn't portable without further work
  */
-constexpr size_t LEAF_NODE_CAPACITY = 145;
+constexpr size_t LEAF_NODE_CAPACITY = 140;
 
 /**
  * lba_map_val_le_t
@@ -119,7 +120,7 @@ constexpr size_t LEAF_NODE_CAPACITY = 145;
  */
 struct lba_map_val_le_t {
   extent_len_le_t len = init_extent_len_le(0);
-  paddr_le_t paddr;
+  pladdr_le_t pladdr;
   ceph_le32 refcount{0};
   ceph_le32 checksum{0};
 
@@ -127,12 +128,12 @@ struct lba_map_val_le_t {
   lba_map_val_le_t(const lba_map_val_le_t &) = default;
   explicit lba_map_val_le_t(const lba_map_val_t &val)
     : len(init_extent_len_le(val.len)),
-      paddr(paddr_le_t(val.paddr)),
+      pladdr(pladdr_le_t(val.pladdr)),
       refcount(val.refcount),
       checksum(val.checksum) {}
 
   operator lba_map_val_t() const {
-    return lba_map_val_t{ len, paddr, refcount, checksum };
+    return lba_map_val_t{ len, pladdr, refcount, checksum };
   }
 };
 
@@ -195,7 +196,9 @@ struct LBALeafNode
       // child-ptr may already be correct, see LBAManager::update_mappings()
       this->update_child_ptr(iter, nextent);
     }
-    val.paddr = this->maybe_generate_relative(val.paddr);
+    if (val.pladdr.is_paddr()) {
+      val.pladdr = maybe_generate_relative(val.pladdr.get_paddr());
+    }
     return this->journal_update(
       iter,
       val,
@@ -214,7 +217,9 @@ struct LBALeafNode
       addr,
       (void*)nextent);
     this->insert_child_ptr(iter, nextent);
-    val.paddr = this->maybe_generate_relative(val.paddr);
+    if (val.pladdr.is_paddr()) {
+      val.pladdr = maybe_generate_relative(val.pladdr.get_paddr());
+    }
     this->journal_insert(
       iter,
       addr,
@@ -245,9 +250,10 @@ struct LBALeafNode
     if (this->is_initial_pending()) {
       for (auto i = from; i != to; ++i) {
        auto val = i->get_val();
-       if (val.paddr.is_relative()) {
-         assert(val.paddr.is_block_relative());
-         val.paddr = this->get_paddr().add_relative(val.paddr);
+       if (val.pladdr.is_paddr()
+           && val.pladdr.get_paddr().is_relative()) {
+         assert(val.pladdr.get_paddr().is_block_relative());
+         val.pladdr = this->get_paddr().add_relative(val.pladdr.get_paddr());
          i->set_val(val);
        }
       }
@@ -260,10 +266,10 @@ struct LBALeafNode
     if (this->is_initial_pending()) {
       for (auto i = from; i != to; ++i) {
        auto val = i->get_val();
-       if (val.paddr.is_relative()) {
-         auto val = i->get_val();
-         assert(val.paddr.is_record_relative());
-         val.paddr = val.paddr.block_relative_to(this->get_paddr());
+       if (val.pladdr.is_paddr()
+           && val.pladdr.get_paddr().is_relative()) {
+         assert(val.pladdr.get_paddr().is_record_relative());
+         val.pladdr = val.pladdr.get_paddr().block_relative_to(this->get_paddr());
          i->set_val(val);
        }
       }
index 76e179e2414e4dd456536cb9cf62a6fa7edde02c..0d852696b7144a6a5e3068d1f45e991159409b1f 100644 (file)
@@ -25,12 +25,10 @@ using get_iertr = ObjectDataHandler::write_iertr;
 /**
  * extent_to_write_t
  *
- * Encapsulates extents to be written out using do_insertions.
+ * Encapsulates smallest write operations in overwrite.
  * Indicates a zero/existing extent or a data extent based on whether
  * to_write is populate.
- * The meaning of existing_paddr is that the new extent to be
- * written is the part of exising extent on the disk. existing_paddr
- * must be absolute.
+ * Should be handled by prepare_ops_list.
  */
 struct extent_to_write_t {
   enum class type_t {
@@ -38,16 +36,18 @@ struct extent_to_write_t {
     ZERO,
     EXISTING,
   };
-
   type_t type;
+
+  /// pin of original extent, not nullptr if type == EXISTING
+  LBAMappingRef pin;
+
   laddr_t addr;
   extent_len_t len;
+
   /// non-nullopt if and only if type == DATA
   std::optional<bufferlist> to_write;
-  /// non-nullopt if and only if type == EXISTING
-  std::optional<paddr_t> existing_paddr;
 
-  extent_to_write_t(const extent_to_write_t &) = default;
+  extent_to_write_t(const extent_to_write_t &) = delete;
   extent_to_write_t(extent_to_write_t &&) = default;
 
   bool is_data() const {
@@ -72,13 +72,14 @@ struct extent_to_write_t {
   }
 
   static extent_to_write_t create_zero(
-      laddr_t addr, extent_len_t len) {
+    laddr_t addr, extent_len_t len) {
     return extent_to_write_t(addr, len);
   }
 
   static extent_to_write_t create_existing(
-      laddr_t addr, paddr_t existing_paddr, extent_len_t len) {
-    return extent_to_write_t(addr, existing_paddr, len);
+    LBAMappingRef &&pin, laddr_t addr, extent_len_t len) {
+    assert(pin);
+    return extent_to_write_t(std::move(pin), addr, len);
   }
 
 private:
@@ -89,12 +90,211 @@ private:
   extent_to_write_t(laddr_t addr, extent_len_t len)
     : type(type_t::ZERO), addr(addr), len(len) {}
 
-  extent_to_write_t(laddr_t addr, paddr_t existing_paddr, extent_len_t len)
-    : type(type_t::EXISTING), addr(addr), len(len),
-      to_write(std::nullopt), existing_paddr(existing_paddr) {}
+  extent_to_write_t(LBAMappingRef &&pin, laddr_t addr, extent_len_t len)
+    : type(type_t::EXISTING), pin(std::move(pin)), addr(addr), len(len) {}
 };
 using extent_to_write_list_t = std::list<extent_to_write_t>;
 
+// Encapsulates extents to be written out using do_remappings.
+struct extent_to_remap_t {
+  enum class type_t {
+    REMAP,
+    OVERWRITE
+  };
+  type_t type;
+  /// pin of original extent
+  LBAMappingRef pin;
+  /// offset of remapped extent or overwrite part of overwrite extent.
+  /// overwrite part of overwrite extent might correspond to mutiple 
+  /// fresh write extent.
+  extent_len_t new_offset;
+  /// length of remapped extent or overwrite part of overwrite extent
+  extent_len_t new_len;
+
+  extent_to_remap_t(const extent_to_remap_t &) = delete;
+  extent_to_remap_t(extent_to_remap_t &&) = default;
+
+  bool is_remap() const {
+    return type == type_t::REMAP;
+  }
+
+  bool is_overwrite() const {
+    assert((new_offset != 0) && (pin->get_length() != new_offset + new_len));
+    return type == type_t::OVERWRITE;
+  }
+
+  using remap_entry = TransactionManager::remap_entry;
+  remap_entry create_remap_entry() {
+    assert(is_remap());
+    return remap_entry(
+      new_offset,
+      new_len);
+  }
+
+  remap_entry create_left_remap_entry() {
+    assert(is_overwrite());
+    return remap_entry(
+      0,
+      new_offset);
+  }
+
+  remap_entry create_right_remap_entry() {
+    assert(is_overwrite());
+    return remap_entry(
+      new_offset + new_len,
+      pin->get_length() - new_offset - new_len);
+  }
+
+  static extent_to_remap_t create_remap(
+    LBAMappingRef &&pin, extent_len_t new_offset, extent_len_t new_len) {
+    return extent_to_remap_t(type_t::REMAP,
+      std::move(pin), new_offset, new_len);
+  }
+
+  static extent_to_remap_t create_overwrite(
+    LBAMappingRef &&pin, extent_len_t new_offset, extent_len_t new_len) {
+    return extent_to_remap_t(type_t::OVERWRITE,
+      std::move(pin), new_offset, new_len);
+  }
+
+private:
+  extent_to_remap_t(type_t type,
+    LBAMappingRef &&pin, extent_len_t new_offset, extent_len_t new_len)
+    : type(type),
+      pin(std::move(pin)), new_offset(new_offset), new_len(new_len) {}
+};
+using extent_to_remap_list_t = std::list<extent_to_remap_t>;
+
+// Encapsulates extents to be written out using do_insertions.
+struct extent_to_insert_t {
+  enum class type_t {
+    DATA,
+    ZERO
+  };
+  type_t type;
+  /// laddr of new extent
+  laddr_t addr;
+  /// length of new extent
+  extent_len_t len;
+  /// non-nullopt if type == DATA
+  std::optional<bufferlist> bl;
+
+  extent_to_insert_t(const extent_to_insert_t &) = default;
+  extent_to_insert_t(extent_to_insert_t &&) = default;
+
+  bool is_data() const {
+    return type == type_t::DATA;
+  }
+
+  bool is_zero() const {
+    return type == type_t::ZERO;
+  }
+
+  static extent_to_insert_t create_data(
+    laddr_t addr, extent_len_t len, std::optional<bufferlist> bl) {
+    return extent_to_insert_t(addr, len, bl);
+  }
+
+  static extent_to_insert_t create_zero(
+    laddr_t addr, extent_len_t len) {
+    return extent_to_insert_t(addr, len);
+  }
+
+private:
+  extent_to_insert_t(laddr_t addr, extent_len_t len,
+    std::optional<bufferlist> bl)
+    :type(type_t::DATA), addr(addr), len(len), bl(bl) {}
+
+  extent_to_insert_t(laddr_t addr, extent_len_t len)
+    :type(type_t::ZERO), addr(addr), len(len) {}
+};
+using extent_to_insert_list_t = std::list<extent_to_insert_t>;
+
+// Encapsulates extents to be retired in do_removals.
+using extent_to_remove_list_t = std::list<LBAMappingRef>;
+
+struct overwrite_ops_t {
+  extent_to_remap_list_t to_remap;
+  extent_to_insert_list_t to_insert;
+  extent_to_remove_list_t to_remove;
+};
+
+// prepare to_remap, to_retire, to_insert list
+overwrite_ops_t prepare_ops_list(
+  lba_pin_list_t &pins_to_remove,
+  extent_to_write_list_t &to_write) {
+  assert(pins_to_remove.size() != 0);
+  overwrite_ops_t ops;
+  ops.to_remove.swap(pins_to_remove);
+  if (to_write.empty()) {
+    logger().debug("empty to_write");
+    return ops;
+  }
+  long unsigned int visitted = 0;
+  auto& front = to_write.front();
+  auto& back = to_write.back();
+
+  // prepare overwrite, happens in one original extent.
+  if (ops.to_remove.size() == 1 &&
+      front.is_existing() && back.is_existing()) {
+      visitted += 2;
+      assert(to_write.size() > 2);
+      assert(front.addr == front.pin->get_key());
+      assert(back.addr > back.pin->get_key());
+      ops.to_remap.push_back(extent_to_remap_t::create_overwrite(
+       std::move(front.pin),
+       front.len,
+       back.addr - front.addr - front.len));
+      ops.to_remove.pop_front();
+  } else {
+    // prepare to_remap, happens in one or multiple extents
+    if (front.is_existing()) {
+      visitted++;
+      assert(to_write.size() > 1);
+      assert(front.addr == front.pin->get_key());
+      ops.to_remap.push_back(extent_to_remap_t::create_remap(
+       std::move(front.pin),
+       0,
+       front.len));
+      ops.to_remove.pop_front();
+    }
+    if (back.is_existing()) {
+      visitted++;
+      assert(to_write.size() > 1);
+      assert(back.addr + back.len ==
+       back.pin->get_key() + back.pin->get_length());
+      ops.to_remap.push_back(extent_to_remap_t::create_remap(
+       std::move(back.pin),
+       back.addr - back.pin->get_key(),
+       back.len));
+      ops.to_remove.pop_back();
+    }
+  }
+
+  // prepare to_insert
+  for (auto &region : to_write) {
+    if (region.is_data()) {
+      visitted++;
+      assert(region.to_write.has_value());
+      ops.to_insert.push_back(extent_to_insert_t::create_data(
+       region.addr, region.len, region.to_write));
+    } else if (region.is_zero()) {
+      visitted++;
+      assert(!(region.to_write.has_value()));
+      ops.to_insert.push_back(extent_to_insert_t::create_zero(
+       region.addr, region.len));
+    }
+  }
+
+  logger().debug(
+    "to_remap list size: {}"
+    " to_insert list size: {}"
+    " to_remove list size: {}",
+    ops.to_remap.size(), ops.to_insert.size(), ops.to_remove.size());
+  assert(visitted == to_write.size());
+  return ops;
+}
+
 /**
  * append_extent_to_write
  *
@@ -134,13 +334,54 @@ void splice_extent_to_write(
   }
 }
 
-/// Removes extents/mappings in pins
+/// Creates remap extents in to_remap
+ObjectDataHandler::write_ret do_remappings(
+  context_t ctx,
+  extent_to_remap_list_t &to_remap)
+{
+  return trans_intr::do_for_each(
+    to_remap,
+    [ctx](auto &region) {
+      if (region.is_remap()) {
+        return ctx.tm.remap_pin<ObjectDataBlock, 1>(
+          ctx.t,
+          std::move(region.pin),
+          std::array{
+            region.create_remap_entry()
+          }
+        ).si_then([&region](auto pins) {
+          ceph_assert(pins.size() == 1);
+          ceph_assert(region.new_len == pins[0]->get_length());
+          return ObjectDataHandler::write_iertr::now();
+        });
+      } else if (region.is_overwrite()) {
+        return ctx.tm.remap_pin<ObjectDataBlock, 2>(
+          ctx.t,
+          std::move(region.pin),
+          std::array{
+            region.create_left_remap_entry(),
+            region.create_right_remap_entry()
+          }
+        ).si_then([&region](auto pins) {
+          ceph_assert(pins.size() == 2);
+          ceph_assert(region.pin->get_key() == pins[0]->get_key());
+          ceph_assert(region.pin->get_key() + pins[0]->get_length() +
+            region.new_len == pins[1]->get_key());
+          return ObjectDataHandler::write_iertr::now();
+        });
+      } else {
+        ceph_abort("impossible");
+        return ObjectDataHandler::write_iertr::now();
+      }
+  });
+}
+
 ObjectDataHandler::write_ret do_removals(
   context_t ctx,
-  lba_pin_list_t &pins)
+  lba_pin_list_t &to_remove)
 {
   return trans_intr::do_for_each(
-    pins,
+    to_remove,
     [ctx](auto &pin) {
       LOG_PREFIX(object_data_handler.cc::do_removals);
       DEBUGT("decreasing ref: {}",
@@ -159,19 +400,19 @@ ObjectDataHandler::write_ret do_removals(
     });
 }
 
-/// Creates zero/data extents in to_write
+/// Creates zero/data extents in to_insert
 ObjectDataHandler::write_ret do_insertions(
   context_t ctx,
-  extent_to_write_list_t &to_write)
+  extent_to_insert_list_t &to_insert)
 {
   return trans_intr::do_for_each(
-    to_write,
+    to_insert,
     [ctx](auto &region) {
       LOG_PREFIX(object_data_handler.cc::do_insertions);
       if (region.is_data()) {
        assert_aligned(region.addr);
        assert_aligned(region.len);
-       ceph_assert(region.len == region.to_write->length());
+       ceph_assert(region.len == region.bl->length());
        DEBUGT("allocating extent: {}~{}",
               ctx.t,
               region.addr,
@@ -190,7 +431,7 @@ ObjectDataHandler::write_ret do_insertions(
          }
          ceph_assert(extent->get_laddr() == region.addr);
          ceph_assert(extent->get_length() == region.len);
-         auto iter = region.to_write->cbegin();
+         auto iter = region.bl->cbegin();
          iter.copy(region.len, extent->get_bptr().c_str());
          return ObjectDataHandler::write_iertr::now();
        });
@@ -216,25 +457,8 @@ ObjectDataHandler::write_ret do_insertions(
          return ObjectDataHandler::write_iertr::now();
        });
       } else {
-       ceph_assert(region.is_existing());
-       DEBUGT("map existing extent: laddr {} len {} {}",
-              ctx.t, region.addr, region.len, *region.existing_paddr);
-       return ctx.tm.map_existing_extent<ObjectDataBlock>(
-         ctx.t, region.addr, *region.existing_paddr, region.len
-       ).handle_error_interruptible(
-         TransactionManager::alloc_extent_iertr::pass_further{},
-         Device::read_ertr::assert_all{"ignore read error"}
-       ).si_then([FNAME, ctx, &region](auto extent) {
-         if (extent->get_laddr() != region.addr) {
-           ERRORT(
-             "inconsistent laddr: extent: {} region {}",
-             ctx.t,
-             extent->get_laddr(),
-             region.addr);
-         }
-         ceph_assert(extent->get_laddr() == region.addr);
-         return ObjectDataHandler::write_iertr::now();
-       });
+       ceph_abort("impossible");
+       return ObjectDataHandler::write_iertr::now();
       }
     });
 }
@@ -352,7 +576,8 @@ public:
   overwrite_plan_t(laddr_t offset,
                   extent_len_t len,
                   const lba_pin_list_t& pins,
-                  extent_len_t block_size) :
+                  extent_len_t block_size,
+                  Transaction& t) :
       pin_begin(pins.front()->get_key()),
       pin_end(pins.back()->get_key() + pins.back()->get_length()),
       left_paddr(pins.front()->get_val()),
@@ -365,7 +590,7 @@ public:
       right_operation(overwrite_operation_t::UNKNOWN),
       block_size(block_size) {
     validate();
-    evaluate_operations();
+    evaluate_operations(t);
     assert(left_operation != overwrite_operation_t::UNKNOWN);
     assert(right_operation != overwrite_operation_t::UNKNOWN);
   }
@@ -393,19 +618,31 @@ private:
    * original extent into at most three parts: origin-left, part-to-be-modified
    * and origin-right.
    */
-  void evaluate_operations() {
+  void evaluate_operations(Transaction& t) {
     auto actual_write_size = get_pins_size();
     auto aligned_data_size = get_aligned_data_size();
     auto left_ext_size = get_left_extent_size();
     auto right_ext_size = get_right_extent_size();
 
+    auto can_merge = [](Transaction& t, paddr_t paddr) {
+      CachedExtentRef ext;
+      if (paddr.is_relative() || paddr.is_delayed()) {
+         return true;
+      } else if (t.get_extent(paddr, &ext) ==
+       Transaction::get_extent_ret::PRESENT) {
+       // FIXME: there is no need to lookup the cache if the pin can 
+       // be associated with the extent state
+       if (ext->is_mutable()) {
+         return true;
+       }
+      }
+      return false;
+    };
     if (left_paddr.is_zero()) {
       actual_write_size -= left_ext_size;
       left_ext_size = 0;
       left_operation = overwrite_operation_t::OVERWRITE_ZERO;
-    // FIXME: left_paddr can be absolute and pending
-    } else if (left_paddr.is_relative() ||
-              left_paddr.is_delayed()) {
+    } else if (can_merge(t, left_paddr)) {
       aligned_data_size += left_ext_size;
       left_ext_size = 0;
       left_operation = overwrite_operation_t::MERGE_EXISTING;
@@ -415,9 +652,7 @@ private:
       actual_write_size -= right_ext_size;
       right_ext_size = 0;
       right_operation = overwrite_operation_t::OVERWRITE_ZERO;
-    // FIXME: right_paddr can be absolute and pending
-    } else if (right_paddr.is_relative() ||
-              right_paddr.is_delayed()) {
+    } else if (can_merge(t, right_paddr)) {
       aligned_data_size += right_ext_size;
       right_ext_size = 0;
       right_operation = overwrite_operation_t::MERGE_EXISTING;
@@ -506,14 +741,15 @@ operate_ret operate_left(context_t ctx, LBAMappingRef &pin, const overwrite_plan
         std::nullopt,
         std::nullopt);
     } else {
+      extent_len_t off = pin->get_intermediate_offset();
       return ctx.tm.read_pin<ObjectDataBlock>(
        ctx.t, pin->duplicate()
-      ).si_then([prepend_len](auto left_extent) {
+      ).si_then([prepend_len, off](auto left_extent) {
         return get_iertr::make_ready_future<operate_ret_bare>(
           std::nullopt,
           std::make_optional(bufferptr(
             left_extent->get_bptr(),
-            0,
+            off,
             prepend_len)));
       });
     }
@@ -524,23 +760,24 @@ operate_ret operate_left(context_t ctx, LBAMappingRef &pin, const overwrite_plan
     assert(extent_len);
     std::optional<extent_to_write_t> left_to_write_extent =
       std::make_optional(extent_to_write_t::create_existing(
-        overwrite_plan.pin_begin,
-        overwrite_plan.left_paddr,
+        pin->duplicate(),
+        pin->get_key(),
         extent_len));
 
     auto prepend_len = overwrite_plan.get_left_alignment_size();
     if (prepend_len == 0) {
       return get_iertr::make_ready_future<operate_ret_bare>(
-        left_to_write_extent,
+        std::move(left_to_write_extent),
         std::nullopt);
     } else {
+      extent_len_t off = pin->get_intermediate_offset();
       return ctx.tm.read_pin<ObjectDataBlock>(
        ctx.t, pin->duplicate()
-      ).si_then([prepend_offset=extent_len, prepend_len,
+      ).si_then([prepend_offset=extent_len + off, prepend_len,
                  left_to_write_extent=std::move(left_to_write_extent)]
                 (auto left_extent) mutable {
         return get_iertr::make_ready_future<operate_ret_bare>(
-          left_to_write_extent,
+          std::move(left_to_write_extent),
           std::make_optional(bufferptr(
             left_extent->get_bptr(),
             prepend_offset,
@@ -587,7 +824,10 @@ operate_ret operate_right(context_t ctx, LBAMappingRef &pin, const overwrite_pla
         std::nullopt,
         std::nullopt);
     } else {
-      auto append_offset = overwrite_plan.data_end - right_pin_begin;
+      auto append_offset =
+       overwrite_plan.data_end
+       - right_pin_begin
+       + pin->get_intermediate_offset();
       return ctx.tm.read_pin<ObjectDataBlock>(
        ctx.t, pin->duplicate()
       ).si_then([append_offset, append_len](auto right_extent) {
@@ -606,24 +846,27 @@ operate_ret operate_right(context_t ctx, LBAMappingRef &pin, const overwrite_pla
     assert(extent_len);
     std::optional<extent_to_write_t> right_to_write_extent =
       std::make_optional(extent_to_write_t::create_existing(
+        pin->duplicate(),
         overwrite_plan.aligned_data_end,
-        overwrite_plan.right_paddr.add_offset(overwrite_plan.aligned_data_end - right_pin_begin),
         extent_len));
 
     auto append_len = overwrite_plan.get_right_alignment_size();
     if (append_len == 0) {
       return get_iertr::make_ready_future<operate_ret_bare>(
-        right_to_write_extent,
+        std::move(right_to_write_extent),
         std::nullopt);
     } else {
-      auto append_offset = overwrite_plan.data_end - right_pin_begin;
+      auto append_offset =
+       overwrite_plan.data_end
+       - right_pin_begin
+       + pin->get_intermediate_offset();
       return ctx.tm.read_pin<ObjectDataBlock>(
        ctx.t, pin->duplicate()
       ).si_then([append_offset, append_len,
                  right_to_write_extent=std::move(right_to_write_extent)]
                 (auto right_extent) mutable {
         return get_iertr::make_ready_future<operate_ret_bare>(
-          right_to_write_extent,
+          std::move(right_to_write_extent),
           std::make_optional(bufferptr(
             right_extent->get_bptr(),
             append_offset,
@@ -652,6 +895,31 @@ auto with_object_data(
     });
 }
 
+template <typename F>
+auto with_objects_data(
+  ObjectDataHandler::context_t ctx,
+  F &&f)
+{
+  ceph_assert(ctx.d_onode);
+  return seastar::do_with(
+    ctx.onode.get_layout().object_data.get(),
+    ctx.d_onode->get_layout().object_data.get(),
+    std::forward<F>(f),
+    [ctx](auto &object_data, auto &d_object_data, auto &f) {
+      return std::invoke(f, object_data, d_object_data
+      ).si_then([ctx, &object_data, &d_object_data] {
+       if (object_data.must_update()) {
+         ctx.onode.get_mutable_layout(ctx.t).object_data.update(object_data);
+       }
+       if (d_object_data.must_update()) {
+         ctx.d_onode->get_mutable_layout(
+           ctx.t).object_data.update(d_object_data);
+       }
+       return seastar::now();
+      });
+    });
+}
+
 ObjectDataHandler::write_ret ObjectDataHandler::prepare_data_reservation(
   context_t ctx,
   object_data_t &object_data,
@@ -706,6 +974,11 @@ ObjectDataHandler::clear_ret ObjectDataHandler::trim_data_reservation(
       ).si_then([ctx, size, &pins, &object_data, &to_write](auto _pins) {
        _pins.swap(pins);
        ceph_assert(pins.size());
+       if (!size) {
+         // no need to reserve region if we are truncating the object's
+         // size to 0
+         return clear_iertr::now();
+       }
        auto &pin = *pins.front();
        ceph_assert(pin.get_key() >= object_data.get_reserved_data_base());
        ceph_assert(
@@ -721,41 +994,67 @@ ObjectDataHandler::clear_ret ObjectDataHandler::trim_data_reservation(
            object_data.get_reserved_data_len() - pin_offset));
          return clear_iertr::now();
        } else {
-         /* First pin overlaps the boundary and has data, read in extent
-          * and rewrite portion prior to size */
-         return ctx.tm.read_pin<ObjectDataBlock>(
-           ctx.t,
-           pin.duplicate()
-         ).si_then([ctx, size, pin_offset, &pin, &object_data, &to_write](
-                    auto extent) {
-           bufferlist bl;
-           bl.append(
-             bufferptr(
-               extent->get_bptr(),
-               0,
-               size - pin_offset
-             ));
-           bl.append_zero(p2roundup(size, ctx.tm.get_block_size()) - size);
-           to_write.push_back(extent_to_write_t::create_data(
-             pin.get_key(),
-             bl));
+         /* First pin overlaps the boundary and has data, remap it
+          * if aligned or rewrite it if not aligned to size */
+          auto roundup_size = p2roundup(size, ctx.tm.get_block_size());
+          auto append_len = roundup_size - size;
+          if (append_len == 0) {
+            LOG_PREFIX(ObjectDataHandler::trim_data_reservation);
+            TRACET("First pin overlaps the boundary and has aligned data"
+              "create existing at addr:{}, len:{}",
+              ctx.t, pin.get_key(), size - pin_offset);
+            to_write.push_back(extent_to_write_t::create_existing(
+              pin.duplicate(),
+              pin.get_key(),
+              size - pin_offset));
            to_write.push_back(extent_to_write_t::create_zero(
-             object_data.get_reserved_data_base() +
-                p2roundup(size, ctx.tm.get_block_size()),
-             object_data.get_reserved_data_len() -
-                p2roundup(size, ctx.tm.get_block_size())));
-           return clear_iertr::now();
-         });
-       }
-      }).si_then([ctx, &pins] {
-       return do_removals(ctx, pins);
-      }).si_then([ctx, &to_write] {
-       return do_insertions(ctx, to_write);
-      }).si_then([size, &object_data] {
-       if (size == 0) {
-         object_data.clear();
+             object_data.get_reserved_data_base() + roundup_size,
+             object_data.get_reserved_data_len() - roundup_size));
+            return clear_iertr::now();
+          } else {
+            return ctx.tm.read_pin<ObjectDataBlock>(
+              ctx.t,
+              pin.duplicate()
+            ).si_then([ctx, size, pin_offset, append_len, roundup_size,
+                      &pin, &object_data, &to_write](auto extent) {
+              bufferlist bl;
+             bl.append(
+               bufferptr(
+                 extent->get_bptr(),
+                 pin.get_intermediate_offset(),
+                 size - pin_offset
+             ));
+              bl.append_zero(append_len);
+              LOG_PREFIX(ObjectDataHandler::trim_data_reservation);
+              TRACET("First pin overlaps the boundary and has unaligned data"
+                "create data at addr:{}, len:{}",
+                ctx.t, pin.get_key(), bl.length());
+             to_write.push_back(extent_to_write_t::create_data(
+               pin.get_key(),
+               bl));
+             to_write.push_back(extent_to_write_t::create_zero(
+               object_data.get_reserved_data_base() + roundup_size,
+               object_data.get_reserved_data_len() - roundup_size));
+              return clear_iertr::now();
+            });
+          }
        }
-       return ObjectDataHandler::clear_iertr::now();
+      }).si_then([ctx, size, &to_write, &object_data, &pins] {
+        return seastar::do_with(
+          prepare_ops_list(pins, to_write),
+          [ctx, size, &object_data](auto &ops) {
+            return do_remappings(ctx, ops.to_remap
+            ).si_then([ctx, &ops] {
+              return do_removals(ctx, ops.to_remove);
+            }).si_then([ctx, &ops] {
+              return do_insertions(ctx, ops.to_insert);
+            }).si_then([size, &object_data] {
+             if (size == 0) {
+               object_data.clear();
+             }
+             return ObjectDataHandler::clear_iertr::now();
+            });
+        });
       });
     });
 }
@@ -806,7 +1105,9 @@ extent_to_write_list_t get_to_writes_with_zero_buffer(
     }
     assert(bl.length() % block_size == 0);
     assert(bl.length() == (right - left));
-    return {extent_to_write_t::create_data(left, bl)};
+    extent_to_write_list_t ret;
+    ret.push_back(extent_to_write_t::create_data(left, bl));
+    return ret;
   } else {
     // reserved section between ends, headptr and tailptr in different extents
     extent_to_write_list_t ret;
@@ -858,7 +1159,7 @@ ObjectDataHandler::write_ret ObjectDataHandler::overwrite(
   if (bl.has_value()) {
     assert(bl->length() == len);
   }
-  overwrite_plan_t overwrite_plan(offset, len, _pins, ctx.tm.get_block_size());
+  overwrite_plan_t overwrite_plan(offset, len, _pins, ctx.tm.get_block_size(), ctx.t);
   return seastar::do_with(
     std::move(_pins),
     extent_to_write_list_t(),
@@ -931,9 +1232,16 @@ ObjectDataHandler::write_ret ObjectDataHandler::overwrite(
         assert(pin_begin == to_write.front().addr);
         assert(pin_end == to_write.back().get_end_addr());
 
-        return do_removals(ctx, pins);
-      }).si_then([ctx, &to_write] {
-        return do_insertions(ctx, to_write);
+        return seastar::do_with(
+          prepare_ops_list(pins, to_write),
+          [ctx](auto &ops) {
+            return do_remappings(ctx, ops.to_remap
+            ).si_then([ctx, &ops] {
+              return do_removals(ctx, ops.to_remove);
+            }).si_then([ctx, &ops] {
+              return do_insertions(ctx, ops.to_insert);
+            });
+        });
       });
     });
   });
@@ -1061,17 +1369,33 @@ ObjectDataHandler::read_ret ObjectDataHandler::read(
                      current = end;
                      return seastar::now();
                    } else {
+                     LOG_PREFIX(ObjectDataHandler::read);
+                     auto key = pin->get_key();
+                     bool is_indirect = pin->is_indirect();
+                      extent_len_t off = pin->get_intermediate_offset();
+                     DEBUGT("reading {}~{}, indirect: {}, "
+                       "intermediate offset: {}, current: {}, end: {}",
+                       ctx.t,
+                       key,
+                       pin->get_length(),
+                       is_indirect,
+                       off,
+                       current,
+                       end);
                      return ctx.tm.read_pin<ObjectDataBlock>(
                        ctx.t,
                        std::move(pin)
-                     ).si_then([&ret, &current, end](auto extent) {
+                     ).si_then([&ret, &current, end, key, off,
+                               is_indirect](auto extent) {
                        ceph_assert(
-                         (extent->get_laddr() + extent->get_length()) >= end);
+                         is_indirect
+                           ? (key - off + extent->get_length()) >= end
+                           : (extent->get_laddr() + extent->get_length()) >= end);
                        ceph_assert(end > current);
                        ret.append(
                          bufferptr(
                            extent->get_bptr(),
-                           current - extent->get_laddr(),
+                           off + current - (is_indirect ? key : extent->get_laddr()),
                            end - current));
                        current = end;
                        return seastar::now();
@@ -1189,4 +1513,126 @@ ObjectDataHandler::clear_ret ObjectDataHandler::clear(
     });
 }
 
+ObjectDataHandler::clone_ret ObjectDataHandler::clone_extents(
+  context_t ctx,
+  object_data_t &object_data,
+  lba_pin_list_t &pins,
+  laddr_t data_base)
+{
+  LOG_PREFIX(ObjectDataHandler::clone_extents);
+  TRACET(" object_data: {}~{}, data_base: {}",
+    ctx.t,
+    object_data.get_reserved_data_base(),
+    object_data.get_reserved_data_len(),
+    data_base);
+  return ctx.tm.dec_ref(
+    ctx.t,
+    object_data.get_reserved_data_base()
+  ).si_then(
+    [&pins, &object_data, ctx, data_base](auto) mutable {
+      return seastar::do_with(
+       (extent_len_t)0,
+       [&object_data, ctx, data_base, &pins](auto &last_pos) {
+       return trans_intr::do_for_each(
+         pins,
+         [&last_pos, &object_data, ctx, data_base](auto &pin) {
+         auto offset = pin->get_key() - data_base;
+         ceph_assert(offset == last_pos);
+         auto fut = TransactionManager::alloc_extent_iertr
+           ::make_ready_future<LBAMappingRef>();
+         auto addr = object_data.get_reserved_data_base() + offset;
+         if (pin->get_val().is_zero()) {
+           fut = ctx.tm.reserve_region(ctx.t, addr, pin->get_length());
+         } else {
+           fut = ctx.tm.clone_pin(ctx.t, addr, *pin);
+         }
+         return fut.si_then(
+           [&pin, &last_pos, offset](auto) {
+           last_pos = offset + pin->get_length();
+           return seastar::now();
+         }).handle_error_interruptible(
+           crimson::ct_error::input_output_error::pass_further(),
+           crimson::ct_error::assert_all("not possible")
+         );
+       }).si_then([&last_pos, &object_data, ctx] {
+         if (last_pos != object_data.get_reserved_data_len()) {
+           return ctx.tm.reserve_region(
+             ctx.t,
+             object_data.get_reserved_data_base() + last_pos,
+             object_data.get_reserved_data_len() - last_pos
+           ).si_then([](auto) {
+             return seastar::now();
+           });
+         }
+         return TransactionManager::reserve_extent_iertr::now();
+       });
+      });
+    },
+    ObjectDataHandler::write_iertr::pass_further{},
+    crimson::ct_error::assert_all{
+      "object_data_handler::clone invalid error"
+    }
+  );
+}
+
+ObjectDataHandler::clone_ret ObjectDataHandler::clone(
+  context_t ctx)
+{
+  // the whole clone procedure can be seperated into the following steps:
+  //   1. let clone onode(d_object_data) take the head onode's
+  //      object data base;
+  //   2. reserve a new region in lba tree for the head onode;
+  //   3. clone all extents of the clone onode, see transaction_manager.h
+  //      for the details of clone_pin;
+  //   4. reserve the space between the head onode's size and its reservation
+  //      length.
+  return with_objects_data(
+    ctx,
+    [ctx, this](auto &object_data, auto &d_object_data) {
+    ceph_assert(d_object_data.is_null());
+    if (object_data.is_null()) {
+      return clone_iertr::now();
+    }
+    return prepare_data_reservation(
+      ctx,
+      d_object_data,
+      object_data.get_reserved_data_len()
+    ).si_then([&object_data, &d_object_data, ctx, this] {
+      assert(!object_data.is_null());
+      auto base = object_data.get_reserved_data_base();
+      auto len = object_data.get_reserved_data_len();
+      object_data.clear();
+      LOG_PREFIX(ObjectDataHandler::clone);
+      DEBUGT("cloned obj reserve_data_base: {}, len {}",
+       ctx.t,
+       d_object_data.get_reserved_data_base(),
+       d_object_data.get_reserved_data_len());
+      return prepare_data_reservation(
+       ctx,
+       object_data,
+       d_object_data.get_reserved_data_len()
+      ).si_then([&d_object_data, ctx, &object_data, base, len, this] {
+       LOG_PREFIX("ObjectDataHandler::clone");
+       DEBUGT("head obj reserve_data_base: {}, len {}",
+         ctx.t,
+         object_data.get_reserved_data_base(),
+         object_data.get_reserved_data_len());
+       return ctx.tm.get_pins(ctx.t, base, len
+       ).si_then([ctx, &object_data, &d_object_data, base, this](auto pins) {
+         return seastar::do_with(
+           std::move(pins),
+           [ctx, &object_data, &d_object_data, base, this](auto &pins) {
+           return clone_extents(ctx, object_data, pins, base
+           ).si_then([ctx, &d_object_data, base, &pins, this] {
+             return clone_extents(ctx, d_object_data, pins, base);
+           }).si_then([&pins, ctx] {
+             return do_removals(ctx, pins);
+           });
+         });
+       });
+      });
+    });
+  });
+}
+
 } // namespace crimson::os::seastore
index 6fd73dc762a3aa62228011eb7424f4e99f9df3fb..b5f432d5ac7760140895059a157740e0e68ae4e7 100644 (file)
@@ -19,10 +19,12 @@ namespace crimson::os::seastore {
 struct ObjectDataBlock : crimson::os::seastore::LogicalCachedExtent {
   using Ref = TCachedExtentRef<ObjectDataBlock>;
 
-  ObjectDataBlock(ceph::bufferptr &&ptr)
+  explicit ObjectDataBlock(ceph::bufferptr &&ptr)
     : LogicalCachedExtent(std::move(ptr)) {}
-  ObjectDataBlock(const ObjectDataBlock &other)
+  explicit ObjectDataBlock(const ObjectDataBlock &other)
     : LogicalCachedExtent(other) {}
+  explicit ObjectDataBlock(extent_len_t length)
+    : LogicalCachedExtent(length) {}
 
   CachedExtentRef duplicate_for_write(Transaction&) final {
     return CachedExtentRef(new ObjectDataBlock(*this));
@@ -56,6 +58,7 @@ public:
     TransactionManager &tm;
     Transaction &t;
     Onode &onode;
+    Onode *d_onode = nullptr; // The desination node in case of clone
   };
 
   /// Writes bl to [offset, offset + bl.length())
@@ -101,6 +104,11 @@ public:
   using clear_ret = clear_iertr::future<>;
   clear_ret clear(context_t ctx);
 
+  /// Clone data of an Onode
+  using clone_iertr = base_iertr;
+  using clone_ret = clone_iertr::future<>;
+  clone_ret clone(context_t ctx);
+
 private:
   /// Updates region [_offset, _offset + bl.length) to bl
   write_ret overwrite(
@@ -122,6 +130,13 @@ private:
     context_t ctx,
     object_data_t &object_data,
     extent_len_t size);
+
+  clone_ret clone_extents(
+    context_t ctx,
+    object_data_t &object_data,
+    lba_pin_list_t &pins,
+    laddr_t data_base);
+
 private:
   /**
    * max_object_size
index ee22b00b7a2c2e832a08c1d8d2e52f8441588d08..4db58414a6ec206a1303c84888054eb89300eef3 100644 (file)
@@ -235,11 +235,12 @@ OMapInnerNode::list(
       return trans_intr::repeat(
         [&, config, oc, this]() -> list_iertr::future<seastar::stop_iteration>
       {
-        if (iter == liter || result.size() == config.max_result_size) {
-          complete = iter == liter;
+        if (iter == liter) {
+          complete = true;
           return list_iertr::make_ready_future<seastar::stop_iteration>(
             seastar::stop_iteration::yes);
         }
+       assert(result.size() < config.max_result_size);
         auto laddr = iter->get_val();
         return omap_load_extent(
           oc, laddr,
@@ -278,8 +279,12 @@ OMapInnerNode::list(
              }
             }
             result.merge(std::move(child_result));
+           if (result.size() == config.max_result_size) {
+             return list_iertr::make_ready_future<seastar::stop_iteration>(
+               seastar::stop_iteration::yes);
+           }
             ++iter;
-            assert(child_complete || result.size() == config.max_result_size);
+            assert(child_complete);
             return list_iertr::make_ready_future<seastar::stop_iteration>(
               seastar::stop_iteration::no);
           });
index 7d449d018229c890c363e996293e694e58341de1..72b13fedfb12b6231299a8eecffddf8cf098e55e 100644 (file)
@@ -1,4 +1,4 @@
-// -*- mode:C++; tab-width:8; c-basic-index:2; indent-tabs-mode:t -*-
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
 // vim: ts=8 sw=2 smarttab
 
 #pragma once
index 952dd9cca34d11f471a054ebed502f00877f18bc..069daa3df5b56ba231128a728f152fa177908664 100644 (file)
@@ -62,6 +62,7 @@ public:
       default_metadata_range(dmr)
   {}
 
+  virtual bool is_alive() const = 0;
   virtual const onode_layout_t &get_layout() const = 0;
   virtual onode_layout_t &get_mutable_layout(Transaction &t) = 0;
   virtual ~Onode() = default;
index 8d75f9fa837ce7f1c5a7c0f93e9fa727e7634c5d..bff27ab65178652c427f89a60584e4d1352ad7ce 100644 (file)
@@ -93,16 +93,19 @@ FLTreeOnodeManager::write_dirty_ret FLTreeOnodeManager::write_dirty(
 {
   return trans_intr::do_for_each(
     onodes,
-    [this, &trans](auto &onode) -> eagain_ifuture<> {
+    [&trans](auto &onode) -> eagain_ifuture<> {
+      if (!onode) {
+       return eagain_iertr::make_ready_future<>();
+      }
       auto &flonode = static_cast<FLTreeOnode&>(*onode);
+      if (!flonode.is_alive()) {
+       return eagain_iertr::make_ready_future<>();
+      }
       switch (flonode.status) {
       case FLTreeOnode::status_t::MUTATED: {
         flonode.populate_recorder(trans);
         return eagain_iertr::make_ready_future<>();
       }
-      case FLTreeOnode::status_t::DELETED: {
-        return tree.erase(trans, flonode);
-      }
       case FLTreeOnode::status_t::STABLE: {
         return eagain_iertr::make_ready_future<>();
       }
@@ -117,8 +120,12 @@ FLTreeOnodeManager::erase_onode_ret FLTreeOnodeManager::erase_onode(
   OnodeRef &onode)
 {
   auto &flonode = static_cast<FLTreeOnode&>(*onode);
+  assert(flonode.is_alive());
+  if (flonode.status == FLTreeOnode::status_t::MUTATED) {
+    flonode.populate_recorder(trans);
+  }
   flonode.mark_delete();
-  return erase_onode_iertr::now();
+  return tree.erase(trans, flonode);
 }
 
 FLTreeOnodeManager::list_onodes_ret FLTreeOnodeManager::list_onodes(
index 0367b823f361bbafe3b860cb849320de501cf6a0..09998fbfaea9f04da2deb73a5f2c4d189829b655 100644 (file)
@@ -70,6 +70,9 @@ struct FLTreeOnode final : Onode, Value {
     }
   };
 
+  bool is_alive() const {
+    return status != status_t::DELETED;
+  }
   const onode_layout_t &get_layout() const final {
     assert(status != status_t::DELETED);
     return *read_payload<onode_layout_t>();
index 0478f5d0e5a633efe10e2a310f4e3e45a09f73b6..d9be1b5e6d9cafafc9eeb66bc548c39b57fe6d63 100644 (file)
 
 namespace crimson::os::seastore {
 
+struct rbm_shard_info_t {
+  std::size_t size = 0;
+  uint64_t start_offset = 0;
+
+  DENC(rbm_shard_info_t, v, p) {
+    DENC_START(1, 1, p);
+    denc(v.size, p);
+    denc(v.start_offset, p);
+    DENC_FINISH(p);
+  }
+};
+
 struct rbm_metadata_header_t {
   size_t size = 0;
   size_t block_size = 0;
@@ -29,6 +41,8 @@ struct rbm_metadata_header_t {
   uint64_t journal_size = 0;
   checksum_t crc = 0;
   device_config_t config;
+  unsigned int shard_num = 0;
+  std::vector<rbm_shard_info_t> shard_infos;
 
   DENC(rbm_metadata_header_t, v, p) {
     DENC_START(1, 1, p);
@@ -39,9 +53,28 @@ struct rbm_metadata_header_t {
     denc(v.journal_size, p);
     denc(v.crc, p);
     denc(v.config, p);
+    denc(v.shard_num, p);
+    denc(v.shard_infos, p);
     DENC_FINISH(p);
   }
 
+  void validate() const {
+    ceph_assert(shard_num == seastar::smp::count);
+    ceph_assert(block_size > 0);
+    for (unsigned int i = 0; i < seastar::smp::count; i ++) {
+      ceph_assert(shard_infos[i].size > block_size &&
+                  shard_infos[i].size % block_size == 0);
+      ceph_assert_always(shard_infos[i].size <= DEVICE_OFF_MAX);
+      ceph_assert(journal_size > 0 &&
+                  journal_size % block_size == 0);
+      ceph_assert(shard_infos[i].start_offset < size &&
+                 shard_infos[i].start_offset % block_size == 0);
+    }
+    ceph_assert(config.spec.magic != 0);
+    ceph_assert(get_default_backend_of_device(config.spec.dtype) ==
+               backend_type_t::RANDOM_BLOCK);
+    ceph_assert(config.spec.id <= DEVICE_ID_MAX_VALID);
+  }
 };
 
 enum class rbm_extent_state_t {
@@ -127,12 +160,17 @@ seastar::future<std::unique_ptr<random_block_device::RBMDevice>>
   get_rb_device(const std::string &device);
 
 std::ostream &operator<<(std::ostream &out, const rbm_metadata_header_t &header);
+std::ostream &operator<<(std::ostream &out, const rbm_shard_info_t &shard);
 }
 
+WRITE_CLASS_DENC_BOUNDED(
+  crimson::os::seastore::rbm_shard_info_t
+)
 WRITE_CLASS_DENC_BOUNDED(
   crimson::os::seastore::rbm_metadata_header_t
 )
 
 #if FMT_VERSION >= 90000
 template<> struct fmt::formatter<crimson::os::seastore::rbm_metadata_header_t> : fmt::ostream_formatter {};
+template<> struct fmt::formatter<crimson::os::seastore::rbm_shard_info_t> : fmt::ostream_formatter {};
 #endif
index d7dacf4f534c4355246ef82e98541b7b5609e23e..511b70a2eec9f0b8ba73a38d5bc31ac60dfa1dba 100644 (file)
@@ -78,7 +78,7 @@ BlockRBManager::open_ertr::future<> BlockRBManager::open()
   auto ool_start = get_start_rbm_addr();
   allocator->init(
     ool_start,
-    device->get_available_size() -
+    device->get_shard_end() -
     ool_start,
     device->get_block_size());
   return open_ertr::now();
@@ -91,8 +91,8 @@ BlockRBManager::write_ertr::future<> BlockRBManager::write(
   LOG_PREFIX(BlockRBManager::write);
   ceph_assert(device);
   rbm_abs_addr addr = convert_paddr_to_abs_addr(paddr);
-  rbm_abs_addr start = 0;
-  rbm_abs_addr end = device->get_available_size();
+  rbm_abs_addr start = device->get_shard_start();
+  rbm_abs_addr end = device->get_shard_end();
   if (addr < start || addr + bptr.length() > end) {
     ERROR("out of range: start {}, end {}, addr {}, length {}",
       start, end, addr, bptr.length());
@@ -112,8 +112,8 @@ BlockRBManager::read_ertr::future<> BlockRBManager::read(
   LOG_PREFIX(BlockRBManager::read);
   ceph_assert(device);
   rbm_abs_addr addr = convert_paddr_to_abs_addr(paddr);
-  rbm_abs_addr start = 0;
-  rbm_abs_addr end = device->get_available_size();
+  rbm_abs_addr start = device->get_shard_start();
+  rbm_abs_addr end = device->get_shard_end();
   if (addr < start || addr + bptr.length() > end) {
     ERROR("out of range: start {}, end {}, addr {}, length {}",
       start, end, addr, bptr.length());
@@ -158,7 +158,18 @@ std::ostream &operator<<(std::ostream &out, const rbm_metadata_header_t &header)
        << ", feature=" << header.feature
        << ", journal_size=" << header.journal_size
        << ", crc=" << header.crc
-       << ", config=" << header.config;
+       << ", config=" << header.config
+       << ", shard_num=" << header.shard_num;
+  for (auto p : header.shard_infos) {
+    out << p;
+  }
+  return out << ")";
+}
+
+std::ostream &operator<<(std::ostream &out, const rbm_shard_info_t &shard)
+{
+  out << " rbm_shard_info_t(size=" << shard.size
+      << ", start_offset=" << shard.start_offset;
   return out << ")";
 }
 
index 5db46b2370ed07017a4e68449cad64aaec265f00..b686820d066ea3943e50a5d12d47f7b2bae6baaa 100644 (file)
@@ -62,10 +62,10 @@ public:
   void complete_allocation(paddr_t addr, size_t size) final;
 
   size_t get_start_rbm_addr() const {
-    return device->get_journal_start() + device->get_journal_size();
+    return device->get_shard_journal_start() + device->get_journal_size();
   }
   size_t get_size() const final {
-    return device->get_available_size() - get_start_rbm_addr(); 
+    return device->get_shard_end() - get_start_rbm_addr();
   };
   extent_len_t get_block_size() const final { return device->get_block_size(); }
 
@@ -97,7 +97,7 @@ public:
     assert(allocator);
     rbm_abs_addr addr = convert_paddr_to_abs_addr(paddr);
     assert(addr >= get_start_rbm_addr() &&
-          addr + len <= device->get_available_size());
+          addr + len <= device->get_shard_end());
     allocator->mark_extent_used(addr, len);
   }
 
@@ -105,7 +105,7 @@ public:
     assert(allocator);
     rbm_abs_addr addr = convert_paddr_to_abs_addr(paddr);
     assert(addr >= get_start_rbm_addr() &&
-          addr + len <= device->get_available_size());
+          addr + len <= device->get_shard_end());
     allocator->free_extent(addr, len);
   }
 
@@ -119,7 +119,7 @@ public:
     assert(allocator);
     rbm_abs_addr addr = convert_paddr_to_abs_addr(paddr);
     assert(addr >= get_start_rbm_addr() &&
-          addr + size <= device->get_available_size());
+          addr + size <= device->get_shard_end());
     return allocator->get_extent_state(addr, size);
   }
 
index 44a8c10416975f59a971038014cbb3ab708c71a0..6437f06a484f8676184d72cf46be070947846524 100644 (file)
@@ -22,13 +22,21 @@ namespace {
 
 namespace crimson::os::seastore::random_block_device::nvme {
 
+NVMeBlockDevice::mkfs_ret NVMeBlockDevice::mkfs(device_config_t config) {
+  using crimson::common::get_conf;
+  return shard_devices.local().do_primary_mkfs(config,
+    seastar::smp::count,
+    get_conf<Option::size_t>("seastore_cbjournal_size") 
+  );
+}
+
 open_ertr::future<> NVMeBlockDevice::open(
   const std::string &in_path,
   seastar::open_flags mode) {
   return seastar::do_with(in_path, [this, mode](auto& in_path) {
     return seastar::file_stat(in_path).then([this, mode, in_path](auto stat) {
       return seastar::open_file_dma(in_path, mode).then([=, this](auto file) {
-        device = file;
+        device = std::move(file);
         logger().debug("open");
         // Get SSD's features from identify_controller and namespace command.
         // Do identify_controller first, and then identify_namespace.
@@ -68,7 +76,7 @@ open_ertr::future<> NVMeBlockDevice::open_for_io(
     return seastar::open_file_dma(in_path, mode).then([this](
       auto file) {
       assert(io_device.size() > stream_index_to_open);
-      io_device[stream_index_to_open] = file;
+      io_device[stream_index_to_open] = std::move(file);
       return io_device[stream_index_to_open].fcntl(
         F_SET_FILE_RW_HINT,
         (uintptr_t)&stream_index_to_open).then([this](auto ret) {
@@ -82,7 +90,13 @@ open_ertr::future<> NVMeBlockDevice::open_for_io(
 NVMeBlockDevice::mount_ret NVMeBlockDevice::mount()
 {
   logger().debug(" mount ");
-  return do_mount();
+  return shard_devices.invoke_on_all([](auto &local_device) {
+    return local_device.do_shard_mount(
+    ).handle_error(
+      crimson::ct_error::assert_all{
+        "Invalid error in RBMDevice::do_mount"
+    });
+  });
 }
 
 write_ertr::future<> NVMeBlockDevice::write(
index 4dc4de533aa479251a05b82e67cb9e5abd28872e..ed8f99be8dc248fc6a8baafd57f713fdc5098c47 100644 (file)
@@ -209,11 +209,7 @@ public:
 
   mount_ret mount() final;
 
-  mkfs_ret mkfs(device_config_t config) final {
-    using crimson::common::get_conf;
-    super.journal_size = get_conf<Option::size_t>("seastore_cbjournal_size");
-    return do_mkfs(config);
-  }
+  mkfs_ret mkfs(device_config_t config) final;
 
   write_ertr::future<> writev(
     uint64_t offset,
@@ -267,6 +263,18 @@ public:
     return device_path;
   }
 
+  seastar::future<> start() final {
+    return shard_devices.start(device_path);
+  }
+
+  seastar::future<> stop() final {
+    return shard_devices.stop();
+  }
+
+  Device& get_sharded_device() final {
+    return shard_devices.local();
+  }
+
   uint64_t get_preffered_write_granularity() const { return write_granularity; }
   uint64_t get_preffered_write_alignment() const { return write_alignment; }
   uint64_t get_atomic_write_unit() const { return atomic_write_unit; }
@@ -346,6 +354,7 @@ private:
 
   bool data_protection_enabled = false;
   std::string device_path;
+  seastar::sharded<NVMeBlockDevice> shard_devices;
 };
 
 }
index 13861143898b60f0bc27d045734b096dc5a97b9b..cea6c30a7ec3e9772d3d1751fb0d9661c77836b0 100644 (file)
@@ -18,28 +18,46 @@ namespace crimson::os::seastore::random_block_device {
 #include "crimson/os/seastore/logging.h"
 SET_SUBSYS(seastore_device);
 
-RBMDevice::mkfs_ret RBMDevice::do_mkfs(device_config_t config) {
-  LOG_PREFIX(RBMDevice::mkfs);
+RBMDevice::mkfs_ret RBMDevice::do_primary_mkfs(device_config_t config,
+  int shard_num, size_t journal_size) {
+  LOG_PREFIX(RBMDevice::do_primary_mkfs);
   return stat_device(
   ).handle_error(
     mkfs_ertr::pass_further{},
     crimson::ct_error::assert_all{
-    "Invalid error stat_device in RBMDevice::mkfs"}
-  ).safe_then([this, FNAME, config=std::move(config)](auto st) {
+    "Invalid error stat_device in RBMDevice::do_primary_mkfs"}
+  ).safe_then(
+    [this, FNAME, config=std::move(config), shard_num, journal_size](auto st) {
     super.block_size = st.block_size;
     super.size = st.size;
     super.feature |= RBM_BITMAP_BLOCK_CRC;
     super.config = std::move(config);
-    assert(super.journal_size);
-    assert(super.size >= super.journal_size);
+    super.journal_size = journal_size;
+    ceph_assert_always(super.journal_size > 0);
+    ceph_assert_always(super.size >= super.journal_size);
+    ceph_assert_always(shard_num > 0);
+
+    std::vector<rbm_shard_info_t> shard_infos(shard_num);
+    for (int i = 0; i < shard_num; i++) {
+      uint64_t aligned_size = 
+       (super.size / shard_num) -
+       ((super.size / shard_num) % super.block_size);
+      shard_infos[i].size = aligned_size;
+      shard_infos[i].start_offset = i * aligned_size;
+      assert(shard_infos[i].size > super.journal_size);
+    }
+    super.shard_infos = shard_infos;
+    super.shard_num = shard_num;
+    shard_info = shard_infos[seastar::this_shard_id()];
     DEBUG("super {} ", super);
+
     // write super block
     return open(get_device_path(),
       seastar::open_flags::rw | seastar::open_flags::dsync
     ).handle_error(
       mkfs_ertr::pass_further{},
       crimson::ct_error::assert_all{
-      "Invalid error open in RBMDevice::mkfs"}
+      "Invalid error open in RBMDevice::do_primary_mkfs"}
     ).safe_then([this] {
       return write_rbm_header(
       ).safe_then([this] {
@@ -47,7 +65,7 @@ RBMDevice::mkfs_ret RBMDevice::do_mkfs(device_config_t config) {
       }).handle_error(
        mkfs_ertr::pass_further{},
        crimson::ct_error::assert_all{
-       "Invalid error write_rbm_header in RBMDevice::mkfs"
+       "Invalid error write_rbm_header in RBMDevice::do_primary_mkfs"
       });
     });
   });
@@ -129,7 +147,7 @@ read_ertr::future<rbm_metadata_header_t> RBMDevice::read_rbm_header(
   });
 }
 
-RBMDevice::mount_ret RBMDevice::do_mount()
+RBMDevice::mount_ret RBMDevice::do_shard_mount()
 {
   return open(get_device_path(),
     seastar::open_flags::rw | seastar::open_flags::dsync
@@ -138,25 +156,30 @@ RBMDevice::mount_ret RBMDevice::do_mount()
     ).handle_error(
       mount_ertr::pass_further{},
       crimson::ct_error::assert_all{
-      "Invalid error stat_device in RBMDevice::mount"}
+      "Invalid error stat_device in RBMDevice::do_shard_mount"}
     ).safe_then([this](auto st) {
+      assert(st.block_size > 0);
       super.block_size = st.block_size;
       return read_rbm_header(RBM_START_ADDRESS
-      ).safe_then([](auto s) {
+      ).safe_then([this](auto s) {
+       LOG_PREFIX(RBMDevice::do_shard_mount);
+       shard_info = s.shard_infos[seastar::this_shard_id()];
+       INFO("{} read {}", device_id_printer_t{get_device_id()}, shard_info);
+       s.validate();
        return seastar::now();
       });
     });
   }).handle_error(
     mount_ertr::pass_further{},
     crimson::ct_error::assert_all{
-    "Invalid error mount in NVMeBlockDevice::mount"}
+    "Invalid error mount in RBMDevice::do_shard_mount"}
   );
 }
 
 EphemeralRBMDeviceRef create_test_ephemeral(uint64_t journal_size, uint64_t data_size) {
   return EphemeralRBMDeviceRef(
     new EphemeralRBMDevice(journal_size + data_size + 
-       random_block_device::RBMDevice::get_journal_start(),
+       random_block_device::RBMDevice::get_shard_reserved_size(),
        EphemeralRBMDevice::TEST_BLOCK_SIZE));
 }
 
@@ -236,5 +259,13 @@ write_ertr::future<> EphemeralRBMDevice::writev(
   return write_ertr::now();
 }
 
+EphemeralRBMDevice::mount_ret EphemeralRBMDevice::mount() {
+  return do_shard_mount();
+}
+
+EphemeralRBMDevice::mkfs_ret EphemeralRBMDevice::mkfs(device_config_t config) {
+  return do_primary_mkfs(config, 1, DEFAULT_TEST_CBJOURNAL_SIZE);
+}
+
 }
 
index 7f30b197f3a5362f12eefd6d3f0536f4dd09d36e..501d9f913a1aa9c25ed13901c55e3c95a5cb122e 100644 (file)
@@ -84,6 +84,7 @@ public:
   }
 protected:
   rbm_metadata_header_t super;
+  rbm_shard_info_t shard_info;
 public:
   RBMDevice() {}
   virtual ~RBMDevice() = default;
@@ -152,8 +153,13 @@ public:
 
   mkfs_ret do_mkfs(device_config_t);
 
+  // shard 0 mkfs
+  mkfs_ret do_primary_mkfs(device_config_t, int shard_num, size_t journal_size);
+
   mount_ret do_mount();
 
+  mount_ret do_shard_mount();
+
   write_ertr::future<> write_rbm_header();
 
   read_ertr::future<rbm_metadata_header_t> read_rbm_header(rbm_abs_addr addr);
@@ -168,9 +174,21 @@ public:
     return super.journal_size;
   }
 
-  static rbm_abs_addr get_journal_start() {
+  static rbm_abs_addr get_shard_reserved_size() {
     return RBM_SUPERBLOCK_SIZE;
   }
+
+  rbm_abs_addr get_shard_journal_start() {
+    return shard_info.start_offset + get_shard_reserved_size();
+  }
+
+  uint64_t get_shard_start() const {
+    return shard_info.start_offset;
+  }
+
+  uint64_t get_shard_end() const {
+    return shard_info.start_offset + shard_info.size;
+  }
 };
 using RBMDeviceRef = std::unique_ptr<RBMDevice>;
 
@@ -195,14 +213,8 @@ public:
   std::size_t get_available_size() const final { return size; }
   extent_len_t get_block_size() const final { return block_size; }
 
-  mount_ret mount() final {
-    return do_mount();
-  }
-
-  mkfs_ret mkfs(device_config_t config) final {
-    super.journal_size = DEFAULT_TEST_CBJOURNAL_SIZE;
-    return do_mkfs(config);
-  }
+  mount_ret mount() final;
+  mkfs_ret mkfs(device_config_t config) final;
 
   open_ertr::future<> open(
     const std::string &in_path,
diff --git a/ceph/src/crimson/os/seastore/record_scanner.cc b/ceph/src/crimson/os/seastore/record_scanner.cc
new file mode 100644 (file)
index 0000000..9778bbb
--- /dev/null
@@ -0,0 +1,239 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*-
+// vim: ts=8 sw=2 smarttab expandtab
+
+#include "crimson/os/seastore/record_scanner.h"
+
+#include "crimson/os/seastore/logging.h"
+
+SET_SUBSYS(seastore_journal);
+
+namespace crimson::os::seastore {
+
+RecordScanner::scan_valid_records_ret
+RecordScanner::scan_valid_records(
+  scan_valid_records_cursor &cursor,
+  segment_nonce_t nonce,
+  size_t budget,
+  found_record_handler_t &handler)
+{
+  LOG_PREFIX(RecordScanner::scan_valid_records);
+  initialize_cursor(cursor);
+  DEBUG("starting at {}, budget={}", cursor, budget);
+  auto retref = std::make_unique<size_t>(0);
+  auto &budget_used = *retref;
+  return crimson::repeat(
+    [=, &cursor, &budget_used, &handler, this]() mutable
+    -> scan_valid_records_ertr::future<seastar::stop_iteration> {
+      return [=, &handler, &cursor, &budget_used, this] {
+       if (!cursor.last_valid_header_found) {
+         return read_validate_record_metadata(cursor, nonce
+         ).safe_then([=, &cursor](auto md) {
+           if (!md) {
+             cursor.last_valid_header_found = true;
+             if (cursor.is_complete()) {
+               INFO("complete at {}, invalid record group metadata",
+                     cursor);
+             } else {
+               DEBUG("found invalid record group metadata at {}, "
+                     "processing {} pending record groups",
+                     cursor.seq,
+                     cursor.pending_record_groups.size());
+             }
+             return scan_valid_records_ertr::now();
+           } else {
+             auto& [header, md_bl] = *md;
+             DEBUG("found valid {} at {}", header, cursor.seq);
+             cursor.emplace_record_group(header, std::move(md_bl));
+             return scan_valid_records_ertr::now();
+           }
+         }).safe_then([=, &cursor, &budget_used, &handler, this] {
+           DEBUG("processing committed record groups until {}, {} pending",
+                 cursor.last_committed,
+                 cursor.pending_record_groups.size());
+           return crimson::repeat(
+             [=, &budget_used, &cursor, &handler, this] {
+               if (cursor.pending_record_groups.empty()) {
+                 /* This is only possible if the segment is empty.
+                  * A record's last_commited must be prior to its own
+                  * location since it itself cannot yet have been committed
+                  * at its own time of submission.  Thus, the most recently
+                  * read record must always fall after cursor.last_committed */
+                 return scan_valid_records_ertr::make_ready_future<
+                   seastar::stop_iteration>(seastar::stop_iteration::yes);
+               }
+               auto &next = cursor.pending_record_groups.front();
+               journal_seq_t next_seq = {cursor.seq.segment_seq, next.offset};
+               if (cursor.last_committed == JOURNAL_SEQ_NULL ||
+                   next_seq > cursor.last_committed) {
+                 return scan_valid_records_ertr::make_ready_future<
+                   seastar::stop_iteration>(seastar::stop_iteration::yes);
+               }
+               return consume_next_records(cursor, handler, budget_used
+               ).safe_then([] {
+                 return scan_valid_records_ertr::make_ready_future<
+                   seastar::stop_iteration>(seastar::stop_iteration::no);
+               });
+             });
+         });
+       } else {
+         assert(!cursor.pending_record_groups.empty());
+         auto &next = cursor.pending_record_groups.front();
+         return read_validate_data(next.offset, next.header
+         ).safe_then([this, FNAME, &budget_used, &cursor, &handler, &next](auto valid) {
+           if (!valid) {
+             INFO("complete at {}, invalid record group data at {}, {}",
+                  cursor, next.offset, next.header);
+             cursor.pending_record_groups.clear();
+             return scan_valid_records_ertr::now();
+           }
+            return consume_next_records(cursor, handler, budget_used);
+         });
+       }
+      }().safe_then([=, &budget_used, &cursor] {
+       if (cursor.is_complete() || budget_used >= budget) {
+         DEBUG("finish at {}, budget_used={}, budget={}",
+                cursor, budget_used, budget);
+         return seastar::stop_iteration::yes;
+       } else {
+         return seastar::stop_iteration::no;
+       }
+      });
+    }).safe_then([retref=std::move(retref)]() mutable -> scan_valid_records_ret {
+      return scan_valid_records_ret(
+       scan_valid_records_ertr::ready_future_marker{},
+       std::move(*retref));
+    });
+}
+
+RecordScanner::read_validate_record_metadata_ret
+RecordScanner::read_validate_record_metadata(
+  scan_valid_records_cursor &cursor,
+  segment_nonce_t nonce)
+{
+  LOG_PREFIX(RecordScanner::read_validate_record_metadata);
+  paddr_t start = cursor.seq.offset;
+  auto block_size = cursor.get_block_size();
+  if (get_segment_off(cursor.seq.offset) + block_size > get_segment_end_offset(cursor.seq.offset)) {
+    DEBUG("failed -- record group header block {}~4096 > segment_size {}",
+      start, get_segment_end_offset(cursor.seq.offset));
+    return read_validate_record_metadata_ret(
+      read_validate_record_metadata_ertr::ready_future_marker{},
+      std::nullopt);
+  }
+  TRACE("reading record group header block {}~4096", start);
+  return read(start, block_size
+  ).safe_then([=](bufferptr bptr) mutable
+              -> read_validate_record_metadata_ret {
+    bufferlist bl;
+    bl.append(bptr);
+    auto maybe_header = try_decode_records_header(bl, nonce);
+    if (!maybe_header.has_value()) {
+      return read_validate_record_metadata_ret(
+        read_validate_record_metadata_ertr::ready_future_marker{},
+        std::nullopt);
+    }
+
+    auto& header = *maybe_header;
+    if (header.mdlength < block_size ||
+        header.mdlength % block_size != 0 ||
+        header.dlength % block_size != 0 ||
+       (header.committed_to != JOURNAL_SEQ_NULL &&
+       get_segment_off(header.committed_to.offset) %
+       cursor.get_block_size() != 0) ||
+       (get_segment_off(cursor.seq.offset) + header.mdlength + header.dlength >
+       get_segment_end_offset(cursor.seq.offset))) {
+      ERROR("failed, invalid record group header {}", header);
+      return crimson::ct_error::input_output_error::make();
+    }
+
+    if (is_record_segment_seq_invalid(cursor, header)) {
+      return read_validate_record_metadata_ret(
+        read_validate_record_metadata_ertr::ready_future_marker{},
+        std::nullopt);
+    }
+
+    if (header.mdlength == block_size) {
+      return read_validate_record_metadata_ret(
+        read_validate_record_metadata_ertr::ready_future_marker{},
+        std::make_pair(std::move(header), std::move(bl))
+      );
+    }
+
+    paddr_t rest_start = cursor.seq.offset.add_offset(block_size);
+    auto rest_len = header.mdlength - block_size;
+    TRACE("reading record group header rest {}~{}", rest_start, rest_len);
+    return read(rest_start, rest_len
+    ).safe_then([header=std::move(header), bl=std::move(bl)
+                ](auto&& bptail) mutable {
+      bl.push_back(bptail);
+      return read_validate_record_metadata_ret(
+        read_validate_record_metadata_ertr::ready_future_marker{},
+        std::make_pair(std::move(header), std::move(bl)));
+    });
+  }).safe_then([](auto p) {
+    if (p && validate_records_metadata(p->second)) {
+      return read_validate_record_metadata_ret(
+        read_validate_record_metadata_ertr::ready_future_marker{},
+        std::move(*p)
+      );
+    } else {
+      return read_validate_record_metadata_ret(
+        read_validate_record_metadata_ertr::ready_future_marker{},
+        std::nullopt);
+    }
+  });
+
+}
+
+RecordScanner::read_validate_data_ret RecordScanner::read_validate_data(
+  paddr_t record_base,
+  const record_group_header_t &header)
+{
+  LOG_PREFIX(RecordScanner::read_validate_data);
+  auto data_addr = record_base.add_offset(header.mdlength);
+  TRACE("reading record group data blocks {}~{}", data_addr, header.dlength);
+  return read(
+    data_addr,
+    header.dlength
+  ).safe_then([=, &header](auto bptr) {
+    bufferlist bl;
+    bl.append(bptr);
+    return validate_records_data(header, bl);
+  });
+}
+
+RecordScanner::consume_record_group_ertr::future<>
+RecordScanner::consume_next_records(
+  scan_valid_records_cursor& cursor,
+  found_record_handler_t& handler,
+  std::size_t& budget_used)
+{
+  LOG_PREFIX(RecordScanner::consume_next_records);
+  auto& next = cursor.pending_record_groups.front();
+  auto total_length = next.header.dlength + next.header.mdlength;
+  budget_used += total_length;
+  auto locator = record_locator_t{
+    next.offset.add_offset(next.header.mdlength),
+    write_result_t{
+      journal_seq_t{
+        cursor.seq.segment_seq,
+        next.offset
+      },
+      total_length
+    }
+  };
+  DEBUG("processing {} at {}, budget_used={}",
+        next.header, locator, budget_used);
+  return handler(
+    locator,
+    next.header,
+    next.mdbuffer
+  ).safe_then([FNAME, &cursor] {
+    cursor.pop_record_group();
+    if (cursor.is_complete()) {
+      INFO("complete at {}, no more record group", cursor);
+    }
+  });
+}
+
+}
diff --git a/ceph/src/crimson/os/seastore/record_scanner.h b/ceph/src/crimson/os/seastore/record_scanner.h
new file mode 100644 (file)
index 0000000..2cbc7c5
--- /dev/null
@@ -0,0 +1,83 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:nil -*-
+// vim: ts=8 sw=2 smarttab expandtab
+
+#pragma once
+
+#include "crimson/common/errorator.h"
+#include "crimson/os/seastore/seastore_types.h"
+#include "crimson/os/seastore/segment_manager.h"
+
+
+namespace crimson::os::seastore {
+
+class RecordScanner {
+public:
+  using read_ertr = SegmentManager::read_ertr;
+  using scan_valid_records_ertr = read_ertr;
+  using scan_valid_records_ret = scan_valid_records_ertr::future<
+    size_t>;
+  using found_record_handler_t = std::function<
+    scan_valid_records_ertr::future<>(
+      record_locator_t record_locator,
+      // callee may assume header and bl will remain valid until
+      // returned future resolves
+      const record_group_header_t &header,
+      const bufferlist &mdbuf)>;
+  scan_valid_records_ret scan_valid_records(
+    scan_valid_records_cursor &cursor, ///< [in, out] cursor, updated during call
+    segment_nonce_t nonce,             ///< [in] nonce for segment
+    size_t budget,                     ///< [in] max budget to use
+    found_record_handler_t &handler    ///< [in] handler for records
+  ); ///< @return used budget
+
+  device_off_t get_segment_off(paddr_t addr) const {
+    if (addr.get_addr_type() == paddr_types_t::SEGMENT) {
+      auto& seg_addr = addr.as_seg_paddr();
+      return seg_addr.get_segment_off();
+    }
+    assert(addr.get_addr_type() == paddr_types_t::RANDOM_BLOCK);
+    auto& blk_addr = addr.as_blk_paddr();
+    return blk_addr.get_device_off();
+  }
+
+protected:
+  /// read record metadata for record starting at start
+  using read_validate_record_metadata_ertr = read_ertr;
+  using read_validate_record_metadata_ret =
+    read_validate_record_metadata_ertr::future<
+      std::optional<std::pair<record_group_header_t, bufferlist>>
+    >;
+  read_validate_record_metadata_ret read_validate_record_metadata(
+    scan_valid_records_cursor &cursor,
+    segment_nonce_t nonce);
+
+  /// read and validate data
+  using read_validate_data_ertr = read_ertr;
+  using read_validate_data_ret = read_validate_data_ertr::future<bool>;
+  read_validate_data_ret read_validate_data(
+    paddr_t record_base,
+    const record_group_header_t &header  ///< caller must ensure lifetime through
+                                         ///  future resolution
+  );
+
+  virtual bool is_record_segment_seq_invalid(scan_valid_records_cursor &cursor,
+    record_group_header_t &h) = 0;
+
+  virtual int64_t get_segment_end_offset(paddr_t addr) = 0;
+
+  using read_ret = read_ertr::future<bufferptr>;
+  virtual read_ret read(paddr_t start, size_t len) = 0;
+
+  using consume_record_group_ertr = scan_valid_records_ertr;
+  consume_record_group_ertr::future<> consume_next_records(
+      scan_valid_records_cursor& cursor,
+      found_record_handler_t& handler,
+      std::size_t& budget_used);
+
+  virtual void initialize_cursor(scan_valid_records_cursor &cursor) = 0;
+
+  virtual ~RecordScanner() {}
+
+};
+
+}
index bf3dfb54265688f8480ace5cf98952cbabebe610..0e45519ce45166ab5f67de3fc1492e446382decf 100644 (file)
@@ -41,7 +41,7 @@ struct RootBlock : CachedExtent {
   CachedExtent* lba_root_node = nullptr;
   CachedExtent* backref_root_node = nullptr;
 
-  RootBlock() : CachedExtent(0) {}
+  RootBlock() : CachedExtent(zero_length_t()) {};
 
   RootBlock(const RootBlock &rhs)
     : CachedExtent(rhs),
index b44d6696701df12950d61aeffe672a52ced2266c..897a063e0fe6369bf1186c6e65f253276acae07c 100644 (file)
@@ -958,7 +958,7 @@ seastar::future<struct stat> SeaStore::Shard::stat(
     Transaction::src_t::READ,
     "stat",
     op_type_t::STAT,
-    [=, this, &oid](auto &t, auto &onode) {
+    [=, this](auto &t, auto &onode) {
       struct stat st;
       auto &olayout = onode.get_layout();
       st.st_size = olayout.size;
@@ -1196,8 +1196,20 @@ seastar::future<> SeaStore::Shard::do_transaction_no_callbacks(
     op_type_t::TRANSACTION,
     [this](auto &ctx) {
       return with_trans_intr(*ctx.transaction, [&, this](auto &t) {
-        return seastar::do_with(std::vector<OnodeRef>(ctx.iter.objects.size()),
-          std::vector<OnodeRef>(),
+#ifndef NDEBUG
+       LOG_PREFIX(SeaStore::Shard::do_transaction_no_callbacks);
+       TRACET(" transaction dump:\n", t);
+       JSONFormatter f(true);
+       f.open_object_section("transaction");
+       ctx.ext_transaction.dump(&f);
+       f.close_section();
+       std::stringstream str;
+       f.flush(str);
+       TRACET("{}", t, str.str());
+#endif
+        return seastar::do_with(
+         std::vector<OnodeRef>(ctx.iter.objects.size()),
+          std::vector<OnodeRef>(ctx.iter.objects.size()),
           [this, &ctx](auto& onodes, auto& d_onodes) mutable {
           return trans_intr::repeat(
             [this, &ctx, &onodes, &d_onodes]() mutable
@@ -1289,20 +1301,42 @@ SeaStore::Shard::_do_transaction_step(
         *ctx.transaction, i.get_oid(op->oid));
     }
   }
-  return fut.si_then([&, op, this](auto&& get_onode) -> tm_ret {
-    LOG_PREFIX(SeaStore::_do_transaction_step);
+  return fut.si_then([&, op](auto get_onode) {
     OnodeRef &o = onodes[op->oid];
     if (!o) {
       assert(get_onode);
       o = get_onode;
-      d_onodes.push_back(get_onode);
+      d_onodes[op->oid] = get_onode;
     }
+    if (op->op == Transaction::OP_CLONE && !d_onodes[op->dest_oid]) {
+      //TODO: use when_all_succeed after making onode tree
+      //      support parallel extents loading
+      return onode_manager->get_or_create_onode(
+       *ctx.transaction, i.get_oid(op->dest_oid)
+      ).si_then([&, op](auto dest_onode) {
+       assert(dest_onode);
+       auto &d_o = onodes[op->dest_oid];
+       assert(!d_o);
+       assert(!d_onodes[op->dest_oid]);
+       d_o = dest_onode;
+       d_onodes[op->dest_oid] = dest_onode;
+       return seastar::now();
+      });
+    } else {
+      return OnodeManager::get_or_create_onode_iertr::now();
+    }
+  }).si_then([&, op, this]() -> tm_ret {
+    LOG_PREFIX(SeaStore::_do_transaction_step);
     try {
       switch (op->op) {
       case Transaction::OP_REMOVE:
       {
        TRACET("removing {}", *ctx.transaction, i.get_oid(op->oid));
-        return _remove(ctx, onodes[op->oid]);
+        return _remove(ctx, onodes[op->oid]
+       ).si_then([&onodes, &d_onodes, op] {
+         onodes[op->oid].reset();
+         d_onodes[op->oid].reset();
+       });
       }
       case Transaction::OP_CREATE:
       case Transaction::OP_TOUCH:
@@ -1390,6 +1424,14 @@ SeaStore::Shard::_do_transaction_step(
         // TODO
         return tm_iertr::now();
       }
+      case Transaction::OP_CLONE:
+      {
+       TRACET("cloning {} to {}",
+         *ctx.transaction,
+         i.get_oid(op->oid),
+         i.get_oid(op->dest_oid));
+       return _clone(ctx, onodes[op->oid], d_onodes[op->dest_oid]);
+      }
       default:
         ERROR("bad op {}", static_cast<unsigned>(op->op));
         return crimson::ct_error::input_output_error::make();
@@ -1507,6 +1549,31 @@ SeaStore::Shard::_write(
     });
 }
 
+SeaStore::Shard::tm_ret
+SeaStore::Shard::_clone(
+  internal_context_t &ctx,
+  OnodeRef &onode,
+  OnodeRef &d_onode)
+{
+  LOG_PREFIX(SeaStore::_clone);
+  DEBUGT("onode={} d_onode={}", *ctx.transaction, *onode, *d_onode);
+  return seastar::do_with(
+    ObjectDataHandler(max_object_size),
+    [this, &ctx, &onode, &d_onode](auto &objHandler) {
+    //TODO: currently, we only care about object data, leaving cloning
+    //      of xattr/omap for future work
+    auto &object_size = onode->get_layout().size;
+    auto &d_object_size = d_onode->get_mutable_layout(*ctx.transaction).size;
+    d_object_size = object_size;
+    return objHandler.clone(
+      ObjectDataHandler::context_t{
+       *transaction_manager,
+       *ctx.transaction,
+       *onode,
+       d_onode.get()});
+  });
+}
+
 SeaStore::Shard::tm_ret
 SeaStore::Shard::_zero(
   internal_context_t &ctx,
index df4323df55736d95b0b8a8f99544f310055b1838..876fadca8c78753511cf99ee4d9e90c7eddb2e89 100644 (file)
@@ -353,6 +353,10 @@ public:
       uint64_t offset, size_t len,
       ceph::bufferlist &&bl,
       uint32_t fadvise_flags);
+    tm_ret _clone(
+      internal_context_t &ctx,
+      OnodeRef &onode,
+      OnodeRef &d_onode);
     tm_ret _zero(
       internal_context_t &ctx,
       OnodeRef &onode,
index 9328a03094c561b736f2f2c7912b8a6656e5a79f..0acfdb74ebb54d21d3c06abf217cea510f8c6210 100644 (file)
@@ -89,6 +89,15 @@ std::ostream& operator<<(std::ostream& out, segment_seq_printer_t seq)
   }
 }
 
+std::ostream &operator<<(std::ostream &out, const pladdr_t &pladdr)
+{
+  if (pladdr.is_laddr()) {
+    return out << pladdr.get_laddr();
+  } else {
+    return out << pladdr.get_paddr();
+  }
+}
+
 std::ostream &operator<<(std::ostream &out, const paddr_t &rhs)
 {
   auto id = rhs.get_device_id();
@@ -779,8 +788,8 @@ device_type_t string_to_device_type(std::string type) {
   if (type == "SSD") {
     return device_type_t::SSD;
   }
-  if (type == "ZNS") {
-    return device_type_t::ZNS;
+  if (type == "ZBD") {
+    return device_type_t::ZBD;
   }
   if (type == "RANDOM_BLOCK_SSD") {
     return device_type_t::RANDOM_BLOCK_SSD;
@@ -797,8 +806,8 @@ std::ostream& operator<<(std::ostream& out, device_type_t t)
     return out << "HDD";
   case device_type_t::SSD:
     return out << "SSD";
-  case device_type_t::ZNS:
-    return out << "ZNS";
+  case device_type_t::ZBD:
+    return out << "ZBD";
   case device_type_t::EPHEMERAL_COLD:
     return out << "EPHEMERAL_COLD";
   case device_type_t::EPHEMERAL_MAIN:
index 55d8eb4a260ac2bb079cc2aabbe362241bb9e17a..0b4ad853687fe650de0b1186fdc65efae331c6a9 100644 (file)
@@ -210,7 +210,7 @@ constexpr segment_id_t NULL_SEG_ID = MAX_SEG_ID;
 
 /* Monotonically increasing segment seq, uniquely identifies
  * the incarnation of a segment */
-using segment_seq_t = uint32_t;
+using segment_seq_t = uint64_t;
 static constexpr segment_seq_t MAX_SEG_SEQ =
   std::numeric_limits<segment_seq_t>::max();
 static constexpr segment_seq_t NULL_SEG_SEQ = MAX_SEG_SEQ;
@@ -488,6 +488,7 @@ constexpr device_off_t decode_device_off(internal_paddr_t addr) {
 struct seg_paddr_t;
 struct blk_paddr_t;
 struct res_paddr_t;
+struct pladdr_t;
 struct paddr_t {
 public:
   // P_ADDR_MAX == P_ADDR_NULL == paddr_t{}
@@ -668,6 +669,8 @@ private:
                      static_cast<u_device_off_t>(offset)) {}
 
   friend struct paddr_le_t;
+  friend struct pladdr_le_t;
+
 };
 
 std::ostream &operator<<(std::ostream &out, const paddr_t &rhs);
@@ -882,7 +885,7 @@ enum class device_type_t : uint8_t {
   NONE = 0,
   HDD,
   SSD,
-  ZNS,
+  ZBD,            // ZNS SSD or SMR HDD
   EPHEMERAL_COLD,
   EPHEMERAL_MAIN,
   RANDOM_BLOCK_SSD,
@@ -896,7 +899,7 @@ bool can_delay_allocation(device_type_t type);
 device_type_t string_to_device_type(std::string type);
 
 enum class backend_type_t {
-  SEGMENTED,    // SegmentManager: SSD, ZNS, HDD
+  SEGMENTED,    // SegmentManager: SSD, ZBD, HDD
   RANDOM_BLOCK  // RBMDevice:      RANDOM_BLOCK_SSD
 };
 
@@ -1032,6 +1035,103 @@ struct __attribute((packed)) laddr_le_t {
   }
 };
 
+constexpr uint64_t PL_ADDR_NULL = std::numeric_limits<uint64_t>::max();
+
+struct pladdr_t {
+  std::variant<laddr_t, paddr_t> pladdr;
+
+  pladdr_t() = default;
+  pladdr_t(const pladdr_t &) = default;
+  pladdr_t(laddr_t laddr)
+    : pladdr(laddr) {}
+  pladdr_t(paddr_t paddr)
+    : pladdr(paddr) {}
+
+  bool is_laddr() const {
+    return pladdr.index() == 0;
+  }
+
+  bool is_paddr() const {
+    return pladdr.index() == 1;
+  }
+
+  pladdr_t& operator=(paddr_t paddr) {
+    pladdr = paddr;
+    return *this;
+  }
+
+  pladdr_t& operator=(laddr_t laddr) {
+    pladdr = laddr;
+    return *this;
+  }
+
+  bool operator==(const pladdr_t &) const = default;
+
+  paddr_t get_paddr() const {
+    assert(pladdr.index() == 1);
+    return paddr_t(std::get<1>(pladdr));
+  }
+
+  laddr_t get_laddr() const {
+    assert(pladdr.index() == 0);
+    return laddr_t(std::get<0>(pladdr));
+  }
+
+};
+
+std::ostream &operator<<(std::ostream &out, const pladdr_t &pladdr);
+
+enum class addr_type_t : uint8_t {
+  PADDR=0,
+  LADDR=1,
+  MAX=2        // or NONE
+};
+
+struct __attribute((packed)) pladdr_le_t {
+  ceph_le64 pladdr = ceph_le64(PL_ADDR_NULL);
+  addr_type_t addr_type = addr_type_t::MAX;
+
+  pladdr_le_t() = default;
+  pladdr_le_t(const pladdr_le_t &) = default;
+  explicit pladdr_le_t(const pladdr_t &addr)
+    : pladdr(
+       ceph_le64(
+         addr.is_laddr() ?
+           std::get<0>(addr.pladdr) :
+           std::get<1>(addr.pladdr).internal_paddr)),
+      addr_type(
+       addr.is_laddr() ?
+         addr_type_t::LADDR :
+         addr_type_t::PADDR)
+  {}
+
+  operator pladdr_t() const {
+    if (addr_type == addr_type_t::LADDR) {
+      return pladdr_t(laddr_t(pladdr));
+    } else {
+      assert(addr_type == addr_type_t::PADDR);
+      return pladdr_t(paddr_t(pladdr));
+    }
+  }
+};
+
+template <typename T>
+struct min_max_t {};
+
+template <>
+struct min_max_t<laddr_t> {
+  static constexpr laddr_t max = L_ADDR_MAX;
+  static constexpr laddr_t min = L_ADDR_MIN;
+  static constexpr laddr_t null = L_ADDR_NULL;
+};
+
+template <>
+struct min_max_t<paddr_t> {
+  static constexpr paddr_t max = P_ADDR_MAX;
+  static constexpr paddr_t min = P_ADDR_MIN;
+  static constexpr paddr_t null = P_ADDR_NULL;
+};
+
 // logical offset, see LBAManager, TransactionManager
 using extent_len_t = uint32_t;
 constexpr extent_len_t EXTENT_LEN_MAX =
@@ -2056,6 +2156,7 @@ struct scan_valid_records_cursor {
   journal_seq_t seq;
   journal_seq_t last_committed;
   std::size_t num_consumed_records = 0;
+  extent_len_t block_size = 0;
 
   struct found_record_group_t {
     paddr_t offset;
@@ -2082,10 +2183,12 @@ struct scan_valid_records_cursor {
     return seq.offset.as_seg_paddr().get_segment_off();
   }
 
+  extent_len_t get_block_size() const {
+    return block_size;
+  }
+
   void increment_seq(segment_off_t off) {
-    auto& seg_addr = seq.offset.as_seg_paddr();
-    seg_addr.set_segment_off(
-      seg_addr.get_segment_off() + off);
+    seq.offset = seq.offset.add_offset(off);
   }
 
   void emplace_record_group(const record_group_header_t&, ceph::bufferlist&&);
@@ -2129,6 +2232,7 @@ template <> struct fmt::formatter<crimson::os::seastore::laddr_list_t> : fmt::os
 template <> struct fmt::formatter<crimson::os::seastore::omap_root_t> : fmt::ostream_formatter {};
 template <> struct fmt::formatter<crimson::os::seastore::paddr_list_t> : fmt::ostream_formatter {};
 template <> struct fmt::formatter<crimson::os::seastore::paddr_t> : fmt::ostream_formatter {};
+template <> struct fmt::formatter<crimson::os::seastore::pladdr_t> : fmt::ostream_formatter {};
 template <> struct fmt::formatter<crimson::os::seastore::placement_hint_t> : fmt::ostream_formatter {};
 template <> struct fmt::formatter<crimson::os::seastore::device_type_t> : fmt::ostream_formatter {};
 template <> struct fmt::formatter<crimson::os::seastore::record_group_header_t> : fmt::ostream_formatter {};
index 098a9b068f8fe61afd4424d9c3ce4c8e88826c1b..1be9cce5f6bf6867e59d446b17399c872410b177 100644 (file)
@@ -6,7 +6,7 @@
 #include "crimson/os/seastore/logging.h"
 
 #ifdef HAVE_ZNS
-#include "crimson/os/seastore/segment_manager/zns.h"
+#include "crimson/os/seastore/segment_manager/zbd.h"
 SET_SUBSYS(seastore_device);
 #endif
 
@@ -63,23 +63,31 @@ SegmentManager::get_segment_manager(
 LOG_PREFIX(SegmentManager::get_segment_manager);
   return seastar::do_with(
     static_cast<size_t>(0),
-    [&](auto &nr_zones) {
+    [FNAME,
+     dtype,
+     device](auto &nr_zones) {
       return seastar::open_file_dma(
        device + "/block",
        seastar::open_flags::rw
-      ).then([&](auto file) {
+      ).then([FNAME,
+             dtype,
+             device,
+             &nr_zones](auto file) {
        return seastar::do_with(
          file,
-         [=, &nr_zones](auto &f) -> seastar::future<int> {
+         [&nr_zones](auto &f) -> seastar::future<int> {
            ceph_assert(f);
            return f.ioctl(BLKGETNRZONES, (void *)&nr_zones);
          });
-      }).then([&](auto ret) -> crimson::os::seastore::SegmentManagerRef {
+      }).then([FNAME,
+              dtype,
+              device,
+              &nr_zones](auto ret) -> crimson::os::seastore::SegmentManagerRef {
        crimson::os::seastore::SegmentManagerRef sm;
        INFO("Found {} zones.", nr_zones);
        if (nr_zones != 0) {
          return std::make_unique<
-           segment_manager::zns::ZNSSegmentManager
+           segment_manager::zbd::ZBDSegmentManager
            >(device + "/block");
        } else {
          return std::make_unique<
index 1669d124a6b8ac079bb09d6d0b7f8a44707a1539..719fa6075ed9b4dc7649bf51eb56fab8843eba37 100644 (file)
@@ -153,7 +153,7 @@ public:
    * advance_wp
    *
    * advance the segment write pointer,
-   * needed when writing at wp is strictly implemented. ex: ZNS backed segments
+   * needed when writing at wp is strictly implemented. ex: ZBD backed segments
    * @param offset: advance write pointer till the given offset
    */
   virtual write_ertr::future<> advance_wp(
diff --git a/ceph/src/crimson/os/seastore/segment_manager/zbd.cc b/ceph/src/crimson/os/seastore/segment_manager/zbd.cc
new file mode 100644 (file)
index 0000000..88521a9
--- /dev/null
@@ -0,0 +1,823 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include <sys/mman.h>
+#include <string.h>
+#include <linux/blkzoned.h>
+
+#include <fmt/format.h>
+#include "crimson/os/seastore/segment_manager/zbd.h"
+#include "crimson/common/config_proxy.h"
+#include "crimson/os/seastore/logging.h"
+#include "crimson/common/errorator-loop.h"
+#include "include/buffer.h"
+
+SET_SUBSYS(seastore_device);
+
+#define SECT_SHIFT     9
+#define RESERVED_ZONES         1
+// limit the max padding buf size to 1MB
+#define MAX_PADDING_SIZE 4194304
+
+using z_op = crimson::os::seastore::segment_manager::zbd::zone_op;
+template <> struct fmt::formatter<z_op>: fmt::formatter<std::string_view> {
+  template <typename FormatContext>
+  auto format(z_op s, FormatContext& ctx) {
+    std::string_view name = "Unknown";
+    switch (s) {
+      using enum z_op;
+        case OPEN:
+          name = "BLKOPENZONE";
+          break;
+        case FINISH:
+          name = "BLKFINISHZONE";
+          break;
+        case CLOSE:
+          name = "BLKCLOSEZONE";
+          break;
+        case RESET:
+          name = "BLKRESETZONE";
+          break;
+    }
+    return formatter<string_view>::format(name, ctx);
+  }
+};
+
+namespace crimson::os::seastore::segment_manager::zbd {
+
+using open_device_ret = ZBDSegmentManager::access_ertr::future<
+  std::pair<seastar::file, seastar::stat_data>>;
+static open_device_ret open_device(
+  const std::string &path,
+  seastar::open_flags mode)
+{
+  LOG_PREFIX(ZBDSegmentManager::open_device);
+  return seastar::file_stat(
+    path, seastar::follow_symlink::yes
+  ).then([FNAME, mode, &path](auto stat) mutable {
+    return seastar::open_file_dma(path, mode).then([=](auto file) {
+       DEBUG("open of device {} successful, size {}",
+        path,
+        stat.size);
+      return std::make_pair(file, stat);
+    });
+  }).handle_exception(
+    [FNAME](auto e) -> open_device_ret {
+       ERROR("got error {}",
+       e);
+      return crimson::ct_error::input_output_error::make();
+    }
+  );
+}
+
+static zbd_sm_metadata_t make_metadata(
+  uint64_t total_size,
+  seastore_meta_t meta,
+  const seastar::stat_data &data,
+  size_t zone_size_sectors,
+  size_t zone_capacity_sectors,
+  size_t nr_cnv_zones,
+  size_t num_zones)
+{
+  LOG_PREFIX(ZBDSegmentManager::make_metadata);
+
+  // Using only SWR zones in a SMR drive, for now
+  auto skipped_zones = RESERVED_ZONES + nr_cnv_zones;
+  assert(num_zones > skipped_zones);
+
+  // TODO: support Option::size_t seastore_segment_size
+  // to allow zones_per_segment > 1 with striping.
+  size_t zone_size = zone_size_sectors << SECT_SHIFT;
+  assert(total_size == num_zones * zone_size);
+  size_t zone_capacity = zone_capacity_sectors << SECT_SHIFT;
+  size_t segment_size = zone_size;
+  size_t zones_per_segment = segment_size / zone_size;
+  size_t segments = (num_zones - skipped_zones) / zones_per_segment;
+  size_t per_shard_segments = segments / seastar::smp::count;
+  size_t available_size = zone_capacity * segments;
+  size_t per_shard_available_size = zone_capacity * per_shard_segments;
+
+
+  WARN("Ignoring configuration values for device and segment size");
+  INFO(
+    "device size: {}, available size: {}, block size: {}, allocated size: {},"
+    " total zones {}, zone size: {}, zone capacity: {},"
+    " total segments: {}, zones per segment: {}, segment size: {}"
+    " conv zones: {}, swr zones: {}, per shard segments: {}"
+    " per shard available size: {}",
+    total_size,
+    available_size,
+    data.block_size,
+    data.allocated_size,
+    num_zones,
+    zone_size,
+    zone_capacity,
+    segments,
+    zones_per_segment,
+    zone_capacity * zones_per_segment,
+    nr_cnv_zones,
+    num_zones - nr_cnv_zones,
+    per_shard_segments,
+    per_shard_available_size);
+
+  std::vector<zbd_shard_info_t> shard_infos(seastar::smp::count);
+  for (unsigned int i = 0; i < seastar::smp::count; i++) {
+    shard_infos[i].size = per_shard_available_size;
+    shard_infos[i].segments = per_shard_segments;
+    shard_infos[i].first_segment_offset = zone_size * skipped_zones
+      + i * segment_size * per_shard_segments;
+    INFO("First segment offset for shard {} is: {}",
+                   i, shard_infos[i].first_segment_offset);
+  }
+
+  zbd_sm_metadata_t ret = zbd_sm_metadata_t{
+    seastar::smp::count,
+    segment_size,
+    zone_capacity * zones_per_segment,
+    zones_per_segment,
+    zone_capacity,
+    data.block_size,
+    zone_size,
+    shard_infos,
+    meta};
+  ret.validate();
+  return ret;
+}
+
+struct ZoneReport {
+  struct blk_zone_report *hdr;
+  ZoneReport(int nr_zones) 
+    : hdr((blk_zone_report *)malloc(
+           sizeof(struct blk_zone_report) + nr_zones * sizeof(struct blk_zone))){;}
+  ~ZoneReport(){
+    free(hdr);
+  }
+  ZoneReport(const ZoneReport &) = delete;
+  ZoneReport(ZoneReport &&rhs) : hdr(rhs.hdr) {
+    rhs.hdr = nullptr;
+  }
+};
+
+static seastar::future<size_t> get_blk_dev_size(
+  seastar::file &device)
+{
+  return seastar::do_with(
+    (uint64_t)0,
+    [&](auto& size_sects) {
+      return device.ioctl(
+        BLKGETSIZE,
+       (void *)&size_sects
+      ).then([&](int ret) {
+        ceph_assert(size_sects);
+        size_t size = size_sects << SECT_SHIFT;
+       return seastar::make_ready_future<size_t>(size);
+      });
+  });
+}
+
+// zone_size should be in 512B sectors
+static seastar::future<> reset_device(
+  seastar::file &device,
+  uint64_t zone_size_sects,
+  uint64_t nr_zones)
+{
+  return seastar::do_with(
+    blk_zone_range{},
+    [&, nr_zones, zone_size_sects](auto &range) {
+      range.sector = 0;
+      range.nr_sectors = zone_size_sects * nr_zones;
+      return device.ioctl(
+       BLKRESETZONE, 
+       &range
+      ).then([&](int ret){
+       return seastar::now();
+      });
+    }
+  );
+}
+
+static seastar::future<size_t> get_zone_capacity(
+  seastar::file &device,
+  uint32_t nr_zones)
+{
+  return seastar::do_with(
+    ZoneReport(nr_zones),
+    [&](auto &zr) {
+        zr.hdr->sector = 0;
+        zr.hdr->nr_zones = nr_zones;
+       return device.ioctl(
+          BLKREPORTZONE,
+          zr.hdr
+        ).then([&](int ret) {
+       return seastar::make_ready_future<size_t>(zr.hdr->zones[0].capacity);
+      });
+    }
+  );
+}
+
+// get the number of conventional zones of SMR HDD,
+// they are randomly writable and don't respond to zone operations
+static seastar::future<size_t> get_nr_cnv_zones(
+  seastar::file &device,
+  uint32_t nr_zones)
+{
+  return seastar::do_with(
+    ZoneReport(nr_zones),
+    [&](auto &zr) {
+      zr.hdr->sector = 0;
+      zr.hdr->nr_zones = nr_zones;
+      return device.ioctl(
+       BLKREPORTZONE,
+        zr.hdr
+      ).then([&, nr_zones](int ret) {
+        size_t cnv_zones = 0;
+       for (uint32_t i = 0; i < nr_zones; i++) {
+         if (zr.hdr->zones[i].type == BLK_ZONE_TYPE_CONVENTIONAL)
+           cnv_zones++;
+       }
+       return seastar::make_ready_future<size_t>(cnv_zones);
+      });
+    }
+  );
+}
+
+
+static write_ertr::future<> do_write(
+  seastar::file &device,
+  uint64_t offset,
+  bufferptr &bptr)
+{
+  LOG_PREFIX(ZBDSegmentManager::do_write);
+  DEBUG("offset {} len {}",
+    offset,
+    bptr.length());
+  return device.dma_write(
+    offset,
+    bptr.c_str(),
+    bptr.length() 
+  ).handle_exception(
+    [FNAME](auto e) -> write_ertr::future<size_t> {
+      ERROR("dma_write got error {}",
+        e);
+      return crimson::ct_error::input_output_error::make();
+    }
+  ).then([length = bptr.length()](auto result) -> write_ertr::future<> {
+    if (result != length) {
+      return crimson::ct_error::input_output_error::make();
+    }
+    return write_ertr::now();
+  });
+}
+
+static write_ertr::future<> do_writev(
+  device_id_t device_id,
+  seastar::file &device,
+  uint64_t offset,
+  bufferlist&& bl,
+  size_t block_size)
+{
+  LOG_PREFIX(ZBDSegmentManager::do_writev);
+  DEBUG("{} offset {} len {}",
+    device_id_printer_t{device_id}, offset, bl.length());
+  // writev requires each buffer to be aligned to the disks' block
+  // size, we need to rebuild here
+  bl.rebuild_aligned(block_size);
+  
+  return seastar::do_with(
+    bl.prepare_iovs(),
+    std::move(bl),
+    [&device, device_id, offset, FNAME](auto& iovs, auto& bl)
+  {
+    return write_ertr::parallel_for_each(
+      iovs,
+      [&device, device_id, offset, FNAME](auto& p)
+    {
+      auto off = offset + p.offset;
+      auto len = p.length;
+      auto& iov = p.iov;
+      DEBUG("{} poffset={}~{} dma_write ...",
+           device_id_printer_t{device_id},
+            off, len);
+      return device.dma_write(off, std::move(iov)
+      ).handle_exception(
+        [FNAME, device_id, off, len](auto e) -> write_ertr::future<size_t>
+      {
+        ERROR("{} poffset={}~{} dma_write got error -- {}",
+             device_id_printer_t{device_id}, off, len, e);
+        return crimson::ct_error::input_output_error::make();
+      }).then([FNAME, device_id, off, len](size_t written) -> write_ertr::future<> {
+        if (written != len) {
+          ERROR("{} poffset={}~{} dma_write len={} inconsistent",
+               device_id_printer_t{device_id}, off, len, written);
+          return crimson::ct_error::input_output_error::make();
+        }
+        DEBUG("{} poffset={}~{} dma_write done",
+             device_id_printer_t{device_id},
+              off, len);
+        return write_ertr::now();
+      });
+    });
+  });
+}
+
+static ZBDSegmentManager::access_ertr::future<>
+write_metadata(seastar::file &device, zbd_sm_metadata_t sb)
+{
+  assert(ceph::encoded_sizeof_bounded<zbd_sm_metadata_t>() <
+        sb.block_size);
+  return seastar::do_with(
+    bufferptr(ceph::buffer::create_page_aligned(sb.block_size)),
+    [=, &device](auto &bp) {
+      LOG_PREFIX(ZBDSegmentManager::write_metadata);
+      DEBUG("block_size {}", sb.block_size);
+      bufferlist bl;
+      encode(sb, bl);
+      auto iter = bl.begin();
+      assert(bl.length() < sb.block_size);
+      DEBUG("buffer length {}", bl.length());
+      iter.copy(bl.length(), bp.c_str());
+      DEBUG("doing writeout");
+      return do_write(device, 0, bp);
+    });
+}
+
+static read_ertr::future<> do_read(
+  seastar::file &device,
+  uint64_t offset,
+  size_t len,
+  bufferptr &bptr)
+{
+  LOG_PREFIX(ZBDSegmentManager::do_read);
+  assert(len <= bptr.length());
+  DEBUG("offset {} len {}",
+    offset,
+    len);
+  return device.dma_read(
+    offset,
+    bptr.c_str(),
+    len
+  ).handle_exception(
+    [FNAME](auto e) -> read_ertr::future<size_t> {
+      ERROR("dma_read got error {}",
+        e);
+      return crimson::ct_error::input_output_error::make();
+    }
+  ).then([len](auto result) -> read_ertr::future<> {
+    if (result != len) {
+      return crimson::ct_error::input_output_error::make();
+    }
+    return read_ertr::now();
+  });
+}
+
+static
+ZBDSegmentManager::access_ertr::future<zbd_sm_metadata_t>
+read_metadata(seastar::file &device, seastar::stat_data sd)
+{
+  assert(ceph::encoded_sizeof_bounded<zbd_sm_metadata_t>() <
+        sd.block_size);
+  return seastar::do_with(
+    bufferptr(ceph::buffer::create_page_aligned(sd.block_size)),
+    [=, &device](auto &bp) {
+      return do_read(
+       device,
+       0,
+       bp.length(),
+       bp
+      ).safe_then([=, &bp] {
+       bufferlist bl;
+       bl.push_back(bp);
+       zbd_sm_metadata_t ret;
+       auto bliter = bl.cbegin();
+       decode(ret, bliter);
+        ret.validate();
+       return ZBDSegmentManager::access_ertr::future<zbd_sm_metadata_t>(
+         ZBDSegmentManager::access_ertr::ready_future_marker{},
+         ret);
+      });
+    });
+}
+
+ZBDSegmentManager::mount_ret ZBDSegmentManager::mount()
+{
+  return shard_devices.invoke_on_all([](auto &local_device) {
+    return local_device.shard_mount(
+    ).handle_error(
+      crimson::ct_error::assert_all{
+        "Invalid error in ZBDSegmentManager::mount"
+    });
+  });
+}
+
+ZBDSegmentManager::mount_ret ZBDSegmentManager::shard_mount()
+{
+  return open_device(
+    device_path, seastar::open_flags::rw
+  ).safe_then([=, this](auto p) {
+    device = std::move(p.first);
+    auto sd = p.second;
+    return read_metadata(device, sd);
+  }).safe_then([=, this](auto meta){
+    shard_info = meta.shard_infos[seastar::this_shard_id()];
+    metadata = meta;
+    return mount_ertr::now();
+  });
+}
+
+ZBDSegmentManager::mkfs_ret ZBDSegmentManager::mkfs(
+  device_config_t config)
+{
+  return shard_devices.local().primary_mkfs(config
+    ).safe_then([this] {
+    return shard_devices.invoke_on_all([](auto &local_device) {
+      return local_device.shard_mkfs(
+      ).handle_error(
+        crimson::ct_error::assert_all{
+          "Invalid error in ZBDSegmentManager::mkfs"
+      });
+    });
+  });
+}
+
+ZBDSegmentManager::mkfs_ret ZBDSegmentManager::primary_mkfs(
+  device_config_t config)
+{
+  LOG_PREFIX(ZBDSegmentManager::primary_mkfs);
+  INFO("starting, device_path {}", device_path);
+  return seastar::do_with(
+    seastar::file{},
+    seastar::stat_data{},
+    zbd_sm_metadata_t{},
+    size_t(),
+    size_t(),
+    size_t(),
+    size_t(),
+    [=, this]
+    (auto &device,
+     auto &stat,
+     auto &sb,
+     auto &zone_size_sects,
+     auto &nr_zones,
+     auto &size,
+     auto &nr_cnv_zones) {
+      return open_device(
+       device_path,
+       seastar::open_flags::rw
+      ).safe_then([=, this, &device, &stat, &sb, &zone_size_sects, &nr_zones, &size, &nr_cnv_zones](auto p) {
+       device = p.first;
+       stat = p.second;
+       return device.ioctl(
+         BLKGETNRZONES,
+         (void *)&nr_zones
+       ).then([&](int ret) {
+         if (nr_zones == 0) {
+           return seastar::make_exception_future<int>(
+             std::system_error(std::make_error_code(std::errc::io_error)));
+         }
+         return device.ioctl(BLKGETZONESZ, (void *)&zone_size_sects);
+       }).then([&](int ret) {
+          ceph_assert(zone_size_sects);
+         return reset_device(device, zone_size_sects, nr_zones);
+        }).then([&] {
+          return get_blk_dev_size(device);
+       }).then([&](auto devsize) {
+          size = devsize;
+         return get_nr_cnv_zones(device, nr_zones);
+       }).then([&](auto cnv_zones) {
+         DEBUG("Found {} conventional zones", cnv_zones);
+         nr_cnv_zones = cnv_zones;
+         return get_zone_capacity(device, nr_zones);
+       }).then([&, FNAME, config](auto zone_capacity_sects) {
+          ceph_assert(zone_capacity_sects);
+          DEBUG("zone_size in sectors {}, zone_capacity in sectors {}",
+                zone_size_sects, zone_capacity_sects);
+         sb = make_metadata(
+            size,
+           config.meta,
+           stat,
+           zone_size_sects,
+           zone_capacity_sects,
+           nr_cnv_zones,
+           nr_zones);
+         metadata = sb;
+         stats.metadata_write.increment(
+           ceph::encoded_sizeof_bounded<zbd_sm_metadata_t>());
+         DEBUG("Wrote to stats.");
+         return write_metadata(device, sb);
+       }).finally([&, FNAME] {
+         DEBUG("Closing device.");
+         return device.close(); 
+       }).safe_then([FNAME] {
+         DEBUG("Returning from mkfs.");
+         return mkfs_ertr::now();
+       });
+      });
+    });
+}
+
+ZBDSegmentManager::mkfs_ret ZBDSegmentManager::shard_mkfs()
+{
+  LOG_PREFIX(ZBDSegmentManager::shard_mkfs);
+  INFO("starting, device_path {}", device_path);
+  return open_device(
+    device_path, seastar::open_flags::rw
+  ).safe_then([=, this](auto p) {
+    device = std::move(p.first);
+    auto sd = p.second;
+    return read_metadata(device, sd);
+  }).safe_then([=, this](auto meta){
+    shard_info = meta.shard_infos[seastar::this_shard_id()];
+    metadata = meta;
+    return device.close();
+  }).safe_then([FNAME] {
+    DEBUG("Returning from shard_mkfs.");
+    return mkfs_ertr::now();
+  });
+}
+
+// Return range of sectors to operate on.
+struct blk_zone_range make_range(
+  segment_id_t id,
+  size_t segment_size,
+  size_t first_segment_offset)
+{
+  return blk_zone_range{
+    (id.device_segment_id() * (segment_size >> SECT_SHIFT)
+                           + (first_segment_offset >> SECT_SHIFT)),
+    (segment_size >> SECT_SHIFT)
+  };
+}
+
+using blk_zone_op_ertr = crimson::errorator<
+  crimson::ct_error::input_output_error>;
+using blk_zone_op_ret = blk_zone_op_ertr::future<>;
+blk_zone_op_ret blk_zone_op(seastar::file &device,
+                           blk_zone_range &range,
+                           zone_op op) {
+  LOG_PREFIX(ZBDSegmentManager::blk_zone_op);
+
+  unsigned long ioctl_op = 0;
+  switch (op) {
+    using enum zone_op;
+    case OPEN:
+      ioctl_op = BLKOPENZONE;
+      break;
+    case FINISH:
+      ioctl_op = BLKFINISHZONE;
+      break;
+    case RESET:
+      ioctl_op = BLKRESETZONE;
+      break;
+    case CLOSE:
+      ioctl_op = BLKCLOSEZONE;
+      break;
+    default:
+      ERROR("Invalid zone operation {}", op);
+      ceph_assert(ioctl_op);
+  }
+
+  return device.ioctl(
+    ioctl_op,
+    &range
+  ).then_wrapped([=](auto f) -> blk_zone_op_ret {
+    if (f.failed()) {
+      ERROR("{} ioctl failed", op);
+      return crimson::ct_error::input_output_error::make();
+    } else {
+      int ret = f.get();
+      if (ret == 0) {
+       return seastar::now();
+      } else {
+        ERROR("{} ioctl failed with return code {}", op, ret);
+       return crimson::ct_error::input_output_error::make();
+      }
+    }
+  });
+}
+
+ZBDSegmentManager::open_ertr::future<SegmentRef> ZBDSegmentManager::open(
+  segment_id_t id)
+{
+  LOG_PREFIX(ZBDSegmentManager::open);
+  return seastar::do_with(
+    blk_zone_range{},
+    [=, this](auto &range) {
+      range = make_range(
+       id,
+       metadata.segment_size,
+        shard_info.first_segment_offset);
+      return blk_zone_op(
+       device,
+       range,
+       zone_op::OPEN
+      );
+    }
+  ).safe_then([=, this] {
+    DEBUG("segment {}, open successful", id);
+    return open_ertr::future<SegmentRef>(
+      open_ertr::ready_future_marker{},
+      SegmentRef(new ZBDSegment(*this, id))
+    );
+  });
+}
+
+ZBDSegmentManager::release_ertr::future<> ZBDSegmentManager::release(
+  segment_id_t id) 
+{
+  LOG_PREFIX(ZBDSegmentManager::release);
+  DEBUG("Resetting zone/segment {}", id);
+  return seastar::do_with(
+    blk_zone_range{},
+    [=, this](auto &range) {
+      range = make_range(
+       id,
+       metadata.segment_size,
+        shard_info.first_segment_offset);
+      return blk_zone_op(
+       device,
+       range,
+       zone_op::RESET
+      );
+    }
+  ).safe_then([=] {
+    DEBUG("segment release successful");
+    return release_ertr::now();
+  });
+}
+
+SegmentManager::read_ertr::future<> ZBDSegmentManager::read(
+  paddr_t addr,
+  size_t len,
+  ceph::bufferptr &out)
+{
+  LOG_PREFIX(ZBDSegmentManager::read);
+  auto& seg_addr = addr.as_seg_paddr();
+  if (seg_addr.get_segment_id().device_segment_id() >= get_num_segments()) {
+    ERROR("invalid segment {}",
+      seg_addr.get_segment_id().device_segment_id());
+    return crimson::ct_error::invarg::make();
+  }
+  
+  if (seg_addr.get_segment_off() + len > metadata.segment_capacity) {
+    ERROR("invalid read offset {}, len {}",
+      addr,
+      len);
+    return crimson::ct_error::invarg::make();
+  }
+  return do_read(
+    device,
+    get_offset(addr),
+    len,
+    out);
+}
+
+Segment::close_ertr::future<> ZBDSegmentManager::segment_close(
+  segment_id_t id, segment_off_t write_pointer)
+{
+  LOG_PREFIX(ZBDSegmentManager::segment_close);
+  return seastar::do_with(
+    blk_zone_range{},
+    [=, this](auto &range) {
+      range = make_range(
+       id,
+       metadata.segment_size,
+        shard_info.first_segment_offset);
+      return blk_zone_op(
+       device,
+       range,
+       zone_op::FINISH
+      );
+    }
+  ).safe_then([=] {
+    DEBUG("zone finish successful");
+    return Segment::close_ertr::now();
+  });
+}
+
+Segment::write_ertr::future<> ZBDSegmentManager::segment_write(
+  paddr_t addr,
+  ceph::bufferlist bl,
+  bool ignore_check)
+{
+  LOG_PREFIX(ZBDSegmentManager::segment_write);
+  assert(addr.get_device_id() == get_device_id());
+  assert((bl.length() % metadata.block_size) == 0);
+  auto& seg_addr = addr.as_seg_paddr();
+  DEBUG("write to segment {} at offset {}, physical offset {}, len {}",
+    seg_addr.get_segment_id(),
+    seg_addr.get_segment_off(),
+    get_offset(addr),
+    bl.length());
+  stats.data_write.increment(bl.length());
+  return do_writev(
+    get_device_id(),
+    device, 
+    get_offset(addr), 
+    std::move(bl), 
+    metadata.block_size);
+}
+
+device_id_t ZBDSegmentManager::get_device_id() const
+{
+  return metadata.device_id;
+};
+
+secondary_device_set_t& ZBDSegmentManager::get_secondary_devices()
+{
+  return metadata.secondary_devices;
+};
+
+magic_t ZBDSegmentManager::get_magic() const
+{
+  return metadata.magic;
+};
+
+segment_off_t ZBDSegment::get_write_capacity() const
+{
+  return manager.get_segment_size();
+}
+
+SegmentManager::close_ertr::future<> ZBDSegmentManager::close()
+{
+  if (device) {
+    return device.close();
+  }
+  return seastar::now();
+}
+
+Segment::close_ertr::future<> ZBDSegment::close()
+{
+  return manager.segment_close(id, write_pointer);
+}
+
+Segment::write_ertr::future<> ZBDSegment::write(
+  segment_off_t offset, ceph::bufferlist bl)
+{
+  LOG_PREFIX(ZBDSegment::write);
+  if (offset != write_pointer || offset % manager.metadata.block_size != 0) {
+    ERROR("Segment offset and zone write pointer mismatch. "
+          "segment {} segment-offset {} write pointer {}",
+          id, offset, write_pointer);
+    return crimson::ct_error::invarg::make();
+  }
+  if (offset + bl.length() > manager.metadata.segment_capacity) {
+    return crimson::ct_error::enospc::make();
+  }
+  
+  write_pointer = offset + bl.length();
+  return manager.segment_write(paddr_t::make_seg_paddr(id, offset), bl);
+}
+
+Segment::write_ertr::future<> ZBDSegment::write_padding_bytes(
+  size_t padding_bytes)
+{
+  LOG_PREFIX(ZBDSegment::write_padding_bytes);
+  DEBUG("Writing {} padding bytes to segment {} at wp {}",
+        padding_bytes, id, write_pointer);
+
+  return crimson::repeat([FNAME, padding_bytes, this] () mutable {
+    size_t bufsize = 0;
+    if (padding_bytes >= MAX_PADDING_SIZE) {
+      bufsize = MAX_PADDING_SIZE;
+    } else {
+      bufsize = padding_bytes;
+    }
+
+    padding_bytes -= bufsize;
+    bufferptr bp(ceph::buffer::create_page_aligned(bufsize));
+    bp.zero();
+    bufferlist padd_bl;
+    padd_bl.append(bp);
+    return write(write_pointer, padd_bl).safe_then([FNAME, padding_bytes, this]() {
+      if (padding_bytes == 0) {
+        return write_ertr::make_ready_future<seastar::stop_iteration>(seastar::stop_iteration::yes);
+      } else {
+        return write_ertr::make_ready_future<seastar::stop_iteration>(seastar::stop_iteration::no);
+      }
+    });
+  });
+}
+
+// Advance write pointer, to given offset.
+Segment::write_ertr::future<> ZBDSegment::advance_wp(
+  segment_off_t offset)
+{
+  LOG_PREFIX(ZBDSegment::advance_wp);
+
+  DEBUG("Advancing write pointer from {} to {}", write_pointer, offset);
+  if (offset < write_pointer) {
+    return crimson::ct_error::invarg::make();
+  }
+
+  size_t padding_bytes = offset - write_pointer;
+
+  if (padding_bytes == 0) {
+    return write_ertr::now();
+  }
+
+  assert(padding_bytes % manager.metadata.block_size == 0);
+
+  return write_padding_bytes(padding_bytes);
+}
+
+}
diff --git a/ceph/src/crimson/os/seastore/segment_manager/zbd.h b/ceph/src/crimson/os/seastore/segment_manager/zbd.h
new file mode 100644 (file)
index 0000000..c18f463
--- /dev/null
@@ -0,0 +1,246 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+#pragma once
+
+#include <linux/blkzoned.h>
+
+#include <boost/intrusive_ptr.hpp>
+#include <boost/smart_ptr/intrusive_ref_counter.hpp>
+
+#include <seastar/core/file.hh>
+#include <seastar/core/future.hh>
+#include <seastar/core/reactor.hh>
+
+#include "crimson/common/layout.h"
+
+#include "crimson/os/seastore/segment_manager.h"
+
+#include "include/uuid.h"
+
+namespace crimson::os::seastore::segment_manager::zbd {
+
+  struct zbd_shard_info_t {
+    size_t size = 0;
+    size_t segments = 0;
+    size_t first_segment_offset = 0;
+
+    DENC(zbd_shard_info_t, v, p) {
+      DENC_START(1, 1, p);
+      denc(v.size, p);
+      denc(v.segments, p);
+      denc(v.first_segment_offset, p);
+      DENC_FINISH(p);
+    }
+  };
+
+  struct zbd_sm_metadata_t {
+    unsigned int shard_num = 0;
+    size_t segment_size = 0;
+    size_t segment_capacity = 0;
+    size_t zones_per_segment = 0;
+    size_t zone_capacity = 0;
+    size_t block_size = 0;
+    size_t zone_size = 0;
+
+    std::vector<zbd_shard_info_t> shard_infos;
+
+    seastore_meta_t meta;
+    
+    bool major_dev = false;
+    magic_t magic = 0;
+    device_type_t dtype = device_type_t::NONE;
+    device_id_t device_id = 0;
+    secondary_device_set_t secondary_devices;
+
+    DENC(zbd_sm_metadata_t, v, p) {
+      DENC_START(1, 1, p);
+      denc(v.shard_num, p);
+      denc(v.segment_size, p);
+      denc(v.segment_capacity, p);
+      denc(v.zones_per_segment, p);
+      denc(v.zone_capacity, p);
+      denc(v.block_size, p);
+      denc(v.zone_size, p);
+      denc(v.shard_infos, p);
+      denc(v.meta, p);
+      denc(v.magic, p);
+      denc(v.dtype, p);
+      denc(v.device_id, p);
+      if (v.major_dev) {
+       denc(v.secondary_devices, p);
+      }
+      DENC_FINISH(p);
+    }
+
+    void validate() const {
+      ceph_assert_always(shard_num == seastar::smp::count);
+      for (unsigned int i = 0; i < seastar::smp::count; i++) {
+        ceph_assert_always(shard_infos[i].size > 0);
+        ceph_assert_always(shard_infos[i].size <= DEVICE_OFF_MAX);
+        ceph_assert_always(shard_infos[i].segments > 0);
+        ceph_assert_always(shard_infos[i].segments <= DEVICE_SEGMENT_ID_MAX);
+      }
+      ceph_assert_always(segment_capacity > 0);
+      ceph_assert_always(segment_capacity <= SEGMENT_OFF_MAX);
+    }
+  };
+
+  using write_ertr = crimson::errorator<crimson::ct_error::input_output_error>;
+  using read_ertr = crimson::errorator<crimson::ct_error::input_output_error>;
+
+  enum class zone_op {
+    OPEN,
+    FINISH,
+    CLOSE,
+    RESET,
+  };
+
+  class ZBDSegmentManager;
+
+  class ZBDSegment final : public Segment {
+  public:
+    ZBDSegment(ZBDSegmentManager &man, segment_id_t i) : manager(man), id(i){};
+
+    segment_id_t get_segment_id() const final { return id; }
+    segment_off_t get_write_capacity() const final;
+    segment_off_t get_write_ptr() const final { return write_pointer; }
+    close_ertr::future<> close() final;
+    write_ertr::future<> write(segment_off_t offset, ceph::bufferlist bl) final;
+    write_ertr::future<> advance_wp(segment_off_t offset) final;
+
+    ~ZBDSegment() {}
+  private:
+    friend class ZBDSegmentManager;
+    ZBDSegmentManager &manager;
+    const segment_id_t id;
+    segment_off_t write_pointer = 0;
+    write_ertr::future<> write_padding_bytes(size_t padding_bytes);
+  };
+
+  class ZBDSegmentManager final : public SegmentManager{
+  // interfaces used by Device
+  public:
+    seastar::future<> start() {
+      return shard_devices.start(device_path);
+    }
+
+    seastar::future<> stop() {
+      return shard_devices.stop();
+    }
+
+    Device& get_sharded_device() final {
+      return shard_devices.local();
+    }
+
+    mount_ret mount() final;
+    mkfs_ret mkfs(device_config_t meta) final;
+
+    ZBDSegmentManager(const std::string &path) : device_path(path) {}
+
+    ~ZBDSegmentManager() final = default;
+
+  //interfaces used by each shard device
+  public:
+    open_ertr::future<SegmentRef> open(segment_id_t id) final;
+    close_ertr::future<> close() final;
+
+    release_ertr::future<> release(segment_id_t id) final;
+
+    read_ertr::future<> read(
+      paddr_t addr, 
+      size_t len, 
+      ceph::bufferptr &out) final;
+
+    device_type_t get_device_type() const final {
+      return device_type_t::ZBD;
+    }
+
+    size_t get_available_size() const final {
+      return shard_info.size;
+    };
+
+    extent_len_t get_block_size() const final {
+      return metadata.block_size;
+    };
+
+    segment_off_t get_segment_size() const final {
+      return metadata.segment_capacity;
+    };
+
+    const seastore_meta_t &get_meta() const {
+      return metadata.meta;
+    };
+
+    device_id_t get_device_id() const final;
+
+    secondary_device_set_t& get_secondary_devices() final;
+
+    magic_t get_magic() const final;
+
+    Segment::write_ertr::future<> segment_write(
+    paddr_t addr,
+    ceph::bufferlist bl,
+    bool ignore_check=false);
+
+  private:
+    friend class ZBDSegment;
+    std::string device_path;
+    zbd_shard_info_t shard_info;
+    zbd_sm_metadata_t metadata;
+    seastar::file device;
+    uint32_t nr_zones;
+    struct effort_t {
+      uint64_t num = 0;
+      uint64_t bytes = 0;
+
+      void increment(uint64_t read_bytes) {
+        ++num;
+        bytes += read_bytes;
+      }
+    };
+
+    struct zbd_sm_stats {
+      effort_t data_read = {};
+      effort_t data_write = {};
+      effort_t metadata_write = {};
+      uint64_t opened_segments = 0;
+      uint64_t closed_segments = 0;
+      uint64_t closed_segments_unused_bytes = 0;
+      uint64_t released_segments = 0;
+
+      void reset() {
+       *this = zbd_sm_stats{};
+      }
+    } stats;
+
+    void register_metrics();
+    seastar::metrics::metric_group metrics;
+
+    Segment::close_ertr::future<> segment_close(
+      segment_id_t id, segment_off_t write_pointer);
+
+    uint64_t get_offset(paddr_t addr) {
+      auto& seg_addr = addr.as_seg_paddr();
+      return (shard_info.first_segment_offset +
+             (seg_addr.get_segment_id().device_segment_id() * 
+              metadata.segment_size)) + seg_addr.get_segment_off();
+    }
+  private:
+    // shard 0 mkfs
+    mkfs_ret primary_mkfs(device_config_t meta);
+    // all shards mkfs
+    mkfs_ret shard_mkfs();
+
+    mount_ret shard_mount();
+
+    seastar::sharded<ZBDSegmentManager> shard_devices;
+  };
+
+}
+
+WRITE_CLASS_DENC_BOUNDED(
+  crimson::os::seastore::segment_manager::zbd::zbd_shard_info_t
+)
+WRITE_CLASS_DENC_BOUNDED(
+  crimson::os::seastore::segment_manager::zbd::zbd_sm_metadata_t
+)
diff --git a/ceph/src/crimson/os/seastore/segment_manager/zns.cc b/ceph/src/crimson/os/seastore/segment_manager/zns.cc
deleted file mode 100644 (file)
index deaaadf..0000000
+++ /dev/null
@@ -1,750 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-
-#include <sys/mman.h>
-#include <string.h>
-#include <linux/blkzoned.h>
-
-#include <fmt/format.h>
-#include "crimson/os/seastore/segment_manager/zns.h"
-#include "crimson/common/config_proxy.h"
-#include "crimson/os/seastore/logging.h"
-#include "include/buffer.h"
-
-SET_SUBSYS(seastore_device);
-
-#define SECT_SHIFT     9
-#define RESERVED_ZONES         1
-// limit the max padding buf size to 1MB
-#define MAX_PADDING_SIZE 1048576
-
-using z_op = crimson::os::seastore::segment_manager::zns::zone_op;
-template <> struct fmt::formatter<z_op>: fmt::formatter<std::string_view> {
-  template <typename FormatContext>
-  auto format(z_op s, FormatContext& ctx) {
-    std::string_view name = "Unknown";
-    switch (s) {
-      using enum z_op;
-        case OPEN:
-          name = "BLKOPENZONE";
-          break;
-        case FINISH:
-          name = "BLKFINISHZONE";
-          break;
-        case CLOSE:
-          name = "BLKCLOSEZONE";
-          break;
-        case RESET:
-          name = "BLKRESETZONE";
-          break;
-    }
-    return formatter<string_view>::format(name, ctx);
-  }
-};
-
-namespace crimson::os::seastore::segment_manager::zns {
-
-using open_device_ret = ZNSSegmentManager::access_ertr::future<
-  std::pair<seastar::file, seastar::stat_data>>;
-static open_device_ret open_device(
-  const std::string &path,
-  seastar::open_flags mode)
-{
-  LOG_PREFIX(ZNSSegmentManager::open_device);
-  return seastar::file_stat(
-    path, seastar::follow_symlink::yes
-  ).then([FNAME, mode, &path](auto stat) mutable {
-    return seastar::open_file_dma(path, mode).then([=](auto file) {
-       DEBUG("open of device {} successful, size {}",
-        path,
-        stat.size);
-      return std::make_pair(file, stat);
-    });
-  }).handle_exception(
-    [FNAME](auto e) -> open_device_ret {
-       ERROR("got error {}",
-       e);
-      return crimson::ct_error::input_output_error::make();
-    }
-  );
-}
-
-static zns_sm_metadata_t make_metadata(
-  uint64_t total_size,
-  seastore_meta_t meta,
-  const seastar::stat_data &data,
-  size_t zone_size_sectors,
-  size_t zone_capacity_sectors,
-  size_t num_zones)
-{
-  LOG_PREFIX(ZNSSegmentManager::make_metadata);
-
-  // TODO: support Option::size_t seastore_segment_size
-  // to allow zones_per_segment > 1 with striping.
-  size_t zone_size = zone_size_sectors << SECT_SHIFT;
-  size_t zone_capacity = zone_capacity_sectors << SECT_SHIFT;
-  size_t segment_size = zone_size;
-  size_t zones_per_segment = segment_size / zone_size;
-  size_t segments = (num_zones - RESERVED_ZONES) / zones_per_segment;
-  size_t per_shard_segments = segments / seastar::smp::count;
-  size_t available_size = zone_capacity * segments;
-  size_t per_shard_available_size = zone_capacity * per_shard_segments;
-  std::vector<zns_shard_info_t> shard_infos(seastar::smp::count);
-  for (unsigned int i = 0; i < seastar::smp::count; i++) {
-    shard_infos[i].size = per_shard_available_size;
-    shard_infos[i].segments = per_shard_segments;
-    shard_infos[i].first_segment_offset = zone_size * RESERVED_ZONES
-      + i * segment_size* per_shard_segments;
-  }
-
-  assert(total_size == num_zones * zone_size);
-
-  WARN("Ignoring configuration values for device and segment size");
-  INFO(
-    "device size {}, available_size {}, block_size {}, allocated_size {},"
-    " total zones {}, zone_size {}, zone_capacity {},"
-    " total segments {}, zones per segment {}, segment size {}",
-    total_size,
-    available_size,
-    data.block_size,
-    data.allocated_size,
-    num_zones,
-    zone_size,
-    zone_capacity,
-    segments,
-    zones_per_segment,
-    zone_capacity * zones_per_segment);
-
-  zns_sm_metadata_t ret = zns_sm_metadata_t{
-    seastar::smp::count,
-    segment_size,
-    zone_capacity * zones_per_segment,
-    zones_per_segment,
-    zone_capacity,
-    data.block_size,
-    zone_size,
-    shard_infos,
-    meta};
-  ret.validate();
-  return ret;
-}
-
-struct ZoneReport {
-  struct blk_zone_report *hdr;
-  ZoneReport(int nr_zones) 
-    : hdr((blk_zone_report *)malloc(
-           sizeof(struct blk_zone_report) + nr_zones * sizeof(struct blk_zone))){;}
-  ~ZoneReport(){
-    free(hdr);
-  }
-  ZoneReport(const ZoneReport &) = delete;
-  ZoneReport(ZoneReport &&rhs) : hdr(rhs.hdr) {
-    rhs.hdr = nullptr;
-  }
-};
-
-static seastar::future<size_t> get_blk_dev_size(
-  seastar::file &device)
-{
-  return seastar::do_with(
-    (uint64_t)0,
-    [&](auto& size_sects) {
-      return device.ioctl(
-        BLKGETSIZE,
-       (void *)&size_sects
-      ).then([&](int ret) {
-        ceph_assert(size_sects);
-        size_t size = size_sects << SECT_SHIFT;
-       return seastar::make_ready_future<size_t>(size);
-      });
-  });
-}
-
-// zone_size should be in 512B sectors
-static seastar::future<> reset_device(
-  seastar::file &device,
-  uint64_t zone_size_sects,
-  uint64_t nr_zones)
-{
-  return seastar::do_with(
-    blk_zone_range{},
-    [&, nr_zones, zone_size_sects](auto &range) {
-      range.sector = 0;
-      range.nr_sectors = zone_size_sects * nr_zones;
-      return device.ioctl(
-       BLKRESETZONE, 
-       &range
-      ).then([&](int ret){
-       return seastar::now();
-      });
-    }
-  );
-}
-
-static seastar::future<size_t> get_zone_capacity(
-  seastar::file &device,
-  uint32_t nr_zones)
-{
-  return seastar::do_with(
-    ZoneReport(nr_zones),
-    [&](auto &zr) {
-        zr.hdr->sector = 0;
-        zr.hdr->nr_zones = nr_zones;
-       return device.ioctl(
-          BLKREPORTZONE,
-          zr.hdr
-        ).then([&](int ret) {
-       return seastar::make_ready_future<size_t>(zr.hdr->zones[0].capacity);
-      });
-    }
-  );
-}
-
-static write_ertr::future<> do_write(
-  seastar::file &device,
-  uint64_t offset,
-  bufferptr &bptr)
-{
-  LOG_PREFIX(ZNSSegmentManager::do_write);
-  DEBUG("offset {} len {}",
-    offset,
-    bptr.length());
-  return device.dma_write(
-    offset,
-    bptr.c_str(),
-    bptr.length() 
-  ).handle_exception(
-    [FNAME](auto e) -> write_ertr::future<size_t> {
-      ERROR("dma_write got error {}",
-        e);
-      return crimson::ct_error::input_output_error::make();
-    }
-  ).then([length = bptr.length()](auto result) -> write_ertr::future<> {
-    if (result != length) {
-      return crimson::ct_error::input_output_error::make();
-    }
-    return write_ertr::now();
-  });
-}
-
-static write_ertr::future<> do_writev(
-  seastar::file &device,
-  uint64_t offset,
-  bufferlist&& bl,
-  size_t block_size)
-{
-  LOG_PREFIX(ZNSSegmentManager::do_writev);
-  DEBUG("offset {} len {}",
-    offset,
-    bl.length());
-  // writev requires each buffer to be aligned to the disks' block
-  // size, we need to rebuild here
-  bl.rebuild_aligned(block_size);
-  
-  std::vector<iovec> iov;
-  bl.prepare_iov(&iov);
-  return device.dma_write(
-    offset,
-    std::move(iov)
-  ).handle_exception(
-    [FNAME](auto e) -> write_ertr::future<size_t> {
-      ERROR("dma_write got error {}",
-       e);
-      return crimson::ct_error::input_output_error::make();
-    }
-  ).then([bl=std::move(bl)/* hold the buf until the end of io */](size_t written)
-        -> write_ertr::future<> {
-    if (written != bl.length()) {
-      return crimson::ct_error::input_output_error::make();
-    }
-    return write_ertr::now();
-  });
-}
-
-static ZNSSegmentManager::access_ertr::future<>
-write_metadata(seastar::file &device, zns_sm_metadata_t sb)
-{
-  assert(ceph::encoded_sizeof_bounded<zns_sm_metadata_t>() <
-        sb.block_size);
-  return seastar::do_with(
-    bufferptr(ceph::buffer::create_page_aligned(sb.block_size)),
-    [=, &device](auto &bp) {
-      LOG_PREFIX(ZNSSegmentManager::write_metadata);
-      DEBUG("block_size {}", sb.block_size);
-      bufferlist bl;
-      encode(sb, bl);
-      auto iter = bl.begin();
-      assert(bl.length() < sb.block_size);
-      DEBUG("buffer length {}", bl.length());
-      iter.copy(bl.length(), bp.c_str());
-      DEBUG("doing writeout");
-      return do_write(device, 0, bp);
-    });
-}
-
-static read_ertr::future<> do_read(
-  seastar::file &device,
-  uint64_t offset,
-  size_t len,
-  bufferptr &bptr)
-{
-  LOG_PREFIX(ZNSSegmentManager::do_read);
-  assert(len <= bptr.length());
-  DEBUG("offset {} len {}",
-    offset,
-    len);
-  return device.dma_read(
-    offset,
-    bptr.c_str(),
-    len
-  ).handle_exception(
-    [FNAME](auto e) -> read_ertr::future<size_t> {
-      ERROR("dma_read got error {}",
-        e);
-      return crimson::ct_error::input_output_error::make();
-    }
-  ).then([len](auto result) -> read_ertr::future<> {
-    if (result != len) {
-      return crimson::ct_error::input_output_error::make();
-    }
-    return read_ertr::now();
-  });
-}
-
-static
-ZNSSegmentManager::access_ertr::future<zns_sm_metadata_t>
-read_metadata(seastar::file &device, seastar::stat_data sd)
-{
-  assert(ceph::encoded_sizeof_bounded<zns_sm_metadata_t>() <
-        sd.block_size);
-  return seastar::do_with(
-    bufferptr(ceph::buffer::create_page_aligned(sd.block_size)),
-    [=, &device](auto &bp) {
-      return do_read(
-       device,
-       0,
-       bp.length(),
-       bp
-      ).safe_then([=, &bp] {
-       bufferlist bl;
-       bl.push_back(bp);
-       zns_sm_metadata_t ret;
-       auto bliter = bl.cbegin();
-       decode(ret, bliter);
-        ret.validate();
-       return ZNSSegmentManager::access_ertr::future<zns_sm_metadata_t>(
-         ZNSSegmentManager::access_ertr::ready_future_marker{},
-         ret);
-      });
-    });
-}
-
-ZNSSegmentManager::mount_ret ZNSSegmentManager::mount()
-{
-  return shard_devices.invoke_on_all([](auto &local_device) {
-    return local_device.shard_mount(
-    ).handle_error(
-      crimson::ct_error::assert_all{
-        "Invalid error in ZNSSegmentManager::mount"
-    });
-  });
-}
-
-ZNSSegmentManager::mount_ret ZNSSegmentManager::shard_mount()
-{
-  return open_device(
-    device_path, seastar::open_flags::rw
-  ).safe_then([=, this](auto p) {
-    device = std::move(p.first);
-    auto sd = p.second;
-    return read_metadata(device, sd);
-  }).safe_then([=, this](auto meta){
-    shard_info = meta.shard_infos[seastar::this_shard_id()];
-    metadata = meta;
-    return mount_ertr::now();
-  });
-}
-
-ZNSSegmentManager::mkfs_ret ZNSSegmentManager::mkfs(
-  device_config_t config)
-{
-  return shard_devices.local().primary_mkfs(config
-    ).safe_then([this] {
-    return shard_devices.invoke_on_all([](auto &local_device) {
-      return local_device.shard_mkfs(
-      ).handle_error(
-        crimson::ct_error::assert_all{
-          "Invalid error in ZNSSegmentManager::mkfs"
-      });
-    });
-  });
-}
-
-ZNSSegmentManager::mkfs_ret ZNSSegmentManager::primary_mkfs(
-  device_config_t config)
-{
-  LOG_PREFIX(ZNSSegmentManager::primary_mkfs);
-  INFO("starting, device_path {}", device_path);
-  return seastar::do_with(
-    seastar::file{},
-    seastar::stat_data{},
-    zns_sm_metadata_t{},
-    size_t(),
-    size_t(),
-    size_t(),
-    [=, this](auto &device, auto &stat, auto &sb, auto &zone_size_sects, auto &nr_zones, auto &size) {
-      return open_device(
-       device_path,
-       seastar::open_flags::rw
-      ).safe_then([=, this, &device, &stat, &sb, &zone_size_sects, &nr_zones, &size](auto p) {
-       device = p.first;
-       stat = p.second;
-       return device.ioctl(
-         BLKGETNRZONES,
-         (void *)&nr_zones
-       ).then([&](int ret) {
-         if (nr_zones == 0) {
-           return seastar::make_exception_future<int>(
-             std::system_error(std::make_error_code(std::errc::io_error)));
-         }
-         return device.ioctl(BLKGETZONESZ, (void *)&zone_size_sects);
-       }).then([&](int ret) {
-          ceph_assert(zone_size_sects);
-         return reset_device(device, zone_size_sects, nr_zones);
-        }).then([&] {
-          return get_blk_dev_size(device);
-       }).then([&](auto devsize) {
-          size = devsize;
-         return get_zone_capacity(device, nr_zones);
-       }).then([&, FNAME, config](auto zone_capacity_sects) {
-          ceph_assert(zone_capacity_sects);
-          DEBUG("zone_size in sectors {}, zone_capacity in sectors {}",
-                zone_size_sects, zone_capacity_sects);
-         sb = make_metadata(
-            size,
-           config.meta,
-           stat,
-           zone_size_sects,
-           zone_capacity_sects,
-           nr_zones);
-         metadata = sb;
-         stats.metadata_write.increment(
-           ceph::encoded_sizeof_bounded<zns_sm_metadata_t>());
-         DEBUG("Wrote to stats.");
-         return write_metadata(device, sb);
-       }).finally([&, FNAME] {
-         DEBUG("Closing device.");
-         return device.close(); 
-       }).safe_then([FNAME] {
-         DEBUG("Returning from mkfs.");
-         return mkfs_ertr::now();
-       });
-      });
-    });
-}
-
-ZNSSegmentManager::mkfs_ret ZNSSegmentManager::shard_mkfs()
-{
-  LOG_PREFIX(ZNSSegmentManager::shard_mkfs);
-  INFO("starting, device_path {}", device_path);
-  return open_device(
-    device_path, seastar::open_flags::rw
-  ).safe_then([=, this](auto p) {
-    device = std::move(p.first);
-    auto sd = p.second;
-    return read_metadata(device, sd);
-  }).safe_then([=, this](auto meta){
-    shard_info = meta.shard_infos[seastar::this_shard_id()];
-    metadata = meta;
-    return device.close();
-  }).safe_then([FNAME] {
-    DEBUG("Returning from shard_mkfs.");
-    return mkfs_ertr::now();
-  });
-}
-
-// Return range of sectors to operate on.
-struct blk_zone_range make_range(
-  segment_id_t id,
-  size_t segment_size,
-  size_t first_segment_offset)
-{
-  return blk_zone_range{
-    (id.device_segment_id() * (segment_size >> SECT_SHIFT)
-                           + (first_segment_offset >> SECT_SHIFT)),
-    (segment_size >> SECT_SHIFT)
-  };
-}
-
-using blk_zone_op_ertr = crimson::errorator<
-  crimson::ct_error::input_output_error>;
-using blk_zone_op_ret = blk_zone_op_ertr::future<>;
-blk_zone_op_ret blk_zone_op(seastar::file &device,
-                           blk_zone_range &range,
-                           zone_op op) {
-  LOG_PREFIX(ZNSSegmentManager::blk_zone_op);
-
-  unsigned long ioctl_op = 0;
-  switch (op) {
-    using enum zone_op;
-    case OPEN:
-      ioctl_op = BLKOPENZONE;
-      break;
-    case FINISH:
-      ioctl_op = BLKFINISHZONE;
-      break;
-    case RESET:
-      ioctl_op = BLKRESETZONE;
-      break;
-    case CLOSE:
-      ioctl_op = BLKCLOSEZONE;
-      break;
-    default:
-      ERROR("Invalid zone operation {}", op);
-      ceph_assert(ioctl_op);
-  }
-
-  return device.ioctl(
-    ioctl_op,
-    &range
-  ).then_wrapped([=](auto f) -> blk_zone_op_ret {
-    if (f.failed()) {
-      ERROR("{} ioctl failed", op);
-      return crimson::ct_error::input_output_error::make();
-    } else {
-      int ret = f.get();
-      if (ret == 0) {
-       return seastar::now();
-      } else {
-        ERROR("{} ioctl failed with return code {}", op, ret);
-       return crimson::ct_error::input_output_error::make();
-      }
-    }
-  });
-}
-
-ZNSSegmentManager::open_ertr::future<SegmentRef> ZNSSegmentManager::open(
-  segment_id_t id)
-{
-  LOG_PREFIX(ZNSSegmentManager::open);
-  return seastar::do_with(
-    blk_zone_range{},
-    [=, this](auto &range) {
-      range = make_range(
-       id,
-       metadata.segment_size,
-        shard_info.first_segment_offset);
-      return blk_zone_op(
-       device,
-       range,
-       zone_op::OPEN
-      );
-    }
-  ).safe_then([=, this] {
-    DEBUG("segment {}, open successful", id);
-    return open_ertr::future<SegmentRef>(
-      open_ertr::ready_future_marker{},
-      SegmentRef(new ZNSSegment(*this, id))
-    );
-  });
-}
-
-ZNSSegmentManager::release_ertr::future<> ZNSSegmentManager::release(
-  segment_id_t id) 
-{
-  LOG_PREFIX(ZNSSegmentManager::release);
-  DEBUG("Resetting zone/segment {}", id);
-  return seastar::do_with(
-    blk_zone_range{},
-    [=, this](auto &range) {
-      range = make_range(
-       id,
-       metadata.segment_size,
-        shard_info.first_segment_offset);
-      return blk_zone_op(
-       device,
-       range,
-       zone_op::RESET
-      );
-    }
-  ).safe_then([=] {
-    DEBUG("segment release successful");
-    return release_ertr::now();
-  });
-}
-
-SegmentManager::read_ertr::future<> ZNSSegmentManager::read(
-  paddr_t addr,
-  size_t len,
-  ceph::bufferptr &out)
-{
-  LOG_PREFIX(ZNSSegmentManager::read);
-  auto& seg_addr = addr.as_seg_paddr();
-  if (seg_addr.get_segment_id().device_segment_id() >= get_num_segments()) {
-    ERROR("invalid segment {}",
-      seg_addr.get_segment_id().device_segment_id());
-    return crimson::ct_error::invarg::make();
-  }
-  
-  if (seg_addr.get_segment_off() + len > metadata.segment_capacity) {
-    ERROR("invalid read offset {}, len {}",
-      addr,
-      len);
-    return crimson::ct_error::invarg::make();
-  }
-  return do_read(
-    device,
-    get_offset(addr),
-    len,
-    out);
-}
-
-Segment::close_ertr::future<> ZNSSegmentManager::segment_close(
-  segment_id_t id, segment_off_t write_pointer)
-{
-  LOG_PREFIX(ZNSSegmentManager::segment_close);
-  return seastar::do_with(
-    blk_zone_range{},
-    [=, this](auto &range) {
-      range = make_range(
-       id,
-       metadata.segment_size,
-        shard_info.first_segment_offset);
-      return blk_zone_op(
-       device,
-       range,
-       zone_op::FINISH
-      );
-    }
-  ).safe_then([=] {
-    DEBUG("zone finish successful");
-    return Segment::close_ertr::now();
-  });
-}
-
-Segment::write_ertr::future<> ZNSSegmentManager::segment_write(
-  paddr_t addr,
-  ceph::bufferlist bl,
-  bool ignore_check)
-{
-  LOG_PREFIX(ZNSSegmentManager::segment_write);
-  assert(addr.get_device_id() == get_device_id());
-  assert((bl.length() % metadata.block_size) == 0);
-  auto& seg_addr = addr.as_seg_paddr();
-  DEBUG("write to segment {} at offset {}, physical offset {}, len {}",
-    seg_addr.get_segment_id(),
-    seg_addr.get_segment_off(),
-    get_offset(addr),
-    bl.length());
-  stats.data_write.increment(bl.length());
-  return do_writev(
-    device, 
-    get_offset(addr), 
-    std::move(bl), 
-    metadata.block_size);
-}
-
-device_id_t ZNSSegmentManager::get_device_id() const
-{
-  return metadata.device_id;
-};
-
-secondary_device_set_t& ZNSSegmentManager::get_secondary_devices()
-{
-  return metadata.secondary_devices;
-};
-
-magic_t ZNSSegmentManager::get_magic() const
-{
-  return metadata.magic;
-};
-
-segment_off_t ZNSSegment::get_write_capacity() const
-{
-  return manager.get_segment_size();
-}
-
-SegmentManager::close_ertr::future<> ZNSSegmentManager::close()
-{
-  if (device) {
-    return device.close();
-  }
-  return seastar::now();
-}
-
-Segment::close_ertr::future<> ZNSSegment::close()
-{
-  return manager.segment_close(id, write_pointer);
-}
-
-Segment::write_ertr::future<> ZNSSegment::write(
-  segment_off_t offset, ceph::bufferlist bl)
-{
-  LOG_PREFIX(ZNSSegment::write);
-  if (offset != write_pointer || offset % manager.metadata.block_size != 0) {
-    ERROR("Segment offset and zone write pointer mismatch. "
-          "segment {} segment-offset {} write pointer {}",
-          id, offset, write_pointer);
-    return crimson::ct_error::invarg::make();
-  }
-  if (offset + bl.length() > manager.metadata.segment_capacity) {
-    return crimson::ct_error::enospc::make();
-  }
-  
-  write_pointer = offset + bl.length();
-  return manager.segment_write(paddr_t::make_seg_paddr(id, offset), bl);
-}
-
-Segment::write_ertr::future<> ZNSSegment::write_padding_bytes(
-  size_t padding_bytes)
-{
-  LOG_PREFIX(ZNSSegment::write_padding_bytes);
-  DEBUG("Writing {} padding bytes to segment {} at wp {}",
-        padding_bytes, id, write_pointer);
-
-  return crimson::repeat([FNAME, padding_bytes, this] () mutable {
-    size_t bufsize = 0;
-    if (padding_bytes >= MAX_PADDING_SIZE) {
-      bufsize = MAX_PADDING_SIZE;
-    } else {
-      bufsize = padding_bytes;
-    }
-
-    padding_bytes -= bufsize;
-    bufferptr bp(ceph::buffer::create_page_aligned(bufsize));
-    bp.zero();
-    bufferlist padd_bl;
-    padd_bl.append(bp);
-    return write(write_pointer, padd_bl).safe_then([FNAME, padding_bytes, this]() {
-      if (padding_bytes == 0) {
-        return write_ertr::make_ready_future<seastar::stop_iteration>(seastar::stop_iteration::yes);
-      } else {
-        return write_ertr::make_ready_future<seastar::stop_iteration>(seastar::stop_iteration::no);
-      }
-    });
-  });
-}
-
-// Advance write pointer, to given offset.
-Segment::write_ertr::future<> ZNSSegment::advance_wp(
-  segment_off_t offset)
-{
-  LOG_PREFIX(ZNSSegment::advance_wp);
-
-  DEBUG("Advancing write pointer from {} to {}", write_pointer, offset);
-  if (offset < write_pointer) {
-    return crimson::ct_error::invarg::make();
-  }
-
-  size_t padding_bytes = offset - write_pointer;
-
-  if (padding_bytes == 0) {
-    return write_ertr::now();
-  }
-
-  assert(padding_bytes % manager.metadata.block_size == 0);
-
-  return write_padding_bytes(padding_bytes);
-}
-
-}
diff --git a/ceph/src/crimson/os/seastore/segment_manager/zns.h b/ceph/src/crimson/os/seastore/segment_manager/zns.h
deleted file mode 100644 (file)
index b98ff1c..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-#pragma once
-
-#include <linux/blkzoned.h>
-
-#include <boost/intrusive_ptr.hpp>
-#include <boost/smart_ptr/intrusive_ref_counter.hpp>
-
-#include <seastar/core/file.hh>
-#include <seastar/core/future.hh>
-#include <seastar/core/reactor.hh>
-
-#include "crimson/common/layout.h"
-
-#include "crimson/os/seastore/segment_manager.h"
-
-#include "include/uuid.h"
-
-namespace crimson::os::seastore::segment_manager::zns {
-
-  struct zns_shard_info_t {
-    size_t size = 0;
-    size_t segments = 0;
-    size_t first_segment_offset = 0;
-
-    DENC(zns_shard_info_t, v, p) {
-      DENC_START(1, 1, p);
-      denc(v.size, p);
-      denc(v.segments, p);
-      denc(v.first_segment_offset, p);
-      DENC_FINISH(p);
-    }
-  };
-
-  struct zns_sm_metadata_t {
-    unsigned int shard_num = 0;
-    size_t segment_size = 0;
-    size_t segment_capacity = 0;
-    size_t zones_per_segment = 0;
-    size_t zone_capacity = 0;
-    size_t block_size = 0;
-    size_t zone_size = 0;
-
-    std::vector<zns_shard_info_t> shard_infos;
-
-    seastore_meta_t meta;
-    
-    bool major_dev = false;
-    magic_t magic = 0;
-    device_type_t dtype = device_type_t::NONE;
-    device_id_t device_id = 0;
-    secondary_device_set_t secondary_devices;
-
-    DENC(zns_sm_metadata_t, v, p) {
-      DENC_START(1, 1, p);
-      denc(v.shard_num, p);
-      denc(v.segment_size, p);
-      denc(v.segment_capacity, p);
-      denc(v.zones_per_segment, p);
-      denc(v.zone_capacity, p);
-      denc(v.block_size, p);
-      denc(v.zone_size, p);
-      denc(v.shard_infos, p);
-      denc(v.meta, p);
-      denc(v.magic, p);
-      denc(v.dtype, p);
-      denc(v.device_id, p);
-      if (v.major_dev) {
-       denc(v.secondary_devices, p);
-      }
-      DENC_FINISH(p);
-    }
-
-    void validate() const {
-      ceph_assert_always(shard_num == seastar::smp::count);
-      for (unsigned int i = 0; i < seastar::smp::count; i++) {
-        ceph_assert_always(shard_infos[i].size > 0);
-        ceph_assert_always(shard_infos[i].size <= DEVICE_OFF_MAX);
-        ceph_assert_always(shard_infos[i].segments > 0);
-        ceph_assert_always(shard_infos[i].segments <= DEVICE_SEGMENT_ID_MAX);
-      }
-      ceph_assert_always(segment_capacity > 0);
-      ceph_assert_always(segment_capacity <= SEGMENT_OFF_MAX);
-    }
-  };
-
-  using write_ertr = crimson::errorator<crimson::ct_error::input_output_error>;
-  using read_ertr = crimson::errorator<crimson::ct_error::input_output_error>;
-
-  enum class zone_op {
-    OPEN,
-    FINISH,
-    CLOSE,
-    RESET,
-  };
-
-  class ZNSSegmentManager;
-
-  class ZNSSegment final : public Segment {
-  public:
-    ZNSSegment(ZNSSegmentManager &man, segment_id_t i) : manager(man), id(i){};
-
-    segment_id_t get_segment_id() const final { return id; }
-    segment_off_t get_write_capacity() const final;
-    segment_off_t get_write_ptr() const final { return write_pointer; }
-    close_ertr::future<> close() final;
-    write_ertr::future<> write(segment_off_t offset, ceph::bufferlist bl) final;
-    write_ertr::future<> advance_wp(segment_off_t offset) final;
-
-    ~ZNSSegment() {}
-  private:
-    friend class ZNSSegmentManager;
-    ZNSSegmentManager &manager;
-    const segment_id_t id;
-    segment_off_t write_pointer = 0;
-    write_ertr::future<> write_padding_bytes(size_t padding_bytes);
-  };
-
-  class ZNSSegmentManager final : public SegmentManager{
-  // interfaces used by Device
-  public:
-    seastar::future<> start() {
-      return shard_devices.start(device_path);
-    }
-
-    seastar::future<> stop() {
-      return shard_devices.stop();
-    }
-
-    Device& get_sharded_device() final {
-      return shard_devices.local();
-    }
-
-    mount_ret mount() final;
-    mkfs_ret mkfs(device_config_t meta) final;
-
-    ZNSSegmentManager(const std::string &path) : device_path(path) {}
-
-    ~ZNSSegmentManager() final = default;
-
-  //interfaces used by each shard device
-  public:
-    open_ertr::future<SegmentRef> open(segment_id_t id) final;
-    close_ertr::future<> close() final;
-
-    release_ertr::future<> release(segment_id_t id) final;
-
-    read_ertr::future<> read(
-      paddr_t addr, 
-      size_t len, 
-      ceph::bufferptr &out) final;
-
-    device_type_t get_device_type() const final {
-      return device_type_t::ZNS;
-    }
-
-    size_t get_available_size() const final {
-      return shard_info.size;
-    };
-
-    extent_len_t get_block_size() const final {
-      return metadata.block_size;
-    };
-
-    segment_off_t get_segment_size() const final {
-      return metadata.segment_capacity;
-    };
-
-    const seastore_meta_t &get_meta() const {
-      return metadata.meta;
-    };
-
-    device_id_t get_device_id() const final;
-
-    secondary_device_set_t& get_secondary_devices() final;
-
-    magic_t get_magic() const final;
-
-    Segment::write_ertr::future<> segment_write(
-    paddr_t addr,
-    ceph::bufferlist bl,
-    bool ignore_check=false);
-
-  private:
-    friend class ZNSSegment;
-    std::string device_path;
-    zns_shard_info_t shard_info;
-    zns_sm_metadata_t metadata;
-    seastar::file device;
-    uint32_t nr_zones;
-    struct effort_t {
-      uint64_t num = 0;
-      uint64_t bytes = 0;
-
-      void increment(uint64_t read_bytes) {
-        ++num;
-        bytes += read_bytes;
-      }
-    };
-
-    struct zns_sm_stats {
-      effort_t data_read = {};
-      effort_t data_write = {};
-      effort_t metadata_write = {};
-      uint64_t opened_segments = 0;
-      uint64_t closed_segments = 0;
-      uint64_t closed_segments_unused_bytes = 0;
-      uint64_t released_segments = 0;
-
-      void reset() {
-       *this = zns_sm_stats{};
-      }
-    } stats;
-
-    void register_metrics();
-    seastar::metrics::metric_group metrics;
-
-    Segment::close_ertr::future<> segment_close(
-      segment_id_t id, segment_off_t write_pointer);
-
-    uint64_t get_offset(paddr_t addr) {
-      auto& seg_addr = addr.as_seg_paddr();
-      return (shard_info.first_segment_offset +
-             (seg_addr.get_segment_id().device_segment_id() * 
-              metadata.segment_size)) + seg_addr.get_segment_off();
-    }
-  private:
-    // shard 0 mkfs
-    mkfs_ret primary_mkfs(device_config_t meta);
-    // all shards mkfs
-    mkfs_ret shard_mkfs();
-
-    mount_ret shard_mount();
-
-    seastar::sharded<ZNSSegmentManager> shard_devices;
-  };
-
-}
-
-WRITE_CLASS_DENC_BOUNDED(
-  crimson::os::seastore::segment_manager::zns::zns_shard_info_t
-)
-WRITE_CLASS_DENC_BOUNDED(
-  crimson::os::seastore::segment_manager::zns::zns_sm_metadata_t
-)
index e78e299e71bc410d6332901ad922679798d09cff..332b794b70ee2a43a0d8ff9a733c4fc428e5ed4e 100644 (file)
@@ -91,14 +91,10 @@ SegmentManagerGroup::read_segment_header(segment_id_t segment)
   });
 }
 
-SegmentManagerGroup::scan_valid_records_ret
-SegmentManagerGroup::scan_valid_records(
-  scan_valid_records_cursor &cursor,
-  segment_nonce_t nonce,
-  size_t budget,
-  found_record_handler_t &handler)
+void SegmentManagerGroup::initialize_cursor(
+  scan_valid_records_cursor &cursor)
 {
-  LOG_PREFIX(SegmentManagerGroup::scan_valid_records);
+  LOG_PREFIX(SegmentManagerGroup::initialize_cursor);
   assert(has_device(cursor.get_segment_id().device_id()));
   auto& segment_manager =
     *segment_managers[cursor.get_segment_id().device_id()];
@@ -106,220 +102,24 @@ SegmentManagerGroup::scan_valid_records(
     INFO("start to scan segment {}", cursor.get_segment_id());
     cursor.increment_seq(segment_manager.get_block_size());
   }
-  DEBUG("starting at {}, budget={}", cursor, budget);
-  auto retref = std::make_unique<size_t>(0);
-  auto &budget_used = *retref;
-  return crimson::repeat(
-    [=, &cursor, &budget_used, &handler, this]() mutable
-    -> scan_valid_records_ertr::future<seastar::stop_iteration> {
-      return [=, &handler, &cursor, &budget_used, this] {
-       if (!cursor.last_valid_header_found) {
-         return read_validate_record_metadata(cursor.seq.offset, nonce
-         ).safe_then([=, &cursor](auto md) {
-           if (!md) {
-             cursor.last_valid_header_found = true;
-             if (cursor.is_complete()) {
-               INFO("complete at {}, invalid record group metadata",
-                     cursor);
-             } else {
-               DEBUG("found invalid record group metadata at {}, "
-                     "processing {} pending record groups",
-                     cursor.seq,
-                     cursor.pending_record_groups.size());
-             }
-             return scan_valid_records_ertr::now();
-           } else {
-             auto& [header, md_bl] = *md;
-             DEBUG("found valid {} at {}", header, cursor.seq);
-             cursor.emplace_record_group(header, std::move(md_bl));
-             return scan_valid_records_ertr::now();
-           }
-         }).safe_then([=, &cursor, &budget_used, &handler, this] {
-           DEBUG("processing committed record groups until {}, {} pending",
-                 cursor.last_committed,
-                 cursor.pending_record_groups.size());
-           return crimson::repeat(
-             [=, &budget_used, &cursor, &handler, this] {
-               if (cursor.pending_record_groups.empty()) {
-                 /* This is only possible if the segment is empty.
-                  * A record's last_commited must be prior to its own
-                  * location since it itself cannot yet have been committed
-                  * at its own time of submission.  Thus, the most recently
-                  * read record must always fall after cursor.last_committed */
-                 return scan_valid_records_ertr::make_ready_future<
-                   seastar::stop_iteration>(seastar::stop_iteration::yes);
-               }
-               auto &next = cursor.pending_record_groups.front();
-               journal_seq_t next_seq = {cursor.seq.segment_seq, next.offset};
-               if (cursor.last_committed == JOURNAL_SEQ_NULL ||
-                   next_seq > cursor.last_committed) {
-                 return scan_valid_records_ertr::make_ready_future<
-                   seastar::stop_iteration>(seastar::stop_iteration::yes);
-               }
-               return consume_next_records(cursor, handler, budget_used
-               ).safe_then([] {
-                 return scan_valid_records_ertr::make_ready_future<
-                   seastar::stop_iteration>(seastar::stop_iteration::no);
-               });
-             });
-         });
-       } else {
-         assert(!cursor.pending_record_groups.empty());
-         auto &next = cursor.pending_record_groups.front();
-         return read_validate_data(next.offset, next.header
-         ).safe_then([this, FNAME, &budget_used, &cursor, &handler, &next](auto valid) {
-           if (!valid) {
-             INFO("complete at {}, invalid record group data at {}, {}",
-                  cursor, next.offset, next.header);
-             cursor.pending_record_groups.clear();
-             return scan_valid_records_ertr::now();
-           }
-            return consume_next_records(cursor, handler, budget_used);
-         });
-       }
-      }().safe_then([=, &budget_used, &cursor] {
-       if (cursor.is_complete() || budget_used >= budget) {
-         DEBUG("finish at {}, budget_used={}, budget={}",
-                cursor, budget_used, budget);
-         return seastar::stop_iteration::yes;
-       } else {
-         return seastar::stop_iteration::no;
-       }
-      });
-    }).safe_then([retref=std::move(retref)]() mutable -> scan_valid_records_ret {
-      return scan_valid_records_ret(
-       scan_valid_records_ertr::ready_future_marker{},
-       std::move(*retref));
-    });
+  cursor.block_size = segment_manager.get_block_size();
 }
 
-SegmentManagerGroup::read_validate_record_metadata_ret
-SegmentManagerGroup::read_validate_record_metadata(
-  paddr_t start,
-  segment_nonce_t nonce)
+SegmentManagerGroup::read_ret
+SegmentManagerGroup::read(paddr_t start, size_t len) 
 {
-  LOG_PREFIX(SegmentManagerGroup::read_validate_record_metadata);
-  auto& seg_addr = start.as_seg_paddr();
-  assert(has_device(seg_addr.get_segment_id().device_id()));
-  auto& segment_manager = *segment_managers[seg_addr.get_segment_id().device_id()];
-  auto block_size = segment_manager.get_block_size();
-  auto segment_size = static_cast<int64_t>(segment_manager.get_segment_size());
-  if (seg_addr.get_segment_off() + block_size > segment_size) {
-    DEBUG("failed -- record group header block {}~4096 > segment_size {}", start, segment_size);
-    return read_validate_record_metadata_ret(
-      read_validate_record_metadata_ertr::ready_future_marker{},
-      std::nullopt);
-  }
-  TRACE("reading record group header block {}~4096", start);
-  return segment_manager.read(start, block_size
-  ).safe_then([=, &segment_manager](bufferptr bptr) mutable
-              -> read_validate_record_metadata_ret {
-    auto block_size = segment_manager.get_block_size();
-    bufferlist bl;
-    bl.append(bptr);
-    auto maybe_header = try_decode_records_header(bl, nonce);
-    if (!maybe_header.has_value()) {
-      return read_validate_record_metadata_ret(
-        read_validate_record_metadata_ertr::ready_future_marker{},
-        std::nullopt);
-    }
-    auto& seg_addr = start.as_seg_paddr();
-    auto& header = *maybe_header;
-    if (header.mdlength < block_size ||
-        header.mdlength % block_size != 0 ||
-        header.dlength % block_size != 0 ||
-        (header.committed_to != JOURNAL_SEQ_NULL &&
-         header.committed_to.offset.as_seg_paddr().get_segment_off() % block_size != 0) ||
-        (seg_addr.get_segment_off() + header.mdlength + header.dlength > segment_size)) {
-      ERROR("failed, invalid record group header {}", start);
-      return crimson::ct_error::input_output_error::make();
-    }
-    if (header.mdlength == block_size) {
-      return read_validate_record_metadata_ret(
-        read_validate_record_metadata_ertr::ready_future_marker{},
-        std::make_pair(std::move(header), std::move(bl))
-      );
-    }
-
-    auto rest_start = paddr_t::make_seg_paddr(
-        seg_addr.get_segment_id(),
-        seg_addr.get_segment_off() + block_size
-    );
-    auto rest_len = header.mdlength - block_size;
-    TRACE("reading record group header rest {}~{}", rest_start, rest_len);
-    return segment_manager.read(rest_start, rest_len
-    ).safe_then([header=std::move(header), bl=std::move(bl)
-                ](auto&& bptail) mutable {
-      bl.push_back(bptail);
-      return read_validate_record_metadata_ret(
-        read_validate_record_metadata_ertr::ready_future_marker{},
-        std::make_pair(std::move(header), std::move(bl)));
-    });
-  }).safe_then([](auto p) {
-    if (p && validate_records_metadata(p->second)) {
-      return read_validate_record_metadata_ret(
-        read_validate_record_metadata_ertr::ready_future_marker{},
-        std::move(*p)
-      );
-    } else {
-      return read_validate_record_metadata_ret(
-        read_validate_record_metadata_ertr::ready_future_marker{},
-        std::nullopt);
-    }
-  });
-}
-
-SegmentManagerGroup::read_validate_data_ret
-SegmentManagerGroup::read_validate_data(
-  paddr_t record_base,
-  const record_group_header_t &header)
-{
-  LOG_PREFIX(SegmentManagerGroup::read_validate_data);
-  assert(has_device(record_base.get_device_id()));
-  auto& segment_manager = *segment_managers[record_base.get_device_id()];
-  auto data_addr = record_base.add_offset(header.mdlength);
-  TRACE("reading record group data blocks {}~{}", data_addr, header.dlength);
+  LOG_PREFIX(SegmentManagerGroup::read);
+  assert(has_device(start.get_device_id()));
+  auto& segment_manager = *segment_managers[start.get_device_id()];
+  TRACE("reading data {}~{}", start, len);
   return segment_manager.read(
-    data_addr,
-    header.dlength
-  ).safe_then([=, &header](auto bptr) {
-    bufferlist bl;
-    bl.append(bptr);
-    return validate_records_data(header, bl);
-  });
-}
-
-SegmentManagerGroup::consume_record_group_ertr::future<>
-SegmentManagerGroup::consume_next_records(
-  scan_valid_records_cursor& cursor,
-  found_record_handler_t& handler,
-  std::size_t& budget_used)
-{
-  LOG_PREFIX(SegmentManagerGroup::consume_next_records);
-  auto& next = cursor.pending_record_groups.front();
-  auto total_length = next.header.dlength + next.header.mdlength;
-  budget_used += total_length;
-  auto locator = record_locator_t{
-    next.offset.add_offset(next.header.mdlength),
-    write_result_t{
-      journal_seq_t{
-        cursor.seq.segment_seq,
-        next.offset
-      },
-      total_length
-    }
-  };
-  DEBUG("processing {} at {}, budget_used={}",
-        next.header, locator, budget_used);
-  return handler(
-    locator,
-    next.header,
-    next.mdbuffer
-  ).safe_then([FNAME, &cursor] {
-    cursor.pop_record_group();
-    if (cursor.is_complete()) {
-      INFO("complete at {}, no more record group", cursor);
-    }
+    start,
+    len 
+  ).safe_then([](auto bptr) {
+    return read_ret(
+      read_ertr::ready_future_marker{},
+      std::move(bptr)
+    );
   });
 }
 
index bd5af9601a5673657fcbc7d84f10f72d751868a9..f193b5eed17201584ea2dd3c0000f6190870751f 100644 (file)
@@ -8,10 +8,11 @@
 #include "crimson/common/errorator.h"
 #include "crimson/os/seastore/seastore_types.h"
 #include "crimson/os/seastore/segment_manager.h"
+#include "crimson/os/seastore/record_scanner.h"
 
 namespace crimson::os::seastore {
 
-class SegmentManagerGroup {
+class SegmentManagerGroup : public RecordScanner {
 public:
   SegmentManagerGroup() {
     segment_managers.resize(DEVICE_ID_MAX, nullptr);
@@ -96,24 +97,6 @@ public:
     segment_tail_t>;
   read_segment_tail_ret  read_segment_tail(segment_id_t segment);
 
-  using read_ertr = SegmentManager::read_ertr;
-  using scan_valid_records_ertr = read_ertr;
-  using scan_valid_records_ret = scan_valid_records_ertr::future<
-    size_t>;
-  using found_record_handler_t = std::function<
-    scan_valid_records_ertr::future<>(
-      record_locator_t record_locator,
-      // callee may assume header and bl will remain valid until
-      // returned future resolves
-      const record_group_header_t &header,
-      const bufferlist &mdbuf)>;
-  scan_valid_records_ret scan_valid_records(
-    scan_valid_records_cursor &cursor, ///< [in, out] cursor, updated during call
-    segment_nonce_t nonce,             ///< [in] nonce for segment
-    size_t budget,                     ///< [in] max budget to use
-    found_record_handler_t &handler    ///< [in] handler for records
-  ); ///< @return used budget
-
   /*
    * read journal segment headers
    */
@@ -143,30 +126,20 @@ private:
     return device_ids.count(id) >= 1;
   }
 
-  /// read record metadata for record starting at start
-  using read_validate_record_metadata_ertr = read_ertr;
-  using read_validate_record_metadata_ret =
-    read_validate_record_metadata_ertr::future<
-      std::optional<std::pair<record_group_header_t, bufferlist>>
-    >;
-  read_validate_record_metadata_ret read_validate_record_metadata(
-    paddr_t start,
-    segment_nonce_t nonce);
-
-  /// read and validate data
-  using read_validate_data_ertr = read_ertr;
-  using read_validate_data_ret = read_validate_data_ertr::future<bool>;
-  read_validate_data_ret read_validate_data(
-    paddr_t record_base,
-    const record_group_header_t &header  ///< caller must ensure lifetime through
-                                         ///  future resolution
-  );
-
-  using consume_record_group_ertr = scan_valid_records_ertr;
-  consume_record_group_ertr::future<> consume_next_records(
-      scan_valid_records_cursor& cursor,
-      found_record_handler_t& handler,
-      std::size_t& budget_used);
+  void initialize_cursor(scan_valid_records_cursor &cursor) final;
+
+  read_ret read(paddr_t start, size_t len) final;
+
+  bool is_record_segment_seq_invalid(scan_valid_records_cursor &cursor,
+    record_group_header_t &header) final {
+    return false;
+  }
+
+  int64_t get_segment_end_offset(paddr_t addr) final {
+    auto& seg_addr = addr.as_seg_paddr();
+    auto& segment_manager = *segment_managers[seg_addr.get_segment_id().device_id()];
+    return static_cast<int64_t>(segment_manager.get_segment_size());
+  }
 
   std::vector<SegmentManager*> segment_managers;
   std::set<device_id_t> device_ids;
index eda9ca1c56fb0ca18903fe171624767d3b161a1f..ad8e5f1a65f450b6e567f95ffefe3df07a436a6a 100644 (file)
@@ -216,7 +216,7 @@ TransactionManager::ref_ret TransactionManager::dec_ref(
 {
   LOG_PREFIX(TransactionManager::dec_ref);
   TRACET("{}", t, *ref);
-  return lba_manager->decref_extent(t, ref->get_laddr()
+  return lba_manager->decref_extent(t, ref->get_laddr(), true
   ).si_then([this, FNAME, &t, ref](auto result) {
     DEBUGT("extent refcount is decremented to {} -- {}",
            t, result.refcount, *ref);
@@ -227,29 +227,29 @@ TransactionManager::ref_ret TransactionManager::dec_ref(
   });
 }
 
-TransactionManager::ref_ret TransactionManager::dec_ref(
+TransactionManager::ref_ret TransactionManager::_dec_ref(
   Transaction &t,
-  laddr_t offset)
+  laddr_t offset,
+  bool cascade_remove)
 {
-  LOG_PREFIX(TransactionManager::dec_ref);
+  LOG_PREFIX(TransactionManager::_dec_ref);
   TRACET("{}", t, offset);
-  return lba_manager->decref_extent(t, offset
+  return lba_manager->decref_extent(t, offset, cascade_remove
   ).si_then([this, FNAME, offset, &t](auto result) -> ref_ret {
     DEBUGT("extent refcount is decremented to {} -- {}~{}, {}",
            t, result.refcount, offset, result.length, result.addr);
-    if (result.refcount == 0 && !result.addr.is_zero()) {
-      return cache->retire_extent_addr(
-       t, result.addr, result.length
-      ).si_then([] {
-       return ref_ret(
-         interruptible::ready_future_marker{},
-         0);
-      });
-    } else {
-      return ref_ret(
-       interruptible::ready_future_marker{},
-       result.refcount);
+    auto fut = ref_iertr::now();
+    if (result.refcount == 0) {
+      if (result.addr.is_paddr() &&
+          !result.addr.get_paddr().is_zero()) {
+        fut = cache->retire_extent_addr(
+          t, result.addr.get_paddr(), result.length);
+      }
     }
+
+    return fut.si_then([result=std::move(result)] {
+      return result.refcount;
+    });
   });
 }
 
@@ -666,7 +666,7 @@ TransactionManagerRef make_transaction_manager(
                ->get_journal_size() - primary_device->get_block_size();
     // see CircularBoundedJournal::get_records_start()
     roll_start = static_cast<random_block_device::RBMDevice*>(primary_device)
-                ->get_journal_start() + primary_device->get_block_size();
+                ->get_shard_journal_start() + primary_device->get_block_size();
     ceph_assert_always(roll_size <= DEVICE_OFF_MAX);
     ceph_assert_always((std::size_t)roll_size + roll_start <=
                        primary_device->get_available_size());
index 7a67d4efe9c4dc0b5fb9a00c824db6b4fc9deb4d..dd1898ba77c7ef16893c16c943282de50b9c9584 100644 (file)
@@ -178,7 +178,15 @@ public:
   {
     auto v = pin->get_logical_extent(t);
     if (v.has_child()) {
-      return v.get_child_fut().then([](auto extent) {
+      return v.get_child_fut().safe_then([pin=std::move(pin)](auto extent) {
+#ifndef NDEBUG
+        auto lextent = extent->template cast<LogicalCachedExtent>();
+        auto pin_laddr = pin->get_key();
+        if (pin->is_indirect()) {
+          pin_laddr = pin->get_intermediate_base();
+        }
+        assert(lextent->get_laddr() == pin_laddr);
+#endif
        return extent->template cast<T>();
       });
     } else {
@@ -245,7 +253,9 @@ public:
   /// Remove refcount for offset
   ref_ret dec_ref(
     Transaction &t,
-    laddr_t offset);
+    laddr_t offset) {
+    return _dec_ref(t, offset, true);
+  }
 
   /// remove refcount for list of offset
   using refs_ret = ref_iertr::future<std::vector<unsigned>>;
@@ -282,7 +292,7 @@ public:
       laddr_hint,
       len,
       ext->get_paddr(),
-      ext.get()
+      *ext
     ).si_then([ext=std::move(ext), laddr_hint, &t](auto &&) mutable {
       LOG_PREFIX(TransactionManager::alloc_extent);
       SUBDEBUGT(seastore_tm, "new extent: {}, laddr_hint: {}", t, *ext, laddr_hint);
@@ -292,67 +302,155 @@ public:
   }
 
   /**
-   * map_existing_extent
+   * remap_pin
    *
-   * Allocates a new extent at given existing_paddr that must be absolute and
-   * reads disk to fill the extent.
-   * The common usage is that remove the LogicalCachedExtent (laddr~length at paddr)
-   * and map extent to multiple new extents.
-   * placement_hint and generation should follow the original extent.
+   * Remap original extent to new extents.
+   * Return the pins of new extent.
    */
-  using map_existing_extent_iertr =
-    alloc_extent_iertr::extend_ertr<Device::read_ertr>;
-  template <typename T>
-  using map_existing_extent_ret =
-    map_existing_extent_iertr::future<TCachedExtentRef<T>>;
-  template <typename T>
-  map_existing_extent_ret<T> map_existing_extent(
+  struct remap_entry {
+    extent_len_t offset;
+    extent_len_t len;
+    remap_entry(extent_len_t _offset, extent_len_t _len) {
+      offset = _offset;
+      len = _len;
+    }
+  };
+  using remap_pin_iertr = base_iertr;
+  template <std::size_t N>
+  using remap_pin_ret = remap_pin_iertr::future<std::array<LBAMappingRef, N>>;
+  template <typename T, std::size_t N>
+  remap_pin_ret<N> remap_pin(
     Transaction &t,
-    laddr_t laddr_hint,
-    paddr_t existing_paddr,
-    extent_len_t length) {
-    LOG_PREFIX(TransactionManager::map_existing_extent);
-    // FIXME: existing_paddr can be absolute and pending
-    ceph_assert(existing_paddr.is_absolute());
-    assert(t.is_retired(existing_paddr, length));
-
-    SUBDEBUGT(seastore_tm, " laddr_hint: {} existing_paddr: {} length: {}",
-             t, laddr_hint, existing_paddr, length);
-    auto bp = ceph::bufferptr(buffer::create_page_aligned(length));
-    bp.zero();
-
-    // ExtentPlacementManager::alloc_new_extent will make a new
-    // (relative/temp) paddr, so make extent directly
-    auto ext = CachedExtent::make_cached_extent_ref<T>(std::move(bp));
+    LBAMappingRef &&pin,
+    std::array<remap_entry, N> remaps) {
 
-    ext->init(CachedExtent::extent_state_t::EXIST_CLEAN,
-             existing_paddr,
-             PLACEMENT_HINT_NULL,
-             NULL_GENERATION,
-             t.get_trans_id());
-
-    t.add_fresh_extent(ext);
-
-    return lba_manager->alloc_extent(
-      t,
-      laddr_hint,
-      length,
-      existing_paddr,
-      ext.get()
-    ).si_then([ext=std::move(ext), laddr_hint, this](auto &&ref) {
-      ceph_assert(laddr_hint == ref->get_key());
-      return epm->read(
-        ext->get_paddr(),
-       ext->get_length(),
-       ext->get_bptr()
-      ).safe_then([ext=std::move(ext)] {
-       return map_existing_extent_iertr::make_ready_future<TCachedExtentRef<T>>
-         (std::move(ext));
+#ifndef NDEBUG
+    std::sort(remaps.begin(), remaps.end(),
+      [](remap_entry x, remap_entry y) {
+        return x.offset < y.offset;
+    });
+    auto original_len = pin->get_length();
+    extent_len_t total_remap_len = 0;
+    extent_len_t last_offset = 0;
+    extent_len_t last_len = 0;
+
+    for (auto &remap : remaps) {
+      auto remap_offset = remap.offset;
+      auto remap_len = remap.len;
+      total_remap_len += remap.len;
+      ceph_assert(remap_offset >= (last_offset + last_len));
+      last_offset = remap_offset;
+      last_len = remap_len;
+    }
+    ceph_assert(total_remap_len < original_len);
+#endif
+
+    // FIXME: paddr can be absolute and pending
+    ceph_assert(pin->get_val().is_absolute());
+    return cache->get_extent_if_cached(
+      t, pin->get_val(), T::TYPE
+    ).si_then([this, &t, remaps,
+              original_laddr = pin->get_key(),
+             intermediate_base = pin->is_indirect()
+                                 ? pin->get_intermediate_base()
+                                 : L_ADDR_NULL,
+             intermediate_key = pin->is_indirect()
+                                 ? pin->get_intermediate_key()
+                                 : L_ADDR_NULL,
+              original_paddr = pin->get_val(),
+              original_len = pin->get_length()](auto ext) mutable {
+      std::optional<ceph::bufferptr> original_bptr;
+      LOG_PREFIX(TransactionManager::remap_pin);
+      SUBDEBUGT(seastore_tm,
+        "original laddr: {}, original paddr: {}, original length: {},"
+       " intermediate_base: {}, intermediate_key: {},"
+        " remap to {} extents",
+        t, original_laddr, original_paddr, original_len,
+       intermediate_base, intermediate_key, remaps.size());
+      ceph_assert(
+       (intermediate_base == L_ADDR_NULL)
+         == (intermediate_key == L_ADDR_NULL));
+      if (ext) {
+        // FIXME: cannot and will not remap a dirty extent for now.
+        ceph_assert(!ext->is_dirty());
+        ceph_assert(!ext->is_mutable());
+        ceph_assert(ext->get_length() >= original_len);
+       ceph_assert(ext->get_paddr() == original_paddr);
+        original_bptr = ext->get_bptr();
+      }
+      return seastar::do_with(
+        std::array<LBAMappingRef, N>(),
+        0,
+        std::move(original_bptr),
+        std::vector<remap_entry>(remaps.begin(), remaps.end()),
+        [this, &t, original_laddr, original_paddr,
+       original_len, intermediate_base, intermediate_key]
+        (auto &ret, auto &count, auto &original_bptr, auto &remaps) {
+        return _dec_ref(t, original_laddr, false
+        ).si_then([this, &t, &original_bptr, &ret, &count,
+                  &remaps, intermediate_base, intermediate_key,
+                   original_laddr, original_paddr, original_len](auto) {
+          return trans_intr::do_for_each(
+            remaps.begin(),
+            remaps.end(),
+            [this, &t, &original_bptr, &ret,
+           &count, intermediate_base, intermediate_key,
+           original_laddr, original_paddr, original_len](auto &remap) {
+            LOG_PREFIX(TransactionManager::remap_pin);
+            auto remap_offset = remap.offset;
+            auto remap_len = remap.len;
+            auto remap_laddr = original_laddr + remap_offset;
+            auto remap_paddr = original_paddr.add_offset(remap_offset);
+            ceph_assert(remap_len < original_len);
+            ceph_assert(remap_offset + remap_len <= original_len);
+            ceph_assert(remap_len != 0);
+            ceph_assert(remap_offset % cache->get_block_size() == 0);
+            ceph_assert(remap_len % cache->get_block_size() == 0);
+            SUBDEBUGT(seastore_tm,
+              "remap laddr: {}, remap paddr: {}, remap length: {}", t,
+              remap_laddr, remap_paddr, remap_len);
+           auto remapped_intermediate_key = intermediate_key;
+           if (remapped_intermediate_key != L_ADDR_NULL) {
+             assert(intermediate_base != L_ADDR_NULL);
+             remapped_intermediate_key += remap_offset;
+           }
+            return alloc_remapped_extent<T>(
+              t,
+              remap_laddr,
+              remap_paddr,
+              remap_len,
+              original_laddr,
+             intermediate_base,
+             remapped_intermediate_key,
+              std::move(original_bptr)
+            ).si_then([&ret, &count, remap_laddr](auto &&npin) {
+              ceph_assert(npin->get_key() == remap_laddr);
+              ret[count++] = std::move(npin);
+            });
+          });
+        }).si_then([this, &t, intermediate_base, intermediate_key] {
+         if (N > 1 && intermediate_key != L_ADDR_NULL) {
+           return lba_manager->incref_extent(
+             t, intermediate_base, N - 1
+           ).si_then([](auto) {
+             return seastar::now();
+           });
+         }
+         return LBAManager::ref_iertr::now();
+       }).handle_error_interruptible(
+           remap_pin_iertr::pass_further{},
+           crimson::ct_error::assert_all{
+              "TransactionManager::remap_pin hit invalid error"
+           }
+        ).si_then([&ret, &count] {
+          ceph_assert(count == N);
+          return remap_pin_iertr::make_ready_future<
+            std::array<LBAMappingRef, N>>(std::move(ret));
+        });
       });
     });
   }
 
-
   using reserve_extent_iertr = alloc_extent_iertr;
   using reserve_extent_ret = reserve_extent_iertr::future<LBAMappingRef>;
   reserve_extent_ret reserve_region(
@@ -362,12 +460,55 @@ public:
     LOG_PREFIX(TransactionManager::reserve_region);
     SUBDEBUGT(seastore_tm, "len={}, laddr_hint={}", t, len, hint);
     ceph_assert(is_aligned(hint, epm->get_block_size()));
-    return lba_manager->alloc_extent(
+    return lba_manager->reserve_region(
       t,
       hint,
-      len,
-      P_ADDR_ZERO,
-      nullptr);
+      len);
+  }
+
+  /*
+   * clone_pin
+   *
+   * create an indirect lba mapping pointing to the physical
+   * lba mapping whose key is intermediate_key. Resort to btree_lba_manager.h
+   * for the definition of "indirect lba mapping" and "physical lba mapping"
+   *
+   */
+  using clone_extent_iertr = alloc_extent_iertr;
+  using clone_extent_ret = clone_extent_iertr::future<LBAMappingRef>;
+  clone_extent_ret clone_pin(
+    Transaction &t,
+    laddr_t hint,
+    const LBAMapping &mapping) {
+    auto intermediate_key =
+      mapping.is_indirect()
+       ? mapping.get_intermediate_key()
+       : mapping.get_key();
+    auto intermediate_base =
+      mapping.is_indirect()
+      ? mapping.get_intermediate_base()
+      : mapping.get_key();
+
+    LOG_PREFIX(TransactionManager::clone_pin);
+    SUBDEBUGT(seastore_tm, "len={}, laddr_hint={}, clone_offset {}",
+      t, mapping.get_length(), hint, intermediate_key);
+    ceph_assert(is_aligned(hint, epm->get_block_size()));
+    return lba_manager->clone_extent(
+      t,
+      hint,
+      mapping.get_length(),
+      intermediate_key,
+      mapping.get_val(),
+      intermediate_key
+    ).si_then([this, &t, intermediate_base](auto pin) {
+      return inc_ref(t, intermediate_base
+      ).si_then([pin=std::move(pin)](auto) mutable {
+       return std::move(pin);
+      }).handle_error_interruptible(
+       crimson::ct_error::input_output_error::pass_further(),
+       crimson::ct_error::assert_all("not possible")
+      );
+    });
   }
 
   /* alloc_extents
@@ -602,6 +743,12 @@ private:
     ExtentPlacementManager::dispatch_result_t dispatch_result,
     std::optional<journal_seq_t> seq_to_trim = std::nullopt);
 
+  /// Remove refcount for offset
+  ref_ret _dec_ref(
+    Transaction &t,
+    laddr_t offset,
+    bool cascade_remove);
+
   /**
    * pin_to_extent
    *
@@ -623,7 +770,9 @@ private:
     return cache->get_absent_extent<T>(
       t,
       pref.get_val(),
-      pref.get_length(),
+      pref.is_indirect() ?
+       pref.get_intermediate_length() :
+       pref.get_length(),
       [pin=std::move(pin)]
       (T &extent) mutable {
        assert(!extent.has_laddr());
@@ -631,10 +780,11 @@ private:
        assert(!pin->has_been_invalidated());
        assert(pin->get_parent());
        pin->link_child(&extent);
-       extent.set_laddr(pin->get_key());
+       extent.maybe_set_intermediate_laddr(*pin);
       }
     ).si_then([FNAME, &t](auto ref) mutable -> ret {
       SUBTRACET(seastore_tm, "got extent -- {}", t, *ref);
+      assert(ref->is_fully_loaded());
       return pin_to_extent_ret<T>(
        interruptible::ready_future_marker{},
        std::move(ref));
@@ -662,7 +812,9 @@ private:
       type,
       pref.get_val(),
       pref.get_key(),
-      pref.get_length(),
+      pref.is_indirect() ?
+       pref.get_intermediate_length() :
+       pref.get_length(),
       [pin=std::move(pin)](CachedExtent &extent) mutable {
        auto &lextent = static_cast<LogicalCachedExtent&>(extent);
        assert(!lextent.has_laddr());
@@ -671,16 +823,80 @@ private:
        assert(pin->get_parent());
        assert(!pin->get_parent()->is_pending());
        pin->link_child(&lextent);
-       lextent.set_laddr(pin->get_key());
+       lextent.maybe_set_intermediate_laddr(*pin);
       }
     ).si_then([FNAME, &t](auto ref) {
       SUBTRACET(seastore_tm, "got extent -- {}", t, *ref);
+      assert(ref->is_fully_loaded());
       return pin_to_extent_by_type_ret(
        interruptible::ready_future_marker{},
        std::move(ref->template cast<LogicalCachedExtent>()));
     });
   }
 
+  /**
+   * alloc_remapped_extent
+   *
+   * Allocates a new extent at given remap_paddr that must be absolute and
+   * use the buffer to fill the new extent if buffer exists. Otherwise, will
+   * not read disk to fill the new extent.
+   * Returns the new extent.
+   *
+   * Should make sure the end laddr of remap extent <= the end laddr of
+   * original extent when using this method.
+   */
+  using alloc_remapped_extent_iertr =
+    alloc_extent_iertr::extend_ertr<Device::read_ertr>;
+  using alloc_remapped_extent_ret =
+    alloc_remapped_extent_iertr::future<LBAMappingRef>;
+  template <typename T>
+  alloc_remapped_extent_ret alloc_remapped_extent(
+    Transaction &t,
+    laddr_t remap_laddr,
+    paddr_t remap_paddr,
+    extent_len_t remap_length,
+    laddr_t original_laddr,
+    laddr_t intermediate_base,
+    laddr_t intermediate_key,
+    std::optional<ceph::bufferptr> &&original_bptr) {
+    LOG_PREFIX(TransactionManager::alloc_remapped_extent);
+    SUBDEBUG(seastore_tm, "alloc remapped extent: remap_laddr: {}, "
+      "remap_paddr: {}, remap_length: {}, has data in cache: {} ",
+      remap_laddr, remap_paddr, remap_length,
+      original_bptr.has_value() ? "true":"false");
+    TCachedExtentRef<T> ext;
+    auto fut = LBAManager::alloc_extent_iertr::make_ready_future<
+      LBAMappingRef>();
+    assert((intermediate_key == L_ADDR_NULL)
+      == (intermediate_base == L_ADDR_NULL));
+    if (intermediate_key == L_ADDR_NULL) {
+      // remapping direct mapping
+      ext = cache->alloc_remapped_extent<T>(
+       t,
+       remap_laddr,
+       remap_paddr,
+       remap_length,
+       original_laddr,
+       std::move(original_bptr));
+      fut = lba_manager->alloc_extent(
+       t, remap_laddr, remap_length, remap_paddr, *ext);
+    } else {
+      fut = lba_manager->clone_extent(
+       t,
+       remap_laddr,
+       remap_length,
+       intermediate_key,
+       remap_paddr,
+       intermediate_base);
+    }
+    return fut.si_then([remap_laddr, remap_length, remap_paddr](auto &&ref) {
+      assert(ref->get_key() == remap_laddr);
+      assert(ref->get_val() == remap_paddr);
+      assert(ref->get_length() == remap_length);
+      return alloc_remapped_extent_iertr::make_ready_future
+        <LBAMappingRef>(std::move(ref));
+    });
+  }
 
 public:
   // Testing interfaces
index 4b24b5a654ca9fb036e2703264d345b2d5c17baa..f521e0244d7a3e6afd1c0506b577498a8b0fb323 100644 (file)
@@ -2,6 +2,7 @@ add_executable(crimson-osd
   backfill_state.cc
   ec_backend.cc
   heartbeat.cc
+  lsan_suppressions.cc
   main.cc
   main_config_bootstrap_helpers.cc
   osd.cc
index a728c327fcc867730ce901ddc4acf3599f29050d..266e56533c3bb1579afdf26fc2db9ce87aa0d42e 100644 (file)
@@ -236,8 +236,11 @@ void Heartbeat::ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replac
   }
 }
 
-void Heartbeat::ms_handle_connect(crimson::net::ConnectionRef conn)
+void Heartbeat::ms_handle_connect(
+    crimson::net::ConnectionRef conn,
+    seastar::shard_id prv_shard)
 {
+  ceph_assert_always(seastar::this_shard_id() == prv_shard);
   auto peer = conn->get_peer_id();
   if (conn->get_peer_type() != entity_name_t::TYPE_OSD ||
       peer == entity_name_t::NEW) {
@@ -249,8 +252,12 @@ void Heartbeat::ms_handle_connect(crimson::net::ConnectionRef conn)
   }
 }
 
-void Heartbeat::ms_handle_accept(crimson::net::ConnectionRef conn)
+void Heartbeat::ms_handle_accept(
+    crimson::net::ConnectionRef conn,
+    seastar::shard_id prv_shard,
+    bool is_replace)
 {
+  ceph_assert_always(seastar::this_shard_id() == prv_shard);
   auto peer = conn->get_peer_id();
   if (conn->get_peer_type() != entity_name_t::TYPE_OSD ||
       peer == entity_name_t::NEW) {
@@ -258,7 +265,7 @@ void Heartbeat::ms_handle_accept(crimson::net::ConnectionRef conn)
   }
   if (auto found = peers.find(peer);
       found != peers.end()) {
-    found->second.handle_accept(conn);
+    found->second.handle_accept(conn, is_replace);
   }
 }
 
@@ -303,40 +310,38 @@ seastar::future<> Heartbeat::maybe_share_osdmap(
   Ref<MOSDPing> m)
 {
   const osd_id_t from = m->get_source().num();
-  const epoch_t osdmap_epoch = service.get_map()->get_epoch();
-  const epoch_t peer_epoch = m->map_epoch;
+  const epoch_t current_osdmap_epoch = service.get_map()->get_epoch();
   auto found = peers.find(from);
   if (found == peers.end()) {
     return seastar::now();
   }
   auto& peer = found->second;
 
-  if (peer_epoch > peer.get_last_epoch_sent()) {
-    logger().debug("{} updating session's last epoch sent "
-                   "from {} to peer's (id: {}) map epoch of {}",
-                   __func__, peer.get_last_epoch_sent(),
-                   from, peer_epoch);
-    peer.set_last_epoch_sent(peer_epoch);
+  if (m->map_epoch > peer.get_projected_epoch()) {
+    logger().debug("{} updating peer {} session's projected_epoch"
+                   "from {} to ping map epoch of {}",
+                   __func__, from, peer.get_projected_epoch(),
+                   m->map_epoch);
+    peer.set_projected_epoch(m->map_epoch);
   }
 
-  if (osdmap_epoch <= peer.get_last_epoch_sent()) {
-    logger().info("{} latest epoch sent {} is already later "
-                  "than osdmap epoch of {}",
-                  __func__ , peer.get_last_epoch_sent(),
-                  osdmap_epoch);
+  if (current_osdmap_epoch <= peer.get_projected_epoch()) {
+    logger().debug("{} peer {} projected_epoch {} is already later "
+                  "than our osdmap epoch of {}",
+                  __func__ , from, peer.get_projected_epoch(),
+                  current_osdmap_epoch);
     return seastar::now();
   }
 
-  logger().info("{} peer id: {} epoch is {} while osdmap is {}",
-                __func__ , from, m->map_epoch, osdmap_epoch);
-  if (osdmap_epoch > m->map_epoch) {
-    logger().debug("{} sharing osdmap epoch of {} with peer id {}",
-                   __func__, osdmap_epoch, from);
-    // Peer's newest map is m->map_epoch. Therfore it misses
-    // the osdmaps in the range of `m->map_epoch` to `osdmap_epoch`.
-    return service.send_incremental_map_to_osd(from, m->map_epoch);
-  }
-  return seastar::now();
+  const epoch_t send_from = peer.get_projected_epoch();
+  logger().debug("{} sending peer {} peer maps from projected epoch {} through "
+                "local osdmap epoch {}",
+                __func__,
+                from,
+                send_from,
+                current_osdmap_epoch);
+  peer.set_projected_epoch(current_osdmap_epoch);
+  return service.send_incremental_map_to_osd(from, send_from);
 }
 
 seastar::future<> Heartbeat::handle_reply(crimson::net::ConnectionRef conn,
@@ -429,42 +434,57 @@ bool Heartbeat::Connection::matches(crimson::net::ConnectionRef _conn) const
   return (conn && conn == _conn);
 }
 
-void Heartbeat::Connection::accepted(crimson::net::ConnectionRef accepted_conn)
+bool Heartbeat::Connection::accepted(
+    crimson::net::ConnectionRef accepted_conn,
+    bool is_replace)
 {
-  if (!conn) {
-    if (accepted_conn->get_peer_addr() == listener.get_peer_addr(type)) {
-      logger().info("Heartbeat::Connection::accepted(): "
-                    "{} racing resolved", *this);
-      conn = accepted_conn;
-      set_connected();
+  ceph_assert(accepted_conn);
+  ceph_assert(accepted_conn != conn);
+  if (accepted_conn->get_peer_addr() != listener.get_peer_addr(type)) {
+    return false;
+  }
+
+  if (is_replace) {
+    logger().info("Heartbeat::Connection::accepted(): "
+                  "{} racing", *this);
+    racing_detected = true;
+  }
+  if (conn) {
+    // there is no assumption about the ordering of the reset and accept
+    // events for the 2 racing connections.
+    if (is_connected) {
+      logger().warn("Heartbeat::Connection::accepted(): "
+                    "{} is accepted while connected, is_replace={}",
+                    *this, is_replace);
+      conn->mark_down();
+      set_unconnected();
     }
-  } else if (conn == accepted_conn) {
-    set_connected();
   }
+  conn = accepted_conn;
+  set_connected();
+  return true;
 }
 
-void Heartbeat::Connection::replaced()
+void Heartbeat::Connection::reset(bool is_replace)
 {
-  assert(!is_connected);
-  auto replaced_conn = conn;
-  // set the racing connection, will be handled by handle_accept()
-  conn = msgr.connect(replaced_conn->get_peer_addr(),
-                      replaced_conn->get_peer_name());
-  racing_detected = true;
-  logger().warn("Heartbeat::Connection::replaced(): {} racing", *this);
-  assert(conn != replaced_conn);
-}
+  if (is_replace) {
+    logger().info("Heartbeat::Connection::reset(): "
+                  "{} racing, waiting for the replacing accept",
+                  *this);
+    racing_detected = true;
+  }
 
-void Heartbeat::Connection::reset()
-{
-  conn = nullptr;
   if (is_connected) {
-    is_connected = false;
-    listener.decrease_connected();
+    set_unconnected();
+  } else {
+    conn = nullptr;
   }
-  if (!racing_detected || is_winner_side) {
+
+  if (is_replace) {
+    // waiting for the replacing accept event
+  } else if (!racing_detected || is_winner_side) {
     connect();
-  } else {
+  } else { // racing_detected && !is_winner_side
     logger().info("Heartbeat::Connection::reset(): "
                   "{} racing detected and lose, "
                   "waiting for peer connect me", *this);
@@ -506,11 +526,22 @@ void Heartbeat::Connection::retry()
 
 void Heartbeat::Connection::set_connected()
 {
+  assert(conn);
   assert(!is_connected);
+  ceph_assert(conn->is_connected());
   is_connected = true;
   listener.increase_connected();
 }
 
+void Heartbeat::Connection::set_unconnected()
+{
+  assert(conn);
+  assert(is_connected);
+  conn = nullptr;
+  is_connected = false;
+  listener.decrease_connected();
+}
+
 void Heartbeat::Connection::connect()
 {
   assert(!conn);
@@ -600,6 +631,64 @@ void Heartbeat::Peer::send_heartbeat(
   }
 }
 
+void Heartbeat::Peer::handle_reset(
+    crimson::net::ConnectionRef conn, bool is_replace)
+{
+  int cnt = 0;
+  for_each_conn([&] (auto& _conn) {
+    if (_conn.matches(conn)) {
+      ++cnt;
+      _conn.reset(is_replace);
+    }
+  });
+
+  if (cnt == 0) {
+    logger().info("Heartbeat::Peer::handle_reset(): {} ignores conn, is_replace={} -- {}",
+                  *this, is_replace, *conn);
+  } else if (cnt > 1) {
+    logger().error("Heartbeat::Peer::handle_reset(): {} handles conn {} times -- {}",
+                  *this, cnt, *conn);
+  }
+}
+
+void Heartbeat::Peer::handle_connect(crimson::net::ConnectionRef conn)
+{
+  int cnt = 0;
+  for_each_conn([&] (auto& _conn) {
+    if (_conn.matches(conn)) {
+      ++cnt;
+      _conn.connected();
+    }
+  });
+
+  if (cnt == 0) {
+    logger().error("Heartbeat::Peer::handle_connect(): {} ignores conn -- {}",
+                   *this, *conn);
+    conn->mark_down();
+  } else if (cnt > 1) {
+    logger().error("Heartbeat::Peer::handle_connect(): {} handles conn {} times -- {}",
+                  *this, cnt, *conn);
+  }
+}
+
+void Heartbeat::Peer::handle_accept(crimson::net::ConnectionRef conn, bool is_replace)
+{
+  int cnt = 0;
+  for_each_conn([&] (auto& _conn) {
+    if (_conn.accepted(conn, is_replace)) {
+      ++cnt;
+    }
+  });
+
+  if (cnt == 0) {
+    logger().warn("Heartbeat::Peer::handle_accept(): {} ignores conn -- {}",
+                  *this, *conn);
+  } else if (cnt > 1) {
+    logger().error("Heartbeat::Peer::handle_accept(): {} handles conn {} times -- {}",
+                  *this, cnt, *conn);
+  }
+}
+
 seastar::future<> Heartbeat::Peer::handle_reply(
     crimson::net::ConnectionRef conn, Ref<MOSDPing> m)
 {
index 73fcdf7885f7c83c58d81893917148383ffc3d82..f5da451181e91b7aa579376cae24aa77b243db15 100644 (file)
@@ -52,8 +52,8 @@ public:
   std::optional<seastar::future<>> ms_dispatch(
       crimson::net::ConnectionRef conn, MessageRef m) override;
   void ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replace) override;
-  void ms_handle_connect(crimson::net::ConnectionRef conn) override;
-  void ms_handle_accept(crimson::net::ConnectionRef conn) override;
+  void ms_handle_connect(crimson::net::ConnectionRef conn, seastar::shard_id) override;
+  void ms_handle_accept(crimson::net::ConnectionRef conn, seastar::shard_id, bool is_replace) override;
 
   void print(std::ostream&) const;
 private:
@@ -189,9 +189,8 @@ class Heartbeat::Connection {
   void connected() {
     set_connected();
   }
-  void accepted(crimson::net::ConnectionRef);
-  void replaced();
-  void reset();
+  bool accepted(crimson::net::ConnectionRef, bool is_replace);
+  void reset(bool is_replace=false);
   seastar::future<> send(MessageURef msg);
   void validate();
   // retry connection if still pending
@@ -199,6 +198,7 @@ class Heartbeat::Connection {
 
  private:
   void set_connected();
+  void set_unconnected();
   void connect();
 
   const osd_id_t peer;
@@ -239,19 +239,15 @@ class Heartbeat::Connection {
   crimson::net::ConnectionRef conn;
   bool is_connected = false;
 
- friend std::ostream& operator<<(std::ostream& os, const Connection& c) {
-   if (c.type == type_t::front) {
-     return os << "con_front(osd." << c.peer << ")";
-   } else {
-     return os << "con_back(osd." << c.peer << ")";
-   }
- }
 friend std::ostream& operator<<(std::ostream& os, const Connection& c) {
+    if (c.type == type_t::front) {
+      return os << "con_front(osd." << c.peer << ")";
+    } else {
+      return os << "con_back(osd." << c.peer << ")";
+    }
 }
 };
 
-#if FMT_VERSION >= 90000
-template <> struct fmt::formatter<Heartbeat::Connection> : fmt::ostream_formatter {};
-#endif
-
 /*
  * Track the ping history and ping reply (the pong) from the same session, clean up
  * history once hb_front or hb_back loses connection and restart the session once
@@ -277,8 +273,8 @@ class Heartbeat::Session {
   void set_epoch_added(epoch_t epoch_) { epoch = epoch_; }
   epoch_t get_epoch_added() const { return epoch; }
 
-  void set_last_epoch_sent(epoch_t epoch_) { last_sent_epoch = epoch_; }
-  epoch_t get_last_epoch_sent() const { return last_sent_epoch; }
+  void set_projected_epoch(epoch_t epoch_) { projected_epoch = epoch_; }
+  epoch_t get_projected_epoch() const { return projected_epoch; }
 
   bool is_started() const { return connected; }
   bool pinged() const {
@@ -389,8 +385,8 @@ class Heartbeat::Session {
   clock::time_point last_rx_back;
   // most recent epoch we wanted this peer
   epoch_t epoch; // rename me to epoch_added
-  // last epoch sent
-  epoch_t last_sent_epoch = 0;
+  // epoch we expect peer to be at once our sent incrementals are processed
+  epoch_t projected_epoch = 0;
 
   struct reply_t {
     clock::time_point deadline;
@@ -414,8 +410,8 @@ class Heartbeat::Peer final : private Heartbeat::ConnectionListener {
   void set_epoch_added(epoch_t epoch) { session.set_epoch_added(epoch); }
   epoch_t get_epoch_added() const { return session.get_epoch_added(); }
 
-  void set_last_epoch_sent(epoch_t epoch) { session.set_last_epoch_sent(epoch); }
-  epoch_t get_last_epoch_sent() const { return session.get_last_epoch_sent(); }
+  void set_projected_epoch(epoch_t epoch) { session.set_projected_epoch(epoch); }
+  epoch_t get_projected_epoch() const { return session.get_projected_epoch(); }
 
   // if failure, return time_point since last active
   // else, return clock::zero()
@@ -425,29 +421,12 @@ class Heartbeat::Peer final : private Heartbeat::ConnectionListener {
   void send_heartbeat(
       clock::time_point, ceph::signedspan, std::vector<seastar::future<>>&);
   seastar::future<> handle_reply(crimson::net::ConnectionRef, Ref<MOSDPing>);
-  void handle_reset(crimson::net::ConnectionRef conn, bool is_replace) {
-    for_each_conn([&] (auto& _conn) {
-      if (_conn.matches(conn)) {
-        if (is_replace) {
-          _conn.replaced();
-        } else {
-          _conn.reset();
-        }
-      }
-    });
-  }
-  void handle_connect(crimson::net::ConnectionRef conn) {
-    for_each_conn([&] (auto& _conn) {
-      if (_conn.matches(conn)) {
-        _conn.connected();
-      }
-    });
-  }
-  void handle_accept(crimson::net::ConnectionRef conn) {
-    for_each_conn([&] (auto& _conn) {
-      _conn.accepted(conn);
-    });
-  }
+
+  void handle_reset(crimson::net::ConnectionRef conn, bool is_replace);
+
+  void handle_connect(crimson::net::ConnectionRef conn);
+
+  void handle_accept(crimson::net::ConnectionRef conn, bool is_replace);
 
  private:
   entity_addr_t get_peer_addr(type_t type) override;
@@ -469,8 +448,14 @@ class Heartbeat::Peer final : private Heartbeat::ConnectionListener {
   bool pending_send = false;
   Connection con_front;
   Connection con_back;
+
+  friend std::ostream& operator<<(std::ostream& os, const Peer& p) {
+    return os << "peer(osd." << p.peer << ")";
+  }
 };
 
 #if FMT_VERSION >= 90000
 template <> struct fmt::formatter<Heartbeat> : fmt::ostream_formatter {};
+template <> struct fmt::formatter<Heartbeat::Connection> : fmt::ostream_formatter {};
+template <> struct fmt::formatter<Heartbeat::Peer> : fmt::ostream_formatter {};
 #endif
diff --git a/ceph/src/crimson/osd/lsan_suppressions.cc b/ceph/src/crimson/osd/lsan_suppressions.cc
new file mode 100644 (file)
index 0000000..53b7eb6
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _NDEBUG
+// The callbacks we define here will be called from the sanitizer runtime, but
+// aren't referenced from the Chrome executable. We must ensure that those
+// callbacks are not sanitizer-instrumented, and that they aren't stripped by
+// the linker.
+#define SANITIZER_HOOK_ATTRIBUTE                                           \
+  extern "C"                                                               \
+  __attribute__((no_sanitize("address", "thread", "undefined")))           \
+  __attribute__((visibility("default")))                                   \
+  __attribute__((used))
+
+static char kLSanDefaultSuppressions[] =
+  "leak:InitModule\n"
+  "leak:MallocExtension::Initialize\n"
+  "leak:MallocExtension::Register\n";
+
+SANITIZER_HOOK_ATTRIBUTE const char *__lsan_default_suppressions() {
+  return kLSanDefaultSuppressions;
+}
+#endif // ! _NDEBUG
index 234259f0e6d23f9de0e426609455ad4332ce09ba..1e817415d03b9d25930b704cf3ae3314467e8316 100644 (file)
@@ -192,7 +192,8 @@ int main(int argc, const char* argv[])
                                     make_pair(std::ref(hb_back_msgr), "hb_back"s)}) {
             msgr = crimson::net::Messenger::create(entity_name_t::OSD(whoami),
                                                    name,
-                                                   nonce);
+                                                   nonce,
+                                                   true);
           }
           auto store = crimson::os::FuturizedStore::create(
             local_conf().get_val<std::string>("osd_objectstore"),
index 0777822b9a0e6b8799c892e22f7691b2602cbd9e..807fd1591aed5c4c7cf8e240d7b1b74f9f28d8a9 100644 (file)
@@ -55,7 +55,8 @@ seastar::future<> populate_config_from_mon()
     auto auth_handler = std::make_unique<DummyAuthHandler>();
     auto msgr = crimson::net::Messenger::create(entity_name_t::CLIENT(),
                                                 "temp_mon_client",
-                                                get_nonce());
+                                                get_nonce(),
+                                                true);
     crimson::mon::Client monc{*msgr, *auth_handler};
     msgr->set_auth_client(&monc);
     msgr->start({&monc}).get();
index 4cdbda7876aaf3d146243a82ffbf37d91a95930c..0a4d74c0d70c7e51e9c4185975b4dd208313ced1 100644 (file)
@@ -82,11 +82,11 @@ using crimson::common::local_conf;
 
   template<RWState::State State>
   ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_head_and_clone_obc(
+  ObjectContextLoader::with_clone_obc_direct(
     hobject_t oid,
     with_both_obc_func_t&& func)
   {
-    LOG_PREFIX(ObjectContextLoader::with_head_and_clone_obc);
+    LOG_PREFIX(ObjectContextLoader::with_clone_obc_direct);
     assert(!oid.is_head());
     return with_obc<RWState::RWREAD>(
       oid.get_head(),
@@ -98,14 +98,13 @@ using crimson::common::local_conf;
           crimson::ct_error::enoent::make()
         };
       }
-      auto coid = resolve_oid(head->get_head_ss(), oid);
-      if (!coid) {
-        ERRORDPP("clone {} not found", dpp, oid);
-        return load_obc_iertr::future<>{
-          crimson::ct_error::enoent::make()
-        };
-      }
-      auto [clone, existed] = obc_registry.get_cached_obc(*coid);
+#ifndef NDEBUG
+      auto &ss = head->get_head_ss();
+      auto cit = std::find(
+       std::begin(ss.clones), std::end(ss.clones), oid.snap);
+      assert(cit != std::end(ss.clones));
+#endif
+      auto [clone, existed] = obc_registry.get_cached_obc(oid);
       return clone->template with_lock<State, IOInterruptCondition>(
         [existed=existed, clone=std::move(clone),
          func=std::move(func), head=std::move(head), this]()
@@ -227,7 +226,7 @@ using crimson::common::local_conf;
                                                  with_obc_func_t&&);
 
   template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_head_and_clone_obc<RWState::RWWRITE>(
+  ObjectContextLoader::with_clone_obc_direct<RWState::RWWRITE>(
     hobject_t,
     with_both_obc_func_t&&);
 }
index 82e2c1e4dd5449eb61a6d2bb9042509dfb8cc111..3ab7f6ad80fdc70dba90372c882c439f90351eb9 100644 (file)
@@ -53,7 +53,7 @@ public:
   // object *and* the matching clone object are being used
   // in func.
   template<RWState::State State>
-  load_obc_iertr::future<> with_head_and_clone_obc(
+  load_obc_iertr::future<> with_clone_obc_direct(
     hobject_t oid,
     with_both_obc_func_t&& func);
 
index 735b6d777ca913ef0c2334a9ea8e4df6d17c61a0..cfe4f54ab2e5e9aa49769f45f9d28fb651998dac 100644 (file)
@@ -95,6 +95,9 @@ OSD::OSD(int id, uint32_t nonce,
     monc{new crimson::mon::Client{*public_msgr, *this}},
     mgrc{new crimson::mgr::Client{*public_msgr, *this}},
     store{store},
+    pg_shard_manager{osd_singleton_state,
+                     shard_services,
+                     pg_to_shard_mappings},
     // do this in background -- continuation rearms timer when complete
     tick_timer{[this] {
       std::ignore = update_heartbeat_peers(
@@ -108,6 +111,7 @@ OSD::OSD(int id, uint32_t nonce,
     log_client(cluster_msgr.get(), LogClient::NO_FLAGS),
     clog(log_client.create_channel())
 {
+  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
   for (auto msgr : {std::ref(cluster_msgr), std::ref(public_msgr),
                     std::ref(hb_front_msgr), std::ref(hb_back_msgr)}) {
     msgr.get()->set_auth_server(monc.get());
@@ -159,6 +163,7 @@ CompatSet get_osd_initial_compat_set()
 
 seastar::future<> OSD::open_meta_coll()
 {
+  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
   return store.get_sharded_store().open_collection(
     coll_t::meta()
   ).then([this](auto ch) {
@@ -354,11 +359,27 @@ seastar::future<> OSD::start()
   logger().info("start");
 
   startup_time = ceph::mono_clock::now();
-
+  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
   return store.start().then([this] {
-    return pg_shard_manager.start(
-    whoami, *cluster_msgr,
-    *public_msgr, *monc, *mgrc, store);
+    return pg_to_shard_mappings.start(0, seastar::smp::count
+    ).then([this] {
+      return osd_singleton_state.start_single(
+        whoami, std::ref(*cluster_msgr), std::ref(*public_msgr),
+        std::ref(*monc), std::ref(*mgrc));
+    }).then([this] {
+      return osd_states.start();
+    }).then([this] {
+      ceph::mono_time startup_time = ceph::mono_clock::now();
+      return shard_services.start(
+        std::ref(osd_singleton_state),
+        std::ref(pg_to_shard_mappings),
+        whoami,
+        startup_time,
+        osd_singleton_state.local().perf,
+        osd_singleton_state.local().recoverystate_perf,
+        std::ref(store),
+        std::ref(osd_states));
+    });
   }).then([this] {
     heartbeat.reset(new Heartbeat{
        whoami, get_shard_services(),
@@ -385,11 +406,13 @@ seastar::future<> OSD::start()
     osdmap = make_local_shared_foreign(OSDMapService::local_cached_map_t(map));
     return pg_shard_manager.update_map(std::move(map));
   }).then([this] {
-    pg_shard_manager.got_map(osdmap->get_epoch());
+    return shard_services.invoke_on_all([this](auto &local_service) {
+      local_service.local_state.osdmap_gate.got_map(osdmap->get_epoch());
+    });
+  }).then([this] {
     bind_epoch = osdmap->get_epoch();
     return pg_shard_manager.load_pgs(store);
   }).then([this] {
-
     uint64_t osd_required =
       CEPH_FEATURE_UID |
       CEPH_FEATURE_PGID64 |
@@ -584,9 +607,11 @@ seastar::future<> OSD::_add_me_to_crush()
   });
 }
 
-seastar::future<> OSD::handle_command(crimson::net::ConnectionRef conn,
-                                     Ref<MCommand> m)
+seastar::future<> OSD::handle_command(
+  crimson::net::ConnectionRef conn,
+  Ref<MCommand> m)
 {
+  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
   return asok->handle_command(conn, std::move(m));
 }
 
@@ -637,7 +662,8 @@ seastar::future<> OSD::stop()
   tick_timer.cancel();
   // see also OSD::shutdown()
   return prepare_to_stop().then([this] {
-    pg_shard_manager.set_stopping();
+    return pg_shard_manager.set_stopping();
+  }).then([this] {
     logger().debug("prepared to stop");
     public_msgr->stop();
     cluster_msgr->stop();
@@ -657,7 +683,13 @@ seastar::future<> OSD::stop()
     }).then([this] {
       return mgrc->stop();
     }).then([this] {
-      return pg_shard_manager.stop();
+      return shard_services.stop();
+    }).then([this] {
+      return osd_states.stop();
+    }).then([this] {
+      return osd_singleton_state.stop();
+    }).then([this] {
+      return pg_to_shard_mappings.stop();
     }).then([fut=std::move(gate_close_fut)]() mutable {
       return std::move(fut);
     }).then([this] {
@@ -697,77 +729,104 @@ std::optional<seastar::future<>>
 OSD::ms_dispatch(crimson::net::ConnectionRef conn, MessageRef m)
 {
   if (pg_shard_manager.is_stopping()) {
-    return {};
+    return seastar::now();
   }
-  // XXX: we're assuming the `switch` part is executed immediately, and thus
-  // we won't smash the stack. Taking into account how `seastar::with_gate`
-  // is currently implemented, this seems to be the case (Summer 2022).
-  bool dispatched = true;
-  gate.dispatch_in_background(__func__, *this, [this, conn=std::move(conn),
-                                                m=std::move(m), &dispatched] {
+  auto maybe_ret = do_ms_dispatch(conn, std::move(m));
+  if (!maybe_ret.has_value()) {
+    return std::nullopt;
+  }
+
+  gate.dispatch_in_background(
+      __func__, *this, [ret=std::move(maybe_ret.value())]() mutable {
+    return std::move(ret);
+  });
+  return seastar::now();
+}
+
+std::optional<seastar::future<>>
+OSD::do_ms_dispatch(
+   crimson::net::ConnectionRef conn,
+   MessageRef m)
+{
+  if (seastar::this_shard_id() != PRIMARY_CORE) {
     switch (m->get_type()) {
     case CEPH_MSG_OSD_MAP:
-      return handle_osd_map(conn, boost::static_pointer_cast<MOSDMap>(m));
-    case CEPH_MSG_OSD_OP:
-      return handle_osd_op(conn, boost::static_pointer_cast<MOSDOp>(m));
-    case MSG_OSD_PG_CREATE2:
-      return handle_pg_create(
-       conn, boost::static_pointer_cast<MOSDPGCreate2>(m));
-      return seastar::now();
     case MSG_COMMAND:
-      return handle_command(conn, boost::static_pointer_cast<MCommand>(m));
     case MSG_OSD_MARK_ME_DOWN:
-      return handle_mark_me_down(conn, boost::static_pointer_cast<MOSDMarkMeDown>(m));
-    case MSG_OSD_PG_PULL:
-      [[fallthrough]];
-    case MSG_OSD_PG_PUSH:
-      [[fallthrough]];
-    case MSG_OSD_PG_PUSH_REPLY:
-      [[fallthrough]];
-    case MSG_OSD_PG_RECOVERY_DELETE:
-      [[fallthrough]];
-    case MSG_OSD_PG_RECOVERY_DELETE_REPLY:
-      [[fallthrough]];
-    case MSG_OSD_PG_SCAN:
-      [[fallthrough]];
-    case MSG_OSD_PG_BACKFILL:
-      [[fallthrough]];
-    case MSG_OSD_PG_BACKFILL_REMOVE:
-      return handle_recovery_subreq(conn, boost::static_pointer_cast<MOSDFastDispatchOp>(m));
-    case MSG_OSD_PG_LEASE:
-      [[fallthrough]];
-    case MSG_OSD_PG_LEASE_ACK:
-      [[fallthrough]];
-    case MSG_OSD_PG_NOTIFY2:
-      [[fallthrough]];
-    case MSG_OSD_PG_INFO2:
-      [[fallthrough]];
-    case MSG_OSD_PG_QUERY2:
-      [[fallthrough]];
-    case MSG_OSD_BACKFILL_RESERVE:
-      [[fallthrough]];
-    case MSG_OSD_RECOVERY_RESERVE:
-      [[fallthrough]];
-    case MSG_OSD_PG_LOG:
-      return handle_peering_op(conn, boost::static_pointer_cast<MOSDPeeringOp>(m));
-    case MSG_OSD_REPOP:
-      return handle_rep_op(conn, boost::static_pointer_cast<MOSDRepOp>(m));
-    case MSG_OSD_REPOPREPLY:
-      return handle_rep_op_reply(conn, boost::static_pointer_cast<MOSDRepOpReply>(m));
-    case MSG_OSD_SCRUB2:
-      return handle_scrub(conn, boost::static_pointer_cast<MOSDScrub2>(m));
-    case MSG_OSD_PG_UPDATE_LOG_MISSING:
-      return handle_update_log_missing(conn, boost::static_pointer_cast<
-        MOSDPGUpdateLogMissing>(m));
-    case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY:
-      return handle_update_log_missing_reply(conn, boost::static_pointer_cast<
-        MOSDPGUpdateLogMissingReply>(m));
-    default:
-      dispatched = false;
-      return seastar::now();
+      // FIXME: order is not guaranteed in this path
+      return conn.get_foreign(
+      ).then([this, m=std::move(m)](auto f_conn) {
+        return seastar::smp::submit_to(PRIMARY_CORE,
+            [f_conn=std::move(f_conn), m=std::move(m), this]() mutable {
+          auto conn = make_local_shared_foreign(std::move(f_conn));
+          auto ret = do_ms_dispatch(conn, std::move(m));
+          assert(ret.has_value());
+          return std::move(ret.value());
+        });
+      });
     }
-  });
-  return (dispatched ? std::make_optional(seastar::now()) : std::nullopt);
+  }
+
+  switch (m->get_type()) {
+  case CEPH_MSG_OSD_MAP:
+    return handle_osd_map(boost::static_pointer_cast<MOSDMap>(m));
+  case CEPH_MSG_OSD_OP:
+    return handle_osd_op(conn, boost::static_pointer_cast<MOSDOp>(m));
+  case MSG_OSD_PG_CREATE2:
+    return handle_pg_create(
+      conn, boost::static_pointer_cast<MOSDPGCreate2>(m));
+    return seastar::now();
+  case MSG_COMMAND:
+    return handle_command(conn, boost::static_pointer_cast<MCommand>(m));
+  case MSG_OSD_MARK_ME_DOWN:
+    return handle_mark_me_down(conn, boost::static_pointer_cast<MOSDMarkMeDown>(m));
+  case MSG_OSD_PG_PULL:
+    [[fallthrough]];
+  case MSG_OSD_PG_PUSH:
+    [[fallthrough]];
+  case MSG_OSD_PG_PUSH_REPLY:
+    [[fallthrough]];
+  case MSG_OSD_PG_RECOVERY_DELETE:
+    [[fallthrough]];
+  case MSG_OSD_PG_RECOVERY_DELETE_REPLY:
+    [[fallthrough]];
+  case MSG_OSD_PG_SCAN:
+    [[fallthrough]];
+  case MSG_OSD_PG_BACKFILL:
+    [[fallthrough]];
+  case MSG_OSD_PG_BACKFILL_REMOVE:
+    return handle_recovery_subreq(conn, boost::static_pointer_cast<MOSDFastDispatchOp>(m));
+  case MSG_OSD_PG_LEASE:
+    [[fallthrough]];
+  case MSG_OSD_PG_LEASE_ACK:
+    [[fallthrough]];
+  case MSG_OSD_PG_NOTIFY2:
+    [[fallthrough]];
+  case MSG_OSD_PG_INFO2:
+    [[fallthrough]];
+  case MSG_OSD_PG_QUERY2:
+    [[fallthrough]];
+  case MSG_OSD_BACKFILL_RESERVE:
+    [[fallthrough]];
+  case MSG_OSD_RECOVERY_RESERVE:
+    [[fallthrough]];
+  case MSG_OSD_PG_LOG:
+    return handle_peering_op(conn, boost::static_pointer_cast<MOSDPeeringOp>(m));
+  case MSG_OSD_REPOP:
+    return handle_rep_op(conn, boost::static_pointer_cast<MOSDRepOp>(m));
+  case MSG_OSD_REPOPREPLY:
+    return handle_rep_op_reply(conn, boost::static_pointer_cast<MOSDRepOpReply>(m));
+  case MSG_OSD_SCRUB2:
+    return handle_scrub(conn, boost::static_pointer_cast<MOSDScrub2>(m));
+  case MSG_OSD_PG_UPDATE_LOG_MISSING:
+    return handle_update_log_missing(conn, boost::static_pointer_cast<
+      MOSDPGUpdateLogMissing>(m));
+  case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY:
+    return handle_update_log_missing_reply(conn, boost::static_pointer_cast<
+      MOSDPGUpdateLogMissingReply>(m));
+  default:
+    return std::nullopt;
+  }
 }
 
 void OSD::ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replace)
@@ -841,20 +900,26 @@ uint64_t OSD::send_pg_stats()
   return osd_stat.seq;
 }
 
-bool OSD::require_mon_peer(crimson::net::Connection *conn, Ref<Message> m)
+seastar::future<> OSD::handle_osd_map(Ref<MOSDMap> m)
 {
-  if (!conn->peer_is_mon()) {
-    logger().info("{} received from non-mon {}, {}",
-                 __func__,
-                 conn->get_peer_addr(),
-                 *m);
-    return false;
-  }
-  return true;
+  /* Ensure that only one MOSDMap is processed at a time.  Allowing concurrent
+  * processing may eventually be worthwhile, but such an implementation would
+  * need to ensure (among other things)
+  * 1. any particular map is only processed once
+  * 2. PGAdvanceMap operations are processed in order for each PG
+  * As map handling is not presently a bottleneck, we stick to this
+  * simpler invariant for now.
+  * See https://tracker.ceph.com/issues/59165
+  */
+  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
+  return handle_osd_map_lock.lock().then([this, m] {
+    return _handle_osd_map(m);
+  }).finally([this] {
+    return handle_osd_map_lock.unlock();
+  });
 }
 
-seastar::future<> OSD::handle_osd_map(crimson::net::ConnectionRef conn,
-                                      Ref<MOSDMap> m)
+seastar::future<> OSD::_handle_osd_map(Ref<MOSDMap> m)
 {
   logger().info("handle_osd_map {}", *m);
   if (m->fsid != superblock.cluster_fsid) {
@@ -926,10 +991,12 @@ seastar::future<> OSD::handle_osd_map(crimson::net::ConnectionRef conn,
   });
 }
 
-seastar::future<> OSD::committed_osd_maps(version_t first,
-                                          version_t last,
-                                          Ref<MOSDMap> m)
+seastar::future<> OSD::committed_osd_maps(
+  version_t first,
+  version_t last,
+  Ref<MOSDMap> m)
 {
+  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
   logger().info("osd.{}: committed_osd_maps({}, {})", whoami, first, last);
   // advance through the new maps
   return seastar::do_for_each(boost::make_counting_iterator(first),
@@ -956,6 +1023,7 @@ seastar::future<> OSD::committed_osd_maps(version_t first,
       }
     });
   }).then([m, this] {
+    auto fut = seastar::now();
     if (osdmap->is_up(whoami)) {
       const auto up_from = osdmap->get_up_from(whoami);
       logger().info("osd.{}: map e {} marked me up: up_from {}, bind_epoch {}, state {}",
@@ -965,12 +1033,13 @@ seastar::future<> OSD::committed_osd_maps(version_t first,
           osdmap->get_addrs(whoami) == public_msgr->get_myaddrs() &&
           pg_shard_manager.is_booting()) {
         logger().info("osd.{}: activating...", whoami);
-        pg_shard_manager.set_active();
-        beacon_timer.arm_periodic(
-          std::chrono::seconds(local_conf()->osd_beacon_report_interval));
-       // timer continuation rearms when complete
-        tick_timer.arm(
-          std::chrono::seconds(TICK_INTERVAL));
+        fut = pg_shard_manager.set_active().then([this] {
+          beacon_timer.arm_periodic(
+            std::chrono::seconds(local_conf()->osd_beacon_report_interval));
+         // timer continuation rearms when complete
+          tick_timer.arm(
+            std::chrono::seconds(TICK_INTERVAL));
+        });
       }
     } else {
       if (pg_shard_manager.is_prestop()) {
@@ -978,9 +1047,13 @@ seastar::future<> OSD::committed_osd_maps(version_t first,
        return seastar::now();
       }
     }
-    return check_osdmap_features().then([this] {
-      // yay!
-      return pg_shard_manager.broadcast_map_to_pgs(osdmap->get_epoch());
+    return fut.then([this] {
+      return check_osdmap_features().then([this] {
+        // yay!
+        logger().info("osd.{}: committed_osd_maps: broadcasting osdmaps up"
+                      " to {} epoch to pgs", whoami, osdmap->get_epoch());
+        return pg_shard_manager.broadcast_map_to_pgs(osdmap->get_epoch());
+      });
     });
   }).then([m, this] {
     if (pg_shard_manager.is_active()) {
@@ -1013,20 +1086,22 @@ seastar::future<> OSD::committed_osd_maps(version_t first,
   });
 }
 
-seastar::future<> OSD::handle_osd_op(crimson::net::ConnectionRef conn,
-                                     Ref<MOSDOp> m)
+seastar::future<> OSD::handle_osd_op(
+  crimson::net::ConnectionRef conn,
+  Ref<MOSDOp> m)
 {
-  (void) pg_shard_manager.start_pg_operation<ClientRequest>(
+  return pg_shard_manager.start_pg_operation<ClientRequest>(
     get_shard_services(),
     conn,
-    std::move(m));
-  return seastar::now();
+    std::move(m)).second;
 }
 
-seastar::future<> OSD::handle_pg_create(crimson::net::ConnectionRef conn,
-                                       Ref<MOSDPGCreate2> m)
+seastar::future<> OSD::handle_pg_create(
+  crimson::net::ConnectionRef conn,
+  Ref<MOSDPGCreate2> m)
 {
-  for (auto& [pgid, when] : m->pgs) {
+  return seastar::do_for_each(m->pgs, [this, conn, m](auto& pg) {
+    auto& [pgid, when] = pg;
     const auto &[created, created_stamp] = when;
     auto q = m->pg_extra.find(pgid);
     ceph_assert(q != m->pg_extra.end());
@@ -1043,8 +1118,9 @@ seastar::future<> OSD::handle_pg_create(crimson::net::ConnectionRef conn,
         "unmatched past_intervals {} (history {})",
         pgid, m->epoch,
         pi, history);
+        return seastar::now();
     } else {
-      std::ignore = pg_shard_manager.start_pg_operation<RemotePeeringEvent>(
+      return pg_shard_manager.start_pg_operation<RemotePeeringEvent>(
          conn,
          pg_shard_t(),
          pgid,
@@ -1052,10 +1128,9 @@ seastar::future<> OSD::handle_pg_create(crimson::net::ConnectionRef conn,
          m->epoch,
          NullEvt(),
          true,
-         new PGCreateInfo(pgid, m->epoch, history, pi, true));
+         new PGCreateInfo(pgid, m->epoch, history, pi, true)).second;
     }
-  }
-  return seastar::now();
+  });
 }
 
 seastar::future<> OSD::handle_update_log_missing(
@@ -1063,10 +1138,9 @@ seastar::future<> OSD::handle_update_log_missing(
   Ref<MOSDPGUpdateLogMissing> m)
 {
   m->decode_payload();
-  (void) pg_shard_manager.start_pg_operation<LogMissingRequest>(
+  return pg_shard_manager.start_pg_operation<LogMissingRequest>(
     std::move(conn),
-    std::move(m));
-  return seastar::now();
+    std::move(m)).second;
 }
 
 seastar::future<> OSD::handle_update_log_missing_reply(
@@ -1074,24 +1148,24 @@ seastar::future<> OSD::handle_update_log_missing_reply(
   Ref<MOSDPGUpdateLogMissingReply> m)
 {
   m->decode_payload();
-  (void) pg_shard_manager.start_pg_operation<LogMissingRequestReply>(
+  return pg_shard_manager.start_pg_operation<LogMissingRequestReply>(
     std::move(conn),
-    std::move(m));
-  return seastar::now();
+    std::move(m)).second;
 }
 
-seastar::future<> OSD::handle_rep_op(crimson::net::ConnectionRef conn,
-                                    Ref<MOSDRepOp> m)
+seastar::future<> OSD::handle_rep_op(
+  crimson::net::ConnectionRef conn,
+  Ref<MOSDRepOp> m)
 {
   m->finish_decode();
-  std::ignore = pg_shard_manager.start_pg_operation<RepRequest>(
+  return pg_shard_manager.start_pg_operation<RepRequest>(
     std::move(conn),
-    std::move(m));
-  return seastar::now();
+    std::move(m)).second;
 }
 
-seastar::future<> OSD::handle_rep_op_reply(crimson::net::ConnectionRef conn,
-                                          Ref<MOSDRepOpReply> m)
+seastar::future<> OSD::handle_rep_op_reply(
+  crimson::net::ConnectionRef conn,
+  Ref<MOSDRepOpReply> m)
 {
   spg_t pgid = m->get_spg();
   return pg_shard_manager.with_pg(
@@ -1107,8 +1181,9 @@ seastar::future<> OSD::handle_rep_op_reply(crimson::net::ConnectionRef conn,
     });
 }
 
-seastar::future<> OSD::handle_scrub(crimson::net::ConnectionRef conn,
-                                   Ref<MOSDScrub2> m)
+seastar::future<> OSD::handle_scrub(
+  crimson::net::ConnectionRef conn,
+  Ref<MOSDScrub2> m)
 {
   if (m->fsid != superblock.cluster_fsid) {
     logger().warn("fsid mismatched");
@@ -1127,21 +1202,23 @@ seastar::future<> OSD::handle_scrub(crimson::net::ConnectionRef conn,
   });
 }
 
-seastar::future<> OSD::handle_mark_me_down(crimson::net::ConnectionRef conn,
-                                          Ref<MOSDMarkMeDown> m)
+seastar::future<> OSD::handle_mark_me_down(
+  crimson::net::ConnectionRef conn,
+  Ref<MOSDMarkMeDown> m)
 {
+  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
   if (pg_shard_manager.is_prestop()) {
     got_stop_ack();
   }
   return seastar::now();
 }
 
-seastar::future<> OSD::handle_recovery_subreq(crimson::net::ConnectionRef conn,
-                                  Ref<MOSDFastDispatchOp> m)
+seastar::future<> OSD::handle_recovery_subreq(
+  crimson::net::ConnectionRef conn,
+  Ref<MOSDFastDispatchOp> m)
 {
-  std::ignore = pg_shard_manager.start_pg_operation<RecoverySubRequest>(
-    conn, std::move(m));
-  return seastar::now();
+  return pg_shard_manager.start_pg_operation<RecoverySubRequest>(
+    conn, std::move(m)).second;
 }
 
 bool OSD::should_restart() const
@@ -1234,18 +1311,19 @@ seastar::future<> OSD::handle_peering_op(
   logger().debug("handle_peering_op on {} from {}", m->get_spg(), from);
   m->set_features(conn->get_features());
   std::unique_ptr<PGPeeringEvent> evt(m->get_event());
-  (void) pg_shard_manager.start_pg_operation<RemotePeeringEvent>(
+  return pg_shard_manager.start_pg_operation<RemotePeeringEvent>(
     conn,
     pg_shard_t{from, m->get_spg().shard},
     m->get_spg(),
-    std::move(*evt));
-  return seastar::now();
+    std::move(*evt)).second;
 }
 
 seastar::future<> OSD::check_osdmap_features()
 {
-  return store.write_meta("require_osd_release",
-                          stringify((int)osdmap->require_osd_release));
+  assert(seastar::this_shard_id() == PRIMARY_CORE);
+  return store.write_meta(
+      "require_osd_release",
+      stringify((int)osdmap->require_osd_release));
 }
 
 seastar::future<> OSD::prepare_to_stop()
index b3933e80c268cba7e4433a362867ca7136a49705..10ff60d47017fa0ac3d5969387f2e44582905393 100644 (file)
@@ -24,6 +24,7 @@
 #include "crimson/osd/osdmap_gate.h"
 #include "crimson/osd/pg_map.h"
 #include "crimson/osd/osd_operations/peering_event.h"
+#include "crimson/osd/state.h"
 
 #include "messages/MOSDOp.h"
 #include "osd/PeeringState.h"
@@ -90,6 +91,8 @@ class OSD final : public crimson::net::Dispatcher,
 
   ceph::mono_time startup_time;
 
+  seastar::shared_mutex handle_osd_map_lock;
+
   OSDSuperblock superblock;
 
   // Dispatcher methods
@@ -97,6 +100,8 @@ class OSD final : public crimson::net::Dispatcher,
   void ms_handle_reset(crimson::net::ConnectionRef conn, bool is_replace) final;
   void ms_handle_remote_reset(crimson::net::ConnectionRef conn) final;
 
+  std::optional<seastar::future<>> do_ms_dispatch(crimson::net::ConnectionRef, MessageRef);
+
   // mgr::WithStats methods
   // pg statistics including osd ones
   osd_stat_t osd_stat;
@@ -108,6 +113,11 @@ class OSD final : public crimson::net::Dispatcher,
   void handle_authentication(const EntityName& name,
                             const AuthCapsInfo& caps) final;
 
+  seastar::sharded<PGShardMapping> pg_to_shard_mappings;
+  seastar::sharded<OSDSingletonState> osd_singleton_state;
+  seastar::sharded<OSDState> osd_states;
+  seastar::sharded<ShardServices> shard_services;
+
   crimson::osd::PGShardManager pg_shard_manager;
 
   std::unique_ptr<Heartbeat> heartbeat;
@@ -126,6 +136,10 @@ public:
       crimson::net::MessengerRef hb_back_msgr);
   ~OSD() final;
 
+  auto &get_pg_shard_manager() {
+    return pg_shard_manager;
+  }
+
   seastar::future<> open_meta_coll();
   static seastar::future<OSDMeta> open_or_create_meta_coll(
     crimson::os::FuturizedStore &store
@@ -146,6 +160,10 @@ public:
   /// @return the seq id of the pg stats being sent
   uint64_t send_pg_stats();
 
+  auto &get_shard_services() {
+    return shard_services.local();
+  }
+
 private:
   static seastar::future<> _write_superblock(
     crimson::os::FuturizedStore &store,
@@ -161,29 +179,29 @@ private:
 
   seastar::future<> osdmap_subscribe(version_t epoch, bool force_request);
 
+  seastar::future<> start_asok_admin();
+
   void write_superblock(ceph::os::Transaction& t);
   seastar::future<> read_superblock();
 
-  bool require_mon_peer(crimson::net::Connection *conn, Ref<Message> m);
-
-  seastar::future<> handle_osd_map(crimson::net::ConnectionRef conn,
-                                   Ref<MOSDMap> m);
+  seastar::future<> handle_osd_map(Ref<MOSDMap> m);
+  seastar::future<> _handle_osd_map(Ref<MOSDMap> m);
   seastar::future<> handle_pg_create(crimson::net::ConnectionRef conn,
-                                    Ref<MOSDPGCreate2> m);
+                                     Ref<MOSDPGCreate2> m);
   seastar::future<> handle_osd_op(crimson::net::ConnectionRef conn,
-                                 Ref<MOSDOp> m);
+                                  Ref<MOSDOp> m);
   seastar::future<> handle_rep_op(crimson::net::ConnectionRef conn,
-                                 Ref<MOSDRepOp> m);
+                                  Ref<MOSDRepOp> m);
   seastar::future<> handle_rep_op_reply(crimson::net::ConnectionRef conn,
-                                       Ref<MOSDRepOpReply> m);
+                                        Ref<MOSDRepOpReply> m);
   seastar::future<> handle_peering_op(crimson::net::ConnectionRef conn,
-                                     Ref<MOSDPeeringOp> m);
+                                      Ref<MOSDPeeringOp> m);
   seastar::future<> handle_recovery_subreq(crimson::net::ConnectionRef conn,
-                                          Ref<MOSDFastDispatchOp> m);
+                                           Ref<MOSDFastDispatchOp> m);
   seastar::future<> handle_scrub(crimson::net::ConnectionRef conn,
-                                Ref<MOSDScrub2> m);
+                                 Ref<MOSDScrub2> m);
   seastar::future<> handle_mark_me_down(crimson::net::ConnectionRef conn,
-                                       Ref<MOSDMarkMeDown> m);
+                                        Ref<MOSDMarkMeDown> m);
 
   seastar::future<> committed_osd_maps(version_t first,
                                        version_t last,
@@ -192,20 +210,12 @@ private:
   seastar::future<> check_osdmap_features();
 
   seastar::future<> handle_command(crimson::net::ConnectionRef conn,
-                                  Ref<MCommand> m);
-  seastar::future<> start_asok_admin();
+                                   Ref<MCommand> m);
   seastar::future<> handle_update_log_missing(crimson::net::ConnectionRef conn,
                                               Ref<MOSDPGUpdateLogMissing> m);
   seastar::future<> handle_update_log_missing_reply(
     crimson::net::ConnectionRef conn,
     Ref<MOSDPGUpdateLogMissingReply> m);
-public:
-  auto &get_pg_shard_manager() {
-    return pg_shard_manager;
-  }
-  ShardServices &get_shard_services() {
-    return pg_shard_manager.get_shard_services();
-  }
 
 private:
   crimson::common::Gated gate;
index aa30b8190fde8f5f3afc34214b4c68b685e00d74..e40b2b2464be8b54d6e93c16beb3efdb80743668 100644 (file)
@@ -30,8 +30,8 @@ seastar::future<bufferlist> OSDMeta::load_map(epoch_t e)
                     osdmap_oid(e), 0, 0,
                     CEPH_OSD_OP_FLAG_FADVISE_WILLNEED).handle_error(
     read_errorator::all_same_way([e] {
-      throw std::runtime_error(fmt::format("read gave enoent on {}",
-                                           osdmap_oid(e)));
+      ceph_abort_msg(fmt::format("{} read gave enoent on {}",
+                                 __func__, osdmap_oid(e)));
     }));
 }
 
index 41ad87a32bf24a37a81a2caf8342f6d973b9a8da..953ec9595dae782ed6859e16b4be5b9cc2761e9f 100644 (file)
@@ -172,7 +172,7 @@ PglogBasedRecovery::do_recovery()
   });
 }
 
-PGPeeringPipeline &BackfillRecovery::bp(PG &pg)
+PGPeeringPipeline &BackfillRecovery::peering_pp(PG &pg)
 {
   return pg.peering_request_pg_pipeline;
 }
@@ -193,7 +193,7 @@ BackfillRecovery::do_recovery()
     // with the backfill_pipeline we protect it from a second entry from
     // the implementation of BackfillListener.
     // additionally, this stage serves to synchronize with PeeringEvent.
-    bp(*pg).process
+    peering_pp(*pg).process
   ).then_interruptible([this] {
     pg->get_recovery_handler()->dispatch_backfill_event(std::move(evt));
     return seastar::make_ready_future<bool>(false);
index 4a1ea1900c65fa60d33f7c110b7aa58bac502545..17f2cd57a305af359b27ac893c7d2a5d48481c0c 100644 (file)
@@ -116,7 +116,7 @@ private:
   boost::intrusive_ptr<const boost::statechart::event_base> evt;
   PipelineHandle handle;
 
-  static PGPeeringPipeline &bp(PG &pg);
+  static PGPeeringPipeline &peering_pp(PG &pg);
   interruptible_future<bool> do_recovery() override;
 };
 
index 9be2108bc9f071f03b1f9a1d0b6625e5d15906af..9374fbde2cc06446f29324e8cb3533eceeec9d77 100644 (file)
@@ -11,6 +11,7 @@
 #include "crimson/osd/osd_operation_external_tracking.h"
 #include "crimson/osd/osd_operations/client_request.h"
 #include "crimson/osd/osd_connection_priv.h"
+#include "osd/object_state_fmt.h"
 
 namespace {
   seastar::logger& logger() {
@@ -80,7 +81,7 @@ ConnectionPipeline &ClientRequest::get_connection_pipeline()
   return get_osd_priv(conn.get()).client_request_conn_pipeline;
 }
 
-ClientRequest::PGPipeline &ClientRequest::pp(PG &pg)
+ClientRequest::PGPipeline &ClientRequest::client_pp(PG &pg)
 {
   return pg.request_pg_pipeline;
 }
@@ -117,7 +118,7 @@ seastar::future<> ClientRequest::with_pg_int(
          return interruptor::now();
        });
       }
-      return ihref.enter_stage<interruptor>(pp(pg).await_map, *this
+      return ihref.enter_stage<interruptor>(client_pp(pg).await_map, *this
       ).then_interruptible([this, this_instance_id, &pg, &ihref] {
        logger().debug("{}.{}: after await_map stage", *this, this_instance_id);
        return ihref.enter_blocker(
@@ -125,7 +126,7 @@ seastar::future<> ClientRequest::with_pg_int(
          m->get_min_epoch(), nullptr);
       }).then_interruptible([this, this_instance_id, &pg, &ihref](auto map) {
        logger().debug("{}.{}: after wait_for_map", *this, this_instance_id);
-       return ihref.enter_stage<interruptor>(pp(pg).wait_for_active, *this);
+       return ihref.enter_stage<interruptor>(client_pp(pg).wait_for_active, *this);
       }).then_interruptible([this, this_instance_id, &pg, &ihref]() {
        logger().debug(
          "{}.{}: after wait_for_active stage", *this, this_instance_id);
@@ -196,7 +197,7 @@ ClientRequest::interruptible_future<>
 ClientRequest::process_op(instance_handle_t &ihref, Ref<PG> &pg)
 {
   return ihref.enter_stage<interruptor>(
-    pp(*pg).recover_missing,
+    client_pp(*pg).recover_missing,
     *this
   ).then_interruptible(
     [this, pg]() mutable {
@@ -218,7 +219,7 @@ ClientRequest::process_op(instance_handle_t &ihref, Ref<PG> &pg)
        reply->set_reply_versions(completed->version, completed->user_version);
         return conn->send(std::move(reply));
       } else {
-        return ihref.enter_stage<interruptor>(pp(*pg).get_obc, *this
+        return ihref.enter_stage<interruptor>(client_pp(*pg).get_obc, *this
        ).then_interruptible(
           [this, pg, &ihref]() mutable -> PG::load_obc_iertr::future<> {
           logger().debug("{}: in get_obc stage", *this);
@@ -226,11 +227,13 @@ ClientRequest::process_op(instance_handle_t &ihref, Ref<PG> &pg)
           return pg->with_locked_obc(
             m->get_hobj(), op_info,
             [this, pg, &ihref](auto obc) mutable {
-              return ihref.enter_stage<interruptor>(pp(*pg).process, *this
-            ).then_interruptible([this, pg, obc, &ihref]() mutable {
-              return do_process(ihref, pg, obc);
+              logger().debug("{}: got obc {}", *this, obc->obs);
+              return ihref.enter_stage<interruptor>(
+                client_pp(*pg).process, *this
+              ).then_interruptible([this, pg, obc, &ihref]() mutable {
+                return do_process(ihref, pg, obc);
+              });
             });
-          });
         });
       }
     });
@@ -311,12 +314,12 @@ ClientRequest::do_process(
   return pg->do_osd_ops(m, conn, obc, op_info, snapc).safe_then_unpack_interruptible(
     [this, pg, &ihref](auto submitted, auto all_completed) mutable {
       return submitted.then_interruptible([this, pg, &ihref] {
-       return ihref.enter_stage<interruptor>(pp(*pg).wait_repop, *this);
+       return ihref.enter_stage<interruptor>(client_pp(*pg).wait_repop, *this);
       }).then_interruptible(
        [this, pg, all_completed=std::move(all_completed), &ihref]() mutable {
          return all_completed.safe_then_interruptible(
            [this, pg, &ihref](MURef<MOSDOpReply> reply) {
-             return ihref.enter_stage<interruptor>(pp(*pg).send_reply, *this
+             return ihref.enter_stage<interruptor>(client_pp(*pg).send_reply, *this
              ).then_interruptible(
                [this, reply=std::move(reply)]() mutable {
                  logger().debug("{}: sending response", *this);
index 4338ac4169759120a5555afe1c0318834f7fc86d..b2dce1e873e1839c811711a1c8657116a03c6729 100644 (file)
@@ -244,7 +244,7 @@ private:
       Ref<PG> &pg);
   bool is_pg_op() const;
 
-  PGPipeline &pp(PG &pg);
+  PGPipeline &client_pp(PG &pg);
 
   template <typename Errorator>
   using interruptible_errorator =
index e71804d88ea718f58ff48cf0b1230ff55b376bf4..1e9b842b2ec7a61444d933b56b60009e2da1112c 100644 (file)
@@ -43,7 +43,7 @@ void InternalClientRequest::dump_detail(Formatter *f) const
 {
 }
 
-CommonPGPipeline& InternalClientRequest::pp()
+CommonPGPipeline& InternalClientRequest::client_pp()
 {
   return pg->request_pg_pipeline;
 }
@@ -56,7 +56,7 @@ seastar::future<> InternalClientRequest::start()
       logger().debug("{}: in repeat", *this);
       return interruptor::with_interruption([this]() mutable {
         return enter_stage<interruptor>(
-         pp().wait_for_active
+         client_pp().wait_for_active
         ).then_interruptible([this] {
           return with_blocking_event<PGActivationBlocker::BlockingEvent,
                                     interruptor>([this] (auto&& trigger) {
@@ -64,12 +64,12 @@ seastar::future<> InternalClientRequest::start()
           });
         }).then_interruptible([this] {
           return enter_stage<interruptor>(
-            pp().recover_missing);
+            client_pp().recover_missing);
         }).then_interruptible([this] {
           return do_recover_missing(pg, get_target_oid());
         }).then_interruptible([this] {
           return enter_stage<interruptor>(
-            pp().get_obc);
+            client_pp().get_obc);
         }).then_interruptible([this] () -> PG::load_obc_iertr::future<> {
           logger().debug("{}: getting obc lock", *this);
           return seastar::do_with(create_osd_ops(),
@@ -81,7 +81,8 @@ seastar::future<> InternalClientRequest::start()
             assert(ret == 0);
             return pg->with_locked_obc(get_target_oid(), op_info,
               [&osd_ops, this](auto obc) {
-              return enter_stage<interruptor>(pp().process).then_interruptible(
+              return enter_stage<interruptor>(client_pp().process
+              ).then_interruptible(
                 [obc=std::move(obc), &osd_ops, this] {
                 return pg->do_osd_ops(
                   std::move(obc),
index ca78905ea96078a6ce0199e18478a4d9c38c3ffd..8eed12e050e19fa6b212f1859c55bdbb43b4fe0a 100644 (file)
@@ -39,7 +39,7 @@ private:
   void print(std::ostream &) const final;
   void dump_detail(Formatter *f) const final;
 
-  CommonPGPipeline& pp();
+  CommonPGPipeline& client_pp();
 
   seastar::future<> do_process();
 
index 5dfb290f945c3fccdecb39c9ed2ed02d8cfd028c..739b46406500613057bad748e702333eac5c7a86 100644 (file)
@@ -49,7 +49,7 @@ ConnectionPipeline &LogMissingRequest::get_connection_pipeline()
   return get_osd_priv(conn.get()).replicated_request_conn_pipeline;
 }
 
-ClientRequest::PGPipeline &LogMissingRequest::pp(PG &pg)
+ClientRequest::PGPipeline &LogMissingRequest::client_pp(PG &pg)
 {
   return pg.request_pg_pipeline;
 }
@@ -61,7 +61,18 @@ seastar::future<> LogMissingRequest::with_pg(
 
   IRef ref = this;
   return interruptor::with_interruption([this, pg] {
-    return pg->do_update_log_missing(req, conn);
+    logger().debug("{}: pg present", *this);
+    return this->template enter_stage<interruptor>(client_pp(*pg).await_map
+    ).then_interruptible([this, pg] {
+      return this->template with_blocking_event<
+        PG_OSDMapGate::OSDMapBlocker::BlockingEvent
+      >([this, pg](auto &&trigger) {
+        return pg->osdmap_gate.wait_for_map(
+          std::move(trigger), req->min_epoch);
+      });
+    }).then_interruptible([this, pg](auto) {
+      return pg->do_update_log_missing(req, conn);
+    });
   }, [ref](std::exception_ptr) { return seastar::now(); }, pg);
 }
 
index 4ab87996f3afbf68f37b7b6d6a0031ab045cfeb8..71d0816fd201f247322790f67bae60d67246fd8b 100644 (file)
@@ -59,12 +59,14 @@ public:
     ConnectionPipeline::AwaitActive::BlockingEvent,
     ConnectionPipeline::AwaitMap::BlockingEvent,
     ConnectionPipeline::GetPG::BlockingEvent,
+    ClientRequest::PGPipeline::AwaitMap::BlockingEvent,
+    PG_OSDMapGate::OSDMapBlocker::BlockingEvent,
     PGMap::PGCreationBlockingEvent,
     OSD_OSDMapGate::OSDMapBlocker::BlockingEvent
   > tracking_events;
 
 private:
-  ClientRequest::PGPipeline &pp(PG &pg);
+  ClientRequest::PGPipeline &client_pp(PG &pg);
 
   crimson::net::ConnectionRef conn;
   // must be after `conn` to ensure the ConnectionPipeline's is alive
index 95a968c1455d2d737df454372adcdc1012517de2..b4bf2938e05bca0e1b93255c1d8596df982dd07a 100644 (file)
@@ -49,7 +49,7 @@ ConnectionPipeline &LogMissingRequestReply::get_connection_pipeline()
   return get_osd_priv(conn.get()).replicated_request_conn_pipeline;
 }
 
-ClientRequest::PGPipeline &LogMissingRequestReply::pp(PG &pg)
+ClientRequest::PGPipeline &LogMissingRequestReply::client_pp(PG &pg)
 {
   return pg.request_pg_pipeline;
 }
index cb39e9f6c2b42eca1a360c9ce9bf6766270b6576..c89131fec1d7deeb80b6f5ad8dabc1dea4bedfce 100644 (file)
@@ -64,7 +64,7 @@ public:
   > tracking_events;
 
 private:
-  ClientRequest::PGPipeline &pp(PG &pg);
+  ClientRequest::PGPipeline &client_pp(PG &pg);
 
   crimson::net::ConnectionRef conn;
   // must be after `conn` to ensure the ConnectionPipeline's is alive
index b323b4a817bf29262c75b38001bb154cd8d6976a..ea4662bd01e0b72b9680bd8d1f4eac2584966569 100644 (file)
@@ -54,7 +54,7 @@ void PeeringEvent<T>::dump_detail(Formatter *f) const
 
 
 template <class T>
-PGPeeringPipeline &PeeringEvent<T>::pp(PG &pg)
+PGPeeringPipeline &PeeringEvent<T>::peering_pp(PG &pg)
 {
   return pg.peering_request_pg_pipeline;
 }
@@ -73,7 +73,7 @@ seastar::future<> PeeringEvent<T>::with_pg(
   using interruptor = typename T::interruptor;
   return interruptor::with_interruption([this, pg, &shard_services] {
     logger().debug("{}: pg present", *this);
-    return this->template enter_stage<interruptor>(pp(*pg).await_map
+    return this->template enter_stage<interruptor>(peering_pp(*pg).await_map
     ).then_interruptible([this, pg] {
       return this->template with_blocking_event<
        PG_OSDMapGate::OSDMapBlocker::BlockingEvent
@@ -82,7 +82,7 @@ seastar::future<> PeeringEvent<T>::with_pg(
            std::move(trigger), evt.get_epoch_sent());
        });
     }).then_interruptible([this, pg](auto) {
-      return this->template enter_stage<interruptor>(pp(*pg).process);
+      return this->template enter_stage<interruptor>(peering_pp(*pg).process);
     }).then_interruptible([this, pg, &shard_services] {
       return pg->do_peering_event(evt, ctx
       ).then_interruptible([this, pg, &shard_services] {
index d9c9da58a17fcc088d9579ab784c2717830f0976..e94caead199256ac543039fc656f522271bb283c 100644 (file)
@@ -51,7 +51,7 @@ public:
   static constexpr OperationTypeCode type = OperationTypeCode::peering_event;
 
 protected:
-  PGPeeringPipeline &pp(PG &pg);
+  PGPeeringPipeline &peering_pp(PG &pg);
 
   PeeringCtx ctx;
   pg_shard_t from;
index 2514a0e748145810bdb7a0799f4b70a7dc5589d3..3706af810557e327c9f8eeaeb6bd62a433f26619 100644 (file)
@@ -24,7 +24,10 @@ PGAdvanceMap::PGAdvanceMap(
   ShardServices &shard_services, Ref<PG> pg, epoch_t to,
   PeeringCtx &&rctx, bool do_init)
   : shard_services(shard_services), pg(pg), to(to),
-    rctx(std::move(rctx)), do_init(do_init) {}
+    rctx(std::move(rctx)), do_init(do_init)
+{
+  logger().debug("{}: created", *this);
+}
 
 PGAdvanceMap::~PGAdvanceMap() {}
 
@@ -52,6 +55,11 @@ void PGAdvanceMap::dump_detail(Formatter *f) const
   f->close_section();
 }
 
+PGPeeringPipeline &PGAdvanceMap::peering_pp(PG &pg)
+{
+  return pg.peering_request_pg_pipeline;
+}
+
 seastar::future<> PGAdvanceMap::start()
 {
   using cached_map_t = OSDMapService::cached_map_t;
@@ -60,8 +68,17 @@ seastar::future<> PGAdvanceMap::start()
 
   IRef ref = this;
   return enter_stage<>(
-    pg->peering_request_pg_pipeline.process
+    peering_pp(*pg).process
   ).then([this] {
+    /*
+     * PGAdvanceMap is scheduled at pg creation and when
+     * broadcasting new osdmaps to pgs. We are not able to serialize
+     * between the two different PGAdvanceMap callers since a new pg
+     * will get advanced to the latest osdmap at it's creation.
+     * As a result, we may need to adjust the PGAdvance operation
+     * 'from' epoch.
+     * See: https://tracker.ceph.com/issues/61744
+     */
     from = pg->get_osdmap_epoch();
     auto fut = seastar::now();
     if (do_init) {
@@ -71,10 +88,13 @@ seastar::future<> PGAdvanceMap::start()
       });
     }
     return fut.then([this] {
+      ceph_assert(std::cmp_less_equal(*from, to));
       return seastar::do_for_each(
        boost::make_counting_iterator(*from + 1),
        boost::make_counting_iterator(to + 1),
        [this](epoch_t next_epoch) {
+         logger().debug("{}: start: getting map {}",
+                        *this, next_epoch);
          return shard_services.get_map(next_epoch).then(
            [this] (cached_map_t&& next_map) {
              logger().debug("{}: advancing map to {}",
index c7277f790b3d289166cf6d48b0c0aa6f31ae5cb2..b712cc12e477835fd02284e87bc1c8329923c1b7 100644 (file)
@@ -49,6 +49,9 @@ public:
   std::tuple<
     PGPeeringPipeline::Process::BlockingEvent
   > tracking_events;
+
+private:
+  PGPeeringPipeline &peering_pp(PG &pg);
 };
 
 }
index f7d4fa68b2b30443836c191c9d2665bbdb980321..09217575c8ff31a94dd3277a5752f1ea1db78646 100644 (file)
@@ -21,7 +21,7 @@ namespace crimson::osd {
 RepRequest::RepRequest(crimson::net::ConnectionRef&& conn,
                       Ref<MOSDRepOp> &&req)
   : conn{std::move(conn)},
-    req{req}
+    req{std::move(req)}
 {}
 
 void RepRequest::print(std::ostream& os) const
@@ -49,7 +49,7 @@ ConnectionPipeline &RepRequest::get_connection_pipeline()
   return get_osd_priv(conn.get()).replicated_request_conn_pipeline;
 }
 
-ClientRequest::PGPipeline &RepRequest::pp(PG &pg)
+ClientRequest::PGPipeline &RepRequest::client_pp(PG &pg)
 {
   return pg.request_pg_pipeline;
 }
@@ -61,7 +61,7 @@ seastar::future<> RepRequest::with_pg(
   IRef ref = this;
   return interruptor::with_interruption([this, pg] {
     logger().debug("{}: pg present", *this);
-    return this->template enter_stage<interruptor>(pp(*pg).await_map
+    return this->template enter_stage<interruptor>(client_pp(*pg).await_map
     ).then_interruptible([this, pg] {
       return this->template with_blocking_event<
         PG_OSDMapGate::OSDMapBlocker::BlockingEvent
index 78d97ecf439fa0d85cd3f332ec39ed0fd64df109..c742888d9390a5c58012f389db8bb8eba6379b50 100644 (file)
@@ -66,7 +66,7 @@ public:
   > tracking_events;
 
 private:
-  ClientRequest::PGPipeline &pp(PG &pg);
+  ClientRequest::PGPipeline &client_pp(PG &pg);
 
   crimson::net::ConnectionRef conn;
   PipelineHandle handle;
index e63e78481ac1b60fa840f5a48ac24a7f658335c3..e4a1b04df142fa39da427734bc28a319a021c14f 100644 (file)
@@ -30,6 +30,15 @@ namespace crimson {
 
 namespace crimson::osd {
 
+PG::interruptible_future<>
+PG::SnapTrimMutex::lock(SnapTrimEvent &st_event) noexcept
+{
+  return st_event.enter_stage<interruptor>(wait_pg
+  ).then_interruptible([this] {
+    return mutex.lock();
+  });
+}
+
 void SnapTrimEvent::SubOpBlocker::dump_detail(Formatter *f) const
 {
   f->open_array_section("dependent_operations");
@@ -83,7 +92,7 @@ SnapTrimEvent::start()
   });
 }
 
-CommonPGPipeline& SnapTrimEvent::pp()
+CommonPGPipeline& SnapTrimEvent::client_pp()
 {
   return pg->request_pg_pipeline;
 }
@@ -94,7 +103,7 @@ SnapTrimEvent::with_pg(
 {
   return interruptor::with_interruption([&shard_services, this] {
     return enter_stage<interruptor>(
-      pp().wait_for_active
+      client_pp().wait_for_active
     ).then_interruptible([this] {
       return with_blocking_event<PGActivationBlocker::BlockingEvent,
                                  interruptor>([this] (auto&& trigger) {
@@ -102,16 +111,18 @@ SnapTrimEvent::with_pg(
       });
     }).then_interruptible([this] {
       return enter_stage<interruptor>(
-        pp().recover_missing);
+        client_pp().recover_missing);
     }).then_interruptible([] {
       //return do_recover_missing(pg, get_target_oid());
       return seastar::now();
     }).then_interruptible([this] {
       return enter_stage<interruptor>(
-        pp().get_obc);
+        client_pp().get_obc);
+    }).then_interruptible([this] {
+      return pg->snaptrim_mutex.lock(*this);
     }).then_interruptible([this] {
       return enter_stage<interruptor>(
-        pp().process);
+        client_pp().process);
     }).then_interruptible([&shard_services, this] {
       return interruptor::async([this] {
         std::vector<hobject_t> to_trim;
@@ -140,27 +151,32 @@ SnapTrimEvent::with_pg(
         if (to_trim.empty()) {
           // the legit ENOENT -> done
           logger().debug("{}: to_trim is empty! Stopping iteration", *this);
+         pg->snaptrim_mutex.unlock();
           return snap_trim_iertr::make_ready_future<seastar::stop_iteration>(
             seastar::stop_iteration::yes);
         }
-        for (const auto& object : to_trim) {
-          logger().debug("{}: trimming {}", *this, object);
-          auto [op, fut] = shard_services.start_operation_may_interrupt<
-           interruptor, SnapTrimObjSubEvent>(
-            pg,
-            object,
-            snapid);
-          subop_blocker.emplace_back(
-            op->get_id(),
-            std::move(fut)
-          );
-        }
-        return enter_stage<interruptor>(
-          wait_subop
-        ).then_interruptible([this] {
+        return [&shard_services, this](const auto &to_trim) {
+         for (const auto& object : to_trim) {
+           logger().debug("{}: trimming {}", *this, object);
+           auto [op, fut] = shard_services.start_operation_may_interrupt<
+             interruptor, SnapTrimObjSubEvent>(
+             pg,
+             object,
+             snapid);
+           subop_blocker.emplace_back(
+             op->get_id(),
+             std::move(fut)
+           );
+         }
+         return interruptor::now();
+       }(to_trim).then_interruptible([this] {
+         return enter_stage<interruptor>(wait_subop);
+       }).then_interruptible([this] {
           logger().debug("{}: awaiting completion", *this);
           return subop_blocker.wait_completion();
-        }).safe_then_interruptible([this] {
+        }).finally([this] {
+         pg->snaptrim_mutex.unlock();
+       }).safe_then_interruptible([this] {
           if (!needs_pause) {
             return interruptor::now();
           }
@@ -191,7 +207,7 @@ SnapTrimEvent::with_pg(
 }
 
 
-CommonPGPipeline& SnapTrimObjSubEvent::pp()
+CommonPGPipeline& SnapTrimObjSubEvent::client_pp()
 {
   return pg->request_pg_pipeline;
 }
@@ -481,7 +497,7 @@ SnapTrimObjSubEvent::with_pg(
   ShardServices &shard_services, Ref<PG> _pg)
 {
   return enter_stage<interruptor>(
-    pp().wait_for_active
+    client_pp().wait_for_active
   ).then_interruptible([this] {
     return with_blocking_event<PGActivationBlocker::BlockingEvent,
                                interruptor>([this] (auto&& trigger) {
@@ -489,23 +505,23 @@ SnapTrimObjSubEvent::with_pg(
     });
   }).then_interruptible([this] {
     return enter_stage<interruptor>(
-      pp().recover_missing);
+      client_pp().recover_missing);
   }).then_interruptible([] {
     //return do_recover_missing(pg, get_target_oid());
     return seastar::now();
   }).then_interruptible([this] {
     return enter_stage<interruptor>(
-      pp().get_obc);
+      client_pp().get_obc);
   }).then_interruptible([this] {
     logger().debug("{}: getting obc for {}", *this, coid);
     // end of commonality
-    // with_head_and_clone_obc lock both clone's and head's obcs
-    return pg->obc_loader.with_head_and_clone_obc<RWState::RWWRITE>(
+    // with_clone_obc_direct lock both clone's and head's obcs
+    return pg->obc_loader.with_clone_obc_direct<RWState::RWWRITE>(
       coid,
       [this](auto head_obc, auto clone_obc) {
       logger().debug("{}: got clone_obc={}", *this, clone_obc->get_oid());
       return enter_stage<interruptor>(
-        pp().process
+        client_pp().process
       ).then_interruptible(
         [this,clone_obc=std::move(clone_obc), head_obc=std::move(head_obc)]() mutable {
         logger().debug("{}: processing clone_obc={}", *this, clone_obc->get_oid());
index f4ae1bf0630c9de8513cbc757dc57241f687c0fe..a3a970a04c7d017a5f65ae5b1743ea96ac29bdf3 100644 (file)
@@ -25,7 +25,6 @@ namespace crimson::osd {
 
 class OSD;
 class ShardServices;
-class PG;
 
 // trim up to `max` objects for snapshot `snapid
 class SnapTrimEvent final : public PhasedOperationT<SnapTrimEvent> {
@@ -58,7 +57,7 @@ public:
     ShardServices &shard_services, Ref<PG> pg);
 
 private:
-  CommonPGPipeline& pp();
+  CommonPGPipeline& client_pp();
 
   // bases on 998cb8c141bb89aafae298a9d5e130fbd78fe5f2
   struct SubOpBlocker : crimson::BlockerT<SubOpBlocker> {
@@ -107,9 +106,12 @@ public:
     CommonPGPipeline::GetOBC::BlockingEvent,
     CommonPGPipeline::Process::BlockingEvent,
     WaitSubop::BlockingEvent,
+    PG::SnapTrimMutex::WaitPG::BlockingEvent,
     WaitTrimTimer::BlockingEvent,
     CompletionEvent
   > tracking_events;
+
+  friend class PG::SnapTrimMutex;
 };
 
 // remove single object. a SnapTrimEvent can create multiple subrequests.
@@ -141,7 +143,7 @@ public:
   remove_or_update_iertr::future<> with_pg(
     ShardServices &shard_services, Ref<PG> pg);
 
-  CommonPGPipeline& pp();
+  CommonPGPipeline& client_pp();
 
 private:
   object_stat_sum_t delta_stats;
index b1fb669242cde65ef728b0b0bab11dacaf88dbb6..171ec436d0e22ea764f6ade0884ea4feca618051 100644 (file)
@@ -54,6 +54,10 @@ seastar::future<epoch_t> OSDMapGate<OSDMapGateTypeV>::wait_for_map(
 
 template <OSDMapGateType OSDMapGateTypeV>
 void OSDMapGate<OSDMapGateTypeV>::got_map(epoch_t epoch) {
+  if (epoch == 0) {
+    return;
+  }
+  ceph_assert(epoch > current);
   current = epoch;
   auto first = waiting_peering.begin();
   auto last = waiting_peering.upper_bound(epoch);
index 3d5bb20d408b33c0b3eb995e3d9a0ac8d8ffe5b8..7cf3b158c89cfff19e0bd55ba49270048816136f 100644 (file)
@@ -535,7 +535,7 @@ void PG::on_active_advmap(const OSDMapRef &osdmap)
     }
     logger().info("{}: {} new removed snaps {}, snap_trimq now{}",
                   *this, __func__, it->second, snap_trimq);
-    assert(!bad || local_conf().get_val<bool>("osd_debug_verify_cached_snaps"));
+    assert(!bad || !local_conf().get_val<bool>("osd_debug_verify_cached_snaps"));
   }
 }
 
@@ -1510,6 +1510,7 @@ bool PG::is_degraded_or_backfilling_object(const hobject_t& soid) const {
     // we are backfilling it
     if (is_backfill_target(peer) &&
         peering_state.get_peer_info(peer).last_backfill <= soid &&
+        recovery_handler->backfill_state &&
        recovery_handler->backfill_state->get_last_backfill_started() >= soid &&
        recovery_backend->is_recovering(soid)) {
       return true;
index 3a7d21ba9d3d0204a5988d561939b6f03b2d7044..d96db2e205665b61ba7c1f6c91055ab5b14d8291 100644 (file)
@@ -61,6 +61,7 @@ namespace crimson::os {
 namespace crimson::osd {
 class OpsExecuter;
 class BackfillRecovery;
+class SnapTrimEvent;
 
 class PG : public boost::intrusive_ref_counter<
   PG,
@@ -552,6 +553,20 @@ public:
     eversion_t &version);
 
 private:
+
+  struct SnapTrimMutex {
+    struct WaitPG : OrderedConcurrentPhaseT<WaitPG> {
+      static constexpr auto type_name = "SnapTrimEvent::wait_pg";
+    } wait_pg;
+    seastar::shared_mutex mutex;
+
+    interruptible_future<> lock(SnapTrimEvent &st_event) noexcept;
+
+    void unlock() noexcept {
+      mutex.unlock();
+    }
+  } snaptrim_mutex;
+
   using do_osd_ops_ertr = crimson::errorator<
    crimson::ct_error::eagain>;
   using do_osd_ops_iertr =
index d69e5e2042ecdbb58c7f73a891ae429bec046890..02acb9a55d3f5a0685a7da222ba39fcc7ffe2c9f 100644 (file)
@@ -1338,13 +1338,19 @@ PGBackend::omap_get_header(
   OSDOp& osd_op,
   object_stat_sum_t& delta_stats) const
 {
-  return omap_get_header(coll, ghobject_t{os.oi.soid}).safe_then_interruptible(
-    [&delta_stats, &osd_op] (ceph::bufferlist&& header) {
-      osd_op.outdata = std::move(header);
-      delta_stats.num_rd_kb += shift_round_up(osd_op.outdata.length(), 10);
-      delta_stats.num_rd++;
-      return seastar::now();
-    });
+  if (os.oi.is_omap()) {
+    return omap_get_header(coll, ghobject_t{os.oi.soid}).safe_then_interruptible(
+      [&delta_stats, &osd_op] (ceph::bufferlist&& header) {
+        osd_op.outdata = std::move(header);
+        delta_stats.num_rd_kb += shift_round_up(osd_op.outdata.length(), 10);
+        delta_stats.num_rd++;
+        return seastar::now();
+      });
+  } else {
+    // no omap? return empty data but not ENOENT. This is imporant for
+    // the case when the object is being creating due to to may_write().
+    return seastar::now();
+  }
 }
 
 PGBackend::ll_read_ierrorator::future<>
index f4b38ae45f6c81cb97fdcd059e2b7a19a411697b..3269de43497f24dfc76163a84bef012199fa9c5a 100644 (file)
@@ -21,9 +21,11 @@ class PG;
 /**
  * PGShardMapping
  *
- * Maps pgs to shards.
+ * Maintains a mapping from spg_t to the core containing that PG.  Internally, each
+ * core has a local copy of the mapping to enable core-local lookups.  Updates
+ * are proxied to core 0, and the back out to all other cores -- see maybe_create_pg.
  */
-class PGShardMapping {
+class PGShardMapping : public seastar::peering_sharded_service<PGShardMapping> {
 public:
   /// Returns mapping if present, NULL_CORE otherwise
   core_id_t get_pg_mapping(spg_t pgid) {
@@ -33,44 +35,69 @@ public:
   }
 
   /// Returns mapping for pgid, creates new one if it doesn't already exist
-  core_id_t maybe_create_pg(spg_t pgid, core_id_t core = NULL_CORE) {
-    auto [insert_iter, inserted] = pg_to_core.emplace(pgid, core);
-    if (!inserted) {
-      ceph_assert_always(insert_iter->second != NULL_CORE);
+  seastar::future<core_id_t> maybe_create_pg(
+    spg_t pgid,
+    core_id_t core = NULL_CORE) {
+    auto find_iter = pg_to_core.find(pgid);
+    if (find_iter != pg_to_core.end()) {
+      ceph_assert_always(find_iter->second != NULL_CORE);
       if (core != NULL_CORE) {
-       ceph_assert_always(insert_iter->second == core);
+        ceph_assert_always(find_iter->second == core);
       }
-      return insert_iter->second;
+      return seastar::make_ready_future<core_id_t>(find_iter->second);
     } else {
-      ceph_assert_always(core_to_num_pgs.size() > 0);
-      std::map<core_id_t, unsigned>::iterator core_iter;
-      if (core == NULL_CORE) {
-        core_iter = std::min_element(
-          core_to_num_pgs.begin(),
-          core_to_num_pgs.end(),
-          [](const auto &left, const auto &right) {
-            return left.second < right.second;
+      return container().invoke_on(0,[pgid, core]
+        (auto &primary_mapping) {
+        auto [insert_iter, inserted] = primary_mapping.pg_to_core.emplace(pgid, core);
+        ceph_assert_always(inserted);
+        ceph_assert_always(primary_mapping.core_to_num_pgs.size() > 0);
+        std::map<core_id_t, unsigned>::iterator core_iter;
+        if (core == NULL_CORE) {
+          core_iter = std::min_element(
+            primary_mapping.core_to_num_pgs.begin(),
+            primary_mapping.core_to_num_pgs.end(),
+              [](const auto &left, const auto &right) {
+              return left.second < right.second;
+          });
+        } else {
+          core_iter = primary_mapping.core_to_num_pgs.find(core);
+        }
+        ceph_assert_always(primary_mapping.core_to_num_pgs.end() != core_iter);
+        insert_iter->second = core_iter->first;
+        core_iter->second++;
+        return primary_mapping.container().invoke_on_others(
+          [pgid = insert_iter->first, core = insert_iter->second]
+          (auto &other_mapping) {
+          ceph_assert_always(core != NULL_CORE);
+          auto [insert_iter, inserted] = other_mapping.pg_to_core.emplace(pgid, core);
+          ceph_assert_always(inserted);
         });
-      } else {
-       core_iter = core_to_num_pgs.find(core);
-      }
-      ceph_assert_always(core_to_num_pgs.end() != core_iter);
-      insert_iter->second = core_iter->first;
-      core_iter->second++;
-      return insert_iter->second;
+      }).then([this, pgid] {
+        auto find_iter = pg_to_core.find(pgid);
+        return seastar::make_ready_future<core_id_t>(find_iter->second);
+      });
     }
   }
 
   /// Remove pgid
-  void remove_pg(spg_t pgid) {
-    auto iter = pg_to_core.find(pgid);
-    ceph_assert_always(iter != pg_to_core.end());
-    ceph_assert_always(iter->second != NULL_CORE);
-    auto count_iter = core_to_num_pgs.find(iter->second);
-    ceph_assert_always(count_iter != core_to_num_pgs.end());
-    ceph_assert_always(count_iter->second > 0);
-    --(count_iter->second);
-    pg_to_core.erase(iter);
+  seastar::future<> remove_pg(spg_t pgid) {
+    return container().invoke_on(0, [pgid](auto &primary_mapping) {
+      auto iter = primary_mapping.pg_to_core.find(pgid);
+      ceph_assert_always(iter != primary_mapping.pg_to_core.end());
+      ceph_assert_always(iter->second != NULL_CORE);
+      auto count_iter = primary_mapping.core_to_num_pgs.find(iter->second);
+      ceph_assert_always(count_iter != primary_mapping.core_to_num_pgs.end());
+      ceph_assert_always(count_iter->second > 0);
+      --(count_iter->second);
+      primary_mapping.pg_to_core.erase(iter);
+      return primary_mapping.container().invoke_on_others(
+        [pgid](auto &other_mapping) {
+        auto iter = other_mapping.pg_to_core.find(pgid);
+        ceph_assert_always(iter != other_mapping.pg_to_core.end());
+        ceph_assert_always(iter->second != NULL_CORE);
+        other_mapping.pg_to_core.erase(iter);
+      });
+    });
   }
 
   size_t get_num_pgs() const { return pg_to_core.size(); }
index 03174b1df0509256048b729126e14ede02c67141..6061c856be26348435c5c74e878b378434ab8d32 100644 (file)
@@ -12,39 +12,6 @@ namespace {
 
 namespace crimson::osd {
 
-seastar::future<> PGShardManager::start(
-  const int whoami,
-  crimson::net::Messenger &cluster_msgr,
-  crimson::net::Messenger &public_msgr,
-  crimson::mon::Client &monc,
-  crimson::mgr::Client &mgrc,
-  crimson::os::FuturizedStore &store)
-{
-  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
-  return osd_singleton_state.start_single(
-    whoami, std::ref(cluster_msgr), std::ref(public_msgr),
-    std::ref(monc), std::ref(mgrc)
-  ).then([this, whoami, &store] {
-    ceph::mono_time startup_time = ceph::mono_clock::now();
-    return shard_services.start(
-      std::ref(osd_singleton_state),
-      whoami,
-      startup_time,
-      osd_singleton_state.local().perf,
-      osd_singleton_state.local().recoverystate_perf,
-      std::ref(store));
-  });
-}
-
-seastar::future<> PGShardManager::stop()
-{
-  ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
-  return shard_services.stop(
-  ).then([this] {
-    return osd_singleton_state.stop();
-  });
-}
-
 seastar::future<> PGShardManager::load_pgs(crimson::os::FuturizedStore& store)
 {
   ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
@@ -56,12 +23,12 @@ seastar::future<> PGShardManager::load_pgs(crimson::os::FuturizedStore& store)
         auto[coll, shard_core] = coll_core;
        spg_t pgid;
        if (coll.is_pg(&pgid)) {
-         auto core = get_osd_singleton_state(
-         ).pg_to_shard_mapping.maybe_create_pg(
-           pgid, shard_core);
-         return with_remote_shard_state(
-           core,
-           [pgid](
+          return get_pg_to_shard_mapping().maybe_create_pg(
+            pgid, shard_core
+          ).then([this, pgid] (auto core) {
+            return this->template with_remote_shard_state(
+              core,
+              [pgid](
              PerShardState &per_shard_state,
              ShardServices &shard_services) {
              return shard_services.load_pg(
@@ -72,6 +39,7 @@ seastar::future<> PGShardManager::load_pgs(crimson::os::FuturizedStore& store)
                return seastar::now();
              });
            });
+          });
        } else if (coll.is_temp(&pgid)) {
          logger().warn(
            "found temp collection on crimson osd, should be impossible: {}",
@@ -117,8 +85,13 @@ seastar::future<> PGShardManager::broadcast_map_to_pgs(epoch_t epoch)
       local_service, epoch
     );
   }).then([this, epoch] {
-    get_osd_singleton_state().osdmap_gate.got_map(epoch);
-    return seastar::now();
+    logger().debug("PGShardManager::broadcast_map_to_pgs "
+                   "broadcasted up to {}",
+                    epoch);
+    return shard_services.invoke_on_all([epoch](auto &local_service) {
+      local_service.local_state.osdmap_gate.got_map(epoch);
+      return seastar::now();
+    });
   });
 }
 
index fd99304ba848674d5d2b3e34bc61882be6250433..2f3a3015d1cd67117e6888081c805873c4cf1243 100644 (file)
@@ -24,8 +24,9 @@ namespace crimson::osd {
  * etc)
  */
 class PGShardManager {
-  seastar::sharded<OSDSingletonState> osd_singleton_state;
-  seastar::sharded<ShardServices> shard_services;
+  seastar::sharded<OSDSingletonState> &osd_singleton_state;
+  seastar::sharded<ShardServices> &shard_services;
+  seastar::sharded<PGShardMapping> &pg_to_shard_mapping;
 
 #define FORWARD_CONST(FROM_METHOD, TO_METHOD, TARGET)          \
   template <typename... Args>                                  \
@@ -46,16 +47,13 @@ public:
   using cached_map_t = OSDMapService::cached_map_t;
   using local_cached_map_t = OSDMapService::local_cached_map_t;
 
-  PGShardManager() = default;
-
-  seastar::future<> start(
-    const int whoami,
-    crimson::net::Messenger &cluster_msgr,
-    crimson::net::Messenger &public_msgr,
-    crimson::mon::Client &monc,
-    crimson::mgr::Client &mgrc,
-    crimson::os::FuturizedStore &store);
-  seastar::future<> stop();
+  PGShardManager(
+    seastar::sharded<OSDSingletonState> &osd_singleton_state,
+    seastar::sharded<ShardServices> &shard_services,
+    seastar::sharded<PGShardMapping> &pg_to_shard_mapping)
+  : osd_singleton_state(osd_singleton_state),
+    shard_services(shard_services),
+    pg_to_shard_mapping(pg_to_shard_mapping) {}
 
   auto &get_osd_singleton_state() {
     ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
@@ -66,15 +64,15 @@ public:
     return osd_singleton_state.local();
   }
   auto &get_shard_services() {
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return shard_services.local();
   }
   auto &get_shard_services() const {
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return shard_services.local();
   }
   auto &get_local_state() { return get_shard_services().local_state; }
   auto &get_local_state() const { return get_shard_services().local_state; }
+  auto &get_pg_to_shard_mapping() { return pg_to_shard_mapping.local(); }
+  auto &get_pg_to_shard_mapping() const { return pg_to_shard_mapping.local(); }
 
   seastar::future<> update_map(local_cached_map_t &&map) {
     get_osd_singleton_state().update_map(
@@ -109,22 +107,22 @@ public:
   FORWARD_TO_OSD_SINGLETON(send_pg_created)
 
   // osd state forwards
-  FORWARD(is_active, is_active, get_osd_singleton_state().osd_state)
-  FORWARD(is_preboot, is_preboot, get_osd_singleton_state().osd_state)
-  FORWARD(is_booting, is_booting, get_osd_singleton_state().osd_state)
-  FORWARD(is_stopping, is_stopping, get_osd_singleton_state().osd_state)
-  FORWARD(is_prestop, is_prestop, get_osd_singleton_state().osd_state)
-  FORWARD(is_initializing, is_initializing, get_osd_singleton_state().osd_state)
-  FORWARD(set_prestop, set_prestop, get_osd_singleton_state().osd_state)
-  FORWARD(set_preboot, set_preboot, get_osd_singleton_state().osd_state)
-  FORWARD(set_booting, set_booting, get_osd_singleton_state().osd_state)
-  FORWARD(set_stopping, set_stopping, get_osd_singleton_state().osd_state)
-  FORWARD(set_active, set_active, get_osd_singleton_state().osd_state)
-  FORWARD(when_active, when_active, get_osd_singleton_state().osd_state)
-  FORWARD_CONST(get_osd_state_string, to_string, get_osd_singleton_state().osd_state)
-
-  FORWARD(got_map, got_map, get_osd_singleton_state().osdmap_gate)
-  FORWARD(wait_for_map, wait_for_map, get_osd_singleton_state().osdmap_gate)
+  FORWARD(is_active, is_active, get_shard_services().local_state.osd_state)
+  FORWARD(is_preboot, is_preboot, get_shard_services().local_state.osd_state)
+  FORWARD(is_booting, is_booting, get_shard_services().local_state.osd_state)
+  FORWARD(is_stopping, is_stopping, get_shard_services().local_state.osd_state)
+  FORWARD(is_prestop, is_prestop, get_shard_services().local_state.osd_state)
+  FORWARD(is_initializing, is_initializing, get_shard_services().local_state.osd_state)
+  FORWARD(set_prestop, set_prestop, get_shard_services().local_state.osd_state)
+  FORWARD(set_preboot, set_preboot, get_shard_services().local_state.osd_state)
+  FORWARD(set_booting, set_booting, get_shard_services().local_state.osd_state)
+  FORWARD(set_stopping, set_stopping, get_shard_services().local_state.osd_state)
+  FORWARD(set_active, set_active, get_shard_services().local_state.osd_state)
+  FORWARD(when_active, when_active, get_shard_services().local_state.osd_state)
+  FORWARD_CONST(get_osd_state_string, to_string, get_shard_services().local_state.osd_state)
+
+  FORWARD(got_map, got_map, get_shard_services().local_state.osdmap_gate)
+  FORWARD(wait_for_map, wait_for_map, get_shard_services().local_state.osdmap_gate)
 
   // Metacoll
   FORWARD_TO_OSD_SINGLETON(init_meta_coll)
@@ -142,7 +140,6 @@ public:
 
   template <typename F>
   auto with_remote_shard_state(core_id_t core, F &&f) {
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return shard_services.invoke_on(
       core, [f=std::move(f)](auto &target_shard_services) mutable {
        return std::invoke(
@@ -156,7 +153,6 @@ public:
       core_id_t core,
       typename T::IRef &&op,
       F &&f) {
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     if (seastar::this_shard_id() == core) {
       auto &target_shard_services = shard_services.local();
       return std::invoke(
@@ -188,20 +184,19 @@ public:
     typename T::IRef op
   ) {
     ceph_assert(op->use_count() == 1);
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     auto &logger = crimson::get_logger(ceph_subsys_osd);
     static_assert(T::can_create());
     logger.debug("{}: can_create", *op);
 
-    auto core = get_osd_singleton_state().pg_to_shard_mapping.maybe_create_pg(
-      op->get_pgid());
-
     get_local_state().registry.remove_from_registry(*op);
-    return with_remote_shard_state_and_op<T>(
-      core, std::move(op),
-      [](PerShardState &per_shard_state,
-         ShardServices &shard_services,
-         typename T::IRef op) {
+    return get_pg_to_shard_mapping().maybe_create_pg(
+      op->get_pgid()
+    ).then([this, op = std::move(op)](auto core) mutable {
+      return this->template with_remote_shard_state_and_op<T>(
+        core, std::move(op),
+        [](PerShardState &per_shard_state,
+           ShardServices &shard_services,
+           typename T::IRef op) {
        per_shard_state.registry.add_to_registry(*op);
        auto &logger = crimson::get_logger(ceph_subsys_osd);
        auto &opref = *op;
@@ -211,7 +206,7 @@ public:
              auto &&trigger) {
            return shard_services.get_or_create_pg(
              std::move(trigger),
-             opref.get_pgid(), opref.get_epoch(),
+             opref.get_pgid(),
              std::move(opref.get_create_info())
            );
          }).safe_then([&logger, &shard_services, &opref](Ref<PG> pgref) {
@@ -224,6 +219,7 @@ public:
            })
          ).then([op=std::move(op)] {});
       });
+    });
   }
 
   /// Runs opref on the appropriate core, waiting for pg as necessary
@@ -232,20 +228,19 @@ public:
     typename T::IRef op
   ) {
     ceph_assert(op->use_count() == 1);
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     auto &logger = crimson::get_logger(ceph_subsys_osd);
     static_assert(!T::can_create());
     logger.debug("{}: !can_create", *op);
 
-     auto core = get_osd_singleton_state().pg_to_shard_mapping.maybe_create_pg(
-      op->get_pgid());
-
     get_local_state().registry.remove_from_registry(*op);
-    return with_remote_shard_state_and_op<T>(
-      core, std::move(op),
-      [](PerShardState &per_shard_state,
-         ShardServices &shard_services,
-         typename T::IRef op) {
+    return get_pg_to_shard_mapping().maybe_create_pg(
+      op->get_pgid()
+    ).then([this, op = std::move(op)](auto core) mutable {
+      return this->template with_remote_shard_state_and_op<T>(
+        core, std::move(op),
+        [](PerShardState &per_shard_state,
+           ShardServices &shard_services,
+           typename T::IRef op) {
        per_shard_state.registry.add_to_registry(*op);
        auto &logger = crimson::get_logger(ceph_subsys_osd);
        auto &opref = *op;
@@ -265,6 +260,7 @@ public:
            })
          ).then([op=std::move(op)] {});
       });
+    });
   }
 
   seastar::future<> load_pgs(crimson::os::FuturizedStore& store);
@@ -313,20 +309,19 @@ public:
    */
   template <typename F>
   void for_each_pgid(F &&f) const {
-    return get_osd_singleton_state().pg_to_shard_mapping.for_each_pgid(
+    return get_pg_to_shard_mapping().for_each_pgid(
       std::forward<F>(f));
   }
 
   auto get_num_pgs() const {
-    return get_osd_singleton_state().pg_to_shard_mapping.get_num_pgs();
+    return get_pg_to_shard_mapping().get_num_pgs();
   }
 
   seastar::future<> broadcast_map_to_pgs(epoch_t epoch);
 
   template <typename F>
   auto with_pg(spg_t pgid, F &&f) {
-    core_id_t core = get_osd_singleton_state(
-    ).pg_to_shard_mapping.get_pg_mapping(pgid);
+    core_id_t core = get_pg_to_shard_mapping().get_pg_mapping(pgid);
     return with_remote_shard_state(
       core,
       [pgid, f=std::move(f)](auto &local_state, auto &local_service) mutable {
@@ -338,7 +333,6 @@ public:
 
   template <typename T, typename... Args>
   auto start_pg_operation(Args&&... args) {
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     auto op = get_local_state().registry.create_operation<T>(
       std::forward<Args>(args)...);
     auto &logger = crimson::get_logger(ceph_subsys_osd);
@@ -352,35 +346,30 @@ public:
     auto fut = opref.template enter_stage<>(
       opref.get_connection_pipeline().await_active
     ).then([this, &opref, &logger] {
-      ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
       logger.debug("{}: start_pg_operation in await_active stage", opref);
-      return get_osd_singleton_state().osd_state.when_active();
+      return get_shard_services().local_state.osd_state.when_active();
     }).then([&logger, &opref] {
-      ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
       logger.debug("{}: start_pg_operation active, entering await_map", opref);
       return opref.template enter_stage<>(
        opref.get_connection_pipeline().await_map);
     }).then([this, &logger, &opref] {
-      ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
       logger.debug("{}: start_pg_operation await_map stage", opref);
       using OSDMapBlockingEvent =
        OSD_OSDMapGate::OSDMapBlocker::BlockingEvent;
       return opref.template with_blocking_event<OSDMapBlockingEvent>(
        [this, &opref](auto &&trigger) {
          std::ignore = this;
-         return get_osd_singleton_state().osdmap_gate.wait_for_map(
-           std::move(trigger),
-           opref.get_epoch(),
-           &get_shard_services());
-       });
+         return get_shard_services().local_state.osdmap_gate.wait_for_map(
+             std::move(trigger),
+             opref.get_epoch(),
+             &get_shard_services());
+      });
     }).then([&logger, &opref](auto epoch) {
-      ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
       logger.debug("{}: got map {}, entering get_pg", opref, epoch);
       return opref.template enter_stage<>(
        opref.get_connection_pipeline().get_pg);
     }).then([this, &logger, &opref, op=std::move(op)]() mutable {
       logger.debug("{}: in get_pg core {}", opref, seastar::this_shard_id());
-      ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
       logger.debug("{}: in get_pg", opref);
       if constexpr (T::can_create()) {
        logger.debug("{}: can_create", opref);
index 647d8d6bee4a52b8ac60ca4931e6b6d57e07304b..a6431305d806fa18e00ac6c81c036fd726bbd6ad 100644 (file)
@@ -38,9 +38,12 @@ PerShardState::PerShardState(
   ceph::mono_time startup_time,
   PerfCounters *perf,
   PerfCounters *recoverystate_perf,
-  crimson::os::FuturizedStore &store)
+  crimson::os::FuturizedStore &store,
+  OSDState &osd_state)
   : whoami(whoami),
     store(store.get_sharded_store()),
+    osd_state(osd_state),
+    osdmap_gate("PerShardState::osdmap_gate"),
     perf(perf), recoverystate_perf(recoverystate_perf),
     throttler(crimson::common::local_conf()),
     next_tid(
@@ -121,7 +124,6 @@ OSDSingletonState::OSDSingletonState(
   crimson::mon::Client &monc,
   crimson::mgr::Client &mgrc)
   : whoami(whoami),
-    osdmap_gate("OSDSingletonState::osdmap_gate"),
     cluster_msgr(cluster_msgr),
     public_msgr(public_msgr),
     monc(monc),
@@ -349,8 +351,10 @@ OSDSingletonState::get_local_map(epoch_t e)
 {
   // TODO: use LRU cache for managing osdmap, fallback to disk if we have to
   if (auto found = osdmaps.find(e); found) {
+    logger().debug("{} osdmap.{} found in cache", __func__, e);
     return seastar::make_ready_future<local_cached_map_t>(std::move(found));
   } else {
+    logger().debug("{} loading osdmap.{} from disk", __func__, e);
     return load_map(e).then([e, this](std::unique_ptr<OSDMap> osdmap) {
       return seastar::make_ready_future<local_cached_map_t>(
        osdmaps.insert(e, std::move(osdmap)));
@@ -370,8 +374,10 @@ seastar::future<bufferlist> OSDSingletonState::load_map_bl(
   epoch_t e)
 {
   if (std::optional<bufferlist> found = map_bl_cache.find(e); found) {
+    logger().debug("{} osdmap.{} found in cache", __func__, e);
     return seastar::make_ready_future<bufferlist>(*found);
   } else {
+    logger().debug("{} loading osdmap.{} from disk", __func__, e);
     return meta_coll->load_map(e);
   }
 }
@@ -401,14 +407,14 @@ seastar::future<std::map<epoch_t, bufferlist>> OSDSingletonState::load_map_bls(
 seastar::future<std::unique_ptr<OSDMap>> OSDSingletonState::load_map(epoch_t e)
 {
   auto o = std::make_unique<OSDMap>();
-  if (e > 0) {
-    return load_map_bl(e).then([o=std::move(o)](bufferlist bl) mutable {
-      o->decode(bl);
-      return seastar::make_ready_future<std::unique_ptr<OSDMap>>(std::move(o));
-    });
-  } else {
+  logger().info("{} osdmap.{}", __func__, e);
+  if (e == 0) {
     return seastar::make_ready_future<std::unique_ptr<OSDMap>>(std::move(o));
   }
+  return load_map_bl(e).then([o=std::move(o)](bufferlist bl) mutable {
+    o->decode(bl);
+    return seastar::make_ready_future<std::unique_ptr<OSDMap>>(std::move(o));
+  });
 }
 
 seastar::future<> OSDSingletonState::store_maps(ceph::os::Transaction& t,
@@ -421,12 +427,15 @@ seastar::future<> OSDSingletonState::store_maps(ceph::os::Transaction& t,
       if (auto p = m->maps.find(e); p != m->maps.end()) {
        auto o = std::make_unique<OSDMap>();
        o->decode(p->second);
-       logger().info("store_maps osdmap.{}", e);
+       logger().info("store_maps storing osdmap.{}", e);
        store_map_bl(t, e, std::move(std::move(p->second)));
        osdmaps.insert(e, std::move(o));
        return seastar::now();
       } else if (auto p = m->incremental_maps.find(e);
                 p != m->incremental_maps.end()) {
+       logger().info("store_maps found osdmap.{} incremental map, "
+                     "loading osdmap.{}", e, e - 1);
+       ceph_assert(std::cmp_greater(e, 0u));
        return load_map(e - 1).then([e, bl=p->second, &t, this](auto o) {
          OSDMap::Incremental inc;
          auto i = bl.cbegin();
@@ -434,6 +443,7 @@ seastar::future<> OSDSingletonState::store_maps(ceph::os::Transaction& t,
          o->apply_incremental(inc);
          bufferlist fbl;
          o->encode(fbl, inc.encode_features | CEPH_FEATURE_RESERVED);
+         logger().info("store_maps storing osdmap.{}", o->get_epoch());
          store_map_bl(t, e, std::move(fbl));
          osdmaps.insert(e, std::move(o));
          return seastar::now();
@@ -603,7 +613,6 @@ ShardServices::get_or_create_pg_ret
 ShardServices::get_or_create_pg(
   PGMap::PGCreationBlockingEvent::TriggerI&& trigger,
   spg_t pgid,
-  epoch_t epoch,
   std::unique_ptr<PGCreateInfo> info)
 {
   if (info) {
@@ -700,6 +709,9 @@ seastar::future<> OSDSingletonState::send_incremental_map(
   crimson::net::Connection &conn,
   epoch_t first)
 {
+  logger().info("{}: first osdmap: {} "
+                "superblock's oldest map: {}",
+                __func__, first, superblock.oldest_map);
   if (first >= superblock.oldest_map) {
     return load_map_bls(
       first, superblock.newest_map
index 12bb23ac2ab8135392499cea9b058954b48cb947..9b7553e7b5ac31a5d185a5a3c060345cbd0515d8 100644 (file)
@@ -45,9 +45,6 @@ class BufferedRecoveryMessages;
 
 namespace crimson::osd {
 
-// seastar::sharded puts start_single on core 0
-constexpr core_id_t PRIMARY_CORE = 0;
-
 class PGShardManager;
 
 /**
@@ -58,6 +55,7 @@ class PGShardManager;
 class PerShardState {
   friend class ShardServices;
   friend class PGShardManager;
+  friend class OSD;
   using cached_map_t = OSDMapService::cached_map_t;
   using local_cached_map_t = OSDMapService::local_cached_map_t;
 
@@ -68,6 +66,9 @@ class PerShardState {
   crimson::os::FuturizedStore::Shard &store;
   crimson::common::CephContext cct;
 
+  OSDState &osd_state;
+  OSD_OSDMapGate osdmap_gate;
+
   PerfCounters *perf = nullptr;
   PerfCounters *recoverystate_perf = nullptr;
 
@@ -188,7 +189,8 @@ public:
     ceph::mono_time startup_time,
     PerfCounters *perf,
     PerfCounters *recoverystate_perf,
-    crimson::os::FuturizedStore &store);
+    crimson::os::FuturizedStore &store,
+    OSDState& osd_state);
 };
 
 /**
@@ -200,6 +202,7 @@ public:
 class OSDSingletonState : public md_config_obs_t {
   friend class ShardServices;
   friend class PGShardManager;
+  friend class OSD;
   using cached_map_t = OSDMapService::cached_map_t;
   using local_cached_map_t = OSDMapService::local_cached_map_t;
 
@@ -218,8 +221,6 @@ private:
   PerfCounters *perf = nullptr;
   PerfCounters *recoverystate_perf = nullptr;
 
-  OSDState osd_state;
-
   SharedLRU<epoch_t, OSDMap> osdmaps;
   SimpleLRU<epoch_t, bufferlist, false> map_bl_cache;
 
@@ -228,7 +229,6 @@ private:
   void update_map(cached_map_t new_osdmap) {
     osdmap = std::move(new_osdmap);
   }
-  OSD_OSDMapGate osdmap_gate;
 
   crimson::net::Messenger &cluster_msgr;
   crimson::net::Messenger &public_msgr;
@@ -280,9 +280,6 @@ private:
   void requeue_pg_temp();
   seastar::future<> send_pg_temp();
 
-  // TODO: add config to control mapping
-  PGShardMapping pg_to_shard_mapping{0, seastar::smp::count};
-
   std::set<pg_t> pg_created;
   seastar::future<> send_pg_created(pg_t pgid);
   seastar::future<> send_pg_created();
@@ -321,11 +318,13 @@ private:
  */
 class ShardServices : public OSDMapService {
   friend class PGShardManager;
+  friend class OSD;
   using cached_map_t = OSDMapService::cached_map_t;
   using local_cached_map_t = OSDMapService::local_cached_map_t;
 
   PerShardState local_state;
   seastar::sharded<OSDSingletonState> &osd_singleton_state;
+  PGShardMapping& pg_to_shard_mapping;
 
   template <typename F, typename... Args>
   auto with_singleton(F &&f, Args&&... args) {
@@ -368,9 +367,11 @@ public:
   template <typename... PSSArgs>
   ShardServices(
     seastar::sharded<OSDSingletonState> &osd_singleton_state,
+    PGShardMapping& pg_to_shard_mapping,
     PSSArgs&&... args)
     : local_state(std::forward<PSSArgs>(args)...),
-      osd_singleton_state(osd_singleton_state) {}
+      osd_singleton_state(osd_singleton_state),
+      pg_to_shard_mapping(pg_to_shard_mapping) {}
 
   FORWARD_TO_OSD_SINGLETON(send_to_osd)
 
@@ -380,10 +381,7 @@ public:
 
   auto remove_pg(spg_t pgid) {
     local_state.pg_map.remove_pg(pgid);
-    return with_singleton(
-      [pgid](auto &osstate) {
-      osstate.pg_to_shard_mapping.remove_pg(pgid);
-    });
+    return pg_to_shard_mapping.remove_pg(pgid);
   }
 
   crimson::common::CephContext *get_cct() {
@@ -427,7 +425,6 @@ public:
   get_or_create_pg_ret get_or_create_pg(
     PGMap::PGCreationBlockingEvent::TriggerI&&,
     spg_t pgid,
-    epoch_t epoch,
     std::unique_ptr<PGCreateInfo> info);
 
   using wait_for_pg_ertr = PGMap::wait_for_pg_ertr;
index 7413e58fa405a717a8433712b4c41fb886ea8ffd..f0676a4ec4b8d9e0aaefa8d19f6fee4a5ae2ef4f 100644 (file)
 
 class OSDMap;
 
-class OSDState {
+namespace crimson::osd {
+
+// seastar::sharded puts start_single on core 0
+constexpr core_id_t PRIMARY_CORE = 0;
+
+/**
+ * OSDState
+ *
+ * Maintains state representing the OSD's progress from booting through
+ * shutdown.
+ *
+ * Shards other than PRIMARY_CORE may use their local instance to check
+ * on ACTIVE and STOPPING.  All other methods are restricted to
+ * PRIMARY_CORE (such methods start with an assert to this effect).
+ */
+class OSDState : public seastar::peering_sharded_service<OSDState> {
 
   enum class State {
     INITIALIZING,
@@ -25,14 +40,29 @@ class OSDState {
   State state = State::INITIALIZING;
   mutable seastar::shared_promise<> wait_for_active;
 
+  /// Sets local instance state to active, called from set_active
+  void _set_active() {
+    state = State::ACTIVE;
+    wait_for_active.set_value();
+    wait_for_active = {};
+  }
+  /// Sets local instance state to stopping, called from set_stopping
+  void _set_stopping() {
+    state = State::STOPPING;
+    wait_for_active.set_exception(crimson::common::system_shutdown_exception{});
+    wait_for_active = {};
+  }
 public:
   bool is_initializing() const {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return state == State::INITIALIZING;
   }
   bool is_preboot() const {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return state == State::PREBOOT;
   }
   bool is_booting() const {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return state == State::BOOTING;
   }
   bool is_active() const {
@@ -43,32 +73,41 @@ public:
                        : wait_for_active.get_shared_future();
   };
   bool is_prestop() const {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return state == State::PRESTOP;
   }
   bool is_stopping() const {
     return state == State::STOPPING;
   }
   bool is_waiting_for_healthy() const {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return state == State::WAITING_FOR_HEALTHY;
   }
   void set_preboot() {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     state = State::PREBOOT;
   }
   void set_booting() {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     state = State::BOOTING;
   }
-  void set_active() {
-    state = State::ACTIVE;
-    wait_for_active.set_value();
-    wait_for_active = {};
+  /// Sets all shards to active
+  seastar::future<> set_active() {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
+    return container().invoke_on_all([](auto& osd_state) {
+      osd_state._set_active();
+    });
   }
   void set_prestop() {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     state = State::PRESTOP;
   }
-  void set_stopping() {
-    state = State::STOPPING;
-    wait_for_active.set_exception(crimson::common::system_shutdown_exception{});
-    wait_for_active = {};
+  /// Sets all shards to stopping
+  seastar::future<> set_stopping() {
+    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
+    return container().invoke_on_all([](auto& osd_state) {
+      osd_state._set_stopping();
+    });
   }
   std::string_view to_string() const {
     switch (state) {
@@ -88,3 +127,4 @@ inline std::ostream&
 operator<<(std::ostream& os, const OSDState& s) {
   return os << s.to_string();
 }
+}
index f71d915bb9d7ab6b3e14352b7ba42a0f5430bca7..4573333c3dab7ec1ea238007a9f080e9230cf7bf 100644 (file)
@@ -111,7 +111,9 @@ seastar::future<> Watch::send_notify_msg(NotifyRef notify)
 
 seastar::future<> Watch::start_notify(NotifyRef notify)
 {
-  logger().info("{} adding notify(id={})", __func__, notify->ninfo.notify_id);
+  logger().debug("{} gid={} cookie={} starting notify(id={})",
+                 __func__,  get_watcher_gid(), get_cookie(),
+                 notify->ninfo.notify_id);
   auto [ it, emplaced ] = in_progress_notifies.emplace(std::move(notify));
   ceph_assert(emplaced);
   ceph_assert(is_alive());
@@ -122,15 +124,24 @@ seastar::future<> Watch::notify_ack(
   const uint64_t notify_id,
   const ceph::bufferlist& reply_bl)
 {
-  logger().info("{}", __func__);
-  return seastar::do_for_each(in_progress_notifies,
-    [this_shared=shared_from_this(), reply_bl] (auto notify) {
-      return notify->complete_watcher(this_shared, reply_bl);
-    }
-  ).then([this] {
-    in_progress_notifies.clear();
+  logger().debug("{} gid={} cookie={} notify_id={}",
+                 __func__,  get_watcher_gid(), get_cookie(), notify_id);
+  const auto it = in_progress_notifies.find(notify_id);
+  if (it == std::end(in_progress_notifies)) {
+    logger().error("{} notify_id={} not found on the in-progess list."
+                   " Supressing but this should not happen.",
+                   __func__, notify_id);
     return seastar::now();
-  });
+  }
+  auto notify = *it;
+  logger().debug("Watch::notify_ack gid={} cookie={} found notify(id={})",
+    get_watcher_gid(),
+    get_cookie(),
+    notify->get_id());
+  // let's ensure we're extending the life-time till end of this method
+  static_assert(std::is_same_v<decltype(notify), NotifyRef>);
+  in_progress_notifies.erase(it);
+  return notify->complete_watcher(shared_from_this(), reply_bl);
 }
 
 seastar::future<> Watch::send_disconnect_msg()
@@ -149,6 +160,7 @@ seastar::future<> Watch::send_disconnect_msg()
 
 void Watch::discard_state()
 {
+  logger().debug("{} gid={} cookie={}", __func__, get_watcher_gid(), get_cookie());
   ceph_assert(obc);
   in_progress_notifies.clear();
   timeout_timer.cancel();
@@ -165,7 +177,7 @@ void Watch::got_ping(utime_t)
 
 seastar::future<> Watch::remove()
 {
-  logger().info("{}", __func__);
+  logger().debug("{} gid={} cookie={}", __func__, get_watcher_gid(), get_cookie());
   // in contrast to ceph-osd crimson sends CEPH_WATCH_EVENT_DISCONNECT directly
   // from the timeout handler and _after_ CEPH_WATCH_EVENT_NOTIFY_COMPLETE.
   // this simplifies the Watch::remove() interface as callers aren't obliged
@@ -173,6 +185,10 @@ seastar::future<> Watch::remove()
   // becomes an implementation detail of Watch.
   return seastar::do_for_each(in_progress_notifies,
     [this_shared=shared_from_this()] (auto notify) {
+      logger().debug("Watch::remove gid={} cookie={} notify(id={})",
+                     this_shared->get_watcher_gid(),
+                     this_shared->get_cookie(),
+                     notify->ninfo.notify_id);
       return notify->remove_watcher(this_shared);
     }).then([this] {
       discard_state();
@@ -182,7 +198,9 @@ seastar::future<> Watch::remove()
 
 void Watch::cancel_notify(const uint64_t notify_id)
 {
-  logger().info("{} notify_id={}", __func__, notify_id);
+  logger().debug("{} gid={} cookie={} notify(id={})",
+                 __func__,  get_watcher_gid(), get_cookie(),
+                 notify_id);
   const auto it = in_progress_notifies.find(notify_id);
   assert(it != std::end(in_progress_notifies));
   in_progress_notifies.erase(it);
@@ -213,8 +231,7 @@ bool notify_reply_t::operator<(const notify_reply_t& rhs) const
 std::ostream &operator<<(std::ostream &out, const notify_reply_t &rhs)
 {
   out << "notify_reply_t{watcher_gid=" << rhs.watcher_gid
-      << ", watcher_cookie=" << rhs.watcher_cookie
-      << ", bl=" << rhs.bl << "}";
+      << ", watcher_cookie=" << rhs.watcher_cookie << "}";
   return out;
 }
 
@@ -228,9 +245,19 @@ Notify::Notify(crimson::net::ConnectionRef conn,
     user_version(user_version)
 {}
 
+Notify::~Notify()
+{
+  logger().debug("{} for notify(id={})", __func__, ninfo.notify_id);
+}
+
 seastar::future<> Notify::remove_watcher(WatchRef watch)
 {
+  logger().debug("{} for notify(id={})", __func__, ninfo.notify_id);
+
   if (discarded || complete) {
+    logger().debug("{} for notify(id={}) discarded/complete already"
+                   " discarded: {} complete: {}", __func__,
+                   ninfo.notify_id, discarded ,complete);
     return seastar::now();
   }
   [[maybe_unused]] const auto num_removed = watchers.erase(watch);
@@ -250,7 +277,12 @@ seastar::future<> Notify::complete_watcher(
   WatchRef watch,
   const ceph::bufferlist& reply_bl)
 {
+  logger().debug("{} for notify(id={})", __func__, ninfo.notify_id);
+
   if (discarded || complete) {
+    logger().debug("{} for notify(id={}) discarded/complete already"
+                   " discarded: {} complete: {}", __func__,
+                   ninfo.notify_id, discarded ,complete);
     return seastar::now();
   }
   notify_replies.emplace(notify_reply_t{
index 0f7c9df544ac6bee8eb3eb1a6961a350cbcf1667..b3982141d86e82da02cd51740fad8ee81f275709 100644 (file)
@@ -140,6 +140,8 @@ class Notify : public seastar::enable_shared_from_this<Notify> {
     [this] { do_notify_timeout(); }
   };
 
+  ~Notify();
+
   /// (gid,cookie) -> reply_bl for everyone who acked the notify
   std::multiset<notify_reply_t> notify_replies;
 
index d57c3f9cfc444b071a4b989592dd8b37a25c2611..fc18ff90b4da53f8230ccfde33fd9d794f0b3398 100644 (file)
@@ -15,4 +15,8 @@ add_executable(perf-async-msgr perf_async_msgr.cc)
 target_link_libraries(perf-async-msgr ceph-common global ${ALLOC_LIBS})
 
 add_executable(perf-staged-fltree perf_staged_fltree.cc)
+if(WITH_TESTS)
+target_link_libraries(perf-staged-fltree crimson-seastore crimson::gtest)
+else()
 target_link_libraries(perf-staged-fltree crimson-seastore)
+endif()
index de3367a6e91b5975d90ba803a11ce930798a3fa6..38cc84fbb84e18af6a654de5af6fc8637712aa4d 100644 (file)
@@ -94,7 +94,9 @@ int main(int argc, char** argv)
     ("bs", po::value<unsigned>()->default_value(0),
      "server block size")
     ("crc-enabled", po::value<bool>()->default_value(false),
-     "enable CRC checks");
+     "enable CRC checks")
+    ("threads", po::value<unsigned>()->default_value(3),
+     "async messenger worker threads");
   po::variables_map vm;
   std::vector<std::string> unrecognized_options;
   try {
@@ -120,6 +122,7 @@ int main(int argc, char** argv)
   ceph_assert_always(target_addr.is_msgr2());
   auto bs = vm["bs"].as<unsigned>();
   auto crc_enabled = vm["crc-enabled"].as<bool>();
+  auto worker_threads = vm["threads"].as<unsigned>();
 
   std::vector<const char*> args(argv, argv + argc);
   auto cct = global_init(nullptr, args,
@@ -136,5 +139,13 @@ int main(int argc, char** argv)
     cct->_conf.set_val("ms_crc_data", "false");
   }
 
+  cct->_conf.set_val("ms_async_op_threads", fmt::format("{}", worker_threads));
+
+  std::cout << "server[" << addr
+            << "](bs=" << bs
+            << ", crc_enabled=" << crc_enabled
+            << ", worker_threads=" << worker_threads
+            << std::endl;
+
   run(cct.get(), target_addr, bs);
 }
index ef5602b0f27bf8b8ed2c9b31c1a6099024406495..aa5753442e28e44ff32d093226fc02feb8b0ddf7 100644 (file)
@@ -2,19 +2,22 @@
 // vim: ts=8 sw=2 smarttab
 
 #include <map>
-#include <random>
 #include <boost/program_options.hpp>
+#include <boost/iterator/counting_iterator.hpp>
 
 #include <seastar/core/app-template.hh>
 #include <seastar/core/do_with.hh>
 #include <seastar/core/future-util.hh>
+#include <seastar/core/lowres_clock.hh>
 #include <seastar/core/reactor.hh>
 #include <seastar/core/sleep.hh>
 #include <seastar/core/semaphore.hh>
 #include <seastar/core/smp.hh>
+#include <seastar/core/thread.hh>
 
 #include "common/ceph_time.h"
 #include "messages/MOSDOp.h"
+#include "include/random.h"
 
 #include "crimson/auth/DummyAuth.h"
 #include "crimson/common/log.h"
 #include "crimson/net/Connection.h"
 #include "crimson/net/Dispatcher.h"
 #include "crimson/net/Messenger.h"
+#include "crimson/osd/stop_signal.h"
 
 using namespace std;
 using namespace std::chrono_literals;
 
+using lowres_clock_t = seastar::lowres_system_clock;
+
 namespace bpo = boost::program_options;
 
 namespace {
@@ -54,6 +60,19 @@ seastar::future<T*> create_sharded(Args... args) {
   });
 }
 
+double get_reactor_utilization() {
+  auto &value_map = seastar::metrics::impl::get_value_map();
+  auto found = value_map.find("reactor_utilization");
+  assert(found != value_map.end());
+  auto &[full_name, metric_family] = *found;
+  std::ignore = full_name;
+  assert(metric_family.size() == 1);
+  const auto& [labels, metric] = *metric_family.begin();
+  std::ignore = labels;
+  auto value = (*metric)();
+  return value.ui();
+}
+
 enum class perf_mode_t {
   both,
   client,
@@ -65,8 +84,10 @@ struct client_config {
   unsigned block_size;
   unsigned ramptime;
   unsigned msgtime;
-  unsigned jobs;
+  unsigned num_clients;
+  unsigned num_conns;
   unsigned depth;
+  bool skip_core_0;
 
   std::string str() const {
     std::ostringstream out;
@@ -74,8 +95,10 @@ struct client_config {
         << "](bs=" << block_size
         << ", ramptime=" << ramptime
         << ", msgtime=" << msgtime
-        << ", jobs=" << jobs
+        << ", num_clients=" << num_clients
+        << ", num_conns=" << num_conns
         << ", depth=" << depth
+        << ", skip_core_0=" << skip_core_0
         << ")";
     return out.str();
   }
@@ -83,16 +106,19 @@ struct client_config {
   static client_config load(bpo::variables_map& options) {
     client_config conf;
     entity_addr_t addr;
-    ceph_assert(addr.parse(options["addr"].as<std::string>().c_str(), nullptr));
+    ceph_assert(addr.parse(options["server-addr"].as<std::string>().c_str(), nullptr));
     ceph_assert_always(addr.is_msgr2());
 
     conf.server_addr = addr;
-    conf.block_size = options["cbs"].as<unsigned>();
+    conf.block_size = options["client-bs"].as<unsigned>();
     conf.ramptime = options["ramptime"].as<unsigned>();
     conf.msgtime = options["msgtime"].as<unsigned>();
-    conf.jobs = options["jobs"].as<unsigned>();
+    conf.num_clients = options["clients"].as<unsigned>();
+    ceph_assert_always(conf.num_clients > 0);
+    conf.num_conns = options["conns-per-client"].as<unsigned>();
+    ceph_assert_always(conf.num_conns > 0);
     conf.depth = options["depth"].as<unsigned>();
-    ceph_assert(conf.depth % conf.jobs == 0);
+    conf.skip_core_0 = options["client-skip-core-0"].as<bool>();
     return conf;
   }
 };
@@ -100,12 +126,14 @@ struct client_config {
 struct server_config {
   entity_addr_t addr;
   unsigned block_size;
+  bool is_fixed_cpu;
   unsigned core;
 
   std::string str() const {
     std::ostringstream out;
     out << "server[" << addr
         << "](bs=" << block_size
+        << ", is_fixed_cpu=" << is_fixed_cpu
         << ", core=" << core
         << ")";
     return out.str();
@@ -114,17 +142,18 @@ struct server_config {
   static server_config load(bpo::variables_map& options) {
     server_config conf;
     entity_addr_t addr;
-    ceph_assert(addr.parse(options["addr"].as<std::string>().c_str(), nullptr));
+    ceph_assert(addr.parse(options["server-addr"].as<std::string>().c_str(), nullptr));
     ceph_assert_always(addr.is_msgr2());
 
     conf.addr = addr;
-    conf.block_size = options["sbs"].as<unsigned>();
-    conf.core = options["core"].as<unsigned>();
+    conf.block_size = options["server-bs"].as<unsigned>();
+    conf.is_fixed_cpu = options["server-fixed-cpu"].as<bool>();
+    conf.core = options["server-core"].as<unsigned>();
     return conf;
   }
 };
 
-const unsigned SAMPLE_RATE = 7;
+const unsigned SAMPLE_RATE = 256;
 
 static seastar::future<> run(
     perf_mode_t mode,
@@ -133,30 +162,68 @@ static seastar::future<> run(
     bool crc_enabled)
 {
   struct test_state {
-    struct Server;
-    using ServerFRef = seastar::foreign_ptr<std::unique_ptr<Server>>;
-
     struct Server final
-        : public crimson::net::Dispatcher {
+        : public crimson::net::Dispatcher,
+          public seastar::peering_sharded_service<Server> {
+      // available only in msgr_sid
       crimson::net::MessengerRef msgr;
       crimson::auth::DummyAuthClientServer dummy_auth;
       const seastar::shard_id msgr_sid;
       std::string lname;
+
+      bool is_fixed_cpu = true;
+      bool is_stopped = false;
+      std::optional<seastar::future<>> fut_report;
+
+      unsigned conn_count = 0;
+      unsigned msg_count = 0;
+      MessageRef last_msg;
+
+      // available in all shards
       unsigned msg_len;
       bufferlist msg_data;
 
-      Server(unsigned msg_len)
-        : msgr_sid{seastar::this_shard_id()},
+      Server(seastar::shard_id msgr_sid, unsigned msg_len, bool needs_report)
+        : msgr_sid{msgr_sid},
           msg_len{msg_len} {
-        lname = "server#";
-        lname += std::to_string(msgr_sid);
+        lname = fmt::format("server@{}", msgr_sid);
         msg_data.append_zero(msg_len);
+
+        if (seastar::this_shard_id() == msgr_sid &&
+            needs_report) {
+          start_report();
+        }
+      }
+
+      void ms_handle_connect(
+          crimson::net::ConnectionRef,
+          seastar::shard_id) override {
+        ceph_abort("impossible, server won't connect");
+      }
+
+      void ms_handle_accept(
+          crimson::net::ConnectionRef,
+          seastar::shard_id new_shard,
+          bool is_replace) override {
+        ceph_assert_always(new_shard == seastar::this_shard_id());
+        auto &server = container().local();
+        ++server.conn_count;
+      }
+
+      void ms_handle_reset(
+          crimson::net::ConnectionRef,
+          bool) override {
+        auto &server = container().local();
+        --server.conn_count;
       }
 
       std::optional<seastar::future<>> ms_dispatch(
           crimson::net::ConnectionRef c, MessageRef m) override {
+        assert(c->get_shard_id() == seastar::this_shard_id());
         ceph_assert(m->get_type() == CEPH_MSG_OSD_OP);
 
+        auto &server = container().local();
+
         // server replies with MOSDOp to generate server-side write workload
         const static pg_t pgid;
         const static object_locator_t oloc;
@@ -164,22 +231,32 @@ static seastar::future<> run(
                                     pgid.pool(), oloc.nspace);
         static spg_t spgid(pgid);
         auto rep = crimson::make_message<MOSDOp>(0, 0, hobj, spgid, 0, 0, 0);
-        bufferlist data(msg_data);
-        rep->write(0, msg_len, data);
+        bufferlist data(server.msg_data);
+        rep->write(0, server.msg_len, data);
         rep->set_tid(m->get_tid());
+        ++server.msg_count;
         std::ignore = c->send(std::move(rep));
+
+        if (server.msg_count % 16 == 0) {
+          server.last_msg = std::move(m);
+        }
         return {seastar::now()};
       }
 
-      seastar::future<> init(const entity_addr_t& addr) {
-        return seastar::smp::submit_to(msgr_sid, [addr, this] {
+      seastar::future<> init(const entity_addr_t& addr, bool is_fixed_cpu) {
+        return container().invoke_on(
+            msgr_sid, [addr, is_fixed_cpu](auto &server) {
           // server msgr is always with nonce 0
-          msgr = crimson::net::Messenger::create(entity_name_t::OSD(msgr_sid), lname, 0);
-          msgr->set_default_policy(crimson::net::SocketPolicy::stateless_server(0));
-          msgr->set_auth_client(&dummy_auth);
-          msgr->set_auth_server(&dummy_auth);
-          return msgr->bind(entity_addrvec_t{addr}).safe_then([this] {
-            return msgr->start({this});
+          server.msgr = crimson::net::Messenger::create(
+              entity_name_t::OSD(server.msgr_sid),
+              server.lname, 0, is_fixed_cpu);
+          server.msgr->set_default_policy(crimson::net::SocketPolicy::stateless_server(0));
+          server.msgr->set_auth_client(&server.dummy_auth);
+          server.msgr->set_auth_server(&server.dummy_auth);
+          server.is_fixed_cpu = is_fixed_cpu;
+          return server.msgr->bind(entity_addrvec_t{addr}
+          ).safe_then([&server] {
+            return server.msgr->start({&server});
           }, crimson::net::Messenger::bind_ertr::all_same_way(
               [addr] (const std::error_code& e) {
             logger().error("Server: "
@@ -188,25 +265,161 @@ static seastar::future<> run(
           }));
         });
       }
+
       seastar::future<> shutdown() {
         logger().info("{} shutdown...", lname);
-        return seastar::smp::submit_to(msgr_sid, [this] {
-          ceph_assert(msgr);
-          msgr->stop();
-          return msgr->shutdown();
+        return container().invoke_on(
+            msgr_sid, [](auto &server) {
+          server.is_stopped = true;
+          ceph_assert(server.msgr);
+          server.msgr->stop();
+          return server.msgr->shutdown(
+          ).then([&server] {
+            if (server.fut_report.has_value()) {
+              return std::move(server.fut_report.value());
+            } else {
+              return seastar::now();
+            }
+          });
         });
       }
-      seastar::future<> wait() {
-        return seastar::smp::submit_to(msgr_sid, [this] {
-          ceph_assert(msgr);
-          return msgr->wait();
-        });
+
+    private:
+      struct ShardReport {
+        unsigned msg_count = 0;
+
+        // per-interval metrics
+        double reactor_utilization;
+        unsigned conn_count = 0;
+        int msg_size = 0;
+        unsigned msg_count_interval = 0;
+      };
+
+      // should not be called frequently to impact performance
+      void get_report(ShardReport& last) {
+        unsigned last_msg_count = last.msg_count;
+        int msg_size = -1;
+        if (last_msg) {
+          auto msg = boost::static_pointer_cast<MOSDOp>(last_msg);
+          msg->finish_decode();
+          ceph_assert_always(msg->ops.size() == 1);
+          msg_size = msg->ops[0].op.extent.length;
+          last_msg.reset();
+        }
+
+        last.msg_count = msg_count;
+        last.reactor_utilization = get_reactor_utilization();
+        last.conn_count = conn_count;
+        last.msg_size = msg_size;
+        last.msg_count_interval = msg_count - last_msg_count;
       }
 
-      static seastar::future<ServerFRef> create(seastar::shard_id msgr_sid, unsigned msg_len) {
-        return seastar::smp::submit_to(msgr_sid, [msg_len] {
-          return seastar::make_foreign(std::make_unique<Server>(msg_len));
-        });
+      struct TimerReport {
+        unsigned elapsed = 0u;
+        mono_time start_time = mono_clock::zero();
+        std::vector<ShardReport> reports;
+
+        TimerReport(unsigned shards) : reports(shards) {}
+      };
+
+      void start_report() {
+        seastar::promise<> pr_report;
+        fut_report = pr_report.get_future();
+        seastar::do_with(
+            TimerReport(seastar::smp::count),
+            [this](auto &report) {
+          return seastar::do_until(
+            [this] { return is_stopped; },
+            [&report, this] {
+              return seastar::sleep(2s
+              ).then([&report, this] {
+                report.elapsed += 2;
+                if (is_fixed_cpu) {
+                  return seastar::smp::submit_to(msgr_sid,
+                      [&report, this] {
+                    auto &server = container().local();
+                    server.get_report(report.reports[seastar::this_shard_id()]);
+                  }).then([&report, this] {
+                    auto now = mono_clock::now();
+                    auto prv = report.start_time;
+                    report.start_time = now;
+                    if (prv == mono_clock::zero()) {
+                      // cannot compute duration
+                      return;
+                    }
+                    std::chrono::duration<double> duration_d = now - prv;
+                    double duration = duration_d.count();
+                    auto &ireport = report.reports[msgr_sid];
+                    double iops = ireport.msg_count_interval / duration;
+                    double throughput_MB = -1;
+                    if (ireport.msg_size >= 0) {
+                      throughput_MB = iops * ireport.msg_size / 1048576;
+                    }
+                    std::ostringstream sout;
+                    sout << setfill(' ')
+                         << report.elapsed
+                         << "(" << std::setw(5) << duration << ") "
+                         << std::setw(9) << iops << "IOPS "
+                         << std::setw(8) << throughput_MB << "MiB/s "
+                         << ireport.reactor_utilization
+                         << "(" << ireport.conn_count << ")";
+                    std::cout << sout.str() << std::endl;
+                  });
+                } else {
+                  return seastar::smp::invoke_on_all([&report, this] {
+                    auto &server = container().local();
+                    server.get_report(report.reports[seastar::this_shard_id()]);
+                  }).then([&report, this] {
+                    auto now = mono_clock::now();
+                    auto prv = report.start_time;
+                    report.start_time = now;
+                    if (prv == mono_clock::zero()) {
+                      // cannot compute duration
+                      return;
+                    }
+                    std::chrono::duration<double> duration_d = now - prv;
+                    double duration = duration_d.count();
+                    unsigned num_msgs = 0;
+                    // -1 means unavailable, -2 means mismatch
+                    int msg_size = -1;
+                    for (auto &i : report.reports) {
+                      if (i.msg_size >= 0) {
+                        if (msg_size == -2) {
+                          // pass
+                        } else if (msg_size == -1) {
+                          msg_size = i.msg_size;
+                        } else {
+                          if (msg_size != i.msg_size) {
+                            msg_size = -2;
+                          }
+                        }
+                      }
+                      num_msgs += i.msg_count_interval;
+                    }
+                    double iops = num_msgs / duration;
+                    double throughput_MB = msg_size;
+                    if (msg_size >= 0) {
+                      throughput_MB = iops * msg_size / 1048576;
+                    }
+                    std::ostringstream sout;
+                    sout << setfill(' ')
+                         << report.elapsed
+                         << "(" << std::setw(5) << duration << ") "
+                         << std::setw(9) << iops << "IOPS "
+                         << std::setw(8) << throughput_MB << "MiB/s ";
+                    for (auto &i : report.reports) {
+                      sout << i.reactor_utilization
+                           << "(" << i.conn_count << ") ";
+                    }
+                    std::cout << sout.str() << std::endl;
+                  });
+                }
+              });
+            }
+          );
+        }).then([this] {
+          logger().info("report is stopped!");
+        }).forward_to(std::move(pr_report));
       }
     };
 
@@ -223,106 +436,212 @@ static seastar::future<> run(
         unsigned start_count = 0u;
 
         unsigned sampled_count = 0u;
-        double total_lat_s = 0.0;
+        double sampled_total_lat_s = 0.0;
 
         // for reporting only
         mono_time finish_time = mono_clock::zero();
 
-        void start() {
+        void start_connecting() {
+          connecting_time = mono_clock::now();
+        }
+
+        void finish_connecting() {
+          ceph_assert_always(connected_time == mono_clock::zero());
+          connected_time = mono_clock::now();
+        }
+
+        void start_collect() {
+          ceph_assert_always(connected_time != mono_clock::zero());
           start_time = mono_clock::now();
           start_count = received_count;
           sampled_count = 0u;
-          total_lat_s = 0.0;
+          sampled_total_lat_s = 0.0;
           finish_time = mono_clock::zero();
         }
+
+        void prepare_summary(const ConnStats &current) {
+          *this = current;
+          finish_time = mono_clock::now();
+        }
       };
-      ConnStats conn_stats;
 
       struct PeriodStats {
         mono_time start_time = mono_clock::zero();
         unsigned start_count = 0u;
         unsigned sampled_count = 0u;
-        double total_lat_s = 0.0;
+        double sampled_total_lat_s = 0.0;
 
         // for reporting only
         mono_time finish_time = mono_clock::zero();
         unsigned finish_count = 0u;
         unsigned depth = 0u;
 
-        void reset(unsigned received_count, PeriodStats* snap = nullptr) {
-          if (snap) {
-            snap->start_time = start_time;
-            snap->start_count = start_count;
-            snap->sampled_count = sampled_count;
-            snap->total_lat_s = total_lat_s;
-            snap->finish_time = mono_clock::now();
-            snap->finish_count = received_count;
-          }
+        void start_collect(unsigned received_count) {
           start_time = mono_clock::now();
           start_count = received_count;
           sampled_count = 0u;
-          total_lat_s = 0.0;
+          sampled_total_lat_s = 0.0;
+        }
+
+        void reset_period(
+            unsigned received_count, unsigned _depth, PeriodStats &snapshot) {
+          snapshot.start_time = start_time;
+          snapshot.start_count = start_count;
+          snapshot.sampled_count = sampled_count;
+          snapshot.sampled_total_lat_s = sampled_total_lat_s;
+          snapshot.finish_time = mono_clock::now();
+          snapshot.finish_count = received_count;
+          snapshot.depth = _depth;
+
+          start_collect(received_count);
+        }
+      };
+
+      struct JobReport {
+        std::string name;
+        unsigned depth = 0;
+        double connect_time_s = 0;
+        unsigned total_msgs = 0;
+        double messaging_time_s = 0;
+        double latency_ms = 0;
+        double iops = 0;
+        double throughput_mbps = 0;
+
+        void account(const JobReport &stats) {
+          depth += stats.depth;
+          connect_time_s += stats.connect_time_s;
+          total_msgs += stats.total_msgs;
+          messaging_time_s += stats.messaging_time_s;
+          latency_ms += stats.latency_ms;
+          iops += stats.iops;
+          throughput_mbps += stats.throughput_mbps;
+        }
+
+        void report() const {
+          auto str = fmt::format(
+            "{}(depth={}):\n"
+            "  connect time: {:08f}s\n"
+            "  messages received: {}\n"
+            "  messaging time: {:08f}s\n"
+            "  latency: {:08f}ms\n"
+            "  IOPS: {:08f}\n"
+            "  out throughput: {:08f}MB/s",
+            name, depth, connect_time_s,
+            total_msgs, messaging_time_s,
+            latency_ms, iops,
+            throughput_mbps);
+          std::cout << str << std::endl;
+        }
+      };
+
+      struct ConnectionPriv : public crimson::net::Connection::user_private_t {
+        unsigned index;
+        ConnectionPriv(unsigned i) : index{i} {}
+      };
+
+      struct ConnState {
+        crimson::net::MessengerRef msgr;
+        ConnStats conn_stats;
+        PeriodStats period_stats;
+        seastar::semaphore depth;
+        std::vector<lowres_clock_t::time_point> time_msgs_sent;
+        unsigned sent_count = 0u;
+        crimson::net::ConnectionRef active_conn;
+        bool stop_send = false;
+        seastar::promise<JobReport> stopped_send_promise;
+
+        ConnState(std::size_t _depth)
+          : depth{_depth},
+            time_msgs_sent{_depth, lowres_clock_t::time_point::min()} {}
+
+        unsigned get_current_units() const {
+          ceph_assert(depth.available_units() >= 0);
+          return depth.current();
+        }
+
+        seastar::future<JobReport> stop_dispatch_messages() {
+          stop_send = true;
+          depth.broken(DepthBroken());
+          return stopped_send_promise.get_future();
         }
       };
-      PeriodStats period_stats;
 
       const seastar::shard_id sid;
-      std::string lname;
+      const unsigned id;
+      const std::optional<unsigned> server_sid;
 
-      const unsigned jobs;
-      crimson::net::MessengerRef msgr;
+      const unsigned num_clients;
+      const unsigned num_conns;
       const unsigned msg_len;
       bufferlist msg_data;
       const unsigned nr_depth;
-      seastar::semaphore depth;
-      std::vector<mono_time> time_msgs_sent;
+      const unsigned nonce_base;
       crimson::auth::DummyAuthClientServer dummy_auth;
 
-      unsigned sent_count = 0u;
-      crimson::net::ConnectionRef active_conn = nullptr;
+      std::vector<ConnState> conn_states;
 
-      bool stop_send = false;
-      seastar::promise<> stopped_send_promise;
-
-      Client(unsigned jobs, unsigned msg_len, unsigned depth)
+      Client(unsigned num_clients,
+             unsigned num_conns,
+             unsigned msg_len,
+             unsigned _depth,
+             unsigned nonce_base,
+             std::optional<unsigned> server_sid)
         : sid{seastar::this_shard_id()},
-          jobs{jobs},
+          id{sid + num_clients - seastar::smp::count},
+          server_sid{server_sid},
+          num_clients{num_clients},
+          num_conns{num_conns},
           msg_len{msg_len},
-          nr_depth{depth/jobs},
-          depth{nr_depth},
-          time_msgs_sent{depth/jobs, mono_clock::zero()} {
-        lname = "client#";
-        lname += std::to_string(sid);
+          nr_depth{_depth},
+          nonce_base{nonce_base} {
+        if (is_active()) {
+          for (unsigned i = 0; i < num_conns; ++i) {
+            conn_states.emplace_back(nr_depth);
+          }
+        }
         msg_data.append_zero(msg_len);
       }
 
-      unsigned get_current_depth() const {
-        ceph_assert(depth.available_units() >= 0);
-        return nr_depth - depth.current();
+      std::string get_name(unsigned i) {
+        return fmt::format("client{}Conn{}@{}", id, i, sid);
       }
 
-      void ms_handle_connect(crimson::net::ConnectionRef conn) override {
-        conn_stats.connected_time = mono_clock::now();
+      void ms_handle_connect(
+          crimson::net::ConnectionRef conn,
+          seastar::shard_id prv_shard) override {
+        ceph_assert_always(prv_shard == seastar::this_shard_id());
+        assert(is_active());
+        unsigned index = static_cast<ConnectionPriv&>(conn->get_user_private()).index;
+        auto &conn_state = conn_states[index];
+        conn_state.conn_stats.finish_connecting();
       }
+
       std::optional<seastar::future<>> ms_dispatch(
-          crimson::net::ConnectionRef, MessageRef m) override {
+          crimson::net::ConnectionRef conn, MessageRef m) override {
+        assert(is_active());
         // server replies with MOSDOp to generate server-side write workload
         ceph_assert(m->get_type() == CEPH_MSG_OSD_OP);
 
+        unsigned index = static_cast<ConnectionPriv&>(conn->get_user_private()).index;
+        assert(index < num_conns);
+        auto &conn_state = conn_states[index];
+
         auto msg_id = m->get_tid();
         if (msg_id % SAMPLE_RATE == 0) {
-          auto index = msg_id % time_msgs_sent.size();
-          ceph_assert(time_msgs_sent[index] != mono_clock::zero());
-          std::chrono::duration<double> cur_latency = mono_clock::now() - time_msgs_sent[index];
-          conn_stats.total_lat_s += cur_latency.count();
-          ++(conn_stats.sampled_count);
-          period_stats.total_lat_s += cur_latency.count();
-          ++(period_stats.sampled_count);
-          time_msgs_sent[index] = mono_clock::zero();
+          auto msg_index = msg_id % conn_state.time_msgs_sent.size();
+          ceph_assert(conn_state.time_msgs_sent[msg_index] !=
+              lowres_clock_t::time_point::min());
+          std::chrono::duration<double> cur_latency =
+              lowres_clock_t::now() - conn_state.time_msgs_sent[msg_index];
+          conn_state.conn_stats.sampled_total_lat_s += cur_latency.count();
+          ++(conn_state.conn_stats.sampled_count);
+          conn_state.period_stats.sampled_total_lat_s += cur_latency.count();
+          ++(conn_state.period_stats.sampled_count);
+          conn_state.time_msgs_sent[msg_index] = lowres_clock_t::time_point::min();
         }
 
-        ++(conn_stats.received_count);
-        depth.signal(1);
+        ++(conn_state.conn_stats.received_count);
+        conn_state.depth.signal(1);
 
         return {seastar::now()};
       }
@@ -330,49 +649,115 @@ static seastar::future<> run(
       // should start messenger at this shard?
       bool is_active() {
         ceph_assert(seastar::this_shard_id() == sid);
-        return sid != 0 && sid <= jobs;
+        return sid + num_clients >= seastar::smp::count;
       }
 
       seastar::future<> init() {
-        return container().invoke_on_all([] (auto& client) {
+        return container().invoke_on_all([](auto& client) {
           if (client.is_active()) {
-            client.msgr = crimson::net::Messenger::create(entity_name_t::OSD(client.sid), client.lname, client.sid);
-            client.msgr->set_default_policy(crimson::net::SocketPolicy::lossy_client(0));
-            client.msgr->set_auth_client(&client.dummy_auth);
-            client.msgr->set_auth_server(&client.dummy_auth);
-            return client.msgr->start({&client});
+            return seastar::do_for_each(
+                boost::make_counting_iterator(0u),
+                boost::make_counting_iterator(client.num_conns),
+                [&client](auto i) {
+              auto &conn_state = client.conn_states[i];
+              std::string name = client.get_name(i);
+              conn_state.msgr = crimson::net::Messenger::create(
+                  entity_name_t::OSD(client.id * client.num_conns + i),
+                  name, client.nonce_base + client.id * client.num_conns + i, true);
+              conn_state.msgr->set_default_policy(crimson::net::SocketPolicy::lossy_client(0));
+              conn_state.msgr->set_auth_client(&client.dummy_auth);
+              conn_state.msgr->set_auth_server(&client.dummy_auth);
+              return conn_state.msgr->start({&client});
+            });
           }
           return seastar::now();
         });
       }
 
       seastar::future<> shutdown() {
-        return container().invoke_on_all([] (auto& client) {
-          if (client.is_active()) {
-            logger().info("{} shutdown...", client.lname);
-            ceph_assert(client.msgr);
-            client.msgr->stop();
-            return client.msgr->shutdown().then([&client] {
-              return client.stop_dispatch_messages();
+        return seastar::do_with(
+            std::vector<JobReport>(num_clients * num_conns),
+            [this](auto &all_stats) {
+          return container().invoke_on_all([&all_stats](auto& client) {
+            if (!client.is_active()) {
+              return seastar::now();
+            }
+
+            return seastar::parallel_for_each(
+                boost::make_counting_iterator(0u),
+                boost::make_counting_iterator(client.num_conns),
+                [&all_stats, &client](auto i) {
+              logger().info("{} shutdown...", client.get_name(i));
+              auto &conn_state = client.conn_states[i];
+              return conn_state.stop_dispatch_messages(
+              ).then([&all_stats, &client, i](auto stats) {
+                all_stats[client.id * client.num_conns + i] = stats;
+              });
+            }).then([&client] {
+              return seastar::do_for_each(
+                  boost::make_counting_iterator(0u),
+                  boost::make_counting_iterator(client.num_conns),
+                  [&client](auto i) {
+                auto &conn_state = client.conn_states[i];
+                ceph_assert(conn_state.msgr);
+                conn_state.msgr->stop();
+                return conn_state.msgr->shutdown();
+              });
             });
-          }
-          return seastar::now();
+          }).then([&all_stats, this] {
+            auto nr_jobs = all_stats.size();
+            JobReport summary;
+            std::vector<JobReport> clients(num_clients);
+
+            for (unsigned i = 0; i < nr_jobs; ++i) {
+              auto &stats = all_stats[i];
+              stats.report();
+              clients[i / num_conns].account(stats);
+              summary.account(stats);
+            }
+
+            std::cout << std::endl;
+            std::cout << "per client:" << std::endl;
+            for (unsigned i = 0; i < num_clients; ++i) {
+              auto &stats = clients[i];
+              stats.name = fmt::format("client{}", i);
+              stats.connect_time_s /= num_conns;
+              stats.messaging_time_s /= num_conns;
+              stats.latency_ms /= num_conns;
+              stats.report();
+            }
+
+            std::cout << std::endl;
+            summary.name = fmt::format("all", nr_jobs);
+            summary.connect_time_s /= nr_jobs;
+            summary.messaging_time_s /= nr_jobs;
+            summary.latency_ms /= nr_jobs;
+            summary.report();
+          });
         });
       }
 
       seastar::future<> connect_wait_verify(const entity_addr_t& peer_addr) {
-        return container().invoke_on_all([peer_addr] (auto& client) {
-          // start clients in active cores (#1 ~ #jobs)
+        return container().invoke_on_all([peer_addr](auto& client) {
+          // start clients in active cores
           if (client.is_active()) {
-            mono_time start_time = mono_clock::now();
-            client.active_conn = client.msgr->connect(peer_addr, entity_name_t::TYPE_OSD);
+            for (unsigned i = 0; i < client.num_conns; ++i) {
+              auto &conn_state = client.conn_states[i];
+              conn_state.conn_stats.start_connecting();
+              conn_state.active_conn = conn_state.msgr->connect(peer_addr, entity_name_t::TYPE_OSD);
+              conn_state.active_conn->set_user_private(
+                  std::make_unique<ConnectionPriv>(i));
+            }
             // make sure handshake won't hurt the performance
-            return seastar::sleep(1s).then([&client, start_time] {
-              if (client.conn_stats.connected_time == mono_clock::zero()) {
-                logger().error("\n{} not connected after 1s!\n", client.lname);
-                ceph_assert(false);
+            return seastar::sleep(1s).then([&client] {
+              for (unsigned i = 0; i < client.num_conns; ++i) {
+                auto &conn_state = client.conn_states[i];
+                if (conn_state.conn_stats.connected_time == mono_clock::zero()) {
+                  logger().error("\n{} not connected after 1s!\n",
+                                 client.get_name(i));
+                  ceph_assert(false);
+                }
               }
-              client.conn_stats.connecting_time = start_time;
             });
           }
           return seastar::now();
@@ -382,34 +767,43 @@ static seastar::future<> run(
      private:
       class TimerReport {
        private:
-        const unsigned jobs;
+        const unsigned num_clients;
+        const unsigned num_conns;
         const unsigned msgtime;
         const unsigned bytes_of_block;
 
         unsigned elapsed = 0u;
-        std::vector<mono_time> start_times;
         std::vector<PeriodStats> snaps;
         std::vector<ConnStats> summaries;
+        std::vector<double> client_reactor_utilizations;
+        std::optional<double> server_reactor_utilization;
 
        public:
-        TimerReport(unsigned jobs, unsigned msgtime, unsigned bs)
-          : jobs{jobs},
+        TimerReport(unsigned num_clients, unsigned num_conns, unsigned msgtime, unsigned bs)
+          : num_clients{num_clients},
+            num_conns{num_conns},
             msgtime{msgtime},
             bytes_of_block{bs},
-            start_times{jobs, mono_clock::zero()},
-            snaps{jobs},
-            summaries{jobs} {}
+            snaps{num_clients * num_conns},
+            summaries{num_clients * num_conns},
+            client_reactor_utilizations(num_clients) {}
 
         unsigned get_elapsed() const { return elapsed; }
 
-        PeriodStats& get_snap_by_job(seastar::shard_id sid) {
-          ceph_assert(sid >= 1 && sid <= jobs);
-          return snaps[sid - 1];
+        PeriodStats& get_snap(unsigned client_id, unsigned i) {
+          return snaps[client_id * num_conns + i];
         }
 
-        ConnStats& get_summary_by_job(seastar::shard_id sid) {
-          ceph_assert(sid >= 1 && sid <= jobs);
-          return summaries[sid - 1];
+        ConnStats& get_summary(unsigned client_id, unsigned i) {
+          return summaries[client_id * num_conns + i];
+        }
+
+        void set_client_reactor_utilization(unsigned client_id, double ru) {
+          client_reactor_utilizations[client_id] = ru;
+        }
+
+        void set_server_reactor_utilization(double ru) {
+          server_reactor_utilization = ru;
         }
 
         bool should_stop() const {
@@ -422,45 +816,50 @@ static seastar::future<> run(
           });
         }
 
-        void report_header() {
+        void report_header() const {
           std::ostringstream sout;
           sout << std::setfill(' ')
-               << std::setw(7) << "sec"
-               << std::setw(6) << "depth"
-               << std::setw(8) << "IOPS"
-               << std::setw(8) << "MB/s"
-               << std::setw(8) << "lat(ms)";
+               << std::setw(6) << "sec"
+               << std::setw(7) << "depth"
+               << std::setw(10) << "IOPS"
+               << std::setw(9) << "MB/s"
+               << std::setw(9) << "lat(ms)";
           std::cout << sout.str() << std::endl;
         }
 
         void report_period() {
-          if (elapsed == 1) {
-            // init this->start_times at the first period
-            for (unsigned i=0; i<jobs; ++i) {
-              start_times[i] = snaps[i].start_time;
-            }
-          }
           std::chrono::duration<double> elapsed_d = 0s;
           unsigned depth = 0u;
           unsigned ops = 0u;
           unsigned sampled_count = 0u;
-          double total_lat_s = 0.0;
+          double sampled_total_lat_s = 0.0;
           for (const auto& snap: snaps) {
             elapsed_d += (snap.finish_time - snap.start_time);
             depth += snap.depth;
             ops += (snap.finish_count - snap.start_count);
             sampled_count += snap.sampled_count;
-            total_lat_s += snap.total_lat_s;
+            sampled_total_lat_s += snap.sampled_total_lat_s;
           }
-          double elapsed_s = elapsed_d.count() / jobs;
+          double elapsed_s = elapsed_d.count() / (num_clients * num_conns);
           double iops = ops/elapsed_s;
           std::ostringstream sout;
           sout << setfill(' ')
-               << std::setw(7) << elapsed_s
+               << std::setw(5) << elapsed_s
+               << " "
                << std::setw(6) << depth
-               << std::setw(8) << iops
+               << " "
+               << std::setw(9) << iops
+               << " "
                << std::setw(8) << iops * bytes_of_block / 1048576
-               << std::setw(8) << (total_lat_s / sampled_count * 1000);
+               << " "
+               << std::setw(8) << (sampled_total_lat_s / sampled_count * 1000)
+               << " -- ";
+          if (server_reactor_utilization.has_value()) {
+            sout << *server_reactor_utilization << " -- ";
+          }
+          for (double cru : client_reactor_utilizations) {
+            sout << cru << ",";
+          }
           std::cout << sout.str() << std::endl;
         }
 
@@ -468,14 +867,14 @@ static seastar::future<> run(
           std::chrono::duration<double> elapsed_d = 0s;
           unsigned ops = 0u;
           unsigned sampled_count = 0u;
-          double total_lat_s = 0.0;
+          double sampled_total_lat_s = 0.0;
           for (const auto& summary: summaries) {
             elapsed_d += (summary.finish_time - summary.start_time);
             ops += (summary.received_count - summary.start_count);
             sampled_count += summary.sampled_count;
-            total_lat_s += summary.total_lat_s;
+            sampled_total_lat_s += summary.sampled_total_lat_s;
           }
-          double elapsed_s = elapsed_d.count() / jobs;
+          double elapsed_s = elapsed_d.count() / (num_clients * num_conns);
           double iops = ops / elapsed_s;
           std::ostringstream sout;
           sout << "--------------"
@@ -486,7 +885,7 @@ static seastar::future<> run(
                << std::setw(6) << "-"
                << std::setw(8) << iops
                << std::setw(8) << iops * bytes_of_block / 1048576
-               << std::setw(8) << (total_lat_s / sampled_count * 1000)
+               << std::setw(8) << (sampled_total_lat_s / sampled_count * 1000)
                << "\n";
           std::cout << sout.str() << std::endl;
         }
@@ -495,10 +894,20 @@ static seastar::future<> run(
       seastar::future<> report_period(TimerReport& report) {
         return container().invoke_on_all([&report] (auto& client) {
           if (client.is_active()) {
-            PeriodStats& snap = report.get_snap_by_job(client.sid);
-            client.period_stats.reset(client.conn_stats.received_count,
-                                      &snap);
-            snap.depth = client.get_current_depth();
+            for (unsigned i = 0; i < client.num_conns; ++i) {
+              auto &conn_state = client.conn_states[i];
+              PeriodStats& snap = report.get_snap(client.id, i);
+              conn_state.period_stats.reset_period(
+                  conn_state.conn_stats.received_count,
+                  client.nr_depth - conn_state.get_current_units(),
+                  snap);
+            }
+            report.set_client_reactor_utilization(client.id, get_reactor_utilization());
+          }
+          if (client.server_sid.has_value() &&
+              seastar::this_shard_id() == *client.server_sid) {
+            assert(!client.is_active());
+            report.set_server_reactor_utilization(get_reactor_utilization());
           }
         }).then([&report] {
           report.report_period();
@@ -508,9 +917,11 @@ static seastar::future<> run(
       seastar::future<> report_summary(TimerReport& report) {
         return container().invoke_on_all([&report] (auto& client) {
           if (client.is_active()) {
-            ConnStats& summary = report.get_summary_by_job(client.sid);
-            summary = client.conn_stats;
-            summary.finish_time = mono_clock::now();
+            for (unsigned i = 0; i < client.num_conns; ++i) {
+              auto &conn_state = client.conn_states[i];
+              ConnStats& summary = report.get_summary(client.id, i);
+              summary.prepare_summary(conn_state.conn_stats);
+            }
           }
         }).then([&report] {
           report.report_summary();
@@ -519,10 +930,13 @@ static seastar::future<> run(
 
      public:
       seastar::future<> dispatch_with_timer(unsigned ramptime, unsigned msgtime) {
-        logger().info("[all clients]: start sending MOSDOps from {} clients", jobs);
+        logger().info("[all clients]: start sending MOSDOps from {} clients * {} conns",
+                      num_clients, num_conns);
         return container().invoke_on_all([] (auto& client) {
           if (client.is_active()) {
-            client.do_dispatch_messages(client.active_conn.get());
+            for (unsigned i = 0; i < client.num_conns; ++i) {
+              client.do_dispatch_messages(i);
+            }
           }
         }).then([ramptime] {
           logger().info("[all clients]: ramping up {} seconds...", ramptime);
@@ -530,14 +944,18 @@ static seastar::future<> run(
         }).then([this] {
           return container().invoke_on_all([] (auto& client) {
             if (client.is_active()) {
-              client.conn_stats.start();
-              client.period_stats.reset(client.conn_stats.received_count);
+              for (unsigned i = 0; i < client.num_conns; ++i) {
+                auto &conn_state = client.conn_states[i];
+                conn_state.conn_stats.start_collect();
+                conn_state.period_stats.start_collect(conn_state.conn_stats.received_count);
+              }
             }
           });
         }).then([this, msgtime] {
           logger().info("[all clients]: reporting {} seconds...\n", msgtime);
           return seastar::do_with(
-              TimerReport(jobs, msgtime, msg_len), [this] (auto& report) {
+              TimerReport(num_clients, num_conns, msgtime, msg_len),
+              [this](auto& report) {
             report.report_header();
             return seastar::do_until(
               [&report] { return report.should_stop(); },
@@ -567,9 +985,11 @@ static seastar::future<> run(
       }
 
      private:
-      seastar::future<> send_msg(crimson::net::Connection* conn) {
+      seastar::future<> send_msg(ConnState &conn_state) {
         ceph_assert(seastar::this_shard_id() == sid);
-        return depth.wait(1).then([this, conn] {
+        conn_state.sent_count += 1;
+        return conn_state.depth.wait(1
+        ).then([this, &conn_state] {
           const static pg_t pgid;
           const static object_locator_t oloc;
           const static hobject_t hobj(object_t(), oloc.key, CEPH_NOSNAP, pgid.ps(),
@@ -579,89 +999,132 @@ static seastar::future<> run(
           bufferlist data(msg_data);
           m->write(0, msg_len, data);
           // use tid as the identity of each round
-          m->set_tid(sent_count);
+          m->set_tid(conn_state.sent_count);
 
           // sample message latency
-          if (sent_count % SAMPLE_RATE == 0) {
-            auto index = sent_count % time_msgs_sent.size();
-            ceph_assert(time_msgs_sent[index] == mono_clock::zero());
-            time_msgs_sent[index] = mono_clock::now();
+          if (unlikely(conn_state.sent_count % SAMPLE_RATE == 0)) {
+            auto index = conn_state.sent_count % conn_state.time_msgs_sent.size();
+            ceph_assert(conn_state.time_msgs_sent[index] ==
+                        lowres_clock_t::time_point::min());
+            conn_state.time_msgs_sent[index] = lowres_clock_t::now();
           }
 
-          return conn->send(std::move(m));
+          return conn_state.active_conn->send(std::move(m));
         });
       }
 
       class DepthBroken: public std::exception {};
 
-      seastar::future<> stop_dispatch_messages() {
-        stop_send = true;
-        depth.broken(DepthBroken());
-        return stopped_send_promise.get_future();
+      seastar::future<JobReport> stop_dispatch_messages(unsigned i) {
+        auto &conn_state = conn_states[i];
+        conn_state.stop_send = true;
+        conn_state.depth.broken(DepthBroken());
+        return conn_state.stopped_send_promise.get_future();
       }
 
-      void do_dispatch_messages(crimson::net::Connection* conn) {
+      void do_dispatch_messages(unsigned i) {
         ceph_assert(seastar::this_shard_id() == sid);
-        ceph_assert(sent_count == 0);
-        conn_stats.start_time = mono_clock::now();
+        auto &conn_state = conn_states[i];
+        ceph_assert(conn_state.sent_count == 0);
+        conn_state.conn_stats.start_time = mono_clock::now();
         // forwarded to stopped_send_promise
         (void) seastar::do_until(
-          [this] { return stop_send; },
-          [this, conn] {
-            sent_count += 1;
-            return send_msg(conn);
-          }
+          [&conn_state] { return conn_state.stop_send; },
+          [this, &conn_state] { return send_msg(conn_state); }
         ).handle_exception_type([] (const DepthBroken& e) {
           // ok, stopped by stop_dispatch_messages()
-        }).then([this, conn] {
-          std::chrono::duration<double> dur_conn = conn_stats.connected_time - conn_stats.connecting_time;
-          std::chrono::duration<double> dur_msg = mono_clock::now() - conn_stats.start_time;
-          unsigned ops = conn_stats.received_count - conn_stats.start_count;
-          logger().info("{}: stopped sending OSDOPs.\n"
-                        "{}(depth={}):\n"
-                        "  connect time: {}s\n"
-                        "  messages received: {}\n"
-                        "  messaging time: {}s\n"
-                        "  latency: {}ms\n"
-                        "  IOPS: {}\n"
-                        "  throughput: {}MB/s\n",
-                        *conn,
-                        lname,
-                        nr_depth,
-                        dur_conn.count(),
-                        ops,
-                        dur_msg.count(),
-                        conn_stats.total_lat_s / conn_stats.sampled_count * 1000,
-                        ops / dur_msg.count(),
-                        ops / dur_msg.count() * msg_len / 1048576);
-          stopped_send_promise.set_value();
+        }).then([this, &conn_state, i] {
+          std::string name = get_name(i);
+          logger().info("{} {}: stopped sending OSDOPs",
+                        name, *conn_state.active_conn);
+
+          std::chrono::duration<double> dur_conn =
+              conn_state.conn_stats.connected_time -
+              conn_state.conn_stats.connecting_time;
+          std::chrono::duration<double> dur_msg =
+              mono_clock::now() - conn_state.conn_stats.start_time;
+          unsigned ops =
+              conn_state.conn_stats.received_count -
+              conn_state.conn_stats.start_count;
+
+          JobReport stats;
+          stats.name = name;
+          stats.depth = nr_depth;
+          stats.connect_time_s = dur_conn.count();
+          stats.total_msgs = ops;
+          stats.messaging_time_s = dur_msg.count();
+          stats.latency_ms =
+              conn_state.conn_stats.sampled_total_lat_s /
+              conn_state.conn_stats.sampled_count * 1000;
+          stats.iops = ops / dur_msg.count();
+          stats.throughput_mbps = ops / dur_msg.count() * msg_len / 1048576;
+
+          conn_state.stopped_send_promise.set_value(stats);
         });
       }
     };
   };
 
+  std::optional<unsigned> server_sid;
+  bool server_needs_report = false;
+  if (mode == perf_mode_t::both) {
+    ceph_assert(server_conf.is_fixed_cpu == true);
+    server_sid = server_conf.core;
+  } else if (mode == perf_mode_t::server) {
+    server_needs_report = true;
+  }
   return seastar::when_all(
-      test_state::Server::create(server_conf.core, server_conf.block_size),
-      create_sharded<test_state::Client>(client_conf.jobs, client_conf.block_size, client_conf.depth),
-      crimson::common::sharded_conf().start(EntityName{}, std::string_view{"ceph"}).then([] {
-        return crimson::common::local_conf().start();
-      }).then([crc_enabled] {
-        return crimson::common::local_conf().set_val(
-            "ms_crc_data", crc_enabled ? "true" : "false");
-      })
+    seastar::futurize_invoke([mode, server_conf, server_needs_report] {
+      if (mode == perf_mode_t::client) {
+        return seastar::make_ready_future<test_state::Server*>(nullptr);
+      } else {
+        return create_sharded<test_state::Server>(
+          server_conf.core,
+          server_conf.block_size,
+          server_needs_report);
+      }
+    }),
+    seastar::futurize_invoke([mode, client_conf, server_sid] {
+      if (mode == perf_mode_t::server) {
+        return seastar::make_ready_future<test_state::Client*>(nullptr);
+      } else {
+        unsigned nonce_base = ceph::util::generate_random_number<unsigned>();
+        logger().info("client nonce_base={}", nonce_base);
+        return create_sharded<test_state::Client>(
+          client_conf.num_clients,
+          client_conf.num_conns,
+          client_conf.block_size,
+          client_conf.depth,
+          nonce_base,
+          server_sid);
+      }
+    }),
+    crimson::common::sharded_conf().start(
+      EntityName{}, std::string_view{"ceph"}
+    ).then([] {
+      return crimson::common::local_conf().start();
+    }).then([crc_enabled] {
+      return crimson::common::local_conf().set_val(
+          "ms_crc_data", crc_enabled ? "true" : "false");
+    })
   ).then([=](auto&& ret) {
-    auto fp_server = std::move(std::get<0>(ret).get0());
+    auto server = std::move(std::get<0>(ret).get0());
     auto client = std::move(std::get<1>(ret).get0());
-    test_state::Server* server = fp_server.get();
+    // reserve core 0 for potentially better performance
     if (mode == perf_mode_t::both) {
-      logger().info("\nperf settings:\n  {}\n  {}\n",
-                    client_conf.str(), server_conf.str());
-      ceph_assert(seastar::smp::count >= 1+client_conf.jobs);
-      ceph_assert(client_conf.jobs > 0);
-      ceph_assert(seastar::smp::count >= 1+server_conf.core);
-      ceph_assert(server_conf.core == 0 || server_conf.core > client_conf.jobs);
+      logger().info("\nperf settings:\n  smp={}\n  {}\n  {}\n",
+                    seastar::smp::count, client_conf.str(), server_conf.str());
+      if (client_conf.skip_core_0) {
+        ceph_assert(seastar::smp::count > client_conf.num_clients);
+      } else {
+        ceph_assert(seastar::smp::count >= client_conf.num_clients);
+      }
+      ceph_assert(client_conf.num_clients > 0);
+      ceph_assert(seastar::smp::count > server_conf.core + client_conf.num_clients);
       return seastar::when_all_succeed(
-        server->init(server_conf.addr),
+        // it is not reasonable to allow server/client to shared cores for
+        // performance benchmarking purposes.
+        server->init(server_conf.addr, server_conf.is_fixed_cpu),
         client->init()
       ).then_unpack([client, addr = client_conf.server_addr] {
         return client->connect_wait_verify(addr);
@@ -670,13 +1133,18 @@ static seastar::future<> run(
         return client->dispatch_with_timer(ramptime, msgtime);
       }).then([client] {
         return client->shutdown();
-      }).then([server, fp_server = std::move(fp_server)] () mutable {
-        return server->shutdown().then([cleanup = std::move(fp_server)] {});
+      }).then([server] {
+        return server->shutdown();
       });
     } else if (mode == perf_mode_t::client) {
-      logger().info("\nperf settings:\n  {}\n", client_conf.str());
-      ceph_assert(seastar::smp::count >= 1+client_conf.jobs);
-      ceph_assert(client_conf.jobs > 0);
+      logger().info("\nperf settings:\n  smp={}\n  {}\n",
+                    seastar::smp::count, client_conf.str());
+      if (client_conf.skip_core_0) {
+        ceph_assert(seastar::smp::count > client_conf.num_clients);
+      } else {
+        ceph_assert(seastar::smp::count >= client_conf.num_clients);
+      }
+      ceph_assert(client_conf.num_clients > 0);
       return client->init(
       ).then([client, addr = client_conf.server_addr] {
         return client->connect_wait_verify(addr);
@@ -687,15 +1155,15 @@ static seastar::future<> run(
         return client->shutdown();
       });
     } else { // mode == perf_mode_t::server
-      ceph_assert(seastar::smp::count >= 1+server_conf.core);
-      logger().info("\nperf settings:\n  {}\n", server_conf.str());
-      return server->init(server_conf.addr
-      // dispatch ops
-      ).then([server] {
-        return server->wait();
-      // shutdown
-      }).then([server, fp_server = std::move(fp_server)] () mutable {
-        return server->shutdown().then([cleanup = std::move(fp_server)] {});
+      ceph_assert(seastar::smp::count > server_conf.core);
+      logger().info("\nperf settings:\n  smp={}\n  {}\n",
+                    seastar::smp::count, server_conf.str());
+      return seastar::async([server, server_conf] {
+        // FIXME: SIGINT is not received by stop_signal
+        seastar_apps_lib::stop_signal should_stop;
+        server->init(server_conf.addr, server_conf.is_fixed_cpu).get();
+        should_stop.wait().get();
+        server->shutdown().get();
       });
     }
   }).finally([] {
@@ -711,21 +1179,27 @@ int main(int argc, char** argv)
   app.add_options()
     ("mode", bpo::value<unsigned>()->default_value(0),
      "0: both, 1:client, 2:server")
-    ("addr", bpo::value<std::string>()->default_value("v2:127.0.0.1:9010"),
+    ("server-addr", bpo::value<std::string>()->default_value("v2:127.0.0.1:9010"),
      "server address(only support msgr v2 protocol)")
     ("ramptime", bpo::value<unsigned>()->default_value(5),
      "seconds of client ramp-up time")
     ("msgtime", bpo::value<unsigned>()->default_value(15),
      "seconds of client messaging time")
-    ("jobs", bpo::value<unsigned>()->default_value(1),
-     "number of client jobs (messengers)")
-    ("cbs", bpo::value<unsigned>()->default_value(4096),
+    ("clients", bpo::value<unsigned>()->default_value(1),
+     "number of client messengers")
+    ("conns-per-client", bpo::value<unsigned>()->default_value(1),
+     "number of connections per client")
+    ("client-bs", bpo::value<unsigned>()->default_value(4096),
      "client block size")
     ("depth", bpo::value<unsigned>()->default_value(512),
-     "client io depth")
-    ("core", bpo::value<unsigned>()->default_value(0),
-     "server running core")
-    ("sbs", bpo::value<unsigned>()->default_value(0),
+     "client io depth per job")
+    ("client-skip-core-0", bpo::value<bool>()->default_value(true),
+     "client skip core 0")
+    ("server-fixed-cpu", bpo::value<bool>()->default_value(true),
+     "server is in the fixed cpu mode, non-fixed doesn't support the mode both")
+    ("server-core", bpo::value<unsigned>()->default_value(1),
+     "server messenger running core")
+    ("server-bs", bpo::value<unsigned>()->default_value(0),
      "server block size")
     ("crc-enabled", bpo::value<bool>()->default_value(false),
      "enable CRC checks");
index f4f7240fcfcb2fc384f90972aa5abba855d910da..ebe85c3041e5aa76aef799858b2c4d3dc39b5191 100644 (file)
@@ -7,6 +7,7 @@
 #include <map>
 #include <memory>
 #include <regex>
+#include <sstream>
 #include <string>
 #include <utility>
 
@@ -146,18 +147,19 @@ void DaemonMetricCollector::dump_asok_metrics() {
           std::string counter_name = perf_group + "_" + counter_name_init;
           promethize(counter_name);
 
-          if (counters_labels.empty()) {
-            auto labels_and_name = get_labels_and_metric_name(daemon_name, counter_name);
-            labels = labels_and_name.first;
-            counter_name = labels_and_name.second;
+          auto extra_labels = get_extra_labels(daemon_name);
+          if (extra_labels.empty()) {
+            dout(1) << "Unable to parse instance_id from daemon_name: " << daemon_name << dendl;
+            continue;
           }
+          labels.insert(extra_labels.begin(), extra_labels.end());
+
           // For now this is only required for rgw multi-site metrics
           auto multisite_labels_and_name = add_fixed_name_metrics(counter_name);
           if (!multisite_labels_and_name.first.empty()) {
             labels.insert(multisite_labels_and_name.first.begin(), multisite_labels_and_name.first.end());
             counter_name = multisite_labels_and_name.second;
           }
-          labels.insert({"ceph_daemon", quote(daemon_name)});
           auto perf_values = counters_values.at(counter_name_init);
           dump_asok_metric(counter_group, perf_values, counter_name, labels);
         }
@@ -285,12 +287,16 @@ std::string DaemonMetricCollector::asok_request(AdminSocketClient &asok,
   return response;
 }
 
-std::pair<labels_t, std::string>
-DaemonMetricCollector::get_labels_and_metric_name(std::string daemon_name,
-                                                  std::string metric_name) {
-  std::string new_metric_name;
+labels_t DaemonMetricCollector::get_extra_labels(std::string daemon_name) {
   labels_t labels;
-  new_metric_name = metric_name;
+  const std::string ceph_daemon_prefix = "ceph-";
+  const std::string ceph_client_prefix = "client.";
+  if (daemon_name.rfind(ceph_daemon_prefix, 0) == 0) {
+    daemon_name = daemon_name.substr(ceph_daemon_prefix.size());
+  }
+  if (daemon_name.rfind(ceph_client_prefix, 0) == 0) {
+    daemon_name = daemon_name.substr(ceph_client_prefix.size());
+  }
   // In vstart cluster socket files for rgw are stored as radosgw.<instance_id>.asok
   if (daemon_name.find("radosgw") != std::string::npos) {
     std::size_t pos = daemon_name.find_last_of('.');
@@ -298,23 +304,23 @@ DaemonMetricCollector::get_labels_and_metric_name(std::string daemon_name,
     labels["instance_id"] = quote(tmp);
   }
   else if (daemon_name.find("rgw") != std::string::npos) {
-    std::string tmp = daemon_name.substr(16, std::string::npos);
-    std::string::size_type pos = tmp.find('.');
-    labels["instance_id"] = quote("rgw." + tmp.substr(0, pos));
-  }
-  else if (daemon_name.find("rbd-mirror") != std::string::npos) {
-    std::regex re(
-        "^rbd_mirror_image_([^/]+)/(?:(?:([^/]+)/"
-        ")?)(.*)\\.(replay(?:_bytes|_latency)?)$");
-    std::smatch match;
-    if (std::regex_search(daemon_name, match, re) == true) {
-      new_metric_name = "ceph_rbd_mirror_image_" + match.str(4);
-      labels["pool"] = quote(match.str(1));
-      labels["namespace"] = quote(match.str(2));
-      labels["image"] = quote(match.str(3));
+    // fetch intance_id for e.g. "hrgsea" from daemon_name=rgw.foo.ceph-node-00.hrgsea.2.94739968030880
+    std::vector<std::string> elems;
+    std::stringstream ss;
+    ss.str(daemon_name);
+    std::string item;
+    while (std::getline(ss, item, '.')) {
+        elems.push_back(item);
     }
+    if (elems.size() >= 4) {
+      labels["instance_id"] = quote(elems[3]);
+    } else {
+      return labels_t();
+    }
+  } else {
+    labels.insert({"ceph_daemon", quote(daemon_name)});
   }
-  return {labels, new_metric_name};
+  return labels;
 }
 
 // Add fixed name metrics from existing ones that have details in their names
index 3d35a9c79de7d59f824ed4716a149c302c4b4325..e906fb13a5970c956c3e263b2e7dd462d0b53a77 100644 (file)
@@ -34,6 +34,7 @@ class DaemonMetricCollector {
 public:
   void main();
   std::string get_metrics();
+  labels_t get_extra_labels(std::string daemon_name);
 
 private:
   std::map<std::string, AdminSocketClient> clients;
@@ -47,8 +48,6 @@ private:
   void dump_asok_metric(boost::json::object perf_info,
                         boost::json::value perf_values, std::string name,
                         labels_t labels);
-  std::pair<labels_t, std::string>
-  get_labels_and_metric_name(std::string daemon_name, std::string metric_name);
   std::pair<labels_t, std::string> add_fixed_name_metrics(std::string metric_name);
   void get_process_metrics(std::vector<std::pair<std::string, int>> daemon_pids);
   std::string asok_request(AdminSocketClient &asok, std::string command, std::string daemon_name);
index 1a75a519333600ea78218f85850e90252b690045..28440c820dcfb8f17d0a04fcc301401025ec80fd 100644 (file)
@@ -418,6 +418,7 @@ enum {
        CEPH_MDS_OP_RMSNAP     = 0x01401,
        CEPH_MDS_OP_LSSNAP     = 0x00402,
        CEPH_MDS_OP_RENAMESNAP = 0x01403,
+       CEPH_MDS_OP_READDIR_SNAPDIFF   = 0x01404,
 
        // internal op
        CEPH_MDS_OP_FRAGMENTDIR= 0x01500,
@@ -429,6 +430,11 @@ enum {
        CEPH_MDS_OP_RDLOCK_FRAGSSTATS = 0x01507
 };
 
+#define IS_CEPH_MDS_OP_NEWINODE(op) (op == CEPH_MDS_OP_CREATE     || \
+                                    op == CEPH_MDS_OP_MKNOD      || \
+                                    op == CEPH_MDS_OP_MKDIR      || \
+                                    op == CEPH_MDS_OP_SYMLINK)
+
 extern const char *ceph_mds_op_name(int op);
 
 // setattr mask is an int
@@ -473,12 +479,12 @@ int ceph_flags_sys2wire(int flags);
 #define CEPH_XATTR_REMOVE  (1 << 31)
 
 /*
- * readdir request flags;
+ * readdir/readdir_snapdiff request flags;
  */
 #define CEPH_READDIR_REPLY_BITFLAGS    (1<<0)
 
 /*
- * readdir reply flags.
+ * readdir/readdir_snapdiff reply flags.
  */
 #define CEPH_READDIR_FRAG_END          (1<<0)
 #define CEPH_READDIR_FRAG_COMPLETE     (1<<8)
@@ -622,9 +628,17 @@ union ceph_mds_request_args {
                __le64 parent;
                __le32 hash;
        } __attribute__ ((packed)) lookupino;
+       struct {
+               __le32 frag;                 /* which dir fragment */
+               __le32 max_entries;          /* how many dentries to grab */
+               __le32 max_bytes;
+               __le16 flags;
+                __le32 offset_hash;
+               __le64 snap_other;
+       } __attribute__ ((packed)) snapdiff;
 } __attribute__ ((packed));
 
-#define CEPH_MDS_REQUEST_HEAD_VERSION  2
+#define CEPH_MDS_REQUEST_HEAD_VERSION  3
 
 /*
  * Note that any change to this structure must ensure that it is compatible
@@ -645,9 +659,12 @@ struct ceph_mds_request_head {
 
        __le32 ext_num_retry;          /* new count retry attempts */
        __le32 ext_num_fwd;            /* new count fwd attempts */
+
+       __le32 struct_len;             /* to store size of struct ceph_mds_request_head */
+       __le32 owner_uid, owner_gid;   /* used for OPs which create inodes */
 } __attribute__ ((packed));
 
-void inline encode(const struct ceph_mds_request_head& h, ceph::buffer::list& bl, bool old_version) {
+void inline encode(const struct ceph_mds_request_head& h, ceph::buffer::list& bl) {
   using ceph::encode;
   encode(h.version, bl);
   encode(h.oldest_client_tid, bl);
@@ -667,14 +684,30 @@ void inline encode(const struct ceph_mds_request_head& h, ceph::buffer::list& bl
   encode(h.ino, bl);
   bl.append((char*)&h.args, sizeof(h.args));
 
-  if (!old_version) {
+  if (h.version >= 2) {
     encode(h.ext_num_retry, bl);
     encode(h.ext_num_fwd, bl);
   }
+
+  if (h.version >= 3) {
+    __u32 struct_len = sizeof(struct ceph_mds_request_head);
+    encode(struct_len, bl);
+    encode(h.owner_uid, bl);
+    encode(h.owner_gid, bl);
+
+    /*
+     * Please, add new fields handling here.
+     * You don't need to check h.version as we do it
+     * in decode(), because decode can properly skip
+     * all unsupported fields if h.version >= 3.
+     */
+  }
 }
 
 void inline decode(struct ceph_mds_request_head& h, ceph::buffer::list::const_iterator& bl) {
   using ceph::decode;
+  unsigned struct_end = bl.get_off();
+
   decode(h.version, bl);
   decode(h.oldest_client_tid, bl);
   decode(h.mdsmap_epoch, bl);
@@ -695,6 +728,42 @@ void inline decode(struct ceph_mds_request_head& h, ceph::buffer::list::const_it
     h.ext_num_retry = h.num_retry;
     h.ext_num_fwd = h.num_fwd;
   }
+
+  if (h.version >= 3) {
+    decode(h.struct_len, bl);
+    struct_end += h.struct_len;
+
+    decode(h.owner_uid, bl);
+    decode(h.owner_gid, bl);
+  } else {
+    /*
+     * client is old: let's take caller_{u,g}id as owner_{u,g}id
+     * this is how it worked before adding of owner_{u,g}id fields.
+     */
+    h.owner_uid = h.caller_uid;
+    h.owner_gid = h.caller_gid;
+  }
+
+  /* add new fields handling here */
+
+  /*
+   * From version 3 we have struct_len field.
+   * It allows us to properly handle a case
+   * when client send struct ceph_mds_request_head
+   * bigger in size than MDS supports. In this
+   * case we just want to skip all remaining bytes
+   * at the end.
+   *
+   * See also DECODE_FINISH macro. Unfortunately,
+   * we can't start using it right now as it will be
+   * an incompatible protocol change.
+   */
+  if (h.version >= 3) {
+    if (bl.get_off() > struct_end)
+      throw ::ceph::buffer::malformed_input(DECODE_ERR_PAST(__PRETTY_FUNCTION__));
+    if (bl.get_off() < struct_end)
+      bl += struct_end - bl.get_off();
+  }
 }
 
 /* cap/lease release record */
index 62e0b51c2d31580e65039940b3f1ee089a922e84..dc62698fa482a3f9346c9104012a03137af8925b 100644 (file)
@@ -27,6 +27,7 @@
 #include <stdint.h>
 #include <stdbool.h>
 #include <fcntl.h>
+#include <dirent.h>
 
 #include "ceph_ll_client.h"
 
@@ -112,6 +113,11 @@ struct snap_info {
   struct snap_metadata *snap_metadata;
 };
 
+struct ceph_snapdiff_entry_t {
+  struct dirent dir_entry;
+  uint64_t snapid; //should be snapid_t but prefer not to exposure it
+};
+
 /* setattr mask bits (up to an int in size) */
 #ifndef CEPH_SETATTR_MODE
 #define CEPH_SETATTR_MODE              (1 << 0)
@@ -609,6 +615,53 @@ int ceph_readdir_r(struct ceph_mount_info *cmount, struct ceph_dir_result *dirp,
 int ceph_readdirplus_r(struct ceph_mount_info *cmount, struct ceph_dir_result *dirp, struct dirent *de,
                       struct ceph_statx *stx, unsigned want, unsigned flags, struct Inode **out);
 
+struct ceph_snapdiff_info
+{
+  struct ceph_mount_info* cmount;
+  struct ceph_dir_result* dir1;    // primary dir entry to build snapdiff for.
+  struct ceph_dir_result* dir_aux; // aux dir entry to identify the second snapshot.
+                                   // Can point to the parent dir entry if entry-in-question
+                                   // doesn't exist in the second snapshot
+};
+
+/**
+ * Opens snapdiff stream to get snapshots delta (aka snapdiff).
+ *
+ * @param cmount the ceph mount handle to use for snapdiff retrieval.
+ * @param root_path  root path for snapshots-in-question
+ * @param rel_path subpath under the root to build delta for
+ * @param snap1 the first snapshot name
+ * @param snap2 the second snapshot name
+ * @param out resulting snapdiff stream handle to be used for snapdiff results
+              retrieval via ceph_readdir_snapdiff
+ * @returns 0 on success and negative error code otherwise
+ */
+int ceph_open_snapdiff(struct ceph_mount_info* cmount,
+                       const char* root_path,
+                       const char* rel_path,
+                       const char* snap1,
+                       const char* snap2,
+                       struct ceph_snapdiff_info* out);
+/**
+ * Get the next snapshot delta entry.
+ *
+ * @param info snapdiff stream handle opened via ceph_open_snapdiff()
+ * @param out  the next snapdiff entry which includes directory entry and the
+ *             entry's snapshot id - later one for emerged/existing entry or
+ *             former snapshot id for the removed entry.
+ * @returns >0 on success, 0 if no more entries in the stream and negative
+ *          error code otherwise
+ */
+int ceph_readdir_snapdiff(struct ceph_snapdiff_info* snapdiff,
+                          struct ceph_snapdiff_entry_t* out);
+/**
+ * Close snapdiff stream.
+ *
+ * @param info snapdiff stream handle opened via ceph_open_snapdiff()
+ * @returns 0 on success and negative error code otherwise
+ */
+int ceph_close_snapdiff(struct ceph_snapdiff_info* snapdiff);
+
 /**
  * Gets multiple directory entries.
  *
index c65a6ae4465aed486ee8c1d9043b058d9669324d..1100d69ebb0239628b3fb2422e0ab33728971937 100644 (file)
@@ -259,9 +259,6 @@ typedef unsigned int uint;
 
 typedef _sigset_t sigset_t;
 
-typedef unsigned int uid_t;
-typedef unsigned int gid_t;
-
 typedef unsigned int blksize_t;
 typedef unsigned __int64 blkcnt_t;
 typedef unsigned short nlink_t;
index 55cfdcb7871e683b39fa4cbe6ccfdb4cdf166500..eac3a2159bf8803a5f486714e7c360d7f891c42b 100644 (file)
@@ -172,6 +172,7 @@ extern const char *ceph_osd_state_name(int s);
 #define CEPH_OSDMAP_PURGED_SNAPDIRS  (1<<20) /* osds have converted snapsets */
 #define CEPH_OSDMAP_NOSNAPTRIM       (1<<21) /* disable snap trimming */
 #define CEPH_OSDMAP_PGLOG_HARDLIMIT  (1<<22) /* put a hard limit on pg log length */
+#define CEPH_OSDMAP_NOAUTOSCALE      (1<<23)  /* block pg autoscale */
 
 /* these are hidden in 'ceph status' view */
 #define CEPH_OSDMAP_SEMIHIDDEN_FLAGS (CEPH_OSDMAP_REQUIRE_JEWEL|       \
index 318c8fab7568104bceacce320cba4ff3aba35447..deeedf071f37c330a65e312a202028fa6711cdb8 100644 (file)
@@ -42,3 +42,6 @@
 
 #define XATTR_CREATE  1
 #define XATTR_REPLACE 2
+
+typedef unsigned int uid_t;
+typedef unsigned int gid_t;
index 99da0c5c5c8da5c9dc57c613c991c5049e8b15de..51e73efdb65ec572bdf9dede5f17e3a4803e40f4 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "auth/Crypto.h"
 #include "client/Client.h"
+#include "client/Inode.h"
 #include "librados/RadosClient.h"
 #include "common/async/context_pool.h"
 #include "common/ceph_argparse.h"
@@ -28,6 +29,7 @@
 #include "mon/MonClient.h"
 #include "include/str_list.h"
 #include "include/stringify.h"
+#include "include/object.h"
 #include "messages/MMonMap.h"
 #include "msg/Messenger.h"
 #include "include/ceph_assert.h"
@@ -687,6 +689,124 @@ extern "C" int ceph_readdirplus_r(struct ceph_mount_info *cmount, struct ceph_di
   return cmount->get_client()->readdirplus_r(reinterpret_cast<dir_result_t*>(dirp), de, stx, want, flags, out);
 }
 
+extern "C" int ceph_open_snapdiff(struct ceph_mount_info* cmount,
+                                  const char* root_path,
+                                  const char* rel_path,
+                                  const char* snap1,
+                                  const char* snap2,
+                                  struct ceph_snapdiff_info* out)
+{
+  if (!cmount->is_mounted()) {
+    /* we set errno to signal errors. */
+    errno = ENOTCONN;
+    return -errno;
+  }
+  if (!out || !root_path || !rel_path ||
+      !snap1 || !*snap1 || !snap2 || !*snap2) {
+    errno = EINVAL;
+    return -errno;
+  }
+  out->cmount = cmount;
+  out->dir1 = out->dir_aux = nullptr;
+
+  char full_path1[PATH_MAX];
+  char snapdir[PATH_MAX];
+  cmount->conf_get("client_snapdir", snapdir, sizeof(snapdir) - 1);
+  int n = snprintf(full_path1, PATH_MAX,
+    "%s/%s/%s/%s", root_path, snapdir, snap1, rel_path);
+  if (n < 0 || n == PATH_MAX) {
+    errno = ENAMETOOLONG;
+    return -errno;
+  }
+  char full_path2[PATH_MAX];
+  n = snprintf(full_path2, PATH_MAX,
+    "%s/%s/%s/%s", root_path, snapdir, snap2, rel_path);
+  if (n < 0 || n == PATH_MAX) {
+    errno = ENAMETOOLONG;
+    return -errno;
+  }
+
+  int r = ceph_opendir(cmount, full_path1, &(out->dir1));
+  if (r != 0) {
+    //it's OK to have one of the snap paths absent - attempting another one
+    r = ceph_opendir(cmount, full_path2, &(out->dir1));
+    if (r != 0) {
+      // both snaps are absent, giving up
+      errno = ENOENT;
+      return -errno;
+    }
+    std::swap(snap1, snap2); // will use snap1 to learn snap_other below
+  } else {
+    // trying to open second snapshot to learn snapid and
+    // get the entry loaded into the client cache if any.
+    r = ceph_opendir(cmount, full_path2, &(out->dir_aux));
+    //paranoic, rely on this value below
+    out->dir_aux = r == 0 ? out->dir_aux : nullptr;
+  }
+  if (!out->dir_aux) {
+    // now trying to learn the second snapshot's id by using snapshot's root
+    n = snprintf(full_path2, PATH_MAX,
+        "%s/%s/%s", root_path, snapdir, snap2);
+    ceph_assert(n > 0 && n < PATH_MAX); //we've already checked above
+                                        //that longer string fits.
+                                        // Hence unlikely to assert
+    r = ceph_opendir(cmount, full_path2, &(out->dir_aux));
+    if (r != 0) {
+      goto close_err;
+    }
+  }
+  return 0;
+
+close_err:
+  ceph_close_snapdiff(out);
+  return r;
+}
+
+extern "C" int ceph_readdir_snapdiff(struct ceph_snapdiff_info* snapdiff,
+                                     struct ceph_snapdiff_entry_t* out)
+{
+  if (!snapdiff->cmount->is_mounted()) {
+    /* also sets errno to signal errors. */
+    errno = ENOTCONN;
+    return -errno;
+  }
+  dir_result_t* d1 = reinterpret_cast<dir_result_t*>(snapdiff->dir1);
+  dir_result_t* d2 = reinterpret_cast<dir_result_t*>(snapdiff->dir_aux);
+  if (!d1 || !d2 || !d1->inode || !d2->inode) {
+    errno = EINVAL;
+    return -errno;
+  }
+  snapid_t snapid;
+  int r = snapdiff->cmount->get_client()->readdir_snapdiff(
+    d1,
+    d2->inode->snapid,
+    &(out->dir_entry),
+    &snapid);
+  if (r >= 0) {
+    // converting snapid_t to uint64_t to avoid snapid_t exposure
+    out->snapid = snapid;
+  }
+  return r;
+}
+
+extern "C" int ceph_close_snapdiff(struct ceph_snapdiff_info* snapdiff)
+{
+  if (!snapdiff->cmount || !snapdiff->cmount->is_mounted()) {
+    /* also sets errno to signal errors. */
+    errno = ENOTCONN;
+    return -errno;
+  }
+  if (snapdiff->dir_aux) {
+    ceph_closedir(snapdiff->cmount, snapdiff->dir_aux);
+  }
+  if (snapdiff->dir1) {
+    ceph_closedir(snapdiff->cmount, snapdiff->dir1);
+  }
+  snapdiff->cmount = nullptr;
+  snapdiff->dir1 = snapdiff->dir_aux = nullptr;
+  return 0;
+}
+
 extern "C" int ceph_getdents(struct ceph_mount_info *cmount, struct ceph_dir_result *dirp,
                             char *buf, int buflen)
 {
index f533780c548bd99bda9555b8902c995872a1f3cb..b4fb968413bfb0ef962782ab1268b0f2c5acc998 100644 (file)
@@ -54,9 +54,9 @@ SQLITE_EXTENSION_INIT1
 #define dout_subsys ceph_subsys_cephsqlite
 #undef dout_prefix
 #define dout_prefix *_dout << "cephsqlite: " << __func__ << ": "
-#define d(vfs,lvl) ldout(getcct(vfs), (lvl)) << "(client." << getdata(vfs).cluster.get_instance_id() << ") "
-#define dv(lvl) d(vfs,(lvl))
-#define df(lvl) d(f->vfs,(lvl)) << f->loc << " "
+#define d(cct,cluster,lvl) ldout((cct), (lvl)) << "(client." << cluster->get_instance_id() << ") "
+#define dv(lvl) d(cct,cluster,(lvl))
+#define df(lvl) d(f->io.cct,f->io.cluster,(lvl)) << f->loc << " "
 
 enum {
   P_FIRST = 0xf0000,
@@ -80,15 +80,21 @@ enum {
   P_LAST,
 };
 
+using cctptr = boost::intrusive_ptr<CephContext>;
+using rsptr = std::shared_ptr<librados::Rados>;
+
 struct cephsqlite_appdata {
   ~cephsqlite_appdata() {
+    {
+      std::scoped_lock lock(cluster_mutex);
+      _disconnect();
+    }
     if (logger) {
       cct->get_perfcounters_collection()->remove(logger.get());
     }
     if (striper_logger) {
       cct->get_perfcounters_collection()->remove(striper_logger.get());
     }
-    cluster.shutdown();
   }
   int setup_perf() {
     ceph_assert(cct);
@@ -118,26 +124,96 @@ struct cephsqlite_appdata {
     cct->get_perfcounters_collection()->add(striper_logger.get());
     return 0;
   }
-  int init_cluster() {
+
+  std::pair<cctptr, rsptr> get_cluster() {
+    std::scoped_lock lock(cluster_mutex);
+    if (!cct) {
+      if (int rc = _open(nullptr); rc < 0) {
+        ceph_abort("could not open connection to ceph");
+      }
+    }
+    return {cct, cluster};
+  }
+  int connect() {
+    std::scoped_lock lock(cluster_mutex);
+    return _connect();
+  }
+  int reconnect() {
+    std::scoped_lock lock(cluster_mutex);
+    _disconnect();
+    return _connect();
+  }
+  int maybe_reconnect(rsptr _cluster) {
+    std::scoped_lock lock(cluster_mutex);
+    if (!cluster || cluster == _cluster) {
+      ldout(cct, 10) << "reconnecting to RADOS" << dendl;
+      _disconnect();
+      return _connect();
+    } else {
+      ldout(cct, 10) << "already reconnected" << dendl;
+      return 0;
+    }
+  }
+  int open(CephContext* _cct) {
+    std::scoped_lock lock(cluster_mutex);
+    return _open(_cct);
+  }
+
+  std::unique_ptr<PerfCounters> logger;
+  std::shared_ptr<PerfCounters> striper_logger;
+
+private:
+  int _open(CephContext* _cct) {
+    if (!_cct) {
+      std::vector<const char*> env_args;
+      env_to_vec(env_args, "CEPH_ARGS");
+      std::string cluster, conf_file_list; // unused
+      CephInitParameters iparams = ceph_argparse_early_args(env_args, CEPH_ENTITY_TYPE_CLIENT, &cluster, &conf_file_list);
+      cct = cctptr(common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0), false);
+      cct->_conf.parse_config_files(nullptr, &std::cerr, 0);
+      cct->_conf.parse_env(cct->get_module_type()); // environment variables override
+      cct->_conf.apply_changes(nullptr);
+      common_init_finish(cct.get());
+    } else {
+      cct = cctptr(_cct);
+    }
+
+    if (int rc = setup_perf(); rc < 0) {
+      return rc;
+    }
+
+    if (int rc = _connect(); rc < 0) {
+      return rc;
+    }
+
+    return 0;
+  }
+  void _disconnect() {
+    if (cluster) {
+      cluster.reset();
+    }
+  }
+  int _connect() {
     ceph_assert(cct);
+    auto _cluster = rsptr(new librados::Rados());
     ldout(cct, 5) << "initializing RADOS handle as " << cct->_conf->name << dendl;
-    if (int rc = cluster.init_with_context(cct.get()); rc < 0) {
+    if (int rc = _cluster->init_with_context(cct.get()); rc < 0) {
       lderr(cct) << "cannot initialize RADOS: " << cpp_strerror(rc) << dendl;
       return rc;
     }
-    if (int rc = cluster.connect(); rc < 0) {
+    if (int rc = _cluster->connect(); rc < 0) {
       lderr(cct) << "cannot connect: " << cpp_strerror(rc) << dendl;
       return rc;
     }
-    auto s = cluster.get_addrs();
+    auto s = _cluster->get_addrs();
     ldout(cct, 5) << "completed connection to RADOS with address " << s << dendl;
+    cluster = std::move(_cluster);
     return 0;
   }
 
-  boost::intrusive_ptr<CephContext> cct;
-  std::unique_ptr<PerfCounters> logger;
-  std::shared_ptr<PerfCounters> striper_logger;
-  librados::Rados cluster;
+  ceph::mutex cluster_mutex = ceph::make_mutex("libcephsqlite");;
+  cctptr cct;
+  rsptr cluster;
 };
 
 struct cephsqlite_fileloc {
@@ -147,6 +223,8 @@ struct cephsqlite_fileloc {
 };
 
 struct cephsqlite_fileio {
+  cctptr cct;
+  rsptr cluster; // anchor for ioctx
   librados::IoCtx ioctx;
   std::unique_ptr<SimpleRADOSStriper> rs;
 };
@@ -176,36 +254,6 @@ struct cephsqlite_file {
 
 #define getdata(vfs) (*((cephsqlite_appdata*)((vfs)->pAppData)))
 
-static CephContext* getcct(sqlite3_vfs* vfs)
-{
-  auto&& appd = getdata(vfs);
-  auto& cct = appd.cct;
-  if (cct) {
-    return cct.get();
-  }
-
-  /* bootstrap cct */
-  std::vector<const char*> env_args;
-  env_to_vec(env_args, "CEPH_ARGS");
-  std::string cluster, conf_file_list; // unused
-  CephInitParameters iparams = ceph_argparse_early_args(env_args, CEPH_ENTITY_TYPE_CLIENT, &cluster, &conf_file_list);
-  cct = boost::intrusive_ptr<CephContext>(common_preinit(iparams, CODE_ENVIRONMENT_LIBRARY, 0), false);
-  cct->_conf.parse_config_files(nullptr, &std::cerr, 0);
-  cct->_conf.parse_env(cct->get_module_type()); // environment variables override
-  cct->_conf.apply_changes(nullptr);
-  common_init_finish(cct.get());
-
-  if (int rc = appd.setup_perf(); rc < 0) {
-    ceph_abort("cannot setup perf counters");
-  }
-
-  if (int rc = appd.init_cluster(); rc < 0) {
-    ceph_abort("cannot setup RADOS cluster handle");
-  }
-
-  return cct.get();
-}
-
 static int Lock(sqlite3_file *file, int ilock)
 {
   auto f = (cephsqlite_file*)file;
@@ -218,6 +266,9 @@ static int Lock(sqlite3_file *file, int ilock)
   if (!f->io.rs->is_locked() && ilock > SQLITE_LOCK_NONE) {
     if (int rc = f->io.rs->lock(0); rc < 0) {
       df(5) << "failed: " << rc << dendl;
+      if (rc == -EBLOCKLISTED) {
+        getdata(f->vfs).maybe_reconnect(f->io.cluster);
+      }
       return SQLITE_IOERR;
     }
   }
@@ -240,6 +291,9 @@ static int Unlock(sqlite3_file *file, int ilock)
   if (ilock <= SQLITE_LOCK_NONE && SQLITE_LOCK_NONE < lock) {
     if (int rc = f->io.rs->unlock(); rc < 0) {
       df(5) << "failed: " << rc << dendl;
+      if (rc == -EBLOCKLISTED) {
+        getdata(f->vfs).maybe_reconnect(f->io.cluster);
+      }
       return SQLITE_IOERR;
     }
   }
@@ -290,13 +344,16 @@ static int Read(sqlite3_file *file, void *buf, int len, sqlite_int64 off)
 
   if (int rc = f->io.rs->read(buf, len, off); rc < 0) {
     df(5) << "read failed: " << cpp_strerror(rc) << dendl;
+    if (rc == -EBLOCKLISTED) {
+      getdata(f->vfs).maybe_reconnect(f->io.cluster);
+    }
     return SQLITE_IOERR_READ;
   } else {
     df(5) << "= " << rc << dendl;
     auto end = ceph::coarse_mono_clock::now();
     getdata(f->vfs).logger->tinc(P_OPF_READ, end-start);
     if (rc < len) {
-      memset(buf, 0, len-rc);
+      memset((unsigned char*)buf+rc, 0, len-rc);
       return SQLITE_IOERR_SHORT_READ;
     } else {
       return SQLITE_OK;
@@ -312,6 +369,9 @@ static int Write(sqlite3_file *file, const void *buf, int len, sqlite_int64 off)
 
   if (int rc = f->io.rs->write(buf, len, off); rc < 0) {
     df(5) << "write failed: " << cpp_strerror(rc) << dendl;
+    if (rc == -EBLOCKLISTED) {
+      getdata(f->vfs).maybe_reconnect(f->io.cluster);
+    }
     return SQLITE_IOERR_WRITE;
   } else {
     df(5) << "= " << rc << dendl;
@@ -330,6 +390,9 @@ static int Truncate(sqlite3_file *file, sqlite_int64 size)
 
   if (int rc = f->io.rs->truncate(size); rc < 0) {
     df(5) << "truncate failed: " << cpp_strerror(rc) << dendl;
+    if (rc == -EBLOCKLISTED) {
+      getdata(f->vfs).maybe_reconnect(f->io.cluster);
+    }
     return SQLITE_IOERR;
   }
 
@@ -346,6 +409,9 @@ static int Sync(sqlite3_file *file, int flags)
 
   if (int rc = f->io.rs->flush(); rc < 0) {
     df(5) << "failed: " << cpp_strerror(rc) << dendl;
+    if (rc == -EBLOCKLISTED) {
+      getdata(f->vfs).maybe_reconnect(f->io.cluster);
+    }
     return SQLITE_IOERR;
   }
 
@@ -366,6 +432,9 @@ static int FileSize(sqlite3_file *file, sqlite_int64 *osize)
   uint64_t size = 0;
   if (int rc = f->io.rs->stat(&size); rc < 0) {
     df(5) << "stat failed: " << cpp_strerror(rc) << dendl;
+    if (rc == -EBLOCKLISTED) {
+      getdata(f->vfs).maybe_reconnect(f->io.cluster);
+    }
     return SQLITE_NOTFOUND;
   }
 
@@ -397,37 +466,34 @@ static bool parsepath(std::string_view path, struct cephsqlite_fileloc* fileloc)
   return true;
 }
 
-static int makestriper(sqlite3_vfs* vfs, const cephsqlite_fileloc& loc, cephsqlite_fileio* io)
+static int makestriper(sqlite3_vfs* vfs, cctptr cct, rsptr cluster, const cephsqlite_fileloc& loc, cephsqlite_fileio* io)
 {
-  auto&& appd = getdata(vfs);
-  auto& cct = appd.cct;
-  auto& cluster = appd.cluster;
   bool gotmap = false;
 
-  dv(10) << loc << dendl;
+  d(cct,cluster,10) << loc << dendl;
 
 enoent_retry:
   if (loc.pool[0] == '*') {
     std::string err;
     int64_t id = strict_strtoll(loc.pool.c_str()+1, 10, &err);
     ceph_assert(err.empty());
-    if (int rc = cluster.ioctx_create2(id, io->ioctx); rc < 0) {
+    if (int rc = cluster->ioctx_create2(id, io->ioctx); rc < 0) {
       if (rc == -ENOENT && !gotmap) {
-        cluster.wait_for_latest_osdmap();
+        cluster->wait_for_latest_osdmap();
         gotmap = true;
         goto enoent_retry;
       }
-      dv(10) << "cannot create ioctx: " << cpp_strerror(rc) << dendl;
+      d(cct,cluster,1) << "cannot create ioctx: " << cpp_strerror(rc) << dendl;
       return rc;
     }
   } else {
-    if (int rc = cluster.ioctx_create(loc.pool.c_str(), io->ioctx); rc < 0) {
+    if (int rc = cluster->ioctx_create(loc.pool.c_str(), io->ioctx); rc < 0) {
       if (rc == -ENOENT && !gotmap) {
-        cluster.wait_for_latest_osdmap();
+        cluster->wait_for_latest_osdmap();
         gotmap = true;
         goto enoent_retry;
       }
-      dv(10) << "cannot create ioctx: " << cpp_strerror(rc) << dendl;
+      d(cct,cluster,1) << "cannot create ioctx: " << cpp_strerror(rc) << dendl;
       return rc;
     }
   }
@@ -436,10 +502,12 @@ enoent_retry:
     io->ioctx.set_namespace(loc.radosns);
 
   io->rs = std::make_unique<SimpleRADOSStriper>(io->ioctx, loc.name);
-  io->rs->set_logger(appd.striper_logger);
+  io->rs->set_logger(getdata(vfs).striper_logger);
   io->rs->set_lock_timeout(cct->_conf.get_val<std::chrono::milliseconds>("cephsqlite_lock_renewal_timeout"));
   io->rs->set_lock_interval(cct->_conf.get_val<std::chrono::milliseconds>("cephsqlite_lock_renewal_interval"));
   io->rs->set_blocklist_the_dead(cct->_conf.get_val<bool>("cephsqlite_blocklist_dead_locker"));
+  io->cluster = std::move(cluster);
+  io->cct = cct;
 
   return 0;
 }
@@ -502,7 +570,7 @@ static int Open(sqlite3_vfs *vfs, const char *name, sqlite3_file *file,
 
   auto start = ceph::coarse_mono_clock::now();
   bool gotmap = false;
-  auto& cluster = getdata(vfs).cluster;
+  auto [cct, cluster] = getdata(vfs).get_cluster();
 
   /* we are not going to create temporary files */
   if (name == NULL) {
@@ -525,9 +593,9 @@ static int Open(sqlite3_vfs *vfs, const char *name, sqlite3_file *file,
   f->flags = flags;
 
 enoent_retry:
-  if (int rc = makestriper(vfs, f->loc, &f->io); rc < 0) {
+  if (int rc = makestriper(vfs, cct, cluster, f->loc, &f->io); rc < 0) {
     f->~cephsqlite_file();
-    dv(5) << "cannot open striper" << dendl;
+    dv(-1) << "cannot open striper" << dendl;
     return SQLITE_IOERR;
   }
 
@@ -540,7 +608,7 @@ enoent_retry:
          * in testing when pools are getting created/deleted left and right.
          */
         dv(5) << "retrying create after getting latest OSDMap" << dendl;
-        cluster.wait_for_latest_osdmap();
+        cluster->wait_for_latest_osdmap();
         gotmap = true;
         goto enoent_retry;
       }
@@ -553,7 +621,7 @@ enoent_retry:
     if (rc == -ENOENT && !gotmap) {
       /* See comment above for create case. */
       dv(5) << "retrying open after getting latest OSDMap" << dendl;
-      cluster.wait_for_latest_osdmap();
+      cluster->wait_for_latest_osdmap();
       gotmap = true;
       goto enoent_retry;
     }
@@ -578,6 +646,7 @@ enoent_retry:
 static int Delete(sqlite3_vfs* vfs, const char* path, int dsync)
 {
   auto start = ceph::coarse_mono_clock::now();
+  auto [cct, cluster] = getdata(vfs).get_cluster();
   dv(5) << "'" << path << "', " << dsync << dendl;
 
   cephsqlite_fileloc fileloc;
@@ -587,8 +656,8 @@ static int Delete(sqlite3_vfs* vfs, const char* path, int dsync)
   }
 
   cephsqlite_fileio io;
-  if (int rc = makestriper(vfs, fileloc, &io); rc < 0) {
-    dv(5) << "cannot open striper" << dendl;
+  if (int rc = makestriper(vfs, cct, cluster, fileloc, &io); rc < 0) {
+    dv(-1) << "cannot open striper" << dendl;
     return SQLITE_IOERR;
   }
 
@@ -616,6 +685,7 @@ static int Delete(sqlite3_vfs* vfs, const char* path, int dsync)
 static int Access(sqlite3_vfs* vfs, const char* path, int flags, int* result)
 {
   auto start = ceph::coarse_mono_clock::now();
+  auto [cct, cluster] = getdata(vfs).get_cluster();
   dv(5) << path << " " << std::hex << flags << dendl;
 
   cephsqlite_fileloc fileloc;
@@ -625,8 +695,8 @@ static int Access(sqlite3_vfs* vfs, const char* path, int flags, int* result)
   }
 
   cephsqlite_fileio io;
-  if (int rc = makestriper(vfs, fileloc, &io); rc < 0) {
-    dv(5) << "cannot open striper" << dendl;
+  if (int rc = makestriper(vfs, cct, cluster, fileloc, &io); rc < 0) {
+    dv(-1) << "cannot open striper" << dendl;
     return SQLITE_IOERR;
   }
 
@@ -662,7 +732,7 @@ static int FullPathname(sqlite3_vfs* vfs, const char* ipath, int opathlen, char*
 {
   auto start = ceph::coarse_mono_clock::now();
   auto path = std::string_view(ipath);
-
+  auto [cct, cluster] = getdata(vfs).get_cluster();
   dv(5) << "1: " <<  path << dendl;
 
   cephsqlite_fileloc fileloc;
@@ -688,6 +758,7 @@ static int FullPathname(sqlite3_vfs* vfs, const char* ipath, int opathlen, char*
 static int CurrentTime(sqlite3_vfs* vfs, sqlite3_int64* time)
 {
   auto start = ceph::coarse_mono_clock::now();
+  auto [cct, cluster] = getdata(vfs).get_cluster();
   dv(5) << time << dendl;
 
   auto t = ceph_clock_now();
@@ -698,33 +769,29 @@ static int CurrentTime(sqlite3_vfs* vfs, sqlite3_int64* time)
   return SQLITE_OK;
 }
 
-LIBCEPHSQLITE_API int cephsqlite_setcct(CephContext* cct, char** ident)
+LIBCEPHSQLITE_API int cephsqlite_setcct(CephContext* _cct, char** ident)
 {
-  ldout(cct, 1) << "cct: " << cct << dendl;
+  ldout(_cct, 1) << "cct: " << _cct << dendl;
 
   if (sqlite3_api == nullptr) {
-    lderr(cct) << "API violation: must have sqlite3 init libcephsqlite" << dendl;
+    lderr(_cct) << "API violation: must have sqlite3 init libcephsqlite" << dendl;
     return -EINVAL;
   }
 
   auto vfs = sqlite3_vfs_find("ceph");
   if (!vfs) {
-    lderr(cct) << "API violation: must have sqlite3 init libcephsqlite" << dendl;
+    lderr(_cct) << "API violation: must have sqlite3 init libcephsqlite" << dendl;
     return -EINVAL;
   }
 
   auto& appd = getdata(vfs);
-  appd.cct = cct;
-  if (int rc = appd.setup_perf(); rc < 0) {
-    appd.cct = nullptr;
-    return rc;
-  }
-  if (int rc = appd.init_cluster(); rc < 0) {
-    appd.cct = nullptr;
+  if (int rc = appd.open(_cct); rc < 0) {
     return rc;
   }
 
-  auto s = appd.cluster.get_addrs();
+  auto [cct, cluster] = appd.get_cluster();
+
+  auto s = cluster->get_addrs();
   if (ident) {
     *ident = strdup(s.c_str());
   }
@@ -737,6 +804,7 @@ LIBCEPHSQLITE_API int cephsqlite_setcct(CephContext* cct, char** ident)
 static void f_perf(sqlite3_context* ctx, int argc, sqlite3_value** argv)
 {
   auto vfs = (sqlite3_vfs*)sqlite3_user_data(ctx);
+  auto [cct, cluster] = getdata(vfs).get_cluster();
   dv(10) << dendl;
   auto&& appd = getdata(vfs);
   JSONFormatter f(false);
@@ -756,12 +824,12 @@ static void f_perf(sqlite3_context* ctx, int argc, sqlite3_value** argv)
 static void f_status(sqlite3_context* ctx, int argc, sqlite3_value** argv)
 {
   auto vfs = (sqlite3_vfs*)sqlite3_user_data(ctx);
+  auto [cct, cluster] = getdata(vfs).get_cluster();
   dv(10) << dendl;
-  auto&& appd = getdata(vfs);
   JSONFormatter f(false);
   f.open_object_section("ceph_status");
-  f.dump_int("id", appd.cluster.get_instance_id());
-  f.dump_string("addr", appd.cluster.get_addrs());
+  f.dump_int("id", cluster->get_instance_id());
+  f.dump_string("addr", cluster->get_addrs());
   f.close_section();
   {
     CachedStackStringStream css;
index 08159d27092de202cca214195ccd1e9ec7c02392..fbb4c8339944d2e6b9c319d6e004dbe4d3d1a375 100644 (file)
@@ -578,8 +578,7 @@ void ImageWatcher<I>::schedule_request_lock(bool use_timer, int timer_delay) {
     return;
   }
 
-  std::shared_lock watch_locker{this->m_watch_lock};
-  if (this->is_registered(this->m_watch_lock)) {
+  if (is_registered()) {
     ldout(m_image_ctx.cct, 15) << this << " requesting exclusive lock" << dendl;
 
     auto ctx = new LambdaContext([this](int r) {
index 8a05957ec67512f0a88e4127417f406002681520..166a31c611473bd1e639cc94f378df2ffe115719 100644 (file)
@@ -207,7 +207,8 @@ void ManagedLock<I>::reacquire_lock(Context *on_reacquired) {
   {
     std::lock_guard locker{m_lock};
 
-    if (m_state == STATE_WAITING_FOR_REGISTER) {
+    if (m_state == STATE_WAITING_FOR_REGISTER ||
+        m_state == STATE_WAITING_FOR_LOCK) {
       // restart the acquire lock process now that watch is valid
       ldout(m_cct, 10) << "woke up waiting (re)acquire" << dendl;
       Action active_action = get_active_action();
@@ -217,8 +218,7 @@ void ManagedLock<I>::reacquire_lock(Context *on_reacquired) {
     } else if (!is_state_shutdown() &&
                (m_state == STATE_LOCKED ||
                 m_state == STATE_ACQUIRING ||
-                m_state == STATE_POST_ACQUIRING ||
-                m_state == STATE_WAITING_FOR_LOCK)) {
+                m_state == STATE_POST_ACQUIRING)) {
       // interlock the lock operation with other state ops
       ldout(m_cct, 10) << dendl;
       execute_action(ACTION_REACQUIRE_LOCK, on_reacquired);
index fd6f9b5023d2a4cdb866f9a520418d628c350695..c8e3a4fe7a6e6f4abbac7dec654a1c61dd60e50e 100644 (file)
@@ -177,6 +177,7 @@ void CreatePrimaryRequest<I>::handle_refresh_image(int r) {
 
 template <typename I>
 void CreatePrimaryRequest<I>::unlink_peer() {
+  // TODO: Document semantics for unlink_peer
   uint64_t max_snapshots = m_image_ctx->config.template get_val<uint64_t>(
     "rbd_mirroring_max_mirroring_snapshots");
   ceph_assert(max_snapshots >= 3);
@@ -184,55 +185,61 @@ void CreatePrimaryRequest<I>::unlink_peer() {
   std::string peer_uuid;
   uint64_t snap_id = CEPH_NOSNAP;
 
-  for (auto &peer : m_mirror_peer_uuids) {
+  {
     std::shared_lock image_locker{m_image_ctx->image_lock};
-    size_t count = 0;
-    uint64_t unlink_snap_id = 0;
-    for (auto &snap_it : m_image_ctx->snap_info) {
-      auto info = std::get_if<cls::rbd::MirrorSnapshotNamespace>(
-        &snap_it.second.snap_namespace);
-      if (info == nullptr) {
-        continue;
-      }
-      if (info->state != cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY) {
-        // reset counters -- we count primary snapshots after the last promotion
-        count = 0;
-        unlink_snap_id = 0;
-        continue;
-      }
-      // call UnlinkPeerRequest only if the snapshot is linked with this peer
-      // or if it's not linked with any peer (happens if mirroring is enabled
-      // on a pool with no peers configured or if UnlinkPeerRequest gets
-      // interrupted)
-      if (!info->mirror_peer_uuids.empty() &&
-          info->mirror_peer_uuids.count(peer) == 0) {
-        continue;
-      }
-      if (info->mirror_peer_uuids.empty() || !info->complete) {
-        peer_uuid = peer;
-        snap_id = snap_it.first;
-        break;
-      }
-      count++;
-      if (count == max_snapshots) {
-        unlink_snap_id = snap_it.first;
-      }
-      if (count > max_snapshots) {
-        peer_uuid = peer;
-        snap_id = unlink_snap_id;
-        break;
+    for (const auto& peer : m_mirror_peer_uuids) {
+      for (const auto& snap_info_pair : m_image_ctx->snap_info) {
+        auto info = std::get_if<cls::rbd::MirrorSnapshotNamespace>(
+          &snap_info_pair.second.snap_namespace);
+        if (info == nullptr) {
+          continue;
+        }
+        if (info->mirror_peer_uuids.empty() ||
+            (info->mirror_peer_uuids.count(peer) != 0 &&
+             info->is_primary() && !info->complete)) {
+          peer_uuid = peer;
+          snap_id = snap_info_pair.first;
+          goto do_unlink;
+        }
       }
     }
-    if (snap_id != CEPH_NOSNAP) {
-      break;
+    for (const auto& peer : m_mirror_peer_uuids) {
+      size_t count = 0;
+      uint64_t unlink_snap_id = 0;
+      for (const auto& snap_info_pair : m_image_ctx->snap_info) {
+        auto info = std::get_if<cls::rbd::MirrorSnapshotNamespace>(
+          &snap_info_pair.second.snap_namespace);
+        if (info == nullptr) {
+          continue;
+        }
+        if (info->state != cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY) {
+          // reset counters -- we count primary snapshots after the last
+          // promotion
+          count = 0;
+          unlink_snap_id = 0;
+          continue;
+        }
+        if (info->mirror_peer_uuids.count(peer) == 0) {
+          // snapshot is not linked with this peer
+          continue;
+        }
+        count++;
+        if (count == max_snapshots) {
+          unlink_snap_id = snap_info_pair.first;
+        }
+        if (count > max_snapshots) {
+          peer_uuid = peer;
+          snap_id = unlink_snap_id;
+          goto do_unlink;
+        }
+      }
     }
   }
 
-  if (snap_id == CEPH_NOSNAP) {
-    finish(0);
-    return;
-  }
+  finish(0);
+  return;
 
+do_unlink:
   CephContext *cct = m_image_ctx->cct;
   ldout(cct, 15) << "peer=" << peer_uuid << ", snap_id=" << snap_id << dendl;
 
index cc975d176350c340a3d56d94e397b7975d254495..f3b4dc62e046bfdae180866731f1742a1ccf491c 100644 (file)
@@ -355,9 +355,10 @@ void SnapshotRemoveRequest<I>::handle_remove_object_map(int r) {
 template <typename I>
 void SnapshotRemoveRequest<I>::remove_image_state() {
   I &image_ctx = this->m_image_ctx;
-  auto type = cls::rbd::get_snap_namespace_type(m_snap_namespace);
 
-  if (type != cls::rbd::SNAPSHOT_NAMESPACE_TYPE_MIRROR) {
+  const auto* info = std::get_if<cls::rbd::MirrorSnapshotNamespace>(
+    &m_snap_namespace);
+  if (info == nullptr || info->is_orphan()) {
     release_snap_id();
     return;
   }
index bc4e21bcea9591a2fba1433062b604c5f350093a..5277c3d69f8d7bd8df0c15e654283ab319e63817 100644 (file)
@@ -27,7 +27,7 @@ public:
   virtual void add_request(const ceph::ref_t<class MDRequestImpl>& mdr) = 0;
   virtual ceph::ref_t<class MDRequestImpl> find_new_head() = 0;
 
-  virtual void print(std::ostream&) = 0;
+  virtual void print(std::ostream&) const = 0;
 
   void forward(mds_rank_t target);
   void respond(int r);
index 6f20f53d144da61e3a95fb81384e5655f64bbab4..b6d169b9e0f857a1b4e10b3c89d49278fec9f70e 100644 (file)
@@ -33,7 +33,7 @@
 
 using namespace std;
 
-ostream& CDentry::print_db_line_prefix(ostream& out)
+ostream& CDentry::print_db_line_prefix(ostream& out) const
 {
   return out << ceph_clock_now() << " mds." << dir->mdcache->mds->get_nodeid() << ".cache.den(" << dir->ino() << " " << name << ") ";
 }
@@ -108,8 +108,6 @@ ostream& operator<<(ostream& out, const CDentry& dn)
   out << " state=" << dn.get_state();
   if (dn.is_new()) out << "|new";
   if (dn.state_test(CDentry::STATE_BOTTOMLRU)) out << "|bottomlru";
-  if (dn.state_test(CDentry::STATE_UNLINKING)) out << "|unlinking";
-  if (dn.state_test(CDentry::STATE_REINTEGRATING)) out << "|reintegrating";
 
   if (dn.get_num_ref()) {
     out << " |";
@@ -137,7 +135,7 @@ bool operator<(const CDentry& l, const CDentry& r)
 }
 
 
-void CDentry::print(ostream& out)
+void CDentry::print(ostream& out) const
 {
   out << *this;
 }
@@ -716,7 +714,7 @@ bool CDentry::check_corruption(bool load)
     }
     if (!load && g_conf().get_val<bool>("mds_abort_on_newly_corrupt_dentry")) {
       dir->mdcache->mds->clog->error() << "MDS abort because newly corrupt dentry to be committed: " << *this;
-      ceph_abort("detected newly corrupt dentry"); /* avoid writing out newly corrupted dn */
+      dir->mdcache->mds->abort("detected newly corrupt dentry"); /* avoid writing out newly corrupted dn */
     }
     return true;
   }
index c4acf87682d9e2fe85e2d30da4eb2b94557a2a01..4cbf24f0c957c199873f3052e53e6793d387e579 100644 (file)
@@ -29,7 +29,6 @@
 #include "BatchOp.h"
 #include "MDSCacheObject.h"
 #include "MDSContext.h"
-#include "Mutation.h"
 #include "SimpleLock.h"
 #include "LocalLockC.h"
 #include "ScrubHeader.h"
@@ -87,25 +86,18 @@ public:
   static const int STATE_EVALUATINGSTRAY = (1<<4);
   static const int STATE_PURGINGPINNED =  (1<<5);
   static const int STATE_BOTTOMLRU =    (1<<6);
-  static const int STATE_UNLINKING =    (1<<7);
-  static const int STATE_REINTEGRATING = (1<<8);
   // stray dentry needs notification of releasing reference
   static const int STATE_STRAY =       STATE_NOTIFYREF;
   static const int MASK_STATE_IMPORT_KEPT = STATE_BOTTOMLRU;
 
   // -- pins --
-  static const int PIN_INODEPIN =         1;  // linked inode is pinned
-  static const int PIN_FRAGMENTING =     -2;  // containing dir is refragmenting
-  static const int PIN_PURGING =          3;
-  static const int PIN_SCRUBPARENT =      4;
-  static const int PIN_WAITUNLINKSTATE  = 5;
+  static const int PIN_INODEPIN =     1;  // linked inode is pinned
+  static const int PIN_FRAGMENTING = -2;  // containing dir is refragmenting
+  static const int PIN_PURGING =      3;
+  static const int PIN_SCRUBPARENT =  4;
 
   static const unsigned EXPORT_NONCE = 1;
 
-  const static uint64_t WAIT_UNLINK_STATE       = (1<<0);
-  const static uint64_t WAIT_UNLINK_FINISH      = (1<<1);
-  const static uint64_t WAIT_REINTEGRATE_FINISH = (1<<2);
-  uint32_t replica_unlinking_ref = 0;
 
   CDentry(std::string_view n, __u32 h,
           mempool::mds_co::string alternate_name,
@@ -144,7 +136,6 @@ public:
     case PIN_FRAGMENTING: return "fragmenting";
     case PIN_PURGING: return "purging";
     case PIN_SCRUBPARENT: return "scrubparent";
-    case PIN_WAITUNLINKSTATE: return "waitunlinkstate";
     default: return generic_pin_name(p);
     }
   }
@@ -358,8 +349,8 @@ public:
   void remove_client_lease(ClientLease *r, Locker *locker);  // returns remaining mask (if any), and kicks locker eval_gathers
   void remove_client_leases(Locker *locker);
 
-  std::ostream& print_db_line_prefix(std::ostream& out) override;
-  void print(std::ostream& out) override;
+  std::ostream& print_db_line_prefix(std::ostream& out) const override;
+  void print(std::ostream& out) const override;
   void dump(ceph::Formatter *f) const;
 
   static void encode_remote(inodeno_t& ino, unsigned char d_type,
index ca0c2ec17f035531afdd16171861cc2e3dc2a635..0484c38cc30304d06b4821ef970d901d36159c87 100644 (file)
@@ -180,7 +180,7 @@ ostream& operator<<(ostream& out, const CDir& dir)
 }
 
 
-void CDir::print(ostream& out) 
+void CDir::print(ostream& out) const
 {
   out << *this;
 }
@@ -188,7 +188,7 @@ void CDir::print(ostream& out)
 
 
 
-ostream& CDir::print_db_line_prefix(ostream& out) 
+ostream& CDir::print_db_line_prefix(ostream& out) const
 {
   return out << ceph_clock_now() << " mds." << mdcache->mds->get_nodeid() << ".cache.dir(" << this->dirfrag() << ") ";
 }
index 58507db970b4b3220dc1cc3c29f689de30d8a0bb..7cc4dc7ffcf8379104f061d19bc12572e2f076a4 100644 (file)
@@ -611,8 +611,8 @@ public:
   }
   void enable_frozen_inode();
 
-  std::ostream& print_db_line_prefix(std::ostream& out) override;
-  void print(std::ostream& out) override;
+  std::ostream& print_db_line_prefix(std::ostream& out) const override;
+  void print(std::ostream& out) const override;
   void dump(ceph::Formatter *f, int flags = DUMP_DEFAULT) const;
   void dump_load(ceph::Formatter *f);
 
index e6cd03442bbd7c24d88b09d31ae1f2f726f7bf29..23cb087c835871ef65662eab975940905908ce34 100644 (file)
@@ -131,7 +131,7 @@ std::string_view CInode::pin_name(int p) const
 }
 
 //int cinode_pins[CINODE_NUM_PINS];  // counts
-ostream& CInode::print_db_line_prefix(ostream& out)
+ostream& CInode::print_db_line_prefix(ostream& out) const
 {
   return out << ceph_clock_now() << " mds." << mdcache->mds->get_nodeid() << ".cache.ino(" << ino() << ") ";
 }
@@ -338,7 +338,7 @@ CInode::CInode(MDCache *c, bool auth, snapid_t f, snapid_t l) :
     state_set(STATE_AUTH);
 }
 
-void CInode::print(ostream& out)
+void CInode::print(ostream& out) const
 {
   out << *this;
 }
index 2f7d6d242b896ee7efbf7174843372696a539b04..979b451742cbf3298222898b95971b6dd33f8cc0 100644 (file)
@@ -398,8 +398,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
   static const uint64_t WAIT_FROZEN      = (1<<1);
   static const uint64_t WAIT_TRUNC       = (1<<2);
   static const uint64_t WAIT_FLOCK       = (1<<3);
-  static const uint64_t WAIT_UNLINK      = (1<<4);
-
+  
   static const uint64_t WAIT_ANY_MASK  = (uint64_t)(-1);
 
   // misc
@@ -423,7 +422,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
 
   std::string_view pin_name(int p) const override;
 
-  std::ostream& print_db_line_prefix(std::ostream& out) override;
+  std::ostream& print_db_line_prefix(std::ostream& out) const override;
 
   const scrub_info_t *scrub_info() const {
     if (!scrub_infop)
@@ -1032,7 +1031,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter<CIno
            state_test(STATE_RANDEPHEMERALPIN);
   }
 
-  void print(std::ostream& out) override;
+  void print(std::ostream& out) const override;
   void dump(ceph::Formatter *f, int flags = DUMP_DEFAULT) const;
 
   /**
index b6258e466df38b6013edb1950b01ffcb4a95dff2..de2a16e1ab19870bdcb7dc9d4a94dcfae6cb4168 100644 (file)
 
 #include "common/Formatter.h"
 
+#define dout_context g_ceph_context
+#define dout_subsys ceph_subsys_mds
+#undef dout_prefix
+#define dout_prefix *_dout << "Capability "
+
 
 /*
  * Capability::Export
@@ -176,6 +181,46 @@ client_t Capability::get_client() const
   return session ? session->get_client() : client_t(-1);
 }
 
+int Capability::confirm_receipt(ceph_seq_t seq, unsigned caps) {
+  int was_revoking = (_issued & ~_pending);
+  if (seq == last_sent) {
+    _revokes.clear();
+    _issued = caps;
+    // don't add bits
+    _pending &= caps;
+
+    // if the revoking is not totally finished just add the
+    // new revoking caps back.
+    if (was_revoking && revoking()) {
+      CInode *in = get_inode();
+      dout(10) << "revocation is not totally finished yet on " << *in
+               << ", the session " << *session << dendl;
+      _revokes.emplace_back(_pending, last_sent, last_issue);
+      if (!is_notable())
+        mark_notable();
+    }
+  } else {
+    // can i forget any revocations?
+    while (!_revokes.empty() && _revokes.front().seq < seq)
+      _revokes.pop_front();
+    if (!_revokes.empty()) {
+      if (_revokes.front().seq == seq)
+        _revokes.begin()->before = caps;
+      calc_issued();
+    } else {
+      // seq < last_sent
+      _issued = caps | _pending;
+    }
+  }
+
+  if (was_revoking && _issued == _pending) {
+    item_revoking_caps.remove_myself();
+    item_client_revoking_caps.remove_myself();
+    maybe_clear_notable();
+  }
+  return was_revoking & ~_issued; // return revoked
+}
+
 bool Capability::is_stale() const
 {
   return session ? session->is_stale() : false;
index f7119f002e1381698343a029c2a8ede2b6b4cf7d..3fd6d2ce6d4f0d5924d839099098bd618da68dab 100644 (file)
@@ -182,34 +182,7 @@ public:
     inc_last_seq();
     return last_sent;
   }
-  int confirm_receipt(ceph_seq_t seq, unsigned caps) {
-    int was_revoking = (_issued & ~_pending);
-    if (seq == last_sent) {
-      _revokes.clear();
-      _issued = caps;
-      // don't add bits
-      _pending &= caps;
-    } else {
-      // can i forget any revocations?
-      while (!_revokes.empty() && _revokes.front().seq < seq)
-       _revokes.pop_front();
-      if (!_revokes.empty()) {
-       if (_revokes.front().seq == seq)
-         _revokes.begin()->before = caps;
-       calc_issued();
-      } else {
-       // seq < last_sent
-       _issued = caps | _pending;
-      }
-    }
-
-    if (was_revoking && _issued == _pending) {
-      item_revoking_caps.remove_myself();
-      item_client_revoking_caps.remove_myself();
-      maybe_clear_notable();
-    }
-    return was_revoking & ~_issued; // return revoked
-  }
+  int confirm_receipt(ceph_seq_t seq, unsigned caps);
   // we may get a release racing with revocations, which means our revokes will be ignored
   // by the client.  clean them out of our _revokes history so we don't wait on them.
   void clean_revoke_from(ceph_seq_t li) {
index 5bf2f6b267f1d2ab75c5aa2c478f4fc1a4013461..f57a4177aa04f7a0fd3c78a1bb4dda3dd536dca9 100644 (file)
@@ -205,8 +205,16 @@ public:
   void print(std::ostream& out) const;
 
   bool is_upgradeable() const {
-    return (mds_map.allows_standby_replay() && mds_map.get_num_in_mds() == 0)
-       || (!mds_map.allows_standby_replay() && mds_map.get_num_in_mds() <= 1);
+    bool asr = mds_map.allows_standby_replay();
+    auto in_mds = mds_map.get_num_in_mds();
+    auto up_mds = mds_map.get_num_up_mds();
+    return
+              /* fs was "down" */
+              (in_mds == 0)
+              /* max_mds was set to 1; asr must be disabled */
+           || (!asr && in_mds == 1)
+              /* max_mds any value and all MDS were failed; asr must be disabled */
+           || (!asr && up_mds == 0);
   }
 
   /**
index 63a58acc835aa7d07522befcb4de5dbe1273239c..1b58fdbb2f8f62b33f8f14509323cd626323f522 100644 (file)
@@ -62,7 +62,7 @@ void FSMapUser::print(std::ostream& out) const
     out << " id " <<  p.second.cid << " name " << p.second.name << std::endl;
 }
 
-void FSMapUser::print_summary(ceph::Formatter *f, std::ostream *out)
+void FSMapUser::print_summary(ceph::Formatter *f, std::ostream *out) const
 {
   std::map<mds_role_t,std::string> by_rank;
   std::map<std::string,int> by_state;
index a0be8e714aff77588573172033a1e20442b08efe..96ac26d6da947fdecd69429894889e74d1de28e4 100644 (file)
@@ -46,7 +46,7 @@ public:
   void decode(ceph::buffer::list::const_iterator& bl);
 
   void print(std::ostream& out) const;
-  void print_summary(ceph::Formatter *f, std::ostream *out);
+  void print_summary(ceph::Formatter *f, std::ostream *out) const;
 
   static void generate_test_instances(std::list<FSMapUser*>& ls);
 
@@ -57,7 +57,7 @@ public:
 WRITE_CLASS_ENCODER_FEATURES(FSMapUser::fs_info_t)
 WRITE_CLASS_ENCODER_FEATURES(FSMapUser)
 
-inline std::ostream& operator<<(std::ostream& out, FSMapUser& m) {
+inline std::ostream& operator<<(std::ostream& out, const FSMapUser& m) {
   m.print_summary(NULL, &out);
   return out;
 }
index 1112dd80ab52877ca2632380fb1cc13aff6f1da5..5d7ec56f2251bdf7338050c52675ab6d25d11295 100644 (file)
@@ -1984,7 +1984,6 @@ bool Locker::xlock_start(SimpleLock *lock, MDRequestRef& mut)
 
 void Locker::_finish_xlock(SimpleLock *lock, client_t xlocker, bool *pneed_issue)
 {
-  ceph_assert(!lock->is_stable());
   if (lock->get_type() != CEPH_LOCK_DN &&
       lock->get_type() != CEPH_LOCK_ISNAP &&
       lock->get_type() != CEPH_LOCK_IPOLICY &&
index a2aea7a49ab5e83bde132c7d36d82cd9d7402490..2ea13155ed491a2bd8c75a6afe32be990a7b2283 100644 (file)
@@ -6037,8 +6037,6 @@ void MDCache::finish_snaprealm_reconnect(client_t client, SnapRealm *realm, snap
             << realm->get_newest_seq() << " on " << *realm << dendl;
     auto snap = make_message<MClientSnap>(CEPH_SNAP_OP_UPDATE);
     snap->bl = mds->server->get_snap_trace(client, realm);
-    for (const auto& child : realm->open_children)
-      snap->split_realms.push_back(child->inode->ino());
     updates.emplace(std::piecewise_construct, std::forward_as_tuple(client), std::forward_as_tuple(snap));
   } else {
     dout(10) << "finish_snaprealm_reconnect client." << client << " up to date"
@@ -8235,10 +8233,6 @@ void MDCache::dispatch(const cref_t<Message> &m)
   case MSG_MDS_DENTRYUNLINK:
     handle_dentry_unlink(ref_cast<MDentryUnlink>(m));
     break;
-  case MSG_MDS_DENTRYUNLINK_ACK:
-    handle_dentry_unlink_ack(ref_cast<MDentryUnlinkAck>(m));
-    break;
-
 
   case MSG_MDS_FRAGMENTNOTIFY:
     handle_fragment_notify(ref_cast<MMDSFragmentNotify>(m));
@@ -8674,7 +8668,7 @@ int MDCache::path_traverse(MDRequestRef& mdr, MDSContextFactory& cf,
   // success.
   if (mds->logger) mds->logger->inc(l_mds_traverse_hit);
   dout(10) << "path_traverse finish on snapid " << snapid << dendl;
-  if (mdr) 
+  if (mdr)
     ceph_assert(mdr->snapid == snapid);
 
   if (flags & MDS_TRAVERSE_RDLOCK_SNAP)
@@ -9756,7 +9750,7 @@ void MDCache::request_forward(MDRequestRef& mdr, mds_rank_t who, int port)
     if (mdr->is_batch_head()) {
       mdr->release_batch_op()->forward(who);
     } else {
-      mds->forward_message_mds(mdr->release_client_request(), who);
+      mds->forward_message_mds(mdr, who);
     }
     if (mds->logger) mds->logger->inc(l_mds_forward);
   } else if (mdr->internal_op >= 0) {
@@ -11227,8 +11221,7 @@ void MDCache::handle_dentry_link(const cref_t<MDentryLink> &m)
 
 // UNLINK
 
-void MDCache::send_dentry_unlink(CDentry *dn, CDentry *straydn,
-                                 MDRequestRef& mdr, bool unlinking)
+void MDCache::send_dentry_unlink(CDentry *dn, CDentry *straydn, MDRequestRef& mdr)
 {
   dout(10) << __func__ << " " << *dn << dendl;
   // share unlink news with replicas
@@ -11240,11 +11233,6 @@ void MDCache::send_dentry_unlink(CDentry *dn, CDentry *straydn,
     CInode *strayin = straydn->get_linkage()->get_inode();
     strayin->encode_snap_blob(snapbl);
   }
-
-  if (unlinking) {
-    ceph_assert(!straydn);
-    dn->replica_unlinking_ref = 0;
-  }
   for (set<mds_rank_t>::iterator it = replicas.begin();
        it != replicas.end();
        ++it) {
@@ -11257,21 +11245,12 @@ void MDCache::send_dentry_unlink(CDentry *dn, CDentry *straydn,
         rejoin_gather.count(*it)))
       continue;
 
-    auto unlink = make_message<MDentryUnlink>(dn->get_dir()->dirfrag(),
-                                              dn->get_name(), unlinking);
+    auto unlink = make_message<MDentryUnlink>(dn->get_dir()->dirfrag(), dn->get_name());
     if (straydn) {
       encode_replica_stray(straydn, *it, unlink->straybl);
       unlink->snapbl = snapbl;
     }
     mds->send_message_mds(unlink, *it);
-    if (unlinking) {
-      dn->replica_unlinking_ref++;
-      dn->get(CDentry::PIN_WAITUNLINKSTATE);
-    }
-  }
-
-  if (unlinking && dn->replica_unlinking_ref) {
-    dn->add_waiter(CDentry::WAIT_UNLINK_STATE, new C_MDS_RetryRequest(this, mdr));
   }
 }
 
@@ -11280,40 +11259,23 @@ void MDCache::handle_dentry_unlink(const cref_t<MDentryUnlink> &m)
   // straydn
   CDentry *straydn = nullptr;
   CInode *strayin = nullptr;
-
   if (m->straybl.length())
     decode_replica_stray(straydn, &strayin, m->straybl, mds_rank_t(m->get_source().num()));
 
-  boost::intrusive_ptr<MDentryUnlinkAck> ack;
-  CDentry::linkage_t *dnl;
-  CDentry *dn;
-  CInode *in;
-  bool hadrealm;
-
   CDir *dir = get_dirfrag(m->get_dirfrag());
   if (!dir) {
     dout(7) << __func__ << " don't have dirfrag " << m->get_dirfrag() << dendl;
-    if (m->is_unlinking())
-      goto ack;
   } else {
-    dn = dir->lookup(m->get_dn());
+    CDentry *dn = dir->lookup(m->get_dn());
     if (!dn) {
       dout(7) << __func__ << " don't have dentry " << *dir << " dn " << m->get_dn() << dendl;
-      if (m->is_unlinking())
-        goto ack;
     } else {
       dout(7) << __func__ << " on " << *dn << dendl;
-
-      if (m->is_unlinking()) {
-        dn->state_set(CDentry::STATE_UNLINKING);
-        goto ack;
-      }
-
-      dnl = dn->get_linkage();
+      CDentry::linkage_t *dnl = dn->get_linkage();
 
       // open inode?
       if (dnl->is_primary()) {
-       in = dnl->get_inode();
+       CInode *in = dnl->get_inode();
        dn->dir->unlink_inode(dn);
        ceph_assert(straydn);
        straydn->dir->link_primary_inode(straydn, in);
@@ -11324,12 +11286,11 @@ void MDCache::handle_dentry_unlink(const cref_t<MDentryUnlink> &m)
        in->first = straydn->first;
 
        // update subtree map?
-       if (in->is_dir()) {
+       if (in->is_dir()) 
          adjust_subtree_after_rename(in, dir, false);
-       }
 
        if (m->snapbl.length()) {
-         hadrealm = (in->snaprealm ? true : false);
+         bool hadrealm = (in->snaprealm ? true : false);
          in->decode_snap_blob(m->snapbl);
          ceph_assert(in->snaprealm);
          if (!hadrealm)
@@ -11340,7 +11301,7 @@ void MDCache::handle_dentry_unlink(const cref_t<MDentryUnlink> &m)
        if (in->is_any_caps() &&
            !in->state_test(CInode::STATE_EXPORTINGCAPS))
          migrator->export_caps(in);
-
+       
        straydn = NULL;
       } else {
        ceph_assert(!straydn);
@@ -11348,12 +11309,6 @@ void MDCache::handle_dentry_unlink(const cref_t<MDentryUnlink> &m)
        dn->dir->unlink_inode(dn);
       }
       ceph_assert(dnl->is_null());
-      dn->state_clear(CDentry::STATE_UNLINKING);
-
-      MDSContext::vec finished;
-      dn->take_waiting(CDentry::WAIT_UNLINK_FINISH, finished);
-      mds->queue_waiters(finished);
-
     }
   }
 
@@ -11365,36 +11320,8 @@ void MDCache::handle_dentry_unlink(const cref_t<MDentryUnlink> &m)
     trim_dentry(straydn, ex);
     send_expire_messages(ex);
   }
-  return;
-
-ack:
-  ack = make_message<MDentryUnlinkAck>(m->get_dirfrag(), m->get_dn());
-  mds->send_message(ack, m->get_connection());
 }
 
-void MDCache::handle_dentry_unlink_ack(const cref_t<MDentryUnlinkAck> &m)
-{
-  CDir *dir = get_dirfrag(m->get_dirfrag());
-  if (!dir) {
-    dout(7) << __func__ << " don't have dirfrag " << m->get_dirfrag() << dendl;
-  } else {
-    CDentry *dn = dir->lookup(m->get_dn());
-    if (!dn) {
-      dout(7) << __func__ << " don't have dentry " << *dir << " dn " << m->get_dn() << dendl;
-    } else {
-      dout(7) << __func__ << " on " << *dn << " ref "
-             << dn->replica_unlinking_ref << " -> "
-             << dn->replica_unlinking_ref - 1 << dendl;
-      dn->replica_unlinking_ref--;
-      if (!dn->replica_unlinking_ref) {
-        MDSContext::vec finished;
-        dn->take_waiting(CDentry::WAIT_UNLINK_STATE, finished);
-        mds->queue_waiters(finished);
-      }
-      dn->put(CDentry::PIN_WAITUNLINKSTATE);
-    }
-  }
-}
 
 
 
@@ -13010,7 +12937,7 @@ void MDCache::enqueue_scrub(
     std::string_view path,
     std::string_view tag,
     bool force, bool recursive, bool repair,
-    Formatter *f, Context *fin)
+    bool scrub_mdsdir, Formatter *f, Context *fin)
 {
   dout(10) << __func__ << " " << path << dendl;
 
@@ -13044,7 +12971,8 @@ void MDCache::enqueue_scrub(
   }
 
   C_MDS_EnqueueScrub *cs = new C_MDS_EnqueueScrub(tag_str, f, fin);
-  cs->header = std::make_shared<ScrubHeader>(tag_str, is_internal, force, recursive, repair);
+  cs->header = std::make_shared<ScrubHeader>(tag_str, is_internal, force,
+                                             recursive, repair, scrub_mdsdir);
 
   mdr->internal_op_finish = cs;
   enqueue_scrub_work(mdr);
index a99bed72a8f5cdc05c6af23a6f170d889a8b2fc8..d9f17303884e7ca9a080a0ccf662c83969565185 100644 (file)
@@ -913,7 +913,7 @@ class MDCache {
   void encode_remote_dentry_link(CDentry::linkage_t *dnl, bufferlist& bl);
   void decode_remote_dentry_link(CDir *dir, CDentry *dn, bufferlist::const_iterator& p);
   void send_dentry_link(CDentry *dn, MDRequestRef& mdr);
-  void send_dentry_unlink(CDentry *dn, CDentry *straydn, MDRequestRef& mdr, bool unlinking=false);
+  void send_dentry_unlink(CDentry *dn, CDentry *straydn, MDRequestRef& mdr);
 
   void wait_for_uncommitted_fragment(dirfrag_t dirfrag, MDSContext *c) {
     uncommitted_fragments.at(dirfrag).waiters.push_back(c);
@@ -975,7 +975,7 @@ class MDCache {
    */
   void enqueue_scrub(std::string_view path, std::string_view tag,
                      bool force, bool recursive, bool repair,
-                    Formatter *f, Context *fin);
+                     bool scrub_mdsdir, Formatter *f, Context *fin);
   void repair_inode_stats(CInode *diri);
   void repair_dirfrag_stats(CDir *dir);
   void rdlock_dirfrags_stats(CInode *diri, MDSInternalContext *fin);
@@ -1156,7 +1156,6 @@ class MDCache {
   void handle_discover_reply(const cref_t<MDiscoverReply> &m);
   void handle_dentry_link(const cref_t<MDentryLink> &m);
   void handle_dentry_unlink(const cref_t<MDentryUnlink> &m);
-  void handle_dentry_unlink_ack(const cref_t<MDentryUnlinkAck> &m);
 
   int dump_cache(std::string_view fn, Formatter *f, double timeout);
 
index 337c1025a3cbc7586ee683ee6fa0cabde186cc45..82899d2da5654ba3695e320c81e58c484b3bfe71 100644 (file)
@@ -977,8 +977,14 @@ void MDLog::_recovery_thread(MDSContext *completion)
     inodeno_t const default_log_ino = MDS_INO_LOG_OFFSET + mds->get_nodeid();
     jp.front = default_log_ino;
     int write_result = jp.save(mds->objecter);
-    // Nothing graceful we can do for this
-    ceph_assert(write_result >= 0);
+    if (write_result < 0) {
+      std::lock_guard l(mds->mds_lock);
+      if (mds->is_daemon_stopping()) {
+        return;
+      }
+      mds->damaged();
+      ceph_abort();  // damaged should never return
+    }
   } else if (read_result == -CEPHFS_EBLOCKLISTED) {
     derr << "Blocklisted during JournalPointer read!  Respawning..." << dendl;
     mds->respawn();
@@ -1420,6 +1426,7 @@ void MDLog::_replay_thread()
       le->_segment->num_events++;
       le->_segment->end = journaler->get_read_pos();
       num_events++;
+      logger->set(l_mdl_ev, num_events);
 
       {
         std::lock_guard l(mds->mds_lock);
@@ -1432,6 +1439,8 @@ void MDLog::_replay_thread()
     }
 
     logger->set(l_mdl_rdpos, pos);
+    logger->set(l_mdl_expos, journaler->get_expire_pos());
+    logger->set(l_mdl_wrpos, journaler->get_write_pos());
   }
 
   // done!
@@ -1485,6 +1494,9 @@ void MDLog::standby_trim_segments()
     dout(10) << " removing segment" << dendl;
     mds->mdcache->standby_trim_segment(seg);
     remove_oldest_segment();
+    if (pre_segments_size > 0) {
+      --pre_segments_size;
+    }
     removed_segment = true;
   }
 
index f8158be686645ee7f5e4d289df2cb8c56dc2ecac..d983f2d58b19aa173041de5fb1b8004e4effe249 100644 (file)
@@ -227,15 +227,14 @@ bool MDSAuthCaps::is_capable(std::string_view inode_path,
                             uid_t new_uid, gid_t new_gid,
                             const entity_addr_t& addr) const
 {
-  if (cct)
-    ldout(cct, 10) << __func__ << " inode(path /" << inode_path
-                  << " owner " << inode_uid << ":" << inode_gid
-                  << " mode 0" << std::oct << inode_mode << std::dec
-                  << ") by caller " << caller_uid << ":" << caller_gid
+  ldout(g_ceph_context, 10) << __func__ << " inode(path /" << inode_path
+                << " owner " << inode_uid << ":" << inode_gid
+                << " mode 0" << std::oct << inode_mode << std::dec
+                << ") by caller " << caller_uid << ":" << caller_gid
 // << "[" << caller_gid_list << "]";
-                  << " mask " << mask
-                  << " new " << new_uid << ":" << new_gid
-                  << " cap: " << *this << dendl;
+                << " mask " << mask
+                << " new " << new_uid << ":" << new_gid
+                << " cap: " << *this << dendl;
 
   for (const auto& grant : grants) {
     if (grant.network.size() &&
@@ -339,7 +338,7 @@ void MDSAuthCaps::set_allow_all()
                                 {}));
 }
 
-bool MDSAuthCaps::parse(CephContext *c, std::string_view str, ostream *err)
+bool MDSAuthCaps::parse(std::string_view str, ostream *err)
 {
   // Special case for legacy caps
   if (str == "allow") {
@@ -354,7 +353,6 @@ bool MDSAuthCaps::parse(CephContext *c, std::string_view str, ostream *err)
   MDSCapParser<decltype(iter)> g;
 
   bool r = qi::phrase_parse(iter, end, g, ascii::space, *this);
-  cct = c;  // set after parser self-assignment
   if (r && iter == end) {
     for (auto& grant : grants) {
       std::sort(grant.match.gids.begin(), grant.match.gids.end());
index 395c921fd5fe25f1dc0ab33afc51067d747892a2..5fcbb1f2fbbf0d12cc6cd328b9d4e8f091a5b2dc 100644 (file)
@@ -183,9 +183,8 @@ class MDSAuthCaps
 {
 public:
   MDSAuthCaps() = default;
-  explicit MDSAuthCaps(CephContext *cct_) : cct(cct_) {}
 
-  // this ctor is used by spirit/phoenix; doesn't need cct.
+  // this ctor is used by spirit/phoenix
   explicit MDSAuthCaps(const std::vector<MDSCapGrant>& grants_) : grants(grants_) {}
 
   void clear() {
@@ -193,7 +192,7 @@ public:
   }
 
   void set_allow_all();
-  bool parse(CephContext *cct, std::string_view str, std::ostream *err);
+  bool parse(std::string_view str, std::ostream *err);
 
   bool allow_all() const;
   bool is_capable(std::string_view inode_path,
@@ -226,7 +225,6 @@ public:
 
   friend std::ostream &operator<<(std::ostream &out, const MDSAuthCaps &cap);
 private:
-  CephContext *cct = nullptr;
   std::vector<MDSCapGrant> grants;
 };
 
index 53d33460bc6f917ecf0b3950e75a3217bac3c0f2..8710102b70d99268881b2af09061b8bbb0f39411 100644 (file)
@@ -98,8 +98,8 @@ class MDSCacheObject {
   std::string_view generic_pin_name(int p) const;
 
   // printing
-  virtual void print(std::ostream& out) = 0;
-  virtual std::ostream& print_db_line_prefix(std::ostream& out) 
+  virtual void print(std::ostream& out) const = 0;
+  virtual std::ostream& print_db_line_prefix(std::ostream& out) const {
     return out << "mdscacheobject(" << this << ") "; 
   }
 
@@ -326,11 +326,7 @@ class MDSCacheObject {
   static uint64_t last_wait_seq;
 };
 
-std::ostream& operator<<(std::ostream& out, const mdsco_db_line_prefix& o);
-// printer
-std::ostream& operator<<(std::ostream& out, const MDSCacheObject &o);
-
-inline std::ostream& operator<<(std::ostream& out, MDSCacheObject &o) {
+inline std::ostream& operator<<(std::ostream& out, const MDSCacheObject& o) {
   o.print(out);
   return out;
 }
index ca8c3b6567853fb81456a9637794433fea931372..d45acce06ca6e8803aa202de70b2884c96e0878a 100644 (file)
@@ -157,6 +157,7 @@ void MDSDaemon::asok_command(
                    // our response before seeing us disappear from mdsmap
                    sleep(1);
                    std::lock_guard l(mds_lock);
+                    derr << "Exiting due to admin socket command" << dendl;
                    suicide();
                  });
     t.detach();
@@ -258,7 +259,9 @@ void MDSDaemon::set_up_admin_socket()
   r = admin_socket->register_command("dump_ops_in_flight", asok_hook,
                                     "show the ops currently in flight");
   ceph_assert(r == 0);
-  r = admin_socket->register_command("ops", asok_hook,
+  r = admin_socket->register_command("ops "
+                                    "name=flags,type=CephChoices,strings=locks,n=N,req=false ",
+                                     asok_hook,
                                     "show the ops currently in flight");
   ceph_assert(r == 0);
   r = admin_socket->register_command("dump_blocked_ops",
@@ -286,7 +289,7 @@ void MDSDaemon::set_up_admin_socket()
   ceph_assert(r == 0);
   r = admin_socket->register_command("scrub start "
                                     "name=path,type=CephString "
-                                    "name=scrubops,type=CephChoices,strings=force|recursive|repair,n=N,req=false "
+                                    "name=scrubops,type=CephChoices,strings=force|recursive|repair|scrub_mdsdir,n=N,req=false "
                                     "name=tag,type=CephString,req=false",
                                     asok_hook,
                                     "scrub and inode and output results");
@@ -376,10 +379,6 @@ void MDSDaemon::set_up_admin_socket()
                                     asok_hook,
                                     "Evict a client session by id");
   ceph_assert(r == 0);
-  r = admin_socket->register_command("session ls name=cap_dump,type=CephBool,req=false",
-                                    asok_hook,
-                                    "Enumerate connected CephFS clients");
-  ceph_assert(r == 0);
   r = admin_socket->register_command("session config "
                                     "name=client_id,type=CephInt,req=true "
                                     "name=option,type=CephString,req=true "
@@ -1074,7 +1073,7 @@ bool MDSDaemon::parse_caps(const AuthCapsInfo& info, MDSAuthCaps& caps)
 
     dout(10) << __func__ << ": parsing auth_cap_str='" << auth_cap_str << "'" << dendl;
     CachedStackStringStream cs;
-    if (caps.parse(g_ceph_context, auth_cap_str, cs.get())) {
+    if (caps.parse(auth_cap_str, cs.get())) {
       return true;
     } else {
       dout(1) << __func__ << ": auth cap parse error: " << cs->strv() << " parsing '" << auth_cap_str << "'" << dendl;
@@ -1083,7 +1082,7 @@ bool MDSDaemon::parse_caps(const AuthCapsInfo& info, MDSAuthCaps& caps)
   }
 }
 
-int MDSDaemon::ms_handle_authentication(Connection *con)
+int MDSDaemon::ms_handle_fast_authentication(Connection *con)
 {
   /* N.B. without mds_lock! */
   MDSAuthCaps caps;
index 1fe872ba9675b4b2ce3709e2c0e0e1e8308f0651..e7929d2c37deccd23ffa3fa271ae85cd62082937 100644 (file)
@@ -146,7 +146,7 @@ class MDSDaemon : public Dispatcher {
 
  private:
   bool ms_dispatch2(const ref_t<Message> &m) override;
-  int ms_handle_authentication(Connection *con) override;
+  int ms_handle_fast_authentication(Connection *con) override;
   void ms_handle_accept(Connection *con) override;
   void ms_handle_connect(Connection *con) override;
   bool ms_handle_reset(Connection *con) override;
index a3191cb8072d7f244ae4130a93174a073a463e90..9a80534a4d588a21b63d38b047a7b5822f7fbeec 100644 (file)
@@ -38,6 +38,7 @@
 #include "mon/MonClient.h"
 #include "common/HeartbeatMap.h"
 #include "ScrubStack.h"
+#include "Mutation.h"
 
 
 #include "MDSRank.h"
@@ -931,6 +932,12 @@ void MDSRank::respawn()
   }
 }
 
+void MDSRank::abort(std::string_view msg)
+{
+  monc->flush_log();
+  ceph_abort(msg);
+}
+
 void MDSRank::damaged()
 {
   ceph_assert(whoami != MDS_RANK_NONE);
@@ -1178,7 +1185,6 @@ bool MDSRank::is_valid_message(const cref_t<Message> &m) {
       type == CEPH_MSG_CLIENT_RECONNECT ||
       type == CEPH_MSG_CLIENT_RECLAIM ||
       type == CEPH_MSG_CLIENT_REQUEST ||
-      type == CEPH_MSG_CLIENT_REPLY ||
       type == MSG_MDS_PEER_REQUEST ||
       type == MSG_MDS_HEARTBEAT ||
       type == MSG_MDS_TABLE_REQUEST ||
@@ -1232,7 +1238,6 @@ void MDSRank::handle_message(const cref_t<Message> &m)
       ALLOW_MESSAGES_FROM(CEPH_ENTITY_TYPE_CLIENT);
       // fall-thru
     case CEPH_MSG_CLIENT_REQUEST:
-    case CEPH_MSG_CLIENT_REPLY:
       server->dispatch(m);
       break;
     case MSG_MDS_PEER_REQUEST:
@@ -1470,10 +1475,12 @@ void MDSRank::send_message_mds(const ref_t<Message>& m, const entity_addrvec_t &
   messenger->send_to_mds(ref_t<Message>(m).detach(), addr);
 }
 
-void MDSRank::forward_message_mds(const cref_t<MClientRequest>& m, mds_rank_t mds)
+void MDSRank::forward_message_mds(MDRequestRef& mdr, mds_rank_t mds)
 {
   ceph_assert(mds != whoami);
 
+  auto m = mdr->release_client_request();
+
   /*
    * don't actually forward if non-idempotent!
    * client has to do it.  although the MDS will ignore duplicate requests,
@@ -1485,6 +1492,10 @@ void MDSRank::forward_message_mds(const cref_t<MClientRequest>& m, mds_rank_t md
 
   // tell the client where it should go
   auto session = get_session(m);
+  if (!session) {
+    dout(1) << "no session found, failed to forward client request " << mdr << dendl;
+    return;
+  }
   auto f = make_message<MClientRequestForward>(m->get_tid(), mds, m->get_num_fwd()+1, client_must_resend);
   send_message_client(f, session);
 }
@@ -2604,11 +2615,31 @@ void MDSRankDispatcher::handle_asok_command(
   int r = 0;
   CachedStackStringStream css;
   bufferlist outbl;
-  if (command == "dump_ops_in_flight" ||
-      command == "ops") {
+  dout(10) << __func__ << ": " << command << dendl;
+  if (command == "dump_ops_in_flight") {
     if (!op_tracker.dump_ops_in_flight(f)) {
       *css << "op_tracker disabled; set mds_enable_op_tracker=true to enable";
     }
+  } else if (command == "ops") {
+    vector<string> flags;
+    cmd_getval(cmdmap, "flags", flags);
+    std::unique_lock l(mds_lock, std::defer_lock);
+    auto lambda = OpTracker::default_dumper;
+    if (flags.size()) {
+      /* use std::function if we actually want to capture flags someday */
+      lambda = [](const TrackedOp& op, Formatter* f) {
+        auto* req = dynamic_cast<const MDRequestImpl*>(&op);
+        if (req) {
+          req->dump_with_mds_lock(f);
+        } else {
+          op.dump_type(f);
+        }
+      };
+      l.lock();
+    }
+    if (!op_tracker.dump_ops_in_flight(f, false, {""}, false, lambda)) {
+      *css << "op_tracker disabled; set mds_enable_op_tracker=true to enable";
+    }
   } else if (command == "dump_blocked_ops") {
     if (!op_tracker.dump_ops_in_flight(f, true)) {
       *css << "op_tracker disabled; set mds_enable_op_tracker=true to enable";
@@ -2973,6 +3004,7 @@ void MDSRank::command_scrub_start(Formatter *f,
   bool force = false;
   bool recursive = false;
   bool repair = false;
+  bool scrub_mdsdir = false;
   for (auto &op : scrubop_vec) {
     if (op == "force")
       force = true;
@@ -2980,10 +3012,13 @@ void MDSRank::command_scrub_start(Formatter *f,
       recursive = true;
     else if (op == "repair")
       repair = true;
+    else if (op == "scrub_mdsdir" && path == "/")
+      scrub_mdsdir = true;
   }
 
   std::lock_guard l(mds_lock);
-  mdcache->enqueue_scrub(path, tag, force, recursive, repair, f, on_finish);
+  mdcache->enqueue_scrub(path, tag, force, recursive, repair, scrub_mdsdir,
+                         f, on_finish);
   // scrub_dentry() finishers will dump the data for us; we're done!
 }
 
@@ -2993,7 +3028,7 @@ void MDSRank::command_tag_path(Formatter *f,
   C_SaferCond scond;
   {
     std::lock_guard l(mds_lock);
-    mdcache->enqueue_scrub(path, tag, true, true, false, f, &scond);
+    mdcache->enqueue_scrub(path, tag, true, true, false, false, f, &scond);
   }
   scond.wait();
 }
@@ -3785,6 +3820,7 @@ const char** MDSRankDispatcher::get_tracked_conf_keys() const
     "mds_extraordinary_events_dump_interval",
     "mds_inject_rename_corrupt_dentry_first",
     "mds_inject_journal_corrupt_dentry_first",
+    "mds_session_metadata_threshold",
     NULL
   };
   return KEYS;
index c52c837083b98fc9b43cfde2589d6a41a03a19ed..b61fc178c6d0b82ff54069321f94506fe7c4c5df 100644 (file)
@@ -151,29 +151,6 @@ class Finisher;
 class ScrubStack;
 class C_ExecAndReply;
 
-struct MDSMetaRequest {
-private:
-  int _op;
-  CDentry *_dentry;
-  ceph_tid_t _tid;
-public:
-  explicit MDSMetaRequest(int op, CDentry *dn, ceph_tid_t tid) :
-    _op(op), _dentry(dn), _tid(tid) {
-    if (_dentry) {
-      _dentry->get(CDentry::PIN_PURGING);
-    }
-  }
-  ~MDSMetaRequest() {
-    if (_dentry) {
-      _dentry->put(CDentry::PIN_PURGING);
-    }
-  }
-
-  CDentry *get_dentry() { return _dentry; }
-  int get_op() { return _op; }
-  ceph_tid_t get_tid() { return _tid; }
-};
-
 /**
  * The public part of this class's interface is what's exposed to all
  * the various subsystems (server, mdcache, etc), such as pointers
@@ -295,6 +272,13 @@ class MDSRank {
       return count * _heartbeat_reset_grace;
     }
 
+    /**
+     * Abort the MDS and flush any clog messages.
+     *
+     * Callers must already hold mds_lock.
+     */
+    void abort(std::string_view msg);
+
     /**
      * Report state DAMAGED to the mon, and then pass on to respawn().  Call
      * this when an unrecoverable error is encountered while attempting
@@ -322,7 +306,7 @@ class MDSRank {
 
     void send_message_mds(const ref_t<Message>& m, mds_rank_t mds);
     void send_message_mds(const ref_t<Message>& m, const entity_addrvec_t &addr);
-    void forward_message_mds(const cref_t<MClientRequest>& req, mds_rank_t mds);
+    void forward_message_mds(MDRequestRef& mdr, mds_rank_t mds);
     void send_message_client_counted(const ref_t<Message>& m, client_t client);
     void send_message_client_counted(const ref_t<Message>& m, Session* session);
     void send_message_client_counted(const ref_t<Message>& m, const ConnectionRef& connection);
@@ -439,8 +423,6 @@ class MDSRank {
     PerfCounters *logger = nullptr, *mlogger = nullptr;
     OpTracker op_tracker;
 
-    std::map<ceph_tid_t, MDSMetaRequest> internal_client_requests;
-
     // The last different state I held before current
     MDSMap::DaemonState last_state = MDSMap::STATE_BOOT;
     // The state assigned to me by the MDSMap
index 130ed08c1d21ffc665be0c4df1abe86752b284b6..8bd875c3450ef89c4ad7d948bf3c27a2efc570fc 100644 (file)
@@ -3379,8 +3379,6 @@ void Migrator::decode_import_dir(bufferlist::const_iterator& blp,
   if (le) 
     le->metablob.add_import_dir(dir);
 
-  int num_imported = 0;
-
   // take all waiters on this dir
   // NOTE: a pass of imported data is guaranteed to get all of my waiters because
   // a replica's presense in my cache implies/forces it's presense in authority's.
index 39eee47217baefdd57f6333fca9ced9b10ee6e84..b52e04a63936ef30d7208f1a515e17a8ec27dfe3 100644 (file)
@@ -268,7 +268,7 @@ void MutationImpl::cleanup()
   drop_pins();
 }
 
-void MutationImpl::_dump_op_descriptor_unlocked(ostream& stream) const
+void MutationImpl::_dump_op_descriptor(ostream& stream) const
 {
   stream << "Mutation";
 }
@@ -446,22 +446,17 @@ int MDRequestImpl::compare_paths()
 
 cref_t<MClientRequest> MDRequestImpl::release_client_request()
 {
-  msg_lock.lock();
+  std::lock_guard l(lock);
   cref_t<MClientRequest> req;
   req.swap(client_request);
   client_request = req;
-  msg_lock.unlock();
   return req;
 }
 
 void MDRequestImpl::reset_peer_request(const cref_t<MMDSPeerRequest>& req)
 {
-  msg_lock.lock();
-  cref_t<MMDSPeerRequest> old;
-  old.swap(peer_request);
+  std::lock_guard l(lock);
   peer_request = req;
-  msg_lock.unlock();
-  old.reset();
 }
 
 void MDRequestImpl::print(ostream &out) const
@@ -474,88 +469,89 @@ void MDRequestImpl::print(ostream &out) const
   out << ")";
 }
 
-void MDRequestImpl::dump(Formatter *f) const
-{
-  _dump(f);
-}
-
-void MDRequestImpl::_dump(Formatter *f) const
-{
-  f->dump_string("flag_point", state_string());
-  f->dump_stream("reqid") << reqid;
-  {
-    msg_lock.lock();
-    auto _client_request = client_request;
-    auto _peer_request =peer_request;
-    msg_lock.unlock();
-
-    if (_client_request) {
-      f->dump_string("op_type", "client_request");
-      f->open_object_section("client_info");
-      f->dump_stream("client") << _client_request->get_orig_source();
-      f->dump_int("tid", _client_request->get_tid());
-      f->close_section(); // client_info
-    } else if (is_peer()) { // replies go to an existing mdr
-      f->dump_string("op_type", "peer_request");
-      f->open_object_section("leader_info");
-      f->dump_stream("leader") << peer_to_mds;
-      f->close_section(); // leader_info
-
-      if (_peer_request) {
-        f->open_object_section("request_info");
-        f->dump_int("attempt", _peer_request->get_attempt());
-        f->dump_string("op_type",
-           MMDSPeerRequest::get_opname(_peer_request->get_op()));
-        f->dump_int("lock_type", _peer_request->get_lock_type());
-        f->dump_stream("object_info") << _peer_request->get_object_info();
-        f->dump_stream("srcdnpath") << _peer_request->srcdnpath;
-        f->dump_stream("destdnpath") << _peer_request->destdnpath;
-        f->dump_stream("witnesses") << _peer_request->witnesses;
-        f->dump_bool("has_inode_export",
-           _peer_request->inode_export_v != 0);
-        f->dump_int("inode_export_v", _peer_request->inode_export_v);
-        f->dump_stream("op_stamp") << _peer_request->op_stamp;
-        f->close_section(); // request_info
-      }
-    }
-    else if (internal_op != -1) { // internal request
-      f->dump_string("op_type", "internal_op");
-      f->dump_int("internal_op", internal_op);
-      f->dump_string("op_name", ceph_mds_op_name(internal_op));
-    }
-    else {
-      f->dump_string("op_type", "no_available_op_found");
+void MDRequestImpl::_dump(Formatter *f, bool has_mds_lock) const
+{
+  std::lock_guard l(lock);
+  f->dump_string("flag_point", _get_state_string());
+  f->dump_object("reqid", reqid);
+  if (client_request) {
+    f->dump_string("op_type", "client_request");
+  } else if (is_peer()) { // replies go to an existing mdr
+    f->dump_string("op_type", "peer_request");
+    f->open_object_section("leader_info");
+    f->dump_stream("leader") << peer_to_mds;
+    f->close_section(); // leader_info
+
+    if (peer_request) {
+      f->open_object_section("request_info");
+      f->dump_int("attempt", peer_request->get_attempt());
+      f->dump_string("op_type",
+         MMDSPeerRequest::get_opname(peer_request->get_op()));
+      f->dump_int("lock_type", peer_request->get_lock_type());
+      f->dump_stream("object_info") << peer_request->get_object_info();
+      f->dump_stream("srcdnpath") << peer_request->srcdnpath;
+      f->dump_stream("destdnpath") << peer_request->destdnpath;
+      f->dump_stream("witnesses") << peer_request->witnesses;
+      f->dump_bool("has_inode_export",
+         peer_request->inode_export_v != 0);
+      f->dump_int("inode_export_v", peer_request->inode_export_v);
+      f->dump_stream("op_stamp") << peer_request->op_stamp;
+      f->close_section(); // request_info
     }
   }
+  else if (internal_op != -1) { // internal request
+    f->dump_string("op_type", "internal_op");
+    f->dump_int("internal_op", internal_op);
+    f->dump_string("op_name", ceph_mds_op_name(internal_op));
+  }
+  else {
+    f->dump_string("op_type", "no_available_op_found");
+  }
+
   {
     f->open_array_section("events");
-    std::lock_guard l(lock);
     for (auto& i : events) {
       f->dump_object("event", i);
     }
     f->close_section(); // events
   }
+
+  if (has_mds_lock) {
+    f->open_array_section("locks");
+    for (auto& l : locks) {
+      f->open_object_section("lock");
+      {
+        auto* mdsco = l.lock->get_parent();
+        f->dump_object("object", *mdsco);
+        CachedStackStringStream css;
+        *css << *mdsco;
+        f->dump_string("object_string", css->strv());
+        f->dump_object("lock", *l.lock);
+        f->dump_int("flags", l.flags);
+        f->dump_int("wrlock_target", l.wrlock_target);
+      }
+      f->close_section();
+    }
+    f->close_section();
+  } else {
+    f->dump_null("locks");
+  }
 }
 
-void MDRequestImpl::_dump_op_descriptor_unlocked(ostream& stream) const
+void MDRequestImpl::_dump_op_descriptor(ostream& os) const
 {
-  msg_lock.lock();
-  auto _client_request = client_request;
-  auto _peer_request = peer_request;
-  msg_lock.unlock();
-
-  if (_client_request) {
-    _client_request->print(stream);
-  } else if (_peer_request) {
-    _peer_request->print(stream);
+  if (client_request) {
+    client_request->print(os);
+  } else if (peer_request) {
+    peer_request->print(os);
   } else if (is_peer()) {
-    stream << "peer_request:" << reqid;
+    os << "peer_request:" << reqid;
   } else if (internal_op >= 0) {
-    stream << "internal op " << ceph_mds_op_name(internal_op) << ":" << reqid;
+    os << "internal op " << ceph_mds_op_name(internal_op) << ":" << reqid;
   } else {
     // drat, it's triggered by a peer request, but we don't have a message
     // FIXME
-    stream << "rejoin:" << reqid;
+    os << "rejoin:" << reqid;
   }
 }
 
index 09ebe7052a90f79655a57a1358a67f31d40e2bbf..b963dee08420c6d4d51eeda3bb613dad3c7ee458 100644 (file)
@@ -221,7 +221,7 @@ public:
   }
 
   virtual void dump(ceph::Formatter *f) const {}
-  void _dump_op_descriptor_unlocked(std::ostream& stream) const override;
+  void _dump_op_descriptor(std::ostream& stream) const override;
 
   metareqid_t reqid;
   __u32 attempt = 0;      // which attempt for this request
@@ -396,7 +396,9 @@ struct MDRequestImpl : public MutationImpl {
   std::unique_ptr<BatchOp> release_batch_op();
 
   void print(std::ostream &out) const override;
-  void dump(ceph::Formatter *f) const override;
+  void dump_with_mds_lock(ceph::Formatter* f) const {
+    return _dump(f, true);
+  }
 
   ceph::cref_t<MClientRequest> release_client_request();
   void reset_peer_request(const ceph::cref_t<MMDSPeerRequest>& req=nullptr);
@@ -416,6 +418,7 @@ struct MDRequestImpl : public MutationImpl {
   CInode *in[2] = {};
   CDentry *straydn = nullptr;
   snapid_t snapid = CEPH_NOSNAP;
+  snapid_t snapid_diff_other = CEPH_NOSNAP;
 
   CInode *tracei = nullptr;
   CDentry *tracedn = nullptr;
@@ -452,10 +455,11 @@ struct MDRequestImpl : public MutationImpl {
   bool waited_for_osdmap = false;
 
 protected:
-  void _dump(ceph::Formatter *f) const override;
-  void _dump_op_descriptor_unlocked(std::ostream& stream) const override;
-private:
-  mutable ceph::spinlock msg_lock;
+  void _dump(ceph::Formatter *f) const override {
+    _dump(f, false);
+  }
+  void _dump(ceph::Formatter *f, bool has_mds_lock) const;
+  void _dump_op_descriptor(std::ostream& stream) const override;
 };
 
 struct MDPeerUpdate {
index eb79090b0073c2f691725d5c3bd9c588b7f57a70..a5d35f61ce4281a63a9f87c37bae20e6f255ad2a 100644 (file)
@@ -35,9 +35,9 @@ class CInode;
 class ScrubHeader {
 public:
   ScrubHeader(std::string_view tag_, bool is_tag_internal_, bool force_,
-              bool recursive_, bool repair_)
+              bool recursive_, bool repair_, bool scrub_mdsdir_ = false)
     : tag(tag_), is_tag_internal(is_tag_internal_), force(force_),
-      recursive(recursive_), repair(repair_) {}
+      recursive(recursive_), repair(repair_), scrub_mdsdir(scrub_mdsdir_) {}
 
   // Set after construction because it won't be known until we've
   // started resolving path and locking
@@ -46,6 +46,7 @@ public:
   bool get_recursive() const { return recursive; }
   bool get_repair() const { return repair; }
   bool get_force() const { return force; }
+  bool get_scrub_mdsdir() const { return scrub_mdsdir; }
   bool is_internal_tag() const { return is_tag_internal; }
   inodeno_t get_origin() const { return origin; }
   const std::string& get_tag() const { return tag; }
@@ -69,6 +70,7 @@ protected:
   const bool force;
   const bool recursive;
   const bool repair;
+  const bool scrub_mdsdir;
   inodeno_t origin;
 
   bool repaired = false;  // May be set during scrub if repairs happened
index 5a3c2bf81e8538609c3efd0f41b65b085cd6fb54..6d799343f1496c2f7c0a414a67215d9185f1c0a2 100644 (file)
@@ -67,6 +67,11 @@ int ScrubStack::_enqueue(MDSCacheObject *obj, ScrubHeaderRef& header, bool top)
       dout(10) << __func__ << " with {" << *in << "}" << ", already in scrubbing" << dendl;
       return -CEPHFS_EBUSY;
     }
+    if(in->state_test(CInode::STATE_PURGING)) {
+      dout(10) << *obj << " is purging, skip pushing into scrub stack" << dendl;
+      // treating this as success since purge will make sure this inode goes away
+      return 0;
+    }
 
     dout(10) << __func__ << " with {" << *in << "}" << ", top=" << top << dendl;
     in->scrub_initialize(header);
@@ -75,6 +80,11 @@ int ScrubStack::_enqueue(MDSCacheObject *obj, ScrubHeaderRef& header, bool top)
       dout(10) << __func__ << " with {" << *dir << "}" << ", already in scrubbing" << dendl;
       return -CEPHFS_EBUSY;
     }
+    if(dir->get_inode()->state_test(CInode::STATE_PURGING)) {
+      dout(10) << *obj << " is purging, skip pushing into scrub stack" << dendl;
+      // treating this as success since purge will make sure this dir inode goes away
+      return 0;
+    }
 
     dout(10) << __func__ << " with {" << *dir << "}" << ", top=" << top << dendl;
     // The edge directory must be in memory
@@ -109,7 +119,20 @@ int ScrubStack::enqueue(CInode *in, ScrubHeaderRef& header, bool top)
             << ", conflicting tag " << header->get_tag() << dendl;
     return -CEPHFS_EEXIST;
   }
-
+  if (header->get_scrub_mdsdir()) {
+    filepath fp;
+    mds_rank_t rank;
+    rank = mdcache->mds->get_nodeid();
+    if(rank >= 0 && rank < MAX_MDS) {
+      fp.set_path("", MDS_INO_MDSDIR(rank));
+    }
+    int r = _enqueue(mdcache->get_inode(fp.get_ino()), header, true);
+    if (r < 0) {
+      return r;
+    }
+    //to make sure mdsdir is always on the top
+    top = false;
+  }
   int r = _enqueue(in, header, top);
   if (r < 0)
     return r;
@@ -673,6 +696,12 @@ void ScrubStack::scrub_status(Formatter *f) {
       }
       *optcss << "force";
     }
+    if (header->get_scrub_mdsdir()) {
+      if (have_more) {
+        *optcss << ",";
+      }
+      *optcss << "scrub_mdsdir";
+    }
 
     f->dump_string("options", optcss->strv());
     f->close_section(); // scrub id
@@ -837,6 +866,18 @@ void ScrubStack::dispatch(const cref_t<Message> &m)
   }
 }
 
+bool ScrubStack::remove_inode_if_stacked(CInode *in) {
+  MDSCacheObject *obj = dynamic_cast<MDSCacheObject*>(in);
+  if(obj->item_scrub.is_on_list()) {
+    dout(20) << "removing inode " << *in << " from scrub_stack" << dendl;
+    obj->put(MDSCacheObject::PIN_SCRUBQUEUE);
+    obj->item_scrub.remove_myself();
+    stack_size--;
+    return true;
+  }
+  return false;
+}
+
 void ScrubStack::handle_scrub(const cref_t<MMDSScrub> &m)
 {
 
index 62a4a529944d21ee8c1de0b290f8757138c07da6..756ebd9cb0e95975be54e6996a13984a5bc715b2 100644 (file)
@@ -101,6 +101,8 @@ public:
 
   void dispatch(const cref_t<Message> &m);
 
+  bool remove_inode_if_stacked(CInode *in);
+
   MDCache *mdcache;
 
 protected:
index bf12cb7e2c8fa9f24be9f6eae1b330aa829351cb..ced4ecffae1fbf8e7cf7bb4e24e373270bc55557 100644 (file)
@@ -31,7 +31,6 @@
 #include "Mutation.h"
 #include "MetricsHandler.h"
 #include "cephfs_features.h"
-#include "MDSContext.h"
 
 #include "msg/Messenger.h"
 
@@ -118,7 +117,7 @@ public:
   }
   void _forward(mds_rank_t t) override {
     MDCache* mdcache = server->mdcache;
-    mdcache->mds->forward_message_mds(mdr->release_client_request(), t);
+    mdcache->mds->forward_message_mds(mdr, t);
     mdr->set_mds_stamp(ceph_clock_now());
     for (auto& m : batch_reqs) {
       if (!m->killed)
@@ -138,7 +137,7 @@ public:
     batch_reqs.clear();
     server->reply_client_request(mdr, make_message<MClientReply>(*mdr->client_request, r));
   }
-  void print(std::ostream& o) {
+  void print(std::ostream& o) const override {
     o << "[batch front=" << *mdr << "]";
   }
 };
@@ -242,6 +241,8 @@ void Server::create_logger()
                    "Request type remove snapshot latency");
   plb.add_time_avg(l_mdss_req_renamesnap_latency, "req_renamesnap_latency",
                    "Request type rename snapshot latency");
+  plb.add_time_avg(l_mdss_req_snapdiff_latency, "req_snapdiff_latency",
+                  "Request type snapshot difference latency");
 
   plb.set_prio_default(PerfCountersBuilder::PRIO_DEBUGONLY);
   plb.add_u64_counter(l_mdss_dispatch_client_request, "dispatch_client_request",
@@ -359,9 +360,6 @@ void Server::dispatch(const cref_t<Message> &m)
   case CEPH_MSG_CLIENT_REQUEST:
     handle_client_request(ref_cast<MClientRequest>(m));
     return;
-  case CEPH_MSG_CLIENT_REPLY:
-    handle_client_reply(ref_cast<MClientReply>(m));
-    return;
   case CEPH_MSG_CLIENT_RECLAIM:
     handle_client_reclaim(ref_cast<MClientReclaim>(m));
     return;
@@ -1982,23 +1980,20 @@ void Server::journal_and_reply(MDRequestRef& mdr, CInode *in, CDentry *dn, LogEv
     mdr->pin(dn);
 
   early_reply(mdr, in, dn);
-
+  
   mdr->committing = true;
   submit_mdlog_entry(le, fin, mdr, __func__);
-
+  
   if (mdr->client_request && mdr->client_request->is_queued_for_replay()) {
     if (mds->queue_one_replay()) {
       dout(10) << " queued next replay op" << dendl;
     } else {
       dout(10) << " journaled last replay op" << dendl;
     }
-  } else if (mdr->did_early_reply) {
+  } else if (mdr->did_early_reply)
     mds->locker->drop_rdlocks_for_early_reply(mdr.get());
-    if (dn && dn->is_waiter_for(CDentry::WAIT_UNLINK_FINISH))
-      mdlog->flush();
-  } else {
+  else
     mdlog->flush();
-  }
 }
 
 void Server::submit_mdlog_entry(LogEvent *le, MDSLogContextBase *fin, MDRequestRef& mdr,
@@ -2125,6 +2120,9 @@ void Server::perf_gather_op_latency(const cref_t<MClientRequest> &req, utime_t l
   case CEPH_MDS_OP_RENAMESNAP:
     code = l_mdss_req_renamesnap_latency;
     break;
+  case CEPH_MDS_OP_READDIR_SNAPDIFF:
+    code = l_mdss_req_snapdiff_latency;
+    break;
   default:
     dout(1) << ": unknown client op" << dendl;
     return;
@@ -2295,10 +2293,6 @@ void Server::reply_client_request(MDRequestRef& mdr, const ref_t<MClientReply> &
     mds->send_message_client(reply, session);
   }
 
-  if (client_inst.name.is_mds() && reply->get_op() == CEPH_MDS_OP_RENAME) {
-    mds->send_message(reply, mdr->client_request->get_connection());
-  }
-
   if (req->is_queued_for_replay() &&
       (mdr->has_completed || reply->get_result() < 0)) {
     if (reply->get_result() < 0) {
@@ -2388,7 +2382,8 @@ void Server::set_trace_dist(const ref_t<MClientReply> &reply,
   // inode
   if (in) {
     in->encode_inodestat(bl, session, NULL, snapid, 0, mdr->getattr_caps);
-    dout(20) << "set_trace_dist added in   " << *in << dendl;
+    dout(20) << "set_trace_dist added snap " << snapid << " in " << *in
+             << dendl;
     reply->head.is_target = 1;
   } else
     reply->head.is_target = 0;
@@ -2530,38 +2525,6 @@ void Server::handle_client_request(const cref_t<MClientRequest> &req)
   return;
 }
 
-void Server::handle_client_reply(const cref_t<MClientReply> &reply)
-{
-  dout(4) << "handle_client_reply " << *reply << dendl;
-
-  ceph_assert(reply->is_safe());
-  ceph_tid_t tid = reply->get_tid();
-
-  if (mds->internal_client_requests.count(tid) == 0) {
-    dout(1) << " no pending request on tid " << tid << dendl;
-    return;
-  }
-
-  auto &req = mds->internal_client_requests.at(tid);
-  CDentry *dn = req.get_dentry();
-
-  switch (reply->get_op()) {
-  case CEPH_MDS_OP_RENAME:
-    if (dn) {
-      dn->state_clear(CDentry::STATE_REINTEGRATING);
-
-      MDSContext::vec finished;
-      dn->take_waiting(CDentry::WAIT_REINTEGRATE_FINISH, finished);
-      mds->queue_waiters(finished);
-    }
-    break;
-  default:
-    dout(5) << " unknown client op " << reply->get_op() << dendl;
-  }
-
-  mds->internal_client_requests.erase(tid);
-}
-
 void Server::handle_osd_map()
 {
   /* Note that we check the OSDMAP_FULL flag directly rather than
@@ -2752,6 +2715,9 @@ void Server::dispatch_client_request(MDRequestRef& mdr)
   case CEPH_MDS_OP_RENAMESNAP:
     handle_client_renamesnap(mdr);
     break;
+  case CEPH_MDS_OP_READDIR_SNAPDIFF:
+    handle_client_readdir_snapdiff(mdr);
+    break;
 
   default:
     dout(1) << " unknown client op " << req->get_op() << dendl;
@@ -3471,10 +3437,12 @@ CInode* Server::prepare_new_inode(MDRequestRef& mdr, CDir *dir, inodeno_t useino
       _inode->mode |= S_ISGID;
     }
   } else {
-    _inode->gid = mdr->client_request->get_caller_gid();
+    _inode->gid = mdr->client_request->get_owner_gid();
+    ceph_assert(_inode->gid != (unsigned)-1);
   }
 
-  _inode->uid = mdr->client_request->get_caller_uid();
+  _inode->uid = mdr->client_request->get_owner_uid();
+  ceph_assert(_inode->uid != (unsigned)-1);
 
   _inode->btime = _inode->ctime = _inode->mtime = _inode->atime =
     mdr->get_op_stamp();
@@ -4028,6 +3996,7 @@ void Server::handle_client_getattr(MDRequestRef& mdr, bool is_lookup)
       } else {
        dout(20) << __func__ << ": LOOKUP op, wait for previous same getattr ops to respond. " << *mdr << dendl;
        em.first->second->add_request(mdr);
+        mdr->mark_event("joining batch lookup");
        return;
       }
     } else {
@@ -4039,6 +4008,7 @@ void Server::handle_client_getattr(MDRequestRef& mdr, bool is_lookup)
       } else {
        dout(20) << __func__ << ": GETATTR op, wait for previous same getattr ops to respond. " << *mdr << dendl;
        em.first->second->add_request(mdr);
+        mdr->mark_event("joining batch getattr");
        return;
       }
     }
@@ -4082,6 +4052,24 @@ void Server::handle_client_getattr(MDRequestRef& mdr, bool is_lookup)
     } else if (ref->filelock.is_stable() ||
               ref->filelock.get_num_wrlocks() > 0 ||
               !ref->filelock.can_read(mdr->get_client())) {
+      /* Since we're taking advantage of an optimization here:
+       *
+       * We cannot suddenly, due to a changing condition, add this filelock as
+       * it can cause lock-order deadlocks. In this case, that condition is the
+       * lock state changes between request retries. If that happens, we need
+       * to check if we've acquired the other locks in this vector. If we have,
+       * then we need to drop those locks and retry.
+       */
+      if (mdr->is_rdlocked(&ref->linklock) ||
+          mdr->is_rdlocked(&ref->authlock) ||
+          mdr->is_rdlocked(&ref->xattrlock)) {
+        /* start over */
+        dout(20) << " dropping locks and restarting request because filelock state change" << dendl;
+       mds->locker->drop_locks(mdr.get());
+       mdr->drop_local_auth_pins();
+       mds->queue_waiter(new C_MDS_RetryRequest(mdcache, mdr));
+        return;
+      }
       lov.add_rdlock(&ref->filelock);
       mdr->locking_state &= ~MutationImpl::ALL_LOCKED;
     }
@@ -4403,6 +4391,7 @@ void Server::handle_client_open(MDRequestRef& mdr)
   }
 
   MutationImpl::LockOpVec lov;
+  lov.add_rdlock(&cur->snaplock);
 
   unsigned mask = req->head.args.open.mask;
   if (mask) {
@@ -4564,21 +4553,11 @@ void Server::handle_client_openc(MDRequestRef& mdr)
   if (!dn)
     return;
 
-  if (is_unlink_pending(dn)) {
-    wait_for_pending_unlink(dn, mdr);
-    return;
-  }
-
   CDentry::linkage_t *dnl = dn->get_projected_linkage();
   if (!excl && !dnl->is_null()) {
     // it existed.
     ceph_assert(mdr.get()->is_rdlocked(&dn->lock));
 
-    MutationImpl::LockOpVec lov;
-    lov.add_rdlock(&dnl->get_inode()->snaplock);
-    if (!mds->locker->acquire_locks(mdr, lov))
-      return;
-
     handle_client_open(mdr);
     return;
   }
@@ -4732,6 +4711,47 @@ void Server::handle_client_openc(MDRequestRef& mdr)
 }
 
 
+void Server::_finalize_readdir(MDRequestRef& mdr,
+                               CInode *diri,
+                               CDir* dir,
+                               bool start,
+                               bool end,
+                               __u16 flags,
+                               __u32 numfiles,
+                               bufferlist& dirbl,
+                               bufferlist& dnbl)
+{
+  const cref_t<MClientRequest> &req = mdr->client_request;
+  Session *session = mds->get_session(req);
+
+  session->touch_readdir_cap(numfiles);
+
+  if (end) {
+    flags |= CEPH_READDIR_FRAG_END;
+    if (start)
+      flags |= CEPH_READDIR_FRAG_COMPLETE; // FIXME: what purpose does this serve
+  }
+
+  // finish final blob
+  encode(numfiles, dirbl);
+  encode(flags, dirbl);
+  dirbl.claim_append(dnbl);
+
+  // yay, reply
+  dout(10) << "reply to " << *req << " readdir num=" << numfiles
+    << " bytes=" << dirbl.length()
+    << " start=" << (int)start
+    << " end=" << (int)end
+    << dendl;
+  mdr->reply_extra_bl = dirbl;
+
+  // bump popularity.  NOTE: this doesn't quite capture it.
+  mds->balancer->hit_dir(dir, META_POP_READDIR, numfiles);
+
+  // reply
+  mdr->tracei = diri;
+  respond_to_request(mdr, 0);
+}
 
 void Server::handle_client_readdir(MDRequestRef& mdr)
 {
@@ -4759,6 +4779,7 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
       if (logger)
           logger->inc(l_mdss_cap_acquisition_throttle);
 
+      mdr->mark_event("cap_acquisition_throttle");
       mds->timer.add_event_after(caps_throttle_retry_request_timeout, new C_MDS_RetryRequest(mdcache, mdr));
       return;
   }
@@ -4937,7 +4958,7 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
       dout(10) << " ran out of room, stopping at " << dnbl.length() << " < " << bytes_left << dendl;
       break;
     }
-    
+
     unsigned start_len = dnbl.length();
 
     // dentry
@@ -4946,7 +4967,7 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
     mds->locker->issue_client_lease(dn, in, mdr, now, dnbl);
 
     // inode
-    dout(12) << "including inode " << *in << dendl;
+    dout(12) << "including inode in " << *in << " snap " << snapid << dendl;
     int r = in->encode_inodestat(dnbl, mdr->session, realm, snapid, bytes_left - (int)dnbl.length());
     if (r < 0) {
       // chop off dn->name, lease
@@ -4962,39 +4983,12 @@ void Server::handle_client_readdir(MDRequestRef& mdr)
     // touch dn
     mdcache->lru.lru_touch(dn);
   }
-  
-  session->touch_readdir_cap(numfiles);
-
   __u16 flags = 0;
-  if (end) {
-    flags = CEPH_READDIR_FRAG_END;
-    if (start)
-      flags |= CEPH_READDIR_FRAG_COMPLETE; // FIXME: what purpose does this serve
-  }
   // client only understand END and COMPLETE flags ?
   if (req_flags & CEPH_READDIR_REPLY_BITFLAGS) {
     flags |= CEPH_READDIR_HASH_ORDER | CEPH_READDIR_OFFSET_HASH;
   }
-  
-  // finish final blob
-  encode(numfiles, dirbl);
-  encode(flags, dirbl);
-  dirbl.claim_append(dnbl);
-  
-  // yay, reply
-  dout(10) << "reply to " << *req << " readdir num=" << numfiles
-          << " bytes=" << dirbl.length()
-          << " start=" << (int)start
-          << " end=" << (int)end
-          << dendl;
-  mdr->reply_extra_bl = dirbl;
-
-  // bump popularity.  NOTE: this doesn't quite capture it.
-  mds->balancer->hit_dir(dir, META_POP_READDIR, numfiles);
-  
-  // reply
-  mdr->tracei = diri;
-  respond_to_request(mdr, 0);
+  _finalize_readdir(mdr, diri, dir, start, end, flags, numfiles, dirbl, dnbl);
 }
 
 
@@ -6820,84 +6814,6 @@ void Server::handle_client_getvxattr(MDRequestRef& mdr)
 
 // ------------------------------------------------
 
-struct C_WaitUnlinkToFinish : public MDSContext {
-protected:
-  MDCache *mdcache;
-  CDentry *dn;
-  MDSContext *fin;
-
-  MDSRank *get_mds() override
-  {
-    ceph_assert(mdcache != NULL);
-    return mdcache->mds;
-  }
-
-public:
-  C_WaitUnlinkToFinish(MDCache *m, CDentry *d, MDSContext *f) :
-    mdcache(m), dn(d), fin(f) {}
-  void finish(int r) override {
-    fin->complete(r);
-    dn->put(CDentry::PIN_PURGING);
-  }
-};
-
-bool Server::is_unlink_pending(CDentry *dn)
-{
-  CDentry::linkage_t *dnl = dn->get_projected_linkage();
-  if (!dnl->is_null() && dn->state_test(CDentry::STATE_UNLINKING)) {
-      return true;
-  }
-  return false;
-}
-
-void Server::wait_for_pending_unlink(CDentry *dn, MDRequestRef& mdr)
-{
-  dout(20) << __func__ << " dn " << *dn << dendl;
-  mds->locker->drop_locks(mdr.get());
-  auto fin = new C_MDS_RetryRequest(mdcache, mdr);
-  dn->get(CDentry::PIN_PURGING);
-  dn->add_waiter(CDentry::WAIT_UNLINK_FINISH, new C_WaitUnlinkToFinish(mdcache, dn, fin));
-}
-
-struct C_WaitReintegrateToFinish : public MDSContext {
-protected:
-  MDCache *mdcache;
-  CDentry *dn;
-  MDSContext *fin;
-
-  MDSRank *get_mds() override
-  {
-    ceph_assert(mdcache != NULL);
-    return mdcache->mds;
-  }
-
-public:
-  C_WaitReintegrateToFinish(MDCache *m, CDentry *d, MDSContext *f) :
-    mdcache(m), dn(d), fin(f) {}
-  void finish(int r) override {
-    fin->complete(r);
-    dn->put(CDentry::PIN_PURGING);
-  }
-};
-
-bool Server::is_reintegrate_pending(CDentry *dn)
-{
-  CDentry::linkage_t *dnl = dn->get_projected_linkage();
-  if (!dnl->is_null() && dn->state_test(CDentry::STATE_REINTEGRATING)) {
-      return true;
-  }
-  return false;
-}
-
-void Server::wait_for_pending_reintegrate(CDentry *dn, MDRequestRef& mdr)
-{
-  dout(20) << __func__ << " dn " << *dn << dendl;
-  mds->locker->drop_locks(mdr.get());
-  auto fin = new C_MDS_RetryRequest(mdcache, mdr);
-  dn->get(CDentry::PIN_PURGING);
-  dn->add_waiter(CDentry::WAIT_REINTEGRATE_FINISH, new C_WaitReintegrateToFinish(mdcache, dn, fin));
-}
-
 // MKNOD
 
 class C_MDS_mknod_finish : public ServerLogContext {
@@ -6964,11 +6880,6 @@ void Server::handle_client_mknod(MDRequestRef& mdr)
   if (!dn)
     return;
 
-  if (is_unlink_pending(dn)) {
-    wait_for_pending_unlink(dn, mdr);
-    return;
-  }
-
   CDir *dir = dn->get_dir();
   CInode *diri = dir->get_inode();
   if (!check_access(mdr, diri, MAY_WRITE))
@@ -7067,11 +6978,6 @@ void Server::handle_client_mkdir(MDRequestRef& mdr)
   if (!dn)
     return;
 
-  if (is_unlink_pending(dn)) {
-    wait_for_pending_unlink(dn, mdr);
-    return;
-  }
-
   CDir *dir = dn->get_dir();
   CInode *diri = dir->get_inode();
 
@@ -7167,11 +7073,6 @@ void Server::handle_client_symlink(MDRequestRef& mdr)
   if (!dn)
     return;
 
-  if (is_unlink_pending(dn)) {
-    wait_for_pending_unlink(dn, mdr);
-    return;
-  }
-
   CDir *dir = dn->get_dir();
   CInode *diri = dir->get_inode();
 
@@ -7283,11 +7184,6 @@ void Server::handle_client_link(MDRequestRef& mdr)
     targeti = ret.second->get_projected_linkage()->get_inode();
   }
 
-  if (is_unlink_pending(destdn)) {
-    wait_for_pending_unlink(destdn, mdr);
-    return;
-  }
-
   ceph_assert(destdn->get_projected_linkage()->is_null());
   if (req->get_alternate_name().size() > alternate_name_max) {
     dout(10) << " alternate_name longer than " << alternate_name_max << dendl;
@@ -7341,14 +7237,9 @@ void Server::handle_client_link(MDRequestRef& mdr)
   SnapRealm *target_realm = target_pin->find_snaprealm();
   if (target_pin != dir->inode &&
       target_realm->get_subvolume_ino() !=
-      dir->inode->find_snaprealm()->get_subvolume_ino()) {
-    if (target_pin->is_stray()) {
-      mds->locker->drop_locks(mdr.get());
-      targeti->add_waiter(CInode::WAIT_UNLINK,
-                          new C_MDS_RetryRequest(mdcache, mdr));
-      mdlog->flush();
-      return;
-    }
+      dir->inode->find_snaprealm()->get_subvolume_ino() &&
+      /* The inode is temporarily located in the stray dir pending reintegration */
+      !target_pin->is_stray()) {
     dout(7) << "target is in different subvolume, failing..." << dendl;
     respond_to_request(mdr, -CEPHFS_EXDEV);
     return;
@@ -7579,17 +7470,11 @@ void Server::_link_remote_finish(MDRequestRef& mdr, bool inc,
   mdr->apply();
 
   MDRequestRef null_ref;
-  if (inc) {
+  if (inc)
     mdcache->send_dentry_link(dn, null_ref);
-  } else {
-    dn->state_clear(CDentry::STATE_UNLINKING);
+  else
     mdcache->send_dentry_unlink(dn, NULL, null_ref);
-
-    MDSContext::vec finished;
-    dn->take_waiting(CDentry::WAIT_UNLINK_FINISH, finished);
-    mdcache->mds->queue_waiters(finished);
-  }
-
+  
   // bump target popularity
   mds->balancer->hit_inode(targeti, META_POP_IWR);
   mds->balancer->hit_dir(dn->get_dir(), META_POP_IWR);
@@ -7963,25 +7848,10 @@ void Server::handle_client_unlink(MDRequestRef& mdr)
 
   if (rmdir)
     mdr->disable_lock_cache();
-
   CDentry *dn = rdlock_path_xlock_dentry(mdr, false, true);
   if (!dn)
     return;
 
-  if (is_reintegrate_pending(dn)) {
-    wait_for_pending_reintegrate(dn, mdr);
-    return;
-  }
-
-  // notify replica MDSes the dentry is under unlink
-  if (!dn->state_test(CDentry::STATE_UNLINKING)) {
-    dn->state_set(CDentry::STATE_UNLINKING);
-    mdcache->send_dentry_unlink(dn, nullptr, mdr, true);
-    if (dn->replica_unlinking_ref) {
-      return;
-    }
-  }
-
   CDentry::linkage_t *dnl = dn->get_linkage(client, mdr);
   ceph_assert(!dnl->is_null());
   CInode *in = dnl->get_inode();
@@ -7998,13 +7868,11 @@ void Server::handle_client_unlink(MDRequestRef& mdr)
     if (rmdir) {
       // do empty directory checks
       if (_dir_is_nonempty_unlocked(mdr, in)) {
-        dn->state_clear(CDentry::STATE_UNLINKING);
-        respond_to_request(mdr, -CEPHFS_ENOTEMPTY);
+       respond_to_request(mdr, -CEPHFS_ENOTEMPTY);
        return;
       }
     } else {
       dout(7) << "handle_client_unlink on dir " << *in << ", returning error" << dendl;
-      dn->state_clear(CDentry::STATE_UNLINKING);
       respond_to_request(mdr, -CEPHFS_EISDIR);
       return;
     }
@@ -8012,7 +7880,6 @@ void Server::handle_client_unlink(MDRequestRef& mdr)
     if (rmdir) {
       // unlink
       dout(7) << "handle_client_rmdir on non-dir " << *in << ", returning error" << dendl;
-      dn->state_clear(CDentry::STATE_UNLINKING);
       respond_to_request(mdr, -CEPHFS_ENOTDIR);
       return;
     }
@@ -8020,10 +7887,8 @@ void Server::handle_client_unlink(MDRequestRef& mdr)
 
   CInode *diri = dn->get_dir()->get_inode();
   if ((!mdr->has_more() || mdr->more()->witnessed.empty())) {
-    if (!check_access(mdr, diri, MAY_WRITE)) {
-      dn->state_clear(CDentry::STATE_UNLINKING);
+    if (!check_access(mdr, diri, MAY_WRITE))
       return;
-    }
   }
 
   // -- create stray dentry? --
@@ -8062,7 +7927,6 @@ void Server::handle_client_unlink(MDRequestRef& mdr)
   if (in->is_dir() &&
       _dir_is_nonempty(mdr, in)) {
     respond_to_request(mdr, -CEPHFS_ENOTEMPTY);
-    dn->state_clear(CDentry::STATE_UNLINKING);
     return;
   }
 
@@ -8262,14 +8126,9 @@ void Server::_unlink_local_finish(MDRequestRef& mdr,
   }
 
   mdr->apply();
-
-  dn->state_clear(CDentry::STATE_UNLINKING);
+  
   mdcache->send_dentry_unlink(dn, straydn, mdr);
-
-  MDSContext::vec finished;
-  dn->take_waiting(CDentry::WAIT_UNLINK_FINISH, finished);
-  mdcache->mds->queue_waiters(finished);
-
+  
   if (straydn) {
     // update subtree map?
     if (strayin->is_dir())
@@ -8284,7 +8143,7 @@ void Server::_unlink_local_finish(MDRequestRef& mdr,
 
   // reply
   respond_to_request(mdr, 0);
-
+  
   // removing a new dn?
   dn->get_dir()->try_remove_unlinked_dn(dn);
 
@@ -8743,16 +8602,6 @@ void Server::handle_client_rename(MDRequestRef& mdr)
   if (!destdn)
     return;
 
-  if (is_unlink_pending(destdn)) {
-    wait_for_pending_unlink(destdn, mdr);
-    return;
-  }
-
-  if (is_unlink_pending(srcdn)) {
-    wait_for_pending_unlink(srcdn, mdr);
-    return;
-  }
-
   dout(10) << " destdn " << *destdn << dendl;
   CDir *destdir = destdn->get_dir();
   ceph_assert(destdir->is_auth());
@@ -9169,12 +9018,6 @@ void Server::handle_client_rename(MDRequestRef& mdr)
   C_MDS_rename_finish *fin = new C_MDS_rename_finish(this, mdr, srcdn, destdn, straydn);
 
   journal_and_reply(mdr, srci, destdn, le, fin);
-
-  // trigger to flush mdlog in case reintegrating or migrating the stray dn,
-  // because the link requests maybe waiting.
-  if (srcdn->get_dir()->inode->is_stray()) {
-    mdlog->flush();
-  }
   mds->balancer->maybe_fragment(destdn->get_dir(), false);
 }
 
@@ -9708,7 +9551,7 @@ void Server::_rename_apply(MDRequestRef& mdr, CDentry *srcdn, CDentry *destdn, C
   // primary+remote link merge?
   bool linkmerge = (srcdnl->get_inode() == oldin);
   if (linkmerge)
-    ceph_assert(srcdnl->is_primary() || destdnl->is_remote());
+    ceph_assert(srcdnl->is_primary() && destdnl->is_remote());
 
   bool new_in_snaprealm = false;
   bool new_oldin_snaprealm = false;
@@ -9785,14 +9628,6 @@ void Server::_rename_apply(MDRequestRef& mdr, CDentry *srcdn, CDentry *destdn, C
 
   srcdn->get_dir()->unlink_inode(srcdn);
 
-  // After the stray dn being unlinked from the corresponding inode in case of
-  // reintegrate_stray/migrate_stray, just wake up the waitiers.
-  MDSContext::vec finished;
-  in->take_waiting(CInode::WAIT_UNLINK, finished);
-  if (!finished.empty()) {
-    mds->queue_waiters(finished);
-  }
-
   // dest
   if (srcdn_was_remote) {
     if (!linkmerge) {
@@ -11372,7 +11207,8 @@ void Server::handle_client_renamesnap(MDRequestRef& mdr)
     return;
   }
 
-  snapid_t snapid = diri->snaprealm->resolve_snapname(srcname, diri->ino());
+  snapid_t  snapid = diri->snaprealm->resolve_snapname(srcname, diri->ino());
+
   dout(10) << " snapname " << srcname << " is " << snapid << dendl;
 
   // lock snap
@@ -11457,6 +11293,159 @@ void Server::_renamesnap_finish(MDRequestRef& mdr, CInode *diri, snapid_t snapid
   respond_to_request(mdr, 0);
 }
 
+void Server::handle_client_readdir_snapdiff(MDRequestRef& mdr)
+{
+  const cref_t<MClientRequest>& req = mdr->client_request;
+  Session* session = mds->get_session(req);
+  MutationImpl::LockOpVec lov;
+  CInode* diri = rdlock_path_pin_ref(mdr, false, true);
+  if (!diri) return;
+
+  // it's a directory, right?
+  if (!diri->is_dir()) {
+    // not a dir
+    dout(10) << "reply to " << *req << " snapdiff -CEPHFS_ENOTDIR" << dendl;
+    respond_to_request(mdr, -CEPHFS_ENOTDIR);
+    return;
+  }
+
+  auto num_caps = session->get_num_caps();
+  auto session_cap_acquisition = session->get_cap_acquisition();
+
+  if (num_caps > static_cast<uint64_t>(max_caps_per_client * max_caps_throttle_ratio) && session_cap_acquisition >= cap_acquisition_throttle) {
+    dout(20) << "snapdiff throttled. max_caps_per_client: " << max_caps_per_client << " num_caps: " << num_caps
+      << " session_cap_acquistion: " << session_cap_acquisition << " cap_acquisition_throttle: " << cap_acquisition_throttle << dendl;
+    if (logger)
+      logger->inc(l_mdss_cap_acquisition_throttle);
+
+    mds->timer.add_event_after(caps_throttle_retry_request_timeout, new C_MDS_RetryRequest(mdcache, mdr));
+    return;
+  }
+
+  lov.add_rdlock(&diri->filelock);
+  lov.add_rdlock(&diri->dirfragtreelock);
+
+  if (!mds->locker->acquire_locks(mdr, lov))
+    return;
+
+  if (!check_access(mdr, diri, MAY_READ))
+    return;
+
+  // which frag?
+  frag_t fg = (__u32)req->head.args.snapdiff.frag;
+  unsigned req_flags = (__u32)req->head.args.snapdiff.flags;
+  string offset_str = req->get_path2();
+
+  __u32 offset_hash = 0;
+  if (!offset_str.empty()) {
+    offset_hash = ceph_frag_value(diri->hash_dentry_name(offset_str));
+  } else {
+    offset_hash = (__u32)req->head.args.snapdiff.offset_hash;
+  }
+
+  dout(10) << " frag " << fg << " offset '" << offset_str << "'"
+    << " offset_hash " << offset_hash << " flags " << req_flags << dendl;
+
+  // does the frag exist?
+  if (diri->dirfragtree[fg.value()] != fg) {
+    frag_t newfg;
+    if (req_flags & CEPH_READDIR_REPLY_BITFLAGS) {
+      if (fg.contains((unsigned)offset_hash)) {
+       newfg = diri->dirfragtree[offset_hash];
+      } else {
+       // client actually wants next frag
+       newfg = diri->dirfragtree[fg.value()];
+      }
+    } else {
+      offset_str.clear();
+      newfg = diri->dirfragtree[fg.value()];
+    }
+    dout(10) << " adjust frag " << fg << " -> " << newfg << " " << diri->dirfragtree << dendl;
+    fg = newfg;
+  }
+
+  CDir* dir = try_open_auth_dirfrag(diri, fg, mdr);
+  if (!dir) return;
+
+  // ok!
+  dout(10) << __func__<< " on " << *dir << dendl;
+  ceph_assert(dir->is_auth());
+
+  if (!dir->is_complete()) {
+    if (dir->is_frozen()) {
+      dout(7) << "dir is frozen " << *dir << dendl;
+      mds->locker->drop_locks(mdr.get());
+      mdr->drop_local_auth_pins();
+      dir->add_waiter(CDir::WAIT_UNFREEZE, new C_MDS_RetryRequest(mdcache, mdr));
+      return;
+    }
+    // fetch
+    dout(10) << " incomplete dir contents for snapdiff on " << *dir << ", fetching" << dendl;
+    dir->fetch(new C_MDS_RetryRequest(mdcache, mdr), true);
+    return;
+  }
+
+#ifdef MDS_VERIFY_FRAGSTAT
+  dir->verify_fragstat();
+#endif
+
+  utime_t now = ceph_clock_now();
+  mdr->set_mds_stamp(now);
+
+  mdr->snapid_diff_other = (uint64_t)req->head.args.snapdiff.snap_other;
+  if (mdr->snapid_diff_other == mdr->snapid ||
+      mdr->snapid == CEPH_NOSNAP ||
+      mdr->snapid_diff_other == CEPH_NOSNAP) {
+    dout(10) << "reply to " << *req << " snapdiff -CEPHFS_EINVAL" << dendl;
+    respond_to_request(mdr, -CEPHFS_EINVAL);
+  }
+
+  dout(10) << __func__
+    << " snap " << mdr->snapid
+    << " vs. snap " << mdr->snapid_diff_other
+    << dendl;
+
+  SnapRealm* realm = diri->find_snaprealm();
+
+  unsigned max = req->head.args.snapdiff.max_entries;
+  if (!max)
+    max = dir->get_num_any();  // whatever, something big.
+  unsigned max_bytes = req->head.args.snapdiff.max_bytes;
+  if (!max_bytes)
+    // make sure at least one item can be encoded
+    max_bytes = (512 << 10) + g_conf()->mds_max_xattr_pairs_size;
+
+  // start final blob
+  bufferlist dirbl;
+  DirStat ds;
+  ds.frag = dir->get_frag();
+  ds.auth = dir->get_dir_auth().first;
+  if (dir->is_auth() && !forward_all_requests_to_auth)
+    dir->get_dist_spec(ds.dist, mds->get_nodeid());
+
+  dir->encode_dirstat(dirbl, mdr->session->info, ds);
+
+  // count bytes available.
+  //  this isn't perfect, but we should capture the main variable/unbounded size items!
+  int front_bytes = dirbl.length() + sizeof(__u32) + sizeof(__u8) * 2;
+  int bytes_left = max_bytes - front_bytes;
+  bytes_left -= get_snap_trace(session, realm).length();
+
+  _readdir_diff(
+    now,
+    mdr,
+    diri,
+    dir,
+    realm,
+    max,
+    bytes_left,
+    offset_str,
+    offset_hash,
+    req_flags,
+    dirbl);
+}
+
+
 /**
  * Return true if server is in state RECONNECT and this
  * client has not yet reconnected.
@@ -11487,3 +11476,265 @@ const bufferlist& Server::get_snap_trace(client_t client, SnapRealm *realm) cons
   Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(client.v));
   return get_snap_trace(session, realm);
 }
+
+void Server::_readdir_diff(
+  utime_t now,
+  MDRequestRef& mdr,
+  CInode* diri,
+  CDir* dir,
+  SnapRealm* realm,
+  unsigned max_entries,
+  int bytes_left,
+  const string& offset_str,
+  uint32_t offset_hash,
+  unsigned req_flags,
+  bufferlist& dirbl)
+{
+  // build dir contents
+  bufferlist dnbl;
+  __u32 numfiles = 0;
+
+  snapid_t snapid = mdr->snapid;
+  snapid_t snapid_prev = mdr->snapid_diff_other;
+  if (snapid < snapid_prev) {
+    std::swap(snapid, snapid_prev);
+  }
+  bool from_the_beginning = !offset_hash && offset_str.empty();
+  // skip all dns < dentry_key_t(snapid, offset_str, offset_hash)
+  dentry_key_t skip_key(snapid_prev, offset_str.c_str(), offset_hash);
+
+  bool end = build_snap_diff(
+    mdr,
+    dir,
+    bytes_left,
+    from_the_beginning ? nullptr : & skip_key,
+    snapid_prev,
+    snapid,
+    dnbl,
+    [&](CDentry* dn, CInode* in, bool exists) {
+      string name;
+      snapid_t effective_snapid;
+      const auto& dn_name = dn->get_name();
+      // provide the first snapid for removed entries and
+      // the last one for existent ones
+      effective_snapid = exists ? snapid : snapid_prev;
+      name.append(dn_name);
+      if ((int)(dnbl.length() + name.length() + sizeof(__u32) + sizeof(LeaseStat)) > bytes_left) {
+       dout(10) << " ran out of room, stopping at " << dnbl.length() << " < " << bytes_left << dendl;
+       return false;
+      }
+
+      auto diri = dir->get_inode();
+      auto hash = ceph_frag_value(diri->hash_dentry_name(dn_name));
+      unsigned start_len = dnbl.length();
+      dout(10) << "inc dn " << *dn << " as " << name
+               << std::hex << " hash 0x" << hash << std::dec
+               << dendl;
+      encode(name, dnbl);
+      mds->locker->issue_client_lease(dn, in, mdr, now, dnbl);
+
+      // inode
+      dout(10) << "inc inode " << *in << " snap "      << effective_snapid << dendl;
+      int r = in->encode_inodestat(dnbl, mdr->session, realm, effective_snapid, bytes_left - (int)dnbl.length());
+      if (r < 0) {
+       // chop off dn->name, lease
+       dout(10) << " ran out of room, stopping at "
+                << start_len << " < " << bytes_left << dendl;
+       bufferlist keep;
+       keep.substr_of(dnbl, 0, start_len);
+       dnbl.swap(keep);
+       return false;
+      }
+
+      // touch dn
+      mdcache->lru.lru_touch(dn);
+      ++numfiles;
+      return true;
+    });
+
+  __u16 flags = 0;
+  if (req_flags & CEPH_READDIR_REPLY_BITFLAGS) {
+    flags |= CEPH_READDIR_HASH_ORDER | CEPH_READDIR_OFFSET_HASH;
+  }
+
+  std::swap(mdr->snapid, mdr->snapid_diff_other); // we want opponent snapid to be used for tracei
+
+  _finalize_readdir(mdr, diri, dir, from_the_beginning, end, flags, numfiles,
+    dirbl, dnbl);
+}
+
+bool Server::build_snap_diff(
+  MDRequestRef& mdr,
+  CDir* dir,
+  int bytes_left,
+  dentry_key_t* skip_key,
+  snapid_t snapid_prev,
+  snapid_t snapid,
+  const bufferlist& dnbl,
+  std::function<bool (CDentry*, CInode*, bool)> add_result_cb)
+{
+  client_t client = mdr->client_request->get_source().num();
+
+  struct EntryInfo {
+    CDentry* dn = nullptr;
+    CInode* in = nullptr;
+    utime_t mtime;
+
+    void reset() {
+      *this = EntryInfo();
+    }
+  } before;
+
+  auto insert_deleted = [&](EntryInfo& ei) {
+    dout(20) << "build_snap_diff deleted file " << ei.dn->get_name() << " "
+      << ei.dn->first << "/" << ei.dn->last << dendl;
+    int r = add_result_cb(ei.dn, ei.in, false);
+    ei.reset();
+    return r;
+  };
+
+  auto it = !skip_key ? dir->begin() : dir->lower_bound(*skip_key);
+
+  while(it != dir->end()) {
+    CDentry* dn = it->second;
+    dout(20) << __func__ << " " << it->first << "->" << *dn << dendl;
+    ++it;
+    if (dn->state_test(CDentry::STATE_PURGING))
+      continue;
+
+    bool dnp = dn->use_projected(client, mdr);
+    CDentry::linkage_t* dnl = dnp ? dn->get_projected_linkage() : dn->get_linkage();
+
+    if (dnl->is_null()) {
+      dout(20) << __func__ << " linkage is null, skipping" << dendl;
+      continue;
+    }
+
+    if (dn->last < snapid_prev || dn->first > snapid) {
+      dout(20) << __func__ << " not in range, skipping" << dendl;
+      continue;
+    }
+    if (skip_key) {
+      skip_key->snapid = dn->last;
+      if (!(*skip_key < dn->key()))
+       continue;
+    }
+
+    CInode* in = dnl->get_inode();
+    if (in && in->ino() == CEPH_INO_CEPH)
+      continue;
+
+    // remote link?
+    // better for the MDS to do the work, if we think the client will stat any of these files.
+    if (dnl->is_remote() && !in) {
+      in = mdcache->get_inode(dnl->get_remote_ino());
+      dout(20) << __func__ << " remote in: " << *in << " ino " << std::hex << dnl->get_remote_ino() << std::dec << dendl;
+      if (in) {
+       dn->link_remote(dnl, in);
+      } else if (dn->state_test(CDentry::STATE_BADREMOTEINO)) {
+       dout(10) << "skipping bad remote ino on " << *dn << dendl;
+       continue;
+      } else {
+       // touch everything i _do_ have
+       for (auto& p : *dir) {
+         if (!p.second->get_linkage()->is_null())
+           mdcache->lru.lru_touch(p.second);
+       }
+
+       // already issued caps and leases, reply immediately.
+       if (dnbl.length() > 0) {
+         mdcache->open_remote_dentry(dn, dnp, new C_MDSInternalNoop);
+         dout(10) << " open remote dentry after caps were issued, stopping at "
+           << dnbl.length() << " < " << bytes_left << dendl;
+       } else {
+         mds->locker->drop_locks(mdr.get());
+         mdr->drop_local_auth_pins();
+         mdcache->open_remote_dentry(dn, dnp, new C_MDS_RetryRequest(mdcache, mdr));
+       }
+       return false;
+      }
+    }
+    ceph_assert(in);
+
+    utime_t mtime = in->get_inode()->mtime;
+
+    if (in->is_dir()) {
+
+      // we need to maintain the order of entries (determined by their name hashes)
+      // hence need to insert the previous entry if any immediately.
+      if (before.dn) {
+       if (!insert_deleted(before)) {
+         break;
+       }
+      }
+
+      bool exists = true;
+      if (snapid_prev < dn->first && dn->last < snapid) {
+       dout(20) << __func__ << " skipping inner " << dn->get_name() << " "
+         << dn->first << "/" << dn->last << dendl;
+       continue;
+      } else if (dn->first <= snapid_prev && dn->last < snapid) {
+       // dir deleted
+       dout(20) << __func__ << " deleted dir " << dn->get_name() << " "
+         << dn->first << "/" << dn->last << dendl;
+       exists = false;
+      }
+      bool r = add_result_cb(dn, in, exists);
+      if (!r) {
+       break;
+      }
+    } else {
+      if (snapid_prev >= dn->first && snapid <= dn->last) {
+       dout(20) << __func__ << " skipping unchanged " << dn->get_name() << " "
+         << dn->first << "/" << dn->last << dendl;
+       continue;
+      } else if (snapid_prev < dn->first && snapid > dn->last) {
+       dout(20) << __func__ << " skipping inner modification " << dn->get_name() << " "
+         << dn->first << "/" << dn->last << dendl;
+       continue;
+      }
+      string_view name_before =
+        before.dn ? string_view(before.dn->get_name()) : string_view();
+      if (before.dn && dn->get_name() != name_before) {
+        if (!insert_deleted(before)) {
+          break;
+        }
+        before.reset();
+      }
+      if (snapid_prev >= dn->first && snapid_prev <= dn->last) {
+       dout(30) << __func__ << " dn_before " << dn->get_name() << " "
+         << dn->first << "/" << dn->last << dendl;
+       before = EntryInfo {dn, in, mtime};
+       continue;
+      } else {
+       if (before.dn && dn->get_name() == name_before) {
+         if (mtime == before.mtime) {
+           dout(30) << __func__ << " timestamp not changed " << dn->get_name() << " "
+             << dn->first << "/" << dn->last
+             << " " << mtime
+             << dendl;
+           before.reset();
+           continue;
+         } else {
+           dout(30) << __func__ << " timestamp changed " << dn->get_name() << " "
+             << dn->first << "/" << dn->last
+             << " " << before.mtime << " vs. " << mtime
+             << dendl;
+           before.reset();
+         }
+       }
+       dout(20) << __func__ << " new file " << dn->get_name() << " "
+         << dn->first << "/" << dn->last
+         << dendl;
+       ceph_assert(snapid >= dn->first && snapid <= dn->last);
+      }
+      if (!add_result_cb(dn, in, true)) {
+       break;
+      }
+    }
+  }
+  if (before.dn) {
+    insert_deleted(before);
+  }
+  return it == dir->end();
+}
index a269d6cb4790512ddeee95e40cfbcfdcdc0281ec..81a5933bab8147b6013f9ca26a7b68b5ce746d6c 100644 (file)
@@ -68,6 +68,7 @@ enum {
   l_mdss_req_readdir_latency,
   l_mdss_req_rename_latency,
   l_mdss_req_renamesnap_latency,
+  l_mdss_req_snapdiff_latency,
   l_mdss_req_rmdir_latency,
   l_mdss_req_rmsnap_latency,
   l_mdss_req_rmxattr_latency,
@@ -158,7 +159,6 @@ public:
 
   // -- requests --
   void handle_client_request(const cref_t<MClientRequest> &m);
-  void handle_client_reply(const cref_t<MClientReply> &m);
 
   void journal_and_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn,
                         LogEvent *le, MDSLogContextBase *fin);
@@ -236,12 +236,6 @@ public:
 
   void handle_client_fsync(MDRequestRef& mdr);
 
-  bool is_unlink_pending(CDentry *dn);
-  void wait_for_pending_unlink(CDentry *dn, MDRequestRef& mdr);
-
-  bool is_reintegrate_pending(CDentry *dn);
-  void wait_for_pending_reintegrate(CDentry *dn, MDRequestRef& mdr);
-
   // open
   void handle_client_open(MDRequestRef& mdr);
   void handle_client_openc(MDRequestRef& mdr);  // O_CREAT variant.
@@ -299,6 +293,7 @@ public:
   void _rmsnap_finish(MDRequestRef& mdr, CInode *diri, snapid_t snapid);
   void handle_client_renamesnap(MDRequestRef& mdr);
   void _renamesnap_finish(MDRequestRef& mdr, CInode *diri, snapid_t snapid);
+  void handle_client_readdir_snapdiff(MDRequestRef& mdr);
 
   // helpers
   bool _rename_prepare_witness(MDRequestRef& mdr, mds_rank_t who, std::set<mds_rank_t> &witnesse,
@@ -480,6 +475,37 @@ private:
   void reply_client_request(MDRequestRef& mdr, const ref_t<MClientReply> &reply);
   void flush_session(Session *session, MDSGatherBuilder& gather);
 
+  void _finalize_readdir(MDRequestRef& mdr,
+                         CInode *diri,
+                         CDir* dir,
+                         bool start,
+                         bool end,
+                         __u16 flags,
+                         __u32 numfiles,
+                         bufferlist& dirbl,
+                         bufferlist& dnbl);
+  void _readdir_diff(
+    utime_t now,
+    MDRequestRef& mdr,
+    CInode* diri,
+    CDir* dir,
+    SnapRealm* realm,
+    unsigned max_entries,
+    int bytes_left,
+    const std::string& offset_str,
+    uint32_t offset_hash,
+    unsigned req_flags,
+    bufferlist& dirbl);
+  bool build_snap_diff(
+    MDRequestRef& mdr,
+    CDir* dir,
+    int bytes_left,
+    dentry_key_t* skip_key,
+    snapid_t snapid_before,
+    snapid_t snapid,
+    const bufferlist& dnbl,
+    std::function<bool(CDentry*, CInode*, bool)> add_result_cb);
+
   MDSRank *mds;
   MDCache *mdcache;
   MDLog *mdlog;
index 2364c973e679370d0d8824a7ec6d5008b40d1a4b..720396338ca703a8264f2a60d0dae74217263aea 100644 (file)
@@ -45,6 +45,11 @@ class SessionMapIOContext : public MDSIOContextBase
 };
 };
 
+SessionMap::SessionMap(MDSRank *m)
+  : mds(m),
+    mds_session_metadata_threshold(g_conf().get_val<Option::size_t>("mds_session_metadata_threshold")) {
+}
+
 void SessionMap::register_perfcounters()
 {
   PerfCountersBuilder plb(g_ceph_context, "mds_sessions",
@@ -66,6 +71,8 @@ void SessionMap::register_perfcounters()
   plb.add_u64(l_mdssm_avg_load, "average_load", "Average Load");
   plb.add_u64(l_mdssm_avg_session_uptime, "avg_session_uptime",
                "Average session uptime");
+  plb.add_u64(l_mdssm_metadata_threshold_sessions_evicted, "mdthresh_evicted",
+             "Sessions evicted on reaching metadata threshold");
 
   logger = plb.create_perf_counters();
   g_ceph_context->get_perfcounters_collection()->add(logger);
@@ -375,6 +382,11 @@ public:
 };
 }
 
+bool SessionMap::validate_and_encode_session(MDSRank *mds, Session *session, bufferlist& bl) {
+  session->info.encode(bl, mds->mdsmap->get_up_features());
+  return bl.length() < mds_session_metadata_threshold;
+}
+
 void SessionMap::save(MDSContext *onsave, version_t needv)
 {
   dout(10) << __func__ << ": needv " << needv << ", v " << version << dendl;
@@ -410,6 +422,7 @@ void SessionMap::save(MDSContext *onsave, version_t needv)
 
   dout(20) << " updating keys:" << dendl;
   map<string, bufferlist> to_set;
+  std::set<entity_name_t> to_blocklist;
   for(std::set<entity_name_t>::iterator i = dirty_sessions.begin();
       i != dirty_sessions.end(); ++i) {
     const entity_name_t name = *i;
@@ -420,13 +433,19 @@ void SessionMap::save(MDSContext *onsave, version_t needv)
        session->is_stale() ||
        session->is_killing()) {
       dout(20) << "  " << name << dendl;
-      // Serialize K
-      CachedStackStringStream css;
-      *css << name;
 
       // Serialize V
       bufferlist bl;
-      session->info.encode(bl, mds->mdsmap->get_up_features());
+      if (!validate_and_encode_session(mds, session, bl)) {
+       derr << __func__ << ": session (" << name << ") exceeds"
+            << " sesion metadata threshold - blocklisting" << dendl;
+       to_blocklist.emplace(name);
+       continue;
+      }
+
+      // Serialize K
+      CachedStackStringStream css;
+      *css << name;
 
       // Add to RADOS op
       to_set[std::string(css->strv())] = bl;
@@ -461,6 +480,8 @@ void SessionMap::save(MDSContext *onsave, version_t needv)
                        0,
                        new C_OnFinisher(new C_IO_SM_Save(this, version),
                                         mds->finisher));
+  apply_blocklist(to_blocklist);
+  logger->inc(l_mdssm_metadata_threshold_sessions_evicted, to_blocklist.size());
 }
 
 void SessionMap::_save_finish(version_t v)
@@ -823,7 +844,8 @@ void SessionMap::save_if_dirty(const std::set<entity_name_t> &tgt_sessions,
 {
   ceph_assert(gather_bld != NULL);
 
-  std::vector<entity_name_t> write_sessions;
+  std::set<entity_name_t> to_blocklist;
+  std::map<entity_name_t, bufferlist> write_sessions;
 
   // Decide which sessions require a write
   for (std::set<entity_name_t>::iterator i = tgt_sessions.begin();
@@ -848,13 +870,24 @@ void SessionMap::save_if_dirty(const std::set<entity_name_t> &tgt_sessions,
       // need to pre-empt that.
       continue;
     }
+
+    // Serialize V
+    bufferlist bl;
+    if (!validate_and_encode_session(mds, session, bl)) {
+      derr << __func__ << ": session (" << session_id << ") exceeds"
+          << " sesion metadata threshold - blocklisting" << dendl;
+      to_blocklist.emplace(session_id);
+      continue;
+    }
+
     // Okay, passed all our checks, now we write
     // this session out.  The version we write
     // into the OMAP may now be higher-versioned
     // than the version in the header, but that's
     // okay because it's never a problem to have
     // an overly-fresh copy of a session.
-    write_sessions.push_back(*i);
+    write_sessions.emplace(session_id, std::move(bl));
+    session->clear_dirty_completed_requests();
   }
 
   dout(4) << __func__ << ": writing " << write_sessions.size() << dendl;
@@ -862,21 +895,15 @@ void SessionMap::save_if_dirty(const std::set<entity_name_t> &tgt_sessions,
   // Batch writes into mds_sessionmap_keys_per_op
   const uint32_t kpo = g_conf()->mds_sessionmap_keys_per_op;
   map<string, bufferlist> to_set;
-  for (uint32_t i = 0; i < write_sessions.size(); ++i) {
-    const entity_name_t &session_id = write_sessions[i];
-    Session *session = session_map[session_id];
-    session->clear_dirty_completed_requests();
 
+  uint32_t i = 0;
+  for (auto &[session_id, bl] : write_sessions) {
     // Serialize K
     CachedStackStringStream css;
     *css << session_id;
 
-    // Serialize V
-    bufferlist bl;
-    session->info.encode(bl, mds->mdsmap->get_up_features());
-
     // Add to RADOS op
-    to_set[css->str()] = bl;
+    to_set[css->str()] = std::move(bl);
 
     // Complete this write transaction?
     if (i == write_sessions.size() - 1
@@ -895,7 +922,11 @@ void SessionMap::save_if_dirty(const std::set<entity_name_t> &tgt_sessions,
                              new C_IO_SM_Save_One(this, on_safe),
                              mds->finisher));
     }
+    ++i;
   }
+
+  apply_blocklist(to_blocklist);
+  logger->inc(l_mdssm_metadata_threshold_sessions_evicted, to_blocklist.size());
 }
 
 // =================
@@ -1109,6 +1140,10 @@ void SessionMap::handle_conf_change(const std::set<std::string>& changed)
     };
     apply_to_open_sessions(mut);
   }
+
+  if (changed.count("mds_session_metadata_threshold")) {
+    mds_session_metadata_threshold = g_conf().get_val<Option::size_t>("mds_session_metadata_threshold");
+  }
 }
 
 void SessionMap::update_average_session_age() {
@@ -1120,6 +1155,20 @@ void SessionMap::update_average_session_age() {
   logger->set(l_mdssm_avg_session_uptime, (uint64_t)avg_uptime);
 }
 
+void SessionMap::apply_blocklist(const std::set<entity_name_t>& victims) {
+  if (victims.empty()) {
+    return;
+  }
+
+  C_GatherBuilder gather(g_ceph_context, new C_MDSInternalNoop);
+  for (auto &victim : victims) {
+    CachedStackStringStream css;
+    mds->evict_client(victim.num(), false, g_conf()->mds_session_blocklist_on_evict, *css,
+                     gather.new_sub());
+  }
+  gather.activate();
+}
+
 int SessionFilter::parse(
     const std::vector<std::string> &args,
     std::ostream *ss)
index e59f7f26484501083d98d76ea31e5415c75feb25..ddf227be9d1155f27f35c999536d32ce871cb634 100644 (file)
@@ -45,6 +45,7 @@ enum {
   l_mdssm_total_load,
   l_mdssm_avg_load,
   l_mdssm_avg_session_uptime,
+  l_mdssm_metadata_threshold_sessions_evicted,
   l_mdssm_last,
 };
 
@@ -589,7 +590,7 @@ protected:
 class SessionMap : public SessionMapStore {
 public:
   SessionMap() = delete;
-  explicit SessionMap(MDSRank *m) : mds(m) {}
+  explicit SessionMap(MDSRank *m);
 
   ~SessionMap() override
   {
@@ -838,6 +839,11 @@ private:
   }
 
   time avg_birth_time = clock::zero();
+
+  size_t mds_session_metadata_threshold;
+
+  bool validate_and_encode_session(MDSRank *mds, Session *session, bufferlist& bl);
+  void apply_blocklist(const std::set<entity_name_t>& victims);
 };
 
 std::ostream& operator<<(std::ostream &out, const Session &s);
index 76448ee9db2a8cbbc37d80f4a1e44805ab2eef7a..b23915f945219bbbe17c278ffb108547df301cd7 100644 (file)
@@ -31,13 +31,14 @@ void SimpleLock::dump(ceph::Formatter *f) const {
   f->close_section();
 
   f->dump_string("state", get_state_name(get_state()));
+  f->dump_string("type", get_lock_type_name(get_type()));
   f->dump_bool("is_leased", is_leased());
   f->dump_int("num_rdlocks", get_num_rdlocks());
   f->dump_int("num_wrlocks", get_num_wrlocks());
   f->dump_int("num_xlocks", get_num_xlocks());
   f->open_object_section("xlock_by");
-  if (get_xlock_by()) {
-    get_xlock_by()->dump(f);
+  if (auto mut = get_xlock_by(); mut) {
+    f->dump_object("reqid", mut->reqid);
   }
   f->close_section();
 }
index 725c4488c17f0a8fb7eafb965decc36da7bf999c..2a7a5fc806e7476f294cf1b6fb1caa929e605ceb 100644 (file)
@@ -417,6 +417,7 @@ public:
     ceph_assert(state == LOCK_XLOCK || state == LOCK_XLOCKDONE ||
           state == LOCK_XLOCKSNAP || state == LOCK_LOCK_XLOCK ||
           state == LOCK_LOCK  || /* if we are a leader of a peer */
+          state == LOCK_PREXLOCK || state == LOCK_SYNC ||
           is_locallock());
     --more()->num_xlock;
     parent->put(MDSCacheObject::PIN_LOCK);
index c7a7d75bc242d0608731bdb1c04e83fa0f26641e..9d303bcb03ae8946fcb8c6d9fc30e7dec71b5b4c 100644 (file)
@@ -255,7 +255,7 @@ snapid_t SnapRealm::resolve_snapname(std::string_view n, inodeno_t atino, snapid
     //if (num && p->second.snapid == num)
     //return p->first;
     if (actual && p->second.name == n)
-       return p->first;
+      return p->first;
     if (!actual && p->second.name == pname && p->second.ino == pino)
       return p->first;
   }
index aa4c95e79e1c30d969646b9b3965b76ddf461b54..d288ce6617e7bb11a5d382012a318da2f4995e47 100644 (file)
@@ -20,6 +20,7 @@
 #include "mds/MDLog.h"
 #include "mds/CDir.h"
 #include "mds/CDentry.h"
+#include "mds/ScrubStack.h"
 #include "events/EUpdate.h"
 #include "messages/MClientRequest.h"
 
@@ -281,17 +282,6 @@ void StrayManager::_purge_stray_logged(CDentry *dn, version_t pdv, MutationRef&
     dir->remove_dentry(dn);
   }
 
-  // Once we are here normally the waiter list are mostly empty
-  // but in corner case that the clients pass a invalidate ino,
-  // which maybe under unlinking, the link caller will add the
-  // request to the waiter list. We need try to wake them up
-  // anyway.
-  MDSContext::vec finished;
-  in->take_waiting(CInode::WAIT_UNLINK, finished);
-  if (!finished.empty()) {
-    mds->queue_waiters(finished);
-  }
-
   // drop inode
   inodeno_t ino = in->ino();
   if (in->is_dirty())
@@ -311,6 +301,11 @@ void StrayManager::enqueue(CDentry *dn, bool trunc)
   CInode *in = dnl->get_inode();
   ceph_assert(in);
 
+  //remove inode from scrub stack if it is being purged
+  if(mds->scrubstack->remove_inode_if_stacked(in)) {
+    dout(20) << "removed " << *in << " from the scrub stack" << dendl;
+  }
+
   /* We consider a stray to be purging as soon as it is enqueued, to avoid
    * enqueing it twice */
   dn->state_set(CDentry::STATE_PURGING);
@@ -681,27 +676,19 @@ void StrayManager::reintegrate_stray(CDentry *straydn, CDentry *rdn)
   dout(10) << __func__ << " " << *straydn << " to " << *rdn << dendl;
 
   logger->inc(l_mdc_strays_reintegrated);
-
+  
   // rename it to remote linkage .
   filepath src(straydn->get_name(), straydn->get_dir()->ino());
   filepath dst(rdn->get_name(), rdn->get_dir()->ino());
 
-  ceph_tid_t tid = mds->issue_tid();
-
   auto req = make_message<MClientRequest>(CEPH_MDS_OP_RENAME);
   req->set_filepath(dst);
   req->set_filepath2(src);
-  req->set_tid(tid);
-
-  rdn->state_set(CDentry::STATE_REINTEGRATING);
-  mds->internal_client_requests.emplace(std::piecewise_construct,
-                                        std::make_tuple(tid),
-                                        std::make_tuple(CEPH_MDS_OP_RENAME,
-                                                        rdn, tid));
+  req->set_tid(mds->issue_tid());
 
   mds->send_message_mds(req, rdn->authority().first);
 }
-
 void StrayManager::migrate_stray(CDentry *dn, mds_rank_t to)
 {
   dout(10) << __func__ << " " << *dn << " to mds." << to << dendl;
@@ -715,17 +702,10 @@ void StrayManager::migrate_stray(CDentry *dn, mds_rank_t to)
   filepath src(dn->get_name(), dirino);
   filepath dst(dn->get_name(), MDS_INO_STRAY(to, MDS_INO_STRAY_INDEX(dirino)));
 
-  ceph_tid_t tid = mds->issue_tid();
-
   auto req = make_message<MClientRequest>(CEPH_MDS_OP_RENAME);
   req->set_filepath(dst);
   req->set_filepath2(src);
-  req->set_tid(tid);
-
-  mds->internal_client_requests.emplace(std::piecewise_construct,
-                                        std::make_tuple(tid),
-                                        std::make_tuple(CEPH_MDS_OP_RENAME,
-                                                        nullptr, tid));
+  req->set_tid(mds->issue_tid());
 
   mds->send_message_mds(req, to);
 }
index a19ff80ac727e61598f983d6cf74f97f23bb127c..4a864076b9de3e132d0e8a49730efa1ef3f31843 100644 (file)
@@ -29,6 +29,7 @@ static const std::array feature_names
   "op_getvxattr",
   "32bits_retry_fwd",
   "new_snaprealm_info",
+  "has_owner_uidgid",
 };
 static_assert(feature_names.size() == CEPHFS_FEATURE_MAX + 1);
 
index 9c16388ecd2880b2e97eae0440fdb3bbc8f680e7..7d215e2a3e5aeaaf48c24f265e4c77de9aa3b474 100644 (file)
@@ -47,7 +47,8 @@ namespace ceph {
 #define CEPHFS_FEATURE_OP_GETVXATTR         17
 #define CEPHFS_FEATURE_32BITS_RETRY_FWD     18
 #define CEPHFS_FEATURE_NEW_SNAPREALM_INFO   19
-#define CEPHFS_FEATURE_MAX                  19
+#define CEPHFS_FEATURE_HAS_OWNER_UIDGID     20
+#define CEPHFS_FEATURE_MAX                  20
 
 #define CEPHFS_FEATURES_ALL {          \
   0, 1, 2, 3, 4,                       \
@@ -67,7 +68,8 @@ namespace ceph {
   CEPHFS_FEATURE_NOTIFY_SESSION_STATE,  \
   CEPHFS_FEATURE_OP_GETVXATTR,          \
   CEPHFS_FEATURE_32BITS_RETRY_FWD,      \
-  CEPHFS_FEATURE_NEW_SNAPREALM_INFO     \
+  CEPHFS_FEATURE_NEW_SNAPREALM_INFO,    \
+  CEPHFS_FEATURE_HAS_OWNER_UIDGID,      \
 }
 
 #define CEPHFS_METRIC_FEATURES_ALL {           \
index a914b9f3015dbc04a6157f0aff8de1a22b83a601..044c33459606f3b0f4e1fd175925cb12ba01af38 100644 (file)
@@ -771,6 +771,10 @@ void mds_table_pending_t::generate_test_instances(std::list<mds_table_pending_t*
   ls.back()->tid = 35434;
 }
 
+void metareqid_t::dump(ceph::Formatter* f) const {
+  f->dump_object("entity", name);
+  f->dump_unsigned("tid", tid);
+}
 
 /*
  * inode_load_vec_t
index 66ad7944dd76630c49c19554b5e50fe65273b5f5..3381d44c95f150b7c87094e00581261ce7075c1b 100644 (file)
@@ -621,6 +621,7 @@ struct metareqid_t {
     decode(name, p);
     decode(tid, p);
   }
+  void dump(ceph::Formatter *f) const;
 
   entity_name_t name;
   uint64_t tid = 0;
index d8cec31531a9640e567361eac571307da9f62fa8..f63657d2e2537f573d5b716a6a70c4702c6cc03b 100644 (file)
@@ -38,6 +38,7 @@
 #include "include/filepath.h"
 #include "mds/mdstypes.h"
 #include "include/ceph_features.h"
+#include "mds/cephfs_features.h"
 #include "messages/MMDSOp.h"
 
 #include <sys/types.h>
@@ -73,7 +74,7 @@ private:
 public:
   mutable struct ceph_mds_request_head head; /* XXX HACK! */
   utime_t stamp;
-  bool peer_old_version = false;
+  feature_bitset_t mds_features;
 
   struct Release {
     mutable ceph_mds_request_release item;
@@ -113,12 +114,16 @@ protected:
   MClientRequest()
     : MMDSOp(CEPH_MSG_CLIENT_REQUEST, HEAD_VERSION, COMPAT_VERSION) {
     memset(&head, 0, sizeof(head));
+    head.owner_uid = -1;
+    head.owner_gid = -1;
   }
-  MClientRequest(int op, bool over=true)
+  MClientRequest(int op, feature_bitset_t features = 0)
     : MMDSOp(CEPH_MSG_CLIENT_REQUEST, HEAD_VERSION, COMPAT_VERSION) {
     memset(&head, 0, sizeof(head));
     head.op = op;
-    peer_old_version = over;
+    mds_features = features;
+    head.owner_uid = -1;
+    head.owner_gid = -1;
   }
   ~MClientRequest() final {}
 
@@ -201,6 +206,8 @@ public:
   int get_op() const { return head.op; }
   unsigned get_caller_uid() const { return head.caller_uid; }
   unsigned get_caller_gid() const { return head.caller_gid; }
+  unsigned get_owner_uid() const { return head.owner_uid; }
+  unsigned get_owner_gid() const { return head.owner_gid; }
   const std::vector<uint64_t>& get_caller_gid_list() const { return gid_list; }
 
   const std::string& get_path() const { return path.get_path(); }
@@ -227,6 +234,12 @@ public:
       copy_from_legacy_head(&head, &old_mds_head);
       head.version = 0;
 
+      head.ext_num_retry = head.num_retry;
+      head.ext_num_fwd = head.num_fwd;
+
+      head.owner_uid = head.caller_uid;
+      head.owner_gid = head.caller_gid;
+
       /* Can't set the btime from legacy struct */
       if (head.op == CEPH_MDS_OP_SETATTR) {
        int localmask = head.args.setattr.mask;
@@ -262,14 +275,16 @@ public:
      * client will just copy the 'head' memory and isn't
      * that smart to skip them.
      */
-    if (peer_old_version) {
+    if (!mds_features.test(CEPHFS_FEATURE_32BITS_RETRY_FWD)) {
       head.version = 1;
+    } else if (!mds_features.test(CEPHFS_FEATURE_HAS_OWNER_UIDGID)) {
+      head.version = 2;
     } else {
       head.version = CEPH_MDS_REQUEST_HEAD_VERSION;
     }
 
     if (features & CEPH_FEATURE_FS_BTIME) {
-      encode(head, payload, peer_old_version);
+      encode(head, payload);
     } else {
       struct ceph_mds_request_head_legacy old_mds_head;
 
@@ -292,6 +307,10 @@ public:
     out << "client_request(" << get_orig_source()
        << ":" << get_tid()
        << " " << ceph_mds_op_name(get_op());
+    if (IS_CEPH_MDS_OP_NEWINODE(head.op)) {
+      out << " owner_uid=" << head.owner_uid
+         << ", owner_gid=" << head.owner_gid;
+    }
     if (head.op == CEPH_MDS_OP_GETATTR)
       out << " " << ccap_string(head.args.getattr.mask);
     if (head.op == CEPH_MDS_OP_SETATTR) {
index fc52284416659ae4075084d18edeb24b26e16835..210fa033c5219219616129d053795862df0b5768 100644 (file)
 
 class MDentryUnlink final : public MMDSOp {
 private:
-  static constexpr int HEAD_VERSION = 2;
+  static constexpr int HEAD_VERSION = 1;
   static constexpr int COMPAT_VERSION = 1;
-
+  
   dirfrag_t dirfrag;
   std::string dn;
-  bool unlinking = false;
 
  public:
   dirfrag_t get_dirfrag() const { return dirfrag; }
   const std::string& get_dn() const { return dn; }
-  bool is_unlinking() const { return unlinking; }
 
   ceph::buffer::list straybl;
   ceph::buffer::list snapbl;
@@ -40,9 +38,10 @@ private:
 protected:
   MDentryUnlink() :
     MMDSOp(MSG_MDS_DENTRYUNLINK, HEAD_VERSION, COMPAT_VERSION) { }
-  MDentryUnlink(dirfrag_t df, std::string_view n, bool u=false) :
+  MDentryUnlink(dirfrag_t df, std::string_view n) :
     MMDSOp(MSG_MDS_DENTRYUNLINK, HEAD_VERSION, COMPAT_VERSION),
-    dirfrag(df), dn(n), unlinking(u) {}
+    dirfrag(df),
+    dn(n) {}
   ~MDentryUnlink() final {}
 
 public:
@@ -50,66 +49,19 @@ public:
   void print(std::ostream& o) const override {
     o << "dentry_unlink(" << dirfrag << " " << dn << ")";
   }
-
+  
   void decode_payload() override {
     using ceph::decode;
     auto p = payload.cbegin();
     decode(dirfrag, p);
     decode(dn, p);
     decode(straybl, p);
-    if (header.version >= 2)
-      decode(unlinking, p);
   }
   void encode_payload(uint64_t features) override {
     using ceph::encode;
     encode(dirfrag, payload);
     encode(dn, payload);
     encode(straybl, payload);
-    encode(unlinking, payload);
-  }
-private:
-  template<class T, typename... Args>
-  friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);
-  template<class T, typename... Args>
-  friend MURef<T> crimson::make_message(Args&&... args);
-};
-
-class MDentryUnlinkAck final : public MMDSOp {
-private:
-  static constexpr int HEAD_VERSION = 1;
-  static constexpr int COMPAT_VERSION = 1;
-
-  dirfrag_t dirfrag;
-  std::string dn;
-
- public:
-  dirfrag_t get_dirfrag() const { return dirfrag; }
-  const std::string& get_dn() const { return dn; }
-
-protected:
-  MDentryUnlinkAck() :
-    MMDSOp(MSG_MDS_DENTRYUNLINK_ACK, HEAD_VERSION, COMPAT_VERSION) { }
-  MDentryUnlinkAck(dirfrag_t df, std::string_view n) :
-    MMDSOp(MSG_MDS_DENTRYUNLINK_ACK, HEAD_VERSION, COMPAT_VERSION),
-    dirfrag(df), dn(n) {}
-  ~MDentryUnlinkAck() final {}
-
-public:
-  std::string_view get_type_name() const override { return "dentry_unlink_ack";}
-  void print(std::ostream& o) const override {
-    o << "dentry_unlink_ack(" << dirfrag << " " << dn << ")";
-  }
-
-  void decode_payload() override {
-    using ceph::decode;
-    auto p = payload.cbegin();
-    decode(dirfrag, p);
-    decode(dn, p);
-  }
-  void encode_payload(uint64_t features) override {
-    using ceph::encode;
-    encode(dirfrag, payload);
-    encode(dn, payload);
   }
 private:
   template<class T, typename... Args>
index c007509f92f1711bc303de240a2757725778fafc..45038e734afcf90c15c0e54e01757ddb4aeef7b7 100644 (file)
@@ -1511,13 +1511,13 @@ void ActivePyModules::cluster_log(const std::string &channel, clog_type prio,
   cl->do_log(prio, message);
 }
 
-void ActivePyModules::register_client(std::string_view name, std::string addrs)
+void ActivePyModules::register_client(std::string_view name, std::string addrs, bool replace)
 {
   entity_addrvec_t addrv;
   addrv.parse(addrs.data());
 
-  dout(7) << "registering msgr client handle " << addrv << dendl;
-  py_module_registry.register_client(name, std::move(addrv));
+  dout(7) << "registering msgr client handle " << addrv << " (replace=" << replace << ")" << dendl;
+  py_module_registry.register_client(name, std::move(addrv), replace);
 }
 
 void ActivePyModules::unregister_client(std::string_view name, std::string addrs)
index 4b180942dde0c9e4a81650b62f1d2d0223b5872d..283f96a6ed95943edc3e84ad3cd31240d7d151c6 100644 (file)
@@ -158,7 +158,7 @@ public:
   void clear_all_progress_events();
   void get_progress_events(std::map<std::string,ProgressEvent>* events);
 
-  void register_client(std::string_view name, std::string addrs);
+  void register_client(std::string_view name, std::string addrs, bool replace);
   void unregister_client(std::string_view name, std::string addrs);
 
   void config_notify();
index 4fb5b250b98b9cc79c404a8a27a454fae10f606a..ab64ac39fbedb1c1f0cbd379c91fd68b015a784b 100644 (file)
@@ -1388,12 +1388,15 @@ ceph_is_authorized(BaseMgrModule *self, PyObject *args)
 static PyObject*
 ceph_register_client(BaseMgrModule *self, PyObject *args)
 {
-  char *addrs = nullptr;
-  if (!PyArg_ParseTuple(args, "s:ceph_register_client", &addrs)) {
+  const char* _name = nullptr;
+  char* addrs = nullptr;
+  int replace = 0;
+  if (!PyArg_ParseTuple(args, "zsp:ceph_register_client", &_name, &addrs, &replace)) {
     return nullptr;
   }
+  auto name = _name ? std::string(_name) : std::string(self->this_module->get_name());
   without_gil([&] {
-    self->py_modules->register_client(self->this_module->get_name(), addrs);
+    self->py_modules->register_client(name, addrs, replace);
   });
   Py_RETURN_NONE;
 }
@@ -1401,12 +1404,14 @@ ceph_register_client(BaseMgrModule *self, PyObject *args)
 static PyObject*
 ceph_unregister_client(BaseMgrModule *self, PyObject *args)
 {
-  char *addrs = nullptr;
-  if (!PyArg_ParseTuple(args, "s:ceph_unregister_client", &addrs)) {
+  const char* _name = nullptr;
+  char* addrs = nullptr;
+  if (!PyArg_ParseTuple(args, "zs:ceph_unregister_client", &_name, &addrs)) {
     return nullptr;
   }
+  auto name = _name ? std::string(_name) : std::string(self->this_module->get_name());
   without_gil([&] {
-    self->py_modules->unregister_client(self->this_module->get_name(), addrs);
+    self->py_modules->unregister_client(name, addrs);
   });
   Py_RETURN_NONE;
 }
index 46c475394644fcb9051f1e2a557ef9e624620507..0e9e6be2a959f940d33f4bdf3387e93d125fe9f9 100644 (file)
@@ -179,7 +179,7 @@ entity_addrvec_t DaemonServer::get_myaddrs() const
   return msgr->get_myaddrs();
 }
 
-int DaemonServer::ms_handle_authentication(Connection *con)
+int DaemonServer::ms_handle_fast_authentication(Connection *con)
 {
   auto s = ceph::make_ref<MgrSession>(cct);
   con->set_priv(s);
@@ -214,16 +214,19 @@ int DaemonServer::ms_handle_authentication(Connection *con)
     dout(10) << " session " << s << " " << s->entity_name
              << " has caps " << s->caps << " '" << str << "'" << dendl;
   }
+  return 1;
+}
 
+void DaemonServer::ms_handle_accept(Connection* con)
+{
   if (con->get_peer_type() == CEPH_ENTITY_TYPE_OSD) {
+    auto s = ceph::ref_cast<MgrSession>(con->get_priv());
     std::lock_guard l(lock);
     s->osd_id = atoi(s->entity_name.get_id().c_str());
     dout(10) << "registering osd." << s->osd_id << " session "
             << s << " con " << con << dendl;
     osd_cons[s->osd_id].insert(con);
   }
-
-  return 1;
 }
 
 bool DaemonServer::ms_handle_reset(Connection *con)
index ff98356807ad976c03ca28d3a0f5927bad83b423..a7b6456100439ec3f8d20058a9c34ee59fc6589d 100644 (file)
@@ -269,7 +269,8 @@ public:
   ~DaemonServer() override;
 
   bool ms_dispatch2(const ceph::ref_t<Message>& m) override;
-  int ms_handle_authentication(Connection *con) override;
+  int ms_handle_fast_authentication(Connection *con) override;
+  void ms_handle_accept(Connection *con) override;
   bool ms_handle_reset(Connection *con) override;
   void ms_handle_remote_reset(Connection *con) override {}
   bool ms_handle_refused(Connection *con) override;
index 7dc158fe152e08b1dec134836e675c791146ae2c..cb988cf761cc20e7f5b4f9b00fa546f8f1d25fa1 100644 (file)
@@ -388,7 +388,7 @@ void Mgr::init()
     entity_addrvec_t addrv;
     addrv.parse(ident);
     ident = (char*)realloc(ident, 0);
-    py_module_registry->register_client("libcephsqlite", addrv);
+    py_module_registry->register_client("libcephsqlite", addrv, true);
   }
 #endif
 
index 6253d267034335267af3530d227ffc0012968832..6250ea3b9f18ea0d0ddcae2fc4d0c3514e18e323 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "MgrClient.h"
 
+#include "common/perf_counters_key.h"
 #include "mgr/MgrContext.h"
 #include "mon/MonMap.h"
 
@@ -331,6 +332,12 @@ void MgrClient::_send_report()
         const PerfCounters::perf_counter_data_any_d &ctr,
         const PerfCounters &perf_counters)
     {
+      // FIXME: We don't send labeled perf counters to the mgr currently.
+      auto labels = ceph::perf_counters::key_labels(perf_counters.get_name());
+      if (labels.begin() != labels.end()) {
+        return false;
+      }
+
       return perf_counters.get_adjusted_priority(ctr.prio) >= (int)stats_threshold;
     };
 
@@ -367,20 +374,20 @@ void MgrClient::_send_report()
       }
 
       if (session->declared.count(path) == 0) {
-       ldout(cct,20) << " declare " << path << dendl;
-       PerfCounterType type;
-       type.path = path;
-       if (data.description) {
-         type.description = data.description;
-       }
-       if (data.nick) {
-         type.nick = data.nick;
-       }
-       type.type = data.type;
-       type.priority = perf_counters.get_adjusted_priority(data.prio);
-       type.unit = data.unit;
-       report->declare_types.push_back(std::move(type));
-       session->declared.insert(path);
+        ldout(cct, 20) << " declare " << path << dendl;
+        PerfCounterType type;
+        type.path = path;
+        if (data.description) {
+          type.description = data.description;
+        }
+        if (data.nick) {
+          type.nick = data.nick;
+        }
+        type.type = data.type;
+        type.priority = perf_counters.get_adjusted_priority(data.prio);
+        type.unit = data.unit;
+        report->declare_types.push_back(std::move(type));
+        session->declared.insert(path);
       }
 
       encode(static_cast<uint64_t>(data.u64), report->packed);
index 8e58f6e9a84ab99aa55592a7d3fe473af1aa3868..6a7f3e98255521d6e52b9cbcc3f8c7e2814746b7 100644 (file)
@@ -37,6 +37,11 @@ void PyFormatter::open_object_section(std::string_view name)
   cursor = dict;
 }
 
+void PyFormatter::dump_null(std::string_view name)
+{
+  dump_pyobject(name, Py_None);
+}
+
 void PyFormatter::dump_unsigned(std::string_view name, uint64_t u)
 {
   PyObject *p = PyLong_FromUnsignedLong(u);
index 5e4c0a679ac34ce427ffff31319aff7d21d3cc34..b45fbf162e0b02cd5881ddb3905b7857e84703e9 100644 (file)
@@ -87,6 +87,7 @@ public:
     stack.pop();
   }
   void dump_bool(std::string_view name, bool b) override;
+  void dump_null(std::string_view name) override;
   void dump_unsigned(std::string_view name, uint64_t u) override;
   void dump_int(std::string_view name, int64_t u) override;
   void dump_float(std::string_view name, double d) override;
index e16b2830d910e8cbcf757a1bf443b7a6e49c090b..9af9abb57625f047f81f6fed0ca76810948f2983 100644 (file)
@@ -202,10 +202,14 @@ public:
     return active_modules->get_services();
   }
 
-  void register_client(std::string_view name, entity_addrvec_t addrs)
+  void register_client(std::string_view name, entity_addrvec_t addrs, bool replace)
   {
     std::lock_guard l(lock);
-    clients.emplace(std::string(name), std::move(addrs));
+    auto n = std::string(name);
+    if (replace) {
+      clients.erase(n);
+    }
+    clients.emplace(n, std::move(addrs));
   }
   void unregister_client(std::string_view name, const entity_addrvec_t& addrs)
   {
index 840ca38fcc4d6fa9a3c61e77965c631bedec743b..395ff4926189971ad7b4d9487bd6ed582dcc102d 100644 (file)
@@ -827,7 +827,7 @@ bool AuthMonitor::prep_auth(MonOpRequestRef op, bool paxos_writable)
     }
     if (ret > 0) {
       if (!s->authenticated &&
-         mon.ms_handle_authentication(s->con.get()) > 0) {
+         mon.ms_handle_fast_authentication(s->con.get()) > 0) {
        finished = true;
       }
       ret = 0;
@@ -1355,7 +1355,7 @@ bool AuthMonitor::valid_caps(
     }
   } else if (type == "mds") {
     MDSAuthCaps mdscap;
-    if (!mdscap.parse(g_ceph_context, caps, out)) {
+    if (!mdscap.parse(caps, out)) {
       return false;
     }
   } else {
index 471aebf6dd6ba6360774bcff3abd2d2415336eba..e24ccbc1803d1abfce0886bd025f48608e469b43 100644 (file)
@@ -920,6 +920,7 @@ bool ConfigMonitor::refresh_config(MonSession *s)
 
   string device_class;
   if (s->name.is_osd()) {
+    osdmap.crush->get_full_location(s->entity_name.to_str(), &crush_location);
     const char *c = osdmap.crush->get_item_class(s->name.num());
     if (c) {
       device_class = c;
index e22a85bed56f8bddb17351d3f64356c1255f7b66..0c1b30c417c5eb462e37d9975d9d061727aec604 100644 (file)
@@ -398,7 +398,8 @@ void ElectionLogic::propose_connectivity_handler(int from, epoch_t mepoch,
   ldout(cct, 10) << "propose from rank=" << from << ",from_score=" << from_score
                 << "; my score=" << my_score
                 << "; currently acked " << leader_acked
-                << ",leader_score=" << leader_score << dendl;
+                << ",leader_score=" << leader_score
+     << ",disallowed_leaders=" << elector->get_disallowed_leaders() << dendl;
 
   bool my_win = (my_score >= 0) && // My score is non-zero; I am allowed to lead
     ((my_rank < from && my_score >= from_score) || // We have same scores and I have lower rank, or
index b7cf506fc2666eaa1340217916da4f6763564043..65d2c356b687bee4cadd2ae2b5a87b115500579c 100644 (file)
@@ -1660,6 +1660,14 @@ int FileSystemCommandHandler::_check_pool(
     return -EINVAL;
   }
 
+  if (type != POOL_METADATA && pool->pg_autoscale_mode == pg_pool_t::pg_autoscale_mode_t::ON && !pool->has_flag(pg_pool_t::FLAG_BULK)) {
+    // TODO: consider issuing an info event in this case
+    *ss << "  Pool '" << pool_name << "' (id '" << pool_id
+       << "') has pg autoscale mode 'on' but is not marked as bulk." << std::endl
+       << "  Consider setting the flag by running" << std::endl
+       << "    # ceph osd pool set " << pool_name << " bulk true" << std::endl;
+  }
+
   // Nothing special about this pool, so it is permissible
   return 0;
 }
index 091206a684a9194b78a93d90febeaa57a24f647d..4b27d828c89678bab50d056c409ea85c399a1fcd 100644 (file)
@@ -804,6 +804,7 @@ bool MDSMonitor::prepare_beacon(MonOpRequestRef op)
         last_beacon.erase(followergid);
       }
       request_proposal(mon.osdmon());
+      force_immediate_propose();
       pending.damaged(rankgid, blocklist_epoch);
       last_beacon.erase(rankgid);
 
@@ -1277,6 +1278,8 @@ bool MDSMonitor::fail_mds_gid(FSMap &fsmap, mds_gid_t gid)
     utime_t until = ceph_clock_now();
     until += g_conf().get_val<double>("mon_mds_blocklist_interval");
     blocklist_epoch = mon.osdmon()->blocklist(info.addrs, until);
+    /* do not delay when we are evicting an MDS */
+    force_immediate_propose();
   }
 
   fsmap.erase(gid, blocklist_epoch);
@@ -1438,8 +1441,7 @@ bool MDSMonitor::prepare_command(MonOpRequestRef op)
 out:
   dout(4) << __func__ << " done, r=" << r << dendl;
   /* Compose response */
-  string rs;
-  getline(ss, rs);
+  string rs = ss.str();
 
   if (r >= 0) {
     // success.. delay reply
index 45550a5ca77d72a4e8f5fc09e365c3fdc76b37c6..ab3d116978fc19b2adcdc0711e02119b88e05e31 100644 (file)
@@ -154,11 +154,8 @@ int MonClient::get_monmap_and_config()
     if (r < 0) {
       return r;
     }
-    r = authenticate(std::chrono::duration<double>(cct->_conf.get_val<std::chrono::seconds>("client_mount_timeout")).count());
-    if (r == -ETIMEDOUT) {
-      shutdown();
-      continue;
-    }
+    r = authenticate(
+      cct->_conf.get_val<std::chrono::seconds>("client_mount_timeout").count());
     if (r < 0) {
       break;
     }
@@ -1605,7 +1602,7 @@ int MonClient::handle_auth_request(
     // for some channels prior to nautilus (osd heartbeat), we
     // tolerate the lack of an authorizer.
     if (!con->get_messenger()->require_authorizer) {
-      handle_authentication_dispatcher->ms_handle_authentication(con);
+      handle_authentication_dispatcher->ms_handle_fast_authentication(con);
       return 1;
     }
     return -EACCES;
@@ -1643,7 +1640,7 @@ int MonClient::handle_auth_request(
     &auth_meta->connection_secret,
     ac);
   if (isvalid) {
-    handle_authentication_dispatcher->ms_handle_authentication(con);
+    handle_authentication_dispatcher->ms_handle_fast_authentication(con);
     return 1;
   }
   if (!more && !was_challenge && auth_meta->authorizer_challenge) {
index f9dd7e39a24786f1bc069cf4e46895fb3e0c7c8c..52af09c8c7c5705b423b4e375d0a477fc1cb932a 100644 (file)
@@ -843,13 +843,13 @@ COMMAND("osd erasure-code-profile ls",
 COMMAND("osd set "
        "name=key,type=CephChoices,strings=full|pause|noup|nodown|"
        "noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|"
-       "notieragent|nosnaptrim|pglog_hardlimit "
+       "notieragent|nosnaptrim|pglog_hardlimit|noautoscale "
         "name=yes_i_really_mean_it,type=CephBool,req=false",
        "set <key>", "osd", "rw")
 COMMAND("osd unset "
        "name=key,type=CephChoices,strings=full|pause|noup|nodown|"\
        "noout|noin|nobackfill|norebalance|norecover|noscrub|nodeep-scrub|"
-       "notieragent|nosnaptrim",
+       "notieragent|nosnaptrim|noautoscale",
        "unset <key>", "osd", "rw")
 COMMAND("osd require-osd-release "\
        "name=release,type=CephChoices,strings=octopus|pacific|quincy|reef "
index 33b9aa8fa2880e5f4fd79a3e1c5e6368d723cf33..bb8a4b19455d6c28713006cea7a78f68afb5af28 100644 (file)
@@ -369,6 +369,7 @@ void MonMap::print_summary(ostream& out) const
     has_printed = true;
   }
   out << "}" << " removed_ranks: {" << removed_ranks << "}";
+  out << " disallowed_leaders: {" << disallowed_leaders << "}";
 }
  
 void MonMap::print(ostream& out) const
index 73275e81eb1456ddb605606f11cfd23eb5820292..0c4379910af73353963937c27206e7794d19c2a1 100644 (file)
@@ -131,7 +131,7 @@ private:
   }
 
 protected:
-  void _dump_op_descriptor_unlocked(std::ostream& stream) const override {
+  void _dump_op_descriptor(std::ostream& stream) const override {
     get_req()->print(stream);
   }
 
index 5635e5ebcb6958736131fa93539636fd4edb30c7..002a02fe00edbe347102415b285721ed30ad7a0e 100644 (file)
@@ -2005,6 +2005,7 @@ void Monitor::handle_probe_reply(MonOpRequestRef op)
       dout(10) << " got newer/committed monmap epoch " << newmap->get_epoch()
               << ", mine was " << monmap->get_epoch() << dendl;
       int epoch_diff = newmap->get_epoch() - monmap->get_epoch();
+      dout(20) << " new monmap is " << *newmap  << dendl;
       delete newmap;
       monmap->decode(m->monmap_bl);
       dout(20) << "has_ever_joined: " << has_ever_joined << dendl;
@@ -6380,7 +6381,7 @@ int Monitor::handle_auth_request(
       &auth_meta->connection_secret,
       &auth_meta->authorizer_challenge);
     if (isvalid) {
-      ms_handle_authentication(con);
+      ms_handle_fast_authentication(con);
       return 1;
     }
     if (!more && !was_challenge && auth_meta->authorizer_challenge) {
@@ -6501,7 +6502,7 @@ int Monitor::handle_auth_request(
   }
   if (r > 0 &&
       !s->authenticated) {
-    ms_handle_authentication(con);
+    ms_handle_fast_authentication(con);
   }
 
   dout(30) << " r " << r << " reply:\n";
@@ -6539,7 +6540,7 @@ void Monitor::ms_handle_accept(Connection *con)
   }
 }
 
-int Monitor::ms_handle_authentication(Connection *con)
+int Monitor::ms_handle_fast_authentication(Connection *con)
 {
   if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
     // mon <-> mon connections need no Session, and setting one up
@@ -6656,14 +6657,16 @@ void Monitor::notify_new_monmap(bool can_change_external_state, bool remove_rank
 void Monitor::set_elector_disallowed_leaders(bool allow_election)
 {
   set<int> dl;
+  // inherit dl from monmap
   for (auto name : monmap->disallowed_leaders) {
     dl.insert(monmap->get_rank(name));
-  }
-  if (is_stretch_mode()) {
-    for (auto name : monmap->stretch_marked_down_mons) {
-      dl.insert(monmap->get_rank(name));
-    }
-    dl.insert(monmap->get_rank(monmap->tiebreaker_mon));
+  } // unconditionally add stretch_marked_down_mons to the new dl copy
+  for (auto name : monmap->stretch_marked_down_mons) {
+    dl.insert(monmap->get_rank(name));
+  } // add the tiebreaker_mon incase it is not in monmap->disallowed_leaders
+  if (!monmap->tiebreaker_mon.empty() &&
+      monmap->contains(monmap->tiebreaker_mon)) {
+      dl.insert(monmap->get_rank(monmap->tiebreaker_mon));
   }
 
   bool disallowed_changed = elector.set_disallowed_leaders(dl);
index 998fe91eb603566f2a936e25cc78c85495cf34d2..7f9a16a9a36c8709fd339ac1b1d24929c49f0e33 100644 (file)
@@ -957,7 +957,7 @@ public:
   MonCap mon_caps;
   bool get_authorizer(int dest_type, AuthAuthorizer **authorizer);
 public: // for AuthMonitor msgr1:
-  int ms_handle_authentication(Connection *con) override;
+  int ms_handle_fast_authentication(Connection *con) override;
 private:
   void ms_handle_accept(Connection *con) override;
   bool ms_handle_reset(Connection *con) override;
index 3acafbb82e682b812e468749815ba786ad9ea2e4..360bd036bf977888786230a018e59167b066de57 100644 (file)
@@ -2769,7 +2769,7 @@ bool OSDMonitor::preprocess_query(MonOpRequestRef op)
 
   default:
     ceph_abort();
-    return true;
+    return false;
   }
 }
 
@@ -2808,7 +2808,7 @@ bool OSDMonitor::prepare_update(MonOpRequestRef op)
     } catch (const bad_cmd_get& e) {
       bufferlist bl;
       mon.reply_command(op, -EINVAL, e.what(), bl, get_last_committed());
-      return true;
+      return false; /* nothing to propose */
     }
 
   case CEPH_MSG_POOLOP:
@@ -4057,7 +4057,7 @@ bool OSDMonitor::prepare_pg_ready_to_merge(MonOpRequestRef op)
             << " race with concurrent pg_num[_pending] update, will retry"
             << dendl;
     wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-    return true;
+    return false; /* nothing to propose, yet */
   }
 
   if (m->ready) {
@@ -4438,7 +4438,7 @@ bool OSDMonitor::prepare_beacon(MonOpRequestRef op)
       send_latest(op, beacon->version+1);
     }
     dout(1) << " ignoring beacon from non-active osd." << from << dendl;
-    return false;
+    return false; /* nothing to propose */
   }
 
   last_osd_report[from].first = ceph_clock_now();
@@ -4461,7 +4461,7 @@ bool OSDMonitor::prepare_beacon(MonOpRequestRef op)
       beacon->last_purged_snaps_scrub;
     return true;
   } else {
-    return false;
+    return false; /* nothing to propose */
   }
 }
 
@@ -9776,14 +9776,14 @@ bool OSDMonitor::prepare_command(MonOpRequestRef op)
   if (!cmdmap_from_json(m->cmd, &cmdmap, ss)) {
     string rs = ss.str();
     mon.reply_command(op, -EINVAL, rs, get_last_committed());
-    return true;
+    return false; /* nothing to propose */
   }
 
   MonSession *session = op->get_session();
   if (!session) {
     derr << __func__ << " no session" << dendl;
     mon.reply_command(op, -EACCES, "access denied", get_last_committed());
-    return true;
+    return false; /* nothing to propose */
   }
 
   return prepare_command_impl(op, cmdmap);
@@ -9991,7 +9991,6 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
 {
   op->mark_osdmon_event(__func__);
   auto m = op->get_req<MMonCommand>();
-  bool ret = false;
   stringstream ss;
   string rs;
   bufferlist rdata;
@@ -10051,8 +10050,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       (prefix == "osd crush set" && !osdid_present)) {
     if (pending_inc.crush.length()) {
       dout(10) << __func__ << " waiting for pending crush update " << dendl;
-      wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-      return true;
+      goto wait;
     }
     dout(10) << "prepare_command setting new crush map" << dendl;
     bufferlist data(m->get_data());
@@ -10064,7 +10062,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     catch (const std::exception &e) {
       err = -EINVAL;
       ss << "Failed to parse crushmap: " << e.what();
-      goto reply;
+      goto reply_no_propose;
     }
   
     int64_t prior_version = 0;
@@ -10082,25 +10080,25 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
                   << dendl;
          err = 0;
          ss << osdmap.get_crush_version();
-         goto reply;
+         goto reply_no_propose;
        }
       }
       if (prior_version != osdmap.get_crush_version()) {
        err = -EPERM;
        ss << "prior_version " << prior_version << " != crush version "
           << osdmap.get_crush_version();
-       goto reply;
+       goto reply_no_propose;
       }
     }
 
     if (!validate_crush_against_features(&crush, ss)) {
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     err = osdmap.validate_crush_rules(&crush, &ss);
     if (err < 0) {
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (g_conf()->mon_osd_crush_smoke_test) {
@@ -10120,7 +10118,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
                 << ": " << ess.str() << dendl;
        ss << "crush smoke test failed with " << r << ": " << ess.str();
        err = r;
-       goto reply;
+       goto reply_no_propose;
       }
       dout(10) << __func__ << " crush somke test duration: "
                << duration << ", result: " << ess.str() << dendl;
@@ -10142,7 +10140,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     }
     if (!validate_crush_against_features(&newcrush, ss)) {
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     pending_inc.crush.clear();
     newcrush.encode(pending_inc.crush, mon.get_quorum_con_features());
@@ -10153,7 +10151,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     string device_class;
     if (!cmd_getval(cmdmap, "class", device_class)) {
       err = -EINVAL; // no value!
-      goto reply;
+      goto reply_no_propose;
     }
 
     bool stop = false;
@@ -10206,7 +10204,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
                 << dendl;
         err = newcrush.update_device_class(osd, device_class, name, &ss);
         if (err < 0) {
-          goto reply;
+          goto reply_no_propose;
         }
         if (err == 0 && !_have_pending_crush()) {
           if (!stop) {
@@ -10250,7 +10248,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           // ss has reason for failure
           ss << ", unable to parse osd id:\"" << idvec[j] << "\". ";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
         osds.insert(osd);
       }
@@ -10273,7 +10271,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         err = newcrush.remove_device_class(cct, osd, &ss);
         if (err < 0) {
           // ss has reason for failure
-          goto reply;
+          goto reply_no_propose;
         }
         updated.insert(osd);
       }
@@ -10291,18 +10289,18 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     string device_class;
     if (!cmd_getval(cmdmap, "class", device_class)) {
       err = -EINVAL; // no value!
-      goto reply;
+      goto reply_no_propose;
     }
     if (osdmap.require_osd_release < ceph_release_t::luminous) {
       ss << "you must complete the upgrade and 'ceph osd require-osd-release "
          << "luminous' before using crush device classes";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     if (!_have_pending_crush() &&
         _get_stable_crush().class_exists(device_class)) {
       ss << "class '" << device_class << "' already exists";
-      goto reply;
+      goto reply_no_propose;
     }
      CrushWrapper newcrush = _get_pending_crush();
      if (newcrush.class_exists(device_class)) {
@@ -10319,18 +10317,18 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     string device_class;
     if (!cmd_getval(cmdmap, "class", device_class)) {
        err = -EINVAL; // no value!
-       goto reply;
+       goto reply_no_propose;
      }
     if (osdmap.require_osd_release < ceph_release_t::luminous) {
        ss << "you must complete the upgrade and 'ceph osd require-osd-release "
          << "luminous' before using crush device classes";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
      }
 
      if (!osdmap.crush->class_exists(device_class)) {
        err = 0;
-       goto reply;
+       goto reply_no_propose;
      }
 
      CrushWrapper newcrush = _get_pending_crush();
@@ -10343,7 +10341,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
      if (newcrush.class_is_in_use(class_id, &ts)) {
        err = -EBUSY;
        ss << "class '" << device_class << "' " << ts.str();
-       goto reply;
+       goto reply_no_propose;
      }
 
      // check if class is used by any erasure-code-profiles
@@ -10368,7 +10366,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        err = -EBUSY;
        ss << "class '" << device_class
           << "' is still referenced by erasure-code-profile(s): " << referenced_by;
-       goto reply;
+       goto reply_no_propose;
      }
 
      set<int> osds;
@@ -10377,7 +10375,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        err = newcrush.remove_device_class(cct, p, &ss);
        if (err < 0) {
          // ss has reason for failure
-         goto reply;
+         goto reply_no_propose;
        }
      }
 
@@ -10387,7 +10385,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        if (err < 0) {
          ss << "class '" << device_class << "' cannot be removed '"
             << cpp_strerror(err) << "'";
-         goto reply;
+         goto reply_no_propose;
        }
      }
 
@@ -10400,11 +10398,11 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     string srcname, dstname;
     if (!cmd_getval(cmdmap, "srcname", srcname)) {
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (!cmd_getval(cmdmap, "dstname", dstname)) {
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     CrushWrapper newcrush = _get_pending_crush();
@@ -10413,14 +10411,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       // so command is idempotent
       ss << "already renamed to '" << dstname << "'";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     err = newcrush.rename_class(srcname, dstname);
     if (err < 0) {
       ss << "fail to rename '" << srcname << "' to '" << dstname << "' : "
          << cpp_strerror(err);
-      goto reply;
+      goto reply_no_propose;
     }
 
     pending_inc.crush.clear();
@@ -10444,7 +10442,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!_have_pending_crush() &&
        _get_stable_crush().name_exists(name)) {
       ss << "bucket '" << name << "' already exists";
-      goto reply;
+      goto reply_no_propose;
     }
 
     CrushWrapper newcrush = _get_pending_crush();
@@ -10457,12 +10455,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (type < 0) {
       ss << "type '" << typestr << "' does not exist";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (type == 0) {
       ss << "type '" << typestr << "' is for devices, not buckets";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     int bucketno;
     err = newcrush.add_bucket(0, 0,
@@ -10470,12 +10468,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
                              NULL, &bucketno);
     if (err < 0) {
       ss << "add_bucket error: '" << cpp_strerror(err) << "'";
-      goto reply;
+      goto reply_no_propose;
     }
     err = newcrush.set_item_name(bucketno, name);
     if (err < 0) {
       ss << "error setting bucket name to '" << name << "'";
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (!loc.empty()) {
@@ -10484,7 +10482,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         err = newcrush.move_bucket(cct, bucketno, loc);
         if (err < 0) {
           ss << "error moving bucket '" << name << "' to location " << loc;
-          goto reply;
+          goto reply_no_propose;
         }
       } else {
         ss << "no need to move item id " << bucketno << " name '" << name
@@ -10508,12 +10506,15 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     cmd_getval(cmdmap, "dstname", dstname);
 
     err = crush_rename_bucket(srcname, dstname, &ss);
-    if (err == -EALREADY) // equivalent to success for idempotency
-      err = 0;
-    if (err)
-      goto reply;
-    else
+    if (err) {
+      // equivalent to success for idempotency
+      if (err == -EALREADY) {
+        err = 0;
+      }
+      goto reply_no_propose;
+    } else {
       goto update;
+    }
   } else if (prefix == "osd crush weight-set create" ||
             prefix == "osd crush weight-set create-compat") {
     if (_have_pending_crush()) {
@@ -10526,7 +10527,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (newcrush.has_non_straw2_buckets()) {
       ss << "crush map contains one or more bucket(s) that are not straw2";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     if (prefix == "osd crush weight-set create") {
       if (osdmap.require_min_compat_client != ceph_release_t::unknown &&
@@ -10537,7 +10538,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
            << "Try 'ceph osd set-require-min-compat-client luminous' "
            << "before using the new interface";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
       string poolname, mode;
       cmd_getval(cmdmap, "pool", poolname);
@@ -10545,13 +10546,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (pool < 0) {
        ss << "pool '" << poolname << "' not found";
        err = -ENOENT;
-       goto reply;
+       goto reply_no_propose;
       }
       cmd_getval(cmdmap, "mode", mode);
       if (mode != "flat" && mode != "positional") {
        ss << "unrecognized weight-set mode '" << mode << "'";
        err = -EINVAL;
-       goto reply;
+       goto reply_no_propose;
       }
       positions = mode == "flat" ? 1 : osdmap.get_pg_pool(pool)->get_size();
     } else {
@@ -10565,7 +10566,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         ss << "weight-set for pool '" << osdmap.get_pool_name(pool)
            << "' already created";
       }
-      goto reply;
+      goto reply_no_propose;
     }
     pending_inc.crush.clear();
     newcrush.encode(pending_inc.crush, mon.get_quorum_con_features());
@@ -10582,7 +10583,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (pool < 0) {
        ss << "pool '" << poolname << "' not found";
        err = -ENOENT;
-       goto reply;
+       goto reply_no_propose;
       }
     } else {
       pool = CrushWrapper::DEFAULT_CHOOSE_ARGS;
@@ -10606,32 +10607,32 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (pool < 0) {
        ss << "pool '" << poolname << "' not found";
        err = -ENOENT;
-       goto reply;
+       goto reply_no_propose;
       }
       if (!newcrush.have_choose_args(pool)) {
        ss << "no weight-set for pool '" << poolname << "'";
        err = -ENOENT;
-       goto reply;
+       goto reply_no_propose;
       }
       auto arg_map = newcrush.choose_args_get(pool);
       int positions = newcrush.get_choose_args_positions(arg_map);
       if (weight.size() != (size_t)positions) {
          ss << "must specify exact " << positions << " weight values";
          err = -EINVAL;
-         goto reply;
+         goto reply_no_propose;
       }
     } else {
       pool = CrushWrapper::DEFAULT_CHOOSE_ARGS;
       if (!newcrush.have_choose_args(pool)) {
        ss << "no backward-compatible weight-set";
        err = -ENOENT;
-       goto reply;
+       goto reply_no_propose;
       }
     }
     if (!newcrush.name_exists(item)) {
       ss << "item '" << item << "' does not exist";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     err = newcrush.choose_args_adjust_item_weightf(
       cct,
@@ -10640,7 +10641,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       weight,
       &ss);
     if (err < 0) {
-      goto reply;
+      goto reply_no_propose;
     }
     err = 0;
     pending_inc.crush.clear();
@@ -10656,7 +10657,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       err = -ENOENT;
       ss << osd_name
         << " does not exist. Create it before updating the crush map";
-      goto reply;
+      goto reply_no_propose;
     }
 
     double weight;
@@ -10664,7 +10665,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "unable to parse weight value '"
          << cmd_vartype_stringify(cmdmap.at("weight")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     string args;
@@ -10679,7 +10680,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "unable to set item id " << osdid << " name '" << osd_name
          << "' weight " << weight << " at location " << loc
          << ": does not exist";
-      goto reply;
+      goto reply_no_propose;
     }
 
     dout(5) << "adding/updating crush item id " << osdid << " name '"
@@ -10700,12 +10701,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     }
 
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
 
     if (err == 0 && !_have_pending_crush()) {
       ss << action << " item id " << osdid << " name '" << osd_name
         << "' weight " << weight << " at location " << loc << ": no change";
-      goto reply;
+      goto reply_no_propose;
     }
 
     pending_inc.crush.clear();
@@ -10724,7 +10725,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        err = -ENOENT;
        ss << osd_name
           << " does not exist.  create it before updating the crush map";
-       goto reply;
+       goto reply_no_propose;
       }
 
       double weight;
@@ -10732,7 +10733,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         ss << "unable to parse weight value '"
            << cmd_vartype_stringify(cmdmap.at("weight")) << "'";
         err = -EINVAL;
-        goto reply;
+        goto reply_no_propose;
       }
 
       string args;
@@ -10822,12 +10823,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!newcrush.name_exists(source)) {
       ss << "source item " << source << " does not exist";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     if (!newcrush.name_exists(dest)) {
       ss << "dest item " << dest << " does not exist";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     int sid = newcrush.get_item_id(source);
     int did = newcrush.get_item_id(dest);
@@ -10835,7 +10836,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (newcrush.get_immediate_parent_id(sid, &sparent) == 0 && !force) {
       ss << "source item " << source << " is not an orphan bucket; pass --yes-i-really-mean-it to proceed anyway";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     if (newcrush.get_bucket_alg(sid) != newcrush.get_bucket_alg(did) &&
        !force) {
@@ -10843,13 +10844,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         << "dest bucket alg " << crush_alg_name(newcrush.get_bucket_alg(did))
         << "; pass --yes-i-really-mean-it to proceed anyway";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     int r = newcrush.swap_bucket(cct, sid, did);
     if (r < 0) {
       ss << "failed to swap bucket contents: " << cpp_strerror(r);
       err = r;
-      goto reply;
+      goto reply_no_propose;
     }
     ss << "swapped bucket of " << source << " to " << dest;
     pending_inc.crush.clear();
@@ -10873,7 +10874,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!osdmap.crush->name_exists(name)) {
       err = -ENOENT;
       ss << "item " << name << " does not exist";
-      goto reply;
+      goto reply_no_propose;
     } else {
       dout(5) << "resolved crush name '" << name << "' to id " << id << dendl;
     }
@@ -10881,7 +10882,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "no need to move item id " << id << " name '" << name
         << "' to location " << loc << " in crush map";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     dout(5) << "linking crush item name '" << name << "' at location " << loc << dendl;
@@ -10890,7 +10891,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!newcrush.name_exists(name)) {
       err = -ENOENT;
       ss << "item " << name << " does not exist";
-      goto reply;
+      goto reply_no_propose;
     } else {
       int id = newcrush.get_item_id(name);
       if (!newcrush.check_item_loc(cct, id, loc, (int *)NULL)) {
@@ -10903,7 +10904,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        } else {
          ss << "cannot link item id " << id << " name '" << name
              << "' to location " << loc;
-          goto reply;
+          goto reply_no_propose;
        }
       } else {
        ss << "no need to move item id " << id << " name '" << name
@@ -10993,27 +10994,27 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!newcrush.name_exists(name)) {
       err = -ENOENT;
       ss << "device '" << name << "' does not appear in the crush map";
-      goto reply;
+      goto reply_no_propose;
     }
 
     int id = newcrush.get_item_id(name);
     if (id < 0) {
       ss << "device '" << name << "' is not a leaf in the crush map";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     double w;
     if (!cmd_getval(cmdmap, "weight", w)) {
       ss << "unable to parse weight value '"
         << cmd_vartype_stringify(cmdmap.at("weight")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     err = newcrush.adjust_item_weightf(cct, id, w,
                                       g_conf()->osd_crush_update_weight_set);
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
     pending_inc.crush.clear();
     newcrush.encode(pending_inc.crush, mon.get_quorum_con_features());
     ss << "reweighted item id " << id << " name '" << name << "' to " << w
@@ -11031,27 +11032,27 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!newcrush.name_exists(name)) {
       err = -ENOENT;
       ss << "device '" << name << "' does not appear in the crush map";
-      goto reply;
+      goto reply_no_propose;
     }
 
     int id = newcrush.get_item_id(name);
     if (id >= 0) {
       ss << "device '" << name << "' is not a subtree in the crush map";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     double w;
     if (!cmd_getval(cmdmap, "weight", w)) {
       ss << "unable to parse weight value '"
         << cmd_vartype_stringify(cmdmap.at("weight")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     err = newcrush.adjust_subtree_weightf(cct, id, w,
                                          g_conf()->osd_crush_update_weight_set);
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
     pending_inc.crush.clear();
     newcrush.encode(pending_inc.crush, mon.get_quorum_con_features());
     ss << "reweighted subtree id " << id << " name '" << name << "' to " << w
@@ -11083,12 +11084,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     } else {
       ss << "unrecognized profile '" << profile << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (!validate_crush_against_features(&newcrush, ss)) {
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     pending_inc.crush.clear();
@@ -11110,25 +11111,25 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       err = -EINVAL;
       ss << "failed to parse integer value "
         << cmd_vartype_stringify(cmdmap.at("value"));
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (tunable == "straw_calc_version") {
       if (value != 0 && value != 1) {
        ss << "value must be 0 or 1; got " << value;
        err = -EINVAL;
-       goto reply;
+       goto reply_no_propose;
       }
       newcrush.set_straw_calc_version(value);
     } else {
       ss << "unrecognized tunable '" << tunable << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (!validate_crush_against_features(&newcrush, ss)) {
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     pending_inc.crush.clear();
@@ -11153,7 +11154,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       // From the user point of view, the rule is more meaningfull.
       ss << "rule " << name << " already exists";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     CrushWrapper newcrush = _get_pending_crush();
@@ -11168,7 +11169,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
                                               pg_pool_t::TYPE_REPLICATED, &ss);
       if (ruleno < 0) {
        err = ruleno;
-       goto reply;
+       goto reply_no_propose;
       }
 
       pending_inc.crush.clear();
@@ -11191,7 +11192,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       // From the user point of view, the rule is more meaningfull.
       ss << "rule " << name << " already exists";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     CrushWrapper newcrush = _get_pending_crush();
@@ -11207,7 +11208,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        "firstn", pg_pool_t::TYPE_REPLICATED, &ss);
       if (ruleno < 0) {
        err = ruleno;
-       goto reply;
+       goto reply_no_propose;
       }
 
       pending_inc.crush.clear();
@@ -11227,7 +11228,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
 
     if (erasure_code_profile_in_use(osdmap.pools, name, &ss)) {
       err = -EBUSY;
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (osdmap.has_erasure_code_profile(name) ||
@@ -11246,7 +11247,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     } else {
       ss << "erasure-code-profile " << name << " does not exist";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
   } else if (prefix == "osd erasure-code-profile set") {
@@ -11261,7 +11262,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     map<string,string> profile_map;
     err = parse_erasure_code_profile(profile, &profile_map, &ss);
     if (err)
-      goto reply;
+      goto reply_no_propose;
     if (auto found = profile_map.find("crush-failure-domain");
        found != profile_map.end()) {
       const auto& failure_domain = found->second;
@@ -11270,7 +11271,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        ss << "erasure-code-profile " << profile_map
          << " contains an invalid failure-domain " << std::quoted(failure_domain);
        err = -EINVAL;
-       goto reply;
+       goto reply_no_propose;
       }
     }
 
@@ -11278,7 +11279,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "erasure-code-profile " << profile_map
         << " must contain a plugin entry" << std::endl;
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     string plugin = profile_map["plugin"];
 
@@ -11288,18 +11289,18 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     } else {
       err = normalize_profile(name, profile_map, force, &ss);
       if (err)
-       goto reply;
+       goto reply_no_propose;
 
       if (osdmap.has_erasure_code_profile(name)) {
        ErasureCodeProfile existing_profile_map =
          osdmap.get_erasure_code_profile(name);
        err = normalize_profile(name, existing_profile_map, force, &ss);
        if (err)
-         goto reply;
+         goto reply_no_propose;
 
        if (existing_profile_map == profile_map) {
          err = 0;
-         goto reply;
+         goto reply_no_propose;
        }
        if (!force) {
          err = -EPERM;
@@ -11308,7 +11309,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
             << existing_profile_map
             << " is different from the proposed profile "
             << profile_map;
-         goto reply;
+         goto reply_no_propose;
        }
       }
 
@@ -11327,7 +11328,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == -EAGAIN)
       goto wait;
     if (err)
-      goto reply;
+      goto reply_no_propose;
     string name, poolstr;
     cmd_getval(cmdmap, "name", name);
     string profile;
@@ -11346,10 +11347,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
                                                      profile_map,
                                                      &ss);
        if (err)
-         goto reply;
+         goto reply_no_propose;
        err = normalize_profile(name, profile_map, true, &ss);
        if (err)
-         goto reply;
+         goto reply_no_propose;
        dout(20) << "erasure code profile set " << profile << "="
                 << profile_map << dendl;
        pending_inc.set_erasure_code_profile(profile, profile_map);
@@ -11364,15 +11365,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       case -EEXIST: // return immediately
        ss << "rule " << name << " already exists";
        err = 0;
-       goto reply;
-       break;
+       goto reply_no_propose;
       case -EALREADY: // wait for pending to be proposed
        ss << "rule " << name << " already exists";
        err = 0;
        break;
       default: // non recoverable error
-       goto reply;
-       break;
+       goto reply_no_propose;
       }
     } else {
       ss << "created rule " << name << " at " << rule;
@@ -11390,7 +11389,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!osdmap.crush->rule_exists(name)) {
       ss << "rule " << name << " does not exist";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     CrushWrapper newcrush = _get_pending_crush();
@@ -11408,12 +11407,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (osdmap.crush_rule_in_use(ruleno)) {
        ss << "crush rule " << name << " (" << ruleno << ") is in use";
        err = -EBUSY;
-       goto reply;
+       goto reply_no_propose;
       }
 
       err = newcrush.remove_rule(ruleno);
       if (err < 0) {
-       goto reply;
+       goto reply_no_propose;
       }
 
       pending_inc.crush.clear();
@@ -11432,12 +11431,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (srcname.empty() || dstname.empty()) {
       ss << "must specify both source rule name and destination rule name";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (srcname == dstname) {
       ss << "destination rule name is equal to source rule name";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     CrushWrapper newcrush = _get_pending_crush();
@@ -11447,13 +11446,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       // (so this command is idempotent)
       ss << "already renamed to '" << dstname << "'";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     err = newcrush.rename_rule(srcname, dstname, &ss);
     if (err < 0) {
       // ss has reason for failure
-      goto reply;
+      goto reply_no_propose;
     }
     pending_inc.crush.clear();
     newcrush.encode(pending_inc.crush, mon.get_quorum_con_features());
@@ -11468,14 +11467,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "unable to parse 'newmax' value '"
          << cmd_vartype_stringify(cmdmap.at("newmax")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (newmax > g_conf()->mon_max_osd) {
       err = -ERANGE;
       ss << "cannot set max_osd to " << newmax << " which is > conf.mon_max_osd ("
         << g_conf()->mon_max_osd << ")";
-      goto reply;
+      goto reply_no_propose;
     }
 
     // Don't allow shrinking OSD number as this will cause data loss
@@ -11490,7 +11489,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           err = -EBUSY;
           ss << "cannot shrink max_osd to " << newmax
              << " because osd." << i << " (and possibly others) still in use";
-          goto reply;
+          goto reply_no_propose;
         }
       }
     }
@@ -11510,7 +11509,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "unable to parse 'ratio' value '"
          << cmd_vartype_stringify(cmdmap.at("ratio")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (prefix == "osd set-full-ratio")
       pending_inc.new_full_ratio = n;
@@ -11530,7 +11529,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!vno) {
       ss << "version " << v << " is not recognized";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     OSDMap newmap;
     newmap.deepish_copy_from(osdmap);
@@ -11541,7 +11540,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "osdmap current utilizes features that require " << mvno
         << "; cannot set require_min_compat_client below that to " << vno;
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     bool sure = false;
     cmd_getval(cmdmap, "yes_i_really_mean_it", sure);
@@ -11579,7 +11578,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (!ok) {
        ss << "; add --yes-i-really-mean-it to do it anyway";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
     }
     ss << "set require_min_compat_client to " << vno;
@@ -11629,7 +11628,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         ss << "Not advisable to continue since no OSDs are up. Pass "
            << "--yes-i-really-mean-it if you really wish to continue.";
         err = -EPERM;
-        goto reply;
+        goto reply_no_propose;
       }
       // The release check here is required because for OSD_PGLOG_HARDLIMIT,
       // we are reusing a jewel feature bit that was retired in luminous.
@@ -11640,8 +11639,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       } else {
        ss << "not all up OSDs have OSD_PGLOG_HARDLIMIT feature";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
+    } else if (key == "noautoscale") {
+      return prepare_set_flag(op, CEPH_OSDMAP_NOAUTOSCALE);
     } else {
       ss << "unrecognized flag '" << key << "'";
       err = -EINVAL;
@@ -11674,6 +11675,8 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       return prepare_unset_flag(op, CEPH_OSDMAP_NOTIERAGENT);
     else if (key == "nosnaptrim")
       return prepare_unset_flag(op, CEPH_OSDMAP_NOSNAPTRIM);
+    else if (key == "noautoscale")
+      return prepare_unset_flag(op, CEPH_OSDMAP_NOAUTOSCALE);
     else {
       ss << "unrecognized flag '" << key << "'";
       err = -EINVAL;
@@ -11688,74 +11691,74 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!rel) {
       ss << "unrecognized release " << release;
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (rel == osdmap.require_osd_release) {
       // idempotent
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
     if (osdmap.require_osd_release < ceph_release_t::pacific && !sure) {
       ss << "Not advisable to continue since current 'require_osd_release' "
          << "refers to a very old Ceph release. Pass "
         << "--yes-i-really-mean-it if you really wish to continue.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     if (!osdmap.get_num_up_osds() && !sure) {
       ss << "Not advisable to continue since no OSDs are up. Pass "
         << "--yes-i-really-mean-it if you really wish to continue.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     if (rel == ceph_release_t::pacific) {
       if (!mon.monmap->get_required_features().contains_all(
            ceph::features::mon::FEATURE_PACIFIC)) {
        ss << "not all mons are pacific";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
       if ((!HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_PACIFIC))
            && !sure) {
        ss << "not all up OSDs have CEPH_FEATURE_SERVER_PACIFIC feature";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
     } else if (rel == ceph_release_t::quincy) {
       if (!mon.monmap->get_required_features().contains_all(
            ceph::features::mon::FEATURE_QUINCY)) {
        ss << "not all mons are quincy";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
       if ((!HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_QUINCY))
            && !sure) {
        ss << "not all up OSDs have CEPH_FEATURE_SERVER_QUINCY feature";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
     } else if (rel == ceph_release_t::reef) {
       if (!mon.monmap->get_required_features().contains_all(
            ceph::features::mon::FEATURE_REEF)) {
        ss << "not all mons are reef";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
       if ((!HAVE_FEATURE(osdmap.get_up_osd_features(), SERVER_REEF))
            && !sure) {
        ss << "not all up OSDs have CEPH_FEATURE_SERVER_REEF feature";
        err = -EPERM;
-       goto reply;
+       goto reply_no_propose;
       }
     } else {
       ss << "not supported for this release";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     if (rel < osdmap.require_osd_release) {
       ss << "require_osd_release cannot be lowered once it has been set";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     pending_inc.new_require_osd_release = rel;
     goto update;
@@ -11936,7 +11939,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           ss << "unrecognized flag '" << f << "', must be one of "
              << "{noup,nodown,noin,noout}";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
       }
     } else {
@@ -11955,12 +11958,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (flags == 0) {
       ss << "must specify flag(s) {noup,nodwon,noin,noout} to set/unset";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (who.empty()) {
       ss << "must specify at least one or more targets to set/unset";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     set<int> osds;
     set<int> crush_nodes;
@@ -11985,7 +11988,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (osds.empty() && crush_nodes.empty() && device_classes.empty()) {
       // ss has reason for failure
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     bool any = false;
     for (auto osd : osds) {
@@ -12069,11 +12072,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     pg_t pgid;
     err = parse_pgid(cmdmap, ss, pgid);
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
     if (pending_inc.new_pg_temp.count(pgid)) {
       dout(10) << __func__ << " waiting for pending update on " << pgid << dendl;
-      wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-      return true;
+      goto wait;
     }
 
     vector<int64_t> id_vec;
@@ -12088,7 +12090,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (!osdmap.exists(osd)) {
         ss << "osd." << osd << " does not exist";
         err = -ENOENT;
-        goto reply;
+        goto reply_no_propose;
       }
       new_pg_temp.push_back(osd);
     }
@@ -12098,7 +12100,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "num of osds (" << new_pg_temp.size() <<") < pool min size ("
          << pool_min_size << ")";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     int pool_size = osdmap.get_pg_pool_size(pgid);
@@ -12106,7 +12108,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "num of osds (" << new_pg_temp.size() <<") > pool size ("
          << pool_size << ")";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     pending_inc.new_pg_temp[pgid] = mempool::osdmap::vector<int>(
@@ -12118,7 +12120,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     pg_t pgid;
     err = parse_pgid(cmdmap, ss, pgid);
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
 
     int64_t osd;
     if (prefix == "osd primary-temp") {
@@ -12126,12 +12128,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         ss << "unable to parse 'id' value '"
            << cmd_vartype_stringify(cmdmap.at("id")) << "'";
         err = -EINVAL;
-        goto reply;
+        goto reply_no_propose;
       }
       if (!osdmap.exists(osd)) {
         ss << "osd." << osd << " does not exist";
         err = -ENOENT;
-        goto reply;
+        goto reply_no_propose;
       }
     }
     else if (prefix == "osd rm-primary-temp") {
@@ -12147,7 +12149,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         << osdmap.require_min_compat_client
         << " < firefly, which is required for primary-temp";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
 
     pending_inc.new_primary_temp[pgid] = osd;
@@ -12157,14 +12159,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     pg_t pgid;
     err = parse_pgid(cmdmap, ss, pgid);
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
     vector<int> acting;
     int primary;
     osdmap.pg_to_acting_osds(pgid, &acting, &primary);
     if (primary < 0) {
       err = -EAGAIN;
       ss << "pg currently has no primary";
-      goto reply;
+      goto reply_no_propose;
     }
     if (acting.size() > 1) {
       // map to just primary; it will map back to what it wants
@@ -12185,7 +12187,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (!done) {
        err = -EAGAIN;
        ss << "not enough up OSDs in the cluster to force repeer";
-       goto reply;
+       goto reply_no_propose;
       }
     }
     goto update;
@@ -12250,7 +12252,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
          << "Try 'ceph osd set-require-min-compat-client " << min_release_name << "' "
          << "before using the new interface";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
 
     //TODO: Should I add feature and test for upmap-primary?
@@ -12258,11 +12260,11 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == -EAGAIN)
       goto wait;
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
     pg_t pgid;
     err = parse_pgid(cmdmap, ss, pgid);
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
     if (pending_inc.old_pools.count(pgid.pool())) {
       ss << "pool of " << pgid << " is pending removal";
       err = -ENOENT;
@@ -12280,8 +12282,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           pending_inc.old_pg_upmap.count(pgid)) {
         dout(10) << __func__ << " waiting for pending update on "
                  << pgid << dendl;
-        wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-        return true;
+        goto wait;
       }
       break;
 
@@ -12292,7 +12293,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         if (! pt->is_replicated()) {
          ss << "pg-upmap-primary is only supported for replicated pools";
          err = -EINVAL;
-         goto reply;
+         goto reply_no_propose;
        }
       }
       // fall through
@@ -12302,8 +12303,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           pending_inc.old_pg_upmap_items.count(pgid)) {
         dout(10) << __func__ << " waiting for pending update on "
                  << pgid << dendl;
-        wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-        return true;
+        goto wait;
       }
       break;
 
@@ -12319,7 +12319,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           ss << "unable to parse 'id' value(s) '"
              << cmd_vartype_stringify(cmdmap.at("id")) << "'";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
 
         int pool_min_size = osdmap.get_pg_pool_min_size(pgid);
@@ -12327,7 +12327,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           ss << "num of osds (" << id_vec.size() <<") < pool min size ("
              << pool_min_size << ")";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
 
         int pool_size = osdmap.get_pg_pool_size(pgid);
@@ -12335,7 +12335,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           ss << "num of osds (" << id_vec.size() <<") > pool size ("
              << pool_size << ")";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
 
         vector<int32_t> new_pg_upmap;
@@ -12343,7 +12343,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           if (osd != CRUSH_ITEM_NONE && !osdmap.exists(osd)) {
             ss << "osd." << osd << " does not exist";
             err = -ENOENT;
-            goto reply;
+            goto reply_no_propose;
           }
           auto it = std::find(new_pg_upmap.begin(), new_pg_upmap.end(), osd);
           if (it != new_pg_upmap.end()) {
@@ -12356,7 +12356,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         if (new_pg_upmap.empty()) {
           ss << "no valid upmap items(pairs) is specified";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
 
         pending_inc.new_pg_upmap[pgid] = mempool::osdmap::vector<int32_t>(
@@ -12379,13 +12379,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           ss << "unable to parse 'id' value(s) '"
              << cmd_vartype_stringify(cmdmap.at("id")) << "'";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
 
         if (id_vec.size() % 2) {
           ss << "you must specify pairs of osd ids to be remapped";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
 
         int pool_size = osdmap.get_pg_pool_size(pgid);
@@ -12393,7 +12393,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           ss << "num of osd pairs (" << id_vec.size() / 2 <<") > pool size ("
              << pool_size << ")";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
 
         vector<pair<int32_t,int32_t>> new_pg_upmap_items;
@@ -12409,12 +12409,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           if (!osdmap.exists(from)) {
             ss << "osd." << from << " does not exist";
             err = -ENOENT;
-            goto reply;
+            goto reply_no_propose;
           }
           if (to != CRUSH_ITEM_NONE && !osdmap.exists(to)) {
             ss << "osd." << to << " does not exist";
             err = -ENOENT;
-            goto reply;
+            goto reply_no_propose;
           }
           pair<int32_t,int32_t> entry = make_pair(from, to);
           auto it = std::find(new_pg_upmap_items.begin(),
@@ -12433,7 +12433,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         if (new_pg_upmap_items.empty()) {
           ss << "no valid upmap items(pairs) is specified";
           err = -EINVAL;
-          goto reply;
+          goto reply_no_propose;
         }
 
         pending_inc.new_pg_upmap_items[pgid] =
@@ -12457,12 +12457,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
          ss << "invalid osd id value '"
              << cmd_vartype_stringify(cmdmap.at("id")) << "'";
          err = -EINVAL;
-         goto reply;
+         goto reply_no_propose;
        }
         if (id != CRUSH_ITEM_NONE && !osdmap.exists(id)) {
           ss << "osd." << id << " does not exist";
           err = -ENOENT;
-          goto reply;
+          goto reply_no_propose;
         }
        vector<int> acting;
        int primary;
@@ -12470,7 +12470,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        if (id == primary) {
          ss << "osd." << id << " is already primary for pg " << pgid;
          err = -EINVAL;
-         goto reply;
+         goto reply_no_propose;
        }
        int found_idx = 0;
        for (int i = 1 ; i < (int)acting.size(); i++) {  // skip 0 on purpose
@@ -12482,7 +12482,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        if (found_idx == 0) {
          ss << "osd." << id << " is not in acting set for pg " << pgid;
          err = -EINVAL;
-         goto reply;
+         goto reply_no_propose;
        }
        vector<int> new_acting(acting);
        new_acting[found_idx] = new_acting[0];
@@ -12496,7 +12496,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
          ss << "can't change primary for pg " << pgid << " to osd." << id
             << " - illegal pg after the change";
          err = -EINVAL;
-         goto reply;
+         goto reply_no_propose;
        }
        pending_inc.new_pg_upmap_primary[pgid] = id;
        //TO-REMOVE: 
@@ -12522,20 +12522,20 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "invalid osd id value '"
          << cmd_vartype_stringify(cmdmap.at("id")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     double w;
     if (!cmd_getval(cmdmap, "weight", w)) {
       ss << "unable to parse 'weight' value '"
         << cmd_vartype_stringify(cmdmap.at("weight")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     long ww = (int)((double)CEPH_OSD_MAX_PRIMARY_AFFINITY*w);
     if (ww < 0L) {
       ss << "weight must be >= 0";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (osdmap.require_min_compat_client != ceph_release_t::unknown &&
        osdmap.require_min_compat_client < ceph_release_t::firefly) {
@@ -12543,7 +12543,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         << osdmap.require_min_compat_client
         << " < firefly, which is required for primary-affinity";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     if (osdmap.exists(id)) {
       pending_inc.new_primary_affinity[id] = ww;
@@ -12555,7 +12555,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     } else {
       ss << "osd." << id << " does not exist";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
   } else if (prefix == "osd reweight") {
     int64_t id;
@@ -12563,20 +12563,20 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "unable to parse osd id value '"
          << cmd_vartype_stringify(cmdmap.at("id")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     double w;
     if (!cmd_getval(cmdmap, "weight", w)) {
       ss << "unable to parse weight value '"
          << cmd_vartype_stringify(cmdmap.at("weight")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     long ww = (int)((double)CEPH_OSD_IN*w);
     if (ww < 0L) {
       ss << "weight must be >= 0";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (osdmap.exists(id)) {
       pending_inc.new_weight[id] = ww;
@@ -12588,7 +12588,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     } else {
       ss << "osd." << id << " does not exist";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
   } else if (prefix == "osd reweightn") {
     map<int32_t, uint32_t> weights;
@@ -12596,7 +12596,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err) {
       ss << "unable to parse 'weights' value '"
          << cmd_vartype_stringify(cmdmap.at("weights")) << "'";
-      goto reply;
+      goto reply_no_propose;
     }
     pending_inc.new_weight.insert(weights.begin(), weights.end());
     wait_for_finished_proposal(
@@ -12609,7 +12609,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "unable to parse osd id value '"
          << cmd_vartype_stringify(cmdmap.at("id")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     bool sure = false;
     cmd_getval(cmdmap, "yes_i_really_mean_it", sure);
@@ -12617,15 +12617,15 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "are you SURE?  this might mean real, permanent data loss.  pass "
            "--yes-i-really-mean-it if you really do.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     } else if (!osdmap.exists(id)) {
       ss << "osd." << id << " does not exist";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     } else if (!osdmap.is_down(id)) {
       ss << "osd." << id << " is not down";
       err = -EBUSY;
-      goto reply;
+      goto reply_no_propose;
     } else {
       epoch_t e = osdmap.get_info(id).down_at;
       pending_inc.new_lost[id] = e;
@@ -12669,7 +12669,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           << cmd_vartype_stringify(cmdmap.at("id")) << "";
       }
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     bool is_destroy = (prefix == "osd destroy-actual");
@@ -12686,26 +12686,26 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
          << "as deletion of cephx and lockbox keys. "
         << "Pass --yes-i-really-mean-it if you really do.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     } else if (!osdmap.exists(id)) {
       ss << "osd." << id << " does not exist";
       err = 0; // idempotent
-      goto reply;
+      goto reply_no_propose;
     } else if (osdmap.is_up(id)) {
       ss << "osd." << id << " is not `down`.";
       err = -EBUSY;
-      goto reply;
+      goto reply_no_propose;
     } else if (is_destroy && osdmap.is_destroyed(id)) {
       ss << "destroyed osd." << id;
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (prefix == "osd purge-new" &&
        (osdmap.get_state(id) & CEPH_OSD_NEW) == 0) {
       ss << "osd." << id << " is not new";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
 
     bool goto_reply = false;
@@ -12726,7 +12726,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     paxos.unplug();
 
     if (err < 0 || goto_reply) {
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (is_destroy) {
@@ -12767,7 +12767,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
 
     err = get_json_str_map(param_json, ss, &param_map);
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
 
     dout(20) << __func__ << " osd new params " << param_map << dendl;
 
@@ -12776,7 +12776,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     paxos.unplug();
 
     if (err < 0) {
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (f) {
@@ -12788,7 +12788,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == EEXIST) {
       // idempotent operation
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     wait_for_finished_proposal(op,
@@ -12805,7 +12805,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (cmd_id < 0) {
        ss << "invalid osd id value '" << cmd_id << "'";
        err = -EINVAL;
-       goto reply;
+       goto reply_no_propose;
       }
       dout(10) << " osd create got id " << cmd_id << dendl;
     }
@@ -12816,7 +12816,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       if (!uuid.parse(uuidstr.c_str())) {
         ss << "invalid uuid value '" << uuidstr << "'";
         err = -EINVAL;
-        goto reply;
+        goto reply_no_propose;
       }
       // we only care about the id if we also have the uuid, to
       // ensure the operation's idempotency.
@@ -12827,11 +12827,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     err = prepare_command_osd_create(id, uuid, &new_id, ss);
     if (err < 0) {
       if (err == -EAGAIN) {
-        wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-        return true;
+        goto wait;
       }
       // a check has failed; reply to the user.
-      goto reply;
+      goto reply_no_propose;
 
     } else if (err == EEXIST) {
       // this is an idempotent operation; we can go ahead and reply.
@@ -12845,7 +12844,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         rdata.append(ss);
       }
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     string empty_device_class;
@@ -12893,14 +12892,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       } else {
        ss << "Did you mean to specify \"osd blocklist range\"?";
        err = -EINVAL;
-       goto reply;
+       goto reply_no_propose;
       }
     }
     entity_addr_t addr;
     if (!addr.parse(addrstr)) {
       ss << "unable to parse address " << addrstr;
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     else {
       if (range) {
@@ -12908,18 +12907,18 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
          ss << "You specified a range command, but " << addr
             << " does not parse as a CIDR range";
          err = -EINVAL;
-         goto reply;
+         goto reply_no_propose;
        }
        addr.type = entity_addr_t::TYPE_CIDR;
        err = check_cluster_features(CEPH_FEATUREMASK_RANGE_BLOCKLIST, ss);
        if (err) {
-         goto reply;
+         goto reply_no_propose;
        }
        if ((addr.is_ipv4() && addr.get_nonce() > 32) ||
            (addr.is_ipv6() && addr.get_nonce() > 128)) {
          ss << "Too many bits in range for that protocol!";
          err = -EINVAL;
-         goto reply;
+         goto reply_no_propose;
        }
       } else {
        if (osdmap.require_osd_release >= ceph_release_t::nautilus) {
@@ -12995,7 +12994,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        }
        ss << addr << " isn't blocklisted";
        err = 0;
-       goto reply;
+       goto reply_no_propose;
       }
     }
   } else if (prefix == "osd pool mksnap") {
@@ -13005,7 +13004,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (pool < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     string snapname;
     cmd_getval(cmdmap, "snap", snapname);
@@ -13013,15 +13012,15 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (p->is_unmanaged_snaps_mode()) {
       ss << "pool " << poolstr << " is in unmanaged snaps mode";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     } else if (p->snap_exists(snapname.c_str())) {
       ss << "pool " << poolstr << " snap " << snapname << " already exists";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     } else if (p->is_tier()) {
       ss << "pool " << poolstr << " is a cache tier";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     pg_pool_t *pp = 0;
     if (pending_inc.new_pools.count(pool))
@@ -13037,7 +13036,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        dout(20) << "pool-level snapshots have been disabled for pools "
                    "attached to an fs - poolid:" << pool << dendl;
        err = -EOPNOTSUPP;
-       goto reply;
+        goto reply_no_propose;
       }
       pp->add_snap(snapname.c_str(), ceph_clock_now());
       pp->set_snap_epoch(pending_inc.epoch);
@@ -13054,7 +13053,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (pool < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     string snapname;
     cmd_getval(cmdmap, "snap", snapname);
@@ -13062,11 +13061,11 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (p->is_unmanaged_snaps_mode()) {
       ss << "pool " << poolstr << " is in unmanaged snaps mode";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     } else if (!p->snap_exists(snapname.c_str())) {
       ss << "pool " << poolstr << " snap " << snapname << " does not exist";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
     pg_pool_t *pp = 0;
     if (pending_inc.new_pools.count(pool))
@@ -13105,7 +13104,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (poolstr[0] == '.' && !confirm) {
       ss << "pool names beginning with . are not allowed";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
     int64_t pool_id = osdmap.lookup_pg_pool_name(poolstr);
     if (pool_id >= 0) {
@@ -13117,7 +13116,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        ss << "pool '" << poolstr << "' already exists";
        err = 0;
       }
-      goto reply;
+      goto reply_no_propose;
     }
 
     int pool_type;
@@ -13128,7 +13127,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     } else {
       ss << "unknown pool type '" << pool_type_str << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     bool implicit_rule_creation = false;
@@ -13154,7 +13153,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
                                                      profile_map,
                                                      &ss);
          if (err)
-           goto reply;
+           goto reply_no_propose;
          dout(20) << "erasure code profile " << erasure_code_profile << " set" << dendl;
          pending_inc.set_erasure_code_profile(erasure_code_profile, profile_map);
          goto wait;
@@ -13182,7 +13181,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
           if (interr.length()) {
             ss << "error parsing integer value '" << rule_name << "': " << interr;
             err = -EINVAL;
-            goto reply;
+            goto reply_no_propose;
           }
         }
         rule_name = erasure_code_profile;
@@ -13196,17 +13195,16 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       int rule;
       err = get_crush_rule(rule_name, &rule, &ss);
       if (err == -EAGAIN) {
-       wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-       return true;
+        goto wait;
       }
       if (err)
-       goto reply;
+       goto reply_no_propose;
     }
 
     if (expected_num_objects < 0) {
       ss << "'expected_num_objects' must be non-negative";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     set<int32_t> osds;
@@ -13225,7 +13223,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         cct->_conf->filestore_merge_threshold > 0) {
       ss << "'expected_num_objects' requires 'filestore_merge_threshold < 0'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (has_filestore_osd &&
@@ -13240,7 +13238,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
            << "expected_num_objects parameter when creating the pool."
            << " Pass --yes-i-really-mean-it to ignore it";
         err = -EPERM;
-        goto reply;
+        goto reply_no_propose;
       }
     }
 
@@ -13282,15 +13280,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       switch(err) {
       case -EEXIST:
        ss << "pool '" << poolstr << "' already exists";
-       break;
+        err = 0;
+        goto reply_no_propose;
       case -EAGAIN:
-       wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-       return true;
+        goto wait;
       case -ERANGE:
-        goto reply;
+        goto reply_no_propose;
       default:
-       goto reply;
-       break;
+       goto reply_no_propose;
       }
     } else {
       ss << "pool '" << poolstr << "' created";
@@ -13310,7 +13307,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (pool < 0) {
       ss << "pool '" << poolstr << "' does not exist";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     bool force_no_fake = false;
@@ -13323,15 +13320,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         << ".  If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, "
         << "followed by --yes-i-really-really-mean-it.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     err = _prepare_remove_pool(pool, &ss, force_no_fake);
     if (err == -EAGAIN) {
-      wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-      return true;
+      goto wait;
     }
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
     goto update;
   } else if (prefix == "osd pool rename") {
     string srcpoolstr, destpoolstr;
@@ -13345,7 +13341,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (destpoolstr[0] == '.' && !confirm) {
       ss << "pool names beginning with . are not allowed";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
     if (pool_src < 0) {
       if (pool_dst >= 0) {
@@ -13362,12 +13358,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         ss << "unrecognized pool '" << srcpoolstr << "'";
         err = -ENOENT;
       }
-      goto reply;
+      goto reply_no_propose;
     } else if (pool_dst >= 0) {
       // source pool exists and so does the destination pool
       ss << "pool '" << destpoolstr << "' already exists";
       err = -EEXIST;
-      goto reply;
+      goto reply_no_propose;
     }
 
     int ret = _prepare_rename_pool(pool_src, destpoolstr);
@@ -13387,7 +13383,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == -EAGAIN)
       goto wait;
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
 
     getline(ss, rs);
     wait_for_finished_proposal(op, new Monitor::C_Command(mon, op, 0, rs,
@@ -13398,14 +13394,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == -EAGAIN)
       goto wait;
     if (err)
-      goto reply;
+      goto reply_no_propose;
     string poolstr;
     cmd_getval(cmdmap, "pool", poolstr);
     int64_t pool_id = osdmap.lookup_pg_pool_name(poolstr);
     if (pool_id < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     string tierpoolstr;
     cmd_getval(cmdmap, "tierpool", tierpoolstr);
@@ -13413,7 +13409,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (tierpool_id < 0) {
       ss << "unrecognized pool '" << tierpoolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     const pg_pool_t *p = osdmap.get_pg_pool(pool_id);
     ceph_assert(p);
@@ -13421,7 +13417,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     ceph_assert(tp);
 
     if (!_check_become_tier(tierpool_id, tp, pool_id, p, &err, &ss)) {
-      goto reply;
+      goto reply_no_propose;
     }
 
     // make sure new tier is empty
@@ -13432,27 +13428,26 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        !force_nonempty) {
       ss << "tier pool '" << tierpoolstr << "' is not empty; --force-nonempty to force";
       err = -ENOTEMPTY;
-      goto reply;
+      goto reply_no_propose;
     }
     if (tp->is_erasure()) {
       ss << "tier pool '" << tierpoolstr
         << "' is an ec pool, which cannot be a tier";
       err = -ENOTSUP;
-      goto reply;
+      goto reply_no_propose;
     }
     if ((!tp->removed_snaps.empty() || !tp->snaps.empty()) &&
        (!force_nonempty ||
         !g_conf()->mon_debug_unsafe_allow_tier_with_nonempty_snaps)) {
       ss << "tier pool '" << tierpoolstr << "' has snapshot state; it cannot be added as a tier without breaking the pool";
       err = -ENOTEMPTY;
-      goto reply;
+      goto reply_no_propose;
     }
     // go
     pg_pool_t *np = pending_inc.get_new_pool(pool_id, p);
     pg_pool_t *ntp = pending_inc.get_new_pool(tierpool_id, tp);
     if (np->tiers.count(tierpool_id) || ntp->is_tier()) {
-      wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-      return true;
+      goto wait;
     }
     np->tiers.insert(tierpool_id);
     np->set_snap_epoch(pending_inc.epoch); // tier will update to our snap info
@@ -13469,7 +13464,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (pool_id < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     string tierpoolstr;
     cmd_getval(cmdmap, "tierpool", tierpoolstr);
@@ -13477,7 +13472,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (tierpool_id < 0) {
       ss << "unrecognized pool '" << tierpoolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     const pg_pool_t *p = osdmap.get_pg_pool(pool_id);
     ceph_assert(p);
@@ -13485,13 +13480,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     ceph_assert(tp);
 
     if (!_check_remove_tier(pool_id, p, tp, &err, &ss)) {
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (p->tiers.count(tierpool_id) == 0) {
       ss << "pool '" << tierpoolstr << "' is now (or already was) not a tier of '" << poolstr << "'";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
     if (tp->tier_of != pool_id) {
       ss << "tier pool '" << tierpoolstr << "' is a tier of '"
@@ -13499,12 +13494,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
          // be scary about it; this is an inconsistency and bells must go off
          << "THIS SHOULD NOT HAVE HAPPENED AT ALL";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (p->read_tier == tierpool_id) {
       ss << "tier pool '" << tierpoolstr << "' is the overlay for '" << poolstr << "'; please remove-overlay first";
       err = -EBUSY;
-      goto reply;
+      goto reply_no_propose;
     }
     // go
     pg_pool_t *np = pending_inc.get_new_pool(pool_id, p);
@@ -13512,8 +13507,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (np->tiers.count(tierpool_id) == 0 ||
        ntp->tier_of != pool_id ||
        np->read_tier == tierpool_id) {
-      wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-      return true;
+      goto wait;
     }
     np->tiers.erase(tierpool_id);
     ntp->clear_tier();
@@ -13526,14 +13520,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == -EAGAIN)
       goto wait;
     if (err)
-      goto reply;
+      goto reply_no_propose;
     string poolstr;
     cmd_getval(cmdmap, "pool", poolstr);
     int64_t pool_id = osdmap.lookup_pg_pool_name(poolstr);
     if (pool_id < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     string overlaypoolstr;
     cmd_getval(cmdmap, "overlaypool", overlaypoolstr);
@@ -13541,7 +13535,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (overlaypool_id < 0) {
       ss << "unrecognized pool '" << overlaypoolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     const pg_pool_t *p = osdmap.get_pg_pool(pool_id);
     ceph_assert(p);
@@ -13550,19 +13544,19 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (p->tiers.count(overlaypool_id) == 0) {
       ss << "tier pool '" << overlaypoolstr << "' is not a tier of '" << poolstr << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if (p->read_tier == overlaypool_id) {
       err = 0;
       ss << "overlay for '" << poolstr << "' is now (or already was) '" << overlaypoolstr << "'";
-      goto reply;
+      goto reply_no_propose;
     }
     if (p->has_read_tier()) {
       ss << "pool '" << poolstr << "' has overlay '"
         << osdmap.get_pool_name(p->read_tier)
         << "'; please remove-overlay first";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     // go
@@ -13586,18 +13580,18 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (pool_id < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     const pg_pool_t *p = osdmap.get_pg_pool(pool_id);
     ceph_assert(p);
     if (!p->has_read_tier()) {
       err = 0;
       ss << "there is now (or already was) no overlay for '" << poolstr << "'";
-      goto reply;
+      goto reply_no_propose;
     }
 
     if (!_check_remove_tier(pool_id, p, NULL, &err, &ss)) {
-      goto reply;
+      goto reply_no_propose;
     }
 
     // go
@@ -13624,21 +13618,21 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == -EAGAIN)
       goto wait;
     if (err)
-      goto reply;
+      goto reply_no_propose;
     string poolstr;
     cmd_getval(cmdmap, "pool", poolstr);
     int64_t pool_id = osdmap.lookup_pg_pool_name(poolstr);
     if (pool_id < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     const pg_pool_t *p = osdmap.get_pg_pool(pool_id);
     ceph_assert(p);
     if (!p->is_tier()) {
       ss << "pool '" << poolstr << "' is not a tier";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     string modestr;
     cmd_getval(cmdmap, "mode", modestr);
@@ -13646,7 +13640,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (int(mode) < 0) {
       ss << "'" << modestr << "' is not a valid cache mode";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     bool sure = false;
@@ -13656,7 +13650,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        mode == pg_pool_t::CACHEMODE_READFORWARD) {
       ss << "'" << modestr << "' is no longer a supported cache mode";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     if ((mode != pg_pool_t::CACHEMODE_WRITEBACK &&
         mode != pg_pool_t::CACHEMODE_NONE &&
@@ -13666,7 +13660,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "'" << modestr << "' is not a well-supported cache mode and may "
         << "corrupt your data.  pass --yes-i-really-mean-it to force.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
 
     // pool already has this cache-mode set and there are no pending changes
@@ -13676,7 +13670,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "set cache-mode for pool '" << poolstr << "'"
          << " to " << pg_pool_t::get_cache_mode_name(mode);
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
 
     /* Mode description:
@@ -13715,7 +13709,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
          << pg_pool_t::get_cache_mode_name(pg_pool_t::CACHEMODE_READPROXY)
         << "' allowed.";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     if ((p->cache_mode == pg_pool_t::CACHEMODE_READFORWARD &&
         (mode != pg_pool_t::CACHEMODE_WRITEBACK &&
@@ -13743,7 +13737,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
            << pg_pool_t::get_cache_mode_name(mode) << "' on pool '" << poolstr
            << "': dirty objects found";
         err = -EBUSY;
-        goto reply;
+        goto reply_no_propose;
       }
     }
     // go
@@ -13769,14 +13763,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == -EAGAIN)
       goto wait;
     if (err)
-      goto reply;
+      goto reply_no_propose;
     string poolstr;
     cmd_getval(cmdmap, "pool", poolstr);
     int64_t pool_id = osdmap.lookup_pg_pool_name(poolstr);
     if (pool_id < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     string tierpoolstr;
     cmd_getval(cmdmap, "tierpool", tierpoolstr);
@@ -13784,7 +13778,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (tierpool_id < 0) {
       ss << "unrecognized pool '" << tierpoolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
     const pg_pool_t *p = osdmap.get_pg_pool(pool_id);
     ceph_assert(p);
@@ -13792,7 +13786,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     ceph_assert(tp);
 
     if (!_check_become_tier(tierpool_id, tp, pool_id, p, &err, &ss)) {
-      goto reply;
+      goto reply_no_propose;
     }
 
     int64_t size = 0;
@@ -13800,7 +13794,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "unable to parse 'size' value '"
          << cmd_vartype_stringify(cmdmap.at("size")) << "'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     // make sure new tier is empty
     const pool_stat_t *pstats =
@@ -13808,14 +13802,14 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (pstats && pstats->stats.sum.num_objects != 0) {
       ss << "tier pool '" << tierpoolstr << "' is not empty";
       err = -ENOTEMPTY;
-      goto reply;
+      goto reply_no_propose;
     }
     auto& modestr = g_conf().get_val<string>("osd_tier_default_cache_mode");
     pg_pool_t::cache_mode_t mode = pg_pool_t::get_cache_mode_from_str(modestr);
     if (int(mode) < 0) {
       ss << "osd tier cache default mode '" << modestr << "' is not a valid cache mode";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     HitSet::Params hsp;
     auto& cache_hit_set_type =
@@ -13832,14 +13826,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       ss << "osd tier cache default hit set type '"
         << cache_hit_set_type << "' is not a known type";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
     // go
     pg_pool_t *np = pending_inc.get_new_pool(pool_id, p);
     pg_pool_t *ntp = pending_inc.get_new_pool(tierpool_id, tp);
     if (np->tiers.count(tierpool_id) || ntp->is_tier()) {
-      wait_for_finished_proposal(op, new C_RetryMessage(this, op));
-      return true;
+      goto wait;
     }
     np->tiers.insert(tierpool_id);
     np->read_tier = np->write_tier = tierpool_id;
@@ -13867,7 +13860,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (pool_id < 0) {
       ss << "unrecognized pool '" << poolstr << "'";
       err = -ENOENT;
-      goto reply;
+      goto reply_no_propose;
     }
 
     string field;
@@ -13875,7 +13868,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (field != "max_objects" && field != "max_bytes") {
       ss << "unrecognized field '" << field << "'; should be 'max_bytes' or 'max_objects'";
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     // val could contain unit designations, so we treat as a string
@@ -13893,7 +13886,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (!tss.empty()) {
       ss << "error parsing value '" << val << "': " << tss;
       err = -EINVAL;
-      goto reply;
+      goto reply_no_propose;
     }
 
     pg_pool_t *pi = pending_inc.get_new_pool(pool_id, osdmap.get_pg_pool(pool_id));
@@ -13917,7 +13910,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     if (err == -EAGAIN) {
       goto wait;
     } else if (err < 0) {
-      goto reply;
+      goto reply_no_propose;
     } else {
       goto update;
     }
@@ -13926,7 +13919,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     string pgidstr;
     err = parse_pgid(cmdmap, ss, pgid, pgidstr);
     if (err < 0)
-      goto reply;
+      goto reply_no_propose;
     bool sure = false;
     cmd_getval(cmdmap, "yes_i_really_mean_it", sure);
     if (!sure) {
@@ -13936,7 +13929,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         << "willing to accept that the data is permanently destroyed.  Pass "
         << "--yes-i-really-mean-it to proceed.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     bool creating_now;
     {
@@ -13961,7 +13954,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     } else {
       ss << "pg " << pgid << " already creating";
       err = 0;
-      goto reply;
+      goto reply_no_propose;
     }
   } else if (prefix == "osd force_healthy_stretch_mode") {
     bool sure = false;
@@ -13971,12 +13964,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        "(probably two data centers or availability zones?) and may result in PGs "
        "going inactive until backfilling is complete. Pass --yes-i-really-mean-it to proceed.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     try_end_recovery_stretch_mode(true);
     ss << "Triggering healthy stretch mode";
     err = 0;
-    goto reply;
+    goto reply_no_propose;
   } else if (prefix == "osd force_recovery_stretch_mode") {
     bool sure = false;
     cmd_getval(cmdmap, "yes_i_really_mean_it", sure);
@@ -13986,12 +13979,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        "availability zones?) and should have happened automatically"
        "Pass --yes-i-really-mean-it to proceed.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
     mon.go_recovery_stretch_mode();
     ss << "Triggering recovery stretch mode";
     err = 0;
-    goto reply;
+    goto reply_no_propose;
   } else if (prefix == "osd set-allow-crimson") {
 
     bool sure = false;
@@ -14007,12 +14000,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
         << "If you are sure, add --yes-i-really-mean-it and add 'crimson' to "
         << "the experimental features config.  This setting is irrevocable.";
       err = -EPERM;
-      goto reply;
+      goto reply_no_propose;
     }
 
     err = 0;
     if (osdmap.get_allow_crimson()) {
-      goto reply;
+      goto reply_no_propose;
     } else {
       pending_inc.set_allow_crimson();
       goto update;
@@ -14021,12 +14014,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
     err = -EINVAL;
   }
 
- reply:
+ reply_no_propose:
   getline(ss, rs);
   if (err < 0 && rs.length() == 0)
     rs = cpp_strerror(err);
   mon.reply_command(op, err, rs, rdata, get_last_committed());
-  return ret;
+  return false; /* nothing to propose */
 
  update:
   getline(ss, rs);
@@ -14035,6 +14028,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
   return true;
 
  wait:
+  // XXX
+  // Some osd commands split changes across two epochs.
+  // It seems this is mostly for crush rule changes. It doesn't need
+  // to be this way but it's a bit of work to fix that. For now,
+  // trigger a proposal by returning true and then retry the command
+  // to complete the operation.
   wait_for_finished_proposal(op, new C_RetryMessage(this, op));
   return true;
 }
index 190b93bb82405828db9edd07c436995056cccdfb..349c865835d71c5413e2b4754d3b56b924ed0ae5 100644 (file)
@@ -1212,10 +1212,12 @@ void PGMap::apply_incremental(CephContext *cct, const Incremental& inc)
       stat_osd_sub(t->first, t->second);
       osd_stat.erase(t);
     }
-    for (auto i = pool_statfs.begin();  i != pool_statfs.end(); ++i) {
+    for (auto i = pool_statfs.begin();  i != pool_statfs.end();) {
       if (i->first.second == *p) {
        pg_pool_sum[i->first.first].sub(i->second);
-       pool_statfs.erase(i);
+       i = pool_statfs.erase(i);
+      } else {
+        ++i;
       }
     }
   }
@@ -3337,19 +3339,9 @@ void PGMap::get_health_checks(
     for (auto &it : pools) {
       const pg_pool_t &pool = it.second;
       const string& pool_name = osdmap.get_pool_name(it.first);
-      auto it2 = pg_pool_sum.find(it.first);
-      if (it2 == pg_pool_sum.end()) {
-        continue;
-      }
-      const pool_stat_t *pstat = &it2->second;
-      if (pstat == nullptr) {
-        continue;
-      }
-      const object_stat_sum_t& sum = pstat->stats.sum;
       // application metadata is not encoded until luminous is minimum
       // required release
-      if (sum.num_objects > 0 && pool.application_metadata.empty() &&
-          !pool.is_tier()) {
+      if (pool.application_metadata.empty() && !pool.is_tier()) {
         stringstream ss;
         ss << "application not enabled on pool '" << pool_name << "'";
         detail.push_back(ss.str());
index 5e025437b53570ad78844cb38e7e6c3c6bfeab74..885f1843b31c417c35f766fbecbb390f4ef0510c 100644 (file)
@@ -204,13 +204,16 @@ public:
   /**
    * handle successful authentication (msgr2)
    *
-   * Authenticated result/state will be attached to the Connection.
+   * Authenticated result/state will be attached to the Connection. This is
+   * called via the MonClient.
+   *
+   * Do not acquire locks in this method! It is considered "fast" delivery.
    *
    * return 1 for success
    * return 0 for no action (let another Dispatcher handle it)
    * return <0 for failure (failure to parse caps, for instance)
    */
-  virtual int ms_handle_authentication(Connection *con) {
+  virtual int ms_handle_fast_authentication(Connection *con) {
     return 0;
   }
 
index fdf32b5e09f2bce20439f1c4529316ad1ce95f51..348546abdf01102a9bdf09ed79af323ecf64017f 100644 (file)
@@ -822,9 +822,6 @@ Message *decode_message(CephContext *cct,
     break;
 
 
-  case MSG_MDS_DENTRYUNLINK_ACK:
-    m = make_message<MDentryUnlinkAck>();
-    break;
   case MSG_MDS_DENTRYUNLINK:
     m = make_message<MDentryUnlink>();
     break;
index 9eec1c5bb8385ae176c439734e95eccae596ac3e..f27c5448ea2daa5fce762bae87374704edab799b 100644 (file)
 #define MSG_MDS_OPENINOREPLY       0x210
 #define MSG_MDS_SNAPUPDATE         0x211
 #define MSG_MDS_FRAGMENTNOTIFYACK  0x212
-#define MSG_MDS_DENTRYUNLINK_ACK   0x213
 #define MSG_MDS_LOCK               0x300 // 0x3xx are for locker of mds
 #define MSG_MDS_INODEFILECAPS      0x301
 
index 8051f5907ef113ebef3b6775aef52a2bb0b786e9..683be086efadad84a9221d45e31ba2dbed2bdc43 100644 (file)
@@ -116,6 +116,7 @@ AsyncConnection::AsyncConnection(CephContext *cct, AsyncMessenger *m, DispatchQu
   : Connection(cct, m),
     delay_state(NULL), async_msgr(m), conn_id(q->get_id()),
     logger(w->get_perf_counter()),
+    labeled_logger(w->get_labeled_perf_counter()),
     state(STATE_NONE), port(-1),
     dispatch_queue(q), recv_buf(NULL),
     recv_max_prefetch(std::max<int64_t>(msgr->cct->_conf->ms_tcp_prefetch_max_size, TCP_PREFETCH_MIN_SIZE)),
@@ -791,6 +792,7 @@ void AsyncConnection::tick(uint64_t id)
                                 << target_addr << ", fault."
                                 << dendl;
       protocol->fault();
+      labeled_logger->inc(l_msgr_connection_ready_timeouts);
     } else {
       last_tick_id = center->create_time_event(connect_timeout_us, tick_handler);
     }
@@ -803,6 +805,7 @@ void AsyncConnection::tick(uint64_t id)
                                 << " us, fault."
                                 << dendl;
       protocol->fault();
+      labeled_logger->inc(l_msgr_connection_idle_timeouts);
     } else {
       last_tick_id = center->create_time_event(inactive_timeout_us, tick_handler);
     }
index 82c29985b18d9e7ef9cb56b8d7f71c9ea0d51843..78a590f8ca393eaef103cf4303d19373a2febfce 100644 (file)
@@ -173,6 +173,7 @@ public:
   AsyncMessenger *async_msgr;
   uint64_t conn_id;
   PerfCounters *logger;
+  PerfCounters *labeled_logger;
   int state;
   ConnectedSocket cs;
   int port;
index 9376d46b0bd2ef1af6e4e7087210eb7646699f02..b45ad8ca5155f37dcadbe2ef7b1dffa4b5122deb 100644 (file)
@@ -2414,6 +2414,7 @@ CtPtr ProtocolV1::replace(const AsyncConnectionRef& existing,
               existing->worker->references--;
               new_worker->references++;
               existing->logger = new_worker->get_perf_counter();
+              existing->labeled_logger = new_worker->get_labeled_perf_counter();
               existing->worker = new_worker;
               existing->center = new_center;
               if (existing->delay_state)
index 7cda9637d90f0f0d65f3a9c27b09e6a2043e256c..08426b796b88b16c9e0142a7dc7d58d2d8d071f7 100644 (file)
@@ -2808,6 +2808,7 @@ CtPtr ProtocolV2::reuse_connection(const AsyncConnectionRef& existing,
             existing->worker->references--;
             new_worker->references++;
             existing->logger = new_worker->get_perf_counter();
+            existing->labeled_logger = new_worker->get_labeled_perf_counter();
             existing->worker = new_worker;
             existing->center = new_center;
             if (existing->delay_state)
index 376a87c7268771817d507c0120573dea48f715d9..6739968f4e2b7667e81a1124fcfa6a9c7f942e65 100644 (file)
 #ifndef CEPH_MSG_ASYNC_STACK_H
 #define CEPH_MSG_ASYNC_STACK_H
 
-#include "include/spinlock.h"
 #include "common/perf_counters.h"
-#include "msg/msg_types.h"
+#include "common/perf_counters_key.h"
+#include "include/spinlock.h"
 #include "msg/async/Event.h"
+#include "msg/msg_types.h"
+#include <string>
 
 class Worker;
 class ConnectedSocketImpl {
@@ -214,6 +216,15 @@ enum {
   l_msgr_last,
 };
 
+enum {
+  l_msgr_labeled_first = l_msgr_last + 1,
+
+  l_msgr_connection_ready_timeouts,
+  l_msgr_connection_idle_timeouts,
+
+  l_msgr_labeled_last,
+};
+
 class Worker {
   std::mutex init_lock;
   std::condition_variable init_cond;
@@ -224,6 +235,7 @@ class Worker {
 
   CephContext *cct;
   PerfCounters *perf_logger;
+  PerfCounters *perf_labeled_logger;
   unsigned id;
 
   std::atomic_uint references;
@@ -233,9 +245,11 @@ class Worker {
   Worker& operator=(const Worker&) = delete;
 
   Worker(CephContext *c, unsigned worker_id)
-    : cct(c), perf_logger(NULL), id(worker_id), references(0), center(c) {
+    : cct(c), id(worker_id), references(0), center(c) {
     char name[128];
-    sprintf(name, "AsyncMessenger::Worker-%u", id);
+    char name_prefix[] = "AsyncMessenger::Worker";
+    sprintf(name, "%s-%u", name_prefix, id);
+
     // initialize perf_logger
     PerfCountersBuilder plb(cct, name, l_msgr_first, l_msgr_last);
 
@@ -259,12 +273,35 @@ class Worker {
 
     perf_logger = plb.create_perf_counters();
     cct->get_perfcounters_collection()->add(perf_logger);
+
+    // Add labeled perfcounters
+    std::string labels = ceph::perf_counters::key_create(
+        name_prefix, {{"id", std::to_string(id)}});
+    PerfCountersBuilder plb_labeled(
+        cct, labels, l_msgr_labeled_first,
+        l_msgr_labeled_last);
+
+    plb_labeled.add_u64_counter(
+        l_msgr_connection_ready_timeouts, "msgr_connection_ready_timeouts",
+        "Number of not yet ready connections declared as dead", NULL,
+        PerfCountersBuilder::PRIO_USEFUL);
+    plb_labeled.add_u64_counter(
+        l_msgr_connection_idle_timeouts, "msgr_connection_idle_timeouts",
+        "Number of connections closed due to idleness", NULL,
+        PerfCountersBuilder::PRIO_USEFUL);
+
+    perf_labeled_logger = plb_labeled.create_perf_counters();
+    cct->get_perfcounters_collection()->add(perf_labeled_logger);
   }
   virtual ~Worker() {
     if (perf_logger) {
       cct->get_perfcounters_collection()->remove(perf_logger);
       delete perf_logger;
     }
+    if (perf_labeled_logger) {
+      cct->get_perfcounters_collection()->remove(perf_labeled_logger);
+      delete perf_labeled_logger;
+    }
   }
 
   virtual int listen(entity_addr_t &addr, unsigned addr_slot,
@@ -275,6 +312,7 @@ class Worker {
 
   virtual void initialize() {}
   PerfCounters *get_perf_counter() { return perf_logger; }
+  PerfCounters *get_labeled_perf_counter() { return perf_labeled_logger; }
   void release_worker() {
     int oldref = references.fetch_sub(1);
     ceph_assert(oldref > 0);
index 26eba36a0ec20be4f3288d4b970d82c2bd5dbf1a..afa541862fb8f3f64043906338526da972b70ecf 100644 (file)
@@ -39,7 +39,7 @@ uint64_t AvlAllocator::_pick_block_after(uint64_t *cursor,
   uint64_t search_bytes = 0;
   auto rs_start = range_tree.lower_bound(range_t{*cursor, size}, compare);
   for (auto rs = rs_start; rs != range_tree.end(); ++rs) {
-    uint64_t offset = p2roundup(rs->start, align);
+    uint64_t offset = rs->start;
     *cursor = offset + size;
     if (offset + size <= rs->end) {
       return offset;
@@ -59,7 +59,7 @@ uint64_t AvlAllocator::_pick_block_after(uint64_t *cursor,
   }
   // If we reached end, start from beginning till cursor.
   for (auto rs = range_tree.begin(); rs != rs_start; ++rs) {
-    uint64_t offset = p2roundup(rs->start, align);
+    uint64_t offset = rs->start;
     *cursor = offset + size;
     if (offset + size <= rs->end) {
       return offset;
@@ -82,7 +82,7 @@ uint64_t AvlAllocator::_pick_block_fits(uint64_t size,
   const auto compare = range_size_tree.key_comp();
   auto rs_start = range_size_tree.lower_bound(range_t{0, size}, compare);
   for (auto rs = rs_start; rs != range_size_tree.end(); ++rs) {
-    uint64_t offset = p2roundup(rs->start, align);
+    uint64_t offset = rs->start;
     if (offset + size <= rs->end) {
       return offset;
     }
index 8454ddaf8078c01fe62158014a57a97ba5beb1c4..710021f0787856bbaecce31ab7c6aa752409f6cf 100644 (file)
@@ -658,16 +658,24 @@ void BlueFS::_init_alloc()
   }
   logger->set(l_bluefs_wal_alloc_unit, wal_alloc_size);
 
+
+  uint64_t shared_alloc_size = cct->_conf->bluefs_shared_alloc_size;
+  if (shared_alloc && shared_alloc->a) {
+    uint64_t unit = shared_alloc->a->get_block_size();
+    shared_alloc_size = std::max(
+      unit,
+      shared_alloc_size);
+    ceph_assert(0 == p2phase(shared_alloc_size, unit));
+  }
   if (bdev[BDEV_SLOW]) {
     alloc_size[BDEV_DB] = cct->_conf->bluefs_alloc_size;
-    alloc_size[BDEV_SLOW] = cct->_conf->bluefs_shared_alloc_size;
-    logger->set(l_bluefs_db_alloc_unit, cct->_conf->bluefs_alloc_size);
-    logger->set(l_bluefs_main_alloc_unit, cct->_conf->bluefs_shared_alloc_size);
+    alloc_size[BDEV_SLOW] = shared_alloc_size;
   } else {
-    alloc_size[BDEV_DB] = cct->_conf->bluefs_shared_alloc_size;
-    logger->set(l_bluefs_main_alloc_unit, 0);
-    logger->set(l_bluefs_db_alloc_unit, cct->_conf->bluefs_shared_alloc_size);
+    alloc_size[BDEV_DB] = shared_alloc_size;
+    alloc_size[BDEV_SLOW] = 0;
   }
+  logger->set(l_bluefs_db_alloc_unit, alloc_size[BDEV_DB]);
+  logger->set(l_bluefs_main_alloc_unit, alloc_size[BDEV_SLOW]);
   // new wal and db devices are never shared
   if (bdev[BDEV_NEWWAL]) {
     alloc_size[BDEV_NEWWAL] = cct->_conf->bluefs_alloc_size;
@@ -681,13 +689,13 @@ void BlueFS::_init_alloc()
       continue;
     }
     ceph_assert(bdev[id]->get_size());
-    ceph_assert(alloc_size[id]);
     if (is_shared_alloc(id)) {
       dout(1) << __func__ << " shared, id " << id << std::hex
               << ", capacity 0x" << bdev[id]->get_size()
               << ", block size 0x" << alloc_size[id]
               << std::dec << dendl;
     } else {
+      ceph_assert(alloc_size[id]);
       std::string name = "bluefs-";
       const char* devnames[] = { "wal","db","slow" };
       if (id <= BDEV_SLOW)
index f011ab727c62f83f9bb72133e11ab22e0e265dc9..aa14d0204f7aaad4f52b0f855a33def65b2b56eb 100644 (file)
@@ -11803,7 +11803,7 @@ int BlueStore::_collection_list(
     [&, start_time = mono_clock::now(), func_name = __func__] {
     log_latency_fn(
       func_name,
-      l_bluestore_remove_lat,
+      l_bluestore_clist_lat,
       mono_clock::now() - start_time,
       cct->_conf->bluestore_log_collection_list_age,
       [&](const ceph::timespan& lat) {
index cf08d7ae7d31f0fa14af2df2a157022b7339f849..2455ec111b17054f6781af01ae3dcbf9a83cff59 100644 (file)
@@ -25,7 +25,7 @@ uint64_t BtreeAllocator::_pick_block_after(uint64_t *cursor,
 {
   auto rs_start = range_tree.lower_bound(*cursor);
   for (auto rs = rs_start; rs != range_tree.end(); ++rs) {
-    uint64_t offset = p2roundup(rs->first, align);
+    uint64_t offset = rs->first;
     if (offset + size <= rs->second) {
       *cursor = offset + size;
       return offset;
@@ -37,7 +37,7 @@ uint64_t BtreeAllocator::_pick_block_after(uint64_t *cursor,
   }
   // If we reached end, start from beginning till cursor.
   for (auto rs = range_tree.begin(); rs != rs_start; ++rs) {
-    uint64_t offset = p2roundup(rs->first, align);
+    uint64_t offset = rs->first;
     if (offset + size <= rs->second) {
       *cursor = offset + size;
       return offset;
@@ -53,7 +53,7 @@ uint64_t BtreeAllocator::_pick_block_fits(uint64_t size,
   // the needs
   auto rs_start = range_size_tree.lower_bound(range_value_t{0,size});
   for (auto rs = rs_start; rs != range_size_tree.end(); ++rs) {
-    uint64_t offset = p2roundup(rs->start, align);
+    uint64_t offset = rs->start;
     if (offset + size <= rs->start + rs->size) {
       return offset;
     }
index 550024e67e77dc8d199a473e4cc578d87a2c7af9..8f74a499ed3127e167d1cccf48e064f68876465d 100644 (file)
@@ -52,20 +52,6 @@ void StupidAllocator::_insert_free(uint64_t off, uint64_t len)
   }
 }
 
-/// return the effective length of the extent if we align to alloc_unit
-uint64_t StupidAllocator::_aligned_len(
-  StupidAllocator::interval_set_t::iterator p,
-  uint64_t alloc_unit)
-{
-  uint64_t skew = p.get_start() % alloc_unit;
-  if (skew)
-    skew = alloc_unit - skew;
-  if (skew > p.get_len())
-    return 0;
-  else
-    return p.get_len() - skew;
-}
-
 int64_t StupidAllocator::allocate_int(
   uint64_t want_size, uint64_t alloc_unit, int64_t hint,
   uint64_t *offset, uint32_t *length)
@@ -89,7 +75,7 @@ int64_t StupidAllocator::allocate_int(
     for (bin = orig_bin; bin < (int)free.size(); ++bin) {
       p = free[bin].lower_bound(hint);
       while (p != free[bin].end()) {
-       if (_aligned_len(p, alloc_unit) >= want_size) {
+       if (p.get_len() >= want_size) {
          goto found;
        }
        ++p;
@@ -102,7 +88,7 @@ int64_t StupidAllocator::allocate_int(
     p = free[bin].begin();
     auto end = hint ? free[bin].lower_bound(hint) : free[bin].end();
     while (p != end) {
-      if (_aligned_len(p, alloc_unit) >= want_size) {
+      if (p.get_len() >= want_size) {
        goto found;
       }
       ++p;
@@ -114,7 +100,7 @@ int64_t StupidAllocator::allocate_int(
     for (bin = orig_bin; bin >= 0; --bin) {
       p = free[bin].lower_bound(hint);
       while (p != free[bin].end()) {
-       if (_aligned_len(p, alloc_unit) >= alloc_unit) {
+       if (p.get_len() >= alloc_unit) {
          goto found;
        }
        ++p;
@@ -127,7 +113,7 @@ int64_t StupidAllocator::allocate_int(
     p = free[bin].begin();
     auto end = hint ? free[bin].lower_bound(hint) : free[bin].end();
     while (p != end) {
-      if (_aligned_len(p, alloc_unit) >= alloc_unit) {
+      if (p.get_len() >= alloc_unit) {
        goto found;
       }
       ++p;
@@ -137,11 +123,9 @@ int64_t StupidAllocator::allocate_int(
   return -ENOSPC;
 
  found:
-  uint64_t skew = p.get_start() % alloc_unit;
-  if (skew)
-    skew = alloc_unit - skew;
-  *offset = p.get_start() + skew;
-  *length = std::min(std::max(alloc_unit, want_size), p2align((p.get_len() - skew), alloc_unit));
+  *offset = p.get_start();
+  *length = std::min(std::max(alloc_unit, want_size), p2align(p.get_len(), alloc_unit));
+
   if (cct->_conf->bluestore_debug_small_allocations) {
     uint64_t max =
       alloc_unit * (rand() % cct->_conf->bluestore_debug_small_allocations);
@@ -158,7 +142,7 @@ int64_t StupidAllocator::allocate_int(
 
   free[bin].erase(*offset, *length);
   uint64_t off, len;
-  if (*offset && free[bin].contains(*offset - skew - 1, &off, &len)) {
+  if (*offset && free[bin].contains(*offset - 1, &off, &len)) {
     int newbin = _choose_bin(len);
     if (newbin != bin) {
       ldout(cct, 30) << __func__ << " demoting 0x" << std::hex << off << "~" << len
index 0d50d73f42afdfe788715562328d01b59c957207..443b091350e168cdeb3f3caef24d0a6f17399f24 100644 (file)
@@ -31,10 +31,6 @@ class StupidAllocator : public Allocator {
   unsigned _choose_bin(uint64_t len);
   void _insert_free(uint64_t offset, uint64_t len);
 
-  uint64_t _aligned_len(
-    interval_set_t::iterator p,
-    uint64_t alloc_unit);
-
 public:
   StupidAllocator(CephContext* cct,
                   int64_t size,
index 41775c8a3070d2fbec4f63f87146176e27b69add..e63616bdd0203bb1ae41a037e88b0ea019bc8025 100644 (file)
@@ -878,17 +878,17 @@ int main(int argc, char **argv)
        return {"", false};
       }
       std::error_code ec;
-      fs::path target_path = fs::weakly_canonical(fs::path{dev_target}, ec);
+      fs::path target = fs::weakly_canonical(fs::path{dev_target}, ec);
       if (ec) {
        cerr << "failed to retrieve absolute path for " << dev_target
             << ": " << ec.message()
             << std::endl;
        exit(EXIT_FAILURE);
       }
-      return {target_path.native(),
-              (fs::exists(target_path) &&
-              fs::is_regular_file(target_path) &&
-              fs::file_size(target_path) > 0)};
+      return {target.native(),
+              fs::exists(target) &&
+               (fs::is_block_file(target) ||
+                (fs::is_regular_file(target) && fs::file_size(target) > 0))};
     }();
     // Attach either DB or WAL volume, create if needed
     // check if we need additional size specification
index 595b124856f3ccdd65cd75004dc72291c2b89667..4f735ba2efeebbe49c578d38cfa3d0cdc57f0dc0 100644 (file)
@@ -17,19 +17,9 @@ uint64_t AllocatorLevel::l2_allocs = 0;
 
 inline interval_t _align2units(uint64_t offset, uint64_t len, uint64_t min_length)
 {
-  interval_t res;
-  if (len >= min_length) {
-    res.offset = p2roundup(offset, min_length);
-    auto delta_off = res.offset - offset;
-    if (len > delta_off) {
-      res.length = len - delta_off;
-      res.length = p2align<uint64_t>(res.length, min_length);
-      if (res.length) {
-       return res;
-      }
-    }
-  }
-  return interval_t();
+  return len >= min_length ?
+    interval_t(offset, p2align<uint64_t>(len, min_length)) :
+    interval_t();
 }
 
 interval_t AllocatorLevel01Loose::_get_longest_from_l0(uint64_t pos0,
index 222164dd8a0708376f63cb22f15f40fb91560030..c61e7d33218abaa74b5ea02d736d03ca0217c4b7 100644 (file)
@@ -1418,14 +1418,14 @@ MOSDMap *OSDService::build_incremental_map_msg(epoch_t since, epoch_t to,
   for (epoch_t e = since + 1; e <= to; ++e) {
     bufferlist bl;
     if (get_inc_map_bl(e, bl)) {
-      m->incremental_maps[e] = std::move(bl);
+      m->incremental_maps[e] = bl;
     } else {
       dout(10) << __func__ << " missing incremental map " << e << dendl;
       if (!get_map_bl(e, bl)) {
        derr << __func__ << " also missing full map " << e << dendl;
        goto panic;
       }
-      m->maps[e] = std::move(bl);
+      m->maps[e] = bl;
     }
     max--;
     max_bytes -= bl.length();
@@ -7444,7 +7444,7 @@ void OSD::ms_fast_dispatch(Message *m)
   OID_EVENT_TRACE_WITH_MSG(m, "MS_FAST_DISPATCH_END", false);
 }
 
-int OSD::ms_handle_authentication(Connection *con)
+int OSD::ms_handle_fast_authentication(Connection *con)
 {
   int ret = 0;
   auto s = ceph::ref_cast<Session>(con->get_priv());
index 1b714d3bd192b13e457163b914083e9d41c829ab..00fab7ec83ed6947eb9a56ff54471fcfb3b6d368 100644 (file)
@@ -1525,7 +1525,7 @@ public:
     bool ms_handle_refused(Connection *con) override {
       return osd->ms_handle_refused(con);
     }
-    int ms_handle_authentication(Connection *con) override {
+    int ms_handle_fast_authentication(Connection *con) override {
       return true;
     }
   } heartbeat_dispatcher;
@@ -1948,7 +1948,7 @@ private:
   void ms_handle_connect(Connection *con) override;
   void ms_handle_fast_connect(Connection *con) override;
   void ms_handle_fast_accept(Connection *con) override;
-  int ms_handle_authentication(Connection *con) override;
+  int ms_handle_fast_authentication(Connection *con) override;
   bool ms_handle_reset(Connection *con) override;
   void ms_handle_remote_reset(Connection *con) override {}
   bool ms_handle_refused(Connection *con) override;
index 710e39b215ac369bdac273f83b0ae243ec4b7bb8..7a97f33e3786d5a6f471a2cf929072b659148146 100644 (file)
@@ -2145,8 +2145,8 @@ bool OSDMap::check_pg_upmaps(
                        << j->first << " " << j->second
                        << dendl;
         to_cancel->push_back(pg);
-      } else {
-        //Josh--check partial no-op here.
+      } else if (newmap != j->second) {
+        // check partial no-op here.
         ldout(cct, 10) << __func__ << " simplifying partially no-op pg_upmap_items "
                        << j->first << " " << j->second
                        << " -> " << newmap
@@ -4096,6 +4096,8 @@ string OSDMap::get_flag_string(unsigned f)
     s += ",purged_snapdirs";
   if (f & CEPH_OSDMAP_PGLOG_HARDLIMIT)
     s += ",pglog_hardlimit";
+  if (f & CEPH_OSDMAP_NOAUTOSCALE)
+    s += ",noautoscale";
   if (s.length())
     s.erase(0, 1);
   return s;
@@ -4981,17 +4983,16 @@ int OSDMap::balance_primaries(
   map<uint64_t,set<pg_t>> acting_prims_by_osd;
   pgs_by_osd = tmp_osd_map.get_pgs_by_osd(cct, pid, &prim_pgs_by_osd, &acting_prims_by_osd);
 
-  // Transfer pgs into a map, `pgs_to_check`. This will tell us the total num_changes after all
-  //     calculations have been finalized.
-  // Transfer osds into a set, `osds_to_check`.
-  // This is to avoid poor runtime when we loop through the pgs and to set up
-  // our call to calc_desired_primary_distribution.
+  // Construct information about the pgs and osds we will consider in new primary mappings,
+  // as well as a map of all pgs and their original primary osds.
   map<pg_t,bool> prim_pgs_to_check;
   vector<uint64_t> osds_to_check;
+  map<pg_t, uint64_t> orig_prims;
   for (const auto & [osd, pgs] : prim_pgs_by_osd) {
     osds_to_check.push_back(osd);
     for (const auto & pg : pgs) {
       prim_pgs_to_check.insert({pg, false});
+      orig_prims.insert({pg, osd});
     }
   }
 
@@ -5065,9 +5066,14 @@ int OSDMap::balance_primaries(
        prim_dist_scores[up_primary] -= 1;
 
        // Update the mappings
-       pending_inc->new_pg_upmap_primary[pg] = curr_best_osd;
        tmp_osd_map.pg_upmap_primaries[pg] = curr_best_osd;
-       prim_pgs_to_check[pg] = true; // mark that this pg changed mappings
+       if (curr_best_osd == orig_prims[pg]) {
+          pending_inc->new_pg_upmap_primary.erase(pg);
+          prim_pgs_to_check[pg] = false;
+       } else {
+         pending_inc->new_pg_upmap_primary[pg] = curr_best_osd;
+          prim_pgs_to_check[pg] = true; // mark that this pg changed mappings
+       }
 
        curr_num_changes++;
       }
@@ -7201,6 +7207,24 @@ void OSDMap::check_health(CephContext *cct,
                            ss.str(), 0);
     }
   }
+  // UNEQUAL_WEIGHT
+  if (stretch_mode_enabled) {
+    vector<int> subtrees;
+    crush->get_subtree_of_type(stretch_mode_bucket, &subtrees);
+    if (subtrees.size() != 2) {
+      stringstream ss;
+      ss << "Stretch mode buckets != 2";
+      checks->add("INCORRECT_NUM_BUCKETS_STRETCH_MODE", HEALTH_WARN, ss.str(), 0);
+      return;
+    }
+    int weight1 = crush->get_item_weight(subtrees[0]);
+    int weight2 = crush->get_item_weight(subtrees[1]);
+    stringstream ss;
+    if (weight1 != weight2) {
+      ss << "Stretch mode buckets have different weights!";
+      checks->add("UNEVEN_WEIGHTS_STRETCH_MODE", HEALTH_WARN, ss.str(), 0);
+    }
+  }
 }
 
 int OSDMap::parse_osd_id_list(const vector<string>& ls, set<int> *out,
index cd62c922d6d45b96e9c9f9889400a2ef9c5f5cfd..59889fc533f69666396d3f92df09789b9742e590 100644 (file)
@@ -88,7 +88,7 @@ void OpRequest::_dump(Formatter *f) const
   }
 }
 
-void OpRequest::_dump_op_descriptor_unlocked(ostream& stream) const
+void OpRequest::_dump_op_descriptor(ostream& stream) const
 {
   get_req()->print(stream);
 }
@@ -121,6 +121,7 @@ void OpRequest::mark_flag_point(uint8_t flag, const char *s) {
   uint8_t old_flags = hit_flag_points;
 #endif
   mark_event(s);
+  last_event_detail = s;
   hit_flag_points |= flag;
   latest_flag_point = flag;
   tracepoint(oprequest, mark_flag_point, reqid.name._type,
index e0bc232a53b2d8428b4aeb6d19d4a8f13cfc80d7..1a608b58341b28d3b1c48abd452fb080a159c5f9 100644 (file)
@@ -63,6 +63,7 @@ private:
   entity_inst_t req_src_inst;
   uint8_t hit_flag_points;
   uint8_t latest_flag_point;
+  const char* last_event_detail = nullptr;
   utime_t dequeued_time;
   static const uint8_t flag_queued_for_pg=1 << 0;
   static const uint8_t flag_reached_pg =  1 << 1;
@@ -74,7 +75,7 @@ private:
   OpRequest(Message *req, OpTracker *tracker);
 
 protected:
-  void _dump_op_descriptor_unlocked(std::ostream& stream) const override;
+  void _dump_op_descriptor(std::ostream& stream) const override;
   void _unregistered() override;
   bool filter_out(const std::set<std::string>& filters) override;
 
@@ -107,11 +108,11 @@ public:
     return latest_flag_point;
   }
 
-  std::string_view state_string() const override {
+  std::string _get_state_string() const override {
     switch(latest_flag_point) {
     case flag_queued_for_pg: return "queued for pg";
     case flag_reached_pg: return "reached pg";
-    case flag_delayed: return "delayed";
+    case flag_delayed: return last_event_detail;
     case flag_started: return "started";
     case flag_sub_op_sent: return "waiting for sub ops";
     case flag_commit_sent: return "commit sent; apply or cleanup";
@@ -152,8 +153,8 @@ public:
   void mark_reached_pg() {
     mark_flag_point(flag_reached_pg, "reached_pg");
   }
-  void mark_delayed(const std::string& s) {
-    mark_flag_point_string(flag_delayed, s);
+  void mark_delayed(const char* s) {
+    mark_flag_point(flag_delayed, s);
   }
   void mark_started() {
     mark_flag_point(flag_started, "started");
diff --git a/ceph/src/osd/object_state_fmt.h b/ceph/src/osd/object_state_fmt.h
new file mode 100644 (file)
index 0000000..6b6350b
--- /dev/null
@@ -0,0 +1,23 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+#pragma once
+/**
+ * \file fmtlib formatters for some types.h classes
+ */
+
+#include "osd/object_state.h"
+#include "osd/osd_types_fmt.h"
+#if FMT_VERSION >= 90000
+#include <fmt/ostream.h>
+#endif
+
+template <>
+struct fmt::formatter<ObjectState> {
+  constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
+
+  template <typename FormatContext>
+  auto format(const ObjectState& os, FormatContext& ctx) const
+  {
+    return fmt::format_to(ctx.out(), "exists {} oi {}", os.exists, os.oi);
+  }
+};
index 8f76e516530dadaba45b581fc2a76435b085c712..0ea519655d85b5a4e02fc3010658213336367e9a 100644 (file)
@@ -340,8 +340,7 @@ uint32_t mClockScheduler::calc_scaled_cost(int item_cost)
       item_cost));
   auto cost_per_io = static_cast<uint32_t>(osd_bandwidth_cost_per_io);
 
-  // Calculate total scaled cost in bytes
-  return cost_per_io + cost;
+  return std::max<uint32_t>(cost, cost_per_io);
 }
 
 void mClockScheduler::update_configuration()
index 3d958bed9dcd4f3cf012114143be99a6afb80d1d..f708b1d7a1e38cdb487d0c723b97835000db866b 100644 (file)
@@ -38,12 +38,30 @@ constexpr double default_max = std::numeric_limits<double>::is_iec559 ?
   std::numeric_limits<double>::infinity() :
   std::numeric_limits<double>::max();
 
-using client_id_t = uint64_t;
-using profile_id_t = uint64_t;
-
+/**
+ * client_profile_id_t
+ *
+ * client_id - global id (client.####) for client QoS
+ * profile_id - id generated by client's QoS profile
+ *
+ * Currently (Reef and below), both members are set to
+ * 0 which ensures that all external clients share the
+ * mClock profile allocated reservation and limit
+ * bandwidth.
+ *
+ * Note: Post Reef, both members will be set to non-zero
+ * values when the distributed feature of the mClock
+ * algorithm is utilized.
+ */
 struct client_profile_id_t {
-  client_id_t client_id;
-  profile_id_t profile_id;
+  uint64_t client_id = 0;
+  uint64_t profile_id = 0;
+
+  client_profile_id_t(uint64_t _client_id, uint64_t _profile_id) :
+    client_id(_client_id),
+    profile_id(_profile_id) {}
+
+  client_profile_id_t() = default;
 
   auto operator<=>(const client_profile_id_t&) const = default;
   friend std::ostream& operator<<(std::ostream& out,
@@ -177,10 +195,7 @@ class mClockScheduler : public OpScheduler, md_config_obs_t {
   static scheduler_id_t get_scheduler_id(const OpSchedulerItem &item) {
     return scheduler_id_t{
       item.get_scheduler_class(),
-       client_profile_id_t{
-       item.get_owner(),
-         0
-         }
+      client_profile_id_t()
     };
   }
 
index 66e2f2bf96315293e5c0a2b51377c2d50b8a88a7..9ad73d576e4e557b566d53bb25df24e8df6903b5 100644 (file)
@@ -1,4 +1,4 @@
-if(ALLOCATOR STREQUAL "tcmalloc" AND NOT WITH_SEASTAR)
+if(ALLOCATOR STREQUAL "tcmalloc")
   add_library(heap_profiler STATIC
     heap_profiler.cc)
   target_link_libraries(heap_profiler
index 4636b4bf45d26aefcd493316eb89f1bfab790f0c..69d24912b4c492a0448b3e8f6a4fcebd2c664769 100644 (file)
@@ -36,6 +36,13 @@ cdef extern from "cephfs/libcephfs.h" nogil:
         size_t nr_snap_metadata
         snap_metadata *snap_metadata
 
+    cdef struct ceph_snapdiff_info:
+        pass
+
+    cdef struct ceph_snapdiff_entry_t:
+        dirent dir_entry
+        uint64_t snapid
+
     ctypedef void* rados_t
 
     const char *ceph_version(int *major, int *minor, int *patch)
@@ -111,6 +118,14 @@ cdef extern from "cephfs/libcephfs.h" nogil:
     void ceph_seekdir(ceph_mount_info *cmount, ceph_dir_result *dirp, int64_t offset)
     int ceph_chdir(ceph_mount_info *cmount, const char *path)
     dirent * ceph_readdir(ceph_mount_info *cmount, ceph_dir_result *dirp)
+    int ceph_open_snapdiff(ceph_mount_info *cmount,
+                           const char *root_path,
+                           const char *rel_path,
+                           const char *snap1,
+                           const char *snap2,
+                           ceph_snapdiff_info *out)
+    int ceph_readdir_snapdiff(ceph_snapdiff_info *snapdiff, ceph_snapdiff_entry_t *out);
+    int ceph_close_snapdiff(ceph_snapdiff_info *snapdiff)
     int ceph_rmdir(ceph_mount_info *cmount, const char *path)
     const char* ceph_getcwd(ceph_mount_info *cmount)
     int ceph_sync_fs(ceph_mount_info *cmount)
index fca3846de64a6a79fec4e1c62965f9cc24c08b84..793d88b985013770442013ea91ee0fc576f356a9 100644 (file)
@@ -57,6 +57,8 @@ CEPH_SETATTR_SIZE  = 0x20
 CEPH_SETATTR_CTIME = 0x40
 CEPH_SETATTR_BTIME = 0x200
 
+CEPH_NOSNAP = -2
+
 # errno definitions
 cdef enum:
     CEPHFS_EBLOCKLISTED = 108
@@ -219,7 +221,7 @@ cdef make_ex(ret, msg):
 
 
 class DirEntry(namedtuple('DirEntry',
-               ['d_ino', 'd_off', 'd_reclen', 'd_type', 'd_name'])):
+               ['d_ino', 'd_off', 'd_reclen', 'd_type', 'd_name', 'd_snapid'])):
     DT_DIR = 0x4
     DT_REG = 0x8
     DT_LNK = 0xA
@@ -277,13 +279,15 @@ cdef class DirResult(object):
                             d_off=0,
                             d_reclen=dirent.d_reclen,
                             d_type=dirent.d_type,
-                            d_name=dirent.d_name)
+                            d_name=dirent.d_name,
+                            d_snapid=CEPH_NOSNAP)
         ELSE:
             return DirEntry(d_ino=dirent.d_ino,
                             d_off=dirent.d_off,
                             d_reclen=dirent.d_reclen,
                             d_type=dirent.d_type,
-                            d_name=dirent.d_name)
+                            d_name=dirent.d_name,
+                            d_snapid=CEPH_NOSNAP)
 
     def close(self):
         if self.handle:
@@ -321,6 +325,56 @@ cdef class DirResult(object):
         with nogil:
             ceph_seekdir(self.lib.cluster, self.handle, _offset)
 
+cdef class SnapDiffHandle(object):
+    cdef LibCephFS lib
+    cdef ceph_snapdiff_info handle
+    cdef int opened
+
+    def __cinit__(self, _lib):
+        self.opened = 0
+        self.lib = _lib
+
+    def __dealloc__(self):
+        self.close()
+
+    def readdir(self):
+        self.lib.require_state("mounted")
+
+        cdef:
+            ceph_snapdiff_entry_t difent
+        with nogil:
+            ret = ceph_readdir_snapdiff(&self.handle, &difent)
+        if ret < 0:
+            raise make_ex(ret, "ceph_readdir_snapdiff failed, ret {}"
+                .format(ret))
+        if ret == 0:
+            return None
+
+        IF UNAME_SYSNAME == "FreeBSD" or UNAME_SYSNAME == "Darwin":
+            return DirEntry(d_ino=difent.dir_entry.d_ino,
+                            d_off=0,
+                            d_reclen=difent.dir_entry.d_reclen,
+                            d_type=difent.dir_entry.d_type,
+                            d_name=difent.dir_entry.d_name,
+                            d_snapid=difent.snapid)
+        ELSE:
+            return DirEntry(d_ino=difent.dir_entry.d_ino,
+                            d_off=difent.dir_entry.d_off,
+                            d_reclen=difent.dir_entry.d_reclen,
+                            d_type=difent.dir_entry.d_type,
+                            d_name=difent.dir_entry.d_name,
+                            d_snapid=difent.snapid)
+
+    def close(self):
+        if (not self.opened):
+            return
+        self.lib.require_state("mounted")
+        with nogil:
+            ret = ceph_close_snapdiff(&self.handle)
+        if ret < 0:
+            raise make_ex(ret, "closesnapdiff failed")
+        self.opened = 0
+
 
 def cstr(val, name, encoding="utf-8", opt=False) -> bytes:
     """
@@ -974,6 +1028,34 @@ cdef class LibCephFS(object):
 
         return handle.close()
 
+    def opensnapdiff(self, root_path, rel_path, snap1name, snap2name) -> SnapDiffHandle:
+        """
+        Open the given directory.
+
+        :param path: the path name of the directory to open.  Must be either an absolute path
+                     or a path relative to the current working directory.
+        :returns: the open directory stream handle
+        """
+        self.require_state("mounted")
+
+        h = SnapDiffHandle(self)
+        root = cstr(root_path, 'root')
+        relp = cstr(rel_path, 'relp')
+        snap1 = cstr(snap1name, 'snap1')
+        snap2 = cstr(snap2name, 'snap2')
+        cdef:
+            char* _root = root
+            char* _relp = relp
+            char* _snap1 = snap1
+            char* _snap2 = snap2
+        with nogil:
+            ret = ceph_open_snapdiff(self.cluster, _root, _relp, _snap1, _snap2, &h.handle);
+        if ret < 0:
+            raise make_ex(ret, "open_snapdiff failed for {} vs. {}"
+                .format(snap1.decode('utf-8'), snap2.decode('utf-8')))
+        h.opened = 1
+        return h
+
     def rewinddir(self, DirResult handle):
         """
         Rewind the directory stream to the beginning of the directory.
index 1dec0d50d5476584c5f8de812b56628ce33fa019..54b27d04c6742b7dc57a0f34babd33e54f1f05ef 100644 (file)
@@ -39,6 +39,12 @@ cdef nogil:
         size_t nr_snap_metadata
         snap_metadata *snap_metadata
 
+    cdef struct ceph_snapdiff_info:
+        int dummy
+
+    cdef struct ceph_snapdiff_entry_t:
+        int dummy
+
     ctypedef void* rados_t
 
     const char *ceph_version(int *major, int *minor, int *patch):
@@ -175,6 +181,12 @@ cdef nogil:
         pass
     dirent * ceph_readdir(ceph_mount_info *cmount, ceph_dir_result *dirp):
         pass
+    int ceph_open_snapdiff(ceph_mount_info *cmount, const char *root_path, const char *rel_path, const char *snap1path, const char *snap2root, ceph_snapdiff_info *out):
+        pass
+    int ceph_readdir_snapdiff(ceph_snapdiff_info *snapdiff, ceph_snapdiff_entry_t *out):
+        pass
+    int ceph_close_snapdiff(ceph_snapdiff_info *snapdiff):
+        pass
     int ceph_rmdir(ceph_mount_info *cmount, const char *path):
         pass
     const char* ceph_getcwd(ceph_mount_info *cmount):
index b89402d01be09ef6a53f5d1ef46e5463d3ea7e7e..50147f08f30dbd2533fea8b6d35fe1cd9e8ceded 100644 (file)
@@ -112,7 +112,7 @@ class BaseMgrModule(object):
     def _ceph_remove_mds_perf_query(self, query_id: int) -> None: ...
     def _ceph_reregister_mds_perf_queries(self) -> None: ...
     def _ceph_get_mds_perf_counters(self, query_id: int) -> Optional[Dict[str, List[PerfCounterT]]]: ...
-    def _ceph_unregister_client(self, addrs: str) -> None: ...
-    def _ceph_register_client(self, addrs: str) -> None: ...
+    def _ceph_unregister_client(self, name: Optional[str], addrs: str) -> None: ...
+    def _ceph_register_client(self, name: Optional[str], addrs: str, replace: Optional[bool]) -> None: ...
     def _ceph_is_authorized(self, arguments: Dict[str, str]) -> bool: ...
     def _ceph_get_daemon_health_metrics(self) -> Dict[str, List[Dict[str, Any]]]: ...
index 41a0b5b0b6adb4d6e3f09ea67a27aef1082b5526..93a08cb3439bdb9000af7b15fb62f067266caa30 100644 (file)
@@ -337,7 +337,7 @@ class CephadmAgentHelpers:
     def _agent_down(self, host: str) -> bool:
         # if host is draining or drained (has _no_schedule label) there should not
         # be an agent deployed there and therefore we should return False
-        if host not in [h.hostname for h in self.mgr.cache.get_non_draining_hosts()]:
+        if self.mgr.cache.is_host_draining(host):
             return False
         # if we haven't deployed an agent on the host yet, don't say an agent is down
         if not self.mgr.cache.get_daemons_by_type('agent', host=host):
diff --git a/ceph/src/pybind/mgr/cephadm/exchange.py b/ceph/src/pybind/mgr/cephadm/exchange.py
new file mode 100644 (file)
index 0000000..76a6134
--- /dev/null
@@ -0,0 +1,164 @@
+# Data exchange formats for communicating more
+# complex data structures between the cephadm binary
+# an the mgr module.
+
+import json
+
+from typing import (
+    Any,
+    Callable,
+    Dict,
+    List,
+    Optional,
+    TypeVar,
+    Union,
+    cast,
+)
+
+
+FuncT = TypeVar("FuncT", bound=Callable)
+
+
+class _DataField:
+    """A descriptor to map object fields into a data dictionary."""
+
+    def __init__(
+        self,
+        name: Optional[str] = None,
+        field_type: Optional[FuncT] = None,
+    ):
+        self.name = name
+        self.field_type = field_type
+
+    def __set_name__(self, _: str, name: str) -> None:
+        if not self.name:
+            self.name = name
+
+    def __get__(self, obj: Any, objtype: Any = None) -> Any:
+        return obj.data[self.name]
+
+    def __set__(self, obj: Any, value: Any) -> None:
+        if self.field_type is not None:
+            obj.data[self.name] = self.field_type(value)
+        else:
+            obj.data[self.name] = value
+
+
+def _get_data(obj: Any) -> Any:
+    """Wrapper to get underlying data dicts from objects that
+    advertise having them.
+    """
+    _gd = getattr(obj, "get_data", None)
+    if _gd:
+        return _gd()
+    return obj
+
+
+def _or_none(field_type: FuncT) -> FuncT:
+    def _field_type_or_none(value: Any) -> Any:
+        if value is None:
+            return None
+        return field_type(value)
+
+    return cast(FuncT, _field_type_or_none)
+
+
+class DeployMeta:
+    """Deployment metadata. Child of Deploy. Used by cephadm to
+    determine when certain changes have been made.
+    """
+
+    service_name = _DataField(field_type=str)
+    ports = _DataField(field_type=list)
+    ip = _DataField(field_type=_or_none(str))
+    deployed_by = _DataField(field_type=_or_none(list))
+    rank = _DataField(field_type=_or_none(int))
+    rank_generation = _DataField(field_type=_or_none(int))
+    extra_container_args = _DataField(field_type=_or_none(list))
+    extra_entrypoint_args = _DataField(field_type=_or_none(list))
+
+    def __init__(
+        self,
+        init_data: Optional[Dict[str, Any]] = None,
+        *,
+        service_name: str = "",
+        ports: Optional[List[int]] = None,
+        ip: Optional[str] = None,
+        deployed_by: Optional[List[str]] = None,
+        rank: Optional[int] = None,
+        rank_generation: Optional[int] = None,
+        extra_container_args: Optional[List[Union[str, Dict[str, Any]]]] = None,
+        extra_entrypoint_args: Optional[List[Union[str, Dict[str, Any]]]] = None,
+    ):
+        self.data = dict(init_data or {})
+        # set fields
+        self.service_name = service_name
+        self.ports = ports or []
+        self.ip = ip
+        self.deployed_by = deployed_by
+        self.rank = rank
+        self.rank_generation = rank_generation
+        self.extra_container_args = extra_container_args
+        self.extra_entrypoint_args = extra_entrypoint_args
+
+    def get_data(self) -> Dict[str, Any]:
+        return self.data
+
+    to_simplified = get_data
+
+    @classmethod
+    def convert(
+        cls,
+        value: Union[Dict[str, Any], "DeployMeta", None],
+    ) -> "DeployMeta":
+        if not isinstance(value, DeployMeta):
+            return cls(value)
+        return value
+
+
+class Deploy:
+    """Set of fields that instructs cephadm to deploy a
+    service/daemon.
+    """
+
+    fsid = _DataField(field_type=str)
+    name = _DataField(field_type=str)
+    image = _DataField(field_type=str)
+    deploy_arguments = _DataField(field_type=list)
+    params = _DataField(field_type=dict)
+    meta = _DataField(field_type=DeployMeta.convert)
+    config_blobs = _DataField(field_type=dict)
+
+    def __init__(
+        self,
+        init_data: Optional[Dict[str, Any]] = None,
+        *,
+        fsid: str = "",
+        name: str = "",
+        image: str = "",
+        deploy_arguments: Optional[List[str]] = None,
+        params: Optional[Dict[str, Any]] = None,
+        meta: Optional[DeployMeta] = None,
+        config_blobs: Optional[Dict[str, Any]] = None,
+    ):
+        self.data = dict(init_data or {})
+        # set fields
+        self.fsid = fsid
+        self.name = name
+        self.image = image
+        self.deploy_arguments = deploy_arguments or []
+        self.params = params or {}
+        self.meta = DeployMeta.convert(meta)
+        self.config_blobs = config_blobs or {}
+
+    def get_data(self) -> Dict[str, Any]:
+        """Return the underlying data dict."""
+        return self.data
+
+    def to_simplified(self) -> Dict[str, Any]:
+        """Return a simplified serializable version of the object."""
+        return {k: _get_data(v) for k, v in self.get_data().items()}
+
+    def dump_json_str(self) -> str:
+        """Return the object's JSON string representation."""
+        return json.dumps(self.to_simplified())
index 98c9a488078eed26770353044821f03828e1eb67..7153ca6dcde37e34bfba87a932b04acfc8263fe8 100644 (file)
@@ -17,7 +17,7 @@ from ceph.utils import str_to_datetime, datetime_to_str, datetime_now
 from orchestrator import OrchestratorError, HostSpec, OrchestratorEvent, service_to_daemon_types
 from cephadm.services.cephadmservice import CephadmDaemonDeploySpec
 
-from .utils import resolve_ip
+from .utils import resolve_ip, SpecialHostLabels
 from .migrations import queue_migrate_nfs_spec, queue_migrate_rgw_spec
 
 if TYPE_CHECKING:
@@ -1003,29 +1003,60 @@ class HostCache():
             h for h in self.mgr.inventory.all_specs()
             if (
                 self.host_had_daemon_refresh(h.hostname)
-                and '_no_schedule' not in h.labels
+                and SpecialHostLabels.DRAIN_DAEMONS not in h.labels
+            )
+        ]
+
+    def get_conf_keyring_available_hosts(self) -> List[HostSpec]:
+        """
+        Returns all hosts without the drain conf and keyrings
+        label (SpecialHostLabels.DRAIN_CONF_KEYRING) that have
+        had a refresh. That is equivalent to all hosts we
+        consider eligible for deployment of conf and keyring files
+
+        Any host without that label is considered fair game for
+        a client keyring spec to match. However, we want to still
+        wait for refresh here so that we know what keyrings we've
+        already deployed here
+        """
+        return [
+            h for h in self.mgr.inventory.all_specs()
+            if (
+                self.host_had_daemon_refresh(h.hostname)
+                and SpecialHostLabels.DRAIN_CONF_KEYRING not in h.labels
             )
         ]
 
     def get_non_draining_hosts(self) -> List[HostSpec]:
         """
-        Returns all hosts that do not have _no_schedule label.
+        Returns all hosts that do not have drain daemon label
+        (SpecialHostLabels.DRAIN_DAEMONS).
 
         Useful for the agent who needs this specific list rather than the
         schedulable_hosts since the agent needs to be deployed on hosts with
         no daemon refresh
         """
         return [
-            h for h in self.mgr.inventory.all_specs() if '_no_schedule' not in h.labels
+            h for h in self.mgr.inventory.all_specs() if SpecialHostLabels.DRAIN_DAEMONS not in h.labels
         ]
 
     def get_draining_hosts(self) -> List[HostSpec]:
         """
-        Returns all hosts that have _no_schedule label and therefore should have
-        no daemons placed on them, but are potentially still reachable
+        Returns all hosts that have the drain daemons label (SpecialHostLabels.DRAIN_DAEMONS)
+        and therefore should have no daemons placed on them, but are potentially still reachable
         """
         return [
-            h for h in self.mgr.inventory.all_specs() if '_no_schedule' in h.labels
+            h for h in self.mgr.inventory.all_specs() if SpecialHostLabels.DRAIN_DAEMONS in h.labels
+        ]
+
+    def get_conf_keyring_draining_hosts(self) -> List[HostSpec]:
+        """
+        Returns all hosts that have drain conf and keyrings label (SpecialHostLabels.DRAIN_CONF_KEYRING)
+        and therefore should have no config files or client keyring placed on them, but are
+        potentially still reachable
+        """
+        return [
+            h for h in self.mgr.inventory.all_specs() if SpecialHostLabels.DRAIN_CONF_KEYRING in h.labels
         ]
 
     def get_unreachable_hosts(self) -> List[HostSpec]:
@@ -1045,6 +1076,18 @@ class HostCache():
             )
         ]
 
+    def is_host_unreachable(self, hostname: str) -> bool:
+        # take hostname and return if it matches the hostname of an unreachable host
+        return hostname in [h.hostname for h in self.get_unreachable_hosts()]
+
+    def is_host_schedulable(self, hostname: str) -> bool:
+        # take hostname and return if it matches the hostname of a schedulable host
+        return hostname in [h.hostname for h in self.get_schedulable_hosts()]
+
+    def is_host_draining(self, hostname: str) -> bool:
+        # take hostname and return if it matches the hostname of a draining host
+        return hostname in [h.hostname for h in self.get_draining_hosts()]
+
     def get_facts(self, host: str) -> Dict[str, Any]:
         return self.facts.get(host, {})
 
@@ -1294,8 +1337,7 @@ class HostCache():
         return True
 
     def all_host_metadata_up_to_date(self) -> bool:
-        unreachables = [h.hostname for h in self.get_unreachable_hosts()]
-        if [h for h in self.get_hosts() if (not self.host_metadata_up_to_date(h) and h not in unreachables)]:
+        if [h for h in self.get_hosts() if (not self.host_metadata_up_to_date(h) and not self.is_host_unreachable(h))]:
             # this function is primarily for telling if it's safe to try and apply a service
             # spec. Since offline/maintenance hosts aren't considered in that process anyway
             # we don't want to return False if the host without up-to-date metadata is in one
index 52a8605bc1d148199b83b464fcd7fe961dd2283b..27f777af6b420a341ec4768980b499b0c229bb04 100644 (file)
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING, Iterator, Optional, Dict, Any, List
 
 from ceph.deployment.service_spec import PlacementSpec, ServiceSpec, HostPlacementSpec, RGWSpec
 from cephadm.schedule import HostAssignment
+from cephadm.utils import SpecialHostLabels
 import rados
 
 from mgr_module import NFS_POOL_NAME
@@ -308,7 +309,7 @@ class Migrations:
         if 'client.admin' not in self.mgr.keys.keys:
             self.mgr._client_keyring_set(
                 entity='client.admin',
-                placement='label:_admin',
+                placement=f'label:{SpecialHostLabels.ADMIN}',
             )
         return True
 
index 37fe3b4ac58f0756c1f192799ce3a7ff66e30ee5..7b97ce74a947e8cda6dbec6350aca5ef5269ac95 100644 (file)
@@ -58,6 +58,7 @@ from .services.cephadmservice import MonService, MgrService, MdsService, RgwServ
 from .services.ingress import IngressService
 from .services.container import CustomContainerService
 from .services.iscsi import IscsiService
+from .services.nvmeof import NvmeofService
 from .services.nfs import NFSService
 from .services.osd import OSDRemovalQueue, OSDService, OSD, NotFoundError
 from .services.monitoring import GrafanaService, AlertmanagerService, PrometheusService, \
@@ -69,7 +70,7 @@ from .inventory import Inventory, SpecStore, HostCache, AgentCache, EventStore,
 from .upgrade import CephadmUpgrade
 from .template import TemplateMgr
 from .utils import CEPH_IMAGE_TYPES, RESCHEDULE_FROM_OFFLINE_HOSTS_TYPES, forall_hosts, \
-    cephadmNoImage, CEPH_UPGRADE_ORDER
+    cephadmNoImage, CEPH_UPGRADE_ORDER, SpecialHostLabels
 from .configchecks import CephadmConfigChecks
 from .offline_watcher import OfflineHostWatcher
 from .tuned_profiles import TunedProfileUtils
@@ -103,9 +104,10 @@ os._exit = os_exit_noop   # type: ignore
 
 
 # Default container images -----------------------------------------------------
-DEFAULT_IMAGE = 'quay.io/ceph/ceph:v18'
+DEFAULT_IMAGE = 'quay.io/ceph/ceph'  # DO NOT ADD TAG TO THIS
 DEFAULT_PROMETHEUS_IMAGE = 'quay.io/prometheus/prometheus:v2.43.0'
 DEFAULT_NODE_EXPORTER_IMAGE = 'quay.io/prometheus/node-exporter:v1.5.0'
+DEFAULT_NVMEOF_IMAGE = 'quay.io/ceph/nvmeof:0.0.2'
 DEFAULT_LOKI_IMAGE = 'docker.io/grafana/loki:2.4.0'
 DEFAULT_PROMTAIL_IMAGE = 'docker.io/grafana/promtail:2.4.0'
 DEFAULT_ALERT_MANAGER_IMAGE = 'quay.io/prometheus/alertmanager:v0.25.0'
@@ -165,6 +167,13 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
             default=False,
             desc='Use libstoragemgmt during device scans',
         ),
+        Option(
+            'inventory_list_all',
+            type='bool',
+            default=False,
+            desc='Whether ceph-volume inventory should report '
+            'more devices (mostly mappers (LVs / mpaths), partitions...)',
+        ),
         Option(
             'daemon_cache_timeout',
             type='secs',
@@ -201,6 +210,11 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
             default=DEFAULT_PROMETHEUS_IMAGE,
             desc='Prometheus container image',
         ),
+        Option(
+            'container_image_nvmeof',
+            default=DEFAULT_NVMEOF_IMAGE,
+            desc='Nvme-of container image',
+        ),
         Option(
             'container_image_grafana',
             default=DEFAULT_GRAFANA_IMAGE,
@@ -445,30 +459,6 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
             default=False,
             desc='Log all refresh metadata. Includes daemon, device, and host info collected regularly. Only has effect if logging at debug level'
         ),
-        Option(
-            'prometheus_web_user',
-            type='str',
-            default='admin',
-            desc='Prometheus web user'
-        ),
-        Option(
-            'prometheus_web_password',
-            type='str',
-            default='admin',
-            desc='Prometheus web password'
-        ),
-        Option(
-            'alertmanager_web_user',
-            type='str',
-            default='admin',
-            desc='Alertmanager web user'
-        ),
-        Option(
-            'alertmanager_web_password',
-            type='str',
-            default='admin',
-            desc='Alertmanager web password'
-        ),
         Option(
             'secure_monitoring_stack',
             type='bool',
@@ -511,6 +501,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
             self.mode = ''
             self.container_image_base = ''
             self.container_image_prometheus = ''
+            self.container_image_nvmeof = ''
             self.container_image_grafana = ''
             self.container_image_alertmanager = ''
             self.container_image_node_exporter = ''
@@ -549,19 +540,17 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
             self._temp_files: List = []
             self.ssh_key: Optional[str] = None
             self.ssh_pub: Optional[str] = None
+            self.ssh_cert: Optional[str] = None
             self.use_agent = False
             self.agent_refresh_rate = 0
             self.agent_down_multiplier = 0.0
             self.agent_starting_port = 0
             self.service_discovery_port = 0
             self.secure_monitoring_stack = False
-            self.prometheus_web_password: Optional[str] = None
-            self.prometheus_web_user: Optional[str] = None
-            self.alertmanager_web_password: Optional[str] = None
-            self.alertmanager_web_user: Optional[str] = None
             self.apply_spec_fails: List[Tuple[str, str]] = []
             self.max_osd_draining_count = 10
             self.device_enhanced_scan = False
+            self.inventory_list_all = False
             self.cgroups_split = True
             self.log_refresh_metadata = False
             self.default_cephadm_command_timeout = 0
@@ -630,7 +619,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
             OSDService, NFSService, MonService, MgrService, MdsService,
             RgwService, RbdMirrorService, GrafanaService, AlertmanagerService,
             PrometheusService, NodeExporterService, LokiService, PromtailService, CrashService, IscsiService,
-            IngressService, CustomContainerService, CephfsMirrorService,
+            IngressService, CustomContainerService, CephfsMirrorService, NvmeofService,
             CephadmAgent, CephExporterService, SNMPGatewayService, ElasticSearchService,
             JaegerQueryService, JaegerAgentService, JaegerCollectorService
         ]
@@ -642,6 +631,7 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
         self.mgr_service: MgrService = cast(MgrService, self.cephadm_services['mgr'])
         self.osd_service: OSDService = cast(OSDService, self.cephadm_services['osd'])
         self.iscsi_service: IscsiService = cast(IscsiService, self.cephadm_services['iscsi'])
+        self.nvmeof_service: NvmeofService = cast(NvmeofService, self.cephadm_services['nvmeof'])
 
         self.scheduled_async_actions: List[Callable] = []
 
@@ -869,6 +859,9 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
                 ssh_config_fname))
 
     def _process_ls_output(self, host: str, ls: List[Dict[str, Any]]) -> None:
+        def _as_datetime(value: Optional[str]) -> Optional[datetime.datetime]:
+            return str_to_datetime(value) if value is not None else None
+
         dm = {}
         for d in ls:
             if not d['style'].startswith('cephadm'):
@@ -877,51 +870,56 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
                 continue
             if '.' not in d['name']:
                 continue
-            sd = orchestrator.DaemonDescription()
-            sd.last_refresh = datetime_now()
-            for k in ['created', 'started', 'last_configured', 'last_deployed']:
-                v = d.get(k, None)
-                if v:
-                    setattr(sd, k, str_to_datetime(d[k]))
-            sd.daemon_type = d['name'].split('.')[0]
-            if sd.daemon_type not in orchestrator.KNOWN_DAEMON_TYPES:
-                logger.warning(f"Found unknown daemon type {sd.daemon_type} on host {host}")
+            daemon_type = d['name'].split('.')[0]
+            if daemon_type not in orchestrator.KNOWN_DAEMON_TYPES:
+                logger.warning(f"Found unknown daemon type {daemon_type} on host {host}")
                 continue
 
-            sd.daemon_id = '.'.join(d['name'].split('.')[1:])
-            sd.hostname = host
-            sd.container_id = d.get('container_id')
-            if sd.container_id:
+            container_id = d.get('container_id')
+            if container_id:
                 # shorten the hash
-                sd.container_id = sd.container_id[0:12]
-            sd.container_image_name = d.get('container_image_name')
-            sd.container_image_id = d.get('container_image_id')
-            sd.container_image_digests = d.get('container_image_digests')
-            sd.memory_usage = d.get('memory_usage')
-            sd.memory_request = d.get('memory_request')
-            sd.memory_limit = d.get('memory_limit')
-            sd.cpu_percentage = d.get('cpu_percentage')
-            sd._service_name = d.get('service_name')
-            sd.deployed_by = d.get('deployed_by')
-            sd.version = d.get('version')
-            sd.ports = d.get('ports')
-            sd.ip = d.get('ip')
-            sd.rank = int(d['rank']) if d.get('rank') is not None else None
-            sd.rank_generation = int(d['rank_generation']) if d.get(
+                container_id = container_id[0:12]
+            rank = int(d['rank']) if d.get('rank') is not None else None
+            rank_generation = int(d['rank_generation']) if d.get(
                 'rank_generation') is not None else None
-            sd.extra_container_args = d.get('extra_container_args')
-            sd.extra_entrypoint_args = d.get('extra_entrypoint_args')
+            status, status_desc = None, 'unknown'
             if 'state' in d:
-                sd.status_desc = d['state']
-                sd.status = {
+                status_desc = d['state']
+                status = {
                     'running': DaemonDescriptionStatus.running,
                     'stopped': DaemonDescriptionStatus.stopped,
                     'error': DaemonDescriptionStatus.error,
                     'unknown': DaemonDescriptionStatus.error,
                 }[d['state']]
-            else:
-                sd.status_desc = 'unknown'
-                sd.status = None
+            sd = orchestrator.DaemonDescription(
+                daemon_type=daemon_type,
+                daemon_id='.'.join(d['name'].split('.')[1:]),
+                hostname=host,
+                container_id=container_id,
+                container_image_id=d.get('container_image_id'),
+                container_image_name=d.get('container_image_name'),
+                container_image_digests=d.get('container_image_digests'),
+                version=d.get('version'),
+                status=status,
+                status_desc=status_desc,
+                created=_as_datetime(d.get('created')),
+                started=_as_datetime(d.get('started')),
+                last_refresh=datetime_now(),
+                last_configured=_as_datetime(d.get('last_configured')),
+                last_deployed=_as_datetime(d.get('last_deployed')),
+                memory_usage=d.get('memory_usage'),
+                memory_request=d.get('memory_request'),
+                memory_limit=d.get('memory_limit'),
+                cpu_percentage=d.get('cpu_percentage'),
+                service_name=d.get('service_name'),
+                ports=d.get('ports'),
+                ip=d.get('ip'),
+                deployed_by=d.get('deployed_by'),
+                rank=rank,
+                rank_generation=rank_generation,
+                extra_container_args=d.get('extra_container_args'),
+                extra_entrypoint_args=d.get('extra_entrypoint_args'),
+            )
             dm[sd.name()] = sd
         self.log.debug('Refreshed host %s daemons (%d)' % (host, len(dm)))
         self.cache.update_host_daemons(host, dm)
@@ -1086,12 +1084,25 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
         self._validate_and_set_ssh_val('ssh_identity_pub', inbuf, old)
         return 0, "", ""
 
+    @orchestrator._cli_write_command(
+        'cephadm set-signed-cert')
+    def _set_signed_cert(self, inbuf: Optional[str] = None) -> Tuple[int, str, str]:
+        """Set a signed cert if CA signed keys are being used (use -i <cert_filename>)"""
+        if inbuf is None or len(inbuf) == 0:
+            return -errno.EINVAL, "", "empty cert file provided"
+        old = self.ssh_cert
+        if inbuf == old:
+            return 0, "value unchanged", ""
+        self._validate_and_set_ssh_val('ssh_identity_cert', inbuf, old)
+        return 0, "", ""
+
     @orchestrator._cli_write_command(
         'cephadm clear-key')
     def _clear_key(self) -> Tuple[int, str, str]:
         """Clear cluster SSH key"""
         self.set_store('ssh_identity_key', None)
         self.set_store('ssh_identity_pub', None)
+        self.set_store('ssh_identity_cert', None)
         self.ssh._reconfig_ssh()
         self.log.info('Cleared cluster SSH key')
         return 0, '', ''
@@ -1105,6 +1116,15 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
         else:
             return -errno.ENOENT, '', 'No cluster SSH key defined'
 
+    @orchestrator._cli_read_command(
+        'cephadm get-signed-cert')
+    def _get_signed_cert(self) -> Tuple[int, str, str]:
+        """Show SSH signed cert for connecting to cluster hosts using CA signed keys"""
+        if self.ssh_cert:
+            return 0, self.ssh_cert, ''
+        else:
+            return -errno.ENOENT, '', 'No signed cert defined'
+
     @orchestrator._cli_read_command(
         'cephadm get-user')
     def _get_user(self) -> Tuple[int, str, str]:
@@ -1191,7 +1211,8 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
             if code:
                 return 1, '', ('check-host failed:\n' + '\n'.join(err))
         except ssh.HostConnectionError as e:
-            self.log.exception(f"check-host failed for '{host}' at addr ({e.addr}) due to connection failure: {str(e)}")
+            self.log.exception(
+                f"check-host failed for '{host}' at addr ({e.addr}) due to connection failure: {str(e)}")
             return 1, '', ('check-host failed:\n'
                            + f"Failed to connect to {host} at address ({e.addr}): {str(e)}")
         except OrchestratorError:
@@ -1472,6 +1493,8 @@ class CephadmOrchestrator(orchestrator.Orchestrator, MgrModule,
             )).strip()
         elif daemon_type == 'prometheus':
             image = self.container_image_prometheus
+        elif daemon_type == 'nvmeof':
+            image = self.container_image_nvmeof
         elif daemon_type == 'grafana':
             image = self.container_image_grafana
         elif daemon_type == 'alertmanager':
@@ -1640,11 +1663,11 @@ Then run the following:
 
         # check, if there we're removing the last _admin host
         if not force:
-            p = PlacementSpec(label='_admin')
+            p = PlacementSpec(label=SpecialHostLabels.ADMIN)
             admin_hosts = p.filter_matching_hostspecs(self.inventory.all_specs())
             if len(admin_hosts) == 1 and admin_hosts[0] == host:
-                raise OrchestratorValidationError(f"Host {host} is the last host with the '_admin'"
-                                                  " label. Please add the '_admin' label to a host"
+                raise OrchestratorValidationError(f"Host {host} is the last host with the '{SpecialHostLabels.ADMIN}'"
+                                                  f" label. Please add the '{SpecialHostLabels.ADMIN}' label to a host"
                                                   " or add --force to this command")
 
         def run_cmd(cmd_args: dict) -> None:
@@ -1662,7 +1685,8 @@ Then run the following:
 
                 if d.daemon_type != 'osd':
                     self.cephadm_services[daemon_type_to_service(str(d.daemon_type))].pre_remove(d)
-                    self.cephadm_services[daemon_type_to_service(str(d.daemon_type))].post_remove(d, is_failed_deploy=False)
+                    self.cephadm_services[daemon_type_to_service(
+                        str(d.daemon_type))].post_remove(d, is_failed_deploy=False)
                 else:
                     cmd_args = {
                         'prefix': 'osd purge-actual',
@@ -1680,7 +1704,8 @@ Then run the following:
         self.inventory.rm_host(host)
         self.cache.rm_host(host)
         self.ssh.reset_con(host)
-        self.offline_hosts_remove(host)  # if host was in offline host list, we should remove it now.
+        # if host was in offline host list, we should remove it now.
+        self.offline_hosts_remove(host)
         self.event.set()  # refresh stray health check
         self.log.info('Removed host %s' % host)
         return "Removed {} host '{}'".format('offline' if offline else '', host)
@@ -1729,20 +1754,24 @@ Then run the following:
     def remove_host_label(self, host: str, label: str, force: bool = False) -> str:
         # if we remove the _admin label from the only host that has it we could end up
         # removing the only instance of the config and keyring and cause issues
-        if not force and label == '_admin':
-            p = PlacementSpec(label='_admin')
+        if not force and label == SpecialHostLabels.ADMIN:
+            p = PlacementSpec(label=SpecialHostLabels.ADMIN)
             admin_hosts = p.filter_matching_hostspecs(self.inventory.all_specs())
             if len(admin_hosts) == 1 and admin_hosts[0] == host:
-                raise OrchestratorValidationError(f"Host {host} is the last host with the '_admin'"
-                                                  " label.\nRemoving the _admin label from this host could cause the removal"
+                raise OrchestratorValidationError(f"Host {host} is the last host with the '{SpecialHostLabels.ADMIN}'"
+                                                  f" label.\nRemoving the {SpecialHostLabels.ADMIN} label from this host could cause the removal"
                                                   " of the last cluster config/keyring managed by cephadm.\n"
-                                                  "It is recommended to add the _admin label to another host"
+                                                  f"It is recommended to add the {SpecialHostLabels.ADMIN} label to another host"
                                                   " before completing this operation.\nIf you're certain this is"
                                                   " what you want rerun this command with --force.")
-        self.inventory.rm_label(host, label)
-        self.log.info('Removed label %s to host %s' % (label, host))
+        if self.inventory.has_label(host, label):
+            self.inventory.rm_label(host, label)
+            msg = f'Removed label {label} from host {host}'
+        else:
+            msg = f"Host {host} does not have label '{label}'. Please use 'ceph orch host ls' to list all the labels."
+        self.log.info(msg)
         self._kick_serve_loop()
-        return 'Removed label %s from host %s' % (label, host)
+        return msg
 
     def _host_ok_to_stop(self, hostname: str, force: bool = False) -> Tuple[int, str]:
         self.log.debug("running host-ok-to-stop checks")
@@ -2604,6 +2633,9 @@ Then run the following:
                     daemon_names.append(dd.name())
             return daemon_names
 
+        alertmanager_user, alertmanager_password = self._get_alertmanager_credentials()
+        prometheus_user, prometheus_password = self._get_prometheus_credentials()
+
         deps = []
         if daemon_type == 'haproxy':
             # because cephadm creates new daemon instances whenever
@@ -2651,24 +2683,25 @@ Then run the following:
             # an explicit dependency is added for each service-type to force a reconfig
             # whenever the number of daemons for those service-type changes from 0 to greater
             # than zero and vice versa.
-            deps += [s for s in ['node-exporter', 'alertmanager'] if self.cache.get_daemons_by_service(s)]
+            deps += [s for s in ['node-exporter', 'alertmanager']
+                     if self.cache.get_daemons_by_service(s)]
             if len(self.cache.get_daemons_by_type('ingress')) > 0:
                 deps.append('ingress')
             # add dependency on ceph-exporter daemons
             deps += [d.name() for d in self.cache.get_daemons_by_service('ceph-exporter')]
             if self.secure_monitoring_stack:
-                if self.prometheus_web_user and self.prometheus_web_password:
-                    deps.append(f'{hash(self.prometheus_web_user + self.prometheus_web_password)}')
-                if self.alertmanager_web_user and self.alertmanager_web_password:
-                    deps.append(f'{hash(self.alertmanager_web_user + self.alertmanager_web_password)}')
+                if prometheus_user and prometheus_password:
+                    deps.append(f'{hash(prometheus_user + prometheus_password)}')
+                if alertmanager_user and alertmanager_password:
+                    deps.append(f'{hash(alertmanager_user + alertmanager_password)}')
         elif daemon_type == 'grafana':
             deps += get_daemon_names(['prometheus', 'loki'])
-            if self.secure_monitoring_stack and self.prometheus_web_user and self.prometheus_web_password:
-                deps.append(f'{hash(self.prometheus_web_user + self.prometheus_web_password)}')
+            if self.secure_monitoring_stack and prometheus_user and prometheus_password:
+                deps.append(f'{hash(prometheus_user + prometheus_password)}')
         elif daemon_type == 'alertmanager':
             deps += get_daemon_names(['mgr', 'alertmanager', 'snmp-gateway'])
-            if self.secure_monitoring_stack and self.alertmanager_web_user and self.alertmanager_web_password:
-                deps.append(f'{hash(self.alertmanager_web_user + self.alertmanager_web_password)}')
+            if self.secure_monitoring_stack and alertmanager_user and alertmanager_password:
+                deps.append(f'{hash(alertmanager_user + alertmanager_password)}')
         elif daemon_type == 'promtail':
             deps += get_daemon_names(['loki'])
         else:
@@ -2769,16 +2802,50 @@ Then run the following:
             self.events.from_orch_error(e)
             raise
 
+    def _get_alertmanager_credentials(self) -> Tuple[str, str]:
+        user = self.get_store(AlertmanagerService.USER_CFG_KEY)
+        password = self.get_store(AlertmanagerService.PASS_CFG_KEY)
+        if user is None or password is None:
+            user = 'admin'
+            password = 'admin'
+            self.set_store(AlertmanagerService.USER_CFG_KEY, user)
+            self.set_store(AlertmanagerService.PASS_CFG_KEY, password)
+        return (user, password)
+
+    def _get_prometheus_credentials(self) -> Tuple[str, str]:
+        user = self.get_store(PrometheusService.USER_CFG_KEY)
+        password = self.get_store(PrometheusService.PASS_CFG_KEY)
+        if user is None or password is None:
+            user = 'admin'
+            password = 'admin'
+            self.set_store(PrometheusService.USER_CFG_KEY, user)
+            self.set_store(PrometheusService.PASS_CFG_KEY, password)
+        return (user, password)
+
+    @handle_orch_error
+    def set_prometheus_access_info(self, user: str, password: str) -> str:
+        self.set_store(PrometheusService.USER_CFG_KEY, user)
+        self.set_store(PrometheusService.PASS_CFG_KEY, password)
+        return 'prometheus credentials updated correctly'
+
+    @handle_orch_error
+    def set_alertmanager_access_info(self, user: str, password: str) -> str:
+        self.set_store(AlertmanagerService.USER_CFG_KEY, user)
+        self.set_store(AlertmanagerService.PASS_CFG_KEY, password)
+        return 'alertmanager credentials updated correctly'
+
     @handle_orch_error
     def get_prometheus_access_info(self) -> Dict[str, str]:
-        return {'user': self.prometheus_web_user or '',
-                'password': self.prometheus_web_password or '',
+        user, password = self._get_prometheus_credentials()
+        return {'user': user,
+                'password': password,
                 'certificate': self.http_server.service_discovery.ssl_certs.get_root_cert()}
 
     @handle_orch_error
     def get_alertmanager_access_info(self) -> Dict[str, str]:
-        return {'user': self.alertmanager_web_user or '',
-                'password': self.alertmanager_web_password or '',
+        user, password = self._get_alertmanager_credentials()
+        return {'user': user,
+                'password': password,
                 'certificate': self.http_server.service_discovery.ssl_certs.get_root_cert()}
 
     @handle_orch_error
@@ -2799,7 +2866,6 @@ Then run the following:
     def _get_candidate_hosts(self, placement: PlacementSpec) -> List[str]:
         """Return a list of candidate hosts according to the placement specification."""
         all_hosts = self.cache.get_schedulable_hosts()
-        draining_hosts = [dh.hostname for dh in self.cache.get_draining_hosts()]
         candidates = []
         if placement.hosts:
             candidates = [h.hostname for h in placement.hosts if h.hostname in placement.hosts]
@@ -2809,7 +2875,7 @@ Then run the following:
             candidates = [x for x in placement.filter_matching_hostspecs(all_hosts)]
         elif (placement.count is not None or placement.count_per_host is not None):
             candidates = [x.hostname for x in all_hosts]
-        return [h for h in candidates if h not in draining_hosts]
+        return [h for h in candidates if not self.cache.is_host_draining(h)]
 
     def _validate_one_shot_placement_spec(self, spec: PlacementSpec) -> None:
         """Validate placement specification for TunedProfileSpec and ClientKeyringSpec."""
@@ -2966,6 +3032,7 @@ Then run the following:
                 'rgw': PlacementSpec(count=2),
                 'ingress': PlacementSpec(count=2),
                 'iscsi': PlacementSpec(count=1),
+                'nvmeof': PlacementSpec(count=1),
                 'rbd-mirror': PlacementSpec(count=2),
                 'cephfs-mirror': PlacementSpec(count=1),
                 'nfs': PlacementSpec(count=1),
@@ -3189,7 +3256,8 @@ Then run the following:
         if self.inventory.get_host_with_state("maintenance"):
             raise OrchestratorError("Upgrade aborted - you have host(s) in maintenance state")
         if self.offline_hosts:
-            raise OrchestratorError(f"Upgrade aborted - Some host(s) are currently offline: {self.offline_hosts}")
+            raise OrchestratorError(
+                f"Upgrade aborted - Some host(s) are currently offline: {self.offline_hosts}")
         if daemon_types is not None and services is not None:
             raise OrchestratorError('--daemon-types and --services are mutually exclusive')
         if daemon_types is not None:
@@ -3296,8 +3364,7 @@ Then run the following:
         return self.to_remove_osds.all_osds()
 
     @handle_orch_error
-    def drain_host(self, hostname, force=False):
-        # type: (str, bool) -> str
+    def drain_host(self, hostname: str, force: bool = False, keep_conf_keyring: bool = False, zap_osd_devices: bool = False) -> str:
         """
         Drain all daemons from a host.
         :param host: host name
@@ -3306,22 +3373,24 @@ Then run the following:
         # if we drain the last admin host we could end up removing the only instance
         # of the config and keyring and cause issues
         if not force:
-            p = PlacementSpec(label='_admin')
+            p = PlacementSpec(label=SpecialHostLabels.ADMIN)
             admin_hosts = p.filter_matching_hostspecs(self.inventory.all_specs())
             if len(admin_hosts) == 1 and admin_hosts[0] == hostname:
-                raise OrchestratorValidationError(f"Host {hostname} is the last host with the '_admin'"
+                raise OrchestratorValidationError(f"Host {hostname} is the last host with the '{SpecialHostLabels.ADMIN}'"
                                                   " label.\nDraining this host could cause the removal"
                                                   " of the last cluster config/keyring managed by cephadm.\n"
-                                                  "It is recommended to add the _admin label to another host"
+                                                  f"It is recommended to add the {SpecialHostLabels.ADMIN} label to another host"
                                                   " before completing this operation.\nIf you're certain this is"
                                                   " what you want rerun this command with --force.")
 
         self.add_host_label(hostname, '_no_schedule')
+        if not keep_conf_keyring:
+            self.add_host_label(hostname, SpecialHostLabels.DRAIN_CONF_KEYRING)
 
         daemons: List[orchestrator.DaemonDescription] = self.cache.get_daemons_by_host(hostname)
 
         osds_to_remove = [d.daemon_id for d in daemons if d.daemon_type == 'osd']
-        self.remove_osds(osds_to_remove)
+        self.remove_osds(osds_to_remove, zap=zap_osd_devices)
 
         daemons_table = ""
         daemons_table += "{:<20} {:<15}\n".format("type", "id")
index 888a2a0335dff85ecbd20df8e8d050203c5f3127..6666d761ebcf919a07177a7079f851e84217c4ee 100644 (file)
@@ -148,7 +148,7 @@ class HostAssignment(object):
                  daemons: List[orchestrator.DaemonDescription],
                  related_service_daemons: Optional[List[DaemonDescription]] = None,
                  networks: Dict[str, Dict[str, Dict[str, List[str]]]] = {},
-                 filter_new_host: Optional[Callable[[str], bool]] = None,
+                 filter_new_host: Optional[Callable[[str, ServiceSpec], bool]] = None,
                  allow_colo: bool = False,
                  primary_daemon_type: Optional[str] = None,
                  per_host_daemon_type: Optional[str] = None,
@@ -451,7 +451,7 @@ class HostAssignment(object):
             old = ls.copy()
             ls = []
             for h in old:
-                if self.filter_new_host(h.hostname):
+                if self.filter_new_host(h.hostname, self.spec):
                     ls.append(h)
             if len(old) > len(ls):
                 logger.debug('Filtered %s down to %s' % (old, ls))
index 877a00cf714b94f9178701772f4ff6cc45e64192..5dfdc27a3ff50377dcfadfdcba1778f63307e5da 100644 (file)
@@ -6,11 +6,19 @@ import uuid
 import os
 from collections import defaultdict
 from typing import TYPE_CHECKING, Optional, List, cast, Dict, Any, Union, Tuple, Set, \
-    DefaultDict
+    DefaultDict, Callable
 
 from ceph.deployment import inventory
 from ceph.deployment.drive_group import DriveGroupSpec
-from ceph.deployment.service_spec import ServiceSpec, CustomContainerSpec, PlacementSpec, RGWSpec
+from ceph.deployment.service_spec import (
+    ArgumentList,
+    ArgumentSpec,
+    CustomContainerSpec,
+    PlacementSpec,
+    RGWSpec,
+    ServiceSpec,
+    IngressSpec,
+)
 from ceph.utils import datetime_now
 
 import orchestrator
@@ -20,11 +28,12 @@ from cephadm.services.cephadmservice import CephadmDaemonDeploySpec
 from cephadm.schedule import HostAssignment
 from cephadm.autotune import MemoryAutotuner
 from cephadm.utils import forall_hosts, cephadmNoImage, is_repo_digest, \
-    CephadmNoImage, CEPH_TYPES, ContainerInspectInfo
+    CephadmNoImage, CEPH_TYPES, ContainerInspectInfo, SpecialHostLabels
 from mgr_module import MonCommandFailed
 from mgr_util import format_bytes, verify_tls, get_cert_issuer_info, ServerConfigException
 
 from . import utils
+from . import exchange
 
 if TYPE_CHECKING:
     from cephadm.module import CephadmOrchestrator
@@ -244,7 +253,7 @@ class CephadmServe:
 
             if (
                 not self.mgr.use_agent
-                or host not in [h.hostname for h in self.mgr.cache.get_non_draining_hosts()]
+                or self.mgr.cache.is_host_draining(host)
                 or host in agents_down
             ):
                 if self.mgr.cache.host_needs_daemon_refresh(host):
@@ -295,7 +304,7 @@ class CephadmServe:
 
             if (
                     self.mgr.cache.host_needs_autotune_memory(host)
-                    and not self.mgr.inventory.has_label(host, '_no_autotune_memory')
+                    and not self.mgr.inventory.has_label(host, SpecialHostLabels.NO_MEMORY_AUTOTUNE)
             ):
                 self.log.debug(f"autotuning memory for {host}")
                 self._autotune_host_memory(host)
@@ -370,11 +379,14 @@ class CephadmServe:
 
     def _refresh_host_devices(self, host: str) -> Optional[str]:
         with_lsm = self.mgr.device_enhanced_scan
+        list_all = self.mgr.inventory_list_all
         inventory_args = ['--', 'inventory',
                           '--format=json-pretty',
                           '--filter-for-batch']
         if with_lsm:
             inventory_args.insert(-1, "--with-lsm")
+        if list_all:
+            inventory_args.insert(-1, "--list-all")
 
         try:
             try:
@@ -687,8 +699,7 @@ class CephadmServe:
                 public_networks = [x.strip() for x in out.split(',')]
                 self.log.debug('mon public_network(s) is %s' % public_networks)
 
-        def matches_network(host):
-            # type: (str) -> bool
+        def matches_public_network(host: str, sspec: ServiceSpec) -> bool:
             # make sure the host has at least one network that belongs to some configured public network(s)
             for pn in public_networks:
                 public_network = ipaddress.ip_network(pn)
@@ -705,6 +716,40 @@ class CephadmServe:
             )
             return False
 
+        def has_interface_for_vip(host: str, sspec: ServiceSpec) -> bool:
+            # make sure the host has an interface that can
+            # actually accomodate the VIP
+            if not sspec or sspec.service_type != 'ingress':
+                return True
+            ingress_spec = cast(IngressSpec, sspec)
+            virtual_ips = []
+            if ingress_spec.virtual_ip:
+                virtual_ips.append(ingress_spec.virtual_ip)
+            elif ingress_spec.virtual_ips_list:
+                virtual_ips = ingress_spec.virtual_ips_list
+            for vip in virtual_ips:
+                found = False
+                bare_ip = str(vip).split('/')[0]
+                for subnet, ifaces in self.mgr.cache.networks.get(host, {}).items():
+                    if ifaces and ipaddress.ip_address(bare_ip) in ipaddress.ip_network(subnet):
+                        # found matching interface for this IP, move on
+                        self.log.debug(
+                            f'{bare_ip} is in {subnet} on {host} interface {list(ifaces.keys())[0]}'
+                        )
+                        found = True
+                        break
+                if not found:
+                    self.log.info(
+                        f"Filtered out host {host}: Host has no interface available for VIP: {vip}"
+                    )
+                    return False
+            return True
+
+        host_filters: Dict[str, Callable[[str, ServiceSpec], bool]] = {
+            'mon': matches_public_network,
+            'ingress': has_interface_for_vip
+        }
+
         rank_map = None
         if svc.ranked():
             rank_map = self.mgr.spec_store[spec.service_name()].rank_map or {}
@@ -717,10 +762,7 @@ class CephadmServe:
             daemons=daemons,
             related_service_daemons=related_service_daemons,
             networks=self.mgr.cache.networks,
-            filter_new_host=(
-                matches_network if service_type == 'mon'
-                else None
-            ),
+            filter_new_host=host_filters.get(service_type, None),
             allow_colo=svc.allow_colo(),
             primary_daemon_type=svc.primary_daemon_type(spec),
             per_host_daemon_type=svc.per_host_daemon_type(spec),
@@ -912,7 +954,18 @@ class CephadmServe:
 
             while daemons_to_remove and not _ok_to_stop(daemons_to_remove):
                 # let's find a subset that is ok-to-stop
-                daemons_to_remove.pop()
+                non_error_daemon_index = -1
+                # prioritize removing daemons in error state
+                for i, dmon in enumerate(daemons_to_remove):
+                    if dmon.status != DaemonDescriptionStatus.error:
+                        non_error_daemon_index = i
+                        break
+                if non_error_daemon_index != -1:
+                    daemons_to_remove.pop(non_error_daemon_index)
+                else:
+                    # all daemons in list are in error state
+                    # we should be able to remove all of them
+                    break
             for d in daemons_to_remove:
                 r = True
                 assert d.hostname is not None
@@ -933,8 +986,7 @@ class CephadmServe:
                 self.mgr.spec_store.mark_configured(spec.service_name())
             if self.mgr.use_agent:
                 # can only send ack to agents if we know for sure port they bound to
-                hosts_altered = set([h for h in hosts_altered if (h in self.mgr.agent_cache.agent_ports and h in [
-                                    h2.hostname for h2 in self.mgr.cache.get_non_draining_hosts()])])
+                hosts_altered = set([h for h in hosts_altered if (h in self.mgr.agent_cache.agent_ports and not self.mgr.cache.is_host_draining(h))])
                 self.mgr.agent_helpers._request_agent_acks(hosts_altered, increment=True)
 
         if r is None:
@@ -1115,9 +1167,9 @@ class CephadmServe:
                 pspec = PlacementSpec.from_string(self.mgr.manage_etc_ceph_ceph_conf_hosts)
                 ha = HostAssignment(
                     spec=ServiceSpec('mon', placement=pspec),
-                    hosts=self.mgr.cache.get_schedulable_hosts(),
+                    hosts=self.mgr.cache.get_conf_keyring_available_hosts(),
                     unreachable_hosts=self.mgr.cache.get_unreachable_hosts(),
-                    draining_hosts=self.mgr.cache.get_draining_hosts(),
+                    draining_hosts=self.mgr.cache.get_conf_keyring_draining_hosts(),
                     daemons=[],
                     networks=self.mgr.cache.networks,
                 )
@@ -1146,9 +1198,9 @@ class CephadmServe:
                     keyring.encode('utf-8')).digest())
                 ha = HostAssignment(
                     spec=ServiceSpec('mon', placement=ks.placement),
-                    hosts=self.mgr.cache.get_schedulable_hosts(),
+                    hosts=self.mgr.cache.get_conf_keyring_available_hosts(),
                     unreachable_hosts=self.mgr.cache.get_unreachable_hosts(),
-                    draining_hosts=self.mgr.cache.get_draining_hosts(),
+                    draining_hosts=self.mgr.cache.get_conf_keyring_draining_hosts(),
                     daemons=[],
                     networks=self.mgr.cache.networks,
                 )
@@ -1183,7 +1235,7 @@ class CephadmServe:
                             client_files: Dict[str, Dict[str, Tuple[int, int, int, bytes, str]]],
                             host: str) -> None:
         updated_files = False
-        if host in self.mgr.offline_hosts:
+        if self.mgr.cache.is_host_unreachable(host):
             return
         old_files = self.mgr.cache.get_host_client_files(host).copy()
         for path, m in client_files.get(host, {}).items():
@@ -1214,6 +1266,7 @@ class CephadmServe:
                              osd_uuid_map: Optional[Dict[str, Any]] = None,
                              ) -> str:
 
+        daemon_params: Dict[str, Any] = {}
         with set_exception_subject('service', orchestrator.DaemonDescription(
                 daemon_type=daemon_spec.daemon_type,
                 daemon_id=daemon_spec.daemon_id,
@@ -1224,6 +1277,7 @@ class CephadmServe:
                 image = ''
                 start_time = datetime_now()
                 ports: List[int] = daemon_spec.ports if daemon_spec.ports else []
+                port_ips: Dict[str, str] = daemon_spec.port_ips if daemon_spec.port_ips else {}
 
                 if daemon_spec.daemon_type == 'container':
                     spec = cast(CustomContainerSpec,
@@ -1234,9 +1288,10 @@ class CephadmServe:
 
                 # TCP port to open in the host firewall
                 if len(ports) > 0:
-                    daemon_spec.extra_args.extend([
-                        '--tcp-ports', ' '.join(map(str, ports))
-                    ])
+                    daemon_params['tcp_ports'] = list(ports)
+
+                if port_ips:
+                    daemon_params['port_ips'] = port_ips
 
                 # osd deployments needs an --osd-uuid arg
                 if daemon_spec.daemon_type == 'osd':
@@ -1245,14 +1300,14 @@ class CephadmServe:
                     osd_uuid = osd_uuid_map.get(daemon_spec.daemon_id)
                     if not osd_uuid:
                         raise OrchestratorError('osd.%s not in osdmap' % daemon_spec.daemon_id)
-                    daemon_spec.extra_args.extend(['--osd-fsid', osd_uuid])
+                    daemon_params['osd_fsid'] = osd_uuid
 
                 if reconfig:
-                    daemon_spec.extra_args.append('--reconfig')
+                    daemon_params['reconfig'] = True
                 if self.mgr.allow_ptrace:
-                    daemon_spec.extra_args.append('--allow-ptrace')
+                    daemon_params['allow_ptrace'] = True
 
-                daemon_spec, extra_container_args, extra_entrypoint_args = self._setup_extra_deployment_args(daemon_spec)
+                daemon_spec, extra_container_args, extra_entrypoint_args = self._setup_extra_deployment_args(daemon_spec, daemon_params)
 
                 if daemon_spec.service_name in self.mgr.spec_store:
                     configs = self.mgr.spec_store[daemon_spec.service_name].spec.custom_configs
@@ -1268,23 +1323,31 @@ class CephadmServe:
                     daemon_spec.name(), daemon_spec.host))
 
                 out, err, code = await self._run_cephadm(
-                    daemon_spec.host, daemon_spec.name(), 'deploy',
-                    [
-                        '--name', daemon_spec.name(),
-                        '--meta-json', json.dumps({
-                            'service_name': daemon_spec.service_name,
-                            'ports': daemon_spec.ports,
-                            'ip': daemon_spec.ip,
-                            'deployed_by': self.mgr.get_active_mgr_digests(),
-                            'rank': daemon_spec.rank,
-                            'rank_generation': daemon_spec.rank_generation,
-                            'extra_container_args': extra_container_args,
-                            'extra_entrypoint_args': extra_entrypoint_args
-                        }),
-                        '--config-json', '-',
-                    ] + daemon_spec.extra_args,
-                    stdin=json.dumps(daemon_spec.final_config),
-                    image=image,
+                    daemon_spec.host,
+                    daemon_spec.name(),
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=exchange.Deploy(
+                        fsid=self.mgr._cluster_fsid,
+                        name=daemon_spec.name(),
+                        image=image,
+                        params=daemon_params,
+                        meta=exchange.DeployMeta(
+                            service_name=daemon_spec.service_name,
+                            ports=daemon_spec.ports,
+                            ip=daemon_spec.ip,
+                            deployed_by=self.mgr.get_active_mgr_digests(),
+                            rank=daemon_spec.rank,
+                            rank_generation=daemon_spec.rank_generation,
+                            extra_container_args=ArgumentSpec.map_json(
+                                extra_container_args,
+                            ),
+                            extra_entrypoint_args=ArgumentSpec.map_json(
+                                extra_entrypoint_args,
+                            ),
+                        ),
+                        config_blobs=daemon_spec.final_config,
+                    ).dump_json_str(),
                 )
 
                 if daemon_spec.daemon_type == 'agent':
@@ -1329,35 +1392,33 @@ class CephadmServe:
                     self.mgr.cephadm_services[servict_type].post_remove(dd, is_failed_deploy=True)
                 raise
 
-    def _setup_extra_deployment_args(self, daemon_spec: CephadmDaemonDeploySpec) -> Tuple[CephadmDaemonDeploySpec, Optional[List[str]], Optional[List[str]]]:
+    def _setup_extra_deployment_args(
+        self,
+        daemon_spec: CephadmDaemonDeploySpec,
+        params: Dict[str, Any],
+    ) -> Tuple[CephadmDaemonDeploySpec, Optional[ArgumentList], Optional[ArgumentList]]:
         # this function is for handling any potential user specified
         # (in the service spec) extra runtime or entrypoint args for a daemon
         # we are going to deploy. Effectively just adds a set of extra args to
         # pass to the cephadm binary to indicate the daemon being deployed
         # needs extra runtime/entrypoint args. Returns the modified daemon spec
         # as well as what args were added (as those are included in unit.meta file)
+        def _to_args(lst: ArgumentList) -> List[str]:
+            out: List[str] = []
+            for argspec in lst:
+                out.extend(argspec.to_args())
+            return out
+
         try:
             eca = daemon_spec.extra_container_args
             if eca:
-                for a in eca:
-                    # args with spaces need to be split into multiple args
-                    # in order to work properly
-                    args = a.split(' ')
-                    for arg in args:
-                        if arg:
-                            daemon_spec.extra_args.append(f'--extra-container-args={arg}')
+                params['extra_container_args'] = _to_args(eca)
         except AttributeError:
             eca = None
         try:
             eea = daemon_spec.extra_entrypoint_args
             if eea:
-                for a in eea:
-                    # args with spaces need to be split into multiple args
-                    # in order to work properly
-                    args = a.split(' ')
-                    for arg in args:
-                        if arg:
-                            daemon_spec.extra_args.append(f'--extra-entrypoint-args={arg}')
+                params['extra_entrypoint_args'] = _to_args(eea)
         except AttributeError:
             eea = None
         return daemon_spec, eca, eea
@@ -1431,7 +1492,7 @@ class CephadmServe:
     async def _run_cephadm(self,
                            host: str,
                            entity: Union[CephadmNoImage, str],
-                           command: str,
+                           command: Union[str, List[str]],
                            args: List[str],
                            addr: Optional[str] = "",
                            stdin: Optional[str] = "",
@@ -1496,7 +1557,10 @@ class CephadmServe:
         final_args += ['--timeout', str(timeout)]
 
         # subcommand
-        final_args.append(command)
+        if isinstance(command, list):
+            final_args.extend([str(v) for v in command])
+        else:
+            final_args.append(command)
 
         # subcommand args
         if not no_fsid:
index 5ab8810db0edf0a7a474b73ef1215592fd8a07c7..7d7a04dad9d9c3aa2ed4490abe92aeba551e4bdc 100644 (file)
@@ -10,7 +10,14 @@ from typing import TYPE_CHECKING, List, Callable, TypeVar, \
 
 from mgr_module import HandleCommandResult, MonCommandFailed
 
-from ceph.deployment.service_spec import ServiceSpec, RGWSpec, CephExporterSpec, MONSpec
+from ceph.deployment.service_spec import (
+    ArgumentList,
+    CephExporterSpec,
+    GeneralArgList,
+    MONSpec,
+    RGWSpec,
+    ServiceSpec,
+)
 from ceph.deployment.utils import is_ipv6, unwrap_ipv6
 from mgr_util import build_url, merge_dicts
 from orchestrator import OrchestratorError, DaemonDescription, DaemonDescriptionStatus
@@ -32,7 +39,7 @@ def get_auth_entity(daemon_type: str, daemon_id: str, host: str = "") -> AuthEnt
     """
     # despite this mapping entity names to daemons, self.TYPE within
     # the CephService class refers to service types, not daemon types
-    if daemon_type in ['rgw', 'rbd-mirror', 'cephfs-mirror', 'nfs', "iscsi", 'ingress', 'ceph-exporter']:
+    if daemon_type in ['rgw', 'rbd-mirror', 'cephfs-mirror', 'nfs', "iscsi", 'nvmeof', 'ingress', 'ceph-exporter']:
         return AuthEntity(f'client.{daemon_type}.{daemon_id}')
     elif daemon_type in ['crash', 'agent']:
         if host == "":
@@ -59,10 +66,11 @@ class CephadmDaemonDeploySpec:
                  daemon_type: Optional[str] = None,
                  ip: Optional[str] = None,
                  ports: Optional[List[int]] = None,
+                 port_ips: Optional[Dict[str, str]] = None,
                  rank: Optional[int] = None,
                  rank_generation: Optional[int] = None,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[ArgumentList] = None,
+                 extra_entrypoint_args: Optional[ArgumentList] = None,
                  ):
         """
         A data struction to encapsulate `cephadm deploy ...
@@ -80,14 +88,21 @@ class CephadmDaemonDeploySpec:
         # for run_cephadm.
         self.keyring: Optional[str] = keyring
 
+        # FIXME: finish removing this
         # For run_cephadm. Would be great to have more expressive names.
-        self.extra_args: List[str] = extra_args or []
+        # self.extra_args: List[str] = extra_args or []
+        assert not extra_args
 
         self.ceph_conf = ceph_conf
         self.extra_files = extra_files or {}
 
         # TCP ports used by the daemon
         self.ports: List[int] = ports or []
+        # mapping of ports to IP addresses for ports
+        # we know we will only bind to on a specific IP.
+        # Useful for allowing multiple daemons to bind
+        # to the same port on different IPs on the same node
+        self.port_ips: Dict[str, str] = port_ips or {}
         self.ip: Optional[str] = ip
 
         # values to be populated during generate_config calls
@@ -144,10 +159,14 @@ class CephadmDaemonDeploySpec:
             ports=self.ports,
             rank=self.rank,
             rank_generation=self.rank_generation,
-            extra_container_args=self.extra_container_args,
-            extra_entrypoint_args=self.extra_entrypoint_args,
+            extra_container_args=cast(GeneralArgList, self.extra_container_args),
+            extra_entrypoint_args=cast(GeneralArgList, self.extra_entrypoint_args),
         )
 
+    @property
+    def extra_args(self) -> List[str]:
+        return []
+
 
 class CephadmService(metaclass=ABCMeta):
     """
index 7523bc086cee667a64f0c1e1ba6d1e4c4187f2ed..55be3045466abe3c9d130b2cabc8c871bec2fb73 100644 (file)
@@ -165,6 +165,14 @@ class IngressService(CephService):
             ]
 
         host_ip = daemon_spec.ip or self.mgr.inventory.get_addr(daemon_spec.host)
+        server_opts = []
+        if spec.enable_haproxy_protocol:
+            server_opts.append("send-proxy-v2")
+        logger.debug("enabled default server opts: %r", server_opts)
+        ip = '*' if spec.virtual_ips_list else str(spec.virtual_ip).split('/')[0] or daemon_spec.ip or '*'
+        frontend_port = daemon_spec.ports[0] if daemon_spec.ports else spec.frontend_port
+        if ip != '*' and frontend_port:
+            daemon_spec.port_ips = {str(frontend_port): ip}
         haproxy_conf = self.mgr.template.render(
             'services/ingress/haproxy.cfg.j2',
             {
@@ -174,10 +182,11 @@ class IngressService(CephService):
                 'servers': servers,
                 'user': spec.monitor_user or 'admin',
                 'password': password,
-                'ip': "*" if spec.virtual_ips_list else str(spec.virtual_ip).split('/')[0] or daemon_spec.ip or '*',
-                'frontend_port': daemon_spec.ports[0] if daemon_spec.ports else spec.frontend_port,
+                'ip': ip,
+                'frontend_port': frontend_port,
                 'monitor_port': daemon_spec.ports[1] if daemon_spec.ports else spec.monitor_port,
-                'local_host_ip': host_ip
+                'local_host_ip': host_ip,
+                'default_server_opts': server_opts,
             }
         )
         config_files = {
@@ -242,38 +251,35 @@ class IngressService(CephService):
         host = daemon_spec.host
         hosts = sorted(list(set([host] + [str(d.hostname) for d in daemons])))
 
-        # interface
-        bare_ips = []
-        if spec.virtual_ip:
-            bare_ips.append(str(spec.virtual_ip).split('/')[0])
-        elif spec.virtual_ips_list:
-            bare_ips = [str(vip).split('/')[0] for vip in spec.virtual_ips_list]
-        interface = None
-        for bare_ip in bare_ips:
+        def _get_valid_interface_and_ip(vip: str, host: str) -> Tuple[str, str]:
+            # interface
+            bare_ip = ipaddress.ip_interface(vip).ip
+            host_ip = ''
+            interface = None
             for subnet, ifaces in self.mgr.cache.networks.get(host, {}).items():
                 if ifaces and ipaddress.ip_address(bare_ip) in ipaddress.ip_network(subnet):
                     interface = list(ifaces.keys())[0]
+                    host_ip = ifaces[interface][0]
                     logger.info(
                         f'{bare_ip} is in {subnet} on {host} interface {interface}'
                     )
                     break
-            else:  # nobreak
-                continue
-            break
-        # try to find interface by matching spec.virtual_interface_networks
-        if not interface and spec.virtual_interface_networks:
-            for subnet, ifaces in self.mgr.cache.networks.get(host, {}).items():
-                if subnet in spec.virtual_interface_networks:
-                    interface = list(ifaces.keys())[0]
-                    logger.info(
-                        f'{spec.virtual_ip} will be configured on {host} interface '
-                        f'{interface} (which has guiding subnet {subnet})'
-                    )
-                    break
-        if not interface:
-            raise OrchestratorError(
-                f"Unable to identify interface for {spec.virtual_ip} on {host}"
-            )
+            # try to find interface by matching spec.virtual_interface_networks
+            if not interface and spec.virtual_interface_networks:
+                for subnet, ifaces in self.mgr.cache.networks.get(host, {}).items():
+                    if subnet in spec.virtual_interface_networks:
+                        interface = list(ifaces.keys())[0]
+                        host_ip = ifaces[interface][0]
+                        logger.info(
+                            f'{spec.virtual_ip} will be configured on {host} interface '
+                            f'{interface} (which is in subnet {subnet})'
+                        )
+                        break
+            if not interface:
+                raise OrchestratorError(
+                    f"Unable to identify interface for {spec.virtual_ip} on {host}"
+                )
+            return interface, host_ip
 
         # script to monitor health
         script = '/usr/bin/false'
@@ -318,7 +324,36 @@ class IngressService(CephService):
         # other_ips in conf file and converter to ips
         if host in hosts:
             hosts.remove(host)
-        other_ips = [utils.resolve_ip(self.mgr.inventory.get_addr(h)) for h in hosts]
+        host_ips: List[str] = []
+        other_ips: List[List[str]] = []
+        interfaces: List[str] = []
+        for vip in virtual_ips:
+            interface, ip = _get_valid_interface_and_ip(vip, host)
+            host_ips.append(ip)
+            interfaces.append(interface)
+            ips: List[str] = []
+            for h in hosts:
+                _, ip = _get_valid_interface_and_ip(vip, h)
+                ips.append(ip)
+            other_ips.append(ips)
+
+        # Use interface as vrrp_interface for vrrp traffic if vrrp_interface_network not set on the spec
+        vrrp_interfaces: List[str] = []
+        if not spec.vrrp_interface_network:
+            vrrp_interfaces = interfaces
+        else:
+            for subnet, ifaces in self.mgr.cache.networks.get(host, {}).items():
+                if subnet == spec.vrrp_interface_network:
+                    vrrp_interface = [list(ifaces.keys())[0]] * len(interfaces)
+                    logger.info(
+                        f'vrrp will be configured on {host} interface '
+                        f'{vrrp_interface} (which is in subnet {subnet})'
+                    )
+                    break
+            else:
+                raise OrchestratorError(
+                    f"Unable to identify vrrp interface for {spec.vrrp_interface_network} on {host}"
+                )
 
         keepalived_conf = self.mgr.template.render(
             'services/ingress/keepalived.conf.j2',
@@ -326,12 +361,14 @@ class IngressService(CephService):
                 'spec': spec,
                 'script': script,
                 'password': password,
-                'interface': interface,
+                'interfaces': interfaces,
+                'vrrp_interfaces': vrrp_interfaces,
                 'virtual_ips': virtual_ips,
+                'first_virtual_router_id': spec.first_virtual_router_id,
                 'states': states,
                 'priorities': priorities,
                 'other_ips': other_ips,
-                'host_ip': utils.resolve_ip(self.mgr.inventory.get_addr(host)),
+                'host_ips': host_ips,
             }
         )
 
index e0c0640ae49bf1a482f63a05d1a09aba199d7268..114c848608a307a19b8eee94287892e681603d81 100644 (file)
@@ -29,9 +29,10 @@ class GrafanaService(CephadmService):
 
     def generate_config(self, daemon_spec: CephadmDaemonDeploySpec) -> Tuple[Dict[str, Any], List[str]]:
         assert self.TYPE == daemon_spec.daemon_type
+        prometheus_user, prometheus_password = self.mgr._get_prometheus_credentials()
         deps = []  # type: List[str]
-        if self.mgr.secure_monitoring_stack and self.mgr.prometheus_web_user and self.mgr.prometheus_web_password:
-            deps.append(f'{hash(self.mgr.prometheus_web_user + self.mgr.prometheus_web_password)}')
+        if self.mgr.secure_monitoring_stack and prometheus_user and prometheus_password:
+            deps.append(f'{hash(prometheus_user + prometheus_password)}')
         deps.append(f'secure_monitoring_stack:{self.mgr.secure_monitoring_stack}')
 
         prom_services = []  # type: List[str]
@@ -58,8 +59,8 @@ class GrafanaService(CephadmService):
         oneline_root_cert = '\\n'.join([line.strip() for line in root_cert.splitlines()])
         grafana_data_sources = self.mgr.template.render('services/grafana/ceph-dashboard.yml.j2',
                                                         {'hosts': prom_services,
-                                                         'prometheus_user': self.mgr.prometheus_web_user,
-                                                         'prometheus_password': self.mgr.prometheus_web_password,
+                                                         'prometheus_user': prometheus_user,
+                                                         'prometheus_password': prometheus_password,
                                                          'cephadm_root_ca': oneline_root_cert,
                                                          'security_enabled': self.mgr.secure_monitoring_stack,
                                                          'loki_host': loki_host})
@@ -191,6 +192,8 @@ class GrafanaService(CephadmService):
 class AlertmanagerService(CephadmService):
     TYPE = 'alertmanager'
     DEFAULT_SERVICE_PORT = 9093
+    USER_CFG_KEY = 'alertmanager/web_user'
+    PASS_CFG_KEY = 'alertmanager/web_password'
 
     def prepare_create(self, daemon_spec: CephadmDaemonDeploySpec) -> CephadmDaemonDeploySpec:
         assert self.TYPE == daemon_spec.daemon_type
@@ -279,15 +282,16 @@ class AlertmanagerService(CephadmService):
         deps.append(f'secure_monitoring_stack:{self.mgr.secure_monitoring_stack}')
 
         if self.mgr.secure_monitoring_stack:
-            if self.mgr.alertmanager_web_user and self.mgr.alertmanager_web_password:
-                deps.append(f'{hash(self.mgr.alertmanager_web_user + self.mgr.alertmanager_web_password)}')
+            alertmanager_user, alertmanager_password = self.mgr._get_alertmanager_credentials()
+            if alertmanager_user and alertmanager_password:
+                deps.append(f'{hash(alertmanager_user + alertmanager_password)}')
             node_ip = self.mgr.inventory.get_addr(daemon_spec.host)
             host_fqdn = self._inventory_get_fqdn(daemon_spec.host)
             cert, key = self.mgr.http_server.service_discovery.ssl_certs.generate_cert(
                 host_fqdn, node_ip)
             context = {
-                'alertmanager_web_user': self.mgr.alertmanager_web_user,
-                'alertmanager_web_password': password_hash(self.mgr.alertmanager_web_password),
+                'alertmanager_web_user': alertmanager_user,
+                'alertmanager_web_password': password_hash(alertmanager_password),
             }
             return {
                 "files": {
@@ -343,6 +347,8 @@ class PrometheusService(CephadmService):
     TYPE = 'prometheus'
     DEFAULT_SERVICE_PORT = 9095
     DEFAULT_MGR_PROMETHEUS_PORT = 9283
+    USER_CFG_KEY = 'prometheus/web_user'
+    PASS_CFG_KEY = 'prometheus/web_password'
 
     def config(self, spec: ServiceSpec) -> None:
         # make sure module is enabled
@@ -397,10 +403,13 @@ class PrometheusService(CephadmService):
         mgr_prometheus_sd_url = f'{srv_end_point}service=mgr-prometheus'  # always included
         ceph_exporter_sd_url = f'{srv_end_point}service=ceph-exporter'  # always included
 
+        alertmanager_user, alertmanager_password = self.mgr._get_alertmanager_credentials()
+        prometheus_user, prometheus_password = self.mgr._get_prometheus_credentials()
+
         # generate the prometheus configuration
         context = {
-            'alertmanager_web_user': self.mgr.alertmanager_web_user,
-            'alertmanager_web_password': self.mgr.alertmanager_web_password,
+            'alertmanager_web_user': alertmanager_user,
+            'alertmanager_web_password': alertmanager_password,
             'secure_monitoring_stack': self.mgr.secure_monitoring_stack,
             'service_discovery_username': self.mgr.http_server.service_discovery.username,
             'service_discovery_password': self.mgr.http_server.service_discovery.password,
@@ -412,8 +421,8 @@ class PrometheusService(CephadmService):
         }
 
         web_context = {
-            'prometheus_web_user': self.mgr.prometheus_web_user,
-            'prometheus_web_password': password_hash(self.mgr.prometheus_web_password),
+            'prometheus_web_user': prometheus_user,
+            'prometheus_web_password': password_hash(prometheus_password),
         }
 
         if self.mgr.secure_monitoring_stack:
@@ -482,10 +491,12 @@ class PrometheusService(CephadmService):
         # re-deploy prometheus if the mgr has changed (due to a fail-over i.e).
         deps.append(self.mgr.get_active_mgr().name())
         if self.mgr.secure_monitoring_stack:
-            if self.mgr.prometheus_web_user and self.mgr.prometheus_web_password:
-                deps.append(f'{hash(self.mgr.prometheus_web_user + self.mgr.prometheus_web_password)}')
-            if self.mgr.alertmanager_web_user and self.mgr.alertmanager_web_password:
-                deps.append(f'{hash(self.mgr.alertmanager_web_user + self.mgr.alertmanager_web_password)}')
+            alertmanager_user, alertmanager_password = self.mgr._get_alertmanager_credentials()
+            prometheus_user, prometheus_password = self.mgr._get_prometheus_credentials()
+            if prometheus_user and prometheus_password:
+                deps.append(f'{hash(prometheus_user + prometheus_password)}')
+            if alertmanager_user and alertmanager_password:
+                deps.append(f'{hash(alertmanager_user + alertmanager_password)}')
         deps.append(f'secure_monitoring_stack:{self.mgr.secure_monitoring_stack}')
         # add dependency on ceph-exporter daemons
         deps += [d.name() for d in self.mgr.cache.get_daemons_by_service('ceph-exporter')]
index 0bd670377d01e25df7f480948975898582e7ebcd..f94a00f5bdf944b55e635764594f71e697188a95 100644 (file)
@@ -1,4 +1,5 @@
 import errno
+import ipaddress
 import logging
 import os
 import subprocess
@@ -92,9 +93,14 @@ class NFSService(CephService):
         # create the RGW keyring
         rgw_user = f'{rados_user}-rgw'
         rgw_keyring = self.create_rgw_keyring(daemon_spec)
-        bind_addr = spec.virtual_ip if spec.virtual_ip else (daemon_spec.ip if daemon_spec.ip else '')
+        if spec.virtual_ip:
+            bind_addr = spec.virtual_ip
+        else:
+            bind_addr = daemon_spec.ip if daemon_spec.ip else ''
         if not bind_addr:
             logger.warning(f'Bind address in {daemon_type}.{daemon_id}\'s ganesha conf is defaulting to empty')
+        else:
+            logger.debug("using haproxy bind address: %r", bind_addr)
 
         # generate the ganesha config
         def get_ganesha_conf() -> str:
@@ -108,7 +114,11 @@ class NFSService(CephService):
                 # fall back to default NFS port if not present in daemon_spec
                 "port": daemon_spec.ports[0] if daemon_spec.ports else 2049,
                 "bind_addr": bind_addr,
+                "haproxy_hosts": [],
             }
+            if spec.enable_haproxy_protocol:
+                context["haproxy_hosts"] = self._haproxy_hosts()
+                logger.debug("selected haproxy_hosts: %r", context["haproxy_hosts"])
             return self.mgr.template.render('services/nfs/ganesha.conf.j2', context)
 
         # generate the cephadm config json
@@ -291,3 +301,31 @@ class NFSService(CephService):
             stderr=subprocess.PIPE,
             timeout=10
         )
+
+    def _haproxy_hosts(self) -> List[str]:
+        # NB: Ideally, we would limit the list to IPs on hosts running
+        # haproxy/ingress only, but due to the nature of cephadm today
+        # we'd "only know the set of haproxy hosts after they've been
+        # deployed" (quoth @adk7398). As it is today we limit the list
+        # of hosts we know are managed by cephadm. That ought to be
+        # good enough to prevent acceping haproxy protocol messages
+        # from "rouge" systems that are not under our control. At
+        # least until we learn otherwise.
+        cluster_ips: List[str] = []
+        for host in self.mgr.inventory.keys():
+            default_addr = self.mgr.inventory.get_addr(host)
+            cluster_ips.append(default_addr)
+            nets = self.mgr.cache.networks.get(host)
+            if not nets:
+                continue
+            for subnet, iface in nets.items():
+                ip_subnet = ipaddress.ip_network(subnet)
+                if ipaddress.ip_address(default_addr) in ip_subnet:
+                    continue  # already present
+                if ip_subnet.is_loopback or ip_subnet.is_link_local:
+                    continue  # ignore special subnets
+                addrs: List[str] = sum((addr_list for addr_list in iface.values()), [])
+                if addrs:
+                    # one address per interface/subnet is enough
+                    cluster_ips.append(addrs[0])
+        return cluster_ips
diff --git a/ceph/src/pybind/mgr/cephadm/services/nvmeof.py b/ceph/src/pybind/mgr/cephadm/services/nvmeof.py
new file mode 100644 (file)
index 0000000..7d2dd16
--- /dev/null
@@ -0,0 +1,93 @@
+import errno
+import logging
+import json
+from typing import List, cast, Optional
+
+from mgr_module import HandleCommandResult
+from ceph.deployment.service_spec import NvmeofServiceSpec
+
+from orchestrator import DaemonDescription, DaemonDescriptionStatus
+from .cephadmservice import CephadmDaemonDeploySpec, CephService
+from .. import utils
+
+logger = logging.getLogger(__name__)
+
+
+class NvmeofService(CephService):
+    TYPE = 'nvmeof'
+
+    def config(self, spec: NvmeofServiceSpec) -> None:  # type: ignore
+        assert self.TYPE == spec.service_type
+        assert spec.pool
+        self.mgr._check_pool_exists(spec.pool, spec.service_name())
+
+    def prepare_create(self, daemon_spec: CephadmDaemonDeploySpec) -> CephadmDaemonDeploySpec:
+        assert self.TYPE == daemon_spec.daemon_type
+
+        spec = cast(NvmeofServiceSpec, self.mgr.spec_store[daemon_spec.service_name].spec)
+        nvmeof_gw_id = daemon_spec.daemon_id
+        host_ip = self.mgr.inventory.get_addr(daemon_spec.host)
+
+        keyring = self.get_keyring_with_caps(self.get_auth_entity(nvmeof_gw_id),
+                                             ['mon', 'profile rbd',
+                                              'osd', 'allow all tag rbd *=*'])
+
+        # TODO: check if we can force jinja2 to generate dicts with double quotes instead of using json.dumps
+        transport_tcp_options = json.dumps(spec.transport_tcp_options) if spec.transport_tcp_options else None
+        name = '{}.{}'.format(utils.name_to_config_section('nvmeof'), nvmeof_gw_id)
+        rados_id = name[len('client.'):] if name.startswith('client.') else name
+        context = {
+            'spec': spec,
+            'name': name,
+            'addr': host_ip,
+            'port': spec.port,
+            'log_level': 'WARN',
+            'rpc_socket': '/var/tmp/spdk.sock',
+            'transport_tcp_options': transport_tcp_options,
+            'rados_id': rados_id
+        }
+        gw_conf = self.mgr.template.render('services/nvmeof/ceph-nvmeof.conf.j2', context)
+
+        daemon_spec.keyring = keyring
+        daemon_spec.extra_files = {'ceph-nvmeof.conf': gw_conf}
+        daemon_spec.final_config, daemon_spec.deps = self.generate_config(daemon_spec)
+        daemon_spec.deps = []
+        return daemon_spec
+
+    def config_dashboard(self, daemon_descrs: List[DaemonDescription]) -> None:
+        # TODO: what integration do we need with the dashboard?
+        pass
+
+    def ok_to_stop(self,
+                   daemon_ids: List[str],
+                   force: bool = False,
+                   known: Optional[List[str]] = None) -> HandleCommandResult:
+        # if only 1 nvmeof, alert user (this is not passable with --force)
+        warn, warn_message = self._enough_daemons_to_stop(self.TYPE, daemon_ids, 'Nvmeof', 1, True)
+        if warn:
+            return HandleCommandResult(-errno.EBUSY, '', warn_message)
+
+        # if reached here, there is > 1 nvmeof daemon. make sure none are down
+        warn_message = ('ALERT: 1 nvmeof daemon is already down. Please bring it back up before stopping this one')
+        nvmeof_daemons = self.mgr.cache.get_daemons_by_type(self.TYPE)
+        for i in nvmeof_daemons:
+            if i.status != DaemonDescriptionStatus.running:
+                return HandleCommandResult(-errno.EBUSY, '', warn_message)
+
+        names = [f'{self.TYPE}.{d_id}' for d_id in daemon_ids]
+        warn_message = f'It is presumed safe to stop {names}'
+        return HandleCommandResult(0, warn_message, '')
+
+    def post_remove(self, daemon: DaemonDescription, is_failed_deploy: bool) -> None:
+        """
+        Called after the daemon is removed.
+        """
+        logger.debug(f'Post remove daemon {self.TYPE}.{daemon.daemon_id}')
+        # TODO: remove config for dashboard nvmeof gateways if any
+        # and any certificates being used for mTLS
+
+    def purge(self, service_name: str) -> None:
+        """Removes configuration
+        """
+        #  TODO: what should we purge in this case (if any)?
+        pass
index c8c8ac1a9b27e0ffc40e6f258cf34678860b837d..bfecc57230abc61fe312762470caa46a87734f77 100644 (file)
@@ -13,6 +13,7 @@ from ceph.utils import datetime_to_str, str_to_datetime
 from datetime import datetime
 import orchestrator
 from cephadm.serve import CephadmServe
+from cephadm.utils import SpecialHostLabels
 from ceph.utils import datetime_now
 from orchestrator import OrchestratorError, DaemonDescription
 from mgr_module import MonCommandFailed
@@ -42,7 +43,7 @@ class OSDService(CephService):
                     host, drive_group))
                 return None
             # skip this host if we cannot schedule here
-            if self.mgr.inventory.has_label(host, '_no_schedule'):
+            if self.mgr.inventory.has_label(host, SpecialHostLabels.DRAIN_DAEMONS):
                 return None
 
             osd_id_claims_for_host = osd_id_claims.filtered_by_host(host)
index 560b8b826d5f0b6a23cd424c33bb19a3d32f9d84..d17cc0fcc1985b7f364e1d3ba6e92630e5a651ca 100644 (file)
@@ -123,7 +123,7 @@ class SSHManager:
         except OSError as e:
             self.mgr.offline_hosts.add(host)
             log_content = log_string.getvalue()
-            msg = f"Can't communicate with remote host `{addr}`, possibly because python3 is not installed there or you are missing NOPASSWD in sudoers. {str(e)}"
+            msg = f"Can't communicate with remote host `{addr}`, possibly because the host is not reachable or python3 is not installed on the host. {str(e)}"
             logger.exception(msg)
             raise HostConnectionError(msg, host, addr)
         except asyncssh.Error as e:
@@ -151,31 +151,44 @@ class SSHManager:
 
     async def _execute_command(self,
                                host: str,
-                               cmd: List[str],
+                               cmd_components: List[str],
                                stdin: Optional[str] = None,
                                addr: Optional[str] = None,
                                log_command: Optional[bool] = True,
                                ) -> Tuple[str, str, int]:
+
         conn = await self._remote_connection(host, addr)
         sudo_prefix = "sudo " if self.mgr.ssh_user != 'root' else ""
-        cmd = sudo_prefix + " ".join(quote(x) for x in cmd)
+        cmd = sudo_prefix + " ".join(quote(x) for x in cmd_components)
+        try:
+            address = addr or self.mgr.inventory.get_addr(host)
+        except Exception:
+            address = host
         if log_command:
             logger.debug(f'Running command: {cmd}')
         try:
-            r = await conn.run(f'{sudo_prefix}true', check=True, timeout=5)
+            r = await conn.run(f'{sudo_prefix}true', check=True, timeout=5)  # host quick check
             r = await conn.run(cmd, input=stdin)
-        # handle these Exceptions otherwise you might get a weird error like TypeError: __init__() missing 1 required positional argument: 'reason' (due to the asyncssh error interacting with raise_if_exception)
-        except (asyncssh.ChannelOpenError, asyncssh.ProcessError, Exception) as e:
+        # handle these Exceptions otherwise you might get a weird error like
+        # TypeError: __init__() missing 1 required positional argument: 'reason' (due to the asyncssh error interacting with raise_if_exception)
+        except asyncssh.ChannelOpenError as e:
             # SSH connection closed or broken, will create new connection next call
             logger.debug(f'Connection to {host} failed. {str(e)}')
             await self._reset_con(host)
             self.mgr.offline_hosts.add(host)
-            if not addr:
-                try:
-                    addr = self.mgr.inventory.get_addr(host)
-                except Exception:
-                    addr = host
-            raise HostConnectionError(f'Unable to reach remote host {host}. {str(e)}', host, addr)
+            raise HostConnectionError(f'Unable to reach remote host {host}. {str(e)}', host, address)
+        except asyncssh.ProcessError as e:
+            msg = f"Cannot execute the command '{cmd}' on the {host}. {str(e.stderr)}."
+            logger.debug(msg)
+            await self._reset_con(host)
+            self.mgr.offline_hosts.add(host)
+            raise HostConnectionError(msg, host, address)
+        except Exception as e:
+            msg = f"Generic error while executing command '{cmd}' on the host {host}. {str(e)}."
+            logger.debug(msg)
+            await self._reset_con(host)
+            self.mgr.offline_hosts.add(host)
+            raise HostConnectionError(msg, host, address)
 
         def _rstrip(v: Union[bytes, str, None]) -> str:
             if not v:
@@ -318,18 +331,28 @@ class SSHManager:
         # identity
         ssh_key = self.mgr.get_store("ssh_identity_key")
         ssh_pub = self.mgr.get_store("ssh_identity_pub")
+        ssh_cert = self.mgr.get_store("ssh_identity_cert")
         self.mgr.ssh_pub = ssh_pub
         self.mgr.ssh_key = ssh_key
-        if ssh_key and ssh_pub:
+        self.mgr.ssh_cert = ssh_cert
+        if ssh_key:
             self.mgr.tkey = NamedTemporaryFile(prefix='cephadm-identity-')
             self.mgr.tkey.write(ssh_key.encode('utf-8'))
             os.fchmod(self.mgr.tkey.fileno(), 0o600)
             self.mgr.tkey.flush()  # make visible to other processes
-            tpub = open(self.mgr.tkey.name + '.pub', 'w')
-            os.fchmod(tpub.fileno(), 0o600)
-            tpub.write(ssh_pub)
-            tpub.flush()  # make visible to other processes
-            temp_files += [self.mgr.tkey, tpub]
+            temp_files += [self.mgr.tkey]
+            if ssh_pub:
+                tpub = open(self.mgr.tkey.name + '.pub', 'w')
+                os.fchmod(tpub.fileno(), 0o600)
+                tpub.write(ssh_pub)
+                tpub.flush()  # make visible to other processes
+                temp_files += [tpub]
+            if ssh_cert:
+                tcert = open(self.mgr.tkey.name + '-cert.pub', 'w')
+                os.fchmod(tcert.fileno(), 0o600)
+                tcert.write(ssh_cert)
+                tcert.flush()  # make visible to other processes
+                temp_files += [tcert]
             ssh_options += ['-i', self.mgr.tkey.name]
 
         self.mgr._temp_files = temp_files
index a529798e739d77d4ecbe3ed3d22729901c1a1be4..100acce401ba0e2fd303556553e1812fd27c82d5 100644 (file)
@@ -81,6 +81,9 @@ backend backend
     mode        tcp
     balance     source
     hash-type   consistent
+{% if default_server_opts %}
+    default-server {{ default_server_opts|join(" ") }}
+{% endif %}
     {% for server in servers %}
     server {{ server.name }} {{ server.ip }}:{{ server.port }}
     {% endfor %}
index f560c9756654d0d51a025dc37d668ee7575023da..e19f556c6f42727247600466ffdd7097df9b80a5 100644 (file)
@@ -11,21 +11,23 @@ vrrp_script check_backend {
 vrrp_instance VI_{{ x }} {
   state {{ states[x] }}
   priority {{ priorities[x] }}
-  interface {{ interface }}
-  virtual_router_id {{ 50 + x }}
+  interface {{ vrrp_interfaces[x] }}
+  virtual_router_id {{ first_virtual_router_id + x }}
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass {{ password }}
   }
-  unicast_src_ip {{ host_ip }}
+{% if not spec.use_keepalived_multicast %}
+  unicast_src_ip {{ host_ips[x] }}
   unicast_peer {
-    {% for ip in other_ips %}
+    {% for ip in other_ips[x] %}
     {{ ip }}
     {% endfor %}
   }
+{% endif %}
   virtual_ipaddress {
-    {{ virtual_ips[x] }} dev {{ interface }}
+    {{ virtual_ips[x] }} dev {{ interfaces[x] }}
   }
   track_script {
       check_backend
index 9d6e15f1c4f7111036384e269898f16501069732..ab8df71923b495c5d92741140cb409a4e0215d8e 100644 (file)
@@ -7,6 +7,9 @@ NFS_CORE_PARAM {
 {% if bind_addr %}
         Bind_addr = {{ bind_addr }};
 {% endif %}
+{% if haproxy_hosts %}
+        HAProxy_Hosts = {{ haproxy_hosts|join(", ") }};
+{% endif %}
 }
 
 NFSv4 {
diff --git a/ceph/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2 b/ceph/src/pybind/mgr/cephadm/templates/services/nvmeof/ceph-nvmeof.conf.j2
new file mode 100644 (file)
index 0000000..69b8332
--- /dev/null
@@ -0,0 +1,34 @@
+# {{ cephadm_managed }}
+[gateway]
+name = {{ name }}
+group = {{ spec.group }}
+addr = {{ addr }}
+port = {{ port }}
+enable_auth = {{ spec.enable_auth }}
+state_update_notify = True
+state_update_interval_sec = 5
+
+[ceph]
+pool = {{ spec.pool }}
+config_file = /etc/ceph/ceph.conf
+id = {{ rados_id }}
+
+[mtls]
+server_key = {{ spec.server_key }}
+client_key = {{ spec.client_key }}
+server_cert = {{ spec.server_cert }}
+client_cert = {{ spec.client_cert }}
+
+[spdk]
+tgt_path = {{ spec.tgt_path }}
+rpc_socket = {{ rpc_socket }}
+timeout = {{ spec.timeout }}
+log_level = {{ log_level }}
+conn_retries = {{ spec.conn_retries }}
+transports = {{ spec.transports }}
+{% if transport_tcp_options %}
+transport_tcp_options = {{ transport_tcp_options }}
+{% endif %}
+{% if spec.tgt_cmd_extra_args %}
+tgt_cmd_extra_args = {{ spec.tgt_cmd_extra_args }}
+{% endif %}
index 364d4db692f525e5592b3dcf53cb040d14fb0db5..24fcb0280949ddcf7bdb7f5839027db5fe851518 100644 (file)
@@ -8,20 +8,29 @@ import pytest
 
 from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection
 from cephadm.serve import CephadmServe
-from cephadm.inventory import HostCacheStatus
+from cephadm.inventory import HostCacheStatus, ClientKeyringSpec
 from cephadm.services.osd import OSD, OSDRemovalQueue, OsdIdClaims
+from cephadm.utils import SpecialHostLabels
 
 try:
     from typing import List
 except ImportError:
     pass
 
-from ceph.deployment.service_spec import ServiceSpec, PlacementSpec, RGWSpec, \
-    NFSServiceSpec, IscsiServiceSpec, HostPlacementSpec, CustomContainerSpec, MDSSpec, \
-    CustomConfig
+from ceph.deployment.service_spec import (
+    CustomConfig,
+    CustomContainerSpec,
+    HostPlacementSpec,
+    IscsiServiceSpec,
+    MDSSpec,
+    NFSServiceSpec,
+    PlacementSpec,
+    RGWSpec,
+    ServiceSpec,
+)
 from ceph.deployment.drive_selection.selector import DriveSelection
 from ceph.deployment.inventory import Devices, Device
-from ceph.utils import datetime_to_str, datetime_now
+from ceph.utils import datetime_to_str, datetime_now, str_to_datetime
 from orchestrator import DaemonDescription, InventoryHost, \
     HostSpec, OrchestratorError, DaemonDescriptionStatus, OrchestratorEvent
 from tests import mock
@@ -119,10 +128,7 @@ def with_osd_daemon(cephadm_module: CephadmOrchestrator, _run_cephadm, host: str
     assert _run_cephadm.mock_calls == [
         mock.call(host, 'osd', 'ceph-volume',
                   ['--', 'lvm', 'list', '--format', 'json'], no_fsid=False, error_ok=False, image='', log_output=True),
-        mock.call(host, f'osd.{osd_id}', 'deploy',
-                  ['--name', f'osd.{osd_id}', '--meta-json', mock.ANY,
-                   '--config-json', '-', '--osd-fsid', 'uuid'],
-                  stdin=mock.ANY, image=''),
+        mock.call(host, f'osd.{osd_id}', ['_orch', 'deploy'], [], stdin=mock.ANY),
         mock.call(host, 'osd', 'ceph-volume',
                   ['--', 'raw', 'list', '--format', 'json'], no_fsid=False, error_ok=False, image='', log_output=True),
     ]
@@ -452,16 +458,37 @@ class TestCephadm(object):
                 CephadmServe(cephadm_module)._check_daemons()
 
                 _run_cephadm.assert_called_with(
-                    'test', 'mon.test', 'deploy', [
-                        '--name', 'mon.test',
-                        '--meta-json', ('{"service_name": "mon", "ports": [], "ip": null, "deployed_by": [], "rank": null, '
-                                        '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--reconfig',
-                    ],
-                    stdin='{"config": "[mon]\\nk=v\\n[mon.test]\\npublic network = 127.0.0.0/8\\n", '
-                    + '"keyring": "", "files": {"config": "[mon.test]\\npublic network = 127.0.0.0/8\\n"}}',
-                    image='')
+                    'test',
+                    'mon.test',
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": "mon.test",
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'reconfig': True,
+                        },
+                        "meta": {
+                            'service_name': 'mon',
+                            'ports': [],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "config": "[mon]\nk=v\n[mon.test]\npublic network = 127.0.0.0/8\n",
+                            "keyring": "",
+                            "files": {
+                                "config": "[mon.test]\npublic network = 127.0.0.0/8\n"
+                            },
+                        },
+                    }),
+                )
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm")
     def test_mon_crush_location_deployment(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
@@ -486,14 +513,35 @@ class TestCephadm(object):
 
             with with_service(cephadm_module, ServiceSpec(service_type='mon', crush_locations={'test': ['datacenter=a', 'rack=2']}), CephadmOrchestrator.apply_mon, 'test'):
                 _run_cephadm.assert_called_with(
-                    'test', 'mon.test', 'deploy', [
-                        '--name', 'mon.test',
-                        '--meta-json', '{"service_name": "mon", "ports": [], "ip": null, "deployed_by": [], "rank": null, "rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}',
-                        '--config-json', '-',
-                    ],
-                    stdin=('{"config": "[mon.test]\\npublic network = 127.0.0.0/8\\n", "keyring": "", '
-                           '"files": {"config": "[mon.test]\\npublic network = 127.0.0.0/8\\n"}, "crush_location": "datacenter=a"}'),
-                    image='',
+                    'test',
+                    'mon.test',
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": "mon.test",
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {},
+                        "meta": {
+                            'service_name': 'mon',
+                            'ports': [],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "config": "[mon.test]\npublic network = 127.0.0.0/8\n",
+                            "keyring": "",
+                            "files": {
+                                "config": "[mon.test]\npublic network = 127.0.0.0/8\n",
+                            },
+                            "crush_location": "datacenter=a",
+                        },
+                    }),
                 )
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -502,16 +550,39 @@ class TestCephadm(object):
         with with_host(cephadm_module, 'test'):
             with with_service(cephadm_module, ServiceSpec(service_type='crash', extra_container_args=['--cpus=2', '--quiet']), CephadmOrchestrator.apply_crash):
                 _run_cephadm.assert_called_with(
-                    'test', 'crash.test', 'deploy', [
-                        '--name', 'crash.test',
-                        '--meta-json', ('{"service_name": "crash", "ports": [], "ip": null, "deployed_by": [], "rank": null, '
-                                        '"rank_generation": null, "extra_container_args": ["--cpus=2", "--quiet"], "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--extra-container-args=--cpus=2',
-                        '--extra-container-args=--quiet'
-                    ],
-                    stdin='{"config": "", "keyring": "[client.crash.test]\\nkey = None\\n"}',
-                    image='',
+                    'test',
+                    'crash.test',
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": "crash.test",
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'extra_container_args': [
+                                "--cpus=2",
+                                "--quiet",
+                            ],
+                        },
+                        "meta": {
+                            'service_name': 'crash',
+                            'ports': [],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': [
+                                "--cpus=2",
+                                "--quiet",
+                            ],
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "config": "",
+                            "keyring": "[client.crash.test]\nkey = None\n",
+                        },
+                    }),
                 )
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -522,19 +593,37 @@ class TestCephadm(object):
                               extra_entrypoint_args=['--collector.textfile.directory=/var/lib/node_exporter/textfile_collector', '--some-other-arg']),
                               CephadmOrchestrator.apply_node_exporter):
                 _run_cephadm.assert_called_with(
-                    'test', 'node-exporter.test', 'deploy', [
-                        '--name', 'node-exporter.test',
-                        '--meta-json', ('{"service_name": "node-exporter", "ports": [9100], "ip": null, "deployed_by": [], "rank": null, '
-                                        '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": '
-                                        '["--collector.textfile.directory=/var/lib/node_exporter/textfile_collector", '
-                                        '"--some-other-arg"]}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9100',
-                        '--extra-entrypoint-args=--collector.textfile.directory=/var/lib/node_exporter/textfile_collector',
-                        '--extra-entrypoint-args=--some-other-arg'
-                    ],
-                    stdin='{}',
-                    image='',
+                    'test',
+                    'node-exporter.test',
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": "node-exporter.test",
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9100],
+                            'extra_entrypoint_args': [
+                                "--collector.textfile.directory=/var/lib/node_exporter/textfile_collector",
+                                "--some-other-arg",
+                            ],
+                        },
+                        "meta": {
+                            'service_name': 'node-exporter',
+                            'ports': [9100],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': [
+                                "--collector.textfile.directory=/var/lib/node_exporter/textfile_collector",
+                                "--some-other-arg",
+                            ],
+                        },
+                        "config_blobs": {},
+                    }),
                 )
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -546,21 +635,44 @@ class TestCephadm(object):
                               extra_container_args=['--cpus=2', '--quiet']),
                               CephadmOrchestrator.apply_node_exporter):
                 _run_cephadm.assert_called_with(
-                    'test', 'node-exporter.test', 'deploy', [
-                        '--name', 'node-exporter.test',
-                        '--meta-json', ('{"service_name": "node-exporter", "ports": [9100], "ip": null, "deployed_by": [], "rank": null, '
-                                        '"rank_generation": null, "extra_container_args": ["--cpus=2", "--quiet"], "extra_entrypoint_args": '
-                                        '["--collector.textfile.directory=/var/lib/node_exporter/textfile_collector", '
-                                        '"--some-other-arg"]}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9100',
-                        '--extra-container-args=--cpus=2',
-                        '--extra-container-args=--quiet',
-                        '--extra-entrypoint-args=--collector.textfile.directory=/var/lib/node_exporter/textfile_collector',
-                        '--extra-entrypoint-args=--some-other-arg'
-                    ],
-                    stdin='{}',
-                    image='',
+                    'test',
+                    'node-exporter.test',
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": "node-exporter.test",
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9100],
+                            'extra_container_args': [
+                                "--cpus=2",
+                                "--quiet",
+                            ],
+                            'extra_entrypoint_args': [
+                                "--collector.textfile.directory=/var/lib/node_exporter/textfile_collector",
+                                "--some-other-arg",
+                            ],
+                        },
+                        "meta": {
+                            'service_name': 'node-exporter',
+                            'ports': [9100],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': [
+                                "--cpus=2",
+                                "--quiet",
+                            ],
+                            'extra_entrypoint_args': [
+                                "--collector.textfile.directory=/var/lib/node_exporter/textfile_collector",
+                                "--some-other-arg",
+                            ],
+                        },
+                        "config_blobs": {},
+                    }),
                 )
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -572,24 +684,48 @@ class TestCephadm(object):
                               extra_container_args=['--cpus    2', '--container-arg-with-value value']),
                               CephadmOrchestrator.apply_node_exporter):
                 _run_cephadm.assert_called_with(
-                    'test', 'node-exporter.test', 'deploy', [
-                        '--name', 'node-exporter.test',
-                        '--meta-json', ('{"service_name": "node-exporter", "ports": [9100], "ip": null, "deployed_by": [], "rank": null, '
-                                        '"rank_generation": null, "extra_container_args": ["--cpus    2", "--container-arg-with-value value"], '
-                                        '"extra_entrypoint_args": ["--entrypoint-arg-with-value value", "--some-other-arg   3"]}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9100',
-                        '--extra-container-args=--cpus',
-                        '--extra-container-args=2',
-                        '--extra-container-args=--container-arg-with-value',
-                        '--extra-container-args=value',
-                        '--extra-entrypoint-args=--entrypoint-arg-with-value',
-                        '--extra-entrypoint-args=value',
-                        '--extra-entrypoint-args=--some-other-arg',
-                        '--extra-entrypoint-args=3'
-                    ],
-                    stdin='{}',
-                    image='',
+                    'test',
+                    'node-exporter.test',
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": "node-exporter.test",
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9100],
+                            'extra_container_args': [
+                                "--cpus",
+                                "2",
+                                "--container-arg-with-value",
+                                "value",
+                            ],
+                            'extra_entrypoint_args': [
+                                "--entrypoint-arg-with-value",
+                                "value",
+                                "--some-other-arg",
+                                "3",
+                            ],
+                        },
+                        "meta": {
+                            'service_name': 'node-exporter',
+                            'ports': [9100],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': [
+                                "--cpus    2",
+                                "--container-arg-with-value value",
+                            ],
+                            'extra_entrypoint_args': [
+                                "--entrypoint-arg-with-value value",
+                                "--some-other-arg   3",
+                            ],
+                        },
+                        "config_blobs": {},
+                    }),
                 )
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -608,20 +744,45 @@ class TestCephadm(object):
                          mount_path='/etc/test.conf'),
             CustomConfig(content='\n'.join(test_cert), mount_path='/usr/share/grafana/thing.crt')
         ]
-        conf_outs = [json.dumps(c.to_json()) for c in configs]
-        stdin_str = '{' + \
-            f'"config": "", "keyring": "[client.crash.test]\\nkey = None\\n", "custom_config_files": [{conf_outs[0]}, {conf_outs[1]}]' + '}'
+        tc_joined = '\n'.join(test_cert)
         with with_host(cephadm_module, 'test'):
             with with_service(cephadm_module, ServiceSpec(service_type='crash', custom_configs=configs), CephadmOrchestrator.apply_crash):
-                _run_cephadm.assert_called_with(
-                    'test', 'crash.test', 'deploy', [
-                        '--name', 'crash.test',
-                        '--meta-json', ('{"service_name": "crash", "ports": [], "ip": null, "deployed_by": [], "rank": null, '
-                                        '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                    ],
-                    stdin=stdin_str,
-                    image='',
+                _run_cephadm(
+                    'test',
+                    'crash.test',
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": "crash.test",
+                        "image": "",
+                        "deploy_arguments": [],
+                        "params": {},
+                        "meta": {
+                            "service_name": "crash",
+                            "ports": [],
+                            "ip": None,
+                            "deployed_by": [],
+                            "rank": None,
+                            "rank_generation": None,
+                            "extra_container_args": None,
+                            "extra_entrypoint_args": None,
+                        },
+                        "config_blobs": {
+                            "config": "",
+                            "keyring": "[client.crash.test]\nkey = None\n",
+                            "custom_config_files": [
+                                {
+                                    "content": "something something something",
+                                    "mount_path": "/etc/test.conf",
+                                },
+                                {
+                                    "content": tc_joined,
+                                    "mount_path": "/usr/share/grafana/thing.crt",
+                                },
+                            ]
+                        }
+                    }),
                 )
 
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}'))
@@ -1695,15 +1856,11 @@ class TestCephadm(object):
 
                         # being in offline/maint mode should disqualify hosts from being
                         # candidates for scheduling
-                        candidates = [
-                            h.hostname for h in cephadm_module.cache.get_schedulable_hosts()]
-                        assert 'test2' in candidates
-                        assert 'test3' in candidates
+                        assert cephadm_module.cache.is_host_schedulable('test2')
+                        assert cephadm_module.cache.is_host_schedulable('test3')
 
-                        unreachable = [
-                            h.hostname for h in cephadm_module.cache.get_unreachable_hosts()]
-                        assert 'test2' in unreachable
-                        assert 'test3' in unreachable
+                        assert cephadm_module.cache.is_host_unreachable('test2')
+                        assert cephadm_module.cache.is_host_unreachable('test3')
 
                         with with_service(cephadm_module, ServiceSpec('crash', placement=PlacementSpec(host_pattern='*'))):
                             # re-apply services. No mgr should be removed from maint/offline hosts
@@ -1873,6 +2030,34 @@ class TestCephadm(object):
             assert f1_before_digest != f1_after_digest
             assert f2_before_digest != f2_after_digest
 
+    @mock.patch("cephadm.inventory.HostCache.get_host_client_files")
+    def test_dont_write_client_files_to_unreachable_hosts(self, _get_client_files, cephadm_module):
+        cephadm_module.inventory.add_host(HostSpec('host1', '1.2.3.1'))  # online
+        cephadm_module.inventory.add_host(HostSpec('host2', '1.2.3.2'))  # maintenance
+        cephadm_module.inventory.add_host(HostSpec('host3', '1.2.3.3'))  # offline
+
+        # mark host2 as maintenance and host3 as offline
+        cephadm_module.inventory._inventory['host2']['status'] = 'maintenance'
+        cephadm_module.offline_hosts.add('host3')
+
+        # verify host2 and host3 are correctly marked as unreachable but host1 is not
+        assert not cephadm_module.cache.is_host_unreachable('host1')
+        assert cephadm_module.cache.is_host_unreachable('host2')
+        assert cephadm_module.cache.is_host_unreachable('host3')
+
+        _get_client_files.side_effect = Exception('Called _get_client_files')
+
+        # with the online host, should call _get_client_files which
+        # we have setup to raise an Exception
+        with pytest.raises(Exception, match='Called _get_client_files'):
+            CephadmServe(cephadm_module)._write_client_files({}, 'host1')
+
+        # for the maintenance and offline host, _get_client_files should
+        # not be called and it should just return immediately with nothing
+        # having been raised
+        CephadmServe(cephadm_module)._write_client_files({}, 'host2')
+        CephadmServe(cephadm_module)._write_client_files({}, 'host3')
+
     def test_etc_ceph_init(self):
         with with_cephadm_module({'manage_etc_ceph_ceph_conf': True}) as m:
             assert m.manage_etc_ceph_ceph_conf is True
@@ -1919,6 +2104,35 @@ osd_k2 = osd_v2
 
         assert cephadm_module.get_minimal_ceph_conf() == expected_combined_conf
 
+    def test_client_keyrings_special_host_labels(self, cephadm_module):
+        cephadm_module.inventory.add_host(HostSpec('host1', labels=['keyring1']))
+        cephadm_module.inventory.add_host(HostSpec('host2', labels=['keyring1', SpecialHostLabels.DRAIN_DAEMONS]))
+        cephadm_module.inventory.add_host(HostSpec('host3', labels=['keyring1', SpecialHostLabels.DRAIN_DAEMONS, SpecialHostLabels.DRAIN_CONF_KEYRING]))
+        # hosts need to be marked as having had refresh to be available for placement
+        # so "refresh" with empty daemon list
+        cephadm_module.cache.update_host_daemons('host1', {})
+        cephadm_module.cache.update_host_daemons('host2', {})
+        cephadm_module.cache.update_host_daemons('host3', {})
+
+        assert 'host1' in [h.hostname for h in cephadm_module.cache.get_conf_keyring_available_hosts()]
+        assert 'host2' in [h.hostname for h in cephadm_module.cache.get_conf_keyring_available_hosts()]
+        assert 'host3' not in [h.hostname for h in cephadm_module.cache.get_conf_keyring_available_hosts()]
+
+        assert 'host1' not in [h.hostname for h in cephadm_module.cache.get_conf_keyring_draining_hosts()]
+        assert 'host2' not in [h.hostname for h in cephadm_module.cache.get_conf_keyring_draining_hosts()]
+        assert 'host3' in [h.hostname for h in cephadm_module.cache.get_conf_keyring_draining_hosts()]
+
+        cephadm_module.keys.update(ClientKeyringSpec('keyring1', PlacementSpec(label='keyring1')))
+
+        with mock.patch("cephadm.module.CephadmOrchestrator.mon_command") as _mon_cmd:
+            _mon_cmd.return_value = (0, 'real-keyring', '')
+            client_files = CephadmServe(cephadm_module)._calc_client_files()
+            assert 'host1' in client_files.keys()
+            assert '/etc/ceph/ceph.keyring1.keyring' in client_files['host1'].keys()
+            assert 'host2' in client_files.keys()
+            assert '/etc/ceph/ceph.keyring1.keyring' in client_files['host2'].keys()
+            assert 'host3' not in client_files.keys()
+
     @mock.patch("cephadm.serve.CephadmServe._run_cephadm")
     def test_registry_login(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
         def check_registry_credentials(url, username, password):
@@ -2058,7 +2272,7 @@ Traceback (most recent call last):
                 if 'ceph-volume' in args:
                     return (json.dumps(ceph_volume_lvm_list), '', 0)
                 else:
-                    assert 'deploy' in args
+                    assert ['_orch', 'deploy'] in args
                     raise OrchestratorError("let's fail somehow")
             _run_cephadm.side_effect = _r_c
             assert cephadm_module._osd_activate(
@@ -2120,12 +2334,12 @@ Traceback (most recent call last):
     def test_host_rm_last_admin(self, cephadm_module: CephadmOrchestrator):
         with pytest.raises(OrchestratorError):
             with with_host(cephadm_module, 'test', refresh_hosts=False, rm_with_force=False):
-                cephadm_module.inventory.add_label('test', '_admin')
+                cephadm_module.inventory.add_label('test', SpecialHostLabels.ADMIN)
                 pass
             assert False
         with with_host(cephadm_module, 'test1', refresh_hosts=False, rm_with_force=True):
             with with_host(cephadm_module, 'test2', refresh_hosts=False, rm_with_force=False):
-                cephadm_module.inventory.add_label('test2', '_admin')
+                cephadm_module.inventory.add_label('test2', SpecialHostLabels.ADMIN)
 
     @pytest.mark.parametrize("facts, settings, expected_value",
                              [
@@ -2325,3 +2539,171 @@ Traceback (most recent call last):
         with pytest.raises(OrchestratorError, match=r'Command "very slow" timed out on host hostC \(non-default 999 second timeout\)'):
             with cephadm_module.async_timeout_handler('hostC', 'very slow', 999):
                 cephadm_module.wait_async(_timeout())
+
+    @mock.patch("cephadm.CephadmOrchestrator.remove_osds")
+    @mock.patch("cephadm.CephadmOrchestrator.add_host_label", lambda *a, **kw: None)
+    @mock.patch("cephadm.inventory.HostCache.get_daemons_by_host", lambda *a, **kw: [])
+    def test_host_drain_zap(self, _rm_osds, cephadm_module):
+        # pass force=true in these tests to bypass _admin label check
+        cephadm_module.drain_host('host1', force=True, zap_osd_devices=False)
+        assert _rm_osds.called_with([], zap=False)
+
+        cephadm_module.drain_host('host1', force=True, zap_osd_devices=True)
+        assert _rm_osds.called_with([], zap=True)
+
+    def test_process_ls_output(self, cephadm_module):
+        sample_ls_output = """[
+    {
+        "style": "cephadm:v1",
+        "name": "mon.vm-00",
+        "fsid": "588f83ba-5995-11ee-9e94-52540057a206",
+        "systemd_unit": "ceph-588f83ba-5995-11ee-9e94-52540057a206@mon.vm-00",
+        "enabled": true,
+        "state": "running",
+        "service_name": "mon",
+        "ports": [],
+        "ip": null,
+        "deployed_by": [
+            "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3"
+        ],
+        "rank": null,
+        "rank_generation": null,
+        "extra_container_args": null,
+        "extra_entrypoint_args": null,
+        "memory_request": null,
+        "memory_limit": null,
+        "container_id": "b170b964a6e2918955362eb36195627c6086d3f859d4ebce2ee13f3ee4738733",
+        "container_image_name": "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3",
+        "container_image_id": "674eb38037f1555bb7884ede5db47f1749486e7f12ecb416e34ada87c9934e55",
+        "container_image_digests": [
+            "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3"
+        ],
+        "memory_usage": 56214159,
+        "cpu_percentage": "2.32%",
+        "version": "18.0.0-5185-g7b3a4f2b",
+        "started": "2023-09-22T22:31:11.752300Z",
+        "created": "2023-09-22T22:15:24.121387Z",
+        "deployed": "2023-09-22T22:31:10.383431Z",
+        "configured": "2023-09-22T22:31:11.859440Z"
+    },
+    {
+        "style": "cephadm:v1",
+        "name": "mgr.vm-00.mpexeg",
+        "fsid": "588f83ba-5995-11ee-9e94-52540057a206",
+        "systemd_unit": "ceph-588f83ba-5995-11ee-9e94-52540057a206@mgr.vm-00.mpexeg",
+        "enabled": true,
+        "state": "running",
+        "service_name": "mgr",
+        "ports": [
+            8443,
+            9283,
+            8765
+        ],
+        "ip": null,
+        "deployed_by": [
+            "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3"
+        ],
+        "rank": null,
+        "rank_generation": null,
+        "extra_container_args": null,
+        "extra_entrypoint_args": null,
+        "memory_request": null,
+        "memory_limit": null,
+        "container_id": "6e7756cef553a25a2a84227e8755d3d25046b9cd8758b23c698d34b3af895242",
+        "container_image_name": "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3",
+        "container_image_id": "674eb38037f1555bb7884ede5db47f1749486e7f12ecb416e34ada87c9934e55",
+        "container_image_digests": [
+            "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3"
+        ],
+        "memory_usage": 529740595,
+        "cpu_percentage": "8.35%",
+        "version": "18.0.0-5185-g7b3a4f2b",
+        "started": "2023-09-22T22:30:18.587021Z",
+        "created": "2023-09-22T22:15:29.101409Z",
+        "deployed": "2023-09-22T22:30:17.339114Z",
+        "configured": "2023-09-22T22:30:18.758122Z"
+    },
+    {
+        "style": "cephadm:v1",
+        "name": "agent.vm-00",
+        "fsid": "588f83ba-5995-11ee-9e94-52540057a206",
+        "systemd_unit": "ceph-588f83ba-5995-11ee-9e94-52540057a206@agent.vm-00",
+        "enabled": true,
+        "state": "running",
+        "service_name": "agent",
+        "ports": [],
+        "ip": null,
+        "deployed_by": [
+            "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3"
+        ],
+        "rank": null,
+        "rank_generation": null,
+        "extra_container_args": null,
+        "extra_entrypoint_args": null,
+        "container_id": null,
+        "container_image_name": null,
+        "container_image_id": null,
+        "container_image_digests": null,
+        "version": null,
+        "started": null,
+        "created": "2023-09-22T22:33:34.708289Z",
+        "deployed": null,
+        "configured": "2023-09-22T22:33:34.722289Z"
+    },
+    {
+        "style": "cephadm:v1",
+        "name": "osd.0",
+        "fsid": "588f83ba-5995-11ee-9e94-52540057a206",
+        "systemd_unit": "ceph-588f83ba-5995-11ee-9e94-52540057a206@osd.0",
+        "enabled": true,
+        "state": "running",
+        "service_name": "osd.foo",
+        "ports": [],
+        "ip": null,
+        "deployed_by": [
+            "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3"
+        ],
+        "rank": null,
+        "rank_generation": null,
+        "extra_container_args": null,
+        "extra_entrypoint_args": null,
+        "memory_request": null,
+        "memory_limit": null,
+        "container_id": "93f71c60820b86901a45b3b1fe3dba3e3e677b37fd22310b7e7da3f67bb8ccd6",
+        "container_image_name": "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3",
+        "container_image_id": "674eb38037f1555bb7884ede5db47f1749486e7f12ecb416e34ada87c9934e55",
+        "container_image_digests": [
+            "quay.io/adk3798/ceph@sha256:ff374767a4568f6d11a941ab763e7732cd7e071362328f7b6a7891bc4852a3a3"
+        ],
+        "memory_usage": 73410805,
+        "cpu_percentage": "6.54%",
+        "version": "18.0.0-5185-g7b3a4f2b",
+        "started": "2023-09-22T22:41:29.019587Z",
+        "created": "2023-09-22T22:41:03.615080Z",
+        "deployed": "2023-09-22T22:41:24.965222Z",
+        "configured": "2023-09-22T22:41:29.119250Z"
+    }
+]"""
+
+        now = str_to_datetime('2023-09-22T22:45:29.119250Z')
+        cephadm_module._cluster_fsid = '588f83ba-5995-11ee-9e94-52540057a206'
+        with mock.patch("cephadm.module.datetime_now", lambda: now):
+            cephadm_module._process_ls_output('vm-00', json.loads(sample_ls_output))
+            assert 'vm-00' in cephadm_module.cache.daemons
+            assert 'mon.vm-00' in cephadm_module.cache.daemons['vm-00']
+            assert 'mgr.vm-00.mpexeg' in cephadm_module.cache.daemons['vm-00']
+            assert 'agent.vm-00' in cephadm_module.cache.daemons['vm-00']
+            assert 'osd.0' in cephadm_module.cache.daemons['vm-00']
+
+            daemons = cephadm_module.cache.get_daemons_by_host('vm-00')
+            c_img_ids = [dd.container_image_id for dd in daemons if dd.daemon_type != 'agent']
+            assert all(c_img_id == '674eb38037f1555bb7884ede5db47f1749486e7f12ecb416e34ada87c9934e55' for c_img_id in c_img_ids)
+            last_refreshes = [dd.last_refresh for dd in daemons]
+            assert all(lrf == now for lrf in last_refreshes)
+            versions = [dd.version for dd in daemons if dd.daemon_type != 'agent']
+            assert all(version == '18.0.0-5185-g7b3a4f2b' for version in versions)
+
+            osd = cephadm_module.cache.get_daemons_by_type('osd', 'vm-00')[0]
+            assert osd.cpu_percentage == '6.54%'
+            assert osd.memory_usage == 73410805
+            assert osd.created == str_to_datetime('2023-09-22T22:41:03.615080Z')
index 192b08fb989f9e5dfeab60f59e1ebe26e07575f4..2300b288d2951c1485ecb388a01d09e3e79d7856 100644 (file)
@@ -13,13 +13,14 @@ from cephadm.services.cephadmservice import MonService, MgrService, MdsService,
     RbdMirrorService, CrashService, CephadmDaemonDeploySpec
 from cephadm.services.iscsi import IscsiService
 from cephadm.services.nfs import NFSService
+from cephadm.services.nvmeof import NvmeofService
 from cephadm.services.osd import OSDService
 from cephadm.services.monitoring import GrafanaService, AlertmanagerService, PrometheusService, \
     NodeExporterService, LokiService, PromtailService
 from cephadm.module import CephadmOrchestrator
 from ceph.deployment.service_spec import IscsiServiceSpec, MonitoringSpec, AlertManagerSpec, \
     ServiceSpec, RGWSpec, GrafanaSpec, SNMPGatewaySpec, IngressSpec, PlacementSpec, TracingSpec, \
-    PrometheusSpec, CephExporterSpec, NFSServiceSpec
+    PrometheusSpec, CephExporterSpec, NFSServiceSpec, NvmeofServiceSpec
 from cephadm.tests.fixtures import with_host, with_service, _run_cephadm, async_side_effect
 
 from ceph.utils import datetime_now
@@ -105,6 +106,7 @@ class TestCephadmService:
         promtail_service = PromtailService(mgr)
         crash_service = CrashService(mgr)
         iscsi_service = IscsiService(mgr)
+        nvmeof_service = NvmeofService(mgr)
         cephadm_services = {
             'mon': mon_service,
             'mgr': mgr_service,
@@ -121,6 +123,7 @@ class TestCephadmService:
             'promtail': promtail_service,
             'crash': crash_service,
             'iscsi': iscsi_service,
+            'nvmeof': nvmeof_service,
         }
         return cephadm_services
 
@@ -299,18 +302,144 @@ log_to_file = False"""
                 _run_cephadm.assert_called_with(
                     'test',
                     f'iscsi.{iscsi_daemon_id}',
-                    'deploy',
-                    [
-                        '--name', f'iscsi.{iscsi_daemon_id}',
-                        '--meta-json', f'{"{"}"service_name": "iscsi.{pool}", "ports": [{api_port}], "ip": null, "deployed_by": [], "rank": null, "rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null{"}"}',
-                        '--config-json', '-', '--tcp-ports', '3456'
-                    ],
-                    stdin=json.dumps({"config": "", "keyring": f"[client.iscsi.{iscsi_daemon_id}]\nkey = None\n", "files": {"iscsi-gateway.cfg": iscsi_gateway_conf}}),
-                    image='')
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": f'iscsi.{iscsi_daemon_id}',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [api_port],
+                        },
+                        "meta": {
+                            'service_name': f'iscsi.{pool}',
+                            'ports': [api_port],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "config": "",
+                            "keyring": f"[client.iscsi.{iscsi_daemon_id}]\nkey = None\n",
+                            "files": {
+                                "iscsi-gateway.cfg": iscsi_gateway_conf,
+                            },
+                        }
+                    }),
+                )
+
+
+class TestNVMEOFService:
+
+    mgr = FakeMgr()
+    nvmeof_service = NvmeofService(mgr)
+
+    nvmeof_spec = NvmeofServiceSpec(service_type='nvmeof', service_id="a")
+    nvmeof_spec.daemon_type = 'nvmeof'
+    nvmeof_spec.daemon_id = "a"
+    nvmeof_spec.spec = MagicMock()
+    nvmeof_spec.spec.daemon_type = 'nvmeof'
+
+    mgr.spec_store = MagicMock()
+    mgr.spec_store.all_specs.get.return_value = nvmeof_spec
+
+    def test_nvmeof_client_caps(self):
+        pass
+
+    @patch('cephadm.utils.resolve_ip')
+    def test_nvmeof_dashboard_config(self, mock_resolve_ip):
+        pass
+
+    @patch("cephadm.inventory.Inventory.get_addr", lambda _, __: '192.168.100.100')
+    @patch("cephadm.serve.CephadmServe._run_cephadm")
+    @patch("cephadm.module.CephadmOrchestrator.get_unique_name")
+    def test_nvmeof_config(self, _get_name, _run_cephadm, cephadm_module: CephadmOrchestrator):
+
+        nvmeof_daemon_id = 'testpool.test.qwert'
+        pool = 'testpool'
+        tgt_cmd_extra_args = '--cpumask=0xFF --msg-mempool-size=524288'
+        default_port = 5500
+        group = 'mygroup'
+        _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
+        _get_name.return_value = nvmeof_daemon_id
+
+        nvmeof_gateway_conf = f"""# This file is generated by cephadm.
+[gateway]
+name = client.nvmeof.{nvmeof_daemon_id}
+group = {group}
+addr = 192.168.100.100
+port = {default_port}
+enable_auth = False
+state_update_notify = True
+state_update_interval_sec = 5
+
+[ceph]
+pool = {pool}
+config_file = /etc/ceph/ceph.conf
+id = nvmeof.{nvmeof_daemon_id}
+
+[mtls]
+server_key = ./server.key
+client_key = ./client.key
+server_cert = ./server.crt
+client_cert = ./client.crt
+
+[spdk]
+tgt_path = /usr/local/bin/nvmf_tgt
+rpc_socket = /var/tmp/spdk.sock
+timeout = 60
+log_level = WARN
+conn_retries = 10
+transports = tcp
+transport_tcp_options = {{"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7}}
+tgt_cmd_extra_args = {tgt_cmd_extra_args}\n"""
+
+        with with_host(cephadm_module, 'test'):
+            with with_service(cephadm_module, NvmeofServiceSpec(service_id=pool,
+                                                                tgt_cmd_extra_args=tgt_cmd_extra_args,
+                                                                group=group,
+                                                                pool=pool)):
+                _run_cephadm.assert_called_with(
+                    'test',
+                    f'nvmeof.{nvmeof_daemon_id}',
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": "nvmeof.testpool.test.qwert",
+                        "image": "",
+                        "deploy_arguments": [],
+                        "params": {
+                            "tcp_ports": [5500, 4420, 8009]
+                        },
+                        "meta": {
+                            "service_name": "nvmeof.testpool",
+                            "ports": [5500, 4420, 8009],
+                            "ip": None,
+                            "deployed_by": [],
+                            "rank": None,
+                            "rank_generation": None,
+                            "extra_container_args": None,
+                            "extra_entrypoint_args": None
+                        },
+                        "config_blobs": {
+                            "config": "",
+                            "keyring": "[client.nvmeof.testpool.test.qwert]\nkey = None\n",
+                            "files": {
+                                "ceph-nvmeof.conf": nvmeof_gateway_conf
+                            }
+                        }
+                    }),
+                )
 
 
 class TestMonitoring:
     def _get_config(self, url: str) -> str:
+
         return f"""
         # This file is generated by cephadm.
         # See https://prometheus.io/docs/alerting/configuration/ for documentation.
@@ -386,30 +515,41 @@ class TestMonitoring:
             with with_service(cephadm_module, AlertManagerSpec()):
                 y = dedent(self._get_config(expected_yaml_url)).lstrip()
                 _run_cephadm.assert_called_with(
-                    "test",
+                    'test',
                     "alertmanager.test",
-                    "deploy",
-                    [
-                        "--name",
-                        "alertmanager.test",
-                        "--meta-json",
-                        ('{"service_name": "alertmanager", "ports": [9093, 9094], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        "--config-json",
-                        "-",
-                        "--tcp-ports",
-                        "9093 9094",
-                    ],
-                    stdin=json.dumps(
-                        {"files": {"alertmanager.yml": y}, "peers": []}
-                    ),
-                    image="",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'alertmanager.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9093, 9094],
+                        },
+                        "meta": {
+                            'service_name': 'alertmanager',
+                            'ports': [9093, 9094],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "files": {
+                                "alertmanager.yml": y,
+                            },
+                            "peers": [],
+                        }
+                    }),
                 )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
     @patch("socket.getfqdn")
     @patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '::1')
-    @patch("cephadm.services.monitoring.password_hash", lambda password: 'fake_password')
+    @patch("cephadm.services.monitoring.password_hash", lambda password: 'alertmanager_password_hash')
     def test_alertmanager_config_security_enabled(self, _get_fqdn, _run_cephadm, cephadm_module: CephadmOrchestrator):
         _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
 
@@ -424,8 +564,8 @@ class TestMonitoring:
 
         with with_host(cephadm_module, 'test'):
             cephadm_module.secure_monitoring_stack = True
-            cephadm_module.alertmanager_web_password = 'fake_password'
-            cephadm_module.alertmanager_web_user = 'admin'
+            cephadm_module.set_store(AlertmanagerService.USER_CFG_KEY, 'alertmanager_user')
+            cephadm_module.set_store(AlertmanagerService.PASS_CFG_KEY, 'alertmanager_plain_password')
             cephadm_module.http_server.service_discovery.ssl_certs.generate_cert = MagicMock(side_effect=gen_cert)
             cephadm_module.http_server.service_discovery.ssl_certs.get_root_cert = MagicMock(side_effect=get_root_cert)
             with with_service(cephadm_module, AlertManagerSpec()):
@@ -462,29 +602,44 @@ class TestMonitoring:
                   cert_file: alertmanager.crt
                   key_file: alertmanager.key
                 basic_auth_users:
-                    admin: fake_password""").lstrip()
+                    alertmanager_user: alertmanager_password_hash""").lstrip()
 
                 _run_cephadm.assert_called_with(
                     'test',
-                    'alertmanager.test',
-                    'deploy',
-                    [
-                        '--name', 'alertmanager.test',
-                        '--meta-json', '{"service_name": "alertmanager", "ports": [9093, 9094], "ip": null, "deployed_by": [], "rank": null, "rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}',
-                        '--config-json', '-', '--tcp-ports', '9093 9094'
-                    ],
+                    "alertmanager.test",
+                    ['_orch', 'deploy'],
+                    [],
                     stdin=json.dumps({
-                        "files": {
-                            "alertmanager.yml": y,
-                            'alertmanager.crt': 'mycert',
-                            'alertmanager.key': 'mykey',
-                            'web.yml': web_config,
-                            'root_cert.pem': 'my_root_cert'
+                        "fsid": "fsid",
+                        "name": 'alertmanager.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9093, 9094],
+                        },
+                        "meta": {
+                            'service_name': 'alertmanager',
+                            'ports': [9093, 9094],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
                         },
-                        'peers': [],
-                        'web_config': '/etc/alertmanager/web.yml'
+                        "config_blobs": {
+                            "files": {
+                                "alertmanager.yml": y,
+                                'alertmanager.crt': 'mycert',
+                                'alertmanager.key': 'mykey',
+                                'web.yml': web_config,
+                                'root_cert.pem': 'my_root_cert'
+                            },
+                            'peers': [],
+                            'web_config': '/etc/alertmanager/web.yml',
+                        }
                     }),
-                    image='')
+                )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
     @patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '::1')
@@ -492,6 +647,12 @@ class TestMonitoring:
         _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
         s = RGWSpec(service_id="foo", placement=PlacementSpec(count=1), rgw_frontend_type='beast')
         with with_host(cephadm_module, 'test'):
+            # host "test" needs to have networks for keepalive to be placed
+            cephadm_module.cache.update_host_networks('test', {
+                '1.2.3.0/24': {
+                    'if0': ['1.2.3.1']
+                },
+            })
             with with_service(cephadm_module, MonitoringSpec('node-exporter')) as _, \
                     with_service(cephadm_module, CephExporterSpec('ceph-exporter')) as _, \
                     with_service(cephadm_module, s) as _, \
@@ -542,25 +703,41 @@ class TestMonitoring:
 
                 _run_cephadm.assert_called_with(
                     'test',
-                    'prometheus.test',
-                    'deploy',
-                    [
-                        '--name', 'prometheus.test',
-                        '--meta-json',
-                        ('{"service_name": "prometheus", "ports": [9095], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9095'
-                    ],
-                    stdin=json.dumps({"files": {"prometheus.yml": y,
-                                                "/etc/prometheus/alerting/custom_alerts.yml": ""},
-                                      'retention_time': '15d',
-                                      'retention_size': '0'}),
-                    image='')
+                    "prometheus.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'prometheus.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9095],
+                        },
+                        "meta": {
+                            'service_name': 'prometheus',
+                            'ports': [9095],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "files": {
+                                "prometheus.yml": y,
+                                "/etc/prometheus/alerting/custom_alerts.yml": "",
+                            },
+                            'retention_time': '15d',
+                            'retention_size': '0',
+                        },
+                    }),
+                )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
     @patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '::1')
-    @patch("cephadm.services.monitoring.password_hash", lambda password: 'fake_password')
+    @patch("cephadm.services.monitoring.password_hash", lambda password: 'prometheus_password_hash')
     def test_prometheus_config_security_enabled(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
         _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
         s = RGWSpec(service_id="foo", placement=PlacementSpec(count=1), rgw_frontend_type='beast')
@@ -570,10 +747,20 @@ class TestMonitoring:
 
         with with_host(cephadm_module, 'test'):
             cephadm_module.secure_monitoring_stack = True
-            cephadm_module.http_server.service_discovery.username = 'admin'
-            cephadm_module.http_server.service_discovery.password = 'fake_password'
+            cephadm_module.set_store(PrometheusService.USER_CFG_KEY, 'prometheus_user')
+            cephadm_module.set_store(PrometheusService.PASS_CFG_KEY, 'prometheus_plain_password')
+            cephadm_module.set_store(AlertmanagerService.USER_CFG_KEY, 'alertmanager_user')
+            cephadm_module.set_store(AlertmanagerService.PASS_CFG_KEY, 'alertmanager_plain_password')
+            cephadm_module.http_server.service_discovery.username = 'sd_user'
+            cephadm_module.http_server.service_discovery.password = 'sd_password'
             cephadm_module.http_server.service_discovery.ssl_certs.generate_cert = MagicMock(
                 side_effect=gen_cert)
+            # host "test" needs to have networks for keepalive to be placed
+            cephadm_module.cache.update_host_networks('test', {
+                '1.2.3.0/24': {
+                    'if0': ['1.2.3.1']
+                },
+            })
             with with_service(cephadm_module, MonitoringSpec('node-exporter')) as _, \
                     with_service(cephadm_module, s) as _, \
                     with_service(cephadm_module, AlertManagerSpec('alertmanager')) as _, \
@@ -592,7 +779,7 @@ class TestMonitoring:
                   cert_file: prometheus.crt
                   key_file: prometheus.key
                 basic_auth_users:
-                    admin: fake_password""").lstrip()
+                    prometheus_user: prometheus_password_hash""").lstrip()
 
                 y = dedent("""
                 # This file is generated by cephadm.
@@ -606,15 +793,15 @@ class TestMonitoring:
                   alertmanagers:
                     - scheme: https
                       basic_auth:
-                        username: admin
-                        password: admin
+                        username: alertmanager_user
+                        password: alertmanager_plain_password
                       tls_config:
                         ca_file: root_cert.pem
                       http_sd_configs:
                         - url: https://[::1]:8765/sd/prometheus/sd-config?service=alertmanager
                           basic_auth:
-                            username: admin
-                            password: fake_password
+                            username: sd_user
+                            password: sd_password
                           tls_config:
                             ca_file: root_cert.pem
 
@@ -627,8 +814,8 @@ class TestMonitoring:
                     http_sd_configs:
                     - url: https://[::1]:8765/sd/prometheus/sd-config?service=mgr-prometheus
                       basic_auth:
-                        username: admin
-                        password: fake_password
+                        username: sd_user
+                        password: sd_password
                       tls_config:
                         ca_file: root_cert.pem
 
@@ -639,8 +826,8 @@ class TestMonitoring:
                     http_sd_configs:
                     - url: https://[::1]:8765/sd/prometheus/sd-config?service=node-exporter
                       basic_auth:
-                        username: admin
-                        password: fake_password
+                        username: sd_user
+                        password: sd_password
                       tls_config:
                         ca_file: root_cert.pem
 
@@ -651,8 +838,8 @@ class TestMonitoring:
                     http_sd_configs:
                     - url: https://[::1]:8765/sd/prometheus/sd-config?service=haproxy
                       basic_auth:
-                        username: admin
-                        password: fake_password
+                        username: sd_user
+                        password: sd_password
                       tls_config:
                         ca_file: root_cert.pem
 
@@ -664,37 +851,50 @@ class TestMonitoring:
                     http_sd_configs:
                     - url: https://[::1]:8765/sd/prometheus/sd-config?service=ceph-exporter
                       basic_auth:
-                        username: admin
-                        password: fake_password
+                        username: sd_user
+                        password: sd_password
                       tls_config:
                         ca_file: root_cert.pem
                 """).lstrip()
 
                 _run_cephadm.assert_called_with(
                     'test',
-                    'prometheus.test',
-                    'deploy',
-                    [
-                        '--name', 'prometheus.test',
-                        '--meta-json',
-                        '{"service_name": "prometheus", "ports": [9095], "ip": null, "deployed_by": [], "rank": null, "rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}',
-                        '--config-json', '-',
-                        '--tcp-ports', '9095'
-                    ],
+                    "prometheus.test",
+                    ['_orch', 'deploy'],
+                    [],
                     stdin=json.dumps({
-                        'files': {
-                            'prometheus.yml': y,
-                            'root_cert.pem': '',
-                            'mgr_prometheus_cert.pem': '',
-                            'web.yml': web_config,
-                            'prometheus.crt': 'mycert',
-                            'prometheus.key': 'mykey',
-                            "/etc/prometheus/alerting/custom_alerts.yml": "",
+                        "fsid": "fsid",
+                        "name": 'prometheus.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9095],
+                        },
+                        "meta": {
+                            'service_name': 'prometheus',
+                            'ports': [9095],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
                         },
-                        'retention_time': '15d',
-                        'retention_size': '0',
-                        'web_config': '/etc/prometheus/web.yml'}),
-                    image=''
+                        "config_blobs": {
+                            'files': {
+                                'prometheus.yml': y,
+                                'root_cert.pem': '',
+                                'mgr_prometheus_cert.pem': '',
+                                'web.yml': web_config,
+                                'prometheus.crt': 'mycert',
+                                'prometheus.key': 'mykey',
+                                "/etc/prometheus/alerting/custom_alerts.yml": "",
+                            },
+                            'retention_time': '15d',
+                            'retention_size': '0',
+                            'web_config': '/etc/prometheus/web.yml',
+                        },
+                    }),
                 )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -736,18 +936,34 @@ class TestMonitoring:
 
                 _run_cephadm.assert_called_with(
                     'test',
-                    'loki.test',
-                    'deploy',
-                    [
-                        '--name', 'loki.test',
-                        '--meta-json',
-                        ('{"service_name": "loki", "ports": [3100], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '3100'
-                    ],
-                    stdin=json.dumps({"files": {"loki.yml": y}}),
-                    image='')
+                    "loki.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'loki.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [3100],
+                        },
+                        "meta": {
+                            'service_name': 'loki',
+                            'ports': [3100],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "files": {
+                                "loki.yml": y
+                            },
+                        },
+                    }),
+                )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
     def test_promtail_config(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
@@ -778,18 +994,34 @@ class TestMonitoring:
 
                 _run_cephadm.assert_called_with(
                     'test',
-                    'promtail.test',
-                    'deploy',
-                    [
-                        '--name', 'promtail.test',
-                        '--meta-json',
-                        ('{"service_name": "promtail", "ports": [9080], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9080'
-                    ],
-                    stdin=json.dumps({"files": {"promtail.yml": y}}),
-                    image='')
+                    "promtail.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'promtail.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9080],
+                        },
+                        "meta": {
+                            'service_name': 'promtail',
+                            'ports': [9080],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "files": {
+                                "promtail.yml": y
+                            },
+                        },
+                    }),
+                )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
     @patch("cephadm.module.CephadmOrchestrator.get_mgr_ip", lambda _: '1::4')
@@ -861,16 +1093,32 @@ class TestMonitoring:
 
                 _run_cephadm.assert_called_with(
                     'test',
-                    'grafana.test',
-                    'deploy',
-                    [
-                        '--name', 'grafana.test',
-                        '--meta-json',
-                        ('{"service_name": "grafana", "ports": [3000], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-', '--tcp-ports', '3000'],
-                    stdin=json.dumps({"files": files}),
-                    image='')
+                    "grafana.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'grafana.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [3000],
+                        },
+                        "meta": {
+                            'service_name': 'grafana',
+                            'ports': [3000],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": {
+                            "files": files,
+                        },
+                    }),
+                )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}'))
     def test_grafana_initial_admin_pw(self, cephadm_module: CephadmOrchestrator):
@@ -991,16 +1239,32 @@ spec:
                     CephadmServe(cephadm_module)._check_daemons()
 
                     _run_cephadm.assert_called_with(
-                        'test', 'alertmanager.test', 'deploy', [
-                            '--name', 'alertmanager.test',
-                            '--meta-json', ('{"service_name": "alertmanager", "ports": [4200, 9094], "ip": null, "deployed_by": [], "rank": null, '
-                                            '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                            '--config-json', '-',
-                            '--tcp-ports', '4200 9094',
-                            '--reconfig'
-                        ],
-                        stdin='{}',
-                        image='')
+                        'test',
+                        "alertmanager.test",
+                        ['_orch', 'deploy'],
+                        [],
+                        stdin=json.dumps({
+                            "fsid": "fsid",
+                            "name": 'alertmanager.test',
+                            "image": '',
+                            "deploy_arguments": [],
+                            "params": {
+                                'tcp_ports': [4200, 9094],
+                                'reconfig': True,
+                            },
+                            "meta": {
+                                'service_name': 'alertmanager',
+                                'ports': [4200, 9094],
+                                'ip': None,
+                                'deployed_by': [],
+                                'rank': None,
+                                'rank_generation': None,
+                                'extra_container_args': None,
+                                'extra_entrypoint_args': None,
+                            },
+                            "config_blobs": {},
+                        }),
+                    )
 
 
 class TestRGWService:
@@ -1083,18 +1347,29 @@ class TestSNMPGateway:
             with with_service(cephadm_module, spec):
                 _run_cephadm.assert_called_with(
                     'test',
-                    'snmp-gateway.test',
-                    'deploy',
-                    [
-                        '--name', 'snmp-gateway.test',
-                        '--meta-json',
-                        ('{"service_name": "snmp-gateway", "ports": [9464], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9464'
-                    ],
-                    stdin=json.dumps(config),
-                    image=''
+                    "snmp-gateway.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'snmp-gateway.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9464],
+                        },
+                        "meta": {
+                            'service_name': 'snmp-gateway',
+                            'ports': [9464],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": config,
+                    }),
                 )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -1119,18 +1394,29 @@ class TestSNMPGateway:
             with with_service(cephadm_module, spec):
                 _run_cephadm.assert_called_with(
                     'test',
-                    'snmp-gateway.test',
-                    'deploy',
-                    [
-                        '--name', 'snmp-gateway.test',
-                        '--meta-json',
-                        ('{"service_name": "snmp-gateway", "ports": [9465], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9465'
-                    ],
-                    stdin=json.dumps(config),
-                    image=''
+                    "snmp-gateway.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'snmp-gateway.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9465],
+                        },
+                        "meta": {
+                            'service_name': 'snmp-gateway',
+                            'ports': [9465],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": config,
+                    }),
                 )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -1159,18 +1445,29 @@ class TestSNMPGateway:
             with with_service(cephadm_module, spec):
                 _run_cephadm.assert_called_with(
                     'test',
-                    'snmp-gateway.test',
-                    'deploy',
-                    [
-                        '--name', 'snmp-gateway.test',
-                        '--meta-json',
-                        ('{"service_name": "snmp-gateway", "ports": [9464], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9464'
-                    ],
-                    stdin=json.dumps(config),
-                    image=''
+                    "snmp-gateway.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'snmp-gateway.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9464],
+                        },
+                        "meta": {
+                            'service_name': 'snmp-gateway',
+                            'ports': [9464],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": config,
+                    }),
                 )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -1204,28 +1501,50 @@ class TestSNMPGateway:
             with with_service(cephadm_module, spec):
                 _run_cephadm.assert_called_with(
                     'test',
-                    'snmp-gateway.test',
-                    'deploy',
-                    [
-                        '--name', 'snmp-gateway.test',
-                        '--meta-json',
-                        ('{"service_name": "snmp-gateway", "ports": [9464], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9464'
-                    ],
-                    stdin=json.dumps(config),
-                    image=''
+                    "snmp-gateway.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'snmp-gateway.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9464],
+                        },
+                        "meta": {
+                            'service_name': 'snmp-gateway',
+                            'ports': [9464],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": config,
+                    }),
                 )
 
 
 class TestIngressService:
 
+    @pytest.mark.parametrize(
+        "enable_haproxy_protocol",
+        [False, True],
+    )
     @patch("cephadm.inventory.Inventory.get_addr")
     @patch("cephadm.utils.resolve_ip")
     @patch("cephadm.inventory.HostCache.get_daemons_by_service")
     @patch("cephadm.serve.CephadmServe._run_cephadm")
-    def test_ingress_config_nfs_multiple_nfs_same_rank(self, _run_cephadm, _get_daemons_by_service, _resolve_ip, _get_addr, cephadm_module: CephadmOrchestrator):
+    def test_ingress_config_nfs_multiple_nfs_same_rank(
+        self,
+        _run_cephadm,
+        _get_daemons_by_service,
+        _resolve_ip, _get_addr,
+        cephadm_module: CephadmOrchestrator,
+        enable_haproxy_protocol: bool,
+    ):
         _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
 
         def fake_resolve_ip(hostname: str) -> str:
@@ -1241,18 +1560,27 @@ class TestIngressService:
             return hostname
         _get_addr.side_effect = fake_get_addr
 
-        nfs_service = NFSServiceSpec(service_id="foo", placement=PlacementSpec(count=1, hosts=['host1', 'host2']),
-                                     port=12049)
-
-        ispec = IngressSpec(service_type='ingress',
-                            service_id='nfs.foo',
-                            backend_service='nfs.foo',
-                            frontend_port=2049,
-                            monitor_port=9049,
-                            virtual_ip='192.168.122.100/24',
-                            monitor_user='admin',
-                            monitor_password='12345',
-                            keepalived_password='12345')
+        nfs_service = NFSServiceSpec(
+            service_id="foo",
+            placement=PlacementSpec(
+                count=1,
+                hosts=['host1', 'host2']),
+            port=12049,
+            enable_haproxy_protocol=enable_haproxy_protocol,
+        )
+
+        ispec = IngressSpec(
+            service_type='ingress',
+            service_id='nfs.foo',
+            backend_service='nfs.foo',
+            frontend_port=2049,
+            monitor_port=9049,
+            virtual_ip='192.168.122.100/24',
+            monitor_user='admin',
+            monitor_password='12345',
+            keepalived_password='12345',
+            enable_haproxy_protocol=enable_haproxy_protocol,
+        )
 
         cephadm_module.spec_store._specs = {
             'nfs.foo': nfs_service,
@@ -1267,46 +1595,47 @@ class TestIngressService:
         # for the host1 nfs daemon as we'll end up giving that
         # one higher rank_generation but the same rank as the one
         # on host2
+        haproxy_txt = (
+            '# This file is generated by cephadm.\n'
+            'global\n'
+            '    log         127.0.0.1 local2\n'
+            '    chroot      /var/lib/haproxy\n'
+            '    pidfile     /var/lib/haproxy/haproxy.pid\n'
+            '    maxconn     8000\n'
+            '    daemon\n'
+            '    stats socket /var/lib/haproxy/stats\n\n'
+            'defaults\n'
+            '    mode                    tcp\n'
+            '    log                     global\n'
+            '    timeout queue           1m\n'
+            '    timeout connect         10s\n'
+            '    timeout client          1m\n'
+            '    timeout server          1m\n'
+            '    timeout check           10s\n'
+            '    maxconn                 8000\n\n'
+            'frontend stats\n'
+            '    mode http\n'
+            '    bind 192.168.122.100:9049\n'
+            '    bind host1:9049\n'
+            '    stats enable\n'
+            '    stats uri /stats\n'
+            '    stats refresh 10s\n'
+            '    stats auth admin:12345\n'
+            '    http-request use-service prometheus-exporter if { path /metrics }\n'
+            '    monitor-uri /health\n\n'
+            'frontend frontend\n'
+            '    bind 192.168.122.100:2049\n'
+            '    default_backend backend\n\n'
+            'backend backend\n'
+            '    mode        tcp\n'
+            '    balance     source\n'
+            '    hash-type   consistent\n'
+        )
+        if enable_haproxy_protocol:
+            haproxy_txt += '    default-server send-proxy-v2\n'
+        haproxy_txt += '    server nfs.foo.0 192.168.122.111:12049\n'
         haproxy_expected_conf = {
-            'files':
-                {
-                    'haproxy.cfg':
-                        '# This file is generated by cephadm.\n'
-                        'global\n'
-                        '    log         127.0.0.1 local2\n'
-                        '    chroot      /var/lib/haproxy\n'
-                        '    pidfile     /var/lib/haproxy/haproxy.pid\n'
-                        '    maxconn     8000\n'
-                        '    daemon\n'
-                        '    stats socket /var/lib/haproxy/stats\n\n'
-                        'defaults\n'
-                        '    mode                    tcp\n'
-                        '    log                     global\n'
-                        '    timeout queue           1m\n'
-                        '    timeout connect         10s\n'
-                        '    timeout client          1m\n'
-                        '    timeout server          1m\n'
-                        '    timeout check           10s\n'
-                        '    maxconn                 8000\n\n'
-                        'frontend stats\n'
-                        '    mode http\n'
-                        '    bind 192.168.122.100:9049\n'
-                        '    bind host1:9049\n'
-                        '    stats enable\n'
-                        '    stats uri /stats\n'
-                        '    stats refresh 10s\n'
-                        '    stats auth admin:12345\n'
-                        '    http-request use-service prometheus-exporter if { path /metrics }\n'
-                        '    monitor-uri /health\n\n'
-                        'frontend frontend\n'
-                        '    bind 192.168.122.100:2049\n'
-                        '    default_backend backend\n\n'
-                        'backend backend\n'
-                        '    mode        tcp\n'
-                        '    balance     source\n'
-                        '    hash-type   consistent\n'
-                        '    server nfs.foo.0 192.168.122.111:12049\n'
-                }
+            'files': {'haproxy.cfg': haproxy_txt}
         }
 
         # verify we get the same cfg regardless of the order in which the nfs daemons are returned
@@ -1344,7 +1673,7 @@ class TestIngressService:
         with with_host(cephadm_module, 'test', addr='1.2.3.7'):
             cephadm_module.cache.update_host_networks('test', {
                 '1.2.3.0/24': {
-                    'if0': ['1.2.3.4/32']
+                    'if0': ['1.2.3.4']
                 }
             })
 
@@ -1388,7 +1717,7 @@ class TestIngressService:
                                 'auth_type PASS\n      '
                                 'auth_pass 12345\n  '
                                 '}\n  '
-                                'unicast_src_ip 1.2.3.7\n  '
+                                'unicast_src_ip 1.2.3.4\n  '
                                 'unicast_peer {\n  '
                                 '}\n  '
                                 'virtual_ipaddress {\n    '
@@ -1467,7 +1796,7 @@ class TestIngressService:
         with with_host(cephadm_module, 'test'):
             cephadm_module.cache.update_host_networks('test', {
                 '1.2.3.0/24': {
-                    'if0': ['1.2.3.4/32']
+                    'if0': ['1.2.3.1']
                 }
             })
 
@@ -1511,7 +1840,7 @@ class TestIngressService:
                                 'auth_type PASS\n      '
                                 'auth_pass 12345\n  '
                                 '}\n  '
-                                'unicast_src_ip 1::4\n  '
+                                'unicast_src_ip 1.2.3.1\n  '
                                 'unicast_peer {\n  '
                                 '}\n  '
                                 'virtual_ipaddress {\n    '
@@ -1592,7 +1921,7 @@ class TestIngressService:
         with with_host(cephadm_module, 'test', addr='1.2.3.7'):
             cephadm_module.cache.update_host_networks('test', {
                 '1.2.3.0/24': {
-                    'if0': ['1.2.3.4/32']
+                    'if0': ['1.2.3.1']
                 }
             })
 
@@ -1637,7 +1966,7 @@ class TestIngressService:
                                 'auth_type PASS\n      '
                                 'auth_pass 12345\n  '
                                 '}\n  '
-                                'unicast_src_ip 1.2.3.7\n  '
+                                'unicast_src_ip 1.2.3.1\n  '
                                 'unicast_peer {\n  '
                                 '}\n  '
                                 'virtual_ipaddress {\n    '
@@ -1709,6 +2038,201 @@ class TestIngressService:
 
                 assert haproxy_generated_conf[0] == haproxy_expected_conf
 
+    @patch("cephadm.serve.CephadmServe._run_cephadm")
+    def test_haproxy_port_ips(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
+        _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
+
+        with with_host(cephadm_module, 'test', addr='1.2.3.7'):
+            cephadm_module.cache.update_host_networks('test', {
+                '1.2.3.0/24': {
+                    'if0': ['1.2.3.4/32']
+                }
+            })
+
+            # Check the ingress with multiple VIPs
+            s = RGWSpec(service_id="foo", placement=PlacementSpec(count=1),
+                        rgw_frontend_type='beast')
+
+            ip = '1.2.3.100'
+            frontend_port = 8089
+
+            ispec = IngressSpec(service_type='ingress',
+                                service_id='test',
+                                backend_service='rgw.foo',
+                                frontend_port=frontend_port,
+                                monitor_port=8999,
+                                monitor_user='admin',
+                                monitor_password='12345',
+                                keepalived_password='12345',
+                                virtual_ip=f"{ip}/24")
+            with with_service(cephadm_module, s) as _, with_service(cephadm_module, ispec) as _:
+                # generate the haproxy conf based on the specified spec
+                haproxy_daemon_spec = cephadm_module.cephadm_services['ingress'].prepare_create(
+                    CephadmDaemonDeploySpec(
+                        host='test',
+                        daemon_type='haproxy',
+                        daemon_id='ingress',
+                        service_name=ispec.service_name()))
+
+                assert haproxy_daemon_spec.port_ips == {str(frontend_port): ip}
+
+    @patch("cephadm.serve.CephadmServe._run_cephadm")
+    def test_keepalive_config_multi_interface_vips(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
+        _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
+
+        with with_host(cephadm_module, 'test', addr='1.2.3.1'):
+            with with_host(cephadm_module, 'test2', addr='1.2.3.2'):
+                cephadm_module.cache.update_host_networks('test', {
+                    '1.2.3.0/24': {
+                        'if0': ['1.2.3.1']
+                    },
+                    '100.100.100.0/24': {
+                        'if1': ['100.100.100.1']
+                    }
+                })
+                cephadm_module.cache.update_host_networks('test2', {
+                    '1.2.3.0/24': {
+                        'if0': ['1.2.3.2']
+                    },
+                    '100.100.100.0/24': {
+                        'if1': ['100.100.100.2']
+                    }
+                })
+
+                # Check the ingress with multiple VIPs
+                s = RGWSpec(service_id="foo", placement=PlacementSpec(count=1),
+                            rgw_frontend_type='beast')
+
+                ispec = IngressSpec(service_type='ingress',
+                                    service_id='test',
+                                    placement=PlacementSpec(hosts=['test', 'test2']),
+                                    backend_service='rgw.foo',
+                                    frontend_port=8089,
+                                    monitor_port=8999,
+                                    monitor_user='admin',
+                                    monitor_password='12345',
+                                    keepalived_password='12345',
+                                    virtual_ips_list=["1.2.3.100/24", "100.100.100.100/24"])
+                with with_service(cephadm_module, s) as _, with_service(cephadm_module, ispec) as _:
+                    keepalived_generated_conf = cephadm_module.cephadm_services['ingress'].keepalived_generate_config(
+                        CephadmDaemonDeploySpec(host='test', daemon_id='ingress', service_name=ispec.service_name()))
+
+                    keepalived_expected_conf = {
+                        'files':
+                            {
+                                'keepalived.conf':
+                                    '# This file is generated by cephadm.\n'
+                                    'vrrp_script check_backend {\n    '
+                                    'script "/usr/bin/curl http://1.2.3.1:8999/health"\n    '
+                                    'weight -20\n    '
+                                    'interval 2\n    '
+                                    'rise 2\n    '
+                                    'fall 2\n}\n\n'
+                                    'vrrp_instance VI_0 {\n  '
+                                    'state MASTER\n  '
+                                    'priority 100\n  '
+                                    'interface if0\n  '
+                                    'virtual_router_id 50\n  '
+                                    'advert_int 1\n  '
+                                    'authentication {\n      '
+                                    'auth_type PASS\n      '
+                                    'auth_pass 12345\n  '
+                                    '}\n  '
+                                    'unicast_src_ip 1.2.3.1\n  '
+                                    'unicast_peer {\n    '
+                                    '1.2.3.2\n  '
+                                    '}\n  '
+                                    'virtual_ipaddress {\n    '
+                                    '1.2.3.100/24 dev if0\n  '
+                                    '}\n  '
+                                    'track_script {\n      '
+                                    'check_backend\n  }\n'
+                                    '}\n'
+                                    'vrrp_instance VI_1 {\n  '
+                                    'state BACKUP\n  '
+                                    'priority 90\n  '
+                                    'interface if1\n  '
+                                    'virtual_router_id 51\n  '
+                                    'advert_int 1\n  '
+                                    'authentication {\n      '
+                                    'auth_type PASS\n      '
+                                    'auth_pass 12345\n  '
+                                    '}\n  '
+                                    'unicast_src_ip 100.100.100.1\n  '
+                                    'unicast_peer {\n    '
+                                    '100.100.100.2\n  '
+                                    '}\n  '
+                                    'virtual_ipaddress {\n    '
+                                    '100.100.100.100/24 dev if1\n  '
+                                    '}\n  '
+                                    'track_script {\n      '
+                                    'check_backend\n  }\n'
+                                    '}\n'
+                            }
+                    }
+
+                    # check keepalived config
+                    assert keepalived_generated_conf[0] == keepalived_expected_conf
+
+    @patch("cephadm.serve.CephadmServe._run_cephadm")
+    def test_keepalive_interface_host_filtering(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
+        # we need to make sure keepalive daemons will have an interface
+        # on the hosts we deploy them on in order to set up their VIP.
+        _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
+
+        with with_host(cephadm_module, 'test', addr='1.2.3.1'):
+            with with_host(cephadm_module, 'test2', addr='1.2.3.2'):
+                with with_host(cephadm_module, 'test3', addr='1.2.3.3'):
+                    with with_host(cephadm_module, 'test4', addr='1.2.3.3'):
+                        # setup "test" and "test4" to have all the necessary interfaces,
+                        # "test2" to have one of them (should still be filtered)
+                        # and "test3" to have none of them
+                        cephadm_module.cache.update_host_networks('test', {
+                            '1.2.3.0/24': {
+                                'if0': ['1.2.3.1']
+                            },
+                            '100.100.100.0/24': {
+                                'if1': ['100.100.100.1']
+                            }
+                        })
+                        cephadm_module.cache.update_host_networks('test2', {
+                            '1.2.3.0/24': {
+                                'if0': ['1.2.3.2']
+                            },
+                        })
+                        cephadm_module.cache.update_host_networks('test4', {
+                            '1.2.3.0/24': {
+                                'if0': ['1.2.3.4']
+                            },
+                            '100.100.100.0/24': {
+                                'if1': ['100.100.100.4']
+                            }
+                        })
+
+                        s = RGWSpec(service_id="foo", placement=PlacementSpec(count=1),
+                                    rgw_frontend_type='beast')
+
+                        ispec = IngressSpec(service_type='ingress',
+                                            service_id='test',
+                                            placement=PlacementSpec(hosts=['test', 'test2', 'test3', 'test4']),
+                                            backend_service='rgw.foo',
+                                            frontend_port=8089,
+                                            monitor_port=8999,
+                                            monitor_user='admin',
+                                            monitor_password='12345',
+                                            keepalived_password='12345',
+                                            virtual_ips_list=["1.2.3.100/24", "100.100.100.100/24"])
+                        with with_service(cephadm_module, s) as _, with_service(cephadm_module, ispec) as _:
+                            # since we're never actually going to refresh the host here,
+                            # check the tmp daemons to see what was placed during the apply
+                            daemons = cephadm_module.cache._get_tmp_daemons()
+                            keepalive_daemons = [d for d in daemons if d.daemon_type == 'keepalived']
+                            hosts_deployed_on = [d.hostname for d in keepalive_daemons]
+                            assert 'test' in hosts_deployed_on
+                            assert 'test2' not in hosts_deployed_on
+                            assert 'test3' not in hosts_deployed_on
+                            assert 'test4' in hosts_deployed_on
+
     @patch("cephadm.serve.CephadmServe._run_cephadm")
     @patch("cephadm.services.nfs.NFSService.fence_old_ranks", MagicMock())
     @patch("cephadm.services.nfs.NFSService.run_grace_tool", MagicMock())
@@ -1720,7 +2244,7 @@ class TestIngressService:
         with with_host(cephadm_module, 'test', addr='1.2.3.7'):
             cephadm_module.cache.update_host_networks('test', {
                 '1.2.3.0/24': {
-                    'if0': ['1.2.3.4/32']
+                    'if0': ['1.2.3.1']
                 }
             })
 
@@ -1767,7 +2291,7 @@ class TestIngressService:
                                 'auth_type PASS\n      '
                                 'auth_pass 12345\n  '
                                 '}\n  '
-                                'unicast_src_ip 1.2.3.7\n  '
+                                'unicast_src_ip 1.2.3.1\n  '
                                 'unicast_peer {\n  '
                                 '}\n  '
                                 'virtual_ipaddress {\n    '
@@ -1782,6 +2306,240 @@ class TestIngressService:
                 # check keepalived config
                 assert keepalived_generated_conf[0] == keepalived_expected_conf
 
+    @patch("cephadm.services.nfs.NFSService.fence_old_ranks", MagicMock())
+    @patch("cephadm.services.nfs.NFSService.run_grace_tool", MagicMock())
+    @patch("cephadm.services.nfs.NFSService.purge", MagicMock())
+    @patch("cephadm.services.nfs.NFSService.create_rados_config_obj", MagicMock())
+    @patch("cephadm.inventory.Inventory.keys")
+    @patch("cephadm.inventory.Inventory.get_addr")
+    @patch("cephadm.utils.resolve_ip")
+    @patch("cephadm.inventory.HostCache.get_daemons_by_service")
+    @patch("cephadm.serve.CephadmServe._run_cephadm")
+    def test_ingress_config_nfs_proxy_protocol(
+        self,
+        _run_cephadm,
+        _get_daemons_by_service,
+        _resolve_ip,
+        _get_addr,
+        _inventory_keys,
+        cephadm_module: CephadmOrchestrator,
+    ):
+        """Verify that setting enable_haproxy_protocol for both ingress and
+        nfs services sets the desired configuration parameters in both
+        the haproxy config and nfs ganesha config.
+        """
+        _run_cephadm.side_effect = async_side_effect(('{}', '', 0))
+
+        def fake_resolve_ip(hostname: str) -> str:
+            if hostname in ('host1', "192.168.122.111"):
+                return '192.168.122.111'
+            elif hostname in ('host2', '192.168.122.222'):
+                return '192.168.122.222'
+            else:
+                raise KeyError(hostname)
+        _resolve_ip.side_effect = fake_resolve_ip
+        _get_addr.side_effect = fake_resolve_ip
+
+        def fake_keys():
+            return ['host1', 'host2']
+        _inventory_keys.side_effect = fake_keys
+
+        nfs_service = NFSServiceSpec(
+            service_id="foo",
+            placement=PlacementSpec(
+                count=1,
+                hosts=['host1', 'host2']),
+            port=12049,
+            enable_haproxy_protocol=True,
+        )
+
+        ispec = IngressSpec(
+            service_type='ingress',
+            service_id='nfs.foo',
+            backend_service='nfs.foo',
+            frontend_port=2049,
+            monitor_port=9049,
+            virtual_ip='192.168.122.100/24',
+            monitor_user='admin',
+            monitor_password='12345',
+            keepalived_password='12345',
+            enable_haproxy_protocol=True,
+        )
+
+        cephadm_module.spec_store._specs = {
+            'nfs.foo': nfs_service,
+            'ingress.nfs.foo': ispec
+        }
+        cephadm_module.spec_store.spec_created = {
+            'nfs.foo': datetime_now(),
+            'ingress.nfs.foo': datetime_now()
+        }
+
+        haproxy_txt = (
+            '# This file is generated by cephadm.\n'
+            'global\n'
+            '    log         127.0.0.1 local2\n'
+            '    chroot      /var/lib/haproxy\n'
+            '    pidfile     /var/lib/haproxy/haproxy.pid\n'
+            '    maxconn     8000\n'
+            '    daemon\n'
+            '    stats socket /var/lib/haproxy/stats\n\n'
+            'defaults\n'
+            '    mode                    tcp\n'
+            '    log                     global\n'
+            '    timeout queue           1m\n'
+            '    timeout connect         10s\n'
+            '    timeout client          1m\n'
+            '    timeout server          1m\n'
+            '    timeout check           10s\n'
+            '    maxconn                 8000\n\n'
+            'frontend stats\n'
+            '    mode http\n'
+            '    bind 192.168.122.100:9049\n'
+            '    bind 192.168.122.111:9049\n'
+            '    stats enable\n'
+            '    stats uri /stats\n'
+            '    stats refresh 10s\n'
+            '    stats auth admin:12345\n'
+            '    http-request use-service prometheus-exporter if { path /metrics }\n'
+            '    monitor-uri /health\n\n'
+            'frontend frontend\n'
+            '    bind 192.168.122.100:2049\n'
+            '    default_backend backend\n\n'
+            'backend backend\n'
+            '    mode        tcp\n'
+            '    balance     source\n'
+            '    hash-type   consistent\n'
+            '    default-server send-proxy-v2\n'
+            '    server nfs.foo.0 192.168.122.111:12049\n'
+        )
+        haproxy_expected_conf = {
+            'files': {'haproxy.cfg': haproxy_txt}
+        }
+
+        nfs_ganesha_txt = (
+            "# This file is generated by cephadm.\n"
+            'NFS_CORE_PARAM {\n'
+            '        Enable_NLM = false;\n'
+            '        Enable_RQUOTA = false;\n'
+            '        Protocols = 4;\n'
+            '        NFS_Port = 2049;\n'
+            '        HAProxy_Hosts = 192.168.122.111, 10.10.2.20, 192.168.122.222;\n'
+            '}\n'
+            '\n'
+            'NFSv4 {\n'
+            '        Delegations = false;\n'
+            "        RecoveryBackend = 'rados_cluster';\n"
+            '        Minor_Versions = 1, 2;\n'
+            '}\n'
+            '\n'
+            'RADOS_KV {\n'
+            '        UserId = "nfs.foo.test.0.0";\n'
+            '        nodeid = "nfs.foo.None";\n'
+            '        pool = ".nfs";\n'
+            '        namespace = "foo";\n'
+            '}\n'
+            '\n'
+            'RADOS_URLS {\n'
+            '        UserId = "nfs.foo.test.0.0";\n'
+            '        watch_url = '
+            '"rados://.nfs/foo/conf-nfs.foo";\n'
+            '}\n'
+            '\n'
+            'RGW {\n'
+            '        cluster = "ceph";\n'
+            '        name = "client.nfs.foo.test.0.0-rgw";\n'
+            '}\n'
+            '\n'
+            "%url    rados://.nfs/foo/conf-nfs.foo"
+        )
+        nfs_expected_conf = {
+            'files': {'ganesha.conf': nfs_ganesha_txt},
+            'config': '',
+            'extra_args': ['-N', 'NIV_EVENT'],
+            'keyring': (
+                '[client.nfs.foo.test.0.0]\n'
+                'key = None\n'
+            ),
+            'namespace': 'foo',
+            'pool': '.nfs',
+            'rgw': {
+                'cluster': 'ceph',
+                'keyring': (
+                    '[client.nfs.foo.test.0.0-rgw]\n'
+                    'key = None\n'
+                ),
+                'user': 'nfs.foo.test.0.0-rgw',
+            },
+            'userid': 'nfs.foo.test.0.0',
+        }
+
+        nfs_daemons = [
+            DaemonDescription(
+                daemon_type='nfs',
+                daemon_id='foo.0.1.host1.qwerty',
+                hostname='host1',
+                rank=0,
+                rank_generation=1,
+                ports=[12049],
+            ),
+            DaemonDescription(
+                daemon_type='nfs',
+                daemon_id='foo.0.0.host2.abcdef',
+                hostname='host2',
+                rank=0,
+                rank_generation=0,
+                ports=[12049],
+            ),
+        ]
+        _get_daemons_by_service.return_value = nfs_daemons
+
+        ingress_svc = cephadm_module.cephadm_services['ingress']
+        nfs_svc = cephadm_module.cephadm_services['nfs']
+
+        # add host network info to one host to test the behavior of
+        # adding all known-good addresses of the host to the list.
+        cephadm_module.cache.update_host_networks('host1', {
+            # this one is additional
+            '10.10.2.0/24': {
+                'eth1': ['10.10.2.20']
+            },
+            # this is redundant and will be skipped
+            '192.168.122.0/24': {
+                'eth0': ['192.168.122.111']
+            },
+            # this is a link-local address and will be ignored
+            "fe80::/64": {
+                "veth0": [
+                    "fe80::8cf5:25ff:fe1c:d963"
+                ],
+                "eth0": [
+                    "fe80::c7b:cbff:fef6:7370"
+                ],
+                "eth1": [
+                    "fe80::7201:25a7:390b:d9a7"
+                ]
+            },
+        })
+
+        haproxy_generated_conf, _ = ingress_svc.haproxy_generate_config(
+            CephadmDaemonDeploySpec(
+                host='host1',
+                daemon_id='ingress',
+                service_name=ispec.service_name(),
+            ),
+        )
+        assert haproxy_generated_conf == haproxy_expected_conf
+
+        nfs_generated_conf, _ = nfs_svc.generate_config(
+            CephadmDaemonDeploySpec(
+                host='test',
+                daemon_id='foo.test.0.0',
+                service_name=nfs_service.service_name(),
+            ),
+        )
+        assert nfs_generated_conf == nfs_expected_conf
+
 
 class TestCephFsMirror:
     @patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -1809,19 +2567,29 @@ class TestJaeger:
             with with_service(cephadm_module, spec):
                 _run_cephadm.assert_called_with(
                     'test',
-                    'jaeger-query.test',
-                    'deploy',
-                    [
-                        '--name', 'jaeger-query.test',
-                        '--meta-json',
-                        ('{"service_name": "jaeger-query", "ports": [16686], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '16686'
-
-                    ],
-                    stdin=json.dumps(config),
-                    image=''
+                    "jaeger-query.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'jaeger-query.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [16686],
+                        },
+                        "meta": {
+                            'service_name': 'jaeger-query',
+                            'ports': [16686],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": config,
+                    }),
                 )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -1837,37 +2605,57 @@ class TestJaeger:
                 "elasticsearch_nodes": f'http://{build_url(host=cephadm_module.inventory.get_addr("test"), port=9200).lstrip("/")}'}
             with with_service(cephadm_module, es_spec):
                 _run_cephadm.assert_called_with(
-                    'test',
-                    'elasticsearch.test',
-                    'deploy',
-                    [
-                        '--name', 'elasticsearch.test',
-                        '--meta-json',
-                        ('{"service_name": "elasticsearch", "ports": [9200], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '9200'
-
-                    ],
-                    stdin=json.dumps(es_config),
-                    image=''
+                    "test",
+                    "elasticsearch.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'elasticsearch.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [9200],
+                        },
+                        "meta": {
+                            'service_name': 'elasticsearch',
+                            'ports': [9200],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": es_config,
+                    }),
                 )
                 with with_service(cephadm_module, collector_spec):
                     _run_cephadm.assert_called_with(
-                        'test',
-                        'jaeger-collector.test',
-                        'deploy',
-                        [
-                            '--name', 'jaeger-collector.test',
-                            '--meta-json',
-                            ('{"service_name": "jaeger-collector", "ports": [14250], "ip": null, "deployed_by": [], "rank": null, '
-                             '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                            '--config-json', '-',
-                            '--tcp-ports', '14250'
-
-                        ],
-                        stdin=json.dumps(collector_config),
-                        image=''
+                        "test",
+                        "jaeger-collector.test",
+                        ['_orch', 'deploy'],
+                        [],
+                        stdin=json.dumps({
+                            "fsid": "fsid",
+                            "name": 'jaeger-collector.test',
+                            "image": '',
+                            "deploy_arguments": [],
+                            "params": {
+                                'tcp_ports': [14250],
+                            },
+                            "meta": {
+                                'service_name': 'jaeger-collector',
+                                'ports': [14250],
+                                'ip': None,
+                                'deployed_by': [],
+                                'rank': None,
+                                'rank_generation': None,
+                                'extra_container_args': None,
+                                'extra_entrypoint_args': None,
+                            },
+                            "config_blobs": collector_config,
+                        }),
                     )
 
     @patch("cephadm.serve.CephadmServe._run_cephadm")
@@ -1883,35 +2671,55 @@ class TestJaeger:
         with with_host(cephadm_module, 'test'):
             with with_service(cephadm_module, collector_spec):
                 _run_cephadm.assert_called_with(
-                    'test',
-                    'jaeger-collector.test',
-                    'deploy',
-                    [
-                        '--name', 'jaeger-collector.test',
-                        '--meta-json',
-                        ('{"service_name": "jaeger-collector", "ports": [14250], "ip": null, "deployed_by": [], "rank": null, '
-                         '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                        '--config-json', '-',
-                        '--tcp-ports', '14250'
-
-                    ],
-                    stdin=json.dumps(collector_config),
-                    image=''
+                    "test",
+                    "jaeger-collector.test",
+                    ['_orch', 'deploy'],
+                    [],
+                    stdin=json.dumps({
+                        "fsid": "fsid",
+                        "name": 'jaeger-collector.test',
+                        "image": '',
+                        "deploy_arguments": [],
+                        "params": {
+                            'tcp_ports': [14250],
+                        },
+                        "meta": {
+                            'service_name': 'jaeger-collector',
+                            'ports': [14250],
+                            'ip': None,
+                            'deployed_by': [],
+                            'rank': None,
+                            'rank_generation': None,
+                            'extra_container_args': None,
+                            'extra_entrypoint_args': None,
+                        },
+                        "config_blobs": collector_config,
+                    }),
                 )
                 with with_service(cephadm_module, agent_spec):
                     _run_cephadm.assert_called_with(
-                        'test',
-                        'jaeger-agent.test',
-                        'deploy',
-                        [
-                            '--name', 'jaeger-agent.test',
-                            '--meta-json',
-                            ('{"service_name": "jaeger-agent", "ports": [6799], "ip": null, "deployed_by": [], "rank": null, '
-                             '"rank_generation": null, "extra_container_args": null, "extra_entrypoint_args": null}'),
-                            '--config-json', '-',
-                            '--tcp-ports', '6799'
-
-                        ],
-                        stdin=json.dumps(agent_config),
-                        image=''
+                        "test",
+                        "jaeger-agent.test",
+                        ['_orch', 'deploy'],
+                        [],
+                        stdin=json.dumps({
+                            "fsid": "fsid",
+                            "name": 'jaeger-agent.test',
+                            "image": '',
+                            "deploy_arguments": [],
+                            "params": {
+                                'tcp_ports': [6799],
+                            },
+                            "meta": {
+                                'service_name': 'jaeger-agent',
+                                'ports': [6799],
+                                'ip': None,
+                                'deployed_by': [],
+                                'rank': None,
+                                'rank_generation': None,
+                                'extra_container_args': None,
+                                'extra_entrypoint_args': None,
+                            },
+                            "config_blobs": agent_config,
+                        }),
                     )
index 4197d8d7ef0ede87bbdf529aa62d25cc06e9b3e4..29f01b6c79724001bb86ad6768827e57b96a7184 100644 (file)
@@ -1,3 +1,5 @@
+import asyncssh
+from asyncssh.process import SSHCompletedProcess
 from unittest import mock
 try:
     # AsyncMock was not added until python 3.8
@@ -19,6 +21,7 @@ from ceph.deployment.hostspec import HostSpec
 from cephadm import CephadmOrchestrator
 from cephadm.serve import CephadmServe
 from cephadm.tests.fixtures import with_host, wait, async_side_effect
+from orchestrator import OrchestratorError
 
 
 @pytest.mark.skipif(ConnectionLost is None, reason='no asyncssh')
@@ -49,6 +52,52 @@ class TestWithSSH:
                 out = wait(cephadm_module, cephadm_module.get_hosts())[0].to_json()
                 assert out == HostSpec('test', '1::4').to_json()
 
+    def test_ssh_remote_cmds_execution(self, cephadm_module):
+
+        if not AsyncMock:
+            # can't run this test if we could not import AsyncMock
+            return
+
+        class FakeConn:
+            def __init__(self, exception=None, returncode=0):
+                self.exception = exception
+                self.returncode = returncode
+
+            async def run(self, *args, **kwargs):
+                if self.exception:
+                    raise self.exception
+                else:
+                    return SSHCompletedProcess(returncode=self.returncode, stdout="", stderr="")
+
+            async def close(self):
+                pass
+
+        def run_test(host, conn, expected_error):
+            mock_connect = AsyncMock(return_value=conn)
+            with pytest.raises(OrchestratorError, match=expected_error):
+                with mock.patch("asyncssh.connect", new=mock_connect):
+                    with with_host(cephadm_module, host):
+                        CephadmServe(cephadm_module)._check_host(host)
+
+        # Test case 1: command failure
+        run_test('test1', FakeConn(returncode=1), "Command .+ failed")
+
+        # Test case 2: connection error
+        run_test('test2', FakeConn(exception=asyncssh.ChannelOpenError(1, "", "")), "Unable to reach remote host test2.")
+
+        # Test case 3: asyncssh ProcessError
+        stderr = "my-process-stderr"
+        run_test('test3', FakeConn(exception=asyncssh.ProcessError(returncode=3,
+                                                                   env="",
+                                                                   command="",
+                                                                   subsystem="",
+                                                                   exit_status="",
+                                                                   exit_signal="",
+                                                                   stderr=stderr,
+                                                                   stdout="")), f"Cannot execute the command.+{stderr}")
+        # Test case 4: generic error
+        run_test('test4', FakeConn(exception=Exception), "Generic error while executing command.+")
+
 
 @pytest.mark.skipif(ConnectionLost is not None, reason='asyncssh')
 class TestWithoutSSH:
index 38a3a390745e1c73d94f2d1619fdb14504d4a00f..66feaee319494debd94d27af0a449d53d0c7c2ca 100644 (file)
@@ -37,6 +37,15 @@ class FakeCache:
     def get_draining_hosts(self):
         return []
 
+    def is_host_unreachable(self, hostname: str):
+        return hostname in [h.hostname for h in self.get_unreachable_hosts()]
+
+    def is_host_schedulable(self, hostname: str):
+        return hostname in [h.hostname for h in self.get_schedulable_hosts()]
+
+    def is_host_draining(self, hostname: str):
+        return hostname in [h.hostname for h in self.get_draining_hosts()]
+
     @property
     def networks(self):
         return {h: {'a': {'b': ['c']}} for h in self.hosts}
@@ -165,6 +174,32 @@ class TestTunedProfiles:
         _write_remote_file.assert_called_with(
             'a', f'{SYSCTL_DIR}/p2-cephadm-tuned-profile.conf', tp._profile_to_str(self.tspec2).encode('utf-8'))
 
+    def test_dont_write_to_unreachable_hosts(self):
+        profiles = {'p1': self.tspec1, 'p2': self.tspec2, 'p3': self.tspec3}
+
+        # list host "a" and "b" as hosts that exist, "a" will be
+        # a normal, schedulable host and "b" is considered unreachable
+        mgr = FakeMgr(['a', 'b'],
+                      ['a'],
+                      ['b'],
+                      profiles)
+        tp = TunedProfileUtils(mgr)
+
+        assert 'a' not in tp.mgr.cache.last_tuned_profile_update
+        assert 'b' not in tp.mgr.cache.last_tuned_profile_update
+
+        # with an online host, should proceed as normal. Providing
+        # no actual profiles here though so the only actual action taken
+        # is updating the entry in the last_tuned_profile_update dict
+        tp._write_tuned_profiles('a', {})
+        assert 'a' in tp.mgr.cache.last_tuned_profile_update
+
+        # trying to write to an unreachable host should be a no-op
+        # and return immediately. No entry for 'b' should be added
+        # to the last_tuned_profile_update dict
+        tp._write_tuned_profiles('b', {})
+        assert 'b' not in tp.mgr.cache.last_tuned_profile_update
+
     def test_store(self):
         mgr = FakeMgr(['a', 'b', 'c'],
                       ['a', 'b', 'c'],
index 7aa46f9027695e914523282905749e9a27495d58..3b5c305b5f0f9f83ed93f9804e4b7d0a3c8dfb6d 100644 (file)
@@ -7,6 +7,7 @@ from ceph.deployment.service_spec import PlacementSpec, ServiceSpec
 from cephadm import CephadmOrchestrator
 from cephadm.upgrade import CephadmUpgrade, UpgradeState
 from cephadm.ssh import HostConnectionError
+from cephadm.utils import ContainerInspectInfo
 from orchestrator import OrchestratorError, DaemonDescription
 from .fixtures import _run_cephadm, wait, with_host, with_service, \
     receive_agent_metadata, async_side_effect
@@ -80,6 +81,30 @@ def test_upgrade_resume_clear_health_warnings(_rm_health_warning, cephadm_module
             _rm_health_warning.assert_has_calls(calls_list, any_order=True)
 
 
+@mock.patch('cephadm.upgrade.CephadmUpgrade._get_current_version', lambda _: (17, 2, 6))
+@mock.patch("cephadm.serve.CephadmServe._get_container_image_info")
+def test_upgrade_check_with_ceph_version(_get_img_info, cephadm_module: CephadmOrchestrator):
+    # This test was added to avoid screwing up the image base so that
+    # when the version was added to it it made an incorrect image
+    # The issue caused the image to come out as
+    # quay.io/ceph/ceph:v18:v18.2.0
+    # see https://tracker.ceph.com/issues/63150
+    _img = ''
+
+    def _fake_get_img_info(img_name):
+        nonlocal _img
+        _img = img_name
+        return ContainerInspectInfo(
+            'image_id',
+            '18.2.0',
+            'digest'
+        )
+
+    _get_img_info.side_effect = _fake_get_img_info
+    cephadm_module.upgrade_check('', '18.2.0')
+    assert _img == 'quay.io/ceph/ceph:v18.2.0'
+
+
 @mock.patch("cephadm.serve.CephadmServe._run_cephadm", _run_cephadm('{}'))
 @pytest.mark.parametrize("use_repo_digest",
                          [
index 19d97f42133f0b9d8e5c723c73fdef8b7a22bff5..8ec30bd536be72428f807bacf622322833a66914 100644 (file)
@@ -67,7 +67,7 @@ class TunedProfileUtils():
         SHOULD be on the host. Then if we see any file names that don't match this, but
         DO include "-cephadm-tuned-profile.conf" (implying they're from us), remove them.
         """
-        if host in self.mgr.offline_hosts:
+        if self.mgr.cache.is_host_unreachable(host):
             return
         cmd = ['ls', SYSCTL_DIR]
         found_files = self.mgr.ssh.check_execute_command(host, cmd, log_command=self.mgr.log_refresh_metadata).split('\n')
@@ -88,7 +88,7 @@ class TunedProfileUtils():
             self.mgr.ssh.check_execute_command(host, ['sysctl', '--system'])
 
     def _write_tuned_profiles(self, host: str, profiles: List[Dict[str, str]]) -> None:
-        if host in self.mgr.offline_hosts:
+        if self.mgr.cache.is_host_unreachable(host):
             return
         updated = False
         for p in profiles:
index 552964c845871475221ad9c55a179f07f5a1c0f9..eeae37580455f938f326a27bcaca096d6ae8910c 100644 (file)
@@ -9,7 +9,7 @@ from cephadm.registry import Registry
 from cephadm.serve import CephadmServe
 from cephadm.services.cephadmservice import CephadmDaemonDeploySpec
 from cephadm.utils import ceph_release_to_major, name_to_config_section, CEPH_UPGRADE_ORDER, \
-    MONITORING_STACK_TYPES, CEPH_TYPES, GATEWAY_TYPES
+    CEPH_TYPES, NON_CEPH_IMAGE_TYPES, GATEWAY_TYPES
 from cephadm.ssh import HostConnectionError
 from orchestrator import OrchestratorError, DaemonDescription, DaemonDescriptionStatus, daemon_type_to_service
 
@@ -267,6 +267,9 @@ class CephadmUpgrade:
         if not image:
             image = self.mgr.container_image_base
         reg_name, bare_image = image.split('/', 1)
+        if ':' in bare_image:
+            # for our purposes, we don't want to use the tag here
+            bare_image = bare_image.split(':')[0]
         reg = Registry(reg_name)
         (current_major, current_minor, _) = self._get_current_version()
         versions = []
@@ -395,7 +398,7 @@ class CephadmUpgrade:
         # in order for the user's selection of daemons to upgrade to be valid. for example,
         # if they say --daemon-types 'osd,mds' but mons have not been upgraded, we block.
         daemons = [d for d in self.mgr.cache.get_daemons(
-        ) if d.daemon_type not in MONITORING_STACK_TYPES]
+        ) if d.daemon_type not in NON_CEPH_IMAGE_TYPES]
         err_msg_base = 'Cannot start upgrade. '
         # "dtypes" will later be filled in with the types of daemons that will be upgraded with the given parameters
         dtypes = []
@@ -764,7 +767,7 @@ class CephadmUpgrade:
             if (
                 (self.mgr.use_repo_digest and d.matches_digests(target_digests))
                 or (not self.mgr.use_repo_digest and d.matches_image_name(target_name))
-                or (d.daemon_type in MONITORING_STACK_TYPES)
+                or (d.daemon_type in NON_CEPH_IMAGE_TYPES)
             ):
                 logger.debug('daemon %s.%s on correct image' % (
                     d.daemon_type, d.daemon_id))
@@ -1171,7 +1174,7 @@ class CephadmUpgrade:
                 # and monitoring stack daemons. Additionally, this case is only valid if
                 # the active mgr is already upgraded.
                 if any(d in target_digests for d in self.mgr.get_active_mgr_digests()):
-                    if daemon_type not in MONITORING_STACK_TYPES and daemon_type != 'mgr':
+                    if daemon_type not in NON_CEPH_IMAGE_TYPES and daemon_type != 'mgr':
                         continue
                 else:
                     self._mark_upgrade_complete()
@@ -1184,8 +1187,8 @@ class CephadmUpgrade:
             upgraded_daemon_count += done
             self._update_upgrade_progress(upgraded_daemon_count / len(daemons))
 
-            # make sure mgr and monitoring stack daemons are properly redeployed in staggered upgrade scenarios
-            if daemon_type == 'mgr' or daemon_type in MONITORING_STACK_TYPES:
+            # make sure mgr and non-ceph-image daemons are properly redeployed in staggered upgrade scenarios
+            if daemon_type == 'mgr' or daemon_type in NON_CEPH_IMAGE_TYPES:
                 if any(d in target_digests for d in self.mgr.get_active_mgr_digests()):
                     need_upgrade_names = [d[0].name() for d in need_upgrade] + \
                         [d[0].name() for d in need_upgrade_deployer]
index 6f8e022d62f0ae71df008e5cf3e7f5be76199d8e..63672936c7cb317f5b8c435cf544dc0fa4551836 100644 (file)
@@ -23,7 +23,7 @@ class CephadmNoImage(Enum):
 # NOTE: order important here as these are used for upgrade order
 CEPH_TYPES = ['mgr', 'mon', 'crash', 'osd', 'mds', 'rgw',
               'rbd-mirror', 'cephfs-mirror', 'ceph-exporter']
-GATEWAY_TYPES = ['iscsi', 'nfs']
+GATEWAY_TYPES = ['iscsi', 'nfs', 'nvmeof']
 MONITORING_STACK_TYPES = ['node-exporter', 'prometheus',
                           'alertmanager', 'grafana', 'loki', 'promtail']
 RESCHEDULE_FROM_OFFLINE_HOSTS_TYPES = ['haproxy', 'nfs']
@@ -33,6 +33,11 @@ CEPH_UPGRADE_ORDER = CEPH_TYPES + GATEWAY_TYPES + MONITORING_STACK_TYPES
 # these daemon types use the ceph container image
 CEPH_IMAGE_TYPES = CEPH_TYPES + ['iscsi', 'nfs']
 
+# these daemons do not use the ceph image. There are other daemons
+# that also don't use the ceph image, but we only care about those
+# that are part of the upgrade order here
+NON_CEPH_IMAGE_TYPES = MONITORING_STACK_TYPES + ['nvmeof']
+
 # Used for _run_cephadm used for check-host etc that don't require an --image parameter
 cephadmNoImage = CephadmNoImage.token
 
@@ -43,12 +48,22 @@ class ContainerInspectInfo(NamedTuple):
     repo_digests: Optional[List[str]]
 
 
+class SpecialHostLabels(str, Enum):
+    ADMIN: str = '_admin'
+    NO_MEMORY_AUTOTUNE: str = '_no_autotune_memory'
+    DRAIN_DAEMONS: str = '_no_schedule'
+    DRAIN_CONF_KEYRING: str = '_no_conf_keyring'
+
+    def to_json(self) -> str:
+        return self.value
+
+
 def name_to_config_section(name: str) -> ConfEntity:
     """
     Map from daemon names to ceph entity names (as seen in config)
     """
     daemon_type = name.split('.', 1)[0]
-    if daemon_type in ['rgw', 'rbd-mirror', 'nfs', 'crash', 'iscsi', 'ceph-exporter']:
+    if daemon_type in ['rgw', 'rbd-mirror', 'nfs', 'crash', 'iscsi', 'ceph-exporter', 'nvmeof']:
         return ConfEntity('client.' + name)
     elif daemon_type in ['mon', 'osd', 'mds', 'mgr', 'client']:
         return ConfEntity(name)
index 83b2eb694884493d3bbf930adbe99e3999230f12..a48f759f5e788ed069fcf878da2a09aaf129c320 100755 (executable)
@@ -38,6 +38,8 @@ cypress_run () {
 
 cd ${CEPH_DEV_FOLDER}/src/pybind/mgr/dashboard/frontend
 
+kcli ssh -u root ceph-node-00 'cephadm shell "ceph config set mgr mgr/prometheus/exclude_perf_counters false"'
+
 # check if the prometheus daemon is running
 # before starting the e2e tests
 
index 7b7589d423abde88a2cc313956ddab98891470b2..09b2bebfc1dfea6044042d82fe7e08d5c5e1447b 100644 (file)
@@ -1,7 +1,9 @@
 # -*- coding: utf-8 -*-
+import json
 import logging
 import os
 from collections import defaultdict
+from typing import Any, Dict
 
 import cephfs
 import cherrypy
@@ -12,8 +14,9 @@ from ..security import Scope
 from ..services.ceph_service import CephService
 from ..services.cephfs import CephFS as CephFS_
 from ..services.exception import handle_cephfs_error
-from ..tools import ViewCache
-from . import APIDoc, APIRouter, EndpointDoc, RESTController, UIRouter, allow_empty_body
+from ..tools import ViewCache, str_to_bool
+from . import APIDoc, APIRouter, DeletePermission, Endpoint, EndpointDoc, \
+    RESTController, UIRouter, UpdatePermission, allow_empty_body
 
 GET_QUOTAS_SCHEMA = {
     'max_bytes': (int, ''),
@@ -23,6 +26,7 @@ GET_QUOTAS_SCHEMA = {
 logger = logging.getLogger("controllers.rgw")
 
 
+# pylint: disable=R0904
 @APIRouter('/cephfs', Scope.CEPHFS)
 @APIDoc("Cephfs Management API", "Cephfs")
 class CephFS(RESTController):
@@ -37,6 +41,59 @@ class CephFS(RESTController):
         fsmap = mgr.get("fs_map")
         return fsmap['filesystems']
 
+    def create(self, name: str, service_spec: Dict[str, Any]):
+        service_spec_str = '1 '
+        if 'labels' in service_spec['placement']:
+            for label in service_spec['placement']['labels']:
+                service_spec_str += f'label:{label},'
+            service_spec_str = service_spec_str[:-1]
+        if 'hosts' in service_spec['placement']:
+            for host in service_spec['placement']['hosts']:
+                service_spec_str += f'{host},'
+            service_spec_str = service_spec_str[:-1]
+
+        error_code, _, err = mgr.remote('volumes', '_cmd_fs_volume_create', None,
+                                        {'name': name, 'placement': service_spec_str})
+        if error_code != 0:
+            raise RuntimeError(
+                f'Error creating volume {name} with placement {str(service_spec)}: {err}')
+        return f'Volume {name} created successfully'
+
+    @EndpointDoc("Remove CephFS Volume",
+                 parameters={
+                     'name': (str, 'File System Name'),
+                 })
+    @allow_empty_body
+    @Endpoint('DELETE')
+    @DeletePermission
+    def remove(self, name):
+        error_code, _, err = mgr.remote('volumes', '_cmd_fs_volume_rm', None,
+                                        {'vol_name': name,
+                                         'yes-i-really-mean-it': "--yes-i-really-mean-it"})
+        if error_code != 0:
+            raise DashboardException(
+                msg=f'Error deleting volume {name}: {err}',
+                component='cephfs')
+        return f'Volume {name} removed successfully'
+
+    @EndpointDoc("Rename CephFS Volume",
+                 parameters={
+                     'name': (str, 'Existing FS Name'),
+                     'new_name': (str, 'New FS Name'),
+                 })
+    @allow_empty_body
+    @UpdatePermission
+    @Endpoint('PUT')
+    def rename(self, name: str, new_name: str):
+        error_code, _, err = mgr.remote('volumes', '_cmd_fs_volume_rename', None,
+                                        {'vol_name': name, 'new_vol_name': new_name,
+                                         'yes_i_really_mean_it': True})
+        if error_code != 0:
+            raise DashboardException(
+                msg=f'Error renaming volume {name} to {new_name}: {err}',
+                component='cephfs')
+        return f'Volume {name} renamed successfully to {new_name}'
+
     def get(self, fs_id):
         fs_id = self.fs_id_to_int(fs_id)
         return self.fs_status(fs_id)
@@ -560,3 +617,149 @@ class CephFsUi(CephFS):
         except (cephfs.PermissionError, cephfs.ObjectNotFound):  # pragma: no cover
             paths = []
         return paths
+
+
+@APIRouter('/cephfs/subvolume', Scope.CEPHFS)
+@APIDoc('CephFS Subvolume Management API', 'CephFSSubvolume')
+class CephFSSubvolume(RESTController):
+
+    def get(self, vol_name: str, group_name: str = ""):
+        params = {'vol_name': vol_name}
+        if group_name:
+            params['group_name'] = group_name
+        error_code, out, err = mgr.remote(
+            'volumes', '_cmd_fs_subvolume_ls', None, params)
+        if error_code != 0:
+            raise DashboardException(
+                f'Failed to list subvolumes for volume {vol_name}: {err}'
+            )
+        subvolumes = json.loads(out)
+        for subvolume in subvolumes:
+            params['sub_name'] = subvolume['name']
+            error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolume_info', None,
+                                              params)
+            if error_code != 0:
+                raise DashboardException(
+                    f'Failed to get info for subvolume {subvolume["name"]}: {err}'
+                )
+            subvolume['info'] = json.loads(out)
+        return subvolumes
+
+    @RESTController.Resource('GET')
+    def info(self, vol_name: str, subvol_name: str, group_name: str = ""):
+        params = {'vol_name': vol_name, 'sub_name': subvol_name}
+        if group_name:
+            params['group_name'] = group_name
+        error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolume_info', None,
+                                          params)
+        if error_code != 0:
+            raise DashboardException(
+                f'Failed to get info for subvolume {subvol_name}: {err}'
+            )
+        return json.loads(out)
+
+    def create(self, vol_name: str, subvol_name: str, **kwargs):
+        error_code, _, err = mgr.remote('volumes', '_cmd_fs_subvolume_create', None, {
+            'vol_name': vol_name, 'sub_name': subvol_name, **kwargs})
+        if error_code != 0:
+            raise DashboardException(
+                f'Failed to create subvolume {subvol_name}: {err}'
+            )
+
+        return f'Subvolume {subvol_name} created successfully'
+
+    def set(self, vol_name: str, subvol_name: str, size: str, group_name: str = ""):
+        params = {'vol_name': vol_name, 'sub_name': subvol_name}
+        if size:
+            params['new_size'] = size
+            if group_name:
+                params['group_name'] = group_name
+            error_code, _, err = mgr.remote('volumes', '_cmd_fs_subvolume_resize', None,
+                                            params)
+            if error_code != 0:
+                raise DashboardException(
+                    f'Failed to update subvolume {subvol_name}: {err}'
+                )
+
+        return f'Subvolume {subvol_name} updated successfully'
+
+    def delete(self, vol_name: str, subvol_name: str, group_name: str = "",
+               retain_snapshots: bool = False):
+        params = {'vol_name': vol_name, 'sub_name': subvol_name}
+        if group_name:
+            params['group_name'] = group_name
+        retain_snapshots = str_to_bool(retain_snapshots)
+        if retain_snapshots:
+            params['retain_snapshots'] = 'True'
+        error_code, _, err = mgr.remote(
+            'volumes', '_cmd_fs_subvolume_rm', None, params)
+        if error_code != 0:
+            raise DashboardException(
+                msg=f'Failed to remove subvolume {subvol_name}: {err}',
+                component='cephfs')
+        return f'Subvolume {subvol_name} removed successfully'
+
+
+@APIRouter('/cephfs/subvolume/group', Scope.CEPHFS)
+@APIDoc("Cephfs Subvolume Group Management API", "CephfsSubvolumeGroup")
+class CephFSSubvolumeGroups(RESTController):
+
+    def get(self, vol_name):
+        if not vol_name:
+            raise DashboardException(
+                f'Error listing subvolume groups for {vol_name}')
+        error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolumegroup_ls',
+                                          None, {'vol_name': vol_name})
+        if error_code != 0:
+            raise DashboardException(
+                f'Error listing subvolume groups for {vol_name}')
+        subvolume_groups = json.loads(out)
+        for group in subvolume_groups:
+            error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolumegroup_info',
+                                              None, {'vol_name': vol_name,
+                                                     'group_name': group['name']})
+            if error_code != 0:
+                raise DashboardException(
+                    f'Failed to get info for subvolume group {group["name"]}: {err}'
+                )
+            group['info'] = json.loads(out)
+        return subvolume_groups
+
+    @RESTController.Resource('GET')
+    def info(self, vol_name: str, group_name: str):
+        error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolumegroup_info', None, {
+            'vol_name': vol_name, 'group_name': group_name})
+        if error_code != 0:
+            raise DashboardException(
+                f'Failed to get info for subvolume group {group_name}: {err}'
+            )
+        return json.loads(out)
+
+    def create(self, vol_name: str, group_name: str, **kwargs):
+        error_code, _, err = mgr.remote('volumes', '_cmd_fs_subvolumegroup_create', None, {
+            'vol_name': vol_name, 'group_name': group_name, **kwargs})
+        if error_code != 0:
+            raise DashboardException(
+                f'Failed to create subvolume group {group_name}: {err}'
+            )
+
+    def set(self, vol_name: str, group_name: str, size: str):
+        if not size:
+            return f'Failed to update subvolume group {group_name}, size was not provided'
+        error_code, _, err = mgr.remote('volumes', '_cmd_fs_subvolumegroup_resize', None, {
+            'vol_name': vol_name, 'group_name': group_name, 'new_size': size})
+        if error_code != 0:
+            raise DashboardException(
+                f'Failed to update subvolume group {group_name}: {err}'
+            )
+        return f'Subvolume group {group_name} updated successfully'
+
+    def delete(self, vol_name: str, group_name: str):
+        error_code, _, err = mgr.remote(
+            'volumes', '_cmd_fs_subvolumegroup_rm', None, {
+                'vol_name': vol_name, 'group_name': group_name})
+        if error_code != 0:
+            raise DashboardException(
+                f'Failed to delete subvolume group {group_name}: {err}'
+            )
+        return f'Subvolume group {group_name} removed successfully'
index d8170e672e9929fc7a80b381f352cc603cf4eb56..5091457ec9805950ac050068cea54ae5c4ae3536 100644 (file)
@@ -1,9 +1,16 @@
 # -*- coding: utf-8 -*-
 
+from typing import Dict, List, Optional
+
 from ..security import Scope
 from ..services.cluster import ClusterModel
-from . import APIDoc, APIRouter, EndpointDoc, RESTController
+from ..services.exception import handle_orchestrator_error
+from ..services.orchestrator import OrchClient, OrchFeature
+from ..tools import str_to_bool
+from . import APIDoc, APIRouter, CreatePermission, Endpoint, EndpointDoc, \
+    ReadPermission, RESTController, UpdatePermission, allow_empty_body
 from ._version import APIVersion
+from .orchestrator import raise_if_no_orchestrator
 
 
 @APIRouter('/cluster', Scope.CONFIG_OPT)
@@ -18,4 +25,77 @@ class Cluster(RESTController):
     @EndpointDoc("Update the cluster status",
                  parameters={'status': (str, 'Cluster Status')})
     def singleton_set(self, status: str):
-        ClusterModel(status).to_db()
+        ClusterModel(status).to_db()  # -*- coding: utf-8 -*-
+
+
+@APIRouter('/cluster/upgrade', Scope.CONFIG_OPT)
+@APIDoc("Upgrade Management API", "Upgrade")
+class ClusterUpgrade(RESTController):
+    @RESTController.MethodMap()
+    @raise_if_no_orchestrator([OrchFeature.UPGRADE_LIST])
+    @handle_orchestrator_error('upgrade')
+    @EndpointDoc("Get the available versions to upgrade",
+                 parameters={
+                     'image': (str, 'Ceph Image'),
+                     'tags': (bool, 'Show all image tags'),
+                     'show_all_versions': (bool, 'Show all available versions')
+                 })
+    @ReadPermission
+    def list(self, tags: bool = False, image: Optional[str] = None,
+             show_all_versions: Optional[bool] = False) -> Dict:
+        orch = OrchClient.instance()
+        available_upgrades = orch.upgrades.list(image, str_to_bool(tags),
+                                                str_to_bool(show_all_versions))
+        return available_upgrades
+
+    @Endpoint()
+    @raise_if_no_orchestrator([OrchFeature.UPGRADE_STATUS])
+    @handle_orchestrator_error('upgrade')
+    @EndpointDoc("Get the cluster upgrade status")
+    @ReadPermission
+    def status(self) -> Dict:
+        orch = OrchClient.instance()
+        status = orch.upgrades.status().to_json()
+        return status
+
+    @Endpoint('POST')
+    @raise_if_no_orchestrator([OrchFeature.UPGRADE_START])
+    @handle_orchestrator_error('upgrade')
+    @EndpointDoc("Start the cluster upgrade")
+    @CreatePermission
+    def start(self, image: Optional[str] = None, version: Optional[str] = None,
+              daemon_types: Optional[List[str]] = None, host_placement: Optional[str] = None,
+              services: Optional[List[str]] = None, limit: Optional[int] = None) -> str:
+        orch = OrchClient.instance()
+        start = orch.upgrades.start(image, version, daemon_types, host_placement, services, limit)
+        return start
+
+    @Endpoint('PUT')
+    @raise_if_no_orchestrator([OrchFeature.UPGRADE_PAUSE])
+    @handle_orchestrator_error('upgrade')
+    @EndpointDoc("Pause the cluster upgrade")
+    @UpdatePermission
+    @allow_empty_body
+    def pause(self) -> str:
+        orch = OrchClient.instance()
+        return orch.upgrades.pause()
+
+    @Endpoint('PUT')
+    @raise_if_no_orchestrator([OrchFeature.UPGRADE_RESUME])
+    @handle_orchestrator_error('upgrade')
+    @EndpointDoc("Resume the cluster upgrade")
+    @UpdatePermission
+    @allow_empty_body
+    def resume(self) -> str:
+        orch = OrchClient.instance()
+        return orch.upgrades.resume()
+
+    @Endpoint('PUT')
+    @raise_if_no_orchestrator([OrchFeature.UPGRADE_STOP])
+    @handle_orchestrator_error('upgrade')
+    @EndpointDoc("Stop the cluster upgrade")
+    @UpdatePermission
+    @allow_empty_body
+    def stop(self) -> str:
+        orch = OrchClient.instance()
+        return orch.upgrades.stop()
index eeea5a326255541fc08d071b51d15834265d836f..d5c288131b92e5263f92f49607341ee5d4684ec7 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from typing import Optional
+from typing import List, Optional
 
 from ..exceptions import DashboardException
 from ..security import Scope
@@ -31,3 +31,19 @@ class Daemon(RESTController):
         orch = OrchClient.instance()
         res = orch.daemons.action(action=action, daemon_name=daemon_name, image=container_image)
         return res
+
+    @raise_if_no_orchestrator([OrchFeature.DAEMON_LIST])
+    @handle_orchestrator_error('daemon')
+    @RESTController.MethodMap(version=APIVersion.DEFAULT)
+    def list(self, daemon_types: Optional[List[str]] = None):
+        """List all daemons in the cluster. Also filter by the daemon types specified
+
+        :param daemon_types: List of daemon types to filter by.
+        :return: Returns list of daemons.
+        :rtype: list
+        """
+        orch = OrchClient.instance()
+        daemons = [d.to_dict() for d in orch.services.list_daemons()]
+        if daemon_types:
+            daemons = [d for d in daemons if d['daemon_type'] in daemon_types]
+        return daemons
index 9faaa519202c65e1353a81fd2c1e0fac7e31da8b..812b9c035ae3d7837c4231bf8cd199b8ae16d4c1 100644 (file)
@@ -1,6 +1,5 @@
 # -*- coding: utf-8 -*-
 
-import copy
 import os
 import time
 from collections import Counter
@@ -8,11 +7,12 @@ from typing import Dict, List, Optional
 
 import cherrypy
 from mgr_util import merge_dicts
-from orchestrator import HostSpec
 
 from .. import mgr
 from ..exceptions import DashboardException
+from ..plugins.ttl_cache import ttl_cache, ttl_cache_invalidator
 from ..security import Scope
+from ..services._paginate import ListPaginator
 from ..services.ceph_service import CephService
 from ..services.exception import handle_orchestrator_error
 from ..services.orchestrator import OrchClient, OrchFeature
@@ -117,51 +117,6 @@ def host_task(name, metadata, wait_for=10.0):
     return Task("host/{}".format(name), metadata, wait_for)
 
 
-def merge_hosts_by_hostname(ceph_hosts, orch_hosts):
-    # type: (List[dict], List[HostSpec]) -> List[dict]
-    """
-    Merge Ceph hosts with orchestrator hosts by hostnames.
-
-    :param ceph_hosts: hosts returned from mgr
-    :type ceph_hosts: list of dict
-    :param orch_hosts: hosts returned from ochestrator
-    :type orch_hosts: list of HostSpec
-    :return list of dict
-    """
-    hosts = copy.deepcopy(ceph_hosts)
-    orch_hosts_map = {host.hostname: host.to_json() for host in orch_hosts}
-
-    # Sort labels.
-    for hostname in orch_hosts_map:
-        orch_hosts_map[hostname]['labels'].sort()
-
-    # Hosts in both Ceph and Orchestrator.
-    for host in hosts:
-        hostname = host['hostname']
-        if hostname in orch_hosts_map:
-            host.update(orch_hosts_map[hostname])
-            host['sources']['orchestrator'] = True
-            orch_hosts_map.pop(hostname)
-
-    # Hosts only in Orchestrator.
-    orch_hosts_only = [
-        merge_dicts(
-            {
-                'ceph_version': '',
-                'services': [],
-                'sources': {
-                    'ceph': False,
-                    'orchestrator': True
-                }
-            }, orch_hosts_map[hostname]) for hostname in orch_hosts_map
-    ]
-    hosts.extend(orch_hosts_only)
-    for host in hosts:
-        host['service_instances'] = populate_service_instances(
-            host['hostname'], host['services'])
-    return hosts
-
-
 def populate_service_instances(hostname, services):
     orch = OrchClient.instance()
     if orch.available():
@@ -173,6 +128,7 @@ def populate_service_instances(hostname, services):
     return [{'type': k, 'count': v} for k, v in Counter(services).items()]
 
 
+@ttl_cache(60, label='get_hosts')
 def get_hosts(sources=None):
     """
     Get hosts from various sources.
@@ -184,6 +140,22 @@ def get_hosts(sources=None):
         from_ceph = 'ceph' in _sources
         from_orchestrator = 'orchestrator' in _sources
 
+    if from_orchestrator:
+        orch = OrchClient.instance()
+        if orch.available():
+            hosts = [
+                merge_dicts(
+                    {
+                        'ceph_version': '',
+                        'services': [],
+                        'sources': {
+                            'ceph': False,
+                            'orchestrator': True
+                        }
+                    }, host.to_json()) for host in orch.hosts.list()
+            ]
+            return hosts
+
     ceph_hosts = []
     if from_ceph:
         ceph_hosts = [
@@ -198,12 +170,6 @@ def get_hosts(sources=None):
                     'status': ''
                 }) for server in mgr.list_servers()
         ]
-    if from_orchestrator:
-        orch = OrchClient.instance()
-        if orch.available():
-            return merge_hosts_by_hostname(ceph_hosts, orch.hosts.list())
-    for host in ceph_hosts:
-        host['service_instances'] = populate_service_instances(host['hostname'], host['services'])
     return ceph_hosts
 
 
@@ -303,14 +269,30 @@ class Host(RESTController):
                      'facts': (bool, 'Host Facts')
                  },
                  responses={200: LIST_HOST_SCHEMA})
-    @RESTController.MethodMap(version=APIVersion(1, 2))
-    def list(self, sources=None, facts=False):
+    @RESTController.MethodMap(version=APIVersion(1, 3))
+    def list(self, sources=None, facts=False, offset: int = 0,
+             limit: int = 5, search: str = '', sort: str = ''):
         hosts = get_hosts(sources)
+        params = ['hostname']
+        paginator = ListPaginator(int(offset), int(limit), sort, search, hosts,
+                                  searchable_params=params, sortable_params=params,
+                                  default_sort='+hostname')
+        # pylint: disable=unnecessary-comprehension
+        hosts = [host for host in paginator.list()]
         orch = OrchClient.instance()
+        cherrypy.response.headers['X-Total-Count'] = paginator.get_count()
+        for host in hosts:
+            if 'services' not in host:
+                host['services'] = []
+            host['service_instances'] = populate_service_instances(
+                host['hostname'], host['services'])
         if str_to_bool(facts):
             if orch.available():
                 if not orch.get_missing_features(['get_facts']):
-                    hosts_facts = orch.hosts.get_facts()
+                    hosts_facts = []
+                    for host in hosts:
+                        facts = orch.hosts.get_facts(host['hostname'])[0]
+                        hosts_facts.append(facts)
                     return merge_list_of_dicts_by_key(hosts, hosts_facts, 'hostname')
 
                 raise DashboardException(
@@ -430,13 +412,18 @@ class Host(RESTController):
         return [d.to_dict() for d in daemons]
 
     @handle_orchestrator_error('host')
+    @RESTController.MethodMap(version=APIVersion(1, 2))
     def get(self, hostname: str) -> Dict:
         """
         Get the specified host.
         :raises: cherrypy.HTTPError: If host not found.
         """
-        return get_host(hostname)
+        host = get_host(hostname)
+        host['service_instances'] = populate_service_instances(
+            host['hostname'], host['services'])
+        return host
 
+    @ttl_cache_invalidator('get_hosts')
     @raise_if_no_orchestrator([OrchFeature.HOST_LABEL_ADD,
                                OrchFeature.HOST_LABEL_REMOVE,
                                OrchFeature.HOST_MAINTENANCE_ENTER,
index 0bd883366937142424fc3febaae14682a24f3256..ab0bdcb0b32b939d5fa997b3fdd5f25bd4a5059c 100644 (file)
@@ -79,4 +79,4 @@ class PerfCounters(RESTController):
     @EndpointDoc("Display Perf Counters",
                  responses={200: PERF_SCHEMA})
     def list(self):
-        return mgr.get_all_perf_counters()
+        return mgr.get_unlabeled_perf_counters()
index 5aab37596e1ecd5ccbb22466d30187b056805d40..b639d88262739a70027a409bf0c34404a2ddd8f2 100644 (file)
@@ -61,20 +61,24 @@ class PrometheusRESTController(RESTController):
         user = None
         password = None
         cert_file = None
-        secure_monitoring_stack = bool(mgr.get_module_option_ex('cephadm',
-                                                                'secure_monitoring_stack',
-                                                                'false'))
-        if secure_monitoring_stack:
-            cmd = {'prefix': f'orch {module_name} access info'}
-            ret, out, _ = mgr.mon_command(cmd)
-            if ret == 0 and out is not None:
-                access_info = json.loads(out)
-                user = access_info['user']
-                password = access_info['password']
-                certificate = access_info['certificate']
-                cert_file = tempfile.NamedTemporaryFile(delete=False)
-                cert_file.write(certificate.encode('utf-8'))
-                cert_file.flush()
+
+        orch_backend = mgr.get_module_option_ex('orchestrator', 'orchestrator')
+        if orch_backend == 'cephadm':
+            secure_monitoring_stack = mgr.get_module_option_ex('cephadm',
+                                                               'secure_monitoring_stack',
+                                                               False)
+            if secure_monitoring_stack:
+                cmd = {'prefix': f'orch {module_name} get-credentials'}
+                ret, out, _ = mgr.mon_command(cmd)
+                if ret == 0 and out is not None:
+                    access_info = json.loads(out)
+                    user = access_info['user']
+                    password = access_info['password']
+                    certificate = access_info['certificate']
+                    cert_file = tempfile.NamedTemporaryFile(delete=False)
+                    cert_file.write(certificate.encode('utf-8'))
+                    cert_file.flush()
+
         return user, password, cert_file
 
     def _get_api_url(self, host):
index 027361feea69a0e63248add83f55f9db0d391d5f..d0aef6f00528b448f5bdf54c703e8f091003ba5b 100644 (file)
@@ -49,36 +49,10 @@ def RbdTask(name, metadata, wait_for):  # noqa: N802
     return composed_decorator
 
 
-def _sort_features(features, enable=True):
-    """
-    Sorts image features according to feature dependencies:
-
-    object-map depends on exclusive-lock
-    journaling depends on exclusive-lock
-    fast-diff depends on object-map
-    """
-    ORDER = ['exclusive-lock', 'journaling', 'object-map', 'fast-diff']  # noqa: N806
-
-    def key_func(feat):
-        try:
-            return ORDER.index(feat)
-        except ValueError:
-            return id(feat)
-
-    features.sort(key=key_func, reverse=not enable)
-
-
 @APIRouter('/block/image', Scope.RBD_IMAGE)
 @APIDoc("RBD Management API", "Rbd")
 class Rbd(RESTController):
 
-    # set of image features that can be enable on existing images
-    ALLOW_ENABLE_FEATURES = {"exclusive-lock", "object-map", "fast-diff", "journaling"}
-
-    # set of image features that can be disabled on existing images
-    ALLOW_DISABLE_FEATURES = {"exclusive-lock", "object-map", "fast-diff", "deep-flatten",
-                              "journaling"}
-
     DEFAULT_LIMIT = 5
 
     def _rbd_list(self, pool_name=None, offset=0, limit=DEFAULT_LIMIT, search='', sort=''):
@@ -132,29 +106,9 @@ class Rbd(RESTController):
                data_pool=None, configuration=None, metadata=None,
                mirror_mode=None):
 
-        size = int(size)
-
-        def _create(ioctx):
-            rbd_inst = rbd.RBD()
-
-            # Set order
-            l_order = None
-            if obj_size and obj_size > 0:
-                l_order = int(round(math.log(float(obj_size), 2)))
-
-            # Set features
-            feature_bitmask = format_features(features)
-
-            rbd_inst.create(ioctx, name, size, order=l_order, old_format=False,
-                            features=feature_bitmask, stripe_unit=stripe_unit,
-                            stripe_count=stripe_count, data_pool=data_pool)
-            RbdConfiguration(pool_ioctx=ioctx, namespace=namespace,
-                             image_name=name).set_configuration(configuration)
-            if metadata:
-                with rbd.Image(ioctx, name) as image:
-                    RbdImageMetadataService(image).set_metadata(metadata)
-
-        rbd_call(pool_name, namespace, _create)
+        RbdService.create(name, pool_name, size, namespace,
+                          obj_size, features, stripe_unit, stripe_count,
+                          data_pool, configuration, metadata)
 
         if mirror_mode:
             RbdMirroringService.enable_image(name, pool_name, namespace,
@@ -166,86 +120,17 @@ class Rbd(RESTController):
 
     @RbdTask('delete', ['{image_spec}'], 2.0)
     def delete(self, image_spec):
-        pool_name, namespace, image_name = parse_image_spec(image_spec)
-
-        image = RbdService.get_image(image_spec)
-        snapshots = image['snapshots']
-        for snap in snapshots:
-            RbdSnapshotService.remove_snapshot(image_spec, snap['name'], snap['is_protected'])
-
-        rbd_inst = rbd.RBD()
-        return rbd_call(pool_name, namespace, rbd_inst.remove, image_name)
+        return RbdService.delete(image_spec)
 
     @RbdTask('edit', ['{image_spec}', '{name}'], 4.0)
     def set(self, image_spec, name=None, size=None, features=None,
             configuration=None, metadata=None, enable_mirror=None, primary=None,
             force=False, resync=False, mirror_mode=None, schedule_interval='',
             remove_scheduling=False):
-
-        pool_name, namespace, image_name = parse_image_spec(image_spec)
-
-        def _edit(ioctx, image):
-            rbd_inst = rbd.RBD()
-            # check rename image
-            if name and name != image_name:
-                rbd_inst.rename(ioctx, image_name, name)
-
-            # check resize
-            if size and size != image.size():
-                image.resize(size)
-
-            mirror_image_info = image.mirror_image_get_info()
-            if enable_mirror and mirror_image_info['state'] == rbd.RBD_MIRROR_IMAGE_DISABLED:
-                RbdMirroringService.enable_image(
-                    image_name, pool_name, namespace,
-                    MIRROR_IMAGE_MODE[mirror_mode])
-            elif (enable_mirror is False
-                  and mirror_image_info['state'] == rbd.RBD_MIRROR_IMAGE_ENABLED):
-                RbdMirroringService.disable_image(
-                    image_name, pool_name, namespace)
-
-            # check enable/disable features
-            if features is not None:
-                curr_features = format_bitmask(image.features())
-                # check disabled features
-                _sort_features(curr_features, enable=False)
-                for feature in curr_features:
-                    if (feature not in features
-                       and feature in self.ALLOW_DISABLE_FEATURES
-                       and feature in format_bitmask(image.features())):
-                        f_bitmask = format_features([feature])
-                        image.update_features(f_bitmask, False)
-                # check enabled features
-                _sort_features(features)
-                for feature in features:
-                    if (feature not in curr_features
-                       and feature in self.ALLOW_ENABLE_FEATURES
-                       and feature not in format_bitmask(image.features())):
-                        f_bitmask = format_features([feature])
-                        image.update_features(f_bitmask, True)
-
-            RbdConfiguration(pool_ioctx=ioctx, image_name=image_name).set_configuration(
-                configuration)
-            if metadata:
-                RbdImageMetadataService(image).set_metadata(metadata)
-
-            if primary and not mirror_image_info['primary']:
-                RbdMirroringService.promote_image(
-                    image_name, pool_name, namespace, force)
-            elif primary is False and mirror_image_info['primary']:
-                RbdMirroringService.demote_image(
-                    image_name, pool_name, namespace)
-
-            if resync:
-                RbdMirroringService.resync_image(image_name, pool_name, namespace)
-
-            if schedule_interval:
-                RbdMirroringService.snapshot_schedule_add(image_spec, schedule_interval)
-
-            if remove_scheduling:
-                RbdMirroringService.snapshot_schedule_remove(image_spec)
-
-        return rbd_image_call(pool_name, namespace, image_name, _edit)
+        return RbdService.set(image_spec, name, size, features,
+                              configuration, metadata, enable_mirror, primary,
+                              force, resync, mirror_mode, schedule_interval,
+                              remove_scheduling)
 
     @RbdTask('copy',
              {'src_image_spec': '{image_spec}',
@@ -258,44 +143,17 @@ class Rbd(RESTController):
              snapshot_name=None, obj_size=None, features=None,
              stripe_unit=None, stripe_count=None, data_pool=None,
              configuration=None, metadata=None):
-        pool_name, namespace, image_name = parse_image_spec(image_spec)
-
-        def _src_copy(s_ioctx, s_img):
-            def _copy(d_ioctx):
-                # Set order
-                l_order = None
-                if obj_size and obj_size > 0:
-                    l_order = int(round(math.log(float(obj_size), 2)))
-
-                # Set features
-                feature_bitmask = format_features(features)
-
-                if snapshot_name:
-                    s_img.set_snap(snapshot_name)
-
-                s_img.copy(d_ioctx, dest_image_name, feature_bitmask, l_order,
-                           stripe_unit, stripe_count, data_pool)
-                RbdConfiguration(pool_ioctx=d_ioctx, image_name=dest_image_name).set_configuration(
-                    configuration)
-                if metadata:
-                    with rbd.Image(d_ioctx, dest_image_name) as image:
-                        RbdImageMetadataService(image).set_metadata(metadata)
-
-            return rbd_call(dest_pool_name, dest_namespace, _copy)
-
-        return rbd_image_call(pool_name, namespace, image_name, _src_copy)
+        return RbdService.copy(image_spec, dest_pool_name, dest_namespace, dest_image_name,
+                               snapshot_name, obj_size, features,
+                               stripe_unit, stripe_count, data_pool,
+                               configuration, metadata)
 
     @RbdTask('flatten', ['{image_spec}'], 2.0)
     @RESTController.Resource('POST')
     @UpdatePermission
     @allow_empty_body
     def flatten(self, image_spec):
-
-        def _flatten(ioctx, image):
-            image.flatten()
-
-        pool_name, namespace, image_name = parse_image_spec(image_spec)
-        return rbd_image_call(pool_name, namespace, image_name, _flatten)
+        return RbdService.flatten(image_spec)
 
     @RESTController.Collection('GET')
     def default_features(self):
@@ -325,9 +183,7 @@ class Rbd(RESTController):
         Images, even ones actively in-use by clones,
         can be moved to the trash and deleted at a later time.
         """
-        pool_name, namespace, image_name = parse_image_spec(image_spec)
-        rbd_inst = rbd.RBD()
-        return rbd_call(pool_name, namespace, rbd_inst.trash_move, image_name, delay)
+        return RbdService.move_image_to_trash(image_spec, delay)
 
 
 @UIRouter('/block/rbd')
index 2ee53fc1ad46efe5a8479688dd3ba00f2bb41eb9..1e10530777f8ea6542c87e603ffed90a48c98e0b 100644 (file)
@@ -238,6 +238,17 @@ class ReplayingData(NamedTuple):
     entries_behind_primary: Optional[int] = None
 
 
+def _get_mirror_mode(ioctx, image_name):
+    with rbd.Image(ioctx, image_name) as img:
+        mirror_mode = img.mirror_image_get_mode()
+        mirror_mode_str = 'Disabled'
+        if mirror_mode == rbd.RBD_MIRROR_IMAGE_MODE_JOURNAL:
+            mirror_mode_str = 'journal'
+        elif mirror_mode == rbd.RBD_MIRROR_IMAGE_MODE_SNAPSHOT:
+            mirror_mode_str = 'snapshot'
+        return mirror_mode_str
+
+
 @ViewCache()
 @no_type_check
 def _get_pool_datum(pool_name):
@@ -300,7 +311,8 @@ def _get_pool_datum(pool_name):
         data['mirror_images'] = sorted([
             dict({
                 'name': image['name'],
-                'description': image['description']
+                'description': image['description'],
+                'mirror_mode': _get_mirror_mode(ioctx, image['name'])
             }, **mirror_state['down' if not image['up'] else image['state']])
             for image in mirror_image_status
         ], key=lambda k: k['name'])
@@ -363,7 +375,8 @@ def _get_content_data():  # pylint: disable=R0914
                 'pool_name': pool_name,
                 'name': mirror_image['name'],
                 'state_color': mirror_image['state_color'],
-                'state': mirror_image['state']
+                'state': mirror_image['state'],
+                'mirror_mode': mirror_image['mirror_mode']
             }
 
             if mirror_image['health'] == 'ok':
index b29e424206e3ccb6f3dca4bff9b5c90b82a23322..9ccf4b36b2b119785efdd3258c45988fb6ced7a9 100644 (file)
@@ -2,20 +2,22 @@
 
 import json
 import logging
+import re
 from typing import Any, Dict, List, NamedTuple, Optional, Union
 
 import cherrypy
 
+from .. import mgr
 from ..exceptions import DashboardException
 from ..rest_client import RequestException
 from ..security import Permission, Scope
 from ..services.auth import AuthManager, JwtManager
 from ..services.ceph_service import CephService
-from ..services.rgw_client import NoRgwDaemonsException, RgwClient
+from ..services.rgw_client import NoRgwDaemonsException, RgwClient, RgwMultisite
 from ..tools import json_str_to_object, str_to_bool
-from . import APIDoc, APIRouter, BaseController, CRUDCollectionMethod, \
-    CRUDEndpoint, Endpoint, EndpointDoc, ReadPermission, RESTController, \
-    UIRouter, allow_empty_body
+from . import APIDoc, APIRouter, BaseController, CreatePermission, \
+    CRUDCollectionMethod, CRUDEndpoint, Endpoint, EndpointDoc, ReadPermission, \
+    RESTController, UIRouter, UpdatePermission, allow_empty_body
 from ._crud import CRUDMeta, Form, FormField, FormTaskInfo, Icon, MethodType, \
     TableAction, Validator, VerticalContainer
 from ._version import APIVersion
@@ -79,6 +81,43 @@ class Rgw(BaseController):
         return status
 
 
+@UIRouter('/rgw/multisite')
+class RgwMultisiteStatus(RESTController):
+    @Endpoint()
+    @ReadPermission
+    # pylint: disable=R0801
+    def status(self):
+        status = {'available': True, 'message': None}
+        multisite_instance = RgwMultisite()
+        is_multisite_configured = multisite_instance.get_multisite_status()
+        if not is_multisite_configured:
+            status['available'] = False
+            status['message'] = 'Multi-site provides disaster recovery and may also \
+                serve as a foundation for content delivery networks'  # type: ignore
+        return status
+
+    @RESTController.Collection(method='PUT', path='/migrate')
+    @allow_empty_body
+    # pylint: disable=W0102,W0613
+    def migrate(self, daemon_name=None, realm_name=None, zonegroup_name=None, zone_name=None,
+                zonegroup_endpoints=None, zone_endpoints=None, access_key=None,
+                secret_key=None):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.migrate_to_multisite(realm_name, zonegroup_name,
+                                                         zone_name, zonegroup_endpoints,
+                                                         zone_endpoints, access_key,
+                                                         secret_key)
+        return result
+
+    @RESTController.Collection(method='GET', path='/sync_status')
+    @allow_empty_body
+    # pylint: disable=W0102,W0613
+    def get_sync_status(self):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.get_multisite_sync_status()
+        return result
+
+
 @APIRouter('/rgw/daemon', Scope.RGW)
 @APIDoc("RGW Daemon Management API", "RgwDaemon")
 class RgwDaemon(RESTController):
@@ -105,7 +144,7 @@ class RgwDaemon(RESTController):
                     'zonegroup_name': metadata['zonegroup_name'],
                     'zone_name': metadata['zone_name'],
                     'default': instance.daemon.name == metadata['id'],
-                    'port': int(metadata['frontend_config#0'].split('port=')[1])
+                    'port': int(re.findall(r'port=(\d+)', metadata['frontend_config#0'])[0])
                 }
 
                 daemons.append(daemon)
@@ -138,6 +177,12 @@ class RgwDaemon(RESTController):
         daemon['rgw_status'] = status
         return daemon
 
+    @RESTController.Collection(method='PUT', path='/set_multisite_config')
+    @allow_empty_body
+    def set_multisite_config(self, realm_name=None, zonegroup_name=None,
+                             zone_name=None, daemon_name=None):
+        CephService.set_multisite_config(realm_name, zonegroup_name, zone_name, daemon_name)
+
 
 class RgwRESTController(RESTController):
     def proxy(self, daemon_name, method, path, params=None, json_response=True):
@@ -395,6 +440,38 @@ class RgwBucket(RgwRESTController):
         return CephService.get_encryption_config(daemon_name)
 
 
+@UIRouter('/rgw/bucket', Scope.RGW)
+class RgwBucketUi(RgwBucket):
+    @Endpoint('GET')
+    @ReadPermission
+    # pylint: disable=W0613
+    def buckets_and_users_count(self, daemon_name=None):
+        buckets_count = 0
+        users_count = 0
+        daemon_object = RgwDaemon()
+        daemons = json.loads(daemon_object.list())
+        unique_realms = set()
+        for daemon in daemons:
+            realm_name = daemon.get('realm_name', None)
+            if realm_name:
+                if realm_name not in unique_realms:
+                    unique_realms.add(realm_name)
+                    buckets = json.loads(RgwBucket.list(self, daemon_name=daemon['id']))
+                    users = json.loads(RgwUser.list(self, daemon_name=daemon['id']))
+                    users_count += len(users)
+                    buckets_count += len(buckets)
+            else:
+                buckets = json.loads(RgwBucket.list(self, daemon_name=daemon['id']))
+                users = json.loads(RgwUser.list(self, daemon_name=daemon['id']))
+                users_count = len(users)
+                buckets_count = len(buckets)
+
+        return {
+            'buckets_count': buckets_count,
+            'users_count': users_count
+        }
+
+
 @APIRouter('/rgw/user', Scope.RGW)
 @APIDoc("RGW User Management API", "RgwUser")
 class RgwUser(RgwRESTController):
@@ -683,3 +760,211 @@ class RgwUserRole(NamedTuple):
     CreateDate: str
     MaxSessionDuration: int
     AssumeRolePolicyDocument: str
+
+
+@APIRouter('/rgw/realm', Scope.RGW)
+class RgwRealm(RESTController):
+    @allow_empty_body
+    # pylint: disable=W0613
+    def create(self, realm_name, default):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.create_realm(realm_name, default)
+        return result
+
+    @allow_empty_body
+    # pylint: disable=W0613
+    def list(self):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.list_realms()
+        return result
+
+    @allow_empty_body
+    # pylint: disable=W0613
+    def get(self, realm_name):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.get_realm(realm_name)
+        return result
+
+    @Endpoint()
+    @ReadPermission
+    def get_all_realms_info(self):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.get_all_realms_info()
+        return result
+
+    @allow_empty_body
+    # pylint: disable=W0613
+    def set(self, realm_name: str, new_realm_name: str, default: str = ''):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.edit_realm(realm_name, new_realm_name, default)
+        return result
+
+    @Endpoint()
+    @ReadPermission
+    def get_realm_tokens(self):
+        try:
+            result = CephService.get_realm_tokens()
+            return result
+        except NoRgwDaemonsException as e:
+            raise DashboardException(e, http_status_code=404, component='rgw')
+
+    @Endpoint(method='POST')
+    @UpdatePermission
+    @allow_empty_body
+    # pylint: disable=W0613
+    def import_realm_token(self, realm_token, zone_name, port, placement_spec):
+        try:
+            multisite_instance = RgwMultisite()
+            result = CephService.import_realm_token(realm_token, zone_name, port, placement_spec)
+            multisite_instance.update_period()
+            return result
+        except NoRgwDaemonsException as e:
+            raise DashboardException(e, http_status_code=404, component='rgw')
+
+    def delete(self, realm_name):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.delete_realm(realm_name)
+        return result
+
+
+@APIRouter('/rgw/zonegroup', Scope.RGW)
+class RgwZonegroup(RESTController):
+    @allow_empty_body
+    # pylint: disable=W0613
+    def create(self, realm_name, zonegroup_name, default=None, master=None,
+               zonegroup_endpoints=None):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.create_zonegroup(realm_name, zonegroup_name, default,
+                                                     master, zonegroup_endpoints)
+        return result
+
+    @allow_empty_body
+    # pylint: disable=W0613
+    def list(self):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.list_zonegroups()
+        return result
+
+    @allow_empty_body
+    # pylint: disable=W0613
+    def get(self, zonegroup_name):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.get_zonegroup(zonegroup_name)
+        return result
+
+    @Endpoint()
+    @ReadPermission
+    def get_all_zonegroups_info(self):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.get_all_zonegroups_info()
+        return result
+
+    def delete(self, zonegroup_name, delete_pools, pools: Optional[List[str]] = None):
+        if pools is None:
+            pools = []
+        try:
+            multisite_instance = RgwMultisite()
+            result = multisite_instance.delete_zonegroup(zonegroup_name, delete_pools, pools)
+            return result
+        except NoRgwDaemonsException as e:
+            raise DashboardException(e, http_status_code=404, component='rgw')
+
+    @allow_empty_body
+    # pylint: disable=W0613,W0102
+    def set(self, zonegroup_name: str, realm_name: str, new_zonegroup_name: str,
+            default: str = '', master: str = '', zonegroup_endpoints: str = '',
+            add_zones: List[str] = [], remove_zones: List[str] = [],
+            placement_targets: List[Dict[str, str]] = []):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.edit_zonegroup(realm_name, zonegroup_name, new_zonegroup_name,
+                                                   default, master, zonegroup_endpoints, add_zones,
+                                                   remove_zones, placement_targets)
+        return result
+
+
+@APIRouter('/rgw/zone', Scope.RGW)
+class RgwZone(RESTController):
+    @allow_empty_body
+    # pylint: disable=W0613
+    def create(self, zone_name, zonegroup_name=None, default=False, master=False,
+               zone_endpoints=None, access_key=None, secret_key=None):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.create_zone(zone_name, zonegroup_name, default,
+                                                master, zone_endpoints, access_key,
+                                                secret_key)
+        return result
+
+    @allow_empty_body
+    # pylint: disable=W0613
+    def list(self):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.list_zones()
+        return result
+
+    @allow_empty_body
+    # pylint: disable=W0613
+    def get(self, zone_name):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.get_zone(zone_name)
+        return result
+
+    @Endpoint()
+    @ReadPermission
+    def get_all_zones_info(self):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.get_all_zones_info()
+        return result
+
+    def delete(self, zone_name, delete_pools, pools: Optional[List[str]] = None,
+               zonegroup_name=None):
+        if pools is None:
+            pools = []
+        if zonegroup_name is None:
+            zonegroup_name = ''
+        try:
+            multisite_instance = RgwMultisite()
+            result = multisite_instance.delete_zone(zone_name, delete_pools, pools, zonegroup_name)
+            return result
+        except NoRgwDaemonsException as e:
+            raise DashboardException(e, http_status_code=404, component='rgw')
+
+    @allow_empty_body
+    # pylint: disable=W0613,W0102
+    def set(self, zone_name: str, new_zone_name: str, zonegroup_name: str, default: str = '',
+            master: str = '', zone_endpoints: str = '', access_key: str = '', secret_key: str = '',
+            placement_target: str = '', data_pool: str = '', index_pool: str = '',
+            data_extra_pool: str = '', storage_class: str = '', data_pool_class: str = '',
+            compression: str = ''):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.edit_zone(zone_name, new_zone_name, zonegroup_name, default,
+                                              master, zone_endpoints, access_key, secret_key,
+                                              placement_target, data_pool, index_pool,
+                                              data_extra_pool, storage_class, data_pool_class,
+                                              compression)
+        return result
+
+    @Endpoint()
+    @ReadPermission
+    def get_pool_names(self):
+        pool_names = []
+        ret, out, _ = mgr.check_mon_command({
+            'prefix': 'osd lspools',
+            'format': 'json',
+        })
+        if ret == 0 and out is not None:
+            pool_names = json.loads(out)
+        return pool_names
+
+    @Endpoint('PUT')
+    @CreatePermission
+    def create_system_user(self, userName: str, zoneName: str):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.create_system_user(userName, zoneName)
+        return result
+
+    @Endpoint()
+    @ReadPermission
+    def get_user_list(self, zoneName=None):
+        multisite_instance = RgwMultisite()
+        result = multisite_instance.get_user_list(zoneName)
+        return result
index ce9882e34e111cb943e80b0f3113a4b0ba9654c7..4fc3ee7e90dafb2d3566f0f6448c104abeb2feb6 100644 (file)
@@ -1,2 +1,3 @@
 audit=false
 save-exact=true
+legacy-peer-deps=true
index f34cde6fb6177ee4c8bbb534866d066da761295b..2527ef23e85e5cd2d83e38ef475e23a96fd11431 100644 (file)
@@ -40,6 +40,7 @@ function(add_npm_options)
       npm config set ${key} ${value} --userconfig ${NC_NODEENV_DIR}/.npmrc &&
       deactivate)
   endforeach()
+  set(npm_config_python ${MGR_PYTHON_EXECUTABLE})
   add_custom_target(${NC_TARGET}
     ${commands}
     DEPENDS ${NC_NODEENV_DIR}/bin/npm
@@ -63,7 +64,7 @@ else(WITH_SYSTEM_NPM)
     OUTPUT "${mgr-dashboard-nodeenv-dir}/bin/npm"
     COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir}
     COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv
-    COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=14.15.1
+    COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=18.17.0
     COMMAND mkdir ${mgr-dashboard-nodeenv-dir}/.npm
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
     COMMENT "dashboard nodeenv is being installed")
@@ -73,7 +74,6 @@ else(WITH_SYSTEM_NPM)
   add_npm_options(
     NODEENV_DIR ${mgr-dashboard-nodeenv-dir}
     TARGET mgr-dashboard-nodeenv
-    OPTION python=${MGR_PYTHON_EXECUTABLE}
     OPTION cache=${mgr-dashboard-nodeenv-dir}/.npm
     ${npm_registry_opts})
   add_custom_target(mgr-dashboard-frontend-deps
index 4bfab2baf215bad2b54307bafc51da895d113d19..e1cb4c29fc32414ef020c4fc05f064d9b8f2744b 100644 (file)
       "cli": {}
     }
   },
-  "defaultProject": "ceph-dashboard",
   "schematics": {
     "@schematics/angular:component": {
       "prefix": "cd",
   },
   "cli": {
     "analytics": false,
-    "defaultCollection": "@angular-eslint/schematics"
+    "schematicCollections": [
+      "@angular-eslint/schematics"
+    ]
   }
 }
index 3948ea8dbb53d61c048df84608b884e6c42109fc..fa334988305b6448683810b39a1debbbaa8c4e37 100644 (file)
@@ -1,4 +1,4 @@
-import { defineConfig } from 'cypress'
+import { defineConfig } from 'cypress';
 
 export default defineConfig({
   video: true,
@@ -9,18 +9,22 @@ export default defineConfig({
   viewportWidth: 1920,
   projectId: 'k7ab29',
   reporter: 'cypress-multi-reporters',
+
   reporterOptions: {
     reporterEnabled: 'spec, mocha-junit-reporter',
     mochaJunitReporterReporterOptions: {
-      mochaFile: 'cypress/reports/results-[hash].xml',
-    },
+      mochaFile: 'cypress/reports/results-[hash].xml'
+    }
   },
+
   retries: 1,
+
   env: {
     LOGIN_USER: 'admin',
     LOGIN_PWD: 'admin',
-    CEPH2_URL: 'https://localhost:4202/',
+    CEPH2_URL: 'https://localhost:4202/'
   },
+
   chromeWebSecurity: false,
   eyesIsDisabled: false,
   eyesFailCypressOnDiff: true,
@@ -28,15 +32,24 @@ export default defineConfig({
   eyesLegacyHooks: true,
   eyesTestConcurrency: 5,
   eyesPort: 35321,
+
   e2e: {
     // We've imported your old cypress plugins here.
     // You may want to clean this up later by importing these.
     setupNodeEvents(on, config) {
-      return require('./cypress/plugins/index.js')(on, config)
+      return require('./cypress/plugins/index.js')(on, config);
     },
     baseUrl: 'https://localhost:4200/',
     excludeSpecPattern: ['*.po.ts', '**/orchestrator/**'],
     experimentalSessionAndOrigin: true,
-    specPattern: 'cypress/e2e/**/*-spec.{js,jsx,ts,tsx}',
+    specPattern: 'cypress/e2e/**/*-spec.{js,jsx,ts,tsx,feature}'
   },
-})
+
+  component: {
+    devServer: {
+      framework: 'angular',
+      bundler: 'webpack'
+    },
+    specPattern: '**/*.cy.ts'
+  }
+});
index 59f311d645ace668f26fd623f875687e0f4bf266..f8f21ac22e095a3957ed6856edb8660a86939d21 100644 (file)
@@ -162,6 +162,7 @@ export class HostsPageHelper extends PageHelper {
   drain(hostname: string) {
     this.getTableCell(this.columnIndex.hostname, hostname, true).click();
     this.clickActionButton('start-drain');
+    cy.wait(1000);
     this.checkLabelExists(hostname, ['_no_schedule'], true);
 
     this.clickTab('cd-host-details', hostname, 'Daemons');
index 7efd8a6528a3ea32360196796ced12ac61e32c98..5c34eee5ceef01cd928a19a950f0b4a182c794cd 100644 (file)
@@ -16,18 +16,21 @@ export class LogsPageHelper extends PageHelper {
     cy.contains('.nav-link', 'Audit Logs').click();
 
     // Enter an earliest time so that no old messages with the same pool name show up
-    cy.get('.ngb-tp-input').its(0).clear();
+    cy.get('.ngb-tp-input')
+      .its(0)
+      .then((input) => {
+        cy.wrap(input).clear();
 
-    if (hour < 10) {
-      cy.get('.ngb-tp-input').its(0).type('0');
-    }
-    cy.get('.ngb-tp-input').its(0).type(`${hour}`);
+        if (hour < 10) cy.wrap(input).type(`${hour}`);
+      });
 
-    cy.get('.ngb-tp-input').its(1).clear();
-    if (minute < 10) {
-      cy.get('.ngb-tp-input').its(1).type('0');
-    }
-    cy.get('.ngb-tp-input').its(1).type(`${minute}`);
+    cy.get('.ngb-tp-input')
+      .its(1)
+      .then((input) => {
+        cy.wrap(input).clear();
+
+        if (minute < 10) cy.wrap(input).type(`${minute}`);
+      });
 
     // Enter the pool name into the filter box
     cy.get('input.form-control.ng-valid').first().clear().type(poolname);
@@ -46,17 +49,21 @@ export class LogsPageHelper extends PageHelper {
     cy.contains('.nav-link', 'Audit Logs').click();
 
     // Enter an earliest time so that no old messages with the same config name show up
-    cy.get('.ngb-tp-input').its(0).clear();
-    if (hour < 10) {
-      cy.get('.ngb-tp-input').its(0).type('0');
-    }
-    cy.get('.ngb-tp-input').its(0).type(`${hour}`);
-
-    cy.get('.ngb-tp-input').its(1).clear();
-    if (minute < 10) {
-      cy.get('.ngb-tp-input').its(1).type('0');
-    }
-    cy.get('.ngb-tp-input').its(1).type(`${minute}`);
+    cy.get('.ngb-tp-input')
+      .its(0)
+      .then((input) => {
+        cy.wrap(input).clear();
+
+        if (hour < 10) cy.wrap(input).type(`${hour}`);
+      });
+
+    cy.get('.ngb-tp-input')
+      .its(1)
+      .then((input) => {
+        cy.wrap(input).clear();
+
+        if (minute < 10) cy.wrap(input).type(`${minute}`);
+      });
 
     // Enter the config name into the filter box
     cy.get('input.form-control.ng-valid').first().clear().type(configname);
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/01-global.feature.po.ts b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/01-global.feature.po.ts
deleted file mode 100644 (file)
index 4ddd11f..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-import { And, Given, Then, When } from 'cypress-cucumber-preprocessor/steps';
-
-import { UrlsCollection } from './urls.po';
-
-const urlsCollection = new UrlsCollection();
-
-Given('I am logged in', () => {
-  cy.login();
-});
-
-Given('I am on the {string} page', (page: string) => {
-  cy.visit(urlsCollection.pages[page].url);
-  cy.get(urlsCollection.pages[page].id).should('exist');
-});
-
-Then('I should be on the {string} page', (page: string) => {
-  cy.get(urlsCollection.pages[page].id).should('exist');
-});
-
-And('I should see a button to {string}', (button: string) => {
-  cy.get(`[aria-label="${button}"]`).should('be.visible');
-});
-
-When('I click on {string} button', (button: string) => {
-  cy.get(`[aria-label="${button}"]`).first().click();
-});
-
-// When you are clicking on an action in the table actions dropdown button
-When('I click on {string} button from the table actions', (button: string) => {
-  cy.get('.table-actions button.dropdown-toggle').first().click();
-  cy.get(`[aria-label="${button}"]`).first().click();
-});
-
-And('select options {string}', (labels: string) => {
-  if (labels) {
-    cy.get('a[data-testid=select-menu-edit]').click();
-    for (const label of labels.split(', ')) {
-      cy.get('.popover-body div.select-menu-item-content').contains(label).click();
-    }
-  }
-});
-
-And('{string} option {string}', (action: string, labels: string) => {
-  if (labels) {
-    if (action === 'add') {
-      cy.get('cd-modal').find('.select-menu-edit').click();
-      for (const label of labels.split(', ')) {
-        cy.get('.popover-body input').type(`${label}{enter}`);
-      }
-    } else {
-      for (const label of labels.split(', ')) {
-        cy.contains('cd-modal .badge', new RegExp(`^${label}$`))
-          .find('.badge-remove')
-          .click();
-      }
-    }
-  }
-});
-
-/**
- * Fills in the given field using the value provided
- * @param field ID of the field that needs to be filled out.
- * @param value Value that should be filled in the field.
- */
-And('enter {string} {string}', (field: string, value: string) => {
-  cy.get('cd-modal').within(() => {
-    cy.get(`input[id=${field}]`).type(value);
-  });
-});
-
-And('I click on submit button', () => {
-  cy.get('[data-cy=submitBtn]').click();
-});
-
-/**
- * Selects any row on the datatable if it matches the given name
- */
-When('I select a row {string}', (row: string) => {
-  cy.get('cd-table .search input').first().clear().type(row);
-  cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).click();
-});
-
-Then('I should see the modal', () => {
-  cy.get('cd-modal').should('exist');
-});
-
-Then('I should not see the modal', () => {
-  cy.get('cd-modal').should('not.exist');
-});
-
-/**
- * Some modals have an additional confirmation to be provided
- * by ticking the 'Are you sure?' box.
- */
-Then('I check the tick box in modal', () => {
-  cy.get('cd-modal .custom-control-label').click();
-});
-
-And('I confirm to {string}', (action: string) => {
-  cy.contains('cd-modal button', action).click();
-  cy.get('cd-modal').should('not.exist');
-});
-
-Then('I should see an error in {string} field', (field: string) => {
-  cy.get('cd-modal').within(() => {
-    cy.get(`input[id=${field}]`).should('have.class', 'ng-invalid');
-  });
-});
-
-Then('I should see a row with {string}', (row: string) => {
-  cy.get('cd-table .search input').first().clear().type(row);
-  cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should(
-    'exist'
-  );
-});
-
-Then('I should not see a row with {string}', (row: string) => {
-  cy.get('cd-table .search input').first().clear().type(row);
-  cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should(
-    'not.exist'
-  );
-});
-
-Then('I should see rows with following entries', (entries) => {
-  entries.hashes().forEach((entry: any) => {
-    cy.get('cd-table .search input').first().clear().type(entry.hostname);
-    cy.contains(
-      `datatable-body-row datatable-body-cell .datatable-body-cell-label`,
-      entry.hostname
-    ).should('exist');
-  });
-});
-
-And('I should see row {string} have {string}', (row: string, options: string) => {
-  if (options) {
-    cy.get('cd-table .search input').first().clear().type(row);
-    for (const option of options.split(',')) {
-      cy.contains(
-        `datatable-body-row datatable-body-cell .datatable-body-cell-label .badge`,
-        option
-      ).should('exist');
-    }
-  }
-});
-
-And('I should see row {string} does not have {string}', (row: string, options: string) => {
-  if (options) {
-    cy.get('cd-table .search input').first().clear().type(row);
-    for (const option of options.split(',')) {
-      cy.contains(
-        `datatable-body-row datatable-body-cell .datatable-body-cell-label .badge`,
-        option
-      ).should('not.exist');
-    }
-  }
-});
-
-And('I go to the {string} tab', (names: string) => {
-  for (const name of names.split(', ')) {
-    cy.contains('.nav.nav-tabs a', name).click();
-  }
-});
-
-And('select {string} {string}', (selectionName: string, option: string) => {
-  cy.get(`select[name=${selectionName}]`).select(option);
-  cy.get(`select[name=${selectionName}] option:checked`).contains(option);
-});
-
-When('I expand the row {string}', (row: string) => {
-  cy.contains('.datatable-body-row', row).first().find('.tc_expand-collapse').click();
-});
-
-And('I should see row {string} have {string} on this tab', (row: string, options: string) => {
-  if (options) {
-    cy.get('cd-table').should('exist');
-    cy.get('datatable-scroller, .empty-row');
-    cy.get('.datatable-row-detail').within(() => {
-      cy.get('cd-table .search input').first().clear().type(row);
-      for (const option of options.split(',')) {
-        cy.contains(
-          `datatable-body-row datatable-body-cell .datatable-body-cell-label span`,
-          option
-        ).should('exist');
-      }
-    });
-  }
-});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/forms-helper.feature.po.ts b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/forms-helper.feature.po.ts
new file mode 100644 (file)
index 0000000..2c14af8
--- /dev/null
@@ -0,0 +1,77 @@
+import { And, Then } from 'cypress-cucumber-preprocessor/steps';
+
+/**
+ * Fills in the given field using the value provided
+ * @param field ID of the field that needs to be filled out.
+ * @param value Value that should be filled in the field.
+ */
+And('enter {string} {string}', (field: string, value: string) => {
+  cy.get('.cd-col-form').within(() => {
+    cy.get(`input[id=${field}]`).clear().type(value);
+  });
+});
+
+/**
+ * Fills in the given field using the value provided
+ * @param field ID of the field that needs to be filled out.
+ * @param value Value that should be filled in the field.
+ */
+And('enter {string} {string} in the modal', (field: string, value: string) => {
+  cy.get('cd-modal').within(() => {
+    cy.get(`input[id=${field}]`).clear().type(value);
+  });
+});
+
+And('select options {string}', (labels: string) => {
+  if (labels) {
+    cy.get('a[data-testid=select-menu-edit]').click();
+    for (const label of labels.split(', ')) {
+      cy.get('.popover-body div.select-menu-item-content').contains(label).click();
+    }
+  }
+});
+
+And('{string} option {string}', (action: string, labels: string) => {
+  if (labels) {
+    if (action === 'add') {
+      cy.get('cd-modal').find('.select-menu-edit').click();
+      for (const label of labels.split(', ')) {
+        cy.get('.popover-body input').type(`${label}{enter}`);
+      }
+    } else {
+      for (const label of labels.split(', ')) {
+        cy.contains('cd-modal .badge', new RegExp(`^${label}$`))
+          .find('.badge-remove')
+          .click();
+      }
+    }
+  }
+});
+
+And('I click on submit button', () => {
+  cy.get('[data-cy=submitBtn]').click();
+});
+
+/**
+ * Some modals have an additional confirmation to be provided
+ * by ticking the 'Are you sure?' box.
+ */
+Then('I check the tick box in modal', () => {
+  cy.get('cd-modal input#confirmation').click();
+});
+
+And('I confirm to {string}', (action: string) => {
+  cy.contains('cd-modal button', action).click();
+  cy.get('cd-modal').should('not.exist');
+});
+
+Then('I should see an error in {string} field', (field: string) => {
+  cy.get('cd-modal').within(() => {
+    cy.get(`input[id=${field}]`).should('have.class', 'ng-invalid');
+  });
+});
+
+And('select {string} {string}', (selectionName: string, option: string) => {
+  cy.get(`select[name=${selectionName}]`).select(option);
+  cy.get(`select[name=${selectionName}] option:checked`).contains(option);
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/global.feature.po.ts b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/global.feature.po.ts
new file mode 100644 (file)
index 0000000..c6132ae
--- /dev/null
@@ -0,0 +1,40 @@
+import { And, Given, Then, When } from 'cypress-cucumber-preprocessor/steps';
+
+import { UrlsCollection } from './urls.po';
+
+const urlsCollection = new UrlsCollection();
+
+Given('I am logged in', () => {
+  cy.login();
+});
+
+Given('I am on the {string} page', (page: string) => {
+  cy.visit(urlsCollection.pages[page].url);
+  cy.get(urlsCollection.pages[page].id).should('exist');
+});
+
+Then('I should be on the {string} page', (page: string) => {
+  cy.get(urlsCollection.pages[page].id).should('exist');
+});
+
+And('I should see a button to {string}', (button: string) => {
+  cy.get(`[aria-label="${button}"]`).should('be.visible');
+});
+
+When('I click on {string} button', (button: string) => {
+  cy.get(`[aria-label="${button}"]`).first().click();
+});
+
+Then('I should see the modal', () => {
+  cy.get('cd-modal').should('exist');
+});
+
+Then('I should not see the modal', () => {
+  cy.get('cd-modal').should('not.exist');
+});
+
+And('I go to the {string} tab', (names: string) => {
+  for (const name of names.split(', ')) {
+    cy.contains('.nav.nav-tabs a', name).click();
+  }
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/table-helper.feature.po.ts b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/common/table-helper.feature.po.ts
new file mode 100644 (file)
index 0000000..82a2c7c
--- /dev/null
@@ -0,0 +1,135 @@
+import { And, Then, When } from 'cypress-cucumber-preprocessor/steps';
+
+// When you are clicking on an action in the table actions dropdown button
+When('I click on {string} button from the table actions', (button: string) => {
+  cy.get('.table-actions button.dropdown-toggle').first().click();
+  cy.get(`[aria-label="${button}"]`).first().click();
+});
+
+// When you are clicking on an action inside the expanded table row
+When('I click on {string} button from the expanded row', (button: string) => {
+  cy.get('.datatable-row-detail').within(() => {
+    cy.get('.table-actions button.dropdown-toggle').first().click();
+    cy.get(`[aria-label="${button}"]`).first().click();
+  });
+});
+
+When('I click on {string} button from the table actions in the expanded row', (button: string) => {
+  cy.get('.datatable-row-detail').within(() => {
+    cy.get('.table-actions button.dropdown-toggle').first().click();
+    cy.get(`[aria-label="${button}"]`).first().click();
+  });
+});
+
+When('I expand the row {string}', (row: string) => {
+  cy.contains('.datatable-body-row', row).first().find('.tc_expand-collapse').click();
+});
+
+/**
+ * Selects any row on the datatable if it matches the given name
+ */
+When('I select a row {string}', (row: string) => {
+  cy.get('cd-table .search input').first().clear().type(row);
+  cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).click();
+});
+
+When('I select a row {string} in the expanded row', (row: string) => {
+  cy.get('.datatable-row-detail').within(() => {
+    cy.get('cd-table .search input').first().clear().type(row);
+    cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).click();
+  });
+});
+
+Then('I should see a row with {string}', (row: string) => {
+  cy.get('cd-table .search input').first().clear().type(row);
+  cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should(
+    'exist'
+  );
+});
+
+Then('I should not see a row with {string}', (row: string) => {
+  cy.get('cd-table .search input').first().clear().type(row);
+  cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should(
+    'not.exist'
+  );
+});
+
+Then('I should not see a row with {string} in the expanded row', (row: string) => {
+  cy.get('.datatable-row-detail').within(() => {
+    cy.get('cd-table .search input').first().clear().type(row);
+    cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should(
+      'not.exist'
+    );
+  });
+});
+
+Then('I should see rows with following entries', (entries) => {
+  entries.hashes().forEach((entry: any) => {
+    cy.get('cd-table .search input').first().clear().type(entry.hostname);
+    cy.contains(
+      `datatable-body-row datatable-body-cell .datatable-body-cell-label`,
+      entry.hostname
+    ).should('exist');
+  });
+});
+
+And('I should see row {string} have {string}', (row: string, options: string) => {
+  if (options) {
+    cy.get('cd-table .search input').first().clear().type(row);
+    for (const option of options.split(',')) {
+      cy.contains(
+        `datatable-body-row datatable-body-cell .datatable-body-cell-label .badge`,
+        option
+      ).should('exist');
+    }
+  }
+});
+
+And('I should see row {string} of the expanded row to have a usage bar', (row: string) => {
+  cy.get('.datatable-row-detail').within(() => {
+    cy.get('cd-table .search input').first().clear().type(row);
+    cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should(
+      'exist'
+    );
+    cy.get('.datatable-body-row .datatable-body-cell .datatable-body-cell-label .progress').should(
+      'exist'
+    );
+  });
+});
+
+And('I should see row {string} does not have {string}', (row: string, options: string) => {
+  if (options) {
+    cy.get('cd-table .search input').first().clear().type(row);
+    for (const option of options.split(',')) {
+      cy.contains(
+        `datatable-body-row datatable-body-cell .datatable-body-cell-label .badge`,
+        option
+      ).should('not.exist');
+    }
+  }
+});
+
+Then('I should see a row with {string} in the expanded row', (row: string) => {
+  cy.get('.datatable-row-detail').within(() => {
+    cy.get('cd-table .search input').first().clear().type(row);
+    cy.contains(`datatable-body-row datatable-body-cell .datatable-body-cell-label`, row).should(
+      'exist'
+    );
+  });
+});
+
+And('I should see row {string} have {string} on this tab', (row: string, options: string) => {
+  if (options) {
+    cy.get('cd-table').should('exist');
+    cy.get('datatable-scroller, .empty-row');
+    cy.get('.datatable-row-detail').within(() => {
+      cy.get('cd-table .search input').first().clear().type(row);
+      for (const option of options.split(',')) {
+        cy.contains(
+          `datatable-body-row datatable-body-cell .datatable-body-cell-label span`,
+          option
+        ).should('exist');
+      }
+    });
+  }
+});
index 28635508571504e32b9da870a70040bdff8f1029..6f7316f98f59e9a1c8a44c7d98ed88d40b7bb787 100644 (file)
@@ -39,6 +39,10 @@ export class UrlsCollection extends PageHelper {
     logs: { url: '#/logs', id: 'cd-logs' },
 
     // RGW Daemons
-    'rgw daemons': { url: '#/rgw/daemon', id: 'cd-rgw-daemon-list' }
+    'rgw daemons': { url: '#/rgw/daemon', id: 'cd-rgw-daemon-list' },
+
+    // CephFS
+    cephfs: { url: '#/cephfs', id: 'cd-cephfs-list' },
+    'create cephfs': { url: '#/cephfs/create', id: 'cd-cephfs-form' }
   };
 }
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.e2e-spec.feature b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.e2e-spec.feature
new file mode 100644 (file)
index 0000000..2c08fb5
--- /dev/null
@@ -0,0 +1,30 @@
+Feature: CephFS Management
+
+    Goal: To test out the CephFS management features
+
+    Background: Login
+        Given I am logged in
+
+    Scenario: Create a CephFS Volume
+        Given I am on the "cephfs" page
+        And I click on "Create" button
+        And enter "name" "test_cephfs"
+        And I click on "Create File System" button
+        Then I should see a row with "test_cephfs"
+
+    Scenario: Edit CephFS Volume
+        Given I am on the "cephfs" page
+        And I select a row "test_cephfs"
+        And I click on "Edit" button
+        And enter "name" "test_cephfs_edit"
+        And I click on "Edit File System" button
+        Then I should see a row with "test_cephfs_edit"
+
+    Scenario: Remove CephFS Volume
+        Given I am on the "cephfs" page
+        And I select a row "test_cephfs_edit"
+        And I click on "Remove" button from the table actions
+        Then I should see the modal
+        And I check the tick box in modal
+        And I click on "Remove File System" button
+        Then I should not see a row with "test_cephfs_edit"
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.e2e-spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.e2e-spec.ts
deleted file mode 100644 (file)
index de66a00..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-import { FilesystemsPageHelper } from './filesystems.po';
-
-describe('File Systems page', () => {
-  const filesystems = new FilesystemsPageHelper();
-
-  beforeEach(() => {
-    cy.login();
-    filesystems.navigateTo();
-  });
-
-  describe('breadcrumb test', () => {
-    it('should open and show breadcrumb', () => {
-      filesystems.expectBreadcrumbText('File Systems');
-    });
-  });
-});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.po.ts b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/filesystems.po.ts
deleted file mode 100644 (file)
index bd6e5b8..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-import { PageHelper } from '../page-helper.po';
-
-export class FilesystemsPageHelper extends PageHelper {
-  pages = { index: { url: '#/cephfs', id: 'cd-cephfs-list' } };
-}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/subvolume-groups.e2e-spec.feature b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/subvolume-groups.e2e-spec.feature
new file mode 100644 (file)
index 0000000..66e3f72
--- /dev/null
@@ -0,0 +1,51 @@
+Feature: CephFS Subvolume Group management
+
+    Goal: To test out the CephFS subvolume group management features
+
+    Background: Login
+        Given I am logged in
+
+    Scenario: Create a CephFS Volume
+        Given I am on the "cephfs" page
+        And I click on "Create" button
+        And enter "name" "test_cephfs"
+        And I click on "Create File System" button
+        Then I should see a row with "test_cephfs"
+
+    Scenario: Create a CephFS Subvolume Group
+        Given I am on the "cephfs" page
+        When I expand the row "test_cephfs"
+        And I go to the "Subvolume groups" tab
+        And I click on "Create" button from the expanded row
+        And enter "subvolumegroupName" "test_subvolume_group" in the modal
+        And I click on "Create Subvolume group" button
+        Then I should see a row with "test_subvolume_group" in the expanded row
+
+    Scenario: Edit a CephFS Subvolume
+        Given I am on the "cephfs" page
+        When I expand the row "test_cephfs"
+        And I go to the "Subvolume groups" tab
+        When I select a row "test_subvolume_group" in the expanded row
+        And I click on "Edit" button from the table actions in the expanded row
+        And enter "size" "1" in the modal
+        And I click on "Edit Subvolume group" button
+        Then I should see row "test_subvolume_group" of the expanded row to have a usage bar
+
+    Scenario: Remove a CephFS Subvolume
+        Given I am on the "cephfs" page
+        When I expand the row "test_cephfs"
+        And I go to the "Subvolume groups" tab
+        When I select a row "test_subvolume_group" in the expanded row
+        And I click on "Remove" button from the table actions in the expanded row
+        And I check the tick box in modal
+        And I click on "Remove subvolume group" button
+        Then I should not see a row with "test_subvolume_group" in the expanded row
+
+    Scenario: Remove CephFS Volume
+        Given I am on the "cephfs" page
+        And I select a row "test_cephfs"
+        And I click on "Remove" button from the table actions
+        Then I should see the modal
+        And I check the tick box in modal
+        And I click on "Remove File System" button
+        Then I should not see a row with "test_cephfs_edit"
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/subvolumes.e2e-spec.feature b/ceph/src/pybind/mgr/dashboard/frontend/cypress/e2e/filesystems/subvolumes.e2e-spec.feature
new file mode 100644 (file)
index 0000000..ae968d4
--- /dev/null
@@ -0,0 +1,51 @@
+Feature: CephFS Subvolume management
+
+    Goal: To test out the CephFS subvolume management features
+
+    Background: Login
+        Given I am logged in
+
+    Scenario: Create a CephFS Volume
+        Given I am on the "cephfs" page
+        And I click on "Create" button
+        And enter "name" "test_cephfs"
+        And I click on "Create File System" button
+        Then I should see a row with "test_cephfs"
+
+    Scenario: Create a CephFS Subvolume
+        Given I am on the "cephfs" page
+        When I expand the row "test_cephfs"
+        And I go to the "Subvolumes" tab
+        And I click on "Create" button from the expanded row
+        And enter "subvolumeName" "test_subvolume" in the modal
+        And I click on "Create Subvolume" button
+        Then I should see a row with "test_subvolume" in the expanded row
+
+    Scenario: Edit a CephFS Subvolume
+        Given I am on the "cephfs" page
+        When I expand the row "test_cephfs"
+        And I go to the "Subvolumes" tab
+        When I select a row "test_subvolume" in the expanded row
+        And I click on "Edit" button from the table actions in the expanded row
+        And enter "size" "1" in the modal
+        And I click on "Edit Subvolume" button
+        Then I should see row "test_subvolume" of the expanded row to have a usage bar
+
+    Scenario: Remove a CephFS Subvolume
+        Given I am on the "cephfs" page
+        When I expand the row "test_cephfs"
+        And I go to the "Subvolumes" tab
+        When I select a row "test_subvolume" in the expanded row
+        And I click on "Remove" button from the table actions in the expanded row
+        And I check the tick box in modal
+        And I click on "Remove Subvolume" button
+        Then I should not see a row with "test_subvolume" in the expanded row
+
+    Scenario: Remove CephFS Volume
+        Given I am on the "cephfs" page
+        And I select a row "test_cephfs"
+        And I click on "Remove" button from the table actions
+        Then I should see the modal
+        And I check the tick box in modal
+        And I click on "Remove File System" button
+        Then I should not see a row with "test_cephfs_edit"
index 8ad2a1dafda06c419670aa141e8ad7bce28587f9..0afe0d74babce524458420d78e6b2023c5de2617 100644 (file)
@@ -57,29 +57,5 @@ describe('Hosts page', () => {
       hosts.editLabels(hostname, labels, true);
       hosts.editLabels(hostname, labels, false);
     });
-
-    it('should enter host into maintenance', function () {
-      const hostname = Cypress._.sample(this.hosts).name;
-      const serviceList = new Array();
-      this.services.forEach((service: any) => {
-        if (hostname === service.hostname) {
-          serviceList.push(service.daemon_type);
-        }
-      });
-      let enterMaintenance = true;
-      serviceList.forEach((service: string) => {
-        if (service === 'mgr' || service === 'alertmanager') {
-          enterMaintenance = false;
-        }
-      });
-      if (enterMaintenance) {
-        hosts.maintenance(hostname);
-      }
-    });
-
-    it('should exit host from maintenance', function () {
-      const hostname = Cypress._.sample(this.hosts).name;
-      hosts.maintenance(hostname, true);
-    });
   });
 });
index be49fcba099359f62a9c58ba62d00e60e7b3dd93..ddbfd31a374bbffb791eae3f0aabbbfb33f3f9aa 100644 (file)
@@ -12,7 +12,7 @@ Feature: Cluster expansion host addition
     Scenario Outline: Add hosts
         Given I am on the "Add Hosts" section
         When I click on "Add" button
-        And enter "hostname" "<hostname>"
+        And enter "hostname" "<hostname>" in the modal
         And select options "<labels>"
         And I click on "Add Host" button
         Then I should not see the modal
@@ -43,7 +43,7 @@ Feature: Cluster expansion host addition
     Scenario: Add hosts using pattern 'ceph-node-[01-02]'
         Given I am on the "Add Hosts" section
         When I click on "Add" button
-        And enter "hostname" "ceph-node-[01-02]"
+        And enter "hostname" "ceph-node-[01-02]" in the modal
         And I click on "Add Host" button
         Then I should not see the modal
         And I should see rows with following entries
@@ -55,7 +55,7 @@ Feature: Cluster expansion host addition
         Given I am on the "Add Hosts" section
         And I should see a row with "ceph-node-00"
         When I click on "Add" button
-        And enter "hostname" "ceph-node-00"
+        And enter "hostname" "ceph-node-00" in the modal
         Then I should see an error in "hostname" field
 
     Scenario Outline: Add and remove labels on host
index a27be3c6ba48767b4fb3bda9a5fb88ce10f17d53..47b0639bc917abab00e6c06da56e245a4d6a80ad 100644 (file)
@@ -10,6 +10,11 @@ export class BucketsPageHelper extends PageHelper {
 
   pages = pages;
 
+  columnIndex = {
+    name: 3,
+    owner: 4
+  };
+
   versioningStateEnabled = 'Enabled';
   versioningStateSuspended = 'Suspended';
 
@@ -73,18 +78,22 @@ export class BucketsPageHelper extends PageHelper {
       cy.get('input[id=versioning]').should('be.disabled');
       cy.contains('button', 'Edit Bucket').click();
 
+      this.getTableCell(this.columnIndex.name, name)
+        .parent()
+        .find(`datatable-body-cell:nth-child(${this.columnIndex.owner})`)
+        .should(($elements) => {
+          const bucketName = $elements.text();
+          expect(bucketName).to.eq(new_owner);
+        });
+
       // wait to be back on buckets page with table visible and click
       this.getExpandCollapseElement(name).click();
 
       // check its details table for edited owner field
-      cy.get('.table.table-striped.table-bordered')
-        .first()
-        .should('contains.text', new_owner)
-        .as('bucketDataTable');
+      cy.get('.table.table-striped.table-bordered').first().as('bucketDataTable');
 
       // Check versioning enabled:
-      cy.get('@bucketDataTable').find('tr').its(2).find('td').last().should('have.text', new_owner);
-      cy.get('@bucketDataTable').find('tr').its(11).find('td').last().as('versioningValueCell');
+      cy.get('@bucketDataTable').find('tr').its(0).find('td').last().as('versioningValueCell');
 
       return cy.get('@versioningValueCell').should('have.text', this.versioningStateEnabled);
     }
@@ -92,21 +101,23 @@ export class BucketsPageHelper extends PageHelper {
     cy.get('input[id=versioning]').should('not.be.checked');
     cy.get('label[for=versioning]').click();
     cy.get('input[id=versioning]').should('be.checked');
-
     cy.contains('button', 'Edit Bucket').click();
 
+    // Check if the owner is updated
+    this.getTableCell(this.columnIndex.name, name)
+      .parent()
+      .find(`datatable-body-cell:nth-child(${this.columnIndex.owner})`)
+      .should(($elements) => {
+        const bucketName = $elements.text();
+        expect(bucketName).to.eq(new_owner);
+      });
+
     // wait to be back on buckets page with table visible and click
     this.getExpandCollapseElement(name).click();
 
-    // check its details table for edited owner field
-    cy.get('.table.table-striped.table-bordered')
-      .first()
-      .should('contains.text', new_owner)
-      .as('bucketDataTable');
-
     // Check versioning enabled:
-    cy.get('@bucketDataTable').find('tr').its(2).find('td').last().should('have.text', new_owner);
-    cy.get('@bucketDataTable').find('tr').its(11).find('td').last().as('versioningValueCell');
+    cy.get('.table.table-striped.table-bordered').first().as('bucketDataTable');
+    cy.get('@bucketDataTable').find('tr').its(0).find('td').last().as('versioningValueCell');
 
     cy.get('@versioningValueCell').should('have.text', this.versioningStateEnabled);
 
index 80ea7c325fc29e1d1a35898b8aa625564076dd62..3815011a1859a90ac2cd39643c65498818e42560 100644 (file)
@@ -39,7 +39,7 @@ describe('Dashboard-v3 Main Page', () => {
     it('should verify that cards exist on dashboard in proper order', () => {
       // Ensures that cards are all displayed on the dashboard tab while being in the proper
       // order, checks for card title and position via indexing into a list of all cards.
-      const order = ['Details', 'Status', 'Capacity', 'Inventory', 'Cluster utilization'];
+      const order = ['Details', 'Inventory', 'Status', 'Capacity', 'Cluster Utilization'];
 
       for (let i = 0; i < order.length; i++) {
         dashboard.card(i).should('contain.text', order[i]);
index b69f26f58dc3818fc5ad61798d1832e1870dd1c9..0a25d7e864361fc7aa1355d2dba6599c67f19002 100644 (file)
@@ -38,7 +38,7 @@ describe('Notification page', () => {
     notification.getTasks().contains(poolName).should('exist');
 
     // Delete pool after task is complete (otherwise we get an error).
-    notification.getTasks().contains(poolName, { timeout: 300000 }).should('not.exist');
+    notification.getTasks().should('not.exist');
   });
 
   it('should have notifications', () => {
index 2ab1b50025b8497f368b78669be4bf25d295bc94..09a2788eb0042946124b9b59a5cd9ccf0246c56d 100644 (file)
@@ -86,8 +86,14 @@ function requestAuth(username: string, password: string, url = '') {
 }
 
 // @ts-ignore
-Cypress.Commands.add('text', { prevSubject: true }, (subject: any) => {
-  return subject.text();
+Cypress.Commands.add('text', { prevSubject: true }, ($element: JQuery<HTMLElement>) => {
+  cy.wrap($element).scrollIntoView();
+  return cy
+    .wrap($element)
+    .invoke('text')
+    .then((text: string) => {
+      return text.toString();
+    });
 });
 
 Cypress.Commands.add('logToConsole', (message: string, optional?: any) => {
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/119.066087561586659c.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/119.066087561586659c.js
new file mode 100644 (file)
index 0000000..6ff8073
--- /dev/null
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[119],{22119:(xn,Ae,r)=>{r.r(Ae),r.d(Ae,{PoolModule:()=>qe,RoutedPoolModule:()=>Dn});var C=r(88692),l=r(20092),Oe=r(54247),f=r(51389),M=r(79512),f_=r(44466),E_=r(39025),g_=r(370),p_=r(23815),g=r.n(p_),R_=r(7357),m_=r(26504),ue=r(80842);class T{constructor(){this.nodes=[],this.idTree={},this.allDevices=[],this.buckets=[],this.failureDomains={},this.failureDomainKeys=[],this.devices=[],this.deviceCount=0}static searchFailureDomains(n,_){return this.getFailureDomains(this.search(n,_))}static search(n,_){const[o,i]=_.split("~"),s=n.find(c=>["name","id","type"].some(d=>c[d]===o));return s?(n=this.getSubNodes(s,this.createIdTreeFromNodes(n)),i&&(n=this.filterNodesByDeviceType(n,i)),n):[]}static createIdTreeFromNodes(n){const _={};return n.forEach(o=>{_[o.id]=o}),_}static getSubNodes(n,_){let o=[n];return n.children&&n.children.forEach(i=>{o=o.concat(this.getSubNodes(_[i],_))}),o}static filterNodesByDeviceType(n,_){let i,o=n.filter(c=>c.device_class&&c.device_class!==_).map(c=>c.id),s=o;do{i=!1,n=n.filter(d=>!o.includes(d.id));const c=[];n.forEach(d=>{d.children&&d.children.every(P=>o.includes(P))&&(c.push(d.id),i=!0)}),i&&(o=c,s=s.concat(c))}while(i);return(n=g().cloneDeep(n)).map(c=>(c.children&&(c.children=c.children.filter(d=>!s.includes(d))),c))}static getFailureDomains(n){const _={};return n.forEach(o=>{const i=o.type;_[i]||(_[i]=[]),_[i].push(o)}),_}initCrushNodeSelection(n,_,o,i){this.nodes=n,this.idTree=T.createIdTreeFromNodes(n),n.forEach(s=>{this.idTree[s.id]=s}),this.buckets=g().sortBy(n.filter(s=>s.children),"name"),this.controls={root:_,failure:o,device:i},this.preSelectRoot(),this.controls.root.valueChanges.subscribe(()=>this.onRootChange()),this.controls.failure.valueChanges.subscribe(()=>this.onFailureDomainChange()),this.controls.device.valueChanges.subscribe(()=>this.onDeviceChange())}preSelectRoot(){const n=this.nodes.find(_=>"root"===_.type);this.silentSet(this.controls.root,n),this.onRootChange()}silentSet(n,_){n.setValue(_,{emitEvent:!1})}onRootChange(){const n=T.getSubNodes(this.controls.root.value,this.idTree),_=T.getFailureDomains(n);Object.keys(_).forEach(o=>{_[o].length<=1&&delete _[o]}),this.failureDomains=_,this.failureDomainKeys=Object.keys(_).sort(),this.updateFailureDomain()}updateFailureDomain(){let n=this.getIncludedCustomValue(this.controls.failure,Object.keys(this.failureDomains));""===n&&(n=this.setMostCommonDomain(this.controls.failure)),this.updateDevices(n)}getIncludedCustomValue(n,_){return n.dirty&&_.includes(n.value)?n.value:""}setMostCommonDomain(n){let _={n:0,type:""};return Object.keys(this.failureDomains).forEach(o=>{const i=this.failureDomains[o].length;_.n<i&&(_={n:i,type:o})}),this.silentSet(n,_.type),_.type}onFailureDomainChange(){this.updateDevices()}updateDevices(n=this.controls.failure.value){const _=g().flatten(this.failureDomains[n].map(i=>T.getSubNodes(i,this.idTree)));this.allDevices=_.filter(i=>i.device_class).map(i=>i.device_class),this.devices=g().uniq(this.allDevices).sort();const o=1===this.devices.length?this.devices[0]:this.getIncludedCustomValue(this.controls.device,this.devices);this.silentSet(this.controls.device,o),this.onDeviceChange(o)}onDeviceChange(n=this.controls.device.value){this.deviceCount=""===n?this.allDevices.length:this.allDevices.filter(_=>_===n).length}}var Fe=r(30982),C_=r(14745),b=r(65862),M_=r(93614),Ne=r(95463),E=r(90070),h_=r(30633),v=r(76111),S_=r(47557),T_=r(28211),de=r(32337),e=r(64537),be=r(62862),ve=r(83608),Pe=r(18372),$e=r(60312),fe=r(30839),Ee=r(82945),ge=r(87925),pe=r(94276),Re=r(56310),me=r(41582),Ce=r(10545);function L_(t,n){1&t&&(e.TgZ(0,"span",30),e.SDv(1,31),e.qZA())}function A_(t,n){1&t&&(e.TgZ(0,"span",30),e.SDv(1,32),e.qZA())}function F_(t,n){1&t&&(e.TgZ(0,"span",30),e.SDv(1,33),e.qZA())}function N_(t,n){1&t&&(e.TgZ(0,"option",26),e.SDv(1,34),e.qZA())}function b_(t,n){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}function v_(t,n){1&t&&(e.TgZ(0,"span",30),e.SDv(1,36),e.qZA())}function $_(t,n){1&t&&(e.TgZ(0,"option",26),e.SDv(1,37),e.qZA())}function I_(t,n){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw();e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function D_(t,n){1&t&&(e.TgZ(0,"span",30),e.SDv(1,38),e.qZA())}function x_(t,n){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}let y_=(()=>{class t extends T{constructor(_,o,i,s,c){super(),this.formBuilder=_,this.activeModal=o,this.taskWrapper=i,this.crushRuleService=s,this.actionLabels=c,this.submitAction=new e.vpe,this.tooltips=this.crushRuleService.formTooltips,this.action=this.actionLabels.CREATE,this.resource="Crush Rule",this.createForm()}createForm(){this.form=this.formBuilder.group({name:["",[l.kI.required,l.kI.pattern("[A-Za-z0-9_-]+"),E.h.custom("uniqueName",_=>this.names&&-1!==this.names.indexOf(_))]],root:null,failure_domain:"",device_class:""})}ngOnInit(){this.crushRuleService.getInfo().subscribe(({names:_,nodes:o})=>{this.initCrushNodeSelection(o,this.form.get("root"),this.form.get("failure_domain"),this.form.get("device_class")),this.names=_})}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _=g().cloneDeep(this.form.value);_.root=_.root.name,""===_.device_class&&delete _.device_class,this.taskWrapper.wrapTaskAroundCall({task:new v.R("crushRule/create",_),call:this.crushRuleService.create(_)}).subscribe({error:()=>{this.form.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close(),this.submitAction.emit(_)}})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(be.O),e.Y36(f.Kz),e.Y36(de.P),e.Y36(ve.H),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-crush-rule-form-modal"]],outputs:{submitAction:"submitAction"},features:[e.qOj],decls:55,vars:27,consts:function(){let n,_,o,i,s,c,d,P,p,R,h,S,m;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Root",i="Failure domain type",s="Device class",c="Let Ceph decide",d="This field is required!",P="The name can only consist of alphanumeric characters, dashes and underscores.",p="The chosen erasure code profile name is already in use.",R="Loading...",h="This field is required!",S="Loading...",m="This field is required!",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label"],_,[1,"required"],[1,"cd-col-form-input"],["type","text","id","name","name","name","placeholder","Name...","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","root",1,"cd-col-form-label"],o,[3,"html"],["id","root","name","root","formControlName","root",1,"form-select"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],["for","failure_domain",1,"cd-col-form-label"],i,["id","failure_domain","name","failure_domain","formControlName","failure_domain",1,"form-select"],["for","device_class",1,"cd-col-form-label"],s,["id","device_class","name","device_class","formControlName","device_class",1,"form-select"],["ngValue",""],c,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],d,P,p,R,[3,"ngValue"],h,S,m]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.ynx(11),e.SDv(12,9),e.BQk(),e._UZ(13,"span",10),e.qZA(),e.TgZ(14,"div",11),e._UZ(15,"input",12),e.YNc(16,L_,2,0,"span",13),e.YNc(17,A_,2,0,"span",13),e.YNc(18,F_,2,0,"span",13),e.qZA()(),e.TgZ(19,"div",7)(20,"label",14),e.ynx(21),e.SDv(22,15),e.BQk(),e._UZ(23,"cd-helper",16)(24,"span",10),e.qZA(),e.TgZ(25,"div",11)(26,"select",17),e.YNc(27,N_,2,0,"option",18),e.YNc(28,b_,2,2,"option",19),e.qZA(),e.YNc(29,v_,2,0,"span",13),e.qZA()(),e.TgZ(30,"div",7)(31,"label",20),e.ynx(32),e.SDv(33,21),e.BQk(),e._UZ(34,"cd-helper",16)(35,"span",10),e.qZA(),e.TgZ(36,"div",11)(37,"select",22),e.YNc(38,$_,2,0,"option",18),e.YNc(39,I_,2,3,"option",19),e.qZA(),e.YNc(40,D_,2,0,"span",13),e.qZA()(),e.TgZ(41,"div",7)(42,"label",23),e.ynx(43),e.SDv(44,24),e.BQk(),e._UZ(45,"cd-helper",16),e.qZA(),e.TgZ(46,"div",11)(47,"select",25)(48,"option",26),e.SDv(49,27),e.qZA(),e.YNc(50,x_,2,2,"option",19),e.qZA()()()(),e.TgZ(51,"div",28)(52,"cd-form-button-panel",29),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(53,"titlecase"),e.ALo(54,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,19,o.action))(e.lcZ(4,21,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.form),e.xp6(10),e.Q6J("ngIf",o.form.showError("name",i,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",i,"pattern")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",i,"uniqueName")),e.xp6(5),e.Q6J("html",o.tooltips.root),e.xp6(4),e.Q6J("ngIf",!o.buckets),e.xp6(1),e.Q6J("ngForOf",o.buckets),e.xp6(1),e.Q6J("ngIf",o.form.showError("root",i,"required")),e.xp6(5),e.Q6J("html",o.tooltips.failure_domain),e.xp6(4),e.Q6J("ngIf",!o.failureDomains),e.xp6(1),e.Q6J("ngForOf",o.failureDomainKeys),e.xp6(1),e.Q6J("ngIf",o.form.showError("failure_domain",i,"required")),e.xp6(5),e.Q6J("html",o.tooltips.device_class),e.xp6(5),e.Q6J("ngForOf",o.devices),e.xp6(2),e.Q6J("form",o.form)("submitText",e.lcZ(53,23,o.action)+" "+e.lcZ(54,25,o.resource))}},dependencies:[C.sg,C.O5,Pe.S,$e.z,fe.p,Ee.U,ge.o,pe.b,Re.P,me.V,l._Y,l.YN,l.Kr,l.Fj,l.EJ,l.JJ,l.JL,l.sg,l.u,C.rS,Ce.m]}),t})();class Z_{}var U_=r(35732);let Me=(()=>{class t{constructor(_){this.http=_,this.apiPath="api/erasure_code_profile",this.formTooltips={k:"Each object is split in data-chunks parts, each stored on a different OSD.",m:"Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.",plugins:{jerasure:{description:"The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.",technique:"The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.",packetSize:"The encoding will be done on packets of bytes size at a time.\n          Choosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic."},lrc:{description:"With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.",l:"Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.",crushLocality:"The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done."},isa:{description:"The isa plugin encapsulates the ISA library. It only runs on Intel processors.",technique:"The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy."},shec:{description:"The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.",c:"The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data."},clay:{description:"CLAY (short for coupled-layer) codes are erasure codes designed to\n          bring about significant savings in terms of network bandwidth and disk IO when a failed\n          node/OSD/rack is being repaired.",d:"Number of OSDs requested to send data during recovery of a single chunk.\n          d needs to be chosen such that k+1 <= d <= k+m-1. The larger the d, the better\n          the savings.",scalar_mds:"scalar_mds specifies the plugin that is used as a building block\n          in the layered construction. It can be one of jerasure, isa, shec.",technique:"technique specifies the technique that will be picked\n          within the 'scalar_mds' plugin specified. Supported techniques\n          are 'reed_sol_van', 'reed_sol_r6_op', 'cauchy_orig',\n          'cauchy_good', 'liber8tion' for jerasure, 'reed_sol_van',\n          'cauchy' for isa and 'single', 'multiple' for shec."}},crushRoot:"The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.",crushFailureDomain:"Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.",crushDeviceClass:"Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.",directory:"Set the directory name from which the erasure code plugin is loaded."}}list(){return this.http.get(this.apiPath)}create(_){return this.http.post(this.apiPath,_,{observe:"response"})}delete(_){return this.http.delete(`${this.apiPath}/${_}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return t.\u0275fac=function(_){return new(_||t)(e.LFG(U_.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function G_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,47),e.qZA())}function H_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,48),e.qZA())}function z_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,49),e.qZA())}function q_(t,n){1&t&&(e.TgZ(0,"option",37),e.SDv(1,50),e.qZA())}function X_(t,n){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}function Q_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,52),e.qZA())}function w_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,53),e.qZA())}function J_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,54),e.qZA())}function k_(t,n){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,55),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.deviceCount),e.QtT(1)}}function V_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,56),e.qZA())}function Y_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,57),e.qZA())}function B_(t,n){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,58),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.lrcMultiK),e.QtT(1)}}function j_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,59),e.qZA())}function K_(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,60),e.qZA())}function W_(t,n){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,61),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.deviceCount),e.QtT(1)}}function eo(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,65),e.qZA())}function _o(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,66),e.qZA())}function oo(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",62)(2,"span",14),e.SDv(3,63),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",64),e.YNc(7,eo,2,0,"span",12),e.YNc(8,_o,2,0,"span",12),e.qZA()()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.shec.c),e.xp6(3),e.Q6J("ngIf",_.form.showError("c",o,"min")),e.xp6(1),e.Q6J("ngIf",_.form.showError("c",o,"cGreaterM"))}}function to(t,n){1&t&&(e.TgZ(0,"span",39),e.SDv(1,74),e.qZA())}function no(t,n){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,75),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.pQV(_.getDMin())(_.getDMax()),e.QtT(1)}}function io(t,n){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,76),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.pQV(_.getDMax()),e.QtT(1)}}function so(t,n){if(1&t&&(e.ynx(0),e.YNc(1,no,2,2,"span",23),e.YNc(2,io,2,1,"span",23),e.BQk()),2&t){const _=e.oxw(2);e.xp6(1),e.Q6J("ngIf",_.getDMin()<_.getDMax()),e.xp6(1),e.Q6J("ngIf",_.getDMin()===_.getDMax())}}function ao(t,n){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,77),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.pQV(_.getDMin()),e.QtT(1)}}function lo(t,n){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,78),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.pQV(_.getDMax()),e.QtT(1)}}function ro(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",7)(1,"label",67)(2,"span",14),e.SDv(3,68),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10)(6,"div",69),e._UZ(7,"input",70),e.TgZ(8,"button",71),e.NdJ("click",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.toggleDCalc())}),e._UZ(9,"i",72),e.qZA()(),e.YNc(10,to,2,0,"span",23),e.YNc(11,so,3,2,"ng-container",73),e.YNc(12,ao,2,1,"span",12),e.YNc(13,lo,2,1,"span",12),e.qZA()()}if(2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.clay.d),e.xp6(5),e.Q6J("ngClass",_.dCalc?_.icons.unlock:_.icons.lock),e.xp6(1),e.Q6J("ngIf",_.dCalc),e.xp6(1),e.Q6J("ngIf",!_.dCalc),e.xp6(1),e.Q6J("ngIf",_.form.showError("d",o,"dMin")),e.xp6(1),e.Q6J("ngIf",_.form.showError("d",o,"dMax"))}}function co(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,83),e.qZA())}function Oo(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,84),e.qZA())}function uo(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,85),e.qZA())}function Po(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",79)(2,"span",14),e.SDv(3,80),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",81),e.YNc(7,co,2,0,"span",12),e.YNc(8,Oo,2,0,"span",12),e.YNc(9,uo,2,0,"span",12),e.TgZ(10,"span",39),e.SDv(11,82),e.qZA()()()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.lrc.l),e.xp6(3),e.Q6J("ngIf",_.form.showError("l",o,"required")),e.xp6(1),e.Q6J("ngIf",_.form.showError("l",o,"min")),e.xp6(1),e.Q6J("ngIf",_.form.showError("l",o,"unequal")),e.xp6(2),e.pQV(_.lrcGroups),e.QtT(11)}}function fo(t,n){1&t&&(e.TgZ(0,"option",37),e.SDv(1,86),e.qZA())}function Eo(t,n){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw();e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function go(t,n){1&t&&(e.TgZ(0,"option",37),e.SDv(1,90),e.qZA())}function po(t,n){1&t&&(e.TgZ(0,"option",37),e.SDv(1,91),e.qZA())}function Ro(t,n){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(2);e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function mo(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",87),e.ynx(2),e.SDv(3,88),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10)(6,"select",89),e.YNc(7,go,2,0,"option",18),e.YNc(8,po,2,0,"option",18),e.YNc(9,Ro,2,3,"option",19),e.qZA()()()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins.lrc.crushLocality),e.xp6(3),e.Q6J("ngIf",!_.failureDomains),e.xp6(1),e.Q6J("ngIf",_.failureDomainKeys.length>0),e.xp6(1),e.Q6J("ngForOf",_.failureDomainKeys)}}function Co(t,n){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}const Ie=function(t,n,_){return[t,n,_]};function Mo(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",92),e.ynx(2),e.SDv(3,93),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10)(6,"select",94),e.YNc(7,Co,2,2,"option",19),e.qZA()()()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins.clay.scalar_mds),e.xp6(3),e.Q6J("ngForOf",e.kEZ(2,Ie,_.PLUGIN.JERASURE,_.PLUGIN.ISA,_.PLUGIN.SHEC))}}function ho(t,n){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}function So(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",95),e.ynx(2),e.SDv(3,96),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10)(6,"select",97),e.YNc(7,ho,2,2,"option",19),e.qZA()()()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins[_.plugin].technique),e.xp6(3),e.Q6J("ngForOf",_.techniques)}}function To(t,n){1&t&&(e.TgZ(0,"span",46),e.SDv(1,101),e.qZA())}function Lo(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",98),e.ynx(2),e.SDv(3,99),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",100),e.YNc(7,To,2,0,"span",12),e.qZA()()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.jerasure.packetSize),e.xp6(3),e.Q6J("ngIf",_.form.showError("packetSize",o,"min"))}}function Ao(t,n){1&t&&(e.TgZ(0,"option",37),e.SDv(1,102),e.qZA())}function Fo(t,n){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}function No(t,n){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}let bo=(()=>{class t extends T{constructor(_,o,i,s,c){super(),this.formBuilder=_,this.activeModal=o,this.taskWrapper=i,this.ecpService=s,this.actionLabels=c,this.submitAction=new e.vpe,this.tooltips=this.ecpService.formTooltips,this.PLUGIN={LRC:"lrc",SHEC:"shec",CLAY:"clay",JERASURE:"jerasure",ISA:"isa"},this.plugin=this.PLUGIN.JERASURE,this.icons=b.P,this.action=this.actionLabels.CREATE,this.resource="EC Profile",this.createForm(),this.setJerasureDefaults()}createForm(){this.form=this.formBuilder.group({name:[null,[l.kI.required,l.kI.pattern("[A-Za-z0-9_-]+"),E.h.custom("uniqueName",_=>this.names&&-1!==this.names.indexOf(_))]],plugin:[this.PLUGIN.JERASURE,[l.kI.required]],k:[4,[l.kI.required,E.h.custom("max",()=>this.baseValueValidation(!0)),E.h.custom("unequal",_=>this.lrcDataValidation(_)),E.h.custom("kLowerM",_=>this.shecDataValidation(_))]],m:[2,[l.kI.required,E.h.custom("max",()=>this.baseValueValidation())]],crushFailureDomain:"",crushRoot:null,crushDeviceClass:"",directory:"",technique:"reed_sol_van",packetSize:[2048],l:[3,[l.kI.required,E.h.custom("unequal",_=>this.lrcLocalityValidation(_))]],crushLocality:"",c:[2,[l.kI.required,E.h.custom("cGreaterM",_=>this.shecDurabilityValidation(_))]],d:[5,[l.kI.required,E.h.custom("dMin",_=>this.dMinValidation(_)),E.h.custom("dMax",_=>this.dMaxValidation(_))]],scalar_mds:[this.PLUGIN.JERASURE,[l.kI.required]]}),this.toggleDCalc(),this.form.get("k").valueChanges.subscribe(()=>this.updateValidityOnChange(["m","l","d"])),this.form.get("m").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","l","c","d"])),this.form.get("l").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","m"])),this.form.get("plugin").valueChanges.subscribe(_=>this.onPluginChange(_)),this.form.get("scalar_mds").valueChanges.subscribe(()=>this.setClayDefaultsForScalar())}baseValueValidation(_=!1){return this.validValidation(()=>this.getKMSum()>this.deviceCount&&this.form.getValue("k")>this.form.getValue("m")===_)}validValidation(_,o){return!((!this.form||o)&&this.plugin!==o)&&_()}getKMSum(){return this.form.getValue("k")+this.form.getValue("m")}lrcDataValidation(_){return this.validValidation(()=>{const o=this.form.getValue("m"),i=this.form.getValue("l"),s=_+o;return this.lrcMultiK=_/(s/i),_%(s/i)!=0},"lrc")}shecDataValidation(_){return this.validValidation(()=>this.form.getValue("m")>_,"shec")}lrcLocalityValidation(_){return this.validValidation(()=>{const o=this.getKMSum();return this.lrcGroups=_>0?o/_:0,_>0&&o%_!=0},"lrc")}shecDurabilityValidation(_){return this.validValidation(()=>{const o=this.form.getValue("m");return _>o},"shec")}dMinValidation(_){return this.validValidation(()=>this.getDMin()>_,"clay")}getDMin(){return this.form.getValue("k")+1}dMaxValidation(_){return this.validValidation(()=>_>this.getDMax(),"clay")}getDMax(){const _=this.form.getValue("m");return this.form.getValue("k")+_-1}toggleDCalc(){this.dCalc=!this.dCalc,this.form.get("d")[this.dCalc?"disable":"enable"](),this.calculateD()}calculateD(){this.plugin!==this.PLUGIN.CLAY||!this.dCalc||this.form.silentSet("d",this.getDMax())}updateValidityOnChange(_){_.forEach(o=>{"d"===o&&this.calculateD(),this.form.get(o).updateValueAndValidity({emitEvent:!1})})}onPluginChange(_){this.plugin=_,_===this.PLUGIN.JERASURE?this.setJerasureDefaults():_===this.PLUGIN.LRC?this.setLrcDefaults():_===this.PLUGIN.ISA?this.setIsaDefaults():_===this.PLUGIN.SHEC?this.setShecDefaults():_===this.PLUGIN.CLAY&&this.setClayDefaults(),this.updateValidityOnChange(["m"])}setJerasureDefaults(){this.techniques=["reed_sol_van","reed_sol_r6_op","cauchy_orig","cauchy_good","liberation","blaum_roth","liber8tion"],this.setDefaults({k:4,m:2,technique:"reed_sol_van"})}setLrcDefaults(){this.setDefaults({k:4,m:2,l:3})}setIsaDefaults(){this.techniques=["reed_sol_van","cauchy"],this.setDefaults({k:7,m:3,technique:"reed_sol_van"})}setShecDefaults(){this.setDefaults({k:4,m:3,c:2})}setClayDefaults(){this.setDefaults({k:4,m:2,scalar_mds:this.PLUGIN.JERASURE}),this.setClayDefaultsForScalar()}setClayDefaultsForScalar(){const _=this.form.getValue("scalar_mds");let o="reed_sol_van";_===this.PLUGIN.JERASURE?this.techniques=["reed_sol_van","reed_sol_r6_op","cauchy_orig","cauchy_good","liber8tion"]:_===this.PLUGIN.ISA?this.techniques=["reed_sol_van","cauchy"]:(o="single",this.techniques=["single","multiple"]),this.setDefaults({technique:o})}setDefaults(_){Object.keys(_).forEach(o=>{const i=this.form.get(o),s=i.value;i.pristine||"technique"===o&&!this.techniques.includes(s)||"k"===o&&[4,7].includes(s)||"m"===o&&[2,3].includes(s)?i.setValue(_[o]):i.updateValueAndValidity()})}ngOnInit(){this.ecpService.getInfo().subscribe(({plugins:_,names:o,directory:i,nodes:s})=>{this.initCrushNodeSelection(s,this.form.get("crushRoot"),this.form.get("crushFailureDomain"),this.form.get("crushDeviceClass")),this.plugins=_,this.names=o,this.form.silentSet("directory",i),this.preValidateNumericInputFields()})}preValidateNumericInputFields(){const _=["k","m","l","c","d"].map(o=>this.form.get(o));_.forEach(o=>{o.markAsTouched(),o.markAsDirty()}),_[1].updateValueAndValidity()}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _=this.createJson();this.taskWrapper.wrapTaskAroundCall({task:new v.R("ecp/create",{name:_.name}),call:this.ecpService.create(_)}).subscribe({error:()=>{this.form.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close(),this.submitAction.emit(_)}})}createJson(){const _={technique:[this.PLUGIN.ISA,this.PLUGIN.JERASURE,this.PLUGIN.CLAY],packetSize:[this.PLUGIN.JERASURE],l:[this.PLUGIN.LRC],crushLocality:[this.PLUGIN.LRC],c:[this.PLUGIN.SHEC],d:[this.PLUGIN.CLAY],scalar_mds:[this.PLUGIN.CLAY]},o=new Z_,i=this.form.getValue("plugin");return Object.keys(this.form.controls).filter(s=>{const c=_[s],d=this.form.getValue(s);return(c&&c.includes(i)||!c)&&d&&""!==d}).forEach(s=>{this.extendJson(s,o)}),o}extendJson(_,o){const s=this.form.getValue(_);o[{crushFailureDomain:"crush-failure-domain",crushRoot:"crush-root",crushDeviceClass:"crush-device-class",packetSize:"packetsize",crushLocality:"crush-locality"}[_]||_]="crushRoot"===_?s.name:s}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(be.O),e.Y36(f.Kz),e.Y36(de.P),e.Y36(Me),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-erasure-code-profile-form-modal"]],outputs:{submitAction:"submitAction"},features:[e.qOj],decls:98,vars:53,consts:function(){let n,_,o,i,s,c,d,P,p,R,h,S,m,u,A,$,I,D,x,y,Z,U,G,H,z,q,X,Q,w,J,k,V,Y,B,j,K,N,W,ee,_e,oe,te,ne,ie,se,ae,le,re,ce;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Plugin",i="Data chunks (k)",s="Coding chunks (m)",c="Crush failure domain",d="Crush root",P="Crush device class",p="Let Ceph decide",R="Available OSDs: " + "\ufffd0\ufffd" + "",h="Directory",S="This field is required!",m="The name can only consist of alphanumeric characters, dashes and underscores.",u="The chosen erasure code profile name is already in use.",A="Loading...",$="This field is required!",I="This field is required!",D="Must be equal to or greater than 2.",x="Chunks (k+m) have exceeded the available OSDs of " + "\ufffd0\ufffd" + ".",y="For an equal distribution k has to be a multiple of (k+m)/l.",Z="K has to be equal to or greater than m in order to recover data correctly through c.",U="Distribution factor: " + "\ufffd0\ufffd" + "",G="This field is required!",H="Must be equal to or greater than 1.",z="Chunks (k+m) have exceeded the available OSDs of " + "\ufffd0\ufffd" + ".",q="Durability estimator (c)",X="Must be equal to or greater than 1.",Q="C has to be equal to or lower than m as m defines the amount of chunks that can be used.",w="Helper chunks (d)",J="Set d manually or use the plugin's default calculation that maximizes d.",k="D is automatically updated on k and m changes",V="D can be set from " + "\ufffd0\ufffd" + " to " + "\ufffd1\ufffd" + "",Y="D can only be set to " + "\ufffd0\ufffd" + "",B="D has to be greater than k (" + "\ufffd0\ufffd" + ").",j="D has to be lower than k + m (" + "\ufffd0\ufffd" + ").",K="Locality (l)",N="Locality groups: " + "\ufffd0\ufffd" + "",W="This field is required!",ee="Must be equal to or greater than 1.",_e="Can't split up chunks (k+m) correctly with the current locality.",oe="Loading...",te="Crush Locality",ne="Loading...",ie="None",se="Scalar mds",ae="Technique",le="Packetsize",re="Must be equal to or greater than 1.",ce="Loading...",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["type","text","id","name","name","name","placeholder","Name...","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","plugin",1,"cd-col-form-label"],[1,"required"],o,[3,"html"],["id","plugin","name","plugin","formControlName","plugin",1,"form-select"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],["for","k",1,"cd-col-form-label"],i,["type","number","id","k","name","k","ng-model","$ctrl.erasureCodeProfile.k","placeholder","Data chunks...","formControlName","k","min","2",1,"form-control"],["class","form-text text-muted",4,"ngIf"],["for","m",1,"cd-col-form-label"],s,["type","number","id","m","name","m","placeholder","Coding chunks...","formControlName","m","min","1",1,"form-control"],["class","form-group row",4,"ngIf"],["for","crushFailureDomain",1,"cd-col-form-label"],c,["id","crushFailureDomain","name","crushFailureDomain","formControlName","crushFailureDomain",1,"form-select"],["for","crushRoot",1,"cd-col-form-label"],d,["id","crushRoot","name","crushRoot","formControlName","crushRoot",1,"form-select"],["for","crushDeviceClass",1,"cd-col-form-label"],P,["id","crushDeviceClass","name","crushDeviceClass","formControlName","crushDeviceClass",1,"form-select"],["ngValue",""],p,[1,"form-text","text-muted"],R,["for","directory",1,"cd-col-form-label"],h,["type","text","id","directory","name","directory","placeholder","Path...","formControlName","directory",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],S,m,u,A,[3,"ngValue"],$,I,D,x,y,Z,U,G,H,z,["for","c",1,"cd-col-form-label"],q,["type","number","id","c","name","c","placeholder","Coding chunks...","formControlName","c","min","1",1,"form-control"],X,Q,["for","d",1,"cd-col-form-label"],w,[1,"input-group"],["type","number","id","d","name","d","placeholder","Helper chunks...","formControlName","d",1,"form-control"],["id","d-calc-btn","ngbTooltip",J,"type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],[4,"ngIf"],k,V,Y,B,j,["for","l",1,"cd-col-form-label"],K,["type","number","id","l","name","l","placeholder","Coding chunks...","formControlName","l","min","1",1,"form-control"],N,W,ee,_e,oe,["for","crushLocality",1,"cd-col-form-label"],te,["id","crushLocality","name","crushLocality","formControlName","crushLocality",1,"form-select"],ne,ie,["for","scalar_mds",1,"cd-col-form-label"],se,["id","scalar_mds","name","scalar_mds","formControlName","scalar_mds",1,"form-select"],["for","technique",1,"cd-col-form-label"],ae,["id","technique","name","technique","formControlName","technique",1,"form-select"],["for","packetSize",1,"cd-col-form-label"],le,["type","number","id","packetSize","name","packetSize","placeholder","Packetsize...","formControlName","packetSize","min","1",1,"form-control"],re,ce]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.YNc(14,G_,2,0,"span",12),e.YNc(15,H_,2,0,"span",12),e.YNc(16,z_,2,0,"span",12),e.qZA()(),e.TgZ(17,"div",7)(18,"label",13)(19,"span",14),e.SDv(20,15),e.qZA(),e._UZ(21,"cd-helper",16),e.qZA(),e.TgZ(22,"div",10)(23,"select",17),e.YNc(24,q_,2,0,"option",18),e.YNc(25,X_,2,2,"option",19),e.qZA(),e.YNc(26,Q_,2,0,"span",12),e.qZA()(),e.TgZ(27,"div",7)(28,"label",20)(29,"span",14),e.SDv(30,21),e.qZA(),e._UZ(31,"cd-helper",16),e.qZA(),e.TgZ(32,"div",10),e._UZ(33,"input",22),e.YNc(34,w_,2,0,"span",12),e.YNc(35,J_,2,0,"span",12),e.YNc(36,k_,2,1,"span",12),e.YNc(37,V_,2,0,"span",12),e.YNc(38,Y_,2,0,"span",12),e.YNc(39,B_,2,1,"span",23),e.qZA()(),e.TgZ(40,"div",7)(41,"label",24)(42,"span",14),e.SDv(43,25),e.qZA(),e._UZ(44,"cd-helper",16),e.qZA(),e.TgZ(45,"div",10),e._UZ(46,"input",26),e.YNc(47,j_,2,0,"span",12),e.YNc(48,K_,2,0,"span",12),e.YNc(49,W_,2,1,"span",12),e.qZA()(),e.YNc(50,oo,9,3,"div",27),e.YNc(51,ro,14,6,"div",27),e.YNc(52,Po,12,5,"div",27),e.TgZ(53,"div",7)(54,"label",28),e.ynx(55),e.SDv(56,29),e.BQk(),e._UZ(57,"cd-helper",16),e.qZA(),e.TgZ(58,"div",10)(59,"select",30),e.YNc(60,fo,2,0,"option",18),e.YNc(61,Eo,2,3,"option",19),e.qZA()()(),e.YNc(62,mo,10,4,"div",27),e.YNc(63,Mo,8,6,"div",27),e.YNc(64,So,8,2,"div",27),e.YNc(65,Lo,8,2,"div",27),e.TgZ(66,"div",7)(67,"label",31),e.ynx(68),e.SDv(69,32),e.BQk(),e._UZ(70,"cd-helper",16),e.qZA(),e.TgZ(71,"div",10)(72,"select",33),e.YNc(73,Ao,2,0,"option",18),e.YNc(74,Fo,2,2,"option",19),e.qZA()()(),e.TgZ(75,"div",7)(76,"label",34),e.ynx(77),e.SDv(78,35),e.BQk(),e._UZ(79,"cd-helper",16),e.qZA(),e.TgZ(80,"div",10)(81,"select",36)(82,"option",37),e.SDv(83,38),e.qZA(),e.YNc(84,No,2,2,"option",19),e.qZA(),e.TgZ(85,"span",39),e.SDv(86,40),e.qZA()()(),e.TgZ(87,"div",7)(88,"label",41),e.ynx(89),e.SDv(90,42),e.BQk(),e._UZ(91,"cd-helper",16),e.qZA(),e.TgZ(92,"div",10),e._UZ(93,"input",43),e.qZA()()(),e.TgZ(94,"div",44)(95,"cd-form-button-panel",45),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(96,"titlecase"),e.ALo(97,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,41,o.action))(e.lcZ(4,43,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.form),e.xp6(8),e.Q6J("ngIf",o.form.showError("name",i,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",i,"pattern")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",i,"uniqueName")),e.xp6(5),e.Q6J("html",o.tooltips.plugins[o.plugin].description),e.xp6(3),e.Q6J("ngIf",!o.plugins),e.xp6(1),e.Q6J("ngForOf",o.plugins),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",i,"required")),e.xp6(5),e.Q6J("html",o.tooltips.k),e.xp6(3),e.Q6J("ngIf",o.form.showError("k",i,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",i,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",i,"max")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",i,"unequal")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",i,"kLowerM")),e.xp6(1),e.Q6J("ngIf","lrc"===o.plugin),e.xp6(5),e.Q6J("html",o.tooltips.m),e.xp6(3),e.Q6J("ngIf",o.form.showError("m",i,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("m",i,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("m",i,"max")),e.xp6(1),e.Q6J("ngIf","shec"===o.plugin),e.xp6(1),e.Q6J("ngIf","clay"===o.plugin),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.LRC),e.xp6(5),e.Q6J("html",o.tooltips.crushFailureDomain),e.xp6(3),e.Q6J("ngIf",!o.failureDomains),e.xp6(1),e.Q6J("ngForOf",o.failureDomainKeys),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.LRC),e.xp6(1),e.Q6J("ngIf",o.PLUGIN.CLAY===o.plugin),e.xp6(1),e.Q6J("ngIf",e.kEZ(49,Ie,o.PLUGIN.JERASURE,o.PLUGIN.ISA,o.PLUGIN.CLAY).includes(o.plugin)),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.JERASURE),e.xp6(5),e.Q6J("html",o.tooltips.crushRoot),e.xp6(3),e.Q6J("ngIf",!o.buckets),e.xp6(1),e.Q6J("ngForOf",o.buckets),e.xp6(5),e.Q6J("html",o.tooltips.crushDeviceClass),e.xp6(5),e.Q6J("ngForOf",o.devices),e.xp6(2),e.pQV(o.deviceCount),e.QtT(86),e.xp6(5),e.Q6J("html",o.tooltips.directory),e.xp6(4),e.Q6J("form",o.form)("submitText",e.lcZ(96,45,o.action)+" "+e.lcZ(97,47,o.resource))}},dependencies:[C.mk,C.sg,C.O5,Pe.S,$e.z,fe.p,Ee.U,ge.o,pe.b,Re.P,me.V,l._Y,l.YN,l.Kr,l.Fj,l.wV,l.EJ,l.JJ,l.JL,l.qQ,l.sg,l.u,f._L,C.rS,Ce.m]}),t})();var vo=r(7022);class $o{constructor(){this.erasureInfo=!1,this.crushInfo=!1,this.pgs=1,this.poolTypes=["erasure","replicated"],this.applications={selected:[],default:["cephfs","rbd","rgw"],available:[],validators:[l.kI.pattern("[A-Za-z0-9_]+"),l.kI.maxLength(128)],messages:new vo.a({empty:"No applications added",selectionLimit:{text:"Applications limit reached",tooltip:"A pool can only have up to four applications definitions."},customValidations:{pattern:"Allowed characters '_a-zA-Z0-9'",maxlength:"Maximum length is 128 characters"},filter:"Filter or add applications'",add:"Add application"})}}}var De=r(63285),xe=r(47640),Io=r(60192),Do=r(30490),ye=r(61350),xo=r(17932),yo=r(63622),Zo=r(60950);const Uo=["crushInfoTabs"],Go=["crushDeletionBtn"],Ho=["ecpInfoTabs"],zo=["ecpDeletionBtn"];function qo(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,42),e.qZA())}function Xo(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,43),e.qZA())}function Qo(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,44),e.qZA())}function wo(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,45),e.qZA())}function Jo(t,n){if(1&t&&(e.TgZ(0,"option",46),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function ko(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,47),e.qZA())}function Vo(t,n){if(1&t&&(e.TgZ(0,"option",46),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Yo(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,58),e.qZA())}function Bo(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,59),e.qZA())}function jo(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,60),e.qZA())}function Ko(t,n){1&t&&(e.TgZ(0,"span",55),e.SDv(1,61),e.qZA())}function Wo(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",8)(1,"label",52),e.SDv(2,53),e.qZA(),e.TgZ(3,"div",11)(4,"input",54),e.NdJ("focus",function(){e.CHM(_);const i=e.oxw(3);return e.KtG(i.externalPgChange=!1)})("blur",function(){e.CHM(_);const i=e.oxw(3);return e.KtG(i.alignPgs())}),e.qZA(),e.YNc(5,Yo,2,0,"span",13),e.YNc(6,Bo,2,0,"span",13),e.YNc(7,jo,2,0,"span",13),e.TgZ(8,"span",55),e._UZ(9,"cd-doc",56),e.qZA(),e.YNc(10,Ko,2,0,"span",57),e.qZA()()}if(2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.form.showError("pgNum",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("pgNum",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("pgNum",_,"34")),e.xp6(3),e.Q6J("ngIf",o.externalPgChange)}}function et(t,n){if(1&t&&(e.TgZ(0,"span",41)(1,"ul",66)(2,"li"),e.SDv(3,67),e.qZA(),e.TgZ(4,"li"),e.SDv(5,68),e.qZA()()()),2&t){const _=e.oxw(4);e.xp6(3),e.pQV(_.getMinSize()),e.QtT(3),e.xp6(2),e.pQV(_.getMaxSize()),e.QtT(5)}}function _t(t,n){if(1&t&&(e.TgZ(0,"span",41),e.SDv(1,69),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.pQV(_.getMinSize())(_.getMaxSize()),e.QtT(1)}}function ot(t,n){1&t&&(e.TgZ(0,"span",70),e.SDv(1,71),e.qZA())}function tt(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",62),e.SDv(2,63),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",64),e.YNc(5,et,6,2,"span",13),e.YNc(6,_t,2,2,"span",13),e.YNc(7,ot,2,0,"span",65),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(4),e.Q6J("max",o.getMaxSize())("min",o.getMinSize()),e.xp6(1),e.Q6J("ngIf",o.form.showError("size",_)),e.xp6(1),e.Q6J("ngIf",o.form.showError("size",_)),e.xp6(1),e.Q6J("ngIf",1===o.form.getValue("size"))}}function nt(t,n){1&t&&(e.TgZ(0,"div",8)(1,"label",72),e.SDv(2,73),e.qZA(),e.TgZ(3,"div",11)(4,"div",74),e._UZ(5,"input",75),e.TgZ(6,"label",76),e.SDv(7,77),e.qZA()()()())}function it(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",8)(2,"label",48),e.SDv(3,49),e.qZA(),e.TgZ(4,"div",11)(5,"select",50),e.YNc(6,Vo,2,2,"option",19),e.qZA()()(),e.YNc(7,Wo,11,4,"div",51),e.YNc(8,tt,8,5,"div",51),e.YNc(9,nt,8,0,"div",51),e.qZA()),2&t){const _=e.oxw(2);e.xp6(6),e.Q6J("ngForOf",_.pgAutoscaleModes),e.xp6(1),e.Q6J("ngIf","on"!==_.form.getValue("pgAutoscaleMode")),e.xp6(1),e.Q6J("ngIf",_.isReplicated),e.xp6(1),e.Q6J("ngIf",_.info.is_all_bluestore&&_.isErasure)}}function st(t,n){if(1&t&&e._UZ(0,"i",78),2&t){const _=e.oxw(2);e.Gre("",_.icons.warning," icon-warning-color")}}function at(t,n){1&t&&(e.TgZ(0,"option",17),e.SDv(1,92),e.qZA())}function lt(t,n){1&t&&(e.TgZ(0,"option",93),e.SDv(1,94),e.qZA()),2&t&&e.Q6J("ngValue",null)}function rt(t,n){1&t&&(e.TgZ(0,"option",93),e.SDv(1,95),e.qZA()),2&t&&e.Q6J("ngValue",null)}function ct(t,n){if(1&t&&(e.TgZ(0,"option",93),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}const F=function(t){return[t]};function Ot(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"button",96),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(4);return e.KtG(i.addErasureCodeProfile())}),e._UZ(1,"i",88),e.qZA()}if(2&t){const _=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,F,_.icons.add))}}function dt(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"button",97,98),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(4);return e.KtG(i.deleteErasureCodeProfile())}),e._UZ(2,"i",88),e.qZA()}if(2&t){const _=e.oxw(4);e.xp6(2),e.Q6J("ngClass",e.VKq(1,F,_.icons.trash))}}const ut=function(){return["name"]};function Pt(t,n){if(1&t&&e._UZ(0,"cd-table-key-value",109),2&t){const _=e.oxw(5);e.Q6J("renderObjects",!0)("hideKeys",e.DdM(4,ut))("data",_.form.getValue("erasureProfile"))("autoReload",!1)}}function ft(t,n){1&t&&(e.TgZ(0,"span"),e.SDv(1,112),e.qZA())}function Et(t,n){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.xp6(1),e.hij(" ",_," ")}}function gt(t,n){if(1&t&&(e.TgZ(0,"ul"),e.YNc(1,Et,2,1,"li",113),e.qZA()),2&t){const _=e.oxw(6);e.xp6(1),e.Q6J("ngForOf",_.ecpUsage)}}function pt(t,n){if(1&t&&(e.YNc(0,ft,2,0,"ng-template",null,110,e.W1O),e.YNc(2,gt,2,1,"ul",111)),2&t){const _=e.MAs(1),o=e.oxw(5);e.xp6(2),e.Q6J("ngIf",o.ecpUsage)("ngIfElse",_)}}function Rt(t,n){if(1&t&&(e.TgZ(0,"span",99)(1,"nav",100,101),e.ynx(3,102),e.TgZ(4,"a",103),e.SDv(5,104),e.qZA(),e.YNc(6,Pt,1,5,"ng-template",105),e.BQk(),e.ynx(7,106),e.TgZ(8,"a",103),e.SDv(9,107),e.qZA(),e.YNc(10,pt,3,2,"ng-template",105),e.BQk(),e.qZA(),e._UZ(11,"div",108),e.qZA()),2&t){const _=e.MAs(2);e.xp6(11),e.Q6J("ngbNavOutlet",_)}}const Ze=function(t){return{active:t}};function mt(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",8)(1,"label",80),e.SDv(2,81),e.qZA(),e.TgZ(3,"div",11)(4,"div",82)(5,"select",83),e.YNc(6,at,2,0,"option",84),e.YNc(7,lt,2,1,"option",85),e.YNc(8,rt,2,1,"option",85),e.YNc(9,ct,2,2,"option",86),e.qZA(),e.TgZ(10,"button",87),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(3);return e.KtG(i.data.erasureInfo=!i.data.erasureInfo)}),e._UZ(11,"i",88),e.qZA(),e.YNc(12,Ot,2,3,"button",89),e.YNc(13,dt,3,3,"button",90),e.qZA(),e.YNc(14,Rt,12,1,"span",91),e.qZA()()}if(2&t){const _=e.oxw(3);e.xp6(6),e.Q6J("ngIf",!_.ecProfiles),e.xp6(1),e.Q6J("ngIf",_.ecProfiles&&0===_.ecProfiles.length),e.xp6(1),e.Q6J("ngIf",_.ecProfiles&&_.ecProfiles.length>0),e.xp6(1),e.Q6J("ngForOf",_.ecProfiles),e.xp6(1),e.Q6J("ngClass",e.VKq(9,Ze,_.data.erasureInfo)),e.xp6(1),e.Q6J("ngClass",e.VKq(11,F,_.icons.questionCircle)),e.xp6(1),e.Q6J("ngIf",!_.editing),e.xp6(1),e.Q6J("ngIf",!_.editing),e.xp6(1),e.Q6J("ngIf",_.data.erasureInfo&&_.form.getValue("erasureProfile"))}}function Ct(t,n){1&t&&(e.TgZ(0,"div",8)(1,"label",114),e.SDv(2,115),e.qZA(),e.TgZ(3,"div",11)(4,"span",55),e.SDv(5,116),e.qZA()()())}function Mt(t,n){1&t&&(e.TgZ(0,"span",55)(1,"span"),e.SDv(2,119),e.qZA(),e._uU(3,"\xa0 "),e.qZA())}function ht(t,n){if(1&t&&(e.TgZ(0,"option",93),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.rule_name," ")}}function St(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"button",96),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(5);return e.KtG(i.addCrushRule())}),e._UZ(1,"i",88),e.qZA()}if(2&t){const _=e.oxw(5);e.xp6(1),e.Q6J("ngClass",e.VKq(1,F,_.icons.add))}}function Tt(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"button",126,127),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(5);return e.KtG(i.deleteCrushRule())}),e._UZ(2,"i",88),e.qZA()}if(2&t){const _=e.oxw(5);e.xp6(2),e.Q6J("ngClass",e.VKq(1,F,_.icons.trash))}}const Lt=function(){return["steps","type","rule_name"]};function At(t,n){if(1&t&&e._UZ(0,"cd-table-key-value",109),2&t){const _=e.oxw(6);e.Q6J("renderObjects",!1)("hideKeys",e.DdM(4,Lt))("data",_.form.getValue("crushRule"))("autoReload",!1)}}function Ft(t,n){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(7);e.xp6(1),e.hij(" ",o.describeCrushStep(_)," ")}}function Nt(t,n){if(1&t&&(e.TgZ(0,"ol"),e.YNc(1,Ft,2,1,"li",113),e.qZA()),2&t){const _=e.oxw(6);e.xp6(1),e.Q6J("ngForOf",_.form.get("crushRule").value.steps)}}function bt(t,n){1&t&&(e.TgZ(0,"span"),e.SDv(1,136),e.qZA())}function vt(t,n){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.xp6(1),e.hij(" ",_," ")}}function $t(t,n){if(1&t&&(e.TgZ(0,"ul"),e.YNc(1,vt,2,1,"li",113),e.qZA()),2&t){const _=e.oxw(7);e.xp6(1),e.Q6J("ngForOf",_.crushUsage)}}function It(t,n){if(1&t&&(e.YNc(0,bt,2,0,"ng-template",null,135,e.W1O),e.YNc(2,$t,2,1,"ul",111)),2&t){const _=e.MAs(1),o=e.oxw(6);e.xp6(2),e.Q6J("ngIf",o.crushUsage)("ngIfElse",_)}}function Dt(t,n){if(1&t&&(e.TgZ(0,"div",128)(1,"nav",100,129),e.ynx(3,130),e.TgZ(4,"a",103),e.SDv(5,131),e.qZA(),e.YNc(6,At,1,5,"ng-template",105),e.BQk(),e.ynx(7,132),e.TgZ(8,"a",103),e.SDv(9,133),e.qZA(),e.YNc(10,Nt,2,1,"ng-template",105),e.BQk(),e.ynx(11,106),e.TgZ(12,"a",103),e.SDv(13,134),e.qZA(),e.YNc(14,It,3,2,"ng-template",105),e.BQk(),e.qZA(),e._UZ(15,"div",108),e.qZA()),2&t){const _=e.MAs(2);e.xp6(15),e.Q6J("ngbNavOutlet",_)}}function xt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,137),e.qZA())}function yt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,138),e.qZA())}function Zt(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",120)(2,"select",121)(3,"option",93),e.SDv(4,122),e.qZA(),e.YNc(5,ht,2,2,"option",86),e.qZA(),e.TgZ(6,"button",123),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(4);return e.KtG(i.data.crushInfo=!i.data.crushInfo)}),e._UZ(7,"i",88),e.qZA(),e.YNc(8,St,2,3,"button",89),e.YNc(9,Tt,3,3,"button",124),e.qZA(),e.YNc(10,Dt,16,1,"div",125),e.YNc(11,xt,2,0,"span",13),e.YNc(12,yt,2,0,"span",13),e.qZA()}if(2&t){e.oxw(3);const _=e.MAs(2),o=e.oxw();e.xp6(3),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.current.rules),e.xp6(1),e.Q6J("ngClass",e.VKq(9,Ze,o.data.crushInfo)),e.xp6(1),e.Q6J("ngClass",e.VKq(11,F,o.icons.questionCircle)),e.xp6(1),e.Q6J("ngIf",o.isReplicated&&!o.editing),e.xp6(1),e.Q6J("ngIf",o.isReplicated&&!o.editing),e.xp6(1),e.Q6J("ngIf",o.data.crushInfo&&o.form.getValue("crushRule")),e.xp6(1),e.Q6J("ngIf",o.form.showError("crushRule",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("crushRule",_,"tooFewOsds"))}}function Ut(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",114),e.SDv(2,117),e.qZA(),e.TgZ(3,"div",11),e.YNc(4,Mt,4,0,"ng-template",null,118,e.W1O),e.YNc(6,Zt,13,13,"div",111),e.qZA()()),2&t){const _=e.MAs(5),o=e.oxw(3);e.xp6(6),e.Q6J("ngIf",o.current.rules.length>0)("ngIfElse",_)}}function Gt(t,n){if(1&t&&(e.TgZ(0,"div")(1,"legend"),e.SDv(2,79),e.qZA(),e.YNc(3,mt,15,13,"div",51),e.YNc(4,Ct,6,0,"div",51),e.YNc(5,Ut,7,2,"div",51),e.qZA()),2&t){const _=e.oxw(2);e.xp6(3),e.Q6J("ngIf",_.isErasure),e.xp6(1),e.Q6J("ngIf",_.isErasure&&!_.editing),e.xp6(1),e.Q6J("ngIf",_.isReplicated||_.editing)}}function Ht(t,n){if(1&t&&(e.TgZ(0,"option",46),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function zt(t,n){1&t&&(e.TgZ(0,"option",17),e.SDv(1,156),e.qZA())}function qt(t,n){1&t&&(e.TgZ(0,"option",17),e.SDv(1,157),e.qZA())}function Xt(t,n){if(1&t&&(e.TgZ(0,"option",46),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Qt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,158),e.qZA())}function wt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,159),e.qZA())}function Jt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,160),e.qZA())}function kt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,161),e.qZA())}function Vt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,162),e.qZA())}function Yt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,163),e.qZA())}function Bt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,164),e.qZA())}function jt(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",8)(2,"label",144),e.SDv(3,145),e.qZA(),e.TgZ(4,"div",11)(5,"select",146),e.YNc(6,zt,2,0,"option",84),e.YNc(7,qt,2,0,"option",84),e.YNc(8,Xt,2,2,"option",19),e.qZA()()(),e.TgZ(9,"div",8)(10,"label",147),e.SDv(11,148),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",149),e.YNc(14,Qt,2,0,"span",13),e.YNc(15,wt,2,0,"span",13),e.YNc(16,Jt,2,0,"span",13),e.qZA()(),e.TgZ(17,"div",8)(18,"label",150),e.SDv(19,151),e.qZA(),e.TgZ(20,"div",11),e._UZ(21,"input",152),e.YNc(22,kt,2,0,"span",13),e.YNc(23,Vt,2,0,"span",13),e.YNc(24,Yt,2,0,"span",13),e.qZA()(),e.TgZ(25,"div",8)(26,"label",153),e.SDv(27,154),e.qZA(),e.TgZ(28,"div",11),e._UZ(29,"input",155),e.YNc(30,Bt,2,0,"span",13),e.qZA()()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(6),e.Q6J("ngIf",!o.info.compression_algorithms),e.xp6(1),e.Q6J("ngIf",o.info.compression_algorithms&&0===o.info.compression_algorithms.length),e.xp6(1),e.Q6J("ngForOf",o.info.compression_algorithms),e.xp6(6),e.Q6J("ngIf",o.form.showError("minBlobSize",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("minBlobSize",_,"maximum")),e.xp6(1),e.Q6J("ngIf",o.form.showError("minBlobSize",_,"pattern")),e.xp6(6),e.Q6J("ngIf",o.form.showError("maxBlobSize",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("maxBlobSize",_,"minimum")),e.xp6(1),e.Q6J("ngIf",o.form.showError("maxBlobSize",_,"pattern")),e.xp6(6),e.Q6J("ngIf",o.form.showError("ratio",_,"min")||o.form.showError("ratio",_,"max"))}}function Kt(t,n){if(1&t&&(e.TgZ(0,"div",139)(1,"legend"),e.SDv(2,140),e.qZA(),e.TgZ(3,"div",8)(4,"label",141),e.SDv(5,142),e.qZA(),e.TgZ(6,"div",11)(7,"select",143),e.YNc(8,Ht,2,2,"option",19),e.qZA()()(),e.YNc(9,jt,31,10,"div",20),e.qZA()),2&t){const _=e.oxw(2);e.xp6(8),e.Q6J("ngForOf",_.info.compression_modes),e.xp6(1),e.Q6J("ngIf",_.hasCompressionEnabled())}}function Wt(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,165),e.qZA())}function en(t,n){1&t&&(e.TgZ(0,"span",41),e.SDv(1,166),e.qZA())}function _n(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.YNc(14,qo,2,0,"span",13),e.YNc(15,Xo,2,0,"span",13),e.YNc(16,Qo,2,0,"span",13),e.YNc(17,wo,2,0,"span",13),e.qZA()(),e.TgZ(18,"div",8)(19,"label",14),e.SDv(20,15),e.qZA(),e.TgZ(21,"div",11)(22,"select",16)(23,"option",17),e.SDv(24,18),e.qZA(),e.YNc(25,Jo,2,2,"option",19),e.qZA(),e.YNc(26,ko,2,0,"span",13),e.qZA()(),e.YNc(27,it,10,4,"div",20),e.TgZ(28,"div",8)(29,"label",21),e.SDv(30,22),e.qZA(),e.TgZ(31,"div",11)(32,"cd-select-badges",23),e.NdJ("selection",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.appSelection())}),e.qZA(),e.YNc(33,st,1,3,"i",24),e.qZA()(),e.YNc(34,Gt,6,3,"div",20),e.YNc(35,Kt,10,2,"div",25),e.TgZ(36,"div")(37,"legend"),e.SDv(38,26),e.qZA(),e.TgZ(39,"div",8)(40,"label",27),e.ynx(41),e.SDv(42,28),e.BQk(),e.TgZ(43,"cd-helper")(44,"span"),e.SDv(45,29),e.qZA(),e._UZ(46,"br"),e.TgZ(47,"span"),e.SDv(48,30),e.qZA()()(),e.TgZ(49,"div",11),e._UZ(50,"input",31),e.YNc(51,Wt,2,0,"span",13),e.qZA()(),e.TgZ(52,"div",8)(53,"label",32),e.ynx(54),e.SDv(55,33),e.BQk(),e.TgZ(56,"cd-helper")(57,"span"),e.SDv(58,34),e.qZA(),e._UZ(59,"br"),e.TgZ(60,"span"),e.SDv(61,35),e.qZA()()(),e.TgZ(62,"div",11),e._UZ(63,"input",36),e.YNc(64,en,2,0,"span",13),e.qZA()()(),e.TgZ(65,"div",37)(66,"cd-rbd-configuration-form",38),e.NdJ("changes",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.currentConfigurationValues=i())}),e.qZA()()(),e.TgZ(67,"div",39)(68,"cd-form-button-panel",40),e.NdJ("submitActionEvent",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.submit())}),e.ALo(69,"titlecase"),e.ALo(70,"upperFirst"),e.qZA()()()()()}if(2&t){const _=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.form),e.xp6(6),e.pQV(e.lcZ(6,26,o.action))(e.lcZ(7,28,o.resource)),e.QtT(5),e.xp6(7),e.Q6J("ngIf",o.form.showError("name",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"uniqueName")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"rbdPool")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"pattern")),e.xp6(8),e.Q6J("ngForOf",o.data.poolTypes),e.xp6(1),e.Q6J("ngIf",o.form.showError("poolType",_,"required")),e.xp6(1),e.Q6J("ngIf",o.isReplicated||o.isErasure),e.xp6(5),e.Q6J("customBadges",!0)("customBadgeValidators",o.data.applications.validators)("messages",o.data.applications.messages)("data",o.data.applications.selected)("options",o.data.applications.available)("selectionLimit",4),e.xp6(1),e.Q6J("ngIf",o.data.applications.selected<=0),e.xp6(1),e.Q6J("ngIf",o.isErasure||o.isReplicated),e.xp6(1),e.Q6J("ngIf",o.info.is_all_bluestore),e.xp6(16),e.Q6J("ngIf",o.form.showError("max_bytes",_,"pattern")),e.xp6(13),e.Q6J("ngIf",o.form.showError("max_objects",_,"min")),e.xp6(1),e.Q6J("hidden",o.isErasure||-1===o.data.applications.selected.indexOf("rbd")),e.xp6(1),e.Q6J("form",o.form)("initializeData",o.initializeConfigData),e.xp6(2),e.Q6J("form",o.form)("submitText",e.lcZ(69,30,o.action)+" "+e.lcZ(70,32,o.resource))}}let Ue=(()=>{class t extends M_.E{constructor(_,o,i,s,c,d,P,p,R,h,S){super(),this.dimlessBinaryPipe=_,this.route=o,this.router=i,this.modalService=s,this.poolService=c,this.authStorageService=d,this.formatter=P,this.taskWrapper=p,this.ecpService=R,this.crushRuleService=h,this.actionLabels=S,this.editing=!1,this.isReplicated=!1,this.isErasure=!1,this.data=new $o,this.externalPgChange=!1,this.current={rules:[]},this.initializeConfigData=new R_.t(1),this.currentConfigurationValues={},this.icons=b.P,this.crushUsage=void 0,this.ecpUsage=void 0,this.crushRuleMaxSize=10,this.editing=this.router.url.startsWith(`/pool/${M.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource="pool",this.authenticate(),this.createForm()}authenticate(){if(this.permission=this.authStorageService.getPermissions().pool,!this.permission.read||!this.permission.update&&this.editing||!this.permission.create&&!this.editing)throw new m_._2}createForm(){const _=new Ne.d({mode:new l.p4("none"),algorithm:new l.p4(""),minBlobSize:new l.p4("",{updateOn:"blur"}),maxBlobSize:new l.p4("",{updateOn:"blur"}),ratio:new l.p4("",{updateOn:"blur"})});this.form=new Ne.d({name:new l.p4("",{validators:[l.kI.pattern(/^[.A-Za-z0-9_/-]+$/),l.kI.required,E.h.custom("rbdPool",()=>this.form&&this.form.getValue("name").includes("/")&&this.data&&-1!==this.data.applications.selected.indexOf("rbd"))]}),poolType:new l.p4("",{validators:[l.kI.required]}),crushRule:new l.p4(null,{validators:[E.h.custom("tooFewOsds",o=>this.info&&o&&this.info.osd_count<1),E.h.custom("required",o=>this.isReplicated&&this.info.crush_rules_replicated.length>0&&!o)]}),size:new l.p4("",{updateOn:"blur"}),erasureProfile:new l.p4(null),pgNum:new l.p4("",{validators:[l.kI.required]}),pgAutoscaleMode:new l.p4(null),ecOverwrites:new l.p4(!1),compression:_,max_bytes:new l.p4(""),max_objects:new l.p4(0)},[E.h.custom("form",()=>null)])}ngOnInit(){this.poolService.getInfo().subscribe(_=>{this.initInfo(_),this.editing?this.initEditMode():(this.setAvailableApps(),this.loadingReady()),this.listenToChanges(),this.setComplexValidators()})}initInfo(_){this.pgAutoscaleModes=_.pg_autoscale_modes,this.form.silentSet("pgAutoscaleMode",_.pg_autoscale_default_mode),this.form.silentSet("algorithm",_.bluestore_compression_algorithm),this.info=_,this.initEcp(_.erasure_code_profiles)}initEcp(_){this.setListControlStatus("erasureProfile",_),this.ecProfiles=_}setListControlStatus(_,o){const i=this.form.get(_),s=i.value;1!==o.length||s&&g().isEqual(s,o[0])?0===o.length&&s&&i.setValue(null):i.setValue(o[0]),o.length<=1?i.enabled&&i.disable():i.disabled&&i.enable()}initEditMode(){this.disableForEdit(),this.routeParamsSubscribe=this.route.params.subscribe(_=>this.poolService.get(_.name).subscribe(o=>{this.data.pool=o,this.initEditFormData(o),this.loadingReady()}))}disableForEdit(){["poolType","crushRule","size","erasureProfile","ecOverwrites"].forEach(_=>this.form.get(_).disable())}initEditFormData(_){this.initializeConfigData.next({initialData:_.configuration,sourceType:h_.h.pool}),this.poolTypeChange(_.type);const o=this.info.crush_rules_replicated.concat(this.info.crush_rules_erasure),i={name:_.pool_name,poolType:_.type,crushRule:o.find(s=>s.rule_name===_.crush_rule),size:_.size,erasureProfile:this.ecProfiles.find(s=>s.name===_.erasure_code_profile),pgAutoscaleMode:_.pg_autoscale_mode,pgNum:_.pg_num,ecOverwrites:_.flags_names.includes("ec_overwrites"),mode:_.options.compression_mode,algorithm:_.options.compression_algorithm,minBlobSize:this.dimlessBinaryPipe.transform(_.options.compression_min_blob_size),maxBlobSize:this.dimlessBinaryPipe.transform(_.options.compression_max_blob_size),ratio:_.options.compression_required_ratio,max_bytes:this.dimlessBinaryPipe.transform(_.quota_max_bytes),max_objects:_.quota_max_objects};Object.keys(i).forEach(s=>{const c=i[s];!g().isUndefined(c)&&""!==c&&this.form.silentSet(s,c)}),this.data.pgs=this.form.getValue("pgNum"),this.setAvailableApps(this.data.applications.default.concat(_.application_metadata)),this.data.applications.selected=_.application_metadata}setAvailableApps(_=this.data.applications.default){this.data.applications.available=g().uniq(_.sort()).map(o=>new C_.$(!1,o,""))}listenToChanges(){this.listenToChangesDuringAddEdit(),this.editing||this.listenToChangesDuringAdd()}listenToChangesDuringAddEdit(){this.form.get("pgNum").valueChanges.subscribe(_=>{const o=_-this.data.pgs;1===Math.abs(o)&&2!==_?this.doPgPowerJump(o):this.data.pgs=_})}doPgPowerJump(_){const o=this.calculatePgPower()+_;this.setPgs(-1===_?Math.round(o):Math.floor(o))}calculatePgPower(_=this.form.getValue("pgNum")){return Math.log(_)/Math.log(2)}setPgs(_){const o=Math.pow(2,_<0?0:_);this.data.pgs=o,this.form.silentSet("pgNum",o)}listenToChangesDuringAdd(){this.form.get("poolType").valueChanges.subscribe(_=>{this.poolTypeChange(_)}),this.form.get("crushRule").valueChanges.subscribe(_=>{this.crushDeletionBtn&&this.crushDeletionBtn.isOpen()&&this.crushDeletionBtn.close(),_&&(this.setCorrectMaxSize(_),this.crushRuleIsUsedBy(_.rule_name),this.replicatedRuleChange(),this.pgCalc())}),this.form.get("size").valueChanges.subscribe(()=>{this.pgCalc()}),this.form.get("erasureProfile").valueChanges.subscribe(_=>{this.ecpDeletionBtn&&this.ecpDeletionBtn.isOpen()&&this.ecpDeletionBtn.close(),_&&(this.ecpIsUsedBy(_.name),this.pgCalc())}),this.form.get("mode").valueChanges.subscribe(()=>{["minBlobSize","maxBlobSize","ratio"].forEach(_=>{this.form.get(_).updateValueAndValidity({emitEvent:!1})})}),this.form.get("minBlobSize").valueChanges.subscribe(()=>{this.form.get("maxBlobSize").updateValueAndValidity({emitEvent:!1})}),this.form.get("maxBlobSize").valueChanges.subscribe(()=>{this.form.get("minBlobSize").updateValueAndValidity({emitEvent:!1})})}poolTypeChange(_){if("replicated"===_?this.setTypeBooleans(!0,!1):this.setTypeBooleans(!1,"erasure"===_),!_||!this.info)return void(this.current.rules=[]);const o=this.info["crush_rules_"+_]||[];this.current.rules=o,!this.editing&&(this.isReplicated&&this.setListControlStatus("crushRule",o),this.replicatedRuleChange(),this.pgCalc())}setTypeBooleans(_,o){this.isReplicated=_,this.isErasure=o}replicatedRuleChange(){if(!this.isReplicated)return;const _=this.form.get("size");let o=this.form.getValue("size")||3;const i=this.getMinSize(),s=this.getMaxSize();o<i?o=i:o>s&&(o=s),o!==_.value&&this.form.silentSet("size",o)}getMinSize(){return!this.info||this.info.osd_count<1?0:1}getMaxSize(){const _=this.form.getValue("crushRule");return this.info?_?_.usable_size:Math.min(this.info.osd_count,3):0}pgCalc(){const _=this.form.getValue("poolType");if(!this.info||this.form.get("pgNum").dirty||!_)return;const o=100*this.info.osd_count,i=this.isReplicated?this.replicatedPgCalc(o):this.erasurePgCalc(o);if(!i)return;const s=this.data.pgs;this.alignPgs(i),this.externalPgChange||(this.externalPgChange=s!==this.data.pgs)}setCorrectMaxSize(_=this.form.getValue("crushRule")){if(!_)return;const i=T.searchFailureDomains(this.info.nodes,_.steps[0].item_name)[_.steps[1].type];_.usable_size=Math.min(i?i.length:this.crushRuleMaxSize,this.crushRuleMaxSize)}replicatedPgCalc(_){const o=this.form.get("size"),i=o.value;return o.valid&&i>0?_/i:0}erasurePgCalc(_){const o=this.form.get("erasureProfile"),i=o.value;return(o.valid||o.disabled)&&i?_/(i.k+i.m):0}alignPgs(_=this.form.getValue("pgNum")){this.setPgs(Math.round(this.calculatePgPower(_<1?1:_)))}setComplexValidators(){this.editing?this.form.get("name").setValidators([this.form.get("name").validator,E.h.custom("uniqueName",_=>this.data.pool&&this.info&&-1!==this.info.pool_names.indexOf(_)&&this.info.pool_names.indexOf(_)!==this.info.pool_names.indexOf(this.data.pool.pool_name))]):(E.h.validateIf(this.form.get("size"),()=>this.isReplicated,[E.h.custom("min",_=>this.form.getValue("size")&&_<this.getMinSize()),E.h.custom("max",_=>this.form.getValue("size")&&this.getMaxSize()<_)]),this.form.get("name").setValidators([this.form.get("name").validator,E.h.custom("uniqueName",_=>this.info&&-1!==this.info.pool_names.indexOf(_))])),this.setCompressionValidators()}setCompressionValidators(){E.h.validateIf(this.form.get("minBlobSize"),()=>this.hasCompressionEnabled(),[l.kI.min(0),E.h.custom("maximum",_=>this.oddBlobSize(_,this.form.getValue("maxBlobSize")))]),E.h.validateIf(this.form.get("maxBlobSize"),()=>this.hasCompressionEnabled(),[l.kI.min(0),E.h.custom("minimum",_=>this.oddBlobSize(this.form.getValue("minBlobSize"),_))]),E.h.validateIf(this.form.get("ratio"),()=>this.hasCompressionEnabled(),[l.kI.min(0),l.kI.max(1)])}oddBlobSize(_,o){const i=this.formatter.toBytes(_),s=this.formatter.toBytes(o);return Boolean(i&&s&&i>=s)}hasCompressionEnabled(){return this.form.getValue("mode")&&"none"!==this.form.get("mode").value.toLowerCase()}describeCrushStep(_){return[_.op.replace("_"," "),_.item_name||"",_.type?_.num+" type "+_.type:""].join(" ")}addErasureCodeProfile(){this.addModal(bo,_=>this.reloadECPs(_))}addModal(_,o){this.hideOpenTooltips(),this.modalService.show(_).componentInstance.submitAction.subscribe(s=>{o(s.name)})}hideOpenTooltips(){const _=o=>o&&o.isOpen()&&o.close();_(this.ecpDeletionBtn),_(this.crushDeletionBtn)}reloadECPs(_){this.reloadList({newItemName:_,getInfo:()=>this.ecpService.list(),initInfo:o=>this.initEcp(o),findNewItem:()=>this.ecProfiles.find(o=>o.name===_),controlName:"erasureProfile"})}reloadList({newItemName:_,getInfo:o,initInfo:i,findNewItem:s,controlName:c}){this.modalSubscription&&this.modalSubscription.unsubscribe(),o().subscribe(d=>{if(i(d),!_)return;const P=s();P&&this.form.get(c).setValue(P)})}deleteErasureCodeProfile(){this.deletionModal({value:this.form.getValue("erasureProfile"),usage:this.ecpUsage,deletionBtn:this.ecpDeletionBtn,dataName:"erasureInfo",getTabs:()=>this.ecpInfoTabs,tabPosition:"used-by-pools",nameAttribute:"name",itemDescription:"erasure code profile",reloadFn:()=>this.reloadECPs(),deleteFn:_=>this.ecpService.delete(_),taskName:"ecp/delete"})}deletionModal({value:_,usage:o,deletionBtn:i,dataName:s,getTabs:c,tabPosition:d,nameAttribute:P,itemDescription:p,reloadFn:R,deleteFn:h,taskName:S}){if(!_)return;if(o)return i.animation=!1,i.toggle(),this.data[s]=!0,void setTimeout(()=>{const u=c();u&&u.select(d)},50);const m=_[P];this.modalService.show(Fe.M,{itemDescription:p,itemNames:[m],submitActionObservable:()=>{const u=h(m);return u.subscribe(()=>R()),this.taskWrapper.wrapTaskAroundCall({task:new v.R(S,{name:m}),call:u})}})}addCrushRule(){this.addModal(y_,_=>this.reloadCrushRules(_))}reloadCrushRules(_){this.reloadList({newItemName:_,getInfo:()=>this.poolService.getInfo(),initInfo:o=>{this.initInfo(o),this.poolTypeChange("replicated")},findNewItem:()=>this.info.crush_rules_replicated.find(o=>o.rule_name===_),controlName:"crushRule"})}deleteCrushRule(){this.deletionModal({value:this.form.getValue("crushRule"),usage:this.crushUsage,deletionBtn:this.crushDeletionBtn,dataName:"crushInfo",getTabs:()=>this.crushInfoTabs,tabPosition:"used-by-pools",nameAttribute:"rule_name",itemDescription:"crush rule",reloadFn:()=>this.reloadCrushRules(),deleteFn:_=>this.crushRuleService.delete(_),taskName:"crushRule/delete"})}crushRuleIsUsedBy(_){this.crushUsage=_?this.info.used_rules[_]:void 0}ecpIsUsedBy(_){this.ecpUsage=_?this.info.used_profiles[_]:void 0}submit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _={pool:this.form.getValue("name")};this.assignFormFields(_,[{externalFieldName:"pool_type",formControlName:"poolType"},{externalFieldName:"pg_autoscale_mode",formControlName:"pgAutoscaleMode",editable:!0},{externalFieldName:"pg_num",formControlName:"pgNum",replaceFn:i=>"on"===this.form.getValue("pgAutoscaleMode")?1:i,editable:!0},this.isReplicated?{externalFieldName:"size",formControlName:"size"}:{externalFieldName:"erasure_code_profile",formControlName:"erasureProfile",attr:"name"},{externalFieldName:"rule_name",formControlName:"crushRule",replaceFn:i=>this.isReplicated?i&&i.rule_name:void 0},{externalFieldName:"quota_max_bytes",formControlName:"max_bytes",replaceFn:this.formatter.toBytes,editable:!0,resetValue:this.editing?0:void 0},{externalFieldName:"quota_max_objects",formControlName:"max_objects",editable:!0,resetValue:this.editing?0:void 0}]),this.info.is_all_bluestore&&(this.assignFormField(_,{externalFieldName:"flags",formControlName:"ecOverwrites",replaceFn:()=>this.isErasure?["ec_overwrites"]:void 0}),"none"!==this.form.getValue("mode")?this.assignFormFields(_,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:i=>this.hasCompressionEnabled()&&i},{externalFieldName:"compression_algorithm",formControlName:"algorithm",editable:!0},{externalFieldName:"compression_min_blob_size",formControlName:"minBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_max_blob_size",formControlName:"maxBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_required_ratio",formControlName:"ratio",editable:!0,resetValue:0}]):this.editing&&this.assignFormFields(_,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:()=>"unset"},{externalFieldName:"srcpool",formControlName:"name",editable:!0,replaceFn:()=>this.data.pool.pool_name}]));const o=this.data.applications.selected;(o.length>0||this.editing)&&(_.application_metadata=o),this.isReplicated&&!g().isEmpty(this.currentConfigurationValues)&&(_.configuration=this.currentConfigurationValues),this.triggerApiTask(_)}assignFormFields(_,o){o.forEach(i=>this.assignFormField(_,i))}assignFormField(_,{externalFieldName:o,formControlName:i,attr:s,replaceFn:c,editable:d,resetValue:P}){if(this.editing&&(!d||this.form.get(i).pristine))return;const p=this.form.getValue(i);let R=c?c(p):s?g().get(p,s):p;if(!p||!R){if(!d||g().isUndefined(P))return;R=P}_[o]=R}triggerApiTask(_){this.taskWrapper.wrapTaskAroundCall({task:new v.R("pool/"+(this.editing?M.MQ.EDIT:M.MQ.CREATE),{pool_name:_.hasOwnProperty("srcpool")?_.srcpool:_.pool}),call:this.poolService[this.editing?M.MQ.UPDATE:M.MQ.CREATE](_)}).subscribe({error:o=>{g().isObject(o.error)&&"34"===o.error.code&&this.form.get("pgNum").setErrors({34:!0}),this.form.setErrors({cdSubmitButton:!0})},complete:()=>this.router.navigate(["/pool"])})}appSelection(){this.form.get("name").updateValueAndValidity({emitEvent:!1,onlySelf:!0})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(S_.$),e.Y36(Oe.gz),e.Y36(Oe.F0),e.Y36(De.Z),e.Y36(ue.q),e.Y36(xe.j),e.Y36(T_.H),e.Y36(de.P),e.Y36(Me),e.Y36(ve.H),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-form"]],viewQuery:function(_,o){if(1&_&&(e.Gf(Uo,5),e.Gf(Go,5),e.Gf(Ho,5),e.Gf(zo,5)),2&_){let i;e.iGM(i=e.CRH())&&(o.crushInfoTabs=i.first),e.iGM(i=e.CRH())&&(o.crushDeletionBtn=i.first),e.iGM(i=e.CRH())&&(o.ecpInfoTabs=i.first),e.iGM(i=e.CRH())&&(o.ecpDeletionBtn=i.first)}},features:[e.qOj],decls:1,vars:1,consts:function(){let n,_,o,i,s,c,d,P,p,R,h,S,m,u,A,$,I,D,x,y,Z,U,G,H,z,q,X,Q,w,J,k,V,Y,B,j,K,N,W,ee,_e,oe,te,ne,ie,se,ae,le,re,ce,O,Xe,Qe,we,Je,ke,Ve,Ye,Be,je,Ke,We,e_,__,o_,t_,n_,i_,s_,a_,l_,r_,c_,O_,d_,u_,P_;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Name...",i="Pool type",s="-- Select a pool type --",c="Applications",d="Pools should be associated with an application tag",P="Quotas",p="Max bytes",R="Leave it blank or specify 0 to disable this quota.",h="A valid quota should be greater than 0.",S="e.g., 10GiB",m="Max objects",u="Leave it blank or specify 0 to disable this quota.",A="A valid quota should be greater than 0.",$="This field is required!",I="The chosen Ceph pool name is already in use.",D="It's not possible to create an RBD pool with '/' in the name. Please change the name or remove 'rbd' from the applications list.",x="Pool name can only contain letters, numbers, '.', '-', '_' or '/'.",y="This field is required!",Z="PG Autoscale",U="Placement groups",G="Calculation help",H="This field is required!",z="At least one placement group is needed!",q="Your cluster can't handle this many PGs. Please recalculate the PG amount needed.",X="The current PGs settings were calculated for you, you should make sure the values suit your needs before submit.",Q="Replicated size",w="Minimum: " + "\ufffd0\ufffd" + "",J="Maximum: " + "\ufffd0\ufffd" + "",k="The size specified is out of range. A value from " + "\ufffd0\ufffd" + " to " + "\ufffd1\ufffd" + " is usable.",V="A size of 1 will not create a replication of the object. The 'Replicated size' includes the object itself.",Y="Flags",B="EC Overwrites",j="CRUSH",K="Erasure code profile",N="This profile can't be deleted as it is in use.",W="Loading...",ee="-- No erasure code profile available --",_e="-- Select an erasure code profile --",oe="Profile",te="Used by pools",ne="Profile is not in use.",ie="Crush ruleset",se="A new crush ruleset will be implicitly created.",ae="Crush ruleset",le="There are no rules.",re="-- Select a crush rule --",ce="Placement and\n                          replication strategies or distribution policies that allow to\n                          specify how CRUSH places data replicas.",O="This rule can't be deleted as it is in use.",Xe="Crush rule",Qe="Crush steps",we="Used by pools",Je="Rule is not in use.",ke="This field is required!",Ve="The rule can't be used in the current cluster as it has too few OSDs to meet the minimum required OSD by this rule.",Ye="Compression",Be="Mode",je="Algorithm",Ke="Minimum blob size",We="e.g., 128KiB",e_="Maximum blob size",__="e.g., 512KiB",o_="Ratio",t_="Compression ratio",n_="Loading...",i_="-- No erasure compression algorithm available --",s_="Value should be greater than 0",a_="Value should be less than the maximum blob size",l_="Size must be a number or in a valid format. eg: 5 GiB",r_="Value should be greater than 0",c_="Value should be greater than the minimum blob size",O_="Size must be a number or in a valid format. eg: 5 GiB",d_="Value should be between 0.0 and 1.0",u_="Size must be a number or in a valid format. eg: 5 GiB",P_="The value should be greater or equal to 0",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],n,[1,"card-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],_,[1,"cd-col-form-input"],["id","name","name","name","type","text","placeholder",o,"formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","poolType",1,"cd-col-form-label","required"],i,["id","poolType","formControlName","poolType","name","poolType",1,"form-select"],["ngValue",""],s,[3,"value",4,"ngFor","ngForOf"],[4,"ngIf"],["for","applications",1,"cd-col-form-label"],c,["id","applications",3,"customBadges","customBadgeValidators","messages","data","options","selectionLimit","selection"],["title",d,3,"class",4,"ngIf"],["formGroupName","compression",4,"ngIf"],P,["for","max_bytes",1,"cd-col-form-label"],p,R,h,["id","max_bytes","name","max_bytes","type","text","formControlName","max_bytes","placeholder",S,"defaultUnit","GiB","cdDimlessBinary","",1,"form-control"],["for","max_objects",1,"cd-col-form-label"],m,u,A,["id","max_objects","min","0","name","max_objects","type","number","formControlName","max_objects",1,"form-control"],[3,"hidden"],[3,"form","initializeData","changes"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],$,I,D,x,[3,"value"],y,["for","pgAutoscaleMode",1,"cd-col-form-label"],Z,["id","pgAutoscaleMode","name","pgAutoscaleMode","formControlName","pgAutoscaleMode",1,"form-select"],["class","form-group row",4,"ngIf"],["for","pgNum",1,"cd-col-form-label","required"],U,["id","pgNum","name","pgNum","formControlName","pgNum","min","1","type","number","required","",1,"form-control",3,"focus","blur"],[1,"form-text","text-muted"],["section","pgs","docText",G],["class","form-text text-muted",4,"ngIf"],H,z,q,X,["for","size",1,"cd-col-form-label","required"],Q,["id","size","name","size","type","number","formControlName","size",1,"form-control",3,"max","min"],["class","text-warning-dark",4,"ngIf"],[1,"list-inline"],w,J,k,[1,"text-warning-dark"],V,[1,"cd-col-form-label"],Y,[1,"custom-control","custom-checkbox"],["type","checkbox","id","ec-overwrites","formControlName","ecOverwrites",1,"custom-control-input"],["for","ec-overwrites",1,"custom-control-label"],B,["title",d],j,["for","erasureProfile",1,"cd-col-form-label"],K,[1,"input-group","mb-1"],["id","erasureProfile","name","erasureProfile","formControlName","erasureProfile",1,"form-select"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],["id","ecp-info-button","type","button",1,"btn","btn-light",3,"ngClass","click"],["aria-hidden","true",3,"ngClass"],["class","btn btn-light","type","button",3,"click",4,"ngIf"],["class","btn btn-light","type","button","ngbTooltip",N,"triggers","manual",3,"click",4,"ngIf"],["class","form-text text-muted","id","ecp-info-block",4,"ngIf"],W,[3,"ngValue"],ee,_e,["type","button",1,"btn","btn-light",3,"click"],["type","button","ngbTooltip",N,"triggers","manual",1,"btn","btn-light",3,"click"],["ecpDeletionBtn","ngbTooltip"],["id","ecp-info-block",1,"form-text","text-muted"],["ngbNav","",1,"nav-tabs"],["ecpInfoTabs","ngbNav"],["ngbNavItem","ecp-info"],["ngbNavLink",""],oe,["ngbNavContent",""],["ngbNavItem","used-by-pools"],te,[3,"ngbNavOutlet"],[3,"renderObjects","hideKeys","data","autoReload"],["ecpIsNotUsed",""],[4,"ngIf","ngIfElse"],ne,[4,"ngFor","ngForOf"],["for","crushRule",1,"cd-col-form-label"],ie,se,ae,["noRules",""],le,[1,"input-group"],["id","crushRule","formControlName","crushRule","name","crushSet",1,"form-select"],re,["id","crush-info-button","type","button","ngbTooltip",ce,1,"btn","btn-light",3,"ngClass","click"],["class","btn btn-light","type","button","ngbTooltip",O,"triggers","manual",3,"click",4,"ngIf"],["class","form-text text-muted","id","crush-info-block",4,"ngIf"],["type","button","ngbTooltip",O,"triggers","manual",1,"btn","btn-light",3,"click"],["crushDeletionBtn","ngbTooltip"],["id","crush-info-block",1,"form-text","text-muted"],["crushInfoTabs","ngbNav"],["ngbNavItem","crush-rule-info"],Xe,["ngbNavItem","crush-rule-steps"],Qe,we,["ruleIsNotUsed",""],Je,ke,Ve,["formGroupName","compression"],Ye,["for","mode",1,"cd-col-form-label"],Be,["id","mode","name","mode","formControlName","mode",1,"form-select"],["for","algorithm",1,"cd-col-form-label"],je,["id","algorithm","name","algorithm","formControlName","algorithm",1,"form-select"],["for","minBlobSize",1,"cd-col-form-label"],Ke,["id","minBlobSize","name","minBlobSize","formControlName","minBlobSize","type","text","min","0","placeholder",We,"defaultUnit","KiB","cdDimlessBinary","",1,"form-control"],["for","maxBlobSize",1,"cd-col-form-label"],e_,["id","maxBlobSize","type","text","min","0","formControlName","maxBlobSize","placeholder",__,"defaultUnit","KiB","cdDimlessBinary","",1,"form-control"],["for","ratio",1,"cd-col-form-label"],o_,["id","ratio","name","ratio","formControlName","ratio","type","number","min","0","max","1","step","0.1","placeholder",t_,1,"form-control"],n_,i_,s_,a_,l_,r_,c_,O_,d_,u_,P_]},template:function(_,o){1&_&&e.YNc(0,_n,71,34,"div",0),2&_&&e.Q6J("cdFormLoading",o.loading)},dependencies:[C.mk,C.sg,C.O5,f.uN,f.Pz,f.nv,f.Vx,f.tO,f.Dy,Pe.S,Io.m,Do.K,fe.p,ye.b,Ee.U,xo.Q,yo.y,ge.o,pe.b,Re.P,me.V,l._Y,l.YN,l.Kr,l.Fj,l.wV,l.Wl,l.EJ,l.JJ,l.JL,l.Q7,l.qQ,l.Fd,l.sg,l.u,l.x0,f._L,Zo.d,C.rS,Ce.m],styles:[".icon-warning-color[_ngcontent-%COMP%]{margin-left:3px}"]}),t})();var on=r(19773),tn=r(20687),nn=r(68136),he=r(69158),Se=r(59019),L=r(99466),sn=r(91801),an=r(68774),ln=r(66369),Ge=r(38047),Te=r(51847);class rn{constructor(n){this.pool_name=n}}var cn=r(64724),On=r(60251),He=r(76317),dn=r(94928),un=r(23240),ze=r(51295),Pn=r(59376),fn=r(42176);function En(t,n){if(1&t&&e._UZ(0,"cd-table-key-value",12),2&t){const _=e.oxw(2);e.Q6J("renderObjects",!0)("data",_.poolDetails)("autoReload",!1)}}function gn(t,n){if(1&t&&e._UZ(0,"cd-grafana",15),2&t){const _=e.oxw(3);e.MGl("grafanaPath","ceph-pool-detail?var-pool_name=",_.selection.pool_name,""),e.Q6J("type","metrics")}}function pn(t,n){1&t&&(e.ynx(0,13),e.TgZ(1,"a",5),e.SDv(2,14),e.qZA(),e.YNc(3,gn,1,2,"ng-template",7),e.BQk())}function Rn(t,n){if(1&t&&e._UZ(0,"cd-rbd-configuration-table",18),2&t){const _=e.oxw(3);e.Q6J("data",_.selectedPoolConfiguration)}}function mn(t,n){1&t&&(e.ynx(0,16),e.TgZ(1,"a",5),e.SDv(2,17),e.qZA(),e.YNc(3,Rn,1,1,"ng-template",7),e.BQk())}function Cn(t,n){if(1&t&&e._UZ(0,"cd-table",21),2&t){const _=e.oxw(3);e.Q6J("data",_.cacheTiers)("columns",_.cacheTierColumns)("autoSave",!1)}}function Mn(t,n){1&t&&(e.ynx(0,19),e.TgZ(1,"a",5),e.SDv(2,20),e.qZA(),e.YNc(3,Cn,1,3,"ng-template",7),e.BQk())}function hn(t,n){if(1&t&&(e.ynx(0,1),e.TgZ(1,"nav",2,3),e.ynx(3,4),e.TgZ(4,"a",5),e.SDv(5,6),e.qZA(),e.YNc(6,En,1,3,"ng-template",7),e.BQk(),e.YNc(7,pn,4,0,"ng-container",8),e.YNc(8,mn,4,0,"ng-container",9),e.YNc(9,Mn,4,0,"ng-container",10),e.qZA(),e._UZ(10,"div",11),e.BQk()),2&t){const _=e.MAs(2),o=e.oxw();e.xp6(7),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngIf","replicated"===o.selection.type),e.xp6(1),e.Q6J("ngIf",(null==o.selection.tiers?null:o.selection.tiers.length)>0),e.xp6(1),e.Q6J("ngbNavOutlet",_)}}let Sn=(()=>{class t{constructor(_){this.poolService=_,this.cacheTierColumns=[],this.omittedPoolAttributes=["cdExecuting","cdIsBinary","stats"],this.cacheTierColumns=[{prop:"pool_name",name:"Name",flexGrow:3},{prop:"cache_mode",name:"Cache Mode",flexGrow:2},{prop:"cache_min_evict_age",name:"Min Evict Age",flexGrow:2},{prop:"cache_min_flush_age",name:"Min Flush Age",flexGrow:2},{prop:"target_max_bytes",name:"Target Max Bytes",flexGrow:2},{prop:"target_max_objects",name:"Target Max Objects",flexGrow:2}]}ngOnChanges(){this.selection&&(this.poolService.getConfiguration(this.selection.pool_name).subscribe(_=>{ze.T.updateChanged(this,{selectedPoolConfiguration:_})}),ze.T.updateChanged(this,{poolDetails:g().omit(this.selection,this.omittedPoolAttributes)}))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ue.q))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-details"]],inputs:{cacheTiers:"cacheTiers",permissions:"permissions",selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let n,_,o,i,s;return n="Details",_="Performance Details",o="Pool details",i="Configuration",s="Cache Tiers Details",[["cdTableDetail","",4,"ngIf"],["cdTableDetail",""],["ngbNav","","cdStatefulTab","pool-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],n,["ngbNavContent",""],["ngbNavItem","performance-details",4,"ngIf"],["ngbNavItem","configuration",4,"ngIf"],["ngbNavItem","cache-tiers-details",4,"ngIf"],[3,"ngbNavOutlet"],[3,"renderObjects","data","autoReload"],["ngbNavItem","performance-details"],_,["title",o,"uid","-xyV8KCiz","grafanaStyle","three",3,"grafanaPath","type"],["ngbNavItem","configuration"],i,[3,"data"],["ngbNavItem","cache-tiers-details"],s,["columnMode","flex",3,"data","columns","autoSave"]]},template:function(_,o){1&_&&e.YNc(0,hn,11,4,"ng-container",0),2&_&&e.Q6J("ngIf",o.selection)},dependencies:[C.O5,f.uN,f.Pz,f.nv,f.Vx,f.tO,f.Dy,He.F,Se.a,ye.b,Pn.m,fn.P],changeDetection:0}),t})();const Tn=["poolUsageTpl"],Ln=["poolConfigurationSourceTpl"];function An(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table",9,10),e.NdJ("fetchData",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.taskListService.fetch())})("setExpandedRow",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.setExpandedRow(i))})("updateSelection",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.updateSelection(i))}),e._UZ(2,"cd-table-actions",11)(3,"cd-pool-details",12),e.qZA()}if(2&t){const _=e.oxw();e.Q6J("data",_.pools)("columns",_.columns)("hasDetails",!0)("status",_.tableStatus)("autoReload",-1),e.xp6(2),e.Q6J("permission",_.permissions.pool)("selection",_.selection)("tableActions",_.tableActions),e.xp6(1),e.Q6J("selection",_.expandedRow)("permissions",_.permissions)("cacheTiers",_.cacheTiers)}}function Fn(t,n){1&t&&e._UZ(0,"cd-grafana",14),2&t&&e.Q6J("grafanaPath","ceph-pools-overview?")("type","metrics")}function Nn(t,n){1&t&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,13),e.qZA(),e.YNc(3,Fn,1,2,"ng-template",5),e.BQk())}function bn(t,n){if(1&t&&e._UZ(0,"cd-usage-bar",16),2&t){const _=e.oxw().row;e.Q6J("total",_.stats.bytes_used.latest+_.stats.avail_raw.latest)("used",_.stats.bytes_used.latest)("title",_.pool_name)}}function vn(t,n){if(1&t&&e.YNc(0,bn,1,3,"cd-usage-bar",15),2&t){const _=n.row;e.Q6J("ngIf",null==_.stats||null==_.stats.avail_raw?null:_.stats.avail_raw.latest)}}const Le="pool";let $n=(()=>{class t extends nn.o{constructor(_,o,i,s,c,d,P,p,R,h,S){super(),this.poolService=_,this.taskWrapper=o,this.ecpService=i,this.authStorageService=s,this.taskListService=c,this.modalService=d,this.pgCategoryService=P,this.dimlessPipe=p,this.urlBuilder=R,this.configurationService=h,this.actionLabels=S,this.selection=new an.r,this.executingTasks=[],this.tableStatus=new he.E,this.cacheTiers=[],this.monAllowPoolDelete=!1,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"create",icon:b.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:b.P.edit,routerLink:()=>this.urlBuilder.getEdit(encodeURIComponent(this.selection.first().pool_name)),name:this.actionLabels.EDIT},{permission:"delete",icon:b.P.destroy,click:()=>this.deletePoolModal(),name:this.actionLabels.DELETE,disable:this.getDisableDesc.bind(this)}],this.permissions.configOpt.read&&this.configurationService.get("mon_allow_pool_delete").subscribe(m=>{if(g().has(m,"value")){const u=g().find(m.value,A=>"mon"===A.section)||{value:!1};this.monAllowPoolDelete="true"===u.value}})}ngOnInit(){const _=(o,i,s)=>g().get(i,o)>g().get(s,o)?1:-1;this.columns=[{prop:"pool_name",name:"Name",flexGrow:4,cellTransformation:L.e.executing},{prop:"data_protection",name:"Data Protection",cellTransformation:L.e.badge,customTemplateConfig:{class:"badge-background-gray"},flexGrow:1.3},{prop:"application_metadata",name:"Applications",cellTransformation:L.e.badge,customTemplateConfig:{class:"badge-background-primary"},flexGrow:1.5},{prop:"pg_status",name:"PG Status",flexGrow:1.2,cellClass:({row:o,column:i,value:s})=>this.getPgStatusCellClass(o,i,s)},{prop:"crush_rule",name:"Crush Ruleset",isHidden:!0,flexGrow:2},{name:"Usage",prop:"usage",cellTemplate:this.poolUsageTpl,flexGrow:1.2},{prop:"stats.rd_bytes.rates",name:"Read bytes",comparator:(o,i,s,c)=>_("stats.rd_bytes.latest",s,c),cellTransformation:L.e.sparkline,flexGrow:1.5},{prop:"stats.wr_bytes.rates",name:"Write bytes",comparator:(o,i,s,c)=>_("stats.wr_bytes.latest",s,c),cellTransformation:L.e.sparkline,flexGrow:1.5},{prop:"stats.rd.rate",name:"Read ops",flexGrow:1,pipe:this.dimlessPipe,cellTransformation:L.e.perSecond},{prop:"stats.wr.rate",name:"Write ops",flexGrow:1,pipe:this.dimlessPipe,cellTransformation:L.e.perSecond}],this.taskListService.init(()=>this.ecpService.list().pipe((0,on.zg)(o=>(this.ecProfileList=o,this.poolService.getList()))),void 0,o=>{this.pools=this.transformPoolsData(o),this.tableStatus=new he.E},()=>{this.table.reset(),this.tableStatus=new he.E(sn.T.ValueException)},o=>o.name.startsWith(`${Le}/`),(o,i)=>i.metadata.pool_name===o.pool_name,{default:o=>new rn(o.pool_name)})}updateSelection(_){this.selection=_}deletePoolModal(){const _=this.selection.first().pool_name;this.modalService.show(Fe.M,{itemDescription:"Pool",itemNames:[_],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new v.R(`${Le}/${M.MQ.DELETE}`,{pool_name:_}),call:this.poolService.delete(_)})})}getPgStatusCellClass(_,o,i){return{"text-right":!0,[`pg-${this.pgCategoryService.getTypeByStates(i)}`]:!0}}getErasureCodeProfile(_){let o="";return g().forEach(this.ecProfileList,i=>{i.name===_&&(o=`EC: ${i.k}+${i.m}`)}),o}transformPoolsData(_){const o=["bytes_used","max_avail","avail_raw","percent_used","rd_bytes","wr_bytes","rd","wr"],i={latest:0,rate:0,rates:[]};return g().forEach(_,s=>{s.pg_status=this.transformPgStatus(s.pg_status);const c={};g().forEach(o,d=>{c[d]=s.stats&&s.stats[d]?s.stats[d]:i}),s.stats=c,s.usage=c.percent_used.latest,!s.cdExecuting&&s.pg_num+s.pg_placement_num!==s.pg_num_target+s.pg_placement_num_target&&(s.cdExecuting="Updating"),["rd_bytes","wr_bytes"].forEach(d=>{s.stats[d].rates=s.stats[d].rates.map(P=>P[1])}),s.cdIsBinary=!0,"erasure"===s.type&&(s.data_protection=this.getErasureCodeProfile(s.erasure_code_profile)),"replicated"===s.type&&(s.data_protection=`replica: \xd7${s.size}`)}),_}transformPgStatus(_){const o=[];return g().forEach(_,(i,s)=>{o.push(`${i} ${s}`)}),o.join(", ")}getSelectionTiers(){if(typeof this.expandedRow<"u"){const _=this.expandedRow.tiers;this.cacheTiers=this.pools.filter(o=>_.includes(o.pool))}}getDisableDesc(){return!this.selection?.hasSelection||!this.monAllowPoolDelete&&"Pool deletion is disabled by the mon_allow_pool_delete configuration setting."}setExpandedRow(_){super.setExpandedRow(_),this.getSelectionTiers()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ue.q),e.Y36(de.P),e.Y36(Me),e.Y36(xe.j),e.Y36(Ge.j),e.Y36(De.Z),e.Y36(tn.j),e.Y36(ln.n),e.Y36(Te.F),e.Y36(cn.e),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-list"]],viewQuery:function(_,o){if(1&_&&(e.Gf(Se.a,5),e.Gf(Tn,7),e.Gf(Ln,5)),2&_){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.poolUsageTpl=i.first),e.iGM(i=e.CRH())&&(o.poolConfigurationSourceTpl=i.first)}},features:[e._Bn([Ge.j,{provide:Te.F,useValue:new Te.F(Le)}]),e.qOj],decls:10,vars:2,consts:function(){let n,_,o;return n="Pools List",_="Overall Performance",o="Ceph pools overview",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],n,["ngbNavContent",""],["ngbNavItem","",4,"cdScope"],[3,"ngbNavOutlet"],["poolUsageTpl",""],["id","pool-list","selectionType","single",3,"data","columns","hasDetails","status","autoReload","fetchData","setExpandedRow","updateSelection"],["table",""],["id","pool-list-actions",1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","","id","pool-list-details",3,"selection","permissions","cacheTiers"],_,["title",o,"uid","z99hzWtmk","grafanaStyle","two",3,"grafanaPath","type"],["decimals","2",3,"total","used","title",4,"ngIf"],["decimals","2",3,"total","used","title"]]},template:function(_,o){if(1&_&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,An,4,11,"ng-template",5),e.BQk(),e.YNc(6,Nn,4,0,"ng-container",6),e.qZA(),e._UZ(7,"div",7),e.YNc(8,vn,1,1,"ng-template",null,8,e.W1O)),2&_){const i=e.MAs(1);e.xp6(6),e.Q6J("cdScope","grafana"),e.xp6(1),e.Q6J("ngbNavOutlet",i)}},dependencies:[C.O5,f.uN,f.Pz,f.nv,f.Vx,f.tO,f.Dy,On.O,He.F,Se.a,dn.K,un.w,Sn],styles:["cd-pool-list .pg-clean{color:#008a00}  cd-pool-list .pg-working{color:#25828e}  cd-pool-list .pg-warning{color:#d48200}  cd-pool-list .pg-unknown{color:#dc3545}"]}),t})(),qe=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[g_.t,C.ez,f.Oz,f_.m,Oe.Bz,l.UX,f.HK,E_.BlockModule]}),t})();const In=[{path:"",component:$n},{path:M.MQ.CREATE,component:Ue,data:{breadcrumbs:M.Qn.CREATE}},{path:`${M.MQ.EDIT}/:name`,component:Ue,data:{breadcrumbs:M.Qn.EDIT}}];let Dn=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[qe,Oe.Bz.forChild(In)]}),t})()}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/25.9d84971ea743706b.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/25.9d84971ea743706b.js
new file mode 100644 (file)
index 0000000..a9bdf87
--- /dev/null
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[25],{39025:(mt,Ae,p)=>{p.r(Ae),p.d(Ae,{BlockModule:()=>yt,RoutedBlockModule:()=>Or});var c=p(88692),r=p(20092),m=p(54247),ne=p(62946),F=p(51389),Ne=p(37496),L=p(79512),j=p(4222),re=p(54462),Pe=p(44466),le=p(23815),C=p.n(le),ce=p(35758),D=p(64762),ie=p(35732),V=p(93523),e=p(64537);let X=class{constructor(s){this.http=s}listTargets(){return this.http.get("api/iscsi/target")}getTarget(s){return this.http.get(`api/iscsi/target/${s}`)}updateTarget(s,t){return this.http.put(`api/iscsi/target/${s}`,t,{observe:"response"})}status(){return this.http.get("ui-api/iscsi/status")}settings(){return this.http.get("ui-api/iscsi/settings")}version(){return this.http.get("ui-api/iscsi/version")}portals(){return this.http.get("ui-api/iscsi/portals")}createTarget(s){return this.http.post("api/iscsi/target",s,{observe:"response"})}deleteTarget(s){return this.http.delete(`api/iscsi/target/${s}`,{observe:"response"})}getDiscovery(){return this.http.get("api/iscsi/discoveryauth")}updateDiscovery(s){return this.http.put("api/iscsi/discoveryauth",s)}overview(){return this.http.get("ui-api/iscsi/overview")}};X.\u0275fac=function(s){return new(s||X)(e.LFG(ie.eN))},X.\u0275prov=e.Yz7({token:X,factory:X.\u0275fac,providedIn:"root"}),X=(0,D.gn)([V.o,(0,D.w6)("design:paramtypes",[ie.eN])],X);var Fe=p(88002),De=p(76189),v=p(19358),be=p(34089);let H=class extends De.S{constructor(s,t){super(),this.http=s,this.rbdConfigurationService=t}isRBDPool(s){return-1!==C().indexOf(s.application_metadata,"rbd")&&!s.pool_name.includes("/")}create(s){return this.http.post("api/block/image",s,{observe:"response"})}delete(s){return this.http.delete(`api/block/image/${s.toStringEncoded()}`,{observe:"response"})}update(s,t){return this.http.put(`api/block/image/${s.toStringEncoded()}`,t,{observe:"response"})}get(s){return this.http.get(`api/block/image/${s.toStringEncoded()}`)}list(s){return this.http.get("api/block/image",{params:s,headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"}).pipe((0,Fe.U)(t=>t.body.map(o=>(o.value.map(i=>(i.configuration&&i.configuration.map(_=>Object.assign(_,this.rbdConfigurationService.getOptionByName(_.name))),i)),o.headers=t.headers,o))))}copy(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/copy`,t,{observe:"response"})}flatten(s){return this.http.post(`api/block/image/${s.toStringEncoded()}/flatten`,null,{observe:"response"})}defaultFeatures(){return this.http.get("api/block/image/default_features")}cloneFormatVersion(){return this.http.get("api/block/image/clone_format_version")}createSnapshot(s,t,o){const i={snapshot_name:t,mirrorImageSnapshot:o};return this.http.post(`api/block/image/${s.toStringEncoded()}/snap`,i,{observe:"response"})}renameSnapshot(s,t,o){const i={new_snap_name:o};return this.http.put(`api/block/image/${s.toStringEncoded()}/snap/${t}`,i,{observe:"response"})}protectSnapshot(s,t,o){const i={is_protected:o};return this.http.put(`api/block/image/${s.toStringEncoded()}/snap/${t}`,i,{observe:"response"})}rollbackSnapshot(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/snap/${t}/rollback`,null,{observe:"response"})}cloneSnapshot(s,t,o){return this.http.post(`api/block/image/${s.toStringEncoded()}/snap/${t}/clone`,o,{observe:"response"})}deleteSnapshot(s,t){return this.http.delete(`api/block/image/${s.toStringEncoded()}/snap/${t}`,{observe:"response"})}listTrash(){return this.http.get("api/block/image/trash/")}createNamespace(s,t){return this.http.post(`api/block/pool/${s}/namespace`,{namespace:t},{observe:"response"})}listNamespaces(s){return this.http.get(`api/block/pool/${s}/namespace/`)}deleteNamespace(s,t){return this.http.delete(`api/block/pool/${s}/namespace/${t}`,{observe:"response"})}moveTrash(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/move_trash`,{delay:t},{observe:"response"})}purgeTrash(s){return this.http.post(`api/block/image/trash/purge/?pool_name=${s}`,null,{observe:"response"})}restoreTrash(s,t){return this.http.post(`api/block/image/trash/${s.toStringEncoded()}/restore`,{new_image_name:t},{observe:"response"})}removeTrash(s,t=!1){return this.http.delete(`api/block/image/trash/${s.toStringEncoded()}/?force=${t}`,{observe:"response"})}};H.\u0275fac=function(s){return new(s||H)(e.LFG(ie.eN),e.LFG(be.n))},H.\u0275prov=e.Yz7({token:H,factory:H.\u0275fac,providedIn:"root"}),(0,D.gn)([(0,D.fM)(1,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[v.N,String,Boolean]),(0,D.w6)("design:returntype",void 0)],H.prototype,"createSnapshot",null),(0,D.gn)([(0,D.fM)(2,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[v.N,String,String]),(0,D.w6)("design:returntype",void 0)],H.prototype,"renameSnapshot",null),(0,D.gn)([(0,D.fM)(2,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[v.N,String,Boolean]),(0,D.w6)("design:returntype",void 0)],H.prototype,"protectSnapshot",null),(0,D.gn)([(0,D.fM)(1,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[v.N,String]),(0,D.w6)("design:returntype",void 0)],H.prototype,"restoreTrash",null),H=(0,D.gn)([V.o,(0,D.w6)("design:paramtypes",[ie.eN,be.n])],H);var N=p(7022),x=p(14745),T=p(65862),k=p(93614),Z=p(95463),z=p(90070),h=p(48168),E=p(76111),u=p(32337),f=p(60312),A=p(30839),M=p(87925),B=p(94276),K=p(56310),J=p(41582);function no(n,s){if(1&n&&(e.TgZ(0,"option",6),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("ngValue",t),e.xp6(1),e.Oqu(t)}}function io(n,s){if(1&n&&(e.TgZ(0,"select",5),e._UZ(1,"option",6),e.YNc(2,no,2,2,"option",7),e.qZA()),2&n){const t=e.oxw();e.s9C("id",t.setting),e.s9C("name",t.setting),e.Q6J("formControlName",t.setting),e.xp6(1),e.Q6J("ngValue",null),e.xp6(1),e.Q6J("ngForOf",t.limits.values)}}function so(n,s){if(1&n&&e._UZ(0,"input",10),2&n){const t=e.oxw(2);e.Q6J("formControlName",t.setting)}}function _o(n,s){if(1&n&&e._UZ(0,"input",11),2&n){const t=e.oxw(2);e.Q6J("formControlName",t.setting)}}function ao(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"br"),e.TgZ(2,"div",12),e._UZ(3,"input",13),e.TgZ(4,"label",14),e._uU(5,"Yes"),e.qZA()(),e.TgZ(6,"div",12),e._UZ(7,"input",13),e.TgZ(8,"label",14),e._uU(9,"No"),e.qZA()(),e.BQk()),2&n){const t=e.oxw(2);e.xp6(3),e.Q6J("id",t.setting+"True")("value",!0)("formControlName",t.setting),e.xp6(1),e.Q6J("for",t.setting+"True"),e.xp6(3),e.Q6J("id",t.setting+"False")("value",!1)("formControlName",t.setting),e.xp6(1),e.Q6J("for",t.setting+"False")}}function ro(n,s){if(1&n&&(e.TgZ(0,"span"),e.YNc(1,so,1,1,"input",8),e.YNc(2,_o,1,1,"input",9),e.YNc(3,ao,10,8,"ng-container",3),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf","int"===t.limits.type),e.xp6(1),e.Q6J("ngIf","str"===t.limits.type),e.xp6(1),e.Q6J("ngIf","bool"===t.limits.type)}}function lo(n,s){if(1&n&&(e.TgZ(0,"span",15),e.ynx(1),e.SDv(2,16),e.BQk(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.limits.min),e.QtT(2)}}function co(n,s){if(1&n&&(e.TgZ(0,"span",15),e.ynx(1),e.SDv(2,17),e.BQk(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.limits.max),e.QtT(2)}}let gt=(()=>{class n{ngOnInit(){const t=[];"min"in this.limits&&t.push(r.kI.min(Number(this.limits.min))),"max"in this.limits&&t.push(r.kI.max(Number(this.limits.max))),this.settingsForm.get(this.setting).setValidators(t)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-setting"]],inputs:{settingsForm:"settingsForm",formDir:"formDir",setting:"setting",limits:"limits"},decls:7,vars:7,consts:function(){let s,t;return s="Must be greater than or equal to " + "\ufffd0\ufffd" + ".",t="Must be less than or equal to " + "\ufffd0\ufffd" + ".",[[1,"form-group",3,"formGroup"],[1,"col-form-label",3,"for"],["class","form-control",3,"id","name","formControlName",4,"ngIf"],[4,"ngIf"],["class","invalid-feedback",4,"ngIf"],[1,"form-control",3,"id","name","formControlName"],[3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf"],["type","number","class","form-control",3,"formControlName",4,"ngIf"],["type","text","class","form-control",3,"formControlName",4,"ngIf"],["type","number",1,"form-control",3,"formControlName"],["type","text",1,"form-control",3,"formControlName"],[1,"custom-control","custom-radio","custom-control-inline"],["type","radio",1,"custom-control-input",3,"id","value","formControlName"],[1,"custom-control-label",3,"for"],[1,"invalid-feedback"],s,t]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"label",1),e._uU(2),e.qZA(),e.YNc(3,io,3,5,"select",2),e.YNc(4,ro,4,3,"span",3),e.YNc(5,lo,3,1,"span",4),e.YNc(6,co,3,1,"span",4),e.qZA()),2&t&&(e.Q6J("formGroup",o.settingsForm),e.xp6(1),e.s9C("for",o.setting),e.xp6(1),e.Oqu(o.setting),e.xp6(1),e.Q6J("ngIf","enum"===o.limits.type),e.xp6(1),e.Q6J("ngIf","enum"!==o.limits.type),e.xp6(1),e.Q6J("ngIf",o.settingsForm.showError(o.setting,o.formDir,"min")),e.xp6(1),e.Q6J("ngIf",o.settingsForm.showError(o.setting,o.formDir,"max")))},dependencies:[c.sg,c.O5,r.YN,r.Kr,r.Fj,r.wV,r.EJ,r._,r.JJ,r.JL,r.sg,r.u,M.o,B.b,K.P,J.V]}),n})();var Je=p(88820);function po(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function uo(n,s){if(1&n&&(e.TgZ(0,"span")(1,"legend",10),e.SDv(2,21),e.qZA(),e.TgZ(3,"div",12)(4,"div",13)(5,"label",22),e.SDv(6,23),e.qZA(),e._UZ(7,"input",24),e.YNc(8,po,2,0,"span",25),e.qZA()(),e.TgZ(9,"div",12)(10,"div",13)(11,"label",26),e.SDv(12,27),e.qZA(),e._UZ(13,"input",28),e.qZA()()()),2&n){const t=e.oxw(),o=e.MAs(9);e.xp6(8),e.Q6J("ngIf",t.settingsForm.showError("lun",o,"required"))}}function mo(n,s){if(1&n&&(e.TgZ(0,"option",31),e._uU(1),e.ALo(2,"iscsiBackstore"),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(e.lcZ(2,2,t))}}function go(n,s){if(1&n&&(e.TgZ(0,"div",12)(1,"div",13),e._UZ(2,"cd-iscsi-setting",33),e.qZA()()),2&n){const t=s.$implicit,o=e.oxw(2).$implicit,i=e.oxw(),_=e.MAs(9);e.xp6(2),e.Q6J("settingsForm",i.settingsForm)("formDir",_)("setting",t.key)("limits",i.getDiskControlLimits(o,t.key))}}function To(n,s){if(1&n&&(e.ynx(0),e.YNc(1,go,3,4,"div",32),e.ALo(2,"keyvalue"),e.BQk()),2&n){const t=e.oxw().$implicit,o=e.oxw();e.xp6(1),e.Q6J("ngForOf",e.lcZ(2,1,o.disk_default_controls[t]))}}function fo(n,s){if(1&n&&(e.ynx(0),e.YNc(1,To,3,3,"ng-container",9),e.BQk()),2&n){const t=s.$implicit,o=e.oxw();e.xp6(1),e.Q6J("ngIf",o.settingsForm.value.backstore===t)}}let Co=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.iscsiService=o,this.actionLabels=i}ngOnInit(){const t={backstore:new r.p4(this.imagesSettings[this.image].backstore),lun:new r.p4(this.imagesSettings[this.image].lun),wwn:new r.p4(this.imagesSettings[this.image].wwn)};C().forEach(this.backstores,o=>{const i=this.imagesSettings[this.image][o]||{};C().forIn(this.disk_default_controls[o],(_,a)=>{t[a]=new r.p4(i[a])})}),this.settingsForm=new Z.d(t)}getDiskControlLimits(t,o){return this.disk_controls_limits?this.disk_controls_limits[t][o]:{type:"int"}}save(){const t=this.settingsForm.controls.backstore.value,o=this.settingsForm.controls.lun.value,i=this.settingsForm.controls.wwn.value,_={};C().forIn(this.settingsForm.controls,(a,l)=>{""!==a.value&&null!==a.value&&l in this.disk_default_controls[this.settingsForm.value.backstore]&&(_[l]=a.value,C().forEach(this.backstores,d=>{d!==t&&l in(this.imagesSettings[this.image][d]||{})&&(this.imagesSettings[this.image][d][l]=a.value)}))}),this.imagesSettings[this.image].backstore=t,this.imagesSettings[this.image].lun=o,this.imagesSettings[this.image].wwn=i,this.imagesSettings[this.image][t]=_,this.imagesSettings={...this.imagesSettings},this.control.updateValueAndValidity({emitEvent:!1}),this.activeModal.close()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(F.Kz),e.Y36(X),e.Y36(L.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-image-settings-modal"]],decls:25,vars:8,consts:function(){let s,t,o,i,_,a,l,d;return s="Configure",t="Changing these parameters from their default values is usually not necessary.",o="Settings",i="Backstore",_="Identifier",a="lun",l="wwn",d="This field is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","settingsForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"alert-warning"],t,[4,"ngIf"],[1,"cd-header"],o,[1,"form-group","row"],[1,"col-sm-12"],[1,"col-form-label"],i,["id","backstore","name","backstore","formControlName","backstore",1,"form-select"],[3,"value",4,"ngFor","ngForOf"],[4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],_,["for","lun",1,"col-form-label","required"],a,["type","number","id","lun","name","lun","formControlName","lun",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","wwn",1,"col-form-label"],l,["type","text","id","wwn","name","wwn","formControlName","wwn",1,"form-control"],[1,"invalid-feedback"],d,[3,"value"],["class","form-group row",4,"ngFor","ngForOf"],[3,"settingsForm","formDir","setting","limits"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1)(2),e.SDv(3,2),e.BQk(),e._uU(4,"\xa0 "),e.TgZ(5,"small"),e._uU(6),e.qZA(),e.BQk(),e.ynx(7,3),e.TgZ(8,"form",4,5)(10,"div",6)(11,"p",7),e.SDv(12,8),e.qZA(),e.YNc(13,uo,14,1,"span",9),e.TgZ(14,"legend",10),e.SDv(15,11),e.qZA(),e.TgZ(16,"div",12)(17,"div",13)(18,"label",14),e.SDv(19,15),e.qZA(),e.TgZ(20,"select",16),e.YNc(21,mo,3,4,"option",17),e.qZA()()(),e.YNc(22,fo,2,1,"ng-container",18),e.qZA(),e.TgZ(23,"div",19)(24,"cd-form-button-panel",20),e.NdJ("submitActionEvent",function(){return o.save()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(6),e.Oqu(o.image),e.xp6(2),e.Q6J("formGroup",o.settingsForm),e.xp6(5),e.Q6J("ngIf",o.api_version>=1),e.xp6(8),e.Q6J("ngForOf",o.backstores),e.xp6(1),e.Q6J("ngForOf",o.backstores),e.xp6(2),e.Q6J("form",o.settingsForm)("submitText",o.actionLabels.UPDATE))},dependencies:[c.sg,c.O5,r._Y,r.YN,r.Kr,r.Fj,r.wV,r.EJ,r.JJ,r.JL,r.sg,r.u,f.z,A.p,M.o,B.b,K.P,J.V,gt,c.Nd,Je.V]}),n})();function So(n,s){if(1&n&&(e.TgZ(0,"div",12)(1,"div",13),e._UZ(2,"cd-iscsi-setting",14),e.qZA()()),2&n){const t=s.$implicit,o=e.oxw(),i=e.MAs(5);e.xp6(2),e.Q6J("settingsForm",o.settingsForm)("formDir",i)("setting",t.key)("limits",o.getTargetControlLimits(t.key))}}let Ro=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.iscsiService=o,this.actionLabels=i}ngOnInit(){const t={};C().forIn(this.target_default_controls,(o,i)=>{t[i]=new r.p4(this.target_controls.value[i])}),this.settingsForm=new Z.d(t)}save(){const t={};C().forIn(this.settingsForm.controls,(o,i)=>{""===o.value||null===o.value||(t[i]=o.value)}),this.target_controls.setValue(t),this.activeModal.close()}getTargetControlLimits(t){return this.target_controls_limits?this.target_controls_limits[t]:["Yes","No"].includes(this.target_default_controls[t])?{type:"bool"}:{type:"int"}}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(F.Kz),e.Y36(X),e.Y36(L.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-iqn-settings-modal"]],decls:13,vars:7,consts:function(){let s,t;return s="Advanced Settings",t="Changing these parameters from their default values is usually not necessary.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","settingsForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"alert-warning"],t,["class","form-group row",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"form-group","row"],[1,"col-sm-12"],[3,"settingsForm","formDir","setting","limits"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p",7),e.SDv(8,8),e.qZA(),e.YNc(9,So,3,4,"div",9),e.ALo(10,"keyvalue"),e.qZA(),e.TgZ(11,"div",10)(12,"cd-form-button-panel",11),e.NdJ("submitActionEvent",function(){return o.save()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.settingsForm),e.xp6(5),e.Q6J("ngForOf",e.lcZ(10,5,o.settingsForm.controls)),e.xp6(3),e.Q6J("form",o.settingsForm)("submitText",o.actionLabels.UPDATE))},dependencies:[c.sg,r._Y,r.JL,r.sg,f.z,A.p,K.P,J.V,gt,c.Nd]}),n})();var pe=p(63285),Eo=p(39092),Ye=p(58039),Tt=p(4416);let Mo=(()=>{class n{constructor(t){this.ngControl=t}onInput(t){this.setValue(t)}setValue(t){t=C().isString(t)?t.trim():t,this.ngControl.control.setValue(t)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(r.a5))},n.\u0275dir=e.lG2({type:n,selectors:[["","cdTrim",""]],hostBindings:function(t,o){1&t&&e.NdJ("input",function(_){return o.onInput(_.target.value)})}}),n})();var ft=p(63622),ot=p(10545);function Oo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,41),e.qZA())}function ho(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,42),e.qZA())}function Ao(n,s){1&n&&(e.TgZ(0,"span",40),e.ynx(1),e.SDv(2,43),e.BQk(),e._UZ(3,"br"),e.ynx(4),e.SDv(5,44),e.BQk(),e._UZ(6,"br"),e.TgZ(7,"a",45),e.SDv(8,46),e.qZA()())}function Po(n,s){1&n&&(e.TgZ(0,"span",47),e.SDv(1,48),e.qZA())}const U=function(n){return[n]};function bo(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.TgZ(3,"button",51),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,a=i.$implicit,l=e.oxw(2);return e.KtG(l.removePortal(_,a))}),e._UZ(4,"i",15),e.qZA()(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngClass",e.VKq(2,U,o.icons.destroy))}}function Io(n,s){if(1&n&&(e.TgZ(0,"span",40),e.SDv(1,52),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.pQV(t.minimum_gateways),e.QtT(1)}}function No(n,s){if(1&n&&(e.TgZ(0,"div",55),e._uU(1),e.qZA()),2&n){const t=e.oxw().$implicit,o=e.oxw(2);e.xp6(1),e.hij("lun: ",o.imagesSettings[t].lun,"")}}function Fo(n,s){if(1&n&&(e.ynx(0),e.SDv(1,56),e.ALo(2,"iscsiBackstore"),e.BQk()),2&n){const t=e.oxw().$implicit,o=e.oxw(2);e.xp6(2),e.pQV(e.lcZ(2,1,o.imagesSettings[t].backstore)),e.QtT(1)}}function Do(n,s){1&n&&(e.ynx(0),e.SDv(1,57),e.BQk())}function Lo(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.YNc(3,No,2,1,"div",53),e.TgZ(4,"button",51),e.NdJ("click",function(){const _=e.CHM(t).$implicit,a=e.oxw(2);return e.KtG(a.imageSettingsModal(_))}),e._UZ(5,"i",15),e.qZA(),e.TgZ(6,"button",51),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,a=i.$implicit,l=e.oxw(2);return e.KtG(l.removeImage(_,a))}),e._UZ(7,"i",15),e.qZA()(),e.TgZ(8,"span",47),e.YNc(9,Fo,3,3,"ng-container",54),e.YNc(10,Do,2,0,"ng-container",54),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(2),e.Q6J("value",t),e.xp6(1),e.Q6J("ngIf",o.api_version>=1),e.xp6(2),e.Q6J("ngClass",e.VKq(6,U,o.icons.deepCheck)),e.xp6(2),e.Q6J("ngClass",e.VKq(8,U,o.icons.destroy)),e.xp6(2),e.Q6J("ngIf",o.backstores.length>1),e.xp6(1),e.Q6J("ngIf",o.hasAdvancedSettings(o.imagesSettings[t][o.imagesSettings[t].backstore]))}}function vo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,58),e.qZA())}function $o(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,59),e.qZA())}function Bo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,77),e.qZA())}function Go(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,78),e.qZA())}function yo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,79),e.qZA())}function xo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,80),e.qZA())}function Zo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,81),e.qZA())}function wo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,82),e.qZA())}function Ho(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,83),e.qZA())}function ko(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,84),e.qZA())}function Ko(n,s){if(1&n&&(e.TgZ(0,"div",60)(1,"div",8)(2,"label",61),e.ynx(3),e.SDv(4,62),e.BQk(),e.qZA(),e.TgZ(5,"div",11),e._UZ(6,"input",63),e.YNc(7,Bo,2,0,"span",16),e.YNc(8,Go,2,0,"span",16),e.qZA()(),e.TgZ(9,"div",8)(10,"label",64),e.ynx(11),e.SDv(12,65),e.BQk(),e.qZA(),e.TgZ(13,"div",11)(14,"div",12),e._UZ(15,"input",66)(16,"button",67)(17,"cd-copy-2-clipboard-button",68),e.qZA(),e.YNc(18,yo,2,0,"span",16),e.YNc(19,xo,2,0,"span",16),e.qZA()(),e.TgZ(20,"div",8)(21,"label",69),e.ynx(22),e.SDv(23,70),e.BQk(),e.qZA(),e.TgZ(24,"div",11),e._UZ(25,"input",71),e.YNc(26,Zo,2,0,"span",16),e.YNc(27,wo,2,0,"span",16),e.qZA()(),e.TgZ(28,"div",8)(29,"label",72),e.ynx(30),e.SDv(31,73),e.BQk(),e.qZA(),e.TgZ(32,"div",11)(33,"div",12),e._UZ(34,"input",74)(35,"button",75)(36,"cd-copy-2-clipboard-button",76),e.qZA(),e.YNc(37,Ho,2,0,"span",16),e.YNc(38,ko,2,0,"span",16),e.qZA()()()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(7),e.Q6J("ngIf",o.targetForm.showError("user",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("user",t,"pattern")),e.xp6(10),e.Q6J("ngIf",o.targetForm.showError("password",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("password",t,"pattern")),e.xp6(7),e.Q6J("ngIf",o.targetForm.showError("mutual_user",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("mutual_user",t,"pattern")),e.xp6(10),e.Q6J("ngIf",o.targetForm.showError("mutual_password",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("mutual_password",t,"pattern"))}}function qo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,114),e.qZA())}function Xo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,115),e.qZA())}function Qo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,116),e.qZA())}function zo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,117),e.qZA())}function Jo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,118),e.qZA())}function Yo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,119),e.qZA())}function Vo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,120),e.qZA())}function Uo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,121),e.qZA())}function jo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,122),e.qZA())}function Wo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,123),e.qZA())}function en(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,124),e.qZA())}function tn(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.TgZ(3,"button",51),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,a=i.$implicit,l=e.oxw(),d=l.$implicit,g=l.index,S=e.oxw(3);return e.KtG(S.removeInitiatorImage(d,_,g,a))}),e._UZ(4,"i",15),e.qZA()(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngClass",e.VKq(2,U,o.icons.destroy))}}function on(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,125),e.qZA())}function nn(n,s){if(1&n&&(e.TgZ(0,"div",21)(1,"div",22)(2,"cd-select",126),e._UZ(3,"i",24),e.ynx(4),e.SDv(5,127),e.BQk(),e.qZA()()()),2&n){const t=e.oxw(),o=t.$implicit,i=t.index,_=e.oxw(3);e.xp6(2),e.Q6J("data",o.getValue("luns"))("options",_.imagesInitiatorSelections[i])("messages",_.messages.initiatorImage),e.xp6(1),e.Q6J("ngClass",e.VKq(4,U,_.icons.add))}}function sn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",91)(1,"div",5),e.ynx(2),e.SDv(3,92),e.BQk(),e._uU(4),e.TgZ(5,"button",93),e.NdJ("click",function(){const _=e.CHM(t).index,a=e.oxw(3);return e.KtG(a.removeInitiator(_))}),e.qZA()(),e.TgZ(6,"div",7)(7,"div",8)(8,"label",94),e.SDv(9,95),e.qZA(),e.TgZ(10,"div",11)(11,"input",96),e.NdJ("blur",function(){e.CHM(t);const i=e.oxw(3);return e.KtG(i.updatedInitiatorSelector())}),e.qZA(),e.YNc(12,qo,2,0,"span",16),e.YNc(13,Xo,2,0,"span",16),e.YNc(14,Qo,2,0,"span",16),e.qZA()(),e.ynx(15,60),e.TgZ(16,"div",8)(17,"label",97),e.SDv(18,98),e.qZA(),e.TgZ(19,"div",11),e._UZ(20,"input",99),e.YNc(21,zo,2,0,"span",16),e.YNc(22,Jo,2,0,"span",16),e.qZA()(),e.TgZ(23,"div",8)(24,"label",100),e.SDv(25,101),e.qZA(),e.TgZ(26,"div",11)(27,"div",12),e._UZ(28,"input",102)(29,"button",103)(30,"cd-copy-2-clipboard-button",104),e.qZA(),e.YNc(31,Yo,2,0,"span",16),e.YNc(32,Vo,2,0,"span",16),e.qZA()(),e.TgZ(33,"div",8)(34,"label",105),e.ynx(35),e.SDv(36,106),e.BQk(),e.qZA(),e.TgZ(37,"div",11),e._UZ(38,"input",107),e.YNc(39,Uo,2,0,"span",16),e.YNc(40,jo,2,0,"span",16),e.qZA()(),e.TgZ(41,"div",8)(42,"label",108),e.SDv(43,109),e.qZA(),e.TgZ(44,"div",11)(45,"div",12),e._UZ(46,"input",110)(47,"button",103)(48,"cd-copy-2-clipboard-button",104),e.qZA(),e.YNc(49,Wo,2,0,"span",16),e.YNc(50,en,2,0,"span",16),e.qZA()(),e.BQk(),e.TgZ(51,"div",8)(52,"label",111),e.SDv(53,112),e.qZA(),e.TgZ(54,"div",11),e.YNc(55,tn,5,4,"ng-container",20),e.YNc(56,on,2,0,"span",54),e.YNc(57,nn,6,6,"div",113),e.qZA()()()()}if(2&n){const t=s.$implicit,o=s.index;e.oxw(2);const i=e.MAs(2);e.Q6J("formGroup",t),e.xp6(4),e.hij(": ",t.getValue("client_iqn")," "),e.xp6(8),e.Q6J("ngIf",t.showError("client_iqn",i,"notUnique")),e.xp6(1),e.Q6J("ngIf",t.showError("client_iqn",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("client_iqn",i,"pattern")),e.xp6(6),e.Q6J("id","user"+o),e.xp6(1),e.Q6J("ngIf",t.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("user",i,"pattern")),e.xp6(6),e.Q6J("id","password"+o),e.xp6(1),e.Q6J("cdPasswordButton","password"+o),e.xp6(1),e.Q6J("source","password"+o),e.xp6(1),e.Q6J("ngIf",t.showError("password",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("password",i,"pattern")),e.xp6(6),e.Q6J("id","mutual_user"+o),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_user",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_user",i,"pattern")),e.xp6(6),e.Q6J("id","mutual_password"+o),e.xp6(1),e.Q6J("cdPasswordButton","mutual_password"+o),e.xp6(1),e.Q6J("source","mutual_password"+o),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_password",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_password",i,"pattern")),e.xp6(5),e.Q6J("ngForOf",t.getValue("luns")),e.xp6(1),e.Q6J("ngIf",t.getValue("cdIsInGroup")),e.xp6(1),e.Q6J("ngIf",!t.getValue("cdIsInGroup"))}}function _n(n,s){1&n&&(e.TgZ(0,"span",47),e.SDv(1,128),e.qZA())}function an(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",8)(1,"label",85),e.SDv(2,86),e.qZA(),e.TgZ(3,"div",87),e.YNc(4,sn,58,24,"div",88),e.TgZ(5,"div",21)(6,"div",22),e.YNc(7,_n,2,0,"span",17),e.TgZ(8,"button",89),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).addInitiator(),e.KtG(!1)}),e._UZ(9,"i",24),e.ynx(10),e.SDv(11,90),e.BQk(),e.qZA()()(),e._UZ(12,"hr"),e.qZA()()}if(2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",t.initiators.controls),e.xp6(3),e.Q6J("ngIf",0===t.initiators.controls.length),e.xp6(2),e.Q6J("ngClass",e.VKq(3,U,t.icons.add))}}function rn(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.TgZ(3,"button",51),e.NdJ("click",function(){const _=e.CHM(t).index,a=e.oxw(),l=a.$implicit,d=a.index,g=e.oxw(3);return e.KtG(g.removeGroupInitiator(l,_,d))}),e._UZ(4,"i",15),e.qZA()(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngClass",e.VKq(2,U,o.icons.destroy))}}function ln(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.TgZ(3,"button",51),e.NdJ("click",function(){const _=e.CHM(t).index,a=e.oxw(),l=a.$implicit,d=a.index,g=e.oxw(3);return e.KtG(g.removeGroupDisk(l,_,d))}),e._UZ(4,"i",15),e.qZA()(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngClass",e.VKq(2,U,o.icons.destroy))}}function cn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",91)(1,"div",5),e.ynx(2),e.SDv(3,132),e.BQk(),e._uU(4),e.TgZ(5,"button",93),e.NdJ("click",function(){const _=e.CHM(t).index,a=e.oxw(3);return e.KtG(a.removeGroup(_))}),e.qZA()(),e.TgZ(6,"div",7)(7,"div",8)(8,"label",133),e.SDv(9,134),e.qZA(),e.TgZ(10,"div",11),e._UZ(11,"input",135),e.qZA()(),e.TgZ(12,"div",8)(13,"label",136),e.ynx(14),e.SDv(15,137),e.BQk(),e.qZA(),e.TgZ(16,"div",11),e.YNc(17,rn,5,4,"ng-container",20),e.TgZ(18,"div",21)(19,"div",22)(20,"cd-select",23),e.NdJ("selection",function(i){const a=e.CHM(t).index,l=e.oxw(3);return e.KtG(l.onGroupMemberSelection(i,a))}),e._UZ(21,"i",24),e.ynx(22),e.SDv(23,138),e.BQk(),e.qZA()()(),e._UZ(24,"hr"),e.qZA()(),e.TgZ(25,"div",8)(26,"label",27),e.ynx(27),e.SDv(28,139),e.BQk(),e.qZA(),e.TgZ(29,"div",11),e.YNc(30,ln,5,4,"ng-container",20),e.TgZ(31,"div",21)(32,"div",22)(33,"cd-select",126),e._UZ(34,"i",24),e.ynx(35),e.SDv(36,140),e.BQk(),e.qZA()()(),e._UZ(37,"hr"),e.qZA()()()()}if(2&n){const t=s.$implicit,o=s.index,i=e.oxw(3);e.Q6J("formGroup",t),e.xp6(4),e.hij(": ",t.getValue("group_id")," "),e.xp6(13),e.Q6J("ngForOf",t.getValue("members")),e.xp6(3),e.Q6J("data",t.getValue("members"))("options",i.groupMembersSelections[o])("messages",i.messages.groupInitiator),e.xp6(1),e.Q6J("ngClass",e.VKq(12,U,i.icons.add)),e.xp6(9),e.Q6J("ngForOf",t.getValue("disks")),e.xp6(3),e.Q6J("data",t.getValue("disks"))("options",i.groupDiskSelections[o])("messages",i.messages.initiatorImage),e.xp6(1),e.Q6J("ngClass",e.VKq(14,U,i.icons.add))}}function dn(n,s){1&n&&(e.TgZ(0,"span",47),e.SDv(1,141),e.qZA())}function pn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",8)(1,"label",85),e.SDv(2,129),e.qZA(),e.TgZ(3,"div",130),e.YNc(4,cn,38,16,"div",88),e.TgZ(5,"div",21)(6,"div",22),e.YNc(7,dn,2,0,"span",17),e.TgZ(8,"button",89),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).addGroup(),e.KtG(!1)}),e._UZ(9,"i",24),e.ynx(10),e.SDv(11,131),e.BQk(),e.qZA()()()()()}if(2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",t.groups.controls),e.xp6(3),e.Q6J("ngIf",0===t.groups.controls.length),e.xp6(2),e.Q6J("ngClass",e.VKq(3,U,t.icons.add))}}function un(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11)(13,"div",12),e._UZ(14,"input",13),e.TgZ(15,"button",14),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.targetSettingsModal())}),e._UZ(16,"i",15),e.qZA()(),e.YNc(17,Oo,2,0,"span",16),e.YNc(18,ho,2,0,"span",16),e.YNc(19,Ao,9,0,"span",16),e.YNc(20,Po,2,0,"span",17),e._UZ(21,"hr"),e.qZA()(),e.TgZ(22,"div",8)(23,"label",18),e.SDv(24,19),e.qZA(),e.TgZ(25,"div",11),e.YNc(26,bo,5,4,"ng-container",20),e.TgZ(27,"div",21)(28,"div",22)(29,"cd-select",23),e.NdJ("selection",function(i){e.CHM(t);const _=e.oxw();return e.KtG(_.onPortalSelection(i))}),e._UZ(30,"i",24),e.ynx(31),e.SDv(32,25),e.BQk(),e.qZA()()(),e._UZ(33,"input",26),e.YNc(34,Io,2,1,"span",16),e._UZ(35,"hr"),e.qZA()(),e.TgZ(36,"div",8)(37,"label",27),e.SDv(38,28),e.qZA(),e.TgZ(39,"div",11),e.YNc(40,Lo,11,10,"ng-container",20),e._UZ(41,"input",29),e.YNc(42,vo,2,0,"span",16),e.YNc(43,$o,2,0,"span",16),e.TgZ(44,"div",21)(45,"div",22)(46,"cd-select",23),e.NdJ("selection",function(i){e.CHM(t);const _=e.oxw();return e.KtG(_.onImageSelection(i))}),e._UZ(47,"i",24),e.ynx(48),e.SDv(49,30),e.BQk(),e.qZA()()(),e._UZ(50,"hr"),e.qZA()(),e.TgZ(51,"div",8)(52,"div",31)(53,"div",32),e._UZ(54,"input",33),e.TgZ(55,"label",34),e.SDv(56,35),e.qZA()(),e._UZ(57,"hr"),e.qZA()(),e.YNc(58,Ko,39,8,"div",36),e.YNc(59,an,13,5,"div",37),e.YNc(60,pn,12,5,"div",37),e.qZA(),e.TgZ(61,"div",38)(62,"cd-form-button-panel",39),e.NdJ("submitActionEvent",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.submit())}),e.ALo(63,"titlecase"),e.ALo(64,"upperFirst"),e.qZA()()()()()}if(2&n){const t=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.targetForm),e.xp6(6),e.pQV(e.lcZ(6,26,o.action))(e.lcZ(7,28,o.resource)),e.QtT(5),e.xp6(9),e.Q6J("ngClass",e.VKq(34,U,o.icons.deepCheck)),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"pattern")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"iqn")),e.xp6(1),e.Q6J("ngIf",o.hasAdvancedSettings(o.targetForm.getValue("target_controls"))),e.xp6(6),e.Q6J("ngForOf",o.portals.value),e.xp6(3),e.Q6J("data",o.portals.value)("options",o.portalsSelections)("messages",o.messages.portals),e.xp6(1),e.Q6J("ngClass",e.VKq(36,U,o.icons.add)),e.xp6(4),e.Q6J("ngIf",o.targetForm.showError("portals",t,"minGateways")),e.xp6(6),e.Q6J("ngForOf",o.targetForm.getValue("disks")),e.xp6(2),e.Q6J("ngIf",o.targetForm.showError("disks",t,"dupLunId")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("disks",t,"dupWwn")),e.xp6(3),e.Q6J("data",o.disks.value)("options",o.imagesSelections)("messages",o.messages.images),e.xp6(1),e.Q6J("ngClass",e.VKq(38,U,o.icons.add)),e.xp6(11),e.Q6J("ngIf",o.cephIscsiConfigVersion>10&&!o.targetForm.getValue("acl_enabled")),e.xp6(1),e.Q6J("ngIf",o.targetForm.getValue("acl_enabled")),e.xp6(1),e.Q6J("ngIf",o.targetForm.getValue("acl_enabled")),e.xp6(2),e.Q6J("form",o.targetForm)("submitText",e.lcZ(63,30,o.action)+" "+e.lcZ(64,32,o.resource))}}let Ct=(()=>{class n extends k.E{constructor(t,o,i,_,a,l,d){super(),this.iscsiService=t,this.modalService=o,this.rbdService=i,this.router=_,this.route=a,this.taskWrapper=l,this.actionLabels=d,this.api_version=0,this.minimum_gateways=1,this.icons=T.P,this.isEdit=!1,this.portalsSelections=[],this.imagesInitiatorSelections=[],this.groupDiskSelections=[],this.groupMembersSelections=[],this.imagesSettings={},this.messages={portals:new N.a({noOptions:"There are no portals available."}),images:new N.a({noOptions:"There are no images available."}),initiatorImage:new N.a({noOptions:"There are no images available. Please make sure you add an image to the target."}),groupInitiator:new N.a({noOptions:"There are no initiators available. Please make sure you add an initiator to the target."})},this.IQN_REGEX=/^iqn\.(19|20)\d\d-(0[1-9]|1[0-2])\.\D{2,3}(\.[A-Za-z0-9-]+)+(:[A-Za-z0-9-\.]+)*$/,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.resource="target"}ngOnInit(){const t=new h.E(()=>{});t.pageInfo.limit=-1;const o=[this.iscsiService.listTargets(),this.rbdService.list(t.toParams()),this.iscsiService.portals(),this.iscsiService.settings(),this.iscsiService.version()];this.router.url.startsWith("/block/iscsi/targets/edit")&&(this.isEdit=!0,this.route.params.subscribe(i=>{this.target_iqn=decodeURIComponent(i.target_iqn),o.push(this.iscsiService.getTarget(this.target_iqn))})),this.action=this.isEdit?this.actionLabels.EDIT:this.actionLabels.CREATE,(0,ce.D)(o).subscribe(i=>{const _=C()(i[0]).filter(l=>l.target_iqn!==this.target_iqn).flatMap(l=>l.disks).map(l=>`${l.pool}/${l.image}`).value();"api_version"in i[3]&&(this.api_version=i[3].api_version),this.minimum_gateways=i[3].config.minimum_gateways,this.target_default_controls=i[3].target_default_controls,this.target_controls_limits=i[3].target_controls_limits,this.disk_default_controls=i[3].disk_default_controls,this.disk_controls_limits=i[3].disk_controls_limits,this.backstores=i[3].backstores,this.default_backstore=i[3].default_backstore,this.unsupported_rbd_features=i[3].unsupported_rbd_features,this.required_rbd_features=i[3].required_rbd_features,this.imagesAll=C()(i[1]).flatMap(l=>l.value).filter(l=>!l.namespace&&!(-1!==_.indexOf(`${l.pool_name}/${l.name}`)||0===this.getValidBackstores(l).length)).value(),this.imagesSelections=this.imagesAll.map(l=>new x.$(!1,`${l.pool_name}/${l.name}`,""));const a=[];i[2].forEach(l=>{l.ip_addresses.forEach(d=>{a.push(new x.$(!1,l.name+":"+d,""))})}),this.portalsSelections=[...a],this.cephIscsiConfigVersion=i[4].ceph_iscsi_config_version,this.createForm(),i[5]&&this.resolveModel(i[5]),this.loadingReady()})}createForm(){if(this.targetForm=new Z.d({target_iqn:new r.p4("iqn.2001-07.com.ceph:"+Date.now(),{validators:[r.kI.required,r.kI.pattern(this.IQN_REGEX)]}),target_controls:new r.p4({}),portals:new r.p4([],{validators:[z.h.custom("minGateways",t=>C().uniq(t.map(i=>i.split(":")[0])).length<Math.max(1,this.minimum_gateways))]}),disks:new r.p4([],{validators:[z.h.custom("dupLunId",t=>{const o=this.getLunIds(t);return o.length!==C().uniq(o).length}),z.h.custom("dupWwn",t=>{const o=this.getWwns(t);return o.length!==C().uniq(o).length})]}),initiators:new r.vC([]),groups:new r.vC([]),acl_enabled:new r.p4(!1)}),this.cephIscsiConfigVersion>10){const t=new Z.d({user:new r.p4(""),password:new r.p4(""),mutual_user:new r.p4(""),mutual_password:new r.p4("")});this.setAuthValidator(t),this.targetForm.addControl("auth",t)}}resolveModel(t){this.targetForm.patchValue({target_iqn:t.target_iqn,target_controls:t.target_controls,acl_enabled:t.acl_enabled}),this.cephIscsiConfigVersion>10&&this.targetForm.patchValue({auth:t.auth});const o=[];C().forEach(t.portals,_=>{o.push(`${_.host}:${_.ip}`)}),this.targetForm.patchValue({portals:o});const i=[];C().forEach(t.disks,_=>{const a=`${_.pool}/${_.image}`;i.push(a),this.imagesSettings[a]={backstore:_.backstore},this.imagesSettings[a][_.backstore]=_.controls,"lun"in _&&(this.imagesSettings[a].lun=_.lun),"wwn"in _&&(this.imagesSettings[a].wwn=_.wwn),this.onImageSelection({option:{name:a,selected:!0}})}),this.targetForm.patchValue({disks:i}),C().forEach(t.clients,_=>{const a=this.addInitiator();_.luns=C().map(_.luns,l=>`${l.pool}/${l.image}`),a.patchValue(_)}),t.groups.forEach((_,a)=>{const l=this.addGroup();_.disks=C().map(_.disks,d=>`${d.pool}/${d.image}`),l.patchValue(_),C().forEach(_.members,d=>{this.onGroupMemberSelection({option:new x.$(!0,d,"")},a)})})}hasAdvancedSettings(t){return Object.values(t).length>0}get portals(){return this.targetForm.get("portals")}onPortalSelection(){this.portals.setValue(this.portals.value)}removePortal(t,o){return this.portalsSelections.forEach(i=>{i.name===o&&(i.selected=!1)}),this.portals.value.splice(t,1),this.portals.setValue(this.portals.value),!1}get disks(){return this.targetForm.get("disks")}removeImage(t,o){return this.imagesSelections.forEach(i=>{i.name===o&&(i.selected=!1)}),this.disks.value.splice(t,1),this.removeImageRefs(o),this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1}),!1}removeImageRefs(t){this.initiators.controls.forEach(o=>{const i=o.value.luns.filter(_=>_!==t);o.get("luns").setValue(i)}),this.groups.controls.forEach(o=>{const i=o.value.disks.filter(_=>_!==t);o.get("disks").setValue(i)}),C().forEach(this.imagesInitiatorSelections,(o,i)=>{this.imagesInitiatorSelections[i]=o.filter(_=>_.name!==t)}),C().forEach(this.groupDiskSelections,(o,i)=>{this.groupDiskSelections[i]=o.filter(_=>_.name!==t)})}getDefaultBackstore(t){let o=this.default_backstore;const i=this.getImageById(t);return this.validFeatures(i,this.default_backstore)||this.backstores.forEach(_=>{_!==this.default_backstore&&this.validFeatures(i,_)&&(o=_)}),o}isLunIdInUse(t,o){const i=this.disks.value.filter(_=>_!==o);return this.getLunIds(i).includes(t)}getLunIds(t){return C().map(t,o=>this.imagesSettings[o].lun)}nextLunId(t){const o=this.disks.value.filter(a=>a!==t),i=this.getLunIds(o);let _=0;for(;i.includes(_);)_++;return _}getWwns(t){return C().map(t,i=>this.imagesSettings[i].wwn).filter(i=>C().isString(i)&&""!==i)}onImageSelection(t){const o=t.option;if(o.selected){if(this.imagesSettings[o.name])this.isLunIdInUse(this.imagesSettings[o.name].lun,o.name)&&(this.imagesSettings[o.name].lun=this.nextLunId(o.name));else{const i=this.getDefaultBackstore(o.name);this.imagesSettings[o.name]={backstore:i,lun:this.nextLunId(o.name)},this.imagesSettings[o.name][i]={}}C().forEach(this.imagesInitiatorSelections,(i,_)=>{i.push(new x.$(!1,o.name,"")),this.imagesInitiatorSelections[_]=[...i]}),C().forEach(this.groupDiskSelections,(i,_)=>{i.push(new x.$(!1,o.name,"")),this.groupDiskSelections[_]=[...i]})}else this.removeImageRefs(o.name);this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1})}get initiators(){return this.targetForm.get("initiators")}addInitiator(){const t=new Z.d({client_iqn:new r.p4("",{validators:[r.kI.required,z.h.custom("notUnique",i=>{const _=this.initiators.controls.reduce(function(a,l){return a.concat(l.value.client_iqn)},[]);return _.indexOf(i)!==_.lastIndexOf(i)}),r.kI.pattern(this.IQN_REGEX)]}),auth:new Z.d({user:new r.p4(""),password:new r.p4(""),mutual_user:new r.p4(""),mutual_password:new r.p4("")}),luns:new r.p4([]),cdIsInGroup:new r.p4(!1)});this.setAuthValidator(t),this.initiators.push(t),C().forEach(this.groupMembersSelections,(i,_)=>{i.push(new x.$(!1,"","")),this.groupMembersSelections[_]=[...i]});const o=C().map(this.targetForm.getValue("disks"),i=>new x.$(!1,i,""));return this.imagesInitiatorSelections.push(o),t}setAuthValidator(t){z.h.validateIf(t.get("user"),()=>t.getValue("password")||t.getValue("mutual_user")||t.getValue("mutual_password"),[r.kI.required],[r.kI.pattern(this.USER_REGEX)],[t.get("password"),t.get("mutual_user"),t.get("mutual_password")]),z.h.validateIf(t.get("password"),()=>t.getValue("user")||t.getValue("mutual_user")||t.getValue("mutual_password"),[r.kI.required],[r.kI.pattern(this.PASSWORD_REGEX)],[t.get("user"),t.get("mutual_user"),t.get("mutual_password")]),z.h.validateIf(t.get("mutual_user"),()=>t.getValue("mutual_password"),[r.kI.required],[r.kI.pattern(this.USER_REGEX)],[t.get("user"),t.get("password"),t.get("mutual_password")]),z.h.validateIf(t.get("mutual_password"),()=>t.getValue("mutual_user"),[r.kI.required],[r.kI.pattern(this.PASSWORD_REGEX)],[t.get("user"),t.get("password"),t.get("mutual_user")])}removeInitiator(t){const o=this.initiators.value[t];this.initiators.removeAt(t),C().forEach(this.groupMembersSelections,(i,_)=>{i.splice(t,1),this.groupMembersSelections[_]=[...i]}),this.groups.controls.forEach(i=>{const _=i.value.members.filter(a=>a!==o.client_iqn);i.get("members").setValue(_)}),this.imagesInitiatorSelections.splice(t,1)}updatedInitiatorSelector(){this.initiators.controls.forEach(t=>{t.get("client_iqn").updateValueAndValidity({emitEvent:!1})}),C().forEach(this.groupMembersSelections,(t,o)=>{C().forEach(t,(i,_)=>{const a=i.name;i.name=this.initiators.controls[_].value.client_iqn,this.groups.controls.forEach(l=>{const d=l.value.members,g=d.indexOf(a);-1!==g&&(d[g]=i.name),l.get("members").setValue(d)})}),this.groupMembersSelections[o]=[...this.groupMembersSelections[o]]})}removeInitiatorImage(t,o,i,_){const a=t.getValue("luns");return a.splice(o,1),t.patchValue({luns:a}),this.imagesInitiatorSelections[i].forEach(l=>{l.name===_&&(l.selected=!1)}),!1}get groups(){return this.targetForm.get("groups")}addGroup(){const t=new Z.d({group_id:new r.p4("",{validators:[r.kI.required]}),members:new r.p4([]),disks:new r.p4([])});this.groups.push(t);const o=C().map(this.targetForm.getValue("disks"),_=>new x.$(!1,_,""));this.groupDiskSelections.push(o);const i=C().map(this.initiators.value,_=>new x.$(!1,_.client_iqn,"",!_.cdIsInGroup));return this.groupMembersSelections.push(i),t}removeGroup(t){this.groups.removeAt(t),this.groupMembersSelections[t].filter(i=>i.selected).forEach(i=>{i.selected=!1,this.onGroupMemberSelection({option:i},t)}),this.groupMembersSelections.splice(t,1),this.groupDiskSelections.splice(t,1)}onGroupMemberSelection(t,o){const i=t.option;let _=[];i.selected||(_=this.groupDiskSelections[o].filter(l=>l.selected).map(l=>l.name)),this.initiators.controls.forEach((a,l)=>{a.value.client_iqn===i.name&&(a.patchValue({luns:_}),a.get("cdIsInGroup").setValue(i.selected),C().forEach(this.groupMembersSelections,d=>{d[l].enabled=!i.selected}),this.imagesInitiatorSelections[l].forEach(d=>{d.selected=_.includes(d.name)}))})}removeGroupInitiator(t,o,i){const _=t.getValue("members")[o];t.getValue("members").splice(o,1),this.onGroupMemberSelection({option:new x.$(!1,_,"")},i)}removeGroupDisk(t,o,i){const _=t.getValue("disks")[o];t.getValue("disks").splice(o,1),this.groupDiskSelections[i].forEach(a=>{a.name===_&&(a.selected=!1)}),this.groupDiskSelections[i]=[...this.groupDiskSelections[i]]}submit(){const t=C().cloneDeep(this.targetForm.value),o={target_iqn:this.targetForm.getValue("target_iqn"),target_controls:this.targetForm.getValue("target_controls"),acl_enabled:this.targetForm.getValue("acl_enabled"),portals:[],disks:[],clients:[],groups:[]};if(this.cephIscsiConfigVersion>10){const _=this.targetForm.get("auth");_.getValue("user")||_.get("user").setValue(""),_.getValue("password")||_.get("password").setValue(""),_.getValue("mutual_user")||_.get("mutual_user").setValue(""),_.getValue("mutual_password")||_.get("mutual_password").setValue("");const a=this.targetForm.getValue("acl_enabled");o.auth={user:a?"":_.getValue("user"),password:a?"":_.getValue("password"),mutual_user:a?"":_.getValue("mutual_user"),mutual_password:a?"":_.getValue("mutual_password")}}let i;t.disks.forEach(_=>{const a=_.split("/"),l=this.imagesSettings[_].backstore;o.disks.push({pool:a[0],image:a[1],backstore:l,controls:this.imagesSettings[_][l],lun:this.imagesSettings[_].lun,wwn:this.imagesSettings[_].wwn})}),t.portals.forEach(_=>{const a=_.indexOf(":");o.portals.push({host:_.substring(0,a),ip:_.substring(a+1)})}),o.acl_enabled&&(t.initiators.forEach(_=>{_.auth.user||(_.auth.user=""),_.auth.password||(_.auth.password=""),_.auth.mutual_user||(_.auth.mutual_user=""),_.auth.mutual_password||(_.auth.mutual_password=""),delete _.cdIsInGroup;const a=[];_.luns.forEach(l=>{const d=l.split("/");a.push({pool:d[0],image:d[1]})}),_.luns=a}),o.clients=t.initiators),o.acl_enabled&&(t.groups.forEach(_=>{const a=[];_.disks.forEach(l=>{const d=l.split("/");a.push({pool:d[0],image:d[1]})}),_.disks=a}),o.groups=t.groups),this.isEdit?(o.new_target_iqn=o.target_iqn,o.target_iqn=this.target_iqn,i=this.taskWrapper.wrapTaskAroundCall({task:new E.R("iscsi/target/edit",{target_iqn:o.target_iqn}),call:this.iscsiService.updateTarget(this.target_iqn,o)})):i=this.taskWrapper.wrapTaskAroundCall({task:new E.R("iscsi/target/create",{target_iqn:o.target_iqn}),call:this.iscsiService.createTarget(o)}),i.subscribe({error:()=>{this.targetForm.setErrors({cdSubmitButton:!0})},complete:()=>this.router.navigate(["/block/iscsi/targets"])})}targetSettingsModal(){const t={target_controls:this.targetForm.get("target_controls"),target_default_controls:this.target_default_controls,target_controls_limits:this.target_controls_limits};this.modalRef=this.modalService.show(Ro,t)}imageSettingsModal(t){const o={imagesSettings:this.imagesSettings,image:t,api_version:this.api_version,disk_default_controls:this.disk_default_controls,disk_controls_limits:this.disk_controls_limits,backstores:this.getValidBackstores(this.getImageById(t)),control:this.targetForm.get("disks")};this.modalRef=this.modalService.show(Co,o)}validFeatures(t,o){const i=t.features,_=this.required_rbd_features[o];return(i&_)===_&&0==(i&this.unsupported_rbd_features[o])}getImageById(t){return this.imagesAll.find(o=>t===`${o.pool_name}/${o.name}`)}getValidBackstores(t){return this.backstores.filter(o=>this.validFeatures(t,o))}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(X),e.Y36(pe.Z),e.Y36(H),e.Y36(m.F0),e.Y36(m.gz),e.Y36(u.P),e.Y36(L.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,i,_,a,l,d,g,S,I,P,$,y,Q,Y,ee,te,w,_e,ae,O,me,ge,Te,fe,Ce,Se,Re,G,Ge,ye,xe,Ze,we,He,ke,Ke,qe,Xe,Qe,ze,b,xt,Zt,wt,Ht,kt,Kt,qt,Xt,Qt,zt,Jt,Yt,Vt,Ut,jt,Wt,eo,to,oo;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Target IQN",o="Portals",i="Add portal",_="Images",a="Add image",l="ACL authentication",d="This field is required.",g="IQN has wrong pattern.",S="An IQN has the following notation 'iqn.$year-$month.$reversedAddress:$definedName'",I="For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309",P="More information",$="This target has modified advanced settings.",y="At least " + "\ufffd0\ufffd" + " gateways are required.",Q="Backstore: " + "\ufffd0\ufffd" + ".\xA0",Y="This image has modified settings.",ee="Duplicated LUN numbers.",te="Duplicated WWN.",w="User",_e="Password",ae="Mutual User",O="Mutual Password",me="This field is required.",ge="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",Te="This field is required.",fe="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",Ce="This field is required.",Se="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",Re="This field is required.",G="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",Ge="Initiators",ye="Add initiator",xe="Initiator",Ze="Client IQN",we="User",He="Password",ke="Mutual User",Ke="Mutual Password",qe="Images",Xe="Initiator IQN needs to be unique.",Qe="This field is required.",ze="IQN has wrong pattern.",b="This field is required.",xt="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",Zt="This field is required.",wt="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",Ht="This field is required.",kt="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",Kt="This field is required.",qt="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",Xt="Initiator belongs to a group. Images will be configure in the group.",Qt="Add image",zt="No items added.",Jt="Groups",Yt="Add group",Vt="Group",Ut="Name",jt="Initiators",Wt="Add initiator",eo="Images",to="Add image",oo="No items added.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","targetForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],[1,"form-group","row"],["for","target_iqn",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],[1,"input-group"],["type","text","id","target_iqn","name","target_iqn","formControlName","target_iqn","cdTrim","",1,"form-control"],["id","ecp-info-button","type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],["class","invalid-feedback",4,"ngIf"],["class","form-text text-muted",4,"ngIf"],["for","portals",1,"cd-col-form-label","required"],o,[4,"ngFor","ngForOf"],[1,"row"],[1,"col-md-12"],["elemClass","btn btn-light float-end",3,"data","options","messages","selection"],[3,"ngClass"],i,["type","hidden","id","portals","name","portals","formControlName","portals",1,"form-control"],["for","disks",1,"cd-col-form-label"],_,["type","hidden","id","disks","name","disks","formControlName","disks",1,"form-control"],a,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","acl_enabled","name","acl_enabled","id","acl_enabled",1,"custom-control-input"],["for","acl_enabled",1,"custom-control-label"],l,["formGroupName","auth",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],d,g,S,I,["target","_blank","href","https://en.wikipedia.org/wiki/ISCSI#Addressing"],P,[1,"form-text","text-muted"],$,[1,"input-group","cd-mb"],["type","text","disabled","",1,"cd-form-control",3,"value"],["type","button",1,"btn","btn-light",3,"click"],y,["class","input-group-text",4,"ngIf"],[4,"ngIf"],[1,"input-group-text"],Q,Y,ee,te,["formGroupName","auth"],["for","target_user",1,"cd-col-form-label"],w,["type","text","autocomplete","off","id","target_user","name","target_user","formControlName","user",1,"form-control"],["for","target_password",1,"cd-col-form-label"],_e,["type","password","autocomplete","new-password","id","target_password","name","target_password","formControlName","password",1,"form-control"],["type","button","cdPasswordButton","target_password",1,"btn","btn-light"],["source","target_password"],["for","target_mutual_user",1,"cd-col-form-label"],ae,["type","text","autocomplete","off","id","target_mutual_user","name","target_mutual_user","formControlName","mutual_user",1,"form-control"],["for","target_mutual_password",1,"cd-col-form-label"],O,["type","password","autocomplete","new-password","id","target_mutual_password","name","target_mutual_password","formControlName","mutual_password",1,"form-control"],["type","button","cdPasswordButton","target_mutual_password",1,"btn","btn-light"],["source","target_mutual_password"],me,ge,Te,fe,Ce,Se,Re,G,["for","initiators",1,"cd-col-form-label"],Ge,["formArrayName","initiators",1,"cd-col-form-input"],["class","card mb-2",3,"formGroup",4,"ngFor","ngForOf"],[1,"btn","btn-light","float-end",3,"click"],ye,[1,"card","mb-2",3,"formGroup"],xe,["type","button",1,"btn-close","float-end",3,"click"],["for","client_iqn",1,"cd-col-form-label","required"],Ze,["type","text","formControlName","client_iqn","cdTrim","",1,"form-control",3,"blur"],["for","user",1,"cd-col-form-label"],we,["formControlName","user","autocomplete","off","type","text",1,"form-control",3,"id"],["for","password",1,"cd-col-form-label"],He,["formControlName","password","autocomplete","new-password","type","password",1,"form-control",3,"id"],["type","button",1,"btn","btn-light",3,"cdPasswordButton"],[3,"source"],["for","mutual_user",1,"cd-col-form-label"],ke,["formControlName","mutual_user","autocomplete","off","type","text",1,"form-control",3,"id"],["for","mutual_password",1,"cd-col-form-label"],Ke,["formControlName","mutual_password","autocomplete","new-password","type","password",1,"form-control",3,"id"],["for","luns",1,"cd-col-form-label"],qe,["class","row",4,"ngIf"],Xe,Qe,ze,b,xt,Zt,wt,Ht,kt,Kt,qt,Xt,["elemClass","btn btn-light float-end",3,"data","options","messages"],Qt,zt,Jt,["formArrayName","groups",1,"cd-col-form-input"],Yt,Vt,["for","group_id",1,"cd-col-form-label","required"],Ut,["type","text","formControlName","group_id",1,"form-control"],["for","members",1,"cd-col-form-label"],jt,Wt,eo,to,oo]},template:function(t,o){1&t&&e.YNc(0,un,65,40,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},dependencies:[c.mk,c.sg,c.O5,r._Y,r.Fj,r.Wl,r.JJ,r.JL,r.sg,r.u,r.x0,r.CE,Eo.H,Ye.s,A.p,Tt.C,Mo,ft.y,M.o,B.b,K.P,J.V,c.rS,Je.V,ot.m],styles:[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}"]}),n})();var St=p(68136),ue=p(30982),W=p(59019),Le=p(99466),Ee=p(68774),Rt=p(55657),de=p(38047),nt=p(18001),ve=p(97161),oe=p(47640);function mn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function gn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function Tn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,32),e.qZA())}function fn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,33),e.qZA())}function Cn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,34),e.qZA())}function Sn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,35),e.qZA())}function Rn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,36),e.qZA())}function En(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,37),e.qZA())}let Mn=(()=>{class n{constructor(t,o,i,_,a){this.authStorageService=t,this.activeModal=o,this.actionLabels=i,this.iscsiService=_,this.notificationService=a,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.permission=this.authStorageService.getPermissions().iscsi}ngOnInit(){this.hasPermission=this.permission.update,this.createForm(),this.iscsiService.getDiscovery().subscribe(t=>{this.discoveryForm.patchValue(t)})}createForm(){this.discoveryForm=new Z.d({user:new r.p4({value:"",disabled:!this.hasPermission}),password:new r.p4({value:"",disabled:!this.hasPermission}),mutual_user:new r.p4({value:"",disabled:!this.hasPermission}),mutual_password:new r.p4({value:"",disabled:!this.hasPermission})}),z.h.validateIf(this.discoveryForm.get("user"),()=>this.discoveryForm.getValue("password")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[r.kI.required],[r.kI.pattern(this.USER_REGEX)],[this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("password"),()=>this.discoveryForm.getValue("user")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[r.kI.required],[r.kI.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("mutual_user"),()=>this.discoveryForm.getValue("mutual_password"),[r.kI.required],[r.kI.pattern(this.USER_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("mutual_password"),()=>this.discoveryForm.getValue("mutual_user"),[r.kI.required],[r.kI.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user")])}submitAction(){this.iscsiService.updateDiscovery(this.discoveryForm.value).subscribe(()=>{this.notificationService.show(nt.k.success,"Updated discovery authentication"),this.activeModal.close()},()=>{this.discoveryForm.setErrors({cdSubmitButton:!0})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(F.Kz),e.Y36(L.p4),e.Y36(X),e.Y36(ve.g))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-discovery-modal"]],decls:44,vars:13,consts:function(){let s,t,o,i,_,a,l,d,g,S,I,P,$;return s="Discovery Authentication",t="User",o="Password",i="Mutual User",_="Mutual Password",a="This field is required.",l="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",d="This field is required.",g="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",S="This field is required.",I="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",P="This field is required.",$="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","discoveryForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","user",1,"cd-col-form-label"],t,[1,"cd-col-form-input"],["id","user","formControlName","user","type","text","autocomplete","off",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","password",1,"cd-col-form-label"],o,[1,"input-group"],["id","password","formControlName","password","type","password","autocomplete","new-password",1,"form-control"],["type","button","cdPasswordButton","password",1,"btn","btn-light"],["source","password"],["for","mutual_user",1,"cd-col-form-label"],i,["id","mutual_user","formControlName","mutual_user","type","text","autocomplete","off",1,"form-control"],["for","mutual_password",1,"cd-col-form-label"],_,["id","mutual_password","formControlName","mutual_password","type","password","autocomplete","new-password",1,"form-control"],["type","button","cdPasswordButton","mutual_password",1,"btn","btn-light"],["source","mutual_password"],[1,"modal-footer"],[3,"form","showSubmit","submitText","submitActionEvent"],[1,"invalid-feedback"],a,l,d,g,S,I,P,$]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10),e._UZ(11,"input",11),e.YNc(12,mn,2,0,"span",12),e.YNc(13,gn,2,0,"span",12),e.qZA()(),e.TgZ(14,"div",7)(15,"label",13),e.SDv(16,14),e.qZA(),e.TgZ(17,"div",10)(18,"div",15),e._UZ(19,"input",16)(20,"button",17)(21,"cd-copy-2-clipboard-button",18),e.qZA(),e.YNc(22,Tn,2,0,"span",12),e.YNc(23,fn,2,0,"span",12),e.qZA()(),e.TgZ(24,"div",7)(25,"label",19),e.ynx(26),e.SDv(27,20),e.BQk(),e.qZA(),e.TgZ(28,"div",10),e._UZ(29,"input",21),e.YNc(30,Cn,2,0,"span",12),e.YNc(31,Sn,2,0,"span",12),e.qZA()(),e.TgZ(32,"div",7)(33,"label",22),e.SDv(34,23),e.qZA(),e.TgZ(35,"div",10)(36,"div",15),e._UZ(37,"input",24)(38,"button",25)(39,"cd-copy-2-clipboard-button",26),e.qZA(),e.YNc(40,Rn,2,0,"span",12),e.YNc(41,En,2,0,"span",12),e.qZA()()(),e.TgZ(42,"div",27)(43,"cd-form-button-panel",28),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.discoveryForm),e.xp6(8),e.Q6J("ngIf",o.discoveryForm.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("user",i,"pattern")),e.xp6(9),e.Q6J("ngIf",o.discoveryForm.showError("password",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("password",i,"pattern")),e.xp6(7),e.Q6J("ngIf",o.discoveryForm.showError("mutual_user",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("mutual_user",i,"pattern")),e.xp6(9),e.Q6J("ngIf",o.discoveryForm.showError("mutual_password",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("mutual_password",i,"pattern")),e.xp6(2),e.Q6J("form",o.discoveryForm)("showSubmit",o.hasPermission)("submitText",o.actionLabels.SUBMIT)}},dependencies:[c.O5,r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u,f.z,Ye.s,A.p,Tt.C,M.o,B.b,K.P,J.V]}),n})();var On=p(86969),it=p(34501),hn=p(30490),Me=p(94928);let Et=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-tabs"]],decls:7,vars:0,consts:function(){let s,t;return s="Overview",t="Targets",[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/block/iscsi/overview","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link"],s,["routerLink","/block/iscsi/targets","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link"],t]},template:function(t,o){1&t&&(e.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),e.SDv(3,3),e.qZA()(),e.TgZ(4,"li",1)(5,"a",4),e.SDv(6,5),e.qZA()()())},dependencies:[m.rH,m.Od]}),n})();var An=p(68962);const Pn=["highlightTpl"],bn=["detailTable"],In=["tree"],Nn=function(){return["logged_in"]},Fn=function(){return["logged_out"]},Dn=function(n,s){return{"badge-success":n,"badge-danger":s}};function Ln(n,s){if(1&n&&(e._UZ(0,"i"),e.TgZ(1,"span"),e._uU(2),e.qZA(),e._uU(3," \xa0 "),e.TgZ(4,"span",8),e._uU(5),e.qZA()),2&n){const t=s.$implicit;e.Tol(t.data.cdIcon),e.xp6(2),e.Oqu(t.data.name),e.xp6(2),e.Q6J("ngClass",e.WLB(7,Dn,e.DdM(5,Nn).includes(t.data.status),e.DdM(6,Fn).includes(t.data.status))),e.xp6(1),e.hij(" ",t.data.status," ")}}function vn(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"legend"),e._uU(2),e.qZA(),e._UZ(3,"cd-table",10,11),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.Oqu(t.title),e.xp6(1),e.Q6J("data",t.data)("columns",t.columns)("limit",0)}}function $n(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function Bn(n,s){if(1&n&&(e.TgZ(0,"strong"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function Gn(n,s){if(1&n&&(e.YNc(0,$n,2,1,"span",12),e.YNc(1,Bn,2,1,"strong",12)),2&n){const t=s.row;e.Q6J("ngIf",void 0===t.default||t.default===t.current),e.xp6(1),e.Q6J("ngIf",void 0!==t.default&&t.default!==t.current)}}let yn=(()=>{class n{set content(t){this.detailTable=t,t&&t.updateColumns()}constructor(t,o){this.iscsiBackstorePipe=t,this.booleanTextPipe=o,this.icons=T.P,this.metadata={},this.nodes=[],this.treeOptions={useVirtualScroll:!0,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}}}ngOnInit(){this.columns=[{prop:"displayName",name:"Name",flexGrow:1,cellTemplate:this.highlightTpl},{prop:"current",name:"Current",flexGrow:1,cellTemplate:this.highlightTpl},{prop:"default",name:"Default",flexGrow:1,cellTemplate:this.highlightTpl}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.generateTree()),this.data=void 0}generateTree(){const t=C().cloneDeep(this.selectedItem.target_controls);this.cephIscsiConfigVersion>10&&C().extend(t,C().cloneDeep(this.selectedItem.auth)),this.metadata={root:t};const o={target:{expanded:C().join(this.selectedItem.cdExecuting?[T.P.large,T.P.spinner,T.P.spin]:[T.P.large,T.P.bullseye]," ")},initiators:{expanded:C().join([T.P.large,T.P.user]," "),leaf:C().join([T.P.user]," ")},groups:{expanded:C().join([T.P.large,T.P.users]," "),leaf:C().join([T.P.users]," ")},disks:{expanded:C().join([T.P.large,T.P.disk]," "),leaf:C().join([T.P.disk]," ")},portals:{expanded:C().join([T.P.large,T.P.server]," "),leaf:C().join([T.P.server]," ")}},i=[];C().forEach(this.selectedItem.disks,d=>{const g="disk_"+d.pool+"_"+d.image;this.metadata[g]={controls:d.controls,backstore:d.backstore},["wwn","lun"].forEach(S=>{S in d&&(this.metadata[g][S]=d[S])}),i.push({name:`${d.pool}/${d.image}`,cdId:g,cdIcon:o.disks.leaf})});const _=[];C().forEach(this.selectedItem.portals,d=>{_.push({name:`${d.host}:${d.ip}`,cdIcon:o.portals.leaf})});const a=[];C().forEach(this.selectedItem.clients,d=>{const g=C().cloneDeep(d.auth);d.info&&(C().extend(g,d.info),delete g.state,C().forEach(Object.keys(d.info.state),P=>{g[P.toLowerCase()]=d.info.state[P]})),this.metadata["client_"+d.client_iqn]=g;const S=[];d.luns.forEach(P=>{S.push({name:`${P.pool}/${P.image}`,cdId:"disk_"+P.pool+"_"+P.image,cdIcon:o.disks.leaf})});let I="";d.info&&(I=Object.keys(d.info.state).includes("LOGGED_IN")?"logged_in":"logged_out"),a.push({name:d.client_iqn,status:I,cdId:"client_"+d.client_iqn,children:S,cdIcon:o.initiators.leaf})});const l=[];C().forEach(this.selectedItem.groups,d=>{const g=[];d.disks.forEach(I=>{g.push({name:`${I.pool}/${I.image}`,cdId:"disk_"+I.pool+"_"+I.image,cdIcon:o.disks.leaf})});const S=[];d.members.forEach(I=>{S.push({name:I,cdId:"client_"+I})}),l.push({name:d.group_id,cdIcon:o.groups.leaf,children:[{name:"Disks",children:g,cdIcon:o.disks.expanded},{name:"Initiators",children:S,cdIcon:o.initiators.expanded}]})}),this.nodes=[{name:this.selectedItem.target_iqn,cdId:"root",isExpanded:!0,cdIcon:o.target.expanded,children:[{name:"Disks",isExpanded:!0,children:i,cdIcon:o.disks.expanded},{name:"Portals",isExpanded:!0,children:_,cdIcon:o.portals.expanded},{name:"Initiators",isExpanded:!0,children:a,cdIcon:o.initiators.expanded},{name:"Groups",isExpanded:!0,children:l,cdIcon:o.groups.expanded}]}]}format(t){return"boolean"==typeof t?this.booleanTextPipe.transform(t):t}onNodeSelected(t,o){if(ne.iM.ACTIVATE(t,o,!0),o.data.cdId){this.title=o.data.name;const i=this.metadata[o.data.cdId]||{};"root"===o.data.cdId?(this.detailTable?.toggleColumn({prop:"default",isHidden:!0}),this.data=C().map(this.settings.target_default_controls,(_,a)=>({displayName:a,default:_=this.format(_),current:C().isUndefined(i[a])?_:this.format(i[a])})),this.cephIscsiConfigVersion>10&&["user","password","mutual_user","mutual_password"].forEach(_=>{this.data.push({displayName:_,default:null,current:i[_]})})):o.data.cdId.toString().startsWith("disk_")?(this.detailTable?.toggleColumn({prop:"default",isHidden:!0}),this.data=C().map(this.settings.disk_default_controls[i.backstore],(_,a)=>({displayName:a,default:_=this.format(_),current:C().isUndefined(i.controls[a])?_:this.format(i.controls[a])})),this.data.push({displayName:"backstore",default:this.iscsiBackstorePipe.transform(this.settings.default_backstore),current:this.iscsiBackstorePipe.transform(i.backstore)}),["wwn","lun"].forEach(_=>{_ in i&&this.data.push({displayName:_,default:void 0,current:i[_]})})):(this.detailTable?.toggleColumn({prop:"default",isHidden:!1}),this.data=C().map(i,(_,a)=>({displayName:a,default:void 0,current:this.format(_)})))}else this.data=void 0;this.detailTable?.updateColumns()}onUpdateData(){this.tree.treeModel.expandAll()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Je.V),e.Y36(An.T))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-details"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Pn,7),e.Gf(bn,5),e.Gf(In,5)),2&t){let i;e.iGM(i=e.CRH())&&(o.highlightTpl=i.first),e.iGM(i=e.CRH())&&(o.content=i.first),e.iGM(i=e.CRH())&&(o.tree=i.first)}},inputs:{selection:"selection",settings:"settings",cephIscsiConfigVersion:"cephIscsiConfigVersion"},features:[e.TTD],decls:11,vars:3,consts:function(){let s;return s="iSCSI Topology",[[1,"row"],[1,"col-6"],s,[3,"nodes","options","updateData"],["tree",""],["treeNodeTemplate",""],["class","col-6 metadata",4,"ngIf"],["highlightTpl",""],[1,"badge",3,"ngClass"],[1,"col-6","metadata"],["columnMode","flex",3,"data","columns","limit"],["detailTable",""],[4,"ngIf"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"legend"),e.SDv(3,2),e.qZA(),e.TgZ(4,"tree-root",3,4),e.NdJ("updateData",function(){return o.onUpdateData()}),e.YNc(6,Ln,6,10,"ng-template",null,5,e.W1O),e.qZA()(),e.YNc(8,vn,5,4,"div",6),e.qZA(),e.YNc(9,Gn,2,2,"ng-template",null,7,e.W1O)),2&t&&(e.xp6(4),e.Q6J("nodes",o.nodes)("options",o.treeOptions),e.xp6(4),e.Q6J("ngIf",o.data))},dependencies:[c.mk,c.O5,W.a,ne.qr]}),n})();function xn(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"br"),e.TgZ(2,"span"),e.SDv(3,6),e.qZA(),e.TgZ(4,"pre"),e._uU(5),e.qZA(),e.BQk()),2&n){const t=e.oxw(2);e.xp6(5),e.Oqu(t.status)}}function Zn(n,s){if(1&n&&(e.TgZ(0,"cd-alert-panel",2),e.ynx(1),e.tHW(2,3),e._UZ(3,"cd-doc",4),e.N_p(),e.BQk(),e.YNc(4,xn,6,1,"ng-container",5),e.qZA()),2&n){const t=e.oxw();e.xp6(4),e.Q6J("ngIf",t.status)}}function wn(n,s){if(1&n&&e._UZ(0,"cd-iscsi-target-details",15),2&n){const t=e.oxw(2);e.Q6J("cephIscsiConfigVersion",t.cephIscsiConfigVersion)("selection",t.expandedRow)("settings",t.settings)}}const Hn=function(n){return[n]};function kn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",7,8),e.NdJ("fetchData",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.getTargets())})("setExpandedRow",function(i){e.CHM(t);const _=e.oxw();return e.KtG(_.setExpandedRow(i))})("updateSelection",function(i){e.CHM(t);const _=e.oxw();return e.KtG(_.updateSelection(i))}),e.TgZ(2,"div",9),e._UZ(3,"cd-table-actions",10),e.TgZ(4,"button",11),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.configureDiscoveryAuth())}),e._UZ(5,"i",12),e.ynx(6),e.SDv(7,13),e.BQk(),e.qZA()(),e.YNc(8,wn,1,3,"cd-iscsi-target-details",14),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.targets)("columns",t.columns)("hasDetails",!0)("autoReload",!1)("status",t.tableStatus),e.xp6(3),e.Q6J("permission",t.permission)("selection",t.selection)("tableActions",t.tableActions),e.xp6(2),e.Q6J("ngClass",e.VKq(10,Hn,t.icons.key)),e.xp6(3),e.Q6J("ngIf",t.expandedRow)}}let Kn=(()=>{class n extends St.o{constructor(t,o,i,_,a,l,d,g,S){super(S),this.authStorageService=t,this.iscsiService=o,this.joinPipe=i,this.taskListService=_,this.notAvailablePipe=a,this.modalService=l,this.taskWrapper=d,this.actionLabels=g,this.ngZone=S,this.available=void 0,this.selection=new Ee.r,this.targets=[],this.icons=T.P,this.builders={"iscsi/target/create":I=>({target_iqn:I.target_iqn})},this.permission=this.authStorageService.getPermissions().iscsi,this.tableActions=[{permission:"create",icon:T.P.add,routerLink:()=>"/block/iscsi/targets/create",name:this.actionLabels.CREATE},{permission:"update",icon:T.P.edit,routerLink:()=>`/block/iscsi/targets/edit/${this.selection.first().target_iqn}`,name:this.actionLabels.EDIT,disable:()=>this.getEditDisableDesc()},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteIscsiTargetModal(),name:this.actionLabels.DELETE,disable:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:"Target",prop:"target_iqn",flexGrow:2,cellTransformation:Le.e.executing},{name:"Portals",prop:"cdPortals",pipe:this.joinPipe,flexGrow:2},{name:"Images",prop:"cdImages",pipe:this.joinPipe,flexGrow:2},{name:"# Sessions",prop:"info.num_sessions",pipe:this.notAvailablePipe,flexGrow:1}],this.iscsiService.status().subscribe(t=>{this.available=t.available,t.available||(this.status=t.message)})}getTargets(){this.available&&(this.setTableRefreshTimeout(),this.iscsiService.version().subscribe(t=>{this.cephIscsiConfigVersion=t.ceph_iscsi_config_version}),this.taskListService.init(()=>this.iscsiService.listTargets(),t=>this.prepareResponse(t),t=>this.targets=t,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders),this.iscsiService.settings().subscribe(t=>{this.settings=t}))}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}getEditDisableDesc(){const t=this.selection.first();return t&&t?.cdExecuting?t.cdExecuting:t&&C().isUndefined(t?.info)?"Unavailable gateway(s)":!t}getDeleteDisableDesc(){const t=this.selection.first();return t?.cdExecuting?t.cdExecuting:t&&C().isUndefined(t?.info)?"Unavailable gateway(s)":t&&t?.info?.num_sessions?"Target has active sessions":!t}prepareResponse(t){return t.forEach(o=>{o.cdPortals=o.portals.map(i=>`${i.host}:${i.ip}`),o.cdImages=o.disks.map(i=>`${i.pool}/${i.image}`)}),t}onFetchError(){this.table.reset()}itemFilter(t,o){return t.target_iqn===o.metadata.target_iqn}taskFilter(t){return["iscsi/target/create","iscsi/target/edit","iscsi/target/delete"].includes(t.name)}updateSelection(t){this.selection=t}deleteIscsiTargetModal(){const t=this.selection.first().target_iqn;this.modalRef=this.modalService.show(ue.M,{itemDescription:"iSCSI target",itemNames:[t],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new E.R("iscsi/target/delete",{target_iqn:t}),call:this.iscsiService.deleteTarget(t)})})}configureDiscoveryAuth(){this.modalService.show(Mn)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(X),e.Y36(On.A),e.Y36(de.j),e.Y36(Rt.g),e.Y36(pe.Z),e.Y36(u.P),e.Y36(L.p4),e.Y36(e.R0b))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-list"]],viewQuery:function(t,o){if(1&t&&e.Gf(W.a,5),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first)}},features:[e._Bn([de.j]),e.qOj],decls:3,vars:2,consts:function(){let s,t,o,i;return s="iSCSI Targets not available",t="Please consult the " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " on how to configure and enable the iSCSI Targets management functionality.",o="Available information:",i="Discovery authentication",[["type","info","title",s,4,"ngIf"],["columnMode","flex","identifier","target_iqn","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","autoReload","status","fetchData","setExpandedRow","updateSelection",4,"ngIf"],["type","info","title",s],t,["section","iscsi"],[4,"ngIf"],o,["columnMode","flex","identifier","target_iqn","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","autoReload","status","fetchData","setExpandedRow","updateSelection"],["table",""],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"],["type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],i,["cdTableDetail","",3,"cephIscsiConfigVersion","selection","settings",4,"ngIf"],["cdTableDetail","",3,"cephIscsiConfigVersion","selection","settings"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-iscsi-tabs"),e.YNc(1,Zn,5,1,"cd-alert-panel",0),e.YNc(2,kn,9,12,"cd-table",1)),2&t&&(e.xp6(1),e.Q6J("ngIf",!1===o.available),e.xp6(1),e.Q6J("ngIf",!0===o.available))},dependencies:[c.mk,c.O5,it.G,hn.K,W.a,Me.K,M.o,Et,yn]}),n})();var st=p(66369),qn=p(76446),Xn=p(90068);const Qn=["iscsiSparklineTpl"],zn=["iscsiPerSecondTpl"],Jn=["iscsiRelativeDateTpl"];function Yn(n,s){if(1&n&&(e.TgZ(0,"span"),e._UZ(1,"cd-sparkline",9),e.qZA()),2&n){const t=e.oxw(),o=t.value,i=t.row;e.xp6(1),e.Q6J("data",o)("isBinary",i.cdIsBinary)}}function Vn(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function Un(n,s){if(1&n&&(e.YNc(0,Yn,2,2,"span",7),e.YNc(1,Vn,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}function jn(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.hij(" ",t," /s ")}}function Wn(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function ei(n,s){if(1&n&&(e.YNc(0,jn,2,1,"span",7),e.YNc(1,Wn,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}function ti(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"notAvailable"),e.ALo(3,"relativeDate"),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.hij(" ",e.lcZ(2,1,e.lcZ(3,3,t))," ")}}function oi(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function ni(n,s){if(1&n&&(e.YNc(0,ti,4,5,"span",7),e.YNc(1,oi,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}let ii=(()=>{class n{constructor(t,o,i){this.iscsiService=t,this.dimlessPipe=o,this.iscsiBackstorePipe=i,this.gateways=[],this.images=[]}ngOnInit(){this.gatewaysColumns=[{name:"Name",prop:"name"},{name:"State",prop:"state",flexGrow:1,cellTransformation:Le.e.badge,customTemplateConfig:{map:{up:{class:"badge-success"},down:{class:"badge-danger"}}}},{name:"# Targets",prop:"num_targets"},{name:"# Sessions",prop:"num_sessions"}],this.imagesColumns=[{name:"Pool",prop:"pool"},{name:"Image",prop:"image"},{name:"Backstore",prop:"backstore",pipe:this.iscsiBackstorePipe},{name:"Read Bytes",prop:"stats_history.rd_bytes",cellTemplate:this.iscsiSparklineTpl},{name:"Write Bytes",prop:"stats_history.wr_bytes",cellTemplate:this.iscsiSparklineTpl},{name:"Read Ops",prop:"stats.rd",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:"Write Ops",prop:"stats.wr",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:"A/O Since",prop:"optimized_since",cellTemplate:this.iscsiRelativeDateTpl}]}refresh(){this.iscsiService.overview().subscribe(t=>{this.gateways=t.gateways,this.images=t.images,this.images.map(o=>(o.stats_history&&(o.stats_history.rd_bytes=o.stats_history.rd_bytes.map(i=>i[1]),o.stats_history.wr_bytes=o.stats_history.wr_bytes.map(i=>i[1])),o.cdIsBinary=!0,o))})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(X),e.Y36(st.n),e.Y36(Je.V))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Qn,7),e.Gf(zn,7),e.Gf(Jn,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.iscsiSparklineTpl=i.first),e.iGM(i=e.CRH())&&(o.iscsiPerSecondTpl=i.first),e.iGM(i=e.CRH())&&(o.iscsiRelativeDateTpl=i.first)}},decls:15,vars:4,consts:function(){let s,t;return s="Gateways",t="Images",[s,[3,"data","columns","fetchData"],t,[3,"data","columns"],["iscsiSparklineTpl",""],["iscsiPerSecondTpl",""],["iscsiRelativeDateTpl",""],[4,"ngIf"],["class","text-muted",4,"ngIf"],[3,"data","isBinary"],[1,"text-muted"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-iscsi-tabs"),e.TgZ(1,"legend"),e.SDv(2,0),e.qZA(),e.TgZ(3,"div")(4,"cd-table",1),e.NdJ("fetchData",function(){return o.refresh()}),e.qZA()(),e.TgZ(5,"legend"),e.SDv(6,2),e.qZA(),e.TgZ(7,"div"),e._UZ(8,"cd-table",3),e.qZA(),e.YNc(9,Un,2,2,"ng-template",null,4,e.W1O),e.YNc(11,ei,2,2,"ng-template",null,5,e.W1O),e.YNc(13,ni,2,2,"ng-template",null,6,e.W1O)),2&t&&(e.xp6(4),e.Q6J("data",o.gateways)("columns",o.gatewaysColumns),e.xp6(4),e.Q6J("data",o.images)("columns",o.imagesColumns))},dependencies:[c.O5,qn.l,W.a,Et,Xn.h,Rt.g]}),n})(),si=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[c.ez,Pe.m,F.Oz,m.Bz,r.u5,r.UX,F.ZQ,F.HK]}),n})();var _i=p(13464),ai=p(26215),ri=p(45435),Mt=p(36848);let q=class{constructor(s,t){this.http=s,this.timerService=t,this.REFRESH_INTERVAL=3e4,this.summaryDataSource=new ai.X(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/block/mirroring/summary")}retrieveSummaryObserver(){return s=>{this.summaryDataSource.next(s)}}subscribeSummary(s,t){return this.summaryData$.pipe((0,ri.h)(o=>!!o)).subscribe(s,t)}getPool(s){return this.http.get(`api/block/mirroring/pool/${s}`)}updatePool(s,t){return this.http.put(`api/block/mirroring/pool/${s}`,t,{observe:"response"})}getSiteName(){return this.http.get("api/block/mirroring/site_name")}setSiteName(s){return this.http.put("api/block/mirroring/site_name",{site_name:s},{observe:"response"})}createBootstrapToken(s){return this.http.post(`api/block/mirroring/pool/${s}/bootstrap/token`,{})}importBootstrapToken(s,t,o){return this.http.post(`api/block/mirroring/pool/${s}/bootstrap/peer`,{direction:t,token:o},{observe:"response"})}getPeer(s,t){return this.http.get(`api/block/mirroring/pool/${s}/peer/${t}`)}getPeerForPool(s){return this.http.get(`api/block/mirroring/pool/${s}/peer`)}addPeer(s,t){return this.http.post(`api/block/mirroring/pool/${s}/peer`,t,{observe:"response"})}updatePeer(s,t,o){return this.http.put(`api/block/mirroring/pool/${s}/peer/${t}`,o,{observe:"response"})}deletePeer(s,t){return this.http.delete(`api/block/mirroring/pool/${s}/peer/${t}`,{observe:"response"})}};q.\u0275fac=function(s){return new(s||q)(e.LFG(ie.eN),e.LFG(Mt.f))},q.\u0275prov=e.Yz7({token:q,factory:q.\u0275fac,providedIn:"root"}),(0,D.gn)([(0,D.fM)(0,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[String]),(0,D.w6)("design:returntype",void 0)],q.prototype,"setSiteName",null),(0,D.gn)([(0,D.fM)(1,V.G),(0,D.fM)(2,V.G),(0,D.w6)("design:type",Function),(0,D.w6)("design:paramtypes",[String,String,String]),(0,D.w6)("design:returntype",void 0)],q.prototype,"importBootstrapToken",null),q=(0,D.gn)([V.o,(0,D.w6)("design:paramtypes",[ie.eN,Mt.f])],q);var _t=p(6481),li=p(68307),Ot=p(12627),ci=p(39749),di=p(13472),Oe=p(82945);function pi(n,s){1&n&&(e.TgZ(0,"span",25),e.SDv(1,26),e.qZA())}function ui(n,s){if(1&n&&(e.TgZ(0,"div",27),e._UZ(1,"input",28),e.TgZ(2,"label",29),e._uU(3),e.qZA()()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.name),e.s9C("name",t.name),e.s9C("formControlName",t.name),e.xp6(1),e.s9C("for",t.name),e.xp6(1),e.Oqu(t.name)}}function mi(n,s){1&n&&(e.TgZ(0,"span",25),e.SDv(1,30),e.qZA())}let gi=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.rbdMirroringService=o,this.taskWrapper=i,this.pools=[],this.createForm()}createForm(){this.createBootstrapForm=new Z.d({siteName:new r.p4("",{validators:[r.kI.required]}),pools:new r.nJ({},{validators:[this.validatePools()]}),token:new r.p4("",{})})}ngOnInit(){this.createBootstrapForm.get("siteName").setValue(this.siteName),this.rbdMirroringService.getSiteName().subscribe(t=>{this.createBootstrapForm.get("siteName").setValue(t.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.pools=t.content_data.pools.reduce((_,a)=>(_.push({name:a.name,mirror_mode:a.mirror_mode}),_),[]);const i=this.createBootstrapForm.get("pools");C().each(this.pools,_=>{const a=_.name,l="disabled"===_.mirror_mode,d=i.controls[a];d?l&&d.disabled?d.enable():!l&&d.enabled&&(d.disable(),d.setValue(!0)):i.addControl(a,new r.p4({value:!l,disabled:!l}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return t=>{let o=0;return C().each(t.controls,i=>{!0===i.value&&++o}),o>0?null:{requirePool:!0}}}generate(){this.createBootstrapForm.get("token").setValue("");let t="";const o=[],i=this.createBootstrapForm.get("pools");C().each(i.controls,(g,S)=>{!0===g.value&&(t=S,g.disabled||o.push(S))});const _={mirror_mode:"image"},a=(0,_t.z)(this.rbdMirroringService.setSiteName(this.createBootstrapForm.getValue("siteName")),(0,ce.D)(o.map(g=>this.rbdMirroringService.updatePool(g,_))),this.rbdMirroringService.createBootstrapToken(t).pipe((0,li.b)(g=>this.createBootstrapForm.get("token").setValue(g.token)))).pipe((0,Ot.Z)()),l=()=>{this.rbdMirroringService.refresh(),this.createBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/mirroring/bootstrap/create",{}),call:a}).subscribe({error:l,complete:l})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(F.Kz),e.Y36(q),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-bootstrap-create-modal"]],decls:32,vars:6,consts:function(){let s,t,o,i,_,a,l,d,g,S,I;return s="Create Bootstrap Token",t="To create a bootstrap token which can be imported by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, and click\xA0 " + "\ufffd#10\ufffd" + "Generate" + "\ufffd/#10\ufffd" + ".",o="Site Name",i="Name...",_="Pools",a="Generate",l="Token",d="Generated token...",g="Close",S="This field is required.",I="At least one pool is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","createBootstrapForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","siteName",1,"col-form-label","required"],o,["type","text","placeholder",i,"id","siteName","name","siteName","formControlName","siteName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["formGroupName","pools",1,"form-group"],["for","pools",1,"col-form-label","required"],_,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],[1,"mb-4","float-end",3,"form","submitAction"],a,["for","token",1,"col-form-label"],l,["placeholder",d,"id","token","formControlName","token","readonly","",1,"form-control","resize-vertical"],["source","token",1,"float-end"],[1,"modal-footer"],["name",g,3,"backAction"],[1,"invalid-feedback"],S,[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],I]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(11,"div",8)(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,pi,2,0,"span",12),e.qZA(),e.TgZ(16,"div",13)(17,"label",14),e.SDv(18,15),e.qZA(),e.YNc(19,ui,4,5,"div",16),e.YNc(20,mi,2,0,"span",12),e.qZA(),e.TgZ(21,"cd-submit-button",17),e.NdJ("submitAction",function(){return o.generate()}),e.SDv(22,18),e.qZA(),e.TgZ(23,"div",8)(24,"label",19)(25,"span"),e.SDv(26,20),e.qZA()(),e.TgZ(27,"textarea",21),e._uU(28,"          "),e.qZA()(),e._UZ(29,"cd-copy-2-clipboard-button",22),e.qZA(),e.TgZ(30,"div",23)(31,"cd-back-button",24),e.NdJ("backAction",function(){return o.activeModal.close()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.createBootstrapForm),e.xp6(11),e.Q6J("ngIf",o.createBootstrapForm.showError("siteName",i,"required")),e.xp6(4),e.Q6J("ngForOf",o.pools),e.xp6(1),e.Q6J("ngIf",o.createBootstrapForm.showError("pools",i,"requirePool")),e.xp6(1),e.Q6J("form",o.createBootstrapForm)}},dependencies:[c.sg,c.O5,ci.w,di.W,f.z,Ye.s,Oe.U,M.o,B.b,K.P,J.V,r._Y,r.Fj,r.Wl,r.JJ,r.JL,r.sg,r.u,r.x0],styles:[".form-group.ng-invalid[_ngcontent-%COMP%]   .invalid-feedback[_ngcontent-%COMP%]{display:block}"]}),n})();function Ti(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,27),e.qZA())}function fi(n,s){if(1&n&&(e.TgZ(0,"option",28),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.key),e.xp6(1),e.Oqu(t.desc)}}function Ci(n,s){if(1&n&&(e.TgZ(0,"div",29),e._UZ(1,"input",30),e.TgZ(2,"label",31),e._uU(3),e.qZA()()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.name),e.s9C("name",t.name),e.s9C("formControlName",t.name),e.xp6(1),e.s9C("for",t.name),e.xp6(1),e.Oqu(t.name)}}function Si(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,32),e.qZA())}function Ri(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,33),e.qZA())}function Ei(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,34),e.qZA())}let Mi=(()=>{class n{constructor(t,o,i,_){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.pools=[],this.directions=[{key:"rx-tx",desc:"Bidirectional"},{key:"rx",desc:"Unidirectional (receive-only)"}],this.createForm()}createForm(){this.importBootstrapForm=new Z.d({siteName:new r.p4("",{validators:[r.kI.required]}),direction:new r.p4("rx-tx",{}),pools:new r.nJ({},{validators:[this.validatePools()]}),token:new r.p4("",{validators:[r.kI.required,this.validateToken()]})})}ngOnInit(){this.rbdMirroringService.getSiteName().subscribe(t=>{this.importBootstrapForm.get("siteName").setValue(t.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.pools=t.content_data.pools.reduce((_,a)=>(_.push({name:a.name,mirror_mode:a.mirror_mode}),_),[]);const i=this.importBootstrapForm.get("pools");C().each(this.pools,_=>{const a=_.name,l="disabled"===_.mirror_mode,d=i.controls[a];d?l&&d.disabled?d.enable():!l&&d.enabled&&(d.disable(),d.setValue(!0)):i.addControl(a,new r.p4({value:!l,disabled:!l}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return t=>{let o=0;return C().each(t.controls,i=>{!0===i.value&&++o}),o>0?null:{requirePool:!0}}}validateToken(){return t=>{try{if(JSON.parse(atob(t.value)))return null}catch{}return{invalidToken:!0}}}import(){const t=[],o=[],i=this.importBootstrapForm.get("pools");C().each(i.controls,(g,S)=>{!0===g.value&&(t.push(S),g.disabled||o.push(S))});const _={mirror_mode:"image"};let a=(0,_t.z)(this.rbdMirroringService.setSiteName(this.importBootstrapForm.getValue("siteName")),(0,ce.D)(o.map(g=>this.rbdMirroringService.updatePool(g,_))));a=t.reduce((g,S)=>(0,_t.z)(g,this.rbdMirroringService.importBootstrapToken(S,this.importBootstrapForm.getValue("direction"),this.importBootstrapForm.getValue("token"))),a).pipe((0,Ot.Z)());const l=()=>{this.rbdMirroringService.refresh(),this.importBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/mirroring/bootstrap/import",{}),call:a}).subscribe({error:l,complete:()=>{l(),this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(F.Kz),e.Y36(L.p4),e.Y36(q),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-bootstrap-import-modal"]],decls:36,vars:10,consts:function(){let s,t,o,i,_,a,l,d,g,S,I,P;return s="Import Bootstrap Token",t="To import a bootstrap token which was created by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, provide the generated token, and click\xA0" + "\ufffd#10\ufffd" + "Import" + "\ufffd/#10\ufffd" + ".",o="Site Name",i="Name...",_="Direction",a="Pools",l="Token",d="Generated token...",g="This field is required.",S="At least one pool is required.",I="This field is required.",P="The token is invalid.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","importBootstrapForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","siteName",1,"col-form-label","required"],o,["type","text","placeholder",i,"id","siteName","name","siteName","formControlName","siteName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","direction",1,"col-form-label"],_,["id","direction","name","direction","formControlName","direction",1,"form-control"],[3,"value",4,"ngFor","ngForOf"],["formGroupName","pools",1,"form-group"],["for","pools",1,"col-form-label","required"],a,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],["for","token",1,"col-form-label","required"],l,["placeholder",d,"id","token","formControlName","token",1,"form-control","resize-vertical"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],g,[3,"value"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],S,I,P]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(11,"div",8)(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,Ti,2,0,"span",12),e.qZA(),e.TgZ(16,"div",8)(17,"label",13)(18,"span"),e.SDv(19,14),e.qZA()(),e.TgZ(20,"select",15),e.YNc(21,fi,2,2,"option",16),e.qZA()(),e.TgZ(22,"div",17)(23,"label",18),e.SDv(24,19),e.qZA(),e.YNc(25,Ci,4,5,"div",20),e.YNc(26,Si,2,0,"span",12),e.qZA(),e.TgZ(27,"div",8)(28,"label",21),e.SDv(29,22),e.qZA(),e.TgZ(30,"textarea",23),e._uU(31,"          "),e.qZA(),e.YNc(32,Ri,2,0,"span",12),e.YNc(33,Ei,2,0,"span",12),e.qZA()(),e.TgZ(34,"div",24)(35,"cd-form-button-panel",25),e.NdJ("submitActionEvent",function(){return o.import()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.importBootstrapForm),e.xp6(11),e.Q6J("ngIf",o.importBootstrapForm.showError("siteName",i,"required")),e.xp6(6),e.Q6J("ngForOf",o.directions),e.xp6(4),e.Q6J("ngForOf",o.pools),e.xp6(1),e.Q6J("ngIf",o.importBootstrapForm.showError("pools",i,"requirePool")),e.xp6(6),e.Q6J("ngIf",o.importBootstrapForm.showError("token",i,"required")),e.xp6(1),e.Q6J("ngIf",o.importBootstrapForm.showError("token",i,"invalidToken")),e.xp6(2),e.Q6J("form",o.importBootstrapForm)("submitText",o.actionLabels.SUBMIT)}},dependencies:[c.sg,c.O5,f.z,A.p,Oe.U,M.o,B.b,K.P,J.V,r._Y,r.YN,r.Kr,r.Fj,r.Wl,r.EJ,r.JJ,r.JL,r.sg,r.u,r.x0]}),n})();var se=p(69158),Oi=p(58111);let at=(()=>{class n{transform(t){return"warning"===t?"badge badge-warning":"error"===t?"badge badge-danger":"success"===t?"badge badge-success":"badge badge-info"}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"mirrorHealthColor",type:n,pure:!0}),n})();const hi=["healthTmpl"];function Ai(n,s){if(1&n&&(e.TgZ(0,"span",2),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.health_color)),e.xp6(2),e.Oqu(o)}}let Pi=(()=>{class n{constructor(t,o){this.rbdMirroringService=t,this.cephShortVersionPipe=o,this.tableStatus=new se.E}ngOnInit(){this.columns=[{prop:"instance_id",name:"Instance",flexGrow:2},{prop:"id",name:"ID",flexGrow:2},{prop:"server_hostname",name:"Hostname",flexGrow:2},{prop:"version",name:"Version",pipe:this.cephShortVersionPipe,flexGrow:2},{prop:"health",name:"Health",cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.data=t.content_data.daemons,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(q),e.Y36(Oi.F))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-daemons"]],viewQuery:function(t,o){if(1&t&&e.Gf(hi,7),2&t){let i;e.iGM(i=e.CRH())&&(o.healthTmpl=i.first)}},decls:3,vars:4,consts:[["columnMode","flex",3,"data","columns","autoReload","status","fetchData"],["healthTmpl",""],[3,"ngClass"]],template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()}),e.qZA(),e.YNc(1,Ai,3,4,"ng-template",null,1,e.W1O)),2&t&&e.Q6J("data",o.data)("columns",o.columns)("autoReload",-1)("status",o.tableStatus)},dependencies:[c.mk,W.a,at]}),n})();var ht=p(59376);const bi=["stateTmpl"],Ii=["syncTmpl"],Ni=["progressTmpl"],Fi=["entriesBehindPrimaryTpl"];function Di(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",14),e.NdJ("fetchData",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.refresh())}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_error.data)("columns",t.image_error.columns)("autoReload",-1)("status",t.tableStatus)}}function Li(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",14),e.NdJ("fetchData",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.refresh())}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_syncing.data)("columns",t.image_syncing.columns)("autoReload",-1)("status",t.tableStatus)}}function vi(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",14),e.NdJ("fetchData",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.refresh())}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_ready.data)("columns",t.image_ready.columns)("autoReload",-1)("status",t.tableStatus)}}function $i(n,s){if(1&n&&(e.TgZ(0,"span",15),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.state_color)),e.xp6(2),e.Oqu(o)}}function Bi(n,s){1&n&&e._UZ(0,"div")}function Gi(n,s){if(1&n&&e._UZ(0,"ngb-progressbar",19),2&n){const t=e.oxw().value;e.Q6J("value",t)("showValue",!0)}}function yi(n,s){if(1&n&&(e.YNc(0,Bi,1,0,"div",16),e.TgZ(1,"div",17),e.YNc(2,Gi,1,2,"ngb-progressbar",18),e.qZA()),2&n){const t=s.row;e.Q6J("ngIf","Replaying"===t.state),e.xp6(2),e.Q6J("ngIf","Replaying"===t.state)}}function xi(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.hij(" ",t," ")}}function Zi(n,s){1&n&&(e.TgZ(0,"span",21),e._uU(1,"-"),e.qZA())}function wi(n,s){if(1&n&&(e.YNc(0,xi,2,1,"span",16),e.YNc(1,Zi,2,0,"span",20)),2&n){const t=s.row;e.Q6J("ngIf","journal"===t.mirror_mode),e.xp6(1),e.Q6J("ngIf","snapshot"===t.mirror_mode)}}let Hi=(()=>{class n{constructor(t){this.rbdMirroringService=t,this.image_error={data:[],columns:{}},this.image_syncing={data:[],columns:{}},this.image_ready={data:[],columns:{}},this.tableStatus=new se.E}ngOnInit(){this.image_error.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"description",name:"Issue",flexGrow:4}],this.image_syncing.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"syncing_percent",name:"Progress",cellTemplate:this.progressTmpl,flexGrow:2},{prop:"bytes_per_second",name:"Bytes per second",flexGrow:2},{prop:"entries_behind_primary",name:"Entries behind primary",cellTemplate:this.entriesBehindPrimaryTpl,flexGrow:2}],this.image_ready.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"description",name:"Description",flexGrow:4}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.image_error.data=t.content_data.image_error,this.image_syncing.data=t.content_data.image_syncing,this.image_ready.data=t.content_data.image_ready,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(q))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-images"]],viewQuery:function(t,o){if(1&t&&(e.Gf(bi,7),e.Gf(Ii,7),e.Gf(Ni,7),e.Gf(Fi,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.stateTmpl=i.first),e.iGM(i=e.CRH())&&(o.syncTmpl=i.first),e.iGM(i=e.CRH())&&(o.progressTmpl=i.first),e.iGM(i=e.CRH())&&(o.entriesBehindPrimaryTpl=i.first)}},decls:21,vars:4,consts:function(){let s,t,o;return s="Issues (" + "\ufffd0\ufffd" + ")",t="Syncing (" + "\ufffd0\ufffd" + ")",o="Ready (" + "\ufffd0\ufffd" + ")",[["ngbNav","","cdStatefulTab","image-list",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","issues"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","syncing"],t,["ngbNavItem","ready"],o,[3,"ngbNavOutlet"],["stateTmpl",""],["progressTmpl",""],["entriesBehindPrimaryTpl",""],["columnMode","flex",3,"data","columns","autoReload","status","fetchData"],[3,"ngClass"],[4,"ngIf"],[1,"w-100","h-100","d-flex","justify-content-center","align-items-center"],["type","info","class","w-100",3,"value","showValue",4,"ngIf"],["type","info",1,"w-100",3,"value","showValue"],["ngbTooltip","Not available with mirroring snapshot mode",4,"ngIf"],["ngbTooltip","Not available with mirroring snapshot mode"]]},template:function(t,o){if(1&t&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,Di,1,4,"ng-template",5),e.BQk(),e.ynx(6,6),e.TgZ(7,"a",3),e.SDv(8,7),e.qZA(),e.YNc(9,Li,1,4,"ng-template",5),e.BQk(),e.ynx(10,8),e.TgZ(11,"a",3),e.SDv(12,9),e.qZA(),e.YNc(13,vi,1,4,"ng-template",5),e.BQk(),e.qZA(),e._UZ(14,"div",10),e.YNc(15,$i,3,4,"ng-template",null,11,e.W1O),e.YNc(17,yi,3,2,"ng-template",null,12,e.W1O),e.YNc(19,wi,2,2,"ng-template",null,13,e.W1O)),2&t){const i=e.MAs(1);e.xp6(4),e.pQV(o.image_error.data.length),e.QtT(4),e.xp6(4),e.pQV(o.image_syncing.data.length),e.QtT(8),e.xp6(4),e.pQV(o.image_ready.data.length),e.QtT(12),e.xp6(2),e.Q6J("ngbNavOutlet",i)}},dependencies:[c.mk,c.O5,W.a,ht.m,F.uN,F.Pz,F.nv,F.Vx,F.tO,F.Dy,F.Ly,F._L,at]}),n})();var At=p(70882);class ki{}function Ki(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,25),e.qZA())}function qi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,26),e.qZA())}function Xi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,27),e.qZA())}function Qi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,28),e.qZA())}function zi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,29),e.qZA())}function Ji(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,30),e.qZA())}let Yi=(()=>{class n{constructor(t,o,i,_){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.bsConfig={containerClass:"theme-default"},this.createForm()}createForm(){this.editPeerForm=new Z.d({clusterName:new r.p4("",{validators:[r.kI.required,this.validateClusterName]}),clientID:new r.p4("",{validators:[r.kI.required,this.validateClientID]}),monAddr:new r.p4("",{validators:[this.validateMonAddr]}),key:new r.p4("",{validators:[this.validateKey]})})}ngOnInit(){this.pattern=`${this.poolName}/${this.peerUUID}`,"edit"===this.mode&&this.rbdMirroringService.getPeer(this.poolName,this.peerUUID).subscribe(t=>{this.setResponse(t)})}validateClusterName(t){if(!t.value.match(/^[\w\-_]*$/))return{invalidClusterName:{value:t.value}}}validateClientID(t){if(!t.value.match(/^(?!client\.)[\w\-_.]*$/))return{invalidClientID:{value:t.value}}}validateMonAddr(t){if(!t.value.match(/^[,; ]*([\w.\-_\[\]]+(:[\d]+)?[,; ]*)*$/))return{invalidMonAddr:{value:t.value}}}validateKey(t){try{if(""===t.value||atob(t.value))return null}catch{}return{invalidKey:{value:t.value}}}setResponse(t){this.response=t,this.editPeerForm.get("clusterName").setValue(t.cluster_name),this.editPeerForm.get("clientID").setValue(t.client_id),this.editPeerForm.get("monAddr").setValue(t.mon_host),this.editPeerForm.get("key").setValue(t.key)}update(){const t=new ki;let o;t.cluster_name=this.editPeerForm.getValue("clusterName"),t.client_id=this.editPeerForm.getValue("clientID"),t.mon_host=this.editPeerForm.getValue("monAddr"),t.key=this.editPeerForm.getValue("key"),o=this.taskWrapper.wrapTaskAroundCall("edit"===this.mode?{task:new E.R("rbd/mirroring/peer/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePeer(this.poolName,this.peerUUID,t)}:{task:new E.R("rbd/mirroring/peer/add",{pool_name:this.poolName}),call:this.rbdMirroringService.addPeer(this.poolName,t)}),o.subscribe({error:()=>this.editPeerForm.setErrors({cdSubmitButton:!0}),complete:()=>{this.rbdMirroringService.refresh(),this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(F.Kz),e.Y36(L.p4),e.Y36(q),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-pool-edit-peer-modal"]],decls:38,vars:13,consts:function(){let s,t,o,i,_,a,l,d,g,S,I,P,$,y,Q,Y,ee,te;return s="{VAR_SELECT, select, edit {Edit} other {Add}}",s=e.Zx4(s,{VAR_SELECT:"\ufffd0\ufffd"}),t="" + s + " pool mirror peer",o="{VAR_SELECT, select, edit {Edit} other {Add}}",o=e.Zx4(o,{VAR_SELECT:"\ufffd0\ufffd"}),i="" + o + " the pool mirror peer attributes for pool " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd1\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + " and click " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Submit" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ".",i=e.Zx4(i),_="Cluster Name",a="Name...",l="CephX ID",d="CephX ID...",g="Monitor Addresses",S="Comma-delimited addresses...",I="CephX Key",P="Base64-encoded key...",$="This field is required.",y="The cluster name is not valid.",Q="This field is required.",Y="The CephX ID is not valid.",ee="The monitory address is not valid.",te="CephX key must be base64 encoded.",[[3,"modalRef"],[1,"modal-title"],t,[1,"modal-content"],["name","editPeerForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],i,[1,"form-group"],["for","clusterName",1,"col-form-label","required"],_,["type","text","placeholder",a,"id","clusterName","name","clusterName","formControlName","clusterName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","clientID",1,"col-form-label","required"],l,["type","text","placeholder",d,"id","clientID","name","clientID","formControlName","clientID",1,"form-control"],["for","monAddr",1,"col-form-label"],g,["type","text","placeholder",S,"id","monAddr","name","monAddr","formControlName","monAddr",1,"form-control"],["for","key",1,"col-form-label"],I,["type","text","placeholder",P,"id","key","name","key","formControlName","key",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],$,y,Q,Y,ee,te]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.qZA(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p")(8,"span"),e.tHW(9,7),e._UZ(10,"kbd")(11,"kbd"),e.N_p(),e.qZA()(),e.TgZ(12,"div",8)(13,"label",9),e.SDv(14,10),e.qZA(),e._UZ(15,"input",11),e.YNc(16,Ki,2,0,"span",12),e.YNc(17,qi,2,0,"span",12),e.qZA(),e.TgZ(18,"div",8)(19,"label",13),e.SDv(20,14),e.qZA(),e._UZ(21,"input",15),e.YNc(22,Xi,2,0,"span",12),e.YNc(23,Qi,2,0,"span",12),e.qZA(),e.TgZ(24,"div",8)(25,"label",16)(26,"span"),e.SDv(27,17),e.qZA()(),e._UZ(28,"input",18),e.YNc(29,zi,2,0,"span",12),e.qZA(),e.TgZ(30,"div",8)(31,"label",19)(32,"span"),e.SDv(33,20),e.qZA()(),e._UZ(34,"input",21),e.YNc(35,Ji,2,0,"span",12),e.qZA()(),e.TgZ(36,"div",22)(37,"cd-form-button-panel",23),e.NdJ("submitActionEvent",function(){return o.update()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.mode),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.editPeerForm),e.xp6(7),e.pQV(o.mode)(o.poolName),e.QtT(9),e.xp6(5),e.Q6J("ngIf",o.editPeerForm.showError("clusterName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.editPeerForm.showError("clusterName",i,"invalidClusterName")),e.xp6(5),e.Q6J("ngIf",o.editPeerForm.showError("clientID",i,"required")),e.xp6(1),e.Q6J("ngIf",o.editPeerForm.showError("clientID",i,"invalidClientID")),e.xp6(6),e.Q6J("ngIf",o.editPeerForm.showError("monAddr",i,"invalidMonAddr")),e.xp6(6),e.Q6J("ngIf",o.editPeerForm.showError("key",i,"invalidKey")),e.xp6(2),e.Q6J("form",o.editPeerForm)("submitText",o.actionLabels.SUBMIT)}},dependencies:[c.O5,f.z,A.p,Oe.U,M.o,B.b,K.P,J.V,r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u]}),n})();const Vi=["healthTmpl"],Ui=["localTmpl"],ji=["remoteTmpl"];function Wi(n,s){if(1&n&&(e.TgZ(0,"span",6),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.health_color)),e.xp6(2),e.Oqu(o)}}function es(n,s){1&n&&(e.TgZ(0,"span",7),e.SDv(1,8),e.qZA())}function ts(n,s){1&n&&(e.TgZ(0,"span",9),e.SDv(1,10),e.qZA())}let ns=(()=>{class n{constructor(t,o,i,_,a){this.authStorageService=t,this.rbdMirroringService=o,this.modalService=i,this.taskWrapper=_,this.router=a,this.selection=new Ee.r,this.tableStatus=new se.E,this.data=[],this.permission=this.authStorageService.getPermissions().rbdMirroring;const l={permission:"update",icon:T.P.edit,click:()=>this.editModeModal(),name:"Edit Mode",canBePrimary:()=>!0},d={permission:"create",icon:T.P.add,name:"Add Peer",click:()=>this.editPeersModal("add"),disable:()=>!this.selection.first()||"disabled"===this.selection.first().mirror_mode,visible:()=>!this.getPeerUUID(),canBePrimary:()=>!1},g={permission:"update",icon:T.P.exchange,name:"Edit Peer",click:()=>this.editPeersModal("edit"),visible:()=>!!this.getPeerUUID()},S={permission:"delete",icon:T.P.destroy,name:"Delete Peer",click:()=>this.deletePeersModal(),visible:()=>!!this.getPeerUUID()};this.tableActions=[l,d,g,S]}ngOnInit(){this.columns=[{prop:"name",name:"Name",flexGrow:2},{prop:"mirror_mode",name:"Mode",flexGrow:2},{prop:"leader_id",name:"Leader",flexGrow:2},{prop:"image_local_count",name:"# Local",headerTemplate:this.localTmpl,flexGrow:2},{prop:"image_remote_count",name:"# Remote",headerTemplate:this.remoteTmpl,flexGrow:2},{prop:"health",name:"Health",cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.data=t.content_data.pools,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}editModeModal(){this.router.navigate(["/block/mirroring",{outlets:{modal:[L.MQ.EDIT,this.selection.first().name]}}])}editPeersModal(t){const o={poolName:this.selection.first().name,mode:t};"edit"===t&&(o.peerUUID=this.getPeerUUID()),this.modalRef=this.modalService.show(Yi,o)}deletePeersModal(){const t=this.selection.first().name,o=this.getPeerUUID();this.modalRef=this.modalService.show(ue.M,{itemDescription:"mirror peer",itemNames:[`${t} (${o})`],submitActionObservable:()=>new At.y(i=>{this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/mirroring/peer/delete",{pool_name:t}),call:this.rbdMirroringService.deletePeer(t,o)}).subscribe({error:_=>i.error(_),complete:()=>{this.rbdMirroringService.refresh(),i.complete()}})})})}getPeerUUID(){const t=this.selection.first(),o=this.data.find(i=>t&&t.name===i.name);if(o&&o.peer_uuids)return o.peer_uuids[0]}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(q),e.Y36(pe.Z),e.Y36(u.P),e.Y36(m.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-pools"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Vi,7),e.Gf(Ui,7),e.Gf(ji,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.healthTmpl=i.first),e.iGM(i=e.CRH())&&(o.localTmpl=i.first),e.iGM(i=e.CRH())&&(o.remoteTmpl=i.first)}},decls:9,vars:7,consts:function(){let s,t,o,i;return s="Local image count",t="# Local",o="Remote image count",i="# Remote",[["columnMode","flex","identifier","name","forceIdentifier","true","selectionType","single",3,"data","columns","autoReload","status","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["healthTmpl",""],["localTmpl",""],["remoteTmpl",""],["name","modal"],[3,"ngClass"],["ngbTooltip",s],t,["ngbTooltip",o],i]},template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1),e.qZA(),e.YNc(2,Wi,3,4,"ng-template",null,2,e.W1O),e.YNc(4,es,2,0,"ng-template",null,3,e.W1O),e.YNc(6,ts,2,0,"ng-template",null,4,e.W1O),e._UZ(8,"router-outlet",5)),2&t&&(e.Q6J("data",o.data)("columns",o.columns)("autoReload",-1)("status",o.tableStatus),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},dependencies:[c.mk,W.a,Me.K,m.lC,F._L,at]}),n})();function is(n,s){if(1&n&&e._UZ(0,"i",19),2&n){const t=e.oxw();e.Q6J("ngClass",t.icons.edit)}}function ss(n,s){if(1&n&&e._UZ(0,"i",19),2&n){const t=e.oxw();e.Q6J("ngClass",t.icons.check)}}let _s=(()=>{class n{constructor(t,o,i,_){this.authStorageService=t,this.rbdMirroringService=o,this.modalService=i,this.taskWrapper=_,this.selection=new Ee.r,this.peersExist=!0,this.subs=new _i.w,this.editing=!1,this.icons=T.P,this.permission=this.authStorageService.getPermissions().rbdMirroring;const a={permission:"update",icon:T.P.upload,click:()=>this.createBootstrapModal(),name:"Create Bootstrap Token",canBePrimary:()=>!0,disable:()=>!1},l={permission:"update",icon:T.P.download,click:()=>this.importBootstrapModal(),name:"Import Bootstrap Token",disable:()=>!1};this.tableActions=[a,l]}ngOnInit(){this.createForm(),this.subs.add(this.rbdMirroringService.startPolling()),this.subs.add(this.rbdMirroringService.subscribeSummary(t=>{this.status=t.content_data.status,this.peersExist=!!t.content_data.pools.find(o=>o.peer_uuids.length>0)})),this.rbdMirroringService.getSiteName().subscribe(t=>{this.siteName=t.site_name,this.rbdmirroringForm.get("siteName").setValue(this.siteName)})}createForm(){this.rbdmirroringForm=new Z.d({siteName:new r.p4({value:"",disabled:!0})})}ngOnDestroy(){this.subs.unsubscribe()}updateSiteName(){this.editing&&this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/mirroring/site_name/edit",{}),call:this.rbdMirroringService.setSiteName(this.rbdmirroringForm.getValue("siteName"))}).subscribe({complete:()=>{this.rbdMirroringService.refresh()}}),this.editing=!this.editing}createBootstrapModal(){this.modalRef=this.modalService.show(gi,{siteName:this.siteName})}importBootstrapModal(){this.modalRef=this.modalService.show(Mi,{siteName:this.siteName})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(q),e.Y36(pe.Z),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring"]],decls:31,vars:10,consts:function(){let s,t,o,i;return s="Site Name",t="Daemons",o="Pools",i="Images",[["name","rbdmirroringForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"row","mb-3"],[1,"col-md-auto"],["for","siteName",1,"col-form-label"],s,[1,"col-sm-4","d-flex"],["type","text","id","siteName","name","siteName","formControlName","siteName",1,"form-control"],["id","editSiteName",1,"btn","btn-light",3,"click"],[3,"ngClass",4,"ngIf"],[3,"source","byId"],[1,"col"],[1,"table-actions","float-end",3,"permission","selection","tableActions"],[1,"row"],[1,"col-sm-6"],t,o,[1,"col-md-12"],i,[3,"ngClass"]]},template:function(t,o){1&t&&(e.TgZ(0,"form",0,1)(2,"div",2)(3,"div",3)(4,"label",4),e.SDv(5,5),e.qZA()(),e.TgZ(6,"div",6),e._UZ(7,"input",7),e.TgZ(8,"button",8),e.NdJ("click",function(){return o.updateSiteName()}),e.YNc(9,is,1,1,"i",9),e.YNc(10,ss,1,1,"i",9),e.qZA(),e._UZ(11,"cd-copy-2-clipboard-button",10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"cd-table-actions",12),e.qZA()()(),e.TgZ(14,"div",13)(15,"div",14)(16,"legend"),e.SDv(17,15),e.qZA(),e.TgZ(18,"div"),e._UZ(19,"cd-mirroring-daemons"),e.qZA()(),e.TgZ(20,"div",14)(21,"legend"),e.SDv(22,16),e.qZA(),e.TgZ(23,"div"),e._UZ(24,"cd-mirroring-pools"),e.qZA()()(),e.TgZ(25,"div",13)(26,"div",17)(27,"legend"),e.SDv(28,18),e.qZA(),e.TgZ(29,"div"),e._UZ(30,"cd-mirroring-images"),e.qZA()()()),2&t&&(e.Q6J("formGroup",o.rbdmirroringForm),e.xp6(7),e.uIk("disabled",!o.editing||null),e.xp6(1),e.uIk("title",o.editing?"Save":"Edit"),e.xp6(1),e.Q6J("ngIf",!o.editing),e.xp6(1),e.Q6J("ngIf",o.editing),e.xp6(1),e.Q6J("source",o.siteName)("byId",!1),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},dependencies:[c.mk,c.O5,Ye.s,Me.K,M.o,B.b,J.V,r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u,Pi,Hi,ns]}),n})();class as{}function rs(n,s){if(1&n&&(e.TgZ(0,"option",16),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function ls(n,s){1&n&&(e.TgZ(0,"span",17),e.SDv(1,18),e.qZA())}let cs=(()=>{class n{constructor(t,o,i,_,a,l){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.route=a,this.location=l,this.bsConfig={containerClass:"theme-default"},this.peerExists=!1,this.mirrorModes=[{id:"disabled",name:"Disabled"},{id:"pool",name:"Pool"},{id:"image",name:"Image"}],this.createForm()}createForm(){this.editModeForm=new Z.d({mirrorMode:new r.p4("",{validators:[r.kI.required,this.validateMode.bind(this)]})})}ngOnInit(){this.route.params.subscribe(t=>{this.poolName=t.pool_name}),this.pattern=`${this.poolName}`,this.rbdMirroringService.getPool(this.poolName).subscribe(t=>{this.setResponse(t)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.peerExists=!1;const i=t.content_data.pools.find(_=>this.poolName===_.name);this.peerExists=i&&i.peer_uuids.length})}ngOnDestroy(){this.subs.unsubscribe()}validateMode(t){return"disabled"===t.value&&this.peerExists?{cannotDisable:{value:t.value}}:null}setResponse(t){this.editModeForm.get("mirrorMode").setValue(t.mirror_mode)}update(){const t=new as;t.mirror_mode=this.editModeForm.getValue("mirrorMode"),this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/mirroring/pool/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePool(this.poolName,t)}).subscribe({error:()=>this.editModeForm.setErrors({cdSubmitButton:!0}),complete:()=>{this.rbdMirroringService.refresh(),this.location.back()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(F.Kz),e.Y36(L.p4),e.Y36(q),e.Y36(u.P),e.Y36(m.gz),e.Y36(c.Ye))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-pool-edit-mode-modal"]],decls:21,vars:7,consts:function(){let s,t,o,i;return s="Edit pool mirror mode",t="To edit the mirror mode for pool\xA0 " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd0\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ", select a new mode from the list and click\xA0 " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Update" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ".",t=e.Zx4(t),o="Mode",i="Peer clusters must be removed prior to disabling mirror.",[["pageURL","mirroring",3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","editModeForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","mirrorMode",1,"col-form-label"],o,["id","mirrorMode","name","mirrorMode","formControlName","mirrorMode",1,"form-select"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[3,"value"],[1,"invalid-feedback"],i]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd")(11,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(12,"div",8)(13,"label",9)(14,"span"),e.SDv(15,10),e.qZA()(),e.TgZ(16,"select",11),e.YNc(17,rs,2,2,"option",12),e.qZA(),e.YNc(18,ls,2,0,"span",13),e.qZA()(),e.TgZ(19,"div",14)(20,"cd-form-button-panel",15),e.NdJ("submitActionEvent",function(){return o.update()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.editModeForm),e.xp6(7),e.pQV(o.poolName),e.QtT(9),e.xp6(6),e.Q6J("ngForOf",o.mirrorModes),e.xp6(1),e.Q6J("ngIf",o.editModeForm.showError("mirrorMode",i,"cannotDisable")),e.xp6(2),e.Q6J("form",o.editModeForm)("submitText",o.actionLabels.UPDATE)}},dependencies:[c.sg,c.O5,f.z,A.p,M.o,K.P,J.V,r._Y,r.YN,r.Kr,r.EJ,r.JJ,r.JL,r.sg,r.u]}),n})();var Pt=p(7357),ds=p(28049),ps=p(43190),Ve=p(80842),rt=p(30633),Ue=p(47557),us=p(28211);class ms{}var Ie=(()=>{return(n=Ie||(Ie={}))[n.V1=1]="V1",n[n.V2=2]="V2",Ie;var n})();class gs{constructor(){this.features=[]}}class Ts{constructor(){this.features=[]}}class fs{}class Cs extends fs{constructor(){super(...arguments),this.features=[]}}class lt{constructor(){this.features=[],this.remove_scheduling=!1}}var je=(()=>{return(n=je||(je={})).editing="editing",n.cloning="cloning",n.copying="copying",je;var n})(),bt=p(18372),Ss=p(17932),Rs=p(60950);function Es(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"label",58),e.SDv(2,59),e.ALo(3,"titlecase"),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",60)(6,"hr"),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(3),e.pQV(e.lcZ(3,1,t.action)),e.QtT(2)}}function Ms(n,s){1&n&&(e.TgZ(0,"span",61),e.ynx(1),e.SDv(2,62),e.BQk(),e.qZA())}function Os(n,s){1&n&&(e.TgZ(0,"span",61),e.ynx(1),e.SDv(2,63),e.BQk(),e.qZA())}function hs(n,s){1&n&&e._UZ(0,"input",64)}function As(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,67),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ps(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,68),e.qZA()),2&n&&e.Q6J("ngValue",null)}function bs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,69),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Is(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function Ns(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"select",65),e.NdJ("change",function(){e.CHM(t);const i=e.oxw(2);return e.KtG(i.setPoolMirrorMode())}),e.YNc(1,As,2,1,"option",66),e.YNc(2,Ps,2,1,"option",66),e.YNc(3,bs,2,1,"option",66),e.YNc(4,Is,2,2,"option",46),e.qZA()}if(2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.pools)}}function Fs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,71),e.qZA())}const Ds=function(n,s){return[n,s]};function Ls(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"div",20),e._UZ(2,"i",72),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(2),e.Q6J("ngClass",e.WLB(1,Ds,t.icons.spinner,t.icons.spin))}}function vs(n,s){1&n&&e._UZ(0,"input",76)}function $s(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,78),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Bs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,79),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Gs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,80),e.qZA()),2&n&&e.Q6J("ngValue",null)}function ys(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function xs(n,s){if(1&n&&(e.TgZ(0,"select",77),e.YNc(1,$s,2,1,"option",66),e.YNc(2,Bs,2,1,"option",66),e.YNc(3,Gs,2,1,"option",66),e.YNc(4,ys,2,2,"option",46),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.namespaces)}}function Zs(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"label",73),e._uU(2," Namespace "),e.qZA(),e.TgZ(3,"div",12),e.YNc(4,vs,1,0,"input",74),e.YNc(5,xs,5,4,"select",75),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngIf","editing"===t.mode||!t.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==t.mode&&t.poolPermission.read)}}function ws(n,s){1&n&&(e.TgZ(0,"cd-helper")(1,"span"),e.SDv(2,81),e.qZA()())}function Hs(n,s){1&n&&e._UZ(0,"input",87)}function ks(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,89),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ks(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,90),e.qZA()),2&n&&e.Q6J("ngValue",null)}function qs(n,s){1&n&&(e.TgZ(0,"option",50),e._uU(1,"-- Select a data pool -- "),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Xs(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function Qs(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"select",88),e.NdJ("change",function(i){e.CHM(t);const _=e.oxw(3);return e.KtG(_.onDataPoolChange(i.target.value))}),e.YNc(1,ks,2,1,"option",66),e.YNc(2,Ks,2,1,"option",66),e.YNc(3,qs,2,1,"option",66),e.YNc(4,Xs,2,2,"option",46),e.qZA()}if(2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngIf",null===t.dataPools),e.xp6(1),e.Q6J("ngIf",null!==t.dataPools&&0===t.dataPools.length),e.xp6(1),e.Q6J("ngIf",null!==t.dataPools&&t.dataPools.length>0),e.xp6(1),e.Q6J("ngForOf",t.dataPools)}}function zs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,91),e.qZA())}const We=function(n){return{required:n}};function Js(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"label",82)(2,"span",72),e.SDv(3,83),e.qZA(),e._UZ(4,"cd-helper",84),e.qZA(),e.TgZ(5,"div",12),e.YNc(6,Hs,1,0,"input",85),e.YNc(7,Qs,5,4,"select",86),e.YNc(8,zs,2,0,"span",14),e.qZA()()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(4,We,"editing"!==o.mode)),e.xp6(4),e.Q6J("ngIf","editing"===o.mode||!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("dataPool",t,"required"))}}function Ys(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,92),e.qZA())}function Vs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,93),e.qZA())}function Us(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,94),e.qZA())}function js(n,s){if(1&n&&e._UZ(0,"cd-helper",98),2&n){const t=e.oxw().$implicit;e.s9C("html",t.helperHtml)}}function Ws(n,s){if(1&n&&(e.TgZ(0,"div",21),e._UZ(1,"input",95),e.TgZ(2,"label",96),e._uU(3),e.qZA(),e.YNc(4,js,1,1,"cd-helper",97),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.key),e.s9C("name",t.key),e.s9C("formControlName",t.key),e.xp6(1),e.s9C("for",t.key),e.xp6(1),e.Oqu(t.desc),e.xp6(1),e.Q6J("ngIf",t.helperHtml)}}const It=function(n){return["edit",n]},Nt=function(n){return{modal:n}},Ft=function(n){return{outlets:n}},Dt=function(n){return["/block/mirroring",n]};function e_(n,s){if(1&n&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,99),e._UZ(3,"b")(4,"a",100),e.N_p(),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("routerLink",e.VKq(7,Dt,e.VKq(5,Ft,e.VKq(3,Nt,e.VKq(1,It,t.currentPoolName)))))}}function t_(n,s){if(1&n&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,105),e._UZ(3,"b")(4,"a",100),e.N_p(),e.qZA()()),2&n){const t=e.oxw(4);e.xp6(4),e.Q6J("routerLink",e.VKq(7,Dt,e.VKq(5,Ft,e.VKq(3,Nt,e.VKq(1,It,t.currentPoolName)))))}}function o_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",102)(1,"input",103),e.NdJ("change",function(){e.CHM(t);const i=e.oxw(3);return e.KtG(i.setExclusiveLock())}),e.qZA(),e.TgZ(2,"label",104),e._uU(3),e.ALo(4,"titlecase"),e.qZA(),e.YNc(5,t_,5,9,"cd-helper",25),e.qZA()}if(2&n){const t=s.$implicit,o=e.oxw(3);e.xp6(1),e.Q6J("id",t)("value",t),e.uIk("disabled","pool"===o.poolMirrorMode&&"snapshot"===t||null),e.xp6(1),e.Q6J("for",t),e.xp6(1),e.Oqu(e.lcZ(4,6,t)),e.xp6(2),e.Q6J("ngIf","pool"===o.poolMirrorMode&&"snapshot"===t)}}function n_(n,s){if(1&n&&(e.TgZ(0,"div"),e.YNc(1,o_,6,8,"div",101),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngForOf",t.mirroringOptions)}}function i_(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"label",106),e.tHW(2,107),e._UZ(3,"cd-helper",108),e.N_p(),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",109),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(5),e.uIk("disabled",!1===t.peerConfigured||null)}}function s_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"a",110),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).advancedEnabled=!0,e.KtG(!1)}),e.SDv(1,111),e.qZA()}}function __(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function a_(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function r_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,112),e.qZA())}function l_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,113),e.qZA())}function c_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,114),e.qZA())}function d_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,115),e.qZA())}function p_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.YNc(9,Es,7,3,"div",8),e.TgZ(10,"div",9)(11,"label",10),e.SDv(12,11),e.qZA(),e.TgZ(13,"div",12),e._UZ(14,"input",13),e.YNc(15,Ms,3,0,"span",14),e.YNc(16,Os,3,0,"span",14),e.qZA()(),e.TgZ(17,"div",15),e.NdJ("change",function(i){e.CHM(t);const _=e.oxw();return e.KtG(_.onPoolChange(i.target.value))}),e.TgZ(18,"label",16),e.SDv(19,17),e.qZA(),e.TgZ(20,"div",12),e.YNc(21,hs,1,0,"input",18),e.YNc(22,Ns,5,4,"select",19),e.YNc(23,Fs,2,0,"span",14),e.qZA()(),e.YNc(24,Ls,3,4,"div",8),e.YNc(25,Zs,6,2,"div",8),e.TgZ(26,"div",9)(27,"div",20)(28,"div",21)(29,"input",22),e.NdJ("change",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.onUseDataPoolChange())}),e.qZA(),e.TgZ(30,"label",23),e.SDv(31,24),e.qZA(),e.YNc(32,ws,3,0,"cd-helper",25),e.qZA()()(),e.YNc(33,Js,9,6,"div",8),e.TgZ(34,"div",9)(35,"label",26),e.SDv(36,27),e.qZA(),e.TgZ(37,"div",12),e._UZ(38,"input",28),e.YNc(39,Ys,2,0,"span",14),e.YNc(40,Vs,2,0,"span",14),e.YNc(41,Us,2,0,"span",14),e.qZA()(),e.TgZ(42,"div",29)(43,"label",30),e.SDv(44,31),e.qZA(),e.TgZ(45,"div",12),e.YNc(46,Ws,5,6,"div",32),e.qZA()(),e.TgZ(47,"div",9)(48,"div",20)(49,"div",21)(50,"input",33),e.NdJ("change",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.setMirrorMode())}),e.qZA(),e.TgZ(51,"label",34),e._uU(52,"Mirroring"),e.qZA(),e.YNc(53,e_,5,9,"cd-helper",25),e.qZA(),e.YNc(54,n_,2,1,"div",25),e.qZA()(),e.YNc(55,i_,6,1,"div",8),e.TgZ(56,"div",35)(57,"div",36),e.YNc(58,s_,2,0,"a",37),e.qZA()(),e.TgZ(59,"div",38)(60,"legend",39),e.SDv(61,40),e.qZA(),e.TgZ(62,"div",41)(63,"h4",39),e.SDv(64,42),e.qZA(),e.TgZ(65,"div",9)(66,"label",43),e.tHW(67,44),e._UZ(68,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(69,"div",12)(70,"select",45),e.YNc(71,__,2,2,"option",46),e.qZA()()(),e.TgZ(72,"div",9)(73,"label",47),e.tHW(74,48),e._UZ(75,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(76,"div",12)(77,"select",49)(78,"option",50),e.SDv(79,51),e.qZA(),e.YNc(80,a_,2,2,"option",46),e.qZA(),e.YNc(81,r_,2,0,"span",14),e.YNc(82,l_,2,0,"span",14),e.qZA()(),e.TgZ(83,"div",9)(84,"label",52),e.tHW(85,53),e._UZ(86,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(87,"div",12),e._UZ(88,"input",54),e.YNc(89,c_,2,0,"span",14),e.YNc(90,d_,2,0,"span",14),e.qZA()()(),e.TgZ(91,"cd-rbd-configuration-form",55),e.NdJ("changes",function(i){e.CHM(t);const _=e.oxw();return e.KtG(_.getDirtyConfigurationValues=i)}),e.qZA()()(),e.TgZ(92,"div",56)(93,"cd-form-button-panel",57),e.NdJ("submitActionEvent",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.submit())}),e.ALo(94,"titlecase"),e.ALo(95,"upperFirst"),e.qZA()()()()()}if(2&n){const t=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.rbdForm),e.xp6(6),e.pQV(e.lcZ(6,36,o.action))(e.lcZ(7,38,o.resource)),e.QtT(5),e.xp6(2),e.Q6J("ngIf",o.rbdForm.getValue("parent")),e.xp6(6),e.Q6J("ngIf",o.rbdForm.showError("name",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("name",t,"pattern")),e.xp6(2),e.Q6J("ngClass",e.VKq(44,We,"editing"!==o.mode)),e.xp6(3),e.Q6J("ngIf","editing"===o.mode||!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("pool",t,"required")),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.rbdForm.getValue("pool")&&null===o.namespaces),e.xp6(1),e.Q6J("ngIf","editing"===o.mode&&o.rbdForm.getValue("namespace")||"editing"!==o.mode&&(o.namespaces&&o.namespaces.length>0||!o.poolPermission.read)),e.xp6(7),e.Q6J("ngIf",o.allDataPools.length<=1),e.xp6(1),e.Q6J("ngIf",o.rbdForm.getValue("useDataPool")),e.xp6(6),e.Q6J("ngIf",o.rbdForm.showError("size",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("size",t,"invalidSizeObject")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("size",t,"pattern")),e.xp6(5),e.Q6J("ngForOf",o.featuresList),e.xp6(7),e.Q6J("ngIf",!1===o.mirroring&&o.currentPoolName),e.xp6(1),e.Q6J("ngIf",o.mirroring),e.xp6(1),e.Q6J("ngIf","snapshot"===o.rbdForm.getValue("mirroringMode")&&o.mirroring),e.xp6(3),e.Q6J("ngIf",!o.advancedEnabled),e.xp6(1),e.Q6J("hidden",!o.advancedEnabled),e.xp6(12),e.Q6J("ngForOf",o.objectSizes),e.xp6(2),e.Q6J("ngClass",e.VKq(46,We,o.rbdForm.getValue("stripingCount"))),e.xp6(5),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.objectSizes),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingUnit",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingUnit",t,"invalidStripingUnit")),e.xp6(2),e.Q6J("ngClass",e.VKq(48,We,o.rbdForm.getValue("stripingUnit"))),e.xp6(5),e.Q6J("ngIf",o.rbdForm.showError("stripingCount",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingCount",t,"min")),e.xp6(1),e.Q6J("form",o.rbdForm)("initializeData",o.initializeConfigData),e.xp6(2),e.Q6J("form",t)("submitText",e.lcZ(94,40,o.action)+" "+e.lcZ(95,42,o.resource))}}let $e=(()=>{class n extends k.E{constructor(t,o,i,_,a,l,d,g,S,I){super(),this.authStorageService=t,this.route=o,this.poolService=i,this.rbdService=_,this.formatter=a,this.taskWrapper=l,this.dimlessBinaryPipe=d,this.actionLabels=g,this.router=S,this.rbdMirroringService=I,this.namespaces=[],this.namespacesByPoolCache={},this.pools=null,this.allPools=null,this.dataPools=null,this.allDataPools=[],this.featuresList=[],this.initializeConfigData=new Pt.t(1),this.peerConfigured=!1,this.advancedEnabled=!1,this.rbdFormMode=je,this.defaultObjectSize="4 MiB",this.mirroringOptions=["journal","snapshot"],this.mirroring=!1,this.currentPoolName="",this.objectSizes=["4 KiB","8 KiB","16 KiB","32 KiB","64 KiB","128 KiB","256 KiB","512 KiB","1 MiB","2 MiB","4 MiB","8 MiB","16 MiB","32 MiB"],this.defaultStripingUnit="4 MiB",this.defaultStripingCount=1,this.rbdImage=new Pt.t(1),this.icons=T.P,this.routerUrl=this.router.url,this.poolPermission=this.authStorageService.getPermissions().pool,this.resource="RBD",this.features={"deep-flatten":{desc:"Deep flatten",requires:null,allowEnable:!1,allowDisable:!0,helperHtml:"Feature can be disabled but can't be re-enabled later"},layering:{desc:"Layering",requires:null,allowEnable:!1,allowDisable:!1,helperHtml:"Feature flag can't be manipulated after the image is created. Disabling this option will also disable the Protect and Clone actions on Snapshot"},"exclusive-lock":{desc:"Exclusive lock",requires:null,allowEnable:!0,allowDisable:!0},"object-map":{desc:"Object map (requires exclusive-lock)",requires:"exclusive-lock",allowEnable:!0,allowDisable:!0,initDisabled:!0},"fast-diff":{desc:"Fast diff (interlocked with object-map)",requires:"object-map",allowEnable:!0,allowDisable:!0,interlockedWith:"object-map",initDisabled:!0}},this.featuresList=this.objToArray(this.features),this.createForm()}objToArray(t){return C().map(t,(o,i)=>Object.assign(o,{key:i}))}createForm(){this.rbdForm=new Z.d({parent:new r.p4(""),name:new r.p4("",{validators:[r.kI.required,r.kI.pattern(/^[^@/]+?$/)]}),pool:new r.p4(null,{validators:[r.kI.required]}),namespace:new r.p4(null),useDataPool:new r.p4(!1),dataPool:new r.p4(null),size:new r.p4(null,{updateOn:"blur"}),obj_size:new r.p4(this.defaultObjectSize),features:new Z.d(this.featuresList.reduce((t,o)=>(t[o.key]=new r.p4({value:!1,disabled:!!o.initDisabled}),t),{})),mirroring:new r.p4(""),schedule:new r.p4("",{validators:[r.kI.pattern(/^([0-9]+)d|([0-9]+)h|([0-9]+)m$/)]}),mirroringMode:new r.p4(""),stripingUnit:new r.p4(this.defaultStripingUnit),stripingCount:new r.p4(this.defaultStripingCount,{updateOn:"blur"})},this.validateRbdForm(this.formatter))}disableForEdit(){this.rbdForm.get("parent").disable(),this.rbdForm.get("pool").disable(),this.rbdForm.get("namespace").disable(),this.rbdForm.get("useDataPool").disable(),this.rbdForm.get("dataPool").disable(),this.rbdForm.get("obj_size").disable(),this.rbdForm.get("stripingUnit").disable(),this.rbdForm.get("stripingCount").disable(),this.rbdImage.subscribe(t=>{t.image_format===Ie.V1?(this.rbdForm.get("deep-flatten").disable(),this.rbdForm.get("layering").disable(),this.rbdForm.get("exclusive-lock").disable()):(this.rbdForm.get("deep-flatten").value||this.rbdForm.get("deep-flatten").disable(),this.rbdForm.get("layering").disable())})}disableForClone(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}disableForCopy(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}ngOnInit(){this.prepareFormForAction(),this.gatherNeededData().subscribe(this.handleExternalData.bind(this))}setExclusiveLock(){this.mirroring&&"journal"===this.rbdForm.get("mirroringMode").value?(this.rbdForm.get("exclusive-lock").setValue(!0),this.rbdForm.get("exclusive-lock").disable()):(this.rbdForm.get("exclusive-lock").enable(),"pool"===this.poolMirrorMode&&this.rbdForm.get("mirroringMode").setValue(this.mirroringOptions[0]))}setMirrorMode(){this.mirroring=!this.mirroring,this.setExclusiveLock(),this.checkPeersConfigured()}checkPeersConfigured(t){var o=t||this.rbdForm.get("pool").value;this.rbdMirroringService.getPeerForPool(o).subscribe(i=>{i.length>0&&(this.peerConfigured=!0)})}setPoolMirrorMode(){this.currentPoolName=this.mode===this.rbdFormMode.editing?this.response?.pool_name:this.rbdForm.getValue("pool"),this.currentPoolName&&(this.rbdMirroringService.refresh(),this.rbdMirroringService.subscribeSummary(t=>{const o=t.content_data.pools.find(i=>i.name===this.currentPoolName);this.poolMirrorMode=o.mirror_mode,"disabled"===o.mirror_mode&&(this.mirroring=!1,this.rbdForm.get("mirroring").setValue(this.mirroring),this.rbdForm.get("mirroring").disable())})),this.setExclusiveLock()}prepareFormForAction(){const t=this.routerUrl;t.startsWith("/block/rbd/edit")?(this.mode=this.rbdFormMode.editing,this.action=this.actionLabels.EDIT,this.disableForEdit()):t.startsWith("/block/rbd/clone")?(this.mode=this.rbdFormMode.cloning,this.disableForClone(),this.action=this.actionLabels.CLONE):t.startsWith("/block/rbd/copy")?(this.mode=this.rbdFormMode.copying,this.action=this.actionLabels.COPY,this.disableForCopy()):this.action=this.actionLabels.CREATE,C().each(this.features,o=>{this.rbdForm.get("features").get(o.key).valueChanges.subscribe(i=>this.featureFormUpdate(o.key,i))})}gatherNeededData(){const t={};return this.mode?this.route.params.subscribe(o=>{const i=v.N.fromString(decodeURIComponent(o.image_spec));o.snap&&(this.snapName=decodeURIComponent(o.snap)),t.rbd=this.rbdService.get(i),this.checkPeersConfigured(i.poolName)}):t.defaultFeatures=this.rbdService.defaultFeatures(),this.mode!==this.rbdFormMode.editing&&this.poolPermission.read&&(t.pools=this.poolService.list(["pool_name","type","flags_names","application_metadata"])),(0,ce.D)(t)}handleExternalData(t){if(this.handlePoolData(t.pools),this.setPoolMirrorMode(),t.defaultFeatures&&this.setFeatures(t.defaultFeatures),t.rbd){const o=t.rbd;this.setResponse(o,this.snapName),this.rbdImage.next(o)}this.loadingReady()}handlePoolData(t){if(!t)return;const o=[],i=[];for(const _ of t)this.rbdService.isRBDPool(_)&&("replicated"===_.type?(o.push(_),i.push(_)):"erasure"===_.type&&-1!==_.flags_names.indexOf("ec_overwrites")&&i.push(_));if(this.pools=o,this.allPools=o,this.dataPools=i,this.allDataPools=i,1===this.pools.length){const _=this.pools[0].pool_name;this.rbdForm.get("pool").setValue(_),this.onPoolChange(_)}this.allDataPools.length<=1&&this.rbdForm.get("useDataPool").disable()}onPoolChange(t){const o=this.rbdForm.get("dataPool");o.value===t&&o.setValue(null),this.dataPools=this.allDataPools?this.allDataPools.filter(i=>i.pool_name!==t):[],this.namespaces=null,t in this.namespacesByPoolCache?this.namespaces=this.namespacesByPoolCache[t]:this.rbdService.listNamespaces(t).subscribe(i=>{i=i.map(_=>_.namespace),this.namespacesByPoolCache[t]=i,this.namespaces=i}),this.rbdForm.get("namespace").setValue(null)}onUseDataPoolChange(){this.rbdForm.getValue("useDataPool")||(this.rbdForm.get("dataPool").setValue(null),this.onDataPoolChange(null))}onDataPoolChange(t){const o=this.allPools.filter(i=>i.pool_name!==t);this.rbdForm.getValue("pool")===t&&this.rbdForm.get("pool").setValue(null),this.pools=o}validateRbdForm(t){return o=>{const i=o.get("useDataPool"),_=o.get("dataPool");let a=null;i.value&&null==_.value&&(a={required:!0}),_.setErrors(a);const l=o.get("size"),d=o.get("obj_size"),g=t.toBytes(null!=d.value?d.value:this.defaultObjectSize),S=o.get("stripingCount"),I=null!=S.value?S.value:this.defaultStripingCount;let P=null;null===l.value?P={required:!0}:I*g>t.toBytes(l.value)&&(P={invalidSizeObject:!0}),l.setErrors(P);const $=o.get("stripingUnit");let y=null;null===$.value&&null!==S.value?y={required:!0}:null!==$.value&&t.toBytes($.value)>g&&(y={invalidStripingUnit:!0}),$.setErrors(y);let Q=null;return null===S.value&&null!==$.value?Q={required:!0}:I<1&&(Q={min:!0}),S.setErrors(Q),null}}deepBoxCheck(t,o){this.getDependentChildFeatures(t).forEach(_=>{const a=this.rbdForm.get(_.key);o?a.enable({emitEvent:!1}):(a.disable({emitEvent:!1}),a.setValue(!1,{emitEvent:!1}),this.deepBoxCheck(_.key,o));const l=this.rbdForm.get("features");this.mode===this.rbdFormMode.editing&&l.get(_.key).enabled&&(-1!==this.response.features_name.indexOf(_.key)&&!_.allowDisable||-1===this.response.features_name.indexOf(_.key)&&!_.allowEnable)&&l.get(_.key).disable()})}getDependentChildFeatures(t){return C().filter(this.features,o=>o.requires===t)||[]}interlockCheck(t,o){const i=this.featuresList.find(_=>_.key===t);if(this.response){const _=null!=i.interlockedWith,a=this.featuresList.find(d=>d.interlockedWith===i.key),l=!!this.response.features_name.find(d=>d===i.key);if(_){if(l!==!!this.response.features_name.find(g=>g===i.interlockedWith))return}else if(a&&!!this.response.features_name.find(g=>g===a.key)!==l)return}o?C().filter(this.features,_=>_.interlockedWith===t).forEach(_=>this.rbdForm.get(_.key).setValue(!0,{emitEvent:!1})):i.interlockedWith&&this.rbdForm.get("features").get(i.interlockedWith).setValue(!1)}featureFormUpdate(t,o){if(o){const i=this.features[t].requires;if(i&&!this.rbdForm.getValue(i))return void this.rbdForm.get(`features.${t}`).setValue(!1)}this.deepBoxCheck(t,o),this.interlockCheck(t,o)}setFeatures(t){const o=this.rbdForm.get("features");C().forIn(this.features,i=>{-1!==t.indexOf(i.key)&&o.get(i.key).setValue(!0),this.featureFormUpdate(i.key,o.get(i.key).value)})}setResponse(t,o){this.response=t;const i=new v.N(t.pool_name,t.namespace,t.name).toString();if(this.mode===this.rbdFormMode.cloning)this.rbdForm.get("parent").setValue(`${i}@${o}`);else if(this.mode===this.rbdFormMode.copying)o?this.rbdForm.get("parent").setValue(`${i}@${o}`):this.rbdForm.get("parent").setValue(`${i}`);else if(t.parent){const _=t.parent;this.rbdForm.get("parent").setValue(`${_.pool_name}/${_.image_name}@${_.snap_name}`)}this.mode===this.rbdFormMode.editing&&(this.rbdForm.get("name").setValue(t.name),"snapshot"===t?.mirror_mode||t.features_name.includes("journaling")?(this.mirroring=!0,this.rbdForm.get("mirroring").setValue(this.mirroring),this.rbdForm.get("mirroringMode").setValue(t?.mirror_mode),this.rbdForm.get("schedule").setValue(t?.schedule_interval)):(this.mirroring=!1,this.rbdForm.get("mirroring").setValue(this.mirroring)),this.setPoolMirrorMode()),this.rbdForm.get("pool").setValue(t.pool_name),this.onPoolChange(t.pool_name),this.rbdForm.get("namespace").setValue(t.namespace),t.data_pool&&(this.rbdForm.get("useDataPool").setValue(!0),this.rbdForm.get("dataPool").setValue(t.data_pool)),this.rbdForm.get("size").setValue(this.dimlessBinaryPipe.transform(t.size)),this.rbdForm.get("obj_size").setValue(this.dimlessBinaryPipe.transform(t.obj_size)),this.setFeatures(t.features_name),this.rbdForm.get("stripingUnit").setValue(this.dimlessBinaryPipe.transform(t.stripe_unit)),this.rbdForm.get("stripingCount").setValue(t.stripe_count),this.initializeConfigData.next({initialData:this.response.configuration,sourceType:rt.h.image})}createRequest(){const t=new Cs;return t.pool_name=this.rbdForm.getValue("pool"),t.namespace=this.rbdForm.getValue("namespace"),t.name=this.rbdForm.getValue("name"),t.schedule_interval=this.rbdForm.getValue("schedule"),t.size=this.formatter.toBytes(this.rbdForm.getValue("size")),"image"===this.poolMirrorMode&&(t.mirror_mode=this.rbdForm.getValue("mirroringMode")),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(),t}addObjectSizeAndStripingToRequest(t){t.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),C().forIn(this.features,o=>{this.rbdForm.getValue(o.key)&&t.features.push(o.key)}),this.mirroring&&"journal"===this.rbdForm.getValue("mirroringMode")&&t.features.push("journaling"),t.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),t.stripe_count=this.rbdForm.getValue("stripingCount"),t.data_pool=this.rbdForm.getValue("dataPool")}createAction(){const t=this.createRequest();return this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/create",{pool_name:t.pool_name,namespace:t.namespace,image_name:t.name,schedule_interval:t.schedule_interval,start_time:t.start_time}),call:this.rbdService.create(t)})}editRequest(){const t=new lt;if(t.name=this.rbdForm.getValue("name"),t.schedule_interval=this.rbdForm.getValue("schedule"),t.name=this.rbdForm.getValue("name"),t.size=this.formatter.toBytes(this.rbdForm.getValue("size")),C().forIn(this.features,o=>{this.rbdForm.getValue(o.key)&&t.features.push(o.key)}),t.enable_mirror=this.rbdForm.getValue("mirroring"),t.enable_mirror)"journal"===this.rbdForm.getValue("mirroringMode")&&t.features.push("journaling"),"image"===this.poolMirrorMode&&(t.mirror_mode=this.rbdForm.getValue("mirroringMode"));else{const o=t.features.indexOf("journaling",0);o>-1&&t.features.splice(o,1)}return t.configuration=this.getDirtyConfigurationValues(),t}cloneRequest(){const t=new gs;return t.child_pool_name=this.rbdForm.getValue("pool"),t.child_namespace=this.rbdForm.getValue("namespace"),t.child_image_name=this.rbdForm.getValue("name"),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(!0,rt.h.image),t}editAction(){const t=new v.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/edit",{image_spec:t.toString()}),call:this.rbdService.update(t,this.editRequest())})}cloneAction(){const t=this.cloneRequest(),o=new v.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/clone",{parent_image_spec:o.toString(),parent_snap_name:this.snapName,child_pool_name:t.child_pool_name,child_namespace:t.child_namespace,child_image_name:t.child_image_name}),call:this.rbdService.cloneSnapshot(o,this.snapName,t)})}copyRequest(){const t=new Ts;return this.snapName&&(t.snapshot_name=this.snapName),t.dest_pool_name=this.rbdForm.getValue("pool"),t.dest_namespace=this.rbdForm.getValue("namespace"),t.dest_image_name=this.rbdForm.getValue("name"),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(!0,rt.h.image),t}copyAction(){const t=this.copyRequest(),o=new v.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/copy",{src_image_spec:o.toString(),dest_pool_name:t.dest_pool_name,dest_namespace:t.dest_namespace,dest_image_name:t.dest_image_name}),call:this.rbdService.copy(o,t)})}submit(){this.mode||this.rbdImage.next("create"),this.rbdImage.pipe((0,ds.P)(),(0,ps.w)(()=>this.mode===this.rbdFormMode.editing?this.editAction():this.mode===this.rbdFormMode.cloning?this.cloneAction():this.mode===this.rbdFormMode.copying?this.copyAction():this.createAction())).subscribe(()=>{},()=>this.rbdForm.setErrors({cdSubmitButton:!0}),()=>this.router.navigate(["/block/rbd"]))}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(m.gz),e.Y36(Ve.q),e.Y36(H),e.Y36(us.H),e.Y36(u.P),e.Y36(Ue.$),e.Y36(L.p4),e.Y36(m.F0),e.Y36(q))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,i,_,a,l,d,g,S,I,P,$,y,Q,Y,ee,te,w,_e,ae,O,me,ge,Te,fe,Ce,Se,Re,G,Ge,ye,xe,Ze,we,He,ke,Ke,qe,Xe,Qe,ze;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Name",o="Pool",i="Use a dedicated data pool",_="Size",a="e.g., 10GiB",l="Features",d="Advanced",g="Striping",S="Object size" + "\ufffd#68\ufffd" + "Objects in the Ceph Storage Cluster have a maximum configurable size (e.g., 2MB, 4MB, etc.). The object size should be large enough to accommodate many stripe units, and should be a multiple of the stripe unit." + "\ufffd/#68\ufffd" + "",I="Stripe unit" + "\ufffd#75\ufffd" + "Stripes have a configurable unit size (e.g., 64kb). The Ceph Client divides the data it will write to objects into equally sized stripe units, except for the last stripe unit. A stripe width, should be a fraction of the Object Size so that an object may contain many stripe units." + "\ufffd/#75\ufffd" + "",P="-- Select stripe unit --",$="Stripe count" + "\ufffd#86\ufffd" + "The Ceph Client writes a sequence of stripe units over a series of objects determined by the stripe count. The series of objects is called an object set. After the Ceph Client writes to the last object in the object set, it returns to the first object in the object set." + "\ufffd/#86\ufffd" + "",y="" + "\ufffd0\ufffd" + " from",Q="This field is required.",Y="'/' and '@' are not allowed.",ee="Loading...",te="-- No rbd pools available --",w="-- Select a pool --",_e="This field is required.",ae="Loading...",O="-- No namespaces available --",me="-- Select a namespace --",ge="You need more than one pool with the rbd application label use to use a dedicated data pool.",Te="Data pool",fe="Dedicated pool that stores the object-data of the RBD.",Ce="Loading...",Se="-- No data pools available --",Re="This field is required.",G="This field is required.",Ge="You have to increase the size.",ye="Size must be a number or in a valid format. eg: 5 GiB",xe="You need to enable a " + "\ufffd#3\ufffd" + "mirror mode" + "\ufffd/#3\ufffd" + " in the selected pool. Please " + "\ufffd#4\ufffd" + "click here to select a mode and enable it in this pool." + "\ufffd/#4\ufffd" + "",Ze="You need to enable " + "\ufffd#3\ufffd" + "image mirror mode" + "\ufffd/#3\ufffd" + " in the selected pool. Please " + "\ufffd#4\ufffd" + "click here to select a mode and enable it in this pool." + "\ufffd/#4\ufffd" + "",we="Create Mirror-Snapshots automatically on a periodic basis. The interval can be specified in days, hours, or minutes using d, h, m suffix respectively. To create mirror snapshots, you must import or create and have available peers to mirror",He="Schedule Interval " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + "",ke="e.g., 12h or 1d or 10m",Ke="Advanced...",qe="This field is required because stripe count is defined!",Xe="Stripe unit is greater than object size.",Qe="This field is required because stripe unit is defined!",ze="Stripe count must be greater than 0.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","rbdForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],["class","form-group row",4,"ngIf"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["type","text","placeholder","Name...","id","name","name","name","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"form-group","row",3,"change"],["for","pool",1,"cd-col-form-label",3,"ngClass"],o,["class","form-control","type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",4,"ngIf"],["id","pool","name","pool","class","form-select","formControlName","pool",3,"change",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","useDataPool","name","useDataPool","formControlName","useDataPool",1,"custom-control-input",3,"change"],["for","useDataPool",1,"custom-control-label"],i,[4,"ngIf"],["for","size",1,"cd-col-form-label","required"],_,["id","size","name","size","type","text","formControlName","size","placeholder",a,"defaultUnit","GiB","cdDimlessBinary","",1,"form-control"],["formGroupName","features",1,"form-group","row"],["for","features",1,"cd-col-form-label"],l,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],["type","checkbox","id","mirroring","name","mirroring","formControlName","mirroring",1,"custom-control-input",3,"change"],["for","mirroring",1,"custom-control-label"],[1,"row"],[1,"col-sm-12"],["class","float-end margin-right-md","href","",3,"click",4,"ngIf"],[3,"hidden"],[1,"cd-header"],d,[1,"col-md-12"],g,["for","size",1,"cd-col-form-label"],S,["id","obj_size","name","obj_size","formControlName","obj_size",1,"form-select"],[3,"value",4,"ngFor","ngForOf"],["for","stripingUnit",1,"cd-col-form-label",3,"ngClass"],I,["id","stripingUnit","name","stripingUnit","formControlName","stripingUnit",1,"form-select"],[3,"ngValue"],P,["for","stripingCount",1,"cd-col-form-label",3,"ngClass"],$,["id","stripingCount","name","stripingCount","formControlName","stripingCount","type","number",1,"form-control"],[3,"form","initializeData","changes"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["for","name",1,"cd-col-form-label"],y,["type","text","id","parent","name","parent","formControlName","parent",1,"form-control"],[1,"invalid-feedback"],Q,Y,["type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",1,"form-control"],["id","pool","name","pool","formControlName","pool",1,"form-select",3,"change"],[3,"ngValue",4,"ngIf"],ee,te,w,[3,"value"],_e,[3,"ngClass"],["for","pool",1,"cd-col-form-label"],["class","form-control","type","text","placeholder","Namespace...","id","namespace","name","namespace","formControlName","namespace",4,"ngIf"],["id","namespace","name","namespace","class","form-select","formControlName","namespace",4,"ngIf"],["type","text","placeholder","Namespace...","id","namespace","name","namespace","formControlName","namespace",1,"form-control"],["id","namespace","name","namespace","formControlName","namespace",1,"form-select"],ae,O,me,ge,["for","dataPool",1,"cd-col-form-label"],Te,["html",fe],["class","form-control","type","text","placeholder","Data pool name...","id","dataPool","name","dataPool","formControlName","dataPool",4,"ngIf"],["id","dataPool","name","dataPool","class","form-select","formControlName","dataPool",3,"change",4,"ngIf"],["type","text","placeholder","Data pool name...","id","dataPool","name","dataPool","formControlName","dataPool",1,"form-control"],["id","dataPool","name","dataPool","formControlName","dataPool",1,"form-select",3,"change"],Ce,Se,Re,G,Ge,ye,["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],[3,"html",4,"ngIf"],[3,"html"],xe,[3,"routerLink"],["class","custom-control custom-radio ms-2",4,"ngFor","ngForOf"],[1,"custom-control","custom-radio","ms-2"],["type","radio","name","mirroringMode","formControlName","mirroringMode",1,"form-check-input",3,"id","value","change"],[1,"form-check-label",3,"for"],Ze,[1,"cd-col-form-label"],He,["html",we],["id","schedule","name","schedule","type","text","formControlName","schedule","placeholder",ke,1,"form-control"],["href","",1,"float-end","margin-right-md",3,"click"],Ke,qe,Xe,Qe,ze]},template:function(t,o){1&t&&e.YNc(0,p_,96,50,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},dependencies:[c.mk,c.sg,c.O5,r._Y,r.YN,r.Kr,r.Fj,r.wV,r.Wl,r.EJ,r._,r.JJ,r.JL,r.sg,r.u,r.x0,bt.S,A.p,Oe.U,Ss.Q,ft.y,M.o,B.b,K.P,J.V,m.rH,Rs.d,c.rS,ot.m]}),n})();var Lt=p(71225),ct=p(36169),u_=p(72427),dt=p(51847),m_=p(16738),he=p.n(m_),pt=p(62862),g_=p(52266);function T_(n,s){1&n&&(e.TgZ(0,"div",18)(1,"span"),e.SDv(2,19),e.qZA()())}function f_(n,s){1&n&&(e.TgZ(0,"span",20),e.SDv(1,21),e.qZA())}function C_(n,s){1&n&&(e.TgZ(0,"span",20),e.SDv(1,22),e.qZA())}function S_(n,s){if(1&n&&e._UZ(0,"cd-date-time-picker",23),2&n){const t=e.oxw();e.Q6J("control",t.moveForm.get("expiresAt"))}}let R_=(()=>{class n{constructor(t,o,i,_,a){this.rbdService=t,this.activeModal=o,this.actionLabels=i,this.fb=_,this.taskWrapper=a,this.createForm()}createForm(){this.moveForm=this.fb.group({expiresAt:["",[z.h.custom("format",t=>!(""===t||he()(t,"YYYY-MM-DD HH:mm:ss").isValid())),z.h.custom("expired",t=>he()().isAfter(t))]]})}ngOnInit(){this.imageSpec=new v.N(this.poolName,this.namespace,this.imageName),this.imageSpecStr=this.imageSpec.toString(),this.pattern=`${this.poolName}/${this.imageName}`}moveImage(){let t=0;const o=this.moveForm.getValue("expiresAt");o&&(t=he()(o,"YYYY-MM-DD HH:mm:ss").diff(he()(),"seconds",!0)),t<0&&(t=0),this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/trash/move",{image_spec:this.imageSpecStr}),call:this.rbdService.moveTrash(this.imageSpec,t)}).subscribe({complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(H),e.Y36(F.Kz),e.Y36(L.p4),e.Y36(pt.O),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-move-modal"]],decls:23,vars:9,consts:function(){let s,t,o,i,_,a,l;return s="Move an image to trash",t="To move " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd0\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + " to trash, click " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Move" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ". Optionally, you can pick an expiration date.",t=e.Zx4(t),o="Protection expires at",i="NOT PROTECTED",_="This image contains snapshot(s), which will prevent it from being removed after moved to trash.",a="Wrong date format. Please use \"YYYY-MM-DD HH:mm:ss\".",l="Protection has already expired. Please pick a future date or leave it empty.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","moveForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],["class","alert alert-warning","role","alert",4,"ngIf"],t,[1,"form-group"],["for","expiresAt",1,"col-form-label"],o,["type","text","placeholder",i,"formControlName","expiresAt","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["p","ngbPopover"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["popContent",""],["role","alert",1,"alert","alert-warning"],_,[1,"invalid-feedback"],a,l,[3,"control"]]},template:function(t,o){if(1&t){const i=e.EpF();e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6),e.YNc(7,T_,3,0,"div",7),e.TgZ(8,"p"),e.tHW(9,8),e._UZ(10,"kbd")(11,"kbd"),e.N_p(),e.qZA(),e.TgZ(12,"div",9)(13,"label",10),e.SDv(14,11),e.qZA(),e.TgZ(15,"input",12,13),e.NdJ("click",function(){e.CHM(i);const a=e.MAs(16);return e.KtG(a.open())})("keypress",function(){e.CHM(i);const a=e.MAs(16);return e.KtG(a.close())}),e.qZA(),e.YNc(17,f_,2,0,"span",14),e.YNc(18,C_,2,0,"span",14),e.qZA()(),e.TgZ(19,"div",15)(20,"cd-form-button-panel",16),e.NdJ("submitActionEvent",function(){return o.moveImage()}),e.qZA()()(),e.BQk(),e.qZA(),e.YNc(21,S_,1,1,"ng-template",null,17,e.W1O)}if(2&t){const i=e.MAs(5),_=e.MAs(22);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.moveForm),e.xp6(3),e.Q6J("ngIf",o.hasSnapshots),e.xp6(4),e.pQV(o.imageSpecStr),e.QtT(9),e.xp6(4),e.Q6J("ngbPopover",_),e.xp6(2),e.Q6J("ngIf",o.moveForm.showError("expiresAt",i,"format")),e.xp6(1),e.Q6J("ngIf",o.moveForm.showError("expiresAt",i,"expired")),e.xp6(2),e.Q6J("form",o.moveForm)("submitText",o.actionLabels.MOVE)}},dependencies:[c.O5,r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u,F.o8,f.z,g_.J,A.p,M.o,B.b,K.P,J.V]}),n})();var E_=p(60251),vt=p(76317),M_=p(25917),$t=p(51295),ut=p(60737),O_=p(74255),Bt=p(71099),Gt=p(79765);function h_(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,17),e.qZA())}function A_(n,s){if(1&n&&(e.TgZ(0,"span"),e.tHW(1,18),e._UZ(2,"b"),e.N_p(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.imageName),e.QtT(1)}}function P_(n,s){1&n&&(e.TgZ(0,"cd-helper"),e.SDv(1,25),e.qZA())}function b_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",7)(1,"div",20)(2,"div",21)(3,"input",22),e.NdJ("change",function(){e.CHM(t);const i=e.oxw(2);return e.KtG(i.onMirrorCheckBoxChange())}),e.qZA(),e.TgZ(4,"label",23),e.SDv(5,24),e.qZA(),e.YNc(6,P_,2,0,"cd-helper",13),e.qZA()()()}if(2&n){const t=s.ngIf;e.xp6(3),e.uIk("disabled",!(t.length>0)||null),e.xp6(3),e.Q6J("ngIf",!t.length>0)}}function I_(n,s){if(1&n&&(e.ynx(0),e.YNc(1,b_,7,2,"div",19),e.ALo(2,"async"),e.BQk()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",e.lcZ(2,1,t.peerConfigured$))}}let N_=(()=>{class n{constructor(t,o,i,_,a,l){this.activeModal=t,this.rbdService=o,this.taskManagerService=i,this.notificationService=_,this.actionLabels=a,this.rbdMirrorService=l,this.editing=!1,this.onSubmit=new Gt.xQ,this.action=this.actionLabels.CREATE,this.resource="RBD Snapshot",this.createForm()}createForm(){this.snapshotForm=new Z.d({snapshotName:new r.p4("",{validators:[r.kI.required]}),mirrorImageSnapshot:new r.p4(!1,{})})}ngOnInit(){this.peerConfigured$=this.rbdMirrorService.getPeerForPool(this.poolName)}setSnapName(t){this.snapName=t,this.snapshotForm.get("snapshotName").setValue(t)}onMirrorCheckBoxChange(){!0===this.snapshotForm.getValue("mirrorImageSnapshot")?(this.snapshotForm.get("snapshotName").setValue(""),this.snapshotForm.get("snapshotName").clearValidators()):(this.snapshotForm.get("snapshotName").setValue(this.snapName),this.snapshotForm.get("snapshotName").setValidators([r.kI.required]),this.snapshotForm.get("snapshotName").updateValueAndValidity())}setEditing(t=!0){this.editing=t,this.action=this.editing?this.actionLabels.RENAME:this.actionLabels.CREATE}editAction(){const t=this.snapshotForm.getValue("snapshotName"),o=new v.N(this.poolName,this.namespace,this.imageName),i=new E.R;i.name="rbd/snap/edit",i.metadata={image_spec:o.toString(),snapshot_name:t},this.rbdService.renameSnapshot(o,this.snapName,t).toPromise().then(()=>{this.taskManagerService.subscribe(i.name,i.metadata,_=>{this.notificationService.notifyTask(_)}),this.activeModal.close(),this.onSubmit.next(this.snapName)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}createAction(){const t=this.snapshotForm.getValue("snapshotName"),o=this.snapshotForm.getValue("mirrorImageSnapshot"),i=new v.N(this.poolName,this.namespace,this.imageName),_=new E.R;_.name="rbd/snap/create",_.metadata={image_spec:i.toString(),snapshot_name:t},this.rbdService.createSnapshot(i,t,o).toPromise().then(()=>{this.taskManagerService.subscribe(_.name,_.metadata,a=>{this.notificationService.notifyTask(a)}),this.activeModal.close(),this.onSubmit.next(t)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}submit(){this.editing?this.editAction():this.createAction()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(F.Kz),e.Y36(H),e.Y36(Bt.k),e.Y36(ve.g),e.Y36(L.p4),e.Y36(q))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-snapshot-form-modal"]],decls:21,vars:18,consts:function(){let s,t,o,i,_,a;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Name",o="This field is required.",i="Snapshot mode is enabled on image " + "\ufffd#2\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#2\ufffd" + ": snapshot names are auto generated",_="Mirror Image Snapshot",a="The peer must be registered to do this action.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","snapshotForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","snapshotName",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["type","text","placeholder","Snapshot name...","id","snapshotName","name","snapshotName","formControlName","snapshotName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],o,i,["class","form-group row",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","mirrorImageSnapshot","name","mirrorImageSnapshot","id","mirrorImageSnapshot",1,"custom-control-input",3,"change"],["for","mirrorImageSnapshot",1,"custom-control-label"],_,a]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.YNc(14,h_,2,0,"span",12),e.YNc(15,A_,3,1,"span",13),e.qZA()(),e.YNc(16,I_,3,3,"ng-container",13),e.qZA(),e.TgZ(17,"div",14)(18,"cd-form-button-panel",15),e.NdJ("submitActionEvent",function(){return o.submit()}),e.ALo(19,"titlecase"),e.ALo(20,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,10,o.action))(e.lcZ(4,12,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.snapshotForm),e.xp6(7),e.uIk("disabled","snapshot"===o.mirroring&&!0===o.snapshotForm.getValue("mirrorImageSnapshot")||null),e.xp6(1),e.Q6J("ngIf",o.snapshotForm.showError("snapshotName",i,"required")),e.xp6(1),e.Q6J("ngIf","snapshot"===o.mirroring&&!0===o.snapshotForm.getValue("mirrorImageSnapshot")||null),e.xp6(1),e.Q6J("ngIf","snapshot"===o.mirroring||null),e.xp6(2),e.Q6J("form",o.snapshotForm)("submitText",e.lcZ(19,14,o.action)+" "+e.lcZ(20,16,o.resource))}},dependencies:[c.O5,r._Y,r.Fj,r.Wl,r.JJ,r.JL,r.sg,r.u,bt.S,f.z,A.p,Oe.U,M.o,B.b,K.P,J.V,c.Ov,c.rS,ot.m]}),n})();class F_{constructor(s,t,o){this.featuresName=t,this.cloneFormatVersion=1,o.cloneFormatVersion().subscribe(i=>{this.cloneFormatVersion=i}),this.create={permission:"create",icon:T.P.add,name:s.CREATE},this.rename={permission:"update",icon:T.P.edit,name:s.RENAME,disable:i=>this.disableForMirrorSnapshot(i)||!i.hasSingleSelection},this.protect={permission:"update",icon:T.P.lock,visible:i=>i.hasSingleSelection&&!i.first().is_protected,name:s.PROTECT,disable:i=>this.disableForMirrorSnapshot(i)||this.getProtectDisableDesc(i,this.featuresName)},this.unprotect={permission:"update",icon:T.P.unlock,visible:i=>i.hasSingleSelection&&i.first().is_protected,name:s.UNPROTECT,disable:i=>this.disableForMirrorSnapshot(i)},this.clone={permission:"create",canBePrimary:i=>i.hasSingleSelection,disable:i=>this.getCloneDisableDesc(i)||this.disableForMirrorSnapshot(i),icon:T.P.clone,name:s.CLONE},this.copy={permission:"create",canBePrimary:i=>i.hasSingleSelection,disable:i=>!i.hasSingleSelection||i.first().cdExecuting||this.disableForMirrorSnapshot(i),icon:T.P.copy,name:s.COPY},this.rollback={permission:"update",icon:T.P.undo,name:s.ROLLBACK,disable:i=>this.disableForMirrorSnapshot(i)||!i.hasSingleSelection},this.deleteSnap={permission:"delete",icon:T.P.destroy,disable:i=>{const _=i.first();return!i.hasSingleSelection||_.cdExecuting||_.is_protected||this.disableForMirrorSnapshot(i)},name:s.DELETE},this.ordering=[this.create,this.rename,this.protect,this.unprotect,this.clone,this.copy,this.rollback,this.deleteSnap]}getProtectDisableDesc(s,t){return!(s.hasSingleSelection&&!s.first().cdExecuting)||!t?.includes("layering")&&"The layering feature needs to be enabled on parent image"}getCloneDisableDesc(s){return!(s.hasSingleSelection&&!s.first().cdExecuting)||1===this.cloneFormatVersion&&!s.first().is_protected&&"Snapshot must be protected in order to clone."}disableForMirrorSnapshot(s){return s.hasSingleSelection&&"snapshot"===s.first().mirror_mode&&s.first().name.includes(".mirror.")}}class D_{}var Be=p(96102);const L_=["nameTpl"],v_=["rollbackTpl"];function $_(n,s){if(1&n&&(e.ynx(0),e.SDv(1,3),e.BQk(),e.TgZ(2,"strong"),e._uU(3),e.qZA(),e._uU(4,".\n")),2&n){const t=s.$implicit;e.xp6(3),e.hij(" ",t.snapName,"")}}let B_=(()=>{class n{constructor(t,o,i,_,a,l,d,g,S,I,P){this.authStorageService=t,this.modalService=o,this.dimlessBinaryPipe=i,this.cdDatePipe=_,this.rbdService=a,this.taskManagerService=l,this.notificationService=d,this.summaryService=g,this.taskListService=S,this.actionLabels=I,this.cdr=P,this.snapshots=[],this.selection=new Ee.r,this.builders={"rbd/snap/create":$=>{const y=new D_;return y.name=$.snapshot_name,y}},this.permission=this.authStorageService.getPermissions().rbdImage}ngOnInit(){this.columns=[{name:"Name",prop:"name",cellTransformation:Le.e.executing,flexGrow:2},{name:"Size",prop:"size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:"Used",prop:"disk_usage",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:"State",prop:"is_protected",flexGrow:1,cellTransformation:Le.e.badge,customTemplateConfig:{map:{true:{value:"PROTECTED",class:"badge-success"},false:{value:"UNPROTECTED",class:"badge-info"}}}},{name:"Created",prop:"timestamp",flexGrow:1,pipe:this.cdDatePipe}],this.imageSpec=new v.N(this.poolName,this.namespace,this.rbdName),this.rbdTableActions=new F_(this.actionLabels,this.featuresName,this.rbdService),this.rbdTableActions.create.click=()=>this.openCreateSnapshotModal(),this.rbdTableActions.rename.click=()=>this.openEditSnapshotModal(),this.rbdTableActions.protect.click=()=>this.toggleProtection(),this.rbdTableActions.unprotect.click=()=>this.toggleProtection();const t=()=>this.selection.first()&&`${this.imageSpec.toStringEncoded()}/${encodeURIComponent(this.selection.first().name)}`;this.rbdTableActions.clone.routerLink=()=>`/block/rbd/clone/${t()}`,this.rbdTableActions.copy.routerLink=()=>`/block/rbd/copy/${t()}`,this.rbdTableActions.rollback.click=()=>this.rollbackModal(),this.rbdTableActions.deleteSnap.click=()=>this.deleteSnapshotModal(),this.tableActions=this.rbdTableActions.ordering,this.taskListService.init(()=>(0,M_.of)(this.snapshots),null,_=>{$t.T.updateChanged(this,{data:_})&&(this.cdr.detectChanges(),this.data=[...this.data])},()=>{$t.T.updateChanged(this,{data:this.snapshots})&&(this.cdr.detectChanges(),this.data=[...this.data])},_=>["rbd/snap/create","rbd/snap/delete","rbd/snap/edit","rbd/snap/rollback"].includes(_.name)&&this.imageSpec.toString()===_.metadata.image_spec,(_,a)=>_.name===a.metadata.snapshot_name,this.builders)}ngOnChanges(){this.columns&&(this.imageSpec=new v.N(this.poolName,this.namespace,this.rbdName),this.rbdTableActions&&(this.rbdTableActions.featuresName=this.featuresName),this.taskListService.fetch())}openSnapshotModal(t,o=null){this.modalRef=this.modalService.show(N_,{mirroring:this.mirroring}),this.modalRef.componentInstance.poolName=this.poolName,this.modalRef.componentInstance.imageName=this.rbdName,this.modalRef.componentInstance.namespace=this.namespace,o?this.modalRef.componentInstance.setEditing():o=`${this.rbdName}_${he()().toISOString(!0)}`,this.modalRef.componentInstance.setSnapName(o),this.modalRef.componentInstance.onSubmit.subscribe(_=>{const a=new ut.o;a.name=t,a.metadata={image_spec:this.imageSpec.toString(),snapshot_name:_},this.summaryService.addRunningTask(a)})}openCreateSnapshotModal(){this.openSnapshotModal("rbd/snap/create")}openEditSnapshotModal(){this.openSnapshotModal("rbd/snap/edit",this.selection.first().name)}toggleProtection(){const t=this.selection.first().name,o=this.selection.first().is_protected,i=new E.R;i.name="rbd/snap/edit";const _=new v.N(this.poolName,this.namespace,this.rbdName);i.metadata={image_spec:_.toString(),snapshot_name:t},this.rbdService.protectSnapshot(_,t,!o).toPromise().then(()=>{const a=new ut.o;a.name=i.name,a.metadata=i.metadata,this.summaryService.addRunningTask(a),this.taskManagerService.subscribe(i.name,i.metadata,l=>{this.notificationService.notifyTask(l)})})}_asyncTask(t,o,i){const _=new E.R;_.name=o,_.metadata={image_spec:new v.N(this.poolName,this.namespace,this.rbdName).toString(),snapshot_name:i};const a=new v.N(this.poolName,this.namespace,this.rbdName);this.rbdService[t](a,i).toPromise().then(()=>{const l=new ut.o;l.name=_.name,l.metadata=_.metadata,this.summaryService.addRunningTask(l),this.modalRef.close(),this.taskManagerService.subscribe(l.name,l.metadata,d=>{this.notificationService.notifyTask(d)})}).catch(()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}rollbackModal(){const t=this.selection.selected[0].name,o=new v.N(this.poolName,this.namespace,this.rbdName).toString(),i={titleText:"RBD snapshot rollback",buttonText:"Rollback",bodyTpl:this.rollbackTpl,bodyData:{snapName:`${o}@${t}`},onSubmit:()=>{this._asyncTask("rollbackSnapshot","rbd/snap/rollback",t)}};this.modalRef=this.modalService.show(ct.Y,i)}deleteSnapshotModal(){const t=this.selection.selected[0].name;this.modalRef=this.modalService.show(ue.M,{itemDescription:"RBD snapshot",itemNames:[t],submitAction:()=>this._asyncTask("deleteSnapshot","rbd/snap/delete",t)})}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(pe.Z),e.Y36(Ue.$),e.Y36(Be.N),e.Y36(H),e.Y36(Bt.k),e.Y36(ve.g),e.Y36(O_.J),e.Y36(de.j),e.Y36(L.p4),e.Y36(e.sBO))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-snapshot-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(L_,5),e.Gf(v_,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.nameTpl=i.first),e.iGM(i=e.CRH())&&(o.rollbackTpl=i.first)}},inputs:{snapshots:"snapshots",featuresName:"featuresName",poolName:"poolName",namespace:"namespace",mirroring:"mirroring",primary:"primary",rbdName:"rbdName"},features:[e._Bn([de.j]),e.TTD],decls:4,vars:5,consts:function(){let s;return s="You are about to rollback",[["columnMode","flex","selectionType","single",3,"data","columns","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["rollbackTpl",""],s]},template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1),e.qZA(),e.YNc(2,$_,5,1,"ng-template",null,2,e.W1O)),2&t&&(e.Q6J("data",o.data)("columns",o.columns),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},dependencies:[W.a,Me.K],changeDetection:0}),n})();var G_=p(42176),y_=p(41039);const x_=["poolConfigurationSourceTpl"];function Z_(n,s){1&n&&(e.ynx(0),e.tHW(1,3),e._UZ(2,"strong"),e.N_p(),e.BQk())}function w_(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",38),e._uU(2),e.qZA()()),2&n){const t=s.$implicit;e.xp6(2),e.Oqu(t)}}function H_(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",39),e.SDv(2,40),e.qZA()()),2&n){e.oxw(3);const t=e.MAs(1);e.xp6(1),e.Q6J("ngbTooltip",t)}}function k_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.selection.disk_usage)," ")}}function K_(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",39),e.SDv(2,41),e.qZA()()),2&n){e.oxw(3);const t=e.MAs(1);e.xp6(1),e.Q6J("ngbTooltip",t)}}function q_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.selection.total_disk_usage)," ")}}function X_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.hij("/",t.selection.parent.pool_namespace,"")}}function Q_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.YNc(2,X_,2,1,"span",1),e._uU(3),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.Oqu(t.selection.parent.pool_name),e.xp6(1),e.Q6J("ngIf",t.selection.parent.pool_namespace),e.xp6(1),e.AsE("/",t.selection.parent.image_name,"@",t.selection.parent.snap_name,"")}}function z_(n,s){1&n&&(e.TgZ(0,"span"),e._uU(1,"-"),e.qZA())}function J_(n,s){if(1&n&&(e.TgZ(0,"table",17)(1,"tbody")(2,"tr")(3,"td",18),e.SDv(4,19),e.qZA(),e.TgZ(5,"td",20),e._uU(6),e.qZA()(),e.TgZ(7,"tr")(8,"td",21),e.SDv(9,22),e.qZA(),e.TgZ(10,"td"),e._uU(11),e.qZA()(),e.TgZ(12,"tr")(13,"td",21),e.SDv(14,23),e.qZA(),e.TgZ(15,"td"),e._uU(16),e.ALo(17,"empty"),e.qZA()(),e.TgZ(18,"tr")(19,"td",21),e.SDv(20,24),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.ALo(23,"cdDate"),e.qZA()(),e.TgZ(24,"tr")(25,"td",21),e.SDv(26,25),e.qZA(),e.TgZ(27,"td"),e._uU(28),e.ALo(29,"dimlessBinary"),e.qZA()(),e.TgZ(30,"tr")(31,"td",21),e.SDv(32,26),e.qZA(),e.TgZ(33,"td"),e._uU(34),e.ALo(35,"dimless"),e.qZA()(),e.TgZ(36,"tr")(37,"td",21),e.SDv(38,27),e.qZA(),e.TgZ(39,"td"),e._uU(40),e.ALo(41,"dimlessBinary"),e.qZA()(),e.TgZ(42,"tr")(43,"td",21),e.SDv(44,28),e.qZA(),e.TgZ(45,"td"),e.YNc(46,w_,3,1,"span",29),e.qZA()(),e.TgZ(47,"tr")(48,"td",21),e.SDv(49,30),e.qZA(),e.TgZ(50,"td"),e.YNc(51,H_,3,1,"span",1),e.YNc(52,k_,3,3,"span",1),e.qZA()(),e.TgZ(53,"tr")(54,"td",21),e.SDv(55,31),e.qZA(),e.TgZ(56,"td"),e.YNc(57,K_,3,1,"span",1),e.YNc(58,q_,3,3,"span",1),e.qZA()(),e.TgZ(59,"tr")(60,"td",21),e.SDv(61,32),e.qZA(),e.TgZ(62,"td"),e._uU(63),e.ALo(64,"dimlessBinary"),e.qZA()(),e.TgZ(65,"tr")(66,"td",21),e.SDv(67,33),e.qZA(),e.TgZ(68,"td"),e._uU(69),e.qZA()(),e.TgZ(70,"tr")(71,"td",21),e.SDv(72,34),e.qZA(),e.TgZ(73,"td"),e.YNc(74,Q_,4,4,"span",1),e.YNc(75,z_,2,0,"span",1),e.qZA()(),e.TgZ(76,"tr")(77,"td",21),e.SDv(78,35),e.qZA(),e.TgZ(79,"td"),e._uU(80),e.qZA()(),e.TgZ(81,"tr")(82,"td",21),e.SDv(83,36),e.qZA(),e.TgZ(84,"td"),e._uU(85),e.qZA()(),e.TgZ(86,"tr")(87,"td",21),e.SDv(88,37),e.qZA(),e.TgZ(89,"td"),e._uU(90),e.qZA()()()()),2&n){const t=e.oxw(2);e.xp6(6),e.Oqu(t.selection.name),e.xp6(5),e.Oqu(t.selection.pool_name),e.xp6(5),e.Oqu(e.lcZ(17,19,t.selection.data_pool)),e.xp6(6),e.Oqu(e.lcZ(23,21,t.selection.timestamp)),e.xp6(6),e.Oqu(e.lcZ(29,23,t.selection.size)),e.xp6(6),e.Oqu(e.lcZ(35,25,t.selection.num_objs)),e.xp6(6),e.Oqu(e.lcZ(41,27,t.selection.obj_size)),e.xp6(6),e.Q6J("ngForOf",t.selection.features_name),e.xp6(5),e.Q6J("ngIf",-1===(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(1),e.Q6J("ngIf",-1!==(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(5),e.Q6J("ngIf",-1===(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(1),e.Q6J("ngIf",-1!==(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(5),e.Oqu(e.lcZ(64,29,t.selection.stripe_unit)),e.xp6(6),e.Oqu(t.selection.stripe_count),e.xp6(5),e.Q6J("ngIf",t.selection.parent),e.xp6(1),e.Q6J("ngIf",!t.selection.parent),e.xp6(5),e.Oqu(t.selection.block_name_prefix),e.xp6(5),e.Oqu(t.selection.order),e.xp6(5),e.Oqu(t.selection.image_format)}}function Y_(n,s){if(1&n&&e._UZ(0,"cd-rbd-snapshot-list",42),2&n){const t=e.oxw(2);e.Q6J("snapshots",t.selection.snapshots)("featuresName",t.selection.features_name)("poolName",t.selection.pool_name)("primary",t.selection.primary)("namespace",t.selection.namespace)("mirroring",t.selection.mirror_mode)("rbdName",t.selection.name)}}function V_(n,s){if(1&n&&e._UZ(0,"cd-rbd-configuration-table",43),2&n){const t=e.oxw(2);e.Q6J("data",t.selection.configuration)}}function U_(n,s){if(1&n&&e._UZ(0,"cd-grafana",44),2&n){const t=e.oxw(2);e.Q6J("grafanaPath",t.rbdDashboardUrl)("type","metrics")}}function j_(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"nav",4,5),e.ynx(3,6),e.TgZ(4,"a",7),e.SDv(5,8),e.qZA(),e.YNc(6,J_,91,31,"ng-template",9),e.BQk(),e.ynx(7,10),e.TgZ(8,"a",7),e.SDv(9,11),e.qZA(),e.YNc(10,Y_,1,7,"ng-template",9),e.BQk(),e.ynx(11,12),e.TgZ(12,"a",7),e.SDv(13,13),e.qZA(),e.YNc(14,V_,1,1,"ng-template",9),e.BQk(),e.ynx(15,14),e.TgZ(16,"a",7),e.SDv(17,15),e.qZA(),e.YNc(18,U_,1,2,"ng-template",9),e.BQk(),e.qZA(),e._UZ(19,"div",16),e.BQk()),2&n){const t=e.MAs(2);e.xp6(19),e.Q6J("ngbNavOutlet",t)}}function W_(n,s){1&n&&(e.ynx(0),e.TgZ(1,"cd-alert-panel",45),e.SDv(2,46),e.qZA(),e.BQk())}function ea(n,s){1&n&&(e.ynx(0),e.TgZ(1,"strong",49),e.SDv(2,50),e.qZA(),e.BQk())}function ta(n,s){1&n&&(e.TgZ(0,"span",51),e.SDv(1,52),e.qZA())}function oa(n,s){if(1&n&&(e.YNc(0,ea,3,0,"ng-container",47),e.YNc(1,ta,2,0,"ng-template",null,48,e.W1O)),2&n){const t=s.value,o=e.MAs(2);e.Q6J("ngIf",+t)("ngIfElse",o)}}let na=(()=>{class n{ngOnChanges(){this.selection&&(this.rbdDashboardUrl=`rbd-details?var-Pool=${this.selection.pool_name}&var-Image=${this.selection.name}`)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-details"]],viewQuery:function(t,o){if(1&t&&(e.Gf(x_,7),e.Gf(F.Pz,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.poolConfigurationSourceTpl=i.first),e.iGM(i=e.CRH())&&(o.nav=i.first)}},inputs:{selection:"selection",images:"images"},features:[e.TTD],decls:6,vars:2,consts:function(){let s,t,o,i,_,a,l,d,g,S,I,P,$,y,Q,Y,ee,te,w,_e,ae,O,me,ge,Te,fe,Ce,Se,Re;return s="Only available for RBD images with " + "\ufffd#2\ufffd" + "fast-diff" + "\ufffd/#2\ufffd" + " enabled",t="Details",o="Snapshots",i="Configuration",_="Performance",a="Name",l="Pool",d="Data Pool",g="Created",S="Size",I="Objects",P="Object size",$="Features",y="Provisioned",Q="Total provisioned",Y="Striping unit",ee="Striping count",te="Parent",w="Block name prefix",_e="Order",ae="Format Version",O="N/A",me="N/A",ge="RBD details",Te="Information can not be displayed for RBD in status 'Removing'.",fe="This setting overrides the global value",Ce="Image",Se="This is the global value. No value for this option has been set for this image.",Re="Global",[["usageNotAvailableTooltipTpl",""],[4,"ngIf"],["poolConfigurationSourceTpl",""],s,["ngbNav","","cdStatefulTab","rbd-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],t,["ngbNavContent",""],["ngbNavItem","snapshots"],o,["ngbNavItem","configuration"],i,["ngbNavItem","performance"],_,[3,"ngbNavOutlet"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],a,[1,"w-75"],[1,"bold"],l,d,g,S,I,P,$,[4,"ngFor","ngForOf"],y,Q,Y,ee,te,w,_e,ae,[1,"badge","badge-dark","me-2"],["placement","top",1,"form-text","text-muted",3,"ngbTooltip"],O,me,[3,"snapshots","featuresName","poolName","primary","namespace","mirroring","rbdName"],[3,"data"],["title",ge,"uid","YhCYGcuZz","grafanaStyle","one",3,"grafanaPath","type"],["type","warning"],Te,[4,"ngIf","ngIfElse"],["global",""],["ngbTooltip",fe],Ce,["ngbTooltip",Se],Re]},template:function(t,o){1&t&&(e.YNc(0,Z_,3,0,"ng-template",null,0,e.W1O),e.YNc(2,j_,20,1,"ng-container",1),e.YNc(3,W_,3,0,"ng-container",1),e.YNc(4,oa,3,2,"ng-template",null,2,e.W1O)),2&t&&(e.xp6(2),e.Q6J("ngIf",o.selection&&"REMOVING"!==o.selection.source),e.xp6(1),e.Q6J("ngIf",o.selection&&"REMOVING"===o.selection.source))},dependencies:[c.sg,c.O5,F.uN,F.Pz,F.nv,F.Vx,F.tO,F.Dy,F._L,vt.F,it.G,ht.m,B_,G_.P,Ue.$,st.n,Be.N,y_.W]}),n})();const et=function(){return{exact:!0}};function ia(n,s){1&n&&(e.TgZ(0,"li",1)(1,"a",9),e.SDv(2,10),e.qZA()()),2&n&&(e.xp6(1),e.Q6J("routerLinkActiveOptions",e.DdM(1,et)))}let tt=(()=>{class n{constructor(t){this.authStorageService=t,this.grafanaPermission=this.authStorageService.getPermissions().grafana}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-tabs"]],decls:11,vars:7,consts:function(){let s,t,o,i;return s="Images",t="Namespaces",o="Trash",i="Overall Performance",[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/block/rbd","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],s,["routerLink","/block/rbd/namespaces","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],t,["routerLink","/block/rbd/trash","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],o,["class","nav-item",4,"ngIf"],["routerLink","/block/rbd/performance","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],i]},template:function(t,o){1&t&&(e.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),e.SDv(3,3),e.qZA()(),e.TgZ(4,"li",1)(5,"a",4),e.SDv(6,5),e.qZA()(),e.TgZ(7,"li",1)(8,"a",6),e.SDv(9,7),e.qZA()(),e.YNc(10,ia,3,2,"li",8),e.qZA()),2&t&&(e.xp6(2),e.Q6J("routerLinkActiveOptions",e.DdM(4,et)),e.xp6(3),e.Q6J("routerLinkActiveOptions",e.DdM(5,et)),e.xp6(3),e.Q6J("routerLinkActiveOptions",e.DdM(6,et)),e.xp6(2),e.Q6J("ngIf",o.grafanaPermission.read))},dependencies:[c.O5,m.rH,m.Od]}),n})();const sa=["usageTpl"],_a=["parentTpl"],aa=["nameTpl"],ra=["ScheduleTpl"],la=["mirroringTpl"],ca=["flattenTpl"],da=["deleteTpl"],pa=["removingStatTpl"],ua=["forcePromoteConfirmation"],ma=["usedTmpl"],ga=["totalUsedTmpl"],Ta=["imageUsageTpl"];function fa(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(2).value;e.xp6(1),e.hij("/",t.pool_namespace,"")}}function Ca(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.YNc(2,fa,2,1,"span",13),e._uU(3),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t.pool_name),e.xp6(1),e.Q6J("ngIf",t.pool_namespace),e.xp6(1),e.AsE("/",t.image_name,"@",t.snap_name,"")}}function Sa(n,s){1&n&&(e.TgZ(0,"span"),e._uU(1,"-"),e.qZA())}function Ra(n,s){if(1&n&&(e.YNc(0,Ca,4,4,"span",13),e.YNc(1,Sa,2,0,"span",13)),2&n){const t=s.value;e.Q6J("ngIf",t),e.xp6(1),e.Q6J("ngIf",!t)}}function Ea(n,s){if(1&n&&(e.TgZ(0,"span",17),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t[0])}}function Ma(n,s){if(1&n&&(e.TgZ(0,"span",17),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t[1])}}function Oa(n,s){1&n&&(e.TgZ(0,"span",17),e.SDv(1,18),e.qZA())}function ha(n,s){1&n&&(e.TgZ(0,"span",17),e.SDv(1,19),e.qZA())}function Aa(n,s){if(1&n&&(e.TgZ(0,"span",17),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function Pa(n,s){if(1&n&&(e.YNc(0,Ea,2,1,"span",14),e._uU(1,"\xa0 "),e.YNc(2,Ma,2,1,"span",15),e._uU(3,"\xa0 "),e.YNc(4,Oa,2,0,"span",15),e.YNc(5,ha,2,0,"span",15),e.YNc(6,Aa,2,1,"ng-template",null,16,e.W1O)),2&n){const t=s.value,o=s.row,i=e.MAs(7);e.Q6J("ngIf",3===t.length)("ngIfElse",i),e.xp6(2),e.Q6J("ngIf",3===t.length),e.xp6(2),e.Q6J("ngIf",!0===o.primary),e.xp6(1),e.Q6J("ngIf",!1===o.primary)}}function ba(n,s){if(1&n&&(e.TgZ(0,"span",17),e._uU(1),e.ALo(2,"cdDate"),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(e.lcZ(2,1,t[2]))}}function Ia(n,s){1&n&&e.YNc(0,ba,3,3,"span",15),2&n&&e.Q6J("ngIf",3===s.value.length)}function Na(n,s){if(1&n&&(e._uU(0," You are about to flatten "),e.TgZ(1,"strong"),e._uU(2),e.qZA(),e._uU(3,". "),e._UZ(4,"br")(5,"br"),e._uU(6," All blocks will be copied from parent "),e.TgZ(7,"strong"),e._uU(8),e.qZA(),e._uU(9," to child "),e.TgZ(10,"strong"),e._uU(11),e.qZA(),e._uU(12,".\n")),2&n){const t=s.$implicit;e.xp6(2),e.Oqu(t.child),e.xp6(6),e.Oqu(t.parent),e.xp6(3),e.Oqu(t.child)}}function Fa(n,s){if(1&n&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.Oqu(t)}}function Da(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"span"),e.SDv(2,23),e.qZA(),e.TgZ(3,"ul"),e.YNc(4,Fa,2,1,"li",24),e.qZA(),e.BQk()),2&n){const t=e.oxw(2).snapshots;e.xp6(4),e.Q6J("ngForOf",t)}}function La(n,s){if(1&n&&(e.TgZ(0,"div",21)(1,"span"),e.SDv(2,22),e.qZA(),e._UZ(3,"br"),e.YNc(4,Da,5,1,"ng-container",13),e.qZA()),2&n){const t=e.oxw().snapshots;e.xp6(4),e.Q6J("ngIf",t.length>0)}}function va(n,s){1&n&&e.YNc(0,La,5,1,"div",20),2&n&&e.Q6J("ngIf",s.hasSnapshots)}const $a=function(n,s){return[n,s]};function Ba(n,s){if(1&n&&e._UZ(0,"i",26),2&n){const t=e.oxw(2);e.Q6J("ngClass",e.WLB(1,$a,t.icons.spinner,t.icons.spin))}}function Ga(n,s){if(1&n&&(e.TgZ(0,"span",26),e._uU(1),e.qZA()),2&n){const t=e.oxw(),o=t.column,i=t.row;e.Q6J("ngClass",null!=o&&null!=o.customTemplateConfig&&o.customTemplateConfig.executingClass?o.customTemplateConfig.executingClass:"text-muted italic"),e.xp6(1),e.hij(" (",i.cdExecuting,") ")}}function ya(n,s){if(1&n&&e._UZ(0,"i",28),2&n){const t=e.oxw(2);e.Gre("",t.icons.warning," warn")}}function xa(n,s){if(1&n&&(e.YNc(0,Ba,1,4,"i",25),e.TgZ(1,"span",26),e._uU(2),e.qZA(),e.YNc(3,Ga,2,2,"span",25),e.YNc(4,ya,1,3,"i",27)),2&n){const t=s.column,o=s.value,i=s.row;e.Q6J("ngIf",i.cdExecuting),e.xp6(1),e.Q6J("ngClass",null==t||null==t.customTemplateConfig?null:t.customTemplateConfig.valueClass),e.xp6(1),e.hij(" ",o," "),e.xp6(1),e.Q6J("ngIf",i.cdExecuting),e.xp6(1),e.Q6J("ngIf",i.source&&"REMOVING"===i.source)}}function Za(n,s){if(1&n&&(e.TgZ(0,"cd-alert-panel",29),e._uU(1),e.qZA(),e.TgZ(2,"div",30),e.tHW(3,31),e._UZ(4,"strong"),e.N_p(),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Oqu(t.errorMessage)}}function wa(n,s){if(1&n&&(e.TgZ(0,"span",34)(1,"span"),e._uU(2,"-"),e.qZA()()),2&n){e.oxw(2);const t=e.MAs(22);e.Q6J("ngbTooltip",t)}}function Ha(n,s){if(1&n&&e._UZ(0,"cd-usage-bar",36),2&n){const t=e.oxw(2).row;e.Q6J("total",t.size)("used",t.disk_usage)("title",t.name)}}function ka(n,s){if(1&n&&e.YNc(0,Ha,1,3,"cd-usage-bar",35),2&n){const t=e.oxw().row;e.Q6J("ngIf",t)}}function Ka(n,s){if(1&n&&(e.YNc(0,wa,3,1,"span",32),e.YNc(1,ka,1,1,"ng-template",null,33,e.W1O)),2&n){const t=s.row,o=e.MAs(2);e.Q6J("ngIf",t.features_name&&(!t.features_name.includes("fast-diff")||"snapshot"===t.mirror_mode))("ngIfElse",o)}}function qa(n,s){1&n&&e._UZ(0,"div",37),2&n&&e.Q6J("innerHtml","Only available for RBD images with <strong>fast-diff</strong> enabled and without snapshot mirroring",e.oJD)}let Qa=(()=>{class n extends St.o{createRbdFromTaskImageSpec(t){const o=v.N.fromString(t);return this.createRbdFromTask(o.poolName,o.namespace,o.imageName)}createRbdFromTask(t,o,i){const _=new ms;return _.id="-1",_.unique_id="-1",_.name=i,_.namespace=o,_.pool_name=t,_.image_format=Ie.V2,_}constructor(t,o,i,_,a,l,d,g,S){super(),this.authStorageService=t,this.rbdService=o,this.dimlessBinaryPipe=i,this.dimlessPipe=_,this.modalService=a,this.taskWrapper=l,this.taskListService=d,this.urlBuilder=g,this.actionLabels=S,this.tableStatus=new Lt.c("light"),this.selection=new Ee.r,this.icons=T.P,this.count=0,this.tableContext=null,this.builders={"rbd/create":O=>this.createRbdFromTask(O.pool_name,O.namespace,O.image_name),"rbd/delete":O=>this.createRbdFromTaskImageSpec(O.image_spec),"rbd/clone":O=>this.createRbdFromTask(O.child_pool_name,O.child_namespace,O.child_image_name),"rbd/copy":O=>this.createRbdFromTask(O.dest_pool_name,O.dest_namespace,O.dest_image_name)},this.permission=this.authStorageService.getPermissions().rbdImage;const I=()=>this.selection.first()&&new v.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name).toStringEncoded();this.tableActions=[{permission:"create",icon:T.P.add,routerLink:()=>this.urlBuilder.getCreate(),canBePrimary:O=>!O.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:T.P.edit,routerLink:()=>this.urlBuilder.getEdit(I()),name:this.actionLabels.EDIT,disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)},{permission:"create",canBePrimary:O=>O.hasSingleSelection,disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)||!!O.first().cdExecuting,icon:T.P.copy,routerLink:()=>`/block/rbd/copy/${I()}`,name:this.actionLabels.COPY},{permission:"update",disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)||O.first().cdExecuting||!O.first().parent,icon:T.P.flatten,click:()=>this.flattenRbdModal(),name:this.actionLabels.FLATTEN},{permission:"update",icon:T.P.refresh,click:()=>this.resyncRbdModal(),name:this.actionLabels.RESYNC,disable:O=>this.getResyncDisableDesc(O)},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteRbdModal(),name:this.actionLabels.DELETE,disable:O=>this.getDeleteDisableDesc(O)},{permission:"delete",icon:T.P.trash,click:()=>this.trashRbdModal(),name:this.actionLabels.TRASH,disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)||O.first().image_format===Ie.V1},{permission:"update",icon:T.P.edit,click:()=>this.removeSchedulingModal(),name:this.actionLabels.REMOVE_SCHEDULING,disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)||void 0===O.first().schedule_info},{permission:"update",icon:T.P.edit,click:()=>this.actionPrimary(!0),name:this.actionLabels.PROMOTE,visible:()=>null!=this.selection.first()&&!this.selection.first().primary,disable:()=>"Disabled"===this.selection.first().mirror_mode?"Mirroring needs to be enabled on the image to perform this action":""},{permission:"update",icon:T.P.edit,click:()=>this.actionPrimary(!1),name:this.actionLabels.DEMOTE,visible:()=>null!=this.selection.first()&&this.selection.first().primary,disable:()=>"Disabled"===this.selection.first().mirror_mode?"Mirroring needs to be enabled on the image to perform this action":""}]}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:2,cellTemplate:this.removingStatTpl},{name:"Pool",prop:"pool_name",flexGrow:2},{name:"Namespace",prop:"namespace",flexGrow:2},{name:"Size",prop:"size",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessBinaryPipe},{name:"Usage",prop:"usage",cellTemplate:this.imageUsageTpl,flexGrow:1.5},{name:"Objects",prop:"num_objs",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessPipe},{name:"Object size",prop:"obj_size",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessBinaryPipe},{name:"Parent",prop:"parent",flexGrow:2,sortable:!1,cellTemplate:this.parentTpl},{name:"Mirroring",prop:"mirror_mode",flexGrow:3,sortable:!1,cellTemplate:this.mirroringTpl},{name:"Next Scheduled Snapshot",prop:"mirror_mode",flexGrow:3,sortable:!1,cellTemplate:this.ScheduleTpl}],this.taskListService.init(i=>this.getRbdImages(i),i=>this.prepareResponse(i),i=>this.images=i,()=>this.onFetchError(),i=>["rbd/clone","rbd/copy","rbd/create","rbd/delete","rbd/edit","rbd/flatten","rbd/trash/move"].includes(i.name),(i,_)=>{let a;switch(_.name){case"rbd/copy":a=new v.N(_.metadata.dest_pool_name,_.metadata.dest_namespace,_.metadata.dest_image_name).toString();break;case"rbd/clone":a=new v.N(_.metadata.child_pool_name,_.metadata.child_namespace,_.metadata.child_image_name).toString();break;case"rbd/create":a=new v.N(_.metadata.pool_name,_.metadata.namespace,_.metadata.image_name).toString();break;default:a=_.metadata.image_spec}return a===new v.N(i.pool_name,i.namespace,i.name).toString()},this.builders)}onFetchError(){this.table.reset(),this.tableStatus=new Lt.c("danger")}getRbdImages(t){return null!==t&&(this.tableContext=t),null==this.tableContext&&(this.tableContext=new h.E(()=>{})),this.rbdService.list(this.tableContext?.toParams())}prepareResponse(t){let o=[];return t.forEach(i=>{o=o.concat(i.value)}),o.forEach(i=>{if(void 0!==i.schedule_info){let _=[];const a="scheduled";let l=+new Date(i.schedule_info.schedule_time);const d=(new Date).getTimezoneOffset();l+=6e4*Math.abs(d),_.push(i.mirror_mode,a,l),i.mirror_mode=_,_=[]}}),this.count=o.length>0?u_.v.getCount(t[0]):0,o}updateSelection(t){this.selection=t}deleteRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=new v.N(t,o,i);this.modalRef=this.modalService.show(ue.M,{itemDescription:"RBD",itemNames:[_],bodyTemplate:this.deleteTpl,bodyContext:{hasSnapshots:this.hasSnapshots(),snapshots:this.listProtectedSnapshots()},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/delete",{image_spec:_.toString()}),call:this.rbdService.delete(_)})})}resyncRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=new v.N(t,o,i);this.modalRef=this.modalService.show(ue.M,{itemDescription:"RBD",itemNames:[_],actionDescription:"resync",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/edit",{image_spec:_.toString()}),call:this.rbdService.update(_,{resync:!0})})})}trashRbdModal(){const t={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,hasSnapshots:this.hasSnapshots()};this.modalRef=this.modalService.show(R_,t)}flattenRbd(t){this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/flatten",{image_spec:t.toString()}),call:this.rbdService.flatten(t)}).subscribe({complete:()=>{this.modalRef.close()}})}flattenRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=this.selection.first().parent,a=new v.N(_.pool_name,_.pool_namespace,_.image_name),l=new v.N(t,o,i),d={titleText:"RBD flatten",buttonText:"Flatten",bodyTpl:this.flattenTpl,bodyData:{parent:`${a}@${_.snap_name}`,child:l.toString()},onSubmit:()=>{this.flattenRbd(l)}};this.modalRef=this.modalService.show(ct.Y,d)}editRequest(){const t=new lt;return t.remove_scheduling=!t.remove_scheduling,t}removeSchedulingModal(){const t=this.selection.first().name,o=new v.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name);this.modalRef=this.modalService.show(ue.M,{actionDescription:"remove scheduling on",itemDescription:"image",itemNames:[`${t}`],submitActionObservable:()=>new At.y(i=>{this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/edit",{image_spec:o.toString()}),call:this.rbdService.update(o,this.editRequest())}).subscribe({error:_=>i.error(_),complete:()=>{this.modalRef.close()}})})})}actionPrimary(t){const o=new lt;o.primary=t,o.features=null;const i=new v.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name);this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/edit",{image_spec:i.toString()}),call:this.rbdService.update(i,o)}).subscribe(()=>{},_=>{_.preventDefault(),t&&(this.errorMessage=_.error.detail.replace(/\[.*?\]\s*/,""),o.force=!0,this.modalRef=this.modalService.show(ct.Y,{titleText:"Warning",buttonText:"Enforce",warning:!0,bodyTpl:this.forcePromoteConfirmation,onSubmit:()=>{this.rbdService.update(i,o).subscribe(()=>{this.modalRef.close()},()=>{this.modalRef.close()})}}))})}hasSnapshots(){return(this.selection.first().snapshots||[]).length>0}hasClonedSnapshots(t){return(t.snapshots||[]).some(i=>i.children&&i.children.length>0)}listProtectedSnapshots(){return this.selection.first().snapshots.reduce((i,_)=>(_.is_protected&&i.push(_.name),i),[])}getDeleteDisableDesc(t){const o=t.first();return o&&this.hasClonedSnapshots(o)?"This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.":this.getInvalidNameDisable(t)||this.hasClonedSnapshots(t.first())}getResyncDisableDesc(t){const o=t.first();return o&&this.imageIsPrimary(o)?"Primary RBD images cannot be resynced":this.getInvalidNameDisable(t)}imageIsPrimary(t){return t.primary}getInvalidNameDisable(t){return t.first()?.name?.match(/[@/]/)?"This RBD image has an invalid name and can't be managed by ceph.":!t.first()||!t.hasSingleSelection}getRemovingStatusDesc(t){return"REMOVING"===t.first()?.source&&"Action not possible for an RBD in status 'Removing'"}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(H),e.Y36(Ue.$),e.Y36(st.n),e.Y36(pe.Z),e.Y36(u.P),e.Y36(de.j),e.Y36(dt.F),e.Y36(L.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(W.a,7),e.Gf(sa,5),e.Gf(_a,7),e.Gf(aa,5),e.Gf(ra,7),e.Gf(la,7),e.Gf(ca,7),e.Gf(da,7),e.Gf(pa,7),e.Gf(ua,7),e.Gf(ma,7),e.Gf(ga,7),e.Gf(Ta,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.usageTpl=i.first),e.iGM(i=e.CRH())&&(o.parentTpl=i.first),e.iGM(i=e.CRH())&&(o.nameTpl=i.first),e.iGM(i=e.CRH())&&(o.ScheduleTpl=i.first),e.iGM(i=e.CRH())&&(o.mirroringTpl=i.first),e.iGM(i=e.CRH())&&(o.flattenTpl=i.first),e.iGM(i=e.CRH())&&(o.deleteTpl=i.first),e.iGM(i=e.CRH())&&(o.removingStatTpl=i.first),e.iGM(i=e.CRH())&&(o.forcePromoteConfirmation=i.first),e.iGM(i=e.CRH())&&(o.usedTmpl=i.first),e.iGM(i=e.CRH())&&(o.totalUsedTmpl=i.first),e.iGM(i=e.CRH())&&(o.imageUsageTpl=i.first)}},features:[e._Bn([de.j,{provide:dt.F,useValue:new dt.F("block/rbd")}]),e.qOj],decls:23,vars:13,consts:function(){let s,t,o,i,_,a;return s="primary",t="secondary",o="Deleting this image will also delete all its snapshots.",i="The following snapshots are currently protected and will be removed:",_="RBD in status 'Removing'",a="" + "\ufffd#4\ufffd" + " Do you want to force the operation? " + "\ufffd/#4\ufffd" + "",[["columnMode","flex","identifier","unique_id","forceIdentifier","true","selectionType","single",3,"data","columns","searchableObjects","serverSide","count","hasDetails","status","maxLimit","autoReload","fetchData","setExpandedRow","updateSelection"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["parentTpl",""],["mirroringTpl",""],["ScheduleTpl",""],["flattenTpl",""],["deleteTpl",""],["removingStatTpl",""],["forcePromoteConfirmation",""],["imageUsageTpl",""],["usageTooltip",""],[4,"ngIf"],["class","badge badge-info",4,"ngIf","ngIfElse"],["class","badge badge-info",4,"ngIf"],["probb",""],[1,"badge","badge-info"],s,t,["class","alert alert-warning","role","alert",4,"ngIf"],["role","alert",1,"alert","alert-warning"],o,i,[4,"ngFor","ngForOf"],[3,"ngClass",4,"ngIf"],[3,"ngClass"],["title",_,3,"class",4,"ngIf"],["title",_],["type","warning"],[1,"m-4"],a,[3,"ngbTooltip",4,"ngIf","ngIfElse"],["usageBar",""],[3,"ngbTooltip"],["decimals","2",3,"total","used","title",4,"ngIf"],["decimals","2",3,"total","used","title"],[3,"innerHtml"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0,1),e.NdJ("fetchData",function(_){return o.taskListService.fetch(_)})("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(3,"cd-table-actions",2)(4,"cd-rbd-details",3),e.qZA(),e.YNc(5,Ra,2,2,"ng-template",null,4,e.W1O),e.YNc(7,Pa,8,5,"ng-template",null,5,e.W1O),e.YNc(9,Ia,1,1,"ng-template",null,6,e.W1O),e.YNc(11,Na,13,3,"ng-template",null,7,e.W1O),e.YNc(13,va,1,1,"ng-template",null,8,e.W1O),e.YNc(15,xa,5,5,"ng-template",null,9,e.W1O),e.YNc(17,Za,5,1,"ng-template",null,10,e.W1O),e.YNc(19,Ka,3,2,"ng-template",null,11,e.W1O),e.YNc(21,qa,1,1,"ng-template",null,12,e.W1O)),2&t&&(e.xp6(1),e.Q6J("data",o.images)("columns",o.columns)("searchableObjects",!0)("serverSide",!0)("count",o.count)("hasDetails",!0)("status",o.tableStatus)("maxLimit",25)("autoReload",-1),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},dependencies:[c.mk,c.sg,c.O5,F._L,E_.O,it.G,W.a,Me.K,na,tt,Be.N],styles:[".warn[_ngcontent-%COMP%]{color:#d48200}"]}),n})();function za(n,s){1&n&&e._UZ(0,"input",19)}function Ja(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,24),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ya(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,25),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Va(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,26),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ua(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function ja(n,s){if(1&n&&(e.TgZ(0,"select",20),e.YNc(1,Ja,2,1,"option",21),e.YNc(2,Ya,2,1,"option",21),e.YNc(3,Va,2,1,"option",21),e.YNc(4,Ua,2,2,"option",22),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.pools)}}function Wa(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,29),e.qZA())}function er(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,30),e.qZA())}function tr(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,31),e.qZA())}let or=(()=>{class n{constructor(t,o,i,_,a,l){this.activeModal=t,this.actionLabels=o,this.authStorageService=i,this.notificationService=_,this.poolService=a,this.rbdService=l,this.pools=null,this.editing=!1,this.poolPermission=this.authStorageService.getPermissions().pool,this.createForm()}createForm(){this.namespaceForm=new Z.d({pool:new r.p4(""),namespace:new r.p4("")},this.validator(),this.asyncValidator())}validator(){return t=>{const o=t.get("pool"),i=t.get("namespace");let _=null;o.value||(_={required:!0}),o.setErrors(_);let a=null;return i.value||(a={required:!0}),i.setErrors(a),null}}asyncValidator(){return t=>new Promise(o=>{const i=t.get("pool"),_=t.get("namespace");this.rbdService.listNamespaces(i.value).subscribe(a=>{if(a.some(l=>l.namespace===_.value)){const l={namespaceExists:!0};_.setErrors(l),o(l)}else o(null)})})}ngOnInit(){this.onSubmit=new Gt.xQ,this.poolPermission.read&&this.poolService.list(["pool_name","type","application_metadata"]).then(t=>{const o=[];for(const i of t)this.rbdService.isRBDPool(i)&&"replicated"===i.type&&o.push(i);if(this.pools=o,1===this.pools.length){const i=this.pools[0].pool_name;this.namespaceForm.get("pool").setValue(i)}})}submit(){const t=this.namespaceForm.getValue("pool"),o=this.namespaceForm.getValue("namespace"),i=new E.R;i.name="rbd/namespace/create",i.metadata={pool:t,namespace:o},this.rbdService.createNamespace(t,o).toPromise().then(()=>{this.notificationService.show(nt.k.success,"Created namespace '" + t + "/" + o + "'"),this.activeModal.close(),this.onSubmit.next()}).catch(()=>{this.namespaceForm.setErrors({cdSubmitButton:!0})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(F.Kz),e.Y36(L.p4),e.Y36(oe.j),e.Y36(ve.g),e.Y36(Ve.q),e.Y36(H))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-namespace-form-modal"]],decls:23,vars:9,consts:function(){let s,t,o,i,_,a,l,d,g;return s="Create Namespace",t="Pool",o="Name",i="Loading...",_="-- No rbd pools available --",a="-- Select a pool --",l="This field is required.",d="This field is required.",g="Namespace already exists.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","namespaceForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","pool",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["class","form-control","type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",4,"ngIf"],["id","pool","name","pool","class","form-select","formControlName","pool",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["for","namespace",1,"cd-col-form-label","required"],o,["type","text","placeholder","Namespace name...","id","namespace","name","namespace","formControlName","namespace","autofocus","",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",1,"form-control"],["id","pool","name","pool","formControlName","pool",1,"form-select"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],[3,"ngValue"],i,_,a,[3,"value"],[1,"invalid-feedback"],l,d,g]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10),e.YNc(11,za,1,0,"input",11),e.YNc(12,ja,5,4,"select",12),e.YNc(13,Wa,2,0,"span",13),e.qZA()(),e.TgZ(14,"div",7)(15,"label",14),e.SDv(16,15),e.qZA(),e.TgZ(17,"div",10),e._UZ(18,"input",16),e.YNc(19,er,2,0,"span",13),e.YNc(20,tr,2,0,"span",13),e.qZA()()(),e.TgZ(21,"div",17)(22,"cd-form-button-panel",18),e.NdJ("submitActionEvent",function(){return o.submit()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.namespaceForm),e.xp6(7),e.Q6J("ngIf",!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.namespaceForm.showError("pool",i,"required")),e.xp6(6),e.Q6J("ngIf",o.namespaceForm.showError("namespace",i,"required")),e.xp6(1),e.Q6J("ngIf",o.namespaceForm.showError("namespace",i,"namespaceExists")),e.xp6(2),e.Q6J("form",o.namespaceForm)("submitText",o.actionLabels.CREATE)}},dependencies:[c.sg,c.O5,r._Y,r.YN,r.Kr,r.Fj,r.EJ,r.JJ,r.JL,r.sg,r.u,f.z,A.p,Oe.U,M.o,B.b,K.P,J.V]}),n})(),nr=(()=>{class n{constructor(t,o,i,_,a,l){this.authStorageService=t,this.rbdService=o,this.poolService=i,this.modalService=_,this.notificationService=a,this.actionLabels=l,this.selection=new Ee.r,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"create",icon:T.P.add,click:()=>this.createModal(),name:this.actionLabels.CREATE},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE,disable:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:"Namespace",prop:"namespace",flexGrow:1},{name:"Pool",prop:"pool",flexGrow:1},{name:"Total images",prop:"num_images",flexGrow:1}],this.refresh()}refresh(){this.poolService.list(["pool_name","type","application_metadata"]).then(t=>{t=t.filter(i=>this.rbdService.isRBDPool(i)&&"replicated"===i.type);const o=[];t.forEach(i=>{o.push(this.rbdService.listNamespaces(i.pool_name))}),o.length>0?(0,ce.D)(o).subscribe(i=>{const _=[];for(let a=0;a<i.length;a++){const d=t[a].pool_name;i[a].forEach(g=>{_.push({id:`${d}/${g.namespace}`,pool:d,namespace:g.namespace,num_images:g.num_images})})}this.namespaces=_}):this.namespaces=[]})}updateSelection(t){this.selection=t}createModal(){this.modalRef=this.modalService.show(or),this.modalRef.componentInstance.onSubmit.subscribe(()=>{this.refresh()})}deleteModal(){const t=this.selection.first().pool,o=this.selection.first().namespace;this.modalRef=this.modalService.show(ue.M,{itemDescription:"Namespace",itemNames:[`${t}/${o}`],submitAction:()=>this.rbdService.deleteNamespace(t,o).subscribe(()=>{this.notificationService.show(nt.k.success,"Deleted namespace '" + t + "/" + o + "'"),this.modalRef.close(),this.refresh()},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})})}getDeleteDisableDesc(){return this.selection.first()?.num_images>0?"Namespace contains images":!this.selection?.first()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(H),e.Y36(Ve.q),e.Y36(pe.Z),e.Y36(ve.g),e.Y36(L.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-namespace-list"]],features:[e._Bn([de.j])],decls:4,vars:5,consts:[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","fetchData","updateSelection"],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"]],template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()})("updateSelection",function(_){return o.updateSelection(_)}),e.TgZ(2,"div",1),e._UZ(3,"cd-table-actions",2),e.qZA()()),2&t&&(e.xp6(1),e.Q6J("data",o.namespaces)("columns",o.columns),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},dependencies:[W.a,Me.K,tt]}),n})(),ir=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-performance"]],decls:2,vars:2,consts:function(){let s;return s="RBD overview",[["title",s,"uid","41FrpeUiz","grafanaStyle","two",3,"grafanaPath","type"]]},template:function(t,o){1&t&&e._UZ(0,"cd-rbd-tabs")(1,"cd-grafana",0),2&t&&(e.xp6(1),e.Q6J("grafanaPath","rbd-overview?")("type","metrics"))},dependencies:[vt.F,tt]}),n})();var sr=p(91801);function _r(n,s){1&n&&e._UZ(0,"input",15)}function ar(n,s){if(1&n&&(e.TgZ(0,"option",20),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function rr(n,s){if(1&n&&(e.TgZ(0,"select",16)(1,"option",17),e.SDv(2,18),e.qZA(),e.YNc(3,ar,2,2,"option",19),e.qZA()),2&n){const t=e.oxw();e.xp6(3),e.Q6J("ngForOf",t.pools)}}let lr=(()=>{class n{constructor(t,o,i,_,a,l,d){this.authStorageService=t,this.rbdService=o,this.activeModal=i,this.actionLabels=_,this.fb=a,this.poolService=l,this.taskWrapper=d,this.poolPermission=this.authStorageService.getPermissions().pool}createForm(){this.purgeForm=this.fb.group({poolName:""})}ngOnInit(){this.poolPermission.read&&this.poolService.list(["pool_name","application_metadata"]).then(t=>{this.pools=t.filter(o=>o.application_metadata.includes("rbd")).map(o=>o.pool_name)}),this.createForm()}purge(){const t=this.purgeForm.getValue("poolName")||"";this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/trash/purge",{pool_name:t}),call:this.rbdService.purgeTrash(t)}).subscribe({error:()=>{this.purgeForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(H),e.Y36(F.Kz),e.Y36(L.p4),e.Y36(pt.O),e.Y36(Ve.q),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-purge-modal"]],decls:18,vars:6,consts:function(){let s,t,o,i,_;return s="Purge Trash",t="To purge, select\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "All" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + "\xA0 or one pool and click\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "Purge" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ".\xA0",t=e.Zx4(t),o="Pool:",i="Pool name...",_="All",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","purgeForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],[1,"col-form-label","mx-auto"],o,["class","form-control","type","text","placeholder",i,"formControlName","poolName",4,"ngIf"],["id","poolName","name","poolName","class","form-control","formControlName","poolName",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["type","text","placeholder",i,"formControlName","poolName",1,"form-control"],["id","poolName","name","poolName","formControlName","poolName",1,"form-control"],["value",""],_,[3,"value",4,"ngFor","ngForOf"],[3,"value"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.tHW(8,7),e._UZ(9,"kbd")(10,"kbd"),e.N_p(),e.qZA(),e.TgZ(11,"div",8)(12,"label",9),e.SDv(13,10),e.qZA(),e.YNc(14,_r,1,0,"input",11),e.YNc(15,rr,4,1,"select",12),e.qZA()(),e.TgZ(16,"div",13)(17,"cd-form-button-panel",14),e.NdJ("submitActionEvent",function(){return o.purge()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.purgeForm),e.xp6(10),e.Q6J("ngIf",!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.poolPermission.read),e.xp6(2),e.Q6J("form",o.purgeForm)("submitText",o.actionLabels.PURGE))},dependencies:[c.sg,c.O5,r._Y,r.YN,r.Kr,r.Fj,r.EJ,r.JJ,r.JL,r.sg,r.u,f.z,A.p,M.o,B.b,K.P,J.V]}),n})();function cr(n,s){1&n&&(e.TgZ(0,"span",15),e.SDv(1,16),e.qZA())}let dr=(()=>{class n{constructor(t,o,i,_,a){this.rbdService=t,this.activeModal=o,this.actionLabels=i,this.fb=_,this.taskWrapper=a}ngOnInit(){this.imageSpec=new v.N(this.poolName,this.namespace,this.imageName).toString(),this.restoreForm=this.fb.group({name:this.imageName})}restore(){const t=this.restoreForm.getValue("name"),o=new v.N(this.poolName,this.namespace,this.imageId);this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/trash/restore",{image_id_spec:o.toString(),new_image_name:t}),call:this.rbdService.restoreTrash(o,t)}).subscribe({error:()=>{this.restoreForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(H),e.Y36(F.Kz),e.Y36(L.p4),e.Y36(pt.O),e.Y36(u.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-restore-modal"]],decls:18,vars:7,consts:function(){let s,t,o,i;return s="Restore Image",t="To restore\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "" + "\ufffd0\ufffd" + "@" + "\ufffd1\ufffd" + "" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ",\xA0 type the image's new name and click\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "Restore" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ".",t=e.Zx4(t),o="New Name",i="This field is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","restoreForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","name",1,"col-form-label"],o,["type","text","name","name","id","name","autocomplete","off","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],i]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.tHW(8,7),e._UZ(9,"kbd")(10,"kbd"),e.N_p(),e.qZA(),e.TgZ(11,"div",8)(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,cr,2,0,"span",12),e.qZA()(),e.TgZ(16,"div",13)(17,"cd-form-button-panel",14),e.NdJ("submitActionEvent",function(){return o.restore()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.restoreForm),e.xp6(6),e.pQV(o.imageSpec)(o.imageId),e.QtT(8),e.xp6(5),e.Q6J("ngIf",o.restoreForm.showError("name",i,"required")),e.xp6(2),e.Q6J("form",o.restoreForm)("submitText",o.actionLabels.RESTORE)}},dependencies:[c.O5,r._Y,r.Fj,r.JJ,r.JL,r.sg,r.u,f.z,A.p,Oe.U,M.o,B.b,K.P,J.V]}),n})();const pr=["expiresTpl"],ur=["deleteTpl"],mr=function(n){return[n]};function gr(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",6),e.NdJ("click",function(){e.CHM(t);const i=e.oxw();return e.KtG(i.purgeModal())}),e._UZ(1,"i",7),e.ynx(2),e.SDv(3,8),e.BQk(),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("disabled",t.disablePurgeBtn),e.xp6(1),e.Q6J("ngClass",e.VKq(2,mr,t.icons.destroy))}}function Tr(n,s){1&n&&(e.ynx(0),e.SDv(1,10),e.BQk())}function fr(n,s){1&n&&(e.ynx(0),e.SDv(1,11),e.BQk())}function Cr(n,s){if(1&n&&(e.YNc(0,Tr,2,0,"ng-container",9),e.YNc(1,fr,2,0,"ng-container",9),e._uU(2),e.ALo(3,"cdDate")),2&n){const t=s.row,o=s.value;e.Q6J("ngIf",t.cdIsExpired),e.xp6(1),e.Q6J("ngIf",!t.cdIsExpired),e.xp6(1),e.hij(" ",e.lcZ(3,3,o),"\n")}}function Sr(n,s){if(1&n&&(e.TgZ(0,"p",13)(1,"strong"),e.ynx(2),e.SDv(3,14),e.ALo(4,"cdDate"),e.BQk(),e.qZA()()),2&n){const t=e.oxw().expiresAt;e.xp6(4),e.pQV(e.lcZ(4,1,t)),e.QtT(3)}}function Rr(n,s){1&n&&e.YNc(0,Sr,5,3,"p",12),2&n&&e.Q6J("ngIf",!s.isExpired)}let Er=(()=>{class n{constructor(t,o,i,_,a,l,d){this.authStorageService=t,this.rbdService=o,this.modalService=i,this.cdDatePipe=_,this.taskListService=a,this.taskWrapper=l,this.actionLabels=d,this.icons=T.P,this.executingTasks=[],this.selection=new Ee.r,this.tableStatus=new se.E,this.disablePurgeBtn=!0,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"update",icon:T.P.undo,click:()=>this.restoreModal(),name:this.actionLabels.RESTORE},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"ID",prop:"id",flexGrow:1,cellTransformation:Le.e.executing},{name:"Name",prop:"name",flexGrow:1},{name:"Pool",prop:"pool_name",flexGrow:1},{name:"Namespace",prop:"namespace",flexGrow:1},{name:"Status",prop:"deferment_end_time",flexGrow:1,cellTemplate:this.expiresTpl},{name:"Deleted At",prop:"deletion_time",flexGrow:1,pipe:this.cdDatePipe}],this.taskListService.init(()=>this.rbdService.listTrash(),i=>this.prepareResponse(i),i=>this.images=i,()=>this.onFetchError(),i=>["rbd/trash/remove","rbd/trash/restore"].includes(i.name),(i,_)=>new v.N(i.pool_name,i.namespace,i.id).toString()===_.metadata.image_id_spec,void 0)}prepareResponse(t){let o=[];const i={};let _;if(t.forEach(a=>{C().isUndefined(i[a.status])&&(i[a.status]=[]),i[a.status].push(a.pool_name),o=o.concat(a.value),this.disablePurgeBtn=!o.length}),i[3]?_=3:i[1]?_=1:i[2]&&(_=2),_){const a=(i[_].length>1?"pools ":"pool ")+i[_].join();this.tableStatus=new se.E(_,a)}else this.tableStatus=new se.E;return o.forEach(a=>{a.cdIsExpired=he()().isAfter(a.deferment_end_time)}),o}onFetchError(){this.table.reset(),this.tableStatus=new se.E(sr.T.ValueException)}updateSelection(t){this.selection=t}restoreModal(){const t={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,imageId:this.selection.first().id};this.modalRef=this.modalService.show(dr,t)}deleteModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().id,_=this.selection.first().deferment_end_time,a=he()().isAfter(_),l=new v.N(t,o,i);this.modalRef=this.modalService.show(ue.M,{itemDescription:"RBD",itemNames:[l],bodyTemplate:this.deleteTpl,bodyContext:{expiresAt:_,isExpired:a},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new E.R("rbd/trash/remove",{image_id_spec:l.toString()}),call:this.rbdService.removeTrash(l,!0)})})}purgeModal(){this.modalService.show(lr)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(H),e.Y36(pe.Z),e.Y36(Be.N),e.Y36(de.j),e.Y36(u.P),e.Y36(L.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(W.a,7),e.Gf(pr,7),e.Gf(ur,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.expiresTpl=i.first),e.iGM(i=e.CRH())&&(o.deleteTpl=i.first)}},features:[e._Bn([de.j])],decls:9,vars:8,consts:function(){let s,t,o,i;return s="Purge Trash",t="Expired at",o="Protected until",i="This image is protected until " + "\ufffd0\ufffd" + ".",[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","status","autoReload","fetchData","updateSelection"],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"],["class","btn btn-light","type","button",3,"disabled","click",4,"ngIf"],["expiresTpl",""],["deleteTpl",""],["type","button",1,"btn","btn-light",3,"disabled","click"],["aria-hidden","true",3,"ngClass"],s,[4,"ngIf"],t,o,["class","text-danger",4,"ngIf"],[1,"text-danger"],i]},template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0),e.NdJ("fetchData",function(){return o.taskListService.fetch()})("updateSelection",function(_){return o.updateSelection(_)}),e.TgZ(2,"div",1),e._UZ(3,"cd-table-actions",2),e.YNc(4,gr,4,4,"button",3),e.qZA()(),e.YNc(5,Cr,4,5,"ng-template",null,4,e.W1O),e.YNc(7,Rr,1,1,"ng-template",null,5,e.W1O)),2&t&&(e.xp6(1),e.Q6J("data",o.images)("columns",o.columns)("status",o.tableStatus)("autoReload",-1),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("ngIf",o.permission.delete))},dependencies:[c.mk,c.O5,W.a,Me.K,M.o,tt,Be.N]}),n})(),yt=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[c.ez,si,r.u5,r.UX,F.Oz,F.dT,F.HK,Ne.b,Pe.m,m.Bz,ne.xc]}),n})();const Mr=[{path:"",redirectTo:"rbd",pathMatch:"full"},{path:"rbd",canActivate:[j.T,re.P],data:{moduleStatusGuardConfig:{uiApiPath:"block/rbd",redirectTo:"error",header:"No RBD pools available",button_name:"Create RBD pool",button_route:"/pool/create"},breadcrumbs:"Images"},children:[{path:"",component:Qa},{path:"namespaces",component:nr,data:{breadcrumbs:"Namespaces"}},{path:"trash",component:Er,data:{breadcrumbs:"Trash"}},{path:"performance",component:ir,data:{breadcrumbs:"Overall Performance"}},{path:L.MQ.CREATE,component:$e,data:{breadcrumbs:L.Qn.CREATE}},{path:`${L.MQ.EDIT}/:image_spec`,component:$e,data:{breadcrumbs:L.Qn.EDIT}},{path:`${L.MQ.CLONE}/:image_spec/:snap`,component:$e,data:{breadcrumbs:L.Qn.CLONE}},{path:`${L.MQ.COPY}/:image_spec`,component:$e,data:{breadcrumbs:L.Qn.COPY}},{path:`${L.MQ.COPY}/:image_spec/:snap`,component:$e,data:{breadcrumbs:L.Qn.COPY}}]},{path:"mirroring",component:_s,canActivate:[j.T,re.P],data:{moduleStatusGuardConfig:{uiApiPath:"block/mirroring",redirectTo:"error",header:"RBD mirroring is not configured",button_name:"Configure RBD Mirroring",button_title:"This will create rbd-mirror service and a replicated RBD pool",component:"RBD Mirroring",uiConfig:!0},breadcrumbs:"Mirroring"},children:[{path:`${L.MQ.EDIT}/:pool_name`,component:cs,outlet:"modal"}]},{path:"iscsi",canActivate:[j.T],data:{breadcrumbs:"iSCSI"},children:[{path:"",redirectTo:"overview",pathMatch:"full"},{path:"overview",component:ii,data:{breadcrumbs:"Overview"}},{path:"targets",data:{breadcrumbs:"Targets"},children:[{path:"",component:Kn},{path:L.MQ.CREATE,component:Ct,data:{breadcrumbs:L.Qn.CREATE}},{path:`${L.MQ.EDIT}/:target_iqn`,component:Ct,data:{breadcrumbs:L.Qn.EDIT}}]}]}];let Or=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[yt,m.Bz.forChild(Mr)]}),n})()},60950:(mt,Ae,p)=>{p.d(Ae,{d:()=>z});var c=p(64537),r=p(20092),m=p(23815),ne=p.n(m),F=p(7357),Ne=p(65862),L=p(95463),j=p(30633),re=p(28211),Pe=p(34089),le=p(88692),C=p(18372),ce=p(20044);let D=(()=>{class h{constructor(u,f,A,M){this.elementRef=u,this.control=f,this.dimlessBinaryPerSecondPipe=A,this.formatter=M,this.ngModelChange=new c.vpe,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.el.value))}setValue(u){/^[\d.]+$/.test(u)&&(u+=this.defaultUnit||"m");const f=this.formatter.toBytes(u,0),A=this.round(f);this.el.value=this.dimlessBinaryPerSecondPipe.transform(A),null!==f?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(u){if(null!==u&&0!==u){if(!ne().isUndefined(this.minBytes)&&u<this.minBytes)return this.minBytes;if(!ne().isUndefined(this.maxBytes)&&u>this.maxBytes)return this.maxBytes;if(!ne().isUndefined(this.roundPower)){const f=Math.round(Math.log(u)/Math.log(this.roundPower));return Math.pow(this.roundPower,f)}}return u}onBlur(u){this.setValue(u)}}return h.\u0275fac=function(u){return new(u||h)(c.Y36(c.SBq),c.Y36(r.a5),c.Y36(ce.O),c.Y36(re.H))},h.\u0275dir=c.lG2({type:h,selectors:[["","cdDimlessBinaryPerSecond",""]],hostBindings:function(u,f){1&u&&c.NdJ("blur",function(M){return f.onBlur(M.target.value)})},inputs:{ngDataReady:"ngDataReady",minBytes:"minBytes",maxBytes:"maxBytes",roundPower:"roundPower",defaultUnit:"defaultUnit"},outputs:{ngModelChange:"ngModelChange"}}),h})(),ie=(()=>{class h{constructor(u,f){this.control=u,this.formatter=f}setValue(u){const f=this.formatter.toMilliseconds(u);this.control.control.setValue(`${f} ms`)}ngOnInit(){this.setValue(this.control.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.control.value))}onUpdate(u){this.setValue(u)}}return h.\u0275fac=function(u){return new(u||h)(c.Y36(r.a5),c.Y36(re.H))},h.\u0275dir=c.lG2({type:h,selectors:[["","cdMilliseconds",""]],hostBindings:function(u,f){1&u&&c.NdJ("blur",function(M){return f.onUpdate(M.target.value)})},inputs:{ngDataReady:"ngDataReady"}}),h})(),V=(()=>{class h{constructor(u,f){this.formatter=u,this.ngControl=f}setValue(u){const f=this.formatter.toIops(u);this.ngControl.control.setValue(`${f} IOPS`)}ngOnInit(){this.setValue(this.ngControl.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.ngControl.value))}onUpdate(u){this.setValue(u)}}return h.\u0275fac=function(u){return new(u||h)(c.Y36(re.H),c.Y36(r.a5))},h.\u0275dir=c.lG2({type:h,selectors:[["","cdIops",""]],hostBindings:function(u,f){1&u&&c.NdJ("blur",function(M){return f.onUpdate(M.target.value)})},inputs:{ngDataReady:"ngDataReady"}}),h})();var e=p(87925),X=p(94276),Fe=p(56310),De=p(41582);function v(h,E){if(1&h&&(c.ynx(0),c._UZ(1,"input",17),c.BQk()),2&h){const u=c.oxw().$implicit,f=c.oxw(2);c.xp6(1),c.Q6J("id",u.name)("name",u.name)("formControlName",u.name)("ngDataReady",f.ngDataReady)}}function be(h,E){if(1&h&&(c.ynx(0),c._UZ(1,"input",18),c.BQk()),2&h){const u=c.oxw().$implicit,f=c.oxw(2);c.xp6(1),c.Q6J("id",u.name)("name",u.name)("formControlName",u.name)("ngDataReady",f.ngDataReady)}}function H(h,E){if(1&h&&(c.ynx(0),c._UZ(1,"input",19),c.BQk()),2&h){const u=c.oxw().$implicit,f=c.oxw(2);c.xp6(1),c.Q6J("id",u.name)("name",u.name)("formControlName",u.name)("ngDataReady",f.ngDataReady)}}function N(h,E){1&h&&(c.TgZ(0,"span",20),c.SDv(1,21),c.qZA())}const x=function(h){return{active:h}},T=function(h){return[h]};function k(h,E){if(1&h){const u=c.EpF();c.TgZ(0,"div",10)(1,"label",11),c._uU(2),c.TgZ(3,"cd-helper"),c._uU(4),c.qZA()(),c.TgZ(5,"div")(6,"div",12),c.ynx(7,13),c.YNc(8,v,2,4,"ng-container",14),c.YNc(9,be,2,4,"ng-container",14),c.YNc(10,H,2,4,"ng-container",14),c.BQk(),c.TgZ(11,"button",15),c.NdJ("click",function(){const M=c.CHM(u).$implicit,B=c.oxw(2);return c.KtG(B.reset(M.name))}),c._UZ(12,"i",7),c.qZA()(),c.YNc(13,N,2,0,"span",16),c.qZA()()}if(2&h){const u=E.$implicit,f=c.oxw().$implicit,A=c.oxw(),M=c.MAs(1);c.xp6(1),c.Q6J("for",u.name),c.xp6(1),c.Oqu(u.displayName),c.xp6(2),c.Oqu(u.description),c.xp6(1),c.Gre("cd-col-form-input ",f.heading,""),c.xp6(2),c.Q6J("ngSwitch",u.type),c.xp6(1),c.Q6J("ngSwitchCase",A.configurationType.milliseconds),c.xp6(1),c.Q6J("ngSwitchCase",A.configurationType.bps),c.xp6(1),c.Q6J("ngSwitchCase",A.configurationType.iops),c.xp6(1),c.Q6J("ngClass",c.VKq(13,x,A.isDisabled(u.name))),c.xp6(1),c.Q6J("ngClass",c.VKq(15,T,A.icons.erase)),c.xp6(1),c.Q6J("ngIf",A.form.showError("configuration."+u.name,M,"min"))}}function Z(h,E){if(1&h){const u=c.EpF();c.TgZ(0,"div",4)(1,"h4",5)(2,"span",6),c.NdJ("click",function(){const M=c.CHM(u).$implicit,B=c.oxw();return c.KtG(B.toggleSectionVisibility(M.class))}),c._uU(3),c._UZ(4,"i",7),c.qZA()(),c.TgZ(5,"div",8),c.YNc(6,k,14,17,"div",9),c.qZA()()}if(2&h){const u=E.$implicit,f=c.oxw();c.xp6(3),c.hij(" ",u.heading," "),c.xp6(1),c.Q6J("ngClass",f.sectionVisibility[u.class]?f.icons.minusCircle:f.icons.addCircle),c.xp6(1),c.Tol(u.class),c.Q6J("hidden",!f.sectionVisibility[u.class]),c.xp6(1),c.Q6J("ngForOf",u.options)}}let z=(()=>{class h{constructor(u,f){this.formatterService=u,this.rbdConfigurationService=f,this.initializeData=new F.t(1),this.changes=new c.vpe,this.icons=Ne.P,this.ngDataReady=new c.vpe,this.configurationType=j.r,this.sectionVisibility={}}ngOnInit(){const u=this.createConfigurationFormGroup();this.form.addControl("configuration",u),u.valueChanges.subscribe(()=>{this.changes.emit(this.getDirtyValues.bind(this))}),this.initializeData&&this.initializeData.subscribe(f=>{this.initialData=f.initialData;const A=f.sourceType;this.rbdConfigurationService.getWritableOptionFields().forEach(M=>{const B=f.initialData.filter(K=>K.name===M.name).pop();B&&B.source===A&&this.form.get(`configuration.${M.name}`).setValue(B.value)}),this.ngDataReady.emit()}),this.rbdConfigurationService.getWritableSections().forEach(f=>this.sectionVisibility[f.class]=!1)}getDirtyValues(u=!1,f){if(u&&!f)throw new Error("ProgrammingError: If local values shall be included, a proper localFieldType argument has to be provided, too");const A={};return this.rbdConfigurationService.getWritableOptionFields().forEach(M=>{const B=this.form.get("configuration").get(M.name);this.initialData&&this.initialData[M.name]===B.value||(B.dirty||u&&B.source===f)&&(A[M.name]=null===B.value?B.value:M.type===j.r.bps?this.formatterService.toBytes(B.value):M.type===j.r.milliseconds?this.formatterService.toMilliseconds(B.value):M.type===j.r.iops?this.formatterService.toIops(B.value):B.value)}),A}createConfigurationFormGroup(){const u=new L.d({});return this.rbdConfigurationService.getWritableOptionFields().forEach(f=>{let A;if(f.type!==j.r.milliseconds&&f.type!==j.r.iops&&f.type!==j.r.bps)throw new Error(`Type ${f.type} is unknown, you may need to add it to RbdConfiguration class`);{let M=0;ne().forEach(this.initialData,B=>{B.name===f.name&&(M=B.value)}),A=new r.p4(M,r.kI.min(0))}u.addControl(f.name,A)}),u}reset(u){const f=this.form.get("configuration").get(u);f.disabled?(f.setValue(f.previousValue||0),f.enable(),f.previousValue||f.markAsPristine()):(f.previousValue=f.value,f.setValue(null),f.markAsDirty(),f.disable())}isDisabled(u){return this.form.get("configuration").get(u).disabled}toggleSectionVisibility(u){this.sectionVisibility[u]=!this.sectionVisibility[u]}}return h.\u0275fac=function(u){return new(u||h)(c.Y36(re.H),c.Y36(Pe.n))},h.\u0275cmp=c.Xpm({type:h,selectors:[["cd-rbd-configuration-form"]],inputs:{form:"form",initializeData:"initializeData"},outputs:{changes:"changes"},decls:5,vars:2,consts:function(){let E,u,f;return E="RBD Configuration",u="Remove the local configuration value. The parent configuration value will be inherited and used instead.",f="The minimum value is 0",[[3,"formGroup"],["cfgFormGroup",""],E,["class","col-12",4,"ngFor","ngForOf"],[1,"col-12"],[1,"cd-header"],[1,"collapsible",3,"click"],["aria-hidden","true",3,"ngClass"],[3,"hidden"],["class","form-group row",4,"ngFor","ngForOf"],[1,"form-group","row"],[1,"cd-col-form-label",3,"for"],[1,"input-group"],[3,"ngSwitch"],[4,"ngSwitchCase"],["type","button","data-toggle","button","title",u,1,"btn","btn-light",3,"ngClass","click"],["class","invalid-feedback",4,"ngIf"],["type","text","cdMilliseconds","",1,"form-control",3,"id","name","formControlName","ngDataReady"],["type","text","defaultUnit","b","cdDimlessBinaryPerSecond","",1,"form-control",3,"id","name","formControlName","ngDataReady"],["type","text","cdIops","",1,"form-control",3,"id","name","formControlName","ngDataReady"],[1,"invalid-feedback"],f]},template:function(u,f){1&u&&(c.TgZ(0,"fieldset",0,1)(2,"legend"),c.SDv(3,2),c.qZA(),c.YNc(4,Z,7,7,"div",3),c.qZA()),2&u&&(c.Q6J("formGroup",f.form.get("configuration")),c.xp6(4),c.Q6J("ngForOf",f.rbdConfigurationService.sections))},dependencies:[le.mk,le.sg,le.O5,le.RF,le.n9,r.Fj,r.JJ,r.JL,r.sg,r.u,C.S,D,ie,V,e.o,X.b,Fe.P,De.V],styles:[".collapsible[_ngcontent-%COMP%]{cursor:pointer;user-select:none}"]}),h})()},42176:(mt,Ae,p)=>{p.d(Ae,{P:()=>H});var c=p(59019),r=p(30633),m=p(64537);let ne=(()=>{class N{transform(T){return{0:"global",1:"pool",2:"image"}[T]}}return N.\u0275fac=function(T){return new(T||N)},N.\u0275pipe=m.Yjl({name:"rbdConfigurationSource",type:N,pure:!0}),N})();var F=p(28211),Ne=p(34089),L=p(88692),j=p(20044),re=p(48537),Pe=p(21766);const le=["configurationSourceTpl"],C=["configurationValueTpl"],ce=["poolConfTable"];function D(N,x){1&N&&(m.TgZ(0,"span"),m.SDv(1,6),m.qZA())}function ie(N,x){1&N&&(m.TgZ(0,"strong"),m.SDv(1,7),m.qZA())}function V(N,x){1&N&&(m.TgZ(0,"strong"),m.SDv(1,8),m.qZA())}function e(N,x){1&N&&(m.TgZ(0,"div",4),m.YNc(1,D,2,0,"span",5),m.YNc(2,ie,2,0,"strong",5),m.YNc(3,V,2,0,"strong",5),m.qZA()),2&N&&(m.Q6J("ngSwitch",x.value),m.xp6(1),m.Q6J("ngSwitchCase","global"),m.xp6(1),m.Q6J("ngSwitchCase","image"),m.xp6(1),m.Q6J("ngSwitchCase","pool"))}function X(N,x){if(1&N&&(m.TgZ(0,"span"),m._uU(1),m.ALo(2,"dimlessBinaryPerSecond"),m.qZA()),2&N){const T=m.oxw().value;m.xp6(1),m.Oqu(m.lcZ(2,1,T))}}function Fe(N,x){if(1&N&&(m.TgZ(0,"span"),m._uU(1),m.ALo(2,"milliseconds"),m.qZA()),2&N){const T=m.oxw().value;m.xp6(1),m.Oqu(m.lcZ(2,1,T))}}function De(N,x){if(1&N&&(m.TgZ(0,"span"),m._uU(1),m.ALo(2,"iops"),m.qZA()),2&N){const T=m.oxw().value;m.xp6(1),m.Oqu(m.lcZ(2,1,T))}}function v(N,x){if(1&N&&(m.TgZ(0,"span"),m._uU(1),m.qZA()),2&N){const T=m.oxw().value;m.xp6(1),m.Oqu(T)}}function be(N,x){if(1&N&&(m.TgZ(0,"div",4),m.YNc(1,X,3,3,"span",5),m.YNc(2,Fe,3,3,"span",5),m.YNc(3,De,3,3,"span",5),m.YNc(4,v,2,1,"span",9),m.qZA()),2&N){const T=x.row,k=m.oxw();m.Q6J("ngSwitch",T.type),m.xp6(1),m.Q6J("ngSwitchCase",k.typeField.bps),m.xp6(1),m.Q6J("ngSwitchCase",k.typeField.milliseconds),m.xp6(1),m.Q6J("ngSwitchCase",k.typeField.iops)}}let H=(()=>{class N{constructor(T,k){this.formatterService=T,this.rbdConfigurationService=k,this.sourceField=r.h,this.typeField=r.r}ngOnInit(){this.poolConfigurationColumns=[{prop:"displayName",name:"Name"},{prop:"description",name:"Description"},{prop:"name",name:"Key"},{prop:"source",name:"Source",cellTemplate:this.configurationSourceTpl,pipe:new ne},{prop:"value",name:"Value",cellTemplate:this.configurationValueTpl}]}ngOnChanges(){this.data&&(this.data=this.data.filter(T=>this.rbdConfigurationService.getOptionFields().map(k=>k.name).includes(T.name)))}}return N.\u0275fac=function(T){return new(T||N)(m.Y36(F.H),m.Y36(Ne.n))},N.\u0275cmp=m.Xpm({type:N,selectors:[["cd-rbd-configuration-table"]],viewQuery:function(T,k){if(1&T&&(m.Gf(le,7),m.Gf(C,7),m.Gf(ce,7)),2&T){let Z;m.iGM(Z=m.CRH())&&(k.configurationSourceTpl=Z.first),m.iGM(Z=m.CRH())&&(k.configurationValueTpl=Z.first),m.iGM(Z=m.CRH())&&(k.poolConfTable=Z.first)}},inputs:{data:"data"},features:[m.TTD],decls:6,vars:2,consts:function(){let x,T,k;return x="Global",T="Image",k="Pool",[["identifier","name",3,"data","columns"],["poolConfTable",""],["configurationSourceTpl",""],["configurationValueTpl",""],[3,"ngSwitch"],[4,"ngSwitchCase"],x,T,k,[4,"ngSwitchDefault"]]},template:function(T,k){1&T&&(m._UZ(0,"cd-table",0,1),m.YNc(2,e,4,4,"ng-template",null,2,m.W1O),m.YNc(4,be,5,4,"ng-template",null,3,m.W1O)),2&T&&m.Q6J("data",k.data)("columns",k.poolConfigurationColumns)},dependencies:[L.RF,L.n9,L.ED,c.a,j.O,re.J,Pe.A]}),N})()}}]);
\ No newline at end of file
index e76e29befec251a2c42da6561bac4592b773aecc..0815759ea0c49bbd55f0dd06ce69559c15f7a959 100644 (file)
@@ -378,6 +378,9 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 
+@swagger-api/apidom-reference
+Apache-2.0
+
 @swimlane/ngx-datatable
 MIT
 (The MIT License)
@@ -739,31 +742,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 
 
-cross-fetch
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017 Leonardo Quixadá
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
 css.escape
 MIT
 Copyright Mathias Bynens <https://mathiasbynens.be/>
@@ -1315,31 +1293,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
 format
 MIT
 
-formdata-node
-MIT
-The MIT License (MIT)
-
-Copyright (c) 2017-present Nick K.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
 function-bind
 MIT
 Copyright (c) 2013 Raynos.
@@ -1550,7 +1503,7 @@ immutable
 MIT
 MIT License
 
-Copyright (c) 2014-present, Facebook, Inc.
+Copyright (c) 2014-present, Lee Byron and other contributors.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -2116,6 +2069,32 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
+process
+MIT
+(The MIT License)
+
+Copyright (c) 2013 Roman Shtylman <shtylman@gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
 prop-types
 MIT
 MIT License
@@ -2141,30 +2120,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 
 
-punycode
-MIT
-Copyright Mathias Bynens <https://mathiasbynens.be/>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
 qs
 BSD-3-Clause
 BSD 3-Clause License
@@ -2198,34 +2153,37 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-querystring
+querystringify
 MIT
+The MIT License (MIT)
+
+Copyright (c) 2015 Unshift.io, Arnout Kazemier,  the Contributors.
 
-Copyright 2012 Irakli Gozalishvili. All rights reserved.
 Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
 
 
-querystringify
+
+ramda
 MIT
 The MIT License (MIT)
 
-Copyright (c) 2015 Unshift.io, Arnout Kazemier,  the Contributors.
+Copyright (c) 2013-2023 Scott Sauyet and Michael Hurley
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -2234,17 +2192,45 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+ramda-adjunct
+BSD-3-Clause
+BSD 3-Clause License
 
+Copyright 2017-2019 Vladimír Gorej and the Ramda Adjunct contributors
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, 
+   this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, 
+   this list of conditions and the following disclaimer in the documentation and/or
+   other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used
+   to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 randexp
@@ -3454,31 +3440,6 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 PERFORMANCE OF THIS SOFTWARE.
 
-url
-MIT
-The MIT License (MIT)
-
-Copyright Joyent, Inc. and other Node contributors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-
 url-parse
 MIT
 The MIT License (MIT)
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/43.cf51dac96ed4b14e.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/43.cf51dac96ed4b14e.js
deleted file mode 100644 (file)
index db0c092..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[43],{21043:(ut,he,p)=>{p.r(he),p.d(he,{BlockModule:()=>Gt,RoutedBlockModule:()=>Cr});var c=p(11048),a=p(1659),g=p(55860),ne=p(62946),L=p(71334),be=p(37496),D=p(79512),U=p(4222),re=p(54462),Ae=p(44466),Ne=p(23815),C=p.n(Ne),le=p(35758),F=p(64762),ie=p(19725),Y=p(93523),e=p(89724);let X=class{constructor(s){this.http=s}listTargets(){return this.http.get("api/iscsi/target")}getTarget(s){return this.http.get(`api/iscsi/target/${s}`)}updateTarget(s,t){return this.http.put(`api/iscsi/target/${s}`,t,{observe:"response"})}status(){return this.http.get("ui-api/iscsi/status")}settings(){return this.http.get("ui-api/iscsi/settings")}version(){return this.http.get("ui-api/iscsi/version")}portals(){return this.http.get("ui-api/iscsi/portals")}createTarget(s){return this.http.post("api/iscsi/target",s,{observe:"response"})}deleteTarget(s){return this.http.delete(`api/iscsi/target/${s}`,{observe:"response"})}getDiscovery(){return this.http.get("api/iscsi/discoveryauth")}updateDiscovery(s){return this.http.put("api/iscsi/discoveryauth",s)}overview(){return this.http.get("ui-api/iscsi/overview")}};X.\u0275fac=function(s){return new(s||X)(e.LFG(ie.eN))},X.\u0275prov=e.Yz7({token:X,factory:X.\u0275fac,providedIn:"root"}),X=(0,F.gn)([Y.o,(0,F.w6)("design:paramtypes",[ie.eN])],X);var Fe=p(88002),De=p(76189),v=p(19358),Pe=p(34089);let H=class extends De.S{constructor(s,t){super(),this.http=s,this.rbdConfigurationService=t}isRBDPool(s){return-1!==C().indexOf(s.application_metadata,"rbd")&&!s.pool_name.includes("/")}create(s){return this.http.post("api/block/image",s,{observe:"response"})}delete(s){return this.http.delete(`api/block/image/${s.toStringEncoded()}`,{observe:"response"})}update(s,t){return this.http.put(`api/block/image/${s.toStringEncoded()}`,t,{observe:"response"})}get(s){return this.http.get(`api/block/image/${s.toStringEncoded()}`)}list(s){return this.http.get("api/block/image",{params:s,headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"}).pipe((0,Fe.U)(t=>t.body.map(o=>(o.value.map(i=>(i.configuration&&i.configuration.map(_=>Object.assign(_,this.rbdConfigurationService.getOptionByName(_.name))),i)),o.headers=t.headers,o))))}copy(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/copy`,t,{observe:"response"})}flatten(s){return this.http.post(`api/block/image/${s.toStringEncoded()}/flatten`,null,{observe:"response"})}defaultFeatures(){return this.http.get("api/block/image/default_features")}cloneFormatVersion(){return this.http.get("api/block/image/clone_format_version")}createSnapshot(s,t,o){const i={snapshot_name:t,mirrorImageSnapshot:o};return this.http.post(`api/block/image/${s.toStringEncoded()}/snap`,i,{observe:"response"})}renameSnapshot(s,t,o){const i={new_snap_name:o};return this.http.put(`api/block/image/${s.toStringEncoded()}/snap/${t}`,i,{observe:"response"})}protectSnapshot(s,t,o){const i={is_protected:o};return this.http.put(`api/block/image/${s.toStringEncoded()}/snap/${t}`,i,{observe:"response"})}rollbackSnapshot(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/snap/${t}/rollback`,null,{observe:"response"})}cloneSnapshot(s,t,o){return this.http.post(`api/block/image/${s.toStringEncoded()}/snap/${t}/clone`,o,{observe:"response"})}deleteSnapshot(s,t){return this.http.delete(`api/block/image/${s.toStringEncoded()}/snap/${t}`,{observe:"response"})}listTrash(){return this.http.get("api/block/image/trash/")}createNamespace(s,t){return this.http.post(`api/block/pool/${s}/namespace`,{namespace:t},{observe:"response"})}listNamespaces(s){return this.http.get(`api/block/pool/${s}/namespace/`)}deleteNamespace(s,t){return this.http.delete(`api/block/pool/${s}/namespace/${t}`,{observe:"response"})}moveTrash(s,t){return this.http.post(`api/block/image/${s.toStringEncoded()}/move_trash`,{delay:t},{observe:"response"})}purgeTrash(s){return this.http.post(`api/block/image/trash/purge/?pool_name=${s}`,null,{observe:"response"})}restoreTrash(s,t){return this.http.post(`api/block/image/trash/${s.toStringEncoded()}/restore`,{new_image_name:t},{observe:"response"})}removeTrash(s,t=!1){return this.http.delete(`api/block/image/trash/${s.toStringEncoded()}/?force=${t}`,{observe:"response"})}};H.\u0275fac=function(s){return new(s||H)(e.LFG(ie.eN),e.LFG(Pe.n))},H.\u0275prov=e.Yz7({token:H,factory:H.\u0275fac,providedIn:"root"}),(0,F.gn)([(0,F.fM)(1,Y.G),(0,F.w6)("design:type",Function),(0,F.w6)("design:paramtypes",[v.N,String,Boolean]),(0,F.w6)("design:returntype",void 0)],H.prototype,"createSnapshot",null),(0,F.gn)([(0,F.fM)(2,Y.G),(0,F.w6)("design:type",Function),(0,F.w6)("design:paramtypes",[v.N,String,String]),(0,F.w6)("design:returntype",void 0)],H.prototype,"renameSnapshot",null),(0,F.gn)([(0,F.fM)(2,Y.G),(0,F.w6)("design:type",Function),(0,F.w6)("design:paramtypes",[v.N,String,Boolean]),(0,F.w6)("design:returntype",void 0)],H.prototype,"protectSnapshot",null),(0,F.gn)([(0,F.fM)(1,Y.G),(0,F.w6)("design:type",Function),(0,F.w6)("design:paramtypes",[v.N,String]),(0,F.w6)("design:returntype",void 0)],H.prototype,"restoreTrash",null),H=(0,F.gn)([Y.o,(0,F.w6)("design:paramtypes",[ie.eN,Pe.n])],H);var N=p(7022),x=p(14745),T=p(65862),k=p(93614),Z=p(95463),z=p(90070),A=p(48168),M=p(76111),m=p(32337),f=p(60312),P=p(41582),h=p(56310),$=p(87925),K=p(94276);function no(n,s){if(1&n&&(e.TgZ(0,"option",6),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("ngValue",t),e.xp6(1),e.Oqu(t)}}function io(n,s){if(1&n&&(e.TgZ(0,"select",5),e._UZ(1,"option",6),e.YNc(2,no,2,2,"option",7),e.qZA()),2&n){const t=e.oxw();e.s9C("id",t.setting),e.s9C("name",t.setting),e.Q6J("formControlName",t.setting),e.xp6(1),e.Q6J("ngValue",null),e.xp6(1),e.Q6J("ngForOf",t.limits.values)}}function so(n,s){if(1&n&&e._UZ(0,"input",10),2&n){const t=e.oxw(2);e.Q6J("formControlName",t.setting)}}function _o(n,s){if(1&n&&e._UZ(0,"input",11),2&n){const t=e.oxw(2);e.Q6J("formControlName",t.setting)}}function ao(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"br"),e.TgZ(2,"div",12),e._UZ(3,"input",13),e.TgZ(4,"label",14),e._uU(5,"Yes"),e.qZA()(),e.TgZ(6,"div",12),e._UZ(7,"input",13),e.TgZ(8,"label",14),e._uU(9,"No"),e.qZA()(),e.BQk()),2&n){const t=e.oxw(2);e.xp6(3),e.Q6J("id",t.setting+"True")("value",!0)("formControlName",t.setting),e.xp6(1),e.Q6J("for",t.setting+"True"),e.xp6(3),e.Q6J("id",t.setting+"False")("value",!1)("formControlName",t.setting),e.xp6(1),e.Q6J("for",t.setting+"False")}}function ro(n,s){if(1&n&&(e.TgZ(0,"span"),e.YNc(1,so,1,1,"input",8),e.YNc(2,_o,1,1,"input",9),e.YNc(3,ao,10,8,"ng-container",3),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf","int"===t.limits.type),e.xp6(1),e.Q6J("ngIf","str"===t.limits.type),e.xp6(1),e.Q6J("ngIf","bool"===t.limits.type)}}function lo(n,s){if(1&n&&(e.TgZ(0,"span",15),e.ynx(1),e.SDv(2,16),e.BQk(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.limits.min),e.QtT(2)}}function co(n,s){if(1&n&&(e.TgZ(0,"span",15),e.ynx(1),e.SDv(2,17),e.BQk(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.limits.max),e.QtT(2)}}let mt=(()=>{class n{ngOnInit(){const t=[];"min"in this.limits&&t.push(a.kI.min(this.limits.min)),"max"in this.limits&&t.push(a.kI.max(this.limits.max)),this.settingsForm.get(this.setting).setValidators(t)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-setting"]],inputs:{settingsForm:"settingsForm",formDir:"formDir",setting:"setting",limits:"limits"},decls:7,vars:7,consts:function(){let s,t;return s="Must be greater than or equal to " + "\ufffd0\ufffd" + ".",t="Must be less than or equal to " + "\ufffd0\ufffd" + ".",[[1,"form-group",3,"formGroup"],[1,"col-form-label",3,"for"],["class","form-control",3,"id","name","formControlName",4,"ngIf"],[4,"ngIf"],["class","invalid-feedback",4,"ngIf"],[1,"form-control",3,"id","name","formControlName"],[3,"ngValue"],[3,"ngValue",4,"ngFor","ngForOf"],["type","number","class","form-control",3,"formControlName",4,"ngIf"],["type","text","class","form-control",3,"formControlName",4,"ngIf"],["type","number",1,"form-control",3,"formControlName"],["type","text",1,"form-control",3,"formControlName"],[1,"custom-control","custom-radio","custom-control-inline"],["type","radio",1,"custom-control-input",3,"id","value","formControlName"],[1,"custom-control-label",3,"for"],[1,"invalid-feedback"],s,t]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"label",1),e._uU(2),e.qZA(),e.YNc(3,io,3,5,"select",2),e.YNc(4,ro,4,3,"span",3),e.YNc(5,lo,3,1,"span",4),e.YNc(6,co,3,1,"span",4),e.qZA()),2&t&&(e.Q6J("formGroup",o.settingsForm),e.xp6(1),e.s9C("for",o.setting),e.xp6(1),e.Oqu(o.setting),e.xp6(1),e.Q6J("ngIf","enum"===o.limits.type),e.xp6(1),e.Q6J("ngIf","enum"!==o.limits.type),e.xp6(1),e.Q6J("ngIf",o.settingsForm.showError(o.setting,o.formDir,"min")),e.xp6(1),e.Q6J("ngIf",o.settingsForm.showError(o.setting,o.formDir,"max")))},directives:[h.P,a.JL,a.sg,P.V,c.O5,$.o,a.EJ,K.b,a.JJ,a.u,a.YN,a.Kr,c.sg,a.wV,a.Fj,a._],styles:[""]}),n})();var j=p(30839),Je=p(88820);function po(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function uo(n,s){if(1&n&&(e.TgZ(0,"span")(1,"legend",10),e.SDv(2,21),e.qZA(),e.TgZ(3,"div",12)(4,"div",13)(5,"label",22),e.SDv(6,23),e.qZA(),e._UZ(7,"input",24),e.YNc(8,po,2,0,"span",25),e.qZA()(),e.TgZ(9,"div",12)(10,"div",13)(11,"label",26),e.SDv(12,27),e.qZA(),e._UZ(13,"input",28),e.qZA()()()),2&n){const t=e.oxw(),o=e.MAs(9);e.xp6(8),e.Q6J("ngIf",t.settingsForm.showError("lun",o,"required"))}}function mo(n,s){if(1&n&&(e.TgZ(0,"option",31),e._uU(1),e.ALo(2,"iscsiBackstore"),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(e.lcZ(2,2,t))}}function go(n,s){if(1&n&&(e.TgZ(0,"div",12)(1,"div",13),e._UZ(2,"cd-iscsi-setting",33),e.qZA()()),2&n){const t=s.$implicit,o=e.oxw(2).$implicit,i=e.oxw(),_=e.MAs(9);e.xp6(2),e.Q6J("settingsForm",i.settingsForm)("formDir",_)("setting",t.key)("limits",i.getDiskControlLimits(o,t.key))}}function To(n,s){if(1&n&&(e.ynx(0),e.YNc(1,go,3,4,"div",32),e.ALo(2,"keyvalue"),e.BQk()),2&n){const t=e.oxw().$implicit,o=e.oxw();e.xp6(1),e.Q6J("ngForOf",e.lcZ(2,1,o.disk_default_controls[t]))}}function fo(n,s){if(1&n&&(e.ynx(0),e.YNc(1,To,3,3,"ng-container",9),e.BQk()),2&n){const t=s.$implicit,o=e.oxw();e.xp6(1),e.Q6J("ngIf",o.settingsForm.value.backstore===t)}}let Co=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.iscsiService=o,this.actionLabels=i}ngOnInit(){const t={backstore:new a.NI(this.imagesSettings[this.image].backstore),lun:new a.NI(this.imagesSettings[this.image].lun),wwn:new a.NI(this.imagesSettings[this.image].wwn)};C().forEach(this.backstores,o=>{const i=this.imagesSettings[this.image][o]||{};C().forIn(this.disk_default_controls[o],(_,r)=>{t[r]=new a.NI(i[r])})}),this.settingsForm=new Z.d(t)}getDiskControlLimits(t,o){return this.disk_controls_limits?this.disk_controls_limits[t][o]:{type:"int"}}save(){const t=this.settingsForm.controls.backstore.value,o=this.settingsForm.controls.lun.value,i=this.settingsForm.controls.wwn.value,_={};C().forIn(this.settingsForm.controls,(r,l)=>{""!==r.value&&null!==r.value&&l in this.disk_default_controls[this.settingsForm.value.backstore]&&(_[l]=r.value,C().forEach(this.backstores,d=>{d!==t&&l in(this.imagesSettings[this.image][d]||{})&&(this.imagesSettings[this.image][d][l]=r.value)}))}),this.imagesSettings[this.image].backstore=t,this.imagesSettings[this.image].lun=o,this.imagesSettings[this.image].wwn=i,this.imagesSettings[this.image][t]=_,this.imagesSettings=Object.assign({},this.imagesSettings),this.control.updateValueAndValidity({emitEvent:!1}),this.activeModal.close()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(L.Kz),e.Y36(X),e.Y36(D.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-image-settings-modal"]],decls:25,vars:8,consts:function(){let s,t,o,i,_,r,l,d;return s="Configure",t="Changing these parameters from their default values is usually not necessary.",o="Settings",i="Backstore",_="Identifier",r="lun",l="wwn",d="This field is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","settingsForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"alert-warning"],t,[4,"ngIf"],[1,"cd-header"],o,[1,"form-group","row"],[1,"col-sm-12"],[1,"col-form-label"],i,["id","backstore","name","backstore","formControlName","backstore",1,"form-select"],[3,"value",4,"ngFor","ngForOf"],[4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],_,["for","lun",1,"col-form-label","required"],r,["type","number","id","lun","name","lun","formControlName","lun",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","wwn",1,"col-form-label"],l,["type","text","id","wwn","name","wwn","formControlName","wwn",1,"form-control"],[1,"invalid-feedback"],d,[3,"value"],["class","form-group row",4,"ngFor","ngForOf"],[3,"settingsForm","formDir","setting","limits"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1)(2),e.SDv(3,2),e.BQk(),e._uU(4,"\xa0 "),e.TgZ(5,"small"),e._uU(6),e.qZA(),e.BQk(),e.ynx(7,3),e.TgZ(8,"form",4,5)(10,"div",6)(11,"p",7),e.SDv(12,8),e.qZA(),e.YNc(13,uo,14,1,"span",9),e.TgZ(14,"legend",10),e.SDv(15,11),e.qZA(),e.TgZ(16,"div",12)(17,"div",13)(18,"label",14),e.SDv(19,15),e.qZA(),e.TgZ(20,"select",16),e.YNc(21,mo,3,4,"option",17),e.qZA()()(),e.YNc(22,fo,2,1,"ng-container",18),e.qZA(),e.TgZ(23,"div",19)(24,"cd-form-button-panel",20),e.NdJ("submitActionEvent",function(){return o.save()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(6),e.Oqu(o.image),e.xp6(2),e.Q6J("formGroup",o.settingsForm),e.xp6(5),e.Q6J("ngIf",o.api_version>=1),e.xp6(8),e.Q6J("ngForOf",o.backstores),e.xp6(1),e.Q6J("ngForOf",o.backstores),e.xp6(2),e.Q6J("form",o.settingsForm)("submitText",o.actionLabels.UPDATE))},directives:[f.z,a._Y,a.JL,a.sg,P.V,c.O5,h.P,$.o,a.wV,a.Fj,K.b,a.JJ,a.u,a.EJ,c.sg,a.YN,a.Kr,mt,j.p],pipes:[Je.V,c.Nd],styles:[""]}),n})();function So(n,s){if(1&n&&(e.TgZ(0,"div",12)(1,"div",13),e._UZ(2,"cd-iscsi-setting",14),e.qZA()()),2&n){const t=s.$implicit,o=e.oxw(),i=e.MAs(5);e.xp6(2),e.Q6J("settingsForm",o.settingsForm)("formDir",i)("setting",t.key)("limits",o.getTargetControlLimits(t.key))}}let Ro=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.iscsiService=o,this.actionLabels=i}ngOnInit(){const t={};C().forIn(this.target_default_controls,(o,i)=>{t[i]=new a.NI(this.target_controls.value[i])}),this.settingsForm=new Z.d(t)}save(){const t={};C().forIn(this.settingsForm.controls,(o,i)=>{""===o.value||null===o.value||(t[i]=o.value)}),this.target_controls.setValue(t),this.activeModal.close()}getTargetControlLimits(t){return this.target_controls_limits?this.target_controls_limits[t]:["Yes","No"].includes(this.target_default_controls[t])?{type:"bool"}:{type:"int"}}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(L.Kz),e.Y36(X),e.Y36(D.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-iqn-settings-modal"]],decls:13,vars:7,consts:function(){let s,t;return s="Advanced Settings",t="Changing these parameters from their default values is usually not necessary.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","settingsForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"alert-warning"],t,["class","form-group row",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"form-group","row"],[1,"col-sm-12"],[3,"settingsForm","formDir","setting","limits"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p",7),e.SDv(8,8),e.qZA(),e.YNc(9,So,3,4,"div",9),e.ALo(10,"keyvalue"),e.qZA(),e.TgZ(11,"div",10)(12,"cd-form-button-panel",11),e.NdJ("submitActionEvent",function(){return o.save()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.settingsForm),e.xp6(5),e.Q6J("ngForOf",e.lcZ(10,5,o.settingsForm.controls)),e.xp6(3),e.Q6J("form",o.settingsForm)("submitText",o.actionLabels.UPDATE))},directives:[f.z,a._Y,a.JL,a.sg,P.V,c.sg,h.P,mt,j.p],pipes:[c.Nd],styles:[""]}),n})();var de=p(63285),gt=p(63622);let Eo=(()=>{class n{constructor(t){this.ngControl=t}onInput(t){this.setValue(t)}setValue(t){t=C().isString(t)?t.trim():t,this.ngControl.control.setValue(t)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(a.a5))},n.\u0275dir=e.lG2({type:n,selectors:[["","cdTrim",""]],hostBindings:function(t,o){1&t&&e.NdJ("input",function(_){return o.onInput(_.target.value)})}}),n})();var Mo=p(39092),Tt=p(4416),Ye=p(58039),tt=p(10545);function Oo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,41),e.qZA())}function ho(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,42),e.qZA())}function Ao(n,s){1&n&&(e.TgZ(0,"span",40),e.ynx(1),e.SDv(2,43),e.BQk(),e._UZ(3,"br"),e.ynx(4),e.SDv(5,44),e.BQk(),e._UZ(6,"br"),e.TgZ(7,"a",45),e.SDv(8,46),e.qZA()())}function Po(n,s){1&n&&(e.TgZ(0,"span",47),e.SDv(1,48),e.qZA())}const V=function(n){return[n]};function Io(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.TgZ(3,"button",51),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,r=i.$implicit;return e.oxw(2).removePortal(_,r)}),e._UZ(4,"i",15),e.qZA()(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngClass",e.VKq(2,V,o.icons.destroy))}}function bo(n,s){if(1&n&&(e.TgZ(0,"span",40),e.SDv(1,52),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.pQV(t.minimum_gateways),e.QtT(1)}}function No(n,s){if(1&n&&(e.TgZ(0,"div",55),e._uU(1),e.qZA()),2&n){const t=e.oxw().$implicit,o=e.oxw(2);e.xp6(1),e.hij("lun: ",o.imagesSettings[t].lun,"")}}function Fo(n,s){if(1&n&&(e.ynx(0),e.SDv(1,56),e.ALo(2,"iscsiBackstore"),e.BQk()),2&n){const t=e.oxw().$implicit,o=e.oxw(2);e.xp6(2),e.pQV(e.lcZ(2,1,o.imagesSettings[t].backstore)),e.QtT(1)}}function Do(n,s){1&n&&(e.ynx(0),e.SDv(1,57),e.BQk())}function Lo(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.YNc(3,No,2,1,"div",53),e.TgZ(4,"button",51),e.NdJ("click",function(){const _=e.CHM(t).$implicit;return e.oxw(2).imageSettingsModal(_)}),e._UZ(5,"i",15),e.qZA(),e.TgZ(6,"button",51),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,r=i.$implicit;return e.oxw(2).removeImage(_,r)}),e._UZ(7,"i",15),e.qZA()(),e.TgZ(8,"span",47),e.YNc(9,Fo,3,3,"ng-container",54),e.YNc(10,Do,2,0,"ng-container",54),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(2),e.Q6J("value",t),e.xp6(1),e.Q6J("ngIf",o.api_version>=1),e.xp6(2),e.Q6J("ngClass",e.VKq(6,V,o.icons.deepCheck)),e.xp6(2),e.Q6J("ngClass",e.VKq(8,V,o.icons.destroy)),e.xp6(2),e.Q6J("ngIf",o.backstores.length>1),e.xp6(1),e.Q6J("ngIf",o.hasAdvancedSettings(o.imagesSettings[t][o.imagesSettings[t].backstore]))}}function vo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,58),e.qZA())}function $o(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,59),e.qZA())}function Bo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,77),e.qZA())}function Go(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,78),e.qZA())}function yo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,79),e.qZA())}function xo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,80),e.qZA())}function Zo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,81),e.qZA())}function wo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,82),e.qZA())}function Ho(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,83),e.qZA())}function ko(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,84),e.qZA())}function qo(n,s){if(1&n&&(e.TgZ(0,"div",60)(1,"div",8)(2,"label",61),e.ynx(3),e.SDv(4,62),e.BQk(),e.qZA(),e.TgZ(5,"div",11),e._UZ(6,"input",63),e.YNc(7,Bo,2,0,"span",16),e.YNc(8,Go,2,0,"span",16),e.qZA()(),e.TgZ(9,"div",8)(10,"label",64),e.ynx(11),e.SDv(12,65),e.BQk(),e.qZA(),e.TgZ(13,"div",11)(14,"div",12),e._UZ(15,"input",66)(16,"button",67)(17,"cd-copy-2-clipboard-button",68),e.qZA(),e.YNc(18,yo,2,0,"span",16),e.YNc(19,xo,2,0,"span",16),e.qZA()(),e.TgZ(20,"div",8)(21,"label",69),e.ynx(22),e.SDv(23,70),e.BQk(),e.qZA(),e.TgZ(24,"div",11),e._UZ(25,"input",71),e.YNc(26,Zo,2,0,"span",16),e.YNc(27,wo,2,0,"span",16),e.qZA()(),e.TgZ(28,"div",8)(29,"label",72),e.ynx(30),e.SDv(31,73),e.BQk(),e.qZA(),e.TgZ(32,"div",11)(33,"div",12),e._UZ(34,"input",74)(35,"button",75)(36,"cd-copy-2-clipboard-button",76),e.qZA(),e.YNc(37,Ho,2,0,"span",16),e.YNc(38,ko,2,0,"span",16),e.qZA()()()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(7),e.Q6J("ngIf",o.targetForm.showError("user",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("user",t,"pattern")),e.xp6(10),e.Q6J("ngIf",o.targetForm.showError("password",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("password",t,"pattern")),e.xp6(7),e.Q6J("ngIf",o.targetForm.showError("mutual_user",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("mutual_user",t,"pattern")),e.xp6(10),e.Q6J("ngIf",o.targetForm.showError("mutual_password",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("mutual_password",t,"pattern"))}}function Ko(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,114),e.qZA())}function Xo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,115),e.qZA())}function Qo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,116),e.qZA())}function zo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,117),e.qZA())}function Jo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,118),e.qZA())}function Yo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,119),e.qZA())}function Vo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,120),e.qZA())}function Uo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,121),e.qZA())}function jo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,122),e.qZA())}function Wo(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,123),e.qZA())}function en(n,s){1&n&&(e.TgZ(0,"span",40),e.SDv(1,124),e.qZA())}function tn(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.TgZ(3,"button",51),e.NdJ("click",function(){const i=e.CHM(t),_=i.index,r=i.$implicit,l=e.oxw(),d=l.$implicit,u=l.index;return e.oxw(3).removeInitiatorImage(d,_,u,r)}),e._UZ(4,"i",15),e.qZA()(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngClass",e.VKq(2,V,o.icons.destroy))}}function on(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,125),e.qZA())}function nn(n,s){if(1&n&&(e.TgZ(0,"div",21)(1,"div",22)(2,"cd-select",126),e._UZ(3,"i",24),e.ynx(4),e.SDv(5,127),e.BQk(),e.qZA()()()),2&n){const t=e.oxw(),o=t.$implicit,i=t.index,_=e.oxw(3);e.xp6(2),e.Q6J("data",o.getValue("luns"))("options",_.imagesInitiatorSelections[i])("messages",_.messages.initiatorImage),e.xp6(1),e.Q6J("ngClass",e.VKq(4,V,_.icons.add))}}function sn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",91)(1,"div",5),e.ynx(2),e.SDv(3,92),e.BQk(),e._uU(4),e.TgZ(5,"button",93),e.NdJ("click",function(){const _=e.CHM(t).index;return e.oxw(3).removeInitiator(_)}),e.qZA()(),e.TgZ(6,"div",7)(7,"div",8)(8,"label",94),e.SDv(9,95),e.qZA(),e.TgZ(10,"div",11)(11,"input",96),e.NdJ("blur",function(){return e.CHM(t),e.oxw(3).updatedInitiatorSelector()}),e.qZA(),e.YNc(12,Ko,2,0,"span",16),e.YNc(13,Xo,2,0,"span",16),e.YNc(14,Qo,2,0,"span",16),e.qZA()(),e.ynx(15,60),e.TgZ(16,"div",8)(17,"label",97),e.SDv(18,98),e.qZA(),e.TgZ(19,"div",11),e._UZ(20,"input",99),e.YNc(21,zo,2,0,"span",16),e.YNc(22,Jo,2,0,"span",16),e.qZA()(),e.TgZ(23,"div",8)(24,"label",100),e.SDv(25,101),e.qZA(),e.TgZ(26,"div",11)(27,"div",12),e._UZ(28,"input",102)(29,"button",103)(30,"cd-copy-2-clipboard-button",104),e.qZA(),e.YNc(31,Yo,2,0,"span",16),e.YNc(32,Vo,2,0,"span",16),e.qZA()(),e.TgZ(33,"div",8)(34,"label",105),e.ynx(35),e.SDv(36,106),e.BQk(),e.qZA(),e.TgZ(37,"div",11),e._UZ(38,"input",107),e.YNc(39,Uo,2,0,"span",16),e.YNc(40,jo,2,0,"span",16),e.qZA()(),e.TgZ(41,"div",8)(42,"label",108),e.SDv(43,109),e.qZA(),e.TgZ(44,"div",11)(45,"div",12),e._UZ(46,"input",110)(47,"button",103)(48,"cd-copy-2-clipboard-button",104),e.qZA(),e.YNc(49,Wo,2,0,"span",16),e.YNc(50,en,2,0,"span",16),e.qZA()(),e.BQk(),e.TgZ(51,"div",8)(52,"label",111),e.SDv(53,112),e.qZA(),e.TgZ(54,"div",11),e.YNc(55,tn,5,4,"ng-container",20),e.YNc(56,on,2,0,"span",54),e.YNc(57,nn,6,6,"div",113),e.qZA()()()()}if(2&n){const t=s.$implicit,o=s.index;e.oxw(2);const i=e.MAs(2);e.Q6J("formGroup",t),e.xp6(4),e.hij(": ",t.getValue("client_iqn")," "),e.xp6(8),e.Q6J("ngIf",t.showError("client_iqn",i,"notUnique")),e.xp6(1),e.Q6J("ngIf",t.showError("client_iqn",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("client_iqn",i,"pattern")),e.xp6(6),e.Q6J("id","user"+o),e.xp6(1),e.Q6J("ngIf",t.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("user",i,"pattern")),e.xp6(6),e.Q6J("id","password"+o),e.xp6(1),e.Q6J("cdPasswordButton","password"+o),e.xp6(1),e.Q6J("source","password"+o),e.xp6(1),e.Q6J("ngIf",t.showError("password",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("password",i,"pattern")),e.xp6(6),e.Q6J("id","mutual_user"+o),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_user",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_user",i,"pattern")),e.xp6(6),e.Q6J("id","mutual_password"+o),e.xp6(1),e.Q6J("cdPasswordButton","mutual_password"+o),e.xp6(1),e.Q6J("source","mutual_password"+o),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_password",i,"required")),e.xp6(1),e.Q6J("ngIf",t.showError("mutual_password",i,"pattern")),e.xp6(5),e.Q6J("ngForOf",t.getValue("luns")),e.xp6(1),e.Q6J("ngIf",t.getValue("cdIsInGroup")),e.xp6(1),e.Q6J("ngIf",!t.getValue("cdIsInGroup"))}}function _n(n,s){1&n&&(e.TgZ(0,"span",47),e.SDv(1,128),e.qZA())}function an(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",8)(1,"label",85),e.SDv(2,86),e.qZA(),e.TgZ(3,"div",87),e.YNc(4,sn,58,24,"div",88),e.TgZ(5,"div",21)(6,"div",22),e.YNc(7,_n,2,0,"span",17),e.TgZ(8,"button",89),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).addInitiator(),!1}),e._UZ(9,"i",24),e.ynx(10),e.SDv(11,90),e.BQk(),e.qZA()()(),e._UZ(12,"hr"),e.qZA()()}if(2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",t.initiators.controls),e.xp6(3),e.Q6J("ngIf",0===t.initiators.controls.length),e.xp6(2),e.Q6J("ngClass",e.VKq(3,V,t.icons.add))}}function rn(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.TgZ(3,"button",51),e.NdJ("click",function(){const _=e.CHM(t).index,r=e.oxw(),l=r.$implicit,d=r.index;return e.oxw(3).removeGroupInitiator(l,_,d)}),e._UZ(4,"i",15),e.qZA()(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngClass",e.VKq(2,V,o.icons.destroy))}}function ln(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e._UZ(2,"input",50),e.TgZ(3,"button",51),e.NdJ("click",function(){const _=e.CHM(t).index,r=e.oxw(),l=r.$implicit,d=r.index;return e.oxw(3).removeGroupDisk(l,_,d)}),e._UZ(4,"i",15),e.qZA()(),e.BQk()}if(2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Q6J("value",t),e.xp6(2),e.Q6J("ngClass",e.VKq(2,V,o.icons.destroy))}}function cn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",91)(1,"div",5),e.ynx(2),e.SDv(3,132),e.BQk(),e._uU(4),e.TgZ(5,"button",93),e.NdJ("click",function(){const _=e.CHM(t).index;return e.oxw(3).removeGroup(_)}),e.qZA()(),e.TgZ(6,"div",7)(7,"div",8)(8,"label",133),e.SDv(9,134),e.qZA(),e.TgZ(10,"div",11),e._UZ(11,"input",135),e.qZA()(),e.TgZ(12,"div",8)(13,"label",136),e.ynx(14),e.SDv(15,137),e.BQk(),e.qZA(),e.TgZ(16,"div",11),e.YNc(17,rn,5,4,"ng-container",20),e.TgZ(18,"div",21)(19,"div",22)(20,"cd-select",23),e.NdJ("selection",function(i){const r=e.CHM(t).index;return e.oxw(3).onGroupMemberSelection(i,r)}),e._UZ(21,"i",24),e.ynx(22),e.SDv(23,138),e.BQk(),e.qZA()()(),e._UZ(24,"hr"),e.qZA()(),e.TgZ(25,"div",8)(26,"label",27),e.ynx(27),e.SDv(28,139),e.BQk(),e.qZA(),e.TgZ(29,"div",11),e.YNc(30,ln,5,4,"ng-container",20),e.TgZ(31,"div",21)(32,"div",22)(33,"cd-select",126),e._UZ(34,"i",24),e.ynx(35),e.SDv(36,140),e.BQk(),e.qZA()()(),e._UZ(37,"hr"),e.qZA()()()()}if(2&n){const t=s.$implicit,o=s.index,i=e.oxw(3);e.Q6J("formGroup",t),e.xp6(4),e.hij(": ",t.getValue("group_id")," "),e.xp6(13),e.Q6J("ngForOf",t.getValue("members")),e.xp6(3),e.Q6J("data",t.getValue("members"))("options",i.groupMembersSelections[o])("messages",i.messages.groupInitiator),e.xp6(1),e.Q6J("ngClass",e.VKq(12,V,i.icons.add)),e.xp6(9),e.Q6J("ngForOf",t.getValue("disks")),e.xp6(3),e.Q6J("data",t.getValue("disks"))("options",i.groupDiskSelections[o])("messages",i.messages.initiatorImage),e.xp6(1),e.Q6J("ngClass",e.VKq(14,V,i.icons.add))}}function dn(n,s){1&n&&(e.TgZ(0,"span",47),e.SDv(1,141),e.qZA())}function pn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",8)(1,"label",85),e.SDv(2,129),e.qZA(),e.TgZ(3,"div",130),e.YNc(4,cn,38,16,"div",88),e.TgZ(5,"div",21)(6,"div",22),e.YNc(7,dn,2,0,"span",17),e.TgZ(8,"button",89),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).addGroup(),!1}),e._UZ(9,"i",24),e.ynx(10),e.SDv(11,131),e.BQk(),e.qZA()()()()()}if(2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",t.groups.controls),e.xp6(3),e.Q6J("ngIf",0===t.groups.controls.length),e.xp6(2),e.Q6J("ngClass",e.VKq(3,V,t.icons.add))}}function un(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11)(13,"div",12),e._UZ(14,"input",13),e.TgZ(15,"button",14),e.NdJ("click",function(){return e.CHM(t),e.oxw().targetSettingsModal()}),e._UZ(16,"i",15),e.qZA()(),e.YNc(17,Oo,2,0,"span",16),e.YNc(18,ho,2,0,"span",16),e.YNc(19,Ao,9,0,"span",16),e.YNc(20,Po,2,0,"span",17),e._UZ(21,"hr"),e.qZA()(),e.TgZ(22,"div",8)(23,"label",18),e.SDv(24,19),e.qZA(),e.TgZ(25,"div",11),e.YNc(26,Io,5,4,"ng-container",20),e.TgZ(27,"div",21)(28,"div",22)(29,"cd-select",23),e.NdJ("selection",function(i){return e.CHM(t),e.oxw().onPortalSelection(i)}),e._UZ(30,"i",24),e.ynx(31),e.SDv(32,25),e.BQk(),e.qZA()()(),e._UZ(33,"input",26),e.YNc(34,bo,2,1,"span",16),e._UZ(35,"hr"),e.qZA()(),e.TgZ(36,"div",8)(37,"label",27),e.SDv(38,28),e.qZA(),e.TgZ(39,"div",11),e.YNc(40,Lo,11,10,"ng-container",20),e._UZ(41,"input",29),e.YNc(42,vo,2,0,"span",16),e.YNc(43,$o,2,0,"span",16),e.TgZ(44,"div",21)(45,"div",22)(46,"cd-select",23),e.NdJ("selection",function(i){return e.CHM(t),e.oxw().onImageSelection(i)}),e._UZ(47,"i",24),e.ynx(48),e.SDv(49,30),e.BQk(),e.qZA()()(),e._UZ(50,"hr"),e.qZA()(),e.TgZ(51,"div",8)(52,"div",31)(53,"div",32),e._UZ(54,"input",33),e.TgZ(55,"label",34),e.SDv(56,35),e.qZA()(),e._UZ(57,"hr"),e.qZA()(),e.YNc(58,qo,39,8,"div",36),e.YNc(59,an,13,5,"div",37),e.YNc(60,pn,12,5,"div",37),e.qZA(),e.TgZ(61,"div",38)(62,"cd-form-button-panel",39),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw().submit()}),e.ALo(63,"titlecase"),e.ALo(64,"upperFirst"),e.qZA()()()()()}if(2&n){const t=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.targetForm),e.xp6(6),e.pQV(e.lcZ(6,26,o.action))(e.lcZ(7,28,o.resource)),e.QtT(5),e.xp6(9),e.Q6J("ngClass",e.VKq(34,V,o.icons.deepCheck)),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"required")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"pattern")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("target_iqn",t,"iqn")),e.xp6(1),e.Q6J("ngIf",o.hasAdvancedSettings(o.targetForm.getValue("target_controls"))),e.xp6(6),e.Q6J("ngForOf",o.portals.value),e.xp6(3),e.Q6J("data",o.portals.value)("options",o.portalsSelections)("messages",o.messages.portals),e.xp6(1),e.Q6J("ngClass",e.VKq(36,V,o.icons.add)),e.xp6(4),e.Q6J("ngIf",o.targetForm.showError("portals",t,"minGateways")),e.xp6(6),e.Q6J("ngForOf",o.targetForm.getValue("disks")),e.xp6(2),e.Q6J("ngIf",o.targetForm.showError("disks",t,"dupLunId")),e.xp6(1),e.Q6J("ngIf",o.targetForm.showError("disks",t,"dupWwn")),e.xp6(3),e.Q6J("data",o.disks.value)("options",o.imagesSelections)("messages",o.messages.images),e.xp6(1),e.Q6J("ngClass",e.VKq(38,V,o.icons.add)),e.xp6(11),e.Q6J("ngIf",o.cephIscsiConfigVersion>10&&!o.targetForm.getValue("acl_enabled")),e.xp6(1),e.Q6J("ngIf",o.targetForm.getValue("acl_enabled")),e.xp6(1),e.Q6J("ngIf",o.targetForm.getValue("acl_enabled")),e.xp6(2),e.Q6J("form",o.targetForm)("submitText",e.lcZ(63,30,o.action)+" "+e.lcZ(64,32,o.resource))}}let ft=(()=>{class n extends k.E{constructor(t,o,i,_,r,l,d){super(),this.iscsiService=t,this.modalService=o,this.rbdService=i,this.router=_,this.route=r,this.taskWrapper=l,this.actionLabels=d,this.api_version=0,this.minimum_gateways=1,this.icons=T.P,this.isEdit=!1,this.portalsSelections=[],this.imagesInitiatorSelections=[],this.groupDiskSelections=[],this.groupMembersSelections=[],this.imagesSettings={},this.messages={portals:new N.a({noOptions:"There are no portals available."}),images:new N.a({noOptions:"There are no images available."}),initiatorImage:new N.a({noOptions:"There are no images available. Please make sure you add an image to the target."}),groupInitiator:new N.a({noOptions:"There are no initiators available. Please make sure you add an initiator to the target."})},this.IQN_REGEX=/^iqn\.(19|20)\d\d-(0[1-9]|1[0-2])\.\D{2,3}(\.[A-Za-z0-9-]+)+(:[A-Za-z0-9-\.]+)*$/,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.resource="target"}ngOnInit(){const t=new A.E(()=>{});t.pageInfo.limit=-1;const o=[this.iscsiService.listTargets(),this.rbdService.list(t.toParams()),this.iscsiService.portals(),this.iscsiService.settings(),this.iscsiService.version()];this.router.url.startsWith("/block/iscsi/targets/edit")&&(this.isEdit=!0,this.route.params.subscribe(i=>{this.target_iqn=decodeURIComponent(i.target_iqn),o.push(this.iscsiService.getTarget(this.target_iqn))})),this.action=this.isEdit?this.actionLabels.EDIT:this.actionLabels.CREATE,(0,le.D)(o).subscribe(i=>{const _=C()(i[0]).filter(l=>l.target_iqn!==this.target_iqn).flatMap(l=>l.disks).map(l=>`${l.pool}/${l.image}`).value();"api_version"in i[3]&&(this.api_version=i[3].api_version),this.minimum_gateways=i[3].config.minimum_gateways,this.target_default_controls=i[3].target_default_controls,this.target_controls_limits=i[3].target_controls_limits,this.disk_default_controls=i[3].disk_default_controls,this.disk_controls_limits=i[3].disk_controls_limits,this.backstores=i[3].backstores,this.default_backstore=i[3].default_backstore,this.unsupported_rbd_features=i[3].unsupported_rbd_features,this.required_rbd_features=i[3].required_rbd_features,this.imagesAll=C()(i[1]).flatMap(l=>l.value).filter(l=>!l.namespace&&!(-1!==_.indexOf(`${l.pool_name}/${l.name}`)||0===this.getValidBackstores(l).length)).value(),this.imagesSelections=this.imagesAll.map(l=>new x.$(!1,`${l.pool_name}/${l.name}`,""));const r=[];i[2].forEach(l=>{l.ip_addresses.forEach(d=>{r.push(new x.$(!1,l.name+":"+d,""))})}),this.portalsSelections=[...r],this.cephIscsiConfigVersion=i[4].ceph_iscsi_config_version,this.createForm(),i[5]&&this.resolveModel(i[5]),this.loadingReady()})}createForm(){if(this.targetForm=new Z.d({target_iqn:new a.NI("iqn.2001-07.com.ceph:"+Date.now(),{validators:[a.kI.required,a.kI.pattern(this.IQN_REGEX)]}),target_controls:new a.NI({}),portals:new a.NI([],{validators:[z.h.custom("minGateways",t=>C().uniq(t.map(i=>i.split(":")[0])).length<Math.max(1,this.minimum_gateways))]}),disks:new a.NI([],{validators:[z.h.custom("dupLunId",t=>{const o=this.getLunIds(t);return o.length!==C().uniq(o).length}),z.h.custom("dupWwn",t=>{const o=this.getWwns(t);return o.length!==C().uniq(o).length})]}),initiators:new a.Oe([]),groups:new a.Oe([]),acl_enabled:new a.NI(!1)}),this.cephIscsiConfigVersion>10){const t=new Z.d({user:new a.NI(""),password:new a.NI(""),mutual_user:new a.NI(""),mutual_password:new a.NI("")});this.setAuthValidator(t),this.targetForm.addControl("auth",t)}}resolveModel(t){this.targetForm.patchValue({target_iqn:t.target_iqn,target_controls:t.target_controls,acl_enabled:t.acl_enabled}),this.cephIscsiConfigVersion>10&&this.targetForm.patchValue({auth:t.auth});const o=[];C().forEach(t.portals,_=>{o.push(`${_.host}:${_.ip}`)}),this.targetForm.patchValue({portals:o});const i=[];C().forEach(t.disks,_=>{const r=`${_.pool}/${_.image}`;i.push(r),this.imagesSettings[r]={backstore:_.backstore},this.imagesSettings[r][_.backstore]=_.controls,"lun"in _&&(this.imagesSettings[r].lun=_.lun),"wwn"in _&&(this.imagesSettings[r].wwn=_.wwn),this.onImageSelection({option:{name:r,selected:!0}})}),this.targetForm.patchValue({disks:i}),C().forEach(t.clients,_=>{const r=this.addInitiator();_.luns=C().map(_.luns,l=>`${l.pool}/${l.image}`),r.patchValue(_)}),t.groups.forEach((_,r)=>{const l=this.addGroup();_.disks=C().map(_.disks,d=>`${d.pool}/${d.image}`),l.patchValue(_),C().forEach(_.members,d=>{this.onGroupMemberSelection({option:new x.$(!0,d,"")},r)})})}hasAdvancedSettings(t){return Object.values(t).length>0}get portals(){return this.targetForm.get("portals")}onPortalSelection(){this.portals.setValue(this.portals.value)}removePortal(t,o){return this.portalsSelections.forEach(i=>{i.name===o&&(i.selected=!1)}),this.portals.value.splice(t,1),this.portals.setValue(this.portals.value),!1}get disks(){return this.targetForm.get("disks")}removeImage(t,o){return this.imagesSelections.forEach(i=>{i.name===o&&(i.selected=!1)}),this.disks.value.splice(t,1),this.removeImageRefs(o),this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1}),!1}removeImageRefs(t){this.initiators.controls.forEach(o=>{const i=o.value.luns.filter(_=>_!==t);o.get("luns").setValue(i)}),this.groups.controls.forEach(o=>{const i=o.value.disks.filter(_=>_!==t);o.get("disks").setValue(i)}),C().forEach(this.imagesInitiatorSelections,(o,i)=>{this.imagesInitiatorSelections[i]=o.filter(_=>_.name!==t)}),C().forEach(this.groupDiskSelections,(o,i)=>{this.groupDiskSelections[i]=o.filter(_=>_.name!==t)})}getDefaultBackstore(t){let o=this.default_backstore;const i=this.getImageById(t);return this.validFeatures(i,this.default_backstore)||this.backstores.forEach(_=>{_!==this.default_backstore&&this.validFeatures(i,_)&&(o=_)}),o}isLunIdInUse(t,o){const i=this.disks.value.filter(_=>_!==o);return this.getLunIds(i).includes(t)}getLunIds(t){return C().map(t,o=>this.imagesSettings[o].lun)}nextLunId(t){const o=this.disks.value.filter(r=>r!==t),i=this.getLunIds(o);let _=0;for(;i.includes(_);)_++;return _}getWwns(t){return C().map(t,i=>this.imagesSettings[i].wwn).filter(i=>C().isString(i)&&""!==i)}onImageSelection(t){const o=t.option;if(o.selected){if(this.imagesSettings[o.name])this.isLunIdInUse(this.imagesSettings[o.name].lun,o.name)&&(this.imagesSettings[o.name].lun=this.nextLunId(o.name));else{const i=this.getDefaultBackstore(o.name);this.imagesSettings[o.name]={backstore:i,lun:this.nextLunId(o.name)},this.imagesSettings[o.name][i]={}}C().forEach(this.imagesInitiatorSelections,(i,_)=>{i.push(new x.$(!1,o.name,"")),this.imagesInitiatorSelections[_]=[...i]}),C().forEach(this.groupDiskSelections,(i,_)=>{i.push(new x.$(!1,o.name,"")),this.groupDiskSelections[_]=[...i]})}else this.removeImageRefs(o.name);this.targetForm.get("disks").updateValueAndValidity({emitEvent:!1})}get initiators(){return this.targetForm.get("initiators")}addInitiator(){const t=new Z.d({client_iqn:new a.NI("",{validators:[a.kI.required,z.h.custom("notUnique",i=>{const _=this.initiators.controls.reduce(function(r,l){return r.concat(l.value.client_iqn)},[]);return _.indexOf(i)!==_.lastIndexOf(i)}),a.kI.pattern(this.IQN_REGEX)]}),auth:new Z.d({user:new a.NI(""),password:new a.NI(""),mutual_user:new a.NI(""),mutual_password:new a.NI("")}),luns:new a.NI([]),cdIsInGroup:new a.NI(!1)});this.setAuthValidator(t),this.initiators.push(t),C().forEach(this.groupMembersSelections,(i,_)=>{i.push(new x.$(!1,"","")),this.groupMembersSelections[_]=[...i]});const o=C().map(this.targetForm.getValue("disks"),i=>new x.$(!1,i,""));return this.imagesInitiatorSelections.push(o),t}setAuthValidator(t){z.h.validateIf(t.get("user"),()=>t.getValue("password")||t.getValue("mutual_user")||t.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.USER_REGEX)],[t.get("password"),t.get("mutual_user"),t.get("mutual_password")]),z.h.validateIf(t.get("password"),()=>t.getValue("user")||t.getValue("mutual_user")||t.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.PASSWORD_REGEX)],[t.get("user"),t.get("mutual_user"),t.get("mutual_password")]),z.h.validateIf(t.get("mutual_user"),()=>t.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.USER_REGEX)],[t.get("user"),t.get("password"),t.get("mutual_password")]),z.h.validateIf(t.get("mutual_password"),()=>t.getValue("mutual_user"),[a.kI.required],[a.kI.pattern(this.PASSWORD_REGEX)],[t.get("user"),t.get("password"),t.get("mutual_user")])}removeInitiator(t){const o=this.initiators.value[t];this.initiators.removeAt(t),C().forEach(this.groupMembersSelections,(i,_)=>{i.splice(t,1),this.groupMembersSelections[_]=[...i]}),this.groups.controls.forEach(i=>{const _=i.value.members.filter(r=>r!==o.client_iqn);i.get("members").setValue(_)}),this.imagesInitiatorSelections.splice(t,1)}updatedInitiatorSelector(){this.initiators.controls.forEach(t=>{t.get("client_iqn").updateValueAndValidity({emitEvent:!1})}),C().forEach(this.groupMembersSelections,(t,o)=>{C().forEach(t,(i,_)=>{const r=i.name;i.name=this.initiators.controls[_].value.client_iqn,this.groups.controls.forEach(l=>{const d=l.value.members,u=d.indexOf(r);-1!==u&&(d[u]=i.name),l.get("members").setValue(d)})}),this.groupMembersSelections[o]=[...this.groupMembersSelections[o]]})}removeInitiatorImage(t,o,i,_){const r=t.getValue("luns");return r.splice(o,1),t.patchValue({luns:r}),this.imagesInitiatorSelections[i].forEach(l=>{l.name===_&&(l.selected=!1)}),!1}get groups(){return this.targetForm.get("groups")}addGroup(){const t=new Z.d({group_id:new a.NI("",{validators:[a.kI.required]}),members:new a.NI([]),disks:new a.NI([])});this.groups.push(t);const o=C().map(this.targetForm.getValue("disks"),_=>new x.$(!1,_,""));this.groupDiskSelections.push(o);const i=C().map(this.initiators.value,_=>new x.$(!1,_.client_iqn,"",!_.cdIsInGroup));return this.groupMembersSelections.push(i),t}removeGroup(t){this.groups.removeAt(t),this.groupMembersSelections[t].filter(i=>i.selected).forEach(i=>{i.selected=!1,this.onGroupMemberSelection({option:i},t)}),this.groupMembersSelections.splice(t,1),this.groupDiskSelections.splice(t,1)}onGroupMemberSelection(t,o){const i=t.option;let _=[];i.selected||(_=this.groupDiskSelections[o].filter(l=>l.selected).map(l=>l.name)),this.initiators.controls.forEach((r,l)=>{r.value.client_iqn===i.name&&(r.patchValue({luns:_}),r.get("cdIsInGroup").setValue(i.selected),C().forEach(this.groupMembersSelections,d=>{d[l].enabled=!i.selected}),this.imagesInitiatorSelections[l].forEach(d=>{d.selected=_.includes(d.name)}))})}removeGroupInitiator(t,o,i){const _=t.getValue("members")[o];t.getValue("members").splice(o,1),this.onGroupMemberSelection({option:new x.$(!1,_,"")},i)}removeGroupDisk(t,o,i){const _=t.getValue("disks")[o];t.getValue("disks").splice(o,1),this.groupDiskSelections[i].forEach(r=>{r.name===_&&(r.selected=!1)}),this.groupDiskSelections[i]=[...this.groupDiskSelections[i]]}submit(){const t=C().cloneDeep(this.targetForm.value),o={target_iqn:this.targetForm.getValue("target_iqn"),target_controls:this.targetForm.getValue("target_controls"),acl_enabled:this.targetForm.getValue("acl_enabled"),portals:[],disks:[],clients:[],groups:[]};if(this.cephIscsiConfigVersion>10){const _=this.targetForm.get("auth");_.getValue("user")||_.get("user").setValue(""),_.getValue("password")||_.get("password").setValue(""),_.getValue("mutual_user")||_.get("mutual_user").setValue(""),_.getValue("mutual_password")||_.get("mutual_password").setValue("");const r=this.targetForm.getValue("acl_enabled");o.auth={user:r?"":_.getValue("user"),password:r?"":_.getValue("password"),mutual_user:r?"":_.getValue("mutual_user"),mutual_password:r?"":_.getValue("mutual_password")}}let i;t.disks.forEach(_=>{const r=_.split("/"),l=this.imagesSettings[_].backstore;o.disks.push({pool:r[0],image:r[1],backstore:l,controls:this.imagesSettings[_][l],lun:this.imagesSettings[_].lun,wwn:this.imagesSettings[_].wwn})}),t.portals.forEach(_=>{const r=_.indexOf(":");o.portals.push({host:_.substring(0,r),ip:_.substring(r+1)})}),o.acl_enabled&&(t.initiators.forEach(_=>{_.auth.user||(_.auth.user=""),_.auth.password||(_.auth.password=""),_.auth.mutual_user||(_.auth.mutual_user=""),_.auth.mutual_password||(_.auth.mutual_password=""),delete _.cdIsInGroup;const r=[];_.luns.forEach(l=>{const d=l.split("/");r.push({pool:d[0],image:d[1]})}),_.luns=r}),o.clients=t.initiators),o.acl_enabled&&(t.groups.forEach(_=>{const r=[];_.disks.forEach(l=>{const d=l.split("/");r.push({pool:d[0],image:d[1]})}),_.disks=r}),o.groups=t.groups),this.isEdit?(o.new_target_iqn=o.target_iqn,o.target_iqn=this.target_iqn,i=this.taskWrapper.wrapTaskAroundCall({task:new M.R("iscsi/target/edit",{target_iqn:o.target_iqn}),call:this.iscsiService.updateTarget(this.target_iqn,o)})):i=this.taskWrapper.wrapTaskAroundCall({task:new M.R("iscsi/target/create",{target_iqn:o.target_iqn}),call:this.iscsiService.createTarget(o)}),i.subscribe({error:()=>{this.targetForm.setErrors({cdSubmitButton:!0})},complete:()=>this.router.navigate(["/block/iscsi/targets"])})}targetSettingsModal(){const t={target_controls:this.targetForm.get("target_controls"),target_default_controls:this.target_default_controls,target_controls_limits:this.target_controls_limits};this.modalRef=this.modalService.show(Ro,t)}imageSettingsModal(t){const o={imagesSettings:this.imagesSettings,image:t,api_version:this.api_version,disk_default_controls:this.disk_default_controls,disk_controls_limits:this.disk_controls_limits,backstores:this.getValidBackstores(this.getImageById(t)),control:this.targetForm.get("disks")};this.modalRef=this.modalService.show(Co,o)}validFeatures(t,o){const i=t.features,_=this.required_rbd_features[o];return(i&_)===_&&0==(i&this.unsupported_rbd_features[o])}getImageById(t){return this.imagesAll.find(o=>t===`${o.pool_name}/${o.name}`)}getValidBackstores(t){return this.backstores.filter(o=>this.validFeatures(t,o))}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(X),e.Y36(de.Z),e.Y36(H),e.Y36(g.F0),e.Y36(g.gz),e.Y36(m.P),e.Y36(D.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,i,_,r,l,d,u,S,E,I,B,y,Q,J,ee,te,w,_e,ae,O,ue,me,ge,Te,fe,Ce,Se,G,ye,xe,Ze,we,He,ke,qe,Ke,Xe,Qe,ze,b,yt,xt,Zt,wt,Ht,kt,qt,Kt,Xt,Qt,zt,Jt,Yt,Vt,Ut,jt,Wt,eo,to,oo;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Target IQN",o="Portals",i="Add portal",_="Images",r="Add image",l="ACL authentication",d="This field is required.",u="IQN has wrong pattern.",S="An IQN has the following notation 'iqn.$year-$month.$reversedAddress:$definedName'",E="For example: iqn.2016-06.org.dashboard:storage:disk.sn-a8675309",I="More information",B="This target has modified advanced settings.",y="At least " + "\ufffd0\ufffd" + " gateways are required.",Q="Backstore: " + "\ufffd0\ufffd" + ".\xA0",J="This image has modified settings.",ee="Duplicated LUN numbers.",te="Duplicated WWN.",w="User",_e="Password",ae="Mutual User",O="Mutual Password",ue="This field is required.",me="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",ge="This field is required.",Te="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",fe="This field is required.",Ce="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",Se="This field is required.",G="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",ye="Initiators",xe="Add initiator",Ze="Initiator",we="Client IQN",He="User",ke="Password",qe="Mutual User",Ke="Mutual Password",Xe="Images",Qe="Initiator IQN needs to be unique.",ze="This field is required.",b="IQN has wrong pattern.",yt="This field is required.",xt="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",Zt="This field is required.",wt="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",Ht="This field is required.",kt="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",qt="This field is required.",Kt="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",Xt="Initiator belongs to a group. Images will be configure in the group.",Qt="Add image",zt="No items added.",Jt="Groups",Yt="Add group",Vt="Group",Ut="Name",jt="Initiators",Wt="Add initiator",eo="Images",to="Add image",oo="No items added.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","targetForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],[1,"form-group","row"],["for","target_iqn",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],[1,"input-group"],["type","text","id","target_iqn","name","target_iqn","formControlName","target_iqn","cdTrim","",1,"form-control"],["id","ecp-info-button","type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],["class","invalid-feedback",4,"ngIf"],["class","form-text text-muted",4,"ngIf"],["for","portals",1,"cd-col-form-label","required"],o,[4,"ngFor","ngForOf"],[1,"row"],[1,"col-md-12"],["elemClass","btn btn-light float-end",3,"data","options","messages","selection"],[3,"ngClass"],i,["type","hidden","id","portals","name","portals","formControlName","portals",1,"form-control"],["for","disks",1,"cd-col-form-label"],_,["type","hidden","id","disks","name","disks","formControlName","disks",1,"form-control"],r,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","acl_enabled","name","acl_enabled","id","acl_enabled",1,"custom-control-input"],["for","acl_enabled",1,"custom-control-label"],l,["formGroupName","auth",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],d,u,S,E,["target","_blank","href","https://en.wikipedia.org/wiki/ISCSI#Addressing"],I,[1,"form-text","text-muted"],B,[1,"input-group","cd-mb"],["type","text","disabled","",1,"cd-form-control",3,"value"],["type","button",1,"btn","btn-light",3,"click"],y,["class","input-group-text",4,"ngIf"],[4,"ngIf"],[1,"input-group-text"],Q,J,ee,te,["formGroupName","auth"],["for","target_user",1,"cd-col-form-label"],w,["type","text","autocomplete","off","id","target_user","name","target_user","formControlName","user",1,"form-control"],["for","target_password",1,"cd-col-form-label"],_e,["type","password","autocomplete","new-password","id","target_password","name","target_password","formControlName","password",1,"form-control"],["type","button","cdPasswordButton","target_password",1,"btn","btn-light"],["source","target_password"],["for","target_mutual_user",1,"cd-col-form-label"],ae,["type","text","autocomplete","off","id","target_mutual_user","name","target_mutual_user","formControlName","mutual_user",1,"form-control"],["for","target_mutual_password",1,"cd-col-form-label"],O,["type","password","autocomplete","new-password","id","target_mutual_password","name","target_mutual_password","formControlName","mutual_password",1,"form-control"],["type","button","cdPasswordButton","target_mutual_password",1,"btn","btn-light"],["source","target_mutual_password"],ue,me,ge,Te,fe,Ce,Se,G,["for","initiators",1,"cd-col-form-label"],ye,["formArrayName","initiators",1,"cd-col-form-input"],["class","card mb-2",3,"formGroup",4,"ngFor","ngForOf"],[1,"btn","btn-light","float-end",3,"click"],xe,[1,"card","mb-2",3,"formGroup"],Ze,["type","button",1,"btn-close","float-end",3,"click"],["for","client_iqn",1,"cd-col-form-label","required"],we,["type","text","formControlName","client_iqn","cdTrim","",1,"form-control",3,"blur"],["for","user",1,"cd-col-form-label"],He,["formControlName","user","autocomplete","off","type","text",1,"form-control",3,"id"],["for","password",1,"cd-col-form-label"],ke,["formControlName","password","autocomplete","new-password","type","password",1,"form-control",3,"id"],["type","button",1,"btn","btn-light",3,"cdPasswordButton"],[3,"source"],["for","mutual_user",1,"cd-col-form-label"],qe,["formControlName","mutual_user","autocomplete","off","type","text",1,"form-control",3,"id"],["for","mutual_password",1,"cd-col-form-label"],Ke,["formControlName","mutual_password","autocomplete","new-password","type","password",1,"form-control",3,"id"],["for","luns",1,"cd-col-form-label"],Xe,["class","row",4,"ngIf"],Qe,ze,b,yt,xt,Zt,wt,Ht,kt,qt,Kt,Xt,["elemClass","btn btn-light float-end",3,"data","options","messages"],Qt,zt,Jt,["formArrayName","groups",1,"cd-col-form-input"],Yt,Vt,["for","group_id",1,"cd-col-form-label","required"],Ut,["type","text","formControlName","group_id",1,"form-control"],["for","members",1,"cd-col-form-label"],jt,Wt,eo,to,oo]},template:function(t,o){1&t&&e.YNc(0,un,65,40,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},directives:[gt.y,a._Y,a.JL,a.sg,P.V,h.P,$.o,a.Fj,K.b,a.JJ,a.u,Eo,c.mk,c.O5,c.sg,Mo.H,a.Wl,a.x0,Tt.C,Ye.s,a.CE,j.p],pipes:[c.rS,tt.m,Je.V],styles:[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}"]}),n})();var Ct=p(68136),pe=p(30982),W=p(83697),Le=p(99466),Re=p(68774),St=p(55657),ce=p(38047),ot=p(18001),ve=p(97161),oe=p(47640);function mn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function gn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function Tn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,32),e.qZA())}function fn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,33),e.qZA())}function Cn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,34),e.qZA())}function Sn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,35),e.qZA())}function Rn(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,36),e.qZA())}function En(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,37),e.qZA())}let Mn=(()=>{class n{constructor(t,o,i,_,r){this.authStorageService=t,this.activeModal=o,this.actionLabels=i,this.iscsiService=_,this.notificationService=r,this.USER_REGEX=/^[\w\.:@_-]{8,64}$/,this.PASSWORD_REGEX=/^[\w@\-_\/]{12,16}$/,this.permission=this.authStorageService.getPermissions().iscsi}ngOnInit(){this.hasPermission=this.permission.update,this.createForm(),this.iscsiService.getDiscovery().subscribe(t=>{this.discoveryForm.patchValue(t)})}createForm(){this.discoveryForm=new Z.d({user:new a.NI({value:"",disabled:!this.hasPermission}),password:new a.NI({value:"",disabled:!this.hasPermission}),mutual_user:new a.NI({value:"",disabled:!this.hasPermission}),mutual_password:new a.NI({value:"",disabled:!this.hasPermission})}),z.h.validateIf(this.discoveryForm.get("user"),()=>this.discoveryForm.getValue("password")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.USER_REGEX)],[this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("password"),()=>this.discoveryForm.getValue("user")||this.discoveryForm.getValue("mutual_user")||this.discoveryForm.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("mutual_user"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("mutual_user"),()=>this.discoveryForm.getValue("mutual_password"),[a.kI.required],[a.kI.pattern(this.USER_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_password")]),z.h.validateIf(this.discoveryForm.get("mutual_password"),()=>this.discoveryForm.getValue("mutual_user"),[a.kI.required],[a.kI.pattern(this.PASSWORD_REGEX)],[this.discoveryForm.get("user"),this.discoveryForm.get("password"),this.discoveryForm.get("mutual_user")])}submitAction(){this.iscsiService.updateDiscovery(this.discoveryForm.value).subscribe(()=>{this.notificationService.show(ot.k.success,"Updated discovery authentication"),this.activeModal.close()},()=>{this.discoveryForm.setErrors({cdSubmitButton:!0})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(L.Kz),e.Y36(D.p4),e.Y36(X),e.Y36(ve.g))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-discovery-modal"]],decls:44,vars:13,consts:function(){let s,t,o,i,_,r,l,d,u,S,E,I,B;return s="Discovery Authentication",t="User",o="Password",i="Mutual User",_="Mutual Password",r="This field is required.",l="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",d="This field is required.",u="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",S="This field is required.",E="User names must have a length of 8 to 64 characters and can contain alphanumeric characters, '.', '@', '-', '_' or ':'.",I="This field is required.",B="Passwords must have a length of 12 to 16 characters and can contain alphanumeric characters, '@', '-', '_' or '/'.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","discoveryForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","user",1,"cd-col-form-label"],t,[1,"cd-col-form-input"],["id","user","formControlName","user","type","text","autocomplete","off",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","password",1,"cd-col-form-label"],o,[1,"input-group"],["id","password","formControlName","password","type","password","autocomplete","new-password",1,"form-control"],["type","button","cdPasswordButton","password",1,"btn","btn-light"],["source","password"],["for","mutual_user",1,"cd-col-form-label"],i,["id","mutual_user","formControlName","mutual_user","type","text","autocomplete","off",1,"form-control"],["for","mutual_password",1,"cd-col-form-label"],_,["id","mutual_password","formControlName","mutual_password","type","password","autocomplete","new-password",1,"form-control"],["type","button","cdPasswordButton","mutual_password",1,"btn","btn-light"],["source","mutual_password"],[1,"modal-footer"],[3,"form","showSubmit","submitText","submitActionEvent"],[1,"invalid-feedback"],r,l,d,u,S,E,I,B]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10),e._UZ(11,"input",11),e.YNc(12,mn,2,0,"span",12),e.YNc(13,gn,2,0,"span",12),e.qZA()(),e.TgZ(14,"div",7)(15,"label",13),e.SDv(16,14),e.qZA(),e.TgZ(17,"div",10)(18,"div",15),e._UZ(19,"input",16)(20,"button",17)(21,"cd-copy-2-clipboard-button",18),e.qZA(),e.YNc(22,Tn,2,0,"span",12),e.YNc(23,fn,2,0,"span",12),e.qZA()(),e.TgZ(24,"div",7)(25,"label",19),e.ynx(26),e.SDv(27,20),e.BQk(),e.qZA(),e.TgZ(28,"div",10),e._UZ(29,"input",21),e.YNc(30,Cn,2,0,"span",12),e.YNc(31,Sn,2,0,"span",12),e.qZA()(),e.TgZ(32,"div",7)(33,"label",22),e.SDv(34,23),e.qZA(),e.TgZ(35,"div",10)(36,"div",15),e._UZ(37,"input",24)(38,"button",25)(39,"cd-copy-2-clipboard-button",26),e.qZA(),e.YNc(40,Rn,2,0,"span",12),e.YNc(41,En,2,0,"span",12),e.qZA()()(),e.TgZ(42,"div",27)(43,"cd-form-button-panel",28),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.discoveryForm),e.xp6(8),e.Q6J("ngIf",o.discoveryForm.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("user",i,"pattern")),e.xp6(9),e.Q6J("ngIf",o.discoveryForm.showError("password",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("password",i,"pattern")),e.xp6(7),e.Q6J("ngIf",o.discoveryForm.showError("mutual_user",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("mutual_user",i,"pattern")),e.xp6(9),e.Q6J("ngIf",o.discoveryForm.showError("mutual_password",i,"required")),e.xp6(1),e.Q6J("ngIf",o.discoveryForm.showError("mutual_password",i,"pattern")),e.xp6(2),e.Q6J("form",o.discoveryForm)("showSubmit",o.hasPermission)("submitText",o.actionLabels.SUBMIT)}},directives:[f.z,a._Y,a.JL,a.sg,P.V,h.P,$.o,a.Fj,K.b,a.JJ,a.u,c.O5,Tt.C,Ye.s,j.p],styles:[""]}),n})();var On=p(86969);let Rt=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-tabs"]],decls:7,vars:0,consts:function(){let s,t;return s="Overview",t="Targets",[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/block/iscsi/overview","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link"],s,["routerLink","/block/iscsi/targets","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link"],t]},template:function(t,o){1&t&&(e.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),e.SDv(3,3),e.qZA()(),e.TgZ(4,"li",1)(5,"a",4),e.SDv(6,5),e.qZA()()())},directives:[g.yS,g.Od],styles:[""]}),n})();var nt=p(34501),hn=p(30490),Ee=p(94928),An=p(68962);const Pn=["highlightTpl"],In=["detailTable"],bn=["tree"],Nn=function(){return["logged_in"]},Fn=function(){return["logged_out"]},Dn=function(n,s){return{"badge-success":n,"badge-danger":s}};function Ln(n,s){if(1&n&&(e._UZ(0,"i"),e.TgZ(1,"span"),e._uU(2),e.qZA(),e._uU(3," \xa0 "),e.TgZ(4,"span",8),e._uU(5),e.qZA()),2&n){const t=s.$implicit;e.Tol(t.data.cdIcon),e.xp6(2),e.Oqu(t.data.name),e.xp6(2),e.Q6J("ngClass",e.WLB(7,Dn,e.DdM(5,Nn).includes(t.data.status),e.DdM(6,Fn).includes(t.data.status))),e.xp6(1),e.hij(" ",t.data.status," ")}}function vn(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"legend"),e._uU(2),e.qZA(),e._UZ(3,"cd-table",10,11),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.Oqu(t.title),e.xp6(1),e.Q6J("data",t.data)("columns",t.columns)("limit",0)}}function $n(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function Bn(n,s){if(1&n&&(e.TgZ(0,"strong"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function Gn(n,s){if(1&n&&(e.YNc(0,$n,2,1,"span",12),e.YNc(1,Bn,2,1,"strong",12)),2&n){const t=s.row;e.Q6J("ngIf",void 0===t.default||t.default===t.current),e.xp6(1),e.Q6J("ngIf",void 0!==t.default&&t.default!==t.current)}}let yn=(()=>{class n{constructor(t,o){this.iscsiBackstorePipe=t,this.booleanTextPipe=o,this.icons=T.P,this.metadata={},this.nodes=[],this.treeOptions={useVirtualScroll:!0,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}}}set content(t){this.detailTable=t,t&&t.updateColumns()}ngOnInit(){this.columns=[{prop:"displayName",name:"Name",flexGrow:1,cellTemplate:this.highlightTpl},{prop:"current",name:"Current",flexGrow:1,cellTemplate:this.highlightTpl},{prop:"default",name:"Default",flexGrow:1,cellTemplate:this.highlightTpl}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.generateTree()),this.data=void 0}generateTree(){const t=C().cloneDeep(this.selectedItem.target_controls);this.cephIscsiConfigVersion>10&&C().extend(t,C().cloneDeep(this.selectedItem.auth)),this.metadata={root:t};const o={target:{expanded:C().join(this.selectedItem.cdExecuting?[T.P.large,T.P.spinner,T.P.spin]:[T.P.large,T.P.bullseye]," ")},initiators:{expanded:C().join([T.P.large,T.P.user]," "),leaf:C().join([T.P.user]," ")},groups:{expanded:C().join([T.P.large,T.P.users]," "),leaf:C().join([T.P.users]," ")},disks:{expanded:C().join([T.P.large,T.P.disk]," "),leaf:C().join([T.P.disk]," ")},portals:{expanded:C().join([T.P.large,T.P.server]," "),leaf:C().join([T.P.server]," ")}},i=[];C().forEach(this.selectedItem.disks,d=>{const u="disk_"+d.pool+"_"+d.image;this.metadata[u]={controls:d.controls,backstore:d.backstore},["wwn","lun"].forEach(S=>{S in d&&(this.metadata[u][S]=d[S])}),i.push({name:`${d.pool}/${d.image}`,cdId:u,cdIcon:o.disks.leaf})});const _=[];C().forEach(this.selectedItem.portals,d=>{_.push({name:`${d.host}:${d.ip}`,cdIcon:o.portals.leaf})});const r=[];C().forEach(this.selectedItem.clients,d=>{const u=C().cloneDeep(d.auth);d.info&&(C().extend(u,d.info),delete u.state,C().forEach(Object.keys(d.info.state),I=>{u[I.toLowerCase()]=d.info.state[I]})),this.metadata["client_"+d.client_iqn]=u;const S=[];d.luns.forEach(I=>{S.push({name:`${I.pool}/${I.image}`,cdId:"disk_"+I.pool+"_"+I.image,cdIcon:o.disks.leaf})});let E="";d.info&&(E=Object.keys(d.info.state).includes("LOGGED_IN")?"logged_in":"logged_out"),r.push({name:d.client_iqn,status:E,cdId:"client_"+d.client_iqn,children:S,cdIcon:o.initiators.leaf})});const l=[];C().forEach(this.selectedItem.groups,d=>{const u=[];d.disks.forEach(E=>{u.push({name:`${E.pool}/${E.image}`,cdId:"disk_"+E.pool+"_"+E.image,cdIcon:o.disks.leaf})});const S=[];d.members.forEach(E=>{S.push({name:E,cdId:"client_"+E})}),l.push({name:d.group_id,cdIcon:o.groups.leaf,children:[{name:"Disks",children:u,cdIcon:o.disks.expanded},{name:"Initiators",children:S,cdIcon:o.initiators.expanded}]})}),this.nodes=[{name:this.selectedItem.target_iqn,cdId:"root",isExpanded:!0,cdIcon:o.target.expanded,children:[{name:"Disks",isExpanded:!0,children:i,cdIcon:o.disks.expanded},{name:"Portals",isExpanded:!0,children:_,cdIcon:o.portals.expanded},{name:"Initiators",isExpanded:!0,children:r,cdIcon:o.initiators.expanded},{name:"Groups",isExpanded:!0,children:l,cdIcon:o.groups.expanded}]}]}format(t){return"boolean"==typeof t?this.booleanTextPipe.transform(t):t}onNodeSelected(t,o){var i,_,r,l;if(ne.iM.ACTIVATE(t,o,!0),o.data.cdId){this.title=o.data.name;const d=this.metadata[o.data.cdId]||{};"root"===o.data.cdId?(null===(i=this.detailTable)||void 0===i||i.toggleColumn({prop:"default",isHidden:!0}),this.data=C().map(this.settings.target_default_controls,(u,S)=>({displayName:S,default:u=this.format(u),current:C().isUndefined(d[S])?u:this.format(d[S])})),this.cephIscsiConfigVersion>10&&["user","password","mutual_user","mutual_password"].forEach(u=>{this.data.push({displayName:u,default:null,current:d[u]})})):o.data.cdId.toString().startsWith("disk_")?(null===(_=this.detailTable)||void 0===_||_.toggleColumn({prop:"default",isHidden:!0}),this.data=C().map(this.settings.disk_default_controls[d.backstore],(u,S)=>({displayName:S,default:u=this.format(u),current:C().isUndefined(d.controls[S])?u:this.format(d.controls[S])})),this.data.push({displayName:"backstore",default:this.iscsiBackstorePipe.transform(this.settings.default_backstore),current:this.iscsiBackstorePipe.transform(d.backstore)}),["wwn","lun"].forEach(u=>{u in d&&this.data.push({displayName:u,default:void 0,current:d[u]})})):(null===(r=this.detailTable)||void 0===r||r.toggleColumn({prop:"default",isHidden:!1}),this.data=C().map(d,(u,S)=>({displayName:S,default:void 0,current:this.format(u)})))}else this.data=void 0;null===(l=this.detailTable)||void 0===l||l.updateColumns()}onUpdateData(){this.tree.treeModel.expandAll()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Je.V),e.Y36(An.T))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-details"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Pn,7),e.Gf(In,5),e.Gf(bn,5)),2&t){let i;e.iGM(i=e.CRH())&&(o.highlightTpl=i.first),e.iGM(i=e.CRH())&&(o.content=i.first),e.iGM(i=e.CRH())&&(o.tree=i.first)}},inputs:{selection:"selection",settings:"settings",cephIscsiConfigVersion:"cephIscsiConfigVersion"},features:[e.TTD],decls:11,vars:3,consts:function(){let s;return s="iSCSI Topology",[[1,"row"],[1,"col-6"],s,[3,"nodes","options","updateData"],["tree",""],["treeNodeTemplate",""],["class","col-6 metadata",4,"ngIf"],["highlightTpl",""],[1,"badge",3,"ngClass"],[1,"col-6","metadata"],["columnMode","flex",3,"data","columns","limit"],["detailTable",""],[4,"ngIf"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"legend"),e.SDv(3,2),e.qZA(),e.TgZ(4,"tree-root",3,4),e.NdJ("updateData",function(){return o.onUpdateData()}),e.YNc(6,Ln,6,10,"ng-template",null,5,e.W1O),e.qZA()(),e.YNc(8,vn,5,4,"div",6),e.qZA(),e.YNc(9,Gn,2,2,"ng-template",null,7,e.W1O)),2&t&&(e.xp6(4),e.Q6J("nodes",o.nodes)("options",o.treeOptions),e.xp6(4),e.Q6J("ngIf",o.data))},directives:[ne.qr,c.mk,c.O5,W.a],styles:[""]}),n})();function xn(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"br"),e.TgZ(2,"span"),e.SDv(3,6),e.qZA(),e.TgZ(4,"pre"),e._uU(5),e.qZA(),e.BQk()),2&n){const t=e.oxw(2);e.xp6(5),e.Oqu(t.status)}}function Zn(n,s){if(1&n&&(e.TgZ(0,"cd-alert-panel",2),e.ynx(1),e.tHW(2,3),e._UZ(3,"cd-doc",4),e.N_p(),e.BQk(),e.YNc(4,xn,6,1,"ng-container",5),e.qZA()),2&n){const t=e.oxw();e.xp6(4),e.Q6J("ngIf",t.status)}}function wn(n,s){if(1&n&&e._UZ(0,"cd-iscsi-target-details",15),2&n){const t=e.oxw(2);e.Q6J("cephIscsiConfigVersion",t.cephIscsiConfigVersion)("selection",t.expandedRow)("settings",t.settings)}}const Hn=function(n){return[n]};function kn(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",7,8),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().getTargets()})("setExpandedRow",function(i){return e.CHM(t),e.oxw().setExpandedRow(i)})("updateSelection",function(i){return e.CHM(t),e.oxw().updateSelection(i)}),e.TgZ(2,"div",9),e._UZ(3,"cd-table-actions",10),e.TgZ(4,"button",11),e.NdJ("click",function(){return e.CHM(t),e.oxw().configureDiscoveryAuth()}),e._UZ(5,"i",12),e.ynx(6),e.SDv(7,13),e.BQk(),e.qZA()(),e.YNc(8,wn,1,3,"cd-iscsi-target-details",14),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.targets)("columns",t.columns)("hasDetails",!0)("autoReload",!1)("status",t.tableStatus),e.xp6(3),e.Q6J("permission",t.permission)("selection",t.selection)("tableActions",t.tableActions),e.xp6(2),e.Q6J("ngClass",e.VKq(10,Hn,t.icons.key)),e.xp6(3),e.Q6J("ngIf",t.expandedRow)}}let qn=(()=>{class n extends Ct.o{constructor(t,o,i,_,r,l,d,u,S){super(S),this.authStorageService=t,this.iscsiService=o,this.joinPipe=i,this.taskListService=_,this.notAvailablePipe=r,this.modalService=l,this.taskWrapper=d,this.actionLabels=u,this.ngZone=S,this.available=void 0,this.selection=new Re.r,this.targets=[],this.icons=T.P,this.builders={"iscsi/target/create":E=>({target_iqn:E.target_iqn})},this.permission=this.authStorageService.getPermissions().iscsi,this.tableActions=[{permission:"create",icon:T.P.add,routerLink:()=>"/block/iscsi/targets/create",name:this.actionLabels.CREATE},{permission:"update",icon:T.P.edit,routerLink:()=>`/block/iscsi/targets/edit/${this.selection.first().target_iqn}`,name:this.actionLabels.EDIT,disable:()=>this.getEditDisableDesc()},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteIscsiTargetModal(),name:this.actionLabels.DELETE,disable:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:"Target",prop:"target_iqn",flexGrow:2,cellTransformation:Le.e.executing},{name:"Portals",prop:"cdPortals",pipe:this.joinPipe,flexGrow:2},{name:"Images",prop:"cdImages",pipe:this.joinPipe,flexGrow:2},{name:"# Sessions",prop:"info.num_sessions",pipe:this.notAvailablePipe,flexGrow:1}],this.iscsiService.status().subscribe(t=>{this.available=t.available,t.available||(this.status=t.message)})}getTargets(){this.available&&(this.setTableRefreshTimeout(),this.iscsiService.version().subscribe(t=>{this.cephIscsiConfigVersion=t.ceph_iscsi_config_version}),this.taskListService.init(()=>this.iscsiService.listTargets(),t=>this.prepareResponse(t),t=>this.targets=t,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders),this.iscsiService.settings().subscribe(t=>{this.settings=t}))}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}getEditDisableDesc(){const t=this.selection.first();return t&&(null==t?void 0:t.cdExecuting)?t.cdExecuting:t&&C().isUndefined(null==t?void 0:t.info)?"Unavailable gateway(s)":!t}getDeleteDisableDesc(){var t;const o=this.selection.first();return(null==o?void 0:o.cdExecuting)?o.cdExecuting:o&&C().isUndefined(null==o?void 0:o.info)?"Unavailable gateway(s)":o&&(null===(t=null==o?void 0:o.info)||void 0===t?void 0:t.num_sessions)?"Target has active sessions":!o}prepareResponse(t){return t.forEach(o=>{o.cdPortals=o.portals.map(i=>`${i.host}:${i.ip}`),o.cdImages=o.disks.map(i=>`${i.pool}/${i.image}`)}),t}onFetchError(){this.table.reset()}itemFilter(t,o){return t.target_iqn===o.metadata.target_iqn}taskFilter(t){return["iscsi/target/create","iscsi/target/edit","iscsi/target/delete"].includes(t.name)}updateSelection(t){this.selection=t}deleteIscsiTargetModal(){const t=this.selection.first().target_iqn;this.modalRef=this.modalService.show(pe.M,{itemDescription:"iSCSI target",itemNames:[t],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new M.R("iscsi/target/delete",{target_iqn:t}),call:this.iscsiService.deleteTarget(t)})})}configureDiscoveryAuth(){this.modalService.show(Mn)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(X),e.Y36(On.A),e.Y36(ce.j),e.Y36(St.g),e.Y36(de.Z),e.Y36(m.P),e.Y36(D.p4),e.Y36(e.R0b))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi-target-list"]],viewQuery:function(t,o){if(1&t&&e.Gf(W.a,5),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first)}},features:[e._Bn([ce.j]),e.qOj],decls:3,vars:2,consts:function(){let s,t,o,i;return s="iSCSI Targets not available",t="Please consult the " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " on how to configure and enable the iSCSI Targets management functionality.",o="Available information:",i="Discovery authentication",[["type","info","title",s,4,"ngIf"],["columnMode","flex","identifier","target_iqn","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","autoReload","status","fetchData","setExpandedRow","updateSelection",4,"ngIf"],["type","info","title",s],t,["section","iscsi"],[4,"ngIf"],o,["columnMode","flex","identifier","target_iqn","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","autoReload","status","fetchData","setExpandedRow","updateSelection"],["table",""],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"],["type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],i,["cdTableDetail","",3,"cephIscsiConfigVersion","selection","settings",4,"ngIf"],["cdTableDetail","",3,"cephIscsiConfigVersion","selection","settings"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-iscsi-tabs"),e.YNc(1,Zn,5,1,"cd-alert-panel",0),e.YNc(2,kn,9,12,"cd-table",1)),2&t&&(e.xp6(1),e.Q6J("ngIf",!1===o.available),e.xp6(1),e.Q6J("ngIf",!0===o.available))},directives:[Rt,c.O5,nt.G,hn.K,W.a,Ee.K,$.o,c.mk,yn],styles:[""]}),n})();var it=p(66369),Kn=p(76446),Xn=p(90068);const Qn=["iscsiSparklineTpl"],zn=["iscsiPerSecondTpl"],Jn=["iscsiRelativeDateTpl"];function Yn(n,s){if(1&n&&(e.TgZ(0,"span"),e._UZ(1,"cd-sparkline",9),e.qZA()),2&n){const t=e.oxw(),o=t.value,i=t.row;e.xp6(1),e.Q6J("data",o)("isBinary",i.cdIsBinary)}}function Vn(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function Un(n,s){if(1&n&&(e.YNc(0,Yn,2,2,"span",7),e.YNc(1,Vn,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}function jn(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.hij(" ",t," /s ")}}function Wn(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function ei(n,s){if(1&n&&(e.YNc(0,jn,2,1,"span",7),e.YNc(1,Wn,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}function ti(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"notAvailable"),e.ALo(3,"relativeDate"),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.hij(" ",e.lcZ(2,1,e.lcZ(3,3,t))," ")}}function oi(n,s){1&n&&(e.TgZ(0,"span",10),e._uU(1," n/a "),e.qZA())}function ni(n,s){if(1&n&&(e.YNc(0,ti,4,5,"span",7),e.YNc(1,oi,2,0,"span",8)),2&n){const t=s.row;e.Q6J("ngIf","user:rbd"===t.backstore),e.xp6(1),e.Q6J("ngIf","user:rbd"!==t.backstore)}}let ii=(()=>{class n{constructor(t,o,i){this.iscsiService=t,this.dimlessPipe=o,this.iscsiBackstorePipe=i,this.gateways=[],this.images=[]}ngOnInit(){this.gatewaysColumns=[{name:"Name",prop:"name"},{name:"State",prop:"state",flexGrow:1,cellTransformation:Le.e.badge,customTemplateConfig:{map:{up:{class:"badge-success"},down:{class:"badge-danger"}}}},{name:"# Targets",prop:"num_targets"},{name:"# Sessions",prop:"num_sessions"}],this.imagesColumns=[{name:"Pool",prop:"pool"},{name:"Image",prop:"image"},{name:"Backstore",prop:"backstore",pipe:this.iscsiBackstorePipe},{name:"Read Bytes",prop:"stats_history.rd_bytes",cellTemplate:this.iscsiSparklineTpl},{name:"Write Bytes",prop:"stats_history.wr_bytes",cellTemplate:this.iscsiSparklineTpl},{name:"Read Ops",prop:"stats.rd",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:"Write Ops",prop:"stats.wr",pipe:this.dimlessPipe,cellTemplate:this.iscsiPerSecondTpl},{name:"A/O Since",prop:"optimized_since",cellTemplate:this.iscsiRelativeDateTpl}]}refresh(){this.iscsiService.overview().subscribe(t=>{this.gateways=t.gateways,this.images=t.images,this.images.map(o=>(o.stats_history&&(o.stats_history.rd_bytes=o.stats_history.rd_bytes.map(i=>i[1]),o.stats_history.wr_bytes=o.stats_history.wr_bytes.map(i=>i[1])),o.cdIsBinary=!0,o))})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(X),e.Y36(it.n),e.Y36(Je.V))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-iscsi"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Qn,7),e.Gf(zn,7),e.Gf(Jn,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.iscsiSparklineTpl=i.first),e.iGM(i=e.CRH())&&(o.iscsiPerSecondTpl=i.first),e.iGM(i=e.CRH())&&(o.iscsiRelativeDateTpl=i.first)}},decls:15,vars:4,consts:function(){let s,t;return s="Gateways",t="Images",[s,[3,"data","columns","fetchData"],t,[3,"data","columns"],["iscsiSparklineTpl",""],["iscsiPerSecondTpl",""],["iscsiRelativeDateTpl",""],[4,"ngIf"],["class","text-muted",4,"ngIf"],[3,"data","isBinary"],[1,"text-muted"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-iscsi-tabs"),e.TgZ(1,"legend"),e.SDv(2,0),e.qZA(),e.TgZ(3,"div")(4,"cd-table",1),e.NdJ("fetchData",function(){return o.refresh()}),e.qZA()(),e.TgZ(5,"legend"),e.SDv(6,2),e.qZA(),e.TgZ(7,"div"),e._UZ(8,"cd-table",3),e.qZA(),e.YNc(9,Un,2,2,"ng-template",null,4,e.W1O),e.YNc(11,ei,2,2,"ng-template",null,5,e.W1O),e.YNc(13,ni,2,2,"ng-template",null,6,e.W1O)),2&t&&(e.xp6(4),e.Q6J("data",o.gateways)("columns",o.gatewaysColumns),e.xp6(4),e.Q6J("data",o.images)("columns",o.imagesColumns))},directives:[Rt,W.a,c.O5,Kn.l],pipes:[St.g,Xn.h],styles:[""]}),n})(),si=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[c.ez,Ae.m,L.Oz,g.Bz,a.u5,a.UX,L.ZQ,L.HK]]}),n})();var _i=p(13464),ai=p(26215),ri=p(45435),Et=p(36848);let q=class{constructor(s,t){this.http=s,this.timerService=t,this.REFRESH_INTERVAL=3e4,this.summaryDataSource=new ai.X(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/block/mirroring/summary")}retrieveSummaryObserver(){return s=>{this.summaryDataSource.next(s)}}subscribeSummary(s,t){return this.summaryData$.pipe((0,ri.h)(o=>!!o)).subscribe(s,t)}getPool(s){return this.http.get(`api/block/mirroring/pool/${s}`)}updatePool(s,t){return this.http.put(`api/block/mirroring/pool/${s}`,t,{observe:"response"})}getSiteName(){return this.http.get("api/block/mirroring/site_name")}setSiteName(s){return this.http.put("api/block/mirroring/site_name",{site_name:s},{observe:"response"})}createBootstrapToken(s){return this.http.post(`api/block/mirroring/pool/${s}/bootstrap/token`,{})}importBootstrapToken(s,t,o){return this.http.post(`api/block/mirroring/pool/${s}/bootstrap/peer`,{direction:t,token:o},{observe:"response"})}getPeer(s,t){return this.http.get(`api/block/mirroring/pool/${s}/peer/${t}`)}getPeerForPool(s){return this.http.get(`api/block/mirroring/pool/${s}/peer`)}addPeer(s,t){return this.http.post(`api/block/mirroring/pool/${s}/peer`,t,{observe:"response"})}updatePeer(s,t,o){return this.http.put(`api/block/mirroring/pool/${s}/peer/${t}`,o,{observe:"response"})}deletePeer(s,t){return this.http.delete(`api/block/mirroring/pool/${s}/peer/${t}`,{observe:"response"})}};q.\u0275fac=function(s){return new(s||q)(e.LFG(ie.eN),e.LFG(Et.f))},q.\u0275prov=e.Yz7({token:q,factory:q.\u0275fac,providedIn:"root"}),(0,F.gn)([(0,F.fM)(0,Y.G),(0,F.w6)("design:type",Function),(0,F.w6)("design:paramtypes",[String]),(0,F.w6)("design:returntype",void 0)],q.prototype,"setSiteName",null),(0,F.gn)([(0,F.fM)(1,Y.G),(0,F.fM)(2,Y.G),(0,F.w6)("design:type",Function),(0,F.w6)("design:paramtypes",[String,String,String]),(0,F.w6)("design:returntype",void 0)],q.prototype,"importBootstrapToken",null),q=(0,F.gn)([Y.o,(0,F.w6)("design:paramtypes",[ie.eN,Et.f])],q);var st=p(6481),li=p(68307),Mt=p(12627),Me=p(82945),ci=p(39749),di=p(13472);function pi(n,s){1&n&&(e.TgZ(0,"span",25),e.SDv(1,26),e.qZA())}function ui(n,s){if(1&n&&(e.TgZ(0,"div",27),e._UZ(1,"input",28),e.TgZ(2,"label",29),e._uU(3),e.qZA()()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.name),e.s9C("name",t.name),e.s9C("formControlName",t.name),e.xp6(1),e.s9C("for",t.name),e.xp6(1),e.Oqu(t.name)}}function mi(n,s){1&n&&(e.TgZ(0,"span",25),e.SDv(1,30),e.qZA())}let gi=(()=>{class n{constructor(t,o,i){this.activeModal=t,this.rbdMirroringService=o,this.taskWrapper=i,this.pools=[],this.createForm()}createForm(){this.createBootstrapForm=new Z.d({siteName:new a.NI("",{validators:[a.kI.required]}),pools:new a.cw({},{validators:[this.validatePools()]}),token:new a.NI("",{})})}ngOnInit(){this.createBootstrapForm.get("siteName").setValue(this.siteName),this.rbdMirroringService.getSiteName().subscribe(t=>{this.createBootstrapForm.get("siteName").setValue(t.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.pools=t.content_data.pools.reduce((_,r)=>(_.push({name:r.name,mirror_mode:r.mirror_mode}),_),[]);const i=this.createBootstrapForm.get("pools");C().each(this.pools,_=>{const r=_.name,l="disabled"===_.mirror_mode,d=i.controls[r];d?l&&d.disabled?d.enable():!l&&d.enabled&&(d.disable(),d.setValue(!0)):i.addControl(r,new a.NI({value:!l,disabled:!l}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return t=>{let o=0;return C().each(t.controls,i=>{!0===i.value&&++o}),o>0?null:{requirePool:!0}}}generate(){this.createBootstrapForm.get("token").setValue("");let t="";const o=[],i=this.createBootstrapForm.get("pools");C().each(i.controls,(u,S)=>{!0===u.value&&(t=S,u.disabled||o.push(S))});const _={mirror_mode:"image"},r=(0,st.z)(this.rbdMirroringService.setSiteName(this.createBootstrapForm.getValue("siteName")),(0,le.D)(o.map(u=>this.rbdMirroringService.updatePool(u,_))),this.rbdMirroringService.createBootstrapToken(t).pipe((0,li.b)(u=>this.createBootstrapForm.get("token").setValue(u.token)))).pipe((0,Mt.Z)()),l=()=>{this.rbdMirroringService.refresh(),this.createBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/mirroring/bootstrap/create",{}),call:r}).subscribe({error:l,complete:l})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(L.Kz),e.Y36(q),e.Y36(m.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-bootstrap-create-modal"]],decls:32,vars:6,consts:function(){let s,t,o,i,_,r,l,d,u,S,E;return s="Create Bootstrap Token",t="To create a bootstrap token which can be imported by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, and click\xA0 " + "\ufffd#10\ufffd" + "Generate" + "\ufffd/#10\ufffd" + ".",o="Site Name",i="Name...",_="Pools",r="Generate",l="Token",d="Generated token...",u="Close",S="This field is required.",E="At least one pool is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","createBootstrapForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","siteName",1,"col-form-label","required"],o,["type","text","placeholder",i,"id","siteName","name","siteName","formControlName","siteName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["formGroupName","pools",1,"form-group"],["for","pools",1,"col-form-label","required"],_,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],[1,"mb-4","float-end",3,"form","submitAction"],r,["for","token",1,"col-form-label"],l,["placeholder",d,"id","token","formControlName","token","readonly","",1,"form-control","resize-vertical"],["source","token",1,"float-end"],[1,"modal-footer"],["name",u,3,"backAction"],[1,"invalid-feedback"],S,[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],E]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(11,"div",8)(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,pi,2,0,"span",12),e.qZA(),e.TgZ(16,"div",13)(17,"label",14),e.SDv(18,15),e.qZA(),e.YNc(19,ui,4,5,"div",16),e.YNc(20,mi,2,0,"span",12),e.qZA(),e.TgZ(21,"cd-submit-button",17),e.NdJ("submitAction",function(){return o.generate()}),e.SDv(22,18),e.qZA(),e.TgZ(23,"div",8)(24,"label",19)(25,"span"),e.SDv(26,20),e.qZA()(),e.TgZ(27,"textarea",21),e._uU(28,"          "),e.qZA()(),e._UZ(29,"cd-copy-2-clipboard-button",22),e.qZA(),e.TgZ(30,"div",23)(31,"cd-back-button",24),e.NdJ("backAction",function(){return o.activeModal.close()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.createBootstrapForm),e.xp6(11),e.Q6J("ngIf",o.createBootstrapForm.showError("siteName",i,"required")),e.xp6(4),e.Q6J("ngForOf",o.pools),e.xp6(1),e.Q6J("ngIf",o.createBootstrapForm.showError("pools",i,"requirePool")),e.xp6(1),e.Q6J("form",o.createBootstrapForm)}},directives:[f.z,a._Y,a.JL,P.V,a.sg,h.P,$.o,a.Fj,K.b,a.JJ,a.u,Me.U,c.O5,a.x0,c.sg,a.Wl,ci.w,Ye.s,di.W],styles:[".form-group.ng-invalid[_ngcontent-%COMP%]   .invalid-feedback[_ngcontent-%COMP%]{display:block}"]}),n})();function Ti(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,27),e.qZA())}function fi(n,s){if(1&n&&(e.TgZ(0,"option",28),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.key),e.xp6(1),e.Oqu(t.desc)}}function Ci(n,s){if(1&n&&(e.TgZ(0,"div",29),e._UZ(1,"input",30),e.TgZ(2,"label",31),e._uU(3),e.qZA()()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.name),e.s9C("name",t.name),e.s9C("formControlName",t.name),e.xp6(1),e.s9C("for",t.name),e.xp6(1),e.Oqu(t.name)}}function Si(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,32),e.qZA())}function Ri(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,33),e.qZA())}function Ei(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,34),e.qZA())}let Mi=(()=>{class n{constructor(t,o,i,_){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.pools=[],this.directions=[{key:"rx-tx",desc:"Bidirectional"},{key:"rx",desc:"Unidirectional (receive-only)"}],this.createForm()}createForm(){this.importBootstrapForm=new Z.d({siteName:new a.NI("",{validators:[a.kI.required]}),direction:new a.NI("rx-tx",{}),pools:new a.cw({},{validators:[this.validatePools()]}),token:new a.NI("",{validators:[a.kI.required,this.validateToken()]})})}ngOnInit(){this.rbdMirroringService.getSiteName().subscribe(t=>{this.importBootstrapForm.get("siteName").setValue(t.site_name)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.pools=t.content_data.pools.reduce((_,r)=>(_.push({name:r.name,mirror_mode:r.mirror_mode}),_),[]);const i=this.importBootstrapForm.get("pools");C().each(this.pools,_=>{const r=_.name,l="disabled"===_.mirror_mode,d=i.controls[r];d?l&&d.disabled?d.enable():!l&&d.enabled&&(d.disable(),d.setValue(!0)):i.addControl(r,new a.NI({value:!l,disabled:!l}))})})}ngOnDestroy(){this.subs&&this.subs.unsubscribe()}validatePools(){return t=>{let o=0;return C().each(t.controls,i=>{!0===i.value&&++o}),o>0?null:{requirePool:!0}}}validateToken(){return t=>{try{if(JSON.parse(atob(t.value)))return null}catch(o){}return{invalidToken:!0}}}import(){const t=[],o=[],i=this.importBootstrapForm.get("pools");C().each(i.controls,(u,S)=>{!0===u.value&&(t.push(S),u.disabled||o.push(S))});const _={mirror_mode:"image"};let r=(0,st.z)(this.rbdMirroringService.setSiteName(this.importBootstrapForm.getValue("siteName")),(0,le.D)(o.map(u=>this.rbdMirroringService.updatePool(u,_))));r=t.reduce((u,S)=>(0,st.z)(u,this.rbdMirroringService.importBootstrapToken(S,this.importBootstrapForm.getValue("direction"),this.importBootstrapForm.getValue("token"))),r).pipe((0,Mt.Z)());const l=()=>{this.rbdMirroringService.refresh(),this.importBootstrapForm.setErrors({cdSubmitButton:!0})};this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/mirroring/bootstrap/import",{}),call:r}).subscribe({error:l,complete:()=>{l(),this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(L.Kz),e.Y36(D.p4),e.Y36(q),e.Y36(m.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-bootstrap-import-modal"]],decls:36,vars:10,consts:function(){let s,t,o,i,_,r,l,d,u,S,E,I;return s="Import Bootstrap Token",t="To import a bootstrap token which was created by a peer site cluster, provide the local site's name, select which pools will have mirroring enabled, provide the generated token, and click\xA0" + "\ufffd#10\ufffd" + "Import" + "\ufffd/#10\ufffd" + ".",o="Site Name",i="Name...",_="Direction",r="Pools",l="Token",d="Generated token...",u="This field is required.",S="At least one pool is required.",E="This field is required.",I="The token is invalid.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","importBootstrapForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","siteName",1,"col-form-label","required"],o,["type","text","placeholder",i,"id","siteName","name","siteName","formControlName","siteName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","direction",1,"col-form-label"],_,["id","direction","name","direction","formControlName","direction",1,"form-control"],[3,"value",4,"ngFor","ngForOf"],["formGroupName","pools",1,"form-group"],["for","pools",1,"col-form-label","required"],r,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],["for","token",1,"col-form-label","required"],l,["placeholder",d,"id","token","formControlName","token",1,"form-control","resize-vertical"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],u,[3,"value"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],S,E,I]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(11,"div",8)(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,Ti,2,0,"span",12),e.qZA(),e.TgZ(16,"div",8)(17,"label",13)(18,"span"),e.SDv(19,14),e.qZA()(),e.TgZ(20,"select",15),e.YNc(21,fi,2,2,"option",16),e.qZA()(),e.TgZ(22,"div",17)(23,"label",18),e.SDv(24,19),e.qZA(),e.YNc(25,Ci,4,5,"div",20),e.YNc(26,Si,2,0,"span",12),e.qZA(),e.TgZ(27,"div",8)(28,"label",21),e.SDv(29,22),e.qZA(),e.TgZ(30,"textarea",23),e._uU(31,"          "),e.qZA(),e.YNc(32,Ri,2,0,"span",12),e.YNc(33,Ei,2,0,"span",12),e.qZA()(),e.TgZ(34,"div",24)(35,"cd-form-button-panel",25),e.NdJ("submitActionEvent",function(){return o.import()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.importBootstrapForm),e.xp6(11),e.Q6J("ngIf",o.importBootstrapForm.showError("siteName",i,"required")),e.xp6(6),e.Q6J("ngForOf",o.directions),e.xp6(4),e.Q6J("ngForOf",o.pools),e.xp6(1),e.Q6J("ngIf",o.importBootstrapForm.showError("pools",i,"requirePool")),e.xp6(6),e.Q6J("ngIf",o.importBootstrapForm.showError("token",i,"required")),e.xp6(1),e.Q6J("ngIf",o.importBootstrapForm.showError("token",i,"invalidToken")),e.xp6(2),e.Q6J("form",o.importBootstrapForm)("submitText",o.actionLabels.SUBMIT)}},directives:[f.z,a._Y,a.JL,P.V,a.sg,h.P,$.o,a.Fj,K.b,a.JJ,a.u,Me.U,c.O5,a.EJ,c.sg,a.YN,a.Kr,a.x0,a.Wl,j.p],styles:[""]}),n})();var se=p(69158),Oi=p(58111);let _t=(()=>{class n{transform(t){return"warning"===t?"badge badge-warning":"error"===t?"badge badge-danger":"success"===t?"badge badge-success":"badge badge-info"}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"mirrorHealthColor",type:n,pure:!0}),n})();const hi=["healthTmpl"];function Ai(n,s){if(1&n&&(e.TgZ(0,"span",2),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.health_color)),e.xp6(2),e.Oqu(o)}}let Pi=(()=>{class n{constructor(t,o){this.rbdMirroringService=t,this.cephShortVersionPipe=o,this.tableStatus=new se.E}ngOnInit(){this.columns=[{prop:"instance_id",name:"Instance",flexGrow:2},{prop:"id",name:"ID",flexGrow:2},{prop:"server_hostname",name:"Hostname",flexGrow:2},{prop:"version",name:"Version",pipe:this.cephShortVersionPipe,flexGrow:2},{prop:"health",name:"Health",cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.data=t.content_data.daemons,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(q),e.Y36(Oi.F))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-daemons"]],viewQuery:function(t,o){if(1&t&&e.Gf(hi,7),2&t){let i;e.iGM(i=e.CRH())&&(o.healthTmpl=i.first)}},decls:3,vars:4,consts:[["columnMode","flex",3,"data","columns","autoReload","status","fetchData"],["healthTmpl",""],[3,"ngClass"]],template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()}),e.qZA(),e.YNc(1,Ai,3,4,"ng-template",null,1,e.W1O)),2&t&&e.Q6J("data",o.data)("columns",o.columns)("autoReload",-1)("status",o.tableStatus)},directives:[W.a,c.mk],pipes:[_t],styles:[""]}),n})();var Ot=p(70882);class Ii{}function bi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,25),e.qZA())}function Ni(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,26),e.qZA())}function Fi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,27),e.qZA())}function Di(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,28),e.qZA())}function Li(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,29),e.qZA())}function vi(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,30),e.qZA())}let $i=(()=>{class n{constructor(t,o,i,_){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.bsConfig={containerClass:"theme-default"},this.createForm()}createForm(){this.editPeerForm=new Z.d({clusterName:new a.NI("",{validators:[a.kI.required,this.validateClusterName]}),clientID:new a.NI("",{validators:[a.kI.required,this.validateClientID]}),monAddr:new a.NI("",{validators:[this.validateMonAddr]}),key:new a.NI("",{validators:[this.validateKey]})})}ngOnInit(){this.pattern=`${this.poolName}/${this.peerUUID}`,"edit"===this.mode&&this.rbdMirroringService.getPeer(this.poolName,this.peerUUID).subscribe(t=>{this.setResponse(t)})}validateClusterName(t){if(!t.value.match(/^[\w\-_]*$/))return{invalidClusterName:{value:t.value}}}validateClientID(t){if(!t.value.match(/^(?!client\.)[\w\-_.]*$/))return{invalidClientID:{value:t.value}}}validateMonAddr(t){if(!t.value.match(/^[,; ]*([\w.\-_\[\]]+(:[\d]+)?[,; ]*)*$/))return{invalidMonAddr:{value:t.value}}}validateKey(t){try{if(""===t.value||atob(t.value))return null}catch(o){}return{invalidKey:{value:t.value}}}setResponse(t){this.response=t,this.editPeerForm.get("clusterName").setValue(t.cluster_name),this.editPeerForm.get("clientID").setValue(t.client_id),this.editPeerForm.get("monAddr").setValue(t.mon_host),this.editPeerForm.get("key").setValue(t.key)}update(){const t=new Ii;let o;t.cluster_name=this.editPeerForm.getValue("clusterName"),t.client_id=this.editPeerForm.getValue("clientID"),t.mon_host=this.editPeerForm.getValue("monAddr"),t.key=this.editPeerForm.getValue("key"),o=this.taskWrapper.wrapTaskAroundCall("edit"===this.mode?{task:new M.R("rbd/mirroring/peer/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePeer(this.poolName,this.peerUUID,t)}:{task:new M.R("rbd/mirroring/peer/add",{pool_name:this.poolName}),call:this.rbdMirroringService.addPeer(this.poolName,t)}),o.subscribe({error:()=>this.editPeerForm.setErrors({cdSubmitButton:!0}),complete:()=>{this.rbdMirroringService.refresh(),this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(L.Kz),e.Y36(D.p4),e.Y36(q),e.Y36(m.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-pool-edit-peer-modal"]],decls:38,vars:13,consts:function(){let s,t,o,i,_,r,l,d,u,S,E,I,B,y,Q,J,ee,te;return s="{VAR_SELECT, select, edit {Edit} other {Add}}",s=e.Zx4(s,{VAR_SELECT:"\ufffd0\ufffd"}),t="" + s + " pool mirror peer",o="{VAR_SELECT, select, edit {Edit} other {Add}}",o=e.Zx4(o,{VAR_SELECT:"\ufffd0\ufffd"}),i="" + o + " the pool mirror peer attributes for pool " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd1\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + " and click " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Submit" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ".",i=e.Zx4(i),_="Cluster Name",r="Name...",l="CephX ID",d="CephX ID...",u="Monitor Addresses",S="Comma-delimited addresses...",E="CephX Key",I="Base64-encoded key...",B="This field is required.",y="The cluster name is not valid.",Q="This field is required.",J="The CephX ID is not valid.",ee="The monitory address is not valid.",te="CephX key must be base64 encoded.",[[3,"modalRef"],[1,"modal-title"],t,[1,"modal-content"],["name","editPeerForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],i,[1,"form-group"],["for","clusterName",1,"col-form-label","required"],_,["type","text","placeholder",r,"id","clusterName","name","clusterName","formControlName","clusterName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","clientID",1,"col-form-label","required"],l,["type","text","placeholder",d,"id","clientID","name","clientID","formControlName","clientID",1,"form-control"],["for","monAddr",1,"col-form-label"],u,["type","text","placeholder",S,"id","monAddr","name","monAddr","formControlName","monAddr",1,"form-control"],["for","key",1,"col-form-label"],E,["type","text","placeholder",I,"id","key","name","key","formControlName","key",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],B,y,Q,J,ee,te]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.qZA(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p")(8,"span"),e.tHW(9,7),e._UZ(10,"kbd")(11,"kbd"),e.N_p(),e.qZA()(),e.TgZ(12,"div",8)(13,"label",9),e.SDv(14,10),e.qZA(),e._UZ(15,"input",11),e.YNc(16,bi,2,0,"span",12),e.YNc(17,Ni,2,0,"span",12),e.qZA(),e.TgZ(18,"div",8)(19,"label",13),e.SDv(20,14),e.qZA(),e._UZ(21,"input",15),e.YNc(22,Fi,2,0,"span",12),e.YNc(23,Di,2,0,"span",12),e.qZA(),e.TgZ(24,"div",8)(25,"label",16)(26,"span"),e.SDv(27,17),e.qZA()(),e._UZ(28,"input",18),e.YNc(29,Li,2,0,"span",12),e.qZA(),e.TgZ(30,"div",8)(31,"label",19)(32,"span"),e.SDv(33,20),e.qZA()(),e._UZ(34,"input",21),e.YNc(35,vi,2,0,"span",12),e.qZA()(),e.TgZ(36,"div",22)(37,"cd-form-button-panel",23),e.NdJ("submitActionEvent",function(){return o.update()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.mode),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.editPeerForm),e.xp6(7),e.pQV(o.mode)(o.poolName),e.QtT(9),e.xp6(5),e.Q6J("ngIf",o.editPeerForm.showError("clusterName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.editPeerForm.showError("clusterName",i,"invalidClusterName")),e.xp6(5),e.Q6J("ngIf",o.editPeerForm.showError("clientID",i,"required")),e.xp6(1),e.Q6J("ngIf",o.editPeerForm.showError("clientID",i,"invalidClientID")),e.xp6(6),e.Q6J("ngIf",o.editPeerForm.showError("monAddr",i,"invalidMonAddr")),e.xp6(6),e.Q6J("ngIf",o.editPeerForm.showError("key",i,"invalidKey")),e.xp6(2),e.Q6J("form",o.editPeerForm)("submitText",o.actionLabels.SUBMIT)}},directives:[f.z,a._Y,a.JL,P.V,a.sg,h.P,$.o,a.Fj,K.b,a.JJ,a.u,Me.U,c.O5,j.p],styles:[""]}),n})();const Bi=["healthTmpl"],Gi=["localTmpl"],yi=["remoteTmpl"];function xi(n,s){if(1&n&&(e.TgZ(0,"span",6),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.health_color)),e.xp6(2),e.Oqu(o)}}function Zi(n,s){1&n&&(e.TgZ(0,"span",7),e.SDv(1,8),e.qZA())}function wi(n,s){1&n&&(e.TgZ(0,"span",9),e.SDv(1,10),e.qZA())}let ki=(()=>{class n{constructor(t,o,i,_,r){this.authStorageService=t,this.rbdMirroringService=o,this.modalService=i,this.taskWrapper=_,this.router=r,this.selection=new Re.r,this.tableStatus=new se.E,this.data=[],this.permission=this.authStorageService.getPermissions().rbdMirroring;const l={permission:"update",icon:T.P.edit,click:()=>this.editModeModal(),name:"Edit Mode",canBePrimary:()=>!0},d={permission:"create",icon:T.P.add,name:"Add Peer",click:()=>this.editPeersModal("add"),disable:()=>!this.selection.first()||"disabled"===this.selection.first().mirror_mode,visible:()=>!this.getPeerUUID(),canBePrimary:()=>!1},u={permission:"update",icon:T.P.exchange,name:"Edit Peer",click:()=>this.editPeersModal("edit"),visible:()=>!!this.getPeerUUID()},S={permission:"delete",icon:T.P.destroy,name:"Delete Peer",click:()=>this.deletePeersModal(),visible:()=>!!this.getPeerUUID()};this.tableActions=[l,d,u,S]}ngOnInit(){this.columns=[{prop:"name",name:"Name",flexGrow:2},{prop:"mirror_mode",name:"Mode",flexGrow:2},{prop:"leader_id",name:"Leader",flexGrow:2},{prop:"image_local_count",name:"# Local",headerTemplate:this.localTmpl,flexGrow:2},{prop:"image_remote_count",name:"# Remote",headerTemplate:this.remoteTmpl,flexGrow:2},{prop:"health",name:"Health",cellTemplate:this.healthTmpl,flexGrow:1}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.data=t.content_data.pools,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}editModeModal(){this.router.navigate(["/block/mirroring",{outlets:{modal:[D.MQ.EDIT,this.selection.first().name]}}])}editPeersModal(t){const o={poolName:this.selection.first().name,mode:t};"edit"===t&&(o.peerUUID=this.getPeerUUID()),this.modalRef=this.modalService.show($i,o)}deletePeersModal(){const t=this.selection.first().name,o=this.getPeerUUID();this.modalRef=this.modalService.show(pe.M,{itemDescription:"mirror peer",itemNames:[`${t} (${o})`],submitActionObservable:()=>new Ot.y(i=>{this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/mirroring/peer/delete",{pool_name:t}),call:this.rbdMirroringService.deletePeer(t,o)}).subscribe({error:_=>i.error(_),complete:()=>{this.rbdMirroringService.refresh(),i.complete()}})})})}getPeerUUID(){const t=this.selection.first(),o=this.data.find(i=>t&&t.name===i.name);if(o&&o.peer_uuids)return o.peer_uuids[0]}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(q),e.Y36(de.Z),e.Y36(m.P),e.Y36(g.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-pools"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Bi,7),e.Gf(Gi,7),e.Gf(yi,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.healthTmpl=i.first),e.iGM(i=e.CRH())&&(o.localTmpl=i.first),e.iGM(i=e.CRH())&&(o.remoteTmpl=i.first)}},decls:9,vars:7,consts:function(){let s,t,o,i;return s="Local image count",t="# Local",o="Remote image count",i="# Remote",[["columnMode","flex","identifier","name","forceIdentifier","true","selectionType","single",3,"data","columns","autoReload","status","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["healthTmpl",""],["localTmpl",""],["remoteTmpl",""],["name","modal"],[3,"ngClass"],["ngbTooltip",s],t,["ngbTooltip",o],i]},template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1),e.qZA(),e.YNc(2,xi,3,4,"ng-template",null,2,e.W1O),e.YNc(4,Zi,2,0,"ng-template",null,3,e.W1O),e.YNc(6,wi,2,0,"ng-template",null,4,e.W1O),e._UZ(8,"router-outlet",5)),2&t&&(e.Q6J("data",o.data)("columns",o.columns)("autoReload",-1)("status",o.tableStatus),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[W.a,Ee.K,c.mk,L._L,g.lC],pipes:[_t],styles:[""]}),n})();var ht=p(59376);const qi=["stateTmpl"],Ki=["syncTmpl"],Xi=["progressTmpl"];function Qi(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",13),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().refresh()}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_error.data)("columns",t.image_error.columns)("autoReload",-1)("status",t.tableStatus)}}function zi(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",13),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().refresh()}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_syncing.data)("columns",t.image_syncing.columns)("autoReload",-1)("status",t.tableStatus)}}function Ji(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",13),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().refresh()}),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.image_ready.data)("columns",t.image_ready.columns)("autoReload",-1)("status",t.tableStatus)}}function Yi(n,s){if(1&n&&(e.TgZ(0,"span",14),e.ALo(1,"mirrorHealthColor"),e._uU(2),e.qZA()),2&n){const o=s.value;e.Q6J("ngClass",e.lcZ(1,2,s.row.state_color)),e.xp6(2),e.Oqu(o)}}function Vi(n,s){1&n&&e._UZ(0,"div")}function Ui(n,s){if(1&n&&e._UZ(0,"ngb-progressbar",18),2&n){const t=e.oxw().value;e.Q6J("value",t)("showValue",!0)}}function ji(n,s){if(1&n&&(e.YNc(0,Vi,1,0,"div",15),e.TgZ(1,"div",16),e.YNc(2,Ui,1,2,"ngb-progressbar",17),e.qZA()),2&n){const t=s.row;e.Q6J("ngIf","Replaying"===t.state),e.xp6(2),e.Q6J("ngIf","Replaying"===t.state)}}let Wi=(()=>{class n{constructor(t){this.rbdMirroringService=t,this.image_error={data:[],columns:{}},this.image_syncing={data:[],columns:{}},this.image_ready={data:[],columns:{}},this.tableStatus=new se.E}ngOnInit(){this.image_error.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"description",name:"Issue",flexGrow:4}],this.image_syncing.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"syncing_percent",name:"Progress",cellTemplate:this.progressTmpl,flexGrow:2},{prop:"bytes_per_second",name:"Bytes per second",flexGrow:2},{prop:"entries_behind_primary",name:"Entries behind primary",flexGrow:2}],this.image_ready.columns=[{prop:"pool_name",name:"Pool",flexGrow:2},{prop:"name",name:"Image",flexGrow:2},{prop:"state",name:"State",cellTemplate:this.stateTmpl,flexGrow:1},{prop:"description",name:"Description",flexGrow:4}],this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.image_error.data=t.content_data.image_error,this.image_syncing.data=t.content_data.image_syncing,this.image_ready.data=t.content_data.image_ready,this.tableStatus=new se.E(t.status)})}ngOnDestroy(){this.subs.unsubscribe()}refresh(){this.rbdMirroringService.refresh()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(q))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring-images"]],viewQuery:function(t,o){if(1&t&&(e.Gf(qi,7),e.Gf(Ki,7),e.Gf(Xi,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.stateTmpl=i.first),e.iGM(i=e.CRH())&&(o.syncTmpl=i.first),e.iGM(i=e.CRH())&&(o.progressTmpl=i.first)}},decls:19,vars:4,consts:function(){let s,t,o;return s="Issues (" + "\ufffd0\ufffd" + ")",t="Syncing (" + "\ufffd0\ufffd" + ")",o="Ready (" + "\ufffd0\ufffd" + ")",[["ngbNav","","cdStatefulTab","image-list",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","issues"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","syncing"],t,["ngbNavItem","ready"],o,[3,"ngbNavOutlet"],["stateTmpl",""],["progressTmpl",""],["columnMode","flex",3,"data","columns","autoReload","status","fetchData"],[3,"ngClass"],[4,"ngIf"],[1,"w-100","h-100","d-flex","justify-content-center","align-items-center"],["type","info","class","w-100",3,"value","showValue",4,"ngIf"],["type","info",1,"w-100",3,"value","showValue"]]},template:function(t,o){if(1&t&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,Qi,1,4,"ng-template",5),e.BQk(),e.ynx(6,6),e.TgZ(7,"a",3),e.SDv(8,7),e.qZA(),e.YNc(9,zi,1,4,"ng-template",5),e.BQk(),e.ynx(10,8),e.TgZ(11,"a",3),e.SDv(12,9),e.qZA(),e.YNc(13,Ji,1,4,"ng-template",5),e.BQk(),e.qZA(),e._UZ(14,"div",10),e.YNc(15,Yi,3,4,"ng-template",null,11,e.W1O),e.YNc(17,ji,3,2,"ng-template",null,12,e.W1O)),2&t){const i=e.MAs(1);e.xp6(4),e.pQV(o.image_error.data.length),e.QtT(4),e.xp6(4),e.pQV(o.image_syncing.data.length),e.QtT(8),e.xp6(4),e.pQV(o.image_ready.data.length),e.QtT(12),e.xp6(2),e.Q6J("ngbNavOutlet",i)}},directives:[L.Pz,ht.m,L.nv,L.Vx,L.uN,W.a,L.tO,c.mk,c.O5,L.Ly],pipes:[_t],styles:[""]}),n})();function es(n,s){if(1&n&&e._UZ(0,"i",19),2&n){const t=e.oxw();e.Q6J("ngClass",t.icons.edit)}}function ts(n,s){if(1&n&&e._UZ(0,"i",19),2&n){const t=e.oxw();e.Q6J("ngClass",t.icons.check)}}let os=(()=>{class n{constructor(t,o,i,_){this.authStorageService=t,this.rbdMirroringService=o,this.modalService=i,this.taskWrapper=_,this.selection=new Re.r,this.peersExist=!0,this.subs=new _i.w,this.editing=!1,this.icons=T.P,this.permission=this.authStorageService.getPermissions().rbdMirroring;const r={permission:"update",icon:T.P.upload,click:()=>this.createBootstrapModal(),name:"Create Bootstrap Token",canBePrimary:()=>!0,disable:()=>!1},l={permission:"update",icon:T.P.download,click:()=>this.importBootstrapModal(),name:"Import Bootstrap Token",disable:()=>!1};this.tableActions=[r,l]}ngOnInit(){this.createForm(),this.subs.add(this.rbdMirroringService.startPolling()),this.subs.add(this.rbdMirroringService.subscribeSummary(t=>{this.status=t.content_data.status,this.peersExist=!!t.content_data.pools.find(o=>o.peer_uuids.length>0)})),this.rbdMirroringService.getSiteName().subscribe(t=>{this.siteName=t.site_name,this.rbdmirroringForm.get("siteName").setValue(this.siteName)})}createForm(){this.rbdmirroringForm=new Z.d({siteName:new a.NI({value:"",disabled:!0})})}ngOnDestroy(){this.subs.unsubscribe()}updateSiteName(){this.editing&&this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/mirroring/site_name/edit",{}),call:this.rbdMirroringService.setSiteName(this.rbdmirroringForm.getValue("siteName"))}).subscribe({complete:()=>{this.rbdMirroringService.refresh()}}),this.editing=!this.editing}createBootstrapModal(){this.modalRef=this.modalService.show(gi,{siteName:this.siteName})}importBootstrapModal(){this.modalRef=this.modalService.show(Mi,{siteName:this.siteName})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(q),e.Y36(de.Z),e.Y36(m.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mirroring"]],decls:31,vars:10,consts:function(){let s,t,o,i;return s="Site Name",t="Daemons",o="Pools",i="Images",[["name","rbdmirroringForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"row","mb-3"],[1,"col-md-auto"],["for","siteName",1,"col-form-label"],s,[1,"col-sm-4","d-flex"],["type","text","id","siteName","name","siteName","formControlName","siteName",1,"form-control"],["id","editSiteName",1,"btn","btn-light",3,"click"],[3,"ngClass",4,"ngIf"],[3,"source","byId"],[1,"col"],[1,"table-actions","float-end",3,"permission","selection","tableActions"],[1,"row"],[1,"col-sm-6"],t,o,[1,"col-md-12"],i,[3,"ngClass"]]},template:function(t,o){1&t&&(e.TgZ(0,"form",0,1)(2,"div",2)(3,"div",3)(4,"label",4),e.SDv(5,5),e.qZA()(),e.TgZ(6,"div",6),e._UZ(7,"input",7),e.TgZ(8,"button",8),e.NdJ("click",function(){return o.updateSiteName()}),e.YNc(9,es,1,1,"i",9),e.YNc(10,ts,1,1,"i",9),e.qZA(),e._UZ(11,"cd-copy-2-clipboard-button",10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"cd-table-actions",12),e.qZA()()(),e.TgZ(14,"div",13)(15,"div",14)(16,"legend"),e.SDv(17,15),e.qZA(),e.TgZ(18,"div"),e._UZ(19,"cd-mirroring-daemons"),e.qZA()(),e.TgZ(20,"div",14)(21,"legend"),e.SDv(22,16),e.qZA(),e.TgZ(23,"div"),e._UZ(24,"cd-mirroring-pools"),e.qZA()()(),e.TgZ(25,"div",13)(26,"div",17)(27,"legend"),e.SDv(28,18),e.qZA(),e.TgZ(29,"div"),e._UZ(30,"cd-mirroring-images"),e.qZA()()()),2&t&&(e.Q6J("formGroup",o.rbdmirroringForm),e.xp6(7),e.uIk("disabled",!o.editing||null),e.xp6(1),e.uIk("title",o.editing?"Save":"Edit"),e.xp6(1),e.Q6J("ngIf",!o.editing),e.xp6(1),e.Q6J("ngIf",o.editing),e.xp6(1),e.Q6J("source",o.siteName)("byId",!1),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[a._Y,a.JL,P.V,a.sg,$.o,a.Fj,K.b,a.JJ,a.u,c.O5,c.mk,Ye.s,Ee.K,Pi,ki,Wi],styles:[""]}),n})();class ns{}function is(n,s){if(1&n&&(e.TgZ(0,"option",16),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.id),e.xp6(1),e.Oqu(t.name)}}function ss(n,s){1&n&&(e.TgZ(0,"span",17),e.SDv(1,18),e.qZA())}let _s=(()=>{class n{constructor(t,o,i,_,r,l){this.activeModal=t,this.actionLabels=o,this.rbdMirroringService=i,this.taskWrapper=_,this.route=r,this.location=l,this.bsConfig={containerClass:"theme-default"},this.peerExists=!1,this.mirrorModes=[{id:"disabled",name:"Disabled"},{id:"pool",name:"Pool"},{id:"image",name:"Image"}],this.createForm()}createForm(){this.editModeForm=new Z.d({mirrorMode:new a.NI("",{validators:[a.kI.required,this.validateMode.bind(this)]})})}ngOnInit(){this.route.params.subscribe(t=>{this.poolName=t.pool_name}),this.pattern=`${this.poolName}`,this.rbdMirroringService.getPool(this.poolName).subscribe(t=>{this.setResponse(t)}),this.subs=this.rbdMirroringService.subscribeSummary(t=>{this.peerExists=!1;const i=t.content_data.pools.find(_=>this.poolName===_.name);this.peerExists=i&&i.peer_uuids.length})}ngOnDestroy(){this.subs.unsubscribe()}validateMode(t){return"disabled"===t.value&&this.peerExists?{cannotDisable:{value:t.value}}:null}setResponse(t){this.editModeForm.get("mirrorMode").setValue(t.mirror_mode)}update(){const t=new ns;t.mirror_mode=this.editModeForm.getValue("mirrorMode"),this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/mirroring/pool/edit",{pool_name:this.poolName}),call:this.rbdMirroringService.updatePool(this.poolName,t)}).subscribe({error:()=>this.editModeForm.setErrors({cdSubmitButton:!0}),complete:()=>{this.rbdMirroringService.refresh(),this.location.back()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(L.Kz),e.Y36(D.p4),e.Y36(q),e.Y36(m.P),e.Y36(g.gz),e.Y36(c.Ye))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-pool-edit-mode-modal"]],decls:21,vars:7,consts:function(){let s,t,o,i;return s="Edit pool mirror mode",t="To edit the mirror mode for pool\xA0 " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd0\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ", select a new mode from the list and click\xA0 " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Update" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ".",t=e.Zx4(t),o="Mode",i="Peer clusters must be removed prior to disabling mirror.",[["pageURL","mirroring",3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","editModeForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","mirrorMode",1,"col-form-label"],o,["id","mirrorMode","name","mirrorMode","formControlName","mirrorMode",1,"form-select"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[3,"value"],[1,"invalid-feedback"],i]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.ynx(8),e.tHW(9,7),e._UZ(10,"kbd")(11,"kbd"),e.N_p(),e.BQk(),e.qZA(),e.TgZ(12,"div",8)(13,"label",9)(14,"span"),e.SDv(15,10),e.qZA()(),e.TgZ(16,"select",11),e.YNc(17,is,2,2,"option",12),e.qZA(),e.YNc(18,ss,2,0,"span",13),e.qZA()(),e.TgZ(19,"div",14)(20,"cd-form-button-panel",15),e.NdJ("submitActionEvent",function(){return o.update()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.editModeForm),e.xp6(7),e.pQV(o.poolName),e.QtT(9),e.xp6(6),e.Q6J("ngForOf",o.mirrorModes),e.xp6(1),e.Q6J("ngIf",o.editModeForm.showError("mirrorMode",i,"cannotDisable")),e.xp6(2),e.Q6J("form",o.editModeForm)("submitText",o.actionLabels.UPDATE)}},directives:[f.z,a._Y,a.JL,P.V,a.sg,h.P,$.o,a.EJ,a.JJ,a.u,c.sg,a.YN,a.Kr,c.O5,j.p],styles:[""]}),n})();var At=p(7357),as=p(28049),rs=p(43190),Ve=p(80842),at=p(30633),$e=p(47557),ls=p(28211);class cs{}var Ie=(()=>{return(n=Ie||(Ie={}))[n.V1=1]="V1",n[n.V2=2]="V2",Ie;var n})();class ds{constructor(){this.features=[]}}class ps{constructor(){this.features=[]}}class ms extends class us{}{constructor(){super(...arguments),this.features=[]}}class rt{constructor(){this.features=[],this.remove_scheduling=!1}}var Ue=(()=>{return(n=Ue||(Ue={})).editing="editing",n.cloning="cloning",n.copying="copying",Ue;var n})(),Pt=p(18372),gs=p(17932),Ts=p(60950);function fs(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"label",58),e.SDv(2,59),e.ALo(3,"titlecase"),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",60)(6,"hr"),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(3),e.pQV(e.lcZ(3,1,t.action)),e.QtT(2)}}function Cs(n,s){1&n&&(e.TgZ(0,"span",61),e.ynx(1),e.SDv(2,62),e.BQk(),e.qZA())}function Ss(n,s){1&n&&(e.TgZ(0,"span",61),e.ynx(1),e.SDv(2,63),e.BQk(),e.qZA())}function Rs(n,s){1&n&&e._UZ(0,"input",64)}function Es(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,67),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ms(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,68),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Os(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,69),e.qZA()),2&n&&e.Q6J("ngValue",null)}function hs(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function As(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"select",65),e.NdJ("change",function(){return e.CHM(t),e.oxw(2).setPoolMirrorMode()}),e.YNc(1,Es,2,1,"option",66),e.YNc(2,Ms,2,1,"option",66),e.YNc(3,Os,2,1,"option",66),e.YNc(4,hs,2,2,"option",46),e.qZA()}if(2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.pools)}}function Ps(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,71),e.qZA())}const Is=function(n,s){return[n,s]};function bs(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"div",20),e._UZ(2,"i",72),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(2),e.Q6J("ngClass",e.WLB(1,Is,t.icons.spinner,t.icons.spin))}}function Ns(n,s){1&n&&e._UZ(0,"input",76)}function Fs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,78),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ds(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,79),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ls(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,80),e.qZA()),2&n&&e.Q6J("ngValue",null)}function vs(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function $s(n,s){if(1&n&&(e.TgZ(0,"select",77),e.YNc(1,Fs,2,1,"option",66),e.YNc(2,Ds,2,1,"option",66),e.YNc(3,Ls,2,1,"option",66),e.YNc(4,vs,2,2,"option",46),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.namespaces)}}function Bs(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"label",73),e._uU(2," Namespace "),e.qZA(),e.TgZ(3,"div",12),e.YNc(4,Ns,1,0,"input",74),e.YNc(5,$s,5,4,"select",75),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngIf","editing"===t.mode||!t.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==t.mode&&t.poolPermission.read)}}function Gs(n,s){1&n&&(e.TgZ(0,"cd-helper")(1,"span"),e.SDv(2,81),e.qZA()())}function ys(n,s){1&n&&e._UZ(0,"input",87)}function xs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,89),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Zs(n,s){1&n&&(e.TgZ(0,"option",50),e.SDv(1,90),e.qZA()),2&n&&e.Q6J("ngValue",null)}function ws(n,s){1&n&&(e.TgZ(0,"option",50),e._uU(1,"-- Select a data pool -- "),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Hs(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function ks(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"select",88),e.NdJ("change",function(i){return e.CHM(t),e.oxw(3).onDataPoolChange(i.target.value)}),e.YNc(1,xs,2,1,"option",66),e.YNc(2,Zs,2,1,"option",66),e.YNc(3,ws,2,1,"option",66),e.YNc(4,Hs,2,2,"option",46),e.qZA()}if(2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngIf",null===t.dataPools),e.xp6(1),e.Q6J("ngIf",null!==t.dataPools&&0===t.dataPools.length),e.xp6(1),e.Q6J("ngIf",null!==t.dataPools&&t.dataPools.length>0),e.xp6(1),e.Q6J("ngForOf",t.dataPools)}}function qs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,91),e.qZA())}const je=function(n){return{required:n}};function Ks(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"label",82)(2,"span",72),e.SDv(3,83),e.qZA(),e._UZ(4,"cd-helper",84),e.qZA(),e.TgZ(5,"div",12),e.YNc(6,ys,1,0,"input",85),e.YNc(7,ks,5,4,"select",86),e.YNc(8,qs,2,0,"span",14),e.qZA()()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(4,je,"editing"!==o.mode)),e.xp6(4),e.Q6J("ngIf","editing"===o.mode||!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("dataPool",t,"required"))}}function Xs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,92),e.qZA())}function Qs(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,93),e.qZA())}function zs(n,s){if(1&n&&e._UZ(0,"cd-helper",97),2&n){const t=e.oxw().$implicit;e.s9C("html",t.helperHtml)}}function Js(n,s){if(1&n&&(e.TgZ(0,"div",21),e._UZ(1,"input",94),e.TgZ(2,"label",95),e._uU(3),e.qZA(),e.YNc(4,zs,1,1,"cd-helper",96),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.key),e.s9C("name",t.key),e.s9C("formControlName",t.key),e.xp6(1),e.s9C("for",t.key),e.xp6(1),e.Oqu(t.desc),e.xp6(1),e.Q6J("ngIf",t.helperHtml)}}const It=function(n){return["edit",n]},bt=function(n){return{modal:n}},Nt=function(n){return{outlets:n}},Ft=function(n){return["/block/mirroring",n]};function Ys(n,s){if(1&n&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,98),e._UZ(3,"b")(4,"a",99),e.N_p(),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("routerLink",e.VKq(7,Ft,e.VKq(5,Nt,e.VKq(3,bt,e.VKq(1,It,t.currentPoolName)))))}}function Vs(n,s){if(1&n&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,104),e._UZ(3,"b")(4,"a",99),e.N_p(),e.qZA()()),2&n){const t=e.oxw(4);e.xp6(4),e.Q6J("routerLink",e.VKq(7,Ft,e.VKq(5,Nt,e.VKq(3,bt,e.VKq(1,It,t.currentPoolName)))))}}function Us(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",101)(1,"input",102),e.NdJ("change",function(){return e.CHM(t),e.oxw(3).setExclusiveLock()}),e.qZA(),e.TgZ(2,"label",103),e._uU(3),e.ALo(4,"titlecase"),e.qZA(),e.YNc(5,Vs,5,9,"cd-helper",25),e.qZA()}if(2&n){const t=s.$implicit,o=e.oxw(3);e.xp6(1),e.Q6J("id",t)("value",t),e.uIk("disabled","pool"===o.poolMirrorMode&&"snapshot"===t||null),e.xp6(1),e.Q6J("for",t),e.xp6(1),e.Oqu(e.lcZ(4,6,t)),e.xp6(2),e.Q6J("ngIf","pool"===o.poolMirrorMode&&"snapshot"===t)}}function js(n,s){if(1&n&&(e.TgZ(0,"div"),e.YNc(1,Us,6,8,"div",100),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngForOf",t.mirroringOptions)}}function Ws(n,s){if(1&n&&(e.TgZ(0,"div",9)(1,"label",105),e.tHW(2,106),e._UZ(3,"cd-helper",107),e.N_p(),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",108),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(5),e.uIk("disabled",!1===t.peerConfigured||null)}}function e_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"a",109),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).advancedEnabled=!0,!1}),e.SDv(1,110),e.qZA()}}function t_(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function o_(n,s){if(1&n&&(e.TgZ(0,"option",70),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function n_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,111),e.qZA())}function i_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,112),e.qZA())}function s_(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,113),e.qZA())}function __(n,s){1&n&&(e.TgZ(0,"span",61),e.SDv(1,114),e.qZA())}function a_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.YNc(9,fs,7,3,"div",8),e.TgZ(10,"div",9)(11,"label",10),e.SDv(12,11),e.qZA(),e.TgZ(13,"div",12),e._UZ(14,"input",13),e.YNc(15,Cs,3,0,"span",14),e.YNc(16,Ss,3,0,"span",14),e.qZA()(),e.TgZ(17,"div",15),e.NdJ("change",function(i){return e.CHM(t),e.oxw().onPoolChange(i.target.value)}),e.TgZ(18,"label",16),e.SDv(19,17),e.qZA(),e.TgZ(20,"div",12),e.YNc(21,Rs,1,0,"input",18),e.YNc(22,As,5,4,"select",19),e.YNc(23,Ps,2,0,"span",14),e.qZA()(),e.YNc(24,bs,3,4,"div",8),e.YNc(25,Bs,6,2,"div",8),e.TgZ(26,"div",9)(27,"div",20)(28,"div",21)(29,"input",22),e.NdJ("change",function(){return e.CHM(t),e.oxw().onUseDataPoolChange()}),e.qZA(),e.TgZ(30,"label",23),e.SDv(31,24),e.qZA(),e.YNc(32,Gs,3,0,"cd-helper",25),e.qZA()()(),e.YNc(33,Ks,9,6,"div",8),e.TgZ(34,"div",9)(35,"label",26),e.SDv(36,27),e.qZA(),e.TgZ(37,"div",12),e._UZ(38,"input",28),e.YNc(39,Xs,2,0,"span",14),e.YNc(40,Qs,2,0,"span",14),e.qZA()(),e.TgZ(41,"div",29)(42,"label",30),e.SDv(43,31),e.qZA(),e.TgZ(44,"div",12),e.YNc(45,Js,5,6,"div",32),e.qZA()(),e.TgZ(46,"div",9)(47,"div",20)(48,"div",21)(49,"input",33),e.NdJ("change",function(){return e.CHM(t),e.oxw().setMirrorMode()}),e.qZA(),e.TgZ(50,"label",34),e._uU(51,"Mirroring"),e.qZA(),e.YNc(52,Ys,5,9,"cd-helper",25),e.qZA(),e.YNc(53,js,2,1,"div",25),e.qZA()(),e.YNc(54,Ws,6,1,"div",8),e.TgZ(55,"div",35)(56,"div",36),e.YNc(57,e_,2,0,"a",37),e.qZA()(),e.TgZ(58,"div",38)(59,"legend",39),e.SDv(60,40),e.qZA(),e.TgZ(61,"div",41)(62,"h4",39),e.SDv(63,42),e.qZA(),e.TgZ(64,"div",9)(65,"label",43),e.tHW(66,44),e._UZ(67,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(68,"div",12)(69,"select",45),e.YNc(70,t_,2,2,"option",46),e.qZA()()(),e.TgZ(71,"div",9)(72,"label",47),e.tHW(73,48),e._UZ(74,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(75,"div",12)(76,"select",49)(77,"option",50),e.SDv(78,51),e.qZA(),e.YNc(79,o_,2,2,"option",46),e.qZA(),e.YNc(80,n_,2,0,"span",14),e.YNc(81,i_,2,0,"span",14),e.qZA()(),e.TgZ(82,"div",9)(83,"label",52),e.tHW(84,53),e._UZ(85,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(86,"div",12),e._UZ(87,"input",54),e.YNc(88,s_,2,0,"span",14),e.YNc(89,__,2,0,"span",14),e.qZA()()(),e.TgZ(90,"cd-rbd-configuration-form",55),e.NdJ("changes",function(i){return e.CHM(t),e.oxw().getDirtyConfigurationValues=i}),e.qZA()()(),e.TgZ(91,"div",56)(92,"cd-form-button-panel",57),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw().submit()}),e.ALo(93,"titlecase"),e.ALo(94,"upperFirst"),e.qZA()()()()()}if(2&n){const t=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.rbdForm),e.xp6(6),e.pQV(e.lcZ(6,35,o.action))(e.lcZ(7,37,o.resource)),e.QtT(5),e.xp6(2),e.Q6J("ngIf",o.rbdForm.getValue("parent")),e.xp6(6),e.Q6J("ngIf",o.rbdForm.showError("name",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("name",t,"pattern")),e.xp6(2),e.Q6J("ngClass",e.VKq(43,je,"editing"!==o.mode)),e.xp6(3),e.Q6J("ngIf","editing"===o.mode||!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("pool",t,"required")),e.xp6(1),e.Q6J("ngIf","editing"!==o.mode&&o.rbdForm.getValue("pool")&&null===o.namespaces),e.xp6(1),e.Q6J("ngIf","editing"===o.mode&&o.rbdForm.getValue("namespace")||"editing"!==o.mode&&(o.namespaces&&o.namespaces.length>0||!o.poolPermission.read)),e.xp6(7),e.Q6J("ngIf",o.allDataPools.length<=1),e.xp6(1),e.Q6J("ngIf",o.rbdForm.getValue("useDataPool")),e.xp6(6),e.Q6J("ngIf",o.rbdForm.showError("size",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("size",t,"invalidSizeObject")),e.xp6(5),e.Q6J("ngForOf",o.featuresList),e.xp6(7),e.Q6J("ngIf",!1===o.mirroring&&o.currentPoolName),e.xp6(1),e.Q6J("ngIf",o.mirroring),e.xp6(1),e.Q6J("ngIf","snapshot"===o.rbdForm.getValue("mirroringMode")&&o.mirroring),e.xp6(3),e.Q6J("ngIf",!o.advancedEnabled),e.xp6(1),e.Q6J("hidden",!o.advancedEnabled),e.xp6(12),e.Q6J("ngForOf",o.objectSizes),e.xp6(2),e.Q6J("ngClass",e.VKq(45,je,o.rbdForm.getValue("stripingCount"))),e.xp6(5),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.objectSizes),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingUnit",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingUnit",t,"invalidStripingUnit")),e.xp6(2),e.Q6J("ngClass",e.VKq(47,je,o.rbdForm.getValue("stripingUnit"))),e.xp6(5),e.Q6J("ngIf",o.rbdForm.showError("stripingCount",t,"required")),e.xp6(1),e.Q6J("ngIf",o.rbdForm.showError("stripingCount",t,"min")),e.xp6(1),e.Q6J("form",o.rbdForm)("initializeData",o.initializeConfigData),e.xp6(2),e.Q6J("form",t)("submitText",e.lcZ(93,39,o.action)+" "+e.lcZ(94,41,o.resource))}}let Be=(()=>{class n extends k.E{constructor(t,o,i,_,r,l,d,u,S,E){super(),this.authStorageService=t,this.route=o,this.poolService=i,this.rbdService=_,this.formatter=r,this.taskWrapper=l,this.dimlessBinaryPipe=d,this.actionLabels=u,this.router=S,this.rbdMirroringService=E,this.namespaces=[],this.namespacesByPoolCache={},this.pools=null,this.allPools=null,this.dataPools=null,this.allDataPools=[],this.featuresList=[],this.initializeConfigData=new At.t(1),this.peerConfigured=!1,this.advancedEnabled=!1,this.rbdFormMode=Ue,this.defaultObjectSize="4 MiB",this.mirroringOptions=["journal","snapshot"],this.mirroring=!1,this.currentPoolName="",this.objectSizes=["4 KiB","8 KiB","16 KiB","32 KiB","64 KiB","128 KiB","256 KiB","512 KiB","1 MiB","2 MiB","4 MiB","8 MiB","16 MiB","32 MiB"],this.defaultStripingUnit="4 MiB",this.defaultStripingCount=1,this.rbdImage=new At.t(1),this.icons=T.P,this.routerUrl=this.router.url,this.poolPermission=this.authStorageService.getPermissions().pool,this.resource="RBD",this.features={"deep-flatten":{desc:"Deep flatten",requires:null,allowEnable:!1,allowDisable:!0},layering:{desc:"Layering",requires:null,allowEnable:!1,allowDisable:!1},"exclusive-lock":{desc:"Exclusive lock",requires:null,allowEnable:!0,allowDisable:!0},"object-map":{desc:"Object map (requires exclusive-lock)",requires:"exclusive-lock",allowEnable:!0,allowDisable:!0,initDisabled:!0},"fast-diff":{desc:"Fast diff (interlocked with object-map)",requires:"object-map",allowEnable:!0,allowDisable:!0,interlockedWith:"object-map",initDisabled:!0}},this.featuresList=this.objToArray(this.features),this.createForm()}objToArray(t){return C().map(t,(o,i)=>Object.assign(o,{key:i}))}createForm(){this.rbdForm=new Z.d({parent:new a.NI(""),name:new a.NI("",{validators:[a.kI.required,a.kI.pattern(/^[^@/]+?$/)]}),pool:new a.NI(null,{validators:[a.kI.required]}),namespace:new a.NI(null),useDataPool:new a.NI(!1),dataPool:new a.NI(null),size:new a.NI(null,{updateOn:"blur"}),obj_size:new a.NI(this.defaultObjectSize),features:new Z.d(this.featuresList.reduce((t,o)=>(t[o.key]=new a.NI({value:!1,disabled:!!o.initDisabled}),t),{})),mirroring:new a.NI(""),schedule:new a.NI("",{validators:[a.kI.pattern(/^([0-9]+)d|([0-9]+)h|([0-9]+)m$/)]}),mirroringMode:new a.NI(""),stripingUnit:new a.NI(this.defaultStripingUnit),stripingCount:new a.NI(this.defaultStripingCount,{updateOn:"blur"})},this.validateRbdForm(this.formatter))}disableForEdit(){this.rbdForm.get("parent").disable(),this.rbdForm.get("pool").disable(),this.rbdForm.get("namespace").disable(),this.rbdForm.get("useDataPool").disable(),this.rbdForm.get("dataPool").disable(),this.rbdForm.get("obj_size").disable(),this.rbdForm.get("stripingUnit").disable(),this.rbdForm.get("stripingCount").disable(),this.rbdImage.subscribe(t=>{t.image_format===Ie.V1&&(this.rbdForm.get("deep-flatten").disable(),this.rbdForm.get("layering").disable(),this.rbdForm.get("exclusive-lock").disable())})}disableForClone(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}disableForCopy(){this.rbdForm.get("parent").disable(),this.rbdForm.get("size").disable()}ngOnInit(){this.prepareFormForAction(),this.gatherNeededData().subscribe(this.handleExternalData.bind(this))}setExclusiveLock(){this.mirroring&&"journal"===this.rbdForm.get("mirroringMode").value?(this.rbdForm.get("exclusive-lock").setValue(!0),this.rbdForm.get("exclusive-lock").disable()):(this.rbdForm.get("exclusive-lock").enable(),"pool"===this.poolMirrorMode&&this.rbdForm.get("mirroringMode").setValue(this.mirroringOptions[0]))}setMirrorMode(){this.mirroring=!this.mirroring,this.setExclusiveLock(),this.checkPeersConfigured()}checkPeersConfigured(t){var o=t||this.rbdForm.get("pool").value;this.rbdMirroringService.getPeerForPool(o).subscribe(i=>{i.length>0&&(this.peerConfigured=!0)})}setPoolMirrorMode(){var t;this.currentPoolName=this.mode===this.rbdFormMode.editing?null===(t=this.response)||void 0===t?void 0:t.pool_name:this.rbdForm.getValue("pool"),this.currentPoolName&&(this.rbdMirroringService.refresh(),this.rbdMirroringService.subscribeSummary(o=>{const i=o.content_data.pools.find(_=>_.name===this.currentPoolName);this.poolMirrorMode=i.mirror_mode,"disabled"===i.mirror_mode&&(this.mirroring=!1,this.rbdForm.get("mirroring").setValue(this.mirroring),this.rbdForm.get("mirroring").disable())})),this.setExclusiveLock()}prepareFormForAction(){const t=this.routerUrl;t.startsWith("/block/rbd/edit")?(this.mode=this.rbdFormMode.editing,this.action=this.actionLabels.EDIT,this.disableForEdit()):t.startsWith("/block/rbd/clone")?(this.mode=this.rbdFormMode.cloning,this.disableForClone(),this.action=this.actionLabels.CLONE):t.startsWith("/block/rbd/copy")?(this.mode=this.rbdFormMode.copying,this.action=this.actionLabels.COPY,this.disableForCopy()):this.action=this.actionLabels.CREATE,C().each(this.features,o=>{this.rbdForm.get("features").get(o.key).valueChanges.subscribe(i=>this.featureFormUpdate(o.key,i))})}gatherNeededData(){const t={};return this.mode?this.route.params.subscribe(o=>{const i=v.N.fromString(decodeURIComponent(o.image_spec));o.snap&&(this.snapName=decodeURIComponent(o.snap)),t.rbd=this.rbdService.get(i),this.checkPeersConfigured(i.poolName)}):t.defaultFeatures=this.rbdService.defaultFeatures(),this.mode!==this.rbdFormMode.editing&&this.poolPermission.read&&(t.pools=this.poolService.list(["pool_name","type","flags_names","application_metadata"])),(0,le.D)(t)}handleExternalData(t){if(this.handlePoolData(t.pools),this.setPoolMirrorMode(),t.defaultFeatures&&this.setFeatures(t.defaultFeatures),t.rbd){const o=t.rbd;this.setResponse(o,this.snapName),this.rbdImage.next(o)}this.loadingReady()}handlePoolData(t){if(!t)return;const o=[],i=[];for(const _ of t)this.rbdService.isRBDPool(_)&&("replicated"===_.type?(o.push(_),i.push(_)):"erasure"===_.type&&-1!==_.flags_names.indexOf("ec_overwrites")&&i.push(_));if(this.pools=o,this.allPools=o,this.dataPools=i,this.allDataPools=i,1===this.pools.length){const _=this.pools[0].pool_name;this.rbdForm.get("pool").setValue(_),this.onPoolChange(_)}this.allDataPools.length<=1&&this.rbdForm.get("useDataPool").disable()}onPoolChange(t){const o=this.rbdForm.get("dataPool");o.value===t&&o.setValue(null),this.dataPools=this.allDataPools?this.allDataPools.filter(i=>i.pool_name!==t):[],this.namespaces=null,t in this.namespacesByPoolCache?this.namespaces=this.namespacesByPoolCache[t]:this.rbdService.listNamespaces(t).subscribe(i=>{i=i.map(_=>_.namespace),this.namespacesByPoolCache[t]=i,this.namespaces=i}),this.rbdForm.get("namespace").setValue(null)}onUseDataPoolChange(){this.rbdForm.getValue("useDataPool")||(this.rbdForm.get("dataPool").setValue(null),this.onDataPoolChange(null))}onDataPoolChange(t){const o=this.allPools.filter(i=>i.pool_name!==t);this.rbdForm.getValue("pool")===t&&this.rbdForm.get("pool").setValue(null),this.pools=o}validateRbdForm(t){return o=>{const i=o.get("useDataPool"),_=o.get("dataPool");let r=null;i.value&&null==_.value&&(r={required:!0}),_.setErrors(r);const l=o.get("size"),d=o.get("obj_size"),u=t.toBytes(null!=d.value?d.value:this.defaultObjectSize),S=o.get("stripingCount"),E=null!=S.value?S.value:this.defaultStripingCount;let I=null;null===l.value?I={required:!0}:E*u>t.toBytes(l.value)&&(I={invalidSizeObject:!0}),l.setErrors(I);const B=o.get("stripingUnit");let y=null;null===B.value&&null!==S.value?y={required:!0}:null!==B.value&&t.toBytes(B.value)>u&&(y={invalidStripingUnit:!0}),B.setErrors(y);let Q=null;return null===S.value&&null!==B.value?Q={required:!0}:E<1&&(Q={min:!0}),S.setErrors(Q),null}}deepBoxCheck(t,o){this.getDependentChildFeatures(t).forEach(_=>{const r=this.rbdForm.get(_.key);o?r.enable({emitEvent:!1}):(r.disable({emitEvent:!1}),r.setValue(!1,{emitEvent:!1}),this.deepBoxCheck(_.key,o));const l=this.rbdForm.get("features");this.mode===this.rbdFormMode.editing&&l.get(_.key).enabled&&(-1!==this.response.features_name.indexOf(_.key)&&!_.allowDisable||-1===this.response.features_name.indexOf(_.key)&&!_.allowEnable)&&l.get(_.key).disable()})}getDependentChildFeatures(t){return C().filter(this.features,o=>o.requires===t)||[]}interlockCheck(t,o){const i=this.featuresList.find(_=>_.key===t);if(this.response){const _=null!=i.interlockedWith,r=this.featuresList.find(d=>d.interlockedWith===i.key),l=!!this.response.features_name.find(d=>d===i.key);if(_){if(l!==!!this.response.features_name.find(u=>u===i.interlockedWith))return}else if(r&&!!this.response.features_name.find(u=>u===r.key)!==l)return}o?C().filter(this.features,_=>_.interlockedWith===t).forEach(_=>this.rbdForm.get(_.key).setValue(!0,{emitEvent:!1})):i.interlockedWith&&this.rbdForm.get("features").get(i.interlockedWith).setValue(!1)}featureFormUpdate(t,o){if(o){const i=this.features[t].requires;if(i&&!this.rbdForm.getValue(i))return void this.rbdForm.get(`features.${t}`).setValue(!1)}this.deepBoxCheck(t,o),this.interlockCheck(t,o)}setFeatures(t){const o=this.rbdForm.get("features");C().forIn(this.features,i=>{-1!==t.indexOf(i.key)&&o.get(i.key).setValue(!0),this.featureFormUpdate(i.key,o.get(i.key).value)})}setResponse(t,o){this.response=t;const i=new v.N(t.pool_name,t.namespace,t.name).toString();if(this.mode===this.rbdFormMode.cloning)this.rbdForm.get("parent").setValue(`${i}@${o}`);else if(this.mode===this.rbdFormMode.copying)o?this.rbdForm.get("parent").setValue(`${i}@${o}`):this.rbdForm.get("parent").setValue(`${i}`);else if(t.parent){const _=t.parent;this.rbdForm.get("parent").setValue(`${_.pool_name}/${_.image_name}@${_.snap_name}`)}this.mode===this.rbdFormMode.editing&&(this.rbdForm.get("name").setValue(t.name),"snapshot"===(null==t?void 0:t.mirror_mode)||t.features_name.includes("journaling")?(this.mirroring=!0,this.rbdForm.get("mirroring").setValue(this.mirroring),this.rbdForm.get("mirroringMode").setValue(null==t?void 0:t.mirror_mode),this.rbdForm.get("schedule").setValue(null==t?void 0:t.schedule_interval)):(this.mirroring=!1,this.rbdForm.get("mirroring").setValue(this.mirroring)),this.setPoolMirrorMode()),this.rbdForm.get("pool").setValue(t.pool_name),this.onPoolChange(t.pool_name),this.rbdForm.get("namespace").setValue(t.namespace),t.data_pool&&(this.rbdForm.get("useDataPool").setValue(!0),this.rbdForm.get("dataPool").setValue(t.data_pool)),this.rbdForm.get("size").setValue(this.dimlessBinaryPipe.transform(t.size)),this.rbdForm.get("obj_size").setValue(this.dimlessBinaryPipe.transform(t.obj_size)),this.setFeatures(t.features_name),this.rbdForm.get("stripingUnit").setValue(this.dimlessBinaryPipe.transform(t.stripe_unit)),this.rbdForm.get("stripingCount").setValue(t.stripe_count),this.initializeConfigData.next({initialData:this.response.configuration,sourceType:at.h.image})}createRequest(){const t=new ms;return t.pool_name=this.rbdForm.getValue("pool"),t.namespace=this.rbdForm.getValue("namespace"),t.name=this.rbdForm.getValue("name"),t.schedule_interval=this.rbdForm.getValue("schedule"),t.size=this.formatter.toBytes(this.rbdForm.getValue("size")),"image"===this.poolMirrorMode&&(t.mirror_mode=this.rbdForm.getValue("mirroringMode")),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(),t}addObjectSizeAndStripingToRequest(t){t.obj_size=this.formatter.toBytes(this.rbdForm.getValue("obj_size")),C().forIn(this.features,o=>{this.rbdForm.getValue(o.key)&&t.features.push(o.key)}),this.mirroring&&"journal"===this.rbdForm.getValue("mirroringMode")&&t.features.push("journaling"),t.stripe_unit=this.formatter.toBytes(this.rbdForm.getValue("stripingUnit")),t.stripe_count=this.rbdForm.getValue("stripingCount"),t.data_pool=this.rbdForm.getValue("dataPool")}createAction(){const t=this.createRequest();return this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/create",{pool_name:t.pool_name,namespace:t.namespace,image_name:t.name,schedule_interval:t.schedule_interval,start_time:t.start_time}),call:this.rbdService.create(t)})}editRequest(){const t=new rt;if(t.name=this.rbdForm.getValue("name"),t.schedule_interval=this.rbdForm.getValue("schedule"),t.name=this.rbdForm.getValue("name"),t.size=this.formatter.toBytes(this.rbdForm.getValue("size")),C().forIn(this.features,o=>{this.rbdForm.getValue(o.key)&&t.features.push(o.key)}),t.enable_mirror=this.rbdForm.getValue("mirroring"),t.enable_mirror)"journal"===this.rbdForm.getValue("mirroringMode")&&t.features.push("journaling"),"image"===this.poolMirrorMode&&(t.mirror_mode=this.rbdForm.getValue("mirroringMode"));else{const o=t.features.indexOf("journaling",0);o>-1&&t.features.splice(o,1)}return t.configuration=this.getDirtyConfigurationValues(),t}cloneRequest(){const t=new ds;return t.child_pool_name=this.rbdForm.getValue("pool"),t.child_namespace=this.rbdForm.getValue("namespace"),t.child_image_name=this.rbdForm.getValue("name"),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(!0,at.h.image),t}editAction(){const t=new v.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/edit",{image_spec:t.toString()}),call:this.rbdService.update(t,this.editRequest())})}cloneAction(){const t=this.cloneRequest(),o=new v.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/clone",{parent_image_spec:o.toString(),parent_snap_name:this.snapName,child_pool_name:t.child_pool_name,child_namespace:t.child_namespace,child_image_name:t.child_image_name}),call:this.rbdService.cloneSnapshot(o,this.snapName,t)})}copyRequest(){const t=new ps;return this.snapName&&(t.snapshot_name=this.snapName),t.dest_pool_name=this.rbdForm.getValue("pool"),t.dest_namespace=this.rbdForm.getValue("namespace"),t.dest_image_name=this.rbdForm.getValue("name"),this.addObjectSizeAndStripingToRequest(t),t.configuration=this.getDirtyConfigurationValues(!0,at.h.image),t}copyAction(){const t=this.copyRequest(),o=new v.N(this.response.pool_name,this.response.namespace,this.response.name);return this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/copy",{src_image_spec:o.toString(),dest_pool_name:t.dest_pool_name,dest_namespace:t.dest_namespace,dest_image_name:t.dest_image_name}),call:this.rbdService.copy(o,t)})}submit(){this.mode||this.rbdImage.next("create"),this.rbdImage.pipe((0,as.P)(),(0,rs.w)(()=>this.mode===this.rbdFormMode.editing?this.editAction():this.mode===this.rbdFormMode.cloning?this.cloneAction():this.mode===this.rbdFormMode.copying?this.copyAction():this.createAction())).subscribe(()=>{},()=>this.rbdForm.setErrors({cdSubmitButton:!0}),()=>this.router.navigate(["/block/rbd"]))}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(g.gz),e.Y36(Ve.q),e.Y36(H),e.Y36(ls.H),e.Y36(m.P),e.Y36($e.$),e.Y36(D.p4),e.Y36(g.F0),e.Y36(q))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,i,_,r,l,d,u,S,E,I,B,y,Q,J,ee,te,w,_e,ae,O,ue,me,ge,Te,fe,Ce,Se,G,ye,xe,Ze,we,He,ke,qe,Ke,Xe,Qe,ze;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Name",o="Pool",i="Use a dedicated data pool",_="Size",r="e.g., 10GiB",l="Features",d="Advanced",u="Striping",S="Object size" + "\ufffd#67\ufffd" + "Objects in the Ceph Storage Cluster have a maximum configurable size (e.g., 2MB, 4MB, etc.). The object size should be large enough to accommodate many stripe units, and should be a multiple of the stripe unit." + "\ufffd/#67\ufffd" + "",E="Stripe unit" + "\ufffd#74\ufffd" + "Stripes have a configurable unit size (e.g., 64kb). The Ceph Client divides the data it will write to objects into equally sized stripe units, except for the last stripe unit. A stripe width, should be a fraction of the Object Size so that an object may contain many stripe units." + "\ufffd/#74\ufffd" + "",I="-- Select stripe unit --",B="Stripe count" + "\ufffd#85\ufffd" + "The Ceph Client writes a sequence of stripe units over a series of objects determined by the stripe count. The series of objects is called an object set. After the Ceph Client writes to the last object in the object set, it returns to the first object in the object set." + "\ufffd/#85\ufffd" + "",y="" + "\ufffd0\ufffd" + " from",Q="This field is required.",J="'/' and '@' are not allowed.",ee="Loading...",te="-- No rbd pools available --",w="-- Select a pool --",_e="This field is required.",ae="Loading...",O="-- No namespaces available --",ue="-- Select a namespace --",me="You need more than one pool with the rbd application label use to use a dedicated data pool.",ge="Data pool",Te="Dedicated pool that stores the object-data of the RBD.",fe="Loading...",Ce="-- No data pools available --",Se="This field is required.",G="This field is required.",ye="You have to increase the size.",xe="You need to enable a " + "\ufffd#3\ufffd" + "mirror mode" + "\ufffd/#3\ufffd" + " in the selected pool. Please " + "\ufffd#4\ufffd" + "click here to select a mode and enable it in this pool." + "\ufffd/#4\ufffd" + "",Ze="You need to enable " + "\ufffd#3\ufffd" + "image mirror mode" + "\ufffd/#3\ufffd" + " in the selected pool. Please " + "\ufffd#4\ufffd" + "click here to select a mode and enable it in this pool." + "\ufffd/#4\ufffd" + "",we="Create Mirror-Snapshots automatically on a periodic basis. The interval can be specified in days, hours, or minutes using d, h, m suffix respectively. To create mirror snapshots, you must import or create and have available peers to mirror",He="Schedule Interval " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + "",ke="e.g., 12h or 1d or 10m",qe="Advanced...",Ke="This field is required because stripe count is defined!",Xe="Stripe unit is greater than object size.",Qe="This field is required because stripe unit is defined!",ze="Stripe count must be greater than 0.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","rbdForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],["class","form-group row",4,"ngIf"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["type","text","placeholder","Name...","id","name","name","name","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"form-group","row",3,"change"],["for","pool",1,"cd-col-form-label",3,"ngClass"],o,["class","form-control","type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",4,"ngIf"],["id","pool","name","pool","class","form-select","formControlName","pool",3,"change",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","useDataPool","name","useDataPool","formControlName","useDataPool",1,"custom-control-input",3,"change"],["for","useDataPool",1,"custom-control-label"],i,[4,"ngIf"],["for","size",1,"cd-col-form-label","required"],_,["id","size","name","size","type","text","formControlName","size","placeholder",r,"defaultUnit","GiB","cdDimlessBinary","",1,"form-control"],["formGroupName","features",1,"form-group","row"],["for","features",1,"cd-col-form-label"],l,["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],["type","checkbox","id","mirroring","name","mirroring","formControlName","mirroring",1,"custom-control-input",3,"change"],["for","mirroring",1,"custom-control-label"],[1,"row"],[1,"col-sm-12"],["class","float-end margin-right-md","href","",3,"click",4,"ngIf"],[3,"hidden"],[1,"cd-header"],d,[1,"col-md-12"],u,["for","size",1,"cd-col-form-label"],S,["id","obj_size","name","obj_size","formControlName","obj_size",1,"form-select"],[3,"value",4,"ngFor","ngForOf"],["for","stripingUnit",1,"cd-col-form-label",3,"ngClass"],E,["id","stripingUnit","name","stripingUnit","formControlName","stripingUnit",1,"form-select"],[3,"ngValue"],I,["for","stripingCount",1,"cd-col-form-label",3,"ngClass"],B,["id","stripingCount","name","stripingCount","formControlName","stripingCount","type","number",1,"form-control"],[3,"form","initializeData","changes"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["for","name",1,"cd-col-form-label"],y,["type","text","id","parent","name","parent","formControlName","parent",1,"form-control"],[1,"invalid-feedback"],Q,J,["type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",1,"form-control"],["id","pool","name","pool","formControlName","pool",1,"form-select",3,"change"],[3,"ngValue",4,"ngIf"],ee,te,w,[3,"value"],_e,[3,"ngClass"],["for","pool",1,"cd-col-form-label"],["class","form-control","type","text","placeholder","Namespace...","id","namespace","name","namespace","formControlName","namespace",4,"ngIf"],["id","namespace","name","namespace","class","form-select","formControlName","namespace",4,"ngIf"],["type","text","placeholder","Namespace...","id","namespace","name","namespace","formControlName","namespace",1,"form-control"],["id","namespace","name","namespace","formControlName","namespace",1,"form-select"],ae,O,ue,me,["for","dataPool",1,"cd-col-form-label"],ge,["html",Te],["class","form-control","type","text","placeholder","Data pool name...","id","dataPool","name","dataPool","formControlName","dataPool",4,"ngIf"],["id","dataPool","name","dataPool","class","form-select","formControlName","dataPool",3,"change",4,"ngIf"],["type","text","placeholder","Data pool name...","id","dataPool","name","dataPool","formControlName","dataPool",1,"form-control"],["id","dataPool","name","dataPool","formControlName","dataPool",1,"form-select",3,"change"],fe,Ce,Se,G,ye,["type","checkbox",1,"custom-control-input",3,"id","name","formControlName"],[1,"custom-control-label",3,"for"],[3,"html",4,"ngIf"],[3,"html"],xe,[3,"routerLink"],["class","custom-control custom-radio ms-2",4,"ngFor","ngForOf"],[1,"custom-control","custom-radio","ms-2"],["type","radio","name","mirroringMode","formControlName","mirroringMode",1,"form-check-input",3,"id","value","change"],[1,"form-check-label",3,"for"],Ze,[1,"cd-col-form-label"],He,["html",we],["id","schedule","name","schedule","type","text","formControlName","schedule","placeholder",ke,1,"form-control"],["href","",1,"float-end","margin-right-md",3,"click"],qe,Ke,Xe,Qe,ze]},template:function(t,o){1&t&&e.YNc(0,a_,95,49,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},directives:[gt.y,a._Y,a.JL,a.sg,P.V,c.O5,h.P,$.o,a.Fj,K.b,a.JJ,a.u,Me.U,c.mk,a.EJ,a.YN,a.Kr,c.sg,a.Wl,Pt.S,gs.Q,a.x0,g.yS,a._,a.wV,Ts.d,j.p],pipes:[c.rS,tt.m],styles:[""]}),n})();var Dt=p(71225),lt=p(36169);let r_=(()=>{class n{constructor(){}static getCount(t){var o;return Number(null===(o=t.headers)||void 0===o?void 0:o.get("X-Total-Count"))}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var ct=p(51847),l_=p(16738),Oe=p.n(l_),dt=p(62862),c_=p(52266);function d_(n,s){1&n&&(e.TgZ(0,"div",18)(1,"span"),e.SDv(2,19),e.qZA()())}function p_(n,s){1&n&&(e.TgZ(0,"span",20),e.SDv(1,21),e.qZA())}function u_(n,s){1&n&&(e.TgZ(0,"span",20),e.SDv(1,22),e.qZA())}function m_(n,s){if(1&n&&e._UZ(0,"cd-date-time-picker",23),2&n){const t=e.oxw();e.Q6J("control",t.moveForm.get("expiresAt"))}}let g_=(()=>{class n{constructor(t,o,i,_,r){this.rbdService=t,this.activeModal=o,this.actionLabels=i,this.fb=_,this.taskWrapper=r,this.createForm()}createForm(){this.moveForm=this.fb.group({expiresAt:["",[z.h.custom("format",t=>!(""===t||Oe()(t,"YYYY-MM-DD HH:mm:ss").isValid())),z.h.custom("expired",t=>Oe()().isAfter(t))]]})}ngOnInit(){this.imageSpec=new v.N(this.poolName,this.namespace,this.imageName),this.imageSpecStr=this.imageSpec.toString(),this.pattern=`${this.poolName}/${this.imageName}`}moveImage(){let t=0;const o=this.moveForm.getValue("expiresAt");o&&(t=Oe()(o,"YYYY-MM-DD HH:mm:ss").diff(Oe()(),"seconds",!0)),t<0&&(t=0),this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/trash/move",{image_spec:this.imageSpecStr}),call:this.rbdService.moveTrash(this.imageSpec,t)}).subscribe({complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(H),e.Y36(L.Kz),e.Y36(D.p4),e.Y36(dt.O),e.Y36(m.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-move-modal"]],decls:23,vars:9,consts:function(){let s,t,o,i,_,r,l;return s="Move an image to trash",t="To move " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "" + "\ufffd0\ufffd" + "" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + " to trash, click " + "[\ufffd#10\ufffd|\ufffd#11\ufffd]" + "Move" + "[\ufffd/#10\ufffd|\ufffd/#11\ufffd]" + ". Optionally, you can pick an expiration date.",t=e.Zx4(t),o="Protection expires at",i="NOT PROTECTED",_="This image contains snapshot(s), which will prevent it from being removed after moved to trash.",r="Wrong date format. Please use \"YYYY-MM-DD HH:mm:ss\".",l="Protection has already expired. Please pick a future date or leave it empty.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","moveForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],["class","alert alert-warning","role","alert",4,"ngIf"],t,[1,"form-group"],["for","expiresAt",1,"col-form-label"],o,["type","text","placeholder",i,"formControlName","expiresAt","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["p","ngbPopover"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["popContent",""],["role","alert",1,"alert","alert-warning"],_,[1,"invalid-feedback"],r,l,[3,"control"]]},template:function(t,o){if(1&t){const i=e.EpF();e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6),e.YNc(7,d_,3,0,"div",7),e.TgZ(8,"p"),e.tHW(9,8),e._UZ(10,"kbd")(11,"kbd"),e.N_p(),e.qZA(),e.TgZ(12,"div",9)(13,"label",10),e.SDv(14,11),e.qZA(),e.TgZ(15,"input",12,13),e.NdJ("click",function(){return e.CHM(i),e.MAs(16).open()})("keypress",function(){return e.CHM(i),e.MAs(16).close()}),e.qZA(),e.YNc(17,p_,2,0,"span",14),e.YNc(18,u_,2,0,"span",14),e.qZA()(),e.TgZ(19,"div",15)(20,"cd-form-button-panel",16),e.NdJ("submitActionEvent",function(){return o.moveImage()}),e.qZA()()(),e.BQk(),e.qZA(),e.YNc(21,m_,1,1,"ng-template",null,17,e.W1O)}if(2&t){const i=e.MAs(5),_=e.MAs(22);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.moveForm),e.xp6(3),e.Q6J("ngIf",o.hasSnapshots),e.xp6(4),e.pQV(o.imageSpecStr),e.QtT(9),e.xp6(4),e.Q6J("ngbPopover",_),e.xp6(2),e.Q6J("ngIf",o.moveForm.showError("expiresAt",i,"format")),e.xp6(1),e.Q6J("ngIf",o.moveForm.showError("expiresAt",i,"expired")),e.xp6(2),e.Q6J("form",o.moveForm)("submitText",o.actionLabels.MOVE)}},directives:[f.z,a._Y,a.JL,a.sg,P.V,c.O5,h.P,$.o,a.Fj,K.b,a.JJ,a.u,L.o8,j.p,c_.J],styles:[""]}),n})();const We=function(){return{exact:!0}};function T_(n,s){1&n&&(e.TgZ(0,"li",1)(1,"a",9),e.SDv(2,10),e.qZA()()),2&n&&(e.xp6(1),e.Q6J("routerLinkActiveOptions",e.DdM(1,We)))}let et=(()=>{class n{constructor(t){this.authStorageService=t,this.grafanaPermission=this.authStorageService.getPermissions().grafana}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-tabs"]],decls:11,vars:7,consts:function(){let s,t,o,i;return s="Images",t="Namespaces",o="Trash",i="Overall Performance",[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/block/rbd","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],s,["routerLink","/block/rbd/namespaces","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],t,["routerLink","/block/rbd/trash","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],o,["class","nav-item",4,"ngIf"],["routerLink","/block/rbd/performance","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],i]},template:function(t,o){1&t&&(e.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),e.SDv(3,3),e.qZA()(),e.TgZ(4,"li",1)(5,"a",4),e.SDv(6,5),e.qZA()(),e.TgZ(7,"li",1)(8,"a",6),e.SDv(9,7),e.qZA()(),e.YNc(10,T_,3,2,"li",8),e.qZA()),2&t&&(e.xp6(2),e.Q6J("routerLinkActiveOptions",e.DdM(4,We)),e.xp6(3),e.Q6J("routerLinkActiveOptions",e.DdM(5,We)),e.xp6(3),e.Q6J("routerLinkActiveOptions",e.DdM(6,We)),e.xp6(2),e.Q6J("ngIf",o.grafanaPermission.read))},directives:[g.yS,g.Od,c.O5],styles:[""]}),n})();var f_=p(25917),Lt=p(51295),pt=p(60737),C_=p(74255),vt=p(71099),$t=p(79765);function S_(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,17),e.qZA())}function R_(n,s){if(1&n&&(e.TgZ(0,"span"),e.tHW(1,18),e._UZ(2,"b"),e.N_p(),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.pQV(t.imageName),e.QtT(1)}}function E_(n,s){1&n&&(e.TgZ(0,"cd-helper"),e.SDv(1,25),e.qZA())}function M_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",7)(1,"div",20)(2,"div",21)(3,"input",22),e.NdJ("change",function(){return e.CHM(t),e.oxw(2).onMirrorCheckBoxChange()}),e.qZA(),e.TgZ(4,"label",23),e.SDv(5,24),e.qZA(),e.YNc(6,E_,2,0,"cd-helper",13),e.qZA()()()}if(2&n){const t=s.ngIf;e.xp6(3),e.uIk("disabled",!(t.length>0)||null),e.xp6(3),e.Q6J("ngIf",!t.length>0)}}function O_(n,s){if(1&n&&(e.ynx(0),e.YNc(1,M_,7,2,"div",19),e.ALo(2,"async"),e.BQk()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",e.lcZ(2,1,t.peerConfigured$))}}let h_=(()=>{class n{constructor(t,o,i,_,r,l){this.activeModal=t,this.rbdService=o,this.taskManagerService=i,this.notificationService=_,this.actionLabels=r,this.rbdMirrorService=l,this.editing=!1,this.onSubmit=new $t.xQ,this.action=this.actionLabels.CREATE,this.resource="RBD Snapshot",this.createForm()}createForm(){this.snapshotForm=new Z.d({snapshotName:new a.NI("",{validators:[a.kI.required]}),mirrorImageSnapshot:new a.NI(!1,{})})}ngOnInit(){this.peerConfigured$=this.rbdMirrorService.getPeerForPool(this.poolName)}setSnapName(t){this.snapName=t,this.snapshotForm.get("snapshotName").setValue(t)}onMirrorCheckBoxChange(){!0===this.snapshotForm.getValue("mirrorImageSnapshot")?(this.snapshotForm.get("snapshotName").setValue(""),this.snapshotForm.get("snapshotName").clearValidators()):(this.snapshotForm.get("snapshotName").setValue(this.snapName),this.snapshotForm.get("snapshotName").setValidators([a.kI.required]))}setEditing(t=!0){this.editing=t,this.action=this.editing?this.actionLabels.RENAME:this.actionLabels.CREATE}editAction(){const t=this.snapshotForm.getValue("snapshotName"),o=new v.N(this.poolName,this.namespace,this.imageName),i=new M.R;i.name="rbd/snap/edit",i.metadata={image_spec:o.toString(),snapshot_name:t},this.rbdService.renameSnapshot(o,this.snapName,t).toPromise().then(()=>{this.taskManagerService.subscribe(i.name,i.metadata,_=>{this.notificationService.notifyTask(_)}),this.activeModal.close(),this.onSubmit.next(this.snapName)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}createAction(){const t=this.snapshotForm.getValue("snapshotName"),o=this.snapshotForm.getValue("mirrorImageSnapshot"),i=new v.N(this.poolName,this.namespace,this.imageName),_=new M.R;_.name="rbd/snap/create",_.metadata={image_spec:i.toString(),snapshot_name:t},this.rbdService.createSnapshot(i,t,o).toPromise().then(()=>{this.taskManagerService.subscribe(_.name,_.metadata,r=>{this.notificationService.notifyTask(r)}),this.activeModal.close(),this.onSubmit.next(t)}).catch(()=>{this.snapshotForm.setErrors({cdSubmitButton:!0})})}submit(){this.editing?this.editAction():this.createAction()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(L.Kz),e.Y36(H),e.Y36(vt.k),e.Y36(ve.g),e.Y36(D.p4),e.Y36(q))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-snapshot-form-modal"]],decls:21,vars:18,consts:function(){let s,t,o,i,_,r;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Name",o="This field is required.",i="Snapshot mode is enabled on image " + "\ufffd#2\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#2\ufffd" + ": snapshot names are auto generated",_="Mirror Image Snapshot",r="The peer must be registered to do this action.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","snapshotForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","snapshotName",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["type","text","placeholder","Snapshot name...","id","snapshotName","name","snapshotName","formControlName","snapshotName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],o,i,["class","form-group row",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","mirrorImageSnapshot","name","mirrorImageSnapshot","id","mirrorImageSnapshot",1,"custom-control-input",3,"change"],["for","mirrorImageSnapshot",1,"custom-control-label"],_,r]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.YNc(14,S_,2,0,"span",12),e.YNc(15,R_,3,1,"span",13),e.qZA()(),e.YNc(16,O_,3,3,"ng-container",13),e.qZA(),e.TgZ(17,"div",14)(18,"cd-form-button-panel",15),e.NdJ("submitActionEvent",function(){return o.submit()}),e.ALo(19,"titlecase"),e.ALo(20,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,10,o.action))(e.lcZ(4,12,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.snapshotForm),e.xp6(7),e.uIk("disabled","snapshot"===o.mirroring&&!0===o.snapshotForm.getValue("mirrorImageSnapshot")||null),e.xp6(1),e.Q6J("ngIf",o.snapshotForm.showError("snapshotName",i,"required")),e.xp6(1),e.Q6J("ngIf","snapshot"===o.mirroring&&!0===o.snapshotForm.getValue("mirrorImageSnapshot")||null),e.xp6(1),e.Q6J("ngIf","snapshot"===o.mirroring||null),e.xp6(2),e.Q6J("form",o.snapshotForm)("submitText",e.lcZ(19,14,o.action)+" "+e.lcZ(20,16,o.resource))}},directives:[f.z,a._Y,a.JL,a.sg,P.V,h.P,$.o,a.Fj,K.b,a.JJ,a.u,Me.U,c.O5,a.Wl,Pt.S,j.p],pipes:[c.rS,tt.m,c.Ov],styles:[""]}),n})();class A_{constructor(s,t,o){this.featuresName=t,this.cloneFormatVersion=1,o.cloneFormatVersion().subscribe(i=>{this.cloneFormatVersion=i}),this.create={permission:"create",icon:T.P.add,name:s.CREATE},this.rename={permission:"update",icon:T.P.edit,name:s.RENAME,disable:i=>this.disableForMirrorSnapshot(i)||!i.hasSingleSelection},this.protect={permission:"update",icon:T.P.lock,visible:i=>i.hasSingleSelection&&!i.first().is_protected,name:s.PROTECT,disable:i=>this.disableForMirrorSnapshot(i)},this.unprotect={permission:"update",icon:T.P.unlock,visible:i=>i.hasSingleSelection&&i.first().is_protected,name:s.UNPROTECT,disable:i=>this.disableForMirrorSnapshot(i)},this.clone={permission:"create",canBePrimary:i=>i.hasSingleSelection,disable:i=>this.getCloneDisableDesc(i,this.featuresName)||this.disableForMirrorSnapshot(i),icon:T.P.clone,name:s.CLONE},this.copy={permission:"create",canBePrimary:i=>i.hasSingleSelection,disable:i=>!i.hasSingleSelection||i.first().cdExecuting||this.disableForMirrorSnapshot(i),icon:T.P.copy,name:s.COPY},this.rollback={permission:"update",icon:T.P.undo,name:s.ROLLBACK,disable:i=>this.disableForMirrorSnapshot(i)||!i.hasSingleSelection},this.deleteSnap={permission:"delete",icon:T.P.destroy,disable:i=>{const _=i.first();return!i.hasSingleSelection||_.cdExecuting||_.is_protected||this.disableForMirrorSnapshot(i)},name:s.DELETE},this.ordering=[this.create,this.rename,this.protect,this.unprotect,this.clone,this.copy,this.rollback,this.deleteSnap]}getCloneDisableDesc(s,t){return!(s.hasSingleSelection&&!s.first().cdExecuting)||((null==t?void 0:t.includes("layering"))?1===this.cloneFormatVersion&&!s.first().is_protected&&"Snapshot must be protected in order to clone.":"Parent image must support Layering")}disableForMirrorSnapshot(s){return s.hasSingleSelection&&"snapshot"===s.first().mirror_mode&&s.first().name.includes(".mirror.")}}class P_{}var Ge=p(96102);const I_=["nameTpl"],b_=["rollbackTpl"];function N_(n,s){if(1&n&&(e.ynx(0),e.SDv(1,3),e.BQk(),e.TgZ(2,"strong"),e._uU(3),e.qZA(),e._uU(4,".\n")),2&n){const t=s.$implicit;e.xp6(3),e.hij(" ",t.snapName,"")}}let F_=(()=>{class n{constructor(t,o,i,_,r,l,d,u,S,E,I){this.authStorageService=t,this.modalService=o,this.dimlessBinaryPipe=i,this.cdDatePipe=_,this.rbdService=r,this.taskManagerService=l,this.notificationService=d,this.summaryService=u,this.taskListService=S,this.actionLabels=E,this.cdr=I,this.snapshots=[],this.selection=new Re.r,this.builders={"rbd/snap/create":B=>{const y=new P_;return y.name=B.snapshot_name,y}},this.permission=this.authStorageService.getPermissions().rbdImage}ngOnInit(){this.columns=[{name:"Name",prop:"name",cellTransformation:Le.e.executing,flexGrow:2},{name:"Size",prop:"size",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:"Provisioned",prop:"disk_usage",flexGrow:1,cellClass:"text-right",pipe:this.dimlessBinaryPipe},{name:"State",prop:"is_protected",flexGrow:1,cellTransformation:Le.e.badge,customTemplateConfig:{map:{true:{value:"PROTECTED",class:"badge-success"},false:{value:"UNPROTECTED",class:"badge-info"}}}},{name:"Created",prop:"timestamp",flexGrow:1,pipe:this.cdDatePipe}],this.imageSpec=new v.N(this.poolName,this.namespace,this.rbdName),this.rbdTableActions=new A_(this.actionLabels,this.featuresName,this.rbdService),this.rbdTableActions.create.click=()=>this.openCreateSnapshotModal(),this.rbdTableActions.rename.click=()=>this.openEditSnapshotModal(),this.rbdTableActions.protect.click=()=>this.toggleProtection(),this.rbdTableActions.unprotect.click=()=>this.toggleProtection();const t=()=>this.selection.first()&&`${this.imageSpec.toStringEncoded()}/${encodeURIComponent(this.selection.first().name)}`;this.rbdTableActions.clone.routerLink=()=>`/block/rbd/clone/${t()}`,this.rbdTableActions.copy.routerLink=()=>`/block/rbd/copy/${t()}`,this.rbdTableActions.rollback.click=()=>this.rollbackModal(),this.rbdTableActions.deleteSnap.click=()=>this.deleteSnapshotModal(),this.tableActions=this.rbdTableActions.ordering,this.taskListService.init(()=>(0,f_.of)(this.snapshots),null,_=>{Lt.T.updateChanged(this,{data:_})&&(this.cdr.detectChanges(),this.data=[...this.data])},()=>{Lt.T.updateChanged(this,{data:this.snapshots})&&(this.cdr.detectChanges(),this.data=[...this.data])},_=>["rbd/snap/create","rbd/snap/delete","rbd/snap/edit","rbd/snap/rollback"].includes(_.name)&&this.imageSpec.toString()===_.metadata.image_spec,(_,r)=>_.name===r.metadata.snapshot_name,this.builders)}ngOnChanges(){this.columns&&(this.imageSpec=new v.N(this.poolName,this.namespace,this.rbdName),this.rbdTableActions&&(this.rbdTableActions.featuresName=this.featuresName),this.taskListService.fetch())}openSnapshotModal(t,o=null){this.modalRef=this.modalService.show(h_,{mirroring:this.mirroring}),this.modalRef.componentInstance.poolName=this.poolName,this.modalRef.componentInstance.imageName=this.rbdName,this.modalRef.componentInstance.namespace=this.namespace,o?this.modalRef.componentInstance.setEditing():o=`${this.rbdName}_${Oe()().toISOString(!0)}`,this.modalRef.componentInstance.setSnapName(o),this.modalRef.componentInstance.onSubmit.subscribe(_=>{const r=new pt.o;r.name=t,r.metadata={image_spec:this.imageSpec.toString(),snapshot_name:_},this.summaryService.addRunningTask(r)})}openCreateSnapshotModal(){this.openSnapshotModal("rbd/snap/create")}openEditSnapshotModal(){this.openSnapshotModal("rbd/snap/edit",this.selection.first().name)}toggleProtection(){const t=this.selection.first().name,o=this.selection.first().is_protected,i=new M.R;i.name="rbd/snap/edit";const _=new v.N(this.poolName,this.namespace,this.rbdName);i.metadata={image_spec:_.toString(),snapshot_name:t},this.rbdService.protectSnapshot(_,t,!o).toPromise().then(()=>{const r=new pt.o;r.name=i.name,r.metadata=i.metadata,this.summaryService.addRunningTask(r),this.taskManagerService.subscribe(i.name,i.metadata,l=>{this.notificationService.notifyTask(l)})})}_asyncTask(t,o,i){const _=new M.R;_.name=o,_.metadata={image_spec:new v.N(this.poolName,this.namespace,this.rbdName).toString(),snapshot_name:i};const r=new v.N(this.poolName,this.namespace,this.rbdName);this.rbdService[t](r,i).toPromise().then(()=>{const l=new pt.o;l.name=_.name,l.metadata=_.metadata,this.summaryService.addRunningTask(l),this.modalRef.close(),this.taskManagerService.subscribe(l.name,l.metadata,d=>{this.notificationService.notifyTask(d)})}).catch(()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}rollbackModal(){const t=this.selection.selected[0].name,o=new v.N(this.poolName,this.namespace,this.rbdName).toString(),i={titleText:"RBD snapshot rollback",buttonText:"Rollback",bodyTpl:this.rollbackTpl,bodyData:{snapName:`${o}@${t}`},onSubmit:()=>{this._asyncTask("rollbackSnapshot","rbd/snap/rollback",t)}};this.modalRef=this.modalService.show(lt.Y,i)}deleteSnapshotModal(){const t=this.selection.selected[0].name;this.modalRef=this.modalService.show(pe.M,{itemDescription:"RBD snapshot",itemNames:[t],submitAction:()=>this._asyncTask("deleteSnapshot","rbd/snap/delete",t)})}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(de.Z),e.Y36($e.$),e.Y36(Ge.N),e.Y36(H),e.Y36(vt.k),e.Y36(ve.g),e.Y36(C_.J),e.Y36(ce.j),e.Y36(D.p4),e.Y36(e.sBO))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-snapshot-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(I_,5),e.Gf(b_,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.nameTpl=i.first),e.iGM(i=e.CRH())&&(o.rollbackTpl=i.first)}},inputs:{snapshots:"snapshots",featuresName:"featuresName",poolName:"poolName",namespace:"namespace",mirroring:"mirroring",primary:"primary",rbdName:"rbdName"},features:[e._Bn([ce.j]),e.TTD],decls:4,vars:5,consts:function(){let s;return s="You are about to rollback",[["columnMode","flex","selectionType","single",3,"data","columns","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["rollbackTpl",""],s]},template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1),e.qZA(),e.YNc(2,N_,5,1,"ng-template",null,2,e.W1O)),2&t&&(e.Q6J("data",o.data)("columns",o.columns),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[W.a,Ee.K],styles:[""],changeDetection:0}),n})();var D_=p(42176),Bt=p(76317),L_=p(41039);const v_=["poolConfigurationSourceTpl"];function $_(n,s){1&n&&(e.ynx(0),e.tHW(1,3),e._UZ(2,"strong"),e.N_p(),e.BQk())}function B_(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",38),e._uU(2),e.qZA()()),2&n){const t=s.$implicit;e.xp6(2),e.Oqu(t)}}function G_(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",39),e.SDv(2,40),e.qZA()()),2&n){e.oxw(3);const t=e.MAs(1);e.xp6(1),e.Q6J("ngbTooltip",t)}}function y_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.selection.disk_usage)," ")}}function x_(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",39),e.SDv(2,41),e.qZA()()),2&n){e.oxw(3);const t=e.MAs(1);e.xp6(1),e.Q6J("ngbTooltip",t)}}function Z_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.selection.total_disk_usage)," ")}}function w_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.hij("/",t.selection.parent.pool_namespace,"")}}function H_(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.YNc(2,w_,2,1,"span",1),e._uU(3),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.Oqu(t.selection.parent.pool_name),e.xp6(1),e.Q6J("ngIf",t.selection.parent.pool_namespace),e.xp6(1),e.AsE("/",t.selection.parent.image_name,"@",t.selection.parent.snap_name,"")}}function k_(n,s){1&n&&(e.TgZ(0,"span"),e._uU(1,"-"),e.qZA())}function q_(n,s){if(1&n&&(e.TgZ(0,"table",17)(1,"tbody")(2,"tr")(3,"td",18),e.SDv(4,19),e.qZA(),e.TgZ(5,"td",20),e._uU(6),e.qZA()(),e.TgZ(7,"tr")(8,"td",21),e.SDv(9,22),e.qZA(),e.TgZ(10,"td"),e._uU(11),e.qZA()(),e.TgZ(12,"tr")(13,"td",21),e.SDv(14,23),e.qZA(),e.TgZ(15,"td"),e._uU(16),e.ALo(17,"empty"),e.qZA()(),e.TgZ(18,"tr")(19,"td",21),e.SDv(20,24),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.ALo(23,"cdDate"),e.qZA()(),e.TgZ(24,"tr")(25,"td",21),e.SDv(26,25),e.qZA(),e.TgZ(27,"td"),e._uU(28),e.ALo(29,"dimlessBinary"),e.qZA()(),e.TgZ(30,"tr")(31,"td",21),e.SDv(32,26),e.qZA(),e.TgZ(33,"td"),e._uU(34),e.ALo(35,"dimless"),e.qZA()(),e.TgZ(36,"tr")(37,"td",21),e.SDv(38,27),e.qZA(),e.TgZ(39,"td"),e._uU(40),e.ALo(41,"dimlessBinary"),e.qZA()(),e.TgZ(42,"tr")(43,"td",21),e.SDv(44,28),e.qZA(),e.TgZ(45,"td"),e.YNc(46,B_,3,1,"span",29),e.qZA()(),e.TgZ(47,"tr")(48,"td",21),e.SDv(49,30),e.qZA(),e.TgZ(50,"td"),e.YNc(51,G_,3,1,"span",1),e.YNc(52,y_,3,3,"span",1),e.qZA()(),e.TgZ(53,"tr")(54,"td",21),e.SDv(55,31),e.qZA(),e.TgZ(56,"td"),e.YNc(57,x_,3,1,"span",1),e.YNc(58,Z_,3,3,"span",1),e.qZA()(),e.TgZ(59,"tr")(60,"td",21),e.SDv(61,32),e.qZA(),e.TgZ(62,"td"),e._uU(63),e.ALo(64,"dimlessBinary"),e.qZA()(),e.TgZ(65,"tr")(66,"td",21),e.SDv(67,33),e.qZA(),e.TgZ(68,"td"),e._uU(69),e.qZA()(),e.TgZ(70,"tr")(71,"td",21),e.SDv(72,34),e.qZA(),e.TgZ(73,"td"),e.YNc(74,H_,4,4,"span",1),e.YNc(75,k_,2,0,"span",1),e.qZA()(),e.TgZ(76,"tr")(77,"td",21),e.SDv(78,35),e.qZA(),e.TgZ(79,"td"),e._uU(80),e.qZA()(),e.TgZ(81,"tr")(82,"td",21),e.SDv(83,36),e.qZA(),e.TgZ(84,"td"),e._uU(85),e.qZA()(),e.TgZ(86,"tr")(87,"td",21),e.SDv(88,37),e.qZA(),e.TgZ(89,"td"),e._uU(90),e.qZA()()()()),2&n){const t=e.oxw(2);e.xp6(6),e.Oqu(t.selection.name),e.xp6(5),e.Oqu(t.selection.pool_name),e.xp6(5),e.Oqu(e.lcZ(17,19,t.selection.data_pool)),e.xp6(6),e.Oqu(e.lcZ(23,21,t.selection.timestamp)),e.xp6(6),e.Oqu(e.lcZ(29,23,t.selection.size)),e.xp6(6),e.Oqu(e.lcZ(35,25,t.selection.num_objs)),e.xp6(6),e.Oqu(e.lcZ(41,27,t.selection.obj_size)),e.xp6(6),e.Q6J("ngForOf",t.selection.features_name),e.xp6(5),e.Q6J("ngIf",-1===(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(1),e.Q6J("ngIf",-1!==(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(5),e.Q6J("ngIf",-1===(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(1),e.Q6J("ngIf",-1!==(null==t.selection.features_name?null:t.selection.features_name.indexOf("fast-diff"))),e.xp6(5),e.Oqu(e.lcZ(64,29,t.selection.stripe_unit)),e.xp6(6),e.Oqu(t.selection.stripe_count),e.xp6(5),e.Q6J("ngIf",t.selection.parent),e.xp6(1),e.Q6J("ngIf",!t.selection.parent),e.xp6(5),e.Oqu(t.selection.block_name_prefix),e.xp6(5),e.Oqu(t.selection.order),e.xp6(5),e.Oqu(t.selection.image_format)}}function K_(n,s){if(1&n&&e._UZ(0,"cd-rbd-snapshot-list",42),2&n){const t=e.oxw(2);e.Q6J("snapshots",t.selection.snapshots)("featuresName",t.selection.features_name)("poolName",t.selection.pool_name)("primary",t.selection.primary)("namespace",t.selection.namespace)("mirroring",t.selection.mirror_mode)("rbdName",t.selection.name)}}function X_(n,s){if(1&n&&e._UZ(0,"cd-rbd-configuration-table",43),2&n){const t=e.oxw(2);e.Q6J("data",t.selection.configuration)}}function Q_(n,s){if(1&n&&e._UZ(0,"cd-grafana",44),2&n){const t=e.oxw(2);e.Q6J("grafanaPath",t.rbdDashboardUrl)("type","metrics")}}function z_(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"nav",4,5),e.ynx(3,6),e.TgZ(4,"a",7),e.SDv(5,8),e.qZA(),e.YNc(6,q_,91,31,"ng-template",9),e.BQk(),e.ynx(7,10),e.TgZ(8,"a",7),e.SDv(9,11),e.qZA(),e.YNc(10,K_,1,7,"ng-template",9),e.BQk(),e.ynx(11,12),e.TgZ(12,"a",7),e.SDv(13,13),e.qZA(),e.YNc(14,X_,1,1,"ng-template",9),e.BQk(),e.ynx(15,14),e.TgZ(16,"a",7),e.SDv(17,15),e.qZA(),e.YNc(18,Q_,1,2,"ng-template",9),e.BQk(),e.qZA(),e._UZ(19,"div",16),e.BQk()),2&n){const t=e.MAs(2);e.xp6(19),e.Q6J("ngbNavOutlet",t)}}function J_(n,s){1&n&&(e.ynx(0),e.TgZ(1,"cd-alert-panel",45),e.SDv(2,46),e.qZA(),e.BQk())}function Y_(n,s){1&n&&(e.ynx(0),e.TgZ(1,"strong",49),e.SDv(2,50),e.qZA(),e.BQk())}function V_(n,s){1&n&&(e.TgZ(0,"span",51),e.SDv(1,52),e.qZA())}function U_(n,s){if(1&n&&(e.YNc(0,Y_,3,0,"ng-container",47),e.YNc(1,V_,2,0,"ng-template",null,48,e.W1O)),2&n){const t=s.value,o=e.MAs(2);e.Q6J("ngIf",+t)("ngIfElse",o)}}let j_=(()=>{class n{ngOnChanges(){this.selection&&(this.rbdDashboardUrl=`rbd-details?var-Pool=${this.selection.pool_name}&var-Image=${this.selection.name}`)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-details"]],viewQuery:function(t,o){if(1&t&&(e.Gf(v_,7),e.Gf(L.Pz,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.poolConfigurationSourceTpl=i.first),e.iGM(i=e.CRH())&&(o.nav=i.first)}},inputs:{selection:"selection",images:"images"},features:[e.TTD],decls:6,vars:2,consts:function(){let s,t,o,i,_,r,l,d,u,S,E,I,B,y,Q,J,ee,te,w,_e,ae,O,ue,me,ge,Te,fe,Ce,Se;return s="Only available for RBD images with " + "\ufffd#2\ufffd" + "fast-diff" + "\ufffd/#2\ufffd" + " enabled",t="Details",o="Snapshots",i="Configuration",_="Performance",r="Name",l="Pool",d="Data Pool",u="Created",S="Size",E="Objects",I="Object size",B="Features",y="Provisioned",Q="Total provisioned",J="Striping unit",ee="Striping count",te="Parent",w="Block name prefix",_e="Order",ae="Format Version",O="N/A",ue="N/A",me="RBD details",ge="Information can not be displayed for RBD in status 'Removing'.",Te="This setting overrides the global value",fe="Image",Ce="This is the global value. No value for this option has been set for this image.",Se="Global",[["usageNotAvailableTooltipTpl",""],[4,"ngIf"],["poolConfigurationSourceTpl",""],s,["ngbNav","","cdStatefulTab","rbd-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],t,["ngbNavContent",""],["ngbNavItem","snapshots"],o,["ngbNavItem","configuration"],i,["ngbNavItem","performance"],_,[3,"ngbNavOutlet"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],r,[1,"w-75"],[1,"bold"],l,d,u,S,E,I,B,[4,"ngFor","ngForOf"],y,Q,J,ee,te,w,_e,ae,[1,"badge","badge-dark","me-2"],["placement","top",1,"form-text","text-muted",3,"ngbTooltip"],O,ue,[3,"snapshots","featuresName","poolName","primary","namespace","mirroring","rbdName"],[3,"data"],["title",me,"uid","YhCYGcuZz","grafanaStyle","one",3,"grafanaPath","type"],["type","warning"],ge,[4,"ngIf","ngIfElse"],["global",""],["ngbTooltip",Te],fe,["ngbTooltip",Ce],Se]},template:function(t,o){1&t&&(e.YNc(0,$_,3,0,"ng-template",null,0,e.W1O),e.YNc(2,z_,20,1,"ng-container",1),e.YNc(3,J_,3,0,"ng-container",1),e.YNc(4,U_,3,2,"ng-template",null,2,e.W1O)),2&t&&(e.xp6(2),e.Q6J("ngIf",o.selection&&"REMOVING"!==o.selection.source),e.xp6(1),e.Q6J("ngIf",o.selection&&"REMOVING"===o.selection.source))},directives:[c.O5,L.Pz,ht.m,L.nv,L.Vx,L.uN,c.sg,L._L,F_,D_.P,Bt.F,L.tO,nt.G],pipes:[L_.W,Ge.N,$e.$,it.n],styles:[""]}),n})();const W_=["usageTpl"],ea=["parentTpl"],ta=["nameTpl"],oa=["ScheduleTpl"],na=["mirroringTpl"],ia=["flattenTpl"],sa=["deleteTpl"],_a=["removingStatTpl"],aa=["provisionedNotAvailableTooltipTpl"],ra=["totalProvisionedNotAvailableTooltipTpl"],la=["forcePromoteConfirmation"];function ca(n,s){1&n&&e._UZ(0,"div",14),2&n&&e.Q6J("innerHtml","Only available for RBD images with <strong>fast-diff</strong> enabled",e.oJD)}function da(n,s){if(1&n&&(e.TgZ(0,"span",17),e.SDv(1,18),e.qZA()),2&n){const t=e.oxw(2);e.Q6J("ngbTooltip",t.usageNotAvailableTooltipTpl)}}function pa(n,s){if(1&n&&(e.SDv(0,19),e.ALo(1,"dimlessBinary")),2&n){const t=e.oxw().row;e.xp6(1),e.pQV(e.lcZ(1,1,t.disk_usage)),e.QtT(0)}}function ua(n,s){if(1&n&&(e.YNc(0,da,2,1,"span",15),e.YNc(1,pa,2,3,"ng-template",null,16,e.W1O)),2&n){const t=s.row,o=e.MAs(2);e.Q6J("ngIf",null===t.disk_usage&&!t.features_name.includes("fast-diff"))("ngIfElse",o)}}function ma(n,s){if(1&n&&(e.TgZ(0,"span",17),e.SDv(1,21),e.qZA()),2&n){const t=e.oxw(2);e.Q6J("ngbTooltip",t.usageNotAvailableTooltipTpl)}}function ga(n,s){if(1&n&&(e.SDv(0,22),e.ALo(1,"dimlessBinary")),2&n){const t=e.oxw().row;e.xp6(1),e.pQV(e.lcZ(1,1,t.total_disk_usage)),e.QtT(0)}}function Ta(n,s){if(1&n&&(e.YNc(0,ma,2,1,"span",15),e.YNc(1,ga,2,3,"ng-template",null,20,e.W1O)),2&n){const t=s.row,o=e.MAs(2);e.Q6J("ngIf",null===t.total_disk_usage&&!t.features_name.includes("fast-diff"))("ngIfElse",o)}}function fa(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(2).value;e.xp6(1),e.hij("/",t.pool_namespace,"")}}function Ca(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.YNc(2,fa,2,1,"span",23),e._uU(3),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t.pool_name),e.xp6(1),e.Q6J("ngIf",t.pool_namespace),e.xp6(1),e.AsE("/",t.image_name,"@",t.snap_name,"")}}function Sa(n,s){1&n&&(e.TgZ(0,"span"),e._uU(1,"-"),e.qZA())}function Ra(n,s){if(1&n&&(e.YNc(0,Ca,4,4,"span",23),e.YNc(1,Sa,2,0,"span",23)),2&n){const t=s.value;e.Q6J("ngIf",t),e.xp6(1),e.Q6J("ngIf",!t)}}function Ea(n,s){if(1&n&&(e.TgZ(0,"span",27),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t[0])}}function Ma(n,s){if(1&n&&(e.TgZ(0,"span",27),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t[1])}}function Oa(n,s){1&n&&(e.TgZ(0,"span",27),e.SDv(1,28),e.qZA())}function ha(n,s){1&n&&(e.TgZ(0,"span",27),e.SDv(1,29),e.qZA())}function Aa(n,s){if(1&n&&(e.TgZ(0,"span",27),e._uU(1),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(t)}}function Pa(n,s){if(1&n&&(e.YNc(0,Ea,2,1,"span",24),e._uU(1,"\xa0 "),e.YNc(2,Ma,2,1,"span",25),e._uU(3,"\xa0 "),e.YNc(4,Oa,2,0,"span",25),e.YNc(5,ha,2,0,"span",25),e.YNc(6,Aa,2,1,"ng-template",null,26,e.W1O)),2&n){const t=s.value,o=s.row,i=e.MAs(7);e.Q6J("ngIf",3===t.length)("ngIfElse",i),e.xp6(2),e.Q6J("ngIf",3===t.length),e.xp6(2),e.Q6J("ngIf",!0===o.primary),e.xp6(1),e.Q6J("ngIf",!1===o.primary)}}function Ia(n,s){if(1&n&&(e.TgZ(0,"span",27),e._uU(1),e.ALo(2,"cdDate"),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Oqu(e.lcZ(2,1,t[2]))}}function ba(n,s){1&n&&e.YNc(0,Ia,3,3,"span",25),2&n&&e.Q6J("ngIf",3===s.value.length)}function Na(n,s){if(1&n&&(e._uU(0," You are about to flatten "),e.TgZ(1,"strong"),e._uU(2),e.qZA(),e._uU(3,". "),e._UZ(4,"br")(5,"br"),e._uU(6," All blocks will be copied from parent "),e.TgZ(7,"strong"),e._uU(8),e.qZA(),e._uU(9," to child "),e.TgZ(10,"strong"),e._uU(11),e.qZA(),e._uU(12,".\n")),2&n){const t=s.$implicit;e.xp6(2),e.Oqu(t.child),e.xp6(6),e.Oqu(t.parent),e.xp6(3),e.Oqu(t.child)}}function Fa(n,s){if(1&n&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.Oqu(t)}}function Da(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"span"),e.SDv(2,33),e.qZA(),e.TgZ(3,"ul"),e.YNc(4,Fa,2,1,"li",34),e.qZA(),e.BQk()),2&n){const t=e.oxw(2).snapshots;e.xp6(4),e.Q6J("ngForOf",t)}}function La(n,s){if(1&n&&(e.TgZ(0,"div",31)(1,"span"),e.SDv(2,32),e.qZA(),e._UZ(3,"br"),e.YNc(4,Da,5,1,"ng-container",23),e.qZA()),2&n){const t=e.oxw().snapshots;e.xp6(4),e.Q6J("ngIf",t.length>0)}}function va(n,s){1&n&&e.YNc(0,La,5,1,"div",30),2&n&&e.Q6J("ngIf",s.hasSnapshots)}const $a=function(n,s){return[n,s]};function Ba(n,s){if(1&n&&e._UZ(0,"i",36),2&n){const t=e.oxw(2);e.Q6J("ngClass",e.WLB(1,$a,t.icons.spinner,t.icons.spin))}}function Ga(n,s){if(1&n&&(e.TgZ(0,"span",36),e._uU(1),e.qZA()),2&n){const t=e.oxw(),o=t.column,i=t.row;e.Q6J("ngClass",null!=o&&null!=o.customTemplateConfig&&o.customTemplateConfig.executingClass?o.customTemplateConfig.executingClass:"text-muted italic"),e.xp6(1),e.hij(" (",i.cdExecuting,") ")}}function ya(n,s){if(1&n&&e._UZ(0,"i",38),2&n){const t=e.oxw(2);e.Gre("",t.icons.warning," warn")}}function xa(n,s){if(1&n&&(e.YNc(0,Ba,1,4,"i",35),e.TgZ(1,"span",36),e._uU(2),e.qZA(),e.YNc(3,Ga,2,2,"span",35),e.YNc(4,ya,1,3,"i",37)),2&n){const t=s.column,o=s.value,i=s.row;e.Q6J("ngIf",i.cdExecuting),e.xp6(1),e.Q6J("ngClass",null==t||null==t.customTemplateConfig?null:t.customTemplateConfig.valueClass),e.xp6(1),e.hij(" ",o," "),e.xp6(1),e.Q6J("ngIf",i.cdExecuting),e.xp6(1),e.Q6J("ngIf",i.source&&"REMOVING"===i.source)}}function Za(n,s){if(1&n&&(e.TgZ(0,"cd-alert-panel",39),e._uU(1),e.qZA(),e.TgZ(2,"div",40),e.tHW(3,41),e._UZ(4,"strong"),e.N_p(),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Oqu(t.errorMessage)}}let Ha=(()=>{class n extends Ct.o{constructor(t,o,i,_,r,l,d,u,S){super(),this.authStorageService=t,this.rbdService=o,this.dimlessBinaryPipe=i,this.dimlessPipe=_,this.modalService=r,this.taskWrapper=l,this.taskListService=d,this.urlBuilder=u,this.actionLabels=S,this.tableStatus=new Dt.c("light"),this.selection=new Re.r,this.icons=T.P,this.count=0,this.tableContext=null,this.builders={"rbd/create":O=>this.createRbdFromTask(O.pool_name,O.namespace,O.image_name),"rbd/delete":O=>this.createRbdFromTaskImageSpec(O.image_spec),"rbd/clone":O=>this.createRbdFromTask(O.child_pool_name,O.child_namespace,O.child_image_name),"rbd/copy":O=>this.createRbdFromTask(O.dest_pool_name,O.dest_namespace,O.dest_image_name)},this.permission=this.authStorageService.getPermissions().rbdImage;const E=()=>this.selection.first()&&new v.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name).toStringEncoded();this.tableActions=[{permission:"create",icon:T.P.add,routerLink:()=>this.urlBuilder.getCreate(),canBePrimary:O=>!O.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:T.P.edit,routerLink:()=>this.urlBuilder.getEdit(E()),name:this.actionLabels.EDIT,disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)},{permission:"create",canBePrimary:O=>O.hasSingleSelection,disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)||!!O.first().cdExecuting,icon:T.P.copy,routerLink:()=>`/block/rbd/copy/${E()}`,name:this.actionLabels.COPY},{permission:"update",disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)||O.first().cdExecuting||!O.first().parent,icon:T.P.flatten,click:()=>this.flattenRbdModal(),name:this.actionLabels.FLATTEN},{permission:"update",icon:T.P.refresh,click:()=>this.resyncRbdModal(),name:this.actionLabels.RESYNC,disable:O=>this.getResyncDisableDesc(O)},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteRbdModal(),name:this.actionLabels.DELETE,disable:O=>this.getDeleteDisableDesc(O)},{permission:"delete",icon:T.P.trash,click:()=>this.trashRbdModal(),name:this.actionLabels.TRASH,disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)||O.first().image_format===Ie.V1},{permission:"update",icon:T.P.edit,click:()=>this.removeSchedulingModal(),name:this.actionLabels.REMOVE_SCHEDULING,disable:O=>this.getRemovingStatusDesc(O)||this.getInvalidNameDisable(O)||void 0===O.first().schedule_info},{permission:"update",icon:T.P.edit,click:()=>this.actionPrimary(!0),name:this.actionLabels.PROMOTE,visible:()=>null!=this.selection.first()&&!this.selection.first().primary},{permission:"update",icon:T.P.edit,click:()=>this.actionPrimary(!1),name:this.actionLabels.DEMOTE,visible:()=>null!=this.selection.first()&&this.selection.first().primary}]}createRbdFromTaskImageSpec(t){const o=v.N.fromString(t);return this.createRbdFromTask(o.poolName,o.namespace,o.imageName)}createRbdFromTask(t,o,i){const _=new cs;return _.id="-1",_.unique_id="-1",_.name=i,_.namespace=o,_.pool_name=t,_.image_format=Ie.V2,_}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:2,cellTemplate:this.removingStatTpl},{name:"Pool",prop:"pool_name",flexGrow:2},{name:"Namespace",prop:"namespace",flexGrow:2},{name:"Size",prop:"size",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessBinaryPipe},{name:"Objects",prop:"num_objs",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessPipe},{name:"Object size",prop:"obj_size",flexGrow:1,cellClass:"text-right",sortable:!1,pipe:this.dimlessBinaryPipe},{name:"Provisioned",prop:"disk_usage",cellClass:"text-center",flexGrow:1,pipe:this.dimlessBinaryPipe,sortable:!1,cellTemplate:this.provisionedNotAvailableTooltipTpl},{name:"Total provisioned",prop:"total_disk_usage",cellClass:"text-center",flexGrow:1,pipe:this.dimlessBinaryPipe,sortable:!1,cellTemplate:this.totalProvisionedNotAvailableTooltipTpl},{name:"Parent",prop:"parent",flexGrow:2,sortable:!1,cellTemplate:this.parentTpl},{name:"Mirroring",prop:"mirror_mode",flexGrow:3,sortable:!1,cellTemplate:this.mirroringTpl},{name:"Next Scheduled Snapshot",prop:"mirror_mode",flexGrow:3,sortable:!1,cellTemplate:this.ScheduleTpl}],this.taskListService.init(i=>this.getRbdImages(i),i=>this.prepareResponse(i),i=>this.images=i,()=>this.onFetchError(),i=>["rbd/clone","rbd/copy","rbd/create","rbd/delete","rbd/edit","rbd/flatten","rbd/trash/move"].includes(i.name),(i,_)=>{let r;switch(_.name){case"rbd/copy":r=new v.N(_.metadata.dest_pool_name,_.metadata.dest_namespace,_.metadata.dest_image_name).toString();break;case"rbd/clone":r=new v.N(_.metadata.child_pool_name,_.metadata.child_namespace,_.metadata.child_image_name).toString();break;case"rbd/create":r=new v.N(_.metadata.pool_name,_.metadata.namespace,_.metadata.image_name).toString();break;default:r=_.metadata.image_spec}return r===new v.N(i.pool_name,i.namespace,i.name).toString()},this.builders)}onFetchError(){this.table.reset(),this.tableStatus=new Dt.c("danger")}getRbdImages(t){var o;return null!==t&&(this.tableContext=t),null==this.tableContext&&(this.tableContext=new A.E(()=>{})),this.rbdService.list(null===(o=this.tableContext)||void 0===o?void 0:o.toParams())}prepareResponse(t){let o=[];return t.forEach(i=>{o=o.concat(i.value)}),o.forEach(i=>{if(void 0!==i.schedule_info){let _=[];const r="scheduled";let l=+new Date(i.schedule_info.schedule_time);const d=(new Date).getTimezoneOffset();l+=6e4*Math.abs(d),_.push(i.mirror_mode,r,l),i.mirror_mode=_,_=[]}}),this.count=o.length>0?r_.getCount(t[0]):0,o}updateSelection(t){this.selection=t}deleteRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=new v.N(t,o,i);this.modalRef=this.modalService.show(pe.M,{itemDescription:"RBD",itemNames:[_],bodyTemplate:this.deleteTpl,bodyContext:{hasSnapshots:this.hasSnapshots(),snapshots:this.listProtectedSnapshots()},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/delete",{image_spec:_.toString()}),call:this.rbdService.delete(_)})})}resyncRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=new v.N(t,o,i);this.modalRef=this.modalService.show(pe.M,{itemDescription:"RBD",itemNames:[_],actionDescription:"resync",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/edit",{image_spec:_.toString()}),call:this.rbdService.update(_,{resync:!0})})})}trashRbdModal(){const t={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,hasSnapshots:this.hasSnapshots()};this.modalRef=this.modalService.show(g_,t)}flattenRbd(t){this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/flatten",{image_spec:t.toString()}),call:this.rbdService.flatten(t)}).subscribe({complete:()=>{this.modalRef.close()}})}flattenRbdModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().name,_=this.selection.first().parent,r=new v.N(_.pool_name,_.pool_namespace,_.image_name),l=new v.N(t,o,i),d={titleText:"RBD flatten",buttonText:"Flatten",bodyTpl:this.flattenTpl,bodyData:{parent:`${r}@${_.snap_name}`,child:l.toString()},onSubmit:()=>{this.flattenRbd(l)}};this.modalRef=this.modalService.show(lt.Y,d)}editRequest(){const t=new rt;return t.remove_scheduling=!t.remove_scheduling,t}removeSchedulingModal(){const t=this.selection.first().name,o=new v.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name);this.modalRef=this.modalService.show(pe.M,{actionDescription:"remove scheduling on",itemDescription:"image",itemNames:[`${t}`],submitActionObservable:()=>new Ot.y(i=>{this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/edit",{image_spec:o.toString()}),call:this.rbdService.update(o,this.editRequest())}).subscribe({error:_=>i.error(_),complete:()=>{this.modalRef.close()}})})})}actionPrimary(t){const o=new rt;o.primary=t,o.features=null;const i=new v.N(this.selection.first().pool_name,this.selection.first().namespace,this.selection.first().name);this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/edit",{image_spec:i.toString()}),call:this.rbdService.update(i,o)}).subscribe(()=>{},_=>{_.preventDefault(),t&&(this.errorMessage=_.error.detail.replace(/\[.*?\]\s*/,""),o.force=!0,this.modalRef=this.modalService.show(lt.Y,{titleText:"Warning",buttonText:"Enforce",warning:!0,bodyTpl:this.forcePromoteConfirmation,onSubmit:()=>{this.rbdService.update(i,o).subscribe(()=>{this.modalRef.close()},()=>{this.modalRef.close()})}}))})}hasSnapshots(){return(this.selection.first().snapshots||[]).length>0}hasClonedSnapshots(t){return(t.snapshots||[]).some(i=>i.children&&i.children.length>0)}listProtectedSnapshots(){return this.selection.first().snapshots.reduce((i,_)=>(_.is_protected&&i.push(_.name),i),[])}getDeleteDisableDesc(t){const o=t.first();return o&&this.hasClonedSnapshots(o)?"This RBD has cloned snapshots. Please delete related RBDs before deleting this RBD.":this.getInvalidNameDisable(t)||this.hasClonedSnapshots(t.first())}getResyncDisableDesc(t){const o=t.first();return o&&this.imageIsPrimary(o)?"Primary RBD images cannot be resynced":this.getInvalidNameDisable(t)}imageIsPrimary(t){return t.primary}getInvalidNameDisable(t){var o;const i=t.first();return(null===(o=null==i?void 0:i.name)||void 0===o?void 0:o.match(/[@/]/))?"This RBD image has an invalid name and can't be managed by ceph.":!t.first()||!t.hasSingleSelection}getRemovingStatusDesc(t){const o=t.first();return"REMOVING"===(null==o?void 0:o.source)&&"Action not possible for an RBD in status 'Removing'"}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(H),e.Y36($e.$),e.Y36(it.n),e.Y36(de.Z),e.Y36(m.P),e.Y36(ce.j),e.Y36(ct.F),e.Y36(D.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(W.a,7),e.Gf(W_,5),e.Gf(ea,7),e.Gf(ta,5),e.Gf(oa,7),e.Gf(na,7),e.Gf(ia,7),e.Gf(sa,7),e.Gf(_a,7),e.Gf(aa,7),e.Gf(ra,7),e.Gf(la,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.usageTpl=i.first),e.iGM(i=e.CRH())&&(o.parentTpl=i.first),e.iGM(i=e.CRH())&&(o.nameTpl=i.first),e.iGM(i=e.CRH())&&(o.ScheduleTpl=i.first),e.iGM(i=e.CRH())&&(o.mirroringTpl=i.first),e.iGM(i=e.CRH())&&(o.flattenTpl=i.first),e.iGM(i=e.CRH())&&(o.deleteTpl=i.first),e.iGM(i=e.CRH())&&(o.removingStatTpl=i.first),e.iGM(i=e.CRH())&&(o.provisionedNotAvailableTooltipTpl=i.first),e.iGM(i=e.CRH())&&(o.totalProvisionedNotAvailableTooltipTpl=i.first),e.iGM(i=e.CRH())&&(o.forcePromoteConfirmation=i.first)}},features:[e._Bn([ce.j,{provide:ct.F,useValue:new ct.F("block/rbd")}]),e.qOj],decls:25,vars:13,consts:function(){let s,t,o,i,_,r,l,d,u,S;return s="N/A",t="" + "\ufffd0\ufffd" + "",o="N/A",i="" + "\ufffd0\ufffd" + "",_="primary",r="secondary",l="Deleting this image will also delete all its snapshots.",d="The following snapshots are currently protected and will be removed:",u="RBD in status 'Removing'",S="" + "\ufffd#4\ufffd" + " Do you want to force the operation? " + "\ufffd/#4\ufffd" + "",[["columnMode","flex","identifier","unique_id","forceIdentifier","true","selectionType","single",3,"data","columns","searchableObjects","serverSide","count","hasDetails","status","maxLimit","autoReload","fetchData","setExpandedRow","updateSelection"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["scheduleStatus",""],["provisionedNotAvailableTooltipTpl",""],["totalProvisionedNotAvailableTooltipTpl",""],["parentTpl",""],["mirroringTpl",""],["ScheduleTpl",""],["flattenTpl",""],["deleteTpl",""],["removingStatTpl",""],["forcePromoteConfirmation",""],[3,"innerHtml"],["placement","top",3,"ngbTooltip",4,"ngIf","ngIfElse"],["provisioned",""],["placement","top",3,"ngbTooltip"],s,t,["totalProvisioned",""],o,i,[4,"ngIf"],["class","badge badge-info",4,"ngIf","ngIfElse"],["class","badge badge-info",4,"ngIf"],["probb",""],[1,"badge","badge-info"],_,r,["class","alert alert-warning","role","alert",4,"ngIf"],["role","alert",1,"alert","alert-warning"],l,d,[4,"ngFor","ngForOf"],[3,"ngClass",4,"ngIf"],[3,"ngClass"],["title",u,3,"class",4,"ngIf"],["title",u],["type","warning"],[1,"m-4"],S]},template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0,1),e.NdJ("fetchData",function(_){return o.taskListService.fetch(_)})("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(3,"cd-table-actions",2)(4,"cd-rbd-details",3),e.qZA(),e.YNc(5,ca,1,1,"ng-template",null,4,e.W1O),e.YNc(7,ua,3,2,"ng-template",null,5,e.W1O),e.YNc(9,Ta,3,2,"ng-template",null,6,e.W1O),e.YNc(11,Ra,2,2,"ng-template",null,7,e.W1O),e.YNc(13,Pa,8,5,"ng-template",null,8,e.W1O),e.YNc(15,ba,1,1,"ng-template",null,9,e.W1O),e.YNc(17,Na,13,3,"ng-template",null,10,e.W1O),e.YNc(19,va,1,1,"ng-template",null,11,e.W1O),e.YNc(21,xa,5,5,"ng-template",null,12,e.W1O),e.YNc(23,Za,5,1,"ng-template",null,13,e.W1O)),2&t&&(e.xp6(1),e.Q6J("data",o.images)("columns",o.columns)("searchableObjects",!0)("serverSide",!0)("count",o.count)("hasDetails",!0)("status",o.tableStatus)("maxLimit",25)("autoReload",-1),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},directives:[et,W.a,Ee.K,j_,c.O5,L._L,c.sg,c.mk,nt.G],pipes:[$e.$,Ge.N],styles:[".warn[_ngcontent-%COMP%]{color:#d48200}"]}),n})();function ka(n,s){1&n&&e._UZ(0,"input",19)}function qa(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,24),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Ka(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,25),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Xa(n,s){1&n&&(e.TgZ(0,"option",23),e.SDv(1,26),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Qa(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function za(n,s){if(1&n&&(e.TgZ(0,"select",20),e.YNc(1,qa,2,1,"option",21),e.YNc(2,Ka,2,1,"option",21),e.YNc(3,Xa,2,1,"option",21),e.YNc(4,Qa,2,2,"option",22),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",null!==t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.pools)}}function Ja(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,29),e.qZA())}function Ya(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,30),e.qZA())}function Va(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,31),e.qZA())}let Ua=(()=>{class n{constructor(t,o,i,_,r,l){this.activeModal=t,this.actionLabels=o,this.authStorageService=i,this.notificationService=_,this.poolService=r,this.rbdService=l,this.pools=null,this.editing=!1,this.poolPermission=this.authStorageService.getPermissions().pool,this.createForm()}createForm(){this.namespaceForm=new Z.d({pool:new a.NI(""),namespace:new a.NI("")},this.validator(),this.asyncValidator())}validator(){return t=>{const o=t.get("pool"),i=t.get("namespace");let _=null;o.value||(_={required:!0}),o.setErrors(_);let r=null;return i.value||(r={required:!0}),i.setErrors(r),null}}asyncValidator(){return t=>new Promise(o=>{const i=t.get("pool"),_=t.get("namespace");this.rbdService.listNamespaces(i.value).subscribe(r=>{if(r.some(l=>l.namespace===_.value)){const l={namespaceExists:!0};_.setErrors(l),o(l)}else o(null)})})}ngOnInit(){this.onSubmit=new $t.xQ,this.poolPermission.read&&this.poolService.list(["pool_name","type","application_metadata"]).then(t=>{const o=[];for(const i of t)this.rbdService.isRBDPool(i)&&"replicated"===i.type&&o.push(i);if(this.pools=o,1===this.pools.length){const i=this.pools[0].pool_name;this.namespaceForm.get("pool").setValue(i)}})}submit(){const t=this.namespaceForm.getValue("pool"),o=this.namespaceForm.getValue("namespace"),i=new M.R;i.name="rbd/namespace/create",i.metadata={pool:t,namespace:o},this.rbdService.createNamespace(t,o).toPromise().then(()=>{this.notificationService.show(ot.k.success,"Created namespace '" + t + "/" + o + "'"),this.activeModal.close(),this.onSubmit.next()}).catch(()=>{this.namespaceForm.setErrors({cdSubmitButton:!0})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(L.Kz),e.Y36(D.p4),e.Y36(oe.j),e.Y36(ve.g),e.Y36(Ve.q),e.Y36(H))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-namespace-form-modal"]],decls:23,vars:9,consts:function(){let s,t,o,i,_,r,l,d,u;return s="Create Namespace",t="Pool",o="Name",i="Loading...",_="-- No rbd pools available --",r="-- Select a pool --",l="This field is required.",d="This field is required.",u="Namespace already exists.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","namespaceForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","pool",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["class","form-control","type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",4,"ngIf"],["id","pool","name","pool","class","form-select","formControlName","pool",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["for","namespace",1,"cd-col-form-label","required"],o,["type","text","placeholder","Namespace name...","id","namespace","name","namespace","formControlName","namespace","autofocus","",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["type","text","placeholder","Pool name...","id","pool","name","pool","formControlName","pool",1,"form-control"],["id","pool","name","pool","formControlName","pool",1,"form-select"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],[3,"ngValue"],i,_,r,[3,"value"],[1,"invalid-feedback"],l,d,u]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10),e.YNc(11,ka,1,0,"input",11),e.YNc(12,za,5,4,"select",12),e.YNc(13,Ja,2,0,"span",13),e.qZA()(),e.TgZ(14,"div",7)(15,"label",14),e.SDv(16,15),e.qZA(),e.TgZ(17,"div",10),e._UZ(18,"input",16),e.YNc(19,Ya,2,0,"span",13),e.YNc(20,Va,2,0,"span",13),e.qZA()()(),e.TgZ(21,"div",17)(22,"cd-form-button-panel",18),e.NdJ("submitActionEvent",function(){return o.submit()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.namespaceForm),e.xp6(7),e.Q6J("ngIf",!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.namespaceForm.showError("pool",i,"required")),e.xp6(6),e.Q6J("ngIf",o.namespaceForm.showError("namespace",i,"required")),e.xp6(1),e.Q6J("ngIf",o.namespaceForm.showError("namespace",i,"namespaceExists")),e.xp6(2),e.Q6J("form",o.namespaceForm)("submitText",o.actionLabels.CREATE)}},directives:[f.z,a._Y,a.JL,a.sg,P.V,h.P,c.O5,$.o,a.Fj,K.b,a.JJ,a.u,a.EJ,a.YN,a.Kr,c.sg,Me.U,j.p],styles:[""]}),n})(),ja=(()=>{class n{constructor(t,o,i,_,r,l){this.authStorageService=t,this.rbdService=o,this.poolService=i,this.modalService=_,this.notificationService=r,this.actionLabels=l,this.selection=new Re.r,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"create",icon:T.P.add,click:()=>this.createModal(),name:this.actionLabels.CREATE},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE,disable:()=>this.getDeleteDisableDesc()}]}ngOnInit(){this.columns=[{name:"Namespace",prop:"namespace",flexGrow:1},{name:"Pool",prop:"pool",flexGrow:1},{name:"Total images",prop:"num_images",flexGrow:1}],this.refresh()}refresh(){this.poolService.list(["pool_name","type","application_metadata"]).then(t=>{t=t.filter(i=>this.rbdService.isRBDPool(i)&&"replicated"===i.type);const o=[];t.forEach(i=>{o.push(this.rbdService.listNamespaces(i.pool_name))}),o.length>0?(0,le.D)(o).subscribe(i=>{const _=[];for(let r=0;r<i.length;r++){const d=t[r].pool_name;i[r].forEach(u=>{_.push({id:`${d}/${u.namespace}`,pool:d,namespace:u.namespace,num_images:u.num_images})})}this.namespaces=_}):this.namespaces=[]})}updateSelection(t){this.selection=t}createModal(){this.modalRef=this.modalService.show(Ua),this.modalRef.componentInstance.onSubmit.subscribe(()=>{this.refresh()})}deleteModal(){const t=this.selection.first().pool,o=this.selection.first().namespace;this.modalRef=this.modalService.show(pe.M,{itemDescription:"Namespace",itemNames:[`${t}/${o}`],submitAction:()=>this.rbdService.deleteNamespace(t,o).subscribe(()=>{this.notificationService.show(ot.k.success,"Deleted namespace '" + t + "/" + o + "'"),this.modalRef.close(),this.refresh()},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})})}getDeleteDisableDesc(){var t;const o=this.selection.first();return(null==o?void 0:o.num_images)>0?"Namespace contains images":!(null===(t=this.selection)||void 0===t?void 0:t.first())}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(H),e.Y36(Ve.q),e.Y36(de.Z),e.Y36(ve.g),e.Y36(D.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-namespace-list"]],features:[e._Bn([ce.j])],decls:4,vars:5,consts:[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","fetchData","updateSelection"],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"]],template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0),e.NdJ("fetchData",function(){return o.refresh()})("updateSelection",function(_){return o.updateSelection(_)}),e.TgZ(2,"div",1),e._UZ(3,"cd-table-actions",2),e.qZA()()),2&t&&(e.xp6(1),e.Q6J("data",o.namespaces)("columns",o.columns),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[et,W.a,Ee.K],styles:[""]}),n})(),Wa=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-performance"]],decls:2,vars:2,consts:function(){let s;return s="RBD overview",[["title",s,"uid","41FrpeUiz","grafanaStyle","two",3,"grafanaPath","type"]]},template:function(t,o){1&t&&e._UZ(0,"cd-rbd-tabs")(1,"cd-grafana",0),2&t&&(e.xp6(1),e.Q6J("grafanaPath","rbd-overview?")("type","metrics"))},directives:[et,Bt.F],styles:[""]}),n})();var er=p(91801);function tr(n,s){1&n&&e._UZ(0,"input",15)}function or(n,s){if(1&n&&(e.TgZ(0,"option",20),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function nr(n,s){if(1&n&&(e.TgZ(0,"select",16)(1,"option",17),e.SDv(2,18),e.qZA(),e.YNc(3,or,2,2,"option",19),e.qZA()),2&n){const t=e.oxw();e.xp6(3),e.Q6J("ngForOf",t.pools)}}let ir=(()=>{class n{constructor(t,o,i,_,r,l,d){this.authStorageService=t,this.rbdService=o,this.activeModal=i,this.actionLabels=_,this.fb=r,this.poolService=l,this.taskWrapper=d,this.poolPermission=this.authStorageService.getPermissions().pool}createForm(){this.purgeForm=this.fb.group({poolName:""})}ngOnInit(){this.poolPermission.read&&this.poolService.list(["pool_name","application_metadata"]).then(t=>{this.pools=t.filter(o=>o.application_metadata.includes("rbd")).map(o=>o.pool_name)}),this.createForm()}purge(){const t=this.purgeForm.getValue("poolName")||"";this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/trash/purge",{pool_name:t}),call:this.rbdService.purgeTrash(t)}).subscribe({error:()=>{this.purgeForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(H),e.Y36(L.Kz),e.Y36(D.p4),e.Y36(dt.O),e.Y36(Ve.q),e.Y36(m.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-purge-modal"]],decls:18,vars:6,consts:function(){let s,t,o,i,_;return s="Purge Trash",t="To purge, select\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "All" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + "\xA0 or one pool and click\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "Purge" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ".\xA0",t=e.Zx4(t),o="Pool:",i="Pool name...",_="All",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","purgeForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],[1,"col-form-label","mx-auto"],o,["class","form-control","type","text","placeholder",i,"formControlName","poolName",4,"ngIf"],["id","poolName","name","poolName","class","form-control","formControlName","poolName",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["type","text","placeholder",i,"formControlName","poolName",1,"form-control"],["id","poolName","name","poolName","formControlName","poolName",1,"form-control"],["value",""],_,[3,"value",4,"ngFor","ngForOf"],[3,"value"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.tHW(8,7),e._UZ(9,"kbd")(10,"kbd"),e.N_p(),e.qZA(),e.TgZ(11,"div",8)(12,"label",9),e.SDv(13,10),e.qZA(),e.YNc(14,tr,1,0,"input",11),e.YNc(15,nr,4,1,"select",12),e.qZA()(),e.TgZ(16,"div",13)(17,"cd-form-button-panel",14),e.NdJ("submitActionEvent",function(){return o.purge()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.purgeForm),e.xp6(10),e.Q6J("ngIf",!o.poolPermission.read),e.xp6(1),e.Q6J("ngIf",o.poolPermission.read),e.xp6(2),e.Q6J("form",o.purgeForm)("submitText",o.actionLabels.PURGE))},directives:[f.z,a._Y,a.JL,a.sg,P.V,h.P,c.O5,$.o,a.Fj,K.b,a.JJ,a.u,a.EJ,a.YN,a.Kr,c.sg,j.p],styles:[""]}),n})();function sr(n,s){1&n&&(e.TgZ(0,"span",15),e.SDv(1,16),e.qZA())}let _r=(()=>{class n{constructor(t,o,i,_,r){this.rbdService=t,this.activeModal=o,this.actionLabels=i,this.fb=_,this.taskWrapper=r}ngOnInit(){this.imageSpec=new v.N(this.poolName,this.namespace,this.imageName).toString(),this.restoreForm=this.fb.group({name:this.imageName})}restore(){const t=this.restoreForm.getValue("name"),o=new v.N(this.poolName,this.namespace,this.imageId);this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/trash/restore",{image_id_spec:o.toString(),new_image_name:t}),call:this.rbdService.restoreTrash(o,t)}).subscribe({error:()=>{this.restoreForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(H),e.Y36(L.Kz),e.Y36(D.p4),e.Y36(dt.O),e.Y36(m.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-restore-modal"]],decls:18,vars:7,consts:function(){let s,t,o,i;return s="Restore Image",t="To restore\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "" + "\ufffd0\ufffd" + "@" + "\ufffd1\ufffd" + "" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ",\xA0 type the image's new name and click\xA0 " + "[\ufffd#9\ufffd|\ufffd#10\ufffd]" + "Restore" + "[\ufffd/#9\ufffd|\ufffd/#10\ufffd]" + ".",t=e.Zx4(t),o="New Name",i="This field is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","restoreForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],t,[1,"form-group"],["for","name",1,"col-form-label"],o,["type","text","name","name","id","name","autocomplete","off","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],i]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.tHW(8,7),e._UZ(9,"kbd")(10,"kbd"),e.N_p(),e.qZA(),e.TgZ(11,"div",8)(12,"label",9),e.SDv(13,10),e.qZA(),e._UZ(14,"input",11),e.YNc(15,sr,2,0,"span",12),e.qZA()(),e.TgZ(16,"div",13)(17,"cd-form-button-panel",14),e.NdJ("submitActionEvent",function(){return o.restore()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.restoreForm),e.xp6(6),e.pQV(o.imageSpec)(o.imageId),e.QtT(8),e.xp6(5),e.Q6J("ngIf",o.restoreForm.showError("name",i,"required")),e.xp6(2),e.Q6J("form",o.restoreForm)("submitText",o.actionLabels.RESTORE)}},directives:[f.z,a._Y,a.JL,a.sg,P.V,h.P,$.o,a.Fj,K.b,a.JJ,a.u,Me.U,c.O5,j.p],styles:[""]}),n})();const ar=["expiresTpl"],rr=["deleteTpl"],lr=function(n){return[n]};function cr(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",6),e.NdJ("click",function(){return e.CHM(t),e.oxw().purgeModal()}),e._UZ(1,"i",7),e.ynx(2),e.SDv(3,8),e.BQk(),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("disabled",t.disablePurgeBtn),e.xp6(1),e.Q6J("ngClass",e.VKq(2,lr,t.icons.destroy))}}function dr(n,s){1&n&&(e.ynx(0),e.SDv(1,10),e.BQk())}function pr(n,s){1&n&&(e.ynx(0),e.SDv(1,11),e.BQk())}function ur(n,s){if(1&n&&(e.YNc(0,dr,2,0,"ng-container",9),e.YNc(1,pr,2,0,"ng-container",9),e._uU(2),e.ALo(3,"cdDate")),2&n){const t=s.row,o=s.value;e.Q6J("ngIf",t.cdIsExpired),e.xp6(1),e.Q6J("ngIf",!t.cdIsExpired),e.xp6(1),e.hij(" ",e.lcZ(3,3,o),"\n")}}function mr(n,s){if(1&n&&(e.TgZ(0,"p",13)(1,"strong"),e.ynx(2),e.SDv(3,14),e.ALo(4,"cdDate"),e.BQk(),e.qZA()()),2&n){const t=e.oxw().expiresAt;e.xp6(4),e.pQV(e.lcZ(4,1,t)),e.QtT(3)}}function gr(n,s){1&n&&e.YNc(0,mr,5,3,"p",12),2&n&&e.Q6J("ngIf",!s.isExpired)}let Tr=(()=>{class n{constructor(t,o,i,_,r,l,d){this.authStorageService=t,this.rbdService=o,this.modalService=i,this.cdDatePipe=_,this.taskListService=r,this.taskWrapper=l,this.actionLabels=d,this.icons=T.P,this.executingTasks=[],this.selection=new Re.r,this.tableStatus=new se.E,this.disablePurgeBtn=!0,this.permission=this.authStorageService.getPermissions().rbdImage,this.tableActions=[{permission:"update",icon:T.P.undo,click:()=>this.restoreModal(),name:this.actionLabels.RESTORE},{permission:"delete",icon:T.P.destroy,click:()=>this.deleteModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"ID",prop:"id",flexGrow:1,cellTransformation:Le.e.executing},{name:"Name",prop:"name",flexGrow:1},{name:"Pool",prop:"pool_name",flexGrow:1},{name:"Namespace",prop:"namespace",flexGrow:1},{name:"Status",prop:"deferment_end_time",flexGrow:1,cellTemplate:this.expiresTpl},{name:"Deleted At",prop:"deletion_time",flexGrow:1,pipe:this.cdDatePipe}],this.taskListService.init(()=>this.rbdService.listTrash(),i=>this.prepareResponse(i),i=>this.images=i,()=>this.onFetchError(),i=>["rbd/trash/remove","rbd/trash/restore"].includes(i.name),(i,_)=>new v.N(i.pool_name,i.namespace,i.id).toString()===_.metadata.image_id_spec,void 0)}prepareResponse(t){let o=[];const i={};let _;if(t.forEach(r=>{C().isUndefined(i[r.status])&&(i[r.status]=[]),i[r.status].push(r.pool_name),o=o.concat(r.value),this.disablePurgeBtn=!o.length}),i[3]?_=3:i[1]?_=1:i[2]&&(_=2),_){const r=(i[_].length>1?"pools ":"pool ")+i[_].join();this.tableStatus=new se.E(_,r)}else this.tableStatus=new se.E;return o.forEach(r=>{r.cdIsExpired=Oe()().isAfter(r.deferment_end_time)}),o}onFetchError(){this.table.reset(),this.tableStatus=new se.E(er.T.ValueException)}updateSelection(t){this.selection=t}restoreModal(){const t={poolName:this.selection.first().pool_name,namespace:this.selection.first().namespace,imageName:this.selection.first().name,imageId:this.selection.first().id};this.modalRef=this.modalService.show(_r,t)}deleteModal(){const t=this.selection.first().pool_name,o=this.selection.first().namespace,i=this.selection.first().id,_=this.selection.first().deferment_end_time,r=Oe()().isAfter(_),l=new v.N(t,o,i);this.modalRef=this.modalService.show(pe.M,{itemDescription:"RBD",itemNames:[l],bodyTemplate:this.deleteTpl,bodyContext:{expiresAt:_,isExpired:r},submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new M.R("rbd/trash/remove",{image_id_spec:l.toString()}),call:this.rbdService.removeTrash(l,!0)})})}purgeModal(){this.modalService.show(ir)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(oe.j),e.Y36(H),e.Y36(de.Z),e.Y36(Ge.N),e.Y36(ce.j),e.Y36(m.P),e.Y36(D.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rbd-trash-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(W.a,7),e.Gf(ar,7),e.Gf(rr,7)),2&t){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.expiresTpl=i.first),e.iGM(i=e.CRH())&&(o.deleteTpl=i.first)}},features:[e._Bn([ce.j])],decls:9,vars:8,consts:function(){let s,t,o,i;return s="Purge Trash",t="Expired at",o="Protected until",i="This image is protected until " + "\ufffd0\ufffd" + ".",[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","status","autoReload","fetchData","updateSelection"],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"],["class","btn btn-light","type","button",3,"disabled","click",4,"ngIf"],["expiresTpl",""],["deleteTpl",""],["type","button",1,"btn","btn-light",3,"disabled","click"],["aria-hidden","true",3,"ngClass"],s,[4,"ngIf"],t,o,["class","text-danger",4,"ngIf"],[1,"text-danger"],i]},template:function(t,o){1&t&&(e._UZ(0,"cd-rbd-tabs"),e.TgZ(1,"cd-table",0),e.NdJ("fetchData",function(){return o.taskListService.fetch()})("updateSelection",function(_){return o.updateSelection(_)}),e.TgZ(2,"div",1),e._UZ(3,"cd-table-actions",2),e.YNc(4,cr,4,4,"button",3),e.qZA()(),e.YNc(5,ur,4,5,"ng-template",null,4,e.W1O),e.YNc(7,gr,1,1,"ng-template",null,5,e.W1O)),2&t&&(e.xp6(1),e.Q6J("data",o.images)("columns",o.columns)("status",o.tableStatus)("autoReload",-1),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("ngIf",o.permission.delete))},directives:[et,W.a,Ee.K,c.O5,$.o,c.mk],pipes:[Ge.N],styles:[""]}),n})(),Gt=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[c.ez,si,a.u5,a.UX,L.Oz,L.dT,L.HK,be.b,Ae.m,g.Bz,ne.xc]]}),n})();const fr=[{path:"",redirectTo:"rbd",pathMatch:"full"},{path:"rbd",canActivate:[U.T,re.P],data:{moduleStatusGuardConfig:{uiApiPath:"block/rbd",redirectTo:"error",header:"No RBD pools available",button_name:"Create RBD pool",button_route:"/pool/create"},breadcrumbs:"Images"},children:[{path:"",component:Ha},{path:"namespaces",component:ja,data:{breadcrumbs:"Namespaces"}},{path:"trash",component:Tr,data:{breadcrumbs:"Trash"}},{path:"performance",component:Wa,data:{breadcrumbs:"Overall Performance"}},{path:D.MQ.CREATE,component:Be,data:{breadcrumbs:D.Qn.CREATE}},{path:`${D.MQ.EDIT}/:image_spec`,component:Be,data:{breadcrumbs:D.Qn.EDIT}},{path:`${D.MQ.CLONE}/:image_spec/:snap`,component:Be,data:{breadcrumbs:D.Qn.CLONE}},{path:`${D.MQ.COPY}/:image_spec`,component:Be,data:{breadcrumbs:D.Qn.COPY}},{path:`${D.MQ.COPY}/:image_spec/:snap`,component:Be,data:{breadcrumbs:D.Qn.COPY}}]},{path:"mirroring",component:os,canActivate:[U.T,re.P],data:{moduleStatusGuardConfig:{uiApiPath:"block/mirroring",redirectTo:"error",header:"RBD mirroring is not configured",button_name:"Configure RBD Mirroring",button_title:"This will create rbd-mirror service and a replicated RBD pool",component:"RBD Mirroring",uiConfig:!0},breadcrumbs:"Mirroring"},children:[{path:`${D.MQ.EDIT}/:pool_name`,component:_s,outlet:"modal"}]},{path:"iscsi",canActivate:[U.T],data:{breadcrumbs:"iSCSI"},children:[{path:"",redirectTo:"overview",pathMatch:"full"},{path:"overview",component:ii,data:{breadcrumbs:"Overview"}},{path:"targets",data:{breadcrumbs:"Targets"},children:[{path:"",component:qn},{path:D.MQ.CREATE,component:ft,data:{breadcrumbs:D.Qn.CREATE}},{path:`${D.MQ.EDIT}/:target_iqn`,component:ft,data:{breadcrumbs:D.Qn.EDIT}}]}]}];let Cr=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[Gt,g.Bz.forChild(fr)]]}),n})()},60950:(ut,he,p)=>{p.d(he,{d:()=>z});var c=p(89724),a=p(1659),g=p(23815),ne=p.n(g),L=p(7357),be=p(65862),D=p(95463),U=p(30633),re=p(28211),Ae=p(34089),Ne=p(41582),C=p(11048),le=p(56310),F=p(18372),ie=p(87925),Y=p(94276);let e=(()=>{class A{constructor(m,f){this.control=m,this.formatter=f}setValue(m){const f=this.formatter.toMilliseconds(m);this.control.control.setValue(`${f} ms`)}ngOnInit(){this.setValue(this.control.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.control.value))}onUpdate(m){this.setValue(m)}}return A.\u0275fac=function(m){return new(m||A)(c.Y36(a.a5),c.Y36(re.H))},A.\u0275dir=c.lG2({type:A,selectors:[["","cdMilliseconds",""]],hostBindings:function(m,f){1&m&&c.NdJ("blur",function(h){return f.onUpdate(h.target.value)})},inputs:{ngDataReady:"ngDataReady"}}),A})();var X=p(20044);let Fe=(()=>{class A{constructor(m,f,P,h){this.elementRef=m,this.control=f,this.dimlessBinaryPerSecondPipe=P,this.formatter=h,this.ngModelChange=new c.vpe,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.el.value))}setValue(m){/^[\d.]+$/.test(m)&&(m+=this.defaultUnit||"m");const f=this.formatter.toBytes(m,0),P=this.round(f);this.el.value=this.dimlessBinaryPerSecondPipe.transform(P),null!==f?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(m){if(null!==m&&0!==m){if(!ne().isUndefined(this.minBytes)&&m<this.minBytes)return this.minBytes;if(!ne().isUndefined(this.maxBytes)&&m>this.maxBytes)return this.maxBytes;if(!ne().isUndefined(this.roundPower)){const f=Math.round(Math.log(m)/Math.log(this.roundPower));return Math.pow(this.roundPower,f)}}return m}onBlur(m){this.setValue(m)}}return A.\u0275fac=function(m){return new(m||A)(c.Y36(c.SBq),c.Y36(a.a5),c.Y36(X.O),c.Y36(re.H))},A.\u0275dir=c.lG2({type:A,selectors:[["","cdDimlessBinaryPerSecond",""]],hostBindings:function(m,f){1&m&&c.NdJ("blur",function(h){return f.onBlur(h.target.value)})},inputs:{ngDataReady:"ngDataReady",minBytes:"minBytes",maxBytes:"maxBytes",roundPower:"roundPower",defaultUnit:"defaultUnit"},outputs:{ngModelChange:"ngModelChange"}}),A})(),De=(()=>{class A{constructor(m,f){this.formatter=m,this.ngControl=f}setValue(m){const f=this.formatter.toIops(m);this.ngControl.control.setValue(`${f} IOPS`)}ngOnInit(){this.setValue(this.ngControl.value),this.ngDataReady&&this.ngDataReady.subscribe(()=>this.setValue(this.ngControl.value))}onUpdate(m){this.setValue(m)}}return A.\u0275fac=function(m){return new(m||A)(c.Y36(re.H),c.Y36(a.a5))},A.\u0275dir=c.lG2({type:A,selectors:[["","cdIops",""]],hostBindings:function(m,f){1&m&&c.NdJ("blur",function(h){return f.onUpdate(h.target.value)})},inputs:{ngDataReady:"ngDataReady"}}),A})();function v(A,M){if(1&A&&(c.ynx(0),c._UZ(1,"input",17),c.BQk()),2&A){const m=c.oxw().$implicit,f=c.oxw(2);c.xp6(1),c.Q6J("id",m.name)("name",m.name)("formControlName",m.name)("ngDataReady",f.ngDataReady)}}function Pe(A,M){if(1&A&&(c.ynx(0),c._UZ(1,"input",18),c.BQk()),2&A){const m=c.oxw().$implicit,f=c.oxw(2);c.xp6(1),c.Q6J("id",m.name)("name",m.name)("formControlName",m.name)("ngDataReady",f.ngDataReady)}}function H(A,M){if(1&A&&(c.ynx(0),c._UZ(1,"input",19),c.BQk()),2&A){const m=c.oxw().$implicit,f=c.oxw(2);c.xp6(1),c.Q6J("id",m.name)("name",m.name)("formControlName",m.name)("ngDataReady",f.ngDataReady)}}function N(A,M){1&A&&(c.TgZ(0,"span",20),c.SDv(1,21),c.qZA())}const x=function(A){return{active:A}},T=function(A){return[A]};function k(A,M){if(1&A){const m=c.EpF();c.TgZ(0,"div",10)(1,"label",11),c._uU(2),c.TgZ(3,"cd-helper"),c._uU(4),c.qZA()(),c.TgZ(5,"div")(6,"div",12),c.ynx(7,13),c.YNc(8,v,2,4,"ng-container",14),c.YNc(9,Pe,2,4,"ng-container",14),c.YNc(10,H,2,4,"ng-container",14),c.BQk(),c.TgZ(11,"button",15),c.NdJ("click",function(){const h=c.CHM(m).$implicit;return c.oxw(2).reset(h.name)}),c._UZ(12,"i",7),c.qZA()(),c.YNc(13,N,2,0,"span",16),c.qZA()()}if(2&A){const m=M.$implicit,f=c.oxw().$implicit,P=c.oxw(),h=c.MAs(1);c.xp6(1),c.Q6J("for",m.name),c.xp6(1),c.Oqu(m.displayName),c.xp6(2),c.Oqu(m.description),c.xp6(1),c.Gre("cd-col-form-input ",f.heading,""),c.xp6(2),c.Q6J("ngSwitch",m.type),c.xp6(1),c.Q6J("ngSwitchCase",P.configurationType.milliseconds),c.xp6(1),c.Q6J("ngSwitchCase",P.configurationType.bps),c.xp6(1),c.Q6J("ngSwitchCase",P.configurationType.iops),c.xp6(1),c.Q6J("ngClass",c.VKq(13,x,P.isDisabled(m.name))),c.xp6(1),c.Q6J("ngClass",c.VKq(15,T,P.icons.erase)),c.xp6(1),c.Q6J("ngIf",P.form.showError("configuration."+m.name,h,"min"))}}function Z(A,M){if(1&A){const m=c.EpF();c.TgZ(0,"div",4)(1,"h4",5)(2,"span",6),c.NdJ("click",function(){const h=c.CHM(m).$implicit;return c.oxw().toggleSectionVisibility(h.class)}),c._uU(3),c._UZ(4,"i",7),c.qZA()(),c.TgZ(5,"div",8),c.YNc(6,k,14,17,"div",9),c.qZA()()}if(2&A){const m=M.$implicit,f=c.oxw();c.xp6(3),c.hij(" ",m.heading," "),c.xp6(1),c.Q6J("ngClass",f.sectionVisibility[m.class]?f.icons.minusCircle:f.icons.addCircle),c.xp6(1),c.Tol(m.class),c.Q6J("hidden",!f.sectionVisibility[m.class]),c.xp6(1),c.Q6J("ngForOf",m.options)}}let z=(()=>{class A{constructor(m,f){this.formatterService=m,this.rbdConfigurationService=f,this.initializeData=new L.t(1),this.changes=new c.vpe,this.icons=be.P,this.ngDataReady=new c.vpe,this.configurationType=U.r,this.sectionVisibility={}}ngOnInit(){const m=this.createConfigurationFormGroup();this.form.addControl("configuration",m),m.valueChanges.subscribe(()=>{this.changes.emit(this.getDirtyValues.bind(this))}),this.initializeData&&this.initializeData.subscribe(f=>{this.initialData=f.initialData;const P=f.sourceType;this.rbdConfigurationService.getWritableOptionFields().forEach(h=>{const $=f.initialData.filter(K=>K.name===h.name).pop();$&&$.source===P&&this.form.get(`configuration.${h.name}`).setValue($.value)}),this.ngDataReady.emit()}),this.rbdConfigurationService.getWritableSections().forEach(f=>this.sectionVisibility[f.class]=!1)}getDirtyValues(m=!1,f){if(m&&!f)throw new Error("ProgrammingError: If local values shall be included, a proper localFieldType argument has to be provided, too");const P={};return this.rbdConfigurationService.getWritableOptionFields().forEach(h=>{const $=this.form.get("configuration").get(h.name);this.initialData&&this.initialData[h.name]===$.value||($.dirty||m&&$.source===f)&&(P[h.name]=null===$.value?$.value:h.type===U.r.bps?this.formatterService.toBytes($.value):h.type===U.r.milliseconds?this.formatterService.toMilliseconds($.value):h.type===U.r.iops?this.formatterService.toIops($.value):$.value)}),P}createConfigurationFormGroup(){const m=new D.d({});return this.rbdConfigurationService.getWritableOptionFields().forEach(f=>{let P;if(f.type!==U.r.milliseconds&&f.type!==U.r.iops&&f.type!==U.r.bps)throw new Error(`Type ${f.type} is unknown, you may need to add it to RbdConfiguration class`);{let h=0;ne().forEach(this.initialData,$=>{$.name===f.name&&(h=$.value)}),P=new a.NI(h,a.kI.min(0))}m.addControl(f.name,P)}),m}reset(m){const f=this.form.get("configuration").get(m);f.disabled?(f.setValue(f.previousValue||0),f.enable(),f.previousValue||f.markAsPristine()):(f.previousValue=f.value,f.setValue(null),f.markAsDirty(),f.disable())}isDisabled(m){return this.form.get("configuration").get(m).disabled}toggleSectionVisibility(m){this.sectionVisibility[m]=!this.sectionVisibility[m]}}return A.\u0275fac=function(m){return new(m||A)(c.Y36(re.H),c.Y36(Ae.n))},A.\u0275cmp=c.Xpm({type:A,selectors:[["cd-rbd-configuration-form"]],inputs:{form:"form",initializeData:"initializeData"},outputs:{changes:"changes"},decls:5,vars:2,consts:function(){let M,m,f;return M="RBD Configuration",m="Remove the local configuration value. The parent configuration value will be inherited and used instead.",f="The minimum value is 0",[[3,"formGroup"],["cfgFormGroup",""],M,["class","col-12",4,"ngFor","ngForOf"],[1,"col-12"],[1,"cd-header"],[1,"collapsible",3,"click"],["aria-hidden","true",3,"ngClass"],[3,"hidden"],["class","form-group row",4,"ngFor","ngForOf"],[1,"form-group","row"],[1,"cd-col-form-label",3,"for"],[1,"input-group"],[3,"ngSwitch"],[4,"ngSwitchCase"],["type","button","data-toggle","button","title",m,1,"btn","btn-light",3,"ngClass","click"],["class","invalid-feedback",4,"ngIf"],["type","text","cdMilliseconds","",1,"form-control",3,"id","name","formControlName","ngDataReady"],["type","text","defaultUnit","b","cdDimlessBinaryPerSecond","",1,"form-control",3,"id","name","formControlName","ngDataReady"],["type","text","cdIops","",1,"form-control",3,"id","name","formControlName","ngDataReady"],[1,"invalid-feedback"],f]},template:function(m,f){1&m&&(c.TgZ(0,"fieldset",0,1)(2,"legend"),c.SDv(3,2),c.qZA(),c.YNc(4,Z,7,7,"div",3),c.qZA()),2&m&&(c.Q6J("formGroup",f.form.get("configuration")),c.xp6(4),c.Q6J("ngForOf",f.rbdConfigurationService.sections))},directives:[a.JL,a.sg,Ne.V,C.sg,C.mk,le.P,F.S,C.RF,C.n9,ie.o,a.Fj,Y.b,e,a.JJ,a.u,Fe,De,C.O5],styles:[".collapsible[_ngcontent-%COMP%]{cursor:pointer;user-select:none}"]}),A})()},42176:(ut,he,p)=>{p.d(he,{P:()=>H});var c=p(83697),a=p(30633),g=p(89724);let ne=(()=>{class N{transform(T){return{0:"global",1:"pool",2:"image"}[T]}}return N.\u0275fac=function(T){return new(T||N)},N.\u0275pipe=g.Yjl({name:"rbdConfigurationSource",type:N,pure:!0}),N})();var L=p(28211),be=p(34089),D=p(11048),U=p(20044),re=p(48537),Ae=p(21766);const Ne=["configurationSourceTpl"],C=["configurationValueTpl"],le=["poolConfTable"];function F(N,x){1&N&&(g.TgZ(0,"span"),g.SDv(1,6),g.qZA())}function ie(N,x){1&N&&(g.TgZ(0,"strong"),g.SDv(1,7),g.qZA())}function Y(N,x){1&N&&(g.TgZ(0,"strong"),g.SDv(1,8),g.qZA())}function e(N,x){1&N&&(g.TgZ(0,"div",4),g.YNc(1,F,2,0,"span",5),g.YNc(2,ie,2,0,"strong",5),g.YNc(3,Y,2,0,"strong",5),g.qZA()),2&N&&(g.Q6J("ngSwitch",x.value),g.xp6(1),g.Q6J("ngSwitchCase","global"),g.xp6(1),g.Q6J("ngSwitchCase","image"),g.xp6(1),g.Q6J("ngSwitchCase","pool"))}function X(N,x){if(1&N&&(g.TgZ(0,"span"),g._uU(1),g.ALo(2,"dimlessBinaryPerSecond"),g.qZA()),2&N){const T=g.oxw().value;g.xp6(1),g.Oqu(g.lcZ(2,1,T))}}function Fe(N,x){if(1&N&&(g.TgZ(0,"span"),g._uU(1),g.ALo(2,"milliseconds"),g.qZA()),2&N){const T=g.oxw().value;g.xp6(1),g.Oqu(g.lcZ(2,1,T))}}function De(N,x){if(1&N&&(g.TgZ(0,"span"),g._uU(1),g.ALo(2,"iops"),g.qZA()),2&N){const T=g.oxw().value;g.xp6(1),g.Oqu(g.lcZ(2,1,T))}}function v(N,x){if(1&N&&(g.TgZ(0,"span"),g._uU(1),g.qZA()),2&N){const T=g.oxw().value;g.xp6(1),g.Oqu(T)}}function Pe(N,x){if(1&N&&(g.TgZ(0,"div",4),g.YNc(1,X,3,3,"span",5),g.YNc(2,Fe,3,3,"span",5),g.YNc(3,De,3,3,"span",5),g.YNc(4,v,2,1,"span",9),g.qZA()),2&N){const T=x.row,k=g.oxw();g.Q6J("ngSwitch",T.type),g.xp6(1),g.Q6J("ngSwitchCase",k.typeField.bps),g.xp6(1),g.Q6J("ngSwitchCase",k.typeField.milliseconds),g.xp6(1),g.Q6J("ngSwitchCase",k.typeField.iops)}}let H=(()=>{class N{constructor(T,k){this.formatterService=T,this.rbdConfigurationService=k,this.sourceField=a.h,this.typeField=a.r}ngOnInit(){this.poolConfigurationColumns=[{prop:"displayName",name:"Name"},{prop:"description",name:"Description"},{prop:"name",name:"Key"},{prop:"source",name:"Source",cellTemplate:this.configurationSourceTpl,pipe:new ne},{prop:"value",name:"Value",cellTemplate:this.configurationValueTpl}]}ngOnChanges(){!this.data||(this.data=this.data.filter(T=>this.rbdConfigurationService.getOptionFields().map(k=>k.name).includes(T.name)))}}return N.\u0275fac=function(T){return new(T||N)(g.Y36(L.H),g.Y36(be.n))},N.\u0275cmp=g.Xpm({type:N,selectors:[["cd-rbd-configuration-table"]],viewQuery:function(T,k){if(1&T&&(g.Gf(Ne,7),g.Gf(C,7),g.Gf(le,7)),2&T){let Z;g.iGM(Z=g.CRH())&&(k.configurationSourceTpl=Z.first),g.iGM(Z=g.CRH())&&(k.configurationValueTpl=Z.first),g.iGM(Z=g.CRH())&&(k.poolConfTable=Z.first)}},inputs:{data:"data"},features:[g.TTD],decls:6,vars:2,consts:function(){let x,T,k;return x="Global",T="Image",k="Pool",[["identifier","name",3,"data","columns"],["poolConfTable",""],["configurationSourceTpl",""],["configurationValueTpl",""],[3,"ngSwitch"],[4,"ngSwitchCase"],x,T,k,[4,"ngSwitchDefault"]]},template:function(T,k){1&T&&(g._UZ(0,"cd-table",0,1),g.YNc(2,e,4,4,"ng-template",null,2,g.W1O),g.YNc(4,Pe,5,4,"ng-template",null,3,g.W1O)),2&T&&g.Q6J("data",k.data)("columns",k.poolConfigurationColumns)},directives:[c.a,D.RF,D.n9,D.ED],pipes:[U.O,re.J,Ae.A],styles:[""]}),N})()}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/543.eec5c8f9f29060da.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/543.eec5c8f9f29060da.js
deleted file mode 100644 (file)
index 1971c55..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[543],{38543:(qi,we,l)=>{l.r(we),l.d(we,{RgwModule:()=>u_,RoutedRgwModule:()=>ki});var M=l(11048),a=l(1659),w=l(55860),O=l(71334),ke=l(37496),A=l(79512),$_=l(4268),I_=l(44466),v_=l(66265),F_=l(23815),R=l.n(F_),_e=l(35758),be=l(95152),qe=l(33394),Be=l(64762),He=l(19725),Fe=l(25917),Xe=l(19773),h_=l(96736),L_=l(5304),Ne=l(20523),y_=l(93523),e=l(89724);let D=class{constructor(o,_){this.http=o,this.rgwDaemonService=_,this.url="api/rgw/user"}list(){return this.enumerate().pipe((0,Xe.zg)(o=>o.length>0?(0,_e.D)(o.map(_=>this.get(_))):(0,Fe.of)([])))}enumerate(){return this.rgwDaemonService.request(o=>this.http.get(this.url,{params:o}))}enumerateEmail(){return this.rgwDaemonService.request(o=>this.http.get(`${this.url}/get_emails`,{params:o}))}get(o){return this.rgwDaemonService.request(_=>this.http.get(`${this.url}/${o}`,{params:_}))}getQuota(o){return this.rgwDaemonService.request(_=>this.http.get(`${this.url}/${o}/quota`,{params:_}))}create(o){return this.rgwDaemonService.request(_=>(R().keys(o).forEach(n=>{_=_.append(n,o[n])}),this.http.post(this.url,null,{params:_})))}update(o,_){return this.rgwDaemonService.request(n=>(R().keys(_).forEach(i=>{n=n.append(i,_[i])}),this.http.put(`${this.url}/${o}`,null,{params:n})))}updateQuota(o,_){return this.rgwDaemonService.request(n=>(R().keys(_).forEach(i=>{n=n.append(i,_[i])}),this.http.put(`${this.url}/${o}/quota`,null,{params:n})))}delete(o){return this.rgwDaemonService.request(_=>this.http.delete(`${this.url}/${o}`,{params:_}))}createSubuser(o,_){return this.rgwDaemonService.request(n=>(R().keys(_).forEach(i=>{n=n.append(i,_[i])}),this.http.post(`${this.url}/${o}/subuser`,null,{params:n})))}deleteSubuser(o,_){return this.rgwDaemonService.request(n=>this.http.delete(`${this.url}/${o}/subuser/${_}`,{params:n}))}addCapability(o,_,n){return this.rgwDaemonService.request(i=>(i=(i=i.append("type",_)).append("perm",n),this.http.post(`${this.url}/${o}/capability`,null,{params:i})))}deleteCapability(o,_,n){return this.rgwDaemonService.request(i=>(i=(i=i.append("type",_)).append("perm",n),this.http.delete(`${this.url}/${o}/capability`,{params:i})))}addS3Key(o,_){return this.rgwDaemonService.request(n=>(n=n.append("key_type","s3"),R().keys(_).forEach(i=>{n=n.append(i,_[i])}),this.http.post(`${this.url}/${o}/key`,null,{params:n})))}deleteS3Key(o,_){return this.rgwDaemonService.request(n=>(n=(n=n.append("key_type","s3")).append("access_key",_),this.http.delete(`${this.url}/${o}/key`,{params:n})))}exists(o){return this.get(o).pipe((0,h_.h)(!0),(0,L_.K)(_=>(R().isFunction(_.preventDefault)&&_.preventDefault(),(0,Fe.of)(!1))))}emailExists(o){return o=decodeURIComponent(o),this.enumerateEmail().pipe((0,Xe.zg)(_=>{const n=R().indexOf(_,o);return(0,Fe.of)(-1!==n)}))}};D.\u0275fac=function(o){return new(o||D)(e.LFG(He.eN),e.LFG(Ne.b))},D.\u0275prov=e.Yz7({token:D,factory:D.\u0275fac,providedIn:"root"}),D=(0,Be.gn)([y_.o,(0,Be.w6)("design:paramtypes",[He.eN,Ne.b])],D);var k=l(65862),te=l(18001),Ke=l(93614),p=l(90070),he=l(97161);class We{constructor(){this.kmsProviders=["vault"],this.authMethods=["token","agent"],this.secretEngines=["kv","transit"],this.sse_s3="AES256",this.sse_kms="aws:kms"}}var K=(()=>{return(t=K||(K={})).ENABLED="Enabled",t.DISABLED="Disabled",K;var t})(),z=(()=>{return(t=z||(z={})).ENABLED="Enabled",t.SUSPENDED="Suspended",z;var t})(),Q=l(62862),ne=l(60312),Y=l(41582),H=l(56310),q=l(87925),X=l(94276),Le=l(18372),J=l(30839);function D_(t,o){1&t&&(e.TgZ(0,"option",29),e.SDv(1,30),e.qZA()),2&t&&e.Q6J("ngValue",null)}function x_(t,o){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function Z_(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,33),e.qZA())}function w_(t,o){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",22),e.SDv(3,23),e.qZA(),e.TgZ(4,"div",24)(5,"select",25),e.YNc(6,D_,2,1,"option",26),e.YNc(7,x_,2,2,"option",27),e.qZA(),e.YNc(8,Z_,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(6),e.Q6J("ngIf",null!==_.kmsProviders),e.xp6(1),e.Q6J("ngForOf",_.kmsProviders),e.xp6(1),e.Q6J("ngIf",_.configForm.showError("kms_provider",n,"required"))}}function k_(t,o){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function q_(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,37),e.qZA())}function B_(t,o){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",34),e.SDv(3,35),e.qZA(),e.TgZ(4,"div",24)(5,"select",36),e.YNc(6,k_,2,2,"option",27),e.qZA(),e.YNc(7,q_,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(6),e.Q6J("ngForOf",_.authMethods),e.xp6(1),e.Q6J("ngIf",_.configForm.showError("auth_method",n,"required"))}}function H_(t,o){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function X_(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,41),e.qZA())}function K_(t,o){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",38),e.SDv(3,39),e.qZA(),e.TgZ(4,"div",24)(5,"select",40),e.YNc(6,H_,2,2,"option",27),e.qZA(),e.YNc(7,X_,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(6),e.Q6J("ngForOf",_.secretEngines),e.xp6(1),e.Q6J("ngIf",_.configForm.showError("secret_engine",n,"required"))}}function z_(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,45),e.qZA())}function Q_(t,o){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",42),e.SDv(3,43),e.qZA(),e.TgZ(4,"div",24),e._UZ(5,"input",44),e.YNc(6,z_,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(6),e.Q6J("ngIf",_.configForm.showError("secret_path",n,"required"))}}function Y_(t,o){1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",46),e.SDv(3,47),e.qZA(),e.TgZ(4,"div",24),e._UZ(5,"input",48),e.qZA()()())}function J_(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,52),e.qZA())}function V_(t,o){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",49),e.SDv(3,50),e.qZA(),e.TgZ(4,"div",24),e._UZ(5,"input",51),e.YNc(6,J_,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(6),e.Q6J("ngIf",_.configForm.showError("address",n,"required"))}}function j_(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,57),e.qZA())}function et(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div",7)(1,"label",53)(2,"span"),e.SDv(3,54),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,55),e.qZA()(),e.TgZ(6,"div",24)(7,"input",56),e.NdJ("change",function(i){return e.CHM(_),e.oxw().fileUpload(i.target.files,"token")}),e.qZA(),e.YNc(8,j_,2,0,"span",28),e.qZA()()}if(2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(8),e.Q6J("ngIf",_.configForm.showError("token",n,"required"))}}function _t(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,62),e.qZA())}function tt(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",7)(2,"label",58)(3,"span"),e.SDv(4,59),e.qZA(),e.TgZ(5,"cd-helper"),e.SDv(6,60),e.qZA()(),e.TgZ(7,"div",24)(8,"input",61),e.NdJ("change",function(i){return e.CHM(_),e.oxw().fileUpload(i.target.files,"ssl_cert")}),e.qZA(),e.YNc(9,_t,2,0,"span",28),e.qZA()()()}if(2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(9),e.Q6J("ngIf",_.configForm.showError("ssl_cert",n,"required"))}}function nt(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,67),e.qZA())}function ot(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",7)(2,"label",63)(3,"span"),e.SDv(4,64),e.qZA(),e.TgZ(5,"cd-helper"),e.SDv(6,65),e.qZA()(),e.TgZ(7,"div",24)(8,"input",66),e.NdJ("change",function(i){return e.CHM(_),e.oxw().fileUpload(i.target.files,"client_cert")}),e.qZA(),e.YNc(9,nt,2,0,"span",28),e.qZA()()()}if(2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(9),e.Q6J("ngIf",_.configForm.showError("client_cert",n,"required"))}}function it(t,o){1&t&&(e.TgZ(0,"span",32),e.SDv(1,72),e.qZA())}function st(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",7)(2,"label",68)(3,"span"),e.SDv(4,69),e.qZA(),e.TgZ(5,"cd-helper"),e.SDv(6,70),e.qZA()(),e.TgZ(7,"div",24)(8,"input",71),e.NdJ("change",function(i){return e.CHM(_),e.oxw().fileUpload(i.target.files,"client_key")}),e.qZA(),e.YNc(9,it,2,0,"span",28),e.qZA()()()}if(2&t){const _=e.oxw(),n=e.MAs(5);e.xp6(9),e.Q6J("ngIf",_.configForm.showError("client_key",n,"required"))}}let at=(()=>{class t{constructor(_,n,i,s,r,d,g){this.formBuilder=_,this.activeModal=n,this.router=i,this.actionLabels=s,this.rgwBucketService=r,this.rgwEncryptionModal=d,this.notificationService=g,this.vaultAddress=/^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{4}$/,this.submitAction=new e.vpe,this.createForm()}ngOnInit(){this.kmsProviders=this.rgwEncryptionModal.kmsProviders,this.authMethods=this.rgwEncryptionModal.authMethods,this.secretEngines=this.rgwEncryptionModal.secretEngines}createForm(){this.configForm=this.formBuilder.group({address:[null,[a.kI.required,p.h.custom("vaultPattern",_=>!R().isEmpty(_)&&!this.vaultAddress.test(_))]],kms_provider:["vault",a.kI.required],encryptionType:["aws:kms",a.kI.required],auth_method:["token",a.kI.required],secret_engine:["kv",a.kI.required],secret_path:["/"],namespace:[null],token:[null,[p.h.requiredIf({auth_method:"token"})]],ssl_cert:[null,p.h.sslCert()],client_cert:[null,p.h.pemCert()],client_key:[null,p.h.sslPrivKey()],kmsEnabled:[{value:!1}],s3Enabled:[{value:!1}]})}fileUpload(_,n){const i=_[0];(new FileReader).addEventListener("load",()=>{const r=this.configForm.get(n);r.setValue(i),r.markAsDirty(),r.markAsTouched(),r.updateValueAndValidity()})}onSubmit(){const _=this.configForm.value;this.rgwBucketService.setEncryptionConfig(_.encryptionType,_.kms_provider,_.auth_method,_.secret_engine,_.secret_path,_.namespace,_.address,_.token,_.owner,_.ssl_cert,_.client_cert,_.client_key).subscribe({next:()=>{this.notificationService.show(te.k.success,"Updated RGW Encryption Configuration values")},error:n=>{this.notificationService.show(te.k.error,n),this.configForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close(),this.router.routeReuseStrategy.shouldReuseRoute=()=>!1,this.router.onSameUrlNavigation="reload",this.router.navigate([this.router.url])}})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Q.O),e.Y36(O.Kz),e.Y36(w.F0),e.Y36(A.p4),e.Y36(be.o),e.Y36(We),e.Y36(he.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-config-modal"]],outputs:{submitAction:"submitAction"},features:[e._Bn([We])],decls:30,vars:14,consts:function(){let o,_,n,i,s,r,d,g,E,S,G,P,b,N,m,W,U,$,I,v,F,h,L,y,f,x,T,B;return o="Update RGW Encryption Configurations",_="Encryption Type",n="SSE-S3 Encryption",i="SSE-KMS Encryption",s="Key management service provider",r="-- Select a provider --",d="This field is required.",g="Authentication Method",E="This field is required.",S="Secret Engine",G="This field is required.",P="Secret Path ",b="This field is required.",N="Namespace ",m="Vault Address ",W="This field is required.",U="Token",$=" The token authentication method expects a Vault token to be present in a plaintext file. ",I="This field is required.",v="CA Certificate",F="The SSL certificate in PEM format.",h="This field is required.",L="Client Certificate",y="The Client certificate in PEM format.",f="This field is required.",x="Client Private Key",T="The Client Private Key in PEM format.",B="This field is required.",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],["name","configForm",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","encryptionType",1,"cd-col-form-label","required"],_,[1,"col-md-auto","custom-checkbox","form-check-inline","ms-3"],["formControlName","encryptionType","id","s3Enabled","type","radio","name","encryptionType","value","AES256",1,"form-check-input"],["for","s3Enabled",1,"custom-check-label"],n,[1,"col-md-auto","custom-checkbox","form-check-inline"],["formControlName","encryptionType","id","kmsEnabled","name","encryptionType","value","aws:kms","type","radio",1,"form-check-input"],["for","kmsEnabled",1,"custom-check-label"],i,[4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"modal-footer"],[3,"submitText","form","submitActionEvent"],["for","kms_provider",1,"cd-col-form-label","required"],s,[1,"cd-col-form-input"],["id","kms_provider","name","kms_provider","formControlName","kms_provider",1,"form-select"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],[3,"ngValue"],r,[3,"value"],[1,"invalid-feedback"],d,["for","auth_method",1,"cd-col-form-label","required"],g,["id","auth_method","name","auth_method","formControlName","auth_method",1,"form-select"],E,["for","secret_engine",1,"cd-col-form-label","required"],S,["id","secret_engine","name","secret_engine","formControlName","secret_engine",1,"form-select"],G,["for","secret_path",1,"cd-col-form-label"],P,["id","secret_path","name","secret_path","type","text","formControlName","secret_path",1,"form-control"],b,["for","namespace",1,"cd-col-form-label"],N,["id","namespace","name","namespace","type","text","formControlName","namespace",1,"form-control"],["for","address",1,"cd-col-form-label","required"],m,["id","address","name","address","formControlName","address","placeholder","http://127.0.0.1:8000",1,"form-control"],W,["for","token",1,"cd-col-form-label","required"],U,$,["type","file","formControlName","token",3,"change"],I,["for","ssl_cert",1,"cd-col-form-label"],v,F,["type","file","formControlName","ssl_cert",3,"change"],h,["for","client_cert",1,"cd-col-form-label"],L,y,["type","file","formControlName","client_cert",3,"change"],f,["for","client_key",1,"cd-col-form-label"],x,T,["type","file",3,"change"],B]},template:function(_,n){1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10),e._UZ(11,"input",11),e.TgZ(12,"label",12),e.SDv(13,13),e.qZA()(),e.TgZ(14,"div",14),e._UZ(15,"input",15),e.TgZ(16,"label",16),e.SDv(17,17),e.qZA()()(),e.YNc(18,w_,9,3,"div",18),e.YNc(19,B_,8,2,"div",18),e.YNc(20,K_,8,2,"div",18),e.YNc(21,Q_,7,1,"div",18),e.YNc(22,Y_,6,0,"div",18),e.YNc(23,V_,7,1,"div",18),e.YNc(24,et,9,1,"div",19),e.YNc(25,tt,10,1,"div",18),e.YNc(26,ot,10,1,"div",18),e.YNc(27,st,10,1,"div",18),e.qZA(),e.TgZ(28,"div",20)(29,"cd-form-button-panel",21),e.NdJ("submitActionEvent",function(){return n.onSubmit()}),e.qZA()()(),e.BQk(),e.qZA()),2&_&&(e.Q6J("modalRef",n.activeModal),e.xp6(4),e.Q6J("formGroup",n.configForm),e.xp6(14),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","token"===n.configForm.getValue("auth_method")),e.xp6(1),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===n.configForm.getValue("encryptionType")||"AES256"===n.configForm.getValue("encryptionType")),e.xp6(2),e.Q6J("submitText",n.actionLabels.SUBMIT)("form",n.configForm))},directives:[ne.z,a._Y,a.JL,Y.V,a.sg,H.P,q.o,a.Fj,a._,X.b,a.JJ,a.u,M.O5,a.EJ,a.YN,a.Kr,M.sg,Le.S,J.p],styles:[""]}),t})();var oe=l(63285),ze=l(63622),ie=l(82945),V=l(10545);function rt(t,o){1&t&&(e.TgZ(0,"div",9)(1,"label",42),e.SDv(2,43),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",44),e.qZA()())}function lt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,46),e.qZA())}function ct(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,47),e.qZA())}function dt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,48),e.qZA())}function ut(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,49),e.qZA())}function Rt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,50),e.qZA())}function Et(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,51),e.qZA())}function gt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,52),e.qZA())}function ft(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,53),e.qZA())}function St(t,o){1&t&&(e.TgZ(0,"option",54),e.SDv(1,55),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Tt(t,o){1&t&&(e.TgZ(0,"option",54),e.SDv(1,56),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Ct(t,o){if(1&t&&(e.TgZ(0,"option",57),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function Mt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,58),e.qZA())}function pt(t,o){1&t&&(e.TgZ(0,"option",54),e.SDv(1,60),e.qZA()),2&t&&e.Q6J("ngValue",null)}function mt(t,o){1&t&&(e.TgZ(0,"option",54),e.SDv(1,61),e.qZA()),2&t&&e.Q6J("ngValue",null)}function At(t,o){if(1&t&&(e.TgZ(0,"option",57),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_.name),e.xp6(1),e.Oqu(_.description)}}function Gt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,62),e.qZA())}function Pt(t,o){if(1&t&&(e.TgZ(0,"select",59),e.YNc(1,pt,2,1,"option",18),e.YNc(2,mt,2,1,"option",18),e.YNc(3,At,2,2,"option",19),e.qZA(),e.YNc(4,Gt,2,0,"span",14)),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(1),e.Q6J("ngIf",null===n.placementTargets),e.xp6(1),e.Q6J("ngIf",null!==n.placementTargets),e.xp6(1),e.Q6J("ngForOf",n.placementTargets),e.xp6(1),e.Q6J("ngIf",n.bucketForm.showError("placement-target",_,"required"))}}function Ot(t,o){1&t&&(e.ynx(0),e._UZ(1,"input",63),e.BQk())}function bt(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend",25),e.SDv(2,64),e.qZA(),e.TgZ(3,"div",9)(4,"div",27)(5,"div",28)(6,"input",65),e.NdJ("change",function(){return e.CHM(_),e.oxw(2).setMfaDeleteValidators()}),e.qZA(),e.TgZ(7,"label",66),e.SDv(8,67),e.qZA(),e.TgZ(9,"cd-helper")(10,"span"),e.SDv(11,68),e.qZA()()()()()()}}function Nt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,77),e.qZA())}function Wt(t,o){if(1&t&&(e.TgZ(0,"div",9)(1,"label",74),e.SDv(2,75),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",76),e.YNc(5,Nt,2,0,"span",14),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.bucketForm.showError("mfa-token-serial",_,"required"))}}function Ut(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,81),e.qZA())}function $t(t,o){if(1&t&&(e.TgZ(0,"div",9)(1,"label",78),e.SDv(2,79),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",80),e.YNc(5,Ut,2,0,"span",14),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.bucketForm.showError("mfa-token-pin",_,"required"))}}function It(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend",25),e.SDv(2,69),e.qZA(),e.TgZ(3,"div",9)(4,"div",27)(5,"div",28)(6,"input",70),e.NdJ("change",function(){return e.CHM(_),e.oxw(2).setMfaDeleteValidators()}),e.qZA(),e.TgZ(7,"label",71),e.SDv(8,72),e.qZA(),e.TgZ(9,"cd-helper")(10,"span"),e.SDv(11,73),e.qZA()()()()(),e.YNc(12,Wt,6,1,"div",8),e.YNc(13,$t,6,1,"div",8),e.qZA()}if(2&t){const _=e.oxw(2);e.xp6(12),e.Q6J("ngIf",_.areMfaCredentialsRequired()),e.xp6(1),e.Q6J("ngIf",_.areMfaCredentialsRequired())}}function vt(t,o){1&t&&(e.TgZ(0,"div",9)(1,"label",82),e.SDv(2,83),e.qZA(),e.TgZ(3,"div",12)(4,"select",84)(5,"option",85),e.SDv(6,86),e.qZA(),e.TgZ(7,"option",87),e.SDv(8,88),e.qZA()()()())}function Ft(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,93),e.qZA())}function ht(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,94),e.qZA())}function Lt(t,o){if(1&t&&(e.TgZ(0,"div",9)(1,"label",89),e.ynx(2),e.SDv(3,90),e.BQk(),e.TgZ(4,"cd-helper"),e.SDv(5,91),e.qZA()(),e.TgZ(6,"div",12),e._UZ(7,"input",92),e.YNc(8,Ft,2,0,"span",14),e.YNc(9,ht,2,0,"span",14),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(8),e.Q6J("ngIf",n.bucketForm.showError("lock_retention_period_days",_,"pattern")),e.xp6(1),e.Q6J("ngIf",n.bucketForm.showError("lock_retention_period_days",_,"lockDays"))}}function yt(t,o){1&t&&(e.TgZ(0,"option",54),e.SDv(1,105),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Dt(t,o){if(1&t&&(e.TgZ(0,"option",57),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function xt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,106),e.qZA())}function Zt(t,o){if(1&t&&(e.TgZ(0,"div")(1,"div",9)(2,"label",102),e.SDv(3,103),e.qZA(),e.TgZ(4,"div",12)(5,"select",104),e.YNc(6,yt,2,1,"option",18),e.YNc(7,Dt,2,2,"option",19),e.qZA(),e.YNc(8,xt,2,0,"span",14),e.qZA()()()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("autofocus",n.editing),e.xp6(1),e.Q6J("ngIf",null!==n.kmsProviders),e.xp6(1),e.Q6J("ngForOf",n.kmsProviders),e.xp6(1),e.Q6J("ngIf",n.bucketForm.showError("kms_provider",_,"required"))}}function wt(t,o){1&t&&(e.TgZ(0,"span",45),e.SDv(1,110),e.qZA())}function kt(t,o){if(1&t&&(e.TgZ(0,"div")(1,"div",9)(2,"label",107),e.SDv(3,108),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",109),e.YNc(6,wt,2,0,"span",14),e.qZA()()()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(6),e.Q6J("ngIf",n.bucketForm.showError("keyId",_,"required"))}}function qt(t,o){if(1&t&&(e.TgZ(0,"div")(1,"div",9)(2,"div",27)(3,"div",95),e._UZ(4,"input",96),e.TgZ(5,"label",97),e.SDv(6,98),e.qZA()()()(),e.TgZ(7,"div",9)(8,"div",27)(9,"div",95),e._UZ(10,"input",99),e.TgZ(11,"label",100),e.SDv(12,101),e.qZA()()()(),e.YNc(13,Zt,9,4,"div",24),e.YNc(14,kt,7,1,"div",24),e.qZA()),2&t){const _=e.oxw(2);e.xp6(4),e.uIk("disabled",!_.s3VaultConfig||null),e.xp6(6),e.uIk("disabled",!_.kmsVaultConfig||null),e.xp6(3),e.Q6J("ngIf","aws:kms"===_.bucketForm.getValue("encryption_type")),e.xp6(1),e.Q6J("ngIf","aws:kms"===_.bucketForm.getValue("encryption_type"))}}const Qe=function(t){return{required:t}};function Bt(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.YNc(9,rt,5,0,"div",8),e.TgZ(10,"div",9)(11,"label",10),e.SDv(12,11),e.qZA(),e.TgZ(13,"div",12),e._UZ(14,"input",13),e.YNc(15,lt,2,0,"span",14),e.YNc(16,ct,2,0,"span",14),e.YNc(17,dt,2,0,"span",14),e.YNc(18,ut,2,0,"span",14),e.YNc(19,Rt,2,0,"span",14),e.YNc(20,Et,2,0,"span",14),e.YNc(21,gt,2,0,"span",14),e.YNc(22,ft,2,0,"span",14),e.qZA()(),e.TgZ(23,"div",9)(24,"label",15),e.SDv(25,16),e.qZA(),e.TgZ(26,"div",12)(27,"select",17),e.YNc(28,St,2,1,"option",18),e.YNc(29,Tt,2,1,"option",18),e.YNc(30,Ct,2,2,"option",19),e.qZA(),e.YNc(31,Mt,2,0,"span",14),e.qZA()(),e.TgZ(32,"div",9)(33,"label",20),e.SDv(34,21),e.qZA(),e.TgZ(35,"div",12),e.YNc(36,Pt,5,4,"ng-template",null,22,e.W1O),e.YNc(38,Ot,2,0,"ng-container",23),e.qZA()(),e.YNc(39,bt,12,0,"fieldset",24),e.YNc(40,It,14,2,"fieldset",24),e.TgZ(41,"fieldset")(42,"legend",25),e.SDv(43,26),e.qZA(),e.TgZ(44,"div",9)(45,"div",27)(46,"div",28),e._UZ(47,"input",29),e.TgZ(48,"label",30),e.SDv(49,31),e.qZA(),e.TgZ(50,"cd-helper")(51,"span"),e.SDv(52,32),e.qZA()()()()(),e.YNc(53,vt,9,0,"div",8),e.YNc(54,Lt,10,2,"div",8),e.qZA(),e.TgZ(55,"fieldset")(56,"legend",25),e.SDv(57,33),e.qZA(),e.TgZ(58,"div",9)(59,"div",27)(60,"div",28),e._UZ(61,"input",34),e.TgZ(62,"label",35),e.SDv(63,36),e.qZA(),e.TgZ(64,"cd-helper",37)(65,"span"),e.tHW(66,38),e.TgZ(67,"a",39),e.NdJ("click",function(){return e.CHM(_),e.oxw().openConfigModal()}),e.qZA(),e.N_p(),e.qZA()()()()(),e.YNc(68,qt,15,4,"div",24),e.qZA()(),e.TgZ(69,"div",40)(70,"cd-form-button-panel",41),e.NdJ("submitActionEvent",function(){return e.CHM(_),e.oxw().submit()}),e.ALo(71,"titlecase"),e.ALo(72,"upperFirst"),e.qZA()()()()()}if(2&t){const _=e.MAs(2),n=e.MAs(37),i=e.oxw();e.xp6(1),e.Q6J("formGroup",i.bucketForm),e.xp6(6),e.pQV(e.lcZ(6,31,i.action))(e.lcZ(7,33,i.resource)),e.QtT(5),e.xp6(2),e.Q6J("ngIf",i.editing),e.xp6(2),e.Q6J("ngClass",e.VKq(39,Qe,!i.editing)),e.xp6(3),e.Q6J("readonly",i.editing)("autofocus",!i.editing),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"required")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"bucketNameInvalid")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"bucketNameNotAllowed")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"containsUpperCase")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"lowerCaseOrNumber")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"ipAddress")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"onlyLowerCaseAndNumbers")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"shouldBeInRange")),e.xp6(5),e.Q6J("autofocus",i.editing),e.xp6(1),e.Q6J("ngIf",null===i.owners),e.xp6(1),e.Q6J("ngIf",null!==i.owners),e.xp6(1),e.Q6J("ngForOf",i.owners),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("owner",_,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(41,Qe,!i.editing)),e.xp6(5),e.Q6J("ngIf",i.editing)("ngIfElse",n),e.xp6(1),e.Q6J("ngIf",i.editing),e.xp6(1),e.Q6J("ngIf",i.editing),e.xp6(13),e.Q6J("ngIf",i.bucketForm.getValue("lock_enabled")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.getValue("lock_enabled")),e.xp6(7),e.uIk("disabled",!i.kmsVaultConfig&&!i.s3VaultConfig||null),e.xp6(7),e.Q6J("ngIf",i.bucketForm.getValue("encryption_enabled")),e.xp6(2),e.Q6J("form",i.bucketForm)("submitText",e.lcZ(71,35,i.action)+" "+e.lcZ(72,37,i.resource))}}let Ye=(()=>{class t extends Ke.E{constructor(_,n,i,s,r,d,g,E,S,G,P){super(),this.route=_,this.router=n,this.formBuilder=i,this.rgwBucketService=s,this.rgwSiteService=r,this.modalService=d,this.rgwUserService=g,this.notificationService=E,this.rgwEncryptionModal=S,this.actionLabels=G,this.changeDetectorRef=P,this.editing=!1,this.owners=null,this.kmsProviders=null,this.placementTargets=[],this.isVersioningAlreadyEnabled=!1,this.isMfaDeleteAlreadyEnabled=!1,this.icons=k.P,this.kmsVaultConfig=!1,this.s3VaultConfig=!1,this.editing=this.router.url.startsWith(`/rgw/bucket/${A.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource="bucket",this.createForm()}get isVersioningEnabled(){return this.bucketForm.getValue("versioning")}get isMfaDeleteEnabled(){return this.bucketForm.getValue("mfa-delete")}ngAfterViewChecked(){this.changeDetectorRef.detectChanges()}createForm(){const _=this,n=p.h.custom("lockDays",()=>{if(!_.bucketForm||!R().get(_.bucketForm.getRawValue(),"lock_enabled"))return!1;const i=Number(_.bucketForm.getValue("lock_retention_period_days"));return!Number.isInteger(i)||0===i});this.bucketForm=this.formBuilder.group({id:[null],bid:[null,[a.kI.required],this.editing?[]:[p.h.bucketName(),p.h.bucketExistence(!1,this.rgwBucketService)]],owner:[null,[a.kI.required]],kms_provider:["vault"],"placement-target":[null,this.editing?[]:[a.kI.required]],versioning:[null],"mfa-delete":[null],"mfa-token-serial":[""],"mfa-token-pin":[""],lock_enabled:[{value:!1,disabled:this.editing}],encryption_enabled:[null],encryption_type:[null,[p.h.requiredIf({encryption_enabled:!0})]],keyId:[null,[p.h.requiredIf({encryption_type:"aws:kms",encryption_enabled:!0})]],lock_mode:["COMPLIANCE"],lock_retention_period_days:[0,[p.h.number(!1),n]]})}ngOnInit(){const _={owners:this.rgwUserService.enumerate()};this.kmsProviders=this.rgwEncryptionModal.kmsProviders,this.rgwBucketService.getEncryptionConfig().subscribe(n=>{this.kmsVaultConfig=n[0],this.s3VaultConfig=n[1],this.kmsVaultConfig&&this.s3VaultConfig?this.bucketForm.get("encryption_type").setValue(""):this.kmsVaultConfig?this.bucketForm.get("encryption_type").setValue("aws:kms"):this.s3VaultConfig?this.bucketForm.get("encryption_type").setValue("AES256"):this.bucketForm.get("encryption_type").setValue("")}),this.editing||(_.getPlacementTargets=this.rgwSiteService.get("placement-targets")),this.route.params.subscribe(n=>{if(n.hasOwnProperty("bid")){const i=decodeURIComponent(n.bid);_.getBid=this.rgwBucketService.get(i)}(0,_e.D)(_).subscribe(i=>{if(this.owners=i.owners.sort(),i.getPlacementTargets){const s=i.getPlacementTargets;this.zonegroup=s.zonegroup,R().forEach(s.placement_targets,r=>{r.description=`${r.name} (${"pool"}: ${r.data_pool})`,this.placementTargets.push(r)}),1===this.placementTargets.length&&this.bucketForm.get("placement-target").setValue(this.placementTargets[0].name)}if(i.getBid){const s=i.getBid,r=R().clone(this.bucketForm.getRawValue());let d=R().pick(s,R().keys(r));d.lock_retention_period_days=this.rgwBucketService.getLockDays(s),d["placement-target"]=s.placement_rule,d.versioning=s.versioning===z.ENABLED,d["mfa-delete"]=s.mfa_delete===K.ENABLED,d.encryption_enabled="Enabled"===s.encryption,d=R().merge(r,d),this.bucketForm.setValue(d),this.editing&&(this.isVersioningAlreadyEnabled=this.isVersioningEnabled,this.isMfaDeleteAlreadyEnabled=this.isMfaDeleteEnabled,this.setMfaDeleteValidators(),d.lock_enabled&&this.bucketForm.controls.versioning.disable())}this.loadingReady()})})}goToListView(){this.router.navigate(["/rgw/bucket"])}submit(){if(null==this.bucketForm.getValue("encryption_enabled")&&(this.bucketForm.get("encryption_enabled").setValue(!1),this.bucketForm.get("encryption_type").setValue(null)),this.bucketForm.pristine)return void this.goToListView();const _=this.bucketForm.value;if(this.editing){const n=this.getVersioningStatus(),i=this.getMfaDeleteStatus();this.rgwBucketService.update(_.bid,_.id,_.owner,n,_.encryption_enabled,_.encryption_type,_.keyId,i,_["mfa-token-serial"],_["mfa-token-pin"],_.lock_mode,_.lock_retention_period_days).subscribe(()=>{this.notificationService.show(te.k.success,"Updated Object Gateway bucket '" + _.bid + "'."),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}else this.rgwBucketService.create(_.bid,_.owner,this.zonegroup,_["placement-target"],_.lock_enabled,_.lock_mode,_.lock_retention_period_days,_.encryption_enabled,_.encryption_type,_.keyId).subscribe(()=>{this.notificationService.show(te.k.success,"Created Object Gateway bucket '" + _.bid + "'"),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}areMfaCredentialsRequired(){return this.isMfaDeleteEnabled!==this.isMfaDeleteAlreadyEnabled||this.isMfaDeleteAlreadyEnabled&&this.isVersioningEnabled!==this.isVersioningAlreadyEnabled}setMfaDeleteValidators(){const _=this.bucketForm.get("mfa-token-serial"),n=this.bucketForm.get("mfa-token-pin");this.areMfaCredentialsRequired()?(_.setValidators(a.kI.required),n.setValidators(a.kI.required)):(_.setValidators(null),n.setValidators(null)),_.updateValueAndValidity(),n.updateValueAndValidity()}getVersioningStatus(){return this.isVersioningEnabled?z.ENABLED:z.SUSPENDED}getMfaDeleteStatus(){return this.isMfaDeleteEnabled?K.ENABLED:K.DISABLED}fileUpload(_,n){const i=_[0];(new FileReader).addEventListener("load",()=>{const r=this.bucketForm.get(n);r.setValue(i),r.markAsDirty(),r.markAsTouched(),r.updateValueAndValidity()})}openConfigModal(){this.modalService.show(at,null,{size:"lg"}).componentInstance.configForm.get("encryptionType").setValue(this.bucketForm.getValue("encryption_type")||"AES256")}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(w.gz),e.Y36(w.F0),e.Y36(Q.O),e.Y36(be.o),e.Y36(qe.I),e.Y36(oe.Z),e.Y36(D),e.Y36(he.g),e.Y36(We),e.Y36(A.p4),e.Y36(e.sBO))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-form"]],features:[e._Bn([We]),e.qOj],decls:1,vars:1,consts:function(){let o,_,n,i,s,r,d,g,E,S,G,P,b,N,m,W,U,$,I,v,F,h,L,y,f,x,T,B,C,se,ae,re,le,ce,de,ue,Re,Ee,ge,fe,Se,Te,Ce,Me,pe,me,Ae,Ge,Pe,Oe;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",n="Name...",i="Owner",s="Placement target",r="Locking",d="Enabled",g="Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.",E="Security",S="Encryption",G="Enables encryption for the objects in the bucket. To enable encryption on a bucket you need to set the configuration values for SSE-S3 or SSE-KMS. To set the configuration values " + "\ufffd#67\ufffd" + "Click here" + "\ufffd/#67\ufffd" + "",P="Id",b="This field is required.",N="Bucket names can only contain lowercase letters, numbers, periods and hyphens.",m="The chosen name is already in use.",W="Bucket names must not contain uppercase characters or underscores.",U="Each label must start and end with a lowercase letter or a number.",$="Bucket names cannot be formatted as IP address.",I="Bucket labels cannot be empty and can only contain lowercase letters, numbers and hyphens.",v="Bucket names must be 3 to 63 characters long.",F="Loading...",h="-- Select a user --",L="This field is required.",y="Loading...",f="-- Select a placement target --",x="This field is required.",T="Versioning",B="Enabled",C="Enables versioning for the objects in the bucket.",se="Multi-Factor Authentication",ae="Delete enabled",re="Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.",le="Token Serial Number",ce="This field is required.",de="Token PIN",ue="This field is required.",Re="Mode",Ee="Compliance",ge="Governance",fe="Days",Se="The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.",Te="The entered value must be a positive integer.",Ce="Retention Days must be a positive integer.",Me="SSE-S3 Encryption",pe="Connect to an external key management service",me="KMS Provider",Ae="-- Select a provider --",Ge="This field is required.",Pe="Key Id ",Oe="This field is required.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","bucketForm","novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],o,[1,"card-body"],["class","form-group row",4,"ngIf"],[1,"form-group","row"],["for","bid",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","bid","name","bid","type","text","placeholder",n,"formControlName","bid",1,"form-control",3,"readonly","autofocus"],["class","invalid-feedback",4,"ngIf"],["for","owner",1,"cd-col-form-label","required"],i,["id","owner","name","owner","formControlName","owner",1,"form-select",3,"autofocus"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["for","placement-target",1,"cd-col-form-label",3,"ngClass"],s,["placementTargetSelect",""],[4,"ngIf","ngIfElse"],[4,"ngIf"],[1,"cd-header"],r,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","lock_enabled","formControlName","lock_enabled","type","checkbox",1,"custom-control-input"],["for","lock_enabled",1,"custom-control-label"],d,g,E,["id","encryption_enabled","name","encryption_enabled","formControlName","encryption_enabled","type","checkbox",1,"form-check-input"],["for","encryption_enabled",1,"form-check-label"],S,["aria-label","toggle encryption helper"],G,["href","#/rgw/bucket/create","aria-label","click here",3,"click"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["for","id",1,"cd-col-form-label"],P,["id","id","name","id","type","text","formControlName","id","readonly","",1,"form-control"],[1,"invalid-feedback"],b,N,m,W,U,$,I,v,[3,"ngValue"],F,h,[3,"value"],L,["id","placement-target","name","placement-target","formControlName","placement-target",1,"form-select"],y,f,x,["id","placement-target","name","placement-target","formControlName","placement-target","type","text","readonly","",1,"form-control"],T,["type","checkbox","id","versioning","name","versioning","formControlName","versioning",1,"custom-control-input",3,"change"],["for","versioning",1,"custom-control-label"],B,C,se,["type","checkbox","id","mfa-delete","name","mfa-delete","formControlName","mfa-delete",1,"custom-control-input",3,"change"],["for","mfa-delete",1,"custom-control-label"],ae,re,["for","mfa-token-serial",1,"cd-col-form-label"],le,["type","text","id","mfa-token-serial","name","mfa-token-serial","formControlName","mfa-token-serial",1,"form-control"],ce,["for","mfa-token-pin",1,"cd-col-form-label"],de,["type","text","id","mfa-token-pin","name","mfa-token-pin","formControlName","mfa-token-pin",1,"form-control"],ue,["for","lock_mode",1,"cd-col-form-label"],Re,["formControlName","lock_mode","name","lock_mode","id","lock_mode",1,"form-select"],["value","COMPLIANCE"],Ee,["value","GOVERNANCE"],ge,["for","lock_retention_period_days",1,"cd-col-form-label"],fe,Se,["type","number","id","lock_retention_period_days","formControlName","lock_retention_period_days","min","0",1,"form-control"],Te,Ce,[1,"custom-control","custom-radio","custom-control-inline","ps-5"],["formControlName","encryption_type","id","sse_S3_enabled","type","radio","name","encryption_type","value","AES256",1,"form-check-input"],["for","sse_S3_enabled",1,"form-control-label"],Me,["formControlName","encryption_type","id","kms_enabled","name","encryption_type","value","aws:kms","type","radio",1,"form-check-input"],["for","kms_enabled",1,"form-control-label"],pe,["for","kms_provider",1,"cd-col-form-label","required"],me,["id","kms_provider","name","kms_provider","formControlName","kms_provider",1,"form-select",3,"autofocus"],Ae,Ge,["for","keyId",1,"cd-col-form-label","required"],Pe,["id","keyId","name","keyId","type","text","formControlName","keyId",1,"form-control"],Oe]},template:function(_,n){1&_&&e.YNc(0,Bt,73,43,"div",0),2&_&&e.Q6J("cdFormLoading",n.loading)},directives:[ze.y,a._Y,a.JL,Y.V,a.sg,M.O5,H.P,q.o,a.Fj,X.b,a.JJ,a.u,M.mk,ie.U,a.EJ,a.YN,a.Kr,M.sg,a.Wl,Le.S,a.wV,a.qQ,a._,J.p],pipes:[M.rS,V.m],styles:[""]}),t})();var Je=l(70882),ye=l(68136),Ve=l(30982),j=l(83697),De=l(68774),je=l(47557),e_=l(66369),ee=l(51847),Ue=l(47640),__=l(94928),Ht=l(96102),t_=l(68962);function Xt(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,25),e.qZA())}function Kt(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimless"),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.selection.bucket_quota.max_size)," ")}}function zt(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,26),e.qZA())}function Qt(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.hij(" ",_.selection.bucket_quota.max_objects," ")}}function Yt(t,o){if(1&t&&(e.TgZ(0,"div")(1,"legend"),e.SDv(2,21),e.qZA(),e.TgZ(3,"table",1)(4,"tbody")(5,"tr")(6,"td",2),e.SDv(7,22),e.qZA(),e.TgZ(8,"td",4),e._uU(9),e.ALo(10,"booleanText"),e.qZA()(),e.TgZ(11,"tr")(12,"td",5),e.SDv(13,23),e.qZA(),e.YNc(14,Xt,2,0,"td",0),e.YNc(15,Kt,3,3,"td",0),e.qZA(),e.TgZ(16,"tr")(17,"td",5),e.SDv(18,24),e.qZA(),e.YNc(19,zt,2,0,"td",0),e.YNc(20,Qt,2,1,"td",0),e.qZA()()()()),2&t){const _=e.oxw(2);e.xp6(9),e.Oqu(e.lcZ(10,5,_.selection.bucket_quota.enabled)),e.xp6(5),e.Q6J("ngIf",_.selection.bucket_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.selection.bucket_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",_.selection.bucket_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.selection.bucket_quota.max_objects>-1)}}function Jt(t,o){if(1&t&&(e.ynx(0),e.TgZ(1,"tr")(2,"td",5),e.SDv(3,27),e.qZA(),e.TgZ(4,"td"),e._uU(5),e.qZA()(),e.TgZ(6,"tr")(7,"td",5),e.SDv(8,28),e.qZA(),e.TgZ(9,"td"),e._uU(10),e.qZA()(),e.BQk()),2&t){const _=e.oxw(2);e.xp6(5),e.Oqu(_.selection.lock_mode),e.xp6(5),e.Oqu(_.selection.lock_retention_period_days)}}function Vt(t,o){if(1&t&&(e.ynx(0),e.TgZ(1,"table",1)(2,"tbody")(3,"tr")(4,"td",2),e.SDv(5,3),e.qZA(),e.TgZ(6,"td",4),e._uU(7),e.qZA()(),e.TgZ(8,"tr")(9,"td",5),e.SDv(10,6),e.qZA(),e.TgZ(11,"td"),e._uU(12),e.qZA()(),e.TgZ(13,"tr")(14,"td",5),e.SDv(15,7),e.qZA(),e.TgZ(16,"td"),e._uU(17),e.qZA()(),e.TgZ(18,"tr")(19,"td",5),e.SDv(20,8),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.qZA()(),e.TgZ(23,"tr")(24,"td",5),e.SDv(25,9),e.qZA(),e.TgZ(26,"td"),e._uU(27),e.qZA()(),e.TgZ(28,"tr")(29,"td",5),e.SDv(30,10),e.qZA(),e.TgZ(31,"td"),e._uU(32),e.qZA()(),e.TgZ(33,"tr")(34,"td",5),e.SDv(35,11),e.qZA(),e.TgZ(36,"td"),e._uU(37),e.qZA()(),e.TgZ(38,"tr")(39,"td",5),e.SDv(40,12),e.qZA(),e.TgZ(41,"td"),e._uU(42),e.qZA()(),e.TgZ(43,"tr")(44,"td",5),e.SDv(45,13),e.qZA(),e.TgZ(46,"td"),e._uU(47),e.qZA()(),e.TgZ(48,"tr")(49,"td",5),e.SDv(50,14),e.qZA(),e.TgZ(51,"td"),e._uU(52),e.ALo(53,"cdDate"),e.qZA()(),e.TgZ(54,"tr")(55,"td",5),e.SDv(56,15),e.qZA(),e.TgZ(57,"td"),e._uU(58),e.qZA()(),e.TgZ(59,"tr")(60,"td",5),e.SDv(61,16),e.qZA(),e.TgZ(62,"td"),e._uU(63),e.qZA()(),e.TgZ(64,"tr")(65,"td",5),e.SDv(66,17),e.qZA(),e.TgZ(67,"td"),e._uU(68),e.qZA()(),e.TgZ(69,"tr")(70,"td",5),e.SDv(71,18),e.qZA(),e.TgZ(72,"td"),e._uU(73),e.qZA()()()(),e.YNc(74,Yt,21,7,"div",0),e.TgZ(75,"legend"),e.SDv(76,19),e.qZA(),e.TgZ(77,"table",1)(78,"tbody")(79,"tr")(80,"td",2),e.SDv(81,20),e.qZA(),e.TgZ(82,"td",4),e._uU(83),e.ALo(84,"booleanText"),e.qZA()(),e.YNc(85,Jt,11,2,"ng-container",0),e.qZA()(),e.BQk()),2&t){const _=e.oxw();e.xp6(7),e.Oqu(_.selection.bid),e.xp6(5),e.Oqu(_.selection.id),e.xp6(5),e.Oqu(_.selection.owner),e.xp6(5),e.Oqu(_.selection.index_type),e.xp6(5),e.Oqu(_.selection.placement_rule),e.xp6(5),e.Oqu(_.selection.marker),e.xp6(5),e.Oqu(_.selection.max_marker),e.xp6(5),e.Oqu(_.selection.ver),e.xp6(5),e.Oqu(_.selection.master_ver),e.xp6(5),e.Oqu(e.lcZ(53,17,_.selection.mtime)),e.xp6(6),e.Oqu(_.selection.zonegroup),e.xp6(5),e.Oqu(_.selection.versioning),e.xp6(5),e.Oqu(_.selection.encryption),e.xp6(5),e.Oqu(_.selection.mfa_delete),e.xp6(1),e.Q6J("ngIf",_.selection.bucket_quota),e.xp6(9),e.Oqu(e.lcZ(84,19,_.selection.lock_enabled)),e.xp6(2),e.Q6J("ngIf",_.selection.lock_enabled)}}let jt=(()=>{class t{constructor(_){this.rgwBucketService=_}ngOnChanges(){this.selection&&this.rgwBucketService.get(this.selection.bid).subscribe(_=>{_.lock_retention_period_days=this.rgwBucketService.getLockDays(_),this.selection=_})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(be.o))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let o,_,n,i,s,r,d,g,E,S,G,P,b,N,m,W,U,$,I,v,F,h,L,y;return o="Name",_="ID",n="Owner",i="Index type",s="Placement rule",r="Marker",d="Maximum marker",g="Version",E="Master version",S="Modification time",G="Zonegroup",P="Versioning",b="Encryption",N="MFA Delete",m="Locking",W="Enabled",U="Bucket quota",$="Enabled",I="Maximum size",v="Maximum objects",F="Unlimited",h="Unlimited",L="Mode",y="Days",[[4,"ngIf"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],o,[1,"w-75"],[1,"bold"],_,n,i,s,r,d,g,E,S,G,P,b,N,m,W,U,$,I,v,F,h,L,y]},template:function(_,n){1&_&&e.YNc(0,Vt,86,21,"ng-container",0),2&_&&e.Q6J("ngIf",n.selection)},directives:[M.O5],pipes:[Ht.N,t_.T,e_.n],styles:["table[_ngcontent-%COMP%]{table-layout:fixed}table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{word-wrap:break-word}"]}),t})();var n_=l(60251);const en=["bucketSizeTpl"],_n=["bucketObjectTpl"];function tn(t,o){if(1&t&&e._UZ(0,"cd-usage-bar",8),2&t){const _=e.oxw().row;e.Q6J("total",_.bucket_quota.max_size)("used",_.bucket_size)}}function nn(t,o){1&t&&e.SDv(0,9)}function on(t,o){if(1&t&&(e.YNc(0,tn,1,2,"cd-usage-bar",6),e.YNc(1,nn,1,0,"ng-template",null,7,e.W1O)),2&t){const _=o.row,n=e.MAs(2);e.Q6J("ngIf",_.bucket_quota.max_size>0&&_.bucket_quota.enabled)("ngIfElse",n)}}function sn(t,o){if(1&t&&e._UZ(0,"cd-usage-bar",12),2&t){const _=e.oxw().row;e.Q6J("total",_.bucket_quota.max_objects)("used",_.num_objects)("isBinary",!1)}}function an(t,o){1&t&&e.SDv(0,13)}function rn(t,o){if(1&t&&(e.YNc(0,sn,1,3,"cd-usage-bar",10),e.YNc(1,an,1,0,"ng-template",null,11,e.W1O)),2&t){const _=o.row,n=e.MAs(2);e.Q6J("ngIf",_.bucket_quota.max_objects>0&&_.bucket_quota.enabled)("ngIfElse",n)}}let cn=(()=>{class t extends ye.o{constructor(_,n,i,s,r,d,g,E){super(E),this.authStorageService=_,this.dimlessBinaryPipe=n,this.dimlessPipe=i,this.rgwBucketService=s,this.modalService=r,this.urlBuilder=d,this.actionLabels=g,this.ngZone=E,this.columns=[],this.buckets=[],this.selection=new De.r}ngOnInit(){this.permission=this.authStorageService.getPermissions().rgw,this.columns=[{name:"Name",prop:"bid",flexGrow:2},{name:"Owner",prop:"owner",flexGrow:2.5},{name:"Used Capacity",prop:"bucket_size",flexGrow:.6,pipe:this.dimlessBinaryPipe},{name:"Capacity Limit %",prop:"size_usage",cellTemplate:this.bucketSizeTpl,flexGrow:.8},{name:"Objects",prop:"num_objects",flexGrow:.6,pipe:this.dimlessPipe},{name:"Object Limit %",prop:"object_usage",cellTemplate:this.bucketObjectTpl,flexGrow:.8}];const _=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().bid)}`;this.tableActions=[{permission:"create",icon:k.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:r=>!r.hasSelection},{permission:"update",icon:k.P.edit,routerLink:()=>this.urlBuilder.getEdit(_()),name:this.actionLabels.EDIT},{permission:"delete",icon:k.P.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:r=>r.hasMultiSelection}],this.setTableRefreshTimeout()}transformBucketData(){R().forEach(this.buckets,_=>{const n=_.bucket_quota.max_size,i=_.bucket_quota.max_objects;_.bucket_size=0,_.num_objects=0,R().isEmpty(_.usage)||(_.bucket_size=_.usage["rgw.main"].size_actual,_.num_objects=_.usage["rgw.main"].num_objects),_.size_usage=n>0?_.bucket_size/n:void 0,_.object_usage=i>0?_.num_objects/i:void 0})}getBucketList(_){this.setTableRefreshTimeout(),this.rgwBucketService.list(!0).subscribe(n=>{this.buckets=n,this.transformBucketData()},()=>{_.error()})}updateSelection(_){this.selection=_}deleteAction(){this.modalService.show(Ve.M,{itemDescription:this.selection.hasSingleSelection?"bucket":"buckets",itemNames:this.selection.selected.map(_=>_.bid),submitActionObservable:()=>new Je.y(_=>{(0,_e.D)(this.selection.selected.map(n=>this.rgwBucketService.delete(n.bid))).subscribe({error:n=>{_.error(n),this.table.refreshBtn()},complete:()=>{_.complete(),this.table.refreshBtn()}})})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Ue.j),e.Y36(je.$),e.Y36(e_.n),e.Y36(be.o),e.Y36(oe.Z),e.Y36(ee.F),e.Y36(A.p4),e.Y36(e.R0b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-list"]],viewQuery:function(_,n){if(1&_&&(e.Gf(j.a,7),e.Gf(en,7),e.Gf(_n,7)),2&_){let i;e.iGM(i=e.CRH())&&(n.table=i.first),e.iGM(i=e.CRH())&&(n.bucketSizeTpl=i.first),e.iGM(i=e.CRH())&&(n.bucketObjectTpl=i.first)}},features:[e._Bn([{provide:ee.F,useValue:new ee.F("rgw/bucket")}]),e.qOj],decls:8,vars:9,consts:function(){let o,_;return o="No Limit",_="No Limit",[["columnMode","flex","selectionType","multiClick","identifier","bid",3,"autoReload","data","columns","hasDetails","status","setExpandedRow","updateSelection","fetchData"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["bucketSizeTpl",""],["bucketObjectTpl",""],[3,"total","used",4,"ngIf","ngIfElse"],["noSizeQuota",""],[3,"total","used"],o,[3,"total","used","isBinary",4,"ngIf","ngIfElse"],["noObjectQuota",""],[3,"total","used","isBinary"],_]},template:function(_,n){1&_&&(e.TgZ(0,"cd-table",0,1),e.NdJ("setExpandedRow",function(s){return n.setExpandedRow(s)})("updateSelection",function(s){return n.updateSelection(s)})("fetchData",function(s){return n.getBucketList(s)}),e._UZ(2,"cd-table-actions",2)(3,"cd-rgw-bucket-details",3),e.qZA(),e.YNc(4,on,3,2,"ng-template",null,4,e.W1O),e.YNc(6,rn,3,2,"ng-template",null,5,e.W1O)),2&_&&(e.Q6J("autoReload",!1)("data",n.buckets)("columns",n.columns)("hasDetails",!0)("status",n.tableStatus),e.xp6(2),e.Q6J("permission",n.permission)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("selection",n.expandedRow))},directives:[j.a,__.K,jt,M.O5,n_.O],styles:[""]}),t})();var dn=l(58111),un=l(59376),Rn=l(61350),En=l(60351),o_=l(76317);function gn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table-key-value",11),e.NdJ("fetchData",function(){return e.CHM(_),e.oxw(2).getMetaData()}),e.qZA()}if(2&t){const _=e.oxw(2);e.Q6J("data",_.metadata)}}function fn(t,o){if(1&t&&e._UZ(0,"cd-table-performance-counter",12),2&t){const _=e.oxw(2);e.Q6J("serviceId",_.serviceMapId)}}function Sn(t,o){if(1&t&&e._UZ(0,"cd-grafana",15),2&t){const _=e.oxw(3);e.Q6J("grafanaPath","rgw-instance-detail?var-rgw_servers=rgw."+_.serviceId)("type","metrics")}}function Tn(t,o){1&t&&(e.ynx(0,13),e.TgZ(1,"a",4),e.SDv(2,14),e.qZA(),e.YNc(3,Sn,1,2,"ng-template",6),e.BQk())}function Cn(t,o){if(1&t&&(e.ynx(0),e.TgZ(1,"nav",1,2),e.ynx(3,3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,gn,1,1,"ng-template",6),e.BQk(),e.ynx(7,7),e.TgZ(8,"a",4),e.SDv(9,8),e.qZA(),e.YNc(10,fn,1,1,"ng-template",6),e.BQk(),e.YNc(11,Tn,4,0,"ng-container",9),e.qZA(),e._UZ(12,"div",10),e.BQk()),2&t){const _=e.MAs(2),n=e.oxw();e.xp6(11),e.Q6J("ngIf",n.grafanaPermission.read),e.xp6(1),e.Q6J("ngbNavOutlet",_)}}let Mn=(()=>{class t{constructor(_,n){this.rgwDaemonService=_,this.authStorageService=n,this.serviceId="",this.serviceMapId="",this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection&&(this.serviceId=this.selection.id,this.serviceMapId=this.selection.service_map_id)}getMetaData(){R().isEmpty(this.serviceId)||this.rgwDaemonService.get(this.serviceId).subscribe(_=>{this.metadata=_.rgw_metadata})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Ne.b),e.Y36(Ue.j))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-daemon-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let o,_,n,i;return o="Details",_="Performance Counters",n="Performance Details",i="RGW instance details",[[4,"ngIf"],["ngbNav","","cdStatefulTab","rgw-daemon-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],o,["ngbNavContent",""],["ngbNavItem","performance-counters"],_,["ngbNavItem","performance-details",4,"ngIf"],[3,"ngbNavOutlet"],[3,"data","fetchData"],["serviceType","rgw",3,"serviceId"],["ngbNavItem","performance-details"],n,["title",i,"uid","x5ARzZtmk","grafanaStyle","one",3,"grafanaPath","type"]]},template:function(_,n){1&_&&e.YNc(0,Cn,13,2,"ng-container",0),2&_&&e.Q6J("ngIf",n.selection)},directives:[M.O5,O.Pz,un.m,O.nv,O.Vx,O.uN,Rn.b,En.p,o_.F,O.tO],styles:[""]}),t})();function pn(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table",8),e.NdJ("setExpandedRow",function(i){return e.CHM(_),e.oxw().setExpandedRow(i)})("fetchData",function(i){return e.CHM(_),e.oxw().getDaemonList(i)}),e._UZ(1,"cd-rgw-daemon-details",9),e.qZA()}if(2&t){const _=e.oxw();e.Q6J("data",_.daemons)("columns",_.columns)("hasDetails",!0),e.xp6(1),e.Q6J("selection",_.expandedRow)}}function mn(t,o){1&t&&e._UZ(0,"cd-grafana",11),2&t&&e.Q6J("grafanaPath","rgw-overview?")("type","metrics")}function An(t,o){1&t&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,10),e.qZA(),e.YNc(3,mn,1,2,"ng-template",5),e.BQk())}function Gn(t,o){1&t&&e._UZ(0,"cd-grafana",13),2&t&&e.Q6J("grafanaPath","radosgw-sync-overview?")("type","metrics")}function Pn(t,o){1&t&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,12),e.qZA(),e.YNc(3,Gn,1,2,"ng-template",5),e.BQk())}let On=(()=>{class t extends ye.o{constructor(_,n,i,s){super(),this.rgwDaemonService=_,this.authStorageService=n,this.cephShortVersionPipe=i,this.rgwSiteService=s,this.columns=[],this.daemons=[],this.updateDaemons=r=>{this.daemons=r}}ngOnInit(){this.grafanaPermission=this.authStorageService.getPermissions().grafana,this.columns=[{name:"ID",prop:"id",flexGrow:2},{name:"Hostname",prop:"server_hostname",flexGrow:2},{name:"Port",prop:"port",flexGrow:1},{name:"Realm",prop:"realm_name",flexGrow:2},{name:"Zone Group",prop:"zonegroup_name",flexGrow:2},{name:"Zone",prop:"zone_name",flexGrow:2},{name:"Version",prop:"version",flexGrow:1,pipe:this.cephShortVersionPipe}],this.rgwSiteService.get("realms").subscribe(_=>this.isMultiSite=_.length>0)}getDaemonList(_){this.rgwDaemonService.list().subscribe(this.updateDaemons,()=>{_.error()})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Ne.b),e.Y36(Ue.j),e.Y36(dn.F),e.Y36(qe.I))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-daemon-list"]],features:[e.qOj],decls:9,vars:3,consts:function(){let o,_,n,i,s;return o="Gateways List",_="Overall Performance",n="RGW overview",i="Sync Performance",s="Radosgw sync overview",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],o,["ngbNavContent",""],["ngbNavItem","",4,"ngIf"],[3,"ngbNavOutlet"],["columnMode","flex",3,"data","columns","hasDetails","setExpandedRow","fetchData"],["cdTableDetail","",3,"selection"],_,["title",n,"uid","WAkugZpiz","grafanaStyle","two",3,"grafanaPath","type"],i,["title",s,"uid","rgw-sync-overview","grafanaStyle","two",3,"grafanaPath","type"]]},template:function(_,n){if(1&_&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,pn,2,4,"ng-template",5),e.BQk(),e.YNc(6,An,4,0,"ng-container",6),e.YNc(7,Pn,4,0,"ng-container",6),e.qZA(),e._UZ(8,"div",7)),2&_){const i=e.MAs(1);e.xp6(6),e.Q6J("ngIf",n.grafanaPermission.read),e.xp6(1),e.Q6J("ngIf",n.grafanaPermission.read&&n.isMultiSite),e.xp6(1),e.Q6J("ngbNavOutlet",i)}},directives:[O.Pz,O.nv,O.Vx,O.uN,j.a,Mn,M.O5,o_.F,O.tO],styles:[""]}),t})();var bn=l(6481),xe=l(28211),$e=(()=>{return(t=$e||($e={})).USERS="users",t.BUCKETS="buckets",t.METADATA="metadata",t.USAGE="usage",t.ZONE="zone",$e;var t})();let i_=(()=>{class t{static getAll(){return Object.values(t.capabilities)}}return t.capabilities=$e,t})();function Nn(t,o){1&t&&e._UZ(0,"input",22),2&t&&e.Q6J("readonly",!0)}function Wn(t,o){1&t&&(e.TgZ(0,"option",17),e.SDv(1,25),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Un(t,o){if(1&t&&(e.TgZ(0,"option",26),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function $n(t,o){if(1&t&&(e.TgZ(0,"select",23),e.YNc(1,Wn,2,1,"option",24),e.YNc(2,Un,2,2,"option",19),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",null!==_.types),e.xp6(1),e.Q6J("ngForOf",_.types)}}function In(t,o){1&t&&(e.TgZ(0,"span",27),e.SDv(1,28),e.qZA())}function vn(t,o){if(1&t&&(e.TgZ(0,"option",26),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Fn(t,o){1&t&&(e.TgZ(0,"span",27),e.SDv(1,29),e.qZA())}const hn=function(t){return{required:t}},Ln=function(){return["read","write","*"]};let yn=(()=>{class t{constructor(_,n,i){this.formBuilder=_,this.activeModal=n,this.actionLabels=i,this.submitAction=new e.vpe,this.editing=!0,this.types=[],this.resource="capability",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({type:[null,[a.kI.required]],perm:[null,[a.kI.required]]})}setEditing(_=!0){this.editing=_,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.ADD}setValues(_,n){this.formGroup.setValue({type:_,perm:n})}setCapabilities(_){const n=[];_.forEach(i=>{n.push(i.type)}),this.types=[],i_.getAll().forEach(i=>{-1===R().indexOf(n,i)&&this.types.push(i)})}onSubmit(){this.submitAction.emit(this.formGroup.value),this.activeModal.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Q.O),e.Y36(O.Kz),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-capability-modal"]],outputs:{submitAction:"submitAction"},decls:29,vars:24,consts:function(){let o,_,n,i,s,r,d;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Type",n="Permission",i="-- Select a permission --",s="-- Select a type --",r="This field is required.",d="This field is required.",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","type",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","type","class","form-control","type","text","formControlName","type",3,"readonly",4,"ngIf"],["id","type","class","form-select","formControlName","type","autofocus","",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["for","perm",1,"cd-col-form-label","required"],n,["id","perm","formControlName","perm",1,"form-select"],[3,"ngValue"],i,[3,"value",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["id","type","type","text","formControlName","type",1,"form-control",3,"readonly"],["id","type","formControlName","type","autofocus","",1,"form-select"],[3,"ngValue",4,"ngIf"],s,[3,"value"],[1,"invalid-feedback"],r,d]},template:function(_,n){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e.YNc(13,Nn,1,1,"input",11),e.YNc(14,$n,3,2,"select",12),e.YNc(15,In,2,0,"span",13),e.qZA()(),e.TgZ(16,"div",7)(17,"label",14),e.SDv(18,15),e.qZA(),e.TgZ(19,"div",10)(20,"select",16)(21,"option",17),e.SDv(22,18),e.qZA(),e.YNc(23,vn,2,2,"option",19),e.qZA(),e.YNc(24,Fn,2,0,"span",13),e.qZA()()(),e.TgZ(25,"div",20)(26,"cd-form-button-panel",21),e.NdJ("submitActionEvent",function(){return n.onSubmit()}),e.ALo(27,"titlecase"),e.ALo(28,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",n.activeModal),e.xp6(4),e.pQV(e.lcZ(3,13,n.action))(e.lcZ(4,15,n.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",n.formGroup),e.xp6(4),e.Q6J("ngClass",e.VKq(21,hn,!n.editing)),e.xp6(3),e.Q6J("ngIf",n.editing),e.xp6(1),e.Q6J("ngIf",!n.editing),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("type",i,"required")),e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(23,Ln)),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("perm",i,"required")),e.xp6(2),e.Q6J("form",n.formGroup)("submitText",e.lcZ(27,17,n.action)+" "+e.lcZ(28,19,n.resource))}},directives:[ne.z,a._Y,a.JL,Y.V,a.sg,H.P,M.mk,M.O5,q.o,a.Fj,X.b,a.JJ,a.u,a.EJ,ie.U,a.YN,a.Kr,M.sg,J.p],pipes:[M.rS,V.m],styles:[""]}),t})();var Ie=l(4416),ve=l(58039);function Dn(t,o){1&t&&e._UZ(0,"input",17),2&t&&e.Q6J("readonly",!0)}function xn(t,o){1&t&&(e.TgZ(0,"option",21),e.SDv(1,22),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Zn(t,o){if(1&t&&(e.TgZ(0,"option",23),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function wn(t,o){if(1&t&&(e.TgZ(0,"select",18),e.YNc(1,xn,2,1,"option",19),e.YNc(2,Zn,2,2,"option",20),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",null!==_.userCandidates),e.xp6(1),e.Q6J("ngForOf",_.userCandidates)}}function kn(t,o){1&t&&(e.TgZ(0,"span",24),e.SDv(1,25),e.qZA())}function qn(t,o){1&t&&(e.TgZ(0,"div",7)(1,"div",26)(2,"div",27),e._UZ(3,"input",28),e.TgZ(4,"label",29),e.SDv(5,30),e.qZA()()()())}function Bn(t,o){1&t&&(e.TgZ(0,"span",24),e.SDv(1,37),e.qZA())}const Ze=function(t){return{required:t}};function Hn(t,o){if(1&t&&(e.TgZ(0,"div",7)(1,"label",31),e.SDv(2,32),e.qZA(),e.TgZ(3,"div",10)(4,"div",33),e._UZ(5,"input",34)(6,"button",35)(7,"cd-copy-2-clipboard-button",36),e.qZA(),e.YNc(8,Bn,2,0,"span",13),e.qZA()()),2&t){const _=e.oxw(),n=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(3,Ze,!_.viewing)),e.xp6(4),e.Q6J("readonly",_.viewing),e.xp6(3),e.Q6J("ngIf",_.formGroup.showError("access_key",n,"required"))}}function Xn(t,o){1&t&&(e.TgZ(0,"span",24),e.SDv(1,43),e.qZA())}function Kn(t,o){if(1&t&&(e.TgZ(0,"div",7)(1,"label",38),e.SDv(2,39),e.qZA(),e.TgZ(3,"div",10)(4,"div",33),e._UZ(5,"input",40)(6,"button",41)(7,"cd-copy-2-clipboard-button",42),e.qZA(),e.YNc(8,Xn,2,0,"span",13),e.qZA()()),2&t){const _=e.oxw(),n=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(3,Ze,!_.viewing)),e.xp6(4),e.Q6J("readonly",_.viewing),e.xp6(3),e.Q6J("ngIf",_.formGroup.showError("secret_key",n,"required"))}}let s_=(()=>{class t{constructor(_,n,i){this.formBuilder=_,this.activeModal=n,this.actionLabels=i,this.submitAction=new e.vpe,this.viewing=!0,this.userCandidates=[],this.resource="S3 Key",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({user:[null,[a.kI.required]],generate_key:[!0],access_key:[null,[p.h.requiredIf({generate_key:!1})]],secret_key:[null,[p.h.requiredIf({generate_key:!1})]]})}setViewing(_=!0){this.viewing=_,this.action=this.viewing?this.actionLabels.SHOW:this.actionLabels.CREATE}setValues(_,n,i){this.formGroup.setValue({user:_,generate_key:R().isEmpty(n),access_key:n,secret_key:i})}setUserCandidates(_){this.userCandidates=_}onSubmit(){this.submitAction.emit(this.formGroup.value),this.activeModal.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Q.O),e.Y36(O.Kz),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-s3-key-modal"]],outputs:{submitAction:"submitAction"},decls:23,vars:24,consts:function(){let o,_,n,i,s,r,d,g,E;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",n="-- Select a username --",i="This field is required.",s="Auto-generate key",r="Access key",d="This field is required.",g="Secret key",E="This field is required.",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","user",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","user","class","form-control","type","text","formControlName","user",3,"readonly",4,"ngIf"],["id","user","class","form-control","formControlName","user","autofocus","",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","showSubmit","submitActionEvent"],["id","user","type","text","formControlName","user",1,"form-control",3,"readonly"],["id","user","formControlName","user","autofocus","",1,"form-control"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],[3,"ngValue"],n,[3,"value"],[1,"invalid-feedback"],i,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","generate_key","type","checkbox","formControlName","generate_key",1,"custom-control-input"],["for","generate_key",1,"custom-control-label"],s,["for","access_key",1,"cd-col-form-label",3,"ngClass"],r,[1,"input-group"],["id","access_key","type","password","formControlName","access_key",1,"form-control",3,"readonly"],["type","button","cdPasswordButton","access_key",1,"btn","btn-light"],["source","access_key"],d,["for","secret_key",1,"cd-col-form-label",3,"ngClass"],g,["id","secret_key","type","password","formControlName","secret_key",1,"form-control",3,"readonly"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],E]},template:function(_,n){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e.YNc(13,Dn,1,1,"input",11),e.YNc(14,wn,3,2,"select",12),e.YNc(15,kn,2,0,"span",13),e.qZA()(),e.YNc(16,qn,6,0,"div",14),e.YNc(17,Hn,9,5,"div",14),e.YNc(18,Kn,9,5,"div",14),e.qZA(),e.TgZ(19,"div",15)(20,"cd-form-button-panel",16),e.NdJ("submitActionEvent",function(){return n.onSubmit()}),e.ALo(21,"titlecase"),e.ALo(22,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",n.activeModal),e.xp6(4),e.pQV(e.lcZ(3,14,n.action))(e.lcZ(4,16,n.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",n.formGroup),e.xp6(4),e.Q6J("ngClass",e.VKq(22,Ze,!n.viewing)),e.xp6(3),e.Q6J("ngIf",n.viewing),e.xp6(1),e.Q6J("ngIf",!n.viewing),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",!n.viewing),e.xp6(1),e.Q6J("ngIf",!n.formGroup.getValue("generate_key")),e.xp6(1),e.Q6J("ngIf",!n.formGroup.getValue("generate_key")),e.xp6(2),e.Q6J("form",n.formGroup)("submitText",e.lcZ(21,18,n.action)+" "+e.lcZ(22,20,n.resource))("showSubmit",!n.viewing)}},directives:[ne.z,a._Y,a.JL,Y.V,a.sg,H.P,M.mk,M.O5,q.o,a.Fj,X.b,a.JJ,a.u,a.EJ,ie.U,a.YN,a.Kr,M.sg,a.Wl,Ie.C,ve.s,J.p],pipes:[M.rS,V.m],styles:[""]}),t})();class zn{}function Qn(t,o){1&t&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function Yn(t,o){1&t&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function Jn(t,o){if(1&t&&(e.TgZ(0,"option",32),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Vn(t,o){1&t&&(e.TgZ(0,"span",29),e.SDv(1,33),e.qZA())}function jn(t,o){1&t&&(e.TgZ(0,"span",29),e.SDv(1,47),e.qZA())}function eo(t,o){if(1&t&&(e.TgZ(0,"div",7)(1,"label",41),e.SDv(2,42),e.qZA(),e.TgZ(3,"div",10)(4,"div",43),e._UZ(5,"input",44)(6,"button",45)(7,"cd-copy-2-clipboard-button",46),e.qZA(),e.YNc(8,jn,2,0,"span",15),e.qZA()()),2&t){const _=e.oxw(2),n=e.MAs(7);e.xp6(8),e.Q6J("ngIf",_.formGroup.showError("secret_key",n,"required"))}}function _o(t,o){if(1&t&&(e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,34),e.qZA(),e.TgZ(3,"div",7)(4,"div",35)(5,"div",36),e._UZ(6,"input",37),e.TgZ(7,"label",38),e.SDv(8,39),e.qZA()()()(),e.YNc(9,eo,9,1,"div",40),e.qZA()),2&t){const _=e.oxw();e.xp6(9),e.Q6J("ngIf",!_.editing&&!_.formGroup.getValue("generate_secret"))}}const to=function(t){return{required:t}},no=function(){return["read","write"]};let oo=(()=>{class t{constructor(_,n,i){this.formBuilder=_,this.bsModalRef=n,this.actionLabels=i,this.submitAction=new e.vpe,this.editing=!0,this.subusers=[],this.resource="Subuser",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({uid:[null],subuid:[null,[a.kI.required,this.subuserValidator()]],perm:[null,[a.kI.required]],generate_secret:[!0],secret_key:[null,[p.h.requiredIf({generate_secret:!1})]]})}subuserValidator(){const _=this;return n=>_.editing||(0,p.P)(n.value)?null:_.subusers.some(s=>R().isEqual(_.getSubuserName(s.id),n.value))?{subuserIdExists:!0}:null}getSubuserName(_){if(R().isEmpty(_))return _;const n=_.match(/([^:]+)(:(.+))?/);return R().isUndefined(n[3])?n[1]:n[3]}setEditing(_=!0){this.editing=_,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE}setValues(_,n="",i=""){this.formGroup.setValue({uid:_,subuid:this.getSubuserName(n),perm:i,generate_secret:!0,secret_key:null})}setSubusers(_){this.subusers=_}onSubmit(){const _=this.formGroup.value,n=new zn;n.id=`${_.uid}:${_.subuid}`,n.permissions=_.perm,n.generate_secret=_.generate_secret,n.secret_key=_.secret_key,this.submitAction.emit(n),this.bsModalRef.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Q.O),e.Y36(O.Kz),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-subuser-modal"]],outputs:{submitAction:"submitAction"},decls:39,vars:26,consts:function(){let o,_,n,i,s,r,d,g,E,S,G,P,b,N;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",n="Subuser",i="Permission",s="-- Select a permission --",r="read, write",d="full",g="This field is required.",E="The chosen subuser ID is already in use.",S="This field is required.",G="Swift key",P="Auto-generate secret",b="Secret key",N="This field is required.",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","uid",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["id","uid","type","text","formControlName","uid",1,"form-control",3,"readonly"],["for","subuid",1,"cd-col-form-label",3,"ngClass"],n,["id","subuid","type","text","formControlName","subuid","autofocus","",1,"form-control",3,"readonly"],["class","invalid-feedback",4,"ngIf"],["for","perm",1,"cd-col-form-label","required"],i,["id","perm","formControlName","perm",1,"form-select"],[3,"ngValue"],s,[3,"value",4,"ngFor","ngForOf"],["value","read-write"],r,["value","full-control"],d,[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],g,E,[3,"value"],S,G,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","generate_secret","type","checkbox","formControlName","generate_secret",1,"custom-control-input"],["for","generate_secret",1,"custom-control-label"],P,["class","form-group row",4,"ngIf"],["for","secret_key",1,"cd-col-form-label","required"],b,[1,"input-group"],["id","secret_key","type","password","formControlName","secret_key",1,"form-control"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],N]},template:function(_,n){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.qZA()(),e.TgZ(14,"div",7)(15,"label",12),e.SDv(16,13),e.qZA(),e.TgZ(17,"div",10),e._UZ(18,"input",14),e.YNc(19,Qn,2,0,"span",15),e.YNc(20,Yn,2,0,"span",15),e.qZA()(),e.TgZ(21,"div",7)(22,"label",16),e.SDv(23,17),e.qZA(),e.TgZ(24,"div",10)(25,"select",18)(26,"option",19),e.SDv(27,20),e.qZA(),e.YNc(28,Jn,2,2,"option",21),e.TgZ(29,"option",22),e.SDv(30,23),e.qZA(),e.TgZ(31,"option",24),e.SDv(32,25),e.qZA()(),e.YNc(33,Vn,2,0,"span",15),e.qZA()(),e.YNc(34,_o,10,1,"fieldset",26),e.qZA(),e.TgZ(35,"div",27)(36,"cd-form-button-panel",28),e.NdJ("submitActionEvent",function(){return n.onSubmit()}),e.ALo(37,"titlecase"),e.ALo(38,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",n.bsModalRef),e.xp6(4),e.pQV(e.lcZ(3,15,n.action))(e.lcZ(4,17,n.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",n.formGroup),e.xp6(7),e.Q6J("readonly",!0),e.xp6(2),e.Q6J("ngClass",e.VKq(23,to,!n.editing)),e.xp6(3),e.Q6J("readonly",n.editing),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("subuid",i,"required")),e.xp6(1),e.Q6J("ngIf",n.formGroup.showError("subuid",i,"subuserIdExists")),e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(25,no)),e.xp6(5),e.Q6J("ngIf",n.formGroup.showError("perm",i,"required")),e.xp6(1),e.Q6J("ngIf",!n.editing),e.xp6(2),e.Q6J("form",n.formGroup)("submitText",e.lcZ(37,19,n.action)+" "+e.lcZ(38,21,n.resource))}},directives:[ne.z,a._Y,a.JL,Y.V,a.sg,H.P,q.o,a.Fj,X.b,a.JJ,a.u,M.mk,ie.U,M.O5,a.EJ,a.YN,a.Kr,M.sg,a.Wl,Ie.C,ve.s,J.p],pipes:[M.rS,V.m],styles:[""]}),t})();var io=l(13472);let a_=(()=>{class t{constructor(_,n){this.activeModal=_,this.actionLabels=n,this.resource="Swift Key",this.action=this.actionLabels.SHOW}setValues(_,n){this.user=_,this.secret_key=n}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(O.Kz),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-swift-key-modal"]],decls:23,vars:11,consts:function(){let o,_,n;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",n="Secret key",[[3,"modalRef"],[1,"modal-title"],o,[1,"modal-content"],[1,"modal-body"],["novalidate",""],[1,"form-group","row"],["for","user",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["id","user","name","user","type","text",1,"form-control",3,"readonly","ngModel","ngModelChange"],["for","secret_key",1,"cd-col-form-label"],n,[1,"input-group"],["id","secret_key","name","secret_key","type","password",1,"form-control",3,"ngModel","readonly","ngModelChange"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],[1,"modal-footer"],[3,"backAction"]]},template:function(_,n){1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"div",4)(7,"form",5)(8,"div",6)(9,"label",7),e.SDv(10,8),e.qZA(),e.TgZ(11,"div",9)(12,"input",10),e.NdJ("ngModelChange",function(s){return n.user=s}),e.qZA()()(),e.TgZ(13,"div",6)(14,"label",11),e.SDv(15,12),e.qZA(),e.TgZ(16,"div",9)(17,"div",13)(18,"input",14),e.NdJ("ngModelChange",function(s){return n.secret_key=s}),e.qZA(),e._UZ(19,"button",15)(20,"cd-copy-2-clipboard-button",16),e.qZA()()()()(),e.TgZ(21,"div",17)(22,"cd-back-button",18),e.NdJ("backAction",function(){return n.activeModal.close()}),e.qZA()(),e.BQk(),e.qZA()),2&_&&(e.Q6J("modalRef",n.activeModal),e.xp6(4),e.pQV(e.lcZ(3,7,n.action))(e.lcZ(4,9,n.resource)),e.QtT(2),e.xp6(8),e.Q6J("readonly",!0)("ngModel",n.user),e.xp6(6),e.Q6J("ngModel",n.secret_key)("readonly",!0))},directives:[ne.z,a._Y,a.JL,a.F,H.P,q.o,a.Fj,X.b,a.JJ,a.On,Ie.C,ve.s,io.W],pipes:[M.rS,V.m],styles:[""]}),t})();var so=l(17932);function ao(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,51),e.qZA())}function ro(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,52),e.qZA())}function lo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,53),e.qZA())}function co(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,57),e.qZA())}function uo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,58),e.qZA())}function Ro(t,o){if(1&t&&(e.TgZ(0,"div",8)(1,"label",54),e.SDv(2,55),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",56),e.YNc(5,co,2,0,"span",13),e.YNc(6,uo,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(4),e.Q6J("readonly",n.editing),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("tenant",_,"pattern")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("tenant",_,"notUnique"))}}function Eo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,59),e.qZA())}function go(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,60),e.qZA())}function fo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,61),e.qZA())}function So(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,62),e.qZA())}function To(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,65),e.qZA())}function Co(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,66),e.qZA())}function Mo(t,o){if(1&t&&(e.TgZ(0,"div",8),e._UZ(1,"label",63),e.TgZ(2,"div",11),e._UZ(3,"input",64),e.YNc(4,To,2,0,"span",13),e.YNc(5,Co,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(4),e.Q6J("ngIf",n.userForm.showError("max_buckets",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("max_buckets",_,"min"))}}function po(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,77),e.qZA())}function mo(t,o){if(1&t&&(e.TgZ(0,"div",8)(1,"label",71),e.SDv(2,72),e.qZA(),e.TgZ(3,"div",11)(4,"div",73),e._UZ(5,"input",74)(6,"button",75)(7,"cd-copy-2-clipboard-button",76),e.qZA(),e.YNc(8,po,2,0,"span",13),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(8),e.Q6J("ngIf",n.userForm.showError("access_key",_,"required"))}}function Ao(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,83),e.qZA())}function Go(t,o){if(1&t&&(e.TgZ(0,"div",8)(1,"label",78),e.SDv(2,79),e.qZA(),e.TgZ(3,"div",11)(4,"div",73),e._UZ(5,"input",80)(6,"button",81)(7,"cd-copy-2-clipboard-button",82),e.qZA(),e.YNc(8,Ao,2,0,"span",13),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),n=e.oxw();e.xp6(8),e.Q6J("ngIf",n.userForm.showError("secret_key",_,"required"))}}function Po(t,o){if(1&t&&(e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,67),e.qZA(),e.TgZ(3,"div",8)(4,"div",14)(5,"div",15),e._UZ(6,"input",68),e.TgZ(7,"label",69),e.SDv(8,70),e.qZA()()()(),e.YNc(9,mo,9,1,"div",19),e.YNc(10,Go,9,1,"div",19),e.qZA()),2&t){const _=e.oxw(2);e.xp6(9),e.Q6J("ngIf",!_.editing&&!_.userForm.getValue("generate_key")),e.xp6(1),e.Q6J("ngIf",!_.editing&&!_.userForm.getValue("generate_key"))}}function Oo(t,o){1&t&&(e.TgZ(0,"span",94)(1,"span",95),e.SDv(2,96),e.qZA()())}const Z=function(t){return[t]};function bo(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"span")(1,"div",73)(2,"span",97),e._UZ(3,"i"),e.qZA(),e._UZ(4,"input",98),e.TgZ(5,"span",97),e._UZ(6,"i"),e.qZA(),e._UZ(7,"input",98),e.TgZ(8,"button",99),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).showSubuserModal(s)}),e._UZ(9,"i",91),e.qZA(),e.TgZ(10,"button",100),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).deleteSubuser(s)}),e._UZ(11,"i",91),e.qZA()(),e._UZ(12,"span",95),e.qZA()}if(2&t){const _=o.$implicit,n=e.oxw(3);e.xp6(3),e.Tol(n.icons.user),e.xp6(1),e.s9C("value",_.id),e.xp6(2),e.Tol(n.icons.share),e.xp6(1),e.s9C("value","full-control"===_.permissions?"full":_.permissions),e.xp6(2),e.Q6J("ngClass",e.VKq(10,Z,n.icons.edit)),e.xp6(2),e.Q6J("ngClass",e.VKq(12,Z,n.icons.destroy))}}function No(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,84),e.qZA(),e.TgZ(3,"div",85)(4,"div",14),e.YNc(5,Oo,3,0,"span",86),e.YNc(6,bo,13,14,"span",87),e.TgZ(7,"div",88)(8,"div",89)(9,"button",90),e.NdJ("click",function(){return e.CHM(_),e.oxw(2).showSubuserModal()}),e._UZ(10,"i",91),e.ynx(11),e.SDv(12,92),e.ALo(13,"titlecase"),e.ALo(14,"upperFirst"),e.BQk(),e.qZA()()(),e._UZ(15,"span",93),e.qZA()()()}if(2&t){const _=e.oxw(2);e.xp6(5),e.Q6J("ngIf",0===_.subusers.length),e.xp6(1),e.Q6J("ngForOf",_.subusers),e.xp6(4),e.Q6J("ngClass",e.VKq(9,Z,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(13,5,_.actionLabels.CREATE))(e.lcZ(14,7,_.subuserLabel)),e.QtT(12)}}function Wo(t,o){1&t&&(e.TgZ(0,"span",94)(1,"span",95),e.SDv(2,106),e.qZA()())}function Uo(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"span")(1,"div",73)(2,"div",97),e._UZ(3,"i"),e.qZA(),e._UZ(4,"input",98),e.TgZ(5,"button",107),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).showS3KeyModal(s)}),e._UZ(6,"i",91),e.qZA(),e.TgZ(7,"button",108),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).deleteS3Key(s)}),e._UZ(8,"i",91),e.qZA()(),e._UZ(9,"span",95),e.qZA()}if(2&t){const _=o.$implicit,n=e.oxw(3);e.xp6(3),e.Tol(n.icons.key),e.xp6(1),e.s9C("value",_.user),e.xp6(2),e.Q6J("ngClass",e.VKq(6,Z,n.icons.show)),e.xp6(2),e.Q6J("ngClass",e.VKq(8,Z,n.icons.destroy))}}function $o(t,o){1&t&&(e.TgZ(0,"span",94)(1,"span",95),e.SDv(2,109),e.qZA()())}function Io(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"span")(1,"div",73)(2,"span",97),e._UZ(3,"i"),e.qZA(),e._UZ(4,"input",98),e.TgZ(5,"button",110),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).showSwiftKeyModal(s)}),e._UZ(6,"i",91),e.qZA()(),e._UZ(7,"span",95),e.qZA()}if(2&t){const _=o.$implicit,n=e.oxw(3);e.xp6(3),e.Tol(n.icons.key),e.xp6(1),e.s9C("value",_.user),e.xp6(2),e.Q6J("ngClass",e.VKq(5,Z,n.icons.show))}}function vo(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,101),e.qZA(),e.TgZ(3,"div",8)(4,"label",63),e.SDv(5,102),e.qZA(),e.TgZ(6,"div",11),e.YNc(7,Wo,3,0,"span",86),e.YNc(8,Uo,10,10,"span",87),e.TgZ(9,"div",88)(10,"div",89)(11,"button",103),e.NdJ("click",function(){return e.CHM(_),e.oxw(2).showS3KeyModal()}),e._UZ(12,"i",91),e.ynx(13),e.SDv(14,104),e.ALo(15,"titlecase"),e.ALo(16,"upperFirst"),e.BQk(),e.qZA()()(),e._UZ(17,"span",93),e.qZA(),e._UZ(18,"hr"),e.qZA(),e.TgZ(19,"div",8)(20,"label",63),e.SDv(21,105),e.qZA(),e.TgZ(22,"div",11),e.YNc(23,$o,3,0,"span",86),e.YNc(24,Io,8,7,"span",87),e.qZA()()()}if(2&t){const _=e.oxw(2);e.xp6(7),e.Q6J("ngIf",0===_.s3Keys.length),e.xp6(1),e.Q6J("ngForOf",_.s3Keys),e.xp6(4),e.Q6J("ngClass",e.VKq(11,Z,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(15,7,_.actionLabels.CREATE))(e.lcZ(16,9,_.s3keyLabel)),e.QtT(14),e.xp6(7),e.Q6J("ngIf",0===_.swiftKeys.length),e.xp6(1),e.Q6J("ngForOf",_.swiftKeys)}}function Fo(t,o){1&t&&(e.TgZ(0,"span",94)(1,"span",95),e.SDv(2,114),e.qZA()())}function ho(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"span")(1,"div",73)(2,"div",97),e._UZ(3,"i"),e.qZA(),e._UZ(4,"input",98),e.TgZ(5,"button",115),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).showCapabilityModal(s)}),e._UZ(6,"i",91),e.qZA(),e.TgZ(7,"button",116),e.NdJ("click",function(){const s=e.CHM(_).index;return e.oxw(3).deleteCapability(s)}),e._UZ(8,"i",91),e.qZA()(),e._UZ(9,"span",95),e.qZA()}if(2&t){const _=o.$implicit,n=e.oxw(3);e.xp6(3),e.Tol(n.icons.share),e.xp6(1),e.hYB("value","",_.type,":",_.perm,""),e.xp6(2),e.Q6J("ngClass",e.VKq(7,Z,n.icons.edit)),e.xp6(2),e.Q6J("ngClass",e.VKq(9,Z,n.icons.destroy))}}function Lo(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,111),e.qZA(),e.TgZ(3,"div",8)(4,"div",14),e.YNc(5,Fo,3,0,"span",86),e.YNc(6,ho,10,11,"span",87),e.TgZ(7,"div",88)(8,"div",89)(9,"button",112),e.NdJ("click",function(){return e.CHM(_),e.oxw(2).showCapabilityModal()}),e.ALo(10,"pipeFunction"),e.ALo(11,"pipeFunction"),e._UZ(12,"i",91),e.ynx(13),e.SDv(14,113),e.ALo(15,"titlecase"),e.ALo(16,"upperFirst"),e.BQk(),e.qZA()()(),e._UZ(17,"span",93),e.qZA()()()}if(2&t){const _=e.oxw(2);e.xp6(5),e.Q6J("ngIf",0===_.capabilities.length),e.xp6(1),e.Q6J("ngForOf",_.capabilities),e.xp6(3),e.Q6J("disabled",e.xi3(10,7,_.capabilities,_.hasAllCapabilities))("disableTooltip",!e.xi3(11,10,_.capabilities,_.hasAllCapabilities)),e.xp6(3),e.Q6J("ngClass",e.VKq(17,Z,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(15,13,_.actionLabels.ADD))(e.lcZ(16,15,_.capabilityLabel)),e.QtT(14)}}function yo(t,o){1&t&&(e.TgZ(0,"div",8)(1,"div",14)(2,"div",15),e._UZ(3,"input",117),e.TgZ(4,"label",118),e.SDv(5,119),e.qZA()()()())}function Do(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,123),e.qZA())}function xo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,124),e.qZA())}function Zo(t,o){if(1&t&&(e.TgZ(0,"div",8)(1,"label",120),e.SDv(2,121),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",122),e.YNc(5,Do,2,0,"span",13),e.YNc(6,xo,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.userForm.showError("user_quota_max_size",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("user_quota_max_size",_,"quotaMaxSize"))}}function wo(t,o){1&t&&(e.TgZ(0,"div",8)(1,"div",14)(2,"div",15),e._UZ(3,"input",125),e.TgZ(4,"label",126),e.SDv(5,127),e.qZA()()()())}function ko(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,131),e.qZA())}function qo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,132),e.qZA())}function Bo(t,o){if(1&t&&(e.TgZ(0,"div",8)(1,"label",128),e.SDv(2,129),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",130),e.YNc(5,ko,2,0,"span",13),e.YNc(6,qo,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.userForm.showError("user_quota_max_objects",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("user_quota_max_objects",_,"min"))}}function Ho(t,o){1&t&&(e.TgZ(0,"div",8)(1,"div",14)(2,"div",15),e._UZ(3,"input",133),e.TgZ(4,"label",134),e.SDv(5,135),e.qZA()()()())}function Xo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,139),e.qZA())}function Ko(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,140),e.qZA())}function zo(t,o){if(1&t&&(e.TgZ(0,"div",8)(1,"label",136),e.SDv(2,137),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",138),e.YNc(5,Xo,2,0,"span",13),e.YNc(6,Ko,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.userForm.showError("bucket_quota_max_size",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("bucket_quota_max_size",_,"quotaMaxSize"))}}function Qo(t,o){1&t&&(e.TgZ(0,"div",8)(1,"div",14)(2,"div",15),e._UZ(3,"input",141),e.TgZ(4,"label",142),e.SDv(5,143),e.qZA()()()())}function Yo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,147),e.qZA())}function Jo(t,o){1&t&&(e.TgZ(0,"span",50),e.SDv(1,148),e.qZA())}function Vo(t,o){if(1&t&&(e.TgZ(0,"div",8)(1,"label",144),e.SDv(2,145),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",146),e.YNc(5,Yo,2,0,"span",13),e.YNc(6,Jo,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),n=e.oxw();e.xp6(5),e.Q6J("ngIf",n.userForm.showError("bucket_quota_max_objects",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("bucket_quota_max_objects",_,"min"))}}const r_=function(t){return{required:t}};function jo(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.YNc(14,ao,2,0,"span",13),e.YNc(15,ro,2,0,"span",13),e.YNc(16,lo,2,0,"span",13),e.qZA()(),e.TgZ(17,"div",8)(18,"div",14)(19,"div",15)(20,"input",16),e.NdJ("click",function(){return e.CHM(_),e.oxw().updateFieldsWhenTenanted()}),e.qZA(),e.TgZ(21,"label",17),e.SDv(22,18),e.qZA()()()(),e.YNc(23,Ro,7,3,"div",19),e.TgZ(24,"div",8)(25,"label",20),e.SDv(26,21),e.qZA(),e.TgZ(27,"div",11),e._UZ(28,"input",22),e.YNc(29,Eo,2,0,"span",13),e.YNc(30,go,2,0,"span",13),e.qZA()(),e.TgZ(31,"div",8)(32,"label",23),e.SDv(33,24),e.qZA(),e.TgZ(34,"div",11),e._UZ(35,"input",25),e.YNc(36,fo,2,0,"span",13),e.YNc(37,So,2,0,"span",13),e.qZA()(),e.TgZ(38,"div",8)(39,"label",26),e.SDv(40,27),e.qZA(),e.TgZ(41,"div",11)(42,"select",28),e.NdJ("change",function(i){return e.CHM(_),e.oxw().onMaxBucketsModeChange(i.target.value)}),e.TgZ(43,"option",29),e.SDv(44,30),e.qZA(),e.TgZ(45,"option",31),e.SDv(46,32),e.qZA(),e.TgZ(47,"option",33),e.SDv(48,34),e.qZA()()()(),e.YNc(49,Mo,6,2,"div",19),e.TgZ(50,"div",8)(51,"div",14)(52,"div",15),e._UZ(53,"input",35),e.TgZ(54,"label",36),e.SDv(55,37),e.qZA(),e.TgZ(56,"cd-helper"),e.SDv(57,38),e.qZA()()()(),e.YNc(58,Po,11,2,"fieldset",39),e.YNc(59,No,16,11,"fieldset",39),e.YNc(60,vo,25,13,"fieldset",39),e.YNc(61,Lo,18,19,"fieldset",39),e.TgZ(62,"fieldset")(63,"legend"),e.SDv(64,40),e.qZA(),e.TgZ(65,"div",8)(66,"div",14)(67,"div",15),e._UZ(68,"input",41),e.TgZ(69,"label",42),e.SDv(70,43),e.qZA()()()(),e.YNc(71,yo,6,0,"div",19),e.YNc(72,Zo,7,2,"div",19),e.YNc(73,wo,6,0,"div",19),e.YNc(74,Bo,7,2,"div",19),e.qZA(),e.TgZ(75,"fieldset")(76,"legend"),e.SDv(77,44),e.qZA(),e.TgZ(78,"div",8)(79,"div",14)(80,"div",15),e._UZ(81,"input",45),e.TgZ(82,"label",46),e.SDv(83,47),e.qZA()()()(),e.YNc(84,Ho,6,0,"div",19),e.YNc(85,zo,7,2,"div",19),e.YNc(86,Qo,6,0,"div",19),e.YNc(87,Vo,7,2,"div",19),e.qZA()(),e.TgZ(88,"div",48)(89,"cd-form-button-panel",49),e.NdJ("submitActionEvent",function(){return e.CHM(_),e.oxw().onSubmit()}),e.ALo(90,"titlecase"),e.ALo(91,"upperFirst"),e.qZA()()()()()}if(2&t){const _=e.MAs(2),n=e.oxw();e.xp6(1),e.Q6J("formGroup",n.userForm),e.xp6(6),e.pQV(e.lcZ(6,30,n.action))(e.lcZ(7,32,n.resource)),e.QtT(5),e.xp6(3),e.Q6J("ngClass",e.VKq(38,r_,!n.editing)),e.xp6(3),e.Q6J("readonly",n.editing),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("user_id",_,"required")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("user_id",_,"pattern")),e.xp6(1),e.Q6J("ngIf",!n.userForm.getValue("show_tenant")&&n.userForm.showError("user_id",_,"notUnique")),e.xp6(4),e.Q6J("readonly",!0),e.xp6(3),e.Q6J("ngIf",n.userForm.getValue("show_tenant")),e.xp6(2),e.Q6J("ngClass",e.VKq(40,r_,!n.editing)),e.xp6(4),e.Q6J("ngIf",n.userForm.showError("display_name",_,"pattern")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("display_name",_,"required")),e.xp6(6),e.Q6J("ngIf",n.userForm.showError("email",_,"email")),e.xp6(1),e.Q6J("ngIf",n.userForm.showError("email",_,"notUnique")),e.xp6(12),e.Q6J("ngIf",1==n.userForm.get("max_buckets_mode").value),e.xp6(9),e.Q6J("ngIf",!n.editing),e.xp6(1),e.Q6J("ngIf",n.editing),e.xp6(1),e.Q6J("ngIf",n.editing),e.xp6(1),e.Q6J("ngIf",n.editing),e.xp6(10),e.Q6J("ngIf",n.userForm.controls.user_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.user_quota_enabled.value&&!n.userForm.getValue("user_quota_max_size_unlimited")),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.user_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.user_quota_enabled.value&&!n.userForm.getValue("user_quota_max_objects_unlimited")),e.xp6(10),e.Q6J("ngIf",n.userForm.controls.bucket_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.bucket_quota_enabled.value&&!n.userForm.getValue("bucket_quota_max_size_unlimited")),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.bucket_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",n.userForm.controls.bucket_quota_enabled.value&&!n.userForm.getValue("bucket_quota_max_objects_unlimited")),e.xp6(2),e.Q6J("form",n.userForm)("submitText",e.lcZ(90,34,n.action)+" "+e.lcZ(91,36,n.resource))}}let l_=(()=>{class t extends Ke.E{constructor(_,n,i,s,r,d,g){super(),this.formBuilder=_,this.route=n,this.router=i,this.rgwUserService=s,this.modalService=r,this.notificationService=d,this.actionLabels=g,this.editing=!1,this.submitObservables=[],this.icons=k.P,this.subusers=[],this.s3Keys=[],this.swiftKeys=[],this.capabilities=[],this.showTenant=!1,this.previousTenant=null,this.resource="user",this.subuserLabel="subuser",this.s3keyLabel="S3 Key",this.capabilityLabel="capability",this.editing=this.router.url.startsWith(`/rgw/user/${A.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.createForm()}createForm(){this.userForm=this.formBuilder.group({user_id:[null,[a.kI.required,a.kI.pattern(/^[a-zA-Z0-9!@#%^&*()_-]+$/)],this.editing?[]:[p.h.unique(this.rgwUserService.exists,this.rgwUserService,()=>this.userForm.getValue("tenant"))]],show_tenant:[this.editing],tenant:[null,[a.kI.pattern(/^[a-zA-Z0-9!@#%^&*()_-]+$/)],this.editing?[]:[p.h.unique(this.rgwUserService.exists,this.rgwUserService,()=>this.userForm.getValue("user_id"),!0)]],display_name:[null,[a.kI.required,a.kI.pattern(/^[a-zA-Z0-9!@#%^&*()_ -]+$/)]],email:[null,[p.h.email],[p.h.unique(this.rgwUserService.emailExists,this.rgwUserService)]],max_buckets_mode:[1],max_buckets:[1e3,[p.h.requiredIf({max_buckets_mode:"1"}),p.h.number(!1)]],suspended:[!1],generate_key:[!0],access_key:[null,[p.h.requiredIf({generate_key:!1})]],secret_key:[null,[p.h.requiredIf({generate_key:!1})]],user_quota_enabled:[!1],user_quota_max_size_unlimited:[!0],user_quota_max_size:[null,[p.h.composeIf({user_quota_enabled:!0,user_quota_max_size_unlimited:!1},[a.kI.required,this.quotaMaxSizeValidator])]],user_quota_max_objects_unlimited:[!0],user_quota_max_objects:[null,[p.h.requiredIf({user_quota_enabled:!0,user_quota_max_objects_unlimited:!1})]],bucket_quota_enabled:[!1],bucket_quota_max_size_unlimited:[!0],bucket_quota_max_size:[null,[p.h.composeIf({bucket_quota_enabled:!0,bucket_quota_max_size_unlimited:!1},[a.kI.required,this.quotaMaxSizeValidator])]],bucket_quota_max_objects_unlimited:[!0],bucket_quota_max_objects:[null,[p.h.requiredIf({bucket_quota_enabled:!0,bucket_quota_max_objects_unlimited:!1})]]})}ngOnInit(){this.route.params.subscribe(_=>{if(!_.hasOwnProperty("uid"))return void this.loadingReady();const n=decodeURIComponent(_.uid),i=[];i.push(this.rgwUserService.get(n)),i.push(this.rgwUserService.getQuota(n)),(0,_e.D)(i).subscribe(s=>{const r=R().clone(this.userForm.value);let d=R().pick(s[0],R().keys(this.userForm.value));switch(d.max_buckets){case-1:d.max_buckets_mode=-1,d.max_buckets="";break;case 0:d.max_buckets_mode=0,d.max_buckets="";break;default:d.max_buckets_mode=1}["user","bucket"].forEach(E=>{const S=s[1][E+"_quota"];d[E+"_quota_enabled"]=S.enabled,S.max_size<0?(d[E+"_quota_max_size_unlimited"]=!0,d[E+"_quota_max_size"]=null):(d[E+"_quota_max_size_unlimited"]=!1,d[E+"_quota_max_size"]=`${S.max_size} B`),S.max_objects<0?(d[E+"_quota_max_objects_unlimited"]=!0,d[E+"_quota_max_objects"]=null):(d[E+"_quota_max_objects_unlimited"]=!1,d[E+"_quota_max_objects"]=S.max_objects)}),d=R().merge(r,d),this.userForm.setValue(d),this.subusers=s[0].subusers,this.s3Keys=s[0].keys,this.swiftKeys=s[0].swift_keys;const g={"read, write":"*"};s[0].caps.forEach(E=>{E.perm in g&&(E.perm=g[E.perm])}),this.capabilities=s[0].caps,this.loadingReady()},()=>{this.loadingError()})})}goToListView(){this.router.navigate(["/rgw/user"])}onSubmit(){let _;if(this.userForm.pristine)return void this.goToListView();const n=this.getUID();if(this.editing){if(this._isGeneralDirty()){const i=this._getUpdateArgs();this.submitObservables.push(this.rgwUserService.update(n,i))}_="Updated Object Gateway user '" + n + "'"}else{const i=this._getCreateArgs();this.submitObservables.push(this.rgwUserService.create(i)),_="Created Object Gateway user '" + n + "'"}if(this._isUserQuotaDirty()){const i=this._getUserQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(n,i))}if(this._isBucketQuotaDirty()){const i=this._getBucketQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(n,i))}(0,bn.z)(...this.submitObservables).subscribe({error:()=>{this.userForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.notificationService.show(te.k.success,_),this.goToListView()}})}updateFieldsWhenTenanted(){this.showTenant=this.userForm.getValue("show_tenant"),this.showTenant?(this.userForm.get("user_id").markAsTouched(),this.previousTenant=this.userForm.get("tenant").value,this.userForm.get("tenant").patchValue(null)):(this.userForm.get("user_id").markAsUntouched(),this.userForm.get("tenant").patchValue(this.previousTenant))}getUID(){var _;let n=this.userForm.getValue("user_id");const i=null===(_=this.userForm)||void 0===_?void 0:_.getValue("tenant");return i&&i.length>0&&(n=`${this.userForm.getValue("tenant")}$${n}`),n}quotaMaxSizeValidator(_){return(0,p.P)(_.value)?null:null===RegExp("^(\\d+(\\.\\d+)?)\\s*(B|K(B|iB)?|M(B|iB)?|G(B|iB)?|T(B|iB)?)?$","i").exec(_.value)||(new xe.H).toBytes(_.value)<1024?{quotaMaxSize:!0}:null}setSubuser(_,n){const i={"full-control":"full","read-write":"readwrite"},s=this.getUID();this.submitObservables.push(this.rgwUserService.createSubuser(s,{subuser:_.id,access:_.permissions in i?i[_.permissions]:_.permissions,key_type:"swift",secret_key:_.secret_key,generate_secret:_.generate_secret?"true":"false"})),R().isNumber(n)?this.subusers[n]=_:(this.subusers.push(_),this.swiftKeys.push({user:_.id,secret_key:_.generate_secret?"Apply your changes first...":_.secret_key})),this.userForm.markAsDirty()}deleteSubuser(_){const n=this.subusers[_];this.submitObservables.push(this.rgwUserService.deleteSubuser(this.getUID(),n.id)),this.s3Keys=this.s3Keys.filter(i=>i.user!==n.id),this.swiftKeys=this.swiftKeys.filter(i=>i.user!==n.id),this.subusers.splice(_,1),this.userForm.markAsDirty()}setCapability(_,n){const i=this.getUID();if(R().isNumber(n)){const s=this.capabilities[n];this.submitObservables.push(this.rgwUserService.deleteCapability(i,s.type,s.perm)),this.submitObservables.push(this.rgwUserService.addCapability(i,_.type,_.perm)),this.capabilities[n]=_}else this.submitObservables.push(this.rgwUserService.addCapability(i,_.type,_.perm)),this.capabilities=[...this.capabilities,_];this.userForm.markAsDirty()}deleteCapability(_){const n=this.capabilities[_];this.submitObservables.push(this.rgwUserService.deleteCapability(this.getUID(),n.type,n.perm)),this.capabilities.splice(_,1),this.capabilities=[...this.capabilities],this.userForm.markAsDirty()}hasAllCapabilities(_){return!R().difference(i_.getAll(),R().map(_,"type")).length}setS3Key(_,n){if(!R().isNumber(n)){const i=_.user.match(/([^:]+)(:(.+))?/),s=i[1],r={subuser:i[2]?i[3]:"",generate_key:_.generate_key?"true":"false"};"false"===r.generate_key&&(R().isNil(_.access_key)||(r.access_key=_.access_key),R().isNil(_.secret_key)||(r.secret_key=_.secret_key)),this.submitObservables.push(this.rgwUserService.addS3Key(s,r)),this.s3Keys.push({user:_.user,access_key:_.generate_key?"Apply your changes first...":_.access_key,secret_key:_.generate_key?"Apply your changes first...":_.secret_key})}this.userForm.markAsDirty()}deleteS3Key(_){const n=this.s3Keys[_];this.submitObservables.push(this.rgwUserService.deleteS3Key(this.getUID(),n.access_key)),this.s3Keys.splice(_,1),this.userForm.markAsDirty()}showSubuserModal(_){const n=this.getUID(),i=this.modalService.show(oo);if(R().isNumber(_)){const s=this.subusers[_];i.componentInstance.setEditing(),i.componentInstance.setValues(n,s.id,s.permissions)}else i.componentInstance.setEditing(!1),i.componentInstance.setValues(n),i.componentInstance.setSubusers(this.subusers);i.componentInstance.submitAction.subscribe(s=>{this.setSubuser(s,_)})}showS3KeyModal(_){const n=this.modalService.show(s_);if(R().isNumber(_)){const i=this.s3Keys[_];n.componentInstance.setViewing(),n.componentInstance.setValues(i.user,i.access_key,i.secret_key)}else{const i=this._getS3KeyUserCandidates();n.componentInstance.setViewing(!1),n.componentInstance.setUserCandidates(i),n.componentInstance.submitAction.subscribe(s=>{this.setS3Key(s)})}}showSwiftKeyModal(_){const n=this.modalService.show(a_),i=this.swiftKeys[_];n.componentInstance.setValues(i.user,i.secret_key)}showCapabilityModal(_){const n=this.modalService.show(yn);if(R().isNumber(_)){const i=this.capabilities[_];n.componentInstance.setEditing(),n.componentInstance.setValues(i.type,i.perm)}else n.componentInstance.setEditing(!1),n.componentInstance.setCapabilities(this.capabilities);n.componentInstance.submitAction.subscribe(i=>{this.setCapability(i,_)})}_isGeneralDirty(){return["display_name","email","max_buckets_mode","max_buckets","suspended"].some(_=>this.userForm.get(_).dirty)}_isUserQuotaDirty(){return["user_quota_enabled","user_quota_max_size_unlimited","user_quota_max_size","user_quota_max_objects_unlimited","user_quota_max_objects"].some(_=>this.userForm.get(_).dirty)}_isBucketQuotaDirty(){return["bucket_quota_enabled","bucket_quota_max_size_unlimited","bucket_quota_max_size","bucket_quota_max_objects_unlimited","bucket_quota_max_objects"].some(_=>this.userForm.get(_).dirty)}_getCreateArgs(){const _={uid:this.getUID(),display_name:this.userForm.getValue("display_name"),suspended:this.userForm.getValue("suspended"),email:"",max_buckets:this.userForm.getValue("max_buckets"),generate_key:this.userForm.getValue("generate_key"),access_key:"",secret_key:""},n=this.userForm.getValue("email");R().isString(n)&&n.length>0&&R().merge(_,{email:n}),this.userForm.getValue("generate_key")||R().merge(_,{generate_key:!1,access_key:this.userForm.getValue("access_key"),secret_key:this.userForm.getValue("secret_key")});const s=parseInt(this.userForm.getValue("max_buckets_mode"),10);return R().includes([-1,0],s)&&R().merge(_,{max_buckets:s}),_}_getUpdateArgs(){const _={},n=["display_name","email","max_buckets","suspended"];for(const s of n)_[s]=this.userForm.getValue(s);const i=parseInt(this.userForm.getValue("max_buckets_mode"),10);return R().includes([-1,0],i)&&(_.max_buckets=i),_}_getUserQuotaArgs(){const _={quota_type:"user",enabled:this.userForm.getValue("user_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("user_quota_max_size_unlimited")){const n=(new xe.H).toBytes(this.userForm.getValue("user_quota_max_size"));_.max_size_kb=(n/1024).toFixed(0)}return this.userForm.getValue("user_quota_max_objects_unlimited")||(_.max_objects=this.userForm.getValue("user_quota_max_objects")),_}_getBucketQuotaArgs(){const _={quota_type:"bucket",enabled:this.userForm.getValue("bucket_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("bucket_quota_max_size_unlimited")){const n=(new xe.H).toBytes(this.userForm.getValue("bucket_quota_max_size"));_.max_size_kb=(n/1024).toFixed(0)}return this.userForm.getValue("bucket_quota_max_objects_unlimited")||(_.max_objects=this.userForm.getValue("bucket_quota_max_objects")),_}_getS3KeyUserCandidates(){let _=[];const n=this.getUID();return R().isString(n)&&!R().isEmpty(n)&&_.push(n),this.subusers.forEach(i=>{_.push(i.id)}),this.s3Keys.forEach(i=>{_.push(i.user)}),_=R().uniq(_),_}onMaxBucketsModeChange(_){"1"===_&&(this.userForm.get("max_buckets").valid||this.userForm.patchValue({max_buckets:1e3}))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Q.O),e.Y36(w.gz),e.Y36(w.F0),e.Y36(D),e.Y36(oe.Z),e.Y36(he.g),e.Y36(A.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let o,_,n,i,s,r,d,g,E,S,G,P,b,N,m,W,U,$,I,v,F,h,L,y,f,x,T,B,C,se,ae,re,le,ce,de,ue,Re,Ee,ge,fe,Se,Te,Ce,Me,pe,me,Ae,Ge,Pe,Oe,u,R_,E_,g_,f_,S_,T_,C_,M_,p_,m_,A_,G_,P_,O_,b_,N_,W_,U_;return o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="User ID",n="Show Tenant",i="Full name",s="Email address",r="Max. buckets",d="Disabled",g="Unlimited",E="Custom",S="Suspended",G="Suspending the user disables the user and subuser.",P="User quota",b="Enabled",N="Bucket quota",m="Enabled",W="This field is required.",U="The value is not valid.",$="The chosen user ID is already in use.",I="Tenant",v="The value is not valid.",F="The chosen user ID exists in this tenant.",h="The value is not valid.",L="This field is required.",y="This is not a valid email address.",f="The chosen email address is already in use.",x="This field is required.",T="The entered value must be >= 1.",B="S3 key",C="Auto-generate key",se="Access key",ae="This field is required.",re="Secret key",le="This field is required.",ce="Subusers",de="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",ue="There are no subusers.",Re="Edit",Ee="Delete",ge="Keys",fe="S3",Se="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",Te="Swift",Ce="There are no keys.",Me="Show",pe="Delete",me="There are no keys.",Ae="Show",Ge="Capabilities",Pe="All capabilities are already added.",Oe="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",u="There are no capabilities.",R_="Edit",E_="Delete",g_="Unlimited size",f_="Max. size",S_="This field is required.",T_="The value is not valid.",C_="Unlimited objects",M_="Max. objects",p_="This field is required.",m_="The entered value must be >= 0.",A_="Unlimited size",G_="Max. size",P_="This field is required.",O_="The value is not valid.",b_="Unlimited objects",N_="Max. objects",W_="This field is required.",U_="The entered value must be >= 0.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],o,[1,"card-body"],[1,"form-group","row"],["for","user_id",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","user_id","type","text","formControlName","user_id",1,"form-control",3,"readonly"],["class","invalid-feedback",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","show_tenant","type","checkbox","formControlName","show_tenant",1,"custom-control-input",3,"readonly","click"],["for","show_tenant",1,"custom-control-label"],n,["class","form-group row",4,"ngIf"],["for","display_name",1,"cd-col-form-label",3,"ngClass"],i,["id","display_name","type","text","formControlName","display_name",1,"form-control"],["for","email",1,"cd-col-form-label"],s,["id","email","type","text","formControlName","email",1,"form-control"],["for","max_buckets_mode",1,"cd-col-form-label"],r,["formControlName","max_buckets_mode","name","max_buckets_mode","id","max_buckets_mode",1,"form-select",3,"change"],["value","-1"],d,["value","0"],g,["value","1"],E,["id","suspended","type","checkbox","formControlName","suspended",1,"custom-control-input"],["for","suspended",1,"custom-control-label"],S,G,[4,"ngIf"],P,["id","user_quota_enabled","type","checkbox","formControlName","user_quota_enabled",1,"custom-control-input"],["for","user_quota_enabled",1,"custom-control-label"],b,N,["id","bucket_quota_enabled","type","checkbox","formControlName","bucket_quota_enabled",1,"custom-control-input"],["for","bucket_quota_enabled",1,"custom-control-label"],m,[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],W,U,$,["for","tenant",1,"cd-col-form-label"],I,["id","tenant","type","text","formControlName","tenant","autofocus","",1,"form-control",3,"readonly"],v,F,h,L,y,f,[1,"cd-col-form-label"],["id","max_buckets","type","number","formControlName","max_buckets","min","1",1,"form-control"],x,T,B,["id","generate_key","type","checkbox","formControlName","generate_key",1,"custom-control-input"],["for","generate_key",1,"custom-control-label"],C,["for","access_key",1,"cd-col-form-label","required"],se,[1,"input-group"],["id","access_key","type","password","formControlName","access_key",1,"form-control"],["type","button","cdPasswordButton","access_key",1,"btn","btn-light"],["source","access_key"],ae,["for","secret_key",1,"cd-col-form-label","required"],re,["id","secret_key","type","password","formControlName","secret_key",1,"form-control"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],le,ce,[1,"row"],["class","no-border",4,"ngIf"],[4,"ngFor","ngForOf"],[1,"row","my-2"],[1,"col-12"],["type","button",1,"btn","btn-light","float-end","tc_addSubuserButton",3,"click"],[3,"ngClass"],de,[1,"help-block"],[1,"no-border"],[1,"form-text","text-muted"],ue,[1,"input-group-text"],["type","text","readonly","",1,"cd-form-control",3,"value"],["type","button","ngbTooltip",Re,1,"btn","btn-light","tc_showSubuserButton",3,"click"],["type","button","ngbTooltip",Ee,1,"btn","btn-light","tc_deleteSubuserButton",3,"click"],ge,fe,["type","button",1,"btn","btn-light","float-end","tc_addS3KeyButton",3,"click"],Se,Te,Ce,["type","button","ngbTooltip",Me,1,"btn","btn-light","tc_showS3KeyButton",3,"click"],["type","button","ngbTooltip",pe,1,"btn","btn-light","tc_deleteS3KeyButton",3,"click"],me,["type","button","ngbTooltip",Ae,1,"btn","btn-light","tc_showSwiftKeyButton",3,"click"],Ge,["type","button","ngbTooltip",Pe,"triggers","pointerenter:pointerleave",1,"btn","btn-light","float-end","tc_addCapButton",3,"disabled","disableTooltip","click"],Oe,u,["type","button","ngbTooltip",R_,1,"btn","btn-light","tc_editCapButton",3,"click"],["type","button","ngbTooltip",E_,1,"btn","btn-light","tc_deleteCapButton",3,"click"],["id","user_quota_max_size_unlimited","type","checkbox","formControlName","user_quota_max_size_unlimited",1,"custom-control-input"],["for","user_quota_max_size_unlimited",1,"custom-control-label"],g_,["for","user_quota_max_size",1,"cd-col-form-label","required"],f_,["id","user_quota_max_size","type","text","formControlName","user_quota_max_size","cdDimlessBinary","",1,"form-control"],S_,T_,["id","user_quota_max_objects_unlimited","type","checkbox","formControlName","user_quota_max_objects_unlimited",1,"custom-control-input"],["for","user_quota_max_objects_unlimited",1,"custom-control-label"],C_,["for","user_quota_max_objects",1,"cd-col-form-label","required"],M_,["id","user_quota_max_objects","type","number","formControlName","user_quota_max_objects","min","0",1,"form-control"],p_,m_,["id","bucket_quota_max_size_unlimited","type","checkbox","formControlName","bucket_quota_max_size_unlimited",1,"custom-control-input"],["for","bucket_quota_max_size_unlimited",1,"custom-control-label"],A_,["for","bucket_quota_max_size",1,"cd-col-form-label","required"],G_,["id","bucket_quota_max_size","type","text","formControlName","bucket_quota_max_size","cdDimlessBinary","",1,"form-control"],P_,O_,["id","bucket_quota_max_objects_unlimited","type","checkbox","formControlName","bucket_quota_max_objects_unlimited",1,"custom-control-input"],["for","bucket_quota_max_objects_unlimited",1,"custom-control-label"],b_,["for","bucket_quota_max_objects",1,"cd-col-form-label","required"],N_,["id","bucket_quota_max_objects","type","number","formControlName","bucket_quota_max_objects","min","0",1,"form-control"],W_,U_]},template:function(_,n){1&_&&e.YNc(0,jo,92,42,"div",0),2&_&&e.Q6J("cdFormLoading",n.loading)},directives:[ze.y,a._Y,a.JL,Y.V,a.sg,H.P,M.mk,q.o,a.Fj,X.b,a.JJ,a.u,M.O5,a.Wl,ie.U,a.EJ,a.YN,a.Kr,a.wV,a.qQ,Le.S,Ie.C,ve.s,M.sg,O._L,so.Q,J.p],pipes:[M.rS,V.m,ke.i],styles:[""]}),t})();var c_=l(99466);const d_=function(){return{exact:!0}};let ei=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-tabs"]],decls:7,vars:4,consts:function(){let o,_;return o="Users",_="Roles",[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/rgw/user","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],o,["routerLink","/rgw/roles","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],_]},template:function(_,n){1&_&&(e.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),e.SDv(3,3),e.qZA()(),e.TgZ(4,"li",1)(5,"a",4),e.SDv(6,5),e.qZA()()()),2&_&&(e.xp6(2),e.Q6J("routerLinkActiveOptions",e.DdM(2,d_)),e.xp6(3),e.Q6J("routerLinkActiveOptions",e.DdM(3,d_)))},directives:[w.yS,w.Od],styles:[""]}),t})();var _i=l(78877),ti=l(86969);const ni=["accessKeyTpl"],oi=["secretKeyTpl"],ii=function(t){return[t]};function si(t,o){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"legend"),e.SDv(2,13),e.qZA(),e.TgZ(3,"div")(4,"cd-table",14),e.NdJ("updateSelection",function(i){return e.CHM(_),e.oxw(3).updateKeysSelection(i)}),e.TgZ(5,"div",15)(6,"div",16)(7,"button",17),e.NdJ("click",function(){return e.CHM(_),e.oxw(3).showKeyModal()}),e._UZ(8,"i",18),e.ynx(9),e.SDv(10,19),e.BQk(),e.qZA()()()()()()}if(2&t){const _=e.oxw(3);e.xp6(4),e.Q6J("data",_.keys)("columns",_.keysColumns),e.xp6(3),e.Q6J("disabled",!_.keysSelection.hasSingleSelection),e.xp6(1),e.Q6J("ngClass",e.VKq(4,ii,_.icons.show))}}function ai(t,o){if(1&t&&(e.TgZ(0,"tr")(1,"td",8),e.SDv(2,20),e.qZA(),e.TgZ(3,"td"),e._uU(4),e.qZA()()),2&t){const _=e.oxw(3);e.xp6(4),e.Oqu(_.user.email)}}function ri(t,o){if(1&t&&(e.TgZ(0,"div"),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.xp6(1),e.AsE(" ",_.id," (",_.permissions,") ")}}function li(t,o){if(1&t&&(e.TgZ(0,"tr")(1,"td",8),e.SDv(2,21),e.qZA(),e.TgZ(3,"td"),e.YNc(4,ri,2,2,"div",22),e.qZA()()),2&t){const _=e.oxw(3);e.xp6(4),e.Q6J("ngForOf",_.user.subusers)}}function ci(t,o){if(1&t&&(e.TgZ(0,"div"),e._uU(1),e.qZA()),2&t){const _=o.$implicit;e.xp6(1),e.AsE(" ",_.type," (",_.perm,") ")}}function di(t,o){if(1&t&&(e.TgZ(0,"tr")(1,"td",8),e.SDv(2,23),e.qZA(),e.TgZ(3,"td"),e.YNc(4,ci,2,2,"div",22),e.qZA()()),2&t){const _=e.oxw(3);e.xp6(4),e.Q6J("ngForOf",_.user.caps)}}function ui(t,o){if(1&t&&(e.TgZ(0,"tr")(1,"td",8),e.SDv(2,24),e.qZA(),e.TgZ(3,"td"),e._uU(4),e.ALo(5,"join"),e.qZA()()),2&t){const _=e.oxw(3);e.xp6(4),e.Oqu(e.lcZ(5,1,_.user.mfa_ids))}}function Ri(t,o){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function Ei(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,29),e.qZA())}function gi(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.user.user_quota.max_size)," ")}}function fi(t,o){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function Si(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,30),e.qZA())}function Ti(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.hij(" ",_.user.user_quota.max_objects," ")}}function Ci(t,o){if(1&t&&(e.TgZ(0,"div")(1,"legend"),e.SDv(2,25),e.qZA(),e.TgZ(3,"table",2)(4,"tbody")(5,"tr")(6,"td",3),e.SDv(7,26),e.qZA(),e.TgZ(8,"td",5),e._uU(9),e.ALo(10,"booleanText"),e.qZA()(),e.TgZ(11,"tr")(12,"td",8),e.SDv(13,27),e.qZA(),e.YNc(14,Ri,2,0,"td",0),e.YNc(15,Ei,2,0,"td",0),e.YNc(16,gi,3,3,"td",0),e.qZA(),e.TgZ(17,"tr")(18,"td",8),e.SDv(19,28),e.qZA(),e.YNc(20,fi,2,0,"td",0),e.YNc(21,Si,2,0,"td",0),e.YNc(22,Ti,2,1,"td",0),e.qZA()()()()),2&t){const _=e.oxw(3);e.xp6(9),e.Oqu(e.lcZ(10,7,_.user.user_quota.enabled)),e.xp6(5),e.Q6J("ngIf",!_.user.user_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",!_.user.user_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_objects>-1)}}function Mi(t,o){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function pi(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,35),e.qZA())}function mi(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.user.bucket_quota.max_size)," ")}}function Ai(t,o){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function Gi(t,o){1&t&&(e.TgZ(0,"td"),e.SDv(1,36),e.qZA())}function Pi(t,o){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.hij(" ",_.user.bucket_quota.max_objects," ")}}function Oi(t,o){if(1&t&&(e.TgZ(0,"div")(1,"legend"),e.SDv(2,31),e.qZA(),e.TgZ(3,"table",2)(4,"tbody")(5,"tr")(6,"td",3),e.SDv(7,32),e.qZA(),e.TgZ(8,"td",5),e._uU(9),e.ALo(10,"booleanText"),e.qZA()(),e.TgZ(11,"tr")(12,"td",8),e.SDv(13,33),e.qZA(),e.YNc(14,Mi,2,0,"td",0),e.YNc(15,pi,2,0,"td",0),e.YNc(16,mi,3,3,"td",0),e.qZA(),e.TgZ(17,"tr")(18,"td",8),e.SDv(19,34),e.qZA(),e.YNc(20,Ai,2,0,"td",0),e.YNc(21,Gi,2,0,"td",0),e.YNc(22,Pi,2,1,"td",0),e.qZA()()()()),2&t){const _=e.oxw(3);e.xp6(9),e.Oqu(e.lcZ(10,7,_.user.bucket_quota.enabled)),e.xp6(5),e.Q6J("ngIf",!_.user.bucket_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",!_.user.bucket_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_objects>-1)}}function bi(t,o){if(1&t&&(e.TgZ(0,"div"),e.YNc(1,si,11,6,"div",0),e.TgZ(2,"legend"),e.SDv(3,1),e.qZA(),e.TgZ(4,"table",2)(5,"tbody")(6,"tr")(7,"td",3),e.SDv(8,4),e.qZA(),e.TgZ(9,"td",5),e._uU(10),e.qZA()(),e.TgZ(11,"tr")(12,"td",3),e.SDv(13,6),e.qZA(),e.TgZ(14,"td",5),e._uU(15),e.qZA()(),e.TgZ(16,"tr")(17,"td",3),e.SDv(18,7),e.qZA(),e.TgZ(19,"td",5),e._uU(20),e.qZA()(),e.TgZ(21,"tr")(22,"td",8),e.SDv(23,9),e.qZA(),e.TgZ(24,"td"),e._uU(25),e.qZA()(),e.YNc(26,ai,5,1,"tr",0),e.TgZ(27,"tr")(28,"td",8),e.SDv(29,10),e.qZA(),e.TgZ(30,"td"),e._uU(31),e.ALo(32,"booleanText"),e.qZA()(),e.TgZ(33,"tr")(34,"td",8),e.SDv(35,11),e.qZA(),e.TgZ(36,"td"),e._uU(37),e.ALo(38,"booleanText"),e.qZA()(),e.TgZ(39,"tr")(40,"td",8),e.SDv(41,12),e.qZA(),e.TgZ(42,"td"),e._uU(43),e.ALo(44,"map"),e.qZA()(),e.YNc(45,li,5,1,"tr",0),e.YNc(46,di,5,1,"tr",0),e.YNc(47,ui,6,3,"tr",0),e.qZA()(),e.YNc(48,Ci,23,9,"div",0),e.YNc(49,Oi,23,9,"div",0),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.Q6J("ngIf",_.keys.length),e.xp6(9),e.Oqu(_.user.tenant),e.xp6(5),e.Oqu(_.user.user_id),e.xp6(5),e.Oqu(_.user.uid),e.xp6(5),e.Oqu(_.user.display_name),e.xp6(1),e.Q6J("ngIf",null==_.user.email?null:_.user.email.length),e.xp6(5),e.Oqu(e.lcZ(32,14,_.user.suspended)),e.xp6(6),e.Oqu(e.lcZ(38,16,"true"===_.user.system)),e.xp6(6),e.Oqu(e.xi3(44,18,_.user.max_buckets,_.maxBucketsMap)),e.xp6(2),e.Q6J("ngIf",_.user.subusers&&_.user.subusers.length),e.xp6(1),e.Q6J("ngIf",_.user.caps&&_.user.caps.length),e.xp6(1),e.Q6J("ngIf",null==_.user.mfa_ids?null:_.user.mfa_ids.length),e.xp6(1),e.Q6J("ngIf",_.user.user_quota),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota)}}function Ni(t,o){if(1&t&&(e.ynx(0),e.YNc(1,bi,50,21,"div",0),e.BQk()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",_.user)}}let Wi=(()=>{class t{constructor(_,n){this.rgwUserService=_,this.modalService=n,this.keys=[],this.keysColumns=[],this.keysSelection=new De.r,this.icons=k.P}ngOnInit(){this.keysColumns=[{name:"Username",prop:"username",flexGrow:1},{name:"Type",prop:"type",flexGrow:1}],this.maxBucketsMap={"-1":"Disabled",0:"Unlimited"}}ngOnChanges(){this.selection&&(this.user=this.selection,this.user.subusers=R().sortBy(this.user.subusers,"id"),this.user.caps=R().sortBy(this.user.caps,"type"),this.rgwUserService.getQuota(this.user.uid).subscribe(_=>{R().extend(this.user,_)}),this.keys=[],this.user.keys&&this.user.keys.forEach(_=>{this.keys.push({id:this.keys.length+1,type:"S3",username:_.user,ref:_})}),this.user.swift_keys&&this.user.swift_keys.forEach(_=>{this.keys.push({id:this.keys.length+1,type:"Swift",username:_.user,ref:_})}),this.keys=R().sortBy(this.keys,"user"))}updateKeysSelection(_){this.keysSelection=_}showKeyModal(){const _=this.keysSelection.first(),n=this.modalService.show("S3"===_.type?s_:a_);switch(_.type){case"S3":n.componentInstance.setViewing(),n.componentInstance.setValues(_.ref.user,_.ref.access_key,_.ref.secret_key);break;case"Swift":n.componentInstance.setValues(_.ref.user,_.ref.secret_key)}}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(D),e.Y36(oe.Z))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-details"]],viewQuery:function(_,n){if(1&_&&(e.Gf(ni,5),e.Gf(oi,5)),2&_){let i;e.iGM(i=e.CRH())&&(n.accessKeyTpl=i.first),e.iGM(i=e.CRH())&&(n.secretKeyTpl=i.first)}},inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let o,_,n,i,s,r,d,g,E,S,G,P,b,N,m,W,U,$,I,v,F,h,L,y,f,x;return o="Details",_="Tenant",n="User ID",i="Username",s="Full name",r="Suspended",d="System",g="Maximum buckets",E="Keys",S="Show",G="Email address",P="Subusers",b="Capabilities",N="MFAs(Id)",m="User quota",W="Enabled",U="Maximum size",$="Maximum objects",I="Unlimited",v="Unlimited",F="Bucket quota",h="Enabled",L="Maximum size",y="Maximum objects",f="Unlimited",x="Unlimited",[[4,"ngIf"],o,[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],_,[1,"w-75"],n,i,[1,"bold"],s,r,d,g,E,["columnMode","flex","selectionType","multi","forceIdentifier","true",3,"data","columns","updateSelection"],[1,"table-actions"],["dropdown","",1,"btn-group"],["type","button",1,"btn","btn-accent",3,"disabled","click"],[3,"ngClass"],S,G,P,[4,"ngFor","ngForOf"],b,N,m,W,U,$,I,v,F,h,L,y,f,x]},template:function(_,n){1&_&&e.YNc(0,Ni,2,1,"ng-container",0),2&_&&e.Q6J("ngIf",n.selection)},directives:[M.O5,j.a,q.o,M.mk,M.sg],pipes:[t_.T,_i.b,ti.A,je.$],styles:[""]}),t})();const Ui=["userSizeTpl"],$i=["userObjectTpl"];function Ii(t,o){if(1&t&&e._UZ(0,"cd-usage-bar",8),2&t){const _=e.oxw().row;e.Q6J("total",_.user_quota.max_size)("used",_.stats.size_actual)}}function vi(t,o){1&t&&e.SDv(0,9)}function Fi(t,o){if(1&t&&(e.YNc(0,Ii,1,2,"cd-usage-bar",6),e.YNc(1,vi,1,0,"ng-template",null,7,e.W1O)),2&t){const _=o.row,n=e.MAs(2);e.Q6J("ngIf",_.user_quota.max_size>0&&_.user_quota.enabled)("ngIfElse",n)}}function hi(t,o){if(1&t&&e._UZ(0,"cd-usage-bar",12),2&t){const _=e.oxw().row;e.Q6J("total",_.user_quota.max_objects)("used",_.stats.num_objects)("isBinary",!1)}}function Li(t,o){1&t&&e.SDv(0,13)}function yi(t,o){if(1&t&&(e.YNc(0,hi,1,3,"cd-usage-bar",10),e.YNc(1,Li,1,0,"ng-template",null,11,e.W1O)),2&t){const _=o.row,n=e.MAs(2);e.Q6J("ngIf",_.user_quota.max_objects>0&&_.user_quota.enabled)("ngIfElse",n)}}let xi=(()=>{class t extends ye.o{constructor(_,n,i,s,r,d){super(d),this.authStorageService=_,this.rgwUserService=n,this.modalService=i,this.urlBuilder=s,this.actionLabels=r,this.ngZone=d,this.columns=[],this.users=[],this.selection=new De.r}ngOnInit(){this.permission=this.authStorageService.getPermissions().rgw,this.columns=[{name:"Username",prop:"uid",flexGrow:1},{name:"Tenant",prop:"tenant",flexGrow:1},{name:"Full name",prop:"display_name",flexGrow:1},{name:"Email address",prop:"email",flexGrow:1},{name:"Suspended",prop:"suspended",flexGrow:1,cellClass:"text-center",cellTransformation:c_.e.checkIcon},{name:"Max. buckets",prop:"max_buckets",flexGrow:1,cellTransformation:c_.e.map,customTemplateConfig:{"-1":"Disabled",0:"Unlimited"}},{name:"Capacity Limit %",prop:"size_usage",cellTemplate:this.userSizeTpl,flexGrow:.8},{name:"Object Limit %",prop:"object_usage",cellTemplate:this.userObjectTpl,flexGrow:.8}];const _=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().uid)}`;this.tableActions=[{permission:"create",icon:k.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:r=>!r.hasSelection},{permission:"update",icon:k.P.edit,routerLink:()=>this.urlBuilder.getEdit(_()),name:this.actionLabels.EDIT},{permission:"delete",icon:k.P.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:r=>r.hasMultiSelection}],this.setTableRefreshTimeout()}getUserList(_){this.setTableRefreshTimeout(),this.rgwUserService.list().subscribe(n=>{this.users=n},()=>{_.error()})}updateSelection(_){this.selection=_}deleteAction(){this.modalService.show(Ve.M,{itemDescription:this.selection.hasSingleSelection?"user":"users",itemNames:this.selection.selected.map(_=>_.uid),submitActionObservable:()=>new Je.y(_=>{(0,_e.D)(this.selection.selected.map(n=>this.rgwUserService.delete(n.uid))).subscribe({error:n=>{_.error(n),this.table.refreshBtn()},complete:()=>{_.complete(),this.table.refreshBtn()}})})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Ue.j),e.Y36(D),e.Y36(oe.Z),e.Y36(ee.F),e.Y36(A.p4),e.Y36(e.R0b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-list"]],viewQuery:function(_,n){if(1&_&&(e.Gf(j.a,7),e.Gf(Ui,7),e.Gf($i,7)),2&_){let i;e.iGM(i=e.CRH())&&(n.table=i.first),e.iGM(i=e.CRH())&&(n.userSizeTpl=i.first),e.iGM(i=e.CRH())&&(n.userObjectTpl=i.first)}},features:[e._Bn([{provide:ee.F,useValue:new ee.F("rgw/user")}]),e.qOj],decls:9,vars:9,consts:function(){let o,_;return o="No Limit",_="No Limit",[["columnMode","flex","selectionType","multiClick","identifier","uid",3,"autoReload","data","columns","hasDetails","status","setExpandedRow","updateSelection","fetchData"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["userSizeTpl",""],["userObjectTpl",""],[3,"total","used",4,"ngIf","ngIfElse"],["noSizeQuota",""],[3,"total","used"],o,[3,"total","used","isBinary",4,"ngIf","ngIfElse"],["noObjectQuota",""],[3,"total","used","isBinary"],_]},template:function(_,n){1&_&&(e._UZ(0,"cd-rgw-user-tabs"),e.TgZ(1,"cd-table",0,1),e.NdJ("setExpandedRow",function(s){return n.setExpandedRow(s)})("updateSelection",function(s){return n.updateSelection(s)})("fetchData",function(s){return n.getUserList(s)}),e._UZ(3,"cd-table-actions",2)(4,"cd-rgw-user-details",3),e.qZA(),e.YNc(5,Fi,3,2,"ng-template",null,4,e.W1O),e.YNc(7,yi,3,2,"ng-template",null,5,e.W1O)),2&_&&(e.xp6(1),e.Q6J("autoReload",!1)("data",n.users)("columns",n.columns)("hasDetails",!0)("status",n.tableStatus),e.xp6(2),e.Q6J("permission",n.permission)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("selection",n.expandedRow))},directives:[ei,j.a,__.K,Wi,M.O5,n_.O],styles:[""]}),t})();var Zi=l(83357);let u_=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[[M.ez,I_.m,a.u5,a.UX,v_.B,O.Oz,w.Bz,O.HK,ke.b]]}),t})();const wi=[{path:""},{path:"daemon",component:On,data:{breadcrumbs:"Gateways"}},{path:"user",data:{breadcrumbs:"Users"},children:[{path:"",component:xi},{path:A.MQ.CREATE,component:l_,data:{breadcrumbs:A.Qn.CREATE}},{path:`${A.MQ.EDIT}/:uid`,component:l_,data:{breadcrumbs:A.Qn.EDIT}}]},{path:"roles",data:{breadcrumbs:"Roles",resource:"api.rgw.roles@1.0",tabs:[{name:"Users",url:"/rgw/user"},{name:"Roles",url:"/rgw/roles"}]},children:[{path:"",component:$_.c},{path:A.MQ.CREATE,component:Zi.U,data:{breadcrumbs:A.Qn.CREATE}}]},{path:"bucket",data:{breadcrumbs:"Buckets"},children:[{path:"",component:cn},{path:A.MQ.CREATE,component:Ye,data:{breadcrumbs:A.Qn.CREATE}},{path:`${A.MQ.EDIT}/:bid`,component:Ye,data:{breadcrumbs:A.Qn.EDIT}}]}];let ki=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[[u_,w.Bz.forChild(wi)]]}),t})()}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/803.08339784f3bb5d16.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/803.08339784f3bb5d16.js
new file mode 100644 (file)
index 0000000..067c61f
--- /dev/null
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[803],{77803:(Dr,t_,c)=>{c.r(t_),c.d(t_,{RgwModule:()=>L_,RoutedRgwModule:()=>Zr});var T=c(88692),a=c(20092),J=c(54247),G=c(51389),o_=c(37496),I=c(79512),j_=c(4268),et=c(44466),_t=c(66265),tt=c(23815),E=c.n(tt),ne=c(35758),Ee=c(95152),n_=c(33394),xe=c(64762),i_=c(35732),ke=c(25917),s_=c(19773),ot=c(96736),a_=c(5304),oe=c(20523),nt=c(93523),e=c(64537);let Q=class{constructor(n,_){this.http=n,this.rgwDaemonService=_,this.url="api/rgw/user"}list(){return this.enumerate().pipe((0,s_.zg)(n=>n.length>0?(0,ne.D)(n.map(_=>this.get(_))):(0,ke.of)([])))}enumerate(){return this.rgwDaemonService.request(n=>this.http.get(this.url,{params:n}))}enumerateEmail(){return this.rgwDaemonService.request(n=>this.http.get(`${this.url}/get_emails`,{params:n}))}get(n){return this.rgwDaemonService.request(_=>this.http.get(`${this.url}/${n}`,{params:_}))}getQuota(n){return this.rgwDaemonService.request(_=>this.http.get(`${this.url}/${n}/quota`,{params:_}))}create(n){return this.rgwDaemonService.request(_=>(E().keys(n).forEach(o=>{_=_.append(o,n[o])}),this.http.post(this.url,null,{params:_})))}update(n,_){return this.rgwDaemonService.request(o=>(E().keys(_).forEach(i=>{o=o.append(i,_[i])}),this.http.put(`${this.url}/${n}`,null,{params:o})))}updateQuota(n,_){return this.rgwDaemonService.request(o=>(E().keys(_).forEach(i=>{o=o.append(i,_[i])}),this.http.put(`${this.url}/${n}/quota`,null,{params:o})))}delete(n){return this.rgwDaemonService.request(_=>this.http.delete(`${this.url}/${n}`,{params:_}))}createSubuser(n,_){return this.rgwDaemonService.request(o=>(E().keys(_).forEach(i=>{o=o.append(i,_[i])}),this.http.post(`${this.url}/${n}/subuser`,null,{params:o})))}deleteSubuser(n,_){return this.rgwDaemonService.request(o=>this.http.delete(`${this.url}/${n}/subuser/${_}`,{params:o}))}addCapability(n,_,o){return this.rgwDaemonService.request(i=>(i=(i=i.append("type",_)).append("perm",o),this.http.post(`${this.url}/${n}/capability`,null,{params:i})))}deleteCapability(n,_,o){return this.rgwDaemonService.request(i=>(i=(i=i.append("type",_)).append("perm",o),this.http.delete(`${this.url}/${n}/capability`,{params:i})))}addS3Key(n,_){return this.rgwDaemonService.request(o=>(o=o.append("key_type","s3"),E().keys(_).forEach(i=>{o=o.append(i,_[i])}),this.http.post(`${this.url}/${n}/key`,null,{params:o})))}deleteS3Key(n,_){return this.rgwDaemonService.request(o=>(o=(o=o.append("key_type","s3")).append("access_key",_),this.http.delete(`${this.url}/${n}/key`,{params:o})))}exists(n){return this.get(n).pipe((0,ot.h)(!0),(0,a_.K)(_=>(E().isFunction(_.preventDefault)&&_.preventDefault(),(0,ke.of)(!1))))}emailExists(n){return n=decodeURIComponent(n),this.enumerateEmail().pipe((0,s_.zg)(_=>{const o=E().indexOf(_,n);return(0,ke.of)(-1!==o)}))}};Q.\u0275fac=function(n){return new(n||Q)(e.LFG(i_.eN),e.LFG(oe.b))},Q.\u0275prov=e.Yz7({token:Q,factory:Q.\u0275fac,providedIn:"root"}),Q=(0,xe.gn)([nt.o,(0,xe.w6)("design:paramtypes",[i_.eN,oe.b])],Q);var $=c(65862),w=c(18001),l_=c(93614),m=c(90070),Y=c(97161);class ze{constructor(){this.kmsProviders=["vault"],this.authMethods=["token","agent"],this.secretEngines=["kv","transit"],this.sse_s3="AES256",this.sse_kms="aws:kms"}}var ie=(()=>{return(t=ie||(ie={})).ENABLED="Enabled",t.DISABLED="Disabled",ie;var t})(),se=(()=>{return(t=se||(se={})).ENABLED="Enabled",t.SUSPENDED="Suspended",se;var t})(),ae=c(62862),j=c(18372),X=c(60312),B=c(30839),k=c(87925),q=c(94276),z=c(56310),H=c(41582);function it(t,n){1&t&&(e.TgZ(0,"option",29),e.SDv(1,30),e.qZA()),2&t&&e.Q6J("ngValue",null)}function st(t,n){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function at(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,33),e.qZA())}function lt(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",22),e.SDv(3,23),e.qZA(),e.TgZ(4,"div",24)(5,"select",25),e.YNc(6,it,2,1,"option",26),e.YNc(7,st,2,2,"option",27),e.qZA(),e.YNc(8,at,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(6),e.Q6J("ngIf",null!==_.kmsProviders),e.xp6(1),e.Q6J("ngForOf",_.kmsProviders),e.xp6(1),e.Q6J("ngIf",_.configForm.showError("kms_provider",o,"required"))}}function rt(t,n){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function ct(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,37),e.qZA())}function dt(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",34),e.SDv(3,35),e.qZA(),e.TgZ(4,"div",24)(5,"select",36),e.YNc(6,rt,2,2,"option",27),e.qZA(),e.YNc(7,ct,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(6),e.Q6J("ngForOf",_.authMethods),e.xp6(1),e.Q6J("ngIf",_.configForm.showError("auth_method",o,"required"))}}function ut(t,n){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function gt(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,41),e.qZA())}function Rt(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",38),e.SDv(3,39),e.qZA(),e.TgZ(4,"div",24)(5,"select",40),e.YNc(6,ut,2,2,"option",27),e.qZA(),e.YNc(7,gt,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(6),e.Q6J("ngForOf",_.secretEngines),e.xp6(1),e.Q6J("ngIf",_.configForm.showError("secret_engine",o,"required"))}}function Tt(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,45),e.qZA())}function Et(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",42),e.SDv(3,43),e.qZA(),e.TgZ(4,"div",24),e._UZ(5,"input",44),e.YNc(6,Tt,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(6),e.Q6J("ngIf",_.configForm.showError("secret_path",o,"required"))}}function ft(t,n){1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",46),e.SDv(3,47),e.qZA(),e.TgZ(4,"div",24),e._UZ(5,"input",48),e.qZA()()())}function pt(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,52),e.qZA())}function mt(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",7)(2,"label",49),e.SDv(3,50),e.qZA(),e.TgZ(4,"div",24),e._UZ(5,"input",51),e.YNc(6,pt,2,0,"span",28),e.qZA()()()),2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(6),e.Q6J("ngIf",_.configForm.showError("address",o,"required"))}}function Mt(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,57),e.qZA())}function St(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",7)(1,"label",53)(2,"span"),e.SDv(3,54),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,55),e.qZA()(),e.TgZ(6,"div",24)(7,"input",56),e.NdJ("change",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.fileUpload(i.target.files,"token"))}),e.qZA(),e.YNc(8,Mt,2,0,"span",28),e.qZA()()}if(2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(8),e.Q6J("ngIf",_.configForm.showError("token",o,"required"))}}function Ct(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,62),e.qZA())}function Ot(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",7)(2,"label",58)(3,"span"),e.SDv(4,59),e.qZA(),e.TgZ(5,"cd-helper"),e.SDv(6,60),e.qZA()(),e.TgZ(7,"div",24)(8,"input",61),e.NdJ("change",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.fileUpload(i.target.files,"ssl_cert"))}),e.qZA(),e.YNc(9,Ct,2,0,"span",28),e.qZA()()()}if(2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(9),e.Q6J("ngIf",_.configForm.showError("ssl_cert",o,"required"))}}function Ft(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,67),e.qZA())}function Pt(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",7)(2,"label",63)(3,"span"),e.SDv(4,64),e.qZA(),e.TgZ(5,"cd-helper"),e.SDv(6,65),e.qZA()(),e.TgZ(7,"div",24)(8,"input",66),e.NdJ("change",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.fileUpload(i.target.files,"client_cert"))}),e.qZA(),e.YNc(9,Ft,2,0,"span",28),e.qZA()()()}if(2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(9),e.Q6J("ngIf",_.configForm.showError("client_cert",o,"required"))}}function Nt(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,72),e.qZA())}function Gt(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",7)(2,"label",68)(3,"span"),e.SDv(4,69),e.qZA(),e.TgZ(5,"cd-helper"),e.SDv(6,70),e.qZA()(),e.TgZ(7,"div",24)(8,"input",71),e.NdJ("change",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.fileUpload(i.target.files,"client_key"))}),e.qZA(),e.YNc(9,Nt,2,0,"span",28),e.qZA()()()}if(2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(9),e.Q6J("ngIf",_.configForm.showError("client_key",o,"required"))}}let At=(()=>{class t{constructor(_,o,i,s,l,r,d){this.formBuilder=_,this.activeModal=o,this.router=i,this.actionLabels=s,this.rgwBucketService=l,this.rgwEncryptionModal=r,this.notificationService=d,this.vaultAddress=/^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{4}$/,this.submitAction=new e.vpe,this.createForm()}ngOnInit(){this.kmsProviders=this.rgwEncryptionModal.kmsProviders,this.authMethods=this.rgwEncryptionModal.authMethods,this.secretEngines=this.rgwEncryptionModal.secretEngines}createForm(){this.configForm=this.formBuilder.group({address:[null,[a.kI.required,m.h.custom("vaultPattern",_=>!E().isEmpty(_)&&!this.vaultAddress.test(_))]],kms_provider:["vault",a.kI.required],encryptionType:["aws:kms",a.kI.required],auth_method:["token",a.kI.required],secret_engine:["kv",a.kI.required],secret_path:["/"],namespace:[null],token:[null,[m.h.requiredIf({auth_method:"token"})]],ssl_cert:[null,m.h.sslCert()],client_cert:[null,m.h.pemCert()],client_key:[null,m.h.sslPrivKey()],kmsEnabled:[{value:!1}],s3Enabled:[{value:!1}]})}fileUpload(_,o){const i=_[0];(new FileReader).addEventListener("load",()=>{const l=this.configForm.get(o);l.setValue(i),l.markAsDirty(),l.markAsTouched(),l.updateValueAndValidity()})}onSubmit(){const _=this.configForm.value;this.rgwBucketService.setEncryptionConfig(_.encryptionType,_.kms_provider,_.auth_method,_.secret_engine,_.secret_path,_.namespace,_.address,_.token,_.owner,_.ssl_cert,_.client_cert,_.client_key).subscribe({next:()=>{this.notificationService.show(w.k.success,"Updated RGW Encryption Configuration values")},error:o=>{this.notificationService.show(w.k.error,o),this.configForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close(),this.router.routeReuseStrategy.shouldReuseRoute=()=>!1,this.router.onSameUrlNavigation="reload",this.router.navigate([this.router.url])}})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ae.O),e.Y36(G.Kz),e.Y36(J.F0),e.Y36(I.p4),e.Y36(Ee.o),e.Y36(ze),e.Y36(Y.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-config-modal"]],outputs:{submitAction:"submitAction"},features:[e._Bn([ze])],decls:30,vars:14,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L,S,W,C,Z,D,U,v,y,f,P,N,te;return n="Update RGW Encryption Configurations",_="Encryption Type",o="SSE-S3 Encryption",i="SSE-KMS Encryption",s="Key management service provider",l="-- Select a provider --",r="This field is required.",d="Authentication Method",u="This field is required.",R="Secret Engine",O="This field is required.",F="Secret Path ",b="This field is required.",h="Namespace ",M="Vault Address ",L="This field is required.",S="Token",W=" The token authentication method expects a Vault token to be present in a plaintext file. ",C="This field is required.",Z="CA Certificate",D="The SSL certificate in PEM format.",U="This field is required.",v="Client Certificate",y="The Client certificate in PEM format.",f="This field is required.",P="Client Private Key",N="The Client Private Key in PEM format.",te="This field is required.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","configForm",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","encryptionType",1,"cd-col-form-label","required"],_,[1,"col-md-auto","custom-checkbox","form-check-inline","ms-3"],["formControlName","encryptionType","id","s3Enabled","type","radio","name","encryptionType","value","AES256",1,"form-check-input"],["for","s3Enabled",1,"custom-check-label"],o,[1,"col-md-auto","custom-checkbox","form-check-inline"],["formControlName","encryptionType","id","kmsEnabled","name","encryptionType","value","aws:kms","type","radio",1,"form-check-input"],["for","kmsEnabled",1,"custom-check-label"],i,[4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"modal-footer"],[3,"submitText","form","submitActionEvent"],["for","kms_provider",1,"cd-col-form-label","required"],s,[1,"cd-col-form-input"],["id","kms_provider","name","kms_provider","formControlName","kms_provider",1,"form-select"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],[3,"ngValue"],l,[3,"value"],[1,"invalid-feedback"],r,["for","auth_method",1,"cd-col-form-label","required"],d,["id","auth_method","name","auth_method","formControlName","auth_method",1,"form-select"],u,["for","secret_engine",1,"cd-col-form-label","required"],R,["id","secret_engine","name","secret_engine","formControlName","secret_engine",1,"form-select"],O,["for","secret_path",1,"cd-col-form-label"],F,["id","secret_path","name","secret_path","type","text","formControlName","secret_path",1,"form-control"],b,["for","namespace",1,"cd-col-form-label"],h,["id","namespace","name","namespace","type","text","formControlName","namespace",1,"form-control"],["for","address",1,"cd-col-form-label","required"],M,["id","address","name","address","formControlName","address","placeholder","http://127.0.0.1:8000",1,"form-control"],L,["for","token",1,"cd-col-form-label","required"],S,W,["type","file","formControlName","token",3,"change"],C,["for","ssl_cert",1,"cd-col-form-label"],Z,D,["type","file","formControlName","ssl_cert",3,"change"],U,["for","client_cert",1,"cd-col-form-label"],v,y,["type","file","formControlName","client_cert",3,"change"],f,["for","client_key",1,"cd-col-form-label"],P,N,["type","file",3,"change"],te]},template:function(_,o){1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10),e._UZ(11,"input",11),e.TgZ(12,"label",12),e.SDv(13,13),e.qZA()(),e.TgZ(14,"div",14),e._UZ(15,"input",15),e.TgZ(16,"label",16),e.SDv(17,17),e.qZA()()(),e.YNc(18,lt,9,3,"div",18),e.YNc(19,dt,8,2,"div",18),e.YNc(20,Rt,8,2,"div",18),e.YNc(21,Et,7,1,"div",18),e.YNc(22,ft,6,0,"div",18),e.YNc(23,mt,7,1,"div",18),e.YNc(24,St,9,1,"div",19),e.YNc(25,Ot,10,1,"div",18),e.YNc(26,Pt,10,1,"div",18),e.YNc(27,Gt,10,1,"div",18),e.qZA(),e.TgZ(28,"div",20)(29,"cd-form-button-panel",21),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.qZA()()(),e.BQk(),e.qZA()),2&_&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.configForm),e.xp6(14),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","token"===o.configForm.getValue("auth_method")),e.xp6(1),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(1),e.Q6J("ngIf","aws:kms"===o.configForm.getValue("encryptionType")||"AES256"===o.configForm.getValue("encryptionType")),e.xp6(2),e.Q6J("submitText",o.actionLabels.SUBMIT)("form",o.configForm))},dependencies:[T.sg,T.O5,j.S,X.z,B.p,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.EJ,a._,a.JJ,a.JL,a.sg,a.u]}),t})();var ee=c(63285),fe=c(82945),r_=c(63622),_e=c(10545);function It(t,n){1&t&&(e.TgZ(0,"div",9)(1,"label",42),e.SDv(2,43),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",44),e.qZA()())}function bt(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,46),e.qZA())}function ht(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,47),e.qZA())}function Lt(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,48),e.qZA())}function Wt(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,49),e.qZA())}function $t(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,50),e.qZA())}function Zt(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,51),e.qZA())}function Dt(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,52),e.qZA())}function Ut(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,53),e.qZA())}function vt(t,n){1&t&&(e.TgZ(0,"option",54),e.SDv(1,55),e.qZA()),2&t&&e.Q6J("ngValue",null)}function yt(t,n){1&t&&(e.TgZ(0,"option",54),e.SDv(1,56),e.qZA()),2&t&&e.Q6J("ngValue",null)}function wt(t,n){if(1&t&&(e.TgZ(0,"option",57),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function xt(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,58),e.qZA())}function kt(t,n){1&t&&(e.TgZ(0,"option",54),e.SDv(1,60),e.qZA()),2&t&&e.Q6J("ngValue",null)}function zt(t,n){1&t&&(e.TgZ(0,"option",54),e.SDv(1,61),e.qZA()),2&t&&e.Q6J("ngValue",null)}function qt(t,n){if(1&t&&(e.TgZ(0,"option",57),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_.name),e.xp6(1),e.Oqu(_.description)}}function Ht(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,62),e.qZA())}function Xt(t,n){if(1&t&&(e.TgZ(0,"select",59),e.YNc(1,kt,2,1,"option",18),e.YNc(2,zt,2,1,"option",18),e.YNc(3,qt,2,2,"option",19),e.qZA(),e.YNc(4,Ht,2,0,"span",14)),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("ngIf",null===o.placementTargets),e.xp6(1),e.Q6J("ngIf",null!==o.placementTargets),e.xp6(1),e.Q6J("ngForOf",o.placementTargets),e.xp6(1),e.Q6J("ngIf",o.bucketForm.showError("placement-target",_,"required"))}}function Bt(t,n){1&t&&(e.ynx(0),e._UZ(1,"input",63),e.BQk())}function Qt(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend",25),e.SDv(2,64),e.qZA(),e.TgZ(3,"div",9)(4,"div",27)(5,"div",28)(6,"input",65),e.NdJ("change",function(){e.CHM(_);const i=e.oxw(2);return e.KtG(i.setMfaDeleteValidators())}),e.qZA(),e.TgZ(7,"label",66),e.SDv(8,67),e.qZA(),e.TgZ(9,"cd-helper")(10,"span"),e.SDv(11,68),e.qZA()()()()()()}}function Yt(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,77),e.qZA())}function Jt(t,n){if(1&t&&(e.TgZ(0,"div",9)(1,"label",74),e.SDv(2,75),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",76),e.YNc(5,Yt,2,0,"span",14),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.bucketForm.showError("mfa-token-serial",_,"required"))}}function Kt(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,81),e.qZA())}function Vt(t,n){if(1&t&&(e.TgZ(0,"div",9)(1,"label",78),e.SDv(2,79),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",80),e.YNc(5,Kt,2,0,"span",14),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.bucketForm.showError("mfa-token-pin",_,"required"))}}function jt(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend",25),e.SDv(2,69),e.qZA(),e.TgZ(3,"div",9)(4,"div",27)(5,"div",28)(6,"input",70),e.NdJ("change",function(){e.CHM(_);const i=e.oxw(2);return e.KtG(i.setMfaDeleteValidators())}),e.qZA(),e.TgZ(7,"label",71),e.SDv(8,72),e.qZA(),e.TgZ(9,"cd-helper")(10,"span"),e.SDv(11,73),e.qZA()()()()(),e.YNc(12,Jt,6,1,"div",8),e.YNc(13,Vt,6,1,"div",8),e.qZA()}if(2&t){const _=e.oxw(2);e.xp6(12),e.Q6J("ngIf",_.areMfaCredentialsRequired()),e.xp6(1),e.Q6J("ngIf",_.areMfaCredentialsRequired())}}function eo(t,n){1&t&&(e.TgZ(0,"div",9)(1,"label",82),e.SDv(2,83),e.qZA(),e.TgZ(3,"div",12)(4,"select",84)(5,"option",85),e.SDv(6,86),e.qZA(),e.TgZ(7,"option",87),e.SDv(8,88),e.qZA()()()())}function _o(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,93),e.qZA())}function to(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,94),e.qZA())}function oo(t,n){if(1&t&&(e.TgZ(0,"div",9)(1,"label",89),e.ynx(2),e.SDv(3,90),e.BQk(),e.TgZ(4,"cd-helper"),e.SDv(5,91),e.qZA()(),e.TgZ(6,"div",12),e._UZ(7,"input",92),e.YNc(8,_o,2,0,"span",14),e.YNc(9,to,2,0,"span",14),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(8),e.Q6J("ngIf",o.bucketForm.showError("lock_retention_period_days",_,"pattern")),e.xp6(1),e.Q6J("ngIf",o.bucketForm.showError("lock_retention_period_days",_,"lockDays"))}}function no(t,n){1&t&&(e.TgZ(0,"option",54),e.SDv(1,105),e.qZA()),2&t&&e.Q6J("ngValue",null)}function io(t,n){if(1&t&&(e.TgZ(0,"option",57),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function so(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,106),e.qZA())}function ao(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",9)(2,"label",102),e.SDv(3,103),e.qZA(),e.TgZ(4,"div",12)(5,"select",104),e.YNc(6,no,2,1,"option",18),e.YNc(7,io,2,2,"option",19),e.qZA(),e.YNc(8,so,2,0,"span",14),e.qZA()()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("autofocus",o.editing),e.xp6(1),e.Q6J("ngIf",null!==o.kmsProviders),e.xp6(1),e.Q6J("ngForOf",o.kmsProviders),e.xp6(1),e.Q6J("ngIf",o.bucketForm.showError("kms_provider",_,"required"))}}function lo(t,n){1&t&&(e.TgZ(0,"span",45),e.SDv(1,110),e.qZA())}function ro(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",9)(2,"label",107),e.SDv(3,108),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",109),e.YNc(6,lo,2,0,"span",14),e.qZA()()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(6),e.Q6J("ngIf",o.bucketForm.showError("keyId",_,"required"))}}function co(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",9)(2,"div",27)(3,"div",95),e._UZ(4,"input",96),e.TgZ(5,"label",97),e.SDv(6,98),e.qZA()()()(),e.TgZ(7,"div",9)(8,"div",27)(9,"div",95),e._UZ(10,"input",99),e.TgZ(11,"label",100),e.SDv(12,101),e.qZA()()()(),e.YNc(13,ao,9,4,"div",24),e.YNc(14,ro,7,1,"div",24),e.qZA()),2&t){const _=e.oxw(2);e.xp6(4),e.uIk("disabled",!_.s3VaultConfig||null),e.xp6(6),e.uIk("disabled",!_.kmsVaultConfig||null),e.xp6(3),e.Q6J("ngIf","aws:kms"===_.bucketForm.getValue("encryption_type")),e.xp6(1),e.Q6J("ngIf","aws:kms"===_.bucketForm.getValue("encryption_type"))}}const c_=function(t){return{required:t}};function uo(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7),e.YNc(9,It,5,0,"div",8),e.TgZ(10,"div",9)(11,"label",10),e.SDv(12,11),e.qZA(),e.TgZ(13,"div",12),e._UZ(14,"input",13),e.YNc(15,bt,2,0,"span",14),e.YNc(16,ht,2,0,"span",14),e.YNc(17,Lt,2,0,"span",14),e.YNc(18,Wt,2,0,"span",14),e.YNc(19,$t,2,0,"span",14),e.YNc(20,Zt,2,0,"span",14),e.YNc(21,Dt,2,0,"span",14),e.YNc(22,Ut,2,0,"span",14),e.qZA()(),e.TgZ(23,"div",9)(24,"label",15),e.SDv(25,16),e.qZA(),e.TgZ(26,"div",12)(27,"select",17),e.YNc(28,vt,2,1,"option",18),e.YNc(29,yt,2,1,"option",18),e.YNc(30,wt,2,2,"option",19),e.qZA(),e.YNc(31,xt,2,0,"span",14),e.qZA()(),e.TgZ(32,"div",9)(33,"label",20),e.SDv(34,21),e.qZA(),e.TgZ(35,"div",12),e.YNc(36,Xt,5,4,"ng-template",null,22,e.W1O),e.YNc(38,Bt,2,0,"ng-container",23),e.qZA()(),e.YNc(39,Qt,12,0,"fieldset",24),e.YNc(40,jt,14,2,"fieldset",24),e.TgZ(41,"fieldset")(42,"legend",25),e.SDv(43,26),e.qZA(),e.TgZ(44,"div",9)(45,"div",27)(46,"div",28),e._UZ(47,"input",29),e.TgZ(48,"label",30),e.SDv(49,31),e.qZA(),e.TgZ(50,"cd-helper")(51,"span"),e.SDv(52,32),e.qZA()()()()(),e.YNc(53,eo,9,0,"div",8),e.YNc(54,oo,10,2,"div",8),e.qZA(),e.TgZ(55,"fieldset")(56,"legend",25),e.SDv(57,33),e.qZA(),e.TgZ(58,"div",9)(59,"div",27)(60,"div",28),e._UZ(61,"input",34),e.TgZ(62,"label",35),e.SDv(63,36),e.qZA(),e.TgZ(64,"cd-helper",37)(65,"span"),e.tHW(66,38),e.TgZ(67,"a",39),e.NdJ("click",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.openConfigModal())}),e.qZA(),e.N_p(),e.qZA()()()()(),e.YNc(68,co,15,4,"div",24),e.qZA()(),e.TgZ(69,"div",40)(70,"cd-form-button-panel",41),e.NdJ("submitActionEvent",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.submit())}),e.ALo(71,"titlecase"),e.ALo(72,"upperFirst"),e.qZA()()()()()}if(2&t){const _=e.MAs(2),o=e.MAs(37),i=e.oxw();e.xp6(1),e.Q6J("formGroup",i.bucketForm),e.xp6(6),e.pQV(e.lcZ(6,31,i.action))(e.lcZ(7,33,i.resource)),e.QtT(5),e.xp6(2),e.Q6J("ngIf",i.editing),e.xp6(2),e.Q6J("ngClass",e.VKq(39,c_,!i.editing)),e.xp6(3),e.Q6J("readonly",i.editing)("autofocus",!i.editing),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"required")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"bucketNameInvalid")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"bucketNameNotAllowed")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"containsUpperCase")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"lowerCaseOrNumber")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"ipAddress")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"onlyLowerCaseAndNumbers")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("bid",_,"shouldBeInRange")),e.xp6(5),e.Q6J("autofocus",i.editing),e.xp6(1),e.Q6J("ngIf",null===i.owners),e.xp6(1),e.Q6J("ngIf",null!==i.owners),e.xp6(1),e.Q6J("ngForOf",i.owners),e.xp6(1),e.Q6J("ngIf",i.bucketForm.showError("owner",_,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(41,c_,!i.editing)),e.xp6(5),e.Q6J("ngIf",i.editing)("ngIfElse",o),e.xp6(1),e.Q6J("ngIf",i.editing),e.xp6(1),e.Q6J("ngIf",i.editing),e.xp6(13),e.Q6J("ngIf",i.bucketForm.getValue("lock_enabled")),e.xp6(1),e.Q6J("ngIf",i.bucketForm.getValue("lock_enabled")),e.xp6(7),e.uIk("disabled",!i.kmsVaultConfig&&!i.s3VaultConfig||null),e.xp6(7),e.Q6J("ngIf",i.bucketForm.getValue("encryption_enabled")),e.xp6(2),e.Q6J("form",i.bucketForm)("submitText",e.lcZ(71,35,i.action)+" "+e.lcZ(72,37,i.resource))}}let d_=(()=>{class t extends l_.E{get isVersioningEnabled(){return this.bucketForm.getValue("versioning")}get isMfaDeleteEnabled(){return this.bucketForm.getValue("mfa-delete")}constructor(_,o,i,s,l,r,d,u,R,O,F){super(),this.route=_,this.router=o,this.formBuilder=i,this.rgwBucketService=s,this.rgwSiteService=l,this.modalService=r,this.rgwUserService=d,this.notificationService=u,this.rgwEncryptionModal=R,this.actionLabels=O,this.changeDetectorRef=F,this.editing=!1,this.owners=null,this.kmsProviders=null,this.placementTargets=[],this.isVersioningAlreadyEnabled=!1,this.isMfaDeleteAlreadyEnabled=!1,this.icons=$.P,this.kmsVaultConfig=!1,this.s3VaultConfig=!1,this.editing=this.router.url.startsWith(`/rgw/bucket/${I.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource="bucket",this.createForm()}ngAfterViewChecked(){this.changeDetectorRef.detectChanges()}createForm(){const _=this,o=m.h.custom("lockDays",()=>{if(!_.bucketForm||!E().get(_.bucketForm.getRawValue(),"lock_enabled"))return!1;const i=Number(_.bucketForm.getValue("lock_retention_period_days"));return!Number.isInteger(i)||0===i});this.bucketForm=this.formBuilder.group({id:[null],bid:[null,[a.kI.required],this.editing?[]:[m.h.bucketName(),m.h.bucketExistence(!1,this.rgwBucketService)]],owner:[null,[a.kI.required]],kms_provider:["vault"],"placement-target":[null,this.editing?[]:[a.kI.required]],versioning:[null],"mfa-delete":[null],"mfa-token-serial":[""],"mfa-token-pin":[""],lock_enabled:[{value:!1,disabled:this.editing}],encryption_enabled:[null],encryption_type:[null,[m.h.requiredIf({encryption_enabled:!0})]],keyId:[null,[m.h.requiredIf({encryption_type:"aws:kms",encryption_enabled:!0})]],lock_mode:["COMPLIANCE"],lock_retention_period_days:[0,[m.h.number(!1),o]]})}ngOnInit(){const _={owners:this.rgwUserService.enumerate()};this.kmsProviders=this.rgwEncryptionModal.kmsProviders,this.rgwBucketService.getEncryptionConfig().subscribe(o=>{this.kmsVaultConfig=o[0],this.s3VaultConfig=o[1],this.kmsVaultConfig&&this.s3VaultConfig?this.bucketForm.get("encryption_type").setValue(""):this.kmsVaultConfig?this.bucketForm.get("encryption_type").setValue("aws:kms"):this.s3VaultConfig?this.bucketForm.get("encryption_type").setValue("AES256"):this.bucketForm.get("encryption_type").setValue("")}),this.editing||(_.getPlacementTargets=this.rgwSiteService.get("placement-targets")),this.route.params.subscribe(o=>{if(o.hasOwnProperty("bid")){const i=decodeURIComponent(o.bid);_.getBid=this.rgwBucketService.get(i)}(0,ne.D)(_).subscribe(i=>{if(this.owners=i.owners.sort(),i.getPlacementTargets){const s=i.getPlacementTargets;this.zonegroup=s.zonegroup,E().forEach(s.placement_targets,l=>{l.description=`${l.name} (${"pool"}: ${l.data_pool})`,this.placementTargets.push(l)}),1===this.placementTargets.length&&this.bucketForm.get("placement-target").setValue(this.placementTargets[0].name)}if(i.getBid){const s=i.getBid,l=E().clone(this.bucketForm.getRawValue());let r=E().pick(s,E().keys(l));r.lock_retention_period_days=this.rgwBucketService.getLockDays(s),r["placement-target"]=s.placement_rule,r.versioning=s.versioning===se.ENABLED,r["mfa-delete"]=s.mfa_delete===ie.ENABLED,r.encryption_enabled="Enabled"===s.encryption,r=E().merge(l,r),this.bucketForm.setValue(r),this.editing&&(this.isVersioningAlreadyEnabled=this.isVersioningEnabled,this.isMfaDeleteAlreadyEnabled=this.isMfaDeleteEnabled,this.setMfaDeleteValidators(),r.lock_enabled&&this.bucketForm.controls.versioning.disable())}this.loadingReady()})})}goToListView(){this.router.navigate(["/rgw/bucket"])}submit(){if(null==this.bucketForm.getValue("encryption_enabled")&&(this.bucketForm.get("encryption_enabled").setValue(!1),this.bucketForm.get("encryption_type").setValue(null)),this.bucketForm.pristine)return void this.goToListView();const _=this.bucketForm.value;if(this.editing){const o=this.getVersioningStatus(),i=this.getMfaDeleteStatus();this.rgwBucketService.update(_.bid,_.id,_.owner,o,_.encryption_enabled,_.encryption_type,_.keyId,i,_["mfa-token-serial"],_["mfa-token-pin"],_.lock_mode,_.lock_retention_period_days).subscribe(()=>{this.notificationService.show(w.k.success,"Updated Object Gateway bucket '" + _.bid + "'."),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}else this.rgwBucketService.create(_.bid,_.owner,this.zonegroup,_["placement-target"],_.lock_enabled,_.lock_mode,_.lock_retention_period_days,_.encryption_enabled,_.encryption_type,_.keyId).subscribe(()=>{this.notificationService.show(w.k.success,"Created Object Gateway bucket '" + _.bid + "'"),this.goToListView()},()=>{this.bucketForm.setErrors({cdSubmitButton:!0})})}areMfaCredentialsRequired(){return this.isMfaDeleteEnabled!==this.isMfaDeleteAlreadyEnabled||this.isMfaDeleteAlreadyEnabled&&this.isVersioningEnabled!==this.isVersioningAlreadyEnabled}setMfaDeleteValidators(){const _=this.bucketForm.get("mfa-token-serial"),o=this.bucketForm.get("mfa-token-pin");this.areMfaCredentialsRequired()?(_.setValidators(a.kI.required),o.setValidators(a.kI.required)):(_.setValidators(null),o.setValidators(null)),_.updateValueAndValidity(),o.updateValueAndValidity()}getVersioningStatus(){return this.isVersioningEnabled?se.ENABLED:se.SUSPENDED}getMfaDeleteStatus(){return this.isMfaDeleteEnabled?ie.ENABLED:ie.DISABLED}fileUpload(_,o){const i=_[0];(new FileReader).addEventListener("load",()=>{const l=this.bucketForm.get(o);l.setValue(i),l.markAsDirty(),l.markAsTouched(),l.updateValueAndValidity()})}openConfigModal(){this.modalService.show(At,null,{size:"lg"}).componentInstance.configForm.get("encryptionType").setValue(this.bucketForm.getValue("encryption_type")||"AES256")}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(J.gz),e.Y36(J.F0),e.Y36(ae.O),e.Y36(Ee.o),e.Y36(n_.I),e.Y36(ee.Z),e.Y36(Q),e.Y36(Y.g),e.Y36(ze),e.Y36(I.p4),e.Y36(e.sBO))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-form"]],features:[e._Bn([ze]),e.qOj],decls:1,vars:1,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L,S,W,C,Z,D,U,v,y,f,P,N,te,A,Me,Se,Ce,Oe,Fe,Pe,Ne,Ge,Ae,Ie,be,he,Le,We,$e,Ze,De,Ue,ve,ye,we;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Name...",i="Owner",s="Placement target",l="Locking",r="Enabled",d="Enables locking for the objects in the bucket. Locking can only be enabled while creating a bucket.",u="Security",R="Encryption",O="Enables encryption for the objects in the bucket. To enable encryption on a bucket you need to set the configuration values for SSE-S3 or SSE-KMS. To set the configuration values " + "\ufffd#67\ufffd" + "Click here" + "\ufffd/#67\ufffd" + "",F="Id",b="This field is required.",h="Bucket names can only contain lowercase letters, numbers, periods and hyphens.",M="The chosen name is already in use.",L="Bucket names must not contain uppercase characters or underscores.",S="Each label must start and end with a lowercase letter or a number.",W="Bucket names cannot be formatted as IP address.",C="Bucket labels cannot be empty and can only contain lowercase letters, numbers and hyphens.",Z="Bucket names must be 3 to 63 characters long.",D="Loading...",U="-- Select a user --",v="This field is required.",y="Loading...",f="-- Select a placement target --",P="This field is required.",N="Versioning",te="Enabled",A="Enables versioning for the objects in the bucket.",Me="Multi-Factor Authentication",Se="Delete enabled",Ce="Enables MFA (multi-factor authentication) Delete, which requires additional authentication for changing the bucket versioning state.",Oe="Token Serial Number",Fe="This field is required.",Pe="Token PIN",Ne="This field is required.",Ge="Mode",Ae="Compliance",Ie="Governance",be="Days",he="The number of days that you want to specify for the default retention period that will be applied to new objects placed in this bucket.",Le="The entered value must be a positive integer.",We="Retention Days must be a positive integer.",$e="SSE-S3 Encryption",Ze="Connect to an external key management service",De="KMS Provider",Ue="-- Select a provider --",ve="This field is required.",ye="Key Id ",we="This field is required.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","bucketForm","novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],n,[1,"card-body"],["class","form-group row",4,"ngIf"],[1,"form-group","row"],["for","bid",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","bid","name","bid","type","text","placeholder",o,"formControlName","bid",1,"form-control",3,"readonly","autofocus"],["class","invalid-feedback",4,"ngIf"],["for","owner",1,"cd-col-form-label","required"],i,["id","owner","name","owner","formControlName","owner",1,"form-select",3,"autofocus"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["for","placement-target",1,"cd-col-form-label",3,"ngClass"],s,["placementTargetSelect",""],[4,"ngIf","ngIfElse"],[4,"ngIf"],[1,"cd-header"],l,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","lock_enabled","formControlName","lock_enabled","type","checkbox",1,"custom-control-input"],["for","lock_enabled",1,"custom-control-label"],r,d,u,["id","encryption_enabled","name","encryption_enabled","formControlName","encryption_enabled","type","checkbox",1,"form-check-input"],["for","encryption_enabled",1,"form-check-label"],R,["aria-label","toggle encryption helper"],O,["href","#/rgw/bucket/create","aria-label","click here",3,"click"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["for","id",1,"cd-col-form-label"],F,["id","id","name","id","type","text","formControlName","id","readonly","",1,"form-control"],[1,"invalid-feedback"],b,h,M,L,S,W,C,Z,[3,"ngValue"],D,U,[3,"value"],v,["id","placement-target","name","placement-target","formControlName","placement-target",1,"form-select"],y,f,P,["id","placement-target","name","placement-target","formControlName","placement-target","type","text","readonly","",1,"form-control"],N,["type","checkbox","id","versioning","name","versioning","formControlName","versioning",1,"custom-control-input",3,"change"],["for","versioning",1,"custom-control-label"],te,A,Me,["type","checkbox","id","mfa-delete","name","mfa-delete","formControlName","mfa-delete",1,"custom-control-input",3,"change"],["for","mfa-delete",1,"custom-control-label"],Se,Ce,["for","mfa-token-serial",1,"cd-col-form-label"],Oe,["type","text","id","mfa-token-serial","name","mfa-token-serial","formControlName","mfa-token-serial",1,"form-control"],Fe,["for","mfa-token-pin",1,"cd-col-form-label"],Pe,["type","text","id","mfa-token-pin","name","mfa-token-pin","formControlName","mfa-token-pin",1,"form-control"],Ne,["for","lock_mode",1,"cd-col-form-label"],Ge,["formControlName","lock_mode","name","lock_mode","id","lock_mode",1,"form-select"],["value","COMPLIANCE"],Ae,["value","GOVERNANCE"],Ie,["for","lock_retention_period_days",1,"cd-col-form-label"],be,he,["type","number","id","lock_retention_period_days","formControlName","lock_retention_period_days","min","0",1,"form-control"],Le,We,[1,"custom-control","custom-radio","custom-control-inline","ps-5"],["formControlName","encryption_type","id","sse_S3_enabled","type","radio","name","encryption_type","value","AES256",1,"form-check-input"],["for","sse_S3_enabled",1,"form-control-label"],$e,["formControlName","encryption_type","id","kms_enabled","name","encryption_type","value","aws:kms","type","radio",1,"form-check-input"],["for","kms_enabled",1,"form-control-label"],Ze,["for","kms_provider",1,"cd-col-form-label","required"],De,["id","kms_provider","name","kms_provider","formControlName","kms_provider",1,"form-select",3,"autofocus"],Ue,ve,["for","keyId",1,"cd-col-form-label","required"],ye,["id","keyId","name","keyId","type","text","formControlName","keyId",1,"form-control"],we]},template:function(_,o){1&_&&e.YNc(0,uo,73,43,"div",0),2&_&&e.Q6J("cdFormLoading",o.loading)},dependencies:[T.mk,T.sg,T.O5,j.S,B.p,fe.U,r_.y,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.wV,a.Wl,a.EJ,a._,a.JJ,a.JL,a.qQ,a.sg,a.u,T.rS,_e.m]}),t})();var u_=c(70882),Be=c(68136),Qe=c(30982),le=c(59019),qe=c(68774),Ye=c(47557),g_=c(66369),re=c(51847),ce=c(47640),R_=c(60251),Je=c(94928),T_=c(68962),go=c(96102);function Ro(t,n){1&t&&(e.TgZ(0,"td"),e.SDv(1,17),e.qZA())}function To(t,n){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimless"),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.selection.bucket_quota.max_size)," ")}}function Eo(t,n){1&t&&(e.TgZ(0,"td"),e.SDv(1,18),e.qZA())}function fo(t,n){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.hij(" ",_.selection.bucket_quota.max_objects," ")}}function po(t,n){if(1&t&&(e.ynx(0),e.TgZ(1,"tr")(2,"td",5),e.SDv(3,15),e.qZA(),e.YNc(4,Ro,2,0,"td",0),e.YNc(5,To,3,3,"td",0),e.qZA(),e.TgZ(6,"tr")(7,"td",5),e.SDv(8,16),e.qZA(),e.YNc(9,Eo,2,0,"td",0),e.YNc(10,fo,2,1,"td",0),e.qZA(),e.BQk()),2&t){const _=e.oxw(2);e.xp6(4),e.Q6J("ngIf",_.selection.bucket_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.selection.bucket_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",_.selection.bucket_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.selection.bucket_quota.max_objects>-1)}}function mo(t,n){if(1&t&&(e.ynx(0),e.TgZ(1,"tr")(2,"td",5),e.SDv(3,19),e.qZA(),e.TgZ(4,"td"),e._uU(5),e.qZA()(),e.TgZ(6,"tr")(7,"td",5),e.SDv(8,20),e.qZA(),e.TgZ(9,"td"),e._uU(10),e.qZA()(),e.BQk()),2&t){const _=e.oxw(2);e.xp6(5),e.Oqu(_.selection.lock_mode),e.xp6(5),e.Oqu(_.selection.lock_retention_period_days)}}function Mo(t,n){if(1&t&&(e.ynx(0),e.TgZ(1,"table",1)(2,"tbody")(3,"tr")(4,"td",2),e.SDv(5,3),e.qZA(),e.TgZ(6,"td",4),e._uU(7),e.qZA()(),e.TgZ(8,"tr")(9,"td",5),e.SDv(10,6),e.qZA(),e.TgZ(11,"td"),e._uU(12),e.qZA()(),e.TgZ(13,"tr")(14,"td",5),e.SDv(15,7),e.qZA(),e.TgZ(16,"td"),e._uU(17),e.qZA()(),e.TgZ(18,"tr")(19,"td",5),e.SDv(20,8),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.qZA()(),e.TgZ(23,"tr")(24,"td",5),e.SDv(25,9),e.qZA(),e.TgZ(26,"td"),e._uU(27),e.qZA()(),e.TgZ(28,"tr")(29,"td",5),e.SDv(30,10),e.qZA(),e.TgZ(31,"td"),e._uU(32),e.ALo(33,"cdDate"),e.qZA()()()(),e.TgZ(34,"div")(35,"legend"),e.SDv(36,11),e.qZA(),e.TgZ(37,"table",1)(38,"tbody")(39,"tr")(40,"td",2),e.SDv(41,12),e.qZA(),e.TgZ(42,"td",4),e._uU(43),e.ALo(44,"booleanText"),e.qZA()(),e.YNc(45,po,11,4,"ng-container",0),e.qZA()()(),e.TgZ(46,"legend"),e.SDv(47,13),e.qZA(),e.TgZ(48,"table",1)(49,"tbody")(50,"tr")(51,"td",2),e.SDv(52,14),e.qZA(),e.TgZ(53,"td",4),e._uU(54),e.ALo(55,"booleanText"),e.qZA()(),e.YNc(56,mo,11,2,"ng-container",0),e.qZA()(),e.BQk()),2&t){const _=e.oxw();e.xp6(7),e.Oqu(_.selection.versioning),e.xp6(5),e.Oqu(_.selection.encryption),e.xp6(5),e.Oqu(_.selection.mfa_delete),e.xp6(5),e.Oqu(_.selection.index_type),e.xp6(5),e.Oqu(_.selection.placement_rule),e.xp6(5),e.Oqu(e.lcZ(33,10,_.selection.mtime)),e.xp6(11),e.Oqu(e.lcZ(44,12,_.selection.bucket_quota.enabled)),e.xp6(2),e.Q6J("ngIf",_.selection.bucket_quota.enabled),e.xp6(9),e.Oqu(e.lcZ(55,14,_.selection.lock_enabled)),e.xp6(2),e.Q6J("ngIf",_.selection.lock_enabled)}}let So=(()=>{class t{constructor(_){this.rgwBucketService=_}ngOnChanges(){this.selection&&this.rgwBucketService.get(this.selection.bid).subscribe(_=>{_.lock_retention_period_days=this.rgwBucketService.getLockDays(_),this.selection=_})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Ee.o))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L;return n="Versioning",_="Encryption",o="MFA Delete",i="Index type",s="Placement rule",l="Last modification time",r="Bucket quota",d="Enabled",u="Locking",R="Enabled",O="Maximum size",F="Maximum objects",b="Unlimited",h="Unlimited",M="Mode",L="Days",[[4,"ngIf"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],n,[1,"w-75"],[1,"bold"],_,o,i,s,l,r,d,u,R,O,F,b,h,M,L]},template:function(_,o){1&_&&e.YNc(0,Mo,57,16,"ng-container",0),2&_&&e.Q6J("ngIf",o.selection)},dependencies:[T.O5,T_.T,g_.n,go.N],styles:["table[_ngcontent-%COMP%]{table-layout:fixed}table[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{word-wrap:break-word}"]}),t})();const Co=["bucketSizeTpl"],Oo=["bucketObjectTpl"];function Fo(t,n){if(1&t&&e._UZ(0,"cd-usage-bar",8),2&t){const _=e.oxw().row;e.Q6J("total",_.bucket_quota.max_size)("used",_.bucket_size)}}function Po(t,n){1&t&&e.SDv(0,9)}function No(t,n){if(1&t&&(e.YNc(0,Fo,1,2,"cd-usage-bar",6),e.YNc(1,Po,1,0,"ng-template",null,7,e.W1O)),2&t){const _=n.row,o=e.MAs(2);e.Q6J("ngIf",_.bucket_quota.max_size>0&&_.bucket_quota.enabled)("ngIfElse",o)}}function Go(t,n){if(1&t&&e._UZ(0,"cd-usage-bar",12),2&t){const _=e.oxw().row;e.Q6J("total",_.bucket_quota.max_objects)("used",_.num_objects)("isBinary",!1)}}function Ao(t,n){1&t&&e.SDv(0,13)}function Io(t,n){if(1&t&&(e.YNc(0,Go,1,3,"cd-usage-bar",10),e.YNc(1,Ao,1,0,"ng-template",null,11,e.W1O)),2&t){const _=n.row,o=e.MAs(2);e.Q6J("ngIf",_.bucket_quota.max_objects>0&&_.bucket_quota.enabled)("ngIfElse",o)}}let ho=(()=>{class t extends Be.o{constructor(_,o,i,s,l,r,d,u){super(u),this.authStorageService=_,this.dimlessBinaryPipe=o,this.dimlessPipe=i,this.rgwBucketService=s,this.modalService=l,this.urlBuilder=r,this.actionLabels=d,this.ngZone=u,this.columns=[],this.buckets=[],this.selection=new qe.r}ngOnInit(){this.permission=this.authStorageService.getPermissions().rgw,this.columns=[{name:"Name",prop:"bid",flexGrow:2},{name:"Owner",prop:"owner",flexGrow:2.5},{name:"Used Capacity",prop:"bucket_size",flexGrow:.6,pipe:this.dimlessBinaryPipe},{name:"Capacity Limit %",prop:"size_usage",cellTemplate:this.bucketSizeTpl,flexGrow:.8},{name:"Objects",prop:"num_objects",flexGrow:.6,pipe:this.dimlessPipe},{name:"Object Limit %",prop:"object_usage",cellTemplate:this.bucketObjectTpl,flexGrow:.8}];const _=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().bid)}`;this.tableActions=[{permission:"create",icon:$.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:l=>!l.hasSelection},{permission:"update",icon:$.P.edit,routerLink:()=>this.urlBuilder.getEdit(_()),name:this.actionLabels.EDIT},{permission:"delete",icon:$.P.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:l=>l.hasMultiSelection}],this.setTableRefreshTimeout()}transformBucketData(){E().forEach(this.buckets,_=>{const o=_.bucket_quota.max_size,i=_.bucket_quota.max_objects;_.bucket_size=0,_.num_objects=0,E().isEmpty(_.usage)||(_.bucket_size=_.usage["rgw.main"].size_actual,_.num_objects=_.usage["rgw.main"].num_objects),_.size_usage=o>0?_.bucket_size/o:void 0,_.object_usage=i>0?_.num_objects/i:void 0})}getBucketList(_){this.setTableRefreshTimeout(),this.rgwBucketService.list(!0).subscribe(o=>{this.buckets=o,this.transformBucketData()},()=>{_.error()})}updateSelection(_){this.selection=_}deleteAction(){this.modalService.show(Qe.M,{itemDescription:this.selection.hasSingleSelection?"bucket":"buckets",itemNames:this.selection.selected.map(_=>_.bid),submitActionObservable:()=>new u_.y(_=>{(0,ne.D)(this.selection.selected.map(o=>this.rgwBucketService.delete(o.bid))).subscribe({error:o=>{_.error(o),this.table.refreshBtn()},complete:()=>{_.complete(),this.table.refreshBtn()}})})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ce.j),e.Y36(Ye.$),e.Y36(g_.n),e.Y36(Ee.o),e.Y36(ee.Z),e.Y36(re.F),e.Y36(I.p4),e.Y36(e.R0b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-bucket-list"]],viewQuery:function(_,o){if(1&_&&(e.Gf(le.a,7),e.Gf(Co,7),e.Gf(Oo,7)),2&_){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.bucketSizeTpl=i.first),e.iGM(i=e.CRH())&&(o.bucketObjectTpl=i.first)}},features:[e._Bn([{provide:re.F,useValue:new re.F("rgw/bucket")}]),e.qOj],decls:8,vars:9,consts:function(){let n,_;return n="No Limit",_="No Limit",[["columnMode","flex","selectionType","multiClick","identifier","bid",3,"autoReload","data","columns","hasDetails","status","setExpandedRow","updateSelection","fetchData"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["bucketSizeTpl",""],["bucketObjectTpl",""],[3,"total","used",4,"ngIf","ngIfElse"],["noSizeQuota",""],[3,"total","used"],n,[3,"total","used","isBinary",4,"ngIf","ngIfElse"],["noObjectQuota",""],[3,"total","used","isBinary"],_]},template:function(_,o){1&_&&(e.TgZ(0,"cd-table",0,1),e.NdJ("setExpandedRow",function(s){return o.setExpandedRow(s)})("updateSelection",function(s){return o.updateSelection(s)})("fetchData",function(s){return o.getBucketList(s)}),e._UZ(2,"cd-table-actions",2)(3,"cd-rgw-bucket-details",3),e.qZA(),e.YNc(4,No,3,2,"ng-template",null,4,e.W1O),e.YNc(6,Io,3,2,"ng-template",null,5,e.W1O)),2&_&&(e.Q6J("autoReload",!1)("data",o.buckets)("columns",o.columns)("hasDetails",!0)("status",o.tableStatus),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},dependencies:[T.O5,R_.O,le.a,Je.K,So]}),t})();var Lo=c(58111),E_=c(76317),f_=c(61350),Wo=c(59376),$o=c(60351);function Zo(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table-key-value",11),e.NdJ("fetchData",function(){e.CHM(_);const i=e.oxw(2);return e.KtG(i.getMetaData())}),e.qZA()}if(2&t){const _=e.oxw(2);e.Q6J("data",_.metadata)}}function Do(t,n){if(1&t&&e._UZ(0,"cd-table-performance-counter",12),2&t){const _=e.oxw(2);e.Q6J("serviceId",_.serviceMapId)}}function Uo(t,n){if(1&t&&e._UZ(0,"cd-grafana",15),2&t){const _=e.oxw(3);e.Q6J("grafanaPath","rgw-instance-detail?var-rgw_servers=rgw."+_.serviceId)("type","metrics")}}function vo(t,n){1&t&&(e.ynx(0,13),e.TgZ(1,"a",4),e.SDv(2,14),e.qZA(),e.YNc(3,Uo,1,2,"ng-template",6),e.BQk())}function yo(t,n){if(1&t&&(e.ynx(0),e.TgZ(1,"nav",1,2),e.ynx(3,3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,Zo,1,1,"ng-template",6),e.BQk(),e.ynx(7,7),e.TgZ(8,"a",4),e.SDv(9,8),e.qZA(),e.YNc(10,Do,1,1,"ng-template",6),e.BQk(),e.YNc(11,vo,4,0,"ng-container",9),e.qZA(),e._UZ(12,"div",10),e.BQk()),2&t){const _=e.MAs(2),o=e.oxw();e.xp6(11),e.Q6J("ngIf",o.grafanaPermission.read),e.xp6(1),e.Q6J("ngbNavOutlet",_)}}let wo=(()=>{class t{constructor(_,o){this.rgwDaemonService=_,this.authStorageService=o,this.serviceId="",this.serviceMapId="",this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection&&(this.serviceId=this.selection.id,this.serviceMapId=this.selection.service_map_id)}getMetaData(){E().isEmpty(this.serviceId)||this.rgwDaemonService.get(this.serviceId).subscribe(_=>{this.metadata=_.rgw_metadata})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(oe.b),e.Y36(ce.j))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-daemon-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let n,_,o,i;return n="Details",_="Performance Counters",o="Performance Details",i="RGW instance details",[[4,"ngIf"],["ngbNav","","cdStatefulTab","rgw-daemon-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],n,["ngbNavContent",""],["ngbNavItem","performance-counters"],_,["ngbNavItem","performance-details",4,"ngIf"],[3,"ngbNavOutlet"],[3,"data","fetchData"],["serviceType","rgw",3,"serviceId"],["ngbNavItem","performance-details"],o,["title",i,"uid","x5ARzZtmk","grafanaStyle","one",3,"grafanaPath","type"]]},template:function(_,o){1&_&&e.YNc(0,yo,13,2,"ng-container",0),2&_&&e.Q6J("ngIf",o.selection)},dependencies:[T.O5,E_.F,f_.b,Wo.m,$o.p,G.uN,G.Pz,G.nv,G.Vx,G.tO,G.Dy]}),t})();function xo(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table",8),e.NdJ("setExpandedRow",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.setExpandedRow(i))})("fetchData",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.getDaemonList(i))}),e._UZ(1,"cd-rgw-daemon-details",9),e.qZA()}if(2&t){const _=e.oxw();e.Q6J("data",_.daemons)("columns",_.columns)("hasDetails",!0),e.xp6(1),e.Q6J("selection",_.expandedRow)}}function ko(t,n){1&t&&e._UZ(0,"cd-grafana",11),2&t&&e.Q6J("grafanaPath","rgw-overview?")("type","metrics")}function zo(t,n){1&t&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,10),e.qZA(),e.YNc(3,ko,1,2,"ng-template",5),e.BQk())}function qo(t,n){1&t&&e._UZ(0,"cd-grafana",13),2&t&&e.Q6J("grafanaPath","radosgw-sync-overview?")("type","metrics")}function Ho(t,n){1&t&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,12),e.qZA(),e.YNc(3,qo,1,2,"ng-template",5),e.BQk())}let Xo=(()=>{class t extends Be.o{constructor(_,o,i,s){super(),this.rgwDaemonService=_,this.authStorageService=o,this.cephShortVersionPipe=i,this.rgwSiteService=s,this.columns=[],this.daemons=[],this.updateDaemons=l=>{this.daemons=l}}ngOnInit(){this.grafanaPermission=this.authStorageService.getPermissions().grafana,this.columns=[{name:"ID",prop:"id",flexGrow:2},{name:"Hostname",prop:"server_hostname",flexGrow:2},{name:"Port",prop:"port",flexGrow:1},{name:"Realm",prop:"realm_name",flexGrow:2},{name:"Zone Group",prop:"zonegroup_name",flexGrow:2},{name:"Zone",prop:"zone_name",flexGrow:2},{name:"Version",prop:"version",flexGrow:1,pipe:this.cephShortVersionPipe}],this.rgwSiteService.get("realms").subscribe(_=>this.isMultiSite=_.length>0)}getDaemonList(_){this.rgwDaemonService.list().subscribe(this.updateDaemons,()=>{_.error()})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(oe.b),e.Y36(ce.j),e.Y36(Lo.F),e.Y36(n_.I))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-daemon-list"]],features:[e.qOj],decls:9,vars:3,consts:function(){let n,_,o,i,s;return n="Gateways List",_="Overall Performance",o="RGW overview",i="Sync Performance",s="Radosgw sync overview",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],n,["ngbNavContent",""],["ngbNavItem","",4,"ngIf"],[3,"ngbNavOutlet"],["columnMode","flex",3,"data","columns","hasDetails","setExpandedRow","fetchData"],["cdTableDetail","",3,"selection"],_,["title",o,"uid","WAkugZpiz","grafanaStyle","two",3,"grafanaPath","type"],i,["title",s,"uid","rgw-sync-overview","grafanaStyle","two",3,"grafanaPath","type"]]},template:function(_,o){if(1&_&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,xo,2,4,"ng-template",5),e.BQk(),e.YNc(6,zo,4,0,"ng-container",6),e.YNc(7,Ho,4,0,"ng-container",6),e.qZA(),e._UZ(8,"div",7)),2&_){const i=e.MAs(1);e.xp6(6),e.Q6J("ngIf",o.grafanaPermission.read),e.xp6(1),e.Q6J("ngIf",o.grafanaPermission.read&&o.isMultiSite),e.xp6(1),e.Q6J("ngbNavOutlet",i)}},dependencies:[T.O5,E_.F,le.a,G.uN,G.Pz,G.nv,G.Vx,G.tO,G.Dy,wo]}),t})();var Bo=c(6481),Ke=c(28211),He=(()=>{return(t=He||(He={})).USERS="users",t.BUCKETS="buckets",t.METADATA="metadata",t.USAGE="usage",t.ZONE="zone",He;var t})();let p_=(()=>{class t{static getAll(){return Object.values(t.capabilities)}}return t.capabilities=He,t})();function Qo(t,n){1&t&&e._UZ(0,"input",22),2&t&&e.Q6J("readonly",!0)}function Yo(t,n){1&t&&(e.TgZ(0,"option",17),e.SDv(1,25),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Jo(t,n){if(1&t&&(e.TgZ(0,"option",26),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function Ko(t,n){if(1&t&&(e.TgZ(0,"select",23),e.YNc(1,Yo,2,1,"option",24),e.YNc(2,Jo,2,2,"option",19),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",null!==_.types),e.xp6(1),e.Q6J("ngForOf",_.types)}}function Vo(t,n){1&t&&(e.TgZ(0,"span",27),e.SDv(1,28),e.qZA())}function jo(t,n){if(1&t&&(e.TgZ(0,"option",26),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function en(t,n){1&t&&(e.TgZ(0,"span",27),e.SDv(1,29),e.qZA())}const _n=function(t){return{required:t}},tn=function(){return["read","write","*"]};let on=(()=>{class t{constructor(_,o,i){this.formBuilder=_,this.activeModal=o,this.actionLabels=i,this.submitAction=new e.vpe,this.editing=!0,this.types=[],this.resource="capability",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({type:[null,[a.kI.required]],perm:[null,[a.kI.required]]})}setEditing(_=!0){this.editing=_,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.ADD}setValues(_,o){this.formGroup.setValue({type:_,perm:o})}setCapabilities(_){const o=[];_.forEach(i=>{o.push(i.type)}),this.types=[],p_.getAll().forEach(i=>{-1===E().indexOf(o,i)&&this.types.push(i)})}onSubmit(){this.submitAction.emit(this.formGroup.value),this.activeModal.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ae.O),e.Y36(G.Kz),e.Y36(I.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-capability-modal"]],outputs:{submitAction:"submitAction"},decls:29,vars:24,consts:function(){let n,_,o,i,s,l,r;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Type",o="Permission",i="-- Select a permission --",s="-- Select a type --",l="This field is required.",r="This field is required.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","type",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","type","class","form-control","type","text","formControlName","type",3,"readonly",4,"ngIf"],["id","type","class","form-select","formControlName","type","autofocus","",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["for","perm",1,"cd-col-form-label","required"],o,["id","perm","formControlName","perm",1,"form-select"],[3,"ngValue"],i,[3,"value",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["id","type","type","text","formControlName","type",1,"form-control",3,"readonly"],["id","type","formControlName","type","autofocus","",1,"form-select"],[3,"ngValue",4,"ngIf"],s,[3,"value"],[1,"invalid-feedback"],l,r]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e.YNc(13,Qo,1,1,"input",11),e.YNc(14,Ko,3,2,"select",12),e.YNc(15,Vo,2,0,"span",13),e.qZA()(),e.TgZ(16,"div",7)(17,"label",14),e.SDv(18,15),e.qZA(),e.TgZ(19,"div",10)(20,"select",16)(21,"option",17),e.SDv(22,18),e.qZA(),e.YNc(23,jo,2,2,"option",19),e.qZA(),e.YNc(24,en,2,0,"span",13),e.qZA()()(),e.TgZ(25,"div",20)(26,"cd-form-button-panel",21),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(27,"titlecase"),e.ALo(28,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,13,o.action))(e.lcZ(4,15,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.formGroup),e.xp6(4),e.Q6J("ngClass",e.VKq(21,_n,!o.editing)),e.xp6(3),e.Q6J("ngIf",o.editing),e.xp6(1),e.Q6J("ngIf",!o.editing),e.xp6(1),e.Q6J("ngIf",o.formGroup.showError("type",i,"required")),e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(23,tn)),e.xp6(1),e.Q6J("ngIf",o.formGroup.showError("perm",i,"required")),e.xp6(2),e.Q6J("form",o.formGroup)("submitText",e.lcZ(27,17,o.action)+" "+e.lcZ(28,19,o.resource))}},dependencies:[T.mk,T.sg,T.O5,X.z,B.p,fe.U,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.EJ,a.JJ,a.JL,a.sg,a.u,T.rS,_e.m]}),t})();var pe=c(58039),Xe=c(4416);function nn(t,n){1&t&&e._UZ(0,"input",17),2&t&&e.Q6J("readonly",!0)}function sn(t,n){1&t&&(e.TgZ(0,"option",21),e.SDv(1,22),e.qZA()),2&t&&e.Q6J("ngValue",null)}function an(t,n){if(1&t&&(e.TgZ(0,"option",23),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.Oqu(_)}}function ln(t,n){if(1&t&&(e.TgZ(0,"select",18),e.YNc(1,sn,2,1,"option",19),e.YNc(2,an,2,2,"option",20),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",null!==_.userCandidates),e.xp6(1),e.Q6J("ngForOf",_.userCandidates)}}function rn(t,n){1&t&&(e.TgZ(0,"span",24),e.SDv(1,25),e.qZA())}function cn(t,n){1&t&&(e.TgZ(0,"div",7)(1,"div",26)(2,"div",27),e._UZ(3,"input",28),e.TgZ(4,"label",29),e.SDv(5,30),e.qZA()()()())}function dn(t,n){1&t&&(e.TgZ(0,"span",24),e.SDv(1,37),e.qZA())}const Ve=function(t){return{required:t}};function un(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",31),e.SDv(2,32),e.qZA(),e.TgZ(3,"div",10)(4,"div",33),e._UZ(5,"input",34)(6,"button",35)(7,"cd-copy-2-clipboard-button",36),e.qZA(),e.YNc(8,dn,2,0,"span",13),e.qZA()()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(3,Ve,!_.viewing)),e.xp6(4),e.Q6J("readonly",_.viewing),e.xp6(3),e.Q6J("ngIf",_.formGroup.showError("access_key",o,"required"))}}function gn(t,n){1&t&&(e.TgZ(0,"span",24),e.SDv(1,43),e.qZA())}function Rn(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",38),e.SDv(2,39),e.qZA(),e.TgZ(3,"div",10)(4,"div",33),e._UZ(5,"input",40)(6,"button",41)(7,"cd-copy-2-clipboard-button",42),e.qZA(),e.YNc(8,gn,2,0,"span",13),e.qZA()()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(3,Ve,!_.viewing)),e.xp6(4),e.Q6J("readonly",_.viewing),e.xp6(3),e.Q6J("ngIf",_.formGroup.showError("secret_key",o,"required"))}}let m_=(()=>{class t{constructor(_,o,i){this.formBuilder=_,this.activeModal=o,this.actionLabels=i,this.submitAction=new e.vpe,this.viewing=!0,this.userCandidates=[],this.resource="S3 Key",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({user:[null,[a.kI.required]],generate_key:[!0],access_key:[null,[m.h.requiredIf({generate_key:!1})]],secret_key:[null,[m.h.requiredIf({generate_key:!1})]]})}setViewing(_=!0){this.viewing=_,this.action=this.viewing?this.actionLabels.SHOW:this.actionLabels.CREATE}setValues(_,o,i){this.formGroup.setValue({user:_,generate_key:E().isEmpty(o),access_key:o,secret_key:i})}setUserCandidates(_){this.userCandidates=_}onSubmit(){this.submitAction.emit(this.formGroup.value),this.activeModal.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ae.O),e.Y36(G.Kz),e.Y36(I.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-s3-key-modal"]],outputs:{submitAction:"submitAction"},decls:23,vars:24,consts:function(){let n,_,o,i,s,l,r,d,u;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",o="-- Select a username --",i="This field is required.",s="Auto-generate key",l="Access key",r="This field is required.",d="Secret key",u="This field is required.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","user",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","user","class","form-control","type","text","formControlName","user",3,"readonly",4,"ngIf"],["id","user","class","form-control","formControlName","user","autofocus","",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","showSubmit","submitActionEvent"],["id","user","type","text","formControlName","user",1,"form-control",3,"readonly"],["id","user","formControlName","user","autofocus","",1,"form-control"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],[3,"ngValue"],o,[3,"value"],[1,"invalid-feedback"],i,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","generate_key","type","checkbox","formControlName","generate_key",1,"custom-control-input"],["for","generate_key",1,"custom-control-label"],s,["for","access_key",1,"cd-col-form-label",3,"ngClass"],l,[1,"input-group"],["id","access_key","type","password","formControlName","access_key",1,"form-control",3,"readonly"],["type","button","cdPasswordButton","access_key",1,"btn","btn-light"],["source","access_key"],r,["for","secret_key",1,"cd-col-form-label",3,"ngClass"],d,["id","secret_key","type","password","formControlName","secret_key",1,"form-control",3,"readonly"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],u]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e.YNc(13,nn,1,1,"input",11),e.YNc(14,ln,3,2,"select",12),e.YNc(15,rn,2,0,"span",13),e.qZA()(),e.YNc(16,cn,6,0,"div",14),e.YNc(17,un,9,5,"div",14),e.YNc(18,Rn,9,5,"div",14),e.qZA(),e.TgZ(19,"div",15)(20,"cd-form-button-panel",16),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(21,"titlecase"),e.ALo(22,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,14,o.action))(e.lcZ(4,16,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.formGroup),e.xp6(4),e.Q6J("ngClass",e.VKq(22,Ve,!o.viewing)),e.xp6(3),e.Q6J("ngIf",o.viewing),e.xp6(1),e.Q6J("ngIf",!o.viewing),e.xp6(1),e.Q6J("ngIf",o.formGroup.showError("user",i,"required")),e.xp6(1),e.Q6J("ngIf",!o.viewing),e.xp6(1),e.Q6J("ngIf",!o.formGroup.getValue("generate_key")),e.xp6(1),e.Q6J("ngIf",!o.formGroup.getValue("generate_key")),e.xp6(2),e.Q6J("form",o.formGroup)("submitText",e.lcZ(21,18,o.action)+" "+e.lcZ(22,20,o.resource))("showSubmit",!o.viewing)}},dependencies:[T.mk,T.sg,T.O5,X.z,pe.s,B.p,fe.U,Xe.C,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.Wl,a.EJ,a.JJ,a.JL,a.sg,a.u,T.rS,_e.m]}),t})();class Tn{}function En(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function fn(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function pn(t,n){if(1&t&&(e.TgZ(0,"option",32),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function mn(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,33),e.qZA())}function Mn(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,47),e.qZA())}function Sn(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",41),e.SDv(2,42),e.qZA(),e.TgZ(3,"div",10)(4,"div",43),e._UZ(5,"input",44)(6,"button",45)(7,"cd-copy-2-clipboard-button",46),e.qZA(),e.YNc(8,Mn,2,0,"span",15),e.qZA()()),2&t){const _=e.oxw(2),o=e.MAs(7);e.xp6(8),e.Q6J("ngIf",_.formGroup.showError("secret_key",o,"required"))}}function Cn(t,n){if(1&t&&(e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,34),e.qZA(),e.TgZ(3,"div",7)(4,"div",35)(5,"div",36),e._UZ(6,"input",37),e.TgZ(7,"label",38),e.SDv(8,39),e.qZA()()()(),e.YNc(9,Sn,9,1,"div",40),e.qZA()),2&t){const _=e.oxw();e.xp6(9),e.Q6J("ngIf",!_.editing&&!_.formGroup.getValue("generate_secret"))}}const On=function(t){return{required:t}},Fn=function(){return["read","write"]};let Pn=(()=>{class t{constructor(_,o,i){this.formBuilder=_,this.bsModalRef=o,this.actionLabels=i,this.submitAction=new e.vpe,this.editing=!0,this.subusers=[],this.resource="Subuser",this.createForm()}createForm(){this.formGroup=this.formBuilder.group({uid:[null],subuid:[null,[a.kI.required,this.subuserValidator()]],perm:[null,[a.kI.required]],generate_secret:[!0],secret_key:[null,[m.h.requiredIf({generate_secret:!1})]]})}subuserValidator(){const _=this;return o=>_.editing||(0,m.P)(o.value)?null:_.subusers.some(s=>E().isEqual(_.getSubuserName(s.id),o.value))?{subuserIdExists:!0}:null}getSubuserName(_){if(E().isEmpty(_))return _;const o=_.match(/([^:]+)(:(.+))?/);return E().isUndefined(o[3])?o[1]:o[3]}setEditing(_=!0){this.editing=_,this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE}setValues(_,o="",i=""){this.formGroup.setValue({uid:_,subuid:this.getSubuserName(o),perm:i,generate_secret:!0,secret_key:null})}setSubusers(_){this.subusers=_}onSubmit(){const _=this.formGroup.value,o=new Tn;o.id=`${_.uid}:${_.subuid}`,o.permissions=_.perm,o.generate_secret=_.generate_secret,o.secret_key=_.secret_key,this.submitAction.emit(o),this.bsModalRef.close()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ae.O),e.Y36(G.Kz),e.Y36(I.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-subuser-modal"]],outputs:{submitAction:"submitAction"},decls:39,vars:26,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",o="Subuser",i="Permission",s="-- Select a permission --",l="read, write",r="full",d="This field is required.",u="The chosen subuser ID is already in use.",R="This field is required.",O="Swift key",F="Auto-generate secret",b="Secret key",h="This field is required.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","uid",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["id","uid","type","text","formControlName","uid",1,"form-control",3,"readonly"],["for","subuid",1,"cd-col-form-label",3,"ngClass"],o,["id","subuid","type","text","formControlName","subuid","autofocus","",1,"form-control",3,"readonly"],["class","invalid-feedback",4,"ngIf"],["for","perm",1,"cd-col-form-label","required"],i,["id","perm","formControlName","perm",1,"form-select"],[3,"ngValue"],s,[3,"value",4,"ngFor","ngForOf"],["value","read-write"],l,["value","full-control"],r,[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],d,u,[3,"value"],R,O,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","generate_secret","type","checkbox","formControlName","generate_secret",1,"custom-control-input"],["for","generate_secret",1,"custom-control-label"],F,["class","form-group row",4,"ngIf"],["for","secret_key",1,"cd-col-form-label","required"],b,[1,"input-group"],["id","secret_key","type","password","formControlName","secret_key",1,"form-control"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],h]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.qZA()(),e.TgZ(14,"div",7)(15,"label",12),e.SDv(16,13),e.qZA(),e.TgZ(17,"div",10),e._UZ(18,"input",14),e.YNc(19,En,2,0,"span",15),e.YNc(20,fn,2,0,"span",15),e.qZA()(),e.TgZ(21,"div",7)(22,"label",16),e.SDv(23,17),e.qZA(),e.TgZ(24,"div",10)(25,"select",18)(26,"option",19),e.SDv(27,20),e.qZA(),e.YNc(28,pn,2,2,"option",21),e.TgZ(29,"option",22),e.SDv(30,23),e.qZA(),e.TgZ(31,"option",24),e.SDv(32,25),e.qZA()(),e.YNc(33,mn,2,0,"span",15),e.qZA()(),e.YNc(34,Cn,10,1,"fieldset",26),e.qZA(),e.TgZ(35,"div",27)(36,"cd-form-button-panel",28),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(37,"titlecase"),e.ALo(38,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",o.bsModalRef),e.xp6(4),e.pQV(e.lcZ(3,15,o.action))(e.lcZ(4,17,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.formGroup),e.xp6(7),e.Q6J("readonly",!0),e.xp6(2),e.Q6J("ngClass",e.VKq(23,On,!o.editing)),e.xp6(3),e.Q6J("readonly",o.editing),e.xp6(1),e.Q6J("ngIf",o.formGroup.showError("subuid",i,"required")),e.xp6(1),e.Q6J("ngIf",o.formGroup.showError("subuid",i,"subuserIdExists")),e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(25,Fn)),e.xp6(5),e.Q6J("ngIf",o.formGroup.showError("perm",i,"required")),e.xp6(1),e.Q6J("ngIf",!o.editing),e.xp6(2),e.Q6J("form",o.formGroup)("submitText",e.lcZ(37,19,o.action)+" "+e.lcZ(38,21,o.resource))}},dependencies:[T.mk,T.sg,T.O5,X.z,pe.s,B.p,fe.U,Xe.C,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.Wl,a.EJ,a.JJ,a.JL,a.sg,a.u,T.rS,_e.m]}),t})();var M_=c(13472);let S_=(()=>{class t{constructor(_,o){this.activeModal=_,this.actionLabels=o,this.resource="Swift Key",this.action=this.actionLabels.SHOW}setValues(_,o){this.user=_,this.secret_key=o}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(I.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-swift-key-modal"]],decls:23,vars:11,consts:function(){let n,_,o;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Username",o="Secret key",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],[1,"modal-body"],["novalidate",""],[1,"form-group","row"],["for","user",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["id","user","name","user","type","text",1,"form-control",3,"readonly","ngModel","ngModelChange"],["for","secret_key",1,"cd-col-form-label"],o,[1,"input-group"],["id","secret_key","name","secret_key","type","password",1,"form-control",3,"ngModel","readonly","ngModelChange"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],[1,"modal-footer"],[3,"backAction"]]},template:function(_,o){1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"div",4)(7,"form",5)(8,"div",6)(9,"label",7),e.SDv(10,8),e.qZA(),e.TgZ(11,"div",9)(12,"input",10),e.NdJ("ngModelChange",function(s){return o.user=s}),e.qZA()()(),e.TgZ(13,"div",6)(14,"label",11),e.SDv(15,12),e.qZA(),e.TgZ(16,"div",9)(17,"div",13)(18,"input",14),e.NdJ("ngModelChange",function(s){return o.secret_key=s}),e.qZA(),e._UZ(19,"button",15)(20,"cd-copy-2-clipboard-button",16),e.qZA()()()()(),e.TgZ(21,"div",17)(22,"cd-back-button",18),e.NdJ("backAction",function(){return o.activeModal.close()}),e.qZA()(),e.BQk(),e.qZA()),2&_&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,7,o.action))(e.lcZ(4,9,o.resource)),e.QtT(2),e.xp6(8),e.Q6J("readonly",!0)("ngModel",o.user),e.xp6(6),e.Q6J("ngModel",o.secret_key)("readonly",!0))},dependencies:[M_.W,X.z,pe.s,Xe.C,k.o,q.b,z.P,a._Y,a.Fj,a.JJ,a.JL,a.On,a.F,T.rS,_e.m]}),t})();var Nn=c(17932);function Gn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,51),e.qZA())}function An(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,52),e.qZA())}function In(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,53),e.qZA())}function bn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,57),e.qZA())}function hn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,58),e.qZA())}function Ln(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",54),e.SDv(2,55),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",56),e.YNc(5,bn,2,0,"span",13),e.YNc(6,hn,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(4),e.Q6J("readonly",o.editing),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("tenant",_,"pattern")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("tenant",_,"notUnique"))}}function Wn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,59),e.qZA())}function $n(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,60),e.qZA())}function Zn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,61),e.qZA())}function Dn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,62),e.qZA())}function Un(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,65),e.qZA())}function vn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,66),e.qZA())}function yn(t,n){if(1&t&&(e.TgZ(0,"div",8),e._UZ(1,"label",63),e.TgZ(2,"div",11),e._UZ(3,"input",64),e.YNc(4,Un,2,0,"span",13),e.YNc(5,vn,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(4),e.Q6J("ngIf",o.userForm.showError("max_buckets",_,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("max_buckets",_,"min"))}}function wn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,77),e.qZA())}function xn(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",71),e.SDv(2,72),e.qZA(),e.TgZ(3,"div",11)(4,"div",73),e._UZ(5,"input",74)(6,"button",75)(7,"cd-copy-2-clipboard-button",76),e.qZA(),e.YNc(8,wn,2,0,"span",13),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(8),e.Q6J("ngIf",o.userForm.showError("access_key",_,"required"))}}function kn(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,83),e.qZA())}function zn(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",78),e.SDv(2,79),e.qZA(),e.TgZ(3,"div",11)(4,"div",73),e._UZ(5,"input",80)(6,"button",81)(7,"cd-copy-2-clipboard-button",82),e.qZA(),e.YNc(8,kn,2,0,"span",13),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(8),e.Q6J("ngIf",o.userForm.showError("secret_key",_,"required"))}}function qn(t,n){if(1&t&&(e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,67),e.qZA(),e.TgZ(3,"div",8)(4,"div",14)(5,"div",15),e._UZ(6,"input",68),e.TgZ(7,"label",69),e.SDv(8,70),e.qZA()()()(),e.YNc(9,xn,9,1,"div",19),e.YNc(10,zn,9,1,"div",19),e.qZA()),2&t){const _=e.oxw(2);e.xp6(9),e.Q6J("ngIf",!_.editing&&!_.userForm.getValue("generate_key")),e.xp6(1),e.Q6J("ngIf",!_.editing&&!_.userForm.getValue("generate_key"))}}function Hn(t,n){1&t&&(e.TgZ(0,"span",94)(1,"span",95),e.SDv(2,96),e.qZA()())}const K=function(t){return[t]};function Xn(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"span")(1,"div",73)(2,"span",97),e._UZ(3,"i"),e.qZA(),e._UZ(4,"input",98),e.TgZ(5,"span",97),e._UZ(6,"i"),e.qZA(),e._UZ(7,"input",98),e.TgZ(8,"button",99),e.NdJ("click",function(){const s=e.CHM(_).index,l=e.oxw(3);return e.KtG(l.showSubuserModal(s))}),e._UZ(9,"i",91),e.qZA(),e.TgZ(10,"button",100),e.NdJ("click",function(){const s=e.CHM(_).index,l=e.oxw(3);return e.KtG(l.deleteSubuser(s))}),e._UZ(11,"i",91),e.qZA()(),e._UZ(12,"span",95),e.qZA()}if(2&t){const _=n.$implicit,o=e.oxw(3);e.xp6(3),e.Tol(o.icons.user),e.xp6(1),e.s9C("value",_.id),e.xp6(2),e.Tol(o.icons.share),e.xp6(1),e.s9C("value","full-control"===_.permissions?"full":_.permissions),e.xp6(2),e.Q6J("ngClass",e.VKq(10,K,o.icons.edit)),e.xp6(2),e.Q6J("ngClass",e.VKq(12,K,o.icons.destroy))}}function Bn(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,84),e.qZA(),e.TgZ(3,"div",85)(4,"div",14),e.YNc(5,Hn,3,0,"span",86),e.YNc(6,Xn,13,14,"span",87),e.TgZ(7,"div",88)(8,"div",89)(9,"button",90),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(2);return e.KtG(i.showSubuserModal())}),e._UZ(10,"i",91),e.ynx(11),e.SDv(12,92),e.ALo(13,"titlecase"),e.ALo(14,"upperFirst"),e.BQk(),e.qZA()()(),e._UZ(15,"span",93),e.qZA()()()}if(2&t){const _=e.oxw(2);e.xp6(5),e.Q6J("ngIf",0===_.subusers.length),e.xp6(1),e.Q6J("ngForOf",_.subusers),e.xp6(4),e.Q6J("ngClass",e.VKq(9,K,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(13,5,_.actionLabels.CREATE))(e.lcZ(14,7,_.subuserLabel)),e.QtT(12)}}function Qn(t,n){1&t&&(e.TgZ(0,"span",94)(1,"span",95),e.SDv(2,106),e.qZA()())}function Yn(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"span")(1,"div",73)(2,"div",97),e._UZ(3,"i"),e.qZA(),e._UZ(4,"input",98),e.TgZ(5,"button",107),e.NdJ("click",function(){const s=e.CHM(_).index,l=e.oxw(3);return e.KtG(l.showS3KeyModal(s))}),e._UZ(6,"i",91),e.qZA(),e.TgZ(7,"button",108),e.NdJ("click",function(){const s=e.CHM(_).index,l=e.oxw(3);return e.KtG(l.deleteS3Key(s))}),e._UZ(8,"i",91),e.qZA()(),e._UZ(9,"span",95),e.qZA()}if(2&t){const _=n.$implicit,o=e.oxw(3);e.xp6(3),e.Tol(o.icons.key),e.xp6(1),e.s9C("value",_.user),e.xp6(2),e.Q6J("ngClass",e.VKq(6,K,o.icons.show)),e.xp6(2),e.Q6J("ngClass",e.VKq(8,K,o.icons.destroy))}}function Jn(t,n){1&t&&(e.TgZ(0,"span",94)(1,"span",95),e.SDv(2,109),e.qZA()())}function Kn(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"span")(1,"div",73)(2,"span",97),e._UZ(3,"i"),e.qZA(),e._UZ(4,"input",98),e.TgZ(5,"button",110),e.NdJ("click",function(){const s=e.CHM(_).index,l=e.oxw(3);return e.KtG(l.showSwiftKeyModal(s))}),e._UZ(6,"i",91),e.qZA()(),e._UZ(7,"span",95),e.qZA()}if(2&t){const _=n.$implicit,o=e.oxw(3);e.xp6(3),e.Tol(o.icons.key),e.xp6(1),e.s9C("value",_.user),e.xp6(2),e.Q6J("ngClass",e.VKq(5,K,o.icons.show))}}function Vn(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,101),e.qZA(),e.TgZ(3,"div",8)(4,"label",63),e.SDv(5,102),e.qZA(),e.TgZ(6,"div",11),e.YNc(7,Qn,3,0,"span",86),e.YNc(8,Yn,10,10,"span",87),e.TgZ(9,"div",88)(10,"div",89)(11,"button",103),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(2);return e.KtG(i.showS3KeyModal())}),e._UZ(12,"i",91),e.ynx(13),e.SDv(14,104),e.ALo(15,"titlecase"),e.ALo(16,"upperFirst"),e.BQk(),e.qZA()()(),e._UZ(17,"span",93),e.qZA(),e._UZ(18,"hr"),e.qZA(),e.TgZ(19,"div",8)(20,"label",63),e.SDv(21,105),e.qZA(),e.TgZ(22,"div",11),e.YNc(23,Jn,3,0,"span",86),e.YNc(24,Kn,8,7,"span",87),e.qZA()()()}if(2&t){const _=e.oxw(2);e.xp6(7),e.Q6J("ngIf",0===_.s3Keys.length),e.xp6(1),e.Q6J("ngForOf",_.s3Keys),e.xp6(4),e.Q6J("ngClass",e.VKq(11,K,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(15,7,_.actionLabels.CREATE))(e.lcZ(16,9,_.s3keyLabel)),e.QtT(14),e.xp6(7),e.Q6J("ngIf",0===_.swiftKeys.length),e.xp6(1),e.Q6J("ngForOf",_.swiftKeys)}}function jn(t,n){1&t&&(e.TgZ(0,"span",94)(1,"span",95),e.SDv(2,114),e.qZA()())}function ei(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"span")(1,"div",73)(2,"div",97),e._UZ(3,"i"),e.qZA(),e._UZ(4,"input",98),e.TgZ(5,"button",115),e.NdJ("click",function(){const s=e.CHM(_).index,l=e.oxw(3);return e.KtG(l.showCapabilityModal(s))}),e._UZ(6,"i",91),e.qZA(),e.TgZ(7,"button",116),e.NdJ("click",function(){const s=e.CHM(_).index,l=e.oxw(3);return e.KtG(l.deleteCapability(s))}),e._UZ(8,"i",91),e.qZA()(),e._UZ(9,"span",95),e.qZA()}if(2&t){const _=n.$implicit,o=e.oxw(3);e.xp6(3),e.Tol(o.icons.share),e.xp6(1),e.hYB("value","",_.type,":",_.perm,""),e.xp6(2),e.Q6J("ngClass",e.VKq(7,K,o.icons.edit)),e.xp6(2),e.Q6J("ngClass",e.VKq(9,K,o.icons.destroy))}}function _i(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"fieldset")(1,"legend"),e.SDv(2,111),e.qZA(),e.TgZ(3,"div",8)(4,"div",14),e.YNc(5,jn,3,0,"span",86),e.YNc(6,ei,10,11,"span",87),e.TgZ(7,"div",88)(8,"div",89)(9,"button",112),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(2);return e.KtG(i.showCapabilityModal())}),e.ALo(10,"pipeFunction"),e.ALo(11,"pipeFunction"),e._UZ(12,"i",91),e.ynx(13),e.SDv(14,113),e.ALo(15,"titlecase"),e.ALo(16,"upperFirst"),e.BQk(),e.qZA()()(),e._UZ(17,"span",93),e.qZA()()()}if(2&t){const _=e.oxw(2);e.xp6(5),e.Q6J("ngIf",0===_.capabilities.length),e.xp6(1),e.Q6J("ngForOf",_.capabilities),e.xp6(3),e.Q6J("disabled",e.xi3(10,7,_.capabilities,_.hasAllCapabilities))("disableTooltip",!e.xi3(11,10,_.capabilities,_.hasAllCapabilities)),e.xp6(3),e.Q6J("ngClass",e.VKq(17,K,_.icons.add)),e.xp6(4),e.pQV(e.lcZ(15,13,_.actionLabels.ADD))(e.lcZ(16,15,_.capabilityLabel)),e.QtT(14)}}function ti(t,n){1&t&&(e.TgZ(0,"div",8)(1,"div",14)(2,"div",15),e._UZ(3,"input",117),e.TgZ(4,"label",118),e.SDv(5,119),e.qZA()()()())}function oi(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,123),e.qZA())}function ni(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,124),e.qZA())}function ii(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,125),e.qZA())}function si(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",120),e.SDv(2,121),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",122),e.YNc(5,oi,2,0,"span",13),e.YNc(6,ni,2,0,"span",13),e.YNc(7,ii,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.userForm.showError("user_quota_max_size",_,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("user_quota_max_size",_,"quotaMaxSize")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("user_quota_max_size",o.formDir,"pattern"))}}function ai(t,n){1&t&&(e.TgZ(0,"div",8)(1,"div",14)(2,"div",15),e._UZ(3,"input",126),e.TgZ(4,"label",127),e.SDv(5,128),e.qZA()()()())}function li(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,132),e.qZA())}function ri(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,133),e.qZA())}function ci(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",129),e.SDv(2,130),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",131),e.YNc(5,li,2,0,"span",13),e.YNc(6,ri,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.userForm.showError("user_quota_max_objects",_,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("user_quota_max_objects",_,"min"))}}function di(t,n){1&t&&(e.TgZ(0,"div",8)(1,"div",14)(2,"div",15),e._UZ(3,"input",134),e.TgZ(4,"label",135),e.SDv(5,136),e.qZA()()()())}function ui(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,140),e.qZA())}function gi(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,141),e.qZA())}function Ri(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,142),e.qZA())}function Ti(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",137),e.SDv(2,138),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",139),e.YNc(5,ui,2,0,"span",13),e.YNc(6,gi,2,0,"span",13),e.YNc(7,Ri,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.userForm.showError("bucket_quota_max_size",_,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("bucket_quota_max_size",_,"quotaMaxSize")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("bucket_quota_max_size",o.formDir,"pattern"))}}function Ei(t,n){1&t&&(e.TgZ(0,"div",8)(1,"div",14)(2,"div",15),e._UZ(3,"input",143),e.TgZ(4,"label",144),e.SDv(5,145),e.qZA()()()())}function fi(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,149),e.qZA())}function pi(t,n){1&t&&(e.TgZ(0,"span",50),e.SDv(1,150),e.qZA())}function mi(t,n){if(1&t&&(e.TgZ(0,"div",8)(1,"label",146),e.SDv(2,147),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",148),e.YNc(5,fi,2,0,"span",13),e.YNc(6,pi,2,0,"span",13),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.userForm.showError("bucket_quota_max_objects",_,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("bucket_quota_max_objects",_,"min"))}}const C_=function(t){return{required:t}};function Mi(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.YNc(14,Gn,2,0,"span",13),e.YNc(15,An,2,0,"span",13),e.YNc(16,In,2,0,"span",13),e.qZA()(),e.TgZ(17,"div",8)(18,"div",14)(19,"div",15)(20,"input",16),e.NdJ("click",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.updateFieldsWhenTenanted())}),e.qZA(),e.TgZ(21,"label",17),e.SDv(22,18),e.qZA()()()(),e.YNc(23,Ln,7,3,"div",19),e.TgZ(24,"div",8)(25,"label",20),e.SDv(26,21),e.qZA(),e.TgZ(27,"div",11),e._UZ(28,"input",22),e.YNc(29,Wn,2,0,"span",13),e.YNc(30,$n,2,0,"span",13),e.qZA()(),e.TgZ(31,"div",8)(32,"label",23),e.SDv(33,24),e.qZA(),e.TgZ(34,"div",11),e._UZ(35,"input",25),e.YNc(36,Zn,2,0,"span",13),e.YNc(37,Dn,2,0,"span",13),e.qZA()(),e.TgZ(38,"div",8)(39,"label",26),e.SDv(40,27),e.qZA(),e.TgZ(41,"div",11)(42,"select",28),e.NdJ("change",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.onMaxBucketsModeChange(i.target.value))}),e.TgZ(43,"option",29),e.SDv(44,30),e.qZA(),e.TgZ(45,"option",31),e.SDv(46,32),e.qZA(),e.TgZ(47,"option",33),e.SDv(48,34),e.qZA()()()(),e.YNc(49,yn,6,2,"div",19),e.TgZ(50,"div",8)(51,"div",14)(52,"div",15),e._UZ(53,"input",35),e.TgZ(54,"label",36),e.SDv(55,37),e.qZA(),e.TgZ(56,"cd-helper"),e.SDv(57,38),e.qZA()()()(),e.YNc(58,qn,11,2,"fieldset",39),e.YNc(59,Bn,16,11,"fieldset",39),e.YNc(60,Vn,25,13,"fieldset",39),e.YNc(61,_i,18,19,"fieldset",39),e.TgZ(62,"fieldset")(63,"legend"),e.SDv(64,40),e.qZA(),e.TgZ(65,"div",8)(66,"div",14)(67,"div",15),e._UZ(68,"input",41),e.TgZ(69,"label",42),e.SDv(70,43),e.qZA()()()(),e.YNc(71,ti,6,0,"div",19),e.YNc(72,si,8,3,"div",19),e.YNc(73,ai,6,0,"div",19),e.YNc(74,ci,7,2,"div",19),e.qZA(),e.TgZ(75,"fieldset")(76,"legend"),e.SDv(77,44),e.qZA(),e.TgZ(78,"div",8)(79,"div",14)(80,"div",15),e._UZ(81,"input",45),e.TgZ(82,"label",46),e.SDv(83,47),e.qZA()()()(),e.YNc(84,di,6,0,"div",19),e.YNc(85,Ti,8,3,"div",19),e.YNc(86,Ei,6,0,"div",19),e.YNc(87,mi,7,2,"div",19),e.qZA()(),e.TgZ(88,"div",48)(89,"cd-form-button-panel",49),e.NdJ("submitActionEvent",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.onSubmit())}),e.ALo(90,"titlecase"),e.ALo(91,"upperFirst"),e.qZA()()()()()}if(2&t){const _=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.userForm),e.xp6(6),e.pQV(e.lcZ(6,30,o.action))(e.lcZ(7,32,o.resource)),e.QtT(5),e.xp6(3),e.Q6J("ngClass",e.VKq(38,C_,!o.editing)),e.xp6(3),e.Q6J("readonly",o.editing),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("user_id",_,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("user_id",_,"pattern")),e.xp6(1),e.Q6J("ngIf",!o.userForm.getValue("show_tenant")&&o.userForm.showError("user_id",_,"notUnique")),e.xp6(4),e.Q6J("readonly",!0),e.xp6(3),e.Q6J("ngIf",o.userForm.getValue("show_tenant")),e.xp6(2),e.Q6J("ngClass",e.VKq(40,C_,!o.editing)),e.xp6(4),e.Q6J("ngIf",o.userForm.showError("display_name",_,"pattern")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("display_name",_,"required")),e.xp6(6),e.Q6J("ngIf",o.userForm.showError("email",_,"email")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("email",_,"notUnique")),e.xp6(12),e.Q6J("ngIf",1==o.userForm.get("max_buckets_mode").value),e.xp6(9),e.Q6J("ngIf",!o.editing),e.xp6(1),e.Q6J("ngIf",o.editing),e.xp6(1),e.Q6J("ngIf",o.editing),e.xp6(1),e.Q6J("ngIf",o.editing),e.xp6(10),e.Q6J("ngIf",o.userForm.controls.user_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",o.userForm.controls.user_quota_enabled.value&&!o.userForm.getValue("user_quota_max_size_unlimited")),e.xp6(1),e.Q6J("ngIf",o.userForm.controls.user_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",o.userForm.controls.user_quota_enabled.value&&!o.userForm.getValue("user_quota_max_objects_unlimited")),e.xp6(10),e.Q6J("ngIf",o.userForm.controls.bucket_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",o.userForm.controls.bucket_quota_enabled.value&&!o.userForm.getValue("bucket_quota_max_size_unlimited")),e.xp6(1),e.Q6J("ngIf",o.userForm.controls.bucket_quota_enabled.value),e.xp6(1),e.Q6J("ngIf",o.userForm.controls.bucket_quota_enabled.value&&!o.userForm.getValue("bucket_quota_max_objects_unlimited")),e.xp6(2),e.Q6J("form",o.userForm)("submitText",e.lcZ(90,34,o.action)+" "+e.lcZ(91,36,o.resource))}}let O_=(()=>{class t extends l_.E{constructor(_,o,i,s,l,r,d){super(),this.formBuilder=_,this.route=o,this.router=i,this.rgwUserService=s,this.modalService=l,this.notificationService=r,this.actionLabels=d,this.editing=!1,this.submitObservables=[],this.icons=$.P,this.subusers=[],this.s3Keys=[],this.swiftKeys=[],this.capabilities=[],this.showTenant=!1,this.previousTenant=null,this.resource="user",this.subuserLabel="subuser",this.s3keyLabel="S3 Key",this.capabilityLabel="capability",this.editing=this.router.url.startsWith(`/rgw/user/${I.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.createForm()}createForm(){this.userForm=this.formBuilder.group({user_id:[null,[a.kI.required,a.kI.pattern(/^[a-zA-Z0-9!@#%^&*()_-]+$/)],this.editing?[]:[m.h.unique(this.rgwUserService.exists,this.rgwUserService,()=>this.userForm.getValue("tenant"))]],show_tenant:[this.editing],tenant:[null,[a.kI.pattern(/^[a-zA-Z0-9!@#%^&*()_-]+$/)],this.editing?[]:[m.h.unique(this.rgwUserService.exists,this.rgwUserService,()=>this.userForm.getValue("user_id"),!0)]],display_name:[null,[a.kI.required,a.kI.pattern(/^[a-zA-Z0-9!@#%^&*()_ -]+$/)]],email:[null,[m.h.email],[m.h.unique(this.rgwUserService.emailExists,this.rgwUserService)]],max_buckets_mode:[1],max_buckets:[1e3,[m.h.requiredIf({max_buckets_mode:"1"}),m.h.number(!1)]],suspended:[!1],generate_key:[!0],access_key:[null,[m.h.requiredIf({generate_key:!1})]],secret_key:[null,[m.h.requiredIf({generate_key:!1})]],user_quota_enabled:[!1],user_quota_max_size_unlimited:[!0],user_quota_max_size:[null,[m.h.composeIf({user_quota_enabled:!0,user_quota_max_size_unlimited:!1},[a.kI.required,this.quotaMaxSizeValidator])]],user_quota_max_objects_unlimited:[!0],user_quota_max_objects:[null,[m.h.requiredIf({user_quota_enabled:!0,user_quota_max_objects_unlimited:!1})]],bucket_quota_enabled:[!1],bucket_quota_max_size_unlimited:[!0],bucket_quota_max_size:[null,[m.h.composeIf({bucket_quota_enabled:!0,bucket_quota_max_size_unlimited:!1},[a.kI.required,this.quotaMaxSizeValidator])]],bucket_quota_max_objects_unlimited:[!0],bucket_quota_max_objects:[null,[m.h.requiredIf({bucket_quota_enabled:!0,bucket_quota_max_objects_unlimited:!1})]]})}ngOnInit(){this.route.params.subscribe(_=>{if(!_.hasOwnProperty("uid"))return void this.loadingReady();const o=decodeURIComponent(_.uid),i=[];i.push(this.rgwUserService.get(o)),i.push(this.rgwUserService.getQuota(o)),(0,ne.D)(i).subscribe(s=>{const l=E().clone(this.userForm.value);let r=E().pick(s[0],E().keys(this.userForm.value));switch(r.max_buckets){case-1:r.max_buckets_mode=-1,r.max_buckets="";break;case 0:r.max_buckets_mode=0,r.max_buckets="";break;default:r.max_buckets_mode=1}["user","bucket"].forEach(u=>{const R=s[1][u+"_quota"];r[u+"_quota_enabled"]=R.enabled,R.max_size<0?(r[u+"_quota_max_size_unlimited"]=!0,r[u+"_quota_max_size"]=null):(r[u+"_quota_max_size_unlimited"]=!1,r[u+"_quota_max_size"]=`${R.max_size} B`),R.max_objects<0?(r[u+"_quota_max_objects_unlimited"]=!0,r[u+"_quota_max_objects"]=null):(r[u+"_quota_max_objects_unlimited"]=!1,r[u+"_quota_max_objects"]=R.max_objects)}),r=E().merge(l,r),this.userForm.setValue(r),this.subusers=s[0].subusers,this.s3Keys=s[0].keys,this.swiftKeys=s[0].swift_keys;const d={"read, write":"*"};s[0].caps.forEach(u=>{u.perm in d&&(u.perm=d[u.perm])}),this.capabilities=s[0].caps,this.loadingReady()},()=>{this.loadingError()})})}goToListView(){this.router.navigate(["/rgw/user"])}onSubmit(){let _;if(this.userForm.pristine)return void this.goToListView();const o=this.getUID();if(this.editing){if(this._isGeneralDirty()){const i=this._getUpdateArgs();this.submitObservables.push(this.rgwUserService.update(o,i))}_="Updated Object Gateway user '" + o + "'"}else{const i=this._getCreateArgs();this.submitObservables.push(this.rgwUserService.create(i)),_="Created Object Gateway user '" + o + "'"}if(this._isUserQuotaDirty()){const i=this._getUserQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(o,i))}if(this._isBucketQuotaDirty()){const i=this._getBucketQuotaArgs();this.submitObservables.push(this.rgwUserService.updateQuota(o,i))}(0,Bo.z)(...this.submitObservables).subscribe({error:()=>{this.userForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.notificationService.show(w.k.success,_),this.goToListView()}})}updateFieldsWhenTenanted(){this.showTenant=this.userForm.getValue("show_tenant"),this.showTenant?(this.userForm.get("user_id").markAsTouched(),this.previousTenant=this.userForm.get("tenant").value,this.userForm.get("tenant").patchValue(null)):(this.userForm.get("user_id").markAsUntouched(),this.userForm.get("tenant").patchValue(this.previousTenant))}getUID(){let _=this.userForm.getValue("user_id");const o=this.userForm?.getValue("tenant");return o&&o.length>0&&(_=`${this.userForm.getValue("tenant")}$${_}`),_}quotaMaxSizeValidator(_){return(0,m.P)(_.value)?null:null===RegExp("^(\\d+(\\.\\d+)?)\\s*(B|K(B|iB)?|M(B|iB)?|G(B|iB)?|T(B|iB)?)?$","i").exec(_.value)||(new Ke.H).toBytes(_.value)<1024?{quotaMaxSize:!0}:null}setSubuser(_,o){const i={"full-control":"full","read-write":"readwrite"},s=this.getUID();this.submitObservables.push(this.rgwUserService.createSubuser(s,{subuser:_.id,access:_.permissions in i?i[_.permissions]:_.permissions,key_type:"swift",secret_key:_.secret_key,generate_secret:_.generate_secret?"true":"false"})),E().isNumber(o)?this.subusers[o]=_:(this.subusers.push(_),this.swiftKeys.push({user:_.id,secret_key:_.generate_secret?"Apply your changes first...":_.secret_key})),this.userForm.markAsDirty()}deleteSubuser(_){const o=this.subusers[_];this.submitObservables.push(this.rgwUserService.deleteSubuser(this.getUID(),o.id)),this.s3Keys=this.s3Keys.filter(i=>i.user!==o.id),this.swiftKeys=this.swiftKeys.filter(i=>i.user!==o.id),this.subusers.splice(_,1),this.userForm.markAsDirty()}setCapability(_,o){const i=this.getUID();if(E().isNumber(o)){const s=this.capabilities[o];this.submitObservables.push(this.rgwUserService.deleteCapability(i,s.type,s.perm)),this.submitObservables.push(this.rgwUserService.addCapability(i,_.type,_.perm)),this.capabilities[o]=_}else this.submitObservables.push(this.rgwUserService.addCapability(i,_.type,_.perm)),this.capabilities=[...this.capabilities,_];this.userForm.markAsDirty()}deleteCapability(_){const o=this.capabilities[_];this.submitObservables.push(this.rgwUserService.deleteCapability(this.getUID(),o.type,o.perm)),this.capabilities.splice(_,1),this.capabilities=[...this.capabilities],this.userForm.markAsDirty()}hasAllCapabilities(_){return!E().difference(p_.getAll(),E().map(_,"type")).length}setS3Key(_,o){if(!E().isNumber(o)){const i=_.user.match(/([^:]+)(:(.+))?/),s=i[1],l={subuser:i[2]?i[3]:"",generate_key:_.generate_key?"true":"false"};"false"===l.generate_key&&(E().isNil(_.access_key)||(l.access_key=_.access_key),E().isNil(_.secret_key)||(l.secret_key=_.secret_key)),this.submitObservables.push(this.rgwUserService.addS3Key(s,l)),this.s3Keys.push({user:_.user,access_key:_.generate_key?"Apply your changes first...":_.access_key,secret_key:_.generate_key?"Apply your changes first...":_.secret_key})}this.userForm.markAsDirty()}deleteS3Key(_){const o=this.s3Keys[_];this.submitObservables.push(this.rgwUserService.deleteS3Key(this.getUID(),o.access_key)),this.s3Keys.splice(_,1),this.userForm.markAsDirty()}showSubuserModal(_){const o=this.getUID(),i=this.modalService.show(Pn);if(E().isNumber(_)){const s=this.subusers[_];i.componentInstance.setEditing(),i.componentInstance.setValues(o,s.id,s.permissions)}else i.componentInstance.setEditing(!1),i.componentInstance.setValues(o),i.componentInstance.setSubusers(this.subusers);i.componentInstance.submitAction.subscribe(s=>{this.setSubuser(s,_)})}showS3KeyModal(_){const o=this.modalService.show(m_);if(E().isNumber(_)){const i=this.s3Keys[_];o.componentInstance.setViewing(),o.componentInstance.setValues(i.user,i.access_key,i.secret_key)}else{const i=this._getS3KeyUserCandidates();o.componentInstance.setViewing(!1),o.componentInstance.setUserCandidates(i),o.componentInstance.submitAction.subscribe(s=>{this.setS3Key(s)})}}showSwiftKeyModal(_){const o=this.modalService.show(S_),i=this.swiftKeys[_];o.componentInstance.setValues(i.user,i.secret_key)}showCapabilityModal(_){const o=this.modalService.show(on);if(E().isNumber(_)){const i=this.capabilities[_];o.componentInstance.setEditing(),o.componentInstance.setValues(i.type,i.perm)}else o.componentInstance.setEditing(!1),o.componentInstance.setCapabilities(this.capabilities);o.componentInstance.submitAction.subscribe(i=>{this.setCapability(i,_)})}_isGeneralDirty(){return["display_name","email","max_buckets_mode","max_buckets","suspended"].some(_=>this.userForm.get(_).dirty)}_isUserQuotaDirty(){return["user_quota_enabled","user_quota_max_size_unlimited","user_quota_max_size","user_quota_max_objects_unlimited","user_quota_max_objects"].some(_=>this.userForm.get(_).dirty)}_isBucketQuotaDirty(){return["bucket_quota_enabled","bucket_quota_max_size_unlimited","bucket_quota_max_size","bucket_quota_max_objects_unlimited","bucket_quota_max_objects"].some(_=>this.userForm.get(_).dirty)}_getCreateArgs(){const _={uid:this.getUID(),display_name:this.userForm.getValue("display_name"),suspended:this.userForm.getValue("suspended"),email:"",max_buckets:this.userForm.getValue("max_buckets"),generate_key:this.userForm.getValue("generate_key"),access_key:"",secret_key:""},o=this.userForm.getValue("email");E().isString(o)&&o.length>0&&E().merge(_,{email:o}),this.userForm.getValue("generate_key")||E().merge(_,{generate_key:!1,access_key:this.userForm.getValue("access_key"),secret_key:this.userForm.getValue("secret_key")});const s=parseInt(this.userForm.getValue("max_buckets_mode"),10);return E().includes([-1,0],s)&&E().merge(_,{max_buckets:s}),_}_getUpdateArgs(){const _={},o=["display_name","email","max_buckets","suspended"];for(const s of o)_[s]=this.userForm.getValue(s);const i=parseInt(this.userForm.getValue("max_buckets_mode"),10);return E().includes([-1,0],i)&&(_.max_buckets=i),_}_getUserQuotaArgs(){const _={quota_type:"user",enabled:this.userForm.getValue("user_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("user_quota_max_size_unlimited")){const o=(new Ke.H).toBytes(this.userForm.getValue("user_quota_max_size"));_.max_size_kb=(o/1024).toFixed(0)}return this.userForm.getValue("user_quota_max_objects_unlimited")||(_.max_objects=this.userForm.getValue("user_quota_max_objects")),_}_getBucketQuotaArgs(){const _={quota_type:"bucket",enabled:this.userForm.getValue("bucket_quota_enabled"),max_size_kb:-1,max_objects:-1};if(!this.userForm.getValue("bucket_quota_max_size_unlimited")){const o=(new Ke.H).toBytes(this.userForm.getValue("bucket_quota_max_size"));_.max_size_kb=(o/1024).toFixed(0)}return this.userForm.getValue("bucket_quota_max_objects_unlimited")||(_.max_objects=this.userForm.getValue("bucket_quota_max_objects")),_}_getS3KeyUserCandidates(){let _=[];const o=this.getUID();return E().isString(o)&&!E().isEmpty(o)&&_.push(o),this.subusers.forEach(i=>{_.push(i.id)}),this.s3Keys.forEach(i=>{_.push(i.user)}),_=E().uniq(_),_}onMaxBucketsModeChange(_){"1"===_&&(this.userForm.get("max_buckets").valid||this.userForm.patchValue({max_buckets:1e3}))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ae.O),e.Y36(J.gz),e.Y36(J.F0),e.Y36(Q),e.Y36(ee.Z),e.Y36(Y.g),e.Y36(I.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L,S,W,C,Z,D,U,v,y,f,P,N,te,A,Me,Se,Ce,Oe,Fe,Pe,Ne,Ge,Ae,Ie,be,he,Le,We,$e,Ze,De,Ue,ve,ye,we,p,W_,$_,Z_,D_,U_,v_,y_,w_,x_,k_,z_,q_,H_,X_,B_,Q_,Y_,J_,K_,V_;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="User ID",o="Show Tenant",i="Full name",s="Email address",l="Max. buckets",r="Disabled",d="Unlimited",u="Custom",R="Suspended",O="Suspending the user disables the user and subuser.",F="User quota",b="Enabled",h="Bucket quota",M="Enabled",L="This field is required.",S="The value is not valid.",W="The chosen user ID is already in use.",C="Tenant",Z="The value is not valid.",D="The chosen user ID exists in this tenant.",U="The value is not valid.",v="This field is required.",y="This is not a valid email address.",f="The chosen email address is already in use.",P="This field is required.",N="The entered value must be >= 1.",te="S3 key",A="Auto-generate key",Me="Access key",Se="This field is required.",Ce="Secret key",Oe="This field is required.",Fe="Subusers",Pe="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",Ne="There are no subusers.",Ge="Edit",Ae="Delete",Ie="Keys",be="S3",he="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",Le="Swift",We="There are no keys.",$e="Show",Ze="Delete",De="There are no keys.",Ue="Show",ve="Capabilities",ye="All capabilities are already added.",we="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",p="There are no capabilities.",W_="Edit",$_="Delete",Z_="Unlimited size",D_="Max. size",U_="This field is required.",v_="The value is not valid.",y_="Size must be a number or in a valid format. eg: 5 GiB",w_="Unlimited objects",x_="Max. objects",k_="This field is required.",z_="The entered value must be >= 0.",q_="Unlimited size",H_="Max. size",X_="This field is required.",B_="The value is not valid.",Q_="Size must be a number or in a valid format. eg: 5 GiB",Y_="Unlimited objects",J_="Max. objects",K_="This field is required.",V_="The entered value must be >= 0.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],n,[1,"card-body"],[1,"form-group","row"],["for","user_id",1,"cd-col-form-label",3,"ngClass"],_,[1,"cd-col-form-input"],["id","user_id","type","text","formControlName","user_id",1,"form-control",3,"readonly"],["class","invalid-feedback",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","show_tenant","type","checkbox","formControlName","show_tenant",1,"custom-control-input",3,"readonly","click"],["for","show_tenant",1,"custom-control-label"],o,["class","form-group row",4,"ngIf"],["for","display_name",1,"cd-col-form-label",3,"ngClass"],i,["id","display_name","type","text","formControlName","display_name",1,"form-control"],["for","email",1,"cd-col-form-label"],s,["id","email","type","text","formControlName","email",1,"form-control"],["for","max_buckets_mode",1,"cd-col-form-label"],l,["formControlName","max_buckets_mode","name","max_buckets_mode","id","max_buckets_mode",1,"form-select",3,"change"],["value","-1"],r,["value","0"],d,["value","1"],u,["id","suspended","type","checkbox","formControlName","suspended",1,"custom-control-input"],["for","suspended",1,"custom-control-label"],R,O,[4,"ngIf"],F,["id","user_quota_enabled","type","checkbox","formControlName","user_quota_enabled",1,"custom-control-input"],["for","user_quota_enabled",1,"custom-control-label"],b,h,["id","bucket_quota_enabled","type","checkbox","formControlName","bucket_quota_enabled",1,"custom-control-input"],["for","bucket_quota_enabled",1,"custom-control-label"],M,[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],L,S,W,["for","tenant",1,"cd-col-form-label"],C,["id","tenant","type","text","formControlName","tenant","autofocus","",1,"form-control",3,"readonly"],Z,D,U,v,y,f,[1,"cd-col-form-label"],["id","max_buckets","type","number","formControlName","max_buckets","min","1",1,"form-control"],P,N,te,["id","generate_key","type","checkbox","formControlName","generate_key",1,"custom-control-input"],["for","generate_key",1,"custom-control-label"],A,["for","access_key",1,"cd-col-form-label","required"],Me,[1,"input-group"],["id","access_key","type","password","formControlName","access_key",1,"form-control"],["type","button","cdPasswordButton","access_key",1,"btn","btn-light"],["source","access_key"],Se,["for","secret_key",1,"cd-col-form-label","required"],Ce,["id","secret_key","type","password","formControlName","secret_key",1,"form-control"],["type","button","cdPasswordButton","secret_key",1,"btn","btn-light"],["source","secret_key"],Oe,Fe,[1,"row"],["class","no-border",4,"ngIf"],[4,"ngFor","ngForOf"],[1,"row","my-2"],[1,"col-12"],["type","button",1,"btn","btn-light","float-end","tc_addSubuserButton",3,"click"],[3,"ngClass"],Pe,[1,"help-block"],[1,"no-border"],[1,"form-text","text-muted"],Ne,[1,"input-group-text"],["type","text","readonly","",1,"cd-form-control",3,"value"],["type","button","ngbTooltip",Ge,1,"btn","btn-light","tc_showSubuserButton",3,"click"],["type","button","ngbTooltip",Ae,1,"btn","btn-light","tc_deleteSubuserButton",3,"click"],Ie,be,["type","button",1,"btn","btn-light","float-end","tc_addS3KeyButton",3,"click"],he,Le,We,["type","button","ngbTooltip",$e,1,"btn","btn-light","tc_showS3KeyButton",3,"click"],["type","button","ngbTooltip",Ze,1,"btn","btn-light","tc_deleteS3KeyButton",3,"click"],De,["type","button","ngbTooltip",Ue,1,"btn","btn-light","tc_showSwiftKeyButton",3,"click"],ve,["type","button","ngbTooltip",ye,"triggers","pointerenter:pointerleave",1,"btn","btn-light","float-end","tc_addCapButton",3,"disabled","disableTooltip","click"],we,p,["type","button","ngbTooltip",W_,1,"btn","btn-light","tc_editCapButton",3,"click"],["type","button","ngbTooltip",$_,1,"btn","btn-light","tc_deleteCapButton",3,"click"],["id","user_quota_max_size_unlimited","type","checkbox","formControlName","user_quota_max_size_unlimited",1,"custom-control-input"],["for","user_quota_max_size_unlimited",1,"custom-control-label"],Z_,["for","user_quota_max_size",1,"cd-col-form-label","required"],D_,["id","user_quota_max_size","type","text","formControlName","user_quota_max_size","cdDimlessBinary","",1,"form-control"],U_,v_,y_,["id","user_quota_max_objects_unlimited","type","checkbox","formControlName","user_quota_max_objects_unlimited",1,"custom-control-input"],["for","user_quota_max_objects_unlimited",1,"custom-control-label"],w_,["for","user_quota_max_objects",1,"cd-col-form-label","required"],x_,["id","user_quota_max_objects","type","number","formControlName","user_quota_max_objects","min","0",1,"form-control"],k_,z_,["id","bucket_quota_max_size_unlimited","type","checkbox","formControlName","bucket_quota_max_size_unlimited",1,"custom-control-input"],["for","bucket_quota_max_size_unlimited",1,"custom-control-label"],q_,["for","bucket_quota_max_size",1,"cd-col-form-label","required"],H_,["id","bucket_quota_max_size","type","text","formControlName","bucket_quota_max_size","cdDimlessBinary","",1,"form-control"],X_,B_,Q_,["id","bucket_quota_max_objects_unlimited","type","checkbox","formControlName","bucket_quota_max_objects_unlimited",1,"custom-control-input"],["for","bucket_quota_max_objects_unlimited",1,"custom-control-label"],Y_,["for","bucket_quota_max_objects",1,"cd-col-form-label","required"],J_,["id","bucket_quota_max_objects","type","number","formControlName","bucket_quota_max_objects","min","0",1,"form-control"],K_,V_]},template:function(_,o){1&_&&e.YNc(0,Mi,92,42,"div",0),2&_&&e.Q6J("cdFormLoading",o.loading)},dependencies:[T.mk,T.sg,T.O5,j.S,pe.s,B.p,fe.U,Nn.Q,Xe.C,r_.y,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.wV,a.Wl,a.EJ,a.JJ,a.JL,a.qQ,a.sg,a.u,G._L,T.rS,_e.m,o_.i]}),t})();var F_=c(99466),Si=c(86969),Ci=c(78877);const Oi=["accessKeyTpl"],Fi=["secretKeyTpl"],Pi=function(t){return[t]};function Ni(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"legend"),e.SDv(2,13),e.qZA(),e.TgZ(3,"div")(4,"cd-table",14),e.NdJ("updateSelection",function(i){e.CHM(_);const s=e.oxw(3);return e.KtG(s.updateKeysSelection(i))}),e.TgZ(5,"div",15)(6,"div",16)(7,"button",17),e.NdJ("click",function(){e.CHM(_);const i=e.oxw(3);return e.KtG(i.showKeyModal())}),e._UZ(8,"i",18),e.ynx(9),e.SDv(10,19),e.BQk(),e.qZA()()()()()()}if(2&t){const _=e.oxw(3);e.xp6(4),e.Q6J("data",_.keys)("columns",_.keysColumns),e.xp6(3),e.Q6J("disabled",!_.keysSelection.hasSingleSelection),e.xp6(1),e.Q6J("ngClass",e.VKq(4,Pi,_.icons.show))}}function Gi(t,n){if(1&t&&(e.TgZ(0,"tr")(1,"td",8),e.SDv(2,20),e.qZA(),e.TgZ(3,"td"),e._uU(4),e.qZA()()),2&t){const _=e.oxw(3);e.xp6(4),e.Oqu(_.user.email)}}function Ai(t,n){if(1&t&&(e.TgZ(0,"div"),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.xp6(1),e.AsE(" ",_.id," (",_.permissions,") ")}}function Ii(t,n){if(1&t&&(e.TgZ(0,"tr")(1,"td",8),e.SDv(2,21),e.qZA(),e.TgZ(3,"td"),e.YNc(4,Ai,2,2,"div",22),e.qZA()()),2&t){const _=e.oxw(3);e.xp6(4),e.Q6J("ngForOf",_.user.subusers)}}function bi(t,n){if(1&t&&(e.TgZ(0,"div"),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.xp6(1),e.AsE(" ",_.type," (",_.perm,") ")}}function hi(t,n){if(1&t&&(e.TgZ(0,"tr")(1,"td",8),e.SDv(2,23),e.qZA(),e.TgZ(3,"td"),e.YNc(4,bi,2,2,"div",22),e.qZA()()),2&t){const _=e.oxw(3);e.xp6(4),e.Q6J("ngForOf",_.user.caps)}}function Li(t,n){if(1&t&&(e.TgZ(0,"tr")(1,"td",8),e.SDv(2,24),e.qZA(),e.TgZ(3,"td"),e._uU(4),e.ALo(5,"join"),e.qZA()()),2&t){const _=e.oxw(3);e.xp6(4),e.Oqu(e.lcZ(5,1,_.user.mfa_ids))}}function Wi(t,n){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function $i(t,n){1&t&&(e.TgZ(0,"td"),e.SDv(1,29),e.qZA())}function Zi(t,n){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.user.user_quota.max_size)," ")}}function Di(t,n){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function Ui(t,n){1&t&&(e.TgZ(0,"td"),e.SDv(1,30),e.qZA())}function vi(t,n){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.hij(" ",_.user.user_quota.max_objects," ")}}function yi(t,n){if(1&t&&(e.TgZ(0,"div")(1,"legend"),e.SDv(2,25),e.qZA(),e.TgZ(3,"table",2)(4,"tbody")(5,"tr")(6,"td",3),e.SDv(7,26),e.qZA(),e.TgZ(8,"td",5),e._uU(9),e.ALo(10,"booleanText"),e.qZA()(),e.TgZ(11,"tr")(12,"td",8),e.SDv(13,27),e.qZA(),e.YNc(14,Wi,2,0,"td",0),e.YNc(15,$i,2,0,"td",0),e.YNc(16,Zi,3,3,"td",0),e.qZA(),e.TgZ(17,"tr")(18,"td",8),e.SDv(19,28),e.qZA(),e.YNc(20,Di,2,0,"td",0),e.YNc(21,Ui,2,0,"td",0),e.YNc(22,vi,2,1,"td",0),e.qZA()()()()),2&t){const _=e.oxw(3);e.xp6(9),e.Oqu(e.lcZ(10,7,_.user.user_quota.enabled)),e.xp6(5),e.Q6J("ngIf",!_.user.user_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",!_.user.user_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.user.user_quota.enabled&&_.user.user_quota.max_objects>-1)}}function wi(t,n){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function xi(t,n){1&t&&(e.TgZ(0,"td"),e.SDv(1,35),e.qZA())}function ki(t,n){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.hij(" ",e.lcZ(2,1,_.user.bucket_quota.max_size)," ")}}function zi(t,n){1&t&&(e.TgZ(0,"td"),e._uU(1,"-"),e.qZA())}function qi(t,n){1&t&&(e.TgZ(0,"td"),e.SDv(1,36),e.qZA())}function Hi(t,n){if(1&t&&(e.TgZ(0,"td"),e._uU(1),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.hij(" ",_.user.bucket_quota.max_objects," ")}}function Xi(t,n){if(1&t&&(e.TgZ(0,"div")(1,"legend"),e.SDv(2,31),e.qZA(),e.TgZ(3,"table",2)(4,"tbody")(5,"tr")(6,"td",3),e.SDv(7,32),e.qZA(),e.TgZ(8,"td",5),e._uU(9),e.ALo(10,"booleanText"),e.qZA()(),e.TgZ(11,"tr")(12,"td",8),e.SDv(13,33),e.qZA(),e.YNc(14,wi,2,0,"td",0),e.YNc(15,xi,2,0,"td",0),e.YNc(16,ki,3,3,"td",0),e.qZA(),e.TgZ(17,"tr")(18,"td",8),e.SDv(19,34),e.qZA(),e.YNc(20,zi,2,0,"td",0),e.YNc(21,qi,2,0,"td",0),e.YNc(22,Hi,2,1,"td",0),e.qZA()()()()),2&t){const _=e.oxw(3);e.xp6(9),e.Oqu(e.lcZ(10,7,_.user.bucket_quota.enabled)),e.xp6(5),e.Q6J("ngIf",!_.user.bucket_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_size<=-1),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_size>-1),e.xp6(4),e.Q6J("ngIf",!_.user.bucket_quota.enabled),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_objects<=-1),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota.enabled&&_.user.bucket_quota.max_objects>-1)}}function Bi(t,n){if(1&t&&(e.TgZ(0,"div"),e.YNc(1,Ni,11,6,"div",0),e.TgZ(2,"legend"),e.SDv(3,1),e.qZA(),e.TgZ(4,"table",2)(5,"tbody")(6,"tr")(7,"td",3),e.SDv(8,4),e.qZA(),e.TgZ(9,"td",5),e._uU(10),e.qZA()(),e.TgZ(11,"tr")(12,"td",3),e.SDv(13,6),e.qZA(),e.TgZ(14,"td",5),e._uU(15),e.qZA()(),e.TgZ(16,"tr")(17,"td",3),e.SDv(18,7),e.qZA(),e.TgZ(19,"td",5),e._uU(20),e.qZA()(),e.TgZ(21,"tr")(22,"td",8),e.SDv(23,9),e.qZA(),e.TgZ(24,"td"),e._uU(25),e.qZA()(),e.YNc(26,Gi,5,1,"tr",0),e.TgZ(27,"tr")(28,"td",8),e.SDv(29,10),e.qZA(),e.TgZ(30,"td"),e._uU(31),e.ALo(32,"booleanText"),e.qZA()(),e.TgZ(33,"tr")(34,"td",8),e.SDv(35,11),e.qZA(),e.TgZ(36,"td"),e._uU(37),e.ALo(38,"booleanText"),e.qZA()(),e.TgZ(39,"tr")(40,"td",8),e.SDv(41,12),e.qZA(),e.TgZ(42,"td"),e._uU(43),e.ALo(44,"map"),e.qZA()(),e.YNc(45,Ii,5,1,"tr",0),e.YNc(46,hi,5,1,"tr",0),e.YNc(47,Li,6,3,"tr",0),e.qZA()(),e.YNc(48,yi,23,9,"div",0),e.YNc(49,Xi,23,9,"div",0),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.Q6J("ngIf",_.keys.length),e.xp6(9),e.Oqu(_.user.tenant),e.xp6(5),e.Oqu(_.user.user_id),e.xp6(5),e.Oqu(_.user.uid),e.xp6(5),e.Oqu(_.user.display_name),e.xp6(1),e.Q6J("ngIf",null==_.user.email?null:_.user.email.length),e.xp6(5),e.Oqu(e.lcZ(32,14,_.user.suspended)),e.xp6(6),e.Oqu(e.lcZ(38,16,"true"===_.user.system)),e.xp6(6),e.Oqu(e.xi3(44,18,_.user.max_buckets,_.maxBucketsMap)),e.xp6(2),e.Q6J("ngIf",_.user.subusers&&_.user.subusers.length),e.xp6(1),e.Q6J("ngIf",_.user.caps&&_.user.caps.length),e.xp6(1),e.Q6J("ngIf",null==_.user.mfa_ids?null:_.user.mfa_ids.length),e.xp6(1),e.Q6J("ngIf",_.user.user_quota),e.xp6(1),e.Q6J("ngIf",_.user.bucket_quota)}}function Qi(t,n){if(1&t&&(e.ynx(0),e.YNc(1,Bi,50,21,"div",0),e.BQk()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",_.user)}}let Yi=(()=>{class t{constructor(_,o){this.rgwUserService=_,this.modalService=o,this.keys=[],this.keysColumns=[],this.keysSelection=new qe.r,this.icons=$.P}ngOnInit(){this.keysColumns=[{name:"Username",prop:"username",flexGrow:1},{name:"Type",prop:"type",flexGrow:1}],this.maxBucketsMap={"-1":"Disabled",0:"Unlimited"}}ngOnChanges(){this.selection&&(this.user=this.selection,this.user.subusers=E().sortBy(this.user.subusers,"id"),this.user.caps=E().sortBy(this.user.caps,"type"),this.rgwUserService.getQuota(this.user.uid).subscribe(_=>{E().extend(this.user,_)}),this.keys=[],this.user.keys&&this.user.keys.forEach(_=>{this.keys.push({id:this.keys.length+1,type:"S3",username:_.user,ref:_})}),this.user.swift_keys&&this.user.swift_keys.forEach(_=>{this.keys.push({id:this.keys.length+1,type:"Swift",username:_.user,ref:_})}),this.keys=E().sortBy(this.keys,"user"))}updateKeysSelection(_){this.keysSelection=_}showKeyModal(){const _=this.keysSelection.first(),o=this.modalService.show("S3"===_.type?m_:S_);switch(_.type){case"S3":o.componentInstance.setViewing(),o.componentInstance.setValues(_.ref.user,_.ref.access_key,_.ref.secret_key);break;case"Swift":o.componentInstance.setValues(_.ref.user,_.ref.secret_key)}}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(Q),e.Y36(ee.Z))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-details"]],viewQuery:function(_,o){if(1&_&&(e.Gf(Oi,5),e.Gf(Fi,5)),2&_){let i;e.iGM(i=e.CRH())&&(o.accessKeyTpl=i.first),e.iGM(i=e.CRH())&&(o.secretKeyTpl=i.first)}},inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L,S,W,C,Z,D,U,v,y,f,P;return n="Details",_="Tenant",o="User ID",i="Username",s="Full name",l="Suspended",r="System",d="Maximum buckets",u="Keys",R="Show",O="Email address",F="Subusers",b="Capabilities",h="MFAs(Id)",M="User quota",L="Enabled",S="Maximum size",W="Maximum objects",C="Unlimited",Z="Unlimited",D="Bucket quota",U="Enabled",v="Maximum size",y="Maximum objects",f="Unlimited",P="Unlimited",[[4,"ngIf"],n,[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],_,[1,"w-75"],o,i,[1,"bold"],s,l,r,d,u,["columnMode","flex","selectionType","multi","forceIdentifier","true",3,"data","columns","updateSelection"],[1,"table-actions"],["dropdown","",1,"btn-group"],["type","button",1,"btn","btn-accent",3,"disabled","click"],[3,"ngClass"],R,O,F,[4,"ngFor","ngForOf"],b,h,M,L,S,W,C,Z,D,U,v,y,f,P]},template:function(_,o){1&_&&e.YNc(0,Qi,2,1,"ng-container",0),2&_&&e.Q6J("ngIf",o.selection)},dependencies:[T.mk,T.sg,T.O5,le.a,k.o,T_.T,Ye.$,Si.A,Ci.b]}),t})();const P_=function(){return{exact:!0}};let Ji=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-tabs"]],decls:7,vars:4,consts:function(){let n,_;return n="Users",_="Roles",[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/rgw/user","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],n,["routerLink","/rgw/roles","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],_]},template:function(_,o){1&_&&(e.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),e.SDv(3,3),e.qZA()(),e.TgZ(4,"li",1)(5,"a",4),e.SDv(6,5),e.qZA()()()),2&_&&(e.xp6(2),e.Q6J("routerLinkActiveOptions",e.DdM(2,P_)),e.xp6(3),e.Q6J("routerLinkActiveOptions",e.DdM(3,P_)))},dependencies:[J.rH,J.Od]}),t})();const Ki=["userSizeTpl"],Vi=["userObjectTpl"];function ji(t,n){if(1&t&&e._UZ(0,"cd-usage-bar",8),2&t){const _=e.oxw().row;e.Q6J("total",_.user_quota.max_size)("used",_.stats.size_actual)}}function es(t,n){1&t&&e.SDv(0,9)}function _s(t,n){if(1&t&&(e.YNc(0,ji,1,2,"cd-usage-bar",6),e.YNc(1,es,1,0,"ng-template",null,7,e.W1O)),2&t){const _=n.row,o=e.MAs(2);e.Q6J("ngIf",_.user_quota.max_size>0&&_.user_quota.enabled)("ngIfElse",o)}}function ts(t,n){if(1&t&&e._UZ(0,"cd-usage-bar",12),2&t){const _=e.oxw().row;e.Q6J("total",_.user_quota.max_objects)("used",_.stats.num_objects)("isBinary",!1)}}function os(t,n){1&t&&e.SDv(0,13)}function ns(t,n){if(1&t&&(e.YNc(0,ts,1,3,"cd-usage-bar",10),e.YNc(1,os,1,0,"ng-template",null,11,e.W1O)),2&t){const _=n.row,o=e.MAs(2);e.Q6J("ngIf",_.user_quota.max_objects>0&&_.user_quota.enabled)("ngIfElse",o)}}let ss=(()=>{class t extends Be.o{constructor(_,o,i,s,l,r){super(r),this.authStorageService=_,this.rgwUserService=o,this.modalService=i,this.urlBuilder=s,this.actionLabels=l,this.ngZone=r,this.columns=[],this.users=[],this.selection=new qe.r}ngOnInit(){this.permission=this.authStorageService.getPermissions().rgw,this.columns=[{name:"Username",prop:"uid",flexGrow:1},{name:"Tenant",prop:"tenant",flexGrow:1},{name:"Full name",prop:"display_name",flexGrow:1},{name:"Email address",prop:"email",flexGrow:1},{name:"Suspended",prop:"suspended",flexGrow:1,cellClass:"text-center",cellTransformation:F_.e.checkIcon},{name:"Max. buckets",prop:"max_buckets",flexGrow:1,cellTransformation:F_.e.map,customTemplateConfig:{"-1":"Disabled",0:"Unlimited"}},{name:"Capacity Limit %",prop:"size_usage",cellTemplate:this.userSizeTpl,flexGrow:.8},{name:"Object Limit %",prop:"object_usage",cellTemplate:this.userObjectTpl,flexGrow:.8}];const _=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().uid)}`;this.tableActions=[{permission:"create",icon:$.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE,canBePrimary:l=>!l.hasSelection},{permission:"update",icon:$.P.edit,routerLink:()=>this.urlBuilder.getEdit(_()),name:this.actionLabels.EDIT},{permission:"delete",icon:$.P.destroy,click:()=>this.deleteAction(),disable:()=>!this.selection.hasSelection,name:this.actionLabels.DELETE,canBePrimary:l=>l.hasMultiSelection}],this.setTableRefreshTimeout()}getUserList(_){this.setTableRefreshTimeout(),this.rgwUserService.list().subscribe(o=>{this.users=o},()=>{_.error()})}updateSelection(_){this.selection=_}deleteAction(){this.modalService.show(Qe.M,{itemDescription:this.selection.hasSingleSelection?"user":"users",itemNames:this.selection.selected.map(_=>_.uid),submitActionObservable:()=>new u_.y(_=>{(0,ne.D)(this.selection.selected.map(o=>this.rgwUserService.delete(o.uid))).subscribe({error:o=>{_.error(o),this.table.refreshBtn()},complete:()=>{_.complete(),this.table.refreshBtn()}})})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ce.j),e.Y36(Q),e.Y36(ee.Z),e.Y36(re.F),e.Y36(I.p4),e.Y36(e.R0b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-user-list"]],viewQuery:function(_,o){if(1&_&&(e.Gf(le.a,7),e.Gf(Ki,7),e.Gf(Vi,7)),2&_){let i;e.iGM(i=e.CRH())&&(o.table=i.first),e.iGM(i=e.CRH())&&(o.userSizeTpl=i.first),e.iGM(i=e.CRH())&&(o.userObjectTpl=i.first)}},features:[e._Bn([{provide:re.F,useValue:new re.F("rgw/user")}]),e.qOj],decls:9,vars:9,consts:function(){let n,_;return n="No Limit",_="No Limit",[["columnMode","flex","selectionType","multiClick","identifier","uid",3,"autoReload","data","columns","hasDetails","status","setExpandedRow","updateSelection","fetchData"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["userSizeTpl",""],["userObjectTpl",""],[3,"total","used",4,"ngIf","ngIfElse"],["noSizeQuota",""],[3,"total","used"],n,[3,"total","used","isBinary",4,"ngIf","ngIfElse"],["noObjectQuota",""],[3,"total","used","isBinary"],_]},template:function(_,o){1&_&&(e._UZ(0,"cd-rgw-user-tabs"),e.TgZ(1,"cd-table",0,1),e.NdJ("setExpandedRow",function(s){return o.setExpandedRow(s)})("updateSelection",function(s){return o.updateSelection(s)})("fetchData",function(s){return o.getUserList(s)}),e._UZ(3,"cd-table-actions",2)(4,"cd-rgw-user-details",3),e.qZA(),e.YNc(5,_s,3,2,"ng-template",null,4,e.W1O),e.YNc(7,ns,3,2,"ng-template",null,5,e.W1O)),2&_&&(e.xp6(1),e.Q6J("autoReload",!1)("data",o.users)("columns",o.columns)("hasDetails",!0)("status",o.tableStatus),e.xp6(2),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},dependencies:[T.O5,R_.O,le.a,Je.K,Yi,Ji]}),t})();var as=c(83357),je=c(62946),N_=c(13464),ls=c(46797),de=c(95596),e_=c(80381),V=c(95463),x=c(43186),ue=c(97937),ge=c(98961);function rs(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,33),e.qZA())}function cs(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,34),e.qZA())}function ds(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,35),e.qZA())}function us(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,36),e.qZA())}function gs(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,37),e.qZA())}function Rs(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,38),e.qZA())}function Ts(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,39),e.qZA())}function Es(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,40),e.qZA())}function fs(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,41),e.qZA())}function ps(t,n){1&t&&(e.TgZ(0,"span",32),e.SDv(1,42),e.qZA())}let ms=(()=>{class t{constructor(_,o,i,s,l,r,d,u,R){this.activeModal=_,this.actionLabels=o,this.rgwMultisiteService=i,this.rgwZoneService=s,this.notificationService=l,this.rgwZonegroupService=r,this.rgwRealmService=d,this.rgwDaemonService=u,this.modalService=R,this.endpoints=/^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{2,4}$/,this.ipv4Rgx=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,this.ipv6Rgx=/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i,this.submitAction=new e.vpe,this.multisiteInfo=[],this.createForm()}createForm(){this.multisiteMigrateForm=new V.d({realmName:new a.p4(null,{validators:[a.kI.required,m.h.custom("uniqueName",_=>this.realmNames&&-1!==this.zoneNames.indexOf(_))]}),zonegroupName:new a.p4(null,{validators:[a.kI.required,m.h.custom("uniqueName",_=>this.zonegroupNames&&-1!==this.zoneNames.indexOf(_))]}),zoneName:new a.p4(null,{validators:[a.kI.required,m.h.custom("uniqueName",_=>this.zoneNames&&-1!==this.zoneNames.indexOf(_))]}),zone_endpoints:new a.p4([],{validators:[m.h.custom("endpoint",_=>!(E().isEmpty(_)||(_.includes(",")?(_.split(",").forEach(o=>!this.endpoints.test(o)&&!this.ipv4Rgx.test(o)&&!this.ipv6Rgx.test(o)),1):this.endpoints.test(_)||this.ipv4Rgx.test(_)||this.ipv6Rgx.test(_)))),a.kI.required]}),zonegroup_endpoints:new a.p4([],[m.h.custom("endpoint",_=>!(E().isEmpty(_)||(_.includes(",")?(_.split(",").forEach(o=>!this.endpoints.test(o)&&!this.ipv4Rgx.test(o)&&!this.ipv6Rgx.test(o)),1):this.endpoints.test(_)||this.ipv4Rgx.test(_)||this.ipv6Rgx.test(_)))),a.kI.required]),access_key:new a.p4(null),secret_key:new a.p4(null)})}ngOnInit(){this.realmList=void 0!==this.multisiteInfo[0]&&this.multisiteInfo[0].hasOwnProperty("realms")?this.multisiteInfo[0].realms:[],this.realmNames=this.realmList.map(_=>_.name),this.zonegroupList=void 0!==this.multisiteInfo[1]&&this.multisiteInfo[1].hasOwnProperty("zonegroups")?this.multisiteInfo[1].zonegroups:[],this.zonegroupNames=this.zonegroupList.map(_=>_.name),this.zoneList=void 0!==this.multisiteInfo[2]&&this.multisiteInfo[2].hasOwnProperty("zones")?this.multisiteInfo[2].zones:[],this.zoneNames=this.zoneList.map(_=>_.name)}submit(){const _=this.multisiteMigrateForm.value;this.realm=new x.L6,this.realm.name=_.realmName,this.zonegroup=new x.iG,this.zonegroup.name=_.zonegroupName,this.zonegroup.endpoints=_.zonegroup_endpoints,this.zone=new x.jb,this.zone.name=_.zoneName,this.zone.endpoints=_.zone_endpoints,this.zone.system_key=new x.VY,this.zone.system_key.access_key=_.access_key,this.zone.system_key.secret_key=_.secret_key,this.rgwMultisiteService.migrate(this.realm,this.zonegroup,this.zone).subscribe(()=>{this.notificationService.show(w.k.success,"" + this.actionLabels.MIGRATE + " done successfully"),this.submitAction.emit(),this.activeModal.close()},()=>{this.notificationService.show(w.k.error,"Migration failed")})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(I.p4),e.Y36(e_.o),e.Y36(ue.g),e.Y36(Y.g),e.Y36(ge.K),e.Y36(de.y),e.Y36(oe.b),e.Y36(ee.Z))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-multisite-migrate"]],outputs:{submitAction:"submitAction"},decls:68,vars:14,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L,S,W;return n="Migrate Single Site to Multi-Site " + "\ufffd#3\ufffd" + "" + "\ufffd#4\ufffd" + "Migrate from a single-site deployment with a default zone group and zone to a multi-site system" + "\ufffd/#4\ufffd" + "" + "\ufffd/#3\ufffd" + "",_="Realm Name",o="Rename default zone group",i="Zone group Endpoints ",s="Rename default zone",l="Zone Endpoints ",r="S3 access key " + "\ufffd#47\ufffd" + "" + "\ufffd#48\ufffd" + "To see or copy your S3 access key, go to " + "[\ufffd#49\ufffd|\ufffd#50\ufffd|\ufffd#51\ufffd|\ufffd#52\ufffd]" + "Object Gateway > Users" + "[\ufffd/#49\ufffd|\ufffd/#50\ufffd|\ufffd/#51\ufffd|\ufffd/#52\ufffd]" + " and click on your user name. In " + "[\ufffd#49\ufffd|\ufffd#50\ufffd|\ufffd#51\ufffd|\ufffd#52\ufffd]" + "Keys" + "[\ufffd/#49\ufffd|\ufffd/#50\ufffd|\ufffd/#51\ufffd|\ufffd/#52\ufffd]" + ", click " + "[\ufffd#49\ufffd|\ufffd#50\ufffd|\ufffd#51\ufffd|\ufffd#52\ufffd]" + "Show" + "[\ufffd/#49\ufffd|\ufffd/#50\ufffd|\ufffd/#51\ufffd|\ufffd/#52\ufffd]" + ". View the access key by clicking Show and copy the key by clicking " + "[\ufffd#49\ufffd|\ufffd#50\ufffd|\ufffd#51\ufffd|\ufffd#52\ufffd]" + "Copy to Clipboard" + "[\ufffd/#49\ufffd|\ufffd/#50\ufffd|\ufffd/#51\ufffd|\ufffd/#52\ufffd]" + "." + "\ufffd/#48\ufffd" + "" + "\ufffd/#47\ufffd" + "",r=e.Zx4(r),d="S3 secret key " + "\ufffd#58\ufffd" + "" + "\ufffd#59\ufffd" + "To see or copy your S3 access key, go to " + "[\ufffd#60\ufffd|\ufffd#61\ufffd|\ufffd#62\ufffd|\ufffd#63\ufffd]" + "Object Gateway > Users" + "[\ufffd/#60\ufffd|\ufffd/#61\ufffd|\ufffd/#62\ufffd|\ufffd/#63\ufffd]" + " and click on your user name. In " + "[\ufffd#60\ufffd|\ufffd#61\ufffd|\ufffd#62\ufffd|\ufffd#63\ufffd]" + "Keys" + "[\ufffd/#60\ufffd|\ufffd/#61\ufffd|\ufffd/#62\ufffd|\ufffd/#63\ufffd]" + ", click " + "[\ufffd#60\ufffd|\ufffd#61\ufffd|\ufffd#62\ufffd|\ufffd#63\ufffd]" + "Show" + "[\ufffd/#60\ufffd|\ufffd/#61\ufffd|\ufffd/#62\ufffd|\ufffd/#63\ufffd]" + ". View the secret key by clicking Show and copy the key by clicking " + "[\ufffd#60\ufffd|\ufffd#61\ufffd|\ufffd#62\ufffd|\ufffd#63\ufffd]" + "Copy to Clipboard" + "[\ufffd/#60\ufffd|\ufffd/#61\ufffd|\ufffd/#62\ufffd|\ufffd/#63\ufffd]" + "." + "\ufffd/#59\ufffd" + "" + "\ufffd/#58\ufffd" + "",d=e.Zx4(d),u="This field is required.",R="The chosen realm name is already in use.",O="This field is required.",F="The chosen zone group name is already in use.",b="This field is required.",h="Please enter a valid IP address.",M="This field is required.",L="The chosen zone name is already in use.",S="This field is required.",W="Please enter a valid IP address.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","multisiteMigrateForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","realmName",1,"cd-col-form-label","required"],_,[1,"cd-col-form-input"],["type","text","placeholder","Realm name...","id","realmName","name","realmName","formControlName","realmName",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","zonegroupName",1,"cd-col-form-label","required"],o,["type","text","placeholder","Zone group name...","id","zonegroupName","name","zonegroupName","formControlName","zonegroupName",1,"form-control"],["for","zonegroup_endpoints",1,"cd-col-form-label","required"],i,["type","text","placeholder","e.g, http://ceph-node-00.com:80","id","zonegroup_endpoints","name","zonegroup_endpoints","formControlName","zonegroup_endpoints",1,"form-control"],["for","zoneName",1,"cd-col-form-label","required"],s,["type","text","placeholder","Zone name...","id","zoneName","name","zoneName","formControlName","zoneName",1,"form-control"],["for","zone_endpoints",1,"cd-col-form-label","required"],l,["type","text","placeholder","e.g, http://ceph-node-00.com:80","id","zone_endpoints","name","zone_endpoints","formControlName","zone_endpoints",1,"form-control"],["for","access_key",1,"cd-col-form-label","required"],r,["type","text","placeholder","e.g.","id","access_key","name","access_key","formControlName","access_key",1,"form-control"],d,["type","text","placeholder","e.g.","id","secret_key","name","secret_key","formControlName","secret_key",1,"form-control"],[1,"modal-footer"],[3,"submitText","form","submitActionEvent"],[1,"invalid-feedback"],u,R,O,F,b,h,M,L,S,W]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.tHW(2,2),e.TgZ(3,"cd-helper"),e._UZ(4,"span"),e.qZA(),e.N_p(),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.YNc(14,rs,2,0,"span",12),e.YNc(15,cs,2,0,"span",12),e.qZA()(),e.TgZ(16,"div",7)(17,"label",13),e.SDv(18,14),e.qZA(),e.TgZ(19,"div",10),e._UZ(20,"input",15),e.YNc(21,ds,2,0,"span",12),e.YNc(22,us,2,0,"span",12),e.qZA()(),e.TgZ(23,"div",7)(24,"label",16),e.SDv(25,17),e.qZA(),e.TgZ(26,"div",10),e._UZ(27,"input",18),e.YNc(28,gs,2,0,"span",12),e.YNc(29,Rs,2,0,"span",12),e.qZA()(),e.TgZ(30,"div",7)(31,"label",19),e.SDv(32,20),e.qZA(),e.TgZ(33,"div",10),e._UZ(34,"input",21),e.YNc(35,Ts,2,0,"span",12),e.YNc(36,Es,2,0,"span",12),e.qZA()(),e.TgZ(37,"div",7)(38,"label",22),e.SDv(39,23),e.qZA(),e.TgZ(40,"div",10),e._UZ(41,"input",24),e.YNc(42,fs,2,0,"span",12),e.YNc(43,ps,2,0,"span",12),e.qZA()(),e.TgZ(44,"div",7)(45,"label",25),e.tHW(46,26),e.TgZ(47,"cd-helper")(48,"span"),e._UZ(49,"b")(50,"b")(51,"b")(52,"b"),e.qZA()(),e.N_p(),e.qZA(),e.TgZ(53,"div",10),e._UZ(54,"input",27),e.qZA()(),e.TgZ(55,"div",7)(56,"label",25),e.tHW(57,28),e.TgZ(58,"cd-helper")(59,"span"),e._UZ(60,"b")(61,"b")(62,"b")(63,"b"),e.qZA()(),e.N_p(),e.qZA(),e.TgZ(64,"div",10),e._UZ(65,"input",29),e.qZA()()(),e.TgZ(66,"div",30)(67,"cd-form-button-panel",31),e.NdJ("submitActionEvent",function(){return o.submit()}),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(6),e.Q6J("formGroup",o.multisiteMigrateForm),e.xp6(8),e.Q6J("ngIf",o.multisiteMigrateForm.showError("realmName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteMigrateForm.showError("realmName",i,"uniqueName")),e.xp6(6),e.Q6J("ngIf",o.multisiteMigrateForm.showError("zonegroupName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteMigrateForm.showError("zonegroupName",i,"uniqueName")),e.xp6(6),e.Q6J("ngIf",o.multisiteMigrateForm.showError("zonegroup_endpoints",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteMigrateForm.showError("zonegroup_endpoints",i,"endpoint")),e.xp6(6),e.Q6J("ngIf",o.multisiteMigrateForm.showError("zoneName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteMigrateForm.showError("zoneName",i,"uniqueName")),e.xp6(6),e.Q6J("ngIf",o.multisiteMigrateForm.showError("zone_endpoints",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteMigrateForm.showError("zone_endpoints",i,"endpoint")),e.xp6(24),e.Q6J("submitText",o.actionLabels.MIGRATE)("form",o.multisiteMigrateForm)}},dependencies:[T.O5,j.S,X.z,B.p,k.o,q.b,z.P,H.V,a._Y,a.Fj,a.JJ,a.JL,a.sg,a.u]}),t})();var G_=c(80842),Re=c(34501);function Ms(t,n){if(1&t&&(e.TgZ(0,"strong",21),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.xp6(1),e.Oqu(_)}}function Ss(t,n){1&t&&(e.TgZ(0,"div",22)(1,"cd-alert-panel",23),e.SDv(2,24),e.qZA()())}function Cs(t,n){if(1&t){const _=e.EpF();e.ynx(0),e.TgZ(1,"label",10),e.tHW(2,11),e._UZ(3,"strong"),e.N_p(),e.qZA(),e.TgZ(4,"label",12),e.SDv(5,13),e.qZA(),e.YNc(6,Ms,2,1,"strong",14),e.TgZ(7,"div",15)(8,"div",16)(9,"input",17),e.NdJ("change",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.showDangerText())}),e.qZA(),e.TgZ(10,"label",18),e.SDv(11,19),e.qZA()(),e.YNc(12,Ss,3,0,"div",20),e.qZA(),e.BQk()}if(2&t){const _=e.oxw();e.xp6(3),e.pQV(null==_.zone?null:_.zone.name),e.QtT(2),e.xp6(3),e.Q6J("ngForOf",_.includedPools),e.xp6(6),e.Q6J("ngIf",_.displayText)}}let Os=(()=>{class t{constructor(_,o,i,s,l){this.activeModal=_,this.actionLabels=o,this.notificationService=i,this.rgwZoneService=s,this.poolService=l,this.displayText=!1,this.includedPools=new Set,this.createForm()}ngOnInit(){this.zoneData$=this.rgwZoneService.get(this.zone),this.poolList$=this.poolService.getList()}ngAfterViewInit(){this.updateIncludedPools()}createForm(){this.zoneForm=new V.d({deletePools:new a.p4(!1)})}submit(){this.rgwZoneService.delete(this.zone.name,this.zoneForm.value.deletePools,this.includedPools,this.zone.parent).subscribe(()=>{this.notificationService.show(w.k.success,"Zone: '" + this.zone.name + "' deleted successfully"),this.activeModal.close()},()=>{this.zoneForm.setErrors({cdSubmitButton:!0})})}showDangerText(){this.displayText=!this.displayText}updateIncludedPools(){!this.zoneData$||!this.poolList$||this.zoneData$.subscribe(_=>{this.poolList$.subscribe(o=>{for(const i of o)for(const s of Object.values(_))if("string"==typeof s&&s.includes(i.pool_name))this.includedPools.add(i.pool_name);else if(Array.isArray(s)&&s[0].val)for(const l of s){const r=l.val;r.storage_classes.STANDARD.data_pool===i.pool_name&&this.includedPools.add(r.storage_classes.STANDARD.data_pool),r.data_extra_pool===i.pool_name&&this.includedPools.add(r.data_extra_pool),r.index_pool===i.pool_name&&this.includedPools.add(r.index_pool)}})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(I.p4),e.Y36(Y.g),e.Y36(ue.g),e.Y36(G_.q))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-multisite-zone-deletion-form"]],decls:12,vars:6,consts:function(){let n,_,o,i,s,l;return n="Delete Zone",_=" This will delete your " + "\ufffd#8\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#8\ufffd" + " Zone. ",o=" Do you want to delete the associated pools with the " + "\ufffd#3\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#3\ufffd" + " Zone?",i=" This will delete the following pools and any data stored in these pools:",s="Yes, I want to delete the pools.",l=" This will delete all the data in the pools! ",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","zoneForm","novalidate","",3,"formGroup"],[1,"modal-body","ms-4"],_,[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"mt-3"],o,[1,"mb-4"],i,["class","block",4,"ngFor","ngForOf"],[1,"form-group"],[1,"custom-control","custom-checkbox","mt-2"],["type","checkbox","name","deletePools","id","deletePools","formControlName","deletePools",1,"custom-control-input",3,"change"],["for","deletePools",1,"custom-control-label"],s,["class","me-4",4,"ngIf"],[1,"block"],[1,"me-4"],["type","danger"],l]},template:function(_,o){1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4)(5,"div",5)(6,"label"),e.tHW(7,6),e._UZ(8,"strong"),e.N_p(),e.qZA(),e.YNc(9,Cs,13,3,"ng-container",7),e.qZA(),e.TgZ(10,"div",8)(11,"cd-form-button-panel",9),e.NdJ("submitActionEvent",function(){return o.submit()}),e.qZA()()(),e.BQk(),e.qZA()),2&_&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.zoneForm),e.xp6(4),e.pQV(null==o.zone?null:o.zone.name),e.QtT(7),e.xp6(1),e.Q6J("ngIf",o.includedPools.size),e.xp6(2),e.Q6J("form",o.zoneForm)("submitText",o.actionLabels.DELETE))},dependencies:[T.sg,T.O5,X.z,Re.G,B.p,k.o,q.b,z.P,H.V,a._Y,a.Wl,a.JJ,a.JL,a.sg,a.u],styles:[".block[_ngcontent-%COMP%]{display:block}#scroll[_ngcontent-%COMP%]{height:100%;max-height:10rem;overflow:auto}"]}),t})();function Fs(t,n){1&t&&(e.ynx(0),e.TgZ(1,"label"),e.SDv(2,21),e.qZA(),e.BQk())}function Ps(t,n){if(1&t&&(e.TgZ(0,"strong",22),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.xp6(1),e.Oqu(_)}}function Ns(t,n){if(1&t&&(e.TgZ(0,"strong",22),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.xp6(1),e.Oqu(_)}}function Gs(t,n){if(1&t&&(e.ynx(0),e.TgZ(1,"strong",13),e._uU(2,"Pools:"),e.qZA(),e.TgZ(3,"div",23),e.YNc(4,Ns,2,1,"strong",15),e.qZA(),e.BQk()),2&t){const _=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",_.includedPools)}}function As(t,n){1&t&&(e.ynx(0),e.TgZ(1,"label",24),e.SDv(2,25),e.qZA(),e.BQk())}function Is(t,n){1&t&&(e.TgZ(0,"div",26)(1,"cd-alert-panel",27),e.SDv(2,28),e.qZA()())}function bs(t,n){if(1&t){const _=e.EpF();e.ynx(0),e.TgZ(1,"label",11),e.tHW(2,12),e._UZ(3,"strong"),e.N_p(),e.qZA(),e.YNc(4,Fs,3,0,"ng-container",7),e.TgZ(5,"strong",13),e._uU(6,"Zones:"),e.qZA(),e.TgZ(7,"div",14),e.YNc(8,Ps,2,1,"strong",15),e.qZA(),e.YNc(9,Gs,5,1,"ng-container",7),e.TgZ(10,"div",16)(11,"div",17)(12,"input",18),e.NdJ("change",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.showDangerText())}),e.qZA(),e.YNc(13,As,3,0,"ng-container",19),e.qZA(),e.YNc(14,Is,3,0,"div",20),e.qZA(),e.BQk()}if(2&t){const _=e.oxw(),o=e.MAs(13);e.xp6(3),e.pQV(null==_.zonegroup?null:_.zonegroup.name),e.QtT(2),e.xp6(1),e.Q6J("ngIf",_.includedPools.size>0),e.xp6(4),e.Q6J("ngForOf",_.zonesList),e.xp6(1),e.Q6J("ngIf",_.includedPools.size>0),e.xp6(4),e.Q6J("ngIf",_.includedPools.size>0)("ngIfElse",o),e.xp6(1),e.Q6J("ngIf",_.displayText)}}function hs(t,n){1&t&&(e.TgZ(0,"label",24),e.SDv(1,29),e.qZA())}let Ls=(()=>{class t{constructor(_,o,i,s,l,r){this.activeModal=_,this.actionLabels=o,this.notificationService=i,this.rgwZonegroupService=s,this.poolService=l,this.rgwZoneService=r,this.zonesPools=[],this.zonesList=[],this.displayText=!1,this.includedPools=new Set,this.createForm()}ngOnInit(){this.zonegroupData$=this.rgwZonegroupService.get(this.zonegroup),this.poolList$=this.poolService.getList()}ngAfterViewInit(){this.updateIncludedPools()}createForm(){this.zonegroupForm=new V.d({deletePools:new a.p4(!1)})}submit(){this.rgwZonegroupService.delete(this.zonegroup.name,this.zonegroupForm.value.deletePools,this.includedPools).subscribe(()=>{this.notificationService.show(w.k.success,"Zone: '" + this.zonegroup.name + "' deleted successfully"),this.activeModal.close()})}showDangerText(){this.includedPools.size>0&&(this.displayText=!this.displayText)}updateIncludedPools(){!this.zonegroupData$||!this.poolList$||this.zonegroupData$.subscribe(_=>{for(const o of _.zones)this.zonesList.push(o.name),this.rgwZoneService.get(o).subscribe(i=>{this.poolList$.subscribe(s=>{for(const l of Object.values(i))for(const r of s)if("string"==typeof l&&l.includes(r.pool_name))this.includedPools.add(r.pool_name);else if(Array.isArray(l)&&l[0].val)for(const d of l){const u=d.val;u.storage_classes.STANDARD.data_pool===r.pool_name&&this.includedPools.add(u.storage_classes.STANDARD.data_pool),u.data_extra_pool===r.pool_name&&this.includedPools.add(u.data_extra_pool),u.index_pool===r.pool_name&&this.includedPools.add(u.index_pool)}})})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(I.p4),e.Y36(Y.g),e.Y36(ge.K),e.Y36(G_.q),e.Y36(ue.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-multisite-zonegroup-deletion-form"]],decls:14,vars:6,consts:function(){let n,_,o,i,s,l,r;return n="Delete Zone Group",_=" This will delete your " + "\ufffd#8\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#8\ufffd" + " Zone Group. ",o=" Do you want to delete the associated zones and pools with the " + "\ufffd#3\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#3\ufffd" + " Zone Group?",i=" This will delete the following:",s="Yes, I want to delete the zones and their pools.",l=" This will delete all the data in the pools! ",r="Yes, I want to delete the zones.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","zonegroupForm","novalidate","",3,"formGroup"],[1,"modal-body","ms-4"],_,[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["noPoolsConfirmation",""],[1,"mt-3"],o,[1,"mt-3","mb-2","h5","block"],["id","scroll"],["class","block",4,"ngFor","ngForOf"],[1,"form-group"],[1,"custom-control","custom-checkbox","mt-2"],["type","checkbox","name","deletePools","id","deletePools","formControlName","deletePools",1,"custom-control-input",3,"change"],[4,"ngIf","ngIfElse"],["class","me-4",4,"ngIf"],i,[1,"block"],["id","scroll",1,"mb-2"],["for","deletePools",1,"custom-control-label"],s,[1,"me-4"],["type","danger"],l,r]},template:function(_,o){1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4)(5,"div",5)(6,"label"),e.tHW(7,6),e._UZ(8,"strong"),e.N_p(),e.qZA(),e.YNc(9,bs,15,7,"ng-container",7),e.qZA(),e.TgZ(10,"div",8)(11,"cd-form-button-panel",9),e.NdJ("submitActionEvent",function(){return o.submit()}),e.qZA()()(),e.BQk(),e.qZA(),e.YNc(12,hs,2,0,"ng-template",null,10,e.W1O)),2&_&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.zonegroupForm),e.xp6(4),e.pQV(null==o.zonegroup?null:o.zonegroup.name),e.QtT(7),e.xp6(1),e.Q6J("ngIf",o.zonesList.length>0),e.xp6(2),e.Q6J("form",o.zonegroupForm)("submitText",o.actionLabels.DELETE))},dependencies:[T.sg,T.O5,X.z,Re.G,B.p,k.o,q.b,z.P,H.V,a._Y,a.Wl,a.JJ,a.JL,a.sg,a.u],styles:[".block[_ngcontent-%COMP%]{display:block}#scroll[_ngcontent-%COMP%]{height:100%;max-height:10rem;overflow:auto}"]}),t})();const Ws=function(t,n,_){return[t,n,_]};function $s(t,n){if(1&t&&(e.TgZ(0,"span",10),e._UZ(1,"i",11),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngClass",e.kEZ(1,Ws,_.icons.large3x,_.icons.spinner,_.icons.spin))}}function Zs(t,n){if(1&t&&(e.tHW(0,16,1),e.TgZ(1,"div"),e._UZ(2,"b"),e.qZA(),e.N_p()),2&t){const _=n.$implicit;e.xp6(2),e.pQV(_.realm)(_.token),e.QtT(0)}}function Ds(t,n){if(1&t&&(e.TgZ(0,"cd-alert-panel",15),e.tHW(1,16),e.YNc(2,Zs,3,2,"div",14),e.N_p(),e.qZA()),2&t){const _=e.oxw(2);e.xp6(2),e.Q6J("ngForOf",_.realms)}}function Us(t,n){1&t&&e._UZ(0,"hr")}function vs(t,n){if(1&t&&(e.TgZ(0,"div")(1,"div",17)(2,"label",18),e.SDv(3,19),e.qZA(),e.TgZ(4,"div",20),e._UZ(5,"input",21),e.qZA()(),e.TgZ(6,"div",17)(7,"label",22),e.SDv(8,23),e.qZA(),e.TgZ(9,"div",20),e._UZ(10,"input",24)(11,"cd-copy-2-clipboard-button",25),e.qZA(),e.YNc(12,Us,1,0,"hr",26),e.qZA()()),2&t){const _=n.$implicit,o=e.oxw(2);e.xp6(5),e.s9C("value",_.realm),e.xp6(5),e.s9C("value",_.token),e.xp6(1),e.s9C("source",_.token),e.Q6J("byId",!1),e.xp6(1),e.Q6J("ngIf",o.realms.length>1)}}function ys(t,n){if(1&t&&(e.TgZ(0,"div",12),e.YNc(1,Ds,3,1,"cd-alert-panel",13),e.YNc(2,vs,13,5,"div",14),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf",!_.tokenValid),e.xp6(1),e.Q6J("ngForOf",_.realms)}}let ws=(()=>{class t{constructor(_,o,i,s,l){this.activeModal=_,this.rgwRealmService=o,this.actionLabels=i,this.notificationService=s,this.changeDetectorRef=l,this.tokenValid=!1,this.loading=!0,this.icons=$.P,this.createForm()}createForm(){this.exportTokenForm=new V.d({})}onSubmit(){this.activeModal.close()}ngOnInit(){this.rgwRealmService.getRealmTokens().subscribe(_=>{this.loading=!1,this.realms=_;var o=new RegExp("^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$");this.realms.forEach(i=>{this.tokenValid=!!o.test(i.token)})})}ngAfterViewChecked(){this.changeDetectorRef.detectChanges()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(de.y),e.Y36(I.p4),e.Y36(Y.g),e.Y36(e.sBO))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-multisite-export"]],decls:10,vars:4,consts:function(){let n,_,o,i;return n="Export Multi-Site Realm Token",_="" + "\ufffd*2:1\ufffd\ufffd#1:1\ufffd" + "" + "\ufffd#2:1\ufffd" + "" + "\ufffd0:1\ufffd" + "" + "\ufffd/#2:1\ufffd" + " - " + "\ufffd1:1\ufffd" + " " + "\ufffd/#1:1\ufffd\ufffd/*2:1\ufffd" + "",o="Realm Name ",i="Token ",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","exportTokenForm",3,"formGroup"],["frm","ngForm"],["class","d-flex justify-content-center",4,"ngIf"],["class","modal-body",4,"ngIf"],[1,"modal-footer"],["aria-label","Close",1,"m-2","float-end",3,"backAction"],[1,"d-flex","justify-content-center"],[3,"ngClass"],[1,"modal-body"],["type","warning","class","mx-3",4,"ngIf"],[4,"ngFor","ngForOf"],["type","warning",1,"mx-3"],_,[1,"form-group","row"],["for","realmName",1,"cd-col-form-label"],o,[1,"cd-col-form-input"],["id","realmName","name","realmName","type","text","readonly","",3,"value"],["for","token",1,"cd-col-form-label"],i,["id","realmToken","name","realmToken","type","text","readonly","",1,"me-2","mb-4",3,"value"],[3,"source","byId"],[4,"ngIf"]]},template:function(_,o){1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5),e.YNc(6,$s,2,5,"span",6),e.YNc(7,ys,3,2,"div",7),e.TgZ(8,"div",8)(9,"cd-back-button",9),e.NdJ("backAction",function(){return o.activeModal.close()}),e.qZA()()(),e.BQk(),e.qZA()),2&_&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.exportTokenForm),e.xp6(2),e.Q6J("ngIf",o.loading),e.xp6(1),e.Q6J("ngIf",!o.loading))},dependencies:[T.mk,T.sg,T.O5,M_.W,X.z,Re.G,pe.s,k.o,z.P,H.V,a._Y,a.JL,a.sg]}),t})();var xs=c(7022),ks=c(22120),zs=c(48168),qs=c(14745),A_=c(79765),Hs=c(66682),Xs=c(54395),Bs=c(87519),Qs=c(45435),Ys=c(88002),I_=c(60192);function Js(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function Ks(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function Vs(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,32),e.qZA())}function js(t,n){1&t&&(e.TgZ(0,"div",9)(1,"label",33),e.SDv(2,34),e.qZA(),e.TgZ(3,"div",12)(4,"select",35)(5,"option",36),e.SDv(6,37),e.qZA(),e.TgZ(7,"option",38),e.SDv(8,39),e.qZA()()()())}function ea(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,43),e.qZA())}function _a(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",9)(1,"label",40),e.SDv(2,41),e.qZA(),e.TgZ(3,"div",12)(4,"input",42),e.NdJ("focus",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.labelFocus.next(i.target.value))})("click",function(i){e.CHM(_);const s=e.oxw();return e.KtG(s.labelClick.next(i.target.value))}),e.qZA(),e.YNc(5,ea,2,0,"span",14),e.qZA()()}if(2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(4),e.Q6J("ngbTypeahead",_.searchLabels),e.xp6(1),e.Q6J("ngIf",_.importTokenForm.showError("label",o,"required"))}}function ta(t,n){if(1&t&&(e.TgZ(0,"div",9)(1,"label",44),e.SDv(2,45),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"cd-select-badges",46),e.qZA()()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("data",_.importTokenForm.controls.hosts.value)("options",_.hosts.options)("messages",_.hosts.messages)}}function oa(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,51),e.qZA())}function na(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,52),e.qZA())}function ia(t,n){if(1&t&&(e.TgZ(0,"div",9)(1,"label",47)(2,"span"),e.SDv(3,48),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,49),e.qZA()(),e.TgZ(6,"div",12),e._UZ(7,"input",50),e.YNc(8,oa,2,0,"span",14),e.YNc(9,na,2,0,"span",14),e.qZA()()),2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(8),e.Q6J("ngIf",_.importTokenForm.showError("count",o,"min")),e.xp6(1),e.Q6J("ngIf",_.importTokenForm.showError("count",o,"pattern"))}}function sa(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,56),e.qZA())}function aa(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,57),e.qZA())}function la(t,n){1&t&&(e.TgZ(0,"span",29),e.SDv(1,58),e.qZA())}function ra(t,n){if(1&t&&(e.ynx(0),e.TgZ(1,"div",9)(2,"label",53),e.SDv(3,54),e.qZA(),e.TgZ(4,"div",12),e._UZ(5,"input",55),e.YNc(6,sa,2,0,"span",14),e.YNc(7,aa,2,0,"span",14),e.YNc(8,la,2,0,"span",14),e.qZA()(),e.BQk()),2&t){const _=e.oxw(),o=e.MAs(5);e.xp6(6),e.Q6J("ngIf",_.importTokenForm.showError("rgw_frontend_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",_.importTokenForm.showError("rgw_frontend_port",o,"min")),e.xp6(1),e.Q6J("ngIf",_.importTokenForm.showError("rgw_frontend_port",o,"max"))}}let ca=(()=>{class t{constructor(_,o,i,s,l){this.activeModal=_,this.hostService=o,this.rgwRealmService=i,this.actionLabels=s,this.notificationService=l,this.endpoints=/^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{2,4}$/,this.ipv4Rgx=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,this.ipv6Rgx=/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i,this.multisiteInfo=[],this.zoneList=[],this.labelClick=new A_.xQ,this.labelFocus=new A_.xQ,this.searchLabels=r=>(0,Hs.T)(r.pipe((0,Xs.b)(200),(0,Bs.x)()),this.labelFocus,this.labelClick.pipe((0,Qs.h)(()=>!this.typeahead.isPopupOpen()))).pipe((0,Ys.U)(d=>this.labels.filter(u=>u.toLowerCase().indexOf(d.toLowerCase())>-1).slice(0,10))),this.hosts={options:[],messages:new xs.a({empty:"There are no hosts.",filter:"Filter hosts"})},this.createForm()}ngOnInit(){this.zoneList=void 0!==this.multisiteInfo[2]&&this.multisiteInfo[2].hasOwnProperty("zones")?this.multisiteInfo[2].zones:[],this.zoneNames=this.zoneList.map(o=>o.name);const _=new zs.E(()=>{});this.hostService.list(_.toParams(),"false").subscribe(o=>{const i=[];E().forEach(o,s=>{if(E().get(s,"sources.orchestrator",!1)){const l=new qs.$(!1,E().get(s,"hostname"),"");i.push(l)}}),this.hosts.options=[...i]}),this.hostService.getLabels().subscribe(o=>{this.labels=o})}createForm(){this.importTokenForm=new V.d({realmToken:new a.NI("",{validators:[a.kI.required]}),zoneName:new a.NI(null,{validators:[a.kI.required,m.h.custom("uniqueName",_=>this.zoneNames&&-1!==this.zoneNames.indexOf(_))]}),rgw_frontend_port:new a.NI(null,{validators:[a.kI.required,a.kI.pattern("^[0-9]*$")]}),placement:new a.NI("hosts"),label:new a.NI(null,[m.h.requiredIf({placement:"label",unmanaged:!1})]),hosts:new a.NI([]),count:new a.NI(null,[m.h.number(!1)]),unmanaged:new a.NI(!1)})}onSubmit(){const _=this.importTokenForm.value,o={placement:{}};if(!_.unmanaged){switch(_.placement){case"hosts":_.hosts.length>0&&(o.placement.hosts=_.hosts);break;case"label":o.placement.label=_.label}E().isNumber(_.count)&&_.count>0&&(o.placement.count=_.count)}this.rgwRealmService.importRealmToken(_.realmToken,_.zoneName,_.rgw_frontend_port,o).subscribe(()=>{this.notificationService.show(w.k.success,"Realm token import successfull"),this.activeModal.close()},()=>{this.importTokenForm.setErrors({cdSubmitButton:!0})})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(ks.x),e.Y36(de.y),e.Y36(I.p4),e.Y36(Y.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-multisite-import"]],viewQuery:function(_,o){if(1&_&&e.Gf(G.dR,5),2&_){let i;e.iGM(i=e.CRH())&&(o.typeahead=i.first)}},decls:47,vars:12,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L,S,W,C,Z,D,U,v,y;return n="Import Multi-Site Token",_="Zone Details",o="Token ",i="Secondary Zone Name",s="Service Details",l="Unmanaged",r="If set to true, the orchestrator will not start nor stop any daemon associated with this service. Placement and all other properties will be ignored.",d="This field is required.",u="This field is required.",R="The chosen zone name is already in use.",O="Placement",F="Hosts",b="Label",h="Label",M="This field is required.",L="Hosts",S="Count",W="Only that number of daemons will be created.",C="The value must be at least 1.",Z="The entered value needs to be a number.",D="Port",U="The entered value needs to be a number.",v="The value must be at least 1.",y="The value cannot exceed 65535.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","importTokenForm",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],["type","info","spacingClass","mb-3"],_,[1,"form-group","row"],["for","realmToken",1,"cd-col-form-label","required"],o,[1,"cd-col-form-input"],["id","realmToken","name","realmToken","type","text","formControlName","realmToken",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","zoneName",1,"cd-col-form-label","required"],i,["type","text","placeholder","Zone name...","id","zoneName","name","zoneName","formControlName","zoneName",1,"form-control"],s,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","unmanaged","type","checkbox","formControlName","unmanaged",1,"custom-control-input"],["for","unmanaged",1,"custom-control-label"],l,r,["class","form-group row",4,"ngIf"],[4,"ngIf"],[1,"modal-footer"],[3,"submitText","form","submitActionEvent"],[1,"invalid-feedback"],d,u,R,["for","placement",1,"cd-col-form-label"],O,["id","placement","formControlName","placement",1,"form-select"],["value","hosts"],F,["value","label"],b,["for","label",1,"cd-col-form-label"],h,["id","label","type","text","formControlName","label",1,"form-control",3,"ngbTypeahead","focus","click"],M,["for","hosts",1,"cd-col-form-label"],L,["id","hosts",3,"data","options","messages"],["for","count",1,"cd-col-form-label"],S,W,["id","count","type","number","formControlName","count","min","1",1,"form-control"],C,Z,["for","rgw_frontend_port",1,"cd-col-form-label"],D,["id","rgw_frontend_port","type","number","formControlName","rgw_frontend_port","min","1","max","65535",1,"form-control"],U,v,y]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"cd-alert-panel",7)(8,"ul")(9,"li"),e._uU(10,"This feature allows you to configure a connection between your primary and secondary Ceph clusters for data replication. By importing a token, you establish a link between the clusters, enabling data synchronization."),e.qZA(),e.TgZ(11,"li"),e._uU(12,"To obtain the token, generate it from your primary Ceph cluster. This token includes encoded information about the primary cluster's endpoint, access key, and secret key."),e.qZA(),e.TgZ(13,"li"),e._uU(14,"The secondary zone represents the destination cluster where your data will be replicated."),e.qZA()()(),e.TgZ(15,"legend"),e.SDv(16,8),e.qZA(),e.TgZ(17,"div",9)(18,"label",10),e.SDv(19,11),e.qZA(),e.TgZ(20,"div",12),e._UZ(21,"input",13),e.YNc(22,Js,2,0,"span",14),e.qZA()(),e.TgZ(23,"div",9)(24,"label",15),e.SDv(25,16),e.qZA(),e.TgZ(26,"div",12),e._UZ(27,"input",17),e.YNc(28,Ks,2,0,"span",14),e.YNc(29,Vs,2,0,"span",14),e.qZA()(),e.TgZ(30,"legend"),e.SDv(31,18),e.qZA(),e.TgZ(32,"div",9)(33,"div",19)(34,"div",20),e._UZ(35,"input",21),e.TgZ(36,"label",22),e.SDv(37,23),e.qZA(),e.TgZ(38,"cd-helper"),e.SDv(39,24),e.qZA()()()(),e.YNc(40,js,9,0,"div",25),e.YNc(41,_a,6,2,"div",25),e.YNc(42,ta,5,3,"div",25),e.YNc(43,ia,10,2,"div",25),e.YNc(44,ra,9,3,"ng-container",26),e.qZA(),e.TgZ(45,"div",27)(46,"cd-form-button-panel",28),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.importTokenForm),e.xp6(18),e.Q6J("ngIf",o.importTokenForm.showError("realmToken",i,"required")),e.xp6(6),e.Q6J("ngIf",o.importTokenForm.showError("zoneName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.importTokenForm.showError("zoneName",i,"uniqueName")),e.xp6(11),e.Q6J("ngIf",!o.importTokenForm.controls.unmanaged.value),e.xp6(1),e.Q6J("ngIf",!o.importTokenForm.controls.unmanaged.value&&"label"===o.importTokenForm.controls.placement.value),e.xp6(1),e.Q6J("ngIf",!o.importTokenForm.controls.unmanaged.value&&"hosts"===o.importTokenForm.controls.placement.value),e.xp6(1),e.Q6J("ngIf",!o.importTokenForm.controls.unmanaged.value),e.xp6(1),e.Q6J("ngIf",!o.importTokenForm.controls.unmanaged.value),e.xp6(2),e.Q6J("submitText",o.actionLabels.IMPORT)("form",o.importTokenForm)}},dependencies:[T.O5,j.S,I_.m,X.z,Re.G,B.p,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.wV,a.Wl,a.EJ,a.JJ,a.JL,a.qQ,a.Fd,a.sg,a.u]}),t})();var da=c(72625);function ua(t,n){1&t&&(e.TgZ(0,"span",20),e.SDv(1,21),e.qZA())}function ga(t,n){1&t&&(e.TgZ(0,"span",20),e.SDv(1,22),e.qZA())}function Ra(t,n){1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.SDv(2,23),e.qZA()())}function Ta(t,n){if(1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,24),e._UZ(3,"a",25),e.N_p(),e.qZA()()),2&t){const _=e.oxw();e.xp6(3),e.s9C("href",_.docUrl,e.LSH)}}function Ea(t,n){1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.SDv(2,26),e.qZA()())}let fa=(()=>{class t{constructor(_,o,i,s,l){this.activeModal=_,this.actionLabels=o,this.rgwRealmService=i,this.notificationService=s,this.docService=l,this.editing=!1,this.multisiteInfo=[],this.realmList=[],this.zonegroupList=[],this.defaultRealmDisabled=!1,this.action=this.editing?this.actionLabels.EDIT+this.resource:this.actionLabels.CREATE+this.resource,this.createForm()}createForm(){this.multisiteRealmForm=new V.d({realmName:new a.p4(null,{validators:[a.kI.required,m.h.custom("uniqueName",_=>"create"===this.action&&this.realmNames&&-1!==this.realmNames.indexOf(_))]}),default_realm:new a.p4(!1)})}ngOnInit(){this.realmList=void 0!==this.multisiteInfo[0]&&this.multisiteInfo[0].hasOwnProperty("realms")?this.multisiteInfo[0].realms:[],this.realmNames=this.realmList.map(_=>_.name),"edit"===this.action&&(this.zonegroupList=void 0!==this.multisiteInfo[1]&&this.multisiteInfo[1].hasOwnProperty("zonegroups")?this.multisiteInfo[1].zonegroups:[],this.multisiteRealmForm.get("realmName").setValue(this.info.data.name),this.multisiteRealmForm.get("default_realm").setValue(this.info.data.is_default),this.info.data.is_default&&this.multisiteRealmForm.get("default_realm").disable()),this.zonegroupList.forEach(_=>{!0===_.is_master&&_.realm_id===this.info.data.id&&(this.isMaster=!0)}),this.defaultsInfo&&null!==this.defaultsInfo.defaultRealmName&&(this.multisiteRealmForm.get("default_realm").disable(),this.defaultRealmDisabled=!0),this.docUrl=this.docService.urlGenerator("rgw-multisite")}submit(){const _=this.multisiteRealmForm.getRawValue();this.realm=new x.L6,"create"===this.action?(this.realm.name=_.realmName,this.rgwRealmService.create(this.realm,_.default_realm).subscribe(()=>{this.notificationService.show(w.k.success,"Realm: '" + _.realmName + "' created successfully"),this.activeModal.close()},()=>{this.multisiteRealmForm.setErrors({cdSubmitButton:!0})})):"edit"===this.action&&(this.realm.name=this.info.data.name,this.newRealmName=_.realmName,this.rgwRealmService.update(this.realm,_.default_realm,this.newRealmName).subscribe(()=>{this.notificationService.show(w.k.success,"Realm: '" + _.realmName + "' updated successfully"),this.activeModal.close()},()=>{this.multisiteRealmForm.setErrors({cdSubmitButton:!0})}))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(I.p4),e.Y36(de.y),e.Y36(Y.g),e.Y36(da.R))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-multisite-realm-form"]],decls:27,vars:20,consts:function(){let n,_,o,i,s,l,r,d;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Realm Name",o="Default",i="This field is required.",s="The chosen realm name is already in use.",l="You cannot unset the default flag.",r="Please consult the " + "\ufffd#3\ufffd" + "documentation" + "\ufffd/#3\ufffd" + " to follow the failover mechanism",d="Default realm already exists.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","multisiteRealmForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","realmName",1,"cd-col-form-label","required"],_,[1,"cd-col-form-input"],["type","text","placeholder","Realm name...","id","realmName","name","realmName","formControlName","realmName",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"custom-control","custom-checkbox"],["id","default_realm","name","default_realm","formControlName","default_realm","type","checkbox",1,"form-check-input"],["for","default_realm",1,"form-check-label"],o,[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],i,s,l,r,[3,"href"],d]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.YNc(14,ua,2,0,"span",12),e.YNc(15,ga,2,0,"span",12),e.TgZ(16,"div",13),e._UZ(17,"input",14),e.TgZ(18,"label",15),e.SDv(19,16),e.qZA(),e.YNc(20,Ra,3,0,"cd-helper",17),e.YNc(21,Ta,4,1,"cd-helper",17),e.YNc(22,Ea,3,0,"cd-helper",17),e.qZA()()()(),e.TgZ(23,"div",18)(24,"cd-form-button-panel",19),e.NdJ("submitActionEvent",function(){return o.submit()}),e.ALo(25,"titlecase"),e.ALo(26,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,12,o.action))(e.lcZ(4,14,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.multisiteRealmForm),e.xp6(8),e.Q6J("ngIf",o.multisiteRealmForm.showError("realmName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteRealmForm.showError("realmName",i,"uniqueName")),e.xp6(2),e.uIk("disabled","edit"===o.action||null),e.xp6(3),e.Q6J("ngIf","edit"===o.action&&o.info.data.is_default),e.xp6(1),e.Q6J("ngIf","edit"===o.action&&!o.info.data.is_default),e.xp6(1),e.Q6J("ngIf",o.defaultRealmDisabled&&"create"===o.action),e.xp6(2),e.Q6J("form",o.multisiteRealmForm)("submitText",e.lcZ(25,16,o.action)+" "+e.lcZ(26,18,o.resource))}},dependencies:[T.O5,j.S,X.z,B.p,k.o,q.b,z.P,H.V,a._Y,a.Fj,a.Wl,a.JJ,a.JL,a.sg,a.u,T.rS,_e.m]}),t})();function pa(t,n){if(1&t&&(e.TgZ(0,"option",36),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw();e.Q6J("value",_.name)("selected",_.name===o.multisiteZoneForm.getValue("selectedZonegroup")),e.xp6(1),e.hij(" ",_.name," ")}}function ma(t,n){1&t&&(e.TgZ(0,"span",37),e.SDv(1,38),e.qZA())}function Ma(t,n){1&t&&(e.TgZ(0,"span",37),e.SDv(1,39),e.qZA())}function Sa(t,n){1&t&&(e.TgZ(0,"span")(1,"cd-helper"),e.SDv(2,40),e.qZA()())}function Ca(t,n){1&t&&(e.TgZ(0,"span")(1,"cd-helper"),e.SDv(2,41),e.qZA()())}function Oa(t,n){if(1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,42),e._UZ(3,"a",43),e.N_p(),e.qZA()()),2&t){const _=e.oxw();e.xp6(3),e.s9C("href",_.docUrl,e.LSH)}}function Fa(t,n){1&t&&(e.TgZ(0,"span")(1,"cd-helper"),e.SDv(2,44),e.qZA()())}function Pa(t,n){1&t&&(e.TgZ(0,"span")(1,"cd-helper"),e.SDv(2,45),e.qZA()())}function Na(t,n){if(1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,46),e._UZ(3,"a",43),e.N_p(),e.qZA()()),2&t){const _=e.oxw();e.xp6(3),e.s9C("href",_.docUrl,e.LSH)}}function Ga(t,n){1&t&&(e.TgZ(0,"span",37),e.SDv(1,47),e.qZA())}function Aa(t,n){1&t&&(e.TgZ(0,"span",37),e.SDv(1,48),e.qZA())}function Ia(t,n){if(1&t&&(e.TgZ(0,"option",36),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(3);e.Q6J("value",_.name)("selected",_.name===o.multisiteZoneForm.getValue("placementTarget")),e.xp6(1),e.hij(" ",_.name," ")}}function ba(t,n){if(1&t&&(e.TgZ(0,"option",36),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(3);e.Q6J("value",_.poolname)("selected",_.poolname===o.multisiteZoneForm.getValue("placementDataPool")),e.xp6(1),e.hij(" ",_.poolname," ")}}function ha(t,n){if(1&t&&(e.TgZ(0,"option",36),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(3);e.Q6J("value",_.poolname)("selected",_.poolname===o.multisiteZoneForm.getValue("placementIndexPool")),e.xp6(1),e.hij(" ",_.poolname," ")}}function La(t,n){if(1&t&&(e.TgZ(0,"option",36),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(3);e.Q6J("value",_.poolname)("selected",_.poolname===o.multisiteZoneForm.getValue("placementDataExtraPool")),e.xp6(1),e.hij(" ",_.poolname," ")}}function Wa(t,n){if(1&t&&(e.TgZ(0,"option",71),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_.value),e.xp6(1),e.hij(" ",_.value," ")}}function $a(t,n){if(1&t&&(e.TgZ(0,"option",36),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(3);e.Q6J("value",_.poolname)("selected",_.poolname===o.multisiteZoneForm.getValue("storageDataPool")),e.xp6(1),e.hij(" ",_.poolname," ")}}function Za(t,n){if(1&t&&(e.TgZ(0,"option",71),e._uU(1),e.qZA()),2&t){const _=n.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Da(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"legend"),e._uU(2,"Placement Targets"),e.qZA(),e.TgZ(3,"div",7)(4,"label",49),e.SDv(5,50),e.qZA(),e.TgZ(6,"div",10)(7,"select",51),e.NdJ("change",function(i){e.CHM(_);const s=e.oxw(2);return e.KtG(s.getZonePlacementData(i.target.value))}),e.YNc(8,Ia,2,3,"option",12),e.qZA()()(),e.TgZ(9,"div",7)(10,"label",52),e.SDv(11,53),e.qZA(),e.TgZ(12,"div",10)(13,"select",54),e.YNc(14,ba,2,3,"option",12),e.qZA()()(),e.TgZ(15,"div",7)(16,"label",55),e.SDv(17,56),e.qZA(),e.TgZ(18,"div",10)(19,"select",57),e.YNc(20,ha,2,3,"option",12),e.qZA()()(),e.TgZ(21,"div",7)(22,"label",58),e.SDv(23,59),e.qZA(),e.TgZ(24,"div",10)(25,"select",60),e.YNc(26,La,2,3,"option",12),e.qZA()()(),e.TgZ(27,"div")(28,"legend"),e._uU(29,"Storage Classes"),e.qZA(),e.TgZ(30,"div",7)(31,"label",61),e.SDv(32,62),e.qZA(),e.TgZ(33,"div",10)(34,"select",63),e.NdJ("change",function(i){e.CHM(_);const s=e.oxw(2);return e.KtG(s.getStorageClassData(i.target.value))}),e.YNc(35,Wa,2,2,"option",64),e.qZA()()(),e.TgZ(36,"div",7)(37,"label",65),e.SDv(38,66),e.qZA(),e.TgZ(39,"div",10)(40,"select",67),e.YNc(41,$a,2,3,"option",12),e.qZA()()(),e.TgZ(42,"div",7)(43,"label",68),e.SDv(44,69),e.qZA(),e.TgZ(45,"div",10)(46,"select",70),e.YNc(47,Za,2,2,"option",64),e.qZA()()()()()}if(2&t){const _=e.oxw(2);e.xp6(8),e.Q6J("ngForOf",_.placementTargets),e.xp6(5),e.Q6J("value",_.placementDataPool),e.xp6(1),e.Q6J("ngForOf",_.poolList),e.xp6(6),e.Q6J("ngForOf",_.poolList),e.xp6(6),e.Q6J("ngForOf",_.poolList),e.xp6(9),e.Q6J("ngForOf",_.storageClassList),e.xp6(6),e.Q6J("ngForOf",_.poolList),e.xp6(6),e.Q6J("ngForOf",_.compressionTypes)}}function Ua(t,n){if(1&t&&(e.TgZ(0,"div",7),e.YNc(1,Da,48,8,"div",21),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngIf","edit"===_.action)}}let va=(()=>{class t{constructor(_,o,i,s,l,r,d,u){this.activeModal=_,this.actionLabels=o,this.rgwMultisiteService=i,this.rgwZoneService=s,this.rgwZoneGroupService=l,this.notificationService=r,this.rgwUserService=d,this.modalService=u,this.endpoints=/^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{2,4}$/,this.ipv4Rgx=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,this.ipv6Rgx=/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i,this.editing=!1,this.defaultsInfo=[],this.multisiteInfo=[],this.zonegroupList=[],this.zoneList=[],this.poolList=[],this.storageClassList=[],this.disableDefault=!1,this.disableMaster=!1,this.isMetadataSync=!1,this.syncStatusTimedOut=!1,this.createSystemUser=!1,this.compressionTypes=["lz4","zlib","snappy"],this.userListReady=!1,this.action=this.editing?this.actionLabels.EDIT+this.resource:this.actionLabels.CREATE+this.resource,this.createForm()}createForm(){this.multisiteZoneForm=new V.d({zoneName:new a.p4(null,{validators:[a.kI.required,m.h.custom("uniqueName",_=>"create"===this.action&&this.zoneNames&&-1!==this.zoneNames.indexOf(_))]}),default_zone:new a.p4(!1),master_zone:new a.p4(!1),selectedZonegroup:new a.p4(null),zone_endpoints:new a.p4(null,{validators:[m.h.custom("endpoint",_=>!(E().isEmpty(_)||(_.includes(",")?(_.split(",").forEach(o=>!this.endpoints.test(o)&&!this.ipv4Rgx.test(o)&&!this.ipv6Rgx.test(o)),1):this.endpoints.test(_)||this.ipv4Rgx.test(_)||this.ipv6Rgx.test(_)))),a.kI.required]}),access_key:new a.p4(null,a.kI.required),secret_key:new a.p4(null,a.kI.required),placementTarget:new a.p4(null),placementDataPool:new a.p4(""),placementIndexPool:new a.p4(null),placementDataExtraPool:new a.p4(null),storageClass:new a.p4(null),storageDataPool:new a.p4(null),storageCompression:new a.p4(null)})}onZoneGroupChange(_){let o=new x.iG;o.name=_,this.rgwZoneGroupService.get(o).subscribe(i=>{E().isEmpty(i.master_zone)?(this.multisiteZoneForm.get("master_zone").setValue(!0),this.multisiteZoneForm.get("master_zone").disable(),this.disableMaster=!1):!E().isEmpty(i.master_zone)&&"create"===this.action&&(this.multisiteZoneForm.get("master_zone").setValue(!1),this.multisiteZoneForm.get("master_zone").disable(),this.disableMaster=!0)}),this.multisiteZoneForm.getValue("selectedZonegroup")!==this.defaultsInfo.defaultZonegroupName&&(this.disableDefault=!0,this.multisiteZoneForm.get("default_zone").disable())}ngOnInit(){this.zonegroupList=void 0!==this.multisiteInfo[1]&&this.multisiteInfo[1].hasOwnProperty("zonegroups")?this.multisiteInfo[1].zonegroups:[],this.zoneList=void 0!==this.multisiteInfo[2]&&this.multisiteInfo[2].hasOwnProperty("zones")?this.multisiteInfo[2].zones:[],this.zoneNames=this.zoneList.map(_=>_.name),"create"===this.action&&void 0!==this.defaultsInfo.defaultZonegroupName&&(this.multisiteZoneForm.get("selectedZonegroup").setValue(this.defaultsInfo.defaultZonegroupName),this.onZoneGroupChange(this.defaultsInfo.defaultZonegroupName)),"edit"===this.action&&(this.placementTargets=this.info.parent?this.info.parent.data.placement_targets:[],this.rgwZoneService.getPoolNames().subscribe(o=>{this.poolList=o}),this.multisiteZoneForm.get("zoneName").setValue(this.info.data.name),this.multisiteZoneForm.get("selectedZonegroup").setValue(this.info.data.parent),this.multisiteZoneForm.get("default_zone").setValue(this.info.data.is_default),this.multisiteZoneForm.get("master_zone").setValue(this.info.data.is_master),this.multisiteZoneForm.get("zone_endpoints").setValue(this.info.data.endpoints.toString()),this.multisiteZoneForm.get("access_key").setValue(this.info.data.access_key),this.multisiteZoneForm.get("secret_key").setValue(this.info.data.secret_key),this.multisiteZoneForm.get("placementTarget").setValue(this.info.parent.data.default_placement),this.getZonePlacementData(this.multisiteZoneForm.getValue("placementTarget")),this.info.data.is_default&&(this.isDefaultZone=!0,this.multisiteZoneForm.get("default_zone").disable()),this.info.data.is_master&&(this.isMasterZone=!0,this.multisiteZoneForm.get("master_zone").disable()),(new x.jb).name=this.info.data.name,this.onZoneGroupChange(this.info.data.parent)),this.multisiteZoneForm.getValue("selectedZonegroup")!==this.defaultsInfo.defaultZonegroupName&&(this.disableDefault=!0,this.multisiteZoneForm.get("default_zone").disable())}getZonePlacementData(_){this.zone=new x.jb,this.zone.name=this.info.data.name,this.placementTargets&&this.placementTargets.forEach(o=>{o.name===_&&(this.storageClassList=Object.entries(o.storage_classes).map(([s,l])=>({key:s,value:l})))}),this.rgwZoneService.get(this.zone).subscribe(o=>{this.zoneInfo=o,this.zoneInfo&&this.zoneInfo.placement_pools&&this.zoneInfo.placement_pools.forEach(i=>{if(i.key===_){let s=i.val.storage_classes,l=s.STANDARD?s.STANDARD.data_pool:"",r=i.val.index_pool,d=i.val.data_extra_pool;this.poolList.push({poolname:l}),this.poolList.push({poolname:r}),this.poolList.push({poolname:d}),this.multisiteZoneForm.get("storageClass").setValue(this.storageClassList[0].value),this.multisiteZoneForm.get("storageDataPool").setValue(l),this.multisiteZoneForm.get("storageCompression").setValue(this.compressionTypes[0]),this.multisiteZoneForm.get("placementDataPool").setValue(l),this.multisiteZoneForm.get("placementIndexPool").setValue(r),this.multisiteZoneForm.get("placementDataExtraPool").setValue(d)}})})}getStorageClassData(_){let o=this.storageClassList.find(i=>i.value==_).value;this.poolList.push({poolname:o.data_pool}),this.multisiteZoneForm.get("storageDataPool").setValue(o.data_pool),this.multisiteZoneForm.get("storageCompression").setValue(o.compression_type)}submit(){const _=this.multisiteZoneForm.getRawValue();"create"===this.action?(this.zonegroup=new x.iG,this.zonegroup.name=_.selectedZonegroup,this.zone=new x.jb,this.zone.name=_.zoneName,this.zone.endpoints=_.zone_endpoints,this.zone.system_key=new x.VY,this.zone.system_key.access_key=_.access_key,this.zone.system_key.secret_key=_.secret_key,this.rgwZoneService.create(this.zone,this.zonegroup,_.default_zone,_.master_zone,this.zone.endpoints).subscribe(()=>{this.notificationService.show(w.k.success,"Zone: '" + _.zoneName + "' created successfully"),this.activeModal.close()},()=>{this.multisiteZoneForm.setErrors({cdSubmitButton:!0})})):"edit"===this.action&&(this.zonegroup=new x.iG,this.zonegroup.name=_.selectedZonegroup,this.zone=new x.jb,this.zone.name=this.info.data.name,this.zone.endpoints=_.zone_endpoints,this.zone.system_key=new x.VY,this.zone.system_key.access_key=_.access_key,this.zone.system_key.secret_key=_.secret_key,this.rgwZoneService.update(this.zone,this.zonegroup,_.zoneName,_.default_zone,_.master_zone,this.zone.endpoints,_.placementTarget,_.placementDataPool,_.placementIndexPool,_.placementDataExtraPool,_.storageClass,_.storageDataPool,_.storageCompression).subscribe(()=>{this.notificationService.show(w.k.success,"Zone: '" + _.zoneName + "' updated successfully"),this.activeModal.close()},()=>{this.multisiteZoneForm.setErrors({cdSubmitButton:!0})}))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(I.p4),e.Y36(e_.o),e.Y36(ue.g),e.Y36(ge.K),e.Y36(Y.g),e.Y36(Q),e.Y36(ee.Z))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-multisite-zone-form"]],decls:71,vars:29,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L,S,W,C,Z,D,U,v,y,f;return n="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Select Zone Group",o="Zone Name",i="Default",s="Master",l="Endpoints",r="S3 access key " + "\ufffd#47\ufffd" + "" + "\ufffd#48\ufffd" + "To see or copy your S3 access key, go to " + "[\ufffd#49\ufffd|\ufffd#50\ufffd|\ufffd#51\ufffd|\ufffd#52\ufffd]" + "Object Gateway > Users" + "[\ufffd/#49\ufffd|\ufffd/#50\ufffd|\ufffd/#51\ufffd|\ufffd/#52\ufffd]" + " and click on your user name. In " + "[\ufffd#49\ufffd|\ufffd#50\ufffd|\ufffd#51\ufffd|\ufffd#52\ufffd]" + "Keys" + "[\ufffd/#49\ufffd|\ufffd/#50\ufffd|\ufffd/#51\ufffd|\ufffd/#52\ufffd]" + ", click " + "[\ufffd#49\ufffd|\ufffd#50\ufffd|\ufffd#51\ufffd|\ufffd#52\ufffd]" + "Show" + "[\ufffd/#49\ufffd|\ufffd/#50\ufffd|\ufffd/#51\ufffd|\ufffd/#52\ufffd]" + ". View the access key by clicking Show and copy the key by clicking " + "[\ufffd#49\ufffd|\ufffd#50\ufffd|\ufffd#51\ufffd|\ufffd#52\ufffd]" + "Copy to Clipboard" + "[\ufffd/#49\ufffd|\ufffd/#50\ufffd|\ufffd/#51\ufffd|\ufffd/#52\ufffd]" + "." + "\ufffd/#48\ufffd" + "" + "\ufffd/#47\ufffd" + "",r=e.Zx4(r),d="S3 secret key " + "\ufffd#58\ufffd" + "" + "\ufffd#59\ufffd" + "To see or copy your S3 access key, go to " + "[\ufffd#60\ufffd|\ufffd#61\ufffd|\ufffd#62\ufffd|\ufffd#63\ufffd]" + "Object Gateway > Users" + "[\ufffd/#60\ufffd|\ufffd/#61\ufffd|\ufffd/#62\ufffd|\ufffd/#63\ufffd]" + " and click on your user name. In " + "[\ufffd#60\ufffd|\ufffd#61\ufffd|\ufffd#62\ufffd|\ufffd#63\ufffd]" + "Keys" + "[\ufffd/#60\ufffd|\ufffd/#61\ufffd|\ufffd/#62\ufffd|\ufffd/#63\ufffd]" + ", click " + "[\ufffd#60\ufffd|\ufffd#61\ufffd|\ufffd#62\ufffd|\ufffd#63\ufffd]" + "Show" + "[\ufffd/#60\ufffd|\ufffd/#61\ufffd|\ufffd/#62\ufffd|\ufffd/#63\ufffd]" + ". View the secret key by clicking Show and copy the key by clicking " + "[\ufffd#60\ufffd|\ufffd#61\ufffd|\ufffd#62\ufffd|\ufffd#63\ufffd]" + "Copy to Clipboard" + "[\ufffd/#60\ufffd|\ufffd/#61\ufffd|\ufffd/#62\ufffd|\ufffd/#63\ufffd]" + "." + "\ufffd/#59\ufffd" + "" + "\ufffd/#58\ufffd" + "",d=e.Zx4(d),u="This field is required.",R="The chosen zone name is already in use.",O="Default zone can only exist in a default zone group. ",F="You cannot unset the default flag. ",b="Please consult the " + "\ufffd#3\ufffd" + "documentation" + "\ufffd/#3\ufffd" + " to follow the failover mechanism",h="Master zone already exists for the selected zone group. ",M="You cannot unset the master flag. ",L="Please consult the " + "\ufffd#3\ufffd" + "documentation" + "\ufffd/#3\ufffd" + " to follow the failover mechanism",S="This field is required.",W="Please enter a valid IP address.",C="Placement target",Z="Data pool",D="Index pool",U="Data extra pool",v="Storage Class",y="Data pool",f="Compression",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","multisiteZoneForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","selectedZonegroup",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["id","selectedZonegroup","formControlName","selectedZonegroup","name","selectedZonegroup",1,"form-select",3,"change"],[3,"value","selected",4,"ngFor","ngForOf"],["for","zonegroupName",1,"cd-col-form-label","required"],o,["type","text","placeholder","Zone name...","id","zoneName","name","zoneName","formControlName","zoneName",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"custom-control","custom-checkbox"],["id","default_zone","name","default_zone","formControlName","default_zone","type","checkbox",1,"form-check-input"],["for","default_zone",1,"form-check-label"],i,[4,"ngIf"],["id","master_zone","name","master_zone","formControlName","master_zone","type","checkbox",1,"form-check-input"],["for","master_zone",1,"form-check-label"],s,["for","zone_endpoints",1,"cd-col-form-label","required"],l,["type","text","placeholder","e.g, http://ceph-node-00.com:80","id","zone_endpoints","name","zone_endpoints","formControlName","zone_endpoints",1,"form-control"],["for","access_key",1,"cd-col-form-label","required"],r,["type","text","placeholder","DiPt4V7WWvy2njL1z6aC","id","access_key","name","access_key","formControlName","access_key",1,"form-control"],d,["type","text","placeholder","xSZUdYky0bTctAdCEEW8ikhfBVKsBV5LFYL82vvh","id","secret_key","name","secret_key","formControlName","secret_key",1,"form-control"],["class","form-group row",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[3,"value","selected"],[1,"invalid-feedback"],u,R,O,F,b,[3,"href"],h,M,L,S,W,["for","placementTarget",1,"cd-col-form-label"],C,["id","placementTarget","formControlName","placementTarget","name","placementTarget",1,"form-select",3,"change"],["for","placementDataPool",1,"cd-col-form-label"],Z,["id","placementDataPool","formControlName","placementDataPool","name","placementDataPool",1,"form-select",3,"value"],["for","placementIndexPool",1,"cd-col-form-label"],D,["id","placementIndexPool","formControlName","placementIndexPool","name","placementIndexPool",1,"form-select"],["for","placementDataExtraPool",1,"cd-col-form-label"],U,["id","placementDataExtraPool","formControlName","placementDataExtraPool","name","placementDataExtraPool",1,"form-select"],["for","storageClass",1,"cd-col-form-label"],v,["id","storageClass","formControlName","storageClass","name","storageClass",1,"form-select",3,"change"],[3,"value",4,"ngFor","ngForOf"],["for","storageDataPool",1,"cd-col-form-label"],y,["id","storageDataPool","formControlName","storageDataPool","name","storageDataPool",1,"form-select"],["for","storageCompression",1,"cd-col-form-label"],f,["id","storageCompression","formControlName","storageCompression","name","storageCompression",1,"form-select"],[3,"value"]]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10)(13,"select",11),e.NdJ("change",function(s){return o.onZoneGroupChange(s.target.value)}),e.YNc(14,pa,2,3,"option",12),e.qZA()()(),e.TgZ(15,"div",7)(16,"label",13),e.SDv(17,14),e.qZA(),e.TgZ(18,"div",10),e._UZ(19,"input",15),e.YNc(20,ma,2,0,"span",16),e.YNc(21,Ma,2,0,"span",16),e.TgZ(22,"div",17),e._UZ(23,"input",18),e.TgZ(24,"label",19),e.SDv(25,20),e.qZA(),e.YNc(26,Sa,3,0,"span",21),e.YNc(27,Ca,3,0,"span",21),e.YNc(28,Oa,4,1,"cd-helper",21),e._UZ(29,"br"),e.qZA(),e.TgZ(30,"div",17),e._UZ(31,"input",22),e.TgZ(32,"label",23),e.SDv(33,24),e.qZA(),e.YNc(34,Fa,3,0,"span",21),e.YNc(35,Pa,3,0,"span",21),e.YNc(36,Na,4,1,"cd-helper",21),e.qZA()()(),e.TgZ(37,"div",7)(38,"label",25),e.SDv(39,26),e.qZA(),e.TgZ(40,"div",10),e._UZ(41,"input",27),e.YNc(42,Ga,2,0,"span",16),e.YNc(43,Aa,2,0,"span",16),e.qZA()(),e.TgZ(44,"div",7)(45,"label",28),e.tHW(46,29),e.TgZ(47,"cd-helper")(48,"span"),e._UZ(49,"b")(50,"b")(51,"b")(52,"b"),e.qZA()(),e.N_p(),e.qZA(),e.TgZ(53,"div",10),e._UZ(54,"input",30),e.qZA()(),e.TgZ(55,"div",7)(56,"label",28),e.tHW(57,31),e.TgZ(58,"cd-helper")(59,"span"),e._UZ(60,"b")(61,"b")(62,"b")(63,"b"),e.qZA()(),e.N_p(),e.qZA(),e.TgZ(64,"div",10),e._UZ(65,"input",32),e.qZA()(),e.YNc(66,Ua,2,1,"div",33),e.qZA(),e.TgZ(67,"div",34)(68,"cd-form-button-panel",35),e.NdJ("submitActionEvent",function(){return o.submit()}),e.ALo(69,"titlecase"),e.ALo(70,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,21,o.action))(e.lcZ(4,23,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.multisiteZoneForm),e.xp6(7),e.uIk("disabled","edit"===o.action||null),e.xp6(1),e.Q6J("ngForOf",o.zonegroupList),e.xp6(6),e.Q6J("ngIf",o.multisiteZoneForm.showError("zoneName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteZoneForm.showError("zoneName",i,"uniqueName")),e.xp6(2),e.uIk("disabled","edit"===o.action||null),e.xp6(3),e.Q6J("ngIf",o.disableDefault&&"create"===o.action),e.xp6(1),e.Q6J("ngIf",o.isDefaultZone),e.xp6(1),e.Q6J("ngIf","edit"===o.action&&!o.isDefaultZone),e.xp6(3),e.uIk("disabled","edit"===o.action||null),e.xp6(3),e.Q6J("ngIf",o.disableMaster),e.xp6(1),e.Q6J("ngIf",o.isMasterZone),e.xp6(1),e.Q6J("ngIf","edit"===o.action&&!o.isMasterZone),e.xp6(6),e.Q6J("ngIf",o.multisiteZoneForm.showError("zone_endpoints",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteZoneForm.showError("zone_endpoints",i,"endpoint")),e.xp6(23),e.Q6J("ngIf","edit"===o.action),e.xp6(2),e.Q6J("form",o.multisiteZoneForm)("submitText",e.lcZ(69,25,o.action)+" "+e.lcZ(70,27,o.resource))}},dependencies:[T.sg,T.O5,j.S,X.z,B.p,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.Wl,a.EJ,a.JJ,a.JL,a.sg,a.u,T.rS,_e.m]}),t})();var ya=c(36569);function wa(t,n){if(1&t&&(e.TgZ(0,"option",33),e._uU(1),e.qZA()),2&t){const _=n.$implicit,o=e.oxw();e.Q6J("value",_.name)("selected",_.name===o.multisiteZonegroupForm.getValue("selectedRealm")),e.xp6(1),e.hij(" ",_.name," ")}}function xa(t,n){1&t&&(e.TgZ(0,"span",34),e.SDv(1,35),e.qZA())}function ka(t,n){1&t&&(e.TgZ(0,"span",34),e.SDv(1,36),e.qZA())}function za(t,n){1&t&&(e.TgZ(0,"span")(1,"cd-helper"),e.SDv(2,37),e.qZA()())}function qa(t,n){if(1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,38),e._UZ(3,"a",39),e.N_p(),e.qZA()()),2&t){const _=e.oxw();e.xp6(3),e.s9C("href",_.docUrl,e.LSH)}}function Ha(t,n){1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.SDv(2,40),e.qZA()())}function Xa(t,n){1&t&&(e.TgZ(0,"span")(1,"cd-helper"),e.SDv(2,41),e.qZA()())}function Ba(t,n){if(1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.tHW(2,42),e._UZ(3,"a",39),e.N_p(),e.qZA()()),2&t){const _=e.oxw();e.xp6(3),e.s9C("href",_.docUrl,e.LSH)}}function Qa(t,n){1&t&&(e.TgZ(0,"cd-helper")(1,"span"),e.SDv(2,43),e.qZA()())}function Ya(t,n){1&t&&(e.TgZ(0,"span",34),e.SDv(1,44),e.qZA())}function Ja(t,n){1&t&&(e.TgZ(0,"span",34),e.SDv(1,45),e.qZA())}function Ka(t,n){1&t&&(e.TgZ(0,"span",34),e.SDv(1,49),e.qZA())}function Va(t,n){if(1&t&&(e.TgZ(0,"div",7)(1,"label",46),e.SDv(2,47),e.qZA(),e.TgZ(3,"div",10),e._UZ(4,"cd-select-badges",48)(5,"br"),e.YNc(6,Ka,2,0,"span",18),e.qZA()()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("data",_.zonegroupZoneNames)("options",_.labelsOption)("customBadges",!0),e.xp6(2),e.Q6J("ngIf",_.isRemoveMasterZone)}}function ja(t,n){1&t&&(e.TgZ(0,"span"),e.SDv(1,68),e.qZA())}function el(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",55)(2,"div",56),e._uU(3),e.ALo(4,"ordinal"),e.TgZ(5,"span",57),e.NdJ("click",function(){const s=e.CHM(_).index,l=e.oxw(2);return e.KtG(l.removePlacementTarget(s))}),e._uU(6,"\xd7"),e.qZA()(),e.TgZ(7,"div",58)(8,"div",7)(9,"label",59),e.SDv(10,60),e.qZA(),e.TgZ(11,"div",10),e._UZ(12,"input",61),e.TgZ(13,"span",34),e.YNc(14,ja,2,0,"span",23),e.qZA()()(),e.TgZ(15,"div",7)(16,"label",62),e.SDv(17,63),e.qZA(),e.TgZ(18,"div",10),e._UZ(19,"input",64),e.qZA()(),e.TgZ(20,"div",7)(21,"label",65),e.SDv(22,66),e.qZA(),e.TgZ(23,"div",10),e._UZ(24,"input",67),e.qZA()()()()()}if(2&t){const _=n.$implicit,o=n.index,i=e.oxw(2),s=e.MAs(6);e.xp6(1),e.Q6J("formGroup",_),e.xp6(2),e.hij(" ",e.lcZ(4,3,o+1)," "),e.xp6(11),e.Q6J("ngIf",i.showError(o,"placement_id",s,"required"))}}const _l=function(t){return[t]};function tl(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"legend"),e._uU(2,"Placement targets"),e.qZA(),e.ynx(3,50),e.YNc(4,el,25,5,"div",51),e.BQk(),e.TgZ(5,"button",52),e.NdJ("click",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.addPlacementTarget())}),e._UZ(6,"i",53),e.ynx(7),e.SDv(8,54),e.BQk(),e.qZA()()}if(2&t){const _=e.oxw();e.xp6(4),e.Q6J("ngForOf",_.placementTargets.controls)("ngForTrackBy",_.trackByFn),e.xp6(2),e.Q6J("ngClass",e.VKq(3,_l,_.icons.add))}}let ol=(()=>{class t{constructor(_,o,i,s,l){this.activeModal=_,this.actionLabels=o,this.rgwZonegroupService=i,this.notificationService=s,this.formBuilder=l,this.endpoints=/^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{2,4}$/,this.ipv4Rgx=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,this.ipv6Rgx=/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i,this.icons=$.P,this.editing=!1,this.defaultsInfo=[],this.multisiteInfo=[],this.realmList=[],this.zonegroupList=[],this.isMaster=!1,this.labelsOption=[],this.zoneList=[],this.isRemoveMasterZone=!1,this.disableDefault=!1,this.disableMaster=!1,this.action=this.editing?this.actionLabels.EDIT+this.resource:this.actionLabels.CREATE+this.resource,this.createForm()}createForm(){this.multisiteZonegroupForm=new V.d({default_zonegroup:new a.p4(!1),zonegroupName:new a.p4(null,{validators:[a.kI.required,m.h.custom("uniqueName",_=>"create"===this.action&&this.zonegroupNames&&-1!==this.zonegroupNames.indexOf(_))]}),master_zonegroup:new a.p4(!1),selectedRealm:new a.p4(null),zonegroup_endpoints:new a.p4(null,[m.h.custom("endpoint",_=>!(E().isEmpty(_)||(_.includes(",")?(_.split(",").forEach(o=>!this.endpoints.test(o)&&!this.ipv4Rgx.test(o)&&!this.ipv6Rgx.test(o)),1):this.endpoints.test(_)||this.ipv4Rgx.test(_)||this.ipv6Rgx.test(_)))),a.kI.required]),placementTargets:this.formBuilder.array([])})}ngOnInit(){E().forEach(this.multisiteZonegroupForm.get("placementTargets"),s=>{this.addPlacementTarget().patchValue(s)}),this.placementTargets=this.multisiteZonegroupForm.get("placementTargets"),this.realmList=void 0!==this.multisiteInfo[0]&&this.multisiteInfo[0].hasOwnProperty("realms")?this.multisiteInfo[0].realms:[],this.zonegroupList=void 0!==this.multisiteInfo[1]&&this.multisiteInfo[1].hasOwnProperty("zonegroups")?this.multisiteInfo[1].zonegroups:[],this.zonegroupList.forEach(s=>{!0===s.is_master&&!E().isEmpty(s.realm_id)&&(this.isMaster=!0,this.disableMaster=!0)}),this.isMaster||(this.multisiteZonegroupForm.get("master_zonegroup").setValue(!0),this.multisiteZonegroupForm.get("master_zonegroup").disable()),this.zoneList=void 0!==this.multisiteInfo[2]&&this.multisiteInfo[2].hasOwnProperty("zones")?this.multisiteInfo[2].zones:[],this.zonegroupNames=this.zonegroupList.map(s=>s.name);const i=this.zonegroupList.map(s=>s.zones).reduce((s,l)=>s.concat(l),[]).map(s=>s.name);if(this.allZoneNames=this.zoneList.map(s=>s.name),this.allZoneNames=E().difference(this.allZoneNames,i),"create"===this.action&&null!==this.defaultsInfo.defaultRealmName&&(this.multisiteZonegroupForm.get("selectedRealm").setValue(this.defaultsInfo.defaultRealmName),this.disableMaster&&this.multisiteZonegroupForm.get("master_zonegroup").disable()),"edit"===this.action){this.multisiteZonegroupForm.get("zonegroupName").setValue(this.info.data.name),this.multisiteZonegroupForm.get("selectedRealm").setValue(this.info.data.parent),this.multisiteZonegroupForm.get("default_zonegroup").setValue(this.info.data.is_default),this.multisiteZonegroupForm.get("master_zonegroup").setValue(this.info.data.is_master),this.multisiteZonegroupForm.get("zonegroup_endpoints").setValue(this.info.data.endpoints),this.info.data.is_default&&this.multisiteZonegroupForm.get("default_zonegroup").disable(),!this.info.data.is_default&&this.multisiteZonegroupForm.getValue("selectedRealm")!==this.defaultsInfo.defaultRealmName&&(this.multisiteZonegroupForm.get("default_zonegroup").disable(),this.disableDefault=!0),(this.info.data.is_master||this.disableMaster)&&this.multisiteZonegroupForm.get("master_zonegroup").disable(),this.zonegroupZoneNames=this.info.data.zones.map(l=>l.name),this.zgZoneNames=this.info.data.zones.map(l=>l.name),this.zgZoneIds=this.info.data.zones.map(l=>l.id);const s=new Set(this.allZoneNames);this.labelsOption=Array.from(s).map(l=>({enabled:!0,name:l,selected:!1,description:null})),this.info.data.placement_targets.forEach(l=>{const r=this.addPlacementTarget();let d={placement_id:l.name,tags:l.tags.join(","),storage_class:"string"==typeof l.storage_classes?l.storage_classes:l.storage_classes.join(",")};r.patchValue(d)})}}submit(){const _=this.multisiteZonegroupForm.getRawValue();if("create"===this.action)this.realm=new x.L6,this.realm.name=_.selectedRealm,this.zonegroup=new x.iG,this.zonegroup.name=_.zonegroupName,this.zonegroup.endpoints=_.zonegroup_endpoints,this.rgwZonegroupService.create(this.realm,this.zonegroup,_.default_zonegroup,_.master_zonegroup).subscribe(()=>{this.notificationService.show(w.k.success,"Zonegroup: '" + _.zonegroupName + "' created successfully"),this.activeModal.close()},()=>{this.multisiteZonegroupForm.setErrors({cdSubmitButton:!0})});else if("edit"===this.action){this.removedZones=E().difference(this.zgZoneNames,this.zonegroupZoneNames);const o=this.info.data.zones.filter(i=>i.id===this.info.data.master_zone);if(this.isRemoveMasterZone=this.removedZones.includes(o[0].name),this.isRemoveMasterZone)return void this.multisiteZonegroupForm.setErrors({cdSubmitButton:!0});this.addedZones=E().difference(this.zonegroupZoneNames,this.zgZoneNames),this.realm=new x.L6,this.realm.name=_.selectedRealm,this.zonegroup=new x.iG,this.zonegroup.name=this.info.data.name,this.newZonegroupName=_.zonegroupName,this.zonegroup.endpoints=_.zonegroup_endpoints.toString(),this.zonegroup.placement_targets=_.placementTargets,this.rgwZonegroupService.update(this.realm,this.zonegroup,this.newZonegroupName,_.default_zonegroup,_.master_zonegroup,this.removedZones,this.addedZones).subscribe(()=>{this.notificationService.show(w.k.success,"Zonegroup: '" + _.zonegroupName + "' updated successfully"),this.activeModal.close()},()=>{this.multisiteZonegroupForm.setErrors({cdSubmitButton:!0})})}}addPlacementTarget(){this.placementTargets=this.multisiteZonegroupForm.get("placementTargets");const _=new V.d({placement_id:new a.p4("",{validators:[a.kI.required]}),tags:new a.p4(""),storage_class:new a.p4([])});return this.placementTargets.push(_),_}trackByFn(_){return _}removePlacementTarget(_){this.placementTargets=this.multisiteZonegroupForm.get("placementTargets"),this.placementTargets.removeAt(_)}showError(_,o,i,s){return this.multisiteZonegroupForm.controls.placementTargets.controls[_].showError(o,i,s)}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(G.Kz),e.Y36(I.p4),e.Y36(ge.K),e.Y36(Y.g),e.Y36(a.QS))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-multisite-zonegroup-form"]],decls:49,vars:24,consts:function(){let n,_,o,i,s,l,r,d,u,R,O,F,b,h,M,L,S,W,C,Z,D,U,v,y;return n="" + "\ufffd0\ufffd" + " Zone Group",_="Select Realm",o="-- Select a realm --",i="Zone Group Name",s="Default",l="Master",r="Endpoints",d="This field is required.",u="The chosen zone group name is already in use.",R="Zone group doesn't belong to the default realm.",O="Please consult the " + "\ufffd#3\ufffd" + "documentation" + "\ufffd/#3\ufffd" + " to follow the failover mechanism",F="You cannot unset the default flag.",b="Multiple master zone groups can't be configured. If you want to create a new zone group and make it the master zone group, you must delete the default zone group.",h="Please consult the " + "\ufffd#3\ufffd" + "documentation" + "\ufffd/#3\ufffd" + " to follow the failover mechanism",M="You cannot unset the master flag.",L="This field is required.",S="Please enter a valid IP address.",W="Zones",C="Cannot remove master zone.",Z="Add placement target",D="Placement Id",U="Tags",v="Storage Class",y="This field is required.",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","multisiteZonegroupForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","selectedRealm",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["id","selectedRealm","formControlName","selectedRealm","name","selectedRealm",1,"form-select"],["ngValue",""],o,[3,"value","selected",4,"ngFor","ngForOf"],["for","zonegroupName",1,"cd-col-form-label","required"],i,["type","text","placeholder","Zone group name...","id","zonegroupName","name","zonegroupName","formControlName","zonegroupName",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"custom-control","custom-checkbox"],["id","default_zonegroup","name","default_zonegroup","formControlName","default_zonegroup","type","checkbox",1,"form-check-input"],["for","default_zonegroup",1,"form-check-label"],s,[4,"ngIf"],["id","master_zonegroup","name","master_zonegroup","formControlName","master_zonegroup","type","checkbox",1,"form-check-input"],["for","master_zonegroup",1,"form-check-label"],l,["for","zonegroup_endpoints",1,"cd-col-form-label","required"],r,["type","text","placeholder","e.g, http://ceph-node-00.com:80","id","zonegroup_endpoints","name","zonegroup_endpoints","formControlName","zonegroup_endpoints",1,"form-control"],["class","form-group row",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[3,"value","selected"],[1,"invalid-feedback"],d,u,R,O,[3,"href"],F,b,h,M,L,S,["for","zones",1,"cd-col-form-label"],W,["id","zones",3,"data","options","customBadges"],C,["formArrayName","placementTargets"],[4,"ngFor","ngForOf","ngForTrackBy"],["type","button","id","add-plc",1,"btn","btn-light","float-end","my-3",3,"click"],[3,"ngClass"],Z,[1,"card",3,"formGroup"],[1,"card-header"],["name","remove_placement_target","ngbTooltip","Remove",1,"float-end","clickable",3,"click"],[1,"card-body"],["for","placement_id",1,"cd-col-form-label","required"],D,["type","text","name","placement_id","id","placement_id","formControlName","placement_id","placeholder","eg. default-placement",1,"form-control"],["for","tags",1,"cd-col-form-label"],U,["type","text","name","tags","id","tags","formControlName","tags","placeholder","comma separated tags, eg. default-placement, ssd",1,"form-control"],["for","storage_class",1,"cd-col-form-label"],v,["type","text","name","storage_class","id","storage_class","formControlName","storage_class","placeholder","eg. Standard-tier",1,"form-control"],y]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.BQk(),e.ynx(4,3),e.TgZ(5,"form",4,5)(7,"div",6)(8,"div",7)(9,"label",8),e.SDv(10,9),e.qZA(),e.TgZ(11,"div",10)(12,"select",11)(13,"option",12),e.SDv(14,13),e.qZA(),e.YNc(15,wa,2,3,"option",14),e.qZA()()(),e.TgZ(16,"div",7)(17,"label",15),e.SDv(18,16),e.qZA(),e.TgZ(19,"div",10),e._UZ(20,"input",17),e.YNc(21,xa,2,0,"span",18),e.YNc(22,ka,2,0,"span",18),e.TgZ(23,"div",19),e._UZ(24,"input",20),e.TgZ(25,"label",21),e.SDv(26,22),e.qZA(),e.YNc(27,za,3,0,"span",23),e.YNc(28,qa,4,1,"cd-helper",23),e.YNc(29,Ha,3,0,"cd-helper",23),e._UZ(30,"br")(31,"input",24),e.TgZ(32,"label",25),e.SDv(33,26),e.qZA(),e.YNc(34,Xa,3,0,"span",23),e.YNc(35,Ba,4,1,"cd-helper",23),e.YNc(36,Qa,3,0,"cd-helper",23),e.qZA()()(),e.TgZ(37,"div",7)(38,"label",27),e.SDv(39,28),e.qZA(),e.TgZ(40,"div",10),e._UZ(41,"input",29),e.YNc(42,Ya,2,0,"span",18),e.YNc(43,Ja,2,0,"span",18),e.qZA()(),e.YNc(44,Va,7,4,"div",30),e.YNc(45,tl,9,5,"div",23),e.qZA(),e.TgZ(46,"div",31)(47,"cd-form-button-panel",32),e.NdJ("submitActionEvent",function(){return o.submit()}),e.ALo(48,"titlecase"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const i=e.MAs(6);e.Q6J("modalRef",o.activeModal),e.xp6(3),e.pQV(e.lcZ(3,20,o.action)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.multisiteZonegroupForm),e.xp6(10),e.Q6J("ngForOf",o.realmList),e.xp6(6),e.Q6J("ngIf",o.multisiteZonegroupForm.showError("zonegroupName",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteZonegroupForm.showError("zonegroupName",i,"uniqueName")),e.xp6(2),e.uIk("disabled","edit"===o.action||null),e.xp6(3),e.Q6J("ngIf",o.disableDefault&&"create"===o.action),e.xp6(1),e.Q6J("ngIf","edit"===o.action&&!o.info.data.is_default),e.xp6(1),e.Q6J("ngIf","edit"===o.action&&o.info.data.is_default),e.xp6(2),e.uIk("disabled","edit"===o.action||null),e.xp6(3),e.Q6J("ngIf",o.disableMaster&&"create"===o.action),e.xp6(1),e.Q6J("ngIf","edit"===o.action&&!o.info.data.is_master),e.xp6(1),e.Q6J("ngIf","edit"===o.action&&o.info.data.is_master),e.xp6(6),e.Q6J("ngIf",o.multisiteZonegroupForm.showError("zonegroup_endpoints",i,"required")),e.xp6(1),e.Q6J("ngIf",o.multisiteZonegroupForm.showError("zonegroup_endpoints",i,"endpoint")),e.xp6(1),e.Q6J("ngIf","edit"===o.action),e.xp6(1),e.Q6J("ngIf","edit"===o.action),e.xp6(2),e.Q6J("form",o.multisiteZonegroupForm)("submitText",e.lcZ(48,22,o.action)+" Zone Group")}},dependencies:[T.mk,T.sg,T.O5,j.S,I_.m,X.z,B.p,k.o,q.b,z.P,H.V,a._Y,a.YN,a.Kr,a.Fj,a.Wl,a.EJ,a.JJ,a.JL,a.sg,a.u,a.CE,G._L,T.rS,ya.f]}),t})();var nl=c(61717),il=c(36848),sl=c(7273);const al=["tree"];function ll(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"cd-alert-panel",17),e.tHW(1,18),e.TgZ(2,"a",19),e.NdJ("click",function(){e.CHM(_);const i=e.oxw();return e.KtG(i.enableRgwModule())}),e.qZA(),e.N_p(),e.qZA()}}function rl(t,n){1&t&&(e.TgZ(0,"cd-alert-panel",20),e.tHW(1,21),e._UZ(2,"a",22),e.N_p(),e.qZA())}function cl(t,n){if(1&t&&(e.TgZ(0,"span"),e._UZ(1,"cd-table-actions",23),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("permission",_.permission)("btnColor","light")("selection",_.selection)("tableActions",_.migrateTableAction)}}const dl=function(t,n,_){return[t,n,_]};function ul(t,n){if(1&t&&e._UZ(0,"i",24),2&t){const _=e.oxw();e.Q6J("ngClass",e.kEZ(1,dl,_.icons.large,_.icons.spinner,_.icons.spin))}}function gl(t,n){if(1&t&&(e.TgZ(0,"span"),e._UZ(1,"i",30),e.qZA()),2&t){const _=e.oxw(2).$implicit,o=e.oxw();e.xp6(1),e.Q6J("title",_.data.warning_message)("ngClass",o.icons.danger)}}function Rl(t,n){if(1&t&&(e.TgZ(0,"span",29),e.YNc(1,gl,2,2,"span",5),e._UZ(2,"i",24),e._uU(3),e.qZA()),2&t){const _=e.oxw().$implicit;e.xp6(1),e.Q6J("ngIf",_.data.show_warning),e.xp6(1),e.Q6J("ngClass",_.data.icon),e.xp6(1),e.hij(" ",_.data.name," ")}}function Tl(t,n){1&t&&(e.TgZ(0,"span",31),e._uU(1," default "),e.qZA())}function El(t,n){1&t&&(e.TgZ(0,"span",32),e._uU(1," master "),e.qZA())}function fl(t,n){1&t&&(e.TgZ(0,"span",32),e._uU(1," secondary-zone "),e.qZA())}const b_=function(t){return[t]};function pl(t,n){if(1&t){const _=e.EpF();e.TgZ(0,"div",33)(1,"div",34)(2,"button",35),e.NdJ("click",function(){e.CHM(_);const i=e.oxw().$implicit,s=e.oxw();return e.KtG(s.openModal(i,!0))}),e._UZ(3,"i",24),e.qZA()(),e.TgZ(4,"div",34)(5,"button",36),e.NdJ("click",function(){e.CHM(_);const i=e.oxw().$implicit,s=e.oxw();return e.KtG(s.delete(i))}),e._UZ(6,"i",24),e.qZA()()()}if(2&t){const _=e.oxw().$implicit,o=e.oxw();e.xp6(1),e.Q6J("title",o.editTitle),e.xp6(1),e.Q6J("disabled",o.getDisable()||_.data.secondary_zone),e.xp6(1),e.Q6J("ngClass",e.VKq(6,b_,o.icons.edit)),e.xp6(1),e.Q6J("title",o.deleteTitle),e.xp6(1),e.Q6J("disabled",o.isDeleteDisabled(_)||_.data.secondary_zone),e.xp6(1),e.Q6J("ngClass",e.VKq(8,b_,o.icons.destroy))}}function ml(t,n){if(1&t&&(e.YNc(0,Rl,4,3,"span",25),e.YNc(1,Tl,2,0,"span",26),e.YNc(2,El,2,0,"span",27),e.YNc(3,fl,2,0,"span",27),e.YNc(4,pl,7,10,"div",28)),2&t){const _=n.$implicit;e.Q6J("ngIf",_.data.name),e.xp6(1),e.Q6J("ngIf",_.data.is_default),e.xp6(1),e.Q6J("ngIf",_.data.is_master),e.xp6(1),e.Q6J("ngIf",_.data.secondary_zone),e.xp6(1),e.Q6J("ngIf",_.isFocused)}}function Ml(t,n){if(1&t&&(e.TgZ(0,"div",37)(1,"legend"),e._uU(2),e.qZA(),e.TgZ(3,"div"),e._UZ(4,"cd-table-key-value",38),e.qZA()()),2&t){const _=e.oxw();e.xp6(2),e.Oqu(_.metadataTitle),e.xp6(2),e.Q6J("data",_.metadata)}}class Te{constructor(n,_,o,i,s,l,r,d,u,R,O,F){this.modalService=n,this.timerService=_,this.authStorageService=o,this.actionLabels=i,this.timerServiceVariable=s,this.router=l,this.rgwRealmService=r,this.rgwZonegroupService=d,this.rgwZoneService=u,this.rgwDaemonService=R,this.mgrModuleService=O,this.notificationService=F,this.sub=new N_.w,this.messages={noDefaultRealm:"Please create a default realm first to enable this feature",noMasterZone:"Please create a master zone for each zone group to enable this feature",noRealmExists:"No realm exists",disableExport:"Please create master zone group and master zone for each of the realms"},this.icons=$.P,this.selection=new qe.r,this.loadingIndicator=!0,this.nodes=[],this.treeOptions={useVirtualScroll:!0,nodeHeight:22,levelPadding:20,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}},this.realms=[],this.zonegroups=[],this.zones=[],this.realmIds=[],this.zoneIds=[],this.defaultRealmId="",this.defaultZonegroupId="",this.defaultZoneId="",this.multisiteInfo=[],this.defaultsInfo=[],this.showMigrateAction=!1,this.editTitle="Edit",this.deleteTitle="Delete",this.disableExport=!0,this.restartGatewayMessage=!1,this.rgwModuleData=[],this.permission=this.authStorageService.getPermissions().rgw}openModal(n,_=!1){const o=_?n.data.type:n;this.bsModalRef=this.modalService.show("realm"===o?fa:"zonegroup"===o?ol:va,{resource:o,action:_?"edit":"create",info:n,defaultsInfo:this.defaultsInfo,multisiteInfo:this.multisiteInfo},{size:"lg"})}openMigrateModal(){this.bsModalRef=this.modalService.show(ms,{multisiteInfo:this.multisiteInfo},{size:"lg"})}openImportModal(){this.bsModalRef=this.modalService.show(ca,{multisiteInfo:this.multisiteInfo},{size:"lg"})}openExportModal(){this.bsModalRef=this.modalService.show(ws,{defaultsInfo:this.defaultsInfo,multisiteInfo:this.multisiteInfo},{size:"lg"})}getDisableExport(){return this.realms.forEach(n=>{this.zonegroups.forEach(_=>{n.id===_.realm_id&&_.is_master&&""!==_.master_zone&&(this.disableExport=!1)})}),!this.rgwModuleStatus||(this.realms.length<1?this.messages.noRealmExists:!!this.disableExport&&this.messages.disableExport)}getDisableImport(){return!this.rgwModuleStatus}ngOnInit(){const i={permission:"read",icon:$.P.exchange,name:this.actionLabels.MIGRATE,click:()=>this.openMigrateModal()},s={permission:"read",icon:$.P.download,name:this.actionLabels.IMPORT,click:()=>this.openImportModal(),disable:()=>this.getDisableImport()},l={permission:"read",icon:$.P.upload,name:this.actionLabels.EXPORT,click:()=>this.openExportModal(),disable:()=>this.getDisableExport()};this.createTableActions=[{permission:"create",icon:$.P.add,name:this.actionLabels.CREATE+" Realm",click:()=>this.openModal("realm")},{permission:"create",icon:$.P.add,name:this.actionLabels.CREATE+" Zone Group",click:()=>this.openModal("zonegroup"),disable:()=>this.getDisable()},{permission:"create",icon:$.P.add,name:this.actionLabels.CREATE+" Zone",click:()=>this.openModal("zone")}],this.migrateTableAction=[i],this.importAction=[s],this.exportAction=[l];const r=[this.rgwRealmService.getAllRealmsInfo(),this.rgwZonegroupService.getAllZonegroupsInfo(),this.rgwZoneService.getAllZonesInfo()];this.sub=this.timerService.get(()=>(0,ne.D)(r),2*this.timerServiceVariable.TIMER_SERVICE_PERIOD).subscribe(d=>{this.multisiteInfo=d,this.loadingIndicator=!1,this.nodes=this.abstractTreeData(d)},d=>{}),this.mgrModuleService.list().subscribe(d=>{this.rgwModuleData=d.filter(u=>"rgw"===u.name),this.rgwModuleData.length>0&&(this.rgwModuleStatus=this.rgwModuleData[0].enabled)})}ngOnDestroy(){this.sub.unsubscribe()}abstractTreeData(n){let _=[],o={},i={},s=[],l={},r=[];if(this.realms=n[0].realms,this.zonegroups=n[1].zonegroups,this.zones=n[2].zones,this.defaultRealmId=n[0].default_realm,this.defaultZonegroupId=n[1].default_zonegroup,this.defaultZoneId=n[2].default_zone,this.defaultsInfo=this.getDefaultsEntities(this.defaultRealmId,this.defaultZonegroupId,this.defaultZoneId),this.realms.length>0)for(const d of this.realms){const u=this.rgwRealmService.getRealmTree(d,this.defaultRealmId);o=u.nodes,this.realmIds=this.realmIds.concat(u.realmIds);for(const R of this.zonegroups)if(R.realm_id===d.id){i=this.rgwZonegroupService.getZonegroupTree(R,this.defaultZonegroupId,d);for(const O of R.zones){const F=this.rgwZoneService.getZoneTree(O,this.defaultZoneId,this.zones,R,d);l=F.nodes,this.zoneIds=this.zoneIds.concat(F.zoneIds),r.push(l),l={}}i.children=r,r=[],s.push(i),i={}}o.children=s,_.push(o),i={},l={},o={},s=[],r=[]}if(this.zonegroups.length>0)for(const d of this.zonegroups)if(!this.realmIds.includes(d.realm_id)){o=this.rgwZonegroupService.getZonegroupTree(d,this.defaultZonegroupId);for(const u of d.zones){const R=this.rgwZoneService.getZoneTree(u,this.defaultZoneId,this.zones,d);i=R.nodes,this.zoneIds=this.zoneIds.concat(R.zoneIds),s.push(i),i={}}o.children=s,_.push(o),i={},o={},s=[]}if(this.zones.length>0)for(const d of this.zones)this.zoneIds.length>0&&!this.zoneIds.includes(d.id)&&(o=this.rgwZoneService.getZoneTree(d,this.defaultZoneId,this.zones).nodes,_.push(o),o={});return this.realms.length<1&&this.zonegroups.length<1&&this.zones.length<1?[{name:"No nodes!"}]:(this.realmIds=[],this.zoneIds=[],this.getDisableMigrate(),this.rgwDaemonService.list().subscribe(d=>{const u=d.map(R=>R.realm_name);""!=this.defaultRealmId&&""!=this.defaultZonegroupId&&""!=this.defaultZoneId&&u.includes("")&&(this.restartGatewayMessage=!0)}),_)}getDefaultsEntities(n,_,o){const i=this.realms.find(R=>R.id===n),s=this.zonegroups.find(R=>R.id===_),l=this.zones.find(R=>R.id===o);return{defaultRealmName:void 0!==i?i.name:null,defaultZonegroupName:void 0!==s?s.name:null,defaultZoneName:void 0!==l?l.name:null}}onNodeSelected(n,_){je.iM.ACTIVATE(n,_,!0),this.metadataTitle=_.data.name,this.metadata=_.data.info,_.data.show=!0}onUpdateData(){this.tree.treeModel.expandAll()}getDisable(){let n=!0;return""===this.defaultRealmId?this.messages.noDefaultRealm:(this.zonegroups.forEach(_=>{E().isEmpty(_.master_zone)&&(n=!1)}),n?(this.editTitle="Edit",!1):(this.editTitle="Please create a master zone for each existing zonegroup to enable this feature",this.messages.noMasterZone))}getDisableMigrate(){return this.showMigrateAction=0===this.realms.length&&1===this.zonegroups.length&&"default"===this.zonegroups[0].name&&1===this.zones.length&&"default"===this.zones[0].name,this.showMigrateAction}isDeleteDisabled(n){let _=!1,o=0;if("realm"===n.data.type&&n.data.is_default&&this.realms.length<2&&(_=!0),"zonegroup"===n.data.type)if(this.zonegroups.length<2)this.deleteTitle="You can not delete the only zonegroup available",_=!0;else if(n.data.is_default)this.deleteTitle="You can not delete the default zonegroup",_=!0;else if(n.data.is_master){for(let i of this.zonegroups)if(!0===i.is_master&&(o++,o>1))break;o<2&&(this.deleteTitle="You can not delete the only master zonegroup available",_=!0)}return"zone"===n.data.type&&(this.zones.length<2?(this.deleteTitle="You can not delete the only zone available",_=!0):n.data.is_default?(this.deleteTitle="You can not delete the default zone",_=!0):n.data.is_master&&n.data.zone_zonegroup.zones.length<2&&(this.deleteTitle="You can not delete the master zone as there are no more zones in this zonegroup",_=!0)),_||(this.deleteTitle="Delete"),_}delete(n){"realm"===n.data.type?this.modalRef=this.modalService.show(Qe.M,{itemDescription:"" + n.data.type + " " + n.data.name + "",itemNames:[`${n.data.name}`],submitAction:()=>{this.rgwRealmService.delete(n.data.name).subscribe(()=>{this.modalRef.close(),this.notificationService.show(w.k.success,"Realm: '" + n.data.name + "' deleted successfully")},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}}):"zonegroup"===n.data.type?this.modalRef=this.modalService.show(Ls,{zonegroup:n.data}):"zone"===n.data.type&&(this.modalRef=this.modalService.show(Os,{zone:n.data}))}enableRgwModule(){let n;const _=()=>{(0,ls.H)(2e3).subscribe(()=>{this.mgrModuleService.list().subscribe(()=>{this.notificationService.suspendToasties(!1),this.blockUI.stop(),this.notificationService.show(w.k.success,"Enabled RGW Module"),this.router.navigateByUrl("/",{skipLocationChange:!0}).then(()=>{this.router.navigate(["/rgw/multisite"])})},()=>{_()})})};this.rgwModuleStatus||(n=this.mgrModuleService.enable("rgw")),n.subscribe(()=>{},()=>{this.notificationService.suspendToasties(!0),this.blockUI.start("Reconnecting, please wait ..."),_()})}}Te.\u0275fac=function(n){return new(n||Te)(e.Y36(ee.Z),e.Y36(il.f),e.Y36(ce.j),e.Y36(I.p4),e.Y36(I.eu),e.Y36(J.F0),e.Y36(de.y),e.Y36(ge.K),e.Y36(ue.g),e.Y36(oe.b),e.Y36(sl.N),e.Y36(Y.g))},Te.\u0275cmp=e.Xpm({type:Te,selectors:[["cd-rgw-multisite-details"]],viewQuery:function(n,_){if(1&n&&e.Gf(al,5),2&n){let o;e.iGM(o=e.CRH())&&(_.tree=o.first)}},decls:21,vars:18,consts:function(){let t,n,_;return t="Topology Viewer",n="In order to access the import/export feature, the rgw module must be enabled " + "\ufffd#2\ufffd" + " Enable the Object Gateway Module" + "\ufffd/#2\ufffd" + "",_="Please restart all Ceph Object Gateway instances in all zones to ensure consistent multisite configuration updates. " + "\ufffd#2\ufffd" + " Cluster->Services" + "\ufffd/#2\ufffd" + "",[[1,"row"],[1,"col-sm-12","col-lg-12"],["type","info","spacingClass","mb-3",4,"ngIf"],["type","warning","spacingClass","mb-3",4,"ngIf"],[1,"btn-group","mb-4","me-2",3,"permission","selection","tableActions"],[4,"ngIf"],[1,"btn-group","mb-4","me-2",3,"permission","btnColor","selection","tableActions"],[1,"card"],[1,"card-header"],t,[1,"card-body"],[1,"col-sm-6","col-lg-6","tree-container"],[3,"ngClass",4,"ngIf"],[3,"nodes","options","updateData"],["tree",""],["treeNodeTemplate",""],["class","col-sm-6 col-lg-6 metadata",4,"ngIf"],["type","info","spacingClass","mb-3"],n,[1,"text-decoration-underline",3,"click"],["type","warning","spacingClass","mb-3"],_,["routerLink","/services",1,"text-decoration-underline"],[1,"btn-group","mb-4","me-2","secondary",3,"permission","btnColor","selection","tableActions"],[3,"ngClass"],["class","me-3",4,"ngIf"],["class","badge badge-success me-2",4,"ngIf"],["class","badge badge-warning me-2",4,"ngIf"],["class","btn-group align-inline-btns","role","group",4,"ngIf"],[1,"me-3"],[1,"text-danger",3,"title","ngClass"],[1,"badge","badge-success","me-2"],[1,"badge","badge-warning","me-2"],["role","group",1,"btn-group","align-inline-btns"],[3,"title"],["type","button",1,"btn","btn-light","dropdown-toggle-split","ms-1",3,"disabled","click"],["type","button",1,"btn","btn-light","ms-1",3,"disabled","click"],[1,"col-sm-6","col-lg-6","metadata"],["cdTableDetail","",3,"data"]]},template:function(n,_){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"div"),e.YNc(3,ll,3,0,"cd-alert-panel",2),e.YNc(4,rl,3,0,"cd-alert-panel",3),e._UZ(5,"cd-table-actions",4),e.YNc(6,cl,2,4,"span",5),e._UZ(7,"cd-table-actions",6)(8,"cd-table-actions",6),e.qZA(),e.TgZ(9,"div",7)(10,"div",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10)(13,"div",0)(14,"div",11),e.YNc(15,ul,1,5,"i",12),e.TgZ(16,"tree-root",13,14),e.NdJ("updateData",function(){return _.onUpdateData()}),e.YNc(18,ml,5,5,"ng-template",null,15,e.W1O),e.qZA()(),e.YNc(20,Ml,5,2,"div",16),e.qZA()()()()()),2&n&&(e.xp6(3),e.Q6J("ngIf",!_.rgwModuleStatus),e.xp6(1),e.Q6J("ngIf",_.restartGatewayMessage),e.xp6(1),e.Q6J("permission",_.permission)("selection",_.selection)("tableActions",_.createTableActions),e.xp6(1),e.Q6J("ngIf",_.showMigrateAction),e.xp6(1),e.Q6J("permission",_.permission)("btnColor","light")("selection",_.selection)("tableActions",_.importAction),e.xp6(1),e.Q6J("permission",_.permission)("btnColor","light")("selection",_.selection)("tableActions",_.exportAction),e.xp6(7),e.Q6J("ngIf",_.loadingIndicator),e.xp6(1),e.Q6J("nodes",_.nodes)("options",_.treeOptions),e.xp6(4),e.Q6J("ngIf",_.metadata))},dependencies:[T.mk,T.O5,Re.G,f_.b,Je.K,k.o,J.rH,je.qr],styles:[".tree-container[_ngcontent-%COMP%]{height:calc(100vh - 200px)}.align-inline-btns[_ngcontent-%COMP%]{margin-left:5em}.btn[_ngcontent-%COMP%]:disabled{pointer-events:none}"]}),(0,xe.gn)([(0,nl.bH)(),(0,xe.w6)("design:type",Object)],Te.prototype,"blockUI",void 0);var Sl=c(40267),Cl=c(7357),Ol=c(11656),Fl=c(4167),Pl=c(43190),Nl=c(68307),Gl=c(47349),Al=c(79241),Il=c(98677),bl=c(30490),hl=c(9219),Ll=c(17401),Wl=c(9024),$l=c(54740);const me=function(t,n){return[t,n]};let Zl=(()=>{class t{constructor(){this.icons=$.P}}return t.\u0275fac=function(_){return new(_||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-sync-primary-zone"]],inputs:{realm:"realm",zonegroup:"zonegroup",zone:"zone"},decls:17,vars:23,consts:[[1,"pb-5"],[1,"pt-2",3,"ngClass"],[1,"badge","badge-info","mt-2"],[1,"mt-2",3,"ngClass"]],template:function(_,o){1&_&&(e.TgZ(0,"ul",0)(1,"li"),e._UZ(2,"i",1),e.qZA(),e.TgZ(3,"li",2),e._uU(4),e.qZA(),e.TgZ(5,"li"),e._UZ(6,"i",3),e.qZA(),e.TgZ(7,"li"),e._UZ(8,"i",3),e.qZA(),e.TgZ(9,"p",2),e._uU(10),e.qZA(),e.TgZ(11,"li"),e._UZ(12,"i",3),e.qZA(),e.TgZ(13,"li"),e._UZ(14,"i",3),e.qZA(),e.TgZ(15,"li",2),e._uU(16),e.qZA()()),2&_&&(e.xp6(2),e.Q6J("ngClass",e.WLB(8,me,o.icons.large2x,o.icons.reweight)),e.xp6(2),e.Oqu(o.realm),e.xp6(2),e.Q6J("ngClass",e.WLB(11,me,o.icons.large2x,o.icons.down)),e.xp6(2),e.Q6J("ngClass",e.WLB(14,me,o.icons.large2x,o.icons.cubes)),e.xp6(2),e.Oqu(o.zonegroup),e.xp6(2),e.Q6J("ngClass",e.WLB(17,me,o.icons.large2x,o.icons.down)),e.xp6(2),e.Q6J("ngClass",e.WLB(20,me,o.icons.large2x,o.icons.deploy)),e.xp6(2),e.Oqu(o.zone))},dependencies:[T.mk],styles:["ul[_ngcontent-%COMP%]{align-items:center;display:flex;flex-direction:column;list-style-type:none}.align-primary-zone[_ngcontent-%COMP%]{padding-left:4em}"]}),t})();var h_=c(90068);function Dl(t,n){1&t&&(e.TgZ(0,"span")(1,"ul",1)(2,"li")(3,"b"),e._uU(4,"Status:"),e.qZA()(),e.TgZ(5,"li"),e._uU(6,"No Sync"),e.qZA()()())}function Ul(t,n){if(1&t&&(e.TgZ(0,"span")(1,"b"),e._uU(2),e.ALo(3,"titlecase"),e.qZA(),e._uU(4),e.ALo(5,"titlecase"),e.qZA()),2&t){const _=e.oxw(2).$implicit;e.xp6(2),e.Oqu(e.lcZ(3,2,_.split(":")[0])),e.xp6(2),e.hij(":",e.lcZ(5,4,_.split(":")[1])," ")}}function vl(t,n){if(1&t&&(e.TgZ(0,"span")(1,"b"),e._uU(2),e.ALo(3,"titlecase"),e.qZA()()),2&t){const _=e.oxw(2).$implicit;e.xp6(2),e.Oqu(e.lcZ(3,1,_))}}function yl(t,n){if(1&t&&(e.TgZ(0,"span"),e.YNc(1,Ul,6,6,"span",0),e.YNc(2,vl,4,3,"span",0),e.qZA()),2&t){const _=e.oxw().$implicit;e.xp6(1),e.Q6J("ngIf",null==_?null:_.includes(":")),e.xp6(1),e.Q6J("ngIf",!(null!=_&&_.includes(":")))}}function wl(t,n){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"titlecase"),e.qZA()),2&t){const _=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.lcZ(2,1,_)," ")}}function xl(t,n){if(1&t&&(e.TgZ(0,"li"),e.YNc(1,yl,3,2,"span",0),e.YNc(2,wl,3,3,"span",0),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(3);e.xp6(1),e.Q6J("ngIf",!(null!=_&&_.includes(o.metadataSyncInfo.syncstatus)||null!=_&&_.includes("failed")||null!=_&&_.includes("error"))),e.xp6(1),e.Q6J("ngIf",(null==_?null:_.includes("failed"))||(null==_?null:_.includes("error")))}}function kl(t,n){if(1&t&&(e.TgZ(0,"ul",8)(1,"li")(2,"h5")(3,"b"),e._uU(4,"Metadata Sync Status:"),e.qZA()()(),e.YNc(5,xl,3,2,"li",9),e.qZA()),2&t){const _=e.oxw(2);e.xp6(5),e.Q6J("ngForOf",_.metadataSyncInfo.fullSyncStatus)}}function zl(t,n){1&t&&(e.TgZ(0,"li",10),e._uU(1,"Up to Date"),e.qZA())}function ql(t,n){if(1&t&&(e.TgZ(0,"a",12),e.SDv(1,13),e.ALo(2,"titlecase"),e.qZA()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.Q6J("ngbPopover",_),e.xp6(2),e.pQV(e.lcZ(2,2,o.metadataSyncInfo.syncstatus)),e.QtT(1)}}function Hl(t,n){if(1&t&&(e.TgZ(0,"a",12),e.SDv(1,14),e.qZA()),2&t){e.oxw(2);const _=e.MAs(2);e.Q6J("ngbPopover",_)}}function Xl(t,n){if(1&t&&(e.YNc(0,ql,3,4,"a",11),e.YNc(1,Hl,2,1,"a",11)),2&t){const _=e.oxw(2);e.Q6J("ngIf","Not Syncing From Zone"!==_.metadataSyncInfo.syncstatus),e.xp6(1),e.Q6J("ngIf","Not Syncing From Zone"===_.metadataSyncInfo.syncstatus)}}const Bl=function(t){return[t]};function Ql(t,n){if(1&t&&(e.TgZ(0,"li"),e._UZ(1,"i",15),e.TgZ(2,"a",16),e.SDv(3,17),e.qZA()()),2&t){e.oxw();const _=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(2,Bl,o.icons.danger)),e.xp6(1),e.Q6J("ngbPopover",_)}}function Yl(t,n){if(1&t&&(e.TgZ(0,"li",18),e._uU(1),e.ALo(2,"relativeDate"),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.Oqu(e.lcZ(2,1,_.metadataSyncInfo.timestamp))}}function Jl(t,n){if(1&t&&(e.TgZ(0,"span"),e.YNc(1,kl,6,1,"ng-template",null,2,e.W1O),e.TgZ(3,"ul",1),e.YNc(4,zl,2,0,"ng-template",null,3,e.W1O),e.YNc(6,Xl,2,2,"ng-template",null,4,e.W1O),e.TgZ(8,"li")(9,"b"),e._uU(10,"Status:"),e.qZA()(),e.YNc(11,Ql,4,4,"li",5),e.TgZ(12,"li",6),e._uU(13," Last Synced: "),e.qZA(),e.YNc(14,Yl,3,3,"li",7),e.qZA()()),2&t){const _=e.MAs(5),o=e.MAs(7),i=e.oxw();e.xp6(11),e.Q6J("ngIf",(null==i.metadataSyncInfo.syncstatus?null:i.metadataSyncInfo.syncstatus.includes("failed"))||(null==i.metadataSyncInfo.syncstatus?null:i.metadataSyncInfo.syncstatus.includes("error")))("ngIfElse",o),e.xp6(3),e.Q6J("ngIf",i.metadataSyncInfo.timestamp)("ngIfElse",_)}}let Kl=(()=>{class t{constructor(){this.icons=$.P,this.metadataSyncInfo={}}}return t.\u0275fac=function(_){return new(_||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-sync-metadata-info"]],inputs:{metadataSyncInfo:"metadataSyncInfo"},decls:2,vars:2,consts:function(){let n,_,o;return n="" + "\ufffd0\ufffd" + "",_="Not Syncing",o="Error",[[4,"ngIf"],[1,"me-2"],["metadataSyncPopover",""],["upToDateTpl",""],["showMetadataStatus",""],[4,"ngIf","ngIfElse"],[1,"mt-4","fw-bold"],["class","badge badge-info",4,"ngIf","ngIfElse"],[1,"text-center"],[4,"ngFor","ngForOf"],[1,"badge","badge-success"],["class","lead text-primary","placement","top","popoverClass","rgw-overview-card-popover",3,"ngbPopover",4,"ngIf"],["placement","top","popoverClass","rgw-overview-card-popover",1,"lead","text-primary",3,"ngbPopover"],n,_,[1,"text-danger",3,"ngClass"],["placement","top","popoverClass","rgw-overview-card-popover",1,"lead","text-danger",3,"ngbPopover"],o,[1,"badge","badge-info"]]},template:function(_,o){1&_&&(e.YNc(0,Dl,7,0,"span",0),e.YNc(1,Jl,15,4,"span",0)),2&_&&(e.Q6J("ngIf","no sync (zone is master)"===o.metadataSyncInfo),e.xp6(1),e.Q6J("ngIf","no sync (zone is master)"!==o.metadataSyncInfo))},dependencies:[T.mk,T.sg,T.O5,G.o8,T.rS,h_.h],styles:["ul[_ngcontent-%COMP%]{align-items:center;display:flex;flex-direction:column;list-style-type:none}"]}),t})();function Vl(t,n){if(1&t&&(e.TgZ(0,"span")(1,"b"),e._uU(2),e.ALo(3,"titlecase"),e.qZA(),e._uU(4),e.ALo(5,"titlecase"),e.qZA()),2&t){const _=e.oxw(2).$implicit;e.xp6(2),e.Oqu(e.lcZ(3,2,_.split(": ")[0])),e.xp6(2),e.hij(":",e.lcZ(5,4,_.split(": ")[1])," ")}}function jl(t,n){if(1&t&&(e.TgZ(0,"span")(1,"b"),e._uU(2),e.ALo(3,"titlecase"),e.qZA()()),2&t){const _=e.oxw(2).$implicit;e.xp6(2),e.Oqu(e.lcZ(3,1,_))}}function er(t,n){if(1&t&&(e.TgZ(0,"span"),e.YNc(1,Vl,6,6,"span",9),e.YNc(2,jl,4,3,"span",9),e.qZA()),2&t){const _=e.oxw().$implicit;e.xp6(1),e.Q6J("ngIf",null==_?null:_.includes(":")),e.xp6(1),e.Q6J("ngIf",!(null!=_&&_.includes(":")))}}function _r(t,n){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"titlecase"),e.qZA()),2&t){const _=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.lcZ(2,1,_)," ")}}function tr(t,n){if(1&t&&(e.TgZ(0,"li"),e.YNc(1,er,3,2,"span",9),e.YNc(2,_r,3,3,"span",9),e.qZA()),2&t){const _=n.$implicit,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",!(null!=_&&_.includes(o.zone.name)||null!=_&&_.includes(o.zone.syncstatus)||null!=_&&_.includes("failed")||null!=_&&_.includes("error"))),e.xp6(1),e.Q6J("ngIf",(null==_?null:_.includes("failed"))||(null==_?null:_.includes("error")))}}function or(t,n){if(1&t&&(e.TgZ(0,"ul",7)(1,"li")(2,"h5")(3,"b"),e._uU(4,"Sync Status:"),e.qZA()()(),e.YNc(5,tr,3,2,"li",8),e.qZA()),2&t){const _=e.oxw();e.xp6(5),e.Q6J("ngForOf",_.zone.fullSyncStatus)}}function nr(t,n){1&t&&(e.TgZ(0,"li",10),e._uU(1,"Up to Date"),e.qZA())}function ir(t,n){if(1&t&&(e.TgZ(0,"a",12),e.SDv(1,13),e.ALo(2,"titlecase"),e.qZA()),2&t){const _=e.oxw(2),o=e.MAs(1);e.Q6J("ngbPopover",o),e.xp6(2),e.pQV(e.lcZ(2,2,_.zone.syncstatus)),e.QtT(1)}}function sr(t,n){if(1&t&&(e.TgZ(0,"a",12),e.SDv(1,14),e.qZA()),2&t){e.oxw(2);const _=e.MAs(1);e.Q6J("ngbPopover",_)}}function ar(t,n){if(1&t&&(e.YNc(0,ir,3,4,"a",11),e.YNc(1,sr,2,1,"a",11)),2&t){const _=e.oxw();e.Q6J("ngIf","Not Syncing From Zone"!==_.zone.syncstatus),e.xp6(1),e.Q6J("ngIf","Not Syncing From Zone"===_.zone.syncstatus)}}const lr=function(t){return[t]};function rr(t,n){if(1&t&&(e.TgZ(0,"li"),e._UZ(1,"i",15),e.TgZ(2,"a",16),e.SDv(3,17),e.qZA()()),2&t){const _=e.oxw(),o=e.MAs(1);e.xp6(1),e.Q6J("ngClass",e.VKq(2,lr,_.icons.danger)),e.xp6(1),e.Q6J("ngbPopover",o)}}function cr(t,n){if(1&t&&(e.TgZ(0,"li",18),e._uU(1),e.ALo(2,"relativeDate"),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Oqu(e.lcZ(2,1,_.zone.timestamp))}}let dr=(()=>{class t{constructor(){this.icons=$.P,this.zone={}}}return t.\u0275fac=function(_){return new(_||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-sync-data-info"]],inputs:{zone:"zone"},decls:14,vars:4,consts:function(){let n,_,o;return n="" + "\ufffd0\ufffd" + "",_="Not Syncing",o="Error",[["syncPopover",""],[1,"me-2"],["upToDateTpl",""],["showStatus",""],[4,"ngIf","ngIfElse"],[1,"mt-4","fw-bold"],["class","badge badge-info",4,"ngIf","ngIfElse"],[1,"text-center"],[4,"ngFor","ngForOf"],[4,"ngIf"],[1,"badge","badge-success"],["class","lead text-primary","placement","top","popoverClass","rgw-overview-card-popover",3,"ngbPopover",4,"ngIf"],["placement","top","popoverClass","rgw-overview-card-popover",1,"lead","text-primary",3,"ngbPopover"],n,_,[1,"text-danger",3,"ngClass"],["placement","top","popoverClass","rgw-overview-card-popover",1,"lead","text-danger",3,"ngbPopover"],o,[1,"badge","badge-info"]]},template:function(_,o){if(1&_&&(e.YNc(0,or,6,1,"ng-template",null,0,e.W1O),e.TgZ(2,"ul",1),e.YNc(3,nr,2,0,"ng-template",null,2,e.W1O),e.YNc(5,ar,2,2,"ng-template",null,3,e.W1O),e.TgZ(7,"li")(8,"b"),e._uU(9,"Status:"),e.qZA()(),e.YNc(10,rr,4,4,"li",4),e.TgZ(11,"li",5),e._uU(12," Last Synced: "),e.qZA(),e.YNc(13,cr,3,3,"li",6),e.qZA()),2&_){const i=e.MAs(4),s=e.MAs(6);e.xp6(10),e.Q6J("ngIf",(null==o.zone.syncstatus?null:o.zone.syncstatus.includes("failed"))||(null==o.zone.syncstatus?null:o.zone.syncstatus.includes("error")))("ngIfElse",s),e.xp6(3),e.Q6J("ngIf",o.zone.timestamp)("ngIfElse",i)}},dependencies:[T.mk,T.sg,T.O5,G.o8,T.rS,h_.h],styles:["ul[_ngcontent-%COMP%]{align-items:center;display:flex;flex-direction:column;list-style-type:none}"]}),t})();function ur(t,n){if(1&t&&e._UZ(0,"cd-card-row",25),2&t){const _=e.oxw();e.Q6J("data",_.rgwDaemonCount)}}function gr(t,n){if(1&t&&e._UZ(0,"cd-card-row",26),2&t){const _=e.oxw();e.Q6J("data",_.rgwRealmCount)}}function Rr(t,n){if(1&t&&e._UZ(0,"cd-card-row",27),2&t){const _=e.oxw();e.Q6J("data",_.rgwZonegroupCount)}}function Tr(t,n){if(1&t&&e._UZ(0,"cd-card-row",28),2&t){const _=e.oxw();e.Q6J("data",_.rgwZoneCount)}}function Er(t,n){if(1&t&&e._UZ(0,"cd-card-row",29),2&t){const _=e.oxw();e.Q6J("data",_.rgwBucketCount)}}function fr(t,n){if(1&t&&e._UZ(0,"cd-card-row",30),2&t){const _=e.oxw();e.Q6J("data",_.UserCount)}}function pr(t,n){if(1&t&&e._UZ(0,"cd-card-row",31),2&t){const _=e.oxw();e.Q6J("data",_.objectCount)}}function mr(t,n){1&t&&(e.TgZ(0,"span",32)(1,"cd-alert-panel",33),e.tHW(2,34),e._UZ(3,"cd-doc",35),e.N_p(),e.qZA()())}const __=function(t,n,_){return[t,n,_]};function Mr(t,n){if(1&t&&(e.TgZ(0,"span",36),e._UZ(1,"i",37),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.Q6J("ngClass",e.kEZ(1,__,_.icons.large3x,_.icons.spinner,_.icons.spin))}}function Sr(t,n){if(1&t&&(e.TgZ(0,"span",36),e._UZ(1,"i",37),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.Q6J("ngClass",e.kEZ(1,__,_.icons.large3x,_.icons.spinner,_.icons.spin))}}function Cr(t,n){if(1&t&&(e.TgZ(0,"span",36),e._UZ(1,"cd-rgw-sync-primary-zone",43),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.Q6J("realm",_.realm)("zonegroup",_.zonegroup)("zone",_.zone)}}function Or(t,n){if(1&t&&(e.TgZ(0,"span",36),e._UZ(1,"i",37),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.Q6J("ngClass",e.kEZ(1,__,_.icons.large3x,_.icons.spinner,_.icons.spin))}}function Fr(t,n){if(1&t&&(e.TgZ(0,"span",51),e._UZ(1,"cd-rgw-sync-metadata-info",52),e.qZA()),2&t){const _=e.oxw(6);e.xp6(1),e.Q6J("metadataSyncInfo",_.metadataSyncInfo)}}function Pr(t,n){if(1&t&&(e.TgZ(0,"span",53),e._UZ(1,"cd-rgw-sync-data-info",54),e.qZA()),2&t){const _=e.oxw(2).$implicit;e.xp6(1),e.Q6J("zone",_)}}const Nr=function(t){return{"border-left":t}};function Gr(t,n){if(1&t&&(e.TgZ(0,"cd-card",48),e.YNc(1,Fr,2,1,"span",49),e.YNc(2,Pr,2,1,"span",50),e.qZA()),2&t){const _=n.$implicit;e.Q6J("cardTitle",_)("ngClass",e.VKq(6,Nr,"Data Sync"===_))("alignItemsCenter",!0)("justifyContentCenter",!0),e.xp6(1),e.Q6J("ngIf","Metadata Sync"===_),e.xp6(1),e.Q6J("ngIf","Data Sync"===_)}}function Ar(t,n){if(1&t&&(e.TgZ(0,"cd-card",45)(1,"div",46),e.YNc(2,Gr,3,8,"cd-card",47),e.qZA()()),2&t){const _=n.$implicit,o=e.oxw(4);e.s9C("cardTitle",_.name),e.xp6(2),e.Q6J("ngForOf",o.chartTitles)}}function Ir(t,n){if(1&t&&(e.TgZ(0,"div",1),e.YNc(1,Ar,3,2,"cd-card",44),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.Q6J("ngForOf",_.replicaZonesInfo)("ngForTrackBy",_.trackByFn)}}function br(t,n){if(1&t&&(e.TgZ(0,"div",39)(1,"cd-card",40),e.YNc(2,Sr,2,5,"span",23),e.YNc(3,Cr,2,3,"span",23),e.qZA(),e.TgZ(4,"div",41)(5,"cd-card",42),e.YNc(6,Or,2,5,"span",23),e.YNc(7,Ir,2,2,"div",24),e.qZA()()()),2&t){const _=e.oxw(2);e.xp6(1),e.Q6J("alignItemsCenter",!0)("justifyContentCenter",!0),e.xp6(1),e.Q6J("ngIf",_.loading),e.xp6(1),e.Q6J("ngIf",!_.loading),e.xp6(3),e.Q6J("ngIf",_.loading),e.xp6(1),e.Q6J("ngIf",!_.loading)}}function hr(t,n){if(1&t&&(e.TgZ(0,"div",1),e.YNc(1,br,8,6,"div",38),e.qZA()),2&t){const _=e.oxw(),o=e.MAs(30);e.xp6(1),e.Q6J("ngIf",_.showMultisiteCard)("ngIfElse",o)}}let Lr=(()=>{class t{constructor(_,o,i,s,l,r,d,u,R,O){this.authStorageService=_,this.healthService=o,this.refreshIntervalService=i,this.rgwDaemonService=s,this.rgwRealmService=l,this.rgwZonegroupService=r,this.rgwZoneService=d,this.rgwBucketService=u,this.prometheusService=R,this.rgwMultisiteService=O,this.icons=$.P,this.interval=new N_.w,this.rgwDaemonCount=0,this.rgwRealmCount=0,this.rgwZonegroupCount=0,this.rgwZoneCount=0,this.rgwBucketCount=0,this.objectCount=0,this.UserCount=0,this.totalPoolUsedBytes=0,this.averageObjectSize=0,this.multisiteInfo=[],this.queriesResults={RGW_REQUEST_PER_SECOND:"",BANDWIDTH:"",AVG_GET_LATENCY:"",AVG_PUT_LATENCY:""},this.chartTitles=["Metadata Sync","Data Sync"],this.replicaZonesInfo=[],this.showMultisiteCard=!0,this.loading=!0,this.subject=new Cl.t,this.syncCardLoading=!0,this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.daemonSub=this.rgwDaemonService.list().subscribe(_=>{this.rgwDaemonCount=_.length}),this.HealthSub=this.healthService.getClusterCapacity().subscribe(_=>{this.objectCount=_.total_objects,this.totalPoolUsedBytes=_.total_pool_bytes_used,this.averageObjectSize=_.average_object_size}),this.getSyncStatus()}),this.BucketSub=this.rgwBucketService.getTotalBucketsAndUsersLength().subscribe(_=>{this.rgwBucketCount=_.buckets_count,this.UserCount=_.users_count}),this.realmSub=this.rgwRealmService.list().subscribe(_=>{this.rgwRealmCount=_.realms.length}),this.ZonegroupSub=this.rgwZonegroupService.list().subscribe(_=>{this.rgwZonegroupCount=_.zonegroups.length}),this.ZoneSUb=this.rgwZoneService.list().subscribe(_=>{this.rgwZoneCount=_.zones.length}),this.getPrometheusData(this.prometheusService.lastHourDateObject),this.multisiteSyncStatus$=this.subject.pipe((0,Pl.w)(()=>this.rgwMultisiteService.getSyncStatus().pipe((0,Nl.b)(_=>{this.loading=!1,this.replicaZonesInfo=_.dataSyncInfo,this.metadataSyncInfo=_.metadataSyncInfo,0===this.replicaZonesInfo.length&&(this.showMultisiteCard=!1,this.syncCardLoading=!1,this.loading=!1),[this.realm,this.zonegroup,this.zone]=_.primaryZoneData}),(0,a_.K)(_=>(this.showMultisiteCard=!1,this.syncCardLoading=!1,this.loading=!1,_.preventDefault(),(0,ke.of)(!0))))),(0,Gl.d)(1))}ngOnDestroy(){this.interval.unsubscribe(),this.daemonSub.unsubscribe(),this.realmSub.unsubscribe(),this.ZonegroupSub.unsubscribe(),this.ZoneSUb.unsubscribe(),this.BucketSub.unsubscribe(),this.HealthSub.unsubscribe(),this.prometheusService.unsubscribe()}getPrometheusData(_){this.queriesResults=this.prometheusService.getPrometheusQueriesData(_,Fl.p,this.queriesResults,!0)}getSyncStatus(){this.subject.next()}trackByFn(_){return _}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ce.j),e.Y36(Al.z),e.Y36(Il.s),e.Y36(oe.b),e.Y36(de.y),e.Y36(ge.K),e.Y36(ue.g),e.Y36(Ee.o),e.Y36(Ol.Q),e.Y36(e_.o))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rgw-overview-dashboard"]],decls:34,vars:26,consts:function(){let n;return n=" Multi-site needs to be configured in order to see the multi-site sync status. Please consult the " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " on how to configure and enable the multi-site functionality. ",[[1,"container-fluid"],[1,"row"],["cardTitle","Inventory","aria-label","Inventory card",1,"col-sm-3","px-3","d-flex"],["link","/rgw/daemon","title","Gateway","summaryType","simplified",3,"data",4,"ngIf"],["link","/rgw/multisite","title","Realm","summaryType","simplified",3,"data",4,"ngIf"],["link","/rgw/multisite","title","Zone Group","summaryType","simplified",3,"data",4,"ngIf"],["link","/rgw/multisite","title","Zone","summaryType","simplified",3,"data",4,"ngIf"],["link","/rgw/bucket","title","Bucket","summaryType","simplified",3,"data",4,"ngIf"],["link","/rgw/user","title","User","summaryType","simplified",3,"data",4,"ngIf"],["title","Object","summaryType","simplified",3,"data",4,"ngIf"],["cardTitle","Performance Statistics","ria-label","Performance Statistics card",1,"col-sm-6","d-flex"],[1,"ms-4","me-4","mt-0"],[3,"selectedTime"],["chartTitle","Requests/sec","dataUnits","","label","Requests/sec",3,"data"],["chartTitle","Latency","dataUnits","ms","label","GET","label2","PUT",3,"data","data2"],["chartTitle","Bandwidth","dataUnits","B","label","GET","label2","PUT",3,"data","data2"],[1,"col-lg-3"],["cardTitle","Used Capacity","aria-label","Used Capacity",1,"col-sm-2","d-flex","w-100","h-50","pb-3",3,"alignItemsCenter","justifyContentCenter"],[1,"ms-4","me-4","text-center"],["cardTitle","Average Object Size","aria-label","Avg Object Size",1,"col-sm-2","d-flex","w-100","h-50","pt-3",3,"alignItemsCenter","justifyContentCenter"],[1,"row","pt-4","pb-4"],["cardTitle","Multi-Site Sync Status"],["notConfigured",""],["class","d-flex justify-content-center",4,"ngIf"],["class","row",4,"ngIf"],["link","/rgw/daemon","title","Gateway","summaryType","simplified",3,"data"],["link","/rgw/multisite","title","Realm","summaryType","simplified",3,"data"],["link","/rgw/multisite","title","Zone Group","summaryType","simplified",3,"data"],["link","/rgw/multisite","title","Zone","summaryType","simplified",3,"data"],["link","/rgw/bucket","title","Bucket","summaryType","simplified",3,"data"],["link","/rgw/user","title","User","summaryType","simplified",3,"data"],["title","Object","summaryType","simplified",3,"data"],[1,"pe-5","ps-5"],["type","info"],n,["section","multisite"],[1,"d-flex","justify-content-center"],[3,"ngClass"],["class","row pt-2",4,"ngIf","ngIfElse"],[1,"row","pt-2"],["cardTitle","Primary Source Zone",1,"col-lg-3","d-flex","justify-content-center","align-primary-zone",3,"alignItemsCenter","justifyContentCenter"],[1,"col-lg-9"],["cardTitle","Source Zones",1,"d-flex","h-100"],[3,"realm","zonegroup","zone"],["cardType","zone","shadowClass","true","class","col-sm-9 col-lg-6 align-replica-zones d-flex pt-4","aria-label","Source Zones Card",3,"cardTitle",4,"ngFor","ngForOf","ngForTrackBy"],["cardType","zone","shadowClass","true","aria-label","Source Zones Card",1,"col-sm-9","col-lg-6","align-replica-zones","d-flex","pt-4",3,"cardTitle"],[1,"row","pb-4","ps-3","pe-3"],["cardType","syncCards","removeBorder","true","class","col-sm-9 col-lg-6","aria-label","Charts Card",3,"cardTitle","ngClass","alignItemsCenter","justifyContentCenter",4,"ngFor","ngForOf"],["cardType","syncCards","removeBorder","true","aria-label","Charts Card",1,"col-sm-9","col-lg-6",3,"cardTitle","ngClass","alignItemsCenter","justifyContentCenter"],["class","me-2 text-center",4,"ngIf"],["class","me-2",4,"ngIf"],[1,"me-2","text-center"],[3,"metadataSyncInfo"],[1,"me-2"],[3,"zone"]]},template:function(_,o){1&_&&(e.TgZ(0,"div",0)(1,"div",1)(2,"cd-card",2),e.YNc(3,ur,1,1,"cd-card-row",3),e.YNc(4,gr,1,1,"cd-card-row",4),e.YNc(5,Rr,1,1,"cd-card-row",5),e.YNc(6,Tr,1,1,"cd-card-row",6),e.YNc(7,Er,1,1,"cd-card-row",7),e.YNc(8,fr,1,1,"cd-card-row",8),e.YNc(9,pr,1,1,"cd-card-row",9),e.qZA(),e.TgZ(10,"cd-card",10)(11,"div",11)(12,"cd-dashboard-time-selector",12),e.NdJ("selectedTime",function(s){return o.getPrometheusData(s)}),e.qZA(),e._UZ(13,"cd-dashboard-area-chart",13)(14,"cd-dashboard-area-chart",14)(15,"cd-dashboard-area-chart",15),e.qZA()(),e.TgZ(16,"div",16)(17,"cd-card",17)(18,"span",18)(19,"h1"),e._uU(20),e.ALo(21,"dimlessBinary"),e.qZA()()(),e.TgZ(22,"cd-card",19)(23,"span",18)(24,"h1"),e._uU(25),e.ALo(26,"dimlessBinary"),e.qZA()()()()(),e.TgZ(27,"div",20)(28,"cd-card",21),e.YNc(29,mr,4,0,"ng-template",null,22,e.W1O),e.YNc(31,Mr,2,5,"span",23),e.YNc(32,hr,2,2,"div",24),e.ALo(33,"async"),e.qZA()()()),2&_&&(e.xp6(3),e.Q6J("ngIf",null!=o.rgwDaemonCount),e.xp6(1),e.Q6J("ngIf",null!=o.rgwRealmCount),e.xp6(1),e.Q6J("ngIf",null!=o.rgwZonegroupCount),e.xp6(1),e.Q6J("ngIf",null!=o.rgwZoneCount),e.xp6(1),e.Q6J("ngIf",null!=o.rgwBucketCount),e.xp6(1),e.Q6J("ngIf",null!=o.UserCount),e.xp6(1),e.Q6J("ngIf",null!=o.objectCount),e.xp6(4),e.Q6J("data",o.queriesResults.RGW_REQUEST_PER_SECOND),e.xp6(1),e.Q6J("data",o.queriesResults.AVG_GET_LATENCY)("data2",o.queriesResults.AVG_PUT_LATENCY),e.xp6(1),e.Q6J("data",o.queriesResults.GET_BANDWIDTH)("data2",o.queriesResults.PUT_BANDWIDTH),e.xp6(2),e.Q6J("alignItemsCenter",!0)("justifyContentCenter",!0),e.xp6(3),e.Oqu(e.lcZ(21,20,o.totalPoolUsedBytes)),e.xp6(2),e.Q6J("alignItemsCenter",!0)("justifyContentCenter",!0),e.xp6(3),e.Oqu(e.lcZ(26,22,o.averageObjectSize)),e.xp6(6),e.Q6J("ngIf",o.loading),e.xp6(1),e.Q6J("ngIf",e.lcZ(33,24,o.multisiteSyncStatus$)))},dependencies:[T.mk,T.sg,T.O5,Re.G,bl.K,hl.A,Ll.e,Wl.S,$l.M,Zl,Kl,dr,T.Ov,Ye.$],styles:["hr[_ngcontent-%COMP%]{margin-bottom:2px;margin-top:2px}.list-group-item[_ngcontent-%COMP%]{border:0}.align-replica-zones[_ngcontent-%COMP%]{margin-left:auto;margin-right:auto;padding-left:2em;padding-right:2em}ul[_ngcontent-%COMP%]{align-items:center;display:flex;flex-direction:column;list-style-type:none}.align-primary-zone[_ngcontent-%COMP%]{padding-left:4em}.border-left[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.1254901961)}"]}),t})();var Wr=c(46767);let L_=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[T.ez,et.m,a.u5,a.UX,_t.B,G.Oz,J.Bz,G.HK,G.dT,o_.b,je.xc,Sl.t,Wr.d]}),t})();const $r=[{path:"",redirectTo:"rbd",pathMatch:"full"},{path:"daemon",component:Xo,data:{breadcrumbs:"Gateways"}},{path:"user",data:{breadcrumbs:"Users"},children:[{path:"",component:ss},{path:I.MQ.CREATE,component:O_,data:{breadcrumbs:I.Qn.CREATE}},{path:`${I.MQ.EDIT}/:uid`,component:O_,data:{breadcrumbs:I.Qn.EDIT}}]},{path:"roles",data:{breadcrumbs:"Roles",resource:"api.rgw.roles@1.0",tabs:[{name:"Users",url:"/rgw/user"},{name:"Roles",url:"/rgw/roles"}]},children:[{path:"",component:j_.c},{path:I.MQ.CREATE,component:as.U,data:{breadcrumbs:I.Qn.CREATE}}]},{path:"bucket",data:{breadcrumbs:"Buckets"},children:[{path:"",component:ho},{path:I.MQ.CREATE,component:d_,data:{breadcrumbs:I.Qn.CREATE}},{path:`${I.MQ.EDIT}/:bid`,component:d_,data:{breadcrumbs:I.Qn.EDIT}}]},{path:"overview",data:{breadcrumbs:"Overview"},children:[{path:"",component:Lr}]},{path:"multisite",children:[{path:"",component:Te}]}];let Zr=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[L_,J.Bz.forChild($r)]}),t})()}}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/95.1ae8f43a396d3fea.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/95.1ae8f43a396d3fea.js
deleted file mode 100644 (file)
index a22b03b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[95],{38095:(Fi,Fe,r)=>{r.r(Fe),r.d(Fe,{PoolModule:()=>qe,RoutedPoolModule:()=>Ai});var C=r(11048),a=r(1659),Oe=r(55860),g=r(71334),M=r(79512),d_=r(44466),u_=r(21043),P_=r(370),f_=r(23815),u=r.n(f_),E_=r(7357),g_=r(26504),ue=r(80842);class T{constructor(){this.nodes=[],this.idTree={},this.allDevices=[],this.buckets=[],this.failureDomains={},this.failureDomainKeys=[],this.devices=[],this.deviceCount=0}static searchFailureDomains(i,_){return this.getFailureDomains(this.search(i,_))}static search(i,_){const[o,n]=_.split("~"),s=i.find(c=>["name","id","type"].some(d=>c[d]===o));return s?(i=this.getSubNodes(s,this.createIdTreeFromNodes(i)),n&&(i=this.filterNodesByDeviceType(i,n)),i):[]}static createIdTreeFromNodes(i){const _={};return i.forEach(o=>{_[o.id]=o}),_}static getSubNodes(i,_){let o=[i];return i.children&&i.children.forEach(n=>{o=o.concat(this.getSubNodes(_[n],_))}),o}static filterNodesByDeviceType(i,_){let n,o=i.filter(c=>c.device_class&&c.device_class!==_).map(c=>c.id),s=o;do{n=!1,i=i.filter(d=>!o.includes(d.id));const c=[];i.forEach(d=>{d.children&&d.children.every(f=>o.includes(f))&&(c.push(d.id),n=!0)}),n&&(o=c,s=s.concat(c))}while(n);return(i=u().cloneDeep(i)).map(c=>(c.children&&(c.children=c.children.filter(d=>!s.includes(d))),c))}static getFailureDomains(i){const _={};return i.forEach(o=>{const n=o.type;_[n]||(_[n]=[]),_[n].push(o)}),_}initCrushNodeSelection(i,_,o,n){this.nodes=i,this.idTree=T.createIdTreeFromNodes(i),i.forEach(s=>{this.idTree[s.id]=s}),this.buckets=u().sortBy(i.filter(s=>s.children),"name"),this.controls={root:_,failure:o,device:n},this.preSelectRoot(),this.controls.root.valueChanges.subscribe(()=>this.onRootChange()),this.controls.failure.valueChanges.subscribe(()=>this.onFailureDomainChange()),this.controls.device.valueChanges.subscribe(()=>this.onDeviceChange())}preSelectRoot(){const i=this.nodes.find(_=>"root"===_.type);this.silentSet(this.controls.root,i),this.onRootChange()}silentSet(i,_){i.setValue(_,{emitEvent:!1})}onRootChange(){const i=T.getSubNodes(this.controls.root.value,this.idTree),_=T.getFailureDomains(i);Object.keys(_).forEach(o=>{_[o].length<=1&&delete _[o]}),this.failureDomains=_,this.failureDomainKeys=Object.keys(_).sort(),this.updateFailureDomain()}updateFailureDomain(){let i=this.getIncludedCustomValue(this.controls.failure,Object.keys(this.failureDomains));""===i&&(i=this.setMostCommonDomain(this.controls.failure)),this.updateDevices(i)}getIncludedCustomValue(i,_){return i.dirty&&_.includes(i.value)?i.value:""}setMostCommonDomain(i){let _={n:0,type:""};return Object.keys(this.failureDomains).forEach(o=>{const n=this.failureDomains[o].length;_.n<n&&(_={n,type:o})}),this.silentSet(i,_.type),_.type}onFailureDomainChange(){this.updateDevices()}updateDevices(i=this.controls.failure.value){const _=u().flatten(this.failureDomains[i].map(n=>T.getSubNodes(n,this.idTree)));this.allDevices=_.filter(n=>n.device_class).map(n=>n.device_class),this.devices=u().uniq(this.allDevices).sort();const o=1===this.devices.length?this.devices[0]:this.getIncludedCustomValue(this.controls.device,this.devices);this.silentSet(this.controls.device,o),this.onDeviceChange(o)}onDeviceChange(i=this.controls.device.value){this.deviceCount=""===i?this.allDevices.length:this.allDevices.filter(_=>_===i).length}}var Ne=r(30982),p_=r(14745),b=r(65862),R_=r(93614),be=r(95463),E=r(90070),m_=r(30633),v=r(76111),C_=r(47557),M_=r(28211),de=r(32337),e=r(89724),ve=r(62862),Ie=r(83608),$e=r(60312),Pe=r(41582),fe=r(56310),Ee=r(87925),ge=r(94276),pe=r(82945),Re=r(18372),me=r(30839),Ce=r(10545);function h_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,31),e.qZA())}function S_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,32),e.qZA())}function T_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,33),e.qZA())}function L_(t,i){1&t&&(e.TgZ(0,"option",26),e.SDv(1,34),e.qZA())}function A_(t,i){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}function F_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,36),e.qZA())}function N_(t,i){1&t&&(e.TgZ(0,"option",26),e.SDv(1,37),e.qZA())}function b_(t,i){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=i.$implicit,o=e.oxw();e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function v_(t,i){1&t&&(e.TgZ(0,"span",30),e.SDv(1,38),e.qZA())}function I_(t,i){if(1&t&&(e.TgZ(0,"option",35),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}let $_=(()=>{class t extends T{constructor(_,o,n,s,c){super(),this.formBuilder=_,this.activeModal=o,this.taskWrapper=n,this.crushRuleService=s,this.actionLabels=c,this.submitAction=new e.vpe,this.tooltips=this.crushRuleService.formTooltips,this.action=this.actionLabels.CREATE,this.resource="Crush Rule",this.createForm()}createForm(){this.form=this.formBuilder.group({name:["",[a.kI.required,a.kI.pattern("[A-Za-z0-9_-]+"),E.h.custom("uniqueName",_=>this.names&&-1!==this.names.indexOf(_))]],root:null,failure_domain:"",device_class:""})}ngOnInit(){this.crushRuleService.getInfo().subscribe(({names:_,nodes:o})=>{this.initCrushNodeSelection(o,this.form.get("root"),this.form.get("failure_domain"),this.form.get("device_class")),this.names=_})}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _=u().cloneDeep(this.form.value);_.root=_.root.name,""===_.device_class&&delete _.device_class,this.taskWrapper.wrapTaskAroundCall({task:new v.R("crushRule/create",_),call:this.crushRuleService.create(_)}).subscribe({error:()=>{this.form.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close(),this.submitAction.emit(_)}})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ve.O),e.Y36(g.Kz),e.Y36(de.P),e.Y36(Ie.H),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-crush-rule-form-modal"]],outputs:{submitAction:"submitAction"},features:[e.qOj],decls:55,vars:27,consts:function(){let i,_,o,n,s,c,d,f,p,R,h,S,m;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Root",n="Failure domain type",s="Device class",c="Let Ceph decide",d="This field is required!",f="The name can only consist of alphanumeric characters, dashes and underscores.",p="The chosen erasure code profile name is already in use.",R="Loading...",h="This field is required!",S="Loading...",m="This field is required!",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label"],_,[1,"required"],[1,"cd-col-form-input"],["type","text","id","name","name","name","placeholder","Name...","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","root",1,"cd-col-form-label"],o,[3,"html"],["id","root","name","root","formControlName","root",1,"form-select"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],["for","failure_domain",1,"cd-col-form-label"],n,["id","failure_domain","name","failure_domain","formControlName","failure_domain",1,"form-select"],["for","device_class",1,"cd-col-form-label"],s,["id","device_class","name","device_class","formControlName","device_class",1,"form-select"],["ngValue",""],c,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],d,f,p,R,[3,"ngValue"],h,S,m]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.ynx(11),e.SDv(12,9),e.BQk(),e._UZ(13,"span",10),e.qZA(),e.TgZ(14,"div",11),e._UZ(15,"input",12),e.YNc(16,h_,2,0,"span",13),e.YNc(17,S_,2,0,"span",13),e.YNc(18,T_,2,0,"span",13),e.qZA()(),e.TgZ(19,"div",7)(20,"label",14),e.ynx(21),e.SDv(22,15),e.BQk(),e._UZ(23,"cd-helper",16)(24,"span",10),e.qZA(),e.TgZ(25,"div",11)(26,"select",17),e.YNc(27,L_,2,0,"option",18),e.YNc(28,A_,2,2,"option",19),e.qZA(),e.YNc(29,F_,2,0,"span",13),e.qZA()(),e.TgZ(30,"div",7)(31,"label",20),e.ynx(32),e.SDv(33,21),e.BQk(),e._UZ(34,"cd-helper",16)(35,"span",10),e.qZA(),e.TgZ(36,"div",11)(37,"select",22),e.YNc(38,N_,2,0,"option",18),e.YNc(39,b_,2,3,"option",19),e.qZA(),e.YNc(40,v_,2,0,"span",13),e.qZA()(),e.TgZ(41,"div",7)(42,"label",23),e.ynx(43),e.SDv(44,24),e.BQk(),e._UZ(45,"cd-helper",16),e.qZA(),e.TgZ(46,"div",11)(47,"select",25)(48,"option",26),e.SDv(49,27),e.qZA(),e.YNc(50,I_,2,2,"option",19),e.qZA()()()(),e.TgZ(51,"div",28)(52,"cd-form-button-panel",29),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(53,"titlecase"),e.ALo(54,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const n=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,19,o.action))(e.lcZ(4,21,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.form),e.xp6(10),e.Q6J("ngIf",o.form.showError("name",n,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"pattern")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"uniqueName")),e.xp6(5),e.Q6J("html",o.tooltips.root),e.xp6(4),e.Q6J("ngIf",!o.buckets),e.xp6(1),e.Q6J("ngForOf",o.buckets),e.xp6(1),e.Q6J("ngIf",o.form.showError("root",n,"required")),e.xp6(5),e.Q6J("html",o.tooltips.failure_domain),e.xp6(4),e.Q6J("ngIf",!o.failureDomains),e.xp6(1),e.Q6J("ngForOf",o.failureDomainKeys),e.xp6(1),e.Q6J("ngIf",o.form.showError("failure_domain",n,"required")),e.xp6(5),e.Q6J("html",o.tooltips.device_class),e.xp6(5),e.Q6J("ngForOf",o.devices),e.xp6(2),e.Q6J("form",o.form)("submitText",e.lcZ(53,23,o.action)+" "+e.lcZ(54,25,o.resource))}},directives:[$e.z,a._Y,a.JL,Pe.V,a.sg,fe.P,Ee.o,a.Fj,ge.b,a.JJ,a.u,pe.U,C.O5,Re.S,a.EJ,a.YN,a.Kr,C.sg,me.p],pipes:[C.rS,Ce.m],styles:[""]}),t})();class D_{}var x_=r(19725);let Me=(()=>{class t{constructor(_){this.http=_,this.apiPath="api/erasure_code_profile",this.formTooltips={k:"Each object is split in data-chunks parts, each stored on a different OSD.",m:"Compute coding chunks for each object and store them on different OSDs.\n      The number of coding chunks is also the number of OSDs that can be down without losing data.",plugins:{jerasure:{description:"The jerasure plugin is the most generic and flexible plugin,\n          it is also the default for Ceph erasure coded pools.",technique:"The more flexible technique is reed_sol_van : it is enough to set k\n          and m. The cauchy_good technique can be faster but you need to chose the packetsize\n          carefully. All of reed_sol_r6_op, liberation, blaum_roth, liber8tion are RAID6 equivalents\n          in the sense that they can only be configured with m=2.",packetSize:"The encoding will be done on packets of bytes size at a time.\n          Choosing the right packet size is difficult.\n          The jerasure documentation contains extensive information on this topic."},lrc:{description:"With the jerasure plugin, when an erasure coded object is stored on\n          multiple OSDs, recovering from the loss of one OSD requires reading from all the others.\n          For instance if jerasure is configured with k=8 and m=4, losing one OSD requires reading\n          from the eleven others to repair.\n\n          The lrc erasure code plugin creates local parity chunks to be able to recover using\n          less OSDs. For instance if lrc is configured with k=8, m=4 and l=4, it will create\n          an additional parity chunk for every four OSDs. When a single OSD is lost, it can be\n          recovered with only four OSDs instead of eleven.",l:"Group the coding and data chunks into sets of size locality. For instance,\n          for k=4 and m=2, when locality=3 two groups of three are created. Each set can\n          be recovered without reading chunks from another set.",crushLocality:"The type of the crush bucket in which each set of chunks defined\n          by l will be stored. For instance, if it is set to rack, each group of l chunks will be\n          placed in a different rack. It is used to create a CRUSH rule step such as step choose\n          rack. If it is not set, no such grouping is done."},isa:{description:"The isa plugin encapsulates the ISA library. It only runs on Intel processors.",technique:"The ISA plugin comes in two Reed Solomon forms.\n          If reed_sol_van is set, it is Vandermonde, if cauchy is set, it is Cauchy."},shec:{description:"The shec plugin encapsulates the multiple SHEC library.\n          It allows ceph to recover data more efficiently than Reed Solomon codes.",c:"The number of parity chunks each of which includes each data chunk in its\n          calculation range. The number is used as a durability estimator. For instance, if c=2,\n          2 OSDs can be down without losing data."},clay:{description:"CLAY (short for coupled-layer) codes are erasure codes designed to\n          bring about significant savings in terms of network bandwidth and disk IO when a failed\n          node/OSD/rack is being repaired.",d:"Number of OSDs requested to send data during recovery of a single chunk.\n          d needs to be chosen such that k+1 <= d <= k+m-1. The larger the d, the better\n          the savings.",scalar_mds:"scalar_mds specifies the plugin that is used as a building block\n          in the layered construction. It can be one of jerasure, isa, shec.",technique:"technique specifies the technique that will be picked\n          within the 'scalar_mds' plugin specified. Supported techniques\n          are 'reed_sol_van', 'reed_sol_r6_op', 'cauchy_orig',\n          'cauchy_good', 'liber8tion' for jerasure, 'reed_sol_van',\n          'cauchy' for isa and 'single', 'multiple' for shec."}},crushRoot:"The name of the crush bucket used for the first step of the CRUSH rule.\n      For instance step take default.",crushFailureDomain:"Ensure that no two chunks are in a bucket with the same failure\n      domain. For instance, if the failure domain is host no two chunks will be stored on the same\n      host. It is used to create a CRUSH rule step such as step chooseleaf host.",crushDeviceClass:"Restrict placement to devices of a specific class\n      (e.g., ssd or hdd), using the crush device class names in the CRUSH map.",directory:"Set the directory name from which the erasure code plugin is loaded."}}list(){return this.http.get(this.apiPath)}create(_){return this.http.post(this.apiPath,_,{observe:"response"})}delete(_){return this.http.delete(`${this.apiPath}/${_}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return t.\u0275fac=function(_){return new(_||t)(e.LFG(x_.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function y_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,47),e.qZA())}function Z_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,48),e.qZA())}function U_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,49),e.qZA())}function H_(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,50),e.qZA())}function G_(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}function z_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,52),e.qZA())}function q_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,53),e.qZA())}function X_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,54),e.qZA())}function w_(t,i){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,55),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.deviceCount),e.QtT(1)}}function Q_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,56),e.qZA())}function J_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,57),e.qZA())}function k_(t,i){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,58),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.lrcMultiK),e.QtT(1)}}function V_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,59),e.qZA())}function Y_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,60),e.qZA())}function B_(t,i){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,61),e.qZA()),2&t){const _=e.oxw();e.xp6(1),e.pQV(_.deviceCount),e.QtT(1)}}function j_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,65),e.qZA())}function K_(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,66),e.qZA())}function W_(t,i){if(1&t&&(e.TgZ(0,"div",7)(1,"label",62)(2,"span",14),e.SDv(3,63),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",64),e.YNc(7,j_,2,0,"span",12),e.YNc(8,K_,2,0,"span",12),e.qZA()()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.shec.c),e.xp6(3),e.Q6J("ngIf",_.form.showError("c",o,"min")),e.xp6(1),e.Q6J("ngIf",_.form.showError("c",o,"cGreaterM"))}}function eo(t,i){1&t&&(e.TgZ(0,"span",39),e.SDv(1,74),e.qZA())}function _o(t,i){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,75),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.pQV(_.getDMin())(_.getDMax()),e.QtT(1)}}function oo(t,i){if(1&t&&(e.TgZ(0,"span",39),e.SDv(1,76),e.qZA()),2&t){const _=e.oxw(3);e.xp6(1),e.pQV(_.getDMax()),e.QtT(1)}}function to(t,i){if(1&t&&(e.ynx(0),e.YNc(1,_o,2,2,"span",23),e.YNc(2,oo,2,1,"span",23),e.BQk()),2&t){const _=e.oxw(2);e.xp6(1),e.Q6J("ngIf",_.getDMin()<_.getDMax()),e.xp6(1),e.Q6J("ngIf",_.getDMin()===_.getDMax())}}function io(t,i){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,77),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.pQV(_.getDMin()),e.QtT(1)}}function no(t,i){if(1&t&&(e.TgZ(0,"span",46),e.SDv(1,78),e.qZA()),2&t){const _=e.oxw(2);e.xp6(1),e.pQV(_.getDMax()),e.QtT(1)}}function so(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div",7)(1,"label",67)(2,"span",14),e.SDv(3,68),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10)(6,"div",69),e._UZ(7,"input",70),e.TgZ(8,"button",71),e.NdJ("click",function(){return e.CHM(_),e.oxw().toggleDCalc()}),e._UZ(9,"i",72),e.qZA()(),e.YNc(10,eo,2,0,"span",23),e.YNc(11,to,3,2,"ng-container",73),e.YNc(12,io,2,1,"span",12),e.YNc(13,no,2,1,"span",12),e.qZA()()}if(2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.clay.d),e.xp6(5),e.Q6J("ngClass",_.dCalc?_.icons.unlock:_.icons.lock),e.xp6(1),e.Q6J("ngIf",_.dCalc),e.xp6(1),e.Q6J("ngIf",!_.dCalc),e.xp6(1),e.Q6J("ngIf",_.form.showError("d",o,"dMin")),e.xp6(1),e.Q6J("ngIf",_.form.showError("d",o,"dMax"))}}function ao(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,83),e.qZA())}function lo(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,84),e.qZA())}function ro(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,85),e.qZA())}function co(t,i){if(1&t&&(e.TgZ(0,"div",7)(1,"label",79)(2,"span",14),e.SDv(3,80),e.qZA(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",81),e.YNc(7,ao,2,0,"span",12),e.YNc(8,lo,2,0,"span",12),e.YNc(9,ro,2,0,"span",12),e.TgZ(10,"span",39),e.SDv(11,82),e.qZA()()()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.lrc.l),e.xp6(3),e.Q6J("ngIf",_.form.showError("l",o,"required")),e.xp6(1),e.Q6J("ngIf",_.form.showError("l",o,"min")),e.xp6(1),e.Q6J("ngIf",_.form.showError("l",o,"unequal")),e.xp6(2),e.pQV(_.lrcGroups),e.QtT(11)}}function Oo(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,86),e.qZA())}function uo(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit,o=e.oxw();e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function Po(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,90),e.qZA())}function fo(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,91),e.qZA())}function Eo(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit,o=e.oxw(2);e.Q6J("ngValue",_),e.xp6(1),e.AsE(" ",_," ( ",o.failureDomains[_].length," ) ")}}function go(t,i){if(1&t&&(e.TgZ(0,"div",7)(1,"label",87),e.ynx(2),e.SDv(3,88),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10)(6,"select",89),e.YNc(7,Po,2,0,"option",18),e.YNc(8,fo,2,0,"option",18),e.YNc(9,Eo,2,3,"option",19),e.qZA()()()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins.lrc.crushLocality),e.xp6(3),e.Q6J("ngIf",!_.failureDomains),e.xp6(1),e.Q6J("ngIf",_.failureDomainKeys.length>0),e.xp6(1),e.Q6J("ngForOf",_.failureDomainKeys)}}function po(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}const De=function(t,i,_){return[t,i,_]};function Ro(t,i){if(1&t&&(e.TgZ(0,"div",7)(1,"label",92),e.ynx(2),e.SDv(3,93),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10)(6,"select",94),e.YNc(7,po,2,2,"option",19),e.qZA()()()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins.clay.scalar_mds),e.xp6(3),e.Q6J("ngForOf",e.kEZ(2,De,_.PLUGIN.JERASURE,_.PLUGIN.ISA,_.PLUGIN.SHEC))}}function mo(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}function Co(t,i){if(1&t&&(e.TgZ(0,"div",7)(1,"label",95),e.ynx(2),e.SDv(3,96),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10)(6,"select",97),e.YNc(7,mo,2,2,"option",19),e.qZA()()()),2&t){const _=e.oxw();e.xp6(4),e.Q6J("html",_.tooltips.plugins[_.plugin].technique),e.xp6(3),e.Q6J("ngForOf",_.techniques)}}function Mo(t,i){1&t&&(e.TgZ(0,"span",46),e.SDv(1,101),e.qZA())}function ho(t,i){if(1&t&&(e.TgZ(0,"div",7)(1,"label",98),e.ynx(2),e.SDv(3,99),e.BQk(),e._UZ(4,"cd-helper",16),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",100),e.YNc(7,Mo,2,0,"span",12),e.qZA()()),2&t){const _=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("html",_.tooltips.plugins.jerasure.packetSize),e.xp6(3),e.Q6J("ngIf",_.form.showError("packetSize",o,"min"))}}function So(t,i){1&t&&(e.TgZ(0,"option",37),e.SDv(1,102),e.qZA())}function To(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}function Lo(t,i){if(1&t&&(e.TgZ(0,"option",51),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_," ")}}let Ao=(()=>{class t extends T{constructor(_,o,n,s,c){super(),this.formBuilder=_,this.activeModal=o,this.taskWrapper=n,this.ecpService=s,this.actionLabels=c,this.submitAction=new e.vpe,this.tooltips=this.ecpService.formTooltips,this.PLUGIN={LRC:"lrc",SHEC:"shec",CLAY:"clay",JERASURE:"jerasure",ISA:"isa"},this.plugin=this.PLUGIN.JERASURE,this.icons=b.P,this.action=this.actionLabels.CREATE,this.resource="EC Profile",this.createForm(),this.setJerasureDefaults()}createForm(){this.form=this.formBuilder.group({name:[null,[a.kI.required,a.kI.pattern("[A-Za-z0-9_-]+"),E.h.custom("uniqueName",_=>this.names&&-1!==this.names.indexOf(_))]],plugin:[this.PLUGIN.JERASURE,[a.kI.required]],k:[4,[a.kI.required,E.h.custom("max",()=>this.baseValueValidation(!0)),E.h.custom("unequal",_=>this.lrcDataValidation(_)),E.h.custom("kLowerM",_=>this.shecDataValidation(_))]],m:[2,[a.kI.required,E.h.custom("max",()=>this.baseValueValidation())]],crushFailureDomain:"",crushRoot:null,crushDeviceClass:"",directory:"",technique:"reed_sol_van",packetSize:[2048],l:[3,[a.kI.required,E.h.custom("unequal",_=>this.lrcLocalityValidation(_))]],crushLocality:"",c:[2,[a.kI.required,E.h.custom("cGreaterM",_=>this.shecDurabilityValidation(_))]],d:[5,[a.kI.required,E.h.custom("dMin",_=>this.dMinValidation(_)),E.h.custom("dMax",_=>this.dMaxValidation(_))]],scalar_mds:[this.PLUGIN.JERASURE,[a.kI.required]]}),this.toggleDCalc(),this.form.get("k").valueChanges.subscribe(()=>this.updateValidityOnChange(["m","l","d"])),this.form.get("m").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","l","c","d"])),this.form.get("l").valueChanges.subscribe(()=>this.updateValidityOnChange(["k","m"])),this.form.get("plugin").valueChanges.subscribe(_=>this.onPluginChange(_)),this.form.get("scalar_mds").valueChanges.subscribe(()=>this.setClayDefaultsForScalar())}baseValueValidation(_=!1){return this.validValidation(()=>this.getKMSum()>this.deviceCount&&this.form.getValue("k")>this.form.getValue("m")===_)}validValidation(_,o){return!((!this.form||o)&&this.plugin!==o)&&_()}getKMSum(){return this.form.getValue("k")+this.form.getValue("m")}lrcDataValidation(_){return this.validValidation(()=>{const o=this.form.getValue("m"),n=this.form.getValue("l"),s=_+o;return this.lrcMultiK=_/(s/n),_%(s/n)!=0},"lrc")}shecDataValidation(_){return this.validValidation(()=>this.form.getValue("m")>_,"shec")}lrcLocalityValidation(_){return this.validValidation(()=>{const o=this.getKMSum();return this.lrcGroups=_>0?o/_:0,_>0&&o%_!=0},"lrc")}shecDurabilityValidation(_){return this.validValidation(()=>{const o=this.form.getValue("m");return _>o},"shec")}dMinValidation(_){return this.validValidation(()=>this.getDMin()>_,"clay")}getDMin(){return this.form.getValue("k")+1}dMaxValidation(_){return this.validValidation(()=>_>this.getDMax(),"clay")}getDMax(){const _=this.form.getValue("m");return this.form.getValue("k")+_-1}toggleDCalc(){this.dCalc=!this.dCalc,this.form.get("d")[this.dCalc?"disable":"enable"](),this.calculateD()}calculateD(){this.plugin!==this.PLUGIN.CLAY||!this.dCalc||this.form.silentSet("d",this.getDMax())}updateValidityOnChange(_){_.forEach(o=>{"d"===o&&this.calculateD(),this.form.get(o).updateValueAndValidity({emitEvent:!1})})}onPluginChange(_){this.plugin=_,_===this.PLUGIN.JERASURE?this.setJerasureDefaults():_===this.PLUGIN.LRC?this.setLrcDefaults():_===this.PLUGIN.ISA?this.setIsaDefaults():_===this.PLUGIN.SHEC?this.setShecDefaults():_===this.PLUGIN.CLAY&&this.setClayDefaults(),this.updateValidityOnChange(["m"])}setJerasureDefaults(){this.techniques=["reed_sol_van","reed_sol_r6_op","cauchy_orig","cauchy_good","liberation","blaum_roth","liber8tion"],this.setDefaults({k:4,m:2,technique:"reed_sol_van"})}setLrcDefaults(){this.setDefaults({k:4,m:2,l:3})}setIsaDefaults(){this.techniques=["reed_sol_van","cauchy"],this.setDefaults({k:7,m:3,technique:"reed_sol_van"})}setShecDefaults(){this.setDefaults({k:4,m:3,c:2})}setClayDefaults(){this.setDefaults({k:4,m:2,scalar_mds:this.PLUGIN.JERASURE}),this.setClayDefaultsForScalar()}setClayDefaultsForScalar(){const _=this.form.getValue("scalar_mds");let o="reed_sol_van";_===this.PLUGIN.JERASURE?this.techniques=["reed_sol_van","reed_sol_r6_op","cauchy_orig","cauchy_good","liber8tion"]:_===this.PLUGIN.ISA?this.techniques=["reed_sol_van","cauchy"]:(o="single",this.techniques=["single","multiple"]),this.setDefaults({technique:o})}setDefaults(_){Object.keys(_).forEach(o=>{const n=this.form.get(o),s=n.value;n.pristine||"technique"===o&&!this.techniques.includes(s)||"k"===o&&[4,7].includes(s)||"m"===o&&[2,3].includes(s)?n.setValue(_[o]):n.updateValueAndValidity()})}ngOnInit(){this.ecpService.getInfo().subscribe(({plugins:_,names:o,directory:n,nodes:s})=>{this.initCrushNodeSelection(s,this.form.get("crushRoot"),this.form.get("crushFailureDomain"),this.form.get("crushDeviceClass")),this.plugins=_,this.names=o,this.form.silentSet("directory",n),this.preValidateNumericInputFields()})}preValidateNumericInputFields(){const _=["k","m","l","c","d"].map(o=>this.form.get(o));_.forEach(o=>{o.markAsTouched(),o.markAsDirty()}),_[1].updateValueAndValidity()}onSubmit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _=this.createJson();this.taskWrapper.wrapTaskAroundCall({task:new v.R("ecp/create",{name:_.name}),call:this.ecpService.create(_)}).subscribe({error:()=>{this.form.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close(),this.submitAction.emit(_)}})}createJson(){const _={technique:[this.PLUGIN.ISA,this.PLUGIN.JERASURE,this.PLUGIN.CLAY],packetSize:[this.PLUGIN.JERASURE],l:[this.PLUGIN.LRC],crushLocality:[this.PLUGIN.LRC],c:[this.PLUGIN.SHEC],d:[this.PLUGIN.CLAY],scalar_mds:[this.PLUGIN.CLAY]},o=new D_,n=this.form.getValue("plugin");return Object.keys(this.form.controls).filter(s=>{const c=_[s],d=this.form.getValue(s);return(c&&c.includes(n)||!c)&&d&&""!==d}).forEach(s=>{this.extendJson(s,o)}),o}extendJson(_,o){const s=this.form.getValue(_);o[{crushFailureDomain:"crush-failure-domain",crushRoot:"crush-root",crushDeviceClass:"crush-device-class",packetSize:"packetsize",crushLocality:"crush-locality"}[_]||_]="crushRoot"===_?s.name:s}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ve.O),e.Y36(g.Kz),e.Y36(de.P),e.Y36(Me),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-erasure-code-profile-form-modal"]],outputs:{submitAction:"submitAction"},features:[e.qOj],decls:98,vars:53,consts:function(){let i,_,o,n,s,c,d,f,p,R,h,S,m,P,A,I,$,D,x,y,Z,U,H,G,z,q,X,w,Q,J,k,V,Y,B,j,K,N,W,ee,_e,oe,te,ie,ne,se,ae,le,re,ce;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Plugin",n="Data chunks (k)",s="Coding chunks (m)",c="Crush failure domain",d="Crush root",f="Crush device class",p="Let Ceph decide",R="Available OSDs: " + "\ufffd0\ufffd" + "",h="Directory",S="This field is required!",m="The name can only consist of alphanumeric characters, dashes and underscores.",P="The chosen erasure code profile name is already in use.",A="Loading...",I="This field is required!",$="This field is required!",D="Must be equal to or greater than 2.",x="Chunks (k+m) have exceeded the available OSDs of " + "\ufffd0\ufffd" + ".",y="For an equal distribution k has to be a multiple of (k+m)/l.",Z="K has to be equal to or greater than m in order to recover data correctly through c.",U="Distribution factor: " + "\ufffd0\ufffd" + "",H="This field is required!",G="Must be equal to or greater than 1.",z="Chunks (k+m) have exceeded the available OSDs of " + "\ufffd0\ufffd" + ".",q="Durability estimator (c)",X="Must be equal to or greater than 1.",w="C has to be equal to or lower than m as m defines the amount of chunks that can be used.",Q="Helper chunks (d)",J="Set d manually or use the plugin's default calculation that maximizes d.",k="D is automatically updated on k and m changes",V="D can be set from " + "\ufffd0\ufffd" + " to " + "\ufffd1\ufffd" + "",Y="D can only be set to " + "\ufffd0\ufffd" + "",B="D has to be greater than k (" + "\ufffd0\ufffd" + ").",j="D has to be lower than k + m (" + "\ufffd0\ufffd" + ").",K="Locality (l)",N="Locality groups: " + "\ufffd0\ufffd" + "",W="This field is required!",ee="Must be equal to or greater than 1.",_e="Can't split up chunks (k+m) correctly with the current locality.",oe="Loading...",te="Crush Locality",ie="Loading...",ne="None",se="Scalar mds",ae="Technique",le="Packetsize",re="Must be equal to or greater than 1.",ce="Loading...",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label"],_,[1,"cd-col-form-input"],["type","text","id","name","name","name","placeholder","Name...","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","plugin",1,"cd-col-form-label"],[1,"required"],o,[3,"html"],["id","plugin","name","plugin","formControlName","plugin",1,"form-select"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],["for","k",1,"cd-col-form-label"],n,["type","number","id","k","name","k","ng-model","$ctrl.erasureCodeProfile.k","placeholder","Data chunks...","formControlName","k","min","2",1,"form-control"],["class","form-text text-muted",4,"ngIf"],["for","m",1,"cd-col-form-label"],s,["type","number","id","m","name","m","placeholder","Coding chunks...","formControlName","m","min","1",1,"form-control"],["class","form-group row",4,"ngIf"],["for","crushFailureDomain",1,"cd-col-form-label"],c,["id","crushFailureDomain","name","crushFailureDomain","formControlName","crushFailureDomain",1,"form-select"],["for","crushRoot",1,"cd-col-form-label"],d,["id","crushRoot","name","crushRoot","formControlName","crushRoot",1,"form-select"],["for","crushDeviceClass",1,"cd-col-form-label"],f,["id","crushDeviceClass","name","crushDeviceClass","formControlName","crushDeviceClass",1,"form-select"],["ngValue",""],p,[1,"form-text","text-muted"],R,["for","directory",1,"cd-col-form-label"],h,["type","text","id","directory","name","directory","placeholder","Path...","formControlName","directory",1,"form-control"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],S,m,P,A,[3,"ngValue"],I,$,D,x,y,Z,U,H,G,z,["for","c",1,"cd-col-form-label"],q,["type","number","id","c","name","c","placeholder","Coding chunks...","formControlName","c","min","1",1,"form-control"],X,w,["for","d",1,"cd-col-form-label"],Q,[1,"input-group"],["type","number","id","d","name","d","placeholder","Helper chunks...","formControlName","d",1,"form-control"],["id","d-calc-btn","ngbTooltip",J,"type","button",1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],[4,"ngIf"],k,V,Y,B,j,["for","l",1,"cd-col-form-label"],K,["type","number","id","l","name","l","placeholder","Coding chunks...","formControlName","l","min","1",1,"form-control"],N,W,ee,_e,oe,["for","crushLocality",1,"cd-col-form-label"],te,["id","crushLocality","name","crushLocality","formControlName","crushLocality",1,"form-select"],ie,ne,["for","scalar_mds",1,"cd-col-form-label"],se,["id","scalar_mds","name","scalar_mds","formControlName","scalar_mds",1,"form-select"],["for","technique",1,"cd-col-form-label"],ae,["id","technique","name","technique","formControlName","technique",1,"form-select"],["for","packetSize",1,"cd-col-form-label"],le,["type","number","id","packetSize","name","packetSize","placeholder","Packetsize...","formControlName","packetSize","min","1",1,"form-control"],re,ce]},template:function(_,o){if(1&_&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10),e._UZ(13,"input",11),e.YNc(14,y_,2,0,"span",12),e.YNc(15,Z_,2,0,"span",12),e.YNc(16,U_,2,0,"span",12),e.qZA()(),e.TgZ(17,"div",7)(18,"label",13)(19,"span",14),e.SDv(20,15),e.qZA(),e._UZ(21,"cd-helper",16),e.qZA(),e.TgZ(22,"div",10)(23,"select",17),e.YNc(24,H_,2,0,"option",18),e.YNc(25,G_,2,2,"option",19),e.qZA(),e.YNc(26,z_,2,0,"span",12),e.qZA()(),e.TgZ(27,"div",7)(28,"label",20)(29,"span",14),e.SDv(30,21),e.qZA(),e._UZ(31,"cd-helper",16),e.qZA(),e.TgZ(32,"div",10),e._UZ(33,"input",22),e.YNc(34,q_,2,0,"span",12),e.YNc(35,X_,2,0,"span",12),e.YNc(36,w_,2,1,"span",12),e.YNc(37,Q_,2,0,"span",12),e.YNc(38,J_,2,0,"span",12),e.YNc(39,k_,2,1,"span",23),e.qZA()(),e.TgZ(40,"div",7)(41,"label",24)(42,"span",14),e.SDv(43,25),e.qZA(),e._UZ(44,"cd-helper",16),e.qZA(),e.TgZ(45,"div",10),e._UZ(46,"input",26),e.YNc(47,V_,2,0,"span",12),e.YNc(48,Y_,2,0,"span",12),e.YNc(49,B_,2,1,"span",12),e.qZA()(),e.YNc(50,W_,9,3,"div",27),e.YNc(51,so,14,6,"div",27),e.YNc(52,co,12,5,"div",27),e.TgZ(53,"div",7)(54,"label",28),e.ynx(55),e.SDv(56,29),e.BQk(),e._UZ(57,"cd-helper",16),e.qZA(),e.TgZ(58,"div",10)(59,"select",30),e.YNc(60,Oo,2,0,"option",18),e.YNc(61,uo,2,3,"option",19),e.qZA()()(),e.YNc(62,go,10,4,"div",27),e.YNc(63,Ro,8,6,"div",27),e.YNc(64,Co,8,2,"div",27),e.YNc(65,ho,8,2,"div",27),e.TgZ(66,"div",7)(67,"label",31),e.ynx(68),e.SDv(69,32),e.BQk(),e._UZ(70,"cd-helper",16),e.qZA(),e.TgZ(71,"div",10)(72,"select",33),e.YNc(73,So,2,0,"option",18),e.YNc(74,To,2,2,"option",19),e.qZA()()(),e.TgZ(75,"div",7)(76,"label",34),e.ynx(77),e.SDv(78,35),e.BQk(),e._UZ(79,"cd-helper",16),e.qZA(),e.TgZ(80,"div",10)(81,"select",36)(82,"option",37),e.SDv(83,38),e.qZA(),e.YNc(84,Lo,2,2,"option",19),e.qZA(),e.TgZ(85,"span",39),e.SDv(86,40),e.qZA()()(),e.TgZ(87,"div",7)(88,"label",41),e.ynx(89),e.SDv(90,42),e.BQk(),e._UZ(91,"cd-helper",16),e.qZA(),e.TgZ(92,"div",10),e._UZ(93,"input",43),e.qZA()()(),e.TgZ(94,"div",44)(95,"cd-form-button-panel",45),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(96,"titlecase"),e.ALo(97,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&_){const n=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,41,o.action))(e.lcZ(4,43,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.form),e.xp6(8),e.Q6J("ngIf",o.form.showError("name",n,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"pattern")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"uniqueName")),e.xp6(5),e.Q6J("html",o.tooltips.plugins[o.plugin].description),e.xp6(3),e.Q6J("ngIf",!o.plugins),e.xp6(1),e.Q6J("ngForOf",o.plugins),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",n,"required")),e.xp6(5),e.Q6J("html",o.tooltips.k),e.xp6(3),e.Q6J("ngIf",o.form.showError("k",n,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",n,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",n,"max")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",n,"unequal")),e.xp6(1),e.Q6J("ngIf",o.form.showError("k",n,"kLowerM")),e.xp6(1),e.Q6J("ngIf","lrc"===o.plugin),e.xp6(5),e.Q6J("html",o.tooltips.m),e.xp6(3),e.Q6J("ngIf",o.form.showError("m",n,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("m",n,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("m",n,"max")),e.xp6(1),e.Q6J("ngIf","shec"===o.plugin),e.xp6(1),e.Q6J("ngIf","clay"===o.plugin),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.LRC),e.xp6(5),e.Q6J("html",o.tooltips.crushFailureDomain),e.xp6(3),e.Q6J("ngIf",!o.failureDomains),e.xp6(1),e.Q6J("ngForOf",o.failureDomainKeys),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.LRC),e.xp6(1),e.Q6J("ngIf",o.PLUGIN.CLAY===o.plugin),e.xp6(1),e.Q6J("ngIf",e.kEZ(49,De,o.PLUGIN.JERASURE,o.PLUGIN.ISA,o.PLUGIN.CLAY).includes(o.plugin)),e.xp6(1),e.Q6J("ngIf",o.plugin===o.PLUGIN.JERASURE),e.xp6(5),e.Q6J("html",o.tooltips.crushRoot),e.xp6(3),e.Q6J("ngIf",!o.buckets),e.xp6(1),e.Q6J("ngForOf",o.buckets),e.xp6(5),e.Q6J("html",o.tooltips.crushDeviceClass),e.xp6(5),e.Q6J("ngForOf",o.devices),e.xp6(2),e.pQV(o.deviceCount),e.QtT(86),e.xp6(5),e.Q6J("html",o.tooltips.directory),e.xp6(4),e.Q6J("form",o.form)("submitText",e.lcZ(96,45,o.action)+" "+e.lcZ(97,47,o.resource))}},directives:[$e.z,a._Y,a.JL,Pe.V,a.sg,fe.P,Ee.o,a.Fj,ge.b,a.JJ,a.u,pe.U,C.O5,Re.S,a.EJ,a.YN,a.Kr,C.sg,a.wV,a.qQ,g._L,C.mk,me.p],pipes:[C.rS,Ce.m],styles:[""]}),t})();var Fo=r(7022);class No{constructor(){this.erasureInfo=!1,this.crushInfo=!1,this.pgs=1,this.poolTypes=["erasure","replicated"],this.applications={selected:[],default:["cephfs","rbd","rgw"],available:[],validators:[a.kI.pattern("[A-Za-z0-9_]+"),a.kI.maxLength(128)],messages:new Fo.a({empty:"No applications added",selectionLimit:{text:"Applications limit reached",tooltip:"A pool can only have up to four applications definitions."},customValidations:{pattern:"Allowed characters '_a-zA-Z0-9'",maxlength:"Maximum length is 128 characters"},filter:"Filter or add applications'",add:"Add application"})}}}var xe=r(63285),he=r(47640),bo=r(63622),vo=r(30490),Io=r(60192),ye=r(61350),$o=r(17932),Do=r(60950);const xo=["crushInfoTabs"],yo=["crushDeletionBtn"],Zo=["ecpInfoTabs"],Uo=["ecpDeletionBtn"];function Ho(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,42),e.qZA())}function Go(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,43),e.qZA())}function zo(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,44),e.qZA())}function qo(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,45),e.qZA())}function Xo(t,i){if(1&t&&(e.TgZ(0,"option",46),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function wo(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,47),e.qZA())}function Qo(t,i){if(1&t&&(e.TgZ(0,"option",46),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Jo(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,58),e.qZA())}function ko(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,59),e.qZA())}function Vo(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,60),e.qZA())}function Yo(t,i){1&t&&(e.TgZ(0,"span",55),e.SDv(1,61),e.qZA())}function Bo(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div",8)(1,"label",52),e.SDv(2,53),e.qZA(),e.TgZ(3,"div",11)(4,"input",54),e.NdJ("focus",function(){return e.CHM(_),e.oxw(3).externalPgChange=!1})("blur",function(){return e.CHM(_),e.oxw(3).alignPgs()}),e.qZA(),e.YNc(5,Jo,2,0,"span",13),e.YNc(6,ko,2,0,"span",13),e.YNc(7,Vo,2,0,"span",13),e.TgZ(8,"span",55),e._UZ(9,"cd-doc",56),e.qZA(),e.YNc(10,Yo,2,0,"span",57),e.qZA()()}if(2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.form.showError("pgNum",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("pgNum",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("pgNum",_,"34")),e.xp6(3),e.Q6J("ngIf",o.externalPgChange)}}function jo(t,i){if(1&t&&(e.TgZ(0,"span",41)(1,"ul",66)(2,"li"),e.SDv(3,67),e.qZA(),e.TgZ(4,"li"),e.SDv(5,68),e.qZA()()()),2&t){const _=e.oxw(4);e.xp6(3),e.pQV(_.getMinSize()),e.QtT(3),e.xp6(2),e.pQV(_.getMaxSize()),e.QtT(5)}}function Ko(t,i){if(1&t&&(e.TgZ(0,"span",41),e.SDv(1,69),e.qZA()),2&t){const _=e.oxw(4);e.xp6(1),e.pQV(_.getMinSize())(_.getMaxSize()),e.QtT(1)}}function Wo(t,i){1&t&&(e.TgZ(0,"span",70),e.SDv(1,71),e.qZA())}function et(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",62),e.SDv(2,63),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",64),e.YNc(5,jo,6,2,"span",13),e.YNc(6,Ko,2,2,"span",13),e.YNc(7,Wo,2,0,"span",65),e.qZA()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(4),e.Q6J("max",o.getMaxSize())("min",o.getMinSize()),e.xp6(1),e.Q6J("ngIf",o.form.showError("size",_)),e.xp6(1),e.Q6J("ngIf",o.form.showError("size",_)),e.xp6(1),e.Q6J("ngIf",1===o.form.getValue("size"))}}function _t(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",72),e.SDv(2,73),e.qZA(),e.TgZ(3,"div",11)(4,"div",74),e._UZ(5,"input",75),e.TgZ(6,"label",76),e.SDv(7,77),e.qZA()()()())}function ot(t,i){if(1&t&&(e.TgZ(0,"div")(1,"div",8)(2,"label",48),e.SDv(3,49),e.qZA(),e.TgZ(4,"div",11)(5,"select",50),e.YNc(6,Qo,2,2,"option",19),e.qZA()()(),e.YNc(7,Bo,11,4,"div",51),e.YNc(8,et,8,5,"div",51),e.YNc(9,_t,8,0,"div",51),e.qZA()),2&t){const _=e.oxw(2);e.xp6(6),e.Q6J("ngForOf",_.pgAutoscaleModes),e.xp6(1),e.Q6J("ngIf","on"!==_.form.getValue("pgAutoscaleMode")),e.xp6(1),e.Q6J("ngIf",_.isReplicated),e.xp6(1),e.Q6J("ngIf",_.info.is_all_bluestore&&_.isErasure)}}function tt(t,i){if(1&t&&e._UZ(0,"i",78),2&t){const _=e.oxw(2);e.Gre("",_.icons.warning," icon-warning-color")}}function it(t,i){1&t&&(e.TgZ(0,"option",17),e.SDv(1,92),e.qZA())}function nt(t,i){1&t&&(e.TgZ(0,"option",93),e.SDv(1,94),e.qZA()),2&t&&e.Q6J("ngValue",null)}function st(t,i){1&t&&(e.TgZ(0,"option",93),e.SDv(1,95),e.qZA()),2&t&&e.Q6J("ngValue",null)}function at(t,i){if(1&t&&(e.TgZ(0,"option",93),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.name," ")}}const F=function(t){return[t]};function lt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"button",96),e.NdJ("click",function(){return e.CHM(_),e.oxw(4).addErasureCodeProfile()}),e._UZ(1,"i",88),e.qZA()}if(2&t){const _=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,F,_.icons.add))}}function rt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"button",97,98),e.NdJ("click",function(){return e.CHM(_),e.oxw(4).deleteErasureCodeProfile()}),e._UZ(2,"i",88),e.qZA()}if(2&t){const _=e.oxw(4);e.xp6(2),e.Q6J("ngClass",e.VKq(1,F,_.icons.trash))}}const ct=function(){return["name"]};function Ot(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",109),2&t){const _=e.oxw(5);e.Q6J("renderObjects",!0)("hideKeys",e.DdM(4,ct))("data",_.form.getValue("erasureProfile"))("autoReload",!1)}}function dt(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,112),e.qZA())}function ut(t,i){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.xp6(1),e.hij(" ",_," ")}}function Pt(t,i){if(1&t&&(e.TgZ(0,"ul"),e.YNc(1,ut,2,1,"li",113),e.qZA()),2&t){const _=e.oxw(6);e.xp6(1),e.Q6J("ngForOf",_.ecpUsage)}}function ft(t,i){if(1&t&&(e.YNc(0,dt,2,0,"ng-template",null,110,e.W1O),e.YNc(2,Pt,2,1,"ul",111)),2&t){const _=e.MAs(1),o=e.oxw(5);e.xp6(2),e.Q6J("ngIf",o.ecpUsage)("ngIfElse",_)}}function Et(t,i){if(1&t&&(e.TgZ(0,"span",99)(1,"nav",100,101),e.ynx(3,102),e.TgZ(4,"a",103),e.SDv(5,104),e.qZA(),e.YNc(6,Ot,1,5,"ng-template",105),e.BQk(),e.ynx(7,106),e.TgZ(8,"a",103),e.SDv(9,107),e.qZA(),e.YNc(10,ft,3,2,"ng-template",105),e.BQk(),e.qZA(),e._UZ(11,"div",108),e.qZA()),2&t){const _=e.MAs(2);e.xp6(11),e.Q6J("ngbNavOutlet",_)}}const Ze=function(t){return{active:t}};function gt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div",8)(1,"label",80),e.SDv(2,81),e.qZA(),e.TgZ(3,"div",11)(4,"div",82)(5,"select",83),e.YNc(6,it,2,0,"option",84),e.YNc(7,nt,2,1,"option",85),e.YNc(8,st,2,1,"option",85),e.YNc(9,at,2,2,"option",86),e.qZA(),e.TgZ(10,"button",87),e.NdJ("click",function(){e.CHM(_);const n=e.oxw(3);return n.data.erasureInfo=!n.data.erasureInfo}),e._UZ(11,"i",88),e.qZA(),e.YNc(12,lt,2,3,"button",89),e.YNc(13,rt,3,3,"button",90),e.qZA(),e.YNc(14,Et,12,1,"span",91),e.qZA()()}if(2&t){const _=e.oxw(3);e.xp6(6),e.Q6J("ngIf",!_.ecProfiles),e.xp6(1),e.Q6J("ngIf",_.ecProfiles&&0===_.ecProfiles.length),e.xp6(1),e.Q6J("ngIf",_.ecProfiles&&_.ecProfiles.length>0),e.xp6(1),e.Q6J("ngForOf",_.ecProfiles),e.xp6(1),e.Q6J("ngClass",e.VKq(9,Ze,_.data.erasureInfo)),e.xp6(1),e.Q6J("ngClass",e.VKq(11,F,_.icons.questionCircle)),e.xp6(1),e.Q6J("ngIf",!_.editing),e.xp6(1),e.Q6J("ngIf",!_.editing),e.xp6(1),e.Q6J("ngIf",_.data.erasureInfo&&_.form.getValue("erasureProfile"))}}function pt(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",114),e.SDv(2,115),e.qZA(),e.TgZ(3,"div",11)(4,"span",55),e.SDv(5,116),e.qZA()()())}function Rt(t,i){1&t&&(e.TgZ(0,"span",55)(1,"span"),e.SDv(2,119),e.qZA(),e._uU(3,"\xa0 "),e.qZA())}function mt(t,i){if(1&t&&(e.TgZ(0,"option",93),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("ngValue",_),e.xp6(1),e.hij(" ",_.rule_name," ")}}function Ct(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"button",96),e.NdJ("click",function(){return e.CHM(_),e.oxw(5).addCrushRule()}),e._UZ(1,"i",88),e.qZA()}if(2&t){const _=e.oxw(5);e.xp6(1),e.Q6J("ngClass",e.VKq(1,F,_.icons.add))}}function Mt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"button",126,127),e.NdJ("click",function(){return e.CHM(_),e.oxw(5).deleteCrushRule()}),e._UZ(2,"i",88),e.qZA()}if(2&t){const _=e.oxw(5);e.xp6(2),e.Q6J("ngClass",e.VKq(1,F,_.icons.trash))}}const ht=function(){return["steps","type","rule_name"]};function St(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",109),2&t){const _=e.oxw(6);e.Q6J("renderObjects",!1)("hideKeys",e.DdM(4,ht))("data",_.form.getValue("crushRule"))("autoReload",!1)}}function Tt(t,i){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=i.$implicit,o=e.oxw(7);e.xp6(1),e.hij(" ",o.describeCrushStep(_)," ")}}function Lt(t,i){if(1&t&&(e.TgZ(0,"ol"),e.YNc(1,Tt,2,1,"li",113),e.qZA()),2&t){const _=e.oxw(6);e.xp6(1),e.Q6J("ngForOf",_.form.get("crushRule").value.steps)}}function At(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,136),e.qZA())}function Ft(t,i){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.xp6(1),e.hij(" ",_," ")}}function Nt(t,i){if(1&t&&(e.TgZ(0,"ul"),e.YNc(1,Ft,2,1,"li",113),e.qZA()),2&t){const _=e.oxw(7);e.xp6(1),e.Q6J("ngForOf",_.crushUsage)}}function bt(t,i){if(1&t&&(e.YNc(0,At,2,0,"ng-template",null,135,e.W1O),e.YNc(2,Nt,2,1,"ul",111)),2&t){const _=e.MAs(1),o=e.oxw(6);e.xp6(2),e.Q6J("ngIf",o.crushUsage)("ngIfElse",_)}}function vt(t,i){if(1&t&&(e.TgZ(0,"div",128)(1,"nav",100,129),e.ynx(3,130),e.TgZ(4,"a",103),e.SDv(5,131),e.qZA(),e.YNc(6,St,1,5,"ng-template",105),e.BQk(),e.ynx(7,132),e.TgZ(8,"a",103),e.SDv(9,133),e.qZA(),e.YNc(10,Lt,2,1,"ng-template",105),e.BQk(),e.ynx(11,106),e.TgZ(12,"a",103),e.SDv(13,134),e.qZA(),e.YNc(14,bt,3,2,"ng-template",105),e.BQk(),e.qZA(),e._UZ(15,"div",108),e.qZA()),2&t){const _=e.MAs(2);e.xp6(15),e.Q6J("ngbNavOutlet",_)}}function It(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,137),e.qZA())}function $t(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,138),e.qZA())}function Dt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div")(1,"div",120)(2,"select",121)(3,"option",93),e.SDv(4,122),e.qZA(),e.YNc(5,mt,2,2,"option",86),e.qZA(),e.TgZ(6,"button",123),e.NdJ("click",function(){e.CHM(_);const n=e.oxw(4);return n.data.crushInfo=!n.data.crushInfo}),e._UZ(7,"i",88),e.qZA(),e.YNc(8,Ct,2,3,"button",89),e.YNc(9,Mt,3,3,"button",124),e.qZA(),e.YNc(10,vt,16,1,"div",125),e.YNc(11,It,2,0,"span",13),e.YNc(12,$t,2,0,"span",13),e.qZA()}if(2&t){e.oxw(3);const _=e.MAs(2),o=e.oxw();e.xp6(3),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.current.rules),e.xp6(1),e.Q6J("ngClass",e.VKq(9,Ze,o.data.crushInfo)),e.xp6(1),e.Q6J("ngClass",e.VKq(11,F,o.icons.questionCircle)),e.xp6(1),e.Q6J("ngIf",o.isReplicated&&!o.editing),e.xp6(1),e.Q6J("ngIf",o.isReplicated&&!o.editing),e.xp6(1),e.Q6J("ngIf",o.data.crushInfo&&o.form.getValue("crushRule")),e.xp6(1),e.Q6J("ngIf",o.form.showError("crushRule",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("crushRule",_,"tooFewOsds"))}}function xt(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",114),e.SDv(2,117),e.qZA(),e.TgZ(3,"div",11),e.YNc(4,Rt,4,0,"ng-template",null,118,e.W1O),e.YNc(6,Dt,13,13,"div",111),e.qZA()()),2&t){const _=e.MAs(5),o=e.oxw(3);e.xp6(6),e.Q6J("ngIf",o.current.rules.length>0)("ngIfElse",_)}}function yt(t,i){if(1&t&&(e.TgZ(0,"div")(1,"legend"),e.SDv(2,79),e.qZA(),e.YNc(3,gt,15,13,"div",51),e.YNc(4,pt,6,0,"div",51),e.YNc(5,xt,7,2,"div",51),e.qZA()),2&t){const _=e.oxw(2);e.xp6(3),e.Q6J("ngIf",_.isErasure),e.xp6(1),e.Q6J("ngIf",_.isErasure&&!_.editing),e.xp6(1),e.Q6J("ngIf",_.isReplicated||_.editing)}}function Zt(t,i){if(1&t&&(e.TgZ(0,"option",46),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function Ut(t,i){1&t&&(e.TgZ(0,"option",17),e.SDv(1,156),e.qZA())}function Ht(t,i){1&t&&(e.TgZ(0,"option",17),e.SDv(1,157),e.qZA())}function Gt(t,i){if(1&t&&(e.TgZ(0,"option",46),e._uU(1),e.qZA()),2&t){const _=i.$implicit;e.Q6J("value",_),e.xp6(1),e.hij(" ",_," ")}}function zt(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,158),e.qZA())}function qt(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,159),e.qZA())}function Xt(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,160),e.qZA())}function wt(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,161),e.qZA())}function Qt(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,162),e.qZA())}function Jt(t,i){if(1&t&&(e.TgZ(0,"div")(1,"div",8)(2,"label",144),e.SDv(3,145),e.qZA(),e.TgZ(4,"div",11)(5,"select",146),e.YNc(6,Ut,2,0,"option",84),e.YNc(7,Ht,2,0,"option",84),e.YNc(8,Gt,2,2,"option",19),e.qZA()()(),e.TgZ(9,"div",8)(10,"label",147),e.SDv(11,148),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",149),e.YNc(14,zt,2,0,"span",13),e.YNc(15,qt,2,0,"span",13),e.qZA()(),e.TgZ(16,"div",8)(17,"label",150),e.SDv(18,151),e.qZA(),e.TgZ(19,"div",11),e._UZ(20,"input",152),e.YNc(21,Xt,2,0,"span",13),e.YNc(22,wt,2,0,"span",13),e.qZA()(),e.TgZ(23,"div",8)(24,"label",153),e.SDv(25,154),e.qZA(),e.TgZ(26,"div",11),e._UZ(27,"input",155),e.YNc(28,Qt,2,0,"span",13),e.qZA()()()),2&t){e.oxw(2);const _=e.MAs(2),o=e.oxw();e.xp6(6),e.Q6J("ngIf",!o.info.compression_algorithms),e.xp6(1),e.Q6J("ngIf",o.info.compression_algorithms&&0===o.info.compression_algorithms.length),e.xp6(1),e.Q6J("ngForOf",o.info.compression_algorithms),e.xp6(6),e.Q6J("ngIf",o.form.showError("minBlobSize",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("minBlobSize",_,"maximum")),e.xp6(6),e.Q6J("ngIf",o.form.showError("maxBlobSize",_,"min")),e.xp6(1),e.Q6J("ngIf",o.form.showError("maxBlobSize",_,"minimum")),e.xp6(6),e.Q6J("ngIf",o.form.showError("ratio",_,"min")||o.form.showError("ratio",_,"max"))}}function kt(t,i){if(1&t&&(e.TgZ(0,"div",139)(1,"legend"),e.SDv(2,140),e.qZA(),e.TgZ(3,"div",8)(4,"label",141),e.SDv(5,142),e.qZA(),e.TgZ(6,"div",11)(7,"select",143),e.YNc(8,Zt,2,2,"option",19),e.qZA()()(),e.YNc(9,Jt,29,8,"div",20),e.qZA()),2&t){const _=e.oxw(2);e.xp6(8),e.Q6J("ngForOf",_.info.compression_modes),e.xp6(1),e.Q6J("ngIf",_.hasCompressionEnabled())}}function Vt(t,i){1&t&&(e.TgZ(0,"span",41),e.SDv(1,163),e.qZA())}function Yt(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.YNc(14,Ho,2,0,"span",13),e.YNc(15,Go,2,0,"span",13),e.YNc(16,zo,2,0,"span",13),e.YNc(17,qo,2,0,"span",13),e.qZA()(),e.TgZ(18,"div",8)(19,"label",14),e.SDv(20,15),e.qZA(),e.TgZ(21,"div",11)(22,"select",16)(23,"option",17),e.SDv(24,18),e.qZA(),e.YNc(25,Xo,2,2,"option",19),e.qZA(),e.YNc(26,wo,2,0,"span",13),e.qZA()(),e.YNc(27,ot,10,4,"div",20),e.TgZ(28,"div",8)(29,"label",21),e.SDv(30,22),e.qZA(),e.TgZ(31,"div",11)(32,"cd-select-badges",23),e.NdJ("selection",function(){return e.CHM(_),e.oxw().appSelection()}),e.qZA(),e.YNc(33,tt,1,3,"i",24),e.qZA()(),e.YNc(34,yt,6,3,"div",20),e.YNc(35,kt,10,2,"div",25),e.TgZ(36,"div")(37,"legend"),e.SDv(38,26),e.qZA(),e.TgZ(39,"div",8)(40,"label",27),e.ynx(41),e.SDv(42,28),e.BQk(),e.TgZ(43,"cd-helper")(44,"span"),e.SDv(45,29),e.qZA(),e._UZ(46,"br"),e.TgZ(47,"span"),e.SDv(48,30),e.qZA()()(),e.TgZ(49,"div",11),e._UZ(50,"input",31),e.qZA()(),e.TgZ(51,"div",8)(52,"label",32),e.ynx(53),e.SDv(54,33),e.BQk(),e.TgZ(55,"cd-helper")(56,"span"),e.SDv(57,34),e.qZA(),e._UZ(58,"br"),e.TgZ(59,"span"),e.SDv(60,35),e.qZA()()(),e.TgZ(61,"div",11),e._UZ(62,"input",36),e.YNc(63,Vt,2,0,"span",13),e.qZA()()(),e.TgZ(64,"div",37)(65,"cd-rbd-configuration-form",38),e.NdJ("changes",function(n){return e.CHM(_),e.oxw().currentConfigurationValues=n()}),e.qZA()()(),e.TgZ(66,"div",39)(67,"cd-form-button-panel",40),e.NdJ("submitActionEvent",function(){return e.CHM(_),e.oxw().submit()}),e.ALo(68,"titlecase"),e.ALo(69,"upperFirst"),e.qZA()()()()()}if(2&t){const _=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.form),e.xp6(6),e.pQV(e.lcZ(6,25,o.action))(e.lcZ(7,27,o.resource)),e.QtT(5),e.xp6(7),e.Q6J("ngIf",o.form.showError("name",_,"required")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"uniqueName")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"rbdPool")),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",_,"pattern")),e.xp6(8),e.Q6J("ngForOf",o.data.poolTypes),e.xp6(1),e.Q6J("ngIf",o.form.showError("poolType",_,"required")),e.xp6(1),e.Q6J("ngIf",o.isReplicated||o.isErasure),e.xp6(5),e.Q6J("customBadges",!0)("customBadgeValidators",o.data.applications.validators)("messages",o.data.applications.messages)("data",o.data.applications.selected)("options",o.data.applications.available)("selectionLimit",4),e.xp6(1),e.Q6J("ngIf",o.data.applications.selected<=0),e.xp6(1),e.Q6J("ngIf",o.isErasure||o.isReplicated),e.xp6(1),e.Q6J("ngIf",o.info.is_all_bluestore),e.xp6(28),e.Q6J("ngIf",o.form.showError("max_objects",_,"min")),e.xp6(1),e.Q6J("hidden",o.isErasure||-1===o.data.applications.selected.indexOf("rbd")),e.xp6(1),e.Q6J("form",o.form)("initializeData",o.initializeConfigData),e.xp6(2),e.Q6J("form",o.form)("submitText",e.lcZ(68,29,o.action)+" "+e.lcZ(69,31,o.resource))}}let Ue=(()=>{class t extends R_.E{constructor(_,o,n,s,c,d,f,p,R,h,S){super(),this.dimlessBinaryPipe=_,this.route=o,this.router=n,this.modalService=s,this.poolService=c,this.authStorageService=d,this.formatter=f,this.taskWrapper=p,this.ecpService=R,this.crushRuleService=h,this.actionLabels=S,this.editing=!1,this.isReplicated=!1,this.isErasure=!1,this.data=new No,this.externalPgChange=!1,this.current={rules:[]},this.initializeConfigData=new E_.t(1),this.currentConfigurationValues={},this.icons=b.P,this.crushUsage=void 0,this.ecpUsage=void 0,this.crushRuleMaxSize=10,this.editing=this.router.url.startsWith(`/pool/${M.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource="pool",this.authenticate(),this.createForm()}authenticate(){if(this.permission=this.authStorageService.getPermissions().pool,!this.permission.read||!this.permission.update&&this.editing||!this.permission.create&&!this.editing)throw new g_._2}createForm(){const _=new be.d({mode:new a.NI("none"),algorithm:new a.NI(""),minBlobSize:new a.NI("",{updateOn:"blur"}),maxBlobSize:new a.NI("",{updateOn:"blur"}),ratio:new a.NI("",{updateOn:"blur"})});this.form=new be.d({name:new a.NI("",{validators:[a.kI.pattern(/^[.A-Za-z0-9_/-]+$/),a.kI.required,E.h.custom("rbdPool",()=>this.form&&this.form.getValue("name").includes("/")&&this.data&&-1!==this.data.applications.selected.indexOf("rbd"))]}),poolType:new a.NI("",{validators:[a.kI.required]}),crushRule:new a.NI(null,{validators:[E.h.custom("tooFewOsds",o=>this.info&&o&&this.info.osd_count<1),E.h.custom("required",o=>this.isReplicated&&this.info.crush_rules_replicated.length>0&&!o)]}),size:new a.NI("",{updateOn:"blur"}),erasureProfile:new a.NI(null),pgNum:new a.NI("",{validators:[a.kI.required]}),pgAutoscaleMode:new a.NI(null),ecOverwrites:new a.NI(!1),compression:_,max_bytes:new a.NI(""),max_objects:new a.NI(0)},[E.h.custom("form",()=>null)])}ngOnInit(){this.poolService.getInfo().subscribe(_=>{this.initInfo(_),this.editing?this.initEditMode():(this.setAvailableApps(),this.loadingReady()),this.listenToChanges(),this.setComplexValidators()})}initInfo(_){this.pgAutoscaleModes=_.pg_autoscale_modes,this.form.silentSet("pgAutoscaleMode",_.pg_autoscale_default_mode),this.form.silentSet("algorithm",_.bluestore_compression_algorithm),this.info=_,this.initEcp(_.erasure_code_profiles)}initEcp(_){this.setListControlStatus("erasureProfile",_),this.ecProfiles=_}setListControlStatus(_,o){const n=this.form.get(_),s=n.value;1!==o.length||s&&u().isEqual(s,o[0])?0===o.length&&s&&n.setValue(null):n.setValue(o[0]),o.length<=1?n.enabled&&n.disable():n.disabled&&n.enable()}initEditMode(){this.disableForEdit(),this.routeParamsSubscribe=this.route.params.subscribe(_=>this.poolService.get(_.name).subscribe(o=>{this.data.pool=o,this.initEditFormData(o),this.loadingReady()}))}disableForEdit(){["poolType","crushRule","size","erasureProfile","ecOverwrites"].forEach(_=>this.form.get(_).disable())}initEditFormData(_){this.initializeConfigData.next({initialData:_.configuration,sourceType:m_.h.pool}),this.poolTypeChange(_.type);const o=this.info.crush_rules_replicated.concat(this.info.crush_rules_erasure),n={name:_.pool_name,poolType:_.type,crushRule:o.find(s=>s.rule_name===_.crush_rule),size:_.size,erasureProfile:this.ecProfiles.find(s=>s.name===_.erasure_code_profile),pgAutoscaleMode:_.pg_autoscale_mode,pgNum:_.pg_num,ecOverwrites:_.flags_names.includes("ec_overwrites"),mode:_.options.compression_mode,algorithm:_.options.compression_algorithm,minBlobSize:this.dimlessBinaryPipe.transform(_.options.compression_min_blob_size),maxBlobSize:this.dimlessBinaryPipe.transform(_.options.compression_max_blob_size),ratio:_.options.compression_required_ratio,max_bytes:this.dimlessBinaryPipe.transform(_.quota_max_bytes),max_objects:_.quota_max_objects};Object.keys(n).forEach(s=>{const c=n[s];!u().isUndefined(c)&&""!==c&&this.form.silentSet(s,c)}),this.data.pgs=this.form.getValue("pgNum"),this.setAvailableApps(this.data.applications.default.concat(_.application_metadata)),this.data.applications.selected=_.application_metadata}setAvailableApps(_=this.data.applications.default){this.data.applications.available=u().uniq(_.sort()).map(o=>new p_.$(!1,o,""))}listenToChanges(){this.listenToChangesDuringAddEdit(),this.editing||this.listenToChangesDuringAdd()}listenToChangesDuringAddEdit(){this.form.get("pgNum").valueChanges.subscribe(_=>{const o=_-this.data.pgs;1===Math.abs(o)&&2!==_?this.doPgPowerJump(o):this.data.pgs=_})}doPgPowerJump(_){const o=this.calculatePgPower()+_;this.setPgs(-1===_?Math.round(o):Math.floor(o))}calculatePgPower(_=this.form.getValue("pgNum")){return Math.log(_)/Math.log(2)}setPgs(_){const o=Math.pow(2,_<0?0:_);this.data.pgs=o,this.form.silentSet("pgNum",o)}listenToChangesDuringAdd(){this.form.get("poolType").valueChanges.subscribe(_=>{this.poolTypeChange(_)}),this.form.get("crushRule").valueChanges.subscribe(_=>{this.crushDeletionBtn&&this.crushDeletionBtn.isOpen()&&this.crushDeletionBtn.close(),_&&(this.setCorrectMaxSize(_),this.crushRuleIsUsedBy(_.rule_name),this.replicatedRuleChange(),this.pgCalc())}),this.form.get("size").valueChanges.subscribe(()=>{this.pgCalc()}),this.form.get("erasureProfile").valueChanges.subscribe(_=>{this.ecpDeletionBtn&&this.ecpDeletionBtn.isOpen()&&this.ecpDeletionBtn.close(),_&&(this.ecpIsUsedBy(_.name),this.pgCalc())}),this.form.get("mode").valueChanges.subscribe(()=>{["minBlobSize","maxBlobSize","ratio"].forEach(_=>{this.form.get(_).updateValueAndValidity({emitEvent:!1})})}),this.form.get("minBlobSize").valueChanges.subscribe(()=>{this.form.get("maxBlobSize").updateValueAndValidity({emitEvent:!1})}),this.form.get("maxBlobSize").valueChanges.subscribe(()=>{this.form.get("minBlobSize").updateValueAndValidity({emitEvent:!1})})}poolTypeChange(_){if("replicated"===_?this.setTypeBooleans(!0,!1):this.setTypeBooleans(!1,"erasure"===_),!_||!this.info)return void(this.current.rules=[]);const o=this.info["crush_rules_"+_]||[];this.current.rules=o,!this.editing&&(this.isReplicated&&this.setListControlStatus("crushRule",o),this.replicatedRuleChange(),this.pgCalc())}setTypeBooleans(_,o){this.isReplicated=_,this.isErasure=o}replicatedRuleChange(){if(!this.isReplicated)return;const _=this.form.get("size");let o=this.form.getValue("size")||3;const n=this.getMinSize(),s=this.getMaxSize();o<n?o=n:o>s&&(o=s),o!==_.value&&this.form.silentSet("size",o)}getMinSize(){return!this.info||this.info.osd_count<1?0:1}getMaxSize(){const _=this.form.getValue("crushRule");return this.info?_?_.usable_size:Math.min(this.info.osd_count,3):0}pgCalc(){const _=this.form.getValue("poolType");if(!this.info||this.form.get("pgNum").dirty||!_)return;const o=100*this.info.osd_count,n=this.isReplicated?this.replicatedPgCalc(o):this.erasurePgCalc(o);if(!n)return;const s=this.data.pgs;this.alignPgs(n),this.externalPgChange||(this.externalPgChange=s!==this.data.pgs)}setCorrectMaxSize(_=this.form.getValue("crushRule")){if(!_)return;const n=T.searchFailureDomains(this.info.nodes,_.steps[0].item_name)[_.steps[1].type];_.usable_size=Math.min(n?n.length:this.crushRuleMaxSize,this.crushRuleMaxSize)}replicatedPgCalc(_){const o=this.form.get("size"),n=o.value;return o.valid&&n>0?_/n:0}erasurePgCalc(_){const o=this.form.get("erasureProfile"),n=o.value;return(o.valid||o.disabled)&&n?_/(n.k+n.m):0}alignPgs(_=this.form.getValue("pgNum")){this.setPgs(Math.round(this.calculatePgPower(_<1?1:_)))}setComplexValidators(){this.editing?this.form.get("name").setValidators([this.form.get("name").validator,E.h.custom("uniqueName",_=>this.data.pool&&this.info&&-1!==this.info.pool_names.indexOf(_)&&this.info.pool_names.indexOf(_)!==this.info.pool_names.indexOf(this.data.pool.pool_name))]):(E.h.validateIf(this.form.get("size"),()=>this.isReplicated,[E.h.custom("min",_=>this.form.getValue("size")&&_<this.getMinSize()),E.h.custom("max",_=>this.form.getValue("size")&&this.getMaxSize()<_)]),this.form.get("name").setValidators([this.form.get("name").validator,E.h.custom("uniqueName",_=>this.info&&-1!==this.info.pool_names.indexOf(_))])),this.setCompressionValidators()}setCompressionValidators(){E.h.validateIf(this.form.get("minBlobSize"),()=>this.hasCompressionEnabled(),[a.kI.min(0),E.h.custom("maximum",_=>this.oddBlobSize(_,this.form.getValue("maxBlobSize")))]),E.h.validateIf(this.form.get("maxBlobSize"),()=>this.hasCompressionEnabled(),[a.kI.min(0),E.h.custom("minimum",_=>this.oddBlobSize(this.form.getValue("minBlobSize"),_))]),E.h.validateIf(this.form.get("ratio"),()=>this.hasCompressionEnabled(),[a.kI.min(0),a.kI.max(1)])}oddBlobSize(_,o){const n=this.formatter.toBytes(_),s=this.formatter.toBytes(o);return Boolean(n&&s&&n>=s)}hasCompressionEnabled(){return this.form.getValue("mode")&&"none"!==this.form.get("mode").value.toLowerCase()}describeCrushStep(_){return[_.op.replace("_"," "),_.item_name||"",_.type?_.num+" type "+_.type:""].join(" ")}addErasureCodeProfile(){this.addModal(Ao,_=>this.reloadECPs(_))}addModal(_,o){this.hideOpenTooltips(),this.modalService.show(_).componentInstance.submitAction.subscribe(s=>{o(s.name)})}hideOpenTooltips(){const _=o=>o&&o.isOpen()&&o.close();_(this.ecpDeletionBtn),_(this.crushDeletionBtn)}reloadECPs(_){this.reloadList({newItemName:_,getInfo:()=>this.ecpService.list(),initInfo:o=>this.initEcp(o),findNewItem:()=>this.ecProfiles.find(o=>o.name===_),controlName:"erasureProfile"})}reloadList({newItemName:_,getInfo:o,initInfo:n,findNewItem:s,controlName:c}){this.modalSubscription&&this.modalSubscription.unsubscribe(),o().subscribe(d=>{if(n(d),!_)return;const f=s();f&&this.form.get(c).setValue(f)})}deleteErasureCodeProfile(){this.deletionModal({value:this.form.getValue("erasureProfile"),usage:this.ecpUsage,deletionBtn:this.ecpDeletionBtn,dataName:"erasureInfo",getTabs:()=>this.ecpInfoTabs,tabPosition:"used-by-pools",nameAttribute:"name",itemDescription:"erasure code profile",reloadFn:()=>this.reloadECPs(),deleteFn:_=>this.ecpService.delete(_),taskName:"ecp/delete"})}deletionModal({value:_,usage:o,deletionBtn:n,dataName:s,getTabs:c,tabPosition:d,nameAttribute:f,itemDescription:p,reloadFn:R,deleteFn:h,taskName:S}){if(!_)return;if(o)return n.animation=!1,n.toggle(),this.data[s]=!0,void setTimeout(()=>{const P=c();P&&P.select(d)},50);const m=_[f];this.modalService.show(Ne.M,{itemDescription:p,itemNames:[m],submitActionObservable:()=>{const P=h(m);return P.subscribe(()=>R()),this.taskWrapper.wrapTaskAroundCall({task:new v.R(S,{name:m}),call:P})}})}addCrushRule(){this.addModal($_,_=>this.reloadCrushRules(_))}reloadCrushRules(_){this.reloadList({newItemName:_,getInfo:()=>this.poolService.getInfo(),initInfo:o=>{this.initInfo(o),this.poolTypeChange("replicated")},findNewItem:()=>this.info.crush_rules_replicated.find(o=>o.rule_name===_),controlName:"crushRule"})}deleteCrushRule(){this.deletionModal({value:this.form.getValue("crushRule"),usage:this.crushUsage,deletionBtn:this.crushDeletionBtn,dataName:"crushInfo",getTabs:()=>this.crushInfoTabs,tabPosition:"used-by-pools",nameAttribute:"rule_name",itemDescription:"crush rule",reloadFn:()=>this.reloadCrushRules(),deleteFn:_=>this.crushRuleService.delete(_),taskName:"crushRule/delete"})}crushRuleIsUsedBy(_){this.crushUsage=_?this.info.used_rules[_]:void 0}ecpIsUsedBy(_){this.ecpUsage=_?this.info.used_profiles[_]:void 0}submit(){if(this.form.invalid)return void this.form.setErrors({cdSubmitButton:!0});const _={pool:this.form.getValue("name")};this.assignFormFields(_,[{externalFieldName:"pool_type",formControlName:"poolType"},{externalFieldName:"pg_autoscale_mode",formControlName:"pgAutoscaleMode",editable:!0},{externalFieldName:"pg_num",formControlName:"pgNum",replaceFn:n=>"on"===this.form.getValue("pgAutoscaleMode")?1:n,editable:!0},this.isReplicated?{externalFieldName:"size",formControlName:"size"}:{externalFieldName:"erasure_code_profile",formControlName:"erasureProfile",attr:"name"},{externalFieldName:"rule_name",formControlName:"crushRule",replaceFn:n=>this.isReplicated?n&&n.rule_name:void 0},{externalFieldName:"quota_max_bytes",formControlName:"max_bytes",replaceFn:this.formatter.toBytes,editable:!0,resetValue:this.editing?0:void 0},{externalFieldName:"quota_max_objects",formControlName:"max_objects",editable:!0,resetValue:this.editing?0:void 0}]),this.info.is_all_bluestore&&(this.assignFormField(_,{externalFieldName:"flags",formControlName:"ecOverwrites",replaceFn:()=>this.isErasure?["ec_overwrites"]:void 0}),"none"!==this.form.getValue("mode")?this.assignFormFields(_,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:n=>this.hasCompressionEnabled()&&n},{externalFieldName:"compression_algorithm",formControlName:"algorithm",editable:!0},{externalFieldName:"compression_min_blob_size",formControlName:"minBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_max_blob_size",formControlName:"maxBlobSize",replaceFn:this.formatter.toBytes,editable:!0,resetValue:0},{externalFieldName:"compression_required_ratio",formControlName:"ratio",editable:!0,resetValue:0}]):this.editing&&this.assignFormFields(_,[{externalFieldName:"compression_mode",formControlName:"mode",editable:!0,replaceFn:()=>"unset"},{externalFieldName:"srcpool",formControlName:"name",editable:!0,replaceFn:()=>this.data.pool.pool_name}]));const o=this.data.applications.selected;(o.length>0||this.editing)&&(_.application_metadata=o),this.isReplicated&&!u().isEmpty(this.currentConfigurationValues)&&(_.configuration=this.currentConfigurationValues),this.triggerApiTask(_)}assignFormFields(_,o){o.forEach(n=>this.assignFormField(_,n))}assignFormField(_,{externalFieldName:o,formControlName:n,attr:s,replaceFn:c,editable:d,resetValue:f}){if(this.editing&&(!d||this.form.get(n).pristine))return;const p=this.form.getValue(n);let R=c?c(p):s?u().get(p,s):p;if(!p||!R){if(!d||u().isUndefined(f))return;R=f}_[o]=R}triggerApiTask(_){this.taskWrapper.wrapTaskAroundCall({task:new v.R("pool/"+(this.editing?M.MQ.EDIT:M.MQ.CREATE),{pool_name:_.hasOwnProperty("srcpool")?_.srcpool:_.pool}),call:this.poolService[this.editing?M.MQ.UPDATE:M.MQ.CREATE](_)}).subscribe({error:o=>{u().isObject(o.error)&&"34"===o.error.code&&this.form.get("pgNum").setErrors({34:!0}),this.form.setErrors({cdSubmitButton:!0})},complete:()=>this.router.navigate(["/pool"])})}appSelection(){this.form.get("name").updateValueAndValidity({emitEvent:!1,onlySelf:!0})}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(C_.$),e.Y36(Oe.gz),e.Y36(Oe.F0),e.Y36(xe.Z),e.Y36(ue.q),e.Y36(he.j),e.Y36(M_.H),e.Y36(de.P),e.Y36(Me),e.Y36(Ie.H),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-form"]],viewQuery:function(_,o){if(1&_&&(e.Gf(xo,5),e.Gf(yo,5),e.Gf(Zo,5),e.Gf(Uo,5)),2&_){let n;e.iGM(n=e.CRH())&&(o.crushInfoTabs=n.first),e.iGM(n=e.CRH())&&(o.crushDeletionBtn=n.first),e.iGM(n=e.CRH())&&(o.ecpInfoTabs=n.first),e.iGM(n=e.CRH())&&(o.ecpDeletionBtn=n.first)}},features:[e.qOj],decls:1,vars:1,consts:function(){let i,_,o,n,s,c,d,f,p,R,h,S,m,P,A,I,$,D,x,y,Z,U,H,G,z,q,X,w,Q,J,k,V,Y,B,j,K,N,W,ee,_e,oe,te,ie,ne,se,ae,le,re,ce,O,Xe,we,Qe,Je,ke,Ve,Ye,Be,je,Ke,We,e_,__,o_,t_,i_,n_,s_,a_,l_,r_,c_,O_;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",_="Name",o="Name...",n="Pool type",s="-- Select a pool type --",c="Applications",d="Pools should be associated with an application tag",f="Quotas",p="Max bytes",R="Leave it blank or specify 0 to disable this quota.",h="A valid quota should be greater than 0.",S="e.g., 10GiB",m="Max objects",P="Leave it blank or specify 0 to disable this quota.",A="A valid quota should be greater than 0.",I="This field is required!",$="The chosen Ceph pool name is already in use.",D="It's not possible to create an RBD pool with '/' in the name. Please change the name or remove 'rbd' from the applications list.",x="Pool name can only contain letters, numbers, '.', '-', '_' or '/'.",y="This field is required!",Z="PG Autoscale",U="Placement groups",H="Calculation help",G="This field is required!",z="At least one placement group is needed!",q="Your cluster can't handle this many PGs. Please recalculate the PG amount needed.",X="The current PGs settings were calculated for you, you should make sure the values suit your needs before submit.",w="Replicated size",Q="Minimum: " + "\ufffd0\ufffd" + "",J="Maximum: " + "\ufffd0\ufffd" + "",k="The size specified is out of range. A value from " + "\ufffd0\ufffd" + " to " + "\ufffd1\ufffd" + " is usable.",V="A size of 1 will not create a replication of the object. The 'Replicated size' includes the object itself.",Y="Flags",B="EC Overwrites",j="CRUSH",K="Erasure code profile",N="This profile can't be deleted as it is in use.",W="Loading...",ee="-- No erasure code profile available --",_e="-- Select an erasure code profile --",oe="Profile",te="Used by pools",ie="Profile is not in use.",ne="Crush ruleset",se="A new crush ruleset will be implicitly created.",ae="Crush ruleset",le="There are no rules.",re="-- Select a crush rule --",ce="Placement and\n                          replication strategies or distribution policies that allow to\n                          specify how CRUSH places data replicas.",O="This rule can't be deleted as it is in use.",Xe="Crush rule",we="Crush steps",Qe="Used by pools",Je="Rule is not in use.",ke="This field is required!",Ve="The rule can't be used in the current cluster as it has too few OSDs to meet the minimum required OSD by this rule.",Ye="Compression",Be="Mode",je="Algorithm",Ke="Minimum blob size",We="e.g., 128KiB",e_="Maximum blob size",__="e.g., 512KiB",o_="Ratio",t_="Compression ratio",i_="Loading...",n_="-- No erasure compression algorithm available --",s_="Value should be greater than 0",a_="Value should be less than the maximum blob size",l_="Value should be greater than 0",r_="Value should be greater than the minimum blob size",c_="Value should be between 0.0 and 1.0",O_="The value should be greater or equal to 0",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],i,[1,"card-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],_,[1,"cd-col-form-input"],["id","name","name","name","type","text","placeholder",o,"formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","poolType",1,"cd-col-form-label","required"],n,["id","poolType","formControlName","poolType","name","poolType",1,"form-select"],["ngValue",""],s,[3,"value",4,"ngFor","ngForOf"],[4,"ngIf"],["for","applications",1,"cd-col-form-label"],c,["id","applications",3,"customBadges","customBadgeValidators","messages","data","options","selectionLimit","selection"],["title",d,3,"class",4,"ngIf"],["formGroupName","compression",4,"ngIf"],f,["for","max_bytes",1,"cd-col-form-label"],p,R,h,["id","max_bytes","name","max_bytes","type","text","formControlName","max_bytes","placeholder",S,"defaultUnit","GiB","cdDimlessBinary","",1,"form-control"],["for","max_objects",1,"cd-col-form-label"],m,P,A,["id","max_objects","min","0","name","max_objects","type","number","formControlName","max_objects",1,"form-control"],[3,"hidden"],[3,"form","initializeData","changes"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],I,$,D,x,[3,"value"],y,["for","pgAutoscaleMode",1,"cd-col-form-label"],Z,["id","pgAutoscaleMode","name","pgAutoscaleMode","formControlName","pgAutoscaleMode",1,"form-select"],["class","form-group row",4,"ngIf"],["for","pgNum",1,"cd-col-form-label","required"],U,["id","pgNum","name","pgNum","formControlName","pgNum","min","1","type","number","required","",1,"form-control",3,"focus","blur"],[1,"form-text","text-muted"],["section","pgs","docText",H],["class","form-text text-muted",4,"ngIf"],G,z,q,X,["for","size",1,"cd-col-form-label","required"],w,["id","size","name","size","type","number","formControlName","size",1,"form-control",3,"max","min"],["class","text-warning-dark",4,"ngIf"],[1,"list-inline"],Q,J,k,[1,"text-warning-dark"],V,[1,"cd-col-form-label"],Y,[1,"custom-control","custom-checkbox"],["type","checkbox","id","ec-overwrites","formControlName","ecOverwrites",1,"custom-control-input"],["for","ec-overwrites",1,"custom-control-label"],B,["title",d],j,["for","erasureProfile",1,"cd-col-form-label"],K,[1,"input-group","mb-1"],["id","erasureProfile","name","erasureProfile","formControlName","erasureProfile",1,"form-select"],["ngValue","",4,"ngIf"],[3,"ngValue",4,"ngIf"],[3,"ngValue",4,"ngFor","ngForOf"],["id","ecp-info-button","type","button",1,"btn","btn-light",3,"ngClass","click"],["aria-hidden","true",3,"ngClass"],["class","btn btn-light","type","button",3,"click",4,"ngIf"],["class","btn btn-light","type","button","ngbTooltip",N,"triggers","manual",3,"click",4,"ngIf"],["class","form-text text-muted","id","ecp-info-block",4,"ngIf"],W,[3,"ngValue"],ee,_e,["type","button",1,"btn","btn-light",3,"click"],["type","button","ngbTooltip",N,"triggers","manual",1,"btn","btn-light",3,"click"],["ecpDeletionBtn","ngbTooltip"],["id","ecp-info-block",1,"form-text","text-muted"],["ngbNav","",1,"nav-tabs"],["ecpInfoTabs","ngbNav"],["ngbNavItem","ecp-info"],["ngbNavLink",""],oe,["ngbNavContent",""],["ngbNavItem","used-by-pools"],te,[3,"ngbNavOutlet"],[3,"renderObjects","hideKeys","data","autoReload"],["ecpIsNotUsed",""],[4,"ngIf","ngIfElse"],ie,[4,"ngFor","ngForOf"],["for","crushRule",1,"cd-col-form-label"],ne,se,ae,["noRules",""],le,[1,"input-group"],["id","crushRule","formControlName","crushRule","name","crushSet",1,"form-select"],re,["id","crush-info-button","type","button","ngbTooltip",ce,1,"btn","btn-light",3,"ngClass","click"],["class","btn btn-light","type","button","ngbTooltip",O,"triggers","manual",3,"click",4,"ngIf"],["class","form-text text-muted","id","crush-info-block",4,"ngIf"],["type","button","ngbTooltip",O,"triggers","manual",1,"btn","btn-light",3,"click"],["crushDeletionBtn","ngbTooltip"],["id","crush-info-block",1,"form-text","text-muted"],["crushInfoTabs","ngbNav"],["ngbNavItem","crush-rule-info"],Xe,["ngbNavItem","crush-rule-steps"],we,Qe,["ruleIsNotUsed",""],Je,ke,Ve,["formGroupName","compression"],Ye,["for","mode",1,"cd-col-form-label"],Be,["id","mode","name","mode","formControlName","mode",1,"form-select"],["for","algorithm",1,"cd-col-form-label"],je,["id","algorithm","name","algorithm","formControlName","algorithm",1,"form-select"],["for","minBlobSize",1,"cd-col-form-label"],Ke,["id","minBlobSize","name","minBlobSize","formControlName","minBlobSize","type","text","min","0","placeholder",We,"defaultUnit","KiB","cdDimlessBinary","",1,"form-control"],["for","maxBlobSize",1,"cd-col-form-label"],e_,["id","maxBlobSize","type","text","min","0","formControlName","maxBlobSize","placeholder",__,"defaultUnit","KiB","cdDimlessBinary","",1,"form-control"],["for","ratio",1,"cd-col-form-label"],o_,["id","ratio","name","ratio","formControlName","ratio","type","number","min","0","max","1","step","0.1","placeholder",t_,1,"form-control"],i_,n_,s_,a_,l_,r_,c_,O_]},template:function(_,o){1&_&&e.YNc(0,Yt,70,33,"div",0),2&_&&e.Q6J("cdFormLoading",o.loading)},directives:[bo.y,a._Y,a.JL,Pe.V,a.sg,fe.P,Ee.o,a.Fj,ge.b,a.JJ,a.u,pe.U,C.O5,a.EJ,a.YN,a.Kr,C.sg,a.wV,a.qQ,a.Q7,vo.K,a.Fd,a.Wl,Io.m,C.mk,g._L,g.Pz,g.nv,g.Vx,g.uN,ye.b,g.tO,a.x0,$o.Q,Re.S,Do.d,me.p],pipes:[C.rS,Ce.m],styles:[".icon-warning-color[_ngcontent-%COMP%]{margin-left:3px}"]}),t})();var Bt=r(19773),jt=r(20687),Kt=r(68136),Se=r(69158),Te=r(83697),L=r(99466),Wt=r(91801),ei=r(68774),_i=r(66369),He=r(38047),Le=r(51847);class oi{constructor(i){this.pool_name=i}}var ti=r(64724),ii=r(94928),Ge=r(51295),ni=r(59376),ze=r(76317),si=r(42176);function ai(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",12),2&t){const _=e.oxw(2);e.Q6J("renderObjects",!0)("data",_.poolDetails)("autoReload",!1)}}function li(t,i){if(1&t&&e._UZ(0,"cd-grafana",15),2&t){const _=e.oxw(3);e.MGl("grafanaPath","ceph-pool-detail?var-pool_name=",_.selection.pool_name,""),e.Q6J("type","metrics")}}function ri(t,i){1&t&&(e.ynx(0,13),e.TgZ(1,"a",5),e.SDv(2,14),e.qZA(),e.YNc(3,li,1,2,"ng-template",7),e.BQk())}function ci(t,i){if(1&t&&e._UZ(0,"cd-rbd-configuration-table",18),2&t){const _=e.oxw(3);e.Q6J("data",_.selectedPoolConfiguration)}}function Oi(t,i){1&t&&(e.ynx(0,16),e.TgZ(1,"a",5),e.SDv(2,17),e.qZA(),e.YNc(3,ci,1,1,"ng-template",7),e.BQk())}function di(t,i){if(1&t&&e._UZ(0,"cd-table",21),2&t){const _=e.oxw(3);e.Q6J("data",_.cacheTiers)("columns",_.cacheTierColumns)("autoSave",!1)}}function ui(t,i){1&t&&(e.ynx(0,19),e.TgZ(1,"a",5),e.SDv(2,20),e.qZA(),e.YNc(3,di,1,3,"ng-template",7),e.BQk())}function Pi(t,i){if(1&t&&(e.ynx(0,1),e.TgZ(1,"nav",2,3),e.ynx(3,4),e.TgZ(4,"a",5),e.SDv(5,6),e.qZA(),e.YNc(6,ai,1,3,"ng-template",7),e.BQk(),e.YNc(7,ri,4,0,"ng-container",8),e.YNc(8,Oi,4,0,"ng-container",9),e.YNc(9,ui,4,0,"ng-container",10),e.qZA(),e._UZ(10,"div",11),e.BQk()),2&t){const _=e.MAs(2),o=e.oxw();e.xp6(7),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngIf","replicated"===o.selection.type),e.xp6(1),e.Q6J("ngIf",(null==o.selection.tiers?null:o.selection.tiers.length)>0),e.xp6(1),e.Q6J("ngbNavOutlet",_)}}let fi=(()=>{class t{constructor(_){this.poolService=_,this.cacheTierColumns=[],this.omittedPoolAttributes=["cdExecuting","cdIsBinary","stats"],this.cacheTierColumns=[{prop:"pool_name",name:"Name",flexGrow:3},{prop:"cache_mode",name:"Cache Mode",flexGrow:2},{prop:"cache_min_evict_age",name:"Min Evict Age",flexGrow:2},{prop:"cache_min_flush_age",name:"Min Flush Age",flexGrow:2},{prop:"target_max_bytes",name:"Target Max Bytes",flexGrow:2},{prop:"target_max_objects",name:"Target Max Objects",flexGrow:2}]}ngOnChanges(){this.selection&&(this.poolService.getConfiguration(this.selection.pool_name).subscribe(_=>{Ge.T.updateChanged(this,{selectedPoolConfiguration:_})}),Ge.T.updateChanged(this,{poolDetails:u().omit(this.selection,this.omittedPoolAttributes)}))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ue.q))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-details"]],inputs:{cacheTiers:"cacheTiers",permissions:"permissions",selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let i,_,o,n,s;return i="Details",_="Performance Details",o="Pool details",n="Configuration",s="Cache Tiers Details",[["cdTableDetail","",4,"ngIf"],["cdTableDetail",""],["ngbNav","","cdStatefulTab","pool-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","performance-details",4,"ngIf"],["ngbNavItem","configuration",4,"ngIf"],["ngbNavItem","cache-tiers-details",4,"ngIf"],[3,"ngbNavOutlet"],[3,"renderObjects","data","autoReload"],["ngbNavItem","performance-details"],_,["title",o,"uid","-xyV8KCiz","grafanaStyle","three",3,"grafanaPath","type"],["ngbNavItem","configuration"],n,[3,"data"],["ngbNavItem","cache-tiers-details"],s,["columnMode","flex",3,"data","columns","autoSave"]]},template:function(_,o){1&_&&e.YNc(0,Pi,11,4,"ng-container",0),2&_&&e.Q6J("ngIf",o.selection)},directives:[C.O5,g.Pz,ni.m,g.nv,g.Vx,g.uN,ye.b,ze.F,si.P,Te.a,g.tO],styles:[""],changeDetection:0}),t})(),Ei=(()=>{class t{constructor(_,o,n){this.templateRef=_,this.viewContainer=o,this.authStorageService=n,this.cdScopeMatchAll=!0}set cdScope(_){this.permissions=this.authStorageService.getPermissions(),this.isAuthorized(_)?this.viewContainer.createEmbeddedView(this.templateRef):this.viewContainer.clear()}isAuthorized(_){const o=this.cdScopeMatchAll?u().every:u().some;return u().isString(_)?u().get(this.permissions,[_,"read"],!1):u().isArray(_)?o(_,n=>this.permissions[n].read):!!u().isObject(_)&&o(_,(n,s)=>o(n,c=>this.permissions[s][c]))}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(e.Rgc),e.Y36(e.s_b),e.Y36(he.j))},t.\u0275dir=e.lG2({type:t,selectors:[["","cdScope",""]],inputs:{cdScope:"cdScope",cdScopeMatchAll:"cdScopeMatchAll"}}),t})();var gi=r(60251);const pi=["poolUsageTpl"],Ri=["poolConfigurationSourceTpl"];function mi(t,i){if(1&t){const _=e.EpF();e.TgZ(0,"cd-table",9,10),e.NdJ("fetchData",function(){return e.CHM(_),e.oxw().taskListService.fetch()})("setExpandedRow",function(n){return e.CHM(_),e.oxw().setExpandedRow(n)})("updateSelection",function(n){return e.CHM(_),e.oxw().updateSelection(n)}),e._UZ(2,"cd-table-actions",11)(3,"cd-pool-details",12),e.qZA()}if(2&t){const _=e.oxw();e.Q6J("data",_.pools)("columns",_.columns)("hasDetails",!0)("status",_.tableStatus)("autoReload",-1),e.xp6(2),e.Q6J("permission",_.permissions.pool)("selection",_.selection)("tableActions",_.tableActions),e.xp6(1),e.Q6J("selection",_.expandedRow)("permissions",_.permissions)("cacheTiers",_.cacheTiers)}}function Ci(t,i){1&t&&e._UZ(0,"cd-grafana",14),2&t&&e.Q6J("grafanaPath","ceph-pools-overview?")("type","metrics")}function Mi(t,i){1&t&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,13),e.qZA(),e.YNc(3,Ci,1,2,"ng-template",5),e.BQk())}function hi(t,i){if(1&t&&e._UZ(0,"cd-usage-bar",16),2&t){const _=e.oxw().row;e.Q6J("total",_.stats.bytes_used.latest+_.stats.avail_raw.latest)("used",_.stats.bytes_used.latest)("title",_.pool_name)}}function Si(t,i){if(1&t&&e.YNc(0,hi,1,3,"cd-usage-bar",15),2&t){const _=i.row;e.Q6J("ngIf",null==_.stats||null==_.stats.avail_raw?null:_.stats.avail_raw.latest)}}let Ti=(()=>{class t extends Kt.o{constructor(_,o,n,s,c,d,f,p,R,h,S){super(),this.poolService=_,this.taskWrapper=o,this.ecpService=n,this.authStorageService=s,this.taskListService=c,this.modalService=d,this.pgCategoryService=f,this.dimlessPipe=p,this.urlBuilder=R,this.configurationService=h,this.actionLabels=S,this.selection=new ei.r,this.executingTasks=[],this.tableStatus=new Se.E,this.cacheTiers=[],this.monAllowPoolDelete=!1,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"create",icon:b.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:b.P.edit,routerLink:()=>this.urlBuilder.getEdit(encodeURIComponent(this.selection.first().pool_name)),name:this.actionLabels.EDIT},{permission:"delete",icon:b.P.destroy,click:()=>this.deletePoolModal(),name:this.actionLabels.DELETE,disable:this.getDisableDesc.bind(this)}],this.permissions.configOpt.read&&this.configurationService.get("mon_allow_pool_delete").subscribe(m=>{if(u().has(m,"value")){const P=u().find(m.value,A=>"mon"===A.section)||{value:!1};this.monAllowPoolDelete="true"===P.value}})}ngOnInit(){const _=(o,n,s)=>u().get(n,o)>u().get(s,o)?1:-1;this.columns=[{prop:"pool_name",name:"Name",flexGrow:4,cellTransformation:L.e.executing},{prop:"data_protection",name:"Data Protection",cellTransformation:L.e.badge,customTemplateConfig:{class:"badge-background-gray"},flexGrow:1.3},{prop:"application_metadata",name:"Applications",cellTransformation:L.e.badge,customTemplateConfig:{class:"badge-background-primary"},flexGrow:1.5},{prop:"pg_status",name:"PG Status",flexGrow:1.2,cellClass:({row:o,column:n,value:s})=>this.getPgStatusCellClass(o,n,s)},{prop:"crush_rule",name:"Crush Ruleset",isHidden:!0,flexGrow:2},{name:"Usage",prop:"usage",cellTemplate:this.poolUsageTpl,flexGrow:1.2},{prop:"stats.rd_bytes.rates",name:"Read bytes",comparator:(o,n,s,c)=>_("stats.rd_bytes.latest",s,c),cellTransformation:L.e.sparkline,flexGrow:1.5},{prop:"stats.wr_bytes.rates",name:"Write bytes",comparator:(o,n,s,c)=>_("stats.wr_bytes.latest",s,c),cellTransformation:L.e.sparkline,flexGrow:1.5},{prop:"stats.rd.rate",name:"Read ops",flexGrow:1,pipe:this.dimlessPipe,cellTransformation:L.e.perSecond},{prop:"stats.wr.rate",name:"Write ops",flexGrow:1,pipe:this.dimlessPipe,cellTransformation:L.e.perSecond}],this.taskListService.init(()=>this.ecpService.list().pipe((0,Bt.zg)(o=>(this.ecProfileList=o,this.poolService.getList()))),void 0,o=>{this.pools=this.transformPoolsData(o),this.tableStatus=new Se.E},()=>{this.table.reset(),this.tableStatus=new Se.E(Wt.T.ValueException)},o=>o.name.startsWith("pool/"),(o,n)=>n.metadata.pool_name===o.pool_name,{default:o=>new oi(o.pool_name)})}updateSelection(_){this.selection=_}deletePoolModal(){const _=this.selection.first().pool_name;this.modalService.show(Ne.M,{itemDescription:"Pool",itemNames:[_],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new v.R(`pool/${M.MQ.DELETE}`,{pool_name:_}),call:this.poolService.delete(_)})})}getPgStatusCellClass(_,o,n){return{"text-right":!0,[`pg-${this.pgCategoryService.getTypeByStates(n)}`]:!0}}getErasureCodeProfile(_){let o="";return u().forEach(this.ecProfileList,n=>{n.name===_&&(o=`EC: ${n.k}+${n.m}`)}),o}transformPoolsData(_){const o=["bytes_used","max_avail","avail_raw","percent_used","rd_bytes","wr_bytes","rd","wr"],n={latest:0,rate:0,rates:[]};return u().forEach(_,s=>{s.pg_status=this.transformPgStatus(s.pg_status);const c={};u().forEach(o,d=>{c[d]=s.stats&&s.stats[d]?s.stats[d]:n}),s.stats=c,s.usage=c.percent_used.latest,!s.cdExecuting&&s.pg_num+s.pg_placement_num!==s.pg_num_target+s.pg_placement_num_target&&(s.cdExecuting="Updating"),["rd_bytes","wr_bytes"].forEach(d=>{s.stats[d].rates=s.stats[d].rates.map(f=>f[1])}),s.cdIsBinary=!0,"erasure"===s.type&&(s.data_protection=this.getErasureCodeProfile(s.erasure_code_profile)),"replicated"===s.type&&(s.data_protection=`replica: \xd7${s.size}`)}),_}transformPgStatus(_){const o=[];return u().forEach(_,(n,s)=>{o.push(`${n} ${s}`)}),o.join(", ")}getSelectionTiers(){if(void 0!==this.expandedRow){const _=this.expandedRow.tiers;this.cacheTiers=this.pools.filter(o=>_.includes(o.pool))}}getDisableDesc(){var _;return!(null===(_=this.selection)||void 0===_?void 0:_.hasSelection)||!this.monAllowPoolDelete&&"Pool deletion is disabled by the mon_allow_pool_delete configuration setting."}setExpandedRow(_){super.setExpandedRow(_),this.getSelectionTiers()}}return t.\u0275fac=function(_){return new(_||t)(e.Y36(ue.q),e.Y36(de.P),e.Y36(Me),e.Y36(he.j),e.Y36(He.j),e.Y36(xe.Z),e.Y36(jt.j),e.Y36(_i.n),e.Y36(Le.F),e.Y36(ti.e),e.Y36(M.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pool-list"]],viewQuery:function(_,o){if(1&_&&(e.Gf(Te.a,5),e.Gf(pi,7),e.Gf(Ri,5)),2&_){let n;e.iGM(n=e.CRH())&&(o.table=n.first),e.iGM(n=e.CRH())&&(o.poolUsageTpl=n.first),e.iGM(n=e.CRH())&&(o.poolConfigurationSourceTpl=n.first)}},features:[e._Bn([He.j,{provide:Le.F,useValue:new Le.F("pool")}]),e.qOj],decls:10,vars:2,consts:function(){let i,_,o;return i="Pools List",_="Overall Performance",o="Ceph pools overview",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","",4,"cdScope"],[3,"ngbNavOutlet"],["poolUsageTpl",""],["id","pool-list","selectionType","single",3,"data","columns","hasDetails","status","autoReload","fetchData","setExpandedRow","updateSelection"],["table",""],["id","pool-list-actions",1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","","id","pool-list-details",3,"selection","permissions","cacheTiers"],_,["title",o,"uid","z99hzWtmk","grafanaStyle","two",3,"grafanaPath","type"],["decimals","2",3,"total","used","title",4,"ngIf"],["decimals","2",3,"total","used","title"]]},template:function(_,o){if(1&_&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,mi,4,11,"ng-template",5),e.BQk(),e.YNc(6,Mi,4,0,"ng-container",6),e.qZA(),e._UZ(7,"div",7),e.YNc(8,Si,1,1,"ng-template",null,8,e.W1O)),2&_){const n=e.MAs(1);e.xp6(6),e.Q6J("cdScope","grafana"),e.xp6(1),e.Q6J("ngbNavOutlet",n)}},directives:[g.Pz,g.nv,g.Vx,g.uN,Te.a,ii.K,fi,Ei,ze.F,g.tO,C.O5,gi.O],styles:["cd-pool-list .pg-clean{color:#008a00}  cd-pool-list .pg-working{color:#25828e}  cd-pool-list .pg-warning{color:#d48200}  cd-pool-list .pg-unknown{color:#dc3545}"]}),t})(),qe=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[[P_.t,C.ez,g.Oz,d_.m,Oe.Bz,a.UX,g.HK,u_.BlockModule]]}),t})();const Li=[{path:"",component:Ti},{path:M.MQ.CREATE,component:Ue,data:{breadcrumbs:M.Qn.CREATE}},{path:`${M.MQ.EDIT}/:name`,component:Ue,data:{breadcrumbs:M.Qn.EDIT}}];let Ai=(()=>{class t{}return t.\u0275fac=function(_){return new(_||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[[qe,Oe.Bz.forChild(Li)]]}),t})()}}]);
\ No newline at end of file
index fedb83e8d15a845d20a83b5152d1276942ca9de1..472dff7280544307576935c02a867420753879bf 100644 (file)
@@ -4,7 +4,7 @@
 
   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
   <link rel="icon" type="image/x-icon" id="cdFavicon" href="favicon.ico">
-<style>@charset "UTF-8";:root{--white:#fff;--gray-100:#f8f9fa;--gray-200:#e9ecef;--gray-300:#dee2e6;--gray-400:#ced4da;--gray-500:#adb5bd;--gray-600:#6c757d;--gray-700:#495057;--gray-800:#343a40;--gray-900:#212529;--black:#000;--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#a94442;--red:#dc3545;--orange:#fd7e14;--yellow:#d48200;--green:#008a00;--teal:#20c997;--cyan:#17a2b8;--barley-white:#fcecba;--primary:#25828e;--primary-500:#2b99a8;--secondary:#374249;--success:#008a00;--info:#25828e;--warning:#d48200;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--green-300:#6ec664;--cyan-300:#009596;--purple-300:#a18fff;--light-blue-300:#35caed;--gold-300:#f4c145;--light-green-300:#ace12e;--accent:#25828e;--warning-dark:#fd7e14;--fg-color-over-dark-bg:#fff;--fg-hover-color-over-dark-bg:#adb5bd;--body-color-bright:#f8f9fa;--body-bg:#fff;--body-color:#212529;--body-bg-alt:#e9ecef;--health-color-error:#dc3545;--health-color-healthy:#008a00;--health-color-warning:#d48200;--health-color-warning-800:#9d6d10;--chart-color-red:#dc3545;--chart-color-blue:#06c;--chart-color-orange:#ef9234;--chart-color-yellow:#f6d173;--chart-color-green:#008a00;--chart-color-gray:#ededed;--chart-color-cyan:#2b99a8;--chart-color-light-gray:#f0f0f0;--chart-color-slight-dark-gray:#d7d7d7;--chart-color-dark-gray:#afafaf;--chart-color-purple:#3c3d99;--chart-color-white:#fff;--chart-color-center-text:#151515;--chart-color-center-text-description:#72767b;--chart-color-tooltip-background:#000;--chart-danger:#c9190b;--chart-color-strong-blue:#0078c8;--chart-color-translucent-blue:#0096dc80;--font-family-sans-serif:"Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--card-cap-bg:#f8f9fa;--grid-gutter-width:30px;--datatable-divider-color:rgba(0, 0, 0, .09);--nav-tabs-margin-bottom:1rem;--tooltip-color:#fff;--tooltip-bg:#212529;--tooltip-opacity:1;--screen-sm-min:576px;--screen-md-min:768px;--screen-lg-min:992px;--screen-xl-min:1200px;--screen-xs-max:575px;--screen-sm-max:767px;--screen-md-max:991px;--screen-lg-max:1199px;--navbar-height:43px}:root{--bs-blue:#007bff;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#a94442;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#d48200;--bs-green:#008a00;--bs-teal:#20c997;--bs-cyan:#17a2b8;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-accent:#25828e;--bs-warning-dark:#fd7e14;--bs-primary:#25828e;--bs-secondary:#374249;--bs-success:#008a00;--bs-info:#25828e;--bs-warning:#d48200;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#343a40;--bs-font-sans-serif:"Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0))}*,*:before,*:after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{background-color:#fff}html,body{font-size:12px;height:100%;width:100%}</style><link rel="stylesheet" href="styles.84a45510313e718c.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles.84a45510313e718c.css"></noscript></head>
+<style>@charset "UTF-8";:root{--white:#fff;--gray-100:#f8f9fa;--gray-200:#e9ecef;--gray-300:#dee2e6;--gray-400:#ced4da;--gray-500:#adb5bd;--gray-600:#6c757d;--gray-700:#495057;--gray-800:#343a40;--gray-900:#212529;--black:#000;--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#a94442;--red:#dc3545;--orange:#fd7e14;--yellow:#d48200;--green:#008a00;--teal:#20c997;--cyan:#17a2b8;--barley-white:#fcecba;--primary:#25828e;--primary-500:#2b99a8;--secondary:#374249;--success:#008a00;--info:#25828e;--warning:#d48200;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--green-300:#6ec664;--cyan-300:#009596;--purple-300:#a18fff;--light-blue-300:#35caed;--gold-300:#f4c145;--light-green-300:#ace12e;--accent:#25828e;--warning-dark:#fd7e14;--fg-color-over-dark-bg:#fff;--fg-hover-color-over-dark-bg:#adb5bd;--body-color-bright:#f8f9fa;--body-bg:#fff;--body-color:#212529;--body-bg-alt:#e9ecef;--health-color-error:#dc3545;--health-color-healthy:#008a00;--health-color-warning:#d48200;--health-color-warning-800:#9d6d10;--chart-color-red:#dc3545;--chart-color-blue:#06c;--chart-color-orange:#ef9234;--chart-color-yellow:#f6d173;--chart-color-green:#008a00;--chart-color-gray:#ededed;--chart-color-cyan:#2b99a8;--chart-color-light-gray:#f0f0f0;--chart-color-slight-dark-gray:#d7d7d7;--chart-color-dark-gray:#afafaf;--chart-color-purple:#3c3d99;--chart-color-white:#fff;--chart-color-center-text:#151515;--chart-color-center-text-description:#72767b;--chart-color-tooltip-background:#000;--chart-danger:#c9190b;--chart-color-strong-blue:#0078c8;--chart-color-translucent-blue:rgba(0, 150, 220, .5019607843);--chart-color-border:rgba(0, 0, 0, .1254901961);--chart-color-translucent-yellow:rgba(239, 146, 52, .4470588235);--font-family-sans-serif:"Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--card-cap-bg:#f8f9fa;--grid-gutter-width:30px;--datatable-divider-color:rgba(0, 0, 0, .09);--nav-tabs-margin-bottom:1rem;--tooltip-color:#fff;--tooltip-bg:#212529;--tooltip-opacity:1;--screen-sm-min:576px;--screen-md-min:768px;--screen-lg-min:992px;--screen-xl-min:1200px;--tree-container-height:200px;--screen-xs-max:575px;--screen-sm-max:767px;--screen-md-max:991px;--screen-lg-max:1199px;--navbar-height:43px}:root{--bs-blue:#007bff;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#a94442;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#d48200;--bs-green:#008a00;--bs-teal:#20c997;--bs-cyan:#17a2b8;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-accent:#25828e;--bs-warning-dark:#fd7e14;--bs-primary:#25828e;--bs-secondary:#374249;--bs-success:#008a00;--bs-info:#25828e;--bs-warning:#d48200;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#343a40;--bs-accent-rgb:37, 130, 142;--bs-warning-dark-rgb:253, 126, 20;--bs-primary-rgb:37, 130, 142;--bs-secondary-rgb:55, 66, 73;--bs-success-rgb:0, 138, 0;--bs-info-rgb:37, 130, 142;--bs-warning-rgb:212, 130, 0;--bs-danger-rgb:220, 53, 69;--bs-light-rgb:248, 249, 250;--bs-dark-rgb:52, 58, 64;--bs-white-rgb:255, 255, 255;--bs-black-rgb:0, 0, 0;--bs-body-color-rgb:33, 37, 41;--bs-body-bg-rgb:255, 255, 255;--bs-font-sans-serif:"Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, .175);--bs-border-radius:.375rem;--bs-border-radius-sm:.25rem;--bs-border-radius-lg:.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#25828e;--bs-link-hover-color:#1e6872;--bs-code-color:#a94442;--bs-highlight-bg:#f6e6cc}*,*:before,*:after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{background-color:#fff}html,body{font-size:12px;height:100%;width:100%}</style><link rel="stylesheet" href="styles.5f6140b407c420b8.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles.5f6140b407c420b8.css"></noscript></head>
 <body>
   <noscript>
     <div class="noscript container"
@@ -18,6 +18,6 @@
   </noscript>
 
   <cd-root></cd-root>
-<script src="runtime.4bd595c16d7c473d.js" type="module"></script><script src="polyfills.4b60b22744014b0b.js" type="module"></script><script src="scripts.cfd741a72b67f696.js" defer></script><script src="main.8be028f171baab96.js" type="module"></script>
+<script src="runtime.a53144ca583f6e2c.js" type="module"></script><script src="polyfills.374f1f989f34e1be.js" type="module"></script><script src="scripts.177a7ad3f45b4499.js" defer></script><script src="main.871e04c0fd27227d.js" type="module"></script>
 
 </body></html>
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.871e04c0fd27227d.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.871e04c0fd27227d.js
new file mode 100644 (file)
index 0000000..deabf4f
--- /dev/null
@@ -0,0 +1,3 @@
+globalThis.$localize=Object.assign(globalThis.$localize || {},{locale:"en-US"});
+"use strict";(function(global){global.ng=global.ng||{};global.ng.common=global.ng.common||{};global.ng.common.locales=global.ng.common.locales||{};const u=undefined;function plural(val){const n=val,i=Math.floor(Math.abs(val)),v=val.toString().replace(/^[^.]*\.?/,"").length;if(i===1&&v===0)return 1;return 5}global.ng.common.locales["en"]=["en",[["a","p"],["AM","PM"],u],[["AM","PM"],u,u],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],u,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],u,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",u,"{1} 'at' {0}",u],[".",",",";","%","+","-","E","\xD7","\u2030","\u221E","NaN",":"],["#,##0.###","#,##0%","\xA4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",plural,[[["mi","n","in the morning","in the afternoon","in the evening","at night"],["midnight","noon","in the morning","in the afternoon","in the evening","at night"],u],[["midnight","noon","morning","afternoon","evening","night"],u,u],["00:00","12:00",["06:00","12:00"],["12:00","18:00"],["18:00","21:00"],["21:00","06:00"]]]]})(typeof globalThis!=="undefined"&&globalThis||typeof global!=="undefined"&&global||typeof window!=="undefined"&&window);;
+(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[179],{43155:(E,C)=>{"use strict";C.N=void 0;var r=/^([^\w]*)(javascript|data|vbscript)/im,a=/&#(\w+)(^\w|;)?/g,c=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,u=/^([^:]+):/gm,e=[".","/"];C.N=function T(M){var w=function m(M){return M.replace(a,function(w,D){return String.fromCharCode(D)})}(M||"").replace(c,"").trim();if(!w)return"about:blank";if(function f(M){return e.indexOf(M[0])>-1}(w))return w;var D=w.match(u);return D&&r.test(D[0])?"about:blank":w}},62946:(E,C,s)=>{"use strict";s.d(C,{iM:()=>Tf,qr:()=>b1,xc:()=>Av});var r=s(64537),a=s(88692),c=function(L,q){return(c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(j,Ae){j.__proto__=Ae}||function(j,Ae){for(var St in Ae)Ae.hasOwnProperty(St)&&(j[St]=Ae[St])})(L,q)};function u(L,q){function j(){this.constructor=L}c(L,q),L.prototype=null===q?Object.create(q):(j.prototype=q.prototype,new j)}var e=function(){return e=Object.assign||function(q){for(var j,Ae=1,St=arguments.length;Ae<St;Ae++)for(var Kt in j=arguments[Ae])Object.prototype.hasOwnProperty.call(j,Kt)&&(q[Kt]=j[Kt]);return q},e.apply(this,arguments)};function f(L,q){var j="function"==typeof Symbol&&L[Symbol.iterator];if(!j)return L;var St,ur,Ae=j.call(L),Kt=[];try{for(;(void 0===q||q-- >0)&&!(St=Ae.next()).done;)Kt.push(St.value)}catch(Br){ur={error:Br}}finally{try{St&&!St.done&&(j=Ae.return)&&j.call(Ae)}finally{if(ur)throw ur.error}}return Kt}function m(){for(var L=[],q=0;q<arguments.length;q++)L=L.concat(f(arguments[q]));return L}var T="An invariant failed, however the error is obfuscated because this is an production build.",M=[];Object.freeze(M);var w={};Object.freeze(w);var D={};function U(){return typeof window<"u"?window:typeof global<"u"?global:D}function W(){return++Bn.mobxGuid}function $(L){throw J(!1,L),"X"}function J(L,q){if(!L)throw new Error("[mobx] "+(q||T))}function de(L){var q=!1;return function(){if(!q)return q=!0,L.apply(this,arguments)}}var V=function(){};function se(L){return null!==L&&"object"==typeof L}function fe(L){if(null===L||"object"!=typeof L)return!1;var q=Object.getPrototypeOf(L);return q===Object.prototype||null===q}function ge(L,q,j){Object.defineProperty(L,q,{enumerable:!1,writable:!0,configurable:!0,value:j})}function Et(L,q,j){Object.defineProperty(L,q,{enumerable:!1,writable:!1,configurable:!0,value:j})}function qe(L,q){var j="isMobX"+L;return q.prototype[j]=!0,function(Ae){return se(Ae)&&!0===Ae[j]}}function Le(L){return void 0!==U().Map&&L instanceof U().Map}function Pt(L){return L instanceof Set}function it(L){for(var q=[];;){var j=L.next();if(j.done)break;q.push(j.value)}return q}function Xt(){return"function"==typeof Symbol&&Symbol.toPrimitive||"@@toPrimitive"}function cn(L){return null===L?null:"object"==typeof L?""+L:L}function pn(){return"function"==typeof Symbol&&Symbol.iterator||"@@iterator"}function Rn(L,q){Et(L,pn(),q)}function At(L){return L[pn()]=sn,L}function qt(){return"function"==typeof Symbol&&Symbol.toStringTag||"@@toStringTag"}function sn(){return this}var fn=function(){function L(q){void 0===q&&(q="Atom@"+W()),this.name=q,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=an.NOT_TRACKING}return L.prototype.onBecomeUnobserved=function(){},L.prototype.onBecomeObserved=function(){},L.prototype.reportObserved=function(){return Ro(this)},L.prototype.reportChanged=function(){Is(),function jl(L){if(L.lowestObserverState!==an.STALE){L.lowestObserverState=an.STALE;for(var q=L.observers,j=q.length;j--;){var Ae=q[j];Ae.dependenciesState===an.UP_TO_DATE&&(Ae.isTracing!==lt.NONE&&da(Ae,L),Ae.onBecomeStale()),Ae.dependenciesState=an.STALE}}}(this),la()},L.prototype.toString=function(){return this.name},L}(),xn=qe("Atom",fn);function Or(L,q){return L===q}var jr={identity:Or,structural:function Lr(L,q){return ca(L,q)},default:function Qr(L,q){return function He(L,q){return"number"==typeof L&&"number"==typeof q&&isNaN(L)&&isNaN(q)}(L,q)||Or(L,q)},shallow:function ir(L,q){return ca(L,q,1)}},br={},ht={};function Tt(L){if(!0!==L.__mobxDidRunLazyInitializers){var q=L.__mobxDecorators;if(q)for(var j in ge(L,"__mobxDidRunLazyInitializers",!0),q){var Ae=q[j];Ae.propertyCreator(L,Ae.prop,Ae.descriptor,Ae.decoratorTarget,Ae.decoratorArguments)}}}function wn(L,q){return function(){var Ae,St=function(ur,Br,Ii,ms){return!0===ms?(q(ur,Br,Ii,ur,Ae),null):(Object.prototype.hasOwnProperty.call(ur,"__mobxDecorators")||ge(ur,"__mobxDecorators",e({},ur.__mobxDecorators)),ur.__mobxDecorators[Br]={prop:Br,propertyCreator:q,descriptor:Ii,decoratorTarget:ur,decoratorArguments:Ae},function Wt(L,q){var j=q?br:ht;return j[L]||(j[L]={configurable:!0,enumerable:q,get:function(){return Tt(this),this[L]},set:function(Ae){Tt(this),this[L]=Ae}})}(Br,L))};return function jn(L){return(2===L.length||3===L.length)&&"string"==typeof L[1]||4===L.length&&!0===L[3]}(arguments)?(Ae=M,St.apply(null,arguments)):(Ae=Array.prototype.slice.call(arguments),St)}}function hr(L,q,j){return El(L)?L:Array.isArray(L)?jt.array(L,{name:j}):fe(L)?jt.object(L,void 0,{name:j}):Le(L)?jt.map(L,{name:j}):Pt(L)?jt.set(L,{name:j}):L}function Wi(L){return L}function kr(L){var q=wn(!0,function(Ae,St,Kt,ur,Br){!function An(L,q,j,Ae){var St=Gt(L);if(bt(St)){var Kt=Je(St,{object:L,name:q,type:"add",newValue:j});if(!Kt)return;j=Kt.newValue}j=(St.values[q]=new ji(j,Ae,St.name+"."+q,!1)).value,Object.defineProperty(L,q,function yr(L){return Hr[L]||(Hr[L]={configurable:!0,enumerable:!0,get:function(){return this.$mobx.read(this,L)},set:function(q){this.$mobx.write(this,L,q)}})}(q)),St.keys&&St.keys.push(q),function Io(L,q,j,Ae){var St=en(L),Kt=fa(),ur=St||Kt?{type:"add",object:q,name:j,newValue:Ae}:null;Kt&&No(e({},ur,{name:L.name,key:j})),St&&To(L,ur),Kt&&ns()}(St,L,q,j)}(Ae,St,Kt?Kt.initializer?Kt.initializer.call(Ae):Kt.value:void 0,L)}),j=(typeof process<"u"&&process,q);return j.enhancer=L,j}var Ei={deep:!0,name:void 0,defaultDecorator:void 0};function pr(L){return null==L?Ei:"string"==typeof L?{name:L,deep:!0}:L}function Eo(L){return L.defaultDecorator?L.defaultDecorator.enhancer:!1===L.deep?Wi:hr}Object.freeze(Ei),Object.freeze({deep:!1,name:void 0,defaultDecorator:void 0});var po=kr(hr),$i=kr(function Oi(L,q,j){return null==L||Gr(L)||du(L)||ja(L)||yt(L)?L:Array.isArray(L)?jt.array(L,{name:j,deep:!1}):fe(L)?jt.object(L,void 0,{name:j,deep:!1}):Le(L)?jt.map(L,{name:j,deep:!1}):Pt(L)?jt.set(L,{name:j,deep:!1}):$(!1)}),qr=kr(Wi),Hi=kr(function so(L,q,j){return ca(L,q)?q:L}),Hn={box:function(L,q){arguments.length>2&&Fe("box");var j=pr(q);return new ji(L,Eo(j),j.name,!0,j.equals)},shallowBox:function(L,q){return arguments.length>2&&Fe("shallowBox"),jt.box(L,{name:q,deep:!1})},array:function(L,q){arguments.length>2&&Fe("array");var j=pr(q);return new sc(L,Eo(j),j.name)},shallowArray:function(L,q){return arguments.length>2&&Fe("shallowArray"),jt.array(L,{name:q,deep:!1})},map:function(L,q){arguments.length>2&&Fe("map");var j=pr(q);return new kl(L,Eo(j),j.name)},shallowMap:function(L,q){return arguments.length>2&&Fe("shallowMap"),jt.map(L,{name:q,deep:!1})},set:function(L,q){arguments.length>2&&Fe("set");var j=pr(q);return new Ee(L,Eo(j),j.name)},object:function(L,q,j){return"string"==typeof arguments[1]&&Fe("object"),function qu(L,q,j,Ae){var Kt=(Ae=pr(Ae)).defaultDecorator||(!1===Ae.deep?qr:po);Tt(L),Gt(L,Ae.name,Kt.enhancer),Is();try{for(var St in q){var ur=Object.getOwnPropertyDescriptor(q,St),Ii=(j&&St in j?j[St]:ur.get?Ie:Kt)(L,St,ur,!0);Ii&&Object.defineProperty(L,St,Ii)}}finally{la()}return L}({},L,q,pr(j))},shallowObject:function(L,q){return"string"==typeof arguments[1]&&Fe("shallowObject"),jt.object(L,{},{name:q,deep:!1})},ref:qr,shallow:$i,deep:po,struct:Hi},jt=function Dn(L,q,j){if("string"==typeof arguments[1])return po.apply(null,arguments);if(El(L))return L;var Ae=fe(L)?jt.object(L,q,j):Array.isArray(L)?jt.array(L,q):Le(L)?jt.map(L,q):Pt(L)?jt.set(L,q):L;if(Ae!==L)return Ae;$(!1)};function Fe(L){$("Expected one or two arguments to observable."+L+". Did you accidentally try to use observable."+L+" as decorator?")}Object.keys(Hn).forEach(function(L){return jt[L]=Hn[L]});var Ie=wn(!1,function(L,q,j,Ae,St){!function kn(L,q,j){var Ae=Gt(L);j.name=Ae.name+"."+q,j.context=L,Ae.values[q]=new Po(j),Object.defineProperty(L,q,function Go(L){return Xr[L]||(Xr[L]={configurable:Bn.computedConfigurable,enumerable:!1,get:function(){return Rr(this).read(this,L)},set:function(q){Rr(this).write(this,L,q)}})}(q))}(L,q,e({get:j.get,set:j.set},St[0]||{}))}),et=Ie({equals:jr.structural}),ze=function(q,j,Ae){if("string"==typeof j||null!==q&&"object"==typeof q&&1===arguments.length)return Ie.apply(null,arguments);var St="object"==typeof j?j:{};return St.get=q,St.set="function"==typeof j?j:St.set,St.name=St.name||q.name||"",new Po(St)};ze.struct=et;var an=(()=>{return(L=an||(an={}))[L.NOT_TRACKING=-1]="NOT_TRACKING",L[L.UP_TO_DATE=0]="UP_TO_DATE",L[L.POSSIBLY_STALE=1]="POSSIBLY_STALE",L[L.STALE=2]="STALE",an;var L})(),lt=(()=>{return(L=lt||(lt={}))[L.NONE=0]="NONE",L[L.LOG=1]="LOG",L[L.BREAK=2]="BREAK",lt;var L})(),Rt=function L(q){this.cause=q};function Pe(L){return L instanceof Rt}function qn(L){switch(L.dependenciesState){case an.UP_TO_DATE:return!1;case an.NOT_TRACKING:case an.STALE:return!0;case an.POSSIBLY_STALE:for(var q=dn(),j=L.observing,Ae=j.length,St=0;St<Ae;St++){var Kt=j[St];if(ko(Kt)){if(Bn.disableErrorBoundaries)Kt.get();else try{Kt.get()}catch{return Ge(q),!0}if(L.dependenciesState===an.STALE)return Ge(q),!0}}return wr(L),Ge(q),!1}}function Pn(L){var q=L.observers.length>0;Bn.computationDepth>0&&q&&$(!1),!Bn.allowStateChanges&&(q||"strict"===Bn.enforceActions)&&$(!1)}function Pr(L,q,j){var Ae=Ot(!0);wr(L),L.newObserving=new Array(L.observing.length+100),L.unboundDepsCount=0,L.runId=++Bn.runId;var Kt,St=Bn.trackingDerivation;if(Bn.trackingDerivation=L,!0===Bn.disableErrorBoundaries)Kt=q.call(j);else try{Kt=q.call(j)}catch(ur){Kt=new Rt(ur)}return Bn.trackingDerivation=St,function Zn(L){for(var q=L.observing,j=L.observing=L.newObserving,Ae=an.UP_TO_DATE,St=0,Kt=L.unboundDepsCount,ur=0;ur<Kt;ur++)0===(Br=j[ur]).diffValue&&(Br.diffValue=1,St!==ur&&(j[St]=Br),St++),Br.dependenciesState>Ae&&(Ae=Br.dependenciesState);for(j.length=St,L.newObserving=null,Kt=q.length;Kt--;)0===(Br=q[Kt]).diffValue&&ss(Br,L),Br.diffValue=0;for(;St--;){var Br;1===(Br=j[St]).diffValue&&(Br.diffValue=0,jo(Br,L))}Ae!==an.UP_TO_DATE&&(L.dependenciesState=Ae,L.onBecomeStale())}(L),mn(Ae),Kt}function nr(L){var q=L.observing;L.observing=[];for(var j=q.length;j--;)ss(q[j],L);L.dependenciesState=an.NOT_TRACKING}function Zt(L){var q=dn(),j=L();return Ge(q),j}function dn(){var L=Bn.trackingDerivation;return Bn.trackingDerivation=null,L}function Ge(L){Bn.trackingDerivation=L}function Ot(L){var q=Bn.allowStateReads;return Bn.allowStateReads=L,q}function mn(L){Bn.allowStateReads=L}function wr(L){if(L.dependenciesState!==an.UP_TO_DATE){L.dependenciesState=an.UP_TO_DATE;for(var q=L.observing,j=q.length;j--;)q[j].lowestObserverState=an.UP_TO_DATE}}var Ti=0,Ci=1;function Ai(L,q){var j=function(){return function Ko(L,q,j,Ae){var St=function _s(L,q,j){var Ae=fa()&&!!L,St=0;if(Ae){St=Date.now();var Kt=j&&j.length||0,ur=new Array(Kt);if(Kt>0)for(var Br=0;Br<Kt;Br++)ur[Br]=j[Br];No({type:"action",name:L,object:q,arguments:ur})}var Ii=dn();Is();var Ks={prevDerivation:Ii,prevAllowStateChanges:ti(!0),prevAllowStateReads:Ot(!0),notifySpy:Ae,startTime:St,actionId:Ci++,parentActionId:Ti};return Ti=Ks.actionId,Ks}(L,j,Ae);try{return q.apply(j,Ae)}catch(Kt){throw St.error=Kt,Kt}finally{!function dr(L){Ti!==L.actionId&&$("invalid action stack. did you forget to finish an action?"),Ti=L.parentActionId,void 0!==L.error&&(Bn.suppressReactionErrors=!0),Vr(L.prevAllowStateChanges),mn(L.prevAllowStateReads),la(),Ge(L.prevDerivation),L.notifySpy&&ns({time:Date.now()-L.startTime}),Bn.suppressReactionErrors=!1}(St)}}(L,q,this,arguments)};return j.isMobxAction=!0,j}function ti(L){var q=Bn.allowStateChanges;return Bn.allowStateChanges=L,q}function Vr(L){Bn.allowStateChanges=L}var ji=function(L){function q(j,Ae,St,Kt,ur){void 0===St&&(St="ObservableValue@"+W()),void 0===Kt&&(Kt=!0),void 0===ur&&(ur=jr.default);var Br=L.call(this,St)||this;return Br.enhancer=Ae,Br.name=St,Br.equals=ur,Br.hasUnreportedChange=!1,Br.value=Ae(j,void 0,St),Kt&&fa()&&Xo({type:"create",name:Br.name,newValue:""+Br.value}),Br}return u(q,L),q.prototype.dehanceValue=function(j){return void 0!==this.dehancer?this.dehancer(j):j},q.prototype.set=function(j){var Ae=this.value;if((j=this.prepareNewValue(j))!==Bn.UNCHANGED){var St=fa();St&&No({type:"update",name:this.name,newValue:j,oldValue:Ae}),this.setNewValue(j),St&&ns()}},q.prototype.prepareNewValue=function(j){if(Pn(this),bt(this)){var Ae=Je(this,{object:this,type:"update",newValue:j});if(!Ae)return Bn.UNCHANGED;j=Ae.newValue}return j=this.enhancer(j,this.value,this.name),this.equals(this.value,j)?Bn.UNCHANGED:j},q.prototype.setNewValue=function(j){var Ae=this.value;this.value=j,this.reportChanged(),en(this)&&To(this,{type:"update",object:this,newValue:j,oldValue:Ae})},q.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},q.prototype.intercept=function(j){return pt(this,j)},q.prototype.observe=function(j,Ae){return Ae&&j({object:this,type:"update",newValue:this.value,oldValue:void 0}),fi(this,j)},q.prototype.toJSON=function(){return this.get()},q.prototype.toString=function(){return this.name+"["+this.value+"]"},q.prototype.valueOf=function(){return cn(this.get())},q}(fn);ji.prototype[Xt()]=ji.prototype.valueOf,qe("ObservableValue",ji);var Po=function(){function L(q){this.dependenciesState=an.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=an.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+W(),this.value=new Rt(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=lt.NONE,this.derivation=q.get,this.name=q.name||"ComputedValue@"+W(),q.set&&(this.setter=Ai(this.name+"-setter",q.set)),this.equals=q.equals||(q.compareStructural||q.struct?jr.structural:jr.default),this.scope=q.context,this.requiresReaction=!!q.requiresReaction,this.keepAlive=!!q.keepAlive}return L.prototype.onBecomeStale=function(){!function qa(L){if(L.lowestObserverState===an.UP_TO_DATE){L.lowestObserverState=an.POSSIBLY_STALE;for(var q=L.observers,j=q.length;j--;){var Ae=q[j];Ae.dependenciesState===an.UP_TO_DATE&&(Ae.dependenciesState=an.POSSIBLY_STALE,Ae.isTracing!==lt.NONE&&da(Ae,L),Ae.onBecomeStale())}}}(this)},L.prototype.onBecomeUnobserved=function(){},L.prototype.onBecomeObserved=function(){},L.prototype.get=function(){this.isComputing&&$("Cycle detected in computation "+this.name+": "+this.derivation),0!==Bn.inBatch||0!==this.observers.length||this.keepAlive?(Ro(this),qn(this)&&this.trackAndCompute()&&function gl(L){if(L.lowestObserverState!==an.STALE){L.lowestObserverState=an.STALE;for(var q=L.observers,j=q.length;j--;){var Ae=q[j];Ae.dependenciesState===an.POSSIBLY_STALE?Ae.dependenciesState=an.STALE:Ae.dependenciesState===an.UP_TO_DATE&&(L.lowestObserverState=an.UP_TO_DATE)}}}(this)):qn(this)&&(this.warnAboutUntrackedRead(),Is(),this.value=this.computeValue(!1),la());var q=this.value;if(Pe(q))throw q.cause;return q},L.prototype.peek=function(){var q=this.computeValue(!1);if(Pe(q))throw q.cause;return q},L.prototype.set=function(q){if(this.setter){J(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,q)}finally{this.isRunningSetter=!1}}else J(!1,!1)},L.prototype.trackAndCompute=function(){fa()&&Xo({object:this.scope,type:"compute",name:this.name});var q=this.value,j=this.dependenciesState===an.NOT_TRACKING,Ae=this.computeValue(!0),St=j||Pe(q)||Pe(Ae)||!this.equals(q,Ae);return St&&(this.value=Ae),St},L.prototype.computeValue=function(q){var j;if(this.isComputing=!0,Bn.computationDepth++,q)j=Pr(this,this.derivation,this.scope);else if(!0===Bn.disableErrorBoundaries)j=this.derivation.call(this.scope);else try{j=this.derivation.call(this.scope)}catch(Ae){j=new Rt(Ae)}return Bn.computationDepth--,this.isComputing=!1,j},L.prototype.suspend=function(){this.keepAlive||(nr(this),this.value=void 0)},L.prototype.observe=function(q,j){var Ae=this,St=!0,Kt=void 0;return vi(function(){var ur=Ae.get();if(!St||j){var Br=dn();q({type:"update",object:Ae,newValue:ur,oldValue:Kt}),Ge(Br)}St=!1,Kt=ur})},L.prototype.warnAboutUntrackedRead=function(){},L.prototype.toJSON=function(){return this.get()},L.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},L.prototype.valueOf=function(){return cn(this.get())},L}();Po.prototype[Xt()]=Po.prototype.valueOf;var L,ko=qe("ComputedValue",Po),ro=function L(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1},Vt=!0,Bn=((L=U()).__mobxInstanceCount>0&&!L.__mobxGlobals&&(Vt=!1),L.__mobxGlobals&&L.__mobxGlobals.version!==(new ro).version&&(Vt=!1),Vt?L.__mobxGlobals?(L.__mobxInstanceCount+=1,L.__mobxGlobals.UNCHANGED||(L.__mobxGlobals.UNCHANGED={}),L.__mobxGlobals):(L.__mobxInstanceCount=1,L.__mobxGlobals=new ro):(setTimeout(function(){$("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")},1),new ro));function jo(L,q){var j=L.observers.length;j&&(L.observersIndexes[q.__mapid]=j),L.observers[j]=q,L.lowestObserverState>q.dependenciesState&&(L.lowestObserverState=q.dependenciesState)}function ss(L,q){if(1===L.observers.length)L.observers.length=0,gs(L);else{var j=L.observers,Ae=L.observersIndexes,St=j.pop();if(St!==q){var Kt=Ae[q.__mapid]||0;Kt?Ae[St.__mapid]=Kt:delete Ae[St.__mapid],j[Kt]=St}delete Ae[q.__mapid]}}function gs(L){!1===L.isPendingUnobservation&&(L.isPendingUnobservation=!0,Bn.pendingUnobservations.push(L))}function Is(){Bn.inBatch++}function la(){if(0==--Bn.inBatch){hs();for(var L=Bn.pendingUnobservations,q=0;q<L.length;q++){var j=L[q];j.isPendingUnobservation=!1,0===j.observers.length&&(j.isBeingObserved&&(j.isBeingObserved=!1,j.onBecomeUnobserved()),j instanceof Po&&j.suspend())}Bn.pendingUnobservations=[]}}function Ro(L){var q=Bn.trackingDerivation;return null!==q?(q.runId!==L.lastAccessedBy&&(L.lastAccessedBy=q.runId,q.newObserving[q.unboundDepsCount++]=L,L.isBeingObserved||(L.isBeingObserved=!0,L.onBecomeObserved())),!0):(0===L.observers.length&&Bn.inBatch>0&&gs(L),!1)}function da(L,q){if(console.log("[mobx.trace] '"+L.name+"' is invalidated due to a change in: '"+q.name+"'"),L.isTracing===lt.BREAK){var j=[];$a(function Ol(L,q){return Kc(Fr(L,q))}(L),j,1),new Function("debugger;\n/*\nTracing '"+L.name+"'\n\nYou are entering this break point because derivation '"+L.name+"' is being traced and '"+q.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(L instanceof Po?L.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+j.join("\n")+"\n*/\n    ")()}}function $a(L,q,j){q.length>=1e3?q.push("(and many more)"):(q.push(""+new Array(j).join("\t")+L.name),L.dependencies&&L.dependencies.forEach(function(Ae){return $a(Ae,q,j+1)}))}var Rl=function(){function L(q,j,Ae,St){void 0===q&&(q="Reaction@"+W()),void 0===St&&(St=!1),this.name=q,this.onInvalidate=j,this.errorHandler=Ae,this.requiresObservable=St,this.observing=[],this.newObserving=[],this.dependenciesState=an.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+W(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=lt.NONE}return L.prototype.onBecomeStale=function(){this.schedule()},L.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,Bn.pendingReactions.push(this),hs())},L.prototype.isScheduled=function(){return this._isScheduled},L.prototype.runReaction=function(){if(!this.isDisposed){if(Is(),this._isScheduled=!1,qn(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending&&fa()&&Xo({name:this.name,type:"scheduled-reaction"})}catch(q){this.reportExceptionInDerivation(q)}}la()}},L.prototype.track=function(q){Is();var Ae,j=fa();j&&(Ae=Date.now(),No({name:this.name,type:"reaction"})),this._isRunning=!0;var St=Pr(this,q,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&nr(this),Pe(St)&&this.reportExceptionInDerivation(St.cause),j&&ns({time:Date.now()-Ae}),la()},L.prototype.reportExceptionInDerivation=function(q){var j=this;if(this.errorHandler)this.errorHandler(q,this);else{if(Bn.disableErrorBoundaries)throw q;var Ae="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";Bn.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(Ae,q),fa()&&Xo({type:"error",name:this.name,message:Ae,error:""+q}),Bn.globalReactionErrorHandlers.forEach(function(St){return St(q,j)})}},L.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(Is(),nr(this),la()))},L.prototype.getDisposer=function(){var q=this.dispose.bind(this);return q.$mobx=this,q},L.prototype.toString=function(){return"Reaction["+this.name+"]"},L.prototype.trace=function(q){void 0===q&&(q=!1),function gc(){for(var L=[],q=0;q<arguments.length;q++)L[q]=arguments[q];var j=!1;"boolean"==typeof L[L.length-1]&&(j=L.pop());var Ae=function ql(L){switch(L.length){case 0:return Bn.trackingDerivation;case 1:return Fr(L[0]);case 2:return Fr(L[0],L[1])}}(L);if(!Ae)return $(!1);Ae.isTracing===lt.NONE&&console.log("[mobx.trace] '"+Ae.name+"' tracing enabled"),Ae.isTracing=j?lt.BREAK:lt.LOG}(this,q)},L}(),Ha=100,Ts=function(L){return L()};function hs(){Bn.inBatch>0||Bn.isRunningReactions||Ts($s)}function $s(){Bn.isRunningReactions=!0;for(var L=Bn.pendingReactions,q=0;L.length>0;){++q===Ha&&(console.error("Reaction doesn't converge to a stable state after "+Ha+" iterations. Probably there is a cycle in the reactive function: "+L[0]),L.splice(0));for(var j=L.splice(0),Ae=0,St=j.length;Ae<St;Ae++)j[Ae].runReaction()}Bn.isRunningReactions=!1}var Aa=qe("Reaction",Rl);function fa(){return!!Bn.spyListeners.length}function Xo(L){if(Bn.spyListeners.length)for(var q=Bn.spyListeners,j=0,Ae=q.length;j<Ae;j++)q[j](L)}function No(L){Xo(e({},L,{spyReportStart:!0}))}var Cs={spyReportEnd:!0};function ns(L){Xo(L?e({},L,{spyReportEnd:!0}):Cs)}function zr(){$(!1)}function io(L){return function(q,j,Ae){if(Ae){if(Ae.value)return{value:Ai(L,Ae.value),enumerable:!1,configurable:!0,writable:!0};var St=Ae.initializer;return{enumerable:!1,configurable:!0,writable:!0,initializer:function(){return Ai(L,St.call(this))}}}return function gt(L){return function(q,j,Ae){Object.defineProperty(q,j,{configurable:!0,enumerable:!1,get:function(){},set:function(St){ge(this,j,ie(L,St))}})}}(L).apply(this,arguments)}}var ie=function(q,j,Ae,St){return 1===arguments.length&&"function"==typeof q?Ai(q.name||"<unnamed action>",q):2===arguments.length&&"function"==typeof j?Ai(q,j):1===arguments.length&&"string"==typeof q?io(q):!0!==St?io(j).apply(null,arguments):void(q[j]=Ai(q.name||j,Ae.value))};function gn(L,q,j){ge(L,q,Ai(q,j.bind(L)))}function vi(L,q){void 0===q&&(q=w);var St,j=q&&q.name||L.name||"Autorun@"+W();if(q.scheduler||q.delay){var Kt=Xi(q),ur=!1;St=new Rl(j,function(){ur||(ur=!0,Kt(function(){ur=!1,St.isDisposed||St.track(Br)}))},q.onError,q.requiresObservable)}else St=new Rl(j,function(){this.track(Br)},q.onError,q.requiresObservable);function Br(){L(St)}return St.schedule(),St.getDisposer()}ie.bound=function Tn(L,q,j,Ae){return!0===Ae?(gn(L,q,j.value),null):j?{configurable:!0,enumerable:!1,get:function(){return gn(this,q,j.value||j.initializer.call(this)),this[q]},set:zr}:{enumerable:!1,configurable:!0,set:function(St){gn(this,q,St)},get:function(){}}};var Bi=function(L){return L()};function Xi(L){return L.scheduler?L.scheduler:L.delay?function(q){return setTimeout(q,L.delay)}:Bi}function ws(L,q,j){void 0===j&&(j=w),"boolean"==typeof j&&(j={fireImmediately:j});var ms,Ae=j.name||"Reaction@"+W(),St=ie(Ae,j.onError?function ds(L,q){return function(){try{return q.apply(this,arguments)}catch(j){L.call(this,j)}}}(j.onError,q):q),Kt=!j.scheduler&&!j.delay,ur=Xi(j),Br=!0,Ii=!1,vs=j.compareStructural?jr.structural:j.equals||jr.default,Ks=new Rl(Ae,function(){Br||Kt?Vl():Ii||(Ii=!0,ur(Vl))},j.onError,j.requiresObservable);function Vl(){if(Ii=!1,!Ks.isDisposed){var Xu=!1;Ks.track(function(){var Fu=L(Ks);Xu=Br||!vs(ms,Fu),ms=Fu}),Br&&j.fireImmediately&&St(ms,Ks),!Br&&!0===Xu&&St(ms,Ks),Br&&(Br=!1)}}return Ks.schedule(),Ks.getDisposer()}function Js(L,q,j){return Ll("onBecomeUnobserved",L,q,j)}function Ll(L,q,j,Ae){var St="function"==typeof Ae?Fr(q,j):Fr(q),Kt="function"==typeof Ae?Ae:j,ur=St[L];return"function"!=typeof ur?$(!1):(St[L]=function(){ur.call(this),Kt.call(this)},function(){St[L]=ur})}function Kc(L){var q={name:L.name};return L.observing&&L.observing.length>0&&(q.dependencies=function ce(L){var q=[];return L.forEach(function(j){-1===q.indexOf(j)&&q.push(j)}),q}(L.observing).map(Kc)),q}function El(L){return 1!==arguments.length&&$(!1),function ua(L,q){if(null==L)return!1;if(void 0!==q){if(Gr(L)){var j=L.$mobx;return j.values&&!!j.values[q]}return!1}return Gr(L)||!!L.$mobx||xn(L)||Aa(L)||ko(L)}(L)}function Al(L,q){void 0===q&&(q=void 0),Is();try{return L.apply(q)}finally{la()}}function bt(L){return void 0!==L.interceptors&&L.interceptors.length>0}function pt(L,q){var j=L.interceptors||(L.interceptors=[]);return j.push(q),de(function(){var Ae=j.indexOf(q);-1!==Ae&&j.splice(Ae,1)})}function Je(L,q){var j=dn();try{var Ae=L.interceptors;if(Ae)for(var St=0,Kt=Ae.length;St<Kt&&(J(!(q=Ae[St](q))||q.type,"Intercept handlers should return nothing or a change object"),q);St++);return q}finally{Ge(j)}}function en(L){return void 0!==L.changeListeners&&L.changeListeners.length>0}function fi(L,q){var j=L.changeListeners||(L.changeListeners=[]);return j.push(q),de(function(){var Ae=j.indexOf(q);-1!==Ae&&j.splice(Ae,1)})}function To(L,q){var j=dn(),Ae=L.changeListeners;if(Ae){for(var St=0,Kt=(Ae=Ae.slice()).length;St<Kt;St++)Ae[St](q);Ge(j)}}var mi=function(){var L=!1,q={};return Object.defineProperty(q,"0",{set:function(){L=!0}}),Object.create(q)[0]=1,!1===L}(),Hs=0,Qs=function L(){};(function Hu(L,q){typeof Object.setPrototypeOf<"u"?Object.setPrototypeOf(L.prototype,q):typeof L.prototype.__proto__<"u"?L.prototype.__proto__=q:L.prototype=q})(Qs,Array.prototype),Object.isFrozen(Array)&&["constructor","push","shift","concat","pop","unshift","replace","find","findIndex","splice","reverse","sort"].forEach(function(L){Object.defineProperty(Qs.prototype,L,{configurable:!0,writable:!0,value:Array.prototype[L]})});var zl=function(){function L(q,j,Ae,St){this.array=Ae,this.owned=St,this.values=[],this.lastKnownLength=0,this.atom=new fn(q||"ObservableArray@"+W()),this.enhancer=function(Kt,ur){return j(Kt,ur,q+"[..]")}}return L.prototype.dehanceValue=function(q){return void 0!==this.dehancer?this.dehancer(q):q},L.prototype.dehanceValues=function(q){return void 0!==this.dehancer&&q.length>0?q.map(this.dehancer):q},L.prototype.intercept=function(q){return pt(this,q)},L.prototype.observe=function(q,j){return void 0===j&&(j=!1),j&&q({object:this.array,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),fi(this,q)},L.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},L.prototype.setArrayLength=function(q){if("number"!=typeof q||q<0)throw new Error("[mobx.array] Out of range: "+q);var j=this.values.length;if(q!==j)if(q>j){for(var Ae=new Array(q-j),St=0;St<q-j;St++)Ae[St]=void 0;this.spliceWithArray(j,0,Ae)}else this.spliceWithArray(q,j-q)},L.prototype.updateArrayLength=function(q,j){if(q!==this.lastKnownLength)throw new Error("[mobx] Modification exception: the internal structure of an observable array was changed. Did you use peek() to change it?");this.lastKnownLength+=j,j>0&&q+j+1>Hs&&ec(q+j+1)},L.prototype.spliceWithArray=function(q,j,Ae){var St=this;Pn(this.atom);var Kt=this.values.length;if(void 0===q?q=0:q>Kt?q=Kt:q<0&&(q=Math.max(0,Kt+q)),j=1===arguments.length?Kt-q:null==j?0:Math.max(0,Math.min(j,Kt-q)),void 0===Ae&&(Ae=M),bt(this)){var ur=Je(this,{object:this.array,type:"splice",index:q,removedCount:j,added:Ae});if(!ur)return M;j=ur.removedCount,Ae=ur.added}Ae=0===Ae.length?Ae:Ae.map(function(ms){return St.enhancer(ms,void 0)}),this.updateArrayLength(Kt,Ae.length-j);var Ii=this.spliceItemsIntoValues(q,j,Ae);return(0!==j||0!==Ae.length)&&this.notifyArraySplice(q,Ae,Ii),this.dehanceValues(Ii)},L.prototype.spliceItemsIntoValues=function(q,j,Ae){var St;if(Ae.length<1e4)return(St=this.values).splice.apply(St,m([q,j],Ae));var Kt=this.values.slice(q,q+j);return this.values=this.values.slice(0,q).concat(Ae,this.values.slice(q+j)),Kt},L.prototype.notifyArrayChildUpdate=function(q,j,Ae){var St=!this.owned&&fa(),Kt=en(this),ur=Kt||St?{object:this.array,type:"update",index:q,newValue:j,oldValue:Ae}:null;St&&No(e({},ur,{name:this.atom.name})),this.atom.reportChanged(),Kt&&To(this,ur),St&&ns()},L.prototype.notifyArraySplice=function(q,j,Ae){var St=!this.owned&&fa(),Kt=en(this),ur=Kt||St?{object:this.array,type:"splice",index:q,removed:Ae,added:j,removedCount:Ae.length,addedCount:j.length}:null;St&&No(e({},ur,{name:this.atom.name})),this.atom.reportChanged(),Kt&&To(this,ur),St&&ns()},L}(),sc=function(L){function q(j,Ae,St,Kt){void 0===St&&(St="ObservableArray@"+W()),void 0===Kt&&(Kt=!1);var ur=L.call(this)||this,Br=new zl(St,Ae,ur,Kt);if(Et(ur,"$mobx",Br),j&&j.length){var Ii=ti(!0);ur.spliceWithArray(0,0,j),Vr(Ii)}return mi&&Object.defineProperty(Br.array,"0",hu),ur}return u(q,L),q.prototype.intercept=function(j){return this.$mobx.intercept(j)},q.prototype.observe=function(j,Ae){return void 0===Ae&&(Ae=!1),this.$mobx.observe(j,Ae)},q.prototype.clear=function(){return this.splice(0)},q.prototype.concat=function(){for(var j=[],Ae=0;Ae<arguments.length;Ae++)j[Ae]=arguments[Ae];return this.$mobx.atom.reportObserved(),Array.prototype.concat.apply(this.peek(),j.map(function(St){return du(St)?St.peek():St}))},q.prototype.replace=function(j){return this.$mobx.spliceWithArray(0,this.$mobx.values.length,j)},q.prototype.toJS=function(){return this.slice()},q.prototype.toJSON=function(){return this.toJS()},q.prototype.peek=function(){return this.$mobx.atom.reportObserved(),this.$mobx.dehanceValues(this.$mobx.values)},q.prototype.find=function(j,Ae,St){void 0===St&&(St=0);var Kt=this.findIndex.apply(this,arguments);return-1===Kt?void 0:this.get(Kt)},q.prototype.findIndex=function(j,Ae,St){void 0===St&&(St=0);for(var Kt=this.peek(),ur=Kt.length,Br=St;Br<ur;Br++)if(j.call(Ae,Kt[Br],Br,this))return Br;return-1},q.prototype.splice=function(j,Ae){for(var St=[],Kt=2;Kt<arguments.length;Kt++)St[Kt-2]=arguments[Kt];switch(arguments.length){case 0:return[];case 1:return this.$mobx.spliceWithArray(j);case 2:return this.$mobx.spliceWithArray(j,Ae)}return this.$mobx.spliceWithArray(j,Ae,St)},q.prototype.spliceWithArray=function(j,Ae,St){return this.$mobx.spliceWithArray(j,Ae,St)},q.prototype.push=function(){for(var j=[],Ae=0;Ae<arguments.length;Ae++)j[Ae]=arguments[Ae];var St=this.$mobx;return St.spliceWithArray(St.values.length,0,j),St.values.length},q.prototype.pop=function(){return this.splice(Math.max(this.$mobx.values.length-1,0),1)[0]},q.prototype.shift=function(){return this.splice(0,1)[0]},q.prototype.unshift=function(){for(var j=[],Ae=0;Ae<arguments.length;Ae++)j[Ae]=arguments[Ae];var St=this.$mobx;return St.spliceWithArray(0,0,j),St.values.length},q.prototype.reverse=function(){var j=this.slice();return j.reverse.apply(j,arguments)},q.prototype.sort=function(j){var Ae=this.slice();return Ae.sort.apply(Ae,arguments)},q.prototype.remove=function(j){var Ae=this.$mobx.dehanceValues(this.$mobx.values).indexOf(j);return Ae>-1&&(this.splice(Ae,1),!0)},q.prototype.move=function(j,Ae){function St(Br){if(Br<0)throw new Error("[mobx.array] Index out of bounds: "+Br+" is negative");var Ii=this.$mobx.values.length;if(Br>=Ii)throw new Error("[mobx.array] Index out of bounds: "+Br+" is not smaller than "+Ii)}if(St.call(this,j),St.call(this,Ae),j!==Ae){var ur,Kt=this.$mobx.values;ur=j<Ae?m(Kt.slice(0,j),Kt.slice(j+1,Ae+1),[Kt[j]],Kt.slice(Ae+1)):m(Kt.slice(0,Ae),[Kt[j]],Kt.slice(Ae,j),Kt.slice(j+1)),this.replace(ur)}},q.prototype.get=function(j){var Ae=this.$mobx;if(Ae){if(j<Ae.values.length)return Ae.atom.reportObserved(),Ae.dehanceValue(Ae.values[j]);console.warn("[mobx.array] Attempt to read an array index ("+j+") that is out of bounds ("+Ae.values.length+"). Please check length first. Out of bound indices will not be tracked by MobX")}},q.prototype.set=function(j,Ae){var St=this.$mobx,Kt=St.values;if(j<Kt.length){Pn(St.atom);var ur=Kt[j];if(bt(St)){var Br=Je(St,{type:"update",object:this,index:j,newValue:Ae});if(!Br)return;Ae=Br.newValue}(Ae=St.enhancer(Ae,ur))!==ur&&(Kt[j]=Ae,St.notifyArrayChildUpdate(j,Ae,ur))}else{if(j!==Kt.length)throw new Error("[mobx.array] Index out of bounds, "+j+" is larger than "+Kt.length);St.spliceWithArray(j,0,[Ae])}},q}(Qs);Rn(sc.prototype,function(){this.$mobx.atom.reportObserved();var L=this,q=0;return At({next:function(){return q<L.length?{value:L[q++],done:!1}:{done:!0,value:void 0}}})}),Object.defineProperty(sc.prototype,"length",{enumerable:!1,configurable:!0,get:function(){return this.$mobx.getArrayLength()},set:function(L){this.$mobx.setArrayLength(L)}}),ge(sc.prototype,qt(),"Array"),["every","filter","forEach","indexOf","join","lastIndexOf","map","reduce","reduceRight","slice","some","toString","toLocaleString"].forEach(function(L){var q=Array.prototype[L];J("function"==typeof q,"Base function not defined on Array prototype: '"+L+"'"),ge(sc.prototype,L,function(){return q.apply(this.peek(),arguments)})}),function $e(L,q){for(var j=0;j<q.length;j++)ge(L,q[j],L[q[j]])}(sc.prototype,["constructor","intercept","observe","clear","concat","get","replace","toJS","toJSON","peek","find","findIndex","splice","spliceWithArray","push","pop","set","shift","unshift","reverse","sort","remove","move","toString","toLocaleString"]);var hu=lu(0);function lu(L){return{enumerable:!1,configurable:!1,get:function(){return this.get(L)},set:function(q){this.set(L,q)}}}function id(L){Object.defineProperty(sc.prototype,""+L,lu(L))}function ec(L){for(var q=Hs;q<L;q++)id(q);Hs=L}ec(1e3);var Fc=qe("ObservableArrayAdministration",zl);function du(L){return se(L)&&Fc(L.$mobx)}var Lc={},kl=function(){function L(q,j,Ae){if(void 0===j&&(j=hr),void 0===Ae&&(Ae="ObservableMap@"+W()),this.enhancer=j,this.name=Ae,this.$mobx=Lc,this._keys=new sc(void 0,Wi,this.name+".keys()",!0),"function"!=typeof Map)throw new Error("mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js");this._data=new Map,this._hasMap=new Map,this.merge(q)}return L.prototype._has=function(q){return this._data.has(q)},L.prototype.has=function(q){var j=this;if(!Bn.trackingDerivation)return this._has(q);var Ae=this._hasMap.get(q);if(!Ae){var St=Ae=new ji(this._has(q),Wi,this.name+"."+sl(q)+"?",!1);this._hasMap.set(q,St),Js(St,function(){return j._hasMap.delete(q)})}return Ae.get()},L.prototype.set=function(q,j){var Ae=this._has(q);if(bt(this)){var St=Je(this,{type:Ae?"update":"add",object:this,newValue:j,name:q});if(!St)return this;j=St.newValue}return Ae?this._updateValue(q,j):this._addValue(q,j),this},L.prototype.delete=function(q){var j=this;if(bt(this)&&!(Ae=Je(this,{type:"delete",object:this,name:q})))return!1;if(this._has(q)){var St=fa(),Kt=en(this),Ae=Kt||St?{type:"delete",object:this,oldValue:this._data.get(q).value,name:q}:null;return St&&No(e({},Ae,{name:this.name,key:q})),Al(function(){j._keys.remove(q),j._updateHasMapEntry(q,!1),j._data.get(q).setNewValue(void 0),j._data.delete(q)}),Kt&&To(this,Ae),St&&ns(),!0}return!1},L.prototype._updateHasMapEntry=function(q,j){var Ae=this._hasMap.get(q);Ae&&Ae.setNewValue(j)},L.prototype._updateValue=function(q,j){var Ae=this._data.get(q);if((j=Ae.prepareNewValue(j))!==Bn.UNCHANGED){var St=fa(),Kt=en(this),ur=Kt||St?{type:"update",object:this,oldValue:Ae.value,name:q,newValue:j}:null;St&&No(e({},ur,{name:this.name,key:q})),Ae.setNewValue(j),Kt&&To(this,ur),St&&ns()}},L.prototype._addValue=function(q,j){var Ae=this;Al(function(){var Br=new ji(j,Ae.enhancer,Ae.name+"."+sl(q),!1);Ae._data.set(q,Br),j=Br.value,Ae._updateHasMapEntry(q,!0),Ae._keys.push(q)});var St=fa(),Kt=en(this),ur=Kt||St?{type:"add",object:this,name:q,newValue:j}:null;St&&No(e({},ur,{name:this.name,key:q})),Kt&&To(this,ur),St&&ns()},L.prototype.get=function(q){return this.has(q)?this.dehanceValue(this._data.get(q).get()):this.dehanceValue(void 0)},L.prototype.dehanceValue=function(q){return void 0!==this.dehancer?this.dehancer(q):q},L.prototype.keys=function(){return this._keys[pn()]()},L.prototype.values=function(){var q=this,j=0;return At({next:function(){return j<q._keys.length?{value:q.get(q._keys[j++]),done:!1}:{value:void 0,done:!0}}})},L.prototype.entries=function(){var q=this,j=0;return At({next:function(){if(j<q._keys.length){var Ae=q._keys[j++];return{value:[Ae,q.get(Ae)],done:!1}}return{done:!0}}})},L.prototype.forEach=function(q,j){var Ae=this;this._keys.forEach(function(St){return q.call(j,Ae.get(St),St,Ae)})},L.prototype.merge=function(q){var j=this;return ja(q)&&(q=q.toJS()),Al(function(){fe(q)?Object.keys(q).forEach(function(Ae){return j.set(Ae,q[Ae])}):Array.isArray(q)?q.forEach(function(Ae){var St=f(Ae,2);return j.set(St[0],St[1])}):Le(q)?q.constructor!==Map?$("Cannot initialize from classes that inherit from Map: "+q.constructor.name):q.forEach(function(Ae,St){return j.set(St,Ae)}):null!=q&&$("Cannot initialize map from "+q)}),this},L.prototype.clear=function(){var q=this;Al(function(){Zt(function(){q._keys.slice().forEach(function(j){return q.delete(j)})})})},L.prototype.replace=function(q){var j=this;return Al(function(){for(var Ae=function Te(L){return Le(L)||ja(L)?L:Array.isArray(L)?new Map(L):fe(L)?new Map(Object.entries(L)):$("Cannot convert to map from '"+L+"'")}(q),St=j._keys,Kt=Array.from(Ae.keys()),ur=!1,Br=0;Br<St.length;Br++){var Ii=St[Br];St.length===Kt.length&&Ii!==Kt[Br]&&(ur=!0),Ae.has(Ii)||(ur=!0,j.delete(Ii))}Ae.forEach(function(ms,vs){j._data.has(vs)||(ur=!0),j.set(vs,ms)}),ur&&j._keys.replace(Kt)}),this},Object.defineProperty(L.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),L.prototype.toPOJO=function(){var q=this,j={};return this._keys.forEach(function(Ae){return j["symbol"==typeof Ae?Ae:sl(Ae)]=q.get(Ae)}),j},L.prototype.toJS=function(){var q=this,j=new Map;return this._keys.forEach(function(Ae){return j.set(Ae,q.get(Ae))}),j},L.prototype.toJSON=function(){return this.toPOJO()},L.prototype.toString=function(){var q=this;return this.name+"[{ "+this._keys.map(function(j){return sl(j)+": "+q.get(j)}).join(", ")+" }]"},L.prototype.observe=function(q,j){return fi(this,q)},L.prototype.intercept=function(q){return pt(this,q)},L}();function sl(L){return L&&L.toString?L.toString():new String(L).toString()}Rn(kl.prototype,function(){return this.entries()}),Et(kl.prototype,qt(),"Map");var ja=qe("ObservableMap",kl),Q={},Ee=function(){function L(q,j,Ae){if(void 0===j&&(j=hr),void 0===Ae&&(Ae="ObservableSet@"+W()),this.name=Ae,this.$mobx=Q,this._data=new Set,this._atom=function Kr(L,q,j){void 0===q&&(q=V),void 0===j&&(j=V);var Ae=new fn(L);return function qs(L,q,j){Ll("onBecomeObserved",L,q,j)}(Ae,q),Js(Ae,j),Ae}(this.name),"function"!=typeof Set)throw new Error("mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js");this.enhancer=function(St,Kt){return j(St,Kt,Ae)},q&&this.replace(q)}return L.prototype.dehanceValue=function(q){return void 0!==this.dehancer?this.dehancer(q):q},L.prototype.clear=function(){var q=this;Al(function(){Zt(function(){q._data.forEach(function(j){q.delete(j)})})})},L.prototype.forEach=function(q,j){var Ae=this;this._data.forEach(function(St){q.call(j,St,St,Ae)})},Object.defineProperty(L.prototype,"size",{get:function(){return this._atom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),L.prototype.add=function(q){var j=this;if(Pn(this._atom),bt(this)&&!(Ae=Je(this,{type:"add",object:this,newValue:q})))return this;if(!this.has(q)){Al(function(){j._data.add(j.enhancer(q,void 0)),j._atom.reportChanged()});var St=fa(),Kt=en(this),Ae=Kt||St?{type:"add",object:this,newValue:q}:null;Kt&&To(this,Ae)}return this},L.prototype.delete=function(q){var j=this;if(bt(this)&&!(Ae=Je(this,{type:"delete",object:this,oldValue:q})))return!1;if(this.has(q)){var St=fa(),Kt=en(this),Ae=Kt||St?{type:"delete",object:this,oldValue:q}:null;return Al(function(){j._atom.reportChanged(),j._data.delete(q)}),Kt&&To(this,Ae),!0}return!1},L.prototype.has=function(q){return this._atom.reportObserved(),this._data.has(this.dehanceValue(q))},L.prototype.entries=function(){var q=0,j=it(this.keys()),Ae=it(this.values());return At({next:function(){var St=q;return q+=1,St<Ae.length?{value:[j[St],Ae[St]],done:!1}:{done:!0}}})},L.prototype.keys=function(){return this.values()},L.prototype.values=function(){this._atom.reportObserved();var Ae,q=this,j=0;return void 0!==this._data.values?Ae=it(this._data.values()):(Ae=[],this._data.forEach(function(St){return Ae.push(St)})),At({next:function(){return j<Ae.length?{value:q.dehanceValue(Ae[j++]),done:!1}:{done:!0}}})},L.prototype.replace=function(q){var j=this;return yt(q)&&(q=q.toJS()),Al(function(){Array.isArray(q)||Pt(q)?(j.clear(),q.forEach(function(Ae){return j.add(Ae)})):null!=q&&$("Cannot initialize set from "+q)}),this},L.prototype.observe=function(q,j){return fi(this,q)},L.prototype.intercept=function(q){return pt(this,q)},L.prototype.toJS=function(){return new Set(this)},L.prototype.toString=function(){return this.name+"[ "+it(this.keys()).join(", ")+" ]"},L}();Rn(Ee.prototype,function(){return this.values()}),Et(Ee.prototype,qt(),"Set");var yt=qe("ObservableSet",Ee),Xe=function(){function L(q,j,Ae){this.target=q,this.name=j,this.defaultEnhancer=Ae,this.values={}}return L.prototype.read=function(q,j){if(this.target===q||(this.illegalAccess(q,j),this.values[j]))return this.values[j].get()},L.prototype.write=function(q,j,Ae){var St=this.target;St!==q&&this.illegalAccess(q,j);var Kt=this.values[j];if(Kt instanceof Po)Kt.set(Ae);else{if(bt(this)){if(!(ur=Je(this,{type:"update",object:St,name:j,newValue:Ae})))return;Ae=ur.newValue}if((Ae=Kt.prepareNewValue(Ae))!==Bn.UNCHANGED){var Br=en(this),Ii=fa(),ur=Br||Ii?{type:"update",object:St,oldValue:Kt.value,name:j,newValue:Ae}:null;Ii&&No(e({},ur,{name:this.name,key:j})),Kt.setNewValue(Ae),Br&&To(this,ur),Ii&&ns()}}},L.prototype.remove=function(q){if(this.values[q]){var j=this.target;if(bt(this)&&!(Ae=Je(this,{object:j,name:q,type:"remove"})))return;try{Is();var St=en(this),Kt=fa(),ur=this.values[q].get();this.keys&&this.keys.remove(q),delete this.values[q],delete this.target[q];var Ae=St||Kt?{type:"remove",object:j,oldValue:ur,name:q}:null;Kt&&No(e({},Ae,{name:this.name,key:q})),St&&To(this,Ae),Kt&&ns()}finally{la()}}},L.prototype.illegalAccess=function(q,j){console.warn("Property '"+j+"' of '"+q+"' was accessed through the prototype chain. Use 'decorate' instead to declare the prop or access it statically through it's owner")},L.prototype.observe=function(q,j){return fi(this,q)},L.prototype.intercept=function(q){return pt(this,q)},L.prototype.getKeys=function(){var q=this;return void 0===this.keys&&(this.keys=new sc(Object.keys(this.values).filter(function(j){return q.values[j]instanceof ji}),Wi,"keys("+this.name+")",!0)),this.keys.slice()},L}();function Gt(L,q,j){void 0===q&&(q=""),void 0===j&&(j=hr);var Ae=L.$mobx;return Ae||(fe(L)||(q=(L.constructor.name||"ObservableObject")+"@"+W()),q||(q="ObservableObject@"+W()),Et(L,"$mobx",Ae=new Xe(L,q,j)),Ae)}var Hr=Object.create(null),Xr=Object.create(null);function Rr(L){return L.$mobx||(Tt(L),L.$mobx)}var Qn=qe("ObservableObjectAdministration",Xe);function Gr(L){return!!se(L)&&(Tt(L),Qn(L.$mobx))}function Fr(L,q){if("object"==typeof L&&null!==L){if(du(L))return void 0!==q&&$(!1),L.$mobx.atom;if(yt(L))return L.$mobx;if(ja(L)){var j=L;return void 0===q?Fr(j._keys):((Ae=j._data.get(q)||j._hasMap.get(q))||$(!1),Ae)}var Ae;if(Tt(L),Gr(L))return q?((Ae=L.$mobx.values[q])||$(!1),Ae):$(!1);if(xn(L)||ko(L)||Aa(L))return L}else if("function"==typeof L&&Aa(L.$mobx))return L.$mobx;return $(!1)}function Ui(L,q){return L||$("Expecting some object"),void 0!==q?Ui(Fr(L,q)):xn(L)||ko(L)||Aa(L)||ja(L)||yt(L)?L:(Tt(L),L.$mobx?L.$mobx:void $(!1))}var Fa=Object.prototype.toString;function ca(L,q,j){return void 0===j&&(j=-1),zo(L,q,j)}function zo(L,q,j,Ae,St){if(L===q)return 0!==L||1/L==1/q;if(null==L||null==q)return!1;if(L!=L)return q!=q;var Kt=typeof L;if("function"!==Kt&&"object"!==Kt&&"object"!=typeof q)return!1;L=$l(L),q=$l(q);var ur=Fa.call(L);if(ur!==Fa.call(q))return!1;switch(ur){case"[object RegExp]":case"[object String]":return""+L==""+q;case"[object Number]":return+L!=+L?+q!=+q:0==+L?1/+L==1/q:+L==+q;case"[object Date]":case"[object Boolean]":return+L==+q;case"[object Symbol]":return typeof Symbol<"u"&&Symbol.valueOf.call(L)===Symbol.valueOf.call(q)}var Br="[object Array]"===ur;if(!Br){if("object"!=typeof L||"object"!=typeof q)return!1;var Ii=L.constructor,ms=q.constructor;if(Ii!==ms&&!("function"==typeof Ii&&Ii instanceof Ii&&"function"==typeof ms&&ms instanceof ms)&&"constructor"in L&&"constructor"in q)return!1}if(0===j)return!1;j<0&&(j=-1),St=St||[];for(var vs=(Ae=Ae||[]).length;vs--;)if(Ae[vs]===L)return St[vs]===q;if(Ae.push(L),St.push(q),Br){if((vs=L.length)!==q.length)return!1;for(;vs--;)if(!zo(L[vs],q[vs],j-1,Ae,St))return!1}else{var Ks=Object.keys(L),Vl=void 0;if(vs=Ks.length,Object.keys(q).length!==vs)return!1;for(;vs--;)if(!xl(q,Vl=Ks[vs])||!zo(L[Vl],q[Vl],j-1,Ae,St))return!1}return Ae.pop(),St.pop(),!0}function $l(L){return du(L)?L.peek():Le(L)||ja(L)||Pt(L)||yt(L)?it(L.entries()):L}function xl(L,q){return Object.prototype.hasOwnProperty.call(L,q)}"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:function Fo(L){return Bn.spyListeners.push(L),de(function(){Bn.spyListeners=Bn.spyListeners.filter(function(q){return q!==L})})},extras:{getDebugName:function Do(L,q){return(void 0!==q?Fr(L,q):Gr(L)||ja(L)||yt(L)?Ui(L):Fr(L)).name}},$mobx:"$mobx"});const yi=function kc(L,q,j){switch(j.length){case 0:return L.call(q);case 1:return L.call(q,j[0]);case 2:return L.call(q,j[0],j[1]);case 3:return L.call(q,j[0],j[1],j[2])}return L.apply(q,j)},Pa=function Wl(L){return L};var fc=Math.max;const je=function bu(L,q,j){return q=fc(void 0===q?L.length-1:q,0),function(){for(var Ae=arguments,St=-1,Kt=fc(Ae.length-q,0),ur=Array(Kt);++St<Kt;)ur[St]=Ae[q+St];St=-1;for(var Br=Array(q+1);++St<q;)Br[St]=Ae[St];return Br[q]=j(ur),yi(L,this,Br)}},tt=function Nt(L){return function(){return L}};var tn=s(99567),Xn=tn.Z?function(L,q){return(0,tn.Z)(L,"toString",{configurable:!0,enumerable:!1,value:tt(q),writable:!0})}:Pa,Ri=800,fs=16,Fs=Date.now,Ms=function Ra(L){var q=0,j=0;return function(){var Ae=Fs(),St=fs-(Ae-j);if(j=Ae,St>0){if(++q>=Ri)return arguments[0]}else q=0;return L.apply(void 0,arguments)}}(Xn);const wl=Ms,Qa=function Ho(L,q){return wl(je(L,q,Pa),L+"")};var rn=s(15131),Jl=s(2951),le=s(66224);const De=function ae(L,q,j){(void 0!==j&&!(0,le.Z)(L[q],j)||void 0===j&&!(q in L))&&(0,Jl.Z)(L,q,j)};var zt=function Ve(L){return function(q,j,Ae){for(var St=-1,Kt=Object(q),ur=Ae(q),Br=ur.length;Br--;){var Ii=ur[L?Br:++St];if(!1===j(Kt[Ii],Ii,Kt))break}return q}}();const Qt=zt;var Gn=s(27672),Er=s(1044),Nr=s(36889),Mi=s(42542),ao=s(40591),Jo=s(34654),rs=s(18402),ys=s(6539);var eu=s(25014),mu=s(58209),wu=s(4214),Rc=s(98286),fu=s(11595),vc=Function.prototype.toString,La=Object.prototype.hasOwnProperty,al=vc.call(Object);const xa=function rl(L){if(!(0,ys.Z)(L)||"[object Object]"!=(0,Rc.Z)(L))return!1;var q=(0,fu.Z)(L);if(null===q)return!0;var j=La.call(q,"constructor")&&q.constructor;return"function"==typeof j&&j instanceof j&&vc.call(j)==al};var Tu=s(14803);const Pu=function En(L,q){if(("constructor"!==q||"function"!=typeof L[q])&&"__proto__"!=q)return L[q]};var za=s(57640),Va=s(34673);const Hc=function ld(L,q,j,Ae,St,Kt,ur){var Br=Pu(L,j),Ii=Pu(q,j),ms=ur.get(Ii);if(ms)De(L,j,ms);else{var vs=Kt?Kt(Br,Ii,j+"",L,q,ur):void 0,Ks=void 0===vs;if(Ks){var Vl=(0,Jo.Z)(Ii),Xu=!Vl&&(0,eu.Z)(Ii),Fu=!Vl&&!Xu&&(0,Tu.Z)(Ii);vs=Ii,Vl||Xu||Fu?(0,Jo.Z)(Br)?vs=Br:function Ps(L){return(0,ys.Z)(L)&&(0,rs.Z)(L)}(Br)?vs=(0,Nr.Z)(Br):Xu?(Ks=!1,vs=(0,Gn.Z)(Ii,!0)):Fu?(Ks=!1,vs=(0,Er.Z)(Ii,!0)):vs=[]:xa(Ii)||(0,ao.Z)(Ii)?(vs=Br,(0,ao.Z)(Br)?vs=function Os(L){return(0,za.Z)(L,(0,Va.Z)(L))}(Br):(!(0,wu.Z)(Br)||(0,mu.Z)(Br))&&(vs=(0,Mi.Z)(Ii))):Ks=!1}Ks&&(ur.set(Ii,vs),St(vs,Ii,Ae,Kt,ur),ur.delete(Ii)),De(L,j,vs)}},ud=function Vu(L,q,j,Ae,St){L!==q&&Qt(q,function(Kt,ur){if(St||(St=new rn.Z),(0,wu.Z)(Kt))Hc(L,q,ur,j,Vu,Ae,St);else{var Br=Ae?Ae(Pu(L,ur),Kt,ur+"",L,q,St):void 0;void 0===Br&&(Br=Kt),De(L,ur,Br)}},Va.Z)},tf=function md(L,q,j,Ae,St,Kt){return(0,wu.Z)(L)&&(0,wu.Z)(q)&&(Kt.set(q,L),ud(L,q,void 0,md,Kt),Kt.delete(q)),L};var Uf=s(28078);const Uc=function Mu(L,q,j){if(!(0,wu.Z)(j))return!1;var Ae=typeof q;return!!("number"==Ae?(0,rs.Z)(j)&&(0,Uf.Z)(q,j.length):"string"==Ae&&q in j)&&(0,le.Z)(j[q],L)};var ip=function Zu(L){return Qa(function(q,j){var Ae=-1,St=j.length,Kt=St>1?j[St-1]:void 0,ur=St>2?j[2]:void 0;for(Kt=L.length>3&&"function"==typeof Kt?(St--,Kt):void 0,ur&&Uc(j[0],j[1],ur)&&(Kt=St<3?void 0:Kt,St=1),q=Object(q);++Ae<St;){var Br=j[Ae];Br&&L(q,Br,Ae,Kt)}return q})}(function(L,q,j,Ae){ud(L,q,j,Ae)});const Hd=ip;var Bf=Qa(function(L){return L.push(void 0,tf),yi(Hd,void 0,L)});const gd=Bf;const xf=function ed(L){return"symbol"==typeof L||(0,ys.Z)(L)&&"[object Symbol]"==(0,Rc.Z)(L)};var _u=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ud=/^\w*$/;const Lo=function Bc(L,q){if((0,Jo.Z)(L))return!1;var j=typeof L;return!("number"!=j&&"symbol"!=j&&"boolean"!=j&&null!=L&&!xf(L))||Ud.test(L)||!_u.test(L)||null!=q&&L in Object(q)};var Se=s(94013),Ne="Expected a function";function _e(L,q){if("function"!=typeof L||null!=q&&"function"!=typeof q)throw new TypeError(Ne);var j=function(){var Ae=arguments,St=q?q.apply(this,Ae):Ae[0],Kt=j.cache;if(Kt.has(St))return Kt.get(St);var ur=L.apply(this,Ae);return j.cache=Kt.set(St,ur)||Kt,ur};return j.cache=new(_e.Cache||Se.Z),j}_e.Cache=Se.Z;const Ye=_e;var ni=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,zi=/\\(\\)?/g,Wo=function un(L){var q=Ye(L,function(Ae){return 500===j.size&&j.clear(),Ae}),j=q.cache;return q}(function(L){var q=[];return 46===L.charCodeAt(0)&&q.push(""),L.replace(ni,function(j,Ae,St,Kt){q.push(St?Kt.replace(zi,"$1"):Ae||j)}),q});const Qo=Wo;var ya=s(35770);const Wu=function Bl(L,q){for(var j=-1,Ae=null==L?0:L.length,St=Array(Ae);++j<Ae;)St[j]=q(L[j],j,L);return St};var cd=ya.Z?ya.Z.prototype:void 0,Ju=cd?cd.toString:void 0;const od=function tc(L){if("string"==typeof L)return L;if((0,Jo.Z)(L))return Wu(L,tc)+"";if(xf(L))return Ju?Ju.call(L):"";var q=L+"";return"0"==q&&1/L==-Infinity?"-0":q},h=function Ed(L){return null==L?"":od(L)},N=function b(L,q){return(0,Jo.Z)(L)?L:Lo(L,q)?[L]:Qo(h(L))};const he=function ne(L){if("string"==typeof L||xf(L))return L;var q=L+"";return"0"==q&&1/L==-Infinity?"-0":q},Qe=function Me(L,q){for(var j=0,Ae=(q=N(q,L)).length;null!=L&&j<Ae;)L=L[he(q[j++])];return j&&j==Ae?L:void 0},ft=function Re(L,q,j){var Ae=null==L?void 0:Qe(L,q);return void 0===Ae?j:Ae};var wt=s(65252);const Cn=function It(L){var q=null==L?0:L.length;return q?L[q-1]:void 0},oi=function Dr(L,q){return q.length<2?L:Qe(L,function er(L,q,j){var Ae=-1,St=L.length;q<0&&(q=-q>St?0:St+q),(j=j>St?St:j)<0&&(j+=St),St=q>j?0:j-q>>>0,q>>>=0;for(var Kt=Array(St);++Ae<St;)Kt[Ae]=L[Ae+q];return Kt}(q,0,-1))},As=function uo(L,q){return q=N(q,L),null==(L=oi(L,q))||delete L[he(Cn(q))]},ma=function as(L){return xa(L)?void 0:L};var Na=s(57052),Pl=ya.Z?ya.Z.isConcatSpreadable:void 0;const dl=function il(L){return(0,Jo.Z)(L)||(0,ao.Z)(L)||!!(Pl&&L&&L[Pl])},Qu=function Nl(L,q,j,Ae,St){var Kt=-1,ur=L.length;for(j||(j=dl),St||(St=[]);++Kt<ur;){var Br=L[Kt];q>0&&j(Br)?q>1?Nl(Br,q-1,j,Ae,St):(0,Na.Z)(St,Br):Ae||(St[St.length]=Br)}return St},wa=function ac(L){return null!=L&&L.length?Qu(L,1):[]},yc=function nc(L){return wl(je(L,void 0,wa),L+"")};var Gc=s(23359),ee=yc(function(L,q){var j={};if(null==L)return j;var Ae=!1;q=Wu(q,function(Kt){return Kt=N(Kt,L),Ae||(Ae=Kt.length>1),Kt}),(0,za.Z)(L,(0,Gc.Z)(L),j),Ae&&(j=(0,wt.Z)(j,7,ma));for(var St=q.length;St--;)As(j,q[St]);return j});const Ce=ee;const Gi=function Ur(L,q){for(var j=-1,Ae=null==L?0:L.length;++j<Ae;)if(q(L[j],j,L))return!0;return!1};function _c(L){var q=-1,j=null==L?0:L.length;for(this.__data__=new Se.Z;++q<j;)this.add(L[q])}_c.prototype.add=_c.prototype.push=function Ka(L){return this.__data__.set(L,"__lodash_hash_undefined__"),this},_c.prototype.has=function nu(L){return this.__data__.has(L)};const T_=_c,Sh=function Bd(L,q){return L.has(q)};const pf=function Hp(L,q,j,Ae,St,Kt){var ur=1&j,Br=L.length,Ii=q.length;if(Br!=Ii&&!(ur&&Ii>Br))return!1;var ms=Kt.get(L),vs=Kt.get(q);if(ms&&vs)return ms==q&&vs==L;var Ks=-1,Vl=!0,Xu=2&j?new T_:void 0;for(Kt.set(L,q),Kt.set(q,L);++Ks<Br;){var Fu=L[Ks],Oc=q[Ks];if(Ae)var af=ur?Ae(Oc,Fu,Ks,q,L,Kt):Ae(Fu,Oc,Ks,L,q,Kt);if(void 0!==af){if(af)continue;Vl=!1;break}if(Xu){if(!Gi(q,function(lf,m_){if(!Sh(Xu,m_)&&(Fu===lf||St(Fu,lf,j,Ae,Kt)))return Xu.push(m_)})){Vl=!1;break}}else if(Fu!==Oc&&!St(Fu,Oc,j,Ae,Kt)){Vl=!1;break}}return Kt.delete(L),Kt.delete(q),Vl};var C_=s(83345);const Za=function op(L){var q=-1,j=Array(L.size);return L.forEach(function(Ae,St){j[++q]=[St,Ae]}),j},Wa=function _f(L){var q=-1,j=Array(L.size);return L.forEach(function(Ae){j[++q]=Ae}),j};var bd=ya.Z?ya.Z.prototype:void 0,dd=bd?bd.valueOf:void 0;var Jc=s(22018),Gd=Object.prototype.hasOwnProperty;var J_=s(17507),a_="[object Arguments]",Q_="[object Array]",K_="[object Object]",q_=Object.prototype.hasOwnProperty;const vm=function Th(L,q,j,Ae,St,Kt){var ur=(0,Jo.Z)(L),Br=(0,Jo.Z)(q),Ii=ur?Q_:(0,J_.Z)(L),ms=Br?Q_:(0,J_.Z)(q),vs=(Ii=Ii==a_?K_:Ii)==K_,Ks=(ms=ms==a_?K_:ms)==K_,Vl=Ii==ms;if(Vl&&(0,eu.Z)(L)){if(!(0,eu.Z)(q))return!1;ur=!0,vs=!1}if(Vl&&!vs)return Kt||(Kt=new rn.Z),ur||(0,Tu.Z)(L)?pf(L,q,j,Ae,St,Kt):function td(L,q,j,Ae,St,Kt,ur){switch(j){case"[object DataView]":if(L.byteLength!=q.byteLength||L.byteOffset!=q.byteOffset)return!1;L=L.buffer,q=q.buffer;case"[object ArrayBuffer]":return!(L.byteLength!=q.byteLength||!Kt(new C_.Z(L),new C_.Z(q)));case"[object Boolean]":case"[object Date]":case"[object Number]":return(0,le.Z)(+L,+q);case"[object Error]":return L.name==q.name&&L.message==q.message;case"[object RegExp]":case"[object String]":return L==q+"";case"[object Map]":var Br=Za;case"[object Set]":if(Br||(Br=Wa),L.size!=q.size&&!(1&Ae))return!1;var ms=ur.get(L);if(ms)return ms==q;Ae|=2,ur.set(L,q);var vs=pf(Br(L),Br(q),Ae,St,Kt,ur);return ur.delete(L),vs;case"[object Symbol]":if(dd)return dd.call(L)==dd.call(q)}return!1}(L,q,Ii,j,Ae,St,Kt);if(!(1&j)){var Xu=vs&&q_.call(L,"__wrapped__"),Fu=Ks&&q_.call(q,"__wrapped__");if(Xu||Fu){var Oc=Xu?L.value():L,af=Fu?q.value():q;return Kt||(Kt=new rn.Z),St(Oc,af,j,Ae,Kt)}}return!!Vl&&(Kt||(Kt=new rn.Z),function xd(L,q,j,Ae,St,Kt){var ur=1&j,Br=(0,Jc.Z)(L),Ii=Br.length;if(Ii!=(0,Jc.Z)(q).length&&!ur)return!1;for(var Ks=Ii;Ks--;){var Vl=Br[Ks];if(!(ur?Vl in q:Gd.call(q,Vl)))return!1}var Xu=Kt.get(L),Fu=Kt.get(q);if(Xu&&Fu)return Xu==q&&Fu==L;var Oc=!0;Kt.set(L,q),Kt.set(q,L);for(var af=ur;++Ks<Ii;){var lf=L[Vl=Br[Ks]],m_=q[Vl];if(Ae)var Hh=ur?Ae(m_,lf,Vl,q,L,Kt):Ae(lf,m_,Vl,L,q,Kt);if(!(void 0===Hh?lf===m_||St(lf,m_,j,Ae,Kt):Hh)){Oc=!1;break}af||(af="constructor"==Vl)}if(Oc&&!af){var Uh=L.constructor,Wd=q.constructor;Uh!=Wd&&"constructor"in L&&"constructor"in q&&!("function"==typeof Uh&&Uh instanceof Uh&&"function"==typeof Wd&&Wd instanceof Wd)&&(Oc=!1)}return Kt.delete(L),Kt.delete(q),Oc}(L,q,j,Ae,St,Kt))},Ch=function O_(L,q,j,Ae,St){return L===q||(null==L||null==q||!(0,ys.Z)(L)&&!(0,ys.Z)(q)?L!=L&&q!=q:vm(L,q,j,Ae,O_,St))};const Mp=function lp(L){return L==L&&!(0,wu.Z)(L)};var hf=s(44409);const jf=function mf(L,q){return function(j){return null!=j&&j[L]===q&&(void 0!==q||L in Object(j))}},Nm=function jd(L){var q=function l_(L){for(var q=(0,hf.Z)(L),j=q.length;j--;){var Ae=q[j],St=L[Ae];q[j]=[Ae,St,Mp(St)]}return q}(L);return 1==q.length&&q[0][2]?jf(q[0][0],q[0][1]):function(j){return j===L||function Mh(L,q,j,Ae){var St=j.length,Kt=St,ur=!Ae;if(null==L)return!Kt;for(L=Object(L);St--;){var Br=j[St];if(ur&&Br[2]?Br[1]!==L[Br[0]]:!(Br[0]in L))return!1}for(;++St<Kt;){var Ii=(Br=j[St])[0],ms=L[Ii],vs=Br[1];if(ur&&Br[2]){if(void 0===ms&&!(Ii in L))return!1}else{var Ks=new rn.Z;if(Ae)var Vl=Ae(ms,vs,Ii,L,q,Ks);if(!(void 0===Vl?Ch(vs,ms,3,Ae,Ks):Vl))return!1}}return!0}(j,L,q)}},nf=function Qh(L,q){return null!=L&&q in Object(L)};var Op=s(19238);const Dp=function A_(L,q){return null!=L&&function Oh(L,q,j){for(var Ae=-1,St=(q=N(q,L)).length,Kt=!1;++Ae<St;){var ur=he(q[Ae]);if(!(Kt=null!=L&&j(L,ur)))break;L=L[ur]}return Kt||++Ae!=St?Kt:!!(St=null==L?0:L.length)&&(0,Op.Z)(St)&&(0,Uf.Z)(ur,St)&&((0,Jo.Z)(L)||(0,ao.Z)(L))}(L,q,nf)};const f_=function nh(L){return Lo(L)?function c_(L){return function(q){return q?.[L]}}(he(L)):function d_(L){return function(q){return Qe(q,L)}}(L)},up=function Kh(L){return"function"==typeof L?L:null==L?Pa:"object"==typeof L?(0,Jo.Z)(L)?function Yp(L,q){return Lo(L)&&Mp(q)?jf(he(L),q):function(j){var Ae=ft(j,L);return void 0===Ae&&Ae===q?Dp(j,L):Ch(q,Ae,3)}}(L[0],L[1]):Nm(L):f_(L)};var zp=function Td(L,q){return function(j,Ae){if(null==j)return j;if(!(0,rs.Z)(j))return L(j,Ae);for(var St=j.length,Kt=q?St:-1,ur=Object(j);(q?Kt--:++Kt<St)&&!1!==Ae(ur[Kt],Kt,ur););return j}}(function Dh(L,q){return L&&Qt(L,q,hf.Z)});const Ta=zp,Tc=function fd(L,q){var j;return Ta(L,function(Ae,St,Kt){return!(j=q(Ae,St,Kt))}),!!j},Cc=function p_(L,q){for(var j=-1,Ae=null==L?0:L.length;++j<Ae;)if(!q(L[j],j,L))return!1;return!0},yf=function D_(L,q){var j=!0;return Ta(L,function(Ae,St,Kt){return j=!!q(Ae,St,Kt)}),j},__=function Ff(L){return L&&L.length?L[0]:void 0},zf=function Lf(L){for(var q=-1,j=null==L?0:L.length,Ae=0,St=[];++q<j;){var Kt=L[q];Kt&&(St[Ae++]=Kt)}return St},ih=function rh(L,q,j,Ae){for(var St=L.length,Kt=j+(Ae?1:-1);Ae?Kt--:++Kt<St;)if(q(L[Kt],Kt,L))return Kt;return-1};var lc=/\s/;var Vd=/^\s+/;const h_=function Wf(L){return L&&L.slice(0,function Ku(L){for(var q=L.length;q--&&lc.test(L.charAt(q)););return q}(L)+1).replace(Vd,"")};var rf=/^[-+]0x[0-9a-f]+$/i,R_=/^0b[01]+$/i,x_=/^0o[0-7]+$/i,Jf=parseInt;const Rp=function oh(L){if("number"==typeof L)return L;if(xf(L))return NaN;if((0,wu.Z)(L)){var q="function"==typeof L.valueOf?L.valueOf():L;L=(0,wu.Z)(q)?q+"":q}if("string"!=typeof L)return 0===L?L:+L;L=h_(L);var j=R_.test(L);return j||x_.test(L)?Jf(L.slice(2),j?2:8):rf.test(L)?NaN:+L};const wd=function xp(L){var q=function sf(L){return L?1/0===(L=Rp(L))||-1/0===L?17976931348623157e292*(L<0?-1:1):L==L?L:0:0===L?L:0}(L),j=q%1;return q==q?j?q-j:q:0};var w_=Math.max,sh=function Vf(L){return function(q,j,Ae){var St=Object(q);if(!(0,rs.Z)(q)){var Kt=up(j);q=(0,hf.Z)(q),j=function(Br){return Kt(St[Br],Br,St)}}var ur=L(q,j,Ae);return ur>-1?St[Kt?q[ur]:ur]:void 0}}(function wp(L,q,j){var Ae=null==L?0:L.length;if(!Ae)return-1;var St=null==j?0:wd(j);return St<0&&(St=w_(Ae+St,0)),ih(L,up(q),St)});const pp=sh;const Sf=function Ef(L){return"string"==typeof L||!(0,Jo.Z)(L)&&(0,ys.Z)(L)&&"[object String]"==(0,Rc.Z)(L)};var Vp=s(40309);const ah=function(){return Vp.Z.Date.now()};var qh=Math.max,N_=Math.min;const em=function Qc(L,q,j){var Ae=!0,St=!0;if("function"!=typeof L)throw new TypeError("Expected a function");return(0,wu.Z)(j)&&(Ae="leading"in j?!!j.leading:Ae,St="trailing"in j?!!j.trailing:St),function wh(L,q,j){var Ae,St,Kt,ur,Br,Ii,ms=0,vs=!1,Ks=!1,Vl=!0;if("function"!=typeof L)throw new TypeError("Expected a function");function Xu(Nd){var mp=Ae,wc=St;return Ae=St=void 0,ms=Nd,ur=L.apply(wc,mp)}function af(Nd){var mp=Nd-Ii;return void 0===Ii||mp>=q||mp<0||Ks&&Nd-ms>=Kt}function lf(){var Nd=ah();if(af(Nd))return m_(Nd);Br=setTimeout(lf,function Oc(Nd){var pd=q-(Nd-Ii);return Ks?N_(pd,Kt-(Nd-ms)):pd}(Nd))}function m_(Nd){return Br=void 0,Vl&&Ae?Xu(Nd):(Ae=St=void 0,ur)}function Wd(){var Nd=ah(),mp=af(Nd);if(Ae=arguments,St=this,Ii=Nd,mp){if(void 0===Br)return function Fu(Nd){return ms=Nd,Br=setTimeout(lf,q),vs?Xu(Nd):ur}(Ii);if(Ks)return clearTimeout(Br),Br=setTimeout(lf,q),Xu(Ii)}return void 0===Br&&(Br=setTimeout(lf,q)),ur}return q=Rp(q)||0,(0,wu.Z)(j)&&(vs=!!j.leading,Kt=(Ks="maxWait"in j)?qh(Rp(j.maxWait)||0,q):Kt,Vl="trailing"in j?!!j.trailing:Vl),Wd.cancel=function Hh(){void 0!==Br&&clearTimeout(Br),ms=0,Ae=Ii=St=Br=void 0},Wd.flush=function Uh(){return void 0===Br?ur:m_(ah())},Wd}(L,q,{leading:Ae,maxWait:q,trailing:St})},lh=function _p(L){return L!=L},Im=function im(L){return null==L?[]:function nm(L,q){return Wu(q,function(j){return L[j]})}(L,(0,hf.Z)(L))};var vd=Math.max;const ym=function uh(L,q,j,Ae){L=(0,rs.Z)(L)?L:Im(L),j=j&&!Ae?wd(j):0;var St=L.length;return j<0&&(j=vd(St+j,0)),Sf(L)?j<=St&&L.indexOf(q,j)>-1:!!St&&function Ph(L,q,j){return q==q?function F_(L,q,j){for(var Ae=j-1,St=L.length;++Ae<St;)if(L[Ae]===q)return Ae;return-1}(L,q,j):ih(L,lh,j)}(L,q,j)>-1};var Np=s(15427);const Cd=function ch(L,q,j,Ae){if(!(0,wu.Z)(L))return L;for(var St=-1,Kt=(q=N(q,L)).length,ur=Kt-1,Br=L;null!=Br&&++St<Kt;){var Ii=he(q[St]),ms=j;if("__proto__"===Ii||"constructor"===Ii||"prototype"===Ii)return L;if(St!=ur){var vs=Br[Ii];void 0===(ms=Ae?Ae(vs,Ii,Br):void 0)&&(ms=(0,wu.Z)(vs)?vs:(0,Uf.Z)(q[St+1])?[]:{})}(0,Np.Z)(Br,Ii,ms),Br=Br[Ii]}return L},Fh=function Ih(L,q){return function om(L,q,j){for(var Ae=-1,St=q.length,Kt={};++Ae<St;){var ur=q[Ae],Br=Qe(L,ur);j(Br,ur)&&Cd(Kt,N(ur,L),Br)}return Kt}(L,q,function(j,Ae){return Dp(L,Ae)})};var cg=yc(function(L,q){return null==L?{}:Fh(L,q)});const L_=cg;function I(L,q){1&L&&(r.TgZ(0,"span"),r._uU(1,"loading..."),r.qZA())}const re=function(L){return{$implicit:L}};function S(L,q){if(1&L&&(r.ynx(0),r.TgZ(1,"div"),r.Hsn(2),r.qZA(),r.BQk()),2&L){const j=r.oxw();r.xp6(1),r.Udp("height",j.getTotalHeight())}}const z=function(){return{dontDetach:!0}},Oe=["*"],ut=["loadingTemplate"],On=["treeNodeTemplate"],Ar=["treeNodeWrapperTemplate"],ri=["treeNodeFullTemplate"],Di=["viewport"],Pi=function(L,q,j,Ae){return{loadingTemplate:L,treeNodeTemplate:q,treeNodeWrapperTemplate:j,treeNodeFullTemplate:Ae}};function cs(L,q){if(1&L&&r._UZ(0,"tree-node-collection",4),2&L){const j=r.oxw();r.Q6J("nodes",j.treeModel.roots)("treeModel",j.treeModel)("templates",r.l5B(3,Pi,j.loadingTemplate,j.treeNodeTemplate,j.treeNodeWrapperTemplate,j.treeNodeFullTemplate))}}function Yo(L,q){if(1&L&&r._UZ(0,"tree-node-drop-slot",5),2&L){const j=r.oxw();r.Q6J("dropIndex",0)("node",j.treeModel.virtualRoot)}}function y(L,q){if(1&L&&r._UZ(0,"tree-node-drop-slot",6),2&L){const j=r.oxw(3);r.Q6J("dropIndex",j.node.index)("node",j.node.parent)}}function x(L,q){if(1&L&&(r.TgZ(0,"div"),r.YNc(1,y,1,2,"tree-node-drop-slot",3),r._UZ(2,"tree-node-wrapper",4)(3,"tree-node-children",5)(4,"tree-node-drop-slot",6),r.qZA()),2&L){const j=r.oxw(2);r.Tol(j.node.getClass()),r.ekj("tree-node",!0)("tree-node-expanded",j.node.isExpanded&&j.node.hasChildren)("tree-node-collapsed",j.node.isCollapsed&&j.node.hasChildren)("tree-node-leaf",j.node.isLeaf)("tree-node-active",j.node.isActive)("tree-node-focused",j.node.isFocused),r.xp6(1),r.Q6J("ngIf",0===j.index),r.xp6(1),r.Q6J("node",j.node)("index",j.index)("templates",j.templates),r.xp6(1),r.Q6J("node",j.node)("templates",j.templates),r.xp6(1),r.Q6J("dropIndex",j.node.index+1)("node",j.node.parent)}}const Y=function(L,q,j,Ae){return{$implicit:L,node:q,index:j,templates:Ae}};function be(L,q){if(1&L&&(r.ynx(0),r.YNc(1,x,5,22,"div",1),r.GkF(2,2),r.BQk()),2&L){const j=r.oxw();r.xp6(1),r.Q6J("ngIf",!j.templates.treeNodeFullTemplate),r.xp6(1),r.Q6J("ngTemplateOutlet",j.templates.treeNodeFullTemplate)("ngTemplateOutletContext",r.l5B(3,Y,j.node,j.node,j.index,j.templates))}}function Ke(L,q){if(1&L&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&L){const j=r.oxw();r.xp6(1),r.Oqu(j.node.displayField)}}const xt=function(L,q,j){return{$implicit:L,node:q,index:j}};function _n(L,q){if(1&L){const j=r.EpF();r.TgZ(0,"span",3),r.NdJ("click",function(St){r.CHM(j);const Kt=r.oxw(2);return r.KtG(Kt.node.mouseAction("expanderClick",St))}),r._UZ(1,"span",4),r.qZA()}if(2&L){const j=r.oxw(2);r.ekj("toggle-children-wrapper-expanded",j.node.isExpanded)("toggle-children-wrapper-collapsed",j.node.isCollapsed)}}function In(L,q){1&L&&r._UZ(0,"span",5)}function vr(L,q){if(1&L&&(r.ynx(0),r.YNc(1,_n,2,4,"span",1),r.YNc(2,In,1,0,"span",2),r.BQk()),2&L){const j=r.oxw();r.xp6(1),r.Q6J("ngIf",j.node.hasChildren),r.xp6(1),r.Q6J("ngIf",!j.node.hasChildren)}}function Si(L,q){if(1&L&&r._UZ(0,"tree-node-collection",4),2&L){const j=r.oxw(3);r.Q6J("nodes",j.node.children)("templates",j.templates)("treeModel",j.node.treeModel)}}function Uo(L,q){if(1&L&&r._UZ(0,"tree-loading-component",5),2&L){const j=r.oxw(3);r.Udp("padding-left",j.node.getNodePadding()),r.Q6J("template",j.templates.loadingTemplate)("node",j.node)}}function Ds(L,q){if(1&L&&(r.TgZ(0,"div"),r.YNc(1,Si,1,3,"tree-node-collection",2),r.YNc(2,Uo,1,4,"tree-loading-component",3),r.qZA()),2&L){const j=r.oxw(2);r.ekj("tree-children",!0)("tree-children-no-padding",j.node.options.levelPadding),r.xp6(1),r.Q6J("ngIf",j.node.children),r.xp6(1),r.Q6J("ngIf",!j.node.children)}}function Qi(L,q){if(1&L&&(r.ynx(0),r.YNc(1,Ds,3,6,"div",1),r.BQk()),2&L){const j=r.oxw();r.xp6(1),r.Q6J("treeAnimateOpen",j.node.isExpanded)("treeAnimateOpenSpeed",j.node.options.animateSpeed)("treeAnimateOpenAcceleration",j.node.options.animateAcceleration)("treeAnimateOpenEnabled",j.node.options.animateExpand)}}function Ls(L,q){if(1&L&&r._UZ(0,"tree-node",2),2&L){const j=q.$implicit,Ae=q.index,St=r.oxw(2);r.Q6J("node",j)("index",Ae)("templates",St.templates)}}function ia(L,q){if(1&L&&(r.ynx(0),r.TgZ(1,"div"),r.YNc(2,Ls,1,3,"tree-node",1),r.qZA(),r.BQk()),2&L){const j=r.oxw();r.xp6(1),r.Udp("margin-top",j.marginTop),r.xp6(1),r.Q6J("ngForOf",j.viewportNodes)("ngForTrackBy",j.trackNode)}}function oa(L,q){if(1&L&&r._UZ(0,"tree-node-checkbox",4),2&L){const j=r.oxw(2);r.Q6J("node",j.node)}}function di(L,q){if(1&L){const j=r.EpF();r.TgZ(0,"div",2),r.YNc(1,oa,1,1,"tree-node-checkbox",3),r._UZ(2,"tree-node-expander",4),r.TgZ(3,"div",5),r.NdJ("click",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("click",St))})("dblclick",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("dblClick",St))})("mouseover",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("mouseOver",St))})("mouseout",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("mouseOut",St))})("contextmenu",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("contextMenu",St))})("treeDrop",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.onDrop(St))})("treeDropDragOver",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("dragOver",St))})("treeDropDragLeave",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("dragLeave",St))})("treeDropDragEnter",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("dragEnter",St))}),r._UZ(4,"tree-node-content",6),r.qZA()()}if(2&L){const j=r.oxw();r.Udp("padding-left",j.node.getNodePadding()),r.xp6(1),r.Q6J("ngIf",j.node.options.useCheckbox),r.xp6(1),r.Q6J("node",j.node),r.xp6(1),r.ekj("node-content-wrapper-active",j.node.isActive)("node-content-wrapper-focused",j.node.isFocused),r.Q6J("treeAllowDrop",j.node.allowDrop)("allowDragoverStyling",j.node.allowDragoverStyling())("treeDrag",j.node)("treeDragEnabled",j.node.allowDrag()),r.xp6(1),r.Q6J("node",j.node)("index",j.index)("template",j.templates.treeNodeTemplate)}}function Wr(L,q){if(1&L){const j=r.EpF();r.ynx(0),r.TgZ(1,"input",1),r.NdJ("click",function(St){r.CHM(j);const Kt=r.oxw();return r.KtG(Kt.node.mouseAction("checkboxClick",St))}),r.qZA(),r.BQk()}if(2&L){const j=r.oxw();r.xp6(1),r.Q6J("checked",j.node.isSelected)("indeterminate",j.node.isPartiallySelected)}}let si=(()=>{class L{constructor(j,Ae){this.templateRef=j,this.viewContainer=Ae,this.templateBindings={}}ngOnInit(){this.view=this.viewContainer.createEmbeddedView(this.templateRef),this.dispose&&this.dispose(),this.shouldDetach()&&this.view.detach(),this.autoDetect(this.view)}shouldDetach(){return this.treeMobxAutorun&&this.treeMobxAutorun.detach}autoDetect(j){this.dispose=vi(()=>j.detectChanges())}ngOnDestroy(){this.dispose&&this.dispose()}}return L.\u0275fac=function(j){return new(j||L)(r.Y36(r.Rgc),r.Y36(r.s_b))},L.\u0275dir=r.lG2({type:L,selectors:[["","treeMobxAutorun",""]],inputs:{treeMobxAutorun:"treeMobxAutorun"}}),L})();const Tf={TOGGLE_ACTIVE:(L,q,j)=>q&&q.toggleActivated(),TOGGLE_ACTIVE_MULTI:(L,q,j)=>q&&q.toggleActivated(!0),TOGGLE_SELECTED:(L,q,j)=>q&&q.toggleSelected(),ACTIVATE:(L,q,j)=>q.setIsActive(!0),DEACTIVATE:(L,q,j)=>q.setIsActive(!1),SELECT:(L,q,j)=>q.setIsSelected(!0),DESELECT:(L,q,j)=>q.setIsSelected(!1),FOCUS:(L,q,j)=>q.focus(),TOGGLE_EXPANDED:(L,q,j)=>q.hasChildren&&q.toggleExpanded(),EXPAND:(L,q,j)=>q.expand(),COLLAPSE:(L,q,j)=>q.collapse(),DRILL_DOWN:(L,q,j)=>L.focusDrillDown(),DRILL_UP:(L,q,j)=>L.focusDrillUp(),NEXT_NODE:(L,q,j)=>L.focusNextNode(),PREVIOUS_NODE:(L,q,j)=>L.focusPreviousNode(),MOVE_NODE:(L,q,j,{from:Ae,to:St})=>{j.ctrlKey?L.copyNode(Ae,St):L.moveNode(Ae,St)}},fh={mouse:{click:Tf.TOGGLE_ACTIVE,dblClick:null,contextMenu:null,expanderClick:Tf.TOGGLE_EXPANDED,checkboxClick:Tf.TOGGLE_SELECTED,drop:Tf.MOVE_NODE},keys:{39:Tf.DRILL_DOWN,37:Tf.DRILL_UP,40:Tf.NEXT_NODE,38:Tf.PREVIOUS_NODE,32:Tf.TOGGLE_ACTIVE,13:Tf.TOGGLE_ACTIVE}};class sm{constructor(q={}){this.options=q,this.actionMapping=gd({},this.options.actionMapping,fh),q.rtl&&(this.actionMapping.keys[39]=ft(q,["actionMapping","keys",39])||Tf.DRILL_UP,this.actionMapping.keys[37]=ft(q,["actionMapping","keys",37])||Tf.DRILL_DOWN)}get hasChildrenField(){return this.options.hasChildrenField||"hasChildren"}get childrenField(){return this.options.childrenField||"children"}get displayField(){return this.options.displayField||"name"}get idField(){return this.options.idField||"id"}get isExpandedField(){return this.options.isExpandedField||"isExpanded"}get getChildren(){return this.options.getChildren}get levelPadding(){return this.options.levelPadding||0}get useVirtualScroll(){return this.options.useVirtualScroll}get animateExpand(){return this.options.animateExpand}get animateSpeed(){return this.options.animateSpeed||1}get animateAcceleration(){return this.options.animateAcceleration||1.2}get scrollOnActivate(){return void 0===this.options.scrollOnActivate||this.options.scrollOnActivate}get rtl(){return!!this.options.rtl}get rootId(){return this.options.rootId}get useCheckbox(){return this.options.useCheckbox}get useTriState(){return void 0===this.options.useTriState||this.options.useTriState}get scrollContainer(){return this.options.scrollContainer}get allowDragoverStyling(){return void 0===this.options.allowDragoverStyling||this.options.allowDragoverStyling}getNodeClone(q){return this.options.getNodeClone?this.options.getNodeClone(q):Ce(Object.assign({},q.data),["id"])}allowDrop(q,j,Ae){return this.options.allowDrop instanceof Function?this.options.allowDrop(q,j,Ae):void 0===this.options.allowDrop||this.options.allowDrop}allowDrag(q){return this.options.allowDrag instanceof Function?this.options.allowDrag(q):this.options.allowDrag}nodeClass(q){return this.options.nodeClass?this.options.nodeClass(q):""}nodeHeight(q){if(q.data.virtual)return 0;let j=this.options.nodeHeight||22;return"function"==typeof j&&(j=j(q)),j+(0===q.index?2:1)*this.dropSlotHeight}get dropSlotHeight(){return function $t(L){return"number"==typeof L||(0,ys.Z)(L)&&"[object Number]"==(0,Rc.Z)(L)}(this.options.dropSlotHeight)?this.options.dropSlotHeight:2}}const nd={toggleExpanded:"toggleExpanded",activate:"activate",deactivate:"deactivate",nodeActivate:"nodeActivate",nodeDeactivate:"nodeDeactivate",select:"select",deselect:"deselect",focus:"focus",blur:"blur",initialized:"initialized",updateData:"updateData",moveNode:"moveNode",copyNode:"copyNode",event:"event",loadNodeChildren:"loadNodeChildren",changeFilter:"changeFilter",stateChange:"stateChange"};var Zd=function(L,q,j,Ae){var ur,St=arguments.length,Kt=St<3?q:null===Ae?Ae=Object.getOwnPropertyDescriptor(q,j):Ae;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Kt=Reflect.decorate(L,q,j,Ae);else for(var Br=L.length-1;Br>=0;Br--)(ur=L[Br])&&(Kt=(St<3?ur(Kt):St>3?ur(q,j,Kt):ur(q,j))||Kt);return St>3&&Kt&&Object.defineProperty(q,j,Kt),Kt},hc=function(L,q){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(L,q)};let _g=(()=>{class L{constructor(j,Ae,St,Kt){this.data=j,this.parent=Ae,this.treeModel=St,this.position=0,this.allowDrop=(ur,Br)=>this.options.allowDrop(ur,{parent:this,index:0},Br),this.allowDragoverStyling=()=>this.options.allowDragoverStyling,null==this.id&&(this.id=function hg(){return Math.floor(1e13*Math.random())}()),this.index=Kt,this.getField("children")&&this._initChildren(),this.autoLoadChildren()}get isHidden(){return this.treeModel.isHidden(this)}get isExpanded(){return this.treeModel.isExpanded(this)}get isActive(){return this.treeModel.isActive(this)}get isFocused(){return this.treeModel.isNodeFocused(this)}get isSelected(){return this.isSelectable()?this.treeModel.isSelected(this):function Zs(L,q,j){var Ae=(0,Jo.Z)(L)?Gi:Tc;return j&&Uc(L,q,j)&&(q=void 0),Ae(L,up(q))}(this.children,j=>j.isSelected)}get isAllSelected(){return this.isSelectable()?this.treeModel.isSelected(this):function cp(L,q,j){var Ae=(0,Jo.Z)(L)?Cc:yf;return j&&Uc(L,q,j)&&(q=void 0),Ae(L,up(q))}(this.children,j=>j.isAllSelected)}get isPartiallySelected(){return this.isSelected&&!this.isAllSelected}get level(){return this.parent?this.parent.level+1:0}get path(){return this.parent?[...this.parent.path,this.id]:[]}get elementRef(){throw"Element Ref is no longer supported since introducing virtual scroll\n\n      You may use a template to obtain a reference to the element"}get originalNode(){return this._originalNode}get hasChildren(){return!!(this.getField("hasChildren")||this.children&&this.children.length>0)}get isCollapsed(){return!this.isExpanded}get isLeaf(){return!this.hasChildren}get isRoot(){return this.parent.data.virtual}get realParent(){return this.isRoot?null:this.parent}get options(){return this.treeModel.options}fireEvent(j){this.treeModel.fireEvent(j)}get displayField(){return this.getField("display")}get id(){return this.getField("id")}set id(j){this.setField("id",j)}getField(j){return this.data[this.options[`${j}Field`]]}setField(j,Ae){this.data[this.options[`${j}Field`]]=Ae}_findAdjacentSibling(j,Ae=!1){const St=this._getParentsChildren(Ae),Kt=St.indexOf(this);return St.length>Kt+j?St[Kt+j]:null}findNextSibling(j=!1){return this._findAdjacentSibling(1,j)}findPreviousSibling(j=!1){return this._findAdjacentSibling(-1,j)}getVisibleChildren(){return this.visibleChildren}get visibleChildren(){return(this.children||[]).filter(j=>!j.isHidden)}getFirstChild(j=!1){return __((j?this.visibleChildren:this.children)||[])}getLastChild(j=!1){return Cn((j?this.visibleChildren:this.children)||[])}findNextNode(j=!0,Ae=!1){return j&&this.isExpanded&&this.getFirstChild(Ae)||this.findNextSibling(Ae)||this.parent&&this.parent.findNextNode(!1,Ae)}findPreviousNode(j=!1){let Ae=this.findPreviousSibling(j);return Ae?Ae._getLastOpenDescendant(j):this.realParent}_getLastOpenDescendant(j=!1){const Ae=this.getLastChild(j);return this.isCollapsed||!Ae?this:Ae._getLastOpenDescendant(j)}_getParentsChildren(j=!1){return this.parent&&(j?this.parent.getVisibleChildren():this.parent.children)||[]}getIndexInParent(j=!1){return this._getParentsChildren(j).indexOf(this)}isDescendantOf(j){return this===j||this.parent&&this.parent.isDescendantOf(j)}getNodePadding(){return this.options.levelPadding*(this.level-1)+"px"}getClass(){return[this.options.nodeClass(this),`tree-node-level-${this.level}`].join(" ")}onDrop(j){this.mouseAction("drop",j.event,{from:j.element,to:{parent:this,index:0,dropOnNode:!0}})}allowDrag(){return this.options.allowDrag(this)}loadNodeChildren(){return this.options.getChildren?Promise.resolve(this.options.getChildren(this)).then(j=>{j&&(this.setField("children",j),this._initChildren(),this.options.useTriState&&this.treeModel.isSelected(this)&&this.setIsSelected(!0),this.children.forEach(Ae=>{Ae.getField("isExpanded")&&Ae.hasChildren&&Ae.expand()}))}).then(()=>{this.fireEvent({eventName:nd.loadNodeChildren,node:this})}):Promise.resolve()}expand(){return this.isExpanded||this.toggleExpanded(),this}collapse(){return this.isExpanded&&this.toggleExpanded(),this}doForAll(j){Promise.resolve(j(this)).then(()=>{this.children&&this.children.forEach(Ae=>Ae.doForAll(j))})}expandAll(){this.doForAll(j=>j.expand())}collapseAll(){this.doForAll(j=>j.collapse())}ensureVisible(){return this.realParent&&(this.realParent.expand(),this.realParent.ensureVisible()),this}toggleExpanded(){return this.setIsExpanded(!this.isExpanded),this}setIsExpanded(j){return this.hasChildren&&this.treeModel.setExpandedNode(this,j),this}autoLoadChildren(){this.handler=ws(()=>this.isExpanded,j=>{!this.children&&this.hasChildren&&j&&this.loadNodeChildren()},{fireImmediately:!0})}dispose(){this.children&&this.children.forEach(j=>j.dispose()),this.handler&&this.handler(),this.parent=null,this.children=null}setIsActive(j,Ae=!1){return this.treeModel.setActiveNode(this,j,Ae),j&&this.focus(this.options.scrollOnActivate),this}isSelectable(){return this.isLeaf||!this.children||!this.options.useTriState}setIsSelected(j){return this.isSelectable()?this.treeModel.setSelectedNode(this,j):this.visibleChildren.forEach(Ae=>Ae.setIsSelected(j)),this}toggleSelected(){return this.setIsSelected(!this.isSelected),this}toggleActivated(j=!1){return this.setIsActive(!this.isActive,j),this}setActiveAndVisible(j=!1){return this.setIsActive(!0,j).ensureVisible(),setTimeout(this.scrollIntoView.bind(this)),this}scrollIntoView(j=!1){this.treeModel.virtualScroll.scrollIntoView(this,j)}focus(j=!0){let Ae=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(this),j&&this.scrollIntoView(),Ae&&this.fireEvent({eventName:nd.blur,node:Ae}),this.fireEvent({eventName:nd.focus,node:this}),this}blur(){let j=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(null),j&&this.fireEvent({eventName:nd.blur,node:this}),this}setIsHidden(j){this.treeModel.setIsHidden(this,j)}hide(){this.setIsHidden(!0)}show(){this.setIsHidden(!1)}mouseAction(j,Ae,St=null){this.treeModel.setFocus(!0);const ur=this.options.actionMapping.mouse[j];ur&&ur(this.treeModel,this,Ae,St)}getSelfHeight(){return this.options.nodeHeight(this)}_initChildren(){this.children=this.getField("children").map((j,Ae)=>new L(j,this,this.treeModel,Ae))}}return Zd([ze,hc("design:type",Object),hc("design:paramtypes",[])],L.prototype,"isHidden",null),Zd([ze,hc("design:type",Object),hc("design:paramtypes",[])],L.prototype,"isExpanded",null),Zd([ze,hc("design:type",Object),hc("design:paramtypes",[])],L.prototype,"isActive",null),Zd([ze,hc("design:type",Object),hc("design:paramtypes",[])],L.prototype,"isFocused",null),Zd([ze,hc("design:type",Object),hc("design:paramtypes",[])],L.prototype,"isSelected",null),Zd([ze,hc("design:type",Object),hc("design:paramtypes",[])],L.prototype,"isAllSelected",null),Zd([ze,hc("design:type",Object),hc("design:paramtypes",[])],L.prototype,"isPartiallySelected",null),Zd([jt,hc("design:type",Array)],L.prototype,"children",void 0),Zd([jt,hc("design:type",Number)],L.prototype,"index",void 0),Zd([jt,hc("design:type",Object)],L.prototype,"position",void 0),Zd([jt,hc("design:type",Number)],L.prototype,"height",void 0),Zd([ze,hc("design:type",Number),hc("design:paramtypes",[])],L.prototype,"level",null),Zd([ze,hc("design:type",Array),hc("design:paramtypes",[])],L.prototype,"path",null),Zd([ze,hc("design:type",Object),hc("design:paramtypes",[])],L.prototype,"visibleChildren",null),Zd([ie,hc("design:type",Function),hc("design:paramtypes",[Object]),hc("design:returntype",void 0)],L.prototype,"setIsSelected",null),Zd([ie,hc("design:type",Function),hc("design:paramtypes",[]),hc("design:returntype",void 0)],L.prototype,"_initChildren",null),L})();var Iu=function(L,q,j,Ae){var ur,St=arguments.length,Kt=St<3?q:null===Ae?Ae=Object.getOwnPropertyDescriptor(q,j):Ae;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Kt=Reflect.decorate(L,q,j,Ae);else for(var Br=L.length-1;Br>=0;Br--)(ur=L[Br])&&(Kt=(St<3?ur(Kt):St>3?ur(q,j,Kt):ur(q,j))||Kt);return St>3&&Kt&&Object.defineProperty(q,j,Kt),Kt},Es=function(L,q){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(L,q)};let gu=(()=>{class L{constructor(){this.options=new sm,this.eventNames=Object.keys(nd),this.expandedNodeIds={},this.selectedLeafNodeIds={},this.activeNodeIds={},this.hiddenNodeIds={},this.focusedNodeId=null,this.firstUpdate=!0,this.subscriptions=[]}fireEvent(j){j.treeModel=this,this.events[j.eventName].emit(j),this.events.event.emit(j)}subscribe(j,Ae){const St=this.events[j].subscribe(Ae);this.subscriptions.push(St)}getFocusedNode(){return this.focusedNode}getActiveNode(){return this.activeNodes[0]}getActiveNodes(){return this.activeNodes}getVisibleRoots(){return this.virtualRoot.visibleChildren}getFirstRoot(j=!1){return __(j?this.getVisibleRoots():this.roots)}getLastRoot(j=!1){return Cn(j?this.getVisibleRoots():this.roots)}get isFocused(){return L.focusedTree===this}isNodeFocused(j){return this.focusedNode===j}isEmptyTree(){return this.roots&&0===this.roots.length}get focusedNode(){return this.focusedNodeId?this.getNodeById(this.focusedNodeId):null}get expandedNodes(){const j=Object.keys(this.expandedNodeIds).filter(Ae=>this.expandedNodeIds[Ae]).map(Ae=>this.getNodeById(Ae));return zf(j)}get activeNodes(){const j=Object.keys(this.activeNodeIds).filter(Ae=>this.activeNodeIds[Ae]).map(Ae=>this.getNodeById(Ae));return zf(j)}get hiddenNodes(){const j=Object.keys(this.hiddenNodeIds).filter(Ae=>this.hiddenNodeIds[Ae]).map(Ae=>this.getNodeById(Ae));return zf(j)}get selectedLeafNodes(){const j=Object.keys(this.selectedLeafNodeIds).filter(Ae=>this.selectedLeafNodeIds[Ae]).map(Ae=>this.getNodeById(Ae));return zf(j)}getNodeByPath(j,Ae=null){if(!j)return null;if(Ae=Ae||this.virtualRoot,0===j.length)return Ae;if(!Ae.children)return null;const St=j.shift(),Kt=pp(Ae.children,{id:St});return Kt?this.getNodeByPath(j,Kt):null}getNodeById(j){const Ae=j.toString();return this.getNodeBy(St=>St.id.toString()===Ae)}getNodeBy(j,Ae=null){if(!(Ae=Ae||this.virtualRoot).children)return null;const St=pp(Ae.children,j);if(St)return St;for(let Kt of Ae.children){const ur=this.getNodeBy(j,Kt);if(ur)return ur}}isExpanded(j){return this.expandedNodeIds[j.id]}isHidden(j){return this.hiddenNodeIds[j.id]}isActive(j){return this.activeNodeIds[j.id]}isSelected(j){return this.selectedLeafNodeIds[j.id]}ngOnDestroy(){this.dispose(),this.unsubscribeAll()}dispose(){this.virtualRoot&&this.virtualRoot.dispose()}unsubscribeAll(){this.subscriptions.forEach(j=>j.unsubscribe()),this.subscriptions=[]}setData({nodes:j,options:Ae=null,events:St=null}){Ae&&(this.options=new sm(Ae)),St&&(this.events=St),j&&(this.nodes=j),this.update()}update(){let j={id:this.options.rootId,virtual:!0,[this.options.childrenField]:this.nodes};this.dispose(),this.virtualRoot=new _g(j,null,this,0),this.roots=this.virtualRoot.children,this.firstUpdate?this.roots&&(this.firstUpdate=!1,this._calculateExpandedNodes()):this.fireEvent({eventName:nd.updateData})}setFocusedNode(j){this.focusedNodeId=j?j.id:null}setFocus(j){L.focusedTree=j?this:null}doForAll(j){this.roots.forEach(Ae=>Ae.doForAll(j))}focusNextNode(){let j=this.getFocusedNode(),Ae=j?j.findNextNode(!0,!0):this.getFirstRoot(!0);Ae&&Ae.focus()}focusPreviousNode(){let j=this.getFocusedNode(),Ae=j?j.findPreviousNode(!0):this.getLastRoot(!0);Ae&&Ae.focus()}focusDrillDown(){let j=this.getFocusedNode();if(j&&j.isCollapsed&&j.hasChildren)j.toggleExpanded();else{let Ae=j?j.getFirstChild(!0):this.getFirstRoot(!0);Ae&&Ae.focus()}}focusDrillUp(){let j=this.getFocusedNode();if(j)if(j.isExpanded)j.toggleExpanded();else{let Ae=j.realParent;Ae&&Ae.focus()}}setActiveNode(j,Ae,St=!1){St?this._setActiveNodeMulti(j,Ae):this._setActiveNodeSingle(j,Ae),Ae?(j.focus(this.options.scrollOnActivate),this.fireEvent({eventName:nd.activate,node:j}),this.fireEvent({eventName:nd.nodeActivate,node:j})):(this.fireEvent({eventName:nd.deactivate,node:j}),this.fireEvent({eventName:nd.nodeDeactivate,node:j}))}setSelectedNode(j,Ae){this.selectedLeafNodeIds=Object.assign({},this.selectedLeafNodeIds,{[j.id]:Ae}),Ae?(j.focus(),this.fireEvent({eventName:nd.select,node:j})):this.fireEvent({eventName:nd.deselect,node:j})}setExpandedNode(j,Ae){this.expandedNodeIds=Object.assign({},this.expandedNodeIds,{[j.id]:Ae}),this.fireEvent({eventName:nd.toggleExpanded,node:j,isExpanded:Ae})}expandAll(){this.roots.forEach(j=>j.expandAll())}collapseAll(){this.roots.forEach(j=>j.collapseAll())}setIsHidden(j,Ae){this.hiddenNodeIds=Object.assign({},this.hiddenNodeIds,{[j.id]:Ae})}setHiddenNodeIds(j){this.hiddenNodeIds=j.reduce((Ae,St)=>Object.assign(Ae,{[St]:!0}),{})}performKeyAction(j,Ae){const St=this.options.actionMapping.keys[Ae.keyCode];return!!St&&(Ae.preventDefault(),St(this,j,Ae),!0)}filterNodes(j,Ae=!0){let St;if(!j)return this.clearFilter();if(Sf(j))St=ur=>-1!==ur.displayField.toLowerCase().indexOf(j.toLowerCase());else{if(!(0,mu.Z)(j))return console.error("Don't know what to do with filter",j),void console.error("Should be either a string or function");St=j}const Kt={};this.roots.forEach(ur=>this._filterNode(Kt,ur,St,Ae)),this.hiddenNodeIds=Kt,this.fireEvent({eventName:nd.changeFilter})}clearFilter(){this.hiddenNodeIds={},this.fireEvent({eventName:nd.changeFilter})}moveNode(j,Ae){const St=j.getIndexInParent(),Kt=j.parent;if(!this.canMoveNode(j,Ae,St))return;const ur=Kt.getField("children");Ae.parent.getField("children")||Ae.parent.setField("children",[]);const Br=Ae.parent.getField("children"),Ii=ur.splice(St,1)[0];let ms=Kt===Ae.parent&&Ae.index>St?Ae.index-1:Ae.index;Br.splice(ms,0,Ii),Kt.treeModel.update(),Ae.parent.treeModel!==Kt.treeModel&&Ae.parent.treeModel.update(),this.fireEvent({eventName:nd.moveNode,node:Ii,to:{parent:Ae.parent.data,index:ms},from:{parent:Kt.data,index:St}})}copyNode(j,Ae){const St=j.getIndexInParent();if(!this.canMoveNode(j,Ae,St))return;Ae.parent.getField("children")||Ae.parent.setField("children",[]);const Kt=Ae.parent.getField("children"),ur=this.options.getNodeClone(j);Kt.splice(Ae.index,0,ur),j.treeModel.update(),Ae.parent.treeModel!==j.treeModel&&Ae.parent.treeModel.update(),this.fireEvent({eventName:nd.copyNode,node:ur,to:{parent:Ae.parent.data,index:Ae.index}})}getState(){return{expandedNodeIds:this.expandedNodeIds,selectedLeafNodeIds:this.selectedLeafNodeIds,activeNodeIds:this.activeNodeIds,hiddenNodeIds:this.hiddenNodeIds,focusedNodeId:this.focusedNodeId}}setState(j){j&&Object.assign(this,{expandedNodeIds:j.expandedNodeIds||{},selectedLeafNodeIds:j.selectedLeafNodeIds||{},activeNodeIds:j.activeNodeIds||{},hiddenNodeIds:j.hiddenNodeIds||{},focusedNodeId:j.focusedNodeId})}subscribeToState(j){vi(()=>j(this.getState()))}canMoveNode(j,Ae,St){return St||j.getIndexInParent(),(j.parent!==Ae.parent||St!==Ae.index)&&!Ae.parent.isDescendantOf(j)}calculateExpandedNodes(){this._calculateExpandedNodes()}_filterNode(j,Ae,St,Kt){let ur=St(Ae);return Ae.children&&Ae.children.forEach(Br=>{this._filterNode(j,Br,St,Kt)&&(ur=!0)}),ur||(j[Ae.id]=!0),Kt&&ur&&Ae.ensureVisible(),ur}_calculateExpandedNodes(j=null){(j=j||this.virtualRoot).data[this.options.isExpandedField]&&(this.expandedNodeIds=Object.assign({},this.expandedNodeIds,{[j.id]:!0})),j.children&&j.children.forEach(Ae=>this._calculateExpandedNodes(Ae))}_setActiveNodeSingle(j,Ae){this.activeNodes.filter(St=>St!==j).forEach(St=>{this.fireEvent({eventName:nd.deactivate,node:St}),this.fireEvent({eventName:nd.nodeDeactivate,node:St})}),this.activeNodeIds=Ae?{[j.id]:!0}:{}}_setActiveNodeMulti(j,Ae){this.activeNodeIds=Object.assign({},this.activeNodeIds,{[j.id]:Ae})}}return L.\u0275fac=function(j){return new(j||L)},L.\u0275prov=r.Yz7({token:L,factory:L.\u0275fac}),L.focusedTree=null,L})();Iu([jt,Es("design:type",Array)],gu.prototype,"roots",void 0),Iu([jt,Es("design:type",Object)],gu.prototype,"expandedNodeIds",void 0),Iu([jt,Es("design:type",Object)],gu.prototype,"selectedLeafNodeIds",void 0),Iu([jt,Es("design:type",Object)],gu.prototype,"activeNodeIds",void 0),Iu([jt,Es("design:type",Object)],gu.prototype,"hiddenNodeIds",void 0),Iu([jt,Es("design:type",Object)],gu.prototype,"focusedNodeId",void 0),Iu([jt,Es("design:type",_g)],gu.prototype,"virtualRoot",void 0),Iu([ze,Es("design:type",Object),Es("design:paramtypes",[])],gu.prototype,"focusedNode",null),Iu([ze,Es("design:type",Object),Es("design:paramtypes",[])],gu.prototype,"expandedNodes",null),Iu([ze,Es("design:type",Object),Es("design:paramtypes",[])],gu.prototype,"activeNodes",null),Iu([ze,Es("design:type",Object),Es("design:paramtypes",[])],gu.prototype,"hiddenNodes",null),Iu([ze,Es("design:type",Object),Es("design:paramtypes",[])],gu.prototype,"selectedLeafNodes",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object]),Es("design:returntype",void 0)],gu.prototype,"setData",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[]),Es("design:returntype",void 0)],gu.prototype,"update",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object]),Es("design:returntype",void 0)],gu.prototype,"setFocusedNode",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object]),Es("design:returntype",void 0)],gu.prototype,"setFocus",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object]),Es("design:returntype",void 0)],gu.prototype,"doForAll",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[]),Es("design:returntype",void 0)],gu.prototype,"focusNextNode",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[]),Es("design:returntype",void 0)],gu.prototype,"focusPreviousNode",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[]),Es("design:returntype",void 0)],gu.prototype,"focusDrillDown",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[]),Es("design:returntype",void 0)],gu.prototype,"focusDrillUp",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object,Object,Object]),Es("design:returntype",void 0)],gu.prototype,"setActiveNode",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object,Object]),Es("design:returntype",void 0)],gu.prototype,"setSelectedNode",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object,Object]),Es("design:returntype",void 0)],gu.prototype,"setExpandedNode",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[]),Es("design:returntype",void 0)],gu.prototype,"expandAll",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[]),Es("design:returntype",void 0)],gu.prototype,"collapseAll",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object,Object]),Es("design:returntype",void 0)],gu.prototype,"setIsHidden",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object]),Es("design:returntype",void 0)],gu.prototype,"setHiddenNodeIds",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object,Object]),Es("design:returntype",void 0)],gu.prototype,"filterNodes",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[]),Es("design:returntype",void 0)],gu.prototype,"clearFilter",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object,Object]),Es("design:returntype",void 0)],gu.prototype,"moveNode",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object,Object]),Es("design:returntype",void 0)],gu.prototype,"copyNode",null),Iu([ie,Es("design:type",Function),Es("design:paramtypes",[Object]),Es("design:returntype",void 0)],gu.prototype,"setState",null);let km=(()=>{class L{constructor(){this._draggedElement=null}set(j){this._draggedElement=j}get(){return this._draggedElement}isDragging(){return!!this.get()}}return L.\u0275fac=function(j){return new(j||L)},L.\u0275prov=(0,r.Yz7)({factory:function(){return new L},token:L,providedIn:"root"}),L})();var k_=function(L,q,j,Ae){var ur,St=arguments.length,Kt=St<3?q:null===Ae?Ae=Object.getOwnPropertyDescriptor(q,j):Ae;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Kt=Reflect.decorate(L,q,j,Ae);else for(var Br=L.length-1;Br>=0;Br--)(ur=L[Br])&&(Kt=(St<3?ur(Kt):St>3?ur(q,j,Kt):ur(q,j))||Kt);return St>3&&Kt&&Object.defineProperty(q,j,Kt),Kt},Pd=function(L,q){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(L,q)};let Fp=(()=>{class L{constructor(j){this.treeModel=j,this.yBlocks=0,this.x=0,this.viewportHeight=null,this.viewport=null,j.virtualScroll=this,this._dispose=[vi(()=>this.fixScroll())]}get y(){return 150*this.yBlocks}get totalHeight(){return this.treeModel.virtualRoot?this.treeModel.virtualRoot.height:0}fireEvent(j){this.treeModel.fireEvent(j)}init(){const j=this.recalcPositions.bind(this);j(),this._dispose=[...this._dispose,ws(()=>this.treeModel.roots,j),ws(()=>this.treeModel.expandedNodeIds,j),ws(()=>this.treeModel.hiddenNodeIds,j)],this.treeModel.subscribe(nd.loadNodeChildren,j)}isEnabled(){return this.treeModel.options.useVirtualScroll}_setYBlocks(j){this.yBlocks=j}recalcPositions(){this.treeModel.virtualRoot.height=this._getPositionAfter(this.treeModel.getVisibleRoots(),0)}_getPositionAfter(j,Ae){let St=Ae;return j.forEach(Kt=>{Kt.position=St,St=this._getPositionAfterNode(Kt,St)}),St}_getPositionAfterNode(j,Ae){let St=j.getSelfHeight()+Ae;return j.children&&j.isExpanded&&(St=this._getPositionAfter(j.visibleChildren,St)),j.height=St-Ae,St}clear(){this._dispose.forEach(j=>j())}setViewport(j){Object.assign(this,{viewport:j,x:j.scrollLeft,yBlocks:Math.round(j.scrollTop/150),viewportHeight:j.getBoundingClientRect?j.getBoundingClientRect().height:0})}scrollIntoView(j,Ae,St=!0){if(j.options.scrollContainer){const Kt=j.options.scrollContainer,ur=Kt.getBoundingClientRect().height,Br=Kt.getBoundingClientRect().top,Ii=this.viewport.getBoundingClientRect().top+j.position-Br;(Ae||Ii<Kt.scrollTop||Ii+j.getSelfHeight()>Kt.scrollTop+ur)&&(Kt.scrollTop=St?Ii-ur/2:Ii)}else(Ae||j.position<this.y||j.position+j.getSelfHeight()>this.y+this.viewportHeight)&&this.viewport&&(this.viewport.scrollTop=St?j.position-this.viewportHeight/2:j.position,this._setYBlocks(Math.floor(this.viewport.scrollTop/150)))}getViewportNodes(j){if(!j)return[];const Ae=j.filter(ms=>!ms.isHidden);if(!this.isEnabled())return Ae;if(!this.viewportHeight||!Ae.length)return[];const St=Lg(Ae,ms=>ms.position+500>this.y||ms.position+ms.height>this.y),Kt=Lg(Ae,ms=>ms.position-500>this.y+this.viewportHeight,St),ur=[];if(Kt-St>(1e3+this.viewportHeight)/Ae[0].treeModel.options.options.nodeHeight)return[];for(let ms=St;ms<=Kt;ms++)ur.push(Ae[ms]);return ur}fixScroll(){const j=Math.max(0,this.totalHeight-this.viewportHeight);this.y<0&&this._setYBlocks(0),this.y>j&&this._setYBlocks(j/150)}}return L.\u0275fac=function(j){return new(j||L)(r.LFG(gu))},L.\u0275prov=r.Yz7({token:L,factory:L.\u0275fac}),L})();function Lg(L,q,j=0){let Ae=j,St=L.length-1;for(;Ae!==St;){let Kt=Math.floor((Ae+St)/2);q(L[Kt])?St=Kt:Ae=Ae===Kt?St:Kt}return Ae}k_([jt,Pd("design:type",Object)],Fp.prototype,"yBlocks",void 0),k_([jt,Pd("design:type",Object)],Fp.prototype,"x",void 0),k_([jt,Pd("design:type",Object)],Fp.prototype,"viewportHeight",void 0),k_([ze,Pd("design:type",Object),Pd("design:paramtypes",[])],Fp.prototype,"y",null),k_([ze,Pd("design:type",Object),Pd("design:paramtypes",[])],Fp.prototype,"totalHeight",null),k_([ie,Pd("design:type",Function),Pd("design:paramtypes",[Object]),Pd("design:returntype",void 0)],Fp.prototype,"_setYBlocks",null),k_([ie,Pd("design:type",Function),Pd("design:paramtypes",[]),Pd("design:returntype",void 0)],Fp.prototype,"recalcPositions",null),k_([ie,Pd("design:type",Function),Pd("design:paramtypes",[Object]),Pd("design:returntype",void 0)],Fp.prototype,"setViewport",null),k_([ie,Pd("design:type",Function),Pd("design:paramtypes",[Object,Object,Object]),Pd("design:returntype",void 0)],Fp.prototype,"scrollIntoView",null);let S1=(()=>{class L{}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["tree-loading-component"]],inputs:{template:"template",node:"node"},decls:2,vars:5,consts:[[4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(j,Ae){1&j&&(r.YNc(0,I,2,0,"span",0),r.GkF(1,1)),2&j&&(r.Q6J("ngIf",!Ae.template),r.xp6(1),r.Q6J("ngTemplateOutlet",Ae.template)("ngTemplateOutletContext",r.VKq(3,re,Ae.node)))},dependencies:[a.O5,a.tP],encapsulation:2}),L})(),Hm=(()=>{class L{constructor(j,Ae,St){this.elementRef=j,this.ngZone=Ae,this.virtualScroll=St,this.setViewport=em(()=>{this.virtualScroll.setViewport(this.elementRef.nativeElement)},17),this.scrollEventHandler=this.setViewport.bind(this)}ngOnInit(){this.virtualScroll.init()}ngAfterViewInit(){setTimeout(()=>{this.setViewport(),this.virtualScroll.fireEvent({eventName:nd.initialized})});let j=this.elementRef.nativeElement;this.ngZone.runOutsideAngular(()=>{j.addEventListener("scroll",this.scrollEventHandler)})}ngOnDestroy(){this.virtualScroll.clear(),this.elementRef.nativeElement.removeEventListener("scroll",this.scrollEventHandler)}getTotalHeight(){return this.virtualScroll.isEnabled()&&this.virtualScroll.totalHeight+"px"||"auto"}}return L.\u0275fac=function(j){return new(j||L)(r.Y36(r.SBq),r.Y36(r.R0b),r.Y36(Fp))},L.\u0275cmp=r.Xpm({type:L,selectors:[["tree-viewport"]],features:[r._Bn([Fp])],ngContentSelectors:Oe,decls:1,vars:2,consts:[[4,"treeMobxAutorun"]],template:function(j,Ae){1&j&&(r.F$t(),r.YNc(0,S,3,2,"ng-container",0)),2&j&&r.Q6J("treeMobxAutorun",r.DdM(1,z))},dependencies:[si],encapsulation:2}),L})(),b1=(()=>{class L{constructor(j,Ae){this.treeModel=j,this.treeDraggedElement=Ae,j.eventNames.forEach(St=>this[St]=new r.vpe),j.subscribeToState(St=>this.stateChange.emit(St))}set nodes(j){}set options(j){}set focused(j){this.treeModel.setFocus(j)}set state(j){this.treeModel.setState(j)}onKeydown(j){if(!this.treeModel.isFocused||ym(["input","textarea"],document.activeElement.tagName.toLowerCase()))return;const Ae=this.treeModel.getFocusedNode();this.treeModel.performKeyAction(Ae,j)}onMousedown(j){(function Ae(St,Kt){return!St||St.localName!==Kt&&Ae(St.parentElement,Kt)})(j.target,"tree-root")&&this.treeModel.setFocus(!1)}ngOnChanges(j){(j.options||j.nodes)&&this.treeModel.setData({options:j.options&&j.options.currentValue,nodes:j.nodes&&j.nodes.currentValue,events:L_(this,this.treeModel.eventNames)})}sizeChanged(){this.viewportComponent.setViewport()}}return L.\u0275fac=function(j){return new(j||L)(r.Y36(gu),r.Y36(km))},L.\u0275cmp=r.Xpm({type:L,selectors:[["Tree"],["tree-root"]],contentQueries:function(j,Ae,St){if(1&j&&(r.Suo(St,ut,5),r.Suo(St,On,5),r.Suo(St,Ar,5),r.Suo(St,ri,5)),2&j){let Kt;r.iGM(Kt=r.CRH())&&(Ae.loadingTemplate=Kt.first),r.iGM(Kt=r.CRH())&&(Ae.treeNodeTemplate=Kt.first),r.iGM(Kt=r.CRH())&&(Ae.treeNodeWrapperTemplate=Kt.first),r.iGM(Kt=r.CRH())&&(Ae.treeNodeFullTemplate=Kt.first)}},viewQuery:function(j,Ae){if(1&j&&r.Gf(Di,5),2&j){let St;r.iGM(St=r.CRH())&&(Ae.viewportComponent=St.first)}},hostBindings:function(j,Ae){1&j&&r.NdJ("keydown",function(Kt){return Ae.onKeydown(Kt)},!1,r.pYS)("mousedown",function(Kt){return Ae.onMousedown(Kt)},!1,r.pYS)},inputs:{nodes:"nodes",options:"options",focused:"focused",state:"state"},outputs:{toggleExpanded:"toggleExpanded",activate:"activate",deactivate:"deactivate",nodeActivate:"nodeActivate",nodeDeactivate:"nodeDeactivate",select:"select",deselect:"deselect",focus:"focus",blur:"blur",updateData:"updateData",initialized:"initialized",moveNode:"moveNode",copyNode:"copyNode",loadNodeChildren:"loadNodeChildren",changeFilter:"changeFilter",event:"event",stateChange:"stateChange"},features:[r._Bn([gu]),r.TTD],decls:5,vars:6,consts:[["viewport",""],[1,"angular-tree-component"],[3,"nodes","treeModel","templates",4,"ngIf"],["class","empty-tree-drop-slot",3,"dropIndex","node",4,"ngIf"],[3,"nodes","treeModel","templates"],[1,"empty-tree-drop-slot",3,"dropIndex","node"]],template:function(j,Ae){1&j&&(r.TgZ(0,"tree-viewport",null,0)(2,"div",1),r.YNc(3,cs,1,8,"tree-node-collection",2),r.YNc(4,Yo,1,2,"tree-node-drop-slot",3),r.qZA()()),2&j&&(r.xp6(2),r.ekj("node-dragging",Ae.treeDraggedElement.isDragging())("angular-tree-component-rtl",Ae.treeModel.options.rtl),r.xp6(1),r.Q6J("ngIf",Ae.treeModel.roots),r.xp6(1),r.Q6J("ngIf",Ae.treeModel.isEmptyTree()))},dependencies:function(){return[a.O5,Em,lm,Hm]},encapsulation:2}),L})(),mg=(()=>{class L{}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["TreeNode"],["tree-node"]],inputs:{node:"node",index:"index",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"class","tree-node","tree-node-expanded","tree-node-collapsed","tree-node-leaf","tree-node-active","tree-node-focused",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"dropIndex","node",4,"ngIf"],[3,"node","index","templates"],[3,"node","templates"],[3,"dropIndex","node"]],template:function(j,Ae){1&j&&r.YNc(0,be,3,8,"ng-container",0),2&j&&r.Q6J("treeMobxAutorun",r.DdM(1,z))},dependencies:function(){return[a.O5,a.tP,Il,Em,yg,si]},encapsulation:2}),L})(),kg=(()=>{class L{}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["tree-node-content"]],inputs:{node:"node",index:"index",template:"template"},decls:2,vars:7,consts:[[4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(j,Ae){1&j&&(r.YNc(0,Ke,2,1,"span",0),r.GkF(1,1)),2&j&&(r.Q6J("ngIf",!Ae.template),r.xp6(1),r.Q6J("ngTemplateOutlet",Ae.template)("ngTemplateOutletContext",r.kEZ(3,xt,Ae.node,Ae.node,Ae.index)))},dependencies:[a.O5,a.tP],encapsulation:2}),L})(),Em=(()=>{class L{onDrop(j){this.node.mouseAction("drop",j.event,{from:j.element,to:{parent:this.node,index:this.dropIndex}})}allowDrop(j,Ae){return this.node.options.allowDrop(j,{parent:this.node,index:this.dropIndex},Ae)}}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["TreeNodeDropSlot"],["tree-node-drop-slot"]],inputs:{node:"node",dropIndex:"dropIndex"},decls:1,vars:2,consts:[[1,"node-drop-slot",3,"treeAllowDrop","allowDragoverStyling","treeDrop"]],template:function(j,Ae){1&j&&(r.TgZ(0,"div",0),r.NdJ("treeDrop",function(Kt){return Ae.onDrop(Kt)}),r.qZA()),2&j&&r.Q6J("treeAllowDrop",Ae.allowDrop.bind(Ae))("allowDragoverStyling",!0)},dependencies:function(){return[_h]},encapsulation:2}),L})(),$g=(()=>{class L{}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["tree-node-expander"]],inputs:{node:"node"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],["class","toggle-children-wrapper",3,"toggle-children-wrapper-expanded","toggle-children-wrapper-collapsed","click",4,"ngIf"],["class","toggle-children-placeholder",4,"ngIf"],[1,"toggle-children-wrapper",3,"click"],[1,"toggle-children"],[1,"toggle-children-placeholder"]],template:function(j,Ae){1&j&&r.YNc(0,vr,3,2,"ng-container",0),2&j&&r.Q6J("treeMobxAutorun",r.DdM(1,z))},dependencies:[a.O5,si],encapsulation:2}),L})(),Il=(()=>{class L{}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["tree-node-children"]],inputs:{node:"node",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"tree-children","tree-children-no-padding",4,"treeAnimateOpen","treeAnimateOpenSpeed","treeAnimateOpenAcceleration","treeAnimateOpenEnabled"],[3,"nodes","templates","treeModel",4,"ngIf"],["class","tree-node-loading",3,"padding-left","template","node",4,"ngIf"],[3,"nodes","templates","treeModel"],[1,"tree-node-loading",3,"template","node"]],template:function(j,Ae){1&j&&r.YNc(0,Qi,2,4,"ng-container",0),2&j&&r.Q6J("treeMobxAutorun",r.DdM(1,z))},dependencies:function(){return[a.O5,S1,lm,O1,si]},encapsulation:2}),L})();const vg=Object.assign(function gg(...L){return ie(...L)},ie),T1=Object.assign(function Hg(...L){return ze(...L)},ze),am=Object.assign(function C1(...L){return jt(...L)},jt);var $h=function(L,q,j,Ae){var ur,St=arguments.length,Kt=St<3?q:null===Ae?Ae=Object.getOwnPropertyDescriptor(q,j):Ae;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Kt=Reflect.decorate(L,q,j,Ae);else for(var Br=L.length-1;Br>=0;Br--)(ur=L[Br])&&(Kt=(St<3?ur(Kt):St>3?ur(q,j,Kt):ur(q,j))||Kt);return St>3&&Kt&&Object.defineProperty(q,j,Kt),Kt},ph=function(L,q){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(L,q)};let lm=(()=>{class L{constructor(){this._dispose=[]}get nodes(){return this._nodes}set nodes(j){this.setNodes(j)}get marginTop(){const j=this.viewportNodes&&this.viewportNodes.length&&this.viewportNodes[0];return(j&&j.parent?j.position-j.parent.position-j.parent.getSelfHeight():0)+"px"}setNodes(j){this._nodes=j}ngOnInit(){this.virtualScroll=this.treeModel.virtualScroll,this._dispose=[ws(()=>this.virtualScroll.getViewportNodes(this.nodes).map(j=>j.index),j=>{this.viewportNodes=j.map(Ae=>this.nodes[Ae])},{compareStructural:!0,fireImmediately:!0}),ws(()=>this.nodes,j=>{this.viewportNodes=this.virtualScroll.getViewportNodes(j)})]}ngOnDestroy(){this._dispose.forEach(j=>j())}trackNode(j,Ae){return Ae.id}}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["tree-node-collection"]],inputs:{nodes:"nodes",treeModel:"treeModel",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"node","index","templates",4,"ngFor","ngForOf","ngForTrackBy"],[3,"node","index","templates"]],template:function(j,Ae){1&j&&r.YNc(0,ia,3,4,"ng-container",0),2&j&&r.Q6J("treeMobxAutorun",r.DdM(1,z))},dependencies:[a.sg,mg,si],encapsulation:2}),L})();$h([am,ph("design:type",Object)],lm.prototype,"_nodes",void 0),$h([am,ph("design:type",Array)],lm.prototype,"viewportNodes",void 0),$h([T1,ph("design:type",String),ph("design:paramtypes",[])],lm.prototype,"marginTop",null),$h([vg,ph("design:type",Function),ph("design:paramtypes",[Object]),ph("design:returntype",void 0)],lm.prototype,"setNodes",null);let yg=(()=>{class L{constructor(){}}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["tree-node-wrapper"]],inputs:{node:"node",index:"index",templates:"templates"},decls:2,vars:8,consts:[["class","node-wrapper",3,"padding-left",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"node-wrapper"],[3,"node",4,"ngIf"],[3,"node"],[1,"node-content-wrapper",3,"treeAllowDrop","allowDragoverStyling","treeDrag","treeDragEnabled","click","dblclick","mouseover","mouseout","contextmenu","treeDrop","treeDropDragOver","treeDropDragLeave","treeDropDragEnter"],[3,"node","index","template"]],template:function(j,Ae){1&j&&(r.YNc(0,di,5,15,"div",0),r.GkF(1,1)),2&j&&(r.Q6J("ngIf",!Ae.templates.treeNodeWrapperTemplate),r.xp6(1),r.Q6J("ngTemplateOutlet",Ae.templates.treeNodeWrapperTemplate)("ngTemplateOutletContext",r.l5B(3,Y,Ae.node,Ae.node,Ae.index,Ae.templates)))},dependencies:function(){return[a.O5,a.tP,kg,_h,bg,$g,M1]},encapsulation:2}),L})(),M1=(()=>{class L{}return L.\u0275fac=function(j){return new(j||L)},L.\u0275cmp=r.Xpm({type:L,selectors:[["tree-node-checkbox"]],inputs:{node:"node"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],["type","checkbox",1,"tree-node-checkbox",3,"checked","indeterminate","click"]],template:function(j,Ae){1&j&&r.YNc(0,Wr,2,2,"ng-container",0),2&j&&r.Q6J("treeMobxAutorun",r.DdM(1,z))},dependencies:[si],encapsulation:2}),L})();const Eg="is-dragging-over",Sg="is-dragging-over-disabled";let _h=(()=>{class L{constructor(j,Ae,St,Kt){this.el=j,this.renderer=Ae,this.treeDraggedElement=St,this.ngZone=Kt,this.allowDragoverStyling=!0,this.onDropCallback=new r.vpe,this.onDragOverCallback=new r.vpe,this.onDragLeaveCallback=new r.vpe,this.onDragEnterCallback=new r.vpe,this._allowDrop=(ur,Br)=>!0,this.dragOverEventHandler=this.onDragOver.bind(this),this.dragEnterEventHandler=this.onDragEnter.bind(this),this.dragLeaveEventHandler=this.onDragLeave.bind(this)}set treeAllowDrop(j){this._allowDrop=j instanceof Function?j:(Ae,St)=>j}allowDrop(j){return this._allowDrop(this.treeDraggedElement.get(),j)}ngAfterViewInit(){let j=this.el.nativeElement;this.ngZone.runOutsideAngular(()=>{j.addEventListener("dragover",this.dragOverEventHandler),j.addEventListener("dragenter",this.dragEnterEventHandler),j.addEventListener("dragleave",this.dragLeaveEventHandler)})}ngOnDestroy(){let j=this.el.nativeElement;j.removeEventListener("dragover",this.dragOverEventHandler),j.removeEventListener("dragenter",this.dragEnterEventHandler),j.removeEventListener("dragleave",this.dragLeaveEventHandler)}onDragOver(j){if(!this.allowDrop(j))return this.allowDragoverStyling?this.addDisabledClass():void 0;this.onDragOverCallback.emit({event:j,element:this.treeDraggedElement.get()}),j.preventDefault(),this.allowDragoverStyling&&this.addClass()}onDragEnter(j){this.allowDrop(j)&&(j.preventDefault(),this.onDragEnterCallback.emit({event:j,element:this.treeDraggedElement.get()}))}onDragLeave(j){if(!this.allowDrop(j))return this.allowDragoverStyling?this.removeDisabledClass():void 0;this.onDragLeaveCallback.emit({event:j,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass()}onDrop(j){this.allowDrop(j)&&(j.preventDefault(),this.onDropCallback.emit({event:j,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass(),this.treeDraggedElement.set(null))}addClass(){this.renderer.addClass(this.el.nativeElement,Eg)}removeClass(){this.renderer.removeClass(this.el.nativeElement,Eg)}addDisabledClass(){this.renderer.addClass(this.el.nativeElement,Sg)}removeDisabledClass(){this.renderer.removeClass(this.el.nativeElement,Sg)}}return L.\u0275fac=function(j){return new(j||L)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(km),r.Y36(r.R0b))},L.\u0275dir=r.lG2({type:L,selectors:[["","treeDrop",""]],hostBindings:function(j,Ae){1&j&&r.NdJ("drop",function(Kt){return Ae.onDrop(Kt)})},inputs:{allowDragoverStyling:"allowDragoverStyling",treeAllowDrop:"treeAllowDrop"},outputs:{onDropCallback:"treeDrop",onDragOverCallback:"treeDropDragOver",onDragLeaveCallback:"treeDropDragLeave",onDragEnterCallback:"treeDropDragEnter"}}),L})(),bg=(()=>{class L{constructor(j,Ae,St,Kt){this.el=j,this.renderer=Ae,this.treeDraggedElement=St,this.ngZone=Kt,this.dragEventHandler=this.onDrag.bind(this)}ngAfterViewInit(){let j=this.el.nativeElement;this.ngZone.runOutsideAngular(()=>{j.addEventListener("drag",this.dragEventHandler)})}ngDoCheck(){this.renderer.setAttribute(this.el.nativeElement,"draggable",this.treeDragEnabled?"true":"false")}ngOnDestroy(){this.el.nativeElement.removeEventListener("drag",this.dragEventHandler)}onDragStart(j){j.dataTransfer.setData("text",j.target.id),this.treeDraggedElement.set(this.draggedElement),this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragStart",j)}onDrag(j){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("drag",j)}onDragEnd(){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragEnd"),this.treeDraggedElement.set(null)}}return L.\u0275fac=function(j){return new(j||L)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(km),r.Y36(r.R0b))},L.\u0275dir=r.lG2({type:L,selectors:[["","treeDrag",""]],hostBindings:function(j,Ae){1&j&&r.NdJ("dragstart",function(Kt){return Ae.onDragStart(Kt)})("dragend",function(){return Ae.onDragEnd()})},inputs:{draggedElement:["treeDrag","draggedElement"],treeDragEnabled:"treeDragEnabled"}}),L})(),O1=(()=>{class L{constructor(j,Ae,St){this.renderer=j,this.templateRef=Ae,this.viewContainerRef=St}set isOpen(j){j?(this._show(),this.isEnabled&&!1===this._isOpen&&this._animateOpen()):this.isEnabled?this._animateClose():this._hide(),this._isOpen=!!j}_show(){this.innerElement||(this.innerElement=this.viewContainerRef.createEmbeddedView(this.templateRef).rootNodes[0])}_hide(){this.viewContainerRef.clear(),this.innerElement=null}_animateOpen(){let j=this.animateSpeed,Ae=this.animateAcceleration,St=0;this.renderer.setStyle(this.innerElement,"max-height","0"),setTimeout(()=>{const Kt=setInterval(()=>{if(!this._isOpen||!this.innerElement)return clearInterval(Kt);St+=j;const ur=Math.round(St);this.renderer.setStyle(this.innerElement,"max-height",`${ur}px`);const Br=this.innerElement.getBoundingClientRect?this.innerElement.getBoundingClientRect().height:0;j*=Ae,Ae*=1.005,Br<ur&&(this.renderer.setStyle(this.innerElement,"max-height",null),clearInterval(Kt))},17)})}_animateClose(){if(!this.innerElement)return;let j=this.animateSpeed,Ae=this.animateAcceleration,St=this.innerElement.getBoundingClientRect().height;const Kt=setInterval(()=>{if(this._isOpen||!this.innerElement)return clearInterval(Kt);St-=j,this.renderer.setStyle(this.innerElement,"max-height",`${St}px`),j*=Ae,Ae*=1.005,St<=0&&(this.viewContainerRef.clear(),this.innerElement=null,clearInterval(Kt))},17)}}return L.\u0275fac=function(j){return new(j||L)(r.Y36(r.Qsj),r.Y36(r.Rgc),r.Y36(r.s_b))},L.\u0275dir=r.lG2({type:L,selectors:[["","treeAnimateOpen",""]],inputs:{isOpen:["treeAnimateOpen","isOpen"],animateSpeed:["treeAnimateOpenSpeed","animateSpeed"],animateAcceleration:["treeAnimateOpenAcceleration","animateAcceleration"],isEnabled:["treeAnimateOpenEnabled","isEnabled"]}}),L})(),Av=(()=>{class L{}return L.\u0275fac=function(j){return new(j||L)},L.\u0275mod=r.oAB({type:L}),L.\u0275inj=r.cJS({imports:[a.ez]}),L})()},84051:(E,C,s)=>{"use strict";s.d(C,{$7:()=>wr,AR:()=>mn,Hg:()=>jt,Sr:()=>Ro,dX:()=>Ti,ii:()=>ii,nE:()=>da,vq:()=>dn,xD:()=>Fo});var r=s(64537),a=s(88692),c=s(79765),u=s(22759),e=s(26215),f=s(46782),m=s(64762);const T=["*"];function M(gt,Tn){1&gt&&r._UZ(0,"datatable-progress")}function w(gt,Tn){if(1&gt&&r._UZ(0,"datatable-summary-row",9),2&gt){const ie=r.oxw(2);r.Q6J("rowHeight",ie.summaryHeight)("offsetX",ie.offsetX)("innerWidth",ie.innerWidth)("rows",ie.rows)("columns",ie.columns)}}function D(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-body-row",13),r.NdJ("treeAction",function(){r.CHM(ie);const Jt=r.oxw().$implicit,gn=r.oxw(2);return r.KtG(gn.onTreeAction(Jt))})("activate",function(Jt){r.CHM(ie);const gn=r.oxw().index,vi=r.oxw(2),Bi=r.MAs(2);return r.KtG(Bi.onActivate(Jt,vi.indexes.first+gn))}),r.qZA()}if(2&gt){const ie=r.oxw().$implicit,Ze=r.oxw(2),Jt=r.MAs(2);r.Q6J("isSelected",Jt.getRowSelected(ie))("innerWidth",Ze.innerWidth)("offsetX",Ze.offsetX)("columns",Ze.columns)("rowHeight",Ze.getRowHeight(ie))("row",ie)("rowIndex",Ze.getRowIndex(ie))("expanded",Ze.getRowExpanded(ie))("rowClass",Ze.rowClass)("displayCheck",Ze.displayCheck)("treeStatus",ie&&ie.treeStatus)}}function U(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-body-row",15),r.NdJ("activate",function(Jt){const vi=r.CHM(ie).index;r.oxw(4);const Bi=r.MAs(2);return r.KtG(Bi.onActivate(Jt,vi))}),r.qZA()}if(2&gt){const ie=Tn.$implicit,Ze=r.oxw(2).$implicit,Jt=r.oxw(2),gn=r.MAs(2);r.Q6J("isSelected",gn.getRowSelected(ie))("innerWidth",Jt.innerWidth)("offsetX",Jt.offsetX)("columns",Jt.columns)("rowHeight",Jt.getRowHeight(ie))("row",ie)("group",Ze.value)("rowIndex",Jt.getRowIndex(ie))("expanded",Jt.getRowExpanded(ie))("rowClass",Jt.rowClass)}}function W(gt,Tn){if(1&gt&&r.YNc(0,U,1,10,"datatable-body-row",14),2&gt){const ie=r.oxw().$implicit,Ze=r.oxw(2);r.Q6J("ngForOf",ie.value)("ngForTrackBy",Ze.rowTrackingFn)}}function $(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-row-wrapper",10),r.NdJ("rowContextmenu",function(Jt){r.CHM(ie);const gn=r.oxw(2);return r.KtG(gn.rowContextmenu.emit(Jt))}),r.YNc(1,D,1,11,"datatable-body-row",11),r.YNc(2,W,1,2,"ng-template",null,12,r.W1O),r.qZA()}if(2&gt){const ie=Tn.$implicit,Ze=Tn.index,Jt=r.MAs(3),gn=r.oxw(2);r.Q6J("groupedRows",gn.groupedRows)("innerWidth",gn.innerWidth)("ngStyle",gn.getRowsStyles(ie))("rowDetail",gn.rowDetail)("groupHeader",gn.groupHeader)("offsetX",gn.offsetX)("detailRowHeight",gn.getDetailRowHeight(ie&&ie[Ze],Ze))("row",ie)("expanded",gn.getRowExpanded(ie))("rowIndex",gn.getRowIndex(ie&&ie[Ze])),r.xp6(1),r.Q6J("ngIf",!gn.groupedRows)("ngIfElse",Jt)}}function J(gt,Tn){if(1&gt&&r._UZ(0,"datatable-summary-row",16),2&gt){const ie=r.oxw(2);r.Q6J("ngStyle",ie.getBottomSummaryRowStyles())("rowHeight",ie.summaryHeight)("offsetX",ie.offsetX)("innerWidth",ie.innerWidth)("rows",ie.rows)("columns",ie.columns)}}function F(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-scroller",5),r.NdJ("scroll",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.onBodyScroll(Jt))}),r.YNc(1,w,1,5,"datatable-summary-row",6),r.YNc(2,$,4,12,"datatable-row-wrapper",7),r.YNc(3,J,1,6,"datatable-summary-row",8),r.qZA()}if(2&gt){const ie=r.oxw();r.Q6J("scrollbarV",ie.scrollbarV)("scrollbarH",ie.scrollbarH)("scrollHeight",ie.scrollHeight)("scrollWidth",null==ie.columnGroupWidths?null:ie.columnGroupWidths.total),r.xp6(1),r.Q6J("ngIf",ie.summaryRow&&"top"===ie.summaryPosition),r.xp6(1),r.Q6J("ngForOf",ie.temp)("ngForTrackBy",ie.rowTrackingFn),r.xp6(1),r.Q6J("ngIf",ie.summaryRow&&"bottom"===ie.summaryPosition)}}function X(gt,Tn){if(1&gt&&r._UZ(0,"div",17),2&gt){const ie=r.oxw();r.Q6J("innerHTML",ie.emptyMessage,r.oJD)}}function de(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-header-cell",4),r.NdJ("resize",function(Jt){const vi=r.CHM(ie).$implicit,Bi=r.oxw(2);return r.KtG(Bi.onColumnResized(Jt,vi))})("longPressStart",function(Jt){r.CHM(ie);const gn=r.oxw(2);return r.KtG(gn.onLongPressStart(Jt))})("longPressEnd",function(Jt){r.CHM(ie);const gn=r.oxw(2);return r.KtG(gn.onLongPressEnd(Jt))})("sort",function(Jt){r.CHM(ie);const gn=r.oxw(2);return r.KtG(gn.onSort(Jt))})("select",function(Jt){r.CHM(ie);const gn=r.oxw(2);return r.KtG(gn.select.emit(Jt))})("columnContextmenu",function(Jt){r.CHM(ie);const gn=r.oxw(2);return r.KtG(gn.columnContextmenu.emit(Jt))}),r.qZA()}if(2&gt){const ie=Tn.$implicit,Ze=r.oxw(2);r.Q6J("resizeEnabled",ie.resizeable)("pressModel",ie)("pressEnabled",Ze.reorderable&&ie.draggable)("dragX",Ze.reorderable&&ie.draggable&&ie.dragging)("dragY",!1)("dragModel",ie)("dragEventTarget",Ze.dragEventTarget)("headerHeight",Ze.headerHeight)("isTarget",ie.isTarget)("targetMarkerTemplate",Ze.targetMarkerTemplate)("targetMarkerContext",ie.targetMarkerContext)("column",ie)("sortType",Ze.sortType)("sorts",Ze.sorts)("selectionType",Ze.selectionType)("sortAscendingIcon",Ze.sortAscendingIcon)("sortDescendingIcon",Ze.sortDescendingIcon)("sortUnsetIcon",Ze.sortUnsetIcon)("allRowsSelected",Ze.allRowsSelected)}}function V(gt,Tn){if(1&gt&&(r.TgZ(0,"div",2),r.YNc(1,de,1,19,"datatable-header-cell",3),r.qZA()),2&gt){const ie=Tn.$implicit,Ze=r.oxw();r.Tol("datatable-row-"+ie.type),r.Q6J("ngStyle",Ze._styleByGroup[ie.type]),r.xp6(1),r.Q6J("ngForOf",ie.columns)("ngForTrackBy",Ze.columnTrackingFn)}}function ce(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-header",4),r.NdJ("sort",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.onColumnSort(Jt))})("resize",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.onColumnResize(Jt))})("reorder",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.onColumnReorder(Jt))})("select",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.onHeaderSelect(Jt))})("columnContextmenu",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.onColumnContextmenu(Jt))}),r.ALo(1,"async"),r.qZA()}if(2&gt){const ie=r.oxw();r.Q6J("sorts",ie.sorts)("sortType",ie.sortType)("scrollbarH",ie.scrollbarH)("innerWidth",ie._innerWidth)("offsetX",r.lcZ(1,15,ie._offsetX))("dealsWithGroup",void 0!==ie.groupedRows)("columns",ie._internalColumns)("headerHeight",ie.headerHeight)("reorderable",ie.reorderable)("targetMarkerTemplate",ie.targetMarkerTemplate)("sortAscendingIcon",ie.cssClasses.sortAscending)("sortDescendingIcon",ie.cssClasses.sortDescending)("sortUnsetIcon",ie.cssClasses.sortUnset)("allRowsSelected",ie.allRowsSelected)("selectionType",ie.selectionType)}}function se(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-footer",5),r.NdJ("page",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.onFooterPage(Jt))}),r.qZA()}if(2&gt){const ie=r.oxw();r.Q6J("rowCount",ie.rowCount)("pageSize",ie.pageSize)("offset",ie.offset)("footerHeight",ie.footerHeight)("footerTemplate",ie.footer)("totalMessage",ie.messages.totalMessage)("pagerLeftArrowIcon",ie.cssClasses.pagerLeftArrow)("pagerRightArrowIcon",ie.cssClasses.pagerRightArrow)("pagerPreviousIcon",ie.cssClasses.pagerPrevious)("selectedCount",ie.selected.length)("selectedMessage",!!ie.selectionType&&ie.messages.selectedMessage)("pagerNextIcon",ie.cssClasses.pagerNext)}}function fe(gt,Tn){}function Te(gt,Tn){if(1&gt&&r.YNc(0,fe,0,0,"ng-template",5),2&gt){const ie=r.oxw();r.Q6J("ngTemplateOutlet",ie.targetMarkerTemplate)("ngTemplateOutletContext",ie.targetMarkerContext)}}function $e(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"label",6)(1,"input",7),r.NdJ("change",function(){r.CHM(ie);const Jt=r.oxw();return r.KtG(Jt.select.emit(!Jt.allRowsSelected))}),r.qZA()()}if(2&gt){const ie=r.oxw();r.xp6(1),r.Q6J("checked",ie.allRowsSelected)}}function ge(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"span",8)(1,"span",9),r.NdJ("click",function(){r.CHM(ie);const Jt=r.oxw();return r.KtG(Jt.onSort())}),r.qZA()()}if(2&gt){const ie=r.oxw();r.xp6(1),r.Q6J("innerHTML",ie.name,r.oJD)}}function Et(gt,Tn){}function ot(gt,Tn){if(1&gt&&r.YNc(0,Et,0,0,"ng-template",5),2&gt){const ie=r.oxw();r.Q6J("ngTemplateOutlet",ie.column.headerTemplate)("ngTemplateOutletContext",ie.cellContext)}}function ct(gt,Tn){}const qe=function(gt,Tn,ie,Ze,Jt){return{rowCount:gt,pageSize:Tn,selectedCount:ie,curPage:Ze,offset:Jt}};function He(gt,Tn){if(1&gt&&r.YNc(0,ct,0,0,"ng-template",4),2&gt){const ie=r.oxw();r.Q6J("ngTemplateOutlet",ie.footerTemplate.template)("ngTemplateOutletContext",r.qbA(2,qe,ie.rowCount,ie.pageSize,ie.selectedCount,ie.curPage,ie.offset))}}function We(gt,Tn){if(1&gt&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&gt){const ie=r.oxw(2);r.xp6(1),r.AsE(" ",null==ie.selectedCount?null:ie.selectedCount.toLocaleString()," ",ie.selectedMessage," / ")}}function Le(gt,Tn){if(1&gt&&(r.TgZ(0,"div",5),r.YNc(1,We,2,2,"span",1),r._uU(2),r.qZA()),2&gt){const ie=r.oxw();r.xp6(1),r.Q6J("ngIf",ie.selectedMessage),r.xp6(1),r.AsE(" ",null==ie.rowCount?null:ie.rowCount.toLocaleString()," ",ie.totalMessage," ")}}function Pt(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-pager",6),r.NdJ("change",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.page.emit(Jt))}),r.qZA()}if(2&gt){const ie=r.oxw();r.Q6J("pagerLeftArrowIcon",ie.pagerLeftArrowIcon)("pagerRightArrowIcon",ie.pagerRightArrowIcon)("pagerPreviousIcon",ie.pagerPreviousIcon)("pagerNextIcon",ie.pagerNextIcon)("page",ie.curPage)("size",ie.pageSize)("count",ie.rowCount)("hidden",!ie.isVisible)}}const it=function(gt){return{"selected-count":gt}};function Xt(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"li",6)(1,"a",7),r.NdJ("click",function(){const gn=r.CHM(ie).$implicit,vi=r.oxw();return r.KtG(vi.selectPage(gn.number))}),r._uU(2),r.qZA()()}if(2&gt){const ie=Tn.$implicit,Ze=r.oxw();r.ekj("active",ie.number===Ze.page),r.uIk("aria-label","page "+ie.number),r.xp6(2),r.hij(" ",ie.text," ")}}function cn(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"datatable-body-cell",3),r.NdJ("activate",function(Jt){const vi=r.CHM(ie).index,Bi=r.oxw(2);return r.KtG(Bi.onActivate(Jt,vi))})("treeAction",function(){r.CHM(ie);const Jt=r.oxw(2);return r.KtG(Jt.onTreeAction())}),r.qZA()}if(2&gt){const ie=Tn.$implicit,Ze=r.oxw(2);r.Q6J("row",Ze.row)("group",Ze.group)("expanded",Ze.expanded)("isSelected",Ze.isSelected)("rowIndex",Ze.rowIndex)("column",ie)("rowHeight",Ze.rowHeight)("displayCheck",Ze.displayCheck)("treeStatus",Ze.treeStatus)}}function pn(gt,Tn){if(1&gt&&(r.TgZ(0,"div",1),r.YNc(1,cn,1,9,"datatable-body-cell",2),r.qZA()),2&gt){const ie=Tn.$implicit,Ze=r.oxw();r.Gre("datatable-row-",ie.type," datatable-row-group"),r.Q6J("ngStyle",Ze._groupStyles[ie.type]),r.xp6(1),r.Q6J("ngForOf",ie.columns)("ngForTrackBy",Ze.columnTrackingFn)}}function Rn(gt,Tn){}function At(gt,Tn){if(1&gt&&r.YNc(0,Rn,0,0,"ng-template",4),2&gt){const ie=r.oxw(2);r.Q6J("ngTemplateOutlet",ie.groupHeader.template)("ngTemplateOutletContext",ie.groupContext)}}function qt(gt,Tn){if(1&gt&&(r.TgZ(0,"div",3),r.YNc(1,At,1,2,null,1),r.qZA()),2&gt){const ie=r.oxw();r.Q6J("ngStyle",ie.getGroupHeaderStyle()),r.xp6(1),r.Q6J("ngIf",ie.groupHeader&&ie.groupHeader.template)}}function sn(gt,Tn){1&gt&&r.Hsn(0,0,["*ngIf","(groupHeader && groupHeader.template && expanded) || !groupHeader || !groupHeader.template"])}function fn(gt,Tn){}function xn(gt,Tn){if(1&gt&&r.YNc(0,fn,0,0,"ng-template",4),2&gt){const ie=r.oxw(2);r.Q6J("ngTemplateOutlet",ie.rowDetail.template)("ngTemplateOutletContext",ie.rowContext)}}function Kr(gt,Tn){if(1&gt&&(r.TgZ(0,"div",5),r.YNc(1,xn,1,2,null,1),r.qZA()),2&gt){const ie=r.oxw();r.Udp("height",ie.detailRowHeight,"px"),r.xp6(1),r.Q6J("ngIf",ie.rowDetail&&ie.rowDetail.template)}}const Or=["cellTemplate"];function Lr(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"label",4)(1,"input",5),r.NdJ("click",function(Jt){r.CHM(ie);const gn=r.oxw();return r.KtG(gn.onCheckboxChange(Jt))}),r.qZA()()}if(2&gt){const ie=r.oxw();r.xp6(1),r.Q6J("checked",ie.isSelected)}}function ir(gt,Tn){1&gt&&r._UZ(0,"i",11)}function Qr(gt,Tn){1&gt&&r._UZ(0,"i",12)}function jr(gt,Tn){1&gt&&r._UZ(0,"i",13)}function br(gt,Tn){if(1&gt){const ie=r.EpF();r.TgZ(0,"button",7),r.NdJ("click",function(){r.CHM(ie);const Jt=r.oxw(2);return r.KtG(Jt.onTreeAction())}),r.TgZ(1,"span"),r.YNc(2,ir,1,0,"i",8),r.YNc(3,Qr,1,0,"i",9),r.YNc(4,jr,1,0,"i",10),r.qZA()()}if(2&gt){const ie=r.oxw(2);r.Q6J("disabled","disabled"===ie.treeStatus),r.xp6(2),r.Q6J("ngIf","loading"===ie.treeStatus),r.xp6(1),r.Q6J("ngIf","collapsed"===ie.treeStatus),r.xp6(1),r.Q6J("ngIf","expanded"===ie.treeStatus||"disabled"===ie.treeStatus)}}function ht(gt,Tn){}const Wt=function(gt){return{cellContext:gt}};function Tt(gt,Tn){if(1&gt&&r.YNc(0,ht,0,0,"ng-template",14),2&gt){const ie=r.oxw(2);r.Q6J("ngTemplateOutlet",ie.column.treeToggleTemplate)("ngTemplateOutletContext",r.VKq(2,Wt,ie.cellContext))}}function wn(gt,Tn){if(1&gt&&(r.ynx(0),r.YNc(1,br,5,4,"button",6),r.YNc(2,Tt,1,4,null,2),r.BQk()),2&gt){const ie=r.oxw();r.xp6(1),r.Q6J("ngIf",!ie.column.treeToggleTemplate),r.xp6(1),r.Q6J("ngIf",ie.column.treeToggleTemplate)}}function jn(gt,Tn){if(1&gt&&r._UZ(0,"span",15),2&gt){const ie=r.oxw();r.Q6J("title",ie.sanitizedValue)("innerHTML",ie.value,r.oJD)}}function hr(gt,Tn){}function Oi(gt,Tn){if(1&gt&&r.YNc(0,hr,0,0,"ng-template",14,16,r.W1O),2&gt){const ie=r.oxw();r.Q6J("ngTemplateOutlet",ie.column.cellTemplate)("ngTemplateOutletContext",ie.cellContext)}}function Wi(gt,Tn){if(1&gt&&r._UZ(0,"datatable-body-row",1),2&gt){const ie=r.oxw();r.Q6J("innerWidth",ie.innerWidth)("offsetX",ie.offsetX)("columns",ie._internalColumns)("rowHeight",ie.rowHeight)("row",ie.summaryRow)("rowIndex",-1)}}let so=(()=>{class gt{constructor(ie){this.document=ie,this.width=this.getWidth()}getWidth(){const ie=this.document.createElement("div");ie.style.visibility="hidden",ie.style.width="100px",ie.style.msOverflowStyle="scrollbar",this.document.body.appendChild(ie);const Ze=ie.offsetWidth;ie.style.overflow="scroll";const Jt=this.document.createElement("div");Jt.style.width="100%",ie.appendChild(Jt);const gn=Jt.offsetWidth;return ie.parentNode.removeChild(ie),Ze-gn}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.LFG(a.K0))},gt.\u0275prov=r.Yz7({token:gt,factory:gt.\u0275fac}),gt})(),kr=(()=>{class gt{getDimensions(ie){return ie.getBoundingClientRect()}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275prov=r.Yz7({token:gt,factory:gt.\u0275fac}),gt})(),Ei=(()=>{class gt{constructor(){this.columnInputChanges=new c.xQ}get columnInputChanges$(){return this.columnInputChanges.asObservable()}onInputChange(){this.columnInputChanges.next()}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275prov=r.Yz7({token:gt,factory:gt.\u0275fac}),gt})(),ii=(()=>{class gt{constructor(ie){this.template=ie}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.Rgc))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","ngx-datatable-footer-template",""]]}),gt})(),mr=(()=>{class gt{constructor(ie,Ze){this.element=ie,this.zone=Ze,this.isVisible=!1,this.visible=new r.vpe}ngOnInit(){this.runCheck()}ngOnDestroy(){clearTimeout(this.timeout)}onVisibilityChange(){this.zone.run(()=>{this.isVisible=!0,this.visible.emit(!0)})}runCheck(){const ie=()=>{const{offsetHeight:Ze,offsetWidth:Jt}=this.element.nativeElement;Ze&&Jt?(clearTimeout(this.timeout),this.onVisibilityChange()):(clearTimeout(this.timeout),this.zone.runOutsideAngular(()=>{this.timeout=setTimeout(()=>ie(),50)}))};this.timeout=setTimeout(()=>ie())}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.SBq),r.Y36(r.R0b))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","visibilityObserver",""]],hostVars:2,hostBindings:function(ie,Ze){2&ie&&r.ekj("visible",Ze.isVisible)},outputs:{visible:"visible"}}),gt})(),pr=(()=>{class gt{constructor(ie){this.dragX=!0,this.dragY=!0,this.dragStart=new r.vpe,this.dragging=new r.vpe,this.dragEnd=new r.vpe,this.isDragging=!1,this.element=ie.nativeElement}ngOnChanges(ie){ie.dragEventTarget&&ie.dragEventTarget.currentValue&&this.dragModel.dragging&&this.onMousedown(ie.dragEventTarget.currentValue)}ngOnDestroy(){this._destroySubscription()}onMouseup(ie){this.isDragging&&(this.isDragging=!1,this.element.classList.remove("dragging"),this.subscription&&(this._destroySubscription(),this.dragEnd.emit({event:ie,element:this.element,model:this.dragModel})))}onMousedown(ie){if(ie.target.classList.contains("draggable")&&(this.dragX||this.dragY)){ie.preventDefault(),this.isDragging=!0;const Jt={x:ie.clientX,y:ie.clientY},gn=(0,u.R)(document,"mouseup");this.subscription=gn.subscribe(Bi=>this.onMouseup(Bi));const vi=(0,u.R)(document,"mousemove").pipe((0,f.R)(gn)).subscribe(Bi=>this.move(Bi,Jt));this.subscription.add(vi),this.dragStart.emit({event:ie,element:this.element,model:this.dragModel})}}move(ie,Ze){if(!this.isDragging)return;const gn=ie.clientY-Ze.y;this.dragX&&(this.element.style.left=ie.clientX-Ze.x+"px"),this.dragY&&(this.element.style.top=`${gn}px`),this.element.classList.add("dragging"),this.dragging.emit({event:ie,element:this.element,model:this.dragModel})}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.SBq))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","draggable",""]],inputs:{dragX:"dragX",dragY:"dragY",dragEventTarget:"dragEventTarget",dragModel:"dragModel"},outputs:{dragStart:"dragStart",dragging:"dragging",dragEnd:"dragEnd"},features:[r.TTD]}),gt})(),Eo=(()=>{class gt{constructor(ie,Ze){this.renderer=Ze,this.resizeEnabled=!0,this.resize=new r.vpe,this.resizing=!1,this.element=ie.nativeElement}ngAfterViewInit(){const ie=this.renderer;this.resizeHandle=ie.createElement("span"),ie.addClass(this.resizeHandle,this.resizeEnabled?"resize-handle":"resize-handle--not-resizable"),ie.appendChild(this.element,this.resizeHandle)}ngOnDestroy(){this._destroySubscription(),this.renderer.destroyNode?this.renderer.destroyNode(this.resizeHandle):this.resizeHandle&&this.renderer.removeChild(this.renderer.parentNode(this.resizeHandle),this.resizeHandle)}onMouseup(){this.resizing=!1,this.subscription&&!this.subscription.closed&&(this._destroySubscription(),this.resize.emit(this.element.clientWidth))}onMousedown(ie){const Ze=ie.target.classList.contains("resize-handle"),Jt=this.element.clientWidth,gn=ie.screenX;if(Ze){ie.stopPropagation(),this.resizing=!0;const vi=(0,u.R)(document,"mouseup");this.subscription=vi.subscribe(Xi=>this.onMouseup());const Bi=(0,u.R)(document,"mousemove").pipe((0,f.R)(vi)).subscribe(Xi=>this.move(Xi,Jt,gn));this.subscription.add(Bi)}}move(ie,Ze,Jt){const vi=Ze+(ie.screenX-Jt);(!this.minWidth||vi>=this.minWidth)&&(!this.maxWidth||vi<=this.maxWidth)&&(this.element.style.width=`${vi}px`)}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.SBq),r.Y36(r.Qsj))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","resizeable",""]],hostVars:2,hostBindings:function(ie,Ze){1&ie&&r.NdJ("mousedown",function(gn){return Ze.onMousedown(gn)}),2&ie&&r.ekj("resizeable",Ze.resizeEnabled)},inputs:{resizeEnabled:"resizeEnabled",minWidth:"minWidth",maxWidth:"maxWidth"},outputs:{resize:"resize"}}),gt})(),po=(()=>{class gt{constructor(ie,Ze){this.document=Ze,this.reorder=new r.vpe,this.targetChanged=new r.vpe,this.differ=ie.find({}).create()}ngAfterContentInit(){this.updateSubscriptions(),this.draggables.changes.subscribe(this.updateSubscriptions.bind(this))}ngOnDestroy(){this.draggables.forEach(ie=>{ie.dragStart.unsubscribe(),ie.dragging.unsubscribe(),ie.dragEnd.unsubscribe()})}updateSubscriptions(){const ie=this.differ.diff(this.createMapDiffs());if(ie){const Ze=({currentValue:gn,previousValue:vi})=>{Jt({previousValue:vi}),gn&&(gn.dragStart.subscribe(this.onDragStart.bind(this)),gn.dragging.subscribe(this.onDragging.bind(this)),gn.dragEnd.subscribe(this.onDragEnd.bind(this)))},Jt=({previousValue:gn})=>{gn&&(gn.dragStart.unsubscribe(),gn.dragging.unsubscribe(),gn.dragEnd.unsubscribe())};ie.forEachAddedItem(Ze),ie.forEachRemovedItem(Jt)}}onDragStart(){this.positions={};let ie=0;for(const Ze of this.draggables.toArray()){const Jt=Ze.element,gn=parseInt(Jt.offsetLeft.toString(),0);this.positions[Ze.dragModel.prop]={left:gn,right:gn+parseInt(Jt.offsetWidth.toString(),0),index:ie++,element:Jt}}}onDragging({model:Ze,event:Jt}){const gn=this.positions[Ze.prop],vi=this.isTarget(Ze,Jt);vi?this.lastDraggingIndex!==vi.i&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,newIndex:vi.i,initialIndex:gn.index}),this.lastDraggingIndex=vi.i):this.lastDraggingIndex!==gn.index&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,initialIndex:gn.index}),this.lastDraggingIndex=gn.index)}onDragEnd({element:ie,model:Ze,event:Jt}){const gn=this.positions[Ze.prop],vi=this.isTarget(Ze,Jt);vi&&this.reorder.emit({prevIndex:gn.index,newIndex:vi.i,model:Ze}),this.lastDraggingIndex=void 0,ie.style.left="auto"}isTarget(ie,Ze){let Jt=0;const Bi=this.document.elementsFromPoint(Ze.x||Ze.clientX,Ze.y||Ze.clientY);for(const Xi in this.positions){const ws=this.positions[Xi];if(ie.prop!==Xi&&Bi.find(ds=>ds===ws.element))return{pos:ws,i:Jt};Jt++}}createMapDiffs(){return this.draggables.toArray().reduce((ie,Ze)=>(ie[Ze.dragModel.$$id]=Ze,ie),{})}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.aQg),r.Y36(a.K0))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","orderable",""]],contentQueries:function(ie,Ze,Jt){if(1&ie&&r.Suo(Jt,pr,5),2&ie){let gn;r.iGM(gn=r.CRH())&&(Ze.draggables=gn)}},outputs:{reorder:"reorder",targetChanged:"targetChanged"}}),gt})(),$i=(()=>{class gt{constructor(){this.pressEnabled=!0,this.duration=500,this.longPressStart=new r.vpe,this.longPressing=new r.vpe,this.longPressEnd=new r.vpe,this.mouseX=0,this.mouseY=0}get press(){return this.pressing}get isLongPress(){return this.isLongPressing}onMouseDown(ie){if(1!==ie.which||!this.pressEnabled||ie.target.classList.contains("resize-handle"))return;this.mouseX=ie.clientX,this.mouseY=ie.clientY,this.pressing=!0,this.isLongPressing=!1;const Jt=(0,u.R)(document,"mouseup");this.subscription=Jt.subscribe(gn=>this.onMouseup()),this.timeout=setTimeout(()=>{this.isLongPressing=!0,this.longPressStart.emit({event:ie,model:this.pressModel}),this.subscription.add((0,u.R)(document,"mousemove").pipe((0,f.R)(Jt)).subscribe(gn=>this.onMouseMove(gn))),this.loop(ie)},this.duration),this.loop(ie)}onMouseMove(ie){if(this.pressing&&!this.isLongPressing){const Ze=Math.abs(ie.clientX-this.mouseX)>10,Jt=Math.abs(ie.clientY-this.mouseY)>10;(Ze||Jt)&&this.endPress()}}loop(ie){this.isLongPressing&&(this.timeout=setTimeout(()=>{this.longPressing.emit({event:ie,model:this.pressModel}),this.loop(ie)},50))}endPress(){clearTimeout(this.timeout),this.isLongPressing=!1,this.pressing=!1,this._destroySubscription(),this.longPressEnd.emit({model:this.pressModel})}onMouseup(){this.endPress()}ngOnDestroy(){this._destroySubscription()}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275dir=r.lG2({type:gt,selectors:[["","long-press",""]],hostVars:4,hostBindings:function(ie,Ze){1&ie&&r.NdJ("mousedown",function(gn){return Ze.onMouseDown(gn)}),2&ie&&r.ekj("press",Ze.press)("longpress",Ze.isLongPress)},inputs:{pressEnabled:"pressEnabled",duration:"duration",pressModel:"pressModel"},outputs:{longPressStart:"longPressStart",longPressing:"longPressing",longPressEnd:"longPressEnd"}}),gt})(),qr=(()=>{class gt{constructor(ie,Ze,Jt){this.ngZone=ie,this.renderer=Jt,this.scrollbarV=!1,this.scrollbarH=!1,this.scroll=new r.vpe,this.scrollYPos=0,this.scrollXPos=0,this.prevScrollYPos=0,this.prevScrollXPos=0,this._scrollEventListener=null,this.element=Ze.nativeElement}ngOnInit(){if(this.scrollbarV||this.scrollbarH){const ie=this.renderer;this.parentElement=ie.parentNode(ie.parentNode(this.element)),this._scrollEventListener=this.onScrolled.bind(this),this.parentElement.addEventListener("scroll",this._scrollEventListener)}}ngOnDestroy(){this._scrollEventListener&&(this.parentElement.removeEventListener("scroll",this._scrollEventListener),this._scrollEventListener=null)}setOffset(ie){this.parentElement&&(this.parentElement.scrollTop=ie)}onScrolled(ie){const Ze=ie.currentTarget;requestAnimationFrame(()=>{this.scrollYPos=Ze.scrollTop,this.scrollXPos=Ze.scrollLeft,this.updateOffset()})}updateOffset(){let ie;this.scrollYPos<this.prevScrollYPos?ie="down":this.scrollYPos>this.prevScrollYPos&&(ie="up"),this.scroll.emit({direction:ie,scrollYPos:this.scrollYPos,scrollXPos:this.scrollXPos}),this.prevScrollYPos=this.scrollYPos,this.prevScrollXPos=this.scrollXPos}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.R0b),r.Y36(r.SBq),r.Y36(r.Qsj))},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-scroller"]],hostAttrs:[1,"datatable-scroll"],hostVars:4,hostBindings:function(ie,Ze){2&ie&&r.Udp("height",Ze.scrollHeight,"px")("width",Ze.scrollWidth,"px")},inputs:{scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",scrollHeight:"scrollHeight",scrollWidth:"scrollWidth"},outputs:{scroll:"scroll"},ngContentSelectors:T,decls:1,vars:0,template:function(ie,Ze){1&ie&&(r.F$t(),r.Hsn(0))},encapsulation:2,changeDetection:0}),gt})(),Hi=(()=>{class gt{constructor(ie){this.template=ie}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.Rgc))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","ngx-datatable-group-header-template",""]]}),gt})(),Dn=(()=>{class gt{constructor(){this.rowHeight=0,this.toggle=new r.vpe}get template(){return this._templateInput||this._templateQuery}toggleExpandGroup(ie){this.toggle.emit({type:"group",value:ie})}expandAllGroups(){this.toggle.emit({type:"all",value:!0})}collapseAllGroups(){this.toggle.emit({type:"all",value:!1})}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275dir=r.lG2({type:gt,selectors:[["ngx-datatable-group-header"]],contentQueries:function(ie,Ze,Jt){if(1&ie&&r.Suo(Jt,Hi,7,r.Rgc),2&ie){let gn;r.iGM(gn=r.CRH())&&(Ze._templateQuery=gn.first)}},inputs:{rowHeight:"rowHeight",_templateInput:["template","_templateInput"]},outputs:{toggle:"toggle"}}),gt})();function Hn(){return""}function jt(gt){return null==gt?Hn:"number"==typeof gt?Fe:-1!==gt.indexOf(".")?et:Ie}function Fe(gt,Tn){return null==gt?"":gt&&null!=Tn?gt[Tn]??"":gt}function Ie(gt,Tn){return null==gt?"":gt&&Tn?gt[Tn]??"":gt}function et(gt,Tn){if(null==gt)return"";if(!gt||!Tn)return gt;let ie=gt[Tn];if(void 0!==ie)return ie;ie=gt;const Ze=Tn.split(".");if(Ze.length)for(let Jt=0;Jt<Ze.length;Jt++)if(ie=ie[Ze[Jt]],null==ie)return"";return ie}function ze(gt){return gt&&(Tn=>jt(gt)(Tn,gt))}function an(gt,Tn,ie){if(Tn&&ie){const Ze={},Jt=gt.length;let gn=null;Ze[0]=new lt;const vi=gt.reduce((Xi,ws)=>{const ds=ie(ws);return-1===Xi.indexOf(ds)&&Xi.push(ds),Xi},[]);for(let Xi=0;Xi<Jt;Xi++)Ze[ie(gt[Xi])]=new lt(gt[Xi]);for(let Xi=0;Xi<Jt;Xi++){gn=Ze[ie(gt[Xi])];let ws=0;const ds=Tn(gn.row);ds&&vi.indexOf(ds)>-1&&(ws=ds),gn.parent=Ze[ws],gn.row.level=gn.parent.row.level+1,gn.parent.children.push(gn)}let Bi=[];return Ze[0].flatten(function(){Bi=[...Bi,this.row]},!0),Bi}return gt}class lt{constructor(Tn=null){Tn||(Tn={level:-1,treeStatus:"expanded"}),this.row=Tn,this.parent=null,this.children=[]}flatten(Tn,ie){if("expanded"===this.row.treeStatus)for(let Ze=0,Jt=this.children.length;Ze<Jt;Ze++){const gn=this.children[Ze];Tn.apply(gn,Array.prototype.slice.call(arguments,2)),ie&&gn.flatten.apply(gn,arguments)}}}function Rt(gt){return(gt=(gt=(gt=gt.replace(/[^a-zA-Z0-9 ]/g," ")).replace(/([a-z](?=[A-Z]))/g,"$1 ")).replace(/([^a-zA-Z0-9 ])|^[0-9]+/g,"").trim().toLowerCase()).replace(/([ 0-9]+)([a-zA-Z])/g,function(Tn,ie,Ze){return ie.trim()+Ze.toUpperCase()})}function Pe(gt){return gt.replace(/([A-Z])/g,Tn=>` ${Tn}`).replace(/^./,Tn=>Tn.toUpperCase())}function gr(gt){if(!gt)return;let Tn=!1;for(const ie of gt)ie.$$id||(ie.$$id=("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)),Pn(ie.prop)&&ie.name&&(ie.prop=Rt(ie.name)),ie.$$valueGetter||(ie.$$valueGetter=jt(ie.prop)),!Pn(ie.prop)&&Pn(ie.name)&&(ie.name=Pe(String(ie.prop))),Pn(ie.prop)&&Pn(ie.name)&&(ie.name=""),ie.hasOwnProperty("resizeable")||(ie.resizeable=!0),ie.hasOwnProperty("sortable")||(ie.sortable=!0),ie.hasOwnProperty("draggable")||(ie.draggable=!0),ie.hasOwnProperty("canAutoResize")||(ie.canAutoResize=!0),ie.hasOwnProperty("width")||(ie.width=150),ie.hasOwnProperty("isTreeColumn")&&ie.isTreeColumn&&!Tn?Tn=!0:ie.isTreeColumn=!1}function Pn(gt){return null==gt}var Pr=(()=>{return(gt=Pr||(Pr={})).standard="standard",gt.flex="flex",gt.force="force",Pr;var gt})(),tr=(()=>{return(gt=tr||(tr={})).single="single",gt.multi="multi",gt.multiClick="multiClick",gt.cell="cell",gt.checkbox="checkbox",tr;var gt})(),Zn=(()=>{return(gt=Zn||(Zn={})).single="single",gt.multi="multi",Zn;var gt})(),nr=(()=>{return(gt=nr||(nr={})).header="header",gt.body="body",nr;var gt})();let Zt=(()=>{class gt{constructor(ie){this.template=ie}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.Rgc))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","ngx-datatable-header-template",""]]}),gt})(),dn=(()=>{class gt{constructor(ie){this.template=ie}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.Rgc))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","ngx-datatable-cell-template",""]]}),gt})(),Ge=(()=>{class gt{constructor(ie){this.template=ie}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.Rgc))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","ngx-datatable-tree-toggle",""]]}),gt})(),Ot=(()=>{class gt{constructor(ie){this.columnChangesService=ie,this.isFirstChange=!0}get cellTemplate(){return this._cellTemplateInput||this._cellTemplateQuery}get headerTemplate(){return this._headerTemplateInput||this._headerTemplateQuery}get treeToggleTemplate(){return this._treeToggleTemplateInput||this._treeToggleTemplateQuery}ngOnChanges(){this.isFirstChange?this.isFirstChange=!1:this.columnChangesService.onInputChange()}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(Ei))},gt.\u0275dir=r.lG2({type:gt,selectors:[["ngx-datatable-column"]],contentQueries:function(ie,Ze,Jt){if(1&ie&&(r.Suo(Jt,dn,7,r.Rgc),r.Suo(Jt,Zt,7,r.Rgc),r.Suo(Jt,Ge,7,r.Rgc)),2&ie){let gn;r.iGM(gn=r.CRH())&&(Ze._cellTemplateQuery=gn.first),r.iGM(gn=r.CRH())&&(Ze._headerTemplateQuery=gn.first),r.iGM(gn=r.CRH())&&(Ze._treeToggleTemplateQuery=gn.first)}},inputs:{name:"name",prop:"prop",frozenLeft:"frozenLeft",frozenRight:"frozenRight",flexGrow:"flexGrow",resizeable:"resizeable",comparator:"comparator",pipe:"pipe",sortable:"sortable",draggable:"draggable",canAutoResize:"canAutoResize",minWidth:"minWidth",width:"width",maxWidth:"maxWidth",checkboxable:"checkboxable",headerCheckboxable:"headerCheckboxable",headerClass:"headerClass",cellClass:"cellClass",isTreeColumn:"isTreeColumn",treeLevelIndent:"treeLevelIndent",summaryFunc:"summaryFunc",summaryTemplate:"summaryTemplate",_cellTemplateInput:["cellTemplate","_cellTemplateInput"],_headerTemplateInput:["headerTemplate","_headerTemplateInput"],_treeToggleTemplateInput:["treeToggleTemplate","_treeToggleTemplateInput"]},features:[r.TTD]}),gt})(),mn=(()=>{class gt{constructor(ie){this.template=ie}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.Rgc))},gt.\u0275dir=r.lG2({type:gt,selectors:[["","ngx-datatable-row-detail-template",""]]}),gt})(),wr=(()=>{class gt{constructor(){this.rowHeight=0,this.toggle=new r.vpe}get template(){return this._templateInput||this._templateQuery}toggleExpandRow(ie){this.toggle.emit({type:"row",value:ie})}expandAllRows(){this.toggle.emit({type:"all",value:!0})}collapseAllRows(){this.toggle.emit({type:"all",value:!1})}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275dir=r.lG2({type:gt,selectors:[["ngx-datatable-row-detail"]],contentQueries:function(ie,Ze,Jt){if(1&ie&&r.Suo(Jt,mn,7,r.Rgc),2&ie){let gn;r.iGM(gn=r.CRH())&&(Ze._templateQuery=gn.first)}},inputs:{rowHeight:"rowHeight",_templateInput:["template","_templateInput"]},outputs:{toggle:"toggle"}}),gt})(),Ti=(()=>{class gt{get template(){return this._templateInput||this._templateQuery}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275dir=r.lG2({type:gt,selectors:[["ngx-datatable-footer"]],contentQueries:function(ie,Ze,Jt){if(1&ie&&r.Suo(Jt,ii,5,r.Rgc),2&ie){let gn;r.iGM(gn=r.CRH())&&(Ze._templateQuery=gn.first)}},inputs:{footerHeight:"footerHeight",totalMessage:"totalMessage",selectedMessage:"selectedMessage",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon",_templateInput:["template","_templateInput"]}}),gt})();function Ci(gt){const Tn={left:[],center:[],right:[]};if(gt)for(const ie of gt)ie.frozenLeft?Tn.left.push(ie):ie.frozenRight?Tn.right.push(ie):Tn.center.push(ie);return Tn}function Ai(gt,Tn){return{left:Ko(gt.left),center:Ko(gt.center),right:Ko(gt.right),total:Math.floor(Ko(Tn))}}function Ko(gt,Tn){let ie=0;if(gt)for(const Ze of gt)ie+=parseFloat(Tn&&Ze[Tn]?Ze[Tn]:Ze.width);return ie}function dr(gt){const Tn=[],ie=Ci(gt);return Tn.push({type:"left",columns:ie.left}),Tn.push({type:"center",columns:ie.center}),Tn.push({type:"right",columns:ie.right}),Tn}class Ni{constructor(){this.treeArray=[]}clearCache(){this.treeArray=[]}initCache(Tn){const{rows:ie,rowHeight:Ze,detailRowHeight:Jt,externalVirtual:gn,rowCount:vi,rowIndexes:Bi,rowExpansions:Xi}=Tn,ws="function"==typeof Ze,ds="function"==typeof Jt;if(!ws&&isNaN(Ze))throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a\n        valid number or function value: (${Ze}) when 'scrollbarV' is enabled.`);if(!ds&&isNaN(Jt))throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\n        valid number or function value: (${Jt}) when 'scrollbarV' is enabled.`);const qs=gn?vi:ie.length;this.treeArray=new Array(qs);for(let Js=0;Js<qs;++Js)this.treeArray[Js]=0;for(let Js=0;Js<qs;++Js){const Ll=ie[Js];let vl=Ze;ws&&(vl=Ze(Ll));const Yu=Xi.has(Ll);Ll&&Yu&&(vl+=ds?Jt(Ll,Bi.get(Ll)):Jt),this.update(Js,vl)}}getRowIndex(Tn){return 0===Tn?0:this.calcRowIndex(Tn)}update(Tn,ie){if(!this.treeArray.length)throw new Error(`Update at index ${Tn} with value ${ie} failed:\n        Row Height cache not initialized.`);const Ze=this.treeArray.length;for(Tn|=0;Tn<Ze;)this.treeArray[Tn]+=ie,Tn|=Tn+1}query(Tn){if(!this.treeArray.length)throw new Error(`query at index ${Tn} failed: Fenwick tree array not initialized.`);let ie=0;for(Tn|=0;Tn>=0;)ie+=this.treeArray[Tn],Tn=(Tn&Tn+1)-1;return ie}queryBetween(Tn,ie){return this.query(ie)-this.query(Tn-1)}calcRowIndex(Tn){if(!this.treeArray.length)return 0;let ie=-1;const Ze=this.treeArray.length;for(let gn=Math.pow(2,Ze.toString(2).length-1);0!==gn;gn>>=1){const vi=ie+gn;vi<Ze&&Tn>=this.treeArray[vi]&&(Tn-=this.treeArray[vi],ie=vi)}return ie+1}}const ti={},Vr=typeof document<"u"?document.createElement("div").style:void 0,ji=function(){const gt=typeof window<"u"?window.getComputedStyle(document.documentElement,""):void 0,Tn=typeof gt<"u"?Array.prototype.slice.call(gt).join("").match(/-(moz|webkit|ms)-/):null,ie=null!==Tn?Tn[1]:void 0,Ze=typeof ie<"u"?"WebKit|Moz|MS|O".match(new RegExp("("+ie+")","i"))[1]:void 0;return Ze?{dom:Ze,lowercase:ie,css:`-${ie}-`,js:ie[0].toUpperCase()+ie.substr(1)}:void 0}();function Vi(gt){const Tn=Rt(gt);return ti[Tn]||(void 0!==ji&&void 0!==Vr[ji.css+gt]?ti[Tn]=ji.css+gt:void 0!==Vr[gt]&&(ti[Tn]=gt)),ti[Tn]}const Po=typeof window<"u"?Vi("transform"):void 0,ko=typeof window<"u"?Vi("backfaceVisibility"):void 0,Ir=typeof window<"u"?!!Vi("transform"):void 0,ro=typeof window<"u"?!!Vi("perspective"):void 0,Vt=typeof window<"u"?window.navigator.userAgent:"Chrome",bn=/Safari\//.test(Vt)&&!/Chrome\//.test(Vt);function Bn(gt,Tn,ie){typeof Po<"u"&&Ir?!bn&&ro?(gt[Po]=`translate3d(${Tn}px, ${ie}px, 0)`,gt[ko]="hidden"):gt[Rt(Po)]=`translate(${Tn}px, ${ie}px)`:(gt.top=`${ie}px`,gt.left=`${Tn}px`)}let ci=(()=>{class gt{constructor(ie){this.cd=ie,this.selected=[],this.scroll=new r.vpe,this.page=new r.vpe,this.activate=new r.vpe,this.select=new r.vpe,this.detailToggle=new r.vpe,this.rowContextmenu=new r.vpe(!1),this.treeAction=new r.vpe,this.rowHeightsCache=new Ni,this.temp=[],this.offsetY=0,this.indexes={},this.rowIndexes=new WeakMap,this.rowExpansions=[],this.getDetailRowHeight=(Ze,Jt)=>{if(!this.rowDetail)return 0;const gn=this.rowDetail.rowHeight;return"function"==typeof gn?gn(Ze,Jt):gn},this.rowTrackingFn=(Ze,Jt)=>{const gn=this.getRowIndex(Jt);return this.trackByProp?Jt[this.trackByProp]:gn}}set pageSize(ie){this._pageSize=ie,this.recalcLayout()}get pageSize(){return this._pageSize}set rows(ie){this._rows=ie,this.recalcLayout()}get rows(){return this._rows}set columns(ie){this._columns=ie;const Ze=Ci(ie);this.columnGroupWidths=Ai(Ze,ie)}get columns(){return this._columns}set offset(ie){this._offset=ie,(!this.scrollbarV||this.scrollbarV&&!this.virtualization)&&this.recalcLayout()}get offset(){return this._offset}set rowCount(ie){this._rowCount=ie,this.recalcLayout()}get rowCount(){return this._rowCount}get bodyWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}set bodyHeight(ie){this._bodyHeight=this.scrollbarV?ie+"px":"auto",this.recalcLayout()}get bodyHeight(){return this._bodyHeight}get selectEnabled(){return!!this.selectionType}get scrollHeight(){if(this.scrollbarV&&this.virtualization&&this.rowCount)return this.rowHeightsCache.query(this.rowCount-1)}ngOnInit(){this.rowDetail&&(this.listener=this.rowDetail.toggle.subscribe(({type:ie,value:Ze})=>{"row"===ie&&this.toggleRowExpansion(Ze),"all"===ie&&this.toggleAllRows(Ze),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()})),this.groupHeader&&(this.listener=this.groupHeader.toggle.subscribe(({type:ie,value:Ze})=>{"group"===ie&&this.toggleRowExpansion(Ze),"all"===ie&&this.toggleAllRows(Ze),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()}))}ngOnDestroy(){(this.rowDetail||this.groupHeader)&&this.listener.unsubscribe()}updateOffsetY(ie){this.scroller&&(this.scrollbarV&&this.virtualization&&ie?ie=this.rowHeightsCache.query(this.pageSize*ie-1):this.scrollbarV&&!this.virtualization&&(ie=0),this.scroller.setOffset(ie||0))}onBodyScroll(ie){const Ze=ie.scrollYPos,Jt=ie.scrollXPos;(this.offsetY!==Ze||this.offsetX!==Jt)&&this.scroll.emit({offsetY:Ze,offsetX:Jt}),this.offsetY=Ze,this.offsetX=Jt,this.updateIndexes(),this.updatePage(ie.direction),this.updateRows()}updatePage(ie){let Ze=this.indexes.first/this.pageSize;"up"===ie?Ze=Math.ceil(Ze):"down"===ie&&(Ze=Math.floor(Ze)),void 0!==ie&&!isNaN(Ze)&&this.page.emit({offset:Ze})}updateRows(){const{first:ie,last:Ze}=this.indexes;let Jt=ie,gn=0;const vi=[];if(this.groupedRows){let Bi=3;for(1===this.groupedRows.length&&(Bi=this.groupedRows[0].value.length);Jt<Ze&&Jt<this.groupedRows.length;){const Xi=this.groupedRows[Jt];this.rowIndexes.set(Xi,Jt),Xi.value&&Xi.value.forEach((ws,ds)=>{this.rowIndexes.set(ws,`${Jt}-${ds}`)}),vi[gn]=Xi,gn++,Jt++}}else for(;Jt<Ze&&Jt<this.rowCount;){const Bi=this.rows[Jt];Bi&&(this.rowIndexes.set(Bi,Jt),vi[gn]=Bi),gn++,Jt++}this.temp=vi}getRowHeight(ie){return"function"==typeof this.rowHeight?this.rowHeight(ie):this.rowHeight}getGroupHeight(ie){let Ze=0;if(ie.value)for(let Jt=0;Jt<ie.value.length;Jt++)Ze+=this.getRowAndDetailHeight(ie.value[Jt]);return Ze}getRowAndDetailHeight(ie){let Ze=this.getRowHeight(ie);return this.getRowExpanded(ie)&&(Ze+=this.getDetailRowHeight(ie)),Ze}getRowsStyles(ie){const Ze={};if(this.groupedRows&&(Ze.width=this.columnGroupWidths.total),this.scrollbarV&&this.virtualization){let Jt=0;if(this.groupedRows){const vi=ie[ie.length-1];Jt=vi?this.getRowIndex(vi):0}else Jt=this.getRowIndex(ie);Bn(Ze,0,this.rowHeightsCache.query(Jt-1))}return Ze}getBottomSummaryRowStyles(){if(!this.scrollbarV||!this.rows||!this.rows.length)return null;const ie={position:"absolute"};return Bn(ie,0,this.rowHeightsCache.query(this.rows.length-1)),ie}hideIndicator(){setTimeout(()=>this.loadingIndicator=!1,500)}updateIndexes(){let ie=0,Ze=0;if(this.scrollbarV)if(this.virtualization){const Jt=parseInt(this.bodyHeight,0);ie=this.rowHeightsCache.getRowIndex(this.offsetY),Ze=this.rowHeightsCache.getRowIndex(Jt+this.offsetY)+1}else ie=0,Ze=this.rowCount;else this.externalPaging||(ie=Math.max(this.offset*this.pageSize,0)),Ze=Math.min(ie+this.pageSize,this.rowCount);this.indexes={first:ie,last:Ze}}refreshRowHeightCache(){if(this.scrollbarV&&(!this.scrollbarV||this.virtualization)&&(this.rowHeightsCache.clearCache(),this.rows&&this.rows.length)){const ie=new Set;for(const Ze of this.rows)this.getRowExpanded(Ze)&&ie.add(Ze);this.rowHeightsCache.initCache({rows:this.rows,rowHeight:this.rowHeight,detailRowHeight:this.getDetailRowHeight,externalVirtual:this.scrollbarV&&this.externalPaging,rowCount:this.rowCount,rowIndexes:this.rowIndexes,rowExpansions:ie})}}getAdjustedViewPortIndex(){const ie=this.indexes.first;return this.scrollbarV&&this.virtualization&&this.rowHeightsCache.query(ie-1)<=this.offsetY?ie-1:ie}toggleRowExpansion(ie){const Ze=this.getAdjustedViewPortIndex(),Jt=this.getRowExpandedIdx(ie,this.rowExpansions),gn=Jt>-1;if(this.scrollbarV&&this.virtualization){const vi=this.getDetailRowHeight(ie)*(gn?-1:1),Bi=this.getRowIndex(ie);this.rowHeightsCache.update(Bi,vi)}gn?this.rowExpansions.splice(Jt,1):this.rowExpansions.push(ie),this.detailToggle.emit({rows:[ie],currentIndex:Ze})}toggleAllRows(ie){this.rowExpansions=[];const Ze=this.getAdjustedViewPortIndex();if(ie)for(const Jt of this.rows)this.rowExpansions.push(Jt);this.scrollbarV&&this.recalcLayout(),this.detailToggle.emit({rows:this.rows,currentIndex:Ze})}recalcLayout(){this.refreshRowHeightCache(),this.updateIndexes(),this.updateRows()}columnTrackingFn(ie,Ze){return Ze.$$id}stylesByGroup(ie){const Ze=this.columnGroupWidths,Jt=this.offsetX,gn={width:`${Ze[ie]}px`};if("left"===ie)Bn(gn,Jt,0);else if("right"===ie){const vi=parseInt(this.innerWidth+"",0);Bn(gn,-1*(Ze.total-vi-Jt),0)}return gn}getRowExpanded(ie){if(0===this.rowExpansions.length&&this.groupExpansionDefault)for(const Ze of this.groupedRows)this.rowExpansions.push(Ze);return this.getRowExpandedIdx(ie,this.rowExpansions)>-1}getRowExpandedIdx(ie,Ze){if(!Ze||!Ze.length)return-1;const Jt=this.rowIdentity(ie);return Ze.findIndex(gn=>this.rowIdentity(gn)===Jt)}getRowIndex(ie){return this.rowIndexes.get(ie)||0}onTreeAction(ie){this.treeAction.emit({row:ie})}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.sBO))},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-body"]],viewQuery:function(ie,Ze){if(1&ie&&r.Gf(qr,5),2&ie){let Jt;r.iGM(Jt=r.CRH())&&(Ze.scroller=Jt.first)}},hostAttrs:[1,"datatable-body"],hostVars:4,hostBindings:function(ie,Ze){2&ie&&r.Udp("width",Ze.bodyWidth)("height",Ze.bodyHeight)},inputs:{selected:"selected",pageSize:"pageSize",rows:"rows",columns:"columns",offset:"offset",rowCount:"rowCount",bodyHeight:"bodyHeight",offsetX:"offsetX",loadingIndicator:"loadingIndicator",scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",externalPaging:"externalPaging",rowHeight:"rowHeight",emptyMessage:"emptyMessage",selectionType:"selectionType",rowIdentity:"rowIdentity",rowDetail:"rowDetail",groupHeader:"groupHeader",selectCheck:"selectCheck",displayCheck:"displayCheck",trackByProp:"trackByProp",rowClass:"rowClass",groupedRows:"groupedRows",groupExpansionDefault:"groupExpansionDefault",innerWidth:"innerWidth",groupRowsBy:"groupRowsBy",virtualization:"virtualization",summaryRow:"summaryRow",summaryPosition:"summaryPosition",summaryHeight:"summaryHeight"},outputs:{scroll:"scroll",page:"page",activate:"activate",select:"select",detailToggle:"detailToggle",rowContextmenu:"rowContextmenu",treeAction:"treeAction"},decls:5,vars:9,consts:[[4,"ngIf"],[3,"selected","rows","selectCheck","selectEnabled","selectionType","rowIdentity","select","activate"],["selector",""],[3,"scrollbarV","scrollbarH","scrollHeight","scrollWidth","scroll",4,"ngIf"],["class","empty-row",3,"innerHTML",4,"ngIf"],[3,"scrollbarV","scrollbarH","scrollHeight","scrollWidth","scroll"],[3,"rowHeight","offsetX","innerWidth","rows","columns",4,"ngIf"],[3,"groupedRows","innerWidth","ngStyle","rowDetail","groupHeader","offsetX","detailRowHeight","row","expanded","rowIndex","rowContextmenu",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle","rowHeight","offsetX","innerWidth","rows","columns",4,"ngIf"],[3,"rowHeight","offsetX","innerWidth","rows","columns"],[3,"groupedRows","innerWidth","ngStyle","rowDetail","groupHeader","offsetX","detailRowHeight","row","expanded","rowIndex","rowContextmenu"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","rowIndex","expanded","rowClass","displayCheck","treeStatus","treeAction","activate",4,"ngIf","ngIfElse"],["groupedRowsTemplate",""],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","rowIndex","expanded","rowClass","displayCheck","treeStatus","treeAction","activate"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","group","rowIndex","expanded","rowClass","activate",4,"ngFor","ngForOf","ngForTrackBy"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","group","rowIndex","expanded","rowClass","activate"],[3,"ngStyle","rowHeight","offsetX","innerWidth","rows","columns"],[1,"empty-row",3,"innerHTML"]],template:function(ie,Ze){1&ie&&(r.YNc(0,M,1,0,"datatable-progress",0),r.TgZ(1,"datatable-selection",1,2),r.NdJ("select",function(gn){return Ze.select.emit(gn)})("activate",function(gn){return Ze.activate.emit(gn)}),r.YNc(3,F,4,8,"datatable-scroller",3),r.YNc(4,X,1,1,"div",4),r.qZA()),2&ie&&(r.Q6J("ngIf",Ze.loadingIndicator),r.xp6(1),r.Q6J("selected",Ze.selected)("rows",Ze.rows)("selectCheck",Ze.selectCheck)("selectEnabled",Ze.selectEnabled)("selectionType",Ze.selectionType)("rowIdentity",Ze.rowIdentity),r.xp6(2),r.Q6J("ngIf",null==Ze.rows?null:Ze.rows.length),r.xp6(1),r.Q6J("ngIf",!(null!=Ze.rows&&Ze.rows.length||Ze.loadingIndicator)))},dependencies:function(){return[a.sg,a.O5,a.PC,qr,Ha,hs,$s,Xo,ns]},encapsulation:2,changeDetection:0}),gt})(),_o=(()=>{class gt{constructor(ie){this.cd=ie,this.sort=new r.vpe,this.reorder=new r.vpe,this.resize=new r.vpe,this.select=new r.vpe,this.columnContextmenu=new r.vpe(!1),this._columnGroupWidths={total:100},this._styleByGroup={left:{},center:{},right:{}},this.destroyed=!1}set innerWidth(ie){this._innerWidth=ie,setTimeout(()=>{if(this._columns){const Ze=Ci(this._columns);this._columnGroupWidths=Ai(Ze,this._columns),this.setStylesByGroup()}})}get innerWidth(){return this._innerWidth}set headerHeight(ie){this._headerHeight="auto"!==ie?`${ie}px`:ie}get headerHeight(){return this._headerHeight}set columns(ie){this._columns=ie;const Ze=Ci(ie);this._columnsByPin=dr(ie),setTimeout(()=>{this._columnGroupWidths=Ai(Ze,ie),this.setStylesByGroup()})}get columns(){return this._columns}set offsetX(ie){this._offsetX=ie,this.setStylesByGroup()}get offsetX(){return this._offsetX}ngOnDestroy(){this.destroyed=!0}onLongPressStart({event:ie,model:Ze}){Ze.dragging=!0,this.dragEventTarget=ie}onLongPressEnd({event:ie,model:Ze}){this.dragEventTarget=ie,setTimeout(()=>{const Jt=this._columns.find(gn=>gn.$$id===Ze.$$id);Jt&&(Jt.dragging=!1)},5)}get headerWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}trackByGroups(ie,Ze){return Ze.type}columnTrackingFn(ie,Ze){return Ze.$$id}onColumnResized(ie,Ze){ie<=Ze.minWidth?ie=Ze.minWidth:ie>=Ze.maxWidth&&(ie=Ze.maxWidth),this.resize.emit({column:Ze,prevValue:Ze.width,newValue:ie})}onColumnReordered({prevIndex:ie,newIndex:Ze,model:Jt}){const gn=this.getColumn(Ze);gn.isTarget=!1,gn.targetMarkerContext=void 0,this.reorder.emit({column:Jt,prevValue:ie,newValue:Ze})}onTargetChanged({prevIndex:ie,newIndex:Ze,initialIndex:Jt}){if(ie||0===ie){const gn=this.getColumn(ie);gn.isTarget=!1,gn.targetMarkerContext=void 0}if(Ze||0===Ze){const gn=this.getColumn(Ze);gn.isTarget=!0,Jt!==Ze&&(gn.targetMarkerContext={class:"targetMarker ".concat(Jt>Ze?"dragFromRight":"dragFromLeft")})}}getColumn(ie){const Ze=this._columnsByPin[0].columns.length;if(ie<Ze)return this._columnsByPin[0].columns[ie];const Jt=this._columnsByPin[1].columns.length;return ie<Ze+Jt?this._columnsByPin[1].columns[ie-Ze]:this._columnsByPin[2].columns[ie-Ze-Jt]}onSort({column:ie,prevValue:Ze,newValue:Jt}){if(ie.dragging)return;const gn=this.calcNewSorts(ie,Ze,Jt);this.sort.emit({sorts:gn,column:ie,prevValue:Ze,newValue:Jt})}calcNewSorts(ie,Ze,Jt){let gn=0;this.sorts||(this.sorts=[]);const vi=this.sorts.map((Bi,Xi)=>((Bi=Object.assign({},Bi)).prop===ie.prop&&(gn=Xi),Bi));return void 0===Jt?vi.splice(gn,1):Ze?vi[gn].dir=Jt:(this.sortType===Zn.single&&vi.splice(0,this.sorts.length),vi.push({dir:Jt,prop:ie.prop})),vi}setStylesByGroup(){this._styleByGroup.left=this.calcStylesByGroup("left"),this._styleByGroup.center=this.calcStylesByGroup("center"),this._styleByGroup.right=this.calcStylesByGroup("right"),this.destroyed||this.cd.detectChanges()}calcStylesByGroup(ie){const Ze=this._columnGroupWidths,gn={width:`${Ze[ie]}px`};return"center"===ie?Bn(gn,-1*this.offsetX,0):"right"===ie&&Bn(gn,-1*(Ze.total-this.innerWidth),0),gn}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.sBO))},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-header"]],hostAttrs:[1,"datatable-header"],hostVars:4,hostBindings:function(ie,Ze){2&ie&&r.Udp("height",Ze.headerHeight)("width",Ze.headerWidth)},inputs:{innerWidth:"innerWidth",headerHeight:"headerHeight",columns:"columns",offsetX:"offsetX",sorts:"sorts",sortAscendingIcon:"sortAscendingIcon",sortDescendingIcon:"sortDescendingIcon",sortUnsetIcon:"sortUnsetIcon",scrollbarH:"scrollbarH",dealsWithGroup:"dealsWithGroup",targetMarkerTemplate:"targetMarkerTemplate",sortType:"sortType",allRowsSelected:"allRowsSelected",selectionType:"selectionType",reorderable:"reorderable"},outputs:{sort:"sort",reorder:"reorder",resize:"resize",select:"select",columnContextmenu:"columnContextmenu"},decls:2,vars:4,consts:[["orderable","",1,"datatable-header-inner",3,"reorder","targetChanged"],[3,"class","ngStyle",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle"],["resizeable","","long-press","","draggable","",3,"resizeEnabled","pressModel","pressEnabled","dragX","dragY","dragModel","dragEventTarget","headerHeight","isTarget","targetMarkerTemplate","targetMarkerContext","column","sortType","sorts","selectionType","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","resize","longPressStart","longPressEnd","sort","select","columnContextmenu",4,"ngFor","ngForOf","ngForTrackBy"],["resizeable","","long-press","","draggable","",3,"resizeEnabled","pressModel","pressEnabled","dragX","dragY","dragModel","dragEventTarget","headerHeight","isTarget","targetMarkerTemplate","targetMarkerContext","column","sortType","sorts","selectionType","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","resize","longPressStart","longPressEnd","sort","select","columnContextmenu"]],template:function(ie,Ze){1&ie&&(r.TgZ(0,"div",0),r.NdJ("reorder",function(gn){return Ze.onColumnReordered(gn)})("targetChanged",function(gn){return Ze.onTargetChanged(gn)}),r.YNc(1,V,2,5,"div",1),r.qZA()),2&ie&&(r.Udp("width",Ze._columnGroupWidths.total,"px"),r.xp6(1),r.Q6J("ngForOf",Ze._columnsByPin)("ngForTrackBy",Ze.trackByGroups))},dependencies:function(){return[a.sg,a.PC,pr,Eo,po,$i,$a]},encapsulation:2,changeDetection:0}),gt})();function go(gt,Tn,ie){ie=ie||{};let Ze,Jt,gn,vi=null,Bi=0;function Xi(){Bi=!1===ie.leading?0:+new Date,vi=null,gn=gt.apply(Ze,Jt)}return function(){const ws=+new Date;!Bi&&!1===ie.leading&&(Bi=ws);const ds=Tn-(ws-Bi);return Ze=this,Jt=arguments,ds<=0?(clearTimeout(vi),vi=null,Bi=ws,gn=gt.apply(Ze,Jt)):!vi&&!1!==ie.trailing&&(vi=setTimeout(Xi,ds)),gn}}function es(gt,Tn){return function(Ze,Jt,gn){return{configurable:!0,enumerable:gn.enumerable,get:function(){return Object.defineProperty(this,Jt,{configurable:!0,enumerable:gn.enumerable,value:go(gn.value,gt,Tn)}),this[Jt]}}}}function Is(gt,Tn){for(const ie of Tn){const Ze=gt.indexOf(ie);gt.splice(Ze,1)}}function la(gt,Tn=300){let ie=0;for(const Ze of gt)ie+=Ze.width||Tn;return ie}var Ro=(()=>{return(gt=Ro||(Ro={})).asc="asc",gt.desc="desc",Ro;var gt})();function gl(gt,Tn){if((null===gt||typeof gt>"u")&&(gt=0),(null===Tn||typeof Tn>"u")&&(Tn=0),gt instanceof Date&&Tn instanceof Date){if(gt<Tn)return-1;if(gt>Tn)return 1}else if(isNaN(parseFloat(gt))||!isFinite(gt)||isNaN(parseFloat(Tn))||!isFinite(Tn)){if(gt=String(gt),Tn=String(Tn),gt.toLowerCase()<Tn.toLowerCase())return-1;if(gt.toLowerCase()>Tn.toLowerCase())return 1}else{if(parseFloat(gt)<parseFloat(Tn))return-1;if(parseFloat(gt)>parseFloat(Tn))return 1}return 0}let da=(()=>{class gt{constructor(ie,Ze,Jt,gn,vi,Bi,Xi){this.scrollbarHelper=ie,this.dimensionsHelper=Ze,this.cd=Jt,this.columnChangesService=Bi,this.configuration=Xi,this.selected=[],this.scrollbarV=!1,this.scrollbarH=!1,this.rowHeight=30,this.columnMode=Pr.standard,this.headerHeight=30,this.footerHeight=0,this.externalPaging=!1,this.externalSorting=!1,this.loadingIndicator=!1,this.reorderable=!0,this.swapColumns=!0,this.sortType=Zn.single,this.sorts=[],this.cssClasses={sortAscending:"datatable-icon-up",sortDescending:"datatable-icon-down",sortUnset:"datatable-icon-sort-unset",pagerLeftArrow:"datatable-icon-left",pagerRightArrow:"datatable-icon-right",pagerPrevious:"datatable-icon-prev",pagerNext:"datatable-icon-skip"},this.messages={emptyMessage:"No data to display",totalMessage:"total",selectedMessage:"selected"},this.groupExpansionDefault=!1,this.selectAllRowsOnPage=!1,this.virtualization=!0,this.summaryRow=!1,this.summaryHeight=30,this.summaryPosition="top",this.scroll=new r.vpe,this.activate=new r.vpe,this.select=new r.vpe,this.sort=new r.vpe,this.page=new r.vpe,this.reorder=new r.vpe,this.resize=new r.vpe,this.tableContextmenu=new r.vpe(!1),this.treeAction=new r.vpe,this.rowCount=0,this._offsetX=new e.X(0),this._count=0,this._offset=0,this._subscriptions=[],this.rowIdentity=ws=>this._groupRowsBy?ws.key:ws,this.element=gn.nativeElement,this.rowDiffer=vi.find({}).create(),this.configuration&&this.configuration.messages&&(this.messages=Object.assign({},this.configuration.messages))}set rows(ie){this._rows=ie,ie&&(this._internalRows=[...ie]),this.externalSorting||this.sortInternalRows(),this._internalRows=an(this._internalRows,ze(this.treeFromRelation),ze(this.treeToRelation)),this.recalculate(),this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)),this.cd.markForCheck()}get rows(){return this._rows}set groupRowsBy(ie){ie&&(this._groupRowsBy=ie,this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)))}get groupRowsBy(){return this._groupRowsBy}set columns(ie){ie&&(this._internalColumns=[...ie],gr(this._internalColumns),this.recalculateColumns()),this._columns=ie}get columns(){return this._columns}set limit(ie){this._limit=ie,this.recalculate()}get limit(){return this._limit}set count(ie){this._count=ie,this.recalculate()}get count(){return this._count}set offset(ie){this._offset=ie}get offset(){return Math.max(Math.min(this._offset,Math.ceil(this.rowCount/this.pageSize)-1),0)}get isFixedHeader(){const ie=this.headerHeight;return"string"!=typeof ie||"auto"!==ie}get isFixedRow(){return"auto"!==this.rowHeight}get isVertScroll(){return this.scrollbarV}get isVirtualized(){return this.virtualization}get isHorScroll(){return this.scrollbarH}get isSelectable(){return void 0!==this.selectionType}get isCheckboxSelection(){return this.selectionType===tr.checkbox}get isCellSelection(){return this.selectionType===tr.cell}get isSingleSelection(){return this.selectionType===tr.single}get isMultiSelection(){return this.selectionType===tr.multi}get isMultiClickSelection(){return this.selectionType===tr.multiClick}set columnTemplates(ie){this._columnTemplates=ie,this.translateColumns(ie)}get columnTemplates(){return this._columnTemplates}get allRowsSelected(){let ie=this.rows&&this.selected&&this.selected.length===this.rows.length;if(this.bodyComponent&&this.selectAllRowsOnPage){const Ze=this.bodyComponent.indexes;ie=this.selected.length===Ze.last-Ze.first}return this.selected&&this.rows&&0!==this.rows.length&&ie}ngOnInit(){this.recalculate()}ngAfterViewInit(){this.externalSorting||this.sortInternalRows(),!(typeof requestAnimationFrame>"u")&&requestAnimationFrame(()=>{this.recalculate(),this.externalPaging&&this.scrollbarV&&this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:0})})}ngAfterContentInit(){this.columnTemplates.changes.subscribe(ie=>this.translateColumns(ie)),this.listenForColumnInputChanges()}translateColumns(ie){if(ie){const Ze=ie.toArray();Ze.length&&(this._internalColumns=function _r(gt){const Tn=[];for(const ie of gt){const Ze={},Jt=Object.getOwnPropertyNames(ie);for(const gn of Jt)Ze[gn]=ie[gn];ie.headerTemplate&&(Ze.headerTemplate=ie.headerTemplate),ie.cellTemplate&&(Ze.cellTemplate=ie.cellTemplate),ie.summaryFunc&&(Ze.summaryFunc=ie.summaryFunc),ie.summaryTemplate&&(Ze.summaryTemplate=ie.summaryTemplate),Tn.push(Ze)}return Tn}(Ze),gr(this._internalColumns),this.recalculateColumns(),this.sortInternalRows(),this.cd.markForCheck())}}groupArrayBy(ie,Ze){const Jt=new Map;return ie.forEach(Bi=>{const Xi=Bi[Ze];Jt.has(Xi)?Jt.get(Xi).push(Bi):Jt.set(Xi,[Bi])}),Array.from(Jt,Bi=>((Bi,Xi)=>({key:Bi,value:Xi}))(Bi[0],Bi[1]))}ngDoCheck(){this.rowDiffer.diff(this.rows)&&(this.externalSorting?this._internalRows=[...this.rows]:this.sortInternalRows(),this._internalRows=an(this._internalRows,ze(this.treeFromRelation),ze(this.treeToRelation)),this.recalculatePages(),this.cd.markForCheck())}recalculate(){this.recalculateDims(),this.recalculateColumns(),this.cd.markForCheck()}onWindowResize(){this.recalculate()}recalculateColumns(ie=this._internalColumns,Ze=-1,Jt=this.scrollbarH){if(!ie)return;let gn=this._innerWidth;return this.scrollbarV&&(gn-=this.scrollbarHelper.width),this.columnMode===Pr.force?function gs(gt,Tn,ie,Ze,Jt=300){const gn=gt.slice(ie+1,gt.length).filter(Js=>!1!==Js.canAutoResize);for(const Js of gn)Js.$$oldWidth||(Js.$$oldWidth=Js.width);let vi=0,Bi=!1,Xi=la(gt,Jt),ws=Tn-Xi;const ds=[];do{vi=ws/gn.length,Bi=Xi>=Tn;for(const Js of gn){if(Bi&&Ze)Js.width=Js.$$oldWidth||Js.width||Jt;else{const Ll=(Js.width||Jt)+vi;Js.minWidth&&Ll<Js.minWidth?(Js.width=Js.minWidth,ds.push(Js)):Js.maxWidth&&Ll>Js.maxWidth?(Js.width=Js.maxWidth,ds.push(Js)):Js.width=Ll}Js.width=Math.max(0,Js.width)}Xi=la(gt),ws=Tn-Xi,Is(gn,ds)}while(ws>1&&0!==gn.length)}(ie,gn,Ze,Jt):this.columnMode===Pr.flex&&function jo(gt,Tn){const ie=function _s(gt,Tn){let ie=0;for(const Ze of gt)ie+=Tn&&Ze[Tn]?Ze[Tn]:Ze.width;return ie}(gt),Ze=function ts(gt){let Tn=0;for(const ie of gt)Tn+=ie.flexGrow||0;return Tn}(gt),Jt=Ci(gt);ie!==Tn&&function ss(gt,Tn,ie){for(const gn in gt)for(const vi of gt[gn])vi.canAutoResize?vi.width=0:(Tn-=vi.width,ie-=vi.flexGrow?vi.flexGrow:0);const Ze={};let Jt=Tn;do{const gn=Jt/ie;Jt=0;for(const vi in gt)for(const Bi of gt[vi])if(Bi.canAutoResize&&!Ze[Bi.prop]){const Xi=Bi.width+Bi.flexGrow*gn;void 0!==Bi.minWidth&&Xi<Bi.minWidth?(Jt+=Xi-Bi.minWidth,Bi.width=Bi.minWidth,Ze[Bi.prop]=!0):Bi.width=Xi}}while(0!==Jt)}(Jt,Tn,Ze)}(ie,gn),ie}recalculateDims(){const ie=this.dimensionsHelper.getDimensions(this.element);if(this._innerWidth=Math.floor(ie.width),this.scrollbarV){let Ze=ie.height;this.headerHeight&&(Ze-=this.headerHeight),this.footerHeight&&(Ze-=this.footerHeight),this.bodyHeight=Ze}this.recalculatePages()}recalculatePages(){this.pageSize=this.calcPageSize(),this.rowCount=this.calcRowCount()}onBodyPage({offset:ie}){this.externalPaging&&!this.virtualization||(this.offset=ie,this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:this.offset}))}onBodyScroll(ie){this._offsetX.next(ie.offsetX),this.scroll.emit(ie),this.cd.detectChanges()}onFooterPage(ie){this.offset=ie.page-1,this.bodyComponent.updateOffsetY(this.offset),this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:this.offset}),this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected}))}calcPageSize(ie=this.rows){if(this.scrollbarV&&this.virtualization){const Ze=Math.ceil(this.bodyHeight/this.rowHeight);return Math.max(Ze,0)}return void 0!==this.limit?this.limit:ie?ie.length:0}calcRowCount(ie=this.rows){return this.externalPaging?this.count:ie?this.groupedRows?this.groupedRows.length:null!=this.treeFromRelation&&null!=this.treeToRelation?this._internalRows.length:ie.length:0}onColumnContextmenu({event:ie,column:Ze}){this.tableContextmenu.emit({event:ie,type:nr.header,content:Ze})}onRowContextmenu({event:ie,row:Ze}){this.tableContextmenu.emit({event:ie,type:nr.body,content:Ze})}onColumnResize({column:ie,newValue:Ze}){if(void 0===ie)return;let Jt;const gn=this._internalColumns.map((vi,Bi)=>((vi=Object.assign({},vi)).$$id===ie.$$id&&(Jt=Bi,vi.width=Ze,vi.$$oldWidth=Ze),vi));this.recalculateColumns(gn,Jt),this._internalColumns=gn,this.resize.emit({column:ie,newValue:Ze})}onColumnReorder({column:ie,newValue:Ze,prevValue:Jt}){const gn=this._internalColumns.map(vi=>Object.assign({},vi));if(this.swapColumns){const vi=gn[Ze];gn[Ze]=ie,gn[Jt]=vi}else if(Ze>Jt){const vi=gn[Jt];for(let Bi=Jt;Bi<Ze;Bi++)gn[Bi]=gn[Bi+1];gn[Ze]=vi}else{const vi=gn[Jt];for(let Bi=Jt;Bi>Ze;Bi--)gn[Bi]=gn[Bi-1];gn[Ze]=vi}this._internalColumns=gn,this.reorder.emit({column:ie,newValue:Ze,prevValue:Jt})}onColumnSort(ie){this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected})),this.sorts=ie.sorts,!1===this.externalSorting&&this.sortInternalRows(),this._internalRows=an(this._internalRows,ze(this.treeFromRelation),ze(this.treeToRelation)),this.offset=0,this.bodyComponent.updateOffsetY(this.offset),this.sort.emit(ie)}onHeaderSelect(ie){if(this.bodyComponent&&this.selectAllRowsOnPage){const Ze=this.bodyComponent.indexes.first,Jt=this.bodyComponent.indexes.last,gn=this.selected.length===Jt-Ze;this.selected=[],gn||this.selected.push(...this._internalRows.slice(Ze,Jt))}else{const Ze=this.selected.length===this.rows.length;this.selected=[],Ze||this.selected.push(...this.rows)}this.select.emit({selected:this.selected})}onBodySelect(ie){this.select.emit(ie)}onTreeAction(ie){const Ze=ie.row,Jt=this._rows.findIndex(gn=>gn[this.treeToRelation]===ie.row[this.treeToRelation]);this.treeAction.emit({row:Ze,rowIndex:Jt})}ngOnDestroy(){this._subscriptions.forEach(ie=>ie.unsubscribe())}listenForColumnInputChanges(){this._subscriptions.push(this.columnChangesService.columnInputChanges$.subscribe(()=>{this.columnTemplates&&this.columnTemplates.notifyOnChanges()}))}sortInternalRows(){this._internalRows=function qa(gt,Tn,ie){if(!gt)return[];if(!ie||!ie.length||!Tn)return[...gt];const Ze=new Map;gt.forEach((Bi,Xi)=>Ze.set(Bi,Xi));const Jt=[...gt],gn=Tn.reduce((Bi,Xi)=>(Xi.comparator&&"function"==typeof Xi.comparator&&(Bi[Xi.prop]=Xi.comparator),Bi),{}),vi=ie.map(Bi=>{const Xi=Bi.prop;return{prop:Xi,dir:Bi.dir,valueGetter:jt(Xi),compareFn:gn[Xi]||gl}});return Jt.sort(function(Bi,Xi){for(const ws of vi){const{prop:ds,valueGetter:qs}=ws,Js=qs(Bi,ds),Ll=qs(Xi,ds),vl=ws.dir!==Ro.desc?ws.compareFn(Js,Ll,Bi,Xi,ws.dir):-ws.compareFn(Js,Ll,Bi,Xi,ws.dir);if(0!==vl)return vl}return Ze.has(Bi)&&Ze.has(Xi)?Ze.get(Bi)<Ze.get(Xi)?-1:1:0})}(this._internalRows,this._internalColumns,this.sorts)}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(so,4),r.Y36(kr,4),r.Y36(r.sBO),r.Y36(r.SBq),r.Y36(r.aQg),r.Y36(Ei),r.Y36("configuration",8))},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["ngx-datatable"]],contentQueries:function(ie,Ze,Jt){if(1&ie&&(r.Suo(Jt,wr,5),r.Suo(Jt,Dn,5),r.Suo(Jt,Ti,5),r.Suo(Jt,Ot,4)),2&ie){let gn;r.iGM(gn=r.CRH())&&(Ze.rowDetail=gn.first),r.iGM(gn=r.CRH())&&(Ze.groupHeader=gn.first),r.iGM(gn=r.CRH())&&(Ze.footer=gn.first),r.iGM(gn=r.CRH())&&(Ze.columnTemplates=gn)}},viewQuery:function(ie,Ze){if(1&ie&&(r.Gf(ci,5),r.Gf(_o,5)),2&ie){let Jt;r.iGM(Jt=r.CRH())&&(Ze.bodyComponent=Jt.first),r.iGM(Jt=r.CRH())&&(Ze.headerComponent=Jt.first)}},hostAttrs:[1,"ngx-datatable"],hostVars:22,hostBindings:function(ie,Ze){1&ie&&r.NdJ("resize",function(){return Ze.onWindowResize()},!1,r.Jf7),2&ie&&r.ekj("fixed-header",Ze.isFixedHeader)("fixed-row",Ze.isFixedRow)("scroll-vertical",Ze.isVertScroll)("virtualized",Ze.isVirtualized)("scroll-horz",Ze.isHorScroll)("selectable",Ze.isSelectable)("checkbox-selection",Ze.isCheckboxSelection)("cell-selection",Ze.isCellSelection)("single-selection",Ze.isSingleSelection)("multi-selection",Ze.isMultiSelection)("multi-click-selection",Ze.isMultiClickSelection)},inputs:{selected:"selected",scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",rowHeight:"rowHeight",columnMode:"columnMode",headerHeight:"headerHeight",footerHeight:"footerHeight",externalPaging:"externalPaging",externalSorting:"externalSorting",loadingIndicator:"loadingIndicator",reorderable:"reorderable",swapColumns:"swapColumns",sortType:"sortType",sorts:"sorts",cssClasses:"cssClasses",messages:"messages",groupExpansionDefault:"groupExpansionDefault",selectAllRowsOnPage:"selectAllRowsOnPage",virtualization:"virtualization",summaryRow:"summaryRow",summaryHeight:"summaryHeight",summaryPosition:"summaryPosition",rowIdentity:"rowIdentity",rows:"rows",groupedRows:"groupedRows",groupRowsBy:"groupRowsBy",columns:"columns",limit:"limit",count:"count",offset:"offset",targetMarkerTemplate:"targetMarkerTemplate",selectionType:"selectionType",rowClass:"rowClass",selectCheck:"selectCheck",displayCheck:"displayCheck",trackByProp:"trackByProp",treeFromRelation:"treeFromRelation",treeToRelation:"treeToRelation"},outputs:{scroll:"scroll",activate:"activate",select:"select",sort:"sort",page:"page",reorder:"reorder",resize:"resize",tableContextmenu:"tableContextmenu",treeAction:"treeAction"},decls:5,vars:34,consts:[["visibilityObserver","",3,"visible"],[3,"sorts","sortType","scrollbarH","innerWidth","offsetX","dealsWithGroup","columns","headerHeight","reorderable","targetMarkerTemplate","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","selectionType","sort","resize","reorder","select","columnContextmenu",4,"ngIf"],[3,"groupRowsBy","groupedRows","rows","groupExpansionDefault","scrollbarV","scrollbarH","virtualization","loadingIndicator","externalPaging","rowHeight","rowCount","offset","trackByProp","columns","pageSize","offsetX","rowDetail","groupHeader","selected","innerWidth","bodyHeight","selectionType","emptyMessage","rowIdentity","rowClass","selectCheck","displayCheck","summaryRow","summaryHeight","summaryPosition","page","activate","rowContextmenu","select","scroll","treeAction"],[3,"rowCount","pageSize","offset","footerHeight","footerTemplate","totalMessage","pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","selectedCount","selectedMessage","pagerNextIcon","page",4,"ngIf"],[3,"sorts","sortType","scrollbarH","innerWidth","offsetX","dealsWithGroup","columns","headerHeight","reorderable","targetMarkerTemplate","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","selectionType","sort","resize","reorder","select","columnContextmenu"],[3,"rowCount","pageSize","offset","footerHeight","footerTemplate","totalMessage","pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","selectedCount","selectedMessage","pagerNextIcon","page"]],template:function(ie,Ze){1&ie&&(r.TgZ(0,"div",0),r.NdJ("visible",function(){return Ze.recalculate()}),r.YNc(1,ce,2,17,"datatable-header",1),r.TgZ(2,"datatable-body",2),r.NdJ("page",function(gn){return Ze.onBodyPage(gn)})("activate",function(gn){return Ze.activate.emit(gn)})("rowContextmenu",function(gn){return Ze.onRowContextmenu(gn)})("select",function(gn){return Ze.onBodySelect(gn)})("scroll",function(gn){return Ze.onBodyScroll(gn)})("treeAction",function(gn){return Ze.onTreeAction(gn)}),r.ALo(3,"async"),r.qZA(),r.YNc(4,se,1,12,"datatable-footer",3),r.qZA()),2&ie&&(r.xp6(1),r.Q6J("ngIf",Ze.headerHeight),r.xp6(1),r.Q6J("groupRowsBy",Ze.groupRowsBy)("groupedRows",Ze.groupedRows)("rows",Ze._internalRows)("groupExpansionDefault",Ze.groupExpansionDefault)("scrollbarV",Ze.scrollbarV)("scrollbarH",Ze.scrollbarH)("virtualization",Ze.virtualization)("loadingIndicator",Ze.loadingIndicator)("externalPaging",Ze.externalPaging)("rowHeight",Ze.rowHeight)("rowCount",Ze.rowCount)("offset",Ze.offset)("trackByProp",Ze.trackByProp)("columns",Ze._internalColumns)("pageSize",Ze.pageSize)("offsetX",r.lcZ(3,32,Ze._offsetX))("rowDetail",Ze.rowDetail)("groupHeader",Ze.groupHeader)("selected",Ze.selected)("innerWidth",Ze._innerWidth)("bodyHeight",Ze.bodyHeight)("selectionType",Ze.selectionType)("emptyMessage",Ze.messages.emptyMessage)("rowIdentity",Ze.rowIdentity)("rowClass",Ze.rowClass)("selectCheck",Ze.selectCheck)("displayCheck",Ze.displayCheck)("summaryRow",Ze.summaryRow)("summaryHeight",Ze.summaryHeight)("summaryPosition",Ze.summaryPosition),r.xp6(2),r.Q6J("ngIf",Ze.footerHeight))},dependencies:function(){return[a.O5,mr,_o,ci,Rl,a.Ov]},styles:[".ngx-datatable{display:block;justify-content:center;overflow:hidden;position:relative;transform:translateZ(0)}.ngx-datatable [hidden]{display:none!important}.ngx-datatable *,.ngx-datatable :after,.ngx-datatable :before{box-sizing:border-box}.ngx-datatable.scroll-vertical .datatable-body{overflow-y:auto}.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper{position:absolute}.ngx-datatable.scroll-horz .datatable-body{-webkit-overflow-scrolling:touch;overflow-x:auto}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner{white-space:nowrap}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row{white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable .datatable-body-row,.ngx-datatable .datatable-header-inner,.ngx-datatable .datatable-row-center{-o-flex-flow:row;display:flex;flex-direction:row;flex-flow:row}.ngx-datatable .datatable-body-cell,.ngx-datatable .datatable-header-cell{display:inline-block;line-height:1.625;overflow-x:hidden;vertical-align:top}.ngx-datatable .datatable-body-cell:focus,.ngx-datatable .datatable-header-cell:focus{outline:none}.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{z-index:9}.ngx-datatable .datatable-row-center,.ngx-datatable .datatable-row-group,.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{position:relative}.ngx-datatable .datatable-header{display:block;overflow:hidden}.ngx-datatable .datatable-header .datatable-header-inner{-webkit-align-items:stretch;align-items:stretch}.ngx-datatable .datatable-header .datatable-header-cell{display:inline-block;position:relative}.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper{cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper{cursor:move}.ngx-datatable .datatable-header .datatable-header-cell .sort-btn{cursor:pointer;display:inline-block;line-height:100%;vertical-align:middle}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable{bottom:0;display:inline-block;padding:0 4px;position:absolute;right:0;top:0;visibility:hidden;width:5px}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle{cursor:ew-resize}.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable{visibility:visible}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker{bottom:0;position:absolute;top:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft{right:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight{left:0}.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap{height:inherit}.ngx-datatable .datatable-body{display:block;position:relative;z-index:10}.ngx-datatable .datatable-body .datatable-scroll{display:inline-block}.ngx-datatable .datatable-body .datatable-row-detail{overflow-y:hidden}.ngx-datatable .datatable-body .datatable-row-wrapper{display:flex;flex-direction:column}.ngx-datatable .datatable-body .datatable-body-row{outline:none}.ngx-datatable .datatable-body .datatable-body-row>div{display:flex}.ngx-datatable .datatable-footer{display:block;overflow:auto;width:100%}.ngx-datatable .datatable-footer .datatable-footer-inner{align-items:center;display:flex;width:100%}.ngx-datatable .datatable-footer .selected-count .page-count{flex:1 1 40%}.ngx-datatable .datatable-footer .selected-count .datatable-pager{flex:1 1 60%}.ngx-datatable .datatable-footer .page-count{flex:1 1 20%}.ngx-datatable .datatable-footer .datatable-pager{flex:1 1 80%;text-align:right}.ngx-datatable .datatable-footer .datatable-pager .pager,.ngx-datatable .datatable-footer .datatable-pager .pager li{display:inline-block;list-style:none;margin:0;padding:0}.ngx-datatable .datatable-footer .datatable-pager .pager li,.ngx-datatable .datatable-footer .datatable-pager .pager li a{outline:none}.ngx-datatable .datatable-footer .datatable-pager .pager li a{cursor:pointer;display:inline-block}.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a{cursor:not-allowed}"],encapsulation:2,changeDetection:0}),(0,m.gn)([es(5)],gt.prototype,"onWindowResize",null),gt})(),$a=(()=>{class gt{constructor(ie){this.cd=ie,this.sort=new r.vpe,this.select=new r.vpe,this.columnContextmenu=new r.vpe(!1),this.sortFn=this.onSort.bind(this),this.selectFn=this.select.emit.bind(this.select),this.cellContext={column:this.column,sortDir:this.sortDir,sortFn:this.sortFn,allRowsSelected:this.allRowsSelected,selectFn:this.selectFn}}set allRowsSelected(ie){this._allRowsSelected=ie,this.cellContext.allRowsSelected=ie}get allRowsSelected(){return this._allRowsSelected}set column(ie){this._column=ie,this.cellContext.column=ie,this.cd.markForCheck()}get column(){return this._column}set sorts(ie){this._sorts=ie,this.sortDir=this.calcSortDir(ie),this.cellContext.sortDir=this.sortDir,this.sortClass=this.calcSortClass(this.sortDir),this.cd.markForCheck()}get sorts(){return this._sorts}get columnCssClasses(){let ie="datatable-header-cell";if(this.column.sortable&&(ie+=" sortable"),this.column.resizeable&&(ie+=" resizeable"),this.column.headerClass)if("string"==typeof this.column.headerClass)ie+=" "+this.column.headerClass;else if("function"==typeof this.column.headerClass){const Jt=this.column.headerClass({column:this.column});if("string"==typeof Jt)ie+=Jt;else if("object"==typeof Jt){const gn=Object.keys(Jt);for(const vi of gn)!0===Jt[vi]&&(ie+=` ${vi}`)}}const Ze=this.sortDir;return Ze&&(ie+=` sort-active sort-${Ze}`),ie}get name(){return void 0===this.column.headerTemplate?this.column.name:void 0}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get width(){return this.column.width}get isCheckboxable(){return this.column.checkboxable&&this.column.headerCheckboxable&&this.selectionType===tr.checkbox}onContextmenu(ie){this.columnContextmenu.emit({event:ie,column:this.column})}ngOnInit(){this.sortClass=this.calcSortClass(this.sortDir)}calcSortDir(ie){if(ie&&this.column){const Ze=ie.find(Jt=>Jt.prop===this.column.prop);if(Ze)return Ze.dir}}onSort(){if(!this.column.sortable)return;const ie=function jl(gt,Tn){return gt===Zn.single?Tn===Ro.asc?Ro.desc:Ro.asc:Tn?Tn===Ro.asc?Ro.desc:void 0:Ro.asc}(this.sortType,this.sortDir);this.sort.emit({column:this.column,prevValue:this.sortDir,newValue:ie})}calcSortClass(ie){if(this.cellContext.column.sortable)return ie===Ro.asc?`sort-btn sort-asc ${this.sortAscendingIcon}`:ie===Ro.desc?`sort-btn sort-desc ${this.sortDescendingIcon}`:`sort-btn ${this.sortUnsetIcon}`}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.sBO))},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-header-cell"]],hostAttrs:[1,"datatable-header-cell"],hostVars:11,hostBindings:function(ie,Ze){1&ie&&r.NdJ("contextmenu",function(gn){return Ze.onContextmenu(gn)}),2&ie&&(r.uIk("title",Ze.name),r.Tol(Ze.columnCssClasses),r.Udp("min-width",Ze.minWidth,"px")("max-width",Ze.maxWidth,"px")("width",Ze.width,"px")("height",Ze.headerHeight,"px"))},inputs:{allRowsSelected:"allRowsSelected",column:"column",sorts:"sorts",sortType:"sortType",sortAscendingIcon:"sortAscendingIcon",sortDescendingIcon:"sortDescendingIcon",sortUnsetIcon:"sortUnsetIcon",isTarget:"isTarget",targetMarkerTemplate:"targetMarkerTemplate",targetMarkerContext:"targetMarkerContext",selectionType:"selectionType",headerHeight:"headerHeight"},outputs:{sort:"sort",select:"select",columnContextmenu:"columnContextmenu"},decls:6,vars:6,consts:[[1,"datatable-header-cell-template-wrap"],[4,"ngIf"],["class","datatable-checkbox",4,"ngIf"],["class","datatable-header-cell-wrapper",4,"ngIf"],[3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"datatable-checkbox"],["type","checkbox",3,"checked","change"],[1,"datatable-header-cell-wrapper"],[1,"datatable-header-cell-label","draggable",3,"innerHTML","click"]],template:function(ie,Ze){1&ie&&(r.TgZ(0,"div",0),r.YNc(1,Te,1,2,null,1),r.YNc(2,$e,2,1,"label",2),r.YNc(3,ge,2,1,"span",3),r.YNc(4,ot,1,2,null,1),r.TgZ(5,"span",4),r.NdJ("click",function(){return Ze.onSort()}),r.qZA()()),2&ie&&(r.xp6(1),r.Q6J("ngIf",Ze.isTarget),r.xp6(1),r.Q6J("ngIf",Ze.isCheckboxable),r.xp6(1),r.Q6J("ngIf",!Ze.column.headerTemplate),r.xp6(1),r.Q6J("ngIf",Ze.column.headerTemplate),r.xp6(1),r.Tol(Ze.sortClass))},dependencies:[a.O5,a.tP],encapsulation:2,changeDetection:0}),gt})(),Rl=(()=>{class gt{constructor(){this.selectedCount=0,this.page=new r.vpe}get isVisible(){return this.rowCount/this.pageSize>1}get curPage(){return this.offset+1}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-footer"]],hostAttrs:[1,"datatable-footer"],inputs:{selectedCount:"selectedCount",footerHeight:"footerHeight",rowCount:"rowCount",pageSize:"pageSize",offset:"offset",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon",totalMessage:"totalMessage",footerTemplate:"footerTemplate",selectedMessage:"selectedMessage"},outputs:{page:"page"},decls:4,vars:8,consts:[[1,"datatable-footer-inner",3,"ngClass"],[4,"ngIf"],["class","page-count",4,"ngIf"],[3,"pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","pagerNextIcon","page","size","count","hidden","change",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"page-count"],[3,"pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","pagerNextIcon","page","size","count","hidden","change"]],template:function(ie,Ze){1&ie&&(r.TgZ(0,"div",0),r.YNc(1,He,1,8,null,1),r.YNc(2,Le,3,3,"div",2),r.YNc(3,Pt,1,8,"datatable-pager",3),r.qZA()),2&ie&&(r.Udp("height",Ze.footerHeight,"px"),r.Q6J("ngClass",r.VKq(6,it,Ze.selectedMessage)),r.xp6(1),r.Q6J("ngIf",Ze.footerTemplate),r.xp6(1),r.Q6J("ngIf",!Ze.footerTemplate),r.xp6(1),r.Q6J("ngIf",!Ze.footerTemplate))},dependencies:function(){return[a.mk,a.O5,a.tP,Ji]},encapsulation:2,changeDetection:0}),gt})(),Ji=(()=>{class gt{constructor(){this.change=new r.vpe,this._count=0,this._page=1,this._size=0}set size(ie){this._size=ie,this.pages=this.calcPages()}get size(){return this._size}set count(ie){this._count=ie,this.pages=this.calcPages()}get count(){return this._count}set page(ie){this._page=ie,this.pages=this.calcPages()}get page(){return this._page}get totalPages(){const ie=this.size<1?1:Math.ceil(this.count/this.size);return Math.max(ie||0,1)}canPrevious(){return this.page>1}canNext(){return this.page<this.totalPages}prevPage(){this.selectPage(this.page-1)}nextPage(){this.selectPage(this.page+1)}selectPage(ie){ie>0&&ie<=this.totalPages&&ie!==this.page&&(this.page=ie,this.change.emit({page:ie}))}calcPages(ie){const Ze=[];let Jt=1,gn=this.totalPages;ie=ie||this.page,5<this.totalPages&&(Jt=ie-Math.floor(2.5),gn=ie+Math.floor(2.5),Jt<1?(Jt=1,gn=Math.min(Jt+5-1,this.totalPages)):gn>this.totalPages&&(Jt=Math.max(this.totalPages-5+1,1),gn=this.totalPages));for(let Xi=Jt;Xi<=gn;Xi++)Ze.push({number:Xi,text:Xi});return Ze}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-pager"]],hostAttrs:[1,"datatable-pager"],inputs:{size:"size",count:"count",page:"page",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon"},outputs:{change:"change"},decls:14,vars:21,consts:[[1,"pager"],["role","button","aria-label","go to first page","href","javascript:void(0)",3,"click"],["role","button","aria-label","go to previous page","href","javascript:void(0)",3,"click"],["role","button","class","pages",3,"active",4,"ngFor","ngForOf"],["role","button","aria-label","go to next page","href","javascript:void(0)",3,"click"],["role","button","aria-label","go to last page","href","javascript:void(0)",3,"click"],["role","button",1,"pages"],["href","javascript:void(0)",3,"click"]],template:function(ie,Ze){1&ie&&(r.TgZ(0,"ul",0)(1,"li")(2,"a",1),r.NdJ("click",function(){return Ze.selectPage(1)}),r._UZ(3,"i"),r.qZA()(),r.TgZ(4,"li")(5,"a",2),r.NdJ("click",function(){return Ze.prevPage()}),r._UZ(6,"i"),r.qZA()(),r.YNc(7,Xt,3,4,"li",3),r.TgZ(8,"li")(9,"a",4),r.NdJ("click",function(){return Ze.nextPage()}),r._UZ(10,"i"),r.qZA()(),r.TgZ(11,"li")(12,"a",5),r.NdJ("click",function(){return Ze.selectPage(Ze.totalPages)}),r._UZ(13,"i"),r.qZA()()()),2&ie&&(r.xp6(1),r.ekj("disabled",!Ze.canPrevious()),r.xp6(2),r.Tol(Ze.pagerPreviousIcon),r.xp6(1),r.ekj("disabled",!Ze.canPrevious()),r.xp6(2),r.Tol(Ze.pagerLeftArrowIcon),r.xp6(1),r.Q6J("ngForOf",Ze.pages),r.xp6(1),r.ekj("disabled",!Ze.canNext()),r.xp6(2),r.Tol(Ze.pagerRightArrowIcon),r.xp6(1),r.ekj("disabled",!Ze.canNext()),r.xp6(2),r.Tol(Ze.pagerNextIcon))},dependencies:[a.sg],encapsulation:2,changeDetection:0}),gt})(),Ha=(()=>{class gt{}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-progress"]],decls:3,vars:0,consts:[["role","progressbar",1,"progress-linear"],[1,"container"],[1,"bar"]],template:function(ie,Ze){1&ie&&(r.TgZ(0,"div",0)(1,"div",1),r._UZ(2,"div",2),r.qZA()())},encapsulation:2,changeDetection:0}),gt})();var Ts=(()=>{return(gt=Ts||(Ts={}))[gt.up=38]="up",gt[gt.down=40]="down",gt[gt.return=13]="return",gt[gt.escape=27]="escape",gt[gt.left=37]="left",gt[gt.right=39]="right",Ts;var gt})();let hs=(()=>{class gt{constructor(ie,Ze,Jt,gn){this.differs=ie,this.scrollbarHelper=Ze,this.cd=Jt,this.treeStatus="collapsed",this.activate=new r.vpe,this.treeAction=new r.vpe,this._groupStyles={left:{},center:{},right:{}},this._element=gn.nativeElement,this._rowDiffer=ie.find({}).create()}set columns(ie){this._columns=ie,this.recalculateColumns(ie),this.buildStylesByGroup()}get columns(){return this._columns}set innerWidth(ie){if(this._columns){const Ze=Ci(this._columns);this._columnGroupWidths=Ai(Ze,this._columns)}this._innerWidth=ie,this.recalculateColumns(),this.buildStylesByGroup()}get innerWidth(){return this._innerWidth}set offsetX(ie){this._offsetX=ie,this.buildStylesByGroup()}get offsetX(){return this._offsetX}get cssClass(){let ie="datatable-body-row";if(this.isSelected&&(ie+=" active"),this.rowIndex%2!=0&&(ie+=" datatable-row-odd"),this.rowIndex%2==0&&(ie+=" datatable-row-even"),this.rowClass){const Ze=this.rowClass(this.row);if("string"==typeof Ze)ie+=` ${Ze}`;else if("object"==typeof Ze){const Jt=Object.keys(Ze);for(const gn of Jt)!0===Ze[gn]&&(ie+=` ${gn}`)}}return ie}get columnsTotalWidths(){return this._columnGroupWidths.total}ngDoCheck(){this._rowDiffer.diff(this.row)&&this.cd.markForCheck()}trackByGroups(ie,Ze){return Ze.type}columnTrackingFn(ie,Ze){return Ze.$$id}buildStylesByGroup(){this._groupStyles.left=this.calcStylesByGroup("left"),this._groupStyles.center=this.calcStylesByGroup("center"),this._groupStyles.right=this.calcStylesByGroup("right"),this.cd.markForCheck()}calcStylesByGroup(ie){const Ze=this._columnGroupWidths,Jt=this.offsetX,gn={width:`${Ze[ie]}px`};if("left"===ie)Bn(gn,Jt,0);else if("right"===ie){const vi=parseInt(this.innerWidth+"",0);Bn(gn,-1*(Ze.total-vi-Jt+this.scrollbarHelper.width),0)}return gn}onActivate(ie,Ze){ie.cellIndex=Ze,ie.rowElement=this._element,this.activate.emit(ie)}onKeyDown(ie){const Ze=ie.keyCode;(Ze===Ts.return||Ze===Ts.down||Ze===Ts.up||Ze===Ts.left||Ze===Ts.right)&&ie.target===this._element&&(ie.preventDefault(),ie.stopPropagation(),this.activate.emit({type:"keydown",event:ie,row:this.row,rowElement:this._element}))}onMouseenter(ie){this.activate.emit({type:"mouseenter",event:ie,row:this.row,rowElement:this._element})}recalculateColumns(ie=this.columns){this._columns=ie;const Ze=Ci(this._columns);this._columnsByPin=dr(this._columns),this._columnGroupWidths=Ai(Ze,this._columns)}onTreeAction(){this.treeAction.emit()}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.aQg),r.Y36(so,4),r.Y36(r.sBO),r.Y36(r.SBq))},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-body-row"]],hostVars:6,hostBindings:function(ie,Ze){1&ie&&r.NdJ("keydown",function(gn){return Ze.onKeyDown(gn)})("mouseenter",function(gn){return Ze.onMouseenter(gn)}),2&ie&&(r.Tol(Ze.cssClass),r.Udp("width",Ze.columnsTotalWidths,"px")("height",Ze.rowHeight,"px"))},inputs:{treeStatus:"treeStatus",columns:"columns",innerWidth:"innerWidth",offsetX:"offsetX",expanded:"expanded",rowClass:"rowClass",row:"row",group:"group",isSelected:"isSelected",rowIndex:"rowIndex",displayCheck:"displayCheck",rowHeight:"rowHeight"},outputs:{activate:"activate",treeAction:"treeAction"},decls:1,vars:2,consts:[[3,"class","ngStyle",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle"],["tabindex","-1",3,"row","group","expanded","isSelected","rowIndex","column","rowHeight","displayCheck","treeStatus","activate","treeAction",4,"ngFor","ngForOf","ngForTrackBy"],["tabindex","-1",3,"row","group","expanded","isSelected","rowIndex","column","rowHeight","displayCheck","treeStatus","activate","treeAction"]],template:function(ie,Ze){1&ie&&r.YNc(0,pn,2,6,"div",0),2&ie&&r.Q6J("ngForOf",Ze._columnsByPin)("ngForTrackBy",Ze.trackByGroups)},dependencies:function(){return[a.sg,a.PC,Aa]},encapsulation:2,changeDetection:0}),gt})(),$s=(()=>{class gt{constructor(ie,Ze){this.cd=ie,this.differs=Ze,this.rowContextmenu=new r.vpe(!1),this.groupContext={group:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this.rowContext={row:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this._expanded=!1,this.rowDiffer=Ze.find({}).create()}set rowIndex(ie){this._rowIndex=ie,this.rowContext.rowIndex=ie,this.groupContext.rowIndex=ie,this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set expanded(ie){this._expanded=ie,this.groupContext.expanded=ie,this.rowContext.expanded=ie,this.cd.markForCheck()}get expanded(){return this._expanded}ngDoCheck(){this.rowDiffer.diff(this.row)&&(this.rowContext.row=this.row,this.groupContext.group=this.row,this.cd.markForCheck())}onContextmenu(ie){this.rowContextmenu.emit({event:ie,row:this.row})}getGroupHeaderStyle(){const ie={};return ie.transform="translate3d("+this.offsetX+"px, 0px, 0px)",ie["backface-visibility"]="hidden",ie.width=this.innerWidth,ie}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.sBO),r.Y36(r.aQg))},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-row-wrapper"]],hostAttrs:[1,"datatable-row-wrapper"],hostBindings:function(ie,Ze){1&ie&&r.NdJ("contextmenu",function(gn){return Ze.onContextmenu(gn)})},inputs:{rowIndex:"rowIndex",expanded:"expanded",innerWidth:"innerWidth",rowDetail:"rowDetail",groupHeader:"groupHeader",offsetX:"offsetX",detailRowHeight:"detailRowHeight",row:"row",groupedRows:"groupedRows"},outputs:{rowContextmenu:"rowContextmenu"},ngContentSelectors:T,decls:3,vars:3,consts:[["class","datatable-group-header",3,"ngStyle",4,"ngIf"],[4,"ngIf"],["class","datatable-row-detail",3,"height",4,"ngIf"],[1,"datatable-group-header",3,"ngStyle"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"datatable-row-detail"]],template:function(ie,Ze){1&ie&&(r.F$t(),r.YNc(0,qt,2,2,"div",0),r.YNc(1,sn,1,0,"ng-content",1),r.YNc(2,Kr,2,3,"div",2)),2&ie&&(r.Q6J("ngIf",Ze.groupHeader&&Ze.groupHeader.template),r.xp6(1),r.Q6J("ngIf",Ze.groupHeader&&Ze.groupHeader.template&&Ze.expanded||!Ze.groupHeader||!Ze.groupHeader.template),r.xp6(1),r.Q6J("ngIf",Ze.rowDetail&&Ze.rowDetail.template&&Ze.expanded))},dependencies:[a.O5,a.tP,a.PC],encapsulation:2,changeDetection:0}),gt})(),Aa=(()=>{class gt{constructor(ie,Ze){this.cd=Ze,this.activate=new r.vpe,this.treeAction=new r.vpe,this.isFocused=!1,this.onCheckboxChangeFn=this.onCheckboxChange.bind(this),this.activateFn=this.activate.emit.bind(this.activate),this.cellContext={onCheckboxChangeFn:this.onCheckboxChangeFn,activateFn:this.activateFn,row:this.row,group:this.group,value:this.value,column:this.column,rowHeight:this.rowHeight,isSelected:this.isSelected,rowIndex:this.rowIndex,treeStatus:this.treeStatus,onTreeAction:this.onTreeAction.bind(this)},this._element=ie.nativeElement}set group(ie){this._group=ie,this.cellContext.group=ie,this.checkValueUpdates(),this.cd.markForCheck()}get group(){return this._group}set rowHeight(ie){this._rowHeight=ie,this.cellContext.rowHeight=ie,this.checkValueUpdates(),this.cd.markForCheck()}get rowHeight(){return this._rowHeight}set isSelected(ie){this._isSelected=ie,this.cellContext.isSelected=ie,this.cd.markForCheck()}get isSelected(){return this._isSelected}set expanded(ie){this._expanded=ie,this.cellContext.expanded=ie,this.cd.markForCheck()}get expanded(){return this._expanded}set rowIndex(ie){this._rowIndex=ie,this.cellContext.rowIndex=ie,this.checkValueUpdates(),this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set column(ie){this._column=ie,this.cellContext.column=ie,this.checkValueUpdates(),this.cd.markForCheck()}get column(){return this._column}set row(ie){this._row=ie,this.cellContext.row=ie,this.checkValueUpdates(),this.cd.markForCheck()}get row(){return this._row}set sorts(ie){this._sorts=ie,this.calcSortDir=this.calcSortDir(ie)}get sorts(){return this._sorts}set treeStatus(ie){this._treeStatus="collapsed"!==ie&&"expanded"!==ie&&"loading"!==ie&&"disabled"!==ie?"collapsed":ie,this.cellContext.treeStatus=this._treeStatus,this.checkValueUpdates(),this.cd.markForCheck()}get treeStatus(){return this._treeStatus}get columnCssClasses(){let ie="datatable-body-cell";if(this.column.cellClass)if("string"==typeof this.column.cellClass)ie+=" "+this.column.cellClass;else if("function"==typeof this.column.cellClass){const Ze=this.column.cellClass({row:this.row,group:this.group,column:this.column,value:this.value,rowHeight:this.rowHeight});if("string"==typeof Ze)ie+=" "+Ze;else if("object"==typeof Ze){const Jt=Object.keys(Ze);for(const gn of Jt)!0===Ze[gn]&&(ie+=` ${gn}`)}}return this.sortDir||(ie+=" sort-active"),this.isFocused&&(ie+=" active"),this.sortDir===Ro.asc&&(ie+=" sort-asc"),this.sortDir===Ro.desc&&(ie+=" sort-desc"),ie}get width(){return this.column.width}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get height(){const ie=this.rowHeight;return isNaN(ie)?ie:ie+"px"}ngDoCheck(){this.checkValueUpdates()}ngOnDestroy(){this.cellTemplate&&this.cellTemplate.clear()}checkValueUpdates(){let ie="";if(this.row&&this.column){const Ze=this.column.$$valueGetter(this.row,this.column.prop),Jt=this.column.pipe;Jt?ie=Jt.transform(Ze):void 0!==ie&&(ie=Ze)}else ie="";this.value!==ie&&(this.value=ie,this.cellContext.value=ie,this.sanitizedValue=null!=ie?this.stripHtml(ie):ie,this.cd.markForCheck())}onFocus(){this.isFocused=!0}onBlur(){this.isFocused=!1}onClick(ie){this.activate.emit({type:"click",event:ie,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onDblClick(ie){this.activate.emit({type:"dblclick",event:ie,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onKeyDown(ie){const Ze=ie.keyCode;(Ze===Ts.return||Ze===Ts.down||Ze===Ts.up||Ze===Ts.left||Ze===Ts.right)&&ie.target===this._element&&(ie.preventDefault(),ie.stopPropagation(),this.activate.emit({type:"keydown",event:ie,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element}))}onCheckboxChange(ie){this.activate.emit({type:"checkbox",event:ie,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element,treeStatus:"collapsed"})}calcSortDir(ie){if(!ie)return;const Ze=ie.find(Jt=>Jt.prop===this.column.prop);return Ze?Ze.dir:void 0}stripHtml(ie){return ie.replace?ie.replace(/<\/?[^>]+(>|$)/g,""):ie}onTreeAction(){this.treeAction.emit(this.row)}calcLeftMargin(ie,Ze){return ie.isTreeColumn?Ze.level*(null!=ie.treeLevelIndent?ie.treeLevelIndent:50):0}}return gt.\u0275fac=function(ie){return new(ie||gt)(r.Y36(r.SBq),r.Y36(r.sBO))},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-body-cell"]],viewQuery:function(ie,Ze){if(1&ie&&r.Gf(Or,7,r.s_b),2&ie){let Jt;r.iGM(Jt=r.CRH())&&(Ze.cellTemplate=Jt.first)}},hostVars:10,hostBindings:function(ie,Ze){1&ie&&r.NdJ("focus",function(){return Ze.onFocus()})("blur",function(){return Ze.onBlur()})("click",function(gn){return Ze.onClick(gn)})("dblclick",function(gn){return Ze.onDblClick(gn)})("keydown",function(gn){return Ze.onKeyDown(gn)}),2&ie&&(r.Tol(Ze.columnCssClasses),r.Udp("width",Ze.width,"px")("min-width",Ze.minWidth,"px")("max-width",Ze.maxWidth,"px")("height",Ze.height))},inputs:{group:"group",rowHeight:"rowHeight",isSelected:"isSelected",expanded:"expanded",rowIndex:"rowIndex",column:"column",row:"row",sorts:"sorts",treeStatus:"treeStatus",displayCheck:"displayCheck"},outputs:{activate:"activate",treeAction:"treeAction"},decls:5,vars:6,consts:[[1,"datatable-body-cell-label"],["class","datatable-checkbox",4,"ngIf"],[4,"ngIf"],[3,"title","innerHTML",4,"ngIf"],[1,"datatable-checkbox"],["type","checkbox",3,"checked","click"],["class","datatable-tree-button",3,"disabled","click",4,"ngIf"],[1,"datatable-tree-button",3,"disabled","click"],["class","icon datatable-icon-collapse",4,"ngIf"],["class","icon datatable-icon-up",4,"ngIf"],["class","icon datatable-icon-down",4,"ngIf"],[1,"icon","datatable-icon-collapse"],[1,"icon","datatable-icon-up"],[1,"icon","datatable-icon-down"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"title","innerHTML"],["cellTemplate",""]],template:function(ie,Ze){1&ie&&(r.TgZ(0,"div",0),r.YNc(1,Lr,2,1,"label",1),r.YNc(2,wn,3,2,"ng-container",2),r.YNc(3,jn,1,2,"span",3),r.YNc(4,Oi,2,2,null,2),r.qZA()),2&ie&&(r.Udp("margin-left",Ze.calcLeftMargin(Ze.column,Ze.row),"px"),r.xp6(1),r.Q6J("ngIf",Ze.column.checkboxable&&(!Ze.displayCheck||Ze.displayCheck(Ze.row,Ze.column,Ze.value))),r.xp6(1),r.Q6J("ngIf",Ze.column.isTreeColumn),r.xp6(1),r.Q6J("ngIf",!Ze.column.cellTemplate),r.xp6(1),r.Q6J("ngIf",Ze.column.cellTemplate))},dependencies:[a.O5,a.tP],encapsulation:2,changeDetection:0}),gt})();function Ja(gt,Tn,ie){const Ze=ie(Tn,gt);return Ze>-1?gt.splice(Ze,1):gt.push(Tn),gt}let Xo=(()=>{class gt{constructor(){this.activate=new r.vpe,this.select=new r.vpe}selectRow(ie,Ze,Jt){if(!this.selectEnabled)return;const gn=this.selectionType===tr.checkbox,Bi=this.selectionType===tr.multiClick;let Xi=[];Xi=this.selectionType===tr.multi||gn||Bi?ie.shiftKey?function fa(gt,Tn,ie,Ze,Jt){const gn=ie<Ze;for(let vi=0;vi<Tn.length;vi++){let ds={start:0,end:0};ds=gn?{start:ie,end:Ze}:{start:Ze,end:ie+1},(gn&&vi<=Ze&&vi>=ie||!gn&&vi>=Ze&&vi<=ie)&&vi>=ds.start&&vi<=ds.end&&gt.push(Tn[vi])}return gt}([],this.rows,Ze,this.prevIndex,this.getRowSelectedIdx.bind(this)):Ja(ie.ctrlKey||ie.metaKey||Bi||gn?[...this.selected]:[],Jt,this.getRowSelectedIdx.bind(this)):Ja([],Jt,this.getRowSelectedIdx.bind(this)),"function"==typeof this.selectCheck&&(Xi=Xi.filter(this.selectCheck.bind(this))),this.selected.splice(0,this.selected.length),this.selected.push(...Xi),this.prevIndex=Ze,this.select.emit({selected:Xi})}onActivate(ie,Ze){const{type:Jt,event:gn,row:vi}=ie,Bi=this.selectionType===tr.checkbox;!Bi&&("click"===Jt||"dblclick"===Jt)||Bi&&"checkbox"===Jt?this.selectRow(gn,Ze,vi):"keydown"===Jt&&(gn.keyCode===Ts.return?this.selectRow(gn,Ze,vi):this.onKeyboardFocus(ie)),this.activate.emit(ie)}onKeyboardFocus(ie){const{keyCode:Ze}=ie.event;if(Ze===Ts.up||Ze===Ts.down||Ze===Ts.right||Ze===Ts.left){const gn=this.selectionType===tr.cell;ie.cellElement&&gn?gn&&this.focusCell(ie.cellElement,ie.rowElement,Ze,ie.cellIndex):this.focusRow(ie.rowElement,Ze)}}focusRow(ie,Ze){const Jt=this.getPrevNextRow(ie,Ze);Jt&&Jt.focus()}getPrevNextRow(ie,Ze){const Jt=ie.parentElement;if(Jt){let gn;if(Ze===Ts.up?gn=Jt.previousElementSibling:Ze===Ts.down&&(gn=Jt.nextElementSibling),gn&&gn.children.length)return gn.children[0]}}focusCell(ie,Ze,Jt,gn){let vi;if(Jt===Ts.left)vi=ie.previousElementSibling;else if(Jt===Ts.right)vi=ie.nextElementSibling;else if(Jt===Ts.up||Jt===Ts.down){const Bi=this.getPrevNextRow(Ze,Jt);if(Bi){const Xi=Bi.getElementsByClassName("datatable-body-cell");Xi.length&&(vi=Xi[gn])}}vi&&vi.focus()}getRowSelected(ie){return this.getRowSelectedIdx(ie,this.selected)>-1}getRowSelectedIdx(ie,Ze){if(!Ze||!Ze.length)return-1;const Jt=this.rowIdentity(ie);return Ze.findIndex(gn=>this.rowIdentity(gn)===Jt)}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-selection"]],inputs:{rows:"rows",selected:"selected",selectEnabled:"selectEnabled",selectionType:"selectionType",rowIdentity:"rowIdentity",selectCheck:"selectCheck"},outputs:{activate:"activate",select:"select"},ngContentSelectors:T,decls:1,vars:0,template:function(ie,Ze){1&ie&&(r.F$t(),r.Hsn(0))},encapsulation:2,changeDetection:0}),gt})();function No(gt){const Tn=gt.filter(ie=>!!ie);return!Tn.length||Tn.some(ie=>"number"!=typeof ie)?null:Tn.reduce((ie,Ze)=>ie+Ze)}function Cs(gt){return null}let ns=(()=>{class gt{constructor(){this.summaryRow={}}ngOnChanges(){!this.columns||!this.rows||(this.updateInternalColumns(),this.updateValues())}updateInternalColumns(){this._internalColumns=this.columns.map(ie=>Object.assign(Object.assign({},ie),{cellTemplate:ie.summaryTemplate}))}updateValues(){this.summaryRow={},this.columns.filter(ie=>!ie.summaryTemplate).forEach(ie=>{const Ze=this.rows.map(gn=>gn[ie.prop]),Jt=this.getSummaryFunction(ie);this.summaryRow[ie.prop]=ie.pipe?ie.pipe.transform(Jt(Ze)):Jt(Ze)})}getSummaryFunction(ie){return void 0===ie.summaryFunc?No:null===ie.summaryFunc?Cs:ie.summaryFunc}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275cmp=r.Xpm({type:gt,selectors:[["datatable-summary-row"]],hostAttrs:[1,"datatable-summary-row"],inputs:{rows:"rows",columns:"columns",rowHeight:"rowHeight",offsetX:"offsetX",innerWidth:"innerWidth"},features:[r.TTD],decls:1,vars:1,consts:[["tabindex","-1",3,"innerWidth","offsetX","columns","rowHeight","row","rowIndex",4,"ngIf"],["tabindex","-1",3,"innerWidth","offsetX","columns","rowHeight","row","rowIndex"]],template:function(ie,Ze){1&ie&&r.YNc(0,Wi,1,6,"datatable-body-row",0),2&ie&&r.Q6J("ngIf",Ze.summaryRow&&Ze._internalColumns)},dependencies:[a.O5,hs],encapsulation:2}),gt})(),Fo=(()=>{class gt{static forRoot(ie){return{ngModule:gt,providers:[{provide:"configuration",useValue:ie}]}}}return gt.\u0275fac=function(ie){return new(ie||gt)},gt.\u0275mod=r.oAB({type:gt}),gt.\u0275inj=r.cJS({providers:[so,kr,Ei],imports:[a.ez]}),gt})();typeof document<"u"&&!document.elementsFromPoint&&(document.elementsFromPoint=function io(gt,Tn){const ie=[],Ze=[];let Jt,gn,vi;for(;(Jt=document.elementFromPoint(gt,Tn))&&-1===ie.indexOf(Jt)&&null!=Jt;)ie.push(Jt),Ze.push({value:Jt.style.getPropertyValue("pointer-events"),priority:Jt.style.getPropertyPriority("pointer-events")}),Jt.style.setProperty("pointer-events","none","important");for(gn=Ze.length;vi=Ze[--gn];)ie[gn].style.setProperty("pointer-events",vi.value?vi.value:"",vi.priority);return ie})},67506:E=>{"use strict";function C(a,c,u){a instanceof RegExp&&(a=s(a,u)),c instanceof RegExp&&(c=s(c,u));var e=r(a,c,u);return e&&{start:e[0],end:e[1],pre:u.slice(0,e[0]),body:u.slice(e[0]+a.length,e[1]),post:u.slice(e[1]+c.length)}}function s(a,c){var u=c.match(a);return u?u[0]:null}function r(a,c,u){var e,f,m,T,M,w=u.indexOf(a),D=u.indexOf(c,w+1),U=w;if(w>=0&&D>0){if(a===c)return[w,D];for(e=[],m=u.length;U>=0&&!M;)U==w?(e.push(U),w=u.indexOf(a,U+1)):1==e.length?M=[e.pop(),D]:((f=e.pop())<m&&(m=f,T=D),D=u.indexOf(c,U+1)),U=w<D&&w>=0?w:D;e.length&&(M=[m,T])}return M}E.exports=C,C.range=r},96434:(E,C)=>{"use strict";C.byteLength=function m(W){var $=f(W),F=$[1];return 3*($[0]+F)/4-F},C.toByteArray=function M(W){var $,se,J=f(W),F=J[0],X=J[1],de=new a(function T(W,$,J){return 3*($+J)/4-J}(0,F,X)),V=0,ce=X>0?F-4:F;for(se=0;se<ce;se+=4)$=r[W.charCodeAt(se)]<<18|r[W.charCodeAt(se+1)]<<12|r[W.charCodeAt(se+2)]<<6|r[W.charCodeAt(se+3)],de[V++]=$>>16&255,de[V++]=$>>8&255,de[V++]=255&$;return 2===X&&($=r[W.charCodeAt(se)]<<2|r[W.charCodeAt(se+1)]>>4,de[V++]=255&$),1===X&&($=r[W.charCodeAt(se)]<<10|r[W.charCodeAt(se+1)]<<4|r[W.charCodeAt(se+2)]>>2,de[V++]=$>>8&255,de[V++]=255&$),de},C.fromByteArray=function U(W){for(var $,J=W.length,F=J%3,X=[],V=0,ce=J-F;V<ce;V+=16383)X.push(D(W,V,V+16383>ce?ce:V+16383));return 1===F?X.push(s[($=W[J-1])>>2]+s[$<<4&63]+"=="):2===F&&X.push(s[($=(W[J-2]<<8)+W[J-1])>>10]+s[$>>4&63]+s[$<<2&63]+"="),X.join("")};for(var s=[],r=[],a=typeof Uint8Array<"u"?Uint8Array:Array,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=0,e=c.length;u<e;++u)s[u]=c[u],r[c.charCodeAt(u)]=u;function f(W){var $=W.length;if($%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var J=W.indexOf("=");return-1===J&&(J=$),[J,J===$?0:4-J%4]}function w(W){return s[W>>18&63]+s[W>>12&63]+s[W>>6&63]+s[63&W]}function D(W,$,J){for(var X=[],de=$;de<J;de+=3)X.push(w((W[de]<<16&16711680)+(W[de+1]<<8&65280)+(255&W[de+2])));return X.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},33512:(E,C,s)=>{var r=s(2665),a=s(67506);E.exports=function U(V){return V?("{}"===V.substr(0,2)&&(V="\\{\\}"+V.substr(2)),de(function M(V){return V.split("\\\\").join(c).split("\\{").join(u).split("\\}").join(e).split("\\,").join(f).split("\\.").join(m)}(V),!0).map(w)):[]};var c="\0SLASH"+Math.random()+"\0",u="\0OPEN"+Math.random()+"\0",e="\0CLOSE"+Math.random()+"\0",f="\0COMMA"+Math.random()+"\0",m="\0PERIOD"+Math.random()+"\0";function T(V){return parseInt(V,10)==V?parseInt(V,10):V.charCodeAt(0)}function w(V){return V.split(c).join("\\").split(u).join("{").split(e).join("}").split(f).join(",").split(m).join(".")}function D(V){if(!V)return[""];var ce=[],se=a("{","}",V);if(!se)return V.split(",");var Te=se.body,$e=se.post,ge=se.pre.split(",");ge[ge.length-1]+="{"+Te+"}";var Et=D($e);return $e.length&&(ge[ge.length-1]+=Et.shift(),ge.push.apply(ge,Et)),ce.push.apply(ce,ge),ce}function $(V){return"{"+V+"}"}function J(V){return/^-?0\d/.test(V)}function F(V,ce){return V<=ce}function X(V,ce){return V>=ce}function de(V,ce){var se=[],fe=a("{","}",V);if(!fe||/\$$/.test(fe.pre))return[V];var ot,Te=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(fe.body),$e=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(fe.body),ge=Te||$e,Et=fe.body.indexOf(",")>=0;if(!ge&&!Et)return fe.post.match(/,.*\}/)?de(V=fe.pre+"{"+fe.body+e+fe.post):[V];if(ge)ot=fe.body.split(/\.\./);else if(1===(ot=D(fe.body)).length&&1===(ot=de(ot[0],!1).map($)).length)return(qe=fe.post.length?de(fe.post,!1):[""]).map(function(Lr){return fe.pre+ot[0]+Lr});var He,ct=fe.pre,qe=fe.post.length?de(fe.post,!1):[""];if(ge){var We=T(ot[0]),Le=T(ot[1]),Pt=Math.max(ot[0].length,ot[1].length),it=3==ot.length?Math.abs(T(ot[2])):1,Xt=F;Le<We&&(it*=-1,Xt=X);var pn=ot.some(J);He=[];for(var Rn=We;Xt(Rn,Le);Rn+=it){var At;if($e)"\\"===(At=String.fromCharCode(Rn))&&(At="");else if(At=String(Rn),pn){var qt=Pt-At.length;if(qt>0){var sn=new Array(qt+1).join("0");At=Rn<0?"-"+sn+At.slice(1):sn+At}}He.push(At)}}else He=r(ot,function(Or){return de(Or,!1)});for(var fn=0;fn<He.length;fn++)for(var xn=0;xn<qe.length;xn++){var Kr=ct+He[fn]+qe[xn];(!ce||ge||Kr)&&se.push(Kr)}return se}},19568:(E,C,s)=>{"use strict";var r=s(18540),a=s(60044),c=a(r("String.prototype.indexOf"));E.exports=function(e,f){var m=r(e,!!f);return"function"==typeof m&&c(e,".prototype.")>-1?a(m):m}},60044:(E,C,s)=>{"use strict";var r=s(75396),a=s(18540),c=a("%Function.prototype.apply%"),u=a("%Function.prototype.call%"),e=a("%Reflect.apply%",!0)||r.call(u,c),f=a("%Object.getOwnPropertyDescriptor%",!0),m=a("%Object.defineProperty%",!0),T=a("%Math.max%");if(m)try{m({},"a",{value:1})}catch{m=null}E.exports=function(D){var U=e(r,u,arguments);return f&&m&&f(U,"length").configurable&&m(U,"length",{value:1+T(0,D.length-(arguments.length-1))}),U};var M=function(){return e(r,c,arguments)};m?m(E.exports,"apply",{value:M}):E.exports.apply=M},72318:E=>{var C=!!(typeof window<"u"&&window.document&&window.document.createElement);E.exports=C},6823:function(E,C,s){E.exports=function(r){"use strict";r=r&&r.hasOwnProperty("default")?r.default:r;var u={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},e=function a(h,b){return h(b={exports:{}},b.exports),b.exports}(function(h){var b={};for(var N in u)u.hasOwnProperty(N)&&(b[u[N]]=N);var k=h.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var ne in k)if(k.hasOwnProperty(ne)){if(!("channels"in k[ne]))throw new Error("missing channels property: "+ne);if(!("labels"in k[ne]))throw new Error("missing channel labels property: "+ne);if(k[ne].labels.length!==k[ne].channels)throw new Error("channel and label counts mismatch: "+ne);var he=k[ne].channels,Me=k[ne].labels;delete k[ne].channels,delete k[ne].labels,Object.defineProperty(k[ne],"channels",{value:he}),Object.defineProperty(k[ne],"labels",{value:Me})}function Qe(Re,ft){return Math.pow(Re[0]-ft[0],2)+Math.pow(Re[1]-ft[1],2)+Math.pow(Re[2]-ft[2],2)}k.rgb.hsl=function(Re){var Dr,uo,ft=Re[0]/255,wt=Re[1]/255,It=Re[2]/255,Cn=Math.min(ft,wt,It),er=Math.max(ft,wt,It),sr=er-Cn;return er===Cn?Dr=0:ft===er?Dr=(wt-It)/sr:wt===er?Dr=2+(It-ft)/sr:It===er&&(Dr=4+(ft-wt)/sr),(Dr=Math.min(60*Dr,360))<0&&(Dr+=360),uo=(Cn+er)/2,[Dr,100*(er===Cn?0:uo<=.5?sr/(er+Cn):sr/(2-er-Cn)),100*uo]},k.rgb.hsv=function(Re){var ft,wt,It,Cn,er,sr=Re[0]/255,Dr=Re[1]/255,oi=Re[2]/255,uo=Math.max(sr,Dr,oi),As=uo-Math.min(sr,Dr,oi),as=function(ma){return(uo-ma)/6/As+.5};return 0===As?Cn=er=0:(er=As/uo,ft=as(sr),wt=as(Dr),It=as(oi),sr===uo?Cn=It-wt:Dr===uo?Cn=1/3+ft-It:oi===uo&&(Cn=2/3+wt-ft),Cn<0?Cn+=1:Cn>1&&(Cn-=1)),[360*Cn,100*er,100*uo]},k.rgb.hwb=function(Re){var ft=Re[0],wt=Re[1],It=Re[2];return[k.rgb.hsl(Re)[0],1/255*Math.min(ft,Math.min(wt,It))*100,100*(It=1-1/255*Math.max(ft,Math.max(wt,It)))]},k.rgb.cmyk=function(Re){var Dr,ft=Re[0]/255,wt=Re[1]/255,It=Re[2]/255;return[100*((1-ft-(Dr=Math.min(1-ft,1-wt,1-It)))/(1-Dr)||0),100*((1-wt-Dr)/(1-Dr)||0),100*((1-It-Dr)/(1-Dr)||0),100*Dr]},k.rgb.keyword=function(Re){var ft=b[Re];if(ft)return ft;var It,wt=1/0;for(var Cn in u)if(u.hasOwnProperty(Cn)){var sr=Qe(Re,u[Cn]);sr<wt&&(wt=sr,It=Cn)}return It},k.keyword.rgb=function(Re){return u[Re]},k.rgb.xyz=function(Re){var ft=Re[0]/255,wt=Re[1]/255,It=Re[2]/255;return[100*(.4124*(ft=ft>.04045?Math.pow((ft+.055)/1.055,2.4):ft/12.92)+.3576*(wt=wt>.04045?Math.pow((wt+.055)/1.055,2.4):wt/12.92)+.1805*(It=It>.04045?Math.pow((It+.055)/1.055,2.4):It/12.92)),100*(.2126*ft+.7152*wt+.0722*It),100*(.0193*ft+.1192*wt+.9505*It)]},k.rgb.lab=function(Re){var ft=k.rgb.xyz(Re),wt=ft[0],It=ft[1],Cn=ft[2];return It/=100,Cn/=108.883,wt=(wt/=95.047)>.008856?Math.pow(wt,1/3):7.787*wt+16/116,[116*(It=It>.008856?Math.pow(It,1/3):7.787*It+16/116)-16,500*(wt-It),200*(It-(Cn=Cn>.008856?Math.pow(Cn,1/3):7.787*Cn+16/116))]},k.hsl.rgb=function(Re){var Cn,er,sr,Dr,oi,ft=Re[0]/360,wt=Re[1]/100,It=Re[2]/100;if(0===wt)return[oi=255*It,oi,oi];Cn=2*It-(er=It<.5?It*(1+wt):It+wt-It*wt),Dr=[0,0,0];for(var uo=0;uo<3;uo++)(sr=ft+1/3*-(uo-1))<0&&sr++,sr>1&&sr--,Dr[uo]=255*(oi=6*sr<1?Cn+6*(er-Cn)*sr:2*sr<1?er:3*sr<2?Cn+(er-Cn)*(2/3-sr)*6:Cn);return Dr},k.hsl.hsv=function(Re){var ft=Re[0],wt=Re[1]/100,It=Re[2]/100,Cn=wt,er=Math.max(It,.01);return wt*=(It*=2)<=1?It:2-It,Cn*=er<=1?er:2-er,[ft,100*(0===It?2*Cn/(er+Cn):2*wt/(It+wt)),(It+wt)/2*100]},k.hsv.rgb=function(Re){var ft=Re[0]/60,wt=Re[1]/100,It=Re[2]/100,Cn=Math.floor(ft)%6,er=ft-Math.floor(ft),sr=255*It*(1-wt),Dr=255*It*(1-wt*er),oi=255*It*(1-wt*(1-er));switch(It*=255,Cn){case 0:return[It,oi,sr];case 1:return[Dr,It,sr];case 2:return[sr,It,oi];case 3:return[sr,Dr,It];case 4:return[oi,sr,It];case 5:return[It,sr,Dr]}},k.hsv.hsl=function(Re){var er,sr,Dr,ft=Re[0],wt=Re[1]/100,It=Re[2]/100,Cn=Math.max(It,.01);return Dr=(2-wt)*It,sr=wt*Cn,[ft,100*(sr=(sr/=(er=(2-wt)*Cn)<=1?er:2-er)||0),100*(Dr/=2)]},k.hwb.rgb=function(Re){var er,sr,Dr,oi,uo,As,as,ft=Re[0]/360,wt=Re[1]/100,It=Re[2]/100,Cn=wt+It;switch(Cn>1&&(wt/=Cn,It/=Cn),Dr=6*ft-(er=Math.floor(6*ft)),1&er&&(Dr=1-Dr),oi=wt+Dr*((sr=1-It)-wt),er){default:case 6:case 0:uo=sr,As=oi,as=wt;break;case 1:uo=oi,As=sr,as=wt;break;case 2:uo=wt,As=sr,as=oi;break;case 3:uo=wt,As=oi,as=sr;break;case 4:uo=oi,As=wt,as=sr;break;case 5:uo=sr,As=wt,as=oi}return[255*uo,255*As,255*as]},k.cmyk.rgb=function(Re){var wt=Re[1]/100,It=Re[2]/100,Cn=Re[3]/100;return[255*(1-Math.min(1,Re[0]/100*(1-Cn)+Cn)),255*(1-Math.min(1,wt*(1-Cn)+Cn)),255*(1-Math.min(1,It*(1-Cn)+Cn))]},k.xyz.rgb=function(Re){var Cn,er,sr,ft=Re[0]/100,wt=Re[1]/100,It=Re[2]/100;return er=-.9689*ft+1.8758*wt+.0415*It,sr=.0557*ft+-.204*wt+1.057*It,Cn=(Cn=3.2406*ft+-1.5372*wt+-.4986*It)>.0031308?1.055*Math.pow(Cn,1/2.4)-.055:12.92*Cn,er=er>.0031308?1.055*Math.pow(er,1/2.4)-.055:12.92*er,sr=sr>.0031308?1.055*Math.pow(sr,1/2.4)-.055:12.92*sr,[255*(Cn=Math.min(Math.max(0,Cn),1)),255*(er=Math.min(Math.max(0,er),1)),255*(sr=Math.min(Math.max(0,sr),1))]},k.xyz.lab=function(Re){var ft=Re[0],wt=Re[1],It=Re[2];return wt/=100,It/=108.883,ft=(ft/=95.047)>.008856?Math.pow(ft,1/3):7.787*ft+16/116,[116*(wt=wt>.008856?Math.pow(wt,1/3):7.787*wt+16/116)-16,500*(ft-wt),200*(wt-(It=It>.008856?Math.pow(It,1/3):7.787*It+16/116))]},k.lab.xyz=function(Re){var Cn,er,sr;Cn=Re[1]/500+(er=(Re[0]+16)/116),sr=er-Re[2]/200;var Dr=Math.pow(er,3),oi=Math.pow(Cn,3),uo=Math.pow(sr,3);return er=Dr>.008856?Dr:(er-16/116)/7.787,Cn=oi>.008856?oi:(Cn-16/116)/7.787,sr=uo>.008856?uo:(sr-16/116)/7.787,[Cn*=95.047,er*=100,sr*=108.883]},k.lab.lch=function(Re){var er,ft=Re[0],wt=Re[1],It=Re[2];return(er=360*Math.atan2(It,wt)/2/Math.PI)<0&&(er+=360),[ft,Math.sqrt(wt*wt+It*It),er]},k.lch.lab=function(Re){var sr,wt=Re[1];return sr=Re[2]/360*2*Math.PI,[Re[0],wt*Math.cos(sr),wt*Math.sin(sr)]},k.rgb.ansi16=function(Re){var ft=Re[0],wt=Re[1],It=Re[2],Cn=1 in arguments?arguments[1]:k.rgb.hsv(Re)[2];if(0===(Cn=Math.round(Cn/50)))return 30;var er=30+(Math.round(It/255)<<2|Math.round(wt/255)<<1|Math.round(ft/255));return 2===Cn&&(er+=60),er},k.hsv.ansi16=function(Re){return k.rgb.ansi16(k.hsv.rgb(Re),Re[2])},k.rgb.ansi256=function(Re){var ft=Re[0],wt=Re[1],It=Re[2];return ft===wt&&wt===It?ft<8?16:ft>248?231:Math.round((ft-8)/247*24)+232:16+36*Math.round(ft/255*5)+6*Math.round(wt/255*5)+Math.round(It/255*5)},k.ansi16.rgb=function(Re){var ft=Re%10;if(0===ft||7===ft)return Re>50&&(ft+=3.5),[ft=ft/10.5*255,ft,ft];var wt=.5*(1+~~(Re>50));return[(1&ft)*wt*255,(ft>>1&1)*wt*255,(ft>>2&1)*wt*255]},k.ansi256.rgb=function(Re){if(Re>=232){var ft=10*(Re-232)+8;return[ft,ft,ft]}var wt;return Re-=16,[Math.floor(Re/36)/5*255,Math.floor((wt=Re%36)/6)/5*255,wt%6/5*255]},k.rgb.hex=function(Re){var wt=(((255&Math.round(Re[0]))<<16)+((255&Math.round(Re[1]))<<8)+(255&Math.round(Re[2]))).toString(16).toUpperCase();return"000000".substring(wt.length)+wt},k.hex.rgb=function(Re){var ft=Re.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!ft)return[0,0,0];var wt=ft[0];3===ft[0].length&&(wt=wt.split("").map(function(Dr){return Dr+Dr}).join(""));var It=parseInt(wt,16);return[It>>16&255,It>>8&255,255&It]},k.rgb.hcg=function(Re){var oi,ft=Re[0]/255,wt=Re[1]/255,It=Re[2]/255,Cn=Math.max(Math.max(ft,wt),It),er=Math.min(Math.min(ft,wt),It),sr=Cn-er;return oi=sr<=0?0:Cn===ft?(wt-It)/sr%6:Cn===wt?2+(It-ft)/sr:4+(ft-wt)/sr+4,oi/=6,[360*(oi%=1),100*sr,100*(sr<1?er/(1-sr):0)]},k.hsl.hcg=function(Re){var It,ft=Re[1]/100,wt=Re[2]/100,Cn=0;return(It=wt<.5?2*ft*wt:2*ft*(1-wt))<1&&(Cn=(wt-.5*It)/(1-It)),[Re[0],100*It,100*Cn]},k.hsv.hcg=function(Re){var wt=Re[2]/100,It=Re[1]/100*wt,Cn=0;return It<1&&(Cn=(wt-It)/(1-It)),[Re[0],100*It,100*Cn]},k.hcg.rgb=function(Re){var wt=Re[1]/100,It=Re[2]/100;if(0===wt)return[255*It,255*It,255*It];var oi,Cn=[0,0,0],er=Re[0]/360%1*6,sr=er%1,Dr=1-sr;switch(Math.floor(er)){case 0:Cn[0]=1,Cn[1]=sr,Cn[2]=0;break;case 1:Cn[0]=Dr,Cn[1]=1,Cn[2]=0;break;case 2:Cn[0]=0,Cn[1]=1,Cn[2]=sr;break;case 3:Cn[0]=0,Cn[1]=Dr,Cn[2]=1;break;case 4:Cn[0]=sr,Cn[1]=0,Cn[2]=1;break;default:Cn[0]=1,Cn[1]=0,Cn[2]=Dr}return[255*(wt*Cn[0]+(oi=(1-wt)*It)),255*(wt*Cn[1]+oi),255*(wt*Cn[2]+oi)]},k.hcg.hsv=function(Re){var ft=Re[1]/100,It=ft+Re[2]/100*(1-ft),Cn=0;return It>0&&(Cn=ft/It),[Re[0],100*Cn,100*It]},k.hcg.hsl=function(Re){var ft=Re[1]/100,It=Re[2]/100*(1-ft)+.5*ft,Cn=0;return It>0&&It<.5?Cn=ft/(2*It):It>=.5&&It<1&&(Cn=ft/(2*(1-It))),[Re[0],100*Cn,100*It]},k.hcg.hwb=function(Re){var ft=Re[1]/100,It=ft+Re[2]/100*(1-ft);return[Re[0],100*(It-ft),100*(1-It)]},k.hwb.hcg=function(Re){var It=1-Re[2]/100,Cn=It-Re[1]/100,er=0;return Cn<1&&(er=(It-Cn)/(1-Cn)),[Re[0],100*Cn,100*er]},k.apple.rgb=function(Re){return[Re[0]/65535*255,Re[1]/65535*255,Re[2]/65535*255]},k.rgb.apple=function(Re){return[Re[0]/255*65535,Re[1]/255*65535,Re[2]/255*65535]},k.gray.rgb=function(Re){return[Re[0]/100*255,Re[0]/100*255,Re[0]/100*255]},k.gray.hsl=k.gray.hsv=function(Re){return[0,0,Re[0]]},k.gray.hwb=function(Re){return[0,100,Re[0]]},k.gray.cmyk=function(Re){return[0,0,0,Re[0]]},k.gray.lab=function(Re){return[Re[0],0,0]},k.gray.hex=function(Re){var ft=255&Math.round(Re[0]/100*255),It=((ft<<16)+(ft<<8)+ft).toString(16).toUpperCase();return"000000".substring(It.length)+It},k.rgb.gray=function(Re){return[(Re[0]+Re[1]+Re[2])/3/255*100]}});function fe(h){var b=function se(){for(var h={},b=Object.keys(e),N=b.length,k=0;k<N;k++)h[b[k]]={distance:-1,parent:null};return h}(),N=[h];for(b[h].distance=0;N.length;)for(var k=N.pop(),ne=Object.keys(e[k]),he=ne.length,Me=0;Me<he;Me++){var Qe=ne[Me],Re=b[Qe];-1===Re.distance&&(Re.distance=b[k].distance+1,Re.parent=k,N.unshift(Qe))}return b}function Te(h,b){return function(N){return b(h(N))}}function $e(h,b){for(var N=[b[h].parent,h],k=e[b[h].parent][h],ne=b[h].parent;b[ne].parent;)N.unshift(b[ne].parent),k=Te(e[b[ne].parent][ne],k),ne=b[ne].parent;return k.conversion=N,k}var Et={};Object.keys(e).forEach(function(h){Et[h]={},Object.defineProperty(Et[h],"channels",{value:e[h].channels}),Object.defineProperty(Et[h],"labels",{value:e[h].labels});var b=function(h){for(var b=fe(h),N={},k=Object.keys(b),ne=k.length,he=0;he<ne;he++){var Me=k[he];null!==b[Me].parent&&(N[Me]=$e(Me,b))}return N}(h);Object.keys(b).forEach(function(k){var ne=b[k];Et[h][k]=function qe(h){var b=function(N){if(null==N)return N;arguments.length>1&&(N=Array.prototype.slice.call(arguments));var k=h(N);if("object"==typeof k)for(var ne=k.length,he=0;he<ne;he++)k[he]=Math.round(k[he]);return k};return"conversion"in h&&(b.conversion=h.conversion),b}(ne),Et[h][k].raw=function ct(h){var b=function(N){return null==N?N:(arguments.length>1&&(N=Array.prototype.slice.call(arguments)),h(N))};return"conversion"in h&&(b.conversion=h.conversion),b}(ne)})});var He=Et,We={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Le={getRgba:Pt,getHsla:it,getRgb:function cn(h){var b=Pt(h);return b&&b.slice(0,3)},getHsl:function pn(h){var b=it(h);return b&&b.slice(0,3)},getHwb:Xt,getAlpha:function Rn(h){var b=Pt(h);return b||(b=it(h))||(b=Xt(h))?b[3]:void 0},hexString:function At(h,N){return N=void 0!==N&&3===h.length?N:h[3],"#"+jr(h[0])+jr(h[1])+jr(h[2])+(N>=0&&N<1?jr(Math.round(255*N)):"")},rgbString:function qt(h,b){return b<1||h[3]&&h[3]<1?sn(h,b):"rgb("+h[0]+", "+h[1]+", "+h[2]+")"},rgbaString:sn,percentString:function fn(h,b){return b<1||h[3]&&h[3]<1?xn(h,b):"rgb("+Math.round(h[0]/255*100)+"%, "+Math.round(h[1]/255*100)+"%, "+Math.round(h[2]/255*100)+"%)"},percentaString:xn,hslString:function Kr(h,b){return b<1||h[3]&&h[3]<1?Or(h,b):"hsl("+h[0]+", "+h[1]+"%, "+h[2]+"%)"},hslaString:Or,hwbString:function Lr(h,b){return void 0===b&&(b=void 0!==h[3]?h[3]:1),"hwb("+h[0]+", "+h[1]+"%, "+h[2]+"%"+(void 0!==b&&1!==b?", "+b:"")+")"},keyword:function ir(h){return br[h.slice(0,3)]}};function Pt(h){if(h){var Me=[0,0,0],Qe=1,Re=h.match(/^#([a-fA-F0-9]{3,4})$/i),ft="";if(Re){ft=(Re=Re[1])[3];for(var wt=0;wt<Me.length;wt++)Me[wt]=parseInt(Re[wt]+Re[wt],16);ft&&(Qe=Math.round(parseInt(ft+ft,16)/255*100)/100)}else if(Re=h.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){for(ft=Re[2],Re=Re[1],wt=0;wt<Me.length;wt++)Me[wt]=parseInt(Re.slice(2*wt,2*wt+2),16);ft&&(Qe=Math.round(parseInt(ft,16)/255*100)/100)}else if(Re=h.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(wt=0;wt<Me.length;wt++)Me[wt]=parseInt(Re[wt+1]);Qe=parseFloat(Re[4])}else if(Re=h.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(wt=0;wt<Me.length;wt++)Me[wt]=Math.round(2.55*parseFloat(Re[wt+1]));Qe=parseFloat(Re[4])}else if(Re=h.match(/(\w+)/)){if("transparent"==Re[1])return[0,0,0,0];if(!(Me=We[Re[1]]))return}for(wt=0;wt<Me.length;wt++)Me[wt]=Qr(Me[wt],0,255);return Qe=Qe||0==Qe?Qr(Qe,0,1):1,Me[3]=Qe,Me}}function it(h){if(h){var N=h.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(N){var k=parseFloat(N[4]);return[Qr(parseInt(N[1]),0,360),Qr(parseFloat(N[2]),0,100),Qr(parseFloat(N[3]),0,100),Qr(isNaN(k)?1:k,0,1)]}}}function Xt(h){if(h){var N=h.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(N){var k=parseFloat(N[4]);return[Qr(parseInt(N[1]),0,360),Qr(parseFloat(N[2]),0,100),Qr(parseFloat(N[3]),0,100),Qr(isNaN(k)?1:k,0,1)]}}}function sn(h,b){return void 0===b&&(b=void 0!==h[3]?h[3]:1),"rgba("+h[0]+", "+h[1]+", "+h[2]+", "+b+")"}function xn(h,b){return"rgba("+Math.round(h[0]/255*100)+"%, "+Math.round(h[1]/255*100)+"%, "+Math.round(h[2]/255*100)+"%, "+(b||h[3]||1)+")"}function Or(h,b){return void 0===b&&(b=void 0!==h[3]?h[3]:1),"hsla("+h[0]+", "+h[1]+"%, "+h[2]+"%, "+b+")"}function Qr(h,b,N){return Math.min(Math.max(b,h),N)}function jr(h){var b=h.toString(16).toUpperCase();return b.length<2?"0"+b:b}var br={};for(var ht in We)br[We[ht]]=ht;var Wt=function(h){return h instanceof Wt?h:this instanceof Wt?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof h?(b=Le.getRgba(h))?this.setValues("rgb",b):(b=Le.getHsla(h))?this.setValues("hsl",b):(b=Le.getHwb(h))&&this.setValues("hwb",b):"object"==typeof h&&(void 0!==(b=h).r||void 0!==b.red?this.setValues("rgb",b):void 0!==b.l||void 0!==b.lightness?this.setValues("hsl",b):void 0!==b.v||void 0!==b.value?this.setValues("hsv",b):void 0!==b.w||void 0!==b.whiteness?this.setValues("hwb",b):(void 0!==b.c||void 0!==b.cyan)&&this.setValues("cmyk",b)))):new Wt(h);var b};Wt.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var h=this.values;return 1!==h.alpha?h.hwb.concat([h.alpha]):h.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var h=this.values;return h.rgb.concat([h.alpha])},hslaArray:function(){var h=this.values;return h.hsl.concat([h.alpha])},alpha:function(h){return void 0===h?this.values.alpha:(this.setValues("alpha",h),this)},red:function(h){return this.setChannel("rgb",0,h)},green:function(h){return this.setChannel("rgb",1,h)},blue:function(h){return this.setChannel("rgb",2,h)},hue:function(h){return h&&(h=(h%=360)<0?360+h:h),this.setChannel("hsl",0,h)},saturation:function(h){return this.setChannel("hsl",1,h)},lightness:function(h){return this.setChannel("hsl",2,h)},saturationv:function(h){return this.setChannel("hsv",1,h)},whiteness:function(h){return this.setChannel("hwb",1,h)},blackness:function(h){return this.setChannel("hwb",2,h)},value:function(h){return this.setChannel("hsv",2,h)},cyan:function(h){return this.setChannel("cmyk",0,h)},magenta:function(h){return this.setChannel("cmyk",1,h)},yellow:function(h){return this.setChannel("cmyk",2,h)},black:function(h){return this.setChannel("cmyk",3,h)},hexString:function(){return Le.hexString(this.values.rgb)},rgbString:function(){return Le.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return Le.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return Le.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return Le.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return Le.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return Le.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return Le.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var h=this.values.rgb;return h[0]<<16|h[1]<<8|h[2]},luminosity:function(){for(var h=this.values.rgb,b=[],N=0;N<h.length;N++){var k=h[N]/255;b[N]=k<=.03928?k/12.92:Math.pow((k+.055)/1.055,2.4)}return.2126*b[0]+.7152*b[1]+.0722*b[2]},contrast:function(h){var b=this.luminosity(),N=h.luminosity();return b>N?(b+.05)/(N+.05):(N+.05)/(b+.05)},level:function(h){var b=this.contrast(h);return b>=7.1?"AAA":b>=4.5?"AA":""},dark:function(){var h=this.values.rgb;return(299*h[0]+587*h[1]+114*h[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var h=[],b=0;b<3;b++)h[b]=255-this.values.rgb[b];return this.setValues("rgb",h),this},lighten:function(h){var b=this.values.hsl;return b[2]+=b[2]*h,this.setValues("hsl",b),this},darken:function(h){var b=this.values.hsl;return b[2]-=b[2]*h,this.setValues("hsl",b),this},saturate:function(h){var b=this.values.hsl;return b[1]+=b[1]*h,this.setValues("hsl",b),this},desaturate:function(h){var b=this.values.hsl;return b[1]-=b[1]*h,this.setValues("hsl",b),this},whiten:function(h){var b=this.values.hwb;return b[1]+=b[1]*h,this.setValues("hwb",b),this},blacken:function(h){var b=this.values.hwb;return b[2]+=b[2]*h,this.setValues("hwb",b),this},greyscale:function(){var h=this.values.rgb,b=.3*h[0]+.59*h[1]+.11*h[2];return this.setValues("rgb",[b,b,b]),this},clearer:function(h){var b=this.values.alpha;return this.setValues("alpha",b-b*h),this},opaquer:function(h){var b=this.values.alpha;return this.setValues("alpha",b+b*h),this},rotate:function(h){var b=this.values.hsl,N=(b[0]+h)%360;return b[0]=N<0?360+N:N,this.setValues("hsl",b),this},mix:function(h,b){var N=this,k=h,ne=void 0===b?.5:b,he=2*ne-1,Me=N.alpha()-k.alpha(),Qe=((he*Me==-1?he:(he+Me)/(1+he*Me))+1)/2,Re=1-Qe;return this.rgb(Qe*N.red()+Re*k.red(),Qe*N.green()+Re*k.green(),Qe*N.blue()+Re*k.blue()).alpha(N.alpha()*ne+k.alpha()*(1-ne))},toJSON:function(){return this.rgb()},clone:function(){var k,ne,h=new Wt,b=this.values,N=h.values;for(var he in b)b.hasOwnProperty(he)&&("[object Array]"===(ne={}.toString.call(k=b[he]))?N[he]=k.slice(0):"[object Number]"===ne?N[he]=k:console.error("unexpected color value:",k));return h}},Wt.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},Wt.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},Wt.prototype.getValues=function(h){for(var b=this.values,N={},k=0;k<h.length;k++)N[h.charAt(k)]=b[h][k];return 1!==b.alpha&&(N.a=b.alpha),N},Wt.prototype.setValues=function(h,b){var Me,Re,N=this.values,k=this.spaces,ne=this.maxes,he=1;if(this.valid=!0,"alpha"===h)he=b;else if(b.length)N[h]=b.slice(0,h.length),he=b[h.length];else if(void 0!==b[h.charAt(0)]){for(Me=0;Me<h.length;Me++)N[h][Me]=b[h.charAt(Me)];he=b.a}else if(void 0!==b[k[h][0]]){var Qe=k[h];for(Me=0;Me<h.length;Me++)N[h][Me]=b[Qe[Me]];he=b.alpha}if(N.alpha=Math.max(0,Math.min(1,void 0===he?N.alpha:he)),"alpha"===h)return!1;for(Me=0;Me<h.length;Me++)Re=Math.max(0,Math.min(ne[h][Me],N[h][Me])),N[h][Me]=Math.round(Re);for(var ft in k)ft!==h&&(N[ft]=He[h][ft](N[h]));return!0},Wt.prototype.setSpace=function(h,b){var N=b[0];return void 0===N?this.getValues(h):("number"==typeof N&&(N=Array.prototype.slice.call(b)),this.setValues(h,N),this)},Wt.prototype.setChannel=function(h,b,N){var k=this.values[h];return void 0===N?k[b]:(N===k[b]||(k[b]=N,this.setValues(h,k)),this)},typeof window<"u"&&(window.Color=Wt);var Tt=Wt;function wn(h){return-1===["__proto__","prototype","constructor"].indexOf(h)}var h,jn={noop:function(){},uid:(h=0,function(){return h++}),isNullOrUndef:function(h){return null===h||typeof h>"u"},isArray:function(h){if(Array.isArray&&Array.isArray(h))return!0;var b=Object.prototype.toString.call(h);return"[object"===b.substr(0,7)&&"Array]"===b.substr(-6)},isObject:function(h){return null!==h&&"[object Object]"===Object.prototype.toString.call(h)},isFinite:function(h){return("number"==typeof h||h instanceof Number)&&isFinite(h)},valueOrDefault:function(h,b){return typeof h>"u"?b:h},valueAtIndexOrDefault:function(h,b,N){return jn.valueOrDefault(jn.isArray(h)?h[b]:h,N)},callback:function(h,b,N){if(h&&"function"==typeof h.call)return h.apply(N,b)},each:function(h,b,N,k){var ne,he,Me;if(jn.isArray(h))if(he=h.length,k)for(ne=he-1;ne>=0;ne--)b.call(N,h[ne],ne);else for(ne=0;ne<he;ne++)b.call(N,h[ne],ne);else if(jn.isObject(h))for(he=(Me=Object.keys(h)).length,ne=0;ne<he;ne++)b.call(N,h[Me[ne]],Me[ne])},arrayEquals:function(h,b){var N,k,ne,he;if(!h||!b||h.length!==b.length)return!1;for(N=0,k=h.length;N<k;++N)if(he=b[N],(ne=h[N])instanceof Array&&he instanceof Array){if(!jn.arrayEquals(ne,he))return!1}else if(ne!==he)return!1;return!0},clone:function(h){if(jn.isArray(h))return h.map(jn.clone);if(jn.isObject(h)){for(var b=Object.create(h),N=Object.keys(h),k=N.length,ne=0;ne<k;++ne)b[N[ne]]=jn.clone(h[N[ne]]);return b}return h},_merger:function(h,b,N,k){if(wn(h)){var ne=b[h],he=N[h];jn.isObject(ne)&&jn.isObject(he)?jn.merge(ne,he,k):b[h]=jn.clone(he)}},_mergerIf:function(h,b,N){if(wn(h)){var k=b[h],ne=N[h];jn.isObject(k)&&jn.isObject(ne)?jn.mergeIf(k,ne):b.hasOwnProperty(h)||(b[h]=jn.clone(ne))}},merge:function(h,b,N){var he,Me,Qe,Re,ft,k=jn.isArray(b)?b:[b],ne=k.length;if(!jn.isObject(h))return h;for(he=(N=N||{}).merger||jn._merger,Me=0;Me<ne;++Me)if(jn.isObject(b=k[Me]))for(ft=0,Re=(Qe=Object.keys(b)).length;ft<Re;++ft)he(Qe[ft],h,b,N);return h},mergeIf:function(h,b){return jn.merge(h,b,{merger:jn._mergerIf})},extend:Object.assign||function(h){return jn.merge(h,[].slice.call(arguments,1),{merger:function(b,N,k){N[b]=k[b]}})},inherits:function(h){var b=this,N=h&&h.hasOwnProperty("constructor")?h.constructor:function(){return b.apply(this,arguments)},k=function(){this.constructor=N};return k.prototype=b.prototype,N.prototype=new k,N.extend=jn.inherits,h&&jn.extend(N.prototype,h),N.__super__=b.prototype,N},_deprecated:function(h,b,N,k){void 0!==b&&console.warn(h+': "'+N+'" is deprecated. Please use "'+k+'" instead')}},hr=jn;jn.callCallback=jn.callback,jn.indexOf=function(h,b,N){return Array.prototype.indexOf.call(h,b,N)},jn.getValueOrDefault=jn.valueOrDefault,jn.getValueAtIndexOrDefault=jn.valueAtIndexOrDefault;var Oi={linear:function(h){return h},easeInQuad:function(h){return h*h},easeOutQuad:function(h){return-h*(h-2)},easeInOutQuad:function(h){return(h/=.5)<1?.5*h*h:-.5*(--h*(h-2)-1)},easeInCubic:function(h){return h*h*h},easeOutCubic:function(h){return(h-=1)*h*h+1},easeInOutCubic:function(h){return(h/=.5)<1?.5*h*h*h:.5*((h-=2)*h*h+2)},easeInQuart:function(h){return h*h*h*h},easeOutQuart:function(h){return-((h-=1)*h*h*h-1)},easeInOutQuart:function(h){return(h/=.5)<1?.5*h*h*h*h:-.5*((h-=2)*h*h*h-2)},easeInQuint:function(h){return h*h*h*h*h},easeOutQuint:function(h){return(h-=1)*h*h*h*h+1},easeInOutQuint:function(h){return(h/=.5)<1?.5*h*h*h*h*h:.5*((h-=2)*h*h*h*h+2)},easeInSine:function(h){return 1-Math.cos(h*(Math.PI/2))},easeOutSine:function(h){return Math.sin(h*(Math.PI/2))},easeInOutSine:function(h){return-.5*(Math.cos(Math.PI*h)-1)},easeInExpo:function(h){return 0===h?0:Math.pow(2,10*(h-1))},easeOutExpo:function(h){return 1===h?1:1-Math.pow(2,-10*h)},easeInOutExpo:function(h){return 0===h?0:1===h?1:(h/=.5)<1?.5*Math.pow(2,10*(h-1)):.5*(2-Math.pow(2,-10*--h))},easeInCirc:function(h){return h>=1?h:-(Math.sqrt(1-h*h)-1)},easeOutCirc:function(h){return Math.sqrt(1-(h-=1)*h)},easeInOutCirc:function(h){return(h/=.5)<1?-.5*(Math.sqrt(1-h*h)-1):.5*(Math.sqrt(1-(h-=2)*h)+1)},easeInElastic:function(h){var b=1.70158,N=0,k=1;return 0===h?0:1===h?1:(N||(N=.3),k<1?(k=1,b=N/4):b=N/(2*Math.PI)*Math.asin(1/k),-k*Math.pow(2,10*(h-=1))*Math.sin((h-b)*(2*Math.PI)/N))},easeOutElastic:function(h){var b=1.70158,N=0,k=1;return 0===h?0:1===h?1:(N||(N=.3),k<1?(k=1,b=N/4):b=N/(2*Math.PI)*Math.asin(1/k),k*Math.pow(2,-10*h)*Math.sin((h-b)*(2*Math.PI)/N)+1)},easeInOutElastic:function(h){var b=1.70158,N=0,k=1;return 0===h?0:2==(h/=.5)?1:(N||(N=.45),k<1?(k=1,b=N/4):b=N/(2*Math.PI)*Math.asin(1/k),h<1?k*Math.pow(2,10*(h-=1))*Math.sin((h-b)*(2*Math.PI)/N)*-.5:k*Math.pow(2,-10*(h-=1))*Math.sin((h-b)*(2*Math.PI)/N)*.5+1)},easeInBack:function(h){var b=1.70158;return h*h*((b+1)*h-b)},easeOutBack:function(h){var b=1.70158;return(h-=1)*h*((b+1)*h+b)+1},easeInOutBack:function(h){var b=1.70158;return(h/=.5)<1?h*h*((1+(b*=1.525))*h-b)*.5:.5*((h-=2)*h*((1+(b*=1.525))*h+b)+2)},easeInBounce:function(h){return 1-Oi.easeOutBounce(1-h)},easeOutBounce:function(h){return h<1/2.75?7.5625*h*h:h<2/2.75?7.5625*(h-=1.5/2.75)*h+.75:h<2.5/2.75?7.5625*(h-=2.25/2.75)*h+.9375:7.5625*(h-=2.625/2.75)*h+.984375},easeInOutBounce:function(h){return h<.5?.5*Oi.easeInBounce(2*h):.5*Oi.easeOutBounce(2*h-1)+.5}},Wi={effects:Oi};hr.easingEffects=Oi;var so=Math.PI,kr=so/180,Ei=2*so,ii=so/2,mr=so/4,pr=2*so/3,Eo={clear:function(h){h.ctx.clearRect(0,0,h.width,h.height)},roundedRect:function(h,b,N,k,ne,he){if(he){var Me=Math.min(he,ne/2,k/2),Qe=b+Me,Re=N+Me,ft=b+k-Me,wt=N+ne-Me;h.moveTo(b,Re),Qe<ft&&Re<wt?(h.arc(Qe,Re,Me,-so,-ii),h.arc(ft,Re,Me,-ii,0),h.arc(ft,wt,Me,0,ii),h.arc(Qe,wt,Me,ii,so)):Qe<ft?(h.moveTo(Qe,N),h.arc(ft,Re,Me,-ii,ii),h.arc(Qe,Re,Me,ii,so+ii)):Re<wt?(h.arc(Qe,Re,Me,-so,0),h.arc(Qe,wt,Me,0,so)):h.arc(Qe,Re,Me,-so,so),h.closePath(),h.moveTo(b,N)}else h.rect(b,N,k,ne)},drawPoint:function(h,b,N,k,ne,he){var Me,Qe,Re,ft,wt,It=(he||0)*kr;if(b&&"object"==typeof b&&("[object HTMLImageElement]"===(Me=b.toString())||"[object HTMLCanvasElement]"===Me))return h.save(),h.translate(k,ne),h.rotate(It),h.drawImage(b,-b.width/2,-b.height/2,b.width,b.height),void h.restore();if(!(isNaN(N)||N<=0)){switch(h.beginPath(),b){default:h.arc(k,ne,N,0,Ei),h.closePath();break;case"triangle":h.moveTo(k+Math.sin(It)*N,ne-Math.cos(It)*N),It+=pr,h.lineTo(k+Math.sin(It)*N,ne-Math.cos(It)*N),It+=pr,h.lineTo(k+Math.sin(It)*N,ne-Math.cos(It)*N),h.closePath();break;case"rectRounded":ft=N-(wt=.516*N),Qe=Math.cos(It+mr)*ft,Re=Math.sin(It+mr)*ft,h.arc(k-Qe,ne-Re,wt,It-so,It-ii),h.arc(k+Re,ne-Qe,wt,It-ii,It),h.arc(k+Qe,ne+Re,wt,It,It+ii),h.arc(k-Re,ne+Qe,wt,It+ii,It+so),h.closePath();break;case"rect":if(!he){ft=Math.SQRT1_2*N,h.rect(k-ft,ne-ft,2*ft,2*ft);break}It+=mr;case"rectRot":Qe=Math.cos(It)*N,Re=Math.sin(It)*N,h.moveTo(k-Qe,ne-Re),h.lineTo(k+Re,ne-Qe),h.lineTo(k+Qe,ne+Re),h.lineTo(k-Re,ne+Qe),h.closePath();break;case"crossRot":It+=mr;case"cross":Qe=Math.cos(It)*N,Re=Math.sin(It)*N,h.moveTo(k-Qe,ne-Re),h.lineTo(k+Qe,ne+Re),h.moveTo(k+Re,ne-Qe),h.lineTo(k-Re,ne+Qe);break;case"star":Qe=Math.cos(It)*N,Re=Math.sin(It)*N,h.moveTo(k-Qe,ne-Re),h.lineTo(k+Qe,ne+Re),h.moveTo(k+Re,ne-Qe),h.lineTo(k-Re,ne+Qe),It+=mr,Qe=Math.cos(It)*N,Re=Math.sin(It)*N,h.moveTo(k-Qe,ne-Re),h.lineTo(k+Qe,ne+Re),h.moveTo(k+Re,ne-Qe),h.lineTo(k-Re,ne+Qe);break;case"line":Qe=Math.cos(It)*N,Re=Math.sin(It)*N,h.moveTo(k-Qe,ne-Re),h.lineTo(k+Qe,ne+Re);break;case"dash":h.moveTo(k,ne),h.lineTo(k+Math.cos(It)*N,ne+Math.sin(It)*N)}h.fill(),h.stroke()}},_isPointInArea:function(h,b){var N=1e-6;return h.x>b.left-N&&h.x<b.right+N&&h.y>b.top-N&&h.y<b.bottom+N},clipArea:function(h,b){h.save(),h.beginPath(),h.rect(b.left,b.top,b.right-b.left,b.bottom-b.top),h.clip()},unclipArea:function(h){h.restore()},lineTo:function(h,b,N,k){var ne=N.steppedLine;if(ne){if("middle"===ne){var he=(b.x+N.x)/2;h.lineTo(he,k?N.y:b.y),h.lineTo(he,k?b.y:N.y)}else"after"===ne&&!k||"after"!==ne&&k?h.lineTo(b.x,N.y):h.lineTo(N.x,b.y);h.lineTo(N.x,N.y)}else N.tension?h.bezierCurveTo(k?b.controlPointPreviousX:b.controlPointNextX,k?b.controlPointPreviousY:b.controlPointNextY,k?N.controlPointNextX:N.controlPointPreviousX,k?N.controlPointNextY:N.controlPointPreviousY,N.x,N.y):h.lineTo(N.x,N.y)}},po=Eo;hr.clear=Eo.clear,hr.drawRoundedRectangle=function(h){h.beginPath(),Eo.roundedRect.apply(Eo,arguments)};var $i={_set:function(h,b){return hr.merge(this[h]||(this[h]={}),b)}};$i._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var qr=$i,Hi=hr.valueOrDefault;var Hn={toLineHeight:function(h,b){var N=(""+h).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!N||"normal"===N[1])return 1.2*b;switch(h=+N[2],N[3]){case"px":return h;case"%":h/=100}return b*h},toPadding:function(h){var b,N,k,ne;return hr.isObject(h)?(b=+h.top||0,N=+h.right||0,k=+h.bottom||0,ne=+h.left||0):b=N=k=ne=+h||0,{top:b,right:N,bottom:k,left:ne,height:b+k,width:ne+N}},_parseFont:function(h){var b=qr.global,N=Hi(h.fontSize,b.defaultFontSize),k={family:Hi(h.fontFamily,b.defaultFontFamily),lineHeight:hr.options.toLineHeight(Hi(h.lineHeight,b.defaultLineHeight),N),size:N,style:Hi(h.fontStyle,b.defaultFontStyle),weight:null,string:""};return k.string=function Dn(h){return!h||hr.isNullOrUndef(h.size)||hr.isNullOrUndef(h.family)?null:(h.style?h.style+" ":"")+(h.weight?h.weight+" ":"")+h.size+"px "+h.family}(k),k},resolve:function(h,b,N,k){var he,Me,Qe,ne=!0;for(he=0,Me=h.length;he<Me;++he)if(void 0!==(Qe=h[he])&&(void 0!==b&&"function"==typeof Qe&&(Qe=Qe(b),ne=!1),void 0!==N&&hr.isArray(Qe)&&(Qe=Qe[N],ne=!1),void 0!==Qe))return k&&!ne&&(k.cacheable=!1),Qe}},jt={_factorize:function(h){var k,b=[],N=Math.sqrt(h);for(k=1;k<N;k++)h%k==0&&(b.push(k),b.push(h/k));return N===(0|N)&&b.push(N),b.sort(function(ne,he){return ne-he}).pop(),b},log10:Math.log10||function(h){var b=Math.log(h)*Math.LOG10E,N=Math.round(b);return h===Math.pow(10,N)?N:b}},Fe=jt;hr.log10=jt.log10;var Pe=hr,gr=po,Pn=Hn,_r=Fe,Pr={getRtlAdapter:function(h,b,N){return h?function(h,b){return{x:function(N){return h+h+b-N},setWidth:function(N){b=N},textAlign:function(N){return"center"===N?N:"right"===N?"left":"right"},xPlus:function(N,k){return N-k},leftForLtr:function(N,k){return N-k}}}(b,N):{x:function(h){return h},setWidth:function(h){},textAlign:function(h){return h},xPlus:function(h,b){return h+b},leftForLtr:function(h,b){return h}}},overrideTextDirection:function(h,b){var N,k;("ltr"===b||"rtl"===b)&&(k=[(N=h.canvas.style).getPropertyValue("direction"),N.getPropertyPriority("direction")],N.setProperty("direction",b,"important"),h.prevTextDirection=k)},restoreTextDirection:function(h){var b=h.prevTextDirection;void 0!==b&&(delete h.prevTextDirection,h.canvas.style.setProperty("direction",b[0],b[1]))}};Pe.easing=Wi,Pe.canvas=gr,Pe.options=Pn,Pe.math=_r,Pe.rtl=Pr;var Zn=function(h){Pe.extend(this,h),this.initialize.apply(this,arguments)};Pe.extend(Zn.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var h=this;return h._view||(h._view=Pe.extend({},h._model)),h._start={},h},transition:function(h){var b=this,N=b._model,k=b._start,ne=b._view;return N&&1!==h?(ne||(ne=b._view={}),k||(k=b._start={}),function tr(h,b,N,k){var he,Me,Qe,Re,ft,wt,It,Cn,er,ne=Object.keys(N);for(he=0,Me=ne.length;he<Me;++he)if(wt=N[Qe=ne[he]],b.hasOwnProperty(Qe)||(b[Qe]=wt),(Re=b[Qe])!==wt&&"_"!==Qe[0]){if(h.hasOwnProperty(Qe)||(h[Qe]=Re),(It=typeof wt)==typeof(ft=h[Qe]))if("string"===It){if((Cn=Tt(ft)).valid&&(er=Tt(wt)).valid){b[Qe]=er.mix(Cn,k).rgbString();continue}}else if(Pe.isFinite(ft)&&Pe.isFinite(wt)){b[Qe]=ft+(wt-ft)*k;continue}b[Qe]=wt}}(k,ne,N,h),b):(b._view=Pe.extend({},N),b._start=null,b)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return Pe.isNumber(this._model.x)&&Pe.isNumber(this._model.y)}}),Zn.extend=Pe.inherits;var nr=Zn,Zt=nr.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),dn=Zt;Object.defineProperty(Zt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Zt.prototype,"chartInstance",{get:function(){return this.chart},set:function(h){this.chart=h}}),qr._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:Pe.noop,onComplete:Pe.noop}});var Ge={animations:[],request:null,addAnimation:function(h,b,N,k){var he,Me,ne=this.animations;for(b.chart=h,b.startTime=Date.now(),b.duration=N,k||(h.animating=!0),he=0,Me=ne.length;he<Me;++he)if(ne[he].chart===h)return void(ne[he]=b);ne.push(b),1===ne.length&&this.requestAnimationFrame()},cancelAnimation:function(h){var b=Pe.findIndex(this.animations,function(N){return N.chart===h});-1!==b&&(this.animations.splice(b,1),h.animating=!1)},requestAnimationFrame:function(){var h=this;null===h.request&&(h.request=Pe.requestAnimFrame.call(window,function(){h.request=null,h.startDigest()}))},startDigest:function(){var h=this;h.advance(),h.animations.length>0&&h.requestAnimationFrame()},advance:function(){for(var b,N,k,ne,h=this.animations,he=0;he<h.length;)N=(b=h[he]).chart,k=b.numSteps,ne=Math.floor((Date.now()-b.startTime)/b.duration*k)+1,b.currentStep=Math.min(ne,k),Pe.callback(b.render,[N,b],N),Pe.callback(b.onAnimationProgress,[b],N),b.currentStep>=k?(Pe.callback(b.onAnimationComplete,[b],N),N.animating=!1,h.splice(he,1)):++he}},Ot=Pe.options.resolve,mn=["push","pop","shift","splice","unshift"];function Ti(h,b){var N=h._chartjs;if(N){var k=N.listeners,ne=k.indexOf(b);-1!==ne&&k.splice(ne,1),!(k.length>0)&&(mn.forEach(function(he){delete h[he]}),delete h._chartjs)}}var Ci=function(h,b){this.initialize(h,b)};Pe.extend(Ci.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(h,b){var N=this;N.chart=h,N.index=b,N.linkScales(),N.addElements(),N._type=N.getMeta().type},updateIndex:function(h){this.index=h},linkScales:function(){var h=this,b=h.getMeta(),N=h.chart,k=N.scales,ne=h.getDataset(),he=N.options.scales;(null===b.xAxisID||!(b.xAxisID in k)||ne.xAxisID)&&(b.xAxisID=ne.xAxisID||he.xAxes[0].id),(null===b.yAxisID||!(b.yAxisID in k)||ne.yAxisID)&&(b.yAxisID=ne.yAxisID||he.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(h){return this.chart.scales[h]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&Ti(this._data,this)},createMetaDataset:function(){var h=this,b=h.datasetElementType;return b&&new b({_chart:h.chart,_datasetIndex:h.index})},createMetaData:function(h){var b=this,N=b.dataElementType;return N&&new N({_chart:b.chart,_datasetIndex:b.index,_index:h})},addElements:function(){var ne,he,h=this,b=h.getMeta(),N=h.getDataset().data||[],k=b.data;for(ne=0,he=N.length;ne<he;++ne)k[ne]=k[ne]||h.createMetaData(ne);b.dataset=b.dataset||h.createMetaDataset()},addElementAndReset:function(h){var b=this.createMetaData(h);this.getMeta().data.splice(h,0,b),this.updateElement(b,h,!0)},buildOrUpdateElements:function(){var h=this,b=h.getDataset(),N=b.data||(b.data=[]);h._data!==N&&(h._data&&Ti(h._data,h),N&&Object.isExtensible(N)&&function wr(h,b){h._chartjs?h._chartjs.listeners.push(b):(Object.defineProperty(h,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[b]}}),mn.forEach(function(N){var k="onData"+N.charAt(0).toUpperCase()+N.slice(1),ne=h[N];Object.defineProperty(h,N,{configurable:!0,enumerable:!1,value:function(){var he=Array.prototype.slice.call(arguments),Me=ne.apply(this,he);return Pe.each(h._chartjs.listeners,function(Qe){"function"==typeof Qe[k]&&Qe[k].apply(Qe,he)}),Me}})}))}(N,h),h._data=N),h.resyncElements()},_configure:function(){var h=this;h._config=Pe.merge(Object.create(null),[h.chart.options.datasets[h._type],h.getDataset()],{merger:function(b,N,k){"_meta"!==b&&"data"!==b&&Pe._merger(b,N,k)}})},_update:function(h){var b=this;b._configure(),b._cachedDataOpts=null,b.update(h)},update:Pe.noop,transition:function(h){for(var b=this.getMeta(),N=b.data||[],k=N.length,ne=0;ne<k;++ne)N[ne].transition(h);b.dataset&&b.dataset.transition(h)},draw:function(){var h=this.getMeta(),b=h.data||[],N=b.length,k=0;for(h.dataset&&h.dataset.draw();k<N;++k)b[k].draw()},getStyle:function(h){var ne,b=this,N=b.getMeta(),k=N.dataset;return b._configure(),(!1===(ne=k&&void 0===h?b._resolveDatasetElementOptions(k||{}):b._resolveDataElementOptions(N.data[h=h||0]||{},h)).fill||null===ne.fill)&&(ne.backgroundColor=ne.borderColor),ne},_resolveDatasetElementOptions:function(h,b){var ft,wt,It,Cn,N=this,k=N.chart,ne=N._config,he=h.custom||{},Me=k.options.elements[N.datasetElementType.prototype._type]||{},Qe=N._datasetElementOptions,Re={},er={chart:k,dataset:N.getDataset(),datasetIndex:N.index,hover:b};for(ft=0,wt=Qe.length;ft<wt;++ft)It=Qe[ft],Cn=b?"hover"+It.charAt(0).toUpperCase()+It.slice(1):It,Re[It]=Ot([he[Cn],ne[Cn],Me[Cn]],er);return Re},_resolveDataElementOptions:function(h,b){var N=this,k=h&&h.custom,ne=N._cachedDataOpts;if(ne&&!k)return ne;var Cn,er,sr,Dr,he=N.chart,Me=N._config,Qe=he.options.elements[N.dataElementType.prototype._type]||{},Re=N._dataElementOptions,ft={},wt={chart:he,dataIndex:b,dataset:N.getDataset(),datasetIndex:N.index},It={cacheable:!k};if(k=k||{},Pe.isArray(Re))for(er=0,sr=Re.length;er<sr;++er)ft[Dr=Re[er]]=Ot([k[Dr],Me[Dr],Qe[Dr]],wt,b,It);else for(er=0,sr=(Cn=Object.keys(Re)).length;er<sr;++er)ft[Dr=Cn[er]]=Ot([k[Dr],Me[Re[Dr]],Me[Dr],Qe[Dr]],wt,b,It);return It.cacheable&&(N._cachedDataOpts=Object.freeze(ft)),ft},removeHoverStyle:function(h){Pe.merge(h._model,h.$previousStyle||{}),delete h.$previousStyle},setHoverStyle:function(h){var b=this.chart.data.datasets[h._datasetIndex],N=h._index,k=h.custom||{},ne=h._model,he=Pe.getHoverColor;h.$previousStyle={backgroundColor:ne.backgroundColor,borderColor:ne.borderColor,borderWidth:ne.borderWidth},ne.backgroundColor=Ot([k.hoverBackgroundColor,b.hoverBackgroundColor,he(ne.backgroundColor)],void 0,N),ne.borderColor=Ot([k.hoverBorderColor,b.hoverBorderColor,he(ne.borderColor)],void 0,N),ne.borderWidth=Ot([k.hoverBorderWidth,b.hoverBorderWidth,ne.borderWidth],void 0,N)},_removeDatasetHoverStyle:function(){var h=this.getMeta().dataset;h&&this.removeHoverStyle(h)},_setDatasetHoverStyle:function(){var N,k,ne,he,Me,Qe,h=this.getMeta().dataset,b={};if(h){for(Qe=h._model,Me=this._resolveDatasetElementOptions(h,!0),N=0,k=(he=Object.keys(Me)).length;N<k;++N)b[ne=he[N]]=Qe[ne],Qe[ne]=Me[ne];h.$previousStyle=b}},resyncElements:function(){var h=this,b=h.getMeta(),N=h.getDataset().data,k=b.data.length,ne=N.length;ne<k?b.data.splice(ne,k-ne):ne>k&&h.insertElements(k,ne-k)},insertElements:function(h,b){for(var N=0;N<b;++N)this.addElementAndReset(h+N)},onDataPush:function(){var h=arguments.length;this.insertElements(this.getDataset().data.length-h,h)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(h,b){this.getMeta().data.splice(h,b),this.insertElements(h,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),Ci.extend=Pe.inherits;var Ai=Ci,Ko=2*Math.PI;function _s(h,b){var N=b.startAngle,k=b.endAngle,ne=b.pixelMargin,he=ne/b.outerRadius,Me=b.x,Qe=b.y;h.beginPath(),h.arc(Me,Qe,b.outerRadius,N-he,k+he),b.innerRadius>ne?h.arc(Me,Qe,b.innerRadius-ne,k+(he=ne/b.innerRadius),N-he,!0):h.arc(Me,Qe,ne,k+Math.PI/2,N-Math.PI/2),h.closePath(),h.clip()}function Ni(h,b,N){var k="inner"===b.borderAlign;k?(h.lineWidth=2*b.borderWidth,h.lineJoin="round"):(h.lineWidth=b.borderWidth,h.lineJoin="bevel"),N.fullCircles&&function dr(h,b,N,k){var he,ne=N.endAngle;for(k&&(N.endAngle=N.startAngle+Ko,_s(h,N),N.endAngle=ne,N.endAngle===N.startAngle&&N.fullCircles&&(N.endAngle+=Ko,N.fullCircles--)),h.beginPath(),h.arc(N.x,N.y,N.innerRadius,N.startAngle+Ko,N.startAngle,!0),he=0;he<N.fullCircles;++he)h.stroke();for(h.beginPath(),h.arc(N.x,N.y,b.outerRadius,N.startAngle,N.startAngle+Ko),he=0;he<N.fullCircles;++he)h.stroke()}(h,b,N,k),k&&_s(h,N),h.beginPath(),h.arc(N.x,N.y,b.outerRadius,N.startAngle,N.endAngle),h.arc(N.x,N.y,N.innerRadius,N.endAngle,N.startAngle,!0),h.closePath(),h.stroke()}qr._set("global",{elements:{arc:{backgroundColor:qr.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var ti=nr.extend({_type:"arc",inLabelRange:function(h){var b=this._view;return!!b&&Math.pow(h-b.x,2)<Math.pow(b.radius+b.hoverRadius,2)},inRange:function(h,b){var N=this._view;if(N){for(var k=Pe.getAngleFromPoint(N,{x:h,y:b}),ne=k.angle,he=k.distance,Me=N.startAngle,Qe=N.endAngle;Qe<Me;)Qe+=Ko;for(;ne>Qe;)ne-=Ko;for(;ne<Me;)ne+=Ko;return ne>=Me&&ne<=Qe&&he>=N.innerRadius&&he<=N.outerRadius}return!1},getCenterPoint:function(){var h=this._view,b=(h.startAngle+h.endAngle)/2,N=(h.innerRadius+h.outerRadius)/2;return{x:h.x+Math.cos(b)*N,y:h.y+Math.sin(b)*N}},getArea:function(){var h=this._view;return Math.PI*((h.endAngle-h.startAngle)/(2*Math.PI))*(Math.pow(h.outerRadius,2)-Math.pow(h.innerRadius,2))},tooltipPosition:function(){var h=this._view,b=h.startAngle+(h.endAngle-h.startAngle)/2,N=(h.outerRadius-h.innerRadius)/2+h.innerRadius;return{x:h.x+Math.cos(b)*N,y:h.y+Math.sin(b)*N}},draw:function(){var ne,h=this._chart.ctx,b=this._view,N="inner"===b.borderAlign?.33:0,k={x:b.x,y:b.y,innerRadius:b.innerRadius,outerRadius:Math.max(b.outerRadius-N,0),pixelMargin:N,startAngle:b.startAngle,endAngle:b.endAngle,fullCircles:Math.floor(b.circumference/Ko)};if(h.save(),h.fillStyle=b.backgroundColor,h.strokeStyle=b.borderColor,k.fullCircles){for(k.endAngle=k.startAngle+Ko,h.beginPath(),h.arc(k.x,k.y,k.outerRadius,k.startAngle,k.endAngle),h.arc(k.x,k.y,k.innerRadius,k.endAngle,k.startAngle,!0),h.closePath(),ne=0;ne<k.fullCircles;++ne)h.fill();k.endAngle=k.startAngle+b.circumference%Ko}h.beginPath(),h.arc(k.x,k.y,k.outerRadius,k.startAngle,k.endAngle),h.arc(k.x,k.y,k.innerRadius,k.endAngle,k.startAngle,!0),h.closePath(),h.fill(),b.borderWidth&&Ni(h,b,k),h.restore()}}),Vr=Pe.valueOrDefault,wi=qr.global.defaultColor;qr._set("global",{elements:{line:{tension:.4,backgroundColor:wi,borderWidth:3,borderColor:wi,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var ji=nr.extend({_type:"line",draw:function(){var ft,wt,It,h=this,b=h._view,N=h._chart.ctx,k=b.spanGaps,ne=h._children.slice(),he=qr.global,Me=he.elements.line,Qe=-1,Re=h._loop;if(ne.length){if(h._loop){for(ft=0;ft<ne.length;++ft)if(wt=Pe.previousItem(ne,ft),!ne[ft]._view.skip&&wt._view.skip){ne=ne.slice(ft).concat(ne.slice(0,ft)),Re=k;break}Re&&ne.push(ne[0])}for(N.save(),N.lineCap=b.borderCapStyle||Me.borderCapStyle,N.setLineDash&&N.setLineDash(b.borderDash||Me.borderDash),N.lineDashOffset=Vr(b.borderDashOffset,Me.borderDashOffset),N.lineJoin=b.borderJoinStyle||Me.borderJoinStyle,N.lineWidth=Vr(b.borderWidth,Me.borderWidth),N.strokeStyle=b.borderColor||he.defaultColor,N.beginPath(),(It=ne[0]._view).skip||(N.moveTo(It.x,It.y),Qe=0),ft=1;ft<ne.length;++ft)It=ne[ft]._view,wt=-1===Qe?Pe.previousItem(ne,ft):ne[Qe],It.skip||(Qe!==ft-1&&!k||-1===Qe?N.moveTo(It.x,It.y):Pe.canvas.lineTo(N,wt._view,It),Qe=ft);Re&&N.closePath(),N.stroke(),N.restore()}}}),Vi=Pe.valueOrDefault,Po=qr.global.defaultColor;function ko(h){var b=this._view;return!!b&&Math.abs(h-b.x)<b.radius+b.hitRadius}qr._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:Po,borderColor:Po,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var ro=nr.extend({_type:"point",inRange:function(h,b){var N=this._view;return!!N&&Math.pow(h-N.x,2)+Math.pow(b-N.y,2)<Math.pow(N.hitRadius+N.radius,2)},inLabelRange:ko,inXRange:ko,inYRange:function Ir(h){var b=this._view;return!!b&&Math.abs(h-b.y)<b.radius+b.hitRadius},getCenterPoint:function(){var h=this._view;return{x:h.x,y:h.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var h=this._view;return{x:h.x,y:h.y,padding:h.radius+h.borderWidth}},draw:function(h){var b=this._view,N=this._chart.ctx,k=b.pointStyle,ne=b.rotation,he=b.radius,Me=b.x,Qe=b.y,Re=qr.global,ft=Re.defaultColor;b.skip||(void 0===h||Pe.canvas._isPointInArea(b,h))&&(N.strokeStyle=b.borderColor||ft,N.lineWidth=Vi(b.borderWidth,Re.elements.point.borderWidth),N.fillStyle=b.backgroundColor||ft,Pe.canvas.drawPoint(N,k,he,Me,Qe,ne))}}),Vt=qr.global.defaultColor;function bn(h){return h&&void 0!==h.width}function Bn(h){var b,N,k,ne,he;return bn(h)?(b=h.x-(he=h.width/2),N=h.x+he,k=Math.min(h.y,h.base),ne=Math.max(h.y,h.base)):(he=h.height/2,b=Math.min(h.x,h.base),N=Math.max(h.x,h.base),k=h.y-he,ne=h.y+he),{left:b,top:k,right:N,bottom:ne}}function ci(h,b,N){return h===b?N:h===N?b:h}function go(h,b,N){var he,Me,Qe,Re,k=h.borderWidth,ne=function _o(h){var b=h.borderSkipped,N={};return b&&(h.horizontal?h.base>h.x&&(b=ci(b,"left","right")):h.base<h.y&&(b=ci(b,"bottom","top")),N[b]=!0),N}(h);return Pe.isObject(k)?(he=+k.top||0,Me=+k.right||0,Qe=+k.bottom||0,Re=+k.left||0):he=Me=Qe=Re=+k||0,{t:ne.top||he<0?0:he>N?N:he,r:ne.right||Me<0?0:Me>b?b:Me,b:ne.bottom||Qe<0?0:Qe>N?N:Qe,l:ne.left||Re<0?0:Re>b?b:Re}}function ts(h,b,N){var k=null===b,ne=null===N,he=!(!h||k&&ne)&&Bn(h);return he&&(k||b>=he.left&&b<=he.right)&&(ne||N>=he.top&&N<=he.bottom)}qr._set("global",{elements:{rectangle:{backgroundColor:Vt,borderColor:Vt,borderSkipped:"bottom",borderWidth:0}}});var jo=nr.extend({_type:"rectangle",draw:function(){var h=this._chart.ctx,b=this._view,N=function es(h){var b=Bn(h),N=b.right-b.left,k=b.bottom-b.top,ne=go(h,N/2,k/2);return{outer:{x:b.left,y:b.top,w:N,h:k},inner:{x:b.left+ne.l,y:b.top+ne.t,w:N-ne.l-ne.r,h:k-ne.t-ne.b}}}(b),k=N.outer,ne=N.inner;h.fillStyle=b.backgroundColor,h.fillRect(k.x,k.y,k.w,k.h),(k.w!==ne.w||k.h!==ne.h)&&(h.save(),h.beginPath(),h.rect(k.x,k.y,k.w,k.h),h.clip(),h.fillStyle=b.borderColor,h.rect(ne.x,ne.y,ne.w,ne.h),h.fill("evenodd"),h.restore())},height:function(){var h=this._view;return h.base-h.y},inRange:function(h,b){return ts(this._view,h,b)},inLabelRange:function(h,b){var N=this._view;return bn(N)?ts(N,h,null):ts(N,null,b)},inXRange:function(h){return ts(this._view,h,null)},inYRange:function(h){return ts(this._view,null,h)},getCenterPoint:function(){var b,N,h=this._view;return bn(h)?(b=h.x,N=(h.y+h.base)/2):(b=(h.x+h.base)/2,N=h.y),{x:b,y:N}},getArea:function(){var h=this._view;return bn(h)?h.width*Math.abs(h.y-h.base):h.height*Math.abs(h.x-h.base)},tooltipPosition:function(){var h=this._view;return{x:h.x,y:h.y}}}),ss={},Is=ji,la=ro,Ro=jo;ss.Arc=ti,ss.Line=Is,ss.Point=la,ss.Rectangle=Ro;var jl=Pe._deprecated,gl=Pe.valueOrDefault;function da(h,b,N){var Qe,Re,k=N.barThickness,ne=b.stackCount,he=b.pixels[h],Me=Pe.isNullOrUndef(k)?function qa(h,b){var k,ne,he,Me,N=h._length;for(he=1,Me=b.length;he<Me;++he)N=Math.min(N,Math.abs(b[he]-b[he-1]));for(he=0,Me=h.getTicks().length;he<Me;++he)ne=h.getPixelForTick(he),N=he>0?Math.min(N,Math.abs(ne-k)):N,k=ne;return N}(b.scale,b.pixels):-1;return Pe.isNullOrUndef(k)?(Qe=Me*N.categoryPercentage,Re=N.barPercentage):(Qe=k*ne,Re=1),{chunk:Qe/ne,ratio:Re,start:he-Qe/2}}qr._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),qr._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var Rl=Ai.extend({dataElementType:ss.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var b,N,h=this;Ai.prototype.initialize.apply(h,arguments),(b=h.getMeta()).stack=h.getDataset().stack,b.bar=!0,N=h._getIndexScale().options,jl("bar chart",N.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),jl("bar chart",N.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),jl("bar chart",N.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),jl("bar chart",h._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),jl("bar chart",N.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(h){var k,ne,b=this,N=b.getMeta().data;for(b._ruler=b.getRuler(),k=0,ne=N.length;k<ne;++k)b.updateElement(N[k],k,h)},updateElement:function(h,b,N){var k=this,ne=k.getMeta(),he=k.getDataset(),Me=k._resolveDataElementOptions(h,b);h._xScale=k.getScaleForId(ne.xAxisID),h._yScale=k.getScaleForId(ne.yAxisID),h._datasetIndex=k.index,h._index=b,h._model={backgroundColor:Me.backgroundColor,borderColor:Me.borderColor,borderSkipped:Me.borderSkipped,borderWidth:Me.borderWidth,datasetLabel:he.label,label:k.chart.data.labels[b]},Pe.isArray(he.data[b])&&(h._model.borderSkipped=null),k._updateElementGeometry(h,b,N,Me),h.pivot()},_updateElementGeometry:function(h,b,N,k){var ne=this,he=h._model,Me=ne._getValueScale(),Qe=Me.getBasePixel(),Re=Me.isHorizontal(),ft=ne._ruler||ne.getRuler(),wt=ne.calculateBarValuePixels(ne.index,b,k),It=ne.calculateBarIndexPixels(ne.index,b,ft,k);he.horizontal=Re,he.base=N?Qe:wt.base,he.x=Re?N?Qe:wt.head:It.center,he.y=Re?It.center:N?Qe:wt.head,he.height=Re?It.size:void 0,he.width=Re?void 0:It.size},_getStacks:function(h){var Qe,Re,N=this._getIndexScale(),k=N._getMatchingVisibleMetas(this._type),ne=N.options.stacked,he=k.length,Me=[];for(Qe=0;Qe<he&&(Re=k[Qe],(!1===ne||-1===Me.indexOf(Re.stack)||void 0===ne&&void 0===Re.stack)&&Me.push(Re.stack),Re.index!==h);++Qe);return Me},getStackCount:function(){return this._getStacks().length},getStackIndex:function(h,b){var N=this._getStacks(h),k=void 0!==b?N.indexOf(b):-1;return-1===k?N.length-1:k},getRuler:function(){var k,ne,h=this,b=h._getIndexScale(),N=[];for(k=0,ne=h.getMeta().data.length;k<ne;++k)N.push(b.getPixelForValue(null,k,h.index));return{pixels:N,start:b._startPixel,end:b._endPixel,stackCount:h.getStackCount(),scale:b}},calculateBarValuePixels:function(h,b,N){var oi,uo,As,as,ma,Na,Pl,k=this,ne=k.chart,he=k._getValueScale(),Me=he.isHorizontal(),Qe=ne.data.datasets,Re=he._getMatchingVisibleMetas(k._type),ft=he._parseValue(Qe[h].data[b]),wt=N.minBarLength,It=he.options.stacked,Cn=k.getMeta().stack,er=void 0===ft.start?0:ft.max>=0&&ft.min>=0?ft.min:ft.max,sr=void 0===ft.start?ft.end:ft.max>=0&&ft.min>=0?ft.max-ft.min:ft.min-ft.max,Dr=Re.length;if(It||void 0===It&&void 0!==Cn)for(oi=0;oi<Dr&&(uo=Re[oi]).index!==h;++oi)uo.stack===Cn&&(As=void 0===(Pl=he._parseValue(Qe[uo.index].data[b])).start?Pl.end:Pl.min>=0&&Pl.max>=0?Pl.max:Pl.min,(ft.min<0&&As<0||ft.max>=0&&As>0)&&(er+=As));return as=he.getPixelForValue(er),Na=(ma=he.getPixelForValue(er+sr))-as,void 0!==wt&&Math.abs(Na)<wt&&(Na=wt,ma=sr>=0&&!Me||sr<0&&Me?as-wt:as+wt),{size:Na,base:as,head:ma,center:ma+Na/2}},calculateBarIndexPixels:function(h,b,N,k){var he="flex"===k.barThickness?function $a(h,b,N){var Re,k=b.pixels,ne=k[h],he=h>0?k[h-1]:null,Me=h<k.length-1?k[h+1]:null,Qe=N.categoryPercentage;return null===he&&(he=ne-(null===Me?b.end-b.start:Me-ne)),null===Me&&(Me=ne+ne-he),Re=ne-(ne-Math.min(he,Me))/2*Qe,{chunk:Math.abs(Me-he)/2*Qe/b.stackCount,ratio:N.barPercentage,start:Re}}(b,N,k):da(b,N,k),Me=this.getStackIndex(h,this.getMeta().stack),Qe=he.start+he.chunk*Me+he.chunk/2,Re=Math.min(gl(k.maxBarThickness,1/0),he.chunk*he.ratio);return{base:Qe-Re/2,head:Qe+Re/2,center:Qe,size:Re}},draw:function(){var h=this,b=h.chart,N=h._getValueScale(),k=h.getMeta().data,ne=h.getDataset(),he=k.length,Me=0;for(Pe.canvas.clipArea(b.ctx,b.chartArea);Me<he;++Me){var Qe=N._parseValue(ne.data[Me]);!isNaN(Qe.min)&&!isNaN(Qe.max)&&k[Me].draw()}Pe.canvas.unclipArea(b.ctx)},_resolveDataElementOptions:function(){var h=this,b=Pe.extend({},Ai.prototype._resolveDataElementOptions.apply(h,arguments)),N=h._getIndexScale().options,k=h._getValueScale().options;return b.barPercentage=gl(N.barPercentage,b.barPercentage),b.barThickness=gl(N.barThickness,b.barThickness),b.categoryPercentage=gl(N.categoryPercentage,b.categoryPercentage),b.maxBarThickness=gl(N.maxBarThickness,b.maxBarThickness),b.minBarLength=gl(k.minBarLength,b.minBarLength),b}}),Ji=Pe.valueOrDefault,Ha=Pe.options.resolve;qr._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(h,b){return(b.datasets[h.datasetIndex].label||"")+": ("+h.xLabel+", "+h.yLabel+", "+b.datasets[h.datasetIndex].data[h.index].r+")"}}}});var Ts=Ai.extend({dataElementType:ss.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(h){var b=this,N=b.getMeta();Pe.each(N.data,function(ne,he){b.updateElement(ne,he,h)})},updateElement:function(h,b,N){var k=this,ne=k.getMeta(),he=h.custom||{},Me=k.getScaleForId(ne.xAxisID),Qe=k.getScaleForId(ne.yAxisID),Re=k._resolveDataElementOptions(h,b),ft=k.getDataset().data[b],wt=k.index,It=N?Me.getPixelForDecimal(.5):Me.getPixelForValue("object"==typeof ft?ft:NaN,b,wt),Cn=N?Qe.getBasePixel():Qe.getPixelForValue(ft,b,wt);h._xScale=Me,h._yScale=Qe,h._options=Re,h._datasetIndex=wt,h._index=b,h._model={backgroundColor:Re.backgroundColor,borderColor:Re.borderColor,borderWidth:Re.borderWidth,hitRadius:Re.hitRadius,pointStyle:Re.pointStyle,rotation:Re.rotation,radius:N?0:Re.radius,skip:he.skip||isNaN(It)||isNaN(Cn),x:It,y:Cn},h.pivot()},setHoverStyle:function(h){var b=h._model,N=h._options,k=Pe.getHoverColor;h.$previousStyle={backgroundColor:b.backgroundColor,borderColor:b.borderColor,borderWidth:b.borderWidth,radius:b.radius},b.backgroundColor=Ji(N.hoverBackgroundColor,k(N.backgroundColor)),b.borderColor=Ji(N.hoverBorderColor,k(N.borderColor)),b.borderWidth=Ji(N.hoverBorderWidth,N.borderWidth),b.radius=N.radius+N.hoverRadius},_resolveDataElementOptions:function(h,b){var N=this,k=N.chart,ne=N.getDataset(),he=h.custom||{},Me=ne.data[b]||{},Qe=Ai.prototype._resolveDataElementOptions.apply(N,arguments),Re={chart:k,dataIndex:b,dataset:ne,datasetIndex:N.index};return N._cachedDataOpts===Qe&&(Qe=Pe.extend({},Qe)),Qe.radius=Ha([he.radius,Me.r,N._config.radius,k.options.elements.point.radius],Re,b),Qe}}),hs=Pe.valueOrDefault,$s=Math.PI,Aa=2*$s,Ja=$s/2;qr._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(h){var he,Me,Qe,b=document.createElement("ul"),N=h.data,k=N.datasets,ne=N.labels;if(b.setAttribute("class",h.id+"-legend"),k.length)for(he=0,Me=k[0].data.length;he<Me;++he)(Qe=b.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=k[0].backgroundColor[he],ne[he]&&Qe.appendChild(document.createTextNode(ne[he]));return b.outerHTML},legend:{labels:{generateLabels:function(h){var b=h.data;return b.labels.length&&b.datasets.length?b.labels.map(function(N,k){var ne=h.getDatasetMeta(0),he=ne.controller.getStyle(k);return{text:N,fillStyle:he.backgroundColor,strokeStyle:he.borderColor,lineWidth:he.borderWidth,hidden:isNaN(b.datasets[0].data[k])||ne.data[k].hidden,index:k}}):[]}},onClick:function(h,b){var ne,he,Me,N=b.index,k=this.chart;for(ne=0,he=(k.data.datasets||[]).length;ne<he;++ne)(Me=k.getDatasetMeta(ne)).data[N]&&(Me.data[N].hidden=!Me.data[N].hidden);k.update()}},cutoutPercentage:50,rotation:-Ja,circumference:Aa,tooltips:{callbacks:{title:function(){return""},label:function(h,b){var N=b.labels[h.index],k=": "+b.datasets[h.datasetIndex].data[h.index];return Pe.isArray(N)?(N=N.slice())[0]+=k:N+=k,N}}}});var fa=Ai.extend({dataElementType:ss.Arc,linkScales:Pe.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(h){for(var b=0,N=0;N<h;++N)this.chart.isDatasetVisible(N)&&++b;return b},update:function(h){var oi,uo,b=this,N=b.chart,k=N.chartArea,ne=N.options,he=1,Me=1,Qe=0,Re=0,ft=b.getMeta(),wt=ft.data,It=ne.cutoutPercentage/100||0,Cn=ne.circumference,er=b._getRingWeight(b.index);if(Cn<Aa){var As=ne.rotation%Aa,as=(As+=As>=$s?-Aa:As<-$s?Aa:0)+Cn,ma=Math.cos(As),Na=Math.sin(As),Pl=Math.cos(as),il=Math.sin(as),dl=As<=0&&as>=0||as>=Aa,Nl=As<=Ja&&as>=Ja||as>=Aa+Ja,ac=As<=-Ja&&as>=-Ja||as>=$s+Ja,wa=As===-$s||as>=$s?-1:Math.min(ma,ma*It,Pl,Pl*It),nc=ac?-1:Math.min(Na,Na*It,il,il*It),yc=dl?1:Math.max(ma,ma*It,Pl,Pl*It),Gc=Nl?1:Math.max(Na,Na*It,il,il*It);he=(yc-wa)/2,Me=(Gc-nc)/2,Qe=-(yc+wa)/2,Re=-(Gc+nc)/2}for(oi=0,uo=wt.length;oi<uo;++oi)wt[oi]._options=b._resolveDataElementOptions(wt[oi],oi);for(N.borderWidth=b.getMaxBorderWidth(),N.outerRadius=Math.max(Math.min((k.right-k.left-N.borderWidth)/he,(k.bottom-k.top-N.borderWidth)/Me)/2,0),N.innerRadius=Math.max(N.outerRadius*It,0),N.radiusLength=(N.outerRadius-N.innerRadius)/(b._getVisibleDatasetWeightTotal()||1),N.offsetX=Qe*N.outerRadius,N.offsetY=Re*N.outerRadius,ft.total=b.calculateTotal(),b.outerRadius=N.outerRadius-N.radiusLength*b._getRingWeightOffset(b.index),b.innerRadius=Math.max(b.outerRadius-N.radiusLength*er,0),oi=0,uo=wt.length;oi<uo;++oi)b.updateElement(wt[oi],oi,h)},updateElement:function(h,b,N){var k=this,ne=k.chart,he=ne.chartArea,Me=ne.options,Qe=Me.animation,Re=(he.left+he.right)/2,ft=(he.top+he.bottom)/2,wt=Me.rotation,It=Me.rotation,Cn=k.getDataset(),er=N&&Qe.animateRotate||h.hidden?0:k.calculateCircumference(Cn.data[b])*(Me.circumference/Aa),oi=h._options||{};Pe.extend(h,{_datasetIndex:k.index,_index:b,_model:{backgroundColor:oi.backgroundColor,borderColor:oi.borderColor,borderWidth:oi.borderWidth,borderAlign:oi.borderAlign,x:Re+ne.offsetX,y:ft+ne.offsetY,startAngle:wt,endAngle:It,circumference:er,outerRadius:N&&Qe.animateScale?0:k.outerRadius,innerRadius:N&&Qe.animateScale?0:k.innerRadius,label:Pe.valueAtIndexOrDefault(Cn.label,b,ne.data.labels[b])}});var uo=h._model;(!N||!Qe.animateRotate)&&(uo.startAngle=0===b?Me.rotation:k.getMeta().data[b-1]._model.endAngle,uo.endAngle=uo.startAngle+uo.circumference),h.pivot()},calculateTotal:function(){var k,h=this.getDataset(),b=this.getMeta(),N=0;return Pe.each(b.data,function(ne,he){k=h.data[he],!isNaN(k)&&!ne.hidden&&(N+=Math.abs(k))}),N},calculateCircumference:function(h){var b=this.getMeta().total;return b>0&&!isNaN(h)?Aa*(Math.abs(h)/b):0},getMaxBorderWidth:function(h){var ne,he,Me,Qe,Re,ft,wt,It,N=0,k=this.chart;if(!h)for(ne=0,he=k.data.datasets.length;ne<he;++ne)if(k.isDatasetVisible(ne)){h=(Me=k.getDatasetMeta(ne)).data,ne!==this.index&&(Re=Me.controller);break}if(!h)return 0;for(ne=0,he=h.length;ne<he;++ne)Qe=h[ne],Re?(Re._configure(),ft=Re._resolveDataElementOptions(Qe,ne)):ft=Qe._options,"inner"!==ft.borderAlign&&(N=(It=ft.hoverBorderWidth)>(N=(wt=ft.borderWidth)>N?wt:N)?It:N);return N},setHoverStyle:function(h){var b=h._model,N=h._options,k=Pe.getHoverColor;h.$previousStyle={backgroundColor:b.backgroundColor,borderColor:b.borderColor,borderWidth:b.borderWidth},b.backgroundColor=hs(N.hoverBackgroundColor,k(N.backgroundColor)),b.borderColor=hs(N.hoverBorderColor,k(N.borderColor)),b.borderWidth=hs(N.hoverBorderWidth,N.borderWidth)},_getRingWeightOffset:function(h){for(var b=0,N=0;N<h;++N)this.chart.isDatasetVisible(N)&&(b+=this._getRingWeight(N));return b},_getRingWeight:function(h){return Math.max(hs(this.chart.data.datasets[h].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});qr._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),qr._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Xo=Rl.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),No=Pe.valueOrDefault,Cs=Pe.options.resolve,ns=Pe.canvas._isPointInArea;function Fo(h,b){var N=h&&h.options.ticks||{},k=N.reverse,ne=void 0===N.min?b:0,he=void 0===N.max?b:0;return{start:k?he:ne,end:k?ne:he}}qr._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var gt=Ai.extend({datasetElementType:ss.Line,dataElementType:ss.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(h){var Re,ft,b=this,N=b.getMeta(),k=N.dataset,ne=N.data||[],Me=b._config,Qe=b._showLine=No(Me.showLine,b.chart.options.showLines);for(b._xScale=b.getScaleForId(N.xAxisID),b._yScale=b.getScaleForId(N.yAxisID),Qe&&(void 0!==Me.tension&&void 0===Me.lineTension&&(Me.lineTension=Me.tension),k._scale=b._yScale,k._datasetIndex=b.index,k._children=ne,k._model=b._resolveDatasetElementOptions(k),k.pivot()),Re=0,ft=ne.length;Re<ft;++Re)b.updateElement(ne[Re],Re,h);for(Qe&&0!==k._model.tension&&b.updateBezierControlPoints(),Re=0,ft=ne.length;Re<ft;++Re)ne[Re].pivot()},updateElement:function(h,b,N){var Cn,er,k=this,ne=k.getMeta(),he=h.custom||{},Me=k.getDataset(),Qe=k.index,Re=Me.data[b],ft=k._xScale,wt=k._yScale,It=ne.dataset._model,sr=k._resolveDataElementOptions(h,b);Cn=ft.getPixelForValue("object"==typeof Re?Re:NaN,b,Qe),er=N?wt.getBasePixel():k.calculatePointY(Re,b,Qe),h._xScale=ft,h._yScale=wt,h._options=sr,h._datasetIndex=Qe,h._index=b,h._model={x:Cn,y:er,skip:he.skip||isNaN(Cn)||isNaN(er),radius:sr.radius,pointStyle:sr.pointStyle,rotation:sr.rotation,backgroundColor:sr.backgroundColor,borderColor:sr.borderColor,borderWidth:sr.borderWidth,tension:No(he.tension,It?It.tension:0),steppedLine:!!It&&It.steppedLine,hitRadius:sr.hitRadius}},_resolveDatasetElementOptions:function(h){var b=this,N=b._config,k=h.custom||{},ne=b.chart.options,he=ne.elements.line,Me=Ai.prototype._resolveDatasetElementOptions.apply(b,arguments);return Me.spanGaps=No(N.spanGaps,ne.spanGaps),Me.tension=No(N.lineTension,he.tension),Me.steppedLine=Cs([k.steppedLine,N.steppedLine,he.stepped]),Me.clip=function io(h){var b,N,k,ne;return Pe.isObject(h)?(b=h.top,N=h.right,k=h.bottom,ne=h.left):b=N=k=ne=h,{top:b,right:N,bottom:k,left:ne}}(No(N.clip,function zr(h,b,N){var k=N/2,ne=Fo(h,k),he=Fo(b,k);return{top:he.end,right:ne.end,bottom:he.start,left:ne.start}}(b._xScale,b._yScale,Me.borderWidth))),Me},calculatePointY:function(h,b,N){var Re,wt,It,Cn,er,sr,ne=this.chart,he=this._yScale,Me=0,Qe=0;if(he.options.stacked){for(Cn=+he.getRightValue(h),sr=(er=ne._getSortedVisibleDatasetMetas()).length,Re=0;Re<sr&&(wt=er[Re]).index!==N;++Re)"line"===wt.type&&wt.yAxisID===he.id&&((It=+he.getRightValue(ne.data.datasets[wt.index].data[b]))<0?Qe+=It||0:Me+=It||0);return he.getPixelForValue(Cn<0?Qe+Cn:Me+Cn)}return he.getPixelForValue(h)},updateBezierControlPoints:function(){var Me,Qe,Re,ft,b=this.chart,N=this.getMeta(),k=N.dataset._model,ne=b.chartArea,he=N.data||[];function wt(It,Cn,er){return Math.max(Math.min(It,er),Cn)}if(k.spanGaps&&(he=he.filter(function(It){return!It._model.skip})),"monotone"===k.cubicInterpolationMode)Pe.splineCurveMonotone(he);else for(Me=0,Qe=he.length;Me<Qe;++Me)Re=he[Me]._model,ft=Pe.splineCurve(Pe.previousItem(he,Me)._model,Re,Pe.nextItem(he,Me)._model,k.tension),Re.controlPointPreviousX=ft.previous.x,Re.controlPointPreviousY=ft.previous.y,Re.controlPointNextX=ft.next.x,Re.controlPointNextY=ft.next.y;if(b.options.elements.line.capBezierPoints)for(Me=0,Qe=he.length;Me<Qe;++Me)ns(Re=he[Me]._model,ne)&&(Me>0&&ns(he[Me-1]._model,ne)&&(Re.controlPointPreviousX=wt(Re.controlPointPreviousX,ne.left,ne.right),Re.controlPointPreviousY=wt(Re.controlPointPreviousY,ne.top,ne.bottom)),Me<he.length-1&&ns(he[Me+1]._model,ne)&&(Re.controlPointNextX=wt(Re.controlPointNextX,ne.left,ne.right),Re.controlPointNextY=wt(Re.controlPointNextY,ne.top,ne.bottom)))},draw:function(){var Re,h=this,b=h.chart,N=h.getMeta(),k=N.data||[],ne=b.chartArea,he=b.canvas,Me=0,Qe=k.length;for(h._showLine&&(Pe.canvas.clipArea(b.ctx,{left:!1===(Re=N.dataset._model.clip).left?0:ne.left-Re.left,right:!1===Re.right?he.width:ne.right+Re.right,top:!1===Re.top?0:ne.top-Re.top,bottom:!1===Re.bottom?he.height:ne.bottom+Re.bottom}),N.dataset.draw(),Pe.canvas.unclipArea(b.ctx));Me<Qe;++Me)k[Me].draw(ne)},setHoverStyle:function(h){var b=h._model,N=h._options,k=Pe.getHoverColor;h.$previousStyle={backgroundColor:b.backgroundColor,borderColor:b.borderColor,borderWidth:b.borderWidth,radius:b.radius},b.backgroundColor=No(N.hoverBackgroundColor,k(N.backgroundColor)),b.borderColor=No(N.hoverBorderColor,k(N.borderColor)),b.borderWidth=No(N.hoverBorderWidth,N.borderWidth),b.radius=No(N.hoverRadius,N.radius)}}),Tn=Pe.options.resolve;qr._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(h){var he,Me,Qe,b=document.createElement("ul"),N=h.data,k=N.datasets,ne=N.labels;if(b.setAttribute("class",h.id+"-legend"),k.length)for(he=0,Me=k[0].data.length;he<Me;++he)(Qe=b.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=k[0].backgroundColor[he],ne[he]&&Qe.appendChild(document.createTextNode(ne[he]));return b.outerHTML},legend:{labels:{generateLabels:function(h){var b=h.data;return b.labels.length&&b.datasets.length?b.labels.map(function(N,k){var ne=h.getDatasetMeta(0),he=ne.controller.getStyle(k);return{text:N,fillStyle:he.backgroundColor,strokeStyle:he.borderColor,lineWidth:he.borderWidth,hidden:isNaN(b.datasets[0].data[k])||ne.data[k].hidden,index:k}}):[]}},onClick:function(h,b){var ne,he,Me,N=b.index,k=this.chart;for(ne=0,he=(k.data.datasets||[]).length;ne<he;++ne)(Me=k.getDatasetMeta(ne)).data[N].hidden=!Me.data[N].hidden;k.update()}},tooltips:{callbacks:{title:function(){return""},label:function(h,b){return b.labels[h.index]+": "+h.yLabel}}}});var ie=Ai.extend({dataElementType:ss.Arc,linkScales:Pe.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(h){var Re,ft,wt,b=this,N=b.getDataset(),k=b.getMeta(),ne=b.chart.options.startAngle||0,he=b._starts=[],Me=b._angles=[],Qe=k.data;for(b._updateRadius(),k.count=b.countVisibleElements(),Re=0,ft=N.data.length;Re<ft;Re++)he[Re]=ne,wt=b._computeAngle(Re),Me[Re]=wt,ne+=wt;for(Re=0,ft=Qe.length;Re<ft;++Re)Qe[Re]._options=b._resolveDataElementOptions(Qe[Re],Re),b.updateElement(Qe[Re],Re,h)},_updateRadius:function(){var h=this,b=h.chart,N=b.chartArea,k=b.options,ne=Math.min(N.right-N.left,N.bottom-N.top);b.outerRadius=Math.max(ne/2,0),b.innerRadius=Math.max(k.cutoutPercentage?b.outerRadius/100*k.cutoutPercentage:1,0),b.radiusLength=(b.outerRadius-b.innerRadius)/b.getVisibleDatasetCount(),h.outerRadius=b.outerRadius-b.radiusLength*h.index,h.innerRadius=h.outerRadius-b.radiusLength},updateElement:function(h,b,N){var k=this,ne=k.chart,he=k.getDataset(),Me=ne.options,Qe=Me.animation,Re=ne.scale,ft=ne.data.labels,wt=Re.xCenter,It=Re.yCenter,Cn=Me.startAngle,er=h.hidden?0:Re.getDistanceFromCenterForValue(he.data[b]),sr=k._starts[b],Dr=sr+(h.hidden?0:k._angles[b]),oi=Qe.animateScale?0:Re.getDistanceFromCenterForValue(he.data[b]),uo=h._options||{};Pe.extend(h,{_datasetIndex:k.index,_index:b,_scale:Re,_model:{backgroundColor:uo.backgroundColor,borderColor:uo.borderColor,borderWidth:uo.borderWidth,borderAlign:uo.borderAlign,x:wt,y:It,innerRadius:0,outerRadius:N?oi:er,startAngle:N&&Qe.animateRotate?Cn:sr,endAngle:N&&Qe.animateRotate?Cn:Dr,label:Pe.valueAtIndexOrDefault(ft,b,ft[b])}}),h.pivot()},countVisibleElements:function(){var h=this.getDataset(),b=this.getMeta(),N=0;return Pe.each(b.data,function(k,ne){!isNaN(h.data[ne])&&!k.hidden&&N++}),N},setHoverStyle:function(h){var b=h._model,N=h._options,k=Pe.getHoverColor,ne=Pe.valueOrDefault;h.$previousStyle={backgroundColor:b.backgroundColor,borderColor:b.borderColor,borderWidth:b.borderWidth},b.backgroundColor=ne(N.hoverBackgroundColor,k(N.backgroundColor)),b.borderColor=ne(N.hoverBorderColor,k(N.borderColor)),b.borderWidth=ne(N.hoverBorderWidth,N.borderWidth)},_computeAngle:function(h){var b=this,N=this.getMeta().count,k=b.getDataset(),ne=b.getMeta();return isNaN(k.data[h])||ne.data[h].hidden?0:Tn([b.chart.options.elements.arc.angle,2*Math.PI/N],{chart:b.chart,dataIndex:h,dataset:k,datasetIndex:b.index},h)}});qr._set("pie",Pe.clone(qr.doughnut)),qr._set("pie",{cutoutPercentage:0});var Ze=fa,Jt=Pe.valueOrDefault;qr._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var gn=Ai.extend({datasetElementType:ss.Line,dataElementType:ss.Point,linkScales:Pe.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(h){var Qe,Re,b=this,N=b.getMeta(),k=N.dataset,ne=N.data||[],he=b.chart.scale,Me=b._config;for(void 0!==Me.tension&&void 0===Me.lineTension&&(Me.lineTension=Me.tension),k._scale=he,k._datasetIndex=b.index,k._children=ne,k._loop=!0,k._model=b._resolveDatasetElementOptions(k),k.pivot(),Qe=0,Re=ne.length;Qe<Re;++Qe)b.updateElement(ne[Qe],Qe,h);for(b.updateBezierControlPoints(),Qe=0,Re=ne.length;Qe<Re;++Qe)ne[Qe].pivot()},updateElement:function(h,b,N){var k=this,ne=h.custom||{},he=k.getDataset(),Me=k.chart.scale,Qe=Me.getPointPositionForValue(b,he.data[b]),Re=k._resolveDataElementOptions(h,b),ft=k.getMeta().dataset._model,wt=N?Me.xCenter:Qe.x,It=N?Me.yCenter:Qe.y;h._scale=Me,h._options=Re,h._datasetIndex=k.index,h._index=b,h._model={x:wt,y:It,skip:ne.skip||isNaN(wt)||isNaN(It),radius:Re.radius,pointStyle:Re.pointStyle,rotation:Re.rotation,backgroundColor:Re.backgroundColor,borderColor:Re.borderColor,borderWidth:Re.borderWidth,tension:Jt(ne.tension,ft?ft.tension:0),hitRadius:Re.hitRadius}},_resolveDatasetElementOptions:function(){var h=this,b=h._config,N=h.chart.options,k=Ai.prototype._resolveDatasetElementOptions.apply(h,arguments);return k.spanGaps=Jt(b.spanGaps,N.spanGaps),k.tension=Jt(b.lineTension,N.elements.line.tension),k},updateBezierControlPoints:function(){var ne,he,Me,Qe,b=this.getMeta(),N=this.chart.chartArea,k=b.data||[];function Re(ft,wt,It){return Math.max(Math.min(ft,It),wt)}for(b.dataset._model.spanGaps&&(k=k.filter(function(ft){return!ft._model.skip})),ne=0,he=k.length;ne<he;++ne)Me=k[ne]._model,Qe=Pe.splineCurve(Pe.previousItem(k,ne,!0)._model,Me,Pe.nextItem(k,ne,!0)._model,Me.tension),Me.controlPointPreviousX=Re(Qe.previous.x,N.left,N.right),Me.controlPointPreviousY=Re(Qe.previous.y,N.top,N.bottom),Me.controlPointNextX=Re(Qe.next.x,N.left,N.right),Me.controlPointNextY=Re(Qe.next.y,N.top,N.bottom)},setHoverStyle:function(h){var b=h._model,N=h._options,k=Pe.getHoverColor;h.$previousStyle={backgroundColor:b.backgroundColor,borderColor:b.borderColor,borderWidth:b.borderWidth,radius:b.radius},b.backgroundColor=Jt(N.hoverBackgroundColor,k(N.backgroundColor)),b.borderColor=Jt(N.hoverBorderColor,k(N.borderColor)),b.borderWidth=Jt(N.hoverBorderWidth,N.borderWidth),b.radius=Jt(N.hoverRadius,N.radius)}});qr._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(h){return"("+h.xLabel+", "+h.yLabel+")"}}}}),qr._set("global",{datasets:{scatter:{showLine:!1}}});var Bi={bar:Rl,bubble:Ts,doughnut:fa,horizontalBar:Xo,line:gt,polarArea:ie,pie:Ze,radar:gn,scatter:gt};function Xi(h,b){return h.native?{x:h.x,y:h.y}:Pe.getRelativePosition(h,b)}function ws(h,b){var k,ne,he,Me,Qe,Re,N=h._getSortedVisibleDatasetMetas();for(ne=0,Me=N.length;ne<Me;++ne)for(he=0,Qe=(k=N[ne].data).length;he<Qe;++he)(Re=k[he])._view.skip||b(Re)}function ds(h,b){var N=[];return ws(h,function(k){k.inRange(b.x,b.y)&&N.push(k)}),N}function qs(h,b,N,k){var ne=Number.POSITIVE_INFINITY,he=[];return ws(h,function(Me){if(!N||Me.inRange(b.x,b.y)){var Qe=Me.getCenterPoint(),Re=k(b,Qe);Re<ne?(he=[Me],ne=Re):Re===ne&&he.push(Me)}}),he}function Js(h){var b=-1!==h.indexOf("x"),N=-1!==h.indexOf("y");return function(k,ne){var he=b?Math.abs(k.x-ne.x):0,Me=N?Math.abs(k.y-ne.y):0;return Math.sqrt(Math.pow(he,2)+Math.pow(Me,2))}}function Ll(h,b,N){var k=Xi(b,h);N.axis=N.axis||"x";var ne=Js(N.axis),he=N.intersect?ds(h,k):qs(h,k,!1,ne),Me=[];return he.length?(h._getSortedVisibleDatasetMetas().forEach(function(Qe){var Re=Qe.data[he[0]._index];Re&&!Re._view.skip&&Me.push(Re)}),Me):[]}var vl={modes:{single:function(h,b){var N=Xi(b,h),k=[];return ws(h,function(ne){if(ne.inRange(N.x,N.y))return k.push(ne),k}),k.slice(0,1)},label:Ll,index:Ll,dataset:function(h,b,N){var k=Xi(b,h);N.axis=N.axis||"xy";var ne=Js(N.axis),he=N.intersect?ds(h,k):qs(h,k,!1,ne);return he.length>0&&(he=h.getDatasetMeta(he[0]._datasetIndex).data),he},"x-axis":function(h,b){return Ll(h,b,{intersect:!1})},point:function(h,b){return ds(h,Xi(b,h))},nearest:function(h,b,N){var k=Xi(b,h);N.axis=N.axis||"xy";var ne=Js(N.axis);return qs(h,k,N.intersect,ne)},x:function(h,b,N){var k=Xi(b,h),ne=[],he=!1;return ws(h,function(Me){Me.inXRange(k.x)&&ne.push(Me),Me.inRange(k.x,k.y)&&(he=!0)}),N.intersect&&!he&&(ne=[]),ne},y:function(h,b,N){var k=Xi(b,h),ne=[],he=!1;return ws(h,function(Me){Me.inYRange(k.y)&&ne.push(Me),Me.inRange(k.x,k.y)&&(he=!0)}),N.intersect&&!he&&(ne=[]),ne}}},Yu=Pe.extend;function Nc(h,b){return Pe.where(h,function(N){return N.pos===b})}function qu(h,b){return h.sort(function(N,k){var ne=b?k:N,he=b?N:k;return ne.weight===he.weight?ne.index-he.index:ne.weight-he.weight})}function au(h,b,N,k){return Math.max(h[N],b[N])+Math.max(h[k],b[k])}function Da(h,b,N){var he,Me,k=N.box,ne=h.maxPadding;if(N.size&&(h[N.pos]-=N.size),N.size=N.horizontal?k.height:k.width,h[N.pos]+=N.size,k.getPadding){var Qe=k.getPadding();ne.top=Math.max(ne.top,Qe.top),ne.left=Math.max(ne.left,Qe.left),ne.bottom=Math.max(ne.bottom,Qe.bottom),ne.right=Math.max(ne.right,Qe.right)}if(he=b.outerWidth-au(ne,h,"left","right"),Me=b.outerHeight-au(ne,h,"top","bottom"),he!==h.w||Me!==h.h){h.w=he,h.h=Me;var Re=N.horizontal?[he,h.w]:[Me,h.h];return!(Re[0]===Re[1]||isNaN(Re[0])&&isNaN(Re[1]))}}function ju(h,b){var N=b.maxPadding;return function k(ne){var he={left:0,top:0,right:0,bottom:0};return ne.forEach(function(Me){he[Me]=Math.max(b[Me],N[Me])}),he}(h?["left","right"]:["top","bottom"])}function el(h,b,N){var ne,he,Me,Qe,Re,ft,k=[];for(ne=0,he=h.length;ne<he;++ne)(Qe=(Me=h[ne]).box).update(Me.width||b.w,Me.height||b.h,ju(Me.horizontal,b)),Da(b,N,Me)&&(ft=!0,k.length&&(Re=!0)),Qe.fullWidth||k.push(Me);return Re&&el(k,b,N)||ft}function oc(h,b,N){var Me,Qe,Re,ft,k=N.padding,ne=b.x,he=b.y;for(Me=0,Qe=h.length;Me<Qe;++Me)ft=(Re=h[Me]).box,Re.horizontal?(ft.left=ft.fullWidth?k.left:b.left,ft.right=ft.fullWidth?N.outerWidth-k.right:b.left+b.w,ft.top=he,ft.bottom=he+ft.height,ft.width=ft.right-ft.left,he=ft.bottom):(ft.left=ne,ft.right=ne+ft.width,ft.top=b.top,ft.bottom=b.top+b.h,ft.height=ft.bottom-ft.top,ne=ft.right);b.x=ne,b.y=he}qr._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var Xl={defaults:{},addBox:function(h,b){h.boxes||(h.boxes=[]),b.fullWidth=b.fullWidth||!1,b.position=b.position||"top",b.weight=b.weight||0,b._layers=b._layers||function(){return[{z:0,draw:function(){b.draw.apply(b,arguments)}}]},h.boxes.push(b)},removeBox:function(h,b){var N=h.boxes?h.boxes.indexOf(b):-1;-1!==N&&h.boxes.splice(N,1)},configure:function(h,b,N){for(var Me,k=["fullWidth","position","weight"],ne=k.length,he=0;he<ne;++he)N.hasOwnProperty(Me=k[he])&&(b[Me]=N[Me])},update:function(h,b,N){if(h){var ne=Pe.options.toPadding((h.options.layout||{}).padding),he=b-ne.width,Me=N-ne.height,Qe=function yl(h){var b=function Ol(h){var N,k,ne,b=[];for(N=0,k=(h||[]).length;N<k;++N)b.push({index:N,box:ne=h[N],pos:ne.position,horizontal:ne.isHorizontal(),weight:ne.weight});return b}(h),N=qu(Nc(b,"left"),!0),k=qu(Nc(b,"right")),ne=qu(Nc(b,"top"),!0),he=qu(Nc(b,"bottom"));return{leftAndTop:N.concat(ne),rightAndBottom:k.concat(he),chartArea:Nc(b,"chartArea"),vertical:N.concat(k),horizontal:ne.concat(he)}}(h.boxes),Re=Qe.vertical,ft=Qe.horizontal,wt=Object.freeze({outerWidth:b,outerHeight:N,padding:ne,availableWidth:he,vBoxMaxWidth:he/2/Re.length,hBoxMaxHeight:Me/2}),It=Yu({maxPadding:Yu({},ne),w:he,h:Me,x:ne.left,y:ne.top},ne);(function Kc(h,b){var N,k,ne;for(N=0,k=h.length;N<k;++N)(ne=h[N]).width=ne.horizontal?ne.box.fullWidth&&b.availableWidth:b.vBoxMaxWidth,ne.height=ne.horizontal&&b.hBoxMaxHeight})(Re.concat(ft),wt),el(Re,It,wt),el(ft,It,wt)&&el(Re,It,wt),function yu(h){var b=h.maxPadding;function N(k){var ne=Math.max(b[k]-h[k],0);return h[k]+=ne,ne}h.y+=N("top"),h.x+=N("left"),N("right"),N("bottom")}(It),oc(Qe.leftAndTop,It,wt),It.x+=It.w,It.y+=It.h,oc(Qe.rightAndBottom,It,wt),h.chartArea={left:It.left,top:It.top,right:It.left+It.w,bottom:It.top+It.h},Pe.each(Qe.chartArea,function(Cn){var er=Cn.box;Yu(er,h.chartArea),er.update(It.w,It.h)})}}},zu=function c(h){return h&&h.default||h}(Object.freeze({__proto__:null,default:"/*\r\n * DOM element rendering detection\r\n * https://davidwalsh.name/detect-node-insertion\r\n */\r\n@keyframes chartjs-render-animation {\r\n\tfrom { opacity: 0.99; }\r\n\tto { opacity: 1; }\r\n}\r\n\r\n.chartjs-render-monitor {\r\n\tanimation: chartjs-render-animation 0.001s;\r\n}\r\n\r\n/*\r\n * DOM element resizing detection\r\n * https://github.com/marcj/css-element-queries\r\n */\r\n.chartjs-size-monitor,\r\n.chartjs-size-monitor-expand,\r\n.chartjs-size-monitor-shrink {\r\n\tposition: absolute;\r\n\tdirection: ltr;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\tvisibility: hidden;\r\n\tz-index: -1;\r\n}\r\n\r\n.chartjs-size-monitor-expand > div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n"})),ua="$chartjs",El="chartjs-",uu=El+"size-monitor",Eu=El+"render-monitor",$u=El+"render-animation",Ba=["animationstart","webkitAnimationStart"],Tl={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function tl(h,b){var N=Pe.getStyle(h,b),k=N&&N.match(/^(\d+)(\.\d+)?px$/);return k?Number(k[1]):void 0}var cu=!!function(){var h=!1;try{var b=Object.defineProperty({},"passive",{get:function(){h=!0}});window.addEventListener("e",null,b)}catch{}return h}()&&{passive:!0};function Sa(h,b,N){h.addEventListener(b,N,cu)}function Ru(h,b,N){h.removeEventListener(b,N,cu)}function xu(h,b,N,k,ne){return{type:h,chart:b,native:ne||null,x:void 0!==N?N:null,y:void 0!==k?k:null}}function Su(h){var b=document.createElement("div");return b.className=h||"",b}function Dc(h,b,N){var k=h[ua]||(h[ua]={}),ne=k.resizer=function gc(h){var b=1e6,N=Su(uu),k=Su(uu+"-expand"),ne=Su(uu+"-shrink");k.appendChild(Su()),ne.appendChild(Su()),N.appendChild(k),N.appendChild(ne),N._reset=function(){k.scrollLeft=b,k.scrollTop=b,ne.scrollLeft=b,ne.scrollTop=b};var he=function(){N._reset(),h()};return Sa(k,"scroll",he.bind(k,"expand")),Sa(ne,"scroll",he.bind(ne,"shrink")),N}(function nl(h,b){var N=!1,k=[];return function(){k=Array.prototype.slice.call(arguments),b=b||this,N||(N=!0,Pe.requestAnimFrame.call(window,function(){N=!1,h.apply(b,k)}))}}(function(){if(k.resizer){var he=N.options.maintainAspectRatio&&h.parentNode,Me=he?he.clientWidth:0;b(xu("resize",N)),he&&he.clientWidth<Me&&N.canvas&&b(xu("resize",N))}}));!function ql(h,b){var N=h[ua]||(h[ua]={}),k=N.renderProxy=function(ne){ne.animationName===$u&&b()};Pe.each(Ba,function(ne){Sa(h,ne,k)}),N.reflow=!!h.offsetParent,h.classList.add(Eu)}(h,function(){if(k.resizer){var he=h.parentNode;he&&he!==ne.parentNode&&he.insertBefore(ne,he.firstChild),ne._reset()}})}function zs(h){var b=h[ua]||{},N=b.resizer;delete b.resizer,function Al(h){var b=h[ua]||{},N=b.renderProxy;N&&(Pe.each(Ba,function(k){Ru(h,k,N)}),delete b.renderProxy),h.classList.remove(Eu)}(h),N&&N.parentNode&&N.parentNode.removeChild(N)}var bt={disableCSSInjection:!1,_enabled:typeof window<"u"&&typeof document<"u",_ensureLoaded:function(h){if(!this.disableCSSInjection){var b=h.getRootNode?h.getRootNode():document;!function Vc(h,b){var N=h[ua]||(h[ua]={});if(!N.containsStyles){N.containsStyles=!0,b="/* Chart.js */\n"+b;var k=document.createElement("style");k.setAttribute("type","text/css"),k.appendChild(document.createTextNode(b)),h.appendChild(k)}}(b.host?b:document.head,zu)}},acquireContext:function(h,b){"string"==typeof h?h=document.getElementById(h):h.length&&(h=h[0]),h&&h.canvas&&(h=h.canvas);var N=h&&h.getContext&&h.getContext("2d");return N&&N.canvas===h?(this._ensureLoaded(h),function Ga(h,b){var N=h.style,k=h.getAttribute("height"),ne=h.getAttribute("width");if(h[ua]={initial:{height:k,width:ne,style:{display:N.display,height:N.height,width:N.width}}},N.display=N.display||"block",null===ne||""===ne){var he=tl(h,"width");void 0!==he&&(h.width=he)}if(null===k||""===k)if(""===h.style.height)h.height=h.width/(b.options.aspectRatio||2);else{var Me=tl(h,"height");void 0!==he&&(h.height=Me)}return h}(h,b),N):null},releaseContext:function(h){var b=h.canvas;if(b[ua]){var N=b[ua].initial;["height","width"].forEach(function(k){var ne=N[k];Pe.isNullOrUndef(ne)?b.removeAttribute(k):b.setAttribute(k,ne)}),Pe.each(N.style||{},function(k,ne){b.style[ne]=k}),b.width=b.width,delete b[ua]}},addEventListener:function(h,b,N){var k=h.canvas;if("resize"!==b){var ne=N[ua]||(N[ua]={});Sa(k,b,(ne.proxies||(ne.proxies={}))[h.id+"_"+b]=function(Qe){N(function ba(h,b){var N=Tl[h.type]||h.type,k=Pe.getRelativePosition(h,b);return xu(N,b,k.x,k.y,h)}(Qe,h))})}else Dc(k,N,h)},removeEventListener:function(h,b,N){var k=h.canvas;if("resize"!==b){var Me=((N[ua]||{}).proxies||{})[h.id+"_"+b];Me&&Ru(k,b,Me)}else zs(k)}};Pe.addEvent=Sa,Pe.removeEvent=Ru;var Je=Pe.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},bt._enabled?bt:{acquireContext:function(h){return h&&h.canvas&&(h=h.canvas),h&&h.getContext("2d")||null}});qr._set("global",{plugins:{}});var en={_plugins:[],_cacheId:0,register:function(h){var b=this._plugins;[].concat(h).forEach(function(N){-1===b.indexOf(N)&&b.push(N)}),this._cacheId++},unregister:function(h){var b=this._plugins;[].concat(h).forEach(function(N){var k=b.indexOf(N);-1!==k&&b.splice(k,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(h,b,N){var he,Me,Qe,Re,ft,k=this.descriptors(h),ne=k.length;for(he=0;he<ne;++he)if("function"==typeof(ft=(Qe=(Me=k[he]).plugin)[b])&&((Re=[h].concat(N||[])).push(Me.options),!1===ft.apply(Qe,Re)))return!1;return!0},descriptors:function(h){var b=h.$plugins||(h.$plugins={});if(b.id===this._cacheId)return b.descriptors;var N=[],k=[],ne=h&&h.config||{},he=ne.options&&ne.options.plugins||{};return this._plugins.concat(ne.plugins||[]).forEach(function(Me){if(-1===N.indexOf(Me)){var Re=Me.id,ft=he[Re];!1!==ft&&(!0===ft&&(ft=Pe.clone(qr.global.plugins[Re])),N.push(Me),k.push({plugin:Me,options:ft||{}}))}}),b.descriptors=k,b.id=this._cacheId,k},_invalidate:function(h){delete h.$plugins}},fi={constructors:{},defaults:{},registerScaleType:function(h,b,N){this.constructors[h]=b,this.defaults[h]=Pe.clone(N)},getScaleConstructor:function(h){return this.constructors.hasOwnProperty(h)?this.constructors[h]:void 0},getScaleDefaults:function(h){return this.defaults.hasOwnProperty(h)?Pe.merge(Object.create(null),[qr.scale,this.defaults[h]]):{}},updateScaleDefaults:function(h,b){var N=this;N.defaults.hasOwnProperty(h)&&(N.defaults[h]=Pe.extend(N.defaults[h],b))},addScalesToLayout:function(h){Pe.each(h.scales,function(b){b.fullWidth=b.options.fullWidth,b.position=b.options.position,b.weight=b.options.weight,Xl.addBox(h,b)})}},To=Pe.valueOrDefault,Ya=Pe.rtl.getRtlAdapter;qr._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:Pe.noop,title:function(h,b){var N="",k=b.labels,ne=k?k.length:0;if(h.length>0){var he=h[0];he.label?N=he.label:he.xLabel?N=he.xLabel:ne>0&&he.index<ne&&(N=k[he.index])}return N},afterTitle:Pe.noop,beforeBody:Pe.noop,beforeLabel:Pe.noop,label:function(h,b){var N=b.datasets[h.datasetIndex].label||"";return N&&(N+=": "),Pe.isNullOrUndef(h.value)?N+=h.yLabel:N+=h.value,N},labelColor:function(h,b){var ne=b.getDatasetMeta(h.datasetIndex).data[h.index]._view;return{borderColor:ne.borderColor,backgroundColor:ne.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:Pe.noop,afterBody:Pe.noop,beforeFooter:Pe.noop,footer:Pe.noop,afterFooter:Pe.noop}}});var mi={average:function(h){if(!h.length)return!1;var b,N,k=0,ne=0,he=0;for(b=0,N=h.length;b<N;++b){var Me=h[b];if(Me&&Me.hasValue()){var Qe=Me.tooltipPosition();k+=Qe.x,ne+=Qe.y,++he}}return{x:k/he,y:ne/he}},nearest:function(h,b){var he,Me,Qe,N=b.x,k=b.y,ne=Number.POSITIVE_INFINITY;for(he=0,Me=h.length;he<Me;++he){var Re=h[he];if(Re&&Re.hasValue()){var ft=Re.getCenterPoint(),wt=Pe.distanceBetweenPoints(b,ft);wt<ne&&(ne=wt,Qe=Re)}}if(Qe){var It=Qe.tooltipPosition();N=It.x,k=It.y}return{x:N,y:k}}};function Hs(h,b){return b&&(Pe.isArray(b)?Array.prototype.push.apply(h,b):h.push(b)),h}function Qs(h){return("string"==typeof h||h instanceof String)&&h.indexOf("\n")>-1?h.split("\n"):h}function Hu(h){var b=h._xScale,N=h._yScale||h._scale,k=h._index,ne=h._datasetIndex,he=h._chart.getDatasetMeta(ne).controller,Me=he._getIndexScale(),Qe=he._getValueScale();return{xLabel:b?b.getLabelForIndex(k,ne):"",yLabel:N?N.getLabelForIndex(k,ne):"",label:Me?""+Me.getLabelForIndex(k,ne):"",value:Qe?""+Qe.getLabelForIndex(k,ne):"",index:k,datasetIndex:ne,x:h._model.x,y:h._model.y}}function zl(h){var b=qr.global;return{xPadding:h.xPadding,yPadding:h.yPadding,xAlign:h.xAlign,yAlign:h.yAlign,rtl:h.rtl,textDirection:h.textDirection,bodyFontColor:h.bodyFontColor,_bodyFontFamily:To(h.bodyFontFamily,b.defaultFontFamily),_bodyFontStyle:To(h.bodyFontStyle,b.defaultFontStyle),_bodyAlign:h.bodyAlign,bodyFontSize:To(h.bodyFontSize,b.defaultFontSize),bodySpacing:h.bodySpacing,titleFontColor:h.titleFontColor,_titleFontFamily:To(h.titleFontFamily,b.defaultFontFamily),_titleFontStyle:To(h.titleFontStyle,b.defaultFontStyle),titleFontSize:To(h.titleFontSize,b.defaultFontSize),_titleAlign:h.titleAlign,titleSpacing:h.titleSpacing,titleMarginBottom:h.titleMarginBottom,footerFontColor:h.footerFontColor,_footerFontFamily:To(h.footerFontFamily,b.defaultFontFamily),_footerFontStyle:To(h.footerFontStyle,b.defaultFontStyle),footerFontSize:To(h.footerFontSize,b.defaultFontSize),_footerAlign:h.footerAlign,footerSpacing:h.footerSpacing,footerMarginTop:h.footerMarginTop,caretSize:h.caretSize,cornerRadius:h.cornerRadius,backgroundColor:h.backgroundColor,opacity:0,legendColorBackground:h.multiKeyBackground,displayColors:h.displayColors,borderColor:h.borderColor,borderWidth:h.borderWidth}}function id(h,b){return"center"===b?h.x+h.width/2:"right"===b?h.x+h.width-h.xPadding:h.x+h.xPadding}function ec(h){return Hs([],Qs(h))}var Fc=nr.extend({initialize:function(){this._model=zl(this._options),this._lastActive=[]},getTitle:function(){var h=this,N=h._options.callbacks,k=N.beforeTitle.apply(h,arguments),ne=N.title.apply(h,arguments),he=N.afterTitle.apply(h,arguments),Me=[];return Me=Hs(Me,Qs(k)),Me=Hs(Me,Qs(ne)),Hs(Me,Qs(he))},getBeforeBody:function(){return ec(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(h,b){var N=this,k=N._options.callbacks,ne=[];return Pe.each(h,function(he){var Me={before:[],lines:[],after:[]};Hs(Me.before,Qs(k.beforeLabel.call(N,he,b))),Hs(Me.lines,k.label.call(N,he,b)),Hs(Me.after,Qs(k.afterLabel.call(N,he,b))),ne.push(Me)}),ne},getAfterBody:function(){return ec(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var h=this,b=h._options.callbacks,N=b.beforeFooter.apply(h,arguments),k=b.footer.apply(h,arguments),ne=b.afterFooter.apply(h,arguments),he=[];return he=Hs(he,Qs(N)),he=Hs(he,Qs(k)),Hs(he,Qs(ne))},update:function(h){var It,Cn,b=this,N=b._options,k=b._model,ne=b._model=zl(N),he=b._active,Me=b._data,Qe={xAlign:k.xAlign,yAlign:k.yAlign},Re={x:k.x,y:k.y},ft={width:k.width,height:k.height},wt={x:k.caretX,y:k.caretY};if(he.length){ne.opacity=1;var er=[],sr=[];wt=mi[N.position].call(b,he,b._eventPosition);var Dr=[];for(It=0,Cn=he.length;It<Cn;++It)Dr.push(Hu(he[It]));N.filter&&(Dr=Dr.filter(function(oi){return N.filter(oi,Me)})),N.itemSort&&(Dr=Dr.sort(function(oi,uo){return N.itemSort(oi,uo,Me)})),Pe.each(Dr,function(oi){er.push(N.callbacks.labelColor.call(b,oi,b._chart)),sr.push(N.callbacks.labelTextColor.call(b,oi,b._chart))}),ne.title=b.getTitle(Dr,Me),ne.beforeBody=b.getBeforeBody(Dr,Me),ne.body=b.getBody(Dr,Me),ne.afterBody=b.getAfterBody(Dr,Me),ne.footer=b.getFooter(Dr,Me),ne.x=wt.x,ne.y=wt.y,ne.caretPadding=N.caretPadding,ne.labelColors=er,ne.labelTextColors=sr,ne.dataPoints=Dr,Re=function lu(h,b,N,k){var ne=h.x,he=h.y,Qe=h.caretPadding,ft=N.xAlign,wt=N.yAlign,It=h.caretSize+Qe,Cn=h.cornerRadius+Qe;return"right"===ft?ne-=b.width:"center"===ft&&((ne-=b.width/2)+b.width>k.width&&(ne=k.width-b.width),ne<0&&(ne=0)),"top"===wt?he+=It:he-="bottom"===wt?b.height+It:b.height/2,"center"===wt?"left"===ft?ne+=It:"right"===ft&&(ne-=It):"left"===ft?ne-=Cn:"right"===ft&&(ne+=Cn),{x:ne,y:he}}(ne,ft=function sc(h,b){var N=h._chart.ctx,k=2*b.yPadding,ne=0,he=b.body,Me=he.reduce(function(sr,Dr){return sr+Dr.before.length+Dr.lines.length+Dr.after.length},0),Qe=b.title.length,Re=b.footer.length,ft=b.titleFontSize,wt=b.bodyFontSize,It=b.footerFontSize;k+=Qe*ft,k+=Qe?(Qe-1)*b.titleSpacing:0,k+=Qe?b.titleMarginBottom:0,k+=(Me+=b.beforeBody.length+b.afterBody.length)*wt,k+=Me?(Me-1)*b.bodySpacing:0,k+=Re?b.footerMarginTop:0,k+=Re*It,k+=Re?(Re-1)*b.footerSpacing:0;var Cn=0,er=function(sr){ne=Math.max(ne,N.measureText(sr).width+Cn)};return N.font=Pe.fontString(ft,b._titleFontStyle,b._titleFontFamily),Pe.each(b.title,er),N.font=Pe.fontString(wt,b._bodyFontStyle,b._bodyFontFamily),Pe.each(b.beforeBody.concat(b.afterBody),er),Cn=b.displayColors?wt+2:0,Pe.each(he,function(sr){Pe.each(sr.before,er),Pe.each(sr.lines,er),Pe.each(sr.after,er)}),Cn=0,N.font=Pe.fontString(It,b._footerFontStyle,b._footerFontFamily),Pe.each(b.footer,er),{width:ne+=2*b.xPadding,height:k}}(this,ne),Qe=function hu(h,b){var N=h._model,k=h._chart,ne=h._chart.chartArea,he="center",Me="center";N.y<b.height?Me="top":N.y>k.height-b.height&&(Me="bottom");var Qe,Re,ft,wt,It,Cn=(ne.left+ne.right)/2,er=(ne.top+ne.bottom)/2;"center"===Me?(Qe=function(Dr){return Dr<=Cn},Re=function(Dr){return Dr>Cn}):(Qe=function(Dr){return Dr<=b.width/2},Re=function(Dr){return Dr>=k.width-b.width/2}),ft=function(Dr){return Dr+b.width+N.caretSize+N.caretPadding>k.width},wt=function(Dr){return Dr-b.width-N.caretSize-N.caretPadding<0},It=function(Dr){return Dr<=er?"top":"bottom"},Qe(N.x)?(he="left",ft(N.x)&&(he="center",Me=It(N.y))):Re(N.x)&&(he="right",wt(N.x)&&(he="center",Me=It(N.y)));var sr=h._options;return{xAlign:sr.xAlign?sr.xAlign:he,yAlign:sr.yAlign?sr.yAlign:Me}}(this,ft),b._chart)}else ne.opacity=0;return ne.xAlign=Qe.xAlign,ne.yAlign=Qe.yAlign,ne.x=Re.x,ne.y=Re.y,ne.width=ft.width,ne.height=ft.height,ne.caretX=wt.x,ne.caretY=wt.y,b._model=ne,h&&N.custom&&N.custom.call(b,ne),b},drawCaret:function(h,b){var N=this._chart.ctx,ne=this.getCaretPosition(h,b,this._view);N.lineTo(ne.x1,ne.y1),N.lineTo(ne.x2,ne.y2),N.lineTo(ne.x3,ne.y3)},getCaretPosition:function(h,b,N){var k,ne,he,Me,Qe,Re,ft=N.caretSize,wt=N.cornerRadius,It=N.xAlign,Cn=N.yAlign,er=h.x,sr=h.y,Dr=b.width,oi=b.height;if("center"===Cn)Qe=sr+oi/2,"left"===It?(ne=(k=er)-ft,he=k,Me=Qe+ft,Re=Qe-ft):(ne=(k=er+Dr)+ft,he=k,Me=Qe-ft,Re=Qe+ft);else if("left"===It?(k=(ne=er+wt+ft)-ft,he=ne+ft):"right"===It?(k=(ne=er+Dr-wt-ft)-ft,he=ne+ft):(k=(ne=N.caretX)-ft,he=ne+ft),"top"===Cn)Qe=(Me=sr)-ft,Re=Me;else{Qe=(Me=sr+oi)+ft,Re=Me;var uo=he;he=k,k=uo}return{x1:k,x2:ne,x3:he,y1:Me,y2:Qe,y3:Re}},drawTitle:function(h,b,N){var he,Me,Qe,k=b.title,ne=k.length;if(ne){var Re=Ya(b.rtl,b.x,b.width);for(h.x=id(b,b._titleAlign),N.textAlign=Re.textAlign(b._titleAlign),N.textBaseline="middle",he=b.titleFontSize,Me=b.titleSpacing,N.fillStyle=b.titleFontColor,N.font=Pe.fontString(he,b._titleFontStyle,b._titleFontFamily),Qe=0;Qe<ne;++Qe)N.fillText(k[Qe],Re.x(h.x),h.y+he/2),h.y+=he+Me,Qe+1===ne&&(h.y+=b.titleMarginBottom-Me)}},drawBody:function(h,b,N){var Cn,er,sr,Dr,oi,uo,As,as,k=b.bodyFontSize,ne=b.bodySpacing,he=b._bodyAlign,Me=b.body,Qe=b.displayColors,Re=0,ft=Qe?id(b,"left"):0,wt=Ya(b.rtl,b.x,b.width),It=function(Pl){N.fillText(Pl,wt.x(h.x+Re),h.y+k/2),h.y+=k+ne},ma=wt.textAlign(he);for(N.textAlign=he,N.textBaseline="middle",N.font=Pe.fontString(k,b._bodyFontStyle,b._bodyFontFamily),h.x=id(b,ma),N.fillStyle=b.bodyFontColor,Pe.each(b.beforeBody,It),Re=Qe&&"right"!==ma?"center"===he?k/2+1:k+2:0,oi=0,As=Me.length;oi<As;++oi){for(Cn=Me[oi],sr=b.labelColors[oi],N.fillStyle=er=b.labelTextColors[oi],Pe.each(Cn.before,It),uo=0,as=(Dr=Cn.lines).length;uo<as;++uo){if(Qe){var Na=wt.x(ft);N.fillStyle=b.legendColorBackground,N.fillRect(wt.leftForLtr(Na,k),h.y,k,k),N.lineWidth=1,N.strokeStyle=sr.borderColor,N.strokeRect(wt.leftForLtr(Na,k),h.y,k,k),N.fillStyle=sr.backgroundColor,N.fillRect(wt.leftForLtr(wt.xPlus(Na,1),k-2),h.y+1,k-2,k-2),N.fillStyle=er}It(Dr[uo])}Pe.each(Cn.after,It)}Re=0,Pe.each(b.afterBody,It),h.y-=ne},drawFooter:function(h,b,N){var he,Me,k=b.footer,ne=k.length;if(ne){var Qe=Ya(b.rtl,b.x,b.width);for(h.x=id(b,b._footerAlign),h.y+=b.footerMarginTop,N.textAlign=Qe.textAlign(b._footerAlign),N.textBaseline="middle",he=b.footerFontSize,N.fillStyle=b.footerFontColor,N.font=Pe.fontString(he,b._footerFontStyle,b._footerFontFamily),Me=0;Me<ne;++Me)N.fillText(k[Me],Qe.x(h.x),h.y+he/2),h.y+=he+b.footerSpacing}},drawBackground:function(h,b,N,k){N.fillStyle=b.backgroundColor,N.strokeStyle=b.borderColor,N.lineWidth=b.borderWidth;var ne=b.xAlign,he=b.yAlign,Me=h.x,Qe=h.y,Re=k.width,ft=k.height,wt=b.cornerRadius;N.beginPath(),N.moveTo(Me+wt,Qe),"top"===he&&this.drawCaret(h,k),N.lineTo(Me+Re-wt,Qe),N.quadraticCurveTo(Me+Re,Qe,Me+Re,Qe+wt),"center"===he&&"right"===ne&&this.drawCaret(h,k),N.lineTo(Me+Re,Qe+ft-wt),N.quadraticCurveTo(Me+Re,Qe+ft,Me+Re-wt,Qe+ft),"bottom"===he&&this.drawCaret(h,k),N.lineTo(Me+wt,Qe+ft),N.quadraticCurveTo(Me,Qe+ft,Me,Qe+ft-wt),"center"===he&&"left"===ne&&this.drawCaret(h,k),N.lineTo(Me,Qe+wt),N.quadraticCurveTo(Me,Qe,Me+wt,Qe),N.closePath(),N.fill(),b.borderWidth>0&&N.stroke()},draw:function(){var h=this._chart.ctx,b=this._view;if(0!==b.opacity){var N={width:b.width,height:b.height},k={x:b.x,y:b.y},ne=Math.abs(b.opacity<.001)?0:b.opacity;this._options.enabled&&(b.title.length||b.beforeBody.length||b.body.length||b.afterBody.length||b.footer.length)&&(h.save(),h.globalAlpha=ne,this.drawBackground(k,b,h,N),k.y+=b.yPadding,Pe.rtl.overrideTextDirection(h,b.textDirection),this.drawTitle(k,b,h),this.drawBody(k,b,h),this.drawFooter(k,b,h),Pe.rtl.restoreTextDirection(h,b.textDirection),h.restore())}},handleEvent:function(h){var k,b=this,N=b._options;return b._lastActive=b._lastActive||[],"mouseout"===h.type?b._active=[]:(b._active=b._chart.getElementsAtEventForMode(h,N.mode,N),N.reverse&&b._active.reverse()),(k=!Pe.arrayEquals(b._active,b._lastActive))&&(b._lastActive=b._active,(N.enabled||N.custom)&&(b._eventPosition={x:h.x,y:h.y},b.update(!0),b.pivot())),k}}),Lc=Fc;Lc.positioners=mi;var kl=Pe.valueOrDefault;function sl(){return Pe.merge(Object.create(null),[].slice.call(arguments),{merger:function(h,b,N,k){if("xAxes"===h||"yAxes"===h){var he,Me,Qe,ne=N[h].length;for(b[h]||(b[h]=[]),he=0;he<ne;++he)Me=kl((Qe=N[h][he]).type,"xAxes"===h?"category":"linear"),he>=b[h].length&&b[h].push({}),Pe.merge(b[h][he],!b[h][he].type||Qe.type&&Qe.type!==b[h][he].type?[fi.getScaleDefaults(Me),Qe]:Qe)}else Pe._merger(h,b,N,k)}})}function ja(){return Pe.merge(Object.create(null),[].slice.call(arguments),{merger:function(h,b,N,k){var ne=b[h]||Object.create(null),he=N[h];"scales"===h?b[h]=sl(ne,he):"scale"===h?b[h]=Pe.merge(ne,[fi.getScaleDefaults(he.type),he]):Pe._merger(h,b,N,k)}})}function yt(h,b,N){var k,ne=function(he){return he.id===k};do{k=b+N++}while(Pe.findIndex(h,ne)>=0);return k}function Xe(h){return"top"===h||"bottom"===h}function Gt(h,b){return function(N,k){return N[h]===k[h]?N[b]-k[b]:N[h]-k[h]}}qr._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var An=function(h,b){return this.construct(h,b),this};Pe.extend(An.prototype,{construct:function(h,b){var N=this;b=function Q(h){var b=(h=h||Object.create(null)).data=h.data||{};return b.datasets=b.datasets||[],b.labels=b.labels||[],h.options=ja(qr.global,qr[h.type],h.options||{}),h}(b);var k=Je.acquireContext(h,b),ne=k&&k.canvas,he=ne&&ne.height,Me=ne&&ne.width;N.id=Pe.uid(),N.ctx=k,N.canvas=ne,N.config=b,N.width=Me,N.height=he,N.aspectRatio=he?Me/he:null,N.options=b.options,N._bufferedRender=!1,N._layers=[],N.chart=N,N.controller=N,An.instances[N.id]=N,Object.defineProperty(N,"data",{get:function(){return N.config.data},set:function(Qe){N.config.data=Qe}}),k&&ne?(N.initialize(),N.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var h=this;return en.notify(h,"beforeInit"),Pe.retinaScale(h,h.options.devicePixelRatio),h.bindEvents(),h.options.responsive&&h.resize(!0),h.initToolTip(),en.notify(h,"afterInit"),h},clear:function(){return Pe.canvas.clear(this),this},stop:function(){return Ge.cancelAnimation(this),this},resize:function(h){var b=this,N=b.options,k=b.canvas,ne=N.maintainAspectRatio&&b.aspectRatio||null,he=Math.max(0,Math.floor(Pe.getMaximumWidth(k))),Me=Math.max(0,Math.floor(ne?he/ne:Pe.getMaximumHeight(k)));if((b.width!==he||b.height!==Me)&&(k.width=b.width=he,k.height=b.height=Me,k.style.width=he+"px",k.style.height=Me+"px",Pe.retinaScale(b,N.devicePixelRatio),!h)){var Qe={width:he,height:Me};en.notify(b,"resize",[Qe]),N.onResize&&N.onResize(b,Qe),b.stop(),b.update({duration:N.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var h=this.options,b=h.scales||{},N=h.scale;Pe.each(b.xAxes,function(k,ne){k.id||(k.id=yt(b.xAxes,"x-axis-",ne))}),Pe.each(b.yAxes,function(k,ne){k.id||(k.id=yt(b.yAxes,"y-axis-",ne))}),N&&(N.id=N.id||"scale")},buildOrUpdateScales:function(){var h=this,b=h.options,N=h.scales||{},k=[],ne=Object.keys(N).reduce(function(he,Me){return he[Me]=!1,he},{});b.scales&&(k=k.concat((b.scales.xAxes||[]).map(function(he){return{options:he,dtype:"category",dposition:"bottom"}}),(b.scales.yAxes||[]).map(function(he){return{options:he,dtype:"linear",dposition:"left"}}))),b.scale&&k.push({options:b.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),Pe.each(k,function(he){var Me=he.options,Qe=Me.id,Re=kl(Me.type,he.dtype);Xe(Me.position)!==Xe(he.dposition)&&(Me.position=he.dposition),ne[Qe]=!0;var ft=null;if(Qe in N&&N[Qe].type===Re)(ft=N[Qe]).options=Me,ft.ctx=h.ctx,ft.chart=h;else{var wt=fi.getScaleConstructor(Re);if(!wt)return;ft=new wt({id:Qe,type:Re,options:Me,ctx:h.ctx,chart:h}),N[ft.id]=ft}ft.mergeTicksOptions(),he.isDefault&&(h.scale=ft)}),Pe.each(ne,function(he,Me){he||delete N[Me]}),h.scales=N,fi.addScalesToLayout(this)},buildOrUpdateControllers:function(){var k,ne,h=this,b=[],N=h.data.datasets;for(k=0,ne=N.length;k<ne;k++){var he=N[k],Me=h.getDatasetMeta(k),Qe=he.type||h.config.type;if(Me.type&&Me.type!==Qe&&(h.destroyDatasetMeta(k),Me=h.getDatasetMeta(k)),Me.type=Qe,Me.order=he.order||0,Me.index=k,Me.controller)Me.controller.updateIndex(k),Me.controller.linkScales();else{var Re=Bi[Me.type];if(void 0===Re)throw new Error('"'+Me.type+'" is not a chart type.');Me.controller=new Re(h,k),b.push(Me.controller)}}return b},resetElements:function(){var h=this;Pe.each(h.data.datasets,function(b,N){h.getDatasetMeta(N).controller.reset()},h)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(h){var N,k,b=this;if((!h||"object"!=typeof h)&&(h={duration:h,lazy:arguments[1]}),function Ee(h){var b=h.options;Pe.each(h.scales,function(N){Xl.removeBox(h,N)}),b=ja(qr.global,qr[h.config.type],b),h.options=h.config.options=b,h.ensureScalesHaveIDs(),h.buildOrUpdateScales(),h.tooltip._options=b.tooltips,h.tooltip.initialize()}(b),en._invalidate(b),!1!==en.notify(b,"beforeUpdate")){b.tooltip._data=b.data;var ne=b.buildOrUpdateControllers();for(N=0,k=b.data.datasets.length;N<k;N++)b.getDatasetMeta(N).controller.buildOrUpdateElements();b.updateLayout(),b.options.animation&&b.options.animation.duration&&Pe.each(ne,function(he){he.reset()}),b.updateDatasets(),b.tooltip.initialize(),b.lastActive=[],en.notify(b,"afterUpdate"),b._layers.sort(Gt("z","_idx")),b._bufferedRender?b._bufferedRequest={duration:h.duration,easing:h.easing,lazy:h.lazy}:b.render(h)}},updateLayout:function(){var h=this;!1!==en.notify(h,"beforeLayout")&&(Xl.update(this,this.width,this.height),h._layers=[],Pe.each(h.boxes,function(b){b._configure&&b._configure(),h._layers.push.apply(h._layers,b._layers())},h),h._layers.forEach(function(b,N){b._idx=N}),en.notify(h,"afterScaleUpdate"),en.notify(h,"afterLayout"))},updateDatasets:function(){var h=this;if(!1!==en.notify(h,"beforeDatasetsUpdate")){for(var b=0,N=h.data.datasets.length;b<N;++b)h.updateDataset(b);en.notify(h,"afterDatasetsUpdate")}},updateDataset:function(h){var b=this,N=b.getDatasetMeta(h),k={meta:N,index:h};!1!==en.notify(b,"beforeDatasetUpdate",[k])&&(N.controller._update(),en.notify(b,"afterDatasetUpdate",[k]))},render:function(h){var b=this;(!h||"object"!=typeof h)&&(h={duration:h,lazy:arguments[1]});var N=b.options.animation,k=kl(h.duration,N&&N.duration),ne=h.lazy;if(!1!==en.notify(b,"beforeRender")){var he=function(Qe){en.notify(b,"afterRender"),Pe.callback(N&&N.onComplete,[Qe],b)};if(N&&k){var Me=new dn({numSteps:k/16.66,easing:h.easing||N.easing,render:function(Qe,Re){var wt=Re.currentStep,It=wt/Re.numSteps;Qe.draw((0,Pe.easing.effects[Re.easing])(It),It,wt)},onAnimationProgress:N.onProgress,onAnimationComplete:he});Ge.addAnimation(b,Me,k,ne)}else b.draw(),he(new dn({numSteps:0,chart:b}));return b}},draw:function(h){var N,k,b=this;if(b.clear(),Pe.isNullOrUndef(h)&&(h=1),b.transition(h),!(b.width<=0||b.height<=0)&&!1!==en.notify(b,"beforeDraw",[h])){for(k=b._layers,N=0;N<k.length&&k[N].z<=0;++N)k[N].draw(b.chartArea);for(b.drawDatasets(h);N<k.length;++N)k[N].draw(b.chartArea);b._drawTooltip(h),en.notify(b,"afterDraw",[h])}},transition:function(h){for(var b=this,N=0,k=(b.data.datasets||[]).length;N<k;++N)b.isDatasetVisible(N)&&b.getDatasetMeta(N).controller.transition(h);b.tooltip.transition(h)},_getSortedDatasetMetas:function(h){var ne,he,b=this,k=[];for(ne=0,he=(b.data.datasets||[]).length;ne<he;++ne)(!h||b.isDatasetVisible(ne))&&k.push(b.getDatasetMeta(ne));return k.sort(Gt("order","index")),k},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(h){var N,k,b=this;if(!1!==en.notify(b,"beforeDatasetsDraw",[h])){for(k=(N=b._getSortedVisibleDatasetMetas()).length-1;k>=0;--k)b.drawDataset(N[k],h);en.notify(b,"afterDatasetsDraw",[h])}},drawDataset:function(h,b){var k={meta:h,index:h.index,easingValue:b};!1!==en.notify(this,"beforeDatasetDraw",[k])&&(h.controller.draw(b),en.notify(this,"afterDatasetDraw",[k]))},_drawTooltip:function(h){var b=this,N=b.tooltip,k={tooltip:N,easingValue:h};!1!==en.notify(b,"beforeTooltipDraw",[k])&&(N.draw(),en.notify(b,"afterTooltipDraw",[k]))},getElementAtEvent:function(h){return vl.modes.single(this,h)},getElementsAtEvent:function(h){return vl.modes.label(this,h,{intersect:!0})},getElementsAtXAxis:function(h){return vl.modes["x-axis"](this,h,{intersect:!0})},getElementsAtEventForMode:function(h,b,N){var k=vl.modes[b];return"function"==typeof k?k(this,h,N):[]},getDatasetAtEvent:function(h){return vl.modes.dataset(this,h,{intersect:!0})},getDatasetMeta:function(h){var b=this,N=b.data.datasets[h];N._meta||(N._meta={});var k=N._meta[b.id];return k||(k=N._meta[b.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:N.order||0,index:h}),k},getVisibleDatasetCount:function(){for(var h=0,b=0,N=this.data.datasets.length;b<N;++b)this.isDatasetVisible(b)&&h++;return h},isDatasetVisible:function(h){var b=this.getDatasetMeta(h);return"boolean"==typeof b.hidden?!b.hidden:!this.data.datasets[h].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(h){var b=this.id,N=this.data.datasets[h],k=N._meta&&N._meta[b];k&&(k.controller.destroy(),delete N._meta[b])},destroy:function(){var N,k,h=this,b=h.canvas;for(h.stop(),N=0,k=h.data.datasets.length;N<k;++N)h.destroyDatasetMeta(N);b&&(h.unbindEvents(),Pe.canvas.clear(h),Je.releaseContext(h.ctx),h.canvas=null,h.ctx=null),en.notify(h,"destroy"),delete An.instances[h.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var h=this;h.tooltip=new Lc({_chart:h,_chartInstance:h,_data:h.data,_options:h.options.tooltips},h)},bindEvents:function(){var h=this,b=h._listeners={},N=function(){h.eventHandler.apply(h,arguments)};Pe.each(h.options.events,function(k){Je.addEventListener(h,k,N),b[k]=N}),h.options.responsive&&(N=function(){h.resize()},Je.addEventListener(h,"resize",N),b.resize=N)},unbindEvents:function(){var h=this,b=h._listeners;b&&(delete h._listeners,Pe.each(b,function(N,k){Je.removeEventListener(h,k,N)}))},updateHoverStyle:function(h,b,N){var ne,he,Me,k=N?"set":"remove";for(he=0,Me=h.length;he<Me;++he)(ne=h[he])&&this.getDatasetMeta(ne._datasetIndex).controller[k+"HoverStyle"](ne);"dataset"===b&&this.getDatasetMeta(h[0]._datasetIndex).controller["_"+k+"DatasetHoverStyle"]()},eventHandler:function(h){var b=this,N=b.tooltip;if(!1!==en.notify(b,"beforeEvent",[h])){b._bufferedRender=!0,b._bufferedRequest=null;var k=b.handleEvent(h);N&&(k=N._start?N.handleEvent(h):k|N.handleEvent(h)),en.notify(b,"afterEvent",[h]);var ne=b._bufferedRequest;return ne?b.render(ne):k&&!b.animating&&(b.stop(),b.render({duration:b.options.hover.animationDuration,lazy:!0})),b._bufferedRender=!1,b._bufferedRequest=null,b}},handleEvent:function(h){var ne,b=this,N=b.options||{},k=N.hover;return b.lastActive=b.lastActive||[],b.active="mouseout"===h.type?[]:b.getElementsAtEventForMode(h,k.mode,k),Pe.callback(N.onHover||N.hover.onHover,[h.native,b.active],b),("mouseup"===h.type||"click"===h.type)&&N.onClick&&N.onClick.call(b,h.native,b.active),b.lastActive.length&&b.updateHoverStyle(b.lastActive,k.mode,!1),b.active.length&&k.mode&&b.updateHoverStyle(b.active,k.mode,!0),ne=!Pe.arrayEquals(b.active,b.lastActive),b.lastActive=b.active,ne}}),An.instances={};var kn=An;An.Controller=An,An.types={},Pe.configMerge=ja,Pe.scaleMerge=sl;function Xr(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function yr(h){this.options=h||{}}Pe.extend(yr.prototype,{formats:Xr,parse:Xr,format:Xr,add:Xr,diff:Xr,startOf:Xr,endOf:Xr,_create:function(h){return h}}),yr.override=function(h){Pe.extend(yr.prototype,h)};var Go={_date:yr},Io={formatters:{values:function(h){return Pe.isArray(h)?h:""+h},linear:function(h,b,N){var k=N.length>3?N[2]-N[1]:N[1]-N[0];Math.abs(k)>1&&h!==Math.floor(h)&&(k=h-Math.floor(h));var ne=Pe.log10(Math.abs(k)),he="";if(0!==h)if(Math.max(Math.abs(N[0]),Math.abs(N[N.length-1]))<1e-4){var Qe=Pe.log10(Math.abs(h)),Re=Math.floor(Qe)-Math.floor(ne);Re=Math.max(Math.min(Re,20),0),he=h.toExponential(Re)}else{var ft=-1*Math.floor(ne);ft=Math.max(Math.min(ft,20),0),he=h.toFixed(ft)}else he="0";return he},logarithmic:function(h,b,N){var k=h/Math.pow(10,Math.floor(Pe.log10(h)));return 0===h?"0":1===k||2===k||5===k||0===b||b===N.length-1?h.toExponential():""}}},Qn=Pe.isArray,Gr=Pe.isNullOrUndef,Fr=Pe.valueOrDefault,Ui=Pe.valueAtIndexOrDefault;function Fa(h,b,N){var ft,k=h.getTicks().length,ne=Math.min(b,k-1),he=h.getPixelForTick(ne),Me=h._startPixel,Qe=h._endPixel;if(!(N&&(ft=1===k?Math.max(he-Me,Qe-he):0===b?(h.getPixelForTick(1)-he)/2:(he-h.getPixelForTick(ne-1))/2,he+=ne<b?ft:-ft,he<Me-1e-6||he>Qe+1e-6)))return he}function zo(h,b,N,k){var wt,It,Cn,er,sr,Dr,oi,uo,As,as,ma,Na,Pl,ne=N.length,he=[],Me=[],Qe=[],Re=0,ft=0;for(wt=0;wt<ne;++wt){if(er=N[wt].label,h.font=Dr=(sr=N[wt].major?b.major:b.minor).string,oi=k[Dr]=k[Dr]||{data:{},gc:[]},uo=sr.lineHeight,As=as=0,Gr(er)||Qn(er)){if(Qn(er))for(It=0,Cn=er.length;It<Cn;++It)!Gr(ma=er[It])&&!Qn(ma)&&(As=Pe.measureText(h,oi.data,oi.gc,As,ma),as+=uo)}else As=Pe.measureText(h,oi.data,oi.gc,As,er),as=uo;he.push(As),Me.push(as),Qe.push(uo/2),Re=Math.max(As,Re),ft=Math.max(as,ft)}function il(dl){return{width:he[dl]||0,height:Me[dl]||0,offset:Qe[dl]||0}}return function ca(h,b){Pe.each(h,function(N){var he,k=N.gc,ne=k.length/2;if(ne>b){for(he=0;he<ne;++he)delete N.data[k[he]];k.splice(0,ne)}})}(k,ne),Na=he.indexOf(Re),Pl=Me.indexOf(ft),{first:il(0),last:il(ne-1),widest:il(Na),highest:il(Pl)}}function $l(h){return h.drawTicks?h.tickMarkLength:0}function xl(h){var b,N;return h.display?(b=Pe.options._parseFont(h),N=Pe.options.toPadding(h.padding),b.lineHeight+N.height):0}function Uu(h,b){return Pe.extend(Pe.options._parseFont({fontFamily:Fr(b.fontFamily,h.fontFamily),fontSize:Fr(b.fontSize,h.fontSize),fontStyle:Fr(b.fontStyle,h.fontStyle),lineHeight:Fr(b.lineHeight,h.lineHeight)}),{color:Pe.options.resolve([b.fontColor,h.fontColor,qr.global.defaultFontColor])})}function Xc(h){var b=Uu(h,h.minor);return{minor:b,major:h.major.enabled?Uu(h,h.major):b}}function ad(h){var N,k,ne,b=[];for(k=0,ne=h.length;k<ne;++k)typeof(N=h[k])._index<"u"&&b.push(N);return b}function fc(h,b,N,k){var Qe,Re,ft,wt,ne=Fr(N,0),he=Math.min(Fr(k,h.length),h.length),Me=0;for(b=Math.ceil(b),k&&(b=(Qe=k-N)/Math.floor(Qe/b)),wt=ne;wt<0;)Me++,wt=Math.round(ne+Me*b);for(Re=Math.max(ne,0);Re<he;Re++)ft=h[Re],Re===wt?(ft._index=Re,Me++,wt=Math.round(ne+Me*b)):delete ft.label}qr._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Io.formatters.values,minor:{},major:{}}});var bu=nr.extend({zeroLineIndex:0,getPadding:function(){var h=this;return{left:h.paddingLeft||0,top:h.paddingTop||0,right:h.paddingRight||0,bottom:h.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var h=this.chart.data;return this.options.labels||(this.isHorizontal()?h.xLabels:h.yLabels)||h.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){Pe.callback(this.options.beforeUpdate,[this])},update:function(h,b,N){var Me,Qe,Re,ft,wt,k=this,ne=k.options.ticks,he=ne.sampleSize;if(k.beforeUpdate(),k.maxWidth=h,k.maxHeight=b,k.margins=Pe.extend({left:0,right:0,top:0,bottom:0},N),k._ticks=null,k.ticks=null,k._labelSizes=null,k._maxLabelLines=0,k.longestLabelWidth=0,k.longestTextCache=k.longestTextCache||{},k._gridLineItems=null,k._labelItems=null,k.beforeSetDimensions(),k.setDimensions(),k.afterSetDimensions(),k.beforeDataLimits(),k.determineDataLimits(),k.afterDataLimits(),k.beforeBuildTicks(),ft=k.buildTicks()||[],(!(ft=k.afterBuildTicks(ft)||ft)||!ft.length)&&k.ticks)for(ft=[],Me=0,Qe=k.ticks.length;Me<Qe;++Me)ft.push({value:k.ticks[Me],major:!1});return k._ticks=ft,Re=k._convertTicksToLabels((wt=he<ft.length)?function Do(h,b){for(var N=[],k=h.length/b,ne=0,he=h.length;ne<he;ne+=k)N.push(h[Math.floor(ne)]);return N}(ft,he):ft),k._configure(),k.beforeCalculateTickRotation(),k.calculateTickRotation(),k.afterCalculateTickRotation(),k.beforeFit(),k.fit(),k.afterFit(),k._ticksToDraw=ne.display&&(ne.autoSkip||"auto"===ne.source)?k._autoSkip(ft):ft,wt&&(Re=k._convertTicksToLabels(k._ticksToDraw)),k.ticks=Re,k.afterUpdate(),k.minSize},_configure:function(){var N,k,h=this,b=h.options.ticks.reverse;h.isHorizontal()?(N=h.left,k=h.right):(N=h.top,k=h.bottom,b=!b),h._startPixel=N,h._endPixel=k,h._reversePixels=b,h._length=k-N},afterUpdate:function(){Pe.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){Pe.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var h=this;h.isHorizontal()?(h.width=h.maxWidth,h.left=0,h.right=h.width):(h.height=h.maxHeight,h.top=0,h.bottom=h.height),h.paddingLeft=0,h.paddingTop=0,h.paddingRight=0,h.paddingBottom=0},afterSetDimensions:function(){Pe.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){Pe.callback(this.options.beforeDataLimits,[this])},determineDataLimits:Pe.noop,afterDataLimits:function(){Pe.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){Pe.callback(this.options.beforeBuildTicks,[this])},buildTicks:Pe.noop,afterBuildTicks:function(h){var b=this;return Qn(h)&&h.length?Pe.callback(b.options.afterBuildTicks,[b,h]):(b.ticks=Pe.callback(b.options.afterBuildTicks,[b,b.ticks])||b.ticks,h)},beforeTickToLabelConversion:function(){Pe.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var h=this,b=h.options.ticks;h.ticks=h.ticks.map(b.userCallback||b.callback,this)},afterTickToLabelConversion:function(){Pe.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){Pe.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var Qe,Re,ft,wt,It,Cn,er,h=this,b=h.options,N=b.ticks,k=h.getTicks().length,ne=N.minRotation||0,he=N.maxRotation,Me=ne;!h._isVisible()||!N.display||ne>=he||k<=1||!h.isHorizontal()?h.labelRotation=ne:(Re=(Qe=h._getLabelSizes()).widest.width,ft=Qe.highest.height-Qe.highest.offset,wt=Math.min(h.maxWidth,h.chart.width-Re),Re+6>(It=b.offset?h.maxWidth/k:wt/(k-1))&&(It=wt/(k-(b.offset?.5:1)),Cn=h.maxHeight-$l(b.gridLines)-N.padding-xl(b.scaleLabel),er=Math.sqrt(Re*Re+ft*ft),Me=Pe.toDegrees(Math.min(Math.asin(Math.min((Qe.highest.height+6)/It,1)),Math.asin(Math.min(Cn/er,1))-Math.asin(ft/er))),Me=Math.max(ne,Math.min(he,Me))),h.labelRotation=Me)},afterCalculateTickRotation:function(){Pe.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){Pe.callback(this.options.beforeFit,[this])},fit:function(){var h=this,b=h.minSize={width:0,height:0},N=h.chart,k=h.options,ne=k.ticks,he=k.scaleLabel,Me=k.gridLines,Qe=h._isVisible(),Re="bottom"===k.position,ft=h.isHorizontal();if(ft?b.width=h.maxWidth:Qe&&(b.width=$l(Me)+xl(he)),ft?Qe&&(b.height=$l(Me)+xl(he)):b.height=h.maxHeight,ne.display&&Qe){var wt=Xc(ne),It=h._getLabelSizes(),Cn=It.first,er=It.last,sr=It.widest,Dr=It.highest,oi=.4*wt.minor.lineHeight,uo=ne.padding;if(ft){var As=0!==h.labelRotation,as=Pe.toRadians(h.labelRotation),ma=Math.cos(as),Na=Math.sin(as);b.height=Math.min(h.maxHeight,b.height+(Na*sr.width+ma*(Dr.height-(As?Dr.offset:0))+(As?0:oi))+uo);var Nl,Qu,il=h.getPixelForTick(0)-h.left,dl=h.right-h.getPixelForTick(h.getTicks().length-1);As?(Nl=Re?ma*Cn.width+Na*Cn.offset:Na*(Cn.height-Cn.offset),Qu=Re?Na*(er.height-er.offset):ma*er.width+Na*er.offset):(Nl=Cn.width/2,Qu=er.width/2),h.paddingLeft=Math.max((Nl-il)*h.width/(h.width-il),0)+3,h.paddingRight=Math.max((Qu-dl)*h.width/(h.width-dl),0)+3}else b.width=Math.min(h.maxWidth,b.width+(ne.mirror?0:sr.width+uo+oi)),h.paddingTop=Cn.height/2,h.paddingBottom=er.height/2}h.handleMargins(),ft?(h.width=h._length=N.width-h.margins.left-h.margins.right,h.height=b.height):(h.width=b.width,h.height=h._length=N.height-h.margins.top-h.margins.bottom)},handleMargins:function(){var h=this;h.margins&&(h.margins.left=Math.max(h.paddingLeft,h.margins.left),h.margins.top=Math.max(h.paddingTop,h.margins.top),h.margins.right=Math.max(h.paddingRight,h.margins.right),h.margins.bottom=Math.max(h.paddingBottom,h.margins.bottom))},afterFit:function(){Pe.callback(this.options.afterFit,[this])},isHorizontal:function(){var h=this.options.position;return"top"===h||"bottom"===h},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(h){if(Gr(h))return NaN;if(("number"==typeof h||h instanceof Number)&&!isFinite(h))return NaN;if(h)if(this.isHorizontal()){if(void 0!==h.x)return this.getRightValue(h.x)}else if(void 0!==h.y)return this.getRightValue(h.y);return h},_convertTicksToLabels:function(h){var N,k,ne,b=this;for(b.ticks=h.map(function(he){return he.value}),b.beforeTickToLabelConversion(),N=b.convertTicksToLabels(h)||b.ticks,b.afterTickToLabelConversion(),k=0,ne=h.length;k<ne;++k)h[k].label=N[k];return N},_getLabelSizes:function(){var h=this,b=h._labelSizes;return b||(h._labelSizes=b=zo(h.ctx,Xc(h.options.ticks),h.getTicks(),h.longestTextCache),h.longestLabelWidth=b.widest.width),b},_parseValue:function(h){var b,N,k,ne;return Qn(h)?(b=+this.getRightValue(h[0]),N=+this.getRightValue(h[1]),k=Math.min(b,N),ne=Math.max(b,N)):(b=void 0,N=h=+this.getRightValue(h),k=h,ne=h),{min:k,max:ne,start:b,end:N}},_getScaleLabel:function(h){var b=this._parseValue(h);return void 0!==b.start?"["+b.start+", "+b.end+"]":+this.getRightValue(h)},getLabelForIndex:Pe.noop,getPixelForValue:Pe.noop,getValueForPixel:Pe.noop,getPixelForTick:function(h){var b=this,N=b.options.offset,k=b._ticks.length,ne=1/Math.max(k-(N?0:1),1);return h<0||h>k-1?null:b.getPixelForDecimal(h*ne+(N?ne/2:0))},getPixelForDecimal:function(h){var b=this;return b._reversePixels&&(h=1-h),b._startPixel+h*b._length},getDecimalForPixel:function(h){var b=(h-this._startPixel)/this._length;return this._reversePixels?1-b:b},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var h=this,b=h.min,N=h.max;return h.beginAtZero?0:b<0&&N<0?N:b>0&&N>0?b:0},_autoSkip:function(h){var ft,wt,It,Cn,b=this,N=b.options.ticks,k=b._length,ne=N.maxTicksLimit||k/b._tickSize()+1,he=N.major.enabled?function Wl(h){var N,k,b=[];for(N=0,k=h.length;N<k;N++)h[N].major&&b.push(N);return b}(h):[],Me=he.length,Qe=he[0],Re=he[Me-1];if(Me>ne)return function Pa(h,b,N){var he,Me,k=0,ne=b[0];for(N=Math.ceil(N),he=0;he<h.length;he++)Me=h[he],he===ne?(Me._index=he,ne=b[++k*N]):delete Me.label}(h,he,Me/ne),ad(h);if(It=function yi(h,b,N,k){var Me,Qe,Re,ft,ne=function kc(h){var N,k,b=h.length;if(b<2)return!1;for(k=h[0],N=1;N<b;++N)if(h[N]-h[N-1]!==k)return!1;return k}(h),he=(b.length-1)/k;if(!ne)return Math.max(he,1);for(Re=0,ft=(Me=Pe.math._factorize(ne)).length-1;Re<ft;Re++)if((Qe=Me[Re])>he)return Qe;return Math.max(he,1)}(he,h,0,ne),Me>0){for(ft=0,wt=Me-1;ft<wt;ft++)fc(h,It,he[ft],he[ft+1]);return fc(h,It,Pe.isNullOrUndef(Cn=Me>1?(Re-Qe)/(Me-1):null)?0:Qe-Cn,Qe),fc(h,It,Re,Pe.isNullOrUndef(Cn)?h.length:Re+Cn),ad(h)}return fc(h,It),ad(h)},_tickSize:function(){var h=this,b=h.options.ticks,N=Pe.toRadians(h.labelRotation),k=Math.abs(Math.cos(N)),ne=Math.abs(Math.sin(N)),he=h._getLabelSizes(),Me=b.autoSkipPadding||0,Qe=he?he.widest.width+Me:0,Re=he?he.highest.height+Me:0;return h.isHorizontal()?Re*k>Qe*ne?Qe/k:Re/ne:Re*ne<Qe*k?Re/k:Qe/ne},_isVisible:function(){var k,ne,he,h=this,b=h.chart,N=h.options.display;if("auto"!==N)return!!N;for(k=0,ne=b.data.datasets.length;k<ne;++k)if(b.isDatasetVisible(k)&&((he=b.getDatasetMeta(k)).xAxisID===h.id||he.yAxisID===h.id))return!0;return!1},_computeGridLineItems:function(h){var oi,uo,As,as,ma,Na,Pl,il,dl,Nl,Qu,ac,wa,nc,yc,Gc,xc,b=this,N=b.chart,k=b.options,ne=k.gridLines,he=k.position,Me=ne.offsetGridLines,Qe=b.isHorizontal(),Re=b._ticksToDraw,ft=Re.length+(Me?1:0),wt=$l(ne),It=[],Cn=ne.drawBorder?Ui(ne.lineWidth,0,0):0,er=Cn/2,sr=Pe._alignPixel,Dr=function(wf){return sr(N,wf,Cn)};for("top"===he?(oi=Dr(b.bottom),Pl=b.bottom-wt,dl=oi-er,Qu=Dr(h.top)+er,wa=h.bottom):"bottom"===he?(oi=Dr(b.top),Qu=h.top,wa=Dr(h.bottom)-er,Pl=oi+er,dl=b.top+wt):"left"===he?(oi=Dr(b.right),Na=b.right-wt,il=oi-er,Nl=Dr(h.left)+er,ac=h.right):(oi=Dr(b.left),Nl=h.left,ac=Dr(h.right)-er,Na=oi+er,il=b.left+wt),uo=0;uo<ft;++uo)!(Gr((As=Re[uo]||{}).label)&&uo<Re.length)&&(uo===b.zeroLineIndex&&k.offset===Me?(nc=ne.zeroLineWidth,yc=ne.zeroLineColor,Gc=ne.zeroLineBorderDash||[],xc=ne.zeroLineBorderDashOffset||0):(nc=Ui(ne.lineWidth,uo,1),yc=Ui(ne.color,uo,"rgba(0,0,0,0.1)"),Gc=ne.borderDash||[],xc=ne.borderDashOffset||0),void 0!==(as=Fa(b,As._index||uo,Me))&&(ma=sr(N,as,nc),Qe?Na=il=Nl=ac=ma:Pl=dl=Qu=wa=ma,It.push({tx1:Na,ty1:Pl,tx2:il,ty2:dl,x1:Nl,y1:Qu,x2:ac,y2:wa,width:nc,color:yc,borderDash:Gc,borderDashOffset:xc})));return It.ticksLength=ft,It.borderValue=oi,It},_computeLabelItems:function(){var Cn,er,sr,Dr,oi,uo,As,as,ma,Na,Pl,il,h=this,b=h.options,N=b.ticks,k=b.position,ne=N.mirror,he=h.isHorizontal(),Me=h._ticksToDraw,Qe=Xc(N),Re=N.padding,ft=$l(b.gridLines),wt=-Pe.toRadians(h.labelRotation),It=[];for("top"===k?(uo=h.bottom-ft-Re,As=wt?"left":"center"):"bottom"===k?(uo=h.top+ft+Re,As=wt?"right":"center"):"left"===k?(oi=h.right-(ne?0:ft)-Re,As=ne?"left":"right"):(oi=h.left+(ne?0:ft)+Re,As=ne?"right":"left"),Cn=0,er=Me.length;Cn<er;++Cn)!Gr(Dr=(sr=Me[Cn]).label)&&(as=h.getPixelForTick(sr._index||Cn)+N.labelOffset,Na=(ma=sr.major?Qe.major:Qe.minor).lineHeight,Pl=Qn(Dr)?Dr.length:1,he?(oi=as,il="top"===k?((wt?1:.5)-Pl)*Na:(wt?0:.5)*Na):(uo=as,il=(1-Pl)*Na/2),It.push({x:oi,y:uo,rotation:wt,label:Dr,font:ma,textOffset:il,textAlign:As}));return It},_drawGrid:function(h){var b=this,N=b.options.gridLines;if(N.display){var Re,ft,wt,It,Cn,k=b.ctx,ne=b.chart,he=Pe._alignPixel,Me=N.drawBorder?Ui(N.lineWidth,0,0):0,Qe=b._gridLineItems||(b._gridLineItems=b._computeGridLineItems(h));for(wt=0,It=Qe.length;wt<It;++wt)ft=(Cn=Qe[wt]).color,(Re=Cn.width)&&ft&&(k.save(),k.lineWidth=Re,k.strokeStyle=ft,k.setLineDash&&(k.setLineDash(Cn.borderDash),k.lineDashOffset=Cn.borderDashOffset),k.beginPath(),N.drawTicks&&(k.moveTo(Cn.tx1,Cn.ty1),k.lineTo(Cn.tx2,Cn.ty2)),N.drawOnChartArea&&(k.moveTo(Cn.x1,Cn.y1),k.lineTo(Cn.x2,Cn.y2)),k.stroke(),k.restore());if(Me){var oi,uo,As,as,er=Me,sr=Ui(N.lineWidth,Qe.ticksLength-1,1),Dr=Qe.borderValue;b.isHorizontal()?(oi=he(ne,b.left,er)-er/2,uo=he(ne,b.right,sr)+sr/2,As=as=Dr):(As=he(ne,b.top,er)-er/2,as=he(ne,b.bottom,sr)+sr/2,oi=uo=Dr),k.lineWidth=Me,k.strokeStyle=Ui(N.color,0),k.beginPath(),k.moveTo(oi,As),k.lineTo(uo,as),k.stroke()}}},_drawLabels:function(){var h=this;if(h.options.ticks.display){var ne,he,Me,Qe,Re,ft,wt,It,N=h.ctx,k=h._labelItems||(h._labelItems=h._computeLabelItems());for(ne=0,Me=k.length;ne<Me;++ne){if(ft=(Re=k[ne]).font,N.save(),N.translate(Re.x,Re.y),N.rotate(Re.rotation),N.font=ft.string,N.fillStyle=ft.color,N.textBaseline="middle",N.textAlign=Re.textAlign,It=Re.textOffset,Qn(wt=Re.label))for(he=0,Qe=wt.length;he<Qe;++he)N.fillText(""+wt[he],0,It),It+=ft.lineHeight;else N.fillText(wt,0,It);N.restore()}}},_drawTitle:function(){var h=this,b=h.ctx,N=h.options,k=N.scaleLabel;if(k.display){var wt,It,ne=Fr(k.fontColor,qr.global.defaultFontColor),he=Pe.options._parseFont(k),Me=Pe.options.toPadding(k.padding),Qe=he.lineHeight/2,Re=N.position,ft=0;if(h.isHorizontal())wt=h.left+h.width/2,It="bottom"===Re?h.bottom-Qe-Me.bottom:h.top+Qe+Me.top;else{var Cn="left"===Re;wt=Cn?h.left+Qe+Me.top:h.right-Qe-Me.top,It=h.top+h.height/2,ft=Cn?-.5*Math.PI:.5*Math.PI}b.save(),b.translate(wt,It),b.rotate(ft),b.textAlign="center",b.textBaseline="middle",b.fillStyle=ne,b.font=he.string,b.fillText(k.labelString,0,0),b.restore()}},draw:function(h){var b=this;b._isVisible()&&(b._drawGrid(h),b._drawTitle(),b._drawLabels())},_layers:function(){var h=this,b=h.options,N=b.ticks&&b.ticks.z||0,k=b.gridLines&&b.gridLines.z||0;return h._isVisible()&&N!==k&&h.draw===h._draw?[{z:k,draw:function(){h._drawGrid.apply(h,arguments),h._drawTitle.apply(h,arguments)}},{z:N,draw:function(){h._drawLabels.apply(h,arguments)}}]:[{z:N,draw:function(){h.draw.apply(h,arguments)}}]},_getMatchingVisibleMetas:function(h){var b=this,N=b.isHorizontal();return b.chart._getSortedVisibleDatasetMetas().filter(function(k){return(!h||k.type===h)&&(N?k.xAxisID===b.id:k.yAxisID===b.id)})}});bu.prototype._draw=bu.prototype.draw;var je=bu,Nt=Pe.isNullOrUndef,tn=je.extend({determineDataLimits:function(){var Qe,h=this,b=h._getLabels(),N=h.options.ticks,k=N.min,ne=N.max,he=0,Me=b.length-1;void 0!==k&&(Qe=b.indexOf(k))>=0&&(he=Qe),void 0!==ne&&(Qe=b.indexOf(ne))>=0&&(Me=Qe),h.minIndex=he,h.maxIndex=Me,h.min=b[he],h.max=b[Me]},buildTicks:function(){var h=this,b=h._getLabels(),N=h.minIndex,k=h.maxIndex;h.ticks=0===N&&k===b.length-1?b:b.slice(N,k+1)},getLabelForIndex:function(h,b){var N=this,k=N.chart;return k.getDatasetMeta(b).controller._getValueScaleId()===N.id?N.getRightValue(k.data.datasets[b].data[h]):N._getLabels()[h]},_configure:function(){var h=this,b=h.options.offset,N=h.ticks;je.prototype._configure.call(h),h.isHorizontal()||(h._reversePixels=!h._reversePixels),N&&(h._startValue=h.minIndex-(b?.5:0),h._valueRange=Math.max(N.length-(b?0:1),1))},getPixelForValue:function(h,b,N){var ne,he,Me,k=this;return!Nt(b)&&!Nt(N)&&(h=k.chart.data.datasets[N].data[b]),Nt(h)||(ne=k.isHorizontal()?h.x:h.y),(void 0!==ne||void 0!==h&&isNaN(b))&&(he=k._getLabels(),h=Pe.valueOrDefault(ne,h),b=-1!==(Me=he.indexOf(h))?Me:b,isNaN(b)&&(b=h)),k.getPixelForDecimal((b-k._startValue)/k._valueRange)},getPixelForTick:function(h){var b=this.ticks;return h<0||h>b.length-1?null:this.getPixelForValue(b[h],h+this.minIndex)},getValueForPixel:function(h){var b=this,N=Math.round(b._startValue+b.getDecimalForPixel(h)*b._valueRange);return Math.min(Math.max(N,0),b.ticks.length-1)},getBasePixel:function(){return this.bottom}});tn._defaults={position:"bottom"};var Ri=Pe.isNullOrUndef;var Fs=je.extend({getRightValue:function(h){return"string"==typeof h?+h:je.prototype.getRightValue.call(this,h)},handleTickRangeOptions:function(){var h=this,N=h.options.ticks;if(N.beginAtZero){var k=Pe.sign(h.min),ne=Pe.sign(h.max);k<0&&ne<0?h.max=0:k>0&&ne>0&&(h.min=0)}var he=void 0!==N.min||void 0!==N.suggestedMin,Me=void 0!==N.max||void 0!==N.suggestedMax;void 0!==N.min?h.min=N.min:void 0!==N.suggestedMin&&(h.min=null===h.min?N.suggestedMin:Math.min(h.min,N.suggestedMin)),void 0!==N.max?h.max=N.max:void 0!==N.suggestedMax&&(h.max=null===h.max?N.suggestedMax:Math.max(h.max,N.suggestedMax)),he!==Me&&h.min>=h.max&&(he?h.max=h.min+1:h.min=h.max-1),h.min===h.max&&(h.max++,N.beginAtZero||h.min--)},getTickLimit:function(){var ne,h=this,b=h.options.ticks,N=b.stepSize,k=b.maxTicksLimit;return N?ne=Math.ceil(h.max/N)-Math.floor(h.min/N)+1:(ne=h._computeTickLimit(),k=k||11),k&&(ne=Math.min(k,ne)),ne},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Pe.noop,buildTicks:function(){var h=this,N=h.options.ticks,k=h.getTickLimit(),ne={maxTicks:k=Math.max(2,k),min:N.min,max:N.max,precision:N.precision,stepSize:Pe.valueOrDefault(N.fixedStepSize,N.stepSize)},he=h.ticks=function fs(h,b){var er,sr,Dr,oi,N=[],ne=h.stepSize,he=ne||1,Me=h.maxTicks-1,Qe=h.min,Re=h.max,ft=h.precision,wt=b.min,It=b.max,Cn=Pe.niceNum((It-wt)/Me/he)*he;if(Cn<1e-14&&Ri(Qe)&&Ri(Re))return[wt,It];(oi=Math.ceil(It/Cn)-Math.floor(wt/Cn))>Me&&(Cn=Pe.niceNum(oi*Cn/Me/he)*he),ne||Ri(ft)?er=Math.pow(10,Pe._decimalPlaces(Cn)):(er=Math.pow(10,ft),Cn=Math.ceil(Cn*er)/er),sr=Math.floor(wt/Cn)*Cn,Dr=Math.ceil(It/Cn)*Cn,ne&&(!Ri(Qe)&&Pe.almostWhole(Qe/Cn,Cn/1e3)&&(sr=Qe),!Ri(Re)&&Pe.almostWhole(Re/Cn,Cn/1e3)&&(Dr=Re)),oi=Pe.almostEquals(oi=(Dr-sr)/Cn,Math.round(oi),Cn/1e3)?Math.round(oi):Math.ceil(oi),sr=Math.round(sr*er)/er,Dr=Math.round(Dr*er)/er,N.push(Ri(Qe)?sr:Qe);for(var uo=1;uo<oi;++uo)N.push(Math.round((sr+uo*Cn)*er)/er);return N.push(Ri(Re)?Dr:Re),N}(ne,h);h.handleDirectionalChanges(),h.max=Pe.max(he),h.min=Pe.min(he),N.reverse?(he.reverse(),h.start=h.max,h.end=h.min):(h.start=h.min,h.end=h.max)},convertTicksToLabels:function(){var h=this;h.ticksAsNumbers=h.ticks.slice(),h.zeroLineIndex=h.ticks.indexOf(0),je.prototype.convertTicksToLabels.call(h)},_configure:function(){var ne,h=this,b=h.getTicks(),N=h.min,k=h.max;je.prototype._configure.call(h),h.options.offset&&b.length&&(N-=ne=(k-N)/Math.max(b.length-1,1)/2,k+=ne),h._startValue=N,h._endValue=k,h._valueRange=k-N}}),Ra={position:"left",ticks:{callback:Io.formatters.linear}};function Ho(h,b,N,k){var wt,It,ne=h.options,Me=function wl(h,b,N){var k=[N.type,void 0===b&&void 0===N.stack?N.index:"",N.stack].join(".");return void 0===h[k]&&(h[k]={pos:[],neg:[]}),h[k]}(b,ne.stacked,N),Qe=Me.pos,Re=Me.neg,ft=k.length;for(wt=0;wt<ft;++wt)It=h._parseValue(k[wt]),!(isNaN(It.min)||isNaN(It.max)||N.data[wt].hidden)&&(Qe[wt]=Qe[wt]||0,Re[wt]=Re[wt]||0,ne.relativePoints?Qe[wt]=100:It.min<0||It.max<0?Re[wt]+=It.min:Qe[wt]+=It.max)}function Qa(h,b,N){var ne,he,k=N.length;for(ne=0;ne<k;++ne)he=h._parseValue(N[ne]),!(isNaN(he.min)||isNaN(he.max)||b.data[ne].hidden)&&(h.min=Math.min(h.min,he.min),h.max=Math.max(h.max,he.max))}var rn=Fs.extend({determineDataLimits:function(){var Re,ft,wt,It,h=this,b=h.options,k=h.chart.data.datasets,ne=h._getMatchingVisibleMetas(),he=b.stacked,Me={},Qe=ne.length;if(h.min=Number.POSITIVE_INFINITY,h.max=Number.NEGATIVE_INFINITY,void 0===he)for(Re=0;!he&&Re<Qe;++Re)he=void 0!==(ft=ne[Re]).stack;for(Re=0;Re<Qe;++Re)wt=k[(ft=ne[Re]).index].data,he?Ho(h,Me,ft,wt):Qa(h,ft,wt);Pe.each(Me,function(Cn){It=Cn.pos.concat(Cn.neg),h.min=Math.min(h.min,Pe.min(It)),h.max=Math.max(h.max,Pe.max(It))}),h.min=Pe.isFinite(h.min)&&!isNaN(h.min)?h.min:0,h.max=Pe.isFinite(h.max)&&!isNaN(h.max)?h.max:1,h.handleTickRangeOptions()},_computeTickLimit:function(){var b,h=this;return h.isHorizontal()?Math.ceil(h.width/40):(b=Pe.options._parseFont(h.options.ticks),Math.ceil(h.height/b.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(h,b){return this._getScaleLabel(this.chart.data.datasets[b].data[h])},getPixelForValue:function(h){var b=this;return b.getPixelForDecimal((+b.getRightValue(h)-b._startValue)/b._valueRange)},getValueForPixel:function(h){return this._startValue+this.getDecimalForPixel(h)*this._valueRange},getPixelForTick:function(h){var b=this.ticksAsNumbers;return h<0||h>b.length-1?null:this.getPixelForValue(b[h])}});rn._defaults=Ra;var le=Pe.valueOrDefault,ae=Pe.math.log10;var Ve={position:"left",ticks:{callback:Io.formatters.logarithmic}};function st(h,b){return Pe.isFinite(h)&&h>=0?h:b}var zt=je.extend({determineDataLimits:function(){var Me,Qe,Re,ft,wt,It,h=this,b=h.options,N=h.chart,k=N.data.datasets,ne=h.isHorizontal();function he(oi){return ne?oi.xAxisID===h.id:oi.yAxisID===h.id}h.min=Number.POSITIVE_INFINITY,h.max=Number.NEGATIVE_INFINITY,h.minNotZero=Number.POSITIVE_INFINITY;var Cn=b.stacked;if(void 0===Cn)for(Me=0;Me<k.length;Me++)if(Qe=N.getDatasetMeta(Me),N.isDatasetVisible(Me)&&he(Qe)&&void 0!==Qe.stack){Cn=!0;break}if(b.stacked||Cn){var er={};for(Me=0;Me<k.length;Me++){var sr=[(Qe=N.getDatasetMeta(Me)).type,void 0===b.stacked&&void 0===Qe.stack?Me:"",Qe.stack].join(".");if(N.isDatasetVisible(Me)&&he(Qe))for(void 0===er[sr]&&(er[sr]=[]),wt=0,It=(ft=k[Me].data).length;wt<It;wt++){var Dr=er[sr];Re=h._parseValue(ft[wt]),!(isNaN(Re.min)||isNaN(Re.max)||Qe.data[wt].hidden||Re.min<0||Re.max<0)&&(Dr[wt]=Dr[wt]||0,Dr[wt]+=Re.max)}}Pe.each(er,function(oi){if(oi.length>0){var uo=Pe.min(oi),As=Pe.max(oi);h.min=Math.min(h.min,uo),h.max=Math.max(h.max,As)}})}else for(Me=0;Me<k.length;Me++)if(Qe=N.getDatasetMeta(Me),N.isDatasetVisible(Me)&&he(Qe))for(wt=0,It=(ft=k[Me].data).length;wt<It;wt++)Re=h._parseValue(ft[wt]),!(isNaN(Re.min)||isNaN(Re.max)||Qe.data[wt].hidden||Re.min<0||Re.max<0)&&(h.min=Math.min(Re.min,h.min),h.max=Math.max(Re.max,h.max),0!==Re.min&&(h.minNotZero=Math.min(Re.min,h.minNotZero)));h.min=Pe.isFinite(h.min)?h.min:null,h.max=Pe.isFinite(h.max)?h.max:null,h.minNotZero=Pe.isFinite(h.minNotZero)?h.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var h=this,b=h.options.ticks;h.min=st(b.min,h.min),h.max=st(b.max,h.max),h.min===h.max&&(0!==h.min&&null!==h.min?(h.min=Math.pow(10,Math.floor(ae(h.min))-1),h.max=Math.pow(10,Math.floor(ae(h.max))+1)):(h.min=1,h.max=10)),null===h.min&&(h.min=Math.pow(10,Math.floor(ae(h.max))-1)),null===h.max&&(h.max=0!==h.min?Math.pow(10,Math.floor(ae(h.min))+1):10),null===h.minNotZero&&(h.minNotZero=h.min>0?h.min:h.max<1?Math.pow(10,Math.floor(ae(h.max))):1)},buildTicks:function(){var h=this,b=h.options.ticks,N=!h.isHorizontal(),k={min:st(b.min),max:st(b.max)},ne=h.ticks=function De(h,b){var Me,Qe,N=[],k=le(h.min,Math.pow(10,Math.floor(ae(b.min)))),ne=Math.floor(ae(b.max)),he=Math.ceil(b.max/Math.pow(10,ne));0===k?(Me=Math.floor(ae(b.minNotZero)),Qe=Math.floor(b.minNotZero/Math.pow(10,Me)),N.push(k),k=Qe*Math.pow(10,Me)):(Me=Math.floor(ae(k)),Qe=Math.floor(k/Math.pow(10,Me)));var Re=Me<0?Math.pow(10,Math.abs(Me)):1;do{N.push(k),10==++Qe&&(Qe=1,Re=++Me>=0?1:Re),k=Math.round(Qe*Math.pow(10,Me)*Re)/Re}while(Me<ne||Me===ne&&Qe<he);var ft=le(h.max,k);return N.push(ft),N}(k,h);h.max=Pe.max(ne),h.min=Pe.min(ne),b.reverse?(N=!N,h.start=h.max,h.end=h.min):(h.start=h.min,h.end=h.max),N&&ne.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),je.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(h,b){return this._getScaleLabel(this.chart.data.datasets[b].data[h])},getPixelForTick:function(h){var b=this.tickValues;return h<0||h>b.length-1?null:this.getPixelForValue(b[h])},_getFirstTickValue:function(h){var b=Math.floor(ae(h));return Math.floor(h/Math.pow(10,b))*Math.pow(10,b)},_configure:function(){var h=this,b=h.min,N=0;je.prototype._configure.call(h),0===b&&(b=h._getFirstTickValue(h.minNotZero),N=le(h.options.ticks.fontSize,qr.global.defaultFontSize)/h._length),h._startValue=ae(b),h._valueOffset=N,h._valueRange=(ae(h.max)-ae(b))/(1-N)},getPixelForValue:function(h){var b=this,N=0;return(h=+b.getRightValue(h))>b.min&&h>0&&(N=(ae(h)-b._startValue)/b._valueRange+b._valueOffset),b.getPixelForDecimal(N)},getValueForPixel:function(h){var b=this,N=b.getDecimalForPixel(h);return 0===N&&0===b.min?0:Math.pow(10,b._startValue+(N-b._valueOffset)*b._valueRange)}});zt._defaults=Ve;var Gn=Pe.valueOrDefault,Er=Pe.valueAtIndexOrDefault,Nr=Pe.options.resolve,Mi={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Io.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(h){return h}}};function ao(h){var b=h.ticks;return b.display&&h.display?Gn(b.fontSize,qr.global.defaultFontSize)+2*b.backdropPaddingY:0}function Jo(h,b,N){return Pe.isArray(N)?{w:Pe.longestText(h,h.font,N),h:N.length*b}:{w:h.measureText(N).width,h:b}}function rs(h,b,N,k,ne){return h===k||h===ne?{start:b-N/2,end:b+N/2}:h<k||h>ne?{start:b-N,end:b}:{start:b,end:b+N}}function Ps(h){return 0===h||180===h?"center":h<180?"left":"right"}function Ul(h,b,N,k){var he,Me,ne=N.y+k/2;if(Pe.isArray(b))for(he=0,Me=b.length;he<Me;++he)h.fillText(b[he],N.x,ne),ne+=k;else h.fillText(b,N.x,ne)}function eu(h,b,N){90===h||270===h?N.y-=b.h/2:(h>270||h<90)&&(N.y-=b.h)}function Rc(h){return Pe.isNumber(h)?h:0}var fu=Fs.extend({setDimensions:function(){var h=this;h.width=h.maxWidth,h.height=h.maxHeight,h.paddingTop=ao(h.options)/2,h.xCenter=Math.floor(h.width/2),h.yCenter=Math.floor((h.height-h.paddingTop)/2),h.drawingArea=Math.min(h.height-h.paddingTop,h.width)/2},determineDataLimits:function(){var h=this,b=h.chart,N=Number.POSITIVE_INFINITY,k=Number.NEGATIVE_INFINITY;Pe.each(b.data.datasets,function(ne,he){if(b.isDatasetVisible(he)){var Me=b.getDatasetMeta(he);Pe.each(ne.data,function(Qe,Re){var ft=+h.getRightValue(Qe);isNaN(ft)||Me.data[Re].hidden||(N=Math.min(ft,N),k=Math.max(ft,k))})}}),h.min=N===Number.POSITIVE_INFINITY?0:N,h.max=k===Number.NEGATIVE_INFINITY?0:k,h.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/ao(this.options))},convertTicksToLabels:function(){var h=this;Fs.prototype.convertTicksToLabels.call(h),h.pointLabels=h.chart.data.labels.map(function(){var b=Pe.callback(h.options.pointLabels.callback,arguments,h);return b||0===b?b:""})},getLabelForIndex:function(h,b){return+this.getRightValue(this.chart.data.datasets[b].data[h])},fit:function(){var h=this,b=h.options;b.display&&b.pointLabels.display?function ys(h){var ne,he,Me,b=Pe.options._parseFont(h.options.pointLabels),N={l:0,r:h.width,t:0,b:h.height-h.paddingTop},k={};h.ctx.font=b.string,h._pointLabelSizes=[];var Qe=h.chart.data.labels.length;for(ne=0;ne<Qe;ne++){Me=h.getPointPosition(ne,h.drawingArea+5),he=Jo(h.ctx,b.lineHeight,h.pointLabels[ne]),h._pointLabelSizes[ne]=he;var Re=h.getIndexAngle(ne),ft=Pe.toDegrees(Re)%360,wt=rs(ft,Me.x,he.w,0,180),It=rs(ft,Me.y,he.h,90,270);wt.start<N.l&&(N.l=wt.start,k.l=Re),wt.end>N.r&&(N.r=wt.end,k.r=Re),It.start<N.t&&(N.t=It.start,k.t=Re),It.end>N.b&&(N.b=It.end,k.b=Re)}h.setReductions(h.drawingArea,N,k)}(h):h.setCenterPoint(0,0,0,0)},setReductions:function(h,b,N){var k=this,ne=b.l/Math.sin(N.l),he=Math.max(b.r-k.width,0)/Math.sin(N.r),Me=-b.t/Math.cos(N.t),Qe=-Math.max(b.b-(k.height-k.paddingTop),0)/Math.cos(N.b);ne=Rc(ne),he=Rc(he),Me=Rc(Me),Qe=Rc(Qe),k.drawingArea=Math.min(Math.floor(h-(ne+he)/2),Math.floor(h-(Me+Qe)/2)),k.setCenterPoint(ne,he,Me,Qe)},setCenterPoint:function(h,b,N,k){var ne=this,Qe=N+ne.drawingArea,Re=ne.height-ne.paddingTop-k-ne.drawingArea;ne.xCenter=Math.floor((h+ne.drawingArea+(ne.width-b-ne.drawingArea))/2+ne.left),ne.yCenter=Math.floor((Qe+Re)/2+ne.top+ne.paddingTop)},getIndexAngle:function(h){var b=this.chart,he=(h*(360/b.data.labels.length)+((b.options||{}).startAngle||0))%360;return(he<0?he+360:he)*Math.PI*2/360},getDistanceFromCenterForValue:function(h){var b=this;if(Pe.isNullOrUndef(h))return NaN;var N=b.drawingArea/(b.max-b.min);return b.options.ticks.reverse?(b.max-h)*N:(h-b.min)*N},getPointPosition:function(h,b){var N=this,k=N.getIndexAngle(h)-Math.PI/2;return{x:Math.cos(k)*b+N.xCenter,y:Math.sin(k)*b+N.yCenter}},getPointPositionForValue:function(h,b){return this.getPointPosition(h,this.getDistanceFromCenterForValue(b))},getBasePosition:function(h){var b=this,N=b.min,k=b.max;return b.getPointPositionForValue(h||0,b.beginAtZero?0:N<0&&k<0?k:N>0&&k>0?N:0)},_drawGrid:function(){var Qe,Re,ft,h=this,b=h.ctx,N=h.options,k=N.gridLines,ne=N.angleLines,he=Gn(ne.lineWidth,k.lineWidth),Me=Gn(ne.color,k.color);if(N.pointLabels.display&&function mu(h){var b=h.ctx,N=h.options,k=N.pointLabels,ne=ao(N),he=h.getDistanceFromCenterForValue(N.ticks.reverse?h.min:h.max),Me=Pe.options._parseFont(k);b.save(),b.font=Me.string,b.textBaseline="middle";for(var Qe=h.chart.data.labels.length-1;Qe>=0;Qe--){var ft=h.getPointPosition(Qe,he+(0===Qe?ne/2:0)+5),wt=Er(k.fontColor,Qe,qr.global.defaultFontColor);b.fillStyle=wt;var It=h.getIndexAngle(Qe),Cn=Pe.toDegrees(It);b.textAlign=Ps(Cn),eu(Cn,h._pointLabelSizes[Qe],ft),Ul(b,h.pointLabels[Qe],ft,Me.lineHeight)}b.restore()}(h),k.display&&Pe.each(h.ticks,function(wt,It){0!==It&&(Re=h.getDistanceFromCenterForValue(h.ticksAsNumbers[It]),function wu(h,b,N,k){var ft,ne=h.ctx,he=b.circular,Me=h.chart.data.labels.length,Qe=Er(b.color,k-1),Re=Er(b.lineWidth,k-1);if((he||Me)&&Qe&&Re){if(ne.save(),ne.strokeStyle=Qe,ne.lineWidth=Re,ne.setLineDash&&(ne.setLineDash(b.borderDash||[]),ne.lineDashOffset=b.borderDashOffset||0),ne.beginPath(),he)ne.arc(h.xCenter,h.yCenter,N,0,2*Math.PI);else{ft=h.getPointPosition(0,N),ne.moveTo(ft.x,ft.y);for(var wt=1;wt<Me;wt++)ft=h.getPointPosition(wt,N),ne.lineTo(ft.x,ft.y)}ne.closePath(),ne.stroke(),ne.restore()}}(h,k,Re,It))}),ne.display&&he&&Me){for(b.save(),b.lineWidth=he,b.strokeStyle=Me,b.setLineDash&&(b.setLineDash(Nr([ne.borderDash,k.borderDash,[]])),b.lineDashOffset=Nr([ne.borderDashOffset,k.borderDashOffset,0])),Qe=h.chart.data.labels.length-1;Qe>=0;Qe--)Re=h.getDistanceFromCenterForValue(N.ticks.reverse?h.min:h.max),ft=h.getPointPosition(Qe,Re),b.beginPath(),b.moveTo(h.xCenter,h.yCenter),b.lineTo(ft.x,ft.y),b.stroke();b.restore()}},_drawLabels:function(){var h=this,b=h.ctx,k=h.options.ticks;if(k.display){var Qe,Re,ne=h.getIndexAngle(0),he=Pe.options._parseFont(k),Me=Gn(k.fontColor,qr.global.defaultFontColor);b.save(),b.font=he.string,b.translate(h.xCenter,h.yCenter),b.rotate(ne),b.textAlign="center",b.textBaseline="middle",Pe.each(h.ticks,function(ft,wt){0===wt&&!k.reverse||(Qe=h.getDistanceFromCenterForValue(h.ticksAsNumbers[wt]),k.showLabelBackdrop&&(Re=b.measureText(ft).width,b.fillStyle=k.backdropColor,b.fillRect(-Re/2-k.backdropPaddingX,-Qe-he.size/2-k.backdropPaddingY,Re+2*k.backdropPaddingX,he.size+2*k.backdropPaddingY)),b.fillStyle=Me,b.fillText(ft,0,-Qe))}),b.restore()}},_drawTitle:Pe.noop});fu._defaults=Mi;var $c=Pe._deprecated,pu=Pe.options.resolve,vc=Pe.valueOrDefault,La=Number.MIN_SAFE_INTEGER||-9007199254740991,al=Number.MAX_SAFE_INTEGER||9007199254740991,rl={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},xa=Object.keys(rl);function Tu(h,b){return h-b}function Pu(h){return Pe.valueOrDefault(h.time.min,h.ticks.min)}function za(h){return Pe.valueOrDefault(h.time.max,h.ticks.max)}function Cu(h,b,N,k){var ne=function Os(h,b,N){for(var he,Me,Qe,k=0,ne=h.length-1;k>=0&&k<=ne;){if(Qe=h[he=k+ne>>1],!(Me=h[he-1]||null))return{lo:null,hi:Qe};if(Qe[b]<N)k=he+1;else{if(!(Me[b]>N))return{lo:Me,hi:Qe};ne=he-1}}return{lo:Qe,hi:null}}(h,b,N),he=ne.lo?ne.hi?ne.lo:h[h.length-2]:h[0],Me=ne.lo?ne.hi?ne.hi:h[h.length-1]:h[1],Qe=Me[b]-he[b];return he[k]+(Me[k]-he[k])*(Qe?(N-he[b])/Qe:0)}function ld(h,b){var N=h._adapter,k=h.options.time,ne=k.parser,he=ne||k.format,Me=b;return"function"==typeof ne&&(Me=ne(Me)),Pe.isFinite(Me)||(Me="string"==typeof he?N.parse(Me,he):N.parse(Me)),null!==Me?+Me:(!ne&&"function"==typeof he&&(Me=he(b),Pe.isFinite(Me)||(Me=N.parse(Me))),Me)}function Hc(h,b){if(Pe.isNullOrUndef(b))return null;var N=h.options.time,k=ld(h,h.getRightValue(b));return null===k||N.round&&(k=+h._adapter.startOf(k,N.round)),k}function Vu(h,b,N,k){var he,Me,ne=xa.length;for(he=xa.indexOf(h);he<ne-1;++he)if((Me=rl[xa[he]]).common&&Math.ceil((N-b)/((Me.steps?Me.steps:al)*Me.size))<=k)return xa[he];return xa[ne-1]}function Uc(h,b,N){var Me,Qe,k=[],ne={},he=b.length;for(Me=0;Me<he;++Me)ne[Qe=b[Me]]=Me,k.push({value:Qe,major:!1});return 0!==he&&N?function Mu(h,b,N,k){var Qe,Re,ne=h._adapter,he=+ne.startOf(b[0].value,k),Me=b[b.length-1].value;for(Qe=he;Qe<=Me;Qe=+ne.add(Qe,1,k))(Re=N[Qe])>=0&&(b[Re].major=!0);return b}(h,k,ne,N):k}var Tp=je.extend({initialize:function(){this.mergeTicksOptions(),je.prototype.initialize.call(this)},update:function(){var h=this,b=h.options,N=b.time||(b.time={}),k=h._adapter=new Go._date(b.adapters.date);return $c("time scale",N.format,"time.format","time.parser"),$c("time scale",N.min,"time.min","ticks.min"),$c("time scale",N.max,"time.max","ticks.max"),Pe.mergeIf(N.displayFormats,k.formats()),je.prototype.update.apply(h,arguments)},getRightValue:function(h){return h&&void 0!==h.t&&(h=h.t),je.prototype.getRightValue.call(this,h)},determineDataLimits:function(){var wt,It,Cn,er,sr,Dr,oi,h=this,b=h.chart,N=h._adapter,k=h.options,ne=k.time.unit||"day",he=al,Me=La,Qe=[],Re=[],ft=[],uo=h._getLabels();for(wt=0,Cn=uo.length;wt<Cn;++wt)ft.push(Hc(h,uo[wt]));for(wt=0,Cn=(b.data.datasets||[]).length;wt<Cn;++wt)if(b.isDatasetVisible(wt))if(Pe.isObject((sr=b.data.datasets[wt].data)[0]))for(Re[wt]=[],It=0,er=sr.length;It<er;++It)Dr=Hc(h,sr[It]),Qe.push(Dr),Re[wt][It]=Dr;else Re[wt]=ft.slice(0),oi||(Qe=Qe.concat(ft),oi=!0);else Re[wt]=[];ft.length&&(he=Math.min(he,ft[0]),Me=Math.max(Me,ft[ft.length-1])),Qe.length&&(Qe=Cn>1?function En(h){var k,ne,he,b={},N=[];for(k=0,ne=h.length;k<ne;++k)b[he=h[k]]||(b[he]=!0,N.push(he));return N}(Qe).sort(Tu):Qe.sort(Tu),he=Math.min(he,Qe[0]),Me=Math.max(Me,Qe[Qe.length-1])),he=Hc(h,Pu(k))||he,Me=Hc(h,za(k))||Me,he=he===al?+N.startOf(Date.now(),ne):he,Me=Me===La?+N.endOf(Date.now(),ne)+1:Me,h.min=Math.min(he,Me),h.max=Math.max(he+1,Me),h._table=[],h._timestamps={data:Qe,datasets:Re,labels:ft}},buildTicks:function(){var It,Cn,er,h=this,b=h.min,N=h.max,k=h.options,ne=k.ticks,he=k.time,Me=h._timestamps,Qe=[],Re=h.getLabelCapacity(b),ft=ne.source,wt=k.distribution;for(Me="data"===ft||"auto"===ft&&"series"===wt?Me.data:"labels"===ft?Me.labels:function tf(h,b,N,k){var Cn,ne=h._adapter,he=h.options,Me=he.time,Qe=Me.unit||Vu(Me.minUnit,b,N,k),Re=pu([Me.stepSize,Me.unitStepSize,1]),ft="week"===Qe&&Me.isoWeekday,wt=b,It=[];if(ft&&(wt=+ne.startOf(wt,"isoWeek",ft)),wt=+ne.startOf(wt,ft?"day":Qe),ne.diff(N,b,Qe)>1e5*Re)throw b+" and "+N+" are too far apart with stepSize of "+Re+" "+Qe;for(Cn=wt;Cn<N;Cn=+ne.add(Cn,Re,Qe))It.push(Cn);return(Cn===N||"ticks"===he.bounds)&&It.push(Cn),It}(h,b,N,Re),"ticks"===k.bounds&&Me.length&&(b=Me[0],N=Me[Me.length-1]),b=Hc(h,Pu(k))||b,N=Hc(h,za(k))||N,It=0,Cn=Me.length;It<Cn;++It)(er=Me[It])>=b&&er<=N&&Qe.push(er);return h.min=b,h.max=N,h._unit=he.unit||(ne.autoSkip?Vu(he.minUnit,h.min,h.max,Re):function ud(h,b,N,k,ne){var he,Me;for(he=xa.length-1;he>=xa.indexOf(N);he--)if(rl[Me=xa[he]].common&&h._adapter.diff(ne,k,Me)>=b-1)return Me;return xa[N?xa.indexOf(N):0]}(h,Qe.length,he.minUnit,h.min,h.max)),h._majorUnit=ne.major.enabled&&"year"!==h._unit?function md(h){for(var b=xa.indexOf(h)+1,N=xa.length;b<N;++b)if(rl[xa[b]].common)return xa[b]}(h._unit):void 0,h._table=function Va(h,b,N,k){if("linear"===k||!h.length)return[{time:b,pos:0},{time:N,pos:1}];var Me,Qe,Re,ft,wt,ne=[],he=[b];for(Me=0,Qe=h.length;Me<Qe;++Me)(ft=h[Me])>b&&ft<N&&he.push(ft);for(he.push(N),Me=0,Qe=he.length;Me<Qe;++Me)wt=he[Me+1],ft=he[Me],(void 0===(Re=he[Me-1])||void 0===wt||Math.round((wt+Re)/2)!==ft)&&ne.push({time:ft,pos:Me/(Qe-1)});return ne}(h._timestamps.data,b,N,wt),h._offsets=function Uf(h,b,N,k,ne){var Qe,Re,he=0,Me=0;return ne.offset&&b.length&&(Qe=Cu(h,"time",b[0],"pos"),he=1===b.length?1-Qe:(Cu(h,"time",b[1],"pos")-Qe)/2,Re=Cu(h,"time",b[b.length-1],"pos"),Me=1===b.length?Re:(Re-Cu(h,"time",b[b.length-2],"pos"))/2),{start:he,end:Me,factor:1/(he+1+Me)}}(h._table,Qe,0,0,k),ne.reverse&&Qe.reverse(),Uc(h,Qe,h._majorUnit)},getLabelForIndex:function(h,b){var N=this,k=N._adapter,ne=N.chart.data,he=N.options.time,Me=ne.labels&&h<ne.labels.length?ne.labels[h]:"",Qe=ne.datasets[b].data[h];return Pe.isObject(Qe)&&(Me=N.getRightValue(Qe)),he.tooltipFormat?k.format(ld(N,Me),he.tooltipFormat):"string"==typeof Me?Me:k.format(ld(N,Me),he.displayFormats.datetime)},tickFormatFunction:function(h,b,N,k){var Me=this.options,Qe=Me.time.displayFormats,ft=this._majorUnit,wt=Qe[ft],It=N[b],Cn=Me.ticks,er=ft&&wt&&It&&It.major,sr=this._adapter.format(h,k||(er?wt:Qe[this._unit])),Dr=er?Cn.major:Cn.minor,oi=pu([Dr.callback,Dr.userCallback,Cn.callback,Cn.userCallback]);return oi?oi(sr,b,N):sr},convertTicksToLabels:function(h){var N,k,b=[];for(N=0,k=h.length;N<k;++N)b.push(this.tickFormatFunction(h[N].value,N,h));return b},getPixelForOffset:function(h){var b=this,N=b._offsets,k=Cu(b._table,"time",h,"pos");return b.getPixelForDecimal((N.start+k)*N.factor)},getPixelForValue:function(h,b,N){var k=this,ne=null;if(void 0!==b&&void 0!==N&&(ne=k._timestamps.datasets[N][b]),null===ne&&(ne=Hc(k,h)),null!==ne)return k.getPixelForOffset(ne)},getPixelForTick:function(h){var b=this.getTicks();return h>=0&&h<b.length?this.getPixelForOffset(b[h].value):null},getValueForPixel:function(h){var b=this,N=b._offsets,k=b.getDecimalForPixel(h)/N.factor-N.end,ne=Cu(b._table,"pos",k,"time");return b._adapter._create(ne)},_getLabelSize:function(h){var b=this,N=b.options.ticks,k=b.ctx.measureText(h).width,ne=Pe.toRadians(b.isHorizontal()?N.maxRotation:N.minRotation),he=Math.cos(ne),Me=Math.sin(ne),Qe=vc(N.fontSize,qr.global.defaultFontSize);return{w:k*he+Qe*Me,h:k*Me+Qe*he}},getLabelWidth:function(h){return this._getLabelSize(h).w},getLabelCapacity:function(h){var b=this,N=b.options.time,k=N.displayFormats,ne=k[N.unit]||k.millisecond,he=b.tickFormatFunction(h,0,Uc(b,[h],b._majorUnit),ne),Me=b._getLabelSize(he),Qe=Math.floor(b.isHorizontal()?b.width/Me.w:b.height/Me.h);return b.options.offset&&Qe--,Qe>0?Qe:1}});Tp._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var Hd={category:tn,linear:rn,logarithmic:zt,radialLinear:fu,time:Tp},Bf={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Go._date.override("function"==typeof r?{_id:"moment",formats:function(){return Bf},parse:function(h,b){return"string"==typeof h&&"string"==typeof b?h=r(h,b):h instanceof r||(h=r(h)),h.isValid()?h.valueOf():null},format:function(h,b){return r(h).format(b)},add:function(h,b,N){return r(h).add(b,N).valueOf()},diff:function(h,b,N){return r(h).diff(r(b),N)},startOf:function(h,b,N){return h=r(h),"isoWeek"===b?h.isoWeekday(N).valueOf():h.startOf(b).valueOf()},endOf:function(h,b){return r(h).endOf(b).valueOf()},_create:function(h){return r(h)}}:{}),qr._set("global",{plugins:{filler:{propagate:!0}}});var gd={dataset:function(h){var b=h.fill,N=h.chart,k=N.getDatasetMeta(b),he=k&&N.isDatasetVisible(b)&&k.dataset._children||[],Me=he.length||0;return Me?function(Qe,Re){return Re<Me&&he[Re]._view||null}:null},boundary:function(h){var b=h.boundary,N=b?b.x:null,k=b?b.y:null;return Pe.isArray(b)?function(ne,he){return b[he]}:function(ne){return{x:null===N?ne.x:N,y:null===k?ne.y:k}}}};function Nu(h,b,N){var he,k=h._model||{},ne=k.fill;if(void 0===ne&&(ne=!!k.backgroundColor),!1===ne||null===ne)return!1;if(!0===ne)return"origin";if(he=parseFloat(ne,10),isFinite(he)&&Math.floor(he)===he)return("-"===ne[0]||"+"===ne[0])&&(he=b+he),!(he===b||he<0||he>=N)&&he;switch(ne){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return ne;default:return!1}}function _u(h){return(h.el._scale||{}).getPointPositionForValue?function xf(h){var Me,Qe,Re,ft,wt,b=h.el._scale,N=b.options,k=b.chart.data.labels.length,ne=h.fill,he=[];if(!k)return null;for(Qe=N.ticks.reverse?b.min:b.max,Re=b.getPointPositionForValue(0,Me=N.ticks.reverse?b.max:b.min),ft=0;ft<k;++ft)wt="start"===ne||"end"===ne?b.getPointPositionForValue(ft,"start"===ne?Me:Qe):b.getBasePosition(ft),N.gridLines.circular&&(wt.cx=Re.x,wt.cy=Re.y,wt.angle=b.getIndexAngle(ft)-Math.PI/2),he.push(wt);return he}(h):function ed(h){var he,b=h.el._model||{},N=h.el._scale||{},k=h.fill,ne=null;if(isFinite(k))return null;if("start"===k?ne=void 0===b.scaleBottom?N.bottom:b.scaleBottom:"end"===k?ne=void 0===b.scaleTop?N.top:b.scaleTop:void 0!==b.scaleZero?ne=b.scaleZero:N.getBasePixel&&(ne=N.getBasePixel()),null!=ne){if(void 0!==ne.x&&void 0!==ne.y)return ne;if(Pe.isFinite(ne))return{x:(he=N.isHorizontal())?ne:null,y:he?null:ne}}return null}(h)}function Ud(h,b,N){var Me,ne=h[b].fill,he=[b];if(!N)return ne;for(;!1!==ne&&-1===he.indexOf(ne);){if(!isFinite(ne))return ne;if(!(Me=h[ne]))return!1;if(Me.visible)return ne;he.push(ne),ne=Me.fill}return!1}function Bc(h){var b=h.fill,N="dataset";return!1===b?null:(isFinite(b)||(N="boundary"),gd[N](h))}function Lo(h){return h&&!h.skip}function Se(h,b,N,k,ne){var he,Me,Qe,Re;if(k&&ne){for(h.moveTo(b[0].x,b[0].y),he=1;he<k;++he)Pe.canvas.lineTo(h,b[he-1],b[he]);if(void 0!==N[0].angle){for(Me=N[0].cx,Qe=N[0].cy,Re=Math.sqrt(Math.pow(N[0].x-Me,2)+Math.pow(N[0].y-Qe,2)),he=ne-1;he>0;--he)h.arc(Me,Qe,Re,N[he].angle,N[he-1].angle,!0);return}for(h.lineTo(N[ne-1].x,N[ne-1].y),he=ne-1;he>0;--he)Pe.canvas.lineTo(h,N[he],N[he-1],!0)}}function Ne(h,b,N,k,ne,he){var Cn,er,sr,Dr,oi,uo,As,as,Me=b.length,Qe=k.spanGaps,Re=[],ft=[],wt=0,It=0;for(h.beginPath(),Cn=0,er=Me;Cn<er;++Cn)oi=N(Dr=b[sr=Cn%Me]._view,sr,k),uo=Lo(Dr),As=Lo(oi),he&&void 0===as&&uo&&(er=Me+(as=Cn+1)),uo&&As?(wt=Re.push(Dr),It=ft.push(oi)):wt&&It&&(Qe?(uo&&Re.push(Dr),As&&ft.push(oi)):(Se(h,Re,ft,wt,It),wt=It=0,Re=[],ft=[]));Se(h,Re,ft,wt,It),h.closePath(),h.fillStyle=ne,h.fill()}var _e={id:"filler",afterDatasetsUpdate:function(h,b){var he,Me,Qe,Re,N=(h.data.datasets||[]).length,k=b.propagate,ne=[];for(Me=0;Me<N;++Me)Re=null,(Qe=(he=h.getDatasetMeta(Me)).dataset)&&Qe._model&&Qe instanceof ss.Line&&(Re={visible:h.isDatasetVisible(Me),fill:Nu(Qe,Me,N),chart:h,el:Qe}),he.$filler=Re,ne.push(Re);for(Me=0;Me<N;++Me)(Re=ne[Me])&&(Re.fill=Ud(ne,Me,k),Re.boundary=_u(Re),Re.mapper=Bc(Re))},beforeDatasetsDraw:function(h){var k,ne,he,Me,Qe,Re,ft,b=h._getSortedVisibleDatasetMetas(),N=h.ctx;for(ne=b.length-1;ne>=0;--ne)(k=b[ne].$filler)&&k.visible&&(Qe=(he=k.el)._children||[],ft=(Me=he._view).backgroundColor||qr.global.defaultColor,(Re=k.mapper)&&ft&&Qe.length&&(Pe.canvas.clipArea(N,h.chartArea),Ne(N,Qe,Re,Me,ft,he._loop),Pe.canvas.unclipArea(N)))}},Ye=Pe.rtl.getRtlAdapter,Mt=Pe.noop,un=Pe.valueOrDefault;function Mn(h,b){return h.usePointStyle&&h.boxWidth>b?b:h.boxWidth}qr._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(h,b){var N=b.datasetIndex,k=this.chart,ne=k.getDatasetMeta(N);ne.hidden=null===ne.hidden?!k.data.datasets[N].hidden:null,k.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(h){var b=h.data.datasets,N=h.options.legend||{},k=N.labels&&N.labels.usePointStyle;return h._getSortedDatasetMetas().map(function(ne){var he=ne.controller.getStyle(k?0:void 0);return{text:b[ne.index].label,fillStyle:he.backgroundColor,hidden:!h.isDatasetVisible(ne.index),lineCap:he.borderCapStyle,lineDash:he.borderDash,lineDashOffset:he.borderDashOffset,lineJoin:he.borderJoinStyle,lineWidth:he.borderWidth,strokeStyle:he.borderColor,pointStyle:he.pointStyle,rotation:he.rotation,datasetIndex:ne.index}},this)}}},legendCallback:function(h){var k,ne,he,b=document.createElement("ul"),N=h.data.datasets;for(b.setAttribute("class",h.id+"-legend"),k=0,ne=N.length;k<ne;k++)(he=b.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=N[k].backgroundColor,N[k].label&&he.appendChild(document.createTextNode(N[k].label));return b.outerHTML}});var ni=nr.extend({initialize:function(h){var b=this;Pe.extend(b,h),b.legendHitBoxes=[],b._hoveredItem=null,b.doughnutMode=!1},beforeUpdate:Mt,update:function(h,b,N){var k=this;return k.beforeUpdate(),k.maxWidth=h,k.maxHeight=b,k.margins=N,k.beforeSetDimensions(),k.setDimensions(),k.afterSetDimensions(),k.beforeBuildLabels(),k.buildLabels(),k.afterBuildLabels(),k.beforeFit(),k.fit(),k.afterFit(),k.afterUpdate(),k.minSize},afterUpdate:Mt,beforeSetDimensions:Mt,setDimensions:function(){var h=this;h.isHorizontal()?(h.width=h.maxWidth,h.left=0,h.right=h.width):(h.height=h.maxHeight,h.top=0,h.bottom=h.height),h.paddingLeft=0,h.paddingTop=0,h.paddingRight=0,h.paddingBottom=0,h.minSize={width:0,height:0}},afterSetDimensions:Mt,beforeBuildLabels:Mt,buildLabels:function(){var h=this,b=h.options.labels||{},N=Pe.callback(b.generateLabels,[h.chart],h)||[];b.filter&&(N=N.filter(function(k){return b.filter(k,h.chart.data)})),h.options.reverse&&N.reverse(),h.legendItems=N},afterBuildLabels:Mt,beforeFit:Mt,fit:function(){var h=this,b=h.options,N=b.labels,k=b.display,ne=h.ctx,he=Pe.options._parseFont(N),Me=he.size,Qe=h.legendHitBoxes=[],Re=h.minSize,ft=h.isHorizontal();if(ft?(Re.width=h.maxWidth,Re.height=k?10:0):(Re.width=k?10:0,Re.height=h.maxHeight),k){if(ne.font=he.string,ft){var wt=h.lineWidths=[0],It=0;ne.textAlign="left",ne.textBaseline="middle",Pe.each(h.legendItems,function(As,as){var Na=Mn(N,Me)+Me/2+ne.measureText(As.text).width;(0===as||wt[wt.length-1]+Na+2*N.padding>Re.width)&&(It+=Me+N.padding,wt[wt.length-(as>0?0:1)]=0),Qe[as]={left:0,top:0,width:Na,height:Me},wt[wt.length-1]+=Na+N.padding}),Re.height+=It}else{var Cn=N.padding,er=h.columnWidths=[],sr=h.columnHeights=[],Dr=N.padding,oi=0,uo=0;Pe.each(h.legendItems,function(As,as){var Na=Mn(N,Me)+Me/2+ne.measureText(As.text).width;as>0&&uo+Me+2*Cn>Re.height&&(Dr+=oi+N.padding,er.push(oi),sr.push(uo),oi=0,uo=0),oi=Math.max(oi,Na),uo+=Me+Cn,Qe[as]={left:0,top:0,width:Na,height:Me}}),Dr+=oi,er.push(oi),sr.push(uo),Re.width+=Dr}h.width=Re.width,h.height=Re.height}else h.width=Re.width=h.height=Re.height=0},afterFit:Mt,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var h=this,b=h.options,N=b.labels,k=qr.global,ne=k.defaultColor,he=k.elements.line,Me=h.height,Qe=h.columnHeights,Re=h.width,ft=h.lineWidths;if(b.display){var Dr,wt=Ye(b.rtl,h.left,h.minSize.width),It=h.ctx,Cn=un(N.fontColor,k.defaultFontColor),er=Pe.options._parseFont(N),sr=er.size;It.textAlign=wt.textAlign("left"),It.textBaseline="middle",It.lineWidth=.5,It.strokeStyle=Cn,It.fillStyle=Cn,It.font=er.string;var oi=Mn(N,sr),uo=h.legendHitBoxes,ma=function(il,dl){switch(b.align){case"start":return N.padding;case"end":return il-dl;default:return(il-dl+N.padding)/2}},Na=h.isHorizontal();Dr=Na?{x:h.left+ma(Re,ft[0]),y:h.top+N.padding,line:0}:{x:h.left+N.padding,y:h.top+ma(Me,Qe[0]),line:0},Pe.rtl.overrideTextDirection(h.ctx,b.textDirection);var Pl=sr+N.padding;Pe.each(h.legendItems,function(il,dl){var Nl=It.measureText(il.text).width,Qu=oi+sr/2+Nl,ac=Dr.x,wa=Dr.y;wt.setWidth(h.minSize.width),Na?dl>0&&ac+Qu+N.padding>h.left+h.minSize.width&&(wa=Dr.y+=Pl,Dr.line++,ac=Dr.x=h.left+ma(Re,ft[Dr.line])):dl>0&&wa+Pl>h.top+h.minSize.height&&(ac=Dr.x=ac+h.columnWidths[Dr.line]+N.padding,Dr.line++,wa=Dr.y=h.top+ma(Me,Qe[Dr.line]));var nc=wt.x(ac);(function(il,dl,Nl){if(!(isNaN(oi)||oi<=0)){It.save();var Qu=un(Nl.lineWidth,he.borderWidth);if(It.fillStyle=un(Nl.fillStyle,ne),It.lineCap=un(Nl.lineCap,he.borderCapStyle),It.lineDashOffset=un(Nl.lineDashOffset,he.borderDashOffset),It.lineJoin=un(Nl.lineJoin,he.borderJoinStyle),It.lineWidth=Qu,It.strokeStyle=un(Nl.strokeStyle,ne),It.setLineDash&&It.setLineDash(un(Nl.lineDash,he.borderDash)),N&&N.usePointStyle){var ac=oi*Math.SQRT2/2,wa=wt.xPlus(il,oi/2);Pe.canvas.drawPoint(It,Nl.pointStyle,ac,wa,dl+sr/2,Nl.rotation)}else It.fillRect(wt.leftForLtr(il,oi),dl,oi,sr),0!==Qu&&It.strokeRect(wt.leftForLtr(il,oi),dl,oi,sr);It.restore()}})(nc,wa,il),uo[dl].left=wt.leftForLtr(nc,uo[dl].width),uo[dl].top=wa,function(il,dl,Nl,Qu){var ac=sr/2,wa=wt.xPlus(il,oi+ac),nc=dl+ac;It.fillText(Nl.text,wa,nc),Nl.hidden&&(It.beginPath(),It.lineWidth=2,It.moveTo(wa,nc),It.lineTo(wt.xPlus(wa,Qu),nc),It.stroke())}(nc,wa,il,Nl),Na?Dr.x+=Qu+N.padding:Dr.y+=Pl}),Pe.rtl.restoreTextDirection(h.ctx,b.textDirection)}},_getLegendItemAt:function(h,b){var k,ne,he,N=this;if(h>=N.left&&h<=N.right&&b>=N.top&&b<=N.bottom)for(he=N.legendHitBoxes,k=0;k<he.length;++k)if(h>=(ne=he[k]).left&&h<=ne.left+ne.width&&b>=ne.top&&b<=ne.top+ne.height)return N.legendItems[k];return null},handleEvent:function(h){var ne,b=this,N=b.options,k="mouseup"===h.type?"click":h.type;if("mousemove"===k){if(!N.onHover&&!N.onLeave)return}else{if("click"!==k)return;if(!N.onClick)return}ne=b._getLegendItemAt(h.x,h.y),"click"===k?ne&&N.onClick&&N.onClick.call(b,h.native,ne):(N.onLeave&&ne!==b._hoveredItem&&(b._hoveredItem&&N.onLeave.call(b,h.native,b._hoveredItem),b._hoveredItem=ne),N.onHover&&ne&&N.onHover.call(b,h.native,ne))}});function zi(h,b){var N=new ni({ctx:h.ctx,options:b,chart:h});Xl.configure(h,N,b),Xl.addBox(h,N),h.legend=N}var Wo={id:"legend",_element:ni,beforeInit:function(h){var b=h.options.legend;b&&zi(h,b)},beforeUpdate:function(h){var b=h.options.legend,N=h.legend;b?(Pe.mergeIf(b,qr.global.legend),N?(Xl.configure(h,N,b),N.options=b):zi(h,b)):N&&(Xl.removeBox(h,N),delete h.legend)},afterEvent:function(h,b){var N=h.legend;N&&N.handleEvent(b)}},Qo=Pe.noop;qr._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var ya=nr.extend({initialize:function(h){Pe.extend(this,h),this.legendHitBoxes=[]},beforeUpdate:Qo,update:function(h,b,N){var k=this;return k.beforeUpdate(),k.maxWidth=h,k.maxHeight=b,k.margins=N,k.beforeSetDimensions(),k.setDimensions(),k.afterSetDimensions(),k.beforeBuildLabels(),k.buildLabels(),k.afterBuildLabels(),k.beforeFit(),k.fit(),k.afterFit(),k.afterUpdate(),k.minSize},afterUpdate:Qo,beforeSetDimensions:Qo,setDimensions:function(){var h=this;h.isHorizontal()?(h.width=h.maxWidth,h.left=0,h.right=h.width):(h.height=h.maxHeight,h.top=0,h.bottom=h.height),h.paddingLeft=0,h.paddingTop=0,h.paddingRight=0,h.paddingBottom=0,h.minSize={width:0,height:0}},afterSetDimensions:Qo,beforeBuildLabels:Qo,buildLabels:Qo,afterBuildLabels:Qo,beforeFit:Qo,fit:function(){var he,h=this,b=h.options,N=h.minSize={},k=h.isHorizontal();b.display?(he=(Pe.isArray(b.text)?b.text.length:1)*Pe.options._parseFont(b).lineHeight+2*b.padding,h.width=N.width=k?h.maxWidth:he,h.height=N.height=k?he:h.maxHeight):h.width=N.width=h.height=N.height=0},afterFit:Qo,isHorizontal:function(){var h=this.options.position;return"top"===h||"bottom"===h},draw:function(){var h=this,b=h.ctx,N=h.options;if(N.display){var It,Cn,er,k=Pe.options._parseFont(N),ne=k.lineHeight,he=ne/2+N.padding,Me=0,Qe=h.top,Re=h.left,ft=h.bottom,wt=h.right;b.fillStyle=Pe.valueOrDefault(N.fontColor,qr.global.defaultFontColor),b.font=k.string,h.isHorizontal()?(Cn=Re+(wt-Re)/2,er=Qe+he,It=wt-Re):(Cn="left"===N.position?Re+he:wt-he,er=Qe+(ft-Qe)/2,It=ft-Qe,Me=Math.PI*("left"===N.position?-.5:.5)),b.save(),b.translate(Cn,er),b.rotate(Me),b.textAlign="center",b.textBaseline="middle";var sr=N.text;if(Pe.isArray(sr))for(var Dr=0,oi=0;oi<sr.length;++oi)b.fillText(sr[oi],0,Dr,It),Dr+=ne;else b.fillText(sr,0,0,It);b.restore()}}});function Bl(h,b){var N=new ya({ctx:h.ctx,options:b,chart:h});Xl.configure(h,N,b),Xl.addBox(h,N),h.titleBlock=N}var pc={},cd=_e,Ju=Wo,tc={id:"title",_element:ya,beforeInit:function(h){var b=h.options.title;b&&Bl(h,b)},beforeUpdate:function(h){var b=h.options.title,N=h.titleBlock;b?(Pe.mergeIf(b,qr.global.title),N?(Xl.configure(h,N,b),N.options=b):Bl(h,b)):N&&(Xl.removeBox(h,N),delete h.titleBlock)}};for(var od in pc.filler=cd,pc.legend=Ju,pc.title=tc,kn.helpers=Pe,function(){function h(k,ne,he){var Me;return"string"==typeof k?(Me=parseInt(k,10),-1!==k.indexOf("%")&&(Me=Me/100*ne.parentNode[he])):Me=k,Me}function b(k){return null!=k&&"none"!==k}function N(k,ne,he){var Me=document.defaultView,Qe=Pe._getParentNode(k),Re=Me.getComputedStyle(k)[ne],ft=Me.getComputedStyle(Qe)[ne],wt=b(Re),It=b(ft),Cn=Number.POSITIVE_INFINITY;return wt||It?Math.min(wt?h(Re,k,he):Cn,It?h(ft,Qe,he):Cn):"none"}Pe.where=function(k,ne){if(Pe.isArray(k)&&Array.prototype.filter)return k.filter(ne);var he=[];return Pe.each(k,function(Me){ne(Me)&&he.push(Me)}),he},Pe.findIndex=Array.prototype.findIndex?function(k,ne,he){return k.findIndex(ne,he)}:function(k,ne,he){he=void 0===he?k:he;for(var Me=0,Qe=k.length;Me<Qe;++Me)if(ne.call(he,k[Me],Me,k))return Me;return-1},Pe.findNextWhere=function(k,ne,he){Pe.isNullOrUndef(he)&&(he=-1);for(var Me=he+1;Me<k.length;Me++){var Qe=k[Me];if(ne(Qe))return Qe}},Pe.findPreviousWhere=function(k,ne,he){Pe.isNullOrUndef(he)&&(he=k.length);for(var Me=he-1;Me>=0;Me--){var Qe=k[Me];if(ne(Qe))return Qe}},Pe.isNumber=function(k){return!isNaN(parseFloat(k))&&isFinite(k)},Pe.almostEquals=function(k,ne,he){return Math.abs(k-ne)<he},Pe.almostWhole=function(k,ne){var he=Math.round(k);return he-ne<=k&&he+ne>=k},Pe.max=function(k){return k.reduce(function(ne,he){return isNaN(he)?ne:Math.max(ne,he)},Number.NEGATIVE_INFINITY)},Pe.min=function(k){return k.reduce(function(ne,he){return isNaN(he)?ne:Math.min(ne,he)},Number.POSITIVE_INFINITY)},Pe.sign=Math.sign?function(k){return Math.sign(k)}:function(k){return 0==(k=+k)||isNaN(k)?k:k>0?1:-1},Pe.toRadians=function(k){return k*(Math.PI/180)},Pe.toDegrees=function(k){return k*(180/Math.PI)},Pe._decimalPlaces=function(k){if(Pe.isFinite(k)){for(var ne=1,he=0;Math.round(k*ne)/ne!==k;)ne*=10,he++;return he}},Pe.getAngleFromPoint=function(k,ne){var he=ne.x-k.x,Me=ne.y-k.y,Qe=Math.sqrt(he*he+Me*Me),Re=Math.atan2(Me,he);return Re<-.5*Math.PI&&(Re+=2*Math.PI),{angle:Re,distance:Qe}},Pe.distanceBetweenPoints=function(k,ne){return Math.sqrt(Math.pow(ne.x-k.x,2)+Math.pow(ne.y-k.y,2))},Pe.aliasPixel=function(k){return k%2==0?0:.5},Pe._alignPixel=function(k,ne,he){var Me=k.currentDevicePixelRatio,Qe=he/2;return Math.round((ne-Qe)*Me)/Me+Qe},Pe.splineCurve=function(k,ne,he,Me){var Qe=k.skip?ne:k,Re=ne,ft=he.skip?ne:he,wt=Math.sqrt(Math.pow(Re.x-Qe.x,2)+Math.pow(Re.y-Qe.y,2)),It=Math.sqrt(Math.pow(ft.x-Re.x,2)+Math.pow(ft.y-Re.y,2)),Cn=wt/(wt+It),er=It/(wt+It),sr=Me*(Cn=isNaN(Cn)?0:Cn),Dr=Me*(er=isNaN(er)?0:er);return{previous:{x:Re.x-sr*(ft.x-Qe.x),y:Re.y-sr*(ft.y-Qe.y)},next:{x:Re.x+Dr*(ft.x-Qe.x),y:Re.y+Dr*(ft.y-Qe.y)}}},Pe.EPSILON=Number.EPSILON||1e-14,Pe.splineCurveMonotone=function(k){var Me,Qe,Re,ft,It,Cn,er,sr,Dr,ne=(k||[]).map(function(oi){return{model:oi._model,deltaK:0,mK:0}}),he=ne.length;for(Me=0;Me<he;++Me)if(!(Re=ne[Me]).model.skip){if(Qe=Me>0?ne[Me-1]:null,(ft=Me<he-1?ne[Me+1]:null)&&!ft.model.skip){var wt=ft.model.x-Re.model.x;Re.deltaK=0!==wt?(ft.model.y-Re.model.y)/wt:0}Re.mK=!Qe||Qe.model.skip?Re.deltaK:!ft||ft.model.skip?Qe.deltaK:this.sign(Qe.deltaK)!==this.sign(Re.deltaK)?0:(Qe.deltaK+Re.deltaK)/2}for(Me=0;Me<he-1;++Me)if(ft=ne[Me+1],!(Re=ne[Me]).model.skip&&!ft.model.skip){if(Pe.almostEquals(Re.deltaK,0,this.EPSILON)){Re.mK=ft.mK=0;continue}It=Re.mK/Re.deltaK,Cn=ft.mK/Re.deltaK,!((sr=Math.pow(It,2)+Math.pow(Cn,2))<=9)&&(er=3/Math.sqrt(sr),Re.mK=It*er*Re.deltaK,ft.mK=Cn*er*Re.deltaK)}for(Me=0;Me<he;++Me)!(Re=ne[Me]).model.skip&&(ft=Me<he-1?ne[Me+1]:null,(Qe=Me>0?ne[Me-1]:null)&&!Qe.model.skip&&(Re.model.controlPointPreviousX=Re.model.x-(Dr=(Re.model.x-Qe.model.x)/3),Re.model.controlPointPreviousY=Re.model.y-Dr*Re.mK),ft&&!ft.model.skip&&(Re.model.controlPointNextX=Re.model.x+(Dr=(ft.model.x-Re.model.x)/3),Re.model.controlPointNextY=Re.model.y+Dr*Re.mK))},Pe.nextItem=function(k,ne,he){return he?ne>=k.length-1?k[0]:k[ne+1]:ne>=k.length-1?k[k.length-1]:k[ne+1]},Pe.previousItem=function(k,ne,he){return he?ne<=0?k[k.length-1]:k[ne-1]:ne<=0?k[0]:k[ne-1]},Pe.niceNum=function(k,ne){var he=Math.floor(Pe.log10(k)),Me=k/Math.pow(10,he);return(ne?Me<1.5?1:Me<3?2:Me<7?5:10:Me<=1?1:Me<=2?2:Me<=5?5:10)*Math.pow(10,he)},Pe.requestAnimFrame=typeof window>"u"?function(k){k()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(k){return window.setTimeout(k,1e3/60)},Pe.getRelativePosition=function(k,ne){var he,Me,Qe=k.originalEvent||k,Re=k.target||k.srcElement,ft=Re.getBoundingClientRect(),wt=Qe.touches;wt&&wt.length>0?(he=wt[0].clientX,Me=wt[0].clientY):(he=Qe.clientX,Me=Qe.clientY);var It=parseFloat(Pe.getStyle(Re,"padding-left")),Cn=parseFloat(Pe.getStyle(Re,"padding-top")),er=parseFloat(Pe.getStyle(Re,"padding-right")),sr=parseFloat(Pe.getStyle(Re,"padding-bottom")),oi=ft.bottom-ft.top-Cn-sr;return{x:he=Math.round((he-ft.left-It)/(ft.right-ft.left-It-er)*Re.width/ne.currentDevicePixelRatio),y:Me=Math.round((Me-ft.top-Cn)/oi*Re.height/ne.currentDevicePixelRatio)}},Pe.getConstraintWidth=function(k){return N(k,"max-width","clientWidth")},Pe.getConstraintHeight=function(k){return N(k,"max-height","clientHeight")},Pe._calculatePadding=function(k,ne,he){return(ne=Pe.getStyle(k,ne)).indexOf("%")>-1?he*parseInt(ne,10)/100:parseInt(ne,10)},Pe._getParentNode=function(k){var ne=k.parentNode;return ne&&"[object ShadowRoot]"===ne.toString()&&(ne=ne.host),ne},Pe.getMaximumWidth=function(k){var ne=Pe._getParentNode(k);if(!ne)return k.clientWidth;var he=ne.clientWidth,Re=he-Pe._calculatePadding(ne,"padding-left",he)-Pe._calculatePadding(ne,"padding-right",he),ft=Pe.getConstraintWidth(k);return isNaN(ft)?Re:Math.min(Re,ft)},Pe.getMaximumHeight=function(k){var ne=Pe._getParentNode(k);if(!ne)return k.clientHeight;var he=ne.clientHeight,Re=he-Pe._calculatePadding(ne,"padding-top",he)-Pe._calculatePadding(ne,"padding-bottom",he),ft=Pe.getConstraintHeight(k);return isNaN(ft)?Re:Math.min(Re,ft)},Pe.getStyle=function(k,ne){return k.currentStyle?k.currentStyle[ne]:document.defaultView.getComputedStyle(k,null).getPropertyValue(ne)},Pe.retinaScale=function(k,ne){var he=k.currentDevicePixelRatio=ne||typeof window<"u"&&window.devicePixelRatio||1;if(1!==he){var Me=k.canvas,Qe=k.height,Re=k.width;Me.height=Qe*he,Me.width=Re*he,k.ctx.scale(he,he),!Me.style.height&&!Me.style.width&&(Me.style.height=Qe+"px",Me.style.width=Re+"px")}},Pe.fontString=function(k,ne,he){return ne+" "+k+"px "+he},Pe.longestText=function(k,ne,he,Me){var Qe=(Me=Me||{}).data=Me.data||{},Re=Me.garbageCollect=Me.garbageCollect||[];Me.font!==ne&&(Qe=Me.data={},Re=Me.garbageCollect=[],Me.font=ne),k.font=ne;var It,Cn,er,sr,Dr,ft=0,wt=he.length;for(It=0;It<wt;It++)if(null!=(sr=he[It])&&!0!==Pe.isArray(sr))ft=Pe.measureText(k,Qe,Re,ft,sr);else if(Pe.isArray(sr))for(Cn=0,er=sr.length;Cn<er;Cn++)null!=(Dr=sr[Cn])&&!Pe.isArray(Dr)&&(ft=Pe.measureText(k,Qe,Re,ft,Dr));var oi=Re.length/2;if(oi>he.length){for(It=0;It<oi;It++)delete Qe[Re[It]];Re.splice(0,oi)}return ft},Pe.measureText=function(k,ne,he,Me,Qe){var Re=ne[Qe];return Re||(Re=ne[Qe]=k.measureText(Qe).width,he.push(Qe)),Re>Me&&(Me=Re),Me},Pe.numberOfLabelLines=function(k){var ne=1;return Pe.each(k,function(he){Pe.isArray(he)&&he.length>ne&&(ne=he.length)}),ne},Pe.color=Tt?function(k){return k instanceof CanvasGradient&&(k=qr.global.defaultColor),Tt(k)}:function(k){return console.error("Color.js not found!"),k},Pe.getHoverColor=function(k){return k instanceof CanvasPattern||k instanceof CanvasGradient?k:Pe.color(k).saturate(.5).darken(.1).rgbString()}}(),kn._adapters=Go,kn.Animation=dn,kn.animationService=Ge,kn.controllers=Bi,kn.DatasetController=Ai,kn.defaults=qr,kn.Element=nr,kn.elements=ss,kn.Interaction=vl,kn.layouts=Xl,kn.platform=Je,kn.plugins=en,kn.Scale=je,kn.scaleService=fi,kn.Ticks=Io,kn.Tooltip=Lc,kn.helpers.each(Hd,function(h,b){kn.scaleService.registerScaleType(b,h,h._defaults)}),pc)pc.hasOwnProperty(od)&&kn.plugins.register(pc[od]);kn.platform.initialize();var Ed=kn;return typeof window<"u"&&(window.Chart=kn),kn.Chart=kn,kn.Legend=pc.legend._element,kn.Title=pc.title._element,kn.pluginService=kn.plugins,kn.PluginBase=kn.Element.extend({}),kn.canvasHelpers=kn.helpers.canvas,kn.layoutService=kn.layouts,kn.LinearScaleBase=Fs,kn.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],function(h){kn[h]=function(b,N){return new kn(b,kn.helpers.merge(N||{},{type:h.charAt(0).toLowerCase()+h.slice(1)}))}}),Ed}(function(){try{return s(16738)}catch{}}())},82885:(E,C)=>{var r;!function(){"use strict";var a={}.hasOwnProperty;function u(){for(var e=[],f=0;f<arguments.length;f++){var m=arguments[f];if(m){var T=typeof m;if("string"===T||"number"===T)e.push(m);else if(Array.isArray(m)){if(m.length){var M=u.apply(null,m);M&&e.push(M)}}else if("object"===T){if(m.toString!==Object.prototype.toString&&!m.toString.toString().includes("[native code]")){e.push(m.toString());continue}for(var w in m)a.call(m,w)&&m[w]&&e.push(w)}}}return e.join(" ")}E.exports?(u.default=u,E.exports=u):void 0!==(r=function(){return u}.apply(C,[]))&&(E.exports=r)}()},2665:E=>{E.exports=function(s,r){for(var a=[],c=0;c<s.length;c++){var u=r(s[c],c);C(u)?a.push.apply(a,u):a.push(u)}return a};var C=Array.isArray||function(s){return"[object Array]"===Object.prototype.toString.call(s)}},96967:(E,C,s)=>{"use strict";var r=s(35311),a={"text/plain":"Text","text/html":"Url",default:"Text"};E.exports=function e(f,m){var T,M,w,D,U,W,$=!1;m||(m={}),T=m.debug||!1;try{if(w=r(),D=document.createRange(),U=document.getSelection(),(W=document.createElement("span")).textContent=f,W.ariaHidden="true",W.style.all="unset",W.style.position="fixed",W.style.top=0,W.style.clip="rect(0, 0, 0, 0)",W.style.whiteSpace="pre",W.style.webkitUserSelect="text",W.style.MozUserSelect="text",W.style.msUserSelect="text",W.style.userSelect="text",W.addEventListener("copy",function(F){F.stopPropagation(),m.format&&(F.preventDefault(),typeof F.clipboardData>"u"?(T&&console.warn("unable to use e.clipboardData"),T&&console.warn("trying IE specific stuff"),window.clipboardData.clearData(),window.clipboardData.setData(a[m.format]||a.default,f)):(F.clipboardData.clearData(),F.clipboardData.setData(m.format,f))),m.onCopy&&(F.preventDefault(),m.onCopy(F.clipboardData))}),document.body.appendChild(W),D.selectNodeContents(W),U.addRange(D),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");$=!0}catch(F){T&&console.error("unable to copy using execCommand: ",F),T&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(m.format||"text",f),m.onCopy&&m.onCopy(window.clipboardData),$=!0}catch(X){T&&console.error("unable to copy using clipboardData: ",X),T&&console.error("falling back to prompt"),M=function u(f){var m=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return f.replace(/#{\s*key\s*}/g,m)}("message"in m?m.message:"Copy to clipboard: #{key}, Enter"),window.prompt(M,f)}}finally{U&&("function"==typeof U.removeRange?U.removeRange(D):U.removeAllRanges()),W&&document.body.removeChild(W),w()}return $}},43987:(E,C,s)=>{"use strict";var r=s(75242);E.exports=r},99556:(E,C,s)=>{"use strict";var r=s(10323);E.exports=r},39287:(E,C,s)=>{"use strict";var r=s(8748);E.exports=r},25272:(E,C,s)=>{"use strict";var r=s(71873);E.exports=r},54450:(E,C,s)=>{"use strict";var r=s(19095);E.exports=r},39557:(E,C,s)=>{"use strict";var r=s(52049);E.exports=r},61611:(E,C,s)=>{"use strict";var r=s(87054);E.exports=r},4412:(E,C,s)=>{"use strict";var r=s(30252);E.exports=r},22549:(E,C,s)=>{"use strict";var r=s(45284);E.exports=r},47646:(E,C,s)=>{"use strict";var r=s(70157);E.exports=r},78663:(E,C,s)=>{"use strict";var r=s(640);s(41554),E.exports=r},48498:(E,C,s)=>{"use strict";var r=s(50320);E.exports=r},4922:(E,C,s)=>{"use strict";var r=s(93006);E.exports=r},95190:(E,C,s)=>{"use strict";var r=s(36226);E.exports=r},78525:(E,C,s)=>{"use strict";var r=s(21968);E.exports=r},21064:(E,C,s)=>{"use strict";var r=s(87259);E.exports=r},65641:(E,C,s)=>{"use strict";var r=s(62021);E.exports=r},21693:(E,C,s)=>{"use strict";var r=s(57682);E.exports=r},88907:(E,C,s)=>{"use strict";var r=s(94222);E.exports=r},41432:(E,C,s)=>{"use strict";var r=s(1162);E.exports=r},7398:(E,C,s)=>{"use strict";var r=s(82805);E.exports=r},67221:(E,C,s)=>{"use strict";var r=s(26498);s(68333),E.exports=r},67447:(E,C,s)=>{"use strict";var r=s(44850);E.exports=r},58811:(E,C,s)=>{"use strict";var r=s(9634);E.exports=r},19573:(E,C,s)=>{"use strict";var r=s(96551);s(43548),s(55461),s(5737),s(71985),E.exports=r},10226:(E,C,s)=>{"use strict";var r=s(98908);E.exports=r},56378:(E,C,s)=>{"use strict";var r=s(55434);E.exports=r},74771:(E,C,s)=>{"use strict";s(3934),s(261);var r=s(13544);E.exports=r.Array.from},8412:(E,C,s)=>{"use strict";s(2862);var r=s(13544);E.exports=r.Array.isArray},77377:(E,C,s)=>{"use strict";s(1625);var r=s(97911);E.exports=r("Array").concat},399:(E,C,s)=>{"use strict";s(1285),s(17221);var r=s(97911);E.exports=r("Array").entries},66933:(E,C,s)=>{"use strict";s(70466);var r=s(97911);E.exports=r("Array").every},9504:(E,C,s)=>{"use strict";s(24990);var r=s(97911);E.exports=r("Array").fill},82168:(E,C,s)=>{"use strict";s(56534);var r=s(97911);E.exports=r("Array").filter},65618:(E,C,s)=>{"use strict";s(12773);var r=s(97911);E.exports=r("Array").findIndex},9186:(E,C,s)=>{"use strict";s(60326);var r=s(97911);E.exports=r("Array").find},98812:(E,C,s)=>{"use strict";s(98792);var r=s(97911);E.exports=r("Array").forEach},58479:(E,C,s)=>{"use strict";s(77059);var r=s(97911);E.exports=r("Array").includes},43207:(E,C,s)=>{"use strict";s(2795);var r=s(97911);E.exports=r("Array").indexOf},33195:(E,C,s)=>{"use strict";s(1285),s(17221);var r=s(97911);E.exports=r("Array").keys},63033:(E,C,s)=>{"use strict";s(74926);var r=s(97911);E.exports=r("Array").lastIndexOf},5736:(E,C,s)=>{"use strict";s(88119);var r=s(97911);E.exports=r("Array").map},7909:(E,C,s)=>{"use strict";s(93870);var r=s(97911);E.exports=r("Array").push},7198:(E,C,s)=>{"use strict";s(46250);var r=s(97911);E.exports=r("Array").reduce},84302:(E,C,s)=>{"use strict";s(32836);var r=s(97911);E.exports=r("Array").reverse},86693:(E,C,s)=>{"use strict";s(72999);var r=s(97911);E.exports=r("Array").slice},24273:(E,C,s)=>{"use strict";s(50733);var r=s(97911);E.exports=r("Array").some},45974:(E,C,s)=>{"use strict";s(93639);var r=s(97911);E.exports=r("Array").sort},68012:(E,C,s)=>{"use strict";s(63117);var r=s(97911);E.exports=r("Array").splice},46332:(E,C,s)=>{"use strict";s(1285),s(17221);var r=s(97911);E.exports=r("Array").values},42618:(E,C,s)=>{"use strict";s(34699);var r=s(13544);E.exports=r.Date.now},97724:(E,C,s)=>{"use strict";s(33379);var r=s(97911);E.exports=r("Function").bind},63791:(E,C,s)=>{"use strict";s(1285),s(3934);var r=s(34014);E.exports=r},69029:(E,C,s)=>{"use strict";var r=s(23336),a=s(97724),c=Function.prototype;E.exports=function(u){var e=u.bind;return u===c||r(c,u)&&e===c.bind?a:e}},28924:(E,C,s)=>{"use strict";var r=s(23336),a=s(77377),c=Array.prototype;E.exports=function(u){var e=u.concat;return u===c||r(c,u)&&e===c.concat?a:e}},98709:(E,C,s)=>{"use strict";var r=s(23336),a=s(66933),c=Array.prototype;E.exports=function(u){var e=u.every;return u===c||r(c,u)&&e===c.every?a:e}},65991:(E,C,s)=>{"use strict";var r=s(23336),a=s(9504),c=Array.prototype;E.exports=function(u){var e=u.fill;return u===c||r(c,u)&&e===c.fill?a:e}},64158:(E,C,s)=>{"use strict";var r=s(23336),a=s(82168),c=Array.prototype;E.exports=function(u){var e=u.filter;return u===c||r(c,u)&&e===c.filter?a:e}},91799:(E,C,s)=>{"use strict";var r=s(23336),a=s(65618),c=Array.prototype;E.exports=function(u){var e=u.findIndex;return u===c||r(c,u)&&e===c.findIndex?a:e}},26155:(E,C,s)=>{"use strict";var r=s(23336),a=s(9186),c=Array.prototype;E.exports=function(u){var e=u.find;return u===c||r(c,u)&&e===c.find?a:e}},33758:(E,C,s)=>{"use strict";var r=s(23336),a=s(58479),c=s(85136),u=Array.prototype,e=String.prototype;E.exports=function(f){var m=f.includes;return f===u||r(u,f)&&m===u.includes?a:"string"==typeof f||f===e||r(e,f)&&m===e.includes?c:m}},7592:(E,C,s)=>{"use strict";var r=s(23336),a=s(43207),c=Array.prototype;E.exports=function(u){var e=u.indexOf;return u===c||r(c,u)&&e===c.indexOf?a:e}},17480:(E,C,s)=>{"use strict";var r=s(23336),a=s(63033),c=Array.prototype;E.exports=function(u){var e=u.lastIndexOf;return u===c||r(c,u)&&e===c.lastIndexOf?a:e}},20681:(E,C,s)=>{"use strict";var r=s(23336),a=s(5736),c=Array.prototype;E.exports=function(u){var e=u.map;return u===c||r(c,u)&&e===c.map?a:e}},801:(E,C,s)=>{"use strict";var r=s(23336),a=s(7909),c=Array.prototype;E.exports=function(u){var e=u.push;return u===c||r(c,u)&&e===c.push?a:e}},90949:(E,C,s)=>{"use strict";var r=s(23336),a=s(7198),c=Array.prototype;E.exports=function(u){var e=u.reduce;return u===c||r(c,u)&&e===c.reduce?a:e}},99316:(E,C,s)=>{"use strict";var r=s(23336),a=s(96302),c=String.prototype;E.exports=function(u){var e=u.repeat;return"string"==typeof u||u===c||r(c,u)&&e===c.repeat?a:e}},62212:(E,C,s)=>{"use strict";var r=s(23336),a=s(84302),c=Array.prototype;E.exports=function(u){var e=u.reverse;return u===c||r(c,u)&&e===c.reverse?a:e}},49073:(E,C,s)=>{"use strict";var r=s(23336),a=s(86693),c=Array.prototype;E.exports=function(u){var e=u.slice;return u===c||r(c,u)&&e===c.slice?a:e}},24146:(E,C,s)=>{"use strict";var r=s(23336),a=s(24273),c=Array.prototype;E.exports=function(u){var e=u.some;return u===c||r(c,u)&&e===c.some?a:e}},40104:(E,C,s)=>{"use strict";var r=s(23336),a=s(45974),c=Array.prototype;E.exports=function(u){var e=u.sort;return u===c||r(c,u)&&e===c.sort?a:e}},3555:(E,C,s)=>{"use strict";var r=s(23336),a=s(68012),c=Array.prototype;E.exports=function(u){var e=u.splice;return u===c||r(c,u)&&e===c.splice?a:e}},42475:(E,C,s)=>{"use strict";var r=s(23336),a=s(98720),c=String.prototype;E.exports=function(u){var e=u.startsWith;return"string"==typeof u||u===c||r(c,u)&&e===c.startsWith?a:e}},65786:(E,C,s)=>{"use strict";var r=s(23336),a=s(75998),c=String.prototype;E.exports=function(u){var e=u.trim;return"string"==typeof u||u===c||r(c,u)&&e===c.trim?a:e}},66306:(E,C,s)=>{"use strict";s(75071);var r=s(13544),a=s(2543);r.JSON||(r.JSON={stringify:JSON.stringify}),E.exports=function(u,e,f){return a(r.JSON.stringify,null,arguments)}},31845:(E,C,s)=>{"use strict";s(1285),s(85140),s(17221),s(3934);var r=s(13544);E.exports=r.Map},44168:(E,C,s)=>{"use strict";s(67234);var r=s(13544);E.exports=r.Object.assign},25852:(E,C,s)=>{"use strict";s(86516);var a=s(13544).Object;E.exports=function(u,e){return a.create(u,e)}},24457:(E,C,s)=>{"use strict";s(36255);var a=s(13544).Object,c=E.exports=function(e,f){return a.defineProperties(e,f)};a.defineProperties.sham&&(c.sham=!0)},99671:(E,C,s)=>{"use strict";s(84468);var a=s(13544).Object,c=E.exports=function(e,f,m){return a.defineProperty(e,f,m)};a.defineProperty.sham&&(c.sham=!0)},38007:(E,C,s)=>{"use strict";s(86627);var a=s(13544).Object,c=E.exports=function(e,f){return a.getOwnPropertyDescriptor(e,f)};a.getOwnPropertyDescriptor.sham&&(c.sham=!0)},57432:(E,C,s)=>{"use strict";s(78275);var r=s(13544);E.exports=r.Object.getOwnPropertyDescriptors},36541:(E,C,s)=>{"use strict";s(56728);var r=s(13544);E.exports=r.Object.getOwnPropertySymbols},17303:(E,C,s)=>{"use strict";s(31193);var r=s(13544);E.exports=r.Object.getPrototypeOf},62149:(E,C,s)=>{"use strict";s(56557);var r=s(13544);E.exports=r.Object.keys},86537:(E,C,s)=>{"use strict";s(17971);var r=s(13544);E.exports=r.Object.setPrototypeOf},79553:(E,C,s)=>{"use strict";s(88923);var r=s(13544);E.exports=r.Object.values},80092:(E,C,s)=>{"use strict";s(10901),s(1285),s(17221),s(66793),s(84798),s(98857),s(30185),s(3934);var r=s(13544);E.exports=r.Promise},472:(E,C,s)=>{"use strict";s(19539);var r=s(13544);E.exports=r.Reflect.construct},4678:(E,C,s)=>{"use strict";s(60851);var r=s(13544);E.exports=r.Reflect.get},85136:(E,C,s)=>{"use strict";s(97764);var r=s(97911);E.exports=r("String").includes},96302:(E,C,s)=>{"use strict";s(3588);var r=s(97911);E.exports=r("String").repeat},98720:(E,C,s)=>{"use strict";s(24655);var r=s(97911);E.exports=r("String").startsWith},75998:(E,C,s)=>{"use strict";s(90451);var r=s(97911);E.exports=r("String").trim},61697:(E,C,s)=>{"use strict";s(1625),s(17221),s(56728),s(16426),s(1172),s(99579),s(41258),s(2383),s(44339),s(64776),s(88215),s(65389),s(12733),s(97977),s(59792),s(60242),s(26291),s(32300),s(63603),s(44864);var r=s(13544);E.exports=r.Symbol},42497:(E,C,s)=>{"use strict";s(1285),s(17221),s(3934),s(2383);var r=s(89734);E.exports=r.f("iterator")},50681:(E,C,s)=>{"use strict";s(68154),s(59792);var r=s(89734);E.exports=r.f("toPrimitive")},31236:(E,C,s)=>{"use strict";E.exports=s(58044)},63811:(E,C,s)=>{"use strict";E.exports=s(99692)},44948:(E,C,s)=>{"use strict";E.exports=s(61483)},96471:(E,C,s)=>{"use strict";E.exports=s(46815)},41171:(E,C,s)=>{"use strict";E.exports=s(47194)},62005:(E,C,s)=>{"use strict";E.exports=s(32944)},42346:(E,C,s)=>{"use strict";E.exports=s(26421)},24329:(E,C,s)=>{"use strict";E.exports=s(15123)},2793:(E,C,s)=>{"use strict";E.exports=s(49745)},88819:(E,C,s)=>{"use strict";E.exports=s(65861)},55912:(E,C,s)=>{"use strict";E.exports=s(63816)},73875:(E,C,s)=>{"use strict";var r=s(43987);E.exports=r},91700:(E,C,s)=>{"use strict";var r=s(99556);E.exports=r},70589:(E,C,s)=>{"use strict";var r=s(39287);E.exports=r},71432:(E,C,s)=>{"use strict";var r=s(25272);E.exports=r},73712:(E,C,s)=>{"use strict";var r=s(54450);E.exports=r},58044:(E,C,s)=>{"use strict";var r=s(39557);E.exports=r},55451:(E,C,s)=>{"use strict";var r=s(61611);E.exports=r},99692:(E,C,s)=>{"use strict";var r=s(4412);E.exports=r},61483:(E,C,s)=>{"use strict";var r=s(22549);E.exports=r},46815:(E,C,s)=>{"use strict";var r=s(47646);E.exports=r},28296:(E,C,s)=>{"use strict";var r=s(78663);s(78271),s(60854),s(10509),s(30887),s(54547),s(68996),s(1530),s(60176),s(41688),s(92847),s(17316),s(58786),s(51943),s(12783),s(69773),s(22337),s(40199),s(69046),s(84131),E.exports=r},96973:(E,C,s)=>{"use strict";var r=s(48498);E.exports=r},47194:(E,C,s)=>{"use strict";var r=s(4922);E.exports=r},56805:(E,C,s)=>{"use strict";var r=s(95190);E.exports=r},32944:(E,C,s)=>{"use strict";var r=s(78525);E.exports=r},70729:(E,C,s)=>{"use strict";var r=s(21064);E.exports=r},48299:(E,C,s)=>{"use strict";var r=s(65641);E.exports=r},33969:(E,C,s)=>{"use strict";var r=s(21693);E.exports=r},26421:(E,C,s)=>{"use strict";var r=s(88907);E.exports=r},37785:(E,C,s)=>{"use strict";var r=s(41432);E.exports=r},15123:(E,C,s)=>{"use strict";var r=s(7398);E.exports=r},49745:(E,C,s)=>{"use strict";var r=s(67221);s(67670),s(61127),s(93114),s(45975),E.exports=r},29044:(E,C,s)=>{"use strict";var r=s(67447);E.exports=r},20611:(E,C,s)=>{"use strict";var r=s(58811);E.exports=r},65861:(E,C,s)=>{"use strict";var r=s(19573);s(70337),s(44388),s(87097),s(90212),s(61652),s(90791),s(29559),s(93770),s(47743),E.exports=r},63816:(E,C,s)=>{"use strict";var r=s(10226);E.exports=r},72378:(E,C,s)=>{"use strict";var r=s(56378);E.exports=r},61812:(E,C,s)=>{"use strict";var r=s(52208),a=s(7378),c=TypeError;E.exports=function(u){if(r(u))return u;throw c(a(u)+" is not a function")}},54356:(E,C,s)=>{"use strict";var r=s(81177),a=s(7378),c=TypeError;E.exports=function(u){if(r(u))return u;throw c(a(u)+" is not a constructor")}},64902:(E,C,s)=>{"use strict";var r=s(7378);E.exports=function(a){if("object"==typeof a&&"size"in a&&"has"in a&&"get"in a&&"set"in a&&"delete"in a&&"entries"in a)return a;throw TypeError(r(a)+" is not a map")}},93221:(E,C,s)=>{"use strict";var r=s(52208),a=String,c=TypeError;E.exports=function(u){if("object"==typeof u||r(u))return u;throw c("Can't set "+a(u)+" as a prototype")}},82196:E=>{"use strict";E.exports=function(){}},54849:(E,C,s)=>{"use strict";var r=s(23336),a=TypeError;E.exports=function(c,u){if(r(u,c))return c;throw a("Incorrect invocation")}},64562:(E,C,s)=>{"use strict";var r=s(77293),a=String,c=TypeError;E.exports=function(u){if(r(u))return u;throw c(a(u)+" is not an object")}},76318:(E,C,s)=>{"use strict";var r=s(55756);E.exports=r(function(){if("function"==typeof ArrayBuffer){var a=new ArrayBuffer(8);Object.isExtensible(a)&&Object.defineProperty(a,"a",{value:8})}})},35277:(E,C,s)=>{"use strict";var r=s(70267),a=s(19401),c=s(6381);E.exports=function(e){for(var f=r(this),m=c(f),T=arguments.length,M=a(T>1?arguments[1]:void 0,m),w=T>2?arguments[2]:void 0,D=void 0===w?m:a(w,m);D>M;)f[M++]=e;return f}},8366:(E,C,s)=>{"use strict";var r=s(68607).forEach,c=s(33620)("forEach");E.exports=c?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},51923:(E,C,s)=>{"use strict";var r=s(76781),a=s(25401),c=s(70267),u=s(93463),e=s(39918),f=s(81177),m=s(6381),T=s(46751),M=s(88055),w=s(34014),D=Array;E.exports=function(W){var $=c(W),J=f(this),F=arguments.length,X=F>1?arguments[1]:void 0,de=void 0!==X;de&&(X=r(X,F>2?arguments[2]:void 0));var se,fe,Te,$e,ge,Et,V=w($),ce=0;if(!V||this===D&&e(V))for(se=m($),fe=J?new this(se):D(se);se>ce;ce++)Et=de?X($[ce],ce):$[ce],T(fe,ce,Et);else for(ge=($e=M($,V)).next,fe=J?new this:[];!(Te=a(ge,$e)).done;ce++)Et=de?u($e,X,[Te.value,ce],!0):Te.value,T(fe,ce,Et);return fe.length=ce,fe}},95171:(E,C,s)=>{"use strict";var r=s(81010),a=s(19401),c=s(6381),u=function(e){return function(f,m,T){var U,M=r(f),w=c(M),D=a(T,w);if(e&&m!=m){for(;w>D;)if((U=M[D++])!=U)return!0}else for(;w>D;D++)if((e||D in M)&&M[D]===m)return e||D||0;return!e&&-1}};E.exports={includes:u(!0),indexOf:u(!1)}},68607:(E,C,s)=>{"use strict";var r=s(76781),a=s(23634),c=s(20973),u=s(70267),e=s(6381),f=s(2103),m=a([].push),T=function(M){var w=1===M,D=2===M,U=3===M,W=4===M,$=6===M,J=7===M,F=5===M||$;return function(X,de,V,ce){for(var ct,qe,se=u(X),fe=c(se),Te=r(de,V),$e=e(fe),ge=0,Et=ce||f,ot=w?Et(X,$e):D||J?Et(X,0):void 0;$e>ge;ge++)if((F||ge in fe)&&(qe=Te(ct=fe[ge],ge,se),M))if(w)ot[ge]=qe;else if(qe)switch(M){case 3:return!0;case 5:return ct;case 6:return ge;case 2:m(ot,ct)}else switch(M){case 4:return!1;case 7:m(ot,ct)}return $?-1:U||W?W:ot}};E.exports={forEach:T(0),map:T(1),filter:T(2),some:T(3),every:T(4),find:T(5),findIndex:T(6),filterReject:T(7)}},78375:(E,C,s)=>{"use strict";var r=s(2543),a=s(81010),c=s(33912),u=s(6381),e=s(33620),f=Math.min,m=[].lastIndexOf,T=!!m&&1/[1].lastIndexOf(1,-0)<0,M=e("lastIndexOf");E.exports=T||!M?function(U){if(T)return r(m,this,arguments)||0;var W=a(this),$=u(W),J=$-1;for(arguments.length>1&&(J=f(J,c(arguments[1]))),J<0&&(J=$+J);J>=0;J--)if(J in W&&W[J]===U)return J||0;return-1}:m},95913:(E,C,s)=>{"use strict";var r=s(55756),a=s(91840),c=s(63556),u=a("species");E.exports=function(e){return c>=51||!r(function(){var f=[];return(f.constructor={})[u]=function(){return{foo:1}},1!==f[e](Boolean).foo})}},33620:(E,C,s)=>{"use strict";var r=s(55756);E.exports=function(a,c){var u=[][a];return!!u&&r(function(){u.call(null,c||function(){return 1},1)})}},88908:(E,C,s)=>{"use strict";var r=s(61812),a=s(70267),c=s(20973),u=s(6381),e=TypeError,f=function(m){return function(T,M,w,D){r(M);var U=a(T),W=c(U),$=u(U),J=m?$-1:0,F=m?-1:1;if(w<2)for(;;){if(J in W){D=W[J],J+=F;break}if(J+=F,m?J<0:$<=J)throw e("Reduce of empty array with no initial value")}for(;m?J>=0:$>J;J+=F)J in W&&(D=M(D,W[J],J,U));return D}};E.exports={left:f(!1),right:f(!0)}},54716:(E,C,s)=>{"use strict";var r=s(49642),a=s(89735),c=TypeError,u=Object.getOwnPropertyDescriptor,e=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(f){return f instanceof TypeError}}();E.exports=e?function(f,m){if(a(f)&&!u(f,"length").writable)throw c("Cannot set read only .length");return f.length=m}:function(f,m){return f.length=m}},8681:(E,C,s)=>{"use strict";var r=s(19401),a=s(6381),c=s(46751),u=Array,e=Math.max;E.exports=function(f,m,T){for(var M=a(f),w=r(m,M),D=r(void 0===T?M:T,M),U=u(e(D-w,0)),W=0;w<D;w++,W++)c(U,W,f[w]);return U.length=W,U}},37591:(E,C,s)=>{"use strict";var r=s(23634);E.exports=r([].slice)},84865:(E,C,s)=>{"use strict";var r=s(8681),a=Math.floor,c=function(f,m){var T=f.length,M=a(T/2);return T<8?u(f,m):e(f,c(r(f,0,M),m),c(r(f,M),m),m)},u=function(f,m){for(var w,D,T=f.length,M=1;M<T;){for(D=M,w=f[M];D&&m(f[D-1],w)>0;)f[D]=f[--D];D!==M++&&(f[D]=w)}return f},e=function(f,m,T,M){for(var w=m.length,D=T.length,U=0,W=0;U<w||W<D;)f[U+W]=U<w&&W<D?M(m[U],T[W])<=0?m[U++]:T[W++]:U<w?m[U++]:T[W++];return f};E.exports=c},48045:(E,C,s)=>{"use strict";var r=s(89735),a=s(81177),c=s(77293),e=s(91840)("species"),f=Array;E.exports=function(m){var T;return r(m)&&(a(T=m.constructor)&&(T===f||r(T.prototype))||c(T)&&null===(T=T[e]))&&(T=void 0),void 0===T?f:T}},2103:(E,C,s)=>{"use strict";var r=s(48045);E.exports=function(a,c){return new(r(a))(0===c?0:c)}},93463:(E,C,s)=>{"use strict";var r=s(64562),a=s(40798);E.exports=function(c,u,e,f){try{return f?u(r(e)[0],e[1]):u(e)}catch(m){a(c,"throw",m)}}},49458:E=>{"use strict";E.exports=function(C,s){return 1===s?function(r,a){return r[C](a)}:function(r,a,c){return r[C](a,c)}}},5253:(E,C,s)=>{"use strict";var a=s(91840)("iterator"),c=!1;try{var u=0,e={next:function(){return{done:!!u++}},return:function(){c=!0}};e[a]=function(){return this},Array.from(e,function(){throw 2})}catch{}E.exports=function(f,m){try{if(!m&&!c)return!1}catch{return!1}var T=!1;try{var M={};M[a]=function(){return{next:function(){return{done:T=!0}}}},f(M)}catch{}return T}},49806:(E,C,s)=>{"use strict";var r=s(23634),a=r({}.toString),c=r("".slice);E.exports=function(u){return c(a(u),8,-1)}},35329:(E,C,s)=>{"use strict";var r=s(5552),a=s(52208),c=s(49806),e=s(91840)("toStringTag"),f=Object,m="Arguments"===c(function(){return arguments}());E.exports=r?c:function(M){var w,D,U;return void 0===M?"Undefined":null===M?"Null":"string"==typeof(D=function(M,w){try{return M[w]}catch{}}(w=f(M),e))?D:m?c(w):"Object"===(U=c(w))&&a(w.callee)?"Arguments":U}},83483:(E,C,s)=>{"use strict";var r=s(76781),a=s(25401),c=s(61812),u=s(54356),e=s(43550),f=s(41605),m=[].push;E.exports=function(M){var U,W,$,J,w=arguments.length,D=w>1?arguments[1]:void 0;return u(this),(U=void 0!==D)&&c(D),e(M)?new this:(W=[],U?($=0,J=r(D,w>2?arguments[2]:void 0),f(M,function(F){a(m,W,J(F,$++))})):f(M,m,{that:W}),new this(W))}},13067:(E,C,s)=>{"use strict";var r=s(37591);E.exports=function(){return new this(r(arguments))}},26650:(E,C,s)=>{"use strict";var r=s(83272),a=s(1707),c=s(84604),u=s(76781),e=s(54849),f=s(43550),m=s(41605),T=s(79077),M=s(28738),w=s(58014),D=s(49642),U=s(57867).fastKey,W=s(91093),$=W.set,J=W.getterFor;E.exports={getConstructor:function(F,X,de,V){var ce=F(function(ge,Et){e(ge,se),$(ge,{type:X,index:r(null),first:void 0,last:void 0,size:0}),D||(ge.size=0),f(Et)||m(Et,ge[V],{that:ge,AS_ENTRIES:de})}),se=ce.prototype,fe=J(X),Te=function(ge,Et,ot){var He,We,ct=fe(ge),qe=$e(ge,Et);return qe?qe.value=ot:(ct.last=qe={index:We=U(Et,!0),key:Et,value:ot,previous:He=ct.last,next:void 0,removed:!1},ct.first||(ct.first=qe),He&&(He.next=qe),D?ct.size++:ge.size++,"F"!==We&&(ct.index[We]=qe)),ge},$e=function(ge,Et){var qe,ot=fe(ge),ct=U(Et);if("F"!==ct)return ot.index[ct];for(qe=ot.first;qe;qe=qe.next)if(qe.key===Et)return qe};return c(se,{clear:function(){for(var ot=fe(this),ct=ot.index,qe=ot.first;qe;)qe.removed=!0,qe.previous&&(qe.previous=qe.previous.next=void 0),delete ct[qe.index],qe=qe.next;ot.first=ot.last=void 0,D?ot.size=0:this.size=0},delete:function(ge){var ot=fe(this),ct=$e(this,ge);if(ct){var qe=ct.next,He=ct.previous;delete ot.index[ct.index],ct.removed=!0,He&&(He.next=qe),qe&&(qe.previous=He),ot.first===ct&&(ot.first=qe),ot.last===ct&&(ot.last=He),D?ot.size--:this.size--}return!!ct},forEach:function(Et){for(var qe,ot=fe(this),ct=u(Et,arguments.length>1?arguments[1]:void 0);qe=qe?qe.next:ot.first;)for(ct(qe.value,qe.key,this);qe&&qe.removed;)qe=qe.previous},has:function(Et){return!!$e(this,Et)}}),c(se,de?{get:function(Et){var ot=$e(this,Et);return ot&&ot.value},set:function(Et,ot){return Te(this,0===Et?0:Et,ot)}}:{add:function(Et){return Te(this,Et=0===Et?0:Et,Et)}}),D&&a(se,"size",{configurable:!0,get:function(){return fe(this).size}}),ce},setStrong:function(F,X,de){var V=X+" Iterator",ce=J(X),se=J(V);T(F,X,function(fe,Te){$(this,{type:V,target:fe,state:ce(fe),kind:Te,last:void 0})},function(){for(var fe=se(this),Te=fe.kind,$e=fe.last;$e&&$e.removed;)$e=$e.previous;return fe.target&&(fe.last=$e=$e?$e.next:fe.state.first)?M("keys"===Te?$e.key:"values"===Te?$e.value:[$e.key,$e.value],!1):(fe.target=void 0,M(void 0,!0))},de?"entries":"values",!de,!0),w(X)}}},85116:(E,C,s)=>{"use strict";var r=s(90513),a=s(70009),c=s(57867),u=s(55756),e=s(65162),f=s(41605),m=s(54849),T=s(52208),M=s(77293),w=s(43550),D=s(85681),U=s(48011).f,W=s(68607).forEach,$=s(49642),J=s(91093),F=J.set,X=J.getterFor;E.exports=function(de,V,ce){var ot,se=-1!==de.indexOf("Map"),fe=-1!==de.indexOf("Weak"),Te=se?"set":"add",$e=a[de],ge=$e&&$e.prototype,Et={};if($&&T($e)&&(fe||ge.forEach&&!u(function(){(new $e).entries().next()}))){var ct=(ot=V(function(He,We){F(m(He,ct),{type:de,collection:new $e}),w(We)||f(We,He[Te],{that:He,AS_ENTRIES:se})})).prototype,qe=X(de);W(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(He){var We="add"===He||"set"===He;He in ge&&(!fe||"clear"!==He)&&e(ct,He,function(Le,Pt){var it=qe(this).collection;if(!We&&fe&&!M(Le))return"get"===He&&void 0;var Xt=it[He](0===Le?0:Le,Pt);return We?this:Xt})}),fe||U(ct,"size",{configurable:!0,get:function(){return qe(this).collection.size}})}else ot=ce.getConstructor(V,de,se,Te),c.enable();return D(ot,de,!1,!0),Et[de]=ot,r({global:!0,forced:!0},Et),fe||ce.setStrong(ot,de,se),ot}},65031:(E,C,s)=>{"use strict";var r=s(80112),a=s(59823),c=s(25525),u=s(48011);E.exports=function(e,f,m){for(var T=a(f),M=u.f,w=c.f,D=0;D<T.length;D++){var U=T[D];!r(e,U)&&(!m||!r(m,U))&&M(e,U,w(f,U))}}},79668:(E,C,s)=>{"use strict";var a=s(91840)("match");E.exports=function(c){var u=/./;try{"/./"[c](u)}catch{try{return u[a]=!1,"/./"[c](u)}catch{}}return!1}},37112:(E,C,s)=>{"use strict";var r=s(55756);E.exports=!r(function(){function a(){}return a.prototype.constructor=null,Object.getPrototypeOf(new a)!==a.prototype})},28738:E=>{"use strict";E.exports=function(C,s){return{value:C,done:s}}},65162:(E,C,s)=>{"use strict";var r=s(49642),a=s(48011),c=s(51361);E.exports=r?function(u,e,f){return a.f(u,e,c(1,f))}:function(u,e,f){return u[e]=f,u}},51361:E=>{"use strict";E.exports=function(C,s){return{enumerable:!(1&C),configurable:!(2&C),writable:!(4&C),value:s}}},46751:(E,C,s)=>{"use strict";var r=s(62939),a=s(48011),c=s(51361);E.exports=function(u,e,f){var m=r(e);m in u?a.f(u,m,c(0,f)):u[m]=f}},1707:(E,C,s)=>{"use strict";var r=s(48011);E.exports=function(a,c,u){return r.f(a,c,u)}},42915:(E,C,s)=>{"use strict";var r=s(65162);E.exports=function(a,c,u,e){return e&&e.enumerable?a[c]=u:r(a,c,u),a}},84604:(E,C,s)=>{"use strict";var r=s(42915);E.exports=function(a,c,u){for(var e in c)u&&u.unsafe&&a[e]?a[e]=c[e]:r(a,e,c[e],u);return a}},34056:(E,C,s)=>{"use strict";var r=s(70009),a=Object.defineProperty;E.exports=function(c,u){try{a(r,c,{value:u,configurable:!0,writable:!0})}catch{r[c]=u}return u}},67236:(E,C,s)=>{"use strict";var r=s(7378),a=TypeError;E.exports=function(c,u){if(!delete c[u])throw a("Cannot delete property "+r(u)+" of "+r(c))}},49642:(E,C,s)=>{"use strict";var r=s(55756);E.exports=!r(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})},59478:E=>{"use strict";var C="object"==typeof document&&document.all;E.exports={all:C,IS_HTMLDDA:typeof C>"u"&&void 0!==C}},96682:(E,C,s)=>{"use strict";var r=s(70009),a=s(77293),c=r.document,u=a(c)&&a(c.createElement);E.exports=function(e){return u?c.createElement(e):{}}},11594:E=>{"use strict";var C=TypeError;E.exports=function(r){if(r>9007199254740991)throw C("Maximum allowed index exceeded");return r}},44125:E=>{"use strict";E.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},36410:(E,C,s)=>{"use strict";var a=s(86053).match(/firefox\/(\d+)/i);E.exports=!!a&&+a[1]},34008:(E,C,s)=>{"use strict";var r=s(31813),a=s(3787);E.exports=!r&&!a&&"object"==typeof window&&"object"==typeof document},70902:E=>{"use strict";E.exports="function"==typeof Bun&&Bun&&"string"==typeof Bun.version},31813:E=>{"use strict";E.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},5329:(E,C,s)=>{"use strict";var r=s(86053);E.exports=/MSIE|Trident/.test(r)},16137:(E,C,s)=>{"use strict";var r=s(86053);E.exports=/ipad|iphone|ipod/i.test(r)&&typeof Pebble<"u"},3877:(E,C,s)=>{"use strict";var r=s(86053);E.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},3787:(E,C,s)=>{"use strict";var r=s(70009),a=s(49806);E.exports="process"===a(r.process)},85308:(E,C,s)=>{"use strict";var r=s(86053);E.exports=/web0s(?!.*chrome)/i.test(r)},86053:E=>{"use strict";E.exports=typeof navigator<"u"&&String(navigator.userAgent)||""},63556:(E,C,s)=>{"use strict";var m,T,r=s(70009),a=s(86053),c=r.process,u=r.Deno,e=c&&c.versions||u&&u.version,f=e&&e.v8;f&&(T=(m=f.split("."))[0]>0&&m[0]<4?1:+(m[0]+m[1])),!T&&a&&(!(m=a.match(/Edge\/(\d+)/))||m[1]>=74)&&(m=a.match(/Chrome\/(\d+)/))&&(T=+m[1]),E.exports=T},34545:(E,C,s)=>{"use strict";var a=s(86053).match(/AppleWebKit\/(\d+)\./);E.exports=!!a&&+a[1]},97911:(E,C,s)=>{"use strict";var r=s(13544);E.exports=function(a){return r[a+"Prototype"]}},44939:E=>{"use strict";E.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},40039:(E,C,s)=>{"use strict";var r=s(23634),a=Error,c=r("".replace),u=String(a("zxcasd").stack),e=/\n\s*at [^:]*:[^\n]*/,f=e.test(u);E.exports=function(m,T){if(f&&"string"==typeof m&&!a.prepareStackTrace)for(;T--;)m=c(m,e,"");return m}},77732:(E,C,s)=>{"use strict";var r=s(65162),a=s(40039),c=s(50499),u=Error.captureStackTrace;E.exports=function(e,f,m,T){c&&(u?u(e,f):r(e,"stack",a(m,T)))}},50499:(E,C,s)=>{"use strict";var r=s(55756),a=s(51361);E.exports=!r(function(){var c=Error("a");return!("stack"in c)||(Object.defineProperty(c,"stack",a(1,7)),7!==c.stack)})},90513:(E,C,s)=>{"use strict";var r=s(70009),a=s(2543),c=s(64350),u=s(52208),e=s(25525).f,f=s(79482),m=s(13544),T=s(76781),M=s(65162),w=s(80112),D=function(U){var W=function($,J,F){if(this instanceof W){switch(arguments.length){case 0:return new U;case 1:return new U($);case 2:return new U($,J)}return new U($,J,F)}return a(U,this,arguments)};return W.prototype=U.prototype,W};E.exports=function(U,W){var se,fe,Te,$e,ge,Et,ot,ct,qe,$=U.target,J=U.global,F=U.stat,X=U.proto,de=J?r:F?r[$]:(r[$]||{}).prototype,V=J?m:m[$]||M(m,$,{})[$],ce=V.prototype;for($e in W)fe=!(se=f(J?$e:$+(F?".":"#")+$e,U.forced))&&de&&w(de,$e),Et=V[$e],fe&&(ot=U.dontCallGetSet?(qe=e(de,$e))&&qe.value:de[$e]),ge=fe&&ot?ot:W[$e],(!fe||typeof Et!=typeof ge)&&(ct=U.bind&&fe?T(ge,r):U.wrap&&fe?D(ge):X&&u(ge)?c(ge):ge,(U.sham||ge&&ge.sham||Et&&Et.sham)&&M(ct,"sham",!0),M(V,$e,ct),X&&(w(m,Te=$+"Prototype")||M(m,Te,{}),M(m[Te],$e,ge),U.real&&ce&&(se||!ce[$e])&&M(ce,$e,ge)))}},55756:E=>{"use strict";E.exports=function(C){try{return!!C()}catch{return!0}}},3124:(E,C,s)=>{"use strict";var r=s(55756);E.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},2543:(E,C,s)=>{"use strict";var r=s(29046),a=Function.prototype,c=a.apply,u=a.call;E.exports="object"==typeof Reflect&&Reflect.apply||(r?u.bind(c):function(){return u.apply(c,arguments)})},76781:(E,C,s)=>{"use strict";var r=s(64350),a=s(61812),c=s(29046),u=r(r.bind);E.exports=function(e,f){return a(e),void 0===f?e:c?u(e,f):function(){return e.apply(f,arguments)}}},29046:(E,C,s)=>{"use strict";var r=s(55756);E.exports=!r(function(){var a=function(){}.bind();return"function"!=typeof a||a.hasOwnProperty("prototype")})},44197:(E,C,s)=>{"use strict";var r=s(23634),a=s(61812),c=s(77293),u=s(80112),e=s(37591),f=s(29046),m=Function,T=r([].concat),M=r([].join),w={},D=function(U,W,$){if(!u(w,W)){for(var J=[],F=0;F<W;F++)J[F]="a["+F+"]";w[W]=m("C,a","return new C("+M(J,",")+")")}return w[W](U,$)};E.exports=f?m.bind:function(W){var $=a(this),J=$.prototype,F=e(arguments,1),X=function(){var V=T(F,e(arguments));return this instanceof X?D($,V.length,V):$.apply(W,V)};return c(J)&&(X.prototype=J),X}},25401:(E,C,s)=>{"use strict";var r=s(29046),a=Function.prototype.call;E.exports=r?a.bind(a):function(){return a.apply(a,arguments)}},29862:(E,C,s)=>{"use strict";var r=s(49642),a=s(80112),c=Function.prototype,u=r&&Object.getOwnPropertyDescriptor,e=a(c,"name"),f=e&&"something"===function(){}.name,m=e&&(!r||r&&u(c,"name").configurable);E.exports={EXISTS:e,PROPER:f,CONFIGURABLE:m}},13325:(E,C,s)=>{"use strict";var r=s(23634),a=s(61812);E.exports=function(c,u,e){try{return r(a(Object.getOwnPropertyDescriptor(c,u)[e]))}catch{}}},64350:(E,C,s)=>{"use strict";var r=s(49806),a=s(23634);E.exports=function(c){if("Function"===r(c))return a(c)}},23634:(E,C,s)=>{"use strict";var r=s(29046),a=Function.prototype,c=a.call,u=r&&a.bind.bind(c,c);E.exports=r?u:function(e){return function(){return c.apply(e,arguments)}}},7365:(E,C,s)=>{"use strict";var r=s(13544),a=s(70009),c=s(52208),u=function(e){return c(e)?e:void 0};E.exports=function(e,f){return arguments.length<2?u(r[e])||u(a[e]):r[e]&&r[e][f]||a[e]&&a[e][f]}},34014:(E,C,s)=>{"use strict";var r=s(35329),a=s(34778),c=s(43550),u=s(84394),f=s(91840)("iterator");E.exports=function(m){if(!c(m))return a(m,f)||a(m,"@@iterator")||u[r(m)]}},88055:(E,C,s)=>{"use strict";var r=s(25401),a=s(61812),c=s(64562),u=s(7378),e=s(34014),f=TypeError;E.exports=function(m,T){var M=arguments.length<2?e(m):T;if(a(M))return c(r(M,m));throw f(u(m)+" is not iterable")}},32092:(E,C,s)=>{"use strict";var r=s(23634),a=s(89735),c=s(52208),u=s(49806),e=s(41433),f=r([].push);E.exports=function(m){if(c(m))return m;if(a(m)){for(var T=m.length,M=[],w=0;w<T;w++){var D=m[w];"string"==typeof D?f(M,D):("number"==typeof D||"Number"===u(D)||"String"===u(D))&&f(M,e(D))}var U=M.length,W=!0;return function($,J){if(W)return W=!1,J;if(a(this))return J;for(var F=0;F<U;F++)if(M[F]===$)return J}}}},34778:(E,C,s)=>{"use strict";var r=s(61812),a=s(43550);E.exports=function(c,u){var e=c[u];return a(e)?void 0:r(e)}},70009:function(E){"use strict";var C=function(s){return s&&s.Math===Math&&s};E.exports=C("object"==typeof globalThis&&globalThis)||C("object"==typeof window&&window)||C("object"==typeof self&&self)||C("object"==typeof global&&global)||function(){return this}()||this||Function("return this")()},80112:(E,C,s)=>{"use strict";var r=s(23634),a=s(70267),c=r({}.hasOwnProperty);E.exports=Object.hasOwn||function(e,f){return c(a(e),f)}},45599:E=>{"use strict";E.exports={}},52912:E=>{"use strict";E.exports=function(C,s){try{1===arguments.length?console.error(C):console.error(C,s)}catch{}}},55690:(E,C,s)=>{"use strict";var r=s(7365);E.exports=r("document","documentElement")},50495:(E,C,s)=>{"use strict";var r=s(49642),a=s(55756),c=s(96682);E.exports=!r&&!a(function(){return 7!==Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a})},20973:(E,C,s)=>{"use strict";var r=s(23634),a=s(55756),c=s(49806),u=Object,e=r("".split);E.exports=a(function(){return!u("z").propertyIsEnumerable(0)})?function(f){return"String"===c(f)?e(f,""):u(f)}:u},26699:(E,C,s)=>{"use strict";var r=s(23634),a=s(52208),c=s(24766),u=r(Function.toString);a(c.inspectSource)||(c.inspectSource=function(e){return u(e)}),E.exports=c.inspectSource},33411:(E,C,s)=>{"use strict";var r=s(77293),a=s(65162);E.exports=function(c,u){r(u)&&"cause"in u&&a(c,"cause",u.cause)}},57867:(E,C,s)=>{"use strict";var r=s(90513),a=s(23634),c=s(45599),u=s(77293),e=s(80112),f=s(48011).f,m=s(51518),T=s(62469),M=s(46401),w=s(13708),D=s(3124),U=!1,W=w("meta"),$=0,J=function(se){f(se,W,{value:{objectID:"O"+$++,weakData:{}}})},ce=E.exports={enable:function(){ce.enable=function(){},U=!0;var se=m.f,fe=a([].splice),Te={};Te[W]=1,se(Te).length&&(m.f=function($e){for(var ge=se($e),Et=0,ot=ge.length;Et<ot;Et++)if(ge[Et]===W){fe(ge,Et,1);break}return ge},r({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:T.f}))},fastKey:function(se,fe){if(!u(se))return"symbol"==typeof se?se:("string"==typeof se?"S":"P")+se;if(!e(se,W)){if(!M(se))return"F";if(!fe)return"E";J(se)}return se[W].objectID},getWeakData:function(se,fe){if(!e(se,W)){if(!M(se))return!0;if(!fe)return!1;J(se)}return se[W].weakData},onFreeze:function(se){return D&&U&&M(se)&&!e(se,W)&&J(se),se}};c[W]=!0},91093:(E,C,s)=>{"use strict";var U,W,$,r=s(81101),a=s(70009),c=s(77293),u=s(65162),e=s(80112),f=s(24766),m=s(86066),T=s(45599),M="Object already initialized",w=a.TypeError;if(r||f.state){var X=f.state||(f.state=new(0,a.WeakMap));X.get=X.get,X.has=X.has,X.set=X.set,U=function(V,ce){if(X.has(V))throw w(M);return ce.facade=V,X.set(V,ce),ce},W=function(V){return X.get(V)||{}},$=function(V){return X.has(V)}}else{var de=m("state");T[de]=!0,U=function(V,ce){if(e(V,de))throw w(M);return ce.facade=V,u(V,de,ce),ce},W=function(V){return e(V,de)?V[de]:{}},$=function(V){return e(V,de)}}E.exports={set:U,get:W,has:$,enforce:function(V){return $(V)?W(V):U(V,{})},getterFor:function(V){return function(ce){var se;if(!c(ce)||(se=W(ce)).type!==V)throw w("Incompatible receiver, "+V+" required");return se}}}},39918:(E,C,s)=>{"use strict";var r=s(91840),a=s(84394),c=r("iterator"),u=Array.prototype;E.exports=function(e){return void 0!==e&&(a.Array===e||u[c]===e)}},89735:(E,C,s)=>{"use strict";var r=s(49806);E.exports=Array.isArray||function(c){return"Array"===r(c)}},52208:(E,C,s)=>{"use strict";var r=s(59478),a=r.all;E.exports=r.IS_HTMLDDA?function(c){return"function"==typeof c||c===a}:function(c){return"function"==typeof c}},81177:(E,C,s)=>{"use strict";var r=s(23634),a=s(55756),c=s(52208),u=s(35329),e=s(7365),f=s(26699),m=function(){},T=[],M=e("Reflect","construct"),w=/^\s*(?:class|function)\b/,D=r(w.exec),U=!w.exec(m),W=function(F){if(!c(F))return!1;try{return M(m,T,F),!0}catch{return!1}},$=function(F){if(!c(F))return!1;switch(u(F)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return U||!!D(w,f(F))}catch{return!0}};$.sham=!0,E.exports=!M||a(function(){var J;return W(W.call)||!W(Object)||!W(function(){J=!0})||J})?$:W},27029:(E,C,s)=>{"use strict";var r=s(80112);E.exports=function(a){return void 0!==a&&(r(a,"value")||r(a,"writable"))}},79482:(E,C,s)=>{"use strict";var r=s(55756),a=s(52208),c=/#|\.prototype\./,u=function(M,w){var D=f[e(M)];return D===T||D!==m&&(a(w)?r(w):!!w)},e=u.normalize=function(M){return String(M).replace(c,".").toLowerCase()},f=u.data={},m=u.NATIVE="N",T=u.POLYFILL="P";E.exports=u},43550:E=>{"use strict";E.exports=function(C){return null==C}},77293:(E,C,s)=>{"use strict";var r=s(52208),a=s(59478),c=a.all;E.exports=a.IS_HTMLDDA?function(u){return"object"==typeof u?null!==u:r(u)||u===c}:function(u){return"object"==typeof u?null!==u:r(u)}},81124:E=>{"use strict";E.exports=!0},60373:(E,C,s)=>{"use strict";var r=s(77293),a=s(49806),u=s(91840)("match");E.exports=function(e){var f;return r(e)&&(void 0!==(f=e[u])?!!f:"RegExp"===a(e))}},74717:(E,C,s)=>{"use strict";var r=s(7365),a=s(52208),c=s(23336),u=s(99554),e=Object;E.exports=u?function(f){return"symbol"==typeof f}:function(f){var m=r("Symbol");return a(m)&&c(m.prototype,e(f))}},87463:(E,C,s)=>{"use strict";var r=s(25401);E.exports=function(a,c,u){for(var m,T,e=u?a:a.iterator,f=a.next;!(m=r(f,e)).done;)if(void 0!==(T=c(m.value)))return T}},41605:(E,C,s)=>{"use strict";var r=s(76781),a=s(25401),c=s(64562),u=s(7378),e=s(39918),f=s(6381),m=s(23336),T=s(88055),M=s(34014),w=s(40798),D=TypeError,U=function($,J){this.stopped=$,this.result=J},W=U.prototype;E.exports=function($,J,F){var Te,$e,ge,Et,ot,ct,qe,de=!(!F||!F.AS_ENTRIES),V=!(!F||!F.IS_RECORD),ce=!(!F||!F.IS_ITERATOR),se=!(!F||!F.INTERRUPTED),fe=r(J,F&&F.that),He=function(Le){return Te&&w(Te,"normal",Le),new U(!0,Le)},We=function(Le){return de?(c(Le),se?fe(Le[0],Le[1],He):fe(Le[0],Le[1])):se?fe(Le,He):fe(Le)};if(V)Te=$.iterator;else if(ce)Te=$;else{if(!($e=M($)))throw D(u($)+" is not iterable");if(e($e)){for(ge=0,Et=f($);Et>ge;ge++)if((ot=We($[ge]))&&m(W,ot))return ot;return new U(!1)}Te=T($,$e)}for(ct=V?$.next:Te.next;!(qe=a(ct,Te)).done;){try{ot=We(qe.value)}catch(Le){w(Te,"throw",Le)}if("object"==typeof ot&&ot&&m(W,ot))return ot}return new U(!1)}},40798:(E,C,s)=>{"use strict";var r=s(25401),a=s(64562),c=s(34778);E.exports=function(u,e,f){var m,T;a(u);try{if(!(m=c(u,"return"))){if("throw"===e)throw f;return f}m=r(m,u)}catch(M){T=!0,m=M}if("throw"===e)throw f;if(T)throw m;return a(m),f}},14554:(E,C,s)=>{"use strict";var r=s(38432).IteratorPrototype,a=s(83272),c=s(51361),u=s(85681),e=s(84394),f=function(){return this};E.exports=function(m,T,M,w){var D=T+" Iterator";return m.prototype=a(r,{next:c(+!w,M)}),u(m,D,!1,!0),e[D]=f,m}},79077:(E,C,s)=>{"use strict";var r=s(90513),a=s(25401),c=s(81124),u=s(29862),e=s(52208),f=s(14554),m=s(31426),T=s(54945),M=s(85681),w=s(65162),D=s(42915),U=s(91840),W=s(84394),$=s(38432),J=u.PROPER,F=u.CONFIGURABLE,X=$.IteratorPrototype,de=$.BUGGY_SAFARI_ITERATORS,V=U("iterator"),se="values",fe="entries",Te=function(){return this};E.exports=function($e,ge,Et,ot,ct,qe,He){f(Et,ge,ot);var Rn,At,qt,We=function(sn){if(sn===ct&&cn)return cn;if(!de&&sn&&sn in it)return it[sn];switch(sn){case"keys":case se:case fe:return function(){return new Et(this,sn)}}return function(){return new Et(this)}},Le=ge+" Iterator",Pt=!1,it=$e.prototype,Xt=it[V]||it["@@iterator"]||ct&&it[ct],cn=!de&&Xt||We(ct),pn="Array"===ge&&it.entries||Xt;if(pn&&(Rn=m(pn.call(new $e)))!==Object.prototype&&Rn.next&&(!c&&m(Rn)!==X&&(T?T(Rn,X):e(Rn[V])||D(Rn,V,Te)),M(Rn,Le,!0,!0),c&&(W[Le]=Te)),J&&ct===se&&Xt&&Xt.name!==se&&(!c&&F?w(it,"name",se):(Pt=!0,cn=function(){return a(Xt,this)})),ct)if(At={values:We(se),keys:qe?cn:We("keys"),entries:We(fe)},He)for(qt in At)(de||Pt||!(qt in it))&&D(it,qt,At[qt]);else r({target:ge,proto:!0,forced:de||Pt},At);return(!c||He)&&it[V]!==cn&&D(it,V,cn,{name:ct}),W[ge]=cn,At}},38432:(E,C,s)=>{"use strict";var D,U,W,r=s(55756),a=s(52208),c=s(77293),u=s(83272),e=s(31426),f=s(42915),m=s(91840),T=s(81124),M=m("iterator"),w=!1;[].keys&&("next"in(W=[].keys())?(U=e(e(W)))!==Object.prototype&&(D=U):w=!0),!c(D)||r(function(){var J={};return D[M].call(J)!==J})?D={}:T&&(D=u(D)),a(D[M])||f(D,M,function(){return this}),E.exports={IteratorPrototype:D,BUGGY_SAFARI_ITERATORS:w}},84394:E=>{"use strict";E.exports={}},6381:(E,C,s)=>{"use strict";var r=s(48869);E.exports=function(a){return r(a.length)}},60077:(E,C,s)=>{"use strict";var r=s(7365),a=s(49458),c=r("Map");E.exports={Map:c,set:a("set",2),get:a("get",1),has:a("has",1),remove:a("delete",1),proto:c.prototype}},21515:(E,C,s)=>{"use strict";var r=s(87463);E.exports=function(a,c,u){return u?r(a.entries(),function(e){return c(e[1],e[0])},!0):a.forEach(c)}},57729:(E,C,s)=>{"use strict";var r=s(25401),a=s(61812),c=s(52208),u=s(64562),e=TypeError;E.exports=function(m,T){var $,M=u(this),w=a(M.get),D=a(M.has),U=a(M.set),W=arguments.length>2?arguments[2]:void 0;if(!c(T)&&!c(W))throw e("At least one callback required");return r(D,M,m)?($=r(w,M,m),c(T)&&($=T($),r(U,M,m,$))):c(W)&&($=W(),r(U,M,m,$)),$}},8651:E=>{"use strict";var C=Math.ceil,s=Math.floor;E.exports=Math.trunc||function(a){var c=+a;return(c>0?s:C)(c)}},53460:(E,C,s)=>{"use strict";var F,X,de,V,ce,r=s(70009),a=s(76781),c=s(25525).f,u=s(37352).set,e=s(70918),f=s(3877),m=s(16137),T=s(85308),M=s(3787),w=r.MutationObserver||r.WebKitMutationObserver,D=r.document,U=r.process,W=r.Promise,$=c(r,"queueMicrotask"),J=$&&$.value;if(!J){var se=new e,fe=function(){var Te,$e;for(M&&(Te=U.domain)&&Te.exit();$e=se.get();)try{$e()}catch(ge){throw se.head&&F(),ge}Te&&Te.enter()};f||M||T||!w||!D?!m&&W&&W.resolve?((V=W.resolve(void 0)).constructor=W,ce=a(V.then,V),F=function(){ce(fe)}):M?F=function(){U.nextTick(fe)}:(u=a(u,r),F=function(){u(fe)}):(X=!0,de=D.createTextNode(""),new w(fe).observe(de,{characterData:!0}),F=function(){de.data=X=!X}),J=function(Te){se.head||F(),se.add(Te)}}E.exports=J},54256:(E,C,s)=>{"use strict";var r=s(61812),a=TypeError,c=function(u){var e,f;this.promise=new u(function(m,T){if(void 0!==e||void 0!==f)throw a("Bad Promise constructor");e=m,f=T}),this.resolve=r(e),this.reject=r(f)};E.exports.f=function(u){return new c(u)}},63313:(E,C,s)=>{"use strict";var r=s(41433);E.exports=function(a,c){return void 0===a?arguments.length<2?"":c:r(a)}},56421:(E,C,s)=>{"use strict";var r=s(60373),a=TypeError;E.exports=function(c){if(r(c))throw a("The method doesn't accept regular expressions");return c}},75791:(E,C,s)=>{"use strict";var r=s(49642),a=s(23634),c=s(25401),u=s(55756),e=s(28474),f=s(47238),m=s(25558),T=s(70267),M=s(20973),w=Object.assign,D=Object.defineProperty,U=a([].concat);E.exports=!w||u(function(){if(r&&1!==w({b:1},w(D({},"a",{enumerable:!0,get:function(){D(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var W={},$={},J=Symbol("assign detection"),F="abcdefghijklmnopqrst";return W[J]=7,F.split("").forEach(function(X){$[X]=X}),7!==w({},W)[J]||e(w({},$)).join("")!==F})?function($,J){for(var F=T($),X=arguments.length,de=1,V=f.f,ce=m.f;X>de;)for(var ge,se=M(arguments[de++]),fe=V?U(e(se),V(se)):e(se),Te=fe.length,$e=0;Te>$e;)ge=fe[$e++],(!r||c(ce,se,ge))&&(F[ge]=se[ge]);return F}:w},83272:(E,C,s)=>{"use strict";var X,r=s(64562),a=s(25913),c=s(44939),u=s(45599),e=s(55690),f=s(96682),m=s(86066),w="prototype",D="script",U=m("IE_PROTO"),W=function(){},$=function(V){return"<"+D+">"+V+"</"+D+">"},J=function(V){V.write($("")),V.close();var ce=V.parentWindow.Object;return V=null,ce},de=function(){try{X=new ActiveXObject("htmlfile")}catch{}de=typeof document<"u"?document.domain&&X?J(X):function(){var se,V=f("iframe"),ce="java"+D+":";return V.style.display="none",e.appendChild(V),V.src=String(ce),(se=V.contentWindow.document).open(),se.write($("document.F=Object")),se.close(),se.F}():J(X);for(var V=c.length;V--;)delete de[w][c[V]];return de()};u[U]=!0,E.exports=Object.create||function(ce,se){var fe;return null!==ce?(W[w]=r(ce),fe=new W,W[w]=null,fe[U]=ce):fe=de(),void 0===se?fe:a.f(fe,se)}},25913:(E,C,s)=>{"use strict";var r=s(49642),a=s(47960),c=s(48011),u=s(64562),e=s(81010),f=s(28474);C.f=r&&!a?Object.defineProperties:function(T,M){u(T);for(var $,w=e(M),D=f(M),U=D.length,W=0;U>W;)c.f(T,$=D[W++],w[$]);return T}},48011:(E,C,s)=>{"use strict";var r=s(49642),a=s(50495),c=s(47960),u=s(64562),e=s(62939),f=TypeError,m=Object.defineProperty,T=Object.getOwnPropertyDescriptor,M="enumerable",w="configurable",D="writable";C.f=r?c?function(W,$,J){if(u(W),$=e($),u(J),"function"==typeof W&&"prototype"===$&&"value"in J&&D in J&&!J[D]){var F=T(W,$);F&&F[D]&&(W[$]=J.value,J={configurable:w in J?J[w]:F[w],enumerable:M in J?J[M]:F[M],writable:!1})}return m(W,$,J)}:m:function(W,$,J){if(u(W),$=e($),u(J),a)try{return m(W,$,J)}catch{}if("get"in J||"set"in J)throw f("Accessors not supported");return"value"in J&&(W[$]=J.value),W}},25525:(E,C,s)=>{"use strict";var r=s(49642),a=s(25401),c=s(25558),u=s(51361),e=s(81010),f=s(62939),m=s(80112),T=s(50495),M=Object.getOwnPropertyDescriptor;C.f=r?M:function(D,U){if(D=e(D),U=f(U),T)try{return M(D,U)}catch{}if(m(D,U))return u(!a(c.f,D,U),D[U])}},62469:(E,C,s)=>{"use strict";var r=s(49806),a=s(81010),c=s(51518).f,u=s(8681),e="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];E.exports.f=function(T){return e&&"Window"===r(T)?function(m){try{return c(m)}catch{return u(e)}}(T):c(a(T))}},51518:(E,C,s)=>{"use strict";var r=s(66250),c=s(44939).concat("length","prototype");C.f=Object.getOwnPropertyNames||function(e){return r(e,c)}},47238:(E,C)=>{"use strict";C.f=Object.getOwnPropertySymbols},31426:(E,C,s)=>{"use strict";var r=s(80112),a=s(52208),c=s(70267),u=s(86066),e=s(37112),f=u("IE_PROTO"),m=Object,T=m.prototype;E.exports=e?m.getPrototypeOf:function(M){var w=c(M);if(r(w,f))return w[f];var D=w.constructor;return a(D)&&w instanceof D?D.prototype:w instanceof m?T:null}},46401:(E,C,s)=>{"use strict";var r=s(55756),a=s(77293),c=s(49806),u=s(76318),e=Object.isExtensible,f=r(function(){e(1)});E.exports=f||u?function(T){return!(!a(T)||u&&"ArrayBuffer"===c(T))&&(!e||e(T))}:e},23336:(E,C,s)=>{"use strict";var r=s(23634);E.exports=r({}.isPrototypeOf)},66250:(E,C,s)=>{"use strict";var r=s(23634),a=s(80112),c=s(81010),u=s(95171).indexOf,e=s(45599),f=r([].push);E.exports=function(m,T){var U,M=c(m),w=0,D=[];for(U in M)!a(e,U)&&a(M,U)&&f(D,U);for(;T.length>w;)a(M,U=T[w++])&&(~u(D,U)||f(D,U));return D}},28474:(E,C,s)=>{"use strict";var r=s(66250),a=s(44939);E.exports=Object.keys||function(u){return r(u,a)}},25558:(E,C)=>{"use strict";var s={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,a=r&&!s.call({1:2},1);C.f=a?function(u){var e=r(this,u);return!!e&&e.enumerable}:s},54945:(E,C,s)=>{"use strict";var r=s(13325),a=s(64562),c=s(93221);E.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var f,u=!1,e={};try{(f=r(Object.prototype,"__proto__","set"))(e,[]),u=e instanceof Array}catch{}return function(T,M){return a(T),c(M),u?f(T,M):T.__proto__=M,T}}():void 0)},36805:(E,C,s)=>{"use strict";var r=s(49642),a=s(55756),c=s(23634),u=s(31426),e=s(28474),f=s(81010),T=c(s(25558).f),M=c([].push),w=r&&a(function(){var U=Object.create(null);return U[2]=2,!T(U,2)}),D=function(U){return function(W){for(var ce,$=f(W),J=e($),F=w&&null===u($),X=J.length,de=0,V=[];X>de;)ce=J[de++],(!r||(F?ce in $:T($,ce)))&&M(V,U?[ce,$[ce]]:$[ce]);return V}};E.exports={entries:D(!0),values:D(!1)}},97686:(E,C,s)=>{"use strict";var r=s(5552),a=s(35329);E.exports=r?{}.toString:function(){return"[object "+a(this)+"]"}},71689:(E,C,s)=>{"use strict";var r=s(25401),a=s(52208),c=s(77293),u=TypeError;E.exports=function(e,f){var m,T;if("string"===f&&a(m=e.toString)&&!c(T=r(m,e))||a(m=e.valueOf)&&!c(T=r(m,e))||"string"!==f&&a(m=e.toString)&&!c(T=r(m,e)))return T;throw u("Can't convert object to primitive value")}},59823:(E,C,s)=>{"use strict";var r=s(7365),a=s(23634),c=s(51518),u=s(47238),e=s(64562),f=a([].concat);E.exports=r("Reflect","ownKeys")||function(T){var M=c.f(e(T)),w=u.f;return w?f(M,w(T)):M}},13544:E=>{"use strict";E.exports={}},26975:E=>{"use strict";E.exports=function(C){try{return{error:!1,value:C()}}catch(s){return{error:!0,value:s}}}},9936:(E,C,s)=>{"use strict";var r=s(70009),a=s(46456),c=s(52208),u=s(79482),e=s(26699),f=s(91840),m=s(34008),T=s(31813),M=s(81124),w=s(63556),D=a&&a.prototype,U=f("species"),W=!1,$=c(r.PromiseRejectionEvent),J=u("Promise",function(){var F=e(a),X=F!==String(a);if(!X&&66===w||M&&(!D.catch||!D.finally))return!0;if(!w||w<51||!/native code/.test(F)){var de=new a(function(se){se(1)}),V=function(se){se(function(){},function(){})};if((de.constructor={})[U]=V,!(W=de.then(function(){})instanceof V))return!0}return!X&&(m||T)&&!$});E.exports={CONSTRUCTOR:J,REJECTION_EVENT:$,SUBCLASSING:W}},46456:(E,C,s)=>{"use strict";var r=s(70009);E.exports=r.Promise},25524:(E,C,s)=>{"use strict";var r=s(64562),a=s(77293),c=s(54256);E.exports=function(u,e){if(r(u),a(e)&&e.constructor===u)return e;var f=c.f(u);return(0,f.resolve)(e),f.promise}},95758:(E,C,s)=>{"use strict";var r=s(46456),a=s(5253),c=s(9936).CONSTRUCTOR;E.exports=c||!a(function(u){r.all(u).then(void 0,function(){})})},70918:E=>{"use strict";var C=function(){this.head=null,this.tail=null};C.prototype={add:function(s){var r={item:s,next:null},a=this.tail;a?a.next=r:this.head=r,this.tail=r},get:function(){var s=this.head;if(s)return null===(this.head=s.next)&&(this.tail=null),s.item}},E.exports=C},67917:(E,C,s)=>{"use strict";var r=s(43550),a=TypeError;E.exports=function(c){if(r(c))throw a("Can't call method on "+c);return c}},29627:E=>{"use strict";E.exports=function(C,s){return C===s||C!=C&&s!=s}},53814:(E,C,s)=>{"use strict";var w,r=s(70009),a=s(2543),c=s(52208),u=s(70902),e=s(86053),f=s(37591),m=s(15086),T=r.Function,M=/MSIE .\./.test(e)||u&&((w=r.Bun.version.split(".")).length<3||"0"===w[0]&&(w[1]<3||"3"===w[1]&&"0"===w[2]));E.exports=function(w,D){var U=D?2:1;return M?function(W,$){var J=m(arguments.length,1)>U,F=c(W)?W:T(W),X=J?f(arguments,U):[],de=J?function(){a(F,this,X)}:F;return D?w(de,$):w(de)}:w}},58014:(E,C,s)=>{"use strict";var r=s(7365),a=s(1707),c=s(91840),u=s(49642),e=c("species");E.exports=function(f){var m=r(f);u&&m&&!m[e]&&a(m,e,{configurable:!0,get:function(){return this}})}},85681:(E,C,s)=>{"use strict";var r=s(5552),a=s(48011).f,c=s(65162),u=s(80112),e=s(97686),m=s(91840)("toStringTag");E.exports=function(T,M,w,D){if(T){var U=w?T:T.prototype;u(U,m)||a(U,m,{configurable:!0,value:M}),D&&!r&&c(U,"toString",e)}}},86066:(E,C,s)=>{"use strict";var r=s(64579),a=s(13708),c=r("keys");E.exports=function(u){return c[u]||(c[u]=a(u))}},24766:(E,C,s)=>{"use strict";var r=s(70009),a=s(34056),c="__core-js_shared__",u=r[c]||a(c,{});E.exports=u},64579:(E,C,s)=>{"use strict";var r=s(81124),a=s(24766);(E.exports=function(c,u){return a[c]||(a[c]=void 0!==u?u:{})})("versions",[]).push({version:"3.32.2",mode:r?"pure":"global",copyright:"\xa9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.2/LICENSE",source:"https://github.com/zloirock/core-js"})},95869:(E,C,s)=>{"use strict";var r=s(64562),a=s(54356),c=s(43550),e=s(91840)("species");E.exports=function(f,m){var M,T=r(f).constructor;return void 0===T||c(M=r(T)[e])?m:a(M)}},61557:(E,C,s)=>{"use strict";var r=s(23634),a=s(33912),c=s(41433),u=s(67917),e=r("".charAt),f=r("".charCodeAt),m=r("".slice),T=function(M){return function(w,D){var J,F,U=c(u(w)),W=a(D),$=U.length;return W<0||W>=$?M?"":void 0:(J=f(U,W))<55296||J>56319||W+1===$||(F=f(U,W+1))<56320||F>57343?M?e(U,W):J:M?m(U,W,W+2):F-56320+(J-55296<<10)+65536}};E.exports={codeAt:T(!1),charAt:T(!0)}},26662:(E,C,s)=>{"use strict";var r=s(23634),a=2147483647,D=/[^\0-\u007E]/,U=/[.\u3002\uFF0E\uFF61]/g,W="Overflow: input needs wider integers to process",J=RangeError,F=r(U.exec),X=Math.floor,de=String.fromCharCode,V=r("".charCodeAt),ce=r([].join),se=r([].push),fe=r("".replace),Te=r("".split),$e=r("".toLowerCase),Et=function(qe){return qe+22+75*(qe<26)},ot=function(qe,He,We){var Le=0;for(qe=We?X(qe/700):qe>>1,qe+=X(qe/He);qe>455;)qe=X(qe/35),Le+=36;return X(Le+36*qe/(qe+38))},ct=function(qe){var He=[];qe=function(qe){for(var He=[],We=0,Le=qe.length;We<Le;){var Pt=V(qe,We++);if(Pt>=55296&&Pt<=56319&&We<Le){var it=V(qe,We++);56320==(64512&it)?se(He,((1023&Pt)<<10)+(1023&it)+65536):(se(He,Pt),We--)}else se(He,Pt)}return He}(qe);var Xt,cn,We=qe.length,Le=128,Pt=0,it=72;for(Xt=0;Xt<qe.length;Xt++)(cn=qe[Xt])<128&&se(He,de(cn));var pn=He.length,Rn=pn;for(pn&&se(He,"-");Rn<We;){var At=a;for(Xt=0;Xt<qe.length;Xt++)(cn=qe[Xt])>=Le&&cn<At&&(At=cn);var qt=Rn+1;if(At-Le>X((a-Pt)/qt))throw J(W);for(Pt+=(At-Le)*qt,Le=At,Xt=0;Xt<qe.length;Xt++){if((cn=qe[Xt])<Le&&++Pt>a)throw J(W);if(cn===Le){for(var sn=Pt,fn=36;;){var xn=fn<=it?1:fn>=it+26?26:fn-it;if(sn<xn)break;var Kr=sn-xn,Or=36-xn;se(He,de(Et(xn+Kr%Or))),sn=X(Kr/Or),fn+=36}se(He,de(Et(sn))),it=ot(Pt,qt,Rn===pn),Pt=0,Rn++}}Pt++,Le++}return ce(He,"")};E.exports=function(qe){var Le,Pt,He=[],We=Te(fe($e(qe),U,"."),".");for(Le=0;Le<We.length;Le++)se(He,F(D,Pt=We[Le])?"xn--"+ct(Pt):Pt);return ce(He,".")}},53411:(E,C,s)=>{"use strict";var r=s(33912),a=s(41433),c=s(67917),u=RangeError;E.exports=function(f){var m=a(c(this)),T="",M=r(f);if(M<0||M===1/0)throw u("Wrong number of repetitions");for(;M>0;(M>>>=1)&&(m+=m))1&M&&(T+=m);return T}},85462:(E,C,s)=>{"use strict";var r=s(29862).PROPER,a=s(55756),c=s(88185);E.exports=function(e){return a(function(){return!!c[e]()||"\u200b\x85\u180e"!=="\u200b\x85\u180e"[e]()||r&&c[e].name!==e})}},89858:(E,C,s)=>{"use strict";var r=s(23634),a=s(67917),c=s(41433),u=s(88185),e=r("".replace),f=RegExp("^["+u+"]+"),m=RegExp("(^|[^"+u+"])["+u+"]+$"),T=function(M){return function(w){var D=c(a(w));return 1&M&&(D=e(D,f,"")),2&M&&(D=e(D,m,"$1")),D}};E.exports={start:T(1),end:T(2),trim:T(3)}},98535:(E,C,s)=>{"use strict";var r=s(63556),a=s(55756),u=s(70009).String;E.exports=!!Object.getOwnPropertySymbols&&!a(function(){var e=Symbol("symbol detection");return!u(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41})},56992:(E,C,s)=>{"use strict";var r=s(25401),a=s(7365),c=s(91840),u=s(42915);E.exports=function(){var e=a("Symbol"),f=e&&e.prototype,m=f&&f.valueOf,T=c("toPrimitive");f&&!f[T]&&u(f,T,function(M){return r(m,this)},{arity:1})}},86475:(E,C,s)=>{"use strict";var r=s(7365),a=s(23634),c=r("Symbol"),u=c.keyFor,e=a(c.prototype.valueOf);E.exports=c.isRegisteredSymbol||function(m){try{return void 0!==u(e(m))}catch{return!1}}},74110:(E,C,s)=>{"use strict";for(var r=s(64579),a=s(7365),c=s(23634),u=s(74717),e=s(91840),f=a("Symbol"),m=f.isWellKnownSymbol,T=a("Object","getOwnPropertyNames"),M=c(f.prototype.valueOf),w=r("wks"),D=0,U=T(f),W=U.length;D<W;D++)try{var $=U[D];u(f[$])&&e($)}catch{}E.exports=function(F){if(m&&m(F))return!0;try{for(var X=M(F),de=0,V=T(w),ce=V.length;de<ce;de++)if(w[V[de]]==X)return!0}catch{}return!1}},56709:(E,C,s)=>{"use strict";var r=s(98535);E.exports=r&&!!Symbol.for&&!!Symbol.keyFor},37352:(E,C,s)=>{"use strict";var Te,$e,ge,Et,r=s(70009),a=s(2543),c=s(76781),u=s(52208),e=s(80112),f=s(55756),m=s(55690),T=s(37591),M=s(96682),w=s(15086),D=s(3877),U=s(3787),W=r.setImmediate,$=r.clearImmediate,J=r.process,F=r.Dispatch,X=r.Function,de=r.MessageChannel,V=r.String,ce=0,se={},fe="onreadystatechange";f(function(){Te=r.location});var ot=function(We){if(e(se,We)){var Le=se[We];delete se[We],Le()}},ct=function(We){return function(){ot(We)}},qe=function(We){ot(We.data)},He=function(We){r.postMessage(V(We),Te.protocol+"//"+Te.host)};(!W||!$)&&(W=function(Le){w(arguments.length,1);var Pt=u(Le)?Le:X(Le),it=T(arguments,1);return se[++ce]=function(){a(Pt,void 0,it)},$e(ce),ce},$=function(Le){delete se[Le]},U?$e=function(We){J.nextTick(ct(We))}:F&&F.now?$e=function(We){F.now(ct(We))}:de&&!D?(Et=(ge=new de).port2,ge.port1.onmessage=qe,$e=c(Et.postMessage,Et)):r.addEventListener&&u(r.postMessage)&&!r.importScripts&&Te&&"file:"!==Te.protocol&&!f(He)?($e=He,r.addEventListener("message",qe,!1)):$e=fe in M("script")?function(We){m.appendChild(M("script"))[fe]=function(){m.removeChild(this),ot(We)}}:function(We){setTimeout(ct(We),0)}),E.exports={set:W,clear:$}},19401:(E,C,s)=>{"use strict";var r=s(33912),a=Math.max,c=Math.min;E.exports=function(u,e){var f=r(u);return f<0?a(f+e,0):c(f,e)}},81010:(E,C,s)=>{"use strict";var r=s(20973),a=s(67917);E.exports=function(c){return r(a(c))}},33912:(E,C,s)=>{"use strict";var r=s(8651);E.exports=function(a){var c=+a;return c!=c||0===c?0:r(c)}},48869:(E,C,s)=>{"use strict";var r=s(33912),a=Math.min;E.exports=function(c){return c>0?a(r(c),9007199254740991):0}},70267:(E,C,s)=>{"use strict";var r=s(67917),a=Object;E.exports=function(c){return a(r(c))}},1645:(E,C,s)=>{"use strict";var r=s(25401),a=s(77293),c=s(74717),u=s(34778),e=s(71689),f=s(91840),m=TypeError,T=f("toPrimitive");E.exports=function(M,w){if(!a(M)||c(M))return M;var U,D=u(M,T);if(D){if(void 0===w&&(w="default"),U=r(D,M,w),!a(U)||c(U))return U;throw m("Can't convert object to primitive value")}return void 0===w&&(w="number"),e(M,w)}},62939:(E,C,s)=>{"use strict";var r=s(1645),a=s(74717);E.exports=function(c){var u=r(c,"string");return a(u)?u:u+""}},5552:(E,C,s)=>{"use strict";var c={};c[s(91840)("toStringTag")]="z",E.exports="[object z]"===String(c)},41433:(E,C,s)=>{"use strict";var r=s(35329),a=String;E.exports=function(c){if("Symbol"===r(c))throw TypeError("Cannot convert a Symbol value to a string");return a(c)}},7378:E=>{"use strict";var C=String;E.exports=function(s){try{return C(s)}catch{return"Object"}}},13708:(E,C,s)=>{"use strict";var r=s(23634),a=0,c=Math.random(),u=r(1..toString);E.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+u(++a+c,36)}},54933:(E,C,s)=>{"use strict";var r=s(55756),a=s(91840),c=s(49642),u=s(81124),e=a("iterator");E.exports=!r(function(){var f=new URL("b?a=1&b=2&c=3","http://a"),m=f.searchParams,T=new URLSearchParams("a=1&a=2&b=3"),M="";return f.pathname="c%20d",m.forEach(function(w,D){m.delete("b"),M+=D+w}),T.delete("a",2),T.delete("b",void 0),u&&(!f.toJSON||!T.has("a",1)||T.has("a",2)||!T.has("a",void 0)||T.has("b"))||!m.size&&(u||!c)||!m.sort||"http://a/c%20d?a=1&c=3"!==f.href||"3"!==m.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!m[e]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://\u0442\u0435\u0441\u0442").host||"#%D0%B1"!==new URL("http://a#\u0431").hash||"a1c3"!==M||"x"!==new URL("http://x",void 0).host})},99554:(E,C,s)=>{"use strict";var r=s(98535);E.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},47960:(E,C,s)=>{"use strict";var r=s(49642),a=s(55756);E.exports=r&&a(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},15086:E=>{"use strict";var C=TypeError;E.exports=function(s,r){if(s<r)throw C("Not enough arguments");return s}},81101:(E,C,s)=>{"use strict";var r=s(70009),a=s(52208),c=r.WeakMap;E.exports=a(c)&&/native code/.test(String(c))},25374:(E,C,s)=>{"use strict";var r=s(13544),a=s(80112),c=s(89734),u=s(48011).f;E.exports=function(e){var f=r.Symbol||(r.Symbol={});a(f,e)||u(f,e,{value:c.f(e)})}},89734:(E,C,s)=>{"use strict";var r=s(91840);C.f=r},91840:(E,C,s)=>{"use strict";var r=s(70009),a=s(64579),c=s(80112),u=s(13708),e=s(98535),f=s(99554),m=r.Symbol,T=a("wks"),M=f?m.for||m:m&&m.withoutSetter||u;E.exports=function(w){return c(T,w)||(T[w]=e&&c(m,w)?m[w]:M("Symbol."+w)),T[w]}},88185:E=>{"use strict";E.exports="\t\n\v\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},70210:(E,C,s)=>{"use strict";var r=s(90513),a=s(23336),c=s(31426),u=s(54945),e=s(65031),f=s(83272),m=s(65162),T=s(51361),M=s(33411),w=s(77732),D=s(41605),U=s(63313),$=s(91840)("toStringTag"),J=Error,F=[].push,X=function(ce,se){var Te,fe=a(de,this);u?Te=u(J(),fe?c(this):de):(Te=fe?this:f(de),m(Te,$,"Error")),void 0!==se&&m(Te,"message",U(se)),w(Te,X,Te.stack,1),arguments.length>2&&M(Te,arguments[2]);var $e=[];return D(ce,F,{that:$e}),m(Te,"errors",$e),Te};u?u(X,J):e(X,J,{name:!0});var de=X.prototype=f(J.prototype,{constructor:T(1,X),message:T(1,""),name:T(1,"AggregateError")});r({global:!0,constructor:!0,arity:2},{AggregateError:X})},10901:(E,C,s)=>{"use strict";s(70210)},1625:(E,C,s)=>{"use strict";var r=s(90513),a=s(55756),c=s(89735),u=s(77293),e=s(70267),f=s(6381),m=s(11594),T=s(46751),M=s(2103),w=s(95913),D=s(91840),U=s(63556),W=D("isConcatSpreadable"),$=U>=51||!a(function(){var X=[];return X[W]=!1,X.concat()[0]!==X}),J=function(X){if(!u(X))return!1;var de=X[W];return void 0!==de?!!de:c(X)};r({target:"Array",proto:!0,arity:1,forced:!$||!w("concat")},{concat:function(de){var fe,Te,$e,ge,Et,V=e(this),ce=M(V,0),se=0;for(fe=-1,$e=arguments.length;fe<$e;fe++)if(J(Et=-1===fe?V:arguments[fe]))for(ge=f(Et),m(se+ge),Te=0;Te<ge;Te++,se++)Te in Et&&T(ce,se,Et[Te]);else m(se+1),T(ce,se++,Et);return ce.length=se,ce}})},70466:(E,C,s)=>{"use strict";var r=s(90513),a=s(68607).every;r({target:"Array",proto:!0,forced:!s(33620)("every")},{every:function(f){return a(this,f,arguments.length>1?arguments[1]:void 0)}})},24990:(E,C,s)=>{"use strict";var r=s(90513),a=s(35277),c=s(82196);r({target:"Array",proto:!0},{fill:a}),c("fill")},56534:(E,C,s)=>{"use strict";var r=s(90513),a=s(68607).filter;r({target:"Array",proto:!0,forced:!s(95913)("filter")},{filter:function(f){return a(this,f,arguments.length>1?arguments[1]:void 0)}})},12773:(E,C,s)=>{"use strict";var r=s(90513),a=s(68607).findIndex,c=s(82196),u="findIndex",e=!0;u in[]&&Array(1)[u](function(){e=!1}),r({target:"Array",proto:!0,forced:e},{findIndex:function(m){return a(this,m,arguments.length>1?arguments[1]:void 0)}}),c(u)},60326:(E,C,s)=>{"use strict";var r=s(90513),a=s(68607).find,c=s(82196),u="find",e=!0;u in[]&&Array(1)[u](function(){e=!1}),r({target:"Array",proto:!0,forced:e},{find:function(m){return a(this,m,arguments.length>1?arguments[1]:void 0)}}),c(u)},98792:(E,C,s)=>{"use strict";var r=s(90513),a=s(8366);r({target:"Array",proto:!0,forced:[].forEach!==a},{forEach:a})},261:(E,C,s)=>{"use strict";var r=s(90513),a=s(51923);r({target:"Array",stat:!0,forced:!s(5253)(function(e){Array.from(e)})},{from:a})},77059:(E,C,s)=>{"use strict";var r=s(90513),a=s(95171).includes,c=s(55756),u=s(82196);r({target:"Array",proto:!0,forced:c(function(){return!Array(1).includes()})},{includes:function(m){return a(this,m,arguments.length>1?arguments[1]:void 0)}}),u("includes")},2795:(E,C,s)=>{"use strict";var r=s(90513),a=s(64350),c=s(95171).indexOf,u=s(33620),e=a([].indexOf),f=!!e&&1/e([1],1,-0)<0;r({target:"Array",proto:!0,forced:f||!u("indexOf")},{indexOf:function(M){var w=arguments.length>1?arguments[1]:void 0;return f?e(this,M,w)||0:c(this,M,w)}})},2862:(E,C,s)=>{"use strict";s(90513)({target:"Array",stat:!0},{isArray:s(89735)})},1285:(E,C,s)=>{"use strict";var r=s(81010),a=s(82196),c=s(84394),u=s(91093),e=s(48011).f,f=s(79077),m=s(28738),T=s(81124),M=s(49642),w="Array Iterator",D=u.set,U=u.getterFor(w);E.exports=f(Array,"Array",function($,J){D(this,{type:w,target:r($),index:0,kind:J})},function(){var $=U(this),J=$.target,F=$.kind,X=$.index++;if(!J||X>=J.length)return $.target=void 0,m(void 0,!0);switch(F){case"keys":return m(X,!1);case"values":return m(J[X],!1)}return m([X,J[X]],!1)},"values");var W=c.Arguments=c.Array;if(a("keys"),a("values"),a("entries"),!T&&M&&"values"!==W.name)try{e(W,"name",{value:"values"})}catch{}},74926:(E,C,s)=>{"use strict";var r=s(90513),a=s(78375);r({target:"Array",proto:!0,forced:a!==[].lastIndexOf},{lastIndexOf:a})},88119:(E,C,s)=>{"use strict";var r=s(90513),a=s(68607).map;r({target:"Array",proto:!0,forced:!s(95913)("map")},{map:function(f){return a(this,f,arguments.length>1?arguments[1]:void 0)}})},93870:(E,C,s)=>{"use strict";var r=s(90513),a=s(70267),c=s(6381),u=s(54716),e=s(11594);r({target:"Array",proto:!0,arity:1,forced:s(55756)(function(){return 4294967297!==[].push.call({length:4294967296},1)})||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(w){return w instanceof TypeError}}()},{push:function(D){var U=a(this),W=c(U),$=arguments.length;e(W+$);for(var J=0;J<$;J++)U[W]=arguments[J],W++;return u(U,W),W}})},46250:(E,C,s)=>{"use strict";var r=s(90513),a=s(88908).left,c=s(33620),u=s(63556);r({target:"Array",proto:!0,forced:!s(3787)&&u>79&&u<83||!c("reduce")},{reduce:function(M){var w=arguments.length;return a(this,M,w,w>1?arguments[1]:void 0)}})},32836:(E,C,s)=>{"use strict";var r=s(90513),a=s(23634),c=s(89735),u=a([].reverse),e=[1,2];r({target:"Array",proto:!0,forced:String(e)===String(e.reverse())},{reverse:function(){return c(this)&&(this.length=this.length),u(this)}})},72999:(E,C,s)=>{"use strict";var r=s(90513),a=s(89735),c=s(81177),u=s(77293),e=s(19401),f=s(6381),m=s(81010),T=s(46751),M=s(91840),w=s(95913),D=s(37591),U=w("slice"),W=M("species"),$=Array,J=Math.max;r({target:"Array",proto:!0,forced:!U},{slice:function(X,de){var Te,$e,ge,V=m(this),ce=f(V),se=e(X,ce),fe=e(void 0===de?ce:de,ce);if(a(V)&&((c(Te=V.constructor)&&(Te===$||a(Te.prototype))||u(Te)&&null===(Te=Te[W]))&&(Te=void 0),Te===$||void 0===Te))return D(V,se,fe);for($e=new(void 0===Te?$:Te)(J(fe-se,0)),ge=0;se<fe;se++,ge++)se in V&&T($e,ge,V[se]);return $e.length=ge,$e}})},50733:(E,C,s)=>{"use strict";var r=s(90513),a=s(68607).some;r({target:"Array",proto:!0,forced:!s(33620)("some")},{some:function(f){return a(this,f,arguments.length>1?arguments[1]:void 0)}})},93639:(E,C,s)=>{"use strict";var r=s(90513),a=s(23634),c=s(61812),u=s(70267),e=s(6381),f=s(67236),m=s(41433),T=s(55756),M=s(84865),w=s(33620),D=s(36410),U=s(5329),W=s(63556),$=s(34545),J=[],F=a(J.sort),X=a(J.push),de=T(function(){J.sort(void 0)}),V=T(function(){J.sort(null)}),ce=w("sort"),se=!T(function(){if(W)return W<70;if(!(D&&D>3)){if(U)return!0;if($)return $<603;var ge,Et,ot,ct,$e="";for(ge=65;ge<76;ge++){switch(Et=String.fromCharCode(ge),ge){case 66:case 69:case 70:case 72:ot=3;break;case 68:case 71:ot=4;break;default:ot=2}for(ct=0;ct<47;ct++)J.push({k:Et+ct,v:ot})}for(J.sort(function(qe,He){return He.v-qe.v}),ct=0;ct<J.length;ct++)Et=J[ct].k.charAt(0),$e.charAt($e.length-1)!==Et&&($e+=Et);return"DGBEFHACIJK"!==$e}});r({target:"Array",proto:!0,forced:de||!V||!ce||!se},{sort:function(ge){void 0!==ge&&c(ge);var Et=u(this);if(se)return void 0===ge?F(Et):F(Et,ge);var qe,He,ot=[],ct=e(Et);for(He=0;He<ct;He++)He in Et&&X(ot,Et[He]);for(M(ot,function($e){return function(ge,Et){return void 0===Et?-1:void 0===ge?1:void 0!==$e?+$e(ge,Et)||0:m(ge)>m(Et)?1:-1}}(ge)),qe=e(ot),He=0;He<qe;)Et[He]=ot[He++];for(;He<ct;)f(Et,He++);return Et}})},63117:(E,C,s)=>{"use strict";var r=s(90513),a=s(70267),c=s(19401),u=s(33912),e=s(6381),f=s(54716),m=s(11594),T=s(2103),M=s(46751),w=s(67236),U=s(95913)("splice"),W=Math.max,$=Math.min;r({target:"Array",proto:!0,forced:!U},{splice:function(F,X){var fe,Te,$e,ge,Et,ot,de=a(this),V=e(de),ce=c(F,V),se=arguments.length;for(0===se?fe=Te=0:1===se?(fe=0,Te=V-ce):(fe=se-2,Te=$(W(u(X),0),V-ce)),m(V+fe-Te),$e=T(de,Te),ge=0;ge<Te;ge++)(Et=ce+ge)in de&&M($e,ge,de[Et]);if($e.length=Te,fe<Te){for(ge=ce;ge<V-Te;ge++)ot=ge+fe,(Et=ge+Te)in de?de[ot]=de[Et]:w(de,ot);for(ge=V;ge>V-Te+fe;ge--)w(de,ge-1)}else if(fe>Te)for(ge=V-Te;ge>ce;ge--)ot=ge+fe-1,(Et=ge+Te-1)in de?de[ot]=de[Et]:w(de,ot);for(ge=0;ge<fe;ge++)de[ge+ce]=arguments[ge+2];return f(de,V-Te+fe),$e}})},34699:(E,C,s)=>{"use strict";var r=s(90513),a=s(23634),c=Date,u=a(c.prototype.getTime);r({target:"Date",stat:!0},{now:function(){return u(new c)}})},68154:()=>{},33379:(E,C,s)=>{"use strict";var r=s(90513),a=s(44197);r({target:"Function",proto:!0,forced:Function.bind!==a},{bind:a})},75071:(E,C,s)=>{"use strict";var r=s(90513),a=s(7365),c=s(2543),u=s(25401),e=s(23634),f=s(55756),m=s(52208),T=s(74717),M=s(37591),w=s(32092),D=s(98535),U=String,W=a("JSON","stringify"),$=e(/./.exec),J=e("".charAt),F=e("".charCodeAt),X=e("".replace),de=e(1..toString),V=/[\uD800-\uDFFF]/g,ce=/^[\uD800-\uDBFF]$/,se=/^[\uDC00-\uDFFF]$/,fe=!D||f(function(){var Et=a("Symbol")("stringify detection");return"[null]"!==W([Et])||"{}"!==W({a:Et})||"{}"!==W(Object(Et))}),Te=f(function(){return'"\\udf06\\ud834"'!==W("\udf06\ud834")||'"\\udead"'!==W("\udead")}),$e=function(Et,ot){var ct=M(arguments),qe=w(ot);if(m(qe)||void 0!==Et&&!T(Et))return ct[1]=function(He,We){if(m(qe)&&(We=u(qe,this,U(He),We)),!T(We))return We},c(W,null,ct)},ge=function(Et,ot,ct){var qe=J(ct,ot-1),He=J(ct,ot+1);return $(ce,Et)&&!$(se,He)||$(se,Et)&&!$(ce,qe)?"\\u"+de(F(Et,0),16):Et};W&&r({target:"JSON",stat:!0,arity:3,forced:fe||Te},{stringify:function(ot,ct,qe){var He=M(arguments),We=c(fe?$e:W,null,He);return Te&&"string"==typeof We?X(We,V,ge):We}})},32300:(E,C,s)=>{"use strict";var r=s(70009);s(85681)(r.JSON,"JSON",!0)},83616:(E,C,s)=>{"use strict";s(85116)("Map",function(c){return function(){return c(this,arguments.length?arguments[0]:void 0)}},s(26650))},85140:(E,C,s)=>{"use strict";s(83616)},63603:()=>{},67234:(E,C,s)=>{"use strict";var r=s(90513),a=s(75791);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==a},{assign:a})},86516:(E,C,s)=>{"use strict";s(90513)({target:"Object",stat:!0,sham:!s(49642)},{create:s(83272)})},36255:(E,C,s)=>{"use strict";var r=s(90513),a=s(49642),c=s(25913).f;r({target:"Object",stat:!0,forced:Object.defineProperties!==c,sham:!a},{defineProperties:c})},84468:(E,C,s)=>{"use strict";var r=s(90513),a=s(49642),c=s(48011).f;r({target:"Object",stat:!0,forced:Object.defineProperty!==c,sham:!a},{defineProperty:c})},86627:(E,C,s)=>{"use strict";var r=s(90513),a=s(55756),c=s(81010),u=s(25525).f,e=s(49642);r({target:"Object",stat:!0,forced:!e||a(function(){u(1)}),sham:!e},{getOwnPropertyDescriptor:function(T,M){return u(c(T),M)}})},78275:(E,C,s)=>{"use strict";var r=s(90513),a=s(49642),c=s(59823),u=s(81010),e=s(25525),f=s(46751);r({target:"Object",stat:!0,sham:!a},{getOwnPropertyDescriptors:function(T){for(var $,J,M=u(T),w=e.f,D=c(M),U={},W=0;D.length>W;)void 0!==(J=w(M,$=D[W++]))&&f(U,$,J);return U}})},37764:(E,C,s)=>{"use strict";var r=s(90513),a=s(98535),c=s(55756),u=s(47238),e=s(70267);r({target:"Object",stat:!0,forced:!a||c(function(){u.f(1)})},{getOwnPropertySymbols:function(T){var M=u.f;return M?M(e(T)):[]}})},31193:(E,C,s)=>{"use strict";var r=s(90513),a=s(55756),c=s(70267),u=s(31426),e=s(37112);r({target:"Object",stat:!0,forced:a(function(){u(1)}),sham:!e},{getPrototypeOf:function(T){return u(c(T))}})},56557:(E,C,s)=>{"use strict";var r=s(90513),a=s(70267),c=s(28474);r({target:"Object",stat:!0,forced:s(55756)(function(){c(1)})},{keys:function(m){return c(a(m))}})},17971:(E,C,s)=>{"use strict";s(90513)({target:"Object",stat:!0},{setPrototypeOf:s(54945)})},17221:()=>{},88923:(E,C,s)=>{"use strict";var r=s(90513),a=s(36805).values;r({target:"Object",stat:!0},{values:function(u){return a(u)}})},84798:(E,C,s)=>{"use strict";var r=s(90513),a=s(25401),c=s(61812),u=s(54256),e=s(26975),f=s(41605);r({target:"Promise",stat:!0,forced:s(95758)},{allSettled:function(M){var w=this,D=u.f(w),U=D.resolve,W=D.reject,$=e(function(){var J=c(w.resolve),F=[],X=0,de=1;f(M,function(V){var ce=X++,se=!1;de++,a(J,w,V).then(function(fe){se||(se=!0,F[ce]={status:"fulfilled",value:fe},--de||U(F))},function(fe){se||(se=!0,F[ce]={status:"rejected",reason:fe},--de||U(F))})}),--de||U(F)});return $.error&&W($.value),D.promise}})},58085:(E,C,s)=>{"use strict";var r=s(90513),a=s(25401),c=s(61812),u=s(54256),e=s(26975),f=s(41605);r({target:"Promise",stat:!0,forced:s(95758)},{all:function(M){var w=this,D=u.f(w),U=D.resolve,W=D.reject,$=e(function(){var J=c(w.resolve),F=[],X=0,de=1;f(M,function(V){var ce=X++,se=!1;de++,a(J,w,V).then(function(fe){se||(se=!0,F[ce]=fe,--de||U(F))},W)}),--de||U(F)});return $.error&&W($.value),D.promise}})},98857:(E,C,s)=>{"use strict";var r=s(90513),a=s(25401),c=s(61812),u=s(7365),e=s(54256),f=s(26975),m=s(41605),T=s(95758),M="No one promise resolved";r({target:"Promise",stat:!0,forced:T},{any:function(D){var U=this,W=u("AggregateError"),$=e.f(U),J=$.resolve,F=$.reject,X=f(function(){var de=c(U.resolve),V=[],ce=0,se=1,fe=!1;m(D,function(Te){var $e=ce++,ge=!1;se++,a(de,U,Te).then(function(Et){ge||fe||(fe=!0,J(Et))},function(Et){ge||fe||(ge=!0,V[$e]=Et,--se||F(new W(V,M)))})}),--se||F(new W(V,M))});return X.error&&F(X.value),$.promise}})},5846:(E,C,s)=>{"use strict";var r=s(90513),a=s(81124),c=s(9936).CONSTRUCTOR,u=s(46456),e=s(7365),f=s(52208),m=s(42915),T=u&&u.prototype;if(r({target:"Promise",proto:!0,forced:c,real:!0},{catch:function(w){return this.then(void 0,w)}}),!a&&f(u)){var M=e("Promise").prototype.catch;T.catch!==M&&m(T,"catch",M,{unsafe:!0})}},38206:(E,C,s)=>{"use strict";var Lr,ir,jr,r=s(90513),a=s(81124),c=s(3787),u=s(70009),e=s(25401),f=s(42915),m=s(54945),T=s(85681),M=s(58014),w=s(61812),D=s(52208),U=s(77293),W=s(54849),$=s(95869),J=s(37352).set,F=s(53460),X=s(52912),de=s(26975),V=s(70918),ce=s(91093),se=s(46456),fe=s(9936),Te=s(54256),$e="Promise",ge=fe.CONSTRUCTOR,Et=fe.REJECTION_EVENT,ot=fe.SUBCLASSING,ct=ce.getterFor($e),qe=ce.set,He=se&&se.prototype,We=se,Le=He,Pt=u.TypeError,it=u.document,Xt=u.process,cn=Te.f,pn=cn,Rn=!!(it&&it.createEvent&&u.dispatchEvent),At="unhandledrejection",br=function(kr){var Ei;return!(!U(kr)||!D(Ei=kr.then))&&Ei},ht=function(kr,Ei){var qr,Hi,Dn,ii=Ei.value,mr=1===Ei.state,pr=mr?kr.ok:kr.fail,Eo=kr.resolve,po=kr.reject,$i=kr.domain;try{pr?(mr||(2===Ei.rejection&&hr(Ei),Ei.rejection=1),!0===pr?qr=ii:($i&&$i.enter(),qr=pr(ii),$i&&($i.exit(),Dn=!0)),qr===kr.promise?po(Pt("Promise-chain cycle")):(Hi=br(qr))?e(Hi,qr,Eo,po):Eo(qr)):po(ii)}catch(Hn){$i&&!Dn&&$i.exit(),po(Hn)}},Wt=function(kr,Ei){kr.notified||(kr.notified=!0,F(function(){for(var mr,ii=kr.reactions;mr=ii.get();)ht(mr,kr);kr.notified=!1,Ei&&!kr.rejection&&wn(kr)}))},Tt=function(kr,Ei,ii){var mr,pr;Rn?((mr=it.createEvent("Event")).promise=Ei,mr.reason=ii,mr.initEvent(kr,!1,!0),u.dispatchEvent(mr)):mr={promise:Ei,reason:ii},!Et&&(pr=u["on"+kr])?pr(mr):kr===At&&X("Unhandled promise rejection",ii)},wn=function(kr){e(J,u,function(){var pr,Ei=kr.facade,ii=kr.value;if(jn(kr)&&(pr=de(function(){c?Xt.emit("unhandledRejection",ii,Ei):Tt(At,Ei,ii)}),kr.rejection=c||jn(kr)?2:1,pr.error))throw pr.value})},jn=function(kr){return 1!==kr.rejection&&!kr.parent},hr=function(kr){e(J,u,function(){var Ei=kr.facade;c?Xt.emit("rejectionHandled",Ei):Tt("rejectionhandled",Ei,kr.value)})},Oi=function(kr,Ei,ii){return function(mr){kr(Ei,mr,ii)}},Wi=function(kr,Ei,ii){kr.done||(kr.done=!0,ii&&(kr=ii),kr.value=Ei,kr.state=2,Wt(kr,!0))},so=function(kr,Ei,ii){if(!kr.done){kr.done=!0,ii&&(kr=ii);try{if(kr.facade===Ei)throw Pt("Promise can't be resolved itself");var mr=br(Ei);mr?F(function(){var pr={done:!1};try{e(mr,Ei,Oi(so,pr,kr),Oi(Wi,pr,kr))}catch(Eo){Wi(pr,Eo,kr)}}):(kr.value=Ei,kr.state=1,Wt(kr,!1))}catch(pr){Wi({done:!1},pr,kr)}}};if(ge&&(We=function(Ei){W(this,Le),w(Ei),e(Lr,this);var ii=ct(this);try{Ei(Oi(so,ii),Oi(Wi,ii))}catch(mr){Wi(ii,mr)}},(Lr=function(Ei){qe(this,{type:$e,done:!1,notified:!1,parent:!1,reactions:new V,rejection:!1,state:0,value:void 0})}).prototype=f(Le=We.prototype,"then",function(Ei,ii){var mr=ct(this),pr=cn($(this,We));return mr.parent=!0,pr.ok=!D(Ei)||Ei,pr.fail=D(ii)&&ii,pr.domain=c?Xt.domain:void 0,0===mr.state?mr.reactions.add(pr):F(function(){ht(pr,mr)}),pr.promise}),ir=function(){var kr=new Lr,Ei=ct(kr);this.promise=kr,this.resolve=Oi(so,Ei),this.reject=Oi(Wi,Ei)},Te.f=cn=function(kr){return kr===We||void 0===kr?new ir(kr):pn(kr)},!a&&D(se)&&He!==Object.prototype)){jr=He.then,ot||f(He,"then",function(Ei,ii){var mr=this;return new We(function(pr,Eo){e(jr,mr,pr,Eo)}).then(Ei,ii)},{unsafe:!0});try{delete He.constructor}catch{}m&&m(He,Le)}r({global:!0,constructor:!0,wrap:!0,forced:ge},{Promise:We}),T(We,$e,!1,!0),M($e)},30185:(E,C,s)=>{"use strict";var r=s(90513),a=s(81124),c=s(46456),u=s(55756),e=s(7365),f=s(52208),m=s(95869),T=s(25524),M=s(42915),w=c&&c.prototype;if(r({target:"Promise",proto:!0,real:!0,forced:!!c&&u(function(){w.finally.call({then:function(){}},function(){})})},{finally:function(W){var $=m(this,e("Promise")),J=f(W);return this.then(J?function(F){return T($,W()).then(function(){return F})}:W,J?function(F){return T($,W()).then(function(){throw F})}:W)}}),!a&&f(c)){var U=e("Promise").prototype.finally;w.finally!==U&&M(w,"finally",U,{unsafe:!0})}},66793:(E,C,s)=>{"use strict";s(38206),s(58085),s(5846),s(44738),s(74767),s(4991)},44738:(E,C,s)=>{"use strict";var r=s(90513),a=s(25401),c=s(61812),u=s(54256),e=s(26975),f=s(41605);r({target:"Promise",stat:!0,forced:s(95758)},{race:function(M){var w=this,D=u.f(w),U=D.reject,W=e(function(){var $=c(w.resolve);f(M,function(J){a($,w,J).then(D.resolve,U)})});return W.error&&U(W.value),D.promise}})},74767:(E,C,s)=>{"use strict";var r=s(90513),a=s(25401),c=s(54256);r({target:"Promise",stat:!0,forced:s(9936).CONSTRUCTOR},{reject:function(f){var m=c.f(this);return a(m.reject,void 0,f),m.promise}})},4991:(E,C,s)=>{"use strict";var r=s(90513),a=s(7365),c=s(81124),u=s(46456),e=s(9936).CONSTRUCTOR,f=s(25524),m=a("Promise"),T=c&&!e;r({target:"Promise",stat:!0,forced:c||e},{resolve:function(w){return f(T&&this===m?u:this,w)}})},19539:(E,C,s)=>{"use strict";var r=s(90513),a=s(7365),c=s(2543),u=s(44197),e=s(54356),f=s(64562),m=s(77293),T=s(83272),M=s(55756),w=a("Reflect","construct"),D=Object.prototype,U=[].push,W=M(function(){function F(){}return!(w(function(){},[],F)instanceof F)}),$=!M(function(){w(function(){})}),J=W||$;r({target:"Reflect",stat:!0,forced:J,sham:J},{construct:function(X,de){e(X),f(de);var V=arguments.length<3?X:e(arguments[2]);if($&&!W)return w(X,de,V);if(X===V){switch(de.length){case 0:return new X;case 1:return new X(de[0]);case 2:return new X(de[0],de[1]);case 3:return new X(de[0],de[1],de[2]);case 4:return new X(de[0],de[1],de[2],de[3])}var ce=[null];return c(U,ce,de),new(c(u,X,ce))}var se=V.prototype,fe=T(m(se)?se:D),Te=c(X,fe,de);return m(Te)?Te:fe}})},60851:(E,C,s)=>{"use strict";var r=s(90513),a=s(25401),c=s(77293),u=s(64562),e=s(27029),f=s(25525),m=s(31426);r({target:"Reflect",stat:!0},{get:function T(M,w){var U,W,D=arguments.length<3?M:arguments[2];return u(M)===D?M[w]:(U=f.f(M,w))?e(U)?U.value:void 0===U.get?void 0:a(U.get,D):c(W=m(M))?T(W,w,D):void 0}})},44864:()=>{},97764:(E,C,s)=>{"use strict";var r=s(90513),a=s(23634),c=s(56421),u=s(67917),e=s(41433),f=s(79668),m=a("".indexOf);r({target:"String",proto:!0,forced:!f("includes")},{includes:function(M){return!!~m(e(u(this)),e(c(M)),arguments.length>1?arguments[1]:void 0)}})},3934:(E,C,s)=>{"use strict";var r=s(61557).charAt,a=s(41433),c=s(91093),u=s(79077),e=s(28738),f="String Iterator",m=c.set,T=c.getterFor(f);u(String,"String",function(M){m(this,{type:f,string:a(M),index:0})},function(){var W,w=T(this),D=w.string,U=w.index;return U>=D.length?e(void 0,!0):(W=r(D,U),w.index+=W.length,e(W,!1))})},3588:(E,C,s)=>{"use strict";s(90513)({target:"String",proto:!0},{repeat:s(53411)})},24655:(E,C,s)=>{"use strict";var J,r=s(90513),a=s(64350),c=s(25525).f,u=s(48869),e=s(41433),f=s(56421),m=s(67917),T=s(79668),M=s(81124),w=a("".startsWith),D=a("".slice),U=Math.min,W=T("startsWith");r({target:"String",proto:!0,forced:!(!M&&!W&&(J=c(String.prototype,"startsWith"),J&&!J.writable)||W)},{startsWith:function(F){var X=e(m(this));f(F);var de=u(U(arguments.length>1?arguments[1]:void 0,X.length)),V=e(F);return w?w(X,V,de):D(X,de,de+V.length)===V}})},90451:(E,C,s)=>{"use strict";var r=s(90513),a=s(89858).trim;r({target:"String",proto:!0,forced:s(85462)("trim")},{trim:function(){return a(this)}})},16426:(E,C,s)=>{"use strict";s(25374)("asyncIterator")},17858:(E,C,s)=>{"use strict";var r=s(90513),a=s(70009),c=s(25401),u=s(23634),e=s(81124),f=s(49642),m=s(98535),T=s(55756),M=s(80112),w=s(23336),D=s(64562),U=s(81010),W=s(62939),$=s(41433),J=s(51361),F=s(83272),X=s(28474),de=s(51518),V=s(62469),ce=s(47238),se=s(25525),fe=s(48011),Te=s(25913),$e=s(25558),ge=s(42915),Et=s(1707),ot=s(64579),ct=s(86066),qe=s(45599),He=s(13708),We=s(91840),Le=s(89734),Pt=s(25374),it=s(56992),Xt=s(85681),cn=s(91093),pn=s(68607).forEach,Rn=ct("hidden"),At="Symbol",qt="prototype",sn=cn.set,fn=cn.getterFor(At),xn=Object[qt],Kr=a.Symbol,Or=Kr&&Kr[qt],Lr=a.TypeError,ir=a.QObject,Qr=se.f,jr=fe.f,br=V.f,ht=$e.f,Wt=u([].push),Tt=ot("symbols"),wn=ot("op-symbols"),jn=ot("wks"),hr=!ir||!ir[qt]||!ir[qt].findChild,Oi=f&&T(function(){return 7!==F(jr({},"a",{get:function(){return jr(this,"a",{value:7}).a}})).a})?function(po,$i,qr){var Hi=Qr(xn,$i);Hi&&delete xn[$i],jr(po,$i,qr),Hi&&po!==xn&&jr(xn,$i,Hi)}:jr,Wi=function(po,$i){var qr=Tt[po]=F(Or);return sn(qr,{type:At,tag:po,description:$i}),f||(qr.description=$i),qr},so=function($i,qr,Hi){$i===xn&&so(wn,qr,Hi),D($i);var Dn=W(qr);return D(Hi),M(Tt,Dn)?(Hi.enumerable?(M($i,Rn)&&$i[Rn][Dn]&&($i[Rn][Dn]=!1),Hi=F(Hi,{enumerable:J(0,!1)})):(M($i,Rn)||jr($i,Rn,J(1,{})),$i[Rn][Dn]=!0),Oi($i,Dn,Hi)):jr($i,Dn,Hi)},kr=function($i,qr){D($i);var Hi=U(qr),Dn=X(Hi).concat(Eo(Hi));return pn(Dn,function(Hn){(!f||c(ii,Hi,Hn))&&so($i,Hn,Hi[Hn])}),$i},ii=function($i){var qr=W($i),Hi=c(ht,this,qr);return!(this===xn&&M(Tt,qr)&&!M(wn,qr))&&(!(Hi||!M(this,qr)||!M(Tt,qr)||M(this,Rn)&&this[Rn][qr])||Hi)},mr=function($i,qr){var Hi=U($i),Dn=W(qr);if(Hi!==xn||!M(Tt,Dn)||M(wn,Dn)){var Hn=Qr(Hi,Dn);return Hn&&M(Tt,Dn)&&!(M(Hi,Rn)&&Hi[Rn][Dn])&&(Hn.enumerable=!0),Hn}},pr=function($i){var qr=br(U($i)),Hi=[];return pn(qr,function(Dn){!M(Tt,Dn)&&!M(qe,Dn)&&Wt(Hi,Dn)}),Hi},Eo=function(po){var $i=po===xn,qr=br($i?wn:U(po)),Hi=[];return pn(qr,function(Dn){M(Tt,Dn)&&(!$i||M(xn,Dn))&&Wt(Hi,Tt[Dn])}),Hi};m||(ge(Or=(Kr=function(){if(w(Or,this))throw Lr("Symbol is not a constructor");var $i=arguments.length&&void 0!==arguments[0]?$(arguments[0]):void 0,qr=He($i),Hi=function(Dn){this===xn&&c(Hi,wn,Dn),M(this,Rn)&&M(this[Rn],qr)&&(this[Rn][qr]=!1),Oi(this,qr,J(1,Dn))};return f&&hr&&Oi(xn,qr,{configurable:!0,set:Hi}),Wi(qr,$i)})[qt],"toString",function(){return fn(this).tag}),ge(Kr,"withoutSetter",function(po){return Wi(He(po),po)}),$e.f=ii,fe.f=so,Te.f=kr,se.f=mr,de.f=V.f=pr,ce.f=Eo,Le.f=function(po){return Wi(We(po),po)},f&&(Et(Or,"description",{configurable:!0,get:function(){return fn(this).description}}),e||ge(xn,"propertyIsEnumerable",ii,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!m,sham:!m},{Symbol:Kr}),pn(X(jn),function(po){Pt(po)}),r({target:At,stat:!0,forced:!m},{useSetter:function(){hr=!0},useSimple:function(){hr=!1}}),r({target:"Object",stat:!0,forced:!m,sham:!f},{create:function($i,qr){return void 0===qr?F($i):kr(F($i),qr)},defineProperty:so,defineProperties:kr,getOwnPropertyDescriptor:mr}),r({target:"Object",stat:!0,forced:!m},{getOwnPropertyNames:pr}),it(),Xt(Kr,At),qe[Rn]=!0},1172:()=>{},12353:(E,C,s)=>{"use strict";var r=s(90513),a=s(7365),c=s(80112),u=s(41433),e=s(64579),f=s(56709),m=e("string-to-symbol-registry"),T=e("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!f},{for:function(M){var w=u(M);if(c(m,w))return m[w];var D=a("Symbol")(w);return m[w]=D,T[D]=w,D}})},99579:(E,C,s)=>{"use strict";s(25374)("hasInstance")},41258:(E,C,s)=>{"use strict";s(25374)("isConcatSpreadable")},2383:(E,C,s)=>{"use strict";s(25374)("iterator")},56728:(E,C,s)=>{"use strict";s(17858),s(12353),s(27632),s(75071),s(37764)},27632:(E,C,s)=>{"use strict";var r=s(90513),a=s(80112),c=s(74717),u=s(7378),e=s(64579),f=s(56709),m=e("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!f},{keyFor:function(M){if(!c(M))throw TypeError(u(M)+" is not a symbol");if(a(m,M))return m[M]}})},64776:(E,C,s)=>{"use strict";s(25374)("matchAll")},44339:(E,C,s)=>{"use strict";s(25374)("match")},88215:(E,C,s)=>{"use strict";s(25374)("replace")},65389:(E,C,s)=>{"use strict";s(25374)("search")},12733:(E,C,s)=>{"use strict";s(25374)("species")},97977:(E,C,s)=>{"use strict";s(25374)("split")},59792:(E,C,s)=>{"use strict";var r=s(25374),a=s(56992);r("toPrimitive"),a()},60242:(E,C,s)=>{"use strict";var r=s(7365),a=s(25374),c=s(85681);a("toStringTag"),c(r("Symbol"),"Symbol")},26291:(E,C,s)=>{"use strict";s(25374)("unscopables")},67670:(E,C,s)=>{"use strict";s(10901)},43548:(E,C,s)=>{"use strict";var r=s(91840),a=s(48011).f,c=r("metadata"),u=Function.prototype;void 0===u[c]&&a(u,c,{value:null})},10509:(E,C,s)=>{"use strict";var r=s(90513),a=s(64902),c=s(60077).remove;r({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var m,e=a(this),f=!0,T=0,M=arguments.length;T<M;T++)m=c(e,arguments[T]),f=f&&m;return!!f}})},30887:(E,C,s)=>{"use strict";var r=s(90513),a=s(64902),c=s(60077),u=c.get,e=c.has,f=c.set;r({target:"Map",proto:!0,real:!0,forced:!0},{emplace:function(T,M){var D,U,w=a(this);return e(w,T)?(D=u(w,T),"update"in M&&(D=M.update(D,T,w),f(w,T,D)),D):(U=M.insert(T,w),f(w,T,U),U)}})},54547:(E,C,s)=>{"use strict";var r=s(90513),a=s(76781),c=s(64902),u=s(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{every:function(f){var m=c(this),T=a(f,arguments.length>1?arguments[1]:void 0);return!1!==u(m,function(M,w){if(!T(M,w,m))return!1},!0)}})},68996:(E,C,s)=>{"use strict";var r=s(90513),a=s(76781),c=s(64902),u=s(60077),e=s(21515),f=u.Map,m=u.set;r({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(M){var w=c(this),D=a(M,arguments.length>1?arguments[1]:void 0),U=new f;return e(w,function(W,$){D(W,$,w)&&m(U,$,W)}),U}})},60176:(E,C,s)=>{"use strict";var r=s(90513),a=s(76781),c=s(64902),u=s(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(f){var m=c(this),T=a(f,arguments.length>1?arguments[1]:void 0),M=u(m,function(w,D){if(T(w,D,m))return{key:D}},!0);return M&&M.key}})},1530:(E,C,s)=>{"use strict";var r=s(90513),a=s(76781),c=s(64902),u=s(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{find:function(f){var m=c(this),T=a(f,arguments.length>1?arguments[1]:void 0),M=u(m,function(w,D){if(T(w,D,m))return{value:w}},!0);return M&&M.value}})},78271:(E,C,s)=>{"use strict";s(90513)({target:"Map",stat:!0,forced:!0},{from:s(83483)})},41554:(E,C,s)=>{"use strict";var r=s(90513),a=s(23634),c=s(61812),u=s(67917),e=s(41605),f=s(60077),m=s(81124),T=f.Map,M=f.has,w=f.get,D=f.set,U=a([].push);r({target:"Map",stat:!0,forced:m},{groupBy:function($,J){u($),c(J);var F=new T,X=0;return e($,function(de){var V=J(de,X++);M(F,V)?U(w(F,V),de):D(F,V,[de])}),F}})},41688:(E,C,s)=>{"use strict";var r=s(90513),a=s(29627),c=s(64902),u=s(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(f){return!0===u(c(this),function(m){if(a(m,f))return!0},!0)}})},92847:(E,C,s)=>{"use strict";var r=s(90513),a=s(25401),c=s(41605),u=s(52208),e=s(61812),f=s(60077).Map;r({target:"Map",stat:!0,forced:!0},{keyBy:function(T,M){var D=new(u(this)?this:f);e(M);var U=e(D.set);return c(T,function(W){a(U,D,M(W),W)}),D}})},17316:(E,C,s)=>{"use strict";var r=s(90513),a=s(64902),c=s(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(e){var f=c(a(this),function(m,T){if(m===e)return{key:T}},!0);return f&&f.key}})},58786:(E,C,s)=>{"use strict";var r=s(90513),a=s(76781),c=s(64902),u=s(60077),e=s(21515),f=u.Map,m=u.set;r({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(M){var w=c(this),D=a(M,arguments.length>1?arguments[1]:void 0),U=new f;return e(w,function(W,$){m(U,D(W,$,w),W)}),U}})},51943:(E,C,s)=>{"use strict";var r=s(90513),a=s(76781),c=s(64902),u=s(60077),e=s(21515),f=u.Map,m=u.set;r({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(M){var w=c(this),D=a(M,arguments.length>1?arguments[1]:void 0),U=new f;return e(w,function(W,$){m(U,$,D(W,$,w))}),U}})},12783:(E,C,s)=>{"use strict";var r=s(90513),a=s(64902),c=s(41605),u=s(60077).set;r({target:"Map",proto:!0,real:!0,arity:1,forced:!0},{merge:function(f){for(var m=a(this),T=arguments.length,M=0;M<T;)c(arguments[M++],function(w,D){u(m,w,D)},{AS_ENTRIES:!0});return m}})},60854:(E,C,s)=>{"use strict";s(90513)({target:"Map",stat:!0,forced:!0},{of:s(13067)})},69773:(E,C,s)=>{"use strict";var r=s(90513),a=s(61812),c=s(64902),u=s(21515),e=TypeError;r({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(m){var T=c(this),M=arguments.length<2,w=M?void 0:arguments[1];if(a(m),u(T,function(D,U){M?(M=!1,w=D):w=m(w,D,U,T)}),M)throw e("Reduce of empty map with no initial value");return w}})},22337:(E,C,s)=>{"use strict";var r=s(90513),a=s(76781),c=s(64902),u=s(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{some:function(f){var m=c(this),T=a(f,arguments.length>1?arguments[1]:void 0);return!0===u(m,function(M,w){if(T(M,w,m))return!0},!0)}})},84131:(E,C,s)=>{"use strict";s(90513)({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:s(57729)})},40199:(E,C,s)=>{"use strict";var r=s(90513),a=s(61812),c=s(64902),u=s(60077),e=TypeError,f=u.get,m=u.has,T=u.set;r({target:"Map",proto:!0,real:!0,forced:!0},{update:function(w,D){var U=c(this),W=arguments.length;a(D);var $=m(U,w);if(!$&&W<3)throw e("Updating absent value");var J=$?f(U,w):a(W>2?arguments[2]:void 0)(w,U);return T(U,w,D(J,w,U)),U}})},69046:(E,C,s)=>{"use strict";s(90513)({target:"Map",proto:!0,real:!0,forced:!0},{upsert:s(57729)})},61127:(E,C,s)=>{"use strict";s(84798)},45975:(E,C,s)=>{"use strict";s(98857)},93114:(E,C,s)=>{"use strict";var r=s(90513),a=s(54256),c=s(26975);r({target:"Promise",stat:!0,forced:!0},{try:function(u){var e=a.f(this),f=c(u);return(f.error?e.reject:e.resolve)(f.value),e.promise}})},68333:(E,C,s)=>{"use strict";var r=s(90513),a=s(54256);r({target:"Promise",stat:!0},{withResolvers:function(){var u=a.f(this);return{promise:u.promise,resolve:u.resolve,reject:u.reject}}})},55461:(E,C,s)=>{"use strict";s(25374)("asyncDispose")},5737:(E,C,s)=>{"use strict";s(25374)("dispose")},70337:(E,C,s)=>{"use strict";s(90513)({target:"Symbol",stat:!0},{isRegisteredSymbol:s(86475)})},61652:(E,C,s)=>{"use strict";s(90513)({target:"Symbol",stat:!0,name:"isRegisteredSymbol"},{isRegistered:s(86475)})},44388:(E,C,s)=>{"use strict";s(90513)({target:"Symbol",stat:!0,forced:!0},{isWellKnownSymbol:s(74110)})},90791:(E,C,s)=>{"use strict";s(90513)({target:"Symbol",stat:!0,name:"isWellKnownSymbol",forced:!0},{isWellKnown:s(74110)})},87097:(E,C,s)=>{"use strict";s(25374)("matcher")},29559:(E,C,s)=>{"use strict";s(25374)("metadataKey")},71985:(E,C,s)=>{"use strict";s(25374)("metadata")},90212:(E,C,s)=>{"use strict";s(25374)("observable")},93770:(E,C,s)=>{"use strict";s(25374)("patternMatch")},47743:(E,C,s)=>{"use strict";s(25374)("replaceAll")},33089:(E,C,s)=>{"use strict";s(1285);var r=s(44125),a=s(70009),c=s(35329),u=s(65162),e=s(84394),m=s(91840)("toStringTag");for(var T in r){var M=a[T],w=M&&M.prototype;w&&c(w)!==m&&u(w,m,T),e[T]=e.Array}},94784:(E,C,s)=>{"use strict";var r=s(90513),a=s(70009),u=s(53814)(a.setInterval,!0);r({global:!0,bind:!0,forced:a.setInterval!==u},{setInterval:u})},36445:(E,C,s)=>{"use strict";var r=s(90513),a=s(70009),u=s(53814)(a.setTimeout,!0);r({global:!0,bind:!0,forced:a.setTimeout!==u},{setTimeout:u})},69280:(E,C,s)=>{"use strict";s(94784),s(36445)},73842:(E,C,s)=>{"use strict";s(1285);var r=s(90513),a=s(70009),c=s(25401),u=s(23634),e=s(49642),f=s(54933),m=s(42915),T=s(1707),M=s(84604),w=s(85681),D=s(14554),U=s(91093),W=s(54849),$=s(52208),J=s(80112),F=s(76781),X=s(35329),de=s(64562),V=s(77293),ce=s(41433),se=s(83272),fe=s(51361),Te=s(88055),$e=s(34014),ge=s(15086),Et=s(91840),ot=s(84865),ct=Et("iterator"),qe="URLSearchParams",He=qe+"Iterator",We=U.set,Le=U.getterFor(qe),Pt=U.getterFor(He),it=Object.getOwnPropertyDescriptor,Xt=function(Dn){if(!e)return a[Dn];var Hn=it(a,Dn);return Hn&&Hn.value},cn=Xt("fetch"),pn=Xt("Request"),Rn=Xt("Headers"),At=pn&&pn.prototype,qt=Rn&&Rn.prototype,sn=a.RegExp,fn=a.TypeError,xn=a.decodeURIComponent,Kr=a.encodeURIComponent,Or=u("".charAt),Lr=u([].join),ir=u([].push),Qr=u("".replace),jr=u([].shift),br=u([].splice),ht=u("".split),Wt=u("".slice),Tt=/\+/g,wn=Array(4),jn=function(Dn){return wn[Dn-1]||(wn[Dn-1]=sn("((?:%[\\da-f]{2}){"+Dn+"})","gi"))},hr=function(Dn){try{return xn(Dn)}catch{return Dn}},Oi=function(Dn){var Hn=Qr(Dn,Tt," "),jt=4;try{return xn(Hn)}catch{for(;jt;)Hn=Qr(Hn,jn(jt--),hr);return Hn}},Wi=/[!'()~]|%20/g,so={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},kr=function(Dn){return so[Dn]},Ei=function(Dn){return Qr(Kr(Dn),Wi,kr)},ii=D(function(Hn,jt){We(this,{type:He,iterator:Te(Le(Hn).entries),kind:jt})},"Iterator",function(){var Hn=Pt(this),jt=Hn.kind,Fe=Hn.iterator.next(),Ie=Fe.value;return Fe.done||(Fe.value="keys"===jt?Ie.key:"values"===jt?Ie.value:[Ie.key,Ie.value]),Fe},!0),mr=function(Dn){this.entries=[],this.url=null,void 0!==Dn&&(V(Dn)?this.parseObject(Dn):this.parseQuery("string"==typeof Dn?"?"===Or(Dn,0)?Wt(Dn,1):Dn:ce(Dn)))};mr.prototype={type:qe,bindURL:function(Dn){this.url=Dn,this.update()},parseObject:function(Dn){var jt,Fe,Ie,et,ze,an,lt,Hn=$e(Dn);if(Hn)for(Fe=(jt=Te(Dn,Hn)).next;!(Ie=c(Fe,jt)).done;){if(et=Te(de(Ie.value)),(an=c(ze=et.next,et)).done||(lt=c(ze,et)).done||!c(ze,et).done)throw fn("Expected sequence with length 2");ir(this.entries,{key:ce(an.value),value:ce(lt.value)})}else for(var Rt in Dn)J(Dn,Rt)&&ir(this.entries,{key:Rt,value:ce(Dn[Rt])})},parseQuery:function(Dn){if(Dn)for(var Fe,Ie,Hn=ht(Dn,"&"),jt=0;jt<Hn.length;)(Fe=Hn[jt++]).length&&(Ie=ht(Fe,"="),ir(this.entries,{key:Oi(jr(Ie)),value:Oi(Lr(Ie,"="))}))},serialize:function(){for(var Fe,Dn=this.entries,Hn=[],jt=0;jt<Dn.length;)Fe=Dn[jt++],ir(Hn,Ei(Fe.key)+"="+Ei(Fe.value));return Lr(Hn,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var pr=function(){W(this,Eo);var jt=We(this,new mr(arguments.length>0?arguments[0]:void 0));e||(this.size=jt.entries.length)},Eo=pr.prototype;if(M(Eo,{append:function(Hn,jt){var Fe=Le(this);ge(arguments.length,2),ir(Fe.entries,{key:ce(Hn),value:ce(jt)}),e||this.length++,Fe.updateURL()},delete:function(Dn){for(var Hn=Le(this),jt=ge(arguments.length,1),Fe=Hn.entries,Ie=ce(Dn),et=jt<2?void 0:arguments[1],ze=void 0===et?et:ce(et),an=0;an<Fe.length;){var lt=Fe[an];if(lt.key!==Ie||void 0!==ze&&lt.value!==ze)an++;else if(br(Fe,an,1),void 0!==ze)break}e||(this.size=Fe.length),Hn.updateURL()},get:function(Hn){var jt=Le(this).entries;ge(arguments.length,1);for(var Fe=ce(Hn),Ie=0;Ie<jt.length;Ie++)if(jt[Ie].key===Fe)return jt[Ie].value;return null},getAll:function(Hn){var jt=Le(this).entries;ge(arguments.length,1);for(var Fe=ce(Hn),Ie=[],et=0;et<jt.length;et++)jt[et].key===Fe&&ir(Ie,jt[et].value);return Ie},has:function(Hn){for(var jt=Le(this).entries,Fe=ge(arguments.length,1),Ie=ce(Hn),et=Fe<2?void 0:arguments[1],ze=void 0===et?et:ce(et),an=0;an<jt.length;){var lt=jt[an++];if(lt.key===Ie&&(void 0===ze||lt.value===ze))return!0}return!1},set:function(Hn,jt){var Fe=Le(this);ge(arguments.length,1);for(var Rt,Ie=Fe.entries,et=!1,ze=ce(Hn),an=ce(jt),lt=0;lt<Ie.length;lt++)(Rt=Ie[lt]).key===ze&&(et?br(Ie,lt--,1):(et=!0,Rt.value=an));et||ir(Ie,{key:ze,value:an}),e||(this.size=Ie.length),Fe.updateURL()},sort:function(){var Hn=Le(this);ot(Hn.entries,function(jt,Fe){return jt.key>Fe.key?1:-1}),Hn.updateURL()},forEach:function(Hn){for(var et,jt=Le(this).entries,Fe=F(Hn,arguments.length>1?arguments[1]:void 0),Ie=0;Ie<jt.length;)Fe((et=jt[Ie++]).value,et.key,this)},keys:function(){return new ii(this,"keys")},values:function(){return new ii(this,"values")},entries:function(){return new ii(this,"entries")}},{enumerable:!0}),m(Eo,ct,Eo.entries,{name:"entries"}),m(Eo,"toString",function(){return Le(this).serialize()},{enumerable:!0}),e&&T(Eo,"size",{get:function(){return Le(this).entries.length},configurable:!0,enumerable:!0}),w(pr,qe),r({global:!0,constructor:!0,forced:!f},{URLSearchParams:pr}),!f&&$(Rn)){var po=u(qt.has),$i=u(qt.set),qr=function(Dn){if(V(Dn)){var jt,Hn=Dn.body;if(X(Hn)===qe)return jt=Dn.headers?new Rn(Dn.headers):new Rn,po(jt,"content-type")||$i(jt,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),se(Dn,{body:fe(0,ce(Hn)),headers:fe(0,jt)})}return Dn};if($(cn)&&r({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(Hn){return cn(Hn,arguments.length>1?qr(arguments[1]):{})}}),$(pn)){var Hi=function(Hn){return W(this,At),new pn(Hn,arguments.length>1?qr(arguments[1]):{})};At.constructor=Hi,Hi.prototype=At,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Hi})}}E.exports={URLSearchParams:pr,getState:Le}},56247:()=>{},82842:()=>{},26953:(E,C,s)=>{"use strict";s(73842)},86023:()=>{},37256:(E,C,s)=>{"use strict";var r=s(90513),a=s(7365),c=s(55756),u=s(15086),e=s(41433),f=s(54933),m=a("URL");r({target:"URL",stat:!0,forced:!(f&&c(function(){m.canParse()}))},{canParse:function(w){var D=u(arguments.length,1),U=e(w),W=D<2||void 0===arguments[1]?void 0:e(arguments[1]);try{return!!new m(U,W)}catch{return!1}}})},80504:(E,C,s)=>{"use strict";s(3934);var Wi,r=s(90513),a=s(49642),c=s(54933),u=s(70009),e=s(76781),f=s(23634),m=s(42915),T=s(1707),M=s(54849),w=s(80112),D=s(75791),U=s(51923),W=s(8681),$=s(61557).codeAt,J=s(26662),F=s(41433),X=s(85681),de=s(15086),V=s(73842),ce=s(91093),se=ce.set,fe=ce.getterFor("URL"),Te=V.URLSearchParams,$e=V.getState,ge=u.URL,Et=u.TypeError,ot=u.parseInt,ct=Math.floor,qe=Math.pow,He=f("".charAt),We=f(/./.exec),Le=f([].join),Pt=f(1..toString),it=f([].pop),Xt=f([].push),cn=f("".replace),pn=f([].shift),Rn=f("".split),At=f("".slice),qt=f("".toLowerCase),sn=f([].unshift),xn="Invalid scheme",Kr="Invalid host",Or="Invalid port",Lr=/[a-z]/i,ir=/[\d+-.a-z]/i,Qr=/\d/,jr=/^0x/i,br=/^[0-7]+$/,ht=/^\d+$/,Wt=/^[\da-f]+$/i,Tt=/[\0\t\n\r #%/:<>?@[\\\]^|]/,wn=/[\0\t\n\r #/:<>?@[\\\]^|]/,jn=/^[\u0000-\u0020]+/,hr=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,Oi=/[\t\n\r]/g,ii=function(dr){var Ni,ti,Vr,wi;if("number"==typeof dr){for(Ni=[],ti=0;ti<4;ti++)sn(Ni,dr%256),dr=ct(dr/256);return Le(Ni,".")}if("object"==typeof dr){for(Ni="",Vr=function(dr){for(var Ni=null,ti=1,Vr=null,wi=0,ji=0;ji<8;ji++)0!==dr[ji]?(wi>ti&&(Ni=Vr,ti=wi),Vr=null,wi=0):(null===Vr&&(Vr=ji),++wi);return wi>ti&&(Ni=Vr,ti=wi),Ni}(dr),ti=0;ti<8;ti++)wi&&0===dr[ti]||(wi&&(wi=!1),Vr===ti?(Ni+=ti?":":"::",wi=!0):(Ni+=Pt(dr[ti],16),ti<7&&(Ni+=":")));return"["+Ni+"]"}return dr},mr={},pr=D({},mr,{" ":1,'"':1,"<":1,">":1,"`":1}),Eo=D({},pr,{"#":1,"?":1,"{":1,"}":1}),po=D({},Eo,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),$i=function(dr,Ni){var ti=$(dr,0);return ti>32&&ti<127&&!w(Ni,dr)?dr:encodeURIComponent(dr)},qr={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Hi=function(dr,Ni){var ti;return 2===dr.length&&We(Lr,He(dr,0))&&(":"===(ti=He(dr,1))||!Ni&&"|"===ti)},Dn=function(dr){var Ni;return dr.length>1&&Hi(At(dr,0,2))&&(2===dr.length||"/"===(Ni=He(dr,2))||"\\"===Ni||"?"===Ni||"#"===Ni)},Hn=function(dr){return"."===dr||"%2e"===qt(dr)},jt=function(dr){return".."===(dr=qt(dr))||"%2e."===dr||".%2e"===dr||"%2e%2e"===dr},Fe={},Ie={},et={},ze={},an={},lt={},Rt={},Pe={},qn={},gr={},Pn={},_r={},Pr={},tr={},Zn={},nr={},Zt={},dn={},Ge={},Ot={},mn={},wr=function(dr,Ni,ti){var wi,ji,Vi,Vr=F(dr);if(Ni){if(ji=this.parse(Vr))throw Et(ji);this.searchParams=null}else{if(void 0!==ti&&(wi=new wr(ti,!0)),ji=this.parse(Vr,null,wi))throw Et(ji);(Vi=$e(new Te)).bindURL(this),this.searchParams=Vi}};wr.prototype={type:"URL",parse:function(dr,Ni,ti){var ro,Vt,bn,Bn,Vr=this,wi=Ni||Fe,ji=0,Vi="",Po=!1,ko=!1,Ir=!1;for(dr=F(dr),Ni||(Vr.scheme="",Vr.username="",Vr.password="",Vr.host=null,Vr.port=null,Vr.path=[],Vr.query=null,Vr.fragment=null,Vr.cannotBeABaseURL=!1,dr=cn(dr,jn,""),dr=cn(dr,hr,"$1")),dr=cn(dr,Oi,""),ro=U(dr);ji<=ro.length;){switch(Vt=ro[ji],wi){case Fe:if(!Vt||!We(Lr,Vt)){if(Ni)return xn;wi=et;continue}Vi+=qt(Vt),wi=Ie;break;case Ie:if(Vt&&(We(ir,Vt)||"+"===Vt||"-"===Vt||"."===Vt))Vi+=qt(Vt);else{if(":"!==Vt){if(Ni)return xn;Vi="",wi=et,ji=0;continue}if(Ni&&(Vr.isSpecial()!==w(qr,Vi)||"file"===Vi&&(Vr.includesCredentials()||null!==Vr.port)||"file"===Vr.scheme&&!Vr.host))return;if(Vr.scheme=Vi,Ni)return void(Vr.isSpecial()&&qr[Vr.scheme]===Vr.port&&(Vr.port=null));Vi="","file"===Vr.scheme?wi=tr:Vr.isSpecial()&&ti&&ti.scheme===Vr.scheme?wi=ze:Vr.isSpecial()?wi=Pe:"/"===ro[ji+1]?(wi=an,ji++):(Vr.cannotBeABaseURL=!0,Xt(Vr.path,""),wi=Ge)}break;case et:if(!ti||ti.cannotBeABaseURL&&"#"!==Vt)return xn;if(ti.cannotBeABaseURL&&"#"===Vt){Vr.scheme=ti.scheme,Vr.path=W(ti.path),Vr.query=ti.query,Vr.fragment="",Vr.cannotBeABaseURL=!0,wi=mn;break}wi="file"===ti.scheme?tr:lt;continue;case ze:if("/"!==Vt||"/"!==ro[ji+1]){wi=lt;continue}wi=qn,ji++;break;case an:if("/"===Vt){wi=gr;break}wi=dn;continue;case lt:if(Vr.scheme=ti.scheme,Vt===Wi)Vr.username=ti.username,Vr.password=ti.password,Vr.host=ti.host,Vr.port=ti.port,Vr.path=W(ti.path),Vr.query=ti.query;else if("/"===Vt||"\\"===Vt&&Vr.isSpecial())wi=Rt;else if("?"===Vt)Vr.username=ti.username,Vr.password=ti.password,Vr.host=ti.host,Vr.port=ti.port,Vr.path=W(ti.path),Vr.query="",wi=Ot;else{if("#"!==Vt){Vr.username=ti.username,Vr.password=ti.password,Vr.host=ti.host,Vr.port=ti.port,Vr.path=W(ti.path),Vr.path.length--,wi=dn;continue}Vr.username=ti.username,Vr.password=ti.password,Vr.host=ti.host,Vr.port=ti.port,Vr.path=W(ti.path),Vr.query=ti.query,Vr.fragment="",wi=mn}break;case Rt:if(!Vr.isSpecial()||"/"!==Vt&&"\\"!==Vt){if("/"!==Vt){Vr.username=ti.username,Vr.password=ti.password,Vr.host=ti.host,Vr.port=ti.port,wi=dn;continue}wi=gr}else wi=qn;break;case Pe:if(wi=qn,"/"!==Vt||"/"!==He(Vi,ji+1))continue;ji++;break;case qn:if("/"!==Vt&&"\\"!==Vt){wi=gr;continue}break;case gr:if("@"===Vt){Po&&(Vi="%40"+Vi),Po=!0,bn=U(Vi);for(var ci=0;ci<bn.length;ci++){var _o=bn[ci];if(":"!==_o||Ir){var go=$i(_o,po);Ir?Vr.password+=go:Vr.username+=go}else Ir=!0}Vi=""}else if(Vt===Wi||"/"===Vt||"?"===Vt||"#"===Vt||"\\"===Vt&&Vr.isSpecial()){if(Po&&""===Vi)return"Invalid authority";ji-=U(Vi).length+1,Vi="",wi=Pn}else Vi+=Vt;break;case Pn:case _r:if(Ni&&"file"===Vr.scheme){wi=nr;continue}if(":"!==Vt||ko){if(Vt===Wi||"/"===Vt||"?"===Vt||"#"===Vt||"\\"===Vt&&Vr.isSpecial()){if(Vr.isSpecial()&&""===Vi)return Kr;if(Ni&&""===Vi&&(Vr.includesCredentials()||null!==Vr.port))return;if(Bn=Vr.parseHost(Vi))return Bn;if(Vi="",wi=Zt,Ni)return;continue}"["===Vt?ko=!0:"]"===Vt&&(ko=!1),Vi+=Vt}else{if(""===Vi)return Kr;if(Bn=Vr.parseHost(Vi))return Bn;if(Vi="",wi=Pr,Ni===_r)return}break;case Pr:if(!We(Qr,Vt)){if(Vt===Wi||"/"===Vt||"?"===Vt||"#"===Vt||"\\"===Vt&&Vr.isSpecial()||Ni){if(""!==Vi){var es=ot(Vi,10);if(es>65535)return Or;Vr.port=Vr.isSpecial()&&es===qr[Vr.scheme]?null:es,Vi=""}if(Ni)return;wi=Zt;continue}return Or}Vi+=Vt;break;case tr:if(Vr.scheme="file","/"===Vt||"\\"===Vt)wi=Zn;else{if(!ti||"file"!==ti.scheme){wi=dn;continue}switch(Vt){case Wi:Vr.host=ti.host,Vr.path=W(ti.path),Vr.query=ti.query;break;case"?":Vr.host=ti.host,Vr.path=W(ti.path),Vr.query="",wi=Ot;break;case"#":Vr.host=ti.host,Vr.path=W(ti.path),Vr.query=ti.query,Vr.fragment="",wi=mn;break;default:Dn(Le(W(ro,ji),""))||(Vr.host=ti.host,Vr.path=W(ti.path),Vr.shortenPath()),wi=dn;continue}}break;case Zn:if("/"===Vt||"\\"===Vt){wi=nr;break}ti&&"file"===ti.scheme&&!Dn(Le(W(ro,ji),""))&&(Hi(ti.path[0],!0)?Xt(Vr.path,ti.path[0]):Vr.host=ti.host),wi=dn;continue;case nr:if(Vt===Wi||"/"===Vt||"\\"===Vt||"?"===Vt||"#"===Vt){if(!Ni&&Hi(Vi))wi=dn;else if(""===Vi){if(Vr.host="",Ni)return;wi=Zt}else{if(Bn=Vr.parseHost(Vi))return Bn;if("localhost"===Vr.host&&(Vr.host=""),Ni)return;Vi="",wi=Zt}continue}Vi+=Vt;break;case Zt:if(Vr.isSpecial()){if(wi=dn,"/"!==Vt&&"\\"!==Vt)continue}else if(Ni||"?"!==Vt)if(Ni||"#"!==Vt){if(Vt!==Wi&&(wi=dn,"/"!==Vt))continue}else Vr.fragment="",wi=mn;else Vr.query="",wi=Ot;break;case dn:if(Vt===Wi||"/"===Vt||"\\"===Vt&&Vr.isSpecial()||!Ni&&("?"===Vt||"#"===Vt)){if(jt(Vi)?(Vr.shortenPath(),"/"!==Vt&&!("\\"===Vt&&Vr.isSpecial())&&Xt(Vr.path,"")):Hn(Vi)?"/"!==Vt&&!("\\"===Vt&&Vr.isSpecial())&&Xt(Vr.path,""):("file"===Vr.scheme&&!Vr.path.length&&Hi(Vi)&&(Vr.host&&(Vr.host=""),Vi=He(Vi,0)+":"),Xt(Vr.path,Vi)),Vi="","file"===Vr.scheme&&(Vt===Wi||"?"===Vt||"#"===Vt))for(;Vr.path.length>1&&""===Vr.path[0];)pn(Vr.path);"?"===Vt?(Vr.query="",wi=Ot):"#"===Vt&&(Vr.fragment="",wi=mn)}else Vi+=$i(Vt,Eo);break;case Ge:"?"===Vt?(Vr.query="",wi=Ot):"#"===Vt?(Vr.fragment="",wi=mn):Vt!==Wi&&(Vr.path[0]+=$i(Vt,mr));break;case Ot:Ni||"#"!==Vt?Vt!==Wi&&("'"===Vt&&Vr.isSpecial()?Vr.query+="%27":Vr.query+="#"===Vt?"%23":$i(Vt,mr)):(Vr.fragment="",wi=mn);break;case mn:Vt!==Wi&&(Vr.fragment+=$i(Vt,pr))}ji++}},parseHost:function(dr){var Ni,ti,Vr;if("["===He(dr,0)){if("]"!==He(dr,dr.length-1)||(Ni=function(dr){var ji,Vi,Po,ko,Ir,ro,Vt,Ni=[0,0,0,0,0,0,0,0],ti=0,Vr=null,wi=0,bn=function(){return He(dr,wi)};if(":"===bn()){if(":"!==He(dr,1))return;wi+=2,Vr=++ti}for(;bn();){if(8===ti)return;if(":"!==bn()){for(ji=Vi=0;Vi<4&&We(Wt,bn());)ji=16*ji+ot(bn(),16),wi++,Vi++;if("."===bn()){if(0===Vi||(wi-=Vi,ti>6))return;for(Po=0;bn();){if(ko=null,Po>0){if(!("."===bn()&&Po<4))return;wi++}if(!We(Qr,bn()))return;for(;We(Qr,bn());){if(Ir=ot(bn(),10),null===ko)ko=Ir;else{if(0===ko)return;ko=10*ko+Ir}if(ko>255)return;wi++}Ni[ti]=256*Ni[ti]+ko,(2==++Po||4===Po)&&ti++}if(4!==Po)return;break}if(":"===bn()){if(wi++,!bn())return}else if(bn())return;Ni[ti++]=ji}else{if(null!==Vr)return;wi++,Vr=++ti}}if(null!==Vr)for(ro=ti-Vr,ti=7;0!==ti&&ro>0;)Vt=Ni[ti],Ni[ti--]=Ni[Vr+ro-1],Ni[Vr+--ro]=Vt;else if(8!==ti)return;return Ni}(At(dr,1,-1)),!Ni))return Kr;this.host=Ni}else if(this.isSpecial()){if(dr=J(dr),We(Tt,dr)||(Ni=function(dr){var ti,Vr,wi,ji,Vi,Po,ko,Ni=Rn(dr,".");if(Ni.length&&""===Ni[Ni.length-1]&&Ni.length--,(ti=Ni.length)>4)return dr;for(Vr=[],wi=0;wi<ti;wi++){if(""===(ji=Ni[wi]))return dr;if(Vi=10,ji.length>1&&"0"===He(ji,0)&&(Vi=We(jr,ji)?16:8,ji=At(ji,8===Vi?1:2)),""===ji)Po=0;else{if(!We(10===Vi?ht:8===Vi?br:Wt,ji))return dr;Po=ot(ji,Vi)}Xt(Vr,Po)}for(wi=0;wi<ti;wi++)if(Po=Vr[wi],wi===ti-1){if(Po>=qe(256,5-ti))return null}else if(Po>255)return null;for(ko=it(Vr),wi=0;wi<Vr.length;wi++)ko+=Vr[wi]*qe(256,3-wi);return ko}(dr),null===Ni))return Kr;this.host=Ni}else{if(We(wn,dr))return Kr;for(Ni="",ti=U(dr),Vr=0;Vr<ti.length;Vr++)Ni+=$i(ti[Vr],mr);this.host=Ni}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"===this.scheme},includesCredentials:function(){return""!==this.username||""!==this.password},isSpecial:function(){return w(qr,this.scheme)},shortenPath:function(){var dr=this.path,Ni=dr.length;Ni&&("file"!==this.scheme||1!==Ni||!Hi(dr[0],!0))&&dr.length--},serialize:function(){var dr=this,Ni=dr.scheme,ti=dr.username,Vr=dr.password,wi=dr.host,ji=dr.port,Vi=dr.path,Po=dr.query,ko=dr.fragment,Ir=Ni+":";return null!==wi?(Ir+="//",dr.includesCredentials()&&(Ir+=ti+(Vr?":"+Vr:"")+"@"),Ir+=ii(wi),null!==ji&&(Ir+=":"+ji)):"file"===Ni&&(Ir+="//"),Ir+=dr.cannotBeABaseURL?Vi[0]:Vi.length?"/"+Le(Vi,"/"):"",null!==Po&&(Ir+="?"+Po),null!==ko&&(Ir+="#"+ko),Ir},setHref:function(dr){var Ni=this.parse(dr);if(Ni)throw Et(Ni);this.searchParams.update()},getOrigin:function(){var dr=this.scheme,Ni=this.port;if("blob"===dr)try{return new Ti(dr.path[0]).origin}catch{return"null"}return"file"!==dr&&this.isSpecial()?dr+"://"+ii(this.host)+(null!==Ni?":"+Ni:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(dr){this.parse(F(dr)+":",Fe)},getUsername:function(){return this.username},setUsername:function(dr){var Ni=U(F(dr));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var ti=0;ti<Ni.length;ti++)this.username+=$i(Ni[ti],po)}},getPassword:function(){return this.password},setPassword:function(dr){var Ni=U(F(dr));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var ti=0;ti<Ni.length;ti++)this.password+=$i(Ni[ti],po)}},getHost:function(){var dr=this.host,Ni=this.port;return null===dr?"":null===Ni?ii(dr):ii(dr)+":"+Ni},setHost:function(dr){this.cannotBeABaseURL||this.parse(dr,Pn)},getHostname:function(){var dr=this.host;return null===dr?"":ii(dr)},setHostname:function(dr){this.cannotBeABaseURL||this.parse(dr,_r)},getPort:function(){var dr=this.port;return null===dr?"":F(dr)},setPort:function(dr){this.cannotHaveUsernamePasswordPort()||(""===(dr=F(dr))?this.port=null:this.parse(dr,Pr))},getPathname:function(){var dr=this.path;return this.cannotBeABaseURL?dr[0]:dr.length?"/"+Le(dr,"/"):""},setPathname:function(dr){this.cannotBeABaseURL||(this.path=[],this.parse(dr,Zt))},getSearch:function(){var dr=this.query;return dr?"?"+dr:""},setSearch:function(dr){""===(dr=F(dr))?this.query=null:("?"===He(dr,0)&&(dr=At(dr,1)),this.query="",this.parse(dr,Ot)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var dr=this.fragment;return dr?"#"+dr:""},setHash:function(dr){""!==(dr=F(dr))?("#"===He(dr,0)&&(dr=At(dr,1)),this.fragment="",this.parse(dr,mn)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Ti=function(Ni){var ti=M(this,Ci),Vr=de(arguments.length,1)>1?arguments[1]:void 0,wi=se(ti,new wr(Ni,!1,Vr));a||(ti.href=wi.serialize(),ti.origin=wi.getOrigin(),ti.protocol=wi.getProtocol(),ti.username=wi.getUsername(),ti.password=wi.getPassword(),ti.host=wi.getHost(),ti.hostname=wi.getHostname(),ti.port=wi.getPort(),ti.pathname=wi.getPathname(),ti.search=wi.getSearch(),ti.searchParams=wi.getSearchParams(),ti.hash=wi.getHash())},Ci=Ti.prototype,Ai=function(dr,Ni){return{get:function(){return fe(this)[dr]()},set:Ni&&function(ti){return fe(this)[Ni](ti)},configurable:!0,enumerable:!0}};if(a&&(T(Ci,"href",Ai("serialize","setHref")),T(Ci,"origin",Ai("getOrigin")),T(Ci,"protocol",Ai("getProtocol","setProtocol")),T(Ci,"username",Ai("getUsername","setUsername")),T(Ci,"password",Ai("getPassword","setPassword")),T(Ci,"host",Ai("getHost","setHost")),T(Ci,"hostname",Ai("getHostname","setHostname")),T(Ci,"port",Ai("getPort","setPort")),T(Ci,"pathname",Ai("getPathname","setPathname")),T(Ci,"search",Ai("getSearch","setSearch")),T(Ci,"searchParams",Ai("getSearchParams")),T(Ci,"hash",Ai("getHash","setHash"))),m(Ci,"toJSON",function(){return fe(this).serialize()},{enumerable:!0}),m(Ci,"toString",function(){return fe(this).serialize()},{enumerable:!0}),ge){var Ko=ge.createObjectURL,_s=ge.revokeObjectURL;Ko&&m(Ti,"createObjectURL",e(Ko,ge)),_s&&m(Ti,"revokeObjectURL",e(_s,ge))}X(Ti,"URL"),r({global:!0,constructor:!0,forced:!c,sham:!a},{URL:Ti})},95981:(E,C,s)=>{"use strict";s(80504)},71324:()=>{},75242:(E,C,s)=>{"use strict";var r=s(74771);E.exports=r},10323:(E,C,s)=>{"use strict";var r=s(8412);E.exports=r},99940:(E,C,s)=>{"use strict";var r=s(399);E.exports=r},89919:(E,C,s)=>{"use strict";var r=s(98812);E.exports=r},14869:(E,C,s)=>{"use strict";var r=s(33195);E.exports=r},4475:(E,C,s)=>{"use strict";var r=s(46332);E.exports=r},38762:(E,C,s)=>{"use strict";var r=s(42618);E.exports=r},8748:(E,C,s)=>{"use strict";var r=s(63791);s(33089),E.exports=r},71873:(E,C,s)=>{"use strict";var r=s(69029);E.exports=r},61599:(E,C,s)=>{"use strict";var r=s(28924);E.exports=r},34097:(E,C,s)=>{"use strict";s(33089);var r=s(35329),a=s(80112),c=s(23336),u=s(99940),e=Array.prototype,f={DOMTokenList:!0,NodeList:!0};E.exports=function(m){var T=m.entries;return m===e||c(e,m)&&T===e.entries||a(f,r(m))?u:T}},15149:(E,C,s)=>{"use strict";var r=s(98709);E.exports=r},83361:(E,C,s)=>{"use strict";var r=s(65991);E.exports=r},19095:(E,C,s)=>{"use strict";var r=s(64158);E.exports=r},71420:(E,C,s)=>{"use strict";var r=s(91799);E.exports=r},13178:(E,C,s)=>{"use strict";var r=s(26155);E.exports=r},52049:(E,C,s)=>{"use strict";s(33089);var r=s(35329),a=s(80112),c=s(23336),u=s(89919),e=Array.prototype,f={DOMTokenList:!0,NodeList:!0};E.exports=function(m){var T=m.forEach;return m===e||c(e,m)&&T===e.forEach||a(f,r(m))?u:T}},83655:(E,C,s)=>{"use strict";var r=s(33758);E.exports=r},87054:(E,C,s)=>{"use strict";var r=s(7592);E.exports=r},51946:(E,C,s)=>{"use strict";s(33089);var r=s(35329),a=s(80112),c=s(23336),u=s(14869),e=Array.prototype,f={DOMTokenList:!0,NodeList:!0};E.exports=function(m){var T=m.keys;return m===e||c(e,m)&&T===e.keys||a(f,r(m))?u:T}},40764:(E,C,s)=>{"use strict";var r=s(17480);E.exports=r},81214:(E,C,s)=>{"use strict";var r=s(20681);E.exports=r},30252:(E,C,s)=>{"use strict";var r=s(801);E.exports=r},50881:(E,C,s)=>{"use strict";var r=s(90949);E.exports=r},38813:(E,C,s)=>{"use strict";var r=s(99316);E.exports=r},45284:(E,C,s)=>{"use strict";var r=s(62212);E.exports=r},70157:(E,C,s)=>{"use strict";var r=s(49073);E.exports=r},3502:(E,C,s)=>{"use strict";var r=s(24146);E.exports=r},81610:(E,C,s)=>{"use strict";var r=s(40104);E.exports=r},19543:(E,C,s)=>{"use strict";var r=s(3555);E.exports=r},74046:(E,C,s)=>{"use strict";var r=s(42475);E.exports=r},13731:(E,C,s)=>{"use strict";var r=s(65786);E.exports=r},80129:(E,C,s)=>{"use strict";s(33089);var r=s(35329),a=s(80112),c=s(23336),u=s(4475),e=Array.prototype,f={DOMTokenList:!0,NodeList:!0};E.exports=function(m){var T=m.values;return m===e||c(e,m)&&T===e.values||a(f,r(m))?u:T}},43720:(E,C,s)=>{"use strict";var r=s(66306);E.exports=r},640:(E,C,s)=>{"use strict";var r=s(31845);s(33089),E.exports=r},50320:(E,C,s)=>{"use strict";var r=s(44168);E.exports=r},93006:(E,C,s)=>{"use strict";var r=s(25852);E.exports=r},36226:(E,C,s)=>{"use strict";var r=s(24457);E.exports=r},21968:(E,C,s)=>{"use strict";var r=s(99671);E.exports=r},87259:(E,C,s)=>{"use strict";var r=s(38007);E.exports=r},62021:(E,C,s)=>{"use strict";var r=s(57432);E.exports=r},57682:(E,C,s)=>{"use strict";var r=s(36541);E.exports=r},94222:(E,C,s)=>{"use strict";var r=s(17303);E.exports=r},1162:(E,C,s)=>{"use strict";var r=s(62149);E.exports=r},82805:(E,C,s)=>{"use strict";var r=s(86537);E.exports=r},70809:(E,C,s)=>{"use strict";var r=s(79553);E.exports=r},26498:(E,C,s)=>{"use strict";var r=s(80092);s(33089),E.exports=r},44850:(E,C,s)=>{"use strict";var r=s(472);E.exports=r},9634:(E,C,s)=>{"use strict";var r=s(4678);E.exports=r},12118:(E,C,s)=>{"use strict";s(69280);var r=s(13544);E.exports=r.setTimeout},96551:(E,C,s)=>{"use strict";var r=s(61697);s(33089),E.exports=r},98908:(E,C,s)=>{"use strict";var r=s(42497);s(33089),E.exports=r},55434:(E,C,s)=>{"use strict";var r=s(50681);E.exports=r},70906:(E,C,s)=>{"use strict";var r=s(75081);E.exports=r},41530:(E,C,s)=>{"use strict";s(26953),s(56247),s(82842),s(86023);var r=s(13544);E.exports=r.URLSearchParams},75081:(E,C,s)=>{"use strict";s(41530),s(95981),s(37256),s(71324);var r=s(13544);E.exports=r.URL},52243:function(E){var C;C=typeof global<"u"?global:this,E.exports=function(C){if(C.CSS&&C.CSS.escape)return C.CSS.escape;var s=function(r){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var e,a=String(r),c=a.length,u=-1,f="",m=a.charCodeAt(0);++u<c;)0!=(e=a.charCodeAt(u))?f+=e>=1&&e<=31||127==e||0==u&&e>=48&&e<=57||1==u&&e>=48&&e<=57&&45==m?"\\"+e.toString(16)+" ":0==u&&1==c&&45==e||!(e>=128||45==e||95==e||e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122)?"\\"+a.charAt(u):a.charAt(u):f+="\ufffd";return f};return C.CSS||(C.CSS={}),C.CSS.escape=s,s}(C)},97057:(E,C,s)=>{"use strict";s.d(C,{qY:()=>U});var r=function(){for(var V=0,ce=0,se=arguments.length;ce<se;ce++)V+=arguments[ce].length;var fe=Array(V),Te=0;for(ce=0;ce<se;ce++)for(var $e=arguments[ce],ge=0,Et=$e.length;ge<Et;ge++,Te++)fe[Te]=$e[ge];return fe},a=function V(ce,se,fe){this.name=ce,this.version=se,this.os=fe,this.type="browser"},c=function V(ce){this.version=ce,this.type="node",this.name="node",this.os=process.platform},u=function V(ce,se,fe,Te){this.name=ce,this.version=se,this.os=fe,this.bot=Te,this.type="bot-device"},e=function V(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null},f=function V(){this.type="react-native",this.name="react-native",this.version=null,this.os=null},T=/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,M=3,w=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],D=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function U(V){return V?J(V):typeof document>"u"&&typeof navigator<"u"&&"ReactNative"===navigator.product?new f:typeof navigator<"u"?J(navigator.userAgent):function X(){return typeof process<"u"&&process.version?new c(process.version.slice(1)):null}()}function J(V){var ce=function W(V){return""!==V&&w.reduce(function(ce,se){var fe=se[0];if(ce)return ce;var $e=se[1].exec(V);return!!$e&&[fe,$e]},!1)}(V);if(!ce)return null;var se=ce[0],fe=ce[1];if("searchbot"===se)return new e;var Te=fe[1]&&fe[1].split(/[._]/).slice(0,3);Te?Te.length<M&&(Te=r(Te,function de(V){for(var ce=[],se=0;se<V;se++)ce.push("0");return ce}(M-Te.length))):Te=[];var $e=Te.join("."),ge=function F(V){for(var ce=0,se=D.length;ce<se;ce++){var fe=D[ce],Te=fe[0];if(fe[1].exec(V))return Te}return null}(V),Et=T.exec(V);return Et&&Et[1]?new u(se,$e,ge,Et[1]):new a(se,$e,ge)}},23358:function(E){E.exports=function(){"use strict";var s=Object.hasOwnProperty,r=Object.setPrototypeOf,a=Object.isFrozen,c=Object.getPrototypeOf,u=Object.getOwnPropertyDescriptor,e=Object.freeze,f=Object.seal,m=Object.create,T=typeof Reflect<"u"&&Reflect,M=T.apply,w=T.construct;M||(M=function(ht,Wt,Tt){return ht.apply(Wt,Tt)}),e||(e=function(ht){return ht}),f||(f=function(ht){return ht}),w||(w=function(ht,Wt){return new(Function.prototype.bind.apply(ht,[null].concat(function C(br){if(Array.isArray(br)){for(var ht=0,Wt=Array(br.length);ht<br.length;ht++)Wt[ht]=br[ht];return Wt}return Array.from(br)}(Wt))))});var D=se(Array.prototype.forEach),U=se(Array.prototype.pop),W=se(Array.prototype.push),$=se(String.prototype.toLowerCase),J=se(String.prototype.match),F=se(String.prototype.replace),X=se(String.prototype.indexOf),de=se(String.prototype.trim),V=se(RegExp.prototype.test),ce=function fe(br){return function(){for(var ht=arguments.length,Wt=Array(ht),Tt=0;Tt<ht;Tt++)Wt[Tt]=arguments[Tt];return w(br,Wt)}}(TypeError);function se(br){return function(ht){for(var Wt=arguments.length,Tt=Array(Wt>1?Wt-1:0),wn=1;wn<Wt;wn++)Tt[wn-1]=arguments[wn];return M(br,ht,Tt)}}function Te(br,ht){r&&r(br,null);for(var Wt=ht.length;Wt--;){var Tt=ht[Wt];if("string"==typeof Tt){var wn=$(Tt);wn!==Tt&&(a(ht)||(ht[Wt]=wn),Tt=wn)}br[Tt]=!0}return br}function $e(br){var ht=m(null),Wt=void 0;for(Wt in br)M(s,br,[Wt])&&(ht[Wt]=br[Wt]);return ht}function ge(br,ht){for(;null!==br;){var Wt=u(br,ht);if(Wt){if(Wt.get)return se(Wt.get);if("function"==typeof Wt.value)return se(Wt.value)}br=c(br)}return function Tt(wn){return console.warn("fallback value for",wn),null}}var Et=e(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),ot=e(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),ct=e(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),qe=e(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),He=e(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),We=e(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Le=e(["#text"]),Pt=e(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),it=e(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Xt=e(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),cn=e(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),pn=f(/\{\{[\s\S]*|[\s\S]*\}\}/gm),Rn=f(/<%[\s\S]*|[\s\S]*%>/gm),At=f(/^data-[\-\w.\u00B7-\uFFFF]/),qt=f(/^aria-[\-\w]+$/),sn=f(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),fn=f(/^(?:\w+script|data):/i),xn=f(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Kr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(br){return typeof br}:function(br){return br&&"function"==typeof Symbol&&br.constructor===Symbol&&br!==Symbol.prototype?"symbol":typeof br};function Or(br){if(Array.isArray(br)){for(var ht=0,Wt=Array(br.length);ht<br.length;ht++)Wt[ht]=br[ht];return Wt}return Array.from(br)}var Lr=function(){return typeof window>"u"?null:window},ir=function(ht,Wt){if("object"!==(typeof ht>"u"?"undefined":Kr(ht))||"function"!=typeof ht.createPolicy)return null;var Tt=null,wn="data-tt-policy-suffix";Wt.currentScript&&Wt.currentScript.hasAttribute(wn)&&(Tt=Wt.currentScript.getAttribute(wn));var jn="dompurify"+(Tt?"#"+Tt:"");try{return ht.createPolicy(jn,{createHTML:function(Oi){return Oi}})}catch{return console.warn("TrustedTypes policy "+jn+" could not be created."),null}};return function Qr(){var br=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Lr(),ht=function(zr){return Qr(zr)};if(ht.version="2.3.3",ht.removed=[],!br||!br.document||9!==br.document.nodeType)return ht.isSupported=!1,ht;var Wt=br.document,Tt=br.document,wn=br.DocumentFragment,jn=br.HTMLTemplateElement,hr=br.Node,Oi=br.Element,Wi=br.NodeFilter,so=br.NamedNodeMap,kr=void 0===so?br.NamedNodeMap||br.MozNamedAttrMap:so,Ei=br.Text,ii=br.Comment,mr=br.DOMParser,pr=br.trustedTypes,Eo=Oi.prototype,po=ge(Eo,"cloneNode"),$i=ge(Eo,"nextSibling"),qr=ge(Eo,"childNodes"),Hi=ge(Eo,"parentNode");if("function"==typeof jn){var Dn=Tt.createElement("template");Dn.content&&Dn.content.ownerDocument&&(Tt=Dn.content.ownerDocument)}var Hn=ir(pr,Wt),jt=Hn&&wi?Hn.createHTML(""):"",Ie=Tt.implementation,et=Tt.createNodeIterator,ze=Tt.createDocumentFragment,an=Tt.getElementsByTagName,lt=Wt.importNode,Rt={};try{Rt=$e(Tt).documentMode?Tt.documentMode:{}}catch{}var Pe={};ht.isSupported="function"==typeof Hi&&Ie&&typeof Ie.createHTMLDocument<"u"&&9!==Rt;var qn=pn,gr=Rn,Pn=At,_r=qt,Pr=fn,tr=xn,Zn=sn,nr=null,Zt=Te({},[].concat(Or(Et),Or(ot),Or(ct),Or(He),Or(Le))),dn=null,Ge=Te({},[].concat(Or(Pt),Or(it),Or(Xt),Or(cn))),Ot=null,mn=null,wr=!0,Ti=!0,Ci=!1,Ai=!1,Ko=!1,_s=!1,dr=!1,Ni=!1,ti=!1,Vr=!0,wi=!1,ji=!0,Vi=!0,Po=!1,ko={},Ir=null,ro=Te({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),Vt=null,bn=Te({},["audio","video","img","source","image","track"]),Bn=null,ci=Te({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),_o="http://www.w3.org/1998/Math/MathML",go="http://www.w3.org/2000/svg",es="http://www.w3.org/1999/xhtml",ts=es,jo=!1,ss=void 0,gs=["application/xhtml+xml","text/html"],la=void 0,Ro=null,jl=Tt.createElement("form"),gl=function(zr){Ro&&Ro===zr||((!zr||"object"!==(typeof zr>"u"?"undefined":Kr(zr)))&&(zr={}),zr=$e(zr),nr="ALLOWED_TAGS"in zr?Te({},zr.ALLOWED_TAGS):Zt,dn="ALLOWED_ATTR"in zr?Te({},zr.ALLOWED_ATTR):Ge,Bn="ADD_URI_SAFE_ATTR"in zr?Te($e(ci),zr.ADD_URI_SAFE_ATTR):ci,Vt="ADD_DATA_URI_TAGS"in zr?Te($e(bn),zr.ADD_DATA_URI_TAGS):bn,Ir="FORBID_CONTENTS"in zr?Te({},zr.FORBID_CONTENTS):ro,Ot="FORBID_TAGS"in zr?Te({},zr.FORBID_TAGS):{},mn="FORBID_ATTR"in zr?Te({},zr.FORBID_ATTR):{},ko="USE_PROFILES"in zr&&zr.USE_PROFILES,wr=!1!==zr.ALLOW_ARIA_ATTR,Ti=!1!==zr.ALLOW_DATA_ATTR,Ci=zr.ALLOW_UNKNOWN_PROTOCOLS||!1,Ai=zr.SAFE_FOR_TEMPLATES||!1,Ko=zr.WHOLE_DOCUMENT||!1,Ni=zr.RETURN_DOM||!1,ti=zr.RETURN_DOM_FRAGMENT||!1,Vr=!1!==zr.RETURN_DOM_IMPORT,wi=zr.RETURN_TRUSTED_TYPE||!1,dr=zr.FORCE_BODY||!1,ji=!1!==zr.SANITIZE_DOM,Vi=!1!==zr.KEEP_CONTENT,Po=zr.IN_PLACE||!1,Zn=zr.ALLOWED_URI_REGEXP||Zn,ts=zr.NAMESPACE||es,ss=ss=-1===gs.indexOf(zr.PARSER_MEDIA_TYPE)?"text/html":zr.PARSER_MEDIA_TYPE,la="application/xhtml+xml"===ss?function(io){return io}:$,Ai&&(Ti=!1),ti&&(Ni=!0),ko&&(nr=Te({},[].concat(Or(Le))),dn=[],!0===ko.html&&(Te(nr,Et),Te(dn,Pt)),!0===ko.svg&&(Te(nr,ot),Te(dn,it),Te(dn,cn)),!0===ko.svgFilters&&(Te(nr,ct),Te(dn,it),Te(dn,cn)),!0===ko.mathMl&&(Te(nr,He),Te(dn,Xt),Te(dn,cn))),zr.ADD_TAGS&&(nr===Zt&&(nr=$e(nr)),Te(nr,zr.ADD_TAGS)),zr.ADD_ATTR&&(dn===Ge&&(dn=$e(dn)),Te(dn,zr.ADD_ATTR)),zr.ADD_URI_SAFE_ATTR&&Te(Bn,zr.ADD_URI_SAFE_ATTR),zr.FORBID_CONTENTS&&(Ir===ro&&(Ir=$e(Ir)),Te(Ir,zr.FORBID_CONTENTS)),Vi&&(nr["#text"]=!0),Ko&&Te(nr,["html","head","body"]),nr.table&&(Te(nr,["tbody"]),delete Ot.tbody),e&&e(zr),Ro=zr)},qa=Te({},["mi","mo","mn","ms","mtext"]),da=Te({},["foreignobject","desc","title","annotation-xml"]),$a=Te({},ot);Te($a,ct),Te($a,qe);var Rl=Te({},He);Te(Rl,We);var Ha=function(zr){W(ht.removed,{element:zr});try{zr.parentNode.removeChild(zr)}catch{try{zr.outerHTML=jt}catch{zr.remove()}}},Ts=function(zr,io){try{W(ht.removed,{attribute:io.getAttributeNode(zr),from:io})}catch{W(ht.removed,{attribute:null,from:io})}if(io.removeAttribute(zr),"is"===zr&&!dn[zr])if(Ni||ti)try{Ha(io)}catch{}else try{io.setAttribute(zr,"")}catch{}},hs=function(zr){var io=void 0,gt=void 0;if(dr)zr="<remove></remove>"+zr;else{var Tn=J(zr,/^[\r\n\t ]+/);gt=Tn&&Tn[0]}"application/xhtml+xml"===ss&&(zr='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+zr+"</body></html>");var ie=Hn?Hn.createHTML(zr):zr;if(ts===es)try{io=(new mr).parseFromString(ie,ss)}catch{}if(!io||!io.documentElement){io=Ie.createDocument(ts,"template",null);try{io.documentElement.innerHTML=jo?"":ie}catch{}}var Ze=io.body||io.documentElement;return zr&&gt&&Ze.insertBefore(Tt.createTextNode(gt),Ze.childNodes[0]||null),ts===es?an.call(io,Ko?"html":"body")[0]:Ko?io.documentElement:Ze},$s=function(zr){return et.call(zr.ownerDocument||zr,zr,Wi.SHOW_ELEMENT|Wi.SHOW_COMMENT|Wi.SHOW_TEXT,null,!1)},Ja=function(zr){return"object"===(typeof hr>"u"?"undefined":Kr(hr))?zr instanceof hr:zr&&"object"===(typeof zr>"u"?"undefined":Kr(zr))&&"number"==typeof zr.nodeType&&"string"==typeof zr.nodeName},fa=function(zr,io,gt){Pe[zr]&&D(Pe[zr],function(Tn){Tn.call(ht,io,gt,Ro)})},Xo=function(zr){var io=void 0;if(fa("beforeSanitizeElements",zr,null),function(zr){return!(zr instanceof Ei||zr instanceof ii||"string"==typeof zr.nodeName&&"string"==typeof zr.textContent&&"function"==typeof zr.removeChild&&zr.attributes instanceof kr&&"function"==typeof zr.removeAttribute&&"function"==typeof zr.setAttribute&&"string"==typeof zr.namespaceURI&&"function"==typeof zr.insertBefore)}(zr)||J(zr.nodeName,/[\u0080-\uFFFF]/))return Ha(zr),!0;var gt=la(zr.nodeName);if(fa("uponSanitizeElement",zr,{tagName:gt,allowedTags:nr}),!Ja(zr.firstElementChild)&&(!Ja(zr.content)||!Ja(zr.content.firstElementChild))&&V(/<[/\w]/g,zr.innerHTML)&&V(/<[/\w]/g,zr.textContent)||"select"===gt&&V(/<template/i,zr.innerHTML))return Ha(zr),!0;if(!nr[gt]||Ot[gt]){if(Vi&&!Ir[gt]){var Tn=Hi(zr)||zr.parentNode,ie=qr(zr)||zr.childNodes;if(ie&&Tn)for(var Jt=ie.length-1;Jt>=0;--Jt)Tn.insertBefore(po(ie[Jt],!0),$i(zr))}return Ha(zr),!0}return zr instanceof Oi&&!function(zr){var io=Hi(zr);(!io||!io.tagName)&&(io={namespaceURI:es,tagName:"template"});var gt=$(zr.tagName),Tn=$(io.tagName);if(zr.namespaceURI===go)return io.namespaceURI===es?"svg"===gt:io.namespaceURI===_o?"svg"===gt&&("annotation-xml"===Tn||qa[Tn]):Boolean($a[gt]);if(zr.namespaceURI===_o)return io.namespaceURI===es?"math"===gt:io.namespaceURI===go?"math"===gt&&da[Tn]:Boolean(Rl[gt]);if(zr.namespaceURI===es){if(io.namespaceURI===go&&!da[Tn]||io.namespaceURI===_o&&!qa[Tn])return!1;var ie=Te({},["title","style","font","a","script"]);return!Rl[gt]&&(ie[gt]||!$a[gt])}return!1}(zr)||("noscript"===gt||"noembed"===gt)&&V(/<\/no(script|embed)/i,zr.innerHTML)?(Ha(zr),!0):(Ai&&3===zr.nodeType&&(io=F(io=zr.textContent,qn," "),io=F(io,gr," "),zr.textContent!==io&&(W(ht.removed,{element:zr.cloneNode()}),zr.textContent=io)),fa("afterSanitizeElements",zr,null),!1)},No=function(zr,io,gt){if(ji&&("id"===io||"name"===io)&&(gt in Tt||gt in jl))return!1;if((!Ti||mn[io]||!V(Pn,io))&&(!wr||!V(_r,io))){if(!dn[io]||mn[io])return!1;if(!Bn[io]&&!V(Zn,F(gt,tr,""))&&("src"!==io&&"xlink:href"!==io&&"href"!==io||"script"===zr||0!==X(gt,"data:")||!Vt[zr])&&(!Ci||V(Pr,F(gt,tr,"")))&&gt)return!1}return!0},Cs=function(zr){var io=void 0,gt=void 0,Tn=void 0,ie=void 0;fa("beforeSanitizeAttributes",zr,null);var Ze=zr.attributes;if(Ze){var Jt={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:dn};for(ie=Ze.length;ie--;){var vi=(io=Ze[ie]).name,Bi=io.namespaceURI;if(gt=de(io.value),Tn=la(vi),Jt.attrName=Tn,Jt.attrValue=gt,Jt.keepAttr=!0,Jt.forceKeepAttr=void 0,fa("uponSanitizeAttribute",zr,Jt),gt=Jt.attrValue,!Jt.forceKeepAttr&&(Ts(vi,zr),Jt.keepAttr)){if(V(/\/>/i,gt)){Ts(vi,zr);continue}Ai&&(gt=F(gt,qn," "),gt=F(gt,gr," "));var Xi=la(zr.nodeName);if(No(Xi,Tn,gt))try{Bi?zr.setAttributeNS(Bi,vi,gt):zr.setAttribute(vi,gt),U(ht.removed)}catch{}}}fa("afterSanitizeAttributes",zr,null)}},ns=function Fo(zr){var io=void 0,gt=$s(zr);for(fa("beforeSanitizeShadowDOM",zr,null);io=gt.nextNode();)fa("uponSanitizeShadowNode",io,null),!Xo(io)&&(io.content instanceof wn&&Fo(io.content),Cs(io));fa("afterSanitizeShadowDOM",zr,null)};return ht.sanitize=function(Fo,zr){var io=void 0,gt=void 0,Tn=void 0,ie=void 0,Ze=void 0;if((jo=!Fo)&&(Fo="\x3c!--\x3e"),"string"!=typeof Fo&&!Ja(Fo)){if("function"!=typeof Fo.toString)throw ce("toString is not a function");if("string"!=typeof(Fo=Fo.toString()))throw ce("dirty is not a string, aborting")}if(!ht.isSupported){if("object"===Kr(br.toStaticHTML)||"function"==typeof br.toStaticHTML){if("string"==typeof Fo)return br.toStaticHTML(Fo);if(Ja(Fo))return br.toStaticHTML(Fo.outerHTML)}return Fo}if(_s||gl(zr),ht.removed=[],"string"==typeof Fo&&(Po=!1),!Po)if(Fo instanceof hr)1===(gt=(io=hs("\x3c!----\x3e")).ownerDocument.importNode(Fo,!0)).nodeType&&"BODY"===gt.nodeName||"HTML"===gt.nodeName?io=gt:io.appendChild(gt);else{if(!Ni&&!Ai&&!Ko&&-1===Fo.indexOf("<"))return Hn&&wi?Hn.createHTML(Fo):Fo;if(!(io=hs(Fo)))return Ni?null:jt}io&&dr&&Ha(io.firstChild);for(var Jt=$s(Po?Fo:io);Tn=Jt.nextNode();)3===Tn.nodeType&&Tn===ie||Xo(Tn)||(Tn.content instanceof wn&&ns(Tn.content),Cs(Tn),ie=Tn);if(ie=null,Po)return Fo;if(Ni){if(ti)for(Ze=ze.call(io.ownerDocument);io.firstChild;)Ze.appendChild(io.firstChild);else Ze=io;return Vr&&(Ze=lt.call(Wt,Ze,!0)),Ze}var gn=Ko?io.outerHTML:io.innerHTML;return Ai&&(gn=F(gn,qn," "),gn=F(gn,gr," ")),Hn&&wi?Hn.createHTML(gn):gn},ht.setConfig=function(Fo){gl(Fo),_s=!0},ht.clearConfig=function(){Ro=null,_s=!1},ht.isValidAttribute=function(Fo,zr,io){Ro||gl({});var gt=la(Fo),Tn=la(zr);return No(gt,Tn,io)},ht.addHook=function(Fo,zr){"function"==typeof zr&&(Pe[Fo]=Pe[Fo]||[],W(Pe[Fo],zr))},ht.removeHook=function(Fo){Pe[Fo]&&U(Pe[Fo])},ht.removeHooks=function(Fo){Pe[Fo]&&(Pe[Fo]=[])},ht.removeAllHooks=function(){Pe={}},ht}()}()},32582:E=>{"use strict";class C{constructor(a,c){this.low=a,this.high=c,this.length=1+c-a}overlaps(a){return!(this.high<a.low||this.low>a.high)}touches(a){return!(this.high+1<a.low||this.low-1>a.high)}add(a){return new C(Math.min(this.low,a.low),Math.max(this.high,a.high))}subtract(a){return a.low<=this.low&&a.high>=this.high?[]:a.low>this.low&&a.high<this.high?[new C(this.low,a.low-1),new C(a.high+1,this.high)]:a.low<=this.low?[new C(a.high+1,this.high)]:[new C(this.low,a.low-1)]}toString(){return this.low==this.high?this.low.toString():this.low+"-"+this.high}}class s{constructor(a,c){this.ranges=[],this.length=0,null!=a&&this.add(a,c)}_update_length(){this.length=this.ranges.reduce((a,c)=>a+c.length,0)}add(a,c){var u=e=>{for(var f=0;f<this.ranges.length&&!e.touches(this.ranges[f]);)f++;for(var m=this.ranges.slice(0,f);f<this.ranges.length&&e.touches(this.ranges[f]);)e=e.add(this.ranges[f]),f++;m.push(e),this.ranges=m.concat(this.ranges.slice(f)),this._update_length()};return a instanceof s?a.ranges.forEach(u):(null==c&&(c=a),u(new C(a,c))),this}subtract(a,c){var u=e=>{for(var f=0;f<this.ranges.length&&!e.overlaps(this.ranges[f]);)f++;for(var m=this.ranges.slice(0,f);f<this.ranges.length&&e.overlaps(this.ranges[f]);)m=m.concat(this.ranges[f].subtract(e)),f++;this.ranges=m.concat(this.ranges.slice(f)),this._update_length()};return a instanceof s?a.ranges.forEach(u):(null==c&&(c=a),u(new C(a,c))),this}intersect(a,c){var u=[],e=f=>{for(var m=0;m<this.ranges.length&&!f.overlaps(this.ranges[m]);)m++;for(;m<this.ranges.length&&f.overlaps(this.ranges[m]);){var T=Math.max(this.ranges[m].low,f.low),M=Math.min(this.ranges[m].high,f.high);u.push(new C(T,M)),m++}};return a instanceof s?a.ranges.forEach(e):(null==c&&(c=a),e(new C(a,c))),this.ranges=u,this._update_length(),this}index(a){for(var c=0;c<this.ranges.length&&this.ranges[c].length<=a;)a-=this.ranges[c].length,c++;return this.ranges[c].low+a}toString(){return"[ "+this.ranges.join(", ")+" ]"}clone(){return new s(this)}numbers(){return this.ranges.reduce((a,c)=>{for(var u=c.low;u<=c.high;)a.push(u),u++;return a},[])}subranges(){return this.ranges.map(a=>({low:a.low,high:a.high,length:1+a.high-a.low}))}}E.exports=s},11926:(E,C,s)=>{"use strict";var r=s(88430),a=c(Error);function c(u){return e.displayName=u.displayName||u.name,e;function e(f){return f&&(f=r.apply(null,arguments)),new u(f)}}E.exports=a,a.eval=c(EvalError),a.range=c(RangeError),a.reference=c(ReferenceError),a.syntax=c(SyntaxError),a.type=c(TypeError),a.uri=c(URIError),a.create=c},49457:function(E,C){var s,a;void 0!==(a="function"==typeof(s=function(){"use strict";function u(M,w,D){var U=new XMLHttpRequest;U.open("GET",M),U.responseType="blob",U.onload=function(){T(U.response,w,D)},U.onerror=function(){console.error("could not download file")},U.send()}function e(M){var w=new XMLHttpRequest;w.open("HEAD",M,!1);try{w.send()}catch{}return 200<=w.status&&299>=w.status}function f(M){try{M.dispatchEvent(new MouseEvent("click"))}catch{var w=document.createEvent("MouseEvents");w.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),M.dispatchEvent(w)}}var m="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,T=m.saveAs||("object"!=typeof window||window!==m?function(){}:"download"in HTMLAnchorElement.prototype?function(M,w,D){var U=m.URL||m.webkitURL,W=document.createElement("a");W.download=w=w||M.name||"download",W.rel="noopener","string"==typeof M?(W.href=M,W.origin===location.origin?f(W):e(W.href)?u(M,w,D):f(W,W.target="_blank")):(W.href=U.createObjectURL(M),setTimeout(function(){U.revokeObjectURL(W.href)},4e4),setTimeout(function(){f(W)},0))}:"msSaveOrOpenBlob"in navigator?function(M,w,D){if(w=w||M.name||"download","string"!=typeof M)navigator.msSaveOrOpenBlob(function c(M,w){return typeof w>"u"?w={autoBom:!1}:"object"!=typeof w&&(console.warn("Deprecated: Expected third argument to be a object"),w={autoBom:!w}),w.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(M.type)?new Blob(["\ufeff",M],{type:M.type}):M}(M,D),w);else if(e(M))u(M,w,D);else{var U=document.createElement("a");U.href=M,U.target="_blank",setTimeout(function(){f(U)})}}:function(M,w,D,U){if((U=U||open("","_blank"))&&(U.document.title=U.document.body.innerText="downloading..."),"string"==typeof M)return u(M,w,D);var W="application/octet-stream"===M.type,$=/constructor/i.test(m.HTMLElement)||m.safari,J=/CriOS\/[\d]+/.test(navigator.userAgent);if((J||W&&$)&&"object"==typeof FileReader){var F=new FileReader;F.onloadend=function(){var V=F.result;V=J?V:V.replace(/^data:[^;]*;/,"data:attachment/file;"),U?U.location.href=V:location=V,U=null},F.readAsDataURL(M)}else{var X=m.URL||m.webkitURL,de=X.createObjectURL(M);U?U.location=de:location.href=de,U=null,setTimeout(function(){X.revokeObjectURL(de)},4e4)}});m.saveAs=T.saveAs=T,E.exports=T})?s.apply(C,[]):s)&&(E.exports=a)},88430:E=>{!function(){var C;function a(c){for(var M,D,U,$,u=1,e=[].slice.call(arguments),f=0,m=c.length,T="",w=!1,W=!1,J=function(){return e[u++]},F=function(){for(var X="";/\d/.test(c[f]);)X+=c[f++],M=c[f];return X.length>0?parseInt(X):null};f<m;++f)if(M=c[f],w)switch(w=!1,"."==M?(W=!1,M=c[++f]):"0"==M&&"."==c[f+1]?(W=!0,f+=2,M=c[f]):W=!0,$=F(),M){case"b":T+=parseInt(J(),10).toString(2);break;case"c":T+="string"==typeof(D=J())||D instanceof String?D:String.fromCharCode(parseInt(D,10));break;case"d":T+=parseInt(J(),10);break;case"f":U=String(parseFloat(J()).toFixed($||6)),T+=W?U:U.replace(/^0/,"");break;case"j":T+=JSON.stringify(J());break;case"o":T+="0"+parseInt(J(),10).toString(8);break;case"s":T+=J();break;case"x":T+="0x"+parseInt(J(),10).toString(16);break;case"X":T+="0x"+parseInt(J(),10).toString(16).toUpperCase();break;default:T+=M}else"%"===M?w=!0:T+=M;return T}(C=E.exports=a).format=a,C.vsprintf=function r(c,u){return a.apply(null,[c].concat(u))},typeof console<"u"&&"function"==typeof console.log&&(C.printf=function s(){console.log(a.apply(null,arguments))})}()},31609:E=>{"use strict";var C="Function.prototype.bind called on incompatible ",s=Array.prototype.slice,r=Object.prototype.toString,a="[object Function]";E.exports=function(u){var e=this;if("function"!=typeof e||r.call(e)!==a)throw new TypeError(C+e);for(var m,f=s.call(arguments,1),M=Math.max(0,e.length-f.length),w=[],D=0;D<M;D++)w.push("$"+D);if(m=Function("binder","return function ("+w.join(",")+"){ return binder.apply(this,arguments); }")(function(){if(this instanceof m){var W=e.apply(this,f.concat(s.call(arguments)));return Object(W)===W?W:this}return e.apply(u,f.concat(s.call(arguments)))}),e.prototype){var U=function(){};U.prototype=e.prototype,m.prototype=new U,U.prototype=null}return m}},75396:(E,C,s)=>{"use strict";var r=s(31609);E.exports=Function.prototype.bind||r},18540:(E,C,s)=>{"use strict";var r,a=SyntaxError,c=Function,u=TypeError,e=function(qe){try{return c('"use strict"; return ('+qe+").constructor;")()}catch{}},f=Object.getOwnPropertyDescriptor;if(f)try{f({},"")}catch{f=null}var m=function(){throw new u},T=f?function(){try{return m}catch{try{return f(arguments,"callee").get}catch{return m}}}():m,M=s(59326)(),w=s(41606)(),D=Object.getPrototypeOf||(w?function(qe){return qe.__proto__}:null),U={},W=typeof Uint8Array>"u"||!D?r:D(Uint8Array),$={"%AggregateError%":typeof AggregateError>"u"?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?r:ArrayBuffer,"%ArrayIteratorPrototype%":M&&D?D([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":U,"%AsyncGenerator%":U,"%AsyncGeneratorFunction%":U,"%AsyncIteratorPrototype%":U,"%Atomics%":typeof Atomics>"u"?r:Atomics,"%BigInt%":typeof BigInt>"u"?r:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?r:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":typeof Float32Array>"u"?r:Float32Array,"%Float64Array%":typeof Float64Array>"u"?r:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?r:FinalizationRegistry,"%Function%":c,"%GeneratorFunction%":U,"%Int8Array%":typeof Int8Array>"u"?r:Int8Array,"%Int16Array%":typeof Int16Array>"u"?r:Int16Array,"%Int32Array%":typeof Int32Array>"u"?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":M&&D?D(D([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":typeof Map>"u"?r:Map,"%MapIteratorPrototype%":typeof Map>"u"||!M||!D?r:D((new Map)[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?r:Promise,"%Proxy%":typeof Proxy>"u"?r:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":typeof Reflect>"u"?r:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?r:Set,"%SetIteratorPrototype%":typeof Set>"u"||!M||!D?r:D((new Set)[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":M&&D?D(""[Symbol.iterator]()):r,"%Symbol%":M?Symbol:r,"%SyntaxError%":a,"%ThrowTypeError%":T,"%TypedArray%":W,"%TypeError%":u,"%Uint8Array%":typeof Uint8Array>"u"?r:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?r:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?r:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?r:Uint32Array,"%URIError%":URIError,"%WeakMap%":typeof WeakMap>"u"?r:WeakMap,"%WeakRef%":typeof WeakRef>"u"?r:WeakRef,"%WeakSet%":typeof WeakSet>"u"?r:WeakSet};if(D)try{null.error}catch(qe){var J=D(D(qe));$["%Error.prototype%"]=J}var F=function qe(He){var We;if("%AsyncFunction%"===He)We=e("async function () {}");else if("%GeneratorFunction%"===He)We=e("function* () {}");else if("%AsyncGeneratorFunction%"===He)We=e("async function* () {}");else if("%AsyncGenerator%"===He){var Le=qe("%AsyncGeneratorFunction%");Le&&(We=Le.prototype)}else if("%AsyncIteratorPrototype%"===He){var Pt=qe("%AsyncGenerator%");Pt&&D&&(We=D(Pt.prototype))}return $[He]=We,We},X={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},de=s(75396),V=s(57709),ce=de.call(Function.call,Array.prototype.concat),se=de.call(Function.apply,Array.prototype.splice),fe=de.call(Function.call,String.prototype.replace),Te=de.call(Function.call,String.prototype.slice),$e=de.call(Function.call,RegExp.prototype.exec),ge=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,Et=/\\(\\)?/g,ot=function(He){var We=Te(He,0,1),Le=Te(He,-1);if("%"===We&&"%"!==Le)throw new a("invalid intrinsic syntax, expected closing `%`");if("%"===Le&&"%"!==We)throw new a("invalid intrinsic syntax, expected opening `%`");var Pt=[];return fe(He,ge,function(it,Xt,cn,pn){Pt[Pt.length]=cn?fe(pn,Et,"$1"):Xt||it}),Pt},ct=function(He,We){var Pt,Le=He;if(V(X,Le)&&(Le="%"+(Pt=X[Le])[0]+"%"),V($,Le)){var it=$[Le];if(it===U&&(it=F(Le)),typeof it>"u"&&!We)throw new u("intrinsic "+He+" exists, but is not available. Please file an issue!");return{alias:Pt,name:Le,value:it}}throw new a("intrinsic "+He+" does not exist!")};E.exports=function(He,We){if("string"!=typeof He||0===He.length)throw new u("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof We)throw new u('"allowMissing" argument must be a boolean');if(null===$e(/^%?[^%]*%?$/,He))throw new a("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var Le=ot(He),Pt=Le.length>0?Le[0]:"",it=ct("%"+Pt+"%",We),Xt=it.name,cn=it.value,pn=!1,Rn=it.alias;Rn&&(Pt=Rn[0],se(Le,ce([0,1],Rn)));for(var At=1,qt=!0;At<Le.length;At+=1){var sn=Le[At],fn=Te(sn,0,1),xn=Te(sn,-1);if(('"'===fn||"'"===fn||"`"===fn||'"'===xn||"'"===xn||"`"===xn)&&fn!==xn)throw new a("property names with quotes must have matching quotes");if(("constructor"===sn||!qt)&&(pn=!0),V($,Xt="%"+(Pt+="."+sn)+"%"))cn=$[Xt];else if(null!=cn){if(!(sn in cn)){if(!We)throw new u("base intrinsic for "+He+" exists, but the property is not available.");return}if(f&&At+1>=Le.length){var Kr=f(cn,sn);cn=(qt=!!Kr)&&"get"in Kr&&!("originalValue"in Kr.get)?Kr.get:cn[sn]}else qt=V(cn,sn),cn=cn[sn];qt&&!pn&&($[Xt]=cn)}}return cn}},41606:E=>{"use strict";var C={foo:{}},s=Object;E.exports=function(){return{__proto__:C}.foo===C.foo&&!({__proto__:null}instanceof s)}},59326:(E,C,s)=>{"use strict";var r=typeof Symbol<"u"&&Symbol,a=s(79045);E.exports=function(){return"function"==typeof r&&"function"==typeof Symbol&&"symbol"==typeof r("foo")&&"symbol"==typeof Symbol("bar")&&a()}},79045:E=>{"use strict";E.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var s={},r=Symbol("test"),a=Object(r);if("string"==typeof r||"[object Symbol]"!==Object.prototype.toString.call(r)||"[object Symbol]"!==Object.prototype.toString.call(a))return!1;for(r in s[r]=42,s)return!1;if("function"==typeof Object.keys&&0!==Object.keys(s).length||"function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(s).length)return!1;var u=Object.getOwnPropertySymbols(s);if(1!==u.length||u[0]!==r||!Object.prototype.propertyIsEnumerable.call(s,r))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var e=Object.getOwnPropertyDescriptor(s,r);if(42!==e.value||!0!==e.enumerable)return!1}return!0}},57709:(E,C,s)=>{"use strict";var r=s(75396);E.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},7856:E=>{function C(Fe){return Fe instanceof Map?Fe.clear=Fe.delete=Fe.set=function(){throw new Error("map is read-only")}:Fe instanceof Set&&(Fe.add=Fe.clear=Fe.delete=function(){throw new Error("set is read-only")}),Object.freeze(Fe),Object.getOwnPropertyNames(Fe).forEach(function(Ie){var et=Fe[Ie];"object"==typeof et&&!Object.isFrozen(et)&&C(et)}),Fe}var s=C;s.default=C;class a{constructor(Ie){void 0===Ie.data&&(Ie.data={}),this.data=Ie.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function c(Fe){return Fe.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function u(Fe,...Ie){const et=Object.create(null);for(const ze in Fe)et[ze]=Fe[ze];return Ie.forEach(function(ze){for(const an in ze)et[an]=ze[an]}),et}const f=Fe=>!!Fe.kind;class m{constructor(Ie,et){this.buffer="",this.classPrefix=et.classPrefix,Ie.walk(this)}addText(Ie){this.buffer+=c(Ie)}openNode(Ie){if(!f(Ie))return;let et=Ie.kind;Ie.sublanguage||(et=`${this.classPrefix}${et}`),this.span(et)}closeNode(Ie){f(Ie)&&(this.buffer+="</span>")}value(){return this.buffer}span(Ie){this.buffer+=`<span class="${Ie}">`}}class T{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(Ie){this.top.children.push(Ie)}openNode(Ie){const et={kind:Ie,children:[]};this.add(et),this.stack.push(et)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(Ie){return this.constructor._walk(Ie,this.rootNode)}static _walk(Ie,et){return"string"==typeof et?Ie.addText(et):et.children&&(Ie.openNode(et),et.children.forEach(ze=>this._walk(Ie,ze)),Ie.closeNode(et)),Ie}static _collapse(Ie){"string"!=typeof Ie&&Ie.children&&(Ie.children.every(et=>"string"==typeof et)?Ie.children=[Ie.children.join("")]:Ie.children.forEach(et=>{T._collapse(et)}))}}class M extends T{constructor(Ie){super(),this.options=Ie}addKeyword(Ie,et){""!==Ie&&(this.openNode(et),this.addText(Ie),this.closeNode())}addText(Ie){""!==Ie&&this.add(Ie)}addSublanguage(Ie,et){const ze=Ie.root;ze.kind=et,ze.sublanguage=!0,this.add(ze)}toHTML(){return new m(this,this.options).value()}finalize(){return!0}}function D(Fe){return Fe?"string"==typeof Fe?Fe:Fe.source:null}const F=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,V="[a-zA-Z]\\w*",ce="[a-zA-Z_]\\w*",se="\\b\\d+(\\.\\d+)?",fe="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",Te="\\b(0b[01]+)",Et={begin:"\\\\[\\s\\S]",relevance:0},ot={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[Et]},ct={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[Et]},qe={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},He=function(Fe,Ie,et={}){const ze=u({className:"comment",begin:Fe,end:Ie,contains:[]},et);return ze.contains.push(qe),ze.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),ze},We=He("//","$"),Le=He("/\\*","\\*/"),Pt=He("#","$");var xn=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:V,UNDERSCORE_IDENT_RE:ce,NUMBER_RE:se,C_NUMBER_RE:fe,BINARY_NUMBER_RE:Te,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(Fe={})=>{const Ie=/^#![ ]*\//;return Fe.binary&&(Fe.begin=function U(...Fe){return Fe.map(et=>D(et)).join("")}(Ie,/.*\b/,Fe.binary,/\b.*/)),u({className:"meta",begin:Ie,end:/$/,relevance:0,"on:begin":(et,ze)=>{0!==et.index&&ze.ignoreMatch()}},Fe)},BACKSLASH_ESCAPE:Et,APOS_STRING_MODE:ot,QUOTE_STRING_MODE:ct,PHRASAL_WORDS_MODE:qe,COMMENT:He,C_LINE_COMMENT_MODE:We,C_BLOCK_COMMENT_MODE:Le,HASH_COMMENT_MODE:Pt,NUMBER_MODE:{className:"number",begin:se,relevance:0},C_NUMBER_MODE:{className:"number",begin:fe,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:Te,relevance:0},CSS_NUMBER_MODE:{className:"number",begin:se+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[Et,{begin:/\[/,end:/\]/,relevance:0,contains:[Et]}]}]},TITLE_MODE:{className:"title",begin:V,relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:ce,relevance:0},METHOD_GUARD:{begin:"\\.\\s*"+ce,relevance:0},END_SAME_AS_BEGIN:function(Fe){return Object.assign(Fe,{"on:begin":(Ie,et)=>{et.data._beginMatch=Ie[1]},"on:end":(Ie,et)=>{et.data._beginMatch!==Ie[1]&&et.ignoreMatch()}})}});function Kr(Fe,Ie){"."===Fe.input[Fe.index-1]&&Ie.ignoreMatch()}function Or(Fe,Ie){Ie&&Fe.beginKeywords&&(Fe.begin="\\b("+Fe.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",Fe.__beforeBegin=Kr,Fe.keywords=Fe.keywords||Fe.beginKeywords,delete Fe.beginKeywords,void 0===Fe.relevance&&(Fe.relevance=0))}function Lr(Fe,Ie){Array.isArray(Fe.illegal)&&(Fe.illegal=function W(...Fe){return"("+Fe.map(et=>D(et)).join("|")+")"}(...Fe.illegal))}function ir(Fe,Ie){if(Fe.match){if(Fe.begin||Fe.end)throw new Error("begin & end are not supported with match");Fe.begin=Fe.match,delete Fe.match}}function Qr(Fe,Ie){void 0===Fe.relevance&&(Fe.relevance=1)}const jr=["of","and","for","in","not","or","if","then","parent","list","value"],br="keyword";function ht(Fe,Ie,et=br){const ze={};return"string"==typeof Fe?an(et,Fe.split(" ")):Array.isArray(Fe)?an(et,Fe):Object.keys(Fe).forEach(function(lt){Object.assign(ze,ht(Fe[lt],Ie,lt))}),ze;function an(lt,Rt){Ie&&(Rt=Rt.map(Pe=>Pe.toLowerCase())),Rt.forEach(function(Pe){const qn=Pe.split("|");ze[qn[0]]=[lt,Wt(qn[0],qn[1])]})}}function Wt(Fe,Ie){return Ie?Number(Ie):function Tt(Fe){return jr.includes(Fe.toLowerCase())}(Fe)?0:1}function wn(Fe,{}){function et(Pe,qn){return new RegExp(D(Pe),"m"+(Fe.case_insensitive?"i":"")+(qn?"g":""))}class ze{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(qn,gr){gr.position=this.position++,this.matchIndexes[this.matchAt]=gr,this.regexes.push([gr,qn]),this.matchAt+=function $(Fe){return new RegExp(Fe.toString()+"|").exec("").length-1}(qn)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const qn=this.regexes.map(gr=>gr[1]);this.matcherRe=et(function X(Fe,Ie="|"){let et=0;return Fe.map(ze=>{et+=1;const an=et;let lt=D(ze),Rt="";for(;lt.length>0;){const Pe=F.exec(lt);if(!Pe){Rt+=lt;break}Rt+=lt.substring(0,Pe.index),lt=lt.substring(Pe.index+Pe[0].length),"\\"===Pe[0][0]&&Pe[1]?Rt+="\\"+String(Number(Pe[1])+an):(Rt+=Pe[0],"("===Pe[0]&&et++)}return Rt}).map(ze=>`(${ze})`).join(Ie)}(qn),!0),this.lastIndex=0}exec(qn){this.matcherRe.lastIndex=this.lastIndex;const gr=this.matcherRe.exec(qn);if(!gr)return null;const Pn=gr.findIndex((Pr,tr)=>tr>0&&void 0!==Pr),_r=this.matchIndexes[Pn];return gr.splice(0,Pn),Object.assign(gr,_r)}}class an{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(qn){if(this.multiRegexes[qn])return this.multiRegexes[qn];const gr=new ze;return this.rules.slice(qn).forEach(([Pn,_r])=>gr.addRule(Pn,_r)),gr.compile(),this.multiRegexes[qn]=gr,gr}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(qn,gr){this.rules.push([qn,gr]),"begin"===gr.type&&this.count++}exec(qn){const gr=this.getMatcher(this.regexIndex);gr.lastIndex=this.lastIndex;let Pn=gr.exec(qn);if(this.resumingScanAtSamePosition()&&(!Pn||Pn.index!==this.lastIndex)){const _r=this.getMatcher(0);_r.lastIndex=this.lastIndex+1,Pn=_r.exec(qn)}return Pn&&(this.regexIndex+=Pn.position+1,this.regexIndex===this.count&&this.considerAll()),Pn}}if(Fe.compilerExtensions||(Fe.compilerExtensions=[]),Fe.contains&&Fe.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language.  See documentation.");return Fe.classNameAliases=u(Fe.classNameAliases||{}),function Rt(Pe,qn){const gr=Pe;if(Pe.isCompiled)return gr;[ir].forEach(_r=>_r(Pe,qn)),Fe.compilerExtensions.forEach(_r=>_r(Pe,qn)),Pe.__beforeBegin=null,[Or,Lr,Qr].forEach(_r=>_r(Pe,qn)),Pe.isCompiled=!0;let Pn=null;if("object"==typeof Pe.keywords&&(Pn=Pe.keywords.$pattern,delete Pe.keywords.$pattern),Pe.keywords&&(Pe.keywords=ht(Pe.keywords,Fe.case_insensitive)),Pe.lexemes&&Pn)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return Pn=Pn||Pe.lexemes||/\w+/,gr.keywordPatternRe=et(Pn,!0),qn&&(Pe.begin||(Pe.begin=/\B|\b/),gr.beginRe=et(Pe.begin),Pe.endSameAsBegin&&(Pe.end=Pe.begin),!Pe.end&&!Pe.endsWithParent&&(Pe.end=/\B|\b/),Pe.end&&(gr.endRe=et(Pe.end)),gr.terminatorEnd=D(Pe.end)||"",Pe.endsWithParent&&qn.terminatorEnd&&(gr.terminatorEnd+=(Pe.end?"|":"")+qn.terminatorEnd)),Pe.illegal&&(gr.illegalRe=et(Pe.illegal)),Pe.contains||(Pe.contains=[]),Pe.contains=[].concat(...Pe.contains.map(function(_r){return function hr(Fe){return Fe.variants&&!Fe.cachedVariants&&(Fe.cachedVariants=Fe.variants.map(function(Ie){return u(Fe,{variants:null},Ie)})),Fe.cachedVariants?Fe.cachedVariants:jn(Fe)?u(Fe,{starts:Fe.starts?u(Fe.starts):null}):Object.isFrozen(Fe)?u(Fe):Fe}("self"===_r?Pe:_r)})),Pe.contains.forEach(function(_r){Rt(_r,gr)}),Pe.starts&&Rt(Pe.starts,qn),gr.matcher=function lt(Pe){const qn=new an;return Pe.contains.forEach(gr=>qn.addRule(gr.begin,{rule:gr,type:"begin"})),Pe.terminatorEnd&&qn.addRule(Pe.terminatorEnd,{type:"end"}),Pe.illegal&&qn.addRule(Pe.illegal,{type:"illegal"}),qn}(gr),gr}(Fe)}function jn(Fe){return!!Fe&&(Fe.endsWithParent||jn(Fe.starts))}function so(Fe){const Ie={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!Fe.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,c(this.code);let ze={};return this.autoDetect?(ze=Fe.highlightAuto(this.code),this.detectedLanguage=ze.language):(ze=Fe.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),ze.value},autoDetect(){return!this.language||function Wi(Fe){return Boolean(Fe||""===Fe)}(this.autodetect)},ignoreIllegals:()=>!0},render(ze){return ze("pre",{},[ze("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:Ie,VuePlugin:{install(ze){ze.component("highlightjs",Ie)}}}}const kr={"after:highlightElement":({el:Fe,result:Ie,text:et})=>{const ze=ii(Fe);if(!ze.length)return;const an=document.createElement("div");an.innerHTML=Ie.value,Ie.value=function mr(Fe,Ie,et){let ze=0,an="";const lt=[];function Rt(){return Fe.length&&Ie.length?Fe[0].offset!==Ie[0].offset?Fe[0].offset<Ie[0].offset?Fe:Ie:"start"===Ie[0].event?Fe:Ie:Fe.length?Fe:Ie}function Pe(Pn){an+="<"+Ei(Pn)+[].map.call(Pn.attributes,function _r(Pr){return" "+Pr.nodeName+'="'+c(Pr.value)+'"'}).join("")+">"}function qn(Pn){an+="</"+Ei(Pn)+">"}function gr(Pn){("start"===Pn.event?Pe:qn)(Pn.node)}for(;Fe.length||Ie.length;){let Pn=Rt();if(an+=c(et.substring(ze,Pn[0].offset)),ze=Pn[0].offset,Pn===Fe){lt.reverse().forEach(qn);do{gr(Pn.splice(0,1)[0]),Pn=Rt()}while(Pn===Fe&&Pn.length&&Pn[0].offset===ze);lt.reverse().forEach(Pe)}else"start"===Pn[0].event?lt.push(Pn[0].node):lt.pop(),gr(Pn.splice(0,1)[0])}return an+c(et.substr(ze))}(ze,ii(an),et)}};function Ei(Fe){return Fe.nodeName.toLowerCase()}function ii(Fe){const Ie=[];return function et(ze,an){for(let lt=ze.firstChild;lt;lt=lt.nextSibling)3===lt.nodeType?an+=lt.nodeValue.length:1===lt.nodeType&&(Ie.push({event:"start",offset:an,node:lt}),an=et(lt,an),Ei(lt).match(/br|hr|img|input/)||Ie.push({event:"stop",offset:an,node:lt}));return an}(Fe,0),Ie}const pr={},Eo=Fe=>{console.error(Fe)},po=(Fe,...Ie)=>{console.log(`WARN: ${Fe}`,...Ie)},$i=(Fe,Ie)=>{pr[`${Fe}/${Ie}`]||(console.log(`Deprecated as of ${Fe}. ${Ie}`),pr[`${Fe}/${Ie}`]=!0)},qr=c,Hi=u,Dn=Symbol("nomatch");var jt=function(Fe){const Ie=Object.create(null),et=Object.create(null),ze=[];let an=!0;const lt=/(^(<[^>]+>|\t|)+|\n)/gm,Rt="Could not find the language '{}', did you forget to load/include a language module?",Pe={disableAutodetect:!0,name:"Plain text",contains:[]};let qn={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:M};function gr(bn){return qn.noHighlightRe.test(bn)}function _r(bn,Bn,ci,_o){let go="",es="";"object"==typeof Bn?(go=bn,ci=Bn.ignoreIllegals,es=Bn.language,_o=void 0):($i("10.7.0","highlight(lang, code, ...args) has been deprecated."),$i("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),es=bn,go=Bn);const ts={code:go,language:es};Ir("before:highlight",ts);const jo=ts.result?ts.result:Pr(ts.language,ts.code,ci,_o);return jo.code=ts.code,Ir("after:highlight",jo),jo}function Pr(bn,Bn,ci,_o){function go(Xo,No){const Cs=da.case_insensitive?No[0].toLowerCase():No[0];return Object.prototype.hasOwnProperty.call(Xo.keywords,Cs)&&Xo.keywords[Cs]}function jo(){null!=Ji.subLanguage?function ts(){if(""===hs)return;let Xo=null;if("string"==typeof Ji.subLanguage){if(!Ie[Ji.subLanguage])return void Ts.addText(hs);Xo=Pr(Ji.subLanguage,hs,!0,Ha[Ji.subLanguage]),Ha[Ji.subLanguage]=Xo.top}else Xo=Zn(hs,Ji.subLanguage.length?Ji.subLanguage:null);Ji.relevance>0&&($s+=Xo.relevance),Ts.addSublanguage(Xo.emitter,Xo.language)}():function es(){if(!Ji.keywords)return void Ts.addText(hs);let Xo=0;Ji.keywordPatternRe.lastIndex=0;let No=Ji.keywordPatternRe.exec(hs),Cs="";for(;No;){Cs+=hs.substring(Xo,No.index);const ns=go(Ji,No);if(ns){const[Fo,zr]=ns;Ts.addText(Cs),Cs="",$s+=zr,Fo.startsWith("_")?Cs+=No[0]:Ts.addKeyword(No[0],da.classNameAliases[Fo]||Fo)}else Cs+=No[0];Xo=Ji.keywordPatternRe.lastIndex,No=Ji.keywordPatternRe.exec(hs)}Cs+=hs.substr(Xo),Ts.addText(Cs)}(),hs=""}function ss(Xo){return Xo.className&&Ts.openNode(da.classNameAliases[Xo.className]||Xo.className),Ji=Object.create(Xo,{parent:{value:Ji}}),Ji}function gs(Xo,No,Cs){let ns=function J(Fe,Ie){const et=Fe&&Fe.exec(Ie);return et&&0===et.index}(Xo.endRe,Cs);if(ns){if(Xo["on:end"]){const Fo=new a(Xo);Xo["on:end"](No,Fo),Fo.isMatchIgnored&&(ns=!1)}if(ns){for(;Xo.endsParent&&Xo.parent;)Xo=Xo.parent;return Xo}}if(Xo.endsWithParent)return gs(Xo.parent,No,Cs)}function Is(Xo){return 0===Ji.matcher.regexIndex?(hs+=Xo[0],1):(fa=!0,0)}function Ro(Xo){const No=Xo[0],Cs=Bn.substr(Xo.index),ns=gs(Ji,Xo,Cs);if(!ns)return Dn;const Fo=Ji;Fo.skip?hs+=No:(Fo.returnEnd||Fo.excludeEnd||(hs+=No),jo(),Fo.excludeEnd&&(hs=No));do{Ji.className&&Ts.closeNode(),!Ji.skip&&!Ji.subLanguage&&($s+=Ji.relevance),Ji=Ji.parent}while(Ji!==ns.parent);return ns.starts&&(ns.endSameAsBegin&&(ns.starts.endRe=ns.endRe),ss(ns.starts)),Fo.returnEnd?0:No.length}let gl={};function qa(Xo,No){const Cs=No&&No[0];if(hs+=Xo,null==Cs)return jo(),0;if("begin"===gl.type&&"end"===No.type&&gl.index===No.index&&""===Cs){if(hs+=Bn.slice(No.index,No.index+1),!an){const ns=new Error("0 width match regex");throw ns.languageName=bn,ns.badRule=gl.rule,ns}return 1}if(gl=No,"begin"===No.type)return function la(Xo){const No=Xo[0],Cs=Xo.rule,ns=new a(Cs),Fo=[Cs.__beforeBegin,Cs["on:begin"]];for(const zr of Fo)if(zr&&(zr(Xo,ns),ns.isMatchIgnored))return Is(No);return Cs&&Cs.endSameAsBegin&&(Cs.endRe=function w(Fe){return new RegExp(Fe.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}(No)),Cs.skip?hs+=No:(Cs.excludeBegin&&(hs+=No),jo(),!Cs.returnBegin&&!Cs.excludeBegin&&(hs=No)),ss(Cs),Cs.returnBegin?0:No.length}(No);if("illegal"===No.type&&!ci){const ns=new Error('Illegal lexeme "'+Cs+'" for mode "'+(Ji.className||"<unnamed>")+'"');throw ns.mode=Ji,ns}if("end"===No.type){const ns=Ro(No);if(ns!==Dn)return ns}if("illegal"===No.type&&""===Cs)return 1;if(Ja>1e5&&Ja>3*No.index)throw new Error("potential infinite loop, way more iterations than matches");return hs+=Cs,Cs.length}const da=wi(bn);if(!da)throw Eo(Rt.replace("{}",bn)),new Error('Unknown language: "'+bn+'"');const $a=wn(da,{plugins:ze});let Rl="",Ji=_o||$a;const Ha={},Ts=new qn.__emitter(qn);!function jl(){const Xo=[];for(let No=Ji;No!==da;No=No.parent)No.className&&Xo.unshift(No.className);Xo.forEach(No=>Ts.openNode(No))}();let hs="",$s=0,Aa=0,Ja=0,fa=!1;try{for(Ji.matcher.considerAll();;){Ja++,fa?fa=!1:Ji.matcher.considerAll(),Ji.matcher.lastIndex=Aa;const Xo=Ji.matcher.exec(Bn);if(!Xo)break;const Cs=qa(Bn.substring(Aa,Xo.index),Xo);Aa=Xo.index+Cs}return qa(Bn.substr(Aa)),Ts.closeAllNodes(),Ts.finalize(),Rl=Ts.toHTML(),{relevance:Math.floor($s),value:Rl,language:bn,illegal:!1,emitter:Ts,top:Ji}}catch(Xo){if(Xo.message&&Xo.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:Xo.message,context:Bn.slice(Aa-100,Aa+100),mode:Xo.mode},sofar:Rl,relevance:0,value:qr(Bn),emitter:Ts};if(an)return{illegal:!1,relevance:0,value:qr(Bn),emitter:Ts,language:bn,top:Ji,errorRaised:Xo};throw Xo}}function Zn(bn,Bn){Bn=Bn||qn.languages||Object.keys(Ie);const ci=function tr(bn){const Bn={relevance:0,emitter:new qn.__emitter(qn),value:qr(bn),illegal:!1,top:Pe};return Bn.emitter.addText(bn),Bn}(bn),_o=Bn.filter(wi).filter(Vi).map(ss=>Pr(ss,bn,!1));_o.unshift(ci);const go=_o.sort((ss,gs)=>{if(ss.relevance!==gs.relevance)return gs.relevance-ss.relevance;if(ss.language&&gs.language){if(wi(ss.language).supersetOf===gs.language)return 1;if(wi(gs.language).supersetOf===ss.language)return-1}return 0}),[es,ts]=go,jo=es;return jo.second_best=ts,jo}const dn={"before:highlightElement":({el:bn})=>{qn.useBR&&(bn.innerHTML=bn.innerHTML.replace(/\n/g,"").replace(/<br[ /]*>/g,"\n"))},"after:highlightElement":({result:bn})=>{qn.useBR&&(bn.value=bn.value.replace(/\n/g,"<br>"))}},Ge=/^(<[^>]+>|\t)+/gm,Ot={"after:highlightElement":({result:bn})=>{qn.tabReplace&&(bn.value=bn.value.replace(Ge,Bn=>Bn.replace(/\t/g,qn.tabReplace)))}};function mn(bn){let Bn=null;const ci=function Pn(bn){let Bn=bn.className+" ";Bn+=bn.parentNode?bn.parentNode.className:"";const ci=qn.languageDetectRe.exec(Bn);if(ci){const _o=wi(ci[1]);return _o||(po(Rt.replace("{}",ci[1])),po("Falling back to no-highlight mode for this block.",bn)),_o?ci[1]:"no-highlight"}return Bn.split(/\s+/).find(_o=>gr(_o)||wi(_o))}(bn);if(gr(ci))return;Ir("before:highlightElement",{el:bn,language:ci}),Bn=bn;const _o=Bn.textContent,go=ci?_r(_o,{language:ci,ignoreIllegals:!0}):Zn(_o);Ir("after:highlightElement",{el:bn,result:go,text:_o}),bn.innerHTML=go.value,function Zt(bn,Bn,ci){const _o=Bn?et[Bn]:ci;bn.classList.add("hljs"),_o&&bn.classList.add(_o)}(bn,ci,go.language),bn.result={language:go.language,re:go.relevance,relavance:go.relevance},go.second_best&&(bn.second_best={language:go.second_best.language,re:go.second_best.relevance,relavance:go.second_best.relevance})}const Ti=()=>{Ti.called||(Ti.called=!0,$i("10.6.0","initHighlighting() is deprecated.  Use highlightAll() instead."),document.querySelectorAll("pre code").forEach(mn))};let Ai=!1;function Ko(){"loading"!==document.readyState?document.querySelectorAll("pre code").forEach(mn):Ai=!0}function wi(bn){return bn=(bn||"").toLowerCase(),Ie[bn]||Ie[et[bn]]}function ji(bn,{languageName:Bn}){"string"==typeof bn&&(bn=[bn]),bn.forEach(ci=>{et[ci.toLowerCase()]=Bn})}function Vi(bn){const Bn=wi(bn);return Bn&&!Bn.disableAutodetect}function Ir(bn,Bn){const ci=bn;ze.forEach(function(_o){_o[ci]&&_o[ci](Bn)})}typeof window<"u"&&window.addEventListener&&window.addEventListener("DOMContentLoaded",function _s(){Ai&&Ko()},!1),Object.assign(Fe,{highlight:_r,highlightAuto:Zn,highlightAll:Ko,fixMarkup:function ro(bn){return $i("10.2.0","fixMarkup will be removed entirely in v11.0"),$i("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),function nr(bn){return qn.tabReplace||qn.useBR?bn.replace(lt,Bn=>"\n"===Bn?qn.useBR?"<br>":Bn:qn.tabReplace?Bn.replace(/\t/g,qn.tabReplace):Bn):bn}(bn)},highlightElement:mn,highlightBlock:function Vt(bn){return $i("10.7.0","highlightBlock will be removed entirely in v12.0"),$i("10.7.0","Please use highlightElement now."),mn(bn)},configure:function wr(bn){bn.useBR&&($i("10.3.0","'useBR' will be removed entirely in v11.0"),$i("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),qn=Hi(qn,bn)},initHighlighting:Ti,initHighlightingOnLoad:function Ci(){$i("10.6.0","initHighlightingOnLoad() is deprecated.  Use highlightAll() instead."),Ai=!0},registerLanguage:function dr(bn,Bn){let ci=null;try{ci=Bn(Fe)}catch(_o){if(Eo("Language definition for '{}' could not be registered.".replace("{}",bn)),!an)throw _o;Eo(_o),ci=Pe}ci.name||(ci.name=bn),Ie[bn]=ci,ci.rawDefinition=Bn.bind(null,Fe),ci.aliases&&ji(ci.aliases,{languageName:bn})},unregisterLanguage:function Ni(bn){delete Ie[bn];for(const Bn of Object.keys(et))et[Bn]===bn&&delete et[Bn]},listLanguages:function ti(){return Object.keys(Ie)},getLanguage:wi,registerAliases:ji,requireLanguage:function Vr(bn){$i("10.4.0","requireLanguage will be removed entirely in v11."),$i("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const Bn=wi(bn);if(Bn)return Bn;throw new Error("The '{}' language is required, but not loaded.".replace("{}",bn))},autoDetection:Vi,inherit:Hi,addPlugin:function ko(bn){(function Po(bn){bn["before:highlightBlock"]&&!bn["before:highlightElement"]&&(bn["before:highlightElement"]=Bn=>{bn["before:highlightBlock"](Object.assign({block:Bn.el},Bn))}),bn["after:highlightBlock"]&&!bn["after:highlightElement"]&&(bn["after:highlightElement"]=Bn=>{bn["after:highlightBlock"](Object.assign({block:Bn.el},Bn))})})(bn),ze.push(bn)},vuePlugin:so(Fe).VuePlugin}),Fe.debugMode=function(){an=!1},Fe.safeMode=function(){an=!0},Fe.versionString="10.7.3";for(const bn in xn)"object"==typeof xn[bn]&&s(xn[bn]);return Object.assign(Fe,xn),Fe.addPlugin(dn),Fe.addPlugin(kr),Fe.addPlugin(Ot),Fe}({});E.exports=jt},4357:E=>{function s(...a){return a.map(u=>function C(a){return a?"string"==typeof a?a:a.source:null}(u)).join("")}E.exports=function r(a){const c={},u={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[c]}]};Object.assign(c,{className:"variable",variants:[{begin:s(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},u]});const e={className:"subst",begin:/\$\(/,end:/\)/,contains:[a.BACKSLASH_ESCAPE]},f={begin:/<<-?\s*(?=\w+)/,starts:{contains:[a.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},m={className:"string",begin:/"/,end:/"/,contains:[a.BACKSLASH_ESCAPE,c,e]};e.contains.push(m);const w={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},a.NUMBER_MODE,c]},U=a.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),W={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[a.inherit(a.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[U,a.SHEBANG(),W,w,a.HASH_COMMENT_MODE,f,m,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},c]}}},28390:E=>{function s(...a){return a.map(u=>function C(a){return a?"string"==typeof a?a:a.source:null}(u)).join("")}E.exports=function r(a){const c="HTTP/(2|1\\.[01])",e={className:"attribute",begin:s("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},f=[e,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+c+" \\d{3})",end:/$/,contains:[{className:"meta",begin:c},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:f}},{begin:"(?=^[A-Z]+ (.*?) "+c+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:c},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:f}},a.inherit(e,{relevance:0})]}}},36147:E=>{const C="[A-Za-z$_][0-9A-Za-z$_]*",s=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],f=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function T(D){return M("(?=",D,")")}function M(...D){return D.map(W=>function m(D){return D?"string"==typeof D?D:D.source:null}(W)).join("")}E.exports=function w(D){const W=C,J={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(We,Le)=>{const Pt=We[0].length+We.index,it=We.input[Pt];"<"!==it?">"===it&&(((We,{after:Le})=>{const Pt="</"+We[0].slice(1);return-1!==We.input.indexOf(Pt,Le)})(We,{after:Pt})||Le.ignoreMatch()):Le.ignoreMatch()}},F={$pattern:C,keyword:s,literal:r,built_in:f},X="[0-9](_?[0-9])*",de=`\\.(${X})`,V="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",ce={className:"number",variants:[{begin:`(\\b(${V})((${de})|\\.)?|(${de}))[eE][+-]?(${X})\\b`},{begin:`\\b(${V})\\b((${de})\\b|\\.)?|(${de})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},se={className:"subst",begin:"\\$\\{",end:"\\}",keywords:F,contains:[]},fe={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[D.BACKSLASH_ESCAPE,se],subLanguage:"xml"}},Te={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[D.BACKSLASH_ESCAPE,se],subLanguage:"css"}},$e={className:"string",begin:"`",end:"`",contains:[D.BACKSLASH_ESCAPE,se]},Et={className:"comment",variants:[D.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:W+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),D.C_BLOCK_COMMENT_MODE,D.C_LINE_COMMENT_MODE]},ot=[D.APOS_STRING_MODE,D.QUOTE_STRING_MODE,fe,Te,$e,ce,D.REGEXP_MODE];se.contains=ot.concat({begin:/\{/,end:/\}/,keywords:F,contains:["self"].concat(ot)});const ct=[].concat(Et,se.contains),qe=ct.concat([{begin:/\(/,end:/\)/,keywords:F,contains:["self"].concat(ct)}]),He={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:F,contains:qe};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:F,exports:{PARAMS_CONTAINS:qe},illegal:/#(?![$_A-z])/,contains:[D.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},D.APOS_STRING_MODE,D.QUOTE_STRING_MODE,fe,Te,$e,Et,ce,{begin:M(/[{,\n]\s*/,T(M(/(((\/\/.*$)|(\/\*(\*[^/]|[^*])*\*\/))\s*)*/,W+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:W+T("\\s*:"),relevance:0}]},{begin:"("+D.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[Et,D.REGEXP_MODE,{className:"function",begin:"(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+D.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:D.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:F,contains:qe}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:"</>"},{begin:J.begin,"on:begin":J.isTrulyOpeningTag,end:J.end}],subLanguage:"xml",contains:[{begin:J.begin,end:J.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:F,contains:["self",D.inherit(D.TITLE_MODE,{begin:W}),He],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:D.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[He,D.inherit(D.TITLE_MODE,{begin:W})]},{variants:[{begin:"\\."+W},{begin:"\\$"+W}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},D.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[D.inherit(D.TITLE_MODE,{begin:W}),"self",He]},{begin:"(get|set)\\s+(?="+W+"\\()",end:/\{/,keywords:"get set",contains:[D.inherit(D.TITLE_MODE,{begin:W}),{begin:/\(\)/},He]},{begin:/\$[(.]/}]}}},92229:E=>{E.exports=function C(s){const r={literal:"true false null"},a=[s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE],c=[s.QUOTE_STRING_MODE,s.C_NUMBER_MODE],u={end:",",endsWithParent:!0,excludeEnd:!0,contains:c,keywords:r},e={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[s.BACKSLASH_ESCAPE],illegal:"\\n"},s.inherit(u,{begin:/:/})].concat(a),illegal:"\\S"},f={begin:"\\[",end:"\\]",contains:[s.inherit(u)],illegal:"\\S"};return c.push(e,f),a.forEach(function(m){c.push(m)}),{name:"JSON",contains:c,keywords:r,illegal:"\\S"}}},78932:E=>{E.exports=function C(s){const u={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},f={begin:"`[\\s\\S]",relevance:0},m={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},M={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[f,m,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},w={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},U=s.inherit(s.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),W={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},$={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[s.TITLE_MODE]},J={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[m]}]},F={begin:/using\s/,end:/$/,returnBegin:!0,contains:[M,w,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},X={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},V={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(u.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},s.inherit(s.TITLE_MODE,{endsParent:!0})]},ce=[V,U,f,s.NUMBER_MODE,M,w,W,m,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/@\B/,relevance:0}],se={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",ce,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return V.contains.unshift(se),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:u,contains:ce.concat($,J,F,X,se)}}},13546:E=>{function C(e){return e?"string"==typeof e?e:e.source:null}function s(e){return a("(?=",e,")")}function a(...e){return e.map(m=>C(m)).join("")}function c(...e){return"("+e.map(m=>C(m)).join("|")+")"}E.exports=function u(e){const f=a(/[A-Z_]/,function r(e){return a("(",e,")?")}(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),T={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},M={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},w=e.inherit(M,{begin:/\(/,end:/\)/}),D=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),U=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),W={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:/[A-Za-z0-9._:-]+/,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[T]},{begin:/'/,end:/'/,contains:[T]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[M,U,D,w,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[M,w,U,D]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},T,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[W],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[W],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:a(/</,s(a(f,c(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:f,relevance:0,starts:W}]},{className:"tag",begin:a(/<\//,s(a(f,/>/))),contains:[{className:"name",begin:f,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},44776:E=>{E.exports=function C(s){var r="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",e={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[s.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},f=s.inherit(e,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),U={end:",",endsWithParent:!0,excludeEnd:!0,keywords:r,relevance:0},J=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+s.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+s.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},s.HASH_COMMENT_MODE,{beginKeywords:r,keywords:{literal:r}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:s.C_NUMBER_RE+"\\b",relevance:0},{begin:/\{/,end:/\}/,contains:[U],illegal:"\\n",relevance:0},{begin:"\\[",end:"\\]",contains:[U],illegal:"\\n",relevance:0},e],F=[...J];return F.pop(),F.push(f),U.contains=F,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:J}}},62568:(E,C,s)=>{"use strict";var r=s(71023),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},c={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},e={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},f={};function m(J){return r.isMemo(J)?e:f[J.$$typeof]||a}f[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},f[r.Memo]=e;var T=Object.defineProperty,M=Object.getOwnPropertyNames,w=Object.getOwnPropertySymbols,D=Object.getOwnPropertyDescriptor,U=Object.getPrototypeOf,W=Object.prototype;E.exports=function $(J,F,X){if("string"!=typeof F){if(W){var de=U(F);de&&de!==W&&$(J,de,X)}var V=M(F);w&&(V=V.concat(w(F)));for(var ce=m(J),se=m(F),fe=0;fe<V.length;++fe){var Te=V[fe];if(!(c[Te]||X&&X[Te]||se&&se[Te]||ce&&ce[Te])){var $e=D(F,Te);try{T(J,Te,$e)}catch{}}}}return J}},76493:(E,C)=>{"use strict";var s="function"==typeof Symbol&&Symbol.for,r=s?Symbol.for("react.element"):60103,a=s?Symbol.for("react.portal"):60106,c=s?Symbol.for("react.fragment"):60107,u=s?Symbol.for("react.strict_mode"):60108,e=s?Symbol.for("react.profiler"):60114,f=s?Symbol.for("react.provider"):60109,m=s?Symbol.for("react.context"):60110,T=s?Symbol.for("react.async_mode"):60111,M=s?Symbol.for("react.concurrent_mode"):60111,w=s?Symbol.for("react.forward_ref"):60112,D=s?Symbol.for("react.suspense"):60113,U=s?Symbol.for("react.suspense_list"):60120,W=s?Symbol.for("react.memo"):60115,$=s?Symbol.for("react.lazy"):60116,J=s?Symbol.for("react.block"):60121,F=s?Symbol.for("react.fundamental"):60117,X=s?Symbol.for("react.responder"):60118,de=s?Symbol.for("react.scope"):60119;function V(se){if("object"==typeof se&&null!==se){var fe=se.$$typeof;switch(fe){case r:switch(se=se.type){case T:case M:case c:case e:case u:case D:return se;default:switch(se=se&&se.$$typeof){case m:case w:case $:case W:case f:return se;default:return fe}}case a:return fe}}}function ce(se){return V(se)===M}C.AsyncMode=T,C.ConcurrentMode=M,C.ContextConsumer=m,C.ContextProvider=f,C.Element=r,C.ForwardRef=w,C.Fragment=c,C.Lazy=$,C.Memo=W,C.Portal=a,C.Profiler=e,C.StrictMode=u,C.Suspense=D,C.isAsyncMode=function(se){return ce(se)||V(se)===T},C.isConcurrentMode=ce,C.isContextConsumer=function(se){return V(se)===m},C.isContextProvider=function(se){return V(se)===f},C.isElement=function(se){return"object"==typeof se&&null!==se&&se.$$typeof===r},C.isForwardRef=function(se){return V(se)===w},C.isFragment=function(se){return V(se)===c},C.isLazy=function(se){return V(se)===$},C.isMemo=function(se){return V(se)===W},C.isPortal=function(se){return V(se)===a},C.isProfiler=function(se){return V(se)===e},C.isStrictMode=function(se){return V(se)===u},C.isSuspense=function(se){return V(se)===D},C.isValidElementType=function(se){return"string"==typeof se||"function"==typeof se||se===c||se===M||se===e||se===u||se===D||se===U||"object"==typeof se&&null!==se&&(se.$$typeof===$||se.$$typeof===W||se.$$typeof===f||se.$$typeof===m||se.$$typeof===w||se.$$typeof===F||se.$$typeof===X||se.$$typeof===de||se.$$typeof===J)},C.typeOf=V},71023:(E,C,s)=>{"use strict";E.exports=s(76493)},12658:(E,C)=>{C.read=function(s,r,a,c,u){var e,f,m=8*u-c-1,T=(1<<m)-1,M=T>>1,w=-7,D=a?u-1:0,U=a?-1:1,W=s[r+D];for(D+=U,e=W&(1<<-w)-1,W>>=-w,w+=m;w>0;e=256*e+s[r+D],D+=U,w-=8);for(f=e&(1<<-w)-1,e>>=-w,w+=c;w>0;f=256*f+s[r+D],D+=U,w-=8);if(0===e)e=1-M;else{if(e===T)return f?NaN:1/0*(W?-1:1);f+=Math.pow(2,c),e-=M}return(W?-1:1)*f*Math.pow(2,e-c)},C.write=function(s,r,a,c,u,e){var f,m,T,M=8*e-u-1,w=(1<<M)-1,D=w>>1,U=23===u?Math.pow(2,-24)-Math.pow(2,-77):0,W=c?0:e-1,$=c?1:-1,J=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(m=isNaN(r)?1:0,f=w):(f=Math.floor(Math.log(r)/Math.LN2),r*(T=Math.pow(2,-f))<1&&(f--,T*=2),(r+=f+D>=1?U/T:U*Math.pow(2,1-D))*T>=2&&(f++,T/=2),f+D>=w?(m=0,f=w):f+D>=1?(m=(r*T-1)*Math.pow(2,u),f+=D):(m=r*Math.pow(2,D-1)*Math.pow(2,u),f=0));u>=8;s[a+W]=255&m,W+=$,m/=256,u-=8);for(f=f<<u|m,M+=u;M>0;s[a+W]=255&f,W+=$,f/=256,M-=8);s[a+W-$]|=128*J}},55004:(E,C,s)=>{"use strict";s.r(C),s.d(C,{Collection:()=>$e,Iterable:()=>rn,List:()=>ba,Map:()=>qu,OrderedMap:()=>To,OrderedSet:()=>yi,PairSorting:()=>je,Range:()=>kn,Record:()=>tt,Repeat:()=>Fs,Seq:()=>Wt,Set:()=>Q,Stack:()=>sc,default:()=>Jl,fromJS:()=>Vs,get:()=>Ji,getIn:()=>Xr,has:()=>Rl,hasIn:()=>Rr,hash:()=>Fe,is:()=>Hi,isAssociative:()=>Te,isCollection:()=>de,isImmutable:()=>Le,isIndexed:()=>fe,isKeyed:()=>ce,isList:()=>xu,isMap:()=>po,isOrdered:()=>it,isOrderedMap:()=>$i,isOrderedSet:()=>Lc,isPlainObject:()=>qa,isRecord:()=>We,isSeq:()=>qe,isSet:()=>du,isStack:()=>zl,isValueObject:()=>qr,merge:()=>Tn,mergeDeep:()=>Ze,mergeDeepWith:()=>Jt,mergeWith:()=>ie,remove:()=>Ts,removeIn:()=>Xo,set:()=>hs,setIn:()=>Ja,update:()=>Cs,updateIn:()=>$s,version:()=>Ho});var r="delete",a=5,c=1<<a,u=c-1,e={};function m(le){le&&(le.value=!0)}function T(){}function M(le){return void 0===le.size&&(le.size=le.__iterate(D)),le.size}function w(le,ae){if("number"!=typeof ae){var De=ae>>>0;if(""+De!==ae||4294967295===De)return NaN;ae=De}return ae<0?M(le)+ae:ae}function D(){return!0}function U(le,ae,De){return(0===le&&!F(le)||void 0!==De&&le<=-De)&&(void 0===ae||void 0!==De&&ae>=De)}function W(le,ae){return J(le,ae,0)}function $(le,ae){return J(le,ae,ae)}function J(le,ae,De){return void 0===le?De:F(le)?ae===1/0?ae:0|Math.max(0,ae+le):void 0===ae||ae===le?le:0|Math.min(ae,le)}function F(le){return le<0||0===le&&1/le==-1/0}var X="@@__IMMUTABLE_ITERABLE__@@";function de(le){return Boolean(le&&le[X])}var V="@@__IMMUTABLE_KEYED__@@";function ce(le){return Boolean(le&&le[V])}var se="@@__IMMUTABLE_INDEXED__@@";function fe(le){return Boolean(le&&le[se])}function Te(le){return ce(le)||fe(le)}var $e=function(ae){return de(ae)?ae:Wt(ae)},ge=function(le){function ae(De){return ce(De)?De:Tt(De)}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae}($e),Et=function(le){function ae(De){return fe(De)?De:wn(De)}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae}($e),ot=function(le){function ae(De){return de(De)&&!Te(De)?De:jn(De)}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae}($e);$e.Keyed=ge,$e.Indexed=Et,$e.Set=ot;var ct="@@__IMMUTABLE_SEQ__@@";function qe(le){return Boolean(le&&le[ct])}var He="@@__IMMUTABLE_RECORD__@@";function We(le){return Boolean(le&&le[He])}function Le(le){return de(le)||We(le)}var Pt="@@__IMMUTABLE_ORDERED__@@";function it(le){return Boolean(le&&le[Pt])}var Xt=0,cn=1,pn=2,Rn="function"==typeof Symbol&&Symbol.iterator,At="@@iterator",qt=Rn||At,sn=function(ae){this.next=ae};function fn(le,ae,De,Ve){var st=0===le?ae:1===le?De:[ae,De];return Ve?Ve.value=st:Ve={value:st,done:!1},Ve}function xn(){return{value:void 0,done:!0}}function Kr(le){return!!Array.isArray(le)||!!ir(le)}function Or(le){return le&&"function"==typeof le.next}function Lr(le){var ae=ir(le);return ae&&ae.call(le)}function ir(le){var ae=le&&(Rn&&le[Rn]||le[At]);if("function"==typeof ae)return ae}sn.prototype.toString=function(){return"[Iterator]"},sn.KEYS=Xt,sn.VALUES=cn,sn.ENTRIES=pn,sn.prototype.inspect=sn.prototype.toSource=function(){return this.toString()},sn.prototype[qt]=function(){return this};var br=Object.prototype.hasOwnProperty;function ht(le){return!(!Array.isArray(le)&&"string"!=typeof le)||le&&"object"==typeof le&&Number.isInteger(le.length)&&le.length>=0&&(0===le.length?1===Object.keys(le).length:le.hasOwnProperty(le.length-1))}var Wt=function(le){function ae(De){return null==De?kr():Le(De)?De.toSeq():function mr(le){var ae=pr(le);if(ae)return function Qr(le){var ae=ir(le);return ae&&ae===le.entries}(le)?ae.fromEntrySeq():function jr(le){var ae=ir(le);return ae&&ae===le.keys}(le)?ae.toSetSeq():ae;if("object"==typeof le)return new Oi(le);throw new TypeError("Expected Array or collection object of values, or keyed object: "+le)}(De)}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.toSeq=function(){return this},ae.prototype.toString=function(){return this.__toString("Seq {","}")},ae.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},ae.prototype.__iterate=function(Ve,st){var zt=this._cache;if(zt){for(var Qt=zt.length,Gn=0;Gn!==Qt;){var Er=zt[st?Qt-++Gn:Gn++];if(!1===Ve(Er[1],Er[0],this))break}return Gn}return this.__iterateUncached(Ve,st)},ae.prototype.__iterator=function(Ve,st){var zt=this._cache;if(zt){var Qt=zt.length,Gn=0;return new sn(function(){if(Gn===Qt)return{value:void 0,done:!0};var Er=zt[st?Qt-++Gn:Gn++];return fn(Ve,Er[0],Er[1])})}return this.__iteratorUncached(Ve,st)},ae}($e),Tt=function(le){function ae(De){return null==De?kr().toKeyedSeq():de(De)?ce(De)?De.toSeq():De.fromEntrySeq():We(De)?De.toSeq():Ei(De)}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.toKeyedSeq=function(){return this},ae}(Wt),wn=function(le){function ae(De){return null==De?kr():de(De)?ce(De)?De.entrySeq():De.toIndexedSeq():We(De)?De.toSeq().entrySeq():ii(De)}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.of=function(){return ae(arguments)},ae.prototype.toIndexedSeq=function(){return this},ae.prototype.toString=function(){return this.__toString("Seq [","]")},ae}(Wt),jn=function(le){function ae(De){return(de(De)&&!Te(De)?De:wn(De)).toSetSeq()}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.of=function(){return ae(arguments)},ae.prototype.toSetSeq=function(){return this},ae}(Wt);Wt.isSeq=qe,Wt.Keyed=Tt,Wt.Set=jn,Wt.Indexed=wn,Wt.prototype[ct]=!0;var hr=function(le){function ae(De){this._array=De,this.size=De.length}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.get=function(Ve,st){return this.has(Ve)?this._array[w(this,Ve)]:st},ae.prototype.__iterate=function(Ve,st){for(var zt=this._array,Qt=zt.length,Gn=0;Gn!==Qt;){var Er=st?Qt-++Gn:Gn++;if(!1===Ve(zt[Er],Er,this))break}return Gn},ae.prototype.__iterator=function(Ve,st){var zt=this._array,Qt=zt.length,Gn=0;return new sn(function(){if(Gn===Qt)return{value:void 0,done:!0};var Er=st?Qt-++Gn:Gn++;return fn(Ve,Er,zt[Er])})},ae}(wn),Oi=function(le){function ae(De){var Ve=Object.keys(De).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(De):[]);this._object=De,this._keys=Ve,this.size=Ve.length}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.get=function(Ve,st){return void 0===st||this.has(Ve)?this._object[Ve]:st},ae.prototype.has=function(Ve){return br.call(this._object,Ve)},ae.prototype.__iterate=function(Ve,st){for(var zt=this._object,Qt=this._keys,Gn=Qt.length,Er=0;Er!==Gn;){var Nr=Qt[st?Gn-++Er:Er++];if(!1===Ve(zt[Nr],Nr,this))break}return Er},ae.prototype.__iterator=function(Ve,st){var zt=this._object,Qt=this._keys,Gn=Qt.length,Er=0;return new sn(function(){if(Er===Gn)return{value:void 0,done:!0};var Nr=Qt[st?Gn-++Er:Er++];return fn(Ve,Nr,zt[Nr])})},ae}(Tt);Oi.prototype[Pt]=!0;var so,Wi=function(le){function ae(De){this._collection=De,this.size=De.length||De.size}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.__iterateUncached=function(Ve,st){if(st)return this.cacheResult().__iterate(Ve,st);var Qt=Lr(this._collection),Gn=0;if(Or(Qt))for(var Er;!(Er=Qt.next()).done&&!1!==Ve(Er.value,Gn++,this););return Gn},ae.prototype.__iteratorUncached=function(Ve,st){if(st)return this.cacheResult().__iterator(Ve,st);var Qt=Lr(this._collection);if(!Or(Qt))return new sn(xn);var Gn=0;return new sn(function(){var Er=Qt.next();return Er.done?Er:fn(Ve,Gn++,Er.value)})},ae}(wn);function kr(){return so||(so=new hr([]))}function Ei(le){var ae=pr(le);if(ae)return ae.fromEntrySeq();if("object"==typeof le)return new Oi(le);throw new TypeError("Expected Array or collection object of [k, v] entries, or keyed object: "+le)}function ii(le){var ae=pr(le);if(ae)return ae;throw new TypeError("Expected Array or collection object of values: "+le)}function pr(le){return ht(le)?new hr(le):Kr(le)?new Wi(le):void 0}var Eo="@@__IMMUTABLE_MAP__@@";function po(le){return Boolean(le&&le[Eo])}function $i(le){return po(le)&&it(le)}function qr(le){return Boolean(le&&"function"==typeof le.equals&&"function"==typeof le.hashCode)}function Hi(le,ae){if(le===ae||le!=le&&ae!=ae)return!0;if(!le||!ae)return!1;if("function"==typeof le.valueOf&&"function"==typeof ae.valueOf){if((le=le.valueOf())===(ae=ae.valueOf())||le!=le&&ae!=ae)return!0;if(!le||!ae)return!1}return!!(qr(le)&&qr(ae)&&le.equals(ae))}var Dn="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(ae,De){var Ve=65535&(ae|=0),st=65535&(De|=0);return Ve*st+((ae>>>16)*st+Ve*(De>>>16)<<16>>>0)|0};function Hn(le){return le>>>1&1073741824|3221225471&le}var jt=Object.prototype.valueOf;function Fe(le){if(null==le)return Ie(le);if("function"==typeof le.hashCode)return Hn(le.hashCode(le));var ae=function Pn(le){return le.valueOf!==jt&&"function"==typeof le.valueOf?le.valueOf(le):le}(le);if(null==ae)return Ie(ae);switch(typeof ae){case"boolean":return ae?1108378657:1108378656;case"number":return function et(le){if(le!=le||le===1/0)return 0;var ae=0|le;for(ae!==le&&(ae^=4294967295*le);le>4294967295;)ae^=le/=4294967295;return Hn(ae)}(ae);case"string":return ae.length>dn?function ze(le){var ae=mn[le];return void 0===ae&&(ae=an(le),Ot===Ge&&(Ot=0,mn={}),Ot++,mn[le]=ae),ae}(ae):an(ae);case"object":case"function":return function Rt(le){var ae;if(Pr&&void 0!==(ae=tr.get(le))||void 0!==(ae=le[Zt])||!qn&&(void 0!==(ae=le.propertyIsEnumerable&&le.propertyIsEnumerable[Zt])||(ae=function gr(le){if(le&&le.nodeType>0)switch(le.nodeType){case 1:return le.uniqueID;case 9:return le.documentElement&&le.documentElement.uniqueID}}(le),void 0!==ae)))return ae;if(ae=_r(),Pr)tr.set(le,ae);else{if(void 0!==Pe&&!1===Pe(le))throw new Error("Non-extensible objects are not allowed as keys.");if(qn)Object.defineProperty(le,Zt,{enumerable:!1,configurable:!1,writable:!1,value:ae});else if(void 0!==le.propertyIsEnumerable&&le.propertyIsEnumerable===le.constructor.prototype.propertyIsEnumerable)le.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},le.propertyIsEnumerable[Zt]=ae;else{if(void 0===le.nodeType)throw new Error("Unable to set a non-enumerable property on object.");le[Zt]=ae}}return ae}(ae);case"symbol":return function lt(le){var ae=Zn[le];return void 0!==ae||(ae=_r(),Zn[le]=ae),ae}(ae);default:if("function"==typeof ae.toString)return an(ae.toString());throw new Error("Value type "+typeof ae+" cannot be hashed.")}}function Ie(le){return null===le?1108378658:1108378659}function an(le){for(var ae=0,De=0;De<le.length;De++)ae=31*ae+le.charCodeAt(De)|0;return Hn(ae)}var Pe=Object.isExtensible,qn=function(){try{return Object.defineProperty({},"@",{}),!0}catch{return!1}}();function _r(){var le=++nr;return 1073741824&nr&&(nr=0),le}var tr,Pr="function"==typeof WeakMap;Pr&&(tr=new WeakMap);var Zn=Object.create(null),nr=0,Zt="__immutablehash__";"function"==typeof Symbol&&(Zt=Symbol(Zt));var dn=16,Ge=255,Ot=0,mn={},wr=function(le){function ae(De,Ve){this._iter=De,this._useKeys=Ve,this.size=De.size}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.get=function(Ve,st){return this._iter.get(Ve,st)},ae.prototype.has=function(Ve){return this._iter.has(Ve)},ae.prototype.valueSeq=function(){return this._iter.valueSeq()},ae.prototype.reverse=function(){var Ve=this,st=dr(this,!0);return this._useKeys||(st.valueSeq=function(){return Ve._iter.toSeq().reverse()}),st},ae.prototype.map=function(Ve,st){var zt=this,Qt=_s(this,Ve,st);return this._useKeys||(Qt.valueSeq=function(){return zt._iter.toSeq().map(Ve,st)}),Qt},ae.prototype.__iterate=function(Ve,st){var zt=this;return this._iter.__iterate(function(Qt,Gn){return Ve(Qt,Gn,zt)},st)},ae.prototype.__iterator=function(Ve,st){return this._iter.__iterator(Ve,st)},ae}(Tt);wr.prototype[Pt]=!0;var Ti=function(le){function ae(De){this._iter=De,this.size=De.size}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.includes=function(Ve){return this._iter.includes(Ve)},ae.prototype.__iterate=function(Ve,st){var zt=this,Qt=0;return st&&M(this),this._iter.__iterate(function(Gn){return Ve(Gn,st?zt.size-++Qt:Qt++,zt)},st)},ae.prototype.__iterator=function(Ve,st){var zt=this,Qt=this._iter.__iterator(cn,st),Gn=0;return st&&M(this),new sn(function(){var Er=Qt.next();return Er.done?Er:fn(Ve,st?zt.size-++Gn:Gn++,Er.value,Er)})},ae}(wn),Ci=function(le){function ae(De){this._iter=De,this.size=De.size}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.has=function(Ve){return this._iter.includes(Ve)},ae.prototype.__iterate=function(Ve,st){var zt=this;return this._iter.__iterate(function(Qt){return Ve(Qt,Qt,zt)},st)},ae.prototype.__iterator=function(Ve,st){var zt=this._iter.__iterator(cn,st);return new sn(function(){var Qt=zt.next();return Qt.done?Qt:fn(Ve,Qt.value,Qt.value,Qt)})},ae}(jn),Ai=function(le){function ae(De){this._iter=De,this.size=De.size}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.entrySeq=function(){return this._iter.toSeq()},ae.prototype.__iterate=function(Ve,st){var zt=this;return this._iter.__iterate(function(Qt){if(Qt){es(Qt);var Gn=de(Qt);return Ve(Gn?Qt.get(1):Qt[1],Gn?Qt.get(0):Qt[0],zt)}},st)},ae.prototype.__iterator=function(Ve,st){var zt=this._iter.__iterator(cn,st);return new sn(function(){for(;;){var Qt=zt.next();if(Qt.done)return Qt;var Gn=Qt.value;if(Gn){es(Gn);var Er=de(Gn);return fn(Ve,Er?Gn.get(0):Gn[0],Er?Gn.get(1):Gn[1],Qt)}}})},ae}(Tt);function Ko(le){var ae=jo(le);return ae._iter=le,ae.size=le.size,ae.flip=function(){return le},ae.reverse=function(){var De=le.reverse.apply(this);return De.flip=function(){return le.reverse()},De},ae.has=function(De){return le.includes(De)},ae.includes=function(De){return le.has(De)},ae.cacheResult=ss,ae.__iterateUncached=function(De,Ve){var st=this;return le.__iterate(function(zt,Qt){return!1!==De(Qt,zt,st)},Ve)},ae.__iteratorUncached=function(De,Ve){if(De===pn){var st=le.__iterator(De,Ve);return new sn(function(){var zt=st.next();if(!zt.done){var Qt=zt.value[0];zt.value[0]=zt.value[1],zt.value[1]=Qt}return zt})}return le.__iterator(De===cn?Xt:cn,Ve)},ae}function _s(le,ae,De){var Ve=jo(le);return Ve.size=le.size,Ve.has=function(st){return le.has(st)},Ve.get=function(st,zt){var Qt=le.get(st,e);return Qt===e?zt:ae.call(De,Qt,st,le)},Ve.__iterateUncached=function(st,zt){var Qt=this;return le.__iterate(function(Gn,Er,Nr){return!1!==st(ae.call(De,Gn,Er,Nr),Er,Qt)},zt)},Ve.__iteratorUncached=function(st,zt){var Qt=le.__iterator(pn,zt);return new sn(function(){var Gn=Qt.next();if(Gn.done)return Gn;var Er=Gn.value,Nr=Er[0];return fn(st,Nr,ae.call(De,Er[1],Nr,le),Gn)})},Ve}function dr(le,ae){var De=this,Ve=jo(le);return Ve._iter=le,Ve.size=le.size,Ve.reverse=function(){return le},le.flip&&(Ve.flip=function(){var st=Ko(le);return st.reverse=function(){return le.flip()},st}),Ve.get=function(st,zt){return le.get(ae?st:-1-st,zt)},Ve.has=function(st){return le.has(ae?st:-1-st)},Ve.includes=function(st){return le.includes(st)},Ve.cacheResult=ss,Ve.__iterate=function(st,zt){var Qt=this,Gn=0;return zt&&M(le),le.__iterate(function(Er,Nr){return st(Er,ae?Nr:zt?Qt.size-++Gn:Gn++,Qt)},!zt)},Ve.__iterator=function(st,zt){var Qt=0;zt&&M(le);var Gn=le.__iterator(pn,!zt);return new sn(function(){var Er=Gn.next();if(Er.done)return Er;var Nr=Er.value;return fn(st,ae?Nr[0]:zt?De.size-++Qt:Qt++,Nr[1],Er)})},Ve}function Ni(le,ae,De,Ve){var st=jo(le);return Ve&&(st.has=function(zt){var Qt=le.get(zt,e);return Qt!==e&&!!ae.call(De,Qt,zt,le)},st.get=function(zt,Qt){var Gn=le.get(zt,e);return Gn!==e&&ae.call(De,Gn,zt,le)?Gn:Qt}),st.__iterateUncached=function(zt,Qt){var Gn=this,Er=0;return le.__iterate(function(Nr,Mi,ao){if(ae.call(De,Nr,Mi,ao))return Er++,zt(Nr,Ve?Mi:Er-1,Gn)},Qt),Er},st.__iteratorUncached=function(zt,Qt){var Gn=le.__iterator(pn,Qt),Er=0;return new sn(function(){for(;;){var Nr=Gn.next();if(Nr.done)return Nr;var Mi=Nr.value,ao=Mi[0],Jo=Mi[1];if(ae.call(De,Jo,ao,le))return fn(zt,Ve?ao:Er++,Jo,Nr)}})},st}function ji(le,ae,De,Ve){var st=le.size;if(U(ae,De,st))return le;var zt=W(ae,st),Qt=$(De,st);if(zt!=zt||Qt!=Qt)return ji(le.toSeq().cacheResult(),ae,De,Ve);var Er,Gn=Qt-zt;Gn==Gn&&(Er=Gn<0?0:Gn);var Nr=jo(le);return Nr.size=0===Er?Er:le.size&&Er||void 0,!Ve&&qe(le)&&Er>=0&&(Nr.get=function(Mi,ao){return(Mi=w(this,Mi))>=0&&Mi<Er?le.get(Mi+zt,ao):ao}),Nr.__iterateUncached=function(Mi,ao){var Jo=this;if(0===Er)return 0;if(ao)return this.cacheResult().__iterate(Mi,ao);var rs=0,ys=!0,Ps=0;return le.__iterate(function(Ul,eu){if(!ys||!(ys=rs++<zt))return Ps++,!1!==Mi(Ul,Ve?eu:Ps-1,Jo)&&Ps!==Er}),Ps},Nr.__iteratorUncached=function(Mi,ao){if(0!==Er&&ao)return this.cacheResult().__iterator(Mi,ao);if(0===Er)return new sn(xn);var Jo=le.__iterator(Mi,ao),rs=0,ys=0;return new sn(function(){for(;rs++<zt;)Jo.next();if(++ys>Er)return{value:void 0,done:!0};var Ps=Jo.next();return Ve||Mi===cn||Ps.done?Ps:fn(Mi,ys-1,Mi===Xt?void 0:Ps.value[1],Ps)})},Nr}function Po(le,ae,De,Ve){var st=jo(le);return st.__iterateUncached=function(zt,Qt){var Gn=this;if(Qt)return this.cacheResult().__iterate(zt,Qt);var Er=!0,Nr=0;return le.__iterate(function(Mi,ao,Jo){if(!Er||!(Er=ae.call(De,Mi,ao,Jo)))return Nr++,zt(Mi,Ve?ao:Nr-1,Gn)}),Nr},st.__iteratorUncached=function(zt,Qt){var Gn=this;if(Qt)return this.cacheResult().__iterator(zt,Qt);var Er=le.__iterator(pn,Qt),Nr=!0,Mi=0;return new sn(function(){var ao,Jo,rs;do{if((ao=Er.next()).done)return Ve||zt===cn?ao:fn(zt,Mi++,zt===Xt?void 0:ao.value[1],ao);var ys=ao.value;Jo=ys[0],rs=ys[1],Nr&&(Nr=ae.call(De,rs,Jo,Gn))}while(Nr);return zt===pn?ao:fn(zt,Jo,rs,ao)})},st}function Ir(le,ae,De){var Ve=jo(le);return Ve.__iterateUncached=function(st,zt){if(zt)return this.cacheResult().__iterate(st,zt);var Qt=0,Gn=!1;return function Er(Nr,Mi){Nr.__iterate(function(ao,Jo){return(!ae||Mi<ae)&&de(ao)?Er(ao,Mi+1):(Qt++,!1===st(ao,De?Jo:Qt-1,Ve)&&(Gn=!0)),!Gn},zt)}(le,0),Qt},Ve.__iteratorUncached=function(st,zt){if(zt)return this.cacheResult().__iterator(st,zt);var Qt=le.__iterator(st,zt),Gn=[],Er=0;return new sn(function(){for(;Qt;){var Nr=Qt.next();if(!1===Nr.done){var Mi=Nr.value;if(st===pn&&(Mi=Mi[1]),ae&&!(Gn.length<ae)||!de(Mi))return De?Nr:fn(st,Er++,Mi,Nr);Gn.push(Qt),Qt=Mi.__iterator(st,zt)}else Qt=Gn.pop()}return{value:void 0,done:!0}})},Ve}function bn(le,ae,De){ae||(ae=gs);var Ve=ce(le),st=0,zt=le.toSeq().map(function(Qt,Gn){return[Gn,Qt,st++,De?De(Qt,Gn,le):Qt]}).valueSeq().toArray();return zt.sort(function(Qt,Gn){return ae(Qt[3],Gn[3])||Qt[2]-Gn[2]}).forEach(Ve?function(Qt,Gn){zt[Gn].length=2}:function(Qt,Gn){zt[Gn]=Qt[1]}),Ve?Tt(zt):fe(le)?wn(zt):jn(zt)}function Bn(le,ae,De){if(ae||(ae=gs),De){var Ve=le.toSeq().map(function(st,zt){return[st,De(st,zt,le)]}).reduce(function(st,zt){return ci(ae,st[1],zt[1])?zt:st});return Ve&&Ve[0]}return le.reduce(function(st,zt){return ci(ae,st,zt)?zt:st})}function ci(le,ae,De){var Ve=le(De,ae);return 0===Ve&&De!==ae&&(null==De||De!=De)||Ve>0}function _o(le,ae,De,Ve){var st=jo(le),zt=new hr(De).map(function(Qt){return Qt.size});return st.size=Ve?zt.max():zt.min(),st.__iterate=function(Qt,Gn){for(var Nr,Er=this.__iterator(cn,Gn),Mi=0;!(Nr=Er.next()).done&&!1!==Qt(Nr.value,Mi++,this););return Mi},st.__iteratorUncached=function(Qt,Gn){var Er=De.map(function(ao){return ao=$e(ao),Lr(Gn?ao.reverse():ao)}),Nr=0,Mi=!1;return new sn(function(){var ao;return Mi||(ao=Er.map(function(Jo){return Jo.next()}),Mi=Ve?ao.every(function(Jo){return Jo.done}):ao.some(function(Jo){return Jo.done})),Mi?{value:void 0,done:!0}:fn(Qt,Nr++,ae.apply(null,ao.map(function(Jo){return Jo.value})))})},st}function go(le,ae){return le===ae?le:qe(le)?ae:le.constructor(ae)}function es(le){if(le!==Object(le))throw new TypeError("Expected [K, V] tuple: "+le)}function ts(le){return ce(le)?ge:fe(le)?Et:ot}function jo(le){return Object.create((ce(le)?Tt:fe(le)?wn:jn).prototype)}function ss(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):Wt.prototype.cacheResult.call(this)}function gs(le,ae){return void 0===le&&void 0===ae?0:void 0===le?1:void 0===ae?-1:le>ae?1:le<ae?-1:0}function Is(le,ae){ae=ae||0;for(var De=Math.max(0,le.length-ae),Ve=new Array(De),st=0;st<De;st++)Ve[st]=le[st+ae];return Ve}function la(le,ae){if(!le)throw new Error(ae)}function Ro(le){la(le!==1/0,"Cannot perform this action with an infinite size.")}function jl(le){if(ht(le)&&"string"!=typeof le)return le;if(it(le))return le.toArray();throw new TypeError("Invalid keyPath: expected Ordered Collection or Array: "+le)}Ti.prototype.cacheResult=wr.prototype.cacheResult=Ci.prototype.cacheResult=Ai.prototype.cacheResult=ss;var gl=Object.prototype.toString;function qa(le){if(!le||"object"!=typeof le||"[object Object]"!==gl.call(le))return!1;var ae=Object.getPrototypeOf(le);if(null===ae)return!0;for(var De=ae,Ve=Object.getPrototypeOf(ae);null!==Ve;)De=Ve,Ve=Object.getPrototypeOf(De);return De===ae}function da(le){return"object"==typeof le&&(Le(le)||Array.isArray(le)||qa(le))}function $a(le){try{return"string"==typeof le?JSON.stringify(le):String(le)}catch{return JSON.stringify(le)}}function Rl(le,ae){return Le(le)?le.has(ae):da(le)&&br.call(le,ae)}function Ji(le,ae,De){return Le(le)?le.get(ae,De):Rl(le,ae)?"function"==typeof le.get?le.get(ae):le[ae]:De}function Ha(le){if(Array.isArray(le))return Is(le);var ae={};for(var De in le)br.call(le,De)&&(ae[De]=le[De]);return ae}function Ts(le,ae){if(!da(le))throw new TypeError("Cannot update non-data-structure value: "+le);if(Le(le)){if(!le.remove)throw new TypeError("Cannot update immutable value without .remove() method: "+le);return le.remove(ae)}if(!br.call(le,ae))return le;var De=Ha(le);return Array.isArray(De)?De.splice(ae,1):delete De[ae],De}function hs(le,ae,De){if(!da(le))throw new TypeError("Cannot update non-data-structure value: "+le);if(Le(le)){if(!le.set)throw new TypeError("Cannot update immutable value without .set() method: "+le);return le.set(ae,De)}if(br.call(le,ae)&&De===le[ae])return le;var Ve=Ha(le);return Ve[ae]=De,Ve}function $s(le,ae,De,Ve){Ve||(Ve=De,De=void 0);var st=Aa(Le(le),le,jl(ae),0,De,Ve);return st===e?De:st}function Aa(le,ae,De,Ve,st,zt){var Qt=ae===e;if(Ve===De.length){var Gn=Qt?st:ae,Er=zt(Gn);return Er===Gn?ae:Er}if(!Qt&&!da(ae))throw new TypeError("Cannot update within non-data-structure value in path ["+De.slice(0,Ve).map($a)+"]: "+ae);var Nr=De[Ve],Mi=Qt?e:Ji(ae,Nr,e),ao=Aa(Mi===e?le:Le(Mi),Mi,De,Ve+1,st,zt);return ao===Mi?ae:ao===e?Ts(ae,Nr):hs(Qt?le?Gs():{}:ae,Nr,ao)}function Ja(le,ae,De){return $s(le,ae,e,function(){return De})}function fa(le,ae){return Ja(this,le,ae)}function Xo(le,ae){return $s(le,ae,function(){return e})}function No(le){return Xo(this,le)}function Cs(le,ae,De,Ve){return $s(le,[ae],De,Ve)}function ns(le,ae,De){return 1===arguments.length?le(this):Cs(this,le,ae,De)}function Fo(le,ae,De){return $s(this,le,ae,De)}function zr(){for(var le=[],ae=arguments.length;ae--;)le[ae]=arguments[ae];return gt(this,le)}function io(le){for(var ae=[],De=arguments.length-1;De-- >0;)ae[De]=arguments[De+1];if("function"!=typeof le)throw new TypeError("Invalid merger function: "+le);return gt(this,ae,le)}function gt(le,ae,De){for(var Ve=[],st=0;st<ae.length;st++){var zt=ge(ae[st]);0!==zt.size&&Ve.push(zt)}return 0===Ve.length?le:0!==le.toSeq().size||le.__ownerID||1!==Ve.length?le.withMutations(function(Qt){for(var Gn=De?function(Nr,Mi){Cs(Qt,Mi,e,function(ao){return ao===e?Nr:De(ao,Nr,Mi)})}:function(Nr,Mi){Qt.set(Mi,Nr)},Er=0;Er<Ve.length;Er++)Ve[Er].forEach(Gn)}):le.constructor(Ve[0])}function Tn(le){for(var ae=[],De=arguments.length-1;De-- >0;)ae[De]=arguments[De+1];return vi(le,ae)}function ie(le,ae){for(var De=[],Ve=arguments.length-2;Ve-- >0;)De[Ve]=arguments[Ve+2];return vi(ae,De,le)}function Ze(le){for(var ae=[],De=arguments.length-1;De-- >0;)ae[De]=arguments[De+1];return gn(le,ae)}function Jt(le,ae){for(var De=[],Ve=arguments.length-2;Ve-- >0;)De[Ve]=arguments[Ve+2];return gn(ae,De,le)}function gn(le,ae,De){return vi(le,ae,function Bi(le){return function ae(De,Ve,st){return da(De)&&da(Ve)&&function Xi(le,ae){var De=Wt(le),Ve=Wt(ae);return fe(De)===fe(Ve)&&ce(De)===ce(Ve)}(De,Ve)?vi(De,[Ve],ae):le?le(De,Ve,st):Ve}}(De))}function vi(le,ae,De){if(!da(le))throw new TypeError("Cannot merge into non-data-structure value: "+le);if(Le(le))return"function"==typeof De&&le.mergeWith?le.mergeWith.apply(le,[De].concat(ae)):le.merge?le.merge.apply(le,ae):le.concat.apply(le,ae);for(var Ve=Array.isArray(le),st=le,zt=Ve?Et:ge,Qt=Ve?function(Er){st===le&&(st=Ha(st)),st.push(Er)}:function(Er,Nr){var Mi=br.call(st,Nr),ao=Mi&&De?De(st[Nr],Er,Nr):Er;(!Mi||ao!==st[Nr])&&(st===le&&(st=Ha(st)),st[Nr]=ao)},Gn=0;Gn<ae.length;Gn++)zt(ae[Gn]).forEach(Qt);return st}function ws(){for(var le=[],ae=arguments.length;ae--;)le[ae]=arguments[ae];return gn(this,le)}function ds(le){for(var ae=[],De=arguments.length-1;De-- >0;)ae[De]=arguments[De+1];return gn(this,ae,le)}function qs(le){for(var ae=[],De=arguments.length-1;De-- >0;)ae[De]=arguments[De+1];return $s(this,le,Gs(),function(Ve){return vi(Ve,ae)})}function Js(le){for(var ae=[],De=arguments.length-1;De-- >0;)ae[De]=arguments[De+1];return $s(this,le,Gs(),function(Ve){return gn(Ve,ae)})}function Ll(le){var ae=this.asMutable();return le(ae),ae.wasAltered()?ae.__ensureOwner(this.__ownerID):this}function vl(){return this.__ownerID?this:this.__ensureOwner(new T)}function Yu(){return this.__ensureOwner()}function Nc(){return this.__altered}var qu=function(le){function ae(De){return null==De?Gs():po(De)&&!it(De)?De:Gs().withMutations(function(Ve){var st=le(De);Ro(st.size),st.forEach(function(zt,Qt){return Ve.set(Qt,zt)})})}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.of=function(){for(var Ve=[],st=arguments.length;st--;)Ve[st]=arguments[st];return Gs().withMutations(function(zt){for(var Qt=0;Qt<Ve.length;Qt+=2){if(Qt+1>=Ve.length)throw new Error("Missing value for key: "+Ve[Qt]);zt.set(Ve[Qt],Ve[Qt+1])}})},ae.prototype.toString=function(){return this.__toString("Map {","}")},ae.prototype.get=function(Ve,st){return this._root?this._root.get(0,void 0,Ve,st):st},ae.prototype.set=function(Ve,st){return ku(this,Ve,st)},ae.prototype.remove=function(Ve){return ku(this,Ve,e)},ae.prototype.deleteAll=function(Ve){var st=$e(Ve);return 0===st.size?this:this.withMutations(function(zt){st.forEach(function(Qt){return zt.remove(Qt)})})},ae.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Gs()},ae.prototype.sort=function(Ve){return To(bn(this,Ve))},ae.prototype.sortBy=function(Ve,st){return To(bn(this,st,Ve))},ae.prototype.map=function(Ve,st){var zt=this;return this.withMutations(function(Qt){Qt.forEach(function(Gn,Er){Qt.set(Er,Ve.call(st,Gn,Er,zt))})})},ae.prototype.__iterator=function(Ve,st){return new ju(this,Ve,st)},ae.prototype.__iterate=function(Ve,st){var zt=this,Qt=0;return this._root&&this._root.iterate(function(Gn){return Qt++,Ve(Gn[1],Gn[0],zt)},st),Qt},ae.prototype.__ensureOwner=function(Ve){return Ve===this.__ownerID?this:Ve?Xl(this.size,this._root,Ve,this.__hash):0===this.size?Gs():(this.__ownerID=Ve,this.__altered=!1,this)},ae}(ge);qu.isMap=po;var Ol=qu.prototype;Ol[Eo]=!0,Ol[r]=Ol.remove,Ol.removeAll=Ol.deleteAll,Ol.setIn=fa,Ol.removeIn=Ol.deleteIn=No,Ol.update=ns,Ol.updateIn=Fo,Ol.merge=Ol.concat=zr,Ol.mergeWith=io,Ol.mergeDeep=ws,Ol.mergeDeepWith=ds,Ol.mergeIn=qs,Ol.mergeDeepIn=Js,Ol.withMutations=Ll,Ol.wasAltered=Nc,Ol.asImmutable=Yu,Ol["@@transducer/init"]=Ol.asMutable=vl,Ol["@@transducer/step"]=function(le,ae){return le.set(ae[0],ae[1])},Ol["@@transducer/result"]=function(le){return le.asImmutable()};var Kc=function(ae,De){this.ownerID=ae,this.entries=De};Kc.prototype.get=function(ae,De,Ve,st){for(var zt=this.entries,Qt=0,Gn=zt.length;Qt<Gn;Qt++)if(Hi(Ve,zt[Qt][0]))return zt[Qt][1];return st},Kc.prototype.update=function(ae,De,Ve,st,zt,Qt,Gn){for(var Er=zt===e,Nr=this.entries,Mi=0,ao=Nr.length;Mi<ao&&!Hi(st,Nr[Mi][0]);Mi++);var Jo=Mi<ao;if(Jo?Nr[Mi][1]===zt:Er)return this;if(m(Gn),(Er||!Jo)&&m(Qt),!Er||1!==Nr.length){if(!Jo&&!Er&&Nr.length>=dc)return function uu(le,ae,De,Ve){le||(le=new T);for(var st=new yu(le,Fe(De),[De,Ve]),zt=0;zt<ae.length;zt++){var Qt=ae[zt];st=st.update(le,0,void 0,Qt[0],Qt[1])}return st}(ae,Nr,st,zt);var rs=ae&&ae===this.ownerID,ys=rs?Nr:Is(Nr);return Jo?Er?Mi===ao-1?ys.pop():ys[Mi]=ys.pop():ys[Mi]=[st,zt]:ys.push([st,zt]),rs?(this.entries=ys,this):new Kc(ae,ys)}};var yl=function(ae,De,Ve){this.ownerID=ae,this.bitmap=De,this.nodes=Ve};yl.prototype.get=function(ae,De,Ve,st){void 0===De&&(De=Fe(Ve));var zt=1<<((0===ae?De:De>>>ae)&u),Qt=this.bitmap;return Qt&zt?this.nodes[Ba(Qt&zt-1)].get(ae+a,De,Ve,st):st},yl.prototype.update=function(ae,De,Ve,st,zt,Qt,Gn){void 0===Ve&&(Ve=Fe(st));var Er=(0===De?Ve:Ve>>>De)&u,Nr=1<<Er,Mi=this.bitmap,ao=0!=(Mi&Nr);if(!ao&&zt===e)return this;var Jo=Ba(Mi&Nr-1),rs=this.nodes,ys=ao?rs[Jo]:void 0,Ps=zu(ys,ae,De+a,Ve,st,zt,Qt,Gn);if(Ps===ys)return this;if(!ao&&Ps&&rs.length>=cu)return function $u(le,ae,De,Ve,st){for(var zt=0,Qt=new Array(c),Gn=0;0!==De;Gn++,De>>>=1)Qt[Gn]=1&De?ae[zt++]:void 0;return Qt[Ve]=st,new au(le,zt+1,Qt)}(ae,rs,Mi,Er,Ps);if(ao&&!Ps&&2===rs.length&&ua(rs[1^Jo]))return rs[1^Jo];if(ao&&Ps&&1===rs.length&&ua(Ps))return Ps;var Ul=ae&&ae===this.ownerID,eu=ao?Ps?Mi:Mi^Nr:Mi|Nr,mu=ao?Ps?Tl(rs,Jo,Ps,Ul):function Ga(le,ae,De){var Ve=le.length-1;if(De&&ae===Ve)return le.pop(),le;for(var st=new Array(Ve),zt=0,Qt=0;Qt<Ve;Qt++)Qt===ae&&(zt=1),st[Qt]=le[Qt+zt];return st}(rs,Jo,Ul):function tl(le,ae,De,Ve){var st=le.length+1;if(Ve&&ae+1===st)return le[ae]=De,le;for(var zt=new Array(st),Qt=0,Gn=0;Gn<st;Gn++)Gn===ae?(zt[Gn]=De,Qt=-1):zt[Gn]=le[Gn+Qt];return zt}(rs,Jo,Ps,Ul);return Ul?(this.bitmap=eu,this.nodes=mu,this):new yl(ae,eu,mu)};var au=function(ae,De,Ve){this.ownerID=ae,this.count=De,this.nodes=Ve};au.prototype.get=function(ae,De,Ve,st){void 0===De&&(De=Fe(Ve));var Qt=this.nodes[(0===ae?De:De>>>ae)&u];return Qt?Qt.get(ae+a,De,Ve,st):st},au.prototype.update=function(ae,De,Ve,st,zt,Qt,Gn){void 0===Ve&&(Ve=Fe(st));var Er=(0===De?Ve:Ve>>>De)&u,Mi=this.nodes,ao=Mi[Er];if(zt===e&&!ao)return this;var Jo=zu(ao,ae,De+a,Ve,st,zt,Qt,Gn);if(Jo===ao)return this;var rs=this.count;if(ao){if(!Jo&&--rs<Sa)return function Eu(le,ae,De,Ve){for(var st=0,zt=0,Qt=new Array(De),Gn=0,Er=1,Nr=ae.length;Gn<Nr;Gn++,Er<<=1){var Mi=ae[Gn];void 0!==Mi&&Gn!==Ve&&(st|=Er,Qt[zt++]=Mi)}return new yl(le,st,Qt)}(ae,Mi,rs,Er)}else rs++;var ys=ae&&ae===this.ownerID,Ps=Tl(Mi,Er,Jo,ys);return ys?(this.count=rs,this.nodes=Ps,this):new au(ae,rs,Ps)};var Da=function(ae,De,Ve){this.ownerID=ae,this.keyHash=De,this.entries=Ve};Da.prototype.get=function(ae,De,Ve,st){for(var zt=this.entries,Qt=0,Gn=zt.length;Qt<Gn;Qt++)if(Hi(Ve,zt[Qt][0]))return zt[Qt][1];return st},Da.prototype.update=function(ae,De,Ve,st,zt,Qt,Gn){void 0===Ve&&(Ve=Fe(st));var Er=zt===e;if(Ve!==this.keyHash)return Er?this:(m(Gn),m(Qt),El(this,ae,De,Ve,[st,zt]));for(var Nr=this.entries,Mi=0,ao=Nr.length;Mi<ao&&!Hi(st,Nr[Mi][0]);Mi++);var Jo=Mi<ao;if(Jo?Nr[Mi][1]===zt:Er)return this;if(m(Gn),(Er||!Jo)&&m(Qt),Er&&2===ao)return new yu(ae,this.keyHash,Nr[1^Mi]);var rs=ae&&ae===this.ownerID,ys=rs?Nr:Is(Nr);return Jo?Er?Mi===ao-1?ys.pop():ys[Mi]=ys.pop():ys[Mi]=[st,zt]:ys.push([st,zt]),rs?(this.entries=ys,this):new Da(ae,this.keyHash,ys)};var yu=function(ae,De,Ve){this.ownerID=ae,this.keyHash=De,this.entry=Ve};yu.prototype.get=function(ae,De,Ve,st){return Hi(Ve,this.entry[0])?this.entry[1]:st},yu.prototype.update=function(ae,De,Ve,st,zt,Qt,Gn){var Er=zt===e,Nr=Hi(st,this.entry[0]);return(Nr?zt===this.entry[1]:Er)?this:(m(Gn),Er?void m(Qt):Nr?ae&&ae===this.ownerID?(this.entry[1]=zt,this):new yu(ae,this.keyHash,[st,zt]):(m(Qt),El(this,ae,De,Fe(st),[st,zt])))},Kc.prototype.iterate=Da.prototype.iterate=function(le,ae){for(var De=this.entries,Ve=0,st=De.length-1;Ve<=st;Ve++)if(!1===le(De[ae?st-Ve:Ve]))return!1},yl.prototype.iterate=au.prototype.iterate=function(le,ae){for(var De=this.nodes,Ve=0,st=De.length-1;Ve<=st;Ve++){var zt=De[ae?st-Ve:Ve];if(zt&&!1===zt.iterate(le,ae))return!1}},yu.prototype.iterate=function(le,ae){return le(this.entry)};var Ic,ju=function(le){function ae(De,Ve,st){this._type=Ve,this._reverse=st,this._stack=De._root&&oc(De._root)}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.next=function(){for(var Ve=this._type,st=this._stack;st;){var zt=st.node,Qt=st.index++,Gn=void 0;if(zt.entry){if(0===Qt)return el(Ve,zt.entry)}else if(zt.entries){if(Qt<=(Gn=zt.entries.length-1))return el(Ve,zt.entries[this._reverse?Gn-Qt:Qt])}else if(Qt<=(Gn=zt.nodes.length-1)){var Er=zt.nodes[this._reverse?Gn-Qt:Qt];if(Er){if(Er.entry)return el(Ve,Er.entry);st=this._stack=oc(Er,st)}continue}st=this._stack=this._stack.__prev}return{value:void 0,done:!0}},ae}(sn);function el(le,ae){return fn(le,ae[0],ae[1])}function oc(le,ae){return{node:le,index:0,__prev:ae}}function Xl(le,ae,De,Ve){var st=Object.create(Ol);return st.size=le,st._root=ae,st.__ownerID=De,st.__hash=Ve,st.__altered=!1,st}function Gs(){return Ic||(Ic=Xl(0))}function ku(le,ae,De){var Ve,st;if(le._root){var zt={value:!1},Qt={value:!1};if(Ve=zu(le._root,le.__ownerID,0,void 0,ae,De,zt,Qt),!Qt.value)return le;st=le.size+(zt.value?De===e?-1:1:0)}else{if(De===e)return le;st=1,Ve=new Kc(le.__ownerID,[[ae,De]])}return le.__ownerID?(le.size=st,le._root=Ve,le.__hash=void 0,le.__altered=!0,le):Ve?Xl(st,Ve):Gs()}function zu(le,ae,De,Ve,st,zt,Qt,Gn){return le?le.update(ae,De,Ve,st,zt,Qt,Gn):zt===e?le:(m(Gn),m(Qt),new yu(ae,Ve,[st,zt]))}function ua(le){return le.constructor===yu||le.constructor===Da}function El(le,ae,De,Ve,st){if(le.keyHash===Ve)return new Da(ae,Ve,[le.entry,st]);var Gn,zt=(0===De?le.keyHash:le.keyHash>>>De)&u,Qt=(0===De?Ve:Ve>>>De)&u,Er=zt===Qt?[El(le,ae,De+a,Ve,st)]:(Gn=new yu(ae,Ve,st),zt<Qt?[le,Gn]:[Gn,le]);return new yl(ae,1<<zt|1<<Qt,Er)}function Ba(le){return le=(le=(858993459&(le-=le>>1&1431655765))+(le>>2&858993459))+(le>>4)&252645135,127&(le+=le>>8)+(le>>16)}function Tl(le,ae,De,Ve){var st=Ve?le:Is(le);return st[ae]=De,st}var dc=c/4,cu=c/2,Sa=c/4,Ru="@@__IMMUTABLE_LIST__@@";function xu(le){return Boolean(le&&le[Ru])}var ba=function(le){function ae(De){var Ve=zs();if(null==De)return Ve;if(xu(De))return De;var st=le(De),zt=st.size;return 0===zt?Ve:(Ro(zt),zt>0&&zt<c?Al(0,zt,a,null,new Su(st.toArray())):Ve.withMutations(function(Qt){Qt.setSize(zt),st.forEach(function(Gn,Er){return Qt.set(Er,Gn)})}))}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.of=function(){return this(arguments)},ae.prototype.toString=function(){return this.__toString("List [","]")},ae.prototype.get=function(Ve,st){if((Ve=w(this,Ve))>=0&&Ve<this.size){var zt=Je(this,Ve+=this._origin);return zt&&zt.array[Ve&u]}return st},ae.prototype.set=function(Ve,st){return function Vc(le,ae,De){if((ae=w(le,ae))!=ae)return le;if(ae>=le.size||ae<0)return le.withMutations(function(Qt){ae<0?en(Qt,ae).set(0,De):en(Qt,0,ae+1).set(ae,De)});var Ve=le._tail,st=le._root,zt={value:!1};return(ae+=le._origin)>=fi(le._capacity)?Ve=bt(Ve,le.__ownerID,0,ae,De,zt):st=bt(st,le.__ownerID,le._level,ae,De,zt),zt.value?le.__ownerID?(le._root=st,le._tail=Ve,le.__hash=void 0,le.__altered=!0,le):Al(le._origin,le._capacity,le._level,st,Ve):le}(this,Ve,st)},ae.prototype.remove=function(Ve){return this.has(Ve)?0===Ve?this.shift():Ve===this.size-1?this.pop():this.splice(Ve,1):this},ae.prototype.insert=function(Ve,st){return this.splice(Ve,0,st)},ae.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=a,this._root=this._tail=this.__hash=void 0,this.__altered=!0,this):zs()},ae.prototype.push=function(){var Ve=arguments,st=this.size;return this.withMutations(function(zt){en(zt,0,st+Ve.length);for(var Qt=0;Qt<Ve.length;Qt++)zt.set(st+Qt,Ve[Qt])})},ae.prototype.pop=function(){return en(this,0,-1)},ae.prototype.unshift=function(){var Ve=arguments;return this.withMutations(function(st){en(st,-Ve.length);for(var zt=0;zt<Ve.length;zt++)st.set(zt,Ve[zt])})},ae.prototype.shift=function(){return en(this,1)},ae.prototype.concat=function(){for(var Ve=arguments,st=[],zt=0;zt<arguments.length;zt++){var Qt=Ve[zt],Gn=le("string"!=typeof Qt&&Kr(Qt)?Qt:[Qt]);0!==Gn.size&&st.push(Gn)}return 0===st.length?this:0!==this.size||this.__ownerID||1!==st.length?this.withMutations(function(Er){st.forEach(function(Nr){return Nr.forEach(function(Mi){return Er.push(Mi)})})}):this.constructor(st[0])},ae.prototype.setSize=function(Ve){return en(this,0,Ve)},ae.prototype.map=function(Ve,st){var zt=this;return this.withMutations(function(Qt){for(var Gn=0;Gn<zt.size;Gn++)Qt.set(Gn,Ve.call(st,Qt.get(Gn),Gn,zt))})},ae.prototype.slice=function(Ve,st){var zt=this.size;return U(Ve,st,zt)?this:en(this,W(Ve,zt),$(st,zt))},ae.prototype.__iterator=function(Ve,st){var zt=st?this.size:0,Qt=ql(this,st);return new sn(function(){var Gn=Qt();return Gn===gc?{value:void 0,done:!0}:fn(Ve,st?--zt:zt++,Gn)})},ae.prototype.__iterate=function(Ve,st){for(var Gn,zt=st?this.size:0,Qt=ql(this,st);(Gn=Qt())!==gc&&!1!==Ve(Gn,st?--zt:zt++,this););return zt},ae.prototype.__ensureOwner=function(Ve){return Ve===this.__ownerID?this:Ve?Al(this._origin,this._capacity,this._level,this._root,this._tail,Ve,this.__hash):0===this.size?zs():(this.__ownerID=Ve,this.__altered=!1,this)},ae}(Et);ba.isList=xu;var nl=ba.prototype;nl[Ru]=!0,nl[r]=nl.remove,nl.merge=nl.concat,nl.setIn=fa,nl.deleteIn=nl.removeIn=No,nl.update=ns,nl.updateIn=Fo,nl.mergeIn=qs,nl.mergeDeepIn=Js,nl.withMutations=Ll,nl.wasAltered=Nc,nl.asImmutable=Yu,nl["@@transducer/init"]=nl.asMutable=vl,nl["@@transducer/step"]=function(le,ae){return le.push(ae)},nl["@@transducer/result"]=function(le){return le.asImmutable()};var Su=function(ae,De){this.array=ae,this.ownerID=De};Su.prototype.removeBefore=function(ae,De,Ve){if(Ve===De?1<<De:0===this.array.length)return this;var st=Ve>>>De&u;if(st>=this.array.length)return new Su([],ae);var Qt,zt=0===st;if(De>0){var Gn=this.array[st];if((Qt=Gn&&Gn.removeBefore(ae,De-a,Ve))===Gn&&zt)return this}if(zt&&!Qt)return this;var Er=pt(this,ae);if(!zt)for(var Nr=0;Nr<st;Nr++)Er.array[Nr]=void 0;return Qt&&(Er.array[st]=Qt),Er},Su.prototype.removeAfter=function(ae,De,Ve){if(Ve===(De?1<<De:0)||0===this.array.length)return this;var zt,st=Ve-1>>>De&u;if(st>=this.array.length)return this;if(De>0){var Qt=this.array[st];if((zt=Qt&&Qt.removeAfter(ae,De-a,Ve))===Qt&&st===this.array.length-1)return this}var Gn=pt(this,ae);return Gn.array.splice(st+1),zt&&(Gn.array[st]=zt),Gn};var Dc,gc={};function ql(le,ae){var De=le._origin,Ve=le._capacity,st=fi(Ve),zt=le._tail;return function Qt(Nr,Mi,ao){return 0===Mi?function Gn(Nr,Mi){var ao=Mi===st?zt&&zt.array:Nr&&Nr.array,Jo=Mi>De?0:De-Mi,rs=Ve-Mi;return rs>c&&(rs=c),function(){if(Jo===rs)return gc;var ys=ae?--rs:Jo++;return ao&&ao[ys]}}(Nr,ao):function Er(Nr,Mi,ao){var Jo,rs=Nr&&Nr.array,ys=ao>De?0:De-ao>>Mi,Ps=1+(Ve-ao>>Mi);return Ps>c&&(Ps=c),function(){for(;;){if(Jo){var Ul=Jo();if(Ul!==gc)return Ul;Jo=null}if(ys===Ps)return gc;var eu=ae?--Ps:ys++;Jo=Qt(rs&&rs[eu],Mi-a,ao+(eu<<Mi))}}}(Nr,Mi,ao)}(le._root,le._level,0)}function Al(le,ae,De,Ve,st,zt,Qt){var Gn=Object.create(nl);return Gn.size=ae-le,Gn._origin=le,Gn._capacity=ae,Gn._level=De,Gn._root=Ve,Gn._tail=st,Gn.__ownerID=zt,Gn.__hash=Qt,Gn.__altered=!1,Gn}function zs(){return Dc||(Dc=Al(0,0,a))}function bt(le,ae,De,Ve,st,zt){var Er,Qt=Ve>>>De&u,Gn=le&&Qt<le.array.length;if(!Gn&&void 0===st)return le;if(De>0){var Nr=le&&le.array[Qt],Mi=bt(Nr,ae,De-a,Ve,st,zt);return Mi===Nr?le:((Er=pt(le,ae)).array[Qt]=Mi,Er)}return Gn&&le.array[Qt]===st?le:(zt&&m(zt),Er=pt(le,ae),void 0===st&&Qt===Er.array.length-1?Er.array.pop():Er.array[Qt]=st,Er)}function pt(le,ae){return ae&&le&&ae===le.ownerID?le:new Su(le?le.array.slice():[],ae)}function Je(le,ae){if(ae>=fi(le._capacity))return le._tail;if(ae<1<<le._level+a){for(var De=le._root,Ve=le._level;De&&Ve>0;)De=De.array[ae>>>Ve&u],Ve-=a;return De}}function en(le,ae,De){void 0!==ae&&(ae|=0),void 0!==De&&(De|=0);var Ve=le.__ownerID||new T,st=le._origin,zt=le._capacity,Qt=st+ae,Gn=void 0===De?zt:De<0?zt+De:st+De;if(Qt===st&&Gn===zt)return le;if(Qt>=Gn)return le.clear();for(var Er=le._level,Nr=le._root,Mi=0;Qt+Mi<0;)Nr=new Su(Nr&&Nr.array.length?[void 0,Nr]:[],Ve),Mi+=1<<(Er+=a);Mi&&(Qt+=Mi,st+=Mi,Gn+=Mi,zt+=Mi);for(var ao=fi(zt),Jo=fi(Gn);Jo>=1<<Er+a;)Nr=new Su(Nr&&Nr.array.length?[Nr]:[],Ve),Er+=a;var rs=le._tail,ys=Jo<ao?Je(le,Gn-1):Jo>ao?new Su([],Ve):rs;if(rs&&Jo>ao&&Qt<zt&&rs.array.length){for(var Ps=Nr=pt(Nr,Ve),Ul=Er;Ul>a;Ul-=a){var eu=ao>>>Ul&u;Ps=Ps.array[eu]=pt(Ps.array[eu],Ve)}Ps.array[ao>>>a&u]=rs}if(Gn<zt&&(ys=ys&&ys.removeAfter(Ve,0,Gn)),Qt>=Jo)Qt-=Jo,Gn-=Jo,Er=a,Nr=null,ys=ys&&ys.removeBefore(Ve,0,Qt);else if(Qt>st||Jo<ao){for(Mi=0;Nr;){var mu=Qt>>>Er&u;if(mu!==Jo>>>Er&u)break;mu&&(Mi+=(1<<Er)*mu),Er-=a,Nr=Nr.array[mu]}Nr&&Qt>st&&(Nr=Nr.removeBefore(Ve,Er,Qt-Mi)),Nr&&Jo<ao&&(Nr=Nr.removeAfter(Ve,Er,Jo-Mi)),Mi&&(Qt-=Mi,Gn-=Mi)}return le.__ownerID?(le.size=Gn-Qt,le._origin=Qt,le._capacity=Gn,le._level=Er,le._root=Nr,le._tail=ys,le.__hash=void 0,le.__altered=!0,le):Al(Qt,Gn,Er,Nr,ys)}function fi(le){return le<c?0:le-1>>>a<<a}var mi,To=function(le){function ae(De){return null==De?Hs():$i(De)?De:Hs().withMutations(function(Ve){var st=ge(De);Ro(st.size),st.forEach(function(zt,Qt){return Ve.set(Qt,zt)})})}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.of=function(){return this(arguments)},ae.prototype.toString=function(){return this.__toString("OrderedMap {","}")},ae.prototype.get=function(Ve,st){var zt=this._map.get(Ve);return void 0!==zt?this._list.get(zt)[1]:st},ae.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this.__altered=!0,this):Hs()},ae.prototype.set=function(Ve,st){return Qs(this,Ve,st)},ae.prototype.remove=function(Ve){return Qs(this,Ve,e)},ae.prototype.__iterate=function(Ve,st){var zt=this;return this._list.__iterate(function(Qt){return Qt&&Ve(Qt[1],Qt[0],zt)},st)},ae.prototype.__iterator=function(Ve,st){return this._list.fromEntrySeq().__iterator(Ve,st)},ae.prototype.__ensureOwner=function(Ve){if(Ve===this.__ownerID)return this;var st=this._map.__ensureOwner(Ve),zt=this._list.__ensureOwner(Ve);return Ve?Ya(st,zt,Ve,this.__hash):0===this.size?Hs():(this.__ownerID=Ve,this.__altered=!1,this._map=st,this._list=zt,this)},ae}(qu);function Ya(le,ae,De,Ve){var st=Object.create(To.prototype);return st.size=le?le.size:0,st._map=le,st._list=ae,st.__ownerID=De,st.__hash=Ve,st.__altered=!1,st}function Hs(){return mi||(mi=Ya(Gs(),zs()))}function Qs(le,ae,De){var Gn,Er,Ve=le._map,st=le._list,zt=Ve.get(ae),Qt=void 0!==zt;if(De===e){if(!Qt)return le;st.size>=c&&st.size>=2*Ve.size?(Gn=(Er=st.filter(function(Nr,Mi){return void 0!==Nr&&zt!==Mi})).toKeyedSeq().map(function(Nr){return Nr[0]}).flip().toMap(),le.__ownerID&&(Gn.__ownerID=Er.__ownerID=le.__ownerID)):(Gn=Ve.remove(ae),Er=zt===st.size-1?st.pop():st.set(zt,void 0))}else if(Qt){if(De===st.get(zt)[1])return le;Gn=Ve,Er=st.set(zt,[ae,De])}else Gn=Ve.set(ae,st.size),Er=st.set(st.size,[ae,De]);return le.__ownerID?(le.size=Gn.size,le._map=Gn,le._list=Er,le.__hash=void 0,le.__altered=!0,le):Ya(Gn,Er)}To.isOrderedMap=$i,To.prototype[Pt]=!0,To.prototype[r]=To.prototype.remove;var Hu="@@__IMMUTABLE_STACK__@@";function zl(le){return Boolean(le&&le[Hu])}var sc=function(le){function ae(De){return null==De?ec():zl(De)?De:ec().pushAll(De)}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.of=function(){return this(arguments)},ae.prototype.toString=function(){return this.__toString("Stack [","]")},ae.prototype.get=function(Ve,st){var zt=this._head;for(Ve=w(this,Ve);zt&&Ve--;)zt=zt.next;return zt?zt.value:st},ae.prototype.peek=function(){return this._head&&this._head.value},ae.prototype.push=function(){var Ve=arguments;if(0===arguments.length)return this;for(var st=this.size+arguments.length,zt=this._head,Qt=arguments.length-1;Qt>=0;Qt--)zt={value:Ve[Qt],next:zt};return this.__ownerID?(this.size=st,this._head=zt,this.__hash=void 0,this.__altered=!0,this):lu(st,zt)},ae.prototype.pushAll=function(Ve){if(0===(Ve=le(Ve)).size)return this;if(0===this.size&&zl(Ve))return Ve;Ro(Ve.size);var st=this.size,zt=this._head;return Ve.__iterate(function(Qt){st++,zt={value:Qt,next:zt}},!0),this.__ownerID?(this.size=st,this._head=zt,this.__hash=void 0,this.__altered=!0,this):lu(st,zt)},ae.prototype.pop=function(){return this.slice(1)},ae.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):ec()},ae.prototype.slice=function(Ve,st){if(U(Ve,st,this.size))return this;var zt=W(Ve,this.size);if($(st,this.size)!==this.size)return le.prototype.slice.call(this,Ve,st);for(var Gn=this.size-zt,Er=this._head;zt--;)Er=Er.next;return this.__ownerID?(this.size=Gn,this._head=Er,this.__hash=void 0,this.__altered=!0,this):lu(Gn,Er)},ae.prototype.__ensureOwner=function(Ve){return Ve===this.__ownerID?this:Ve?lu(this.size,this._head,Ve,this.__hash):0===this.size?ec():(this.__ownerID=Ve,this.__altered=!1,this)},ae.prototype.__iterate=function(Ve,st){var zt=this;if(st)return new hr(this.toArray()).__iterate(function(Er,Nr){return Ve(Er,Nr,zt)},st);for(var Qt=0,Gn=this._head;Gn&&!1!==Ve(Gn.value,Qt++,this);)Gn=Gn.next;return Qt},ae.prototype.__iterator=function(Ve,st){if(st)return new hr(this.toArray()).__iterator(Ve,st);var zt=0,Qt=this._head;return new sn(function(){if(Qt){var Gn=Qt.value;return Qt=Qt.next,fn(Ve,zt++,Gn)}return{value:void 0,done:!0}})},ae}(Et);sc.isStack=zl;var id,hu=sc.prototype;function lu(le,ae,De,Ve){var st=Object.create(hu);return st.size=le,st._head=ae,st.__ownerID=De,st.__hash=Ve,st.__altered=!1,st}function ec(){return id||(id=lu(0))}hu[Hu]=!0,hu.shift=hu.pop,hu.unshift=hu.push,hu.unshiftAll=hu.pushAll,hu.withMutations=Ll,hu.wasAltered=Nc,hu.asImmutable=Yu,hu["@@transducer/init"]=hu.asMutable=vl,hu["@@transducer/step"]=function(le,ae){return le.unshift(ae)},hu["@@transducer/result"]=function(le){return le.asImmutable()};var Fc="@@__IMMUTABLE_SET__@@";function du(le){return Boolean(le&&le[Fc])}function Lc(le){return du(le)&&it(le)}function kl(le,ae){if(le===ae)return!0;if(!de(ae)||void 0!==le.size&&void 0!==ae.size&&le.size!==ae.size||void 0!==le.__hash&&void 0!==ae.__hash&&le.__hash!==ae.__hash||ce(le)!==ce(ae)||fe(le)!==fe(ae)||it(le)!==it(ae))return!1;if(0===le.size&&0===ae.size)return!0;var De=!Te(le);if(it(le)){var Ve=le.entries();return ae.every(function(Er,Nr){var Mi=Ve.next().value;return Mi&&Hi(Mi[1],Er)&&(De||Hi(Mi[0],Nr))})&&Ve.next().done}var st=!1;if(void 0===le.size)if(void 0===ae.size)"function"==typeof le.cacheResult&&le.cacheResult();else{st=!0;var zt=le;le=ae,ae=zt}var Qt=!0,Gn=ae.__iterate(function(Er,Nr){if(De?!le.has(Er):st?!Hi(Er,le.get(Nr,e)):!Hi(le.get(Nr,e),Er))return Qt=!1,!1});return Qt&&le.size===Gn}function sl(le,ae){var De=function(Ve){le.prototype[Ve]=ae[Ve]};return Object.keys(ae).forEach(De),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(ae).forEach(De),le}function ja(le){if(!le||"object"!=typeof le)return le;if(!de(le)){if(!da(le))return le;le=Wt(le)}if(ce(le)){var ae={};return le.__iterate(function(Ve,st){ae[st]=ja(Ve)}),ae}var De=[];return le.__iterate(function(Ve){De.push(ja(Ve))}),De}var Q=function(le){function ae(De){return null==De?An():du(De)&&!it(De)?De:An().withMutations(function(Ve){var st=le(De);Ro(st.size),st.forEach(function(zt){return Ve.add(zt)})})}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.of=function(){return this(arguments)},ae.fromKeys=function(Ve){return this(ge(Ve).keySeq())},ae.intersect=function(Ve){return(Ve=$e(Ve).toArray()).length?Ee.intersect.apply(ae(Ve.pop()),Ve):An()},ae.union=function(Ve){return(Ve=$e(Ve).toArray()).length?Ee.union.apply(ae(Ve.pop()),Ve):An()},ae.prototype.toString=function(){return this.__toString("Set {","}")},ae.prototype.has=function(Ve){return this._map.has(Ve)},ae.prototype.add=function(Ve){return yt(this,this._map.set(Ve,Ve))},ae.prototype.remove=function(Ve){return yt(this,this._map.remove(Ve))},ae.prototype.clear=function(){return yt(this,this._map.clear())},ae.prototype.map=function(Ve,st){var zt=this,Qt=!1,Gn=yt(this,this._map.mapEntries(function(Er){var Nr=Er[1],Mi=Ve.call(st,Nr,Nr,zt);return Mi!==Nr&&(Qt=!0),[Mi,Mi]},st));return Qt?Gn:this},ae.prototype.union=function(){for(var Ve=[],st=arguments.length;st--;)Ve[st]=arguments[st];return 0===(Ve=Ve.filter(function(zt){return 0!==zt.size})).length?this:0!==this.size||this.__ownerID||1!==Ve.length?this.withMutations(function(zt){for(var Qt=0;Qt<Ve.length;Qt++)"string"==typeof Ve[Qt]?zt.add(Ve[Qt]):le(Ve[Qt]).forEach(function(Gn){return zt.add(Gn)})}):this.constructor(Ve[0])},ae.prototype.intersect=function(){for(var Ve=[],st=arguments.length;st--;)Ve[st]=arguments[st];if(0===Ve.length)return this;Ve=Ve.map(function(Qt){return le(Qt)});var zt=[];return this.forEach(function(Qt){Ve.every(function(Gn){return Gn.includes(Qt)})||zt.push(Qt)}),this.withMutations(function(Qt){zt.forEach(function(Gn){Qt.remove(Gn)})})},ae.prototype.subtract=function(){for(var Ve=[],st=arguments.length;st--;)Ve[st]=arguments[st];if(0===Ve.length)return this;Ve=Ve.map(function(Qt){return le(Qt)});var zt=[];return this.forEach(function(Qt){Ve.some(function(Gn){return Gn.includes(Qt)})&&zt.push(Qt)}),this.withMutations(function(Qt){zt.forEach(function(Gn){Qt.remove(Gn)})})},ae.prototype.sort=function(Ve){return yi(bn(this,Ve))},ae.prototype.sortBy=function(Ve,st){return yi(bn(this,st,Ve))},ae.prototype.wasAltered=function(){return this._map.wasAltered()},ae.prototype.__iterate=function(Ve,st){var zt=this;return this._map.__iterate(function(Qt){return Ve(Qt,Qt,zt)},st)},ae.prototype.__iterator=function(Ve,st){return this._map.__iterator(Ve,st)},ae.prototype.__ensureOwner=function(Ve){if(Ve===this.__ownerID)return this;var st=this._map.__ensureOwner(Ve);return Ve?this.__make(st,Ve):0===this.size?this.__empty():(this.__ownerID=Ve,this._map=st,this)},ae}(ot);Q.isSet=du;var Gt,Ee=Q.prototype;function yt(le,ae){return le.__ownerID?(le.size=ae.size,le._map=ae,le):ae===le._map?le:0===ae.size?le.__empty():le.__make(ae)}function Xe(le,ae){var De=Object.create(Ee);return De.size=le?le.size:0,De._map=le,De.__ownerID=ae,De}function An(){return Gt||(Gt=Xe(Gs()))}Ee[Fc]=!0,Ee[r]=Ee.remove,Ee.merge=Ee.concat=Ee.union,Ee.withMutations=Ll,Ee.asImmutable=Yu,Ee["@@transducer/init"]=Ee.asMutable=vl,Ee["@@transducer/step"]=function(le,ae){return le.add(ae)},Ee["@@transducer/result"]=function(le){return le.asImmutable()},Ee.__empty=An,Ee.__make=Xe;var Hr,kn=function(le){function ae(De,Ve,st){if(!(this instanceof ae))return new ae(De,Ve,st);if(la(0!==st,"Cannot step a Range by 0"),De=De||0,void 0===Ve&&(Ve=1/0),st=void 0===st?1:Math.abs(st),Ve<De&&(st=-st),this._start=De,this._end=Ve,this._step=st,this.size=Math.max(0,Math.ceil((Ve-De)/st-1)+1),0===this.size){if(Hr)return Hr;Hr=this}}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.toString=function(){return 0===this.size?"Range []":"Range [ "+this._start+"..."+this._end+(1!==this._step?" by "+this._step:"")+" ]"},ae.prototype.get=function(Ve,st){return this.has(Ve)?this._start+w(this,Ve)*this._step:st},ae.prototype.includes=function(Ve){var st=(Ve-this._start)/this._step;return st>=0&&st<this.size&&st===Math.floor(st)},ae.prototype.slice=function(Ve,st){return U(Ve,st,this.size)?this:(Ve=W(Ve,this.size),(st=$(st,this.size))<=Ve?new ae(0,0):new ae(this.get(Ve,this._end),this.get(st,this._end),this._step))},ae.prototype.indexOf=function(Ve){var st=Ve-this._start;if(st%this._step==0){var zt=st/this._step;if(zt>=0&&zt<this.size)return zt}return-1},ae.prototype.lastIndexOf=function(Ve){return this.indexOf(Ve)},ae.prototype.__iterate=function(Ve,st){for(var zt=this.size,Qt=this._step,Gn=st?this._start+(zt-1)*Qt:this._start,Er=0;Er!==zt&&!1!==Ve(Gn,st?zt-++Er:Er++,this);)Gn+=st?-Qt:Qt;return Er},ae.prototype.__iterator=function(Ve,st){var zt=this.size,Qt=this._step,Gn=st?this._start+(zt-1)*Qt:this._start,Er=0;return new sn(function(){if(Er===zt)return{value:void 0,done:!0};var Nr=Gn;return Gn+=st?-Qt:Qt,fn(Ve,st?zt-++Er:Er++,Nr)})},ae.prototype.equals=function(Ve){return Ve instanceof ae?this._start===Ve._start&&this._end===Ve._end&&this._step===Ve._step:kl(this,Ve)},ae}(wn);function Xr(le,ae,De){for(var Ve=jl(ae),st=0;st!==Ve.length;)if((le=Ji(le,Ve[st++],e))===e)return De;return le}function yr(le,ae){return Xr(this,le,ae)}function Rr(le,ae){return Xr(le,ae,e)!==e}function Io(){Ro(this.size);var le={};return this.__iterate(function(ae,De){le[De]=ae}),le}$e.isIterable=de,$e.isKeyed=ce,$e.isIndexed=fe,$e.isAssociative=Te,$e.isOrdered=it,$e.Iterator=sn,sl($e,{toArray:function(){Ro(this.size);var ae=new Array(this.size||0),De=ce(this),Ve=0;return this.__iterate(function(st,zt){ae[Ve++]=De?[zt,st]:st}),ae},toIndexedSeq:function(){return new Ti(this)},toJS:function(){return ja(this)},toKeyedSeq:function(){return new wr(this,!0)},toMap:function(){return qu(this.toKeyedSeq())},toObject:Io,toOrderedMap:function(){return To(this.toKeyedSeq())},toOrderedSet:function(){return yi(ce(this)?this.valueSeq():this)},toSet:function(){return Q(ce(this)?this.valueSeq():this)},toSetSeq:function(){return new Ci(this)},toSeq:function(){return fe(this)?this.toIndexedSeq():ce(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return sc(ce(this)?this.valueSeq():this)},toList:function(){return ba(ce(this)?this.valueSeq():this)},toString:function(){return"[Collection]"},__toString:function(ae,De){return 0===this.size?ae+De:ae+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+De},concat:function(){for(var ae=[],De=arguments.length;De--;)ae[De]=arguments[De];return go(this,function ko(le,ae){var De=ce(le),Ve=[le].concat(ae).map(function(Qt){return de(Qt)?De&&(Qt=ge(Qt)):Qt=De?Ei(Qt):ii(Array.isArray(Qt)?Qt:[Qt]),Qt}).filter(function(Qt){return 0!==Qt.size});if(0===Ve.length)return le;if(1===Ve.length){var st=Ve[0];if(st===le||De&&ce(st)||fe(le)&&fe(st))return st}var zt=new hr(Ve);return De?zt=zt.toKeyedSeq():fe(le)||(zt=zt.toSetSeq()),(zt=zt.flatten(!0)).size=Ve.reduce(function(Qt,Gn){if(void 0!==Qt){var Er=Gn.size;if(void 0!==Er)return Qt+Er}},0),zt}(this,ae))},includes:function(ae){return this.some(function(De){return Hi(De,ae)})},entries:function(){return this.__iterator(pn)},every:function(ae,De){Ro(this.size);var Ve=!0;return this.__iterate(function(st,zt,Qt){if(!ae.call(De,st,zt,Qt))return Ve=!1,!1}),Ve},filter:function(ae,De){return go(this,Ni(this,ae,De,!0))},partition:function(ae,De){return function wi(le,ae,De){var Ve=ce(le),st=[[],[]];le.__iterate(function(Qt,Gn){st[ae.call(De,Qt,Gn,le)?1:0].push(Ve?[Gn,Qt]:Qt)});var zt=ts(le);return st.map(function(Qt){return go(le,zt(Qt))})}(this,ae,De)},find:function(ae,De,Ve){var st=this.findEntry(ae,De);return st?st[1]:Ve},forEach:function(ae,De){return Ro(this.size),this.__iterate(De?ae.bind(De):ae)},join:function(ae){Ro(this.size),ae=void 0!==ae?""+ae:",";var De="",Ve=!0;return this.__iterate(function(st){Ve?Ve=!1:De+=ae,De+=null!=st?st.toString():""}),De},keys:function(){return this.__iterator(Xt)},map:function(ae,De){return go(this,_s(this,ae,De))},reduce:function(ae,De,Ve){return Do(this,ae,De,Ve,arguments.length<2,!1)},reduceRight:function(ae,De,Ve){return Do(this,ae,De,Ve,arguments.length<2,!0)},reverse:function(){return go(this,dr(this,!0))},slice:function(ae,De){return go(this,ji(this,ae,De,!0))},some:function(ae,De){Ro(this.size);var Ve=!1;return this.__iterate(function(st,zt,Qt){if(ae.call(De,st,zt,Qt))return Ve=!0,!1}),Ve},sort:function(ae){return go(this,bn(this,ae))},values:function(){return this.__iterator(cn)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(ae,De){return M(ae?this.toSeq().filter(ae,De):this)},countBy:function(ae,De){return function ti(le,ae,De){var Ve=qu().asMutable();return le.__iterate(function(st,zt){Ve.update(ae.call(De,st,zt,le),0,function(Qt){return Qt+1})}),Ve.asImmutable()}(this,ae,De)},equals:function(ae){return kl(this,ae)},entrySeq:function(){var ae=this;if(ae._cache)return new hr(ae._cache);var De=ae.toSeq().map(ca).toIndexedSeq();return De.fromEntrySeq=function(){return ae.toSeq()},De},filterNot:function(ae,De){return this.filter(zo(ae),De)},findEntry:function(ae,De,Ve){var st=Ve;return this.__iterate(function(zt,Qt,Gn){if(ae.call(De,zt,Qt,Gn))return st=[Qt,zt],!1}),st},findKey:function(ae,De){var Ve=this.findEntry(ae,De);return Ve&&Ve[0]},findLast:function(ae,De,Ve){return this.toKeyedSeq().reverse().find(ae,De,Ve)},findLastEntry:function(ae,De,Ve){return this.toKeyedSeq().reverse().findEntry(ae,De,Ve)},findLastKey:function(ae,De){return this.toKeyedSeq().reverse().findKey(ae,De)},first:function(ae){return this.find(D,null,ae)},flatMap:function(ae,De){return go(this,function ro(le,ae,De){var Ve=ts(le);return le.toSeq().map(function(st,zt){return Ve(ae.call(De,st,zt,le))}).flatten(!0)}(this,ae,De))},flatten:function(ae){return go(this,Ir(this,ae,!0))},fromEntrySeq:function(){return new Ai(this)},get:function(ae,De){return this.find(function(Ve,st){return Hi(st,ae)},void 0,De)},getIn:yr,groupBy:function(ae,De){return function Vr(le,ae,De){var Ve=ce(le),st=(it(le)?To():qu()).asMutable();le.__iterate(function(Qt,Gn){st.update(ae.call(De,Qt,Gn,le),function(Er){return(Er=Er||[]).push(Ve?[Gn,Qt]:Qt),Er})});var zt=ts(le);return st.map(function(Qt){return go(le,zt(Qt))}).asImmutable()}(this,ae,De)},has:function(ae){return this.get(ae,e)!==e},hasIn:function Go(le){return Rr(this,le)},isSubset:function(ae){return ae="function"==typeof ae.includes?ae:$e(ae),this.every(function(De){return ae.includes(De)})},isSuperset:function(ae){return(ae="function"==typeof ae.isSubset?ae:$e(ae)).isSubset(this)},keyOf:function(ae){return this.findKey(function(De){return Hi(De,ae)})},keySeq:function(){return this.toSeq().map(Fa).toIndexedSeq()},last:function(ae){return this.toSeq().reverse().first(ae)},lastKeyOf:function(ae){return this.toKeyedSeq().reverse().keyOf(ae)},max:function(ae){return Bn(this,ae)},maxBy:function(ae,De){return Bn(this,De,ae)},min:function(ae){return Bn(this,ae?$l(ae):Uu)},minBy:function(ae,De){return Bn(this,De?$l(De):Uu,ae)},rest:function(){return this.slice(1)},skip:function(ae){return 0===ae?this:this.slice(Math.max(0,ae))},skipLast:function(ae){return 0===ae?this:this.slice(0,-Math.max(0,ae))},skipWhile:function(ae,De){return go(this,Po(this,ae,De,!0))},skipUntil:function(ae,De){return this.skipWhile(zo(ae),De)},sortBy:function(ae,De){return go(this,bn(this,De,ae))},take:function(ae){return this.slice(0,Math.max(0,ae))},takeLast:function(ae){return this.slice(-Math.max(0,ae))},takeWhile:function(ae,De){return go(this,function Vi(le,ae,De){var Ve=jo(le);return Ve.__iterateUncached=function(st,zt){var Qt=this;if(zt)return this.cacheResult().__iterate(st,zt);var Gn=0;return le.__iterate(function(Er,Nr,Mi){return ae.call(De,Er,Nr,Mi)&&++Gn&&st(Er,Nr,Qt)}),Gn},Ve.__iteratorUncached=function(st,zt){var Qt=this;if(zt)return this.cacheResult().__iterator(st,zt);var Gn=le.__iterator(pn,zt),Er=!0;return new sn(function(){if(!Er)return{value:void 0,done:!0};var Nr=Gn.next();if(Nr.done)return Nr;var Mi=Nr.value,ao=Mi[0],Jo=Mi[1];return ae.call(De,Jo,ao,Qt)?st===pn?Nr:fn(st,ao,Jo,Nr):(Er=!1,{value:void 0,done:!0})})},Ve}(this,ae,De))},takeUntil:function(ae,De){return this.takeWhile(zo(ae),De)},update:function(ae){return ae(this)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=function Xc(le){if(le.size===1/0)return 0;var ae=it(le),De=ce(le),Ve=ae?1:0;return function ad(le,ae){return ae=Dn(ae,3432918353),ae=Dn(ae<<15|ae>>>-15,461845907),ae=Dn(ae<<13|ae>>>-13,5),ae=Dn((ae=(ae+3864292196|0)^le)^ae>>>16,2246822507),ae=Hn((ae=Dn(ae^ae>>>13,3266489909))^ae>>>16)}(le.__iterate(De?ae?function(zt,Qt){Ve=31*Ve+kc(Fe(zt),Fe(Qt))|0}:function(zt,Qt){Ve=Ve+kc(Fe(zt),Fe(Qt))|0}:ae?function(zt){Ve=31*Ve+Fe(zt)|0}:function(zt){Ve=Ve+Fe(zt)|0}),Ve)}(this))}});var Qn=$e.prototype;Qn[X]=!0,Qn[qt]=Qn.values,Qn.toJSON=Qn.toArray,Qn.__toStringMapper=$a,Qn.inspect=Qn.toSource=function(){return this.toString()},Qn.chain=Qn.flatMap,Qn.contains=Qn.includes,sl(ge,{flip:function(){return go(this,Ko(this))},mapEntries:function(ae,De){var Ve=this,st=0;return go(this,this.toSeq().map(function(zt,Qt){return ae.call(De,[Qt,zt],st++,Ve)}).fromEntrySeq())},mapKeys:function(ae,De){var Ve=this;return go(this,this.toSeq().flip().map(function(st,zt){return ae.call(De,st,zt,Ve)}).flip())}});var Gr=ge.prototype;Gr[V]=!0,Gr[qt]=Qn.entries,Gr.toJSON=Io,Gr.__toStringMapper=function(le,ae){return $a(ae)+": "+$a(le)},sl(Et,{toKeyedSeq:function(){return new wr(this,!1)},filter:function(ae,De){return go(this,Ni(this,ae,De,!1))},findIndex:function(ae,De){var Ve=this.findEntry(ae,De);return Ve?Ve[0]:-1},indexOf:function(ae){var De=this.keyOf(ae);return void 0===De?-1:De},lastIndexOf:function(ae){var De=this.lastKeyOf(ae);return void 0===De?-1:De},reverse:function(){return go(this,dr(this,!1))},slice:function(ae,De){return go(this,ji(this,ae,De,!1))},splice:function(ae,De){var Ve=arguments.length;if(De=Math.max(De||0,0),0===Ve||2===Ve&&!De)return this;ae=W(ae,ae<0?this.count():this.size);var st=this.slice(0,ae);return go(this,1===Ve?st:st.concat(Is(arguments,2),this.slice(ae+De)))},findLastIndex:function(ae,De){var Ve=this.findLastEntry(ae,De);return Ve?Ve[0]:-1},first:function(ae){return this.get(0,ae)},flatten:function(ae){return go(this,Ir(this,ae,!1))},get:function(ae,De){return(ae=w(this,ae))<0||this.size===1/0||void 0!==this.size&&ae>this.size?De:this.find(function(Ve,st){return st===ae},void 0,De)},has:function(ae){return(ae=w(this,ae))>=0&&(void 0!==this.size?this.size===1/0||ae<this.size:-1!==this.indexOf(ae))},interpose:function(ae){return go(this,function Vt(le,ae){var De=jo(le);return De.size=le.size&&2*le.size-1,De.__iterateUncached=function(Ve,st){var zt=this,Qt=0;return le.__iterate(function(Gn){return(!Qt||!1!==Ve(ae,Qt++,zt))&&!1!==Ve(Gn,Qt++,zt)},st),Qt},De.__iteratorUncached=function(Ve,st){var Gn,zt=le.__iterator(cn,st),Qt=0;return new sn(function(){return(!Gn||Qt%2)&&(Gn=zt.next()).done?Gn:Qt%2?fn(Ve,Qt++,ae):fn(Ve,Qt++,Gn.value,Gn)})},De}(this,ae))},interleave:function(){var ae=[this].concat(Is(arguments)),De=_o(this.toSeq(),wn.of,ae),Ve=De.flatten(!0);return De.size&&(Ve.size=De.size*ae.length),go(this,Ve)},keySeq:function(){return kn(0,this.size)},last:function(ae){return this.get(-1,ae)},skipWhile:function(ae,De){return go(this,Po(this,ae,De,!1))},zip:function(){return go(this,_o(this,xl,[this].concat(Is(arguments))))},zipAll:function(){return go(this,_o(this,xl,[this].concat(Is(arguments)),!0))},zipWith:function(ae){var De=Is(arguments);return De[0]=this,go(this,_o(this,ae,De))}});var Fr=Et.prototype;Fr[se]=!0,Fr[Pt]=!0,sl(ot,{get:function(ae,De){return this.has(ae)?ae:De},includes:function(ae){return this.has(ae)},keySeq:function(){return this.valueSeq()}});var Ui=ot.prototype;function Do(le,ae,De,Ve,st,zt){return Ro(le.size),le.__iterate(function(Qt,Gn,Er){st?(st=!1,De=Qt):De=ae.call(Ve,De,Qt,Gn,Er)},zt),De}function Fa(le,ae){return ae}function ca(le,ae){return[ae,le]}function zo(le){return function(){return!le.apply(this,arguments)}}function $l(le){return function(){return-le.apply(this,arguments)}}function xl(){return Is(arguments)}function Uu(le,ae){return le<ae?1:le>ae?-1:0}function kc(le,ae){return le^ae+2654435769+(le<<6)+(le>>2)|0}Ui.has=Qn.includes,Ui.contains=Ui.includes,Ui.keys=Ui.values,sl(Tt,Gr),sl(wn,Fr),sl(jn,Ui);var yi=function(le){function ae(De){return null==De?bu():Lc(De)?De:bu().withMutations(function(Ve){var st=ot(De);Ro(st.size),st.forEach(function(zt){return Ve.add(zt)})})}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.of=function(){return this(arguments)},ae.fromKeys=function(Ve){return this(ge(Ve).keySeq())},ae.prototype.toString=function(){return this.__toString("OrderedSet {","}")},ae}(Q);yi.isOrderedSet=Lc;var fc,Wl=yi.prototype;function Pa(le,ae){var De=Object.create(Wl);return De.size=le?le.size:0,De._map=le,De.__ownerID=ae,De}function bu(){return fc||(fc=Pa(Hs()))}Wl[Pt]=!0,Wl.zip=Fr.zip,Wl.zipWith=Fr.zipWith,Wl.zipAll=Fr.zipAll,Wl.__empty=bu,Wl.__make=Pa;var je={LeftThenRight:-1,RightThenLeft:1},tt=function(ae,De){var Ve;!function Nt(le){if(We(le))throw new Error("Can not call `Record` with an immutable Record as default values. Use a plain javascript object instead.");if(Le(le))throw new Error("Can not call `Record` with an immutable Collection as default values. Use a plain javascript object instead.");if(null===le||"object"!=typeof le)throw new Error("Can not call `Record` with a non-object as default values. Use a plain javascript object instead.")}(ae);var st=function(Gn){var Er=this;if(Gn instanceof st)return Gn;if(!(this instanceof st))return new st(Gn);if(!Ve){Ve=!0;var Nr=Object.keys(ae),Mi=zt._indices={};zt._name=De,zt._keys=Nr,zt._defaultValues=ae;for(var ao=0;ao<Nr.length;ao++){var Jo=Nr[ao];Mi[Jo]=ao,zt[Jo]?"object"==typeof console&&console.warn&&console.warn("Cannot define "+bi(this)+' with property "'+Jo+'" since that property name is part of the Record API.'):fs(zt,Jo)}}return this.__ownerID=void 0,this._values=ba().withMutations(function(rs){rs.setSize(Er._keys.length),ge(Gn).forEach(function(ys,Ps){rs.set(Er._indices[Ps],ys===Er._defaultValues[Ps]?void 0:ys)})}),this},zt=st.prototype=Object.create(tn);return zt.constructor=st,De&&(st.displayName=De),st};tt.prototype.toString=function(){for(var Ve,ae=bi(this)+" { ",De=this._keys,st=0,zt=De.length;st!==zt;st++)ae+=(st?", ":"")+(Ve=De[st])+": "+$a(this.get(Ve));return ae+" }"},tt.prototype.equals=function(ae){return this===ae||We(ae)&&Ri(this).equals(Ri(ae))},tt.prototype.hashCode=function(){return Ri(this).hashCode()},tt.prototype.has=function(ae){return this._indices.hasOwnProperty(ae)},tt.prototype.get=function(ae,De){if(!this.has(ae))return De;var st=this._values.get(this._indices[ae]);return void 0===st?this._defaultValues[ae]:st},tt.prototype.set=function(ae,De){if(this.has(ae)){var Ve=this._values.set(this._indices[ae],De===this._defaultValues[ae]?void 0:De);if(Ve!==this._values&&!this.__ownerID)return Xn(this,Ve)}return this},tt.prototype.remove=function(ae){return this.set(ae)},tt.prototype.clear=function(){var ae=this._values.clear().setSize(this._keys.length);return this.__ownerID?this:Xn(this,ae)},tt.prototype.wasAltered=function(){return this._values.wasAltered()},tt.prototype.toSeq=function(){return Ri(this)},tt.prototype.toJS=function(){return ja(this)},tt.prototype.entries=function(){return this.__iterator(pn)},tt.prototype.__iterator=function(ae,De){return Ri(this).__iterator(ae,De)},tt.prototype.__iterate=function(ae,De){return Ri(this).__iterate(ae,De)},tt.prototype.__ensureOwner=function(ae){if(ae===this.__ownerID)return this;var De=this._values.__ensureOwner(ae);return ae?Xn(this,De,ae):(this.__ownerID=ae,this._values=De,this)},tt.isRecord=We,tt.getDescriptiveName=bi;var tn=tt.prototype;function Xn(le,ae,De){var Ve=Object.create(Object.getPrototypeOf(le));return Ve._values=ae,Ve.__ownerID=De,Ve}function bi(le){return le.constructor.displayName||le.constructor.name||"Record"}function Ri(le){return Ei(le._keys.map(function(ae){return[ae,le.get(ae)]}))}function fs(le,ae){try{Object.defineProperty(le,ae,{get:function(){return this.get(ae)},set:function(De){la(this.__ownerID,"Cannot set on an immutable record."),this.set(ae,De)}})}catch{}}tn[He]=!0,tn[r]=tn.remove,tn.deleteIn=tn.removeIn=No,tn.getIn=yr,tn.hasIn=Qn.hasIn,tn.merge=zr,tn.mergeWith=io,tn.mergeIn=qs,tn.mergeDeep=ws,tn.mergeDeepWith=ds,tn.mergeDeepIn=Js,tn.setIn=fa,tn.update=ns,tn.updateIn=Fo,tn.withMutations=Ll,tn.asMutable=vl,tn.asImmutable=Yu,tn[qt]=tn.entries,tn.toJSON=tn.toObject=Qn.toObject,tn.inspect=tn.toSource=function(){return this.toString()};var Ra,Fs=function(le){function ae(De,Ve){if(!(this instanceof ae))return new ae(De,Ve);if(this._value=De,this.size=void 0===Ve?1/0:Math.max(0,Ve),0===this.size){if(Ra)return Ra;Ra=this}}return le&&(ae.__proto__=le),(ae.prototype=Object.create(le&&le.prototype)).constructor=ae,ae.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},ae.prototype.get=function(Ve,st){return this.has(Ve)?this._value:st},ae.prototype.includes=function(Ve){return Hi(this._value,Ve)},ae.prototype.slice=function(Ve,st){var zt=this.size;return U(Ve,st,zt)?this:new ae(this._value,$(st,zt)-W(Ve,zt))},ae.prototype.reverse=function(){return this},ae.prototype.indexOf=function(Ve){return Hi(this._value,Ve)?0:-1},ae.prototype.lastIndexOf=function(Ve){return Hi(this._value,Ve)?this.size:-1},ae.prototype.__iterate=function(Ve,st){for(var zt=this.size,Qt=0;Qt!==zt&&!1!==Ve(this._value,st?zt-++Qt:Qt++,this););return Qt},ae.prototype.__iterator=function(Ve,st){var zt=this,Qt=this.size,Gn=0;return new sn(function(){return Gn===Qt?{value:void 0,done:!0}:fn(Ve,st?Qt-++Gn:Gn++,zt._value)})},ae.prototype.equals=function(Ve){return Ve instanceof ae?Hi(this._value,Ve._value):kl(Ve)},ae}(wn);function Vs(le,ae){return Ms([],ae||wl,le,"",ae&&ae.length>2?[]:void 0,{"":le})}function Ms(le,ae,De,Ve,st,zt){if("string"!=typeof De&&!Le(De)&&(ht(De)||Kr(De)||qa(De))){if(~le.indexOf(De))throw new TypeError("Cannot convert circular structure to Immutable");le.push(De),st&&""!==Ve&&st.push(Ve);var Qt=ae.call(zt,Ve,Wt(De).map(function(Gn,Er){return Ms(le,ae,Gn,Er,st,De)}),st&&st.slice());return le.pop(),st&&st.pop(),Qt}return De}function wl(le,ae){return fe(ae)?ae.toList():ce(ae)?ae.toMap():ae.toSet()}var Ho="4.3.4",rn=$e;const Jl={version:Ho,Collection:$e,Iterable:$e,Seq:Wt,Map:qu,OrderedMap:To,List:ba,Stack:sc,Set:Q,OrderedSet:yi,PairSorting:je,Record:tt,Range:kn,Repeat:Fs,is:Hi,fromJS:Vs,hash:Fe,isImmutable:Le,isCollection:de,isKeyed:ce,isIndexed:fe,isAssociative:Te,isOrdered:it,isValueObject:qr,isPlainObject:qa,isSeq:qe,isList:xu,isMap:po,isOrderedMap:$i,isStack:zl,isSet:du,isOrderedSet:Lc,isRecord:We,get:Ji,getIn:Xr,has:Rl,hasIn:Rr,merge:Tn,mergeDeep:Ze,mergeWith:ie,mergeDeepWith:Jt,remove:Ts,removeIn:Xo,set:hs,setIn:Ja,update:Cs,updateIn:$s}},74299:E=>{E.exports=function(C,s,r,a){var u=new Blob(typeof a<"u"?[a,C]:[C],{type:r||"application/octet-stream"});if(typeof window.navigator.msSaveBlob<"u")window.navigator.msSaveBlob(u,s);else{var e=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(u):window.webkitURL.createObjectURL(u),f=document.createElement("a");f.style.display="none",f.href=e,f.setAttribute("download",s),typeof f.download>"u"&&f.setAttribute("target","_blank"),document.body.appendChild(f),f.click(),setTimeout(function(){document.body.removeChild(f),window.URL.revokeObjectURL(e)},200)}}},86906:E=>{var s=NaN,r="[object Symbol]",a=/^\s+|\s+$/g,c=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,e=/^0o[0-7]+$/i,f=parseInt,m="object"==typeof global&&global&&global.Object===Object&&global,T="object"==typeof self&&self&&self.Object===Object&&self,M=m||T||Function("return this")(),D=Object.prototype.toString,U=Math.max,W=Math.min,$=function(){return M.Date.now()};function F(ce){var se=typeof ce;return!!ce&&("object"==se||"function"==se)}function V(ce){if("number"==typeof ce)return ce;if(function de(ce){return"symbol"==typeof ce||function X(ce){return!!ce&&"object"==typeof ce}(ce)&&D.call(ce)==r}(ce))return s;if(F(ce)){var se="function"==typeof ce.valueOf?ce.valueOf():ce;ce=F(se)?se+"":se}if("string"!=typeof ce)return 0===ce?ce:+ce;ce=ce.replace(a,"");var fe=u.test(ce);return fe||e.test(ce)?f(ce.slice(2),fe?2:8):c.test(ce)?s:+ce}E.exports=function J(ce,se,fe){var Te,$e,ge,Et,ot,ct,qe=0,He=!1,We=!1,Le=!0;if("function"!=typeof ce)throw new TypeError("Expected a function");function Pt(fn){var xn=Te,Kr=$e;return Te=$e=void 0,qe=fn,Et=ce.apply(Kr,xn)}function cn(fn){var xn=fn-ct;return void 0===ct||xn>=se||xn<0||We&&fn-qe>=ge}function pn(){var fn=$();if(cn(fn))return Rn(fn);ot=setTimeout(pn,function Xt(fn){var Or=se-(fn-ct);return We?W(Or,ge-(fn-qe)):Or}(fn))}function Rn(fn){return ot=void 0,Le&&Te?Pt(fn):(Te=$e=void 0,Et)}function sn(){var fn=$(),xn=cn(fn);if(Te=arguments,$e=this,ct=fn,xn){if(void 0===ot)return function it(fn){return qe=fn,ot=setTimeout(pn,se),He?Pt(fn):Et}(ct);if(We)return ot=setTimeout(pn,se),Pt(ct)}return void 0===ot&&(ot=setTimeout(pn,se)),Et}return se=V(se)||0,F(fe)&&(He=!!fe.leading,ge=(We="maxWait"in fe)?U(V(fe.maxWait)||0,se):ge,Le="trailing"in fe?!!fe.trailing:Le),sn.cancel=function At(){void 0!==ot&&clearTimeout(ot),qe=0,Te=ct=$e=ot=void 0},sn.flush=function qt(){return void 0===ot?Et:Rn($())},sn}},6123:E=>{var C="Expected a function",s=NaN,r="[object Symbol]",a=/^\s+|\s+$/g,c=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,e=/^0o[0-7]+$/i,f=parseInt,m="object"==typeof global&&global&&global.Object===Object&&global,T="object"==typeof self&&self&&self.Object===Object&&self,M=m||T||Function("return this")(),D=Object.prototype.toString,U=Math.max,W=Math.min,$=function(){return M.Date.now()};function X(se){var fe=typeof se;return!!se&&("object"==fe||"function"==fe)}function ce(se){if("number"==typeof se)return se;if(function V(se){return"symbol"==typeof se||function de(se){return!!se&&"object"==typeof se}(se)&&D.call(se)==r}(se))return s;if(X(se)){var fe="function"==typeof se.valueOf?se.valueOf():se;se=X(fe)?fe+"":fe}if("string"!=typeof se)return 0===se?se:+se;se=se.replace(a,"");var Te=u.test(se);return Te||e.test(se)?f(se.slice(2),Te?2:8):c.test(se)?s:+se}E.exports=function F(se,fe,Te){var $e=!0,ge=!0;if("function"!=typeof se)throw new TypeError(C);return X(Te)&&($e="leading"in Te?!!Te.leading:$e,ge="trailing"in Te?!!Te.trailing:ge),function J(se,fe,Te){var $e,ge,Et,ot,ct,qe,He=0,We=!1,Le=!1,Pt=!0;if("function"!=typeof se)throw new TypeError(C);function it(xn){var Kr=$e,Or=ge;return $e=ge=void 0,He=xn,ot=se.apply(Or,Kr)}function pn(xn){var Kr=xn-qe;return void 0===qe||Kr>=fe||Kr<0||Le&&xn-He>=Et}function Rn(){var xn=$();if(pn(xn))return At(xn);ct=setTimeout(Rn,function cn(xn){var Lr=fe-(xn-qe);return Le?W(Lr,Et-(xn-He)):Lr}(xn))}function At(xn){return ct=void 0,Pt&&$e?it(xn):($e=ge=void 0,ot)}function fn(){var xn=$(),Kr=pn(xn);if($e=arguments,ge=this,qe=xn,Kr){if(void 0===ct)return function Xt(xn){return He=xn,ct=setTimeout(Rn,fe),We?it(xn):ot}(qe);if(Le)return ct=setTimeout(Rn,fe),it(qe)}return void 0===ct&&(ct=setTimeout(Rn,fe)),ot}return fe=ce(fe)||0,X(Te)&&(We=!!Te.leading,Et=(Le="maxWait"in Te)?U(ce(Te.maxWait)||0,fe):Et,Pt="trailing"in Te?!!Te.trailing:Pt),fn.cancel=function qt(){void 0!==ct&&clearTimeout(ct),He=0,$e=qe=ge=ct=void 0},fn.flush=function sn(){return void 0===ct?ot:At($())},fn}(se,fe,{leading:$e,maxWait:fe,trailing:ge})}},81235:(E,C,s)=>{var c=s(4153)(s(27038),"DataView");E.exports=c},41505:(E,C,s)=>{var r=s(59410),a=s(21143),c=s(604),u=s(80584),e=s(7792);function f(m){var T=-1,M=null==m?0:m.length;for(this.clear();++T<M;){var w=m[T];this.set(w[0],w[1])}}f.prototype.clear=r,f.prototype.delete=a,f.prototype.get=c,f.prototype.has=u,f.prototype.set=e,E.exports=f},73545:(E,C,s)=>{var r=s(63391),a=s(68971),c=s(18858),u=s(13913),e=s(68944);function f(m){var T=-1,M=null==m?0:m.length;for(this.clear();++T<M;){var w=m[T];this.set(w[0],w[1])}}f.prototype.clear=r,f.prototype.delete=a,f.prototype.get=c,f.prototype.has=u,f.prototype.set=e,E.exports=f},39046:(E,C,s)=>{var c=s(4153)(s(27038),"Map");E.exports=c},93177:(E,C,s)=>{var r=s(70536),a=s(61502),c=s(94960),u=s(61539),e=s(34138);function f(m){var T=-1,M=null==m?0:m.length;for(this.clear();++T<M;){var w=m[T];this.set(w[0],w[1])}}f.prototype.clear=r,f.prototype.delete=a,f.prototype.get=c,f.prototype.has=u,f.prototype.set=e,E.exports=f},97129:(E,C,s)=>{var c=s(4153)(s(27038),"Promise");E.exports=c},74918:(E,C,s)=>{var c=s(4153)(s(27038),"Set");E.exports=c},48690:(E,C,s)=>{var r=s(93177),a=s(30365),c=s(58235);function u(e){var f=-1,m=null==e?0:e.length;for(this.__data__=new r;++f<m;)this.add(e[f])}u.prototype.add=u.prototype.push=a,u.prototype.has=c,E.exports=u},33667:(E,C,s)=>{var r=s(73545),a=s(18034),c=s(37238),u=s(75887),e=s(81450),f=s(61386);function m(T){var M=this.__data__=new r(T);this.size=M.size}m.prototype.clear=a,m.prototype.delete=c,m.prototype.get=u,m.prototype.has=e,m.prototype.set=f,E.exports=m},57333:(E,C,s)=>{var r=s(27038);E.exports=r.Symbol},96820:(E,C,s)=>{var r=s(27038);E.exports=r.Uint8Array},54203:(E,C,s)=>{var c=s(4153)(s(27038),"WeakMap");E.exports=c},81638:E=>{E.exports=function C(s,r,a){switch(a.length){case 0:return s.call(r);case 1:return s.call(r,a[0]);case 2:return s.call(r,a[0],a[1]);case 3:return s.call(r,a[0],a[1],a[2])}return s.apply(r,a)}},4500:E=>{E.exports=function C(s,r){for(var a=-1,c=null==s?0:s.length;++a<c&&!1!==r(s[a],a,s););return s}},11375:E=>{E.exports=function C(s,r){for(var a=-1,c=null==s?0:s.length,u=0,e=[];++a<c;){var f=s[a];r(f,a,s)&&(e[u++]=f)}return e}},71890:(E,C,s)=>{var r=s(48282),a=s(2952),c=s(81690),u=s(84444),e=s(20968),f=s(47679),T=Object.prototype.hasOwnProperty;E.exports=function M(w,D){var U=c(w),W=!U&&a(w),$=!U&&!W&&u(w),J=!U&&!W&&!$&&f(w),F=U||W||$||J,X=F?r(w.length,String):[],de=X.length;for(var V in w)(D||T.call(w,V))&&(!F||!("length"==V||$&&("offset"==V||"parent"==V)||J&&("buffer"==V||"byteLength"==V||"byteOffset"==V)||e(V,de)))&&X.push(V);return X}},14992:E=>{E.exports=function C(s,r){for(var a=-1,c=null==s?0:s.length,u=Array(c);++a<c;)u[a]=r(s[a],a,s);return u}},94165:E=>{E.exports=function C(s,r){for(var a=-1,c=r.length,u=s.length;++a<c;)s[u+a]=r[a];return s}},89731:E=>{E.exports=function C(s,r,a,c){var u=-1,e=null==s?0:s.length;for(c&&e&&(a=s[++u]);++u<e;)a=r(a,s[u],u,s);return a}},8141:E=>{E.exports=function C(s,r){for(var a=-1,c=null==s?0:s.length;++a<c;)if(r(s[a],a,s))return!0;return!1}},87280:E=>{E.exports=function C(s){return s.split("")}},54561:E=>{var C=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;E.exports=function s(r){return r.match(C)||[]}},63530:(E,C,s)=>{var r=s(92007),a=s(71166);E.exports=function c(u,e,f){(void 0!==f&&!a(u[e],f)||void 0===f&&!(e in u))&&r(u,e,f)}},23898:(E,C,s)=>{var r=s(92007),a=s(71166),u=Object.prototype.hasOwnProperty;E.exports=function e(f,m,T){var M=f[m];(!u.call(f,m)||!a(M,T)||void 0===T&&!(m in f))&&r(f,m,T)}},15758:(E,C,s)=>{var r=s(71166);E.exports=function a(c,u){for(var e=c.length;e--;)if(r(c[e][0],u))return e;return-1}},22067:(E,C,s)=>{var r=s(11694),a=s(59108);E.exports=function c(u,e){return u&&r(e,a(e),u)}},57836:(E,C,s)=>{var r=s(11694),a=s(42970);E.exports=function c(u,e){return u&&r(e,a(e),u)}},92007:(E,C,s)=>{var r=s(20395);E.exports=function a(c,u,e){"__proto__"==u&&r?r(c,u,{configurable:!0,enumerable:!0,value:e,writable:!0}):c[u]=e}},77007:(E,C,s)=>{var r=s(33667),a=s(4500),c=s(23898),u=s(22067),e=s(57836),f=s(50694),m=s(53595),T=s(14746),M=s(78857),w=s(58605),D=s(51675),U=s(26663),W=s(62963),$=s(32143),J=s(31563),F=s(81690),X=s(84444),de=s(32e3),V=s(53867),ce=s(48855),se=s(59108),fe=s(42970),Et="[object Arguments]",We="[object Function]",Xt="[object Object]",Wt={};Wt[Et]=Wt["[object Array]"]=Wt["[object ArrayBuffer]"]=Wt["[object DataView]"]=Wt["[object Boolean]"]=Wt["[object Date]"]=Wt["[object Float32Array]"]=Wt["[object Float64Array]"]=Wt["[object Int8Array]"]=Wt["[object Int16Array]"]=Wt["[object Int32Array]"]=Wt["[object Map]"]=Wt["[object Number]"]=Wt[Xt]=Wt["[object RegExp]"]=Wt["[object Set]"]=Wt["[object String]"]=Wt["[object Symbol]"]=Wt["[object Uint8Array]"]=Wt["[object Uint8ClampedArray]"]=Wt["[object Uint16Array]"]=Wt["[object Uint32Array]"]=!0,Wt["[object Error]"]=Wt[We]=Wt["[object WeakMap]"]=!1,E.exports=function Tt(wn,jn,hr,Oi,Wi,so){var kr,Ei=1&jn,ii=2&jn,mr=4&jn;if(hr&&(kr=Wi?hr(wn,Oi,Wi,so):hr(wn)),void 0!==kr)return kr;if(!V(wn))return wn;var pr=F(wn);if(pr){if(kr=W(wn),!Ei)return m(wn,kr)}else{var Eo=U(wn),po=Eo==We||"[object GeneratorFunction]"==Eo;if(X(wn))return f(wn,Ei);if(Eo==Xt||Eo==Et||po&&!Wi){if(kr=ii||po?{}:J(wn),!Ei)return ii?M(wn,e(kr,wn)):T(wn,u(kr,wn))}else{if(!Wt[Eo])return Wi?wn:{};kr=$(wn,Eo,Ei)}}so||(so=new r);var $i=so.get(wn);if($i)return $i;so.set(wn,kr),ce(wn)?wn.forEach(function(Dn){kr.add(Tt(Dn,jn,hr,Dn,wn,so))}):de(wn)&&wn.forEach(function(Dn,Hn){kr.set(Hn,Tt(Dn,jn,hr,Hn,wn,so))});var Hi=pr?void 0:(mr?ii?D:w:ii?fe:se)(wn);return a(Hi||wn,function(Dn,Hn){Hi&&(Dn=wn[Hn=Dn]),c(kr,Hn,Tt(Dn,jn,hr,Hn,wn,so))}),kr}},60920:(E,C,s)=>{var r=s(53867),a=Object.create,c=function(){function u(){}return function(e){if(!r(e))return{};if(a)return a(e);u.prototype=e;var f=new u;return u.prototype=void 0,f}}();E.exports=c},59026:(E,C,s)=>{var r=s(18022),c=s(99889)(r);E.exports=c},12229:E=>{E.exports=function C(s,r,a,c){for(var u=s.length,e=a+(c?1:-1);c?e--:++e<u;)if(r(s[e],e,s))return e;return-1}},56369:(E,C,s)=>{var r=s(94165),a=s(21006);E.exports=function c(u,e,f,m,T){var M=-1,w=u.length;for(f||(f=a),T||(T=[]);++M<w;){var D=u[M];e>0&&f(D)?e>1?c(D,e-1,f,m,T):r(T,D):m||(T[T.length]=D)}return T}},75290:(E,C,s)=>{var a=s(8269)();E.exports=a},18022:(E,C,s)=>{var r=s(75290),a=s(59108);E.exports=function c(u,e){return u&&r(u,e,a)}},93436:(E,C,s)=>{var r=s(64667),a=s(82773);E.exports=function c(u,e){for(var f=0,m=(e=r(e,u)).length;null!=u&&f<m;)u=u[a(e[f++])];return f&&f==m?u:void 0}},19215:(E,C,s)=>{var r=s(94165),a=s(81690);E.exports=function c(u,e,f){var m=e(u);return a(u)?m:r(m,f(u))}},72802:(E,C,s)=>{var r=s(57333),a=s(21613),c=s(81244),f=r?r.toStringTag:void 0;E.exports=function m(T){return null==T?void 0===T?"[object Undefined]":"[object Null]":f&&f in Object(T)?a(T):c(T)}},55333:E=>{E.exports=function C(s,r){return null!=s&&r in Object(s)}},77090:(E,C,s)=>{var r=s(72802),a=s(27503);E.exports=function u(e){return a(e)&&"[object Arguments]"==r(e)}},30696:(E,C,s)=>{var r=s(36863),a=s(27503);E.exports=function c(u,e,f,m,T){return u===e||(null==u||null==e||!a(u)&&!a(e)?u!=u&&e!=e:r(u,e,f,m,c,T))}},36863:(E,C,s)=>{var r=s(33667),a=s(27667),c=s(64630),u=s(70838),e=s(26663),f=s(81690),m=s(84444),T=s(47679),w="[object Arguments]",D="[object Array]",U="[object Object]",$=Object.prototype.hasOwnProperty;E.exports=function J(F,X,de,V,ce,se){var fe=f(F),Te=f(X),$e=fe?D:e(F),ge=Te?D:e(X),Et=($e=$e==w?U:$e)==U,ot=(ge=ge==w?U:ge)==U,ct=$e==ge;if(ct&&m(F)){if(!m(X))return!1;fe=!0,Et=!1}if(ct&&!Et)return se||(se=new r),fe||T(F)?a(F,X,de,V,ce,se):c(F,X,$e,de,V,ce,se);if(!(1&de)){var qe=Et&&$.call(F,"__wrapped__"),He=ot&&$.call(X,"__wrapped__");if(qe||He){var We=qe?F.value():F,Le=He?X.value():X;return se||(se=new r),ce(We,Le,de,V,se)}}return!!ct&&(se||(se=new r),u(F,X,de,V,ce,se))}},63434:(E,C,s)=>{var r=s(26663),a=s(27503);E.exports=function u(e){return a(e)&&"[object Map]"==r(e)}},88783:(E,C,s)=>{var r=s(33667),a=s(30696);E.exports=function e(f,m,T,M){var w=T.length,D=w,U=!M;if(null==f)return!D;for(f=Object(f);w--;){var W=T[w];if(U&&W[2]?W[1]!==f[W[0]]:!(W[0]in f))return!1}for(;++w<D;){var $=(W=T[w])[0],J=f[$],F=W[1];if(U&&W[2]){if(void 0===J&&!($ in f))return!1}else{var X=new r;if(M)var de=M(J,F,$,f,m,X);if(!(void 0===de?a(F,J,3,M,X):de))return!1}}return!0}},43540:(E,C,s)=>{var r=s(55836),a=s(38466),c=s(53867),u=s(51217),f=/^\[object .+?Constructor\]$/,D=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");E.exports=function U(W){return!(!c(W)||a(W))&&(r(W)?D:f).test(u(W))}},67495:(E,C,s)=>{var r=s(26663),a=s(27503);E.exports=function u(e){return a(e)&&"[object Set]"==r(e)}},99390:(E,C,s)=>{var r=s(72802),a=s(8613),c=s(27503),ct={};ct["[object Float32Array]"]=ct["[object Float64Array]"]=ct["[object Int8Array]"]=ct["[object Int16Array]"]=ct["[object Int32Array]"]=ct["[object Uint8Array]"]=ct["[object Uint8ClampedArray]"]=ct["[object Uint16Array]"]=ct["[object Uint32Array]"]=!0,ct["[object Arguments]"]=ct["[object Array]"]=ct["[object ArrayBuffer]"]=ct["[object Boolean]"]=ct["[object DataView]"]=ct["[object Date]"]=ct["[object Error]"]=ct["[object Function]"]=ct["[object Map]"]=ct["[object Number]"]=ct["[object Object]"]=ct["[object RegExp]"]=ct["[object Set]"]=ct["[object String]"]=ct["[object WeakMap]"]=!1,E.exports=function qe(He){return c(He)&&a(He.length)&&!!ct[r(He)]}},5245:(E,C,s)=>{var r=s(69433),a=s(68608),c=s(80290),u=s(81690),e=s(63354);E.exports=function f(m){return"function"==typeof m?m:null==m?c:"object"==typeof m?u(m)?a(m[0],m[1]):r(m):e(m)}},92488:(E,C,s)=>{var r=s(58845),a=s(36700),u=Object.prototype.hasOwnProperty;E.exports=function e(f){if(!r(f))return a(f);var m=[];for(var T in Object(f))u.call(f,T)&&"constructor"!=T&&m.push(T);return m}},50762:(E,C,s)=>{var r=s(53867),a=s(58845),c=s(25618),e=Object.prototype.hasOwnProperty;E.exports=function f(m){if(!r(m))return c(m);var T=a(m),M=[];for(var w in m)"constructor"==w&&(T||!e.call(m,w))||M.push(w);return M}},69433:(E,C,s)=>{var r=s(88783),a=s(48834),c=s(63587);E.exports=function u(e){var f=a(e);return 1==f.length&&f[0][2]?c(f[0][0],f[0][1]):function(m){return m===e||r(m,e,f)}}},68608:(E,C,s)=>{var r=s(30696),a=s(58102),c=s(18303),u=s(99743),e=s(45774),f=s(63587),m=s(82773);E.exports=function w(D,U){return u(D)&&e(U)?f(m(D),U):function(W){var $=a(W,D);return void 0===$&&$===U?c(W,D):r(U,$,3)}}},9085:(E,C,s)=>{var r=s(33667),a=s(63530),c=s(75290),u=s(23607),e=s(53867),f=s(42970),m=s(45959);E.exports=function T(M,w,D,U,W){M!==w&&c(w,function($,J){if(W||(W=new r),e($))u(M,w,J,D,T,U,W);else{var F=U?U(m(M,J),$,J+"",M,w,W):void 0;void 0===F&&(F=$),a(M,J,F)}},f)}},23607:(E,C,s)=>{var r=s(63530),a=s(50694),c=s(96282),u=s(53595),e=s(31563),f=s(2952),m=s(81690),T=s(82027),M=s(84444),w=s(55836),D=s(53867),U=s(82358),W=s(47679),$=s(45959),J=s(31413);E.exports=function F(X,de,V,ce,se,fe,Te){var $e=$(X,V),ge=$(de,V),Et=Te.get(ge);if(Et)r(X,V,Et);else{var ot=fe?fe($e,ge,V+"",X,de,Te):void 0,ct=void 0===ot;if(ct){var qe=m(ge),He=!qe&&M(ge),We=!qe&&!He&&W(ge);ot=ge,qe||He||We?m($e)?ot=$e:T($e)?ot=u($e):He?(ct=!1,ot=a(ge,!0)):We?(ct=!1,ot=c(ge,!0)):ot=[]:U(ge)||f(ge)?(ot=$e,f($e)?ot=J($e):(!D($e)||w($e))&&(ot=e(ge))):ct=!1}ct&&(Te.set(ge,ot),se(ot,ge,ce,fe,Te),Te.delete(ge)),r(X,V,ot)}}},68840:E=>{E.exports=function C(s){return function(r){return r?.[s]}}},59866:(E,C,s)=>{var r=s(93436);E.exports=function a(c){return function(u){return r(u,c)}}},17421:E=>{E.exports=function C(s){return function(r){return s?.[r]}}},85105:E=>{E.exports=function C(s,r,a,c,u){return u(s,function(e,f,m){a=c?(c=!1,e):r(a,e,f,m)}),a}},84441:(E,C,s)=>{var r=s(80290),a=s(15529),c=s(39009);E.exports=function u(e,f){return c(a(e,f,r),e+"")}},32773:(E,C,s)=>{var r=s(23898),a=s(64667),c=s(20968),u=s(53867),e=s(82773);E.exports=function f(m,T,M,w){if(!u(m))return m;for(var D=-1,U=(T=a(T,m)).length,W=U-1,$=m;null!=$&&++D<U;){var J=e(T[D]),F=M;if("__proto__"===J||"constructor"===J||"prototype"===J)return m;if(D!=W){var X=$[J];void 0===(F=w?w(X,J,$):void 0)&&(F=u(X)?X:c(T[D+1])?[]:{})}r($,J,F),$=$[J]}return m}},99372:(E,C,s)=>{var r=s(45654),a=s(20395),c=s(80290);E.exports=a?function(e,f){return a(e,"toString",{configurable:!0,enumerable:!1,value:r(f),writable:!0})}:c},63586:E=>{E.exports=function C(s,r,a){var c=-1,u=s.length;r<0&&(r=-r>u?0:u+r),(a=a>u?u:a)<0&&(a+=u),u=r>a?0:a-r>>>0,r>>>=0;for(var e=Array(u);++c<u;)e[c]=s[c+r];return e}},37834:(E,C,s)=>{var r=s(59026);E.exports=function a(c,u){var e;return r(c,function(f,m,T){return!(e=u(f,m,T))}),!!e}},48282:E=>{E.exports=function C(s,r){for(var a=-1,c=Array(s);++a<s;)c[a]=r(a);return c}},68166:(E,C,s)=>{var r=s(57333),a=s(14992),c=s(81690),u=s(7786),f=r?r.prototype:void 0,m=f?f.toString:void 0;E.exports=function T(M){if("string"==typeof M)return M;if(c(M))return a(M,T)+"";if(u(M))return m?m.call(M):"";var w=M+"";return"0"==w&&1/M==-Infinity?"-0":w}},13743:(E,C,s)=>{var r=s(87478),a=/^\s+/;E.exports=function c(u){return u&&u.slice(0,r(u)+1).replace(a,"")}},70544:E=>{E.exports=function C(s){return function(r){return s(r)}}},72064:(E,C,s)=>{var r=s(64667),a=s(27842),c=s(61746),u=s(82773);E.exports=function e(f,m){return m=r(m,f),null==(f=c(f,m))||delete f[u(a(m))]}},25687:E=>{E.exports=function C(s,r,a){for(var c=-1,u=s.length,e=r.length,f={};++c<u;)a(f,s[c],c<e?r[c]:void 0);return f}},13747:E=>{E.exports=function C(s,r){return s.has(r)}},64667:(E,C,s)=>{var r=s(81690),a=s(99743),c=s(89775),u=s(41233);E.exports=function e(f,m){return r(f)?f:a(f,m)?[f]:c(u(f))}},26477:(E,C,s)=>{var r=s(63586);E.exports=function a(c,u,e){var f=c.length;return e=void 0===e?f:e,!u&&e>=f?c:r(c,u,e)}},88461:(E,C,s)=>{var r=s(96820);E.exports=function a(c){var u=new c.constructor(c.byteLength);return new r(u).set(new r(c)),u}},50694:(E,C,s)=>{E=s.nmd(E);var r=s(27038),a=C&&!C.nodeType&&C,c=a&&E&&!E.nodeType&&E,e=c&&c.exports===a?r.Buffer:void 0,f=e?e.allocUnsafe:void 0;E.exports=function m(T,M){if(M)return T.slice();var w=T.length,D=f?f(w):new T.constructor(w);return T.copy(D),D}},59757:(E,C,s)=>{var r=s(88461);E.exports=function a(c,u){var e=u?r(c.buffer):c.buffer;return new c.constructor(e,c.byteOffset,c.byteLength)}},83615:E=>{var C=/\w*$/;E.exports=function s(r){var a=new r.constructor(r.source,C.exec(r));return a.lastIndex=r.lastIndex,a}},42282:(E,C,s)=>{var r=s(57333),a=r?r.prototype:void 0,c=a?a.valueOf:void 0;E.exports=function u(e){return c?Object(c.call(e)):{}}},96282:(E,C,s)=>{var r=s(88461);E.exports=function a(c,u){var e=u?r(c.buffer):c.buffer;return new c.constructor(e,c.byteOffset,c.length)}},53595:E=>{E.exports=function C(s,r){var a=-1,c=s.length;for(r||(r=Array(c));++a<c;)r[a]=s[a];return r}},11694:(E,C,s)=>{var r=s(23898),a=s(92007);E.exports=function c(u,e,f,m){var T=!f;f||(f={});for(var M=-1,w=e.length;++M<w;){var D=e[M],U=m?m(f[D],u[D],D,f,u):void 0;void 0===U&&(U=u[D]),T?a(f,D,U):r(f,D,U)}return f}},14746:(E,C,s)=>{var r=s(11694),a=s(10296);E.exports=function c(u,e){return r(u,a(u),e)}},78857:(E,C,s)=>{var r=s(11694),a=s(29572);E.exports=function c(u,e){return r(u,a(u),e)}},93412:(E,C,s)=>{var r=s(27038);E.exports=r["__core-js_shared__"]},30906:(E,C,s)=>{var r=s(84441),a=s(71100);E.exports=function c(u){return r(function(e,f){var m=-1,T=f.length,M=T>1?f[T-1]:void 0,w=T>2?f[2]:void 0;for(M=u.length>3&&"function"==typeof M?(T--,M):void 0,w&&a(f[0],f[1],w)&&(M=T<3?void 0:M,T=1),e=Object(e);++m<T;){var D=f[m];D&&u(e,D,m,M)}return e})}},99889:(E,C,s)=>{var r=s(93406);E.exports=function a(c,u){return function(e,f){if(null==e)return e;if(!r(e))return c(e,f);for(var m=e.length,T=u?m:-1,M=Object(e);(u?T--:++T<m)&&!1!==f(M[T],T,M););return e}}},8269:E=>{E.exports=function C(s){return function(r,a,c){for(var u=-1,e=Object(r),f=c(r),m=f.length;m--;){var T=f[s?m:++u];if(!1===a(e[T],T,e))break}return r}}},66803:(E,C,s)=>{var r=s(26477),a=s(407),c=s(2150),u=s(41233);E.exports=function e(f){return function(m){m=u(m);var T=a(m)?c(m):void 0,M=T?T[0]:m.charAt(0),w=T?r(T,1).join(""):m.slice(1);return M[f]()+w}}},17407:(E,C,s)=>{var r=s(89731),a=s(75289),c=s(96590),e=RegExp("['\u2019]","g");E.exports=function f(m){return function(T){return r(c(a(T).replace(e,"")),m,"")}}},44674:(E,C,s)=>{var r=s(5245),a=s(93406),c=s(59108);E.exports=function u(e){return function(f,m,T){var M=Object(f);if(!a(f)){var w=r(m,3);f=c(f),m=function(U){return w(M[U],U,M)}}var D=e(f,m,T);return D>-1?M[w?f[D]:D]:void 0}}},925:(E,C,s)=>{var r=s(82358);E.exports=function a(c){return r(c)?void 0:c}},4068:(E,C,s)=>{var c=s(17421)({\u00c0:"A",\u00c1:"A",\u00c2:"A",\u00c3:"A",\u00c4:"A",\u00c5:"A",\u00e0:"a",\u00e1:"a",\u00e2:"a",\u00e3:"a",\u00e4:"a",\u00e5:"a",\u00c7:"C",\u00e7:"c",\u00d0:"D",\u00f0:"d",\u00c8:"E",\u00c9:"E",\u00ca:"E",\u00cb:"E",\u00e8:"e",\u00e9:"e",\u00ea:"e",\u00eb:"e",\u00cc:"I",\u00cd:"I",\u00ce:"I",\u00cf:"I",\u00ec:"i",\u00ed:"i",\u00ee:"i",\u00ef:"i",\u00d1:"N",\u00f1:"n",\u00d2:"O",\u00d3:"O",\u00d4:"O",\u00d5:"O",\u00d6:"O",\u00d8:"O",\u00f2:"o",\u00f3:"o",\u00f4:"o",\u00f5:"o",\u00f6:"o",\u00f8:"o",\u00d9:"U",\u00da:"U",\u00db:"U",\u00dc:"U",\u00f9:"u",\u00fa:"u",\u00fb:"u",\u00fc:"u",\u00dd:"Y",\u00fd:"y",\u00ff:"y",\u00c6:"Ae",\u00e6:"ae",\u00de:"Th",\u00fe:"th",\u00df:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010a:"C",\u010c:"C",\u0107:"c",\u0109:"c",\u010b:"c",\u010d:"c",\u010e:"D",\u0110:"D",\u010f:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011a:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011b:"e",\u011c:"G",\u011e:"G",\u0120:"G",\u0122:"G",\u011d:"g",\u011f:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012a:"I",\u012c:"I",\u012e:"I",\u0130:"I",\u0129:"i",\u012b:"i",\u012d:"i",\u012f:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013b:"L",\u013d:"L",\u013f:"L",\u0141:"L",\u013a:"l",\u013c:"l",\u013e:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014a:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014b:"n",\u014c:"O",\u014e:"O",\u0150:"O",\u014d:"o",\u014f:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015a:"S",\u015c:"S",\u015e:"S",\u0160:"S",\u015b:"s",\u015d:"s",\u015f:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016a:"U",\u016c:"U",\u016e:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016b:"u",\u016d:"u",\u016f:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017b:"Z",\u017d:"Z",\u017a:"z",\u017c:"z",\u017e:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017f:"s"});E.exports=c},20395:(E,C,s)=>{var r=s(4153),a=function(){try{var c=r(Object,"defineProperty");return c({},"",{}),c}catch{}}();E.exports=a},27667:(E,C,s)=>{var r=s(48690),a=s(8141),c=s(13747);E.exports=function f(m,T,M,w,D,U){var W=1&M,$=m.length,J=T.length;if($!=J&&!(W&&J>$))return!1;var F=U.get(m),X=U.get(T);if(F&&X)return F==T&&X==m;var de=-1,V=!0,ce=2&M?new r:void 0;for(U.set(m,T),U.set(T,m);++de<$;){var se=m[de],fe=T[de];if(w)var Te=W?w(fe,se,de,T,m,U):w(se,fe,de,m,T,U);if(void 0!==Te){if(Te)continue;V=!1;break}if(ce){if(!a(T,function($e,ge){if(!c(ce,ge)&&(se===$e||D(se,$e,M,w,U)))return ce.push(ge)})){V=!1;break}}else if(se!==fe&&!D(se,fe,M,w,U)){V=!1;break}}return U.delete(m),U.delete(T),V}},64630:(E,C,s)=>{var r=s(57333),a=s(96820),c=s(71166),u=s(27667),e=s(37461),f=s(57673),ce=r?r.prototype:void 0,se=ce?ce.valueOf:void 0;E.exports=function fe(Te,$e,ge,Et,ot,ct,qe){switch(ge){case"[object DataView]":if(Te.byteLength!=$e.byteLength||Te.byteOffset!=$e.byteOffset)return!1;Te=Te.buffer,$e=$e.buffer;case"[object ArrayBuffer]":return!(Te.byteLength!=$e.byteLength||!ct(new a(Te),new a($e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return c(+Te,+$e);case"[object Error]":return Te.name==$e.name&&Te.message==$e.message;case"[object RegExp]":case"[object String]":return Te==$e+"";case"[object Map]":var He=e;case"[object Set]":if(He||(He=f),Te.size!=$e.size&&!(1&Et))return!1;var Le=qe.get(Te);if(Le)return Le==$e;Et|=2,qe.set(Te,$e);var Pt=u(He(Te),He($e),Et,ot,ct,qe);return qe.delete(Te),Pt;case"[object Symbol]":if(se)return se.call(Te)==se.call($e)}return!1}},70838:(E,C,s)=>{var r=s(58605),u=Object.prototype.hasOwnProperty;E.exports=function e(f,m,T,M,w,D){var U=1&T,W=r(f),$=W.length;if($!=r(m).length&&!U)return!1;for(var X=$;X--;){var de=W[X];if(!(U?de in m:u.call(m,de)))return!1}var V=D.get(f),ce=D.get(m);if(V&&ce)return V==m&&ce==f;var se=!0;D.set(f,m),D.set(m,f);for(var fe=U;++X<$;){var Te=f[de=W[X]],$e=m[de];if(M)var ge=U?M($e,Te,de,m,f,D):M(Te,$e,de,f,m,D);if(!(void 0===ge?Te===$e||w(Te,$e,T,M,D):ge)){se=!1;break}fe||(fe="constructor"==de)}if(se&&!fe){var Et=f.constructor,ot=m.constructor;Et!=ot&&"constructor"in f&&"constructor"in m&&!("function"==typeof Et&&Et instanceof Et&&"function"==typeof ot&&ot instanceof ot)&&(se=!1)}return D.delete(f),D.delete(m),se}},10058:(E,C,s)=>{var r=s(94694),a=s(15529),c=s(39009);E.exports=function u(e){return c(a(e,void 0,r),e+"")}},61138:E=>{var C="object"==typeof global&&global&&global.Object===Object&&global;E.exports=C},58605:(E,C,s)=>{var r=s(19215),a=s(10296),c=s(59108);E.exports=function u(e){return r(e,c,a)}},51675:(E,C,s)=>{var r=s(19215),a=s(29572),c=s(42970);E.exports=function u(e){return r(e,c,a)}},85556:(E,C,s)=>{var r=s(36586);E.exports=function a(c,u){var e=c.__data__;return r(u)?e["string"==typeof u?"string":"hash"]:e.map}},48834:(E,C,s)=>{var r=s(45774),a=s(59108);E.exports=function c(u){for(var e=a(u),f=e.length;f--;){var m=e[f],T=u[m];e[f]=[m,T,r(T)]}return e}},4153:(E,C,s)=>{var r=s(43540),a=s(36825);E.exports=function c(u,e){var f=a(u,e);return r(f)?f:void 0}},52398:(E,C,s)=>{var a=s(93332)(Object.getPrototypeOf,Object);E.exports=a},21613:(E,C,s)=>{var r=s(57333),a=Object.prototype,c=a.hasOwnProperty,u=a.toString,e=r?r.toStringTag:void 0;E.exports=function f(m){var T=c.call(m,e),M=m[e];try{m[e]=void 0;var w=!0}catch{}var D=u.call(m);return w&&(T?m[e]=M:delete m[e]),D}},10296:(E,C,s)=>{var r=s(11375),a=s(65336),u=Object.prototype.propertyIsEnumerable,e=Object.getOwnPropertySymbols;E.exports=e?function(m){return null==m?[]:(m=Object(m),r(e(m),function(T){return u.call(m,T)}))}:a},29572:(E,C,s)=>{var r=s(94165),a=s(52398),c=s(10296),u=s(65336);E.exports=Object.getOwnPropertySymbols?function(m){for(var T=[];m;)r(T,c(m)),m=a(m);return T}:u},26663:(E,C,s)=>{var r=s(81235),a=s(39046),c=s(97129),u=s(74918),e=s(54203),f=s(72802),m=s(51217),T="[object Map]",w="[object Promise]",D="[object Set]",U="[object WeakMap]",W="[object DataView]",$=m(r),J=m(a),F=m(c),X=m(u),de=m(e),V=f;(r&&V(new r(new ArrayBuffer(1)))!=W||a&&V(new a)!=T||c&&V(c.resolve())!=w||u&&V(new u)!=D||e&&V(new e)!=U)&&(V=function(ce){var se=f(ce),fe="[object Object]"==se?ce.constructor:void 0,Te=fe?m(fe):"";if(Te)switch(Te){case $:return W;case J:return T;case F:return w;case X:return D;case de:return U}return se}),E.exports=V},36825:E=>{E.exports=function C(s,r){return s?.[r]}},82138:(E,C,s)=>{var r=s(64667),a=s(2952),c=s(81690),u=s(20968),e=s(8613),f=s(82773);E.exports=function m(T,M,w){for(var D=-1,U=(M=r(M,T)).length,W=!1;++D<U;){var $=f(M[D]);if(!(W=null!=T&&w(T,$)))break;T=T[$]}return W||++D!=U?W:!!(U=null==T?0:T.length)&&e(U)&&u($,U)&&(c(T)||a(T))}},407:E=>{var f=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");E.exports=function m(T){return f.test(T)}},59316:E=>{var C=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;E.exports=function s(r){return C.test(r)}},59410:(E,C,s)=>{var r=s(95969);E.exports=function a(){this.__data__=r?r(null):{},this.size=0}},21143:E=>{E.exports=function C(s){var r=this.has(s)&&delete this.__data__[s];return this.size-=r?1:0,r}},604:(E,C,s)=>{var r=s(95969),u=Object.prototype.hasOwnProperty;E.exports=function e(f){var m=this.__data__;if(r){var T=m[f];return"__lodash_hash_undefined__"===T?void 0:T}return u.call(m,f)?m[f]:void 0}},80584:(E,C,s)=>{var r=s(95969),c=Object.prototype.hasOwnProperty;E.exports=function u(e){var f=this.__data__;return r?void 0!==f[e]:c.call(f,e)}},7792:(E,C,s)=>{var r=s(95969);E.exports=function c(u,e){var f=this.__data__;return this.size+=this.has(u)?0:1,f[u]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},62963:E=>{var s=Object.prototype.hasOwnProperty;E.exports=function r(a){var c=a.length,u=new a.constructor(c);return c&&"string"==typeof a[0]&&s.call(a,"index")&&(u.index=a.index,u.input=a.input),u}},32143:(E,C,s)=>{var r=s(88461),a=s(59757),c=s(83615),u=s(42282),e=s(96282);E.exports=function ge(Et,ot,ct){var qe=Et.constructor;switch(ot){case"[object ArrayBuffer]":return r(Et);case"[object Boolean]":case"[object Date]":return new qe(+Et);case"[object DataView]":return a(Et,ct);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return e(Et,ct);case"[object Map]":case"[object Set]":return new qe;case"[object Number]":case"[object String]":return new qe(Et);case"[object RegExp]":return c(Et);case"[object Symbol]":return u(Et)}}},31563:(E,C,s)=>{var r=s(60920),a=s(52398),c=s(58845);E.exports=function u(e){return"function"!=typeof e.constructor||c(e)?{}:r(a(e))}},21006:(E,C,s)=>{var r=s(57333),a=s(2952),c=s(81690),u=r?r.isConcatSpreadable:void 0;E.exports=function e(f){return c(f)||a(f)||!!(u&&f&&f[u])}},20968:E=>{var s=/^(?:0|[1-9]\d*)$/;E.exports=function r(a,c){var u=typeof a;return!!(c=c??9007199254740991)&&("number"==u||"symbol"!=u&&s.test(a))&&a>-1&&a%1==0&&a<c}},71100:(E,C,s)=>{var r=s(71166),a=s(93406),c=s(20968),u=s(53867);E.exports=function e(f,m,T){if(!u(T))return!1;var M=typeof m;return!!("number"==M?a(T)&&c(m,T.length):"string"==M&&m in T)&&r(T[m],f)}},99743:(E,C,s)=>{var r=s(81690),a=s(7786),c=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;E.exports=function e(f,m){if(r(f))return!1;var T=typeof f;return!("number"!=T&&"symbol"!=T&&"boolean"!=T&&null!=f&&!a(f))||u.test(f)||!c.test(f)||null!=m&&f in Object(m)}},36586:E=>{E.exports=function C(s){var r=typeof s;return"string"==r||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==s:null===s}},38466:(E,C,s)=>{var u,r=s(93412),a=(u=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+u:"";E.exports=function c(u){return!!a&&a in u}},58845:E=>{var C=Object.prototype;E.exports=function s(r){var a=r&&r.constructor;return r===("function"==typeof a&&a.prototype||C)}},45774:(E,C,s)=>{var r=s(53867);E.exports=function a(c){return c==c&&!r(c)}},63391:E=>{E.exports=function C(){this.__data__=[],this.size=0}},68971:(E,C,s)=>{var r=s(15758),c=Array.prototype.splice;E.exports=function u(e){var f=this.__data__,m=r(f,e);return!(m<0||(m==f.length-1?f.pop():c.call(f,m,1),--this.size,0))}},18858:(E,C,s)=>{var r=s(15758);E.exports=function a(c){var u=this.__data__,e=r(u,c);return e<0?void 0:u[e][1]}},13913:(E,C,s)=>{var r=s(15758);E.exports=function a(c){return r(this.__data__,c)>-1}},68944:(E,C,s)=>{var r=s(15758);E.exports=function a(c,u){var e=this.__data__,f=r(e,c);return f<0?(++this.size,e.push([c,u])):e[f][1]=u,this}},70536:(E,C,s)=>{var r=s(41505),a=s(73545),c=s(39046);E.exports=function u(){this.size=0,this.__data__={hash:new r,map:new(c||a),string:new r}}},61502:(E,C,s)=>{var r=s(85556);E.exports=function a(c){var u=r(this,c).delete(c);return this.size-=u?1:0,u}},94960:(E,C,s)=>{var r=s(85556);E.exports=function a(c){return r(this,c).get(c)}},61539:(E,C,s)=>{var r=s(85556);E.exports=function a(c){return r(this,c).has(c)}},34138:(E,C,s)=>{var r=s(85556);E.exports=function a(c,u){var e=r(this,c),f=e.size;return e.set(c,u),this.size+=e.size==f?0:1,this}},37461:E=>{E.exports=function C(s){var r=-1,a=Array(s.size);return s.forEach(function(c,u){a[++r]=[u,c]}),a}},63587:E=>{E.exports=function C(s,r){return function(a){return null!=a&&a[s]===r&&(void 0!==r||s in Object(a))}}},43911:(E,C,s)=>{var r=s(97425);E.exports=function c(u){var e=r(u,function(m){return 500===f.size&&f.clear(),m}),f=e.cache;return e}},95969:(E,C,s)=>{var a=s(4153)(Object,"create");E.exports=a},36700:(E,C,s)=>{var a=s(93332)(Object.keys,Object);E.exports=a},25618:E=>{E.exports=function C(s){var r=[];if(null!=s)for(var a in Object(s))r.push(a);return r}},70938:(E,C,s)=>{E=s.nmd(E);var r=s(61138),a=C&&!C.nodeType&&C,c=a&&E&&!E.nodeType&&E,e=c&&c.exports===a&&r.process,f=function(){try{return c&&c.require&&c.require("util").types||e&&e.binding&&e.binding("util")}catch{}}();E.exports=f},81244:E=>{var s=Object.prototype.toString;E.exports=function r(a){return s.call(a)}},93332:E=>{E.exports=function C(s,r){return function(a){return s(r(a))}}},15529:(E,C,s)=>{var r=s(81638),a=Math.max;E.exports=function c(u,e,f){return e=a(void 0===e?u.length-1:e,0),function(){for(var m=arguments,T=-1,M=a(m.length-e,0),w=Array(M);++T<M;)w[T]=m[e+T];T=-1;for(var D=Array(e+1);++T<e;)D[T]=m[T];return D[e]=f(w),r(u,this,D)}}},61746:(E,C,s)=>{var r=s(93436),a=s(63586);E.exports=function c(u,e){return e.length<2?u:r(u,a(e,0,-1))}},27038:(E,C,s)=>{var r=s(61138),a="object"==typeof self&&self&&self.Object===Object&&self,c=r||a||Function("return this")();E.exports=c},45959:E=>{E.exports=function C(s,r){if(("constructor"!==r||"function"!=typeof s[r])&&"__proto__"!=r)return s[r]}},30365:E=>{E.exports=function s(r){return this.__data__.set(r,"__lodash_hash_undefined__"),this}},58235:E=>{E.exports=function C(s){return this.__data__.has(s)}},57673:E=>{E.exports=function C(s){var r=-1,a=Array(s.size);return s.forEach(function(c){a[++r]=c}),a}},39009:(E,C,s)=>{var r=s(99372),c=s(44094)(r);E.exports=c},44094:E=>{var C=800,s=16,r=Date.now;E.exports=function a(c){var u=0,e=0;return function(){var f=r(),m=s-(f-e);if(e=f,m>0){if(++u>=C)return arguments[0]}else u=0;return c.apply(void 0,arguments)}}},18034:(E,C,s)=>{var r=s(73545);E.exports=function a(){this.__data__=new r,this.size=0}},37238:E=>{E.exports=function C(s){var r=this.__data__,a=r.delete(s);return this.size=r.size,a}},75887:E=>{E.exports=function C(s){return this.__data__.get(s)}},81450:E=>{E.exports=function C(s){return this.__data__.has(s)}},61386:(E,C,s)=>{var r=s(73545),a=s(39046),c=s(93177);E.exports=function e(f,m){var T=this.__data__;if(T instanceof r){var M=T.__data__;if(!a||M.length<199)return M.push([f,m]),this.size=++T.size,this;T=this.__data__=new c(M)}return T.set(f,m),this.size=T.size,this}},2150:(E,C,s)=>{var r=s(87280),a=s(407),c=s(1879);E.exports=function u(e){return a(e)?c(e):r(e)}},89775:(E,C,s)=>{var r=s(43911),a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,c=/\\(\\)?/g,u=r(function(e){var f=[];return 46===e.charCodeAt(0)&&f.push(""),e.replace(a,function(m,T,M,w){f.push(M?w.replace(c,"$1"):T||m)}),f});E.exports=u},82773:(E,C,s)=>{var r=s(7786);E.exports=function c(u){if("string"==typeof u||r(u))return u;var e=u+"";return"0"==e&&1/u==-Infinity?"-0":e}},51217:E=>{var s=Function.prototype.toString;E.exports=function r(a){if(null!=a){try{return s.call(a)}catch{}try{return a+""}catch{}}return""}},87478:E=>{var C=/\s/;E.exports=function s(r){for(var a=r.length;a--&&C.test(r.charAt(a)););return a}},1879:E=>{var C="\\ud800-\\udfff",e="["+C+"]",f="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",m="\\ud83c[\\udffb-\\udfff]",M="[^"+C+"]",w="(?:\\ud83c[\\udde6-\\uddff]){2}",D="[\\ud800-\\udbff][\\udc00-\\udfff]",W="(?:"+f+"|"+m+")?",$="[\\ufe0e\\ufe0f]?",F=$+W+"(?:\\u200d(?:"+[M,w,D].join("|")+")"+$+W+")*",X="(?:"+[M+f+"?",f,w,D,e].join("|")+")",de=RegExp(m+"(?="+m+")|"+X+F,"g");E.exports=function V(ce){return ce.match(de)||[]}},58863:E=>{var C="\\ud800-\\udfff",u="\\u2700-\\u27bf",e="a-z\\xdf-\\xf6\\xf8-\\xff",w="A-Z\\xc0-\\xd6\\xd8-\\xde",U="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",$="["+U+"]",F="\\d+",X="["+u+"]",de="["+e+"]",V="[^"+C+U+F+u+e+w+"]",Te="(?:\\ud83c[\\udde6-\\uddff]){2}",$e="[\\ud800-\\udbff][\\udc00-\\udfff]",ge="["+w+"]",ot="(?:"+de+"|"+V+")",ct="(?:"+ge+"|"+V+")",qe="(?:['\u2019](?:d|ll|m|re|s|t|ve))?",He="(?:['\u2019](?:D|LL|M|RE|S|T|VE))?",We="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",Le="[\\ufe0e\\ufe0f]?",cn=Le+We+"(?:\\u200d(?:"+["[^"+C+"]",Te,$e].join("|")+")"+Le+We+")*",pn="(?:"+[X,Te,$e].join("|")+")"+cn,Rn=RegExp([ge+"?"+de+"+"+qe+"(?="+[$,ge,"$"].join("|")+")",ct+"+"+He+"(?="+[$,ge+ot,"$"].join("|")+")",ge+"?"+ot+"+"+qe,ge+"+"+He,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",F,pn].join("|"),"g");E.exports=function At(qt){return qt.match(Rn)||[]}},35037:(E,C,s)=>{var r=s(76974),c=s(17407)(function(u,e,f){return e=e.toLowerCase(),u+(f?r(e):e)});E.exports=c},76974:(E,C,s)=>{var r=s(41233),a=s(93890);E.exports=function c(u){return a(r(u).toLowerCase())}},45654:E=>{E.exports=function C(s){return function(){return s}}},41776:(E,C,s)=>{var r=s(53867),a=s(30765),c=s(45038),e=Math.max,f=Math.min;E.exports=function m(T,M,w){var D,U,W,$,J,F,X=0,de=!1,V=!1,ce=!0;if("function"!=typeof T)throw new TypeError("Expected a function");function se(He){var We=D,Le=U;return D=U=void 0,X=He,$=T.apply(Le,We)}function $e(He){var We=He-F;return void 0===F||We>=M||We<0||V&&He-X>=W}function ge(){var He=a();if($e(He))return Et(He);J=setTimeout(ge,function Te(He){var Pt=M-(He-F);return V?f(Pt,W-(He-X)):Pt}(He))}function Et(He){return J=void 0,ce&&D?se(He):(D=U=void 0,$)}function qe(){var He=a(),We=$e(He);if(D=arguments,U=this,F=He,We){if(void 0===J)return function fe(He){return X=He,J=setTimeout(ge,M),de?se(He):$}(F);if(V)return clearTimeout(J),J=setTimeout(ge,M),se(F)}return void 0===J&&(J=setTimeout(ge,M)),$}return M=c(M)||0,r(w)&&(de=!!w.leading,W=(V="maxWait"in w)?e(c(w.maxWait)||0,M):W,ce="trailing"in w?!!w.trailing:ce),qe.cancel=function ot(){void 0!==J&&clearTimeout(J),X=0,D=F=U=J=void 0},qe.flush=function ct(){return void 0===J?$:Et(a())},qe}},75289:(E,C,s)=>{var r=s(4068),a=s(41233),c=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,M=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");E.exports=function w(D){return(D=a(D))&&D.replace(c,r).replace(M,"")}},71166:E=>{E.exports=function C(s,r){return s===r||s!=s&&r!=r}},98990:(E,C,s)=>{var c=s(44674)(s(84857));E.exports=c},84857:(E,C,s)=>{var r=s(12229),a=s(5245),c=s(32781),u=Math.max;E.exports=function e(f,m,T){var M=null==f?0:f.length;if(!M)return-1;var w=null==T?0:c(T);return w<0&&(w=u(M+w,0)),r(f,a(m,3),w)}},94694:(E,C,s)=>{var r=s(56369);E.exports=function a(c){return null!=c&&c.length?r(c,1):[]}},58102:(E,C,s)=>{var r=s(93436);E.exports=function a(c,u,e){var f=null==c?void 0:r(c,u);return void 0===f?e:f}},18303:(E,C,s)=>{var r=s(55333),a=s(82138);E.exports=function c(u,e){return null!=u&&a(u,e,r)}},80290:E=>{E.exports=function C(s){return s}},2952:(E,C,s)=>{var r=s(77090),a=s(27503),c=Object.prototype,u=c.hasOwnProperty,e=c.propertyIsEnumerable,f=r(function(){return arguments}())?r:function(m){return a(m)&&u.call(m,"callee")&&!e.call(m,"callee")};E.exports=f},81690:E=>{E.exports=Array.isArray},93406:(E,C,s)=>{var r=s(55836),a=s(8613);E.exports=function c(u){return null!=u&&a(u.length)&&!r(u)}},82027:(E,C,s)=>{var r=s(93406),a=s(27503);E.exports=function c(u){return a(u)&&r(u)}},84444:(E,C,s)=>{E=s.nmd(E);var r=s(27038),a=s(61711),c=C&&!C.nodeType&&C,u=c&&E&&!E.nodeType&&E,f=u&&u.exports===c?r.Buffer:void 0;E.exports=(f?f.isBuffer:void 0)||a},12232:(E,C,s)=>{var r=s(92488),a=s(26663),c=s(2952),u=s(81690),e=s(93406),f=s(84444),m=s(58845),T=s(47679),U=Object.prototype.hasOwnProperty;E.exports=function W($){if(null==$)return!0;if(e($)&&(u($)||"string"==typeof $||"function"==typeof $.splice||f($)||T($)||c($)))return!$.length;var J=a($);if("[object Map]"==J||"[object Set]"==J)return!$.size;if(m($))return!r($).length;for(var F in $)if(U.call($,F))return!1;return!0}},55836:(E,C,s)=>{var r=s(72802),a=s(53867);E.exports=function m(T){if(!a(T))return!1;var M=r(T);return"[object Function]"==M||"[object GeneratorFunction]"==M||"[object AsyncFunction]"==M||"[object Proxy]"==M}},8613:E=>{E.exports=function s(r){return"number"==typeof r&&r>-1&&r%1==0&&r<=9007199254740991}},32e3:(E,C,s)=>{var r=s(63434),a=s(70544),c=s(70938),u=c&&c.isMap,e=u?a(u):r;E.exports=e},53867:E=>{E.exports=function C(s){var r=typeof s;return null!=s&&("object"==r||"function"==r)}},27503:E=>{E.exports=function C(s){return null!=s&&"object"==typeof s}},82358:(E,C,s)=>{var r=s(72802),a=s(52398),c=s(27503),m=Function.prototype.toString,T=Object.prototype.hasOwnProperty,M=m.call(Object);E.exports=function w(D){if(!c(D)||"[object Object]"!=r(D))return!1;var U=a(D);if(null===U)return!0;var W=T.call(U,"constructor")&&U.constructor;return"function"==typeof W&&W instanceof W&&m.call(W)==M}},48855:(E,C,s)=>{var r=s(67495),a=s(70544),c=s(70938),u=c&&c.isSet,e=u?a(u):r;E.exports=e},64871:(E,C,s)=>{var r=s(72802),a=s(81690),c=s(27503);E.exports=function e(f){return"string"==typeof f||!a(f)&&c(f)&&"[object String]"==r(f)}},7786:(E,C,s)=>{var r=s(72802),a=s(27503);E.exports=function u(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==r(e)}},47679:(E,C,s)=>{var r=s(99390),a=s(70544),c=s(70938),u=c&&c.isTypedArray,e=u?a(u):r;E.exports=e},59108:(E,C,s)=>{var r=s(71890),a=s(92488),c=s(93406);E.exports=function u(e){return c(e)?r(e):a(e)}},42970:(E,C,s)=>{var r=s(71890),a=s(50762),c=s(93406);E.exports=function u(e){return c(e)?r(e,!0):a(e)}},27842:E=>{E.exports=function C(s){var r=null==s?0:s.length;return r?s[r-1]:void 0}},23815:function(E,C,s){var r;E=s.nmd(E),function(){var a,u=200,f="Expected a function",T="__lodash_hash_undefined__",w="__lodash_placeholder__",D=1,U=2,W=4,$=1,J=2,F=1,X=2,de=4,V=8,ce=16,se=32,fe=64,Te=128,$e=256,ge=512,ct=800,qe=16,Pt=1/0,it=9007199254740991,Xt=17976931348623157e292,cn=NaN,pn=4294967295,Rn=pn-1,At=pn>>>1,qt=[["ary",Te],["bind",F],["bindKey",X],["curry",V],["curryRight",ce],["flip",ge],["partial",se],["partialRight",fe],["rearg",$e]],sn="[object Arguments]",fn="[object Array]",xn="[object AsyncFunction]",Kr="[object Boolean]",Or="[object Date]",Lr="[object DOMException]",ir="[object Error]",Qr="[object Function]",jr="[object GeneratorFunction]",br="[object Map]",ht="[object Number]",Wt="[object Null]",Tt="[object Object]",wn="[object Promise]",jn="[object Proxy]",hr="[object RegExp]",Oi="[object Set]",Wi="[object String]",so="[object Symbol]",kr="[object Undefined]",Ei="[object WeakMap]",mr="[object ArrayBuffer]",pr="[object DataView]",Eo="[object Float32Array]",po="[object Float64Array]",$i="[object Int8Array]",qr="[object Int16Array]",Hi="[object Int32Array]",Dn="[object Uint8Array]",Hn="[object Uint8ClampedArray]",jt="[object Uint16Array]",Fe="[object Uint32Array]",Ie=/\b__p \+= '';/g,et=/\b(__p \+=) '' \+/g,ze=/(__e\(.*?\)|\b__t\)) \+\n'';/g,an=/&(?:amp|lt|gt|quot|#39);/g,lt=/[&<>"']/g,Rt=RegExp(an.source),Pe=RegExp(lt.source),qn=/<%-([\s\S]+?)%>/g,gr=/<%([\s\S]+?)%>/g,Pn=/<%=([\s\S]+?)%>/g,_r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Pr=/^\w*$/,tr=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Zn=/[\\^$.*+?()[\]{}|]/g,nr=RegExp(Zn.source),Zt=/^\s+/,dn=/\s/,Ge=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Ot=/\{\n\/\* \[wrapped with (.+)\] \*/,mn=/,? & /,wr=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ti=/[()=,{}\[\]\/\s]/,Ci=/\\(\\)?/g,Ai=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Ko=/\w*$/,_s=/^[-+]0x[0-9a-f]+$/i,dr=/^0b[01]+$/i,Ni=/^\[object .+?Constructor\]$/,ti=/^0o[0-7]+$/i,Vr=/^(?:0|[1-9]\d*)$/,wi=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ji=/($^)/,Vi=/['\n\r\u2028\u2029\\]/g,Po="\\ud800-\\udfff",Vt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",bn="\\u2700-\\u27bf",Bn="a-z\\xdf-\\xf6\\xf8-\\xff",ts="A-Z\\xc0-\\xd6\\xd8-\\xde",jo="\\ufe0e\\ufe0f",ss="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Is="["+Po+"]",la="["+ss+"]",Ro="["+Vt+"]",jl="\\d+",gl="["+bn+"]",qa="["+Bn+"]",da="[^"+Po+ss+jl+bn+Bn+ts+"]",$a="\\ud83c[\\udffb-\\udfff]",Ji="[^"+Po+"]",Ha="(?:\\ud83c[\\udde6-\\uddff]){2}",Ts="[\\ud800-\\udbff][\\udc00-\\udfff]",hs="["+ts+"]",Aa="(?:"+qa+"|"+da+")",Ja="(?:"+hs+"|"+da+")",fa="(?:['\u2019](?:d|ll|m|re|s|t|ve))?",Xo="(?:['\u2019](?:D|LL|M|RE|S|T|VE))?",No="(?:"+Ro+"|"+$a+")?",Cs="["+jo+"]?",io=Cs+No+"(?:\\u200d(?:"+[Ji,Ha,Ts].join("|")+")"+Cs+No+")*",gt="(?:"+[gl,Ha,Ts].join("|")+")"+io,Tn="(?:"+[Ji+Ro+"?",Ro,Ha,Ts,Is].join("|")+")",ie=RegExp("['\u2019]","g"),Ze=RegExp(Ro,"g"),Jt=RegExp($a+"(?="+$a+")|"+Tn+io,"g"),gn=RegExp([hs+"?"+qa+"+"+fa+"(?="+[la,hs,"$"].join("|")+")",Ja+"+"+Xo+"(?="+[la,hs+Aa,"$"].join("|")+")",hs+"?"+Aa+"+"+fa,hs+"+"+Xo,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",jl,gt].join("|"),"g"),vi=RegExp("[\\u200d"+Po+Vt+jo+"]"),Bi=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Xi=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],ws=-1,ds={};ds[Eo]=ds[po]=ds[$i]=ds[qr]=ds[Hi]=ds[Dn]=ds[Hn]=ds[jt]=ds[Fe]=!0,ds[sn]=ds[fn]=ds[mr]=ds[Kr]=ds[pr]=ds[Or]=ds[ir]=ds[Qr]=ds[br]=ds[ht]=ds[Tt]=ds[hr]=ds[Oi]=ds[Wi]=ds[Ei]=!1;var qs={};qs[sn]=qs[fn]=qs[mr]=qs[pr]=qs[Kr]=qs[Or]=qs[Eo]=qs[po]=qs[$i]=qs[qr]=qs[Hi]=qs[br]=qs[ht]=qs[Tt]=qs[hr]=qs[Oi]=qs[Wi]=qs[so]=qs[Dn]=qs[Hn]=qs[jt]=qs[Fe]=!0,qs[ir]=qs[Qr]=qs[Ei]=!1;var Yu={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Nc=parseFloat,qu=parseInt,Ol="object"==typeof global&&global&&global.Object===Object&&global,Kc="object"==typeof self&&self&&self.Object===Object&&self,yl=Ol||Kc||Function("return this")(),au=C&&!C.nodeType&&C,Da=au&&E&&!E.nodeType&&E,yu=Da&&Da.exports===au,ju=yu&&Ol.process,el=function(){try{return Da&&Da.require&&Da.require("util").types||ju&&ju.binding&&ju.binding("util")}catch{}}(),oc=el&&el.isArrayBuffer,Xl=el&&el.isDate,Ic=el&&el.isMap,Gs=el&&el.isRegExp,ku=el&&el.isSet,zu=el&&el.isTypedArray;function ua(Qn,Gr,Fr){switch(Fr.length){case 0:return Qn.call(Gr);case 1:return Qn.call(Gr,Fr[0]);case 2:return Qn.call(Gr,Fr[0],Fr[1]);case 3:return Qn.call(Gr,Fr[0],Fr[1],Fr[2])}return Qn.apply(Gr,Fr)}function El(Qn,Gr,Fr,Ui){for(var Do=-1,Fa=null==Qn?0:Qn.length;++Do<Fa;){var ca=Qn[Do];Gr(Ui,ca,Fr(ca),Qn)}return Ui}function uu(Qn,Gr){for(var Fr=-1,Ui=null==Qn?0:Qn.length;++Fr<Ui&&!1!==Gr(Qn[Fr],Fr,Qn););return Qn}function Eu(Qn,Gr){for(var Fr=null==Qn?0:Qn.length;Fr--&&!1!==Gr(Qn[Fr],Fr,Qn););return Qn}function $u(Qn,Gr){for(var Fr=-1,Ui=null==Qn?0:Qn.length;++Fr<Ui;)if(!Gr(Qn[Fr],Fr,Qn))return!1;return!0}function Ba(Qn,Gr){for(var Fr=-1,Ui=null==Qn?0:Qn.length,Do=0,Fa=[];++Fr<Ui;){var ca=Qn[Fr];Gr(ca,Fr,Qn)&&(Fa[Do++]=ca)}return Fa}function Tl(Qn,Gr){return!(null==Qn||!Qn.length)&&ql(Qn,Gr,0)>-1}function tl(Qn,Gr,Fr){for(var Ui=-1,Do=null==Qn?0:Qn.length;++Ui<Do;)if(Fr(Gr,Qn[Ui]))return!0;return!1}function Ga(Qn,Gr){for(var Fr=-1,Ui=null==Qn?0:Qn.length,Do=Array(Ui);++Fr<Ui;)Do[Fr]=Gr(Qn[Fr],Fr,Qn);return Do}function dc(Qn,Gr){for(var Fr=-1,Ui=Gr.length,Do=Qn.length;++Fr<Ui;)Qn[Do+Fr]=Gr[Fr];return Qn}function cu(Qn,Gr,Fr,Ui){var Do=-1,Fa=null==Qn?0:Qn.length;for(Ui&&Fa&&(Fr=Qn[++Do]);++Do<Fa;)Fr=Gr(Fr,Qn[Do],Do,Qn);return Fr}function Sa(Qn,Gr,Fr,Ui){var Do=null==Qn?0:Qn.length;for(Ui&&Do&&(Fr=Qn[--Do]);Do--;)Fr=Gr(Fr,Qn[Do],Do,Qn);return Fr}function Ru(Qn,Gr){for(var Fr=-1,Ui=null==Qn?0:Qn.length;++Fr<Ui;)if(Gr(Qn[Fr],Fr,Qn))return!0;return!1}var xu=Vc("length");function Su(Qn,Gr,Fr){var Ui;return Fr(Qn,function(Do,Fa,ca){if(Gr(Do,Fa,ca))return Ui=Fa,!1}),Ui}function gc(Qn,Gr,Fr,Ui){for(var Do=Qn.length,Fa=Fr+(Ui?1:-1);Ui?Fa--:++Fa<Do;)if(Gr(Qn[Fa],Fa,Qn))return Fa;return-1}function ql(Qn,Gr,Fr){return Gr==Gr?function yt(Qn,Gr,Fr){for(var Ui=Fr-1,Do=Qn.length;++Ui<Do;)if(Qn[Ui]===Gr)return Ui;return-1}(Qn,Gr,Fr):gc(Qn,Dc,Fr)}function Al(Qn,Gr,Fr,Ui){for(var Do=Fr-1,Fa=Qn.length;++Do<Fa;)if(Ui(Qn[Do],Gr))return Do;return-1}function Dc(Qn){return Qn!=Qn}function zs(Qn,Gr){var Fr=null==Qn?0:Qn.length;return Fr?en(Qn,Gr)/Fr:cn}function Vc(Qn){return function(Gr){return null==Gr?a:Gr[Qn]}}function bt(Qn){return function(Gr){return null==Qn?a:Qn[Gr]}}function pt(Qn,Gr,Fr,Ui,Do){return Do(Qn,function(Fa,ca,zo){Fr=Ui?(Ui=!1,Fa):Gr(Fr,Fa,ca,zo)}),Fr}function en(Qn,Gr){for(var Fr,Ui=-1,Do=Qn.length;++Ui<Do;){var Fa=Gr(Qn[Ui]);Fa!==a&&(Fr=Fr===a?Fa:Fr+Fa)}return Fr}function fi(Qn,Gr){for(var Fr=-1,Ui=Array(Qn);++Fr<Qn;)Ui[Fr]=Gr(Fr);return Ui}function Ya(Qn){return Qn&&Qn.slice(0,kn(Qn)+1).replace(Zt,"")}function mi(Qn){return function(Gr){return Qn(Gr)}}function Hs(Qn,Gr){return Ga(Gr,function(Fr){return Qn[Fr]})}function Qs(Qn,Gr){return Qn.has(Gr)}function Hu(Qn,Gr){for(var Fr=-1,Ui=Qn.length;++Fr<Ui&&ql(Gr,Qn[Fr],0)>-1;);return Fr}function zl(Qn,Gr){for(var Fr=Qn.length;Fr--&&ql(Gr,Qn[Fr],0)>-1;);return Fr}var hu=bt({\u00c0:"A",\u00c1:"A",\u00c2:"A",\u00c3:"A",\u00c4:"A",\u00c5:"A",\u00e0:"a",\u00e1:"a",\u00e2:"a",\u00e3:"a",\u00e4:"a",\u00e5:"a",\u00c7:"C",\u00e7:"c",\u00d0:"D",\u00f0:"d",\u00c8:"E",\u00c9:"E",\u00ca:"E",\u00cb:"E",\u00e8:"e",\u00e9:"e",\u00ea:"e",\u00eb:"e",\u00cc:"I",\u00cd:"I",\u00ce:"I",\u00cf:"I",\u00ec:"i",\u00ed:"i",\u00ee:"i",\u00ef:"i",\u00d1:"N",\u00f1:"n",\u00d2:"O",\u00d3:"O",\u00d4:"O",\u00d5:"O",\u00d6:"O",\u00d8:"O",\u00f2:"o",\u00f3:"o",\u00f4:"o",\u00f5:"o",\u00f6:"o",\u00f8:"o",\u00d9:"U",\u00da:"U",\u00db:"U",\u00dc:"U",\u00f9:"u",\u00fa:"u",\u00fb:"u",\u00fc:"u",\u00dd:"Y",\u00fd:"y",\u00ff:"y",\u00c6:"Ae",\u00e6:"ae",\u00de:"Th",\u00fe:"th",\u00df:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010a:"C",\u010c:"C",\u0107:"c",\u0109:"c",\u010b:"c",\u010d:"c",\u010e:"D",\u0110:"D",\u010f:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011a:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011b:"e",\u011c:"G",\u011e:"G",\u0120:"G",\u0122:"G",\u011d:"g",\u011f:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012a:"I",\u012c:"I",\u012e:"I",\u0130:"I",\u0129:"i",\u012b:"i",\u012d:"i",\u012f:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013b:"L",\u013d:"L",\u013f:"L",\u0141:"L",\u013a:"l",\u013c:"l",\u013e:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014a:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014b:"n",\u014c:"O",\u014e:"O",\u0150:"O",\u014d:"o",\u014f:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015a:"S",\u015c:"S",\u015e:"S",\u0160:"S",\u015b:"s",\u015d:"s",\u015f:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016a:"U",\u016c:"U",\u016e:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016b:"u",\u016d:"u",\u016f:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017b:"Z",\u017d:"Z",\u017a:"z",\u017c:"z",\u017e:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017f:"s"}),lu=bt({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function id(Qn){return"\\"+Yu[Qn]}function Fc(Qn){return vi.test(Qn)}function kl(Qn){var Gr=-1,Fr=Array(Qn.size);return Qn.forEach(function(Ui,Do){Fr[++Gr]=[Do,Ui]}),Fr}function sl(Qn,Gr){return function(Fr){return Qn(Gr(Fr))}}function ja(Qn,Gr){for(var Fr=-1,Ui=Qn.length,Do=0,Fa=[];++Fr<Ui;){var ca=Qn[Fr];(ca===Gr||ca===w)&&(Qn[Fr]=w,Fa[Do++]=Fr)}return Fa}function Q(Qn){var Gr=-1,Fr=Array(Qn.size);return Qn.forEach(function(Ui){Fr[++Gr]=Ui}),Fr}function Gt(Qn){return Fc(Qn)?function Xr(Qn){for(var Gr=Jt.lastIndex=0;Jt.test(Qn);)++Gr;return Gr}(Qn):xu(Qn)}function An(Qn){return Fc(Qn)?function yr(Qn){return Qn.match(Jt)||[]}(Qn):function ba(Qn){return Qn.split("")}(Qn)}function kn(Qn){for(var Gr=Qn.length;Gr--&&dn.test(Qn.charAt(Gr)););return Gr}var Hr=bt({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"}),Io=function Qn(Gr){var A,Fr=(Gr=null==Gr?yl:Io.defaults(yl.Object(),Gr,Io.pick(yl,Xi))).Array,Ui=Gr.Date,Do=Gr.Error,Fa=Gr.Function,ca=Gr.Math,zo=Gr.Object,$l=Gr.RegExp,xl=Gr.String,Uu=Gr.TypeError,Xc=Fr.prototype,kc=zo.prototype,yi=Gr["__core-js_shared__"],Wl=Fa.prototype.toString,Pa=kc.hasOwnProperty,fc=0,bu=(A=/[^.]+$/.exec(yi&&yi.keys&&yi.keys.IE_PROTO||""))?"Symbol(src)_1."+A:"",je=kc.toString,Nt=Wl.call(zo),tt=yl._,tn=$l("^"+Wl.call(Pa).replace(Zn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Xn=yu?Gr.Buffer:a,bi=Gr.Symbol,Ri=Gr.Uint8Array,fs=Xn?Xn.allocUnsafe:a,Fs=sl(zo.getPrototypeOf,zo),Ra=zo.create,Vs=kc.propertyIsEnumerable,Ms=Xc.splice,wl=bi?bi.isConcatSpreadable:a,Ho=bi?bi.iterator:a,Qa=bi?bi.toStringTag:a,rn=function(){try{var A=Cc(zo,"defineProperty");return A({},"",{}),A}catch{}}(),Jl=Gr.clearTimeout!==yl.clearTimeout&&Gr.clearTimeout,le=Ui&&Ui.now!==yl.Date.now&&Ui.now,ae=Gr.setTimeout!==yl.setTimeout&&Gr.setTimeout,De=ca.ceil,Ve=ca.floor,st=zo.getOwnPropertySymbols,zt=Xn?Xn.isBuffer:a,Qt=Gr.isFinite,Gn=Xc.join,Er=sl(zo.keys,zo),Nr=ca.max,Mi=ca.min,ao=Ui.now,Jo=Gr.parseInt,rs=ca.random,ys=Xc.reverse,Ps=Cc(Gr,"DataView"),Ul=Cc(Gr,"Map"),eu=Cc(Gr,"Promise"),mu=Cc(Gr,"Set"),wu=Cc(Gr,"WeakMap"),Rc=Cc(zo,"create"),fu=wu&&new wu,qc={},$c=Sf(Ps),pu=Sf(Ul),vc=Sf(eu),La=Sf(mu),al=Sf(wu),rl=bi?bi.prototype:a,xa=rl?rl.valueOf:a,Tu=rl?rl.toString:a;function En(A){if(pd(A)&&!Ii(A)&&!(A instanceof Os)){if(A instanceof Va)return A;if(Pa.call(A,"__wrapped__"))return xh(A)}return new Va(A)}var Pu=function(){function A(){}return function(B){if(!wc(B))return{};if(Ra)return Ra(B);A.prototype=B;var me=new A;return A.prototype=a,me}}();function za(){}function Va(A,B){this.__wrapped__=A,this.__actions__=[],this.__chain__=!!B,this.__index__=0,this.__values__=a}function Os(A){this.__wrapped__=A,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=pn,this.__views__=[]}function Vu(A){var B=-1,me=null==A?0:A.length;for(this.clear();++B<me;){var _t=A[B];this.set(_t[0],_t[1])}}function Uc(A){var B=-1,me=null==A?0:A.length;for(this.clear();++B<me;){var _t=A[B];this.set(_t[0],_t[1])}}function gd(A){var B=-1,me=null==A?0:A.length;for(this.clear();++B<me;){var _t=A[B];this.set(_t[0],_t[1])}}function Bc(A){var B=-1,me=null==A?0:A.length;for(this.__data__=new gd;++B<me;)this.add(A[B])}function Ne(A){var B=this.__data__=new Uc(A);this.size=B.size}function ni(A,B){var me=Ii(A),_t=!me&&Br(A),on=!me&&!_t&&Xu(A),Fn=!me&&!_t&&!on&&$_(A),Tr=me||_t||on||Fn,Jr=Tr?fi(A.length,xl):[],hi=Jr.length;for(var Oo in A)(B||Pa.call(A,Oo))&&(!Tr||!("length"==Oo||on&&("offset"==Oo||"parent"==Oo)||Fn&&("buffer"==Oo||"byteLength"==Oo||"byteOffset"==Oo)||lc(Oo,hi)))&&Jr.push(Oo);return Jr}function zi(A){var B=A.length;return B?A[pf(0,B-1)]:a}function Wo(A,B){return pp(Yd(A),Ed(B,0,A.length))}function Qo(A){return pp(Yd(A))}function ya(A,B,me){(me!==a&&!St(A[B],me)||me===a&&!(B in A))&&tc(A,B,me)}function Bl(A,B,me){var _t=A[B];(!Pa.call(A,B)||!St(_t,me)||me===a&&!(B in A))&&tc(A,B,me)}function Wu(A,B){for(var me=A.length;me--;)if(St(A[me][0],B))return me;return-1}function pc(A,B,me,_t){return he(A,function(on,Fn,Tr){B(_t,on,me(on),Tr)}),_t}function cd(A,B){return A&&Nf(B,uf(B),A)}function tc(A,B,me){"__proto__"==B&&rn?rn(A,B,{configurable:!0,enumerable:!0,value:me,writable:!0}):A[B]=me}function od(A,B){for(var me=-1,_t=B.length,on=Fr(_t),Fn=null==A;++me<_t;)on[me]=Fn?a:v_(A,B[me]);return on}function Ed(A,B,me){return A==A&&(me!==a&&(A=A<=me?A:me),B!==a&&(A=A>=B?A:B)),A}function h(A,B,me,_t,on,Fn){var Tr,Jr=B&D,hi=B&U,Oo=B&W;if(me&&(Tr=on?me(A,_t,on,Fn):me(A)),Tr!==a)return Tr;if(!wc(A))return A;var Ao=Ii(A);if(Ao){if(Tr=function zf(A){var B=A.length,me=new A.constructor(B);return B&&"string"==typeof A[0]&&Pa.call(A,"index")&&(me.index=A.index,me.input=A.input),me}(A),!Jr)return Yd(A,Tr)}else{var Bo=Mc(A),Bs=Bo==Qr||Bo==jr;if(Xu(A))return Gp(A,Jr);if(Bo==Tt||Bo==sn||Bs&&!on){if(Tr=hi||Bs?{}:Vf(A),!Jr)return hi?function Jh(A,B){return Nf(A,cp(A),B)}(A,function Ju(A,B){return A&&Nf(B,Lp(B),A)}(Tr,A)):function Mh(A,B){return Nf(A,yf(A),B)}(A,cd(Tr,A))}else{if(!qs[Bo])return on?A:{};Tr=function ra(A,B,me){var _t=A.constructor;switch(B){case mr:return a_(A);case Kr:case Or:return new _t(+A);case pr:return function Q_(A,B){var me=B?a_(A.buffer):A.buffer;return new A.constructor(me,A.byteOffset,A.byteLength)}(A,me);case Eo:case po:case $i:case qr:case Hi:case Dn:case Hn:case jt:case Fe:return q_(A,me);case br:return new _t;case ht:case Wi:return new _t(A);case hr:return function K_(A){var B=new A.constructor(A.source,Ko.exec(A));return B.lastIndex=A.lastIndex,B}(A);case Oi:return new _t;case so:return function X_(A){return xa?zo(xa.call(A)):{}}(A)}}(A,Bo,Jr)}}Fn||(Fn=new Ne);var Ea=Fn.get(A);if(Ea)return Ea;Fn.set(A,Tr),Tg(A)?A.forEach(function(_l){Tr.add(h(_l,B,me,_l,A,Fn))}):Sm(A)&&A.forEach(function(_l,vu){Tr.set(vu,h(_l,B,me,vu,A,Fn))});var ru=Ao?a:(Oo?hi?zp:gf:hi?Lp:uf)(A);return uu(ru||A,function(_l,vu){ru&&(_l=A[vu=_l]),Bl(Tr,vu,h(_l,B,me,vu,A,Fn))}),Tr}function N(A,B,me){var _t=me.length;if(null==A)return!_t;for(A=zo(A);_t--;){var on=me[_t],Tr=A[on];if(Tr===a&&!(on in A)||!(0,B[on])(Tr))return!1}return!0}function k(A,B,me){if("function"!=typeof A)throw new Uu(f);return w_(function(){A.apply(a,me)},B)}function ne(A,B,me,_t){var on=-1,Fn=Tl,Tr=!0,Jr=A.length,hi=[],Oo=B.length;if(!Jr)return hi;me&&(B=Ga(B,mi(me))),_t?(Fn=tl,Tr=!1):B.length>=u&&(Fn=Qs,Tr=!1,B=new Bc(B));e:for(;++on<Jr;){var Ao=A[on],Bo=null==me?Ao:me(Ao);if(Ao=_t||0!==Ao?Ao:0,Tr&&Bo==Bo){for(var Bs=Oo;Bs--;)if(B[Bs]===Bo)continue e;hi.push(Ao)}else Fn(B,Bo,_t)||hi.push(Ao)}return hi}En.templateSettings={escape:qn,evaluate:gr,interpolate:Pn,variable:"",imports:{_:En}},(En.prototype=za.prototype).constructor=En,(Va.prototype=Pu(za.prototype)).constructor=Va,(Os.prototype=Pu(za.prototype)).constructor=Os,Vu.prototype.clear=function ud(){this.__data__=Rc?Rc(null):{},this.size=0},Vu.prototype.delete=function md(A){var B=this.has(A)&&delete this.__data__[A];return this.size-=B?1:0,B},Vu.prototype.get=function tf(A){var B=this.__data__;if(Rc){var me=B[A];return me===T?a:me}return Pa.call(B,A)?B[A]:a},Vu.prototype.has=function Uf(A){var B=this.__data__;return Rc?B[A]!==a:Pa.call(B,A)},Vu.prototype.set=function Mu(A,B){var me=this.__data__;return this.size+=this.has(A)?0:1,me[A]=Rc&&B===a?T:B,this},Uc.prototype.clear=function Zu(){this.__data__=[],this.size=0},Uc.prototype.delete=function Tp(A){var B=this.__data__,me=Wu(B,A);return!(me<0||(me==B.length-1?B.pop():Ms.call(B,me,1),--this.size,0))},Uc.prototype.get=function ip(A){var B=this.__data__,me=Wu(B,A);return me<0?a:B[me][1]},Uc.prototype.has=function Hd(A){return Wu(this.__data__,A)>-1},Uc.prototype.set=function Bf(A,B){var me=this.__data__,_t=Wu(me,A);return _t<0?(++this.size,me.push([A,B])):me[_t][1]=B,this},gd.prototype.clear=function Nu(){this.size=0,this.__data__={hash:new Vu,map:new(Ul||Uc),string:new Vu}},gd.prototype.delete=function ed(A){var B=vf(this,A).delete(A);return this.size-=B?1:0,B},gd.prototype.get=function xf(A){return vf(this,A).get(A)},gd.prototype.has=function _u(A){return vf(this,A).has(A)},gd.prototype.set=function Ud(A,B){var me=vf(this,A),_t=me.size;return me.set(A,B),this.size+=me.size==_t?0:1,this},Bc.prototype.add=Bc.prototype.push=function Lo(A){return this.__data__.set(A,T),this},Bc.prototype.has=function Se(A){return this.__data__.has(A)},Ne.prototype.clear=function _e(){this.__data__=new Uc,this.size=0},Ne.prototype.delete=function Ye(A){var B=this.__data__,me=B.delete(A);return this.size=B.size,me},Ne.prototype.get=function Mt(A){return this.__data__.get(A)},Ne.prototype.has=function un(A){return this.__data__.has(A)},Ne.prototype.set=function Mn(A,B){var me=this.__data__;if(me instanceof Uc){var _t=me.__data__;if(!Ul||_t.length<u-1)return _t.push([A,B]),this.size=++me.size,this;me=this.__data__=new gd(_t)}return me.set(A,B),this.size=me.size,this};var he=hf(sr),Me=hf(Dr,!0);function Qe(A,B){var me=!0;return he(A,function(_t,on,Fn){return me=!!B(_t,on,Fn)}),me}function Re(A,B,me){for(var _t=-1,on=A.length;++_t<on;){var Fn=A[_t],Tr=B(Fn);if(null!=Tr&&(Jr===a?Tr==Tr&&!Kf(Tr):me(Tr,Jr)))var Jr=Tr,hi=Fn}return hi}function wt(A,B){var me=[];return he(A,function(_t,on,Fn){B(_t,on,Fn)&&me.push(_t)}),me}function It(A,B,me,_t,on){var Fn=-1,Tr=A.length;for(me||(me=ih),on||(on=[]);++Fn<Tr;){var Jr=A[Fn];B>0&&me(Jr)?B>1?It(Jr,B-1,me,_t,on):dc(on,Jr):_t||(on[on.length]=Jr)}return on}var Cn=l_(),er=l_(!0);function sr(A,B){return A&&Cn(A,B,uf)}function Dr(A,B){return A&&er(A,B,uf)}function oi(A,B){return Ba(B,function(me){return Wd(A[me])})}function uo(A,B){for(var me=0,_t=(B=Gd(B,A)).length;null!=A&&me<_t;)A=A[Ef(B[me++])];return me&&me==_t?A:a}function As(A,B,me){var _t=B(A);return Ii(A)?_t:dc(_t,me(A))}function as(A){return null==A?A===a?kr:Wt:Qa&&Qa in zo(A)?function D_(A){var B=Pa.call(A,Qa),me=A[Qa];try{A[Qa]=a;var _t=!0}catch{}var on=je.call(A);return _t&&(B?A[Qa]=me:delete A[Qa]),on}(A):function dp(A){return je.call(A)}(A)}function ma(A,B){return A>B}function Na(A,B){return null!=A&&Pa.call(A,B)}function Pl(A,B){return null!=A&&B in zo(A)}function dl(A,B,me){for(var _t=me?tl:Tl,on=A[0].length,Fn=A.length,Tr=Fn,Jr=Fr(Fn),hi=1/0,Oo=[];Tr--;){var Ao=A[Tr];Tr&&B&&(Ao=Ga(Ao,mi(B))),hi=Mi(Ao.length,hi),Jr[Tr]=!me&&(B||on>=120&&Ao.length>=120)?new Bc(Tr&&Ao):a}Ao=A[0];var Bo=-1,Bs=Jr[0];e:for(;++Bo<on&&Oo.length<hi;){var Ea=Ao[Bo],pl=B?B(Ea):Ea;if(Ea=me||0!==Ea?Ea:0,!(Bs?Qs(Bs,pl):_t(Oo,pl,me))){for(Tr=Fn;--Tr;){var ru=Jr[Tr];if(!(ru?Qs(ru,pl):_t(A[Tr],pl,me)))continue e}Bs&&Bs.push(pl),Oo.push(Ea)}}return Oo}function Qu(A,B,me){var _t=null==(A=sf(A,B=Gd(B,A)))?A:A[Ef(Cd(B))];return null==_t?a:ua(_t,A,me)}function ac(A){return pd(A)&&as(A)==sn}function yc(A,B,me,_t,on){return A===B||(null==A||null==B||!pd(A)&&!pd(B)?A!=A&&B!=B:function Gc(A,B,me,_t,on,Fn){var Tr=Ii(A),Jr=Ii(B),hi=Tr?fn:Mc(A),Oo=Jr?fn:Mc(B),Ao=(hi=hi==sn?Tt:hi)==Tt,Bo=(Oo=Oo==sn?Tt:Oo)==Tt,Bs=hi==Oo;if(Bs&&Xu(A)){if(!Xu(B))return!1;Tr=!0,Ao=!1}if(Bs&&!Ao)return Fn||(Fn=new Ne),Tr||$_(A)?up(A,B,me,_t,on,Fn):function Dh(A,B,me,_t,on,Fn,Tr){switch(me){case pr:if(A.byteLength!=B.byteLength||A.byteOffset!=B.byteOffset)return!1;A=A.buffer,B=B.buffer;case mr:return!(A.byteLength!=B.byteLength||!Fn(new Ri(A),new Ri(B)));case Kr:case Or:case ht:return St(+A,+B);case ir:return A.name==B.name&&A.message==B.message;case hr:case Wi:return A==B+"";case br:var Jr=kl;case Oi:if(Jr||(Jr=Q),A.size!=B.size&&!(_t&$))return!1;var Oo=Tr.get(A);if(Oo)return Oo==B;_t|=J,Tr.set(A,B);var Ao=up(Jr(A),Jr(B),_t,on,Fn,Tr);return Tr.delete(A),Ao;case so:if(xa)return xa.call(A)==xa.call(B)}return!1}(A,B,hi,me,_t,on,Fn);if(!(me&$)){var Ea=Ao&&Pa.call(A,"__wrapped__"),pl=Bo&&Pa.call(B,"__wrapped__");if(Ea||pl){var ru=Ea?A.value():A,_l=pl?B.value():B;return Fn||(Fn=new Ne),on(ru,_l,me,_t,Fn)}}return!!Bs&&(Fn||(Fn=new Ne),function jp(A,B,me,_t,on,Fn){var Tr=me&$,Jr=gf(A),hi=Jr.length;if(hi!=gf(B).length&&!Tr)return!1;for(var Bo=hi;Bo--;){var Bs=Jr[Bo];if(!(Tr?Bs in B:Pa.call(B,Bs)))return!1}var Ea=Fn.get(A),pl=Fn.get(B);if(Ea&&pl)return Ea==B&&pl==A;var ru=!0;Fn.set(A,B),Fn.set(B,A);for(var _l=Tr;++Bo<hi;){var vu=A[Bs=Jr[Bo]],Lu=B[Bs];if(_t)var qf=Tr?_t(Lu,vu,Bs,B,A,Fn):_t(vu,Lu,Bs,A,B,Fn);if(!(qf===a?vu===Lu||on(vu,Lu,me,_t,Fn):qf)){ru=!1;break}_l||(_l="constructor"==Bs)}if(ru&&!_l){var Md=A.constructor,Qp=B.constructor;Md!=Qp&&"constructor"in A&&"constructor"in B&&!("function"==typeof Md&&Md instanceof Md&&"function"==typeof Qp&&Qp instanceof Qp)&&(ru=!1)}return Fn.delete(A),Fn.delete(B),ru}(A,B,me,_t,on,Fn))}(A,B,me,_t,yc,on))}function wf(A,B,me,_t){var on=me.length,Fn=on,Tr=!_t;if(null==A)return!Fn;for(A=zo(A);on--;){var Jr=me[on];if(Tr&&Jr[2]?Jr[1]!==A[Jr[0]]:!(Jr[0]in A))return!1}for(;++on<Fn;){var hi=(Jr=me[on])[0],Oo=A[hi],Ao=Jr[1];if(Tr&&Jr[2]){if(Oo===a&&!(hi in A))return!1}else{var Bo=new Ne;if(_t)var Bs=_t(Oo,Ao,hi,A,B,Bo);if(!(Bs===a?yc(Ao,Oo,$|J,_t,Bo):Bs))return!1}}return!0}function Ql(A){return!(!wc(A)||function h_(A){return!!bu&&bu in A}(A))&&(Wd(A)?tn:Ni).test(Sf(A))}function $t(A){return"function"==typeof A?A:null==A?sd:"object"==typeof A?Ii(A)?ka(A[0],A[1]):Ka(A):z1(A)}function yn(A){if(!rf(A))return Er(A);var B=[];for(var me in zo(A))Pa.call(A,me)&&"constructor"!=me&&B.push(me);return B}function Gi(A,B){return A<B}function Ys(A,B){var me=-1,_t=vs(A)?Fr(A.length):[];return he(A,function(on,Fn,Tr){_t[++me]=B(on,Fn,Tr)}),_t}function Ka(A){var B=p_(A);return 1==B.length&&B[0][2]?x_(B[0][0],B[0][1]):function(me){return me===A||wf(me,A,B)}}function ka(A,B){return Zf(A)&&R_(B)?x_(Ef(A),B):function(me){var _t=v_(me,A);return _t===a&&_t===B?F1(me,A):yc(B,_t,$|J)}}function nu(A,B,me,_t,on){A!==B&&Cn(B,function(Fn,Tr){if(on||(on=new Ne),wc(Fn))!function rc(A,B,me,_t,on,Fn,Tr){var Jr=xp(A,me),hi=xp(B,me),Oo=Tr.get(hi);if(Oo)ya(A,me,Oo);else{var Ao=Fn?Fn(Jr,hi,me+"",A,B,Tr):a,Bo=Ao===a;if(Bo){var Bs=Ii(hi),Ea=!Bs&&Xu(hi),pl=!Bs&&!Ea&&$_(hi);Ao=hi,Bs||Ea||pl?Ii(Jr)?Ao=Jr:Ks(Jr)?Ao=Yd(Jr):Ea?(Bo=!1,Ao=Gp(hi,!0)):pl?(Bo=!1,Ao=q_(hi,!0)):Ao=[]:Tm(hi)||Br(hi)?(Ao=Jr,Br(Jr)?Ao=P1(Jr):(!wc(Jr)||Wd(Jr))&&(Ao=Vf(hi))):Bo=!1}Bo&&(Tr.set(hi,Ao),on(Ao,hi,_t,Fn,Tr),Tr.delete(hi)),ya(A,me,Ao)}}(A,B,Tr,me,nu,_t,on);else{var Jr=_t?_t(xp(A,Tr),Fn,Tr+"",A,B,on):a;Jr===a&&(Jr=Fn),ya(A,Tr,Jr)}},Lp)}function _c(A,B){var me=A.length;if(me)return lc(B+=B<0?me:0,me)?A[B]:a}function T_(A,B,me){B=B.length?Ga(B,function(Fn){return Ii(Fn)?function(Tr){return uo(Tr,1===Fn.length?Fn[0]:Fn)}:Fn}):[sd];var _t=-1;return B=Ga(B,mi(Zs())),function Je(Qn,Gr){var Fr=Qn.length;for(Qn.sort(Gr);Fr--;)Qn[Fr]=Qn[Fr].value;return Qn}(Ys(A,function(Fn,Tr,Jr){return{criteria:Ga(B,function(Oo){return Oo(Fn)}),index:++_t,value:Fn}}),function(Fn,Tr){return function vm(A,B,me){for(var _t=-1,on=A.criteria,Fn=B.criteria,Tr=on.length,Jr=me.length;++_t<Tr;){var hi=Th(on[_t],Fn[_t]);if(hi)return _t>=Jr?hi:hi*("desc"==me[_t]?-1:1)}return A.index-B.index}(Fn,Tr,me)})}function Sh(A,B,me){for(var _t=-1,on=B.length,Fn={};++_t<on;){var Tr=B[_t],Jr=uo(A,Tr);me(Jr,Tr)&&Ec(Fn,Gd(Tr,A),Jr)}return Fn}function Gf(A,B,me,_t){var on=_t?Al:ql,Fn=-1,Tr=B.length,Jr=A;for(A===B&&(B=Yd(B)),me&&(Jr=Ga(A,mi(me)));++Fn<Tr;)for(var hi=0,Oo=B[Fn],Ao=me?me(Oo):Oo;(hi=on(Jr,Ao,hi,_t))>-1;)Jr!==A&&Ms.call(Jr,hi,1),Ms.call(A,hi,1);return A}function Hp(A,B){for(var me=A?B.length:0,_t=me-1;me--;){var on=B[me];if(me==_t||on!==Fn){var Fn=on;lc(on)?Ms.call(A,on,1):M_(A,on)}}return A}function pf(A,B){return A+Ve(rs()*(B-A+1))}function op(A,B){var me="";if(!A||B<1||B>it)return me;do{B%2&&(me+=A),(B=Ve(B/2))&&(A+=A)}while(B);return me}function Za(A,B){return wp(Yc(A,B,sd),A+"")}function _f(A){return zi(hh(A))}function Wa(A,B){var me=hh(A);return pp(me,Ed(B,0,me.length))}function Ec(A,B,me,_t){if(!wc(A))return A;for(var on=-1,Fn=(B=Gd(B,A)).length,Tr=Fn-1,Jr=A;null!=Jr&&++on<Fn;){var hi=Ef(B[on]),Oo=me;if("__proto__"===hi||"constructor"===hi||"prototype"===hi)return A;if(on!=Tr){var Ao=Jr[hi];(Oo=_t?_t(Ao,hi,Jr):a)===a&&(Oo=wc(Ao)?Ao:lc(B[on+1])?[]:{})}Bl(Jr,hi,Oo),Jr=Jr[hi]}return A}var Up=fu?function(A,B){return fu.set(A,B),A}:sd,Zc=rn?function(A,B){return rn(A,"toString",{configurable:!0,enumerable:!1,value:Om(B),writable:!0})}:sd;function Sc(A){return pp(hh(A))}function Wc(A,B,me){var _t=-1,on=A.length;B<0&&(B=-B>on?0:on+B),(me=me>on?on:me)<0&&(me+=on),on=B>me?0:me-B>>>0,B>>>=0;for(var Fn=Fr(on);++_t<on;)Fn[_t]=A[_t+B];return Fn}function o_(A,B){var me;return he(A,function(_t,on,Fn){return!(me=B(_t,on,Fn))}),!!me}function Cp(A,B,me){var _t=0,on=null==A?_t:A.length;if("number"==typeof B&&B==B&&on<=At){for(;_t<on;){var Fn=_t+on>>>1,Tr=A[Fn];null!==Tr&&!Kf(Tr)&&(me?Tr<=B:Tr<B)?_t=Fn+1:on=Fn}return on}return Pf(A,B,sd,me)}function Pf(A,B,me,_t){var on=0,Fn=null==A?0:A.length;if(0===Fn)return 0;for(var Tr=(B=me(B))!=B,Jr=null===B,hi=Kf(B),Oo=B===a;on<Fn;){var Ao=Ve((on+Fn)/2),Bo=me(A[Ao]),Bs=Bo!==a,Ea=null===Bo,pl=Bo==Bo,ru=Kf(Bo);if(Tr)var _l=_t||pl;else _l=Oo?pl&&(_t||Bs):Jr?pl&&Bs&&(_t||!Ea):hi?pl&&Bs&&!Ea&&(_t||!ru):!Ea&&!ru&&(_t?Bo<=B:Bo<B);_l?on=Ao+1:Fn=Ao}return Mi(Fn,Rn)}function Bp(A,B){for(var me=-1,_t=A.length,on=0,Fn=[];++me<_t;){var Tr=A[me],Jr=B?B(Tr):Tr;if(!me||!St(Jr,hi)){var hi=Jr;Fn[on++]=0===Tr?0:Tr}}return Fn}function W_(A){return"number"==typeof A?A:Kf(A)?cn:+A}function Sd(A){if("string"==typeof A)return A;if(Ii(A))return Ga(A,Sd)+"";if(Kf(A))return Tu?Tu.call(A):"";var B=A+"";return"0"==B&&1/A==-Pt?"-0":B}function Yf(A,B,me){var _t=-1,on=Tl,Fn=A.length,Tr=!0,Jr=[],hi=Jr;if(me)Tr=!1,on=tl;else if(Fn>=u){var Oo=B?null:th(A);if(Oo)return Q(Oo);Tr=!1,on=Qs,hi=new Bc}else hi=B?[]:Jr;e:for(;++_t<Fn;){var Ao=A[_t],Bo=B?B(Ao):Ao;if(Ao=me||0!==Ao?Ao:0,Tr&&Bo==Bo){for(var Bs=hi.length;Bs--;)if(hi[Bs]===Bo)continue e;B&&hi.push(Bo),Jr.push(Ao)}else on(hi,Bo,me)||(hi!==Jr&&hi.push(Bo),Jr.push(Ao))}return Jr}function M_(A,B){return null==(A=sf(A,B=Gd(B,A)))||delete A[Ef(Cd(B))]}function bd(A,B,me,_t){return Ec(A,B,me(uo(A,B)),_t)}function dd(A,B,me,_t){for(var on=A.length,Fn=_t?on:-1;(_t?Fn--:++Fn<on)&&B(A[Fn],Fn,A););return me?Wc(A,_t?0:Fn,_t?Fn+1:on):Wc(A,_t?Fn+1:0,_t?on:Fn)}function td(A,B){var me=A;return me instanceof Os&&(me=me.value()),cu(B,function(_t,on){return on.func.apply(on.thisArg,dc([_t],on.args))},me)}function Rd(A,B,me){var _t=A.length;if(_t<2)return _t?Yf(A[0]):[];for(var on=-1,Fn=Fr(_t);++on<_t;)for(var Tr=A[on],Jr=-1;++Jr<_t;)Jr!=on&&(Fn[on]=ne(Fn[on]||Tr,A[Jr],B,me));return Yf(It(Fn,1),B,me)}function Jc(A,B,me){for(var _t=-1,on=A.length,Fn=B.length,Tr={};++_t<on;)me(Tr,A[_t],_t<Fn?B[_t]:a);return Tr}function sp(A){return Ks(A)?A:[]}function s_(A){return"function"==typeof A?A:sd}function Gd(A,B){return Ii(A)?A:Zf(A,B)?[A]:Xh(Ac(A))}var xd=Za;function bc(A,B,me){var _t=A.length;return me=me===a?_t:me,!B&&me>=_t?A:Wc(A,B,me)}var J_=Jl||function(A){return yl.clearTimeout(A)};function Gp(A,B){if(B)return A.slice();var me=A.length,_t=fs?fs(me):new A.constructor(me);return A.copy(_t),_t}function a_(A){var B=new A.constructor(A.byteLength);return new Ri(B).set(new Ri(A)),B}function q_(A,B){var me=B?a_(A.buffer):A.buffer;return new A.constructor(me,A.byteOffset,A.length)}function Th(A,B){if(A!==B){var me=A!==a,_t=null===A,on=A==A,Fn=Kf(A),Tr=B!==a,Jr=null===B,hi=B==B,Oo=Kf(B);if(!Jr&&!Oo&&!Fn&&A>B||Fn&&Tr&&hi&&!Jr&&!Oo||_t&&Tr&&hi||!me&&hi||!on)return 1;if(!_t&&!Fn&&!Oo&&A<B||Oo&&me&&on&&!_t&&!Fn||Jr&&me&&on||!Tr&&on||!hi)return-1}return 0}function O_(A,B,me,_t){for(var on=-1,Fn=A.length,Tr=me.length,Jr=-1,hi=B.length,Oo=Nr(Fn-Tr,0),Ao=Fr(hi+Oo),Bo=!_t;++Jr<hi;)Ao[Jr]=B[Jr];for(;++on<Tr;)(Bo||on<Fn)&&(Ao[me[on]]=A[on]);for(;Oo--;)Ao[Jr++]=A[on++];return Ao}function Ch(A,B,me,_t){for(var on=-1,Fn=A.length,Tr=-1,Jr=me.length,hi=-1,Oo=B.length,Ao=Nr(Fn-Jr,0),Bo=Fr(Ao+Oo),Bs=!_t;++on<Ao;)Bo[on]=A[on];for(var Ea=on;++hi<Oo;)Bo[Ea+hi]=B[hi];for(;++Tr<Jr;)(Bs||on<Fn)&&(Bo[Ea+me[Tr]]=A[on++]);return Bo}function Yd(A,B){var me=-1,_t=A.length;for(B||(B=Fr(_t));++me<_t;)B[me]=A[me];return B}function Nf(A,B,me,_t){var on=!me;me||(me={});for(var Fn=-1,Tr=B.length;++Fn<Tr;){var Jr=B[Fn],hi=_t?_t(me[Jr],A[Jr],Jr,me,A):a;hi===a&&(hi=A[Jr]),on?tc(me,Jr,hi):Bl(me,Jr,hi)}return me}function lp(A,B){return function(me,_t){var on=Ii(me)?El:pc,Fn=B?B():{};return on(me,A,Zs(_t,2),Fn)}}function Mp(A){return Za(function(B,me){var _t=-1,on=me.length,Fn=on>1?me[on-1]:a,Tr=on>2?me[2]:a;for(Fn=A.length>3&&"function"==typeof Fn?(on--,Fn):a,Tr&&Ku(me[0],me[1],Tr)&&(Fn=on<3?a:Fn,on=1),B=zo(B);++_t<on;){var Jr=me[_t];Jr&&A(B,Jr,_t,Fn)}return B})}function hf(A,B){return function(me,_t){if(null==me)return me;if(!vs(me))return A(me,_t);for(var on=me.length,Fn=B?on:-1,Tr=zo(me);(B?Fn--:++Fn<on)&&!1!==_t(Tr[Fn],Fn,Tr););return me}}function l_(A){return function(B,me,_t){for(var on=-1,Fn=zo(B),Tr=_t(B),Jr=Tr.length;Jr--;){var hi=Tr[A?Jr:++on];if(!1===me(Fn[hi],hi,Fn))break}return B}}function mf(A){return function(B){var me=Fc(B=Ac(B))?An(B):a,_t=me?me[0]:B.charAt(0),on=me?bc(me,1).join(""):B.slice(1);return _t[A]()+on}}function jf(A){return function(B){return cu(jv(kv(B).replace(ie,"")),A,"")}}function jd(A){return function(){var B=arguments;switch(B.length){case 0:return new A;case 1:return new A(B[0]);case 2:return new A(B[0],B[1]);case 3:return new A(B[0],B[1],B[2]);case 4:return new A(B[0],B[1],B[2],B[3]);case 5:return new A(B[0],B[1],B[2],B[3],B[4]);case 6:return new A(B[0],B[1],B[2],B[3],B[4],B[5]);case 7:return new A(B[0],B[1],B[2],B[3],B[4],B[5],B[6])}var me=Pu(A.prototype),_t=A.apply(me,B);return wc(_t)?_t:me}}function Qh(A){return function(B,me,_t){var on=zo(B);if(!vs(B)){var Fn=Zs(me,3);B=uf(B),me=function(Jr){return Fn(on[Jr],Jr,on)}}var Tr=A(B,me,_t);return Tr>-1?on[Fn?B[Tr]:Tr]:a}}function nf(A){return Td(function(B){var me=B.length,_t=me,on=Va.prototype.thru;for(A&&B.reverse();_t--;){var Fn=B[_t];if("function"!=typeof Fn)throw new Uu(f);if(on&&!Tr&&"wrapper"==fd(Fn))var Tr=new Va([],!0)}for(_t=Tr?_t:me;++_t<me;){var Jr=fd(Fn=B[_t]),hi="wrapper"==Jr?Ta(Fn):a;Tr=hi&&Wf(hi[0])&&hi[1]==(Te|V|se|$e)&&!hi[4].length&&1==hi[9]?Tr[fd(hi[0])].apply(Tr,hi[3]):1==Fn.length&&Wf(Fn)?Tr[Jr]():Tr.thru(Fn)}return function(){var Oo=arguments,Ao=Oo[0];if(Tr&&1==Oo.length&&Ii(Ao))return Tr.plant(Ao).value();for(var Bo=0,Bs=me?B[Bo].apply(this,Oo):Ao;++Bo<me;)Bs=B[Bo].call(this,Bs);return Bs}})}function Op(A,B,me,_t,on,Fn,Tr,Jr,hi,Oo){var Ao=B&Te,Bo=B&F,Bs=B&X,Ea=B&(V|ce),pl=B&ge,ru=Bs?a:jd(A);return function _l(){for(var vu=arguments.length,Lu=Fr(vu),qf=vu;qf--;)Lu[qf]=arguments[qf];if(Ea)var Md=Tc(_l),Qp=function sc(Qn,Gr){for(var Fr=Qn.length,Ui=0;Fr--;)Qn[Fr]===Gr&&++Ui;return Ui}(Lu,Md);if(_t&&(Lu=O_(Lu,_t,on,Ea)),Fn&&(Lu=Ch(Lu,Fn,Tr,Ea)),vu-=Qp,Ea&&vu<Oo){var Id=ja(Lu,Md);return eh(A,B,Op,_l.placeholder,me,Lu,Id,Jr,hi,Oo-vu)}var Kp=Bo?me:this,gp=Bs?Kp[A]:A;return vu=Lu.length,Jr?Lu=function fp(A,B){for(var me=A.length,_t=Mi(B.length,me),on=Yd(A);_t--;){var Fn=B[_t];A[_t]=lc(Fn,me)?on[Fn]:a}return A}(Lu,Jr):pl&&vu>1&&Lu.reverse(),Ao&&hi<vu&&(Lu.length=hi),this&&this!==yl&&this instanceof _l&&(gp=ru||jd(gp)),gp.apply(Kp,Lu)}}function Oh(A,B){return function(me,_t){return function Nl(A,B,me,_t){return sr(A,function(on,Fn,Tr){B(_t,me(on),Fn,Tr)}),_t}(me,A,B(_t),{})}}function Ap(A,B){return function(me,_t){var on;if(me===a&&_t===a)return B;if(me!==a&&(on=me),_t!==a){if(on===a)return _t;"string"==typeof me||"string"==typeof _t?(me=Sd(me),_t=Sd(_t)):(me=W_(me),_t=W_(_t)),on=A(me,_t)}return on}}function A_(A){return Td(function(B){return B=Ga(B,mi(Zs())),Za(function(me){var _t=this;return A(B,function(on){return ua(on,_t,me)})})})}function Dp(A,B){var me=(B=B===a?" ":Sd(B)).length;if(me<2)return me?op(B,A):B;var _t=op(B,De(A/Gt(B)));return Fc(B)?bc(An(_t),0,A).join(""):_t.slice(0,A)}function If(A){return function(B,me,_t){return _t&&"number"!=typeof _t&&Ku(B,me,_t)&&(me=_t=a),B=Bh(B),me===a?(me=B,B=0):me=Bh(me),function C_(A,B,me,_t){for(var on=-1,Fn=Nr(De((B-A)/(me||1)),0),Tr=Fr(Fn);Fn--;)Tr[_t?Fn:++on]=A,A+=me;return Tr}(B,me,_t=_t===a?B<me?1:-1:Bh(_t),A)}}function Yp(A){return function(B,me){return"string"==typeof B&&"string"==typeof me||(B=g_(B),me=g_(me)),A(B,me)}}function eh(A,B,me,_t,on,Fn,Tr,Jr,hi,Oo){var Ao=B&V;B|=Ao?se:fe,(B&=~(Ao?fe:se))&de||(B&=~(F|X));var ru=[A,B,on,Ao?Fn:a,Ao?Tr:a,Ao?a:Fn,Ao?a:Tr,Jr,hi,Oo],_l=me.apply(a,ru);return Wf(A)&&wd(_l,ru),_l.placeholder=_t,Rh(_l,A,B)}function c_(A){var B=ca[A];return function(me,_t){if(me=g_(me),(_t=null==_t?0:Mi(tu(_t),292))&&Qt(me)){var on=(Ac(me)+"e").split("e");return+((on=(Ac(B(on[0]+"e"+(+on[1]+_t)))+"e").split("e"))[0]+"e"+(+on[1]-_t))}return B(me)}}var th=mu&&1/Q(new mu([,-0]))[1]==Pt?function(A){return new mu(A)}:cm;function d_(A){return function(B){var me=Mc(B);return me==br?kl(B):me==Oi?function Ee(Qn){var Gr=-1,Fr=Array(Qn.size);return Qn.forEach(function(Ui){Fr[++Gr]=[Ui,Ui]}),Fr}(B):function To(Qn,Gr){return Ga(Gr,function(Fr){return[Fr,Qn[Fr]]})}(B,A(B))}}function zd(A,B,me,_t,on,Fn,Tr,Jr){var hi=B&X;if(!hi&&"function"!=typeof A)throw new Uu(f);var Oo=_t?_t.length:0;if(Oo||(B&=~(se|fe),_t=on=a),Tr=Tr===a?Tr:Nr(tu(Tr),0),Jr=Jr===a?Jr:tu(Jr),Oo-=on?on.length:0,B&fe){var Ao=_t,Bo=on;_t=on=a}var Bs=hi?a:Ta(A),Ea=[A,B,me,_t,on,Ao,Bo,Fn,Tr,Jr];if(Bs&&function oh(A,B){var me=A[1],_t=B[1],on=me|_t;if(!(on<(F|X|Te))&&!(_t==Te&&me==V||_t==Te&&me==$e&&A[7].length<=B[8]||_t==(Te|$e)&&B[7].length<=B[8]&&me==V))return A;_t&F&&(A[2]=B[2],on|=me&F?0:de);var Jr=B[3];if(Jr){var hi=A[3];A[3]=hi?O_(hi,Jr,B[4]):Jr,A[4]=hi?ja(A[3],w):B[4]}(Jr=B[5])&&(A[5]=(hi=A[5])?Ch(hi,Jr,B[6]):Jr,A[6]=hi?ja(A[5],w):B[6]),(Jr=B[7])&&(A[7]=Jr),_t&Te&&(A[8]=null==A[8]?B[8]:Mi(A[8],B[8])),null==A[9]&&(A[9]=B[9]),A[0]=B[0],A[1]=on}(Ea,Bs),A=Ea[0],B=Ea[1],me=Ea[2],_t=Ea[3],on=Ea[4],!(Jr=Ea[9]=Ea[9]===a?hi?0:A.length:Nr(Ea[9]-Oo,0))&&B&(V|ce)&&(B&=~(V|ce)),B&&B!=F)pl=B==V||B==ce?function Nm(A,B,me){var _t=jd(A);return function on(){for(var Fn=arguments.length,Tr=Fr(Fn),Jr=Fn,hi=Tc(on);Jr--;)Tr[Jr]=arguments[Jr];var Oo=Fn<3&&Tr[0]!==hi&&Tr[Fn-1]!==hi?[]:ja(Tr,hi);return(Fn-=Oo.length)<me?eh(A,B,Op,on.placeholder,a,Tr,Oo,a,a,me-Fn):ua(this&&this!==yl&&this instanceof on?_t:A,this,Tr)}}(A,B,Jr):B!=se&&B!=(F|se)||on.length?Op.apply(a,Ea):function Ah(A,B,me,_t){var on=B&F,Fn=jd(A);return function Tr(){for(var Jr=-1,hi=arguments.length,Oo=-1,Ao=_t.length,Bo=Fr(Ao+hi),Bs=this&&this!==yl&&this instanceof Tr?Fn:A;++Oo<Ao;)Bo[Oo]=_t[Oo];for(;hi--;)Bo[Oo++]=arguments[++Jr];return ua(Bs,on?me:this,Bo)}}(A,B,me,_t);else var pl=function u_(A,B,me){var _t=B&F,on=jd(A);return function Fn(){return(this&&this!==yl&&this instanceof Fn?on:A).apply(_t?me:this,arguments)}}(A,B,me);return Rh((Bs?Up:wd)(pl,Ea),A,B)}function nh(A,B,me,_t){return A===a||St(A,kc[me])&&!Pa.call(_t,me)?B:A}function f_(A,B,me,_t,on,Fn){return wc(A)&&wc(B)&&(Fn.set(B,A),nu(A,B,a,f_,Fn),Fn.delete(B)),A}function Kh(A){return Tm(A)?a:A}function up(A,B,me,_t,on,Fn){var Tr=me&$,Jr=A.length,hi=B.length;if(Jr!=hi&&!(Tr&&hi>Jr))return!1;var Oo=Fn.get(A),Ao=Fn.get(B);if(Oo&&Ao)return Oo==B&&Ao==A;var Bo=-1,Bs=!0,Ea=me&J?new Bc:a;for(Fn.set(A,B),Fn.set(B,A);++Bo<Jr;){var pl=A[Bo],ru=B[Bo];if(_t)var _l=Tr?_t(ru,pl,Bo,B,A,Fn):_t(pl,ru,Bo,A,B,Fn);if(_l!==a){if(_l)continue;Bs=!1;break}if(Ea){if(!Ru(B,function(vu,Lu){if(!Qs(Ea,Lu)&&(pl===vu||on(pl,vu,me,_t,Fn)))return Ea.push(Lu)})){Bs=!1;break}}else if(pl!==ru&&!on(pl,ru,me,_t,Fn)){Bs=!1;break}}return Fn.delete(A),Fn.delete(B),Bs}function Td(A){return wp(Yc(A,a,Ph),A+"")}function gf(A){return As(A,uf,yf)}function zp(A){return As(A,Lp,cp)}var Ta=fu?function(A){return fu.get(A)}:cm;function fd(A){for(var B=A.name+"",me=qc[B],_t=Pa.call(qc,B)?me.length:0;_t--;){var on=me[_t],Fn=on.func;if(null==Fn||Fn==A)return on.name}return B}function Tc(A){return(Pa.call(En,"placeholder")?En:A).placeholder}function Zs(){var A=En.iteratee||Dm;return A=A===Dm?$t:A,arguments.length?A(arguments[0],arguments[1]):A}function vf(A,B){var me=A.__data__;return function Vd(A){var B=typeof A;return"string"==B||"number"==B||"symbol"==B||"boolean"==B?"__proto__"!==A:null===A}(B)?me["string"==typeof B?"string":"hash"]:me.map}function p_(A){for(var B=uf(A),me=B.length;me--;){var _t=B[me],on=A[_t];B[me]=[_t,on,R_(on)]}return B}function Cc(A,B){var me=function ec(Qn,Gr){return null==Qn?a:Qn[Gr]}(A,B);return Ql(me)?me:a}var yf=st?function(A){return null==A?[]:(A=zo(A),Ba(st(A),function(B){return Vs.call(A,B)}))}:Wg,cp=st?function(A){for(var B=[];A;)dc(B,yf(A)),A=Fs(A);return B}:Wg,Mc=as;function Lf(A,B,me){for(var _t=-1,on=(B=Gd(B,A)).length,Fn=!1;++_t<on;){var Tr=Ef(B[_t]);if(!(Fn=null!=A&&me(A,Tr)))break;A=A[Tr]}return Fn||++_t!=on?Fn:!!(on=null==A?0:A.length)&&mp(on)&&lc(Tr,on)&&(Ii(A)||Br(A))}function Vf(A){return"function"!=typeof A.constructor||rf(A)?{}:Pu(Fs(A))}function ih(A){return Ii(A)||Br(A)||!!(wl&&A&&A[wl])}function lc(A,B){var me=typeof A;return!!(B=B??it)&&("number"==me||"symbol"!=me&&Vr.test(A))&&A>-1&&A%1==0&&A<B}function Ku(A,B,me){if(!wc(me))return!1;var _t=typeof B;return!!("number"==_t?vs(me)&&lc(B,me.length):"string"==_t&&B in me)&&St(me[B],A)}function Zf(A,B){if(Ii(A))return!1;var me=typeof A;return!("number"!=me&&"symbol"!=me&&"boolean"!=me&&null!=A&&!Kf(A))||Pr.test(A)||!_r.test(A)||null!=B&&A in zo(B)}function Wf(A){var B=fd(A),me=En[B];if("function"!=typeof me||!(B in Os.prototype))return!1;if(A===me)return!0;var _t=Ta(me);return!!_t&&A===_t[0]}(Ps&&Mc(new Ps(new ArrayBuffer(1)))!=pr||Ul&&Mc(new Ul)!=br||eu&&Mc(eu.resolve())!=wn||mu&&Mc(new mu)!=Oi||wu&&Mc(new wu)!=Ei)&&(Mc=function(A){var B=as(A),me=B==Tt?A.constructor:a,_t=me?Sf(me):"";if(_t)switch(_t){case $c:return pr;case pu:return br;case vc:return wn;case La:return Oi;case al:return Ei}return B});var kf=yi?Wd:Jg;function rf(A){var B=A&&A.constructor;return A===("function"==typeof B&&B.prototype||kc)}function R_(A){return A==A&&!wc(A)}function x_(A,B){return function(me){return null!=me&&me[A]===B&&(B!==a||A in zo(me))}}function Yc(A,B,me){return B=Nr(B===a?A.length-1:B,0),function(){for(var _t=arguments,on=-1,Fn=Nr(_t.length-B,0),Tr=Fr(Fn);++on<Fn;)Tr[on]=_t[B+on];on=-1;for(var Jr=Fr(B+1);++on<B;)Jr[on]=_t[on];return Jr[B]=me(Tr),ua(A,this,Jr)}}function sf(A,B){return B.length<2?A:uo(A,Wc(B,0,-1))}function xp(A,B){if(("constructor"!==B||"function"!=typeof A[B])&&"__proto__"!=B)return A[B]}var wd=sh(Up),w_=ae||function(A,B){return yl.setTimeout(A,B)},wp=sh(Zc);function Rh(A,B,me){var _t=B+"";return wp(A,function rh(A,B){var me=B.length;if(!me)return A;var _t=me-1;return B[_t]=(me>1?"& ":"")+B[_t],B=B.join(me>2?", ":" "),A.replace(Ge,"{\n/* [wrapped with "+B+"] */\n")}(_t,function Vp(A,B){return uu(qt,function(me){var _t="_."+me[0];B&me[1]&&!Tl(A,_t)&&A.push(_t)}),A.sort()}(function __(A){var B=A.match(Ot);return B?B[1].split(mn):[]}(_t),me)))}function sh(A){var B=0,me=0;return function(){var _t=ao(),on=qe-(_t-me);if(me=_t,on>0){if(++B>=ct)return arguments[0]}else B=0;return A.apply(a,arguments)}}function pp(A,B){var me=-1,_t=A.length,on=_t-1;for(B=B===a?_t:B;++me<B;){var Fn=pf(me,on),Tr=A[Fn];A[Fn]=A[me],A[me]=Tr}return A.length=B,A}var Xh=function Jf(A){var B=am(A,function(_t){return 500===me.size&&me.clear(),_t}),me=B.cache;return B}(function(A){var B=[];return 46===A.charCodeAt(0)&&B.push(""),A.replace(tr,function(me,_t,on,Fn){B.push(on?Fn.replace(Ci,"$1"):_t||me)}),B});function Ef(A){if("string"==typeof A||Kf(A))return A;var B=A+"";return"0"==B&&1/A==-Pt?"-0":B}function Sf(A){if(null!=A){try{return Wl.call(A)}catch{}try{return A+""}catch{}}return""}function xh(A){if(A instanceof Os)return A.clone();var B=new Va(A.__wrapped__,A.__chain__);return B.__actions__=Yd(A.__actions__),B.__index__=A.__index__,B.__values__=A.__values__,B}var N_=Za(function(A,B){return Ks(A)?ne(A,It(B,1,Ks,!0)):[]}),wh=Za(function(A,B){var me=Cd(B);return Ks(me)&&(me=a),Ks(A)?ne(A,It(B,1,Ks,!0),Zs(me,2)):[]}),I_=Za(function(A,B){var me=Cd(B);return Ks(me)&&(me=a),Ks(A)?ne(A,It(B,1,Ks,!0),a,me):[]});function F_(A,B,me){var _t=null==A?0:A.length;if(!_t)return-1;var on=null==me?0:tu(me);return on<0&&(on=Nr(_t+on,0)),gc(A,Zs(B,3),on)}function tm(A,B,me){var _t=null==A?0:A.length;if(!_t)return-1;var on=_t-1;return me!==a&&(on=tu(me),on=me<0?Nr(_t+on,0):Mi(on,_t-1)),gc(A,Zs(B,3),on,!0)}function Ph(A){return null!=A&&A.length?It(A,1):[]}function im(A){return A&&A.length?A[0]:a}var uh=Za(function(A){var B=Ga(A,sp);return B.length&&B[0]===A[0]?dl(B):[]}),ym=Za(function(A){var B=Cd(A),me=Ga(A,sp);return B===Cd(me)?B=a:me.pop(),me.length&&me[0]===A[0]?dl(me,Zs(B,2)):[]}),Np=Za(function(A){var B=Cd(A),me=Ga(A,sp);return(B="function"==typeof B?B:a)&&me.pop(),me.length&&me[0]===A[0]?dl(me,a,B):[]});function Cd(A){var B=null==A?0:A.length;return B?A[B-1]:a}var Ih=Za(Fh);function Fh(A,B){return A&&A.length&&B&&B.length?Gf(A,B):A}var I=Td(function(A,B){var me=null==A?0:A.length,_t=od(A,B);return Hp(A,Ga(B,function(on){return lc(on,me)?+on:on}).sort(Th)),_t});function S(A){return null==A?A:ys.call(A)}var Ke=Za(function(A){return Yf(It(A,1,Ks,!0))}),xt=Za(function(A){var B=Cd(A);return Ks(B)&&(B=a),Yf(It(A,1,Ks,!0),Zs(B,2))}),_n=Za(function(A){var B=Cd(A);return B="function"==typeof B?B:a,Yf(It(A,1,Ks,!0),a,B)});function Uo(A){if(!A||!A.length)return[];var B=0;return A=Ba(A,function(me){if(Ks(me))return B=Nr(me.length,B),!0}),fi(B,function(me){return Ga(A,Vc(me))})}function Ds(A,B){if(!A||!A.length)return[];var me=Uo(A);return null==B?me:Ga(me,function(_t){return ua(B,a,_t)})}var Qi=Za(function(A,B){return Ks(A)?ne(A,B):[]}),Ls=Za(function(A){return Rd(Ba(A,Ks))}),ia=Za(function(A){var B=Cd(A);return Ks(B)&&(B=a),Rd(Ba(A,Ks),Zs(B,2))}),oa=Za(function(A){var B=Cd(A);return B="function"==typeof B?B:a,Rd(Ba(A,Ks),a,B)}),di=Za(Uo),no=Za(function(A){var B=A.length,me=B>1?A[B-1]:a;return me="function"==typeof me?(A.pop(),me):a,Ds(A,me)});function vo(A){var B=En(A);return B.__chain__=!0,B}function Us(A,B){return B(A)}var ll=Td(function(A){var B=A.length,me=B?A[0]:0,_t=this.__wrapped__,on=function(Fn){return od(Fn,A)};return!(B>1||this.__actions__.length)&&_t instanceof Os&&lc(me)?((_t=_t.slice(me,+me+(B?1:0))).__actions__.push({func:Us,args:[on],thisArg:a}),new Va(_t,this.__chain__).thru(function(Fn){return B&&!Fn.length&&Fn.push(a),Fn})):this.thru(on)}),kh=lp(function(A,B,me){Pa.call(A,me)?++A[me]:tc(A,me,1)}),fg=Qh(F_),Lm=Qh(tm);function Qf(A,B){return(Ii(A)?uu:he)(A,Zs(B,3))}function sm(A,B){return(Ii(A)?Eu:Me)(A,Zs(B,3))}var nd=lp(function(A,B,me){Pa.call(A,me)?A[me].push(B):tc(A,me,[B])}),hc=Za(function(A,B,me){var _t=-1,on="function"==typeof B,Fn=vs(A)?Fr(A.length):[];return he(A,function(Tr){Fn[++_t]=on?ua(B,Tr,me):Qu(Tr,B,me)}),Fn}),_g=lp(function(A,B,me){tc(A,me,B)});function hg(A,B){return(Ii(A)?Ga:Ys)(A,Zs(B,3))}var Es=lp(function(A,B,me){A[me?0:1].push(B)},function(){return[[],[]]}),S1=Za(function(A,B){if(null==A)return[];var me=B.length;return me>1&&Ku(A,B[0],B[1])?B=[]:me>2&&Ku(B[0],B[1],B[2])&&(B=[B[0]]),T_(A,It(B,1),[])}),Hm=le||function(){return yl.Date.now()};function mg(A,B,me){return B=me?a:B,zd(A,Te,a,a,a,a,B=A&&null==B?A.length:B)}function kg(A,B){var me;if("function"!=typeof B)throw new Uu(f);return A=tu(A),function(){return--A>0&&(me=B.apply(this,arguments)),A<=1&&(B=a),me}}var Em=Za(function(A,B,me){var _t=F;if(me.length){var on=ja(me,Tc(Em));_t|=se}return zd(A,_t,B,me,on)}),$g=Za(function(A,B,me){var _t=F|X;if(me.length){var on=ja(me,Tc($g));_t|=se}return zd(B,_t,A,me,on)});function vg(A,B,me){var _t,on,Fn,Tr,Jr,hi,Oo=0,Ao=!1,Bo=!1,Bs=!0;if("function"!=typeof A)throw new Uu(f);function Ea(Id){var Kp=_t,gp=on;return _t=on=a,Oo=Id,Tr=A.apply(gp,Kp)}function _l(Id){var Kp=Id-hi;return hi===a||Kp>=B||Kp<0||Bo&&Id-Oo>=Fn}function vu(){var Id=Hm();if(_l(Id))return Lu(Id);Jr=w_(vu,function ru(Id){var t1=B-(Id-hi);return Bo?Mi(t1,Fn-(Id-Oo)):t1}(Id))}function Lu(Id){return Jr=a,Bs&&_t?Ea(Id):(_t=on=a,Tr)}function Qp(){var Id=Hm(),Kp=_l(Id);if(_t=arguments,on=this,hi=Id,Kp){if(Jr===a)return function pl(Id){return Oo=Id,Jr=w_(vu,B),Ao?Ea(Id):Tr}(hi);if(Bo)return J_(Jr),Jr=w_(vu,B),Ea(hi)}return Jr===a&&(Jr=w_(vu,B)),Tr}return B=g_(B)||0,wc(me)&&(Ao=!!me.leading,Fn=(Bo="maxWait"in me)?Nr(g_(me.maxWait)||0,B):Fn,Bs="trailing"in me?!!me.trailing:Bs),Qp.cancel=function qf(){Jr!==a&&J_(Jr),Oo=0,_t=hi=on=Jr=a},Qp.flush=function Md(){return Jr===a?Tr:Lu(Hm())},Qp}var Hg=Za(function(A,B){return k(A,1,B)}),T1=Za(function(A,B,me){return k(A,g_(B)||0,me)});function am(A,B){if("function"!=typeof A||null!=B&&"function"!=typeof B)throw new Uu(f);var me=function(){var _t=arguments,on=B?B.apply(this,_t):_t[0],Fn=me.cache;if(Fn.has(on))return Fn.get(on);var Tr=A.apply(this,_t);return me.cache=Fn.set(on,Tr)||Fn,Tr};return me.cache=new(am.Cache||gd),me}function $h(A){if("function"!=typeof A)throw new Uu(f);return function(){var B=arguments;switch(B.length){case 0:return!A.call(this);case 1:return!A.call(this,B[0]);case 2:return!A.call(this,B[0],B[1]);case 3:return!A.call(this,B[0],B[1],B[2])}return!A.apply(this,B)}}am.Cache=gd;var lm=xd(function(A,B){var me=(B=1==B.length&&Ii(B[0])?Ga(B[0],mi(Zs())):Ga(It(B,1),mi(Zs()))).length;return Za(function(_t){for(var on=-1,Fn=Mi(_t.length,me);++on<Fn;)_t[on]=B[on].call(this,_t[on]);return ua(A,this,_t)})}),yg=Za(function(A,B){var me=ja(B,Tc(yg));return zd(A,se,a,B,me)}),M1=Za(function(A,B){var me=ja(B,Tc(M1));return zd(A,fe,a,B,me)}),Eg=Td(function(A,B){return zd(A,$e,a,a,a,B)});function St(A,B){return A===B||A!=A&&B!=B}var Kt=Yp(ma),ur=Yp(function(A,B){return A>=B}),Br=ac(function(){return arguments}())?ac:function(A){return pd(A)&&Pa.call(A,"callee")&&!Vs.call(A,"callee")},Ii=Fr.isArray,ms=oc?mi(oc):function wa(A){return pd(A)&&as(A)==mr};function vs(A){return null!=A&&mp(A.length)&&!Wd(A)}function Ks(A){return pd(A)&&vs(A)}var Xu=zt||Jg,Fu=Xl?mi(Xl):function nc(A){return pd(A)&&as(A)==Or};function Hh(A){if(!pd(A))return!1;var B=as(A);return B==ir||B==Lr||"string"==typeof A.message&&"string"==typeof A.name&&!Tm(A)}function Wd(A){if(!wc(A))return!1;var B=as(A);return B==Qr||B==jr||B==xn||B==jn}function Nd(A){return"number"==typeof A&&A==tu(A)}function mp(A){return"number"==typeof A&&A>-1&&A%1==0&&A<=it}function wc(A){var B=typeof A;return null!=A&&("object"==B||"function"==B)}function pd(A){return null!=A&&"object"==typeof A}var Sm=Ic?mi(Ic):function xc(A){return pd(A)&&Mc(A)==br};function bm(A){return"number"==typeof A||pd(A)&&as(A)==ht}function Tm(A){if(!pd(A)||as(A)!=Tt)return!1;var B=Fs(A);if(null===B)return!0;var me=Pa.call(B,"constructor")&&B.constructor;return"function"==typeof me&&me instanceof me&&Wl.call(me)==Nt}var Cm=Gs?mi(Gs):function ee(A){return pd(A)&&as(A)==hr},Tg=ku?mi(ku):function Ce(A){return pd(A)&&Mc(A)==Oi};function Mm(A){return"string"==typeof A||!Ii(A)&&pd(A)&&as(A)==Wi}function Kf(A){return"symbol"==typeof A||pd(A)&&as(A)==so}var $_=zu?mi(zu):function vt(A){return pd(A)&&mp(A.length)&&!!ds[as(A)]},ey=Yp(Gi),ty=Yp(function(A,B){return A<=B});function x1(A){if(!A)return[];if(vs(A))return Mm(A)?An(A):Yd(A);if(Ho&&A[Ho])return function Lc(Qn){for(var Gr,Fr=[];!(Gr=Qn.next()).done;)Fr.push(Gr.value);return Fr}(A[Ho]());var B=Mc(A);return(B==br?kl:B==Oi?Q:hh)(A)}function Bh(A){return A?(A=g_(A))===Pt||A===-Pt?(A<0?-1:1)*Xt:A==A?A:0:0===A?A:0}function tu(A){var B=Bh(A),me=B%1;return B==B?me?B-me:B:0}function w1(A){return A?Ed(tu(A),0,pn):0}function g_(A){if("number"==typeof A)return A;if(Kf(A))return cn;if(wc(A)){var B="function"==typeof A.valueOf?A.valueOf():A;A=wc(B)?B+"":B}if("string"!=typeof A)return 0===A?A:+A;A=Ya(A);var me=dr.test(A);return me||ti.test(A)?qu(A.slice(2),me?2:8):_s.test(A)?cn:+A}function P1(A){return Nf(A,Lp(A))}function Ac(A){return null==A?"":Sd(A)}var ny=Mp(function(A,B){if(rf(B)||vs(B))Nf(B,uf(B),A);else for(var me in B)Pa.call(B,me)&&Bl(A,me,B[me])}),ry=Mp(function(A,B){Nf(B,Lp(B),A)}),Bm=Mp(function(A,B,me,_t){Nf(B,Lp(B),A,_t)}),xv=Mp(function(A,B,me,_t){Nf(B,uf(B),A,_t)}),iy=Td(od),sy=Za(function(A,B){A=zo(A);var me=-1,_t=B.length,on=_t>2?B[2]:a;for(on&&Ku(B[0],B[1],on)&&(_t=1);++me<_t;)for(var Fn=B[me],Tr=Lp(Fn),Jr=-1,hi=Tr.length;++Jr<hi;){var Oo=Tr[Jr],Ao=A[Oo];(Ao===a||St(Ao,kc[Oo])&&!Pa.call(A,Oo))&&(A[Oo]=Fn[Oo])}return A}),wv=Za(function(A){return A.push(a,f_),ua(Cg,a,A)});function v_(A,B,me){var _t=null==A?a:uo(A,B);return _t===a?me:_t}function F1(A,B){return null!=A&&Lf(A,B,Pl)}var Pv=Oh(function(A,B,me){null!=B&&"function"!=typeof B.toString&&(B=je.call(B)),A[B]=me},Om(sd)),L1=Oh(function(A,B,me){null!=B&&"function"!=typeof B.toString&&(B=je.call(B)),Pa.call(A,B)?A[B].push(me):A[B]=[me]},Zs),_y=Za(Qu);function uf(A){return vs(A)?ni(A):yn(A)}function Lp(A){return vs(A)?ni(A,!0):function Ur(A){if(!wc(A))return function Rp(A){var B=[];if(null!=A)for(var me in zo(A))B.push(me);return B}(A);var B=rf(A),me=[];for(var _t in A)"constructor"==_t&&(B||!Pa.call(A,_t))||me.push(_t);return me}(A)}var my=Mp(function(A,B,me){nu(A,B,me)}),Cg=Mp(function(A,B,me,_t){nu(A,B,me,_t)}),Gg=Td(function(A,B){var me={};if(null==A)return me;var _t=!1;B=Ga(B,function(Fn){return Fn=Gd(Fn,A),_t||(_t=Fn.length>1),Fn}),Nf(A,zp(A),me),_t&&(me=h(me,D|U|W,Kh));for(var on=B.length;on--;)M_(me,B[on]);return me}),hS=Td(function(A,B){return null==A?{}:function Bd(A,B){return Sh(A,B,function(me,_t){return F1(A,_t)})}(A,B)});function jg(A,B){if(null==A)return{};var me=Ga(zp(A),function(_t){return[_t]});return B=Zs(B),Sh(A,me,function(_t,on){return B(_t,on[0])})}var $1=d_(uf),H1=d_(Lp);function hh(A){return null==A?[]:Hs(A,uf(A))}var yy=jf(function(A,B,me){return B=B.toLowerCase(),A+(me?Gm(B):B)});function Gm(A){return Ym(Ac(A).toLowerCase())}function kv(A){return(A=Ac(A))&&A.replace(wi,hu).replace(Ze,"")}var by=jf(function(A,B,me){return A+(me?"-":"")+B.toLowerCase()}),B1=jf(function(A,B,me){return A+(me?" ":"")+B.toLowerCase()}),Ty=mf("toLowerCase"),Oy=jf(function(A,B,me){return A+(me?"_":"")+B.toLowerCase()}),Dy=jf(function(A,B,me){return A+(me?" ":"")+Ym(B)}),yS=jf(function(A,B,me){return A+(me?" ":"")+B.toUpperCase()}),Ym=mf("toUpperCase");function jv(A,B,me){return A=Ac(A),(B=me?a:B)===a?function du(Qn){return Bi.test(Qn)}(A)?function Rr(Qn){return Qn.match(gn)||[]}(A):function nl(Qn){return Qn.match(wr)||[]}(A):A.match(B)||[]}var zv=Za(function(A,B){try{return ua(A,a,B)}catch(me){return Hh(me)?me:new Do(me)}}),j1=Td(function(A,B){return uu(B,function(me){me=Ef(me),tc(A,me,Em(A[me],A))}),A});function Om(A){return function(){return A}}var Am=nf(),Zg=nf(!0);function sd(A){return A}function Dm(A){return $t("function"==typeof A?A:h(A,D))}var zm=Za(function(A,B){return function(me){return Qu(me,A,B)}}),Vm=Za(function(A,B){return function(me){return Qu(A,me,B)}});function um(A,B,me){var _t=uf(B),on=oi(B,_t);null==me&&(!wc(B)||!on.length&&_t.length)&&(me=B,B=A,A=this,on=oi(B,uf(B)));var Fn=!(wc(me)&&"chain"in me&&!me.chain),Tr=Wd(A);return uu(on,function(Jr){var hi=B[Jr];A[Jr]=hi,Tr&&(A.prototype[Jr]=function(){var Oo=this.__chain__;if(Fn||Oo){var Ao=A(this.__wrapped__);return(Ao.__actions__=Yd(this.__actions__)).push({func:hi,args:arguments,thisArg:A}),Ao.__chain__=Oo,Ao}return hi.apply(A,dc([this.value()],arguments))})}),A}function cm(){}var Jm=A_(Ga),Vv=A_($u),Zv=A_(Ru);function z1(A){return Zf(A)?Vc(Ef(A)):function bh(A){return function(B){return uo(B,A)}}(A)}var Jv=If(),Qv=If(!0);function Wg(){return[]}function Jg(){return!1}var V1=Ap(function(A,B){return A+B},0),Z1=c_("ceil"),Qm=Ap(function(A,B){return A/B},1),Kg=c_("floor"),e0=Ap(function(A,B){return A*B},1),Mg=c_("round"),t0=Ap(function(A,B){return A-B},0);return En.after=function b1(A,B){if("function"!=typeof B)throw new Uu(f);return A=tu(A),function(){if(--A<1)return B.apply(this,arguments)}},En.ary=mg,En.assign=ny,En.assignIn=ry,En.assignInWith=Bm,En.assignWith=xv,En.at=iy,En.before=kg,En.bind=Em,En.bindAll=j1,En.bindKey=$g,En.castArray=function O1(){if(!arguments.length)return[];var A=arguments[0];return Ii(A)?A:[A]},En.chain=vo,En.chunk=function ah(A,B,me){B=(me?Ku(A,B,me):B===a)?1:Nr(tu(B),0);var _t=null==A?0:A.length;if(!_t||B<1)return[];for(var on=0,Fn=0,Tr=Fr(De(_t/B));on<_t;)Tr[Fn++]=Wc(A,on,on+=B);return Tr},En.compact=function P_(A){for(var B=-1,me=null==A?0:A.length,_t=0,on=[];++B<me;){var Fn=A[B];Fn&&(on[_t++]=Fn)}return on},En.concat=function qh(){var A=arguments.length;if(!A)return[];for(var B=Fr(A-1),me=arguments[0],_t=A;_t--;)B[_t-1]=arguments[_t];return dc(Ii(me)?Yd(me):[me],It(B,1))},En.cond=function Ny(A){var B=null==A?0:A.length,me=Zs();return A=B?Ga(A,function(_t){if("function"!=typeof _t[1])throw new Uu(f);return[me(_t[0]),_t[1]]}):[],Za(function(_t){for(var on=-1;++on<B;){var Fn=A[on];if(ua(Fn[0],this,_t))return ua(Fn[1],this,_t)}})},En.conforms=function mh(A){return function b(A){var B=uf(A);return function(me){return N(me,A,B)}}(h(A,D))},En.constant=Om,En.countBy=kh,En.create=function oy(A,B){var me=Pu(A);return null==B?me:cd(me,B)},En.curry=function Il(A,B,me){var _t=zd(A,V,a,a,a,a,a,B=me?a:B);return _t.placeholder=Il.placeholder,_t},En.curryRight=function gg(A,B,me){var _t=zd(A,ce,a,a,a,a,a,B=me?a:B);return _t.placeholder=gg.placeholder,_t},En.debounce=vg,En.defaults=sy,En.defaultsDeep=wv,En.defer=Hg,En.delay=T1,En.difference=N_,En.differenceBy=wh,En.differenceWith=I_,En.drop=function Zp(A,B,me){var _t=null==A?0:A.length;return _t?Wc(A,(B=me||B===a?1:tu(B))<0?0:B,_t):[]},En.dropRight=function Qc(A,B,me){var _t=null==A?0:A.length;return _t?Wc(A,0,(B=_t-(B=me||B===a?1:tu(B)))<0?0:B):[]},En.dropRightWhile=function em(A,B){return A&&A.length?dd(A,Zs(B,3),!0,!0):[]},En.dropWhile=function _p(A,B){return A&&A.length?dd(A,Zs(B,3),!0):[]},En.fill=function lh(A,B,me,_t){var on=null==A?0:A.length;return on?(me&&"number"!=typeof me&&Ku(A,B,me)&&(me=0,_t=on),function ft(A,B,me,_t){var on=A.length;for((me=tu(me))<0&&(me=-me>on?0:on+me),(_t=_t===a||_t>on?on:tu(_t))<0&&(_t+=on),_t=me>_t?0:w1(_t);me<_t;)A[me++]=B;return A}(A,B,me,_t)):[]},En.filter=function dg(A,B){return(Ii(A)?Ba:wt)(A,Zs(B,3))},En.flatMap=function pg(A,B){return It(hg(A,B),1)},En.flatMapDeep=function Tf(A,B){return It(hg(A,B),Pt)},En.flatMapDepth=function fh(A,B,me){return me=me===a?1:tu(me),It(hg(A,B),me)},En.flatten=Ph,En.flattenDeep=function Pp(A){return null!=A&&A.length?It(A,Pt):[]},En.flattenDepth=function nm(A,B){return null!=A&&A.length?It(A,B=B===a?1:tu(B)):[]},En.flip=function C1(A){return zd(A,ge)},En.flow=Am,En.flowRight=Zg,En.fromPairs=function rm(A){for(var B=-1,me=null==A?0:A.length,_t={};++B<me;){var on=A[B];_t[on[0]]=on[1]}return _t},En.functions=function fy(A){return null==A?[]:oi(A,uf(A))},En.functionsIn=function py(A){return null==A?[]:oi(A,Lp(A))},En.groupBy=nd,En.initial=function vd(A){return null!=A&&A.length?Wc(A,0,-1):[]},En.intersection=uh,En.intersectionBy=ym,En.intersectionWith=Np,En.invert=Pv,En.invertBy=L1,En.invokeMap=hc,En.iteratee=Dm,En.keyBy=_g,En.keys=uf,En.keysIn=Lp,En.map=hg,En.mapKeys=function k1(A,B){var me={};return B=Zs(B,3),sr(A,function(_t,on,Fn){tc(me,B(_t,on,Fn),_t)}),me},En.mapValues=function hy(A,B){var me={};return B=Zs(B,3),sr(A,function(_t,on,Fn){tc(me,on,B(_t,on,Fn))}),me},En.matches=function H_(A){return Ka(h(A,D))},En.matchesProperty=function jm(A,B){return ka(A,h(B,D))},En.memoize=am,En.merge=my,En.mergeWith=Cg,En.method=zm,En.methodOf=Vm,En.mixin=um,En.negate=$h,En.nthArg=function Wm(A){return A=tu(A),Za(function(B){return _c(B,A)})},En.omit=Gg,En.omitBy=function Yg(A,B){return jg(A,$h(Zs(B)))},En.once=function ph(A){return kg(2,A)},En.orderBy=function Iu(A,B,me,_t){return null==A?[]:(Ii(B)||(B=null==B?[]:[B]),Ii(me=_t?a:me)||(me=null==me?[]:[me]),T_(A,B,me))},En.over=Jm,En.overArgs=lm,En.overEvery=Vv,En.overSome=Zv,En.partial=yg,En.partialRight=M1,En.partition=Es,En.pick=hS,En.pickBy=jg,En.property=z1,En.propertyOf=function Wv(A){return function(B){return null==A?a:uo(A,B)}},En.pull=Ih,En.pullAll=Fh,En.pullAllBy=function cg(A,B,me){return A&&A.length&&B&&B.length?Gf(A,B,Zs(me,2)):A},En.pullAllWith=function L_(A,B,me){return A&&A.length&&B&&B.length?Gf(A,B,a,me):A},En.pullAt=I,En.range=Jv,En.rangeRight=Qv,En.rearg=Eg,En.reject=function k_(A,B){return(Ii(A)?Ba:wt)(A,$h(Zs(B,3)))},En.remove=function re(A,B){var me=[];if(!A||!A.length)return me;var _t=-1,on=[],Fn=A.length;for(B=Zs(B,3);++_t<Fn;){var Tr=A[_t];B(Tr,_t,A)&&(me.push(Tr),on.push(_t))}return Hp(A,on),me},En.rest=function Sg(A,B){if("function"!=typeof A)throw new Uu(f);return Za(A,B=B===a?B:tu(B))},En.reverse=S,En.sampleSize=function hp(A,B,me){return B=(me?Ku(A,B,me):B===a)?1:tu(B),(Ii(A)?Wo:Wa)(A,B)},En.set=function Nv(A,B,me){return null==A?A:Ec(A,B,me)},En.setWith=function Iv(A,B,me,_t){return _t="function"==typeof _t?_t:a,null==A?A:Ec(A,B,me,_t)},En.shuffle=function $m(A){return(Ii(A)?Qo:Sc)(A)},En.slice=function z(A,B,me){var _t=null==A?0:A.length;return _t?(me&&"number"!=typeof me&&Ku(A,B,me)?(B=0,me=_t):(B=null==B?0:tu(B),me=me===a?_t:tu(me)),Wc(A,B,me)):[]},En.sortBy=S1,En.sortedUniq=function Pi(A){return A&&A.length?Bp(A):[]},En.sortedUniqBy=function cs(A,B){return A&&A.length?Bp(A,Zs(B,2)):[]},En.split=function Ay(A,B,me){return me&&"number"!=typeof me&&Ku(A,B,me)&&(B=me=a),(me=me===a?pn:me>>>0)?(A=Ac(A))&&("string"==typeof B||null!=B&&!Cm(B))&&!(B=Sd(B))&&Fc(A)?bc(An(A),0,me):A.split(B,me):[]},En.spread=function _h(A,B){if("function"!=typeof A)throw new Uu(f);return B=null==B?0:Nr(tu(B),0),Za(function(me){var _t=me[B],on=bc(me,0,B);return _t&&dc(on,_t),ua(A,this,on)})},En.tail=function Yo(A){var B=null==A?0:A.length;return B?Wc(A,1,B):[]},En.take=function y(A,B,me){return A&&A.length?Wc(A,0,(B=me||B===a?1:tu(B))<0?0:B):[]},En.takeRight=function x(A,B,me){var _t=null==A?0:A.length;return _t?Wc(A,(B=_t-(B=me||B===a?1:tu(B)))<0?0:B,_t):[]},En.takeRightWhile=function Y(A,B){return A&&A.length?dd(A,Zs(B,3),!1,!0):[]},En.takeWhile=function be(A,B){return A&&A.length?dd(A,Zs(B,3)):[]},En.tap=function fl(A,B){return B(A),A},En.throttle=function Ov(A,B,me){var _t=!0,on=!0;if("function"!=typeof A)throw new Uu(f);return wc(me)&&(_t="leading"in me?!!me.leading:_t,on="trailing"in me?!!me.trailing:on),vg(A,B,{leading:_t,maxWait:B,trailing:on})},En.thru=Us,En.toArray=x1,En.toPairs=$1,En.toPairsIn=H1,En.toPath=function Ly(A){return Ii(A)?Ga(A,Ef):Kf(A)?[A]:Yd(Xh(Ac(A)))},En.toPlainObject=P1,En.transform=function U1(A,B,me){var _t=Ii(A),on=_t||Xu(A)||$_(A);if(B=Zs(B,4),null==me){var Fn=A&&A.constructor;me=on?_t?new Fn:[]:wc(A)&&Wd(Fn)?Pu(Fs(A)):{}}return(on?uu:sr)(A,function(Tr,Jr,hi){return B(me,Tr,Jr,hi)}),me},En.unary=function bg(A){return mg(A,1)},En.union=Ke,En.unionBy=xt,En.unionWith=_n,En.uniq=function In(A){return A&&A.length?Yf(A):[]},En.uniqBy=function vr(A,B){return A&&A.length?Yf(A,Zs(B,2)):[]},En.uniqWith=function Si(A,B){return B="function"==typeof B?B:a,A&&A.length?Yf(A,a,B):[]},En.unset=function Gh(A,B){return null==A||M_(A,B)},En.unzip=Uo,En.unzipWith=Ds,En.update=function zg(A,B,me){return null==A?A:bd(A,B,s_(me))},En.updateWith=function Vg(A,B,me,_t){return _t="function"==typeof _t?_t:a,null==A?A:bd(A,B,s_(me),_t)},En.values=hh,En.valuesIn=function gy(A){return null==A?[]:Hs(A,Lp(A))},En.without=Qi,En.words=jv,En.wrap=function Um(A,B){return yg(s_(B),A)},En.xor=Ls,En.xorBy=ia,En.xorWith=oa,En.zip=di,En.zipObject=function Wr(A,B){return Jc(A||[],B||[],Bl)},En.zipObjectDeep=function si(A,B){return Jc(A||[],B||[],Ec)},En.zipWith=no,En.entries=$1,En.entriesIn=H1,En.extend=ry,En.extendWith=Bm,um(En,En),En.add=V1,En.attempt=zv,En.camelCase=yy,En.capitalize=Gm,En.ceil=Z1,En.clamp=function Fv(A,B,me){return me===a&&(me=B,B=a),me!==a&&(me=(me=g_(me))==me?me:0),B!==a&&(B=(B=g_(B))==B?B:0),Ed(g_(A),B,me)},En.clone=function Av(A){return h(A,W)},En.cloneDeep=function q(A){return h(A,D|W)},En.cloneDeepWith=function j(A,B){return h(A,D|W,B="function"==typeof B?B:a)},En.cloneWith=function L(A,B){return h(A,W,B="function"==typeof B?B:a)},En.conformsTo=function Ae(A,B){return null==B||N(A,B,uf(B))},En.deburr=kv,En.defaultTo=function Xf(A,B){return null==A||A!=A?B:A},En.divide=Qm,En.endsWith=function gS(A,B,me){A=Ac(A),B=Sd(B);var _t=A.length,on=me=me===a?_t:Ed(tu(me),0,_t);return(me-=B.length)>=0&&A.slice(me,on)==B},En.eq=St,En.escape=function Ey(A){return(A=Ac(A))&&Pe.test(A)?A.replace(lt,lu):A},En.escapeRegExp=function Sy(A){return(A=Ac(A))&&nr.test(A)?A.replace(Zn,"\\$&"):A},En.every=function Fm(A,B,me){var _t=Ii(A)?$u:Qe;return me&&Ku(A,B,me)&&(B=a),_t(A,Zs(B,3))},En.find=fg,En.findIndex=F_,En.findKey=function ay(A,B){return Su(A,Zs(B,3),sr)},En.findLast=Lm,En.findLastIndex=tm,En.findLastKey=function ly(A,B){return Su(A,Zs(B,3),Dr)},En.floor=Kg,En.forEach=Qf,En.forEachRight=sm,En.forIn=function N1(A,B){return null==A?A:Cn(A,Zs(B,3),Lp)},En.forInRight=function uy(A,B){return null==A?A:er(A,Zs(B,3),Lp)},En.forOwn=function cy(A,B){return A&&sr(A,Zs(B,3))},En.forOwnRight=function dy(A,B){return A&&Dr(A,Zs(B,3))},En.get=v_,En.gt=Kt,En.gte=ur,En.has=function I1(A,B){return null!=A&&Lf(A,B,Na)},En.hasIn=F1,En.head=im,En.identity=sd,En.includes=function Zd(A,B,me,_t){A=vs(A)?A:hh(A),me=me&&!_t?tu(me):0;var on=A.length;return me<0&&(me=Nr(on+me,0)),Mm(A)?me<=on&&A.indexOf(B,me)>-1:!!on&&ql(A,B,me)>-1},En.indexOf=function Im(A,B,me){var _t=null==A?0:A.length;if(!_t)return-1;var on=null==me?0:tu(me);return on<0&&(on=Nr(_t+on,0)),ql(A,B,on)},En.inRange=function Lv(A,B,me){return B=Bh(B),me===a?(me=B,B=0):me=Bh(me),function il(A,B,me){return A>=Mi(B,me)&&A<Nr(B,me)}(A=g_(A),B,me)},En.invoke=_y,En.isArguments=Br,En.isArray=Ii,En.isArrayBuffer=ms,En.isArrayLike=vs,En.isArrayLikeObject=Ks,En.isBoolean=function Vl(A){return!0===A||!1===A||pd(A)&&as(A)==Kr},En.isBuffer=Xu,En.isDate=Fu,En.isElement=function Oc(A){return pd(A)&&1===A.nodeType&&!Tm(A)},En.isEmpty=function af(A){if(null==A)return!0;if(vs(A)&&(Ii(A)||"string"==typeof A||"function"==typeof A.splice||Xu(A)||$_(A)||Br(A)))return!A.length;var B=Mc(A);if(B==br||B==Oi)return!A.size;if(rf(A))return!yn(A).length;for(var me in A)if(Pa.call(A,me))return!1;return!0},En.isEqual=function lf(A,B){return yc(A,B)},En.isEqualWith=function m_(A,B,me){var _t=(me="function"==typeof me?me:a)?me(A,B):a;return _t===a?yc(A,B,a,me):!!_t},En.isError=Hh,En.isFinite=function Uh(A){return"number"==typeof A&&Qt(A)},En.isFunction=Wd,En.isInteger=Nd,En.isLength=mp,En.isMap=Sm,En.isMatch=function Dv(A,B){return A===B||wf(A,B,p_(B))},En.isMatchWith=function K0(A,B,me){return me="function"==typeof me?me:a,wf(A,B,p_(B),me)},En.isNaN=function Ug(A){return bm(A)&&A!=+A},En.isNative=function X0(A){if(kf(A))throw new Do("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Ql(A)},En.isNil=function Bg(A){return null==A},En.isNull=function q0(A){return null===A},En.isNumber=bm,En.isObject=wc,En.isObjectLike=pd,En.isPlainObject=Tm,En.isRegExp=Cm,En.isSafeInteger=function A1(A){return Nd(A)&&A>=-it&&A<=it},En.isSet=Tg,En.isString=Mm,En.isSymbol=Kf,En.isTypedArray=$_,En.isUndefined=function D1(A){return A===a},En.isWeakMap=function Rv(A){return pd(A)&&Mc(A)==Ei},En.isWeakSet=function R1(A){return pd(A)&&"[object WeakSet]"==as(A)},En.join=function ch(A,B){return null==A?"":Gn.call(A,B)},En.kebabCase=by,En.last=Cd,En.lastIndexOf=function om(A,B,me){var _t=null==A?0:A.length;if(!_t)return-1;var on=_t;return me!==a&&(on=(on=tu(me))<0?Nr(_t+on,0):Mi(on,_t-1)),B==B?function Xe(Qn,Gr,Fr){for(var Ui=Fr+1;Ui--;)if(Qn[Ui]===Gr)return Ui;return Ui}(A,B,on):gc(A,Dc,on,!0)},En.lowerCase=B1,En.lowerFirst=Ty,En.lt=ey,En.lte=ty,En.max=function Xg(A){return A&&A.length?Re(A,sd,ma):a},En.maxBy=function W1(A,B){return A&&A.length?Re(A,Zs(B,2),ma):a},En.mean=function qv(A){return zs(A,sd)},En.meanBy=function qg(A,B){return zs(A,Zs(B,2))},En.min=function e1(A){return A&&A.length?Re(A,sd,Gi):a},En.minBy=function J1(A,B){return A&&A.length?Re(A,Zs(B,2),Gi):a},En.stubArray=Wg,En.stubFalse=Jg,En.stubObject=function Kv(){return{}},En.stubString=function Iy(){return""},En.stubTrue=function Fy(){return!0},En.multiply=e0,En.nth=function Nh(A,B){return A&&A.length?_c(A,tu(B)):a},En.noConflict=function Zm(){return yl._===this&&(yl._=tt),this},En.noop=cm,En.now=Hm,En.pad=function Cy(A,B,me){A=Ac(A);var _t=(B=tu(B))?Gt(A):0;if(!B||_t>=B)return A;var on=(B-_t)/2;return Dp(Ve(on),me)+A+Dp(De(on),me)},En.padEnd=function $v(A,B,me){A=Ac(A);var _t=(B=tu(B))?Gt(A):0;return B&&_t<B?A+Dp(B-_t,me):A},En.padStart=function Hv(A,B,me){A=Ac(A);var _t=(B=tu(B))?Gt(A):0;return B&&_t<B?Dp(B-_t,me)+A:A},En.parseInt=function G1(A,B,me){return me||null==B?B=0:B&&(B=+B),Jo(Ac(A).replace(Zt,""),B||0)},En.random=function vy(A,B,me){if(me&&"boolean"!=typeof me&&Ku(A,B,me)&&(B=me=a),me===a&&("boolean"==typeof B?(me=B,B=a):"boolean"==typeof A&&(me=A,A=a)),A===a&&B===a?(A=0,B=1):(A=Bh(A),B===a?(B=A,A=0):B=Bh(B)),A>B){var _t=A;A=B,B=_t}if(me||A%1||B%1){var on=rs();return Mi(A+on*(B-A+Nc("1e-"+((on+"").length-1))),B)}return pf(A,B)},En.reduce=function gu(A,B,me){var _t=Ii(A)?cu:pt,on=arguments.length<3;return _t(A,Zs(B,4),me,on,he)},En.reduceRight=function km(A,B,me){var _t=Ii(A)?Sa:pt,on=arguments.length<3;return _t(A,Zs(B,4),me,on,Me)},En.repeat=function My(A,B,me){return B=(me?Ku(A,B,me):B===a)?1:tu(B),op(Ac(A),B)},En.replace=function Y1(){var A=arguments,B=Ac(A[0]);return A.length<3?B:B.replace(A[1],A[2])},En.result=function mS(A,B,me){var _t=-1,on=(B=Gd(B,A)).length;for(on||(on=1,A=a);++_t<on;){var Fn=null==A?a:A[Ef(B[_t])];Fn===a&&(_t=on,Fn=me),A=Wd(Fn)?Fn.call(A):Fn}return A},En.round=Mg,En.runInContext=Qn,En.sample=function Pd(A){return(Ii(A)?zi:_f)(A)},En.size=function Fp(A){if(null==A)return 0;if(vs(A))return Mm(A)?Gt(A):A.length;var B=Mc(A);return B==br||B==Oi?A.size:yn(A).length},En.snakeCase=Oy,En.some=function Lg(A,B,me){var _t=Ii(A)?Ru:o_;return me&&Ku(A,B,me)&&(B=a),_t(A,Zs(B,3))},En.sortedIndex=function Oe(A,B){return Cp(A,B)},En.sortedIndexBy=function ut(A,B,me){return Pf(A,B,Zs(me,2))},En.sortedIndexOf=function On(A,B){var me=null==A?0:A.length;if(me){var _t=Cp(A,B);if(_t<me&&St(A[_t],B))return _t}return-1},En.sortedLastIndex=function Ar(A,B){return Cp(A,B,!0)},En.sortedLastIndexBy=function ri(A,B,me){return Pf(A,B,Zs(me,2),!0)},En.sortedLastIndexOf=function Di(A,B){if(null!=A&&A.length){var _t=Cp(A,B,!0)-1;if(St(A[_t],B))return _t}return-1},En.startCase=Dy,En.startsWith=function Ry(A,B,me){return A=Ac(A),me=null==me?0:Ed(tu(me),0,A.length),B=Sd(B),A.slice(me,me+B.length)==B},En.subtract=t0,En.sum=function n0(A){return A&&A.length?en(A,sd):0},En.sumBy=function Q1(A,B){return A&&A.length?en(A,Zs(B,2)):0},En.template=function xy(A,B,me){var _t=En.templateSettings;me&&Ku(A,B,me)&&(B=a),A=Ac(A),B=Bm({},B,_t,nh);var Jr,hi,on=Bm({},B.imports,_t.imports,nh),Fn=uf(on),Tr=Hs(on,Fn),Oo=0,Ao=B.interpolate||ji,Bo="__p += '",Bs=$l((B.escape||ji).source+"|"+Ao.source+"|"+(Ao===Pn?Ai:ji).source+"|"+(B.evaluate||ji).source+"|$","g"),Ea="//# sourceURL="+(Pa.call(B,"sourceURL")?(B.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++ws+"]")+"\n";A.replace(Bs,function(_l,vu,Lu,qf,Md,Qp){return Lu||(Lu=qf),Bo+=A.slice(Oo,Qp).replace(Vi,id),vu&&(Jr=!0,Bo+="' +\n__e("+vu+") +\n'"),Md&&(hi=!0,Bo+="';\n"+Md+";\n__p += '"),Lu&&(Bo+="' +\n((__t = ("+Lu+")) == null ? '' : __t) +\n'"),Oo=Qp+_l.length,_l}),Bo+="';\n";var pl=Pa.call(B,"variable")&&B.variable;if(pl){if(Ti.test(pl))throw new Do("Invalid `variable` option passed into `_.template`")}else Bo="with (obj) {\n"+Bo+"\n}\n";Bo=(hi?Bo.replace(Ie,""):Bo).replace(et,"$1").replace(ze,"$1;"),Bo="function("+(pl||"obj")+") {\n"+(pl?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(Jr?", __e = _.escape":"")+(hi?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+Bo+"return __p\n}";var ru=zv(function(){return Fa(Fn,Ea+"return "+Bo).apply(a,Tr)});if(ru.source=Bo,Hh(ru))throw ru;return ru},En.times=function Xv(A,B){if((A=tu(A))<1||A>it)return[];var me=pn,_t=Mi(A,pn);B=Zs(B),A-=pn;for(var on=fi(_t,B);++me<A;)B(me);return on},En.toFinite=Bh,En.toInteger=tu,En.toLength=w1,En.toLower=function wy(A){return Ac(A).toLowerCase()},En.toNumber=g_,En.toSafeInteger=function Jp(A){return A?Ed(tu(A),-it,it):0===A?A:0},En.toString=Ac,En.toUpper=function Uv(A){return Ac(A).toUpperCase()},En.trim=function Bv(A,B,me){if((A=Ac(A))&&(me||B===a))return Ya(A);if(!A||!(B=Sd(B)))return A;var _t=An(A),on=An(B);return bc(_t,Hu(_t,on),zl(_t,on)+1).join("")},En.trimEnd=function Gv(A,B,me){if((A=Ac(A))&&(me||B===a))return A.slice(0,kn(A)+1);if(!A||!(B=Sd(B)))return A;var _t=An(A);return bc(_t,0,zl(_t,An(B))+1).join("")},En.trimStart=function Py(A,B,me){if((A=Ac(A))&&(me||B===a))return A.replace(Zt,"");if(!A||!(B=Sd(B)))return A;var _t=An(A);return bc(_t,Hu(_t,An(B))).join("")},En.truncate=function vS(A,B){var me=30,_t="...";if(wc(B)){var on="separator"in B?B.separator:on;me="length"in B?tu(B.length):me,_t="omission"in B?Sd(B.omission):_t}var Fn=(A=Ac(A)).length;if(Fc(A)){var Tr=An(A);Fn=Tr.length}if(me>=Fn)return A;var Jr=me-Gt(_t);if(Jr<1)return _t;var hi=Tr?bc(Tr,0,Jr).join(""):A.slice(0,Jr);if(on===a)return hi+_t;if(Tr&&(Jr+=hi.length-Jr),Cm(on)){if(A.slice(Jr).search(on)){var Oo,Ao=hi;for(on.global||(on=$l(on.source,Ac(Ko.exec(on))+"g")),on.lastIndex=0;Oo=on.exec(Ao);)var Bo=Oo.index;hi=hi.slice(0,Bo===a?Jr:Bo)}}else if(A.indexOf(Sd(on),Jr)!=Jr){var Bs=hi.lastIndexOf(on);Bs>-1&&(hi=hi.slice(0,Bs))}return hi+_t},En.unescape=function Yv(A){return(A=Ac(A))&&Rt.test(A)?A.replace(an,Hr):A},En.uniqueId=function Qg(A){var B=++fc;return Ac(A)+B},En.upperCase=yS,En.upperFirst=Ym,En.each=Qf,En.eachRight=sm,En.first=im,um(En,function(){var A={};return sr(En,function(B,me){Pa.call(En.prototype,me)||(A[me]=B)}),A}(),{chain:!1}),En.VERSION="4.17.21",uu(["bind","bindKey","curry","curryRight","partial","partialRight"],function(A){En[A].placeholder=En}),uu(["drop","take"],function(A,B){Os.prototype[A]=function(me){me=me===a?1:Nr(tu(me),0);var _t=this.__filtered__&&!B?new Os(this):this.clone();return _t.__filtered__?_t.__takeCount__=Mi(me,_t.__takeCount__):_t.__views__.push({size:Mi(me,pn),type:A+(_t.__dir__<0?"Right":"")}),_t},Os.prototype[A+"Right"]=function(me){return this.reverse()[A](me).reverse()}}),uu(["filter","map","takeWhile"],function(A,B){var me=B+1,_t=1==me||3==me;Os.prototype[A]=function(on){var Fn=this.clone();return Fn.__iteratees__.push({iteratee:Zs(on,3),type:me}),Fn.__filtered__=Fn.__filtered__||_t,Fn}}),uu(["head","last"],function(A,B){var me="take"+(B?"Right":"");Os.prototype[A]=function(){return this[me](1).value()[0]}}),uu(["initial","tail"],function(A,B){var me="drop"+(B?"":"Right");Os.prototype[A]=function(){return this.__filtered__?new Os(this):this[me](1)}}),Os.prototype.compact=function(){return this.filter(sd)},Os.prototype.find=function(A){return this.filter(A).head()},Os.prototype.findLast=function(A){return this.reverse().find(A)},Os.prototype.invokeMap=Za(function(A,B){return"function"==typeof A?new Os(this):this.map(function(me){return Qu(me,A,B)})}),Os.prototype.reject=function(A){return this.filter($h(Zs(A)))},Os.prototype.slice=function(A,B){A=tu(A);var me=this;return me.__filtered__&&(A>0||B<0)?new Os(me):(A<0?me=me.takeRight(-A):A&&(me=me.drop(A)),B!==a&&(me=(B=tu(B))<0?me.dropRight(-B):me.take(B-A)),me)},Os.prototype.takeRightWhile=function(A){return this.reverse().takeWhile(A).reverse()},Os.prototype.toArray=function(){return this.take(pn)},sr(Os.prototype,function(A,B){var me=/^(?:filter|find|map|reject)|While$/.test(B),_t=/^(?:head|last)$/.test(B),on=En[_t?"take"+("last"==B?"Right":""):B],Fn=_t||/^find/.test(B);on&&(En.prototype[B]=function(){var Tr=this.__wrapped__,Jr=_t?[1]:arguments,hi=Tr instanceof Os,Oo=Jr[0],Ao=hi||Ii(Tr),Bo=function(vu){var Lu=on.apply(En,dc([vu],Jr));return _t&&Bs?Lu[0]:Lu};Ao&&me&&"function"==typeof Oo&&1!=Oo.length&&(hi=Ao=!1);var Bs=this.__chain__,pl=Fn&&!Bs,ru=hi&&!this.__actions__.length;if(!Fn&&Ao){Tr=ru?Tr:new Os(this);var _l=A.apply(Tr,Jr);return _l.__actions__.push({func:Us,args:[Bo],thisArg:a}),new Va(_l,Bs)}return pl&&ru?A.apply(this,Jr):(_l=this.thru(Bo),pl?_t?_l.value()[0]:_l.value():_l)})}),uu(["pop","push","shift","sort","splice","unshift"],function(A){var B=Xc[A],me=/^(?:push|sort|unshift)$/.test(A)?"tap":"thru",_t=/^(?:pop|shift)$/.test(A);En.prototype[A]=function(){var on=arguments;if(_t&&!this.__chain__){var Fn=this.value();return B.apply(Ii(Fn)?Fn:[],on)}return this[me](function(Tr){return B.apply(Ii(Tr)?Tr:[],on)})}}),sr(Os.prototype,function(A,B){var me=En[B];if(me){var _t=me.name+"";Pa.call(qc,_t)||(qc[_t]=[]),qc[_t].push({name:B,func:me})}}),qc[Op(a,X).name]=[{name:"wrapper",func:a}],Os.prototype.clone=function Cu(){var A=new Os(this.__wrapped__);return A.__actions__=Yd(this.__actions__),A.__dir__=this.__dir__,A.__filtered__=this.__filtered__,A.__iteratees__=Yd(this.__iteratees__),A.__takeCount__=this.__takeCount__,A.__views__=Yd(this.__views__),A},Os.prototype.reverse=function ld(){if(this.__filtered__){var A=new Os(this);A.__dir__=-1,A.__filtered__=!0}else(A=this.clone()).__dir__*=-1;return A},Os.prototype.value=function Hc(){var A=this.__wrapped__.value(),B=this.__dir__,me=Ii(A),_t=B<0,on=me?A.length:0,Fn=function Ff(A,B,me){for(var _t=-1,on=me.length;++_t<on;){var Fn=me[_t],Tr=Fn.size;switch(Fn.type){case"drop":A+=Tr;break;case"dropRight":B-=Tr;break;case"take":B=Mi(B,A+Tr);break;case"takeRight":A=Nr(A,B-Tr)}}return{start:A,end:B}}(0,on,this.__views__),Tr=Fn.start,Jr=Fn.end,hi=Jr-Tr,Oo=_t?Jr:Tr-1,Ao=this.__iteratees__,Bo=Ao.length,Bs=0,Ea=Mi(hi,this.__takeCount__);if(!me||!_t&&on==hi&&Ea==hi)return td(A,this.__actions__);var pl=[];e:for(;hi--&&Bs<Ea;){for(var ru=-1,_l=A[Oo+=B];++ru<Bo;){var vu=Ao[ru],qf=vu.type,Md=(0,vu.iteratee)(_l);if(2==qf)_l=Md;else if(!Md){if(1==qf)continue e;break e}}pl[Bs++]=_l}return pl},En.prototype.at=ll,En.prototype.chain=function Cl(){return vo(this)},En.prototype.commit=function Ia(){return new Va(this.value(),this.__chain__)},En.prototype.next=function bf(){this.__values__===a&&(this.__values__=x1(this.value()));var A=this.__index__>=this.__values__.length;return{done:A,value:A?a:this.__values__[this.__index__++]}},En.prototype.plant=function Wp(A){for(var B,me=this;me instanceof za;){var _t=xh(me);_t.__index__=0,_t.__values__=a,B?on.__wrapped__=_t:B=_t;var on=_t;me=me.__wrapped__}return on.__wrapped__=A,B},En.prototype.reverse=function Lh(){var A=this.__wrapped__;if(A instanceof Os){var B=A;return this.__actions__.length&&(B=new Os(this)),(B=B.reverse()).__actions__.push({func:Us,args:[S],thisArg:a}),new Va(B,this.__chain__)}return this.thru(S)},En.prototype.toJSON=En.prototype.valueOf=En.prototype.value=function dh(){return td(this.__wrapped__,this.__actions__)},En.prototype.first=En.prototype.head,Ho&&(En.prototype[Ho]=function Ip(){return this}),En}();yl._=Io,(r=function(){return Io}.call(C,s,C,E))!==a&&(E.exports=r)}.call(this)},97425:(E,C,s)=>{var r=s(93177),a="Expected a function";function c(u,e){if("function"!=typeof u||null!=e&&"function"!=typeof e)throw new TypeError(a);var f=function(){var m=arguments,T=e?e.apply(this,m):m[0],M=f.cache;if(M.has(T))return M.get(T);var w=u.apply(this,m);return f.cache=M.set(T,w)||M,w};return f.cache=new(c.Cache||r),f}c.Cache=r,E.exports=c},3912:(E,C,s)=>{var r=s(9085),c=s(30906)(function(u,e,f){r(u,e,f)});E.exports=c},30765:(E,C,s)=>{var r=s(27038);E.exports=function(){return r.Date.now()}},12482:(E,C,s)=>{var r=s(14992),a=s(77007),c=s(72064),u=s(64667),e=s(11694),f=s(925),m=s(10058),T=s(51675),U=m(function(W,$){var J={};if(null==W)return J;var F=!1;$=r($,function(de){return de=u(de,W),F||(F=de.length>1),de}),e(W,T(W),J),F&&(J=a(J,7,f));for(var X=$.length;X--;)c(J,$[X]);return J});E.exports=U},63354:(E,C,s)=>{var r=s(68840),a=s(59866),c=s(99743),u=s(82773);E.exports=function e(f){return c(f)?r(u(f)):a(f)}},86101:(E,C,s)=>{var r=s(89731),a=s(59026),c=s(5245),u=s(85105),e=s(81690);E.exports=function f(m,T,M){var w=e(m)?r:u,D=arguments.length<3;return w(m,c(T,4),M,D,a)}},12666:(E,C,s)=>{var r=s(32773);E.exports=function a(c,u,e){return null==c?c:r(c,u,e)}},52190:(E,C,s)=>{var r=s(8141),a=s(5245),c=s(37834),u=s(81690),e=s(71100);E.exports=function f(m,T,M){var w=u(m)?r:c;return M&&e(m,T,M)&&(T=void 0),w(m,a(T,3))}},65336:E=>{E.exports=function C(){return[]}},61711:E=>{E.exports=function C(){return!1}},5152:(E,C,s)=>{var r=s(45038),a=1/0;E.exports=function u(e){return e?(e=r(e))===a||e===-a?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},32781:(E,C,s)=>{var r=s(5152);E.exports=function a(c){var u=r(c),e=u%1;return u==u?e?u-e:u:0}},69883:(E,C,s)=>{var r=s(41233);E.exports=function a(c){return r(c).toLowerCase()}},45038:(E,C,s)=>{var r=s(13743),a=s(53867),c=s(7786),e=/^[-+]0x[0-9a-f]+$/i,f=/^0b[01]+$/i,m=/^0o[0-7]+$/i,T=parseInt;E.exports=function M(w){if("number"==typeof w)return w;if(c(w))return NaN;if(a(w)){var D="function"==typeof w.valueOf?w.valueOf():w;w=a(D)?D+"":D}if("string"!=typeof w)return 0===w?w:+w;w=r(w);var U=f.test(w);return U||m.test(w)?T(w.slice(2),U?2:8):e.test(w)?NaN:+w}},31413:(E,C,s)=>{var r=s(11694),a=s(42970);E.exports=function c(u){return r(u,a(u))}},41233:(E,C,s)=>{var r=s(68166);E.exports=function a(c){return null==c?"":r(c)}},93890:(E,C,s)=>{var a=s(66803)("toUpperCase");E.exports=a},96590:(E,C,s)=>{var r=s(54561),a=s(59316),c=s(41233),u=s(58863);E.exports=function e(f,m,T){return f=c(f),void 0===(m=T?void 0:m)?a(f)?u(f):r(f):f.match(m)||[]}},31507:(E,C,s)=>{var r=s(23898),a=s(25687);E.exports=function c(u,e){return a(u||[],e||[],r)}},74538:(E,C,s)=>{"use strict";var r=s(7856),a=s(11926);C.highlight=u,C.highlightAuto=function e(X,de){var $e,ge,Et,ot,V=de||{},ce=V.subset||r.listLanguages(),se=V.prefix,fe=ce.length,Te=-1;if(null==se&&(se=c),"string"!=typeof X)throw a("Expected `string` for value, got `%s`",X);for(ge={relevance:0,language:null,value:[]},$e={relevance:0,language:null,value:[]};++Te<fe;)r.getLanguage(ot=ce[Te])&&((Et=u(ot,X,de)).language=ot,Et.relevance>ge.relevance&&(ge=Et),Et.relevance>$e.relevance&&(ge=$e,$e=Et));return ge.language&&($e.secondBest=ge),$e},C.registerLanguage=function f(X,de){r.registerLanguage(X,de)},C.listLanguages=function m(){return r.listLanguages()},C.registerAlias=function T(X,de){var ce,V=X;for(ce in de&&((V={})[X]=de),V)r.registerAliases(V[ce],{languageName:ce})},M.prototype.addText=function U(X){var V,ce,de=this.stack;""!==X&&((ce=(V=de[de.length-1]).children[V.children.length-1])&&"text"===ce.type?ce.value+=X:V.children.push({type:"text",value:X}))},M.prototype.addKeyword=function w(X,de){this.openNode(de),this.addText(X),this.closeNode()},M.prototype.addSublanguage=function D(X,de){var V=this.stack,ce=V[V.length-1],se=X.rootNode.children;ce.children=ce.children.concat(de?{type:"element",tagName:"span",properties:{className:[de]},children:se}:se)},M.prototype.openNode=function W(X){var de=this.stack,se={type:"element",tagName:"span",properties:{className:[this.options.classPrefix+X]},children:[]};de[de.length-1].children.push(se),de.push(se)},M.prototype.closeNode=function $(){this.stack.pop()},M.prototype.closeAllNodes=F,M.prototype.finalize=F,M.prototype.toHTML=function J(){return""};var c="hljs-";function u(X,de,V){var Te,ce=r.configure({}),fe=(V||{}).prefix;if("string"!=typeof X)throw a("Expected `string` for name, got `%s`",X);if(!r.getLanguage(X))throw a("Unknown language: `%s` is not registered",X);if("string"!=typeof de)throw a("Expected `string` for value, got `%s`",de);if(null==fe&&(fe=c),r.configure({__emitter:M,classPrefix:fe}),Te=r.highlight(de,{language:X,ignoreIllegals:!0}),r.configure(ce||{}),Te.errorRaised)throw Te.errorRaised;return{relevance:Te.relevance,language:Te.language,value:Te.emitter.rootNode.children}}function M(X){this.options=X,this.rootNode={children:[]},this.stack=[this.rootNode]}function F(){}},26431:function(E,C,s){!function(r){"use strict";r.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(c){return/^nm$/i.test(c)},meridiem:function(c,u,e){return c<12?e?"vm":"VM":e?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(c){return c+(1===c||8===c||c>=20?"ste":"de")},week:{dow:1,doy:4}})}(s(16738))},1616:function(E,C,s){!function(r){"use strict";var a=function(m){return 0===m?0:1===m?1:2===m?2:m%100>=3&&m%100<=10?3:m%100>=11?4:5},c={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},u=function(m){return function(T,M,w,D){var U=a(T),W=c[m][a(T)];return 2===U&&(W=W[M?0:1]),W.replace(/%d/i,T)}},e=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];r.defineLocale("ar-dz",{months:e,monthsShort:e,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(m){return"\u0645"===m},meridiem:function(m,T,M){return m<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:u("s"),ss:u("s"),m:u("m"),mm:u("m"),h:u("h"),hh:u("h"),d:u("d"),dd:u("d"),M:u("M"),MM:u("M"),y:u("y"),yy:u("y")},postformat:function(m){return m.replace(/,/g,"\u060c")},week:{dow:0,doy:4}})}(s(16738))},9759:function(E,C,s){!function(r){"use strict";r.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}})}(s(16738))},43160:function(E,C,s){!function(r){"use strict";var a={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},c=function(T){return 0===T?0:1===T?1:2===T?2:T%100>=3&&T%100<=10?3:T%100>=11?4:5},u={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},e=function(T){return function(M,w,D,U){var W=c(M),$=u[T][c(M)];return 2===W&&($=$[w?0:1]),$.replace(/%d/i,M)}},f=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];r.defineLocale("ar-ly",{months:f,monthsShort:f,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(T){return"\u0645"===T},meridiem:function(T,M,w){return T<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:e("s"),ss:e("s"),m:e("m"),mm:e("m"),h:e("h"),hh:e("h"),d:e("d"),dd:e("d"),M:e("M"),MM:e("M"),y:e("y"),yy:e("y")},preparse:function(T){return T.replace(/\u060c/g,",")},postformat:function(T){return T.replace(/\d/g,function(M){return a[M]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(s(16738))},62551:function(E,C,s){!function(r){"use strict";r.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}})}(s(16738))},79989:function(E,C,s){!function(r){"use strict";var a={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},c={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};r.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,f,m){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(f){return c[f]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}})}(s(16738))},6962:function(E,C,s){!function(r){"use strict";r.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}})}(s(16738))},81286:function(E,C,s){!function(r){"use strict";var a={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},c={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},u=function(M){return 0===M?0:1===M?1:2===M?2:M%100>=3&&M%100<=10?3:M%100>=11?4:5},e={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},f=function(M){return function(w,D,U,W){var $=u(w),J=e[M][u(w)];return 2===$&&(J=J[D?0:1]),J.replace(/%d/i,w)}},m=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];r.defineLocale("ar",{months:m,monthsShort:m,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(M){return"\u0645"===M},meridiem:function(M,w,D){return M<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:f("s"),ss:f("s"),m:f("m"),mm:f("m"),h:f("h"),hh:f("h"),d:f("d"),dd:f("d"),M:f("M"),MM:f("M"),y:f("y"),yy:f("y")},preparse:function(M){return M.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(w){return c[w]}).replace(/\u060c/g,",")},postformat:function(M){return M.replace(/\d/g,function(w){return a[w]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(s(16738))},15887:function(E,C,s){!function(r){"use strict";var a={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};r.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(u){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(u)},meridiem:function(u,e,f){return u<4?"gec\u0259":u<12?"s\u0259h\u0259r":u<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(u){if(0===u)return u+"-\u0131nc\u0131";var e=u%10;return u+(a[e]||a[u%100-e]||a[u>=100?100:null])},week:{dow:1,doy:7}})}(s(16738))},14572:function(E,C,s){!function(r){"use strict";function c(e,f,m){return"m"===m?f?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===m?f?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+function a(e,f){var m=e.split("_");return f%10==1&&f%100!=11?m[0]:f%10>=2&&f%10<=4&&(f%100<10||f%100>=20)?m[1]:m[2]}({ss:f?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:f?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:f?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[m],+e)}r.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:c,mm:c,h:c,hh:c,d:"\u0434\u0437\u0435\u043d\u044c",dd:c,M:"\u043c\u0435\u0441\u044f\u0446",MM:c,y:"\u0433\u043e\u0434",yy:c},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,f,m){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,f){switch(f){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}})}(s(16738))},3276:function(E,C,s){!function(r){"use strict";r.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",w:"\u0441\u0435\u0434\u043c\u0438\u0446\u0430",ww:"%d \u0441\u0435\u0434\u043c\u0438\u0446\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(c){var u=c%10,e=c%100;return 0===c?c+"-\u0435\u0432":0===e?c+"-\u0435\u043d":e>10&&e<20?c+"-\u0442\u0438":1===u?c+"-\u0432\u0438":2===u?c+"-\u0440\u0438":7===u||8===u?c+"-\u043c\u0438":c+"-\u0442\u0438"},week:{dow:1,doy:7}})}(s(16738))},93344:function(E,C,s){!function(r){"use strict";r.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(s(16738))},83990:function(E,C,s){!function(r){"use strict";var a={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},c={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};r.defineLocale("bn-bd",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},meridiemParse:/\u09b0\u09be\u09a4|\u09ad\u09cb\u09b0|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be|\u09b0\u09be\u09a4/,meridiemHour:function(e,f){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===f?e<4?e:e+12:"\u09ad\u09cb\u09b0"===f||"\u09b8\u0995\u09be\u09b2"===f?e:"\u09a6\u09c1\u09aa\u09c1\u09b0"===f?e>=3?e:e+12:"\u09ac\u09bf\u0995\u09be\u09b2"===f||"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be"===f?e+12:void 0},meridiem:function(e,f,m){return e<4?"\u09b0\u09be\u09a4":e<6?"\u09ad\u09cb\u09b0":e<12?"\u09b8\u0995\u09be\u09b2":e<15?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<18?"\u09ac\u09bf\u0995\u09be\u09b2":e<20?"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}})}(s(16738))},58985:function(E,C,s){!function(r){"use strict";var a={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},c={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};r.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,f){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===f&&e>=4||"\u09a6\u09c1\u09aa\u09c1\u09b0"===f&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===f?e+12:e},meridiem:function(e,f,m){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}})}(s(16738))},94391:function(E,C,s){!function(r){"use strict";var a={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},c={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};r.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,f){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===f&&e>=4||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===f&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===f?e+12:e},meridiem:function(e,f,m){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}})}(s(16738))},46728:function(E,C,s){!function(r){"use strict";function a(J,F,X){return J+" "+function e(J,F){return 2===F?function f(J){var F={m:"v",b:"v",d:"z"};return void 0===F[J.charAt(0)]?J:F[J.charAt(0)]+J.substring(1)}(J):J}({mm:"munutenn",MM:"miz",dd:"devezh"}[X],J)}function u(J){return J>9?u(J%10):J}var m=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],T=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,W=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];r.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:W,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:W,monthsRegex:T,monthsShortRegex:T,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:m,longMonthsParse:m,shortMonthsParse:m,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:a,h:"un eur",hh:"%d eur",d:"un devezh",dd:a,M:"ur miz",MM:a,y:"ur bloaz",yy:function c(J){switch(u(J)){case 1:case 3:case 4:case 5:case 9:return J+" bloaz";default:return J+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(J){return J+(1===J?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(J){return"g.m."===J},meridiem:function(J,F,X){return J<12?"a.m.":"g.m."}})}(s(16738))},5536:function(E,C,s){!function(r){"use strict";function a(u,e,f){var m=u+" ";switch(f){case"ss":return m+(1===u?"sekunda":2===u||3===u||4===u?"sekunde":"sekundi");case"m":return e?"jedna minuta":"jedne minute";case"mm":return m+(1===u?"minuta":2===u||3===u||4===u?"minute":"minuta");case"h":return e?"jedan sat":"jednog sata";case"hh":return m+(1===u?"sat":2===u||3===u||4===u?"sata":"sati");case"dd":return m+(1===u?"dan":"dana");case"MM":return m+(1===u?"mjesec":2===u||3===u||4===u?"mjeseca":"mjeseci");case"yy":return m+(1===u?"godina":2===u||3===u||4===u?"godine":"godina")}}r.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(s(16738))},41043:function(E,C,s){!function(r){"use strict";r.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(c,u){var e=1===c?"r":2===c?"n":3===c?"r":4===c?"t":"\xe8";return("w"===u||"W"===u)&&(e="a"),c+e},week:{dow:1,doy:4}})}(s(16738))},70420:function(E,C,s){!function(r){"use strict";var a={format:"leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),standalone:"ledna_\xfanora_b\u0159ezna_dubna_kv\u011btna_\u010dervna_\u010dervence_srpna_z\xe1\u0159\xed_\u0159\xedjna_listopadu_prosince".split("_")},c="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),u=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],e=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function f(M){return M>1&&M<5&&1!=~~(M/10)}function m(M,w,D,U){var W=M+" ";switch(D){case"s":return w||U?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return w||U?W+(f(M)?"sekundy":"sekund"):W+"sekundami";case"m":return w?"minuta":U?"minutu":"minutou";case"mm":return w||U?W+(f(M)?"minuty":"minut"):W+"minutami";case"h":return w?"hodina":U?"hodinu":"hodinou";case"hh":return w||U?W+(f(M)?"hodiny":"hodin"):W+"hodinami";case"d":return w||U?"den":"dnem";case"dd":return w||U?W+(f(M)?"dny":"dn\xed"):W+"dny";case"M":return w||U?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return w||U?W+(f(M)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):W+"m\u011bs\xedci";case"y":return w||U?"rok":"rokem";case"yy":return w||U?W+(f(M)?"roky":"let"):W+"lety"}}r.defineLocale("cs",{months:a,monthsShort:c,monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:m,ss:m,m,mm:m,h:m,hh:m,d:m,dd:m,M:m,MM:m,y:m,yy:m},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},33513:function(E,C,s){!function(r){"use strict";r.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(c){return c+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(c)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(c)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}})}(s(16738))},6771:function(E,C,s){!function(r){"use strict";r.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(c){var e="";return c>20?e=40===c||50===c||60===c||80===c||100===c?"fed":"ain":c>0&&(e=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][c]),c+e},week:{dow:1,doy:4}})}(s(16738))},47978:function(E,C,s){!function(r){"use strict";r.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},25204:function(E,C,s){!function(r){"use strict";function a(u,e,f,m){var T={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[u+" Tage",u+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[u+" Monate",u+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[u+" Jahre",u+" Jahren"]};return e?T[f][0]:T[f][1]}r.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,w:a,ww:"%d Wochen",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},2653:function(E,C,s){!function(r){"use strict";function a(u,e,f,m){var T={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[u+" Tage",u+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[u+" Monate",u+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[u+" Jahre",u+" Jahren"]};return e?T[f][0]:T[f][1]}r.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,w:a,ww:"%d Wochen",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},46061:function(E,C,s){!function(r){"use strict";function a(u,e,f,m){var T={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[u+" Tage",u+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[u+" Monate",u+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[u+" Jahre",u+" Jahren"]};return e?T[f][0]:T[f][1]}r.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,w:a,ww:"%d Wochen",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},85:function(E,C,s){!function(r){"use strict";var a=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],c=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];r.defineLocale("dv",{months:a,monthsShort:a,weekdays:c,weekdaysShort:c,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,f,m){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}})}(s(16738))},8579:function(E,C,s){!function(r){"use strict";r.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(u,e){return u?"string"==typeof e&&/D/.test(e.substring(0,e.indexOf("MMMM")))?this._monthsGenitiveEl[u.month()]:this._monthsNominativeEl[u.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(u,e,f){return u>11?f?"\u03bc\u03bc":"\u039c\u039c":f?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(u){return"\u03bc"===(u+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){return 6===this.day()?"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT":"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"},sameElse:"L"},calendar:function(u,e){var f=this._calendarEl[u],m=e&&e.hours();return function a(u){return typeof Function<"u"&&u instanceof Function||"[object Function]"===Object.prototype.toString.call(u)}(f)&&(f=f.apply(e)),f.replace("{}",m%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}})}(s(16738))},25724:function(E,C,s){!function(r){"use strict";r.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:0,doy:4}})}(s(16738))},10525:function(E,C,s){!function(r){"use strict";r.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")}})}(s(16738))},52847:function(E,C,s){!function(r){"use strict";r.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(s(16738))},67216:function(E,C,s){!function(r){"use strict";r.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(s(16738))},39305:function(E,C,s){!function(r){"use strict";r.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")}})}(s(16738))},73364:function(E,C,s){!function(r){"use strict";r.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:0,doy:6}})}(s(16738))},79130:function(E,C,s){!function(r){"use strict";r.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(s(16738))},11161:function(E,C,s){!function(r){"use strict";r.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(s(16738))},50802:function(E,C,s){!function(r){"use strict";r.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(c){return"p"===c.charAt(0).toLowerCase()},meridiem:function(c,u,e){return c>11?e?"p.t.m.":"P.T.M.":e?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(s(16738))},45551:function(E,C,s){!function(r){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),u=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],e=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;r.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(m,T){return m?/-MMM-/.test(T)?c[m.month()]:a[m.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(s(16738))},75615:function(E,C,s){!function(r){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),u=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],e=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;r.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(m,T){return m?/-MMM-/.test(T)?c[m.month()]:a[m.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:4},invalidDate:"Fecha inv\xe1lida"})}(s(16738))},64790:function(E,C,s){!function(r){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),u=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],e=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;r.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(m,T){return m?/-MMM-/.test(T)?c[m.month()]:a[m.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}})}(s(16738))},40328:function(E,C,s){!function(r){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),c="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),u=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],e=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;r.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(m,T){return m?/-MMM-/.test(T)?c[m.month()]:a[m.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"})}(s(16738))},96389:function(E,C,s){!function(r){"use strict";function a(u,e,f,m){var T={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[u+"sekundi",u+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[u+" minuti",u+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[u+" tunni",u+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[u+" kuu",u+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[u+" aasta",u+" aastat"]};return e?T[f][2]?T[f][2]:T[f][1]:m?T[f][0]:T[f][1]}r.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:"%d p\xe4eva",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},52961:function(E,C,s){!function(r){"use strict";r.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(s(16738))},26151:function(E,C,s){!function(r){"use strict";var a={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},c={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};r.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,f,m){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(f){return c[f]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}})}(s(16738))},7997:function(E,C,s){!function(r){"use strict";var a="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),c=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",a[7],a[8],a[9]];function u(m,T,M,w){var D="";switch(M){case"s":return w?"muutaman sekunnin":"muutama sekunti";case"ss":D=w?"sekunnin":"sekuntia";break;case"m":return w?"minuutin":"minuutti";case"mm":D=w?"minuutin":"minuuttia";break;case"h":return w?"tunnin":"tunti";case"hh":D=w?"tunnin":"tuntia";break;case"d":return w?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":D=w?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return w?"kuukauden":"kuukausi";case"MM":D=w?"kuukauden":"kuukautta";break;case"y":return w?"vuoden":"vuosi";case"yy":D=w?"vuoden":"vuotta"}return function e(m,T){return m<10?T?c[m]:a[m]:m}(m,w)+" "+D}r.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:u,ss:u,m:u,mm:u,h:u,hh:u,d:u,dd:u,M:u,MM:u,y:u,yy:u},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},58898:function(E,C,s){!function(r){"use strict";r.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(c){return c},week:{dow:1,doy:4}})}(s(16738))},37779:function(E,C,s){!function(r){"use strict";r.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},3287:function(E,C,s){!function(r){"use strict";r.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(c,u){switch(u){default:case"M":case"Q":case"D":case"DDD":case"d":return c+(1===c?"er":"e");case"w":case"W":return c+(1===c?"re":"e")}}})}(s(16738))},38867:function(E,C,s){!function(r){"use strict";r.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(c,u){switch(u){default:case"M":case"Q":case"D":case"DDD":case"d":return c+(1===c?"er":"e");case"w":case"W":return c+(1===c?"re":"e")}},week:{dow:1,doy:4}})}(s(16738))},28174:function(E,C,s){!function(r){"use strict";var u=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,e=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i];r.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:u,monthsShortRegex:u,monthsStrictRegex:/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,monthsShortStrictRegex:/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,monthsParse:e,longMonthsParse:e,shortMonthsParse:e,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(m,T){switch(T){case"D":return m+(1===m?"er":"");default:case"M":case"Q":case"DDD":case"d":return m+(1===m?"er":"e");case"w":case"W":return m+(1===m?"re":"e")}},week:{dow:1,doy:4}})}(s(16738))},50452:function(E,C,s){!function(r){"use strict";var a="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),c="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");r.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,f){return e?/-MMM-/.test(f)?c[e.month()]:a[e.month()]:a},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(s(16738))},45014:function(E,C,s){!function(r){"use strict";r.defineLocale("ga",{months:["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],weekdaysShort:["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],weekdaysMin:["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(T){return T+(1===T?"d":T%10==2?"na":"mh")},week:{dow:1,doy:4}})}(s(16738))},74127:function(E,C,s){!function(r){"use strict";r.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(T){return T+(1===T?"d":T%10==2?"na":"mh")},week:{dow:1,doy:4}})}(s(16738))},72124:function(E,C,s){!function(r){"use strict";r.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(c){return 0===c.indexOf("un")?"n"+c:"en "+c},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(s(16738))},6444:function(E,C,s){!function(r){"use strict";function a(u,e,f,m){var T={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[u+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",u+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[u+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",u+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[u+" \u0935\u0930\u093e\u0902\u0928\u0940",u+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[u+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",u+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[u+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",u+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[u+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",u+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return m?T[f][0]:T[f][1]}r.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(u,e){return"D"===e?u+"\u0935\u0947\u0930":u},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(u,e){return 12===u&&(u=0),"\u0930\u093e\u0924\u0940"===e?u<4?u:u+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===e?u:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===e?u>12?u:u+12:"\u0938\u093e\u0902\u091c\u0947"===e?u+12:void 0},meridiem:function(u,e,f){return u<4?"\u0930\u093e\u0924\u0940":u<12?"\u0938\u0915\u093e\u0933\u0940\u0902":u<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":u<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}})}(s(16738))},37953:function(E,C,s){!function(r){"use strict";function a(u,e,f,m){var T={s:["thoddea sekondamni","thodde sekond"],ss:[u+" sekondamni",u+" sekond"],m:["eka mintan","ek minut"],mm:[u+" mintamni",u+" mintam"],h:["eka voran","ek vor"],hh:[u+" voramni",u+" voram"],d:["eka disan","ek dis"],dd:[u+" disamni",u+" dis"],M:["eka mhoinean","ek mhoino"],MM:[u+" mhoineamni",u+" mhoine"],y:["eka vorsan","ek voros"],yy:[u+" vorsamni",u+" vorsam"]};return m?T[f][0]:T[f][1]}r.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(u,e){return"D"===e?u+"er":u},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(u,e){return 12===u&&(u=0),"rati"===e?u<4?u:u+12:"sokallim"===e?u:"donparam"===e?u>12?u:u+12:"sanje"===e?u+12:void 0},meridiem:function(u,e,f){return u<4?"rati":u<12?"sokallim":u<16?"donparam":u<20?"sanje":"rati"}})}(s(16738))},76604:function(E,C,s){!function(r){"use strict";var a={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},c={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};r.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,f){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===f?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===f?e:"\u0aac\u0aaa\u0acb\u0ab0"===f?e>=10?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===f?e+12:void 0},meridiem:function(e,f,m){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}})}(s(16738))},1222:function(E,C,s){!function(r){"use strict";r.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(c){return 2===c?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":c+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(c){return 2===c?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":c+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(c){return 2===c?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":c+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(c){return 2===c?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":c%10==0&&10!==c?c+" \u05e9\u05e0\u05d4":c+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(c){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(c)},meridiem:function(c,u,e){return c<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":c<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":c<12?e?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":c<18?e?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}})}(s(16738))},74235:function(E,C,s){!function(r){"use strict";var a={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},c={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},u=[/^\u091c\u0928/i,/^\u092b\u093c\u0930|\u092b\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924\u0902|\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935|\u0928\u0935\u0902/i,/^\u0926\u093f\u0938\u0902|\u0926\u093f\u0938/i];r.defineLocale("hi",{months:{format:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),standalone:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u0902\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u0902\u092c\u0930_\u0926\u093f\u0938\u0902\u092c\u0930".split("_")},monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},monthsParse:u,longMonthsParse:u,shortMonthsParse:[/^\u091c\u0928/i,/^\u092b\u093c\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935/i,/^\u0926\u093f\u0938/i],monthsRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsShortRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsStrictRegex:/^(\u091c\u0928\u0935\u0930\u0940?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908?|\u0905\u0917\u0938\u094d\u0924?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924?\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930?)/i,monthsShortStrictRegex:/^(\u091c\u0928\.?|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\.?|\u0905\u0917\.?|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\.?|\u0926\u093f\u0938\.?)/i,calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(m){return m.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(T){return c[T]})},postformat:function(m){return m.replace(/\d/g,function(T){return a[T]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(m,T){return 12===m&&(m=0),"\u0930\u093e\u0924"===T?m<4?m:m+12:"\u0938\u0941\u092c\u0939"===T?m:"\u0926\u094b\u092a\u0939\u0930"===T?m>=10?m:m+12:"\u0936\u093e\u092e"===T?m+12:void 0},meridiem:function(m,T,M){return m<4?"\u0930\u093e\u0924":m<10?"\u0938\u0941\u092c\u0939":m<17?"\u0926\u094b\u092a\u0939\u0930":m<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}})}(s(16738))},622:function(E,C,s){!function(r){"use strict";function a(u,e,f){var m=u+" ";switch(f){case"ss":return m+(1===u?"sekunda":2===u||3===u||4===u?"sekunde":"sekundi");case"m":return e?"jedna minuta":"jedne minute";case"mm":return m+(1===u?"minuta":2===u||3===u||4===u?"minute":"minuta");case"h":return e?"jedan sat":"jednog sata";case"hh":return m+(1===u?"sat":2===u||3===u||4===u?"sata":"sati");case"dd":return m+(1===u?"dan":"dana");case"MM":return m+(1===u?"mjesec":2===u||3===u||4===u?"mjeseca":"mjeseci");case"yy":return m+(1===u?"godina":2===u||3===u||4===u?"godine":"godina")}}r.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(s(16738))},37735:function(E,C,s){!function(r){"use strict";var a="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function c(f,m,T,M){var w=f;switch(T){case"s":return M||m?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return w+(M||m)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(M||m?" perc":" perce");case"mm":return w+(M||m?" perc":" perce");case"h":return"egy"+(M||m?" \xf3ra":" \xf3r\xe1ja");case"hh":return w+(M||m?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(M||m?" nap":" napja");case"dd":return w+(M||m?" nap":" napja");case"M":return"egy"+(M||m?" h\xf3nap":" h\xf3napja");case"MM":return w+(M||m?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(M||m?" \xe9v":" \xe9ve");case"yy":return w+(M||m?" \xe9v":" \xe9ve")}return""}function u(f){return(f?"":"[m\xfalt] ")+"["+a[this.day()]+"] LT[-kor]"}r.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan._feb._m\xe1rc._\xe1pr._m\xe1j._j\xfan._j\xfal._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(f){return"u"===f.charAt(1).toLowerCase()},meridiem:function(f,m,T){return f<12?!0===T?"de":"DE":!0===T?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return u.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return u.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:c,ss:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},90402:function(E,C,s){!function(r){"use strict";r.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(c){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(c)},meridiem:function(c){return c<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":c<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":c<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(c,u){switch(u){case"DDD":case"w":case"W":case"DDDo":return 1===c?c+"-\u056b\u0576":c+"-\u0580\u0564";default:return c}},week:{dow:1,doy:7}})}(s(16738))},59187:function(E,C,s){!function(r){"use strict";r.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(c,u){return 12===c&&(c=0),"pagi"===u?c:"siang"===u?c>=11?c:c+12:"sore"===u||"malam"===u?c+12:void 0},meridiem:function(c,u,e){return c<11?"pagi":c<15?"siang":c<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}})}(s(16738))},30536:function(E,C,s){!function(r){"use strict";function a(e){return e%100==11||e%10!=1}function c(e,f,m,T){var M=e+" ";switch(m){case"s":return f||T?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return a(e)?M+(f||T?"sek\xfandur":"sek\xfandum"):M+"sek\xfanda";case"m":return f?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return a(e)?M+(f||T?"m\xedn\xfatur":"m\xedn\xfatum"):f?M+"m\xedn\xfata":M+"m\xedn\xfatu";case"hh":return a(e)?M+(f||T?"klukkustundir":"klukkustundum"):M+"klukkustund";case"d":return f?"dagur":T?"dag":"degi";case"dd":return a(e)?f?M+"dagar":M+(T?"daga":"d\xf6gum"):f?M+"dagur":M+(T?"dag":"degi");case"M":return f?"m\xe1nu\xf0ur":T?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return a(e)?f?M+"m\xe1nu\xf0ir":M+(T?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):f?M+"m\xe1nu\xf0ur":M+(T?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return f||T?"\xe1r":"\xe1ri";case"yy":return a(e)?M+(f||T?"\xe1r":"\xe1rum"):M+(f||T?"\xe1r":"\xe1ri")}}r.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:c,ss:c,m:c,mm:c,h:"klukkustund",hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},94667:function(E,C,s){!function(r){"use strict";r.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){return 0===this.day()?"[la scorsa] dddd [alle] LT":"[lo scorso] dddd [alle] LT"},sameElse:"L"},relativeTime:{future:function(c){return(/^[0-9].+$/.test(c)?"tra":"in")+" "+c},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(s(16738))},35007:function(E,C,s){!function(r){"use strict";r.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){return 0===this.day()?"[La scorsa] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT":"[Lo scorso] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(s(16738))},62093:function(E,C,s){!function(r){"use strict";r.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(c,u){return"\u5143"===u[1]?1:parseInt(u[1]||c,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(c){return"\u5348\u5f8c"===c},meridiem:function(c,u,e){return c<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(c){return c.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(c){return this.week()!==c.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(c,u){switch(u){case"y":return 1===c?"\u5143\u5e74":c+"\u5e74";case"d":case"D":case"DDD":return c+"\u65e5";default:return c}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}})}(s(16738))},80059:function(E,C,s){!function(r){"use strict";r.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(c,u){return 12===c&&(c=0),"enjing"===u?c:"siyang"===u?c>=11?c:c+12:"sonten"===u||"ndalu"===u?c+12:void 0},meridiem:function(c,u,e){return c<11?"enjing":c<15?"siyang":c<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(s(16738))},66870:function(E,C,s){!function(r){"use strict";r.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(c){return c.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,function(u,e,f){return"\u10d8"===f?e+"\u10e8\u10d8":e+f+"\u10e8\u10d8"})},past:function(c){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(c)?c.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(c)?c.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):c},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(c){return 0===c?c:1===c?c+"-\u10da\u10d8":c<20||c<=100&&c%20==0||c%100==0?"\u10db\u10d4-"+c:c+"-\u10d4"},week:{dow:1,doy:7}})}(s(16738))},80880:function(E,C,s){!function(r){"use strict";var a={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};r.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(u){return u+(a[u]||a[u%10]||a[u>=100?100:null])},week:{dow:1,doy:7}})}(s(16738))},1083:function(E,C,s){!function(r){"use strict";var a={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},c={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};r.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,f,m){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},week:{dow:1,doy:4}})}(s(16738))},68785:function(E,C,s){!function(r){"use strict";var a={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},c={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};r.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,f){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===f?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===f?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===f?e>=10?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===f?e+12:void 0},meridiem:function(e,f,m){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}})}(s(16738))},21721:function(E,C,s){!function(r){"use strict";r.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(c,u){switch(u){case"d":case"D":case"DDD":return c+"\uc77c";case"M":return c+"\uc6d4";case"w":case"W":return c+"\uc8fc";default:return c}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(c){return"\uc624\ud6c4"===c},meridiem:function(c,u,e){return c<12?"\uc624\uc804":"\uc624\ud6c4"}})}(s(16738))},37851:function(E,C,s){!function(r){"use strict";var a={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},c={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},u=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"];r.defineLocale("ku",{months:u,monthsShort:u,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(f){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(f)},meridiem:function(f,m,T){return f<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(f){return f.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(m){return c[m]}).replace(/\u060c/g,",")},postformat:function(f){return f.replace(/\d/g,function(m){return a[m]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(s(16738))},1727:function(E,C,s){!function(r){"use strict";var a={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};r.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(u){return u+(a[u]||a[u%10]||a[u>=100?100:null])},week:{dow:1,doy:7}})}(s(16738))},40346:function(E,C,s){!function(r){"use strict";function a(m,T,M,w){var D={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return T?D[M][0]:D[M][1]}function e(m){if(m=parseInt(m,10),isNaN(m))return!1;if(m<0)return!0;if(m<10)return 4<=m&&m<=7;if(m<100){var T=m%10;return e(0===T?m/10:T)}if(m<1e4){for(;m>=10;)m/=10;return e(m)}return e(m/=1e3)}r.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function c(m){return e(m.substr(0,m.indexOf(" ")))?"a "+m:"an "+m},past:function u(m){return e(m.substr(0,m.indexOf(" ")))?"viru "+m:"virun "+m},s:"e puer Sekonnen",ss:"%d Sekonnen",m:a,mm:"%d Minutten",h:a,hh:"%d Stonnen",d:a,dd:"%d Deeg",M:a,MM:"%d M\xe9int",y:a,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},93002:function(E,C,s){!function(r){"use strict";r.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(c){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===c},meridiem:function(c,u,e){return c<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(c){return"\u0e97\u0eb5\u0ec8"+c}})}(s(16738))},64035:function(E,C,s){!function(r){"use strict";var a={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function u(M,w,D,U){return w?f(D)[0]:U?f(D)[1]:f(D)[2]}function e(M){return M%10==0||M>10&&M<20}function f(M){return a[M].split("_")}function m(M,w,D,U){var W=M+" ";return 1===M?W+u(0,w,D[0],U):w?W+(e(M)?f(D)[1]:f(D)[0]):U?W+f(D)[1]:W+(e(M)?f(D)[1]:f(D)[2])}r.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function c(M,w,D,U){return w?"kelios sekund\u0117s":U?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:m,m:u,mm:m,h:u,hh:m,d:u,dd:m,M:u,MM:m,y:u,yy:m},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(M){return M+"-oji"},week:{dow:1,doy:4}})}(s(16738))},56927:function(E,C,s){!function(r){"use strict";var a={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function c(T,M,w){return w?M%10==1&&M%100!=11?T[2]:T[3]:M%10==1&&M%100!=11?T[0]:T[1]}function u(T,M,w){return T+" "+c(a[w],T,M)}function e(T,M,w){return c(a[w],T,M)}r.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function f(T,M){return M?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:u,m:e,mm:u,h:e,hh:u,d:e,dd:u,M:e,MM:u,y:e,yy:u},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},5634:function(E,C,s){!function(r){"use strict";var a={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(u,e){return 1===u?e[0]:u>=2&&u<=4?e[1]:e[2]},translate:function(u,e,f){var m=a.words[f];return 1===f.length?e?m[0]:m[1]:u+" "+a.correctGrammaticalCase(u,m)}};r.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"dan",dd:a.translate,M:"mjesec",MM:a.translate,y:"godinu",yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(s(16738))},94173:function(E,C,s){!function(r){"use strict";r.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(s(16738))},86320:function(E,C,s){!function(r){"use strict";r.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(c){var u=c%10,e=c%100;return 0===c?c+"-\u0435\u0432":0===e?c+"-\u0435\u043d":e>10&&e<20?c+"-\u0442\u0438":1===u?c+"-\u0432\u0438":2===u?c+"-\u0440\u0438":7===u||8===u?c+"-\u043c\u0438":c+"-\u0442\u0438"},week:{dow:1,doy:7}})}(s(16738))},11705:function(E,C,s){!function(r){"use strict";r.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(c,u){return 12===c&&(c=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===u&&c>=4||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===u||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===u?c+12:c},meridiem:function(c,u,e){return c<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":c<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":c<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":c<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}})}(s(16738))},31062:function(E,C,s){!function(r){"use strict";function a(u,e,f,m){switch(f){case"s":return e?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return u+(e?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return u+(e?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return u+(e?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return u+(e?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return u+(e?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return u+(e?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return u}}r.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(u){return"\u04ae\u0425"===u},meridiem:function(u,e,f){return u<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(u,e){switch(e){case"d":case"D":case"DDD":return u+" \u04e9\u0434\u04e9\u0440";default:return u}}})}(s(16738))},92805:function(E,C,s){!function(r){"use strict";var a={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},c={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function u(f,m,T,M){var w="";if(m)switch(T){case"s":w="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":w="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":w="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":w="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":w="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":w="%d \u0924\u093e\u0938";break;case"d":w="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":w="%d \u0926\u093f\u0935\u0938";break;case"M":w="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":w="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":w="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":w="%d \u0935\u0930\u094d\u0937\u0947"}else switch(T){case"s":w="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":w="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":w="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":w="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":w="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":w="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":w="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":w="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":w="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":w="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":w="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":w="%d \u0935\u0930\u094d\u0937\u093e\u0902"}return w.replace(/%d/i,f)}r.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:u,ss:u,m:u,mm:u,h:u,hh:u,d:u,dd:u,M:u,MM:u,y:u,yy:u},preparse:function(f){return f.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(m){return c[m]})},postformat:function(f){return f.replace(/\d/g,function(m){return a[m]})},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(f,m){return 12===f&&(f=0),"\u092a\u0939\u093e\u091f\u0947"===m||"\u0938\u0915\u093e\u0933\u0940"===m?f:"\u0926\u0941\u092a\u093e\u0930\u0940"===m||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===m||"\u0930\u093e\u0924\u094d\u0930\u0940"===m?f>=12?f:f+12:void 0},meridiem:function(f,m,T){return f>=0&&f<6?"\u092a\u0939\u093e\u091f\u0947":f<12?"\u0938\u0915\u093e\u0933\u0940":f<17?"\u0926\u0941\u092a\u093e\u0930\u0940":f<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}})}(s(16738))},59900:function(E,C,s){!function(r){"use strict";r.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(c,u){return 12===c&&(c=0),"pagi"===u?c:"tengahari"===u?c>=11?c:c+12:"petang"===u||"malam"===u?c+12:void 0},meridiem:function(c,u,e){return c<11?"pagi":c<15?"tengahari":c<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(s(16738))},11341:function(E,C,s){!function(r){"use strict";r.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(c,u){return 12===c&&(c=0),"pagi"===u?c:"tengahari"===u?c>=11?c:c+12:"petang"===u||"malam"===u?c+12:void 0},meridiem:function(c,u,e){return c<11?"pagi":c<15?"tengahari":c<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(s(16738))},37734:function(E,C,s){!function(r){"use strict";r.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(s(16738))},19034:function(E,C,s){!function(r){"use strict";var a={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},c={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};r.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},week:{dow:1,doy:4}})}(s(16738))},9324:function(E,C,s){!function(r){"use strict";r.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",w:"en uke",ww:"%d uker",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},46495:function(E,C,s){!function(r){"use strict";var a={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},c={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};r.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,f){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===f?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===f?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===f?e>=10?e:e+12:"\u0938\u093e\u0901\u091d"===f?e+12:void 0},meridiem:function(e,f,m){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}})}(s(16738))},76272:function(E,C,s){!function(r){"use strict";var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),c="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),u=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],e=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;r.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(m,T){return m?/-MMM-/.test(T)?c[m.month()]:a[m.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(m){return m+(1===m||8===m||m>=20?"ste":"de")},week:{dow:1,doy:4}})}(s(16738))},70673:function(E,C,s){!function(r){"use strict";var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),c="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),u=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],e=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;r.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(m,T){return m?/-MMM-/.test(T)?c[m.month()]:a[m.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",w:"\xe9\xe9n week",ww:"%d weken",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(m){return m+(1===m||8===m||m>=20?"ste":"de")},week:{dow:1,doy:4}})}(s(16738))},72486:function(E,C,s){!function(r){"use strict";r.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},46219:function(E,C,s){!function(r){"use strict";r.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(c,u){var e=1===c?"r":2===c?"n":3===c?"r":4===c?"t":"\xe8";return("w"===u||"W"===u)&&(e="a"),c+e},week:{dow:1,doy:4}})}(s(16738))},2829:function(E,C,s){!function(r){"use strict";var a={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},c={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};r.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,f){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===f?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===f?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===f?e>=10?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===f?e+12:void 0},meridiem:function(e,f,m){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}})}(s(16738))},78444:function(E,C,s){!function(r){"use strict";var a="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),c="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_"),u=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^pa\u017a/i,/^lis/i,/^gru/i];function e(T){return T%10<5&&T%10>1&&~~(T/10)%10!=1}function f(T,M,w){var D=T+" ";switch(w){case"ss":return D+(e(T)?"sekundy":"sekund");case"m":return M?"minuta":"minut\u0119";case"mm":return D+(e(T)?"minuty":"minut");case"h":return M?"godzina":"godzin\u0119";case"hh":return D+(e(T)?"godziny":"godzin");case"ww":return D+(e(T)?"tygodnie":"tygodni");case"MM":return D+(e(T)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return D+(e(T)?"lata":"lat")}}r.defineLocale("pl",{months:function(T,M){return T?/D MMMM/.test(M)?c[T.month()]:a[T.month()]:a},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:f,m:f,mm:f,h:f,hh:f,d:"1 dzie\u0144",dd:"%d dni",w:"tydzie\u0144",ww:f,M:"miesi\u0105c",MM:f,y:"rok",yy:f},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},66117:function(E,C,s){!function(r){"use strict";r.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",invalidDate:"Data inv\xe1lida"})}(s(16738))},53170:function(E,C,s){!function(r){"use strict";r.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(s(16738))},96587:function(E,C,s){!function(r){"use strict";function a(u,e,f){var T=" ";return(u%100>=20||u>=100&&u%100==0)&&(T=" de "),u+T+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"s\u0103pt\u0103m\xe2ni",MM:"luni",yy:"ani"}[f]}r.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:a,m:"un minut",mm:a,h:"o or\u0103",hh:a,d:"o zi",dd:a,w:"o s\u0103pt\u0103m\xe2n\u0103",ww:a,M:"o lun\u0103",MM:a,y:"un an",yy:a},week:{dow:1,doy:7}})}(s(16738))},39264:function(E,C,s){!function(r){"use strict";function c(f,m,T){return"m"===T?m?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":f+" "+function a(f,m){var T=f.split("_");return m%10==1&&m%100!=11?T[0]:m%10>=2&&m%10<=4&&(m%100<10||m%100>=20)?T[1]:T[2]}({ss:m?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:m?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",ww:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043d\u0435\u0434\u0435\u043b\u0438_\u043d\u0435\u0434\u0435\u043b\u044c",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[T],+f)}var u=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];r.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:u,longMonthsParse:u,shortMonthsParse:u,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(f){if(f.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(f){if(f.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:c,m:c,mm:c,h:"\u0447\u0430\u0441",hh:c,d:"\u0434\u0435\u043d\u044c",dd:c,w:"\u043d\u0435\u0434\u0435\u043b\u044f",ww:c,M:"\u043c\u0435\u0441\u044f\u0446",MM:c,y:"\u0433\u043e\u0434",yy:c},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(f){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(f)},meridiem:function(f,m,T){return f<4?"\u043d\u043e\u0447\u0438":f<12?"\u0443\u0442\u0440\u0430":f<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(f,m){switch(m){case"M":case"d":case"DDD":return f+"-\u0439";case"D":return f+"-\u0433\u043e";case"w":case"W":return f+"-\u044f";default:return f}},week:{dow:1,doy:4}})}(s(16738))},42135:function(E,C,s){!function(r){"use strict";var a=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],c=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];r.defineLocale("sd",{months:a,monthsShort:a,weekdays:c,weekdaysShort:c,weekdaysMin:c,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,f,m){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}})}(s(16738))},95366:function(E,C,s){!function(r){"use strict";r.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},93379:function(E,C,s){!function(r){"use strict";r.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(c){return c+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(c){return"\u0db4.\u0dc0."===c||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===c},meridiem:function(c,u,e){return c>11?e?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":e?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}})}(s(16738))},46143:function(E,C,s){!function(r){"use strict";var a="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),c="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function u(m){return m>1&&m<5}function e(m,T,M,w){var D=m+" ";switch(M){case"s":return T||w?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return T||w?D+(u(m)?"sekundy":"sek\xfand"):D+"sekundami";case"m":return T?"min\xfata":w?"min\xfatu":"min\xfatou";case"mm":return T||w?D+(u(m)?"min\xfaty":"min\xfat"):D+"min\xfatami";case"h":return T?"hodina":w?"hodinu":"hodinou";case"hh":return T||w?D+(u(m)?"hodiny":"hod\xedn"):D+"hodinami";case"d":return T||w?"de\u0148":"d\u0148om";case"dd":return T||w?D+(u(m)?"dni":"dn\xed"):D+"d\u0148ami";case"M":return T||w?"mesiac":"mesiacom";case"MM":return T||w?D+(u(m)?"mesiace":"mesiacov"):D+"mesiacmi";case"y":return T||w?"rok":"rokom";case"yy":return T||w?D+(u(m)?"roky":"rokov"):D+"rokmi"}}r.defineLocale("sk",{months:a,monthsShort:c,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:case 4:case 5:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},196:function(E,C,s){!function(r){"use strict";function a(u,e,f,m){var T=u+" ";switch(f){case"s":return e||m?"nekaj sekund":"nekaj sekundami";case"ss":return T+(1===u?e?"sekundo":"sekundi":2===u?e||m?"sekundi":"sekundah":u<5?e||m?"sekunde":"sekundah":"sekund");case"m":return e?"ena minuta":"eno minuto";case"mm":return T+(1===u?e?"minuta":"minuto":2===u?e||m?"minuti":"minutama":u<5?e||m?"minute":"minutami":e||m?"minut":"minutami");case"h":return e?"ena ura":"eno uro";case"hh":return T+(1===u?e?"ura":"uro":2===u?e||m?"uri":"urama":u<5?e||m?"ure":"urami":e||m?"ur":"urami");case"d":return e||m?"en dan":"enim dnem";case"dd":return T+(1===u?e||m?"dan":"dnem":2===u?e||m?"dni":"dnevoma":e||m?"dni":"dnevi");case"M":return e||m?"en mesec":"enim mesecem";case"MM":return T+(1===u?e||m?"mesec":"mesecem":2===u?e||m?"meseca":"mesecema":u<5?e||m?"mesece":"meseci":e||m?"mesecev":"meseci");case"y":return e||m?"eno leto":"enim letom";case"yy":return T+(1===u?e||m?"leto":"letom":2===u?e||m?"leti":"letoma":u<5?e||m?"leta":"leti":e||m?"let":"leti")}}r.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(s(16738))},21082:function(E,C,s){!function(r){"use strict";r.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(c){return"M"===c.charAt(0)},meridiem:function(c,u,e){return c<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},98963:function(E,C,s){!function(r){"use strict";var a={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0438\u043d\u0443\u0442\u0430"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0430","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],d:["\u0458\u0435\u0434\u0430\u043d \u0434\u0430\u043d","\u0458\u0435\u0434\u043d\u043e\u0433 \u0434\u0430\u043d\u0430"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],M:["\u0458\u0435\u0434\u0430\u043d \u043c\u0435\u0441\u0435\u0446","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0435\u0441\u0435\u0446\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],y:["\u0458\u0435\u0434\u043d\u0443 \u0433\u043e\u0434\u0438\u043d\u0443","\u0458\u0435\u0434\u043d\u0435 \u0433\u043e\u0434\u0438\u043d\u0435"],yy:["\u0433\u043e\u0434\u0438\u043d\u0443","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(u,e){return u%10>=1&&u%10<=4&&(u%100<10||u%100>=20)?u%10==1?e[0]:e[1]:e[2]},translate:function(u,e,f,m){var M,T=a.words[f];return 1===f.length?"y"===f&&e?"\u0458\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430":m||e?T[0]:T[1]:(M=a.correctGrammaticalCase(u,T),"yy"===f&&e&&"\u0433\u043e\u0434\u0438\u043d\u0443"===M?u+" \u0433\u043e\u0434\u0438\u043d\u0430":u+" "+M)}};r.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:a.translate,dd:a.translate,M:a.translate,MM:a.translate,y:a.translate,yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(s(16738))},91621:function(E,C,s){!function(r){"use strict";var a={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],d:["jedan dan","jednog dana"],dd:["dan","dana","dana"],M:["jedan mesec","jednog meseca"],MM:["mesec","meseca","meseci"],y:["jednu godinu","jedne godine"],yy:["godinu","godine","godina"]},correctGrammaticalCase:function(u,e){return u%10>=1&&u%10<=4&&(u%100<10||u%100>=20)?u%10==1?e[0]:e[1]:e[2]},translate:function(u,e,f,m){var M,T=a.words[f];return 1===f.length?"y"===f&&e?"jedna godina":m||e?T[0]:T[1]:(M=a.correctGrammaticalCase(u,T),"yy"===f&&e&&"godinu"===M?u+" godina":u+" "+M)}};r.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:a.translate,dd:a.translate,M:a.translate,MM:a.translate,y:a.translate,yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(s(16738))},41404:function(E,C,s){!function(r){"use strict";r.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(c,u,e){return c<11?"ekuseni":c<15?"emini":c<19?"entsambama":"ebusuku"},meridiemHour:function(c,u){return 12===c&&(c=0),"ekuseni"===u?c:"emini"===u?c>=11?c:c+12:"entsambama"===u||"ebusuku"===u?0===c?0:c+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(s(16738))},55685:function(E,C,s){!function(r){"use strict";r.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?":e":1===u||2===u?":a":":e")},week:{dow:1,doy:4}})}(s(16738))},3872:function(E,C,s){!function(r){"use strict";r.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(s(16738))},54106:function(E,C,s){!function(r){"use strict";var a={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},c={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};r.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(f){return c[f]})},postformat:function(e){return e.replace(/\d/g,function(f){return a[f]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,f,m){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,f){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===f?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===f||"\u0b95\u0bbe\u0bb2\u0bc8"===f||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===f&&e>=10?e:e+12},week:{dow:0,doy:6}})}(s(16738))},39204:function(E,C,s){!function(r){"use strict";r.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(c,u){return 12===c&&(c=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===u?c<4?c:c+12:"\u0c09\u0c26\u0c2f\u0c02"===u?c:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===u?c>=10?c:c+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===u?c+12:void 0},meridiem:function(c,u,e){return c<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":c<10?"\u0c09\u0c26\u0c2f\u0c02":c<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":c<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}})}(s(16738))},83692:function(E,C,s){!function(r){"use strict";r.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(s(16738))},86361:function(E,C,s){!function(r){"use strict";var a={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};r.defineLocale("tg",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0430\u043b\u0438_\u043c\u0430\u0440\u0442\u0438_\u0430\u043f\u0440\u0435\u043b\u0438_\u043c\u0430\u0439\u0438_\u0438\u044e\u043d\u0438_\u0438\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442\u0438_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0438_\u043e\u043a\u0442\u044f\u0431\u0440\u0438_\u043d\u043e\u044f\u0431\u0440\u0438_\u0434\u0435\u043a\u0430\u0431\u0440\u0438".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_")},monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u0424\u0430\u0440\u0434\u043e \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(u,e){return 12===u&&(u=0),"\u0448\u0430\u0431"===e?u<4?u:u+12:"\u0441\u0443\u0431\u04b3"===e?u:"\u0440\u04ef\u0437"===e?u>=11?u:u+12:"\u0431\u0435\u0433\u043e\u04b3"===e?u+12:void 0},meridiem:function(u,e,f){return u<4?"\u0448\u0430\u0431":u<11?"\u0441\u0443\u0431\u04b3":u<16?"\u0440\u04ef\u0437":u<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(u){return u+(a[u]||a[u%10]||a[u>=100?100:null])},week:{dow:1,doy:7}})}(s(16738))},31735:function(E,C,s){!function(r){"use strict";r.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(c){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===c},meridiem:function(c,u,e){return c<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",w:"1 \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",ww:"%d \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}})}(s(16738))},1568:function(E,C,s){!function(r){"use strict";var a={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};r.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(u,e){switch(e){case"d":case"D":case"Do":case"DD":return u;default:if(0===u)return u+"'unjy";var f=u%10;return u+(a[f]||a[u%100-f]||a[u>=100?100:null])}},week:{dow:1,doy:7}})}(s(16738))},96129:function(E,C,s){!function(r){"use strict";r.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(c){return c},week:{dow:1,doy:4}})}(s(16738))},13759:function(E,C,s){!function(r){"use strict";var a="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function e(T,M,w,D){var U=function f(T){var M=Math.floor(T%1e3/100),w=Math.floor(T%100/10),D=T%10,U="";return M>0&&(U+=a[M]+"vatlh"),w>0&&(U+=(""!==U?" ":"")+a[w]+"maH"),D>0&&(U+=(""!==U?" ":"")+a[D]),""===U?"pagh":U}(T);switch(w){case"ss":return U+" lup";case"mm":return U+" tup";case"hh":return U+" rep";case"dd":return U+" jaj";case"MM":return U+" jar";case"yy":return U+" DIS"}}r.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function c(T){var M=T;return-1!==T.indexOf("jaj")?M.slice(0,-3)+"leS":-1!==T.indexOf("jar")?M.slice(0,-3)+"waQ":-1!==T.indexOf("DIS")?M.slice(0,-3)+"nem":M+" pIq"},past:function u(T){var M=T;return-1!==T.indexOf("jaj")?M.slice(0,-3)+"Hu\u2019":-1!==T.indexOf("jar")?M.slice(0,-3)+"wen":-1!==T.indexOf("DIS")?M.slice(0,-3)+"ben":M+" ret"},s:"puS lup",ss:e,m:"wa\u2019 tup",mm:e,h:"wa\u2019 rep",hh:e,d:"wa\u2019 jaj",dd:e,M:"wa\u2019 jar",MM:e,y:"wa\u2019 DIS",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},81644:function(E,C,s){!function(r){"use strict";var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};r.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pzt_Sal_\xc7ar_Per_Cum_Cmt".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(u,e,f){return u<12?f?"\xf6\xf6":"\xd6\xd6":f?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(u){return"\xf6s"===u||"\xd6S"===u},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(u,e){switch(e){case"d":case"D":case"Do":case"DD":return u;default:if(0===u)return u+"'\u0131nc\u0131";var f=u%10;return u+(a[f]||a[u%100-f]||a[u>=100?100:null])}},week:{dow:1,doy:7}})}(s(16738))},90875:function(E,C,s){!function(r){"use strict";function c(u,e,f,m){var T={s:["viensas secunds","'iensas secunds"],ss:[u+" secunds",u+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[u+" m\xeduts",u+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[u+" \xfeoras",u+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[u+" ziuas",u+" ziuas"],M:["'n mes","'iens mes"],MM:[u+" mesen",u+" mesen"],y:["'n ar","'iens ar"],yy:[u+" ars",u+" ars"]};return m||e?T[f][0]:T[f][1]}r.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(u){return"d'o"===u.toLowerCase()},meridiem:function(u,e,f){return u>11?f?"d'o":"D'O":f?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:c,ss:c,m:c,mm:c,h:c,hh:c,d:c,dd:c,M:c,MM:c,y:c,yy:c},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(s(16738))},11041:function(E,C,s){!function(r){"use strict";r.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(s(16738))},16878:function(E,C,s){!function(r){"use strict";r.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}})}(s(16738))},74357:function(E,C,s){!function(r){"use strict";r.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(c,u){return 12===c&&(c=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===u||"\u0633\u06d5\u06be\u06d5\u0631"===u||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===u?c:"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"===u||"\u0643\u06d5\u0686"===u?c+12:c>=11?c:c+12},meridiem:function(c,u,e){var f=100*c+u;return f<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":f<900?"\u0633\u06d5\u06be\u06d5\u0631":f<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":f<1230?"\u0686\u06c8\u0634":f<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(c,u){switch(u){case"d":case"D":case"DDD":return c+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return c+"-\u06be\u06d5\u067e\u062a\u06d5";default:return c}},preparse:function(c){return c.replace(/\u060c/g,",")},postformat:function(c){return c.replace(/,/g,"\u060c")},week:{dow:1,doy:7}})}(s(16738))},74810:function(E,C,s){!function(r){"use strict";function c(m,T,M){return"m"===M?T?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===M?T?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":m+" "+function a(m,T){var M=m.split("_");return T%10==1&&T%100!=11?M[0]:T%10>=2&&T%10<=4&&(T%100<10||T%100>=20)?M[1]:M[2]}({ss:T?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:T?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:T?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[M],+m)}function e(m){return function(){return m+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}r.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function u(m,T){var M={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===m?M.nominative.slice(1,7).concat(M.nominative.slice(0,1)):m?M[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(T)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(T)?"genitive":"nominative"][m.day()]:M.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:e("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:e("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:e("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:e("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return e("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return e("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:c,m:c,mm:c,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:c,d:"\u0434\u0435\u043d\u044c",dd:c,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:c,y:"\u0440\u0456\u043a",yy:c},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(m){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(m)},meridiem:function(m,T,M){return m<4?"\u043d\u043e\u0447\u0456":m<12?"\u0440\u0430\u043d\u043a\u0443":m<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(m,T){switch(T){case"M":case"d":case"DDD":case"w":case"W":return m+"-\u0439";case"D":return m+"-\u0433\u043e";default:return m}},week:{dow:1,doy:7}})}(s(16738))},86794:function(E,C,s){!function(r){"use strict";var a=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],c=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];r.defineLocale("ur",{months:a,monthsShort:a,weekdays:c,weekdaysShort:c,weekdaysMin:c,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,f,m){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}})}(s(16738))},77959:function(E,C,s){!function(r){"use strict";r.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(s(16738))},28966:function(E,C,s){!function(r){"use strict";r.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}})}(s(16738))},35386:function(E,C,s){!function(r){"use strict";r.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(c){return/^ch$/i.test(c)},meridiem:function(c,u,e){return c<12?e?"sa":"SA":e?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",w:"m\u1ed9t tu\u1ea7n",ww:"%d tu\u1ea7n",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(c){return c},week:{dow:1,doy:4}})}(s(16738))},23156:function(E,C,s){!function(r){"use strict";r.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(c){var u=c%10;return c+(1==~~(c%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(s(16738))},68028:function(E,C,s){!function(r){"use strict";r.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}})}(s(16738))},9330:function(E,C,s){!function(r){"use strict";r.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(c,u){return 12===c&&(c=0),"\u51cc\u6668"===u||"\u65e9\u4e0a"===u||"\u4e0a\u5348"===u?c:"\u4e0b\u5348"===u||"\u665a\u4e0a"===u?c+12:c>=11?c:c+12},meridiem:function(c,u,e){var f=100*c+u;return f<600?"\u51cc\u6668":f<900?"\u65e9\u4e0a":f<1130?"\u4e0a\u5348":f<1230?"\u4e2d\u5348":f<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(c){return c.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(c){return this.week()!==c.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(c,u){switch(u){case"d":case"D":case"DDD":return c+"\u65e5";case"M":return c+"\u6708";case"w":case"W":return c+"\u5468";default:return c}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",w:"1 \u5468",ww:"%d \u5468",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}})}(s(16738))},89380:function(E,C,s){!function(r){"use strict";r.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(c,u){return 12===c&&(c=0),"\u51cc\u6668"===u||"\u65e9\u4e0a"===u||"\u4e0a\u5348"===u?c:"\u4e2d\u5348"===u?c>=11?c:c+12:"\u4e0b\u5348"===u||"\u665a\u4e0a"===u?c+12:void 0},meridiem:function(c,u,e){var f=100*c+u;return f<600?"\u51cc\u6668":f<900?"\u65e9\u4e0a":f<1200?"\u4e0a\u5348":1200===f?"\u4e2d\u5348":f<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(c,u){switch(u){case"d":case"D":case"DDD":return c+"\u65e5";case"M":return c+"\u6708";case"w":case"W":return c+"\u9031";default:return c}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(s(16738))},60874:function(E,C,s){!function(r){"use strict";r.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(c,u){return 12===c&&(c=0),"\u51cc\u6668"===u||"\u65e9\u4e0a"===u||"\u4e0a\u5348"===u?c:"\u4e2d\u5348"===u?c>=11?c:c+12:"\u4e0b\u5348"===u||"\u665a\u4e0a"===u?c+12:void 0},meridiem:function(c,u,e){var f=100*c+u;return f<600?"\u51cc\u6668":f<900?"\u65e9\u4e0a":f<1130?"\u4e0a\u5348":f<1230?"\u4e2d\u5348":f<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(c,u){switch(u){case"d":case"D":case"DDD":return c+"\u65e5";case"M":return c+"\u6708";case"w":case"W":return c+"\u9031";default:return c}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(s(16738))},96508:function(E,C,s){!function(r){"use strict";r.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(c,u){return 12===c&&(c=0),"\u51cc\u6668"===u||"\u65e9\u4e0a"===u||"\u4e0a\u5348"===u?c:"\u4e2d\u5348"===u?c>=11?c:c+12:"\u4e0b\u5348"===u||"\u665a\u4e0a"===u?c+12:void 0},meridiem:function(c,u,e){var f=100*c+u;return f<600?"\u51cc\u6668":f<900?"\u65e9\u4e0a":f<1130?"\u4e0a\u5348":f<1230?"\u4e2d\u5348":f<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(c,u){switch(u){case"d":case"D":case"DDD":return c+"\u65e5";case"M":return c+"\u6708";case"w":case"W":return c+"\u9031";default:return c}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(s(16738))},16738:function(E,C,s){(E=s.nmd(E)).exports=function(){"use strict";var r,F;function a(){return r.apply(null,arguments)}function u(ee){return ee instanceof Array||"[object Array]"===Object.prototype.toString.call(ee)}function e(ee){return null!=ee&&"[object Object]"===Object.prototype.toString.call(ee)}function f(ee,Ce){return Object.prototype.hasOwnProperty.call(ee,Ce)}function m(ee){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(ee).length;var Ce;for(Ce in ee)if(f(ee,Ce))return!1;return!0}function T(ee){return void 0===ee}function M(ee){return"number"==typeof ee||"[object Number]"===Object.prototype.toString.call(ee)}function w(ee){return ee instanceof Date||"[object Date]"===Object.prototype.toString.call(ee)}function D(ee,Ce){var $t,vt=[],yn=ee.length;for($t=0;$t<yn;++$t)vt.push(Ce(ee[$t],$t));return vt}function U(ee,Ce){for(var vt in Ce)f(Ce,vt)&&(ee[vt]=Ce[vt]);return f(Ce,"toString")&&(ee.toString=Ce.toString),f(Ce,"valueOf")&&(ee.valueOf=Ce.valueOf),ee}function W(ee,Ce,vt,$t){return Hs(ee,Ce,vt,$t,!0).utc()}function J(ee){return null==ee._pf&&(ee._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),ee._pf}function X(ee){if(null==ee._isValid){var Ce=J(ee),vt=F.call(Ce.parsedDateParts,function(yn){return null!=yn}),$t=!isNaN(ee._d.getTime())&&Ce.overflow<0&&!Ce.empty&&!Ce.invalidEra&&!Ce.invalidMonth&&!Ce.invalidWeekday&&!Ce.weekdayMismatch&&!Ce.nullInput&&!Ce.invalidFormat&&!Ce.userInvalidated&&(!Ce.meridiem||Ce.meridiem&&vt);if(ee._strict&&($t=$t&&0===Ce.charsLeftOver&&0===Ce.unusedTokens.length&&void 0===Ce.bigHour),null!=Object.isFrozen&&Object.isFrozen(ee))return $t;ee._isValid=$t}return ee._isValid}function de(ee){var Ce=W(NaN);return null!=ee?U(J(Ce),ee):J(Ce).userInvalidated=!0,Ce}F=Array.prototype.some?Array.prototype.some:function(ee){var $t,Ce=Object(this),vt=Ce.length>>>0;for($t=0;$t<vt;$t++)if($t in Ce&&ee.call(this,Ce[$t],$t,Ce))return!0;return!1};var V=a.momentProperties=[],ce=!1;function se(ee,Ce){var vt,$t,yn,Ur=V.length;if(T(Ce._isAMomentObject)||(ee._isAMomentObject=Ce._isAMomentObject),T(Ce._i)||(ee._i=Ce._i),T(Ce._f)||(ee._f=Ce._f),T(Ce._l)||(ee._l=Ce._l),T(Ce._strict)||(ee._strict=Ce._strict),T(Ce._tzm)||(ee._tzm=Ce._tzm),T(Ce._isUTC)||(ee._isUTC=Ce._isUTC),T(Ce._offset)||(ee._offset=Ce._offset),T(Ce._pf)||(ee._pf=J(Ce)),T(Ce._locale)||(ee._locale=Ce._locale),Ur>0)for(vt=0;vt<Ur;vt++)T(yn=Ce[$t=V[vt]])||(ee[$t]=yn);return ee}function fe(ee){se(this,ee),this._d=new Date(null!=ee._d?ee._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===ce&&(ce=!0,a.updateOffset(this),ce=!1)}function Te(ee){return ee instanceof fe||null!=ee&&null!=ee._isAMomentObject}function $e(ee){!1===a.suppressDeprecationWarnings&&typeof console<"u"&&console.warn&&console.warn("Deprecation warning: "+ee)}function ge(ee,Ce){var vt=!0;return U(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,ee),vt){var yn,Ur,Gi,$t=[],Ys=arguments.length;for(Ur=0;Ur<Ys;Ur++){if(yn="","object"==typeof arguments[Ur]){for(Gi in yn+="\n["+Ur+"] ",arguments[0])f(arguments[0],Gi)&&(yn+=Gi+": "+arguments[0][Gi]+", ");yn=yn.slice(0,-2)}else yn=arguments[Ur];$t.push(yn)}$e(ee+"\nArguments: "+Array.prototype.slice.call($t).join("")+"\n"+(new Error).stack),vt=!1}return Ce.apply(this,arguments)},Ce)}var Le,Et={};function ot(ee,Ce){null!=a.deprecationHandler&&a.deprecationHandler(ee,Ce),Et[ee]||($e(Ce),Et[ee]=!0)}function ct(ee){return typeof Function<"u"&&ee instanceof Function||"[object Function]"===Object.prototype.toString.call(ee)}function He(ee,Ce){var $t,vt=U({},ee);for($t in Ce)f(Ce,$t)&&(e(ee[$t])&&e(Ce[$t])?(vt[$t]={},U(vt[$t],ee[$t]),U(vt[$t],Ce[$t])):null!=Ce[$t]?vt[$t]=Ce[$t]:delete vt[$t]);for($t in ee)f(ee,$t)&&!f(Ce,$t)&&e(ee[$t])&&(vt[$t]=U({},vt[$t]));return vt}function We(ee){null!=ee&&this.set(ee)}a.suppressDeprecationWarnings=!1,a.deprecationHandler=null,Le=Object.keys?Object.keys:function(ee){var Ce,vt=[];for(Ce in ee)f(ee,Ce)&&vt.push(Ce);return vt};function Xt(ee,Ce,vt){var $t=""+Math.abs(ee);return(ee>=0?vt?"+":"":"-")+Math.pow(10,Math.max(0,Ce-$t.length)).toString().substr(1)+$t}var cn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,pn=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Rn={},At={};function qt(ee,Ce,vt,$t){var yn=$t;"string"==typeof $t&&(yn=function(){return this[$t]()}),ee&&(At[ee]=yn),Ce&&(At[Ce[0]]=function(){return Xt(yn.apply(this,arguments),Ce[1],Ce[2])}),vt&&(At[vt]=function(){return this.localeData().ordinal(yn.apply(this,arguments),ee)})}function sn(ee){return ee.match(/\[[\s\S]/)?ee.replace(/^\[|\]$/g,""):ee.replace(/\\/g,"")}function xn(ee,Ce){return ee.isValid()?(Ce=Kr(Ce,ee.localeData()),Rn[Ce]=Rn[Ce]||function fn(ee){var vt,$t,Ce=ee.match(cn);for(vt=0,$t=Ce.length;vt<$t;vt++)Ce[vt]=At[Ce[vt]]?At[Ce[vt]]:sn(Ce[vt]);return function(yn){var Gi,Ur="";for(Gi=0;Gi<$t;Gi++)Ur+=ct(Ce[Gi])?Ce[Gi].call(yn,ee):Ce[Gi];return Ur}}(Ce),Rn[Ce](ee)):ee.localeData().invalidDate()}function Kr(ee,Ce){var vt=5;function $t(yn){return Ce.longDateFormat(yn)||yn}for(pn.lastIndex=0;vt>=0&&pn.test(ee);)ee=ee.replace(pn,$t),pn.lastIndex=0,vt-=1;return ee}var jn={};function hr(ee,Ce){var vt=ee.toLowerCase();jn[vt]=jn[vt+"s"]=jn[Ce]=ee}function Oi(ee){return"string"==typeof ee?jn[ee]||jn[ee.toLowerCase()]:void 0}function Wi(ee){var vt,$t,Ce={};for($t in ee)f(ee,$t)&&(vt=Oi($t))&&(Ce[vt]=ee[$t]);return Ce}var so={};function kr(ee,Ce){so[ee]=Ce}function ii(ee){return ee%4==0&&ee%100!=0||ee%400==0}function mr(ee){return ee<0?Math.ceil(ee)||0:Math.floor(ee)}function pr(ee){var Ce=+ee,vt=0;return 0!==Ce&&isFinite(Ce)&&(vt=mr(Ce)),vt}function Eo(ee,Ce){return function(vt){return null!=vt?($i(this,ee,vt),a.updateOffset(this,Ce),this):po(this,ee)}}function po(ee,Ce){return ee.isValid()?ee._d["get"+(ee._isUTC?"UTC":"")+Ce]():NaN}function $i(ee,Ce,vt){ee.isValid()&&!isNaN(vt)&&("FullYear"===Ce&&ii(ee.year())&&1===ee.month()&&29===ee.date()?(vt=pr(vt),ee._d["set"+(ee._isUTC?"UTC":"")+Ce](vt,ee.month(),Po(vt,ee.month()))):ee._d["set"+(ee._isUTC?"UTC":"")+Ce](vt))}var Zn,Dn=/\d/,Hn=/\d\d/,jt=/\d{3}/,Fe=/\d{4}/,Ie=/[+-]?\d{6}/,et=/\d\d?/,ze=/\d\d\d\d?/,an=/\d\d\d\d\d\d?/,lt=/\d{1,3}/,Rt=/\d{1,4}/,Pe=/[+-]?\d{1,6}/,qn=/\d+/,gr=/[+-]?\d+/,Pn=/Z|[+-]\d\d:?\d\d/gi,_r=/Z|[+-]\d\d(?::?\d\d)?/gi,tr=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function nr(ee,Ce,vt){Zn[ee]=ct(Ce)?Ce:function($t,yn){return $t&&vt?vt:Ce}}function Zt(ee,Ce){return f(Zn,ee)?Zn[ee](Ce._strict,Ce._locale):new RegExp(function dn(ee){return Ge(ee.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(Ce,vt,$t,yn,Ur){return vt||$t||yn||Ur}))}(ee))}function Ge(ee){return ee.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}Zn={};var Ot={};function mn(ee,Ce){var vt,yn,$t=Ce;for("string"==typeof ee&&(ee=[ee]),M(Ce)&&($t=function(Ur,Gi){Gi[Ce]=pr(Ur)}),yn=ee.length,vt=0;vt<yn;vt++)Ot[ee[vt]]=$t}function wr(ee,Ce){mn(ee,function(vt,$t,yn,Ur){yn._w=yn._w||{},Ce(vt,yn._w,yn,Ur)})}function Ti(ee,Ce,vt){null!=Ce&&f(Ot,ee)&&Ot[ee](Ce,vt._a,vt,ee)}var Vi,Ci=0,Ai=1,Ko=2,_s=3,dr=4,Ni=5,ti=6,Vr=7,wi=8;function Po(ee,Ce){if(isNaN(ee)||isNaN(Ce))return NaN;var vt=function ji(ee,Ce){return(ee%Ce+Ce)%Ce}(Ce,12);return ee+=(Ce-vt)/12,1===vt?ii(ee)?29:28:31-vt%7%2}Vi=Array.prototype.indexOf?Array.prototype.indexOf:function(ee){var Ce;for(Ce=0;Ce<this.length;++Ce)if(this[Ce]===ee)return Ce;return-1},qt("M",["MM",2],"Mo",function(){return this.month()+1}),qt("MMM",0,0,function(ee){return this.localeData().monthsShort(this,ee)}),qt("MMMM",0,0,function(ee){return this.localeData().months(this,ee)}),hr("month","M"),kr("month",8),nr("M",et),nr("MM",et,Hn),nr("MMM",function(ee,Ce){return Ce.monthsShortRegex(ee)}),nr("MMMM",function(ee,Ce){return Ce.monthsRegex(ee)}),mn(["M","MM"],function(ee,Ce){Ce[Ai]=pr(ee)-1}),mn(["MMM","MMMM"],function(ee,Ce,vt,$t){var yn=vt._locale.monthsParse(ee,$t,vt._strict);null!=yn?Ce[Ai]=yn:J(vt).invalidMonth=ee});var ko="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Ir="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ro=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Vt=tr,bn=tr;function _o(ee,Ce,vt){var $t,yn,Ur,Gi=ee.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],$t=0;$t<12;++$t)Ur=W([2e3,$t]),this._shortMonthsParse[$t]=this.monthsShort(Ur,"").toLocaleLowerCase(),this._longMonthsParse[$t]=this.months(Ur,"").toLocaleLowerCase();return vt?"MMM"===Ce?-1!==(yn=Vi.call(this._shortMonthsParse,Gi))?yn:null:-1!==(yn=Vi.call(this._longMonthsParse,Gi))?yn:null:"MMM"===Ce?-1!==(yn=Vi.call(this._shortMonthsParse,Gi))||-1!==(yn=Vi.call(this._longMonthsParse,Gi))?yn:null:-1!==(yn=Vi.call(this._longMonthsParse,Gi))||-1!==(yn=Vi.call(this._shortMonthsParse,Gi))?yn:null}function es(ee,Ce){var vt;if(!ee.isValid())return ee;if("string"==typeof Ce)if(/^\d+$/.test(Ce))Ce=pr(Ce);else if(!M(Ce=ee.localeData().monthsParse(Ce)))return ee;return vt=Math.min(ee.date(),Po(ee.year(),Ce)),ee._d["set"+(ee._isUTC?"UTC":"")+"Month"](Ce,vt),ee}function ts(ee){return null!=ee?(es(this,ee),a.updateOffset(this,!0),this):po(this,"Month")}function Is(){function ee(Gi,Ys){return Ys.length-Gi.length}var yn,Ur,Ce=[],vt=[],$t=[];for(yn=0;yn<12;yn++)Ur=W([2e3,yn]),Ce.push(this.monthsShort(Ur,"")),vt.push(this.months(Ur,"")),$t.push(this.months(Ur,"")),$t.push(this.monthsShort(Ur,""));for(Ce.sort(ee),vt.sort(ee),$t.sort(ee),yn=0;yn<12;yn++)Ce[yn]=Ge(Ce[yn]),vt[yn]=Ge(vt[yn]);for(yn=0;yn<24;yn++)$t[yn]=Ge($t[yn]);this._monthsRegex=new RegExp("^("+$t.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+vt.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+Ce.join("|")+")","i")}function la(ee){return ii(ee)?366:365}qt("Y",0,0,function(){var ee=this.year();return ee<=9999?Xt(ee,4):"+"+ee}),qt(0,["YY",2],0,function(){return this.year()%100}),qt(0,["YYYY",4],0,"year"),qt(0,["YYYYY",5],0,"year"),qt(0,["YYYYYY",6,!0],0,"year"),hr("year","y"),kr("year",1),nr("Y",gr),nr("YY",et,Hn),nr("YYYY",Rt,Fe),nr("YYYYY",Pe,Ie),nr("YYYYYY",Pe,Ie),mn(["YYYYY","YYYYYY"],Ci),mn("YYYY",function(ee,Ce){Ce[Ci]=2===ee.length?a.parseTwoDigitYear(ee):pr(ee)}),mn("YY",function(ee,Ce){Ce[Ci]=a.parseTwoDigitYear(ee)}),mn("Y",function(ee,Ce){Ce[Ci]=parseInt(ee,10)}),a.parseTwoDigitYear=function(ee){return pr(ee)+(pr(ee)>68?1900:2e3)};var Ro=Eo("FullYear",!0);function gl(ee,Ce,vt,$t,yn,Ur,Gi){var Ys;return ee<100&&ee>=0?(Ys=new Date(ee+400,Ce,vt,$t,yn,Ur,Gi),isFinite(Ys.getFullYear())&&Ys.setFullYear(ee)):Ys=new Date(ee,Ce,vt,$t,yn,Ur,Gi),Ys}function qa(ee){var Ce,vt;return ee<100&&ee>=0?((vt=Array.prototype.slice.call(arguments))[0]=ee+400,Ce=new Date(Date.UTC.apply(null,vt)),isFinite(Ce.getUTCFullYear())&&Ce.setUTCFullYear(ee)):Ce=new Date(Date.UTC.apply(null,arguments)),Ce}function da(ee,Ce,vt){var $t=7+Ce-vt;return-(7+qa(ee,0,$t).getUTCDay()-Ce)%7+$t-1}function $a(ee,Ce,vt,$t,yn){var Ka,ka,Ys=1+7*(Ce-1)+(7+vt-$t)%7+da(ee,$t,yn);return Ys<=0?ka=la(Ka=ee-1)+Ys:Ys>la(ee)?(Ka=ee+1,ka=Ys-la(ee)):(Ka=ee,ka=Ys),{year:Ka,dayOfYear:ka}}function Rl(ee,Ce,vt){var Ur,Gi,$t=da(ee.year(),Ce,vt),yn=Math.floor((ee.dayOfYear()-$t-1)/7)+1;return yn<1?Ur=yn+Ji(Gi=ee.year()-1,Ce,vt):yn>Ji(ee.year(),Ce,vt)?(Ur=yn-Ji(ee.year(),Ce,vt),Gi=ee.year()+1):(Gi=ee.year(),Ur=yn),{week:Ur,year:Gi}}function Ji(ee,Ce,vt){var $t=da(ee,Ce,vt),yn=da(ee+1,Ce,vt);return(la(ee)-$t+yn)/7}qt("w",["ww",2],"wo","week"),qt("W",["WW",2],"Wo","isoWeek"),hr("week","w"),hr("isoWeek","W"),kr("week",5),kr("isoWeek",5),nr("w",et),nr("ww",et,Hn),nr("W",et),nr("WW",et,Hn),wr(["w","ww","W","WW"],function(ee,Ce,vt,$t){Ce[$t.substr(0,1)]=pr(ee)});function No(ee,Ce){return ee.slice(Ce,7).concat(ee.slice(0,Ce))}qt("d",0,"do","day"),qt("dd",0,0,function(ee){return this.localeData().weekdaysMin(this,ee)}),qt("ddd",0,0,function(ee){return this.localeData().weekdaysShort(this,ee)}),qt("dddd",0,0,function(ee){return this.localeData().weekdays(this,ee)}),qt("e",0,0,"weekday"),qt("E",0,0,"isoWeekday"),hr("day","d"),hr("weekday","e"),hr("isoWeekday","E"),kr("day",11),kr("weekday",11),kr("isoWeekday",11),nr("d",et),nr("e",et),nr("E",et),nr("dd",function(ee,Ce){return Ce.weekdaysMinRegex(ee)}),nr("ddd",function(ee,Ce){return Ce.weekdaysShortRegex(ee)}),nr("dddd",function(ee,Ce){return Ce.weekdaysRegex(ee)}),wr(["dd","ddd","dddd"],function(ee,Ce,vt,$t){var yn=vt._locale.weekdaysParse(ee,$t,vt._strict);null!=yn?Ce.d=yn:J(vt).invalidWeekday=ee}),wr(["d","e","E"],function(ee,Ce,vt,$t){Ce[$t]=pr(ee)});var Cs="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ns="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Fo="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),zr=tr,io=tr,gt=tr;function Jt(ee,Ce,vt){var $t,yn,Ur,Gi=ee.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],$t=0;$t<7;++$t)Ur=W([2e3,1]).day($t),this._minWeekdaysParse[$t]=this.weekdaysMin(Ur,"").toLocaleLowerCase(),this._shortWeekdaysParse[$t]=this.weekdaysShort(Ur,"").toLocaleLowerCase(),this._weekdaysParse[$t]=this.weekdays(Ur,"").toLocaleLowerCase();return vt?"dddd"===Ce?-1!==(yn=Vi.call(this._weekdaysParse,Gi))?yn:null:"ddd"===Ce?-1!==(yn=Vi.call(this._shortWeekdaysParse,Gi))?yn:null:-1!==(yn=Vi.call(this._minWeekdaysParse,Gi))?yn:null:"dddd"===Ce?-1!==(yn=Vi.call(this._weekdaysParse,Gi))||-1!==(yn=Vi.call(this._shortWeekdaysParse,Gi))||-1!==(yn=Vi.call(this._minWeekdaysParse,Gi))?yn:null:"ddd"===Ce?-1!==(yn=Vi.call(this._shortWeekdaysParse,Gi))||-1!==(yn=Vi.call(this._weekdaysParse,Gi))||-1!==(yn=Vi.call(this._minWeekdaysParse,Gi))?yn:null:-1!==(yn=Vi.call(this._minWeekdaysParse,Gi))||-1!==(yn=Vi.call(this._weekdaysParse,Gi))||-1!==(yn=Vi.call(this._shortWeekdaysParse,Gi))?yn:null}function Js(){function ee(nu,rc){return rc.length-nu.length}var Ur,Gi,Ys,Ka,ka,Ce=[],vt=[],$t=[],yn=[];for(Ur=0;Ur<7;Ur++)Gi=W([2e3,1]).day(Ur),Ys=Ge(this.weekdaysMin(Gi,"")),Ka=Ge(this.weekdaysShort(Gi,"")),ka=Ge(this.weekdays(Gi,"")),Ce.push(Ys),vt.push(Ka),$t.push(ka),yn.push(Ys),yn.push(Ka),yn.push(ka);Ce.sort(ee),vt.sort(ee),$t.sort(ee),yn.sort(ee),this._weekdaysRegex=new RegExp("^("+yn.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+$t.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+vt.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+Ce.join("|")+")","i")}function Ll(){return this.hours()%12||12}function Yu(ee,Ce){qt(ee,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),Ce)})}function Nc(ee,Ce){return Ce._meridiemParse}qt("H",["HH",2],0,"hour"),qt("h",["hh",2],0,Ll),qt("k",["kk",2],0,function vl(){return this.hours()||24}),qt("hmm",0,0,function(){return""+Ll.apply(this)+Xt(this.minutes(),2)}),qt("hmmss",0,0,function(){return""+Ll.apply(this)+Xt(this.minutes(),2)+Xt(this.seconds(),2)}),qt("Hmm",0,0,function(){return""+this.hours()+Xt(this.minutes(),2)}),qt("Hmmss",0,0,function(){return""+this.hours()+Xt(this.minutes(),2)+Xt(this.seconds(),2)}),Yu("a",!0),Yu("A",!1),hr("hour","h"),kr("hour",13),nr("a",Nc),nr("A",Nc),nr("H",et),nr("h",et),nr("k",et),nr("HH",et,Hn),nr("hh",et,Hn),nr("kk",et,Hn),nr("hmm",ze),nr("hmmss",an),nr("Hmm",ze),nr("Hmmss",an),mn(["H","HH"],_s),mn(["k","kk"],function(ee,Ce,vt){var $t=pr(ee);Ce[_s]=24===$t?0:$t}),mn(["a","A"],function(ee,Ce,vt){vt._isPm=vt._locale.isPM(ee),vt._meridiem=ee}),mn(["h","hh"],function(ee,Ce,vt){Ce[_s]=pr(ee),J(vt).bigHour=!0}),mn("hmm",function(ee,Ce,vt){var $t=ee.length-2;Ce[_s]=pr(ee.substr(0,$t)),Ce[dr]=pr(ee.substr($t)),J(vt).bigHour=!0}),mn("hmmss",function(ee,Ce,vt){var $t=ee.length-4,yn=ee.length-2;Ce[_s]=pr(ee.substr(0,$t)),Ce[dr]=pr(ee.substr($t,2)),Ce[Ni]=pr(ee.substr(yn)),J(vt).bigHour=!0}),mn("Hmm",function(ee,Ce,vt){var $t=ee.length-2;Ce[_s]=pr(ee.substr(0,$t)),Ce[dr]=pr(ee.substr($t))}),mn("Hmmss",function(ee,Ce,vt){var $t=ee.length-4,yn=ee.length-2;Ce[_s]=pr(ee.substr(0,$t)),Ce[dr]=pr(ee.substr($t,2)),Ce[Ni]=pr(ee.substr(yn))});var Kc=Eo("Hours",!0);var ju,au={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:ko,monthsShort:Ir,week:{dow:0,doy:6},weekdays:Cs,weekdaysMin:Fo,weekdaysShort:ns,meridiemParse:/[ap]\.?m?\.?/i},Da={},yu={};function el(ee,Ce){var vt,$t=Math.min(ee.length,Ce.length);for(vt=0;vt<$t;vt+=1)if(ee[vt]!==Ce[vt])return vt;return $t}function oc(ee){return ee&&ee.toLowerCase().replace("_","-")}function Gs(ee){var Ce=null;if(void 0===Da[ee]&&E&&E.exports&&function Ic(ee){return null!=ee.match("^[^/\\\\]*$")}(ee))try{Ce=ju._abbr,s(46700)("./"+ee),ku(Ce)}catch{Da[ee]=null}return Da[ee]}function ku(ee,Ce){var vt;return ee&&((vt=T(Ce)?El(ee):zu(ee,Ce))?ju=vt:typeof console<"u"&&console.warn&&console.warn("Locale "+ee+" not found. Did you forget to load it?")),ju._abbr}function zu(ee,Ce){if(null!==Ce){var vt,$t=au;if(Ce.abbr=ee,null!=Da[ee])ot("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),$t=Da[ee]._config;else if(null!=Ce.parentLocale)if(null!=Da[Ce.parentLocale])$t=Da[Ce.parentLocale]._config;else{if(null==(vt=Gs(Ce.parentLocale)))return yu[Ce.parentLocale]||(yu[Ce.parentLocale]=[]),yu[Ce.parentLocale].push({name:ee,config:Ce}),null;$t=vt._config}return Da[ee]=new We(He($t,Ce)),yu[ee]&&yu[ee].forEach(function(yn){zu(yn.name,yn.config)}),ku(ee),Da[ee]}return delete Da[ee],null}function El(ee){var Ce;if(ee&&ee._locale&&ee._locale._abbr&&(ee=ee._locale._abbr),!ee)return ju;if(!u(ee)){if(Ce=Gs(ee))return Ce;ee=[ee]}return function Xl(ee){for(var vt,$t,yn,Ur,Ce=0;Ce<ee.length;){for(vt=(Ur=oc(ee[Ce]).split("-")).length,$t=($t=oc(ee[Ce+1]))?$t.split("-"):null;vt>0;){if(yn=Gs(Ur.slice(0,vt).join("-")))return yn;if($t&&$t.length>=vt&&el(Ur,$t)>=vt-1)break;vt--}Ce++}return ju}(ee)}function Eu(ee){var Ce,vt=ee._a;return vt&&-2===J(ee).overflow&&(Ce=vt[Ai]<0||vt[Ai]>11?Ai:vt[Ko]<1||vt[Ko]>Po(vt[Ci],vt[Ai])?Ko:vt[_s]<0||vt[_s]>24||24===vt[_s]&&(0!==vt[dr]||0!==vt[Ni]||0!==vt[ti])?_s:vt[dr]<0||vt[dr]>59?dr:vt[Ni]<0||vt[Ni]>59?Ni:vt[ti]<0||vt[ti]>999?ti:-1,J(ee)._overflowDayOfYear&&(Ce<Ci||Ce>Ko)&&(Ce=Ko),J(ee)._overflowWeeks&&-1===Ce&&(Ce=Vr),J(ee)._overflowWeekday&&-1===Ce&&(Ce=wi),J(ee).overflow=Ce),ee}var $u=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ba=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Tl=/Z|[+-]\d\d(?::?\d\d)?/,tl=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Ga=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],dc=/^\/?Date\((-?\d+)/i,cu=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Sa={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Ru(ee){var Ce,vt,Ur,Gi,Ys,Ka,$t=ee._i,yn=$u.exec($t)||Ba.exec($t),ka=tl.length,nu=Ga.length;if(yn){for(J(ee).iso=!0,Ce=0,vt=ka;Ce<vt;Ce++)if(tl[Ce][1].exec(yn[1])){Gi=tl[Ce][0],Ur=!1!==tl[Ce][2];break}if(null==Gi)return void(ee._isValid=!1);if(yn[3]){for(Ce=0,vt=nu;Ce<vt;Ce++)if(Ga[Ce][1].exec(yn[3])){Ys=(yn[2]||" ")+Ga[Ce][0];break}if(null==Ys)return void(ee._isValid=!1)}if(!Ur&&null!=Ys)return void(ee._isValid=!1);if(yn[4]){if(!Tl.exec(yn[4]))return void(ee._isValid=!1);Ka="Z"}ee._f=Gi+(Ys||"")+(Ka||""),pt(ee)}else ee._isValid=!1}function ba(ee){var Ce=parseInt(ee,10);return Ce<=49?2e3+Ce:Ce<=999?1900+Ce:Ce}function ql(ee){var vt,Ce=cu.exec(function nl(ee){return ee.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}(ee._i));if(Ce){if(vt=function xu(ee,Ce,vt,$t,yn,Ur){var Gi=[ba(ee),Ir.indexOf(Ce),parseInt(vt,10),parseInt($t,10),parseInt(yn,10)];return Ur&&Gi.push(parseInt(Ur,10)),Gi}(Ce[4],Ce[3],Ce[2],Ce[5],Ce[6],Ce[7]),!function Su(ee,Ce,vt){return!ee||ns.indexOf(ee)===new Date(Ce[0],Ce[1],Ce[2]).getDay()||(J(vt).weekdayMismatch=!0,vt._isValid=!1,!1)}(Ce[1],vt,ee))return;ee._a=vt,ee._tzm=function gc(ee,Ce,vt){if(ee)return Sa[ee];if(Ce)return 0;var $t=parseInt(vt,10),yn=$t%100;return($t-yn)/100*60+yn}(Ce[8],Ce[9],Ce[10]),ee._d=qa.apply(null,ee._a),ee._d.setUTCMinutes(ee._d.getUTCMinutes()-ee._tzm),J(ee).rfc2822=!0}else ee._isValid=!1}function Dc(ee,Ce,vt){return ee??Ce??vt}function Vc(ee){var Ce,vt,yn,Ur,Gi,$t=[];if(!ee._d){for(yn=function zs(ee){var Ce=new Date(a.now());return ee._useUTC?[Ce.getUTCFullYear(),Ce.getUTCMonth(),Ce.getUTCDate()]:[Ce.getFullYear(),Ce.getMonth(),Ce.getDate()]}(ee),ee._w&&null==ee._a[Ko]&&null==ee._a[Ai]&&function bt(ee){var Ce,vt,$t,yn,Ur,Gi,Ys,Ka,ka;null!=(Ce=ee._w).GG||null!=Ce.W||null!=Ce.E?(Ur=1,Gi=4,vt=Dc(Ce.GG,ee._a[Ci],Rl(Qs(),1,4).year),$t=Dc(Ce.W,1),((yn=Dc(Ce.E,1))<1||yn>7)&&(Ka=!0)):(Ur=ee._locale._week.dow,Gi=ee._locale._week.doy,ka=Rl(Qs(),Ur,Gi),vt=Dc(Ce.gg,ee._a[Ci],ka.year),$t=Dc(Ce.w,ka.week),null!=Ce.d?((yn=Ce.d)<0||yn>6)&&(Ka=!0):null!=Ce.e?(yn=Ce.e+Ur,(Ce.e<0||Ce.e>6)&&(Ka=!0)):yn=Ur),$t<1||$t>Ji(vt,Ur,Gi)?J(ee)._overflowWeeks=!0:null!=Ka?J(ee)._overflowWeekday=!0:(Ys=$a(vt,$t,yn,Ur,Gi),ee._a[Ci]=Ys.year,ee._dayOfYear=Ys.dayOfYear)}(ee),null!=ee._dayOfYear&&(Gi=Dc(ee._a[Ci],yn[Ci]),(ee._dayOfYear>la(Gi)||0===ee._dayOfYear)&&(J(ee)._overflowDayOfYear=!0),vt=qa(Gi,0,ee._dayOfYear),ee._a[Ai]=vt.getUTCMonth(),ee._a[Ko]=vt.getUTCDate()),Ce=0;Ce<3&&null==ee._a[Ce];++Ce)ee._a[Ce]=$t[Ce]=yn[Ce];for(;Ce<7;Ce++)ee._a[Ce]=$t[Ce]=null==ee._a[Ce]?2===Ce?1:0:ee._a[Ce];24===ee._a[_s]&&0===ee._a[dr]&&0===ee._a[Ni]&&0===ee._a[ti]&&(ee._nextDay=!0,ee._a[_s]=0),ee._d=(ee._useUTC?qa:gl).apply(null,$t),Ur=ee._useUTC?ee._d.getUTCDay():ee._d.getDay(),null!=ee._tzm&&ee._d.setUTCMinutes(ee._d.getUTCMinutes()-ee._tzm),ee._nextDay&&(ee._a[_s]=24),ee._w&&typeof ee._w.d<"u"&&ee._w.d!==Ur&&(J(ee).weekdayMismatch=!0)}}function pt(ee){if(ee._f!==a.ISO_8601)if(ee._f!==a.RFC_2822){ee._a=[],J(ee).empty=!0;var vt,$t,yn,Ur,Gi,ka,nu,Ce=""+ee._i,Ys=Ce.length,Ka=0;for(nu=(yn=Kr(ee._f,ee._locale).match(cn)||[]).length,vt=0;vt<nu;vt++)($t=(Ce.match(Zt(Ur=yn[vt],ee))||[])[0])&&((Gi=Ce.substr(0,Ce.indexOf($t))).length>0&&J(ee).unusedInput.push(Gi),Ce=Ce.slice(Ce.indexOf($t)+$t.length),Ka+=$t.length),At[Ur]?($t?J(ee).empty=!1:J(ee).unusedTokens.push(Ur),Ti(Ur,$t,ee)):ee._strict&&!$t&&J(ee).unusedTokens.push(Ur);J(ee).charsLeftOver=Ys-Ka,Ce.length>0&&J(ee).unusedInput.push(Ce),ee._a[_s]<=12&&!0===J(ee).bigHour&&ee._a[_s]>0&&(J(ee).bigHour=void 0),J(ee).parsedDateParts=ee._a.slice(0),J(ee).meridiem=ee._meridiem,ee._a[_s]=function Je(ee,Ce,vt){var $t;return null==vt?Ce:null!=ee.meridiemHour?ee.meridiemHour(Ce,vt):(null!=ee.isPM&&(($t=ee.isPM(vt))&&Ce<12&&(Ce+=12),!$t&&12===Ce&&(Ce=0)),Ce)}(ee._locale,ee._a[_s],ee._meridiem),null!==(ka=J(ee).era)&&(ee._a[Ci]=ee._locale.erasConvertYear(ka,ee._a[Ci])),Vc(ee),Eu(ee)}else ql(ee);else Ru(ee)}function Ya(ee){var Ce=ee._i,vt=ee._f;return ee._locale=ee._locale||El(ee._l),null===Ce||void 0===vt&&""===Ce?de({nullInput:!0}):("string"==typeof Ce&&(ee._i=Ce=ee._locale.preparse(Ce)),Te(Ce)?new fe(Eu(Ce)):(w(Ce)?ee._d=Ce:u(vt)?function en(ee){var Ce,vt,$t,yn,Ur,Gi,Ys=!1,Ka=ee._f.length;if(0===Ka)return J(ee).invalidFormat=!0,void(ee._d=new Date(NaN));for(yn=0;yn<Ka;yn++)Ur=0,Gi=!1,Ce=se({},ee),null!=ee._useUTC&&(Ce._useUTC=ee._useUTC),Ce._f=ee._f[yn],pt(Ce),X(Ce)&&(Gi=!0),Ur+=J(Ce).charsLeftOver,Ur+=10*J(Ce).unusedTokens.length,J(Ce).score=Ur,Ys?Ur<$t&&($t=Ur,vt=Ce):(null==$t||Ur<$t||Gi)&&($t=Ur,vt=Ce,Gi&&(Ys=!0));U(ee,vt||Ce)}(ee):vt?pt(ee):function mi(ee){var Ce=ee._i;T(Ce)?ee._d=new Date(a.now()):w(Ce)?ee._d=new Date(Ce.valueOf()):"string"==typeof Ce?function Al(ee){var Ce=dc.exec(ee._i);null===Ce?(Ru(ee),!1===ee._isValid&&(delete ee._isValid,ql(ee),!1===ee._isValid&&(delete ee._isValid,ee._strict?ee._isValid=!1:a.createFromInputFallback(ee)))):ee._d=new Date(+Ce[1])}(ee):u(Ce)?(ee._a=D(Ce.slice(0),function(vt){return parseInt(vt,10)}),Vc(ee)):e(Ce)?function fi(ee){if(!ee._d){var Ce=Wi(ee._i);ee._a=D([Ce.year,Ce.month,void 0===Ce.day?Ce.date:Ce.day,Ce.hour,Ce.minute,Ce.second,Ce.millisecond],function($t){return $t&&parseInt($t,10)}),Vc(ee)}}(ee):M(Ce)?ee._d=new Date(Ce):a.createFromInputFallback(ee)}(ee),X(ee)||(ee._d=null),ee))}function Hs(ee,Ce,vt,$t,yn){var Ur={};return(!0===Ce||!1===Ce)&&($t=Ce,Ce=void 0),(!0===vt||!1===vt)&&($t=vt,vt=void 0),(e(ee)&&m(ee)||u(ee)&&0===ee.length)&&(ee=void 0),Ur._isAMomentObject=!0,Ur._useUTC=Ur._isUTC=yn,Ur._l=vt,Ur._i=ee,Ur._f=Ce,Ur._strict=$t,function To(ee){var Ce=new fe(Eu(Ya(ee)));return Ce._nextDay&&(Ce.add(1,"d"),Ce._nextDay=void 0),Ce}(Ur)}function Qs(ee,Ce,vt,$t){return Hs(ee,Ce,vt,$t,!1)}a.createFromInputFallback=ge("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(ee){ee._d=new Date(ee._i+(ee._useUTC?" UTC":""))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var Hu=ge("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var ee=Qs.apply(null,arguments);return this.isValid()&&ee.isValid()?ee<this?this:ee:de()}),zl=ge("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var ee=Qs.apply(null,arguments);return this.isValid()&&ee.isValid()?ee>this?this:ee:de()});function sc(ee,Ce){var vt,$t;if(1===Ce.length&&u(Ce[0])&&(Ce=Ce[0]),!Ce.length)return Qs();for(vt=Ce[0],$t=1;$t<Ce.length;++$t)(!Ce[$t].isValid()||Ce[$t][ee](vt))&&(vt=Ce[$t]);return vt}var ec=["year","quarter","month","week","day","hour","minute","second","millisecond"];function kl(ee){var Ce=Wi(ee),vt=Ce.year||0,$t=Ce.quarter||0,yn=Ce.month||0,Ur=Ce.week||Ce.isoWeek||0,Gi=Ce.day||0,Ys=Ce.hour||0,Ka=Ce.minute||0,ka=Ce.second||0,nu=Ce.millisecond||0;this._isValid=function Fc(ee){var Ce,$t,vt=!1,yn=ec.length;for(Ce in ee)if(f(ee,Ce)&&(-1===Vi.call(ec,Ce)||null!=ee[Ce]&&isNaN(ee[Ce])))return!1;for($t=0;$t<yn;++$t)if(ee[ec[$t]]){if(vt)return!1;parseFloat(ee[ec[$t]])!==pr(ee[ec[$t]])&&(vt=!0)}return!0}(Ce),this._milliseconds=+nu+1e3*ka+6e4*Ka+1e3*Ys*60*60,this._days=+Gi+7*Ur,this._months=+yn+3*$t+12*vt,this._data={},this._locale=El(),this._bubble()}function sl(ee){return ee instanceof kl}function ja(ee){return ee<0?-1*Math.round(-1*ee):Math.round(ee)}function Ee(ee,Ce){qt(ee,0,0,function(){var vt=this.utcOffset(),$t="+";return vt<0&&(vt=-vt,$t="-"),$t+Xt(~~(vt/60),2)+Ce+Xt(~~vt%60,2)})}Ee("Z",":"),Ee("ZZ",""),nr("Z",_r),nr("ZZ",_r),mn(["Z","ZZ"],function(ee,Ce,vt){vt._useUTC=!0,vt._tzm=Xe(_r,ee)});var yt=/([\+\-]|\d\d)/gi;function Xe(ee,Ce){var yn,Ur,vt=(Ce||"").match(ee);return null===vt?null:0===(Ur=60*(yn=((vt[vt.length-1]||[])+"").match(yt)||["-",0,0])[1]+pr(yn[2]))?0:"+"===yn[0]?Ur:-Ur}function Gt(ee,Ce){var vt,$t;return Ce._isUTC?(vt=Ce.clone(),$t=(Te(ee)||w(ee)?ee.valueOf():Qs(ee).valueOf())-vt.valueOf(),vt._d.setTime(vt._d.valueOf()+$t),a.updateOffset(vt,!1),vt):Qs(ee).local()}function An(ee){return-Math.round(ee._d.getTimezoneOffset())}function Ui(){return!!this.isValid()&&this._isUTC&&0===this._offset}a.updateOffset=function(){};var Do=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,Fa=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function ca(ee,Ce){var yn,Ur,Gi,vt=ee,$t=null;return sl(ee)?vt={ms:ee._milliseconds,d:ee._days,M:ee._months}:M(ee)||!isNaN(+ee)?(vt={},Ce?vt[Ce]=+ee:vt.milliseconds=+ee):($t=Do.exec(ee))?(yn="-"===$t[1]?-1:1,vt={y:0,d:pr($t[Ko])*yn,h:pr($t[_s])*yn,m:pr($t[dr])*yn,s:pr($t[Ni])*yn,ms:pr(ja(1e3*$t[ti]))*yn}):($t=Fa.exec(ee))?vt={y:zo($t[2],yn="-"===$t[1]?-1:1),M:zo($t[3],yn),w:zo($t[4],yn),d:zo($t[5],yn),h:zo($t[6],yn),m:zo($t[7],yn),s:zo($t[8],yn)}:null==vt?vt={}:"object"==typeof vt&&("from"in vt||"to"in vt)&&(Gi=function xl(ee,Ce){var vt;return ee.isValid()&&Ce.isValid()?(Ce=Gt(Ce,ee),ee.isBefore(Ce)?vt=$l(ee,Ce):((vt=$l(Ce,ee)).milliseconds=-vt.milliseconds,vt.months=-vt.months),vt):{milliseconds:0,months:0}}(Qs(vt.from),Qs(vt.to)),(vt={}).ms=Gi.milliseconds,vt.M=Gi.months),Ur=new kl(vt),sl(ee)&&f(ee,"_locale")&&(Ur._locale=ee._locale),sl(ee)&&f(ee,"_isValid")&&(Ur._isValid=ee._isValid),Ur}function zo(ee,Ce){var vt=ee&&parseFloat(ee.replace(",","."));return(isNaN(vt)?0:vt)*Ce}function $l(ee,Ce){var vt={};return vt.months=Ce.month()-ee.month()+12*(Ce.year()-ee.year()),ee.clone().add(vt.months,"M").isAfter(Ce)&&--vt.months,vt.milliseconds=+Ce-+ee.clone().add(vt.months,"M"),vt}function Uu(ee,Ce){return function(vt,$t){var Ur;return null!==$t&&!isNaN(+$t)&&(ot(Ce,"moment()."+Ce+"(period, number) is deprecated. Please use moment()."+Ce+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),Ur=vt,vt=$t,$t=Ur),Xc(this,ca(vt,$t),ee),this}}function Xc(ee,Ce,vt,$t){var yn=Ce._milliseconds,Ur=ja(Ce._days),Gi=ja(Ce._months);ee.isValid()&&($t=$t??!0,Gi&&es(ee,po(ee,"Month")+Gi*vt),Ur&&$i(ee,"Date",po(ee,"Date")+Ur*vt),yn&&ee._d.setTime(ee._d.valueOf()+yn*vt),$t&&a.updateOffset(ee,Ur||Gi))}ca.fn=kl.prototype,ca.invalid=function Lc(){return ca(NaN)};var ad=Uu(1,"add"),kc=Uu(-1,"subtract");function yi(ee){return"string"==typeof ee||ee instanceof String}function Wl(ee){return Te(ee)||w(ee)||yi(ee)||M(ee)||function fc(ee){var Ce=u(ee),vt=!1;return Ce&&(vt=0===ee.filter(function($t){return!M($t)&&yi(ee)}).length),Ce&&vt}(ee)||function Pa(ee){var yn,Ce=e(ee)&&!m(ee),vt=!1,$t=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],Gi=$t.length;for(yn=0;yn<Gi;yn+=1)vt=vt||f(ee,$t[yn]);return Ce&&vt}(ee)||null==ee}function Vs(ee,Ce){if(ee.date()<Ce.date())return-Vs(Ce,ee);var vt=12*(Ce.year()-ee.year())+(Ce.month()-ee.month()),$t=ee.clone().add(vt,"months");return-(vt+(Ce-$t<0?(Ce-$t)/($t-ee.clone().add(vt-1,"months")):(Ce-$t)/(ee.clone().add(vt+1,"months")-$t)))||0}function De(ee){var Ce;return void 0===ee?this._locale._abbr:(null!=(Ce=El(ee))&&(this._locale=Ce),this)}a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ve=ge("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(ee){return void 0===ee?this.localeData():this.locale(ee)});function st(){return this._locale}var zt=1e3,Qt=60*zt,Gn=60*Qt,Er=3506328*Gn;function Nr(ee,Ce){return(ee%Ce+Ce)%Ce}function Mi(ee,Ce,vt){return ee<100&&ee>=0?new Date(ee+400,Ce,vt)-Er:new Date(ee,Ce,vt).valueOf()}function ao(ee,Ce,vt){return ee<100&&ee>=0?Date.UTC(ee+400,Ce,vt)-Er:Date.UTC(ee,Ce,vt)}function Va(ee,Ce){return Ce.erasAbbrRegex(ee)}function Hc(){var yn,Ur,ee=[],Ce=[],vt=[],$t=[],Gi=this.eras();for(yn=0,Ur=Gi.length;yn<Ur;++yn)Ce.push(Ge(Gi[yn].name)),ee.push(Ge(Gi[yn].abbr)),vt.push(Ge(Gi[yn].narrow)),$t.push(Ge(Gi[yn].name)),$t.push(Ge(Gi[yn].abbr)),$t.push(Ge(Gi[yn].narrow));this._erasRegex=new RegExp("^("+$t.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+Ce.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+ee.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+vt.join("|")+")","i")}function Vu(ee,Ce){qt(0,[ee,ee.length],0,Ce)}function Zu(ee,Ce,vt,$t,yn){var Ur;return null==ee?Rl(this,$t,yn).year:(Ce>(Ur=Ji(ee,$t,yn))&&(Ce=Ur),Tp.call(this,ee,Ce,vt,$t,yn))}function Tp(ee,Ce,vt,$t,yn){var Ur=$a(ee,Ce,vt,$t,yn),Gi=qa(Ur.year,0,Ur.dayOfYear);return this.year(Gi.getUTCFullYear()),this.month(Gi.getUTCMonth()),this.date(Gi.getUTCDate()),this}qt("N",0,0,"eraAbbr"),qt("NN",0,0,"eraAbbr"),qt("NNN",0,0,"eraAbbr"),qt("NNNN",0,0,"eraName"),qt("NNNNN",0,0,"eraNarrow"),qt("y",["y",1],"yo","eraYear"),qt("y",["yy",2],0,"eraYear"),qt("y",["yyy",3],0,"eraYear"),qt("y",["yyyy",4],0,"eraYear"),nr("N",Va),nr("NN",Va),nr("NNN",Va),nr("NNNN",function Os(ee,Ce){return Ce.erasNameRegex(ee)}),nr("NNNNN",function Cu(ee,Ce){return Ce.erasNarrowRegex(ee)}),mn(["N","NN","NNN","NNNN","NNNNN"],function(ee,Ce,vt,$t){var yn=vt._locale.erasParse(ee,$t,vt._strict);yn?J(vt).era=yn:J(vt).invalidEra=ee}),nr("y",qn),nr("yy",qn),nr("yyy",qn),nr("yyyy",qn),nr("yo",function ld(ee,Ce){return Ce._eraYearOrdinalRegex||qn}),mn(["y","yy","yyy","yyyy"],Ci),mn(["yo"],function(ee,Ce,vt,$t){var yn;vt._locale._eraYearOrdinalRegex&&(yn=ee.match(vt._locale._eraYearOrdinalRegex)),Ce[Ci]=vt._locale.eraYearOrdinalParse?vt._locale.eraYearOrdinalParse(ee,yn):parseInt(ee,10)}),qt(0,["gg",2],0,function(){return this.weekYear()%100}),qt(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Vu("gggg","weekYear"),Vu("ggggg","weekYear"),Vu("GGGG","isoWeekYear"),Vu("GGGGG","isoWeekYear"),hr("weekYear","gg"),hr("isoWeekYear","GG"),kr("weekYear",1),kr("isoWeekYear",1),nr("G",gr),nr("g",gr),nr("GG",et,Hn),nr("gg",et,Hn),nr("GGGG",Rt,Fe),nr("gggg",Rt,Fe),nr("GGGGG",Pe,Ie),nr("ggggg",Pe,Ie),wr(["gggg","ggggg","GGGG","GGGGG"],function(ee,Ce,vt,$t){Ce[$t.substr(0,2)]=pr(ee)}),wr(["gg","GG"],function(ee,Ce,vt,$t){Ce[$t]=a.parseTwoDigitYear(ee)}),qt("Q",0,"Qo","quarter"),hr("quarter","Q"),kr("quarter",7),nr("Q",Dn),mn("Q",function(ee,Ce){Ce[Ai]=3*(pr(ee)-1)}),qt("D",["DD",2],"Do","date"),hr("date","D"),kr("date",9),nr("D",et),nr("DD",et,Hn),nr("Do",function(ee,Ce){return ee?Ce._dayOfMonthOrdinalParse||Ce._ordinalParse:Ce._dayOfMonthOrdinalParseLenient}),mn(["D","DD"],Ko),mn("Do",function(ee,Ce){Ce[Ko]=pr(ee.match(et)[0])});var Hd=Eo("Date",!0);qt("DDD",["DDDD",3],"DDDo","dayOfYear"),hr("dayOfYear","DDD"),kr("dayOfYear",4),nr("DDD",lt),nr("DDDD",jt),mn(["DDD","DDDD"],function(ee,Ce,vt){vt._dayOfYear=pr(ee)}),qt("m",["mm",2],0,"minute"),hr("minute","m"),kr("minute",14),nr("m",et),nr("mm",et,Hn),mn(["m","mm"],dr);var gd=Eo("Minutes",!1);qt("s",["ss",2],0,"second"),hr("second","s"),kr("second",15),nr("s",et),nr("ss",et,Hn),mn(["s","ss"],Ni);var ed,xf,Nu=Eo("Seconds",!1);for(qt("S",0,0,function(){return~~(this.millisecond()/100)}),qt(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),qt(0,["SSS",3],0,"millisecond"),qt(0,["SSSS",4],0,function(){return 10*this.millisecond()}),qt(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),qt(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),qt(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),qt(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),qt(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),hr("millisecond","ms"),kr("millisecond",16),nr("S",lt,Dn),nr("SS",lt,Hn),nr("SSS",lt,jt),ed="SSSS";ed.length<=9;ed+="S")nr(ed,qn);function _u(ee,Ce){Ce[ti]=pr(1e3*("0."+ee))}for(ed="S";ed.length<=9;ed+="S")mn(ed,_u);xf=Eo("Milliseconds",!1),qt("z",0,0,"zoneAbbr"),qt("zz",0,0,"zoneName");var Lo=fe.prototype;function _e(ee){return ee}Lo.add=ad,Lo.calendar=function Nt(ee,Ce){1===arguments.length&&(arguments[0]?Wl(arguments[0])?(ee=arguments[0],Ce=void 0):function bu(ee){var yn,Ce=e(ee)&&!m(ee),vt=!1,$t=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(yn=0;yn<$t.length;yn+=1)vt=vt||f(ee,$t[yn]);return Ce&&vt}(arguments[0])&&(Ce=arguments[0],ee=void 0):(ee=void 0,Ce=void 0));var vt=ee||Qs(),$t=Gt(vt,this).startOf("day"),yn=a.calendarFormat(this,$t)||"sameElse",Ur=Ce&&(ct(Ce[yn])?Ce[yn].call(this,vt):Ce[yn]);return this.format(Ur||this.localeData().calendar(yn,this,Qs(vt)))},Lo.clone=function tt(){return new fe(this)},Lo.diff=function Ra(ee,Ce,vt){var $t,yn,Ur;if(!this.isValid())return NaN;if(!($t=Gt(ee,this)).isValid())return NaN;switch(yn=6e4*($t.utcOffset()-this.utcOffset()),Ce=Oi(Ce)){case"year":Ur=Vs(this,$t)/12;break;case"month":Ur=Vs(this,$t);break;case"quarter":Ur=Vs(this,$t)/3;break;case"second":Ur=(this-$t)/1e3;break;case"minute":Ur=(this-$t)/6e4;break;case"hour":Ur=(this-$t)/36e5;break;case"day":Ur=(this-$t-yn)/864e5;break;case"week":Ur=(this-$t-yn)/6048e5;break;default:Ur=this-$t}return vt?Ur:mr(Ur)},Lo.endOf=function rs(ee){var Ce,vt;if(void 0===(ee=Oi(ee))||"millisecond"===ee||!this.isValid())return this;switch(vt=this._isUTC?ao:Mi,ee){case"year":Ce=vt(this.year()+1,0,1)-1;break;case"quarter":Ce=vt(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":Ce=vt(this.year(),this.month()+1,1)-1;break;case"week":Ce=vt(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":Ce=vt(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":Ce=vt(this.year(),this.month(),this.date()+1)-1;break;case"hour":Ce=this._d.valueOf(),Ce+=Gn-Nr(Ce+(this._isUTC?0:this.utcOffset()*Qt),Gn)-1;break;case"minute":Ce=this._d.valueOf(),Ce+=Qt-Nr(Ce,Qt)-1;break;case"second":Ce=this._d.valueOf(),Ce+=zt-Nr(Ce,zt)-1}return this._d.setTime(Ce),a.updateOffset(this,!0),this},Lo.format=function Qa(ee){ee||(ee=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var Ce=xn(this,ee);return this.localeData().postformat(Ce)},Lo.from=function rn(ee,Ce){return this.isValid()&&(Te(ee)&&ee.isValid()||Qs(ee).isValid())?ca({to:this,from:ee}).locale(this.locale()).humanize(!Ce):this.localeData().invalidDate()},Lo.fromNow=function Jl(ee){return this.from(Qs(),ee)},Lo.to=function le(ee,Ce){return this.isValid()&&(Te(ee)&&ee.isValid()||Qs(ee).isValid())?ca({from:this,to:ee}).locale(this.locale()).humanize(!Ce):this.localeData().invalidDate()},Lo.toNow=function ae(ee){return this.to(Qs(),ee)},Lo.get=function qr(ee){return ct(this[ee=Oi(ee)])?this[ee]():this},Lo.invalidAt=function qc(){return J(this).overflow},Lo.isAfter=function tn(ee,Ce){var vt=Te(ee)?ee:Qs(ee);return!(!this.isValid()||!vt.isValid())&&("millisecond"===(Ce=Oi(Ce)||"millisecond")?this.valueOf()>vt.valueOf():vt.valueOf()<this.clone().startOf(Ce).valueOf())},Lo.isBefore=function Xn(ee,Ce){var vt=Te(ee)?ee:Qs(ee);return!(!this.isValid()||!vt.isValid())&&("millisecond"===(Ce=Oi(Ce)||"millisecond")?this.valueOf()<vt.valueOf():this.clone().endOf(Ce).valueOf()<vt.valueOf())},Lo.isBetween=function bi(ee,Ce,vt,$t){var yn=Te(ee)?ee:Qs(ee),Ur=Te(Ce)?Ce:Qs(Ce);return!!(this.isValid()&&yn.isValid()&&Ur.isValid())&&("("===($t=$t||"()")[0]?this.isAfter(yn,vt):!this.isBefore(yn,vt))&&(")"===$t[1]?this.isBefore(Ur,vt):!this.isAfter(Ur,vt))},Lo.isSame=function Ri(ee,Ce){var $t,vt=Te(ee)?ee:Qs(ee);return!(!this.isValid()||!vt.isValid())&&("millisecond"===(Ce=Oi(Ce)||"millisecond")?this.valueOf()===vt.valueOf():($t=vt.valueOf(),this.clone().startOf(Ce).valueOf()<=$t&&$t<=this.clone().endOf(Ce).valueOf()))},Lo.isSameOrAfter=function fs(ee,Ce){return this.isSame(ee,Ce)||this.isAfter(ee,Ce)},Lo.isSameOrBefore=function Fs(ee,Ce){return this.isSame(ee,Ce)||this.isBefore(ee,Ce)},Lo.isValid=function Rc(){return X(this)},Lo.lang=Ve,Lo.locale=De,Lo.localeData=st,Lo.max=zl,Lo.min=Hu,Lo.parsingFlags=function fu(){return U({},J(this))},Lo.set=function Hi(ee,Ce){if("object"==typeof ee){var $t,vt=function Ei(ee){var vt,Ce=[];for(vt in ee)f(ee,vt)&&Ce.push({unit:vt,priority:so[vt]});return Ce.sort(function($t,yn){return $t.priority-yn.priority}),Ce}(ee=Wi(ee)),yn=vt.length;for($t=0;$t<yn;$t++)this[vt[$t].unit](ee[vt[$t].unit])}else if(ct(this[ee=Oi(ee)]))return this[ee](Ce);return this},Lo.startOf=function Jo(ee){var Ce,vt;if(void 0===(ee=Oi(ee))||"millisecond"===ee||!this.isValid())return this;switch(vt=this._isUTC?ao:Mi,ee){case"year":Ce=vt(this.year(),0,1);break;case"quarter":Ce=vt(this.year(),this.month()-this.month()%3,1);break;case"month":Ce=vt(this.year(),this.month(),1);break;case"week":Ce=vt(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":Ce=vt(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":Ce=vt(this.year(),this.month(),this.date());break;case"hour":Ce=this._d.valueOf(),Ce-=Nr(Ce+(this._isUTC?0:this.utcOffset()*Qt),Gn);break;case"minute":Ce=this._d.valueOf(),Ce-=Nr(Ce,Qt);break;case"second":Ce=this._d.valueOf(),Ce-=Nr(Ce,zt)}return this._d.setTime(Ce),a.updateOffset(this,!0),this},Lo.subtract=kc,Lo.toArray=function eu(){var ee=this;return[ee.year(),ee.month(),ee.date(),ee.hour(),ee.minute(),ee.second(),ee.millisecond()]},Lo.toObject=function mu(){var ee=this;return{years:ee.year(),months:ee.month(),date:ee.date(),hours:ee.hours(),minutes:ee.minutes(),seconds:ee.seconds(),milliseconds:ee.milliseconds()}},Lo.toDate=function Ul(){return new Date(this.valueOf())},Lo.toISOString=function wl(ee){if(!this.isValid())return null;var Ce=!0!==ee,vt=Ce?this.clone().utc():this;return vt.year()<0||vt.year()>9999?xn(vt,Ce?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):ct(Date.prototype.toISOString)?Ce?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",xn(vt,"Z")):xn(vt,Ce?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},Lo.inspect=function Ho(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var vt,$t,ee="moment",Ce="";return this.isLocal()||(ee=0===this.utcOffset()?"moment.utc":"moment.parseZone",Ce="Z"),vt="["+ee+'("]',$t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(vt+$t+"-MM-DD[T]HH:mm:ss.SSS"+Ce+'[")]')},typeof Symbol<"u"&&null!=Symbol.for&&(Lo[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),Lo.toJSON=function wu(){return this.isValid()?this.toISOString():null},Lo.toString=function Ms(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},Lo.unix=function Ps(){return Math.floor(this.valueOf()/1e3)},Lo.valueOf=function ys(){return this._d.valueOf()-6e4*(this._offset||0)},Lo.creationData=function $c(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Lo.eraName=function al(){var ee,Ce,vt,$t=this.localeData().eras();for(ee=0,Ce=$t.length;ee<Ce;++ee)if(vt=this.clone().startOf("day").valueOf(),$t[ee].since<=vt&&vt<=$t[ee].until||$t[ee].until<=vt&&vt<=$t[ee].since)return $t[ee].name;return""},Lo.eraNarrow=function rl(){var ee,Ce,vt,$t=this.localeData().eras();for(ee=0,Ce=$t.length;ee<Ce;++ee)if(vt=this.clone().startOf("day").valueOf(),$t[ee].since<=vt&&vt<=$t[ee].until||$t[ee].until<=vt&&vt<=$t[ee].since)return $t[ee].narrow;return""},Lo.eraAbbr=function xa(){var ee,Ce,vt,$t=this.localeData().eras();for(ee=0,Ce=$t.length;ee<Ce;++ee)if(vt=this.clone().startOf("day").valueOf(),$t[ee].since<=vt&&vt<=$t[ee].until||$t[ee].until<=vt&&vt<=$t[ee].since)return $t[ee].abbr;return""},Lo.eraYear=function Tu(){var ee,Ce,vt,$t,yn=this.localeData().eras();for(ee=0,Ce=yn.length;ee<Ce;++ee)if(vt=yn[ee].since<=yn[ee].until?1:-1,$t=this.clone().startOf("day").valueOf(),yn[ee].since<=$t&&$t<=yn[ee].until||yn[ee].until<=$t&&$t<=yn[ee].since)return(this.year()-a(yn[ee].since).year())*vt+yn[ee].offset;return this.year()},Lo.year=Ro,Lo.isLeapYear=function jl(){return ii(this.year())},Lo.weekYear=function ud(ee){return Zu.call(this,ee,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},Lo.isoWeekYear=function md(ee){return Zu.call(this,ee,this.isoWeek(),this.isoWeekday(),1,4)},Lo.quarter=Lo.quarters=function ip(ee){return null==ee?Math.ceil((this.month()+1)/3):this.month(3*(ee-1)+this.month()%3)},Lo.month=ts,Lo.daysInMonth=function jo(){return Po(this.year(),this.month())},Lo.week=Lo.weeks=function Aa(ee){var Ce=this.localeData().week(this);return null==ee?Ce:this.add(7*(ee-Ce),"d")},Lo.isoWeek=Lo.isoWeeks=function Ja(ee){var Ce=Rl(this,1,4).week;return null==ee?Ce:this.add(7*(ee-Ce),"d")},Lo.weeksInYear=function Mu(){var ee=this.localeData()._week;return Ji(this.year(),ee.dow,ee.doy)},Lo.weeksInWeekYear=function Uc(){var ee=this.localeData()._week;return Ji(this.weekYear(),ee.dow,ee.doy)},Lo.isoWeeksInYear=function tf(){return Ji(this.year(),1,4)},Lo.isoWeeksInISOWeekYear=function Uf(){return Ji(this.isoWeekYear(),1,4)},Lo.date=Hd,Lo.day=Lo.days=function vi(ee){if(!this.isValid())return null!=ee?this:NaN;var Ce=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=ee?(ee=function fa(ee,Ce){return"string"!=typeof ee?ee:isNaN(ee)?"number"==typeof(ee=Ce.weekdaysParse(ee))?ee:null:parseInt(ee,10)}(ee,this.localeData()),this.add(ee-Ce,"d")):Ce},Lo.weekday=function Bi(ee){if(!this.isValid())return null!=ee?this:NaN;var Ce=(this.day()+7-this.localeData()._week.dow)%7;return null==ee?Ce:this.add(ee-Ce,"d")},Lo.isoWeekday=function Xi(ee){if(!this.isValid())return null!=ee?this:NaN;if(null!=ee){var Ce=function Xo(ee,Ce){return"string"==typeof ee?Ce.weekdaysParse(ee)%7||7:isNaN(ee)?null:ee}(ee,this.localeData());return this.day(this.day()%7?Ce:Ce-7)}return this.day()||7},Lo.dayOfYear=function Bf(ee){var Ce=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==ee?Ce:this.add(ee-Ce,"d")},Lo.hour=Lo.hours=Kc,Lo.minute=Lo.minutes=gd,Lo.second=Lo.seconds=Nu,Lo.millisecond=Lo.milliseconds=xf,Lo.utcOffset=function kn(ee,Ce,vt){var yn,$t=this._offset||0;if(!this.isValid())return null!=ee?this:NaN;if(null!=ee){if("string"==typeof ee){if(null===(ee=Xe(_r,ee)))return this}else Math.abs(ee)<16&&!vt&&(ee*=60);return!this._isUTC&&Ce&&(yn=An(this)),this._offset=ee,this._isUTC=!0,null!=yn&&this.add(yn,"m"),$t!==ee&&(!Ce||this._changeInProgress?Xc(this,ca(ee-$t,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?$t:An(this)},Lo.utc=function Xr(ee){return this.utcOffset(0,ee)},Lo.local=function yr(ee){return this._isUTC&&(this.utcOffset(0,ee),this._isUTC=!1,ee&&this.subtract(An(this),"m")),this},Lo.parseZone=function Rr(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var ee=Xe(Pn,this._i);null!=ee?this.utcOffset(ee):this.utcOffset(0,!0)}return this},Lo.hasAlignedHourOffset=function Go(ee){return!!this.isValid()&&(ee=ee?Qs(ee).utcOffset():0,(this.utcOffset()-ee)%60==0)},Lo.isDST=function Io(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Lo.isLocal=function Gr(){return!!this.isValid()&&!this._isUTC},Lo.isUtcOffset=function Fr(){return!!this.isValid()&&this._isUTC},Lo.isUtc=Ui,Lo.isUTC=Ui,Lo.zoneAbbr=function Ud(){return this._isUTC?"UTC":""},Lo.zoneName=function Bc(){return this._isUTC?"Coordinated Universal Time":""},Lo.dates=ge("dates accessor is deprecated. Use date instead.",Hd),Lo.months=ge("months accessor is deprecated. Use month instead",ts),Lo.years=ge("years accessor is deprecated. Use year instead",Ro),Lo.zone=ge("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function Hr(ee,Ce){return null!=ee?("string"!=typeof ee&&(ee=-ee),this.utcOffset(ee,Ce),this):-this.utcOffset()}),Lo.isDSTShifted=ge("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function Qn(){if(!T(this._isDSTShifted))return this._isDSTShifted;var Ce,ee={};return se(ee,this),(ee=Ya(ee))._a?(Ce=ee._isUTC?W(ee._a):Qs(ee._a),this._isDSTShifted=this.isValid()&&function Q(ee,Ce,vt){var Gi,$t=Math.min(ee.length,Ce.length),yn=Math.abs(ee.length-Ce.length),Ur=0;for(Gi=0;Gi<$t;Gi++)(vt&&ee[Gi]!==Ce[Gi]||!vt&&pr(ee[Gi])!==pr(Ce[Gi]))&&Ur++;return Ur+yn}(ee._a,Ce.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted});var Ye=We.prototype;function Mt(ee,Ce,vt,$t){var yn=El(),Ur=W().set($t,Ce);return yn[vt](Ur,ee)}function un(ee,Ce,vt){if(M(ee)&&(Ce=ee,ee=void 0),ee=ee||"",null!=Ce)return Mt(ee,Ce,vt,"month");var $t,yn=[];for($t=0;$t<12;$t++)yn[$t]=Mt(ee,$t,vt,"month");return yn}function Mn(ee,Ce,vt,$t){"boolean"==typeof ee?(M(Ce)&&(vt=Ce,Ce=void 0),Ce=Ce||""):(vt=Ce=ee,ee=!1,M(Ce)&&(vt=Ce,Ce=void 0),Ce=Ce||"");var Gi,yn=El(),Ur=ee?yn._week.dow:0,Ys=[];if(null!=vt)return Mt(Ce,(vt+Ur)%7,$t,"day");for(Gi=0;Gi<7;Gi++)Ys[Gi]=Mt(Ce,(Gi+Ur)%7,$t,"day");return Ys}Ye.calendar=function it(ee,Ce,vt){var $t=this._calendar[ee]||this._calendar.sameElse;return ct($t)?$t.call(Ce,vt):$t},Ye.longDateFormat=function Lr(ee){var Ce=this._longDateFormat[ee],vt=this._longDateFormat[ee.toUpperCase()];return Ce||!vt?Ce:(this._longDateFormat[ee]=vt.match(cn).map(function($t){return"MMMM"===$t||"MM"===$t||"DD"===$t||"dddd"===$t?$t.slice(1):$t}).join(""),this._longDateFormat[ee])},Ye.invalidDate=function Qr(){return this._invalidDate},Ye.ordinal=function ht(ee){return this._ordinal.replace("%d",ee)},Ye.preparse=_e,Ye.postformat=_e,Ye.relativeTime=function Tt(ee,Ce,vt,$t){var yn=this._relativeTime[vt];return ct(yn)?yn(ee,Ce,vt,$t):yn.replace(/%d/i,ee)},Ye.pastFuture=function wn(ee,Ce){var vt=this._relativeTime[ee>0?"future":"past"];return ct(vt)?vt(Ce):vt.replace(/%s/i,Ce)},Ye.set=function qe(ee){var Ce,vt;for(vt in ee)f(ee,vt)&&(ct(Ce=ee[vt])?this[vt]=Ce:this["_"+vt]=Ce);this._config=ee,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},Ye.eras=function pu(ee,Ce){var vt,$t,yn,Ur=this._eras||El("en")._eras;for(vt=0,$t=Ur.length;vt<$t;++vt)switch("string"==typeof Ur[vt].since&&(yn=a(Ur[vt].since).startOf("day"),Ur[vt].since=yn.valueOf()),typeof Ur[vt].until){case"undefined":Ur[vt].until=1/0;break;case"string":yn=a(Ur[vt].until).startOf("day").valueOf(),Ur[vt].until=yn.valueOf()}return Ur},Ye.erasParse=function vc(ee,Ce,vt){var $t,yn,Gi,Ys,Ka,Ur=this.eras();for(ee=ee.toUpperCase(),$t=0,yn=Ur.length;$t<yn;++$t)if(Gi=Ur[$t].name.toUpperCase(),Ys=Ur[$t].abbr.toUpperCase(),Ka=Ur[$t].narrow.toUpperCase(),vt)switch(Ce){case"N":case"NN":case"NNN":if(Ys===ee)return Ur[$t];break;case"NNNN":if(Gi===ee)return Ur[$t];break;case"NNNNN":if(Ka===ee)return Ur[$t]}else if([Gi,Ys,Ka].indexOf(ee)>=0)return Ur[$t]},Ye.erasConvertYear=function La(ee,Ce){var vt=ee.since<=ee.until?1:-1;return void 0===Ce?a(ee.since).year():a(ee.since).year()+(Ce-ee.offset)*vt},Ye.erasAbbrRegex=function Pu(ee){return f(this,"_erasAbbrRegex")||Hc.call(this),ee?this._erasAbbrRegex:this._erasRegex},Ye.erasNameRegex=function En(ee){return f(this,"_erasNameRegex")||Hc.call(this),ee?this._erasNameRegex:this._erasRegex},Ye.erasNarrowRegex=function za(ee){return f(this,"_erasNarrowRegex")||Hc.call(this),ee?this._erasNarrowRegex:this._erasRegex},Ye.months=function Bn(ee,Ce){return ee?u(this._months)?this._months[ee.month()]:this._months[(this._months.isFormat||ro).test(Ce)?"format":"standalone"][ee.month()]:u(this._months)?this._months:this._months.standalone},Ye.monthsShort=function ci(ee,Ce){return ee?u(this._monthsShort)?this._monthsShort[ee.month()]:this._monthsShort[ro.test(Ce)?"format":"standalone"][ee.month()]:u(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},Ye.monthsParse=function go(ee,Ce,vt){var $t,yn,Ur;if(this._monthsParseExact)return _o.call(this,ee,Ce,vt);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),$t=0;$t<12;$t++){if(yn=W([2e3,$t]),vt&&!this._longMonthsParse[$t]&&(this._longMonthsParse[$t]=new RegExp("^"+this.months(yn,"").replace(".","")+"$","i"),this._shortMonthsParse[$t]=new RegExp("^"+this.monthsShort(yn,"").replace(".","")+"$","i")),!vt&&!this._monthsParse[$t]&&(Ur="^"+this.months(yn,"")+"|^"+this.monthsShort(yn,""),this._monthsParse[$t]=new RegExp(Ur.replace(".",""),"i")),vt&&"MMMM"===Ce&&this._longMonthsParse[$t].test(ee))return $t;if(vt&&"MMM"===Ce&&this._shortMonthsParse[$t].test(ee))return $t;if(!vt&&this._monthsParse[$t].test(ee))return $t}},Ye.monthsRegex=function gs(ee){return this._monthsParseExact?(f(this,"_monthsRegex")||Is.call(this),ee?this._monthsStrictRegex:this._monthsRegex):(f(this,"_monthsRegex")||(this._monthsRegex=bn),this._monthsStrictRegex&&ee?this._monthsStrictRegex:this._monthsRegex)},Ye.monthsShortRegex=function ss(ee){return this._monthsParseExact?(f(this,"_monthsRegex")||Is.call(this),ee?this._monthsShortStrictRegex:this._monthsShortRegex):(f(this,"_monthsShortRegex")||(this._monthsShortRegex=Vt),this._monthsShortStrictRegex&&ee?this._monthsShortStrictRegex:this._monthsShortRegex)},Ye.week=function Ha(ee){return Rl(ee,this._week.dow,this._week.doy).week},Ye.firstDayOfYear=function $s(){return this._week.doy},Ye.firstDayOfWeek=function hs(){return this._week.dow},Ye.weekdays=function Tn(ee,Ce){var vt=u(this._weekdays)?this._weekdays:this._weekdays[ee&&!0!==ee&&this._weekdays.isFormat.test(Ce)?"format":"standalone"];return!0===ee?No(vt,this._week.dow):ee?vt[ee.day()]:vt},Ye.weekdaysMin=function Ze(ee){return!0===ee?No(this._weekdaysMin,this._week.dow):ee?this._weekdaysMin[ee.day()]:this._weekdaysMin},Ye.weekdaysShort=function ie(ee){return!0===ee?No(this._weekdaysShort,this._week.dow):ee?this._weekdaysShort[ee.day()]:this._weekdaysShort},Ye.weekdaysParse=function gn(ee,Ce,vt){var $t,yn,Ur;if(this._weekdaysParseExact)return Jt.call(this,ee,Ce,vt);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),$t=0;$t<7;$t++){if(yn=W([2e3,1]).day($t),vt&&!this._fullWeekdaysParse[$t]&&(this._fullWeekdaysParse[$t]=new RegExp("^"+this.weekdays(yn,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[$t]=new RegExp("^"+this.weekdaysShort(yn,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[$t]=new RegExp("^"+this.weekdaysMin(yn,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[$t]||(Ur="^"+this.weekdays(yn,"")+"|^"+this.weekdaysShort(yn,"")+"|^"+this.weekdaysMin(yn,""),this._weekdaysParse[$t]=new RegExp(Ur.replace(".",""),"i")),vt&&"dddd"===Ce&&this._fullWeekdaysParse[$t].test(ee))return $t;if(vt&&"ddd"===Ce&&this._shortWeekdaysParse[$t].test(ee))return $t;if(vt&&"dd"===Ce&&this._minWeekdaysParse[$t].test(ee))return $t;if(!vt&&this._weekdaysParse[$t].test(ee))return $t}},Ye.weekdaysRegex=function ws(ee){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||Js.call(this),ee?this._weekdaysStrictRegex:this._weekdaysRegex):(f(this,"_weekdaysRegex")||(this._weekdaysRegex=zr),this._weekdaysStrictRegex&&ee?this._weekdaysStrictRegex:this._weekdaysRegex)},Ye.weekdaysShortRegex=function ds(ee){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||Js.call(this),ee?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(f(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=io),this._weekdaysShortStrictRegex&&ee?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},Ye.weekdaysMinRegex=function qs(ee){return this._weekdaysParseExact?(f(this,"_weekdaysRegex")||Js.call(this),ee?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(f(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=gt),this._weekdaysMinStrictRegex&&ee?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},Ye.isPM=function qu(ee){return"p"===(ee+"").toLowerCase().charAt(0)},Ye.meridiem=function yl(ee,Ce,vt){return ee>11?vt?"pm":"PM":vt?"am":"AM"},ku("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(ee){var Ce=ee%10;return ee+(1===pr(ee%100/10)?"th":1===Ce?"st":2===Ce?"nd":3===Ce?"rd":"th")}}),a.lang=ge("moment.lang is deprecated. Use moment.locale instead.",ku),a.langData=ge("moment.langData is deprecated. Use moment.localeData instead.",El);var Bl=Math.abs;function pc(ee,Ce,vt,$t){var yn=ca(Ce,vt);return ee._milliseconds+=$t*yn._milliseconds,ee._days+=$t*yn._days,ee._months+=$t*yn._months,ee._bubble()}function tc(ee){return ee<0?Math.floor(ee):Math.ceil(ee)}function Ed(ee){return 4800*ee/146097}function h(ee){return 146097*ee/4800}function k(ee){return function(){return this.as(ee)}}var ne=k("ms"),he=k("s"),Me=k("m"),Qe=k("h"),Re=k("d"),ft=k("w"),wt=k("M"),It=k("Q"),Cn=k("y");function Dr(ee){return function(){return this.isValid()?this._data[ee]:NaN}}var oi=Dr("milliseconds"),uo=Dr("seconds"),As=Dr("minutes"),as=Dr("hours"),ma=Dr("days"),Na=Dr("months"),Pl=Dr("years");var dl=Math.round,Nl={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Qu(ee,Ce,vt,$t,yn){return yn.relativeTime(Ce||1,!!vt,ee,$t)}var Gc=Math.abs;function xc(ee){return(ee>0)-(ee<0)||+ee}function wf(){if(!this.isValid())return this.localeData().invalidDate();var $t,yn,Ur,Gi,Ka,ka,nu,rc,ee=Gc(this._milliseconds)/1e3,Ce=Gc(this._days),vt=Gc(this._months),Ys=this.asSeconds();return Ys?($t=mr(ee/60),yn=mr($t/60),ee%=60,$t%=60,Ur=mr(vt/12),vt%=12,Gi=ee?ee.toFixed(3).replace(/\.?0+$/,""):"",Ka=Ys<0?"-":"",ka=xc(this._months)!==xc(Ys)?"-":"",nu=xc(this._days)!==xc(Ys)?"-":"",rc=xc(this._milliseconds)!==xc(Ys)?"-":"",Ka+"P"+(Ur?ka+Ur+"Y":"")+(vt?ka+vt+"M":"")+(Ce?nu+Ce+"D":"")+(yn||$t||ee?"T":"")+(yn?rc+yn+"H":"")+($t?rc+$t+"M":"")+(ee?rc+Gi+"S":"")):"P0D"}var Ql=kl.prototype;return Ql.isValid=function du(){return this._isValid},Ql.abs=function Wu(){var ee=this._data;return this._milliseconds=Bl(this._milliseconds),this._days=Bl(this._days),this._months=Bl(this._months),ee.milliseconds=Bl(ee.milliseconds),ee.seconds=Bl(ee.seconds),ee.minutes=Bl(ee.minutes),ee.hours=Bl(ee.hours),ee.months=Bl(ee.months),ee.years=Bl(ee.years),this},Ql.add=function cd(ee,Ce){return pc(this,ee,Ce,1)},Ql.subtract=function Ju(ee,Ce){return pc(this,ee,Ce,-1)},Ql.as=function b(ee){if(!this.isValid())return NaN;var Ce,vt,$t=this._milliseconds;if("month"===(ee=Oi(ee))||"quarter"===ee||"year"===ee)switch(Ce=this._days+$t/864e5,vt=this._months+Ed(Ce),ee){case"month":return vt;case"quarter":return vt/3;case"year":return vt/12}else switch(Ce=this._days+Math.round(h(this._months)),ee){case"week":return Ce/7+$t/6048e5;case"day":return Ce+$t/864e5;case"hour":return 24*Ce+$t/36e5;case"minute":return 1440*Ce+$t/6e4;case"second":return 86400*Ce+$t/1e3;case"millisecond":return Math.floor(864e5*Ce)+$t;default:throw new Error("Unknown unit "+ee)}},Ql.asMilliseconds=ne,Ql.asSeconds=he,Ql.asMinutes=Me,Ql.asHours=Qe,Ql.asDays=Re,Ql.asWeeks=ft,Ql.asMonths=wt,Ql.asQuarters=It,Ql.asYears=Cn,Ql.valueOf=function N(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*pr(this._months/12):NaN},Ql._bubble=function od(){var yn,Ur,Gi,Ys,Ka,ee=this._milliseconds,Ce=this._days,vt=this._months,$t=this._data;return ee>=0&&Ce>=0&&vt>=0||ee<=0&&Ce<=0&&vt<=0||(ee+=864e5*tc(h(vt)+Ce),Ce=0,vt=0),$t.milliseconds=ee%1e3,yn=mr(ee/1e3),$t.seconds=yn%60,Ur=mr(yn/60),$t.minutes=Ur%60,Gi=mr(Ur/60),$t.hours=Gi%24,Ce+=mr(Gi/24),vt+=Ka=mr(Ed(Ce)),Ce-=tc(h(Ka)),Ys=mr(vt/12),vt%=12,$t.days=Ce,$t.months=vt,$t.years=Ys,this},Ql.clone=function er(){return ca(this)},Ql.get=function sr(ee){return ee=Oi(ee),this.isValid()?this[ee+"s"]():NaN},Ql.milliseconds=oi,Ql.seconds=uo,Ql.minutes=As,Ql.hours=as,Ql.days=ma,Ql.weeks=function il(){return mr(this.days()/7)},Ql.months=Na,Ql.years=Pl,Ql.humanize=function yc(ee,Ce){if(!this.isValid())return this.localeData().invalidDate();var yn,Ur,vt=!1,$t=Nl;return"object"==typeof ee&&(Ce=ee,ee=!1),"boolean"==typeof ee&&(vt=ee),"object"==typeof Ce&&($t=Object.assign({},Nl,Ce),null!=Ce.s&&null==Ce.ss&&($t.ss=Ce.s-1)),Ur=function ac(ee,Ce,vt,$t){var yn=ca(ee).abs(),Ur=dl(yn.as("s")),Gi=dl(yn.as("m")),Ys=dl(yn.as("h")),Ka=dl(yn.as("d")),ka=dl(yn.as("M")),nu=dl(yn.as("w")),rc=dl(yn.as("y")),_c=Ur<=vt.ss&&["s",Ur]||Ur<vt.s&&["ss",Ur]||Gi<=1&&["m"]||Gi<vt.m&&["mm",Gi]||Ys<=1&&["h"]||Ys<vt.h&&["hh",Ys]||Ka<=1&&["d"]||Ka<vt.d&&["dd",Ka];return null!=vt.w&&(_c=_c||nu<=1&&["w"]||nu<vt.w&&["ww",nu]),(_c=_c||ka<=1&&["M"]||ka<vt.M&&["MM",ka]||rc<=1&&["y"]||["yy",rc])[2]=Ce,_c[3]=+ee>0,_c[4]=$t,Qu.apply(null,_c)}(this,!vt,$t,yn=this.localeData()),vt&&(Ur=yn.pastFuture(+this,Ur)),yn.postformat(Ur)},Ql.toISOString=wf,Ql.toString=wf,Ql.toJSON=wf,Ql.locale=De,Ql.localeData=st,Ql.toIsoString=ge("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",wf),Ql.lang=Ve,qt("X",0,0,"unix"),qt("x",0,0,"valueOf"),nr("x",gr),nr("X",/[+-]?\d+(\.\d{1,3})?/),mn("X",function(ee,Ce,vt){vt._d=new Date(1e3*parseFloat(ee))}),mn("x",function(ee,Ce,vt){vt._d=new Date(pr(ee))}),a.version="2.29.4",function c(ee){r=ee}(Qs),a.fn=Lo,a.min=function hu(){return sc("isBefore",[].slice.call(arguments,0))},a.max=function lu(){return sc("isAfter",[].slice.call(arguments,0))},a.now=function(){return Date.now?Date.now():+new Date},a.utc=W,a.unix=function Se(ee){return Qs(1e3*ee)},a.months=function ni(ee,Ce){return un(ee,Ce,"months")},a.isDate=w,a.locale=ku,a.invalid=de,a.duration=ca,a.isMoment=Te,a.weekdays=function Wo(ee,Ce,vt){return Mn(ee,Ce,vt,"weekdays")},a.parseZone=function Ne(){return Qs.apply(null,arguments).parseZone()},a.localeData=El,a.isDuration=sl,a.monthsShort=function zi(ee,Ce){return un(ee,Ce,"monthsShort")},a.weekdaysMin=function ya(ee,Ce,vt){return Mn(ee,Ce,vt,"weekdaysMin")},a.defineLocale=zu,a.updateLocale=function ua(ee,Ce){if(null!=Ce){var vt,$t,yn=au;null!=Da[ee]&&null!=Da[ee].parentLocale?Da[ee].set(He(Da[ee]._config,Ce)):(null!=($t=Gs(ee))&&(yn=$t._config),Ce=He(yn,Ce),null==$t&&(Ce.abbr=ee),(vt=new We(Ce)).parentLocale=Da[ee],Da[ee]=vt),ku(ee)}else null!=Da[ee]&&(null!=Da[ee].parentLocale?(Da[ee]=Da[ee].parentLocale,ee===ku()&&ku(ee)):null!=Da[ee]&&delete Da[ee]);return Da[ee]},a.locales=function uu(){return Le(Da)},a.weekdaysShort=function Qo(ee,Ce,vt){return Mn(ee,Ce,vt,"weekdaysShort")},a.normalizeUnits=Oi,a.relativeTimeRounding=function wa(ee){return void 0===ee?dl:"function"==typeof ee&&(dl=ee,!0)},a.relativeTimeThreshold=function nc(ee,Ce){return void 0!==Nl[ee]&&(void 0===Ce?Nl[ee]:(Nl[ee]=Ce,"s"===ee&&(Nl.ss=Ce-1),!0))},a.calendarFormat=function je(ee,Ce){var vt=ee.diff(Ce,"days",!0);return vt<-6?"sameElse":vt<-1?"lastWeek":vt<0?"lastDay":vt<1?"sameDay":vt<2?"nextDay":vt<7?"nextWeek":"sameElse"},a.prototype=Lo,a.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},a}()},61717:(E,C,s)=>{"use strict";function e(ht,Wt,Tt,wn){var Oi,jn=arguments.length,hr=jn<3?Wt:null===wn?wn=Object.getOwnPropertyDescriptor(Wt,Tt):wn;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)hr=Reflect.decorate(ht,Wt,Tt,wn);else for(var Wi=ht.length-1;Wi>=0;Wi--)(Oi=ht[Wi])&&(hr=(jn<3?Oi(hr):jn>3?Oi(Wt,Tt,hr):Oi(Wt,Tt))||hr);return jn>3&&hr&&Object.defineProperty(Wt,Tt,hr),hr}s.d(C,{bH:()=>br,G8:()=>Rn,uh:()=>Qr});var ge=s(64537),Et=s(88692),ot=s(7357);const ct=["*"],qe=["templateOutlet"];function He(ht,Wt){if(1&ht&&(ge.TgZ(0,"div",6),ge._uU(1),ge.qZA()),2&ht){const Tt=ge.oxw(2);ge.xp6(1),ge.hij(" ",Tt.message||Tt.defaultMessage," ")}}function We(ht,Wt){if(1&ht&&(ge.TgZ(0,"div",3),ge._UZ(1,"div",4),ge.YNc(2,He,2,1,"div",5),ge.qZA()),2&ht){const Tt=ge.oxw();ge.xp6(2),ge.Q6J("ngIf",Tt.message||Tt.defaultMessage)}}function Le(ht,Wt){}function Pt(ht,Wt){1&ht&&ge.YNc(0,Le,0,0,"ng-template",null,7,ge.W1O)}const it=function(ht){return{active:ht}};let Xt=(()=>{class ht{}return ht.START="start",ht.STOP="stop",ht.UPDATE="update",ht.RESET="reset",ht.RESET_GLOBAL="reset_global",ht.UNSUBSCRIBE="unsubscribe",ht})();const cn="block-ui-main";let pn=(()=>{let ht=class{constructor(){this.blockUISettings={},this.blockUIInstances={},this.blockUISubject=new ot.t(1),this.blockUIObservable=this.blockUISubject.asObservable(),this.blockUIObservable.subscribe(this.blockUIMiddleware.bind(this))}getSettings(){return this.blockUISettings}updateSettings(Tt={}){this.blockUISettings=Object.assign(Object.assign({},this.blockUISettings),Tt)}decorate(Tt=cn){const wn={name:Tt,isActive:!1,blockCount:0,start:this.dispatch(this.blockUISubject,Xt.START,Tt),update:this.dispatch(this.blockUISubject,Xt.UPDATE,Tt),stop:this.dispatch(this.blockUISubject,Xt.STOP,Tt),reset:this.dispatch(this.blockUISubject,Xt.RESET,Tt),resetGlobal:this.dispatch(this.blockUISubject,Xt.RESET_GLOBAL,Tt),unsubscribe:this.dispatch(this.blockUISubject,Xt.UNSUBSCRIBE,Tt)};return this.blockUIInstances[Tt]=this.blockUIInstances[Tt]||wn,wn}observe(){return this.blockUIObservable}clearInstance(Tt){this.dispatch(this.blockUISubject,Xt.RESET,Tt)}blockUIMiddleware({action:Tt,name:wn}){let jn=null;switch(Tt){case Xt.START:jn=!0;break;case Xt.STOP:case Xt.RESET:jn=!1}null!==jn&&(this.blockUIInstances[wn].isActive=jn)}dispatch(Tt,wn,jn=cn){return hr=>{Tt.next({name:jn,action:wn,message:hr})}}};return ht.\u0275fac=function(Tt){return new(Tt||ht)},ht.\u0275prov=ge.Yz7({token:ht,factory:function(Wt){return ht.\u0275fac(Wt)}}),ht})(),Rn=(()=>{let ht=class{constructor(Tt){this.blockUI=Tt}ngOnInit(){this.name=this.name||cn,this.template=this.template||this.blockUI.blockUISettings.template}};return ht.\u0275fac=function(Tt){return new(Tt||ht)(ge.Y36(pn))},ht.\u0275cmp=ge.Xpm({type:ht,selectors:[["block-ui"]],inputs:{name:"name",template:"template",message:"message",delayStart:"delayStart",delayStop:"delayStop"},ngContentSelectors:ct,decls:2,vars:5,consts:[[3,"name","message","template","delayStart","delayStop"]],template:function(Tt,wn){1&Tt&&(ge.F$t(),ge.Hsn(0),ge._UZ(1,"block-ui-content",0)),2&Tt&&(ge.xp6(1),ge.Q6J("name",wn.name)("message",wn.message)("template",wn.template)("delayStart",wn.delayStart)("delayStop",wn.delayStop))},dependencies:function(){return[sn]},encapsulation:2}),e([(0,ge.IIB)()],ht.prototype,"name",void 0),e([(0,ge.IIB)()],ht.prototype,"message",void 0),e([(0,ge.IIB)()],ht.prototype,"delayStart",void 0),e([(0,ge.IIB)()],ht.prototype,"delayStop",void 0),e([(0,ge.IIB)()],ht.prototype,"template",void 0),ht})(),sn=(()=>{let ht=class{constructor(Tt,wn,jn){this.blockUI=Tt,this.resolver=wn,this.changeDetectionRef=jn,this.name=cn,this.defaultBlockState={startTimeouts:[],stopTimeouts:[],updateTimeouts:[],blockCount:0,startCallCount:0,stopCallCount:0},this.state=Object.assign({},this.defaultBlockState)}ngOnInit(){this.settings=this.blockUI.getSettings(),this.blockUISubscription=this.subscribeToBlockUI(this.blockUI.observe())}ngAfterViewInit(){try{if(!this.templateCmp)return!1;if(this.templateCmp instanceof ge.Rgc)this.templateOutlet.createEmbeddedView(this.templateCmp);else{const Tt=this.resolver.resolveComponentFactory(this.templateCmp);this.templateCompRef=this.templateOutlet.createComponent(Tt),this.updateBlockTemplate(this.message)}}catch(Tt){console.error("ng-block-ui:",Tt)}}ngAfterViewChecked(){this.detectChanges()}subscribeToBlockUI(Tt){return Tt.subscribe(wn=>this.onDispatchedEvent(wn))}onDispatchedEvent(Tt){switch(Tt.action){case Xt.START:this.onStart(Tt);break;case Xt.STOP:this.onStop(Tt);break;case Xt.UPDATE:this.onUpdate(Tt);break;case Xt.RESET:this.onReset(Tt);break;case Xt.RESET_GLOBAL:this.resetState();break;case Xt.UNSUBSCRIBE:this.onStop(Tt),this.onUnsubscribe(Tt.name)}}onStart({name:Tt,message:wn}){if(Tt===this.name){const jn=this.delayStart||this.settings.delayStart||0;this.state.startCallCount+=1;const hr=setTimeout(()=>{this.state.blockCount+=1,this.showBlock(wn),this.updateInstanceBlockCount()},jn);this.state.startTimeouts.push(hr)}}onStop({name:Tt}){if(Tt===this.name){const wn=this.state.stopCallCount+1;if(this.state.startCallCount-wn>=0){const jn=this.delayStop||this.settings.delayStop||0;this.state.stopCallCount=wn;const hr=setTimeout(()=>{this.state.blockCount-=1,this.updateInstanceBlockCount(),this.detectChanges()},jn);this.state.stopTimeouts.push(hr)}}}onUpdate({name:Tt,message:wn}){if(Tt===this.name){const jn=this.delayStart||this.settings.delayStart||0;clearTimeout(this.state.updateTimeouts[0]);const hr=setTimeout(()=>{this.updateMessage(wn)},jn);this.state.updateTimeouts.push(hr)}}onReset({name:Tt}){Tt===this.name&&this.resetState()}updateMessage(Tt){this.showBlock(Tt)}showBlock(Tt){this.message=Tt||this.defaultMessage||this.settings.message,this.updateBlockTemplate(this.message),this.detectChanges()}updateBlockTemplate(Tt){this.templateCompRef&&this.templateCompRef instanceof ge.UuU&&(this.templateCompRef.instance.message=Tt)}resetState(){[...this.state.startTimeouts,...this.state.stopTimeouts,...this.state.updateTimeouts].forEach(clearTimeout),this.state=Object.assign({},this.defaultBlockState),this.updateInstanceBlockCount(),this.detectChanges()}onUnsubscribe(Tt){this.blockUISubscription&&Tt===this.name&&this.blockUISubscription.unsubscribe()}updateInstanceBlockCount(){if(this.blockUI.blockUIInstances[this.name]){const{blockCount:Tt}=this.state;this.blockUI.blockUIInstances[this.name].blockCount=Tt}}detectChanges(){this.changeDetectionRef.destroyed||this.changeDetectionRef.detectChanges()}ngOnDestroy(){this.resetState(),this.onUnsubscribe(this.name),this.blockUI.clearInstance(this.name)}};return ht.\u0275fac=function(Tt){return new(Tt||ht)(ge.Y36(pn),ge.Y36(ge._Vd),ge.Y36(ge.sBO))},ht.\u0275cmp=ge.Xpm({type:ht,selectors:[["block-ui-content"]],viewQuery:function(Tt,wn){if(1&Tt&&ge.Gf(qe,5,ge.s_b),2&Tt){let jn;ge.iGM(jn=ge.CRH())&&(wn.templateOutlet=jn.first)}},inputs:{name:"name",delayStart:"delayStart",delayStop:"delayStop",defaultMessage:["message","defaultMessage"],templateCmp:["template","templateCmp"]},decls:3,vars:9,consts:[[3,"ngClass"],["class","block-ui-spinner",4,"ngIf"],[4,"ngIf"],[1,"block-ui-spinner"],[1,"loader"],["class","message",4,"ngIf"],[1,"message"],["templateOutlet",""]],template:function(Tt,wn){1&Tt&&(ge.TgZ(0,"div",0),ge.YNc(1,We,3,1,"div",1),ge.YNc(2,Pt,2,0,null,2),ge.qZA()),2&Tt&&(ge.MT6("block-ui-wrapper ",wn.name," ",wn.className,""),ge.Q6J("ngClass",ge.VKq(7,it,wn.state.blockCount>0)),ge.xp6(1),ge.Q6J("ngIf",!wn.templateCmp),ge.xp6(1),ge.Q6J("ngIf",wn.templateCmp))},dependencies:[Et.mk,Et.O5],styles:["\n.block-ui-wrapper {\n  display: none;\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  top: 0;\n  left: 0;\n  background: rgba(0, 0, 0, 0.70);\n  z-index: 30000;\n  cursor: wait;\n}\n\n.block-ui-wrapper.block-ui-wrapper--element {\n  position: absolute;\n}\n\n.block-ui-wrapper.active {\n  display: block;\n}\n\n.block-ui-wrapper.block-ui-main {\n  position: fixed;\n}\n\n.block-ui-spinner,\n.block-ui-template {\n  position: absolute;\n  top: 40%;\n  margin: 0 auto;\n  left: 0;\n  right: 0;\n  transform: translateY(-50%);\n}\n\n.block-ui-spinner > .message {\n  font-size: 1.3em;\n  text-align: center;\n  color: #fff;\n}\n\n.block-ui__element {\n  position: relative;\n}\n\n.loader,\n.loader:after {\n  border-radius: 50%;\n  width: 10em;\n  height: 10em;\n}\n.loader {\n  margin: 7px auto;\n  font-size: 5px;\n  position: relative;\n  text-indent: -9999em;\n  border-top: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-right: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-bottom: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-left: 1.1em solid #ffffff;\n  -webkit-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  transform: translateZ(0);\n  -webkit-animation: load8 1.1s infinite linear;\n  animation: load8 1.1s infinite linear;\n}\n\n@-webkit-keyframes load8 {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes load8 {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n"],encapsulation:2}),e([(0,ge.IIB)()],ht.prototype,"name",void 0),e([(0,ge.IIB)()],ht.prototype,"delayStart",void 0),e([(0,ge.IIB)()],ht.prototype,"delayStop",void 0),e([(0,ge.IIB)("message")],ht.prototype,"defaultMessage",void 0),e([(0,ge.IIB)("template")],ht.prototype,"templateCmp",void 0),e([(0,ge.i9L)("templateOutlet",{read:ge.s_b})],ht.prototype,"templateOutlet",void 0),ht})(),fn=(()=>{let ht=class{constructor(Tt){this.blockUIInstance=Tt,this.globalDispatch=this.blockUIInstance.decorate()}start(Tt,wn){this.dispatch(Tt,Xt.START,wn)}stop(Tt){this.dispatch(Tt,Xt.STOP)}reset(Tt){this.dispatch(Tt,Xt.RESET)}resetGlobal(){this.globalDispatch.resetGlobal()}update(Tt,wn){this.dispatch(Tt,Xt.UPDATE,wn)}unsubscribe(Tt){this.dispatch(Tt,Xt.UNSUBSCRIBE)}isActive(Tt=null){const wn=Tt?this.toArray(Tt):null,jn=this.blockUIInstance.blockUIInstances;return Object.keys(jn).some(hr=>wn?wn.indexOf(jn[hr].name)>=0&&jn[hr].isActive:jn[hr].isActive)}dispatch(Tt=[],wn,jn){this.toArray(Tt).forEach(Oi=>this.blockUIInstance.decorate(Oi)[wn](jn))}toArray(Tt=[]){return"string"==typeof Tt?[Tt]:Tt}};return ht.\u0275fac=function(Tt){return new(Tt||ht)(ge.LFG(pn))},ht.\u0275prov=ge.Yz7({token:ht,factory:function(Wt){return ht.\u0275fac(Wt)}}),ht})();var Kr;const Or=new pn,Lr=new ge.OlP("BlockUIModuleSettings");function ir(ht){return Or.updateSettings(ht),Or}let Qr=Kr=class{static forRoot(Wt={}){return{ngModule:Kr,providers:[{provide:Lr,useValue:Wt},{provide:pn,useFactory:ir,deps:[Lr]},fn]}}};Qr.\u0275fac=function(Wt){return new(Wt||Qr)},Qr.\u0275mod=ge.oAB({type:Qr}),Qr.\u0275inj=ge.cJS({imports:[Et.ez]});let jr=1;function br(ht,Wt={}){return Wt.scopeToInstance?function(Tt,wn){const jn=`_${wn}-block-ui`;Object.defineProperty(Tt,wn,{get:function(){if(this[jn])return this[jn];const hr=`${ht}-${jr++}`;return this[jn]=Or.decorate(hr),this[jn]},set:function(hr){this[jn]=hr}})}:function(Tt,wn){Tt[wn]=Or.decorate(ht)}}},90504:(E,C,s)=>{"use strict";s.d(C,{_:()=>f,w:()=>T});var r=s(64537),a=s(88692),c=function(M,w,D,U){var J,W=arguments.length,$=W<3?w:null===U?U=Object.getOwnPropertyDescriptor(w,D):U;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)$=Reflect.decorate(M,w,D,U);else for(var F=M.length-1;F>=0;F--)(J=M[F])&&($=(W<3?J($):W>3?J(w,D,$):J(w,D))||$);return W>3&&$&&Object.defineProperty(w,D,$),$},u=function(M,w){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(M,w)},e=function(M,w){return function(D,U){w(D,U,M)}},f=function(){function M(w,D,U){this._el=w,this._ngZone=D,this.platformId=U,this.clickOutsideEnabled=!0,this.attachOutsideOnClick=!1,this.delayClickOutsideInit=!1,this.emitOnBlur=!1,this.exclude="",this.excludeBeforeClick=!1,this.clickOutsideEvents="",this.clickOutside=new r.vpe,this._nodesExcluded=[],this._events=["click"],this._initOnClickBody=this._initOnClickBody.bind(this),this._onClickBody=this._onClickBody.bind(this),this._onWindowBlur=this._onWindowBlur.bind(this)}return M.prototype.ngOnInit=function(){(0,a.NF)(this.platformId)&&this._init()},M.prototype.ngOnDestroy=function(){(0,a.NF)(this.platformId)&&(this._removeClickOutsideListener(),this._removeAttachOutsideOnClickListener(),this._removeWindowBlurListener())},M.prototype.ngOnChanges=function(w){(0,a.NF)(this.platformId)&&(w.attachOutsideOnClick||w.exclude||w.emitOnBlur)&&this._init()},M.prototype._init=function(){""!==this.clickOutsideEvents&&(this._events=this.clickOutsideEvents.split(",").map(function(w){return w.trim()})),this._excludeCheck(),this.attachOutsideOnClick?this._initAttachOutsideOnClickListener():this._initOnClickBody(),this.emitOnBlur&&this._initWindowBlurListener()},M.prototype._initOnClickBody=function(){this.delayClickOutsideInit?setTimeout(this._initClickOutsideListener.bind(this)):this._initClickOutsideListener()},M.prototype._excludeCheck=function(){if(this.exclude)try{var w=Array.from(document.querySelectorAll(this.exclude));w&&(this._nodesExcluded=w)}catch(D){console.error("[ng-click-outside] Check your exclude selector syntax.",D)}},M.prototype._onClickBody=function(w){this.clickOutsideEnabled&&(this.excludeBeforeClick&&this._excludeCheck(),!this._el.nativeElement.contains(w.target)&&!this._shouldExclude(w.target)&&(this._emit(w),this.attachOutsideOnClick&&this._removeClickOutsideListener()))},M.prototype._onWindowBlur=function(w){var D=this;setTimeout(function(){document.hidden||D._emit(w)})},M.prototype._emit=function(w){var D=this;this.clickOutsideEnabled&&this._ngZone.run(function(){return D.clickOutside.emit(w)})},M.prototype._shouldExclude=function(w){for(var D=0,U=this._nodesExcluded;D<U.length;D++)if(U[D].contains(w))return!0;return!1},M.prototype._initClickOutsideListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){w._events.forEach(function(D){return document.addEventListener(D,w._onClickBody)})})},M.prototype._removeClickOutsideListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){w._events.forEach(function(D){return document.removeEventListener(D,w._onClickBody)})})},M.prototype._initAttachOutsideOnClickListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){w._events.forEach(function(D){return w._el.nativeElement.addEventListener(D,w._initOnClickBody)})})},M.prototype._removeAttachOutsideOnClickListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){w._events.forEach(function(D){return w._el.nativeElement.removeEventListener(D,w._initOnClickBody)})})},M.prototype._initWindowBlurListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){window.addEventListener("blur",w._onWindowBlur)})},M.prototype._removeWindowBlurListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){window.removeEventListener("blur",w._onWindowBlur)})},c([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"clickOutsideEnabled",void 0),c([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"attachOutsideOnClick",void 0),c([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"delayClickOutsideInit",void 0),c([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"emitOnBlur",void 0),c([(0,r.IIB)(),u("design:type",String)],M.prototype,"exclude",void 0),c([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"excludeBeforeClick",void 0),c([(0,r.IIB)(),u("design:type",String)],M.prototype,"clickOutsideEvents",void 0),c([(0,r.r_U)(),u("design:type",r.vpe)],M.prototype,"clickOutside",void 0),(M=c([e(2,(0,r.tBr)(r.Lbi)),u("design:paramtypes",[r.SBq,r.R0b,Object])],M)).\u0275fac=function(D){return new(D||M)(r.Y36(r.SBq),r.Y36(r.R0b),r.Y36(r.Lbi))},M.\u0275dir=r.lG2({type:M,selectors:[["","clickOutside",""]],inputs:{clickOutsideEnabled:"clickOutsideEnabled",attachOutsideOnClick:"attachOutsideOnClick",delayClickOutsideInit:"delayClickOutsideInit",emitOnBlur:"emitOnBlur",exclude:"exclude",excludeBeforeClick:"excludeBeforeClick",clickOutsideEvents:"clickOutsideEvents"},outputs:{clickOutside:"clickOutside"},features:[r.TTD]}),M.\u0275prov=r.Yz7({token:M,factory:function(w){return M.\u0275fac(w)}}),M}(),T=function(){function M(){}return M.\u0275fac=function(D){return new(D||M)},M.\u0275mod=r.oAB({type:M}),M.\u0275inj=r.cJS({}),M}()},72621:(E,C,s)=>{"use strict";s.d(C,{jh:()=>Te,m9:()=>$e});var r=s(64537),a=s(26215),c=s(65252);var T=s(6823);const M=[[255,99,132],[54,162,235],[255,206,86],[231,233,237],[75,192,192],[151,187,205],[220,220,220],[247,70,74],[70,191,189],[253,180,92],[148,159,177],[77,83,96]];function D(qe,He){return"rgba("+qe.concat(He).join(",")+")"}function U(qe,He){return Math.floor(Math.random()*(He-qe+1))+qe}function J(qe){return{backgroundColor:qe.map(He=>D(He,.6)),borderColor:qe.map(()=>"#fff"),pointBackgroundColor:qe.map(He=>D(He,1)),pointBorderColor:qe.map(()=>"#fff"),pointHoverBackgroundColor:qe.map(He=>D(He,1)),pointHoverBorderColor:qe.map(He=>D(He,1))}}function X(){return[U(0,255),U(0,255),U(0,255)]}function de(qe){return M[qe]||X()}function V(qe){const He=new Array(qe);for(let We=0;We<qe;We++)He[We]=M[We]||X();return He}let ce=(()=>{class qe{constructor(){this.pColorschemesOptions={},this.colorschemesOptions=new a.X({})}setColorschemesOptions(We){this.pColorschemesOptions=We,this.colorschemesOptions.next(We)}getColorschemesOptions(){return this.pColorschemesOptions}}return qe.\u0275fac=function(We){return new(We||qe)},qe.\u0275prov=(0,r.Yz7)({factory:function(){return new qe},token:qe,providedIn:"root"}),qe})();const fe={Default:0,Update:1,Refresh:2};fe[fe.Default]="Default",fe[fe.Update]="Update",fe[fe.Refresh]="Refresh";let Te=(()=>{class qe{constructor(We,Le){this.element=We,this.themeService=Le,this.options={},this.chartClick=new r.vpe,this.chartHover=new r.vpe,this.old={dataExists:!1,dataLength:0,datasetsExists:!1,datasetsLength:0,datasetsDataObjects:[],datasetsDataLengths:[],colorsExists:!1,colors:[],labelsExist:!1,labels:[],legendExists:!1,legend:{}},this.subs=[]}static registerPlugin(We){T.pluginService.register(We)}static unregisterPlugin(We){T.pluginService.unregister(We)}ngOnInit(){this.ctx=this.element.nativeElement.getContext("2d"),this.refresh(),this.subs.push(this.themeService.colorschemesOptions.subscribe(We=>this.themeChanged(We)))}themeChanged(We){this.refresh()}ngDoCheck(){if(!this.chart)return;let We=fe.Default;const Le=Pt=>{We=Pt>We?Pt:We};switch(!!this.data!==this.old.dataExists&&(this.propagateDataToDatasets(this.data),this.old.dataExists=!!this.data,Le(fe.Update)),this.data&&this.data.length!==this.old.dataLength&&(this.old.dataLength=this.data&&this.data.length||0,Le(fe.Update)),!!this.datasets!==this.old.datasetsExists&&(this.old.datasetsExists=!!this.datasets,Le(fe.Update)),this.datasets&&this.datasets.length!==this.old.datasetsLength&&(this.old.datasetsLength=this.datasets&&this.datasets.length||0,Le(fe.Update)),this.datasets&&this.datasets.filter((Pt,it)=>Pt.data!==this.old.datasetsDataObjects[it]).length&&(this.old.datasetsDataObjects=this.datasets.map(Pt=>Pt.data),Le(fe.Update)),this.datasets&&this.datasets.filter((Pt,it)=>Pt.data.length!==this.old.datasetsDataLengths[it]).length&&(this.old.datasetsDataLengths=this.datasets.map(Pt=>Pt.data.length),Le(fe.Update)),!!this.colors!==this.old.colorsExists&&(this.old.colorsExists=!!this.colors,this.updateColors(),Le(fe.Update)),this.colors&&this.colors.filter((Pt,it)=>!this.colorsEqual(Pt,this.old.colors[it])).length&&(this.old.colors=this.colors.map(Pt=>this.copyColor(Pt)),this.updateColors(),Le(fe.Update)),!!this.labels!==this.old.labelsExist&&(this.old.labelsExist=!!this.labels,Le(fe.Update)),this.labels&&this.labels.filter((Pt,it)=>!this.labelsEqual(Pt,this.old.labels[it])).length&&(this.old.labels=this.labels.map(Pt=>this.copyLabel(Pt)),Le(fe.Update)),!!this.options.legend!==this.old.legendExists&&(this.old.legendExists=!!this.options.legend,Le(fe.Refresh)),this.options.legend&&this.options.legend.position!==this.old.legend.position&&(this.old.legend.position=this.options.legend.position,Le(fe.Refresh)),We){case fe.Default:break;case fe.Update:this.update();break;case fe.Refresh:this.refresh()}}copyLabel(We){return Array.isArray(We)?[...We]:We}labelsEqual(We,Le){return Array.isArray(We)===Array.isArray(Le)&&(Array.isArray(We)||We===Le)&&(!Array.isArray(We)||We.length===Le.length)&&(!Array.isArray(We)||0===We.filter((Pt,it)=>Pt!==Le[it]).length)}copyColor(We){return{backgroundColor:We.backgroundColor,borderWidth:We.borderWidth,borderColor:We.borderColor,borderCapStyle:We.borderCapStyle,borderDash:We.borderDash,borderDashOffset:We.borderDashOffset,borderJoinStyle:We.borderJoinStyle,pointBorderColor:We.pointBorderColor,pointBackgroundColor:We.pointBackgroundColor,pointBorderWidth:We.pointBorderWidth,pointRadius:We.pointRadius,pointHoverRadius:We.pointHoverRadius,pointHitRadius:We.pointHitRadius,pointHoverBackgroundColor:We.pointHoverBackgroundColor,pointHoverBorderColor:We.pointHoverBorderColor,pointHoverBorderWidth:We.pointHoverBorderWidth,pointStyle:We.pointStyle,hoverBackgroundColor:We.hoverBackgroundColor,hoverBorderColor:We.hoverBorderColor,hoverBorderWidth:We.hoverBorderWidth}}colorsEqual(We,Le){return!We==!Le&&(!We||We.backgroundColor===Le.backgroundColor&&We.borderWidth===Le.borderWidth&&We.borderColor===Le.borderColor&&We.borderCapStyle===Le.borderCapStyle&&We.borderDash===Le.borderDash&&We.borderDashOffset===Le.borderDashOffset&&We.borderJoinStyle===Le.borderJoinStyle&&We.pointBorderColor===Le.pointBorderColor&&We.pointBackgroundColor===Le.pointBackgroundColor&&We.pointBorderWidth===Le.pointBorderWidth&&We.pointRadius===Le.pointRadius&&We.pointHoverRadius===Le.pointHoverRadius&&We.pointHitRadius===Le.pointHitRadius&&We.pointHoverBackgroundColor===Le.pointHoverBackgroundColor&&We.pointHoverBorderColor===Le.pointHoverBorderColor&&We.pointHoverBorderWidth===Le.pointHoverBorderWidth&&We.pointStyle===Le.pointStyle&&We.hoverBackgroundColor===Le.hoverBackgroundColor&&We.hoverBorderColor===Le.hoverBorderColor&&We.hoverBorderWidth===Le.hoverBorderWidth)}updateColors(){this.datasets.forEach((We,Le)=>{this.colors&&this.colors[Le]?Object.assign(We,this.colors[Le]):Object.assign(We,function w(qe,He,We){if("pie"===qe||"doughnut"===qe)return J(V(We));if("polarArea"===qe)return function F(qe){return{backgroundColor:qe.map(He=>D(He,.6)),borderColor:qe.map(He=>D(He,1)),hoverBackgroundColor:qe.map(He=>D(He,.8)),hoverBorderColor:qe.map(He=>D(He,1))}}(V(We));if("line"===qe||"radar"===qe)return function W(qe){return{backgroundColor:D(qe,.4),borderColor:D(qe,1),pointBackgroundColor:D(qe,1),pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:D(qe,.8)}}(de(He));if("bar"===qe||"horizontalBar"===qe)return function $(qe){return{backgroundColor:D(qe,.6),borderColor:D(qe,1),hoverBackgroundColor:D(qe,.8),hoverBorderColor:D(qe,1)}}(de(He));if("bubble"===qe||"scatter"===qe)return J(V(We));throw new Error(`getColors - Unsupported chart type ${qe}`)}(this.chartType,Le,We.data.length),Object.assign({},We))})}ngOnChanges(We){let Le=fe.Default;const Pt=it=>{Le=it>Le?it:Le};switch(We.hasOwnProperty("data")&&We.data.currentValue&&(this.propagateDataToDatasets(We.data.currentValue),Pt(fe.Update)),We.hasOwnProperty("datasets")&&We.datasets.currentValue&&(this.propagateDatasetsToData(We.datasets.currentValue),Pt(fe.Update)),We.hasOwnProperty("labels")&&(this.chart&&(this.chart.data.labels=We.labels.currentValue),Pt(fe.Update)),We.hasOwnProperty("legend")&&(this.chart&&(this.chart.config.options.legend.display=We.legend.currentValue,this.chart.generateLegend()),Pt(fe.Update)),We.hasOwnProperty("options")&&Pt(fe.Refresh),Le){case fe.Update:this.update();break;case fe.Refresh:case fe.Default:this.refresh()}}ngOnDestroy(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.subs.forEach(We=>We.unsubscribe())}update(We){if(this.chart)return this.chart.update(We)}hideDataset(We,Le){this.chart.getDatasetMeta(We).hidden=Le,this.chart.update()}isDatasetHidden(We){return this.chart.getDatasetMeta(We).hidden}toBase64Image(){return this.chart.toBase64Image()}getChartConfiguration(){const We=this.getDatasets(),Le=Object.assign({},this.options);!1===this.legend&&(Le.legend={display:!1}),Le.hover=Le.hover||{},Le.hover.onHover||(Le.hover.onHover=(it,Xt)=>{Xt&&!Xt.length||this.chartHover.emit({event:it,active:Xt})}),Le.onClick||(Le.onClick=(it,Xt)=>{this.chartClick.emit({event:it,active:Xt})});const Pt=this.smartMerge(Le,this.themeService.getColorschemesOptions());return{type:this.chartType,data:{labels:this.labels||[],datasets:We},plugins:this.plugins,options:Pt}}getChartBuilder(We){const Le=this.getChartConfiguration();return new T.Chart(We,Le)}smartMerge(We,Le,Pt=0){if(0===Pt&&(We=function f(qe){return(0,c.Z)(qe,5)}(We)),Object.keys(Le).forEach(Xt=>{if(Array.isArray(Le[Xt])){const cn=We[Xt];cn&&cn.forEach(pn=>{this.smartMerge(pn,Le[Xt][0],Pt+1)})}else"object"==typeof Le[Xt]?(Xt in We||(We[Xt]={}),this.smartMerge(We[Xt],Le[Xt],Pt+1)):We[Xt]=Le[Xt]}),0===Pt)return We}isMultiLineLabel(We){return Array.isArray(We)}joinLabel(We){return We?this.isMultiLineLabel(We)?We.join(" "):We:null}propagateDatasetsToData(We){this.data=this.datasets.map(Le=>Le.data),this.chart&&(this.chart.data.datasets=We),this.updateColors()}propagateDataToDatasets(We){this.isMultiDataSet(We)?this.datasets&&We.length===this.datasets.length?this.datasets.forEach((Le,Pt)=>{Le.data=We[Pt]}):(this.datasets=We.map((Le,Pt)=>({data:Le,label:this.joinLabel(this.labels[Pt])||`Label ${Pt}`})),this.chart&&(this.chart.data.datasets=this.datasets)):this.datasets?(this.datasets[0]||(this.datasets[0]={}),this.datasets[0].data=We,this.datasets.splice(1)):(this.datasets=[{data:We}],this.chart&&(this.chart.data.datasets=this.datasets)),this.updateColors()}isMultiDataSet(We){return Array.isArray(We[0])}getDatasets(){if(!this.datasets&&!this.data)throw new Error(`ng-charts configuration error, data or datasets field are required to render chart ${this.chartType}`);return this.datasets?(this.propagateDatasetsToData(this.datasets),this.datasets):this.data?(this.propagateDataToDatasets(this.data),this.datasets):void 0}refresh(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.ctx&&(this.chart=this.getChartBuilder(this.ctx))}}return qe.\u0275fac=function(We){return new(We||qe)(r.Y36(r.SBq),r.Y36(ce))},qe.\u0275dir=r.lG2({type:qe,selectors:[["canvas","baseChart",""]],inputs:{options:"options",data:"data",datasets:"datasets",labels:"labels",chartType:"chartType",colors:"colors",legend:"legend",plugins:"plugins"},outputs:{chartClick:"chartClick",chartHover:"chartHover"},exportAs:["base-chart"],features:[r.TTD]}),qe})(),$e=(()=>{class qe{}return qe.\u0275fac=function(We){return new(We||qe)},qe.\u0275mod=r.oAB({type:qe}),qe.\u0275inj=r.cJS({}),qe})()},37496:(E,C,s)=>{"use strict";s.d(C,{b:()=>c,i:()=>a});var r=s(64537);let a=(()=>{class u{transform(f,m,T){return T?m.call(T,f):m(f)}}return u.\u0275fac=function(f){return new(f||u)},u.\u0275pipe=r.Yjl({name:"pipeFunction",type:u,pure:!0}),u})(),c=(()=>{class u{}return u.\u0275fac=function(f){return new(f||u)},u.\u0275mod=r.oAB({type:u}),u.\u0275inj=r.cJS({}),u})()},18228:E=>{"use strict";var C=Object.getOwnPropertySymbols,s=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;E.exports=function c(){try{if(!Object.assign)return!1;var u=new String("abc");if(u[5]="de","5"===Object.getOwnPropertyNames(u)[0])return!1;for(var e={},f=0;f<10;f++)e["_"+String.fromCharCode(f)]=f;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(M){return e[M]}).join(""))return!1;var T={};return"abcdefghijklmnopqrst".split("").forEach(function(M){T[M]=M}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},T)).join("")}catch{return!1}}()?Object.assign:function(u,e){for(var f,T,m=function a(u){if(null==u)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(u)}(u),M=1;M<arguments.length;M++){for(var w in f=Object(arguments[M]))s.call(f,w)&&(m[w]=f[w]);if(C){T=C(f);for(var D=0;D<T.length;D++)r.call(f,T[D])&&(m[T[D]]=f[T[D]])}}return m}},81380:(E,C,s)=>{var r="function"==typeof Map&&Map.prototype,a=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,c=r&&a&&"function"==typeof a.get?a.get:null,u=r&&Map.prototype.forEach,e="function"==typeof Set&&Set.prototype,f=Object.getOwnPropertyDescriptor&&e?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,m=e&&f&&"function"==typeof f.get?f.get:null,T=e&&Set.prototype.forEach,w="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,U="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,$="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,J=Boolean.prototype.valueOf,F=Object.prototype.toString,X=Function.prototype.toString,de=String.prototype.match,V=String.prototype.slice,ce=String.prototype.replace,se=String.prototype.toUpperCase,fe=String.prototype.toLowerCase,Te=RegExp.prototype.test,$e=Array.prototype.concat,ge=Array.prototype.join,Et=Array.prototype.slice,ot=Math.floor,ct="function"==typeof BigInt?BigInt.prototype.valueOf:null,qe=Object.getOwnPropertySymbols,He="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,We="function"==typeof Symbol&&"object"==typeof Symbol.iterator,Le="function"==typeof Symbol&&Symbol.toStringTag&&(Symbol,1)?Symbol.toStringTag:null,Pt=Object.prototype.propertyIsEnumerable,it=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(Dn){return Dn.__proto__}:null);function Xt(Dn,Hn){if(Dn===1/0||Dn===-1/0||Dn!=Dn||Dn&&Dn>-1e3&&Dn<1e3||Te.call(/e/,Hn))return Hn;var jt=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof Dn){var Fe=Dn<0?-ot(-Dn):ot(Dn);if(Fe!==Dn){var Ie=String(Fe),et=V.call(Hn,Ie.length+1);return ce.call(Ie,jt,"$&_")+"."+ce.call(ce.call(et,/([0-9]{3})/g,"$&_"),/_$/,"")}}return ce.call(Hn,jt,"$&_")}var cn=s(24654),pn=cn.custom,Rn=Qr(pn)?pn:null;function At(Dn,Hn,jt){var Fe="double"===(jt.quoteStyle||Hn)?'"':"'";return Fe+Dn+Fe}function qt(Dn){return ce.call(String(Dn),/"/g,"&quot;")}function sn(Dn){return!("[object Array]"!==Wt(Dn)||Le&&"object"==typeof Dn&&Le in Dn)}function xn(Dn){return!("[object RegExp]"!==Wt(Dn)||Le&&"object"==typeof Dn&&Le in Dn)}function Qr(Dn){if(We)return Dn&&"object"==typeof Dn&&Dn instanceof Symbol;if("symbol"==typeof Dn)return!0;if(!Dn||"object"!=typeof Dn||!He)return!1;try{return He.call(Dn),!0}catch{}return!1}E.exports=function Dn(Hn,jt,Fe,Ie){var et=jt||{};if(ht(et,"quoteStyle")&&"single"!==et.quoteStyle&&"double"!==et.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(ht(et,"maxStringLength")&&("number"==typeof et.maxStringLength?et.maxStringLength<0&&et.maxStringLength!==1/0:null!==et.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var ze=!ht(et,"customInspect")||et.customInspect;if("boolean"!=typeof ze&&"symbol"!==ze)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(ht(et,"indent")&&null!==et.indent&&"\t"!==et.indent&&!(parseInt(et.indent,10)===et.indent&&et.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(ht(et,"numericSeparator")&&"boolean"!=typeof et.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var an=et.numericSeparator;if(typeof Hn>"u")return"undefined";if(null===Hn)return"null";if("boolean"==typeof Hn)return Hn?"true":"false";if("string"==typeof Hn)return Ei(Hn,et);if("number"==typeof Hn){if(0===Hn)return 1/0/Hn>0?"0":"-0";var lt=String(Hn);return an?Xt(Hn,lt):lt}if("bigint"==typeof Hn){var Rt=String(Hn)+"n";return an?Xt(Hn,Rt):Rt}var Pe=typeof et.depth>"u"?5:et.depth;if(typeof Fe>"u"&&(Fe=0),Fe>=Pe&&Pe>0&&"object"==typeof Hn)return sn(Hn)?"[Array]":"[Object]";var qn=function $i(Dn,Hn){var jt;if("\t"===Dn.indent)jt="\t";else{if(!("number"==typeof Dn.indent&&Dn.indent>0))return null;jt=ge.call(Array(Dn.indent+1)," ")}return{base:jt,prev:ge.call(Array(Hn+1),jt)}}(et,Fe);if(typeof Ie>"u")Ie=[];else if(wn(Ie,Hn)>=0)return"[Circular]";function gr(_s,dr,Ni){if(dr&&(Ie=Et.call(Ie)).push(dr),Ni){var ti={depth:et.depth};return ht(et,"quoteStyle")&&(ti.quoteStyle=et.quoteStyle),Dn(_s,ti,Fe+1,Ie)}return Dn(_s,et,Fe+1,Ie)}if("function"==typeof Hn&&!xn(Hn)){var Pn=function Tt(Dn){if(Dn.name)return Dn.name;var Hn=de.call(X.call(Dn),/^function\s*([\w$]+)/);return Hn?Hn[1]:null}(Hn),_r=Hi(Hn,gr);return"[Function"+(Pn?": "+Pn:" (anonymous)")+"]"+(_r.length>0?" { "+ge.call(_r,", ")+" }":"")}if(Qr(Hn)){var Pr=We?ce.call(String(Hn),/^(Symbol\(.*\))_[^)]*$/,"$1"):He.call(Hn);return"object"!=typeof Hn||We?Pr:mr(Pr)}if(function kr(Dn){return!(!Dn||"object"!=typeof Dn)&&(typeof HTMLElement<"u"&&Dn instanceof HTMLElement||"string"==typeof Dn.nodeName&&"function"==typeof Dn.getAttribute)}(Hn)){for(var tr="<"+fe.call(String(Hn.nodeName)),Zn=Hn.attributes||[],nr=0;nr<Zn.length;nr++)tr+=" "+Zn[nr].name+"="+At(qt(Zn[nr].value),"double",et);return tr+=">",Hn.childNodes&&Hn.childNodes.length&&(tr+="..."),tr+"</"+fe.call(String(Hn.nodeName))+">"}if(sn(Hn)){if(0===Hn.length)return"[]";var Zt=Hi(Hn,gr);return qn&&!function po(Dn){for(var Hn=0;Hn<Dn.length;Hn++)if(wn(Dn[Hn],"\n")>=0)return!1;return!0}(Zt)?"["+qr(Zt,qn)+"]":"[ "+ge.call(Zt,", ")+" ]"}if(function Kr(Dn){return!("[object Error]"!==Wt(Dn)||Le&&"object"==typeof Dn&&Le in Dn)}(Hn)){var dn=Hi(Hn,gr);return"cause"in Error.prototype||!("cause"in Hn)||Pt.call(Hn,"cause")?0===dn.length?"["+String(Hn)+"]":"{ ["+String(Hn)+"] "+ge.call(dn,", ")+" }":"{ ["+String(Hn)+"] "+ge.call($e.call("[cause]: "+gr(Hn.cause),dn),", ")+" }"}if("object"==typeof Hn&&ze){if(Rn&&"function"==typeof Hn[Rn]&&cn)return cn(Hn,{depth:Pe-Fe});if("symbol"!==ze&&"function"==typeof Hn.inspect)return Hn.inspect()}if(function jn(Dn){if(!c||!Dn||"object"!=typeof Dn)return!1;try{c.call(Dn);try{m.call(Dn)}catch{return!0}return Dn instanceof Map}catch{}return!1}(Hn)){var Ge=[];return u&&u.call(Hn,function(_s,dr){Ge.push(gr(dr,Hn,!0)+" => "+gr(_s,Hn))}),Eo("Map",c.call(Hn),Ge,qn)}if(function Wi(Dn){if(!m||!Dn||"object"!=typeof Dn)return!1;try{m.call(Dn);try{c.call(Dn)}catch{return!0}return Dn instanceof Set}catch{}return!1}(Hn)){var Ot=[];return T&&T.call(Hn,function(_s){Ot.push(gr(_s,Hn))}),Eo("Set",m.call(Hn),Ot,qn)}if(function hr(Dn){if(!w||!Dn||"object"!=typeof Dn)return!1;try{w.call(Dn,w);try{U.call(Dn,U)}catch{return!0}return Dn instanceof WeakMap}catch{}return!1}(Hn))return pr("WeakMap");if(function so(Dn){if(!U||!Dn||"object"!=typeof Dn)return!1;try{U.call(Dn,U);try{w.call(Dn,w)}catch{return!0}return Dn instanceof WeakSet}catch{}return!1}(Hn))return pr("WeakSet");if(function Oi(Dn){if(!$||!Dn||"object"!=typeof Dn)return!1;try{return $.call(Dn),!0}catch{}return!1}(Hn))return pr("WeakRef");if(function Lr(Dn){return!("[object Number]"!==Wt(Dn)||Le&&"object"==typeof Dn&&Le in Dn)}(Hn))return mr(gr(Number(Hn)));if(function jr(Dn){if(!Dn||"object"!=typeof Dn||!ct)return!1;try{return ct.call(Dn),!0}catch{}return!1}(Hn))return mr(gr(ct.call(Hn)));if(function ir(Dn){return!("[object Boolean]"!==Wt(Dn)||Le&&"object"==typeof Dn&&Le in Dn)}(Hn))return mr(J.call(Hn));if(function Or(Dn){return!("[object String]"!==Wt(Dn)||Le&&"object"==typeof Dn&&Le in Dn)}(Hn))return mr(gr(String(Hn)));if(!function fn(Dn){return!("[object Date]"!==Wt(Dn)||Le&&"object"==typeof Dn&&Le in Dn)}(Hn)&&!xn(Hn)){var mn=Hi(Hn,gr),wr=it?it(Hn)===Object.prototype:Hn instanceof Object||Hn.constructor===Object,Ti=Hn instanceof Object?"":"null prototype",Ci=!wr&&Le&&Object(Hn)===Hn&&Le in Hn?V.call(Wt(Hn),8,-1):Ti?"Object":"",Ko=(wr||"function"!=typeof Hn.constructor?"":Hn.constructor.name?Hn.constructor.name+" ":"")+(Ci||Ti?"["+ge.call($e.call([],Ci||[],Ti||[]),": ")+"] ":"");return 0===mn.length?Ko+"{}":qn?Ko+"{"+qr(mn,qn)+"}":Ko+"{ "+ge.call(mn,", ")+" }"}return String(Hn)};var br=Object.prototype.hasOwnProperty||function(Dn){return Dn in this};function ht(Dn,Hn){return br.call(Dn,Hn)}function Wt(Dn){return F.call(Dn)}function wn(Dn,Hn){if(Dn.indexOf)return Dn.indexOf(Hn);for(var jt=0,Fe=Dn.length;jt<Fe;jt++)if(Dn[jt]===Hn)return jt;return-1}function Ei(Dn,Hn){if(Dn.length>Hn.maxStringLength){var jt=Dn.length-Hn.maxStringLength,Fe="... "+jt+" more character"+(jt>1?"s":"");return Ei(V.call(Dn,0,Hn.maxStringLength),Hn)+Fe}return At(ce.call(ce.call(Dn,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,ii),"single",Hn)}function ii(Dn){var Hn=Dn.charCodeAt(0),jt={8:"b",9:"t",10:"n",12:"f",13:"r"}[Hn];return jt?"\\"+jt:"\\x"+(Hn<16?"0":"")+se.call(Hn.toString(16))}function mr(Dn){return"Object("+Dn+")"}function pr(Dn){return Dn+" { ? }"}function Eo(Dn,Hn,jt,Fe){return Dn+" ("+Hn+") {"+(Fe?qr(jt,Fe):ge.call(jt,", "))+"}"}function qr(Dn,Hn){if(0===Dn.length)return"";var jt="\n"+Hn.prev+Hn.base;return jt+ge.call(Dn,","+jt)+"\n"+Hn.prev}function Hi(Dn,Hn){var jt=sn(Dn),Fe=[];if(jt){Fe.length=Dn.length;for(var Ie=0;Ie<Dn.length;Ie++)Fe[Ie]=ht(Dn,Ie)?Hn(Dn[Ie],Dn):""}var ze,et="function"==typeof qe?qe(Dn):[];if(We){ze={};for(var an=0;an<et.length;an++)ze["$"+et[an]]=et[an]}for(var lt in Dn)ht(Dn,lt)&&(jt&&String(Number(lt))===lt&&lt<Dn.length||We&&ze["$"+lt]instanceof Symbol||(Te.call(/[^\w$]/,lt)?Fe.push(Hn(lt,Dn)+": "+Hn(Dn[lt],Dn)):Fe.push(lt+": "+Hn(Dn[lt],Dn))));if("function"==typeof qe)for(var Rt=0;Rt<et.length;Rt++)Pt.call(Dn,et[Rt])&&Fe.push("["+Hn(et[Rt])+"]: "+Hn(Dn[et[Rt]],Dn));return Fe}},29849:E=>{var s,r,C=E.exports={};function a(){throw new Error("setTimeout has not been defined")}function c(){throw new Error("clearTimeout has not been defined")}function u($){if(s===setTimeout)return setTimeout($,0);if((s===a||!s)&&setTimeout)return s=setTimeout,setTimeout($,0);try{return s($,0)}catch{try{return s.call(null,$,0)}catch{return s.call(this,$,0)}}}!function(){try{s="function"==typeof setTimeout?setTimeout:a}catch{s=a}try{r="function"==typeof clearTimeout?clearTimeout:c}catch{r=c}}();var T,f=[],m=!1,M=-1;function w(){!m||!T||(m=!1,T.length?f=T.concat(f):M=-1,f.length&&D())}function D(){if(!m){var $=u(w);m=!0;for(var J=f.length;J;){for(T=f,f=[];++M<J;)T&&T[M].run();M=-1,J=f.length}T=null,m=!1,function e($){if(r===clearTimeout)return clearTimeout($);if((r===c||!r)&&clearTimeout)return r=clearTimeout,clearTimeout($);try{r($)}catch{try{return r.call(null,$)}catch{return r.call(this,$)}}}($)}}function U($,J){this.fun=$,this.array=J}function W(){}C.nextTick=function($){var J=new Array(arguments.length-1);if(arguments.length>1)for(var F=1;F<arguments.length;F++)J[F-1]=arguments[F];f.push(new U($,J)),1===f.length&&!m&&u(D)},U.prototype.run=function(){this.fun.apply(null,this.array)},C.title="browser",C.browser=!0,C.env={},C.argv=[],C.version="",C.versions={},C.on=W,C.addListener=W,C.once=W,C.off=W,C.removeListener=W,C.removeAllListeners=W,C.emit=W,C.prependListener=W,C.prependOnceListener=W,C.listeners=function($){return[]},C.binding=function($){throw new Error("process.binding is not supported")},C.cwd=function(){return"/"},C.chdir=function($){throw new Error("process.chdir is not supported")},C.umask=function(){return 0}},25119:(E,C,s)=>{"use strict";var r=s(88411);function a(){}function c(){}c.resetWarningCache=a,E.exports=function(){function u(m,T,M,w,D,U){if(U!==r){var W=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw W.name="Invariant Violation",W}}function e(){return u}u.isRequired=u;var f={array:u,bigint:u,bool:u,func:u,number:u,object:u,string:u,symbol:u,any:u,arrayOf:e,element:u,elementType:u,instanceOf:e,node:u,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:c,resetWarningCache:a};return f.PropTypes=f,f}},76874:(E,C,s)=>{E.exports=s(25119)()},88411:E=>{"use strict";E.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},76959:(E,C)=>{"use strict";var s=Object.prototype.hasOwnProperty;function a(f){try{return decodeURIComponent(f.replace(/\+/g," "))}catch{return null}}function c(f){try{return encodeURIComponent(f)}catch{return null}}C.stringify=function e(f,m){m=m||"";var M,w,T=[];for(w in"string"!=typeof m&&(m="?"),f)if(s.call(f,w)){if(!(M=f[w])&&(null==M||isNaN(M))&&(M=""),w=c(w),M=c(M),null===w||null===M)continue;T.push(w+"="+M)}return T.length?m+T.join("&"):""},C.parse=function u(f){for(var M,m=/([^=?#&]+)=?([^&]*)/g,T={};M=m.exec(f);){var w=a(M[1]),D=a(M[2]);null===w||null===D||w in T||(T[w]=D)}return T}},17346:(E,C,s)=>{const r=s(66952),a=s(32582),c=r.types;E.exports=class _S{constructor(e,f){if(this._setDefaults(e),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,e=e.source;else{if("string"!=typeof e)throw new Error("Expected a regexp or string");this.ignoreCase=f&&-1!==f.indexOf("i"),this.multiline=f&&-1!==f.indexOf("m")}this.tokens=r(e)}_setDefaults(e){this.max=null!=e.max?e.max:null!=_S.prototype.max?_S.prototype.max:100,this.defaultRange=e.defaultRange?e.defaultRange:this.defaultRange.clone(),e.randInt&&(this.randInt=e.randInt)}gen(){return this._gen(this.tokens,[])}_gen(e,f){var m,T,M,w,D;switch(e.type){case c.ROOT:case c.GROUP:if(e.followedBy||e.notFollowedBy)return"";for(e.remember&&void 0===e.groupNumber&&(e.groupNumber=f.push(null)-1),T="",w=0,D=(m=e.options?this._randSelect(e.options):e.stack).length;w<D;w++)T+=this._gen(m[w],f);return e.remember&&(f[e.groupNumber]=T),T;case c.POSITION:return"";case c.SET:var U=this._expand(e);return U.length?String.fromCharCode(this._randSelect(U)):"";case c.REPETITION:for(M=this.randInt(e.min,e.max===1/0?e.min+this.max:e.max),T="",w=0;w<M;w++)T+=this._gen(e.value,f);return T;case c.REFERENCE:return f[e.value-1]||"";case c.CHAR:var W=this.ignoreCase&&this._randBool()?this._toOtherCase(e.value):e.value;return String.fromCharCode(W)}}_toOtherCase(e){return e+(97<=e&&e<=122?-32:65<=e&&e<=90?32:0)}_randBool(){return!this.randInt(0,1)}_randSelect(e){return e instanceof a?e.index(this.randInt(0,e.length-1)):e[this.randInt(0,e.length-1)]}_expand(e){if(e.type===r.types.CHAR)return new a(e.value);if(e.type===r.types.RANGE)return new a(e.from,e.to);{let f=new a;for(let m=0;m<e.set.length;m++){let T=this._expand(e.set[m]);if(f.add(T),this.ignoreCase)for(let M=0;M<T.length;M++){let w=T.index(M),D=this._toOtherCase(w);w!==D&&f.add(D)}}return e.not?this.defaultRange.clone().subtract(f):this.defaultRange.clone().intersect(f)}}randInt(e,f){return e+Math.floor(Math.random()*(1+f-e))}get defaultRange(){return this._range=this._range||new a(32,126)}set defaultRange(e){this._range=e}static randexp(e,f){var m;return"string"==typeof e&&(e=new RegExp(e,f)),void 0===e._randexp?(m=new _S(e,f),e._randexp=m):(m=e._randexp)._setDefaults(e),m.gen()}static sugar(){RegExp.prototype.gen=function(){return _S.randexp(this)}}}},57021:(E,C,s)=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0}),C.CopyToClipboard=void 0;var r=c(s(78139)),a=c(s(96967));function c(V){return V&&V.__esModule?V:{default:V}}function u(V){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(se){return typeof se}:function(se){return se&&"function"==typeof Symbol&&se.constructor===Symbol&&se!==Symbol.prototype?"symbol":typeof se})(V)}function e(V,ce){var se=Object.keys(V);if(Object.getOwnPropertySymbols){var fe=Object.getOwnPropertySymbols(V);ce&&(fe=fe.filter(function(Te){return Object.getOwnPropertyDescriptor(V,Te).enumerable})),se.push.apply(se,fe)}return se}function w(V,ce){for(var se=0;se<ce.length;se++){var fe=ce[se];fe.enumerable=fe.enumerable||!1,fe.configurable=!0,"value"in fe&&(fe.writable=!0),Object.defineProperty(V,fe.key,fe)}}function W(V){return(W=Object.setPrototypeOf?Object.getPrototypeOf:function(se){return se.__proto__||Object.getPrototypeOf(se)})(V)}function $(V){if(void 0===V)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return V}function F(V,ce){return(F=Object.setPrototypeOf||function(fe,Te){return fe.__proto__=Te,fe})(V,ce)}function X(V,ce,se){return ce in V?Object.defineProperty(V,ce,{value:se,enumerable:!0,configurable:!0,writable:!0}):V[ce]=se,V}var de=function(V){function ce(){var se,fe;!function M(V,ce){if(!(V instanceof ce))throw new TypeError("Cannot call a class as a function")}(this,ce);for(var Te=arguments.length,$e=new Array(Te),ge=0;ge<Te;ge++)$e[ge]=arguments[ge];return fe=function U(V,ce){return!ce||"object"!==u(ce)&&"function"!=typeof ce?$(V):ce}(this,(se=W(ce)).call.apply(se,[this].concat($e))),X($(fe),"onClick",function(Et){var ot=fe.props,ct=ot.text,qe=ot.onCopy,We=ot.options,Le=r.default.Children.only(ot.children),Pt=(0,a.default)(ct,We);qe&&qe(ct,Pt),Le&&Le.props&&"function"==typeof Le.props.onClick&&Le.props.onClick(Et)}),fe}return function J(V,ce){if("function"!=typeof ce&&null!==ce)throw new TypeError("Super expression must either be null or a function");V.prototype=Object.create(ce&&ce.prototype,{constructor:{value:V,writable:!0,configurable:!0}}),ce&&F(V,ce)}(ce,V),function D(V,ce,se){ce&&w(V.prototype,ce),se&&w(V,se)}(ce,[{key:"render",value:function(){var fe=this.props,Et=fe.children,ot=function m(V,ce){if(null==V)return{};var fe,Te,se=function T(V,ce){if(null==V)return{};var Te,$e,se={},fe=Object.keys(V);for($e=0;$e<fe.length;$e++)!(ce.indexOf(Te=fe[$e])>=0)&&(se[Te]=V[Te]);return se}(V,ce);if(Object.getOwnPropertySymbols){var $e=Object.getOwnPropertySymbols(V);for(Te=0;Te<$e.length;Te++)!(ce.indexOf(fe=$e[Te])>=0)&&Object.prototype.propertyIsEnumerable.call(V,fe)&&(se[fe]=V[fe])}return se}(fe,["text","onCopy","options","children"]),ct=r.default.Children.only(Et);return r.default.cloneElement(ct,function f(V){for(var ce=1;ce<arguments.length;ce++){var se=null!=arguments[ce]?arguments[ce]:{};ce%2?e(se,!0).forEach(function(fe){X(V,fe,se[fe])}):Object.getOwnPropertyDescriptors?Object.defineProperties(V,Object.getOwnPropertyDescriptors(se)):e(se).forEach(function(fe){Object.defineProperty(V,fe,Object.getOwnPropertyDescriptor(se,fe))})}return V}({},ot,{onClick:this.onClick}))}}]),ce}(r.default.PureComponent);C.CopyToClipboard=de,X(de,"defaultProps",{onCopy:void 0,options:void 0})},43409:(E,C,s)=>{"use strict";var a=s(57021).CopyToClipboard;a.CopyToClipboard=a,E.exports=a},16709:(E,C,s)=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0}),C.DebounceInput=void 0;var r=c(s(78139)),a=c(s(86906));function c(se){return se&&se.__esModule?se:{default:se}}function u(se){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(Te){return typeof Te}:function(Te){return Te&&"function"==typeof Symbol&&Te.constructor===Symbol&&Te!==Symbol.prototype?"symbol":typeof Te})(se)}function m(se,fe){var Te=Object.keys(se);if(Object.getOwnPropertySymbols){var $e=Object.getOwnPropertySymbols(se);fe&&($e=$e.filter(function(ge){return Object.getOwnPropertyDescriptor(se,ge).enumerable})),Te.push.apply(Te,$e)}return Te}function T(se){for(var fe=1;fe<arguments.length;fe++){var Te=null!=arguments[fe]?arguments[fe]:{};fe%2?m(Object(Te),!0).forEach(function($e){V(se,$e,Te[$e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(se,Object.getOwnPropertyDescriptors(Te)):m(Object(Te)).forEach(function($e){Object.defineProperty(se,$e,Object.getOwnPropertyDescriptor(Te,$e))})}return se}function w(se,fe){for(var Te=0;Te<fe.length;Te++){var $e=fe[Te];$e.enumerable=$e.enumerable||!1,$e.configurable=!0,"value"in $e&&($e.writable=!0),Object.defineProperty(se,$e.key,$e)}}function W(se,fe){return(W=Object.setPrototypeOf||function($e,ge){return $e.__proto__=ge,$e})(se,fe)}function F(se){if(void 0===se)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return se}function de(se){return(de=Object.setPrototypeOf?Object.getPrototypeOf:function(Te){return Te.__proto__||Object.getPrototypeOf(Te)})(se)}function V(se,fe,Te){return fe in se?Object.defineProperty(se,fe,{value:Te,enumerable:!0,configurable:!0,writable:!0}):se[fe]=Te,se}var ce=function(se){!function U(se,fe){if("function"!=typeof fe&&null!==fe)throw new TypeError("Super expression must either be null or a function");se.prototype=Object.create(fe&&fe.prototype,{constructor:{value:se,writable:!0,configurable:!0}}),fe&&W(se,fe)}(Te,se);var fe=function $(se){var fe=function X(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch{return!1}}();return function(){var ge,$e=de(se);if(fe){var Et=de(this).constructor;ge=Reflect.construct($e,arguments,Et)}else ge=$e.apply(this,arguments);return function J(se,fe){return!fe||"object"!==u(fe)&&"function"!=typeof fe?F(se):fe}(this,ge)}}(Te);function Te($e){var ge;return function M(se,fe){if(!(se instanceof fe))throw new TypeError("Cannot call a class as a function")}(this,Te),V(F(ge=fe.call(this,$e)),"onChange",function(ot){ot.persist();var ct=ge.state.value,qe=ge.props.minLength;ge.setState({value:ot.target.value},function(){var He=ge.state.value;He.length>=qe?ge.notify(ot):ct.length>He.length&&ge.notify(T(T({},ot),{},{target:T(T({},ot.target),{},{value:""})}))})}),V(F(ge),"onKeyDown",function(ot){"Enter"===ot.key&&ge.forceNotify(ot);var ct=ge.props.onKeyDown;ct&&(ot.persist(),ct(ot))}),V(F(ge),"onBlur",function(ot){ge.forceNotify(ot);var ct=ge.props.onBlur;ct&&(ot.persist(),ct(ot))}),V(F(ge),"createNotifier",function(ot){if(ot<0)ge.notify=function(){return null};else if(0===ot)ge.notify=ge.doNotify;else{var ct=(0,a.default)(function(qe){ge.isDebouncing=!1,ge.doNotify(qe)},ot);ge.notify=function(qe){ge.isDebouncing=!0,ct(qe)},ge.flush=function(){return ct.flush()},ge.cancel=function(){ge.isDebouncing=!1,ct.cancel()}}}),V(F(ge),"doNotify",function(){ge.props.onChange.apply(void 0,arguments)}),V(F(ge),"forceNotify",function(ot){if(ge.isDebouncing||!(ge.props.debounceTimeout>0)){ge.cancel&&ge.cancel();var qe=ge.state.value;ge.doNotify(qe.length>=ge.props.minLength?ot:T(T({},ot),{},{target:T(T({},ot.target),{},{value:qe})}))}}),ge.isDebouncing=!1,ge.state={value:typeof $e.value>"u"||null===$e.value?"":$e.value},ge.createNotifier(ge.props.debounceTimeout),ge}return function D(se,fe,Te){fe&&w(se.prototype,fe),Te&&w(se,Te)}(Te,[{key:"componentDidUpdate",value:function(ge){if(!this.isDebouncing){var Et=this.props,ot=Et.value,ct=Et.debounceTimeout,qe=ge.debounceTimeout;typeof ot<"u"&&ge.value!==ot&&this.state.value!==ot&&this.setState({value:ot}),ct!==qe&&this.createNotifier(ct)}}},{key:"componentWillUnmount",value:function(){this.flush&&this.flush()}},{key:"render",value:function(){var Rn,At,ge=this.props,Et=ge.element,We=ge.forceNotifyByEnter,Le=ge.forceNotifyOnBlur,Pt=ge.onKeyDown,it=ge.onBlur,Xt=ge.inputRef,cn=function e(se,fe){if(null==se)return{};var $e,ge,Te=function f(se,fe){if(null==se)return{};var ge,Et,Te={},$e=Object.keys(se);for(Et=0;Et<$e.length;Et++)!(fe.indexOf(ge=$e[Et])>=0)&&(Te[ge]=se[ge]);return Te}(se,fe);if(Object.getOwnPropertySymbols){var Et=Object.getOwnPropertySymbols(se);for(ge=0;ge<Et.length;ge++)!(fe.indexOf($e=Et[ge])>=0)&&Object.prototype.propertyIsEnumerable.call(se,$e)&&(Te[$e]=se[$e])}return Te}(ge,["element","onChange","value","minLength","debounceTimeout","forceNotifyByEnter","forceNotifyOnBlur","onKeyDown","onBlur","inputRef"]),pn=this.state.value;Rn=We?{onKeyDown:this.onKeyDown}:Pt?{onKeyDown:Pt}:{},At=Le?{onBlur:this.onBlur}:it?{onBlur:it}:{};var qt=Xt?{ref:Xt}:{};return r.default.createElement(Et,T(T(T(T({},cn),{},{onChange:this.onChange,value:pn},Rn),At),qt))}}]),Te}(r.default.PureComponent);C.DebounceInput=ce,V(ce,"defaultProps",{element:"input",type:"text",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},41205:(E,C,s)=>{"use strict";var a=s(16709).DebounceInput;a.DebounceInput=a,E.exports=a},85503:(E,C,s)=>{"use strict";var r=s(78139),a=s(18228),c=s(88712);function u(y){for(var x="https://reactjs.org/docs/error-decoder.html?invariant="+y,Y=1;Y<arguments.length;Y++)x+="&args[]="+encodeURIComponent(arguments[Y]);return"Minified React error #"+y+"; visit "+x+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(u(227));var e=new Set,f={};function m(y,x){T(y,x),T(y+"Capture",x)}function T(y,x){for(f[y]=x,y=0;y<x.length;y++)e.add(x[y])}var M=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),w=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,D=Object.prototype.hasOwnProperty,U={},W={};function X(y,x,Y,be,Ke,xt,_n){this.acceptsBooleans=2===x||3===x||4===x,this.attributeName=be,this.attributeNamespace=Ke,this.mustUseProperty=Y,this.propertyName=y,this.type=x,this.sanitizeURL=xt,this.removeEmptyString=_n}var de={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(y){de[y]=new X(y,0,!1,y,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(y){var x=y[0];de[x]=new X(x,1,!1,y[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(y){de[y]=new X(y,2,!1,y.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(y){de[y]=new X(y,2,!1,y,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(y){de[y]=new X(y,3,!1,y.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(y){de[y]=new X(y,3,!0,y,null,!1,!1)}),["capture","download"].forEach(function(y){de[y]=new X(y,4,!1,y,null,!1,!1)}),["cols","rows","size","span"].forEach(function(y){de[y]=new X(y,6,!1,y,null,!1,!1)}),["rowSpan","start"].forEach(function(y){de[y]=new X(y,5,!1,y.toLowerCase(),null,!1,!1)});var V=/[\-:]([a-z])/g;function ce(y){return y[1].toUpperCase()}function se(y,x,Y,be){var Ke=de.hasOwnProperty(x)?de[x]:null;(null!==Ke?0===Ke.type:!be&&2<x.length&&("o"===x[0]||"O"===x[0])&&("n"===x[1]||"N"===x[1]))||(function F(y,x,Y,be){if(null===x||typeof x>"u"||function J(y,x,Y,be){if(null!==Y&&0===Y.type)return!1;switch(typeof x){case"function":case"symbol":return!0;case"boolean":return!be&&(null!==Y?!Y.acceptsBooleans:"data-"!==(y=y.toLowerCase().slice(0,5))&&"aria-"!==y);default:return!1}}(y,x,Y,be))return!0;if(be)return!1;if(null!==Y)switch(Y.type){case 3:return!x;case 4:return!1===x;case 5:return isNaN(x);case 6:return isNaN(x)||1>x}return!1}(x,Y,Ke,be)&&(Y=null),be||null===Ke?function $(y){return!!D.call(W,y)||!D.call(U,y)&&(w.test(y)?W[y]=!0:(U[y]=!0,!1))}(x)&&(null===Y?y.removeAttribute(x):y.setAttribute(x,""+Y)):Ke.mustUseProperty?y[Ke.propertyName]=null===Y?3!==Ke.type&&"":Y:(x=Ke.attributeName,be=Ke.attributeNamespace,null===Y?y.removeAttribute(x):(Y=3===(Ke=Ke.type)||4===Ke&&!0===Y?"":""+Y,be?y.setAttributeNS(be,x,Y):y.setAttribute(x,Y))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(y){var x=y.replace(V,ce);de[x]=new X(x,1,!1,y,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(y){var x=y.replace(V,ce);de[x]=new X(x,1,!1,y,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(y){var x=y.replace(V,ce);de[x]=new X(x,1,!1,y,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(y){de[y]=new X(y,1,!1,y.toLowerCase(),null,!1,!1)}),de.xlinkHref=new X("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(y){de[y]=new X(y,1,!1,y.toLowerCase(),null,!0,!0)});var fe=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Te=60103,$e=60106,ge=60107,Et=60108,ot=60114,ct=60109,qe=60110,He=60112,We=60113,Le=60120,Pt=60115,it=60116,Xt=60121,cn=60128,pn=60129,Rn=60130,At=60131;if("function"==typeof Symbol&&Symbol.for){var qt=Symbol.for;Te=qt("react.element"),$e=qt("react.portal"),ge=qt("react.fragment"),Et=qt("react.strict_mode"),ot=qt("react.profiler"),ct=qt("react.provider"),qe=qt("react.context"),He=qt("react.forward_ref"),We=qt("react.suspense"),Le=qt("react.suspense_list"),Pt=qt("react.memo"),it=qt("react.lazy"),Xt=qt("react.block"),qt("react.scope"),cn=qt("react.opaque.id"),pn=qt("react.debug_trace_mode"),Rn=qt("react.offscreen"),At=qt("react.legacy_hidden")}var xn,sn="function"==typeof Symbol&&Symbol.iterator;function fn(y){return null===y||"object"!=typeof y?null:"function"==typeof(y=sn&&y[sn]||y["@@iterator"])?y:null}function Kr(y){if(void 0===xn)try{throw Error()}catch(Y){var x=Y.stack.trim().match(/\n( *(at )?)/);xn=x&&x[1]||""}return"\n"+xn+y}var Or=!1;function Lr(y,x){if(!y||Or)return"";Or=!0;var Y=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(x)if(x=function(){throw Error()},Object.defineProperty(x.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(x,[])}catch(vr){var be=vr}Reflect.construct(y,[],x)}else{try{x.call()}catch(vr){be=vr}y.call(x.prototype)}else{try{throw Error()}catch(vr){be=vr}y()}}catch(vr){if(vr&&be&&"string"==typeof vr.stack){for(var Ke=vr.stack.split("\n"),xt=be.stack.split("\n"),_n=Ke.length-1,In=xt.length-1;1<=_n&&0<=In&&Ke[_n]!==xt[In];)In--;for(;1<=_n&&0<=In;_n--,In--)if(Ke[_n]!==xt[In]){if(1!==_n||1!==In)do{if(_n--,0>--In||Ke[_n]!==xt[In])return"\n"+Ke[_n].replace(" at new "," at ")}while(1<=_n&&0<=In);break}}}finally{Or=!1,Error.prepareStackTrace=Y}return(y=y?y.displayName||y.name:"")?Kr(y):""}function ir(y){switch(y.tag){case 5:return Kr(y.type);case 16:return Kr("Lazy");case 13:return Kr("Suspense");case 19:return Kr("SuspenseList");case 0:case 2:case 15:return Lr(y.type,!1);case 11:return Lr(y.type.render,!1);case 22:return Lr(y.type._render,!1);case 1:return Lr(y.type,!0);default:return""}}function Qr(y){if(null==y)return null;if("function"==typeof y)return y.displayName||y.name||null;if("string"==typeof y)return y;switch(y){case ge:return"Fragment";case $e:return"Portal";case ot:return"Profiler";case Et:return"StrictMode";case We:return"Suspense";case Le:return"SuspenseList"}if("object"==typeof y)switch(y.$$typeof){case qe:return(y.displayName||"Context")+".Consumer";case ct:return(y._context.displayName||"Context")+".Provider";case He:var x=y.render;return x=x.displayName||x.name||"",y.displayName||(""!==x?"ForwardRef("+x+")":"ForwardRef");case Pt:return Qr(y.type);case Xt:return Qr(y._render);case it:x=y._payload,y=y._init;try{return Qr(y(x))}catch{}}return null}function jr(y){switch(typeof y){case"boolean":case"number":case"object":case"string":case"undefined":return y;default:return""}}function br(y){var x=y.type;return(y=y.nodeName)&&"input"===y.toLowerCase()&&("checkbox"===x||"radio"===x)}function Wt(y){y._valueTracker||(y._valueTracker=function ht(y){var x=br(y)?"checked":"value",Y=Object.getOwnPropertyDescriptor(y.constructor.prototype,x),be=""+y[x];if(!y.hasOwnProperty(x)&&typeof Y<"u"&&"function"==typeof Y.get&&"function"==typeof Y.set){var Ke=Y.get,xt=Y.set;return Object.defineProperty(y,x,{configurable:!0,get:function(){return Ke.call(this)},set:function(_n){be=""+_n,xt.call(this,_n)}}),Object.defineProperty(y,x,{enumerable:Y.enumerable}),{getValue:function(){return be},setValue:function(_n){be=""+_n},stopTracking:function(){y._valueTracker=null,delete y[x]}}}}(y))}function Tt(y){if(!y)return!1;var x=y._valueTracker;if(!x)return!0;var Y=x.getValue(),be="";return y&&(be=br(y)?y.checked?"true":"false":y.value),(y=be)!==Y&&(x.setValue(y),!0)}function wn(y){if(typeof(y=y||(typeof document<"u"?document:void 0))>"u")return null;try{return y.activeElement||y.body}catch{return y.body}}function jn(y,x){return a({},x,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:x.checked??y._wrapperState.initialChecked})}function hr(y,x){var Y=null==x.defaultValue?"":x.defaultValue,be=null!=x.checked?x.checked:x.defaultChecked;Y=jr(null!=x.value?x.value:Y),y._wrapperState={initialChecked:be,initialValue:Y,controlled:"checkbox"===x.type||"radio"===x.type?null!=x.checked:null!=x.value}}function Oi(y,x){null!=(x=x.checked)&&se(y,"checked",x,!1)}function Wi(y,x){Oi(y,x);var Y=jr(x.value),be=x.type;if(null!=Y)"number"===be?(0===Y&&""===y.value||y.value!=Y)&&(y.value=""+Y):y.value!==""+Y&&(y.value=""+Y);else if("submit"===be||"reset"===be)return void y.removeAttribute("value");x.hasOwnProperty("value")?kr(y,x.type,Y):x.hasOwnProperty("defaultValue")&&kr(y,x.type,jr(x.defaultValue)),null==x.checked&&null!=x.defaultChecked&&(y.defaultChecked=!!x.defaultChecked)}function so(y,x,Y){if(x.hasOwnProperty("value")||x.hasOwnProperty("defaultValue")){var be=x.type;if(("submit"===be||"reset"===be)&&null==x.value)return;x=""+y._wrapperState.initialValue,Y||x===y.value||(y.value=x),y.defaultValue=x}""!==(Y=y.name)&&(y.name=""),y.defaultChecked=!!y._wrapperState.initialChecked,""!==Y&&(y.name=Y)}function kr(y,x,Y){("number"!==x||wn(y.ownerDocument)!==y)&&(null==Y?y.defaultValue=""+y._wrapperState.initialValue:y.defaultValue!==""+Y&&(y.defaultValue=""+Y))}function ii(y,x){return y=a({children:void 0},x),(x=function Ei(y){var x="";return r.Children.forEach(y,function(Y){null!=Y&&(x+=Y)}),x}(x.children))&&(y.children=x),y}function mr(y,x,Y,be){if(y=y.options,x){x={};for(var Ke=0;Ke<Y.length;Ke++)x["$"+Y[Ke]]=!0;for(Y=0;Y<y.length;Y++)Ke=x.hasOwnProperty("$"+y[Y].value),y[Y].selected!==Ke&&(y[Y].selected=Ke),Ke&&be&&(y[Y].defaultSelected=!0)}else{for(Y=""+jr(Y),x=null,Ke=0;Ke<y.length;Ke++){if(y[Ke].value===Y)return y[Ke].selected=!0,void(be&&(y[Ke].defaultSelected=!0));null!==x||y[Ke].disabled||(x=y[Ke])}null!==x&&(x.selected=!0)}}function pr(y,x){if(null!=x.dangerouslySetInnerHTML)throw Error(u(91));return a({},x,{value:void 0,defaultValue:void 0,children:""+y._wrapperState.initialValue})}function Eo(y,x){var Y=x.value;if(null==Y){if(Y=x.children,x=x.defaultValue,null!=Y){if(null!=x)throw Error(u(92));if(Array.isArray(Y)){if(!(1>=Y.length))throw Error(u(93));Y=Y[0]}x=Y}null==x&&(x=""),Y=x}y._wrapperState={initialValue:jr(Y)}}function po(y,x){var Y=jr(x.value),be=jr(x.defaultValue);null!=Y&&((Y=""+Y)!==y.value&&(y.value=Y),null==x.defaultValue&&y.defaultValue!==Y&&(y.defaultValue=Y)),null!=be&&(y.defaultValue=""+be)}function $i(y){var x=y.textContent;x===y._wrapperState.initialValue&&""!==x&&null!==x&&(y.value=x)}var qr={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Hi(y){switch(y){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Dn(y,x){return null==y||"http://www.w3.org/1999/xhtml"===y?Hi(x):"http://www.w3.org/2000/svg"===y&&"foreignObject"===x?"http://www.w3.org/1999/xhtml":y}var Hn,y,jt=(y=function(y,x){if(y.namespaceURI!==qr.svg||"innerHTML"in y)y.innerHTML=x;else{for((Hn=Hn||document.createElement("div")).innerHTML="<svg>"+x.valueOf().toString()+"</svg>",x=Hn.firstChild;y.firstChild;)y.removeChild(y.firstChild);for(;x.firstChild;)y.appendChild(x.firstChild)}},typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(x,Y,be,Ke){MSApp.execUnsafeLocalFunction(function(){return y(x,Y)})}:y);function Fe(y,x){if(x){var Y=y.firstChild;if(Y&&Y===y.lastChild&&3===Y.nodeType)return void(Y.nodeValue=x)}y.textContent=x}var Ie={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},et=["Webkit","ms","Moz","O"];function ze(y,x,Y){return null==x||"boolean"==typeof x||""===x?"":Y||"number"!=typeof x||0===x||Ie.hasOwnProperty(y)&&Ie[y]?(""+x).trim():x+"px"}function an(y,x){for(var Y in y=y.style,x)if(x.hasOwnProperty(Y)){var be=0===Y.indexOf("--"),Ke=ze(Y,x[Y],be);"float"===Y&&(Y="cssFloat"),be?y.setProperty(Y,Ke):y[Y]=Ke}}Object.keys(Ie).forEach(function(y){et.forEach(function(x){x=x+y.charAt(0).toUpperCase()+y.substring(1),Ie[x]=Ie[y]})});var lt=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Rt(y,x){if(x){if(lt[y]&&(null!=x.children||null!=x.dangerouslySetInnerHTML))throw Error(u(137,y));if(null!=x.dangerouslySetInnerHTML){if(null!=x.children)throw Error(u(60));if("object"!=typeof x.dangerouslySetInnerHTML||!("__html"in x.dangerouslySetInnerHTML))throw Error(u(61))}if(null!=x.style&&"object"!=typeof x.style)throw Error(u(62))}}function Pe(y,x){if(-1===y.indexOf("-"))return"string"==typeof x.is;switch(y){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function qn(y){return(y=y.target||y.srcElement||window).correspondingUseElement&&(y=y.correspondingUseElement),3===y.nodeType?y.parentNode:y}var gr=null,Pn=null,_r=null;function Pr(y){if(y=wu(y)){if("function"!=typeof gr)throw Error(u(280));var x=y.stateNode;x&&(x=fu(x),gr(y.stateNode,y.type,x))}}function tr(y){Pn?_r?_r.push(y):_r=[y]:Pn=y}function Zn(){if(Pn){var y=Pn,x=_r;if(_r=Pn=null,Pr(y),x)for(y=0;y<x.length;y++)Pr(x[y])}}function nr(y,x){return y(x)}function Zt(y,x,Y,be,Ke){return y(x,Y,be,Ke)}function dn(){}var Ge=nr,Ot=!1,mn=!1;function wr(){(null!==Pn||null!==_r)&&(dn(),Zn())}function Ci(y,x){var Y=y.stateNode;if(null===Y)return null;var be=fu(Y);if(null===be)return null;Y=be[x];e:switch(x){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(be=!be.disabled)||(be=!("button"===(y=y.type)||"input"===y||"select"===y||"textarea"===y)),y=!be;break e;default:y=!1}if(y)return null;if(Y&&"function"!=typeof Y)throw Error(u(231,x,typeof Y));return Y}var Ai=!1;if(M)try{var Ko={};Object.defineProperty(Ko,"passive",{get:function(){Ai=!0}}),window.addEventListener("test",Ko,Ko),window.removeEventListener("test",Ko,Ko)}catch{Ai=!1}function _s(y,x,Y,be,Ke,xt,_n,In,vr){var Si=Array.prototype.slice.call(arguments,3);try{x.apply(Y,Si)}catch(Uo){this.onError(Uo)}}var dr=!1,Ni=null,ti=!1,Vr=null,wi={onError:function(y){dr=!0,Ni=y}};function ji(y,x,Y,be,Ke,xt,_n,In,vr){dr=!1,Ni=null,_s.apply(wi,arguments)}function Po(y){var x=y,Y=y;if(y.alternate)for(;x.return;)x=x.return;else{y=x;do{1026&(x=y).flags&&(Y=x.return),y=x.return}while(y)}return 3===x.tag?Y:null}function ko(y){if(13===y.tag){var x=y.memoizedState;if(null===x&&null!==(y=y.alternate)&&(x=y.memoizedState),null!==x)return x.dehydrated}return null}function Ir(y){if(Po(y)!==y)throw Error(u(188))}function Vt(y){if(y=function ro(y){var x=y.alternate;if(!x){if(null===(x=Po(y)))throw Error(u(188));return x!==y?null:y}for(var Y=y,be=x;;){var Ke=Y.return;if(null===Ke)break;var xt=Ke.alternate;if(null===xt){if(null!==(be=Ke.return)){Y=be;continue}break}if(Ke.child===xt.child){for(xt=Ke.child;xt;){if(xt===Y)return Ir(Ke),y;if(xt===be)return Ir(Ke),x;xt=xt.sibling}throw Error(u(188))}if(Y.return!==be.return)Y=Ke,be=xt;else{for(var _n=!1,In=Ke.child;In;){if(In===Y){_n=!0,Y=Ke,be=xt;break}if(In===be){_n=!0,be=Ke,Y=xt;break}In=In.sibling}if(!_n){for(In=xt.child;In;){if(In===Y){_n=!0,Y=xt,be=Ke;break}if(In===be){_n=!0,be=xt,Y=Ke;break}In=In.sibling}if(!_n)throw Error(u(189))}}if(Y.alternate!==be)throw Error(u(190))}if(3!==Y.tag)throw Error(u(188));return Y.stateNode.current===Y?y:x}(y),!y)return null;for(var x=y;;){if(5===x.tag||6===x.tag)return x;if(x.child)x.child.return=x,x=x.child;else{if(x===y)break;for(;!x.sibling;){if(!x.return||x.return===y)return null;x=x.return}x.sibling.return=x.return,x=x.sibling}}return null}function bn(y,x){for(var Y=y.alternate;null!==x;){if(x===y||x===Y)return!0;x=x.return}return!1}var Bn,ci,_o,go,es=!1,ts=[],jo=null,ss=null,gs=null,Is=new Map,la=new Map,Ro=[],jl="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function gl(y,x,Y,be,Ke){return{blockedOn:y,domEventName:x,eventSystemFlags:16|Y,nativeEvent:Ke,targetContainers:[be]}}function qa(y,x){switch(y){case"focusin":case"focusout":jo=null;break;case"dragenter":case"dragleave":ss=null;break;case"mouseover":case"mouseout":gs=null;break;case"pointerover":case"pointerout":Is.delete(x.pointerId);break;case"gotpointercapture":case"lostpointercapture":la.delete(x.pointerId)}}function da(y,x,Y,be,Ke,xt){return null===y||y.nativeEvent!==xt?(y=gl(x,Y,be,Ke,xt),null!==x&&null!==(x=wu(x))&&ci(x),y):(y.eventSystemFlags|=be,x=y.targetContainers,null!==Ke&&-1===x.indexOf(Ke)&&x.push(Ke),y)}function Rl(y){var x=mu(y.target);if(null!==x){var Y=Po(x);if(null!==Y)if(13===(x=Y.tag)){if(null!==(x=ko(Y)))return y.blockedOn=x,void go(y.lanePriority,function(){c.unstable_runWithPriority(y.priority,function(){_o(Y)})})}else if(3===x&&Y.stateNode.hydrate)return void(y.blockedOn=3===Y.tag?Y.stateNode.containerInfo:null)}y.blockedOn=null}function Ji(y){if(null!==y.blockedOn)return!1;for(var x=y.targetContainers;0<x.length;){var Y=ju(y.domEventName,y.eventSystemFlags,x[0],y.nativeEvent);if(null!==Y)return null!==(x=wu(Y))&&ci(x),y.blockedOn=Y,!1;x.shift()}return!0}function Ha(y,x,Y){Ji(y)&&Y.delete(x)}function Ts(){for(es=!1;0<ts.length;){var y=ts[0];if(null!==y.blockedOn){null!==(y=wu(y.blockedOn))&&Bn(y);break}for(var x=y.targetContainers;0<x.length;){var Y=ju(y.domEventName,y.eventSystemFlags,x[0],y.nativeEvent);if(null!==Y){y.blockedOn=Y;break}x.shift()}null===y.blockedOn&&ts.shift()}null!==jo&&Ji(jo)&&(jo=null),null!==ss&&Ji(ss)&&(ss=null),null!==gs&&Ji(gs)&&(gs=null),Is.forEach(Ha),la.forEach(Ha)}function hs(y,x){y.blockedOn===x&&(y.blockedOn=null,es||(es=!0,c.unstable_scheduleCallback(c.unstable_NormalPriority,Ts)))}function $s(y){function x(Ke){return hs(Ke,y)}if(0<ts.length){hs(ts[0],y);for(var Y=1;Y<ts.length;Y++){var be=ts[Y];be.blockedOn===y&&(be.blockedOn=null)}}for(null!==jo&&hs(jo,y),null!==ss&&hs(ss,y),null!==gs&&hs(gs,y),Is.forEach(x),la.forEach(x),Y=0;Y<Ro.length;Y++)(be=Ro[Y]).blockedOn===y&&(be.blockedOn=null);for(;0<Ro.length&&null===(Y=Ro[0]).blockedOn;)Rl(Y),null===Y.blockedOn&&Ro.shift()}function Aa(y,x){var Y={};return Y[y.toLowerCase()]=x.toLowerCase(),Y["Webkit"+y]="webkit"+x,Y["Moz"+y]="moz"+x,Y}var Ja={animationend:Aa("Animation","AnimationEnd"),animationiteration:Aa("Animation","AnimationIteration"),animationstart:Aa("Animation","AnimationStart"),transitionend:Aa("Transition","TransitionEnd")},fa={},Xo={};function No(y){if(fa[y])return fa[y];if(!Ja[y])return y;var Y,x=Ja[y];for(Y in x)if(x.hasOwnProperty(Y)&&Y in Xo)return fa[y]=x[Y];return y}M&&(Xo=document.createElement("div").style,"AnimationEvent"in window||(delete Ja.animationend.animation,delete Ja.animationiteration.animation,delete Ja.animationstart.animation),"TransitionEvent"in window||delete Ja.transitionend.transition);var Cs=No("animationend"),ns=No("animationiteration"),Fo=No("animationstart"),zr=No("transitionend"),io=new Map,gt=new Map,Tn=["abort","abort",Cs,"animationEnd",ns,"animationIteration",Fo,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",zr,"transitionEnd","waiting","waiting"];function ie(y,x){for(var Y=0;Y<y.length;Y+=2){var be=y[Y],Ke=y[Y+1];Ke="on"+(Ke[0].toUpperCase()+Ke.slice(1)),gt.set(be,x),io.set(be,Ke),m(Ke,[be])}}(0,c.unstable_now)();var Jt=8;function gn(y){if(1&y)return Jt=15,1;if(2&y)return Jt=14,2;if(4&y)return Jt=13,4;var x=24&y;return 0!==x?(Jt=12,x):32&y?(Jt=11,32):0!=(x=192&y)?(Jt=10,x):256&y?(Jt=9,256):0!=(x=3584&y)?(Jt=8,x):4096&y?(Jt=7,4096):0!=(x=4186112&y)?(Jt=6,x):0!=(x=62914560&y)?(Jt=5,x):67108864&y?(Jt=4,67108864):134217728&y?(Jt=3,134217728):0!=(x=805306368&y)?(Jt=2,x):1073741824&y?(Jt=1,1073741824):(Jt=8,y)}function Xi(y,x){var Y=y.pendingLanes;if(0===Y)return Jt=0;var be=0,Ke=0,xt=y.expiredLanes,_n=y.suspendedLanes,In=y.pingedLanes;if(0!==xt)be=xt,Ke=Jt=15;else if(0!=(xt=134217727&Y)){var vr=xt&~_n;0!==vr?(be=gn(vr),Ke=Jt):0!=(In&=xt)&&(be=gn(In),Ke=Jt)}else 0!=(xt=Y&~_n)?(be=gn(xt),Ke=Jt):0!==In&&(be=gn(In),Ke=Jt);if(0===be)return 0;if(be=Y&((0>(be=31-vl(be))?0:1<<be)<<1)-1,0!==x&&x!==be&&!(x&_n)){if(gn(x),Ke<=Jt)return x;Jt=Ke}if(0!==(x=y.entangledLanes))for(y=y.entanglements,x&=be;0<x;)be|=y[Y=31-vl(x)],x&=~(Ke=1<<Y);return be}function ws(y){return 0!=(y=-1073741825&y.pendingLanes)?y:1073741824&y?1073741824:0}function ds(y,x){switch(y){case 15:return 1;case 14:return 2;case 12:return 0===(y=qs(24&~x))?ds(10,x):y;case 10:return 0===(y=qs(192&~x))?ds(8,x):y;case 8:return 0===(y=qs(3584&~x))&&0===(y=qs(4186112&~x))&&(y=512),y;case 2:return 0===(x=qs(805306368&~x))&&(x=268435456),x}throw Error(u(358,y))}function qs(y){return y&-y}function Js(y){for(var x=[],Y=0;31>Y;Y++)x.push(y);return x}function Ll(y,x,Y){y.pendingLanes|=x;var be=x-1;y.suspendedLanes&=be,y.pingedLanes&=be,(y=y.eventTimes)[x=31-vl(x)]=Y}var vl=Math.clz32?Math.clz32:function qu(y){return 0===y?32:31-(Yu(y)/Nc|0)|0},Yu=Math.log,Nc=Math.LN2,Ol=c.unstable_UserBlockingPriority,Kc=c.unstable_runWithPriority,yl=!0;function au(y,x,Y,be){Ot||dn();var Ke=yu,xt=Ot;Ot=!0;try{Zt(Ke,y,x,Y,be)}finally{(Ot=xt)||wr()}}function Da(y,x,Y,be){Kc(Ol,yu.bind(null,y,x,Y,be))}function yu(y,x,Y,be){var Ke;if(yl)if((Ke=0==(4&x))&&0<ts.length&&-1<jl.indexOf(y))y=gl(null,y,x,Y,be),ts.push(y);else{var xt=ju(y,x,Y,be);if(null===xt)Ke&&qa(y,be);else{if(Ke){if(-1<jl.indexOf(y))return y=gl(xt,y,x,Y,be),void ts.push(y);if(function $a(y,x,Y,be,Ke){switch(x){case"focusin":return jo=da(jo,y,x,Y,be,Ke),!0;case"dragenter":return ss=da(ss,y,x,Y,be,Ke),!0;case"mouseover":return gs=da(gs,y,x,Y,be,Ke),!0;case"pointerover":var xt=Ke.pointerId;return Is.set(xt,da(Is.get(xt)||null,y,x,Y,be,Ke)),!0;case"gotpointercapture":return la.set(xt=Ke.pointerId,da(la.get(xt)||null,y,x,Y,be,Ke)),!0}return!1}(xt,y,x,Y,be))return;qa(y,be)}Ho(y,x,be,null,Y)}}}function ju(y,x,Y,be){var Ke=qn(be);if(null!==(Ke=mu(Ke))){var xt=Po(Ke);if(null===xt)Ke=null;else{var _n=xt.tag;if(13===_n){if(null!==(Ke=ko(xt)))return Ke;Ke=null}else if(3===_n){if(xt.stateNode.hydrate)return 3===xt.tag?xt.stateNode.containerInfo:null;Ke=null}else xt!==Ke&&(Ke=null)}}return Ho(y,x,be,Ke,Y),null}var el=null,oc=null,Xl=null;function Ic(){if(Xl)return Xl;var y,be,x=oc,Y=x.length,Ke="value"in el?el.value:el.textContent,xt=Ke.length;for(y=0;y<Y&&x[y]===Ke[y];y++);var _n=Y-y;for(be=1;be<=_n&&x[Y-be]===Ke[xt-be];be++);return Xl=Ke.slice(y,1<be?1-be:void 0)}function Gs(y){var x=y.keyCode;return"charCode"in y?0===(y=y.charCode)&&13===x&&(y=13):y=x,10===y&&(y=13),32<=y||13===y?y:0}function ku(){return!0}function zu(){return!1}function ua(y){function x(Y,be,Ke,xt,_n){for(var In in this._reactName=Y,this._targetInst=Ke,this.type=be,this.nativeEvent=xt,this.target=_n,this.currentTarget=null,y)y.hasOwnProperty(In)&&(this[In]=(Y=y[In])?Y(xt):xt[In]);return this.isDefaultPrevented=(null!=xt.defaultPrevented?xt.defaultPrevented:!1===xt.returnValue)?ku:zu,this.isPropagationStopped=zu,this}return a(x.prototype,{preventDefault:function(){this.defaultPrevented=!0;var Y=this.nativeEvent;Y&&(Y.preventDefault?Y.preventDefault():"unknown"!=typeof Y.returnValue&&(Y.returnValue=!1),this.isDefaultPrevented=ku)},stopPropagation:function(){var Y=this.nativeEvent;Y&&(Y.stopPropagation?Y.stopPropagation():"unknown"!=typeof Y.cancelBubble&&(Y.cancelBubble=!0),this.isPropagationStopped=ku)},persist:function(){},isPersistent:ku}),x}var Ba,Tl,tl,El={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(y){return y.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},uu=ua(El),Eu=a({},El,{view:0,detail:0}),$u=ua(Eu),Ga=a({},Eu,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:pt,button:0,buttons:0,relatedTarget:function(y){return void 0===y.relatedTarget?y.fromElement===y.srcElement?y.toElement:y.fromElement:y.relatedTarget},movementX:function(y){return"movementX"in y?y.movementX:(y!==tl&&(tl&&"mousemove"===y.type?(Ba=y.screenX-tl.screenX,Tl=y.screenY-tl.screenY):Tl=Ba=0,tl=y),Ba)},movementY:function(y){return"movementY"in y?y.movementY:Tl}}),dc=ua(Ga),Sa=ua(a({},Ga,{dataTransfer:0})),xu=ua(a({},Eu,{relatedTarget:0})),nl=ua(a({},El,{animationName:0,elapsedTime:0,pseudoElement:0})),Su=a({},El,{clipboardData:function(y){return"clipboardData"in y?y.clipboardData:window.clipboardData}}),gc=ua(Su),Al=ua(a({},El,{data:0})),Dc={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},zs={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Vc={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function bt(y){var x=this.nativeEvent;return x.getModifierState?x.getModifierState(y):!!(y=Vc[y])&&!!x[y]}function pt(){return bt}var Je=a({},Eu,{key:function(y){if(y.key){var x=Dc[y.key]||y.key;if("Unidentified"!==x)return x}return"keypress"===y.type?13===(y=Gs(y))?"Enter":String.fromCharCode(y):"keydown"===y.type||"keyup"===y.type?zs[y.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:pt,charCode:function(y){return"keypress"===y.type?Gs(y):0},keyCode:function(y){return"keydown"===y.type||"keyup"===y.type?y.keyCode:0},which:function(y){return"keypress"===y.type?Gs(y):"keydown"===y.type||"keyup"===y.type?y.keyCode:0}}),en=ua(Je),To=ua(a({},Ga,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),mi=ua(a({},Eu,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:pt})),Qs=ua(a({},El,{propertyName:0,elapsedTime:0,pseudoElement:0})),Hu=a({},Ga,{deltaX:function(y){return"deltaX"in y?y.deltaX:"wheelDeltaX"in y?-y.wheelDeltaX:0},deltaY:function(y){return"deltaY"in y?y.deltaY:"wheelDeltaY"in y?-y.wheelDeltaY:"wheelDelta"in y?-y.wheelDelta:0},deltaZ:0,deltaMode:0}),zl=ua(Hu),sc=[9,13,27,32],hu=M&&"CompositionEvent"in window,lu=null;M&&"documentMode"in document&&(lu=document.documentMode);var id=M&&"TextEvent"in window&&!lu,ec=M&&(!hu||lu&&8<lu&&11>=lu),Fc=String.fromCharCode(32),du=!1;function Lc(y,x){switch(y){case"keyup":return-1!==sc.indexOf(x.keyCode);case"keydown":return 229!==x.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function kl(y){return"object"==typeof(y=y.detail)&&"data"in y?y.data:null}var sl=!1,Ee={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function yt(y){var x=y&&y.nodeName&&y.nodeName.toLowerCase();return"input"===x?!!Ee[y.type]:"textarea"===x}function Xe(y,x,Y,be){tr(be),0<(x=rn(x,"onChange")).length&&(Y=new uu("onChange","change",null,Y,be),y.push({event:Y,listeners:x}))}var Gt=null,An=null;function kn(y){fs(y,0)}function Hr(y){if(Tt(Rc(y)))return y}function Xr(y,x){if("change"===y)return x}var yr=!1;if(M){var Rr;if(M){var Go="oninput"in document;if(!Go){var Io=document.createElement("div");Io.setAttribute("oninput","return;"),Go="function"==typeof Io.oninput}Rr=Go}else Rr=!1;yr=Rr&&(!document.documentMode||9<document.documentMode)}function Qn(){Gt&&(Gt.detachEvent("onpropertychange",Gr),An=Gt=null)}function Gr(y){if("value"===y.propertyName&&Hr(An)){var x=[];if(Xe(x,An,y,qn(y)),y=kn,Ot)y(x);else{Ot=!0;try{nr(y,x)}finally{Ot=!1,wr()}}}}function Fr(y,x,Y){"focusin"===y?(Qn(),An=Y,(Gt=x).attachEvent("onpropertychange",Gr)):"focusout"===y&&Qn()}function Ui(y){if("selectionchange"===y||"keyup"===y||"keydown"===y)return Hr(An)}function Do(y,x){if("click"===y)return Hr(x)}function Fa(y,x){if("input"===y||"change"===y)return Hr(x)}var zo="function"==typeof Object.is?Object.is:function ca(y,x){return y===x&&(0!==y||1/y==1/x)||y!=y&&x!=x},$l=Object.prototype.hasOwnProperty;function xl(y,x){if(zo(y,x))return!0;if("object"!=typeof y||null===y||"object"!=typeof x||null===x)return!1;var Y=Object.keys(y),be=Object.keys(x);if(Y.length!==be.length)return!1;for(be=0;be<Y.length;be++)if(!$l.call(x,Y[be])||!zo(y[Y[be]],x[Y[be]]))return!1;return!0}function Uu(y){for(;y&&y.firstChild;)y=y.firstChild;return y}function Xc(y,x){var be,Y=Uu(y);for(y=0;Y;){if(3===Y.nodeType){if(be=y+Y.textContent.length,y<=x&&be>=x)return{node:Y,offset:x-y};y=be}e:{for(;Y;){if(Y.nextSibling){Y=Y.nextSibling;break e}Y=Y.parentNode}Y=void 0}Y=Uu(Y)}}function ad(y,x){return!(!y||!x)&&(y===x||(!y||3!==y.nodeType)&&(x&&3===x.nodeType?ad(y,x.parentNode):"contains"in y?y.contains(x):!!y.compareDocumentPosition&&!!(16&y.compareDocumentPosition(x))))}function kc(){for(var y=window,x=wn();x instanceof y.HTMLIFrameElement;){try{var Y="string"==typeof x.contentWindow.location.href}catch{Y=!1}if(!Y)break;x=wn((y=x.contentWindow).document)}return x}function yi(y){var x=y&&y.nodeName&&y.nodeName.toLowerCase();return x&&("input"===x&&("text"===y.type||"search"===y.type||"tel"===y.type||"url"===y.type||"password"===y.type)||"textarea"===x||"true"===y.contentEditable)}var Wl=M&&"documentMode"in document&&11>=document.documentMode,Pa=null,fc=null,bu=null,je=!1;function Nt(y,x,Y){var be=Y.window===Y?Y.document:9===Y.nodeType?Y:Y.ownerDocument;je||null==Pa||Pa!==wn(be)||(be="selectionStart"in(be=Pa)&&yi(be)?{start:be.selectionStart,end:be.selectionEnd}:{anchorNode:(be=(be.ownerDocument&&be.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:be.anchorOffset,focusNode:be.focusNode,focusOffset:be.focusOffset},bu&&xl(bu,be)||(bu=be,0<(be=rn(fc,"onSelect")).length&&(x=new uu("onSelect","select",null,x,Y),y.push({event:x,listeners:be}),x.target=Pa)))}ie("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),ie("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),ie(Tn,2);for(var tt="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),tn=0;tn<tt.length;tn++)gt.set(tt[tn],0);T("onMouseEnter",["mouseout","mouseover"]),T("onMouseLeave",["mouseout","mouseover"]),T("onPointerEnter",["pointerout","pointerover"]),T("onPointerLeave",["pointerout","pointerover"]),m("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),m("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),m("onBeforeInput",["compositionend","keypress","textInput","paste"]),m("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),m("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),m("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Xn="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),bi=new Set("cancel close invalid load scroll toggle".split(" ").concat(Xn));function Ri(y,x,Y){var be=y.type||"unknown-event";y.currentTarget=Y,function Vi(y,x,Y,be,Ke,xt,_n,In,vr){if(ji.apply(this,arguments),dr){if(!dr)throw Error(u(198));var Si=Ni;dr=!1,Ni=null,ti||(ti=!0,Vr=Si)}}(be,x,void 0,y),y.currentTarget=null}function fs(y,x){x=0!=(4&x);for(var Y=0;Y<y.length;Y++){var be=y[Y],Ke=be.event;be=be.listeners;e:{var xt=void 0;if(x)for(var _n=be.length-1;0<=_n;_n--){var In=be[_n],vr=In.instance,Si=In.currentTarget;if(In=In.listener,vr!==xt&&Ke.isPropagationStopped())break e;Ri(Ke,In,Si),xt=vr}else for(_n=0;_n<be.length;_n++){if(vr=(In=be[_n]).instance,Si=In.currentTarget,In=In.listener,vr!==xt&&Ke.isPropagationStopped())break e;Ri(Ke,In,Si),xt=vr}}}if(ti)throw y=Vr,ti=!1,Vr=null,y}function Fs(y,x){var Y=qc(x),be=y+"__bubble";Y.has(be)||(wl(x,y,2,!1),Y.add(be))}var Ra="_reactListening"+Math.random().toString(36).slice(2);function Vs(y){y[Ra]||(y[Ra]=!0,e.forEach(function(x){bi.has(x)||Ms(x,!1,y,null),Ms(x,!0,y,null)}))}function Ms(y,x,Y,be){var Ke=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,xt=Y;if("selectionchange"===y&&9!==Y.nodeType&&(xt=Y.ownerDocument),null!==be&&!x&&bi.has(y)){if("scroll"!==y)return;Ke|=2,xt=be}var _n=qc(xt),In=y+"__"+(x?"capture":"bubble");_n.has(In)||(x&&(Ke|=4),wl(xt,y,Ke,x),_n.add(In))}function wl(y,x,Y,be){var Ke=gt.get(x);switch(void 0===Ke?2:Ke){case 0:Ke=au;break;case 1:Ke=Da;break;default:Ke=yu}Y=Ke.bind(null,x,Y,y),Ke=void 0,!Ai||"touchstart"!==x&&"touchmove"!==x&&"wheel"!==x||(Ke=!0),y.addEventListener(x,Y,be?void 0===Ke||{capture:!0,passive:Ke}:void 0!==Ke&&{passive:Ke})}function Ho(y,x,Y,be,Ke){var xt=be;if(!(1&x||2&x||null===be))e:for(;;){if(null===be)return;var _n=be.tag;if(3===_n||4===_n){var In=be.stateNode.containerInfo;if(In===Ke||8===In.nodeType&&In.parentNode===Ke)break;if(4===_n)for(_n=be.return;null!==_n;){var vr=_n.tag;if((3===vr||4===vr)&&((vr=_n.stateNode.containerInfo)===Ke||8===vr.nodeType&&vr.parentNode===Ke))return;_n=_n.return}for(;null!==In;){if(null===(_n=mu(In)))return;if(5===(vr=_n.tag)||6===vr){be=xt=_n;continue e}In=In.parentNode}}be=be.return}!function Ti(y,x,Y){if(mn)return y(x,Y);mn=!0;try{Ge(y,x,Y)}finally{mn=!1,wr()}}(function(){var Si=xt,Uo=qn(Y),Ds=[];e:{var Qi=io.get(y);if(void 0!==Qi){var Ls=uu,ia=y;switch(y){case"keypress":if(0===Gs(Y))break e;case"keydown":case"keyup":Ls=en;break;case"focusin":ia="focus",Ls=xu;break;case"focusout":ia="blur",Ls=xu;break;case"beforeblur":case"afterblur":Ls=xu;break;case"click":if(2===Y.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":Ls=dc;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":Ls=Sa;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":Ls=mi;break;case Cs:case ns:case Fo:Ls=nl;break;case zr:Ls=Qs;break;case"scroll":Ls=$u;break;case"wheel":Ls=zl;break;case"copy":case"cut":case"paste":Ls=gc;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":Ls=To}var oa=0!=(4&x),di=!oa&&"scroll"===y,Wr=oa?null!==Qi?Qi+"Capture":null:Qi;oa=[];for(var no,si=Si;null!==si;){var vo=(no=si).stateNode;if(5===no.tag&&null!==vo&&(no=vo,null!==Wr&&null!=(vo=Ci(si,Wr))&&oa.push(Qa(si,vo,no))),di)break;si=si.return}0<oa.length&&(Qi=new Ls(Qi,ia,null,Y,Uo),Ds.push({event:Qi,listeners:oa}))}}if(!(7&x)){if(Ls="mouseout"===y||"pointerout"===y,(!(Qi="mouseover"===y||"pointerover"===y)||16&x||!(ia=Y.relatedTarget||Y.fromElement)||!mu(ia)&&!ia[Ul])&&(Ls||Qi)&&(Qi=Uo.window===Uo?Uo:(Qi=Uo.ownerDocument)?Qi.defaultView||Qi.parentWindow:window,Ls?(Ls=Si,null!==(ia=(ia=Y.relatedTarget||Y.toElement)?mu(ia):null)&&(ia!==(di=Po(ia))||5!==ia.tag&&6!==ia.tag)&&(ia=null)):(Ls=null,ia=Si),Ls!==ia)){if(oa=dc,vo="onMouseLeave",Wr="onMouseEnter",si="mouse",("pointerout"===y||"pointerover"===y)&&(oa=To,vo="onPointerLeave",Wr="onPointerEnter",si="pointer"),di=null==Ls?Qi:Rc(Ls),no=null==ia?Qi:Rc(ia),(Qi=new oa(vo,si+"leave",Ls,Y,Uo)).target=di,Qi.relatedTarget=no,vo=null,mu(Uo)===Si&&((oa=new oa(Wr,si+"enter",ia,Y,Uo)).target=no,oa.relatedTarget=di,vo=oa),di=vo,Ls&&ia)t:{for(Wr=ia,si=0,no=oa=Ls;no;no=Jl(no))si++;for(no=0,vo=Wr;vo;vo=Jl(vo))no++;for(;0<si-no;)oa=Jl(oa),si--;for(;0<no-si;)Wr=Jl(Wr),no--;for(;si--;){if(oa===Wr||null!==Wr&&oa===Wr.alternate)break t;oa=Jl(oa),Wr=Jl(Wr)}oa=null}else oa=null;null!==Ls&&le(Ds,Qi,Ls,oa,!1),null!==ia&&null!==di&&le(Ds,di,ia,oa,!0)}if("select"===(Ls=(Qi=Si?Rc(Si):window).nodeName&&Qi.nodeName.toLowerCase())||"input"===Ls&&"file"===Qi.type)var fl=Xr;else if(yt(Qi))if(yr)fl=Fa;else{fl=Ui;var Us=Fr}else(Ls=Qi.nodeName)&&"input"===Ls.toLowerCase()&&("checkbox"===Qi.type||"radio"===Qi.type)&&(fl=Do);switch(fl&&(fl=fl(y,Si))?Xe(Ds,fl,Y,Uo):(Us&&Us(y,Qi,Si),"focusout"===y&&(Us=Qi._wrapperState)&&Us.controlled&&"number"===Qi.type&&kr(Qi,"number",Qi.value)),Us=Si?Rc(Si):window,y){case"focusin":(yt(Us)||"true"===Us.contentEditable)&&(Pa=Us,fc=Si,bu=null);break;case"focusout":bu=fc=Pa=null;break;case"mousedown":je=!0;break;case"contextmenu":case"mouseup":case"dragend":je=!1,Nt(Ds,Y,Uo);break;case"selectionchange":if(Wl)break;case"keydown":case"keyup":Nt(Ds,Y,Uo)}var ll;if(hu)e:{switch(y){case"compositionstart":var Cl="onCompositionStart";break e;case"compositionend":Cl="onCompositionEnd";break e;case"compositionupdate":Cl="onCompositionUpdate";break e}Cl=void 0}else sl?Lc(y,Y)&&(Cl="onCompositionEnd"):"keydown"===y&&229===Y.keyCode&&(Cl="onCompositionStart");Cl&&(ec&&"ko"!==Y.locale&&(sl||"onCompositionStart"!==Cl?"onCompositionEnd"===Cl&&sl&&(ll=Ic()):(oc="value"in(el=Uo)?el.value:el.textContent,sl=!0)),0<(Us=rn(Si,Cl)).length&&(Cl=new Al(Cl,y,null,Y,Uo),Ds.push({event:Cl,listeners:Us}),(ll||null!==(ll=kl(Y)))&&(Cl.data=ll))),(ll=id?function ja(y,x){switch(y){case"compositionend":return kl(x);case"keypress":return 32!==x.which?null:(du=!0,Fc);case"textInput":return(y=x.data)===Fc&&du?null:y;default:return null}}(y,Y):function Q(y,x){if(sl)return"compositionend"===y||!hu&&Lc(y,x)?(y=Ic(),Xl=oc=el=null,sl=!1,y):null;switch(y){case"paste":default:return null;case"keypress":if(!(x.ctrlKey||x.altKey||x.metaKey)||x.ctrlKey&&x.altKey){if(x.char&&1<x.char.length)return x.char;if(x.which)return String.fromCharCode(x.which)}return null;case"compositionend":return ec&&"ko"!==x.locale?null:x.data}}(y,Y))&&0<(Si=rn(Si,"onBeforeInput")).length&&(Uo=new Al("onBeforeInput","beforeinput",null,Y,Uo),Ds.push({event:Uo,listeners:Si}),Uo.data=ll)}fs(Ds,x)})}function Qa(y,x,Y){return{instance:y,listener:x,currentTarget:Y}}function rn(y,x){for(var Y=x+"Capture",be=[];null!==y;){var Ke=y,xt=Ke.stateNode;5===Ke.tag&&null!==xt&&(Ke=xt,null!=(xt=Ci(y,Y))&&be.unshift(Qa(y,xt,Ke)),null!=(xt=Ci(y,x))&&be.push(Qa(y,xt,Ke))),y=y.return}return be}function Jl(y){if(null===y)return null;do{y=y.return}while(y&&5!==y.tag);return y||null}function le(y,x,Y,be,Ke){for(var xt=x._reactName,_n=[];null!==Y&&Y!==be;){var In=Y,vr=In.alternate,Si=In.stateNode;if(null!==vr&&vr===be)break;5===In.tag&&null!==Si&&(In=Si,Ke?null!=(vr=Ci(Y,xt))&&_n.unshift(Qa(Y,vr,In)):Ke||null!=(vr=Ci(Y,xt))&&_n.push(Qa(Y,vr,In))),Y=Y.return}0!==_n.length&&y.push({event:x,listeners:_n})}function ae(){}var De=null,Ve=null;function st(y,x){switch(y){case"button":case"input":case"select":case"textarea":return!!x.autoFocus}return!1}function zt(y,x){return"textarea"===y||"option"===y||"noscript"===y||"string"==typeof x.children||"number"==typeof x.children||"object"==typeof x.dangerouslySetInnerHTML&&null!==x.dangerouslySetInnerHTML&&null!=x.dangerouslySetInnerHTML.__html}var Qt="function"==typeof setTimeout?setTimeout:void 0,Gn="function"==typeof clearTimeout?clearTimeout:void 0;function Er(y){(1===y.nodeType||9===y.nodeType&&null!=(y=y.body))&&(y.textContent="")}function Nr(y){for(;null!=y;y=y.nextSibling){var x=y.nodeType;if(1===x||3===x)break}return y}function Mi(y){y=y.previousSibling;for(var x=0;y;){if(8===y.nodeType){var Y=y.data;if("$"===Y||"$!"===Y||"$?"===Y){if(0===x)return y;x--}else"/$"===Y&&x++}y=y.previousSibling}return null}var ao=0,rs=Math.random().toString(36).slice(2),ys="__reactFiber$"+rs,Ps="__reactProps$"+rs,Ul="__reactContainer$"+rs,eu="__reactEvents$"+rs;function mu(y){var x=y[ys];if(x)return x;for(var Y=y.parentNode;Y;){if(x=Y[Ul]||Y[ys]){if(Y=x.alternate,null!==x.child||null!==Y&&null!==Y.child)for(y=Mi(y);null!==y;){if(Y=y[ys])return Y;y=Mi(y)}return x}Y=(y=Y).parentNode}return null}function wu(y){return!(y=y[ys]||y[Ul])||5!==y.tag&&6!==y.tag&&13!==y.tag&&3!==y.tag?null:y}function Rc(y){if(5===y.tag||6===y.tag)return y.stateNode;throw Error(u(33))}function fu(y){return y[Ps]||null}function qc(y){var x=y[eu];return void 0===x&&(x=y[eu]=new Set),x}var $c=[],pu=-1;function vc(y){return{current:y}}function La(y){0>pu||(y.current=$c[pu],$c[pu]=null,pu--)}function al(y,x){pu++,$c[pu]=y.current,y.current=x}var rl={},xa=vc(rl),Tu=vc(!1),En=rl;function Pu(y,x){var Y=y.type.contextTypes;if(!Y)return rl;var be=y.stateNode;if(be&&be.__reactInternalMemoizedUnmaskedChildContext===x)return be.__reactInternalMemoizedMaskedChildContext;var xt,Ke={};for(xt in Y)Ke[xt]=x[xt];return be&&((y=y.stateNode).__reactInternalMemoizedUnmaskedChildContext=x,y.__reactInternalMemoizedMaskedChildContext=Ke),Ke}function za(y){return null!=y.childContextTypes}function Va(){La(Tu),La(xa)}function Os(y,x,Y){if(xa.current!==rl)throw Error(u(168));al(xa,x),al(Tu,Y)}function Cu(y,x,Y){var be=y.stateNode;if(y=x.childContextTypes,"function"!=typeof be.getChildContext)return Y;for(var Ke in be=be.getChildContext())if(!(Ke in y))throw Error(u(108,Qr(x)||"Unknown",Ke));return a({},Y,be)}function ld(y){return y=(y=y.stateNode)&&y.__reactInternalMemoizedMergedChildContext||rl,En=xa.current,al(xa,y),al(Tu,Tu.current),!0}function Hc(y,x,Y){var be=y.stateNode;if(!be)throw Error(u(169));Y?(y=Cu(y,x,En),be.__reactInternalMemoizedMergedChildContext=y,La(Tu),La(xa),al(xa,y)):La(Tu),al(Tu,Y)}var Vu=null,ud=null,md=c.unstable_runWithPriority,tf=c.unstable_scheduleCallback,Uf=c.unstable_cancelCallback,Mu=c.unstable_shouldYield,Uc=c.unstable_requestPaint,Zu=c.unstable_now,Tp=c.unstable_getCurrentPriorityLevel,ip=c.unstable_ImmediatePriority,Hd=c.unstable_UserBlockingPriority,Bf=c.unstable_NormalPriority,gd=c.unstable_LowPriority,Nu=c.unstable_IdlePriority,ed={},xf=void 0!==Uc?Uc:function(){},_u=null,Ud=null,Bc=!1,Lo=Zu(),Se=1e4>Lo?Zu:function(){return Zu()-Lo};function Ne(){switch(Tp()){case ip:return 99;case Hd:return 98;case Bf:return 97;case gd:return 96;case Nu:return 95;default:throw Error(u(332))}}function _e(y){switch(y){case 99:return ip;case 98:return Hd;case 97:return Bf;case 96:return gd;case 95:return Nu;default:throw Error(u(332))}}function Ye(y,x){return y=_e(y),md(y,x)}function Mt(y,x,Y){return y=_e(y),tf(y,x,Y)}function un(){if(null!==Ud){var y=Ud;Ud=null,Uf(y)}Mn()}function Mn(){if(!Bc&&null!==_u){Bc=!0;var y=0;try{var x=_u;Ye(99,function(){for(;y<x.length;y++){var Y=x[y];do{Y=Y(!0)}while(null!==Y)}}),_u=null}catch(Y){throw null!==_u&&(_u=_u.slice(y+1)),tf(ip,un),Y}finally{Bc=!1}}}var ni=fe.ReactCurrentBatchConfig;function zi(y,x){if(y&&y.defaultProps){for(var Y in x=a({},x),y=y.defaultProps)void 0===x[Y]&&(x[Y]=y[Y]);return x}return x}var Wo=vc(null),Qo=null,ya=null,Bl=null;function Wu(){Bl=ya=Qo=null}function pc(y){var x=Wo.current;La(Wo),y.type._context._currentValue=x}function cd(y,x){for(;null!==y;){var Y=y.alternate;if((y.childLanes&x)===x){if(null===Y||(Y.childLanes&x)===x)break;Y.childLanes|=x}else y.childLanes|=x,null!==Y&&(Y.childLanes|=x);y=y.return}}function Ju(y,x){Qo=y,Bl=ya=null,null!==(y=y.dependencies)&&null!==y.firstContext&&(y.lanes&x&&(xd=!0),y.firstContext=null)}function tc(y,x){if(Bl!==y&&!1!==x&&0!==x)if(("number"!=typeof x||1073741823===x)&&(Bl=y,x=1073741823),x={context:y,observedBits:x,next:null},null===ya){if(null===Qo)throw Error(u(308));ya=x,Qo.dependencies={lanes:0,firstContext:x,responders:null}}else ya=ya.next=x;return y._currentValue}var od=!1;function Ed(y){y.updateQueue={baseState:y.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function h(y,x){x.updateQueue===(y=y.updateQueue)&&(x.updateQueue={baseState:y.baseState,firstBaseUpdate:y.firstBaseUpdate,lastBaseUpdate:y.lastBaseUpdate,shared:y.shared,effects:y.effects})}function b(y,x){return{eventTime:y,lane:x,tag:0,payload:null,callback:null,next:null}}function N(y,x){if(null!==(y=y.updateQueue)){var Y=(y=y.shared).pending;null===Y?x.next=x:(x.next=Y.next,Y.next=x),y.pending=x}}function k(y,x){var Y=y.updateQueue,be=y.alternate;if(null===be||Y!==(be=be.updateQueue))null===(y=Y.lastBaseUpdate)?Y.firstBaseUpdate=x:y.next=x,Y.lastBaseUpdate=x;else{var Ke=null,xt=null;if(null!==(Y=Y.firstBaseUpdate)){do{var _n={eventTime:Y.eventTime,lane:Y.lane,tag:Y.tag,payload:Y.payload,callback:Y.callback,next:null};null===xt?Ke=xt=_n:xt=xt.next=_n,Y=Y.next}while(null!==Y);null===xt?Ke=xt=x:xt=xt.next=x}else Ke=xt=x;y.updateQueue=Y={baseState:be.baseState,firstBaseUpdate:Ke,lastBaseUpdate:xt,shared:be.shared,effects:be.effects}}}function ne(y,x,Y,be){var Ke=y.updateQueue;od=!1;var xt=Ke.firstBaseUpdate,_n=Ke.lastBaseUpdate,In=Ke.shared.pending;if(null!==In){Ke.shared.pending=null;var vr=In,Si=vr.next;vr.next=null,null===_n?xt=Si:_n.next=Si,_n=vr;var Uo=y.alternate;if(null!==Uo){var Ds=(Uo=Uo.updateQueue).lastBaseUpdate;Ds!==_n&&(null===Ds?Uo.firstBaseUpdate=Si:Ds.next=Si,Uo.lastBaseUpdate=vr)}}if(null!==xt){for(Ds=Ke.baseState,_n=0,Uo=Si=vr=null;;){var Qi=xt.eventTime;if((be&(In=xt.lane))===In){null!==Uo&&(Uo=Uo.next={eventTime:Qi,lane:0,tag:xt.tag,payload:xt.payload,callback:xt.callback,next:null});e:{var Ls=y,ia=xt;switch(In=x,Qi=Y,ia.tag){case 1:if("function"==typeof(Ls=ia.payload)){Ds=Ls.call(Qi,Ds,In);break e}Ds=Ls;break e;case 3:Ls.flags=-4097&Ls.flags|64;case 0:if(null==(In="function"==typeof(Ls=ia.payload)?Ls.call(Qi,Ds,In):Ls))break e;Ds=a({},Ds,In);break e;case 2:od=!0}}null!==xt.callback&&(y.flags|=32,null===(In=Ke.effects)?Ke.effects=[xt]:In.push(xt))}else Qi={eventTime:Qi,lane:In,tag:xt.tag,payload:xt.payload,callback:xt.callback,next:null},null===Uo?(Si=Uo=Qi,vr=Ds):Uo=Uo.next=Qi,_n|=In;if(null===(xt=xt.next)){if(null===(In=Ke.shared.pending))break;xt=In.next,In.next=null,Ke.lastBaseUpdate=In,Ke.shared.pending=null}}null===Uo&&(vr=Ds),Ke.baseState=vr,Ke.firstBaseUpdate=Si,Ke.lastBaseUpdate=Uo,cp|=_n,y.lanes=_n,y.memoizedState=Ds}}function he(y,x,Y){if(y=x.effects,x.effects=null,null!==y)for(x=0;x<y.length;x++){var be=y[x],Ke=be.callback;if(null!==Ke){if(be.callback=null,be=Y,"function"!=typeof Ke)throw Error(u(191,Ke));Ke.call(be)}}}var Me=(new r.Component).refs;function Qe(y,x,Y,be){Y=null==(Y=Y(be,x=y.memoizedState))?x:a({},x,Y),y.memoizedState=Y,0===y.lanes&&(y.updateQueue.baseState=Y)}var Re={isMounted:function(y){return!!(y=y._reactInternals)&&Po(y)===y},enqueueSetState:function(y,x,Y){y=y._reactInternals;var be=Yc(),Ke=sf(y),xt=b(be,Ke);xt.payload=x,null!=Y&&(xt.callback=Y),N(y,xt),fp(y,Ke,be)},enqueueReplaceState:function(y,x,Y){y=y._reactInternals;var be=Yc(),Ke=sf(y),xt=b(be,Ke);xt.tag=1,xt.payload=x,null!=Y&&(xt.callback=Y),N(y,xt),fp(y,Ke,be)},enqueueForceUpdate:function(y,x){y=y._reactInternals;var Y=Yc(),be=sf(y),Ke=b(Y,be);Ke.tag=2,null!=x&&(Ke.callback=x),N(y,Ke),fp(y,be,Y)}};function ft(y,x,Y,be,Ke,xt,_n){return"function"==typeof(y=y.stateNode).shouldComponentUpdate?y.shouldComponentUpdate(be,xt,_n):!(x.prototype&&x.prototype.isPureReactComponent&&xl(Y,be)&&xl(Ke,xt))}function wt(y,x,Y){var be=!1,Ke=rl,xt=x.contextType;return"object"==typeof xt&&null!==xt?xt=tc(xt):(Ke=za(x)?En:xa.current,xt=(be=null!=(be=x.contextTypes))?Pu(y,Ke):rl),x=new x(Y,xt),y.memoizedState=null!=x.state?x.state:null,x.updater=Re,y.stateNode=x,x._reactInternals=y,be&&((y=y.stateNode).__reactInternalMemoizedUnmaskedChildContext=Ke,y.__reactInternalMemoizedMaskedChildContext=xt),x}function It(y,x,Y,be){y=x.state,"function"==typeof x.componentWillReceiveProps&&x.componentWillReceiveProps(Y,be),"function"==typeof x.UNSAFE_componentWillReceiveProps&&x.UNSAFE_componentWillReceiveProps(Y,be),x.state!==y&&Re.enqueueReplaceState(x,x.state,null)}function Cn(y,x,Y,be){var Ke=y.stateNode;Ke.props=Y,Ke.state=y.memoizedState,Ke.refs=Me,Ed(y);var xt=x.contextType;"object"==typeof xt&&null!==xt?Ke.context=tc(xt):(xt=za(x)?En:xa.current,Ke.context=Pu(y,xt)),ne(y,Y,Ke,be),Ke.state=y.memoizedState,"function"==typeof(xt=x.getDerivedStateFromProps)&&(Qe(y,x,xt,Y),Ke.state=y.memoizedState),"function"==typeof x.getDerivedStateFromProps||"function"==typeof Ke.getSnapshotBeforeUpdate||"function"!=typeof Ke.UNSAFE_componentWillMount&&"function"!=typeof Ke.componentWillMount||(x=Ke.state,"function"==typeof Ke.componentWillMount&&Ke.componentWillMount(),"function"==typeof Ke.UNSAFE_componentWillMount&&Ke.UNSAFE_componentWillMount(),x!==Ke.state&&Re.enqueueReplaceState(Ke,Ke.state,null),ne(y,Y,Ke,be),Ke.state=y.memoizedState),"function"==typeof Ke.componentDidMount&&(y.flags|=4)}var er=Array.isArray;function sr(y,x,Y){if(null!==(y=Y.ref)&&"function"!=typeof y&&"object"!=typeof y){if(Y._owner){if(Y=Y._owner){if(1!==Y.tag)throw Error(u(309));var be=Y.stateNode}if(!be)throw Error(u(147,y));var Ke=""+y;return null!==x&&null!==x.ref&&"function"==typeof x.ref&&x.ref._stringRef===Ke?x.ref:((x=function(xt){var _n=be.refs;_n===Me&&(_n=be.refs={}),null===xt?delete _n[Ke]:_n[Ke]=xt})._stringRef=Ke,x)}if("string"!=typeof y)throw Error(u(284));if(!Y._owner)throw Error(u(290,y))}return y}function Dr(y,x){if("textarea"!==y.type)throw Error(u(31,"[object Object]"===Object.prototype.toString.call(x)?"object with keys {"+Object.keys(x).join(", ")+"}":x))}function oi(y){function x(di,Wr){if(y){var si=di.lastEffect;null!==si?(si.nextEffect=Wr,di.lastEffect=Wr):di.firstEffect=di.lastEffect=Wr,Wr.nextEffect=null,Wr.flags=8}}function Y(di,Wr){if(!y)return null;for(;null!==Wr;)x(di,Wr),Wr=Wr.sibling;return null}function be(di,Wr){for(di=new Map;null!==Wr;)di.set(null!==Wr.key?Wr.key:Wr.index,Wr),Wr=Wr.sibling;return di}function Ke(di,Wr){return(di=Np(di,Wr)).index=0,di.sibling=null,di}function xt(di,Wr,si){return di.index=si,y?null!==(si=di.alternate)?(si=si.index)<Wr?(di.flags=2,Wr):si:(di.flags=2,Wr):Wr}function _n(di){return y&&null===di.alternate&&(di.flags=2),di}function In(di,Wr,si,no){return null===Wr||6!==Wr.tag?((Wr=Nh(si,di.mode,no)).return=di,Wr):((Wr=Ke(Wr,si)).return=di,Wr)}function vr(di,Wr,si,no){return null!==Wr&&Wr.elementType===si.type?((no=Ke(Wr,si.props)).ref=sr(di,Wr,si),no.return=di,no):((no=ch(si.type,si.key,si.props,null,di.mode,no)).ref=sr(di,Wr,si),no.return=di,no)}function Si(di,Wr,si,no){return null===Wr||4!==Wr.tag||Wr.stateNode.containerInfo!==si.containerInfo||Wr.stateNode.implementation!==si.implementation?((Wr=Ih(si,di.mode,no)).return=di,Wr):((Wr=Ke(Wr,si.children||[])).return=di,Wr)}function Uo(di,Wr,si,no,vo){return null===Wr||7!==Wr.tag?((Wr=Cd(si,di.mode,no,vo)).return=di,Wr):((Wr=Ke(Wr,si)).return=di,Wr)}function Ds(di,Wr,si){if("string"==typeof Wr||"number"==typeof Wr)return(Wr=Nh(""+Wr,di.mode,si)).return=di,Wr;if("object"==typeof Wr&&null!==Wr){switch(Wr.$$typeof){case Te:return(si=ch(Wr.type,Wr.key,Wr.props,null,di.mode,si)).ref=sr(di,null,Wr),si.return=di,si;case $e:return(Wr=Ih(Wr,di.mode,si)).return=di,Wr}if(er(Wr)||fn(Wr))return(Wr=Cd(Wr,di.mode,si,null)).return=di,Wr;Dr(di,Wr)}return null}function Qi(di,Wr,si,no){var vo=null!==Wr?Wr.key:null;if("string"==typeof si||"number"==typeof si)return null!==vo?null:In(di,Wr,""+si,no);if("object"==typeof si&&null!==si){switch(si.$$typeof){case Te:return si.key===vo?si.type===ge?Uo(di,Wr,si.props.children,no,vo):vr(di,Wr,si,no):null;case $e:return si.key===vo?Si(di,Wr,si,no):null}if(er(si)||fn(si))return null!==vo?null:Uo(di,Wr,si,no,null);Dr(di,si)}return null}function Ls(di,Wr,si,no,vo){if("string"==typeof no||"number"==typeof no)return In(Wr,di=di.get(si)||null,""+no,vo);if("object"==typeof no&&null!==no){switch(no.$$typeof){case Te:return di=di.get(null===no.key?si:no.key)||null,no.type===ge?Uo(Wr,di,no.props.children,vo,no.key):vr(Wr,di,no,vo);case $e:return Si(Wr,di=di.get(null===no.key?si:no.key)||null,no,vo)}if(er(no)||fn(no))return Uo(Wr,di=di.get(si)||null,no,vo,null);Dr(Wr,no)}return null}return function(di,Wr,si,no){var vo="object"==typeof si&&null!==si&&si.type===ge&&null===si.key;vo&&(si=si.props.children);var fl="object"==typeof si&&null!==si;if(fl)switch(si.$$typeof){case Te:e:{for(fl=si.key,vo=Wr;null!==vo;){if(vo.key===fl){if(7===vo.tag){if(si.type===ge){Y(di,vo.sibling),(Wr=Ke(vo,si.props.children)).return=di,di=Wr;break e}}else if(vo.elementType===si.type){Y(di,vo.sibling),(Wr=Ke(vo,si.props)).ref=sr(di,vo,si),Wr.return=di,di=Wr;break e}Y(di,vo);break}x(di,vo),vo=vo.sibling}si.type===ge?((Wr=Cd(si.props.children,di.mode,no,si.key)).return=di,di=Wr):((no=ch(si.type,si.key,si.props,null,di.mode,no)).ref=sr(di,Wr,si),no.return=di,di=no)}return _n(di);case $e:e:{for(vo=si.key;null!==Wr;){if(Wr.key===vo){if(4===Wr.tag&&Wr.stateNode.containerInfo===si.containerInfo&&Wr.stateNode.implementation===si.implementation){Y(di,Wr.sibling),(Wr=Ke(Wr,si.children||[])).return=di,di=Wr;break e}Y(di,Wr);break}x(di,Wr),Wr=Wr.sibling}(Wr=Ih(si,di.mode,no)).return=di,di=Wr}return _n(di)}if("string"==typeof si||"number"==typeof si)return si=""+si,null!==Wr&&6===Wr.tag?(Y(di,Wr.sibling),(Wr=Ke(Wr,si)).return=di,di=Wr):(Y(di,Wr),(Wr=Nh(si,di.mode,no)).return=di,di=Wr),_n(di);if(er(si))return function ia(di,Wr,si,no){for(var vo=null,fl=null,Us=Wr,ll=Wr=0,Cl=null;null!==Us&&ll<si.length;ll++){Us.index>ll?(Cl=Us,Us=null):Cl=Us.sibling;var Ia=Qi(di,Us,si[ll],no);if(null===Ia){null===Us&&(Us=Cl);break}y&&Us&&null===Ia.alternate&&x(di,Us),Wr=xt(Ia,Wr,ll),null===fl?vo=Ia:fl.sibling=Ia,fl=Ia,Us=Cl}if(ll===si.length)return Y(di,Us),vo;if(null===Us){for(;ll<si.length;ll++)null!==(Us=Ds(di,si[ll],no))&&(Wr=xt(Us,Wr,ll),null===fl?vo=Us:fl.sibling=Us,fl=Us);return vo}for(Us=be(di,Us);ll<si.length;ll++)null!==(Cl=Ls(Us,di,ll,si[ll],no))&&(y&&null!==Cl.alternate&&Us.delete(null===Cl.key?ll:Cl.key),Wr=xt(Cl,Wr,ll),null===fl?vo=Cl:fl.sibling=Cl,fl=Cl);return y&&Us.forEach(function(bf){return x(di,bf)}),vo}(di,Wr,si,no);if(fn(si))return function oa(di,Wr,si,no){var vo=fn(si);if("function"!=typeof vo)throw Error(u(150));if(null==(si=vo.call(si)))throw Error(u(151));for(var fl=vo=null,Us=Wr,ll=Wr=0,Cl=null,Ia=si.next();null!==Us&&!Ia.done;ll++,Ia=si.next()){Us.index>ll?(Cl=Us,Us=null):Cl=Us.sibling;var bf=Qi(di,Us,Ia.value,no);if(null===bf){null===Us&&(Us=Cl);break}y&&Us&&null===bf.alternate&&x(di,Us),Wr=xt(bf,Wr,ll),null===fl?vo=bf:fl.sibling=bf,fl=bf,Us=Cl}if(Ia.done)return Y(di,Us),vo;if(null===Us){for(;!Ia.done;ll++,Ia=si.next())null!==(Ia=Ds(di,Ia.value,no))&&(Wr=xt(Ia,Wr,ll),null===fl?vo=Ia:fl.sibling=Ia,fl=Ia);return vo}for(Us=be(di,Us);!Ia.done;ll++,Ia=si.next())null!==(Ia=Ls(Us,di,ll,Ia.value,no))&&(y&&null!==Ia.alternate&&Us.delete(null===Ia.key?ll:Ia.key),Wr=xt(Ia,Wr,ll),null===fl?vo=Ia:fl.sibling=Ia,fl=Ia);return y&&Us.forEach(function(Ip){return x(di,Ip)}),vo}(di,Wr,si,no);if(fl&&Dr(di,si),typeof si>"u"&&!vo)switch(di.tag){case 1:case 22:case 0:case 11:case 15:throw Error(u(152,Qr(di.type)||"Component"))}return Y(di,Wr)}}var uo=oi(!0),As=oi(!1),as={},ma=vc(as),Na=vc(as),Pl=vc(as);function il(y){if(y===as)throw Error(u(174));return y}function dl(y,x){switch(al(Pl,x),al(Na,y),al(ma,as),y=x.nodeType){case 9:case 11:x=(x=x.documentElement)?x.namespaceURI:Dn(null,"");break;default:x=Dn(x=(y=8===y?x.parentNode:x).namespaceURI||null,y=y.tagName)}La(ma),al(ma,x)}function Nl(){La(ma),La(Na),La(Pl)}function Qu(y){il(Pl.current);var x=il(ma.current),Y=Dn(x,y.type);x!==Y&&(al(Na,y),al(ma,Y))}function ac(y){Na.current===y&&(La(ma),La(Na))}var wa=vc(0);function nc(y){for(var x=y;null!==x;){if(13===x.tag){var Y=x.memoizedState;if(null!==Y&&(null===(Y=Y.dehydrated)||"$?"===Y.data||"$!"===Y.data))return x}else if(19===x.tag&&void 0!==x.memoizedProps.revealOrder){if(64&x.flags)return x}else if(null!==x.child){x.child.return=x,x=x.child;continue}if(x===y)break;for(;null===x.sibling;){if(null===x.return||x.return===y)return null;x=x.return}x.sibling.return=x.return,x=x.sibling}return null}var yc=null,Gc=null,xc=!1;function wf(y,x){var Y=vd(5,null,null,0);Y.elementType="DELETED",Y.type="DELETED",Y.stateNode=x,Y.return=y,Y.flags=8,null!==y.lastEffect?(y.lastEffect.nextEffect=Y,y.lastEffect=Y):y.firstEffect=y.lastEffect=Y}function Ql(y,x){switch(y.tag){case 5:return null!==(x=1!==x.nodeType||y.type.toLowerCase()!==x.nodeName.toLowerCase()?null:x)&&(y.stateNode=x,!0);case 6:return null!==(x=""===y.pendingProps||3!==x.nodeType?null:x)&&(y.stateNode=x,!0);default:return!1}}function ee(y){if(xc){var x=Gc;if(x){var Y=x;if(!Ql(y,x)){if(!(x=Nr(Y.nextSibling))||!Ql(y,x))return y.flags=-1025&y.flags|2,xc=!1,void(yc=y);wf(yc,Y)}yc=y,Gc=Nr(x.firstChild)}else y.flags=-1025&y.flags|2,xc=!1,yc=y}}function Ce(y){for(y=y.return;null!==y&&5!==y.tag&&3!==y.tag&&13!==y.tag;)y=y.return;yc=y}function vt(y){if(y!==yc)return!1;if(!xc)return Ce(y),xc=!0,!1;var x=y.type;if(5!==y.tag||"head"!==x&&"body"!==x&&!zt(x,y.memoizedProps))for(x=Gc;x;)wf(y,x),x=Nr(x.nextSibling);if(Ce(y),13===y.tag){if(!(y=null!==(y=y.memoizedState)?y.dehydrated:null))throw Error(u(317));e:{for(y=y.nextSibling,x=0;y;){if(8===y.nodeType){var Y=y.data;if("/$"===Y){if(0===x){Gc=Nr(y.nextSibling);break e}x--}else"$"!==Y&&"$!"!==Y&&"$?"!==Y||x++}y=y.nextSibling}Gc=null}}else Gc=yc?Nr(y.stateNode.nextSibling):null;return!0}function $t(){Gc=yc=null,xc=!1}var yn=[];function Ur(){for(var y=0;y<yn.length;y++)yn[y]._workInProgressVersionPrimary=null;yn.length=0}var Gi=fe.ReactCurrentDispatcher,Ys=fe.ReactCurrentBatchConfig,Ka=0,ka=null,nu=null,rc=null,_c=!1,T_=!1;function Bd(){throw Error(u(321))}function Sh(y,x){if(null===x)return!1;for(var Y=0;Y<x.length&&Y<y.length;Y++)if(!zo(y[Y],x[Y]))return!1;return!0}function bh(y,x,Y,be,Ke,xt){if(Ka=xt,ka=x,x.memoizedState=null,x.updateQueue=null,x.lanes=0,Gi.current=null===y||null===y.memoizedState?Jc:sp,y=Y(be,Ke),T_){xt=0;do{if(T_=!1,!(25>xt))throw Error(u(301));xt+=1,rc=nu=null,x.updateQueue=null,Gi.current=s_,y=Y(be,Ke)}while(T_)}if(Gi.current=Rd,x=null!==nu&&null!==nu.next,Ka=0,rc=nu=ka=null,_c=!1,x)throw Error(u(300));return y}function Gf(){var y={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===rc?ka.memoizedState=rc=y:rc=rc.next=y,rc}function Hp(){if(null===nu){var y=ka.alternate;y=null!==y?y.memoizedState:null}else y=nu.next;var x=null===rc?ka.memoizedState:rc.next;if(null!==x)rc=x,nu=y;else{if(null===y)throw Error(u(310));y={memoizedState:(nu=y).memoizedState,baseState:nu.baseState,baseQueue:nu.baseQueue,queue:nu.queue,next:null},null===rc?ka.memoizedState=rc=y:rc=rc.next=y}return rc}function pf(y,x){return"function"==typeof x?x(y):x}function C_(y){var x=Hp(),Y=x.queue;if(null===Y)throw Error(u(311));Y.lastRenderedReducer=y;var be=nu,Ke=be.baseQueue,xt=Y.pending;if(null!==xt){if(null!==Ke){var _n=Ke.next;Ke.next=xt.next,xt.next=_n}be.baseQueue=Ke=xt,Y.pending=null}if(null!==Ke){be=be.baseState;var In=_n=xt=null,vr=Ke=Ke.next;do{var Si=vr.lane;if((Ka&Si)===Si)null!==In&&(In=In.next={lane:0,action:vr.action,eagerReducer:vr.eagerReducer,eagerState:vr.eagerState,next:null}),be=vr.eagerReducer===y?vr.eagerState:y(be,vr.action);else{var Uo={lane:Si,action:vr.action,eagerReducer:vr.eagerReducer,eagerState:vr.eagerState,next:null};null===In?(_n=In=Uo,xt=be):In=In.next=Uo,ka.lanes|=Si,cp|=Si}vr=vr.next}while(null!==vr&&vr!==Ke);null===In?xt=be:In.next=_n,zo(be,x.memoizedState)||(xd=!0),x.memoizedState=be,x.baseState=xt,x.baseQueue=In,Y.lastRenderedState=be}return[x.memoizedState,Y.dispatch]}function op(y){var x=Hp(),Y=x.queue;if(null===Y)throw Error(u(311));Y.lastRenderedReducer=y;var be=Y.dispatch,Ke=Y.pending,xt=x.memoizedState;if(null!==Ke){Y.pending=null;var _n=Ke=Ke.next;do{xt=y(xt,_n.action),_n=_n.next}while(_n!==Ke);zo(xt,x.memoizedState)||(xd=!0),x.memoizedState=xt,null===x.baseQueue&&(x.baseState=xt),Y.lastRenderedState=xt}return[xt,be]}function Za(y,x,Y){var be=x._getVersion;be=be(x._source);var Ke=x._workInProgressVersionPrimary;if(null!==Ke?y=Ke===be:(y=(Ka&(y=y.mutableReadLanes))===y)&&(x._workInProgressVersionPrimary=be,yn.push(x)),y)return Y(x._source);throw yn.push(x),Error(u(350))}function _f(y,x,Y,be){var Ke=fd;if(null===Ke)throw Error(u(349));var xt=x._getVersion,_n=xt(x._source),In=Gi.current,vr=In.useState(function(){return Za(Ke,x,Y)}),Si=vr[1],Uo=vr[0];vr=rc;var Ds=y.memoizedState,Qi=Ds.refs,Ls=Qi.getSnapshot,ia=Ds.source;Ds=Ds.subscribe;var oa=ka;return y.memoizedState={refs:Qi,source:x,subscribe:be},In.useEffect(function(){Qi.getSnapshot=Y,Qi.setSnapshot=Si;var di=xt(x._source);if(!zo(_n,di)){di=Y(x._source),zo(Uo,di)||(Si(di),di=sf(oa),Ke.mutableReadLanes|=di&Ke.pendingLanes),Ke.entangledLanes|=di=Ke.mutableReadLanes;for(var Wr=Ke.entanglements,si=di;0<si;){var no=31-vl(si),vo=1<<no;Wr[no]|=di,si&=~vo}}},[Y,x,be]),In.useEffect(function(){return be(x._source,function(){var di=Qi.getSnapshot,Wr=Qi.setSnapshot;try{Wr(di(x._source));var si=sf(oa);Ke.mutableReadLanes|=si&Ke.pendingLanes}catch(no){Wr(function(){throw no})}})},[x,be]),zo(Ls,Y)&&zo(ia,x)&&zo(Ds,be)||((y={pending:null,dispatch:null,lastRenderedReducer:pf,lastRenderedState:Uo}).dispatch=Si=td.bind(null,ka,y),vr.queue=y,vr.baseQueue=null,Uo=Za(Ke,x,Y),vr.memoizedState=vr.baseState=Uo),Uo}function Wa(y,x,Y){return _f(Hp(),y,x,Y)}function Ec(y){var x=Gf();return"function"==typeof y&&(y=y()),x.memoizedState=x.baseState=y,y=(y=x.queue={pending:null,dispatch:null,lastRenderedReducer:pf,lastRenderedState:y}).dispatch=td.bind(null,ka,y),[x.memoizedState,y]}function Up(y,x,Y,be){return y={tag:y,create:x,destroy:Y,deps:be,next:null},null===(x=ka.updateQueue)?(ka.updateQueue=x={lastEffect:null},x.lastEffect=y.next=y):null===(Y=x.lastEffect)?x.lastEffect=y.next=y:(be=Y.next,Y.next=y,y.next=be,x.lastEffect=y),y}function Zc(y){return Gf().memoizedState={current:y}}function Sc(){return Hp().memoizedState}function Wc(y,x,Y,be){var Ke=Gf();ka.flags|=y,Ke.memoizedState=Up(1|x,Y,void 0,void 0===be?null:be)}function o_(y,x,Y,be){var Ke=Hp();be=void 0===be?null:be;var xt=void 0;if(null!==nu){var _n=nu.memoizedState;if(xt=_n.destroy,null!==be&&Sh(be,_n.deps))return void Up(x,Y,xt,be)}ka.flags|=y,Ke.memoizedState=Up(1|x,Y,xt,be)}function Cp(y,x){return Wc(516,4,y,x)}function Pf(y,x){return o_(516,4,y,x)}function Bp(y,x){return o_(4,2,y,x)}function W_(y,x){return"function"==typeof x?(y=y(),x(y),function(){x(null)}):null!=x?(y=y(),x.current=y,function(){x.current=null}):void 0}function Sd(y,x,Y){return Y=null!=Y?Y.concat([y]):null,o_(4,2,W_.bind(null,x,y),Y)}function Yf(){}function M_(y,x){var Y=Hp();x=void 0===x?null:x;var be=Y.memoizedState;return null!==be&&null!==x&&Sh(x,be[1])?be[0]:(Y.memoizedState=[y,x],y)}function bd(y,x){var Y=Hp();x=void 0===x?null:x;var be=Y.memoizedState;return null!==be&&null!==x&&Sh(x,be[1])?be[0]:(y=y(),Y.memoizedState=[y,x],y)}function dd(y,x){var Y=Ne();Ye(98>Y?98:Y,function(){y(!0)}),Ye(97<Y?97:Y,function(){var be=Ys.transition;Ys.transition=1;try{y(!1),x()}finally{Ys.transition=be}})}function td(y,x,Y){var be=Yc(),Ke=sf(y),xt={lane:Ke,action:Y,eagerReducer:null,eagerState:null,next:null},_n=x.pending;if(null===_n?xt.next=xt:(xt.next=_n.next,_n.next=xt),x.pending=xt,_n=y.alternate,y===ka||null!==_n&&_n===ka)T_=_c=!0;else{if(0===y.lanes&&(null===_n||0===_n.lanes)&&null!==(_n=x.lastRenderedReducer))try{var In=x.lastRenderedState,vr=_n(In,Y);if(xt.eagerReducer=_n,xt.eagerState=vr,zo(vr,In))return}catch{}fp(y,Ke,be)}}var Rd={readContext:tc,useCallback:Bd,useContext:Bd,useEffect:Bd,useImperativeHandle:Bd,useLayoutEffect:Bd,useMemo:Bd,useReducer:Bd,useRef:Bd,useState:Bd,useDebugValue:Bd,useDeferredValue:Bd,useTransition:Bd,useMutableSource:Bd,useOpaqueIdentifier:Bd,unstable_isNewReconciler:!1},Jc={readContext:tc,useCallback:function(y,x){return Gf().memoizedState=[y,void 0===x?null:x],y},useContext:tc,useEffect:Cp,useImperativeHandle:function(y,x,Y){return Y=null!=Y?Y.concat([y]):null,Wc(4,2,W_.bind(null,x,y),Y)},useLayoutEffect:function(y,x){return Wc(4,2,y,x)},useMemo:function(y,x){var Y=Gf();return x=void 0===x?null:x,y=y(),Y.memoizedState=[y,x],y},useReducer:function(y,x,Y){var be=Gf();return x=void 0!==Y?Y(x):x,be.memoizedState=be.baseState=x,y=(y=be.queue={pending:null,dispatch:null,lastRenderedReducer:y,lastRenderedState:x}).dispatch=td.bind(null,ka,y),[be.memoizedState,y]},useRef:Zc,useState:Ec,useDebugValue:Yf,useDeferredValue:function(y){var x=Ec(y),Y=x[0],be=x[1];return Cp(function(){var Ke=Ys.transition;Ys.transition=1;try{be(y)}finally{Ys.transition=Ke}},[y]),Y},useTransition:function(){var y=Ec(!1),x=y[0];return Zc(y=dd.bind(null,y[1])),[y,x]},useMutableSource:function(y,x,Y){var be=Gf();return be.memoizedState={refs:{getSnapshot:x,setSnapshot:null},source:y,subscribe:Y},_f(be,y,x,Y)},useOpaqueIdentifier:function(){if(xc){var y=!1,x=function Jo(y){return{$$typeof:cn,toString:y,valueOf:y}}(function(){throw y||(y=!0,Y("r:"+(ao++).toString(36))),Error(u(355))}),Y=Ec(x)[1];return!(2&ka.mode)&&(ka.flags|=516,Up(5,function(){Y("r:"+(ao++).toString(36))},void 0,null)),x}return Ec(x="r:"+(ao++).toString(36)),x},unstable_isNewReconciler:!1},sp={readContext:tc,useCallback:M_,useContext:tc,useEffect:Pf,useImperativeHandle:Sd,useLayoutEffect:Bp,useMemo:bd,useReducer:C_,useRef:Sc,useState:function(){return C_(pf)},useDebugValue:Yf,useDeferredValue:function(y){var x=C_(pf),Y=x[0],be=x[1];return Pf(function(){var Ke=Ys.transition;Ys.transition=1;try{be(y)}finally{Ys.transition=Ke}},[y]),Y},useTransition:function(){var y=C_(pf)[0];return[Sc().current,y]},useMutableSource:Wa,useOpaqueIdentifier:function(){return C_(pf)[0]},unstable_isNewReconciler:!1},s_={readContext:tc,useCallback:M_,useContext:tc,useEffect:Pf,useImperativeHandle:Sd,useLayoutEffect:Bp,useMemo:bd,useReducer:op,useRef:Sc,useState:function(){return op(pf)},useDebugValue:Yf,useDeferredValue:function(y){var x=op(pf),Y=x[0],be=x[1];return Pf(function(){var Ke=Ys.transition;Ys.transition=1;try{be(y)}finally{Ys.transition=Ke}},[y]),Y},useTransition:function(){var y=op(pf)[0];return[Sc().current,y]},useMutableSource:Wa,useOpaqueIdentifier:function(){return op(pf)[0]},unstable_isNewReconciler:!1},Gd=fe.ReactCurrentOwner,xd=!1;function bc(y,x,Y,be){x.child=null===y?As(x,null,Y,be):uo(x,y.child,Y,be)}function J_(y,x,Y,be,Ke){Y=Y.render;var xt=x.ref;return Ju(x,Ke),be=bh(y,x,Y,be,xt,Ke),null===y||xd?(x.flags|=1,bc(y,x,be,Ke),x.child):(x.updateQueue=y.updateQueue,x.flags&=-517,y.lanes&=~Ke,hf(y,x,Ke))}function Gp(y,x,Y,be,Ke,xt){if(null===y){var _n=Y.type;return"function"!=typeof _n||uh(_n)||void 0!==_n.defaultProps||null!==Y.compare||void 0!==Y.defaultProps?((y=ch(Y.type,null,be,x,x.mode,xt)).ref=x.ref,y.return=x,x.child=y):(x.tag=15,x.type=_n,a_(y,x,_n,be,Ke,xt))}return _n=y.child,Ke&xt||!(Y=null!==(Y=Y.compare)?Y:xl)(Ke=_n.memoizedProps,be)||y.ref!==x.ref?(x.flags|=1,(y=Np(_n,be)).ref=x.ref,y.return=x,x.child=y):hf(y,x,xt)}function a_(y,x,Y,be,Ke,xt){if(null!==y&&xl(y.memoizedProps,be)&&y.ref===x.ref){if(xd=!1,0==(xt&Ke))return x.lanes=y.lanes,hf(y,x,xt);16384&y.flags&&(xd=!0)}return X_(y,x,Y,be,xt)}function Q_(y,x,Y){var be=x.pendingProps,Ke=be.children,xt=null!==y?y.memoizedState:null;if("hidden"===be.mode||"unstable-defer-without-hiding"===be.mode)if(4&x.mode){if(!(1073741824&Y))return y=null!==xt?xt.baseLanes|Y:Y,x.lanes=x.childLanes=1073741824,x.memoizedState={baseLanes:y},Ef(0,y),null;x.memoizedState={baseLanes:0},Ef(0,null!==xt?xt.baseLanes:Y)}else x.memoizedState={baseLanes:0},Ef(0,Y);else null!==xt?(be=xt.baseLanes|Y,x.memoizedState=null):be=Y,Ef(0,be);return bc(y,x,Ke,Y),x.child}function K_(y,x){var Y=x.ref;(null===y&&null!==Y||null!==y&&y.ref!==Y)&&(x.flags|=128)}function X_(y,x,Y,be,Ke){var xt=za(Y)?En:xa.current;return xt=Pu(x,xt),Ju(x,Ke),Y=bh(y,x,Y,be,xt,Ke),null===y||xd?(x.flags|=1,bc(y,x,Y,Ke),x.child):(x.updateQueue=y.updateQueue,x.flags&=-517,y.lanes&=~Ke,hf(y,x,Ke))}function q_(y,x,Y,be,Ke){if(za(Y)){var xt=!0;ld(x)}else xt=!1;if(Ju(x,Ke),null===x.stateNode)null!==y&&(y.alternate=null,x.alternate=null,x.flags|=2),wt(x,Y,be),Cn(x,Y,be,Ke),be=!0;else if(null===y){var _n=x.stateNode,In=x.memoizedProps;_n.props=In;var vr=_n.context,Si=Y.contextType;Si="object"==typeof Si&&null!==Si?tc(Si):Pu(x,Si=za(Y)?En:xa.current);var Uo=Y.getDerivedStateFromProps,Ds="function"==typeof Uo||"function"==typeof _n.getSnapshotBeforeUpdate;Ds||"function"!=typeof _n.UNSAFE_componentWillReceiveProps&&"function"!=typeof _n.componentWillReceiveProps||(In!==be||vr!==Si)&&It(x,_n,be,Si),od=!1;var Qi=x.memoizedState;_n.state=Qi,ne(x,be,_n,Ke),vr=x.memoizedState,In!==be||Qi!==vr||Tu.current||od?("function"==typeof Uo&&(Qe(x,Y,Uo,be),vr=x.memoizedState),(In=od||ft(x,Y,In,be,Qi,vr,Si))?(Ds||"function"!=typeof _n.UNSAFE_componentWillMount&&"function"!=typeof _n.componentWillMount||("function"==typeof _n.componentWillMount&&_n.componentWillMount(),"function"==typeof _n.UNSAFE_componentWillMount&&_n.UNSAFE_componentWillMount()),"function"==typeof _n.componentDidMount&&(x.flags|=4)):("function"==typeof _n.componentDidMount&&(x.flags|=4),x.memoizedProps=be,x.memoizedState=vr),_n.props=be,_n.state=vr,_n.context=Si,be=In):("function"==typeof _n.componentDidMount&&(x.flags|=4),be=!1)}else{_n=x.stateNode,h(y,x),In=x.memoizedProps,Si=x.type===x.elementType?In:zi(x.type,In),_n.props=Si,Ds=x.pendingProps,Qi=_n.context,vr="object"==typeof(vr=Y.contextType)&&null!==vr?tc(vr):Pu(x,vr=za(Y)?En:xa.current);var Ls=Y.getDerivedStateFromProps;(Uo="function"==typeof Ls||"function"==typeof _n.getSnapshotBeforeUpdate)||"function"!=typeof _n.UNSAFE_componentWillReceiveProps&&"function"!=typeof _n.componentWillReceiveProps||(In!==Ds||Qi!==vr)&&It(x,_n,be,vr),od=!1,_n.state=Qi=x.memoizedState,ne(x,be,_n,Ke);var ia=x.memoizedState;In!==Ds||Qi!==ia||Tu.current||od?("function"==typeof Ls&&(Qe(x,Y,Ls,be),ia=x.memoizedState),(Si=od||ft(x,Y,Si,be,Qi,ia,vr))?(Uo||"function"!=typeof _n.UNSAFE_componentWillUpdate&&"function"!=typeof _n.componentWillUpdate||("function"==typeof _n.componentWillUpdate&&_n.componentWillUpdate(be,ia,vr),"function"==typeof _n.UNSAFE_componentWillUpdate&&_n.UNSAFE_componentWillUpdate(be,ia,vr)),"function"==typeof _n.componentDidUpdate&&(x.flags|=4),"function"==typeof _n.getSnapshotBeforeUpdate&&(x.flags|=256)):("function"!=typeof _n.componentDidUpdate||In===y.memoizedProps&&Qi===y.memoizedState||(x.flags|=4),"function"!=typeof _n.getSnapshotBeforeUpdate||In===y.memoizedProps&&Qi===y.memoizedState||(x.flags|=256),x.memoizedProps=be,x.memoizedState=ia),_n.props=be,_n.state=ia,_n.context=vr,be=Si):("function"!=typeof _n.componentDidUpdate||In===y.memoizedProps&&Qi===y.memoizedState||(x.flags|=4),"function"!=typeof _n.getSnapshotBeforeUpdate||In===y.memoizedProps&&Qi===y.memoizedState||(x.flags|=256),be=!1)}return Th(y,x,Y,be,xt,Ke)}function Th(y,x,Y,be,Ke,xt){K_(y,x);var _n=0!=(64&x.flags);if(!be&&!_n)return Ke&&Hc(x,Y,!1),hf(y,x,xt);be=x.stateNode,Gd.current=x;var In=_n&&"function"!=typeof Y.getDerivedStateFromError?null:be.render();return x.flags|=1,null!==y&&_n?(x.child=uo(x,y.child,null,xt),x.child=uo(x,null,In,xt)):bc(y,x,In,xt),x.memoizedState=be.state,Ke&&Hc(x,Y,!0),x.child}function vm(y){var x=y.stateNode;x.pendingContext?Os(0,x.pendingContext,x.pendingContext!==x.context):x.context&&Os(0,x.context,!1),dl(y,x.containerInfo)}var l_,u_,mf,jf,O_={dehydrated:null,retryLane:0};function Ch(y,x,Y){var _n,be=x.pendingProps,Ke=wa.current,xt=!1;return(_n=0!=(64&x.flags))||(_n=(null===y||null!==y.memoizedState)&&0!=(2&Ke)),_n?(xt=!0,x.flags&=-65):null!==y&&null===y.memoizedState||void 0===be.fallback||!0===be.unstable_avoidThisFallback||(Ke|=1),al(wa,1&Ke),null===y?(void 0!==be.fallback&&ee(x),y=be.children,Ke=be.fallback,xt?(y=Yd(x,y,Ke,Y),x.child.memoizedState={baseLanes:Y},x.memoizedState=O_,y):"number"==typeof be.unstable_expectedLoadTime?(y=Yd(x,y,Ke,Y),x.child.memoizedState={baseLanes:Y},x.memoizedState=O_,x.lanes=33554432,y):((Y=om({mode:"visible",children:y},x.mode,Y,null)).return=x,x.child=Y)):xt?(be=function Mh(y,x,Y,be,Ke){var xt=x.mode,_n=y.child;y=_n.sibling;var In={mode:"hidden",children:Y};return 2&xt||x.child===_n?Y=Np(_n,In):((Y=x.child).childLanes=0,Y.pendingProps=In,null!==(_n=Y.lastEffect)?(x.firstEffect=Y.firstEffect,x.lastEffect=_n,_n.nextEffect=null):x.firstEffect=x.lastEffect=null),null!==y?be=Np(y,be):(be=Cd(be,xt,Ke,null)).flags|=2,be.return=x,Y.return=x,Y.sibling=be,x.child=Y,be}(y,x,be.children,be.fallback,Y),(xt=x.child).memoizedState=null===(Ke=y.child.memoizedState)?{baseLanes:Y}:{baseLanes:Ke.baseLanes|Y},xt.childLanes=y.childLanes&~Y,x.memoizedState=O_,be):(Y=function Nf(y,x,Y,be){var Ke=y.child;return y=Ke.sibling,Y=Np(Ke,{mode:"visible",children:Y}),!(2&x.mode)&&(Y.lanes=be),Y.return=x,Y.sibling=null,null!==y&&(y.nextEffect=null,y.flags=8,x.firstEffect=x.lastEffect=y),x.child=Y}(y,x,be.children,Y),x.memoizedState=null,Y)}function Yd(y,x,Y,be){var Ke=y.mode,xt=y.child;return x={mode:"hidden",children:x},2&Ke||null===xt?xt=om(x,Ke,0,null):(xt.childLanes=0,xt.pendingProps=x),Y=Cd(Y,Ke,be,null),xt.return=y,Y.return=y,xt.sibling=Y,y.child=xt,Y}function Jh(y,x){y.lanes|=x;var Y=y.alternate;null!==Y&&(Y.lanes|=x),cd(y.return,x)}function lp(y,x,Y,be,Ke,xt){var _n=y.memoizedState;null===_n?y.memoizedState={isBackwards:x,rendering:null,renderingStartTime:0,last:be,tail:Y,tailMode:Ke,lastEffect:xt}:(_n.isBackwards=x,_n.rendering=null,_n.renderingStartTime=0,_n.last=be,_n.tail=Y,_n.tailMode=Ke,_n.lastEffect=xt)}function Mp(y,x,Y){var be=x.pendingProps,Ke=be.revealOrder,xt=be.tail;if(bc(y,x,be.children,Y),2&(be=wa.current))be=1&be|2,x.flags|=64;else{if(null!==y&&64&y.flags)e:for(y=x.child;null!==y;){if(13===y.tag)null!==y.memoizedState&&Jh(y,Y);else if(19===y.tag)Jh(y,Y);else if(null!==y.child){y.child.return=y,y=y.child;continue}if(y===x)break e;for(;null===y.sibling;){if(null===y.return||y.return===x)break e;y=y.return}y.sibling.return=y.return,y=y.sibling}be&=1}if(al(wa,be),2&x.mode)switch(Ke){case"forwards":for(Y=x.child,Ke=null;null!==Y;)null!==(y=Y.alternate)&&null===nc(y)&&(Ke=Y),Y=Y.sibling;null===(Y=Ke)?(Ke=x.child,x.child=null):(Ke=Y.sibling,Y.sibling=null),lp(x,!1,Ke,Y,xt,x.lastEffect);break;case"backwards":for(Y=null,Ke=x.child,x.child=null;null!==Ke;){if(null!==(y=Ke.alternate)&&null===nc(y)){x.child=Ke;break}y=Ke.sibling,Ke.sibling=Y,Y=Ke,Ke=y}lp(x,!0,Y,null,xt,x.lastEffect);break;case"together":lp(x,!1,null,null,void 0,x.lastEffect);break;default:x.memoizedState=null}else x.memoizedState=null;return x.child}function hf(y,x,Y){if(null!==y&&(x.dependencies=y.dependencies),cp|=x.lanes,Y&x.childLanes){if(null!==y&&x.child!==y.child)throw Error(u(153));if(null!==x.child){for(Y=Np(y=x.child,y.pendingProps),x.child=Y,Y.return=x;null!==y.sibling;)(Y=Y.sibling=Np(y=y.sibling,y.pendingProps)).return=x;Y.sibling=null}return x.child}return null}function jd(y,x){if(!xc)switch(y.tailMode){case"hidden":x=y.tail;for(var Y=null;null!==x;)null!==x.alternate&&(Y=x),x=x.sibling;null===Y?y.tail=null:Y.sibling=null;break;case"collapsed":Y=y.tail;for(var be=null;null!==Y;)null!==Y.alternate&&(be=Y),Y=Y.sibling;null===be?x||null===y.tail?y.tail=null:y.tail.sibling=null:be.sibling=null}}function Nm(y,x,Y){var be=x.pendingProps;switch(x.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return za(x.type)&&Va(),null;case 3:return Nl(),La(Tu),La(xa),Ur(),(be=x.stateNode).pendingContext&&(be.context=be.pendingContext,be.pendingContext=null),(null===y||null===y.child)&&(vt(x)?x.flags|=4:be.hydrate||(x.flags|=256)),u_(x),null;case 5:ac(x);var Ke=il(Pl.current);if(Y=x.type,null!==y&&null!=x.stateNode)mf(y,x,Y,be,Ke),y.ref!==x.ref&&(x.flags|=128);else{if(!be){if(null===x.stateNode)throw Error(u(166));return null}if(y=il(ma.current),vt(x)){Y=x.type;var xt=x.memoizedProps;switch((be=x.stateNode)[ys]=x,be[Ps]=xt,Y){case"dialog":Fs("cancel",be),Fs("close",be);break;case"iframe":case"object":case"embed":Fs("load",be);break;case"video":case"audio":for(y=0;y<Xn.length;y++)Fs(Xn[y],be);break;case"source":Fs("error",be);break;case"img":case"image":case"link":Fs("error",be),Fs("load",be);break;case"details":Fs("toggle",be);break;case"input":hr(be,xt),Fs("invalid",be);break;case"select":be._wrapperState={wasMultiple:!!xt.multiple},Fs("invalid",be);break;case"textarea":Eo(be,xt),Fs("invalid",be)}for(var _n in Rt(Y,xt),y=null,xt)xt.hasOwnProperty(_n)&&(Ke=xt[_n],"children"===_n?"string"==typeof Ke?be.textContent!==Ke&&(y=["children",Ke]):"number"==typeof Ke&&be.textContent!==""+Ke&&(y=["children",""+Ke]):f.hasOwnProperty(_n)&&null!=Ke&&"onScroll"===_n&&Fs("scroll",be));switch(Y){case"input":Wt(be),so(be,xt,!0);break;case"textarea":Wt(be),$i(be);break;case"select":case"option":break;default:"function"==typeof xt.onClick&&(be.onclick=ae)}x.updateQueue=be=y,null!==be&&(x.flags|=4)}else{switch(_n=9===Ke.nodeType?Ke:Ke.ownerDocument,y===qr.html&&(y=Hi(Y)),y===qr.html?"script"===Y?((y=_n.createElement("div")).innerHTML="<script><\/script>",y=y.removeChild(y.firstChild)):"string"==typeof be.is?y=_n.createElement(Y,{is:be.is}):(y=_n.createElement(Y),"select"===Y&&(_n=y,be.multiple?_n.multiple=!0:be.size&&(_n.size=be.size))):y=_n.createElementNS(y,Y),y[ys]=x,y[Ps]=be,l_(y,x,!1,!1),x.stateNode=y,_n=Pe(Y,be),Y){case"dialog":Fs("cancel",y),Fs("close",y),Ke=be;break;case"iframe":case"object":case"embed":Fs("load",y),Ke=be;break;case"video":case"audio":for(Ke=0;Ke<Xn.length;Ke++)Fs(Xn[Ke],y);Ke=be;break;case"source":Fs("error",y),Ke=be;break;case"img":case"image":case"link":Fs("error",y),Fs("load",y),Ke=be;break;case"details":Fs("toggle",y),Ke=be;break;case"input":hr(y,be),Ke=jn(y,be),Fs("invalid",y);break;case"option":Ke=ii(y,be);break;case"select":y._wrapperState={wasMultiple:!!be.multiple},Ke=a({},be,{value:void 0}),Fs("invalid",y);break;case"textarea":Eo(y,be),Ke=pr(y,be),Fs("invalid",y);break;default:Ke=be}Rt(Y,Ke);var In=Ke;for(xt in In)if(In.hasOwnProperty(xt)){var vr=In[xt];"style"===xt?an(y,vr):"dangerouslySetInnerHTML"===xt?null!=(vr=vr?vr.__html:void 0)&&jt(y,vr):"children"===xt?"string"==typeof vr?("textarea"!==Y||""!==vr)&&Fe(y,vr):"number"==typeof vr&&Fe(y,""+vr):"suppressContentEditableWarning"!==xt&&"suppressHydrationWarning"!==xt&&"autoFocus"!==xt&&(f.hasOwnProperty(xt)?null!=vr&&"onScroll"===xt&&Fs("scroll",y):null!=vr&&se(y,xt,vr,_n))}switch(Y){case"input":Wt(y),so(y,be,!1);break;case"textarea":Wt(y),$i(y);break;case"option":null!=be.value&&y.setAttribute("value",""+jr(be.value));break;case"select":y.multiple=!!be.multiple,null!=(xt=be.value)?mr(y,!!be.multiple,xt,!1):null!=be.defaultValue&&mr(y,!!be.multiple,be.defaultValue,!0);break;default:"function"==typeof Ke.onClick&&(y.onclick=ae)}st(Y,be)&&(x.flags|=4)}null!==x.ref&&(x.flags|=128)}return null;case 6:if(y&&null!=x.stateNode)jf(y,x,y.memoizedProps,be);else{if("string"!=typeof be&&null===x.stateNode)throw Error(u(166));Y=il(Pl.current),il(ma.current),vt(x)?(Y=x.memoizedProps,(be=x.stateNode)[ys]=x,be.nodeValue!==Y&&(x.flags|=4)):((be=(9===Y.nodeType?Y:Y.ownerDocument).createTextNode(be))[ys]=x,x.stateNode=be)}return null;case 13:return La(wa),be=x.memoizedState,64&x.flags?(x.lanes=Y,x):(be=null!==be,Y=!1,null===y?void 0!==x.memoizedProps.fallback&&vt(x):Y=null!==y.memoizedState,be&&!Y&&2&x.mode&&(null===y&&!0!==x.memoizedProps.unstable_avoidThisFallback||1&wa.current?0===Cc&&(Cc=3):((0===Cc||3===Cc)&&(Cc=4),null===fd||!(134217727&cp)&&!(134217727&Mc)||wp(fd,Zs))),(be||Y)&&(x.flags|=4),null);case 4:return Nl(),u_(x),null===y&&Vs(x.stateNode.containerInfo),null;case 10:return pc(x),null;case 19:if(La(wa),null===(be=x.memoizedState))return null;if(xt=0!=(64&x.flags),null===(_n=be.rendering))if(xt)jd(be,!1);else{if(0!==Cc||null!==y&&64&y.flags)for(y=x.child;null!==y;){if(null!==(_n=nc(y))){for(x.flags|=64,jd(be,!1),null!==(xt=_n.updateQueue)&&(x.updateQueue=xt,x.flags|=4),null===be.lastEffect&&(x.firstEffect=null),x.lastEffect=be.lastEffect,be=Y,Y=x.child;null!==Y;)y=be,(xt=Y).flags&=2,xt.nextEffect=null,xt.firstEffect=null,xt.lastEffect=null,null===(_n=xt.alternate)?(xt.childLanes=0,xt.lanes=y,xt.child=null,xt.memoizedProps=null,xt.memoizedState=null,xt.updateQueue=null,xt.dependencies=null,xt.stateNode=null):(xt.childLanes=_n.childLanes,xt.lanes=_n.lanes,xt.child=_n.child,xt.memoizedProps=_n.memoizedProps,xt.memoizedState=_n.memoizedState,xt.updateQueue=_n.updateQueue,xt.type=_n.type,xt.dependencies=null===(y=_n.dependencies)?null:{lanes:y.lanes,firstContext:y.firstContext}),Y=Y.sibling;return al(wa,1&wa.current|2),x.child}y=y.sibling}null!==be.tail&&Se()>zf&&(x.flags|=64,xt=!0,jd(be,!1),x.lanes=33554432)}else{if(!xt)if(null!==(y=nc(_n))){if(x.flags|=64,xt=!0,null!==(Y=y.updateQueue)&&(x.updateQueue=Y,x.flags|=4),jd(be,!0),null===be.tail&&"hidden"===be.tailMode&&!_n.alternate&&!xc)return null!==(x=x.lastEffect=be.lastEffect)&&(x.nextEffect=null),null}else 2*Se()-be.renderingStartTime>zf&&1073741824!==Y&&(x.flags|=64,xt=!0,jd(be,!1),x.lanes=33554432);be.isBackwards?(_n.sibling=x.child,x.child=_n):(null!==(Y=be.last)?Y.sibling=_n:x.child=_n,be.last=_n)}return null!==be.tail?(be.rendering=Y=be.tail,be.tail=Y.sibling,be.lastEffect=x.lastEffect,be.renderingStartTime=Se(),Y.sibling=null,x=wa.current,al(wa,xt?1&x|2:1&x),Y):null;case 23:case 24:return Sf(),null!==y&&null!==y.memoizedState!=(null!==x.memoizedState)&&"unstable-defer-without-hiding"!==be.mode&&(x.flags|=4),null}throw Error(u(156,x.tag))}function Qh(y){switch(y.tag){case 1:za(y.type)&&Va();var x=y.flags;return 4096&x?(y.flags=-4097&x|64,y):null;case 3:if(Nl(),La(Tu),La(xa),Ur(),64&(x=y.flags))throw Error(u(285));return y.flags=-4097&x|64,y;case 5:return ac(y),null;case 13:return La(wa),4096&(x=y.flags)?(y.flags=-4097&x|64,y):null;case 19:return La(wa),null;case 4:return Nl(),null;case 10:return pc(y),null;case 23:case 24:return Sf(),null;default:return null}}function nf(y,x){try{var Y="",be=x;do{Y+=ir(be),be=be.return}while(be);var Ke=Y}catch(xt){Ke="\nError generating stack: "+xt.message+"\n"+xt.stack}return{value:y,source:x,stack:Ke}}function Op(y,x){try{console.error(x.value)}catch(Y){setTimeout(function(){throw Y})}}l_=function(y,x){for(var Y=x.child;null!==Y;){if(5===Y.tag||6===Y.tag)y.appendChild(Y.stateNode);else if(4!==Y.tag&&null!==Y.child){Y.child.return=Y,Y=Y.child;continue}if(Y===x)break;for(;null===Y.sibling;){if(null===Y.return||Y.return===x)return;Y=Y.return}Y.sibling.return=Y.return,Y=Y.sibling}},u_=function(){},mf=function(y,x,Y,be){var Ke=y.memoizedProps;if(Ke!==be){y=x.stateNode,il(ma.current);var _n,xt=null;switch(Y){case"input":Ke=jn(y,Ke),be=jn(y,be),xt=[];break;case"option":Ke=ii(y,Ke),be=ii(y,be),xt=[];break;case"select":Ke=a({},Ke,{value:void 0}),be=a({},be,{value:void 0}),xt=[];break;case"textarea":Ke=pr(y,Ke),be=pr(y,be),xt=[];break;default:"function"!=typeof Ke.onClick&&"function"==typeof be.onClick&&(y.onclick=ae)}for(Si in Rt(Y,be),Y=null,Ke)if(!be.hasOwnProperty(Si)&&Ke.hasOwnProperty(Si)&&null!=Ke[Si])if("style"===Si){var In=Ke[Si];for(_n in In)In.hasOwnProperty(_n)&&(Y||(Y={}),Y[_n]="")}else"dangerouslySetInnerHTML"!==Si&&"children"!==Si&&"suppressContentEditableWarning"!==Si&&"suppressHydrationWarning"!==Si&&"autoFocus"!==Si&&(f.hasOwnProperty(Si)?xt||(xt=[]):(xt=xt||[]).push(Si,null));for(Si in be){var vr=be[Si];if(In=Ke?.[Si],be.hasOwnProperty(Si)&&vr!==In&&(null!=vr||null!=In))if("style"===Si)if(In){for(_n in In)!In.hasOwnProperty(_n)||vr&&vr.hasOwnProperty(_n)||(Y||(Y={}),Y[_n]="");for(_n in vr)vr.hasOwnProperty(_n)&&In[_n]!==vr[_n]&&(Y||(Y={}),Y[_n]=vr[_n])}else Y||(xt||(xt=[]),xt.push(Si,Y)),Y=vr;else"dangerouslySetInnerHTML"===Si?(In=In?In.__html:void 0,null!=(vr=vr?vr.__html:void 0)&&In!==vr&&(xt=xt||[]).push(Si,vr)):"children"===Si?"string"!=typeof vr&&"number"!=typeof vr||(xt=xt||[]).push(Si,""+vr):"suppressContentEditableWarning"!==Si&&"suppressHydrationWarning"!==Si&&(f.hasOwnProperty(Si)?(null!=vr&&"onScroll"===Si&&Fs("scroll",y),xt||In===vr||(xt=[])):"object"==typeof vr&&null!==vr&&vr.$$typeof===cn?vr.toString():(xt=xt||[]).push(Si,vr))}Y&&(xt=xt||[]).push("style",Y);var Si=xt;(x.updateQueue=Si)&&(x.flags|=4)}},jf=function(y,x,Y,be){Y!==be&&(x.flags|=4)};var Oh="function"==typeof WeakMap?WeakMap:Map;function Ap(y,x,Y){(Y=b(-1,Y)).tag=3,Y.payload={element:null};var be=x.value;return Y.callback=function(){rh||(rh=!0,ih=be),Op(0,x)},Y}function A_(y,x,Y){(Y=b(-1,Y)).tag=3;var be=y.type.getDerivedStateFromError;if("function"==typeof be){var Ke=x.value;Y.payload=function(){return Op(0,x),be(Ke)}}var xt=y.stateNode;return null!==xt&&"function"==typeof xt.componentDidCatch&&(Y.callback=function(){"function"!=typeof be&&(null===lc?lc=new Set([this]):lc.add(this),Op(0,x));var _n=x.stack;this.componentDidCatch(x.value,{componentStack:null!==_n?_n:""})}),Y}var Dp="function"==typeof WeakSet?WeakSet:Set;function Ah(y){var x=y.ref;if(null!==x)if("function"==typeof x)try{x(null)}catch(Y){Pp(y,Y)}else x.current=null}function If(y,x){switch(x.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&x.flags&&null!==y){var Y=y.memoizedProps,be=y.memoizedState;x=(y=x.stateNode).getSnapshotBeforeUpdate(x.elementType===x.type?Y:zi(x.type,Y),be),y.__reactInternalSnapshotBeforeUpdate=x}return;case 3:return void(256&x.flags&&Er(x.stateNode.containerInfo))}throw Error(u(163))}function Yp(y,x,Y){switch(Y.tag){case 0:case 11:case 15:case 22:if(null!==(x=null!==(x=Y.updateQueue)?x.lastEffect:null)){y=x=x.next;do{if(3==(3&y.tag)){var be=y.create;y.destroy=be()}y=y.next}while(y!==x)}if(null!==(x=null!==(x=Y.updateQueue)?x.lastEffect:null)){y=x=x.next;do{var Ke=y;be=Ke.next,4&(Ke=Ke.tag)&&1&Ke&&(F_(Y,y),lh(Y,y)),y=be}while(y!==x)}return;case 1:return y=Y.stateNode,4&Y.flags&&(null===x?y.componentDidMount():(be=Y.elementType===Y.type?x.memoizedProps:zi(Y.type,x.memoizedProps),y.componentDidUpdate(be,x.memoizedState,y.__reactInternalSnapshotBeforeUpdate))),void(null!==(x=Y.updateQueue)&&he(Y,x,y));case 3:if(null!==(x=Y.updateQueue)){if(y=null,null!==Y.child)switch(Y.child.tag){case 5:case 1:y=Y.child.stateNode}he(Y,x,y)}return;case 5:return y=Y.stateNode,void(null===x&&4&Y.flags&&st(Y.type,Y.memoizedProps)&&y.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===Y.memoizedState&&(Y=Y.alternate,null!==Y&&(Y=Y.memoizedState,null!==Y&&(Y=Y.dehydrated,null!==Y&&$s(Y)))))}throw Error(u(163))}function eh(y,x){for(var Y=y;;){if(5===Y.tag){var be=Y.stateNode;if(x)"function"==typeof(be=be.style).setProperty?be.setProperty("display","none","important"):be.display="none";else{be=Y.stateNode;var Ke=Y.memoizedProps.style;Ke=null!=Ke&&Ke.hasOwnProperty("display")?Ke.display:null,be.style.display=ze("display",Ke)}}else if(6===Y.tag)Y.stateNode.nodeValue=x?"":Y.memoizedProps;else if((23!==Y.tag&&24!==Y.tag||null===Y.memoizedState||Y===y)&&null!==Y.child){Y.child.return=Y,Y=Y.child;continue}if(Y===y)break;for(;null===Y.sibling;){if(null===Y.return||Y.return===y)return;Y=Y.return}Y.sibling.return=Y.return,Y=Y.sibling}}function c_(y,x){if(ud&&"function"==typeof ud.onCommitFiberUnmount)try{ud.onCommitFiberUnmount(Vu,x)}catch{}switch(x.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(y=x.updateQueue)&&null!==(y=y.lastEffect)){var Y=y=y.next;do{var be=Y,Ke=be.destroy;if(be=be.tag,void 0!==Ke)if(4&be)F_(x,Y);else{be=x;try{Ke()}catch(xt){Pp(be,xt)}}Y=Y.next}while(Y!==y)}break;case 1:if(Ah(x),"function"==typeof(y=x.stateNode).componentWillUnmount)try{y.props=x.memoizedProps,y.state=x.memoizedState,y.componentWillUnmount()}catch(xt){Pp(x,xt)}break;case 5:Ah(x);break;case 4:Kh(y,x)}}function th(y){y.alternate=null,y.child=null,y.dependencies=null,y.firstEffect=null,y.lastEffect=null,y.memoizedProps=null,y.memoizedState=null,y.pendingProps=null,y.return=null,y.updateQueue=null}function d_(y){return 5===y.tag||3===y.tag||4===y.tag}function zd(y){e:{for(var x=y.return;null!==x;){if(d_(x))break e;x=x.return}throw Error(u(160))}var Y=x;switch(x=Y.stateNode,Y.tag){case 5:var be=!1;break;case 3:case 4:x=x.containerInfo,be=!0;break;default:throw Error(u(161))}16&Y.flags&&(Fe(x,""),Y.flags&=-17);e:t:for(Y=y;;){for(;null===Y.sibling;){if(null===Y.return||d_(Y.return)){Y=null;break e}Y=Y.return}for(Y.sibling.return=Y.return,Y=Y.sibling;5!==Y.tag&&6!==Y.tag&&18!==Y.tag;){if(2&Y.flags||null===Y.child||4===Y.tag)continue t;Y.child.return=Y,Y=Y.child}if(!(2&Y.flags)){Y=Y.stateNode;break e}}be?nh(y,Y,x):f_(y,Y,x)}function nh(y,x,Y){var be=y.tag,Ke=5===be||6===be;if(Ke)y=Ke?y.stateNode:y.stateNode.instance,x?8===Y.nodeType?Y.parentNode.insertBefore(y,x):Y.insertBefore(y,x):(8===Y.nodeType?(x=Y.parentNode).insertBefore(y,Y):(x=Y).appendChild(y),null!=(Y=Y._reactRootContainer)||null!==x.onclick||(x.onclick=ae));else if(4!==be&&null!==(y=y.child))for(nh(y,x,Y),y=y.sibling;null!==y;)nh(y,x,Y),y=y.sibling}function f_(y,x,Y){var be=y.tag,Ke=5===be||6===be;if(Ke)y=Ke?y.stateNode:y.stateNode.instance,x?Y.insertBefore(y,x):Y.appendChild(y);else if(4!==be&&null!==(y=y.child))for(f_(y,x,Y),y=y.sibling;null!==y;)f_(y,x,Y),y=y.sibling}function Kh(y,x){for(var Ke,xt,Y=x,be=!1;;){if(!be){be=Y.return;e:for(;;){if(null===be)throw Error(u(160));switch(Ke=be.stateNode,be.tag){case 5:xt=!1;break e;case 3:case 4:Ke=Ke.containerInfo,xt=!0;break e}be=be.return}be=!0}if(5===Y.tag||6===Y.tag){e:for(var _n=y,In=Y,vr=In;;)if(c_(_n,vr),null!==vr.child&&4!==vr.tag)vr.child.return=vr,vr=vr.child;else{if(vr===In)break e;for(;null===vr.sibling;){if(null===vr.return||vr.return===In)break e;vr=vr.return}vr.sibling.return=vr.return,vr=vr.sibling}xt?(In=Y.stateNode,8===(_n=Ke).nodeType?_n.parentNode.removeChild(In):_n.removeChild(In)):Ke.removeChild(Y.stateNode)}else if(4===Y.tag){if(null!==Y.child){Ke=Y.stateNode.containerInfo,xt=!0,Y.child.return=Y,Y=Y.child;continue}}else if(c_(y,Y),null!==Y.child){Y.child.return=Y,Y=Y.child;continue}if(Y===x)break;for(;null===Y.sibling;){if(null===Y.return||Y.return===x)return;4===(Y=Y.return).tag&&(be=!1)}Y.sibling.return=Y.return,Y=Y.sibling}}function up(y,x){switch(x.tag){case 0:case 11:case 14:case 15:case 22:var Y=x.updateQueue;if(null!==(Y=null!==Y?Y.lastEffect:null)){var be=Y=Y.next;do{3==(3&be.tag)&&(y=be.destroy,be.destroy=void 0,void 0!==y&&y()),be=be.next}while(be!==Y)}return;case 1:case 12:case 17:return;case 5:if(null!=(Y=x.stateNode)){be=x.memoizedProps;var Ke=null!==y?y.memoizedProps:be;y=x.type;var xt=x.updateQueue;if(x.updateQueue=null,null!==xt){for(Y[Ps]=be,"input"===y&&"radio"===be.type&&null!=be.name&&Oi(Y,be),Pe(y,Ke),x=Pe(y,be),Ke=0;Ke<xt.length;Ke+=2){var _n=xt[Ke],In=xt[Ke+1];"style"===_n?an(Y,In):"dangerouslySetInnerHTML"===_n?jt(Y,In):"children"===_n?Fe(Y,In):se(Y,_n,In,x)}switch(y){case"input":Wi(Y,be);break;case"textarea":po(Y,be);break;case"select":y=Y._wrapperState.wasMultiple,Y._wrapperState.wasMultiple=!!be.multiple,null!=(xt=be.value)?mr(Y,!!be.multiple,xt,!1):y!==!!be.multiple&&(null!=be.defaultValue?mr(Y,!!be.multiple,be.defaultValue,!0):mr(Y,!!be.multiple,be.multiple?[]:"",!1))}}}return;case 6:if(null===x.stateNode)throw Error(u(162));return void(x.stateNode.nodeValue=x.memoizedProps);case 3:return void((Y=x.stateNode).hydrate&&(Y.hydrate=!1,$s(Y.containerInfo)));case 13:return null!==x.memoizedState&&(Lf=Se(),eh(x.child,!0)),void Dh(x);case 19:return void Dh(x);case 23:case 24:return void eh(x,null!==x.memoizedState)}throw Error(u(163))}function Dh(y){var x=y.updateQueue;if(null!==x){y.updateQueue=null;var Y=y.stateNode;null===Y&&(Y=y.stateNode=new Dp),x.forEach(function(be){var Ke=rm.bind(null,y,be);Y.has(be)||(Y.add(be),be.then(Ke,Ke))})}}function jp(y,x){return null!==y&&(null===(y=y.memoizedState)||null!==y.dehydrated)&&null!==(x=x.memoizedState)&&null===x.dehydrated}var Td=Math.ceil,gf=fe.ReactCurrentDispatcher,zp=fe.ReactCurrentOwner,Ta=0,fd=null,Tc=null,Zs=0,vf=0,p_=vc(0),Cc=0,D_=null,yf=0,cp=0,Mc=0,Ff=0,__=null,Lf=0,zf=1/0;function Vf(){zf=Se()+500}var im,ra=null,rh=!1,ih=null,lc=null,Ku=!1,Zf=null,Vd=90,Wf=[],h_=[],kf=null,rf=0,R_=null,x_=-1,Jf=0,oh=0,Rp=null,dp=!1;function Yc(){return 48&Ta?Se():-1!==x_?x_:x_=Se()}function sf(y){if(!(2&(y=y.mode)))return 1;if(!(4&y))return 99===Ne()?1:2;if(0===Jf&&(Jf=yf),0!==ni.transition){0!==oh&&(oh=null!==__?__.pendingLanes:0),y=Jf;var x=4186112&~oh;return 0==(x&=-x)&&0==(x=(y=4186112&~y)&-y)&&(x=8192),x}return y=Ne(),y=ds(4&Ta&&98===y?12:y=function vi(y){switch(y){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(y),Jf)}function fp(y,x,Y){if(50<rf)throw rf=0,R_=null,Error(u(185));if(null===(y=xp(y,x)))return null;Ll(y,x,Y),y===fd&&(Mc|=x,4===Cc&&wp(y,Zs));var be=Ne();1===x?8&Ta&&!(48&Ta)?Rh(y):(wd(y,Y),0===Ta&&(Vf(),un())):(!(4&Ta)||98!==be&&99!==be||(null===kf?kf=new Set([y]):kf.add(y)),wd(y,Y)),__=y}function xp(y,x){y.lanes|=x;var Y=y.alternate;for(null!==Y&&(Y.lanes|=x),Y=y,y=y.return;null!==y;)y.childLanes|=x,null!==(Y=y.alternate)&&(Y.childLanes|=x),Y=y,y=y.return;return 3===Y.tag?Y.stateNode:null}function wd(y,x){for(var Y=y.callbackNode,be=y.suspendedLanes,Ke=y.pingedLanes,xt=y.expirationTimes,_n=y.pendingLanes;0<_n;){var In=31-vl(_n),vr=1<<In,Si=xt[In];-1===Si?vr&be&&!(vr&Ke)||(Si=x,gn(vr),xt[In]=10<=Jt?Si+250:6<=Jt?Si+5e3:-1):Si<=x&&(y.expiredLanes|=vr),_n&=~vr}if(be=Xi(y,y===fd?Zs:0),x=Jt,0===be)null!==Y&&(Y!==ed&&Uf(Y),y.callbackNode=null,y.callbackPriority=0);else{if(null!==Y){if(y.callbackPriority===x)return;Y!==ed&&Uf(Y)}15===x?(Y=Rh.bind(null,y),null===_u?(_u=[Y],Ud=tf(ip,Mn)):_u.push(Y),Y=ed):14===x?Y=Mt(99,Rh.bind(null,y)):(Y=function Bi(y){switch(y){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(u(358,y))}}(x),Y=Mt(Y,w_.bind(null,y))),y.callbackPriority=x,y.callbackNode=Y}}function w_(y){if(x_=-1,oh=Jf=0,48&Ta)throw Error(u(327));var x=y.callbackNode;if(_p()&&y.callbackNode!==x)return null;var Y=Xi(y,y===fd?Zs:0);if(0===Y)return null;var be=Y,Ke=Ta;Ta|=16;var xt=ah();for((fd!==y||Zs!==be)&&(Vf(),Vp(y,be));;)try{N_();break}catch(In){xh(y,In)}if(Wu(),gf.current=xt,Ta=Ke,null!==Tc?be=0:(fd=null,Zs=0,be=Cc),yf&Mc)Vp(y,0);else if(0!==be){if(2===be&&(Ta|=64,y.hydrate&&(y.hydrate=!1,Er(y.containerInfo)),0!==(Y=ws(y))&&(be=P_(y,Y))),1===be)throw x=D_,Vp(y,0),wp(y,Y),wd(y,Se()),x;switch(y.finishedWork=y.current.alternate,y.finishedLanes=Y,be){case 0:case 1:throw Error(u(345));case 2:case 5:Zp(y);break;case 3:if(wp(y,Y),(62914560&Y)===Y&&10<(be=Lf+500-Se())){if(0!==Xi(y,0))break;if(((Ke=y.suspendedLanes)&Y)!==Y){Yc(),y.pingedLanes|=y.suspendedLanes&Ke;break}y.timeoutHandle=Qt(Zp.bind(null,y),be);break}Zp(y);break;case 4:if(wp(y,Y),(4186112&Y)===Y)break;for(be=y.eventTimes,Ke=-1;0<Y;){var _n=31-vl(Y);xt=1<<_n,(_n=be[_n])>Ke&&(Ke=_n),Y&=~xt}if(Y=Ke,10<(Y=(120>(Y=Se()-Y)?120:480>Y?480:1080>Y?1080:1920>Y?1920:3e3>Y?3e3:4320>Y?4320:1960*Td(Y/1960))-Y)){y.timeoutHandle=Qt(Zp.bind(null,y),Y);break}Zp(y);break;default:throw Error(u(329))}}return wd(y,Se()),y.callbackNode===x?w_.bind(null,y):null}function wp(y,x){for(x&=~Ff,y.suspendedLanes|=x&=~Mc,y.pingedLanes&=~x,y=y.expirationTimes;0<x;){var Y=31-vl(x),be=1<<Y;y[Y]=-1,x&=~be}}function Rh(y){if(48&Ta)throw Error(u(327));if(_p(),y===fd&&y.expiredLanes&Zs){var x=Zs,Y=P_(y,x);yf&Mc&&(Y=P_(y,x=Xi(y,x)))}else Y=P_(y,x=Xi(y,0));if(0!==y.tag&&2===Y&&(Ta|=64,y.hydrate&&(y.hydrate=!1,Er(y.containerInfo)),0!==(x=ws(y))&&(Y=P_(y,x))),1===Y)throw Y=D_,Vp(y,0),wp(y,x),wd(y,Se()),Y;return y.finishedWork=y.current.alternate,y.finishedLanes=x,Zp(y),wd(y,Se()),null}function pp(y,x){var Y=Ta;Ta|=1;try{return y(x)}finally{0===(Ta=Y)&&(Vf(),un())}}function Xh(y,x){var Y=Ta;Ta&=-2,Ta|=8;try{return y(x)}finally{0===(Ta=Y)&&(Vf(),un())}}function Ef(y,x){al(p_,vf),vf|=x,yf|=x}function Sf(){vf=p_.current,La(p_)}function Vp(y,x){y.finishedWork=null,y.finishedLanes=0;var Y=y.timeoutHandle;if(-1!==Y&&(y.timeoutHandle=-1,Gn(Y)),null!==Tc)for(Y=Tc.return;null!==Y;){var be=Y;switch(be.tag){case 1:null!=(be=be.type.childContextTypes)&&Va();break;case 3:Nl(),La(Tu),La(xa),Ur();break;case 5:ac(be);break;case 4:Nl();break;case 13:case 19:La(wa);break;case 10:pc(be);break;case 23:case 24:Sf()}Y=Y.return}fd=y,Tc=Np(y.current,null),Zs=vf=yf=x,Cc=0,D_=null,Ff=Mc=cp=0}function xh(y,x){for(;;){var Y=Tc;try{if(Wu(),Gi.current=Rd,_c){for(var be=ka.memoizedState;null!==be;){var Ke=be.queue;null!==Ke&&(Ke.pending=null),be=be.next}_c=!1}if(Ka=0,rc=nu=ka=null,T_=!1,zp.current=null,null===Y||null===Y.return){Cc=1,D_=x,Tc=null;break}e:{var xt=y,_n=Y.return,In=Y,vr=x;if(x=Zs,In.flags|=2048,In.firstEffect=In.lastEffect=null,null!==vr&&"object"==typeof vr&&"function"==typeof vr.then){var Si=vr;if(!(2&In.mode)){var Uo=In.alternate;Uo?(In.updateQueue=Uo.updateQueue,In.memoizedState=Uo.memoizedState,In.lanes=Uo.lanes):(In.updateQueue=null,In.memoizedState=null)}var Ds=0!=(1&wa.current),Qi=_n;do{var Ls;if(Ls=13===Qi.tag){var ia=Qi.memoizedState;if(null!==ia)Ls=null!==ia.dehydrated;else{var oa=Qi.memoizedProps;Ls=void 0!==oa.fallback&&(!0!==oa.unstable_avoidThisFallback||!Ds)}}if(Ls){var di=Qi.updateQueue;if(null===di){var Wr=new Set;Wr.add(Si),Qi.updateQueue=Wr}else di.add(Si);if(!(2&Qi.mode)){if(Qi.flags|=64,In.flags|=16384,In.flags&=-2981,1===In.tag)if(null===In.alternate)In.tag=17;else{var si=b(-1,1);si.tag=2,N(In,si)}In.lanes|=1;break e}vr=void 0,In=x;var no=xt.pingCache;if(null===no?(no=xt.pingCache=new Oh).set(Si,vr=new Set):void 0===(vr=no.get(Si))&&no.set(Si,vr=new Set),!vr.has(In)){vr.add(In);var vo=nm.bind(null,xt,Si,In);Si.then(vo,vo)}Qi.flags|=4096,Qi.lanes=x;break e}Qi=Qi.return}while(null!==Qi);vr=Error((Qr(In.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Cc&&(Cc=2),vr=nf(vr,In),Qi=_n;do{switch(Qi.tag){case 3:xt=vr,Qi.flags|=4096,Qi.lanes|=x&=-x,k(Qi,Ap(0,xt,x));break e;case 1:xt=vr;var ll=Qi.stateNode;if(!(64&Qi.flags||"function"!=typeof Qi.type.getDerivedStateFromError&&(null===ll||"function"!=typeof ll.componentDidCatch||null!==lc&&lc.has(ll)))){Qi.flags|=4096,Qi.lanes|=x&=-x,k(Qi,A_(Qi,xt,x));break e}}Qi=Qi.return}while(null!==Qi)}I_(Y)}catch(Ia){x=Ia,Tc===Y&&null!==Y&&(Tc=Y=Y.return);continue}break}}function ah(){var y=gf.current;return gf.current=Rd,null===y?Rd:y}function P_(y,x){var Y=Ta;Ta|=16;var be=ah();for(fd===y&&Zs===x||Vp(y,x);;)try{qh();break}catch(Ke){xh(y,Ke)}if(Wu(),Ta=Y,gf.current=be,null!==Tc)throw Error(u(261));return fd=null,Zs=0,Cc}function qh(){for(;null!==Tc;)wh(Tc)}function N_(){for(;null!==Tc&&!Mu();)wh(Tc)}function wh(y){var x=im(y.alternate,y,vf);y.memoizedProps=y.pendingProps,null===x?I_(y):Tc=x,zp.current=null}function I_(y){var x=y;do{var Y=x.alternate;if(y=x.return,2048&x.flags){if(null!==(Y=Qh(x)))return Y.flags&=2047,void(Tc=Y);null!==y&&(y.firstEffect=y.lastEffect=null,y.flags|=2048)}else{if(null!==(Y=Nm(Y,x,vf)))return void(Tc=Y);if(24!==(Y=x).tag&&23!==Y.tag||null===Y.memoizedState||1073741824&vf||!(4&Y.mode)){for(var be=0,Ke=Y.child;null!==Ke;)be|=Ke.lanes|Ke.childLanes,Ke=Ke.sibling;Y.childLanes=be}null!==y&&!(2048&y.flags)&&(null===y.firstEffect&&(y.firstEffect=x.firstEffect),null!==x.lastEffect&&(null!==y.lastEffect&&(y.lastEffect.nextEffect=x.firstEffect),y.lastEffect=x.lastEffect),1<x.flags&&(null!==y.lastEffect?y.lastEffect.nextEffect=x:y.firstEffect=x,y.lastEffect=x))}if(null!==(x=x.sibling))return void(Tc=x);Tc=x=y}while(null!==x);0===Cc&&(Cc=5)}function Zp(y){var x=Ne();return Ye(99,Qc.bind(null,y,x)),null}function Qc(y,x){do{_p()}while(null!==Zf);if(48&Ta)throw Error(u(327));var Y=y.finishedWork;if(null===Y)return null;if(y.finishedWork=null,y.finishedLanes=0,Y===y.current)throw Error(u(177));y.callbackNode=null;var be=Y.lanes|Y.childLanes,Ke=be,xt=y.pendingLanes&~Ke;y.pendingLanes=Ke,y.suspendedLanes=0,y.pingedLanes=0,y.expiredLanes&=Ke,y.mutableReadLanes&=Ke,y.entangledLanes&=Ke,Ke=y.entanglements;for(var _n=y.eventTimes,In=y.expirationTimes;0<xt;){var vr=31-vl(xt),Si=1<<vr;Ke[vr]=0,_n[vr]=-1,In[vr]=-1,xt&=~Si}if(null!==kf&&!(24&be)&&kf.has(y)&&kf.delete(y),y===fd&&(Tc=fd=null,Zs=0),1<Y.flags?null!==Y.lastEffect?(Y.lastEffect.nextEffect=Y,be=Y.firstEffect):be=Y:be=Y.firstEffect,null!==be){if(Ke=Ta,Ta|=32,zp.current=null,De=yl,yi(_n=kc())){if("selectionStart"in _n)In={start:_n.selectionStart,end:_n.selectionEnd};else if((Si=(In=(In=_n.ownerDocument)&&In.defaultView||window).getSelection&&In.getSelection())&&0!==Si.rangeCount){In=Si.anchorNode,xt=Si.anchorOffset,vr=Si.focusNode,Si=Si.focusOffset;var Uo=0,Ds=-1,Qi=-1,Ls=0,ia=0,oa=_n,di=null;t:for(;;){for(var Wr;oa!==In||0!==xt&&3!==oa.nodeType||(Ds=Uo+xt),oa!==vr||0!==Si&&3!==oa.nodeType||(Qi=Uo+Si),3===oa.nodeType&&(Uo+=oa.nodeValue.length),null!==(Wr=oa.firstChild);)di=oa,oa=Wr;for(;;){if(oa===_n)break t;if(di===In&&++Ls===xt&&(Ds=Uo),di===vr&&++ia===Si&&(Qi=Uo),null!==(Wr=oa.nextSibling))break;di=(oa=di).parentNode}oa=Wr}In=-1===Ds||-1===Qi?null:{start:Ds,end:Qi}}else In=null;In=In||{start:0,end:0}}else In=null;Ve={focusedElem:_n,selectionRange:In},yl=!1,Rp=null,dp=!1,ra=be;do{try{em()}catch(Ia){if(null===ra)throw Error(u(330));Pp(ra,Ia),ra=ra.nextEffect}}while(null!==ra);Rp=null,ra=be;do{try{for(_n=y;null!==ra;){var si=ra.flags;if(16&si&&Fe(ra.stateNode,""),128&si){var no=ra.alternate;if(null!==no){var vo=no.ref;null!==vo&&("function"==typeof vo?vo(null):vo.current=null)}}switch(1038&si){case 2:zd(ra),ra.flags&=-3;break;case 6:zd(ra),ra.flags&=-3,up(ra.alternate,ra);break;case 1024:ra.flags&=-1025;break;case 1028:ra.flags&=-1025,up(ra.alternate,ra);break;case 4:up(ra.alternate,ra);break;case 8:Kh(_n,In=ra);var fl=In.alternate;th(In),null!==fl&&th(fl)}ra=ra.nextEffect}}catch(Ia){if(null===ra)throw Error(u(330));Pp(ra,Ia),ra=ra.nextEffect}}while(null!==ra);if(vo=Ve,no=kc(),_n=vo.selectionRange,no!==(si=vo.focusedElem)&&si&&si.ownerDocument&&ad(si.ownerDocument.documentElement,si)){for((null!==_n&&yi(si)&&(no=_n.start,void 0===(vo=_n.end)&&(vo=no),"selectionStart"in si?(si.selectionStart=no,si.selectionEnd=Math.min(vo,si.value.length)):(vo=(no=si.ownerDocument||document)&&no.defaultView||window).getSelection&&(vo=vo.getSelection(),In=si.textContent.length,fl=Math.min(_n.start,In),_n=void 0===_n.end?fl:Math.min(_n.end,In),!vo.extend&&fl>_n&&(In=_n,_n=fl,fl=In),In=Xc(si,fl),xt=Xc(si,_n),In&&xt&&(1!==vo.rangeCount||vo.anchorNode!==In.node||vo.anchorOffset!==In.offset||vo.focusNode!==xt.node||vo.focusOffset!==xt.offset)&&((no=no.createRange()).setStart(In.node,In.offset),vo.removeAllRanges(),fl>_n?(vo.addRange(no),vo.extend(xt.node,xt.offset)):(no.setEnd(xt.node,xt.offset),vo.addRange(no))))),no=[],vo=si);vo=vo.parentNode;)1===vo.nodeType&&no.push({element:vo,left:vo.scrollLeft,top:vo.scrollTop});for("function"==typeof si.focus&&si.focus(),si=0;si<no.length;si++)(vo=no[si]).element.scrollLeft=vo.left,vo.element.scrollTop=vo.top}yl=!!De,Ve=De=null,y.current=Y,ra=be;do{try{for(si=y;null!==ra;){var Us=ra.flags;if(36&Us&&Yp(si,ra.alternate,ra),128&Us){no=void 0;var ll=ra.ref;if(null!==ll)no=ra.stateNode,"function"==typeof ll?ll(no):ll.current=no}ra=ra.nextEffect}}catch(Ia){if(null===ra)throw Error(u(330));Pp(ra,Ia),ra=ra.nextEffect}}while(null!==ra);ra=null,xf(),Ta=Ke}else y.current=Y;if(Ku)Ku=!1,Zf=y,Vd=x;else for(ra=be;null!==ra;)x=ra.nextEffect,ra.nextEffect=null,8&ra.flags&&((Us=ra).sibling=null,Us.stateNode=null),ra=x;if(0===(be=y.pendingLanes)&&(lc=null),1===be?y===R_?rf++:(rf=0,R_=y):rf=0,Y=Y.stateNode,ud&&"function"==typeof ud.onCommitFiberRoot)try{ud.onCommitFiberRoot(Vu,Y,void 0,64==(64&Y.current.flags))}catch{}if(wd(y,Se()),rh)throw rh=!1,y=ih,ih=null,y;return 8&Ta||un(),null}function em(){for(;null!==ra;){var y=ra.alternate;dp||null===Rp||(8&ra.flags?bn(ra,Rp)&&(dp=!0):13===ra.tag&&jp(y,ra)&&bn(ra,Rp)&&(dp=!0));var x=ra.flags;256&x&&If(y,ra),!(512&x)||Ku||(Ku=!0,Mt(97,function(){return _p(),null})),ra=ra.nextEffect}}function _p(){if(90!==Vd){var y=97<Vd?97:Vd;return Vd=90,Ye(y,tm)}return!1}function lh(y,x){Wf.push(x,y),Ku||(Ku=!0,Mt(97,function(){return _p(),null}))}function F_(y,x){h_.push(x,y),Ku||(Ku=!0,Mt(97,function(){return _p(),null}))}function tm(){if(null===Zf)return!1;var y=Zf;if(Zf=null,48&Ta)throw Error(u(331));var x=Ta;Ta|=32;var Y=h_;h_=[];for(var be=0;be<Y.length;be+=2){var Ke=Y[be],xt=Y[be+1],_n=Ke.destroy;if(Ke.destroy=void 0,"function"==typeof _n)try{_n()}catch(vr){if(null===xt)throw Error(u(330));Pp(xt,vr)}}for(Y=Wf,Wf=[],be=0;be<Y.length;be+=2){Ke=Y[be],xt=Y[be+1];try{var In=Ke.create;Ke.destroy=In()}catch(vr){if(null===xt)throw Error(u(330));Pp(xt,vr)}}for(In=y.current.firstEffect;null!==In;)y=In.nextEffect,In.nextEffect=null,8&In.flags&&(In.sibling=null,In.stateNode=null),In=y;return Ta=x,un(),!0}function Ph(y,x,Y){N(y,x=Ap(0,x=nf(Y,x),1)),x=Yc(),null!==(y=xp(y,1))&&(Ll(y,1,x),wd(y,x))}function Pp(y,x){if(3===y.tag)Ph(y,y,x);else for(var Y=y.return;null!==Y;){if(3===Y.tag){Ph(Y,y,x);break}if(1===Y.tag){var be=Y.stateNode;if("function"==typeof Y.type.getDerivedStateFromError||"function"==typeof be.componentDidCatch&&(null===lc||!lc.has(be))){var Ke=A_(Y,y=nf(x,y),1);if(N(Y,Ke),Ke=Yc(),null!==(Y=xp(Y,1)))Ll(Y,1,Ke),wd(Y,Ke);else if("function"==typeof be.componentDidCatch&&(null===lc||!lc.has(be)))try{be.componentDidCatch(x,y)}catch{}break}}Y=Y.return}}function nm(y,x,Y){var be=y.pingCache;null!==be&&be.delete(x),x=Yc(),y.pingedLanes|=y.suspendedLanes&Y,fd===y&&(Zs&Y)===Y&&(4===Cc||3===Cc&&(62914560&Zs)===Zs&&500>Se()-Lf?Vp(y,0):Ff|=Y),wd(y,x)}function rm(y,x){var Y=y.stateNode;null!==Y&&Y.delete(x),0==(x=0)&&(2&(x=y.mode)?4&x?(0===Jf&&(Jf=yf),0===(x=qs(62914560&~Jf))&&(x=4194304)):x=99===Ne()?1:2:x=1),Y=Yc(),null!==(y=xp(y,x))&&(Ll(y,x,Y),wd(y,Y))}function Im(y,x,Y,be){this.tag=y,this.key=Y,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=x,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=be,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function vd(y,x,Y,be){return new Im(y,x,Y,be)}function uh(y){return!(!(y=y.prototype)||!y.isReactComponent)}function Np(y,x){var Y=y.alternate;return null===Y?((Y=vd(y.tag,x,y.key,y.mode)).elementType=y.elementType,Y.type=y.type,Y.stateNode=y.stateNode,Y.alternate=y,y.alternate=Y):(Y.pendingProps=x,Y.type=y.type,Y.flags=0,Y.nextEffect=null,Y.firstEffect=null,Y.lastEffect=null),Y.childLanes=y.childLanes,Y.lanes=y.lanes,Y.child=y.child,Y.memoizedProps=y.memoizedProps,Y.memoizedState=y.memoizedState,Y.updateQueue=y.updateQueue,Y.dependencies=null===(x=y.dependencies)?null:{lanes:x.lanes,firstContext:x.firstContext},Y.sibling=y.sibling,Y.index=y.index,Y.ref=y.ref,Y}function ch(y,x,Y,be,Ke,xt){var _n=2;if(be=y,"function"==typeof y)uh(y)&&(_n=1);else if("string"==typeof y)_n=5;else e:switch(y){case ge:return Cd(Y.children,Ke,xt,x);case pn:_n=8,Ke|=16;break;case Et:_n=8,Ke|=1;break;case ot:return(y=vd(12,Y,x,8|Ke)).elementType=ot,y.type=ot,y.lanes=xt,y;case We:return(y=vd(13,Y,x,Ke)).type=We,y.elementType=We,y.lanes=xt,y;case Le:return(y=vd(19,Y,x,Ke)).elementType=Le,y.lanes=xt,y;case Rn:return om(Y,Ke,xt,x);case At:return(y=vd(24,Y,x,Ke)).elementType=At,y.lanes=xt,y;default:if("object"==typeof y&&null!==y)switch(y.$$typeof){case ct:_n=10;break e;case qe:_n=9;break e;case He:_n=11;break e;case Pt:_n=14;break e;case it:_n=16,be=null;break e;case Xt:_n=22;break e}throw Error(u(130,null==y?y:typeof y,""))}return(x=vd(_n,Y,x,Ke)).elementType=y,x.type=be,x.lanes=xt,x}function Cd(y,x,Y,be){return(y=vd(7,y,be,x)).lanes=Y,y}function om(y,x,Y,be){return(y=vd(23,y,be,x)).elementType=Rn,y.lanes=Y,y}function Nh(y,x,Y){return(y=vd(6,y,null,x)).lanes=Y,y}function Ih(y,x,Y){return(x=vd(4,null!==y.children?y.children:[],y.key,x)).lanes=Y,x.stateNode={containerInfo:y.containerInfo,pendingChildren:null,implementation:y.implementation},x}function Fh(y,x,Y){this.tag=x,this.containerInfo=y,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=Y,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Js(0),this.expirationTimes=Js(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Js(0),this.mutableSourceEagerHydrationData=null}function L_(y,x,Y,be){var Ke=x.current,xt=Yc(),_n=sf(Ke);e:if(Y){t:{if(Po(Y=Y._reactInternals)!==Y||1!==Y.tag)throw Error(u(170));var In=Y;do{switch(In.tag){case 3:In=In.stateNode.context;break t;case 1:if(za(In.type)){In=In.stateNode.__reactInternalMemoizedMergedChildContext;break t}}In=In.return}while(null!==In);throw Error(u(171))}if(1===Y.tag){var vr=Y.type;if(za(vr)){Y=Cu(Y,vr,In);break e}}Y=In}else Y=rl;return null===x.context?x.context=Y:x.pendingContext=Y,(x=b(xt,_n)).payload={element:y},null!==(be=void 0===be?null:be)&&(x.callback=be),N(Ke,x),fp(Ke,_n,xt),_n}function I(y){return(y=y.current).child?y.child.stateNode:null}function re(y,x){if(null!==(y=y.memoizedState)&&null!==y.dehydrated){var Y=y.retryLane;y.retryLane=0!==Y&&Y<x?Y:x}}function S(y,x){re(y,x),(y=y.alternate)&&re(y,x)}function Oe(y,x,Y){var be=null!=Y&&null!=Y.hydrationOptions&&Y.hydrationOptions.mutableSources||null;if(Y=new Fh(y,x,null!=Y&&!0===Y.hydrate),x=vd(3,null,null,2===x?7:1===x?3:0),Y.current=x,x.stateNode=Y,Ed(x),y[Ul]=Y.current,Vs(8===y.nodeType?y.parentNode:y),be)for(y=0;y<be.length;y++){var Ke=(x=be[y])._getVersion;Ke=Ke(x._source),null==Y.mutableSourceEagerHydrationData?Y.mutableSourceEagerHydrationData=[x,Ke]:Y.mutableSourceEagerHydrationData.push(x,Ke)}this._internalRoot=Y}function ut(y){return!(!y||1!==y.nodeType&&9!==y.nodeType&&11!==y.nodeType&&(8!==y.nodeType||" react-mount-point-unstable "!==y.nodeValue))}function Ar(y,x,Y,be,Ke){var xt=Y._reactRootContainer;if(xt){var _n=xt._internalRoot;if("function"==typeof Ke){var In=Ke;Ke=function(){var Si=I(_n);In.call(Si)}}L_(x,_n,y,Ke)}else{if(xt=Y._reactRootContainer=function On(y,x){if(x||(x=!(!(x=y?9===y.nodeType?y.documentElement:y.firstChild:null)||1!==x.nodeType||!x.hasAttribute("data-reactroot"))),!x)for(var Y;Y=y.lastChild;)y.removeChild(Y);return new Oe(y,0,x?{hydrate:!0}:void 0)}(Y,be),_n=xt._internalRoot,"function"==typeof Ke){var vr=Ke;Ke=function(){var Si=I(_n);vr.call(Si)}}Xh(function(){L_(x,_n,y,Ke)})}return I(_n)}function ri(y,x){var Y=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ut(x))throw Error(u(200));return function cg(y,x,Y){var be=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:$e,key:null==be?null:""+be,children:y,containerInfo:x,implementation:Y}}(y,x,null,Y)}im=function(y,x,Y){var be=x.lanes;if(null!==y)if(y.memoizedProps!==x.pendingProps||Tu.current)xd=!0;else{if(!(Y&be)){switch(xd=!1,x.tag){case 3:vm(x),$t();break;case 5:Qu(x);break;case 1:za(x.type)&&ld(x);break;case 4:dl(x,x.stateNode.containerInfo);break;case 10:be=x.memoizedProps.value;var Ke=x.type._context;al(Wo,Ke._currentValue),Ke._currentValue=be;break;case 13:if(null!==x.memoizedState)return Y&x.child.childLanes?Ch(y,x,Y):(al(wa,1&wa.current),null!==(x=hf(y,x,Y))?x.sibling:null);al(wa,1&wa.current);break;case 19:if(be=0!=(Y&x.childLanes),64&y.flags){if(be)return Mp(y,x,Y);x.flags|=64}if(null!==(Ke=x.memoizedState)&&(Ke.rendering=null,Ke.tail=null,Ke.lastEffect=null),al(wa,wa.current),be)break;return null;case 23:case 24:return x.lanes=0,Q_(y,x,Y)}return hf(y,x,Y)}xd=!!(16384&y.flags)}else xd=!1;switch(x.lanes=0,x.tag){case 2:if(be=x.type,null!==y&&(y.alternate=null,x.alternate=null,x.flags|=2),y=x.pendingProps,Ke=Pu(x,xa.current),Ju(x,Y),Ke=bh(null,x,be,y,Ke,Y),x.flags|=1,"object"==typeof Ke&&null!==Ke&&"function"==typeof Ke.render&&void 0===Ke.$$typeof){if(x.tag=1,x.memoizedState=null,x.updateQueue=null,za(be)){var xt=!0;ld(x)}else xt=!1;x.memoizedState=null!=Ke.state?Ke.state:null,Ed(x);var _n=be.getDerivedStateFromProps;"function"==typeof _n&&Qe(x,be,_n,y),Ke.updater=Re,x.stateNode=Ke,Ke._reactInternals=x,Cn(x,be,y,Y),x=Th(null,x,be,!0,xt,Y)}else x.tag=0,bc(null,x,Ke,Y),x=x.child;return x;case 16:Ke=x.elementType;e:{switch(null!==y&&(y.alternate=null,x.alternate=null,x.flags|=2),y=x.pendingProps,Ke=(xt=Ke._init)(Ke._payload),x.type=Ke,xt=x.tag=function ym(y){if("function"==typeof y)return uh(y)?1:0;if(null!=y){if((y=y.$$typeof)===He)return 11;if(y===Pt)return 14}return 2}(Ke),y=zi(Ke,y),xt){case 0:x=X_(null,x,Ke,y,Y);break e;case 1:x=q_(null,x,Ke,y,Y);break e;case 11:x=J_(null,x,Ke,y,Y);break e;case 14:x=Gp(null,x,Ke,zi(Ke.type,y),be,Y);break e}throw Error(u(306,Ke,""))}return x;case 0:return Ke=x.pendingProps,X_(y,x,be=x.type,Ke=x.elementType===be?Ke:zi(be,Ke),Y);case 1:return Ke=x.pendingProps,q_(y,x,be=x.type,Ke=x.elementType===be?Ke:zi(be,Ke),Y);case 3:if(vm(x),be=x.updateQueue,null===y||null===be)throw Error(u(282));if(be=x.pendingProps,Ke=null!==(Ke=x.memoizedState)?Ke.element:null,h(y,x),ne(x,be,null,Y),(be=x.memoizedState.element)===Ke)$t(),x=hf(y,x,Y);else{if((xt=(Ke=x.stateNode).hydrate)&&(Gc=Nr(x.stateNode.containerInfo.firstChild),yc=x,xt=xc=!0),xt){if(null!=(y=Ke.mutableSourceEagerHydrationData))for(Ke=0;Ke<y.length;Ke+=2)(xt=y[Ke])._workInProgressVersionPrimary=y[Ke+1],yn.push(xt);for(Y=As(x,null,be,Y),x.child=Y;Y;)Y.flags=-3&Y.flags|1024,Y=Y.sibling}else bc(y,x,be,Y),$t();x=x.child}return x;case 5:return Qu(x),null===y&&ee(x),xt=null!==y?y.memoizedProps:null,_n=(Ke=x.pendingProps).children,zt(be=x.type,Ke)?_n=null:null!==xt&&zt(be,xt)&&(x.flags|=16),K_(y,x),bc(y,x,_n,Y),x.child;case 6:return null===y&&ee(x),null;case 13:return Ch(y,x,Y);case 4:return dl(x,x.stateNode.containerInfo),be=x.pendingProps,null===y?x.child=uo(x,null,be,Y):bc(y,x,be,Y),x.child;case 11:return Ke=x.pendingProps,J_(y,x,be=x.type,Ke=x.elementType===be?Ke:zi(be,Ke),Y);case 7:return bc(y,x,x.pendingProps,Y),x.child;case 8:case 12:return bc(y,x,x.pendingProps.children,Y),x.child;case 10:e:{be=x.type._context,_n=x.memoizedProps,xt=(Ke=x.pendingProps).value;var In=x.type._context;if(al(Wo,In._currentValue),In._currentValue=xt,null!==_n)if(0==(xt=zo(In=_n.value,xt)?0:0|("function"==typeof be._calculateChangedBits?be._calculateChangedBits(In,xt):1073741823))){if(_n.children===Ke.children&&!Tu.current){x=hf(y,x,Y);break e}}else for(null!==(In=x.child)&&(In.return=x);null!==In;){var vr=In.dependencies;if(null!==vr){_n=In.child;for(var Si=vr.firstContext;null!==Si;){if(Si.context===be&&Si.observedBits&xt){1===In.tag&&((Si=b(-1,Y&-Y)).tag=2,N(In,Si)),In.lanes|=Y,null!==(Si=In.alternate)&&(Si.lanes|=Y),cd(In.return,Y),vr.lanes|=Y;break}Si=Si.next}}else _n=10===In.tag&&In.type===x.type?null:In.child;if(null!==_n)_n.return=In;else for(_n=In;null!==_n;){if(_n===x){_n=null;break}if(null!==(In=_n.sibling)){In.return=_n.return,_n=In;break}_n=_n.return}In=_n}bc(y,x,Ke.children,Y),x=x.child}return x;case 9:return Ke=x.type,be=(xt=x.pendingProps).children,Ju(x,Y),be=be(Ke=tc(Ke,xt.unstable_observedBits)),x.flags|=1,bc(y,x,be,Y),x.child;case 14:return xt=zi(Ke=x.type,x.pendingProps),Gp(y,x,Ke,xt=zi(Ke.type,xt),be,Y);case 15:return a_(y,x,x.type,x.pendingProps,be,Y);case 17:return Ke=x.pendingProps,Ke=x.elementType===(be=x.type)?Ke:zi(be,Ke),null!==y&&(y.alternate=null,x.alternate=null,x.flags|=2),x.tag=1,za(be)?(y=!0,ld(x)):y=!1,Ju(x,Y),wt(x,be,Ke),Cn(x,be,Ke,Y),Th(null,x,be,!0,y,Y);case 19:return Mp(y,x,Y);case 23:case 24:return Q_(y,x,Y)}throw Error(u(156,x.tag))},Oe.prototype.render=function(y){L_(y,this._internalRoot,null,null)},Oe.prototype.unmount=function(){var y=this._internalRoot,x=y.containerInfo;L_(null,y,null,function(){x[Ul]=null})},Bn=function(y){13===y.tag&&(fp(y,4,Yc()),S(y,4))},ci=function(y){13===y.tag&&(fp(y,67108864,Yc()),S(y,67108864))},_o=function(y){if(13===y.tag){var x=Yc(),Y=sf(y);fp(y,Y,x),S(y,Y)}},go=function(y,x){return x()},gr=function(y,x,Y){switch(x){case"input":if(Wi(y,Y),x=Y.name,"radio"===Y.type&&null!=x){for(Y=y;Y.parentNode;)Y=Y.parentNode;for(Y=Y.querySelectorAll("input[name="+JSON.stringify(""+x)+'][type="radio"]'),x=0;x<Y.length;x++){var be=Y[x];if(be!==y&&be.form===y.form){var Ke=fu(be);if(!Ke)throw Error(u(90));Tt(be),Wi(be,Ke)}}}break;case"textarea":po(y,Y);break;case"select":null!=(x=Y.value)&&mr(y,!!Y.multiple,x,!1)}},nr=pp,Zt=function(y,x,Y,be,Ke){var xt=Ta;Ta|=4;try{return Ye(98,y.bind(null,x,Y,be,Ke))}finally{0===(Ta=xt)&&(Vf(),un())}},dn=function(){!(49&Ta)&&(function sh(){if(null!==kf){var y=kf;kf=null,y.forEach(function(x){x.expiredLanes|=24&x.pendingLanes,wd(x,Se())})}un()}(),_p())},Ge=function(y,x){var Y=Ta;Ta|=2;try{return y(x)}finally{0===(Ta=Y)&&(Vf(),un())}};var Di={Events:[wu,Rc,fu,tr,Zn,_p,{current:!1}]},Pi={findFiberByHostInstance:mu,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cs={bundleType:Pi.bundleType,version:Pi.version,rendererPackageName:Pi.rendererPackageName,rendererConfig:Pi.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:fe.ReactCurrentDispatcher,findHostInstanceByFiber:function(y){return null===(y=Vt(y))?null:y.stateNode},findFiberByHostInstance:Pi.findFiberByHostInstance||function z(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Yo=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Yo.isDisabled&&Yo.supportsFiber)try{Vu=Yo.inject(cs),ud=Yo}catch{}}C.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Di,C.createPortal=ri,C.findDOMNode=function(y){if(null==y)return null;if(1===y.nodeType)return y;var x=y._reactInternals;if(void 0===x)throw"function"==typeof y.render?Error(u(188)):Error(u(268,Object.keys(y)));return null===(y=Vt(x))?null:y.stateNode},C.flushSync=function(y,x){var Y=Ta;if(48&Y)return y(x);Ta|=1;try{if(y)return Ye(99,y.bind(null,x))}finally{Ta=Y,un()}},C.hydrate=function(y,x,Y){if(!ut(x))throw Error(u(200));return Ar(null,y,x,!0,Y)},C.render=function(y,x,Y){if(!ut(x))throw Error(u(200));return Ar(null,y,x,!1,Y)},C.unmountComponentAtNode=function(y){if(!ut(y))throw Error(u(40));return!!y._reactRootContainer&&(Xh(function(){Ar(null,null,y,!1,function(){y._reactRootContainer=null,y[Ul]=null})}),!0)},C.unstable_batchedUpdates=pp,C.unstable_createPortal=function(y,x){return ri(y,x,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},C.unstable_renderSubtreeIntoContainer=function(y,x,Y,be){if(!ut(Y))throw Error(u(200));if(null==y||void 0===y._reactInternals)throw Error(u(38));return Ar(y,x,Y,!1,be)},C.version="17.0.2"},88768:(E,C,s)=>{"use strict";(function r(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||"function"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(a){console.error(a)}})(),E.exports=s(85503)},14395:(E,C,s)=>{"use strict";var c,r=s(55004),a="<<anonymous>>",u=function(){invariant(!1,"ImmutablePropTypes type checking code is stripped in production.")};u.isRequired=u;var e=function(){return u};function M(ge,Et){return function T(ge,Et){return function m(ge){function Et(ct,qe,He,We,Le,Pt){for(var it=arguments.length,Xt=Array(it>6?it-6:0),cn=6;cn<it;cn++)Xt[cn-6]=arguments[cn];return Pt=Pt||He,We=We||a,null!=qe[He]?ge.apply(void 0,[qe,He,We,Le,Pt].concat(Xt)):ct?new Error("Required "+Le+" `"+Pt+"` was not specified in `"+We+"`."):void 0}var ot=Et.bind(null,!1);return ot.isRequired=Et.bind(null,!0),ot}(function ot(ct,qe,He,We,Le){var Pt=ct[qe];if(!Et(Pt)){var it=function f(ge){var Et=typeof ge;return Array.isArray(ge)?"array":ge instanceof RegExp?"object":ge instanceof r.Iterable?"Immutable."+ge.toSource().split(" ")[0]:Et}(Pt);return new Error("Invalid "+We+" `"+Le+"` of type `"+it+"` supplied to `"+He+"`, expected `"+ge+"`.")}return null})}("Iterable."+ge,function(ot){return r.Iterable.isIterable(ot)&&Et(ot)})}(c={listOf:e,mapOf:e,orderedMapOf:e,setOf:e,orderedSetOf:e,stackOf:e,iterableOf:e,recordOf:e,shape:e,contains:e,mapContains:e,orderedMapContains:e,list:u,map:u,orderedMap:u,set:u,orderedSet:u,stack:u,seq:u,record:u,iterable:u}).iterable.indexed=M("Indexed",r.Iterable.isIndexed),c.iterable.keyed=M("Keyed",r.Iterable.isKeyed),E.exports=c},1422:(E,C)=>{"use strict";var r=60103,a=60106,c=60107,u=60108,e=60114,f=60109,m=60110,T=60112,M=60113,w=60120,D=60115,U=60116;if("function"==typeof Symbol&&Symbol.for){var de=Symbol.for;r=de("react.element"),a=de("react.portal"),c=de("react.fragment"),u=de("react.strict_mode"),e=de("react.profiler"),f=de("react.provider"),m=de("react.context"),T=de("react.forward_ref"),M=de("react.suspense"),w=de("react.suspense_list"),D=de("react.memo"),U=de("react.lazy"),de("react.block"),de("react.server.block"),de("react.fundamental"),de("react.debug_trace_mode"),de("react.legacy_hidden")}C.isContextConsumer=function(He){return function V(He){if("object"==typeof He&&null!==He){var We=He.$$typeof;switch(We){case r:switch(He=He.type){case c:case e:case u:case M:case w:return He;default:switch(He=He&&He.$$typeof){case m:case T:case U:case D:case f:return He;default:return We}}case a:return We}}}(He)===m}},56261:(E,C,s)=>{"use strict";E.exports=s(1422)},55429:(E,C,s)=>{"use strict";var r=s(18228),a=60103,c=60106;C.Fragment=60107,C.StrictMode=60108,C.Profiler=60114;var u=60109,e=60110,f=60112;C.Suspense=60113;var m=60115,T=60116;if("function"==typeof Symbol&&Symbol.for){var M=Symbol.for;a=M("react.element"),c=M("react.portal"),C.Fragment=M("react.fragment"),C.StrictMode=M("react.strict_mode"),C.Profiler=M("react.profiler"),u=M("react.provider"),e=M("react.context"),f=M("react.forward_ref"),C.Suspense=M("react.suspense"),m=M("react.memo"),T=M("react.lazy")}var w="function"==typeof Symbol&&Symbol.iterator;function U(it){for(var Xt="https://reactjs.org/docs/error-decoder.html?invariant="+it,cn=1;cn<arguments.length;cn++)Xt+="&args[]="+encodeURIComponent(arguments[cn]);return"Minified React error #"+it+"; visit "+Xt+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var W={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},$={};function J(it,Xt,cn){this.props=it,this.context=Xt,this.refs=$,this.updater=cn||W}function F(){}function X(it,Xt,cn){this.props=it,this.context=Xt,this.refs=$,this.updater=cn||W}J.prototype.isReactComponent={},J.prototype.setState=function(it,Xt){if("object"!=typeof it&&"function"!=typeof it&&null!=it)throw Error(U(85));this.updater.enqueueSetState(this,it,Xt,"setState")},J.prototype.forceUpdate=function(it){this.updater.enqueueForceUpdate(this,it,"forceUpdate")},F.prototype=J.prototype;var de=X.prototype=new F;de.constructor=X,r(de,J.prototype),de.isPureReactComponent=!0;var V={current:null},ce=Object.prototype.hasOwnProperty,se={key:!0,ref:!0,__self:!0,__source:!0};function fe(it,Xt,cn){var pn,Rn={},At=null,qt=null;if(null!=Xt)for(pn in void 0!==Xt.ref&&(qt=Xt.ref),void 0!==Xt.key&&(At=""+Xt.key),Xt)ce.call(Xt,pn)&&!se.hasOwnProperty(pn)&&(Rn[pn]=Xt[pn]);var sn=arguments.length-2;if(1===sn)Rn.children=cn;else if(1<sn){for(var fn=Array(sn),xn=0;xn<sn;xn++)fn[xn]=arguments[xn+2];Rn.children=fn}if(it&&it.defaultProps)for(pn in sn=it.defaultProps)void 0===Rn[pn]&&(Rn[pn]=sn[pn]);return{$$typeof:a,type:it,key:At,ref:qt,props:Rn,_owner:V.current}}function $e(it){return"object"==typeof it&&null!==it&&it.$$typeof===a}var Et=/\/+/g;function ot(it,Xt){return"object"==typeof it&&null!==it&&null!=it.key?function ge(it){var Xt={"=":"=0",":":"=2"};return"$"+it.replace(/[=:]/g,function(cn){return Xt[cn]})}(""+it.key):Xt.toString(36)}function ct(it,Xt,cn,pn,Rn){var At=typeof it;("undefined"===At||"boolean"===At)&&(it=null);var qt=!1;if(null===it)qt=!0;else switch(At){case"string":case"number":qt=!0;break;case"object":switch(it.$$typeof){case a:case c:qt=!0}}if(qt)return Rn=Rn(qt=it),it=""===pn?"."+ot(qt,0):pn,Array.isArray(Rn)?(cn="",null!=it&&(cn=it.replace(Et,"$&/")+"/"),ct(Rn,Xt,cn,"",function(xn){return xn})):null!=Rn&&($e(Rn)&&(Rn=function Te(it,Xt){return{$$typeof:a,type:it.type,key:Xt,ref:it.ref,props:it.props,_owner:it._owner}}(Rn,cn+(!Rn.key||qt&&qt.key===Rn.key?"":(""+Rn.key).replace(Et,"$&/")+"/")+it)),Xt.push(Rn)),1;if(qt=0,pn=""===pn?".":pn+":",Array.isArray(it))for(var sn=0;sn<it.length;sn++){var fn=pn+ot(At=it[sn],sn);qt+=ct(At,Xt,cn,fn,Rn)}else if(fn=function D(it){return null===it||"object"!=typeof it?null:"function"==typeof(it=w&&it[w]||it["@@iterator"])?it:null}(it),"function"==typeof fn)for(it=fn.call(it),sn=0;!(At=it.next()).done;)qt+=ct(At=At.value,Xt,cn,fn=pn+ot(At,sn++),Rn);else if("object"===At)throw Xt=""+it,Error(U(31,"[object Object]"===Xt?"object with keys {"+Object.keys(it).join(", ")+"}":Xt));return qt}function qe(it,Xt,cn){if(null==it)return it;var pn=[],Rn=0;return ct(it,pn,"","",function(At){return Xt.call(cn,At,Rn++)}),pn}function He(it){if(-1===it._status){var Xt=it._result;Xt=Xt(),it._status=0,it._result=Xt,Xt.then(function(cn){0===it._status&&(cn=cn.default,it._status=1,it._result=cn)},function(cn){0===it._status&&(it._status=2,it._result=cn)})}if(1===it._status)return it._result;throw it._result}var We={current:null};function Le(){var it=We.current;if(null===it)throw Error(U(321));return it}var Pt={ReactCurrentDispatcher:We,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:V,IsSomeRendererActing:{current:!1},assign:r};C.Children={map:qe,forEach:function(it,Xt,cn){qe(it,function(){Xt.apply(this,arguments)},cn)},count:function(it){var Xt=0;return qe(it,function(){Xt++}),Xt},toArray:function(it){return qe(it,function(Xt){return Xt})||[]},only:function(it){if(!$e(it))throw Error(U(143));return it}},C.Component=J,C.PureComponent=X,C.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Pt,C.cloneElement=function(it,Xt,cn){if(null==it)throw Error(U(267,it));var pn=r({},it.props),Rn=it.key,At=it.ref,qt=it._owner;if(null!=Xt){if(void 0!==Xt.ref&&(At=Xt.ref,qt=V.current),void 0!==Xt.key&&(Rn=""+Xt.key),it.type&&it.type.defaultProps)var sn=it.type.defaultProps;for(fn in Xt)ce.call(Xt,fn)&&!se.hasOwnProperty(fn)&&(pn[fn]=void 0===Xt[fn]&&void 0!==sn?sn[fn]:Xt[fn])}var fn=arguments.length-2;if(1===fn)pn.children=cn;else if(1<fn){sn=Array(fn);for(var xn=0;xn<fn;xn++)sn[xn]=arguments[xn+2];pn.children=sn}return{$$typeof:a,type:it.type,key:Rn,ref:At,props:pn,_owner:qt}},C.createContext=function(it,Xt){return void 0===Xt&&(Xt=null),(it={$$typeof:e,_calculateChangedBits:Xt,_currentValue:it,_currentValue2:it,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:it},it.Consumer=it},C.createElement=fe,C.createFactory=function(it){var Xt=fe.bind(null,it);return Xt.type=it,Xt},C.createRef=function(){return{current:null}},C.forwardRef=function(it){return{$$typeof:f,render:it}},C.isValidElement=$e,C.lazy=function(it){return{$$typeof:T,_payload:{_status:-1,_result:it},_init:He}},C.memo=function(it,Xt){return{$$typeof:m,type:it,compare:void 0===Xt?null:Xt}},C.useCallback=function(it,Xt){return Le().useCallback(it,Xt)},C.useContext=function(it,Xt){return Le().useContext(it,Xt)},C.useDebugValue=function(){},C.useEffect=function(it,Xt){return Le().useEffect(it,Xt)},C.useImperativeHandle=function(it,Xt,cn){return Le().useImperativeHandle(it,Xt,cn)},C.useLayoutEffect=function(it,Xt){return Le().useLayoutEffect(it,Xt)},C.useMemo=function(it,Xt){return Le().useMemo(it,Xt)},C.useReducer=function(it,Xt,cn){return Le().useReducer(it,Xt,cn)},C.useRef=function(it){return Le().useRef(it)},C.useState=function(it){return Le().useState(it)},C.version="17.0.2"},78139:(E,C,s)=>{"use strict";E.exports=s(55429)},59882:(E,C,s)=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0});var a=function u(e){return e&&e.__esModule?e:{default:e}}(s(55004)),c=s(11715);C.default=function(e){var f=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.default.Map,m=Object.keys(e);return function(){var T=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f(),M=arguments[1];return T.withMutations(function(D){m.forEach(function(U){var J=(0,e[U])(D.get(U),M);(0,c.validateNextState)(J,U,M),D.set(U,J)})})}},E.exports=C.default},31208:(E,C,s)=>{"use strict";C.U=void 0;var c=function u(e){return e&&e.__esModule?e:{default:e}}(s(59882));C.U=c.default},46944:(E,C)=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0}),C.default=function(s){return s&&"@@redux/INIT"===s.type?"initialState argument passed to createStore":"previous state received by the reducer"},E.exports=C.default},99319:(E,C,s)=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0});var a=e(s(55004)),u=e(s(46944));function e(f){return f&&f.__esModule?f:{default:f}}C.default=function(f,m,T){var M=Object.keys(m);if(!M.length)return"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";var w=(0,u.default)(T);if(a.default.isImmutable?!a.default.isImmutable(f):!a.default.Iterable.isIterable(f))return"The "+w+' is of unexpected type. Expected argument to be an instance of Immutable.Collection or Immutable.Record with the following properties: "'+M.join('", "')+'".';var D=f.toSeq().keySeq().toArray().filter(function(U){return!m.hasOwnProperty(U)});return D.length>0?"Unexpected "+(1===D.length?"property":"properties")+' "'+D.join('", "')+'" found in '+w+'. Expected to find one of the known reducer property names instead: "'+M.join('", "')+'". Unexpected properties will be ignored.':null},E.exports=C.default},11715:(E,C,s)=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0}),C.validateNextState=C.getUnexpectedInvocationParameterMessage=C.getStateName=void 0;var a=m(s(46944)),u=m(s(99319)),f=m(s(95159));function m(T){return T&&T.__esModule?T:{default:T}}C.getStateName=a.default,C.getUnexpectedInvocationParameterMessage=u.default,C.validateNextState=f.default},95159:(E,C)=>{"use strict";Object.defineProperty(C,"__esModule",{value:!0}),C.default=function(s,r,a){if(void 0===s)throw new Error('Reducer "'+r+'" returned undefined when handling "'+a.type+'" action. To ignore an action, you must explicitly return the previous state.')},E.exports=C.default},88280:E=>{"use strict";var s,C="";E.exports=function r(a,c){if("string"!=typeof a)throw new TypeError("expected a string");if(1===c)return a;if(2===c)return a+a;var u=a.length*c;if(s!==a||typeof s>"u")s=a,C="";else if(C.length>=u)return C.substr(0,u);for(;u>C.length&&c>1;)1&c&&(C+=a),c>>=1,a+=a;return C=(C+=a).substr(0,u)}},90465:E=>{"use strict";E.exports=function(s,r){if(r=r.split(":")[0],!(s=+s))return!1;switch(r){case"http":case"ws":return 80!==s;case"https":case"wss":return 443!==s;case"ftp":return 21!==s;case"gopher":return 70!==s;case"file":return!1}return 0!==s}},66952:(E,C,s)=>{const r=s(18514),a=s(29394),c=s(87931),u=s(45899);E.exports=e=>{var m,T,f=0,M={type:a.ROOT,stack:[]},w=M,D=M.stack,U=[],W=fe=>{r.error(e,"Nothing to repeat at column "+(fe-1))},$=r.strToChars(e);for(m=$.length;f<m;)switch(T=$[f++],T){case"\\":switch(T=$[f++]){case"b":D.push(u.wordBoundary());break;case"B":D.push(u.nonWordBoundary());break;case"w":D.push(c.words());break;case"W":D.push(c.notWords());break;case"d":D.push(c.ints());break;case"D":D.push(c.notInts());break;case"s":D.push(c.whitespace());break;case"S":D.push(c.notWhitespace());break;default:/\d/.test(T)?D.push({type:a.REFERENCE,value:parseInt(T,10)}):D.push({type:a.CHAR,value:T.charCodeAt(0)})}break;case"^":D.push(u.begin());break;case"$":D.push(u.end());break;case"[":var J;"^"===$[f]?(J=!0,f++):J=!1;var F=r.tokenizeClass($.slice(f),e);f+=F[1],D.push({type:a.SET,set:F[0],not:J});break;case".":D.push(c.anyChar());break;case"(":var X={type:a.GROUP,stack:[],remember:!0};"?"===(T=$[f])&&(T=$[f+1],f+=2,"="===T?X.followedBy=!0:"!"===T?X.notFollowedBy=!0:":"!==T&&r.error(e,`Invalid group, character '${T}' after '?' at column ${f-1}`),X.remember=!1),D.push(X),U.push(w),w=X,D=X.stack;break;case")":0===U.length&&r.error(e,"Unmatched ) at column "+(f-1)),D=(w=U.pop()).options?w.options[w.options.length-1]:w.stack;break;case"|":w.options||(w.options=[w.stack],delete w.stack);var de=[];w.options.push(de),D=de;break;case"{":var ce,se,V=/^(\d+)(,(\d+)?)?\}/.exec($.slice(f));null!==V?(0===D.length&&W(f),ce=parseInt(V[1],10),se=V[2]?V[3]?parseInt(V[3],10):1/0:ce,f+=V[0].length,D.push({type:a.REPETITION,min:ce,max:se,value:D.pop()})):D.push({type:a.CHAR,value:123});break;case"?":0===D.length&&W(f),D.push({type:a.REPETITION,min:0,max:1,value:D.pop()});break;case"+":0===D.length&&W(f),D.push({type:a.REPETITION,min:1,max:1/0,value:D.pop()});break;case"*":0===D.length&&W(f),D.push({type:a.REPETITION,min:0,max:1/0,value:D.pop()});break;default:D.push({type:a.CHAR,value:T.charCodeAt(0)})}return 0!==U.length&&r.error(e,"Unterminated group"),M},E.exports.types=a},45899:(E,C,s)=>{const r=s(29394);C.wordBoundary=()=>({type:r.POSITION,value:"b"}),C.nonWordBoundary=()=>({type:r.POSITION,value:"B"}),C.begin=()=>({type:r.POSITION,value:"^"}),C.end=()=>({type:r.POSITION,value:"$"})},87931:(E,C,s)=>{const r=s(29394),a=()=>[{type:r.RANGE,from:48,to:57}],c=()=>[{type:r.CHAR,value:95},{type:r.RANGE,from:97,to:122},{type:r.RANGE,from:65,to:90}].concat(a()),u=()=>[{type:r.CHAR,value:9},{type:r.CHAR,value:10},{type:r.CHAR,value:11},{type:r.CHAR,value:12},{type:r.CHAR,value:13},{type:r.CHAR,value:32},{type:r.CHAR,value:160},{type:r.CHAR,value:5760},{type:r.RANGE,from:8192,to:8202},{type:r.CHAR,value:8232},{type:r.CHAR,value:8233},{type:r.CHAR,value:8239},{type:r.CHAR,value:8287},{type:r.CHAR,value:12288},{type:r.CHAR,value:65279}];C.words=()=>({type:r.SET,set:c(),not:!1}),C.notWords=()=>({type:r.SET,set:c(),not:!0}),C.ints=()=>({type:r.SET,set:a(),not:!1}),C.notInts=()=>({type:r.SET,set:a(),not:!0}),C.whitespace=()=>({type:r.SET,set:u(),not:!1}),C.notWhitespace=()=>({type:r.SET,set:u(),not:!0}),C.anyChar=()=>({type:r.SET,set:[{type:r.CHAR,value:10},{type:r.CHAR,value:13},{type:r.CHAR,value:8232},{type:r.CHAR,value:8233}],not:!0})},29394:E=>{E.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},18514:(E,C,s)=>{const r=s(29394),a=s(87931),u={0:0,t:9,n:10,v:11,f:12,r:13};C.strToChars=function(e){return e.replace(/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\]^?])|([0tnvfr]))/g,function(m,T,M,w,D,U,W,$){if(M)return m;var J=T?8:w?parseInt(w,16):D?parseInt(D,16):U?parseInt(U,8):W?"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?".indexOf(W):u[$],F=String.fromCharCode(J);return/[[\]{}^$.|?*+()]/.test(F)&&(F="\\"+F),F})},C.tokenizeClass=(e,f)=>{for(var M,w,m=[],T=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?([^])/g;null!=(M=T.exec(e));)if(M[1])m.push(a.words());else if(M[2])m.push(a.ints());else if(M[3])m.push(a.whitespace());else if(M[4])m.push(a.notWords());else if(M[5])m.push(a.notInts());else if(M[6])m.push(a.notWhitespace());else if(M[7])m.push({type:r.RANGE,from:(M[8]||M[9]).charCodeAt(0),to:M[10].charCodeAt(0)});else{if(!(w=M[12]))return[m,T.lastIndex];m.push({type:r.CHAR,value:w.charCodeAt(0)})}C.error(f,"Unterminated character class")},C.error=(e,f)=>{throw new SyntaxError("Invalid regular expression: /"+e+"/: "+f)}},26215:(E,C,s)=>{"use strict";s.d(C,{X:()=>c});var r=s(79765),a=s(77971);class c extends r.xQ{constructor(e){super(),this._value=e}get value(){return this.getValue()}_subscribe(e){const f=super._subscribe(e);return f&&!f.closed&&e.next(this._value),f}getValue(){if(this.hasError)throw this.thrownError;if(this.closed)throw new a.N;return this._value}next(e){super.next(this._value=e)}}},23098:(E,C,s)=>{"use strict";s.d(C,{P:()=>e});var r=s(59193),a=s(25917),c=s(40205);class e{constructor(m,T,M){this.kind=m,this.value=T,this.error=M,this.hasValue="N"===m}observe(m){switch(this.kind){case"N":return m.next&&m.next(this.value);case"E":return m.error&&m.error(this.error);case"C":return m.complete&&m.complete()}}do(m,T,M){switch(this.kind){case"N":return m&&m(this.value);case"E":return T&&T(this.error);case"C":return M&&M()}}accept(m,T,M){return m&&"function"==typeof m.next?this.observe(m):this.do(m,T,M)}toObservable(){switch(this.kind){case"N":return(0,a.of)(this.value);case"E":return(0,c._)(this.error);case"C":return(0,r.c)()}throw new Error("unexpected notification kind value")}static createNext(m){return typeof m<"u"?new e("N",m):e.undefinedValueNotification}static createError(m){return new e("E",void 0,m)}static createComplete(){return e.completeNotification}}e.completeNotification=new e("C"),e.undefinedValueNotification=new e("N",void 0)},70882:(E,C,s)=>{"use strict";s.d(C,{y:()=>M});var r=s(77393),c=s(29181),u=s(46490),f=s(16554),m=s(34022),T=s(82494);let M=(()=>{class D{constructor(W){this._isScalar=!1,W&&(this._subscribe=W)}lift(W){const $=new D;return $.source=this,$.operator=W,$}subscribe(W,$,J){const{operator:F}=this,X=function e(D,U,W){if(D){if(D instanceof r.L)return D;if(D[c.b])return D[c.b]()}return D||U||W?new r.L(D,U,W):new r.L(u.c)}(W,$,J);if(X.add(F?F.call(X,this.source):this.source||T.v.useDeprecatedSynchronousErrorHandling&&!X.syncErrorThrowable?this._subscribe(X):this._trySubscribe(X)),T.v.useDeprecatedSynchronousErrorHandling&&X.syncErrorThrowable&&(X.syncErrorThrowable=!1,X.syncErrorThrown))throw X.syncErrorValue;return X}_trySubscribe(W){try{return this._subscribe(W)}catch($){T.v.useDeprecatedSynchronousErrorHandling&&(W.syncErrorThrown=!0,W.syncErrorValue=$),function a(D){for(;D;){const{closed:U,destination:W,isStopped:$}=D;if(U||$)return!1;D=W&&W instanceof r.L?W:null}return!0}(W)?W.error($):console.warn($)}}forEach(W,$){return new($=w($))((J,F)=>{let X;X=this.subscribe(de=>{try{W(de)}catch(V){F(V),X&&X.unsubscribe()}},F,J)})}_subscribe(W){const{source:$}=this;return $&&$.subscribe(W)}[f.L](){return this}pipe(...W){return 0===W.length?this:(0,m.U)(W)(this)}toPromise(W){return new(W=w(W))(($,J)=>{let F;this.subscribe(X=>F=X,X=>J(X),()=>$(F))})}}return D.create=U=>new D(U),D})();function w(D){if(D||(D=T.v.Promise||Promise),!D)throw new Error("no Promise impl found");return D}},46490:(E,C,s)=>{"use strict";s.d(C,{c:()=>c});var r=s(82494),a=s(54449);const c={closed:!0,next(u){},error(u){if(r.v.useDeprecatedSynchronousErrorHandling)throw u;(0,a.z)(u)},complete(){}}},55197:(E,C,s)=>{"use strict";s.d(C,{L:()=>a});var r=s(77393);class a extends r.L{notifyNext(u,e,f,m,T){this.destination.next(e)}notifyError(u,e){this.destination.error(u)}notifyComplete(u){this.destination.complete()}}},7357:(E,C,s)=>{"use strict";s.d(C,{t:()=>U});var r=s(79765),a=s(23989),u=s(46493);const m=new class e extends u.v{}(class c extends a.o{constructor(J,F){super(J,F),this.scheduler=J,this.work=F}schedule(J,F=0){return F>0?super.schedule(J,F):(this.delay=F,this.state=J,this.scheduler.flush(this),this)}execute(J,F){return F>0||this.closed?super.execute(J,F):this._execute(J,F)}requestAsyncId(J,F,X=0){return null!==X&&X>0||null===X&&this.delay>0?super.requestAsyncId(J,F,X):J.flush(this)}});var T=s(13464),M=s(59746),w=s(77971),D=s(78858);class U extends r.xQ{constructor(J=Number.POSITIVE_INFINITY,F=Number.POSITIVE_INFINITY,X){super(),this.scheduler=X,this._events=[],this._infiniteTimeWindow=!1,this._bufferSize=J<1?1:J,this._windowTime=F<1?1:F,F===Number.POSITIVE_INFINITY?(this._infiniteTimeWindow=!0,this.next=this.nextInfiniteTimeWindow):this.next=this.nextTimeWindow}nextInfiniteTimeWindow(J){if(!this.isStopped){const F=this._events;F.push(J),F.length>this._bufferSize&&F.shift()}super.next(J)}nextTimeWindow(J){this.isStopped||(this._events.push(new W(this._getNow(),J)),this._trimBufferThenGetEvents()),super.next(J)}_subscribe(J){const F=this._infiniteTimeWindow,X=F?this._events:this._trimBufferThenGetEvents(),de=this.scheduler,V=X.length;let ce;if(this.closed)throw new w.N;if(this.isStopped||this.hasError?ce=T.w.EMPTY:(this.observers.push(J),ce=new D.W(this,J)),de&&J.add(J=new M.ht(J,de)),F)for(let se=0;se<V&&!J.closed;se++)J.next(X[se]);else for(let se=0;se<V&&!J.closed;se++)J.next(X[se].value);return this.hasError?J.error(this.thrownError):this.isStopped&&J.complete(),ce}_getNow(){return(this.scheduler||m).now()}_trimBufferThenGetEvents(){const J=this._getNow(),F=this._bufferSize,X=this._windowTime,de=this._events,V=de.length;let ce=0;for(;ce<V&&!(J-de[ce].time<X);)ce++;return V>F&&(ce=Math.max(ce,V-F)),ce>0&&de.splice(0,ce),de}}class W{constructor(J,F){this.time=J,this.value=F}}},79765:(E,C,s)=>{"use strict";s.d(C,{Yc:()=>m,xQ:()=>T});var r=s(70882),a=s(77393),c=s(13464),u=s(77971),e=s(78858),f=s(29181);class m extends a.L{constructor(D){super(D),this.destination=D}}let T=(()=>{class w extends r.y{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[f.b](){return new m(this)}lift(U){const W=new M(this,this);return W.operator=U,W}next(U){if(this.closed)throw new u.N;if(!this.isStopped){const{observers:W}=this,$=W.length,J=W.slice();for(let F=0;F<$;F++)J[F].next(U)}}error(U){if(this.closed)throw new u.N;this.hasError=!0,this.thrownError=U,this.isStopped=!0;const{observers:W}=this,$=W.length,J=W.slice();for(let F=0;F<$;F++)J[F].error(U);this.observers.length=0}complete(){if(this.closed)throw new u.N;this.isStopped=!0;const{observers:U}=this,W=U.length,$=U.slice();for(let J=0;J<W;J++)$[J].complete();this.observers.length=0}unsubscribe(){this.isStopped=!0,this.closed=!0,this.observers=null}_trySubscribe(U){if(this.closed)throw new u.N;return super._trySubscribe(U)}_subscribe(U){if(this.closed)throw new u.N;return this.hasError?(U.error(this.thrownError),c.w.EMPTY):this.isStopped?(U.complete(),c.w.EMPTY):(this.observers.push(U),new e.W(this,U))}asObservable(){const U=new r.y;return U.source=this,U}}return w.create=(D,U)=>new M(D,U),w})();class M extends T{constructor(D,U){super(),this.destination=D,this.source=U}next(D){const{destination:U}=this;U&&U.next&&U.next(D)}error(D){const{destination:U}=this;U&&U.error&&this.destination.error(D)}complete(){const{destination:D}=this;D&&D.complete&&this.destination.complete()}_subscribe(D){const{source:U}=this;return U?this.source.subscribe(D):c.w.EMPTY}}},78858:(E,C,s)=>{"use strict";s.d(C,{W:()=>a});var r=s(13464);class a extends r.w{constructor(u,e){super(),this.subject=u,this.subscriber=e,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const u=this.subject,e=u.observers;if(this.subject=null,!e||0===e.length||u.isStopped||u.closed)return;const f=e.indexOf(this.subscriber);-1!==f&&e.splice(f,1)}}},77393:(E,C,s)=>{"use strict";s.d(C,{L:()=>m});var r=s(69105),a=s(46490),c=s(13464),u=s(29181),e=s(82494),f=s(54449);class m extends c.w{constructor(w,D,U){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=a.c;break;case 1:if(!w){this.destination=a.c;break}if("object"==typeof w){w instanceof m?(this.syncErrorThrowable=w.syncErrorThrowable,this.destination=w,w.add(this)):(this.syncErrorThrowable=!0,this.destination=new T(this,w));break}default:this.syncErrorThrowable=!0,this.destination=new T(this,w,D,U)}}[u.b](){return this}static create(w,D,U){const W=new m(w,D,U);return W.syncErrorThrowable=!1,W}next(w){this.isStopped||this._next(w)}error(w){this.isStopped||(this.isStopped=!0,this._error(w))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(w){this.destination.next(w)}_error(w){this.destination.error(w),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:w}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=w,this}}class T extends m{constructor(w,D,U,W){super(),this._parentSubscriber=w;let $,J=this;(0,r.m)(D)?$=D:D&&($=D.next,U=D.error,W=D.complete,D!==a.c&&(J=Object.create(D),(0,r.m)(J.unsubscribe)&&this.add(J.unsubscribe.bind(J)),J.unsubscribe=this.unsubscribe.bind(this))),this._context=J,this._next=$,this._error=U,this._complete=W}next(w){if(!this.isStopped&&this._next){const{_parentSubscriber:D}=this;e.v.useDeprecatedSynchronousErrorHandling&&D.syncErrorThrowable?this.__tryOrSetError(D,this._next,w)&&this.unsubscribe():this.__tryOrUnsub(this._next,w)}}error(w){if(!this.isStopped){const{_parentSubscriber:D}=this,{useDeprecatedSynchronousErrorHandling:U}=e.v;if(this._error)U&&D.syncErrorThrowable?(this.__tryOrSetError(D,this._error,w),this.unsubscribe()):(this.__tryOrUnsub(this._error,w),this.unsubscribe());else if(D.syncErrorThrowable)U?(D.syncErrorValue=w,D.syncErrorThrown=!0):(0,f.z)(w),this.unsubscribe();else{if(this.unsubscribe(),U)throw w;(0,f.z)(w)}}}complete(){if(!this.isStopped){const{_parentSubscriber:w}=this;if(this._complete){const D=()=>this._complete.call(this._context);e.v.useDeprecatedSynchronousErrorHandling&&w.syncErrorThrowable?(this.__tryOrSetError(w,D),this.unsubscribe()):(this.__tryOrUnsub(D),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(w,D){try{w.call(this._context,D)}catch(U){if(this.unsubscribe(),e.v.useDeprecatedSynchronousErrorHandling)throw U;(0,f.z)(U)}}__tryOrSetError(w,D,U){if(!e.v.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{D.call(this._context,U)}catch(W){return e.v.useDeprecatedSynchronousErrorHandling?(w.syncErrorValue=W,w.syncErrorThrown=!0,!0):((0,f.z)(W),!0)}return!1}_unsubscribe(){const{_parentSubscriber:w}=this;this._context=null,this._parentSubscriber=null,w.unsubscribe()}}},13464:(E,C,s)=>{"use strict";s.d(C,{w:()=>f});var r=s(59796),a=s(81555),c=s(69105);const e=(()=>{function T(M){return Error.call(this),this.message=M?`${M.length} errors occurred during unsubscription:\n${M.map((w,D)=>`${D+1}) ${w.toString()}`).join("\n  ")}`:"",this.name="UnsubscriptionError",this.errors=M,this}return T.prototype=Object.create(Error.prototype),T})();class f{constructor(M){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,M&&(this._ctorUnsubscribe=!0,this._unsubscribe=M)}unsubscribe(){let M;if(this.closed)return;let{_parentOrParents:w,_ctorUnsubscribe:D,_unsubscribe:U,_subscriptions:W}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,w instanceof f)w.remove(this);else if(null!==w)for(let $=0;$<w.length;++$)w[$].remove(this);if((0,c.m)(U)){D&&(this._unsubscribe=void 0);try{U.call(this)}catch($){M=$ instanceof e?m($.errors):[$]}}if((0,r.k)(W)){let $=-1,J=W.length;for(;++$<J;){const F=W[$];if((0,a.K)(F))try{F.unsubscribe()}catch(X){M=M||[],X instanceof e?M=M.concat(m(X.errors)):M.push(X)}}}if(M)throw new e(M)}add(M){let w=M;if(!M)return f.EMPTY;switch(typeof M){case"function":w=new f(M);case"object":if(w===this||w.closed||"function"!=typeof w.unsubscribe)return w;if(this.closed)return w.unsubscribe(),w;if(!(w instanceof f)){const W=w;w=new f,w._subscriptions=[W]}break;default:throw new Error("unrecognized teardown "+M+" added to Subscription.")}let{_parentOrParents:D}=w;if(null===D)w._parentOrParents=this;else if(D instanceof f){if(D===this)return w;w._parentOrParents=[D,this]}else{if(-1!==D.indexOf(this))return w;D.push(this)}const U=this._subscriptions;return null===U?this._subscriptions=[w]:U.push(w),w}remove(M){const w=this._subscriptions;if(w){const D=w.indexOf(M);-1!==D&&w.splice(D,1)}}}var T;function m(T){return T.reduce((M,w)=>M.concat(w instanceof e?w.errors:w),[])}f.EMPTY=((T=new f).closed=!0,T)},82494:(E,C,s)=>{"use strict";s.d(C,{v:()=>a});let r=!1;const a={Promise:void 0,set useDeprecatedSynchronousErrorHandling(c){if(c){const u=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+u.stack)}else r&&console.log("RxJS: Back to a better error behavior. Thank you. <3");r=c},get useDeprecatedSynchronousErrorHandling(){return r}}},85345:(E,C,s)=>{"use strict";s.d(C,{Ds:()=>f,IY:()=>u,ft:()=>T});var r=s(77393),a=s(70882),c=s(19846);class u extends r.L{constructor(w){super(),this.parent=w}_next(w){this.parent.notifyNext(w)}_error(w){this.parent.notifyError(w),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class f extends r.L{notifyNext(w){this.destination.next(w)}notifyError(w){this.destination.error(w)}notifyComplete(){this.destination.complete()}}function T(M,w){if(!w.closed)return M instanceof a.y?M.subscribe(w):(0,c.s)(M)(w)}},52441:(E,C,s)=>{"use strict";s.d(C,{N:()=>f,c:()=>e});var r=s(79765),a=s(70882),c=s(13464),u=s(51307);class e extends a.y{constructor(D,U){super(),this.source=D,this.subjectFactory=U,this._refCount=0,this._isComplete=!1}_subscribe(D){return this.getSubject().subscribe(D)}getSubject(){const D=this._subject;return(!D||D.isStopped)&&(this._subject=this.subjectFactory()),this._subject}connect(){let D=this._connection;return D||(this._isComplete=!1,D=this._connection=new c.w,D.add(this.source.subscribe(new m(this.getSubject(),this))),D.closed&&(this._connection=null,D=c.w.EMPTY)),D}refCount(){return(0,u.x)()(this)}}const f=(()=>{const w=e.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:w._subscribe},_isComplete:{value:w._isComplete,writable:!0},getSubject:{value:w.getSubject},connect:{value:w.connect},refCount:{value:w.refCount}}})();class m extends r.Yc{constructor(D,U){super(D),this.connectable=U}_error(D){this._unsubscribe(),super._error(D)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const D=this.connectable;if(D){this.connectable=null;const U=D._connection;D._refCount=0,D._subject=null,D._connection=null,U&&U.unsubscribe()}}}},9112:(E,C,s)=>{"use strict";s.d(C,{aj:()=>m});var r=s(54869),a=s(59796),c=s(55197),u=s(53960),e=s(56693);const f={};function m(...w){let D,U;return(0,r.K)(w[w.length-1])&&(U=w.pop()),"function"==typeof w[w.length-1]&&(D=w.pop()),1===w.length&&(0,a.k)(w[0])&&(w=w[0]),(0,e.n)(w,U).lift(new T(D))}class T{constructor(D){this.resultSelector=D}call(D,U){return U.subscribe(new M(D,this.resultSelector))}}class M extends c.L{constructor(D,U){super(D),this.resultSelector=U,this.active=0,this.values=[],this.observables=[]}_next(D){this.values.push(f),this.observables.push(D)}_complete(){const D=this.observables,U=D.length;if(0===U)this.destination.complete();else{this.active=U,this.toRespond=U;for(let W=0;W<U;W++)this.add((0,u.D)(this,D[W],void 0,W))}}notifyComplete(D){0==(this.active-=1)&&this.destination.complete()}notifyNext(D,U,W){const $=this.values,F=this.toRespond?$[W]===f?--this.toRespond:this.toRespond:0;$[W]=U,0===F&&(this.resultSelector?this._tryResultSelector($):this.destination.next($.slice()))}_tryResultSelector(D){let U;try{U=this.resultSelector.apply(this,D)}catch(W){return void this.destination.error(W)}this.destination.next(U)}}},6481:(E,C,s)=>{"use strict";s.d(C,{z:()=>u});var r=s(25917),a=s(63282);function u(...e){return function c(){return(0,a.J)(1)}()((0,r.of)(...e))}},59193:(E,C,s)=>{"use strict";s.d(C,{E:()=>a,c:()=>c});var r=s(70882);const a=new r.y(e=>e.complete());function c(e){return e?function u(e){return new r.y(f=>e.schedule(()=>f.complete()))}(e):a}},35758:(E,C,s)=>{"use strict";s.d(C,{D:()=>f});var r=s(70882),a=s(59796),c=s(88002),u=s(81555),e=s(76666);function f(...T){if(1===T.length){const M=T[0];if((0,a.k)(M))return m(M,null);if((0,u.K)(M)&&Object.getPrototypeOf(M)===Object.prototype){const w=Object.keys(M);return m(w.map(D=>M[D]),w)}}if("function"==typeof T[T.length-1]){const M=T.pop();return m(T=1===T.length&&(0,a.k)(T[0])?T[0]:T,null).pipe((0,c.U)(w=>M(...w)))}return m(T,null)}function m(T,M){return new r.y(w=>{const D=T.length;if(0===D)return void w.complete();const U=new Array(D);let W=0,$=0;for(let J=0;J<D;J++){const F=(0,e.D)(T[J]);let X=!1;w.add(F.subscribe({next:de=>{X||(X=!0,$++),U[J]=de},error:de=>w.error(de),complete:()=>{W++,(W===D||!X)&&($===D&&w.next(M?M.reduce((de,V,ce)=>(de[V]=U[ce],de),{}):U),w.complete())}}))}})}},76666:(E,C,s)=>{"use strict";s.d(C,{D:()=>J});var r=s(70882),a=s(19846),c=s(13464),u=s(16554),m=s(94087),T=s(20377),D=s(44072),U=s(69489);function J(F,X){return X?function $(F,X){if(null!=F){if(function w(F){return F&&"function"==typeof F[u.L]}(F))return function e(F,X){return new r.y(de=>{const V=new c.w;return V.add(X.schedule(()=>{const ce=F[u.L]();V.add(ce.subscribe({next(se){V.add(X.schedule(()=>de.next(se)))},error(se){V.add(X.schedule(()=>de.error(se)))},complete(){V.add(X.schedule(()=>de.complete()))}}))})),V})}(F,X);if((0,D.t)(F))return function f(F,X){return new r.y(de=>{const V=new c.w;return V.add(X.schedule(()=>F.then(ce=>{V.add(X.schedule(()=>{de.next(ce),V.add(X.schedule(()=>de.complete()))}))},ce=>{V.add(X.schedule(()=>de.error(ce)))}))),V})}(F,X);if((0,U.z)(F))return(0,m.r)(F,X);if(function W(F){return F&&"function"==typeof F[T.hZ]}(F)||"string"==typeof F)return function M(F,X){if(!F)throw new Error("Iterable cannot be null");return new r.y(de=>{const V=new c.w;let ce;return V.add(()=>{ce&&"function"==typeof ce.return&&ce.return()}),V.add(X.schedule(()=>{ce=F[T.hZ](),V.add(X.schedule(function(){if(de.closed)return;let se,fe;try{const Te=ce.next();se=Te.value,fe=Te.done}catch(Te){return void de.error(Te)}fe?de.complete():(de.next(se),this.schedule())}))})),V})}(F,X)}throw new TypeError((null!==F&&typeof F||F)+" is not observable")}(F,X):F instanceof r.y?F:new r.y((0,a.s)(F))}},56693:(E,C,s)=>{"use strict";s.d(C,{n:()=>u});var r=s(70882),a=s(55015),c=s(94087);function u(e,f){return f?(0,c.r)(e,f):new r.y((0,a.V)(e))}},22759:(E,C,s)=>{"use strict";s.d(C,{R:()=>f});var r=s(70882),a=s(59796),c=s(69105),u=s(88002);function f(D,U,W,$){return(0,c.m)(W)&&($=W,W=void 0),$?f(D,U,W).pipe((0,u.U)(J=>(0,a.k)(J)?$(...J):$(J))):new r.y(J=>{m(D,U,function F(X){J.next(arguments.length>1?Array.prototype.slice.call(arguments):X)},J,W)})}function m(D,U,W,$,J){let F;if(function w(D){return D&&"function"==typeof D.addEventListener&&"function"==typeof D.removeEventListener}(D)){const X=D;D.addEventListener(U,W,J),F=()=>X.removeEventListener(U,W,J)}else if(function M(D){return D&&"function"==typeof D.on&&"function"==typeof D.off}(D)){const X=D;D.on(U,W),F=()=>X.off(U,W)}else if(function T(D){return D&&"function"==typeof D.addListener&&"function"==typeof D.removeListener}(D)){const X=D;D.addListener(U,W),F=()=>X.removeListener(U,W)}else{if(!D||!D.length)throw new TypeError("Invalid event target");for(let X=0,de=D.length;X<de;X++)m(D[X],U,W,$,J)}$.add(F)}},66682:(E,C,s)=>{"use strict";s.d(C,{T:()=>e});var r=s(70882),a=s(54869),c=s(63282),u=s(56693);function e(...f){let m=Number.POSITIVE_INFINITY,T=null,M=f[f.length-1];return(0,a.K)(M)?(T=f.pop(),f.length>1&&"number"==typeof f[f.length-1]&&(m=f.pop())):"number"==typeof M&&(m=f.pop()),null===T&&1===f.length&&f[0]instanceof r.y?f[0]:(0,c.J)(m)((0,u.n)(f,T))}},17757:(E,C,s)=>{"use strict";s.d(C,{C:()=>c});var r=s(70882),a=s(98640);const c=new r.y(a.Z)},25917:(E,C,s)=>{"use strict";s.d(C,{of:()=>u});var r=s(54869),a=s(56693),c=s(94087);function u(...e){let f=e[e.length-1];return(0,r.K)(f)?(e.pop(),(0,c.r)(e,f)):(0,a.n)(e)}},40205:(E,C,s)=>{"use strict";s.d(C,{_:()=>a});var r=s(70882);function a(u,e){return new r.y(e?f=>e.schedule(c,0,{error:u,subscriber:f}):f=>f.error(u))}function c({error:u,subscriber:e}){e.error(u)}},46797:(E,C,s)=>{"use strict";s.d(C,{H:()=>e});var r=s(70882),a=s(33637),c=s(26561),u=s(54869);function e(m=0,T,M){let w=-1;return(0,c.k)(T)?w=Number(T)<1?1:Number(T):(0,u.K)(T)&&(M=T),(0,u.K)(M)||(M=a.P),new r.y(D=>{const U=(0,c.k)(m)?m:+m-M.now();return M.schedule(f,U,{index:0,period:w,subscriber:D})})}function f(m){const{index:T,period:M,subscriber:w}=m;if(w.next(T),!w.closed){if(-1===M)return w.complete();m.index=T+1,this.schedule(m,M)}}},5304:(E,C,s)=>{"use strict";s.d(C,{K:()=>a});var r=s(85345);function a(e){return function(m){const T=new c(e),M=m.lift(T);return T.caught=M}}class c{constructor(f){this.selector=f}call(f,m){return m.subscribe(new u(f,this.selector,this.caught))}}class u extends r.Ds{constructor(f,m,T){super(f),this.selector=m,this.caught=T}error(f){if(!this.isStopped){let m;try{m=this.selector(f,this.caught)}catch(w){return void super.error(w)}this._unsubscribeAndRecycle();const T=new r.IY(this);this.add(T);const M=(0,r.ft)(m,T);M!==T&&this.add(M)}}}},94612:(E,C,s)=>{"use strict";s.d(C,{b:()=>a});var r=s(19773);function a(c,u){return(0,r.zg)(c,u,1)}},54395:(E,C,s)=>{"use strict";s.d(C,{b:()=>c});var r=s(77393),a=s(33637);function c(m,T=a.P){return M=>M.lift(new u(m,T))}class u{constructor(T,M){this.dueTime=T,this.scheduler=M}call(T,M){return M.subscribe(new e(T,this.dueTime,this.scheduler))}}class e extends r.L{constructor(T,M,w){super(T),this.dueTime=M,this.scheduler=w,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}_next(T){this.clearDebounce(),this.lastValue=T,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(f,this.dueTime,this))}_complete(){this.debouncedNext(),this.destination.complete()}debouncedNext(){if(this.clearDebounce(),this.hasValue){const{lastValue:T}=this;this.lastValue=null,this.hasValue=!1,this.destination.next(T)}}clearDebounce(){const T=this.debouncedSubscription;null!==T&&(this.remove(T),T.unsubscribe(),this.debouncedSubscription=null)}}function f(m){m.debouncedNext()}},95242:(E,C,s)=>{"use strict";s.d(C,{d:()=>a});var r=s(77393);function a(e=null){return f=>f.lift(new c(e))}class c{constructor(f){this.defaultValue=f}call(f,m){return m.subscribe(new u(f,this.defaultValue))}}class u extends r.L{constructor(f,m){super(f),this.defaultValue=m,this.isEmpty=!0}_next(f){this.isEmpty=!1,this.destination.next(f)}_complete(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()}}},67460:(E,C,s)=>{"use strict";s.d(C,{g:()=>e});var r=s(33637),c=s(77393),u=s(23098);function e(M,w=r.P){const U=function a(M){return M instanceof Date&&!isNaN(+M)}(M)?+M-w.now():Math.abs(M);return W=>W.lift(new f(U,w))}class f{constructor(w,D){this.delay=w,this.scheduler=D}call(w,D){return D.subscribe(new m(w,this.delay,this.scheduler))}}class m extends c.L{constructor(w,D,U){super(w),this.delay=D,this.scheduler=U,this.queue=[],this.active=!1,this.errored=!1}static dispatch(w){const D=w.source,U=D.queue,W=w.scheduler,$=w.destination;for(;U.length>0&&U[0].time-W.now()<=0;)U.shift().notification.observe($);if(U.length>0){const J=Math.max(0,U[0].time-W.now());this.schedule(w,J)}else this.unsubscribe(),D.active=!1}_schedule(w){this.active=!0,this.destination.add(w.schedule(m.dispatch,this.delay,{source:this,destination:this.destination,scheduler:w}))}scheduleNotification(w){if(!0===this.errored)return;const D=this.scheduler,U=new T(D.now()+this.delay,w);this.queue.push(U),!1===this.active&&this._schedule(D)}_next(w){this.scheduleNotification(u.P.createNext(w))}_error(w){this.errored=!0,this.queue=[],this.destination.error(w),this.unsubscribe()}_complete(){this.scheduleNotification(u.P.createComplete()),this.unsubscribe()}}class T{constructor(w,D){this.time=w,this.notification=D}}},87519:(E,C,s)=>{"use strict";s.d(C,{x:()=>a});var r=s(77393);function a(e,f){return m=>m.lift(new c(e,f))}class c{constructor(f,m){this.compare=f,this.keySelector=m}call(f,m){return m.subscribe(new u(f,this.compare,this.keySelector))}}class u extends r.L{constructor(f,m,T){super(f),this.keySelector=T,this.hasKey=!1,"function"==typeof m&&(this.compare=m)}compare(f,m){return f===m}_next(f){let m;try{const{keySelector:M}=this;m=M?M(f):f}catch(M){return this.destination.error(M)}let T=!1;if(this.hasKey)try{const{compare:M}=this;T=M(this.key,m)}catch(M){return this.destination.error(M)}else this.hasKey=!0;T||(this.key=m,this.destination.next(f))}}},45435:(E,C,s)=>{"use strict";s.d(C,{h:()=>a});var r=s(77393);function a(e,f){return function(T){return T.lift(new c(e,f))}}class c{constructor(f,m){this.predicate=f,this.thisArg=m}call(f,m){return m.subscribe(new u(f,this.predicate,this.thisArg))}}class u extends r.L{constructor(f,m,T){super(f),this.predicate=m,this.thisArg=T,this.count=0}_next(f){let m;try{m=this.predicate.call(this.thisArg,f,this.count++)}catch(T){return void this.destination.error(T)}m&&this.destination.next(f)}}},68939:(E,C,s)=>{"use strict";s.d(C,{x:()=>c});var r=s(77393),a=s(13464);function c(f){return m=>m.lift(new u(f))}class u{constructor(m){this.callback=m}call(m,T){return T.subscribe(new e(m,this.callback))}}class e extends r.L{constructor(m,T){super(m),this.add(new a.w(T))}}},28049:(E,C,s)=>{"use strict";s.d(C,{P:()=>m});var r=s(13410),a=s(45435),c=s(15257),u=s(95242),e=s(44635),f=s(54487);function m(T,M){const w=arguments.length>=2;return D=>D.pipe(T?(0,a.h)((U,W)=>T(U,W,D)):f.y,(0,c.q)(1),w?(0,u.d)(M):(0,e.T)(()=>new r.K))}},12627:(E,C,s)=>{"use strict";s.d(C,{Z:()=>m});var r=s(13410),a=s(45435),c=s(548),u=s(44635),e=s(95242),f=s(54487);function m(T,M){const w=arguments.length>=2;return D=>D.pipe(T?(0,a.h)((U,W)=>T(U,W,D)):f.y,(0,c.h)(1),w?(0,e.d)(M):(0,u.T)(()=>new r.K))}},88002:(E,C,s)=>{"use strict";s.d(C,{U:()=>a});var r=s(77393);function a(e,f){return function(T){if("function"!=typeof e)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return T.lift(new c(e,f))}}class c{constructor(f,m){this.project=f,this.thisArg=m}call(f,m){return m.subscribe(new u(f,this.project,this.thisArg))}}class u extends r.L{constructor(f,m,T){super(f),this.project=m,this.count=0,this.thisArg=T||this}_next(f){let m;try{m=this.project.call(this.thisArg,f,this.count++)}catch(T){return void this.destination.error(T)}this.destination.next(m)}}},96736:(E,C,s)=>{"use strict";s.d(C,{h:()=>a});var r=s(77393);function a(e){return f=>f.lift(new c(e))}class c{constructor(f){this.value=f}call(f,m){return m.subscribe(new u(f,this.value))}}class u extends r.L{constructor(f,m){super(f),this.value=m}_next(f){this.destination.next(this.value)}}},63282:(E,C,s)=>{"use strict";s.d(C,{J:()=>c});var r=s(19773),a=s(54487);function c(u=Number.POSITIVE_INFINITY){return(0,r.zg)(a.y,u)}},19773:(E,C,s)=>{"use strict";s.d(C,{zg:()=>u});var r=s(88002),a=s(76666),c=s(85345);function u(T,M,w=Number.POSITIVE_INFINITY){return"function"==typeof M?D=>D.pipe(u((U,W)=>(0,a.D)(T(U,W)).pipe((0,r.U)(($,J)=>M(U,$,W,J))),w)):("number"==typeof M&&(w=M),D=>D.lift(new e(T,w)))}class e{constructor(M,w=Number.POSITIVE_INFINITY){this.project=M,this.concurrent=w}call(M,w){return w.subscribe(new f(M,this.project,this.concurrent))}}class f extends c.Ds{constructor(M,w,D=Number.POSITIVE_INFINITY){super(M),this.project=w,this.concurrent=D,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(M){this.active<this.concurrent?this._tryNext(M):this.buffer.push(M)}_tryNext(M){let w;const D=this.index++;try{w=this.project(M,D)}catch(U){return void this.destination.error(U)}this.active++,this._innerSub(w)}_innerSub(M){const w=new c.IY(this),D=this.destination;D.add(w);const U=(0,c.ft)(M,w);U!==w&&D.add(U)}_complete(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()}notifyNext(M){this.destination.next(M)}notifyComplete(){const M=this.buffer;this.active--,M.length>0?this._next(M.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}},94458:(E,C,s)=>{"use strict";s.d(C,{O:()=>a});var r=s(52441);function a(u,e){return function(m){let T;if(T="function"==typeof u?u:function(){return u},"function"==typeof e)return m.lift(new c(T,e));const M=Object.create(m,r.N);return M.source=m,M.subjectFactory=T,M}}class c{constructor(e,f){this.subjectFactory=e,this.selector=f}call(e,f){const{selector:m}=this,T=this.subjectFactory(),M=m(T).subscribe(e);return M.add(f.subscribe(T)),M}}},59746:(E,C,s)=>{"use strict";s.d(C,{QV:()=>c,ht:()=>e});var r=s(77393),a=s(23098);function c(m,T=0){return function(w){return w.lift(new u(m,T))}}class u{constructor(T,M=0){this.scheduler=T,this.delay=M}call(T,M){return M.subscribe(new e(T,this.scheduler,this.delay))}}class e extends r.L{constructor(T,M,w=0){super(T),this.scheduler=M,this.delay=w}static dispatch(T){const{notification:M,destination:w}=T;M.observe(w),this.unsubscribe()}scheduleMessage(T){this.destination.add(this.scheduler.schedule(e.dispatch,this.delay,new f(T,this.destination)))}_next(T){this.scheduleMessage(a.P.createNext(T))}_error(T){this.scheduleMessage(a.P.createError(T)),this.unsubscribe()}_complete(){this.scheduleMessage(a.P.createComplete()),this.unsubscribe()}}class f{constructor(T,M){this.notification=T,this.destination=M}}},51307:(E,C,s)=>{"use strict";s.d(C,{x:()=>a});var r=s(77393);function a(){return function(f){return f.lift(new c(f))}}class c{constructor(f){this.connectable=f}call(f,m){const{connectable:T}=this;T._refCount++;const M=new u(f,T),w=m.subscribe(M);return M.closed||(M.connection=T.connect()),w}}class u extends r.L{constructor(f,m){super(f),this.connectable=m}_unsubscribe(){const{connectable:f}=this;if(!f)return void(this.connection=null);this.connectable=null;const m=f._refCount;if(m<=0)return void(this.connection=null);if(f._refCount=m-1,m>1)return void(this.connection=null);const{connection:T}=this,M=f._connection;this.connection=null,M&&(!T||M===T)&&M.unsubscribe()}}},42145:(E,C,s)=>{"use strict";s.d(C,{R:()=>a});var r=s(77393);function a(e,f){let m=!1;return arguments.length>=2&&(m=!0),function(M){return M.lift(new c(e,f,m))}}class c{constructor(f,m,T=!1){this.accumulator=f,this.seed=m,this.hasSeed=T}call(f,m){return m.subscribe(new u(f,this.accumulator,this.seed,this.hasSeed))}}class u extends r.L{constructor(f,m,T,M){super(f),this.accumulator=m,this._seed=T,this.hasSeed=M,this.index=0}get seed(){return this._seed}set seed(f){this.hasSeed=!0,this._seed=f}_next(f){if(this.hasSeed)return this._tryNext(f);this.seed=f,this.destination.next(f)}_tryNext(f){const m=this.index++;let T;try{T=this.accumulator(this.seed,f,m)}catch(M){this.destination.error(M)}this.seed=T,this.destination.next(T)}}},78345:(E,C,s)=>{"use strict";s.d(C,{B:()=>e});var r=s(94458),a=s(51307),c=s(79765);function u(){return new c.xQ}function e(){return f=>(0,a.x)()((0,r.O)(u)(f))}},47349:(E,C,s)=>{"use strict";s.d(C,{d:()=>a});var r=s(7357);function a(u,e,f){let m;return m=u&&"object"==typeof u?u:{bufferSize:u,windowTime:e,refCount:!1,scheduler:f},T=>T.lift(function c({bufferSize:u=Number.POSITIVE_INFINITY,windowTime:e=Number.POSITIVE_INFINITY,refCount:f,scheduler:m}){let T,w,M=0,D=!1,U=!1;return function($){let J;M++,!T||D?(D=!1,T=new r.t(u,e,m),J=T.subscribe(this),w=$.subscribe({next(F){T.next(F)},error(F){D=!0,T.error(F)},complete(){U=!0,w=void 0,T.complete()}})):J=T.subscribe(this),this.add(()=>{M--,J.unsubscribe(),w&&!U&&f&&0===M&&(w.unsubscribe(),w=void 0,T=void 0)})}}(m))}},39761:(E,C,s)=>{"use strict";s.d(C,{O:()=>c});var r=s(6481),a=s(54869);function c(...u){const e=u[u.length-1];return(0,a.K)(e)?(u.pop(),f=>(0,r.z)(u,f,e)):f=>(0,r.z)(u,f)}},43190:(E,C,s)=>{"use strict";s.d(C,{w:()=>u});var r=s(88002),a=s(76666),c=s(85345);function u(m,T){return"function"==typeof T?M=>M.pipe(u((w,D)=>(0,a.D)(m(w,D)).pipe((0,r.U)((U,W)=>T(w,U,D,W))))):M=>M.lift(new e(m))}class e{constructor(T){this.project=T}call(T,M){return M.subscribe(new f(T,this.project))}}class f extends c.Ds{constructor(T,M){super(T),this.project=M,this.index=0}_next(T){let M;const w=this.index++;try{M=this.project(T,w)}catch(D){return void this.destination.error(D)}this._innerSub(M)}_innerSub(T){const M=this.innerSubscription;M&&M.unsubscribe();const w=new c.IY(this),D=this.destination;D.add(w),this.innerSubscription=(0,c.ft)(T,w),this.innerSubscription!==w&&D.add(this.innerSubscription)}_complete(){const{innerSubscription:T}=this;(!T||T.closed)&&super._complete(),this.unsubscribe()}_unsubscribe(){this.innerSubscription=void 0}notifyComplete(){this.innerSubscription=void 0,this.isStopped&&super._complete()}notifyNext(T){this.destination.next(T)}}},15257:(E,C,s)=>{"use strict";s.d(C,{q:()=>u});var r=s(77393),a=s(7108),c=s(59193);function u(m){return T=>0===m?(0,c.c)():T.lift(new e(m))}class e{constructor(T){if(this.total=T,this.total<0)throw new a.W}call(T,M){return M.subscribe(new f(T,this.total))}}class f extends r.L{constructor(T,M){super(T),this.total=M,this.count=0}_next(T){const M=this.total,w=++this.count;w<=M&&(this.destination.next(T),w===M&&(this.destination.complete(),this.unsubscribe()))}}},548:(E,C,s)=>{"use strict";s.d(C,{h:()=>u});var r=s(77393),a=s(7108),c=s(59193);function u(m){return function(M){return 0===m?(0,c.c)():M.lift(new e(m))}}class e{constructor(T){if(this.total=T,this.total<0)throw new a.W}call(T,M){return M.subscribe(new f(T,this.total))}}class f extends r.L{constructor(T,M){super(T),this.total=M,this.ring=new Array,this.count=0}_next(T){const M=this.ring,w=this.total,D=this.count++;M.length<w?M.push(T):M[D%w]=T}_complete(){const T=this.destination;let M=this.count;if(M>0){const w=this.count>=this.total?this.total:this.count,D=this.ring;for(let U=0;U<w;U++){const W=M++%w;T.next(D[W])}}T.complete()}}},46782:(E,C,s)=>{"use strict";s.d(C,{R:()=>a});var r=s(85345);function a(e){return f=>f.lift(new c(e))}class c{constructor(f){this.notifier=f}call(f,m){const T=new u(f),M=(0,r.ft)(this.notifier,new r.IY(T));return M&&!T.seenValue?(T.add(M),m.subscribe(T)):T}}class u extends r.Ds{constructor(f){super(f),this.seenValue=!1}notifyNext(){this.seenValue=!0,this.complete()}notifyComplete(){}}},68307:(E,C,s)=>{"use strict";s.d(C,{b:()=>u});var r=s(77393),a=s(98640),c=s(69105);function u(m,T,M){return function(D){return D.lift(new e(m,T,M))}}class e{constructor(T,M,w){this.nextOrObserver=T,this.error=M,this.complete=w}call(T,M){return M.subscribe(new f(T,this.nextOrObserver,this.error,this.complete))}}class f extends r.L{constructor(T,M,w,D){super(T),this._tapNext=a.Z,this._tapError=a.Z,this._tapComplete=a.Z,this._tapError=w||a.Z,this._tapComplete=D||a.Z,(0,c.m)(M)?(this._context=this,this._tapNext=M):M&&(this._context=M,this._tapNext=M.next||a.Z,this._tapError=M.error||a.Z,this._tapComplete=M.complete||a.Z)}_next(T){try{this._tapNext.call(this._context,T)}catch(M){return void this.destination.error(M)}this.destination.next(T)}_error(T){try{this._tapError.call(this._context,T)}catch(M){return void this.destination.error(M)}this.destination.error(T)}_complete(){try{this._tapComplete.call(this._context)}catch(T){return void this.destination.error(T)}return this.destination.complete()}}},44635:(E,C,s)=>{"use strict";s.d(C,{T:()=>c});var r=s(13410),a=s(77393);function c(m=f){return T=>T.lift(new u(m))}class u{constructor(T){this.errorFactory=T}call(T,M){return M.subscribe(new e(T,this.errorFactory))}}class e extends a.L{constructor(T,M){super(T),this.errorFactory=M,this.hasValue=!1}_next(T){this.hasValue=!0,this.destination.next(T)}_complete(){if(this.hasValue)return this.destination.complete();{let T;try{T=this.errorFactory()}catch(M){T=M}this.destination.error(T)}}}function f(){return new r.K}},46240:(E,C,s)=>{"use strict";s.d(C,{q:()=>m});var r=s(42145),a=s(548),c=s(95242),u=s(34022);function f(T,M,w){return 0===w?[M]:(T.push(M),T)}function m(){return function e(T,M){return arguments.length>=2?function(D){return(0,u.z)((0,r.R)(T,M),(0,a.h)(1),(0,c.d)(M))(D)}:function(D){return(0,u.z)((0,r.R)((U,W,$)=>T(U,W,$+1)),(0,a.h)(1))(D)}}(f,[])}},94087:(E,C,s)=>{"use strict";s.d(C,{r:()=>c});var r=s(70882),a=s(13464);function c(u,e){return new r.y(f=>{const m=new a.w;let T=0;return m.add(e.schedule(function(){T!==u.length?(f.next(u[T++]),f.closed||m.add(this.schedule())):f.complete()})),m})}},23989:(E,C,s)=>{"use strict";s.d(C,{o:()=>c});var r=s(13464);class a extends r.w{constructor(e,f){super()}schedule(e,f=0){return this}}class c extends a{constructor(e,f){super(e,f),this.scheduler=e,this.work=f,this.pending=!1}schedule(e,f=0){if(this.closed)return this;this.state=e;const m=this.id,T=this.scheduler;return null!=m&&(this.id=this.recycleAsyncId(T,m,f)),this.pending=!0,this.delay=f,this.id=this.id||this.requestAsyncId(T,this.id,f),this}requestAsyncId(e,f,m=0){return setInterval(e.flush.bind(e,this),m)}recycleAsyncId(e,f,m=0){if(null!==m&&this.delay===m&&!1===this.pending)return f;clearInterval(f)}execute(e,f){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const m=this._execute(e,f);if(m)return m;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(e,f){let T,m=!1;try{this.work(e)}catch(M){m=!0,T=!!M&&M||new Error(M)}if(m)return this.unsubscribe(),T}_unsubscribe(){const e=this.id,f=this.scheduler,m=f.actions,T=m.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==T&&m.splice(T,1),null!=e&&(this.id=this.recycleAsyncId(f,e,null)),this.delay=null}}},46493:(E,C,s)=>{"use strict";s.d(C,{v:()=>a});let r=(()=>{class c{constructor(e,f=c.now){this.SchedulerAction=e,this.now=f}schedule(e,f=0,m){return new this.SchedulerAction(this,e).schedule(m,f)}}return c.now=()=>Date.now(),c})();class a extends r{constructor(u,e=r.now){super(u,()=>a.delegate&&a.delegate!==this?a.delegate.now():e()),this.actions=[],this.active=!1,this.scheduled=void 0}schedule(u,e=0,f){return a.delegate&&a.delegate!==this?a.delegate.schedule(u,e,f):super.schedule(u,e,f)}flush(u){const{actions:e}=this;if(this.active)return void e.push(u);let f;this.active=!0;do{if(f=u.execute(u.state,u.delay))break}while(u=e.shift());if(this.active=!1,f){for(;u=e.shift();)u.unsubscribe();throw f}}}},33637:(E,C,s)=>{"use strict";s.d(C,{P:()=>u,z:()=>c});var r=s(23989);const c=new(s(46493).v)(r.o),u=c},20377:(E,C,s)=>{"use strict";s.d(C,{hZ:()=>a});const a=function r(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},16554:(E,C,s)=>{"use strict";s.d(C,{L:()=>r});const r="function"==typeof Symbol&&Symbol.observable||"@@observable"},29181:(E,C,s)=>{"use strict";s.d(C,{b:()=>r});const r="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random()},7108:(E,C,s)=>{"use strict";s.d(C,{W:()=>a});const a=(()=>{function c(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return c.prototype=Object.create(Error.prototype),c})()},13410:(E,C,s)=>{"use strict";s.d(C,{K:()=>a});const a=(()=>{function c(){return Error.call(this),this.message="no elements in sequence",this.name="EmptyError",this}return c.prototype=Object.create(Error.prototype),c})()},77971:(E,C,s)=>{"use strict";s.d(C,{N:()=>a});const a=(()=>{function c(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return c.prototype=Object.create(Error.prototype),c})()},54449:(E,C,s)=>{"use strict";function r(a){setTimeout(()=>{throw a},0)}s.d(C,{z:()=>r})},54487:(E,C,s)=>{"use strict";function r(a){return a}s.d(C,{y:()=>r})},59796:(E,C,s)=>{"use strict";s.d(C,{k:()=>r});const r=Array.isArray||(a=>a&&"number"==typeof a.length)},69489:(E,C,s)=>{"use strict";s.d(C,{z:()=>r});const r=a=>a&&"number"==typeof a.length&&"function"!=typeof a},69105:(E,C,s)=>{"use strict";function r(a){return"function"==typeof a}s.d(C,{m:()=>r})},26561:(E,C,s)=>{"use strict";s.d(C,{k:()=>a});var r=s(59796);function a(c){return!(0,r.k)(c)&&c-parseFloat(c)+1>=0}},81555:(E,C,s)=>{"use strict";function r(a){return null!==a&&"object"==typeof a}s.d(C,{K:()=>r})},44072:(E,C,s)=>{"use strict";function r(a){return!!a&&"function"!=typeof a.subscribe&&"function"==typeof a.then}s.d(C,{t:()=>r})},54869:(E,C,s)=>{"use strict";function r(a){return a&&"function"==typeof a.schedule}s.d(C,{K:()=>r})},98640:(E,C,s)=>{"use strict";function r(){}s.d(C,{Z:()=>r})},34022:(E,C,s)=>{"use strict";s.d(C,{U:()=>c,z:()=>a});var r=s(54487);function a(...u){return c(u)}function c(u){return 0===u.length?r.y:1===u.length?u[0]:function(f){return u.reduce((m,T)=>T(m),f)}}},19846:(E,C,s)=>{"use strict";s.d(C,{s:()=>D});var r=s(55015),a=s(54449),u=s(20377),f=s(16554),T=s(69489),M=s(44072),w=s(81555);const D=U=>{if(U&&"function"==typeof U[f.L])return(U=>W=>{const $=U[f.L]();if("function"!=typeof $.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return $.subscribe(W)})(U);if((0,T.z)(U))return(0,r.V)(U);if((0,M.t)(U))return(U=>W=>(U.then($=>{W.closed||(W.next($),W.complete())},$=>W.error($)).then(null,a.z),W))(U);if(U&&"function"==typeof U[u.hZ])return(U=>W=>{const $=U[u.hZ]();for(;;){let J;try{J=$.next()}catch(F){return W.error(F),W}if(J.done){W.complete();break}if(W.next(J.value),W.closed)break}return"function"==typeof $.return&&W.add(()=>{$.return&&$.return()}),W})(U);{const $=`You provided ${(0,w.K)(U)?"an invalid object":`'${U}'`} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`;throw new TypeError($)}}},55015:(E,C,s)=>{"use strict";s.d(C,{V:()=>r});const r=a=>c=>{for(let u=0,e=a.length;u<e&&!c.closed;u++)c.next(a[u]);c.complete()}},53960:(E,C,s)=>{"use strict";s.d(C,{D:()=>e});var r=s(77393);class a extends r.L{constructor(m,T,M){super(),this.parent=m,this.outerValue=T,this.outerIndex=M,this.index=0}_next(m){this.parent.notifyNext(this.outerValue,m,this.outerIndex,this.index++,this)}_error(m){this.parent.notifyError(m,this),this.unsubscribe()}_complete(){this.parent.notifyComplete(this),this.unsubscribe()}}var c=s(19846),u=s(70882);function e(f,m,T,M,w=new a(f,T,M)){if(!w.closed)return m instanceof u.y?m.subscribe(w):(0,c.s)(m)(w)}},59771:(E,C)=>{"use strict";var s,r,a,c;if("object"==typeof performance&&"function"==typeof performance.now){var u=performance;C.unstable_now=function(){return u.now()}}else{var e=Date,f=e.now();C.unstable_now=function(){return e.now()-f}}if(typeof window>"u"||"function"!=typeof MessageChannel){var m=null,T=null,M=function(){if(null!==m)try{var cn=C.unstable_now();m(!0,cn),m=null}catch(pn){throw setTimeout(M,0),pn}};s=function(cn){null!==m?setTimeout(s,0,cn):(m=cn,setTimeout(M,0))},r=function(cn,pn){T=setTimeout(cn,pn)},a=function(){clearTimeout(T)},C.unstable_shouldYield=function(){return!1},c=C.unstable_forceFrameRate=function(){}}else{var w=window.setTimeout,D=window.clearTimeout;if(typeof console<"u"){var U=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof U&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var W=!1,$=null,J=-1,F=5,X=0;C.unstable_shouldYield=function(){return C.unstable_now()>=X},c=function(){},C.unstable_forceFrameRate=function(cn){0>cn||125<cn?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):F=0<cn?Math.floor(1e3/cn):5};var de=new MessageChannel,V=de.port2;de.port1.onmessage=function(){if(null!==$){var cn=C.unstable_now();X=cn+F;try{$(!0,cn)?V.postMessage(null):(W=!1,$=null)}catch(pn){throw V.postMessage(null),pn}}else W=!1},s=function(cn){$=cn,W||(W=!0,V.postMessage(null))},r=function(cn,pn){J=w(function(){cn(C.unstable_now())},pn)},a=function(){D(J),J=-1}}function ce(cn,pn){var Rn=cn.length;cn.push(pn);e:for(;;){var At=Rn-1>>>1,qt=cn[At];if(!(void 0!==qt&&0<Te(qt,pn)))break e;cn[At]=pn,cn[Rn]=qt,Rn=At}}function se(cn){return void 0===(cn=cn[0])?null:cn}function fe(cn){var pn=cn[0];if(void 0!==pn){var Rn=cn.pop();if(Rn!==pn){cn[0]=Rn;e:for(var At=0,qt=cn.length;At<qt;){var sn=2*(At+1)-1,fn=cn[sn],xn=sn+1,Kr=cn[xn];if(void 0!==fn&&0>Te(fn,Rn))void 0!==Kr&&0>Te(Kr,fn)?(cn[At]=Kr,cn[xn]=Rn,At=xn):(cn[At]=fn,cn[sn]=Rn,At=sn);else{if(!(void 0!==Kr&&0>Te(Kr,Rn)))break e;cn[At]=Kr,cn[xn]=Rn,At=xn}}}return pn}return null}function Te(cn,pn){var Rn=cn.sortIndex-pn.sortIndex;return 0!==Rn?Rn:cn.id-pn.id}var $e=[],ge=[],Et=1,ot=null,ct=3,qe=!1,He=!1,We=!1;function Le(cn){for(var pn=se(ge);null!==pn;){if(null===pn.callback)fe(ge);else{if(!(pn.startTime<=cn))break;fe(ge),pn.sortIndex=pn.expirationTime,ce($e,pn)}pn=se(ge)}}function Pt(cn){if(We=!1,Le(cn),!He)if(null!==se($e))He=!0,s(it);else{var pn=se(ge);null!==pn&&r(Pt,pn.startTime-cn)}}function it(cn,pn){He=!1,We&&(We=!1,a()),qe=!0;var Rn=ct;try{for(Le(pn),ot=se($e);null!==ot&&(!(ot.expirationTime>pn)||cn&&!C.unstable_shouldYield());){var At=ot.callback;if("function"==typeof At){ot.callback=null,ct=ot.priorityLevel;var qt=At(ot.expirationTime<=pn);pn=C.unstable_now(),"function"==typeof qt?ot.callback=qt:ot===se($e)&&fe($e),Le(pn)}else fe($e);ot=se($e)}if(null!==ot)var sn=!0;else{var fn=se(ge);null!==fn&&r(Pt,fn.startTime-pn),sn=!1}return sn}finally{ot=null,ct=Rn,qe=!1}}var Xt=c;C.unstable_IdlePriority=5,C.unstable_ImmediatePriority=1,C.unstable_LowPriority=4,C.unstable_NormalPriority=3,C.unstable_Profiling=null,C.unstable_UserBlockingPriority=2,C.unstable_cancelCallback=function(cn){cn.callback=null},C.unstable_continueExecution=function(){He||qe||(He=!0,s(it))},C.unstable_getCurrentPriorityLevel=function(){return ct},C.unstable_getFirstCallbackNode=function(){return se($e)},C.unstable_next=function(cn){switch(ct){case 1:case 2:case 3:var pn=3;break;default:pn=ct}var Rn=ct;ct=pn;try{return cn()}finally{ct=Rn}},C.unstable_pauseExecution=function(){},C.unstable_requestPaint=Xt,C.unstable_runWithPriority=function(cn,pn){switch(cn){case 1:case 2:case 3:case 4:case 5:break;default:cn=3}var Rn=ct;ct=cn;try{return pn()}finally{ct=Rn}},C.unstable_scheduleCallback=function(cn,pn,Rn){var At=C.unstable_now();switch(Rn="object"==typeof Rn&&null!==Rn&&"number"==typeof(Rn=Rn.delay)&&0<Rn?At+Rn:At,cn){case 1:var qt=-1;break;case 2:qt=250;break;case 5:qt=1073741823;break;case 4:qt=1e4;break;default:qt=5e3}return cn={id:Et++,callback:pn,priorityLevel:cn,startTime:Rn,expirationTime:qt=Rn+qt,sortIndex:-1},Rn>At?(cn.sortIndex=Rn,ce(ge,cn),null===se($e)&&cn===se(ge)&&(We?a():We=!0,r(Pt,Rn-At))):(cn.sortIndex=qt,ce($e,cn),He||qe||(He=!0,s(it))),cn},C.unstable_wrapCallback=function(cn){var pn=ct;return function(){var Rn=ct;ct=pn;try{return cn.apply(this,arguments)}finally{ct=Rn}}}},88712:(E,C,s)=>{"use strict";E.exports=s(59771)},11144:(E,C,s)=>{"use strict";var r=s(18540),a=s(19568),c=s(81380),u=r("%TypeError%"),e=r("%WeakMap%",!0),f=r("%Map%",!0),m=a("WeakMap.prototype.get",!0),T=a("WeakMap.prototype.set",!0),M=a("WeakMap.prototype.has",!0),w=a("Map.prototype.get",!0),D=a("Map.prototype.set",!0),U=a("Map.prototype.has",!0),W=function(X,de){for(var ce,V=X;null!==(ce=V.next);V=ce)if(ce.key===de)return V.next=ce.next,ce.next=X.next,X.next=ce,ce};E.exports=function(){var de,V,ce,se={assert:function(fe){if(!se.has(fe))throw new u("Side channel does not contain "+c(fe))},get:function(fe){if(e&&fe&&("object"==typeof fe||"function"==typeof fe)){if(de)return m(de,fe)}else if(f){if(V)return w(V,fe)}else if(ce)return function(X,de){var V=W(X,de);return V&&V.value}(ce,fe)},has:function(fe){if(e&&fe&&("object"==typeof fe||"function"==typeof fe)){if(de)return M(de,fe)}else if(f){if(V)return U(V,fe)}else if(ce)return function(X,de){return!!W(X,de)}(ce,fe);return!1},set:function(fe,Te){e&&fe&&("object"==typeof fe||"function"==typeof fe)?(de||(de=new e),T(de,fe,Te)):f?(V||(V=new f),D(V,fe,Te)):(ce||(ce={key:{},next:null}),function(X,de,V){var ce=W(X,de);ce?ce.value=V:X.next={key:de,next:X.next,value:V}}(ce,fe,Te))}};return se}},85770:(E,C,s)=>{"use strict";s.d(C,{M:()=>qn,t:()=>gr}),s(16331),s(79913),s(89001),s(54891),s(4071),s(11125),s(30419),s(39575);var xn,M=s(6123),w=s.n(M),D=s(86906),U=s.n(D),W=s(89159),$=s.n(W),J=[],de="ResizeObserver loop completed with undelivered notifications.",ce=(()=>{return(Pn=ce||(ce={})).BORDER_BOX="border-box",Pn.CONTENT_BOX="content-box",Pn.DEVICE_PIXEL_CONTENT_BOX="device-pixel-content-box",ce;var Pn})(),se=function(Pn){return Object.freeze(Pn)},fe=function Pn(_r,Pr){this.inlineSize=_r,this.blockSize=Pr,se(this)},Te=function(){function Pn(_r,Pr,tr,Zn){return this.x=_r,this.y=Pr,this.width=tr,this.height=Zn,this.top=this.y,this.left=this.x,this.bottom=this.top+this.height,this.right=this.left+this.width,se(this)}return Pn.prototype.toJSON=function(){var _r=this;return{x:_r.x,y:_r.y,top:_r.top,right:_r.right,bottom:_r.bottom,left:_r.left,width:_r.width,height:_r.height}},Pn.fromRect=function(_r){return new Pn(_r.x,_r.y,_r.width,_r.height)},Pn}(),$e=function(Pn){return Pn instanceof SVGElement&&"getBBox"in Pn},ge=function(Pn){if($e(Pn)){var _r=Pn.getBBox();return!_r.width&&!_r.height}return!(Pn.offsetWidth||Pn.offsetHeight||Pn.getClientRects().length)},Et=function(Pn){var _r;if(Pn instanceof Element)return!0;var Pr=null===(_r=Pn?.ownerDocument)||void 0===_r?void 0:_r.defaultView;return!!(Pr&&Pn instanceof Pr.Element)},ct=typeof window<"u"?window:{},qe=new WeakMap,He=/auto|scroll/,We=/^tb|vertical/,Le=/msie|trident/i.test(ct.navigator&&ct.navigator.userAgent),Pt=function(Pn){return parseFloat(Pn||"0")},it=function(Pn,_r,Pr){return void 0===Pn&&(Pn=0),void 0===_r&&(_r=0),void 0===Pr&&(Pr=!1),new fe((Pr?_r:Pn)||0,(Pr?Pn:_r)||0)},Xt=se({devicePixelContentBoxSize:it(),borderBoxSize:it(),contentBoxSize:it(),contentRect:new Te(0,0,0,0)}),cn=function(Pn,_r){if(void 0===_r&&(_r=!1),qe.has(Pn)&&!_r)return qe.get(Pn);if(ge(Pn))return qe.set(Pn,Xt),Xt;var Pr=getComputedStyle(Pn),tr=$e(Pn)&&Pn.ownerSVGElement&&Pn.getBBox(),Zn=!Le&&"border-box"===Pr.boxSizing,nr=We.test(Pr.writingMode||""),Zt=!tr&&He.test(Pr.overflowY||""),dn=!tr&&He.test(Pr.overflowX||""),Ge=tr?0:Pt(Pr.paddingTop),Ot=tr?0:Pt(Pr.paddingRight),mn=tr?0:Pt(Pr.paddingBottom),wr=tr?0:Pt(Pr.paddingLeft),Ti=tr?0:Pt(Pr.borderTopWidth),Ci=tr?0:Pt(Pr.borderRightWidth),Ai=tr?0:Pt(Pr.borderBottomWidth),_s=wr+Ot,dr=Ge+mn,Ni=(tr?0:Pt(Pr.borderLeftWidth))+Ci,ti=Ti+Ai,Vr=dn?Pn.offsetHeight-ti-Pn.clientHeight:0,wi=Zt?Pn.offsetWidth-Ni-Pn.clientWidth:0,ji=Zn?_s+Ni:0,Vi=Zn?dr+ti:0,Po=tr?tr.width:Pt(Pr.width)-ji-wi,ko=tr?tr.height:Pt(Pr.height)-Vi-Vr,Ir=Po+_s+wi+Ni,ro=ko+dr+Vr+ti,Vt=se({devicePixelContentBoxSize:it(Math.round(Po*devicePixelRatio),Math.round(ko*devicePixelRatio),nr),borderBoxSize:it(Ir,ro,nr),contentBoxSize:it(Po,ko,nr),contentRect:new Te(wr,Ge,Po,ko)});return qe.set(Pn,Vt),Vt},pn=function(Pn,_r,Pr){var tr=cn(Pn,Pr),Zn=tr.borderBoxSize,nr=tr.contentBoxSize,Zt=tr.devicePixelContentBoxSize;switch(_r){case ce.DEVICE_PIXEL_CONTENT_BOX:return Zt;case ce.BORDER_BOX:return Zn;default:return nr}},Rn=function Pn(_r){var Pr=cn(_r);this.target=_r,this.contentRect=Pr.contentRect,this.borderBoxSize=se([Pr.borderBoxSize]),this.contentBoxSize=se([Pr.contentBoxSize]),this.devicePixelContentBoxSize=se([Pr.devicePixelContentBoxSize])},At=function(Pn){if(ge(Pn))return 1/0;for(var _r=0,Pr=Pn.parentNode;Pr;)_r+=1,Pr=Pr.parentNode;return _r},qt=function(){var Pn=1/0,_r=[];J.forEach(function(Zt){if(0!==Zt.activeTargets.length){var dn=[];Zt.activeTargets.forEach(function(Ot){var mn=new Rn(Ot.target),wr=At(Ot.target);dn.push(mn),Ot.lastReportedSize=pn(Ot.target,Ot.observedBox),wr<Pn&&(Pn=wr)}),_r.push(function(){Zt.callback.call(Zt.observer,dn,Zt.observer)}),Zt.activeTargets.splice(0,Zt.activeTargets.length)}});for(var Pr=0,tr=_r;Pr<tr.length;Pr++)(0,tr[Pr])();return Pn},sn=function(Pn){J.forEach(function(Pr){Pr.activeTargets.splice(0,Pr.activeTargets.length),Pr.skippedTargets.splice(0,Pr.skippedTargets.length),Pr.observationTargets.forEach(function(Zn){Zn.isActive()&&(At(Zn.target)>Pn?Pr.activeTargets.push(Zn):Pr.skippedTargets.push(Zn))})})},Kr=[],Qr=0,ht={attributes:!0,characterData:!0,childList:!0,subtree:!0},Wt=["resize","load","transitionend","animationend","animationstart","animationiteration","keyup","keydown","mouseup","mousedown","mouseover","mouseout","blur","focus"],Tt=function(Pn){return void 0===Pn&&(Pn=0),Date.now()+Pn},wn=!1,hr=new(function(){function Pn(){var _r=this;this.stopped=!0,this.listener=function(){return _r.schedule()}}return Pn.prototype.run=function(_r){var Pr=this;if(void 0===_r&&(_r=250),!wn){wn=!0;var tr=Tt(_r);!function(Pn){!function(Pn){if(!xn){var _r=0,Pr=document.createTextNode("");new MutationObserver(function(){return Kr.splice(0).forEach(function(Pn){return Pn()})}).observe(Pr,{characterData:!0}),xn=function(){Pr.textContent="".concat(_r?_r--:_r++)}}Kr.push(Pn),xn()}(function(){requestAnimationFrame(Pn)})}(function(){var Zn=!1;try{Zn=function(){var Pn=0;for(sn(Pn);J.some(function(Pn){return Pn.activeTargets.length>0});)Pn=qt(),sn(Pn);return J.some(function(Pn){return Pn.skippedTargets.length>0})&&function(){var Pn;"function"==typeof ErrorEvent?Pn=new ErrorEvent("error",{message:de}):((Pn=document.createEvent("Event")).initEvent("error",!1,!1),Pn.message=de),window.dispatchEvent(Pn)}(),Pn>0}()}finally{if(wn=!1,_r=tr-Tt(),!Qr)return;Zn?Pr.run(1e3):_r>0?Pr.run(_r):Pr.start()}})}},Pn.prototype.schedule=function(){this.stop(),this.run()},Pn.prototype.observe=function(){var _r=this,Pr=function(){return _r.observer&&_r.observer.observe(document.body,ht)};document.body?Pr():ct.addEventListener("DOMContentLoaded",Pr)},Pn.prototype.start=function(){var _r=this;this.stopped&&(this.stopped=!1,this.observer=new MutationObserver(this.listener),this.observe(),Wt.forEach(function(Pr){return ct.addEventListener(Pr,_r.listener,!0)}))},Pn.prototype.stop=function(){var _r=this;this.stopped||(this.observer&&this.observer.disconnect(),Wt.forEach(function(Pr){return ct.removeEventListener(Pr,_r.listener,!0)}),this.stopped=!0)},Pn}()),Oi=function(Pn){!Qr&&Pn>0&&hr.start(),!(Qr+=Pn)&&hr.stop()},so=function(){function Pn(_r,Pr){this.target=_r,this.observedBox=Pr||ce.CONTENT_BOX,this.lastReportedSize={inlineSize:0,blockSize:0}}return Pn.prototype.isActive=function(){var _r=pn(this.target,this.observedBox,!0);return function(Pn){return!$e(Pn)&&!function(Pn){switch(Pn.tagName){case"INPUT":if("image"!==Pn.type)break;case"VIDEO":case"AUDIO":case"EMBED":case"OBJECT":case"CANVAS":case"IFRAME":case"IMG":return!0}return!1}(Pn)&&"inline"===getComputedStyle(Pn).display}(this.target)&&(this.lastReportedSize=_r),this.lastReportedSize.inlineSize!==_r.inlineSize||this.lastReportedSize.blockSize!==_r.blockSize},Pn}(),kr=function Pn(_r,Pr){this.activeTargets=[],this.skippedTargets=[],this.observationTargets=[],this.observer=_r,this.callback=Pr},Ei=new WeakMap,ii=function(Pn,_r){for(var Pr=0;Pr<Pn.length;Pr+=1)if(Pn[Pr].target===_r)return Pr;return-1},mr=function(){function Pn(){}return Pn.connect=function(_r,Pr){var tr=new kr(_r,Pr);Ei.set(_r,tr)},Pn.observe=function(_r,Pr,tr){var Zn=Ei.get(_r),nr=0===Zn.observationTargets.length;ii(Zn.observationTargets,Pr)<0&&(nr&&J.push(Zn),Zn.observationTargets.push(new so(Pr,tr&&tr.box)),Oi(1),hr.schedule())},Pn.unobserve=function(_r,Pr){var tr=Ei.get(_r),Zn=ii(tr.observationTargets,Pr);Zn>=0&&(1===tr.observationTargets.length&&J.splice(J.indexOf(tr),1),tr.observationTargets.splice(Zn,1),Oi(-1))},Pn.disconnect=function(_r){var Pr=this,tr=Ei.get(_r);tr.observationTargets.slice().forEach(function(Zn){return Pr.unobserve(_r,Zn.target)}),tr.activeTargets.splice(0,tr.activeTargets.length)},Pn}(),pr=function(){function Pn(_r){if(0===arguments.length)throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");if("function"!=typeof _r)throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");mr.connect(this,_r)}return Pn.prototype.observe=function(_r,Pr){if(0===arguments.length)throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Et(_r))throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");mr.observe(this,_r,Pr)},Pn.prototype.unobserve=function(_r){if(0===arguments.length)throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Et(_r))throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");mr.unobserve(this,_r)},Pn.prototype.disconnect=function(){mr.disconnect(this)},Pn.toString=function(){return"function ResizeObserver () { [polyfill code] }"},Pn}(),Eo=s(72318),po=s.n(Eo);function jt(Pn){return Pn&&Pn.ownerDocument&&Pn.ownerDocument.defaultView?Pn.ownerDocument.defaultView:window}function Fe(Pn){return Pn&&Pn.ownerDocument?Pn.ownerDocument:document}s(90808),s(27119),s(28036),s(9579),s(2082);var Ie=null,et=null;function ze(Pn){if(null===Ie){var _r=Fe(Pn);if(typeof _r>"u")return Ie=0;var Pr=_r.body,tr=_r.createElement("div");tr.classList.add("simplebar-hide-scrollbar"),Pr.appendChild(tr);var Zn=tr.getBoundingClientRect().right;Pr.removeChild(tr),Ie=Zn}return Ie}po()&&window.addEventListener("resize",function(){et!==window.devicePixelRatio&&(et=window.devicePixelRatio,Ie=null)});var an=function(){function Pn(Pr,tr){var Zn=this;this.onScroll=function(){var nr=jt(Zn.el);Zn.scrollXTicking||(nr.requestAnimationFrame(Zn.scrollX),Zn.scrollXTicking=!0),Zn.scrollYTicking||(nr.requestAnimationFrame(Zn.scrollY),Zn.scrollYTicking=!0)},this.scrollX=function(){Zn.axis.x.isOverflowing&&(Zn.showScrollbar("x"),Zn.positionScrollbar("x")),Zn.scrollXTicking=!1},this.scrollY=function(){Zn.axis.y.isOverflowing&&(Zn.showScrollbar("y"),Zn.positionScrollbar("y")),Zn.scrollYTicking=!1},this.onMouseEnter=function(){Zn.showScrollbar("x"),Zn.showScrollbar("y")},this.onMouseMove=function(nr){Zn.mouseX=nr.clientX,Zn.mouseY=nr.clientY,(Zn.axis.x.isOverflowing||Zn.axis.x.forceVisible)&&Zn.onMouseMoveForAxis("x"),(Zn.axis.y.isOverflowing||Zn.axis.y.forceVisible)&&Zn.onMouseMoveForAxis("y")},this.onMouseLeave=function(){Zn.onMouseMove.cancel(),(Zn.axis.x.isOverflowing||Zn.axis.x.forceVisible)&&Zn.onMouseLeaveForAxis("x"),(Zn.axis.y.isOverflowing||Zn.axis.y.forceVisible)&&Zn.onMouseLeaveForAxis("y"),Zn.mouseX=-1,Zn.mouseY=-1},this.onWindowResize=function(){Zn.scrollbarWidth=Zn.getScrollbarWidth(),Zn.hideNativeScrollbar()},this.hideScrollbars=function(){Zn.axis.x.track.rect=Zn.axis.x.track.el.getBoundingClientRect(),Zn.axis.y.track.rect=Zn.axis.y.track.el.getBoundingClientRect(),Zn.isWithinBounds(Zn.axis.y.track.rect)||(Zn.axis.y.scrollbar.el.classList.remove(Zn.classNames.visible),Zn.axis.y.isVisible=!1),Zn.isWithinBounds(Zn.axis.x.track.rect)||(Zn.axis.x.scrollbar.el.classList.remove(Zn.classNames.visible),Zn.axis.x.isVisible=!1)},this.onPointerEvent=function(nr){var Zt,dn;Zn.axis.x.track.rect=Zn.axis.x.track.el.getBoundingClientRect(),Zn.axis.y.track.rect=Zn.axis.y.track.el.getBoundingClientRect(),(Zn.axis.x.isOverflowing||Zn.axis.x.forceVisible)&&(Zt=Zn.isWithinBounds(Zn.axis.x.track.rect)),(Zn.axis.y.isOverflowing||Zn.axis.y.forceVisible)&&(dn=Zn.isWithinBounds(Zn.axis.y.track.rect)),(Zt||dn)&&(nr.preventDefault(),nr.stopPropagation(),"mousedown"===nr.type&&(Zt&&(Zn.axis.x.scrollbar.rect=Zn.axis.x.scrollbar.el.getBoundingClientRect(),Zn.isWithinBounds(Zn.axis.x.scrollbar.rect)?Zn.onDragStart(nr,"x"):Zn.onTrackClick(nr,"x")),dn&&(Zn.axis.y.scrollbar.rect=Zn.axis.y.scrollbar.el.getBoundingClientRect(),Zn.isWithinBounds(Zn.axis.y.scrollbar.rect)?Zn.onDragStart(nr,"y"):Zn.onTrackClick(nr,"y"))))},this.drag=function(nr){var dn=Zn.axis[Zn.draggedAxis].track,Ge=dn.rect[Zn.axis[Zn.draggedAxis].sizeAttr],Ot=Zn.axis[Zn.draggedAxis].scrollbar,mn=Zn.contentWrapperEl[Zn.axis[Zn.draggedAxis].scrollSizeAttr],wr=parseInt(Zn.elStyles[Zn.axis[Zn.draggedAxis].sizeAttr],10);nr.preventDefault(),nr.stopPropagation();var Ai=(("y"===Zn.draggedAxis?nr.pageY:nr.pageX)-dn.rect[Zn.axis[Zn.draggedAxis].offsetAttr]-Zn.axis[Zn.draggedAxis].dragOffset)/(Ge-Ot.size)*(mn-wr);"x"===Zn.draggedAxis&&(Ai=Zn.isRtl&&Pn.getRtlHelpers().isRtlScrollbarInverted?Ai-(Ge+Ot.size):Ai,Ai=Zn.isRtl&&Pn.getRtlHelpers().isRtlScrollingInverted?-Ai:Ai),Zn.contentWrapperEl[Zn.axis[Zn.draggedAxis].scrollOffsetAttr]=Ai},this.onEndDrag=function(nr){var Zt=Fe(Zn.el),dn=jt(Zn.el);nr.preventDefault(),nr.stopPropagation(),Zn.el.classList.remove(Zn.classNames.dragging),Zt.removeEventListener("mousemove",Zn.drag,!0),Zt.removeEventListener("mouseup",Zn.onEndDrag,!0),Zn.removePreventClickId=dn.setTimeout(function(){Zt.removeEventListener("click",Zn.preventClick,!0),Zt.removeEventListener("dblclick",Zn.preventClick,!0),Zn.removePreventClickId=null})},this.preventClick=function(nr){nr.preventDefault(),nr.stopPropagation()},this.el=Pr,this.minScrollbarWidth=20,this.options=Object.assign({},Pn.defaultOptions,tr),this.classNames=Object.assign({},Pn.defaultOptions.classNames,this.options.classNames),this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetSizeAttr:"offsetWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetSizeAttr:"offsetHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.removePreventClickId=null,!Pn.instances.has(this.el)&&(this.recalculate=w()(this.recalculate.bind(this),64),this.onMouseMove=w()(this.onMouseMove.bind(this),64),this.hideScrollbars=U()(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=U()(this.onWindowResize.bind(this),64,{leading:!0}),Pn.getRtlHelpers=$()(Pn.getRtlHelpers),this.init())}Pn.getRtlHelpers=function(){var tr=document.createElement("div");tr.innerHTML='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';var Zn=tr.firstElementChild;document.body.appendChild(Zn);var nr=Zn.firstElementChild;Zn.scrollLeft=0;var Zt=Pn.getOffset(Zn),dn=Pn.getOffset(nr);Zn.scrollLeft=999;var Ge=Pn.getOffset(nr);return{isRtlScrollingInverted:Zt.left!==dn.left&&dn.left-Ge.left!=0,isRtlScrollbarInverted:Zt.left!==dn.left}},Pn.getOffset=function(tr){var Zn=tr.getBoundingClientRect(),nr=Fe(tr),Zt=jt(tr);return{top:Zn.top+(Zt.pageYOffset||nr.documentElement.scrollTop),left:Zn.left+(Zt.pageXOffset||nr.documentElement.scrollLeft)}};var _r=Pn.prototype;return _r.init=function(){Pn.instances.set(this.el,this),po()&&(this.initDOM(),this.setAccessibilityAttributes(),this.scrollbarWidth=this.getScrollbarWidth(),this.recalculate(),this.initListeners())},_r.initDOM=function(){var tr=this;if(Array.prototype.filter.call(this.el.children,function(Zt){return Zt.classList.contains(tr.classNames.wrapper)}).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.options.scrollableNode||this.el.querySelector("."+this.classNames.contentWrapper),this.contentEl=this.options.contentNode||this.el.querySelector("."+this.classNames.contentEl),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.placeholderEl=this.findChild(this.wrapperEl,"."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var Zn=document.createElement("div"),nr=document.createElement("div");Zn.classList.add(this.classNames.track),nr.classList.add(this.classNames.scrollbar),Zn.appendChild(nr),this.axis.x.track.el=Zn.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=Zn.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},_r.setAccessibilityAttributes=function(){var tr=this.options.ariaLabel||"scrollable content";this.contentWrapperEl.setAttribute("tabindex","0"),this.contentWrapperEl.setAttribute("role","region"),this.contentWrapperEl.setAttribute("aria-label",tr)},_r.initListeners=function(){var tr=this,Zn=jt(this.el);this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach(function(Ge){tr.el.addEventListener(Ge,tr.onPointerEvent,!0)}),["touchstart","touchend","touchmove"].forEach(function(Ge){tr.el.addEventListener(Ge,tr.onPointerEvent,{capture:!0,passive:!0})}),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),Zn.addEventListener("resize",this.onWindowResize);var nr=!1,Zt=null;this.resizeObserver=new(Zn.ResizeObserver||pr)(function(){!nr||null!==Zt||(Zt=Zn.requestAnimationFrame(function(){tr.recalculate(),Zt=null}))}),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl),Zn.requestAnimationFrame(function(){nr=!0}),this.mutationObserver=new Zn.MutationObserver(this.recalculate),this.mutationObserver.observe(this.contentEl,{childList:!0,subtree:!0,characterData:!0})},_r.recalculate=function(){var tr=jt(this.el);this.elStyles=tr.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction;var Zn=this.heightAutoObserverEl.offsetHeight<=1,nr=this.heightAutoObserverEl.offsetWidth<=1,Zt=this.contentEl.offsetWidth,dn=this.contentWrapperEl.offsetWidth,Ge=this.elStyles.overflowX,Ot=this.elStyles.overflowY;this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft;var mn=this.contentEl.scrollHeight,wr=this.contentEl.scrollWidth;this.contentWrapperEl.style.height=Zn?"auto":"100%",this.placeholderEl.style.width=nr?Zt+"px":"auto",this.placeholderEl.style.height=mn+"px";var Ti=this.contentWrapperEl.offsetHeight;this.axis.x.isOverflowing=wr>Zt,this.axis.y.isOverflowing=mn>Ti,this.axis.x.isOverflowing="hidden"!==Ge&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==Ot&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar();var Ci=this.axis.x.isOverflowing?this.scrollbarWidth:0;this.axis.x.isOverflowing=this.axis.x.isOverflowing&&wr>dn-(this.axis.y.isOverflowing?this.scrollbarWidth:0),this.axis.y.isOverflowing=this.axis.y.isOverflowing&&mn>Ti-Ci,this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},_r.getScrollbarSize=function(tr){if(void 0===tr&&(tr="y"),!this.axis[tr].isOverflowing)return 0;var Zt,nr=this.axis[tr].track.el[this.axis[tr].offsetSizeAttr];return Zt=Math.max(~~(nr/this.contentEl[this.axis[tr].scrollSizeAttr]*nr),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(Zt=Math.min(Zt,this.options.scrollbarMaxSize)),Zt},_r.positionScrollbar=function(tr){if(void 0===tr&&(tr="y"),this.axis[tr].isOverflowing){var Zn=this.contentWrapperEl[this.axis[tr].scrollSizeAttr],nr=this.axis[tr].track.el[this.axis[tr].offsetSizeAttr],Zt=parseInt(this.elStyles[this.axis[tr].sizeAttr],10),dn=this.axis[tr].scrollbar,Ge=this.contentWrapperEl[this.axis[tr].scrollOffsetAttr],mn=~~((Ge="x"===tr&&this.isRtl&&Pn.getRtlHelpers().isRtlScrollingInverted?-Ge:Ge)/(Zn-Zt)*(nr-dn.size));mn="x"===tr&&this.isRtl&&Pn.getRtlHelpers().isRtlScrollbarInverted?mn+(nr-dn.size):mn,dn.el.style.transform="x"===tr?"translate3d("+mn+"px, 0, 0)":"translate3d(0, "+mn+"px, 0)"}},_r.toggleTrackVisibility=function(tr){void 0===tr&&(tr="y");var Zn=this.axis[tr].track.el,nr=this.axis[tr].scrollbar.el;this.axis[tr].isOverflowing||this.axis[tr].forceVisible?(Zn.style.visibility="visible",this.contentWrapperEl.style[this.axis[tr].overflowAttr]="scroll"):(Zn.style.visibility="hidden",this.contentWrapperEl.style[this.axis[tr].overflowAttr]="hidden"),nr.style.display=this.axis[tr].isOverflowing?"block":"none"},_r.hideNativeScrollbar=function(){this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+this.scrollbarWidth+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+this.scrollbarWidth+"px":0},_r.onMouseMoveForAxis=function(tr){void 0===tr&&(tr="y"),this.axis[tr].track.rect=this.axis[tr].track.el.getBoundingClientRect(),this.axis[tr].scrollbar.rect=this.axis[tr].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[tr].scrollbar.rect)?this.axis[tr].scrollbar.el.classList.add(this.classNames.hover):this.axis[tr].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[tr].track.rect)?(this.showScrollbar(tr),this.axis[tr].track.el.classList.add(this.classNames.hover)):this.axis[tr].track.el.classList.remove(this.classNames.hover)},_r.onMouseLeaveForAxis=function(tr){void 0===tr&&(tr="y"),this.axis[tr].track.el.classList.remove(this.classNames.hover),this.axis[tr].scrollbar.el.classList.remove(this.classNames.hover)},_r.showScrollbar=function(tr){void 0===tr&&(tr="y"),this.axis[tr].isVisible||(this.axis[tr].scrollbar.el.classList.add(this.classNames.visible),this.axis[tr].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},_r.onDragStart=function(tr,Zn){void 0===Zn&&(Zn="y");var nr=Fe(this.el),Zt=jt(this.el);this.axis[Zn].dragOffset=("y"===Zn?tr.pageY:tr.pageX)-this.axis[Zn].scrollbar.rect[this.axis[Zn].offsetAttr],this.draggedAxis=Zn,this.el.classList.add(this.classNames.dragging),nr.addEventListener("mousemove",this.drag,!0),nr.addEventListener("mouseup",this.onEndDrag,!0),null===this.removePreventClickId?(nr.addEventListener("click",this.preventClick,!0),nr.addEventListener("dblclick",this.preventClick,!0)):(Zt.clearTimeout(this.removePreventClickId),this.removePreventClickId=null)},_r.onTrackClick=function(tr,Zn){var nr=this;if(void 0===Zn&&(Zn="y"),this.options.clickOnTrack){var Zt=jt(this.el);this.axis[Zn].scrollbar.rect=this.axis[Zn].scrollbar.el.getBoundingClientRect();var Ge=this.axis[Zn].scrollbar.rect[this.axis[Zn].offsetAttr],Ot=parseInt(this.elStyles[this.axis[Zn].sizeAttr],10),mn=this.contentWrapperEl[this.axis[Zn].scrollOffsetAttr],Ti=("y"===Zn?this.mouseY-Ge:this.mouseX-Ge)<0?-1:1,Ci=-1===Ti?mn-Ot:mn+Ot;!function Ko(){var _s;if(-1===Ti)mn>Ci&&(nr.contentWrapperEl.scrollTo(((_s={})[nr.axis[Zn].offsetAttr]=mn-=nr.options.clickOnTrackSpeed,_s)),Zt.requestAnimationFrame(Ko));else if(mn<Ci){var dr;nr.contentWrapperEl.scrollTo(((dr={})[nr.axis[Zn].offsetAttr]=mn+=nr.options.clickOnTrackSpeed,dr)),Zt.requestAnimationFrame(Ko)}}()}},_r.getContentElement=function(){return this.contentEl},_r.getScrollElement=function(){return this.contentWrapperEl},_r.getScrollbarWidth=function(){try{return"none"===getComputedStyle(this.contentWrapperEl,"::-webkit-scrollbar").display||"scrollbarWidth"in document.documentElement.style||"-ms-overflow-style"in document.documentElement.style?0:ze(this.el)}catch{return ze(this.el)}},_r.removeListeners=function(){var tr=this,Zn=jt(this.el);this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach(function(nr){tr.el.removeEventListener(nr,tr.onPointerEvent,!0)}),["touchstart","touchend","touchmove"].forEach(function(nr){tr.el.removeEventListener(nr,tr.onPointerEvent,{capture:!0,passive:!0})}),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl&&this.contentWrapperEl.removeEventListener("scroll",this.onScroll),Zn.removeEventListener("resize",this.onWindowResize),this.mutationObserver&&this.mutationObserver.disconnect(),this.resizeObserver&&this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},_r.unMount=function(){this.removeListeners(),Pn.instances.delete(this.el)},_r.isWithinBounds=function(tr){return this.mouseX>=tr.left&&this.mouseX<=tr.left+tr.width&&this.mouseY>=tr.top&&this.mouseY<=tr.top+tr.height},_r.findChild=function(tr,Zn){var nr=tr.matches||tr.webkitMatchesSelector||tr.mozMatchesSelector||tr.msMatchesSelector;return Array.prototype.filter.call(tr.children,function(Zt){return nr.call(Zt,Zn)})[0]},Pn}();an.defaultOptions={autoHide:!0,forceVisible:!1,clickOnTrack:!0,clickOnTrackSpeed:40,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},an.instances=new WeakMap;const lt=an;var Rt=s(64537);const Pe=["*"];let qn=(()=>{class Pn{constructor(Pr){this.elRef=Pr}ngOnInit(){}ngAfterViewInit(){this.SimpleBar=new lt(this.elRef.nativeElement,this.options||{})}ngOnDestroy(){this.SimpleBar.unMount(),this.SimpleBar=null}}return Pn.\u0275fac=function(Pr){return new(Pr||Pn)(Rt.Y36(Rt.SBq))},Pn.\u0275cmp=Rt.Xpm({type:Pn,selectors:[["ngx-simplebar"]],hostAttrs:["data-simplebar","init"],inputs:{options:"options"},ngContentSelectors:Pe,decls:13,vars:0,consts:[[1,"simplebar-wrapper"],[1,"simplebar-height-auto-observer-wrapper"],[1,"simplebar-height-auto-observer"],[1,"simplebar-mask"],[1,"simplebar-offset"],[1,"simplebar-content-wrapper"],[1,"simplebar-content"],[1,"simplebar-placeholder"],[1,"simplebar-track","simplebar-horizontal"],[1,"simplebar-scrollbar"],[1,"simplebar-track","simplebar-vertical"]],template:function(Pr,tr){1&Pr&&(Rt.F$t(),Rt.TgZ(0,"div",0)(1,"div",1),Rt._UZ(2,"div",2),Rt.qZA(),Rt.TgZ(3,"div",3)(4,"div",4)(5,"div",5)(6,"div",6),Rt.Hsn(7),Rt.qZA()()()(),Rt._UZ(8,"div",7),Rt.qZA(),Rt.TgZ(9,"div",8),Rt._UZ(10,"div",9),Rt.qZA(),Rt.TgZ(11,"div",10),Rt._UZ(12,"div",9),Rt.qZA())},styles:["[data-simplebar]{position:relative;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;flex-wrap:wrap;-webkit-box-pack:start;justify-content:flex-start;align-content:flex-start;-webkit-box-align:start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;-webkit-box-flex:inherit;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';background:#000;border-radius:7px;left:2px;right:2px;opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;-webkit-transition:opacity linear;transition:opacity linear}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}","ngx-simplebar{display:block}"],encapsulation:2}),Pn})(),gr=(()=>{class Pn{}return Pn.\u0275fac=function(Pr){return new(Pr||Pn)},Pn.\u0275mod=Rt.oAB({type:Pn}),Pn.\u0275inj=Rt.cJS({}),Pn})()},89159:E=>{var ht,C="Expected a function",s="__lodash_hash_undefined__",r="[object Function]",a="[object GeneratorFunction]",u=/^\[object .+?Constructor\]$/,e="object"==typeof global&&global&&global.Object===Object&&global,f="object"==typeof self&&self&&self.Object===Object&&self,m=e||f||Function("return this")(),w=Array.prototype,D=Function.prototype,U=Object.prototype,W=m["__core-js_shared__"],$=(ht=/[^.]+$/.exec(W&&W.keys&&W.keys.IE_PROTO||""))?"Symbol(src)_1."+ht:"",J=D.toString,F=U.hasOwnProperty,X=U.toString,de=RegExp("^"+J.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),V=w.splice,ce=xn(m,"Map"),se=xn(Object,"create");function fe(ht){var Wt=-1,Tt=ht?ht.length:0;for(this.clear();++Wt<Tt;){var wn=ht[Wt];this.set(wn[0],wn[1])}}function ct(ht){var Wt=-1,Tt=ht?ht.length:0;for(this.clear();++Wt<Tt;){var wn=ht[Wt];this.set(wn[0],wn[1])}}function it(ht){var Wt=-1,Tt=ht?ht.length:0;for(this.clear();++Wt<Tt;){var wn=ht[Wt];this.set(wn[0],wn[1])}}function qt(ht,Wt){for(var Tt=ht.length;Tt--;)if(Qr(ht[Tt][0],Wt))return Tt;return-1}function fn(ht,Wt){var Tt=ht.__data__;return function Kr(ht){var Wt=typeof ht;return"string"==Wt||"number"==Wt||"symbol"==Wt||"boolean"==Wt?"__proto__"!==ht:null===ht}(Wt)?Tt["string"==typeof Wt?"string":"hash"]:Tt.map}function xn(ht,Wt){var Tt=function T(ht,Wt){return ht?.[Wt]}(ht,Wt);return function sn(ht){if(!br(ht)||function Or(ht){return!!$&&$ in ht}(ht))return!1;var Wt=function jr(ht){var Wt=br(ht)?X.call(ht):"";return Wt==r||Wt==a}(ht)||function M(ht){var Wt=!1;if(null!=ht&&"function"!=typeof ht.toString)try{Wt=!!(ht+"")}catch{}return Wt}(ht)?de:u;return Wt.test(function Lr(ht){if(null!=ht){try{return J.call(ht)}catch{}try{return ht+""}catch{}}return""}(ht))}(Tt)?Tt:void 0}function ir(ht,Wt){if("function"!=typeof ht||Wt&&"function"!=typeof Wt)throw new TypeError(C);var Tt=function(){var wn=arguments,jn=Wt?Wt.apply(this,wn):wn[0],hr=Tt.cache;if(hr.has(jn))return hr.get(jn);var Oi=ht.apply(this,wn);return Tt.cache=hr.set(jn,Oi),Oi};return Tt.cache=new(ir.Cache||it),Tt}function Qr(ht,Wt){return ht===Wt||ht!=ht&&Wt!=Wt}function br(ht){var Wt=typeof ht;return!!ht&&("object"==Wt||"function"==Wt)}fe.prototype.clear=function Te(){this.__data__=se?se(null):{}},fe.prototype.delete=function $e(ht){return this.has(ht)&&delete this.__data__[ht]},fe.prototype.get=function ge(ht){var Wt=this.__data__;if(se){var Tt=Wt[ht];return Tt===s?void 0:Tt}return F.call(Wt,ht)?Wt[ht]:void 0},fe.prototype.has=function Et(ht){var Wt=this.__data__;return se?void 0!==Wt[ht]:F.call(Wt,ht)},fe.prototype.set=function ot(ht,Wt){return this.__data__[ht]=se&&void 0===Wt?s:Wt,this},ct.prototype.clear=function qe(){this.__data__=[]},ct.prototype.delete=function He(ht){var Wt=this.__data__,Tt=qt(Wt,ht);return!(Tt<0||(Tt==Wt.length-1?Wt.pop():V.call(Wt,Tt,1),0))},ct.prototype.get=function We(ht){var Wt=this.__data__,Tt=qt(Wt,ht);return Tt<0?void 0:Wt[Tt][1]},ct.prototype.has=function Le(ht){return qt(this.__data__,ht)>-1},ct.prototype.set=function Pt(ht,Wt){var Tt=this.__data__,wn=qt(Tt,ht);return wn<0?Tt.push([ht,Wt]):Tt[wn][1]=Wt,this},it.prototype.clear=function Xt(){this.__data__={hash:new fe,map:new(ce||ct),string:new fe}},it.prototype.delete=function cn(ht){return fn(this,ht).delete(ht)},it.prototype.get=function pn(ht){return fn(this,ht).get(ht)},it.prototype.has=function Rn(ht){return fn(this,ht).has(ht)},it.prototype.set=function At(ht,Wt){return fn(this,ht).set(ht,Wt),this},ir.Cache=it,E.exports=ir},46295:(E,C)=>{"use strict";C.parse=function a(T,M){if("string"!=typeof T)throw new TypeError("argument str must be a string");for(var w={},U=(M||{}).decode||u,W=0;W<T.length;){var $=T.indexOf("=",W);if(-1===$)break;var J=T.indexOf(";",W);if(-1===J)J=T.length;else if(J<$){W=T.lastIndexOf(";",$-1)+1;continue}var F=T.slice(W,$).trim();if(void 0===w[F]){var X=T.slice($+1,J).trim();34===X.charCodeAt(0)&&(X=X.slice(1,-1)),w[F]=m(X,U)}W=J+1}return w},C.serialize=function c(T,M,w){var D=w||{},U=D.encode||e;if("function"!=typeof U)throw new TypeError("option encode is invalid");if(!r.test(T))throw new TypeError("argument name is invalid");var W=U(M);if(W&&!r.test(W))throw new TypeError("argument val is invalid");var $=T+"="+W;if(null!=D.maxAge){var J=D.maxAge-0;if(isNaN(J)||!isFinite(J))throw new TypeError("option maxAge is invalid");$+="; Max-Age="+Math.floor(J)}if(D.domain){if(!r.test(D.domain))throw new TypeError("option domain is invalid");$+="; Domain="+D.domain}if(D.path){if(!r.test(D.path))throw new TypeError("option path is invalid");$+="; Path="+D.path}if(D.expires){var F=D.expires;if(!function f(T){return"[object Date]"===s.call(T)||T instanceof Date}(F)||isNaN(F.valueOf()))throw new TypeError("option expires is invalid");$+="; Expires="+F.toUTCString()}if(D.httpOnly&&($+="; HttpOnly"),D.secure&&($+="; Secure"),D.priority)switch("string"==typeof D.priority?D.priority.toLowerCase():D.priority){case"low":$+="; Priority=Low";break;case"medium":$+="; Priority=Medium";break;case"high":$+="; Priority=High";break;default:throw new TypeError("option priority is invalid")}if(D.sameSite)switch("string"==typeof D.sameSite?D.sameSite.toLowerCase():D.sameSite){case!0:$+="; SameSite=Strict";break;case"lax":$+="; SameSite=Lax";break;case"strict":$+="; SameSite=Strict";break;case"none":$+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return $};var s=Object.prototype.toString,r=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function u(T){return-1!==T.indexOf("%")?decodeURIComponent(T):T}function e(T){return encodeURIComponent(T)}function m(T,M){try{return M(T)}catch{return T}}},82312:E=>{"use strict";var C=function(X){return function s(F){return!!F&&"object"==typeof F}(X)&&!function r(F){var X=Object.prototype.toString.call(F);return"[object RegExp]"===X||"[object Date]"===X||function u(F){return F.$$typeof===c}(F)}(X)},c="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function f(F,X){return!1!==X.clone&&X.isMergeableObject(F)?$(function e(F){return Array.isArray(F)?[]:{}}(F),F,X):F}function m(F,X,de){return F.concat(X).map(function(V){return f(V,de)})}function w(F){return Object.keys(F).concat(function M(F){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(F).filter(function(X){return Object.propertyIsEnumerable.call(F,X)}):[]}(F))}function D(F,X){try{return X in F}catch{return!1}}function $(F,X,de){(de=de||{}).arrayMerge=de.arrayMerge||m,de.isMergeableObject=de.isMergeableObject||C,de.cloneUnlessOtherwiseSpecified=f;var V=Array.isArray(X);return V===Array.isArray(F)?V?de.arrayMerge(F,X,de):function W(F,X,de){var V={};return de.isMergeableObject(F)&&w(F).forEach(function(ce){V[ce]=f(F[ce],de)}),w(X).forEach(function(ce){(function U(F,X){return D(F,X)&&!(Object.hasOwnProperty.call(F,X)&&Object.propertyIsEnumerable.call(F,X))})(F,ce)||(V[ce]=D(F,ce)&&de.isMergeableObject(X[ce])?function T(F,X){if(!X.customMerge)return $;var de=X.customMerge(F);return"function"==typeof de?de:$}(ce,de)(F[ce],X[ce],de):f(X[ce],de))}),V}(F,X,de):f(X,de)}$.all=function(X,de){if(!Array.isArray(X))throw new Error("first argument should be an array");return X.reduce(function(V,ce){return $(V,ce,de)},{})},E.exports=$},90819:E=>{"use strict";var C=String.prototype.replace,s=/%20/g;E.exports={default:"RFC3986",formatters:{RFC1738:function(a){return C.call(a,s,"+")},RFC3986:function(a){return String(a)}},RFC1738:"RFC1738",RFC3986:"RFC3986"}},79257:(E,C,s)=>{"use strict";var r=s(35934),a=s(62402),c=s(90819);E.exports={formats:c,parse:a,stringify:r}},62402:(E,C,s)=>{"use strict";var r=s(11622),a=Object.prototype.hasOwnProperty,c=Array.isArray,u={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},f=function(W,$){return W&&"string"==typeof W&&$.comma&&W.indexOf(",")>-1?W.split(","):W},D=function($,J,F,X){if($){var de=F.allowDots?$.replace(/\.([^.[]+)/g,"[$1]"):$,ce=/(\[[^[\]]*])/g,se=F.depth>0&&/(\[[^[\]]*])/.exec(de),fe=se?de.slice(0,se.index):de,Te=[];if(fe){if(!F.plainObjects&&a.call(Object.prototype,fe)&&!F.allowPrototypes)return;Te.push(fe)}for(var $e=0;F.depth>0&&null!==(se=ce.exec(de))&&$e<F.depth;){if($e+=1,!F.plainObjects&&a.call(Object.prototype,se[1].slice(1,-1))&&!F.allowPrototypes)return;Te.push(se[1])}return se&&Te.push("["+de.slice(se.index)+"]"),function(W,$,J,F){for(var X=F?$:f($,J),de=W.length-1;de>=0;--de){var V,ce=W[de];if("[]"===ce&&J.parseArrays)V=[].concat(X);else{V=J.plainObjects?Object.create(null):{};var se="["===ce.charAt(0)&&"]"===ce.charAt(ce.length-1)?ce.slice(1,-1):ce,fe=parseInt(se,10);J.parseArrays||""!==se?!isNaN(fe)&&ce!==se&&String(fe)===se&&fe>=0&&J.parseArrays&&fe<=J.arrayLimit?(V=[])[fe]=X:"__proto__"!==se&&(V[se]=X):V={0:X}}X=V}return X}(Te,J,F,X)}};E.exports=function(W,$){var J=function($){if(!$)return u;if(null!=$.decoder&&"function"!=typeof $.decoder)throw new TypeError("Decoder has to be a function.");if(typeof $.charset<"u"&&"utf-8"!==$.charset&&"iso-8859-1"!==$.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");return{allowDots:typeof $.allowDots>"u"?u.allowDots:!!$.allowDots,allowPrototypes:"boolean"==typeof $.allowPrototypes?$.allowPrototypes:u.allowPrototypes,allowSparse:"boolean"==typeof $.allowSparse?$.allowSparse:u.allowSparse,arrayLimit:"number"==typeof $.arrayLimit?$.arrayLimit:u.arrayLimit,charset:typeof $.charset>"u"?u.charset:$.charset,charsetSentinel:"boolean"==typeof $.charsetSentinel?$.charsetSentinel:u.charsetSentinel,comma:"boolean"==typeof $.comma?$.comma:u.comma,decoder:"function"==typeof $.decoder?$.decoder:u.decoder,delimiter:"string"==typeof $.delimiter||r.isRegExp($.delimiter)?$.delimiter:u.delimiter,depth:"number"==typeof $.depth||!1===$.depth?+$.depth:u.depth,ignoreQueryPrefix:!0===$.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof $.interpretNumericEntities?$.interpretNumericEntities:u.interpretNumericEntities,parameterLimit:"number"==typeof $.parameterLimit?$.parameterLimit:u.parameterLimit,parseArrays:!1!==$.parseArrays,plainObjects:"boolean"==typeof $.plainObjects?$.plainObjects:u.plainObjects,strictNullHandling:"boolean"==typeof $.strictNullHandling?$.strictNullHandling:u.strictNullHandling}}($);if(""===W||null===W||typeof W>"u")return J.plainObjects?Object.create(null):{};for(var F="string"==typeof W?function($,J){var se,F={__proto__:null},V=(J.ignoreQueryPrefix?$.replace(/^\?/,""):$).split(J.delimiter,J.parameterLimit===1/0?void 0:J.parameterLimit),ce=-1,fe=J.charset;if(J.charsetSentinel)for(se=0;se<V.length;++se)0===V[se].indexOf("utf8=")&&("utf8=%E2%9C%93"===V[se]?fe="utf-8":"utf8=%26%2310003%3B"===V[se]&&(fe="iso-8859-1"),ce=se,se=V.length);for(se=0;se<V.length;++se)if(se!==ce){var Et,ot,Te=V[se],$e=Te.indexOf("]="),ge=-1===$e?Te.indexOf("="):$e+1;-1===ge?(Et=J.decoder(Te,u.decoder,fe,"key"),ot=J.strictNullHandling?null:""):(Et=J.decoder(Te.slice(0,ge),u.decoder,fe,"key"),ot=r.maybeMap(f(Te.slice(ge+1),J),function(ct){return J.decoder(ct,u.decoder,fe,"value")})),ot&&J.interpretNumericEntities&&"iso-8859-1"===fe&&(ot=ot.replace(/&#(\d+);/g,function($,J){return String.fromCharCode(parseInt(J,10))})),Te.indexOf("[]=")>-1&&(ot=c(ot)?[ot]:ot),F[Et]=a.call(F,Et)?r.combine(F[Et],ot):ot}return F}(W,J):W,X=J.plainObjects?Object.create(null):{},de=Object.keys(F),V=0;V<de.length;++V){var ce=de[V],se=D(ce,F[ce],J,"string"==typeof W);X=r.merge(X,se,J)}return!0===J.allowSparse?X:r.compact(X)}},35934:(E,C,s)=>{"use strict";var r=s(11144),a=s(11622),c=s(90819),u=Object.prototype.hasOwnProperty,e={brackets:function(X){return X+"[]"},comma:"comma",indices:function(X,de){return X+"["+de+"]"},repeat:function(X){return X}},f=Array.isArray,m=Array.prototype.push,T=function(F,X){m.apply(F,f(X)?X:[X])},M=Date.prototype.toISOString,w=c.default,D={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:a.encode,encodeValuesOnly:!1,format:w,formatter:c.formatters[w],indices:!1,serializeDate:function(X){return M.call(X)},skipNulls:!1,strictNullHandling:!1},W={},$=function F(X,de,V,ce,se,fe,Te,$e,ge,Et,ot,ct,qe,He,We,Le){for(var Pt=X,it=Le,Xt=0,cn=!1;void 0!==(it=it.get(W))&&!cn;){var pn=it.get(X);if(Xt+=1,typeof pn<"u"){if(pn===Xt)throw new RangeError("Cyclic object value");cn=!0}typeof it.get(W)>"u"&&(Xt=0)}if("function"==typeof $e?Pt=$e(de,Pt):Pt instanceof Date?Pt=ot(Pt):"comma"===V&&f(Pt)&&(Pt=a.maybeMap(Pt,function(Qr){return Qr instanceof Date?ot(Qr):Qr})),null===Pt){if(se)return Te&&!He?Te(de,D.encoder,We,"key",ct):de;Pt=""}if(function(X){return"string"==typeof X||"number"==typeof X||"boolean"==typeof X||"symbol"==typeof X||"bigint"==typeof X}(Pt)||a.isBuffer(Pt))return Te?[qe(He?de:Te(de,D.encoder,We,"key",ct))+"="+qe(Te(Pt,D.encoder,We,"value",ct))]:[qe(de)+"="+qe(String(Pt))];var qt,At=[];if(typeof Pt>"u")return At;if("comma"===V&&f(Pt))He&&Te&&(Pt=a.maybeMap(Pt,Te)),qt=[{value:Pt.length>0?Pt.join(",")||null:void 0}];else if(f($e))qt=$e;else{var sn=Object.keys(Pt);qt=ge?sn.sort(ge):sn}for(var fn=ce&&f(Pt)&&1===Pt.length?de+"[]":de,xn=0;xn<qt.length;++xn){var Kr=qt[xn],Or="object"==typeof Kr&&typeof Kr.value<"u"?Kr.value:Pt[Kr];if(!fe||null!==Or){var Lr=f(Pt)?"function"==typeof V?V(fn,Kr):fn:fn+(Et?"."+Kr:"["+Kr+"]");Le.set(X,Xt);var ir=r();ir.set(W,Le),T(At,F(Or,Lr,V,ce,se,fe,"comma"===V&&He&&f(Pt)?null:Te,$e,ge,Et,ot,ct,qe,He,We,ir))}}return At};E.exports=function(F,X){var ce,de=F,V=function(X){if(!X)return D;if(null!==X.encoder&&typeof X.encoder<"u"&&"function"!=typeof X.encoder)throw new TypeError("Encoder has to be a function.");var de=X.charset||D.charset;if(typeof X.charset<"u"&&"utf-8"!==X.charset&&"iso-8859-1"!==X.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var V=c.default;if(typeof X.format<"u"){if(!u.call(c.formatters,X.format))throw new TypeError("Unknown format option provided.");V=X.format}var ce=c.formatters[V],se=D.filter;return("function"==typeof X.filter||f(X.filter))&&(se=X.filter),{addQueryPrefix:"boolean"==typeof X.addQueryPrefix?X.addQueryPrefix:D.addQueryPrefix,allowDots:typeof X.allowDots>"u"?D.allowDots:!!X.allowDots,charset:de,charsetSentinel:"boolean"==typeof X.charsetSentinel?X.charsetSentinel:D.charsetSentinel,delimiter:typeof X.delimiter>"u"?D.delimiter:X.delimiter,encode:"boolean"==typeof X.encode?X.encode:D.encode,encoder:"function"==typeof X.encoder?X.encoder:D.encoder,encodeValuesOnly:"boolean"==typeof X.encodeValuesOnly?X.encodeValuesOnly:D.encodeValuesOnly,filter:se,format:V,formatter:ce,serializeDate:"function"==typeof X.serializeDate?X.serializeDate:D.serializeDate,skipNulls:"boolean"==typeof X.skipNulls?X.skipNulls:D.skipNulls,sort:"function"==typeof X.sort?X.sort:null,strictNullHandling:"boolean"==typeof X.strictNullHandling?X.strictNullHandling:D.strictNullHandling}}(X);"function"==typeof V.filter?de=(0,V.filter)("",de):f(V.filter)&&(ce=V.filter);var fe=[];if("object"!=typeof de||null===de)return"";var $e=e[X&&X.arrayFormat in e?X.arrayFormat:X&&"indices"in X?X.indices?"indices":"repeat":"indices"];if(X&&"commaRoundTrip"in X&&"boolean"!=typeof X.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var ge="comma"===$e&&X&&X.commaRoundTrip;ce||(ce=Object.keys(de)),V.sort&&ce.sort(V.sort);for(var Et=r(),ot=0;ot<ce.length;++ot){var ct=ce[ot];V.skipNulls&&null===de[ct]||T(fe,$(de[ct],ct,$e,ge,V.strictNullHandling,V.skipNulls,V.encode?V.encoder:null,V.filter,V.sort,V.allowDots,V.serializeDate,V.format,V.formatter,V.encodeValuesOnly,V.charset,Et))}var qe=fe.join(V.delimiter),He=!0===V.addQueryPrefix?"?":"";return V.charsetSentinel&&(He+="iso-8859-1"===V.charset?"utf8=%26%2310003%3B&":"utf8=%E2%9C%93&"),qe.length>0?He+qe:""}},11622:(E,C,s)=>{"use strict";var r=s(90819),a=Object.prototype.hasOwnProperty,c=Array.isArray,u=function(){for(var F=[],X=0;X<256;++X)F.push("%"+((X<16?"0":"")+X.toString(16)).toUpperCase());return F}(),f=function(X,de){for(var V=de&&de.plainObjects?Object.create(null):{},ce=0;ce<X.length;++ce)typeof X[ce]<"u"&&(V[ce]=X[ce]);return V};E.exports={arrayToObject:f,assign:function(X,de){return Object.keys(de).reduce(function(V,ce){return V[ce]=de[ce],V},X)},combine:function(X,de){return[].concat(X,de)},compact:function(X){for(var de=[{obj:{o:X},prop:"o"}],V=[],ce=0;ce<de.length;++ce)for(var se=de[ce],fe=se.obj[se.prop],Te=Object.keys(fe),$e=0;$e<Te.length;++$e){var ge=Te[$e],Et=fe[ge];"object"==typeof Et&&null!==Et&&-1===V.indexOf(Et)&&(de.push({obj:fe,prop:ge}),V.push(Et))}return function(X){for(;X.length>1;){var de=X.pop(),V=de.obj[de.prop];if(c(V)){for(var ce=[],se=0;se<V.length;++se)typeof V[se]<"u"&&ce.push(V[se]);de.obj[de.prop]=ce}}}(de),X},decode:function(F,X,de){var V=F.replace(/\+/g," ");if("iso-8859-1"===de)return V.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(V)}catch{return V}},encode:function(X,de,V,ce,se){if(0===X.length)return X;var fe=X;if("symbol"==typeof X?fe=Symbol.prototype.toString.call(X):"string"!=typeof X&&(fe=String(X)),"iso-8859-1"===V)return escape(fe).replace(/%u[0-9a-f]{4}/gi,function(Et){return"%26%23"+parseInt(Et.slice(2),16)+"%3B"});for(var Te="",$e=0;$e<fe.length;++$e){var ge=fe.charCodeAt($e);45===ge||46===ge||95===ge||126===ge||ge>=48&&ge<=57||ge>=65&&ge<=90||ge>=97&&ge<=122||se===r.RFC1738&&(40===ge||41===ge)?Te+=fe.charAt($e):ge<128?Te+=u[ge]:ge<2048?Te+=u[192|ge>>6]+u[128|63&ge]:ge<55296||ge>=57344?Te+=u[224|ge>>12]+u[128|ge>>6&63]+u[128|63&ge]:(ge=65536+((1023&ge)<<10|1023&fe.charCodeAt($e+=1)),Te+=u[240|ge>>18]+u[128|ge>>12&63]+u[128|ge>>6&63]+u[128|63&ge])}return Te},isBuffer:function(X){return!(!X||"object"!=typeof X||!(X.constructor&&X.constructor.isBuffer&&X.constructor.isBuffer(X)))},isRegExp:function(X){return"[object RegExp]"===Object.prototype.toString.call(X)},maybeMap:function(X,de){if(c(X)){for(var V=[],ce=0;ce<X.length;ce+=1)V.push(de(X[ce]));return V}return de(X)},merge:function F(X,de,V){if(!de)return X;if("object"!=typeof de){if(c(X))X.push(de);else{if(!X||"object"!=typeof X)return[X,de];(V&&(V.plainObjects||V.allowPrototypes)||!a.call(Object.prototype,de))&&(X[de]=!0)}return X}if(!X||"object"!=typeof X)return[X].concat(de);var ce=X;return c(X)&&!c(de)&&(ce=f(X,V)),c(X)&&c(de)?(de.forEach(function(se,fe){if(a.call(X,fe)){var Te=X[fe];Te&&"object"==typeof Te&&se&&"object"==typeof se?X[fe]=F(Te,se,V):X.push(se)}else X[fe]=se}),X):Object.keys(de).reduce(function(se,fe){var Te=de[fe];return se[fe]=a.call(se,fe)?F(se[fe],Te,V):Te,se},ce)}}},52129:function(E){E.exports=function(){"use strict";var C=Array.prototype.slice;function s(Q,Ee){Ee&&(Q.prototype=Object.create(Ee.prototype)),Q.prototype.constructor=Q}function r(Q){return e(Q)?Q:Lr(Q)}function a(Q){return f(Q)?Q:ir(Q)}function c(Q){return m(Q)?Q:Qr(Q)}function u(Q){return e(Q)&&!T(Q)?Q:jr(Q)}function e(Q){return!(!Q||!Q[w])}function f(Q){return!(!Q||!Q[D])}function m(Q){return!(!Q||!Q[U])}function T(Q){return f(Q)||m(Q)}function M(Q){return!(!Q||!Q[W])}s(a,r),s(c,r),s(u,r),r.isIterable=e,r.isKeyed=f,r.isIndexed=m,r.isAssociative=T,r.isOrdered=M,r.Keyed=a,r.Indexed=c,r.Set=u;var w="@@__IMMUTABLE_ITERABLE__@@",D="@@__IMMUTABLE_KEYED__@@",U="@@__IMMUTABLE_INDEXED__@@",W="@@__IMMUTABLE_ORDERED__@@",$="delete",J=5,F=1<<J,X=F-1,de={},V={value:!1},ce={value:!1};function se(Q){return Q.value=!1,Q}function fe(Q){Q&&(Q.value=!0)}function Te(){}function $e(Q,Ee){Ee=Ee||0;for(var yt=Math.max(0,Q.length-Ee),Xe=new Array(yt),Gt=0;Gt<yt;Gt++)Xe[Gt]=Q[Gt+Ee];return Xe}function ge(Q){return void 0===Q.size&&(Q.size=Q.__iterate(ot)),Q.size}function Et(Q,Ee){if("number"!=typeof Ee){var yt=Ee>>>0;if(""+yt!==Ee||4294967295===yt)return NaN;Ee=yt}return Ee<0?ge(Q)+Ee:Ee}function ot(){return!0}function ct(Q,Ee,yt){return(0===Q||void 0!==yt&&Q<=-yt)&&(void 0===Ee||void 0!==yt&&Ee>=yt)}function qe(Q,Ee){return We(Q,Ee,0)}function He(Q,Ee){return We(Q,Ee,Ee)}function We(Q,Ee,yt){return void 0===Q?yt:Q<0?Math.max(0,Ee+Q):void 0===Ee?Q:Math.min(Ee,Q)}var Le=0,Pt=1,it=2,Xt="function"==typeof Symbol&&Symbol.iterator,cn="@@iterator",pn=Xt||cn;function Rn(Q){this.next=Q}function At(Q,Ee,yt,Xe){var Gt=0===Q?Ee:1===Q?yt:[Ee,yt];return Xe?Xe.value=Gt:Xe={value:Gt,done:!1},Xe}function qt(){return{value:void 0,done:!0}}function sn(Q){return!!Kr(Q)}function fn(Q){return Q&&"function"==typeof Q.next}function xn(Q){var Ee=Kr(Q);return Ee&&Ee.call(Q)}function Kr(Q){var Ee=Q&&(Xt&&Q[Xt]||Q[cn]);if("function"==typeof Ee)return Ee}function Or(Q){return Q&&"number"==typeof Q.length}function Lr(Q){return null==Q?Oi():e(Q)?Q.toSeq():function kr(Q){var Ee=Ei(Q)||"object"==typeof Q&&new Wt(Q);if(!Ee)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+Q);return Ee}(Q)}function ir(Q){return null==Q?Oi().toKeyedSeq():e(Q)?f(Q)?Q.toSeq():Q.fromEntrySeq():Wi(Q)}function Qr(Q){return null==Q?Oi():e(Q)?f(Q)?Q.entrySeq():Q.toIndexedSeq():so(Q)}function jr(Q){return(null==Q?Oi():e(Q)?f(Q)?Q.entrySeq():Q:so(Q)).toSetSeq()}Rn.prototype.toString=function(){return"[Iterator]"},Rn.KEYS=Le,Rn.VALUES=Pt,Rn.ENTRIES=it,Rn.prototype.inspect=Rn.prototype.toSource=function(){return this.toString()},Rn.prototype[pn]=function(){return this},s(Lr,r),Lr.of=function(){return Lr(arguments)},Lr.prototype.toSeq=function(){return this},Lr.prototype.toString=function(){return this.__toString("Seq {","}")},Lr.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},Lr.prototype.__iterate=function(Q,Ee){return ii(this,Q,Ee,!0)},Lr.prototype.__iterator=function(Q,Ee){return mr(this,Q,Ee,!0)},s(ir,Lr),ir.prototype.toKeyedSeq=function(){return this},s(Qr,Lr),Qr.of=function(){return Qr(arguments)},Qr.prototype.toIndexedSeq=function(){return this},Qr.prototype.toString=function(){return this.__toString("Seq [","]")},Qr.prototype.__iterate=function(Q,Ee){return ii(this,Q,Ee,!1)},Qr.prototype.__iterator=function(Q,Ee){return mr(this,Q,Ee,!1)},s(jr,Lr),jr.of=function(){return jr(arguments)},jr.prototype.toSetSeq=function(){return this},Lr.isSeq=jn,Lr.Keyed=ir,Lr.Set=jr,Lr.Indexed=Qr;var hr,Hn,Ie,br="@@__IMMUTABLE_SEQ__@@";function ht(Q){this._array=Q,this.size=Q.length}function Wt(Q){var Ee=Object.keys(Q);this._object=Q,this._keys=Ee,this.size=Ee.length}function Tt(Q){this._iterable=Q,this.size=Q.length||Q.size}function wn(Q){this._iterator=Q,this._iteratorCache=[]}function jn(Q){return!(!Q||!Q[br])}function Oi(){return hr||(hr=new ht([]))}function Wi(Q){var Ee=Array.isArray(Q)?new ht(Q).fromEntrySeq():fn(Q)?new wn(Q).fromEntrySeq():sn(Q)?new Tt(Q).fromEntrySeq():"object"==typeof Q?new Wt(Q):void 0;if(!Ee)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+Q);return Ee}function so(Q){var Ee=Ei(Q);if(!Ee)throw new TypeError("Expected Array or iterable object of values: "+Q);return Ee}function Ei(Q){return Or(Q)?new ht(Q):fn(Q)?new wn(Q):sn(Q)?new Tt(Q):void 0}function ii(Q,Ee,yt,Xe){var Gt=Q._cache;if(Gt){for(var An=Gt.length-1,kn=0;kn<=An;kn++){var Hr=Gt[yt?An-kn:kn];if(!1===Ee(Hr[1],Xe?Hr[0]:kn,Q))return kn+1}return kn}return Q.__iterateUncached(Ee,yt)}function mr(Q,Ee,yt,Xe){var Gt=Q._cache;if(Gt){var An=Gt.length-1,kn=0;return new Rn(function(){var Hr=Gt[yt?An-kn:kn];return kn++>An?{value:void 0,done:!0}:At(Ee,Xe?Hr[0]:kn-1,Hr[1])})}return Q.__iteratorUncached(Ee,yt)}function pr(Q,Ee){return Ee?Eo(Ee,Q,"",{"":Q}):po(Q)}function Eo(Q,Ee,yt,Xe){return Array.isArray(Ee)?Q.call(Xe,yt,Qr(Ee).map(function(Gt,An){return Eo(Q,Gt,An,Ee)})):$i(Ee)?Q.call(Xe,yt,ir(Ee).map(function(Gt,An){return Eo(Q,Gt,An,Ee)})):Ee}function po(Q){return Array.isArray(Q)?Qr(Q).map(po).toList():$i(Q)?ir(Q).map(po).toMap():Q}function $i(Q){return Q&&(Q.constructor===Object||void 0===Q.constructor)}function qr(Q,Ee){if(Q===Ee||Q!=Q&&Ee!=Ee)return!0;if(!Q||!Ee)return!1;if("function"==typeof Q.valueOf&&"function"==typeof Ee.valueOf){if((Q=Q.valueOf())===(Ee=Ee.valueOf())||Q!=Q&&Ee!=Ee)return!0;if(!Q||!Ee)return!1}return!("function"!=typeof Q.equals||"function"!=typeof Ee.equals||!Q.equals(Ee))}function Hi(Q,Ee){if(Q===Ee)return!0;if(!e(Ee)||void 0!==Q.size&&void 0!==Ee.size&&Q.size!==Ee.size||void 0!==Q.__hash&&void 0!==Ee.__hash&&Q.__hash!==Ee.__hash||f(Q)!==f(Ee)||m(Q)!==m(Ee)||M(Q)!==M(Ee))return!1;if(0===Q.size&&0===Ee.size)return!0;var yt=!T(Q);if(M(Q)){var Xe=Q.entries();return Ee.every(function(Xr,yr){var Rr=Xe.next().value;return Rr&&qr(Rr[1],Xr)&&(yt||qr(Rr[0],yr))})&&Xe.next().done}var Gt=!1;if(void 0===Q.size)if(void 0===Ee.size)"function"==typeof Q.cacheResult&&Q.cacheResult();else{Gt=!0;var An=Q;Q=Ee,Ee=An}var kn=!0,Hr=Ee.__iterate(function(Xr,yr){if(yt?!Q.has(Xr):Gt?!qr(Xr,Q.get(yr,de)):!qr(Q.get(yr,de),Xr))return kn=!1,!1});return kn&&Q.size===Hr}function Dn(Q,Ee){if(!(this instanceof Dn))return new Dn(Q,Ee);if(this._value=Q,this.size=void 0===Ee?1/0:Math.max(0,Ee),0===this.size){if(Hn)return Hn;Hn=this}}function jt(Q,Ee){if(!Q)throw new Error(Ee)}function Fe(Q,Ee,yt){if(!(this instanceof Fe))return new Fe(Q,Ee,yt);if(jt(0!==yt,"Cannot step a Range by 0"),Q=Q||0,void 0===Ee&&(Ee=1/0),yt=void 0===yt?1:Math.abs(yt),Ee<Q&&(yt=-yt),this._start=Q,this._end=Ee,this._step=yt,this.size=Math.max(0,Math.ceil((Ee-Q)/yt-1)+1),0===this.size){if(Ie)return Ie;Ie=this}}function et(){throw TypeError("Abstract")}function ze(){}function an(){}function lt(){}Lr.prototype[br]=!0,s(ht,Qr),ht.prototype.get=function(Q,Ee){return this.has(Q)?this._array[Et(this,Q)]:Ee},ht.prototype.__iterate=function(Q,Ee){for(var yt=this._array,Xe=yt.length-1,Gt=0;Gt<=Xe;Gt++)if(!1===Q(yt[Ee?Xe-Gt:Gt],Gt,this))return Gt+1;return Gt},ht.prototype.__iterator=function(Q,Ee){var yt=this._array,Xe=yt.length-1,Gt=0;return new Rn(function(){return Gt>Xe?{value:void 0,done:!0}:At(Q,Gt,yt[Ee?Xe-Gt++:Gt++])})},s(Wt,ir),Wt.prototype.get=function(Q,Ee){return void 0===Ee||this.has(Q)?this._object[Q]:Ee},Wt.prototype.has=function(Q){return this._object.hasOwnProperty(Q)},Wt.prototype.__iterate=function(Q,Ee){for(var yt=this._object,Xe=this._keys,Gt=Xe.length-1,An=0;An<=Gt;An++){var kn=Xe[Ee?Gt-An:An];if(!1===Q(yt[kn],kn,this))return An+1}return An},Wt.prototype.__iterator=function(Q,Ee){var yt=this._object,Xe=this._keys,Gt=Xe.length-1,An=0;return new Rn(function(){var kn=Xe[Ee?Gt-An:An];return An++>Gt?{value:void 0,done:!0}:At(Q,kn,yt[kn])})},Wt.prototype[W]=!0,s(Tt,Qr),Tt.prototype.__iterateUncached=function(Q,Ee){if(Ee)return this.cacheResult().__iterate(Q,Ee);var Xe=xn(this._iterable),Gt=0;if(fn(Xe))for(var An;!(An=Xe.next()).done&&!1!==Q(An.value,Gt++,this););return Gt},Tt.prototype.__iteratorUncached=function(Q,Ee){if(Ee)return this.cacheResult().__iterator(Q,Ee);var Xe=xn(this._iterable);if(!fn(Xe))return new Rn(qt);var Gt=0;return new Rn(function(){var An=Xe.next();return An.done?An:At(Q,Gt++,An.value)})},s(wn,Qr),wn.prototype.__iterateUncached=function(Q,Ee){if(Ee)return this.cacheResult().__iterate(Q,Ee);for(var yt=this._iterator,Xe=this._iteratorCache,Gt=0;Gt<Xe.length;)if(!1===Q(Xe[Gt],Gt++,this))return Gt;for(var An;!(An=yt.next()).done;){var kn=An.value;if(Xe[Gt]=kn,!1===Q(kn,Gt++,this))break}return Gt},wn.prototype.__iteratorUncached=function(Q,Ee){if(Ee)return this.cacheResult().__iterator(Q,Ee);var yt=this._iterator,Xe=this._iteratorCache,Gt=0;return new Rn(function(){if(Gt>=Xe.length){var An=yt.next();if(An.done)return An;Xe[Gt]=An.value}return At(Q,Gt,Xe[Gt++])})},s(Dn,Qr),Dn.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Dn.prototype.get=function(Q,Ee){return this.has(Q)?this._value:Ee},Dn.prototype.includes=function(Q){return qr(this._value,Q)},Dn.prototype.slice=function(Q,Ee){var yt=this.size;return ct(Q,Ee,yt)?this:new Dn(this._value,He(Ee,yt)-qe(Q,yt))},Dn.prototype.reverse=function(){return this},Dn.prototype.indexOf=function(Q){return qr(this._value,Q)?0:-1},Dn.prototype.lastIndexOf=function(Q){return qr(this._value,Q)?this.size:-1},Dn.prototype.__iterate=function(Q,Ee){for(var yt=0;yt<this.size;yt++)if(!1===Q(this._value,yt,this))return yt+1;return yt},Dn.prototype.__iterator=function(Q,Ee){var yt=this,Xe=0;return new Rn(function(){return Xe<yt.size?At(Q,Xe++,yt._value):{value:void 0,done:!0}})},Dn.prototype.equals=function(Q){return Q instanceof Dn?qr(this._value,Q._value):Hi(Q)},s(Fe,Qr),Fe.prototype.toString=function(){return 0===this.size?"Range []":"Range [ "+this._start+"..."+this._end+(1!==this._step?" by "+this._step:"")+" ]"},Fe.prototype.get=function(Q,Ee){return this.has(Q)?this._start+Et(this,Q)*this._step:Ee},Fe.prototype.includes=function(Q){var Ee=(Q-this._start)/this._step;return Ee>=0&&Ee<this.size&&Ee===Math.floor(Ee)},Fe.prototype.slice=function(Q,Ee){return ct(Q,Ee,this.size)?this:(Q=qe(Q,this.size),(Ee=He(Ee,this.size))<=Q?new Fe(0,0):new Fe(this.get(Q,this._end),this.get(Ee,this._end),this._step))},Fe.prototype.indexOf=function(Q){var Ee=Q-this._start;if(Ee%this._step==0){var yt=Ee/this._step;if(yt>=0&&yt<this.size)return yt}return-1},Fe.prototype.lastIndexOf=function(Q){return this.indexOf(Q)},Fe.prototype.__iterate=function(Q,Ee){for(var yt=this.size-1,Xe=this._step,Gt=Ee?this._start+yt*Xe:this._start,An=0;An<=yt;An++){if(!1===Q(Gt,An,this))return An+1;Gt+=Ee?-Xe:Xe}return An},Fe.prototype.__iterator=function(Q,Ee){var yt=this.size-1,Xe=this._step,Gt=Ee?this._start+yt*Xe:this._start,An=0;return new Rn(function(){var kn=Gt;return Gt+=Ee?-Xe:Xe,An>yt?{value:void 0,done:!0}:At(Q,An++,kn)})},Fe.prototype.equals=function(Q){return Q instanceof Fe?this._start===Q._start&&this._end===Q._end&&this._step===Q._step:Hi(this,Q)},s(et,r),s(ze,et),s(an,et),s(lt,et),et.Keyed=ze,et.Indexed=an,et.Set=lt;var Rt="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(Ee,yt){var Xe=65535&(Ee|=0),Gt=65535&(yt|=0);return Xe*Gt+((Ee>>>16)*Gt+Xe*(yt>>>16)<<16>>>0)|0};function Pe(Q){return Q>>>1&1073741824|3221225471&Q}function qn(Q){if(!1===Q||null==Q||"function"==typeof Q.valueOf&&(!1===(Q=Q.valueOf())||null==Q))return 0;if(!0===Q)return 1;var Ee=typeof Q;if("number"===Ee){if(Q!=Q||Q===1/0)return 0;var yt=0|Q;for(yt!==Q&&(yt^=4294967295*Q);Q>4294967295;)yt^=Q/=4294967295;return Pe(yt)}if("string"===Ee)return Q.length>Ot?function gr(Q){var Ee=Ti[Q];return void 0===Ee&&(Ee=Pn(Q),wr===mn&&(wr=0,Ti={}),wr++,Ti[Q]=Ee),Ee}(Q):Pn(Q);if("function"==typeof Q.hashCode)return Q.hashCode();if("object"===Ee)return function _r(Q){var Ee;if(nr&&void 0!==(Ee=Zt.get(Q))||void 0!==(Ee=Q[Ge])||!tr&&(void 0!==(Ee=Q.propertyIsEnumerable&&Q.propertyIsEnumerable[Ge])||void 0!==(Ee=function Zn(Q){if(Q&&Q.nodeType>0)switch(Q.nodeType){case 1:return Q.uniqueID;case 9:return Q.documentElement&&Q.documentElement.uniqueID}}(Q))))return Ee;if(Ee=++dn,1073741824&dn&&(dn=0),nr)Zt.set(Q,Ee);else{if(void 0!==Pr&&!1===Pr(Q))throw new Error("Non-extensible objects are not allowed as keys.");if(tr)Object.defineProperty(Q,Ge,{enumerable:!1,configurable:!1,writable:!1,value:Ee});else if(void 0!==Q.propertyIsEnumerable&&Q.propertyIsEnumerable===Q.constructor.prototype.propertyIsEnumerable)Q.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},Q.propertyIsEnumerable[Ge]=Ee;else{if(void 0===Q.nodeType)throw new Error("Unable to set a non-enumerable property on object.");Q[Ge]=Ee}}return Ee}(Q);if("function"==typeof Q.toString)return Pn(Q.toString());throw new Error("Value type "+Ee+" cannot be hashed.")}function Pn(Q){for(var Ee=0,yt=0;yt<Q.length;yt++)Ee=31*Ee+Q.charCodeAt(yt)|0;return Pe(Ee)}var Pr=Object.isExtensible,tr=function(){try{return Object.defineProperty({},"@",{}),!0}catch{return!1}}();var Zt,nr="function"==typeof WeakMap;nr&&(Zt=new WeakMap);var dn=0,Ge="__immutablehash__";"function"==typeof Symbol&&(Ge=Symbol(Ge));var Ot=16,mn=255,wr=0,Ti={};function Ci(Q){jt(Q!==1/0,"Cannot perform this action with an infinite size.")}function Ai(Q){return null==Q?Vt():Ko(Q)&&!M(Q)?Q:Vt().withMutations(function(Ee){var yt=a(Q);Ci(yt.size),yt.forEach(function(Xe,Gt){return Ee.set(Gt,Xe)})})}function Ko(Q){return!(!Q||!Q[_s])}s(Ai,ze),Ai.of=function(){var Q=C.call(arguments,0);return Vt().withMutations(function(Ee){for(var yt=0;yt<Q.length;yt+=2){if(yt+1>=Q.length)throw new Error("Missing value for key: "+Q[yt]);Ee.set(Q[yt],Q[yt+1])}})},Ai.prototype.toString=function(){return this.__toString("Map {","}")},Ai.prototype.get=function(Q,Ee){return this._root?this._root.get(0,void 0,Q,Ee):Ee},Ai.prototype.set=function(Q,Ee){return bn(this,Q,Ee)},Ai.prototype.setIn=function(Q,Ee){return this.updateIn(Q,de,function(){return Ee})},Ai.prototype.remove=function(Q){return bn(this,Q,de)},Ai.prototype.deleteIn=function(Q){return this.updateIn(Q,function(){return de})},Ai.prototype.update=function(Q,Ee,yt){return 1===arguments.length?Q(this):this.updateIn([Q],Ee,yt)},Ai.prototype.updateIn=function(Q,Ee,yt){yt||(yt=Ee,Ee=void 0);var Xe=la(this,$u(Q),Ee,yt);return Xe===de?void 0:Xe},Ai.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Vt()},Ai.prototype.merge=function(){return jo(this,void 0,arguments)},Ai.prototype.mergeWith=function(Q){return jo(this,Q,C.call(arguments,1))},Ai.prototype.mergeIn=function(Q){var Ee=C.call(arguments,1);return this.updateIn(Q,Vt(),function(yt){return"function"==typeof yt.merge?yt.merge.apply(yt,Ee):Ee[Ee.length-1]})},Ai.prototype.mergeDeep=function(){return jo(this,ss,arguments)},Ai.prototype.mergeDeepWith=function(Q){var Ee=C.call(arguments,1);return jo(this,gs(Q),Ee)},Ai.prototype.mergeDeepIn=function(Q){var Ee=C.call(arguments,1);return this.updateIn(Q,Vt(),function(yt){return"function"==typeof yt.mergeDeep?yt.mergeDeep.apply(yt,Ee):Ee[Ee.length-1]})},Ai.prototype.sort=function(Q){return ie(el(this,Q))},Ai.prototype.sortBy=function(Q,Ee){return ie(el(this,Ee,Q))},Ai.prototype.withMutations=function(Q){var Ee=this.asMutable();return Q(Ee),Ee.wasAltered()?Ee.__ensureOwner(this.__ownerID):this},Ai.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new Te)},Ai.prototype.asImmutable=function(){return this.__ensureOwner()},Ai.prototype.wasAltered=function(){return this.__altered},Ai.prototype.__iterator=function(Q,Ee){return new Vi(this,Q,Ee)},Ai.prototype.__iterate=function(Q,Ee){var yt=this,Xe=0;return this._root&&this._root.iterate(function(Gt){return Xe++,Q(Gt[1],Gt[0],yt)},Ee),Xe},Ai.prototype.__ensureOwner=function(Q){return Q===this.__ownerID?this:Q?Ir(this.size,this._root,Q,this.__hash):(this.__ownerID=Q,this.__altered=!1,this)},Ai.isMap=Ko;var ro,_s="@@__IMMUTABLE_MAP__@@",dr=Ai.prototype;function Ni(Q,Ee){this.ownerID=Q,this.entries=Ee}function ti(Q,Ee,yt){this.ownerID=Q,this.bitmap=Ee,this.nodes=yt}function Vr(Q,Ee,yt){this.ownerID=Q,this.count=Ee,this.nodes=yt}function wi(Q,Ee,yt){this.ownerID=Q,this.keyHash=Ee,this.entries=yt}function ji(Q,Ee,yt){this.ownerID=Q,this.keyHash=Ee,this.entry=yt}function Vi(Q,Ee,yt){this._type=Ee,this._reverse=yt,this._stack=Q._root&&ko(Q._root)}function Po(Q,Ee){return At(Q,Ee[0],Ee[1])}function ko(Q,Ee){return{node:Q,index:0,__prev:Ee}}function Ir(Q,Ee,yt,Xe){var Gt=Object.create(dr);return Gt.size=Q,Gt._root=Ee,Gt.__ownerID=yt,Gt.__hash=Xe,Gt.__altered=!1,Gt}function Vt(){return ro||(ro=Ir(0))}function bn(Q,Ee,yt){var Xe,Gt;if(Q._root){var An=se(V),kn=se(ce);if(Xe=Bn(Q._root,Q.__ownerID,0,void 0,Ee,yt,An,kn),!kn.value)return Q;Gt=Q.size+(An.value?yt===de?-1:1:0)}else{if(yt===de)return Q;Gt=1,Xe=new Ni(Q.__ownerID,[[Ee,yt]])}return Q.__ownerID?(Q.size=Gt,Q._root=Xe,Q.__hash=void 0,Q.__altered=!0,Q):Xe?Ir(Gt,Xe):Vt()}function Bn(Q,Ee,yt,Xe,Gt,An,kn,Hr){return Q?Q.update(Ee,yt,Xe,Gt,An,kn,Hr):An===de?Q:(fe(Hr),fe(kn),new ji(Ee,Xe,[Gt,An]))}function ci(Q){return Q.constructor===ji||Q.constructor===wi}function _o(Q,Ee,yt,Xe,Gt){if(Q.keyHash===Xe)return new wi(Ee,Xe,[Q.entry,Gt]);var Hr,An=(0===yt?Q.keyHash:Q.keyHash>>>yt)&X,kn=(0===yt?Xe:Xe>>>yt)&X;return new ti(Ee,1<<An|1<<kn,An===kn?[_o(Q,Ee,yt+J,Xe,Gt)]:(Hr=new ji(Ee,Xe,Gt),An<kn?[Q,Hr]:[Hr,Q]))}function jo(Q,Ee,yt){for(var Xe=[],Gt=0;Gt<yt.length;Gt++){var An=yt[Gt],kn=a(An);e(An)||(kn=kn.map(function(Hr){return pr(Hr)})),Xe.push(kn)}return Is(Q,Ee,Xe)}function ss(Q,Ee,yt){return Q&&Q.mergeDeep&&e(Ee)?Q.mergeDeep(Ee):qr(Q,Ee)?Q:Ee}function gs(Q){return function(Ee,yt,Xe){if(Ee&&Ee.mergeDeepWith&&e(yt))return Ee.mergeDeepWith(Q,yt);var Gt=Q(Ee,yt,Xe);return qr(Ee,Gt)?Ee:Gt}}function Is(Q,Ee,yt){return 0===(yt=yt.filter(function(Xe){return 0!==Xe.size})).length?Q:0!==Q.size||Q.__ownerID||1!==yt.length?Q.withMutations(function(Xe){for(var Gt=Ee?function(kn,Hr){Xe.update(Hr,de,function(Xr){return Xr===de?kn:Ee(Xr,kn,Hr)})}:function(kn,Hr){Xe.set(Hr,kn)},An=0;An<yt.length;An++)yt[An].forEach(Gt)}):Q.constructor(yt[0])}function la(Q,Ee,yt,Xe){var Gt=Q===de,An=Ee.next();if(An.done){var kn=Gt?yt:Q,Hr=Xe(kn);return Hr===kn?Q:Hr}jt(Gt||Q&&Q.set,"invalid keyPath");var Xr=An.value,yr=Gt?de:Q.get(Xr,de),Rr=la(yr,Ee,yt,Xe);return Rr===yr?Q:Rr===de?Q.remove(Xr):(Gt?Vt():Q).set(Xr,Rr)}function Ro(Q){return Q=(Q=(858993459&(Q-=Q>>1&1431655765))+(Q>>2&858993459))+(Q>>4)&252645135,127&(Q+=Q>>8)+(Q>>16)}function jl(Q,Ee,yt,Xe){var Gt=Xe?Q:$e(Q);return Gt[Ee]=yt,Gt}dr[_s]=!0,dr[$]=dr.remove,dr.removeIn=dr.deleteIn,Ni.prototype.get=function(Q,Ee,yt,Xe){for(var Gt=this.entries,An=0,kn=Gt.length;An<kn;An++)if(qr(yt,Gt[An][0]))return Gt[An][1];return Xe},Ni.prototype.update=function(Q,Ee,yt,Xe,Gt,An,kn){for(var Hr=Gt===de,Xr=this.entries,yr=0,Rr=Xr.length;yr<Rr&&!qr(Xe,Xr[yr][0]);yr++);var Go=yr<Rr;if(Go?Xr[yr][1]===Gt:Hr)return this;if(fe(kn),(Hr||!Go)&&fe(An),!Hr||1!==Xr.length){if(!Go&&!Hr&&Xr.length>=da)return function go(Q,Ee,yt,Xe){Q||(Q=new Te);for(var Gt=new ji(Q,qn(yt),[yt,Xe]),An=0;An<Ee.length;An++){var kn=Ee[An];Gt=Gt.update(Q,0,void 0,kn[0],kn[1])}return Gt}(Q,Xr,Xe,Gt);var Io=Q&&Q===this.ownerID,Qn=Io?Xr:$e(Xr);return Go?Hr?yr===Rr-1?Qn.pop():Qn[yr]=Qn.pop():Qn[yr]=[Xe,Gt]:Qn.push([Xe,Gt]),Io?(this.entries=Qn,this):new Ni(Q,Qn)}},ti.prototype.get=function(Q,Ee,yt,Xe){void 0===Ee&&(Ee=qn(yt));var Gt=1<<((0===Q?Ee:Ee>>>Q)&X),An=this.bitmap;return An&Gt?this.nodes[Ro(An&Gt-1)].get(Q+J,Ee,yt,Xe):Xe},ti.prototype.update=function(Q,Ee,yt,Xe,Gt,An,kn){void 0===yt&&(yt=qn(Xe));var Hr=(0===Ee?yt:yt>>>Ee)&X,Xr=1<<Hr,yr=this.bitmap,Rr=0!=(yr&Xr);if(!Rr&&Gt===de)return this;var Go=Ro(yr&Xr-1),Io=this.nodes,Qn=Rr?Io[Go]:void 0,Gr=Bn(Qn,Q,Ee+J,yt,Xe,Gt,An,kn);if(Gr===Qn)return this;if(!Rr&&Gr&&Io.length>=$a)return function ts(Q,Ee,yt,Xe,Gt){for(var An=0,kn=new Array(F),Hr=0;0!==yt;Hr++,yt>>>=1)kn[Hr]=1&yt?Ee[An++]:void 0;return kn[Xe]=Gt,new Vr(Q,An+1,kn)}(Q,Io,yr,Hr,Gr);if(Rr&&!Gr&&2===Io.length&&ci(Io[1^Go]))return Io[1^Go];if(Rr&&Gr&&1===Io.length&&ci(Gr))return Gr;var Fr=Q&&Q===this.ownerID,Ui=Rr?Gr?yr:yr^Xr:yr|Xr,Do=Rr?Gr?jl(Io,Go,Gr,Fr):function qa(Q,Ee,yt){var Xe=Q.length-1;if(yt&&Ee===Xe)return Q.pop(),Q;for(var Gt=new Array(Xe),An=0,kn=0;kn<Xe;kn++)kn===Ee&&(An=1),Gt[kn]=Q[kn+An];return Gt}(Io,Go,Fr):function gl(Q,Ee,yt,Xe){var Gt=Q.length+1;if(Xe&&Ee+1===Gt)return Q[Ee]=yt,Q;for(var An=new Array(Gt),kn=0,Hr=0;Hr<Gt;Hr++)Hr===Ee?(An[Hr]=yt,kn=-1):An[Hr]=Q[Hr+kn];return An}(Io,Go,Gr,Fr);return Fr?(this.bitmap=Ui,this.nodes=Do,this):new ti(Q,Ui,Do)},Vr.prototype.get=function(Q,Ee,yt,Xe){void 0===Ee&&(Ee=qn(yt));var An=this.nodes[(0===Q?Ee:Ee>>>Q)&X];return An?An.get(Q+J,Ee,yt,Xe):Xe},Vr.prototype.update=function(Q,Ee,yt,Xe,Gt,An,kn){void 0===yt&&(yt=qn(Xe));var Hr=(0===Ee?yt:yt>>>Ee)&X,yr=this.nodes,Rr=yr[Hr];if(Gt===de&&!Rr)return this;var Go=Bn(Rr,Q,Ee+J,yt,Xe,Gt,An,kn);if(Go===Rr)return this;var Io=this.count;if(Rr){if(!Go&&--Io<Rl)return function es(Q,Ee,yt,Xe){for(var Gt=0,An=0,kn=new Array(yt),Hr=0,Xr=1,yr=Ee.length;Hr<yr;Hr++,Xr<<=1){var Rr=Ee[Hr];void 0!==Rr&&Hr!==Xe&&(Gt|=Xr,kn[An++]=Rr)}return new ti(Q,Gt,kn)}(Q,yr,Io,Hr)}else Io++;var Qn=Q&&Q===this.ownerID,Gr=jl(yr,Hr,Go,Qn);return Qn?(this.count=Io,this.nodes=Gr,this):new Vr(Q,Io,Gr)},wi.prototype.get=function(Q,Ee,yt,Xe){for(var Gt=this.entries,An=0,kn=Gt.length;An<kn;An++)if(qr(yt,Gt[An][0]))return Gt[An][1];return Xe},wi.prototype.update=function(Q,Ee,yt,Xe,Gt,An,kn){void 0===yt&&(yt=qn(Xe));var Hr=Gt===de;if(yt!==this.keyHash)return Hr?this:(fe(kn),fe(An),_o(this,Q,Ee,yt,[Xe,Gt]));for(var Xr=this.entries,yr=0,Rr=Xr.length;yr<Rr&&!qr(Xe,Xr[yr][0]);yr++);var Go=yr<Rr;if(Go?Xr[yr][1]===Gt:Hr)return this;if(fe(kn),(Hr||!Go)&&fe(An),Hr&&2===Rr)return new ji(Q,this.keyHash,Xr[1^yr]);var Io=Q&&Q===this.ownerID,Qn=Io?Xr:$e(Xr);return Go?Hr?yr===Rr-1?Qn.pop():Qn[yr]=Qn.pop():Qn[yr]=[Xe,Gt]:Qn.push([Xe,Gt]),Io?(this.entries=Qn,this):new wi(Q,this.keyHash,Qn)},ji.prototype.get=function(Q,Ee,yt,Xe){return qr(yt,this.entry[0])?this.entry[1]:Xe},ji.prototype.update=function(Q,Ee,yt,Xe,Gt,An,kn){var Hr=Gt===de,Xr=qr(Xe,this.entry[0]);return(Xr?Gt===this.entry[1]:Hr)?this:(fe(kn),Hr?void fe(An):Xr?Q&&Q===this.ownerID?(this.entry[1]=Gt,this):new ji(Q,this.keyHash,[Xe,Gt]):(fe(An),_o(this,Q,Ee,qn(Xe),[Xe,Gt])))},Ni.prototype.iterate=wi.prototype.iterate=function(Q,Ee){for(var yt=this.entries,Xe=0,Gt=yt.length-1;Xe<=Gt;Xe++)if(!1===Q(yt[Ee?Gt-Xe:Xe]))return!1},ti.prototype.iterate=Vr.prototype.iterate=function(Q,Ee){for(var yt=this.nodes,Xe=0,Gt=yt.length-1;Xe<=Gt;Xe++){var An=yt[Ee?Gt-Xe:Xe];if(An&&!1===An.iterate(Q,Ee))return!1}},ji.prototype.iterate=function(Q,Ee){return Q(this.entry)},s(Vi,Rn),Vi.prototype.next=function(){for(var Q=this._type,Ee=this._stack;Ee;){var Gt,yt=Ee.node,Xe=Ee.index++;if(yt.entry){if(0===Xe)return Po(Q,yt.entry)}else if(yt.entries){if(Xe<=(Gt=yt.entries.length-1))return Po(Q,yt.entries[this._reverse?Gt-Xe:Xe])}else if(Xe<=(Gt=yt.nodes.length-1)){var An=yt.nodes[this._reverse?Gt-Xe:Xe];if(An){if(An.entry)return Po(Q,An.entry);Ee=this._stack=ko(An,Ee)}continue}Ee=this._stack=this._stack.__prev}return{value:void 0,done:!0}};var da=F/4,$a=F/2,Rl=F/4;function Ji(Q){var Ee=No();if(null==Q)return Ee;if(Ha(Q))return Q;var yt=c(Q),Xe=yt.size;return 0===Xe?Ee:(Ci(Xe),Xe>0&&Xe<F?fa(0,Xe,J,null,new $s(yt.toArray())):Ee.withMutations(function(Gt){Gt.setSize(Xe),yt.forEach(function(An,kn){return Gt.set(kn,An)})}))}function Ha(Q){return!(!Q||!Q[Ts])}s(Ji,an),Ji.of=function(){return this(arguments)},Ji.prototype.toString=function(){return this.__toString("List [","]")},Ji.prototype.get=function(Q,Ee){if((Q=Et(this,Q))>=0&&Q<this.size){var yt=zr(this,Q+=this._origin);return yt&&yt.array[Q&X]}return Ee},Ji.prototype.set=function(Q,Ee){return function Cs(Q,Ee,yt){if((Ee=Et(Q,Ee))!=Ee)return Q;if(Ee>=Q.size||Ee<0)return Q.withMutations(function(kn){Ee<0?io(kn,Ee).set(0,yt):io(kn,0,Ee+1).set(Ee,yt)});Ee+=Q._origin;var Xe=Q._tail,Gt=Q._root,An=se(ce);return Ee>=Tn(Q._capacity)?Xe=ns(Xe,Q.__ownerID,0,Ee,yt,An):Gt=ns(Gt,Q.__ownerID,Q._level,Ee,yt,An),An.value?Q.__ownerID?(Q._root=Gt,Q._tail=Xe,Q.__hash=void 0,Q.__altered=!0,Q):fa(Q._origin,Q._capacity,Q._level,Gt,Xe):Q}(this,Q,Ee)},Ji.prototype.remove=function(Q){return this.has(Q)?0===Q?this.shift():Q===this.size-1?this.pop():this.splice(Q,1):this},Ji.prototype.insert=function(Q,Ee){return this.splice(Q,0,Ee)},Ji.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=J,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):No()},Ji.prototype.push=function(){var Q=arguments,Ee=this.size;return this.withMutations(function(yt){io(yt,0,Ee+Q.length);for(var Xe=0;Xe<Q.length;Xe++)yt.set(Ee+Xe,Q[Xe])})},Ji.prototype.pop=function(){return io(this,0,-1)},Ji.prototype.unshift=function(){var Q=arguments;return this.withMutations(function(Ee){io(Ee,-Q.length);for(var yt=0;yt<Q.length;yt++)Ee.set(yt,Q[yt])})},Ji.prototype.shift=function(){return io(this,1)},Ji.prototype.merge=function(){return gt(this,void 0,arguments)},Ji.prototype.mergeWith=function(Q){return gt(this,Q,C.call(arguments,1))},Ji.prototype.mergeDeep=function(){return gt(this,ss,arguments)},Ji.prototype.mergeDeepWith=function(Q){var Ee=C.call(arguments,1);return gt(this,gs(Q),Ee)},Ji.prototype.setSize=function(Q){return io(this,0,Q)},Ji.prototype.slice=function(Q,Ee){var yt=this.size;return ct(Q,Ee,yt)?this:io(this,qe(Q,yt),He(Ee,yt))},Ji.prototype.__iterator=function(Q,Ee){var yt=0,Xe=Ja(this,Ee);return new Rn(function(){var Gt=Xe();return Gt===Aa?{value:void 0,done:!0}:At(Q,yt++,Gt)})},Ji.prototype.__iterate=function(Q,Ee){for(var Gt,yt=0,Xe=Ja(this,Ee);(Gt=Xe())!==Aa&&!1!==Q(Gt,yt++,this););return yt},Ji.prototype.__ensureOwner=function(Q){return Q===this.__ownerID?this:Q?fa(this._origin,this._capacity,this._level,this._root,this._tail,Q,this.__hash):(this.__ownerID=Q,this)},Ji.isList=Ha;var Ts="@@__IMMUTABLE_LIST__@@",hs=Ji.prototype;function $s(Q,Ee){this.array=Q,this.ownerID=Ee}hs[Ts]=!0,hs[$]=hs.remove,hs.setIn=dr.setIn,hs.deleteIn=hs.removeIn=dr.removeIn,hs.update=dr.update,hs.updateIn=dr.updateIn,hs.mergeIn=dr.mergeIn,hs.mergeDeepIn=dr.mergeDeepIn,hs.withMutations=dr.withMutations,hs.asMutable=dr.asMutable,hs.asImmutable=dr.asImmutable,hs.wasAltered=dr.wasAltered,$s.prototype.removeBefore=function(Q,Ee,yt){if(yt===Ee?1<<Ee:0===this.array.length)return this;var Xe=yt>>>Ee&X;if(Xe>=this.array.length)return new $s([],Q);var An,Gt=0===Xe;if(Ee>0){var kn=this.array[Xe];if((An=kn&&kn.removeBefore(Q,Ee-J,yt))===kn&&Gt)return this}if(Gt&&!An)return this;var Hr=Fo(this,Q);if(!Gt)for(var Xr=0;Xr<Xe;Xr++)Hr.array[Xr]=void 0;return An&&(Hr.array[Xe]=An),Hr},$s.prototype.removeAfter=function(Q,Ee,yt){if(yt===(Ee?1<<Ee:0)||0===this.array.length)return this;var Gt,Xe=yt-1>>>Ee&X;if(Xe>=this.array.length)return this;if(Ee>0){var An=this.array[Xe];if((Gt=An&&An.removeAfter(Q,Ee-J,yt))===An&&Xe===this.array.length-1)return this}var kn=Fo(this,Q);return kn.array.splice(Xe+1),Gt&&(kn.array[Xe]=Gt),kn};var Xo,gn,Aa={};function Ja(Q,Ee){var yt=Q._origin,Xe=Q._capacity,Gt=Tn(Xe),An=Q._tail;return kn(Q._root,Q._level,0);function kn(yr,Rr,Go){return 0===Rr?function Hr(yr,Rr){var Go=Rr===Gt?An&&An.array:yr&&yr.array,Io=Rr>yt?0:yt-Rr,Qn=Xe-Rr;return Qn>F&&(Qn=F),function(){if(Io===Qn)return Aa;var Gr=Ee?--Qn:Io++;return Go&&Go[Gr]}}(yr,Go):function Xr(yr,Rr,Go){var Io,Qn=yr&&yr.array,Gr=Go>yt?0:yt-Go>>Rr,Fr=1+(Xe-Go>>Rr);return Fr>F&&(Fr=F),function(){for(;;){if(Io){var Ui=Io();if(Ui!==Aa)return Ui;Io=null}if(Gr===Fr)return Aa;var Do=Ee?--Fr:Gr++;Io=kn(Qn&&Qn[Do],Rr-J,Go+(Do<<Rr))}}}(yr,Rr,Go)}}function fa(Q,Ee,yt,Xe,Gt,An,kn){var Hr=Object.create(hs);return Hr.size=Ee-Q,Hr._origin=Q,Hr._capacity=Ee,Hr._level=yt,Hr._root=Xe,Hr._tail=Gt,Hr.__ownerID=An,Hr.__hash=kn,Hr.__altered=!1,Hr}function No(){return Xo||(Xo=fa(0,0,J))}function ns(Q,Ee,yt,Xe,Gt,An){var Xr,kn=Xe>>>yt&X,Hr=Q&&kn<Q.array.length;if(!Hr&&void 0===Gt)return Q;if(yt>0){var yr=Q&&Q.array[kn],Rr=ns(yr,Ee,yt-J,Xe,Gt,An);return Rr===yr?Q:((Xr=Fo(Q,Ee)).array[kn]=Rr,Xr)}return Hr&&Q.array[kn]===Gt?Q:(fe(An),Xr=Fo(Q,Ee),void 0===Gt&&kn===Xr.array.length-1?Xr.array.pop():Xr.array[kn]=Gt,Xr)}function Fo(Q,Ee){return Ee&&Q&&Ee===Q.ownerID?Q:new $s(Q?Q.array.slice():[],Ee)}function zr(Q,Ee){if(Ee>=Tn(Q._capacity))return Q._tail;if(Ee<1<<Q._level+J){for(var yt=Q._root,Xe=Q._level;yt&&Xe>0;)yt=yt.array[Ee>>>Xe&X],Xe-=J;return yt}}function io(Q,Ee,yt){void 0!==Ee&&(Ee|=0),void 0!==yt&&(yt|=0);var Xe=Q.__ownerID||new Te,Gt=Q._origin,An=Q._capacity,kn=Gt+Ee,Hr=void 0===yt?An:yt<0?An+yt:Gt+yt;if(kn===Gt&&Hr===An)return Q;if(kn>=Hr)return Q.clear();for(var Xr=Q._level,yr=Q._root,Rr=0;kn+Rr<0;)yr=new $s(yr&&yr.array.length?[void 0,yr]:[],Xe),Rr+=1<<(Xr+=J);Rr&&(kn+=Rr,Gt+=Rr,Hr+=Rr,An+=Rr);for(var Go=Tn(An),Io=Tn(Hr);Io>=1<<Xr+J;)yr=new $s(yr&&yr.array.length?[yr]:[],Xe),Xr+=J;var Qn=Q._tail,Gr=Io<Go?zr(Q,Hr-1):Io>Go?new $s([],Xe):Qn;if(Qn&&Io>Go&&kn<An&&Qn.array.length){for(var Fr=yr=Fo(yr,Xe),Ui=Xr;Ui>J;Ui-=J){var Do=Go>>>Ui&X;Fr=Fr.array[Do]=Fo(Fr.array[Do],Xe)}Fr.array[Go>>>J&X]=Qn}if(Hr<An&&(Gr=Gr&&Gr.removeAfter(Xe,0,Hr)),kn>=Io)kn-=Io,Hr-=Io,Xr=J,yr=null,Gr=Gr&&Gr.removeBefore(Xe,0,kn);else if(kn>Gt||Io<Go){for(Rr=0;yr;){var Fa=kn>>>Xr&X;if(Fa!==Io>>>Xr&X)break;Fa&&(Rr+=(1<<Xr)*Fa),Xr-=J,yr=yr.array[Fa]}yr&&kn>Gt&&(yr=yr.removeBefore(Xe,Xr,kn-Rr)),yr&&Io<Go&&(yr=yr.removeAfter(Xe,Xr,Io-Rr)),Rr&&(kn-=Rr,Hr-=Rr)}return Q.__ownerID?(Q.size=Hr-kn,Q._origin=kn,Q._capacity=Hr,Q._level=Xr,Q._root=yr,Q._tail=Gr,Q.__hash=void 0,Q.__altered=!0,Q):fa(kn,Hr,Xr,yr,Gr)}function gt(Q,Ee,yt){for(var Xe=[],Gt=0,An=0;An<yt.length;An++){var kn=yt[An],Hr=c(kn);Hr.size>Gt&&(Gt=Hr.size),e(kn)||(Hr=Hr.map(function(Xr){return pr(Xr)})),Xe.push(Hr)}return Gt>Q.size&&(Q=Q.setSize(Gt)),Is(Q,Ee,Xe)}function Tn(Q){return Q<F?0:Q-1>>>J<<J}function ie(Q){return null==Q?vi():Ze(Q)?Q:vi().withMutations(function(Ee){var yt=a(Q);Ci(yt.size),yt.forEach(function(Xe,Gt){return Ee.set(Gt,Xe)})})}function Ze(Q){return Ko(Q)&&M(Q)}function Jt(Q,Ee,yt,Xe){var Gt=Object.create(ie.prototype);return Gt.size=Q?Q.size:0,Gt._map=Q,Gt._list=Ee,Gt.__ownerID=yt,Gt.__hash=Xe,Gt}function vi(){return gn||(gn=Jt(Vt(),No()))}function Bi(Q,Ee,yt){var Hr,Xr,Xe=Q._map,Gt=Q._list,An=Xe.get(Ee),kn=void 0!==An;if(yt===de){if(!kn)return Q;Gt.size>=F&&Gt.size>=2*Xe.size?(Hr=(Xr=Gt.filter(function(yr,Rr){return void 0!==yr&&An!==Rr})).toKeyedSeq().map(function(yr){return yr[0]}).flip().toMap(),Q.__ownerID&&(Hr.__ownerID=Xr.__ownerID=Q.__ownerID)):(Hr=Xe.remove(Ee),Xr=An===Gt.size-1?Gt.pop():Gt.set(An,void 0))}else if(kn){if(yt===Gt.get(An)[1])return Q;Hr=Xe,Xr=Gt.set(An,[Ee,yt])}else Hr=Xe.set(Ee,Gt.size),Xr=Gt.set(Gt.size,[Ee,yt]);return Q.__ownerID?(Q.size=Hr.size,Q._map=Hr,Q._list=Xr,Q.__hash=void 0,Q):Jt(Hr,Xr)}function Xi(Q,Ee){this._iter=Q,this._useKeys=Ee,this.size=Q.size}function ws(Q){this._iter=Q,this.size=Q.size}function ds(Q){this._iter=Q,this.size=Q.size}function qs(Q){this._iter=Q,this.size=Q.size}function Js(Q){var Ee=El(Q);return Ee._iter=Q,Ee.size=Q.size,Ee.flip=function(){return Q},Ee.reverse=function(){var yt=Q.reverse.apply(this);return yt.flip=function(){return Q.reverse()},yt},Ee.has=function(yt){return Q.includes(yt)},Ee.includes=function(yt){return Q.has(yt)},Ee.cacheResult=uu,Ee.__iterateUncached=function(yt,Xe){var Gt=this;return Q.__iterate(function(An,kn){return!1!==yt(kn,An,Gt)},Xe)},Ee.__iteratorUncached=function(yt,Xe){if(yt===it){var Gt=Q.__iterator(yt,Xe);return new Rn(function(){var An=Gt.next();if(!An.done){var kn=An.value[0];An.value[0]=An.value[1],An.value[1]=kn}return An})}return Q.__iterator(yt===Pt?Le:Pt,Xe)},Ee}function Ll(Q,Ee,yt){var Xe=El(Q);return Xe.size=Q.size,Xe.has=function(Gt){return Q.has(Gt)},Xe.get=function(Gt,An){var kn=Q.get(Gt,de);return kn===de?An:Ee.call(yt,kn,Gt,Q)},Xe.__iterateUncached=function(Gt,An){var kn=this;return Q.__iterate(function(Hr,Xr,yr){return!1!==Gt(Ee.call(yt,Hr,Xr,yr),Xr,kn)},An)},Xe.__iteratorUncached=function(Gt,An){var kn=Q.__iterator(it,An);return new Rn(function(){var Hr=kn.next();if(Hr.done)return Hr;var Xr=Hr.value,yr=Xr[0];return At(Gt,yr,Ee.call(yt,Xr[1],yr,Q),Hr)})},Xe}function vl(Q,Ee){var yt=El(Q);return yt._iter=Q,yt.size=Q.size,yt.reverse=function(){return Q},Q.flip&&(yt.flip=function(){var Xe=Js(Q);return Xe.reverse=function(){return Q.flip()},Xe}),yt.get=function(Xe,Gt){return Q.get(Ee?Xe:-1-Xe,Gt)},yt.has=function(Xe){return Q.has(Ee?Xe:-1-Xe)},yt.includes=function(Xe){return Q.includes(Xe)},yt.cacheResult=uu,yt.__iterate=function(Xe,Gt){var An=this;return Q.__iterate(function(kn,Hr){return Xe(kn,Hr,An)},!Gt)},yt.__iterator=function(Xe,Gt){return Q.__iterator(Xe,!Gt)},yt}function Yu(Q,Ee,yt,Xe){var Gt=El(Q);return Xe&&(Gt.has=function(An){var kn=Q.get(An,de);return kn!==de&&!!Ee.call(yt,kn,An,Q)},Gt.get=function(An,kn){var Hr=Q.get(An,de);return Hr!==de&&Ee.call(yt,Hr,An,Q)?Hr:kn}),Gt.__iterateUncached=function(An,kn){var Hr=this,Xr=0;return Q.__iterate(function(yr,Rr,Go){if(Ee.call(yt,yr,Rr,Go))return Xr++,An(yr,Xe?Rr:Xr-1,Hr)},kn),Xr},Gt.__iteratorUncached=function(An,kn){var Hr=Q.__iterator(it,kn),Xr=0;return new Rn(function(){for(;;){var yr=Hr.next();if(yr.done)return yr;var Rr=yr.value,Go=Rr[0],Io=Rr[1];if(Ee.call(yt,Io,Go,Q))return At(An,Xe?Go:Xr++,Io,yr)}})},Gt}function Ol(Q,Ee,yt,Xe){var Gt=Q.size;if(void 0!==Ee&&(Ee|=0),void 0!==yt&&(yt===1/0?yt=Gt:yt|=0),ct(Ee,yt,Gt))return Q;var An=qe(Ee,Gt),kn=He(yt,Gt);if(An!=An||kn!=kn)return Ol(Q.toSeq().cacheResult(),Ee,yt,Xe);var Xr,Hr=kn-An;Hr==Hr&&(Xr=Hr<0?0:Hr);var yr=El(Q);return yr.size=0===Xr?Xr:Q.size&&Xr||void 0,!Xe&&jn(Q)&&Xr>=0&&(yr.get=function(Rr,Go){return(Rr=Et(this,Rr))>=0&&Rr<Xr?Q.get(Rr+An,Go):Go}),yr.__iterateUncached=function(Rr,Go){var Io=this;if(0===Xr)return 0;if(Go)return this.cacheResult().__iterate(Rr,Go);var Qn=0,Gr=!0,Fr=0;return Q.__iterate(function(Ui,Do){if(!Gr||!(Gr=Qn++<An))return Fr++,!1!==Rr(Ui,Xe?Do:Fr-1,Io)&&Fr!==Xr}),Fr},yr.__iteratorUncached=function(Rr,Go){if(0!==Xr&&Go)return this.cacheResult().__iterator(Rr,Go);var Io=0!==Xr&&Q.__iterator(Rr,Go),Qn=0,Gr=0;return new Rn(function(){for(;Qn++<An;)Io.next();if(++Gr>Xr)return{value:void 0,done:!0};var Fr=Io.next();return Xe||Rr===Pt?Fr:At(Rr,Gr-1,Rr===Le?void 0:Fr.value[1],Fr)})},yr}function yl(Q,Ee,yt,Xe){var Gt=El(Q);return Gt.__iterateUncached=function(An,kn){var Hr=this;if(kn)return this.cacheResult().__iterate(An,kn);var Xr=!0,yr=0;return Q.__iterate(function(Rr,Go,Io){if(!Xr||!(Xr=Ee.call(yt,Rr,Go,Io)))return yr++,An(Rr,Xe?Go:yr-1,Hr)}),yr},Gt.__iteratorUncached=function(An,kn){var Hr=this;if(kn)return this.cacheResult().__iterator(An,kn);var Xr=Q.__iterator(it,kn),yr=!0,Rr=0;return new Rn(function(){var Go,Io,Qn;do{if((Go=Xr.next()).done)return Xe||An===Pt?Go:At(An,Rr++,An===Le?void 0:Go.value[1],Go);var Gr=Go.value;Io=Gr[0],Qn=Gr[1],yr&&(yr=Ee.call(yt,Qn,Io,Hr))}while(yr);return An===it?Go:At(An,Io,Qn,Go)})},Gt}function Da(Q,Ee,yt){var Xe=El(Q);return Xe.__iterateUncached=function(Gt,An){var kn=0,Hr=!1;return function Xr(yr,Rr){var Go=this;yr.__iterate(function(Io,Qn){return(!Ee||Rr<Ee)&&e(Io)?Xr(Io,Rr+1):!1===Gt(Io,yt?Qn:kn++,Go)&&(Hr=!0),!Hr},An)}(Q,0),kn},Xe.__iteratorUncached=function(Gt,An){var kn=Q.__iterator(Gt,An),Hr=[],Xr=0;return new Rn(function(){for(;kn;){var yr=kn.next();if(!1===yr.done){var Rr=yr.value;if(Gt===it&&(Rr=Rr[1]),Ee&&!(Hr.length<Ee)||!e(Rr))return yt?yr:At(Gt,Xr++,Rr,yr);Hr.push(kn),kn=Rr.__iterator(Gt,An)}else kn=Hr.pop()}return{value:void 0,done:!0}})},Xe}function el(Q,Ee,yt){Ee||(Ee=Eu);var Xe=f(Q),Gt=0,An=Q.toSeq().map(function(kn,Hr){return[Hr,kn,Gt++,yt?yt(kn,Hr,Q):kn]}).toArray();return An.sort(function(kn,Hr){return Ee(kn[3],Hr[3])||kn[2]-Hr[2]}).forEach(Xe?function(kn,Hr){An[Hr].length=2}:function(kn,Hr){An[Hr]=kn[1]}),Xe?ir(An):m(Q)?Qr(An):jr(An)}function oc(Q,Ee,yt){if(Ee||(Ee=Eu),yt){var Xe=Q.toSeq().map(function(Gt,An){return[Gt,yt(Gt,An,Q)]}).reduce(function(Gt,An){return Xl(Ee,Gt[1],An[1])?An:Gt});return Xe&&Xe[0]}return Q.reduce(function(Gt,An){return Xl(Ee,Gt,An)?An:Gt})}function Xl(Q,Ee,yt){var Xe=Q(yt,Ee);return 0===Xe&&yt!==Ee&&(null==yt||yt!=yt)||Xe>0}function Ic(Q,Ee,yt){var Xe=El(Q);return Xe.size=new ht(yt).map(function(Gt){return Gt.size}).min(),Xe.__iterate=function(Gt,An){for(var Hr,kn=this.__iterator(Pt,An),Xr=0;!(Hr=kn.next()).done&&!1!==Gt(Hr.value,Xr++,this););return Xr},Xe.__iteratorUncached=function(Gt,An){var kn=yt.map(function(yr){return yr=r(yr),xn(An?yr.reverse():yr)}),Hr=0,Xr=!1;return new Rn(function(){var yr;return Xr||(yr=kn.map(function(Rr){return Rr.next()}),Xr=yr.some(function(Rr){return Rr.done})),Xr?{value:void 0,done:!0}:At(Gt,Hr++,Ee.apply(null,yr.map(function(Rr){return Rr.value})))})},Xe}function Gs(Q,Ee){return jn(Q)?Ee:Q.constructor(Ee)}function ku(Q){if(Q!==Object(Q))throw new TypeError("Expected [K, V] tuple: "+Q)}function zu(Q){return Ci(Q.size),ge(Q)}function ua(Q){return f(Q)?a:m(Q)?c:u}function El(Q){return Object.create((f(Q)?ir:m(Q)?Qr:jr).prototype)}function uu(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):Lr.prototype.cacheResult.call(this)}function Eu(Q,Ee){return Q>Ee?1:Q<Ee?-1:0}function $u(Q){var Ee=xn(Q);if(!Ee){if(!Or(Q))throw new TypeError("Expected iterable or array-like: "+Q);Ee=xn(r(Q))}return Ee}function Ba(Q,Ee){var yt,Xe=function(kn){if(kn instanceof Xe)return kn;if(!(this instanceof Xe))return new Xe(kn);if(!yt){yt=!0;var Hr=Object.keys(Q);(function dc(Q,Ee){try{Ee.forEach(cu.bind(void 0,Q))}catch{}})(Gt,Hr),Gt.size=Hr.length,Gt._name=Ee,Gt._keys=Hr,Gt._defaultValues=Q}this._map=Ai(kn)},Gt=Xe.prototype=Object.create(Tl);return Gt.constructor=Xe,Xe}s(ie,Ai),ie.of=function(){return this(arguments)},ie.prototype.toString=function(){return this.__toString("OrderedMap {","}")},ie.prototype.get=function(Q,Ee){var yt=this._map.get(Q);return void 0!==yt?this._list.get(yt)[1]:Ee},ie.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):vi()},ie.prototype.set=function(Q,Ee){return Bi(this,Q,Ee)},ie.prototype.remove=function(Q){return Bi(this,Q,de)},ie.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},ie.prototype.__iterate=function(Q,Ee){var yt=this;return this._list.__iterate(function(Xe){return Xe&&Q(Xe[1],Xe[0],yt)},Ee)},ie.prototype.__iterator=function(Q,Ee){return this._list.fromEntrySeq().__iterator(Q,Ee)},ie.prototype.__ensureOwner=function(Q){if(Q===this.__ownerID)return this;var Ee=this._map.__ensureOwner(Q),yt=this._list.__ensureOwner(Q);return Q?Jt(Ee,yt,Q,this.__hash):(this.__ownerID=Q,this._map=Ee,this._list=yt,this)},ie.isOrderedMap=Ze,ie.prototype[W]=!0,ie.prototype[$]=ie.prototype.remove,s(Xi,ir),Xi.prototype.get=function(Q,Ee){return this._iter.get(Q,Ee)},Xi.prototype.has=function(Q){return this._iter.has(Q)},Xi.prototype.valueSeq=function(){return this._iter.valueSeq()},Xi.prototype.reverse=function(){var Q=this,Ee=vl(this,!0);return this._useKeys||(Ee.valueSeq=function(){return Q._iter.toSeq().reverse()}),Ee},Xi.prototype.map=function(Q,Ee){var yt=this,Xe=Ll(this,Q,Ee);return this._useKeys||(Xe.valueSeq=function(){return yt._iter.toSeq().map(Q,Ee)}),Xe},Xi.prototype.__iterate=function(Q,Ee){var Xe,yt=this;return this._iter.__iterate(this._useKeys?function(Gt,An){return Q(Gt,An,yt)}:(Xe=Ee?zu(this):0,function(Gt){return Q(Gt,Ee?--Xe:Xe++,yt)}),Ee)},Xi.prototype.__iterator=function(Q,Ee){if(this._useKeys)return this._iter.__iterator(Q,Ee);var yt=this._iter.__iterator(Pt,Ee),Xe=Ee?zu(this):0;return new Rn(function(){var Gt=yt.next();return Gt.done?Gt:At(Q,Ee?--Xe:Xe++,Gt.value,Gt)})},Xi.prototype[W]=!0,s(ws,Qr),ws.prototype.includes=function(Q){return this._iter.includes(Q)},ws.prototype.__iterate=function(Q,Ee){var yt=this,Xe=0;return this._iter.__iterate(function(Gt){return Q(Gt,Xe++,yt)},Ee)},ws.prototype.__iterator=function(Q,Ee){var yt=this._iter.__iterator(Pt,Ee),Xe=0;return new Rn(function(){var Gt=yt.next();return Gt.done?Gt:At(Q,Xe++,Gt.value,Gt)})},s(ds,jr),ds.prototype.has=function(Q){return this._iter.includes(Q)},ds.prototype.__iterate=function(Q,Ee){var yt=this;return this._iter.__iterate(function(Xe){return Q(Xe,Xe,yt)},Ee)},ds.prototype.__iterator=function(Q,Ee){var yt=this._iter.__iterator(Pt,Ee);return new Rn(function(){var Xe=yt.next();return Xe.done?Xe:At(Q,Xe.value,Xe.value,Xe)})},s(qs,ir),qs.prototype.entrySeq=function(){return this._iter.toSeq()},qs.prototype.__iterate=function(Q,Ee){var yt=this;return this._iter.__iterate(function(Xe){if(Xe){ku(Xe);var Gt=e(Xe);return Q(Gt?Xe.get(1):Xe[1],Gt?Xe.get(0):Xe[0],yt)}},Ee)},qs.prototype.__iterator=function(Q,Ee){var yt=this._iter.__iterator(Pt,Ee);return new Rn(function(){for(;;){var Xe=yt.next();if(Xe.done)return Xe;var Gt=Xe.value;if(Gt){ku(Gt);var An=e(Gt);return At(Q,An?Gt.get(0):Gt[0],An?Gt.get(1):Gt[1],Xe)}}})},ws.prototype.cacheResult=Xi.prototype.cacheResult=ds.prototype.cacheResult=qs.prototype.cacheResult=uu,s(Ba,ze),Ba.prototype.toString=function(){return this.__toString(Ga(this)+" {","}")},Ba.prototype.has=function(Q){return this._defaultValues.hasOwnProperty(Q)},Ba.prototype.get=function(Q,Ee){if(!this.has(Q))return Ee;var yt=this._defaultValues[Q];return this._map?this._map.get(Q,yt):yt},Ba.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var Q=this.constructor;return Q._empty||(Q._empty=tl(this,Vt()))},Ba.prototype.set=function(Q,Ee){if(!this.has(Q))throw new Error('Cannot set unknown key "'+Q+'" on '+Ga(this));if(this._map&&!this._map.has(Q)&&Ee===this._defaultValues[Q])return this;var Xe=this._map&&this._map.set(Q,Ee);return this.__ownerID||Xe===this._map?this:tl(this,Xe)},Ba.prototype.remove=function(Q){if(!this.has(Q))return this;var Ee=this._map&&this._map.remove(Q);return this.__ownerID||Ee===this._map?this:tl(this,Ee)},Ba.prototype.wasAltered=function(){return this._map.wasAltered()},Ba.prototype.__iterator=function(Q,Ee){var yt=this;return a(this._defaultValues).map(function(Xe,Gt){return yt.get(Gt)}).__iterator(Q,Ee)},Ba.prototype.__iterate=function(Q,Ee){var yt=this;return a(this._defaultValues).map(function(Xe,Gt){return yt.get(Gt)}).__iterate(Q,Ee)},Ba.prototype.__ensureOwner=function(Q){if(Q===this.__ownerID)return this;var Ee=this._map&&this._map.__ensureOwner(Q);return Q?tl(this,Ee,Q):(this.__ownerID=Q,this._map=Ee,this)};var Tl=Ba.prototype;function tl(Q,Ee,yt){var Xe=Object.create(Object.getPrototypeOf(Q));return Xe._map=Ee,Xe.__ownerID=yt,Xe}function Ga(Q){return Q._name||Q.constructor.name||"Record"}function cu(Q,Ee){Object.defineProperty(Q,Ee,{get:function(){return this.get(Ee)},set:function(yt){jt(this.__ownerID,"Cannot set on an immutable record."),this.set(Ee,yt)}})}function Sa(Q){return null==Q?ql():Ru(Q)&&!M(Q)?Q:ql().withMutations(function(Ee){var yt=u(Q);Ci(yt.size),yt.forEach(function(Xe){return Ee.add(Xe)})})}function Ru(Q){return!(!Q||!Q[xu])}Tl[$]=Tl.remove,Tl.deleteIn=Tl.removeIn=dr.removeIn,Tl.merge=dr.merge,Tl.mergeWith=dr.mergeWith,Tl.mergeIn=dr.mergeIn,Tl.mergeDeep=dr.mergeDeep,Tl.mergeDeepWith=dr.mergeDeepWith,Tl.mergeDeepIn=dr.mergeDeepIn,Tl.setIn=dr.setIn,Tl.update=dr.update,Tl.updateIn=dr.updateIn,Tl.withMutations=dr.withMutations,Tl.asMutable=dr.asMutable,Tl.asImmutable=dr.asImmutable,s(Sa,lt),Sa.of=function(){return this(arguments)},Sa.fromKeys=function(Q){return this(a(Q).keySeq())},Sa.prototype.toString=function(){return this.__toString("Set {","}")},Sa.prototype.has=function(Q){return this._map.has(Q)},Sa.prototype.add=function(Q){return nl(this,this._map.set(Q,!0))},Sa.prototype.remove=function(Q){return nl(this,this._map.remove(Q))},Sa.prototype.clear=function(){return nl(this,this._map.clear())},Sa.prototype.union=function(){var Q=C.call(arguments,0);return 0===(Q=Q.filter(function(Ee){return 0!==Ee.size})).length?this:0!==this.size||this.__ownerID||1!==Q.length?this.withMutations(function(Ee){for(var yt=0;yt<Q.length;yt++)u(Q[yt]).forEach(function(Xe){return Ee.add(Xe)})}):this.constructor(Q[0])},Sa.prototype.intersect=function(){var Q=C.call(arguments,0);if(0===Q.length)return this;Q=Q.map(function(yt){return u(yt)});var Ee=this;return this.withMutations(function(yt){Ee.forEach(function(Xe){Q.every(function(Gt){return Gt.includes(Xe)})||yt.remove(Xe)})})},Sa.prototype.subtract=function(){var Q=C.call(arguments,0);if(0===Q.length)return this;Q=Q.map(function(yt){return u(yt)});var Ee=this;return this.withMutations(function(yt){Ee.forEach(function(Xe){Q.some(function(Gt){return Gt.includes(Xe)})&&yt.remove(Xe)})})},Sa.prototype.merge=function(){return this.union.apply(this,arguments)},Sa.prototype.mergeWith=function(Q){var Ee=C.call(arguments,1);return this.union.apply(this,Ee)},Sa.prototype.sort=function(Q){return Al(el(this,Q))},Sa.prototype.sortBy=function(Q,Ee){return Al(el(this,Ee,Q))},Sa.prototype.wasAltered=function(){return this._map.wasAltered()},Sa.prototype.__iterate=function(Q,Ee){var yt=this;return this._map.__iterate(function(Xe,Gt){return Q(Gt,Gt,yt)},Ee)},Sa.prototype.__iterator=function(Q,Ee){return this._map.map(function(yt,Xe){return Xe}).__iterator(Q,Ee)},Sa.prototype.__ensureOwner=function(Q){if(Q===this.__ownerID)return this;var Ee=this._map.__ensureOwner(Q);return Q?this.__make(Ee,Q):(this.__ownerID=Q,this._map=Ee,this)},Sa.isSet=Ru;var gc,xu="@@__IMMUTABLE_SET__@@",ba=Sa.prototype;function nl(Q,Ee){return Q.__ownerID?(Q.size=Ee.size,Q._map=Ee,Q):Ee===Q._map?Q:0===Ee.size?Q.__empty():Q.__make(Ee)}function Su(Q,Ee){var yt=Object.create(ba);return yt.size=Q?Q.size:0,yt._map=Q,yt.__ownerID=Ee,yt}function ql(){return gc||(gc=Su(Vt()))}function Al(Q){return null==Q?pt():Dc(Q)?Q:pt().withMutations(function(Ee){var yt=u(Q);Ci(yt.size),yt.forEach(function(Xe){return Ee.add(Xe)})})}function Dc(Q){return Ru(Q)&&M(Q)}ba[xu]=!0,ba[$]=ba.remove,ba.mergeDeep=ba.merge,ba.mergeDeepWith=ba.mergeWith,ba.withMutations=dr.withMutations,ba.asMutable=dr.asMutable,ba.asImmutable=dr.asImmutable,ba.__empty=ql,ba.__make=Su,s(Al,Sa),Al.of=function(){return this(arguments)},Al.fromKeys=function(Q){return this(a(Q).keySeq())},Al.prototype.toString=function(){return this.__toString("OrderedSet {","}")},Al.isOrderedSet=Dc;var bt,zs=Al.prototype;function Vc(Q,Ee){var yt=Object.create(zs);return yt.size=Q?Q.size:0,yt._map=Q,yt.__ownerID=Ee,yt}function pt(){return bt||(bt=Vc(vi()))}function Je(Q){return null==Q?Hs():en(Q)?Q:Hs().unshiftAll(Q)}function en(Q){return!(!Q||!Q[fi])}zs[W]=!0,zs.__empty=pt,zs.__make=Vc,s(Je,an),Je.of=function(){return this(arguments)},Je.prototype.toString=function(){return this.__toString("Stack [","]")},Je.prototype.get=function(Q,Ee){var yt=this._head;for(Q=Et(this,Q);yt&&Q--;)yt=yt.next;return yt?yt.value:Ee},Je.prototype.peek=function(){return this._head&&this._head.value},Je.prototype.push=function(){if(0===arguments.length)return this;for(var Q=this.size+arguments.length,Ee=this._head,yt=arguments.length-1;yt>=0;yt--)Ee={value:arguments[yt],next:Ee};return this.__ownerID?(this.size=Q,this._head=Ee,this.__hash=void 0,this.__altered=!0,this):Ya(Q,Ee)},Je.prototype.pushAll=function(Q){if(0===(Q=c(Q)).size)return this;Ci(Q.size);var Ee=this.size,yt=this._head;return Q.reverse().forEach(function(Xe){Ee++,yt={value:Xe,next:yt}}),this.__ownerID?(this.size=Ee,this._head=yt,this.__hash=void 0,this.__altered=!0,this):Ya(Ee,yt)},Je.prototype.pop=function(){return this.slice(1)},Je.prototype.unshift=function(){return this.push.apply(this,arguments)},Je.prototype.unshiftAll=function(Q){return this.pushAll(Q)},Je.prototype.shift=function(){return this.pop.apply(this,arguments)},Je.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Hs()},Je.prototype.slice=function(Q,Ee){if(ct(Q,Ee,this.size))return this;var yt=qe(Q,this.size);if(He(Ee,this.size)!==this.size)return an.prototype.slice.call(this,Q,Ee);for(var Gt=this.size-yt,An=this._head;yt--;)An=An.next;return this.__ownerID?(this.size=Gt,this._head=An,this.__hash=void 0,this.__altered=!0,this):Ya(Gt,An)},Je.prototype.__ensureOwner=function(Q){return Q===this.__ownerID?this:Q?Ya(this.size,this._head,Q,this.__hash):(this.__ownerID=Q,this.__altered=!1,this)},Je.prototype.__iterate=function(Q,Ee){if(Ee)return this.reverse().__iterate(Q);for(var yt=0,Xe=this._head;Xe&&!1!==Q(Xe.value,yt++,this);)Xe=Xe.next;return yt},Je.prototype.__iterator=function(Q,Ee){if(Ee)return this.reverse().__iterator(Q);var yt=0,Xe=this._head;return new Rn(function(){if(Xe){var Gt=Xe.value;return Xe=Xe.next,At(Q,yt++,Gt)}return{value:void 0,done:!0}})},Je.isStack=en;var mi,fi="@@__IMMUTABLE_STACK__@@",To=Je.prototype;function Ya(Q,Ee,yt,Xe){var Gt=Object.create(To);return Gt.size=Q,Gt._head=Ee,Gt.__ownerID=yt,Gt.__hash=Xe,Gt.__altered=!1,Gt}function Hs(){return mi||(mi=Ya(0))}function Qs(Q,Ee){var yt=function(Xe){Q.prototype[Xe]=Ee[Xe]};return Object.keys(Ee).forEach(yt),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(Ee).forEach(yt),Q}To[fi]=!0,To.withMutations=dr.withMutations,To.asMutable=dr.asMutable,To.asImmutable=dr.asImmutable,To.wasAltered=dr.wasAltered,r.Iterator=Rn,Qs(r,{toArray:function(){Ci(this.size);var Q=new Array(this.size||0);return this.valueSeq().__iterate(function(Ee,yt){Q[yt]=Ee}),Q},toIndexedSeq:function(){return new ws(this)},toJS:function(){return this.toSeq().map(function(Q){return Q&&"function"==typeof Q.toJS?Q.toJS():Q}).__toJS()},toJSON:function(){return this.toSeq().map(function(Q){return Q&&"function"==typeof Q.toJSON?Q.toJSON():Q}).__toJS()},toKeyedSeq:function(){return new Xi(this,!0)},toMap:function(){return Ai(this.toKeyedSeq())},toObject:function(){Ci(this.size);var Q={};return this.__iterate(function(Ee,yt){Q[yt]=Ee}),Q},toOrderedMap:function(){return ie(this.toKeyedSeq())},toOrderedSet:function(){return Al(f(this)?this.valueSeq():this)},toSet:function(){return Sa(f(this)?this.valueSeq():this)},toSetSeq:function(){return new ds(this)},toSeq:function(){return m(this)?this.toIndexedSeq():f(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Je(f(this)?this.valueSeq():this)},toList:function(){return Ji(f(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(Q,Ee){return 0===this.size?Q+Ee:Q+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+Ee},concat:function(){return Gs(this,function au(Q,Ee){var yt=f(Q),Xe=[Q].concat(Ee).map(function(kn){return e(kn)?yt&&(kn=a(kn)):kn=yt?Wi(kn):so(Array.isArray(kn)?kn:[kn]),kn}).filter(function(kn){return 0!==kn.size});if(0===Xe.length)return Q;if(1===Xe.length){var Gt=Xe[0];if(Gt===Q||yt&&f(Gt)||m(Q)&&m(Gt))return Gt}var An=new ht(Xe);return yt?An=An.toKeyedSeq():m(Q)||(An=An.toSetSeq()),(An=An.flatten(!0)).size=Xe.reduce(function(kn,Hr){if(void 0!==kn){var Xr=Hr.size;if(void 0!==Xr)return kn+Xr}},0),An}(this,C.call(arguments,0)))},includes:function(Q){return this.some(function(Ee){return qr(Ee,Q)})},entries:function(){return this.__iterator(it)},every:function(Q,Ee){Ci(this.size);var yt=!0;return this.__iterate(function(Xe,Gt,An){if(!Q.call(Ee,Xe,Gt,An))return yt=!1,!1}),yt},filter:function(Q,Ee){return Gs(this,Yu(this,Q,Ee,!0))},find:function(Q,Ee,yt){var Xe=this.findEntry(Q,Ee);return Xe?Xe[1]:yt},forEach:function(Q,Ee){return Ci(this.size),this.__iterate(Ee?Q.bind(Ee):Q)},join:function(Q){Ci(this.size),Q=void 0!==Q?""+Q:",";var Ee="",yt=!0;return this.__iterate(function(Xe){yt?yt=!1:Ee+=Q,Ee+=null!=Xe?Xe.toString():""}),Ee},keys:function(){return this.__iterator(Le)},map:function(Q,Ee){return Gs(this,Ll(this,Q,Ee))},reduce:function(Q,Ee,yt){var Xe,Gt;return Ci(this.size),arguments.length<2?Gt=!0:Xe=Ee,this.__iterate(function(An,kn,Hr){Gt?(Gt=!1,Xe=An):Xe=Q.call(yt,Xe,An,kn,Hr)}),Xe},reduceRight:function(Q,Ee,yt){var Xe=this.toKeyedSeq().reverse();return Xe.reduce.apply(Xe,arguments)},reverse:function(){return Gs(this,vl(this,!0))},slice:function(Q,Ee){return Gs(this,Ol(this,Q,Ee,!0))},some:function(Q,Ee){return!this.every(lu(Q),Ee)},sort:function(Q){return Gs(this,el(this,Q))},values:function(){return this.__iterator(Pt)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(Q,Ee){return ge(Q?this.toSeq().filter(Q,Ee):this)},countBy:function(Q,Ee){return function Nc(Q,Ee,yt){var Xe=Ai().asMutable();return Q.__iterate(function(Gt,An){Xe.update(Ee.call(yt,Gt,An,Q),0,function(kn){return kn+1})}),Xe.asImmutable()}(this,Q,Ee)},equals:function(Q){return Hi(this,Q)},entrySeq:function(){var Q=this;if(Q._cache)return new ht(Q._cache);var Ee=Q.toSeq().map(hu).toIndexedSeq();return Ee.fromEntrySeq=function(){return Q.toSeq()},Ee},filterNot:function(Q,Ee){return this.filter(lu(Q),Ee)},findEntry:function(Q,Ee,yt){var Xe=yt;return this.__iterate(function(Gt,An,kn){if(Q.call(Ee,Gt,An,kn))return Xe=[An,Gt],!1}),Xe},findKey:function(Q,Ee){var yt=this.findEntry(Q,Ee);return yt&&yt[0]},findLast:function(Q,Ee,yt){return this.toKeyedSeq().reverse().find(Q,Ee,yt)},findLastEntry:function(Q,Ee,yt){return this.toKeyedSeq().reverse().findEntry(Q,Ee,yt)},findLastKey:function(Q,Ee){return this.toKeyedSeq().reverse().findKey(Q,Ee)},first:function(){return this.find(ot)},flatMap:function(Q,Ee){return Gs(this,function yu(Q,Ee,yt){var Xe=ua(Q);return Q.toSeq().map(function(Gt,An){return Xe(Ee.call(yt,Gt,An,Q))}).flatten(!0)}(this,Q,Ee))},flatten:function(Q){return Gs(this,Da(this,Q,!0))},fromEntrySeq:function(){return new qs(this)},get:function(Q,Ee){return this.find(function(yt,Xe){return qr(Xe,Q)},void 0,Ee)},getIn:function(Q,Ee){for(var Gt,yt=this,Xe=$u(Q);!(Gt=Xe.next()).done;)if((yt=yt&&yt.get?yt.get(Gt.value,de):de)===de)return Ee;return yt},groupBy:function(Q,Ee){return function qu(Q,Ee,yt){var Xe=f(Q),Gt=(M(Q)?ie():Ai()).asMutable();Q.__iterate(function(kn,Hr){Gt.update(Ee.call(yt,kn,Hr,Q),function(Xr){return(Xr=Xr||[]).push(Xe?[Hr,kn]:kn),Xr})});var An=ua(Q);return Gt.map(function(kn){return Gs(Q,An(kn))})}(this,Q,Ee)},has:function(Q){return this.get(Q,de)!==de},hasIn:function(Q){return this.getIn(Q,de)!==de},isSubset:function(Q){return Q="function"==typeof Q.includes?Q:r(Q),this.every(function(Ee){return Q.includes(Ee)})},isSuperset:function(Q){return(Q="function"==typeof Q.isSubset?Q:r(Q)).isSubset(this)},keyOf:function(Q){return this.findKey(function(Ee){return qr(Ee,Q)})},keySeq:function(){return this.toSeq().map(sc).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(Q){return this.toKeyedSeq().reverse().keyOf(Q)},max:function(Q){return oc(this,Q)},maxBy:function(Q,Ee){return oc(this,Ee,Q)},min:function(Q){return oc(this,Q?id(Q):du)},minBy:function(Q,Ee){return oc(this,Ee?id(Ee):du,Q)},rest:function(){return this.slice(1)},skip:function(Q){return this.slice(Math.max(0,Q))},skipLast:function(Q){return Gs(this,this.toSeq().reverse().skip(Q).reverse())},skipWhile:function(Q,Ee){return Gs(this,yl(this,Q,Ee,!0))},skipUntil:function(Q,Ee){return this.skipWhile(lu(Q),Ee)},sortBy:function(Q,Ee){return Gs(this,el(this,Ee,Q))},take:function(Q){return this.slice(0,Math.max(0,Q))},takeLast:function(Q){return Gs(this,this.toSeq().reverse().take(Q).reverse())},takeWhile:function(Q,Ee){return Gs(this,function Kc(Q,Ee,yt){var Xe=El(Q);return Xe.__iterateUncached=function(Gt,An){var kn=this;if(An)return this.cacheResult().__iterate(Gt,An);var Hr=0;return Q.__iterate(function(Xr,yr,Rr){return Ee.call(yt,Xr,yr,Rr)&&++Hr&&Gt(Xr,yr,kn)}),Hr},Xe.__iteratorUncached=function(Gt,An){var kn=this;if(An)return this.cacheResult().__iterator(Gt,An);var Hr=Q.__iterator(it,An),Xr=!0;return new Rn(function(){if(!Xr)return{value:void 0,done:!0};var yr=Hr.next();if(yr.done)return yr;var Rr=yr.value,Go=Rr[0],Io=Rr[1];return Ee.call(yt,Io,Go,kn)?Gt===it?yr:At(Gt,Go,Io,yr):(Xr=!1,{value:void 0,done:!0})})},Xe}(this,Q,Ee))},takeUntil:function(Q,Ee){return this.takeWhile(lu(Q),Ee)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=function Lc(Q){if(Q.size===1/0)return 0;var Ee=M(Q),yt=f(Q),Xe=Ee?1:0;return function kl(Q,Ee){return Ee=Rt(Ee,3432918353),Ee=Rt(Ee<<15|Ee>>>-15,461845907),Ee=Rt(Ee<<13|Ee>>>-13,5),Ee=Rt((Ee=(Ee+3864292196|0)^Q)^Ee>>>16,2246822507),Pe((Ee=Rt(Ee^Ee>>>13,3266489909))^Ee>>>16)}(Q.__iterate(yt?Ee?function(An,kn){Xe=31*Xe+sl(qn(An),qn(kn))|0}:function(An,kn){Xe=Xe+sl(qn(An),qn(kn))|0}:Ee?function(An){Xe=31*Xe+qn(An)|0}:function(An){Xe=Xe+qn(An)|0}),Xe)}(this))}});var Hu=r.prototype;Hu[w]=!0,Hu[pn]=Hu.values,Hu.__toJS=Hu.toArray,Hu.__toStringMapper=ec,Hu.inspect=Hu.toSource=function(){return this.toString()},Hu.chain=Hu.flatMap,Hu.contains=Hu.includes,Qs(a,{flip:function(){return Gs(this,Js(this))},mapEntries:function(Q,Ee){var yt=this,Xe=0;return Gs(this,this.toSeq().map(function(Gt,An){return Q.call(Ee,[An,Gt],Xe++,yt)}).fromEntrySeq())},mapKeys:function(Q,Ee){var yt=this;return Gs(this,this.toSeq().flip().map(function(Xe,Gt){return Q.call(Ee,Xe,Gt,yt)}).flip())}});var zl=a.prototype;function sc(Q,Ee){return Ee}function hu(Q,Ee){return[Ee,Q]}function lu(Q){return function(){return!Q.apply(this,arguments)}}function id(Q){return function(){return-Q.apply(this,arguments)}}function ec(Q){return"string"==typeof Q?JSON.stringify(Q):String(Q)}function Fc(){return $e(arguments)}function du(Q,Ee){return Q<Ee?1:Q>Ee?-1:0}function sl(Q,Ee){return Q^Ee+2654435769+(Q<<6)+(Q>>2)|0}return zl[D]=!0,zl[pn]=Hu.entries,zl.__toJS=Hu.toObject,zl.__toStringMapper=function(Q,Ee){return JSON.stringify(Ee)+": "+ec(Q)},Qs(c,{toKeyedSeq:function(){return new Xi(this,!1)},filter:function(Q,Ee){return Gs(this,Yu(this,Q,Ee,!1))},findIndex:function(Q,Ee){var yt=this.findEntry(Q,Ee);return yt?yt[0]:-1},indexOf:function(Q){var Ee=this.keyOf(Q);return void 0===Ee?-1:Ee},lastIndexOf:function(Q){var Ee=this.lastKeyOf(Q);return void 0===Ee?-1:Ee},reverse:function(){return Gs(this,vl(this,!1))},slice:function(Q,Ee){return Gs(this,Ol(this,Q,Ee,!1))},splice:function(Q,Ee){var yt=arguments.length;if(Ee=Math.max(0|Ee,0),0===yt||2===yt&&!Ee)return this;Q=qe(Q,Q<0?this.count():this.size);var Xe=this.slice(0,Q);return Gs(this,1===yt?Xe:Xe.concat($e(arguments,2),this.slice(Q+Ee)))},findLastIndex:function(Q,Ee){var yt=this.findLastEntry(Q,Ee);return yt?yt[0]:-1},first:function(){return this.get(0)},flatten:function(Q){return Gs(this,Da(this,Q,!1))},get:function(Q,Ee){return(Q=Et(this,Q))<0||this.size===1/0||void 0!==this.size&&Q>this.size?Ee:this.find(function(yt,Xe){return Xe===Q},void 0,Ee)},has:function(Q){return(Q=Et(this,Q))>=0&&(void 0!==this.size?this.size===1/0||Q<this.size:-1!==this.indexOf(Q))},interpose:function(Q){return Gs(this,function ju(Q,Ee){var yt=El(Q);return yt.size=Q.size&&2*Q.size-1,yt.__iterateUncached=function(Xe,Gt){var An=this,kn=0;return Q.__iterate(function(Hr,Xr){return(!kn||!1!==Xe(Ee,kn++,An))&&!1!==Xe(Hr,kn++,An)},Gt),kn},yt.__iteratorUncached=function(Xe,Gt){var Hr,An=Q.__iterator(Pt,Gt),kn=0;return new Rn(function(){return(!Hr||kn%2)&&(Hr=An.next()).done?Hr:kn%2?At(Xe,kn++,Ee):At(Xe,kn++,Hr.value,Hr)})},yt}(this,Q))},interleave:function(){var Q=[this].concat($e(arguments)),Ee=Ic(this.toSeq(),Qr.of,Q),yt=Ee.flatten(!0);return Ee.size&&(yt.size=Ee.size*Q.length),Gs(this,yt)},keySeq:function(){return Fe(0,this.size)},last:function(){return this.get(-1)},skipWhile:function(Q,Ee){return Gs(this,yl(this,Q,Ee,!1))},zip:function(){return Gs(this,Ic(this,Fc,[this].concat($e(arguments))))},zipWith:function(Q){var Ee=$e(arguments);return Ee[0]=this,Gs(this,Ic(this,Q,Ee))}}),c.prototype[U]=!0,c.prototype[W]=!0,Qs(u,{get:function(Q,Ee){return this.has(Q)?Q:Ee},includes:function(Q){return this.has(Q)},keySeq:function(){return this.valueSeq()}}),u.prototype.has=Hu.includes,u.prototype.contains=u.prototype.includes,Qs(ir,a.prototype),Qs(Qr,c.prototype),Qs(jr,u.prototype),Qs(ze,a.prototype),Qs(an,c.prototype),Qs(lt,u.prototype),{Iterable:r,Seq:Lr,Collection:et,Map:Ai,OrderedMap:ie,List:Ji,Stack:Je,Set:Sa,OrderedSet:Al,Record:Ba,Range:Fe,Repeat:Dn,is:qr,fromJS:pr}}()},31536:E=>{"use strict";class C extends Error{constructor(m){super(C._prepareSuperMessage(m)),Object.defineProperty(this,"name",{value:"NonError",configurable:!0,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(this,C)}static _prepareSuperMessage(m){try{return JSON.stringify(m)}catch{return String(m)}}}const s=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0}],r=Symbol(".toJSON called"),c=({from:f,seen:m,to_:T,forceEnumerable:M,maxDepth:w,depth:D})=>{const U=T||(Array.isArray(f)?[]:{});if(m.push(f),D>=w)return U;if("function"==typeof f.toJSON&&!0!==f[r])return(f=>{f[r]=!0;const m=f.toJSON();return delete f[r],m})(f);for(const[W,$]of Object.entries(f))if("function"==typeof Buffer&&Buffer.isBuffer($))U[W]="[object Buffer]";else if("function"!=typeof $){if(!$||"object"!=typeof $){U[W]=$;continue}if(!m.includes(f[W])){D++,U[W]=c({from:f[W],seen:m.slice(),forceEnumerable:M,maxDepth:w,depth:D});continue}U[W]="[Circular]"}for(const{property:W,enumerable:$}of s)"string"==typeof f[W]&&Object.defineProperty(U,W,{value:f[W],enumerable:!!M||$,configurable:!0,writable:!0});return U};E.exports={serializeError:(f,m={})=>{const{maxDepth:T=Number.POSITIVE_INFINITY}=m;return"object"==typeof f&&null!==f?c({from:f,seen:[],forceEnumerable:!0,maxDepth:T,depth:0}):"function"==typeof f?`[Function: ${f.name||"anonymous"}]`:f},deserializeError:(f,m={})=>{const{maxDepth:T=Number.POSITIVE_INFINITY}=m;if(f instanceof Error)return f;if("object"==typeof f&&null!==f&&!Array.isArray(f)){const M=new Error;return c({from:f,seen:[],to_:M,maxDepth:T,depth:0}),M}return new C(f)}}},35311:E=>{E.exports=function(){var C=document.getSelection();if(!C.rangeCount)return function(){};for(var s=document.activeElement,r=[],a=0;a<C.rangeCount;a++)r.push(C.getRangeAt(a));switch(s.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":s.blur();break;default:s=null}return C.removeAllRanges(),function(){"Caret"===C.type&&C.removeAllRanges(),C.rangeCount||r.forEach(function(c){C.addRange(c)}),s&&s.focus()}}},18807:E=>{"use strict";function C($){return Object.prototype.toString.call($)}var f=Array.isArray||function(J){return"[object Array]"===Object.prototype.toString.call(J)};function m($,J){if($.forEach)return $.forEach(J);for(var F=0;F<$.length;F++)J($[F],F,$)}var T=Object.keys||function(J){var F=[];for(var X in J)F.push(X);return F},M=Object.prototype.hasOwnProperty||function($,J){return J in $};function w($){if("object"==typeof $&&null!==$){var J;if(f($))J=[];else if(function s($){return"[object Date]"===C($)}($))J=new Date($.getTime?$.getTime():$);else if(function r($){return"[object RegExp]"===C($)}($))J=new RegExp($);else if(function a($){return"[object Error]"===C($)}($))J={message:$.message};else if(function c($){return"[object Boolean]"===C($)}($)||function u($){return"[object Number]"===C($)}($)||function e($){return"[object String]"===C($)}($))J=Object($);else if(Object.create&&Object.getPrototypeOf)J=Object.create(Object.getPrototypeOf($));else if($.constructor===Object)J={};else{var X=function(){};X.prototype=$.constructor&&$.constructor.prototype||$.__proto__||{},J=new X}return m(T($),function(de){J[de]=$[de]}),J}return $}function D($,J,F){var X=[],de=[],V=!0;return function ce(se){var fe=F?w(se):se,Te={},$e=!0,ge={node:fe,node_:se,path:[].concat(X),parent:de[de.length-1],parents:de,key:X[X.length-1],isRoot:0===X.length,level:X.length,circular:null,update:function(ct,qe){ge.isRoot||(ge.parent.node[ge.key]=ct),ge.node=ct,qe&&($e=!1)},delete:function(ct){delete ge.parent.node[ge.key],ct&&($e=!1)},remove:function(ct){f(ge.parent.node)?ge.parent.node.splice(ge.key,1):delete ge.parent.node[ge.key],ct&&($e=!1)},keys:null,before:function(ct){Te.before=ct},after:function(ct){Te.after=ct},pre:function(ct){Te.pre=ct},post:function(ct){Te.post=ct},stop:function(){V=!1},block:function(){$e=!1}};if(!V)return ge;function Et(){if("object"==typeof ge.node&&null!==ge.node){(!ge.keys||ge.node_!==ge.node)&&(ge.keys=T(ge.node)),ge.isLeaf=0===ge.keys.length;for(var ct=0;ct<de.length;ct++)if(de[ct].node_===se){ge.circular=de[ct];break}}else ge.isLeaf=!0,ge.keys=null;ge.notLeaf=!ge.isLeaf,ge.notRoot=!ge.isRoot}Et();var ot=J.call(ge,ge.node);return void 0!==ot&&ge.update&&ge.update(ot),Te.before&&Te.before.call(ge,ge.node),$e&&("object"==typeof ge.node&&null!==ge.node&&!ge.circular&&(de.push(ge),Et(),m(ge.keys,function(ct,qe){X.push(ct),Te.pre&&Te.pre.call(ge,ge.node[ct],ct);var He=ce(ge.node[ct]);F&&M.call(ge.node,ct)&&(ge.node[ct]=He.node),He.isLast=qe===ge.keys.length-1,He.isFirst=0===qe,Te.post&&Te.post.call(ge,He),X.pop()}),de.pop()),Te.after&&Te.after.call(ge,ge.node)),ge}($).node}function U($){this.value=$}function W($){return new U($)}U.prototype.get=function($){for(var J=this.value,F=0;F<$.length;F++){var X=$[F];if(!J||!M.call(J,X))return;J=J[X]}return J},U.prototype.has=function($){for(var J=this.value,F=0;F<$.length;F++){var X=$[F];if(!J||!M.call(J,X))return!1;J=J[X]}return!0},U.prototype.set=function($,J){for(var F=this.value,X=0;X<$.length-1;X++){var de=$[X];M.call(F,de)||(F[de]={}),F=F[de]}return F[$[X]]=J,J},U.prototype.map=function($){return D(this.value,$,!0)},U.prototype.forEach=function($){return this.value=D(this.value,$,!1),this.value},U.prototype.reduce=function($,J){var F=1===arguments.length,X=F?this.value:J;return this.forEach(function(de){(!this.isRoot||!F)&&(X=$.call(this,X,de))}),X},U.prototype.paths=function(){var $=[];return this.forEach(function(){$.push(this.path)}),$},U.prototype.nodes=function(){var $=[];return this.forEach(function(){$.push(this.node)}),$},U.prototype.clone=function(){var $=[],J=[];return function F(X){for(var de=0;de<$.length;de++)if($[de]===X)return J[de];if("object"==typeof X&&null!==X){var V=w(X);return $.push(X),J.push(V),m(T(X),function(ce){V[ce]=F(X[ce])}),$.pop(),J.pop(),V}return X}(this.value)},m(T(U.prototype),function($){W[$]=function(J){var F=[].slice.call(arguments,1),X=new U(J);return X[$].apply(X,F)}}),E.exports=W},2135:(E,C,s)=>{"use strict";var r=s(90465),a=s(76959),c=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,u=/[\n\r\t]/g,e=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,f=/:\d+$/,m=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,T=/^[a-zA-Z]:/;function M(V){return(V||"").toString().replace(c,"")}var w=[["#","hash"],["?","query"],function(ce,se){return W(se.protocol)?ce.replace(/\\/g,"/"):ce},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],D={hash:1,query:1};function U(V){var ce;ce=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};var $e,fe={},Te=typeof(V=V||ce.location||{});if("blob:"===V.protocol)fe=new F(unescape(V.pathname),{});else if("string"===Te)for($e in fe=new F(V,{}),D)delete fe[$e];else if("object"===Te){for($e in V)$e in D||(fe[$e]=V[$e]);void 0===fe.slashes&&(fe.slashes=e.test(V.href))}return fe}function W(V){return"file:"===V||"ftp:"===V||"http:"===V||"https:"===V||"ws:"===V||"wss:"===V}function $(V,ce){V=(V=M(V)).replace(u,""),ce=ce||{};var Et,se=m.exec(V),fe=se[1]?se[1].toLowerCase():"",Te=!!se[2],$e=!!se[3],ge=0;return Te?$e?(Et=se[2]+se[3]+se[4],ge=se[2].length+se[3].length):(Et=se[2]+se[4],ge=se[2].length):$e?(Et=se[3]+se[4],ge=se[3].length):Et=se[4],"file:"===fe?ge>=2&&(Et=Et.slice(2)):W(fe)?Et=se[4]:fe?Te&&(Et=Et.slice(2)):ge>=2&&W(ce.protocol)&&(Et=se[4]),{protocol:fe,slashes:Te||W(fe),slashesCount:ge,rest:Et}}function F(V,ce,se){if(V=(V=M(V)).replace(u,""),!(this instanceof F))return new F(V,ce,se);var fe,Te,$e,ge,Et,ot,ct=w.slice(),qe=typeof ce,He=this,We=0;for("object"!==qe&&"string"!==qe&&(se=ce,ce=null),se&&"function"!=typeof se&&(se=a.parse),fe=!(Te=$(V||"",ce=U(ce))).protocol&&!Te.slashes,He.slashes=Te.slashes||fe&&ce.slashes,He.protocol=Te.protocol||ce.protocol||"",V=Te.rest,("file:"===Te.protocol&&(2!==Te.slashesCount||T.test(V))||!Te.slashes&&(Te.protocol||Te.slashesCount<2||!W(He.protocol)))&&(ct[3]=[/(.*)/,"pathname"]);We<ct.length;We++)"function"!=typeof(ge=ct[We])?(ot=ge[1],($e=ge[0])!=$e?He[ot]=V:"string"==typeof $e?~(Et="@"===$e?V.lastIndexOf($e):V.indexOf($e))&&("number"==typeof ge[2]?(He[ot]=V.slice(0,Et),V=V.slice(Et+ge[2])):(He[ot]=V.slice(Et),V=V.slice(0,Et))):(Et=$e.exec(V))&&(He[ot]=Et[1],V=V.slice(0,Et.index)),He[ot]=He[ot]||fe&&ge[3]&&ce[ot]||"",ge[4]&&(He[ot]=He[ot].toLowerCase())):V=ge(V,He);se&&(He.query=se(He.query)),fe&&ce.slashes&&"/"!==He.pathname.charAt(0)&&(""!==He.pathname||""!==ce.pathname)&&(He.pathname=function J(V,ce){if(""===V)return ce;for(var se=(ce||"/").split("/").slice(0,-1).concat(V.split("/")),fe=se.length,Te=se[fe-1],$e=!1,ge=0;fe--;)"."===se[fe]?se.splice(fe,1):".."===se[fe]?(se.splice(fe,1),ge++):ge&&(0===fe&&($e=!0),se.splice(fe,1),ge--);return $e&&se.unshift(""),("."===Te||".."===Te)&&se.push(""),se.join("/")}(He.pathname,ce.pathname)),"/"!==He.pathname.charAt(0)&&W(He.protocol)&&(He.pathname="/"+He.pathname),r(He.port,He.protocol)||(He.host=He.hostname,He.port=""),He.username=He.password="",He.auth&&(~(Et=He.auth.indexOf(":"))?(He.username=He.auth.slice(0,Et),He.username=encodeURIComponent(decodeURIComponent(He.username)),He.password=He.auth.slice(Et+1),He.password=encodeURIComponent(decodeURIComponent(He.password))):He.username=encodeURIComponent(decodeURIComponent(He.auth)),He.auth=He.password?He.username+":"+He.password:He.username),He.origin="file:"!==He.protocol&&W(He.protocol)&&He.host?He.protocol+"//"+He.host:"null",He.href=He.toString()}F.prototype={set:function X(V,ce,se){var fe=this;switch(V){case"query":"string"==typeof ce&&ce.length&&(ce=(se||a.parse)(ce)),fe[V]=ce;break;case"port":fe[V]=ce,r(ce,fe.protocol)?ce&&(fe.host=fe.hostname+":"+ce):(fe.host=fe.hostname,fe[V]="");break;case"hostname":fe[V]=ce,fe.port&&(ce+=":"+fe.port),fe.host=ce;break;case"host":fe[V]=ce,f.test(ce)?(ce=ce.split(":"),fe.port=ce.pop(),fe.hostname=ce.join(":")):(fe.hostname=ce,fe.port="");break;case"protocol":fe.protocol=ce.toLowerCase(),fe.slashes=!se;break;case"pathname":case"hash":if(ce){var Te="pathname"===V?"/":"#";fe[V]=ce.charAt(0)!==Te?Te+ce:ce}else fe[V]=ce;break;case"username":case"password":fe[V]=encodeURIComponent(ce);break;case"auth":var $e=ce.indexOf(":");~$e?(fe.username=ce.slice(0,$e),fe.username=encodeURIComponent(decodeURIComponent(fe.username)),fe.password=ce.slice($e+1),fe.password=encodeURIComponent(decodeURIComponent(fe.password))):fe.username=encodeURIComponent(decodeURIComponent(ce))}for(var ge=0;ge<w.length;ge++){var Et=w[ge];Et[4]&&(fe[Et[1]]=fe[Et[1]].toLowerCase())}return fe.auth=fe.password?fe.username+":"+fe.password:fe.username,fe.origin="file:"!==fe.protocol&&W(fe.protocol)&&fe.host?fe.protocol+"//"+fe.host:"null",fe.href=fe.toString(),fe},toString:function de(V){(!V||"function"!=typeof V)&&(V=a.stringify);var ce,se=this,fe=se.host,Te=se.protocol;Te&&":"!==Te.charAt(Te.length-1)&&(Te+=":");var $e=Te+(se.protocol&&se.slashes||W(se.protocol)?"//":"");return se.username?($e+=se.username,se.password&&($e+=":"+se.password),$e+="@"):se.password?($e+=":"+se.password,$e+="@"):"file:"!==se.protocol&&W(se.protocol)&&!fe&&"/"!==se.pathname&&($e+="@"),(":"===fe[fe.length-1]||f.test(se.hostname)&&!se.port)&&(fe+=":"),$e+=fe+se.pathname,(ce="object"==typeof se.query?V(se.query):se.query)&&($e+="?"!==ce.charAt(0)?"?"+ce:ce),se.hash&&($e+=se.hash),$e}},F.extractProtocol=$,F.location=U,F.trimLeft=M,F.qs=a,E.exports=F},58734:(E,C,s)=>{"use strict";var r=s(88280),a=function(w){return w.split(/(<\/?[^>]+>)/g).filter(function(D){return""!==D.trim()})},u=function(w){return/<\/+[^>]+>/.test(w)},e=function(w){return/<[^>]+\/>/.test(w)},f=function(w){return function(w){return/<[^>!]+>/.test(w)}(w)&&!u(w)&&!e(w)};function T(M){return u(M)?"ClosingTag":f(M)?"OpeningTag":e(M)?"SelfClosingTag":"Text"}E.exports=function(M){var w=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},D=w.indentor,U=w.textNodesOnSameLine,W=0,$=[];D=D||"    ";var J=function m(M){return a(M).map(function(D){return{value:D,type:T(D)}})}(M).map(function(F,X,de){var V=F.value,ce=F.type;"ClosingTag"===ce&&W--;var se=r(D,W),fe=se+V;if("OpeningTag"===ce&&W++,U){var Te=de[X-1],$e=de[X-2];"ClosingTag"===ce&&"Text"===Te.type&&"OpeningTag"===$e.type&&(fe=""+se+$e.value+Te.value+V,$.push(X-2,X-1))}return fe});return $.forEach(function(F){return J[F]=null}),J.filter(function(F){return!!F}).join("\n")}},1653:function(E,C){var s,r,a;r=[],void 0!==(a="function"==typeof(s=function(){"use strict";var c=function(D){return D&&"getComputedStyle"in window&&"smooth"===window.getComputedStyle(D)["scroll-behavior"]};if(typeof window>"u"||!("document"in window))return{};var u=function(D,U,W){U=U||999,!W&&0!==W&&(W=9);var $,J=function(Te){$=Te},F=function(){clearTimeout($),J(0)},X=function(Te){return Math.max(0,D.getTopOf(Te)-W)},de=function(Te,$e,ge){if(F(),0===$e||$e&&$e<0||c(D.body))D.toY(Te),ge&&ge();else{var Et=D.getY(),ot=Math.max(0,Te)-Et,ct=(new Date).getTime();$e=$e||Math.min(Math.abs(ot),U),function qe(){J(setTimeout(function(){var He=Math.min(1,((new Date).getTime()-ct)/$e),We=Math.max(0,Math.floor(Et+ot*(He<.5?2*He*He:He*(4-2*He)-1)));D.toY(We),He<1&&D.getHeight()+We<D.body.scrollHeight?qe():(setTimeout(F,99),ge&&ge())},9))}()}},V=function(Te,$e,ge){de(X(Te),$e,ge)};return{setup:function(Te,$e){return(0===Te||Te)&&(U=Te),(0===$e||$e)&&(W=$e),{defaultDuration:U,edgeOffset:W}},to:V,toY:de,intoView:function(Te,$e,ge){var Et=Te.getBoundingClientRect().height,ot=D.getTopOf(Te)+Et,ct=D.getHeight(),qe=D.getY(),He=qe+ct;X(Te)<qe||Et+W>ct?V(Te,$e,ge):ot+W>He?de(ot-ct+W,$e,ge):ge&&ge()},center:function(Te,$e,ge,Et){de(Math.max(0,D.getTopOf(Te)-D.getHeight()/2+(ge||Te.getBoundingClientRect().height/2)),$e,Et)},stop:F,moving:function(){return!!$},getY:D.getY,getTopOf:D.getTopOf}},e=document.documentElement,f=function(){return window.scrollY||e.scrollTop},m=u({body:document.scrollingElement||document.body,toY:function(D){window.scrollTo(0,D)},getY:f,getHeight:function(){return window.innerHeight||e.clientHeight},getTopOf:function(D){return D.getBoundingClientRect().top+f()-e.offsetTop}});if(m.createScroller=function(D,U,W){return u({body:D,toY:function($){D.scrollTop=$},getY:function(){return D.scrollTop},getHeight:function(){return Math.min(D.clientHeight,window.innerHeight||e.clientHeight)},getTopOf:function($){return $.offsetTop}},U,W)},"addEventListener"in window&&!window.noZensmooth&&!c(document.body)){var T="history"in window&&"pushState"in history,M=T&&"scrollRestoration"in history;M&&(history.scrollRestoration="auto"),window.addEventListener("load",function(){M&&(setTimeout(function(){history.scrollRestoration="manual"},9),window.addEventListener("popstate",function(D){D.state&&"zenscrollY"in D.state&&m.toY(D.state.zenscrollY)},!1)),window.location.hash&&setTimeout(function(){var D=m.setup().edgeOffset;if(D){var U=document.getElementById(window.location.href.split("#")[1]);if(U){var W=Math.max(0,m.getTopOf(U)-D),$=m.getY()-W;0<=$&&$<9&&window.scrollTo(0,W)}}},9)},!1);var w=new RegExp("(^|\\s)noZensmooth(\\s|$)");window.addEventListener("click",function(D){for(var U=D.target;U&&"A"!==U.tagName;)U=U.parentNode;if(!(!U||1!==D.which||D.shiftKey||D.metaKey||D.ctrlKey||D.altKey)){if(M){var W=history.state&&"object"==typeof history.state?history.state:{};W.zenscrollY=m.getY();try{history.replaceState(W,"")}catch{}}var $=U.getAttribute("href")||"";if(0===$.indexOf("#")&&!w.test(U.className)){var J=0,F=document.getElementById($.substring(1));if("#"!==$){if(!F)return;J=m.getTopOf(F)}D.preventDefault();var X=function(){window.location=$},de=m.setup().edgeOffset;de&&(J=Math.max(0,J-de),T&&(X=function(){history.pushState({},"",$)})),m.toY(J,null,X)}}},!1)}return m}())?s.apply(C,r):s)&&(E.exports=a)},9024:(E,C,s)=>{"use strict";s.d(C,{S:()=>J});var r=s(47557),a=s(20044),c=s(28211),u=s(72621),e=s(66369),f=s(64537);let m=(()=>{class F{constructor(de){this.formatter=de,this.bytesLabels=["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],this.bytesPerSecondLabels=["B/s","KiB/s","MiB/s","GiB/s","TiB/s","PiB/s","EiB/s","ZiB/s","YiB/s"],this.secondsLabels=["ns","\u03bcs","ms","s","ks","Ms"],this.unitlessLabels=["","k","M","G","T","P","E","Z","Y"]}formatFromTo(de,V,ce="",se,fe,Te=1){return this.formatter.formatNumberFromTo(de,V,ce,se,fe,Te)}formatBytesFromTo(de,V,ce,se=1){return this.formatFromTo(de,V,ce,1024,this.bytesLabels,se)}formatBytesPerSecondFromTo(de,V,ce,se=1){return this.formatFromTo(de,V,ce,1024,this.bytesPerSecondLabels,se)}formatSecondsFromTo(de,V,ce,se=1){return this.formatFromTo(de,V,ce,1e3,this.secondsLabels,se)}formatUnitlessFromTo(de,V,ce="",se=1){return this.formatFromTo(de,V,ce,1e3,this.unitlessLabels,se)}}return F.\u0275fac=function(de){return new(de||F)(f.LFG(c.H))},F.\u0275prov=f.Yz7({token:F,factory:F.\u0275fac,providedIn:"root"}),F})();var T=s(99475),M=s(88692);function w(F,X){1&F&&(f.tHW(0,4,1),f._UZ(1,"div",11),f.N_p())}function D(F,X){if(1&F&&(f.tHW(0,4,2),f._UZ(1,"div"),f.N_p()),2&F){const de=f.oxw();f.xp6(1),f.pQV(de.label),f.QtT(0)}}function U(F,X){if(1&F&&(f.tHW(0,4,3),f._UZ(1,"div"),f.N_p()),2&F){const de=f.oxw();f.xp6(1),f.pQV(de.maxConvertedValue)(de.maxConvertedValueUnits),f.QtT(0)}}function W(F,X){if(1&F&&(f.tHW(0,12,1),f._UZ(1,"div"),f.N_p()),2&F){const de=f.oxw(2);f.xp6(1),f.pQV(de.label2),f.QtT(0)}}function $(F,X){if(1&F&&(f.TgZ(0,"div"),f.tHW(1,12),f.TgZ(2,"div",5),f._UZ(3,"div",13),f.YNc(4,W,2,1,"div",7),f._UZ(5,"div"),f.qZA(),f.N_p(),f.qZA()),2&F){const de=f.oxw();f.xp6(4),f.Q6J("ngIf",de.label2!==de.chartTitle),f.xp6(1),f.pQV(de.currentData2||"N/A")(de.currentDataUnits2),f.QtT(1)}}let J=(()=>{class F{constructor(de,V,ce,se,fe,Te){this.cssHelper=de,this.dimlessBinary=V,this.dimlessBinaryPerSecond=ce,this.dimlessPipe=se,this.formatter=fe,this.numberFormatter=Te,this.decimals=1,this.chartData={},this.options={},this.chartAreaBorderPlugin=[{beforeDraw($e){if(!$e.options.plugins.borderArea)return;const{ctx:ge,chartArea:{left:Et,top:ot,right:ct,bottom:qe}}=$e;ge.save(),ge.strokeStyle=$e.options.plugins.chartAreaBorder.borderColor,ge.lineWidth=$e.options.plugins.chartAreaBorder.borderWidth,ge.setLineDash($e.options.plugins.chartAreaBorder.borderDash||[]),ge.lineDashOffset=$e.options.plugins.chartAreaBorder.borderDashOffset,ge.strokeRect(Et,ot,ct-Et-1,qe),ge.restore()}}],this.chartData={dataset:[{label:"",data:[{x:0,y:0}],tension:.2,pointBackgroundColor:this.cssHelper.propertyValue("chart-color-strong-blue"),backgroundColor:this.cssHelper.propertyValue("chart-color-translucent-blue"),borderColor:this.cssHelper.propertyValue("chart-color-strong-blue"),borderWidth:1},{label:"",data:[],tension:.2,pointBackgroundColor:this.cssHelper.propertyValue("chart-color-orange"),backgroundColor:this.cssHelper.propertyValue("chart-color-translucent-yellow"),borderColor:this.cssHelper.propertyValue("chart-color-orange"),borderWidth:1}]},this.options={responsive:!0,maintainAspectRatio:!1,animation:!1,elements:{point:{radius:0}},legend:{display:!1},tooltips:{mode:"index",custom:function($e){$e.x=10,$e.y=0}.bind(this),intersect:!1,displayColors:!0,backgroundColor:this.cssHelper.propertyValue("chart-color-tooltip-background"),callbacks:{title:function($e){return $e[0].xLabel},label:($e,ge)=>" "+ge.datasets[$e.datasetIndex].label+" - "+$e.value+" "+this.chartDataUnits}},hover:{intersect:!1},scales:{xAxes:[{display:!1,type:"time",gridLines:{display:!1},time:{tooltipFormat:"DD/MM/YYYY - HH:mm:ss"}}],yAxes:[{afterFit:$e=>$e.width=100,gridLines:{display:!1},ticks:{beginAtZero:!0,maxTicksLimit:4,callback:$e=>0===$e?null:this.convertUnits($e)}}]},plugins:{borderArea:!0,chartAreaBorder:{borderColor:this.cssHelper.propertyValue("chart-color-slight-dark-gray"),borderWidth:1}}}}ngOnChanges(){this.updateChartData()}ngAfterViewInit(){this.updateChartData()}updateChartData(){this.chartData.dataset[0].label=this.label,this.chartData.dataset[1].label=this.label2,this.setChartTicks(),this.data&&(this.chartData.dataset[0].data=this.formatData(this.data),[this.currentData,this.currentDataUnits]=this.convertUnits(this.data[this.data.length-1][1]).split(" "),[this.maxConvertedValue,this.maxConvertedValueUnits]=this.convertUnits(this.maxValue).split(" ")),this.data2&&(this.chartData.dataset[1].data=this.formatData(this.data2),[this.currentData2,this.currentDataUnits2]=this.convertUnits(this.data2[this.data2.length-1][1]).split(" ")),this.chart&&this.chart.chart.update()}formatData(de){let V={};return V=de.map(ce=>({x:1e3*ce[0],y:Number(this.convertToChartDataUnits(ce[1]).replace(/[^\d,.]+/g,""))})),V}convertToChartDataUnits(de){let V="";return null!==this.chartDataUnits&&(V="B"===this.dataUnits?this.numberFormatter.formatBytesFromTo(de,this.dataUnits,this.chartDataUnits,this.decimals):"B/s"===this.dataUnits?this.numberFormatter.formatBytesPerSecondFromTo(de,this.dataUnits,this.chartDataUnits,this.decimals):"ms"===this.dataUnits?this.numberFormatter.formatSecondsFromTo(de,this.dataUnits,this.chartDataUnits,this.decimals):this.numberFormatter.formatUnitlessFromTo(de,this.dataUnits,this.chartDataUnits,this.decimals)),V}convertUnits(de){let V="";return V="B"===this.dataUnits?this.dimlessBinary.transform(de,this.decimals):"B/s"===this.dataUnits?this.dimlessBinaryPerSecond.transform(de,this.decimals):"ms"===this.dataUnits?this.formatter.format_number(de,1e3,["ms","s"],this.decimals):this.dimlessPipe.transform(de,this.decimals),V}setChartTicks(){if(!this.chart)return;let de=0,V="";if(this.data){let fe=Math.max(...this.data.map(Te=>Te[1]));if(this.data2){let Te=Math.max(...this.data2.map($e=>$e[1]));de=Math.max(fe,Te)}else de=fe;[de,V]=this.convertUnits(de).split(" ")}const se=this.chart.chart.options.scales.yAxes[0].ticks;se.suggestedMax=1.2*de,se.suggestedMin=0,se.callback=fe=>0===fe?null:V?`${fe} ${V}`:`${fe}`,this.chartDataUnits=V||"",this.chart.chart.update()}}return F.\u0275fac=function(de){return new(de||F)(f.Y36(T.P),f.Y36(r.$),f.Y36(a.O),f.Y36(e.n),f.Y36(c.H),f.Y36(m))},F.\u0275cmp=f.Xpm({type:F,selectors:[["cd-dashboard-area-chart"]],viewQuery:function(de,V){if(1&de&&f.Gf(u.jh,5),2&de){let ce;f.iGM(ce=f.CRH())&&(V.chart=ce.first)}},inputs:{chartTitle:"chartTitle",maxValue:"maxValue",dataUnits:"dataUnits",data:"data",data2:"data2",label:"label",label2:"label2",decimals:"decimals"},features:[f.TTD],decls:15,vars:11,consts:function(){let X,de,V;return X="" + "\ufffd0\ufffd" + "",de="" + "\ufffd#7\ufffd" + "" + "\ufffd*8:1\ufffd\ufffd#1:1\ufffd" + "" + "[\ufffd/#1:1\ufffd\ufffd/*8:1\ufffd|\ufffd/#1:2\ufffd\ufffd/*9:2\ufffd|\ufffd/#1:3\ufffd\ufffd/*10:3\ufffd|\ufffd/#7\ufffd]" + "" + "\ufffd*9:2\ufffd\ufffd#1:2\ufffd" + "" + "\ufffd0:2\ufffd" + ": " + "[\ufffd/#1:1\ufffd\ufffd/*8:1\ufffd|\ufffd/#1:2\ufffd\ufffd/*9:2\ufffd|\ufffd/#1:3\ufffd\ufffd/*10:3\ufffd|\ufffd/#7\ufffd]" + " " + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + " " + "\ufffd*10:3\ufffd\ufffd#1:3\ufffd" + " used of " + "\ufffd0:3\ufffd" + " " + "\ufffd1:3\ufffd" + " " + "[\ufffd/#1:1\ufffd\ufffd/*8:1\ufffd|\ufffd/#1:2\ufffd\ufffd/*9:2\ufffd|\ufffd/#1:3\ufffd\ufffd/*10:3\ufffd|\ufffd/#7\ufffd]" + "" + "[\ufffd/#1:1\ufffd\ufffd/*8:1\ufffd|\ufffd/#1:2\ufffd\ufffd/*9:2\ufffd|\ufffd/#1:3\ufffd\ufffd/*10:3\ufffd|\ufffd/#7\ufffd]" + "",de=f.Zx4(de),V="" + "\ufffd#2\ufffd" + "" + "\ufffd#3\ufffd" + "" + "[\ufffd/#3\ufffd|\ufffd/#1:1\ufffd\ufffd/*4:1\ufffd|\ufffd/#5\ufffd|\ufffd/#2\ufffd]" + "" + "\ufffd*4:1\ufffd\ufffd#1:1\ufffd" + "" + "\ufffd0:1\ufffd" + ": " + "[\ufffd/#3\ufffd|\ufffd/#1:1\ufffd\ufffd/*4:1\ufffd|\ufffd/#5\ufffd|\ufffd/#2\ufffd]" + "" + "\ufffd#5\ufffd" + "" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "" + "[\ufffd/#3\ufffd|\ufffd/#1:1\ufffd\ufffd/*4:1\ufffd|\ufffd/#5\ufffd|\ufffd/#2\ufffd]" + "" + "[\ufffd/#3\ufffd|\ufffd/#1:1\ufffd\ufffd/*4:1\ufffd|\ufffd/#5\ufffd|\ufffd/#2\ufffd]" + "",V=f.Zx4(V),[[1,"row","mt-2"],[1,"col-3","d-flex","flex-column","align-self-center"],[1,"chartTitle","pb-2"],X,de,[1,"d-inline-flex","align-items-center","gap-1"],["class","blue-box",4,"ngIf"],[4,"ngIf"],[1,"col-9","d-flex","flex-column"],[1,"chart","mt-3"],["baseChart","",3,"datasets","options","chartType","plugins"],[1,"blue-box"],V,[1,"yellow-box"]]},template:function(de,V){1&de&&(f.TgZ(0,"div",0)(1,"div",1),f._UZ(2,"br"),f.TgZ(3,"b",2),f.SDv(4,3),f.qZA(),f.TgZ(5,"div"),f.tHW(6,4),f.TgZ(7,"div",5),f.YNc(8,w,2,0,"div",6),f.YNc(9,D,2,1,"div",7),f.YNc(10,U,2,2,"div",7),f.qZA(),f.N_p(),f.qZA(),f.YNc(11,$,6,3,"div",7),f.qZA(),f.TgZ(12,"div",8)(13,"div",9),f._UZ(14,"canvas",10),f.qZA()()()),2&de&&(f.xp6(4),f.pQV(V.chartTitle),f.QtT(4),f.xp6(4),f.Q6J("ngIf",!V.maxValue),f.xp6(1),f.Q6J("ngIf",V.label2),f.xp6(1),f.Q6J("ngIf",V.maxValue&&V.currentData),f.pQV(V.currentData||"N/A")(V.currentDataUnits),f.QtT(6),f.xp6(1),f.Q6J("ngIf",V.label2),f.xp6(3),f.Q6J("datasets",V.chartData.dataset)("options",V.options)("chartType","line")("plugins",V.chartAreaBorderPlugin))},dependencies:[M.O5,u.jh],styles:[".chart[_ngcontent-%COMP%]{height:9vh}.blue-box[_ngcontent-%COMP%]{background-color:#0078c8;border:2px double #f0f0f0;height:13px;width:13px}.yellow-box[_ngcontent-%COMP%]{background-color:#ef9234;border:2px double #f0f0f0;height:13px;width:13px}"]}),F})()},54740:(E,C,s)=>{"use strict";s.d(C,{M:()=>T});var r=s(64537),a=s(16738),c=s.n(a),u=s(88692),e=s(87925),f=s(20092);function m(M,w){if(1&M&&(r.TgZ(0,"option",3),r._uU(1),r.qZA()),2&M){const D=w.$implicit;r.Q6J("ngValue",D.value),r.xp6(1),r.hij("",D.name," ")}}let T=(()=>{class M{constructor(){this.selectedTime=new r.vpe,this.times=[{name:"Last 5 minutes",value:this.timeToDate(300,1)},{name:"Last 15 minutes",value:this.timeToDate(900,3)},{name:"Last 30 minutes",value:this.timeToDate(1800,7)},{name:"Last 1 hour",value:this.timeToDate(3600,14)},{name:"Last 3 hours",value:this.timeToDate(10800,42)},{name:"Last 6 hours",value:this.timeToDate(21600,84)},{name:"Last 12 hours",value:this.timeToDate(43200,168)},{name:"Last 24 hours",value:this.timeToDate(86400,336)}],this.time=this.times[3].value}emitTime(){this.selectedTime.emit(this.timeToDate(this.time.end-this.time.start,this.time.step))}timeToDate(D,U){return{start:c()().unix()-D,end:c()().unix(),step:U}}}return M.\u0275fac=function(D){return new(D||M)},M.\u0275cmp=r.Xpm({type:M,selectors:[["cd-dashboard-time-selector"]],outputs:{selectedTime:"selectedTime"},decls:3,vars:2,consts:[[1,"timeSelector"],["id","timepicker","name","timepicker",1,"form-select",3,"ngModel","ngModelChange"],[3,"ngValue",4,"ngFor","ngForOf"],[3,"ngValue"]],template:function(D,U){1&D&&(r.TgZ(0,"div",0)(1,"select",1),r.NdJ("ngModelChange",function($){return U.time=$})("ngModelChange",function(){return U.emitTime()}),r.YNc(2,m,2,2,"option",2),r.qZA()()),2&D&&(r.xp6(1),r.Q6J("ngModel",U.time),r.xp6(1),r.Q6J("ngForOf",U.times))},dependencies:[u.sg,e.o,f.YN,f.Kr,f.EJ,f.JJ,f.On],styles:[".timeSelector[_ngcontent-%COMP%]{position:absolute;right:18px;top:20px;width:12rem}"]}),M})()},46767:(E,C,s)=>{"use strict";s.d(C,{d:()=>w});var r=s(88692),a=s(20092),c=s(54247),u=s(51389),e=s(72621),f=s(85770),m=s(44466),T=s(370),M=s(64537);let w=(()=>{class D{}return D.\u0275fac=function(W){return new(W||D)},D.\u0275mod=M.oAB({type:D}),D.\u0275inj=M.cJS({imports:[T.t,r.ez,u.Oz,m.m,e.m9,c.Bz,u.dT,u.HK,a.u5,a.UX,f.t]}),D})()},66265:(E,C,s)=>{"use strict";s.d(C,{B:()=>e});var r=s(88692),a=s(54247),c=s(44466),u=s(64537);let e=(()=>{class f{}return f.\u0275fac=function(T){return new(T||f)},f.\u0275mod=u.oAB({type:f}),f.\u0275inj=u.cJS({imports:[r.ez,c.m,a.Bz]}),f})()},60351:(E,C,s)=>{"use strict";s.d(C,{p:()=>F});var r=s(64762),a=s(35732),c=s(25917),u=s(19773),e=s(93523),f=s(64537);let m=class{constructor(de){this.http=de,this.url="api/perf_counters"}list(){return this.http.get(this.url)}get(de,V){return this.http.get(`${this.url}/${de}/${V}`).pipe((0,u.zg)(ce=>(0,c.of)(ce.counters)))}};m.\u0275fac=function(de){return new(de||m)(f.LFG(a.eN))},m.\u0275prov=f.Yz7({token:m,factory:m.\u0275fac,providedIn:"root"}),m=(0,r.gn)([e.o,(0,r.w6)("design:paramtypes",[a.eN])],m);var T=s(88692),M=s(34501),w=s(59019),D=s(66369);const U=["valueTpl"];function W(X,de){if(1&X&&(f._uU(0),f.ALo(1,"dimless")),2&X){const V=de.row;f.AsE(" ",f.lcZ(1,2,V.value)," ",V.unit," ")}}function $(X,de){if(1&X){const V=f.EpF();f.TgZ(0,"cd-table",2),f.NdJ("fetchData",function(se){f.CHM(V);const fe=f.oxw();return f.KtG(fe.getCounters(se))}),f.YNc(1,W,2,4,"ng-template",null,3,f.W1O),f.qZA()}if(2&X){const V=f.oxw();f.Q6J("data",V.counters)("columns",V.columns)("autoSave",!1)}}function J(X,de){1&X&&(f.TgZ(0,"cd-alert-panel",4),f.SDv(1,5),f.qZA())}let F=(()=>{class X{constructor(V){this.performanceCounterService=V,this.columns=[],this.counters=[]}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:1},{name:"Description",prop:"description",flexGrow:1},{name:"Value",prop:"value",cellTemplate:this.valueTpl,flexGrow:1}]}getCounters(V){this.performanceCounterService.get(this.serviceType,this.serviceId).subscribe(ce=>{this.counters=ce},ce=>{404===ce.status?(ce.preventDefault(),this.counters=null):V.error()})}}return X.\u0275fac=function(V){return new(V||X)(f.Y36(m))},X.\u0275cmp=f.Xpm({type:X,selectors:[["cd-table-performance-counter"]],viewQuery:function(V,ce){if(1&V&&f.Gf(U,5),2&V){let se;f.iGM(se=f.CRH())&&(ce.valueTpl=se.first)}},inputs:{serviceType:"serviceType",serviceId:"serviceId"},decls:3,vars:2,consts:function(){let de;return de="Performance counters not available",[["columnMode","flex",3,"data","columns","autoSave","fetchData",4,"ngIf","ngIfElse"],["warning",""],["columnMode","flex",3,"data","columns","autoSave","fetchData"],["valueTpl",""],["type","warning"],de]},template:function(V,ce){if(1&V&&(f.YNc(0,$,3,3,"cd-table",0),f.YNc(1,J,2,0,"ng-template",null,1,f.W1O)),2&V){const se=f.MAs(2);f.Q6J("ngIf",ce.counters)("ngIfElse",se)}},dependencies:[T.O5,M.G,w.a,D.n]}),X})()},43186:(E,C,s)=>{"use strict";s.d(C,{L6:()=>r,VY:()=>u,iG:()=>a,jb:()=>c});class r{}class a{}class c{}class u{}},370:(E,C,s)=>{"use strict";s.d(C,{t:()=>m});var r=s(88692),a=s(51389),c=s(37496),u=s(40267),e=s(44466),f=s(64537);let m=(()=>{class T{}return T.\u0275fac=function(w){return new(w||T)},T.\u0275mod=f.oAB({type:T}),T.\u0275inj=f.cJS({imports:[r.ez,u.t,e.m,a.Oz,c.b]}),T})()},20687:(E,C,s)=>{"use strict";s.d(C,{j:()=>f});var r=s(23815),a=s.n(r),c=s(370);class u{constructor(T){if(this.type=T,!this.isValidType())throw new Error("Wrong placement group category type");this.setTypeStates()}isValidType(){return u.VALID_CATEGORIES.includes(this.type)}setTypeStates(){switch(this.type){case u.CATEGORY_CLEAN:this.states=["active","clean"];break;case u.CATEGORY_WORKING:this.states=["activating","backfill_wait","backfilling","creating","deep","degraded","forced_backfill","forced_recovery","peering","peered","recovering","recovery_wait","repair","scrubbing","snaptrim","snaptrim_wait"];break;case u.CATEGORY_WARNING:this.states=["backfill_toofull","backfill_unfound","down","incomplete","inconsistent","recovery_toofull","recovery_unfound","remapped","snaptrim_error","stale","undersized"];break;default:this.states=[]}}}u.CATEGORY_CLEAN="clean",u.CATEGORY_WORKING="working",u.CATEGORY_WARNING="warning",u.CATEGORY_UNKNOWN="unknown",u.VALID_CATEGORIES=[u.CATEGORY_CLEAN,u.CATEGORY_WORKING,u.CATEGORY_WARNING,u.CATEGORY_UNKNOWN];var e=s(64537);let f=(()=>{class m{constructor(){this.categories=this.createCategories()}getAllTypes(){return u.VALID_CATEGORIES}getTypeByStates(M){const w=this.getPgStatesFromText(M);if(0===w.length)return u.CATEGORY_UNKNOWN;const D=a().zipObject(u.VALID_CATEGORIES,u.VALID_CATEGORIES.map(W=>a().intersection(this.categories[W].states,w).length));if(D[u.CATEGORY_WARNING]>0)return u.CATEGORY_WARNING;const U=D[u.CATEGORY_WORKING];return w.length>D[u.CATEGORY_CLEAN]+U?u.CATEGORY_UNKNOWN:U?u.CATEGORY_WORKING:u.CATEGORY_CLEAN}createCategories(){return a().zipObject(u.VALID_CATEGORIES,u.VALID_CATEGORIES.map(M=>new u(M)))}getPgStatesFromText(M){const w=M.replace(/[^a-z_]+/g," ").trim().split(" ");return a().uniq(w)}}return m.\u0275fac=function(M){return new(M||m)},m.\u0275prov=e.Yz7({token:m,factory:m.\u0275fac,providedIn:c.t}),m})()},13140:(E,C,s)=>{"use strict";s.r(C),s.d(C,{AuthModule:()=>Vi,RoutedAuthModule:()=>ko});var r=s(88692),a=s(20092),c=s(54247),u=s(51389),e=s(37496),f=s(79512),m=s(44466),T=s(35758),M=s(18001),w=s(93614),D=s(95463),U=s(90070),W=s(97161),$=(()=>(($||($={})).editing="editing",$))();class J{}var F=s(64537),X=s(25917),de=s(19773),V=s(35732);let ce=(()=>{class Ir{constructor(Vt){this.http=Vt}list(){return this.http.get("api/role")}delete(Vt){return this.http.delete(`api/role/${Vt}`)}get(Vt){return this.http.get(`api/role/${Vt}`)}create(Vt){return this.http.post("api/role",Vt)}clone(Vt,bn){return this.http.post(`api/role/${Vt}/clone`,{new_name:bn})}update(Vt){return this.http.put(`api/role/${Vt.name}`,Vt)}exists(Vt){return this.list().pipe((0,de.zg)(bn=>{const Bn=bn.some(ci=>ci.name===Vt);return(0,X.of)(Bn)}))}}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)(F.LFG(V.eN))},Ir.\u0275prov=F.Yz7({token:Ir,factory:Ir.\u0275fac,providedIn:"root"}),Ir})(),se=(()=>{class Ir{constructor(Vt){this.http=Vt}list(){return this.http.get("ui-api/scope")}}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)(F.LFG(V.eN))},Ir.\u0275prov=F.Yz7({token:Ir,factory:Ir.\u0275fac,providedIn:"root"}),Ir})();var fe=s(30839),Te=s(54982),$e=s(82945),ge=s(63622),Et=s(87925),ot=s(94276),ct=s(56310),qe=s(41582),He=s(10545);function We(Ir,ro){1&Ir&&(F.TgZ(0,"span",22),F.SDv(1,23),F.qZA())}function Le(Ir,ro){1&Ir&&(F.TgZ(0,"span",22),F.SDv(1,24),F.qZA())}const Pt=function(Ir){return{required:Ir}};function it(Ir,ro){if(1&Ir){const Vt=F.EpF();F.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),F.SDv(5,6),F.ALo(6,"titlecase"),F.ALo(7,"upperFirst"),F.qZA(),F.TgZ(8,"div",7)(9,"div",8)(10,"label",9),F.SDv(11,10),F.qZA(),F.TgZ(12,"div",11),F._UZ(13,"input",12),F.YNc(14,We,2,0,"span",13),F.YNc(15,Le,2,0,"span",13),F.qZA()(),F.TgZ(16,"div",8)(17,"label",14),F.SDv(18,15),F.qZA(),F.TgZ(19,"div",11),F._UZ(20,"input",16),F.qZA()(),F.TgZ(21,"div",8)(22,"label",17),F.SDv(23,18),F.qZA(),F.TgZ(24,"div",11),F._UZ(25,"cd-checked-table-form",19),F.qZA()()(),F.TgZ(26,"div",20)(27,"cd-form-button-panel",21),F.NdJ("submitActionEvent",function(){F.CHM(Vt);const Bn=F.oxw();return F.KtG(Bn.submit())}),F.ALo(28,"titlecase"),F.ALo(29,"upperFirst"),F.qZA()()()()()}if(2&Ir){const Vt=F.MAs(2),bn=F.oxw();F.xp6(1),F.Q6J("formGroup",bn.roleForm),F.xp6(6),F.pQV(F.lcZ(6,13,bn.action))(F.lcZ(7,15,bn.resource)),F.QtT(5),F.xp6(3),F.Q6J("ngClass",F.VKq(21,Pt,bn.mode!==bn.roleFormMode.editing)),F.xp6(4),F.Q6J("ngIf",bn.roleForm.showError("name",Vt,"required")),F.xp6(1),F.Q6J("ngIf",bn.roleForm.showError("name",Vt,"notUnique")),F.xp6(10),F.Q6J("data",bn.scopes_permissions)("columns",bn.columns)("form",bn.roleForm)("scopes",bn.scopes)("initialValue",bn.initialValue),F.xp6(2),F.Q6J("form",bn.roleForm)("submitText",F.lcZ(28,17,bn.action)+" "+F.lcZ(29,19,bn.resource))}}let Xt=(()=>{class Ir extends w.E{constructor(Vt,bn,Bn,ci,_o,go){super(),this.route=Vt,this.router=bn,this.roleService=Bn,this.scopeService=ci,this.notificationService=_o,this.actionLabels=go,this.scopes=[],this.scopes_permissions=[],this.initialValue={},this.roleFormMode=$,this.resource="role",this.createForm()}createForm(){this.roleForm=new D.d({name:new a.p4("",{validators:[a.kI.required],asyncValidators:[U.h.unique(this.roleService.exists,this.roleService)]}),description:new a.p4(""),scopes_permissions:new a.p4({})})}ngOnInit(){this.columns=[{prop:"scope",name:"All",flexGrow:2},{prop:"read",name:"Read",flexGrow:1,cellClass:"text-center"},{prop:"create",name:"Create",flexGrow:1,cellClass:"text-center"},{prop:"update",name:"Update",flexGrow:1,cellClass:"text-center"},{prop:"delete",name:"Delete",flexGrow:1,cellClass:"text-center"}],this.router.url.startsWith("/user-management/roles/edit")?(this.mode=this.roleFormMode.editing,this.action=this.actionLabels.EDIT):this.action=this.actionLabels.CREATE,this.mode===this.roleFormMode.editing?this.initEdit():this.initCreate()}initCreate(){this.scopeService.list().subscribe(Vt=>{this.scopes=Vt,this.loadingReady()})}initEdit(){this.roleForm.get("name").disable(),this.route.params.subscribe(Vt=>{const bn=[];bn.push(this.scopeService.list()),bn.push(this.roleService.get(Vt.name)),(0,T.D)(bn).subscribe(Bn=>{this.scopes=Bn[0],["name","description","scopes_permissions"].forEach(ci=>this.roleForm.get(ci).setValue(Bn[1][ci])),this.initialValue=Bn[1].scopes_permissions,this.loadingReady()})})}getRequest(){const Vt=new J;return["name","description","scopes_permissions"].forEach(bn=>Vt[bn]=this.roleForm.get(bn).value),Vt}createAction(){const Vt=this.getRequest();this.roleService.create(Vt).subscribe(()=>{this.notificationService.show(M.k.success,"Created role '" + Vt.name + "'"),this.router.navigate(["/user-management/roles"])},()=>{this.roleForm.setErrors({cdSubmitButton:!0})})}editAction(){const Vt=this.getRequest();this.roleService.update(Vt).subscribe(()=>{this.notificationService.show(M.k.success,"Updated role '" + Vt.name + "'"),this.router.navigate(["/user-management/roles"])},()=>{this.roleForm.setErrors({cdSubmitButton:!0})})}submit(){this.mode===this.roleFormMode.editing?this.editAction():this.createAction()}}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)(F.Y36(c.gz),F.Y36(c.F0),F.Y36(ce),F.Y36(se),F.Y36(W.g),F.Y36(f.p4))},Ir.\u0275cmp=F.Xpm({type:Ir,selectors:[["cd-role-form"]],features:[F.qOj],decls:1,vars:1,consts:function(){let ro,Vt,bn,Bn,ci,_o,go,es;return ro="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",Vt="Name",bn="Name...",Bn="Description",ci="Description...",_o="Permissions",go="This field is required.",es="The chosen name is already in use.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","roleForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],ro,[1,"card-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label",3,"ngClass"],Vt,[1,"cd-col-form-input"],["type","text","placeholder",bn,"id","name","name","name","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","description",1,"cd-col-form-label"],Bn,["type","text","placeholder",ci,"id","description","name","description","formControlName","description",1,"form-control"],[1,"cd-col-form-label"],_o,["inputField","scopes_permissions",3,"data","columns","form","scopes","initialValue"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],go,es]},template:function(Vt,bn){1&Vt&&F.YNc(0,it,30,23,"div",0),2&Vt&&F.Q6J("cdFormLoading",bn.loading)},dependencies:[r.mk,r.O5,a._Y,a.Fj,a.JJ,a.JL,a.sg,a.u,fe.p,Te.l,$e.U,ge.y,Et.o,ot.b,ct.P,qe.V,r.rS,He.m],styles:[".datatable-permissions-header-cell-label[_ngcontent-%COMP%], .datatable-permissions-scope-cell-label[_ngcontent-%COMP%]{font-weight:700}"]}),Ir})();var cn=s(68136),pn=s(30982),Rn=s(65683),At=s(99466),qt=s(65862),sn=s(68774),fn=s(41039),xn=s(51847),Kr=s(47640),Or=s(63285),Lr=s(59019),ir=s(94928),Qr=s(23815),jr=s.n(Qr);function br(Ir,ro){if(1&Ir&&(F.ynx(0),F._UZ(1,"cd-table",1),F.BQk()),2&Ir){const Vt=F.oxw();F.xp6(1),F.Q6J("data",Vt.scopes_permissions)("columns",Vt.columns)("toolHeader",!1)("autoReload",!1)("autoSave",!1)("footer",!1)("limit",0)}}let ht=(()=>{class Ir{constructor(){this.scopes_permissions=[]}ngOnInit(){this.columns=[{prop:"scope",name:"Scope",flexGrow:2},{prop:"read",name:"Read",flexGrow:1,cellClass:"text-center",cellTransformation:At.e.checkIcon},{prop:"create",name:"Create",flexGrow:1,cellClass:"text-center",cellTransformation:At.e.checkIcon},{prop:"update",name:"Update",flexGrow:1,cellClass:"text-center",cellTransformation:At.e.checkIcon},{prop:"delete",name:"Delete",flexGrow:1,cellClass:"text-center",cellTransformation:At.e.checkIcon}]}ngOnChanges(){if(this.selection){this.selectedItem=this.selection;const Vt=[];jr().each(this.scopes,bn=>{const Bn={read:!1,create:!1,update:!1,delete:!1};Bn.scope=bn,bn in this.selectedItem.scopes_permissions&&jr().each(this.selectedItem.scopes_permissions[bn],ci=>{Bn[ci]=!0}),Vt.push(Bn)}),this.scopes_permissions=Vt}}}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)},Ir.\u0275cmp=F.Xpm({type:Ir,selectors:[["cd-role-details"]],inputs:{selection:"selection",scopes:"scopes"},features:[F.TTD],decls:1,vars:1,consts:[[4,"ngIf"],["columnMode","flex",3,"data","columns","toolHeader","autoReload","autoSave","footer","limit"]],template:function(Vt,bn){1&Vt&&F.YNc(0,br,2,7,"ng-container",0),2&Vt&&F.Q6J("ngIf",bn.selection)},dependencies:[r.O5,Lr.a],styles:[".fa[_ngcontent-%COMP%]{font-size:large}.fa.fa-square-o[_ngcontent-%COMP%]{color:#ced4da}"]}),Ir})();const Wt=function(){return{exact:!0}};let Tt=(()=>{class Ir{constructor(Vt){this.router=Vt}}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)(F.Y36(c.F0))},Ir.\u0275cmp=F.Xpm({type:Ir,selectors:[["cd-user-tabs"]],decls:7,vars:4,consts:function(){let ro,Vt;return ro="Users",Vt="Roles",[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/user-management/users","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],ro,["routerLink","/user-management/roles","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],Vt]},template:function(Vt,bn){1&Vt&&(F.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),F.SDv(3,3),F.qZA()(),F.TgZ(4,"li",1)(5,"a",4),F.SDv(6,5),F.qZA()()()),2&Vt&&(F.xp6(2),F.Q6J("routerLinkActiveOptions",F.DdM(2,Wt)),F.xp6(3),F.Q6J("routerLinkActiveOptions",F.DdM(3,Wt)))},dependencies:[c.rH,c.Od]}),Ir})(),jn=(()=>{class Ir extends cn.o{constructor(Vt,bn,Bn,ci,_o,go,es,ts){super(),this.roleService=Vt,this.scopeService=bn,this.emptyPipe=Bn,this.authStorageService=ci,this.modalService=_o,this.notificationService=go,this.urlBuilder=es,this.actionLabels=ts,this.selection=new sn.r,this.permission=this.authStorageService.getPermissions().user,this.tableActions=[{permission:"create",icon:qt.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"create",icon:qt.P.clone,name:this.actionLabels.CLONE,disable:()=>!this.selection.hasSingleSelection,click:()=>this.cloneRole()},{permission:"update",icon:qt.P.edit,disable:()=>!this.selection.hasSingleSelection||this.selection.first().system,routerLink:()=>this.selection.first()&&this.urlBuilder.getEdit(this.selection.first().name),name:this.actionLabels.EDIT},{permission:"delete",icon:qt.P.destroy,disable:()=>!this.selection.hasSingleSelection||this.selection.first().system,click:()=>this.deleteRoleModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:3},{name:"Description",prop:"description",flexGrow:5,pipe:this.emptyPipe},{name:"System Role",prop:"system",cellClass:"text-center",flexGrow:1,cellTransformation:At.e.checkIcon}]}getRoles(){(0,T.D)([this.roleService.list(),this.scopeService.list()]).subscribe(Vt=>{this.roles=Vt[0],this.scopes=Vt[1]})}updateSelection(Vt){this.selection=Vt}deleteRole(Vt){this.roleService.delete(Vt).subscribe(()=>{this.getRoles(),this.modalRef.close(),this.notificationService.show(M.k.success,"Deleted role '" + Vt + "'")},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}deleteRoleModal(){const Vt=this.selection.first().name;this.modalRef=this.modalService.show(pn.M,{itemDescription:"Role",itemNames:[Vt],submitAction:()=>this.deleteRole(Vt)})}cloneRole(){const Vt=this.selection.first().name;this.modalRef=this.modalService.show(Rn.X,{fields:[{type:"text",name:"newName",value:`${Vt}_clone`,label:"New name",required:!0}],titleText:"Clone Role",submitButtonText:"Clone Role",onSubmit:bn=>{this.roleService.clone(Vt,bn.newName).subscribe(()=>{this.getRoles(),this.notificationService.show(M.k.success,"Cloned role '" + bn.newName + "' from '" + Vt + "'")})}})}}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)(F.Y36(ce),F.Y36(se),F.Y36(fn.W),F.Y36(Kr.j),F.Y36(Or.Z),F.Y36(W.g),F.Y36(xn.F),F.Y36(f.p4))},Ir.\u0275cmp=F.Xpm({type:Ir,selectors:[["cd-role-list"]],features:[F._Bn([{provide:xn.F,useValue:new xn.F("user-management/roles")}]),F.qOj],decls:4,vars:8,consts:[["columnMode","flex","identifier","name","selectionType","single",3,"data","columns","hasDetails","setExpandedRow","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection","scopes"]],template:function(Vt,bn){1&Vt&&(F._UZ(0,"cd-user-tabs"),F.TgZ(1,"cd-table",0),F.NdJ("setExpandedRow",function(ci){return bn.setExpandedRow(ci)})("fetchData",function(){return bn.getRoles()})("updateSelection",function(ci){return bn.updateSelection(ci)}),F._UZ(2,"cd-table-actions",1)(3,"cd-role-details",2),F.qZA()),2&Vt&&(F.xp6(1),F.Q6J("data",bn.roles)("columns",bn.columns)("hasDetails",!0),F.xp6(1),F.Q6J("permission",bn.permission)("selection",bn.selection)("tableActions",bn.tableActions),F.xp6(1),F.Q6J("selection",bn.expandedRow)("scopes",bn.scopes))},dependencies:[Lr.a,ir.K,ht,Tt]}),Ir})();var hr=s(16738),Oi=s.n(hr),Wi=s(39219),so=s(9837),kr=s(36169),Ei=s(7022),ii=s(51907),mr=s(81354),pr=(()=>((pr||(pr={})).editing="editing",pr))();class Eo{}var po=s(32057),$i=s(62862),qr=s(18372),Hi=s(60192),Dn=s(52266),Hn=s(4416);const jt=["removeSelfUserReadUpdatePermissionTpl"];function Fe(Ir,ro){1&Ir&&(F.TgZ(0,"span",28),F.SDv(1,29),F.qZA())}function Ie(Ir,ro){1&Ir&&(F.TgZ(0,"span",28),F.SDv(1,30),F.qZA())}function et(Ir,ro){if(1&Ir&&F._UZ(0,"cd-helper",39),2&Ir){const Vt=F.oxw(3);F.s9C("html",Vt.passwordPolicyHelpText)}}function ze(Ir,ro){1&Ir&&(F.TgZ(0,"span",28),F.SDv(1,40),F.qZA())}function an(Ir,ro){if(1&Ir&&(F.TgZ(0,"span",28),F._uU(1),F.qZA()),2&Ir){const Vt=F.oxw(3);F.xp6(1),F.hij(" ",Vt.passwordValuation," ")}}function lt(Ir,ro){if(1&Ir&&(F.TgZ(0,"div",10)(1,"label",31),F.ynx(2),F.SDv(3,32),F.BQk(),F.YNc(4,et,1,1,"cd-helper",33),F.qZA(),F.TgZ(5,"div",13)(6,"div",34),F._UZ(7,"input",35)(8,"button",36),F.qZA(),F.TgZ(9,"div",37),F._UZ(10,"div",38),F.qZA(),F.YNc(11,ze,2,0,"span",15),F.YNc(12,an,2,1,"span",15),F.qZA()()),2&Ir){F.oxw();const Vt=F.MAs(2),bn=F.oxw();F.xp6(4),F.Q6J("ngIf",bn.passwordPolicyHelpText.length>0),F.xp6(6),F.Tol(bn.passwordStrengthLevelClass),F.s9C("title",bn.passwordValuation),F.xp6(1),F.Q6J("ngIf",bn.userForm.showError("password",Vt,"required")),F.xp6(1),F.Q6J("ngIf",bn.userForm.showError("password",Vt,"passwordPolicy"))}}function Rt(Ir,ro){1&Ir&&(F.TgZ(0,"span",28),F.SDv(1,45),F.qZA())}function Pe(Ir,ro){1&Ir&&(F.TgZ(0,"span",28),F.SDv(1,46),F.qZA())}function qn(Ir,ro){if(1&Ir&&(F.TgZ(0,"div",10)(1,"label",41),F.SDv(2,42),F.qZA(),F.TgZ(3,"div",13)(4,"div",34),F._UZ(5,"input",43)(6,"button",44),F.YNc(7,Rt,2,0,"span",15),F.qZA(),F.YNc(8,Pe,2,0,"span",15),F.qZA()()),2&Ir){F.oxw();const Vt=F.MAs(2),bn=F.oxw();F.xp6(7),F.Q6J("ngIf",bn.userForm.showError("confirmpassword",Vt,"match")),F.xp6(1),F.Q6J("ngIf",bn.userForm.showError("confirmpassword",Vt,"required"))}}function gr(Ir,ro){1&Ir&&(F.TgZ(0,"cd-helper",53)(1,"p"),F._uU(2," The Dashboard setting defining the expiration interval of passwords is currently set to "),F.TgZ(3,"strong"),F._uU(4,"0"),F.qZA(),F._uU(5,". This means if a date is set, the user password will only expire once. "),F.qZA(),F.TgZ(6,"p"),F._uU(7," Consider configuring the Dashboard setting "),F.TgZ(8,"a",54),F._uU(9,"USER_PWD_EXPIRATION_SPAN"),F.qZA(),F._uU(10," in order to let passwords expire periodically. "),F.qZA()())}function Pn(Ir,ro){1&Ir&&(F.TgZ(0,"span",28),F.SDv(1,55),F.qZA())}const _r=function(Ir){return{required:Ir}};function Pr(Ir,ro){if(1&Ir){const Vt=F.EpF();F.TgZ(0,"div",10)(1,"label",47),F.ynx(2),F.SDv(3,48),F.BQk(),F.YNc(4,gr,11,0,"cd-helper",49),F.qZA(),F.TgZ(5,"div",13)(6,"div",34)(7,"input",50,51),F.NdJ("click",function(){F.CHM(Vt);const Bn=F.MAs(8);return F.KtG(Bn.open())})("keypress",function(){F.CHM(Vt);const Bn=F.MAs(8);return F.KtG(Bn.close())}),F.qZA(),F.TgZ(9,"button",52),F.NdJ("click",function(){F.CHM(Vt);const Bn=F.oxw(2);return F.KtG(Bn.clearExpirationDate())}),F._UZ(10,"i"),F.qZA(),F.YNc(11,Pn,2,0,"span",15),F.qZA()()()}if(2&Ir){F.oxw();const Vt=F.MAs(2),bn=F.oxw(),Bn=F.MAs(4);F.xp6(1),F.Q6J("ngClass",F.VKq(7,_r,bn.pwdExpirationSettings.pwdExpirationSpan>0)),F.xp6(3),F.Q6J("ngIf",0==bn.pwdExpirationSettings.pwdExpirationSpan),F.xp6(3),F.Q6J("ngbPopover",Bn),F.xp6(3),F.Gre("icon-prepend ",bn.icons.destroy,""),F.xp6(1),F.Q6J("ngIf",bn.userForm.showError("pwdExpirationDate",Vt,"required"))}}function tr(Ir,ro){1&Ir&&(F.TgZ(0,"span",28),F.SDv(1,56),F.qZA())}function Zn(Ir,ro){if(1&Ir&&(F.TgZ(0,"span",57),F._UZ(1,"cd-select-badges",58),F.qZA()),2&Ir){const Vt=F.oxw(2);F.xp6(1),F.Q6J("data",Vt.userForm.controls.roles.value)("options",Vt.allRoles)("messages",Vt.messages)}}function nr(Ir,ro){1&Ir&&(F.TgZ(0,"div",10)(1,"div",59)(2,"div",60),F._UZ(3,"input",61),F.TgZ(4,"label",62),F.SDv(5,63),F.qZA()()()())}function Zt(Ir,ro){1&Ir&&(F.TgZ(0,"div",10)(1,"div",59)(2,"div",60),F._UZ(3,"input",64),F.TgZ(4,"label",65),F.SDv(5,66),F.qZA()()()())}function dn(Ir,ro){if(1&Ir){const Vt=F.EpF();F.TgZ(0,"div",3)(1,"form",4,5)(3,"div",6)(4,"div",7),F.SDv(5,8),F.ALo(6,"titlecase"),F.ALo(7,"upperFirst"),F.qZA(),F.TgZ(8,"div",9)(9,"div",10)(10,"label",11),F.SDv(11,12),F.qZA(),F.TgZ(12,"div",13),F._UZ(13,"input",14),F.YNc(14,Fe,2,0,"span",15),F.YNc(15,Ie,2,0,"span",15),F.qZA()(),F.YNc(16,lt,13,7,"div",16),F.YNc(17,qn,9,2,"div",16),F.YNc(18,Pr,12,9,"div",16),F.TgZ(19,"div",10)(20,"label",17),F.SDv(21,18),F.qZA(),F.TgZ(22,"div",13),F._UZ(23,"input",19),F.qZA()(),F.TgZ(24,"div",10)(25,"label",20),F.SDv(26,21),F.qZA(),F.TgZ(27,"div",13),F._UZ(28,"input",22),F.YNc(29,tr,2,0,"span",15),F.qZA()(),F.TgZ(30,"div",10)(31,"label",23),F.SDv(32,24),F.qZA(),F.TgZ(33,"div",13),F.YNc(34,Zn,2,3,"span",25),F.qZA()(),F.YNc(35,nr,6,0,"div",16),F.YNc(36,Zt,6,0,"div",16),F.qZA(),F.TgZ(37,"div",26)(38,"cd-form-button-panel",27),F.NdJ("submitActionEvent",function(){F.CHM(Vt);const Bn=F.oxw();return F.KtG(Bn.submit())}),F.ALo(39,"titlecase"),F.ALo(40,"upperFirst"),F.qZA()()()()()}if(2&Ir){const Vt=F.MAs(2),bn=F.oxw();F.xp6(1),F.Q6J("formGroup",bn.userForm),F.xp6(6),F.pQV(F.lcZ(6,15,bn.action))(F.lcZ(7,17,bn.resource)),F.QtT(5),F.xp6(3),F.Q6J("ngClass",F.VKq(23,_r,bn.mode!==bn.userFormMode.editing)),F.xp6(4),F.Q6J("ngIf",bn.userForm.showError("username",Vt,"required")),F.xp6(1),F.Q6J("ngIf",bn.userForm.showError("username",Vt,"notUnique")),F.xp6(1),F.Q6J("ngIf",!bn.authStorageService.isSSO()),F.xp6(1),F.Q6J("ngIf",!bn.authStorageService.isSSO()),F.xp6(1),F.Q6J("ngIf",!bn.authStorageService.isSSO()),F.xp6(11),F.Q6J("ngIf",bn.userForm.showError("email",Vt,"email")),F.xp6(5),F.Q6J("ngIf",bn.allRoles),F.xp6(1),F.Q6J("ngIf",!bn.isCurrentUser()),F.xp6(1),F.Q6J("ngIf",!bn.isCurrentUser()&&!bn.authStorageService.isSSO()),F.xp6(2),F.Q6J("form",bn.userForm)("submitText",F.lcZ(39,19,bn.action)+" "+F.lcZ(40,21,bn.resource))}}function Ge(Ir,ro){1&Ir&&(F.TgZ(0,"p")(1,"strong"),F.SDv(2,67),F.qZA()(),F._UZ(3,"br"),F.TgZ(4,"p"),F.SDv(5,68),F.qZA(),F.ynx(6),F.SDv(7,69),F.BQk())}function Ot(Ir,ro){if(1&Ir&&F._UZ(0,"cd-date-time-picker",70),2&Ir){const Vt=F.oxw();F.Q6J("control",Vt.userForm.get("pwdExpirationDate"))("hasTime",!1)}}let mn=(()=>{class Ir extends w.E{constructor(Vt,bn,Bn,ci,_o,go,es,ts,jo,ss,gs,Is){super(),this.authService=Vt,this.authStorageService=bn,this.route=Bn,this.router=ci,this.modalService=_o,this.roleService=go,this.userService=es,this.notificationService=ts,this.actionLabels=jo,this.passwordPolicyService=ss,this.formBuilder=gs,this.settingsService=Is,this.userFormMode=pr,this.messages=new Ei.a({empty:"There are no roles."}),this.passwordPolicyHelpText="",this.icons=qt.P,this.pwdExpirationFormat="YYYY-MM-DD",this.resource="user",this.createForm(),this.messages=new Ei.a({empty:"There are no roles."})}createForm(){this.passwordPolicyService.getHelpText().subscribe(Vt=>{this.passwordPolicyHelpText=Vt}),this.userForm=this.formBuilder.group({username:["",[a.kI.required],[U.h.unique(this.userService.validateUserName,this.userService)]],name:[""],password:["",[],[U.h.passwordPolicy(this.userService,()=>this.userForm.getValue("username"),(Vt,bn,Bn)=>{this.passwordStrengthLevelClass=this.passwordPolicyService.mapCreditsToCssClass(bn),this.passwordValuation=jr().defaultTo(Bn,"")})]],confirmpassword:[""],pwdExpirationDate:[void 0],email:["",[U.h.email]],roles:[[]],enabled:[!0,[a.kI.required]],pwdUpdateRequired:[!0]},{validators:[U.h.match("password","confirmpassword")]})}ngOnInit(){this.router.url.startsWith("/user-management/users/edit")?(this.mode=this.userFormMode.editing,this.action=this.actionLabels.EDIT):this.action=this.actionLabels.CREATE;const Vt=[this.roleService.list(),this.settingsService.getStandardSettings()];(0,T.D)(Vt).subscribe(bn=>{if(this.allRoles=jr().map(bn[0],Bn=>(Bn.enabled=!0,Bn)),this.pwdExpirationSettings=new ii.G(bn[1]),this.mode===this.userFormMode.editing)this.initEdit();else{if(this.pwdExpirationSettings.pwdExpirationSpan>0){const Bn=this.userForm.get("pwdExpirationDate"),ci=Oi()();ci.add(this.pwdExpirationSettings.pwdExpirationSpan,"day"),Bn.setValue(ci.format(this.pwdExpirationFormat)),Bn.setValidators([a.kI.required])}this.loadingReady()}})}initEdit(){this.disableForEdit(),this.route.params.subscribe(Vt=>{this.userService.get(Vt.username).subscribe(Bn=>{this.response=jr().cloneDeep(Bn),this.setResponse(Bn),this.loadingReady()})})}disableForEdit(){this.userForm.get("username").disable()}setResponse(Vt){["username","name","email","roles","enabled","pwdUpdateRequired"].forEach(Bn=>this.userForm.get(Bn).setValue(Vt[Bn]));const bn=Vt.pwdExpirationDate;bn&&this.userForm.get("pwdExpirationDate").setValue(Oi()(1e3*bn).format(this.pwdExpirationFormat))}getRequest(){const Vt=new Eo;["username","password","name","email","roles","enabled","pwdUpdateRequired"].forEach(Bn=>Vt[Bn]=this.userForm.get(Bn).value);const bn=this.userForm.get("pwdExpirationDate").value;if(bn){const Bn=Oi()(bn,this.pwdExpirationFormat);(this.mode!==this.userFormMode.editing||this.response.pwdExpirationDate!==Bn.unix())&&Bn.set({hour:23,minute:59,second:59}),Vt.pwdExpirationDate=Bn.unix()}return Vt}createAction(){const Vt=this.getRequest();this.userService.create(Vt).subscribe(()=>{this.notificationService.show(M.k.success,"Created user '" + Vt.username + "'"),this.router.navigate(["/user-management/users"])},()=>{this.userForm.setErrors({cdSubmitButton:!0})})}editAction(){if(this.isUserRemovingNeededRolePermissions()){const Vt={titleText:"Update user",buttonText:"Continue",bodyTpl:this.removeSelfUserReadUpdatePermissionTpl,onSubmit:()=>{this.modalRef.close(),this.doEditAction()},onCancel:()=>{this.userForm.setErrors({cdSubmitButton:!0}),this.userForm.get("roles").reset(this.userForm.get("roles").value)}};this.modalRef=this.modalService.show(kr.Y,Vt)}else this.doEditAction()}isCurrentUser(){return this.authStorageService.getUsername()===this.userForm.getValue("username")}isUserChangingRoles(){return this.isCurrentUser()&&this.response&&!jr().isEqual(this.response.roles,this.userForm.getValue("roles"))}isUserRemovingNeededRolePermissions(){return this.isCurrentUser()&&!this.hasUserReadUpdatePermissions(this.userForm.getValue("roles"))}hasUserReadUpdatePermissions(Vt=[]){for(const bn of this.allRoles)if(-1!==Vt.indexOf(bn.name)&&bn.scopes_permissions.user){const Bn=bn.scopes_permissions.user;return["read","update"].every(ci=>-1!==Bn.indexOf(ci))}return!1}doEditAction(){const Vt=this.getRequest();this.userService.update(Vt).subscribe(()=>{this.isUserChangingRoles()?this.authService.logout(()=>{this.notificationService.show(M.k.info,"You were automatically logged out because your roles have been changed.")}):(this.notificationService.show(M.k.success,"Updated user '" + Vt.username + "'"),this.router.navigate(["/user-management/users"]))},()=>{this.userForm.setErrors({cdSubmitButton:!0})})}clearExpirationDate(){this.userForm.get("pwdExpirationDate").setValue(void 0)}submit(){this.mode===this.userFormMode.editing?this.editAction():this.createAction()}}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)(F.Y36(Wi.e),F.Y36(Kr.j),F.Y36(c.gz),F.Y36(c.F0),F.Y36(Or.Z),F.Y36(ce),F.Y36(po.K),F.Y36(W.g),F.Y36(f.p4),F.Y36(mr.q),F.Y36($i.O),F.Y36(so.g))},Ir.\u0275cmp=F.Xpm({type:Ir,selectors:[["cd-user-form"]],viewQuery:function(Vt,bn){if(1&Vt&&F.Gf(jt,7),2&Vt){let Bn;F.iGM(Bn=F.CRH())&&(bn.removeSelfUserReadUpdatePermissionTpl=Bn.first)}},features:[F.qOj],decls:5,vars:1,consts:function(){let ro,Vt,bn,Bn,ci,_o,go,es,ts,jo,ss,gs,Is,la,Ro,jl,gl,qa,da,$a,Rl;return ro="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",Vt="Username",bn="Full name",Bn="Email",ci="Roles",_o="This field is required.",go="The username already exists.",es="Password",ts="This field is required.",jo="Confirm password",ss="Password confirmation doesn't match the password.",gs="This field is required.",Is="Password expiration date",la="Password expiration date...",Ro="This field is required.",jl="Invalid email.",gl="Enabled",qa="User must change password at next logon",da="You are about to remove \"user read / update\" permissions from your own user.",$a="If you continue, you will no longer be able to add or remove roles from any user.",Rl="Are you sure you want to continue?",[["class","cd-col-form",4,"cdFormLoading"],["removeSelfUserReadUpdatePermissionTpl",""],["popContent",""],[1,"cd-col-form"],["name","userForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],ro,[1,"card-body"],[1,"form-group","row"],["for","username",1,"cd-col-form-label",3,"ngClass"],Vt,[1,"cd-col-form-input"],["type","text","placeholder","Username...","id","username","name","username","formControlName","username","autocomplete","off","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],["for","name",1,"cd-col-form-label"],bn,["type","text","placeholder","Full name...","id","name","name","name","formControlName","name",1,"form-control"],["for","email",1,"cd-col-form-label"],Bn,["type","email","placeholder","Email...","id","email","name","email","formControlName","email",1,"form-control"],[1,"cd-col-form-label"],ci,["class","no-border full-height",4,"ngIf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],_o,go,["for","password",1,"cd-col-form-label"],es,["class","text-pre-wrap",3,"html",4,"ngIf"],[1,"input-group"],["type","password","placeholder","Password...","id","password","name","password","autocomplete","new-password","formControlName","password",1,"form-control"],["type","button","cdPasswordButton","password",1,"btn","btn-light"],[1,"password-strength-level"],["data-toggle","tooltip",3,"title"],[1,"text-pre-wrap",3,"html"],ts,["for","confirmpassword",1,"cd-col-form-label"],jo,["type","password","placeholder","Confirm password...","id","confirmpassword","name","confirmpassword","autocomplete","new-password","formControlName","confirmpassword",1,"form-control"],["type","button","cdPasswordButton","confirmpassword",1,"btn","btn-light"],ss,gs,["for","pwdExpirationDate",1,"cd-col-form-label",3,"ngClass"],Is,["class","text-pre-wrap",4,"ngIf"],["placeholder",la,"id","pwdExpirationDate","name","pwdExpirationDate","formControlName","pwdExpirationDate","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["p","ngbPopover"],["type","button",1,"btn","btn-light",3,"click"],[1,"text-pre-wrap"],["routerLink","/mgr-modules/edit/dashboard",1,"alert-link"],Ro,jl,[1,"no-border","full-height"],[3,"data","options","messages"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","enabled","name","enabled","formControlName","enabled",1,"custom-control-input"],["for","enabled",1,"custom-control-label"],gl,["type","checkbox","id","pwdUpdateRequired","name","pwdUpdateRequired","formControlName","pwdUpdateRequired",1,"custom-control-input"],["for","pwdUpdateRequired",1,"custom-control-label"],qa,da,$a,Rl,[3,"control","hasTime"]]},template:function(Vt,bn){1&Vt&&(F.YNc(0,dn,41,25,"div",0),F.YNc(1,Ge,8,0,"ng-template",null,1,F.W1O),F.YNc(3,Ot,1,2,"ng-template",null,2,F.W1O)),2&Vt&&F.Q6J("cdFormLoading",bn.loading)},dependencies:[r.mk,r.O5,a._Y,a.Fj,a.Wl,a.JJ,a.JL,a.sg,a.u,qr.S,Hi.m,Dn.J,fe.p,$e.U,Hn.C,ge.y,Et.o,ot.b,ct.P,qe.V,u.o8,c.rH,r.rS,He.m]}),Ir})();var wr=s(96102),Ti=s(94088);const Ci=["userRolesTpl"],Ai=["warningTpl"],Ko=["durationTpl"];function _s(Ir,ro){if(1&Ir&&(F.TgZ(0,"span"),F._uU(1),F.qZA()),2&Ir){const Vt=ro.$implicit,bn=ro.last;F.xp6(1),F.AsE(" ",Vt,"",bn?"":", "," ")}}function dr(Ir,ro){1&Ir&&F.YNc(0,_s,2,2,"span",5),2&Ir&&F.Q6J("ngForOf",ro.value)}function Ni(Ir,ro){if(1&Ir&&(F.TgZ(0,"div",6)(1,"div",7),F._uU(2),F.qZA()()),2&Ir){const Vt=ro.value,bn=ro.row,Bn=F.oxw();F.ekj("border-danger",bn.remainingDays<Bn.expirationDangerAlert)("border-warning",bn.remainingDays<Bn.expirationWarningAlert&&bn.remainingDays>=Bn.expirationDangerAlert),F.xp6(2),F.hij(" ",Vt," ")}}function ti(Ir,ro){if(1&Ir&&F._UZ(0,"i",10),2&Ir){const Vt=F.oxw().row,bn=F.oxw();F.Tol(bn.icons.warning),F.ekj("icon-danger-color",Vt.remainingDays<bn.expirationDangerAlert)("icon-warning-color",Vt.remainingDays<bn.expirationWarningAlert&&Vt.remainingDays>=bn.expirationDangerAlert)}}function Vr(Ir,ro){if(1&Ir&&(F.YNc(0,ti,1,7,"i",8),F.TgZ(1,"span",9),F.ALo(2,"cdDate"),F._uU(3),F.ALo(4,"duration"),F.qZA()),2&Ir){const Vt=ro.value,bn=ro.row,Bn=F.oxw();F.Q6J("ngIf",bn.remainingDays<Bn.expirationWarningAlert),F.xp6(1),F.s9C("title",F.lcZ(2,3,Vt)),F.xp6(2),F.Oqu(F.lcZ(4,5,bn.remainingTimeWithoutSeconds/1e3))}}let ji=(()=>{class Ir{constructor(Vt,bn,Bn,ci,_o,go,es,ts){this.userService=Vt,this.emptyPipe=bn,this.modalService=Bn,this.notificationService=ci,this.authStorageService=_o,this.urlBuilder=go,this.settingsService=es,this.actionLabels=ts,this.selection=new sn.r,this.icons=qt.P,this.permission=this.authStorageService.getPermissions().user,this.tableActions=[{permission:"create",icon:qt.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:qt.P.edit,routerLink:()=>this.selection.first()&&this.urlBuilder.getEdit(this.selection.first().username),name:this.actionLabels.EDIT},{permission:"delete",icon:qt.P.destroy,click:()=>this.deleteUserModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"Username",prop:"username",flexGrow:1,cellTemplate:this.warningTpl},{name:"Name",prop:"name",flexGrow:1,pipe:this.emptyPipe},{name:"Email",prop:"email",flexGrow:1,pipe:this.emptyPipe},{name:"Roles",prop:"roles",flexGrow:1,cellTemplate:this.userRolesTpl},{name:"Enabled",prop:"enabled",flexGrow:1,cellTransformation:At.e.checkIcon},{name:"Password expires",prop:"pwdExpirationDate",flexGrow:1,cellTemplate:this.durationTpl}],this.settingsService.getValues(["USER_PWD_EXPIRATION_WARNING_1","USER_PWD_EXPIRATION_WARNING_2"]).subscribe(bn=>{this.expirationWarningAlert=bn.USER_PWD_EXPIRATION_WARNING_1,this.expirationDangerAlert=bn.USER_PWD_EXPIRATION_WARNING_2})}getUsers(){this.userService.list().subscribe(Vt=>{Vt.forEach(bn=>{bn.remainingTimeWithoutSeconds=0,bn.pwdExpirationDate&&bn.pwdExpirationDate>0&&(bn.pwdExpirationDate=1e3*bn.pwdExpirationDate,bn.remainingTimeWithoutSeconds=this.getRemainingTimeWithoutSeconds(bn.pwdExpirationDate),bn.remainingDays=this.getRemainingDays(bn.pwdExpirationDate))}),this.users=Vt})}updateSelection(Vt){this.selection=Vt}deleteUser(Vt){this.userService.delete(Vt).subscribe(()=>{this.getUsers(),this.modalRef.close(),this.notificationService.show(M.k.success,"Deleted user '" + Vt + "'")},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}deleteUserModal(){const Vt=this.authStorageService.getUsername(),bn=this.selection.first().username;Vt!==bn?this.modalRef=this.modalService.show(pn.M,{itemDescription:"User",itemNames:[bn],submitAction:()=>this.deleteUser(bn)}):this.notificationService.show(M.k.error,"Failed to delete user '" + bn + "'","You are currently logged in as '" + bn + "'.")}getWarningIconClass(Vt){return null===Vt||this.expirationWarningAlert>10?"":this.getRemainingDays(Vt)<=this.expirationDangerAlert?"icon-danger-color":"icon-warning-color"}getWarningClass(Vt){return null===Vt||this.expirationWarningAlert>10?"":this.getRemainingDays(Vt)<=this.expirationDangerAlert?"border-danger":"border-warning"}getRemainingDays(Vt){if(void 0!==Vt&&null!=Vt)return Vt<0?0:Math.max(0,Math.floor(this.getRemainingTime(Vt)/864e5))}getRemainingTimeWithoutSeconds(Vt){const bn=this.getRemainingTime(Vt);return 60*Math.floor(bn/6e4)*1e3}getRemainingTime(Vt){return Vt-Date.now()}}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)(F.Y36(po.K),F.Y36(fn.W),F.Y36(Or.Z),F.Y36(W.g),F.Y36(Kr.j),F.Y36(xn.F),F.Y36(so.g),F.Y36(f.p4))},Ir.\u0275cmp=F.Xpm({type:Ir,selectors:[["cd-user-list"]],viewQuery:function(Vt,bn){if(1&Vt&&(F.Gf(Ci,7),F.Gf(Ai,7),F.Gf(Ko,7)),2&Vt){let Bn;F.iGM(Bn=F.CRH())&&(bn.userRolesTpl=Bn.first),F.iGM(Bn=F.CRH())&&(bn.warningTpl=Bn.first),F.iGM(Bn=F.CRH())&&(bn.durationTpl=Bn.first)}},features:[F._Bn([{provide:xn.F,useValue:new xn.F("user-management/users")}])],decls:9,vars:5,consts:function(){let ro;return ro="User's password is about to expire",[["columnMode","flex","identifier","username","selectionType","single",3,"data","columns","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["userRolesTpl",""],["warningTpl",""],["durationTpl",""],[4,"ngFor","ngForOf"],[1,"border-margin"],[1,"warning-content"],["title",ro,3,"icon-danger-color","icon-warning-color","class",4,"ngIf"],[3,"title"],["title",ro]]},template:function(Vt,bn){1&Vt&&(F._UZ(0,"cd-user-tabs"),F.TgZ(1,"cd-table",0),F.NdJ("fetchData",function(){return bn.getUsers()})("updateSelection",function(ci){return bn.updateSelection(ci)}),F._UZ(2,"cd-table-actions",1),F.qZA(),F.YNc(3,dr,1,1,"ng-template",null,2,F.W1O),F.YNc(5,Ni,3,5,"ng-template",null,3,F.W1O),F.YNc(7,Vr,5,7,"ng-template",null,4,F.W1O)),2&Vt&&(F.xp6(1),F.Q6J("data",bn.users)("columns",bn.columns),F.xp6(1),F.Q6J("permission",bn.permission)("selection",bn.selection)("tableActions",bn.tableActions))},dependencies:[r.sg,r.O5,Lr.a,ir.K,Tt,wr.N,Ti.u],styles:[".border-margin[_ngcontent-%COMP%]{border-left:3px solid transparent;height:calc(100% + 10px);margin-bottom:-5px;margin-left:-5px;margin-top:-5px}.warning-content[_ngcontent-%COMP%]{height:100%;padding-bottom:5px;padding-left:5px;padding-top:5px}"]}),Ir})(),Vi=(()=>{class Ir{}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)},Ir.\u0275mod=F.oAB({type:Ir}),Ir.\u0275inj=F.cJS({imports:[r.ez,a.u5,a.UX,m.m,u.Oz,u.dT,e.b,c.Bz]}),Ir})();const Po=[{path:"",redirectTo:"users",pathMatch:"full"},{path:"users",data:{breadcrumbs:"Users"},children:[{path:"",component:ji},{path:f.MQ.CREATE,component:mn,data:{breadcrumbs:f.Qn.CREATE}},{path:`${f.MQ.EDIT}/:username`,component:mn,data:{breadcrumbs:f.Qn.EDIT}}]},{path:"roles",data:{breadcrumbs:"Roles"},children:[{path:"",component:jn},{path:f.MQ.CREATE,component:Xt,data:{breadcrumbs:f.Qn.CREATE}},{path:`${f.MQ.EDIT}/:name`,component:Xt,data:{breadcrumbs:f.Qn.EDIT}}]}];let ko=(()=>{class Ir{}return Ir.\u0275fac=function(Vt){return new(Vt||Ir)},Ir.\u0275mod=F.oAB({type:Ir}),Ir.\u0275inj=F.cJS({imports:[Vi,c.Bz.forChild(Po)]}),Ir})()},26504:(E,C,s)=>{"use strict";s.d(C,{_2:()=>c,mM:()=>e,s9:()=>a});var r=s(65862);class a extends Error{}class c extends a{constructor(){super(...arguments),this.header="Page Not Found",this.message="Sorry, we couldn\u2019t find what you were looking for.\n  The page you requested may have been changed or moved.",this.icon=r.P.warning}}class e extends a{constructor(){super(...arguments),this.header="User Denied",this.message="Sorry, the user does not exist in Ceph.\n  You'll be logged out from the Identity Provider when you retry logging in.",this.icon=r.P.warning}}},76189:(E,C,s)=>{"use strict";s.d(C,{S:()=>r});class r{getVersionHeaderValue(c,u){return`application/vnd.ceph.api.v${c}.${u}+json`}}},39219:(E,C,s)=>{"use strict";s.d(C,{e:()=>T});var r=s(23815),c=s(68307),u=s(64537),e=s(47640),f=s(35732),m=s(54247);let T=(()=>{class M{constructor(D,U,W,$){this.authStorageService=D,this.http=U,this.router=W,this.route=$}check(D){return this.http.post("api/auth/check",{token:D})}login(D){return this.http.post("api/auth",D).pipe((0,c.b)(U=>{this.authStorageService.set(U.username,U.permissions,U.sso,U.pwdExpirationDate,U.pwdUpdateRequired)}))}logout(D=null){return this.http.post("api/auth/logout",null).subscribe(U=>{this.authStorageService.remove();const W=r.get(this.route.snapshot.queryParams,"returnUrl","/login");this.router.navigate([W],{skipLocationChange:!0}),D&&D(),window.location.replace(U.redirect_url)})}}return M.\u0275fac=function(D){return new(D||M)(u.LFG(e.j),u.LFG(f.eN),u.LFG(m.F0),u.LFG(m.gz))},M.\u0275prov=u.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})()},64724:(E,C,s)=>{"use strict";s.d(C,{e:()=>c});var r=s(64537),a=s(35732);let c=(()=>{class u{constructor(f){this.http=f}findValue(f,m){if(f.value)return f.value.find(T=>T.section===m)}getValue(f,m){let T=this.findValue(f,m);if(!T){const M=m.indexOf(".");-1!==M&&(T=this.findValue(f,m.substring(0,M)))}return T||(T=this.findValue(f,"global")),T?T.value:f.default}getConfigData(){return this.http.get("api/cluster_conf/")}get(f){return this.http.get(`api/cluster_conf/${f}`)}filter(f){return this.http.get(`api/cluster_conf/filter?names=${f.join(",")}`)}create(f){return this.http.post("api/cluster_conf/",f)}delete(f,m){return this.http.delete(`api/cluster_conf/${f}?section=${m}`)}bulkCreate(f){return this.http.put("api/cluster_conf/",f)}}return u.\u0275fac=function(f){return new(f||u)(r.LFG(a.eN))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},83608:(E,C,s)=>{"use strict";s.d(C,{H:()=>c});var r=s(64537),a=s(35732);let c=(()=>{class u{constructor(f){this.http=f,this.apiPath="api/crush_rule",this.formTooltips={root:"The name of the node under which data should be placed.",failure_domain:"The type of CRUSH nodes across which we should separate replicas.",device_class:"The device class data should be placed on."}}create(f){return this.http.post(this.apiPath,f,{observe:"response"})}delete(f){return this.http.delete(`${this.apiPath}/${f}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return u.\u0275fac=function(f){return new(f||u)(r.LFG(a.eN))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},79241:(E,C,s)=>{"use strict";s.d(C,{z:()=>c});var r=s(64537),a=s(35732);let c=(()=>{class u{constructor(f){this.http=f}getFullHealth(){return this.http.get("api/health/full")}getMinimalHealth(){return this.http.get("api/health/minimal")}getClusterCapacity(){return this.http.get("api/health/get_cluster_capacity")}getClusterFsid(){return this.http.get("api/health/get_cluster_fsid")}getOrchestratorName(){return this.http.get("api/health/get_orchestrator_name")}}return u.\u0275fac=function(f){return new(f||u)(r.LFG(a.eN))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},22120:(E,C,s)=>{"use strict";s.d(C,{x:()=>U});var r=s(35732),a=s(23815),c=s.n(a),u=s(25917),e=s(88002),f=s(46240),m=s(19773),T=s(76189),M=s(51295),w=s(41702),D=s(64537);let U=(()=>{class W extends T.S{constructor(J,F){super(),this.http=J,this.deviceService=F,this.baseURL="api/host",this.baseUIURL="ui-api/host",this.predefinedLabels=["mon","mgr","osd","mds","rgw","nfs","iscsi","rbd","grafana"]}list(J,F){return J=J.set("facts",F),this.http.get(this.baseURL,{headers:{Accept:this.getVersionHeaderValue(1,2)},params:J,observe:"response"}).pipe((0,e.U)(X=>X.body.map(de=>(de.headers=X.headers,de))))}create(J,F,X,de){return this.http.post(this.baseURL,{hostname:J,addr:F,labels:X,status:de},{observe:"response",headers:{Accept:M.T.cdVersionHeader("0","1")}})}delete(J){return this.http.delete(`${this.baseURL}/${J}`,{observe:"response"})}getDevices(J){return this.http.get(`${this.baseURL}/${J}/devices`).pipe((0,e.U)(F=>F.map(X=>this.deviceService.prepareDevice(X))))}getSmartData(J){return this.http.get(`${this.baseURL}/${J}/smart`)}getDaemons(J){return this.http.get(`${this.baseURL}/${J}/daemons`)}getLabels(){return this.http.get(`${this.baseUIURL}/labels`)}update(J,F=!1,X=[],de=!1,V=!1,ce=!1){return this.http.put(`${this.baseURL}/${J}`,{update_labels:F,labels:X,maintenance:de,force:V,drain:ce},{headers:{Accept:this.getVersionHeaderValue(0,1)}})}identifyDevice(J,F,X){return this.http.post(`${this.baseURL}/${J}/identify_device`,{device:F,duration:X})}getInventoryParams(J){let F=new r.LE;return J&&(F=F.append("refresh",c().toString(J))),F}getInventory(J,F){const X=this.getInventoryParams(F);return this.http.get(`${this.baseURL}/${J}/inventory`,{params:X})}inventoryList(J){const F=this.getInventoryParams(J);return this.http.get(`${this.baseUIURL}/inventory`,{params:F})}inventoryDeviceList(J,F){let X;return X=J?this.getInventory(J,F).pipe((0,f.q)()):this.inventoryList(F),X.pipe((0,m.zg)(de=>{const V=c().flatMap(de,ce=>ce.devices.map(se=>(se.hostname=ce.name,se.uid=se.device_id?`${se.device_id}-${se.hostname}-${se.path}`:`${se.hostname}-${se.path}`,se)));return(0,u.of)(V)}))}}return W.\u0275fac=function(J){return new(J||W)(D.LFG(r.eN),D.LFG(w.U))},W.\u0275prov=D.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})()},7273:(E,C,s)=>{"use strict";s.d(C,{N:()=>c});var r=s(64537),a=s(35732);let c=(()=>{class u{constructor(f){this.http=f,this.url="api/mgr/module"}list(){return this.http.get(`${this.url}`)}getConfig(f){return this.http.get(`${this.url}/${f}`)}updateConfig(f,m){return this.http.put(`${this.url}/${f}`,{config:m})}enable(f){return this.http.post(`${this.url}/${f}/enable`,null)}disable(f){return this.http.post(`${this.url}/${f}/disable`,null)}getOptions(f){return this.http.get(`${this.url}/${f}/options`)}}return u.\u0275fac=function(f){return new(f||u)(r.LFG(a.eN))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},80842:(E,C,s)=>{"use strict";s.d(C,{q:()=>m});var r=s(64762),a=s(35732),c=s(88002),u=s(93523),e=s(34089),f=s(64537);let m=class{constructor(M,w){this.http=M,this.rbdConfigurationService=w,this.apiPath="api/pool"}create(M){return this.http.post(this.apiPath,M,{observe:"response"})}update(M){let w;return M.hasOwnProperty("srcpool")?(w=M.srcpool,delete M.srcpool):(w=M.pool,delete M.pool),this.http.put(`${this.apiPath}/${encodeURIComponent(w)}`,M,{observe:"response"})}delete(M){return this.http.delete(`${this.apiPath}/${M}`,{observe:"response"})}get(M){return this.http.get(`${this.apiPath}/${M}`)}getList(){return this.http.get(`${this.apiPath}?stats=true`)}getConfiguration(M){return this.http.get(`${this.apiPath}/${M}/configuration`).pipe((0,c.U)(w=>w.map(D=>Object.assign(D,this.rbdConfigurationService.getOptionByName(D.name)))))}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}list(M=[]){const w=M.join(",");return this.http.get(`${this.apiPath}?attrs=${w}`).toPromise().then(D=>D)}};m.\u0275fac=function(M){return new(M||m)(f.LFG(a.eN),f.LFG(e.n))},m.\u0275prov=f.Yz7({token:m,factory:m.\u0275fac,providedIn:"root"}),m=(0,r.gn)([u.o,(0,r.w6)("design:paramtypes",[a.eN,e.n])],m)},11656:(E,C,s)=>{"use strict";s.d(C,{Q:()=>m});var r=s(46797),a=s(88002),c=s(16738),u=s.n(c),e=s(64537),f=s(35732);let m=(()=>{class T{constructor(w){this.http=w,this.timerTime=3e4,this.lastHourDateObject={start:u()().unix()-3600,end:u()().unix(),step:14},this.baseURL="api/prometheus",this.settingsKey={alertmanager:"ui-api/prometheus/alertmanager-api-host",prometheus:"ui-api/prometheus/prometheus-api-host"},this.settings={}}unsubscribe(){this.timerGetPrometheusDataSub&&this.timerGetPrometheusDataSub.unsubscribe()}getPrometheusData(w){return this.http.get(`${this.baseURL}/data`,{params:w})}ifAlertmanagerConfigured(w,D){this.ifSettingConfigured(this.settingsKey.alertmanager,w,D)}disableAlertmanagerConfig(){this.disableSetting(this.settingsKey.alertmanager)}ifPrometheusConfigured(w,D){this.ifSettingConfigured(this.settingsKey.prometheus,w,D)}disablePrometheusConfig(){this.disableSetting(this.settingsKey.prometheus)}getAlerts(w={}){return this.http.get(this.baseURL,{params:w})}getSilences(w={}){return this.http.get(`${this.baseURL}/silences`,{params:w})}getRules(w="all"){return this.http.get(`${this.baseURL}/rules`).pipe((0,a.U)(D=>(["alerting","rewrites"].includes(w)&&D.groups.map(U=>{U.rules=U.rules.filter(W=>W.type===w)}),D)))}setSilence(w){return this.http.post(`${this.baseURL}/silence`,w,{observe:"response"})}expireSilence(w){return this.http.delete(`${this.baseURL}/silence/${w}`,{observe:"response"})}getNotifications(w){return this.http.get(`${this.baseURL}/notifications?from=${w&&w.id?w.id:"last"}`)}ifSettingConfigured(w,D,U){const W=this.settings[w];void 0===W?this.http.get(w).subscribe($=>{this.settings[w]=this.getSettingsValue($),this.ifSettingConfigured(w,D,U)},$=>{401!==$.status&&(this.settings[w]="")}):""!==W?D(W):U&&U()}disableSetting(w){this.settings[w]=""}getSettingsValue(w){return w.value||w.instance||""}getPrometheusQueriesData(w,D,U,W){return this.ifPrometheusConfigured(()=>{this.timerGetPrometheusDataSub&&this.timerGetPrometheusDataSub.unsubscribe(),this.timerGetPrometheusDataSub=(0,r.H)(0,this.timerTime).subscribe(()=>{w=this.updateTimeStamp(w);for(const $ in D)D.hasOwnProperty($)&&this.getPrometheusData({params:encodeURIComponent(D[$]),start:w.start,end:w.end,step:w.step}).subscribe(F=>{F.result.length&&(U[$]=F.result[0].values),void 0!==U[$]&&""!==U[$]&&W&&U[$].forEach(X=>{if(X.includes("NaN")){const de=X.indexOf("NaN");-1!==de&&(X[de]="0")}})})})}),U}updateTimeStamp(w){let D={},U=w.end-w.start;return D={start:u()().unix()-U,end:u()().unix(),step:w.step},D}}return T.\u0275fac=function(w){return new(w||T)(e.LFG(f.eN))},T.\u0275prov=e.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})()},95152:(E,C,s)=>{"use strict";s.d(C,{o:()=>U});var r=s(64762),a=s(35732),c=s(23815),u=s.n(c),e=s(25917),f=s(96736),m=s(5304),T=s(76189),M=s(20523),w=s(93523),D=s(64537);let U=class extends T.S{constructor($,J){super(),this.http=$,this.rgwDaemonService=J,this.url="api/rgw/bucket"}list($=!1,J=""){return this.rgwDaemonService.request(F=>(F=F.append("stats",$.toString()),J&&(F=F.append("uid",J)),this.http.get(this.url,{headers:{Accept:this.getVersionHeaderValue(1,1)},params:F})))}get($){return this.rgwDaemonService.request(J=>this.http.get(`${this.url}/${$}`,{params:J}))}getTotalBucketsAndUsersLength(){return this.rgwDaemonService.request($=>this.http.get(`ui-${this.url}/buckets_and_users_count`,{params:$}))}create($,J,F,X,de,V,ce,se,fe,Te){return this.rgwDaemonService.request($e=>this.http.post(this.url,null,{params:new a.LE({fromObject:{bucket:$,uid:J,zonegroup:F,placement_target:X,lock_enabled:String(de),lock_mode:V,lock_retention_period_days:ce,encryption_state:String(se),encryption_type:fe,key_id:Te,daemon_name:$e.get("daemon_name")}})}))}update($,J,F,X,de,V,ce,se,fe,Te,$e,ge){return this.rgwDaemonService.request(Et=>(Et=Et.appendAll({bucket_id:J,uid:F,versioning_state:X,encryption_state:String(de),encryption_type:V,key_id:ce,mfa_delete:se,mfa_token_serial:fe,mfa_token_pin:Te,lock_mode:$e,lock_retention_period_days:ge}),this.http.put(`${this.url}/${$}`,null,{params:Et})))}delete($,J=!0){return this.rgwDaemonService.request(F=>(F=F.append("purge_objects",J?"true":"false"),this.http.delete(`${this.url}/${$}`,{params:F})))}exists($){return this.get($).pipe((0,f.h)(!0),(0,m.K)(J=>(u().isFunction(J.preventDefault)&&J.preventDefault(),(0,e.of)(!1))))}getLockDays($){return $.lock_retention_period_years>0?Math.floor(365.242*$.lock_retention_period_years):$.lock_retention_period_days||0}setEncryptionConfig($,J,F,X,de,V,ce,se,fe,Te,$e,ge){return this.rgwDaemonService.request(Et=>(Et=Et.appendAll({encryption_type:$,kms_provider:J,auth_method:F,secret_engine:X,secret_path:de,namespace:V,address:ce,token:se,owner:fe,ssl_cert:Te,client_cert:$e,client_key:ge}),this.http.put(`${this.url}/setEncryptionConfig`,null,{params:Et})))}getEncryption($){return this.rgwDaemonService.request(J=>this.http.get(`${this.url}/${$}/getEncryption`,{params:J}))}deleteEncryption($){return this.rgwDaemonService.request(J=>this.http.get(`${this.url}/${$}/deleteEncryption`,{params:J}))}getEncryptionConfig(){return this.rgwDaemonService.request($=>this.http.get(`${this.url}/getEncryptionConfig`,{params:$}))}};U.\u0275fac=function($){return new($||U)(D.LFG(a.eN),D.LFG(M.b))},U.\u0275prov=D.Yz7({token:U,factory:U.\u0275fac,providedIn:"root"}),U=(0,r.gn)([w.o,(0,r.w6)("design:paramtypes",[a.eN,M.b])],U)},20523:(E,C,s)=>{"use strict";s.d(C,{b:()=>W});var r=s(64762),a=s(35732),c=s(23815),u=s.n(c),e=s(26215),f=s(40205),m=s(25917),T=s(68307),M=s(19773),w=s(15257),D=s(93523),U=s(64537);let W=class{constructor(J){this.http=J,this.url="api/rgw/daemon",this.daemons=new e.X([]),this.daemons$=this.daemons.asObservable(),this.selectedDaemon=new e.X(null),this.selectedDaemon$=this.selectedDaemon.asObservable()}list(){return this.http.get(this.url).pipe((0,T.b)(J=>{this.daemons.next(J);const F=this.selectedDaemon.getValue();(u().isEmpty(F)||void 0===u().find(J,{id:F.id}))&&this.selectDefaultDaemon(J)}))}get(J){return this.http.get(`${this.url}/${J}`)}selectDaemon(J){this.selectedDaemon.next(J)}selectDefaultDaemon(J){if(0===J.length)return null;for(const F of J)if(F.default)return this.selectDaemon(F),F;return this.selectDaemon(J[0]),J[0]}request(J){return this.selectedDaemon.pipe((0,M.zg)(F=>u().isEmpty(F)?this.list().pipe((0,M.zg)(X=>u().isEmpty(X)?(0,f._)("No RGW daemons found!"):this.selectedDaemon$)):(0,m.of)(F)),(0,w.q)(1),(0,M.zg)(F=>{let X=new a.LE;return X=X.append("daemon_name",F.id),J(X)}))}setMultisiteConfig(J,F,X){return this.request(de=>(de=de.appendAll({realm_name:J,zonegroup_name:F,zone_name:X}),this.http.put(`${this.url}/set_multisite_config`,null,{params:de})))}};W.\u0275fac=function(J){return new(J||W)(U.LFG(a.eN))},W.\u0275prov=U.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W=(0,r.gn)([D.o,(0,r.w6)("design:paramtypes",[a.eN])],W)},80381:(E,C,s)=>{"use strict";s.d(C,{o:()=>u});var r=s(20523),a=s(64537),c=s(35732);let u=(()=>{class e{constructor(m,T){this.http=m,this.rgwDaemonService=T,this.url="ui-api/rgw/multisite"}migrate(m,T,M){return this.rgwDaemonService.request(w=>(w=w.appendAll({realm_name:m.name,zonegroup_name:T.name,zone_name:M.name,zonegroup_endpoints:T.endpoints,zone_endpoints:M.endpoints,access_key:M.system_key.access_key,secret_key:M.system_key.secret_key}),this.http.put(`${this.url}/migrate`,null,{params:w})))}getSyncStatus(){return this.http.get(`${this.url}/sync_status`)}}return e.\u0275fac=function(m){return new(m||e)(a.LFG(c.eN),a.LFG(r.b))},e.\u0275prov=a.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},95596:(E,C,s)=>{"use strict";s.d(C,{y:()=>e});var r=s(35732),a=s(65862),c=s(20523),u=s(64537);let e=(()=>{class f{constructor(T,M){this.http=T,this.rgwDaemonService=M,this.url="api/rgw/realm"}create(T,M){return this.http.post(`${this.url}`,{realm_name:T.name,default:M})}update(T,M,w){return this.http.put(`${this.url}/${T.name}`,{realm_name:T.name,default:M,new_realm_name:w})}list(){return this.http.get(`${this.url}`)}get(T){return this.http.get(`${this.url}/${T.name}`)}getAllRealmsInfo(){return this.http.get(`${this.url}/get_all_realms_info`)}delete(T){let M=new r.LE;return M=M.appendAll({realm_name:T}),this.http.delete(`${this.url}/${T}`,{params:M})}getRealmTree(T,M){let w={},D=[];return w.id=T.id,D.push(T.id),w.name=T.name,w.info=T,w.is_default=T.id===M,w.icon=a.P.reweight,w.type="realm",{nodes:w,realmIds:D}}importRealmToken(T,M,w,D){return this.http.post(`${this.url}/import_realm_token`,{realm_token:T,zone_name:M,port:w,placement_spec:D})}getRealmTokens(){return this.rgwDaemonService.request(()=>this.http.get(`${this.url}/get_realm_tokens`))}}return f.\u0275fac=function(T){return new(T||f)(u.LFG(r.eN),u.LFG(c.b))},f.\u0275prov=u.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})()},33394:(E,C,s)=>{"use strict";s.d(C,{I:()=>T});var r=s(64762),a=s(35732),c=s(19773),u=s(88002),e=s(20523),f=s(93523),m=s(64537);let T=class{constructor(w,D){this.http=w,this.rgwDaemonService=D,this.url="api/rgw/site"}get(w){return this.rgwDaemonService.request(D=>(w&&(D=D.append("query",w)),this.http.get(this.url,{params:D})))}isDefaultRealm(){return this.get("default-realm").pipe((0,c.zg)(w=>this.rgwDaemonService.selectedDaemon$.pipe((0,u.U)(D=>D.realm_name===w))))}};T.\u0275fac=function(w){return new(w||T)(m.LFG(a.eN),m.LFG(e.b))},T.\u0275prov=m.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T=(0,r.gn)([f.o,(0,r.w6)("design:paramtypes",[a.eN,e.b])],T)},97937:(E,C,s)=>{"use strict";s.d(C,{g:()=>u});var r=s(35732),a=s(65862),c=s(64537);let u=(()=>{class e{constructor(m){this.http=m,this.url="api/rgw/zone"}create(m,T,M,w,D){let U=new r.LE;return U=U.appendAll({zone_name:m.name,zonegroup_name:T.name,default:M,master:w,zone_endpoints:D,access_key:m.system_key.access_key,secret_key:m.system_key.secret_key}),this.http.post(`${this.url}`,null,{params:U})}list(){return this.http.get(`${this.url}`)}get(m){return this.http.get(`${this.url}/${m.name}`)}getAllZonesInfo(){return this.http.get(`${this.url}/get_all_zones_info`)}delete(m,T,M,w){let D=new r.LE;return D=D.appendAll({zone_name:m,delete_pools:T,pools:Array.from(M.values()),zonegroup_name:w}),this.http.delete(`${this.url}/${m}`,{params:D})}update(m,T,M,w,D,U,W,$,J,F,X,de,V){return this.http.put(`${this.url}/${m.name}`,{zone_name:m.name,zonegroup_name:T.name,new_zone_name:M,default:w,master:D,zone_endpoints:U,access_key:m.system_key.access_key,secret_key:m.system_key.secret_key,placement_target:W,data_pool:$,index_pool:J,data_extra_pool:F,storage_class:X,data_pool_class:de,compression:V})}getZoneTree(m,T,M,w,D){let U={},W=[];U.id=m.id,W.push(m.id),U.name=m.name,U.type="zone",U.name=m.name,U.info=m,U.icon=a.P.deploy,U.zone_zonegroup=w,U.parent=w?w.name:"",U.second_parent=D?D.name:"",U.is_default=m.id===T,U.endpoints=m.endpoints,U.is_master=!(!w||w.master_zone!==m.id),U.type="zone";const $=M.map(F=>F.name);U.secondary_zone=!$.includes(m.name);const J=M.filter(F=>F.name===m.name);if(J&&J.length>0){const F=J[0].system_key.access_key,X=J[0].system_key.secret_key;U.access_key=F||"",U.secret_key=X||"",U.user=!(!F||""===F)}return""===U.access_key||"null"===U.access_key?(U.show_warning=!0,U.warning_message="Access/Secret keys not found"):U.show_warning=!1,U.endpoints&&0===U.endpoints.length&&(U.show_warning=!0,U.warning_message=U.warning_message+"\nEndpoints not configured"),{nodes:U,zoneIds:W}}getPoolNames(){return this.http.get(`${this.url}/get_pool_names`)}createSystemUser(m,T){return this.http.put(`${this.url}/create_system_user`,{userName:m,zoneName:T})}getUserList(m){let T=new r.LE;return T=T.appendAll({zoneName:m}),this.http.get(`${this.url}/get_user_list`,{params:T})}}return e.\u0275fac=function(m){return new(m||e)(c.LFG(r.eN))},e.\u0275prov=c.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},98961:(E,C,s)=>{"use strict";s.d(C,{K:()=>u});var r=s(35732),a=s(65862),c=s(64537);let u=(()=>{class e{constructor(m){this.http=m,this.url="api/rgw/zonegroup"}create(m,T,M,w){let D=new r.LE;return D=D.appendAll({realm_name:m.name,zonegroup_name:T.name,default:M,master:w,zonegroup_endpoints:T.endpoints}),this.http.post(`${this.url}`,null,{params:D})}update(m,T,M,w,D,U,W){return this.http.put(`${this.url}/${T.name}`,{zonegroup_name:T.name,realm_name:m.name,new_zonegroup_name:M,default:w,master:D,zonegroup_endpoints:T.endpoints,placement_targets:T.placement_targets,remove_zones:U,add_zones:W})}list(){return this.http.get(`${this.url}`)}get(m){return this.http.get(`${this.url}/${m.name}`)}getAllZonegroupsInfo(){return this.http.get(`${this.url}/get_all_zonegroups_info`)}delete(m,T,M){let w=new r.LE;return w=w.appendAll({zonegroup_name:m,delete_pools:T,pools:Array.from(M.values())}),this.http.delete(`${this.url}/${m}`,{params:w})}getZonegroupTree(m,T,M){let w={};return w.id=m.id,w.name=m.name,w.info=m,w.icon=a.P.cubes,w.is_master=m.is_master,w.parent=M?M.name:"",w.is_default=m.id===T,w.type="zonegroup",w.endpoints=m.endpoints,w.master_zone=m.master_zone,w.zones=m.zones,w.placement_targets=m.placement_targets,w.default_placement=m.default_placement,0===w.endpoints.length&&(w.show_warning=!0,w.warning_message="Endpoints not configured"),w}}return e.\u0275fac=function(m){return new(m||e)(c.LFG(r.eN))},e.\u0275prov=c.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},9837:(E,C,s)=>{"use strict";s.d(C,{g:()=>m});var r=s(23815),a=s.n(r),c=s(88002),u=s(64537),e=s(35732);let m=(()=>{class T{constructor(w){this.http=w,this.settings={}}getValues(w){return a().isArray(w)&&(w=w.join(",")),this.http.get(`api/settings?names=${w}`).pipe((0,c.U)(D=>{const U={};return a().forEach(D,W=>{a().set(U,W.name,W.value)}),U}))}ifSettingConfigured(w,D,U){const W=this.settings[w];void 0===W?this.http.get(w).subscribe($=>{this.settings[w]=this.getSettingsValue($),this.ifSettingConfigured(w,D,U)},$=>{401!==$.status&&(this.settings[w]="")}):""!==W?D(W):U&&U()}disableSetting(w){this.settings[w]=""}getSettingsValue(w){return w.value||w.instance||""}validateGrafanaDashboardUrl(w){return this.http.get(`api/grafana/validation/${w}`)}getStandardSettings(){return this.http.get("ui-api/standard_settings")}}return T.\u0275fac=function(w){return new(w||T)(u.LFG(e.eN))},T.\u0275prov=u.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})()},32057:(E,C,s)=>{"use strict";s.d(C,{K:()=>f});var r=s(25917),a=s(96736),c=s(5304),u=s(64537),e=s(35732);let f=(()=>{class m{constructor(M){this.http=M}list(){return this.http.get("api/user")}delete(M){return this.http.delete(`api/user/${M}`)}get(M){return this.http.get(`api/user/${M}`)}create(M){return this.http.post("api/user",M)}update(M){return this.http.put(`api/user/${M.username}`,M)}changePassword(M,w,D){return this.http.post(`api/user/${M}/change_password`,{old_password:w,new_password:D})}validateUserName(M){return this.get(M).pipe((0,a.h)(!0),(0,c.K)(w=>(w.preventDefault(),(0,r.of)(!1))))}validatePassword(M,w=null,D=null){return this.http.post("api/user/validate_password",{password:M,username:w,old_password:D})}}return m.\u0275fac=function(M){return new(M||m)(u.LFG(e.eN))},m.\u0275prov=u.Yz7({token:m,factory:m.\u0275fac,providedIn:"root"}),m})()},51295:(E,C,s)=>{"use strict";s.d(C,{T:()=>c});var r=s(23815),a=s.n(r);class c{static updateChanged(e,f){let m=!1;return Object.keys(f).forEach(T=>{const M=f[T];a().isEqual(M,e[T])||(e[T]=M,m=!0)}),m}static cdVersionHeader(e,f){return`application/vnd.ceph.api.v${e}.${f}+json`}}},99475:(E,C,s)=>{"use strict";s.d(C,{P:()=>r});class r{propertyValue(c){return getComputedStyle(document.body).getPropertyValue(`--${c}`)}}},68136:(E,C,s)=>{"use strict";s.d(C,{o:()=>a});var r=s(71225);class a{constructor(u){this.ngZone=u}setExpandedRow(u){this.expandedRow=u}setTableRefreshTimeout(){clearTimeout(this.staleTimeout),this.ngZone.runOutsideAngular(()=>{this.staleTimeout=window.setTimeout(()=>{this.ngZone.run(()=>{this.tableStatus=new r.c("warning","The user list data might be stale. If needed, you can manually reload it.")})},1e4)})}}},69158:(E,C,s)=>{"use strict";s.d(C,{E:()=>c});var r=s(91801),a=s(71225);class c extends a.c{constructor(e=r.T.ValueOk,f=""){switch(super(),e){case r.T.ValueOk:this.type="light",this.msg="";break;case r.T.ValueNone:this.type="info",this.msg=(f?"Retrieving data for " + f + ".":"Retrieving data.")+" "+"Please wait...";break;case r.T.ValueStale:this.type="warning",this.msg=f?"Displaying previously cached data for " + f + ".":"Displaying previously cached data.";break;case r.T.ValueException:this.type="danger",this.msg=(f?"Could not load data for " + f + ".":"Could not load data.")+" "+"Please check the cluster health."}}}},71225:(E,C,s)=>{"use strict";s.d(C,{c:()=>r});class r{constructor(c="light",u=""){this.type=c,this.msg=u}}},34501:(E,C,s)=>{"use strict";s.d(C,{G:()=>F});var r=s(64537),a=s(65862),c=s(88692),u=s(51389);const e=function(X){return[X]};function f(X,de){if(1&X&&(r.TgZ(0,"td",8),r._UZ(1,"i",9),r.qZA()),2&X){const V=r.oxw(2);r.xp6(1),r.MT6("alert-",V.bootstrapClass," ",V.typeIcon,""),r.Q6J("ngClass",r.VKq(5,e,V.icons.large3x))}}function m(X,de){if(1&X&&(r.TgZ(0,"td",10),r._uU(1),r.qZA()),2&X){const V=r.oxw(2);r.xp6(1),r.Oqu(V.title)}}function T(X,de){1&X&&r.GkF(0)}function M(X,de){if(1&X&&(r.ynx(0),r.TgZ(1,"tr"),r.YNc(2,f,2,7,"td",4),r.YNc(3,m,2,1,"td",5),r.qZA(),r.TgZ(4,"tr")(5,"td",6),r.YNc(6,T,1,0,"ng-container",7),r.qZA()(),r.BQk()),2&X){const V=r.oxw(),ce=r.MAs(6);r.xp6(2),r.Q6J("ngIf",V.showIcon),r.xp6(1),r.Q6J("ngIf",V.showTitle),r.xp6(3),r.Q6J("ngTemplateOutlet",ce)}}function w(X,de){if(1&X&&(r.TgZ(0,"td",12),r._UZ(1,"i",13),r.qZA()),2&X){const V=r.oxw(2);r.xp6(1),r.MT6("alert-",V.bootstrapClass," ",V.typeIcon,"")}}function D(X,de){if(1&X&&(r.TgZ(0,"td",10),r._uU(1),r.qZA()),2&X){const V=r.oxw(2);r.xp6(1),r.Oqu(V.title)}}function U(X,de){1&X&&r.GkF(0)}function W(X,de){if(1&X&&(r.TgZ(0,"tr"),r.YNc(1,w,2,4,"td",11),r.YNc(2,D,2,1,"td",5),r.TgZ(3,"td",6),r.YNc(4,U,1,0,"ng-container",7),r.qZA()()),2&X){const V=r.oxw(),ce=r.MAs(6);r.xp6(1),r.Q6J("ngIf",V.showIcon),r.xp6(1),r.Q6J("ngIf",V.showTitle),r.xp6(2),r.Q6J("ngTemplateOutlet",ce)}}function $(X,de){1&X&&r.Hsn(0)}const J=["*"];let F=(()=>{class X{constructor(){this.title="",this.bootstrapClass="",this.size="normal",this.showIcon=!0,this.showTitle=!0,this.dismissible=!1,this.spacingClass="",this.dismissed=new r.vpe,this.icons=a.P}ngOnInit(){switch(this.type){case"warning":this.title=this.title||"Warning",this.typeIcon=this.typeIcon||a.P.warning,this.bootstrapClass=this.bootstrapClass||"warning";break;case"error":this.title=this.title||"Error",this.typeIcon=this.typeIcon||a.P.destroyCircle,this.bootstrapClass=this.bootstrapClass||"danger";break;case"info":this.title=this.title||"Information",this.typeIcon=this.typeIcon||a.P.infoCircle,this.bootstrapClass=this.bootstrapClass||"info";break;case"success":this.title=this.title||"Success",this.typeIcon=this.typeIcon||a.P.check,this.bootstrapClass=this.bootstrapClass||"success";break;case"danger":this.title=this.title||"Danger",this.typeIcon=this.typeIcon||a.P.warning,this.bootstrapClass=this.bootstrapClass||"danger"}}onClose(){this.dismissed.emit()}}return X.\u0275fac=function(V){return new(V||X)},X.\u0275cmp=r.Xpm({type:X,selectors:[["cd-alert-panel"]],inputs:{title:"title",bootstrapClass:"bootstrapClass",type:"type",typeIcon:"typeIcon",size:"size",showIcon:"showIcon",showTitle:"showTitle",dismissible:"dismissible",spacingClass:"spacingClass"},outputs:{dismissed:"dismissed"},ngContentSelectors:J,decls:7,vars:5,consts:[[3,"type","dismissible","ngClass","closed"],[4,"ngIf","ngIfElse"],["slim",""],["content",""],["rowspan","2","class","alert-panel-icon",4,"ngIf"],["class","alert-panel-title",4,"ngIf"],[1,"alert-panel-text"],[4,"ngTemplateOutlet"],["rowspan","2",1,"alert-panel-icon"],["aria-hidden","true",3,"ngClass"],[1,"alert-panel-title"],["class","alert-panel-icon",4,"ngIf"],[1,"alert-panel-icon"],["aria-hidden","true"]],template:function(V,ce){if(1&V&&(r.F$t(),r.TgZ(0,"ngb-alert",0),r.NdJ("closed",function(){return ce.onClose()}),r.TgZ(1,"table"),r.YNc(2,M,7,3,"ng-container",1),r.YNc(3,W,5,3,"ng-template",null,2,r.W1O),r.qZA()(),r.YNc(5,$,1,0,"ng-template",null,3,r.W1O)),2&V){const se=r.MAs(4);r.s9C("type",ce.bootstrapClass),r.Q6J("dismissible",ce.dismissible)("ngClass",ce.spacingClass),r.xp6(2),r.Q6J("ngIf","normal"===ce.size)("ngIfElse",se)}},dependencies:[c.mk,c.O5,c.tP,u.xm],styles:[".alert-panel-icon[_ngcontent-%COMP%]{padding-right:.5em;vertical-align:top}.alert-panel-title[_ngcontent-%COMP%]{font-weight:700}.alert[_ngcontent-%COMP%]{margin-bottom:0}"]}),X})()},13472:(E,C,s)=>{"use strict";s.d(C,{W:()=>e});var r=s(64537),a=s(79512),c=s(88692),u=s(87925);let e=(()=>{class f{constructor(T,M){this.location=T,this.actionLabels=M,this.backAction=new r.vpe}ngOnInit(){this.name=this.name||this.actionLabels.CANCEL}back(){0===this.backAction.observers.length?this.location.back():this.backAction.emit()}}return f.\u0275fac=function(T){return new(T||f)(r.Y36(c.Ye),r.Y36(a.p4))},f.\u0275cmp=r.Xpm({type:f,selectors:[["cd-back-button"]],inputs:{name:"name"},outputs:{backAction:"backAction"},decls:2,vars:1,consts:[["aria-label","Back","type","button",1,"btn","btn-light","tc_backButton",3,"click"]],template:function(T,M){1&T&&(r.TgZ(0,"button",0),r.NdJ("click",function(){return M.back()}),r._uU(1),r.qZA()),2&T&&(r.xp6(1),r.hij(" ",M.name,"\n"))},dependencies:[u.o]}),f})()},17401:(E,C,s)=>{"use strict";s.d(C,{e:()=>br});var r=s(65862),a=s(64537),c=s(88692),u=s(54247);function e(ht,Wt){if(1&ht&&a.SDv(0,14,1),2&ht){const Tt=a.oxw(2);a.pQV(Tt.title),a.QtT(0)}}function f(ht,Wt){if(1&ht&&a.SDv(0,14,2),2&ht){const Tt=a.oxw(2);a.pQV(Tt.title),a.QtT(0)}}function m(ht,Wt){if(1&ht&&a.SDv(0,14,3),2&ht){const Tt=a.oxw(2);a.pQV(Tt.title),a.QtT(0)}}function T(ht,Wt){if(1&ht&&(a.TgZ(0,"a",13),a.tHW(1,14),a.YNc(2,e,1,1,"ng-template",15),a.YNc(3,f,1,1,"ng-template",16),a.YNc(4,m,1,1,"ng-template",17),a.N_p(),a.qZA()),2&ht){const Tt=a.oxw();a.Q6J("routerLink",Tt.link)("ngPlural",Tt.total),a.xp6(4),a.pQV(Tt.total),a.QtT(1)}}function M(ht,Wt){1&ht&&a.GkF(0)}function w(ht,Wt){if(1&ht&&(a.ynx(0),a.YNc(1,M,1,0,"ng-container",18),a.BQk()),2&ht){a.oxw();const Tt=a.MAs(16);a.xp6(1),a.Q6J("ngTemplateOutlet",Tt)}}function D(ht,Wt){1&ht&&a.GkF(0)}function U(ht,Wt){if(1&ht&&(a.ynx(0),a.YNc(1,D,1,0,"ng-container",18),a.BQk()),2&ht){a.oxw();const Tt=a.MAs(14);a.xp6(1),a.Q6J("ngTemplateOutlet",Tt)}}function W(ht,Wt){1&ht&&a.GkF(0)}function $(ht,Wt){if(1&ht&&(a.ynx(0),a.YNc(1,W,1,0,"ng-container",18),a.BQk()),2&ht){a.oxw();const Tt=a.MAs(18);a.xp6(1),a.Q6J("ngTemplateOutlet",Tt)}}function J(ht,Wt){1&ht&&a.GkF(0)}function F(ht,Wt){if(1&ht&&(a.ynx(0),a.YNc(1,J,1,0,"ng-container",18),a.BQk()),2&ht){a.oxw();const Tt=a.MAs(12);a.xp6(1),a.Q6J("ngTemplateOutlet",Tt)}}function X(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&ht){const Tt=a.oxw(3);a.xp6(1),a.hij(" ",Tt.data.success," ")}}function de(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&ht){const Tt=a.oxw(3);a.xp6(1),a.hij(" ",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.clean," ")}}const V=function(ht){return[ht]};function ce(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a.YNc(1,X,2,1,"span",19),a.YNc(2,de,2,1,"span",19),a._UZ(3,"i",21),a.qZA()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.Q6J("ngIf",Tt.data.success||0===Tt.data.success&&0===Tt.data.total),a.xp6(1),a.Q6J("ngIf",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.clean),a.xp6(1),a.Q6J("ngClass",a.VKq(3,V,Tt.icons.success))}}function se(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&ht){const Tt=a.oxw(3);a.xp6(1),a.hij(" ",Tt.data.info," ")}}function fe(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a.YNc(1,se,2,1,"span",19),a._UZ(2,"i",23),a.qZA()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.Q6J("ngIf",Tt.data.info),a.xp6(1),a.Q6J("ngClass",a.VKq(2,V,Tt.icons.danger))}}function Te(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&ht){const Tt=a.oxw(3);a.xp6(1),a.hij(" ",Tt.data.warn," ")}}function $e(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&ht){const Tt=a.oxw(3);a.xp6(1),a.hij(" ",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.warning," ")}}function ge(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a.YNc(1,Te,2,1,"span",19),a.YNc(2,$e,2,1,"span",19),a._UZ(3,"i",24),a.qZA()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.Q6J("ngIf",Tt.data.warn),a.xp6(1),a.Q6J("ngIf",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.warning),a.xp6(1),a.Q6J("ngClass",a.VKq(3,V,Tt.icons.warning))}}function Et(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&ht){const Tt=a.oxw(3);a.xp6(1),a.hij(" ",Tt.data.error," ")}}function ot(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&ht){const Tt=a.oxw(3);a.xp6(1),a.hij(" ",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.unknown," ")}}function ct(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a.YNc(1,Et,2,1,"span",19),a.YNc(2,ot,2,1,"span",19),a._UZ(3,"i",25),a.qZA()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.Q6J("ngIf",Tt.data.error),a.xp6(1),a.Q6J("ngIf",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.unknown),a.xp6(1),a.Q6J("ngClass",a.VKq(3,V,Tt.icons.danger))}}function qe(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&ht){const Tt=a.oxw(3);a.xp6(1),a.hij(" ",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.working," ")}}const He=function(ht,Wt){return[ht,Wt]};function We(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a.YNc(1,qe,2,1,"span",19),a._UZ(2,"i",24),a.qZA()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.Q6J("ngIf",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.working),a.xp6(1),a.Q6J("ngClass",a.WLB(2,He,Tt.icons.spinner,Tt.icons.spin))}}function Le(ht,Wt){if(1&ht&&(a.YNc(0,ce,4,5,"span",19),a.YNc(1,fe,3,4,"span",20),a.YNc(2,ge,4,5,"span",20),a.YNc(3,ct,4,5,"span",20),a.YNc(4,We,3,5,"span",20)),2&ht){const Tt=a.oxw();a.Q6J("ngIf",Tt.data.success||(null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.clean)||0===Tt.data.success&&0===Tt.data.total),a.xp6(1),a.Q6J("ngIf",Tt.data.info),a.xp6(1),a.Q6J("ngIf",Tt.data.warn||(null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.warning)),a.xp6(1),a.Q6J("ngIf",Tt.data.error||(null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.unknown)),a.xp6(1),a.Q6J("ngIf",null==Tt.data.categoryPgAmount?null:Tt.data.categoryPgAmount.working)}}function Pt(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a._UZ(2,"i",21),a.qZA()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.hij(" ",Tt.data.up," "),a.xp6(1),a.Q6J("ngClass",a.VKq(2,V,Tt.icons.success))}}function it(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.TgZ(2,"span",26),a._uU(3," up "),a.qZA()()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.hij(" ",Tt.data.up," ")}}function Xt(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a._uU(1),a.TgZ(2,"span",26),a._uU(3," in "),a.qZA()()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.hij(" ",Tt.data.in," ")}}function cn(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a._uU(1),a.TgZ(2,"span",27),a._uU(3," down "),a.qZA()()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.hij(" ",Tt.data.down," ")}}function pn(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a._uU(1),a.TgZ(2,"span",27),a._uU(3," out "),a.qZA()()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.hij(" ",Tt.data.out," ")}}function Rn(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a._uU(1),a.TgZ(2,"span",28),a._uU(3," nearfull"),a.qZA()()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.hij(" ",Tt.data.nearfull," ")}}function At(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a._uU(1),a.TgZ(2,"span",29),a._uU(3," full "),a.qZA()()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.hij(" ",Tt.data.full," ")}}function qt(ht,Wt){if(1&ht&&(a.YNc(0,Pt,3,4,"span",19),a.YNc(1,it,4,1,"span",19),a.YNc(2,Xt,4,1,"span",20),a.YNc(3,cn,4,1,"span",20),a.YNc(4,pn,4,1,"span",20),a.YNc(5,Rn,4,1,"span",20),a.YNc(6,At,4,1,"span",20)),2&ht){const Tt=a.oxw();a.Q6J("ngIf",Tt.data.up===Tt.data.in),a.xp6(1),a.Q6J("ngIf",Tt.data.up!==Tt.data.in),a.xp6(1),a.Q6J("ngIf",Tt.data.in!==Tt.data.up),a.xp6(1),a.Q6J("ngIf",Tt.data.down),a.xp6(1),a.Q6J("ngIf",Tt.data.out),a.xp6(1),a.Q6J("ngIf",Tt.data.nearfull),a.xp6(1),a.Q6J("ngIf",Tt.data.full)}}function sn(ht,Wt){if(1&ht&&a._UZ(0,"i",21),2&ht){const Tt=a.oxw(2);a.Q6J("ngClass",a.VKq(1,V,Tt.icons.success))}}function fn(ht,Wt){if(1&ht&&(a.TgZ(0,"span",22),a._uU(1),a._UZ(2,"i",25),a.qZA()),2&ht){const Tt=a.oxw(2);a.xp6(1),a.hij(" ",Tt.data.down," "),a.xp6(1),a.Q6J("ngClass",a.VKq(2,V,Tt.icons.danger))}}function xn(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a.YNc(2,sn,1,3,"i",30),a.qZA(),a.YNc(3,fn,3,4,"span",20)),2&ht){const Tt=a.oxw();a.xp6(1),a.hij(" ",Tt.data.up," "),a.xp6(1),a.Q6J("ngIf",Tt.data.up||0===Tt.data.up),a.xp6(1),a.Q6J("ngIf",Tt.data.down)}}function Kr(ht,Wt){if(1&ht&&(a.TgZ(0,"span"),a._uU(1),a._UZ(2,"i",21),a.qZA()),2&ht){const Tt=a.oxw();a.xp6(1),a.hij(" ",Tt.data," "),a.xp6(1),a.Q6J("ngClass",a.VKq(2,V,Tt.icons.success))}}function Or(ht,Wt){if(1&ht&&a._uU(0),2&ht){const Tt=a.oxw(3);a.Oqu(Tt.title)}}function Lr(ht,Wt){if(1&ht&&a._uU(0),2&ht){const Tt=a.oxw(3);a.Oqu(Tt.title)}}function ir(ht,Wt){if(1&ht&&a._uU(0),2&ht){const Tt=a.oxw(3);a.hij("",Tt.title,"s")}}function Qr(ht,Wt){if(1&ht&&(a.TgZ(0,"span",32),a._uU(1),a.YNc(2,Or,1,1,"ng-template",15),a.YNc(3,Lr,1,1,"ng-template",16),a.YNc(4,ir,1,1,"ng-template",17),a.qZA()),2&ht){const Tt=a.oxw(2);a.Q6J("ngPlural",Tt.total),a.xp6(1),a.hij(" ",Tt.total," ")}}function jr(ht,Wt){if(1&ht&&a.YNc(0,Qr,5,2,"span",31),2&ht){const Tt=a.oxw();a.Q6J("ngIf",Tt.total||0===Tt.total)}}let br=(()=>{class ht{constructor(){this.summaryType="default",this.icons=r.P}ngOnChanges(){this.total=this.data.total||0===this.data.total?this.data.total:"iscsi"===this.summaryType?this.data.up+this.data.down||0:this.data}}return ht.\u0275fac=function(Tt){return new(Tt||ht)},ht.\u0275cmp=a.Xpm({type:ht,selectors:[["cd-card-row"]],inputs:{title:"title",link:"link",data:"data",summaryType:"summaryType"},features:[a.TTD],decls:21,vars:6,consts:function(){let Wt;return Wt=" " + "\ufffd0\ufffd" + " " + "\ufffd*2:1\ufffd" + "" + "[\ufffd0:1\ufffd|\ufffd0:2\ufffd|\ufffd0:3\ufffd]" + "" + "[\ufffd/*2:1\ufffd|\ufffd/*3:2\ufffd|\ufffd/*4:3\ufffd]" + "" + "\ufffd*3:2\ufffd" + "" + "[\ufffd0:1\ufffd|\ufffd0:2\ufffd|\ufffd0:3\ufffd]" + "" + "[\ufffd/*2:1\ufffd|\ufffd/*3:2\ufffd|\ufffd/*4:3\ufffd]" + "" + "\ufffd*4:3\ufffd" + "" + "[\ufffd0:1\ufffd|\ufffd0:2\ufffd|\ufffd0:3\ufffd]" + "s" + "[\ufffd/*2:1\ufffd|\ufffd/*3:2\ufffd|\ufffd/*4:3\ufffd]" + "",Wt=a.Zx4(Wt),[[1,"list-group-item"],[1,"d-flex","pl-1","pb-2","pt-2"],[1,"ms-4","me-auto"],[3,"routerLink","ngPlural",4,"ngIf","ngIfElse"],[1,"me-3"],[3,"ngSwitch"],[4,"ngSwitchCase"],[4,"ngSwitchDefault"],["defaultSummary",""],["osdSummary",""],["iscsiSummary",""],["simplifiedSummary",""],["noLinkTitle",""],[3,"routerLink","ngPlural"],Wt,["ngPluralCase","=0"],["ngPluralCase","=1"],["ngPluralCase","other"],[4,"ngTemplateOutlet"],[4,"ngIf"],["class","ms-2",4,"ngIf"],[1,"text-success",3,"ngClass"],[1,"ms-2"],[1,"text-info",3,"ngClass"],[1,"text-warning",3,"ngClass"],[1,"text-danger",3,"ngClass"],[1,"fw-bold","text-success"],[1,"fw-bold","text-danger","me-2"],[1,"fw-bold","text-warning","me-2"],[1,"fw-bold","text-danger"],["class","text-success",3,"ngClass",4,"ngIf"],[3,"ngPlural",4,"ngIf"],[3,"ngPlural"]]},template:function(Tt,wn){if(1&Tt&&(a._UZ(0,"hr"),a.TgZ(1,"li",0)(2,"div",1)(3,"div",2),a.YNc(4,T,5,3,"a",3),a.qZA(),a.TgZ(5,"span",4),a.ynx(6,5),a.YNc(7,w,2,1,"ng-container",6),a.YNc(8,U,2,1,"ng-container",6),a.YNc(9,$,2,1,"ng-container",6),a.YNc(10,F,2,1,"ng-container",7),a.BQk(),a.qZA()()(),a.YNc(11,Le,5,5,"ng-template",null,8,a.W1O),a.YNc(13,qt,7,7,"ng-template",null,9,a.W1O),a.YNc(15,xn,4,3,"ng-template",null,10,a.W1O),a.YNc(17,Kr,3,4,"ng-template",null,11,a.W1O),a.YNc(19,jr,1,1,"ng-template",null,12,a.W1O)),2&Tt){const jn=a.MAs(20);a.xp6(4),a.Q6J("ngIf",wn.link&&wn.total>0)("ngIfElse",jn),a.xp6(2),a.Q6J("ngSwitch",wn.summaryType),a.xp6(1),a.Q6J("ngSwitchCase","iscsi"),a.xp6(1),a.Q6J("ngSwitchCase","osd"),a.xp6(1),a.Q6J("ngSwitchCase","simplified")}},dependencies:[c.mk,c.O5,c.tP,c.RF,c.n9,c.ED,c.iq,c.zE,u.rH],styles:[".list-group-item[_ngcontent-%COMP%]{border:0;font-size:14px}"]}),ht})()},9219:(E,C,s)=>{"use strict";s.d(C,{A:()=>W});var r=s(65862),a=s(64537),c=s(88692);function u($,J){if(1&$&&(a.TgZ(0,"span"),a._uU(1),a.qZA()),2&$){const F=a.oxw(2);a.xp6(1),a.Oqu(F.cardTitle)}}function e($,J){if(1&$&&(a.TgZ(0,"h4",6),a.YNc(1,u,2,1,"span",7),a.qZA()),2&$){const F=a.oxw();a.xp6(1),a.Q6J("ngIf",""===F.cardType)}}function f($,J){if(1&$&&(a.TgZ(0,"h4",8),a._UZ(1,"i",9),a.TgZ(2,"span",10),a._uU(3),a.qZA()()),2&$){const F=a.oxw();a.xp6(1),a.Q6J("ngClass",F.icons.deploy),a.xp6(2),a.Oqu(F.cardTitle)}}function m($,J){if(1&$&&(a.TgZ(0,"h5",11),a._uU(1),a.qZA()),2&$){const F=a.oxw();a.xp6(1),a.hij(" ",F.cardTitle," ")}}function T($,J){1&$&&(a.TgZ(0,"div",12),a.Hsn(1,1),a.qZA())}const M=["*",[["",8,"footer"]]],w=function($,J,F,X,de){return{"border-0":$,"bg-color":J,shadow:F,"shadow-sm":X,"h-100":de}},D=function($,J){return{"d-flex align-items-center":$,"justify-content-center":J}},U=["*",".footer"];let W=(()=>{class ${constructor(){this.icons=r.P,this.cardType="",this.removeBorder=!1,this.shadow=!1,this.cardFooter=!1,this.fullHeight=!1,this.alignItemsCenter=!1,this.justifyContentCenter=!1}}return $.\u0275fac=function(F){return new(F||$)},$.\u0275cmp=a.Xpm({type:$,selectors:[["cd-card"]],inputs:{cardTitle:"cardTitle",cardType:"cardType",removeBorder:"removeBorder",shadow:"shadow",cardFooter:"cardFooter",fullHeight:"fullHeight",alignItemsCenter:"alignItemsCenter",justifyContentCenter:"justifyContentCenter"},ngContentSelectors:U,decls:7,vars:15,consts:[[1,"card","flex-fill",3,"ngClass"],["class","card-title mt-4 ms-4 mb-0",4,"ngIf"],["class","text-center mt-4 mb-0",4,"ngIf"],["class","text-center card-title",4,"ngIf"],[1,"card-body","ps-0","pe-0",3,"ngClass"],["class","card-footer p-0 bg-white",4,"ngIf"],[1,"card-title","mt-4","ms-4","mb-0"],[4,"ngIf"],[1,"text-center","mt-4","mb-0"],[3,"ngClass"],[1,"badge","badge-info"],[1,"text-center","card-title"],[1,"card-footer","p-0","bg-white"]],template:function(F,X){1&F&&(a.F$t(M),a.TgZ(0,"div",0),a.YNc(1,e,2,1,"h4",1),a.YNc(2,f,4,2,"h4",2),a.YNc(3,m,2,1,"h5",3),a.TgZ(4,"div",4),a.Hsn(5),a.qZA(),a.YNc(6,T,2,0,"div",5),a.qZA()),2&F&&(a.Q6J("ngClass",a.qbA(6,w,X.removeBorder,"Sync Status Card"===X.cardType,X.shadow,!X.shadow&&"syncCards"!==X.cardType,X.fullHeight)),a.xp6(1),a.Q6J("ngIf","zone"!==X.cardType),a.xp6(1),a.Q6J("ngIf","zone"===X.cardType),a.xp6(1),a.Q6J("ngIf","syncCards"===X.cardType),a.xp6(1),a.Q6J("ngClass",a.WLB(12,D,X.alignItemsCenter,X.justifyContentCenter)),a.xp6(2),a.Q6J("ngIf",X.cardFooter))},dependencies:[c.mk,c.O5]}),$})()},15626:(E,C,s)=>{"use strict";s.d(C,{K:()=>D});var r=s(88692),a=s(20092),c=s(54247),u=s(51389),e=s(90504),f=s(72621),m=s(85770),T=s(35540),M=s(12455),w=s(64537);let D=(()=>{class U{}return U.\u0275fac=function($){return new($||U)},U.\u0275mod=w.oAB({type:U}),U.\u0275inj=w.cJS({imports:[r.ez,a.u5,a.UX,u._A,u.dT,u.ZQ,u.HK,f.m9,a.UX,M.D,T.o,u.XC,e.w,m.t,c.Bz,u.M,u.UL]}),U})()},36169:(E,C,s)=>{"use strict";s.d(C,{Y:()=>D});var r=s(20092),a=s(64537),c=s(51389),u=s(88692),e=s(41582),f=s(60312),m=s(30839);function T(U,W){1&U&&(a.TgZ(0,"span",11),a._UZ(1,"i",12),a.qZA())}function M(U,W){1&U&&a.GkF(0)}function w(U,W){if(1&U&&(a.TgZ(0,"p"),a._uU(1),a.qZA()),2&U){const $=a.oxw();a.xp6(1),a.hij(" ",$.description," ")}}let D=(()=>{class U{constructor($){this.activeModal=$,this.warning=!1,this.showSubmit=!0,this.showCancel=!0,this.boundCancel=this.cancel.bind(this),this.canceled=!1,this.confirmationForm=new r.nJ({})}ngOnInit(){if(this.bodyContext=this.bodyContext||{},this.bodyContext.$implicit=this.bodyData,!this.onSubmit)throw new Error("No submit action defined");if(!this.buttonText)throw new Error("No action name defined");if(!this.titleText)throw new Error("No title defined");if(!this.bodyTpl&&!this.description)throw new Error("No description defined")}ngOnDestroy(){this.onCancel&&this.canceled&&this.onCancel()}cancel(){this.canceled=!0,this.activeModal.close()}stopLoadingSpinner(){this.confirmationForm.setErrors({cdSubmitButton:!0})}}return U.\u0275fac=function($){return new($||U)(a.Y36(c.Kz))},U.\u0275cmp=a.Xpm({type:U,selectors:[["cd-confirmation-modal"]],decls:12,vars:10,consts:[[3,"hide"],[1,"modal-title"],["class","text-warning",4,"ngIf"],[1,"modal-content"],["name","confirmationForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","showCancel","showSubmit","submitActionEvent","backActionEvent"],[1,"text-warning"],[1,"fa","fa-exclamation-triangle","fa-1x"]],template:function($,J){1&$&&(a.TgZ(0,"cd-modal",0),a.NdJ("hide",function(){return J.cancel()}),a.ynx(1,1),a.YNc(2,T,2,0,"span",2),a._uU(3),a.BQk(),a.ynx(4,3),a.TgZ(5,"form",4,5)(7,"div",6),a.YNc(8,M,1,0,"ng-container",7),a.YNc(9,w,2,1,"p",8),a.qZA(),a.TgZ(10,"div",9)(11,"cd-form-button-panel",10),a.NdJ("submitActionEvent",function(){return J.onSubmit(J.confirmationForm.value)})("backActionEvent",function(){return J.boundCancel()}),a.qZA()()(),a.BQk(),a.qZA()),2&$&&(a.xp6(2),a.Q6J("ngIf",J.warning),a.xp6(1),a.Oqu(J.titleText),a.xp6(2),a.Q6J("formGroup",J.confirmationForm),a.xp6(3),a.Q6J("ngTemplateOutlet",J.bodyTpl)("ngTemplateOutletContext",J.bodyContext),a.xp6(1),a.Q6J("ngIf",J.description),a.xp6(2),a.Q6J("form",J.confirmationForm)("submitText",J.buttonText)("showCancel",J.showCancel)("showSubmit",J.showSubmit))},dependencies:[u.O5,u.tP,r._Y,r.JL,r.sg,e.V,f.z,m.p]}),U})()},58039:(E,C,s)=>{"use strict";s.d(C,{s:()=>D});var r=s(97057),a=s(65862),c=s(64537),u=s(23122),e=s(88692),f=s(87925);const m=function(U,W){return[U,W]};function T(U,W){if(1&U){const $=c.EpF();c.TgZ(0,"i",2),c.NdJ("click",function(){c.CHM($);const F=c.oxw();return c.KtG(F.onClick())}),c.qZA()}if(2&U){const $=c.oxw();c.Q6J("ngClass",c.WLB(1,m,$.icons.clipboard,$.icons.large))}}const M=function(U){return[U]};function w(U,W){if(1&U){const $=c.EpF();c.TgZ(0,"button",3),c.NdJ("click",function(){c.CHM($);const F=c.oxw();return c.KtG(F.onClick())}),c._UZ(1,"i",4),c.qZA()}if(2&U){const $=c.oxw();c.xp6(1),c.Q6J("ngClass",c.VKq(1,M,$.icons.clipboard))}}let D=(()=>{class U{constructor($){this.toastr=$,this.byId=!0,this.showIconOnly=!1,this.icons=a.P}getText(){return document.getElementById(this.source).value}onClick(){try{const $=(0,r.qY)(),J=this.byId?this.getText():this.source,F=()=>{this.toastr.success("Copied text to the clipboard successfully.")};["firefox","ie","ios","safari"].includes($.name)?navigator.clipboard.writeText(J).then(()=>F()):navigator.permissions.query({name:"clipboard-write"}).then(X=>{("granted"===X.state||"prompt"===X.state)&&navigator.clipboard.writeText(J).then(()=>F())})}catch{this.toastr.error("Failed to copy text to the clipboard.")}}}return U.\u0275fac=function($){return new($||U)(c.Y36(u._W))},U.\u0275cmp=c.Xpm({type:U,selectors:[["cd-copy-2-clipboard-button"]],hostBindings:function($,J){1&$&&c.NdJ("click",function(){return J.onClick()})},inputs:{source:"source",byId:"byId",showIconOnly:"showIconOnly"},decls:3,vars:2,consts:function(){let W;return W="Copy to Clipboard",[["class","text-primary ms-2","title","Copy to Clipboard",3,"ngClass","click",4,"ngIf","ngIfElse"],["withButtonTpl",""],["title","Copy to Clipboard",1,"text-primary","ms-2",3,"ngClass","click"],["type","button","title",W,1,"btn","btn-light",3,"click"],[3,"ngClass"]]},template:function($,J){if(1&$&&(c.YNc(0,T,1,4,"i",0),c.YNc(1,w,2,3,"ng-template",null,1,c.W1O)),2&$){const F=c.MAs(2);c.Q6J("ngIf",J.showIconOnly)("ngIfElse",F)}},dependencies:[e.mk,e.O5,f.o]}),U})()},30982:(E,C,s)=>{"use strict";s.d(C,{M:()=>$e});var r=s(20092),a=s(95463),c=s(39749),u=s(64537),e=s(51389),f=s(88692),m=s(82945),T=s(87925),M=s(94276),w=s(56310),D=s(41582),U=s(60312),W=s(30839);function $(ge,Et){1&ge&&u.GkF(0)}function J(ge,Et){1&ge&&u.GkF(0)}function F(ge,Et){if(1&ge&&(u.TgZ(0,"p"),u.tHW(1,21),u.ALo(2,"lowercase"),u._UZ(3,"strong"),u.N_p(),u.qZA()),2&ge){const ot=u.oxw(2);u.xp6(3),u.pQV(u.lcZ(2,2,ot.actionDescription))(ot.itemNames[0]),u.QtT(1)}}function X(ge,Et){if(1&ge&&(u.TgZ(0,"li")(1,"strong"),u._uU(2),u.qZA()()),2&ge){const ot=Et.$implicit;u.xp6(2),u.Oqu(ot)}}function de(ge,Et){if(1&ge&&(u.TgZ(0,"p"),u.SDv(1,22),u.ALo(2,"lowercase"),u.qZA(),u.TgZ(3,"ul"),u.YNc(4,X,3,1,"li",23),u.qZA()),2&ge){const ot=u.oxw(2);u.xp6(2),u.pQV(u.lcZ(2,2,ot.actionDescription)),u.QtT(1),u.xp6(2),u.Q6J("ngForOf",ot.itemNames)}}function V(ge,Et){if(1&ge&&(u.TgZ(0,"span"),u.YNc(1,F,4,4,"p",10),u.YNc(2,de,5,4,"ng-template",null,20,u.W1O),u.qZA()),2&ge){const ot=u.MAs(3),ct=u.oxw();u.xp6(1),u.Q6J("ngIf",1===ct.itemNames.length)("ngIfElse",ot)}}function ce(ge,Et){if(1&ge&&(u.TgZ(0,"p"),u.SDv(1,24),u.ALo(2,"lowercase"),u.qZA()),2&ge){const ot=u.oxw();u.xp6(2),u.pQV(u.lcZ(2,2,ot.actionDescription))(ot.itemDescription),u.QtT(1)}}function se(ge,Et){1&ge&&u.GkF(0)}function fe(ge,Et){if(1&ge&&(u._uU(0),u.ALo(1,"titlecase")),2&ge){const ot=u.oxw();u.AsE(" ",u.lcZ(1,2,ot.actionDescription)," ",ot.itemDescription,"\n")}}const Te=function(ge){return{form:ge}};let $e=(()=>{class ge{constructor(ot){this.activeModal=ot,this.actionDescription="delete"}ngOnInit(){const ot={confirmation:new r.p4(!1,[r.kI.requiredTrue])};if(this.childFormGroup&&(ot.child=this.childFormGroup),this.deletionForm=new a.d(ot),!this.submitAction&&!this.submitActionObservable)throw new Error("No submit action defined")}callSubmitAction(){this.submitActionObservable?this.submitActionObservable().subscribe({error:this.stopLoadingSpinner.bind(this),complete:this.hideModal.bind(this)}):this.submitAction()}callBackAction(){this.callBackAtionObservable?this.callBackAtionObservable().subscribe({error:this.stopLoadingSpinner.bind(this),complete:this.hideModal.bind(this)}):this.backAction()}hideModal(){this.activeModal.close()}stopLoadingSpinner(){this.deletionForm.setErrors({cdSubmitButton:!0})}}return ge.\u0275fac=function(ot){return new(ot||ge)(u.Y36(e.Kz))},ge.\u0275cmp=u.Xpm({type:ge,selectors:[["cd-deletion-modal"]],viewQuery:function(ot,ct){if(1&ot&&u.Gf(c.w,7),2&ot){let qe;u.iGM(qe=u.CRH())&&(ct.submitButton=qe.first)}},decls:24,vars:15,consts:function(){let Et,ot,ct,qe;return Et="Yes, I am sure.",ot="Are you sure that you want to " + "\ufffd0\ufffd" + " " + "\ufffd#3\ufffd" + "" + "\ufffd1\ufffd" + "" + "\ufffd/#3\ufffd" + "?",ct="Are you sure that you want to " + "\ufffd0\ufffd" + " the selected items?",qe="Are you sure that you want to " + "\ufffd0\ufffd" + " the selected " + "\ufffd1\ufffd" + "?",[[3,"modalRef"],["modal",""],[1,"modal-title"],[4,"ngTemplateOutlet"],[1,"modal-content"],["name","deletionForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"question"],[4,"ngIf","ngIfElse"],["noNames",""],[1,"form-group"],[1,"custom-control","custom-checkbox"],["type","checkbox","name","confirmation","id","confirmation","formControlName","confirmation","autofocus","",1,"custom-control-input"],["for","confirmation",1,"custom-control-label"],Et,[1,"modal-footer"],[3,"form","submitText","submitActionEvent","backActionEvent"],["deletionHeading",""],["manyNames",""],ot,ct,[4,"ngFor","ngForOf"],qe]},template:function(ot,ct){if(1&ot&&(u.TgZ(0,"cd-modal",0,1),u.ynx(2,2),u.YNc(3,$,1,0,"ng-container",3),u.BQk(),u.ynx(4,4),u.TgZ(5,"form",5,6)(7,"div",7),u.YNc(8,J,1,0,"ng-container",8),u.TgZ(9,"div",9),u.YNc(10,V,4,2,"span",10),u.YNc(11,ce,3,4,"ng-template",null,11,u.W1O),u.YNc(13,se,1,0,"ng-container",8),u.TgZ(14,"div",12)(15,"div",13),u._UZ(16,"input",14),u.TgZ(17,"label",15),u.SDv(18,16),u.qZA()()()()(),u.TgZ(19,"div",17)(20,"cd-form-button-panel",18),u.NdJ("submitActionEvent",function(){return ct.callSubmitAction()})("backActionEvent",function(){return ct.backAction?ct.callBackAction():ct.hideModal()}),u.ALo(21,"titlecase"),u.qZA()()(),u.BQk(),u.qZA(),u.YNc(22,fe,2,4,"ng-template",null,19,u.W1O)),2&ot){const qe=u.MAs(12),He=u.MAs(23);u.Q6J("modalRef",ct.activeModal),u.xp6(3),u.Q6J("ngTemplateOutlet",He),u.xp6(2),u.Q6J("formGroup",ct.deletionForm),u.xp6(3),u.Q6J("ngTemplateOutlet",ct.bodyTemplate)("ngTemplateOutletContext",ct.bodyContext),u.xp6(2),u.Q6J("ngIf",ct.itemNames)("ngIfElse",qe),u.xp6(3),u.Q6J("ngTemplateOutlet",ct.childFormGroupTemplate)("ngTemplateOutletContext",u.VKq(13,Te,ct.deletionForm)),u.xp6(7),u.Q6J("form",ct.deletionForm)("submitText",u.lcZ(21,11,ct.actionDescription)+" "+ct.itemDescription)}},dependencies:[f.sg,f.O5,f.tP,r._Y,r.Wl,r.JJ,r.JL,r.sg,r.u,m.U,T.o,M.b,w.P,D.V,U.z,W.p,f.i8,f.rS],styles:[".modal-body[_ngcontent-%COMP%]   .question[_ngcontent-%COMP%]{margin-top:1em}.modal-body[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{font-weight:700}.modal-body[_ngcontent-%COMP%]   .question[_ngcontent-%COMP%]   .form-check[_ngcontent-%COMP%]{padding-top:7px}"]}),ge})()},52266:(E,C,s)=>{"use strict";s.d(C,{J:()=>T});var r=s(16738),a=s.n(r),c=s(64537),u=s(51389),e=s(88692),f=s(20092);function m(M,w){if(1&M){const D=c.EpF();c.TgZ(0,"div",0)(1,"ngb-timepicker",4),c.NdJ("ngModelChange",function(W){c.CHM(D);const $=c.oxw();return c.KtG($.time=W)})("ngModelChange",function(){c.CHM(D);const W=c.oxw();return c.KtG(W.onModelChange())}),c.qZA()()}if(2&M){const D=c.oxw();c.xp6(1),c.Q6J("seconds",D.hasSeconds)("ngModel",D.time)}}let T=(()=>{class M{constructor(D){this.calendar=D,this.hasSeconds=!0,this.hasTime=!0}ngOnInit(){this.minDate=this.calendar.getToday(),this.format=this.hasTime?this.hasSeconds?"YYYY-MM-DD HH:mm:ss":"YYYY-MM-DD HH:mm":"YYYY-MM-DD";let D=a()(this.control?.value,this.format);(!D.isValid()||D.isBefore(a()()))&&(D=a()()),this.date={year:D.year(),month:D.month()+1,day:D.date()},this.time={hour:D.hour(),minute:D.minute(),second:D.second()},this.onModelChange()}onModelChange(){if(this.date){const D=Object.assign({},this.date,this.time);D.month--,setTimeout(()=>{this.control.setValue(a()(D).format(this.format))})}else setTimeout(()=>{this.control.setValue("")})}}return M.\u0275fac=function(D){return new(D||M)(c.Y36(u.vL))},M.\u0275cmp=c.Xpm({type:M,selectors:[["cd-date-time-picker"]],inputs:{control:"control",hasSeconds:"hasSeconds",hasTime:"hasTime"},decls:4,vars:3,consts:[[1,"d-flex","justify-content-center"],[3,"ngModel","minDate","ngModelChange"],["dp",""],["class","d-flex justify-content-center",4,"ngIf"],[3,"seconds","ngModel","ngModelChange"]],template:function(D,U){1&D&&(c.TgZ(0,"div",0)(1,"ngb-datepicker",1,2),c.NdJ("ngModelChange",function($){return U.date=$})("ngModelChange",function(){return U.onModelChange()}),c.qZA()(),c.YNc(3,m,2,2,"div",3)),2&D&&(c.xp6(1),c.Q6J("ngModel",U.date)("minDate",U.minDate),c.xp6(2),c.Q6J("ngIf",U.hasTime))},dependencies:[e.O5,f.JJ,f.On,u.VL,u.Pm]}),M})()},30490:(E,C,s)=>{"use strict";s.d(C,{K:()=>c});var r=s(72625),a=s(64537);let c=(()=>{class u{constructor(f){this.docService=f,this.docText="documentation"}ngOnInit(){this.noSubscribe?this.docUrl=this.docService.urlGenerator(this.section):this.docService.subscribeOnce(this.section,f=>{this.docUrl=f})}}return u.\u0275fac=function(f){return new(f||u)(a.Y36(r.R))},u.\u0275cmp=a.Xpm({type:u,selectors:[["cd-doc"]],inputs:{section:"section",docText:"docText",noSubscribe:"noSubscribe"},decls:2,vars:2,consts:[["target","_blank",3,"href"]],template:function(f,m){1&f&&(a.TgZ(0,"a",0),a._uU(1),a.qZA()),2&f&&(a.s9C("href",m.docUrl,a.LSH),a.xp6(1),a.Oqu(m.docText))}}),u})()},30839:(E,C,s)=>{"use strict";s.d(C,{p:()=>M});var r=s(64537),a=s(79512),c=s(39749),u=s(88692),e=s(63285),f=s(13472);function m(w,D){if(1&w){const U=r.EpF();r.TgZ(0,"cd-back-button",2),r.NdJ("backAction",function(){r.CHM(U);const $=r.oxw();return r.KtG($.backAction())}),r.qZA()}if(2&w){const U=r.oxw();r.Q6J("name",U.cancelText)}}function T(w,D){if(1&w){const U=r.EpF();r.TgZ(0,"cd-submit-button",3),r.NdJ("submitAction",function(){r.CHM(U);const $=r.oxw();return r.KtG($.submitAction())}),r._uU(1),r.qZA()}if(2&w){const U=r.oxw();r.Q6J("disabled",U.disabled)("form",U.form)("ariaLabel",U.submitText),r.xp6(1),r.Oqu(U.submitText)}}let M=(()=>{class w{constructor(U,W,$){this.location=U,this.actionLabels=W,this.modalService=$,this.submitActionEvent=new r.vpe,this.backActionEvent=new r.vpe,this.showSubmit=!0,this.showCancel=!0,this.wrappingClass="",this.btnClass="",this.disabled=!1}ngOnInit(){this.submitText=this.submitText||this.actionLabels.CREATE,this.cancelText=this.cancelText||this.actionLabels.CANCEL}submitAction(){this.submitActionEvent.emit()}backAction(){0===this.backActionEvent.observers.length?this.modalService.hasOpenModals()?this.modalService.dismissAll():this.location.back():this.backActionEvent.emit()}}return w.\u0275fac=function(U){return new(U||w)(r.Y36(u.Ye),r.Y36(a.p4),r.Y36(e.Z))},w.\u0275cmp=r.Xpm({type:w,selectors:[["cd-form-button-panel"]],viewQuery:function(U,W){if(1&U&&r.Gf(c.w,5),2&U){let $;r.iGM($=r.CRH())&&(W.submitButton=$.first)}},inputs:{form:"form",showSubmit:"showSubmit",showCancel:"showCancel",wrappingClass:"wrappingClass",btnClass:"btnClass",submitText:"submitText",cancelText:"cancelText",disabled:"disabled"},outputs:{submitActionEvent:"submitActionEvent",backActionEvent:"backActionEvent"},decls:3,vars:4,consts:[["class","m-2",3,"name","backAction",4,"ngIf"],["data-cy","submitBtn",3,"disabled","form","ariaLabel","submitAction",4,"ngIf"],[1,"m-2",3,"name","backAction"],["data-cy","submitBtn",3,"disabled","form","ariaLabel","submitAction"]],template:function(U,W){1&U&&(r.TgZ(0,"div"),r.YNc(1,m,1,1,"cd-back-button",0),r.YNc(2,T,2,4,"cd-submit-button",1),r.qZA()),2&U&&(r.Tol(W.wrappingClass),r.xp6(1),r.Q6J("ngIf",W.showCancel),r.xp6(1),r.Q6J("ngIf",W.showSubmit))},dependencies:[u.O5,c.w,f.W]}),w})()},65683:(E,C,s)=>{"use strict";s.d(C,{X:()=>We});var r=s(20092),a=s(23815),c=s.n(a),u=s(47557),e=s(28211),f=s(64537),m=s(51389),T=s(62862),M=s(88692),w=s(17932),D=s(87925),U=s(94276),W=s(41582),$=s(60192),J=s(60312),F=s(30839);function X(Le,Pt){if(1&Le&&(f.ynx(0,10),f._uU(1),f.BQk()),2&Le){const it=f.oxw();f.xp6(1),f.hij(" ",it.titleText," ")}}function de(Le,Pt){if(1&Le&&(f.TgZ(0,"p"),f._uU(1),f.qZA()),2&Le){const it=f.oxw();f.xp6(1),f.Oqu(it.message)}}const V=function(Le){return{required:Le}};function ce(Le,Pt){if(1&Le&&(f.TgZ(0,"label",18),f._uU(1),f.qZA()),2&Le){const it=f.oxw().$implicit;f.Q6J("ngClass",f.VKq(3,V,!0===(null==it?null:it.required)))("for",it.name),f.xp6(1),f.hij(" ",it.label," ")}}function se(Le,Pt){if(1&Le&&f._UZ(0,"input",19),2&Le){const it=f.oxw().$implicit;f.Q6J("type",it.type)("id",it.name)("name",it.name)("formControlName",it.name)}}function fe(Le,Pt){if(1&Le&&f._UZ(0,"input",20),2&Le){const it=f.oxw().$implicit;f.Q6J("id",it.name)("name",it.name)("formControlName",it.name)}}function Te(Le,Pt){if(1&Le&&(f.TgZ(0,"option",24),f._uU(1),f.qZA()),2&Le){const it=f.oxw(2).$implicit;f.Q6J("ngValue",null),f.xp6(1),f.hij(" ",null==it||null==it.typeConfig?null:it.typeConfig.placeholder," ")}}function $e(Le,Pt){if(1&Le&&(f.TgZ(0,"option",25),f._uU(1),f.qZA()),2&Le){const it=Pt.$implicit;f.Q6J("value",it.value),f.xp6(1),f.hij(" ",it.text," ")}}function ge(Le,Pt){if(1&Le&&(f.TgZ(0,"select",21),f.YNc(1,Te,2,2,"option",22),f.YNc(2,$e,2,2,"option",23),f.qZA()),2&Le){const it=f.oxw().$implicit;f.Q6J("id",it.name)("formControlName",it.name),f.xp6(1),f.Q6J("ngIf",null==it||null==it.typeConfig?null:it.typeConfig.placeholder),f.xp6(1),f.Q6J("ngForOf",null==it||null==it.typeConfig?null:it.typeConfig.options)}}function Et(Le,Pt){if(1&Le&&f._UZ(0,"cd-select-badges",26),2&Le){const it=f.oxw().$implicit;f.Q6J("id",it.name)("data",it.value)("customBadges",null==it||null==it.typeConfig?null:it.typeConfig.customBadges)("options",null==it||null==it.typeConfig?null:it.typeConfig.options)("messages",null==it||null==it.typeConfig?null:it.typeConfig.messages)}}function ot(Le,Pt){if(1&Le&&(f.TgZ(0,"span",27),f._uU(1),f.qZA()),2&Le){const it=f.oxw().$implicit,Xt=f.oxw();f.xp6(1),f.hij(" ",Xt.getError(it)," ")}}const ct=function(Le,Pt){return{"cd-col-form-input":Le,"col-sm-12":Pt}},qe=function(){return["text","number"]};function He(Le,Pt){if(1&Le&&(f.ynx(0),f.TgZ(1,"div"),f.YNc(2,ce,2,5,"label",11),f.TgZ(3,"div",12),f.YNc(4,se,1,4,"input",13),f.YNc(5,fe,1,3,"input",14),f.YNc(6,ge,3,4,"select",15),f.YNc(7,Et,1,5,"cd-select-badges",16),f.YNc(8,ot,2,1,"span",17),f.qZA()(),f.BQk()),2&Le){const it=Pt.$implicit,Xt=f.oxw(),cn=f.MAs(4);f.xp6(1),f.Gre("form-group row cd-",it.name,"-form-group"),f.xp6(1),f.Q6J("ngIf",it.label),f.xp6(1),f.Q6J("ngClass",f.WLB(10,ct,it.label,!it.label)),f.xp6(1),f.Q6J("ngIf",f.DdM(13,qe).includes(it.type)),f.xp6(1),f.Q6J("ngIf","binary"===it.type),f.xp6(1),f.Q6J("ngIf","select"===it.type),f.xp6(1),f.Q6J("ngIf","select-badges"===it.type),f.xp6(1),f.Q6J("ngIf",Xt.formGroup.showError(it.name,cn))}}let We=(()=>{class Le{constructor(it,Xt,cn,pn){this.activeModal=it,this.formBuilder=Xt,this.formatter=cn,this.dimlessBinaryPipe=pn}ngOnInit(){this.createForm()}createForm(){const it={};this.fields.forEach(Xt=>{it[Xt.name]=this.createFormControl(Xt)}),this.formGroup=this.formBuilder.group(it)}createFormControl(it){let Xt=[];return c().isBoolean(it.required)&&it.required&&Xt.push(r.kI.required),it.validators&&(Xt=Xt.concat(it.validators)),new r.p4(c().defaultTo("binary"===it.type?this.dimlessBinaryPipe.transform(it.value):it.value,null),{validators:Xt})}getError(it){const Xt=this.formGroup.get(it.name).errors;return Object.keys(Xt).map(pn=>this.getErrorMessage(pn,Xt[pn],it.errors)).join("<br>")}getErrorMessage(it,Xt,cn){if(cn){const pn=cn[it];if(pn)return pn}return["binaryMin","binaryMax"].includes(it)?Xt():"required"===it?"This field is required.":"pattern"===it?"Size must be a number or in a valid format. eg: 5 GiB":"An error occurred."}onSubmitForm(it){this.fields.filter(cn=>"binary"===cn.type).map(cn=>cn.name).forEach(cn=>{const pn=it[cn];pn&&(it[cn]=this.formatter.toBytes(pn))}),this.activeModal.close(),c().isFunction(this.onSubmit)&&this.onSubmit(it)}}return Le.\u0275fac=function(it){return new(it||Le)(f.Y36(m.Kz),f.Y36(T.O),f.Y36(e.H),f.Y36(u.$))},Le.\u0275cmp=f.Xpm({type:Le,selectors:[["cd-form-modal"]],decls:10,vars:7,consts:[[3,"modalRef"],["class","modal-title",4,"ngIf"],[1,"modal-content"],["novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[4,"ngIf"],[4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"modal-title"],["class","cd-col-form-label",3,"ngClass","for",4,"ngIf"],[3,"ngClass"],["class","form-control",3,"type","id","name","formControlName",4,"ngIf"],["type","text","class","form-control","cdDimlessBinary","",3,"id","name","formControlName",4,"ngIf"],["class","form-select",3,"id","formControlName",4,"ngIf"],[3,"id","data","customBadges","options","messages",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],[1,"cd-col-form-label",3,"ngClass","for"],[1,"form-control",3,"type","id","name","formControlName"],["type","text","cdDimlessBinary","",1,"form-control",3,"id","name","formControlName"],[1,"form-select",3,"id","formControlName"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],[3,"ngValue"],[3,"value"],[3,"id","data","customBadges","options","messages"],[1,"invalid-feedback"]],template:function(it,Xt){1&it&&(f.TgZ(0,"cd-modal",0),f.YNc(1,X,2,1,"ng-container",1),f.ynx(2,2),f.TgZ(3,"form",3,4)(5,"div",5),f.YNc(6,de,2,1,"p",6),f.YNc(7,He,9,14,"ng-container",7),f.qZA(),f.TgZ(8,"div",8)(9,"cd-form-button-panel",9),f.NdJ("submitActionEvent",function(){return Xt.onSubmitForm(Xt.formGroup.value)}),f.qZA()()(),f.BQk(),f.qZA()),2&it&&(f.Q6J("modalRef",Xt.activeModal),f.xp6(1),f.Q6J("ngIf",Xt.titleText),f.xp6(2),f.Q6J("formGroup",Xt.formGroup),f.xp6(3),f.Q6J("ngIf",Xt.message),f.xp6(1),f.Q6J("ngForOf",Xt.fields),f.xp6(2),f.Q6J("form",Xt.formGroup)("submitText",Xt.submitButtonText))},dependencies:[M.mk,M.sg,M.O5,r._Y,r.YN,r.Kr,r.Fj,r.EJ,r.JJ,r.JL,r.sg,r.u,w.Q,D.o,U.b,W.V,$.m,J.z,F.p]}),Le})()},76317:(E,C,s)=>{"use strict";s.d(C,{F:()=>ce});var r=s(9837),a=s(65862),c=s(64537),u=s(5998),e=s(88692),f=s(20092),m=s(87925),T=s(8958),M=s(34501),w=s(30490);function D(se,fe){1&se&&(c.TgZ(0,"cd-loading-panel"),c.SDv(1,2),c.qZA())}function U(se,fe){1&se&&(c.TgZ(0,"cd-alert-panel",3),c.tHW(1,4),c._UZ(2,"cd-doc",5),c.N_p(),c.qZA())}function W(se,fe){1&se&&(c.TgZ(0,"cd-alert-panel",3),c.tHW(1,6),c._UZ(2,"cd-doc",5),c.N_p(),c.qZA())}function $(se,fe){if(1&se&&(c.TgZ(0,"option",25),c._uU(1),c.qZA()),2&se){const Te=fe.$implicit;c.Q6J("ngValue",Te.value),c.xp6(1),c.hij("",Te.name," ")}}function J(se,fe){if(1&se){const Te=c.EpF();c.TgZ(0,"cd-alert-panel",28),c.NdJ("dismissed",function(){c.CHM(Te);const ge=c.oxw(3);return c.KtG(ge.showMessage=!1)}),c.tHW(1,29),c._UZ(2,"a",30),c.N_p(),c.qZA()}if(2&se){const Te=c.oxw(3);c.xp6(2),c.Q6J("href",Te.grafanaSrc,c.LSH)}}function F(se,fe){if(1&se&&(c.TgZ(0,"div",26),c.YNc(1,J,3,1,"cd-alert-panel",27),c.qZA()),2&se){const Te=c.oxw(2);c.xp6(1),c.Q6J("ngIf",Te.showMessage)}}const X=function(se){return[se]},de=function(se,fe){return[se,fe]};function V(se,fe){if(1&se){const Te=c.EpF();c.ynx(0),c.TgZ(1,"div",7)(2,"div",8)(3,"div",9)(4,"label",10),c.SDv(5,11),c.qZA()(),c.TgZ(6,"div",12)(7,"select",13),c.NdJ("ngModelChange",function(ge){c.CHM(Te);const Et=c.oxw();return c.KtG(Et.time=ge)})("ngModelChange",function(ge){c.CHM(Te);const Et=c.oxw();return c.KtG(Et.onTimepickerChange(ge))}),c.YNc(8,$,2,2,"option",14),c.qZA()(),c.TgZ(9,"div",15)(10,"button",16),c.NdJ("click",function(){c.CHM(Te);const ge=c.oxw();return c.KtG(ge.reset())}),c._UZ(11,"i",17),c.qZA()(),c.TgZ(12,"div",15)(13,"button",18),c.NdJ("click",function(){c.CHM(Te);const ge=c.oxw();return c.KtG(ge.showMessage=!ge.showMessage)}),c._UZ(14,"i",17),c.qZA()()()(),c.TgZ(15,"div",19),c.YNc(16,F,2,1,"div",20),c.qZA(),c.TgZ(17,"div",19)(18,"div",21)(19,"div",22),c._UZ(20,"iframe",23,24),c.qZA()()(),c.BQk()}if(2&se){const Te=c.oxw();c.xp6(7),c.Q6J("ngModel",Te.time),c.xp6(1),c.Q6J("ngForOf",Te.grafanaTimes),c.xp6(3),c.Q6J("ngClass",c.VKq(8,X,Te.icons.undo)),c.xp6(3),c.Q6J("ngClass",c.WLB(10,de,Te.icons.infoCircle,Te.icons.large)),c.xp6(2),c.Q6J("ngIf",Te.showMessage),c.xp6(4),c.Q6J("src",Te.grafanaSrc,c.uOi)("ngClass",Te.panelStyle)("title",Te.title)}}let ce=(()=>{class se{constructor(Te,$e){this.sanitizer=Te,this.settingsService=$e,this.grafanaExist=!1,this.mode="&kiosk",this.loading=!0,this.styles={},this.dashboardExist=!0,this.showMessage=!1,this.icons=a.P,this.DEFAULT_TIME="from=now-1h&to=now",this.grafanaTimes=[{name:"Last 5 minutes",value:"from=now-5m&to=now"},{name:"Last 15 minutes",value:"from=now-15m&to=now"},{name:"Last 30 minutes",value:"from=now-30m&to=now"},{name:"Last 1 hour (Default)",value:"from=now-1h&to=now"},{name:"Last 3 hours",value:"from=now-3h&to=now"},{name:"Last 6 hours",value:"from=now-6h&to=now"},{name:"Last 12 hours",value:"from=now-12h&to=now"},{name:"Last 24 hours",value:"from=now-24h&to=now"},{name:"Yesterday",value:"from=now-1d%2Fd&to=now-1d%2Fd"},{name:"Today so far",value:"from=now%2Fd&to=now"},{name:"Day before yesterday",value:"from=now-2d%2Fd&to=now-2d%2Fd"},{name:"Last 2 days",value:"from=now-2d&to=now"},{name:"This day last week",value:"from=now-7d%2Fd&to=now-7d%2Fd"},{name:"Previous week",value:"from=now-1w%2Fw&to=now-1w%2Fw"},{name:"This week so far",value:"from=now%2Fw&to=now"},{name:"Last 7 days",value:"from=now-7d&to=now"},{name:"Previous month",value:"from=now-1M%2FM&to=now-1M%2FM"},{name:"This month so far",value:"from=now%2FM&to=now"},{name:"Last 30 days",value:"from=now-30d&to=now"},{name:"Last 90 days",value:"from=now-90d&to=now"},{name:"Last 6 months",value:"from=now-6M&to=now"},{name:"Last 1 year",value:"from=now-1y&to=now"},{name:"Previous year",value:"from=now-1y%2Fy&to=now-1y%2Fy"},{name:"This year so far",value:"from=now%2Fy&to=now"},{name:"Last 2 years",value:"from=now-2y&to=now"},{name:"Last 5 years",value:"from=now-5y&to=now"}]}ngOnInit(){this.time=this.DEFAULT_TIME,this.styles={one:"grafana_one",two:"grafana_two",three:"grafana_three",four:"grafana_four"},this.datasource="metrics"===this.type?"Dashboard1":"Loki",this.settingsService.ifSettingConfigured("api/grafana/url",Te=>{this.grafanaExist=!0,this.loading=!1,this.baseUrl=Te+"/d/",this.getFrame()}),this.panelStyle=this.styles[this.grafanaStyle]}getFrame(){this.settingsService.validateGrafanaDashboardUrl(this.uid).subscribe(Te=>this.dashboardExist=200===Te),this.url="metrics"===this.type?`${this.baseUrl}${this.uid}/${this.grafanaPath}&refresh=2s&var-datasource=${this.datasource}${this.mode}&${this.time}`:`${this.baseUrl.slice(0,-2)}${this.grafanaPath}orgId=1&left=["now-1h","now","${this.datasource}",{"refId":"A"}]${this.mode}`,this.grafanaSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.url)}onTimepickerChange(){this.grafanaExist&&this.getFrame()}reset(){this.time=this.DEFAULT_TIME,this.grafanaExist&&this.getFrame()}ngOnChanges(){this.grafanaExist&&this.getFrame()}}return se.\u0275fac=function(Te){return new(Te||se)(c.Y36(u.H7),c.Y36(r.g))},se.\u0275cmp=c.Xpm({type:se,selectors:[["cd-grafana"]],inputs:{type:"type",grafanaPath:"grafanaPath",grafanaStyle:"grafanaStyle",uid:"uid",title:"title"},features:[c.TTD],decls:4,vars:4,consts:function(){let fe,Te,$e,ge,Et,ot,ct;return fe="Loading panel data...",Te="Please consult the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " on how to configure and enable the monitoring functionality.",$e="Grafana Dashboard doesn't exist. Please refer to " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " on how to add dashboards to Grafana.",ge="Grafana Time Picker",Et="Reset Settings",ot="Show hidden information",ct="If no embedded Grafana Dashboard appeared below, please follow " + "\ufffd#2\ufffd" + "this link " + "\ufffd/#2\ufffd" + " to check if Grafana is reachable and there are no HTTPS certificate issues. You may need to reload this page after accepting any Browser certificate exceptions",[[4,"ngIf"],["type","info",4,"ngIf"],fe,["type","info"],Te,["section","grafana"],$e,[1,"row","mb-3"],[1,"col-lg-5","d-flex"],[1,"col-md-3","timepicker"],["for","timepicker",1,"mt-2"],ge,[1,"col-sm-4"],["id","timepicker","name","timepicker",1,"form-select",3,"ngModel","ngModelChange"],[3,"ngValue",4,"ngFor","ngForOf"],[1,"col-sm-1"],["title",Et,1,"btn","btn-light","ms-3",3,"click"],[3,"ngClass"],["title",ot,1,"btn","btn-light","ms-3",3,"click"],[1,"row"],["class","col my-2",4,"ngIf"],[1,"col"],[1,"grafana-container"],["id","iframe","frameborder","0","scrolling","no",1,"grafana",3,"src","ngClass","title"],["iframe",""],[3,"ngValue"],[1,"col","my-2"],["type","info","class","mb-3","dismissible","true",3,"dismissed",4,"ngIf"],["type","info","dismissible","true",1,"mb-3",3,"dismissed"],ct,["target","_blank","noopener","","noreferrer","",3,"href"]]},template:function(Te,$e){1&Te&&(c.YNc(0,D,2,0,"cd-loading-panel",0),c.YNc(1,U,3,0,"cd-alert-panel",1),c.YNc(2,W,3,0,"cd-alert-panel",1),c.YNc(3,V,22,13,"ng-container",0)),2&Te&&(c.Q6J("ngIf",$e.loading&&$e.grafanaExist),c.xp6(1),c.Q6J("ngIf",!$e.grafanaExist),c.xp6(1),c.Q6J("ngIf",!$e.dashboardExist),c.xp6(1),c.Q6J("ngIf",$e.grafanaExist&&$e.dashboardExist))},dependencies:[e.mk,e.sg,e.O5,f.YN,f.Kr,f.EJ,f.JJ,f.On,m.o,T.b,M.G,w.K],styles:[".grafana[_ngcontent-%COMP%]{height:600px;width:100%;z-index:0}.grafana_one[_ngcontent-%COMP%]{height:400px}.grafana_two[_ngcontent-%COMP%]{height:750px}.grafana_three[_ngcontent-%COMP%]{height:900px}.grafana_four[_ngcontent-%COMP%]{height:1160px}.timepicker[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{font-weight:700}.dropdown-menu[_ngcontent-%COMP%]{left:auto;right:20px;top:20px}"]}),se})()},18372:(E,C,s)=>{"use strict";s.d(C,{S:()=>T});var r=s(65862),a=s(64537),c=s(88692),u=s(51389);function e(M,w){if(1&M&&(a._UZ(0,"div",2),a.Hsn(1)),2&M){const D=a.oxw();a.Tol(D.class),a.Q6J("innerHtml",D.html,a.oJD)}}const f=function(M){return[M]},m=["*"];let T=(()=>{class M{constructor(){this.iconClass="",this.icons=r.P}}return M.\u0275fac=function(D){return new(D||M)},M.\u0275cmp=a.Xpm({type:M,selectors:[["cd-helper"]],inputs:{class:"class",iconClass:"iconClass",html:"html"},ngContentSelectors:m,decls:3,vars:4,consts:[["popoverTpl",""],["aria-hidden","true",3,"ngClass","ngbPopover","click"],[3,"innerHtml"]],template:function(D,U){if(1&D&&(a.F$t(),a.YNc(0,e,2,3,"ng-template",null,0,a.W1O),a.TgZ(2,"i",1),a.NdJ("click",function($){return $.preventDefault()}),a.qZA()),2&D){const W=a.MAs(1);a.xp6(2),a.Q6J("ngClass",U.iconClass?U.iconClass:a.VKq(2,f,U.icons.questionCircle))("ngbPopover",W)}},dependencies:[c.mk,u.o8],styles:["i[_ngcontent-%COMP%]{color:#25828e;cursor:pointer;padding-left:4px}"]}),M})()},8958:(E,C,s)=>{"use strict";s.d(C,{b:()=>m});var r=s(65862),a=s(64537),c=s(88692),u=s(51389);const e=function(T,M){return[T,M]},f=["*"];let m=(()=>{class T{constructor(){this.icons=r.P}}return T.\u0275fac=function(w){return new(w||T)},T.\u0275cmp=a.Xpm({type:T,selectors:[["cd-loading-panel"]],ngContentSelectors:f,decls:4,vars:5,consts:[["type","info",3,"dismissible"],["aria-hidden","true",1,"me-2",3,"ngClass"]],template:function(w,D){1&w&&(a.F$t(),a.TgZ(0,"ngb-alert",0)(1,"strong"),a._UZ(2,"i",1),a.qZA(),a.Hsn(3),a.qZA()),2&w&&(a.Q6J("dismissible",!1),a.xp6(2),a.Q6J("ngClass",a.WLB(2,e,D.icons.spinner,D.icons.spin)))},dependencies:[c.mk,u.xm]}),T})()},60312:(E,C,s)=>{"use strict";s.d(C,{z:()=>m});var r=s(64537),a=s(54247),c=s(88692),u=s(87925);const e=[[["",8,"modal-title"]],[["",8,"modal-content"]]],f=[".modal-title",".modal-content"];let m=(()=>{class T{constructor(w){this.router=w,this.hide=new r.vpe}close(){this.pageURL?this.router.navigate([this.pageURL,{outlets:{modal:null}}]):this.modalRef?.close(),this.hide.emit()}}return T.\u0275fac=function(w){return new(w||T)(r.Y36(a.F0))},T.\u0275cmp=r.Xpm({type:T,selectors:[["cd-modal"]],inputs:{modalRef:"modalRef",pageURL:"pageURL"},outputs:{hide:"hide"},ngContentSelectors:f,decls:8,vars:2,consts:[[3,"ngClass"],[1,"modal-content"],[1,"modal-header"],[1,"modal-title","float-start"],["type","button","aria-label","Close",1,"btn-close","float-end",3,"click"]],template:function(w,D){1&w&&(r.F$t(e),r.TgZ(0,"div",0)(1,"div",0)(2,"div",1)(3,"div",2)(4,"h4",3),r.Hsn(5),r.qZA(),r.TgZ(6,"button",4),r.NdJ("click",function(){return D.close()}),r.qZA()(),r.Hsn(7,1),r.qZA()()()),2&w&&(r.Q6J("ngClass",D.pageURL?"modal":""),r.xp6(1),r.Q6J("ngClass",D.pageURL?"modal-dialog":""))},dependencies:[c.mk,u.o],styles:[".modal-header[_ngcontent-%COMP%]{background-color:#e9ecef;border-bottom:1px solid #ced4da;border-radius:5px 5px 0 0}  cd-modal .modal-footer{background-color:#e9ecef;border-bottom:1px solid #ced4da;border-radius:0 0 5px 5px}  cd-modal .modal-body{max-height:70vh;overflow-x:hidden;overflow-y:auto}button.close[_ngcontent-%COMP%]{outline:none}"]}),T})()},60192:(E,C,s)=>{"use strict";s.d(C,{m:()=>M});var r=s(64537),a=s(65862),c=s(7022),u=s(39092),e=s(88692);const f=["cdSelect"],m=function(w){return[w]};function T(w,D){if(1&w){const U=r.EpF();r.TgZ(0,"span")(1,"span",4)(2,"span",5),r._uU(3),r.qZA(),r.TgZ(4,"a",6),r.NdJ("click",function(){const J=r.CHM(U).$implicit;r.oxw();const F=r.MAs(1);return r.KtG(F.removeItem(J))}),r._UZ(5,"i",7),r.qZA()()()}if(2&w){const U=D.$implicit,W=r.oxw();r.xp6(3),r.Oqu(U),r.xp6(2),r.Q6J("ngClass",r.VKq(2,m,W.icons.destroy))}}let M=(()=>{class w{constructor(){this.data=[],this.options=[],this.messages=new c.a({}),this.customBadges=!1,this.customBadgeValidators=[],this.selection=new r.vpe,this.icons=a.P}}return w.\u0275fac=function(U){return new(U||w)},w.\u0275cmp=r.Xpm({type:w,selectors:[["cd-select-badges"]],viewQuery:function(U,W){if(1&U&&r.Gf(f,7),2&U){let $;r.iGM($=r.CRH())&&(W.cdSelect=$.first)}},inputs:{data:"data",options:"options",messages:"messages",selectionLimit:"selectionLimit",customBadges:"customBadges",customBadgeValidators:"customBadgeValidators"},outputs:{selection:"selection"},decls:4,vars:10,consts:[["elemClass","me-2 select-menu-edit",3,"data","options","messages","selectionLimit","customBadges","customBadgeValidators","selection"],["cdSelect",""],[3,"ngClass"],[4,"ngFor","ngForOf"],[1,"badge","badge-dark","me-2"],[1,"me-2"],[1,"badge-remove",3,"click"],["aria-hidden","true",3,"ngClass"]],template:function(U,W){1&U&&(r.TgZ(0,"cd-select",0,1),r.NdJ("selection",function(J){return W.selection.emit(J)}),r._UZ(2,"i",2),r.qZA(),r.YNc(3,T,6,4,"span",3)),2&U&&(r.Q6J("data",W.data)("options",W.options)("messages",W.messages)("selectionLimit",W.selectionLimit)("customBadges",W.customBadges)("customBadgeValidators",W.customBadgeValidators),r.xp6(2),r.Q6J("ngClass",r.VKq(8,m,W.icons.edit)),r.xp6(1),r.Q6J("ngForOf",W.data))},dependencies:[e.mk,e.sg,u.H],styles:[".badge-remove[_ngcontent-%COMP%]{color:#fff}i.fa-pencil[_ngcontent-%COMP%]{font-size:1.1rem}"]}),w})()},7022:(E,C,s)=>{"use strict";s.d(C,{a:()=>c});var r=s(23815),a=s.n(r);class c{constructor(e){this.customValidations={},this.empty="No items selected.",this.selectionLimit={tooltip:"Deselect item to select again",text:"Selection limit reached"},this.filter="Filter tags",this.add="Add badge",this.noOptions="There are no items available.",a().merge(this,e)}}},14745:(E,C,s)=>{"use strict";s.d(C,{$:()=>r});class r{constructor(c,u,e,f=!0){this.selected=c,this.name=u,this.description=e,this.enabled=f}}},39092:(E,C,s)=>{"use strict";s.d(C,{H:()=>qe});var r=s(64537),a=s(20092),c=s(23815),u=s.n(c),e=s(65862),f=s(95463),m=s(7022),T=s(14745),M=s(88692),w=s(51389),D=s(87925),U=s(94276),W=s(41582);function $(He,We){if(1&He&&(r.TgZ(0,"span",12),r._uU(1),r.qZA()),2&He){const Le=r.oxw().$implicit,Pt=r.oxw(2);r.xp6(1),r.hij(" ",Pt.messages.customValidations[Le]," ")}}function J(He,We){if(1&He&&(r.ynx(0),r.YNc(1,$,2,1,"span",11),r.BQk()),2&He){const Le=We.$implicit;r.oxw();const Pt=r.MAs(1),it=r.oxw();r.xp6(1),r.Q6J("ngIf",it.form.showError("filter",Pt)&&it.filter.hasError(Le))}}const F=function(He){return[He]};function X(He,We){if(1&He&&r._UZ(0,"i",18),2&He){const Le=r.oxw(3);r.Q6J("ngClass",r.VKq(1,F,Le.icons.check))}}function de(He,We){if(1&He&&(r.ynx(0),r._UZ(1,"br"),r.TgZ(2,"small",19),r._uU(3),r.qZA(),r.BQk()),2&He){const Le=r.oxw().$implicit;r.xp6(3),r.hij(" ",Le.description,"\xa0 ")}}const V=function(He){return{"help-block disabled":He}};function ce(He,We){if(1&He){const Le=r.EpF();r.TgZ(0,"div",13),r.NdJ("click",function(){const Xt=r.CHM(Le).$implicit,cn=r.oxw(2);return r.KtG(cn.triggerSelection(Xt))}),r.TgZ(1,"div",14),r.YNc(2,X,1,3,"i",15),r._uU(3," \xa0 "),r.qZA(),r.TgZ(4,"div",16),r._uU(5),r.YNc(6,de,4,1,"ng-container",17),r.qZA()()}if(2&He){const Le=We.$implicit,Pt=r.oxw(2);r.Q6J("ngClass",r.VKq(4,V,!(Pt.data.length!==Pt.selectionLimit&&Le.enabled||Le.selected))),r.xp6(2),r.Q6J("ngIf",Le.selected),r.xp6(3),r.hij(" ",Le.name," "),r.xp6(1),r.Q6J("ngIf",Le.description)}}function se(He,We){if(1&He){const Le=r.EpF();r.TgZ(0,"div",20),r.NdJ("click",function(){r.CHM(Le);const it=r.oxw(2);return r.KtG(it.addCustomOption())}),r.TgZ(1,"div",14),r._UZ(2,"i",18),r._uU(3," \xa0 "),r.qZA(),r.TgZ(4,"div",16),r._uU(5),r.qZA()()}if(2&He){const Le=r.oxw(2);r.xp6(2),r.Q6J("ngClass",r.VKq(3,F,Le.icons.tag)),r.xp6(3),r.AsE(" ",Le.messages.add," '",Le.filter.value,"' ")}}function fe(He,We){if(1&He&&(r.TgZ(0,"span",23),r._uU(1),r.qZA()),2&He){const Le=r.oxw(3);r.Q6J("ngbTooltip",Le.messages.selectionLimit.tooltip),r.xp6(1),r.hij(" ",Le.messages.selectionLimit.text," ")}}function Te(He,We){if(1&He&&(r.TgZ(0,"div",21),r.YNc(1,fe,2,2,"span",22),r.qZA()),2&He){const Le=r.oxw(2);r.xp6(1),r.Q6J("ngIf",Le.data.length===Le.selectionLimit)}}function $e(He,We){if(1&He){const Le=r.EpF();r.TgZ(0,"form",4,5)(2,"div")(3,"input",6),r.NdJ("keyup",function(it){r.CHM(Le);const Xt=r.oxw();return r.KtG(13===it.keyCode?Xt.selectOption():Xt.updateFilter())}),r.qZA(),r.YNc(4,J,2,1,"ng-container",7),r.qZA()(),r.YNc(5,ce,7,6,"div",8),r.YNc(6,se,6,5,"div",9),r.YNc(7,Te,2,1,"div",10)}if(2&He){const Le=r.oxw();r.Q6J("formGroup",Le.form),r.xp6(3),r.Q6J("placeholder",Le.messages.filter),r.xp6(1),r.Q6J("ngForOf",Le.Object.keys(Le.messages.customValidations)),r.xp6(1),r.Q6J("ngForOf",Le.filteredOptions),r.xp6(1),r.Q6J("ngIf",Le.isCreatable()),r.xp6(1),r.Q6J("ngIf",Le.data.length===Le.selectionLimit)}}function ge(He,We){if(1&He&&(r.TgZ(0,"a",24),r.Hsn(1),r.qZA()),2&He){const Le=r.oxw(),Pt=r.MAs(1);r.Q6J("ngClass",Le.elemClass)("ngbPopover",Pt)}}function Et(He,We){if(1&He&&(r.TgZ(0,"span",25),r._uU(1),r.qZA()),2&He){const Le=r.oxw();r.xp6(1),r.hij(" ",Le.messages.empty,"\n")}}function ot(He,We){if(1&He&&(r.TgZ(0,"span",25),r._uU(1),r.qZA()),2&He){const Le=r.oxw();r.xp6(1),r.hij(" ",Le.messages.noOptions,"\n")}}const ct=["*"];let qe=(()=>{class He{constructor(){this.data=[],this.options=[],this.messages=new m.a({}),this.customBadges=!1,this.customBadgeValidators=[],this.selection=new r.vpe,this.Object=Object,this.filteredOptions=[],this.icons=e.P}ngOnInit(){this.initFilter(),this.data.length>0&&this.initMissingOptions(),this.options=u().sortBy(this.options,["name"]),this.updateOptions()}initFilter(){this.filter=new a.p4("",{validators:this.customBadgeValidators}),this.form=new f.d({filter:this.filter}),this.filteredOptions=[...this.options||[]]}initMissingOptions(){const Le=this.options.map(it=>it.name);this.data.filter(it=>-1===Le.indexOf(it)).forEach(it=>this.addOption(it)),this.forceOptionsToReflectData()}addOption(Le){this.options.push(new T.$(!1,Le,"")),this.options=u().sortBy(this.options,["name"]),this.triggerSelection(this.options.find(Pt=>Pt.name===Le))}triggerSelection(Le){!Le||this.selectionLimit&&!Le.selected&&this.data.length>=this.selectionLimit||(Le.selected=!Le.selected,this.updateOptions(),this.selection.emit({option:Le}))}updateOptions(){this.data.splice(0,this.data.length),this.options.forEach(Le=>{Le.selected&&this.data.push(Le.name)}),this.updateFilter()}updateFilter(){this.filteredOptions=this.options.filter(Le=>Le.name.includes(this.filter.value))}forceOptionsToReflectData(){this.options.forEach(Le=>{-1!==this.data.indexOf(Le.name)&&(Le.selected=!0)})}ngOnChanges(){this.filter&&this.updateFilter(),this.options&&this.data&&0!==this.data.length&&this.forceOptionsToReflectData()}selectOption(){0===this.filteredOptions.length?this.addCustomOption():(this.triggerSelection(this.filteredOptions[0]),this.resetFilter())}addCustomOption(){this.isCreatable()&&(this.addOption(this.filter.value),this.resetFilter())}isCreatable(){return this.customBadges&&this.filter.valid&&this.filter.value.length>0&&this.filteredOptions.every(Le=>Le.name!==this.filter.value)}resetFilter(){this.filter.setValue(""),this.updateFilter()}removeItem(Le){this.triggerSelection(this.options.find(Pt=>Pt.name===Le&&Pt.selected))}}return He.\u0275fac=function(Le){return new(Le||He)},He.\u0275cmp=r.Xpm({type:He,selectors:[["cd-select"]],inputs:{elemClass:"elemClass",data:"data",options:"options",messages:"messages",selectionLimit:"selectionLimit",customBadges:"customBadges",customBadgeValidators:"customBadgeValidators"},outputs:{selection:"selection"},features:[r.TTD],ngContentSelectors:ct,decls:5,vars:3,consts:[["popTemplate",""],["class","select-menu-edit float-start","data-testid","select-menu-edit",3,"ngClass","ngbPopover",4,"ngIf"],["class","form-text text-muted float-start",4,"ngIf"],["class","form-text text-muted  float-start",4,"ngIf"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],["type","text","formControlName","filter",1,"form-control","text-center",3,"placeholder","keyup"],[4,"ngFor","ngForOf"],["class","select-menu-item",3,"ngClass","click",4,"ngFor","ngForOf"],["class","select-menu-item",3,"click",4,"ngIf"],["class","is-invalid",4,"ngIf"],["class","invalid-feedback text-center d-block",4,"ngIf"],[1,"invalid-feedback","text-center","d-block"],[1,"select-menu-item",3,"ngClass","click"],[1,"select-menu-item-icon"],["aria-hidden","true",3,"ngClass",4,"ngIf"],[1,"select-menu-item-content"],[4,"ngIf"],["aria-hidden","true",3,"ngClass"],[1,"form-text","text-muted"],[1,"select-menu-item",3,"click"],[1,"is-invalid"],["class","form-text text-muted text-center text-warning",3,"ngbTooltip",4,"ngIf"],[1,"form-text","text-muted","text-center","text-warning",3,"ngbTooltip"],["data-testid","select-menu-edit",1,"select-menu-edit","float-start",3,"ngClass","ngbPopover"],[1,"form-text","text-muted","float-start"]],template:function(Le,Pt){1&Le&&(r.F$t(),r.YNc(0,$e,8,6,"ng-template",null,0,r.W1O),r.YNc(2,ge,2,2,"a",1),r.YNc(3,Et,2,1,"span",2),r.YNc(4,ot,2,1,"span",3)),2&Le&&(r.xp6(2),r.Q6J("ngIf",Pt.customBadges||Pt.options.length>0),r.xp6(1),r.Q6J("ngIf",0===Pt.data.length&&!(!Pt.customBadges&&0===Pt.options.length)),r.xp6(1),r.Q6J("ngIf",!Pt.customBadges&&0===Pt.options.length))},dependencies:[M.mk,M.sg,M.O5,a._Y,a.Fj,a.JJ,a.JL,a.sg,a.u,w.o8,w._L,D.o,U.b,W.V],styles:[".select-menu-item[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.09);cursor:pointer;display:block;font-size:1rem}.select-menu-item[_ngcontent-%COMP%]:hover{background-color:#e9ecef}.select-menu-item-icon[_ngcontent-%COMP%]{float:left;padding:.5em;width:3em}.select-menu-item-content[_ngcontent-%COMP%]{padding:.5em}.select-menu-item-content[_ngcontent-%COMP%]   .form-text[_ngcontent-%COMP%]{display:flex}"]}),He})()},76446:(E,C,s)=>{"use strict";s.d(C,{l:()=>T});var r=s(87311),a=s(47557),c=s(64537),u=s(88692),e=s(72621);const f=["sparkCanvas"],m=["sparkTooltip"];let T=(()=>{class M{constructor(D){this.dimlessBinaryPipe=D,this.style={height:"30px",width:"100px"},this.colors=[{backgroundColor:"rgba(40,140,234,0.2)",borderColor:"rgba(40,140,234,1)",pointBackgroundColor:"rgba(40,140,234,1)",pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:"rgba(40,140,234,0.8)"}],this.options={animation:{duration:0},responsive:!0,maintainAspectRatio:!1,legend:{display:!1},elements:{line:{borderWidth:1}},tooltips:{enabled:!1,mode:"index",intersect:!1,custom:void 0,callbacks:{label:U=>this.isBinary?this.dimlessBinaryPipe.transform(U.yLabel):U.yLabel,title:()=>""}},scales:{yAxes:[{display:!1}],xAxes:[{display:!1}]}},this.datasets=[{data:[]}],this.labels=[]}ngOnInit(){const W=new r.h(this.chartCanvasRef,this.chartTooltipRef,($,J)=>J+$.caretX+"px",$=>$.caretY-$.height-$.yPadding-5+"px");W.customColors={backgroundColor:this.colors[0].pointBackgroundColor,borderColor:this.colors[0].pointBorderColor},this.options.tooltips.custom=$=>{W.customTooltips($)}}ngOnChanges(D){this.datasets[0].data=D.data.currentValue,this.labels=[...Array(D.data.currentValue.length)]}}return M.\u0275fac=function(D){return new(D||M)(c.Y36(a.$))},M.\u0275cmp=c.Xpm({type:M,selectors:[["cd-sparkline"]],viewQuery:function(D,U){if(1&D&&(c.Gf(f,7),c.Gf(m,7)),2&D){let W;c.iGM(W=c.CRH())&&(U.chartCanvasRef=W.first),c.iGM(W=c.CRH())&&(U.chartTooltipRef=W.first)}},inputs:{data:"data",style:"style",isBinary:"isBinary"},features:[c.TTD],decls:6,vars:6,consts:[[1,"chart-container",3,"ngStyle"],["baseChart","",3,"labels","datasets","options","colors","chartType"],["sparkCanvas",""],[1,"chartjs-tooltip"],["sparkTooltip",""]],template:function(D,U){1&D&&(c.TgZ(0,"div",0),c._UZ(1,"canvas",1,2),c.TgZ(3,"div",3,4),c._UZ(5,"table"),c.qZA()()),2&D&&(c.Q6J("ngStyle",U.style),c.xp6(1),c.Q6J("labels",U.labels)("datasets",U.datasets)("options",U.options)("colors",U.colors)("chartType","line"))},dependencies:[u.PC,e.jh],styles:['.chart-container[_ngcontent-%COMP%]{cursor:pointer;margin:auto;overflow:visible;position:absolute}canvas[_ngcontent-%COMP%]{user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important;opacity:0;pointer-events:none;position:absolute;transform:translate(-50%);transition:all .1s ease}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]:after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]:after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]:after{border-color:#000 transparent transparent transparent;border-style:solid;border-width:5px;content:" ";left:50%;margin-left:-5px;position:absolute;top:100%}  .chartjs-tooltip-key{display:inline-block;height:10px;margin-right:10px;width:10px}.chart-container[_ngcontent-%COMP%]{position:static!important}']}),M})()},39749:(E,C,s)=>{"use strict";s.d(C,{w:()=>D});var r=s(64537),a=s(20092),c=s(23815),u=s.n(c),e=s(65862),f=s(88692),m=s(87925);const T=function(U,W){return[U,W]};function M(U,W){if(1&U&&(r.TgZ(0,"span"),r._UZ(1,"i",2),r.qZA()),2&U){const $=r.oxw();r.xp6(1),r.Q6J("ngClass",r.WLB(1,T,$.icons.spinner,$.icons.spin))}}const w=["*"];let D=(()=>{class U{constructor($){this.elRef=$,this.type="submit",this.disabled=!1,this.submitAction=new r.vpe,this.loading=!1,this.icons=e.P}ngOnInit(){this.form?.statusChanges.subscribe(()=>{u().has(this.form.errors,"cdSubmitButton")&&(this.loading=!1,u().unset(this.form.errors,"cdSubmitButton"),this.form instanceof a.TO&&this.form.updateValueAndValidity())})}submit($){this.focusButton(),this.form instanceof a.sg&&this.form.onSubmit($),this.form?.invalid?this.focusInvalid():(this.loading=!0,this.submitAction.emit())}focusButton(){this.elRef.nativeElement.offsetParent.querySelector(`button[type="${this.type}"]`).focus()}focusInvalid(){const $=this.elRef.nativeElement.offsetParent.querySelector("input.ng-invalid, select.ng-invalid");$&&$.focus()}}return U.\u0275fac=function($){return new($||U)(r.Y36(r.SBq))},U.\u0275cmp=r.Xpm({type:U,selectors:[["cd-submit-button"]],inputs:{form:"form",type:"type",disabled:"disabled",btnClass:"btnClass",ariaLabel:"ariaLabel"},outputs:{submitAction:"submitAction"},ngContentSelectors:w,decls:3,vars:5,consts:[[1,"btn","btn-accent","tc_submitButton",3,"type","ngClass","disabled","click"],[4,"ngIf"],[3,"ngClass"]],template:function($,J){1&$&&(r.F$t(),r.TgZ(0,"button",0),r.NdJ("click",function(X){return J.submit(X)}),r.Hsn(1),r.YNc(2,M,2,4,"span",1),r.qZA()),2&$&&(r.Q6J("type",J.type)("ngClass",J.btnClass)("disabled",J.loading||J.disabled),r.uIk("aria-label",J.ariaLabel),r.xp6(2),r.Q6J("ngIf",J.loading))},dependencies:[f.mk,f.O5,m.o]}),U})()},60251:(E,C,s)=>{"use strict";s.d(C,{O:()=>$});var r=s(64537),a=s(88692),c=s(51389),u=s(47557),e=s(66369);function f(J,F){if(1&J&&(r.TgZ(0,"tr")(1,"td",5),r._uU(2,"Free:"),r.qZA(),r.TgZ(3,"td",7)(4,"strong"),r._uU(5),r.ALo(6,"dimlessBinary"),r.ALo(7,"dimless"),r.qZA()()()),2&J){const X=r.oxw(3);r.xp6(5),r.Oqu(X.isBinary?r.lcZ(6,1,X.total-X.used):r.lcZ(7,3,X.total-X.used))}}function m(J,F){if(1&J&&(r.TgZ(0,"tr")(1,"td",5),r._uU(2),r.qZA(),r.TgZ(3,"td",6)(4,"strong"),r._uU(5),r.ALo(6,"dimlessBinary"),r.ALo(7,"dimless"),r.qZA()()()),2&J){const X=r.oxw(3);r.xp6(2),r.hij("",X.customLegend,":"),r.xp6(3),r.Oqu(X.isBinary?r.lcZ(6,2,X.customLegendValue):r.lcZ(7,4,X.customLegend[1]))}}function T(J,F){if(1&J&&(r.TgZ(0,"table")(1,"tr")(2,"td",5),r._uU(3,"Used:"),r.qZA(),r.TgZ(4,"td",6)(5,"strong"),r._uU(6),r.ALo(7,"dimlessBinary"),r.ALo(8,"dimless"),r.qZA()()(),r.YNc(9,f,8,5,"tr",4),r.YNc(10,m,8,6,"tr",4),r.qZA()),2&J){const X=r.oxw(2);r.xp6(6),r.hij(" ",X.isBinary?r.lcZ(7,3,X.used):r.lcZ(8,5,X.used),""),r.xp6(3),r.Q6J("ngIf",X.calculatePerc&&X.showFreeToolTip),r.xp6(1),r.Q6J("ngIf",X.customLegend)}}function M(J,F){if(1&J&&(r.TgZ(0,"tr")(1,"td",8),r._uU(2,"Transferred Shards:\xa0"),r.qZA(),r.TgZ(3,"td",7)(4,"strong"),r._uU(5),r.qZA()()()),2&J){const X=r.oxw(3);r.xp6(5),r.Oqu(X.used)}}function w(J,F){if(1&J&&(r.TgZ(0,"table")(1,"tr")(2,"td",8),r._uU(3,"Total Shards:\xa0"),r.qZA(),r.TgZ(4,"td",6)(5,"strong"),r._uU(6),r.qZA()()(),r.YNc(7,M,6,1,"tr",4),r.qZA()),2&J){const X=r.oxw(2);r.xp6(6),r.hij(" ",X.total,""),r.xp6(1),r.Q6J("ngIf",X.calculatePerc)}}function D(J,F){if(1&J&&(r.YNc(0,T,11,7,"table",4),r.YNc(1,w,8,2,"table",4)),2&J){const X=r.oxw();r.Q6J("ngIf",!X.showMultisiteTooltip),r.xp6(1),r.Q6J("ngIf",X.showMultisiteTooltip)}}const U=function(J,F){return{"bg-warning":J,"bg-danger":F}},W=function(J){return{title:J}};let $=(()=>{class J{constructor(){this.isBinary=!0,this.decimals=0,this.calculatePerc=!0,this.title="usage",this.showFreeToolTip=!0,this.showMultisiteTooltip=!1}ngOnChanges(){this.calculatePerc?(this.usedPercentage=this.total>0?this.used/this.total*100:0,this.freePercentage=100-this.usedPercentage):this.used?(this.used=this.used.slice(0,-1),this.usedPercentage=Number(this.used),this.freePercentage=100-this.usedPercentage):this.usedPercentage=0}}return J.\u0275fac=function(X){return new(X||J)},J.\u0275cmp=r.Xpm({type:J,selectors:[["cd-usage-bar"]],inputs:{total:"total",used:"used",warningThreshold:"warningThreshold",errorThreshold:"errorThreshold",isBinary:"isBinary",decimals:"decimals",calculatePerc:"calculatePerc",title:"title",customLegend:"customLegend",customLegendValue:"customLegendValue",showFreeToolTip:"showFreeToolTip",showMultisiteTooltip:"showMultisiteTooltip"},features:[r.TTD],decls:8,vars:21,consts:[["usageTooltipTpl",""],["data-placement","left",1,"progress",3,"ngbTooltip"],["role","progressbar",1,"progress-bar","bg-info",3,"ngClass"],["role","progressbar",1,"progress-bar","bg-freespace"],[4,"ngIf"],[1,"text-left","me-1"],[1,"text-right"],[1,"'text-right"],[1,"text-left"]],template:function(X,de){if(1&X&&(r.YNc(0,D,2,2,"ng-template",null,0,r.W1O),r.TgZ(2,"div",1)(3,"div",2)(4,"span"),r._uU(5),r.ALo(6,"number"),r.qZA()(),r._UZ(7,"div",3),r.qZA()),2&X){const V=r.MAs(1);r.xp6(2),r.Q6J("ngbTooltip",V),r.xp6(1),r.Udp("width",de.usedPercentage+"%"),r.Q6J("ngClass",r.WLB(14,U,de.usedPercentage/100>=de.warningThreshold,de.usedPercentage/100>=de.errorThreshold)),r.uIk("aria-label",r.VKq(17,W,de.title)),r.xp6(1),r.Udp("color",de.usedPercentage<60?"black":"white"),r.xp6(1),r.hij("",r.xi3(6,11,de.usedPercentage,"1.0-"+de.decimals),"%"),r.xp6(2),r.Udp("width",de.freePercentage+"%"),r.uIk("aria-label",r.VKq(19,W,de.title))}},dependencies:[a.mk,a.O5,c._L,a.JJ,u.$,e.n],styles:[".bg-info[_ngcontent-%COMP%]{background-color:#25828e!important}.bg-warning[_ngcontent-%COMP%]{background-color:#d48200!important}.bg-danger[_ngcontent-%COMP%]{background-color:#dc3545!important}.bg-freespace[_ngcontent-%COMP%]{background-color:#ced4da!important}.progress[_ngcontent-%COMP%]{height:20px;margin-bottom:0;position:relative}.progress[_ngcontent-%COMP%]   div.progress-bar[_ngcontent-%COMP%]{position:static}.progress[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{color:#fff;display:block;font-weight:400;position:absolute;width:100%}"]}),J})()},79512:(E,C,s)=>{"use strict";s.d(C,{$x:()=>c,MQ:()=>u,Qn:()=>e,aX:()=>m,eu:()=>T,p4:()=>f});var r=s(92340),a=s(64537);class c{}c.organization="ceph",c.projectName="Ceph Dashboard",c.license="Free software (LGPL 2.1).",c.copyright="Copyright(c) "+r.N.year+" Ceph contributors.",c.cephLogo="assets/Ceph_Logo.svg";var u=(()=>{return(M=u||(u={})).CREATE="create",M.EDIT="edit",M.UPDATE="update",M.REMOVE="remove",M.DELETE="delete",M.ADD="add",M.COPY="copy",M.CLONE="clone",M.RECREATE="recreate",M.EXPIRE="expire",M.RESTART="Restart",u;var M})(),e=(()=>{return(M=e||(e={})).CREATE="Create",M.DELETE="Delete",M.ADD="Add",M.REMOVE="Remove",M.EDIT="Edit",M.CANCEL="Cancel",M.COPY="Copy",M.CLONE="Clone",M.UPDATE="Update",M.EVICT="Evict",M.SHOW="Show",M.RECREATE="Recreate",M.EXPIRE="Expire",M.START="Start",M.STOP="Stop",M.REDEPLOY="Redeploy",M.RESTART="Restart",e;var M})();let f=(()=>{class M{constructor(){this.CREATE="Create",this.EXPORT="Export",this.IMPORT="Import",this.MIGRATE="Migrate to Multi-Site",this.DELETE="Delete",this.ADD="Add",this.SET="Set",this.SUBMIT="Submit",this.REMOVE="Remove",this.UNSET="Unset",this.EDIT="Edit",this.UPDATE="Update",this.CANCEL="Cancel",this.PREVIEW="Preview",this.MOVE="Move",this.NEXT="Next",this.BACK="Back",this.CLONE="Clone",this.COPY="Copy",this.DEEP_SCRUB="Deep Scrub",this.DESTROY="Destroy",this.EVICT="Evict",this.FLATTEN="Flatten",this.MARK_DOWN="Mark Down",this.MARK_IN="Mark In",this.MARK_LOST="Mark Lost",this.MARK_OUT="Mark Out",this.PROTECT="Protect",this.PURGE="Purge",this.RENAME="Rename",this.RESTORE="Restore",this.REWEIGHT="Reweight",this.ROLLBACK="Rollback",this.SCRUB="Scrub",this.SHOW="Show",this.TRASH="Move to Trash",this.UNPROTECT="Unprotect",this.CHANGE="Change",this.FLAGS="Flags",this.ENTER_MAINTENANCE="Enter Maintenance",this.EXIT_MAINTENANCE="Exit Maintenance",this.START_DRAIN="Start Drain",this.STOP_DRAIN="Stop Drain",this.RESYNC="Resync",this.RECREATE="Recreate",this.EXPIRE="Expire",this.START="Start",this.STOP="Stop",this.REDEPLOY="Redeploy",this.RESTART="Restart",this.REMOVE_SCHEDULING="Remove Scheduling",this.PROMOTE="Promote",this.DEMOTE="Demote",this.START_UPGRADE="Start Upgrade"}}return M.\u0275fac=function(D){return new(D||M)},M.\u0275prov=a.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})(),m=(()=>{class M{constructor(){this.CREATED="Created",this.DELETED="Deleted",this.ADDED="Added",this.REMOVED="Removed",this.EDITED="Edited",this.CANCELED="Canceled",this.PREVIEWED="Previewed",this.MOVED="Moved",this.CLONED="Cloned",this.COPIED="Copied",this.DEEP_SCRUBBED="Deep Scrubbed",this.DESTROYED="Destroyed",this.FLATTENED="Flattened",this.MARKED_DOWN="Marked Down",this.MARKED_IN="Marked In",this.MARKED_LOST="Marked Lost",this.MARKED_OUT="Marked Out",this.PROTECTED="Protected",this.PURGED="Purged",this.RENAMED="Renamed",this.RESTORED="Restored",this.REWEIGHTED="Reweighted",this.ROLLED_BACK="Rolled back",this.SCRUBBED="Scrubbed",this.SHOWED="Showed",this.TRASHED="Moved to Trash",this.UNPROTECTED="Unprotected",this.CHANGE="Change",this.RECREATED="Recreated",this.EXPIRED="Expired",this.START="Start",this.STOP="Stop",this.REDEPLOY="Redeploy",this.RESTART="Restart"}}return M.\u0275fac=function(D){return new(D||M)},M.\u0275prov=a.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})(),T=(()=>{class M{constructor(){this.TIMER_SERVICE_PERIOD=5e3}}return M.\u0275fac=function(D){return new(D||M)},M.\u0275prov=a.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})()},54982:(E,C,s)=>{"use strict";s.d(C,{l:()=>D});var r=s(23815),a=s.n(r),c=s(64537),u=s(59019);const e=["headerPermissionCheckboxTpl"],f=["cellScopeCheckboxTpl"],m=["cellPermissionCheckboxTpl"];function T(U,W){if(1&U){const $=c.EpF();c.TgZ(0,"div",4)(1,"input",5),c.NdJ("change",function(F){const X=c.CHM($),de=X.row,V=X.column,ce=c.oxw();return c.KtG(ce.onClickCellCheckbox(de.scope,V.prop,F))}),c.qZA(),c.TgZ(2,"label",6),c._uU(3),c.qZA()()}if(2&U){const $=W.row,J=W.value,F=c.oxw();c.xp6(1),c.MGl("id","scope_",$.scope,""),c.Q6J("checked",F.isRowChecked($.scope))("disabled",F.isDisabled),c.xp6(1),c.MGl("for","scope_",$.scope,""),c.xp6(1),c.Oqu(J)}}function M(U,W){if(1&U){const $=c.EpF();c.TgZ(0,"div",4)(1,"input",7),c.NdJ("change",function(F){const X=c.CHM($),de=X.row,V=X.column,ce=c.oxw();return c.KtG(ce.onClickCellCheckbox(de.scope,V.prop,F))}),c.qZA(),c._UZ(2,"label",8),c.qZA()}if(2&U){const $=W.column,J=W.row,F=W.value,X=c.oxw();c.xp6(1),c.Q6J("checked",F)("disabled",X.isDisabled)("id",J.scope+"-"+$.prop),c.xp6(1),c.Q6J("for",J.scope+"-"+$.prop)}}function w(U,W){if(1&U){const $=c.EpF();c.TgZ(0,"div",4)(1,"input",9),c.NdJ("change",function(F){const de=c.CHM($).column,V=c.oxw();return c.KtG(V.onClickHeaderCheckbox(de.prop,F))}),c.qZA(),c.TgZ(2,"label",10),c._uU(3),c.qZA()()}if(2&U){const $=W.column,J=c.oxw();c.xp6(1),c.MGl("id","header_",$.prop,""),c.Q6J("disabled",J.isDisabled)("checked",J.isHeaderChecked($.prop)),c.xp6(1),c.MGl("for","header_",$.prop,""),c.xp6(1),c.Oqu($.name)}}let D=(()=>{class U{constructor(){this.scopes=[],this.isTableForOctalMode=!1,this.initialValue={},this.isDisabled=!1}ngOnInit(){this.columns.forEach($=>{"All"===$.name?($.cellTemplate=this.cellScopeCheckboxTpl,$.headerTemplate=this.headerPermissionCheckboxTpl):($.cellTemplate=this.cellPermissionCheckboxTpl,$.headerTemplate=this.headerPermissionCheckboxTpl)}),this.listenToChanges(),this.form.get(this.inputField).setValue(this.initialValue)}listenToChanges(){this.form.get(this.inputField).valueChanges.subscribe($=>{const J=[];a().each(this.scopes,F=>{const X={read:!1,write:!1,execute:!1};X.scope=F,F in $&&a().each($[F],de=>{X[de]=!0}),J.push(X)}),this.data=J})}isRowChecked($){const J=a().find(this.data,F=>F.scope===$);return!a().isUndefined(J)&&(this.isTableForOctalMode?J.read&&J.write&&J.execute:J.read&&J.create&&J.update&&J.delete)}isHeaderChecked($){let J=[$];return"scope"===$&&this.isTableForOctalMode?J=["read","write","execute"]:"scope"===$&&(J=["read","create","update","delete"]),J.every(F=>this.data.every(X=>X[F]))}onClickCellCheckbox($,J,F=null){const X=a().cloneDeep(this.form.getValue(this.inputField));let de=[J];"scope"===J&&this.isTableForOctalMode?de=["read","write","execute"]:"scope"===J&&(de=["read","create","update","delete"]),$ in X||(X[$]=[]),F&&F.target.checked||!a().isEqual(de.sort(),a().intersection(X[$],de).sort())?X[$]=a().union(X[$],de):(X[$]=a().difference(X[$],de),a().isEmpty(X[$])&&a().unset(X,$)),this.form.get(this.inputField).setValue(X)}onClickHeaderCheckbox($,J){const F=a().cloneDeep(this.form.getValue(this.inputField));let X=[$];"scope"===$&&this.isTableForOctalMode?X=["read","write","execute"]:"scope"===$&&(X=["read","create","update","delete"]),a().each(X,de=>{a().each(this.scopes,V=>{J.target.checked?F[V]=a().union(F[V],[de]):(F[V]=a().difference(F[V],[de]),a().isEmpty(F[V])&&a().unset(F,V))})}),this.form.get(this.inputField).setValue(F)}}return U.\u0275fac=function($){return new($||U)},U.\u0275cmp=c.Xpm({type:U,selectors:[["cd-checked-table-form"]],viewQuery:function($,J){if(1&$&&(c.Gf(e,7),c.Gf(f,7),c.Gf(m,7)),2&$){let F;c.iGM(F=c.CRH())&&(J.headerPermissionCheckboxTpl=F.first),c.iGM(F=c.CRH())&&(J.cellScopeCheckboxTpl=F.first),c.iGM(F=c.CRH())&&(J.cellPermissionCheckboxTpl=F.first)}},inputs:{data:"data",columns:"columns",form:"form",inputField:"inputField",scopes:"scopes",isTableForOctalMode:"isTableForOctalMode",initialValue:"initialValue",isDisabled:"isDisabled"},decls:7,vars:7,consts:[["columnMode","flex",3,"data","columns","toolHeader","autoReload","autoSave","footer","limit"],["cellScopeCheckboxTpl",""],["cellPermissionCheckboxTpl",""],["headerPermissionCheckboxTpl",""],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","checked","disabled","change"],[1,"datatable-permissions-scope-cell-label","custom-control-label",3,"for"],["type","checkbox",1,"custom-control-input",3,"checked","disabled","id","change"],[1,"custom-control-label",3,"for"],["type","checkbox",1,"custom-control-input",3,"id","disabled","checked","change"],[1,"datatable-permissions-header-cell-label","custom-control-label",3,"for"]],template:function($,J){1&$&&(c._UZ(0,"cd-table",0),c.YNc(1,T,4,5,"ng-template",null,1,c.W1O),c.YNc(3,M,3,4,"ng-template",null,2,c.W1O),c.YNc(5,w,4,5,"ng-template",null,3,c.W1O)),2&$&&c.Q6J("data",J.data)("columns",J.columns)("toolHeader",!1)("autoReload",!1)("autoSave",!1)("footer",!1)("limit",0)},dependencies:[u.a]}),U})()},4268:(E,C,s)=>{"use strict";s.d(C,{c:()=>cn});var r=s(61424),a=s(36169),c=s(68774),u=s(76111),e=s(32337),f=s(30982),m=s(64537),T=s(47640),M=s(36848),w=s(35732);let D=(()=>{class pn{constructor(At){this.http=At}export(At){return this.http.post("api/cluster/user/export",{entities:At})}}return pn.\u0275fac=function(At){return new(At||pn)(m.LFG(w.eN))},pn.\u0275prov=m.Yz7({token:pn,factory:pn.\u0275fac,providedIn:"root"}),pn})();var U=s(54247),W=s(63285),$=s(88692),J=s(58039),F=s(59019),X=s(94928),de=s(96102),V=s(94088);const ce=["badgeDictTpl"],se=["dateTpl"],fe=["durationTpl"],Te=["exportDataModalTpl"],$e=function(){return{exact:!0}};function ge(pn,Rn){if(1&pn&&(m.TgZ(0,"li",8)(1,"a",9),m.SDv(2,10),m.qZA()()),2&pn){const At=Rn.$implicit;m.xp6(1),m.Q6J("routerLink",At.url)("routerLinkActiveOptions",m.DdM(3,$e)),m.xp6(1),m.pQV(At.name),m.QtT(2)}}function Et(pn,Rn){if(1&pn&&(m.TgZ(0,"ul",6),m.YNc(1,ge,3,4,"li",7),m.qZA()),2&pn){const At=m.oxw();m.xp6(1),m.Q6J("ngForOf",At.tabs)}}function ot(pn,Rn){if(1&pn&&(m.TgZ(0,"tr")(1,"td",18),m.SDv(2,19),m.qZA(),m.TgZ(3,"td"),m._uU(4),m.qZA()()),2&pn){const At=Rn.$implicit,qt=m.oxw(3);m.xp6(2),m.pQV(At),m.QtT(2),m.xp6(2),m.hij(" ",qt.expandedRow[At]," ")}}function ct(pn,Rn){if(1&pn&&(m.ynx(0,15),m.TgZ(1,"table",16)(2,"tbody"),m.YNc(3,ot,5,2,"tr",17),m.qZA()(),m.BQk()),2&pn){const At=m.oxw(2);m.xp6(3),m.Q6J("ngForOf",At.meta.detail_columns)}}function qe(pn,Rn){if(1&pn){const At=m.EpF();m.ynx(0),m.TgZ(1,"cd-table",11),m.NdJ("setExpandedRow",function(sn){m.CHM(At);const fn=m.oxw();return m.KtG(fn.setExpandedRow(sn))})("updateSelection",function(sn){m.CHM(At);const fn=m.oxw();return m.KtG(fn.updateSelection(sn))}),m.ALo(2,"async"),m.TgZ(3,"div",12),m._UZ(4,"cd-table-actions",13),m.qZA(),m.YNc(5,ct,4,1,"ng-container",14),m.qZA(),m.BQk()}if(2&pn){const At=m.oxw();m.xp6(1),m.Q6J("data",m.lcZ(2,10,At.data$))("columns",At.meta.table.columns)("columnMode",At.meta.table.columnMode)("hasDetails",At.meta.detail_columns.length>0)("selectionType",At.meta.table.selectionType)("toolHeader",At.meta.table.toolHeader),m.xp6(3),m.Q6J("permission",At.permission)("selection",At.selection)("tableActions",At.meta.actions),m.xp6(1),m.Q6J("ngIf",At.expandedRow&&At.meta.detail_columns.length>0)}}function He(pn,Rn){1&pn&&(m.ynx(0),m._uU(1,"\xa0"),m.BQk())}function We(pn,Rn){if(1&pn&&(m.TgZ(0,"span")(1,"span",20),m._uU(2),m.qZA(),m.YNc(3,He,2,0,"ng-container",1),m.qZA()),2&pn){const At=Rn.$implicit,qt=Rn.last;m.xp6(2),m.AsE("",At.key,": ",At.value,""),m.xp6(1),m.Q6J("ngIf",!qt)}}function Le(pn,Rn){1&pn&&(m.YNc(0,We,4,3,"span",17),m.ALo(1,"keyvalue")),2&pn&&m.Q6J("ngForOf",m.lcZ(1,1,Rn.value))}function Pt(pn,Rn){if(1&pn&&(m.TgZ(0,"span"),m._uU(1),m.ALo(2,"cdDate"),m.qZA()),2&pn){const At=Rn.value;m.xp6(1),m.Oqu(m.lcZ(2,1,At))}}function it(pn,Rn){if(1&pn&&(m.TgZ(0,"span"),m._uU(1),m.ALo(2,"duration"),m.qZA()),2&pn){const At=Rn.value;m.xp6(1),m.Oqu(m.lcZ(2,1,At))}}function Xt(pn,Rn){if(1&pn&&(m.TgZ(0,"div",21)(1,"textarea",22),m._uU(2),m.qZA(),m._UZ(3,"cd-copy-2-clipboard-button",23),m.qZA()),2&pn){const At=m.oxw();m.xp6(2),m.Oqu(At.modalState.authExportData)}}let cn=(()=>{class pn{constructor(At,qt,sn,fn,xn,Kr,Or,Lr){this.authStorageService=At,this.timerService=qt,this.dataGatewayService=sn,this.taskWrapper=fn,this.cephUserService=xn,this.activatedRoute=Kr,this.modalService=Or,this.router=Lr,this.selection=new c.r,this.expandedRow=null,this.tabs={},this.modalState={},this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.activatedRoute.data.subscribe(At=>{const qt=At.resource;this.tabs=At.tabs,this.dataGatewayService.list(`ui-${qt}`).subscribe(sn=>this.processMeta(sn)),this.data$=this.timerService.get(()=>this.dataGatewayService.list(qt))}),this.activatedRoute.data.subscribe(At=>{this.resource=At.resource})}processMeta(At){var fn;this.permission=this.permissions[(fn=At.permissions[0],fn.split("-").reduce((xn,Kr,Or)=>0===Or?Kr.toLowerCase():`${xn}${Kr.charAt(0).toUpperCase()}${Kr.substr(1).toLowerCase()}`,""))];const sn={badgeDict:this.badgeDictTpl,date:this.dateTpl,duration:this.durationTpl};At.table.columns.forEach((fn,xn)=>{void 0!==fn.cellTemplate&&(At.table.columns[xn].cellTemplate=sn[fn.cellTemplate])}),At.table.columns=At.table.columns.filter(fn=>!fn.isHidden),this.meta=At;for(let fn=0;fn<this.meta.actions.length;fn++){let xn=this.meta.actions[fn];xn.disable&&(xn.disable=Kr=>!Kr.hasSelection),""!==xn.click.toString()&&(xn.click=this[this.meta.actions[fn].click.toString()].bind(this))}}delete(){const At=this.selection.first()[this.meta.columnKey];this.modalRef=this.modalService.show(f.M,{itemDescription:"" + this.meta.columnKey + "",itemNames:[At],submitAction:()=>{this.taskWrapper.wrapTaskAroundCall({task:new u.R("crud-component/id",At),call:this.dataGatewayService.delete(this.resource,At)}).subscribe({error:()=>{this.modalRef.close()},complete:()=>{this.modalRef.close()}})}})}updateSelection(At){this.selection=At}setExpandedRow(At){this.expandedRow=At}edit(){let At="";this.selection.hasSelection&&(At=this.selection.first()[this.meta.columnKey]),this.router.navigate(["/cluster/user/edit"],{queryParams:{key:At}})}authExport(){let At=[];this.selection.selected.forEach(qt=>At.push(qt.entity)),this.cephUserService.export(At).subscribe(qt=>{const sn={titleText:"Ceph user export data",buttonText:"Close",bodyTpl:this.authxEportTpl,showSubmit:!0,showCancel:!1,onSubmit:()=>{this.modalRef.close()}};this.modalState.authExportData=qt.trim(),this.modalRef=this.modalService.show(a.Y,sn)})}}return pn.\u0275fac=function(At){return new(At||pn)(m.Y36(T.j),m.Y36(M.f),m.Y36(r.n),m.Y36(e.P),m.Y36(D),m.Y36(U.gz),m.Y36(W.Z),m.Y36(U.F0))},pn.\u0275cmp=m.Xpm({type:pn,selectors:[["cd-crud-table"]],viewQuery:function(At,qt){if(1&At&&(m.Gf(ce,5),m.Gf(se,5),m.Gf(fe,5),m.Gf(Te,5)),2&At){let sn;m.iGM(sn=m.CRH())&&(qt.badgeDictTpl=sn.first),m.iGM(sn=m.CRH())&&(qt.dateTpl=sn.first),m.iGM(sn=m.CRH())&&(qt.durationTpl=sn.first),m.iGM(sn=m.CRH())&&(qt.authxEportTpl=sn.first)}},decls:10,vars:2,consts:function(){let Rn,At;return Rn="" + "\ufffd0\ufffd" + "",At="" + "\ufffd0\ufffd" + "",[["class","nav nav-tabs",4,"ngIf"],[4,"ngIf"],["badgeDictTpl",""],["dateTpl",""],["durationTpl",""],["exportDataModalTpl",""],[1,"nav","nav-tabs"],["class","nav-item",4,"ngFor","ngForKeyvalue","ngForOf"],[1,"nav-item"],["routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLink","routerLinkActiveOptions"],Rn,[3,"data","columns","columnMode","hasDetails","selectionType","toolHeader","setExpandedRow","updateSelection"],[1,"table-actions","btn-toolbar"],["id","crud-table-actions",1,"btn-group",3,"permission","selection","tableActions"],["cdTableDetail","",4,"ngIf"],["cdTableDetail",""],[1,"table","table-striped","table-bordered"],[4,"ngFor","ngForOf"],[1,"bold"],At,[1,"badge","badge-background-primary"],[1,"d-flex","flex-column","align-items-center","w-100","gap-3"],["readonly","","id","authExportArea",1,"form-control","w-100","bg-light","height-400"],["source","authExportArea",1,"align-self-end"]]},template:function(At,qt){1&At&&(m.YNc(0,Et,2,1,"ul",0),m.YNc(1,qe,6,12,"ng-container",1),m.YNc(2,Le,2,3,"ng-template",null,2,m.W1O),m.YNc(4,Pt,3,3,"ng-template",null,3,m.W1O),m.YNc(6,it,3,3,"ng-template",null,4,m.W1O),m.YNc(8,Xt,4,1,"ng-template",null,5,m.W1O)),2&At&&(m.Q6J("ngIf",qt.tabs),m.xp6(1),m.Q6J("ngIf",qt.meta))},dependencies:[$.sg,$.O5,J.s,U.rH,U.Od,F.a,X.K,$.Ov,$.Nd,de.N,V.u],styles:[".height-400[_ngcontent-%COMP%]{height:400px}"]}),pn})()},40267:(E,C,s)=>{"use strict";s.d(C,{t:()=>We});var r=s(88692),a=s(54247),c=s(51389),u=s(84051),e=s(37496),f=s(20092),m=s(13066),T=s(43765),M=s(15626),w=s(12455),D=s(67464),U=s(39054),W=s(39017),$=s(64537),J=s(94276);const F=["textArea"];let X=(()=>{class Le extends m.fS{onChange(){const it=this.textArea.nativeElement.value;try{const Xt=JSON.stringify(JSON.parse(it),null,2);this.textArea.nativeElement.value=Xt,this.textArea.nativeElement.style.height="auto";const Rn=25*Xt.split("\n").length;this.textArea.nativeElement.style.height=Rn+"px"}catch{}}}return Le.\u0275fac=function(){let Pt;return function(Xt){return(Pt||(Pt=$.n5z(Le)))(Xt||Le)}}(),Le.\u0275cmp=$.Xpm({type:Le,selectors:[["cd-formly-textarea-type"]],viewQuery:function(it,Xt){if(1&it&&$.Gf(F,5),2&it){let cn;$.iGM(cn=$.CRH())&&(Xt.textArea=cn.first)}},features:[$.qOj],decls:2,vars:6,consts:[[1,"form-control",3,"formControl","cols","rows","formlyAttributes","change"],["textArea",""]],template:function(it,Xt){1&it&&($.TgZ(0,"textarea",0,1),$.NdJ("change",function(){return Xt.onChange()}),$.qZA()),2&it&&($.ekj("is-invalid",Xt.showError),$.Q6J("formControl",Xt.formControl)("cols",Xt.props.cols)("rows",Xt.props.rows)("formlyAttributes",Xt.field))},dependencies:[J.b,f.Fj,f.JJ,f.oH,m.JD]}),Le})();var de=s(62351),V=s(18372);function ce(Le,Pt){1&Le&&($.TgZ(0,"span",10),$._uU(1,"*"),$.qZA())}function se(Le,Pt){if(1&Le&&($.TgZ(0,"cd-helper"),$._UZ(1,"span",11),$.qZA()),2&Le){const it=$.oxw(3);$.xp6(1),$.Q6J("innerHTML",it.helper,$.oJD)}}function fe(Le,Pt){if(1&Le&&($.TgZ(0,"label",8),$._uU(1),$.YNc(2,ce,2,0,"span",9),$.YNc(3,se,2,1,"cd-helper",2),$.qZA()),2&Le){const it=$.oxw(2);$.uIk("for",it.id),$.xp6(1),$.hij(" ",it.props.label," "),$.xp6(1),$.Q6J("ngIf",it.props.required&&!0!==it.props.hideRequiredMarker),$.xp6(1),$.Q6J("ngIf",it.helper)}}function Te(Le,Pt){if(1&Le&&($.TgZ(0,"div",6),$.YNc(1,fe,4,4,"label",7),$.qZA()),2&Le){const it=$.oxw();$.xp6(1),$.Q6J("ngIf",it.props.label&&!0!==it.props.hideLabel)}}function $e(Le,Pt){if(1&Le&&($.ynx(0),$.GkF(1,12),$.BQk()),2&Le){$.oxw();const it=$.MAs(1);$.xp6(1),$.Q6J("ngTemplateOutlet",it)}}function ge(Le,Pt){if(1&Le&&($.ynx(0),$.GkF(1,12),$.BQk()),2&Le){$.oxw();const it=$.MAs(1);$.xp6(1),$.Q6J("ngTemplateOutlet",it)}}function Et(Le,Pt){if(1&Le&&($.TgZ(0,"div",13),$._UZ(1,"formly-validation-message",14),$.qZA()),2&Le){const it=$.oxw();$.Udp("display","block"),$.xp6(1),$.Q6J("field",it.field)}}function ot(Le,Pt){if(1&Le&&($.TgZ(0,"small",15),$._uU(1),$.qZA()),2&Le){const it=$.oxw();$.xp6(1),$.Oqu(it.props.description)}}let ct=(()=>{class Le extends m.n2{get helper(){return(0,de.M)(this.field)?.help||""}}return Le.\u0275fac=function(){let Pt;return function(Xt){return(Pt||(Pt=$.n5z(Le)))(Xt||Le)}}(),Le.\u0275cmp=$.Xpm({type:Le,selectors:[["cd-formly-input-wrapper"]],features:[$.qOj],decls:9,vars:8,consts:[["labelTemplate",""],[1,"mb-3"],[4,"ngIf"],["fieldComponent",""],["class","invalid-feedback",3,"display",4,"ngIf"],["class","form-text text-muted",4,"ngIf"],[1,"d-flex","align-items-center"],["class","form-label",4,"ngIf"],[1,"form-label"],["aria-hidden","true",4,"ngIf"],["aria-hidden","true"],[3,"innerHTML"],[3,"ngTemplateOutlet"],[1,"invalid-feedback"],[3,"field"],[1,"form-text","text-muted"]],template:function(it,Xt){1&it&&($.YNc(0,Te,2,1,"ng-template",null,0,$.W1O),$.TgZ(2,"div",1),$.YNc(3,$e,2,1,"ng-container",2),$.GkF(4,null,3),$.YNc(6,ge,2,1,"ng-container",2),$.YNc(7,Et,2,3,"div",4),$.YNc(8,ot,2,1,"small",5),$.qZA()),2&it&&($.xp6(2),$.ekj("form-floating","floating"===Xt.props.labelPosition)("has-error",Xt.showError),$.xp6(1),$.Q6J("ngIf","floating"!==Xt.props.labelPosition),$.xp6(3),$.Q6J("ngIf","floating"===Xt.props.labelPosition),$.xp6(1),$.Q6J("ngIf",Xt.showError),$.xp6(1),$.Q6J("ngIf",Xt.props.description))},dependencies:[r.O5,r.tP,V.S,m.M2]}),Le})(),qe=(()=>{class Le{constructor(){this.onChange=it=>{},this.onTouched=()=>{}}writeValue(it){}registerOnChange(it){this.onChange=it}registerOnTouched(it){this.onTouched=it}}return Le.\u0275fac=function(it){return new(it||Le)},Le.\u0275dir=$.lG2({type:Le,selectors:[["input","type","file"]],hostBindings:function(it,Xt){1&it&&$.NdJ("change",function(pn){return Xt.onChange(pn.target.files)})("input",function(pn){return Xt.onChange(pn.target.files)})("blur",function(){return Xt.onTouched()})},features:[$._Bn([{provide:f.JU,useExisting:Le,multi:!0}])]}),Le})(),He=(()=>{class Le extends m.fS{}return Le.\u0275fac=function(){let Pt;return function(Xt){return(Pt||(Pt=$.n5z(Le)))(Xt||Le)}}(),Le.\u0275cmp=$.Xpm({type:Le,selectors:[["cd-formly-file-type"]],features:[$.qOj],decls:1,vars:2,consts:[["type","file",3,"formControl","formlyAttributes"]],template:function(it,Xt){1&it&&$._UZ(0,"input",0),2&it&&$.Q6J("formControl",Xt.formControl)("formlyAttributes",Xt.field)},dependencies:[f.Fj,f.JJ,f.oH,m.JD,qe]}),Le})(),We=(()=>{class Le{}return Le.\u0275fac=function(it){return new(it||Le)},Le.\u0275mod=$.oAB({type:Le}),Le.\u0275inj=$.cJS({imports:[r.ez,u.xD,e.b,f.u5,c.XC,c.HK,w.D,M.K,a.Bz,f.UX,m.X0.forRoot({types:[{name:"array",component:D.l},{name:"object",component:W.o},{name:"input",component:U.v,wrappers:["input-wrapper"]},{name:"textarea",component:X,wrappers:["input-wrapper"]},{name:"file",component:He,wrappers:["input-wrapper"]}],validationMessages:[{name:"required",message:"This field is required"},{name:"json",message:"This field is not a valid json document"},{name:"rgwRoleName",message:'Role name must contain letters, numbers or the following valid special characters "_+=,.@-]+" (pattern: [0-9a-zA-Z_+=,.@-]+)'},{name:"rgwRolePath",message:'Role path must start and finish with a slash "/". (pattern: (/)|(/[!-~]+/))'},{name:"file_size",message:"File size must not exceed 4KiB"}],wrappers:[{name:"input-wrapper",component:ct}]}),T.z,u.xD]}),Le})()},94928:(E,C,s)=>{"use strict";s.d(C,{K:()=>F});var r=s(23815),a=s.n(r),c=s(65862),u=s(64537),e=s(88692),f=s(51389),m=s(54247);const T=function(X){return{disabled:X}},M=function(X){return[X]};function w(X,de){if(1&X){const V=u.EpF();u.ynx(0),u.TgZ(1,"button",3),u.NdJ("click",function(){u.CHM(V);const se=u.oxw();return u.KtG(se.useClickAction(se.currentAction))}),u._UZ(2,"i",4),u.TgZ(3,"span",5),u._uU(4),u.qZA()(),u.BQk()}if(2&X){const V=u.oxw();u.xp6(1),u.Gre("btn btn-",V.btnColor,""),u.s9C("title",V.useDisableDesc(V.currentAction)),u.Q6J("ngClass",u.VKq(11,T,V.disableSelectionAction(V.currentAction)))("disabled",V.disableSelectionAction(V.currentAction))("routerLink",V.useRouterLink(V.currentAction))("preserveFragment",V.currentAction.preserveFragment?"":null),u.uIk("aria-label",V.currentAction.name),u.xp6(1),u.Q6J("ngClass",u.VKq(13,M,V.currentAction.icon)),u.xp6(2),u.Oqu(V.currentAction.name)}}function D(X,de){if(1&X&&(u.ynx(0),u._uU(1),u.BQk()),2&X){const V=u.oxw(2);u.xp6(1),u.hij("",V.dropDownOnly," ")}}function U(X,de){1&X&&u._UZ(0,"span",11)}const W=function(X){return[X,"action-icon"]};function $(X,de){if(1&X){const V=u.EpF();u.ynx(0),u.TgZ(1,"button",12),u.NdJ("click",function(){const fe=u.CHM(V).$implicit,Te=u.oxw(2);return u.KtG(Te.useClickAction(fe))}),u._UZ(2,"i",4),u.TgZ(3,"span"),u._uU(4),u.qZA()(),u.BQk()}if(2&X){const V=de.$implicit,ce=u.oxw(2);u.xp6(1),u.Tol(ce.toClassName(V)),u.s9C("title",ce.useDisableDesc(V)),u.Q6J("routerLink",ce.useRouterLink(V))("preserveFragment",V.preserveFragment?"":null)("disabled",ce.disableSelectionAction(V)),u.uIk("aria-label",V.name),u.xp6(1),u.Q6J("ngClass",u.VKq(10,W,V.icon)),u.xp6(2),u.Oqu(V.name)}}function J(X,de){if(1&X&&(u.TgZ(0,"div",6)(1,"button",7),u.YNc(2,D,2,1,"ng-container",1),u.YNc(3,U,1,0,"span",8),u.qZA(),u.TgZ(4,"div",9),u.YNc(5,$,5,12,"ng-container",10),u.qZA()()),2&X){const V=u.oxw();u.xp6(1),u.Gre("btn btn-",V.btnColor," dropdown-toggle"),u.xp6(1),u.Q6J("ngIf",V.dropDownOnly),u.xp6(1),u.Q6J("ngIf",!V.dropDownOnly),u.xp6(2),u.Q6J("ngForOf",V.dropDownActions)}}let F=(()=>{class X{constructor(){this.btnColor="accent",this.dropDownActions=[],this.icons=c.P}ngOnInit(){this.removeActionsWithNoPermissions(),this.onSelectionChange()}ngOnChanges(V){V.selection&&this.onSelectionChange()}onSelectionChange(){this.updateDropDownActions(),this.updateCurrentAction()}toClassName(V){return V.name.replace(/ /g,"-").replace(/[^a-z-]/gi,"").toLowerCase()}removeActionsWithNoPermissions(){if(!this.permission)return void(this.tableActions=[]);const V=Object.keys(this.permission).filter(ce=>this.permission[ce]);this.tableActions=this.tableActions.filter(ce=>V.includes(ce.permission))}updateDropDownActions(){this.dropDownActions=this.tableActions.filter(V=>V.visible?V.visible(this.selection):V)}updateCurrentAction(){if(this.dropDownOnly)return void(this.currentAction=void 0);let V=this.dropDownActions.find(ce=>this.showableAction(ce));!V&&this.dropDownActions.length>0&&(V=this.dropDownActions[0]),this.currentAction=V}showableAction(V){const ce=V.canBePrimary,se=this.selection.hasSingleSelection,fe="create"===V.permission?!se:se;return ce&&ce(this.selection)||!ce&&fe}useRouterLink(V){if(V.routerLink&&!this.disableSelectionAction(V))return a().isString(V.routerLink)?V.routerLink:V.routerLink()}disableSelectionAction(V){const ce=V.disable;if(ce)return Boolean(ce(this.selection));const se=V.permission,fe=this.selection.hasSingleSelection&&this.selection.first();return Boolean(["update","delete"].includes(se)&&(!fe||fe.cdExecuting))}useClickAction(V){return!this.disableSelectionAction(V)&&V.click&&V.click()}useDisableDesc(V){if(V.disable){const ce=V.disable(this.selection);return a().isString(ce)?ce:void 0}}}return X.\u0275fac=function(V){return new(V||X)},X.\u0275cmp=u.Xpm({type:X,selectors:[["cd-table-actions"]],inputs:{permission:"permission",selection:"selection",tableActions:"tableActions",btnColor:"btnColor",dropDownOnly:"dropDownOnly"},features:[u.TTD],decls:3,vars:2,consts:[[1,"btn-group"],[4,"ngIf"],["class","btn-group","ngbDropdown","","role","group","aria-label","Button group with nested dropdown",4,"ngIf"],["type","button",3,"title","ngClass","disabled","routerLink","preserveFragment","click"],[3,"ngClass"],[1,"action-label"],["ngbDropdown","","role","group","aria-label","Button group with nested dropdown",1,"btn-group"],["aria-label","dropdown-menu-toggle","ngbDropdownToggle",""],["class","sr-only",4,"ngIf"],["ngbDropdownMenu","",1,"dropdown-menu"],[4,"ngFor","ngForOf"],[1,"sr-only"],["ngbDropdownItem","",3,"title","routerLink","preserveFragment","disabled","click"]],template:function(V,ce){1&V&&(u.TgZ(0,"div",0),u.YNc(1,w,5,15,"ng-container",1),u.YNc(2,J,6,6,"div",2),u.qZA()),2&V&&(u.xp6(1),u.Q6J("ngIf",ce.currentAction),u.xp6(1),u.Q6J("ngIf",ce.dropDownActions.length>1))},dependencies:[e.mk,e.sg,e.O5,f.jt,f.iD,f.Vi,f.TH,m.rH],styles:["button.disabled[_ngcontent-%COMP%]{color:#adb5bd;cursor:default!important;pointer-events:auto}button.dropdown-item[_ngcontent-%COMP%]:hover{background-color:#dee2e6}.action-icon[_ngcontent-%COMP%]{padding-right:1.5rem}.action-label[_ngcontent-%COMP%]{font-weight:700}"]}),X})()},61350:(E,C,s)=>{"use strict";s.d(C,{b:()=>m});var r=s(64537),a=s(23815),c=s.n(a),u=s(99466),e=s(59019),f=s(96102);let m=(()=>{class T{constructor(w){this.datePipe=w,this.autoReload=5e3,this.renderObjects=!1,this.appendParentKey=!0,this.hideEmpty=!1,this.hideKeys=[],this.columns=[],this.fetchData=new r.vpe}ngOnInit(){this.columns=[{prop:"key",flexGrow:1,cellTransformation:u.e.bold},{prop:"value",flexGrow:3}],this.customCss&&(this.columns[1].cellTransformation=u.e.classAdding),this.fetchData.observers.length>0&&this.table.fetchData.subscribe(()=>{this.fetchData.emit()}),this.useData()}ngOnChanges(){this.useData()}useData(){if(!this.data)return;let w=this.makePairs(this.data);this.hideKeys&&(w=w.filter(D=>!this.hideKeys.includes(D.key))),this.tableData=w}makePairs(w){let D=[];if(w){if(c().isArray(w))D=this.makePairsFromArray(w);else{if(!c().isObject(w))throw new Error("Wrong data format");D=this.makePairsFromObject(w)}return D=D.map(U=>(U.value=this.convertValue(U.value),U)).filter(U=>null!==U.value),c().sortBy(this.renderObjects?this.insertFlattenObjects(D):D,"key")}}makePairsFromArray(w){let D=[];const U=w[0];if(c().isArray(U)){if(2!==U.length)throw new Error(`Array contains too many elements (${U.length}). Needs to be of type [string, any][]`);D=w.map(W=>({key:W[0],value:W[1]}))}else c().isObject(U)&&(D=c().has(U,"key")&&c().has(U,"value")?[...w]:w.reduce((W,$)=>W.concat(this.makePairsFromObject($)),D));return D}makePairsFromObject(w){return Object.keys(w).map(D=>({key:D,value:w[D]}))}insertFlattenObjects(w){return c().flattenDeep(w.map(D=>{const U=D.value,W=c().isObject(U);return!W||c().isEmpty(U)?(W&&(D.value=""),D):this.splitItemIntoItems(D)}))}splitItemIntoItems(w){return this.makePairs(w.value).map(D=>(this.appendParentKey&&(D.key=w.key+" "+D.key),D))}convertValue(w){if(c().isArray(w)){if(c().isEmpty(w)&&this.hideEmpty)return null;w=w.map(D=>c().isObject(D)?JSON.stringify(D):D).join(", ")}else if(c().isObject(w)){if(this.hideEmpty&&c().isEmpty(w)||!this.renderObjects)return null}else if(c().isString(w)){if(""===w&&this.hideEmpty)return null;this.isDate(w)&&(w=this.datePipe.transform(w)||w)}return w}isDate(w){const D="[ -:.TZ]",U="\\d{2}"+D;return w.match(new RegExp("^\\d{4}"+D+U+U+U+U+U+"\\d*Z?$"))}}return T.\u0275fac=function(w){return new(w||T)(r.Y36(f.N))},T.\u0275cmp=r.Xpm({type:T,selectors:[["cd-table-key-value"]],viewQuery:function(w,D){if(1&w&&r.Gf(e.a,7),2&w){let U;r.iGM(U=r.CRH())&&(D.table=U.first)}},inputs:{data:"data",autoReload:"autoReload",renderObjects:"renderObjects",appendParentKey:"appendParentKey",hideEmpty:"hideEmpty",hideKeys:"hideKeys",customCss:"customCss"},outputs:{fetchData:"fetchData"},features:[r.TTD],decls:3,vars:9,consts:[[1,"table-scroller"],["columnMode","flex",3,"data","columns","toolHeader","autoReload","customCss","autoSave","header","footer","limit"],["table",""]],template:function(w,D){1&w&&(r.TgZ(0,"div",0),r._UZ(1,"cd-table",1,2),r.qZA()),2&w&&(r.xp6(1),r.Q6J("data",D.tableData)("columns",D.columns)("toolHeader",!1)("autoReload",D.autoReload)("customCss",D.customCss)("autoSave",!1)("header",!1)("footer",!1)("limit",0))},dependencies:[e.a],styles:[".table-scroller[_ngcontent-%COMP%]{height:100%;max-height:40vh;overflow:auto}"]}),T})()},59019:(E,C,s)=>{"use strict";s.d(C,{a:()=>nr});var r=s(64537),a=s(84051),c=s(23815),u=s.n(c),e=s(25917),f=s(70882),m=s(71225),T=s(99466),M=s(65862),w=s(48168),D=s(68774),U=s(36848),W=s(88692),$=s(20092),J=s(51389),F=s(76446),X=s(58039),de=s(54247);let V=(()=>{class Zt{constructor(){this._size=0,this._count=0,this._page=1,this.pageChange=new r.vpe}set size(Ge){this._size=Ge,this.pages=this.calcPages()}get size(){return this._size}set page(Ge){this._page=Ge}get page(){return this._page}set count(Ge){this._count=Ge}get count(){return this._count}get totalPages(){const Ge=this.size<1?1:Math.ceil(this._count/this._size);return Math.max(Ge||0,1)}canPrevious(){return this._page>1}canNext(){return this._page<this.totalPages}prevPage(){this.selectPage(this._page-1)}nextPage(){this.selectPage(this._page+1)}selectPage(Ge){Ge>0&&Ge<=this.totalPages&&Ge!==this.page?(this._page=Ge,this.pageChange.emit({page:Ge})):Ge>0&&Ge>=this.totalPages&&(this._page=this.totalPages,this.pageChange.emit({page:this.totalPages}))}calcPages(Ge){const Ot=[];let mn=1,wr=this.totalPages;Ge=Ge||this.page,5<this.totalPages&&(mn=Ge-Math.floor(2.5),wr=Ge+Math.floor(2.5),mn<1?(mn=1,wr=Math.min(mn+5-1,this.totalPages)):wr>this.totalPages&&(mn=Math.max(this.totalPages-5+1,1),wr=this.totalPages));for(let Ai=mn;Ai<=wr;Ai++)Ot.push({number:Ai,text:Ai});return Ot}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)},Zt.\u0275cmp=r.Xpm({type:Zt,selectors:[["cd-table-pagination"]],inputs:{size:"size",page:"page",count:"count"},outputs:{pageChange:"pageChange"},decls:14,vars:7,consts:function(){let dn,Ge,Ot,mn,wr,Ti;return dn="Pagination",Ge="Go to first page",Ot="Go to previous page",mn="Current page",wr="Go to next page",Ti="Go to last page",[["aria-label",dn,1,"pagination"],["aria-label",Ge,1,"pagination__btn","pagination__btn_first",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-angle-double-left"],["aria-label",Ot,1,"pagination__btn","pagination__btn_prev",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-angle-left"],[1,"pagination__pages"],["aria-label",mn,"type","number","min","1",1,"pagination__page_input",3,"max","value","input"],["pageNumber",""],["aria-hidden","true"],["aria-label",wr,1,"pagination__btn","pagination__btn_next",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-angle-right"],["aria-label",Ti,1,"pagination__btn","pagination__btn_last",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-angle-double-right"]]},template:function(Ge,Ot){if(1&Ge){const mn=r.EpF();r.TgZ(0,"nav",0)(1,"button",1),r.NdJ("click",function(){return Ot.selectPage(1)}),r._UZ(2,"i",2),r.qZA(),r.TgZ(3,"button",3),r.NdJ("click",function(){return Ot.prevPage()}),r._UZ(4,"i",4),r.qZA(),r.TgZ(5,"div",5)(6,"input",6,7),r.NdJ("input",function(){r.CHM(mn);const Ti=r.MAs(7);return r.KtG(Ot.selectPage(Ti.valueAsNumber))}),r.qZA(),r.TgZ(8,"span",8),r._uU(9),r.qZA()(),r.TgZ(10,"button",9),r.NdJ("click",function(){return Ot.nextPage()}),r._UZ(11,"i",10),r.qZA(),r.TgZ(12,"button",11),r.NdJ("click",function(){return Ot.selectPage(Ot.totalPages)}),r._UZ(13,"i",12),r.qZA()()}2&Ge&&(r.xp6(1),r.Q6J("disabled",!Ot.canPrevious()),r.xp6(2),r.Q6J("disabled",!Ot.canPrevious()),r.xp6(3),r.Q6J("max",Ot.totalPages)("value",Ot.page),r.xp6(3),r.hij(" of ",Ot.totalPages," "),r.xp6(1),r.Q6J("disabled",!Ot.canNext()),r.xp6(2),r.Q6J("disabled",!Ot.canNext()))},styles:[".pagination[_ngcontent-%COMP%]{align-items:center;display:flex}.pagination__btn[_ngcontent-%COMP%]{background:none;border:0}.pagination__btn[_ngcontent-%COMP%]:disabled{color:#adb5bd}.pagination__page_input[_ngcontent-%COMP%]{border:1px solid #adb5bd;border-radius:.25rem;padding-left:.25rem}"]}),Zt})();var ce=s(37496),se=s(47187),fe=s(70442),Te=s(66369),$e=s(90068),ge=s(96102),Et=s(78877),ot=s(52821);let ct=(()=>{class Zt{transform(Ge){if(!Ge)return"";const Ot=Ge.toString().split("/");return""===Ot[0]?(Ot.shift(),`/${Ot[0]}/.../${Ot[Ot.length-1]}`):`${Ot[0]}/.../${Ot[Ot.length-1]}`}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)},Zt.\u0275pipe=r.Yjl({name:"path",type:Zt,pure:!0}),Zt})();const qe=["tableCellBoldTpl"],He=["sparklineTpl"],We=["routerLinkTpl"],Le=["checkIconTpl"],Pt=["perSecondTpl"],it=["executingTpl"],Xt=["classAddingTpl"],cn=["badgeTpl"],pn=["mapTpl"],Rn=["truncateTpl"],At=["timeAgoTpl"],qt=["rowDetailsTpl"],sn=["rowSelectionTpl"],fn=["pathTpl"];function xn(Zt,dn){1&Zt&&(r.TgZ(0,"div",23)(1,"div",24),r.Hsn(2),r.qZA()())}function Kr(Zt,dn){if(1&Zt){const Ge=r.EpF();r.ynx(0),r.TgZ(1,"button",40),r.NdJ("click",function(){const wr=r.CHM(Ge).$implicit;return r.oxw(3).onSelectFilter(wr),r.KtG(!1)}),r._uU(2),r.qZA(),r.BQk()}if(2&Zt){const Ge=dn.$implicit;r.xp6(2),r.Oqu(Ge.column.name)}}const Or=function(Zt){return[Zt]};function Lr(Zt,dn){if(1&Zt&&r._UZ(0,"i",31),2&Zt){const Ge=r.oxw(4);r.Q6J("ngClass",r.VKq(1,Or,Ge.icons.check))}}function ir(Zt,dn){if(1&Zt){const Ge=r.EpF();r.ynx(0),r.TgZ(1,"button",40),r.NdJ("click",function(){const wr=r.CHM(Ge).$implicit,Ti=r.oxw(3);return Ti.onChangeFilter(Ti.selectedFilter,wr),r.KtG(!1)}),r._uU(2),r.YNc(3,Lr,1,3,"i",41),r.qZA(),r.BQk()}if(2&Zt){const Ge=dn.$implicit,Ot=r.oxw(3);r.xp6(2),r.hij(" ",Ge.formatted," "),r.xp6(1),r.Q6J("ngIf",void 0!==Ot.selectedFilter.value&&Ot.selectedFilter.value.raw===Ge.raw)}}const Qr=function(Zt,dn){return[Zt,dn]};function jr(Zt,dn){if(1&Zt&&(r.TgZ(0,"div",35)(1,"div",36)(2,"button",37),r._UZ(3,"i",31),r._uU(4),r.qZA(),r.TgZ(5,"div",32),r.YNc(6,Kr,3,1,"ng-container",33),r.qZA()(),r.TgZ(7,"div",38)(8,"button",39),r._uU(9),r.qZA(),r.TgZ(10,"div",32),r.YNc(11,ir,4,2,"ng-container",33),r.qZA()()()),2&Zt){const Ge=r.oxw(2);r.xp6(3),r.Q6J("ngClass",r.WLB(7,Qr,Ge.icons.large,Ge.icons.filter)),r.xp6(1),r.hij(" ",Ge.selectedFilter.column.name," "),r.xp6(2),r.Q6J("ngForOf",Ge.columnFilters),r.xp6(2),r.ekj("disabled",0===Ge.selectedFilter.options.length),r.xp6(1),r.hij(" ",Ge.selectedFilter.value?Ge.selectedFilter.value.formatted:"Any"," "),r.xp6(2),r.Q6J("ngForOf",Ge.selectedFilter.options)}}function br(Zt,dn){if(1&Zt){const Ge=r.EpF();r.TgZ(0,"div",42)(1,"span",43),r._UZ(2,"i",31),r.qZA(),r.TgZ(3,"input",44),r.NdJ("ngModelChange",function(mn){r.CHM(Ge);const wr=r.oxw(2);return r.KtG(wr.search=mn)})("keyup",function(){r.CHM(Ge);const mn=r.oxw(2);return r.KtG(mn.updateFilter())}),r.qZA(),r.TgZ(4,"button",45),r.NdJ("click",function(){r.CHM(Ge);const mn=r.oxw(2);return r.KtG(mn.onClearSearch())}),r._UZ(5,"i"),r.qZA()()}if(2&Zt){const Ge=r.oxw(2);r.xp6(2),r.Q6J("ngClass",r.VKq(5,Or,Ge.icons.search)),r.xp6(1),r.Q6J("ngModel",Ge.search),r.xp6(2),r.Gre("icon-prepend ",Ge.icons.destroy,"")}}function ht(Zt,dn){if(1&Zt){const Ge=r.EpF();r.TgZ(0,"div",46)(1,"input",47),r.NdJ("click",function(mn){r.CHM(Ge);const wr=r.oxw(2);return r.KtG(wr.setLimit(mn))})("keyup",function(mn){r.CHM(Ge);const wr=r.oxw(2);return r.KtG(wr.setLimit(mn))})("blur",function(mn){r.CHM(Ge);const wr=r.oxw(2);return r.KtG(wr.setLimit(mn))}),r.qZA()()}if(2&Zt){const Ge=r.oxw(2);r.xp6(1),r.Q6J("value",Ge.userConfig.limit)}}function Wt(Zt,dn){if(1&Zt){const Ge=r.EpF();r.TgZ(0,"button",40),r.NdJ("click",function(){r.CHM(Ge);const mn=r.oxw().$implicit;return r.oxw(2).toggleColumn(mn),r.KtG(!1)}),r.TgZ(1,"div",49),r._UZ(2,"input",50),r.TgZ(3,"label",51),r._uU(4),r.qZA()()()}if(2&Zt){const Ge=r.oxw().$implicit,Ot=r.oxw(2);r.xp6(2),r.hYB("id","",Ge.prop,"",Ot.tableName,""),r.Q6J("name",Ge.prop)("checked",!Ge.isHidden),r.xp6(1),r.hYB("for","",Ge.prop,"",Ot.tableName,""),r.xp6(1),r.Oqu(Ge.name)}}function Tt(Zt,dn){if(1&Zt&&(r.ynx(0),r.YNc(1,Wt,5,7,"button",48),r.BQk()),2&Zt){const Ge=dn.$implicit;r.xp6(1),r.Q6J("ngIf",""!==Ge.name)}}function wn(Zt,dn){if(1&Zt){const Ge=r.EpF();r.TgZ(0,"div",52)(1,"button",53),r.NdJ("click",function(){r.CHM(Ge);const mn=r.oxw(2);return r.KtG(mn.refreshBtn())}),r._UZ(2,"i",31),r.qZA()()}if(2&Zt){const Ge=r.oxw(2);r.xp6(1),r.Tol("btn btn-"+Ge.status.type),r.Q6J("ngbTooltip",Ge.status.msg),r.xp6(1),r.ekj("fa-spin",Ge.updating||Ge.loadingIndicator),r.Q6J("ngClass",r.WLB(6,Qr,Ge.icons.large,Ge.icons.refresh))}}function jn(Zt,dn){if(1&Zt&&(r.TgZ(0,"div",23)(1,"div",24),r.Hsn(2,1),r.qZA(),r.YNc(3,jr,12,10,"div",25),r.YNc(4,br,6,7,"div",26),r.YNc(5,ht,2,1,"div",27),r.TgZ(6,"div",28)(7,"div",29)(8,"button",30),r._UZ(9,"i",31),r.qZA(),r.TgZ(10,"div",32),r.YNc(11,Tt,2,1,"ng-container",33),r.qZA()()(),r.YNc(12,wn,3,9,"div",34),r.qZA()),2&Zt){const Ge=r.oxw();r.xp6(3),r.Q6J("ngIf",0!==Ge.columnFilters.length),r.xp6(1),r.Q6J("ngIf",Ge.searchField),r.xp6(1),r.Q6J("ngIf",Ge.limit),r.xp6(4),r.Q6J("ngClass",r.WLB(6,Qr,Ge.icons.large,Ge.icons.table)),r.xp6(2),r.Q6J("ngForOf",Ge.columns),r.xp6(1),r.Q6J("ngIf",Ge.fetchData.observers.length>0)}}function hr(Zt,dn){if(1&Zt){const Ge=r.EpF();r.TgZ(0,"span",58)(1,"span",59),r._uU(2),r.qZA(),r.TgZ(3,"a",60),r.NdJ("click",function(){r.CHM(Ge);const mn=r.oxw().$implicit;return r.oxw(2).onChangeFilter(mn),r.KtG(!1)}),r._UZ(4,"i",61),r.qZA()()}if(2&Zt){const Ge=r.oxw().$implicit,Ot=r.oxw(2);r.xp6(2),r.AsE("",Ge.column.name,": ",Ge.value.formatted,""),r.xp6(2),r.Q6J("ngClass",r.VKq(3,Or,Ot.icons.destroy))}}function Oi(Zt,dn){if(1&Zt&&(r.TgZ(0,"span"),r.YNc(1,hr,5,5,"span",57),r.qZA()),2&Zt){const Ge=dn.$implicit;r.xp6(1),r.Q6J("ngIf",Ge.value)}}function Wi(Zt,dn){if(1&Zt){const Ge=r.EpF();r.TgZ(0,"div",23)(1,"div",54),r.YNc(2,Oi,2,1,"span",33),r.TgZ(3,"a",55),r.NdJ("click",function(){return r.CHM(Ge),r.oxw().onClearFilters(),r.KtG(!1)}),r.ynx(4),r.SDv(5,56),r.BQk(),r.qZA()()()}if(2&Zt){const Ge=r.oxw();r.xp6(2),r.Q6J("ngForOf",Ge.columnFilters)}}function so(Zt,dn){if(1&Zt&&r._UZ(0,"input",62),2&Zt){const Ge=dn.isSelected;r.Q6J("checked",Ge),r.uIk("aria-label",Ge?"selected":"select")}}function kr(Zt,dn){1&Zt&&r.Hsn(0,2)}function Ei(Zt,dn){if(1&Zt&&(r.TgZ(0,"span"),r._uU(1),r.ynx(2),r.SDv(3,68),r.BQk(),r._uU(4," / "),r.qZA()),2&Zt){const Ge=r.oxw().selectedCount;r.xp6(1),r.hij(" ",Ge," ")}}function ii(Zt,dn){if(1&Zt&&(r.TgZ(0,"span"),r._uU(1),r.ynx(2),r.SDv(3,70),r.BQk(),r._uU(4," / "),r.qZA()),2&Zt){const Ge=r.oxw(2).rowCount;r.xp6(1),r.hij(" ",Ge," ")}}function mr(Zt,dn){if(1&Zt&&(r.TgZ(0,"span"),r.YNc(1,ii,5,1,"span",64),r._uU(2),r.ynx(3),r.SDv(4,69),r.BQk(),r.qZA()),2&Zt){const Ge=r.oxw().rowCount,Ot=r.oxw();r.xp6(1),r.Q6J("ngIf",Ge!=(null==Ot.data?null:Ot.data.length)),r.xp6(1),r.hij(" ",(null==Ot.data?null:Ot.data.length)||0," ")}}function pr(Zt,dn){if(1&Zt&&(r.TgZ(0,"span"),r._uU(1),r.ynx(2),r.SDv(3,71),r.BQk(),r._uU(4),r.ynx(5),r.SDv(6,72),r.BQk(),r.qZA()),2&Zt){const Ge=r.oxw().rowCount,Ot=r.oxw();r.xp6(1),r.hij(" ",(null==Ot.data?null:Ot.data.length)||0," "),r.xp6(3),r.hij(" / ",Ge," ")}}function Eo(Zt,dn){if(1&Zt){const Ge=r.EpF();r.TgZ(0,"div",63),r.YNc(1,Ei,5,1,"span",64),r.YNc(2,mr,5,2,"span",65),r.YNc(3,pr,7,2,"ng-template",null,66,r.W1O),r.qZA(),r.TgZ(5,"cd-table-pagination",67),r.NdJ("pageChange",function(mn){r.CHM(Ge),r.oxw();const wr=r.MAs(5);return r.KtG(wr.onFooterPage(mn))}),r.qZA()}if(2&Zt){const Ge=dn.rowCount,Ot=dn.pageSize,mn=dn.curPage,wr=r.MAs(4),Ti=r.oxw();r.xp6(1),r.Q6J("ngIf",Ti.selectionType),r.xp6(1),r.Q6J("ngIf",!Ti.serverSide)("ngIfElse",wr),r.xp6(3),r.Q6J("page",mn)("size",Ot)("count",Ge)("hidden",!(Ge/Ot>1))}}function po(Zt,dn){if(1&Zt&&(r.TgZ(0,"strong"),r._uU(1),r.qZA()),2&Zt){const Ge=dn.value;r.xp6(1),r.Oqu(Ge)}}function $i(Zt,dn){if(1&Zt&&r._UZ(0,"cd-sparkline",73),2&Zt){const Ge=dn.row;r.Q6J("data",dn.value)("isBinary",Ge.cdIsBinary)}}function qr(Zt,dn){if(1&Zt&&(r.TgZ(0,"a",74),r._uU(1),r.qZA()),2&Zt){const Ge=dn.row,Ot=dn.value;r.Q6J("routerLink",r.VKq(3,Or,Ge.cdLink))("queryParams",Ge.cdParams),r.xp6(1),r.Oqu(Ot)}}function Hi(Zt,dn){if(1&Zt&&(r._UZ(0,"i",75),r.ALo(1,"boolean")),2&Zt){const Ge=dn.value,Ot=r.oxw();r.Q6J("ngClass",r.VKq(4,Or,Ot.icons.check))("hidden",!r.lcZ(1,2,Ge))}}function Dn(Zt,dn){1&Zt&&(r._uU(0),r.ALo(1,"dimless")),2&Zt&&r.hij(" ",r.lcZ(1,1,dn.value)," /s\n")}function Hn(Zt,dn){if(1&Zt&&r._UZ(0,"i",31),2&Zt){const Ge=r.oxw(2);r.Q6J("ngClass",r.WLB(1,Qr,Ge.icons.spinner,Ge.icons.spin))}}function jt(Zt,dn){if(1&Zt&&(r.TgZ(0,"span",31),r._uU(1),r.qZA()),2&Zt){const Ge=r.oxw(),Ot=Ge.column,mn=Ge.row;r.Q6J("ngClass",null!=Ot&&null!=Ot.customTemplateConfig&&Ot.customTemplateConfig.executingClass?Ot.customTemplateConfig.executingClass:"text-muted italic"),r.xp6(1),r.hij("(",mn.cdExecuting,")")}}function Fe(Zt,dn){if(1&Zt&&(r.YNc(0,Hn,1,4,"i",41),r.TgZ(1,"span",31),r._uU(2),r.qZA(),r.YNc(3,jt,2,2,"span",41)),2&Zt){const Ge=dn.column,Ot=dn.row,mn=dn.value;r.Q6J("ngIf",Ot.cdExecuting),r.xp6(1),r.Q6J("ngClass",null==Ge||null==Ge.customTemplateConfig?null:Ge.customTemplateConfig.valueClass),r.xp6(1),r.hij(" ",mn," "),r.xp6(1),r.Q6J("ngIf",Ot.cdExecuting)}}function Ie(Zt,dn){if(1&Zt&&(r.TgZ(0,"span"),r.ALo(1,"pipeFunction"),r._uU(2),r.qZA()),2&Zt){const Ge=dn.value,Ot=r.oxw();r.Tol(r.Dn7(1,4,Ge,Ot.useCustomClass,Ot)),r.xp6(2),r.Oqu(Ge)}}function et(Zt,dn){if(1&Zt&&(r.TgZ(0,"span",77),r._uU(1),r.qZA()),2&Zt){const Ge=r.oxw().$implicit,Ot=r.oxw().column;r.Q6J("ngClass",null!=Ot&&null!=Ot.customTemplateConfig&&Ot.customTemplateConfig.map&&null!=Ot&&null!=Ot.customTemplateConfig&&null!=Ot.customTemplateConfig.map[Ge]&&Ot.customTemplateConfig.map[Ge].class?Ot.customTemplateConfig.map[Ge].class:null!=Ot&&null!=Ot.customTemplateConfig&&Ot.customTemplateConfig.class?Ot.customTemplateConfig.class:"badge-primary"),r.xp6(1),r.hij(" ",null!=Ot&&null!=Ot.customTemplateConfig&&Ot.customTemplateConfig.map&&null!=Ot&&null!=Ot.customTemplateConfig&&null!=Ot.customTemplateConfig.map[Ge]&&Ot.customTemplateConfig.map[Ge].value?Ot.customTemplateConfig.map[Ge].value:null!=Ot&&null!=Ot.customTemplateConfig&&Ot.customTemplateConfig.prefix?Ot.customTemplateConfig.prefix+Ge:Ge," ")}}function ze(Zt,dn){1&Zt&&(r.TgZ(0,"span"),r._uU(1,"\xa0"),r.qZA())}function an(Zt,dn){if(1&Zt&&(r.TgZ(0,"span"),r.YNc(1,et,2,2,"span",76),r.YNc(2,ze,2,0,"span",64),r.qZA()),2&Zt){const Ge=dn.$implicit,Ot=dn.last,mn=r.oxw().column;r.xp6(1),r.Q6J("ngIf",null!=mn&&null!=mn.customTemplateConfig&&mn.customTemplateConfig.map&&null!=mn&&null!=mn.customTemplateConfig&&null!=mn.customTemplateConfig.map[Ge]&&mn.customTemplateConfig.map[Ge].value?mn.customTemplateConfig.map[Ge].value:null!=mn&&null!=mn.customTemplateConfig&&mn.customTemplateConfig.prefix?mn.customTemplateConfig.prefix+Ge:Ge),r.xp6(1),r.Q6J("ngIf",!Ot)}}function lt(Zt,dn){1&Zt&&(r.YNc(0,an,3,2,"span",33),r.ALo(1,"array")),2&Zt&&r.Q6J("ngForOf",r.lcZ(1,1,dn.value))}function Rt(Zt,dn){if(1&Zt&&(r.TgZ(0,"span"),r._uU(1),r.ALo(2,"map"),r.qZA()),2&Zt){const Ge=dn.column,Ot=dn.value;r.xp6(1),r.Oqu(r.xi3(2,1,Ot,null==Ge?null:Ge.customTemplateConfig))}}function Pe(Zt,dn){if(1&Zt&&(r.TgZ(0,"span",78),r._uU(1),r.ALo(2,"truncate"),r.qZA()),2&Zt){const Ge=dn.column,Ot=dn.value;r.Q6J("title",Ot),r.xp6(1),r.Oqu(r.Dn7(2,2,Ot,null==Ge||null==Ge.customTemplateConfig?null:Ge.customTemplateConfig.length,null==Ge||null==Ge.customTemplateConfig?null:Ge.customTemplateConfig.omission))}}function qn(Zt,dn){if(1&Zt){const Ge=r.EpF();r.TgZ(0,"a",79),r.NdJ("click",function(mn){const wr=r.CHM(Ge),Ti=wr.row,Ci=wr.expanded,Ai=r.oxw();return r.KtG(Ai.toggleExpandRow(Ti,Ci,mn))}),r.qZA()}if(2&Zt){const Ge=dn.expanded;r.ekj("expand-collapse-icon-right",!Ge)("expand-collapse-icon-down",Ge)}}function gr(Zt,dn){if(1&Zt&&(r.TgZ(0,"span",78),r.ALo(1,"cdDate"),r._uU(2),r.ALo(3,"relativeDate"),r.qZA()),2&Zt){const Ge=dn.value;r.Q6J("title",r.lcZ(1,2,Ge)),r.xp6(2),r.Oqu(r.lcZ(3,4,Ge))}}function Pn(Zt,dn){if(1&Zt&&r._UZ(0,"cd-copy-2-clipboard-button",82),2&Zt){const Ge=r.oxw().value;r.Q6J("source",Ge)("byId",!1)("showIconOnly",!0)}}function _r(Zt,dn){if(1&Zt&&(r.TgZ(0,"span",80),r._uU(1),r.ALo(2,"path"),r.YNc(3,Pn,1,3,"cd-copy-2-clipboard-button",81),r.qZA()),2&Zt){const Ge=dn.value;r.Q6J("title",Ge),r.xp6(1),r.hij("",r.lcZ(2,3,Ge)," "),r.xp6(2),r.Q6J("ngIf",Ge)}}const Pr=[[["",8,"only-table-actions"]],[["",8,"table-actions"]],[["","cdTableDetail",""]]],tr=[".only-table-actions",".table-actions","[cdTableDetail]"];let nr=(()=>{class Zt{get columnFiltered(){return u().some(this.columnFilters,Ge=>void 0!==Ge.value)}constructor(Ge,Ot){this.cdRef=Ge,this.timerService=Ot,this.columnMode="flex",this.onlyActionHeader=!1,this.toolHeader=!0,this.searchField=!0,this.header=!0,this.footer=!0,this.limit=10,this.maxLimit=9999,this.hasDetails=!1,this.autoReload=5e3,this.identifier="id",this.forceIdentifier=!1,this.selectionType=void 0,this.updateSelectionOnRefresh="onChange",this.updateExpandedOnRefresh="onChange",this.autoSave=!0,this.searchableObjects=!1,this.extraFilterableColumns=[],this.status=new m.c,this.serverSide=!1,this.count=0,this.fetchData=new r.vpe,this.updateSelection=new r.vpe,this.setExpandedRow=new r.vpe,this.columnFiltersChanged=new r.vpe,this.selection=new D.r,this.expanded=void 0,this.icons=M.P,this.cellTemplates={},this.search="",this.rows=[],this.loadingIndicator=!0,this.paginationClasses={pagerLeftArrow:M.P.leftArrowDouble,pagerRightArrow:M.P.rightArrowDouble,pagerPrevious:M.P.leftArrow,pagerNext:M.P.rightArrow},this.userConfig={},this.localStorage=window.localStorage,this.updating=!1,this.columnFilters=[]}static prepareSearch(Ge){return(Ge=Ge.toLowerCase().replace(/,/g,"")).match(/['"][^'"]+['"]/)&&(Ge=Ge.replace(/['"][^'"]+['"]/g,Ot=>Ot.replace(/(['"])([^'"]+)(['"])/g,"$2").replace(/ /g,"+"))),Ge.split(" ").filter(Ot=>Ot)}ngOnInit(){if(this.localColumns=u().clone(this.columns),this.serverSide&&(this.reloadData=u().debounce(this.reloadData,1e3)),this.table.element.addEventListener("mouseenter",Ge=>Ge.stopPropagation()),this._addTemplates(),!this.sorts){const Ge=-1!==u().findIndex(this.localColumns,["prop",this.identifier]);this.sorts=this.createSortingDefinition(Ge?this.identifier:this.localColumns[0].prop+""),!Ge&&!this.forceIdentifier&&(this.identifier=this.localColumns[0].prop+"")}this.initUserConfig(),this.localColumns.forEach(Ge=>{Ge.cellTransformation&&(Ge.cellTemplate=this.cellTemplates[Ge.cellTransformation]),Ge.flexGrow||(Ge.flexGrow=Ge.prop+""===this.identifier?1:2),Ge.resizeable||(Ge.resizeable=!1)}),this.initExpandCollapseColumn(),this.initCheckboxColumn(),this.filterHiddenColumns(),this.initColumnFilters(),this.updateColumnFilterOptions(),this.updateSelection.emit(new D.r),this.fetchData.observers.length>0&&(this.loadingIndicator=!0),u().isInteger(this.autoReload)&&this.autoReload>0?this.reloadSubscriber=this.timerService.get(()=>(0,e.of)(0),this.autoReload).subscribe(()=>{this.reloadData()}):this.autoReload?this.useData():this.reloadData()}initUserConfig(){this.autoSave&&(this.tableName=this._calculateUniqueTableName(this.localColumns),this._loadUserConfig(),this._initUserConfigAutoSave()),(10!==this.limit||!this.userConfig.limit)&&(this.userConfig.limit=this.limit),this.userConfig.offset>=0||(this.userConfig.offset=this.table.offset),this.userConfig.search||(this.userConfig.search=this.search),this.userConfig.sorts||(this.userConfig.sorts=this.sorts),this.userConfig.columns?this.userConfig.columns.forEach(Ge=>{for(let Ot=0;Ot<this.localColumns.length;Ot++)this.localColumns[Ot].prop===Ge.prop&&(this.localColumns[Ot].isHidden=Ge.isHidden)}):this.updateUserColumns()}_calculateUniqueTableName(Ge){const Ot=mn=>{if(!u().isString(mn))return 0;let wr=0;for(let Ti=0;Ti<mn.length;Ti++)wr+=mn.charCodeAt(Ti)*Ti;return wr};return Ge.reduce((mn,wr,Ti)=>(Ot(wr.prop)+Ot(wr.name))*(Ti+1)+mn,0).toString()}_loadUserConfig(){const Ge=this.localStorage.getItem(this.tableName);Ge&&(this.userConfig=JSON.parse(Ge))}_initUserConfigAutoSave(){const Ge=new f.y(this._initUserConfigProxy.bind(this));this.saveSubscriber=Ge.subscribe(this._saveUserConfig.bind(this))}_initUserConfigProxy(Ge){this.userConfig=new Proxy(this.userConfig,{set:(Ot,mn,wr)=>(Ot[mn]=wr,Ge.next(Ot),!0)})}_saveUserConfig(Ge){this.localStorage.setItem(this.tableName,JSON.stringify(Ge))}updateUserColumns(){this.userConfig.columns=this.localColumns.map(Ge=>({prop:Ge.prop,name:Ge.name,isHidden:!!Ge.isHidden}))}initCheckboxColumn(){"multiClick"===this.selectionType&&this.localColumns.unshift({prop:void 0,resizeable:!1,sortable:!1,draggable:!1,checkboxable:!1,canAutoResize:!1,cellClass:"cd-datatable-checkbox",cellTemplate:this.rowSelectionTpl,width:30})}initExpandCollapseColumn(){this.hasDetails&&this.localColumns.unshift({prop:void 0,resizeable:!1,sortable:!1,draggable:!1,isHidden:!1,canAutoResize:!1,cellClass:"cd-datatable-expand-collapse",width:40,cellTemplate:this.rowDetailsTpl})}filterHiddenColumns(){this.tableColumns=this.localColumns.filter(Ge=>!Ge.isHidden)}initColumnFilters(){let Ge=u().filter(this.localColumns,{filterable:!0});Ge=[...Ge,...this.extraFilterableColumns],this.columnFilters=Ge.map(Ot=>({column:Ot,options:[],value:Ot.filterInitValue?this.createColumnFilterOption(Ot.filterInitValue,Ot.pipe):void 0})),this.selectedFilter=u().first(this.columnFilters)}createColumnFilterOption(Ge,Ot){return{raw:u().toString(Ge),formatted:Ot?Ot.transform(Ge):u().toString(Ge)}}updateColumnFilterOptions(){this.columnFilters.forEach(Ge=>{let Ot=[];if(u().isUndefined(Ge.column.filterOptions)){const wr=u().filter(u().map(this.data,Ge.column.prop),Ti=>u().isString(Ti)&&""!==Ti||u().isBoolean(Ti)||u().isFinite(Ti)||u().isDate(Ti));Ot=u().sortedUniq(wr.sort())}else Ot=Ge.column.filterOptions;const mn=Ot.map(wr=>this.createColumnFilterOption(wr,Ge.column.pipe));Ge.value&&u().isUndefined(u().find(mn,{raw:Ge.value.raw}))&&(Ge.value=void 0),Ge.options=mn})}onSelectFilter(Ge){this.selectedFilter=Ge}onChangeFilter(Ge,Ot){Ge.value=u().isEqual(Ge.value,Ot)?void 0:Ot,this.updateFilter()}doColumnFiltering(){const Ge=[];let Ot=[...this.data],mn=[];return this.columnFilters.forEach(wr=>{if(void 0===wr.value)return;Ge.push({name:wr.column.name,prop:wr.column.prop,value:wr.value});const Ti=u().partition(Ot,Ci=>{const Ko=(0,a.Hg)(wr.column.prop)(Ci,wr.column.prop);return u().isUndefined(wr.column.filterPredicate)?`${Ko}`===wr.value.raw:wr.column.filterPredicate(Ci,wr.value.raw)});Ot=Ti[0],mn=[...mn,...Ti[1]]}),this.columnFiltersChanged.emit({filters:Ge,data:Ot,dataOut:mn}),u().forEach(this.selection.selected,wr=>{void 0===u().find(Ot,{[this.identifier]:wr[this.identifier]})&&(this.selection=new D.r,this.onSelect(this.selection))}),Ot}ngOnDestroy(){this.reloadSubscriber&&this.reloadSubscriber.unsubscribe(),this.saveSubscriber&&this.saveSubscriber.unsubscribe()}ngAfterContentChecked(){this.table&&this.table.element.clientWidth!==this.currentWidth&&(this.currentWidth=this.table.element.clientWidth,this.table.recalculate(),u().get(this.table,"cd").markForCheck())}_addTemplates(){this.cellTemplates.bold=this.tableCellBoldTpl,this.cellTemplates.checkIcon=this.checkIconTpl,this.cellTemplates.sparkline=this.sparklineTpl,this.cellTemplates.routerLink=this.routerLinkTpl,this.cellTemplates.perSecond=this.perSecondTpl,this.cellTemplates.executing=this.executingTpl,this.cellTemplates.classAdding=this.classAddingTpl,this.cellTemplates.badge=this.badgeTpl,this.cellTemplates.map=this.mapTpl,this.cellTemplates.truncate=this.truncateTpl,this.cellTemplates.timeAgo=this.timeAgoTpl,this.cellTemplates.path=this.pathTpl}useCustomClass(Ge){if(!this.customCss)throw new Error("Custom classes are not set!");const Ot=Object.keys(this.customCss),mn=Object.values(this.customCss).map((wr,Ti)=>(u().isFunction(wr)&&wr(Ge)||wr===Ge)&&Ot[Ti]).filter(wr=>wr).join(" ");return u().isEmpty(mn)?void 0:mn}ngOnChanges(Ge){Ge.data&&Ge.data.currentValue&&this.useData()}setLimit(Ge){const Ot=Number(Ge.target.value);Ot>0&&(this.maxLimit&&Ot>this.maxLimit?(this.userConfig.limit=this.maxLimit,Ge.srcElement.value=this.maxLimit):this.userConfig.limit=Ot),this.serverSide&&this.reloadData()}reloadData(){if(!this.updating){this.status=new m.c;const Ge=new w.E(()=>{Ge.errorConfig.displayError&&(this.status=new m.c("danger","Failed to load data.")),Ge.errorConfig.resetData&&(this.data=[]),this.useData()});if(Ge.pageInfo.offset=this.userConfig.offset,Ge.pageInfo.limit=this.userConfig.limit,Ge.search=this.userConfig.search,this.userConfig.sorts?.length){const Ot=this.userConfig.sorts[0];Ge.sort=`${"desc"===Ot.dir?"-":"+"}${Ot.prop}`}this.fetchData.emit(Ge),this.updating=!0}}refreshBtn(){this.loadingIndicator=!0,this.reloadData()}changePage(Ge){this.userConfig.offset=Ge.offset,this.userConfig.limit=Ge.limit,this.serverSide&&this.reloadData()}rowIdentity(){return Ge=>{const Ot=Ge[this.identifier];if(u().isUndefined(Ot))throw new Error(`Wrong identifier "${this.identifier}" -> "${Ot}"`);return Ot}}useData(){this.data&&(this.updateColumnFilterOptions(),this.updateFilter(),this.reset(),this.updateSelected(),this.updateExpanded())}reset(){this.loadingIndicator=!1,this.updating=!1}updateSelected(){if("never"===this.updateSelectionOnRefresh)return;const Ge=new Set;this.selection.selected.forEach(mn=>{for(const wr of this.data)mn[this.identifier]===wr[this.identifier]&&Ge.add(wr)});const Ot=Array.from(Ge.values());"onChange"===this.updateSelectionOnRefresh&&u().isEqual(this.selection.selected,Ot)||(this.selection.selected=Ot,this.onSelect(this.selection))}updateExpanded(){if(u().isUndefined(this.expanded)||"never"===this.updateExpandedOnRefresh)return;const Ge=this.expanded[this.identifier],Ot=u().find(this.data,mn=>Ge===mn[this.identifier]);"onChange"===this.updateExpandedOnRefresh&&u().isEqual(this.expanded,Ot)||(this.expanded=Ot,this.setExpandedRow.emit(Ot))}onSelect(Ge){u().has(Ge,"selected")&&(this.selection.selected=Ge.selected),this.updateSelection.emit(u().clone(this.selection))}toggleColumn(Ge){const Ot=Ge.prop,mn=!Ge.isHidden;mn&&1===this.tableColumns.length?Ge.isHidden=!0:(u().find(this.localColumns,wr=>wr.prop===Ot).isHidden=mn,this.updateColumns())}updateColumns(){this.updateUserColumns(),this.filterHiddenColumns();const Ge=this.userConfig.sorts[0].prop;u().find(this.tableColumns,Ot=>Ot.prop===Ge)||(this.userConfig.sorts=this.createSortingDefinition(this.tableColumns[0].prop)),this.table.recalculate(),this.cdRef.detectChanges()}createSortingDefinition(Ge){return[{prop:Ge,dir:a.Sr.asc}]}changeSorting({sorts:Ge}){this.userConfig.sorts=Ge,this.serverSide&&(this.userConfig.offset=0,this.reloadData())}onClearSearch(){this.search="",this.updateFilter()}onClearFilters(){this.columnFilters.forEach(Ge=>{Ge.value=void 0}),this.selectedFilter=u().first(this.columnFilters),this.updateFilter()}updateFilter(){if(this.serverSide)this.userConfig.search!==this.search&&(this.userConfig.offset=0,this.userConfig.limit=this.limit,this.userConfig.search=this.search,this.updating=!1,this.reloadData()),this.rows=this.data;else{let Ge=0!==this.columnFilters.length?this.doColumnFiltering():this.data;if(this.search.length>0&&Ge){const Ot=this.localColumns.filter(mn=>mn.cellTransformation!==T.e.sparkline);Ge=this.subSearch(Ge,Zt.prepareSearch(this.search),Ot),this.table.offset=0}this.rows=Ge}}subSearch(Ge,Ot,mn){if(0===Ot.length||0===Ge.length)return Ge;const wr=Ot.pop().replace(/\+/g," ").split(":"),Ti=[...mn];return 2===wr.length&&(mn=Ti.filter(Ci=>-1!==Ci.name.toLowerCase().indexOf(wr[0]))),Ge=this.basicDataSearch(u().last(wr),Ge,mn),this.subSearch(Ge,Ot,Ti)}basicDataSearch(Ge,Ot,mn){return 0===Ge.length?Ot:Ot.filter(wr=>mn.filter(Ti=>{let Ci=u().get(wr,Ti.prop);if(u().isUndefined(Ti.pipe)||(Ci=Ti.pipe.transform(Ci)),u().isUndefined(Ci)||u().isNull(Ci))return!1;if(u().isObjectLike(Ci)){if(!this.searchableObjects)return!1;Ci=JSON.stringify(Ci)}return u().isArray(Ci)?Ci=Ci.join(" "):(u().isNumber(Ci)||u().isBoolean(Ci))&&(Ci=Ci.toString()),-1!==Ci.toLowerCase().indexOf(Ge)}).length>0)}getRowClass(){return()=>({clickable:!u().isUndefined(this.selectionType)})}toggleExpandRow(Ge,Ot,mn){mn.stopPropagation(),Ot?(this.expanded=void 0,this.setExpandedRow.emit(void 0)):(this.expanded=Ge,this.table.rowDetail.collapseAllRows(),this.setExpandedRow.emit(Ge)),this.table.rowDetail.toggleExpandRow(Ge)}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(r.Y36(r.sBO),r.Y36(U.f))},Zt.\u0275cmp=r.Xpm({type:Zt,selectors:[["cd-table"]],viewQuery:function(Ge,Ot){if(1&Ge&&(r.Gf(a.nE,7),r.Gf(qe,7),r.Gf(He,7),r.Gf(We,7),r.Gf(Le,7),r.Gf(Pt,7),r.Gf(it,7),r.Gf(Xt,7),r.Gf(cn,7),r.Gf(pn,7),r.Gf(Rn,7),r.Gf(At,7),r.Gf(qt,7),r.Gf(sn,7),r.Gf(fn,7)),2&Ge){let mn;r.iGM(mn=r.CRH())&&(Ot.table=mn.first),r.iGM(mn=r.CRH())&&(Ot.tableCellBoldTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.sparklineTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.routerLinkTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.checkIconTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.perSecondTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.executingTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.classAddingTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.badgeTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.mapTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.truncateTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.timeAgoTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.rowDetailsTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.rowSelectionTpl=mn.first),r.iGM(mn=r.CRH())&&(Ot.pathTpl=mn.first)}},inputs:{data:"data",columns:"columns",sorts:"sorts",columnMode:"columnMode",onlyActionHeader:"onlyActionHeader",toolHeader:"toolHeader",searchField:"searchField",header:"header",footer:"footer",limit:"limit",maxLimit:"maxLimit",hasDetails:"hasDetails",autoReload:"autoReload",identifier:"identifier",forceIdentifier:"forceIdentifier",selectionType:"selectionType",updateSelectionOnRefresh:"updateSelectionOnRefresh",updateExpandedOnRefresh:"updateExpandedOnRefresh",autoSave:"autoSave",searchableObjects:"searchableObjects",customCss:"customCss",extraFilterableColumns:"extraFilterableColumns",status:"status",serverSide:"serverSide",count:"count"},outputs:{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow",columnFiltersChanged:"columnFiltersChanged"},features:[r.TTD],ngContentSelectors:tr,decls:39,vars:21,consts:function(){let dn,Ge,Ot,mn,wr,Ti,Ci;return dn="Clear filters",Ge="selected",Ot="total",mn="found",wr="found",Ti="total",Ci="Expand/Collapse Row",[[1,"dataTables_wrapper"],["class","dataTables_header clearfix",4,"ngIf"],[1,"bootstrap","cd-datatable",3,"cssClasses","selectionType","selected","sorts","columns","columnMode","rows","rowClass","headerHeight","footerHeight","count","externalPaging","externalSorting","limit","offset","loadingIndicator","rowIdentity","rowHeight","select","sort","page"],["table",""],["ngx-datatable-cell-template",""],["rowSelectionTpl",""],["rowHeight","auto"],["detailRow",""],["ngx-datatable-row-detail-template",""],["ngx-datatable-footer-template",""],["tableCellBoldTpl",""],["sparklineTpl",""],["routerLinkTpl",""],["checkIconTpl",""],["perSecondTpl",""],["executingTpl",""],["classAddingTpl",""],["badgeTpl",""],["mapTpl",""],["truncateTpl",""],["rowDetailsTpl",""],["timeAgoTpl",""],["pathTpl",""],[1,"dataTables_header","clearfix"],[1,"cd-datatable-actions"],["class","btn-group widget-toolbar",4,"ngIf"],["class","input-group search",4,"ngIf"],["class","input-group dataTables_paginate",4,"ngIf"],[1,"widget-toolbar"],["ngbDropdown","","autoClose","outside",1,"tc_menuitem"],["ngbDropdownToggle","","title","toggle columns",1,"btn","btn-light","tc_columnBtn"],[3,"ngClass"],["ngbDropdownMenu",""],[4,"ngFor","ngForOf"],["class","widget-toolbar tc_refreshBtn",4,"ngIf"],[1,"btn-group","widget-toolbar"],["ngbDropdown","","placement","bottom-right",1,"tc_filter_name"],["ngbDropdownToggle","","title","Filter",1,"btn","btn-light"],["ngbDropdown","","placement","bottom-right",1,"tc_filter_option"],["ngbDropdownToggle","",1,"btn","btn-light"],["ngbDropdownItem","",3,"click"],[3,"ngClass",4,"ngIf"],[1,"input-group","search"],[1,"input-group-text"],["aria-label","search","type","text",1,"form-control",3,"ngModel","ngModelChange","keyup"],["type","button","title","Clear",1,"btn","btn-light",3,"click"],[1,"input-group","dataTables_paginate"],["aria-label","table pagination","type","number","min","1","max","9999",1,"form-control",3,"value","click","keyup","blur"],["ngbDropdownItem","",3,"click",4,"ngIf"],[1,"custom-control","custom-checkbox","py-0"],["type","checkbox",1,"custom-control-input",3,"name","id","checked"],[1,"custom-control-label",3,"for"],[1,"widget-toolbar","tc_refreshBtn"],["type","button","title","Refresh",3,"ngbTooltip","click"],[1,"filter-chips"],["href","",1,"tc_clearSelections",3,"click"],dn,["class","badge badge-info me-2",4,"ngIf"],[1,"badge","badge-info","me-2"],[1,"me-2"],[1,"badge-remove",3,"click"],["aria-hidden","true",3,"ngClass"],["type","checkbox",1,"cd-datatable-checkbox",3,"checked"],[1,"page-count"],[4,"ngIf"],[4,"ngIf","ngIfElse"],["serverSideTpl",""],[3,"page","size","count","hidden","pageChange"],Ge,Ot,mn,wr,Ti,[3,"data","isBinary"],[3,"routerLink","queryParams"],[3,"ngClass","hidden"],["class","badge",3,"ngClass",4,"ngIf"],[1,"badge",3,"ngClass"],["data-toggle","tooltip",3,"title"],["href","javascript:void(0)","title",Ci,1,"expand-collapse-icon","tc_expand-collapse",3,"click"],["data-toggle","tooltip",1,"font-monospace",3,"title"],[3,"source","byId","showIconOnly",4,"ngIf"],[3,"source","byId","showIconOnly"]]},template:function(Ge,Ot){1&Ge&&(r.F$t(Pr),r.TgZ(0,"div",0),r.YNc(1,xn,3,0,"div",1),r.YNc(2,jn,13,9,"div",1),r.YNc(3,Wi,6,1,"div",1),r.TgZ(4,"ngx-datatable",2,3),r.NdJ("select",function(wr){return Ot.onSelect(wr)})("sort",function(wr){return Ot.changeSorting(wr)})("page",function(wr){return Ot.changePage(wr)}),r.YNc(6,so,1,2,"ng-template",4,5,r.W1O),r.TgZ(8,"ngx-datatable-row-detail",6,7),r.YNc(10,kr,1,0,"ng-template",8),r.qZA(),r.TgZ(11,"ngx-datatable-footer"),r.YNc(12,Eo,6,7,"ng-template",9),r.qZA()()(),r.YNc(13,po,2,1,"ng-template",null,10,r.W1O),r.YNc(15,$i,1,2,"ng-template",null,11,r.W1O),r.YNc(17,qr,2,5,"ng-template",null,12,r.W1O),r.YNc(19,Hi,2,6,"ng-template",null,13,r.W1O),r.YNc(21,Dn,2,3,"ng-template",null,14,r.W1O),r.YNc(23,Fe,4,4,"ng-template",null,15,r.W1O),r.YNc(25,Ie,3,8,"ng-template",null,16,r.W1O),r.YNc(27,lt,2,3,"ng-template",null,17,r.W1O),r.YNc(29,Rt,3,4,"ng-template",null,18,r.W1O),r.YNc(31,Pe,3,6,"ng-template",null,19,r.W1O),r.YNc(33,qn,1,4,"ng-template",4,20,r.W1O),r.YNc(35,gr,4,6,"ng-template",null,21,r.W1O),r.YNc(37,_r,4,5,"ng-template",null,22,r.W1O)),2&Ge&&(r.xp6(1),r.Q6J("ngIf",Ot.onlyActionHeader),r.xp6(1),r.Q6J("ngIf",Ot.toolHeader),r.xp6(1),r.Q6J("ngIf",Ot.toolHeader&&Ot.columnFiltered),r.xp6(1),r.Q6J("cssClasses",Ot.paginationClasses)("selectionType",Ot.selectionType)("selected",Ot.selection.selected)("sorts",Ot.userConfig.sorts)("columns",Ot.tableColumns)("columnMode",Ot.columnMode)("rows",Ot.rows)("rowClass",Ot.getRowClass())("headerHeight",Ot.header?"auto":0)("footerHeight",Ot.footer?"auto":0)("count",Ot.count)("externalPaging",Ot.serverSide)("externalSorting",Ot.serverSide)("limit",Ot.userConfig.limit>0?Ot.userConfig.limit:void 0)("offset",Ot.userConfig.offset>=0?Ot.userConfig.offset:0)("loadingIndicator",Ot.loadingIndicator)("rowIdentity",Ot.rowIdentity())("rowHeight","auto"))},dependencies:[W.mk,W.sg,W.O5,a.nE,a.$7,a.AR,a.vq,a.ii,a.dX,$.Fj,$.JJ,$.On,J.jt,J.iD,J.Vi,J.TH,J._L,F.l,X.s,de.rH,V,ce.i,se.I,fe.i,Te.n,$e.h,ge.N,Et.b,ot.W,ct],styles:['.dataTables_wrapper[_ngcontent-%COMP%]{margin-bottom:25px;max-width:99.9%}.dataTables_wrapper[_ngcontent-%COMP%]   .separator[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.09);display:inline-block;height:30px;margin-left:5px;padding-left:5px;vertical-align:middle}.dataTables_wrapper[_ngcontent-%COMP%]   .widget-toolbar[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.09);float:right;padding:0 8px}.dataTables_wrapper[_ngcontent-%COMP%]   .widget-toolbar[_ngcontent-%COMP%]   .form-check[_ngcontent-%COMP%]{padding-left:0}.dataTables_wrapper[_ngcontent-%COMP%]   .dataTables_length[_ngcontent-%COMP%] > input[_ngcontent-%COMP%]{line-height:25px;text-align:right}.dataTables_header[_ngcontent-%COMP%]{background-color:#f8f9fa;border:1px solid #ced4da;border-bottom:0;padding:5px;position:relative}.dataTables_header[_ngcontent-%COMP%]   .cd-datatable-actions[_ngcontent-%COMP%]{float:left}.dataTables_header[_ngcontent-%COMP%]   .form-group[_ngcontent-%COMP%]{padding-left:8px}.dataTables_header[_ngcontent-%COMP%]   .input-group[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.09);float:right;max-width:250px;padding-left:8px;padding-right:8px;width:40%}.dataTables_header[_ngcontent-%COMP%]   .input-group[_ngcontent-%COMP%]   .form-control[_ngcontent-%COMP%]{height:30px}.dataTables_header[_ngcontent-%COMP%]   .input-group.dataTables_paginate[_ngcontent-%COMP%]{min-width:85px;padding-right:8px;width:8%}.dataTables_header[_ngcontent-%COMP%]   .filter-chips[_ngcontent-%COMP%]{float:right;padding:0 8px}.dataTables_header[_ngcontent-%COMP%]   .filter-chips[_ngcontent-%COMP%]   .badge-remove[_ngcontent-%COMP%]{color:#fff}  cd-table .cd-datatable{border:1px solid #ced4da;margin-bottom:0;max-width:none!important}  cd-table .cd-datatable .progress-linear{display:block;height:5px;margin:0;padding:0;position:relative;width:100%}  cd-table .cd-datatable .progress-linear .container{background-color:#25828e}  cd-table .cd-datatable .progress-linear .container .bar{background-color:#25828e;height:100%;left:0;overflow:hidden;position:absolute;width:100%}  cd-table .cd-datatable .progress-linear .container .bar:before{animation:_ngcontent-%COMP%_progress-loading 3s linear infinite;background-color:#25828e;content:"";display:block;height:100%;left:-200px;position:absolute;width:200px}  cd-table .cd-datatable .datatable-header{background-clip:padding-box;background-color:#f8f9fa;background-image:linear-gradient(to bottom,#f8f9fa 0,#e9ecef 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fffafafa",endColorstr="#ffededed",GradientType=0)}  cd-table .cd-datatable .datatable-header .sort-asc,   cd-table .cd-datatable .datatable-header .sort-desc{color:#25828e}  cd-table .cd-datatable .datatable-header .datatable-header-cell{border:0;border-bottom:1px solid #ced4da;border-left:1px solid #ced4da;padding:5px;font-weight:700;text-align:left}  cd-table .cd-datatable .datatable-header .datatable-header-cell .datatable-header-cell-label:after{font-family:ForkAwesome;font-weight:400;height:9px;left:10px;line-height:12px;position:relative;vertical-align:baseline;width:12px}  cd-table .cd-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-label:after{content:" \\f0dc"}  cd-table .cd-datatable .datatable-header .datatable-header-cell.sortable.sort-active.sort-asc .datatable-header-cell-label:after{content:" \\f160"}  cd-table .cd-datatable .datatable-header .datatable-header-cell.sortable.sort-active.sort-desc .datatable-header-cell-label:after{content:" \\f161"}  cd-table .cd-datatable .datatable-header .datatable-header-cell:first-child{border-left:0}  cd-table .cd-datatable .datatable-body{margin-bottom:-6px}  cd-table .cd-datatable .datatable-body .empty-row{background-color:#aee3ea;font-style:italic;font-weight:700;padding-bottom:5px;padding-top:5px;text-align:center}  cd-table .cd-datatable .datatable-body .datatable-body-row.clickable:hover .datatable-row-group{background-color:#aee3ea;transition-duration:.3s;transition-property:background;transition-timing-function:linear}  cd-table .cd-datatable .datatable-body .datatable-body-row.datatable-row-even{background-color:#fff}  cd-table .cd-datatable .datatable-body .datatable-body-row.datatable-row-odd{background-color:#fff}  cd-table .cd-datatable .datatable-body .datatable-body-row.active,   cd-table .cd-datatable .datatable-body .datatable-body-row.active:hover{background-color:#86d5df}  cd-table .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell{border:0;border-bottom:1px solid #ced4da;border-left:1px solid #ced4da;padding:5px}  cd-table .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell:first-child{border-left:0}  cd-table .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell .datatable-body-cell-label{display:block;height:100%}  cd-table .cd-datatable .datatable-body .datatable-row-detail{border-bottom:2px solid #ced4da;overflow-y:visible!important;padding:20px}  cd-table .cd-datatable .datatable-body .expand-collapse-icon{display:block;height:100%;text-align:center}  cd-table .cd-datatable .datatable-body .expand-collapse-icon:hover{text-decoration:none}  cd-table .cd-datatable .datatable-body .expand-collapse-icon-right:before{color:#212529;font-family:ForkAwesome,sans-serif;font-size:1rem;line-height:1;content:"\\f105"}  cd-table .cd-datatable .datatable-body .expand-collapse-icon-down:before{color:#212529;font-family:ForkAwesome,sans-serif;font-size:1rem;line-height:1;content:"\\f107"}  cd-table .cd-datatable .datatable-footer .selected-count,   cd-table .cd-datatable .datatable-footer .page-count{font-style:italic;min-height:2rem;padding-left:.3rem;padding-top:.3rem}  cd-table .cd-datatable .cd-datatable-checkbox{text-align:center}  cd-table .cd-datatable .cd-datatable-checkbox:checked{accent-color:#25828e}@keyframes _ngcontent-%COMP%_progress-loading{0%{left:-200px;width:15%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}'],changeDetection:0}),Zt})()},93523:(E,C,s)=>{"use strict";s.d(C,{G:()=>u,o:()=>c});var r=s(23815),a=s.n(r);function c(...m){switch(m.length){case 1:return e.apply(void 0,m);case 3:return f.apply(void 0,m);default:throw new Error}}function u(m,T,M){const w=`__ignore_${T}`;Array.isArray(m[w])?m[w].push(M):m[w]=[M]}function e(m){for(const T of Object.getOwnPropertyNames(m.prototype)){const M=Object.getOwnPropertyDescriptor(m.prototype,T);!(M.value instanceof Function)||"constructor"===T||(f(m.prototype,T,M),Object.defineProperty(m.prototype,T,M))}}function f(m,T,M){void 0===M&&(M=Object.getOwnPropertyDescriptor(m,T));const w=M.value;M.value=function(){const U=m[`__ignore_${T}`]||[],W=[];for(let J=0;J<arguments.length;J++)W[J]=a().isString(arguments[J])&&-1===U.indexOf(J)?encodeURIComponent(arguments[J]):arguments[J];return w.apply(this,W)}}},23240:(E,C,s)=>{"use strict";s.d(C,{w:()=>e});var r=s(23815),a=s.n(r),c=s(64537),u=s(47640);let e=(()=>{class f{constructor(T,M,w){this.templateRef=T,this.viewContainer=M,this.authStorageService=w,this.cdScopeMatchAll=!0}set cdScope(T){this.permissions=this.authStorageService.getPermissions(),this.isAuthorized(T)?this.viewContainer.createEmbeddedView(this.templateRef):this.viewContainer.clear()}isAuthorized(T){const M=this.cdScopeMatchAll?a().every:a().some;return a().isString(T)?a().get(this.permissions,[T,"read"],!1):a().isArray(T)?M(T,w=>this.permissions[w].read):!!a().isObject(T)&&M(T,(w,D)=>M(w,U=>this.permissions[D][U]))}}return f.\u0275fac=function(T){return new(T||f)(c.Y36(c.Rgc),c.Y36(c.s_b),c.Y36(u.j))},f.\u0275dir=c.lG2({type:f,selectors:[["","cdScope",""]],inputs:{cdScope:"cdScope",cdScopeMatchAll:"cdScopeMatchAll"}}),f})()},82945:(E,C,s)=>{"use strict";s.d(C,{U:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{constructor(m){this.elementRef=m,this.focus=!0}ngAfterViewInit(){const m=this.elementRef.nativeElement;this.focus&&a().isFunction(m.focus)&&m.focus()}set autofocus(m){a().isBoolean(m)?this.focus=m:a().isFunction(m)&&(this.focus=m())}}return e.\u0275fac=function(m){return new(m||e)(c.Y36(c.SBq))},e.\u0275dir=c.lG2({type:e,selectors:[["","autofocus",""]],inputs:{autofocus:"autofocus"}}),e})()},17932:(E,C,s)=>{"use strict";s.d(C,{Q:()=>m});var r=s(64537),a=s(20092),c=s(23815),u=s.n(c),e=s(47557),f=s(28211);let m=(()=>{class T{constructor(w,D,U,W){this.elementRef=w,this.control=D,this.dimlessBinaryPipe=U,this.formatter=W,this.ngModelChange=new r.vpe,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value)}setValue(w){/^[\d.]+$/.test(w)?w+=this.defaultUnit||"m":w&&(this.control.control.setValue(w),this.control.control.addValidators(a.kI.pattern(/^[a-zA-Z\d. ]+$/)),this.control.control.updateValueAndValidity());const D=this.formatter.toBytes(w),U=this.round(D);this.el.value=this.dimlessBinaryPipe.transform(U),null!==D?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(w){if(null!==w&&0!==w){if(!u().isUndefined(this.minBytes)&&w<this.minBytes)return this.minBytes;if(!u().isUndefined(this.maxBytes)&&w>this.maxBytes)return this.maxBytes;if(!u().isUndefined(this.roundPower)){const D=Math.round(Math.log(w)/Math.log(this.roundPower));return Math.pow(this.roundPower,D)}}return w}onBlur(w){this.setValue(w)}}return T.\u0275fac=function(w){return new(w||T)(r.Y36(r.SBq),r.Y36(a.a5),r.Y36(e.$),r.Y36(f.H))},T.\u0275dir=r.lG2({type:T,selectors:[["","cdDimlessBinary",""]],hostBindings:function(w,D){1&w&&r.NdJ("blur",function(W){return D.onBlur(W.target.value)})},inputs:{minBytes:"minBytes",maxBytes:"maxBytes",roundPower:"roundPower",defaultUnit:"defaultUnit"},outputs:{ngModelChange:"ngModelChange"}}),T})()},35540:(E,C,s)=>{"use strict";s.d(C,{o:()=>a});var r=s(64537);let a=(()=>{class c{}return c.\u0275fac=function(e){return new(e||c)},c.\u0275mod=r.oAB({type:c}),c.\u0275inj=r.cJS({}),c})()},87925:(E,C,s)=>{"use strict";s.d(C,{o:()=>u});var r=s(64537),a=s(84333),c=s(47640);let u=(()=>{class e{constructor(m,T,M){this.formScope=m,this.authStorageService=T,this.elementRef=M}ngAfterViewInit(){this.permissions=this.authStorageService.getPermissions();const m=this.formScope?.cdFormScope;m&&!this.permissions?.[m]?.update&&(this.elementRef.nativeElement.disabled=!0)}}return e.\u0275fac=function(m){return new(m||e)(r.Y36(a.T,8),r.Y36(c.j),r.Y36(r.SBq))},e.\u0275dir=r.lG2({type:e,selectors:[["input",3,"cdNoFormInputDisable",""],["select",3,"cdNoFormInputDisable",""],["button",3,"cdNoFormInputDisable",""],["","cdFormInputDisable",""]]}),e})()},63622:(E,C,s)=>{"use strict";s.d(C,{y:()=>e});var r=s(34501),a=s(8958),c=s(93614),u=s(64537);let e=(()=>{class f{constructor(T,M){this.templateRef=T,this.viewContainer=M}set cdFormLoading(T){let M;switch(this.viewContainer.clear(),T){case c.Q.Loading:M=this.resolveNgContent("Loading form data..."),this.viewContainer.createComponent(a.b,{projectableNodes:M});break;case c.Q.Ready:this.viewContainer.createEmbeddedView(this.templateRef);break;case c.Q.Error:M=this.resolveNgContent("Form data could not be loaded."),this.viewContainer.createComponent(r.G,{projectableNodes:M}).instance.type="error"}}resolveNgContent(T){return[[document.createTextNode(T)]]}}return f.\u0275fac=function(T){return new(T||f)(u.Y36(u.Rgc),u.Y36(u.s_b))},f.\u0275dir=u.lG2({type:f,selectors:[["","cdFormLoading",""]],inputs:{cdFormLoading:"cdFormLoading"}}),f})()},84333:(E,C,s)=>{"use strict";s.d(C,{T:()=>a});var r=s(64537);let a=(()=>{class c{}return c.\u0275fac=function(e){return new(e||c)},c.\u0275dir=r.lG2({type:c,selectors:[["","cdFormScope",""]],inputs:{cdFormScope:"cdFormScope"}}),c})()},94276:(E,C,s)=>{"use strict";s.d(C,{b:()=>u});var r=s(64537),a=s(20092);let u=(()=>{class e{get validClass(){return!!this.control&&this.control.valid&&(this.control.touched||this.control.dirty)}get invalidClass(){return!!this.control&&this.control.invalid&&this.control.touched&&this.control.dirty}get path(){return function c(e,f){return[...f.path,e]}(this.formControlName,this.parent)}get control(){return this.formDirective&&this.formDirective.getControl(this)}get formDirective(){return this.parent?this.parent.formDirective:null}constructor(m){this.parent=m}}return e.\u0275fac=function(m){return new(m||e)(r.Y36(a.gN,13))},e.\u0275dir=r.lG2({type:e,selectors:[["",8,"form-control"],["",8,"form-check-input"],["",8,"custom-control-input"]],hostVars:4,hostBindings:function(m,T){2&m&&r.ekj("is-valid",T.validClass)("is-invalid",T.invalidClass)},inputs:{formControlName:"formControlName",formControl:"formControl"}}),e})()},56310:(E,C,s)=>{"use strict";s.d(C,{P:()=>c});var r=s(20092),a=s(64537);let c=(()=>{class u{get hasErrors(){return this.formControlNames.some(f=>!f.valid&&f.dirty&&f.touched)&&!this.validationDisabled}get hasSuccess(){return!this.formControlNames.some(f=>!f.valid)&&this.formControlNames.some(f=>f.dirty&&f.touched)&&!this.validationDisabled}constructor(f){this.elRef=f,this.validationDisabled=!1}get label(){const f=this.elRef.nativeElement.querySelector("label");return f&&f.textContent?f.textContent.trim():"This field"}get isDirtyAndTouched(){return this.formControlNames.some(f=>f.dirty&&f.touched)}}return u.\u0275fac=function(f){return new(f||u)(a.Y36(a.SBq))},u.\u0275dir=a.lG2({type:u,selectors:[["",8,"form-group"]],contentQueries:function(f,m,T){if(1&f&&a.Suo(T,r.u,4),2&f){let M;a.iGM(M=a.CRH())&&(m.formControlNames=M)}},hostVars:4,hostBindings:function(f,m){2&f&&a.ekj("has-error",m.hasErrors)("has-success",m.hasSuccess)},inputs:{validationDisabled:"validationDisabled"}}),u})()},41582:(E,C,s)=>{"use strict";s.d(C,{V:()=>c});var r=s(64537),a=s(20092);let c=(()=>{class u{constructor(){this.validSubmit=new r.vpe}onSubmit(){this.markAsTouchedAndDirty(this.formGroup),this.formGroup.valid&&this.validSubmit.emit(this.formGroup.value)}markAsTouchedAndDirty(f){f instanceof a.nJ?Object.keys(f.controls).forEach(m=>this.markAsTouchedAndDirty(f.controls[m])):f instanceof a.vC?f.controls.forEach(m=>this.markAsTouchedAndDirty(m)):f instanceof a.p4&&f.enabled&&(f.markAsDirty(),f.markAsTouched(),f.updateValueAndValidity())}}return u.\u0275fac=function(f){return new(f||u)},u.\u0275dir=r.lG2({type:u,selectors:[["","formGroup",""]],hostBindings:function(f,m){1&f&&r.NdJ("submit",function(){return m.onSubmit()})},inputs:{formGroup:"formGroup"},outputs:{validSubmit:"validSubmit"}}),u})()},4416:(E,C,s)=>{"use strict";s.d(C,{C:()=>a});var r=s(64537);let a=(()=>{class c{constructor(e,f){this.elementRef=e,this.renderer=f}ngOnInit(){this.renderer.setAttribute(this.elementRef.nativeElement,"tabindex","-1"),this.iElement=this.renderer.createElement("i"),this.renderer.addClass(this.iElement,"fa"),this.renderer.appendChild(this.elementRef.nativeElement,this.iElement),this.update()}getInputElement(){return document.getElementById(this.cdPasswordButton)}update(){const e=this.getInputElement();e&&"text"===e.type?(this.renderer.removeClass(this.iElement,"fa-eye"),this.renderer.addClass(this.iElement,"fa-eye-slash")):(this.renderer.removeClass(this.iElement,"fa-eye-slash"),this.renderer.addClass(this.iElement,"fa-eye"))}onClick(){const e=this.getInputElement();e.type="password"===e.type?"text":"password",this.update()}}return c.\u0275fac=function(e){return new(e||c)(r.Y36(r.SBq),r.Y36(r.Qsj))},c.\u0275dir=r.lG2({type:c,selectors:[["","cdPasswordButton",""]],hostBindings:function(e,f){1&e&&r.NdJ("click",function(){return f.onClick()})},inputs:{cdPasswordButton:"cdPasswordButton"}}),c})()},59376:(E,C,s)=>{"use strict";s.d(C,{m:()=>c});var r=s(64537),a=s(51389);let c=(()=>{class u{constructor(f){this.nav=f,this.cdStatefulTabDefault="",this.localStorage=window.localStorage}ngOnInit(){const f=this.cdStatefulTabDefault||this.localStorage.getItem(`tabset_${this.cdStatefulTab}`);f&&this.nav.select(f)}onNavChange(f){this.cdStatefulTab&&f.nextId&&this.localStorage.setItem(`tabset_${this.cdStatefulTab}`,f.nextId)}}return u.\u0275fac=function(f){return new(f||u)(r.Y36(a.Pz,9))},u.\u0275dir=r.lG2({type:u,selectors:[["","cdStatefulTab",""]],hostBindings:function(f,m){1&f&&r.NdJ("navChange",function(M){return m.onNavChange(M)})},inputs:{cdStatefulTab:"cdStatefulTab",cdStatefulTabDefault:"cdStatefulTabDefault"}}),u})()},99466:(E,C,s)=>{"use strict";s.d(C,{e:()=>r});var r=(()=>{return(a=r||(r={})).bold="bold",a.sparkline="sparkline",a.perSecond="perSecond",a.checkIcon="checkIcon",a.routerLink="routerLink",a.executing="executing",a.classAdding="classAdding",a.badge="badge",a.map="map",a.truncate="truncate",a.timeAgo="timeAgo",a.path="path",r;var a})()},4167:(E,C,s)=>{"use strict";s.d(C,{p:()=>a,w:()=>r});var r=(()=>{return(c=r||(r={})).USEDCAPACITY="ceph_cluster_total_used_bytes",c.WRITEIOPS="sum(rate(ceph_pool_wr[1m]))",c.READIOPS="sum(rate(ceph_pool_rd[1m]))",c.READLATENCY="avg_over_time(ceph_osd_apply_latency_ms[1m])",c.WRITELATENCY="avg_over_time(ceph_osd_commit_latency_ms[1m])",c.READCLIENTTHROUGHPUT="sum(rate(ceph_pool_rd_bytes[1m]))",c.WRITECLIENTTHROUGHPUT="sum(rate(ceph_pool_wr_bytes[1m]))",c.RECOVERYBYTES="sum(rate(ceph_osd_recovery_bytes[1m]))",r;var c})(),a=(()=>{return(c=a||(a={})).RGW_REQUEST_PER_SECOND="sum(rate(ceph_rgw_req[1m]))",c.AVG_GET_LATENCY="sum(rate(ceph_rgw_get_initial_lat_sum[1m])) / sum(rate(ceph_rgw_get_initial_lat_count[1m]))",c.AVG_PUT_LATENCY="sum(rate(ceph_rgw_put_initial_lat_sum[1m])) / sum(rate(ceph_rgw_put_initial_lat_count[1m]))",c.GET_BANDWIDTH="sum(rate(ceph_rgw_get_b[1m]))",c.PUT_BANDWIDTH="sum(rate(ceph_rgw_put_b[1m]))",a;var c})()},43892:(E,C,s)=>{"use strict";s.d(C,{p:()=>r,y:()=>a});var r=(()=>{return(c=r||(r={})).HEALTH_ERR="fa fa-exclamation-circle",c.HEALTH_WARN="fa fa-exclamation-triangle",c.HEALTH_OK="fa fa-check-circle",r;var c})(),a=(()=>{return(c=a||(a={})).critical="danger",c.warning="warning",c.info="info",a;var c})()},65862:(E,C,s)=>{"use strict";s.d(C,{P:()=>r});var r=(()=>{return(a=r||(r={})).add="fa fa-plus",a.addCircle="fa fa-plus-circle",a.minusCircle="fa fa-minus-circle",a.edit="fa fa-pencil",a.destroy="fa fa-times",a.destroyCircle="fa fa-times-circle",a.exchange="fa fa-exchange",a.copy="fa fa-copy",a.clipboard="fa fa-clipboard",a.flatten="fa fa-chain-broken",a.trash="fa fa-trash-o",a.lock="fa fa-lock",a.unlock="fa fa-unlock",a.clone="fa fa-clone",a.undo="fa fa-undo",a.search="fa fa-search",a.start="fa fa-play",a.stop="fa fa-stop",a.analyse="fa fa-stethoscope",a.deepCheck="fa fa-cog",a.reweight="fa fa-balance-scale",a.up="fa fa-arrow-up",a.left="fa fa-arrow-left",a.right="fa fa-arrow-right",a.down="fa fa-arrow-down",a.erase="fa fa-eraser",a.user="fa fa-user",a.users="fa fa-users",a.share="fa fa-share-alt",a.key="fa fa-key-modern",a.warning="fa fa-exclamation-triangle",a.info="fa fa-info",a.infoCircle="fa fa-info-circle",a.questionCircle="fa fa-question-circle-o",a.danger="fa fa-exclamation-circle",a.success="fa fa-check-circle",a.check="fa fa-check",a.show="fa fa-eye",a.paragraph="fa fa-paragraph",a.terminal="fa fa-terminal",a.magic="fa fa-magic",a.hourglass="fa fa-hourglass-o",a.filledHourglass="fa fa-hourglass",a.table="fa fa-table",a.spinner="fa fa-spinner",a.refresh="fa fa-refresh",a.bullseye="fa fa-bullseye",a.disk="fa fa-hdd-o",a.server="fa fa-server",a.filter="fa fa-filter",a.lineChart="fa fa-line-chart",a.signOut="fa fa-sign-out",a.health="fa fa-heartbeat",a.circle="fa fa-circle",a.bell="fa fa-bell",a.mute="fa fa-bell-slash",a.tag="fa fa-tag",a.leftArrow="fa fa-angle-left",a.rightArrow="fa fa-angle-right",a.leftArrowDouble="fa fa-angle-double-left",a.rightArrowDouble="fa fa-angle-double-right",a.flag="fa fa-flag",a.clearFilters="fa fa-window-close",a.download="fa fa-download",a.upload="fa fa-upload",a.close="fa fa-times",a.json="fa fa-file-code-o",a.text="fa fa-file-text",a.wrench="fa fa-wrench",a.enter="fa fa-sign-in",a.exit="fa fa-sign-out",a.restart="fa fa-history",a.deploy="fa fa-cube",a.cubes="fa fa-cubes",a.large="fa fa-lg",a.large2x="fa fa-2x",a.large3x="fa fa-3x",a.stack="fa fa-stack",a.stack1x="fa fa-stack-1x",a.stack2x="fa fa-stack-2x",a.pulse="fa fa-pulse",a.spin="fa fa-spin",a.inverse="fa fa-inverse",r;var a})()},18001:(E,C,s)=>{"use strict";s.d(C,{k:()=>r});var r=(()=>{return(a=r||(r={}))[a.error=0]="error",a[a.info=1]="info",a[a.success=2]="success",r;var a})()},91801:(E,C,s)=>{"use strict";s.d(C,{T:()=>r});var r=(()=>{return(a=r||(r={}))[a.ValueOk=0]="ValueOk",a[a.ValueStale=1]="ValueStale",a[a.ValueNone=2]="ValueNone",a[a.ValueException=3]="ValueException",r;var a})()},62862:(E,C,s)=>{"use strict";s.d(C,{O:()=>u});var r=s(20092),a=s(95463),c=s(64537);let u=(()=>{class e extends r.QS{group(m,T=null){const M=super.group(m,T);return new a.d(M.controls,M.validator,M.asyncValidator)}}return e.\u0275fac=function(){let f;return function(T){return(f||(f=c.n5z(e)))(T||e)}}(),e.\u0275prov=c.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},95463:(E,C,s)=>{"use strict";s.d(C,{d:()=>a});var r=s(20092);class a extends r.nJ{constructor(u,e,f){super(u,e,f),this.controls=u}get(u){const e=this._get(u);if(!e)throw new Error(`Control '${u}' could not be found!`);return e}_get(u){return super.get(u)||Object.values(this.controls).filter(e=>e.get).map(e=>e instanceof a?e._get(u):e.get(u)).find(e=>Boolean(e))}getValue(u){return this.get(u).value}silentSet(u,e){this.get(u).setValue(e,{emitEvent:!1})}showError(u,e,f){const m=this.get(u);return(e?.submitted||m.dirty)&&(f?m.hasError(f):m.invalid)}}},93614:(E,C,s)=>{"use strict";s.d(C,{E:()=>a,Q:()=>r});var r=(()=>{return(c=r||(r={}))[c.Loading=0]="Loading",c[c.Ready=1]="Ready",c[c.Error=2]="Error",c[c.None=3]="None",r;var c})();class a{constructor(){this.loading=r.Loading}loadingStart(){this.loading=r.Loading}loadingReady(){this.loading=r.Ready}loadingError(){this.loading=r.Error}loadingNone(){this.loading=r.None}}},90070:(E,C,s)=>{"use strict";s.d(C,{h:()=>W,P:()=>U});var r=s(20092),a=s(23815),c=s.n(a),u=s(25917),e=s(46797),f=s(43190);function m($,J){return J?(0,f.w)(()=>$,J):(0,f.w)(()=>$)}var T=s(88002),M=s(15257),w=s(47557),D=s(28211);function U($){return null==$||0===$.length}class W{static email(J){return U(J.value)?null:r.kI.email(J)}static ip(J=0){const F=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,X=/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i;return r.kI.pattern(4===J?F:6===J?X:new RegExp(F.source+"|"+X.source))}static number(J=!0){return r.kI.pattern(J?/^-?[0-9]+$/i:/^[0-9]+$/i)}static decimalNumber(J=!0){return r.kI.pattern(J?/^-?[0-9]+(.[0-9]+)?$/i:/^[0-9]+(.[0-9]+)?$/i)}static sslCert(){return r.kI.pattern(/^-----BEGIN CERTIFICATE-----(\n|\r|\f)((.+)?((\n|\r|\f).+)*)(\n|\r|\f)-----END CERTIFICATE-----[\n\r\f]*$/)}static sslPrivKey(){return r.kI.pattern(/^-----BEGIN RSA PRIVATE KEY-----(\n|\r|\f)((.+)?((\n|\r|\f).+)*)(\n|\r|\f)-----END RSA PRIVATE KEY-----[\n\r\f]*$/)}static pemCert(){return r.kI.pattern(/^-----BEGIN .+-----$.+^-----END .+-----$/ms)}static requiredIf(J,F){let X=!1;return de=>(!X&&de.parent&&(Object.keys(J).forEach(ce=>{de.parent.get(ce).valueChanges.subscribe(()=>{de.updateValueAndValidity({emitEvent:!1})})}),X=!0),Object.keys(J).every(ce=>{if(!de.parent)return!1;const se=de.parent.get(ce).value,fe=J[ce];if(c().isObjectLike(fe)){let Te=!1;switch(fe.op){case"empty":Te=c().isEmpty(se);break;case"!empty":Te=!c().isEmpty(se);break;case"equal":Te=se===fe.arg1;break;case"!equal":Te=se!==fe.arg1;break;case"minLength":c().isString(se)&&(Te=se.length>=fe.arg1)}return Te}return se===fe})&&(c().isFunction(F)?F.call(F,de.value):U(de.value))?{required:!0}:null)}static composeIf(J,F){let X=!1;return de=>(!X&&de.parent&&(Object.keys(J).forEach(V=>{de.parent.get(V).valueChanges.subscribe(()=>{de.updateValueAndValidity({emitEvent:!1})})}),X=!0),Object.keys(J).every(V=>de.parent&&de.parent.get(V).value===J[V])?r.kI.compose(F)(de):null)}static custom(J,F){return X=>{const de=F.call(this,X.value);return de?{[J]:de}:null}}static validateIf(J,F,X,de=[],V=[]){X=X.concat(de),J.setValidators(ce=>F.call(this)?r.kI.compose(X)(ce):de.length>0?r.kI.compose(de)(ce):null),V.forEach(ce=>{ce.valueChanges.subscribe(()=>{J.updateValueAndValidity({emitEvent:!1})})})}static match(J,F){return X=>{const de=X.get(J),V=X.get(F);if(!de||!V)return null;if(de.value!==V.value)V.setErrors({match:!0});else if(V.hasError("match")){const se=V.errors;c().unset(se,"match"),V.setErrors(c().isEmpty(c().keys(se))?null:se)}return null}}static unique(J,F=null,X,de=!1,V=""){let ce;return se=>se.pristine||U(se.value)?(0,u.of)(null):(ce=se.value,c().isFunction(X)&&null!==X()&&""!==X()&&(ce=de?`${se.value}$${X()}`:`${X()}$${se.value}`),(0,e.H)().pipe(m(J.call(F,ce,V)),(0,T.U)(fe=>fe?{notUnique:!0}:null),(0,M.q)(1)))}static uuid(J=!1){const F=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;return X=>X.pristine&&X.untouched||!J&&!X.value||F.test(X.value)?null:{invalidUuid:"This is not a valid UUID"}}static binaryMin(J){return F=>{const X=new D.H,de=(new D.H).toBytes(F.value);if(J<=de)return null;const V=new w.$(X).transform(J);return{binaryMin:()=>"Size has to be at least " + V + " or more"}}}static binaryMax(J){return F=>{const X=new D.H,de=X.toBytes(F.value);if(J>=de)return null;const V=new w.$(X).transform(J);return{binaryMax:()=>"Size has to be at most " + V + " or less"}}}static passwordPolicy(J,F,X){return de=>{if(de.pristine||""===de.value)return c().isFunction(X)&&X(!0,0),(0,u.of)(null);let V;return c().isFunction(F)&&(V=F()),(0,e.H)(500).pipe(m(c().invoke(J,"validatePassword",de.value,V)),(0,T.U)(ce=>(c().isFunction(X)&&X(ce.valid,ce.credits,ce.valuation),ce.valid?null:{passwordPolicy:!0})),(0,M.q)(1))}}static bucketName(){return J=>{if(J.pristine||!J.value)return(0,u.of)({required:!0});const F=[];let X;return F.push(()=>{const ce=J.value;let se=!0;return(/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i.test(ce)||/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i.test(ce))&&(X="ipAddress",se=!1),se}),F.push(de=>c().inRange(de.length,3,64)?!!/^[0-9a-z.-]+$/.test(J.value)||(X="bucketNameInvalid",!1):(X="shouldBeInRange",!1)),F.push(de=>{const V=c().split(de,".");return c().every(V,ce=>ce!==c().toLower(ce)||ce.includes("_")?(X="containsUpperCase",!1):/^[0-9a-z-]+$/.test(ce)?c().every([0,ce.length-1],se=>(X="lowerCaseOrNumber",/[a-z]/.test(ce[se])||c().isInteger(c().parseInt(ce[se])))):(X="onlyLowerCaseAndNumbers",!1))}),c().every(F,de=>de(J.value))?(0,u.of)(null):(0,u.of)((()=>{switch(X){case"onlyLowerCaseAndNumbers":return{onlyLowerCaseAndNumbers:!0};case"shouldBeInRange":return{shouldBeInRange:!0};case"ipAddress":return{ipAddress:!0};case"containsUpperCase":return{containsUpperCase:!0};case"lowerCaseOrNumber":return{lowerCaseOrNumber:!0};default:return{bucketNameInvalid:!0}}})())}}static bucketExistence(J,F){return X=>X.pristine||!X.value?(0,u.of)({required:!0}):F.exists(X.value).pipe((0,T.U)(de=>de===J?null:{bucketNameNotAllowed:!0}))}}},83357:(E,C,s)=>{"use strict";s.d(C,{U:()=>X});var r=s(8239),a=s(61424),c=s(32337),u=s(76111),e=s(20092),f=s(19773),m=s(23815),T=s.n(m),M=s(64537),w=s(54247),D=s(88692),U=s(30839),W=s(13066);const $=function(de){return{formState:de}};function J(de,V){if(1&de){const ce=M.EpF();M.TgZ(0,"form",6),M.NdJ("ngSubmit",function(){M.CHM(ce);const fe=M.oxw().ngIf,Te=M.oxw();return M.KtG(Te.submit(Te.model,fe.taskInfo))}),M.TgZ(1,"div",7),M._UZ(2,"formly-form",8),M.qZA(),M.TgZ(3,"div",9)(4,"cd-form-button-panel",10),M.NdJ("submitActionEvent",function(){M.CHM(ce);const fe=M.oxw().ngIf,Te=M.oxw();return M.KtG(Te.submit(Te.model,fe.taskInfo))}),M.qZA()()()}if(2&de){const ce=M.oxw().ngIf,se=M.oxw();M.Q6J("formGroup",se.form),M.xp6(2),M.Q6J("form",se.form)("fields",ce.controlSchema)("model",se.model)("options",M.VKq(8,$,ce.uiSchema)),M.xp6(2),M.Q6J("form",se.formDir)("submitText",ce.title)("disabled",!se.form.valid)}}function F(de,V){if(1&de&&(M.TgZ(0,"div",2)(1,"div",3),M.SDv(2,4),M.qZA(),M.YNc(3,J,5,10,"form",5),M.qZA()),2&de){const ce=V.ngIf;M.xp6(2),M.pQV(ce.title),M.QtT(2),M.xp6(1),M.Q6J("ngIf",ce.uiSchema)}}let X=(()=>{class de{constructor(ce,se,fe,Te,$e){this.dataGatewayService=ce,this.activatedRoute=se,this.taskWrapper=fe,this.location=Te,this.router=$e,this.model={},this.task={message:"",id:""},this.form=new e.nJ({}),this.key=""}ngOnInit(){this.activatedRoute.queryParamMap.subscribe(ce=>{this.formUISchema$=this.activatedRoute.data.pipe((0,f.zg)(fe=>{this.resource=fe.resource||this.resource;const Te="/"+this.activatedRoute.snapshot.url.join("/"),$e=ce.get("key")||"";return this.dataGatewayService.form(`ui-${this.resource}`,Te,$e)})),this.formUISchema$.subscribe(fe=>{this.methodType=fe.methodType,this.model=fe.model}),this.urlFormName=this.router.url.split("/").pop();const se=this.urlFormName.indexOf("?");se>0&&(this.urlFormName=this.urlFormName.substring(0,se))})}readFileAsText(ce){return(0,r.Z)(function*(){let se=new FileReader,fe="";return yield new Promise(Te=>{se.onload=$e=>{fe=se.result.toString(),Te(!0)},se.readAsText(ce)}),fe})()}preSubmit(ce){var se=this;return(0,r.Z)(function*(){for(const[fe,Te]of Object.entries(ce))if(Te instanceof FileList){let $e=Te[0],ge=yield se.readFileAsText($e);ce[fe]=ge}})()}submit(ce,se){var fe=this;return(0,r.Z)(function*(){if(ce){let Te={};T().forEach(se.metadataFields,$e=>{Te[$e]=ce[$e]}),Te.__message=se.message,yield fe.preSubmit(ce),fe.taskWrapper.wrapTaskAroundCall({task:new u.R(`crud-component/${fe.urlFormName}`,Te),call:fe.dataGatewayService.submit(fe.resource,ce,fe.methodType)}).subscribe({complete:()=>{fe.location.back()}})}})()}}return de.\u0275fac=function(ce){return new(ce||de)(M.Y36(a.n),M.Y36(w.gz),M.Y36(c.P),M.Y36(D.Ye),M.Y36(w.F0))},de.\u0275cmp=M.Xpm({type:de,selectors:[["cd-crud-form"]],decls:3,vars:3,consts:function(){let V;return V="" + "\ufffd0\ufffd" + "",[[1,"cd-col-form"],["class","card pb-0",4,"ngIf"],[1,"card","pb-0"],[1,"card-header"],V,[3,"formGroup","ngSubmit",4,"ngIf"],[3,"formGroup","ngSubmit"],[1,"card-body","position-relative"],[3,"form","fields","model","options"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","disabled","submitActionEvent"]]},template:function(ce,se){1&ce&&(M.TgZ(0,"div",0),M.YNc(1,F,4,2,"div",1),M.ALo(2,"async"),M.qZA()),2&ce&&(M.xp6(1),M.Q6J("ngIf",M.lcZ(2,1,se.formUISchema$)))},dependencies:[D.O5,e._Y,e.JL,U.p,e.sg,W.T7,D.Ov],styles:["json-schema-form label.control-label.hidden{display:none}  json-schema-form .form-group.schema-form-submit p{display:none}  json-schema-form legend{font-weight:100!important}  json-schema-form .card-footer{border:1px solid rgba(0,0,0,.125);left:-1px;width:-webkit-fill-available;width:-moz-available}"]}),de})()},67464:(E,C,s)=>{"use strict";s.d(C,{l:()=>W});var r=s(13066),a=s(23815),u=s(65862),e=s(64537),f=s(88692);function m($,J){if(1&$&&(e.TgZ(0,"legend",6),e.SDv(1,7),e.qZA()),2&$){const F=e.oxw();e.xp6(1),e.pQV(F.props.label),e.QtT(1)}}function T($,J){if(1&$&&(e.TgZ(0,"p"),e.SDv(1,8),e.qZA()),2&$){const F=e.oxw();e.xp6(1),e.pQV(F.props.description),e.QtT(1)}}function M($,J){if(1&$){const F=e.EpF();e.TgZ(0,"button",12),e.NdJ("click",function(){e.CHM(F);const de=e.oxw().index,V=e.oxw();return e.KtG(V.remove(de))}),e._UZ(1,"i",13),e.qZA()}if(2&$){const F=e.oxw(2);e.xp6(1),e.Q6J("ngClass",F.icons.trash)}}function w($,J){if(1&$){const F=e.EpF();e.TgZ(0,"div",9),e._UZ(1,"formly-field",10),e.TgZ(2,"div",11)(3,"button",12),e.NdJ("click",function(){e.CHM(F);const de=e.oxw();return e.KtG(de.addWrapper())}),e._UZ(4,"i",13),e.qZA(),e.YNc(5,M,2,1,"button",14),e.qZA()()}if(2&$){const F=J.$implicit,X=e.oxw();e.xp6(1),e.Q6J("field",F),e.xp6(3),e.Q6J("ngClass",X.icons.add),e.xp6(1),e.Q6J("ngIf",!1!==F.props.removable)}}function D($,J){if(1&$){const F=e.EpF();e.TgZ(0,"div",15)(1,"button",16),e.NdJ("click",function(){e.CHM(F);const de=e.oxw();return e.KtG(de.addWrapper())}),e.tHW(2,17),e._UZ(3,"i",13),e.N_p(),e.qZA()()}if(2&$){const F=e.oxw();e.xp6(3),e.Q6J("ngClass",F.icons.add),e.pQV(F.props.label),e.QtT(2)}}function U($,J){if(1&$&&(e.TgZ(0,"span",18),e._UZ(1,"formly-validation-message",19),e.qZA()),2&$){const F=e.oxw();e.xp6(1),e.Q6J("field",F.field)}}let W=(()=>{class $ extends r.hv{constructor(){super(...arguments),this.icons=u.P}ngOnInit(){this.propagateTemplateOptions()}addWrapper(){this.add(),this.propagateTemplateOptions()}propagateTemplateOptions(){(0,a.forEach)(this.field.fieldGroup,F=>{"object"==F.type&&(F.props.templateOptions=this.props.templateOptions.objectTemplateOptions)})}}return $.\u0275fac=function(){let J;return function(X){return(J||(J=e.n5z($)))(X||$)}}(),$.\u0275cmp=e.Xpm({type:$,selectors:[["cd-formly-array-type"]],features:[e.qOj],decls:6,vars:5,consts:function(){let J,F,X;return J="" + "\ufffd0\ufffd" + "",F="" + "\ufffd0\ufffd" + "",X="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " Add " + "\ufffd0\ufffd" + " ",[[1,"mb-3"],["class","cd-header mt-1",4,"ngIf"],[4,"ngIf"],["class","d-flex",4,"ngFor","ngForOf"],["class","text-right",4,"ngIf"],["class","invalid-feedback","role","alert",4,"ngIf"],[1,"cd-header","mt-1"],J,F,[1,"d-flex"],[1,"col",3,"field"],[1,"action-btn"],["type","button",1,"btn","btn-light","ms-1",3,"click"],[3,"ngClass"],["class","btn btn-light ms-1","type","button",3,"click",4,"ngIf"],[1,"text-right"],["type","button",1,"btn","btn-light",3,"click"],X,["role","alert",1,"invalid-feedback"],[3,"field"]]},template:function(F,X){1&F&&(e.TgZ(0,"div",0),e.YNc(1,m,2,1,"legend",1),e.YNc(2,T,2,1,"p",2),e.YNc(3,w,6,3,"div",3),e.YNc(4,D,4,2,"div",4),e.YNc(5,U,2,1,"span",5),e.qZA()),2&F&&(e.xp6(1),e.Q6J("ngIf",X.props.label),e.xp6(1),e.Q6J("ngIf",X.props.description),e.xp6(1),e.Q6J("ngForOf",X.field.fieldGroup),e.xp6(1),e.Q6J("ngIf",0===X.field.fieldGroup.length),e.xp6(1),e.Q6J("ngIf",X.showError&&X.formControl.errors))},dependencies:[f.mk,f.sg,f.O5,r.cw,r.M2],styles:[".action-btn[_ngcontent-%COMP%]{margin-top:2.4rem}"]}),$})()},39054:(E,C,s)=>{"use strict";s.d(C,{v:()=>u});var r=s(13066),a=s(64537),c=s(20092);let u=(()=>{class e extends r.fS{}return e.\u0275fac=function(){let f;return function(T){return(f||(f=a.n5z(e)))(T||e)}}(),e.\u0275cmp=a.Xpm({type:e,selectors:[["cd-formly-input-type"]],features:[a.qOj],decls:1,vars:2,consts:[[1,"form-control","col-form-input",3,"formControl","formlyAttributes"]],template:function(m,T){1&m&&a._UZ(0,"input",0),2&m&&a.Q6J("formControl",T.formControl)("formlyAttributes",T.field)},dependencies:[c.Fj,c.JJ,c.oH,r.JD]}),e})()},39017:(E,C,s)=>{"use strict";s.d(C,{o:()=>T});var r=s(13066),a=s(64537),c=s(88692);function u(M,w){if(1&M&&(a.TgZ(0,"legend",6),a.SDv(1,7),a.qZA()),2&M){const D=a.oxw();a.xp6(1),a.pQV(D.props.label),a.QtT(1)}}function e(M,w){if(1&M&&(a.TgZ(0,"p"),a.SDv(1,8),a.qZA()),2&M){const D=a.oxw();a.xp6(1),a.pQV(D.props.description),a.QtT(1)}}function f(M,w){if(1&M&&(a.TgZ(0,"div",9),a._UZ(1,"formly-validation-message",10),a.qZA()),2&M){const D=a.oxw();a.xp6(1),a.Q6J("field",D.field)}}function m(M,w){1&M&&a._UZ(0,"formly-field",11),2&M&&a.Q6J("field",w.$implicit)}let T=(()=>{class M extends r.fS{get inputClass(){const D=this.props.templateOptions?.layoutType,U="d-flex justify-content-center align-content-stretch gap-3";return"row"==D?U+" flex-row":U+" flex-column"}}return M.\u0275fac=function(){let w;return function(U){return(w||(w=a.n5z(M)))(U||M)}}(),M.\u0275cmp=a.Xpm({type:M,selectors:[["cd-formly-object-type"]],features:[a.qOj],decls:6,vars:5,consts:function(){let w,D;return w="" + "\ufffd0\ufffd" + "",D="" + "\ufffd0\ufffd" + "",[[1,"mb-3"],["class","cd-col-form-label",4,"ngIf"],[4,"ngIf"],["class","alert alert-danger","role","alert",4,"ngIf"],[3,"ngClass"],["class","flex-grow-1",3,"field",4,"ngFor","ngForOf"],[1,"cd-col-form-label"],w,D,["role","alert",1,"alert","alert-danger"],[3,"field"],[1,"flex-grow-1",3,"field"]]},template:function(D,U){1&D&&(a.TgZ(0,"div",0),a.YNc(1,u,2,1,"legend",1),a.YNc(2,e,2,1,"p",2),a.YNc(3,f,2,1,"div",3),a.TgZ(4,"div",4),a.YNc(5,m,1,1,"formly-field",5),a.qZA()()),2&D&&(a.xp6(1),a.Q6J("ngIf",U.props.label),a.xp6(1),a.Q6J("ngIf",U.props.description),a.xp6(1),a.Q6J("ngIf",U.showError&&U.formControl.errors),a.xp6(1),a.Q6J("ngClass",U.inputClass),a.xp6(1),a.Q6J("ngForOf",U.field.fieldGroup))},dependencies:[c.mk,c.sg,c.O5,r.cw,r.M2]}),M})()},62351:(E,C,s)=>{"use strict";s.d(C,{M:()=>f,w:()=>m});var r=s(23815);function a(T){return new Promise((M,w)=>{T.value instanceof FileList&&(T.value[0].size>4096&&M({file_size:!0}),M(null)),M({not_a_file:!0})})}function c(T){return new Promise((M,w)=>{try{JSON.parse(T.value),M(null)}catch{M({json:!0})}})}function u(T){return new Promise((M,w)=>{T.value.match("^((/)|(/[!-~]+/))$")&&M(null),M({rgwRolePath:!0})})}function e(T){return new Promise((M,w)=>{T.value.match("^[0-9a-zA-Z_+=,.@-]+$")&&M(null),M({rgwRoleName:!0})})}function f(T,M){const w=M||T.options?.formState;return w?w.find(D=>D.key==T.key):{}}function m(T,M){const w=f(T,M);let D=[];(0,r.forEach)(w.validators,U=>{switch(U){case"json":D.push(c);break;case"rgwRoleName":D.push(e);break;case"rgwRolePath":D.push(u);break;case"file":D.push(a)}}),T.asyncValidators={validation:D}}},61355:(E,C,s)=>{"use strict";s.d(C,{T:()=>c,e:()=>u});var r=s(65862),a=s(18001);class c{constructor(f=a.k.info,m,T,M,w="Ceph"){this.type=f,this.title=m,this.message=T,this.options=M,this.application=w,this.isFinishedTask=!1,this.classes={Ceph:"ceph-icon",Prometheus:"prometheus-icon"},this.applicationClass=this.classes[this.application]}}class u extends c{constructor(f=new c){super(f.type,f.title,f.message,f.options,f.application),this.config=f,this.alertSilenced=!1,this.textClasses=["text-danger","text-info","text-success"],this.iconClasses=[r.P.warning,r.P.info,r.P.check],this.borderClasses=["border-danger","border-info","border-success"],delete this.config,this.timestamp=(new Date).toJSON(),this.iconClass=this.iconClasses[this.type],this.textClass=this.textClasses[this.type],this.borderClass=this.borderClasses[this.type],this.isFinishedTask=f.isFinishedTask}}},51907:(E,C,s)=>{"use strict";s.d(C,{G:()=>r});class r{constructor(c){this.pwdExpirationSpan=0,this.pwdExpirationSpan=c.user_pwd_expiration_span,this.pwdExpirationWarning1=c.user_pwd_expiration_warning_1,this.pwdExpirationWarning2=c.user_pwd_expiration_warning_2}}},48168:(E,C,s)=>{"use strict";s.d(C,{E:()=>u});var r=s(35732);class c{constructor(){this.offset=0,this.limit=10,this.pageSize=10}}class u{constructor(f){this.errorConfig={resetData:!0,displayError:!0},this.pageInfo=new c,this.search="",this.sort="+name",this.error=f}toParams(){return Number.isNaN(this.pageInfo.offset)&&(this.pageInfo.offset=0),null===this.pageInfo.limit&&(this.pageInfo.limit=0),this.search||(this.search=""),(!this.sort||this.sort.length<2)&&(this.sort="+name"),new r.LE({fromObject:{offset:String(this.pageInfo.offset*this.pageInfo.limit),limit:String(this.pageInfo.limit),search:this.search,sort:this.sort}})}}},68774:(E,C,s)=>{"use strict";s.d(C,{r:()=>r});class r{constructor(c){this._selected=[],c&&(this._selected=c),this.update()}update(){this.hasSelection=this._selected.length>0,this.hasSingleSelection=1===this._selected.length,this.hasMultiSelection=this._selected.length>1}set selected(c){this._selected=c,this.update()}get selected(){return this._selected}add(c){this._selected.push(c),this.update()}first(){return this.hasSelection?this._selected[0]:null}}},87311:(E,C,s)=>{"use strict";s.d(C,{h:()=>r});class r{constructor(c,u,e,f){this.customColors={backgroundColor:void 0,borderColor:void 0},this.checkOffset=!1,this.chartEl=c.nativeElement,this.getStyleLeft=e,this.getStyleTop=f,this.tooltipEl=u.nativeElement}customTooltips(c){if(0===c.opacity)return void(this.tooltipEl.style.opacity=0);if(this.tooltipEl.classList.remove("above","below","no-transform"),this.tooltipEl.classList.add(c.yAlign?c.yAlign:"no-transform"),c.body){const f=c.title||[],m=c.body.map(w=>w.lines);let T="<thead>";f.forEach(w=>{T+="<tr><th>"+this.getTitle(w)+"</th></tr>"}),T+="</thead><tbody>",m.forEach((w,D)=>{const U=c.labelColors[D];let W="background:"+(this.customColors.backgroundColor||U.backgroundColor);W+="; border-color:"+(this.customColors.borderColor||U.borderColor),W+="; border-width: 2px",T+='<tr><td nowrap><span class="chartjs-tooltip-key" style="'+W+'"></span>'+this.getBody(w)+"</td></tr>"}),T+="</tbody>",this.tooltipEl.querySelector("table").innerHTML=T}const u=this.chartEl.offsetTop,e=this.chartEl.offsetLeft;if(this.checkOffset){const f=c.width/2;this.tooltipEl.classList.remove("transform-left"),this.tooltipEl.classList.remove("transform-right"),c.caretX-f<0?this.tooltipEl.classList.add("transform-left"):c.caretX+f>this.chartEl.width&&this.tooltipEl.classList.add("transform-right")}this.tooltipEl.style.left=this.getStyleLeft(c,e),this.tooltipEl.style.top=this.getStyleTop(c,u),this.tooltipEl.style.opacity=1,this.tooltipEl.style.fontFamily=c._fontFamily,this.tooltipEl.style.fontSize=c.fontSize,this.tooltipEl.style.fontStyle=c._fontStyle,this.tooltipEl.style.padding=c.yPadding+"px "+c.xPadding+"px"}getBody(c){return c}getTitle(c){return c}}},30633:(E,C,s)=>{"use strict";s.d(C,{h:()=>r,r:()=>a});var r=(()=>{return(c=r||(r={}))[c.global=0]="global",c[c.pool=1]="pool",c[c.image=2]="image",r;var c})(),a=(()=>{return(c=a||(a={}))[c.bps=0]="bps",c[c.iops=1]="iops",c[c.milliseconds=2]="milliseconds",a;var c})()},60737:(E,C,s)=>{"use strict";s.d(C,{o:()=>a});var r=s(29075);class a extends r.i{}},76111:(E,C,s)=>{"use strict";s.d(C,{R:()=>a});var r=s(29075);class a extends r.i{}},19358:(E,C,s)=>{"use strict";s.d(C,{N:()=>r});class r{static fromString(c){const u=c.split("/");return new this(u[0],u.length>=3?u[1]:null,u.length>=3?u[2]:u[1])}constructor(c,u,e){this.poolName=c,this.namespace=u,this.imageName=e}getNameSpace(){return this.namespace?`${this.namespace}/`:""}toString(){return`${this.poolName}/${this.getNameSpace()}${this.imageName}`}toStringEncoded(){return encodeURIComponent(`${this.poolName}/${this.getNameSpace()}${this.imageName}`)}}},29075:(E,C,s)=>{"use strict";s.d(C,{i:()=>r});class r{constructor(c,u){this.name=c,this.metadata=u}}},47187:(E,C,s)=>{"use strict";s.d(C,{I:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m,T=!1){let M=m;return(!a().isArray(m)||a().isArray(m)&&T)&&(M=[m]),M}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"array",type:e,pure:!0}),e})()},68962:(E,C,s)=>{"use strict";s.d(C,{T:()=>a});var r=s(64537);let a=(()=>{class c{transform(e,f="Yes",m="No"){return Boolean(e)?f:m}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"booleanText",type:c,pure:!0}),c})()},70442:(E,C,s)=>{"use strict";s.d(C,{i:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){let f=!1;switch(e){case!0:case 1:case"y":case"yes":case"t":case"true":case"on":case"1":f=!0}return f}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"boolean",type:c,pure:!0}),c})()},96102:(E,C,s)=>{"use strict";s.d(C,{N:()=>c});var r=s(64537),a=s(88692);let c=(()=>{class u{constructor(f){this.datePipe=f}transform(f){return null===f||""===f?"":this.datePipe.transform(f,"shortDate")+" "+this.datePipe.transform(f,"mediumTime")}}return u.\u0275fac=function(f){return new(f||u)(r.Y36(a.uU,16))},u.\u0275pipe=r.Yjl({name:"cdDate",type:u,pure:!0}),u})()},24310:(E,C,s)=>{"use strict";s.d(C,{t:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){const f=/ceph version\s+[^ ]+\s+\(.+\)\s+(.+)\s+\((.+)\)/.exec(e);return f?"dev"===f[2]?"main":f[1]:e}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"cephReleaseName",type:c,pure:!0}),c})()},58111:(E,C,s)=>{"use strict";s.d(C,{F:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){const f=/ceph version\s+([^ ]+)\s+\(.+\)/.exec(e);return f?f[1]:e}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"cephShortVersion",type:c,pure:!0}),c})()},20044:(E,C,s)=>{"use strict";s.d(C,{O:()=>c});var r=s(28211),a=s(64537);let c=(()=>{class u{constructor(f){this.formatter=f}transform(f,m=1){return this.formatter.format_number(f,1024,["B/s","KiB/s","MiB/s","GiB/s","TiB/s","PiB/s","EiB/s","ZiB/s","YiB/s"],m)}}return u.\u0275fac=function(f){return new(f||u)(a.Y36(r.H,16))},u.\u0275pipe=a.Yjl({name:"dimlessBinaryPerSecond",type:u,pure:!0}),u})()},47557:(E,C,s)=>{"use strict";s.d(C,{$:()=>c});var r=s(28211),a=s(64537);let c=(()=>{class u{constructor(f){this.formatter=f}transform(f,m=1){return this.formatter.format_number(f,1024,["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],m)}}return u.\u0275fac=function(f){return new(f||u)(a.Y36(r.H,16))},u.\u0275pipe=a.Yjl({name:"dimlessBinary",type:u,pure:!0}),u})()},66369:(E,C,s)=>{"use strict";s.d(C,{n:()=>c});var r=s(28211),a=s(64537);let c=(()=>{class u{constructor(f){this.formatter=f}transform(f,m=1){return this.formatter.format_number(f,1e3,["","k","M","G","T","P","E","Z","Y"],m)}}return u.\u0275fac=function(f){return new(f||u)(a.Y36(r.H,16))},u.\u0275pipe=a.Yjl({name:"dimless",type:u,pure:!0}),u})()},94088:(E,C,s)=>{"use strict";s.d(C,{u:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){if(null===e||e<=0)return"";const f=[[`${Math.floor(e/31536e3)}`,"years"],[`${Math.floor(e%31536e3/86400)}`,"days"],[`${Math.floor(e%86400/3600)}`,"hours"],[`${Math.floor(e%3600/60)}`,"minutes"],[`${Math.floor(e%60)}`,"seconds"]];let m="";for(let T=0,M=f.length;T<M;T++)"0"!==f[T][0]&&(m+=" "+f[T][0]+" "+("1"===f[T][0]?f[T][1].substr(0,f[T][1].length-1):f[T][1]));return m.trim()||"1 second"}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"duration",type:c,pure:!1}),c})()},41039:(E,C,s)=>{"use strict";s.d(C,{W:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m){return a().isUndefined(m)||a().isNull(m)?"-":a().isNaN(m)?"N/A":m}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"empty",type:e,pure:!0}),e})()},9228:(E,C,s)=>{"use strict";s.d(C,{v:()=>c});var r=s(43892),a=s(64537);let c=(()=>{class u{transform(f){return Object.keys(r.p).includes(f)?r.p[f]:""}}return u.\u0275fac=function(f){return new(f||u)},u.\u0275pipe=a.Yjl({name:"healthIcon",type:u,pure:!0}),u})()},21766:(E,C,s)=>{"use strict";s.d(C,{A:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){return`${e} IOPS`}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"iops",type:c,pure:!0}),c})()},88820:(E,C,s)=>{"use strict";s.d(C,{V:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){return"user:rbd"===e?"user:rbd (tcmu-runner)":e}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"iscsiBackstore",type:c,pure:!0}),c})()},86969:(E,C,s)=>{"use strict";s.d(C,{A:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){return e.join(", ")}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"join",type:c,pure:!0}),c})()},42746:(E,C,s)=>{"use strict";s.d(C,{e:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){return"[DBG]"===e?"debug":"[INF]"===e?"info":"[WRN]"===e?"warn":"[ERR]"===e?"err":""}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"logPriority",type:c,pure:!0}),c})()},78877:(E,C,s)=>{"use strict";s.d(C,{b:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m,T){return a().isPlainObject(T)?a().get(T,m,m):m}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"map",type:e,pure:!0}),e})()},8074:(E,C,s)=>{"use strict";s.d(C,{F:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m){if(!m)return{success:0,info:0,total:0};let T=0,M=0,w=0,D=0,U=0;return a().each(m.standbys,()=>{w+=1}),m.standbys&&!m.filesystems?(M=w,T=0):0===m.filesystems.length?T=0:(a().each(m.filesystems,J=>{a().each(J.mdsmap.info,F=>{"up:standby-replay"===F.state?U+=1:D+=1})}),T=D,M=w+U),{success:T,info:M,total:T+M}}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"mdsSummary",type:e,pure:!0}),e})()},40473:(E,C,s)=>{"use strict";s.d(C,{c:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m){if(!m)return{success:0,info:0,total:0};let T;(a().isUndefined(m.active_name)?"":`${"active daemon"}: ${m.active_name}`).length>0&&(T=1);const w=m.standbys.length;return{success:T,info:w,total:T+w}}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"mgrSummary",type:e,pure:!0}),e})()},48537:(E,C,s)=>{"use strict";s.d(C,{J:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){return`${e} ms`}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"milliseconds",type:c,pure:!0}),c})()},55657:(E,C,s)=>{"use strict";s.d(C,{g:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m,T){return""===m?a().defaultTo(T,"n/a"):m}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"notAvailable",type:e,pure:!0}),e})()},82799:(E,C,s)=>{"use strict";s.d(C,{f:()=>a});var r=s(64537);let a=(()=>{class c{transform(e,f=!1){if(!e)return[];const m=[],T=["---","--x","-w-","-wx","r--","r-x","rw-","rwx"],w=e.toString(8).padStart(7,"0").split(""),D=this.getFileTypeSymbol(parseInt(w[1]+w[2])),U=T[parseInt(w[4])],W=T[parseInt(w[5])],$=T[parseInt(w[6])];return f?{owner:this.getItem(U),group:this.getItem(W),others:this.getItem($)}:("directory"!==D&&m.push({content:D,class:"badge-primary me-1"}),"---"!==U&&m.push({content:`owner: ${U}`,class:"badge-primary me-1"}),"---"!==W&&m.push({content:`group: ${W}`,class:"badge-primary me-1"}),"---"!==$&&m.push({content:`others: ${$}`,class:"badge-primary me-1"}),0===m.length?[{content:"no permissions",class:"badge-warning me-1",toolTip:`owner: ${U}, group: ${W}, others: ${$}`}]:m)}getFileTypeSymbol(e){switch(e){case 1:return"fifo";case 2:return"character";case 4:return"directory";case 6:return"block";case 10:return"regular";case 12:return"symbolic-link";default:return"-"}}getItem(e){const f=[];return e.includes("r")&&f.push("read"),e.includes("w")&&f.push("write"),e.includes("x")&&f.push("execute"),f}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"octalToHumanReadable",type:c,pure:!0}),c})()},36569:(E,C,s)=>{"use strict";s.d(C,{f:()=>a});var r=s(64537);let a=(()=>{class c{transform(e){const f=parseInt(e,10);return isNaN(f)?e:e+(1===Math.floor(f/10)?"th":f%10==1?"st":f%10==2?"nd":f%10==3?"rd":"th")}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275pipe=r.Yjl({name:"ordinal",type:c,pure:!0}),c})()},67891:(E,C,s)=>{"use strict";s.d(C,{H:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m){if(!m)return"";let T=0,M=0,w=0,D=0;return a().each(m.osds,J=>{J.in&&T++,J.up&&M++,J.state.includes("nearfull")&&w++,J.state.includes("full")&&D++}),{total:m.osds.length,down:m.osds.length-M,out:m.osds.length-T,up:M,in:T,nearfull:w,full:D}}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"osdSummary",type:e,pure:!0}),e})()},12455:(E,C,s)=>{"use strict";s.d(C,{D:()=>Le});var r=s(88692),a=s(47187),c=s(68962),u=s(70442),e=s(96102),f=s(24310),m=s(58111),T=s(20044),M=s(47557),w=s(66369),D=s(94088),U=s(41039),W=s(64537);let $=(()=>{class Pt{transform(Xt){return encodeURIComponent(Xt)}}return Pt.\u0275fac=function(Xt){return new(Xt||Pt)},Pt.\u0275pipe=W.Yjl({name:"encodeUri",type:Pt,pure:!0}),Pt})();var J=s(9228),F=s(21766),X=s(88820),de=s(86969),V=s(42746),ce=s(78877),se=s(8074),fe=s(40473),Te=s(48537),$e=s(55657),ge=s(36569),Et=s(67891),ot=s(90068),ct=s(60793),qe=s(52821),He=s(10545),We=s(82799);let Le=(()=>{class Pt{}return Pt.\u0275fac=function(Xt){return new(Xt||Pt)},Pt.\u0275mod=W.oAB({type:Pt}),Pt.\u0275inj=W.cJS({providers:[a.I,u.i,c.T,r.uU,m.F,f.t,M.$,T.O,w.n,ot.h,X.V,de.A,V.e,e.N,U.W,$,ge.f,F.A,Te.J,$e.g,He.m,D.u,ce.b,qe.W,ct.A,J.v,fe.c,se.F,Et.H,We.f],imports:[r.ez]}),Pt})()},90068:(E,C,s)=>{"use strict";s.d(C,{h:()=>f});var r=s(23815),a=s.n(r),c=s(16738),u=s.n(c),e=s(64537);u().updateLocale("en",{relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}});let f=(()=>{class m{transform(M,w=!0){let D;const U=u()().utcOffset();if(D=a().isNumber(M)?u().parseZone(u().unix(M)).utc().utcOffset(U).local():u().parseZone(M).utc().utcOffset(U).local(),!D.isValid())return"";let W=D.fromNow();return w&&(W=a().upperFirst(W)),W}}return m.\u0275fac=function(M){return new(M||m)},m.\u0275pipe=e.Yjl({name:"relativeDate",type:m,pure:!1}),m})()},60793:(E,C,s)=>{"use strict";s.d(C,{A:()=>c});var r=s(64537),a=s(5998);let c=(()=>{class u{constructor(f){this.domSanitizer=f}transform(f){return this.domSanitizer.sanitize(r.q3G.HTML,f)}}return u.\u0275fac=function(f){return new(f||u)(r.Y36(a.H7,16))},u.\u0275pipe=r.Yjl({name:"sanitizeHtml",type:u,pure:!0}),u})()},52821:(E,C,s)=>{"use strict";s.d(C,{W:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m,T,M){return a().isString(m)?(M=a().defaultTo(M,""),a().truncate(m,{length:T,omission:M})):m}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"truncate",type:e,pure:!0}),e})()},10545:(E,C,s)=>{"use strict";s.d(C,{m:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{transform(m){return a().upperFirst(m)}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275pipe=c.Yjl({name:"upperFirst",type:e,pure:!0}),e})()},2817:(E,C,s)=>{"use strict";s.d(C,{r:()=>$});var r=s(22759);function a(J,F){function X(){return!X.pred.apply(X.thisArg,arguments)}return X.pred=J,X.thisArg=F,X}var c=s(19846),u=s(45435),e=s(70882),m=s(47349),T=s(46782),M=s(79765),w=s(85345);class U{constructor(F){this.notifier=F}call(F,X){return X.subscribe(new W(F,this.notifier,X))}}class W extends w.Ds{constructor(F,X,de){super(F),this.notifier=X,this.source=de,this.sourceIsBeingSubscribedTo=!0}notifyNext(){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)}notifyComplete(){if(!1===this.sourceIsBeingSubscribedTo)return super.complete()}complete(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return super.complete();this._unsubscribeAndRecycle(),this.notifications.next(void 0)}}_unsubscribe(){const{notifications:F,retriesSubscription:X}=this;F&&(F.unsubscribe(),this.notifications=void 0),X&&(X.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0}_unsubscribeAndRecycle(){const{_unsubscribe:F}=this;return this._unsubscribe=null,super._unsubscribeAndRecycle(),this._unsubscribe=F,this}subscribeToRetries(){let F;this.notifications=new M.xQ;try{const{notifier:X}=this;F=X(this.notifications)}catch{return super.complete()}this.retries=F,this.retriesSubscription=(0,w.ft)(F,new w.IY(this))}}function $(){const J=(0,r.R)(document,"visibilitychange").pipe((0,m.d)({refCount:!0,bufferSize:1})),[F,X]=function f(J,F,X){return[(0,u.h)(F,X)(new e.y((0,c.s)(J))),(0,u.h)(a(F,X))(new e.y((0,c.s)(J)))]}(J,()=>"visible"===document.visibilityState);return function(de){return de.pipe((0,T.R)(X),function D(J){return F=>F.lift(new U(J))}(()=>F))}}},45510:(E,C,s)=>{"use strict";s.d(C,{P:()=>u});var r=s(64537),a=s(54247),c=s(47640);let u=(()=>{class e{constructor(m,T){this.router=m,this.authStorageService=T}canActivate(m,T){return!!this.authStorageService.isLoggedIn()||(this.router.navigate(["/login"],{queryParams:{returnUrl:T.url}}),!1)}canActivateChild(m,T){return this.canActivate(m,T)}}return e.\u0275fac=function(m){return new(m||e)(r.LFG(a.F0),r.LFG(c.j))},e.\u0275prov=r.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},47640:(E,C,s)=>{"use strict";s.d(C,{j:()=>e});var r=s(26215);class a{constructor(m=[]){["read","create","update","delete"].forEach(T=>this[T]=m.includes(T))}}class c{constructor(m){this.hosts=new a(m.hosts),this.configOpt=new a(m["config-opt"]),this.pool=new a(m.pool),this.osd=new a(m.osd),this.monitor=new a(m.monitor),this.rbdImage=new a(m["rbd-image"]),this.iscsi=new a(m.iscsi),this.rbdMirroring=new a(m["rbd-mirroring"]),this.rgw=new a(m.rgw),this.cephfs=new a(m.cephfs),this.manager=new a(m.manager),this.log=new a(m.log),this.user=new a(m.user),this.grafana=new a(m.grafana),this.prometheus=new a(m.prometheus),this.nfs=new a(m["nfs-ganesha"])}}var u=s(64537);let e=(()=>{class f{constructor(){this.isPwdDisplayedSource=new r.X(!1),this.isPwdDisplayed$=this.isPwdDisplayedSource.asObservable()}set(T,M={},w=!1,D=null,U=!1){localStorage.setItem("dashboard_username",T),localStorage.setItem("dashboard_permissions",JSON.stringify(new c(M))),localStorage.setItem("user_pwd_expiration_date",String(D)),localStorage.setItem("user_pwd_update_required",String(U)),localStorage.setItem("sso",String(w))}remove(){localStorage.removeItem("dashboard_username"),localStorage.removeItem("user_pwd_expiration_data"),localStorage.removeItem("user_pwd_update_required")}isLoggedIn(){return null!==localStorage.getItem("dashboard_username")}getUsername(){return localStorage.getItem("dashboard_username")}getPermissions(){return JSON.parse(localStorage.getItem("dashboard_permissions")||JSON.stringify(new c({})))}getPwdExpirationDate(){return Number(localStorage.getItem("user_pwd_expiration_date"))}getPwdUpdateRequired(){return"true"===localStorage.getItem("user_pwd_update_required")}isSSO(){return"true"===localStorage.getItem("sso")}}return f.\u0275fac=function(T){return new(T||f)},f.\u0275prov=u.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})()},72427:(E,C,s)=>{"use strict";s.d(C,{v:()=>a});var r=s(64537);let a=(()=>{class c{constructor(){}static getCount(e){return Number(e.headers?.get("X-Total-Count"))}}return c.\u0275fac=function(e){return new(e||c)},c.\u0275prov=r.Yz7({token:c,factory:c.\u0275fac,providedIn:"root"}),c})()},61424:(E,C,s)=>{"use strict";s.d(C,{n:()=>F});var r=s(88002),a=s(62351),c=s(64537),u=s(20092),e=s(13066),f=s(68307);function T(X){return""===X||null==X}function M(X){return null!=X&&"object"==typeof X&&!Array.isArray(X)}function w(X){return Number.isInteger?Number.isInteger(X):"number"==typeof X&&Math.floor(X)===X}function D(X){return"object"==typeof X&&(X.hasOwnProperty("const")||X.enum&&1===X.enum.length)}function U(X){if(!X.fieldGroup)return(0,e._S)(X)&&void 0!==(0,e.Hl)(X)?1:0;const de=X.fieldGroup.reduce((V,ce)=>U(ce)+V,0);if(0===de&&(0,e._S)(X)){const V=(0,e.Hl)(X);if(null===V||void 0!==V&&(X.fieldArray&&Array.isArray(V)||!X.fieldArray&&M(V)))return 1}return de}let W=(()=>{class X{toFieldConfig(V,ce){return this._toFieldConfig(V,{schema:V,...ce||{}})}_toFieldConfig(V,{key:ce,...se}){V=this.resolveSchema(V,se);const fe=this.guessSchemaType(V);let Te={type:fe[0],defaultValue:V.default,props:{label:V.title,readonly:V.readOnly,description:V.description}};switch(null!=ce&&(Te.key=ce),!se.ignoreDefault&&(V.readOnly||se.readOnly)&&(Te.props.disabled=!0,se={...se,readOnly:!0}),se.resetOnHide&&(Te.resetOnHide=!0),ce&&se.strict&&this.addValidator(Te,"type",($e,ge)=>{const Et=(0,e.Hl)(ge);if(null!=Et)switch(Te.type){case"string":return"string"==typeof Et;case"integer":return w(Et);case"number":return"number"==typeof Et;case"object":return M(Et);case"array":return Array.isArray(Et)}return!0}),!1===se.shareFormControl&&(Te.shareFormControl=!1),se.ignoreDefault&&delete Te.defaultValue,this.addValidator(Te,"type",{schemaType:fe,expression:({value:$e})=>{if(void 0===$e||null===$e&&-1!==fe.indexOf("null"))return!0;switch(fe[0]){case"null":return null===typeof $e;case"string":return"string"==typeof $e;case"integer":return w($e);case"number":return"number"==typeof $e;case"object":return M($e);case"array":return Array.isArray($e)}return!0}}),Te.type){case"number":case"integer":Te.parsers=[$e=>T($e)?void 0:Number($e)],V.hasOwnProperty("minimum")&&(Te.props.min=V.minimum),V.hasOwnProperty("maximum")&&(Te.props.max=V.maximum),V.hasOwnProperty("exclusiveMinimum")&&(Te.props.exclusiveMinimum=V.exclusiveMinimum,this.addValidator(Te,"exclusiveMinimum",({value:$e})=>T($e)||$e>V.exclusiveMinimum)),V.hasOwnProperty("exclusiveMaximum")&&(Te.props.exclusiveMaximum=V.exclusiveMaximum,this.addValidator(Te,"exclusiveMaximum",({value:$e})=>T($e)||$e<V.exclusiveMaximum)),V.hasOwnProperty("multipleOf")&&(Te.props.step=V.multipleOf,this.addValidator(Te,"multipleOf",({value:$e})=>{if(T($e)||"number"!=typeof $e||0===$e||V.multipleOf<=0)return!0;const ge=Math.pow(10,function m(X){if(!isFinite(X))return 0;let de=1,V=0;for(;Math.round(X*de)/de!==X;)de*=10,V++;return V}(V.multipleOf));return Math.round($e*ge)%Math.round(V.multipleOf*ge)==0}));break;case"string":Te.parsers=[$e=>(-1!==fe.indexOf("null")?$e=T($e)?null:$e:Te.props.required||($e=""===$e?void 0:$e),$e)],["minLength","maxLength","pattern"].forEach($e=>{V.hasOwnProperty($e)&&(Te.props[$e]=V[$e])});break;case"object":{Te.fieldGroup||(Te.fieldGroup=[]);const{propDeps:$e,schemaDeps:ge}=this.resolveDependencies(V);Object.keys(V.properties||{}).forEach(Et=>{const ot=Array.isArray(V.required)&&-1!==V.required.indexOf(Et),ct=this._toFieldConfig(V.properties[Et],{...se,key:Et,isOptional:se.isOptional||!ot});if(Te.fieldGroup.push(ct),(ot||$e[Et])&&(ct.expressions={...ct.expressions||{},"props.required":qe=>{let He=qe.parent;const We=qe.fieldGroup&&null!=qe.key?He.model:qe.model;for(;null==He.key&&He.parent;)He=He.parent;return!!(We||He&&He.props&&He.props.required)&&(!(!Array.isArray(V.required)||-1===V.required.indexOf(Et))||$e[Et]&&qe.model&&$e[Et].some(Pt=>!T(qe.model[Pt])))}}),ge[Et]){const qe=We=>We.hasOwnProperty("const")?We.const:We.enum[0],He=ge[Et].oneOf;He&&He.every(We=>We.properties&&We.properties[Et]&&D(We.properties[Et]))?He.forEach(We=>{const{[Et]:Le,...Pt}=We.properties;Te.fieldGroup.push({...this._toFieldConfig({...We,properties:Pt},{...se,resetOnHide:!0}),expressions:{hide:it=>!it.model||qe(Le)!==it.model[Et]}})}):Te.fieldGroup.push({...this._toFieldConfig(ge[Et],se),expressions:{hide:We=>!We.model||T(We.model[Et])}})}}),V.oneOf&&Te.fieldGroup.push(this.resolveMultiSchema("oneOf",V.oneOf,{...se,shareFormControl:!1})),V.anyOf&&Te.fieldGroup.push(this.resolveMultiSchema("anyOf",V.anyOf,se));break}case"array":V.hasOwnProperty("minItems")&&(Te.props.minItems=V.minItems,this.addValidator(Te,"minItems",($e,ge)=>{const Et=(0,e.Hl)(ge);return T(Et)||Et.length>=V.minItems}),!se.isOptional&&V.minItems>0&&void 0===Te.defaultValue&&(Te.defaultValue=Array.from(new Array(V.minItems)))),V.hasOwnProperty("maxItems")&&(Te.props.maxItems=V.maxItems,this.addValidator(Te,"maxItems",($e,ge)=>{const Et=(0,e.Hl)(ge);return T(Et)||Et.length<=V.maxItems})),V.hasOwnProperty("uniqueItems")&&(Te.props.uniqueItems=V.uniqueItems,this.addValidator(Te,"uniqueItems",($e,ge)=>{const Et=(0,e.Hl)(ge);return!(!T(Et)&&V.uniqueItems)||Array.from(new Set(Et.map(ct=>JSON.stringify(ct)))).length===Et.length})),V.items&&!Array.isArray(V.items)&&(V.items=this.resolveSchema(V.items,se)),this.isEnum(V)||(Te.fieldArray=$e=>{if(!Array.isArray(V.items)){const ct=V.items?this._toFieldConfig(V.items,se):{};return ct.props&&(ct.props.required=!0),ct}const ge=$e.fieldGroup?$e.fieldGroup.length:0,Et=V.items[ge]?V.items[ge]:V.additionalItems,ot=Et?this._toFieldConfig(Et,se):{};return ot.props&&(ot.props.required=!0),V.items[ge]&&(ot.props.removable=!1),ot})}return V.hasOwnProperty("const")&&(Te.props.const=V.const,this.addValidator(Te,"const",({value:$e})=>$e===V.const),Te.type||(Te.defaultValue=V.const)),this.isEnum(V)&&(Te.props.multiple="array"===Te.type,Te.type="enum",Te.props.options=this.toEnumOptions(V)),V.oneOf&&!Te.type&&(delete Te.key,Te.fieldGroup=[this.resolveMultiSchema("oneOf",V.oneOf,{...se,key:ce,shareFormControl:!1})]),V.oneOf&&!Te.type&&(delete Te.key,Te.fieldGroup=[this.resolveMultiSchema("oneOf",V.oneOf,{...se,key:ce,shareFormControl:!1})]),V.widget?.formlyConfig&&(Te=this.mergeFields(Te,V.widget.formlyConfig)),Te.templateOptions=Te.props,se.map?se.map(Te,V):Te}resolveSchema(V,ce){return V&&V.$ref&&(V=this.resolveDefinition(V,ce)),V&&V.allOf&&(V=this.resolveAllOf(V,ce)),V}resolveAllOf({allOf:V,...ce},se){if(!V.length)throw Error(`allOf array can not be empty ${V}.`);return V.reduce((fe,Te)=>(Te=this.resolveSchema(Te,se),fe.required&&Te.required&&(fe.required=[...fe.required,...Te.required]),Te.uniqueItems&&(fe.uniqueItems=Te.uniqueItems),["maxLength","maximum","exclusiveMaximum","maxItems","maxProperties"].forEach($e=>{!T(fe[$e])&&!T(Te[$e])&&(fe[$e]=fe[$e]<Te[$e]?fe[$e]:Te[$e])}),["minLength","minimum","exclusiveMinimum","minItems","minProperties"].forEach($e=>{!T(fe[$e])&&!T(Te[$e])&&(fe[$e]=fe[$e]>Te[$e]?fe[$e]:Te[$e])}),(0,e.Du)(fe,Te)),ce)}resolveMultiSchema(V,ce,se){return{type:"multischema",fieldGroup:[{type:"enum",defaultValue:-1,props:{multiple:"anyOf"===V,options:ce.map((fe,Te)=>({label:fe.title,value:Te,disabled:fe.readOnly}))},hooks:{onInit:fe=>fe.formControl.valueChanges.pipe((0,f.b)(()=>fe.options.detectChanges(fe.parent)))}},{fieldGroup:ce.map((fe,Te)=>({...this._toFieldConfig(fe,{...se,resetOnHide:!0}),expressions:{hide:($e,ge)=>{const Et=$e.parent.parent.fieldGroup[0].formControl;if(-1===Et.value||ge){let ot=$e.parent.fieldGroup.map((ct,qe)=>[ct,qe,this.isFieldValid(ct,qe,ce,se)]).sort(([ct,,qe],[He,,We])=>{if(qe!==We)return We?1:-1;const Le=U(ct),Pt=U(He);return Le===Pt&&ct.props.disabled===He.props.disabled?0:Pt>Le?1:-1}).map(([,ct])=>ct);if("anyOf"===V){const ct=ot.filter(qe=>U($e.parent.fieldGroup[qe]));ot=ct.length>0?ct:[ot[0]||0]}ot=ot.length>0?ot:[0],Et.setValue("anyOf"===V?ot:ot[0])}return Array.isArray(Et.value)?-1===Et.value.indexOf(Te):Et.value!==Te}}}))}]}}resolveDefinition(V,ce){const[se,fe]=V.$ref.split("#/");if(se)throw Error(`Remote schemas for ${V.$ref} not supported yet.`);const Te=fe?fe.split("/").reduce(($e,ge)=>$e?.hasOwnProperty(ge)?$e[ge]:null,ce.schema):null;if(!Te)throw Error(`Cannot find a definition for ${V.$ref}.`);return Te.$ref?this.resolveDefinition(Te,ce):{...Te,...["title","description","default","widget"].reduce(($e,ge)=>(V.hasOwnProperty(ge)&&($e[ge]=V[ge]),$e),{})}}resolveDependencies(V){const ce={},se={};return Object.keys(V.dependencies||{}).forEach(fe=>{const Te=V.dependencies[fe];Array.isArray(Te)?Te.forEach($e=>{ce[$e]?ce[$e].push(fe):ce[$e]=[fe]}):se[fe]=Te}),{propDeps:ce,schemaDeps:se}}guessSchemaType(V){const ce=V?.type;return!ce&&V?.properties?["object"]:Array.isArray(ce)?1===ce.length?ce:2===ce.length&&-1!==ce.indexOf("null")?ce.sort(se=>"null"==se?1:-1):ce:ce?[ce]:[]}addValidator(V,ce,se){V.validators=V.validators||{},V.validators[ce]=se}isEnum(V){return!!V.enum||V.anyOf&&V.anyOf.every(D)||V.oneOf&&V.oneOf.every(D)||V.uniqueItems&&V.items&&!Array.isArray(V.items)&&this.isEnum(V.items)}toEnumOptions(V){if(V.enum)return V.enum.map(se=>({value:se,label:se}));const ce=se=>{const fe=se.hasOwnProperty("const")?se.const:se.enum[0],Te={value:fe,label:se.title||fe};return se.readOnly&&(Te.disabled=!0),Te};return V.anyOf?V.anyOf.map(ce):V.oneOf?V.oneOf.map(ce):this.toEnumOptions(V.items)}isFieldValid(V,ce,se,fe){V._schemasFields||(Object.defineProperty(V,"_schemasFields",{enumerable:!1,writable:!0,configurable:!0}),V._schemasFields={});let Te=V._schemasFields[ce];const $e=V.model?(0,e.kg)(V.model):V.fieldArray?[]:{};return Te?(Te.model=$e,V.options.build(Te)):Te=V._schemasFields[ce]=V.options.build({form:Array.isArray($e)?new u.Oe([]):new u.cw({}),fieldGroup:[this._toFieldConfig(se[ce],{...fe,resetOnHide:!0,ignoreDefault:!0,map:null,strict:!0})],model:$e,options:{}}),Te.form.valid}mergeFields(V,ce){for(let se in ce){const fe="templateOptions"===se?"props":se;M(V[fe])&&M(ce[se])?V[fe]=this.mergeFields(V[fe],ce[se]):null!=ce[se]&&(V[fe]=ce[se])}return V}}return X.\u0275fac=function(V){return new(V||X)},X.\u0275prov=c.Yz7({token:X,factory:X.\u0275fac,providedIn:"root"}),X})(),$=(()=>{class X{constructor(V){this.formlyJsonschema=V}processJsonSchemaForm(V,ce){let se=0;for(;se<V.forms.length&&V.forms[se].path!=ce;)se++;se%=V.forms.length;const fe=V.forms[se].control_schema.title,Te=V.forms[se].ui_schema;let ge=this.formlyJsonschema.toFieldConfig(V.forms[se].control_schema).fieldGroup;for(let qe=0;qe<ge.length;qe++)for(let He=0;He<Te.length;He++)ge[qe].key==Te[He].key&&(ge[qe].props.templateOptions=Te[He].templateOptions,ge[qe].props.readonly=Te[He].readonly,(0,a.w)(ge[qe],Te));return{title:fe,uiSchema:Te,controlSchema:ge,taskInfo:{metadataFields:V.forms[se].task_info.metadataFields,message:V.forms[se].task_info.message},methodType:V.forms[se].method_type,model:V.forms[se].model||{}}}}return X.\u0275fac=function(V){return new(V||X)(c.LFG(W))},X.\u0275prov=c.Yz7({token:X,factory:X.\u0275fac,providedIn:"root"}),X})();var J=s(35732);let F=(()=>{class X{constructor(V,ce){this.http=V,this.crudFormAdapater=ce,this.cache={}}list(V){const ce=this.getCacheable(V,"get");if(void 0===this.cache[ce]){const{url:se,version:fe}=this.getUrlAndVersion(V);this.cache[ce]=this.http.get(se,{headers:{Accept:`application/vnd.ceph.api.v${fe}+json`}})}return this.cache[ce]}submit(V,ce,se){const{url:fe,version:Te}=this.getUrlAndVersion(V);return this.http[se](fe,ce,{headers:{Accept:`application/vnd.ceph.api.v${Te}+json`}})}delete(V,ce){const{url:se,version:fe}=this.getUrlAndVersion(V);return this.http.delete(`${se}/${ce}`,{headers:{Accept:`application/vnd.ceph.api.v${fe}+json`},observe:"response"})}form(V,ce,se=""){const fe=this.getCacheable(V,"get",se),Te={model_key:se};if(void 0===this.cache[fe]){const{url:$e,version:ge}=this.getUrlAndVersion(V);this.cache[fe]=this.http.get($e,{headers:{Accept:`application/vnd.ceph.api.v${ge}+json`},params:Te})}return this.cache[fe].pipe((0,r.U)($e=>this.crudFormAdapater.processJsonSchemaForm($e,ce)))}model(V,ce){const se=this.getCacheable(V,"get");if(void 0===this.cache[se]){const{url:fe,version:Te}=this.getUrlAndVersion(V);this.cache[se]=this.http.get(`${fe}/model`,{headers:{Accept:`application/vnd.ceph.api.v${Te}+json`},params:ce})}return this.cache[se]}getCacheable(V,ce,se=""){return V+ce+se}getUrlAndVersion(V){const ce=V.match(/(?<url>[^@]+)(?:@(?<version>.+))?/);return{url:ce.groups.url.split(".").join("/"),version:ce.groups.version||"1.0"}}}return X.\u0275fac=function(V){return new(V||X)(c.LFG(J.eN),c.LFG($))},X.\u0275prov=c.Yz7({token:X,factory:X.\u0275fac,providedIn:"root"}),X})()},41702:(E,C,s)=>{"use strict";s.d(C,{U:()=>u});var r=s(16738),a=s.n(r),c=s(64537);let u=(()=>{class e{calculateAdditionalData(m){if(!m.life_expectancy_min||!m.life_expectancy_max)return m.state="unknown",m;const T=W=>!!Number.parseFloat(W),M=(W,$)=>W&&$&&T(W)&&T($)?a().duration(a()(W).diff(a()($))).asWeeks():null,w=a().duration(a()(a().now()).diff(a()(m.life_expectancy_stamp))).asWeeks(),D=M(m.life_expectancy_max,m.life_expectancy_stamp),U=M(m.life_expectancy_min,m.life_expectancy_stamp);return m.state=w>1?"stale":null!==D&&D<=2?"bad":null!==U&&U<=4?"warning":"good",m.life_expectancy_weeks={max:null!==D?Math.round(D):null,min:null!==U?Math.round(U):null},m}readable(m){return m.readableDaemons=m.daemons.join(" "),m}prepareDevice(m){return this.readable(this.calculateAdditionalData(m))}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275prov=c.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},72625:(E,C,s)=>{"use strict";s.d(C,{R:()=>T});var r=s(26215),a=s(45435),c=s(88002),u=s(28049),e=s(74255),f=s(64537),m=s(24310);let T=(()=>{class M{constructor(D,U){this.summaryservice=D,this.cephReleaseNamePipe=U,this.releaseDataSource=new r.X(null),this.releaseData$=this.releaseDataSource.asObservable(),this.summaryservice.subscribeOnce(W=>{const $=this.cephReleaseNamePipe.transform(W.version);this.releaseDataSource.next($)})}urlGenerator(D,U="main"){const $=`https://docs.ceph.com/en/${"main"===U?"latest":U}/`,J="https://ceph.io";return{iscsi:`${$}mgr/dashboard/#enabling-iscsi-management`,prometheus:`${$}mgr/dashboard/#enabling-prometheus-alerting`,"nfs-ganesha":`${$}mgr/dashboard/#configuring-nfs-ganesha-in-the-dashboard`,"rgw-nfs":`${$}radosgw/nfs`,rgw:`${$}mgr/dashboard/#enabling-the-object-gateway-management-frontend`,"rgw-multisite":`${$}/radosgw/multisite/#failover-and-disaster-recovery`,multisite:`${$}/radosgw/multisite`,dashboard:`${$}mgr/dashboard`,grafana:`${$}mgr/dashboard/#enabling-the-embedding-of-grafana-dashboards`,orch:`${$}mgr/orchestrator`,pgs:"https://old.ceph.com/pgcalc",help:`${J}/en/users/`,security:`${J}/en/security/`,trademarks:`${J}/en/trademarks/`,"dashboard-landing-page-status":`${$}mgr/dashboard/#dashboard-landing-page-status`,"dashboard-landing-page-performance":`${$}mgr/dashboard/#dashboard-landing-page-performance`,"dashboard-landing-page-capacity":`${$}mgr/dashboard/#dashboard-landing-page-capacity`}[D]}subscribeOnce(D,U,W){return this.releaseData$.pipe((0,a.h)($=>!!$),(0,c.U)($=>this.urlGenerator(D,$)),(0,u.P)()).subscribe(U,W)}}return M.\u0275fac=function(D){return new(D||M)(f.LFG(e.J),f.LFG(m.t))},M.\u0275prov=f.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})()},4222:(E,C,s)=>{"use strict";s.d(C,{T:()=>e});var r=s(88002),a=s(26504),c=s(64537),u=s(89154);let e=(()=>{class f{constructor(T){this.featureToggles=T}canActivate(T){return this.featureToggles.get().pipe((0,r.U)(M=>{if(!1===M[T.routeConfig.path])throw new a._2;return!0}))}canActivateChild(T){return this.canActivate(T.parent)}}return f.\u0275fac=function(T){return new(T||f)(c.LFG(u.l))},f.\u0275prov=c.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})()},89154:(E,C,s)=>{"use strict";s.d(C,{l:()=>e});var r=s(64537),a=s(35732),c=s(36848);let e=(()=>{class f{constructor(T,M){this.http=T,this.timerService=M,this.API_URL="api/feature_toggles",this.REFRESH_INTERVAL=3e4,this.featureToggleMap$=this.timerService.get(()=>this.http.get(this.API_URL),this.REFRESH_INTERVAL)}get(){return this.featureToggleMap$}}return f.\u0275fac=function(T){return new(T||f)(r.LFG(a.eN),r.LFG(c.f))},f.\u0275prov=r.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})()},28211:(E,C,s)=>{"use strict";s.d(C,{H:()=>u});var r=s(23815),a=s.n(r),c=s(64537);let u=(()=>{class e{format_number(m,T,M,w=1){if(a().isString(m)&&(m=Number(m)),!a().isNumber(m))return"-";if(a().isNaN(m))return"N/A";let D=m<1?0:Math.floor(Math.log(m)/Math.log(T));D=D>=M.length?M.length-1:D;let U=a().round(m/Math.pow(T,D),w).toString();return""===U?"-":(""!==M[D]&&(U=`${U} ${M[D]}`),U)}formatNumberFromTo(m,T,M="",w,D,U=1){if(a().isString(m)&&(m=Number(m)),!a().isNumber(m))return"-";const W=D.map(X=>X.toLowerCase());if(!W.includes(T.toLowerCase())||!W.includes(M.toLowerCase()))return`${m} ${T}`;const $=W.indexOf(T.toLowerCase())-W.indexOf(M.toLocaleLowerCase()),J=$>0?m*Math.pow(w,$):m/Math.pow(w,Math.abs($));let F=a().round(J,U).toString();return F=`${F} ${M}`,F}toBytes(m,T=null){const w=["b","k","m","g","t","p","e","z","y"],D=RegExp("^(\\d+(.\\d+)?) ?(["+w.join("")+"]?(b|ib|B/s)?)?$","i").exec(m);if(null===D)return T;let U=parseFloat(D[1]);return a().isString(D[3])&&(U*=Math.pow(1024,w.indexOf(D[3].toLowerCase()[0]))),Math.round(U)}toMilliseconds(m){const M=/^\s*(\d+)\s*(ms)?\s*$/i.exec(m);return null!==M?+M[1]:0}toIops(m){const M=/^\s*(\d+)\s*(IOPS)?\s*$/i.exec(m);return null!==M?+M[1]:0}toOctalPermission(m){const T=["owner","group","others"];let M="";for(const w of T){let D=0;const U=m[w];U&&(U.includes("read")&&(D+=4),U.includes("write")&&(D+=2),U.includes("execute")&&(D+=1)),M+=D.toString()}return M}}return e.\u0275fac=function(m){return new(m||e)},e.\u0275prov=c.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},63285:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});var r=s(64537),a=s(51389);let c=(()=>{class u{constructor(f){this.modal=f}show(f,m,T){const M=this.modal.open(f,T);return m&&Object.assign(M.componentInstance,m),M}dismissAll(){this.modal.dismissAll()}hasOpenModals(){return this.modal.hasOpenModals()}}return u.\u0275fac=function(f){return new(f||u)(r.LFG(a.FF))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},54462:(E,C,s)=>{"use strict";s.d(C,{P:()=>M});var r=s(25917),a=s(88002),c=s(5304),u=s(65862),e=s(64537),f=s(35732),m=s(54247),T=s(7273);let M=(()=>{class w{constructor(U,W,$){this.http=U,this.router=W,this.mgrModuleService=$}canActivate(U){return this.doCheck(U)}canActivateChild(U){return this.doCheck(U)}doCheck(U){if(U.url.length>0&&w.ALLOWLIST.includes(U.url[0].path))return(0,r.of)(!0);const W=U.data.moduleStatusGuardConfig;let $=!1;return W.backend&&this.mgrModuleService.getConfig("orchestrator").subscribe(J=>{$=W.backend===J.orchestrator},()=>(this.router.navigate([W.redirectTo]),(0,r.of)(!1))),this.http.get(`ui-api/${W.uiApiPath}/status`).pipe((0,a.U)(J=>(!J.available&&!$&&this.router.navigate([W.redirectTo||""],{state:{header:W.header,message:J.message,section:W.section,section_info:W.section_info,button_name:W.button_name,button_route:W.button_route,button_title:W.button_title,secondary_button_name:W.secondary_button_name,secondary_button_route:W.secondary_button_route,secondary_button_title:W.secondary_button_title,uiConfig:W.uiConfig,uiApiPath:W.uiApiPath,icon:u.P.wrench,component:W.component}}),J.available)),(0,c.K)(()=>(this.router.navigate([W.redirectTo]),(0,r.of)(!1))))}}return w.ALLOWLIST=["501"],w.\u0275fac=function(U){return new(U||w)(e.LFG(f.eN),e.LFG(m.F0),e.LFG(T.N))},w.\u0275prov=e.Yz7({token:w,factory:w.\u0275fac,providedIn:"root"}),w})()},97161:(E,C,s)=>{"use strict";s.d(C,{g:()=>D});var r=s(23815),a=s.n(r),c=s(26215),u=s(79765),e=s(18001),f=s(61355),m=s(57924),T=s(64537),M=s(23122),w=s(96102);let D=(()=>{class U{constructor($,J,F){this.toastr=$,this.taskMessageService=J,this.cdDatePipe=F,this.hideToasties=!1,this.dataSource=new c.X([]),this.data$=this.dataSource.asObservable(),this.sidebarSubject=new u.xQ,this.queued=[],this.KEY="cdNotifications";const X=localStorage.getItem(this.KEY);let de=[];a().isString(X)&&(de=JSON.parse(X,(V,ce)=>a().isPlainObject(ce)?a().assign(new f.e,ce):ce)),this.dataSource.next(de)}removeAll(){localStorage.removeItem(this.KEY),this.dataSource.next([])}remove($){const J=this.dataSource.getValue();J.splice($,1),this.dataSource.next(J),localStorage.setItem(this.KEY,JSON.stringify(J))}save($){const J=this.dataSource.getValue();for(J.push($),J.sort((F,X)=>F.timestamp>X.timestamp?-1:1);J.length>10;)J.pop();this.dataSource.next(J),localStorage.setItem(this.KEY,JSON.stringify(J))}show($,J,F,X,de){return window.setTimeout(()=>{let V;V=a().isFunction($)?$():a().isObject($)?$:new f.T($,J,F,X,de),this.queueToShow(V)},10)}queueToShow($){this.cancel(this.queuedTimeoutId),this.queued.find(J=>a().isEqual(J,$))||this.queued.push($),this.queuedTimeoutId=window.setTimeout(()=>{this.showQueued()},500)}showQueued(){this.getUnifiedTitleQueue().forEach($=>{const J=new f.e($);J.isFinishedTask||this.save(J),this.showToasty(J)})}getUnifiedTitleQueue(){return Object.values(this.queueShiftByTitle()).map($=>{const J=$[0];return $.length>1&&(J.message="<ul>"+$.map(F=>`<li>${F.message}</li>`).join("")+"</ul>"),J})}queueShiftByTitle(){const $={};let J;for(;J=this.queued.shift();)$[J.title]||($[J.title]=[]),$[J.title].push(J);return $}showToasty($){this.hideToasties||this.toastr[["error","info","success"][$.type]](($.message?$.message+"<br>":"")+this.renderTimeAndApplicationHtml($),$.title,$.options)}renderTimeAndApplicationHtml($){return`<small class="date">${this.cdDatePipe.transform($.timestamp)}</small><i class="float-end custom-icon ${$.applicationClass}" title="${$.application}"></i>`}notifyTask($,J=!0){const F=this.finishedTaskToNotification($,J);return F.isFinishedTask=!0,this.show(F)}finishedTaskToNotification($,J=!0){let F;return F=$.success&&J?new f.T(e.k.success,this.taskMessageService.getSuccessTitle($)):new f.T(e.k.error,this.taskMessageService.getErrorTitle($),this.taskMessageService.getErrorMessage($)),F.isFinishedTask=!0,F}cancel($){window.clearTimeout($)}suspendToasties($){this.hideToasties=$}toggleSidebar($=!1){this.sidebarSubject.next($)}}return U.\u0275fac=function($){return new($||U)(T.LFG(M._W),T.LFG(m.p),T.LFG(w.N))},U.\u0275prov=T.Yz7({token:U,factory:U.\u0275fac,providedIn:"root"}),U})()},81354:(E,C,s)=>{"use strict";s.d(C,{q:()=>m});var r=s(23815),a=s.n(r),c=s(88002),u=s(9837);class e{constructor(M){this.pwdPolicyEnabled=M.pwd_policy_enabled,this.pwdPolicyMinLength=M.pwd_policy_min_length,this.pwdPolicyCheckLengthEnabled=M.pwd_policy_check_length_enabled,this.pwdPolicyCheckOldpwdEnabled=M.pwd_policy_check_oldpwd_enabled,this.pwdPolicyCheckUsernameEnabled=M.pwd_policy_check_username_enabled,this.pwdPolicyCheckExclusionListEnabled=M.pwd_policy_check_exclusion_list_enabled,this.pwdPolicyCheckRepetitiveCharsEnabled=M.pwd_policy_check_repetitive_chars_enabled,this.pwdPolicyCheckSequentialCharsEnabled=M.pwd_policy_check_sequential_chars_enabled,this.pwdPolicyCheckComplexityEnabled=M.pwd_policy_check_complexity_enabled}}var f=s(64537);let m=(()=>{class T{constructor(w){this.settingsService=w}getHelpText(){return this.settingsService.getStandardSettings().pipe((0,c.U)(w=>{const D=new e(w);let U=[];if(D.pwdPolicyEnabled){U.push("Required rules for passwords:");const W={pwdPolicyCheckLengthEnabled:"Must contain at least " + D.pwdPolicyMinLength + " characters",pwdPolicyCheckOldpwdEnabled:"Must not be the same as the previous one",pwdPolicyCheckUsernameEnabled:"Cannot contain the username",pwdPolicyCheckExclusionListEnabled:"Cannot contain any configured keyword",pwdPolicyCheckRepetitiveCharsEnabled:"Cannot contain any repetitive characters e.g. \"aaa\"",pwdPolicyCheckSequentialCharsEnabled:"Cannot contain any sequential characters e.g. \"abc\"",pwdPolicyCheckComplexityEnabled:"Must consist of characters from the following groups:\n  * Alphabetic a-z, A-Z\n  * Numbers 0-9\n  * Special chars: !\"#$%& '()*+,-./:;<=>?@[\\]^_`{{|}}~\n  * Any other characters (signs)"};U=U.concat(a().keys(W).filter($=>a().get(D,$)).map($=>"- "+a().get(W,$)))}return U.join("\n")}))}mapCreditsToCssClass(w){let D="very-strong";return w<10?D="too-weak":w<15?D="weak":w<20?D="ok":w<25&&(D="strong"),D}}return T.\u0275fac=function(w){return new(w||T)(f.LFG(u.g))},T.\u0275prov=f.Yz7({token:T,factory:T.\u0275fac,providedIn:"root"}),T})()},34089:(E,C,s)=>{"use strict";s.d(C,{n:()=>c});var r=s(30633),a=s(64537);let c=(()=>{class u{constructor(){this.sections=[{heading:"Quality of Service",class:"quality-of-service",options:[{name:"rbd_qos_bps_limit",displayName:"BPS Limit",description:"The desired limit of IO bytes per second.",type:r.r.bps},{name:"rbd_qos_iops_limit",displayName:"IOPS Limit",description:"The desired limit of IO operations per second.",type:r.r.iops},{name:"rbd_qos_read_bps_limit",displayName:"Read BPS Limit",description:"The desired limit of read bytes per second.",type:r.r.bps},{name:"rbd_qos_read_iops_limit",displayName:"Read IOPS Limit",description:"The desired limit of read operations per second.",type:r.r.iops},{name:"rbd_qos_write_bps_limit",displayName:"Write BPS Limit",description:"The desired limit of write bytes per second.",type:r.r.bps},{name:"rbd_qos_write_iops_limit",displayName:"Write IOPS Limit",description:"The desired limit of write operations per second.",type:r.r.iops},{name:"rbd_qos_bps_burst",displayName:"BPS Burst",description:"The desired burst limit of IO bytes.",type:r.r.bps},{name:"rbd_qos_iops_burst",displayName:"IOPS Burst",description:"The desired burst limit of IO operations.",type:r.r.iops},{name:"rbd_qos_read_bps_burst",displayName:"Read BPS Burst",description:"The desired burst limit of read bytes.",type:r.r.bps},{name:"rbd_qos_read_iops_burst",displayName:"Read IOPS Burst",description:"The desired burst limit of read operations.",type:r.r.iops},{name:"rbd_qos_write_bps_burst",displayName:"Write BPS Burst",description:"The desired burst limit of write bytes.",type:r.r.bps},{name:"rbd_qos_write_iops_burst",displayName:"Write IOPS Burst",description:"The desired burst limit of write operations.",type:r.r.iops}]}]}static getOptionsFromSections(f){return f.map(m=>m.options).reduce((m,T)=>m.concat(T))}filterConfigOptionsByName(f){return u.getOptionsFromSections(this.sections).filter(m=>m.name===f)}getOptionValueByName(f,m,T=""){const M=this.filterConfigOptionsByName(f);return 1===M.length?M.pop()[m]:T}getWritableSections(){return this.sections.map(f=>(f.options=f.options.filter(m=>!m.readOnly),f))}getOptionFields(){return u.getOptionsFromSections(this.sections)}getWritableOptionFields(){return u.getOptionsFromSections(this.getWritableSections())}getOptionByName(f){return this.filterConfigOptionsByName(f).pop()}getDisplayName(f){return this.getOptionValueByName(f,"displayName")}getDescription(f){return this.getOptionValueByName(f,"description")}}return u.\u0275fac=function(f){return new(f||u)},u.\u0275prov=a.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},98677:(E,C,s)=>{"use strict";s.d(C,{s:()=>T});var r=s(26215),a=s(70882),c=s(33637),u=s(26561);function f(M){const{subscriber:w,counter:D,period:U}=M;w.next(D),this.schedule({subscriber:w,counter:D+1,period:U},U)}var m=s(64537);let T=(()=>{class M{constructor(D){this.ngZone=D,this.intervalDataSource=new r.X(null),this.intervalData$=this.intervalDataSource.asObservable();const U=parseInt(sessionStorage.getItem("dashboard_interval"),10)||5e3;this.setRefreshInterval(U)}setRefreshInterval(D){this.intervalTime=D,sessionStorage.setItem("dashboard_interval",D.toString()),this.intervalSubscription&&this.intervalSubscription.unsubscribe(),this.ngZone.runOutsideAngular(()=>{this.intervalSubscription=function e(M=0,w=c.P){return(!(0,u.k)(M)||M<0)&&(M=0),(!w||"function"!=typeof w.schedule)&&(w=c.P),new a.y(D=>(D.add(w.schedule(f,M,{subscriber:D,counter:0,period:M})),D))}(this.intervalTime).subscribe(()=>this.ngZone.run(()=>{this.intervalDataSource.next(this.intervalTime)}))})}getRefreshInterval(){return this.intervalTime}ngOnDestroy(){this.intervalSubscription&&this.intervalSubscription.unsubscribe()}}return M.\u0275fac=function(D){return new(D||M)(m.LFG(m.R0b))},M.\u0275prov=m.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})()},74255:(E,C,s)=>{"use strict";s.d(C,{J:()=>M});var r=s(23815),a=s.n(r),c=s(26215),u=s(45435),e=s(28049),f=s(64537),m=s(35732),T=s(36848);let M=(()=>{class w{constructor(U,W){this.http=U,this.timerService=W,this.REFRESH_INTERVAL=5e3,this.summaryDataSource=new c.X(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/summary")}retrieveSummaryObserver(){return U=>{this.summaryDataSource.next(U)}}subscribeOnce(U,W){return this.summaryData$.pipe((0,u.h)($=>!!$),(0,e.P)()).subscribe(U,W)}subscribe(U,W){return this.summaryData$.pipe((0,u.h)($=>!!$)).subscribe(U,W)}addRunningTask(U){const W=this.summaryDataSource.getValue();W&&(a().isArray(W.executing_tasks)?W.executing_tasks.find(J=>J.name===U.name&&a().isEqual(J.metadata,U.metadata))||W.executing_tasks.push(U):W.executing_tasks=[U],this.summaryDataSource.next(W))}}return w.\u0275fac=function(U){return new(U||w)(f.LFG(m.eN),f.LFG(T.f))},w.\u0275prov=f.Yz7({token:w,factory:w.\u0275fac,providedIn:"root"}),w})()},38047:(E,C,s)=>{"use strict";s.d(C,{j:()=>u});var r=s(74255),a=s(57924),c=s(64537);let u=(()=>{class e{constructor(m,T){this.taskMessageService=m,this.summaryService=T}init(m,T,M,w,D,U,W){this.getUpdate=m,this.preProcessing=T,this.setList=M,this.onFetchError=w,this.taskFilter=D,this.itemFilter=U,this.builders=W||{},this.summaryDataSubscription=this.summaryService.subscribe($=>{this.summary=$,this.fetch()},this.onFetchError)}fetch(m=null){this.getUpdate(m).subscribe(T=>{this.updateData(T,this.summary?.executing_tasks.filter(this.taskFilter))},this.onFetchError)}updateData(m,T){const M=this.preProcessing?this.preProcessing(m):m;this.addMissing(M,T),M.forEach(w=>{const D=T.filter(U=>this.itemFilter(w,U));w.cdExecuting=this.getTaskAction(D)}),this.setList(M)}addMissing(m,T){const M=this.builders.default;T?.forEach(w=>{const D=m.find(W=>this.itemFilter(W,w)),U=this.builders[w.name];!D&&(U||M)&&m.push(U?U(w.metadata):M(w.metadata))})}getTaskAction(m){if(0!==m.length)return m.map(T=>{const M=T.progress?` ${T.progress}%`:"";return this.taskMessageService.getRunningText(T)+"..."+M}).join(", ")}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}}return e.\u0275fac=function(m){return new(m||e)(c.LFG(a.p),c.LFG(r.J))},e.\u0275prov=c.Yz7({token:e,factory:e.\u0275fac}),e})()},71099:(E,C,s)=>{"use strict";s.d(C,{k:()=>e});var r=s(23815),a=s.n(r),c=s(64537);class u{constructor(m,T,M){this.name=m,this.metadata=T,this.onTaskFinished=M}}let e=(()=>{class f{constructor(){this.subscriptions=[]}init(T){return T.subscribe(M=>{const w=M.executing_tasks,D=M.finished_tasks,U=[];for(const W of this.subscriptions){const $=this._getTask(W,D),J=this._getTask(W,w);null!==$&&null===J&&W.onTaskFinished($),null!==J&&U.push(W),this.subscriptions=U}})}subscribe(T,M,w){this.subscriptions.push(new u(T,M,w))}_getTask(T,M){for(const w of M)if(w.name===T.name&&a().isEqual(w.metadata,T.metadata))return w;return null}}return f.\u0275fac=function(T){return new(T||f)},f.\u0275prov=c.Yz7({token:f,factory:f.\u0275fac,providedIn:"root"}),f})()},57924:(E,C,s)=>{"use strict";s.d(C,{p:()=>T});var r=s(23815),a=s.n(r),c=(()=>{return(M=c||(c={})).auth="Login",M.cephfs="CephFS",M.rbd="RBD",M.pool="Pool",M.osd="OSD",M.role="Role",M.user="User",c;var M})(),u=s(19358),e=s(64537);class f{constructor(w,D,U){this.running=w,this.failure=D,this.success=U}}class m{failure(w){return "Failed to " + this.operation.failure + " " + this.involves(w) + ""}running(w){return`${this.operation.running} ${this.involves(w)}`}success(w){return`${this.operation.success} ${this.involves(w)}`}constructor(w,D,U){this.operation=w,this.involves=D,this.errors=U||(()=>({}))}}let T=(()=>{class M{constructor(){this.defaultMessage=this.newTaskMessage(new f("Executing","execute","Executed"),D=>D&&(c[D.component]||D.component)||"unknown task",()=>({})),this.commonOperations={create:new f("Creating","create","Created"),update:new f("Updating","update","Updated"),delete:new f("Deleting","delete","Deleted"),add:new f("Adding","add","Added"),remove:new f("Removing","remove","Removed"),import:new f("Importing","import","Imported")},this.rbd={default:D=>"RBD '" + D.image_spec + "'",create:D=>{const U=new u.N(D.pool_name,D.namespace,D.image_name).toString();return "RBD '" + U + "'"},child:D=>{const U=new u.N(D.child_pool_name,D.child_namespace,D.child_image_name).toString();return "RBD '" + U + "'"},destination:D=>{const U=new u.N(D.dest_pool_name,D.dest_namespace,D.dest_image_name).toString();return "RBD '" + U + "'"},snapshot:D=>"RBD snapshot '" + D.image_spec + "@" + D.snapshot_name + "'"},this.rbd_mirroring={site_name:()=>"mirroring site name",bootstrap:()=>"bootstrap token",pool:D=>"mirror mode for pool '" + D.pool_name + "'",pool_peer:D=>"mirror peer for pool '" + D.pool_name + "'"},this.grafana={update_dashboards:()=>"all dashboards"},this.messages={"host/add":this.newTaskMessage(this.commonOperations.add,D=>this.host(D)),"host/remove":this.newTaskMessage(this.commonOperations.remove,D=>this.host(D)),"host/identify_device":this.newTaskMessage(new f("Identifying","identify","Identified"),D=>"device '" + D.device + "' on host '" + D.hostname + "'"),"osd/create":this.newTaskMessage(this.commonOperations.create,D=>"OSDs (DriveGroups: " + D.tracking_id + ")"),"osd/delete":this.newTaskMessage(this.commonOperations.delete,D=>this.osd(D)),"pool/create":this.newTaskMessage(this.commonOperations.create,D=>this.pool(D),D=>({17:"Name is already used by " + this.pool(D) + "."})),"pool/edit":this.newTaskMessage(this.commonOperations.update,D=>this.pool(D),D=>({17:"Name is already used by " + this.pool(D) + "."})),"pool/delete":this.newTaskMessage(this.commonOperations.delete,D=>this.pool(D)),"ecp/create":this.newTaskMessage(this.commonOperations.create,D=>this.ecp(D),D=>({17:"Name is already used by " + this.ecp(D) + "."})),"ecp/delete":this.newTaskMessage(this.commonOperations.delete,D=>this.ecp(D)),"crushRule/create":this.newTaskMessage(this.commonOperations.create,D=>this.crushRule(D),D=>({17:"Name is already used by " + this.crushRule(D) + "."})),"crushRule/delete":this.newTaskMessage(this.commonOperations.delete,D=>this.crushRule(D)),"rbd/create":this.newTaskMessage(this.commonOperations.create,this.rbd.create,D=>({17:"Name is already used by " + this.rbd.create(D) + "."})),"rbd/edit":this.newTaskMessage(this.commonOperations.update,this.rbd.default,D=>({17:"Name is already used by " + this.rbd.default(D) + "."})),"rbd/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd.default,D=>({16:"" + this.rbd.default(D) + " is busy.",39:"" + this.rbd.default(D) + " contains snapshots."})),"rbd/clone":this.newTaskMessage(new f("Cloning","clone","Cloned"),this.rbd.child,D=>({17:"Name is already used by " + this.rbd.child(D) + ".",22:"Snapshot of " + this.rbd.child(D) + " must be protected."})),"rbd/copy":this.newTaskMessage(new f("Copying","copy","Copied"),this.rbd.destination,D=>({17:"Name is already used by " + this.rbd.destination(D) + "."})),"rbd/flatten":this.newTaskMessage(new f("Flattening","flatten","Flattened"),this.rbd.default),"rbd/snap/create":this.newTaskMessage(this.commonOperations.create,this.rbd.snapshot,D=>({17:"Name is already used by " + this.rbd.snapshot(D) + "."})),"rbd/snap/edit":this.newTaskMessage(this.commonOperations.update,this.rbd.snapshot,D=>({16:"Cannot unprotect " + this.rbd.snapshot(D) + " because it contains child images."})),"rbd/snap/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd.snapshot,D=>({16:"Cannot delete " + this.rbd.snapshot(D) + " because it's protected."})),"rbd/snap/rollback":this.newTaskMessage(new f("Rolling back","rollback","Rolled back"),this.rbd.snapshot),"rbd/trash/move":this.newTaskMessage(new f("Moving","move","Moved"),D=>"image '" + D.image_spec + "' to trash",()=>({2:"Could not find image."})),"rbd/trash/restore":this.newTaskMessage(new f("Restoring","restore","Restored"),D=>"image '" + D.image_id_spec + "' into '" + D.new_image_name + "'",D=>({17:"Image name '" + D.new_image_name + "' is already in use."})),"rbd/trash/remove":this.newTaskMessage(new f("Deleting","delete","Deleted"),D=>"image '" + D.image_id_spec + "'"),"rbd/trash/purge":this.newTaskMessage(new f("Purging","purge","Purged"),D=>{let U="all pools";return D.pool_name&&(U=`'${D.pool_name}'`),"images from " + U + ""}),"rbd/mirroring/site_name/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.site_name,()=>({})),"rbd/mirroring/bootstrap/create":this.newTaskMessage(this.commonOperations.create,this.rbd_mirroring.bootstrap,()=>({})),"rbd/mirroring/bootstrap/import":this.newTaskMessage(this.commonOperations.import,this.rbd_mirroring.bootstrap,()=>({})),"rbd/mirroring/pool/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.pool,()=>({16:"Cannot disable mirroring because it contains a peer."})),"rbd/mirroring/peer/add":this.newTaskMessage(this.commonOperations.create,this.rbd_mirroring.pool_peer,()=>({})),"rbd/mirroring/peer/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.pool_peer,()=>({})),"rbd/mirroring/peer/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd_mirroring.pool_peer,()=>({})),"iscsi/target/create":this.newTaskMessage(this.commonOperations.create,D=>this.iscsiTarget(D)),"iscsi/target/edit":this.newTaskMessage(this.commonOperations.update,D=>this.iscsiTarget(D)),"iscsi/target/delete":this.newTaskMessage(this.commonOperations.delete,D=>this.iscsiTarget(D)),"nfs/create":this.newTaskMessage(this.commonOperations.create,D=>this.nfs(D)),"nfs/edit":this.newTaskMessage(this.commonOperations.update,D=>this.nfs(D)),"nfs/delete":this.newTaskMessage(this.commonOperations.delete,D=>this.nfs(D)),"grafana/dashboards/update":this.newTaskMessage(this.commonOperations.update,this.grafana.update_dashboards,()=>({})),"service/create":this.newTaskMessage(this.commonOperations.create,D=>this.service(D)),"service/edit":this.newTaskMessage(this.commonOperations.update,D=>this.service(D)),"service/delete":this.newTaskMessage(this.commonOperations.delete,D=>this.service(D)),"crud-component/create":this.newTaskMessage(this.commonOperations.create,D=>this.crudMessage(D)),"crud-component/edit":this.newTaskMessage(this.commonOperations.update,D=>this.crudMessage(D)),"crud-component/import":this.newTaskMessage(this.commonOperations.import,D=>this.crudMessage(D)),"crud-component/id":this.newTaskMessage(this.commonOperations.delete,D=>this.crudMessageId(D)),"cephfs/create":this.newTaskMessage(this.commonOperations.create,D=>this.volume(D)),"cephfs/edit":this.newTaskMessage(this.commonOperations.update,D=>this.volume(D)),"cephfs/remove":this.newTaskMessage(this.commonOperations.remove,D=>this.volume(D)),"cephfs/subvolume/create":this.newTaskMessage(this.commonOperations.create,D=>this.subvolume(D)),"cephfs/subvolume/edit":this.newTaskMessage(this.commonOperations.update,D=>this.subvolume(D)),"cephfs/subvolume/remove":this.newTaskMessage(this.commonOperations.remove,D=>this.subvolume(D)),"cephfs/subvolume/group/create":this.newTaskMessage(this.commonOperations.create,D=>this.subvolumegroup(D)),"cephfs/subvolume/group/edit":this.newTaskMessage(this.commonOperations.update,D=>this.subvolumegroup(D)),"cephfs/subvolume/group/remove":this.newTaskMessage(this.commonOperations.remove,D=>this.subvolumegroup(D))}}newTaskMessage(D,U,W){return new m(D,U,W)}host(D){return "host '" + D.hostname + "'"}osd(D){return "OSD '" + D.svc_id + "'"}pool(D){return "pool '" + D.pool_name + "'"}ecp(D){return "erasure code profile '" + D.name + "'"}crushRule(D){return "crush rule '" + D.name + "'"}iscsiTarget(D){return "target '" + D.target_iqn + "'"}nfs(D){return "NFS '" + D.cluster_id + ":" + (D.export_id ? D.export_id : D.path) + "'"}service(D){return "Service '" + D.service_name + "'"}crudMessage(D){let U=D.__message;return a().forEach(D,(W,$)=>{"__message"!=$&&(U=U.replace("{"+$+"}",W))}),"" + U + ""}volume(D){return "'" + D.volumeName + "'"}subvolume(D){return "subvolume '" + D.subVolumeName + "'"}subvolumegroup(D){return "subvolume group '" + D.subvolumegroupName + "'"}crudMessageId(D){return "" + D + ""}_getTaskTitle(D){return D.name&&D.name.startsWith("progress/")?this.newTaskMessage(new f(D.name.replace("progress/",""),"",D.name.replace("progress/","")),U=>""):this.messages[D.name]||this.defaultMessage}getSuccessTitle(D){return this._getTaskTitle(D).success(D.metadata)}getErrorMessage(D){return this._getTaskTitle(D).errors(D.metadata)[D.exception.code]||D.exception.detail}getErrorTitle(D){return this._getTaskTitle(D).failure(D.metadata)}getRunningTitle(D){return this._getTaskTitle(D).running(D.metadata)}getRunningText(D){return this._getTaskTitle(D).operation.running}}return M.\u0275fac=function(D){return new(D||M)},M.\u0275prov=e.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})()},32337:(E,C,s)=>{"use strict";s.d(C,{P:()=>w});var r=s(70882),a=s(18001),c=s(61355),u=s(60737),e=s(97161),f=s(74255),m=s(71099),T=s(57924),M=s(64537);let w=(()=>{class D{constructor(W,$,J,F){this.notificationService=W,this.summaryService=$,this.taskMessageService=J,this.taskManagerService=F}wrapTaskAroundCall({task:W,call:$}){return new r.y(J=>{$.subscribe(F=>{202===F.status?this._handleExecutingTasks(W):(this.summaryService.refresh(),W.success=!0,this.notificationService.notifyTask(W))},F=>{W.success=!1,W.exception=F.error,J.error(F)},()=>{J.complete()})})}_handleExecutingTasks(W){const $=new c.T(a.k.info,this.taskMessageService.getRunningTitle(W));$.isFinishedTask=!0,this.notificationService.show($);const J=new u.o(W.name,W.metadata);this.summaryService.addRunningTask(J),this.taskManagerService.subscribe(J.name,J.metadata,F=>{this.notificationService.notifyTask(F)})}}return D.\u0275fac=function(W){return new(W||D)(M.LFG(e.g),M.LFG(f.J),M.LFG(T.p),M.LFG(m.k))},D.\u0275prov=M.Yz7({token:D,factory:D.\u0275fac,providedIn:"root"}),D})()},36848:(E,C,s)=>{"use strict";s.d(C,{f:()=>U});var r=s(46797),a=s(59746),c=s(43190),u=s(47349),e=s(2817),f=s(64537),m=s(33637);class T{constructor($){this.zone=$,this.scheduler=m.z}now(){return this.scheduler.now()}}let M=(()=>{class W extends T{constructor(J){super(J)}schedule(...J){return this.zone.runOutsideAngular(()=>this.scheduler.schedule.apply(this.scheduler,J))}}return W.\u0275fac=function(J){return new(J||W)(f.LFG(f.R0b))},W.\u0275prov=f.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})(),w=(()=>{class W extends T{constructor(J){super(J)}schedule(...J){return this.zone.run(()=>this.scheduler.schedule.apply(this.scheduler,J))}}return W.\u0275fac=function(J){return new(J||W)(f.LFG(f.R0b))},W.\u0275prov=f.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})(),D=(()=>{class W{constructor(J,F){this.leave=J,this.enter=F}}return W.\u0275fac=function(J){return new(J||W)(f.LFG(M),f.LFG(w))},W.\u0275prov=f.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})(),U=(()=>{class W{constructor(J){this.ngZone=J,this.DEFAULT_REFRESH_INTERVAL=5e3,this.DEFAULT_DUE_TIME=0}get(J,F=this.DEFAULT_REFRESH_INTERVAL,X=this.DEFAULT_DUE_TIME){return(0,r.H)(X,F,this.ngZone.leave).pipe((0,a.QV)(this.ngZone.enter),(0,c.w)(J),(0,u.d)({refCount:!0,bufferSize:1}),(0,e.r)())}}return W.\u0275fac=function(J){return new(J||W)(f.LFG(D))},W.\u0275prov=f.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})()},51847:(E,C,s)=>{"use strict";s.d(C,{F:()=>c});var r=s(88692),a=s(79512);class c{constructor(e){this.base=e}static concatURLSegments(e){return e.reduce(r.Ye.joinWithSlash)}static buildURL(e,...f){return c.concatURLSegments([...e?["/"]:[],...f])}getURL(e,f=!0,...m){return c.buildURL(f,this.base,e,...m)}getCreate(e=!0){return this.getURL(a.MQ.CREATE,e)}getCreateFrom(e,f=!0){return this.getURL(a.MQ.CREATE,f,e)}getDelete(e=!0){return this.getURL(a.MQ.DELETE,e)}getEdit(e,f=!0){return this.getURL(a.MQ.EDIT,f,e)}getUpdate(e,f=!0){return this.getURL(a.MQ.UPDATE,f,e)}getAdd(e=!0){return this.getURL(a.MQ.ADD,e)}getRemove(e=!0){return this.getURL(a.MQ.REMOVE,e)}getRecreate(e,f=!0){return this.getURL(a.MQ.RECREATE,f,e)}}},44466:(E,C,s)=>{"use strict";s.d(C,{m:()=>X});var r=s(88692),a=s(20092),c=s(13066),u=s(43765),e=s(99475),f=s(15626),m=s(40267),T=s(35540),M=s(12455),w=s(45510),D=s(47640),U=s(28211),W=s(67464),$=s(39017),J=s(39054),F=s(64537);let X=(()=>{class de{}return de.\u0275fac=function(ce){return new(ce||de)},de.\u0275mod=F.oAB({type:de}),de.\u0275inj=F.cJS({providers:[D.j,w.P,U.H,e.P],imports:[r.ez,M.D,f.K,m.t,T.o,a.UX,c.X0.forRoot({types:[{name:"array",component:W.l},{name:"object",component:$.o},{name:"input",component:J.v}],validationMessages:[{name:"required",message:"This field is required"}]}),u.z,f.K,M.D,m.t,T.o]}),de})()},92340:(E,C,s)=>{"use strict";s.d(C,{N:()=>r});const r={default_lang:"en-US",production:!0,year:"2023"}},43486:(E,C,s)=>{"use strict";var r={};s.r(r),s.d(r,{JsonPatchError:()=>Cf,_areEquals:()=>ZE,applyOperation:()=>fv,applyPatch:()=>p1,applyReducer:()=>o5,deepClone:()=>r5,getValueByPointer:()=>VE,validate:()=>iw,validator:()=>gC});var a={};s.r(a),s.d(a,{compare:()=>p5,generate:()=>VA,observe:()=>f5,unobserve:()=>d5});var c={};s.r(c),s.d(c,{cookie:()=>Ak,header:()=>Ok,path:()=>Tk,query:()=>Ck});var u=s(5998),e=s(64537),f=s(88692),m=s(35732),T=s(14091);function w(t){return new e.vHH(3e3,!1)}function ir(){return typeof window<"u"&&typeof window.document<"u"}function Qr(){return typeof process<"u"&&"[object process]"==={}.toString.call(process)}function jr(t){switch(t.length){case 0:return new T.ZN;case 1:return t[0];default:return new T.ZE(t)}}function br(t,i,n,o,l=new Map,_=new Map){const v=[],O=[];let P=-1,G=null;if(o.forEach(K=>{const oe=K.get("offset"),ue=oe==P,pe=ue&&G||new Map;K.forEach((ye,Ue)=>{let xe=Ue,ke=ye;if("offset"!==Ue)switch(xe=i.normalizePropertyName(xe,v),ke){case T.k1:ke=l.get(Ue);break;case T.l3:ke=_.get(Ue);break;default:ke=i.normalizeStyleValue(Ue,xe,ke,v)}pe.set(xe,ke)}),ue||O.push(pe),G=pe,P=oe}),v.length)throw function it(t){return new e.vHH(3502,!1)}();return O}function ht(t,i,n,o){switch(i){case"start":t.onStart(()=>o(n&&Wt(n,"start",t)));break;case"done":t.onDone(()=>o(n&&Wt(n,"done",t)));break;case"destroy":t.onDestroy(()=>o(n&&Wt(n,"destroy",t)))}}function Wt(t,i,n){const _=Tt(t.element,t.triggerName,t.fromState,t.toState,i||t.phaseName,n.totalTime??t.totalTime,!!n.disabled),v=t._data;return null!=v&&(_._data=v),_}function Tt(t,i,n,o,l="",_=0,v){return{element:t,triggerName:i,fromState:n,toState:o,phaseName:l,totalTime:_,disabled:!!v}}function wn(t,i,n){let o=t.get(i);return o||t.set(i,o=n),o}function jn(t){const i=t.indexOf(":");return[t.substring(1,i),t.slice(i+1)]}let hr=(t,i)=>!1,Oi=(t,i,n)=>[],Wi=null;function so(t){const i=t.parentNode||t.host;return i===Wi?null:i}(Qr()||typeof Element<"u")&&(ir()?(Wi=(()=>document.documentElement)(),hr=(t,i)=>{for(;i;){if(i===t)return!0;i=so(i)}return!1}):hr=(t,i)=>t.contains(i),Oi=(t,i,n)=>{if(n)return Array.from(t.querySelectorAll(i));const o=t.querySelector(i);return o?[o]:[]});let ii=null,mr=!1;const $i=hr,qr=Oi;let Dn=(()=>{class t{validateStyleProperty(n){return function pr(t){ii||(ii=function po(){return typeof document<"u"?document.body:null}()||{},mr=!!ii.style&&"WebkitAppearance"in ii.style);let i=!0;return ii.style&&!function Ei(t){return"ebkit"==t.substring(1,6)}(t)&&(i=t in ii.style,!i&&mr&&(i="Webkit"+t.charAt(0).toUpperCase()+t.slice(1)in ii.style)),i}(n)}matchesElement(n,o){return!1}containsElement(n,o){return $i(n,o)}getParentElement(n){return so(n)}query(n,o,l){return qr(n,o,l)}computeStyle(n,o,l){return l||""}animate(n,o,l,_,v,O=[],P){return new T.ZN(l,_)}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac}),t})(),Hn=(()=>{class t{}return t.NOOP=new Dn,t})();const jt=1e3,et="ng-enter",ze="ng-leave",an="ng-trigger",lt=".ng-trigger",Rt="ng-animating",Pe=".ng-animating";function qn(t){if("number"==typeof t)return t;const i=t.match(/^(-?[\.\d]+)(m?s)/);return!i||i.length<2?0:gr(parseFloat(i[1]),i[2])}function gr(t,i){return"s"===i?t*jt:t}function Pn(t,i,n){return t.hasOwnProperty("duration")?t:function _r(t,i,n){let l,_=0,v="";if("string"==typeof t){const O=t.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===O)return i.push(w()),{duration:0,delay:0,easing:""};l=gr(parseFloat(O[1]),O[2]);const P=O[3];null!=P&&(_=gr(parseFloat(P),O[4]));const G=O[5];G&&(v=G)}else l=t;if(!n){let O=!1,P=i.length;l<0&&(i.push(function D(){return new e.vHH(3100,!1)}()),O=!0),_<0&&(i.push(function U(){return new e.vHH(3101,!1)}()),O=!0),O&&i.splice(P,0,w())}return{duration:l,delay:_,easing:v}}(t,i,n)}function Pr(t,i={}){return Object.keys(t).forEach(n=>{i[n]=t[n]}),i}function tr(t){const i=new Map;return Object.keys(t).forEach(n=>{i.set(n,t[n])}),i}function Zt(t,i=new Map,n){if(n)for(let[o,l]of n)i.set(o,l);for(let[o,l]of t)i.set(o,l);return i}function dn(t,i,n){return n?i+":"+n+";":""}function Ge(t){let i="";for(let n=0;n<t.style.length;n++){const o=t.style.item(n);i+=dn(0,o,t.style.getPropertyValue(o))}for(const n in t.style)t.style.hasOwnProperty(n)&&!n.startsWith("_")&&(i+=dn(0,ti(n),t.style[n]));t.setAttribute("style",i)}function Ot(t,i,n){t.style&&(i.forEach((o,l)=>{const _=Ni(l);n&&!n.has(l)&&n.set(l,t.style[_]),t.style[_]=o}),Qr()&&Ge(t))}function mn(t,i){t.style&&(i.forEach((n,o)=>{const l=Ni(o);t.style[l]=""}),Qr()&&Ge(t))}function wr(t){return Array.isArray(t)?1==t.length?t[0]:(0,T.vP)(t):t}const Ci=new RegExp("{{\\s*(.+?)\\s*}}","g");function Ai(t){let i=[];if("string"==typeof t){let n;for(;n=Ci.exec(t);)i.push(n[1]);Ci.lastIndex=0}return i}function Ko(t,i,n){const o=t.toString(),l=o.replace(Ci,(_,v)=>{let O=i[v];return null==O&&(n.push(function $(t){return new e.vHH(3003,!1)}()),O=""),O.toString()});return l==o?t:l}function _s(t){const i=[];let n=t.next();for(;!n.done;)i.push(n.value),n=t.next();return i}const dr=/-+([a-z0-9])/g;function Ni(t){return t.replace(dr,(...i)=>i[1].toUpperCase())}function ti(t){return t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function ji(t,i,n){switch(i.type){case 7:return t.visitTrigger(i,n);case 0:return t.visitState(i,n);case 1:return t.visitTransition(i,n);case 2:return t.visitSequence(i,n);case 3:return t.visitGroup(i,n);case 4:return t.visitAnimate(i,n);case 5:return t.visitKeyframes(i,n);case 6:return t.visitStyle(i,n);case 8:return t.visitReference(i,n);case 9:return t.visitAnimateChild(i,n);case 10:return t.visitAnimateRef(i,n);case 11:return t.visitQuery(i,n);case 12:return t.visitStagger(i,n);default:throw function J(t){return new e.vHH(3004,!1)}()}}function Vi(t,i){return window.getComputedStyle(t)[i]}const ci="*";function _o(t,i){const n=[];return"string"==typeof t?t.split(/\s*,\s*/).forEach(o=>function go(t,i,n){if(":"==t[0]){const P=function es(t,i){switch(t){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(n,o)=>parseFloat(o)>parseFloat(n);case":decrement":return(n,o)=>parseFloat(o)<parseFloat(n);default:return i.push(function He(t){return new e.vHH(3016,!1)}()),"* => *"}}(t,n);if("function"==typeof P)return void i.push(P);t=P}const o=t.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(null==o||o.length<4)return n.push(function qe(t){return new e.vHH(3015,!1)}()),i;const l=o[1],_=o[2],v=o[3];i.push(ss(l,v));"<"==_[0]&&!(l==ci&&v==ci)&&i.push(ss(v,l))}(o,n,i)):n.push(t),n}const ts=new Set(["true","1"]),jo=new Set(["false","0"]);function ss(t,i){const n=ts.has(t)||jo.has(t),o=ts.has(i)||jo.has(i);return(l,_)=>{let v=t==ci||t==l,O=i==ci||i==_;return!v&&n&&"boolean"==typeof l&&(v=l?ts.has(t):jo.has(t)),!O&&o&&"boolean"==typeof _&&(O=_?ts.has(i):jo.has(i)),v&&O}}const Is=new RegExp("s*:selfs*,?","g");function la(t,i,n,o){return new jl(t).build(i,n,o)}class jl{constructor(i){this._driver=i}build(i,n,o){const l=new da(n);return this._resetContextStyleTimingState(l),ji(this,wr(i),l)}_resetContextStyleTimingState(i){i.currentQuerySelector="",i.collectedStyles=new Map,i.collectedStyles.set("",new Map),i.currentTime=0}visitTrigger(i,n){let o=n.queryCount=0,l=n.depCount=0;const _=[],v=[];return"@"==i.name.charAt(0)&&n.errors.push(function X(){return new e.vHH(3006,!1)}()),i.definitions.forEach(O=>{if(this._resetContextStyleTimingState(n),0==O.type){const P=O,G=P.name;G.toString().split(/\s*,\s*/).forEach(K=>{P.name=K,_.push(this.visitState(P,n))}),P.name=G}else if(1==O.type){const P=this.visitTransition(O,n);o+=P.queryCount,l+=P.depCount,v.push(P)}else n.errors.push(function de(){return new e.vHH(3007,!1)}())}),{type:7,name:i.name,states:_,transitions:v,queryCount:o,depCount:l,options:null}}visitState(i,n){const o=this.visitStyle(i.styles,n),l=i.options&&i.options.params||null;if(o.containsDynamicStyles){const _=new Set,v=l||{};o.styles.forEach(O=>{O instanceof Map&&O.forEach(P=>{Ai(P).forEach(G=>{v.hasOwnProperty(G)||_.add(G)})})}),_.size&&(_s(_.values()),n.errors.push(function V(t,i){return new e.vHH(3008,!1)}()))}return{type:0,name:i.name,style:o,options:l?{params:l}:null}}visitTransition(i,n){n.queryCount=0,n.depCount=0;const o=ji(this,wr(i.animation),n);return{type:1,matchers:_o(i.expr,n.errors),animation:o,queryCount:n.queryCount,depCount:n.depCount,options:Ji(i.options)}}visitSequence(i,n){return{type:2,steps:i.steps.map(o=>ji(this,o,n)),options:Ji(i.options)}}visitGroup(i,n){const o=n.currentTime;let l=0;const _=i.steps.map(v=>{n.currentTime=o;const O=ji(this,v,n);return l=Math.max(l,n.currentTime),O});return n.currentTime=l,{type:3,steps:_,options:Ji(i.options)}}visitAnimate(i,n){const o=function Rl(t,i){if(t.hasOwnProperty("duration"))return t;if("number"==typeof t)return Ha(Pn(t,i).duration,0,"");const n=t;if(n.split(/\s+/).some(_=>"{"==_.charAt(0)&&"{"==_.charAt(1))){const _=Ha(0,0,"");return _.dynamic=!0,_.strValue=n,_}const l=Pn(n,i);return Ha(l.duration,l.delay,l.easing)}(i.timings,n.errors);n.currentAnimateTimings=o;let l,_=i.styles?i.styles:(0,T.oB)({});if(5==_.type)l=this.visitKeyframes(_,n);else{let v=i.styles,O=!1;if(!v){O=!0;const G={};o.easing&&(G.easing=o.easing),v=(0,T.oB)(G)}n.currentTime+=o.duration+o.delay;const P=this.visitStyle(v,n);P.isEmptyStep=O,l=P}return n.currentAnimateTimings=null,{type:4,timings:o,style:l,options:null}}visitStyle(i,n){const o=this._makeStyleAst(i,n);return this._validateStyleAst(o,n),o}_makeStyleAst(i,n){const o=[],l=Array.isArray(i.styles)?i.styles:[i.styles];for(let O of l)"string"==typeof O?O===T.l3?o.push(O):n.errors.push(new e.vHH(3002,!1)):o.push(tr(O));let _=!1,v=null;return o.forEach(O=>{if(O instanceof Map&&(O.has("easing")&&(v=O.get("easing"),O.delete("easing")),!_))for(let P of O.values())if(P.toString().indexOf("{{")>=0){_=!0;break}}),{type:6,styles:o,easing:v,offset:i.offset,containsDynamicStyles:_,options:null}}_validateStyleAst(i,n){const o=n.currentAnimateTimings;let l=n.currentTime,_=n.currentTime;o&&_>0&&(_-=o.duration+o.delay),i.styles.forEach(v=>{"string"!=typeof v&&v.forEach((O,P)=>{const G=n.collectedStyles.get(n.currentQuerySelector),K=G.get(P);let oe=!0;K&&(_!=l&&_>=K.startTime&&l<=K.endTime&&(n.errors.push(function fe(t,i,n,o,l){return new e.vHH(3010,!1)}()),oe=!1),_=K.startTime),oe&&G.set(P,{startTime:_,endTime:l}),n.options&&function Ti(t,i,n){const o=i.params||{},l=Ai(t);l.length&&l.forEach(_=>{o.hasOwnProperty(_)||n.push(function W(t){return new e.vHH(3001,!1)}())})}(O,n.options,n.errors)})})}visitKeyframes(i,n){const o={type:5,styles:[],options:null};if(!n.currentAnimateTimings)return n.errors.push(function Te(){return new e.vHH(3011,!1)}()),o;let _=0;const v=[];let O=!1,P=!1,G=0;const K=i.steps.map(ke=>{const we=this._makeStyleAst(ke,n);let Z=null!=we.offset?we.offset:function $a(t){if("string"==typeof t)return null;let i=null;if(Array.isArray(t))t.forEach(n=>{if(n instanceof Map&&n.has("offset")){const o=n;i=parseFloat(o.get("offset")),o.delete("offset")}});else if(t instanceof Map&&t.has("offset")){const n=t;i=parseFloat(n.get("offset")),n.delete("offset")}return i}(we.styles),Ft=0;return null!=Z&&(_++,Ft=we.offset=Z),P=P||Ft<0||Ft>1,O=O||Ft<G,G=Ft,v.push(Ft),we});P&&n.errors.push(function $e(){return new e.vHH(3012,!1)}()),O&&n.errors.push(function ge(){return new e.vHH(3200,!1)}());const oe=i.steps.length;let ue=0;_>0&&_<oe?n.errors.push(function Et(){return new e.vHH(3202,!1)}()):0==_&&(ue=1/(oe-1));const pe=oe-1,ye=n.currentTime,Ue=n.currentAnimateTimings,xe=Ue.duration;return K.forEach((ke,we)=>{const Z=ue>0?we==pe?1:ue*we:v[we],Ft=Z*xe;n.currentTime=ye+Ue.delay+Ft,Ue.duration=Ft,this._validateStyleAst(ke,n),ke.offset=Z,o.styles.push(ke)}),o}visitReference(i,n){return{type:8,animation:ji(this,wr(i.animation),n),options:Ji(i.options)}}visitAnimateChild(i,n){return n.depCount++,{type:9,options:Ji(i.options)}}visitAnimateRef(i,n){return{type:10,animation:this.visitReference(i.animation,n),options:Ji(i.options)}}visitQuery(i,n){const o=n.currentQuerySelector,l=i.options||{};n.queryCount++,n.currentQuery=i;const[_,v]=function gl(t){const i=!!t.split(/\s*,\s*/).find(n=>":self"==n);return i&&(t=t.replace(Is,"")),t=t.replace(/@\*/g,lt).replace(/@\w+/g,n=>lt+"-"+n.slice(1)).replace(/:animating/g,Pe),[t,i]}(i.selector);n.currentQuerySelector=o.length?o+" "+_:_,wn(n.collectedStyles,n.currentQuerySelector,new Map);const O=ji(this,wr(i.animation),n);return n.currentQuery=null,n.currentQuerySelector=o,{type:11,selector:_,limit:l.limit||0,optional:!!l.optional,includeSelf:v,animation:O,originalSelector:i.selector,options:Ji(i.options)}}visitStagger(i,n){n.currentQuery||n.errors.push(function ot(){return new e.vHH(3013,!1)}());const o="full"===i.timings?{duration:0,delay:0,easing:"full"}:Pn(i.timings,n.errors,!0);return{type:12,animation:ji(this,wr(i.animation),n),timings:o,options:null}}}class da{constructor(i){this.errors=i,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles=new Map,this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function Ji(t){return t?(t=Pr(t)).params&&(t.params=function qa(t){return t?Pr(t):null}(t.params)):t={},t}function Ha(t,i,n){return{duration:t,delay:i,easing:n}}function Ts(t,i,n,o,l,_,v=null,O=!1){return{type:1,element:t,keyframes:i,preStyleProps:n,postStyleProps:o,duration:l,delay:_,totalTime:l+_,easing:v,subTimeline:O}}class hs{constructor(){this._map=new Map}get(i){return this._map.get(i)||[]}append(i,n){let o=this._map.get(i);o||this._map.set(i,o=[]),o.push(...n)}has(i){return this._map.has(i)}clear(){this._map.clear()}}const Ja=new RegExp(":enter","g"),Xo=new RegExp(":leave","g");function No(t,i,n,o,l,_=new Map,v=new Map,O,P,G=[]){return(new Cs).buildKeyframes(t,i,n,o,l,_,v,O,P,G)}class Cs{buildKeyframes(i,n,o,l,_,v,O,P,G,K=[]){G=G||new hs;const oe=new Fo(i,n,G,l,_,K,[]);oe.options=P;const ue=P.delay?qn(P.delay):0;oe.currentTimeline.delayNextStep(ue),oe.currentTimeline.setStyles([v],null,oe.errors,P),ji(this,o,oe);const pe=oe.timelines.filter(ye=>ye.containsAnimation());if(pe.length&&O.size){let ye;for(let Ue=pe.length-1;Ue>=0;Ue--){const xe=pe[Ue];if(xe.element===n){ye=xe;break}}ye&&!ye.allowOnlyTimelineStyles()&&ye.setStyles([O],null,oe.errors,P)}return pe.length?pe.map(ye=>ye.buildKeyframes()):[Ts(n,[],[],[],0,ue,"",!1)]}visitTrigger(i,n){}visitState(i,n){}visitTransition(i,n){}visitAnimateChild(i,n){const o=n.subInstructions.get(n.element);if(o){const l=n.createSubContext(i.options),_=n.currentTimeline.currentTime,v=this._visitSubInstructions(o,l,l.options);_!=v&&n.transformIntoNewTimeline(v)}n.previousNode=i}visitAnimateRef(i,n){const o=n.createSubContext(i.options);o.transformIntoNewTimeline(),this._applyAnimationRefDelays([i.options,i.animation.options],n,o),this.visitReference(i.animation,o),n.transformIntoNewTimeline(o.currentTimeline.currentTime),n.previousNode=i}_applyAnimationRefDelays(i,n,o){for(const l of i){const _=l?.delay;if(_){const v="number"==typeof _?_:qn(Ko(_,l?.params??{},n.errors));o.delayNextStep(v)}}}_visitSubInstructions(i,n,o){let _=n.currentTimeline.currentTime;const v=null!=o.duration?qn(o.duration):null,O=null!=o.delay?qn(o.delay):null;return 0!==v&&i.forEach(P=>{const G=n.appendInstructionToTimeline(P,v,O);_=Math.max(_,G.duration+G.delay)}),_}visitReference(i,n){n.updateOptions(i.options,!0),ji(this,i.animation,n),n.previousNode=i}visitSequence(i,n){const o=n.subContextCount;let l=n;const _=i.options;if(_&&(_.params||_.delay)&&(l=n.createSubContext(_),l.transformIntoNewTimeline(),null!=_.delay)){6==l.previousNode.type&&(l.currentTimeline.snapshotCurrentStyles(),l.previousNode=ns);const v=qn(_.delay);l.delayNextStep(v)}i.steps.length&&(i.steps.forEach(v=>ji(this,v,l)),l.currentTimeline.applyStylesToKeyframe(),l.subContextCount>o&&l.transformIntoNewTimeline()),n.previousNode=i}visitGroup(i,n){const o=[];let l=n.currentTimeline.currentTime;const _=i.options&&i.options.delay?qn(i.options.delay):0;i.steps.forEach(v=>{const O=n.createSubContext(i.options);_&&O.delayNextStep(_),ji(this,v,O),l=Math.max(l,O.currentTimeline.currentTime),o.push(O.currentTimeline)}),o.forEach(v=>n.currentTimeline.mergeTimelineCollectedStyles(v)),n.transformIntoNewTimeline(l),n.previousNode=i}_visitTiming(i,n){if(i.dynamic){const o=i.strValue;return Pn(n.params?Ko(o,n.params,n.errors):o,n.errors)}return{duration:i.duration,delay:i.delay,easing:i.easing}}visitAnimate(i,n){const o=n.currentAnimateTimings=this._visitTiming(i.timings,n),l=n.currentTimeline;o.delay&&(n.incrementTime(o.delay),l.snapshotCurrentStyles());const _=i.style;5==_.type?this.visitKeyframes(_,n):(n.incrementTime(o.duration),this.visitStyle(_,n),l.applyStylesToKeyframe()),n.currentAnimateTimings=null,n.previousNode=i}visitStyle(i,n){const o=n.currentTimeline,l=n.currentAnimateTimings;!l&&o.hasCurrentStyleProperties()&&o.forwardFrame();const _=l&&l.easing||i.easing;i.isEmptyStep?o.applyEmptyStep(_):o.setStyles(i.styles,_,n.errors,n.options),n.previousNode=i}visitKeyframes(i,n){const o=n.currentAnimateTimings,l=n.currentTimeline.duration,_=o.duration,O=n.createSubContext().currentTimeline;O.easing=o.easing,i.styles.forEach(P=>{O.forwardTime((P.offset||0)*_),O.setStyles(P.styles,P.easing,n.errors,n.options),O.applyStylesToKeyframe()}),n.currentTimeline.mergeTimelineCollectedStyles(O),n.transformIntoNewTimeline(l+_),n.previousNode=i}visitQuery(i,n){const o=n.currentTimeline.currentTime,l=i.options||{},_=l.delay?qn(l.delay):0;_&&(6===n.previousNode.type||0==o&&n.currentTimeline.hasCurrentStyleProperties())&&(n.currentTimeline.snapshotCurrentStyles(),n.previousNode=ns);let v=o;const O=n.invokeQuery(i.selector,i.originalSelector,i.limit,i.includeSelf,!!l.optional,n.errors);n.currentQueryTotal=O.length;let P=null;O.forEach((G,K)=>{n.currentQueryIndex=K;const oe=n.createSubContext(i.options,G);_&&oe.delayNextStep(_),G===n.element&&(P=oe.currentTimeline),ji(this,i.animation,oe),oe.currentTimeline.applyStylesToKeyframe(),v=Math.max(v,oe.currentTimeline.currentTime)}),n.currentQueryIndex=0,n.currentQueryTotal=0,n.transformIntoNewTimeline(v),P&&(n.currentTimeline.mergeTimelineCollectedStyles(P),n.currentTimeline.snapshotCurrentStyles()),n.previousNode=i}visitStagger(i,n){const o=n.parentContext,l=n.currentTimeline,_=i.timings,v=Math.abs(_.duration),O=v*(n.currentQueryTotal-1);let P=v*n.currentQueryIndex;switch(_.duration<0?"reverse":_.easing){case"reverse":P=O-P;break;case"full":P=o.currentStaggerTime}const K=n.currentTimeline;P&&K.delayNextStep(P);const oe=K.currentTime;ji(this,i.animation,n),n.previousNode=i,o.currentStaggerTime=l.currentTime-oe+(l.startTime-o.currentTimeline.startTime)}}const ns={};class Fo{constructor(i,n,o,l,_,v,O,P){this._driver=i,this.element=n,this.subInstructions=o,this._enterClassName=l,this._leaveClassName=_,this.errors=v,this.timelines=O,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=ns,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=P||new zr(this._driver,n,0),O.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(i,n){if(!i)return;const o=i;let l=this.options;null!=o.duration&&(l.duration=qn(o.duration)),null!=o.delay&&(l.delay=qn(o.delay));const _=o.params;if(_){let v=l.params;v||(v=this.options.params={}),Object.keys(_).forEach(O=>{(!n||!v.hasOwnProperty(O))&&(v[O]=Ko(_[O],v,this.errors))})}}_copyOptions(){const i={};if(this.options){const n=this.options.params;if(n){const o=i.params={};Object.keys(n).forEach(l=>{o[l]=n[l]})}}return i}createSubContext(i=null,n,o){const l=n||this.element,_=new Fo(this._driver,l,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(l,o||0));return _.previousNode=this.previousNode,_.currentAnimateTimings=this.currentAnimateTimings,_.options=this._copyOptions(),_.updateOptions(i),_.currentQueryIndex=this.currentQueryIndex,_.currentQueryTotal=this.currentQueryTotal,_.parentContext=this,this.subContextCount++,_}transformIntoNewTimeline(i){return this.previousNode=ns,this.currentTimeline=this.currentTimeline.fork(this.element,i),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(i,n,o){const l={duration:n??i.duration,delay:this.currentTimeline.currentTime+(o??0)+i.delay,easing:""},_=new io(this._driver,i.element,i.keyframes,i.preStyleProps,i.postStyleProps,l,i.stretchStartingKeyframe);return this.timelines.push(_),l}incrementTime(i){this.currentTimeline.forwardTime(this.currentTimeline.duration+i)}delayNextStep(i){i>0&&this.currentTimeline.delayNextStep(i)}invokeQuery(i,n,o,l,_,v){let O=[];if(l&&O.push(this.element),i.length>0){i=(i=i.replace(Ja,"."+this._enterClassName)).replace(Xo,"."+this._leaveClassName);let G=this._driver.query(this.element,i,1!=o);0!==o&&(G=o<0?G.slice(G.length+o,G.length):G.slice(0,o)),O.push(...G)}return!_&&0==O.length&&v.push(function ct(t){return new e.vHH(3014,!1)}()),O}}class zr{constructor(i,n,o,l){this._driver=i,this.element=n,this.startTime=o,this._elementTimelineStylesLookup=l,this.duration=0,this.easing=null,this._previousKeyframe=new Map,this._currentKeyframe=new Map,this._keyframes=new Map,this._styleSummary=new Map,this._localTimelineStyles=new Map,this._pendingStyles=new Map,this._backFill=new Map,this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(n),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(n,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.hasCurrentStyleProperties();default:return!0}}hasCurrentStyleProperties(){return this._currentKeyframe.size>0}get currentTime(){return this.startTime+this.duration}delayNextStep(i){const n=1===this._keyframes.size&&this._pendingStyles.size;this.duration||n?(this.forwardTime(this.currentTime+i),n&&this.snapshotCurrentStyles()):this.startTime+=i}fork(i,n){return this.applyStylesToKeyframe(),new zr(this._driver,i,n||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=new Map,this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(i){this.applyStylesToKeyframe(),this.duration=i,this._loadKeyframe()}_updateStyle(i,n){this._localTimelineStyles.set(i,n),this._globalTimelineStyles.set(i,n),this._styleSummary.set(i,{time:this.currentTime,value:n})}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(i){i&&this._previousKeyframe.set("easing",i);for(let[n,o]of this._globalTimelineStyles)this._backFill.set(n,o||T.l3),this._currentKeyframe.set(n,T.l3);this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(i,n,o,l){n&&this._previousKeyframe.set("easing",n);const _=l&&l.params||{},v=function Tn(t,i){const n=new Map;let o;return t.forEach(l=>{if("*"===l){o=o||i.keys();for(let _ of o)n.set(_,T.l3)}else Zt(l,n)}),n}(i,this._globalTimelineStyles);for(let[O,P]of v){const G=Ko(P,_,o);this._pendingStyles.set(O,G),this._localTimelineStyles.has(O)||this._backFill.set(O,this._globalTimelineStyles.get(O)??T.l3),this._updateStyle(O,G)}}applyStylesToKeyframe(){0!=this._pendingStyles.size&&(this._pendingStyles.forEach((i,n)=>{this._currentKeyframe.set(n,i)}),this._pendingStyles.clear(),this._localTimelineStyles.forEach((i,n)=>{this._currentKeyframe.has(n)||this._currentKeyframe.set(n,i)}))}snapshotCurrentStyles(){for(let[i,n]of this._localTimelineStyles)this._pendingStyles.set(i,n),this._updateStyle(i,n)}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const i=[];for(let n in this._currentKeyframe)i.push(n);return i}mergeTimelineCollectedStyles(i){i._styleSummary.forEach((n,o)=>{const l=this._styleSummary.get(o);(!l||n.time>l.time)&&this._updateStyle(o,n.value)})}buildKeyframes(){this.applyStylesToKeyframe();const i=new Set,n=new Set,o=1===this._keyframes.size&&0===this.duration;let l=[];this._keyframes.forEach((O,P)=>{const G=Zt(O,new Map,this._backFill);G.forEach((K,oe)=>{K===T.k1?i.add(oe):K===T.l3&&n.add(oe)}),o||G.set("offset",P/this.duration),l.push(G)});const _=i.size?_s(i.values()):[],v=n.size?_s(n.values()):[];if(o){const O=l[0],P=new Map(O);O.set("offset",0),P.set("offset",1),l=[O,P]}return Ts(this.element,l,_,v,this.duration,this.startTime,this.easing,!1)}}class io extends zr{constructor(i,n,o,l,_,v,O=!1){super(i,n,v.delay),this.keyframes=o,this.preStyleProps=l,this.postStyleProps=_,this._stretchStartingKeyframe=O,this.timings={duration:v.duration,delay:v.delay,easing:v.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let i=this.keyframes,{delay:n,duration:o,easing:l}=this.timings;if(this._stretchStartingKeyframe&&n){const _=[],v=o+n,O=n/v,P=Zt(i[0]);P.set("offset",0),_.push(P);const G=Zt(i[0]);G.set("offset",gt(O)),_.push(G);const K=i.length-1;for(let oe=1;oe<=K;oe++){let ue=Zt(i[oe]);const pe=ue.get("offset");ue.set("offset",gt((n+pe*o)/v)),_.push(ue)}o=v,n=0,l="",i=_}return Ts(this.element,i,this.preStyleProps,this.postStyleProps,o,n,l,!0)}}function gt(t,i=3){const n=Math.pow(10,i-1);return Math.round(t*n)/n}class Ze{}const gn=new Set(["width","height","minWidth","minHeight","maxWidth","maxHeight","left","top","bottom","right","fontSize","outlineWidth","outlineOffset","paddingTop","paddingLeft","paddingBottom","paddingRight","marginTop","marginLeft","marginBottom","marginRight","borderRadius","borderWidth","borderTopWidth","borderLeftWidth","borderRightWidth","borderBottomWidth","textIndent","perspective"]);class vi extends Ze{normalizePropertyName(i,n){return Ni(i)}normalizeStyleValue(i,n,o,l){let _="";const v=o.toString().trim();if(gn.has(n)&&0!==o&&"0"!==o)if("number"==typeof o)_="px";else{const O=o.match(/^[+-]?[\d\.]+([a-z]*)$/);O&&0==O[1].length&&l.push(function F(t,i){return new e.vHH(3005,!1)}())}return v+_}}function Bi(t,i,n,o,l,_,v,O,P,G,K,oe,ue){return{type:0,element:t,triggerName:i,isRemovalTransition:l,fromState:n,fromStyles:_,toState:o,toStyles:v,timelines:O,queriedElements:P,preStyleProps:G,postStyleProps:K,totalTime:oe,errors:ue}}const Xi={};class ws{constructor(i,n,o){this._triggerName=i,this.ast=n,this._stateStyles=o}match(i,n,o,l){return function qs(t,i,n,o,l){return t.some(_=>_(i,n,o,l))}(this.ast.matchers,i,n,o,l)}buildStyles(i,n,o){let l=this._stateStyles.get("*");return void 0!==i&&(l=this._stateStyles.get(i?.toString())||l),l?l.buildStyles(n,o):new Map}build(i,n,o,l,_,v,O,P,G,K){const oe=[],ue=this.ast.options&&this.ast.options.params||Xi,ye=this.buildStyles(o,O&&O.params||Xi,oe),Ue=P&&P.params||Xi,xe=this.buildStyles(l,Ue,oe),ke=new Set,we=new Map,Z=new Map,Ft="void"===l,Dt={params:Js(Ue,ue),delay:this.ast.options?.delay},Yt=K?[]:No(i,n,this.ast.animation,_,v,ye,xe,Dt,G,oe);let ln=0;if(Yt.forEach(nn=>{ln=Math.max(nn.duration+nn.delay,ln)}),oe.length)return Bi(n,this._triggerName,o,l,Ft,ye,xe,[],[],we,Z,ln,oe);Yt.forEach(nn=>{const Jn=nn.element,zn=wn(we,Jn,new Set);nn.preStyleProps.forEach($r=>zn.add($r));const Zr=wn(Z,Jn,new Set);nn.postStyleProps.forEach($r=>Zr.add($r)),Jn!==n&&ke.add(Jn)});const $n=_s(ke.values());return Bi(n,this._triggerName,o,l,Ft,ye,xe,Yt,$n,we,Z,ln)}}function Js(t,i){const n=Pr(i);for(const o in t)t.hasOwnProperty(o)&&null!=t[o]&&(n[o]=t[o]);return n}class Ll{constructor(i,n,o){this.styles=i,this.defaultParams=n,this.normalizer=o}buildStyles(i,n){const o=new Map,l=Pr(this.defaultParams);return Object.keys(i).forEach(_=>{const v=i[_];null!==v&&(l[_]=v)}),this.styles.styles.forEach(_=>{"string"!=typeof _&&_.forEach((v,O)=>{v&&(v=Ko(v,l,n));const P=this.normalizer.normalizePropertyName(O,n);v=this.normalizer.normalizeStyleValue(O,P,v,n),o.set(O,v)})}),o}}class Yu{constructor(i,n,o){this.name=i,this.ast=n,this._normalizer=o,this.transitionFactories=[],this.states=new Map,n.states.forEach(l=>{this.states.set(l.name,new Ll(l.style,l.options&&l.options.params||{},o))}),qu(this.states,"true","1"),qu(this.states,"false","0"),n.transitions.forEach(l=>{this.transitionFactories.push(new ws(i,l,this.states))}),this.fallbackTransition=function Nc(t,i,n){return new ws(t,{type:1,animation:{type:2,steps:[],options:null},matchers:[(v,O)=>!0],options:null,queryCount:0,depCount:0},i)}(i,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(i,n,o,l){return this.transitionFactories.find(v=>v.match(i,n,o,l))||null}matchStyles(i,n,o){return this.fallbackTransition.buildStyles(i,n,o)}}function qu(t,i,n){t.has(i)?t.has(n)||t.set(n,t.get(i)):t.has(n)&&t.set(i,t.get(n))}const Ol=new hs;class Kc{constructor(i,n,o){this.bodyNode=i,this._driver=n,this._normalizer=o,this._animations=new Map,this._playersById=new Map,this.players=[]}register(i,n){const o=[],l=[],_=la(this._driver,n,o,l);if(o.length)throw function Xt(t){return new e.vHH(3503,!1)}();this._animations.set(i,_)}_buildPlayer(i,n,o){const l=i.element,_=br(0,this._normalizer,0,i.keyframes,n,o);return this._driver.animate(l,_,i.duration,i.delay,i.easing,[],!0)}create(i,n,o={}){const l=[],_=this._animations.get(i);let v;const O=new Map;if(_?(v=No(this._driver,n,_,et,ze,new Map,new Map,o,Ol,l),v.forEach(K=>{const oe=wn(O,K.element,new Map);K.postStyleProps.forEach(ue=>oe.set(ue,null))})):(l.push(function cn(){return new e.vHH(3300,!1)}()),v=[]),l.length)throw function pn(t){return new e.vHH(3504,!1)}();O.forEach((K,oe)=>{K.forEach((ue,pe)=>{K.set(pe,this._driver.computeStyle(oe,pe,T.l3))})});const G=jr(v.map(K=>{const oe=O.get(K.element);return this._buildPlayer(K,new Map,oe)}));return this._playersById.set(i,G),G.onDestroy(()=>this.destroy(i)),this.players.push(G),G}destroy(i){const n=this._getPlayer(i);n.destroy(),this._playersById.delete(i);const o=this.players.indexOf(n);o>=0&&this.players.splice(o,1)}_getPlayer(i){const n=this._playersById.get(i);if(!n)throw function Rn(t){return new e.vHH(3301,!1)}();return n}listen(i,n,o,l){const _=Tt(n,"","","");return ht(this._getPlayer(i),o,_,l),()=>{}}command(i,n,o,l){if("register"==o)return void this.register(i,l[0]);if("create"==o)return void this.create(i,n,l[0]||{});const _=this._getPlayer(i);switch(o){case"play":_.play();break;case"pause":_.pause();break;case"reset":_.reset();break;case"restart":_.restart();break;case"finish":_.finish();break;case"init":_.init();break;case"setPosition":_.setPosition(parseFloat(l[0]));break;case"destroy":this.destroy(i)}}}const yl="ng-animate-queued",Da="ng-animate-disabled",oc=[],Xl={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},Ic={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},Gs="__ng_removed";class ku{get params(){return this.options.params}constructor(i,n=""){this.namespaceId=n;const o=i&&i.hasOwnProperty("value");if(this.value=function Ba(t){return t??null}(o?i.value:i),o){const _=Pr(i);delete _.value,this.options=_}else this.options={};this.options.params||(this.options.params={})}absorbOptions(i){const n=i.params;if(n){const o=this.options.params;Object.keys(n).forEach(l=>{null==o[l]&&(o[l]=n[l])})}}}const zu="void",ua=new ku(zu);class El{constructor(i,n,o){this.id=i,this.hostElement=n,this._engine=o,this.players=[],this._triggers=new Map,this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+i,Sa(n,this._hostClassName)}listen(i,n,o,l){if(!this._triggers.has(n))throw function At(t,i){return new e.vHH(3302,!1)}();if(null==o||0==o.length)throw function qt(t){return new e.vHH(3303,!1)}();if(!function tl(t){return"start"==t||"done"==t}(o))throw function sn(t,i){return new e.vHH(3400,!1)}();const _=wn(this._elementListeners,i,[]),v={name:n,phase:o,callback:l};_.push(v);const O=wn(this._engine.statesByElement,i,new Map);return O.has(n)||(Sa(i,an),Sa(i,an+"-"+n),O.set(n,ua)),()=>{this._engine.afterFlush(()=>{const P=_.indexOf(v);P>=0&&_.splice(P,1),this._triggers.has(n)||O.delete(n)})}}register(i,n){return!this._triggers.has(i)&&(this._triggers.set(i,n),!0)}_getTrigger(i){const n=this._triggers.get(i);if(!n)throw function fn(t){return new e.vHH(3401,!1)}();return n}trigger(i,n,o,l=!0){const _=this._getTrigger(n),v=new Eu(this.id,n,i);let O=this._engine.statesByElement.get(i);O||(Sa(i,an),Sa(i,an+"-"+n),this._engine.statesByElement.set(i,O=new Map));let P=O.get(n);const G=new ku(o,this.id);if(!(o&&o.hasOwnProperty("value"))&&P&&G.absorbOptions(P.options),O.set(n,G),P||(P=ua),G.value!==zu&&P.value===G.value){if(!function Su(t,i){const n=Object.keys(t),o=Object.keys(i);if(n.length!=o.length)return!1;for(let l=0;l<n.length;l++){const _=n[l];if(!i.hasOwnProperty(_)||t[_]!==i[_])return!1}return!0}(P.params,G.params)){const Ue=[],xe=_.matchStyles(P.value,P.params,Ue),ke=_.matchStyles(G.value,G.params,Ue);Ue.length?this._engine.reportError(Ue):this._engine.afterFlush(()=>{mn(i,xe),Ot(i,ke)})}return}const ue=wn(this._engine.playersByElement,i,[]);ue.forEach(Ue=>{Ue.namespaceId==this.id&&Ue.triggerName==n&&Ue.queued&&Ue.destroy()});let pe=_.matchTransition(P.value,G.value,i,G.params),ye=!1;if(!pe){if(!l)return;pe=_.fallbackTransition,ye=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:i,triggerName:n,transition:pe,fromState:P,toState:G,player:v,isFallbackTransition:ye}),ye||(Sa(i,yl),v.onStart(()=>{Ru(i,yl)})),v.onDone(()=>{let Ue=this.players.indexOf(v);Ue>=0&&this.players.splice(Ue,1);const xe=this._engine.playersByElement.get(i);if(xe){let ke=xe.indexOf(v);ke>=0&&xe.splice(ke,1)}}),this.players.push(v),ue.push(v),v}deregister(i){this._triggers.delete(i),this._engine.statesByElement.forEach(n=>n.delete(i)),this._elementListeners.forEach((n,o)=>{this._elementListeners.set(o,n.filter(l=>l.name!=i))})}clearElementCache(i){this._engine.statesByElement.delete(i),this._elementListeners.delete(i);const n=this._engine.playersByElement.get(i);n&&(n.forEach(o=>o.destroy()),this._engine.playersByElement.delete(i))}_signalRemovalForInnerTriggers(i,n){const o=this._engine.driver.query(i,lt,!0);o.forEach(l=>{if(l[Gs])return;const _=this._engine.fetchNamespacesByElement(l);_.size?_.forEach(v=>v.triggerLeaveAnimation(l,n,!1,!0)):this.clearElementCache(l)}),this._engine.afterFlushAnimationsDone(()=>o.forEach(l=>this.clearElementCache(l)))}triggerLeaveAnimation(i,n,o,l){const _=this._engine.statesByElement.get(i),v=new Map;if(_){const O=[];if(_.forEach((P,G)=>{if(v.set(G,P.value),this._triggers.has(G)){const K=this.trigger(i,G,zu,l);K&&O.push(K)}}),O.length)return this._engine.markElementAsRemoved(this.id,i,!0,n,v),o&&jr(O).onDone(()=>this._engine.processLeaveNode(i)),!0}return!1}prepareLeaveAnimationListeners(i){const n=this._elementListeners.get(i),o=this._engine.statesByElement.get(i);if(n&&o){const l=new Set;n.forEach(_=>{const v=_.name;if(l.has(v))return;l.add(v);const P=this._triggers.get(v).fallbackTransition,G=o.get(v)||ua,K=new ku(zu),oe=new Eu(this.id,v,i);this._engine.totalQueuedPlayers++,this._queue.push({element:i,triggerName:v,transition:P,fromState:G,toState:K,player:oe,isFallbackTransition:!0})})}}removeNode(i,n){const o=this._engine;if(i.childElementCount&&this._signalRemovalForInnerTriggers(i,n),this.triggerLeaveAnimation(i,n,!0))return;let l=!1;if(o.totalAnimations){const _=o.players.length?o.playersByQueriedElement.get(i):[];if(_&&_.length)l=!0;else{let v=i;for(;v=v.parentNode;)if(o.statesByElement.get(v)){l=!0;break}}}if(this.prepareLeaveAnimationListeners(i),l)o.markElementAsRemoved(this.id,i,!1,n);else{const _=i[Gs];(!_||_===Xl)&&(o.afterFlush(()=>this.clearElementCache(i)),o.destroyInnerAnimations(i),o._onRemovalComplete(i,n))}}insertNode(i,n){Sa(i,this._hostClassName)}drainQueuedTransitions(i){const n=[];return this._queue.forEach(o=>{const l=o.player;if(l.destroyed)return;const _=o.element,v=this._elementListeners.get(_);v&&v.forEach(O=>{if(O.name==o.triggerName){const P=Tt(_,o.triggerName,o.fromState.value,o.toState.value);P._data=i,ht(o.player,O.phase,P,O.callback)}}),l.markedForDestroy?this._engine.afterFlush(()=>{l.destroy()}):n.push(o)}),this._queue=[],n.sort((o,l)=>{const _=o.transition.ast.depCount,v=l.transition.ast.depCount;return 0==_||0==v?_-v:this._engine.driver.containsElement(o.element,l.element)?1:-1})}destroy(i){this.players.forEach(n=>n.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,i)}elementContainsData(i){let n=!1;return this._elementListeners.has(i)&&(n=!0),n=!!this._queue.find(o=>o.element===i)||n,n}}class uu{_onRemovalComplete(i,n){this.onRemovalComplete(i,n)}constructor(i,n,o){this.bodyNode=i,this.driver=n,this._normalizer=o,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(l,_)=>{}}get queuedPlayers(){const i=[];return this._namespaceList.forEach(n=>{n.players.forEach(o=>{o.queued&&i.push(o)})}),i}createNamespace(i,n){const o=new El(i,n,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,n)?this._balanceNamespaceList(o,n):(this.newHostElements.set(n,o),this.collectEnterElement(n)),this._namespaceLookup[i]=o}_balanceNamespaceList(i,n){const o=this._namespaceList,l=this.namespacesByHostElement;if(o.length-1>=0){let v=!1,O=this.driver.getParentElement(n);for(;O;){const P=l.get(O);if(P){const G=o.indexOf(P);o.splice(G+1,0,i),v=!0;break}O=this.driver.getParentElement(O)}v||o.unshift(i)}else o.push(i);return l.set(n,i),i}register(i,n){let o=this._namespaceLookup[i];return o||(o=this.createNamespace(i,n)),o}registerTrigger(i,n,o){let l=this._namespaceLookup[i];l&&l.register(n,o)&&this.totalAnimations++}destroy(i,n){if(!i)return;const o=this._fetchNamespace(i);this.afterFlush(()=>{this.namespacesByHostElement.delete(o.hostElement),delete this._namespaceLookup[i];const l=this._namespaceList.indexOf(o);l>=0&&this._namespaceList.splice(l,1)}),this.afterFlushAnimationsDone(()=>o.destroy(n))}_fetchNamespace(i){return this._namespaceLookup[i]}fetchNamespacesByElement(i){const n=new Set,o=this.statesByElement.get(i);if(o)for(let l of o.values())if(l.namespaceId){const _=this._fetchNamespace(l.namespaceId);_&&n.add(_)}return n}trigger(i,n,o,l){if(Tl(n)){const _=this._fetchNamespace(i);if(_)return _.trigger(n,o,l),!0}return!1}insertNode(i,n,o,l){if(!Tl(n))return;const _=n[Gs];if(_&&_.setForRemoval){_.setForRemoval=!1,_.setForMove=!0;const v=this.collectedLeaveElements.indexOf(n);v>=0&&this.collectedLeaveElements.splice(v,1)}if(i){const v=this._fetchNamespace(i);v&&v.insertNode(n,o)}l&&this.collectEnterElement(n)}collectEnterElement(i){this.collectedEnterElements.push(i)}markElementAsDisabled(i,n){n?this.disabledNodes.has(i)||(this.disabledNodes.add(i),Sa(i,Da)):this.disabledNodes.has(i)&&(this.disabledNodes.delete(i),Ru(i,Da))}removeNode(i,n,o,l){if(Tl(n)){const _=i?this._fetchNamespace(i):null;if(_?_.removeNode(n,l):this.markElementAsRemoved(i,n,!1,l),o){const v=this.namespacesByHostElement.get(n);v&&v.id!==i&&v.removeNode(n,l)}}else this._onRemovalComplete(n,l)}markElementAsRemoved(i,n,o,l,_){this.collectedLeaveElements.push(n),n[Gs]={namespaceId:i,setForRemoval:l,hasAnimation:o,removedBeforeQueried:!1,previousTriggersValues:_}}listen(i,n,o,l,_){return Tl(n)?this._fetchNamespace(i).listen(n,o,l,_):()=>{}}_buildInstruction(i,n,o,l,_){return i.transition.build(this.driver,i.element,i.fromState.value,i.toState.value,o,l,i.fromState.options,i.toState.options,n,_)}destroyInnerAnimations(i){let n=this.driver.query(i,lt,!0);n.forEach(o=>this.destroyActiveAnimationsForElement(o)),0!=this.playersByQueriedElement.size&&(n=this.driver.query(i,Pe,!0),n.forEach(o=>this.finishActiveQueriedAnimationOnElement(o)))}destroyActiveAnimationsForElement(i){const n=this.playersByElement.get(i);n&&n.forEach(o=>{o.queued?o.markedForDestroy=!0:o.destroy()})}finishActiveQueriedAnimationOnElement(i){const n=this.playersByQueriedElement.get(i);n&&n.forEach(o=>o.finish())}whenRenderingDone(){return new Promise(i=>{if(this.players.length)return jr(this.players).onDone(()=>i());i()})}processLeaveNode(i){const n=i[Gs];if(n&&n.setForRemoval){if(i[Gs]=Xl,n.namespaceId){this.destroyInnerAnimations(i);const o=this._fetchNamespace(n.namespaceId);o&&o.clearElementCache(i)}this._onRemovalComplete(i,n.setForRemoval)}i.classList?.contains(Da)&&this.markElementAsDisabled(i,!1),this.driver.query(i,".ng-animate-disabled",!0).forEach(o=>{this.markElementAsDisabled(o,!1)})}flush(i=-1){let n=[];if(this.newHostElements.size&&(this.newHostElements.forEach((o,l)=>this._balanceNamespaceList(o,l)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let o=0;o<this.collectedEnterElements.length;o++)Sa(this.collectedEnterElements[o],"ng-star-inserted");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){const o=[];try{n=this._flushAnimations(o,i)}finally{for(let l=0;l<o.length;l++)o[l]()}}else for(let o=0;o<this.collectedLeaveElements.length;o++)this.processLeaveNode(this.collectedLeaveElements[o]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(o=>o()),this._flushFns=[],this._whenQuietFns.length){const o=this._whenQuietFns;this._whenQuietFns=[],n.length?jr(n).onDone(()=>{o.forEach(l=>l())}):o.forEach(l=>l())}}reportError(i){throw function xn(t){return new e.vHH(3402,!1)}()}_flushAnimations(i,n){const o=new hs,l=[],_=new Map,v=[],O=new Map,P=new Map,G=new Map,K=new Set;this.disabledNodes.forEach(Un=>{K.add(Un);const lr=this.driver.query(Un,".ng-animate-queued",!0);for(let ar=0;ar<lr.length;ar++)K.add(lr[ar])});const oe=this.bodyNode,ue=Array.from(this.statesByElement.keys()),pe=cu(ue,this.collectedEnterElements),ye=new Map;let Ue=0;pe.forEach((Un,lr)=>{const ar=et+Ue++;ye.set(lr,ar),Un.forEach(Cr=>Sa(Cr,ar))});const xe=[],ke=new Set,we=new Set;for(let Un=0;Un<this.collectedLeaveElements.length;Un++){const lr=this.collectedLeaveElements[Un],ar=lr[Gs];ar&&ar.setForRemoval&&(xe.push(lr),ke.add(lr),ar.hasAnimation?this.driver.query(lr,".ng-star-inserted",!0).forEach(Cr=>ke.add(Cr)):we.add(lr))}const Z=new Map,Ft=cu(ue,Array.from(ke));Ft.forEach((Un,lr)=>{const ar=ze+Ue++;Z.set(lr,ar),Un.forEach(Cr=>Sa(Cr,ar))}),i.push(()=>{pe.forEach((Un,lr)=>{const ar=ye.get(lr);Un.forEach(Cr=>Ru(Cr,ar))}),Ft.forEach((Un,lr)=>{const ar=Z.get(lr);Un.forEach(Cr=>Ru(Cr,ar))}),xe.forEach(Un=>{this.processLeaveNode(Un)})});const Dt=[],Yt=[];for(let Un=this._namespaceList.length-1;Un>=0;Un--)this._namespaceList[Un].drainQueuedTransitions(n).forEach(ar=>{const Cr=ar.player,Wn=ar.element;if(Dt.push(Cr),this.collectedEnterElements.length){const Nn=Wn[Gs];if(Nn&&Nn.setForMove){if(Nn.previousTriggersValues&&Nn.previousTriggersValues.has(ar.triggerName)){const _i=Nn.previousTriggersValues.get(ar.triggerName),Zi=this.statesByElement.get(ar.element);if(Zi&&Zi.has(ar.triggerName)){const So=Zi.get(ar.triggerName);So.value=_i,Zi.set(ar.triggerName,So)}}return void Cr.destroy()}}const ai=!oe||!this.driver.containsElement(oe,Wn),ho=Z.get(Wn),Yi=ye.get(Wn),lo=this._buildInstruction(ar,o,Yi,ho,ai);if(lo.errors&&lo.errors.length)return void Yt.push(lo);if(ai)return Cr.onStart(()=>mn(Wn,lo.fromStyles)),Cr.onDestroy(()=>Ot(Wn,lo.toStyles)),void l.push(Cr);if(ar.isFallbackTransition)return Cr.onStart(()=>mn(Wn,lo.fromStyles)),Cr.onDestroy(()=>Ot(Wn,lo.toStyles)),void l.push(Cr);const pi=[];lo.timelines.forEach(Nn=>{Nn.stretchStartingKeyframe=!0,this.disabledNodes.has(Nn.element)||pi.push(Nn)}),lo.timelines=pi,o.append(Wn,lo.timelines),v.push({instruction:lo,player:Cr,element:Wn}),lo.queriedElements.forEach(Nn=>wn(O,Nn,[]).push(Cr)),lo.preStyleProps.forEach((Nn,_i)=>{if(Nn.size){let Zi=P.get(_i);Zi||P.set(_i,Zi=new Set),Nn.forEach((So,us)=>Zi.add(us))}}),lo.postStyleProps.forEach((Nn,_i)=>{let Zi=G.get(_i);Zi||G.set(_i,Zi=new Set),Nn.forEach((So,us)=>Zi.add(us))})});if(Yt.length){const Un=[];Yt.forEach(lr=>{Un.push(function Or(t,i){return new e.vHH(3505,!1)}())}),Dt.forEach(lr=>lr.destroy()),this.reportError(Un)}const ln=new Map,$n=new Map;v.forEach(Un=>{const lr=Un.element;o.has(lr)&&($n.set(lr,lr),this._beforeAnimationBuild(Un.player.namespaceId,Un.instruction,ln))}),l.forEach(Un=>{const lr=Un.element;this._getPreviousPlayers(lr,!1,Un.namespaceId,Un.triggerName,null).forEach(Cr=>{wn(ln,lr,[]).push(Cr),Cr.destroy()})});const nn=xe.filter(Un=>gc(Un,P,G)),Jn=new Map;dc(Jn,this.driver,we,G,T.l3).forEach(Un=>{gc(Un,P,G)&&nn.push(Un)});const Zr=new Map;pe.forEach((Un,lr)=>{dc(Zr,this.driver,new Set(Un),P,T.k1)}),nn.forEach(Un=>{const lr=Jn.get(Un),ar=Zr.get(Un);Jn.set(Un,new Map([...Array.from(lr?.entries()??[]),...Array.from(ar?.entries()??[])]))});const $r=[],ui=[],gi={};v.forEach(Un=>{const{element:lr,player:ar,instruction:Cr}=Un;if(o.has(lr)){if(K.has(lr))return ar.onDestroy(()=>Ot(lr,Cr.toStyles)),ar.disabled=!0,ar.overrideTotalTime(Cr.totalTime),void l.push(ar);let Wn=gi;if($n.size>1){let ho=lr;const Yi=[];for(;ho=ho.parentNode;){const lo=$n.get(ho);if(lo){Wn=lo;break}Yi.push(ho)}Yi.forEach(lo=>$n.set(lo,Wn))}const ai=this._buildAnimation(ar.namespaceId,Cr,ln,_,Zr,Jn);if(ar.setRealPlayer(ai),Wn===gi)$r.push(ar);else{const ho=this.playersByElement.get(Wn);ho&&ho.length&&(ar.parentPlayer=jr(ho)),l.push(ar)}}else mn(lr,Cr.fromStyles),ar.onDestroy(()=>Ot(lr,Cr.toStyles)),ui.push(ar),K.has(lr)&&l.push(ar)}),ui.forEach(Un=>{const lr=_.get(Un.element);if(lr&&lr.length){const ar=jr(lr);Un.setRealPlayer(ar)}}),l.forEach(Un=>{Un.parentPlayer?Un.syncPlayerEvents(Un.parentPlayer):Un.destroy()});for(let Un=0;Un<xe.length;Un++){const lr=xe[Un],ar=lr[Gs];if(Ru(lr,ze),ar&&ar.hasAnimation)continue;let Cr=[];if(O.size){let ai=O.get(lr);ai&&ai.length&&Cr.push(...ai);let ho=this.driver.query(lr,Pe,!0);for(let Yi=0;Yi<ho.length;Yi++){let lo=O.get(ho[Yi]);lo&&lo.length&&Cr.push(...lo)}}const Wn=Cr.filter(ai=>!ai.destroyed);Wn.length?xu(this,lr,Wn):this.processLeaveNode(lr)}return xe.length=0,$r.forEach(Un=>{this.players.push(Un),Un.onDone(()=>{Un.destroy();const lr=this.players.indexOf(Un);this.players.splice(lr,1)}),Un.play()}),$r}elementContainsData(i,n){let o=!1;const l=n[Gs];return l&&l.setForRemoval&&(o=!0),this.playersByElement.has(n)&&(o=!0),this.playersByQueriedElement.has(n)&&(o=!0),this.statesByElement.has(n)&&(o=!0),this._fetchNamespace(i).elementContainsData(n)||o}afterFlush(i){this._flushFns.push(i)}afterFlushAnimationsDone(i){this._whenQuietFns.push(i)}_getPreviousPlayers(i,n,o,l,_){let v=[];if(n){const O=this.playersByQueriedElement.get(i);O&&(v=O)}else{const O=this.playersByElement.get(i);if(O){const P=!_||_==zu;O.forEach(G=>{G.queued||!P&&G.triggerName!=l||v.push(G)})}}return(o||l)&&(v=v.filter(O=>!(o&&o!=O.namespaceId||l&&l!=O.triggerName))),v}_beforeAnimationBuild(i,n,o){const _=n.element,v=n.isRemovalTransition?void 0:i,O=n.isRemovalTransition?void 0:n.triggerName;for(const P of n.timelines){const G=P.element,K=G!==_,oe=wn(o,G,[]);this._getPreviousPlayers(G,K,v,O,n.toState).forEach(pe=>{const ye=pe.getRealPlayer();ye.beforeDestroy&&ye.beforeDestroy(),pe.destroy(),oe.push(pe)})}mn(_,n.fromStyles)}_buildAnimation(i,n,o,l,_,v){const O=n.triggerName,P=n.element,G=[],K=new Set,oe=new Set,ue=n.timelines.map(ye=>{const Ue=ye.element;K.add(Ue);const xe=Ue[Gs];if(xe&&xe.removedBeforeQueried)return new T.ZN(ye.duration,ye.delay);const ke=Ue!==P,we=function ba(t){const i=[];return nl(t,i),i}((o.get(Ue)||oc).map(ln=>ln.getRealPlayer())).filter(ln=>!!ln.element&&ln.element===Ue),Z=_.get(Ue),Ft=v.get(Ue),Dt=br(0,this._normalizer,0,ye.keyframes,Z,Ft),Yt=this._buildPlayer(ye,Dt,we);if(ye.subTimeline&&l&&oe.add(Ue),ke){const ln=new Eu(i,O,Ue);ln.setRealPlayer(Yt),G.push(ln)}return Yt});G.forEach(ye=>{wn(this.playersByQueriedElement,ye.element,[]).push(ye),ye.onDone(()=>function $u(t,i,n){let o=t.get(i);if(o){if(o.length){const l=o.indexOf(n);o.splice(l,1)}0==o.length&&t.delete(i)}return o}(this.playersByQueriedElement,ye.element,ye))}),K.forEach(ye=>Sa(ye,Rt));const pe=jr(ue);return pe.onDestroy(()=>{K.forEach(ye=>Ru(ye,Rt)),Ot(P,n.toStyles)}),oe.forEach(ye=>{wn(l,ye,[]).push(pe)}),pe}_buildPlayer(i,n,o){return n.length>0?this.driver.animate(i.element,n,i.duration,i.delay,i.easing,o):new T.ZN(i.duration,i.delay)}}class Eu{constructor(i,n,o){this.namespaceId=i,this.triggerName=n,this.element=o,this._player=new T.ZN,this._containsRealPlayer=!1,this._queuedCallbacks=new Map,this.destroyed=!1,this.parentPlayer=null,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(i){this._containsRealPlayer||(this._player=i,this._queuedCallbacks.forEach((n,o)=>{n.forEach(l=>ht(i,o,void 0,l))}),this._queuedCallbacks.clear(),this._containsRealPlayer=!0,this.overrideTotalTime(i.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(i){this.totalTime=i}syncPlayerEvents(i){const n=this._player;n.triggerCallback&&i.onStart(()=>n.triggerCallback("start")),i.onDone(()=>this.finish()),i.onDestroy(()=>this.destroy())}_queueEvent(i,n){wn(this._queuedCallbacks,i,[]).push(n)}onDone(i){this.queued&&this._queueEvent("done",i),this._player.onDone(i)}onStart(i){this.queued&&this._queueEvent("start",i),this._player.onStart(i)}onDestroy(i){this.queued&&this._queueEvent("destroy",i),this._player.onDestroy(i)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(i){this.queued||this._player.setPosition(i)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(i){const n=this._player;n.triggerCallback&&n.triggerCallback(i)}}function Tl(t){return t&&1===t.nodeType}function Ga(t,i){const n=t.style.display;return t.style.display=i??"none",n}function dc(t,i,n,o,l){const _=[];n.forEach(P=>_.push(Ga(P)));const v=[];o.forEach((P,G)=>{const K=new Map;P.forEach(oe=>{const ue=i.computeStyle(G,oe,l);K.set(oe,ue),(!ue||0==ue.length)&&(G[Gs]=Ic,v.push(G))}),t.set(G,K)});let O=0;return n.forEach(P=>Ga(P,_[O++])),v}function cu(t,i){const n=new Map;if(t.forEach(O=>n.set(O,[])),0==i.length)return n;const o=1,l=new Set(i),_=new Map;function v(O){if(!O)return o;let P=_.get(O);if(P)return P;const G=O.parentNode;return P=n.has(G)?G:l.has(G)?o:v(G),_.set(O,P),P}return i.forEach(O=>{const P=v(O);P!==o&&n.get(P).push(O)}),n}function Sa(t,i){t.classList?.add(i)}function Ru(t,i){t.classList?.remove(i)}function xu(t,i,n){jr(n).onDone(()=>t.processLeaveNode(i))}function nl(t,i){for(let n=0;n<t.length;n++){const o=t[n];o instanceof T.ZE?nl(o.players,i):i.push(o)}}function gc(t,i,n){const o=n.get(t);if(!o)return!1;let l=i.get(t);return l?o.forEach(_=>l.add(_)):i.set(t,o),n.delete(t),!0}class ql{constructor(i,n,o){this.bodyNode=i,this._driver=n,this._normalizer=o,this._triggerCache={},this.onRemovalComplete=(l,_)=>{},this._transitionEngine=new uu(i,n,o),this._timelineEngine=new Kc(i,n,o),this._transitionEngine.onRemovalComplete=(l,_)=>this.onRemovalComplete(l,_)}registerTrigger(i,n,o,l,_){const v=i+"-"+l;let O=this._triggerCache[v];if(!O){const P=[],G=[],K=la(this._driver,_,P,G);if(P.length)throw function Pt(t,i){return new e.vHH(3404,!1)}();O=function vl(t,i,n){return new Yu(t,i,n)}(l,K,this._normalizer),this._triggerCache[v]=O}this._transitionEngine.registerTrigger(n,l,O)}register(i,n){this._transitionEngine.register(i,n)}destroy(i,n){this._transitionEngine.destroy(i,n)}onInsert(i,n,o,l){this._transitionEngine.insertNode(i,n,o,l)}onRemove(i,n,o,l){this._transitionEngine.removeNode(i,n,l||!1,o)}disableAnimations(i,n){this._transitionEngine.markElementAsDisabled(i,n)}process(i,n,o,l){if("@"==o.charAt(0)){const[_,v]=jn(o);this._timelineEngine.command(_,n,v,l)}else this._transitionEngine.trigger(i,n,o,l)}listen(i,n,o,l,_){if("@"==o.charAt(0)){const[v,O]=jn(o);return this._timelineEngine.listen(v,n,O,_)}return this._transitionEngine.listen(i,n,o,l,_)}flush(i=-1){this._transitionEngine.flush(i)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}let Dc=(()=>{class t{constructor(n,o,l){this._element=n,this._startStyles=o,this._endStyles=l,this._state=0;let _=t.initialStylesByElement.get(n);_||t.initialStylesByElement.set(n,_=new Map),this._initialStyles=_}start(){this._state<1&&(this._startStyles&&Ot(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Ot(this._element,this._initialStyles),this._endStyles&&(Ot(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(t.initialStylesByElement.delete(this._element),this._startStyles&&(mn(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(mn(this._element,this._endStyles),this._endStyles=null),Ot(this._element,this._initialStyles),this._state=3)}}return t.initialStylesByElement=new WeakMap,t})();function zs(t){let i=null;return t.forEach((n,o)=>{(function Vc(t){return"display"===t||"position"===t})(o)&&(i=i||new Map,i.set(o,n))}),i}class bt{constructor(i,n,o,l){this.element=i,this.keyframes=n,this.options=o,this._specialStyles=l,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this._originalOnDoneFns=[],this._originalOnStartFns=[],this.time=0,this.parentPlayer=null,this.currentSnapshot=new Map,this._duration=o.duration,this._delay=o.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(i=>i()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const i=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,i,this.options),this._finalKeyframe=i.length?i[i.length-1]:new Map,this.domPlayer.addEventListener("finish",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_convertKeyframesToObject(i){const n=[];return i.forEach(o=>{n.push(Object.fromEntries(o))}),n}_triggerWebAnimation(i,n,o){return i.animate(this._convertKeyframesToObject(n),o)}onStart(i){this._originalOnStartFns.push(i),this._onStartFns.push(i)}onDone(i){this._originalOnDoneFns.push(i),this._onDoneFns.push(i)}onDestroy(i){this._onDestroyFns.push(i)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(i=>i()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(i=>i()),this._onDestroyFns=[])}setPosition(i){void 0===this.domPlayer&&this.init(),this.domPlayer.currentTime=i*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const i=new Map;this.hasStarted()&&this._finalKeyframe.forEach((o,l)=>{"offset"!==l&&i.set(l,this._finished?o:Vi(this.element,l))}),this.currentSnapshot=i}triggerCallback(i){const n="start"===i?this._onStartFns:this._onDoneFns;n.forEach(o=>o()),n.length=0}}class pt{validateStyleProperty(i){return!0}validateAnimatableStyleProperty(i){return!0}matchesElement(i,n){return!1}containsElement(i,n){return $i(i,n)}getParentElement(i){return so(i)}query(i,n,o){return qr(i,n,o)}computeStyle(i,n,o){return window.getComputedStyle(i)[n]}animate(i,n,o,l,_,v=[]){const P={duration:o,delay:l,fill:0==l?"both":"forwards"};_&&(P.easing=_);const G=new Map,K=v.filter(pe=>pe instanceof bt);(function Vr(t,i){return 0===t||0===i})(o,l)&&K.forEach(pe=>{pe.currentSnapshot.forEach((ye,Ue)=>G.set(Ue,ye))});let oe=function Zn(t){return t.length?t[0]instanceof Map?t:t.map(i=>tr(i)):[]}(n).map(pe=>Zt(pe));oe=function wi(t,i,n){if(n.size&&i.length){let o=i[0],l=[];if(n.forEach((_,v)=>{o.has(v)||l.push(v),o.set(v,_)}),l.length)for(let _=1;_<i.length;_++){let v=i[_];l.forEach(O=>v.set(O,Vi(t,O)))}}return i}(i,oe,G);const ue=function Al(t,i){let n=null,o=null;return Array.isArray(i)&&i.length?(n=zs(i[0]),i.length>1&&(o=zs(i[i.length-1]))):i instanceof Map&&(n=zs(i)),n||o?new Dc(t,n,o):null}(i,oe);return new bt(i,oe,P,ue)}}let Je=(()=>{class t extends T._j{constructor(n,o){super(),this._nextAnimationId=0,this._renderer=n.createRenderer(o.body,{id:"0",encapsulation:e.ifc.None,styles:[],data:{animation:[]}})}build(n){const o=this._nextAnimationId.toString();this._nextAnimationId++;const l=Array.isArray(n)?(0,T.vP)(n):n;return To(this._renderer,null,o,"register",[l]),new en(o,this._renderer)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(e.FYo),e.LFG(f.K0))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac}),t})();class en extends T.LC{constructor(i,n){super(),this._id=i,this._renderer=n}create(i,n){return new fi(this._id,i,n||{},this._renderer)}}class fi{constructor(i,n,o,l){this.id=i,this.element=n,this._renderer=l,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",o)}_listen(i,n){return this._renderer.listen(this.element,`@@${this.id}:${i}`,n)}_command(i,...n){return To(this._renderer,this.element,this.id,i,n)}onDone(i){this._listen("done",i)}onStart(i){this._listen("start",i)}onDestroy(i){this._listen("destroy",i)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset"),this._started=!1}setPosition(i){this._command("setPosition",i)}getPosition(){return this._renderer.engine.players[+this.id]?.getPosition()??0}}function To(t,i,n,o,l){return t.setProperty(i,`@@${n}:${o}`,l)}const mi="@.disabled";let Hs=(()=>{class t{constructor(n,o,l){this.delegate=n,this.engine=o,this._zone=l,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),o.onRemovalComplete=(_,v)=>{const O=v?.parentNode(_);O&&v.removeChild(O,_)}}createRenderer(n,o){const _=this.delegate.createRenderer(n,o);if(!(n&&o&&o.data&&o.data.animation)){let K=this._rendererCache.get(_);return K||(K=new Qs("",_,this.engine,()=>this._rendererCache.delete(_)),this._rendererCache.set(_,K)),K}const v=o.id,O=o.id+"-"+this._currentId;this._currentId++,this.engine.register(O,n);const P=K=>{Array.isArray(K)?K.forEach(P):this.engine.registerTrigger(v,O,n,K.name,K)};return o.data.animation.forEach(P),new Hu(this,O,_,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(n,o,l){n>=0&&n<this._microtaskId?this._zone.run(()=>o(l)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(_=>{const[v,O]=_;v(O)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([o,l]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(e.FYo),e.LFG(ql),e.LFG(e.R0b))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac}),t})();class Qs{constructor(i,n,o,l){this.namespaceId=i,this.delegate=n,this.engine=o,this._onDestroy=l,this.destroyNode=this.delegate.destroyNode?_=>n.destroyNode(_):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy(),this._onDestroy?.()}createElement(i,n){return this.delegate.createElement(i,n)}createComment(i){return this.delegate.createComment(i)}createText(i){return this.delegate.createText(i)}appendChild(i,n){this.delegate.appendChild(i,n),this.engine.onInsert(this.namespaceId,n,i,!1)}insertBefore(i,n,o,l=!0){this.delegate.insertBefore(i,n,o),this.engine.onInsert(this.namespaceId,n,i,l)}removeChild(i,n,o){this.engine.onRemove(this.namespaceId,n,this.delegate,o)}selectRootElement(i,n){return this.delegate.selectRootElement(i,n)}parentNode(i){return this.delegate.parentNode(i)}nextSibling(i){return this.delegate.nextSibling(i)}setAttribute(i,n,o,l){this.delegate.setAttribute(i,n,o,l)}removeAttribute(i,n,o){this.delegate.removeAttribute(i,n,o)}addClass(i,n){this.delegate.addClass(i,n)}removeClass(i,n){this.delegate.removeClass(i,n)}setStyle(i,n,o,l){this.delegate.setStyle(i,n,o,l)}removeStyle(i,n,o){this.delegate.removeStyle(i,n,o)}setProperty(i,n,o){"@"==n.charAt(0)&&n==mi?this.disableAnimations(i,!!o):this.delegate.setProperty(i,n,o)}setValue(i,n){this.delegate.setValue(i,n)}listen(i,n,o){return this.delegate.listen(i,n,o)}disableAnimations(i,n){this.engine.disableAnimations(i,n)}}class Hu extends Qs{constructor(i,n,o,l,_){super(n,o,l,_),this.factory=i,this.namespaceId=n}setProperty(i,n,o){"@"==n.charAt(0)?"."==n.charAt(1)&&n==mi?this.disableAnimations(i,o=void 0===o||!!o):this.engine.process(this.namespaceId,i,n.slice(1),o):this.delegate.setProperty(i,n,o)}listen(i,n,o){if("@"==n.charAt(0)){const l=function zl(t){switch(t){case"body":return document.body;case"document":return document;case"window":return window;default:return t}}(i);let _=n.slice(1),v="";return"@"!=_.charAt(0)&&([_,v]=function sc(t){const i=t.indexOf(".");return[t.substring(0,i),t.slice(i+1)]}(_)),this.engine.listen(this.namespaceId,l,_,v,O=>{this.factory.scheduleListenerCallback(O._data||-1,o,O)})}return this.delegate.listen(i,n,o)}}let hu=(()=>{class t extends ql{constructor(n,o,l,_){super(n.body,o,l)}ngOnDestroy(){this.flush()}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(f.K0),e.LFG(Hn),e.LFG(Ze),e.LFG(e.z2F))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac}),t})();const ec=[{provide:T._j,useClass:Je},{provide:Ze,useFactory:function lu(){return new vi}},{provide:ql,useClass:hu},{provide:e.FYo,useFactory:function id(t,i,n){return new Hs(t,i,n)},deps:[u.se,ql,e.R0b]}],Fc=[{provide:Hn,useFactory:()=>new pt},{provide:e.QbO,useValue:"BrowserAnimations"},...ec],du=[{provide:Hn,useClass:Dn},{provide:e.QbO,useValue:"NoopAnimations"},...ec];let Lc=(()=>{class t{static withConfig(n){return{ngModule:t,providers:n.disableAnimations?du:Fc}}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({providers:Fc,imports:[u.b2]}),t})();var Q=s(23122),Ee=s(54247),yt=s(23815),Xe=s.n(yt),Gt=s(64762),An=s(93523);let kn=class{constructor(i){this.http=i,this.baseURL="api/cephfs",this.baseUiURL="ui-api/cephfs"}list(){return this.http.get(`${this.baseURL}`)}lsDir(i,n){let o=`${this.baseUiURL}/${i}/ls_dir?depth=2`;return n&&(o+=`&path=${encodeURIComponent(n)}`),this.http.get(o)}getCephfs(i){return this.http.get(`${this.baseURL}/${i}`)}getTabs(i){return this.http.get(`ui-api/cephfs/${i}/tabs`)}getClients(i){return this.http.get(`${this.baseURL}/${i}/clients`)}evictClient(i,n){return this.http.delete(`${this.baseURL}/${i}/client/${n}`)}getMdsCounters(i){return this.http.get(`${this.baseURL}/${i}/mds_counters`)}mkSnapshot(i,n,o){let l=new m.LE;return l=l.append("path",n),Xe().isUndefined(o)||(l=l.append("name",o)),this.http.post(`${this.baseURL}/${i}/snapshot`,null,{params:l})}rmSnapshot(i,n,o){let l=new m.LE;return l=l.append("path",n),l=l.append("name",o),this.http.delete(`${this.baseURL}/${i}/snapshot`,{params:l})}quota(i,n,o){let l=new m.LE;return l=l.append("path",n),this.http.put(`${this.baseURL}/${i}/quota`,o,{observe:"response",params:l})}create(i,n){return this.http.post(this.baseURL,{name:i,service_spec:n},{observe:"response"})}isCephFsPool(i){return-1!==Xe().indexOf(i.application_metadata,"cephfs")&&!i.pool_name.includes("/")}remove(i){return this.http.delete(`${this.baseURL}/remove/${i}`,{observe:"response"})}rename(i,n){return this.http.put(`${this.baseURL}/rename`,{name:i,new_name:n},{observe:"response"})}};kn.\u0275fac=function(i){return new(i||kn)(e.LFG(m.eN))},kn.\u0275prov=e.Yz7({token:kn,factory:kn.\u0275fac,providedIn:"root"}),kn=(0,Gt.gn)([An.o,(0,Gt.w6)("design:paramtypes",[m.eN])],kn);var Hr=s(68136),Xr=s(99466),yr=s(79512),Rr=s(65862),Go=s(30982),Io=s(68774),Qn=s(51847),Gr=s(32337),Fr=s(76111),Ui=s(97161),Do=s(47640),Fa=s(64724),ca=s(63285),zo=s(59019),$l=s(94928),xl=s(46797),Uu=s(69158),Xc=s(91801),ad=s(76317),kc=s(59376),yi=s(51389),Wl=s(47557),Pa=s(66369),fc=s(60251),bu=s(61350),je=s(16738),Nt=s.n(je),tt=s(87311),tn=s(72621);const Xn=["chartCanvas"],bi=["chartTooltip"];let Ri=(()=>{class t{constructor(){this.lhsCounter="mds_mem.ino",this.rhsCounter="mds_server.handle_client_request",this.chart={datasets:[{label:this.lhsCounter,yAxisID:"LHS",data:[],lineTension:.1},{label:this.rhsCounter,yAxisID:"RHS",data:[],lineTension:.1}],options:{title:{text:"",display:!0},responsive:!0,maintainAspectRatio:!1,legend:{position:"top"},scales:{xAxes:[{position:"top",type:"time",time:{displayFormats:{quarter:"MMM YYYY"}},ticks:{maxRotation:0}}],yAxes:[{id:"LHS",type:"linear",position:"left"},{id:"RHS",type:"linear",position:"right"}]},tooltips:{enabled:!1,mode:"index",intersect:!1,position:"nearest",callbacks:{title:(n,o)=>{let l=0;if(n.length>0){const _=n[0];l=o.datasets[_.datasetIndex].data[_.index].x}return l.toString()}}}},chartType:"line"}}ngOnInit(){Xe().isUndefined(this.mdsCounter)||(this.setChartTooltip(),this.updateChart())}ngOnChanges(){Xe().isUndefined(this.mdsCounter)||this.updateChart()}setChartTooltip(){const n=new tt.h(this.chartCanvas,this.chartTooltip,l=>l.caretX+"px",l=>l.caretY-l.height-23+"px");n.getTitle=l=>Nt()(l,"x").format("LTS"),n.checkOffset=!0;const o={title:{text:this.mdsCounter.name},tooltips:{custom:l=>n.customTooltips(l)}};Xe().merge(this.chart,{options:o})}updateChart(){const n=[{data:this.convertTimeSeries(this.mdsCounter[this.lhsCounter])},{data:this.deltaTimeSeries(this.mdsCounter[this.rhsCounter])}];Xe().merge(this.chart,{datasets:n}),this.chart.datasets=[...this.chart.datasets]}convertTimeSeries(n){const o=[];return Xe().each(n,l=>{o.push({x:1e3*l[0],y:l[1]})}),o.shift(),o}deltaTimeSeries(n){let o,l=n[0];const _=[];for(o=1;o<n.length;o++){const v=n[o];_.push({x:1e3*v[0],y:v[1]-l[1]}),l=v}return _}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-chart"]],viewQuery:function(n,o){if(1&n&&(e.Gf(Xn,7),e.Gf(bi,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.chartCanvas=l.first),e.iGM(l=e.CRH())&&(o.chartTooltip=l.first)}},inputs:{mdsCounter:"mdsCounter"},features:[e.TTD],decls:6,vars:3,consts:[[1,"chart-container"],["baseChart","",3,"datasets","options","chartType"],["chartCanvas",""],[1,"chartjs-tooltip"],["chartTooltip",""]],template:function(n,o){1&n&&(e.TgZ(0,"div",0),e._UZ(1,"canvas",1,2),e.TgZ(3,"div",3,4),e._UZ(5,"table"),e.qZA()()),2&n&&(e.xp6(1),e.Q6J("datasets",o.chart.datasets)("options",o.chart.options)("chartType",o.chart.chartType))},dependencies:[tn.jh],styles:['.chart-container[_ngcontent-%COMP%]{cursor:pointer;margin:auto;overflow:visible;position:absolute}canvas[_ngcontent-%COMP%]{user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important;opacity:0;pointer-events:none;position:absolute;transform:translate(-50%);transition:all .1s ease}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]:after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]:after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]:after{border-color:#000 transparent transparent transparent;border-style:solid;border-width:5px;content:" ";left:50%;margin-left:-5px;position:absolute;top:100%}  .chartjs-tooltip-key{display:inline-block;height:10px;margin-right:10px;width:10px}.chart-container[_ngcontent-%COMP%]{height:500px;margin-bottom:20px;position:relative;width:100%}']}),t})();const fs=["poolUsageTpl"],Fs=["activityTmpl"];function Ra(t,i){if(1&t&&(e.TgZ(0,"div",0)(1,"div",11),e._UZ(2,"cd-cephfs-chart",12),e.qZA()()),2&t){const n=i.$implicit;e.xp6(2),e.Q6J("mdsCounter",n)}}function Vs(t,i){if(1&t&&e._UZ(0,"cd-usage-bar",13),2&t){const n=i.row;e.Q6J("total",n.size)("used",n.used)("title",n.pool_name)}}function Ms(t,i){1&t&&(e._uU(0),e.ALo(1,"dimless")),2&t&&e.AsE(" ","standby-replay"===i.row.state?"Evts":"Reqs",": ",e.lcZ(1,2,i.value)," /s\n")}let wl=(()=>{class t{constructor(n,o){this.dimlessBinary=n,this.dimless=o,this.standbys=[],this.objectValues=Object.values}ngOnChanges(){this.setStandbys()}setStandbys(){this.standbys=[{key:"Standby daemons",value:this.data.standbys}]}ngOnInit(){this.columns={ranks:[{prop:"rank",name:"Rank"},{prop:"state",name:"State"},{prop:"mds",name:"Daemon"},{prop:"activity",name:"Activity",cellTemplate:this.activityTmpl},{prop:"dns",name:"Dentries",pipe:this.dimless},{prop:"inos",name:"Inodes",pipe:this.dimless},{prop:"dirs",name:"Dirs",pipe:this.dimless},{prop:"caps",name:"Caps",pipe:this.dimless}],pools:[{prop:"pool",name:"Pool"},{prop:"type",name:"Type"},{prop:"size",name:"Size",pipe:this.dimlessBinary},{name:"Usage",cellTemplate:this.poolUsageTpl,comparator:(n,o,l,_)=>{const v=l.used/l.avail,O=_.used/_.avail;return v===O?0:v>O?1:-1}}]}}trackByFn(n,o){return o.name}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Wl.$),e.Y36(Pa.n))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-detail"]],viewQuery:function(n,o){if(1&n&&(e.Gf(fs,7),e.Gf(Fs,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.poolUsageTpl=l.first),e.iGM(l=e.CRH())&&(o.activityTmpl=l.first)}},inputs:{data:"data"},features:[e.TTD],decls:19,vars:9,consts:function(){let i,n,o,l;return i="Ranks",n="Standbys",o="Pools",l="MDS performance counters",[[1,"row"],[1,"col-sm-6"],i,[3,"data","columns","toolHeader"],n,[3,"data"],o,l,["class","row",4,"ngFor","ngForOf","ngForTrackBy"],["poolUsageTpl",""],["activityTmpl",""],[1,"col-md-12"],[3,"mdsCounter"],[3,"total","used","title"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"legend"),e.SDv(3,2),e.qZA(),e._UZ(4,"cd-table",3),e.TgZ(5,"legend"),e.SDv(6,4),e.qZA(),e._UZ(7,"cd-table-key-value",5),e.qZA(),e.TgZ(8,"div",1)(9,"legend"),e.SDv(10,6),e.qZA(),e._UZ(11,"cd-table",3),e.qZA()(),e.TgZ(12,"legend"),e.SDv(13,7),e.qZA(),e.YNc(14,Ra,3,1,"div",8),e.YNc(15,Vs,1,3,"ng-template",null,9,e.W1O),e.YNc(17,Ms,2,4,"ng-template",null,10,e.W1O)),2&n&&(e.xp6(4),e.Q6J("data",o.data.ranks)("columns",o.columns.ranks)("toolHeader",!1),e.xp6(3),e.Q6J("data",o.standbys),e.xp6(4),e.Q6J("data",o.data.pools)("columns",o.columns.pools)("toolHeader",!1),e.xp6(3),e.Q6J("ngForOf",o.objectValues(o.data.mdsCounters))("ngForTrackBy",o.trackByFn))},dependencies:[f.sg,fc.O,zo.a,bu.b,Ri,Pa.n],styles:[".progress[_ngcontent-%COMP%]{margin-bottom:0}"]}),t})();var Ho=s(18001);let Qa=(()=>{class t{constructor(n,o,l,_,v){this.cephfsService=n,this.modalService=o,this.notificationService=l,this.authStorageService=_,this.actionLabels=v,this.triggerApiUpdate=new e.vpe,this.selection=new Io.r,this.permission=this.authStorageService.getPermissions().cephfs,this.tableActions=[{permission:"update",icon:Rr.P.signOut,click:()=>this.evictClientModal(),name:this.actionLabels.EVICT}]}ngOnInit(){this.columns=[{prop:"id",name:"id"},{prop:"type",name:"type"},{prop:"state",name:"state"},{prop:"version",name:"version"},{prop:"hostname",name:"Host"},{prop:"root",name:"root"}]}updateSelection(n){this.selection=n}evictClient(n){this.cephfsService.evictClient(this.id,n).subscribe(()=>{this.triggerApiUpdate.emit(),this.modalRef.close(),this.notificationService.show(Ho.k.success,"Evicted client '" + n + "'")},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}evictClientModal(){const n=this.selection.first().id;this.modalRef=this.modalService.show(Go.M,{itemDescription:"client",itemNames:[n],actionDescription:"evict",submitAction:()=>this.evictClient(n)})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(kn),e.Y36(ca.Z),e.Y36(Ui.g),e.Y36(Do.j),e.Y36(yr.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-clients"]],inputs:{id:"id",clients:"clients"},outputs:{triggerApiUpdate:"triggerApiUpdate"},decls:2,vars:7,consts:[["selectionType","single",3,"data","columns","status","autoReload","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"]],template:function(n,o){1&n&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.triggerApiUpdate.emit()})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1),e.qZA()),2&n&&(e.Q6J("data",o.clients.data)("columns",o.columns)("status",o.clients.status)("autoReload",-1),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},dependencies:[zo.a,$l.K]}),t})();var rn=s(20092),Jl=s(62946),le=s(36169),ae=s(65683),De=s(90070),Ve=s(96102),st=s(87925);const zt=["origin"],Qt=function(t,i){return[t,i]};function Gn(t,i){if(1&t&&e._UZ(0,"i",5),2&t){const n=e.oxw(2);e.Q6J("ngClass",e.WLB(1,Qt,n.icons.spinner,n.icons.spin))}}function Er(t,i){if(1&t&&(e.TgZ(0,"tree-root",10),e.YNc(1,Gn,1,4,"ng-template",null,11,e.W1O),e.qZA()),2&t){const n=e.oxw();e.Q6J("nodes",n.nodes)("options",n.treeOptions)}}function Nr(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"legend"),e.SDv(2,17),e.qZA(),e.TgZ(3,"cd-table",18),e.NdJ("updateSelection",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.quota.updateSelection(l))}),e._UZ(4,"cd-table-actions",19),e.qZA(),e.BQk()}if(2&t){const n=e.oxw(2);e.xp6(3),e.Q6J("data",n.settings)("columns",n.quota.columns)("limit",0)("footer",!1)("onlyActionHeader",!0)("forceIdentifier",!0)("toolHeader",!1),e.xp6(1),e.Q6J("permission",n.permission)("selection",n.quota.selection)("tableActions",n.quota.tableActions)}}function Mi(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",12)(1,"div",2)(2,"div",3),e._uU(3),e.qZA(),e.TgZ(4,"div",6),e.YNc(5,Nr,5,10,"ng-container",13),e.TgZ(6,"legend"),e.SDv(7,14),e.qZA(),e.TgZ(8,"cd-table",15),e.NdJ("updateSelection",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.snapshot.updateSelection(l))}),e._UZ(9,"cd-table-actions",16),e.qZA()()()()}if(2&t){const n=e.oxw();e.xp6(3),e.hij(" ",n.selectedDir.path," "),e.xp6(2),e.Q6J("ngIf","/"!==n.selectedDir.path),e.xp6(3),e.Q6J("data",n.selectedDir.snapshots)("columns",n.snapshot.columns),e.xp6(1),e.Q6J("permission",n.permission)("selection",n.snapshot.selection)("tableActions",n.snapshot.tableActions)}}function ao(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"span",20),e.NdJ("click",function(){const _=e.CHM(n).value,v=e.oxw();return e.KtG(v.selectOrigin(_))}),e._uU(1),e.qZA()}if(2&t){const n=i.value;e.xp6(1),e.Oqu(n)}}let rs=(()=>{class t{constructor(n,o,l,_,v,O,P){this.authStorageService=n,this.modalService=o,this.cephfsService=l,this.cdDatePipe=_,this.actionLabels=v,this.notificationService=O,this.dimlessBinaryPipe=P,this.icons=Rr.P,this.loadingIndicator=!1,this.loading={},this.treeOptions={useVirtualScroll:!0,getChildren:G=>this.updateDirectory(G.id),actionMapping:{mouse:{click:this.selectAndShowNode.bind(this),expanderClick:this.selectAndShowNode.bind(this)}}}}selectAndShowNode(n,o,l){Jl.iM.TOGGLE_EXPANDED(n,o,l),this.selectNode(o)}selectNode(n){Jl.iM.TOGGLE_ACTIVE(void 0,n,void 0),this.selectedDir=this.getDirectory(n),"/"!==n.id&&this.setSettings(n)}ngOnInit(){this.permission=this.authStorageService.getPermissions().cephfs,this.setUpQuotaTable(),this.setUpSnapshotTable()}setUpQuotaTable(){this.quota={columns:[{prop:"row.name",name:"Name",flexGrow:1},{prop:"row.value",name:"Value",sortable:!1,flexGrow:1},{prop:"row.originPath",name:"Origin",sortable:!1,cellTemplate:this.originTmpl,flexGrow:1}],selection:new Io.r,updateSelection:n=>{this.quota.selection=n},tableActions:[{name:this.actionLabels.SET,icon:Rr.P.edit,permission:"update",visible:n=>!n.hasSelection||n.first()&&0===n.first().dirValue,click:()=>this.updateQuotaModal()},{name:this.actionLabels.UPDATE,icon:Rr.P.edit,permission:"update",visible:n=>n.first()&&n.first().dirValue>0,click:()=>this.updateQuotaModal()},{name:this.actionLabels.UNSET,icon:Rr.P.destroy,permission:"update",disable:n=>!n.hasSelection||n.first()&&0===n.first().dirValue,click:()=>this.unsetQuotaModal()}]}}setUpSnapshotTable(){this.snapshot={columns:[{prop:"name",name:"Name",flexGrow:1},{prop:"path",name:"Path",isHidden:!0,flexGrow:2},{prop:"created",name:"Created",flexGrow:1,pipe:this.cdDatePipe},{prop:"created",name:"Capacity",flexGrow:1}],selection:new Io.r,updateSelection:n=>{this.snapshot.selection=n},tableActions:[{name:this.actionLabels.CREATE,icon:Rr.P.add,permission:"create",canBePrimary:n=>!n.hasSelection,click:()=>this.createSnapshot(),disable:()=>this.disableCreateSnapshot()},{name:this.actionLabels.DELETE,icon:Rr.P.destroy,permission:"delete",click:()=>this.deleteSnapshotModal(),canBePrimary:n=>n.hasSelection,disable:n=>!n.hasSelection}]}}disableCreateSnapshot(){const n=this.selectedDir.path.split("/").slice(1);return n.length>=4&&"volumes"===n[0]&&"Cannot create snapshots for files/folders in the subvolume " + n[2] + ""}ngOnChanges(){this.selectedDir=void 0,this.dirs=[],this.requestedPaths=[],this.nodeIds={},this.id&&(this.setRootNode(),this.firstCall())}setRootNode(){this.nodes=[{name:"/",id:"/",isExpanded:!0}]}firstCall(){setTimeout(()=>{this.getNode("/").loadNodeChildren()},10)}updateDirectory(n){if(this.unsetLoadingIndicator(),this.requestedPaths.includes(n)){if(!0===this.loading[n])return}else this.requestedPaths.push(n);return new Promise(o=>{this.setLoadingIndicator(n,!0),this.cephfsService.lsDir(this.id,n).subscribe(l=>{this.updateTreeStructure(l),this.updateQuotaTable(),this.updateTree(),o(this.getChildren(n)),this.setLoadingIndicator(n,!1)})})}setLoadingIndicator(n,o){this.loading[n]=o,this.unsetLoadingIndicator()}getSubDirectories(n,o=this.dirs){return o.filter(l=>l.parent===n)}getChildren(n){const o=this.getSubTree(n);return Xe().sortBy(this.getSubDirectories(n),"path").map(l=>this.createNode(l,o))}createNode(n,o){return this.nodeIds[n.path]=n,o||this.getSubTree(n.parent),{name:n.name,id:n.path,hasChildren:this.getSubDirectories(n.path,o).length>0}}getSubTree(n){return this.dirs.filter(o=>o.parent&&o.parent.startsWith(n))}setSettings(n){const o=(l,_)=>l?_?_(l):l:"";this.settings=[this.getQuota(n,"max_files",o),this.getQuota(n,"max_bytes",l=>o(l,_=>this.dimlessBinaryPipe.transform(_)))]}getQuota(n,o,l){const _=n.id;n=this.getOrigin(n,o);const v=this.getDirectory(n),O=v.quotas[o];let P=O,G=v.path;if(n.id===_)if("/"===n.parent.id)P=0;else{const K=this.getDirectory(this.getOrigin(n.parent,o));P=K.quotas[o],G=K.path}return{row:{name:"max_bytes"===o?"Max size":"Max files",value:l(O),originPath:O?v.path:""},quotaKey:o,dirValue:this.nodeIds[_].quotas[o],nextTreeMaximum:{value:P,path:P?G:""}}}getOrigin(n,o){if(n.parent&&"/"!==n.parent.id){const l=this.getQuotaFromTree(n,o),_=this.getOrigin(n.parent,o),v=this.getQuotaFromTree(_,o);return 0===l||0!==v&&v<l?_:n}return n}getQuotaFromTree(n,o){return this.getDirectory(n).quotas[o]}getDirectory(n){return this.nodeIds[n.id]}selectOrigin(n){this.selectNode(this.getNode(n))}getNode(n){return this.treeComponent.treeModel.getNodeById(n)}updateQuotaModal(){const n=this.selectedDir.path,o=this.quota.selection.first(),l=o.nextTreeMaximum,_=o.quotaKey,v=o.dirValue;this.modalService.show(ae.X,{titleText:this.getModalQuotaTitle(0===v?this.actionLabels.SET:this.actionLabels.UPDATE,n),message:l.value?"The inherited " + this.getQuotaValueFromPathMsg(l.value, l.path) + " is the maximum value to be used.":void 0,fields:[this.getQuotaFormField(o.row.name,_,v,l.value)],submitButtonText:"Save",onSubmit:O=>this.updateQuota(O)})}getModalQuotaTitle(n,o){return "" + n + " CephFS " + this.getQuotaName() + " quota for '" + o + "'"}getQuotaName(){return this.isBytesQuotaSelected()?"size":"files"}isBytesQuotaSelected(){return"max_bytes"===this.quota.selection.first().quotaKey}getQuotaValueFromPathMsg(n,o){return n=this.isBytesQuotaSelected()?this.dimlessBinaryPipe.transform(n):n,"" + this.getQuotaName() + " quota " + n + " from '" + o + "'"}getQuotaFormField(n,o,l,_){const v="max_bytes"===o,O=[v?De.h.binaryMin(0):rn.kI.min(0)];_&&O.push(v?De.h.binaryMax(_):rn.kI.max(_));const P={type:v?"binary":"number",label:n,name:o,value:l,validators:O,required:!0};return v||(P.errors={min:"Value has to be at least 0 or more",max:"Value has to be at most " + _ + " or less"}),P}updateQuota(n,o){const l=this.selectedDir.path,_=this.quota.selection.first().quotaKey,v=0===this.selectedDir.quotas[_]?this.actionLabels.SET:0===n[_]?this.actionLabels.UNSET:"Updated";this.cephfsService.quota(this.id,l,n).subscribe(()=>{o&&o(),this.notificationService.show(Ho.k.success,this.getModalQuotaTitle(v,l)),this.forceDirRefresh()})}unsetQuotaModal(){const n=this.selectedDir.path,o=this.quota.selection.first(),l=o.quotaKey,_=o.nextTreeMaximum,v=o.dirValue,O=this.getQuotaValueFromPathMsg(_.value,_.path),P=_.value>0?_.value>v?"in order to inherit " + O + "":"which isn't used because of the inheritance of " + O + "":"in order to have no quota on the directory";this.modalRef=this.modalService.show(le.Y,{titleText:this.getModalQuotaTitle(this.actionLabels.UNSET,n),buttonText:this.actionLabels.UNSET,description:"" + this.actionLabels.UNSET + " " + this.getQuotaValueFromPathMsg(v, n) + " " + P + ".",onSubmit:()=>this.updateQuota({[l]:0},()=>this.modalRef.close())})}createSnapshot(){const n=this.selectedDir.path;this.modalService.show(ae.X,{titleText:"Create Snapshot",message:"Please enter the name of the snapshot.",fields:[{type:"text",name:"name",value:`${Nt()().toISOString(!0)}`,required:!0,validators:[this.validateValue.bind(this)]}],submitButtonText:"Create Snapshot",onSubmit:o=>{this.alreadyExists?this.notificationService.show(Ho.k.error,"Snapshot name '" + o.name + "' is already in use. Please use another name."):this.cephfsService.mkSnapshot(this.id,n,o.name).subscribe(l=>{this.notificationService.show(Ho.k.success,"Created snapshot '" + l + "' for '" + n + "'"),this.forceDirRefresh()})}})}validateValue(n){this.alreadyExists=this.selectedDir.snapshots.some(o=>o.name===n.value)}forceDirRefresh(n){if(!n){const l=this.selectedDir;if(!l)throw new Error("This function can only be called without path if an selection was made");n=l.parent?l.parent:l.path}this.getNode(n).loadNodeChildren()}updateTreeStructure(n){const o=(_,v)=>{const O=_.filter(G=>G.parent===v),P=O.map(G=>G.path);return{children:O,paths:P}};Xe().uniq(n.map(_=>_.parent).sort()).forEach(_=>{const v=o(n,_),O=o(this.dirs,_);O.children.forEach(P=>{v.paths.includes(P.path)||this.removeOldDirectory(P)}),v.children.forEach(P=>{O.paths.includes(P.path)?this.updateExistingDirectory(O.children,P):this.addNewDirectory(P)})})}removeOldDirectory(n){const o=n.path;Xe().remove(this.dirs,l=>l.path===o),delete this.nodeIds[o],this.updateDirectoriesParentNode(n)}updateDirectoriesParentNode(n){const o=n.parent;if(!o)return;const l=this.getNode(o);if(!l)return;const _=this.getChildren(o);l.data.children=_,l.data.hasChildren=_.length>0,this.treeComponent.treeModel.update()}addNewDirectory(n){this.dirs.push(n),this.nodeIds[n.path]=n,this.updateDirectoriesParentNode(n)}updateExistingDirectory(n,o){const l=n.find(_=>_.path===o.path);Object.assign(l,o)}updateQuotaTable(){const n=this.selectedDir?this.getNode(this.selectedDir.path):void 0;n&&"/"!==n.id&&this.setSettings(n)}updateTree(n=!1){this.loadingIndicator&&!n||(this.treeComponent.treeModel.update(),this.nodes=[...this.nodes],this.treeComponent.sizeChanged())}deleteSnapshotModal(){this.modalRef=this.modalService.show(Go.M,{itemDescription:"CephFs Snapshot",itemNames:this.snapshot.selection.selected.map(n=>n.name),submitAction:()=>this.deleteSnapshot()})}deleteSnapshot(){const n=this.selectedDir.path;this.snapshot.selection.selected.forEach(o=>{const l=o.name;this.cephfsService.rmSnapshot(this.id,n,l).subscribe(()=>{this.notificationService.show(Ho.k.success,"Deleted snapshot '" + l + "' for '" + n + "'")})}),this.modalRef.close(),this.forceDirRefresh()}refreshAllDirectories(){this.loadingIndicator=!0,this.requestedPaths.map(o=>this.forceDirRefresh(o));const n=setInterval(()=>{this.updateTree(!0),this.loadingIndicator||clearInterval(n)},3e3)}unsetLoadingIndicator(){this.loadingIndicator&&(clearTimeout(this.loadingTimeout),this.loadingTimeout=setTimeout(()=>{if(Object.values(this.loading).some(o=>o))return this.unsetLoadingIndicator();this.loadingIndicator=!1,this.updateTree()},3e3))}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(ca.Z),e.Y36(kn),e.Y36(Ve.N),e.Y36(yr.p4),e.Y36(Ui.g),e.Y36(Wl.$))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-directories"]],viewQuery:function(n,o){if(1&n&&(e.Gf(Jl.qr,5),e.Gf(zt,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.treeComponent=l.first),e.iGM(l=e.CRH())&&(o.originTmpl=l.first)}},inputs:{id:"id"},features:[e.TTD],decls:11,vars:10,consts:function(){let i,n;return i="Snapshots",n="Quotas",[[1,"row"],[1,"col-sm-4","pe-0"],[1,"card"],[1,"card-header"],["type","button",1,"btn","btn-light","pull-right",3,"click"],[3,"ngClass"],[1,"card-body"],[3,"nodes","options",4,"ngIf"],["class","col-sm-8 metadata",4,"ngIf"],["origin",""],[3,"nodes","options"],["loadingTemplate",""],[1,"col-sm-8","metadata"],[4,"ngIf"],i,["identifier","name","forceIdentifier","true","selectionType","multiClick",3,"data","columns","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],n,["selectionType","single","identifier","quotaKey",3,"data","columns","limit","footer","onlyActionHeader","forceIdentifier","toolHeader","updateSelection"],[1,"only-table-actions",3,"permission","selection","tableActions"],[1,"quota-origin",3,"click"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"button",4),e.NdJ("click",function(){return o.refreshAllDirectories()}),e._UZ(5,"i",5),e.qZA()(),e.TgZ(6,"div",6),e.YNc(7,Er,3,2,"tree-root",7),e.qZA()()(),e.YNc(8,Mi,10,7,"div",8),e.qZA(),e.YNc(9,ao,2,1,"ng-template",null,9,e.W1O)),2&n&&(e.xp6(4),e.ekj("disabled",o.loadingIndicator),e.xp6(1),e.ekj("fa-spin",o.loadingIndicator),e.Q6J("ngClass",e.WLB(7,Qt,o.icons.large,o.icons.refresh)),e.xp6(2),e.Q6J("ngIf",o.nodes),e.xp6(1),e.Q6J("ngIf",o.selectedDir))},dependencies:[f.mk,f.O5,zo.a,$l.K,st.o,Jl.qr],styles:["cd-cephfs-directories tree-root .tree-children{overflow:inherit}.quota-origin[_ngcontent-%COMP%]{color:#25828e;cursor:pointer}.quota-origin[_ngcontent-%COMP%]:hover{color:#212529}"]}),t})();var ys=s(7357),Ps=s(25917),Ul=s(43190),eu=s(5304),mu=s(47349),wu=s(96736);let Rc=(()=>{class t{constructor(n){this.http=n,this.baseURL="api/cephfs/subvolume"}get(n,o=""){return this.http.get(`${this.baseURL}/${n}`,{params:{group_name:o}})}create(n,o,l,_,v,O,P,G,K){return this.http.post(this.baseURL,{vol_name:n,subvol_name:o,group_name:l,pool_layout:_,size:v,uid:O,gid:P,mode:G,namespace_isolated:K},{observe:"response"})}info(n,o,l=""){return this.http.get(`${this.baseURL}/${n}/info`,{params:{subvol_name:o,group_name:l}})}remove(n,o,l="",_=!1){return this.http.delete(`${this.baseURL}/${n}`,{params:{subvol_name:o,group_name:l,retain_snapshots:_},observe:"response"})}exists(n,o){return this.info(o,n).pipe((0,wu.h)(!0),(0,eu.K)(l=>(Xe().isFunction(l.preventDefault)&&l.preventDefault(),(0,Ps.of)(!1))))}update(n,o,l,_=""){return this.http.put(`${this.baseURL}/${n}`,{subvol_name:o,size:l,group_name:_})}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var fu=s(95463),qc=s(28211),$c=s(93614);let pu=(()=>{class t{constructor(n){this.http=n,this.baseURL="api/cephfs/subvolume/group"}get(n){return this.http.get(`${this.baseURL}/${n}`)}create(n,o,l,_,v,O,P){return this.http.post(this.baseURL,{vol_name:n,group_name:o,pool_layout:l,size:_,uid:v,gid:O,mode:P},{observe:"response"})}info(n,o){return this.http.get(`${this.baseURL}/${n}/info`,{params:{group_name:o}})}exists(n,o){return this.info(o,n).pipe((0,wu.h)(!0),(0,eu.K)(l=>(Xe().isFunction(l.preventDefault)&&l.preventDefault(),(0,Ps.of)(!1))))}update(n,o,l){return this.http.put(`${this.baseURL}/${n}`,{group_name:o,size:l})}remove(n,o){return this.http.delete(`${this.baseURL}/${n}`,{params:{group_name:o},observe:"response"})}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var vc=s(82799),La=s(18372),al=s(60312),rl=s(30839),xa=s(54982),Tu=s(82945),En=s(17932),Pu=s(63622),za=s(94276),Va=s(56310),Os=s(41582),Cu=s(10545);function ld(t,i){1&t&&(e.TgZ(0,"span",43),e.SDv(1,44),e.qZA())}function Hc(t,i){1&t&&(e.TgZ(0,"span",43),e.SDv(1,45),e.qZA())}function Vu(t,i){1&t&&(e.TgZ(0,"span",43),e.SDv(1,46),e.qZA())}function ud(t,i){if(1&t&&(e.TgZ(0,"option",50),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.name),e.xp6(1),e.Oqu(n.name)}}function md(t,i){if(1&t&&(e.TgZ(0,"select",47)(1,"option",48),e.SDv(2,49),e.qZA(),e.YNc(3,ud,2,2,"option",26),e.qZA()),2&t){const n=i.ngIf;e.xp6(3),e.Q6J("ngForOf",n)}}function tf(t,i){1&t&&(e.TgZ(0,"span",43),e.SDv(1,51),e.qZA())}function Uf(t,i){if(1&t&&(e.TgZ(0,"option",50),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.pool),e.xp6(1),e.Oqu(n.pool)}}function Mu(t,i){if(1&t){const n=e.EpF();e.ynx(0,4),e.TgZ(1,"form",5,6)(3,"div",7)(4,"div",8)(5,"label",9),e.SDv(6,10),e.qZA(),e.TgZ(7,"div",11),e._UZ(8,"input",12),e.YNc(9,ld,2,0,"span",13),e.YNc(10,Hc,2,0,"span",13),e.YNc(11,Vu,2,0,"span",13),e.qZA()(),e.TgZ(12,"div",8)(13,"label",14),e.SDv(14,15),e.qZA(),e.TgZ(15,"div",11),e._UZ(16,"input",16),e.qZA()(),e.TgZ(17,"div",8)(18,"label",17),e.SDv(19,18),e.qZA(),e.TgZ(20,"div",11),e.YNc(21,md,4,1,"select",19),e.ALo(22,"async"),e.qZA()(),e.TgZ(23,"div",8)(24,"label",20),e.tHW(25,21),e._UZ(26,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(27,"div",11),e._UZ(28,"input",22),e.YNc(29,tf,2,0,"span",13),e.qZA()(),e.TgZ(30,"div",8)(31,"label",23),e.tHW(32,24),e._UZ(33,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(34,"div",11)(35,"select",25),e.YNc(36,Uf,2,2,"option",26),e.qZA()()(),e.TgZ(37,"div",8)(38,"label",27),e.SDv(39,28),e.qZA(),e.TgZ(40,"div",11),e._UZ(41,"input",29),e.qZA()(),e.TgZ(42,"div",8)(43,"label",30),e.SDv(44,31),e.qZA(),e.TgZ(45,"div",11),e._UZ(46,"input",32),e.qZA()(),e.TgZ(47,"div",8)(48,"label",33),e.tHW(49,34),e._UZ(50,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(51,"div",11),e._UZ(52,"cd-checked-table-form",35),e.qZA()(),e.TgZ(53,"div",8)(54,"div",36)(55,"div",37),e._UZ(56,"input",38),e.TgZ(57,"label",39),e.tHW(58,40),e._UZ(59,"cd-helper"),e.N_p(),e.qZA()()()()(),e.TgZ(60,"div",41)(61,"cd-form-button-panel",42),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.submit())}),e.ALo(62,"titlecase"),e.ALo(63,"upperFirst"),e.qZA()()(),e.BQk()}if(2&t){const n=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.subvolumeForm),e.xp6(8),e.Q6J("ngIf",o.subvolumeForm.showError("subvolumeName",n,"required")),e.xp6(1),e.Q6J("ngIf",o.subvolumeForm.showError("subvolumeName",n,"notUnique")),e.xp6(1),e.Q6J("ngIf",o.subvolumeForm.showError("subvolumeName",n,"pattern")),e.xp6(10),e.Q6J("ngIf",e.lcZ(22,16,o.subVolumeGroups$)),e.xp6(8),e.Q6J("ngIf",o.subvolumeForm.showError("size",n,"pattern")),e.xp6(7),e.Q6J("ngForOf",o.dataPools),e.xp6(16),e.Q6J("data",o.scopePermissions)("columns",o.columns)("form",o.subvolumeForm)("isTableForOctalMode",!0)("initialValue",o.initialMode)("scopes",o.scopes)("isDisabled",o.isEdit),e.xp6(9),e.Q6J("form",o.subvolumeForm)("submitText",e.lcZ(62,18,o.action)+" "+e.lcZ(63,20,o.resource))}}let Uc=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O,P,G){super(),this.activeModal=n,this.actionLabels=o,this.taskWrapper=l,this.cephFsSubvolumeService=_,this.cephFsSubvolumeGroupService=v,this.formatter=O,this.dimlessBinary=P,this.octalToHumanReadable=G,this.isEdit=!1,this.scopePermissions=[],this.initialMode={owner:["read","write","execute"],group:["read","execute"],others:["read","execute"]},this.scopes=["owner","group","others"],this.resource="Subvolume"}ngOnInit(){this.action=this.actionLabels.CREATE,this.columns=[{prop:"scope",name:"All",flexGrow:.5},{prop:"read",name:"Read",flexGrow:.5,cellClass:"text-center"},{prop:"write",name:"Write",flexGrow:.5,cellClass:"text-center"},{prop:"execute",name:"Execute",flexGrow:.5,cellClass:"text-center"}],this.subVolumeGroups$=this.cephFsSubvolumeGroupService.get(this.fsName),this.dataPools=this.pools.filter(n=>"data"===n.type),this.createForm(),this.isEdit?this.populateForm():this.loadingReady()}createForm(){this.subvolumeForm=new fu.d({volumeName:new rn.NI({value:this.fsName,disabled:!0}),subvolumeName:new rn.NI("",{validators:[rn.kI.required,rn.kI.pattern(/^[.A-Za-z0-9_-]+$/)],asyncValidators:[De.h.unique(this.cephFsSubvolumeService.exists,this.cephFsSubvolumeService,null,null,this.fsName)]}),subvolumeGroupName:new rn.NI(this.subVolumeGroupName),pool:new rn.NI(this.dataPools[0]?.pool,{validators:[rn.kI.required]}),size:new rn.NI(null,{updateOn:"blur"}),uid:new rn.NI(null),gid:new rn.NI(null),mode:new rn.NI({}),isolatedNamespace:new rn.NI(!1)})}populateForm(){this.action=this.actionLabels.EDIT,this.cephFsSubvolumeService.info(this.fsName,this.subVolumeName,this.subVolumeGroupName).subscribe(n=>{this.subvolumeForm.get("subvolumeName").disable(),this.subvolumeForm.get("subvolumeGroupName").disable(),this.subvolumeForm.get("pool").disable(),this.subvolumeForm.get("uid").disable(),this.subvolumeForm.get("gid").disable(),this.subvolumeForm.get("isolatedNamespace").disable(),this.subvolumeForm.get("subvolumeName").setValue(this.subVolumeName),this.subvolumeForm.get("subvolumeGroupName").setValue(this.subVolumeGroupName),"infinite"!==n.bytes_quota&&this.subvolumeForm.get("size").setValue(this.dimlessBinary.transform(n.bytes_quota)),this.subvolumeForm.get("uid").setValue(n.uid),this.subvolumeForm.get("gid").setValue(n.gid),this.subvolumeForm.get("isolatedNamespace").setValue(n.pool_namespace),this.initialMode=this.octalToHumanReadable.transform(n.mode,!0),this.loadingReady()})}submit(){const n=this.subvolumeForm.getValue("subvolumeName"),o=this.subvolumeForm.getValue("subvolumeGroupName"),l=this.subvolumeForm.getValue("pool"),_=this.formatter.toBytes(this.subvolumeForm.getValue("size"))||0,v=this.subvolumeForm.getValue("uid"),O=this.subvolumeForm.getValue("gid"),P=this.formatter.toOctalPermission(this.subvolumeForm.getValue("mode")),G=this.subvolumeForm.getValue("isolatedNamespace");if(this.isEdit){const K=0===_?"infinite":_;this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("cephfs/subvolume/"+yr.MQ.EDIT,{subVolumeName:n}),call:this.cephFsSubvolumeService.update(this.fsName,n,String(K),o)}).subscribe({error:()=>{this.subvolumeForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}else this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("cephfs/subvolume/"+yr.MQ.CREATE,{subVolumeName:n}),call:this.cephFsSubvolumeService.create(this.fsName,n,o,l,String(_),v,O,P,G)}).subscribe({error:()=>{this.subvolumeForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(Gr.P),e.Y36(Rc),e.Y36(pu),e.Y36(qc.H),e.Y36(Wl.$),e.Y36(vc.f))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-subvolume-form"]],features:[e.qOj],decls:6,vars:8,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Name",o="Volume name",l="Subvolume group ",_="Size " + "\ufffd#26\ufffd" + "The size of the subvolume is specified by setting a quota on it. If left blank or put 0, then quota will be infinite" + "\ufffd/#26\ufffd" + "",v="e.g., 10GiB",O="Pool " + "\ufffd#33\ufffd" + "By default, the data_pool_layout of the parent directory is selected." + "\ufffd/#33\ufffd" + "",P="UID",G="GID",K="Mode " + "\ufffd#50\ufffd" + "Permissions for the directory. Default mode is 755 which is rwxr-xr-x" + "\ufffd/#50\ufffd" + "",oe="Isolated Namespace " + "\ufffd#59\ufffd" + "To create subvolume in a separate RADOS namespace." + "\ufffd/#59\ufffd" + "",ue="This field is required.",pe="The subvolume already exists.",ye="Subvolume name can only contain letters, numbers, '.', '-' or '_'",Ue="Default",xe="Size must be a number or in a valid format. eg: 5 GiB",[[3,"modalRef"],[1,"modal-title"],i,["class","modal-content",4,"cdFormLoading"],[1,"modal-content"],["name","subvolumeForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","subvolumeName",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],["type","text","placeholder","Subvolume name...","id","subvolumeName","name","subvolumeName","formControlName","subvolumeName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","volumeName",1,"cd-col-form-label"],o,["id","volumeName","name","volumeName","formControlName","volumeName",1,"form-control"],["for","subvolumeGroupName",1,"cd-col-form-label"],l,["class","form-select","id","subvolumeGroupName","name","subvolumeGroupName","formControlName","subvolumeGroupName",4,"ngIf"],["for","size",1,"cd-col-form-label"],_,["type","text","id","size","name","size","formControlName","size","placeholder",v,"defaultUnit","GiB","cdDimlessBinary","",1,"form-control"],["for","pool",1,"cd-col-form-label"],O,["id","pool","name","pool","formControlName","pool",1,"form-select"],[3,"value",4,"ngFor","ngForOf"],["for","uid",1,"cd-col-form-label"],P,["type","number","placeholder","Subvolume UID...","id","uid","name","uid","formControlName","uid",1,"form-control"],["for","gid",1,"cd-col-form-label"],G,["type","number","placeholder","Subvolume GID...","id","gid","name","gid","formControlName","gid",1,"form-control"],["for","mode",1,"cd-col-form-label"],K,["inputField","mode",3,"data","columns","form","isTableForOctalMode","initialValue","scopes","isDisabled"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","isolatedNamespace","name","isolatedNamespace","formControlName","isolatedNamespace",1,"custom-control-input"],["for","isolatedNamespace",1,"custom-control-label"],oe,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],ue,pe,ye,["id","subvolumeGroupName","name","subvolumeGroupName","formControlName","subvolumeGroupName",1,"form-select"],["value",""],Ue,[3,"value"],xe]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.YNc(5,Mu,64,22,"ng-container",3),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,4,o.action))(e.lcZ(4,6,o.resource)),e.QtT(2),e.xp6(1),e.Q6J("cdFormLoading",o.loading))},dependencies:[f.sg,f.O5,La.S,al.z,rl.p,xa.l,Tu.U,En.Q,Pu.y,st.o,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.wV,rn.Wl,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u,f.Ov,f.rS,Cu.m]}),t})();var Zu=s(34501);let Tp=(()=>{class t{constructor(){this.cssClasses=["badge-cd-label-green","badge-cd-label-cyan","badge-cd-label-purple","badge-cd-label-light-blue","badge-cd-label-gold","badge-cd-label-light-green"]}transform(n){let o=0,l=0;if(n)for(let _=0;_<n.length;_++)l=n.charCodeAt(_),o=Math.abs((o<<5)-o+l);return this.cssClasses[o%this.cssClasses.length]}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275pipe=e.Yjl({name:"colorClassFromText",type:t,pure:!0}),t})();function ip(t,i){if(1&t&&(e.TgZ(0,"span",2),e.ALo(1,"colorClassFromText"),e._uU(2),e.qZA()),2&t){const n=e.oxw();e.Gre("badge badge-",n.value,""),e.s9C("ngClass",e.lcZ(1,6,n.value)),e.Q6J("ngbTooltip",n.tooltipText),e.xp6(2),e.hij(" ",n.value,"\n")}}function Hd(t,i){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&t){const n=e.oxw();e.MT6("badge badge-background-primary badge-",n.key,"-",n.value,""),e.xp6(1),e.AsE(" ",n.key,": ",n.value," ")}}let Bf=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-label"]],inputs:{key:"key",value:"value",tooltipText:"tooltipText"},decls:3,vars:2,consts:[[3,"class","ngClass","ngbTooltip",4,"ngIf","ngIfElse"],["key_value",""],[3,"ngClass","ngbTooltip"]],template:function(n,o){if(1&n&&(e.YNc(0,ip,3,8,"span",0),e.YNc(1,Hd,2,6,"ng-template",null,1,e.W1O)),2&n){const l=e.MAs(2);e.Q6J("ngIf",!o.key)("ngIfElse",l)}},dependencies:[f.mk,f.O5,yi._L,Tp]}),t})();const gd=["quotaUsageTpl"],Nu=["typeTpl"],ed=["modeToHumanReadableTpl"],xf=["nameTpl"],_u=["quotaSizeTpl"],Ud=["removeTmpl"];function Bc(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"li",14)(1,"a",17),e.NdJ("click",function(){const _=e.CHM(n).$implicit,v=e.oxw(2);return e.KtG(v.selectSubVolumeGroup(_.name))}),e._uU(2),e.qZA()()}if(2&t){const n=i.$implicit,o=e.oxw(2);e.xp6(1),e.ekj("active",n.name===o.activeGroupName),e.xp6(1),e.Oqu(n.name)}}function Lo(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"ul",13)(2,"li",14)(3,"a",15),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.selectSubVolumeGroup())}),e._uU(4,"Default"),e.qZA()(),e.YNc(5,Bc,3,3,"li",16),e.qZA(),e.BQk()}if(2&t){const n=i.ngIf,o=e.oxw();e.xp6(3),e.ekj("active",!o.activeGroupName),e.xp6(2),e.Q6J("ngForOf",n)}}function Se(t,i){if(1&t&&e._UZ(0,"cd-usage-bar",20),2&t){const n=e.oxw().row;e.Q6J("total",n.info.bytes_quota)("used",n.info.bytes_used)("title",n.name)("showFreeToolTip",!1)("customLegendValue",n.info.bytes_quota)}}function Ne(t,i){if(1&t&&(e.TgZ(0,"span",22),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const n=e.oxw(2).row;e.xp6(1),e.hij(" ",e.lcZ(2,1,n.info.bytes_used),"")}}function _e(t,i){if(1&t&&e.YNc(0,Ne,3,3,"span",21),2&t){const n=e.oxw().row;e.Q6J("ngIf","undefined"===n.info.bytes_pcent)}}function Ye(t,i){if(1&t&&(e.YNc(0,Se,1,5,"cd-usage-bar",18),e.YNc(1,_e,1,1,"ng-template",null,19,e.W1O)),2&t){const n=i.row,o=e.MAs(2);e.Q6J("ngIf",n.info.bytes_pcent&&"undefined"!==n.info.bytes_pcent)("ngIfElse",o)}}function Mt(t,i){1&t&&e._UZ(0,"cd-label",23),2&t&&e.Q6J("value",i.value)}function un(t,i){if(1&t&&(e.TgZ(0,"span",25),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("ngClass",n.class)("ngbTooltip",n.toolTip),e.xp6(1),e.hij(" ",n.content," ")}}function Mn(t,i){1&t&&(e.YNc(0,un,2,3,"span",24),e.ALo(1,"octalToHumanReadable")),2&t&&e.Q6J("ngForOf",e.lcZ(1,1,i.value))}const ni=function(t,i){return[t,i]};function zi(t,i){if(1&t&&(e.TgZ(0,"span"),e._UZ(1,"i",31),e.qZA()),2&t){const n=e.oxw().row,o=e.oxw();e.xp6(1),e.MGl("ngbTooltip","",n.name," is ready to use"),e.Q6J("ngClass",e.WLB(2,ni,o.icons.success,o.icons.large))}}function Wo(t,i){if(1&t&&e._UZ(0,"i",32),2&t){const n=e.oxw().row,o=e.oxw();e.MGl("ngbTooltip","",n.name," is removed after retaining the snapshots"),e.Q6J("ngClass",e.WLB(2,ni,o.icons.warning,o.icons.large))}}function Qo(t,i){if(1&t&&e._UZ(0,"cd-label",23),2&t){const n=e.oxw().row;e.Q6J("value",n.info.type)}}function ya(t,i){if(1&t&&e._UZ(0,"cd-label",33),2&t){const n=e.oxw().row;e.Q6J("tooltipText",n.info.pool_namespace)}}function Bl(t,i){if(1&t&&(e.TgZ(0,"span",26),e._uU(1),e.qZA(),e.YNc(2,zi,2,5,"span",27),e.YNc(3,Wo,1,5,"ng-template",null,28,e.W1O),e.YNc(5,Qo,1,1,"cd-label",29),e.YNc(6,ya,1,1,"cd-label",30)),2&t){const n=i.row,o=e.MAs(4);e.xp6(1),e.Oqu(n.name),e.xp6(1),e.Q6J("ngIf","complete"===n.info.state)("ngIfElse",o),e.xp6(3),e.Q6J("ngIf","subvolume"!==n.info.type),e.xp6(1),e.Q6J("ngIf",n.info.pool_namespace)}}function Wu(t,i){if(1&t&&(e.TgZ(0,"cd-alert-panel",42),e._uU(1),e.qZA()),2&t){const n=e.oxw(2);e.xp6(1),e.hij(" ",n.errorMessage," ")}}function pc(t,i){if(1&t&&(e.ynx(0,34)(1,35),e.YNc(2,Wu,2,1,"cd-alert-panel",36),e.TgZ(3,"div",37)(4,"div",38),e._UZ(5,"input",39),e.TgZ(6,"label",40),e.tHW(7,41),e._UZ(8,"cd-helper"),e.N_p(),e.qZA()()(),e.BQk()()),2&t){const n=i.form,o=e.oxw();e.Q6J("formGroup",n),e.xp6(2),e.Q6J("ngIf",o.errorMessage.length>1)}}let cd=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O){super(),this.cephfsSubVolume=n,this.actionLabels=o,this.modalService=l,this.authStorageService=_,this.taskWrapper=v,this.cephfsSubvolumeGroupService=O,this.columns=[],this.selection=new Io.r,this.icons=Rr.P,this.errorMessage="",this.selectedName="",this.subject=new ys.t,this.groupsSubject=new ys.t,this.activeGroupName="",this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:1,cellTemplate:this.nameTpl},{name:"Data Pool",prop:"info.data_pool",flexGrow:.7,cellTransformation:Xr.e.badge,customTemplateConfig:{class:"badge-background-primary"}},{name:"Usage",prop:"info.bytes_pcent",flexGrow:.7,cellTemplate:this.quotaUsageTpl,cellClass:"text-right"},{name:"Path",prop:"info.path",flexGrow:1,cellTransformation:Xr.e.path},{name:"Mode",prop:"info.mode",flexGrow:.5,cellTemplate:this.modeToHumanReadableTpl},{name:"Created",prop:"info.created_at",flexGrow:.5,cellTransformation:Xr.e.timeAgo}],this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:Rr.P.add,click:()=>this.openModal()},{name:this.actionLabels.EDIT,permission:"update",icon:Rr.P.edit,click:()=>this.openModal(!0)},{name:this.actionLabels.REMOVE,permission:"delete",icon:Rr.P.destroy,click:()=>this.removeSubVolumeModal()}],this.getSubVolumes(),this.subVolumeGroups$=this.groupsSubject.pipe((0,Ul.w)(()=>this.cephfsSubvolumeGroupService.get(this.fsName).pipe((0,eu.K)(()=>(this.context.error(),(0,Ps.of)(null))))))}fetchData(){this.subject.next()}ngOnChanges(){this.subject.next(),this.groupsSubject.next()}updateSelection(n){this.selection=n}openModal(n=!1){this.modalService.show(Uc,{fsName:this.fsName,subVolumeName:this.selection?.first()?.name,subVolumeGroupName:this.activeGroupName,pools:this.pools,isEdit:n},{size:"lg"})}removeSubVolumeModal(){this.removeForm=new fu.d({retainSnapshots:new rn.NI(!1)}),this.errorMessage="",this.selectedName=this.selection.first().name,this.modalRef=this.modalService.show(Go.M,{actionDescription:"Remove",itemNames:[this.selectedName],itemDescription:"Subvolume",childFormGroup:this.removeForm,childFormGroupTemplate:this.removeTmpl,submitAction:()=>this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("cephfs/subvolume/remove",{subVolumeName:this.selectedName}),call:this.cephfsSubVolume.remove(this.fsName,this.selectedName,this.activeGroupName,this.removeForm.getValue("retainSnapshots"))}).subscribe({complete:()=>this.modalRef.close(),error:n=>{this.modalRef.componentInstance.stopLoadingSpinner(),this.errorMessage=n.error.detail}})})}selectSubVolumeGroup(n){this.activeGroupName=n,this.getSubVolumes(n)}getSubVolumes(n=""){this.subVolumes$=this.subject.pipe((0,Ul.w)(()=>this.cephfsSubVolume.get(this.fsName,n).pipe((0,eu.K)(()=>(this.context.error(),(0,Ps.of)(null))))),(0,mu.d)(1))}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Rc),e.Y36(yr.p4),e.Y36(ca.Z),e.Y36(Do.j),e.Y36(Gr.P),e.Y36(pu))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-subvolume-list"]],viewQuery:function(n,o){if(1&n&&(e.Gf(gd,7),e.Gf(Nu,7),e.Gf(ed,7),e.Gf(xf,7),e.Gf(_u,7),e.Gf(Ud,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.quotaUsageTpl=l.first),e.iGM(l=e.CRH())&&(o.typeTpl=l.first),e.iGM(l=e.CRH())&&(o.modeToHumanReadableTpl=l.first),e.iGM(l=e.CRH())&&(o.nameTpl=l.first),e.iGM(l=e.CRH())&&(o.quotaSizeTpl=l.first),e.iGM(l=e.CRH())&&(o.removeTmpl=l.first)}},inputs:{fsName:"fsName",pools:"pools"},features:[e.qOj,e.TTD],decls:21,vars:11,consts:function(){let i,n,o;return i="Groups",n="Quota limit is not set",o="Retain snapshots " + "\ufffd#8\ufffd" + "The subvolume can be removed retaining existing snapshots using this option. If snapshots are retained, the subvolume is considered empty for all operations not involving the retained snapshots." + "\ufffd/#8\ufffd" + "",[[1,"row"],[1,"col-sm-1"],i,[4,"ngIf"],[1,"col-11","vertical-line"],["columnMode","flex","selectionType","single",3,"data","columns","hasDetails","fetchData","updateSelection"],[1,"table-actions","btn-toolbar"],["id","cephfs-subvolume-actions",1,"btn-group",3,"permission","selection","tableActions"],["quotaUsageTpl",""],["typeTpl",""],["modeToHumanReadableTpl",""],["nameTpl",""],["removeTmpl",""],[1,"nav","flex-column","nav-pills"],[1,"nav-item"],[1,"nav-link",3,"click"],["class","nav-item",4,"ngFor","ngForOf"],[1,"nav-link","text-decoration-none","text-break",3,"click"],["customLegend","Quota","decimals","2",3,"total","used","title","showFreeToolTip","customLegendValue",4,"ngIf","ngIfElse"],["noLimitTpl",""],["customLegend","Quota","decimals","2",3,"total","used","title","showFreeToolTip","customLegendValue"],["ngbTooltip",n,4,"ngIf"],["ngbTooltip",n],[3,"value"],[3,"ngClass","ngbTooltip",4,"ngFor","ngForOf"],[3,"ngClass","ngbTooltip"],[1,"fw-bold"],[4,"ngIf","ngIfElse"],["snapshotRetainedTpl",""],[3,"value",4,"ngIf"],["value","namespaced",3,"tooltipText",4,"ngIf"],[1,"text-success",3,"ngClass","ngbTooltip"],[1,"text-warning",3,"ngClass","ngbTooltip"],["value","namespaced",3,"tooltipText"],[3,"formGroup"],["formGroupName","child"],["type","error",4,"ngIf"],[1,"form-group"],[1,"custom-control","custom-checkbox"],["type","checkbox","name","retainSnapshots","id","retainSnapshots","formControlName","retainSnapshots",1,"custom-control-input"],["for","retainSnapshots",1,"custom-control-label"],o,["type","error"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"h3"),e.SDv(3,2),e.qZA(),e.YNc(4,Lo,6,3,"ng-container",3),e.ALo(5,"async"),e.qZA(),e.TgZ(6,"div",4)(7,"cd-table",5),e.NdJ("fetchData",function(){return o.fetchData()})("updateSelection",function(_){return o.updateSelection(_)}),e.ALo(8,"async"),e.TgZ(9,"div",6),e._UZ(10,"cd-table-actions",7),e.qZA()()()(),e.YNc(11,Ye,3,2,"ng-template",null,8,e.W1O),e.YNc(13,Mt,1,1,"ng-template",null,9,e.W1O),e.YNc(15,Mn,2,3,"ng-template",null,10,e.W1O),e.YNc(17,Bl,7,5,"ng-template",null,11,e.W1O),e.YNc(19,pc,9,2,"ng-template",null,12,e.W1O)),2&n&&(e.xp6(4),e.Q6J("ngIf",e.lcZ(5,7,o.subVolumeGroups$)),e.xp6(3),e.Q6J("data",e.lcZ(8,9,o.subVolumes$))("columns",o.columns)("hasDetails",!1),e.xp6(3),e.Q6J("permission",o.permissions.cephfs)("selection",o.selection)("tableActions",o.tableActions))},dependencies:[f.mk,f.sg,f.O5,La.S,fc.O,Zu.G,Bf,zo.a,$l.K,st.o,za.b,Va.P,Os.V,rn.Wl,rn.JJ,rn.JL,rn.sg,rn.u,rn.x0,yi._L,f.Ov,Wl.$,vc.f]}),t})();function Ju(t,i){1&t&&(e.TgZ(0,"span",35),e.SDv(1,36),e.qZA())}function tc(t,i){1&t&&(e.TgZ(0,"span",35),e.SDv(1,37),e.qZA())}function od(t,i){1&t&&(e.TgZ(0,"span",35),e.SDv(1,38),e.qZA())}function Ed(t,i){1&t&&(e.TgZ(0,"span",35),e.SDv(1,39),e.qZA())}function h(t,i){if(1&t&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.pool),e.xp6(1),e.Oqu(n.pool)}}function b(t,i){if(1&t){const n=e.EpF();e.ynx(0,4),e.TgZ(1,"form",5,6)(3,"div",7)(4,"div",8)(5,"label",9),e.SDv(6,10),e.qZA(),e.TgZ(7,"div",11),e._UZ(8,"input",12),e.YNc(9,Ju,2,0,"span",13),e.YNc(10,tc,2,0,"span",13),e.YNc(11,od,2,0,"span",13),e.qZA()(),e.TgZ(12,"div",8)(13,"label",14),e.SDv(14,15),e.qZA(),e.TgZ(15,"div",11),e._UZ(16,"input",16),e.qZA()(),e.TgZ(17,"div",8)(18,"label",17),e.tHW(19,18),e._UZ(20,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(21,"div",11),e._UZ(22,"input",19),e.YNc(23,Ed,2,0,"span",13),e.qZA()(),e.TgZ(24,"div",8)(25,"label",20),e.tHW(26,21),e._UZ(27,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(28,"div",11)(29,"select",22),e.YNc(30,h,2,2,"option",23),e.qZA()()(),e.TgZ(31,"div",8)(32,"label",24),e.SDv(33,25),e.qZA(),e.TgZ(34,"div",11),e._UZ(35,"input",26),e.qZA()(),e.TgZ(36,"div",8)(37,"label",27),e.SDv(38,28),e.qZA(),e.TgZ(39,"div",11),e._UZ(40,"input",29),e.qZA()(),e.TgZ(41,"div",8)(42,"label",30),e.tHW(43,31),e._UZ(44,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(45,"div",11),e._UZ(46,"cd-checked-table-form",32),e.qZA()()(),e.TgZ(47,"div",33)(48,"cd-form-button-panel",34),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.submit())}),e.ALo(49,"titlecase"),e.ALo(50,"upperFirst"),e.qZA()()(),e.BQk()}if(2&t){const n=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.subvolumegroupForm),e.xp6(8),e.Q6J("ngIf",o.subvolumegroupForm.showError("subvolumegroupName",n,"required")),e.xp6(1),e.Q6J("ngIf",o.subvolumegroupForm.showError("subvolumegroupName",n,"notUnique")),e.xp6(1),e.Q6J("ngIf",o.subvolumegroupForm.showError("subvolumegroupName",n,"pattern")),e.xp6(12),e.Q6J("ngIf",o.subvolumegroupForm.showError("size",n,"pattern")),e.xp6(7),e.Q6J("ngForOf",o.dataPools),e.xp6(16),e.Q6J("data",o.scopePermissions)("columns",o.columns)("form",o.subvolumegroupForm)("isTableForOctalMode",!0)("initialValue",o.initialMode)("scopes",o.scopes)("isDisabled",o.isEdit),e.xp6(2),e.Q6J("form",o.subvolumegroupForm)("submitText",e.lcZ(49,15,o.action)+" "+e.lcZ(50,17,o.resource))}}let N=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O,P){super(),this.activeModal=n,this.actionLabels=o,this.taskWrapper=l,this.cephfsSubvolumeGroupService=_,this.formatter=v,this.dimlessBinary=O,this.octalToHumanReadable=P,this.isEdit=!1,this.scopePermissions=[],this.initialMode={owner:["read","write","execute"],group:["read","execute"],others:["read","execute"]},this.scopes=["owner","group","others"],this.resource="subvolume group"}ngOnInit(){this.action=this.actionLabels.CREATE,this.columns=[{prop:"scope",name:"All",flexGrow:.5},{prop:"read",name:"Read",flexGrow:.5,cellClass:"text-center"},{prop:"write",name:"Write",flexGrow:.5,cellClass:"text-center"},{prop:"execute",name:"Execute",flexGrow:.5,cellClass:"text-center"}],this.dataPools=this.pools.filter(n=>"data"===n.type),this.createForm(),this.isEdit?this.populateForm():this.loadingReady()}createForm(){this.subvolumegroupForm=new fu.d({volumeName:new rn.NI({value:this.fsName,disabled:!0}),subvolumegroupName:new rn.NI("",{validators:[rn.kI.required,rn.kI.pattern(/^[.A-Za-z0-9_-]+$/)],asyncValidators:[De.h.unique(this.cephfsSubvolumeGroupService.exists,this.cephfsSubvolumeGroupService,null,null,this.fsName)]}),pool:new rn.NI(this.dataPools[0]?.pool,{validators:[rn.kI.required]}),size:new rn.NI(null,{updateOn:"blur"}),uid:new rn.NI(null),gid:new rn.NI(null),mode:new rn.NI({})})}populateForm(){this.action=this.actionLabels.EDIT,this.cephfsSubvolumeGroupService.info(this.fsName,this.subvolumegroupName).subscribe(n=>{this.subvolumegroupForm.get("subvolumegroupName").disable(),this.subvolumegroupForm.get("pool").disable(),this.subvolumegroupForm.get("uid").disable(),this.subvolumegroupForm.get("gid").disable(),this.subvolumegroupForm.get("subvolumegroupName").setValue(this.subvolumegroupName),"infinite"!==n.bytes_quota&&this.subvolumegroupForm.get("size").setValue(this.dimlessBinary.transform(n.bytes_quota)),this.subvolumegroupForm.get("uid").setValue(n.uid),this.subvolumegroupForm.get("gid").setValue(n.gid),this.initialMode=this.octalToHumanReadable.transform(n.mode,!0),this.loadingReady()})}submit(){const n=this.subvolumegroupForm.getValue("subvolumegroupName"),o=this.subvolumegroupForm.getValue("pool"),l=this.formatter.toBytes(this.subvolumegroupForm.getValue("size"))||0,_=this.subvolumegroupForm.getValue("uid"),v=this.subvolumegroupForm.getValue("gid"),O=this.formatter.toOctalPermission(this.subvolumegroupForm.getValue("mode"));if(this.isEdit){const P=0===l?"infinite":l;this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("cephfs/subvolume/group/"+yr.MQ.EDIT,{subvolumegroupName:n}),call:this.cephfsSubvolumeGroupService.update(this.fsName,n,String(P))}).subscribe({error:()=>{this.subvolumegroupForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}else this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("cephfs/subvolume/group/"+yr.MQ.CREATE,{subvolumegroupName:n}),call:this.cephfsSubvolumeGroupService.create(this.fsName,n,o,String(l),_,v,O)}).subscribe({error:()=>{this.subvolumegroupForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(Gr.P),e.Y36(pu),e.Y36(qc.H),e.Y36(Wl.$),e.Y36(vc.f))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-subvolumegroup-form"]],features:[e.qOj],decls:6,vars:8,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Name",o="Volume name",l="Size " + "\ufffd#20\ufffd" + "The size of the subvolume group is specified by setting a quota on it. If left blank or put 0, then quota will be infinite" + "\ufffd/#20\ufffd" + "",_="e.g., 10GiB",v="Pool " + "\ufffd#27\ufffd" + "By default, the data_pool_layout of the parent directory is selected." + "\ufffd/#27\ufffd" + "",O="UID",P="GID",G="Mode " + "\ufffd#44\ufffd" + "Permissions for the directory. Default mode is 755 which is rwxr-xr-x" + "\ufffd/#44\ufffd" + "",K="This field is required.",oe="The subvolume group already exists.",ue="Subvolume name can only contain letters, numbers, '.', '-' or '_'",pe="Size must be a number or in a valid format. eg: 5 GiB",[[3,"modalRef"],[1,"modal-title"],i,["class","modal-content",4,"cdFormLoading"],[1,"modal-content"],["name","subvolumegroupForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","subvolumegroupName",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],["type","text","placeholder","subvolumegroup name...","id","subvolumegroupName","name","subvolumegroupName","formControlName","subvolumegroupName","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","volumeName",1,"cd-col-form-label"],o,["id","volumeName","name","volumeName","formControlName","volumeName",1,"form-control"],["for","size",1,"cd-col-form-label"],l,["type","text","id","size","name","size","formControlName","size","placeholder",_,"defaultUnit","GiB","cdDimlessBinary","",1,"form-control"],["for","pool",1,"cd-col-form-label"],v,["id","pool","name","pool","formControlName","pool",1,"form-select"],[3,"value",4,"ngFor","ngForOf"],["for","uid",1,"cd-col-form-label"],O,["type","number","placeholder","subvolumegroup UID...","id","uid","name","uid","formControlName","uid",1,"form-control"],["for","gid",1,"cd-col-form-label"],P,["type","number","placeholder","subvolumegroup GID...","id","gid","name","gid","formControlName","gid",1,"form-control"],["for","mode",1,"cd-col-form-label"],G,["inputField","mode",3,"data","columns","form","isTableForOctalMode","initialValue","scopes","isDisabled"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],K,oe,ue,pe,[3,"value"]]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.YNc(5,b,51,19,"ng-container",3),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,4,o.action))(e.lcZ(4,6,o.resource)),e.QtT(2),e.xp6(1),e.Q6J("cdFormLoading",o.loading))},dependencies:[f.sg,f.O5,La.S,al.z,rl.p,xa.l,Tu.U,En.Q,Pu.y,st.o,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.wV,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u,f.rS,Cu.m]}),t})();const k=["quotaUsageTpl"],ne=["typeTpl"],he=["modeToHumanReadableTpl"],Me=["nameTpl"],Qe=["quotaSizeTpl"];function Re(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table",5),e.NdJ("fetchData",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.fetchData())})("updateSelection",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.updateSelection(l))}),e.TgZ(1,"div",6),e._UZ(2,"cd-table-actions",7),e.qZA()()}if(2&t){const n=e.oxw().ngIf,o=e.oxw();e.Q6J("data",n)("columns",o.columns)("hasDetails",!1),e.xp6(2),e.Q6J("permission",o.permissions.cephfs)("selection",o.selection)("tableActions",o.tableActions)}}function ft(t,i){if(1&t&&(e.ynx(0),e.YNc(1,Re,3,6,"cd-table",4),e.BQk()),2&t){const n=i.ngIf;e.xp6(1),e.Q6J("ngIf",n)}}function wt(t,i){if(1&t&&e._UZ(0,"cd-usage-bar",10),2&t){const n=e.oxw().row;e.Q6J("total",n.info.bytes_quota)("used",n.info.bytes_used)("title",n.name)("showFreeToolTip",!1)("customLegendValue",n.info.bytes_quota)}}function It(t,i){if(1&t&&(e.TgZ(0,"span",12),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const n=e.oxw(2).row;e.xp6(1),e.hij(" ",e.lcZ(2,1,n.info.bytes_used),"")}}function Cn(t,i){if(1&t&&e.YNc(0,It,3,3,"span",11),2&t){const n=e.oxw().row;e.Q6J("ngIf","undefined"===n.info.bytes_pcent)}}function er(t,i){if(1&t&&(e.YNc(0,wt,1,5,"cd-usage-bar",8),e.YNc(1,Cn,1,1,"ng-template",null,9,e.W1O)),2&t){const n=i.row,o=e.MAs(2);e.Q6J("ngIf",n.info.bytes_pcent&&"undefined"!==n.info.bytes_pcent)("ngIfElse",o)}}function sr(t,i){1&t&&e._UZ(0,"cd-label",13),2&t&&e.Q6J("value",i.value)}function Dr(t,i){if(1&t&&(e.TgZ(0,"span",15),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("ngClass",n.class)("ngbTooltip",n.toolTip),e.xp6(1),e.hij(" ",n.content," ")}}function oi(t,i){1&t&&(e.YNc(0,Dr,2,3,"span",14),e.ALo(1,"octalToHumanReadable")),2&t&&e.Q6J("ngForOf",e.lcZ(1,1,i.value))}let uo=(()=>{class t{constructor(n,o,l,_,v){this.cephfsSubvolumeGroup=n,this.actionLabels=o,this.modalService=l,this.authStorageService=_,this.taskWrapper=v,this.selection=new Io.r,this.icons=Rr.P,this.subject=new ys.t,this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:.6,cellTransformation:Xr.e.bold},{name:"Data Pool",prop:"info.data_pool",flexGrow:.7,cellTransformation:Xr.e.badge,customTemplateConfig:{class:"badge-background-primary"}},{name:"Usage",prop:"info.bytes_pcent",flexGrow:.7,cellTemplate:this.quotaUsageTpl,cellClass:"text-right"},{name:"Mode",prop:"info.mode",flexGrow:.5,cellTemplate:this.modeToHumanReadableTpl},{name:"Created",prop:"info.created_at",flexGrow:.5,cellTransformation:Xr.e.timeAgo}],this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:Rr.P.add,click:()=>this.openModal(),canBePrimary:n=>!n.hasSelection},{name:this.actionLabels.EDIT,permission:"update",icon:Rr.P.edit,click:()=>this.openModal(!0)},{name:this.actionLabels.REMOVE,permission:"delete",icon:Rr.P.destroy,click:()=>this.removeSubVolumeModal()}],this.subvolumeGroup$=this.subject.pipe((0,Ul.w)(()=>this.cephfsSubvolumeGroup.get(this.fsName).pipe((0,eu.K)(()=>(this.context.error(),(0,Ps.of)(null))))),(0,mu.d)(1))}fetchData(){this.subject.next()}ngOnChanges(){this.subject.next()}updateSelection(n){this.selection=n}openModal(n=!1){this.modalService.show(N,{fsName:this.fsName,subvolumegroupName:this.selection?.first()?.name,pools:this.pools,isEdit:n},{size:"lg"})}removeSubVolumeModal(){const n=this.selection.first().name;this.modalService.show(Go.M,{itemDescription:"subvolume group",itemNames:[n],actionDescription:"remove",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("cephfs/subvolume/group/remove",{subvolumegroupName:n}),call:this.cephfsSubvolumeGroup.remove(this.fsName,n)})})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(pu),e.Y36(yr.p4),e.Y36(ca.Z),e.Y36(Do.j),e.Y36(Gr.P))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-subvolume-group"]],viewQuery:function(n,o){if(1&n&&(e.Gf(k,7),e.Gf(ne,7),e.Gf(he,7),e.Gf(Me,7),e.Gf(Qe,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.quotaUsageTpl=l.first),e.iGM(l=e.CRH())&&(o.typeTpl=l.first),e.iGM(l=e.CRH())&&(o.modeToHumanReadableTpl=l.first),e.iGM(l=e.CRH())&&(o.nameTpl=l.first),e.iGM(l=e.CRH())&&(o.quotaSizeTpl=l.first)}},inputs:{fsName:"fsName",pools:"pools"},features:[e.TTD],decls:8,vars:3,consts:function(){let i;return i="Quota limit is not set",[[4,"ngIf"],["quotaUsageTpl",""],["typeTpl",""],["modeToHumanReadableTpl",""],["columnMode","flex","selectionType","single",3,"data","columns","hasDetails","fetchData","updateSelection",4,"ngIf"],["columnMode","flex","selectionType","single",3,"data","columns","hasDetails","fetchData","updateSelection"],[1,"table-actions","btn-toolbar"],["id","cephfs-subvolumegropup-actions",1,"btn-group",3,"permission","selection","tableActions"],["customLegend","Quota","decimals","2",3,"total","used","title","showFreeToolTip","customLegendValue",4,"ngIf","ngIfElse"],["noLimitTpl",""],["customLegend","Quota","decimals","2",3,"total","used","title","showFreeToolTip","customLegendValue"],["ngbTooltip",i,4,"ngIf"],["ngbTooltip",i],[3,"value"],[3,"ngClass","ngbTooltip",4,"ngFor","ngForOf"],[3,"ngClass","ngbTooltip"]]},template:function(n,o){1&n&&(e.YNc(0,ft,2,1,"ng-container",0),e.ALo(1,"async"),e.YNc(2,er,3,2,"ng-template",null,1,e.W1O),e.YNc(4,sr,1,1,"ng-template",null,2,e.W1O),e.YNc(6,oi,2,3,"ng-template",null,3,e.W1O)),2&n&&e.Q6J("ngIf",e.lcZ(1,1,o.subvolumeGroup$))},dependencies:[f.mk,f.sg,f.O5,fc.O,Bf,zo.a,$l.K,yi._L,f.Ov,Wl.$,vc.f]}),t})();function As(t,i){if(1&t&&e._UZ(0,"cd-cephfs-detail",19),2&t){const n=e.oxw(2);e.Q6J("data",n.details)}}function as(t,i){if(1&t&&e._UZ(0,"cd-cephfs-subvolume-list",20),2&t){const n=e.oxw(2);e.Q6J("fsName",n.selection.mdsmap.fs_name)("pools",n.details.pools)}}function ma(t,i){if(1&t&&e._UZ(0,"cd-cephfs-subvolume-group",20),2&t){const n=e.oxw(2);e.Q6J("fsName",n.selection.mdsmap.fs_name)("pools",n.details.pools)}}function Na(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-cephfs-clients",21),e.NdJ("triggerApiUpdate",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.refresh())}),e.qZA()}if(2&t){const n=e.oxw(2);e.Q6J("id",n.id)("clients",n.clients)}}function Pl(t,i){if(1&t&&e._UZ(0,"cd-cephfs-directories",22),2&t){const n=e.oxw(2);e.Q6J("id",n.id)}}function il(t,i){if(1&t&&e._UZ(0,"cd-grafana",23),2&t){const n=e.oxw(2);e.Q6J("grafanaPath","mds-performance?var-mds_servers=mds."+n.grafanaId)("type","metrics")}}function dl(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"nav",1,2),e.NdJ("navChange",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.softRefresh())}),e.ynx(3,3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,As,1,1,"ng-template",6),e.BQk(),e.ynx(7,7),e.TgZ(8,"a",4),e.SDv(9,8),e.qZA(),e.YNc(10,as,1,2,"ng-template",6),e.BQk(),e.ynx(11,9),e.TgZ(12,"a",4),e.SDv(13,10),e.qZA(),e.YNc(14,ma,1,2,"ng-template",6),e.BQk(),e.ynx(15,11),e.TgZ(16,"a",4),e.ynx(17),e.SDv(18,12),e.BQk(),e.TgZ(19,"span",13),e._uU(20),e.qZA()(),e.YNc(21,Na,1,2,"ng-template",6),e.BQk(),e.ynx(22,14),e.TgZ(23,"a",4),e.SDv(24,15),e.qZA(),e.YNc(25,Pl,1,1,"ng-template",6),e.BQk(),e.ynx(26,16),e.TgZ(27,"a",4),e.SDv(28,17),e.qZA(),e.YNc(29,il,1,2,"ng-template",6),e.BQk(),e.qZA(),e._UZ(30,"div",18),e.BQk()}if(2&t){const n=e.MAs(2),o=e.oxw();e.xp6(20),e.Oqu(o.clients.data.length),e.xp6(10),e.Q6J("ngbNavOutlet",n)}}let Nl=(()=>{class t{constructor(n,o,l){this.ngZone=n,this.authStorageService=o,this.cephfsService=l,this.clients={data:[],status:new Uu.E(Xc.T.ValueNone)},this.details={standbys:"",pools:[],ranks:[],mdsCounters:{},name:""},this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection?this.selection.id!==this.id&&this.setupSelected(this.selection.id,this.selection.mdsmap.info):this.unsubscribeInterval()}setupSelected(n,o){this.id=n;const l=Xe().first(Object.values(o));this.grafanaId=l&&l.name,this.details={standbys:"",pools:[],ranks:[],mdsCounters:{},name:""},this.clients={data:[],status:new Uu.E(Xc.T.ValueNone)},this.updateInterval()}updateInterval(){this.unsubscribeInterval(),this.subscribeInterval()}unsubscribeInterval(){this.reloadSubscriber&&this.reloadSubscriber.unsubscribe()}subscribeInterval(){this.ngZone.runOutsideAngular(()=>this.reloadSubscriber=(0,xl.H)(0,5e3).subscribe(()=>this.ngZone.run(()=>this.refresh())))}refresh(){this.cephfsService.getTabs(this.id).subscribe(n=>{this.data=n,this.softRefresh()},()=>{this.clients.status=new Uu.E(Xc.T.ValueException)})}softRefresh(){const n=Xe().cloneDeep(this.data);this.clients=n.clients,this.clients.status=new Uu.E(this.clients.status),this.details={standbys:n.standbys,pools:n.pools,ranks:n.ranks,mdsCounters:n.mds_counters,name:n.name}}ngOnDestroy(){this.unsubscribeInterval()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(e.R0b),e.Y36(Do.j),e.Y36(kn))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-tabs"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let i,n,o,l,_,v,O;return i="Details",n="Subvolumes",o="Subvolume groups",l="Clients",_="Directories",v="Performance Details",O="CephFS MDS performance",[[4,"ngIf"],["ngbNav","","cdStatefulTab","cephfs-tabs",1,"nav-tabs",3,"navChange"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","subvolumes"],n,["ngbNavItem","subvolume-groups"],o,["ngbNavItem","clients"],l,[1,"badge","badge-pill","badge-tab","ms-1"],["ngbNavItem","directories"],_,["ngbNavItem","performance-details"],v,[3,"ngbNavOutlet"],[3,"data"],[3,"fsName","pools"],[3,"id","clients","triggerApiUpdate"],[3,"id"],["title",O,"uid","tbO9LAiZz","grafanaStyle","one",3,"grafanaPath","type"]]},template:function(n,o){1&n&&e.YNc(0,dl,31,2,"ng-container",0),2&n&&e.Q6J("ngIf",o.selection)},dependencies:[f.O5,ad.F,kc.m,yi.uN,yi.Pz,yi.nv,yi.Vx,yi.tO,yi.Dy,wl,Qa,rs,cd,uo]}),t})(),ac=(()=>{class t extends Hr.o{constructor(n,o,l,_,v,O,P,G,K){super(),this.authStorageService=n,this.cephfsService=o,this.actionLabels=l,this.router=_,this.urlBuilder=v,this.configurationService=O,this.modalService=P,this.taskWrapper=G,this.notificationService=K,this.filesystems=[],this.selection=new Io.r,this.icons=Rr.P,this.monAllowPoolDelete=!1,this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.columns=[{name:"Name",prop:"mdsmap.fs_name",flexGrow:2},{name:"Enabled",prop:"mdsmap.enabled",flexGrow:2,cellTransformation:Xr.e.checkIcon},{name:"Created",prop:"mdsmap.created",flexGrow:1,cellTransformation:Xr.e.timeAgo}],this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:Rr.P.add,click:()=>this.router.navigate([this.urlBuilder.getCreate()]),canBePrimary:n=>!n.hasSelection},{name:this.actionLabels.EDIT,permission:"update",icon:Rr.P.edit,click:()=>this.router.navigate([this.urlBuilder.getEdit(this.selection.first().mdsmap.fs_name)])},{permission:"delete",icon:Rr.P.destroy,click:()=>this.removeVolumeModal(),name:this.actionLabels.REMOVE,disable:this.getDisableDesc.bind(this)}],this.permissions.configOpt.read&&this.configurationService.get("mon_allow_pool_delete").subscribe(n=>{if(Xe().has(n,"value")){const o=Xe().find(n.value,l=>"mon"===l.section)||{value:!1};this.monAllowPoolDelete="true"===o.value}})}loadFilesystems(n){this.cephfsService.list().subscribe(o=>{this.filesystems=o},()=>{n.error()})}updateSelection(n){this.selection=n}removeVolumeModal(){const n=this.selection.first().mdsmap.fs_name;this.modalService.show(Go.M,{itemDescription:"File System",itemNames:[n],actionDescription:"remove",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("cephfs/remove",{volumeName:n}),call:this.cephfsService.remove(n)})})}getDisableDesc(){return!this.selection?.hasSelection||!this.monAllowPoolDelete&&"File System deletion is disabled by the mon_allow_pool_delete configuration setting."}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(kn),e.Y36(yr.p4),e.Y36(Ee.F0),e.Y36(Qn.F),e.Y36(Fa.e),e.Y36(ca.Z),e.Y36(Gr.P),e.Y36(Ui.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-list"]],features:[e._Bn([{provide:Qn.F,useValue:new Qn.F("cephfs")}]),e.qOj],decls:4,vars:7,consts:[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","fetchData","setExpandedRow","updateSelection"],["cdTableDetail","",3,"selection"],[1,"table-actions","btn-toolbar"],["id","cephfs-actions",1,"btn-group",3,"permission","selection","tableActions"]],template:function(n,o){1&n&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(_){return o.loadFilesystems(_)})("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-cephfs-tabs",1),e.TgZ(2,"div",2),e._UZ(3,"cd-table-actions",3),e.qZA()()),2&n&&(e.Q6J("data",o.filesystems)("columns",o.columns)("hasDetails",!0),e.xp6(1),e.Q6J("selection",o.expandedRow),e.xp6(2),e.Q6J("permission",o.permissions.cephfs)("selection",o.selection)("tableActions",o.tableActions))},dependencies:[zo.a,$l.K,Nl]}),t})(),wa=(()=>{class t{static getType(n){const o=Xe().find(this.knownTypes,l=>l.name===n);if(void 0!==o)return o;throw new Error('Found unknown type "'+n+'" for config option.')}static getTypeValidators(n){const o=t.getType(n.type);if("bool"===o.name||"str"===o.name)return;const l={validators:[],patternHelpText:o.patternHelpText};return o.isNumberType?(n.max&&""!==n.max&&(l.max=n.max,l.validators.push(rn.kI.max(n.max))),n.min&&""!==n.min?(l.min=n.min,l.validators.push(rn.kI.min(n.min))):"defaultMin"in o&&(l.min=o.defaultMin,l.validators.push(rn.kI.min(o.defaultMin))),l.validators.push("float"===n.type?De.h.decimalNumber():De.h.number(o.allowsNegative))):"addr"===n.type?l.validators=[De.h.ip()]:"uuid"===n.type&&(l.validators=[De.h.uuid()]),l}static getTypeStep(n,o){if(["uint","int","size","secs"].includes(n))return 1;if("float"===n){if(null!==o&&-1!==o.toString().indexOf(".")){const v=o.toString().split(".");return Math.pow(10,-v[1].length)}return.1}}}return t.knownTypes=[{name:"uint",inputType:"number",humanReadable:"Unsigned integer value",defaultMin:0,patternHelpText:"The entered value needs to be an unsigned number.",isNumberType:!0,allowsNegative:!1},{name:"int",inputType:"number",humanReadable:"Integer value",patternHelpText:"The entered value needs to be a number.",isNumberType:!0,allowsNegative:!0},{name:"size",inputType:"number",humanReadable:"Unsigned integer value (>=16bit)",defaultMin:0,patternHelpText:"The entered value needs to be a unsigned number.",isNumberType:!0,allowsNegative:!1},{name:"secs",inputType:"number",humanReadable:"Number of seconds",defaultMin:1,patternHelpText:"The entered value needs to be a number >= 1.",isNumberType:!0,allowsNegative:!1},{name:"float",inputType:"number",humanReadable:"Double value",patternHelpText:"The entered value needs to be a number or decimal.",isNumberType:!0,allowsNegative:!0},{name:"str",inputType:"text",humanReadable:"Text",isNumberType:!1},{name:"addr",inputType:"text",humanReadable:"IPv4 or IPv6 address",patternHelpText:"The entered value needs to be a valid IP address.",isNumberType:!1},{name:"uuid",inputType:"text",humanReadable:"UUID",patternHelpText:"The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8",isNumberType:!1},{name:"bool",inputType:"checkbox",humanReadable:"Boolean value",isNumberType:!1}],t})();class nc{constructor(){this.value=[]}}function yc(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,20),e.qZA(),e.TgZ(3,"div",11)(4,"textarea",21),e._uU(5,"            "),e.qZA()()())}function Gc(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,22),e.qZA(),e.TgZ(3,"div",11)(4,"textarea",23),e._uU(5,"            "),e.qZA()()())}function xc(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,24),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",25),e.qZA()())}function wf(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,26),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",27),e.qZA()())}function Ql(t,i){if(1&t&&(e.TgZ(0,"span",30)(1,"span",31),e._uU(2),e.qZA()()),2&t){const n=i.$implicit;e.xp6(2),e.Oqu(n)}}function ee(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,28),e.qZA(),e.TgZ(3,"div",11),e.YNc(4,Ql,3,1,"span",29),e.qZA()()),2&t){const n=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",n.configForm.getValue("services"))}}function Ce(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",32),e._uU(2),e.qZA(),e.TgZ(3,"div",11)(4,"select",33)(5,"option",34),e.SDv(6,35),e.qZA(),e.TgZ(7,"option",34),e.SDv(8,36),e.qZA(),e.TgZ(9,"option",34),e.SDv(10,37),e.qZA()()()()),2&t){const n=e.oxw().$implicit;e.xp6(1),e.Q6J("for",n),e.xp6(1),e.hij("",n," "),e.xp6(2),e.Q6J("formControlName",n),e.xp6(1),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngValue",!0),e.xp6(2),e.Q6J("ngValue",!1)}}function vt(t,i){if(1&t&&(e.TgZ(0,"span",40),e._uU(1),e.qZA()),2&t){const n=e.oxw(4);e.xp6(1),e.hij(" ",n.patternHelpText," ")}}function $t(t,i){if(1&t&&(e.TgZ(0,"span",40),e._uU(1),e.qZA()),2&t){const n=e.oxw(4);e.xp6(1),e.hij(" ",n.patternHelpText," ")}}function yn(t,i){if(1&t&&(e.TgZ(0,"span",40),e.SDv(1,41),e.qZA()),2&t){const n=e.oxw(4);e.xp6(1),e.pQV(n.maxValue),e.QtT(1)}}function Ur(t,i){if(1&t&&(e.TgZ(0,"span",40),e.SDv(1,42),e.qZA()),2&t){const n=e.oxw(4);e.xp6(1),e.pQV(n.minValue),e.QtT(1)}}function Gi(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",32),e._uU(2),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",38),e.YNc(5,vt,2,1,"span",39),e.YNc(6,$t,2,1,"span",39),e.YNc(7,yn,2,1,"span",39),e.YNc(8,Ur,2,1,"span",39),e.qZA()()),2&t){const n=e.oxw().$implicit;e.oxw();const o=e.MAs(2),l=e.oxw();e.xp6(1),e.Q6J("for",n),e.xp6(1),e.hij("",n," "),e.xp6(2),e.Q6J("type",l.inputType)("id",n)("placeholder",l.humanReadableType)("formControlName",n)("step",l.getStep(l.type,l.configForm.getValue(n))),e.xp6(1),e.Q6J("ngIf",l.configForm.showError(n,o,"pattern")),e.xp6(1),e.Q6J("ngIf",l.configForm.showError(n,o,"invalidUuid")),e.xp6(1),e.Q6J("ngIf",l.configForm.showError(n,o,"max")),e.xp6(1),e.Q6J("ngIf",l.configForm.showError(n,o,"min"))}}function Ys(t,i){if(1&t&&(e.ynx(0),e.YNc(1,Ce,11,6,"div",13),e.YNc(2,Gi,9,11,"div",13),e.BQk()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("ngIf","bool"===n.type),e.xp6(1),e.Q6J("ngIf","bool"!==n.type)}}function Ka(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.ynx(5,6),e._uU(6,"Edit"),e.BQk(),e._uU(7),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.qZA()(),e.YNc(14,yc,6,0,"div",13),e.YNc(15,Gc,6,0,"div",13),e.YNc(16,xc,5,0,"div",13),e.YNc(17,wf,5,0,"div",13),e.YNc(18,ee,5,1,"div",13),e.TgZ(19,"div",14)(20,"h3",15),e.SDv(21,16),e.qZA(),e.YNc(22,Ys,3,2,"ng-container",17),e.qZA()(),e.TgZ(23,"div",18)(24,"cd-form-button-panel",19),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.submit())}),e.qZA()()()()()}if(2&t){const n=e.oxw();e.xp6(1),e.Q6J("formGroup",n.configForm),e.xp6(6),e.hij(" ",n.configForm.getValue("name")," "),e.xp6(7),e.Q6J("ngIf",n.configForm.getValue("desc")),e.xp6(1),e.Q6J("ngIf",n.configForm.getValue("long_desc")),e.xp6(1),e.Q6J("ngIf",""!==n.configForm.getValue("default")),e.xp6(1),e.Q6J("ngIf",""!==n.configForm.getValue("daemon_default")),e.xp6(1),e.Q6J("ngIf",n.configForm.getValue("services").length>0),e.xp6(4),e.Q6J("ngForOf",n.availSections),e.xp6(2),e.Q6J("form",n.configForm)("submitText",n.actionLabels.UPDATE)}}let ka=(()=>{class t extends $c.E{constructor(n,o,l,_,v){super(),this.actionLabels=n,this.route=o,this.router=l,this.configService=_,this.notificationService=v,this.availSections=["global","mon","mgr","osd","mds","client"],this.createForm()}createForm(){const n={name:new rn.p4({value:null}),desc:new rn.p4({value:null}),long_desc:new rn.p4({value:null}),values:new rn.nJ({}),default:new rn.p4({value:null}),daemon_default:new rn.p4({value:null}),services:new rn.p4([])};this.availSections.forEach(o=>{n.values.addControl(o,new rn.p4(null))}),this.configForm=new fu.d(n)}ngOnInit(){this.route.params.subscribe(n=>{this.configService.get(n.name).subscribe(l=>{this.setResponse(l),this.loadingReady()})})}getValidators(n){const o=wa.getTypeValidators(n);if(o)return this.patternHelpText=o.patternHelpText,"max"in o&&""!==o.max&&(this.maxValue=o.max),"min"in o&&""!==o.min&&(this.minValue=o.min),o.validators}getStep(n,o){return wa.getTypeStep(n,o)}setResponse(n){this.response=n;const o=this.getValidators(n);this.configForm.get("name").setValue(n.name),this.configForm.get("desc").setValue(n.desc),this.configForm.get("long_desc").setValue(n.long_desc),this.configForm.get("default").setValue(n.default),this.configForm.get("daemon_default").setValue(n.daemon_default),this.configForm.get("services").setValue(n.services),this.response.value&&this.response.value.forEach(_=>{let v=null;v="true"===_.value||"false"!==_.value&&_.value,this.configForm.get("values").get(_.section).setValue(v)}),this.availSections.forEach(_=>{this.configForm.get("values").get(_).setValidators(o)});const l=wa.getType(n.type);this.type=l.name,this.inputType=l.inputType,this.humanReadableType=l.humanReadable}createRequest(){const n=[];if(this.availSections.forEach(o=>{const l=this.configForm.getValue(o);null!==l&&""!==l&&n.push({section:o,value:l})}),!Xe().isEqual(this.response.value,n)){const o=new nc;return o.name=this.configForm.getValue("name"),o.value=n,o}return null}submit(){const n=this.createRequest();n&&this.configService.create(n).subscribe(()=>{this.notificationService.show(Ho.k.success,"Updated config option " + n.name + ""),this.router.navigate(["/configuration"])},()=>{this.configForm.setErrors({cdSubmitButton:!0})}),this.router.navigate(["/configuration"])}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(Ee.gz),e.Y36(Ee.F0),e.Y36(Fa.e),e.Y36(Ui.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-configuration-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue;return i="Name",n="Values",o="Description",l="Long description",_="Default",v="Daemon default",O="Services",P="-- Default --",G="true",K="false",oe="The entered value is too high! It must not be greater than " + "\ufffd0\ufffd" + ".",ue="The entered value is too low! It must not be lower than " + "\ufffd0\ufffd" + ".",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","configForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],["i18",""],[1,"card-body"],[1,"form-group","row"],[1,"cd-col-form-label"],i,[1,"cd-col-form-input"],["type","text","id","name","formControlName","name","readonly","",1,"form-control"],["class","form-group row",4,"ngIf"],["formGroupName","values"],[1,"cd-header"],n,[4,"ngFor","ngForOf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],o,["id","desc","formControlName","desc","readonly","",1,"form-control","resize-vertical"],l,["id","long_desc","formControlName","long_desc","readonly","",1,"form-control","resize-vertical"],_,["type","text","id","default","formControlName","default","readonly","",1,"form-control"],v,["type","text","id","daemon_default","formControlName","daemon_default","readonly","",1,"form-control"],O,["class","form-component-badge",4,"ngFor","ngForOf"],[1,"form-component-badge"],[1,"badge","badge-dark"],[1,"cd-col-form-label",3,"for"],["id","pool","name","pool",1,"form-select",3,"formControlName"],[3,"ngValue"],P,G,K,[1,"form-control",3,"type","id","placeholder","formControlName","step"],["class","invalid-feedback",4,"ngIf"],[1,"invalid-feedback"],oe,ue]},template:function(n,o){1&n&&e.YNc(0,Ka,25,10,"div",0),2&n&&e.Q6J("cdFormLoading",o.loading)},dependencies:[f.sg,f.O5,rl.p,Pu.y,st.o,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u,rn.x0],styles:[".form-component-badge[_ngcontent-%COMP%]{display:block;height:34px}.form-component-badge[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{margin-top:7px}.resize-vertical[_ngcontent-%COMP%]{resize:vertical}"]}),t})();var nu=s(68962);function rc(t,i){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e._UZ(2,"br"),e.qZA()),2&t){const n=i.$implicit,o=i.last;e.xp6(1),e.lnq(" ",n.section,": ",n.value,"",o?"":",","")}}function _c(t,i){if(1&t&&(e.TgZ(0,"span")(1,"span",23)(2,"span",24),e._uU(3),e.ALo(4,"uppercase"),e.qZA()()()),2&t){const n=i.$implicit,o=e.oxw(2);e.xp6(1),e.s9C("title",o.flags[n]),e.xp6(2),e.Oqu(e.lcZ(4,2,n))}}function T_(t,i){if(1&t&&(e.TgZ(0,"span")(1,"span",24),e._uU(2),e.qZA()()),2&t){const n=i.$implicit;e.xp6(2),e.Oqu(n)}}function Bd(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"table",1)(2,"tbody")(3,"tr")(4,"td",2),e.SDv(5,3),e.qZA(),e.TgZ(6,"td",4),e._uU(7),e.qZA()(),e.TgZ(8,"tr")(9,"td",5),e.SDv(10,6),e.qZA(),e.TgZ(11,"td"),e._uU(12),e.qZA()(),e.TgZ(13,"tr")(14,"td",5),e.SDv(15,7),e.qZA(),e.TgZ(16,"td"),e._uU(17),e.qZA()(),e.TgZ(18,"tr")(19,"td",5),e.SDv(20,8),e.qZA(),e.TgZ(21,"td"),e.YNc(22,rc,3,3,"span",9),e.qZA()(),e.TgZ(23,"tr")(24,"td",5),e.SDv(25,10),e.qZA(),e.TgZ(26,"td"),e._uU(27),e.qZA()(),e.TgZ(28,"tr")(29,"td",5),e.SDv(30,11),e.qZA(),e.TgZ(31,"td"),e._uU(32),e.qZA()(),e.TgZ(33,"tr")(34,"td",5),e.SDv(35,12),e.qZA(),e.TgZ(36,"td"),e._uU(37),e.qZA()(),e.TgZ(38,"tr")(39,"td",5),e.SDv(40,13),e.qZA(),e.TgZ(41,"td"),e._uU(42),e.qZA()(),e.TgZ(43,"tr")(44,"td",5),e.SDv(45,14),e.qZA(),e.TgZ(46,"td"),e._uU(47),e.qZA()(),e.TgZ(48,"tr")(49,"td",5),e.SDv(50,15),e.qZA(),e.TgZ(51,"td"),e.YNc(52,_c,5,4,"span",9),e.qZA()(),e.TgZ(53,"tr")(54,"td",5),e.SDv(55,16),e.qZA(),e.TgZ(56,"td"),e.YNc(57,T_,3,1,"span",9),e.qZA()(),e.TgZ(58,"tr")(59,"td",5),e.SDv(60,17),e.qZA(),e.TgZ(61,"td"),e._uU(62),e.qZA()(),e.TgZ(63,"tr")(64,"td",5),e.SDv(65,18),e.qZA(),e.TgZ(66,"td"),e._uU(67),e.qZA()(),e.TgZ(68,"tr")(69,"td",5),e.SDv(70,19),e.qZA(),e.TgZ(71,"td"),e._uU(72),e.ALo(73,"booleanText"),e.qZA()(),e.TgZ(74,"tr")(75,"td",5),e.SDv(76,20),e.qZA(),e.TgZ(77,"td"),e._uU(78),e.qZA()(),e.TgZ(79,"tr")(80,"td",5),e.SDv(81,21),e.qZA(),e.TgZ(82,"td"),e._uU(83),e.qZA()(),e.TgZ(84,"tr")(85,"td",5),e.SDv(86,22),e.qZA(),e.TgZ(87,"td"),e._uU(88),e.qZA()()()(),e.BQk()),2&t){const n=e.oxw();e.xp6(7),e.Oqu(n.selection.name),e.xp6(5),e.Oqu(n.selection.desc),e.xp6(5),e.Oqu(n.selection.long_desc),e.xp6(5),e.Q6J("ngForOf",n.selection.value),e.xp6(5),e.Oqu(n.selection.default),e.xp6(5),e.Oqu(n.selection.daemon_default),e.xp6(5),e.Oqu(n.selection.type),e.xp6(5),e.Oqu(n.selection.min),e.xp6(5),e.Oqu(n.selection.max),e.xp6(5),e.Q6J("ngForOf",n.selection.flags),e.xp6(5),e.Q6J("ngForOf",n.selection.services),e.xp6(5),e.Oqu(n.selection.source),e.xp6(5),e.Oqu(n.selection.level),e.xp6(5),e.Oqu(e.lcZ(73,17,n.selection.can_update_at_runtime)),e.xp6(6),e.Oqu(n.selection.tags),e.xp6(5),e.Oqu(n.selection.enum_values),e.xp6(5),e.Oqu(n.selection.see_also)}}let Sh=(()=>{class t{constructor(){this.flags={runtime:"The value can be updated at runtime.",no_mon_update:"Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via 'ceph config\n      set ...'. This option should be configured via ceph.conf or via the\n      command line.",startup:"Option takes effect only during daemon startup.",cluster_create:"Option only affects cluster creation.",create:"Option only affects daemon creation."}}ngOnChanges(){this.selection&&(this.selection.services=Xe().split(this.selection.services,","))}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-configuration-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke;return i="Name",n="Description",o="Long description",l="Current values",_="Default",v="Daemon default",O="Type",P="Min",G="Max",K="Flags",oe="Services",ue="Source",pe="Level",ye="Can be updated at runtime (editable)",Ue="Tags",xe="Enum values",ke="See also",[[4,"ngIf"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],i,[1,"w-75"],[1,"bold"],n,o,l,[4,"ngFor","ngForOf"],_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke,[3,"title"],[1,"badge","badge-dark","me-2"]]},template:function(n,o){1&n&&e.YNc(0,Bd,89,19,"ng-container",0),2&n&&e.Q6J("ngIf",o.selection)},dependencies:[f.sg,f.O5,f.gd,nu.T]}),t})();const bh=["confValTpl"],Gf=["confFlagTpl"];function Hp(t,i){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e._UZ(2,"br"),e.qZA()),2&t){const n=i.$implicit,o=i.last;e.xp6(1),e.lnq(" ",n.section,": ",n.value,"",o?"":",","")}}function pf(t,i){if(1&t&&(e.TgZ(0,"span"),e.YNc(1,Hp,3,3,"span",5),e.qZA()),2&t){const n=e.oxw().value;e.xp6(1),e.Q6J("ngForOf",n)}}function C_(t,i){1&t&&e.YNc(0,pf,2,1,"span",4),2&t&&e.Q6J("ngIf",i.value)}let op=(()=>{class t extends Hr.o{constructor(n,o,l){super(),this.authStorageService=n,this.configurationService=o,this.actionLabels=l,this.data=[],this.icons=Rr.P,this.selection=new Io.r,this.filters=[{name:"Level",prop:"level",filterOptions:["basic","advanced","dev"],filterInitValue:"basic",filterPredicate:(O,P)=>{let G;var oe;return(oe=G||(G={}))[oe.basic=0]="basic",oe[oe.advanced=1]="advanced",oe[oe.dev=2]="dev",G[O.level]<=G[P]}},{name:"Service",prop:"services",filterOptions:["mon","mgr","osd","mds","common","mds_client","rgw"],filterPredicate:(O,P)=>O.services.includes(P)},{name:"Source",prop:"source",filterOptions:["mon"],filterPredicate:(O,P)=>!!O.hasOwnProperty("source")&&O.source.includes(P)},{name:"Modified",prop:"modified",filterOptions:["yes","no"],filterPredicate:(O,P)=>!!("yes"===P&&O.hasOwnProperty("value")||"no"===P&&!O.hasOwnProperty("value"))}],this.permission=this.authStorageService.getPermissions().configOpt;const _=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().name)}`;this.tableActions=[{permission:"update",icon:Rr.P.edit,routerLink:()=>`/configuration/edit/${_()}`,name:this.actionLabels.EDIT,disable:()=>!this.isEditable(this.selection)}]}ngOnInit(){this.columns=[{canAutoResize:!0,prop:"name",name:"Name"},{prop:"desc",name:"Description",cellClass:"wrap"},{prop:"value",name:"Current value",cellClass:"wrap",cellTemplate:this.confValTpl},{prop:"default",name:"Default",cellClass:"wrap"},{prop:"can_update_at_runtime",name:"Editable",cellTransformation:Xr.e.checkIcon,flexGrow:.4,cellClass:"text-center"}]}updateSelection(n){this.selection=n}getConfigurationList(n){this.configurationService.getConfigData().subscribe(o=>{this.data=o},()=>{n.error()})}isEditable(n){return 1===n.selected.length&&n.selected[0].can_update_at_runtime}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(Fa.e),e.Y36(yr.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-configuration"]],viewQuery:function(n,o){if(1&n&&(e.Gf(bh,7),e.Gf(Gf,5)),2&n){let l;e.iGM(l=e.CRH())&&(o.confValTpl=l.first),e.iGM(l=e.CRH())&&(o.confFlagTpl=l.first)}},features:[e.qOj],decls:5,vars:8,consts:[["selectionType","single",3,"data","columns","extraFilterableColumns","hasDetails","fetchData","setExpandedRow","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["confValTpl",""],[4,"ngIf"],[4,"ngFor","ngForOf"]],template:function(n,o){1&n&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(_){return o.getConfigurationList(_)})("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1)(2,"cd-configuration-details",2),e.qZA(),e.YNc(3,C_,1,1,"ng-template",null,3,e.W1O)),2&n&&(e.Q6J("data",o.data)("columns",o.columns)("extraFilterableColumns",o.filters)("hasDetails",!0),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},dependencies:[f.sg,f.O5,zo.a,$l.K,Sh],styles:[".filter[_ngcontent-%COMP%]{padding-right:8px}.fa-stack[_ngcontent-%COMP%]{font-size:.79rem}.fa-stack[_ngcontent-%COMP%]   .fa-stack-1x[_ngcontent-%COMP%]{margin-left:8px;margin-top:5px}  cd-configuration datatable-body-cell.wrap{word-break:break-all}"]}),t})();var Za=s(35758),_f=s(68939),Wa=s(22120),Ec=s(88002),Up=s(41702);let Zc=(()=>{class t{constructor(n,o){this.http=n,this.deviceService=o,this.path="api/osd",this.uiPath="ui-api/osd",this.osdDevices=[],this.osdRecvSpeedModalPriorities={KNOWN_PRIORITIES:[{name:null,text:"-- Select the priority --",values:{osd_max_backfills:null,osd_recovery_max_active:null,osd_recovery_max_single_start:null,osd_recovery_sleep:null}},{name:"low",text:"Low",values:{osd_max_backfills:1,osd_recovery_max_active:1,osd_recovery_max_single_start:1,osd_recovery_sleep:.5}},{name:"default",text:"Default",values:{osd_max_backfills:1,osd_recovery_max_active:3,osd_recovery_max_single_start:1,osd_recovery_sleep:0}},{name:"high",text:"High",values:{osd_max_backfills:4,osd_recovery_max_active:4,osd_recovery_max_single_start:4,osd_recovery_sleep:0}}]}}create(n,o,l="drive_groups"){return this.http.post(this.path,{method:l,data:n,tracking_id:o},{observe:"response"})}getList(){return this.http.get(`${this.path}`)}getOsdSettings(){return this.http.get(`${this.path}/settings`,{headers:{Accept:"application/vnd.ceph.api.v0.1+json"}})}getDetails(n){return this.http.get(`${this.path}/${n}`)}getSmartData(n){return this.http.get(`${this.path}/${n}/smart`)}scrub(n,o){return this.http.post(`${this.path}/${n}/scrub?deep=${o}`,null)}getDeploymentOptions(){return this.http.get(`${this.uiPath}/deployment_options`)}getFlags(){return this.http.get(`${this.path}/flags`)}updateFlags(n){return this.http.put(`${this.path}/flags`,{flags:n})}updateIndividualFlags(n,o){return this.http.put(`${this.path}/flags/individual`,{flags:n,ids:o})}markOut(n){return this.http.put(`${this.path}/${n}/mark`,{action:"out"})}markIn(n){return this.http.put(`${this.path}/${n}/mark`,{action:"in"})}markDown(n){return this.http.put(`${this.path}/${n}/mark`,{action:"down"})}reweight(n,o){return this.http.post(`${this.path}/${n}/reweight`,{weight:o})}update(n,o){return this.http.put(`${this.path}/${n}`,{device_class:o})}markLost(n){return this.http.put(`${this.path}/${n}/mark`,{action:"lost"})}purge(n){return this.http.post(`${this.path}/${n}/purge`,null)}destroy(n){return this.http.post(`${this.path}/${n}/destroy`,null)}delete(n,o,l){return this.http.delete(`${this.path}/${n}`,{observe:"response",params:{preserve_id:o?"true":"false",force:l?"true":"false"}})}safeToDestroy(n){return this.http.get(`${this.path}/safe_to_destroy?ids=${n}`)}safeToDelete(n){return this.http.get(`${this.path}/safe_to_delete?svc_ids=${n}`)}getDevices(n){return this.http.get(`${this.path}/${n}/devices`).pipe((0,Ec.U)(o=>o.map(l=>this.deviceService.prepareDevice(l))))}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN),e.LFG(Up.U))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var Sc=s(48168),Wc=s(26215);const o_=[{stepIndex:1,isComplete:!1}];let Cp=(()=>{class t{constructor(){this.currentStep$=new Wc.X(null),this.steps$=new Wc.X(o_),this.currentStep$.next(this.steps$.value[0])}setTotalSteps(n){const o=[];for(let l=1;l<=n;l++)o.push({stepIndex:l,isComplete:!1});this.steps$=new Wc.X(o)}setCurrentStep(n){this.currentStep$.next(n)}getCurrentStep(){return this.currentStep$.asObservable()}getSteps(){return this.steps$.asObservable()}moveToNextStep(){this.currentStep$.next(this.steps$.value[this.currentStep$.value.stepIndex])}moveToPreviousStep(){this.currentStep$.next(this.steps$.value[this.currentStep$.value.stepIndex-1-1])}isLastStep(){return this.currentStep$.value.stepIndex===this.steps$.value.length}isFirstStep(){return this.currentStep$.value?.stepIndex-1==0}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();class Pf{constructor(){this.reset(),this.formatterService=new qc.H,this.deviceSelectionAttrs={"sys_api.vendor":{name:"vendor"},"sys_api.model":{name:"model"},device_id:{name:"device_id"},human_readable_type:{name:"rotational",formatter:i=>"hdd"===i.toLowerCase()},"sys_api.size":{name:"size",formatter:i=>this.formatterService.format_number(i,1024,["B","KB","MB","GB","TB","PB"]).replace(" ","")}}}reset(){this.spec={service_type:"osd",service_id:`dashboard-${Xe().now()}`}}setName(i){this.spec.service_id=i}setHostPattern(i){this.spec.host_pattern=i}setDeviceSelection(i,n){const o=`${i}_devices`;this.spec[o]={},n.forEach(l=>{const _=this.deviceSelectionAttrs[l.prop];_&&(this.spec[o][_.name]=_.formatter?_.formatter(l.value.raw):l.value.raw)})}clearDeviceSelection(i){delete this.spec[`${i}_devices`]}setSlots(i,n){const o=`${i}_slots`;0===n?delete this.spec[o]:this.spec[o]=n}setFeature(i,n){n?this.spec[i]=!0:delete this.spec[i]}}let Bp=(()=>{class t{constructor(n){this.http=n,this.baseURL="api/cluster"}getStatus(){return this.http.get(`${this.baseURL}`,{headers:{Accept:"application/vnd.ceph.api.v0.1+json"}})}updateStatus(n){return this.http.put(`${this.baseURL}`,{status:n},{headers:{Accept:"application/vnd.ceph.api.v0.1+json"}})}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var W_=s(13472);const Sd=function(t){return{active:t}};function Yf(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"ul",4)(1,"li",5)(2,"a",6),e.NdJ("click",function(){const _=e.CHM(n).$implicit,v=e.oxw();return e.KtG(v.onStepClick(_))}),e.TgZ(3,"span",7),e.SDv(4,8),e.qZA(),e.TgZ(5,"span"),e.SDv(6,9),e.qZA()()()()}if(2&t){const n=i.$implicit,o=i.index,l=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(4,Sd,l.currentStep.stepIndex===n.stepIndex)),e.xp6(1),e.Q6J("ngClass",e.VKq(6,Sd,l.currentStep.stepIndex===n.stepIndex)),e.xp6(1),e.pQV(n.stepIndex),e.QtT(4),e.xp6(2),e.pQV(l.stepsTitle[o]),e.QtT(6)}}let M_=(()=>{class t{constructor(n){this.stepsService=n}ngOnInit(){this.stepsService.setTotalSteps(this.stepsTitle.length),this.steps=this.stepsService.getSteps(),this.currentStepSub=this.stepsService.getCurrentStep().subscribe(n=>{this.currentStep=n})}onStepClick(n){this.stepsService.setCurrentStep(n)}ngOnDestroy(){this.currentStepSub.unsubscribe()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Cp))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-wizard"]],inputs:{stepsTitle:"stepsTitle"},decls:5,vars:3,consts:function(){let i,n;return i="" + "\ufffd0\ufffd" + "",n="" + "\ufffd0\ufffd" + "",[[1,"card-body"],[1,"row","m-7"],[1,"col"],["class","nav nav-pills flex-column",4,"ngFor","ngForOf"],[1,"nav","nav-pills","flex-column"],[1,"nav-item"],[1,"nav-link",3,"ngClass","click"],[1,"circle-step",3,"ngClass"],i,n]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"nav",2),e.YNc(3,Yf,7,8,"ul",3),e.ALo(4,"async"),e.qZA()()()),2&n&&(e.xp6(3),e.Q6J("ngForOf",e.lcZ(4,1,o.steps)))},dependencies:[f.mk,f.sg,f.Ov],styles:["cd-wizard{width:15%}.card-body[_ngcontent-%COMP%]{padding-left:0}span.circle-step[_ngcontent-%COMP%]{background:#adb5bd;border-radius:.8em;color:#fff;display:inline-block;font-weight:700;line-height:1.6em;margin-right:5px;text-align:center;width:1.6em}span.circle-step.active[_ngcontent-%COMP%]{background-color:#25828e}.nav-pills[_ngcontent-%COMP%]   .nav-link[_ngcontent-%COMP%]{background-color:#fff;color:#343a40}.nav-pills[_ngcontent-%COMP%]   .nav-link.active[_ngcontent-%COMP%]{color:#25828e}"]}),t})();var bd=s(13464),dd=s(19773);let td=(()=>{class t{constructor(n){this.http=n,this.url="ui-api/orchestrator",this.disableMessages={noOrchestrator:"The feature is disabled because Orchestrator is not available.",missingFeature:"The Orchestrator backend doesn't support this feature."}}status(){return this.http.get(`${this.url}/status`)}hasFeature(n,o){return Xe().every(o,l=>Xe().get(n.features,`${l}.available`))}getTableActionDisableDesc(n,o){return!!n&&(n.available?!this.hasFeature(n,o)&&this.disableMessages.missingFeature:this.disableMessages.noOrchestrator)}getName(){return this.http.get(`${this.url}/get_name`)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var Rd=s(7022),Jc=(()=>{return(t=Jc||(Jc={})).HOST_LIST="get_hosts",t.HOST_ADD="add_host",t.HOST_REMOVE="remove_host",t.HOST_LABEL_ADD="add_host_label",t.HOST_LABEL_REMOVE="remove_host_label",t.HOST_MAINTENANCE_ENTER="enter_host_maintenance",t.HOST_MAINTENANCE_EXIT="exit_host_maintenance",t.HOST_FACTS="get_facts",t.HOST_DRAIN="drain_host",t.SERVICE_LIST="describe_service",t.SERVICE_CREATE="apply",t.SERVICE_EDIT="apply",t.SERVICE_DELETE="remove_service",t.SERVICE_RELOAD="service_action",t.DAEMON_LIST="list_daemons",t.OSD_GET_REMOVE_STATUS="remove_osds_status",t.OSD_CREATE="apply_drivegroups",t.OSD_DELETE="remove_osds",t.DEVICE_LIST="get_inventory",t.DEVICE_BLINK_LIGHT="blink_device_light",Jc;var t})(),sp=s(41039),s_=s(72427),Gd=s(33512),xd=s.n(Gd),bc=s(60192);function J_(t,i){1&t&&(e.TgZ(0,"span",24),e.SDv(1,25),e.qZA())}function Gp(t,i){1&t&&(e.TgZ(0,"span",24),e.SDv(1,26),e.qZA())}function a_(t,i){1&t&&(e.TgZ(0,"span",24),e.SDv(1,30),e.qZA())}function Q_(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",27),e.SDv(2,28),e.qZA(),e.TgZ(3,"div",15),e._UZ(4,"input",29),e.YNc(5,a_,2,0,"span",17),e.qZA()()),2&t){e.oxw();const n=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.hostForm.showError("addr",n,"pattern"))}}function K_(t,i){1&t&&(e.TgZ(0,"div",8)(1,"div",31)(2,"div",32),e._UZ(3,"input",33),e.TgZ(4,"label",34),e.SDv(5,35),e.qZA()()()())}function X_(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div")(1,"form",5,6)(3,"div",7)(4,"div",8)(5,"label",9),e.ynx(6),e.SDv(7,10),e.BQk(),e.TgZ(8,"cd-helper")(9,"p"),e.SDv(10,11),e.qZA(),e.TgZ(11,"ul")(12,"li"),e.tHW(13,12),e._UZ(14,"samp"),e.N_p(),e.qZA(),e.TgZ(15,"li"),e.tHW(16,13),e._UZ(17,"samp"),e.N_p(),e.qZA(),e.TgZ(18,"li"),e.tHW(19,14),e._UZ(20,"samp"),e.N_p(),e.qZA()()()(),e.TgZ(21,"div",15)(22,"input",16),e.NdJ("keyup",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.checkHostNameValue())}),e.qZA(),e.YNc(23,J_,2,0,"span",17),e.YNc(24,Gp,2,0,"span",17),e.qZA()(),e.YNc(25,Q_,6,1,"div",18),e.TgZ(26,"div",8)(27,"label",19),e.SDv(28,20),e.qZA(),e.TgZ(29,"div",15),e._UZ(30,"cd-select-badges",21),e.qZA()(),e.YNc(31,K_,6,0,"div",18),e.qZA(),e.TgZ(32,"div",22)(33,"cd-form-button-panel",23),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.submit())}),e.ALo(34,"titlecase"),e.ALo(35,"upperFirst"),e.qZA()()()()}if(2&t){const n=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.hostForm),e.xp6(22),e.Q6J("ngIf",o.hostForm.showError("hostname",n,"required")),e.xp6(1),e.Q6J("ngIf",o.hostForm.showError("hostname",n,"uniqueName")),e.xp6(1),e.Q6J("ngIf",!o.hostPattern),e.xp6(5),e.Q6J("data",o.hostForm.controls.labels.value)("options",o.labelsOption)("customBadges",!0)("messages",o.messages),e.xp6(1),e.Q6J("ngIf",!o.hideMaintenance),e.xp6(2),e.Q6J("form",o.hostForm)("submitText",e.lcZ(34,11,o.action)+" "+e.lcZ(35,13,o.resource))}}let q_=(()=>{class t extends $c.E{constructor(n,o,l,_,v){super(),this.router=n,this.actionLabels=o,this.hostService=l,this.taskWrapper=_,this.activeModal=v,this.hostnameArray=[],this.hostPattern=!1,this.labelsOption=[],this.messages=new Rd.a({empty:"There are no labels.",filter:"Filter or add labels",add:"Add label"}),this.resource="host",this.action=this.actionLabels.ADD}ngOnInit(){this.router.url.includes("hosts")&&(this.pageURL="hosts"),this.createForm();const n=new Sc.E(()=>{});this.hostService.list(n.toParams(),"false").subscribe(o=>{this.hostnames=o.map(l=>l.hostname),this.loadingReady()}),this.hostService.getLabels().subscribe(o=>{const l=new Set(o.concat(this.hostService.predefinedLabels));this.labelsOption=Array.from(l).map(_=>({enabled:!0,name:_,selected:!1,description:null}))})}checkHostNameValue(){this.hostPattern=!!this.hostForm.get("hostname").value.match(/[()\[\]{},]/g)}createForm(){this.hostForm=new fu.d({hostname:new rn.p4("",{validators:[rn.kI.required,De.h.custom("uniqueName",n=>this.hostnames&&-1!==this.hostnames.indexOf(n))]}),addr:new rn.p4("",{validators:[De.h.ip()]}),labels:new rn.p4([]),maintenance:new rn.p4(!1)})}isCommaSeparatedPattern(n){return n.includes(",")}isRangeTypePattern(n){return n.includes("[")&&n.includes("]")&&!n.match(/(?![^(]*\)),/g)}replaceBraces(n){return n.replace(/(\d)\s*-\s*(\d)/g,"$1..$2").replace(/\(/g,"{").replace(/\)/g,"}").replace(/\[/g,"{").replace(/]/g,"}")}checkHostNamePattern(n){if(this.isRangeTypePattern(n)){const o=this.replaceBraces(n);this.hostnameArray=xd()(o)}else if(this.isCommaSeparatedPattern(n)){let o=[];o=n.split(","),o.forEach(l=>{if(this.isRangeTypePattern(l)){const _=this.replaceBraces(l);this.hostnameArray=this.hostnameArray.concat(xd()(_))}else this.hostnameArray.push(l)})}else this.hostnameArray.push(n)}submit(){const n=this.hostForm.get("hostname").value;this.checkHostNamePattern(n),this.addr=this.hostForm.get("addr").value,this.status=this.hostForm.get("maintenance").value?"maintenance":"",this.allLabels=this.hostForm.get("labels").value,"hosts"!==this.pageURL&&!this.allLabels.includes("_no_schedule")&&this.allLabels.push("_no_schedule"),this.hostnameArray.forEach(o=>{this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("host/"+yr.MQ.ADD,{hostname:o}),call:this.hostService.create(o,this.addr,this.allLabels,this.status)}).subscribe({error:()=>{this.hostForm.setErrors({cdSubmitButton:!0})},complete:()=>{"hosts"===this.pageURL?this.router.navigate([this.pageURL,{outlets:{modal:null}}]):this.activeModal.close()}})})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ee.F0),e.Y36(yr.p4),e.Y36(Wa.x),e.Y36(Gr.P),e.Y36(yi.Kz))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-host-form"]],features:[e.qOj],decls:7,vars:9,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Hostname",o="To add multiple hosts at once, you can enter:",l="a comma-separated list of hostnames " + "\ufffd#14\ufffd" + "(e.g.: example-01,example-02,example-03)" + "\ufffd/#14\ufffd" + ",",_="a range expression " + "\ufffd#17\ufffd" + "(e.g.: example-[01-03].ceph)" + "\ufffd/#17\ufffd" + ",",v="a comma separated range expression " + "\ufffd#20\ufffd" + "(e.g.: example-[01-05].lab.com,example2-[1-4].lab.com,example3-[001-006].lab.com)" + "\ufffd/#20\ufffd" + "",O="Labels",P="This field is required.",G="The chosen hostname is already in use.",K="Network address",oe="The value is not a valid IP address.",ue="Maintenance Mode",[[3,"pageURL","modalRef"],[1,"modal-title"],i,[1,"modal-content"],[4,"cdFormLoading"],["name","hostForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","hostname",1,"cd-col-form-label","required"],n,o,l,_,v,[1,"cd-col-form-input"],["type","text","placeholder","mon-123","id","hostname","name","hostname","formControlName","hostname","autofocus","",1,"form-control",3,"keyup"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],["for","labels",1,"cd-col-form-label"],O,["id","labels",3,"data","options","customBadges","messages"],[1,"modal-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],P,G,["for","addr",1,"cd-col-form-label"],K,["type","text","placeholder","192.168.0.1","id","addr","name","addr","formControlName","addr",1,"form-control"],oe,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","maintenance","type","checkbox","formControlName","maintenance",1,"custom-control-input"],["for","maintenance",1,"custom-control-label"],ue]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.qZA(),e.ynx(5,3),e.YNc(6,X_,36,15,"div",4),e.BQk(),e.qZA()),2&n&&(e.Q6J("pageURL",o.pageURL)("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,5,o.action))(e.lcZ(4,7,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("cdFormLoading",o.loading))},dependencies:[f.O5,La.S,bc.m,al.z,rl.p,Tu.U,Pu.y,st.o,za.b,Va.P,Os.V,rn._Y,rn.Fj,rn.Wl,rn.JJ,rn.JL,rn.sg,rn.u,f.rS,Cu.m]}),t})();var Th=s(55657);const vm=["deviceLocation"],O_=["daemonName"],Ch=["lifeExpectancy"],Yd=["lifeExpectancyTimestamp"];function Nf(t,i){if(1&t&&e._UZ(0,"cd-table",8),2&t){const n=e.oxw();e.Q6J("data",n.devices)("columns",n.columns)}}function Mh(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",9),e.SDv(1,10),e.qZA())}function Jh(t,i){if(1&t&&e._UZ(0,"cd-label",13),2&t){const n=e.oxw().$implicit;e.Q6J("value",n.dev)}}function lp(t,i){if(1&t&&(e.ynx(0),e.YNc(1,Jh,1,1,"cd-label",12),e.BQk()),2&t){const n=i.$implicit,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",n.host===o.hostname)}}function Mp(t,i){1&t&&e.YNc(0,lp,2,1,"ng-container",11),2&t&&e.Q6J("ngForOf",i.value)}const hf=function(t){return{daemons:t}};function l_(t,i){if(1&t&&e.GkF(0,14),2&t){const n=i.value,o=e.oxw(),l=e.MAs(7),_=e.MAs(9);e.Q6J("ngTemplateOutlet",null!==o.osdId?l:_)("ngTemplateOutletContext",e.VKq(2,hf,n))}}function u_(t,i){if(1&t&&e._UZ(0,"cd-label",13),2&t){const n=e.oxw().$implicit;e.Q6J("value",n)}}function mf(t,i){if(1&t&&(e.ynx(0),e.YNc(1,u_,1,1,"cd-label",12),e.BQk()),2&t){const n=i.$implicit,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",n.includes(o.osdId))}}function jf(t,i){1&t&&e.YNc(0,mf,2,1,"ng-container",11),2&t&&e.Q6J("ngForOf",i.daemons)}function jd(t,i){if(1&t&&(e.ynx(0),e._UZ(1,"cd-label",15),e.BQk()),2&t){const n=i.$implicit;e.xp6(1),e.Q6J("value",n)}}function Nm(t,i){1&t&&e.YNc(0,jd,2,1,"ng-container",11),2&t&&e.Q6J("ngForOf",i.daemons)}function Qh(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,17),e.ALo(2,"notAvailable"),e.qZA()),2&t&&(e.xp6(2),e.pQV(e.lcZ(2,1,"")),e.QtT(1))}function nf(t,i){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"i18nPlural"),e.qZA()),2&t){const n=e.oxw().value,o=e.oxw();e.xp6(1),e.hij("> ",e.xi3(2,1,n.min,o.translationMapping),"")}}function Op(t,i){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"i18nPlural"),e.qZA()),2&t){const n=e.oxw().value,o=e.oxw();e.xp6(1),e.hij("< ",e.xi3(2,1,n.max,o.translationMapping),"")}}function Oh(t,i){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"i18nPlural"),e.qZA()),2&t){const n=e.oxw().value,o=e.oxw();e.xp6(1),e.AsE("",n.min," to ",e.xi3(2,2,n.max,o.translationMapping),"")}}function Ap(t,i){if(1&t&&(e.YNc(0,Qh,3,3,"span",16),e.YNc(1,nf,3,4,"span",16),e.YNc(2,Op,3,4,"span",16),e.YNc(3,Oh,3,5,"span",16)),2&t){const n=i.value;e.Q6J("ngIf",!n.life_expectancy_enabled),e.xp6(1),e.Q6J("ngIf",n.min&&!n.max),e.xp6(1),e.Q6J("ngIf",n.max&&!n.min),e.xp6(1),e.Q6J("ngIf",n.max&&n.min)}}function A_(t,i){1&t&&e._uU(0),2&t&&e.hij(" ",i.value,"\n")}let Dp=(()=>{class t{constructor(n,o,l){this.hostService=n,this.datePipe=o,this.osdService=l,this.hostname="",this.osdId=null,this.osdList=!1,this.devices=null,this.columns=[],this.translationMapping={"=1":"# week",other:"# weeks"}}ngOnInit(){this.columns=[{prop:"devid",name:"Device ID",minWidth:200},{prop:"state",name:"State of Health",flexGrow:1,cellTransformation:Xr.e.badge,customTemplateConfig:{map:{good:{value:"Good",class:"badge-success"},warning:{value:"Warning",class:"badge-warning"},bad:{value:"Bad",class:"badge-danger"},stale:{value:"Stale",class:"badge-info"},unknown:{value:"Unknown",class:"badge-dark"}}}},{prop:"life_expectancy_weeks",name:"Life Expectancy",cellTemplate:this.lifeExpectancyTemplate},{prop:"life_expectancy_stamp",name:"Prediction Creation Date",cellTemplate:this.lifeExpectancyTimestampTemplate,pipe:this.datePipe,isHidden:!0},{prop:"location",name:"Device Name",cellTemplate:this.locationTemplate},{prop:"daemons",name:"Daemons",cellTemplate:this.daemonNameTemplate}]}ngOnChanges(){const n=o=>this.devices=o;this.osdList&&null!==this.osdId?this.osdService.getDevices(this.osdId).subscribe(n):this.hostname&&this.hostService.getDevices(this.hostname).subscribe(n)}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Wa.x),e.Y36(f.uU),e.Y36(Zc))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-device-list"]],viewQuery:function(n,o){if(1&n&&(e.Gf(vm,7),e.Gf(O_,7),e.Gf(Ch,7),e.Gf(Yd,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.locationTemplate=l.first),e.iGM(l=e.CRH())&&(o.daemonNameTemplate=l.first),e.iGM(l=e.CRH())&&(o.lifeExpectancyTemplate=l.first),e.iGM(l=e.CRH())&&(o.lifeExpectancyTimestampTemplate=l.first)}},inputs:{hostname:"hostname",osdId:"osdId",osdList:"osdList"},features:[e.TTD],decls:14,vars:2,consts:function(){let i,n;return i="Neither hostname nor OSD ID given",n="" + "\ufffd0\ufffd" + "",[[3,"data","columns",4,"ngIf"],["type","warning",4,"ngIf"],["deviceLocation",""],["daemonName",""],["osdIdDaemon",""],["readableDaemons",""],["lifeExpectancy",""],["lifeExpectancyTimestamp",""],[3,"data","columns"],["type","warning"],i,[4,"ngFor","ngForOf"],[3,"value",4,"ngIf"],[3,"value"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"me-1",3,"value"],[4,"ngIf"],n]},template:function(n,o){1&n&&(e.YNc(0,Nf,1,2,"cd-table",0),e.YNc(1,Mh,2,0,"cd-alert-panel",1),e.YNc(2,Mp,1,1,"ng-template",null,2,e.W1O),e.YNc(4,l_,1,4,"ng-template",null,3,e.W1O),e.YNc(6,jf,1,1,"ng-template",null,4,e.W1O),e.YNc(8,Nm,1,1,"ng-template",null,5,e.W1O),e.YNc(10,Ap,4,4,"ng-template",null,6,e.W1O),e.YNc(12,A_,1,1,"ng-template",null,7,e.W1O)),2&n&&(e.Q6J("ngIf",o.hostname||null!==o.osdId),e.xp6(1),e.Q6J("ngIf",""===o.hostname&&null===o.osdId))},dependencies:[f.sg,f.O5,f.tP,zo.a,Zu.G,Bf,f.Gx,Th.g]}),t})();var Ah=s(8958),If=s(37496);const Yp=["innerNav"];function eh(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",5),e.SDv(1,6),e.qZA())}function c_(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",7),e.SDv(1,8),e.qZA())}function th(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",10),e.SDv(1,11),e.qZA())}function d_(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"cd-alert-panel",20),e._uU(2),e.qZA(),e.BQk()),2&t){const n=e.oxw(2).$implicit;e.xp6(2),e.Oqu(n.value.userMessage)}}function zd(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",23),e.SDv(1,24),e.qZA())}function nh(t,i){1&t&&(e.ynx(0),e.TgZ(1,"cd-alert-panel",26),e.SDv(2,27),e.qZA(),e.BQk())}function f_(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",28),e.SDv(1,29),e.qZA())}function Kh(t,i){if(1&t&&(e.YNc(0,nh,3,0,"ng-container",0),e.YNc(1,f_,2,0,"ng-template",null,25,e.W1O)),2&t){const n=e.MAs(2),o=e.oxw(3).$implicit;e.Q6J("ngIf",o.value.info.smart_status.passed)("ngIfElse",n)}}function up(t,i){if(1&t&&(e.YNc(0,zd,2,0,"cd-alert-panel",21),e.ALo(1,"pipeFunction"),e.YNc(2,Kh,3,2,"ng-template",null,22,e.W1O)),2&t){const n=e.MAs(3),o=e.oxw(2).$implicit,l=e.oxw(4);e.Q6J("ngIf",e.xi3(1,2,null==o.value.info?null:o.value.info.smart_status,l.isEmpty))("ngIfElse",n)}}function Dh(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",36),2&t){const n=e.oxw(4).$implicit;e.Q6J("renderObjects",!0)("data",n.value.info)}}function jp(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",37),e.SDv(1,38),e.qZA())}function Td(t,i){if(1&t&&(e.YNc(0,Dh,1,2,"cd-table-key-value",34),e.ALo(1,"pipeFunction"),e.YNc(2,jp,2,0,"cd-alert-panel",35),e.ALo(3,"pipeFunction")),2&t){const n=e.oxw(3).$implicit,o=e.oxw(4);e.Q6J("ngIf",!e.xi3(1,2,n.value.info,o.isEmpty)),e.xp6(2),e.Q6J("ngIf",e.xi3(3,5,n.value.info,o.isEmpty))}}function gf(t,i){if(1&t&&e._UZ(0,"cd-table",42),2&t){const n=e.oxw(4).$implicit,o=e.oxw(4);e.Q6J("data",n.value.smart.attributes.table)("columns",o.smartDataColumns)}}function zp(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",43),2&t){const n=e.oxw(4).$implicit;e.Q6J("renderObjects",!0)("data",n.value.smart)}}function Ta(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",43),2&t){const n=e.oxw(4).$implicit;e.Q6J("renderObjects",!0)("data",n.value.smart.nvmeData)}}function fd(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",44),e.SDv(1,45),e.qZA())}function Tc(t,i){if(1&t&&(e.YNc(0,gf,1,2,"cd-table",39),e.YNc(1,zp,1,2,"cd-table-key-value",40),e.YNc(2,Ta,1,2,"cd-table-key-value",40),e.YNc(3,fd,2,0,"cd-alert-panel",41)),2&t){const n=e.oxw(3).$implicit;e.Q6J("ngIf",null==n.value.smart?null:n.value.smart.attributes),e.xp6(1),e.Q6J("ngIf",null==n.value.smart?null:n.value.smart.scsi_error_counter_log),e.xp6(1),e.Q6J("ngIf",null==n.value.smart?null:n.value.smart.nvmeData),e.xp6(1),e.Q6J("ngIf",!(null!=n.value.smart&&n.value.smart.attributes||null!=n.value.smart&&n.value.smart.nvmeData||null!=n.value.smart&&n.value.smart.scsi_error_counter_log))}}function Zs(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"nav",12,30)(3,"li",31)(4,"a",17),e.SDv(5,32),e.qZA(),e.YNc(6,Td,4,8,"ng-template",18),e.qZA(),e.TgZ(7,"li",31)(8,"a",17),e.SDv(9,33),e.qZA(),e.YNc(10,Tc,4,4,"ng-template",18),e.qZA()(),e._UZ(11,"div",15),e.BQk()),2&t){const n=e.MAs(2);e.xp6(3),e.Q6J("ngbNavItem",1),e.xp6(4),e.Q6J("ngbNavItem",2),e.xp6(4),e.Q6J("ngbNavOutlet",n)}}function vf(t,i){if(1&t&&(e.YNc(0,d_,3,1,"ng-container",0),e.YNc(1,up,4,5,"ng-template",null,19,e.W1O),e.YNc(3,Zs,12,3,"ng-container",4),e.ALo(4,"pipeFunction"),e.ALo(5,"pipeFunction")),2&t){const n=e.MAs(2),o=e.oxw().$implicit,l=e.oxw(4);e.Q6J("ngIf",o.value.error)("ngIfElse",n),e.xp6(3),e.Q6J("ngIf",!e.xi3(4,3,o.value.info,l.isEmpty)||!e.xi3(5,6,o.value.smart,l.isEmpty))}}function p_(t,i){if(1&t&&(e.ynx(0,16),e.TgZ(1,"a",17),e._uU(2),e.qZA(),e.YNc(3,vf,6,9,"ng-template",18),e.BQk()),2&t){const n=i.$implicit;e.xp6(2),e.AsE("",n.value.device," (",n.value.identifier,")")}}function Cc(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"nav",12,13),e.YNc(3,p_,4,2,"ng-container",14),e.ALo(4,"keyvalue"),e.qZA(),e._UZ(5,"div",15),e.BQk()),2&t){const n=e.MAs(2),o=e.oxw(3);e.xp6(3),e.Q6J("ngForOf",e.lcZ(4,2,o.data)),e.xp6(2),e.Q6J("ngbNavOutlet",n)}}function D_(t,i){if(1&t&&(e.ynx(0),e.YNc(1,th,2,0,"cd-alert-panel",9),e.ALo(2,"pipeFunction"),e.YNc(3,Cc,6,4,"ng-container",4),e.ALo(4,"pipeFunction"),e.BQk()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("ngIf",e.xi3(2,2,n.data,n.isEmpty)),e.xp6(2),e.Q6J("ngIf",!e.xi3(4,5,n.data,n.isEmpty))}}function yf(t,i){if(1&t&&(e.ynx(0),e.YNc(1,eh,2,0,"cd-alert-panel",2),e.YNc(2,c_,2,0,"cd-alert-panel",3),e.YNc(3,D_,5,8,"ng-container",4),e.BQk()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngIf",n.error),e.xp6(1),e.Q6J("ngIf",n.incompatible),e.xp6(1),e.Q6J("ngIf",!n.error&&!n.incompatible)}}function cp(t,i){1&t&&(e.TgZ(0,"cd-loading-panel"),e.SDv(1,46),e.qZA())}let Mc=(()=>{class t{constructor(n,o){this.osdService=n,this.hostService=o,this.osdId=null,this.hostname=null,this.loading=!1,this.incompatible=!1,this.error=!1,this.data={},this.isEmpty=Xe().isEmpty}isSmartError(n){return void 0!==Xe().get(n,"error")}isNvmeSmartData(n){return"nvme"===Xe().get(n,"device.protocol","").toLowerCase()}isAtaSmartData(n){return"ata"===Xe().get(n,"device.protocol","").toLowerCase()}isIscsiSmartData(n){return"scsi"===Xe().get(n,"device.protocol","").toLowerCase()}fetchData(n){const o={};Xe().each(n,(l,_)=>{if(this.isSmartError(l)){let v="";v=-22===l.smartctl_error_code?"Smartctl has received an unknown argument (error code " + l.smartctl_error_code + "). You may be using an incompatible version of smartmontools. Version >= 7.0 of smartmontools is required to successfully retrieve data.":"An error with error code " + l.smartctl_error_code + " occurred.",o[_]={error:l.error,smartctl_error_code:l.smartctl_error_code,smartctl_output:l.smartctl_output,userMessage:v,device:l.dev,identifier:l.nvme_vendor}}else 1!==l.json_format_version[0]?this.incompatible=!0:this.isAtaSmartData(l)?o[_]=this.extractAtaData(l):this.isIscsiSmartData(l)?o[_]=this.extractIscsiData(l):this.isNvmeSmartData(l)&&(o[_]=this.extractNvmeData(l))}),this.data=o,this.loading=!1}extractNvmeData(n){return{info:Xe().omitBy(n,(l,_)=>["nvme_smart_health_information_log"].includes(_)),smart:{nvmeData:n.nvme_smart_health_information_log},device:n.device.name,identifier:n.serial_number}}extractIscsiData(n){const o=Xe().omitBy(n,(l,_)=>["scsi_error_counter_log","scsi_grown_defect_list"].includes(_));return{info:o,smart:{scsi_error_counter_log:n.scsi_error_counter_log,scsi_grown_defect_list:n.scsi_grown_defect_list},device:o.device.name,identifier:o.serial_number}}extractAtaData(n){const o=Xe().omitBy(n,(l,_)=>["ata_smart_attributes","ata_smart_selective_self_test_log","ata_smart_data"].includes(_));return{info:o,smart:{attributes:n.ata_smart_attributes,data:n.ata_smart_data},device:o.device.name,identifier:o.serial_number}}updateData(){this.loading=!0,null!==this.osdId?this.osdService.getSmartData(this.osdId).subscribe({next:this.fetchData.bind(this),error:n=>{n.preventDefault(),this.error=n,this.loading=!1}}):null!==this.hostname&&this.hostService.getSmartData(this.hostname).subscribe({next:this.fetchData.bind(this),error:n=>{n.preventDefault(),this.error=n,this.loading=!1}})}ngOnInit(){this.smartDataColumns=[{prop:"id",name:"ID"},{prop:"name",name:"Name"},{prop:"raw.value",name:"Raw"},{prop:"thresh",name:"Threshold"},{prop:"value",name:"Value"},{prop:"when_failed",name:"When Failed"},{prop:"worst",name:"Worst"}],this.scsiSmartDataColumns=[{prop:"correction_algorithm_invocations",name:"Correction Algorithm Invocations"},{prop:"errors_corrected_by_eccdelayed",name:"Errors Corrected by ECC (Delayed)"},{prop:"errors_corrected_by_eccfast",name:"Errors Corrected by ECC (Fast)"},{prop:"errors_corrected_by_rereads_rewrites",name:"Errors Corrected by Rereads/Rewrites"},{prop:"gigabytes_processed",name:"Gigabyes Processed"},{prop:"total_errors_corrected",name:"Total Errors Corrected"},{prop:"total_uncorrected_errors",name:"Total Errors Uncorrected"}]}ngOnChanges(n){this.data={},n.osdId?this.osdId=n.osdId.currentValue:n.hostname&&(this.hostname=n.hostname.currentValue),this.updateData()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Zc),e.Y36(Wa.x))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-smart-list"]],viewQuery:function(n,o){if(1&n&&e.Gf(Yp,5),2&n){let l;e.iGM(l=e.CRH())&&(o.nav=l.first)}},inputs:{osdId:"osdId",hostname:"hostname"},features:[e.TTD],decls:3,vars:2,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye;return i="Failed to retrieve SMART data.",n="The data received has the JSON format version 2.x and is currently incompatible with the dashboard.",o="No SMART data available.",l="SMART overall-health self-assessment test result",_="unknown",v="SMART overall-health self-assessment test result",O="passed",P="SMART overall-health self-assessment test result",G="failed",K="Device Information",oe="SMART",ue="No device information available for this device.",pe="No SMART data available for this device.",ye="SMART data is loading.",[[4,"ngIf","ngIfElse"],["isLoading",""],["type","error",4,"ngIf"],["type","warning",4,"ngIf"],[4,"ngIf"],["type","error"],i,["type","warning"],n,["type","info",4,"ngIf"],["type","info"],o,["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","",4,"ngFor","ngForOf"],[3,"ngbNavOutlet"],["ngbNavItem",""],["ngbNavLink",""],["ngbNavContent",""],["noError",""],["id","alert-error","type","warning"],["id","alert-self-test-unknown","size","slim","type","warning","title",l,4,"ngIf","ngIfElse"],["hasSmartStatus",""],["id","alert-self-test-unknown","size","slim","type","warning","title",l],_,["selfTestFailed",""],["id","alert-self-test-passed","size","slim","type","info","title",v],O,["id","alert-self-test-failed","size","slim","type","warning","title",P],G,["innerNav","ngbNav"],[3,"ngbNavItem"],K,oe,[3,"renderObjects","data",4,"ngIf"],["id","alert-device-info-unavailable","type","info",4,"ngIf"],[3,"renderObjects","data"],["id","alert-device-info-unavailable","type","info"],ue,["updateSelectionOnRefresh","never",3,"data","columns",4,"ngIf"],["updateSelectionOnRefresh","never",3,"renderObjects","data",4,"ngIf"],["id","alert-device-smart-data-unavailable","type","info",4,"ngIf"],["updateSelectionOnRefresh","never",3,"data","columns"],["updateSelectionOnRefresh","never",3,"renderObjects","data"],["id","alert-device-smart-data-unavailable","type","info"],pe,ye]},template:function(n,o){if(1&n&&(e.YNc(0,yf,4,3,"ng-container",0),e.YNc(1,cp,2,0,"ng-template",null,1,e.W1O)),2&n){const l=e.MAs(2);e.Q6J("ngIf",!o.loading)("ngIfElse",l)}},dependencies:[f.sg,f.O5,zo.a,bu.b,Ah.b,Zu.G,yi.uN,yi.Pz,yi.nv,yi.Is,yi.Vx,yi.tO,yi.Dy,f.Nd,If.i]}),t})();var Ff=s(30490);function __(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",2),e.SDv(1,3),e.qZA())}function Lf(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",2),e.tHW(1,4),e._UZ(2,"cd-doc",5),e.N_p(),e.qZA())}let zf=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-orchestrator-doc-panel"]],inputs:{missingFeatures:"missingFeatures"},decls:3,vars:2,consts:function(){let i,n;return i="The feature is not supported in the current Orchestrator.",n="Orchestrator is not available. Please consult the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " on how to configure and enable the functionality.",[["type","info",4,"ngIf","ngIfElse"],["elseBlock",""],["type","info"],i,n,["section","orch"]]},template:function(n,o){if(1&n&&(e.YNc(0,__,2,0,"cd-alert-panel",0),e.YNc(1,Lf,3,0,"ng-template",null,1,e.W1O)),2&n){const l=e.MAs(2);e.Q6J("ngIf",o.missingFeatures)("ngIfElse",l)}},dependencies:[f.O5,Zu.G,Ff.K]}),t})(),Vf=(()=>{class t{constructor(n,o,l,_,v,O){this.authStorageService=n,this.dimlessBinary=o,this.modalService=l,this.notificationService=_,this.orchService=v,this.hostService=O,this.devices=[],this.showAvailDeviceOnly=!1,this.hiddenColumns=[],this.hostname="",this.diskType="",this.filterColumns=["hostname","human_readable_type","available","sys_api.vendor","sys_api.model","sys_api.size"],this.selectionType=void 0,this.filterChange=new e.vpe,this.fetchInventory=new e.vpe,this.icons=Rr.P,this.columns=[],this.selection=new Io.r,this.orchStatus=void 0,this.actionOrchFeatures={identify:[Jc.DEVICE_BLINK_LIGHT]}}ngOnInit(){this.permission=this.authStorageService.getPermissions().osd,this.tableActions=[{permission:"update",icon:Rr.P.show,click:()=>this.identifyDevice(),name:"Identify",disable:o=>this.getDisable("identify",o),canBePrimary:o=>!o.hasSingleSelection,visible:()=>Xe().isString(this.selectionType)}];const n=[{name:"Hostname",prop:"hostname",flexGrow:1},{name:"Device path",prop:"path",flexGrow:1},{name:"Type",prop:"human_readable_type",flexGrow:1,cellTransformation:Xr.e.badge,customTemplateConfig:{map:{hdd:{value:"HDD",class:"badge-hdd"},ssd:{value:"SSD",class:"badge-ssd"}}}},{name:"Available",prop:"available",flexGrow:1,cellClass:"text-center",cellTransformation:Xr.e.checkIcon},{name:"Vendor",prop:"sys_api.vendor",flexGrow:1},{name:"Model",prop:"sys_api.model",flexGrow:1},{name:"Size",prop:"sys_api.size",flexGrow:1,pipe:this.dimlessBinary},{name:"OSDs",prop:"osd_ids",flexGrow:1,cellTransformation:Xr.e.badge,customTemplateConfig:{class:"badge-dark",prefix:"osd."}}];this.columns=n.filter(o=>!this.hiddenColumns.includes(o.prop)),Xe().forEach(this.filterColumns,o=>{const l=Xe().find(this.columns,{prop:o});l&&(l.filterable=!0),"human_readable_type"===l?.prop&&"ssd"===this.diskType&&(l.filterInitValue=this.diskType),"hostname"===l?.prop&&this.hostname&&(l.filterInitValue=this.hostname)}),this.fetchInventory.observers.length>0&&(this.fetchInventorySub=this.table.fetchData.subscribe(()=>{this.fetchInventory.emit()}))}getDevices(){this.showAvailDeviceOnly?this.hostService.inventoryDeviceList().subscribe(n=>{this.devices=Xe().filter(n,"available"),this.devices=[...this.devices]},()=>{this.devices=[]}):this.devices=[...this.devices]}ngOnDestroy(){this.fetchInventorySub&&this.fetchInventorySub.unsubscribe()}onColumnFiltersChanged(n){this.filterChange.emit(n)}getDisable(n,o){return!o.hasSingleSelection||this.orchService.getTableActionDisableDesc(this.orchStatus,this.actionOrchFeatures[n])}updateSelection(n){this.selection=n}identifyDevice(){const n=this.selection.first(),o=n.hostname,l=n.path||n.device_id;this.modalService.show(ae.X,{titleText:"Identify device " + l + "",message:"Please enter the duration how long to blink the LED.",fields:[{type:"select",name:"duration",value:300,required:!0,typeConfig:{options:[{text:"1 minute",value:60},{text:"2 minutes",value:120},{text:"5 minutes",value:300},{text:"10 minutes",value:600},{text:"15 minutes",value:900}]}}],submitButtonText:"Execute",onSubmit:_=>{this.hostService.identifyDevice(o,l,_.duration).subscribe(()=>{this.notificationService.show(Ho.k.success,"Identifying '" + l + "' started on host '" + o + "'")})}})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(Wl.$),e.Y36(ca.Z),e.Y36(Ui.g),e.Y36(td),e.Y36(Wa.x))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-inventory-devices"]],viewQuery:function(n,o){if(1&n&&e.Gf(zo.a,7),2&n){let l;e.iGM(l=e.CRH())&&(o.table=l.first)}},inputs:{devices:"devices",showAvailDeviceOnly:"showAvailDeviceOnly",hiddenColumns:"hiddenColumns",hostname:"hostname",diskType:"diskType",filterColumns:"filterColumns",selectionType:"selectionType",orchStatus:"orchStatus"},outputs:{filterChange:"filterChange",fetchInventory:"fetchInventory"},decls:2,vars:8,consts:[["identifier","uid","columnMode","flex",3,"data","columns","forceIdentifier","selectionType","searchField","fetchData","updateSelection","columnFiltersChanged"],[1,"table-actions",3,"permission","selection","tableActions"]],template:function(n,o){1&n&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.getDevices()})("updateSelection",function(_){return o.updateSelection(_)})("columnFiltersChanged",function(_){return o.onColumnFiltersChanged(_)}),e._UZ(1,"cd-table-actions",1),e.qZA()),2&n&&(e.Q6J("data",o.devices)("columns",o.columns)("forceIdentifier",!0)("selectionType",o.selectionType)("searchField",!1),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},dependencies:[zo.a,$l.K],styles:[".filter[_ngcontent-%COMP%]{padding-right:8px}.fa-stack[_ngcontent-%COMP%]{font-size:.79rem}.fa-stack[_ngcontent-%COMP%]   .fa-stack-1x[_ngcontent-%COMP%]{margin-left:8px;margin-top:5px}"]}),t})();function ra(t,i){1&t&&e._UZ(0,"cd-orchestrator-doc-panel")}const rh=function(){return[]},ih=function(){return["hostname"]};function lc(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"legend"),e.SDv(2,1),e.qZA(),e.TgZ(3,"div",2)(4,"div",3)(5,"cd-inventory-devices",4),e.NdJ("fetchInventory",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.refresh())}),e.qZA()()(),e.BQk()}if(2&t){const n=e.oxw();e.xp6(5),e.Q6J("devices",n.devices)("hiddenColumns",void 0===n.hostname?e.DdM(3,rh):e.DdM(4,ih))("orchStatus",n.orchStatus)}}let Ku=(()=>{class t{constructor(n,o,l){this.orchService=n,this.hostService=o,this.ngZone=l,this.reloadInterval=5e3,this.firstRefresh=!0,this.icons=Rr.P,this.showDocPanel=!1,this.devices=[]}ngOnInit(){this.orchService.status().subscribe(n=>{this.orchStatus=n,this.showDocPanel=!n.available,n.available&&this.ngZone.runOutsideAngular(()=>{this.reloadSubscriber=(0,xl.H)(this.reloadInterval,this.reloadInterval).subscribe(()=>{this.ngZone.run(()=>{this.getInventory(!1)})})})})}ngOnDestroy(){this.reloadSubscriber?.unsubscribe()}ngOnChanges(){this.orchStatus?.available&&(this.devices=[],this.getInventory(!1))}getInventory(n){""!==this.hostname&&this.hostService.inventoryDeviceList(this.hostname,n).subscribe(o=>{this.devices=o},()=>{this.devices=[]})}refresh(){this.getInventory(!this.firstRefresh),this.firstRefresh=!1}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(td),e.Y36(Wa.x),e.Y36(e.R0b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-inventory"]],inputs:{hostname:"hostname"},features:[e.TTD],decls:2,vars:2,consts:function(){let i;return i="Physical Disks",[[4,"ngIf"],i,[1,"row"],[1,"col-md-12"],["selectionType","single",3,"devices","hiddenColumns","orchStatus","fetchInventory"]]},template:function(n,o){1&n&&(e.YNc(0,ra,1,0,"cd-orchestrator-doc-panel",0),e.YNc(1,lc,6,5,"ng-container",0)),2&n&&(e.Q6J("ngIf",o.showDocPanel),e.xp6(1),e.Q6J("ngIf",null==o.orchStatus?null:o.orchStatus.available))},dependencies:[f.O5,zf,Vf]}),t})();var Zf=s(15257);let Vd=class{constructor(i){this.http=i,this.url="api/daemon"}action(i,n){return this.http.put(`${this.url}/${i}`,{action:n,container_image:null},{headers:{Accept:"application/vnd.ceph.api.v0.1+json"},observe:"response"})}list(i){return this.http.get(this.url,{params:{daemon_types:i}})}};Vd.\u0275fac=function(i){return new(i||Vd)(e.LFG(m.eN))},Vd.\u0275prov=e.Yz7({token:Vd,factory:Vd.\u0275fac,providedIn:"root"}),Vd=(0,Gt.gn)([An.o,(0,Gt.w6)("design:paramtypes",[m.eN])],Vd);var Wf=s(90068),h_=s(76189);class kf{constructor(i){this.observable=i.pipe((0,Ec.U)(n=>(this.count=Number(n.headers?.get("X-Total-Count")),n.body)))}}let rf=(()=>{class t extends h_.S{constructor(n){super(),this.http=n,this.url="api/service"}list(n,o){const l={headers:{Accept:this.getVersionHeaderValue(2,0)},params:n,observe:"response"};return o&&(l.params=l.params.append("service_name",o)),new kf(this.http.get(this.url,l))}getDaemons(n){return this.http.get(`${this.url}/${n}/daemons`)}create(n){return this.http.post(this.url,{service_name:n.service_id?`${n.service_type}.${n.service_id}`:n.service_type,service_spec:n},{observe:"response"})}update(n){const o=n.service_id?`${n.service_type}.${n.service_id}`:n.service_type;return this.http.put(`${this.url}/${o}`,{service_name:o,service_spec:n},{observe:"response"})}delete(n){return this.http.delete(`${this.url}/${n}`,{observe:"response"})}getKnownTypes(){return this.http.get(`${this.url}/known_types`)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();const R_=["statusTpl"],x_=["listTpl"],Jf=["cpuTpl"],oh=["daemonsTable"];function Rp(t,i){1&t&&e._UZ(0,"cd-orchestrator-doc-panel")}function dp(t,i){1&t&&e.GkF(0)}function Yc(t,i){if(1&t&&(e.TgZ(0,"div"),e.YNc(1,dp,1,0,"ng-container",7),e.qZA()),2&t){e.oxw();const n=e.MAs(9);e.xp6(1),e.Q6J("ngTemplateOutlet",n)}}function sf(t,i){1&t&&e.GkF(0)}function fp(t,i){if(1&t&&e.YNc(0,sf,1,0,"ng-container",7),2&t){e.oxw(2);const n=e.MAs(9);e.Q6J("ngTemplateOutlet",n)}}function xp(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table",18,19),e.NdJ("fetchData",function(l){e.CHM(n);const _=e.oxw(3);return e.KtG(_.getServices(l))}),e.qZA()}if(2&t){const n=e.oxw(3);e.Q6J("data",n.services)("columns",n.serviceColumns)}}function wd(t,i){if(1&t&&e.YNc(0,xp,2,2,"cd-table",17),2&t){const n=e.oxw(2);e.Q6J("ngIf",n.hasOrchestrator)}}function w_(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"nav",8,9),e.ynx(3,10),e.TgZ(4,"a",11),e.SDv(5,12),e.qZA(),e.YNc(6,fp,1,1,"ng-template",13),e.BQk(),e.ynx(7,14),e.TgZ(8,"a",11),e.SDv(9,15),e.qZA(),e.YNc(10,wd,1,1,"ng-template",13),e.BQk(),e.qZA(),e._UZ(11,"div",16),e.BQk()),2&t){const n=e.MAs(2);e.xp6(11),e.Q6J("ngbNavOutlet",n)}}function wp(t,i){if(1&t&&(e.TgZ(0,"span",20),e.ALo(1,"pipeFunction"),e._uU(2),e.qZA()),2&t){const n=i.row,o=e.oxw();e.Q6J("ngClass",e.xi3(1,2,n,o.getStatusClass)),e.xp6(2),e.hij(" ",n.status_desc," ")}}const Rh=function(t){return[t]};function sh(t,i){if(1&t&&(e.TgZ(0,"span"),e._UZ(1,"i",27),e.qZA()),2&t){const n=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,Rh,n.icons.infoCircle))}}function pp(t,i){if(1&t&&(e.TgZ(0,"span"),e._UZ(1,"i",27),e.qZA()),2&t){const n=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,Rh,n.icons.warning))}}function Xh(t,i){if(1&t&&(e.TgZ(0,"li",25)(1,"b"),e._uU(2),e.ALo(3,"relativeDate"),e.qZA(),e.TgZ(4,"span",26),e._uU(5),e.qZA(),e._UZ(6,"br"),e.YNc(7,sh,2,3,"span",0),e.YNc(8,pp,2,3,"span",0),e._uU(9),e.qZA()),2&t){const n=i.$implicit;e.xp6(2),e.hij("",e.lcZ(3,5,n.created)," - "),e.xp6(3),e.Oqu(n.subject),e.xp6(2),e.Q6J("ngIf","INFO"===n.level),e.xp6(1),e.Q6J("ngIf","ERROR"===n.level),e.xp6(1),e.hij(" ",n.message," ")}}function Ef(t,i){if(1&t&&(e.TgZ(0,"ul",23),e.YNc(1,Xh,10,7,"li",24),e.qZA()),2&t){const n=e.oxw().value,o=e.oxw();e.xp6(1),e.Q6J("ngForOf",n)("ngForTrackBy",o.trackByFn)}}function Sf(t,i){1&t&&(e.TgZ(0,"div",25)(1,"span"),e._uU(2,"No data available"),e.qZA()())}function Vp(t,i){if(1&t&&e.YNc(0,Sf,3,0,"div",28),2&t){const n=e.oxw().value;e.Q6J("ngIf",0===(null==n?null:n.length))}}function xh(t,i){if(1&t&&(e.YNc(0,Ef,2,2,"ul",21),e.YNc(1,Vp,1,1,"ng-template",null,22,e.W1O)),2&t){const n=i.value,o=e.MAs(2);e.Q6J("ngIf",null==n?null:n.length)("ngIfElse",o)}}function ah(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table",30,31),e.NdJ("fetchData",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.getDaemons(l))})("updateSelection",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.updateSelection(l))}),e._UZ(2,"cd-table-actions",32),e.qZA()}if(2&t){const n=e.oxw(2);e.Q6J("data",n.daemons)("columns",n.columns),e.xp6(2),e.Q6J("selection",n.selection)("permission",n.permissions.hosts)("tableActions",n.tableActions)}}function P_(t,i){if(1&t&&e.YNc(0,ah,3,5,"cd-table",29),2&t){const n=e.oxw();e.Q6J("ngIf",n.hasOrchestrator)}}function qh(t,i){if(1&t&&e._UZ(0,"cd-usage-bar",33),2&t){const n=i.row,o=e.oxw();e.Q6J("total",o.total)("calculatePerc",!1)("used",n.cpu_percentage)("isBinary",!1)("warningThreshold",o.warningThreshold)("errorThreshold",o.errorThreshold)}}let N_=(()=>{class t{constructor(n,o,l,_,v,O,P,G,K,oe){this.hostService=n,this.cephServiceService=o,this.orchService=l,this.relativeDatePipe=_,this.dimlessBinary=v,this.actionLabels=O,this.authStorageService=P,this.daemonService=G,this.notificationService=K,this.cdRef=oe,this.hiddenColumns=[],this.total=100,this.warningThreshold=.8,this.errorThreshold=.9,this.icons=Rr.P,this.daemons=[],this.services=[],this.columns=[],this.serviceColumns=[],this.selection=new Io.r,this.hasOrchestrator=!1,this.showDocPanel=!1}ngOnInit(){this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"update",icon:Rr.P.start,click:()=>this.daemonAction("start"),name:this.actionLabels.START,disable:()=>this.actionDisabled("start")},{permission:"update",icon:Rr.P.stop,click:()=>this.daemonAction("stop"),name:this.actionLabels.STOP,disable:()=>this.actionDisabled("stop")},{permission:"update",icon:Rr.P.restart,click:()=>this.daemonAction("restart"),name:this.actionLabels.RESTART,disable:()=>this.actionDisabled("restart")},{permission:"update",icon:Rr.P.deploy,click:()=>this.daemonAction("redeploy"),name:this.actionLabels.REDEPLOY,disable:()=>this.actionDisabled("redeploy")}],this.columns=[{name:"Hostname",prop:"hostname",flexGrow:2,filterable:!0},{name:"Daemon name",prop:"daemon_name",flexGrow:1,filterable:!0},{name:"Version",prop:"version",flexGrow:1,filterable:!0},{name:"Status",prop:"status_desc",flexGrow:1,filterable:!0,cellTemplate:this.statusTpl},{name:"Last Refreshed",prop:"last_refresh",pipe:this.relativeDatePipe,flexGrow:1},{name:"CPU Usage",prop:"cpu_percentage",flexGrow:1,cellTemplate:this.cpuTpl},{name:"Memory Usage",prop:"memory_usage",flexGrow:1,pipe:this.dimlessBinary,cellClass:"text-right"},{name:"Daemon Events",prop:"events",flexGrow:2,cellTemplate:this.listTpl}],this.serviceColumns=[{name:"Service Name",prop:"service_name",flexGrow:2,filterable:!0},{name:"Service Type",prop:"service_type",flexGrow:1,filterable:!0},{name:"Service Events",prop:"events",flexGrow:5,cellTemplate:this.listTpl}],this.orchService.status().subscribe(n=>{this.hasOrchestrator=n.available,this.showDocPanel=!n.available}),this.columns=this.columns.filter(n=>!this.hiddenColumns.includes(n.prop)),setTimeout(()=>{this.cdRef.detectChanges()},1e3)}ngOnChanges(){Xe().isUndefined(this.daemonsTable)||this.daemonsTable.reloadData()}ngAfterViewInit(){this.daemonsTableTplsSub=this.daemonsTableTpls.changes.subscribe(n=>{this.daemonsTable=n.first})}ngOnDestroy(){this.daemonsTableTplsSub&&this.daemonsTableTplsSub.unsubscribe(),this.serviceSub&&this.serviceSub.unsubscribe()}getStatusClass(n){return Xe().get({"-1":"badge-danger",0:"badge-warning",1:"badge-success"},n.status,"badge-dark")}getDaemons(n){let o;if(this.hostname)o=this.hostService.getDaemons(this.hostname);else{if(!this.serviceName)return void(this.daemons=[]);o=this.cephServiceService.getDaemons(this.serviceName)}o.subscribe(l=>{this.daemons=l,this.sortDaemonEvents()},()=>{this.daemons=[],n.error()})}sortDaemonEvents(){this.daemons.forEach(n=>{n.events?.sort((o,l)=>new Date(l.created).getTime()-new Date(o.created).getTime())})}getServices(n){this.serviceSub=this.cephServiceService.list(new m.LE({fromObject:{limit:-1,offset:0}}),this.serviceName).observable.subscribe(o=>{this.services=o},()=>{this.services=[],n.error()})}trackByFn(n,o){return o.created}updateSelection(n){this.selection=n}daemonAction(n){this.daemonService.action(this.selection.first()?.daemon_name,n).pipe((0,Zf.q)(1)).subscribe({next:o=>{this.notificationService.show(Ho.k.success,`Daemon ${n} scheduled`,o.body.toString())},error:o=>{this.notificationService.show(Ho.k.error,"Daemon action failed",o.body.toString())}})}actionDisabled(n){if(this.selection?.hasSelection){const o=this.selection.selected[0];if("mon"===o.daemon_type||"mgr"===o.daemon_type)return!0;switch(n){case"start":if("running"===o.status_desc)return!0;break;case"stop":if("stopped"===o.status_desc)return!0}return!1}return!0}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Wa.x),e.Y36(rf),e.Y36(td),e.Y36(Wf.h),e.Y36(Wl.$),e.Y36(yr.p4),e.Y36(Do.j),e.Y36(Vd),e.Y36(Ui.g),e.Y36(e.sBO))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-service-daemon-list"]],viewQuery:function(n,o){if(1&n&&(e.Gf(R_,7),e.Gf(x_,7),e.Gf(Jf,7),e.Gf(oh,5)),2&n){let l;e.iGM(l=e.CRH())&&(o.statusTpl=l.first),e.iGM(l=e.CRH())&&(o.listTpl=l.first),e.iGM(l=e.CRH())&&(o.cpuTpl=l.first),e.iGM(l=e.CRH())&&(o.daemonsTableTpls=l)}},inputs:{serviceName:"serviceName",hostname:"hostname",hiddenColumns:"hiddenColumns",flag:"flag"},features:[e.TTD],decls:12,vars:3,consts:function(){let i,n;return i="Daemons",n="Service Events",[[4,"ngIf"],[4,"ngIf","ngIfElse"],["serviceDetailsTpl",""],["statusTpl",""],["listTpl",""],["serviceDaemonDetailsTpl",""],["cpuTpl",""],[4,"ngTemplateOutlet"],["ngbNav","","cdStatefulTab","service-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","service_events"],n,[3,"ngbNavOutlet"],["columnMode","flex",3,"data","columns","fetchData",4,"ngIf"],["columnMode","flex",3,"data","columns","fetchData"],["serviceTable",""],[1,"badge",3,"ngClass"],["class","list-group list-group-flush",4,"ngIf","ngIfElse"],["noEventsAvailable",""],[1,"list-group","list-group-flush"],["class","list-group-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"list-group-item"],[1,"badge","badge-info"],["aria-hidden","true",3,"ngClass"],["class","list-group-item",4,"ngIf"],["selectionType","single","columnMode","flex","identifier","daemon_name",3,"data","columns","fetchData","updateSelection",4,"ngIf"],["selectionType","single","columnMode","flex","identifier","daemon_name",3,"data","columns","fetchData","updateSelection"],["daemonsTable",""],["id","service-daemon-list-actions",1,"table-actions",3,"selection","permission","tableActions"],[3,"total","calculatePerc","used","isBinary","warningThreshold","errorThreshold"]]},template:function(n,o){if(1&n&&(e.YNc(0,Rp,1,0,"cd-orchestrator-doc-panel",0),e.YNc(1,Yc,2,1,"div",1),e.YNc(2,w_,12,1,"ng-template",null,2,e.W1O),e.YNc(4,wp,3,5,"ng-template",null,3,e.W1O),e.YNc(6,xh,3,2,"ng-template",null,4,e.W1O),e.YNc(8,P_,1,1,"ng-template",null,5,e.W1O),e.YNc(10,qh,1,6,"ng-template",null,6,e.W1O)),2&n){const l=e.MAs(3);e.Q6J("ngIf",o.showDocPanel),e.xp6(1),e.Q6J("ngIf","hostDetails"===o.flag)("ngIfElse",l)}},dependencies:[f.mk,f.sg,f.O5,f.tP,yi.uN,yi.Pz,yi.nv,yi.Vx,yi.tO,yi.Dy,fc.O,zf,zo.a,$l.K,kc.m,Wf.h,If.i],styles:[".fa-info-circle[_ngcontent-%COMP%]{color:#25828e}.fa-exclamation-triangle[_ngcontent-%COMP%]{color:#dc3545}.list-group-item[_ngcontent-%COMP%]{background-color:transparent;border-width:0}"]}),t})();function wh(t,i){if(1&t&&e._UZ(0,"cd-device-list",14),2&t){const n=e.oxw(2);e.Q6J("hostname",n.selection.hostname)}}function I_(t,i){if(1&t&&e._UZ(0,"cd-inventory",14),2&t){const n=e.oxw(3);e.Q6J("hostname",n.selectedHostname)}}function Zp(t,i){1&t&&(e.ynx(0,15),e.TgZ(1,"a",5),e.SDv(2,16),e.qZA(),e.YNc(3,I_,1,1,"ng-template",7),e.BQk())}const Qc=function(){return["hostname"]};function em(t,i){if(1&t&&e._UZ(0,"cd-service-daemon-list",19),2&t){const n=e.oxw(3);e.Q6J("hostname",n.selectedHostname)("hiddenColumns",e.DdM(2,Qc))}}function _p(t,i){1&t&&(e.ynx(0,17),e.TgZ(1,"a",5),e.SDv(2,18),e.qZA(),e.YNc(3,em,1,3,"ng-template",7),e.BQk())}function lh(t,i){if(1&t&&e._UZ(0,"cd-grafana",22),2&t){const n=e.oxw(3);e.Q6J("grafanaPath","host-details?var-ceph_hosts="+n.selectedHostname)("type","metrics")}}function F_(t,i){1&t&&(e.ynx(0,20),e.TgZ(1,"a",5),e.SDv(2,21),e.qZA(),e.YNc(3,lh,1,2,"ng-template",7),e.BQk())}function tm(t,i){if(1&t&&e._UZ(0,"cd-smart-list",14),2&t){const n=e.oxw(3);e.Q6J("hostname",n.selectedHostname)}}function Ph(t,i){if(1&t&&e.YNc(0,tm,1,1,"cd-smart-list",23),2&t){const n=e.oxw(2),o=e.MAs(2);e.Q6J("ngIf",n.selectedHostname)("ngIfElse",o)}}function Pp(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"nav",2,3),e.ynx(3,4),e.TgZ(4,"a",5),e.SDv(5,6),e.qZA(),e.YNc(6,wh,1,1,"ng-template",7),e.BQk(),e.YNc(7,Zp,4,0,"ng-container",8),e.YNc(8,_p,4,0,"ng-container",9),e.YNc(9,F_,4,0,"ng-container",10),e.ynx(10,11),e.TgZ(11,"a",5),e.SDv(12,12),e.qZA(),e.YNc(13,Ph,1,2,"ng-template",7),e.BQk(),e.qZA(),e._UZ(14,"div",13),e.BQk()),2&t){const n=e.MAs(2),o=e.oxw();e.xp6(7),e.Q6J("ngIf",o.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",o.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(5),e.Q6J("ngbNavOutlet",n)}}function nm(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",24),e.SDv(1,25),e.qZA())}let rm=(()=>{class t{get selectedHostname(){return void 0!==this.selection?this.selection.hostname:null}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-host-details"]],inputs:{permissions:"permissions",selection:"selection"},decls:3,vars:1,consts:function(){let i,n,o,l,_,v,O;return i="Devices",n="Device health",o="Physical Disks",l="Daemons",_="Performance Details",v="Host details",O="No hostname found.",[[4,"ngIf"],["noHostname",""],["ngbNav","","cdStatefulTab","host-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","devices"],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","inventory",4,"ngIf"],["ngbNavItem","daemons",4,"ngIf"],["ngbNavItem","performance-details",4,"ngIf"],["ngbNavItem","device-health"],n,[3,"ngbNavOutlet"],[3,"hostname"],["ngbNavItem","inventory"],o,["ngbNavItem","daemons"],l,["flag","hostDetails",3,"hostname","hiddenColumns"],["ngbNavItem","performance-details"],_,["title",v,"uid","rtOg0AiWz","grafanaStyle","four",3,"grafanaPath","type"],[3,"hostname",4,"ngIf","ngIfElse"],["type","error"],O]},template:function(n,o){1&n&&(e.YNc(0,Pp,15,4,"ng-container",0),e.YNc(1,nm,2,0,"ng-template",null,1,e.W1O)),2&n&&e.Q6J("ngIf",o.selection)},dependencies:[f.O5,yi.uN,yi.Pz,yi.nv,yi.Vx,yi.tO,yi.Dy,ad.F,Zu.G,kc.m,Dp,Mc,Ku,N_]}),t})();const im=["servicesTpl"],Im=["maintenanceConfirmTpl"],vd=["orchTmpl"],uh=["flashTmpl"],ym=["hostNameTpl"];function Np(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table",14,15),e.NdJ("fetchData",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.getHosts(l))})("setExpandedRow",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.setExpandedRow(l))})("updateSelection",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.updateSelection(l))}),e.TgZ(2,"div",16),e._UZ(3,"cd-table-actions",17),e.qZA(),e._UZ(4,"cd-host-details",18),e.qZA()}if(2&t){const n=e.oxw();e.Q6J("data",n.hosts)("columns",n.columns)("searchableObjects",!0)("hasDetails",n.hasTableDetails)("serverSide",!0)("count",n.count)("maxLimit",25)("toolHeader",!n.hideToolHeader),e.xp6(3),e.Q6J("permission",n.permissions.hosts)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("permissions",n.permissions)("selection",n.expandedRow)}}function ch(t,i){1&t&&e.GkF(0,2)}function Cd(t,i){1&t&&e._UZ(0,"cd-grafana",20),2&t&&e.Q6J("grafanaPath","host-overview?")("type","metrics")}function om(t,i){1&t&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,19),e.qZA(),e.YNc(3,Cd,1,2,"ng-template",5),e.BQk())}function Nh(t,i){if(1&t&&(e.TgZ(0,"span"),e._UZ(1,"cd-label",22),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.Q6J("key",n.type)("value",n.count)}}function Ih(t,i){1&t&&e.YNc(0,Nh,2,2,"span",21),2&t&&e.Q6J("ngForOf",i.value)}function Fh(t,i){if(1&t&&(e.TgZ(0,"span",25),e._uU(1),e.qZA()),2&t){const n=e.oxw().row;e.xp6(1),e.hij(" (",n.addr,") ")}}function cg(t,i){if(1&t&&(e.TgZ(0,"span",23),e._uU(1),e.qZA(),e._UZ(2,"br"),e.YNc(3,Fh,2,1,"span",24)),2&t){const n=i.row;e.Q6J("ngClass",n),e.xp6(1),e.hij(" ",n.hostname," "),e.xp6(2),e.Q6J("ngIf",n.addr)}}function L_(t,i){if(1&t&&(e.TgZ(0,"ul")(1,"li"),e.SDv(2,27),e.qZA()()),2&t){const n=e.oxw().$implicit;e.xp6(2),e.pQV(n),e.QtT(2)}}function I(t,i){if(1&t&&(e.TgZ(0,"div"),e.YNc(1,L_,3,1,"ul",26),e.qZA()),2&t){const n=i.last,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",!n||"1"===o.errorMessage.length)}}function re(t,i){1&t&&(e.ynx(0),e.SDv(1,28),e.BQk())}function S(t,i){if(1&t&&(e.YNc(0,I,2,1,"div",21),e.YNc(1,re,2,0,"ng-container",26)),2&t){const n=e.oxw();e.Q6J("ngForOf",n.errorMessage),e.xp6(1),e.Q6J("ngIf",n.showSubmit)}}function z(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function Oe(t,i){1&t&&(e.TgZ(0,"span",31),e.SDv(1,32),e.qZA())}let On=(()=>{class t extends Hr.o{constructor(n,o,l,_,v,O,P,G,K,oe){super(),this.authStorageService=n,this.dimlessBinary=o,this.emptyPipe=l,this.hostService=_,this.actionLabels=v,this.modalService=O,this.taskWrapper=P,this.router=G,this.notificationService=K,this.orchService=oe,this.sub=new bd.w,this.hiddenColumns=[],this.hideMaintenance=!1,this.hasTableDetails=!0,this.hideToolHeader=!1,this.showGeneralActionsOnly=!1,this.columns=[],this.hosts=[],this.isLoadingHosts=!1,this.cdParams={fromLink:"/hosts"},this.selection=new Io.r,this.isExecuting=!1,this.icons=Rr.P,this.tableContext=null,this.count=5,this.messages={nonOrchHost:"The feature is disabled because the selected host is not managed by Orchestrator."},this.actionOrchFeatures={add:[Jc.HOST_ADD],edit:[Jc.HOST_LABEL_ADD,Jc.HOST_LABEL_REMOVE],remove:[Jc.HOST_REMOVE],maintenance:[Jc.HOST_MAINTENANCE_ENTER,Jc.HOST_MAINTENANCE_EXIT],drain:[Jc.HOST_DRAIN]},this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{name:this.actionLabels.ADD,permission:"create",icon:Rr.P.add,click:()=>this.router.url.includes("/hosts")?this.router.navigate(["hosts",{outlets:{modal:[yr.MQ.ADD]}}]):this.bsModalRef=this.modalService.show(q_,{hideMaintenance:this.hideMaintenance}),disable:ue=>this.getDisable("add",ue)},{name:this.actionLabels.EDIT,permission:"update",icon:Rr.P.edit,click:()=>this.editAction(),disable:ue=>this.getDisable("edit",ue)},{name:this.actionLabels.START_DRAIN,permission:"update",icon:Rr.P.exit,click:()=>this.hostDrain(),disable:ue=>this.getDisable("drain",ue)||!this.enableDrainBtn,visible:()=>!this.showGeneralActionsOnly&&this.enableDrainBtn},{name:this.actionLabels.STOP_DRAIN,permission:"update",icon:Rr.P.exit,click:()=>this.hostDrain(!0),disable:ue=>this.getDisable("drain",ue)||this.enableDrainBtn,visible:()=>!this.showGeneralActionsOnly&&!this.enableDrainBtn},{name:this.actionLabels.REMOVE,permission:"delete",icon:Rr.P.destroy,click:()=>this.deleteAction(),disable:ue=>this.getDisable("remove",ue)},{name:this.actionLabels.ENTER_MAINTENANCE,permission:"update",icon:Rr.P.enter,click:()=>this.hostMaintenance(),disable:ue=>this.getDisable("maintenance",ue)||this.isExecuting||this.enableMaintenanceBtn,visible:()=>!this.showGeneralActionsOnly&&!this.enableMaintenanceBtn},{name:this.actionLabels.EXIT_MAINTENANCE,permission:"update",icon:Rr.P.exit,click:()=>this.hostMaintenance(),disable:ue=>this.getDisable("maintenance",ue)||this.isExecuting||!this.enableMaintenanceBtn,visible:()=>!this.showGeneralActionsOnly&&this.enableMaintenanceBtn}]}ngOnInit(){this.columns=[{name:"Hostname",prop:"hostname",flexGrow:1,cellTemplate:this.hostNameTpl},{name:"Service Instances",prop:"service_instances",flexGrow:1.5,cellTemplate:this.servicesTpl},{name:"Labels",prop:"labels",flexGrow:1,cellTransformation:Xr.e.badge,customTemplateConfig:{class:"badge-dark"}},{name:"Status",prop:"status",flexGrow:.8,cellTransformation:Xr.e.badge,customTemplateConfig:{map:{maintenance:{class:"badge-warning"},available:{class:"badge-success"}}}},{name:"Model",prop:"model",flexGrow:1},{name:"CPUs",prop:"cpu_count",flexGrow:.3},{name:"Cores",prop:"cpu_cores",flexGrow:.3},{name:"Total Memory",prop:"memory_total_bytes",pipe:this.dimlessBinary,flexGrow:.4},{name:"Raw Capacity",prop:"raw_capacity",pipe:this.dimlessBinary,flexGrow:.5},{name:"HDDs",prop:"hdd_count",flexGrow:.3},{name:"Flash",prop:"flash_count",headerTemplate:this.flashTmpl,flexGrow:.3},{name:"NICs",prop:"nic_count",flexGrow:.3}],this.columns=this.columns.filter(n=>!this.hiddenColumns.includes(n.prop))}ngOnDestroy(){this.sub.unsubscribe()}updateSelection(n){this.selection=n,this.enableMaintenanceBtn=!1,this.enableDrainBtn=!1,this.selection.hasSelection&&("maintenance"===this.selection.first().status&&(this.enableMaintenanceBtn=!0),this.selection.first().labels.includes("_no_schedule")||(this.enableDrainBtn=!0))}editAction(){this.hostService.getLabels().subscribe(n=>{const o=this.selection.first(),l=new Set(n.concat(this.hostService.predefinedLabels)),_=Array.from(l).map(v=>({enabled:!0,name:v}));this.modalService.show(ae.X,{titleText:"Edit Host: " + o.hostname + "",fields:[{type:"select-badges",name:"labels",value:o.labels,label:"Labels",typeConfig:{customBadges:!0,options:_,messages:new Rd.a({empty:"There are no labels.",filter:"Filter or add labels",add:"Add label"})}}],submitButtonText:"Edit Host",onSubmit:v=>{this.hostService.update(o.hostname,!0,v.labels).subscribe(()=>{this.notificationService.show(Ho.k.success,"Updated Host \"" + o.hostname + "\""),this.table.refreshBtn()})}})})}hostMaintenance(){this.isExecuting=!0;const n=this.selection.first();"maintenance"!==n.status?this.hostService.update(n.hostname,!1,[],!0).subscribe(()=>{this.isExecuting=!1,this.notificationService.show(Ho.k.success,"\"" + n.hostname + "\" moved to maintenance"),this.table.refreshBtn()},o=>{if(this.isExecuting=!1,this.errorMessage=o.error.detail.split(/\n/),o.preventDefault(),!o.error.detail.includes("WARNING")||o.error.detail.includes("It is NOT safe to stop")||o.error.detail.includes("ALERT")||o.error.detail.includes("unsafe to stop"))this.notificationService.show(Ho.k.error,"\"" + n.hostname + "\" cannot be put into maintenance","" + o.error.detail + "");else{const l={titleText:"Warning",buttonText:"Continue",warning:!0,bodyTpl:this.maintenanceConfirmTpl,showSubmit:!0,onSubmit:()=>{this.hostService.update(n.hostname,!1,[],!0,!0).subscribe(()=>{this.modalRef.close()},()=>this.modalRef.close())}};this.modalRef=this.modalService.show(le.Y,l)}}):this.hostService.update(n.hostname,!1,[],!0).subscribe(()=>{this.isExecuting=!1,this.notificationService.show(Ho.k.success,"\"" + n.hostname + "\" has exited maintenance"),this.table.refreshBtn()})}hostDrain(n=!1){const o=this.selection.first();if(n){const l=o.labels.indexOf("_no_schedule",0);o.labels.splice(l,1),this.hostService.update(o.hostname,!0,o.labels).subscribe(()=>{this.notificationService.show(Ho.k.info,"\"" + o.hostname + "\" stopped draining"),this.table.refreshBtn()})}else this.hostService.update(o.hostname,!1,[],!1,!1,!0).subscribe(()=>{this.notificationService.show(Ho.k.info,"\"" + o.hostname + "\" started draining"),this.table.refreshBtn()})}getDisable(n,o){if("remove"===n||"edit"===n||"maintenance"===n||"drain"===n){if(!o?.hasSingleSelection)return!0;if(!Xe().every(o.selected,"sources.orchestrator"))return this.messages.nonOrchHost}return this.orchService.getTableActionDisableDesc(this.orchStatus,this.actionOrchFeatures[n])}deleteAction(){const n=this.selection.first().hostname;this.modalRef=this.modalService.show(Go.M,{itemDescription:"Host",itemNames:[n],actionDescription:"remove",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("host/remove",{hostname:n}),call:this.hostService.delete(n)})})}checkHostsFactsAvailable(){const n=this.orchStatus.features;return!Xe().isEmpty(n)&&!!n.get_facts.available}transformHostsData(){if(this.checkHostsFactsAvailable())Xe().forEach(this.hosts,n=>{n.memory_total_bytes=this.emptyPipe.transform(1024*n.memory_total_kb),n.raw_capacity=this.emptyPipe.transform(n.hdd_capacity_bytes+n.flash_capacity_bytes)});else for(let n=4;n<this.columns.length;n++)this.columns[n].cellTemplate=this.orchTmpl}getHosts(n){null!==n&&(this.tableContext=n),null==this.tableContext&&(this.tableContext=new Sc.E(()=>{})),!this.isLoadingHosts&&(this.isLoadingHosts=!0,this.sub=this.orchService.status().pipe((0,dd.zg)(o=>{this.orchStatus=o;const l=this.checkHostsFactsAvailable();return this.hostService.list(this.tableContext?.toParams(),l.toString())})).subscribe(o=>{this.hosts=o,this.hosts.forEach(l=>{""===l.status&&(l.status="available")}),this.transformHostsData(),this.isLoadingHosts=!1,this.count=this.hosts.length>0?s_.v.getCount(o[0]):0},()=>{this.isLoadingHosts=!1,n.error()}))}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(Wl.$),e.Y36(sp.W),e.Y36(Wa.x),e.Y36(yr.p4),e.Y36(ca.Z),e.Y36(Gr.P),e.Y36(Ee.F0),e.Y36(Ui.g),e.Y36(td))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-hosts"]],viewQuery:function(n,o){if(1&n&&(e.Gf(zo.a,5),e.Gf(im,7),e.Gf(Im,7),e.Gf(vd,7),e.Gf(uh,7),e.Gf(ym,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.table=l.first),e.iGM(l=e.CRH())&&(o.servicesTpl=l.first),e.iGM(l=e.CRH())&&(o.maintenanceConfirmTpl=l.first),e.iGM(l=e.CRH())&&(o.orchTmpl=l.first),e.iGM(l=e.CRH())&&(o.flashTmpl=l.first),e.iGM(l=e.CRH())&&(o.hostNameTpl=l.first)}},inputs:{hiddenColumns:"hiddenColumns",hideMaintenance:"hideMaintenance",hasTableDetails:"hasTableDetails",hideToolHeader:"hideToolHeader",showGeneralActionsOnly:"showGeneralActionsOnly"},features:[e._Bn([{provide:Qn.F,useValue:new Qn.F("hosts")}]),e.qOj],decls:20,vars:3,consts:function(){let i,n,o,l,_,v,O,P,G;return i="Hosts List",n="Overall Performance",o="Host overview",l="" + "\ufffd0\ufffd" + "",_="Are you sure you want to continue?",v="Data will be available only if Orchestrator is available.",O="N/A",P="SSD, NVMEs",G="Flash",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","",4,"ngIf"],[3,"ngbNavOutlet"],["servicesTpl",""],["hostNameTpl",""],["maintenanceConfirmTpl",""],["orchTmpl",""],["flashTmpl",""],["name","modal"],["columnMode","flex","selectionType","single",3,"data","columns","searchableObjects","hasDetails","serverSide","count","maxLimit","toolHeader","fetchData","setExpandedRow","updateSelection"],["table",""],[1,"table-actions","btn-toolbar"],["id","host-actions",1,"btn-group",3,"permission","selection","tableActions"],["cdTableDetail","",3,"permissions","selection"],n,["title",o,"uid","y0KGL0iZz","grafanaStyle","two",3,"grafanaPath","type"],[4,"ngFor","ngForOf"],[1,"me-1",3,"key","value"],[3,"ngClass"],["class","text-muted fst-italic",4,"ngIf"],[1,"text-muted","fst-italic"],[4,"ngIf"],l,_,["ngbTooltip",v],O,["ngbTooltip",P],G]},template:function(n,o){if(1&n&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,Np,5,13,"ng-template",5),e.BQk(),e.YNc(6,ch,1,0,"ng-container",6),e.YNc(7,om,4,0,"ng-container",6),e.qZA(),e._UZ(8,"div",7),e.YNc(9,Ih,1,1,"ng-template",null,8,e.W1O),e.YNc(11,cg,4,3,"ng-template",null,9,e.W1O),e.YNc(13,S,2,2,"ng-template",null,10,e.W1O),e.YNc(15,z,2,0,"ng-template",null,11,e.W1O),e.YNc(17,Oe,2,0,"ng-template",null,12,e.W1O),e._UZ(19,"router-outlet",13)),2&n){const l=e.MAs(1);e.xp6(6),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngbNavOutlet",l)}},dependencies:[f.mk,f.sg,f.O5,yi.uN,yi.Pz,yi.nv,yi.Vx,yi.tO,yi.Dy,ad.F,Bf,zo.a,$l.K,Ee.lC,yi._L,rm]}),t})();var Ar=s(67460);let ri=(()=>{class t{transform(n){if(Xe().isUndefined(n))return "no spec";if(Xe().get(n,"unmanaged",!1))return "unmanaged";const o=[],l=Xe().get(n,"placement.hosts"),_=Xe().get(n,"placement.count"),v=Xe().get(n,"placement.label"),O=Xe().get(n,"placement.host_pattern");return Xe().isArray(l)&&o.push(...l),Xe().isNumber(_)&&o.push("count:" + _ + ""),Xe().isString(v)&&o.push("label:" + v + ""),Xe().isString(O)&&o.push(O),o.join(";")}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275pipe=e.Yjl({name:"placement",type:t,pure:!0}),t})();var Di=s(79765),Pi=s(66682),cs=s(54395),Yo=s(87519),y=s(45435),x=s(80381),Y=s(95596),be=s(43186),Ke=s(97937),xt=s(98961);function _n(t,i){1&t&&(e.TgZ(0,"span",22),e.SDv(1,23),e.qZA())}function In(t,i){1&t&&(e.TgZ(0,"span",22),e.SDv(1,24),e.qZA())}function vr(t,i){1&t&&(e.TgZ(0,"span",22),e.SDv(1,25),e.qZA())}let Si=(()=>{class t{constructor(n,o,l,_,v,O,P,G){this.activeModal=n,this.actionLabels=o,this.rgwMultisiteService=l,this.rgwZoneService=_,this.notificationService=v,this.rgwZonegroupService=O,this.rgwRealmService=P,this.modalService=G,this.sub=new bd.w,this.submitAction=new e.vpe,this.createForm()}createForm(){this.createMultisiteEntitiesForm=new fu.d({realmName:new rn.NI(null,{validators:[rn.kI.required]}),zonegroupName:new rn.NI(null,{validators:[rn.kI.required]}),zoneName:new rn.NI(null,{validators:[rn.kI.required]})})}submit(){const n=this.createMultisiteEntitiesForm.value;this.realm=new be.L6,this.realm.name=n.realmName,this.zonegroup=new be.iG,this.zonegroup.name=n.zonegroupName,this.zonegroup.endpoints="",this.zone=new be.jb,this.zone.name=n.zoneName,this.zone.endpoints="",this.zone.system_key=new be.VY,this.zone.system_key.access_key="",this.zone.system_key.secret_key="",this.rgwRealmService.create(this.realm,!0).toPromise().then(()=>{this.rgwZonegroupService.create(this.realm,this.zonegroup,!0,!0).toPromise().then(()=>{this.rgwZoneService.create(this.zone,this.zonegroup,!0,!0,this.zone.endpoints).toPromise().then(()=>{this.notificationService.show(Ho.k.success,"Realm/Zonegroup/Zone created successfully"),this.submitAction.emit(),this.activeModal.close()}).catch(()=>{this.notificationService.show(Ho.k.error,"Realm/Zonegroup/Zone creation failed")})})})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(x.o),e.Y36(Ke.g),e.Y36(Ui.g),e.Y36(xt.K),e.Y36(Y.y),e.Y36(ca.Z))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-create-rgw-service-entities"]],outputs:{submitAction:"submitAction"},decls:29,vars:6,consts:function(){let i,n,o,l,_,v,O;return i="Create Realm/Zone Group/Zone ",n="Realm Name",o="Zone Group Name",l="Zone Name",_="This field is required.",v="This field is required.",O="This field is required.",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["name","createMultisiteEntitiesForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],["type","info","spacingClass","mb-3"],[1,"form-group","row"],["for","realmName",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],["type","text","placeholder","Realm name...","id","realmName","name","realmName","formControlName","realmName",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","zonegroupName",1,"cd-col-form-label","required"],o,["type","text","placeholder","Zone group name...","id","zonegroupName","name","zonegroupName","formControlName","zonegroupName",1,"form-control"],["for","zoneName",1,"cd-col-form-label","required"],l,["type","text","placeholder","Zone name...","id","zoneName","name","zoneName","formControlName","zoneName",1,"form-control"],[1,"modal-footer"],[3,"form","submitActionEvent"],[1,"invalid-feedback"],_,v,O]},template:function(n,o){if(1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"cd-alert-panel",7),e._uU(8,"The realm/zone group/zone created will be set as default and master. "),e.qZA(),e.TgZ(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.YNc(14,_n,2,0,"span",13),e.qZA()(),e.TgZ(15,"div",8)(16,"label",14),e.SDv(17,15),e.qZA(),e.TgZ(18,"div",11),e._UZ(19,"input",16),e.YNc(20,In,2,0,"span",13),e.qZA()(),e.TgZ(21,"div",8)(22,"label",17),e.SDv(23,18),e.qZA(),e.TgZ(24,"div",11),e._UZ(25,"input",19),e.YNc(26,vr,2,0,"span",13),e.qZA()()(),e.TgZ(27,"div",20)(28,"cd-form-button-panel",21),e.NdJ("submitActionEvent",function(){return o.submit()}),e.qZA()()(),e.BQk(),e.qZA()),2&n){const l=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.createMultisiteEntitiesForm),e.xp6(10),e.Q6J("ngIf",o.createMultisiteEntitiesForm.showError("realmName",l,"required")),e.xp6(6),e.Q6J("ngIf",o.createMultisiteEntitiesForm.showError("zonegroupName",l,"required")),e.xp6(6),e.Q6J("ngIf",o.createMultisiteEntitiesForm.showError("zoneName",l,"required")),e.xp6(2),e.Q6J("form",o.createMultisiteEntitiesForm)}},dependencies:[f.O5,al.z,Zu.G,rl.p,st.o,za.b,Va.P,Os.V,rn._Y,rn.Fj,rn.JJ,rn.JL,rn.sg,rn.u]}),t})();var Uo=s(80842),Ds=s(14745),Qi=s(62862),Ls=s(36848),ia=s(58039),oa=s(4416);function di(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-alert-panel",28),e.tHW(1,29),e.TgZ(2,"a",30),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.createMultisiteSetup())}),e.qZA(),e.N_p(),e.qZA()}}function Wr(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.hij(" ",n," ")}}function si(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,33),e.qZA())}function no(t,i){1&t&&(e.TgZ(0,"option",13),e.SDv(1,38),e.qZA()),2&t&&e.Q6J("ngValue",null)}function vo(t,i){1&t&&(e.TgZ(0,"option",13),e.SDv(1,39),e.qZA()),2&t&&e.Q6J("ngValue",null)}function fl(t,i){1&t&&(e.TgZ(0,"option",13),e.SDv(1,40),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Us(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.service_name),e.xp6(1),e.Oqu(n.service_name)}}function ll(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,41),e.qZA())}const Cl=function(){return["ingress"]},Ia=function(t){return{required:t}};function bf(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",8)(1,"label",34),e.SDv(2,35),e.qZA(),e.TgZ(3,"div",11)(4,"select",36),e.NdJ("change",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.prePopulateId())}),e.YNc(5,no,2,1,"option",37),e.YNc(6,vo,2,1,"option",37),e.YNc(7,fl,2,1,"option",37),e.YNc(8,Us,2,2,"option",15),e.qZA(),e.YNc(9,ll,2,0,"span",16),e.qZA()()}if(2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(7,Ia,e.DdM(6,Cl).includes(n.serviceForm.controls.service_type.value))),e.xp6(4),e.Q6J("ngIf",null===n.services),e.xp6(1),e.Q6J("ngIf",null!==n.services&&0===n.services.length),e.xp6(1),e.Q6J("ngIf",null!==n.services&&n.services.length>0),e.xp6(1),e.Q6J("ngForOf",n.services),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("backend_service",o,"required"))}}function Ip(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,46),e.qZA())}function Wp(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,47),e.qZA())}function Lh(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,48),e.qZA())}const dh=function(){return["mds","rgw","nfs","iscsi","ingress"]};function kh(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",42)(2,"span"),e.SDv(3,43),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,44),e.qZA()(),e.TgZ(6,"div",11),e._UZ(7,"input",45),e.YNc(8,Ip,2,0,"span",16),e.YNc(9,Wp,2,0,"span",16),e.YNc(10,Lh,2,0,"span",16),e.qZA()()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(5,Ia,e.DdM(4,dh).includes(n.serviceForm.controls.service_type.value))),e.xp6(7),e.Q6J("ngIf",n.serviceForm.showError("service_id",o,"required")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("service_id",o,"uniqueName")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("service_id",o,"mdsPattern"))}}function Fm(t,i){1&t&&(e.TgZ(0,"option",53),e.SDv(1,54),e.qZA())}function dg(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.name),e.xp6(1),e.hij(" ",n.name," ")}}function fg(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",49),e.SDv(2,50),e.qZA(),e.TgZ(3,"div",11)(4,"select",51),e.YNc(5,Fm,2,0,"option",52),e.YNc(6,dg,2,2,"option",15),e.qZA()()()),2&t){const n=e.oxw();e.xp6(4),e.uIk("disabled",!(0!==n.realmList.length&&!n.editing)||null),e.xp6(1),e.Q6J("ngIf",0===n.realmList.length),e.xp6(1),e.Q6J("ngForOf",n.realmList)}}function Lm(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.name),e.xp6(1),e.hij(" ",n.name," ")}}function pg(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",55),e.SDv(2,56),e.qZA(),e.TgZ(3,"div",11)(4,"select",57),e.YNc(5,Lm,2,2,"option",15),e.qZA()()()),2&t){const n=e.oxw();e.xp6(4),e.uIk("disabled",!(0!==n.zonegroupList.length&&!n.editing)||null),e.xp6(1),e.Q6J("ngForOf",n.zonegroupList)}}function Tf(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.name),e.xp6(1),e.hij(" ",n.name," ")}}function fh(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",58),e.SDv(2,59),e.qZA(),e.TgZ(3,"div",11)(4,"select",60),e.YNc(5,Tf,2,2,"option",15),e.qZA()()()),2&t){const n=e.oxw();e.xp6(4),e.uIk("disabled",!(0!==n.zoneList.length&&!n.editing)||null),e.xp6(1),e.Q6J("ngForOf",n.zoneList)}}function Qf(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",61),e.SDv(2,62),e.qZA(),e.TgZ(3,"div",11)(4,"select",63)(5,"option",64),e.SDv(6,65),e.qZA(),e.TgZ(7,"option",66),e.SDv(8,67),e.qZA()()()())}function sm(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,71),e.qZA())}function nd(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",8)(1,"label",68),e.SDv(2,69),e.qZA(),e.TgZ(3,"div",11)(4,"input",70),e.NdJ("focus",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.labelFocus.next(l.target.value))})("click",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.labelClick.next(l.target.value))}),e.qZA(),e.YNc(5,sm,2,0,"span",16),e.qZA()()}if(2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("ngbTypeahead",n.searchLabels),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("label",o,"required"))}}function Zd(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",72),e.SDv(2,73),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"cd-select-badges",74),e.qZA()()),2&t){const n=e.oxw();e.xp6(4),e.Q6J("data",n.serviceForm.controls.hosts.value)("options",n.hosts.options)("messages",n.hosts.messages)}}function hc(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,79),e.qZA())}function _g(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,80),e.qZA())}function hg(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",75)(2,"span"),e.SDv(3,76),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,77),e.qZA()(),e.TgZ(6,"div",11),e._UZ(7,"input",78),e.YNc(8,hc,2,0,"span",16),e.YNc(9,_g,2,0,"span",16),e.qZA()()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(8),e.Q6J("ngIf",n.serviceForm.showError("count",o,"min")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("count",o,"pattern"))}}function Iu(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,84),e.qZA())}function Es(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,85),e.qZA())}function gu(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,86),e.qZA())}function km(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",8)(2,"label",81),e.SDv(3,82),e.qZA(),e.TgZ(4,"div",11),e._UZ(5,"input",83),e.YNc(6,Iu,2,0,"span",16),e.YNc(7,Es,2,0,"span",16),e.YNc(8,gu,2,0,"span",16),e.qZA()(),e.BQk()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",n.serviceForm.showError("rgw_frontend_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("rgw_frontend_port",o,"min")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("rgw_frontend_port",o,"max"))}}function k_(t,i){1&t&&(e.TgZ(0,"option",13),e.SDv(1,90),e.qZA()),2&t&&e.Q6J("ngValue",null)}function Pd(t,i){1&t&&(e.TgZ(0,"option",13),e.SDv(1,91),e.qZA()),2&t&&e.Q6J("ngValue",null)}function hp(t,i){1&t&&(e.TgZ(0,"option",13),e.SDv(1,92),e.qZA()),2&t&&e.Q6J("ngValue",null)}function $m(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.pool_name),e.xp6(1),e.Oqu(n.pool_name)}}function Fp(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,93),e.qZA())}function Lg(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",87),e.SDv(2,88),e.qZA(),e.TgZ(3,"div",11)(4,"select",89),e.YNc(5,k_,2,1,"option",37),e.YNc(6,Pd,2,1,"option",37),e.YNc(7,hp,2,1,"option",37),e.YNc(8,$m,2,2,"option",15),e.qZA(),e.YNc(9,Fp,2,0,"span",16),e.qZA()()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(5),e.Q6J("ngIf",null===n.pools),e.xp6(1),e.Q6J("ngIf",n.pools&&0===n.pools.length),e.xp6(1),e.Q6J("ngIf",n.pools&&n.pools.length>0),e.xp6(1),e.Q6J("ngForOf",n.pools),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("pool",o,"required"))}}function S1(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,111),e.qZA())}function Hm(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,112),e.qZA())}function b1(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,113),e.qZA())}function mg(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,114),e.qZA())}function kg(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,115),e.qZA())}const Em=function(){return["iscsi"]};function $g(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",8)(2,"label",94)(3,"span"),e.SDv(4,95),e.qZA(),e.TgZ(5,"cd-helper")(6,"span"),e.SDv(7,96),e.qZA(),e._UZ(8,"br"),e.TgZ(9,"span"),e.tHW(10,97),e._UZ(11,"b"),e.N_p(),e.qZA()()(),e.TgZ(12,"div",11),e._UZ(13,"input",98),e.qZA()(),e.TgZ(14,"div",8)(15,"label",99),e.SDv(16,100),e.qZA(),e.TgZ(17,"div",11),e._UZ(18,"input",101),e.YNc(19,S1,2,0,"span",16),e.YNc(20,Hm,2,0,"span",16),e.YNc(21,b1,2,0,"span",16),e.qZA()(),e.TgZ(22,"div",8)(23,"label",102),e.SDv(24,103),e.qZA(),e.TgZ(25,"div",11),e._UZ(26,"input",104),e.YNc(27,mg,2,0,"span",16),e.qZA()(),e.TgZ(28,"div",8)(29,"label",105),e.SDv(30,106),e.qZA(),e.TgZ(31,"div",11)(32,"div",107),e._UZ(33,"input",108)(34,"button",109)(35,"cd-copy-2-clipboard-button",110),e.YNc(36,kg,2,0,"span",16),e.qZA()()(),e.BQk()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(19),e.Q6J("ngIf",n.serviceForm.showError("api_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("api_port",o,"min")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("api_port",o,"max")),e.xp6(2),e.Q6J("ngClass",e.VKq(8,Ia,e.DdM(7,Em).includes(n.serviceForm.controls.service_type.value))),e.xp6(4),e.Q6J("ngIf",n.serviceForm.showError("api_user",o,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(11,Ia,e.DdM(10,Em).includes(n.serviceForm.controls.service_type.value))),e.xp6(7),e.Q6J("ngIf",n.serviceForm.showError("api_password",o,"required"))}}function Il(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,128),e.qZA())}function gg(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,129),e.qZA())}function vg(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,130),e.qZA())}function Hg(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,131),e.qZA())}function T1(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,132),e.qZA())}function C1(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,133),e.qZA())}function am(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,134),e.qZA())}function $h(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,135),e.qZA())}function ph(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,136),e.qZA())}function lm(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",137)(2,"span"),e.SDv(3,138),e.qZA(),e.TgZ(4,"cd-helper")(5,"span"),e.SDv(6,139),e.qZA()()(),e.TgZ(7,"div",11),e._UZ(8,"input",140),e.qZA()())}function yg(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",8)(2,"label",116)(3,"span"),e.SDv(4,117),e.qZA(),e.TgZ(5,"cd-helper")(6,"span"),e.SDv(7,118),e.qZA()()(),e.TgZ(8,"div",11),e._UZ(9,"input",119),e.YNc(10,Il,2,0,"span",16),e.qZA()(),e.TgZ(11,"div",8)(12,"label",120)(13,"span"),e.SDv(14,121),e.qZA(),e.TgZ(15,"cd-helper")(16,"span"),e.SDv(17,122),e.qZA()()(),e.TgZ(18,"div",11),e._UZ(19,"input",123),e.YNc(20,gg,2,0,"span",16),e.YNc(21,vg,2,0,"span",16),e.YNc(22,Hg,2,0,"span",16),e.YNc(23,T1,2,0,"span",16),e.qZA()(),e.TgZ(24,"div",8)(25,"label",124)(26,"span"),e.SDv(27,125),e.qZA(),e.TgZ(28,"cd-helper")(29,"span"),e.SDv(30,126),e.qZA()()(),e.TgZ(31,"div",11),e._UZ(32,"input",127),e.YNc(33,C1,2,0,"span",16),e.YNc(34,am,2,0,"span",16),e.YNc(35,$h,2,0,"span",16),e.YNc(36,ph,2,0,"span",16),e.qZA()(),e.YNc(37,lm,9,0,"div",17),e.BQk()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(2),e.Q6J("ngClass",e.VKq(14,Ia,e.DdM(13,Cl).includes(n.serviceForm.controls.service_type.value))),e.xp6(8),e.Q6J("ngIf",n.serviceForm.showError("virtual_ip",o,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(17,Ia,e.DdM(16,Cl).includes(n.serviceForm.controls.service_type.value))),e.xp6(8),e.Q6J("ngIf",n.serviceForm.showError("frontend_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("frontend_port",o,"min")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("frontend_port",o,"max")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("frontend_port",o,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(20,Ia,e.DdM(19,Cl).includes(n.serviceForm.controls.service_type.value))),e.xp6(8),e.Q6J("ngIf",n.serviceForm.showError("monitor_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("monitor_port",o,"min")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("monitor_port",o,"max")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("monitor_port",o,"required")),e.xp6(1),e.Q6J("ngIf",!n.serviceForm.controls.unmanaged.value)}}function M1(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.Oqu(n)}}function Eg(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,150),e.qZA())}function Sg(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,151),e.qZA())}function _h(t,i){1&t&&(e.TgZ(0,"span",32),e.tHW(1,152),e._UZ(2,"strong"),e.N_p(),e.qZA())}function Ov(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,157),e.qZA())}function bg(t,i){1&t&&(e.TgZ(0,"span",32),e.tHW(1,158),e._UZ(2,"strong"),e.N_p(),e.qZA())}function Um(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",153)(2,"span"),e.SDv(3,154),e.qZA(),e.TgZ(4,"cd-helper")(5,"span"),e.SDv(6,155),e.qZA()()(),e.TgZ(7,"div",11),e._UZ(8,"input",156),e.YNc(9,Ov,2,0,"span",16),e.YNc(10,bg,3,0,"span",16),e.qZA()()),2&t){const n=e.oxw(2),o=e.MAs(7);e.xp6(9),e.Q6J("ngIf",n.serviceForm.showError("engine_id",o,"required")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("engine_id",o,"snmpEngineIdPattern"))}}function O1(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.hij(" ",n," ")}}function Av(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,163),e.qZA())}const L=function(){return["SHA","MD5"]};function q(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",159),e.SDv(2,160),e.qZA(),e.TgZ(3,"div",11)(4,"select",161)(5,"option",13),e.SDv(6,162),e.qZA(),e.YNc(7,O1,2,2,"option",15),e.qZA(),e.YNc(8,Av,2,0,"span",16),e.qZA()()),2&t){const n=e.oxw(2),o=e.MAs(7);e.xp6(5),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(3,L)),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("auth_protocol",o,"required"))}}function j(t,i){if(1&t&&(e.TgZ(0,"option",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.hij(" ",n," ")}}const Ae=function(){return["DES","AES"]};function St(t,i){1&t&&(e.TgZ(0,"div",8)(1,"label",164),e.SDv(2,165),e.qZA(),e.TgZ(3,"div",11)(4,"select",166)(5,"option",13),e.SDv(6,167),e.qZA(),e.YNc(7,j,2,2,"option",15),e.qZA()()()),2&t&&(e.xp6(5),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(2,Ae)))}function Kt(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,171),e.qZA())}function ur(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",168)(2,"span"),e.SDv(3,169),e.qZA()(),e.TgZ(4,"div",11),e._UZ(5,"input",170),e.YNc(6,Kt,2,0,"span",16),e.qZA()()),2&t){const n=e.oxw(2),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",n.serviceForm.showError("snmp_community",o,"required"))}}function Br(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,175),e.qZA())}function Ii(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",172)(2,"span"),e.SDv(3,173),e.qZA()(),e.TgZ(4,"div",11),e._UZ(5,"input",174),e.YNc(6,Br,2,0,"span",16),e.qZA()()),2&t){const n=e.oxw(2),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",n.serviceForm.showError("snmp_v3_auth_username",o,"required"))}}function ms(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,179),e.qZA())}function vs(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",176)(2,"span"),e.SDv(3,177),e.qZA()(),e.TgZ(4,"div",11),e._UZ(5,"input",178),e.YNc(6,ms,2,0,"span",16),e.qZA()()),2&t){const n=e.oxw(2),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",n.serviceForm.showError("snmp_v3_auth_password",o,"required"))}}function Ks(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,183),e.qZA())}function Vl(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",180)(2,"span"),e.SDv(3,181),e.qZA()(),e.TgZ(4,"div",11),e._UZ(5,"input",182),e.YNc(6,Ks,2,0,"span",16),e.qZA()()),2&t){const n=e.oxw(2),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",n.serviceForm.showError("snmp_v3_priv_password",o,"required"))}}const Xu=function(){return["V2c","V3"]};function Fu(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"div",8)(2,"label",141),e.SDv(3,142),e.qZA(),e.TgZ(4,"div",11)(5,"select",143),e.NdJ("change",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.clearValidations())}),e.TgZ(6,"option",13),e.SDv(7,144),e.qZA(),e.YNc(8,M1,2,2,"option",15),e.qZA(),e.YNc(9,Eg,2,0,"span",16),e.qZA()(),e.TgZ(10,"div",8)(11,"label",145)(12,"span"),e.SDv(13,146),e.qZA(),e.TgZ(14,"cd-helper")(15,"span"),e.SDv(16,147),e.qZA()()(),e.TgZ(17,"div",11),e._UZ(18,"input",148),e.YNc(19,Sg,2,0,"span",16),e.YNc(20,_h,3,0,"span",16),e.qZA()(),e.YNc(21,Um,11,2,"div",17),e.YNc(22,q,9,4,"div",17),e.YNc(23,St,8,3,"div",17),e.TgZ(24,"fieldset")(25,"legend"),e.SDv(26,149),e.qZA(),e.YNc(27,ur,7,1,"div",17),e.YNc(28,Ii,7,1,"div",17),e.YNc(29,vs,7,1,"div",17),e.YNc(30,Vl,7,1,"div",17),e.qZA(),e.BQk()}if(2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(12,Xu)),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("snmp_version",o,"required")),e.xp6(10),e.Q6J("ngIf",n.serviceForm.showError("snmp_destination",o,"required")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("snmp_destination",o,"snmpDestinationPattern")),e.xp6(1),e.Q6J("ngIf","V3"===n.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===n.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===n.serviceForm.controls.snmp_version.value),e.xp6(4),e.Q6J("ngIf","V2c"===n.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===n.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===n.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===n.serviceForm.controls.snmp_version.value&&null!=n.serviceForm.controls.privacy_protocol.value)}}function Oc(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,192),e.qZA())}function af(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,193),e.qZA())}function lf(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",8)(1,"label",187)(2,"span"),e.SDv(3,188),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,189),e.qZA()(),e.TgZ(6,"div",11)(7,"textarea",190),e._uU(8,"              "),e.qZA(),e.TgZ(9,"input",191),e.NdJ("change",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.fileUpload(l.target.files,"ssl_cert"))}),e.qZA(),e.YNc(10,Oc,2,0,"span",16),e.YNc(11,af,2,0,"span",16),e.qZA()()}if(2&t){const n=e.oxw(2),o=e.MAs(7);e.xp6(10),e.Q6J("ngIf",n.serviceForm.showError("ssl_cert",o,"required")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("ssl_cert",o,"pattern"))}}function m_(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,198),e.qZA())}function Hh(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,199),e.qZA())}function Uh(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",8)(1,"label",194)(2,"span"),e.SDv(3,195),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,196),e.qZA()(),e.TgZ(6,"div",11)(7,"textarea",197),e._uU(8,"              "),e.qZA(),e.TgZ(9,"input",191),e.NdJ("change",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.fileUpload(l.target.files,"ssl_key"))}),e.qZA(),e.YNc(10,m_,2,0,"span",16),e.YNc(11,Hh,2,0,"span",16),e.qZA()()}if(2&t){const n=e.oxw(2),o=e.MAs(7);e.xp6(10),e.Q6J("ngIf",n.serviceForm.showError("ssl_key",o,"required")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("ssl_key",o,"pattern"))}}const Wd=function(){return["rgw","ingress"]};function Nd(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",8)(2,"div",18)(3,"div",19),e._UZ(4,"input",184),e.TgZ(5,"label",185),e.SDv(6,186),e.qZA()()()(),e.YNc(7,lf,12,2,"div",17),e.YNc(8,Uh,12,2,"div",17),e.BQk()),2&t){const n=e.oxw();e.xp6(7),e.Q6J("ngIf",n.serviceForm.controls.ssl.value),e.xp6(1),e.Q6J("ngIf",n.serviceForm.controls.ssl.value&&!e.DdM(2,Wd).includes(n.serviceForm.controls.service_type.value))}}function mp(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,210),e.qZA())}function wc(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,211),e.qZA())}function pd(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,212),e.qZA())}function Sm(t,i){1&t&&(e.TgZ(0,"span",32),e.SDv(1,213),e.qZA())}function Dv(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",8)(2,"label",200)(3,"span"),e.SDv(4,201),e.qZA(),e.TgZ(5,"cd-helper")(6,"span"),e.SDv(7,202),e.qZA()()(),e.TgZ(8,"div",11),e._UZ(9,"input",203),e.YNc(10,mp,2,0,"span",16),e.YNc(11,wc,2,0,"span",16),e.YNc(12,pd,2,0,"span",16),e.YNc(13,Sm,2,0,"span",16),e.qZA()(),e.TgZ(14,"div",8)(15,"label",204),e.tHW(16,205),e._UZ(17,"span")(18,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(19,"div",11)(20,"div",107),e._UZ(21,"input",206),e.TgZ(22,"span",207),e._UZ(23,"button",208)(24,"cd-copy-2-clipboard-button",209),e.qZA()()()(),e.BQk()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(10),e.Q6J("ngIf",n.serviceForm.showError("grafana_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("grafana_port",o,"min")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("grafana_port",o,"max")),e.xp6(1),e.Q6J("ngIf",n.serviceForm.showError("grafana_port",o,"required")),e.xp6(8),e.uIk("disabled",!!n.editing||null)}}const K0=function(){return["rgw","iscsi","ingress"]};let Ug=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke){super(),this.actionLabels=n,this.cephServiceService=o,this.formBuilder=l,this.hostService=_,this.poolService=v,this.router=O,this.taskWrapperService=P,this.timerService=G,this.timerServiceVariable=K,this.rgwRealmService=oe,this.rgwZonegroupService=ue,this.rgwZoneService=pe,this.rgwMultisiteService=ye,this.route=Ue,this.activeModal=xe,this.modalService=ke,this.sub=new bd.w,this.MDS_SVC_ID_PATTERN=/^[a-zA-Z_.-][a-zA-Z0-9_.-]*$/,this.SNMP_DESTINATION_PATTERN=/^[^\:]+:[0-9]/,this.SNMP_ENGINE_ID_PATTERN=/^[0-9A-Fa-f]{10,64}/g,this.INGRESS_SUPPORTED_SERVICE_TYPES=["rgw","nfs"],this.hiddenServices=[],this.editing=!1,this.serviceTypes=[],this.serviceIds=[],this.labelClick=new Di.xQ,this.labelFocus=new Di.xQ,this.services=[],this.multisiteInfo=[],this.defaultRealmId="",this.defaultZonegroupId="",this.defaultZoneId="",this.realmList=[],this.zonegroupList=[],this.zoneList=[],this.showRealmCreationForm=!1,this.searchLabels=we=>(0,Pi.T)(we.pipe((0,cs.b)(200),(0,Yo.x)()),this.labelFocus,this.labelClick.pipe((0,y.h)(()=>!this.typeahead.isPopupOpen()))).pipe((0,Ec.U)(Z=>this.labels.filter(Ft=>Ft.toLowerCase().indexOf(Z.toLowerCase())>-1).slice(0,10))),this.resource="service",this.hosts={options:[],messages:new Rd.a({empty:"There are no hosts.",filter:"Filter hosts"})},this.createForm()}createForm(){this.serviceForm=this.formBuilder.group({service_type:[null,[rn.kI.required]],service_id:[null,[De.h.composeIf({service_type:"mds"},[rn.kI.required,De.h.custom("mdsPattern",n=>!Xe().isEmpty(n)&&!this.MDS_SVC_ID_PATTERN.test(n))]),De.h.requiredIf({service_type:"nfs"}),De.h.requiredIf({service_type:"iscsi"}),De.h.requiredIf({service_type:"ingress"}),De.h.composeIf({service_type:"rgw"},[rn.kI.required]),De.h.custom("uniqueName",n=>this.serviceIds&&this.serviceIds.includes(n))]],placement:["hosts"],label:[null,[De.h.requiredIf({placement:"label",unmanaged:!1})]],hosts:[[]],count:[null,[De.h.number(!1)]],unmanaged:[!1],pool:[null,[De.h.requiredIf({service_type:"iscsi"})]],rgw_frontend_port:[null,[De.h.number(!1)]],realm_name:[null],zonegroup_name:[null],zone_name:[null],trusted_ip_list:[null],api_port:[null,[De.h.number(!1)]],api_user:[null,[De.h.requiredIf({service_type:"iscsi",unmanaged:!1})]],api_password:[null,[De.h.requiredIf({service_type:"iscsi",unmanaged:!1})]],backend_service:[null,[De.h.requiredIf({service_type:"ingress"})]],virtual_ip:[null,[De.h.requiredIf({service_type:"ingress"})]],frontend_port:[null,[De.h.number(!1),De.h.requiredIf({service_type:"ingress"})]],monitor_port:[null,[De.h.number(!1),De.h.requiredIf({service_type:"ingress"})]],virtual_interface_networks:[null],ssl:[!1],ssl_cert:["",[De.h.composeIf({service_type:"rgw",unmanaged:!1,ssl:!0},[rn.kI.required,De.h.pemCert()]),De.h.composeIf({service_type:"iscsi",unmanaged:!1,ssl:!0},[rn.kI.required,De.h.sslCert()]),De.h.composeIf({service_type:"ingress",unmanaged:!1,ssl:!0},[rn.kI.required,De.h.pemCert()])]],ssl_key:["",[De.h.composeIf({service_type:"iscsi",unmanaged:!1,ssl:!0},[rn.kI.required,De.h.sslPrivKey()])]],snmp_version:[null,[De.h.requiredIf({service_type:"snmp-gateway"})]],snmp_destination:[null,{validators:[De.h.requiredIf({service_type:"snmp-gateway"}),De.h.custom("snmpDestinationPattern",n=>!Xe().isEmpty(n)&&!this.SNMP_DESTINATION_PATTERN.test(n))]}],engine_id:[null,[De.h.requiredIf({service_type:"snmp-gateway"}),De.h.custom("snmpEngineIdPattern",n=>!Xe().isEmpty(n)&&!this.SNMP_ENGINE_ID_PATTERN.test(n))]],auth_protocol:["SHA",[De.h.requiredIf({service_type:"snmp-gateway"})]],privacy_protocol:[null],snmp_community:[null,[De.h.requiredIf({snmp_version:"V2c"})]],snmp_v3_auth_username:[null,[De.h.requiredIf({service_type:"snmp-gateway"})]],snmp_v3_auth_password:[null,[De.h.requiredIf({service_type:"snmp-gateway"})]],snmp_v3_priv_password:[null,[De.h.requiredIf({privacy_protocol:{op:"!empty"}})]],grafana_port:[null,[De.h.number(!1)]],grafana_admin_password:[null]})}ngOnInit(){this.action=this.actionLabels.CREATE,this.router.url.includes("services/(modal:create")?this.pageURL="services":this.router.url.includes("services/(modal:edit")&&(this.editing=!0,this.pageURL="services",this.route.params.subscribe(o=>{this.serviceName=o.name,this.serviceType=o.type})),this.cephServiceService.list(new m.LE({fromObject:{limit:-1,offset:0}})).observable.subscribe(o=>{this.serviceList=o,this.services=o.filter(l=>this.INGRESS_SUPPORTED_SERVICE_TYPES.includes(l.service_type))}),this.cephServiceService.getKnownTypes().subscribe(o=>{this.hiddenServices.push("osd","container"),this.serviceTypes=Xe().difference(o,this.hiddenServices).sort()});const n=new Sc.E(()=>{});this.hostService.list(n.toParams(),"false").subscribe(o=>{const l=[];Xe().forEach(o,_=>{if(Xe().get(_,"sources.orchestrator",!1)){const v=new Ds.$(!1,Xe().get(_,"hostname"),"");l.push(v)}}),this.hosts.options=[...l]}),this.hostService.getLabels().subscribe(o=>{this.labels=o}),this.poolService.getList().subscribe(o=>{this.pools=o}),this.editing&&(this.action=this.actionLabels.EDIT,this.disableForEditing(this.serviceType),this.cephServiceService.list(new m.LE({fromObject:{limit:-1,offset:0}}),this.serviceName).observable.subscribe(o=>{if(["service_type","service_id","unmanaged"].forEach(_=>{this.serviceForm.get(_).setValue(o[0][_])}),!o[0].unmanaged){const _=Object.keys(o[0].placement)[0];let v;v=["hosts","label"].indexOf(_)>=0?_:"hosts",this.serviceForm.get("placement").setValue(v),this.serviceForm.get("count").setValue(o[0].placement.count),o[0]?.placement[v]&&this.serviceForm.get(v).setValue(o[0]?.placement[v])}switch(this.serviceType){case"iscsi":["pool","api_password","api_user","trusted_ip_list","api_port"].forEach(P=>{this.serviceForm.get(P).setValue(o[0].spec[P])}),this.serviceForm.get("ssl").setValue(o[0].spec?.api_secure),o[0].spec?.api_secure&&(this.serviceForm.get("ssl_cert").setValue(o[0].spec?.ssl_cert),this.serviceForm.get("ssl_key").setValue(o[0].spec?.ssl_key));break;case"rgw":this.serviceForm.get("rgw_frontend_port").setValue(o[0].spec?.rgw_frontend_port),this.getServiceIds("rgw",o[0].spec?.rgw_realm,o[0].spec?.rgw_zonegroup,o[0].spec?.rgw_zone),this.serviceForm.get("ssl").setValue(o[0].spec?.ssl),o[0].spec?.ssl&&this.serviceForm.get("ssl_cert").setValue(o[0].spec?.rgw_frontend_ssl_certificate);break;case"ingress":["backend_service","virtual_ip","frontend_port","monitor_port","virtual_interface_networks","ssl"].forEach(P=>{this.serviceForm.get(P).setValue(o[0].spec[P])}),o[0].spec?.ssl&&(this.serviceForm.get("ssl_cert").setValue(o[0].spec?.ssl_cert),this.serviceForm.get("ssl_key").setValue(o[0].spec?.ssl_key));break;case"snmp-gateway":["snmp_version","snmp_destination"].forEach(P=>{this.serviceForm.get(P).setValue(o[0].spec[P])}),"V3"===this.serviceForm.getValue("snmp_version")?["engine_id","auth_protocol","privacy_protocol","snmp_v3_auth_username","snmp_v3_auth_password","snmp_v3_priv_password"].forEach(G=>{null!==G&&("snmp_v3_auth_username"===G||"snmp_v3_auth_password"===G||"snmp_v3_priv_password"===G?this.serviceForm.get(G).setValue(o[0].spec.credentials[G]):this.serviceForm.get(G).setValue(o[0].spec[G]))}):this.serviceForm.get("snmp_community").setValue(o[0].spec.credentials.snmp_community);break;case"grafana":this.serviceForm.get("grafana_port").setValue(o[0].spec.port),this.serviceForm.get("grafana_admin_password").setValue(o[0].spec.initial_admin_password)}}))}getDefaultsEntities(n,o,l){const _=this.realmList.find(oe=>oe.id===n),v=this.zonegroupList.find(oe=>oe.id===o),O=this.zoneList.find(oe=>oe.id===l),P=void 0!==_?_.name:null,G=void 0!==v?v.name:"default",K=void 0!==O?O.name:"default";if("default"===G&&!this.zonegroupNames.includes(G)){const oe=new be.iG;oe.name="default",this.zonegroupList.push(oe)}if("default"===K&&!this.zoneNames.includes(K)){const oe=new be.jb;oe.name="default",this.zoneList.push(oe)}return{defaultRealmName:P,defaultZonegroupName:G,defaultZoneName:K}}getServiceIds(n,o,l,_){if(this.serviceIds=this.serviceList?.filter(v=>v.service_type===n).map(v=>v.service_id),"rgw"===n){const v=[this.rgwRealmService.getAllRealmsInfo(),this.rgwZonegroupService.getAllZonegroupsInfo(),this.rgwZoneService.getAllZonesInfo()];this.sub=(0,Za.D)(v).subscribe(O=>{if(this.multisiteInfo=O,this.realmList=void 0!==this.multisiteInfo[0]&&this.multisiteInfo[0].hasOwnProperty("realms")?this.multisiteInfo[0].realms:[],this.zonegroupList=void 0!==this.multisiteInfo[1]&&this.multisiteInfo[1].hasOwnProperty("zonegroups")?this.multisiteInfo[1].zonegroups:[],this.zoneList=void 0!==this.multisiteInfo[2]&&this.multisiteInfo[2].hasOwnProperty("zones")?this.multisiteInfo[2].zones:[],this.realmNames=this.realmList.map(P=>P.name),this.zonegroupNames=this.zonegroupList.map(P=>P.name),this.zoneNames=this.zoneList.map(P=>P.name),this.defaultRealmId=O[0].default_realm,this.defaultZonegroupId=O[1].default_zonegroup,this.defaultZoneId=O[2].default_zone,this.defaultsInfo=this.getDefaultsEntities(this.defaultRealmId,this.defaultZonegroupId,this.defaultZoneId),this.editing){if(o&&!this.realmNames.includes(o)){const P=new be.L6;P.name=o,this.realmList.push(P)}if(l&&!this.zonegroupNames.includes(l)){const P=new be.iG;P.name=l,this.zonegroupList.push(P)}if(_&&!this.zoneNames.includes(_)){const P=new be.jb;P.name=_,this.zoneList.push(P)}void 0===l&&void 0===_&&(l="default",_="default"),this.serviceForm.get("realm_name").setValue(o),this.serviceForm.get("zonegroup_name").setValue(l),this.serviceForm.get("zone_name").setValue(_)}else this.serviceForm.get("realm_name").setValue(this.defaultsInfo.defaultRealmName),this.serviceForm.get("zonegroup_name").setValue(this.defaultsInfo.defaultZonegroupName),this.serviceForm.get("zone_name").setValue(this.defaultsInfo.defaultZoneName);this.showRealmCreationForm=0===this.realmList.length},O=>{const P=new be.jb;P.name="default";const G=new be.iG;G.name="default",this.zoneList.push(P),this.zonegroupList.push(G)})}}disableForEditing(n){"ingress"===(["service_type","service_id"].forEach(l=>{this.serviceForm.get(l).disable()}),n)&&this.serviceForm.get("backend_service").disable()}fileUpload(n,o){const l=n[0],_=new FileReader;_.addEventListener("load",v=>{const O=this.serviceForm.get(o);O.setValue(v.target.result),O.markAsDirty(),O.markAsTouched(),O.updateValueAndValidity()}),_.readAsText(l,"utf8")}prePopulateId(){const n=this.serviceForm.get("service_id"),o=this.serviceForm.getValue("backend_service");n.reset({value:o,disabled:!0})}onSubmit(){const n=this,o=this.serviceForm.getRawValue(),l=o.service_type;let _=`service/${yr.MQ.CREATE}`;this.editing&&(_=`service/${yr.MQ.EDIT}`);const v={service_type:l,placement:{},unmanaged:o.unmanaged};let O;"rgw"===l&&(v.rgw_realm=o.realm_name?o.realm_name:null,v.rgw_zonegroup="default"!==o.zonegroup_name?o.zonegroup_name:null,v.rgw_zone="default"!==o.zone_name?o.zone_name:null),O=o.service_id;const P=O;let G=l;switch(Xe().isString(P)&&!Xe().isEmpty(P)&&(G=`${l}.${P}`,v.service_id=P),l){case"ingress":v.backend_service=o.backend_service,v.service_id=o.backend_service,Xe().isNumber(o.frontend_port)&&o.frontend_port>0&&(v.frontend_port=o.frontend_port),Xe().isString(o.virtual_ip)&&!Xe().isEmpty(o.virtual_ip)&&(v.virtual_ip=o.virtual_ip.trim()),Xe().isNumber(o.monitor_port)&&o.monitor_port>0&&(v.monitor_port=o.monitor_port);break;case"iscsi":v.pool=o.pool;break;case"snmp-gateway":v.credentials={},v.snmp_version=o.snmp_version,v.snmp_destination=o.snmp_destination,"V3"===o.snmp_version?(v.engine_id=o.engine_id,v.auth_protocol=o.auth_protocol,v.credentials.snmp_v3_auth_username=o.snmp_v3_auth_username,v.credentials.snmp_v3_auth_password=o.snmp_v3_auth_password,null!==o.privacy_protocol&&(v.privacy_protocol=o.privacy_protocol,v.credentials.snmp_v3_priv_password=o.snmp_v3_priv_password)):v.credentials.snmp_community=o.snmp_community}if(!o.unmanaged){switch(o.placement){case"hosts":o.hosts.length>0&&(v.placement.hosts=o.hosts);break;case"label":v.placement.label=o.label}switch(Xe().isNumber(o.count)&&o.count>0&&(v.placement.count=o.count),l){case"rgw":Xe().isNumber(o.rgw_frontend_port)&&o.rgw_frontend_port>0&&(v.rgw_frontend_port=o.rgw_frontend_port),v.ssl=o.ssl,o.ssl&&(v.rgw_frontend_ssl_certificate=o.ssl_cert?.trim());break;case"iscsi":Xe().isString(o.trusted_ip_list)&&!Xe().isEmpty(o.trusted_ip_list)&&(v.trusted_ip_list=o.trusted_ip_list.trim()),Xe().isNumber(o.api_port)&&o.api_port>0&&(v.api_port=o.api_port),v.api_user=o.api_user,v.api_password=o.api_password,v.api_secure=o.ssl,o.ssl&&(v.ssl_cert=o.ssl_cert?.trim(),v.ssl_key=o.ssl_key?.trim());break;case"ingress":v.ssl=o.ssl,o.ssl&&(v.ssl_cert=o.ssl_cert?.trim(),v.ssl_key=o.ssl_key?.trim()),v.virtual_interface_networks=o.virtual_interface_networks;break;case"grafana":v.port=o.grafana_port,v.initial_admin_password=o.grafana_admin_password}}this.taskWrapperService.wrapTaskAroundCall({task:new Fr.R(_,{service_name:G}),call:this.editing?this.cephServiceService.update(v):this.cephServiceService.create(v)}).subscribe({error(){n.serviceForm.setErrors({cdSubmitButton:!0})},complete:()=>{"services"===this.pageURL?this.router.navigate([this.pageURL,{outlets:{modal:null}}]):this.activeModal.close()}})}clearValidations(){const n=this.serviceForm.getValue("snmp_version"),o=this.serviceForm.getValue("privacy_protocol");"V3"===n?this.serviceForm.get("snmp_community").clearValidators():(this.serviceForm.get("engine_id").clearValidators(),this.serviceForm.get("auth_protocol").clearValidators(),this.serviceForm.get("privacy_protocol").clearValidators(),this.serviceForm.get("snmp_v3_auth_username").clearValidators(),this.serviceForm.get("snmp_v3_auth_password").clearValidators()),null===o&&this.serviceForm.get("snmp_v3_priv_password").clearValidators()}createMultisiteSetup(){this.bsModalRef=this.modalService.show(Si,{size:"lg"}),this.bsModalRef.componentInstance.submitAction.subscribe(()=>{this.getServiceIds("rgw")})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(rf),e.Y36(Qi.O),e.Y36(Wa.x),e.Y36(Uo.q),e.Y36(Ee.F0),e.Y36(Gr.P),e.Y36(Ls.f),e.Y36(yr.eu),e.Y36(Y.y),e.Y36(xt.K),e.Y36(Ke.g),e.Y36(x.o),e.Y36(Ee.gz),e.Y36(yi.Kz),e.Y36(ca.Z))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-service-form"]],viewQuery:function(n,o){if(1&n&&e.Gf(yi.dR,5),2&n){let l;e.iGM(l=e.CRH())&&(o.typeahead=l.first)}},inputs:{hiddenServices:"hiddenServices",editing:"editing",serviceName:"serviceName",serviceType:"serviceType"},features:[e.qOj],decls:48,vars:36,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke,we,Z,Ft,Dt,Yt,ln,$n,nn,Jn,zn,Zr,$r,ui,gi,Un,lr,ar,Cr,Wn,ai,ho,Yi,lo,pi,Kn,Nn,_i,Zi,So,us,Zo,pa,va,qi,xo,$o,rt,kt,Lt,cr,Yr,li,eo,_a,ps,Fl,Gl,Ou,Pc,np,ou,yd,kp,Y_,S_,j_,Au,hd,n_,co,xr,ki,Co,os,Ss,Rs,ks,Ua,Dl,uc,Sr,oo,Ns,fo,ea,xs,Bu,Zl,Hl,hl,ol,cc,Gu,cf,Ep,su,Mf,z_,Sp,Eh,b_,wm;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Type",o="-- Select a service type --",l="Unmanaged",_="If set to true, the orchestrator will not start nor stop any daemon associated with this service. Placement and all other properties will be ignored.",v="" + "\ufffd#2\ufffd" + " Click here" + "\ufffd/#2\ufffd" + " to create a new Realm/Zone Group/Zone ",O="This field is required.",P="Backend Service",G="Loading...",K="-- No service available --",oe="-- Select an existing service --",ue="This field is required.",pe="Id",ye="Used in the service name which is <service_type.service_id>",Ue="This field is required.",xe="This service id is already in use.",ke="MDS service id must start with a letter and contain alphanumeric characters or '.', '-', and '_'",we="Realm",Z="-- No realm available --",Ft="Zone Group",Dt="Zone",Yt="Placement",ln="Hosts",$n="Label",nn="Label",Jn="This field is required.",zn="Hosts",Zr="Count",$r="Only that number of daemons will be created.",ui="The value must be at least 1.",gi="The entered value needs to be a number.",Un="Port",lr="The entered value needs to be a number.",ar="The value must be at least 1.",Cr="The value cannot exceed 65535.",Wn="Pool",ai="Loading...",ho="-- No pools available --",Yi="-- Select a pool --",lo="This field is required.",pi="Trusted IPs",Kn="Comma separated list of IP addresses.",Nn="Please add the " + "\ufffd#11\ufffd" + "Ceph Manager" + "\ufffd/#11\ufffd" + " IP addresses here, otherwise the iSCSI gateways can't be reached.",_i="Port",Zi="User",So="Password",us="The entered value needs to be a number.",Zo="The value must be at least 1.",pa="The value cannot exceed 65535.",va="This field is required.",qi="This field is required.",xo="Virtual IP",$o="The virtual IP address and subnet (in CIDR notation) where the ingress service will be available.",rt="Frontend Port",kt="The port used to access the ingress service.",Lt="Monitor Port",cr="The port used by haproxy for load balancer status.",Yr="This field is required.",li="The entered value needs to be a number.",eo="The value must be at least 1.",_a="The value cannot exceed 65535.",ps="This field is required.",Fl="The entered value needs to be a number.",Gl="The value must be at least 1.",Ou="The value cannot exceed 65535.",Pc="This field is required.",np="CIDR Networks",ou="A list of networks to identify which network interface to use for the virtual IP address.",yd="Version",kp="-- Select SNMP version --",Y_="Destination",S_="Must be of the format hostname:port.",j_="Credentials",Au="This field is required.",hd="This field is required.",n_="The value does not match the pattern: " + "\ufffd#2\ufffd" + "hostname:port" + "\ufffd/#2\ufffd" + "",co="Engine Id",xr="Unique identifier for the device (in hex).",ki="This field is required.",Co="The value does not match the pattern: " + "\ufffd#2\ufffd" + "Must be in hexadecimal and length must be multiple of 2 with min value = 10 amd max value = 64." + "\ufffd/#2\ufffd" + "",os="Auth Protocol",Ss="-- Select auth protocol --",Rs="This field is required.",ks="Privacy Protocol",Ua="-- Select privacy protocol --",Dl="SNMP Community",uc="This field is required.",Sr="Username",oo="This field is required.",Ns="Password",fo="This field is required.",ea="Encryption",xs="This field is required.",Bu="SSL",Zl="Certificate",Hl="The SSL certificate in PEM format.",hl="This field is required.",ol="Invalid SSL certificate.",cc="Private key",Gu="The SSL private key in PEM format.",cf="This field is required.",Ep="Invalid SSL private key.",su="Grafana Port",Mf="The default port used by grafana.",z_="" + "\ufffd#17\ufffd" + "Grafana Password" + "\ufffd/#17\ufffd" + "" + "\ufffd#18\ufffd" + "The password of the default Grafana Admin. Set once on first-run." + "\ufffd/#18\ufffd" + "",Sp="The entered value needs to be a number.",Eh="The value must be at least 1.",b_="The value cannot exceed 65535.",wm="This field is required.",[[3,"pageURL","modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],["type","info","spacingClass","mb-3",4,"ngIf"],[1,"form-group","row"],["for","service_type",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],["id","service_type","name","service_type","formControlName","service_type",1,"form-select",3,"change"],[3,"ngValue"],o,[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","unmanaged","type","checkbox","formControlName","unmanaged",1,"custom-control-input"],["for","unmanaged",1,"custom-control-label"],l,_,[4,"ngIf"],[1,"modal-footer"],[1,"text-right"],[3,"form","submitText","submitActionEvent"],["type","info","spacingClass","mb-3"],v,[1,"text-decoration-underline",3,"click"],[3,"value"],[1,"invalid-feedback"],O,["for","backend_service",1,"cd-col-form-label",3,"ngClass"],P,["id","backend_service","name","backend_service","formControlName","backend_service",1,"form-select",3,"change"],[3,"ngValue",4,"ngIf"],G,K,oe,ue,["for","service_id",1,"cd-col-form-label",3,"ngClass"],pe,ye,["id","service_id","type","text","formControlName","service_id",1,"form-control"],Ue,xe,ke,["for","realm_name",1,"cd-col-form-label"],we,["id","realm_name","formControlName","realm_name","name","realm_name",1,"form-select"],["selected","",4,"ngIf"],["selected",""],Z,["for","zonegroup_name",1,"cd-col-form-label"],Ft,["id","zonegroup_name","formControlName","zonegroup_name","name","zonegroup_name",1,"form-select"],["for","zone_name",1,"cd-col-form-label"],Dt,["id","zone_name","formControlName","zone_name","name","zone_name",1,"form-select"],["for","placement",1,"cd-col-form-label"],Yt,["id","placement","formControlName","placement",1,"form-select"],["value","hosts"],ln,["value","label"],$n,["for","label",1,"cd-col-form-label"],nn,["id","label","type","text","formControlName","label",1,"form-control",3,"ngbTypeahead","focus","click"],Jn,["for","hosts",1,"cd-col-form-label"],zn,["id","hosts",3,"data","options","messages"],["for","count",1,"cd-col-form-label"],Zr,$r,["id","count","type","number","formControlName","count","min","1",1,"form-control"],ui,gi,["for","rgw_frontend_port",1,"cd-col-form-label"],Un,["id","rgw_frontend_port","type","number","formControlName","rgw_frontend_port","min","1","max","65535",1,"form-control"],lr,ar,Cr,["for","pool",1,"cd-col-form-label","required"],Wn,["id","pool","name","pool","formControlName","pool",1,"form-select"],ai,ho,Yi,lo,["for","trusted_ip_list",1,"cd-col-form-label"],pi,Kn,Nn,["id","trusted_ip_list","type","text","formControlName","trusted_ip_list",1,"form-control"],["for","api_port",1,"cd-col-form-label"],_i,["id","api_port","type","number","formControlName","api_port","min","1","max","65535",1,"form-control"],["for","api_user",1,"cd-col-form-label",3,"ngClass"],Zi,["id","api_user","type","text","formControlName","api_user",1,"form-control"],["for","api_password",1,"cd-col-form-label",3,"ngClass"],So,[1,"input-group"],["id","api_password","type","password","autocomplete","new-password","formControlName","api_password",1,"form-control"],["type","button","cdPasswordButton","api_password",1,"btn","btn-light"],["source","api_password"],us,Zo,pa,va,qi,["for","virtual_ip",1,"cd-col-form-label",3,"ngClass"],xo,$o,["id","virtual_ip","type","text","formControlName","virtual_ip",1,"form-control"],["for","frontend_port",1,"cd-col-form-label",3,"ngClass"],rt,kt,["id","frontend_port","type","number","formControlName","frontend_port","min","1","max","65535",1,"form-control"],["for","monitor_port",1,"cd-col-form-label",3,"ngClass"],Lt,cr,["id","monitor_port","type","number","formControlName","monitor_port","min","1","max","65535",1,"form-control"],Yr,li,eo,_a,ps,Fl,Gl,Ou,Pc,["for","virtual_interface_networks",1,"cd-col-form-label"],np,ou,["id","virtual_interface_networks","type","text","formControlName","virtual_interface_networks",1,"form-control"],["for","snmp_version",1,"cd-col-form-label","required"],yd,["id","snmp_version","name","snmp_version","formControlName","snmp_version",1,"form-select",3,"change"],kp,["for","snmp_destination",1,"cd-col-form-label","required"],Y_,S_,["id","snmp_destination","type","text","formControlName","snmp_destination",1,"form-control"],j_,Au,hd,n_,["for","engine_id",1,"cd-col-form-label","required"],co,xr,["id","engine_id","type","text","formControlName","engine_id",1,"form-control"],ki,Co,["for","auth_protocol",1,"cd-col-form-label","required"],os,["id","auth_protocol","name","auth_protocol","formControlName","auth_protocol",1,"form-select"],Ss,Rs,["for","privacy_protocol",1,"cd-col-form-label"],ks,["id","privacy_protocol","name","privacy_protocol","formControlName","privacy_protocol",1,"form-select"],Ua,["for","snmp_community",1,"cd-col-form-label","required"],Dl,["id","snmp_community","type","text","formControlName","snmp_community",1,"form-control"],uc,["for","snmp_v3_auth_username",1,"cd-col-form-label","required"],Sr,["id","snmp_v3_auth_username","type","text","formControlName","snmp_v3_auth_username",1,"form-control"],oo,["for","snmp_v3_auth_password",1,"cd-col-form-label","required"],Ns,["id","snmp_v3_auth_password","type","password","formControlName","snmp_v3_auth_password",1,"form-control"],fo,["for","snmp_v3_priv_password",1,"cd-col-form-label","required"],ea,["id","snmp_v3_priv_password","type","password","formControlName","snmp_v3_priv_password",1,"form-control"],xs,["id","ssl","type","checkbox","formControlName","ssl",1,"custom-control-input"],["for","ssl",1,"custom-control-label"],Bu,["for","ssl_cert",1,"cd-col-form-label"],Zl,Hl,["id","ssl_cert","formControlName","ssl_cert","rows","5",1,"form-control","resize-vertical","text-monospace","text-pre"],["type","file",3,"change"],hl,ol,["for","ssl_key",1,"cd-col-form-label"],cc,Gu,["id","ssl_key","formControlName","ssl_key","rows","5",1,"form-control","resize-vertical","text-monospace","text-pre"],cf,Ep,["for","grafana_port",1,"cd-col-form-label"],su,Mf,["id","grafana_port","type","number","formControlName","grafana_port","min","1","max","65535",1,"form-control"],["for","grafana_admin_password",1,"cd-col-form-label"],z_,["id","grafana_admin_password","type","password","autocomplete","new-password","formControlName","grafana_admin_password",1,"form-control"],[1,"input-group-append"],["type","button","cdPasswordButton","grafana_admin_password",1,"btn","btn-light"],["source","grafana_admin_password"],Sp,Eh,b_,wm]},template:function(n,o){if(1&n&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.qZA(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6),e.YNc(9,di,3,0,"cd-alert-panel",7),e.TgZ(10,"div",8)(11,"label",9),e.SDv(12,10),e.qZA(),e.TgZ(13,"div",11)(14,"select",12),e.NdJ("change",function(_){return o.getServiceIds(_.target.value)}),e.TgZ(15,"option",13),e.SDv(16,14),e.qZA(),e.YNc(17,Wr,2,2,"option",15),e.qZA(),e.YNc(18,si,2,0,"span",16),e.qZA()(),e.YNc(19,bf,10,9,"div",17),e.YNc(20,kh,11,7,"div",17),e.YNc(21,fg,7,3,"div",17),e.YNc(22,pg,6,2,"div",17),e.YNc(23,fh,6,2,"div",17),e.TgZ(24,"div",8)(25,"div",18)(26,"div",19),e._UZ(27,"input",20),e.TgZ(28,"label",21),e.SDv(29,22),e.qZA(),e.TgZ(30,"cd-helper"),e.SDv(31,23),e.qZA()()()(),e.YNc(32,Qf,9,0,"div",17),e.YNc(33,nd,6,2,"div",17),e.YNc(34,Zd,5,3,"div",17),e.YNc(35,hg,10,2,"div",17),e.YNc(36,km,9,3,"ng-container",24),e.YNc(37,Lg,10,5,"div",17),e.YNc(38,$g,37,13,"ng-container",24),e.YNc(39,yg,38,22,"ng-container",24),e.YNc(40,Fu,31,13,"ng-container",24),e.YNc(41,Nd,9,3,"ng-container",24),e.YNc(42,Dv,25,5,"ng-container",24),e.qZA(),e.TgZ(43,"div",25)(44,"div",26)(45,"cd-form-button-panel",27),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(46,"titlecase"),e.ALo(47,"upperFirst"),e.qZA()()()(),e.BQk(),e.qZA()),2&n){const l=e.MAs(7);e.Q6J("pageURL",o.pageURL)("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,27,o.action))(e.lcZ(4,29,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.serviceForm),e.xp6(3),e.Q6J("ngIf","rgw"===o.serviceForm.controls.service_type.value&&o.showRealmCreationForm),e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.serviceTypes),e.xp6(1),e.Q6J("ngIf",o.serviceForm.showError("service_type",l,"required")),e.xp6(1),e.Q6J("ngIf","ingress"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","snmp-gateway"!==o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","rgw"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","rgw"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","rgw"===o.serviceForm.controls.service_type.value),e.xp6(9),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&"label"===o.serviceForm.controls.placement.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&"hosts"===o.serviceForm.controls.placement.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&"rgw"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","iscsi"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&"iscsi"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","ingress"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","snmp-gateway"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&e.DdM(35,K0).includes(o.serviceForm.controls.service_type.value)),e.xp6(1),e.Q6J("ngIf","grafana"===o.serviceForm.controls.service_type.value),e.xp6(3),e.Q6J("form",o.serviceForm)("submitText",e.lcZ(46,31,o.action)+" "+e.lcZ(47,33,o.resource))}},dependencies:[f.mk,f.sg,f.O5,La.S,bc.m,al.z,Zu.G,ia.s,rl.p,oa.C,st.o,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.wV,rn.Wl,rn.EJ,rn.JJ,rn.JL,rn.qQ,rn.Fd,rn.sg,rn.u,yi.dR,f.rS,Cu.m]}),t})();function X0(t,i){if(1&t&&(e.ynx(0),e._UZ(1,"cd-service-daemon-list",1),e.BQk()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("serviceName",n.selection.service_name)}}let q0=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-service-details"]],inputs:{permissions:"permissions",selection:"selection"},decls:1,vars:1,consts:[[4,"ngIf"],[3,"serviceName"]],template:function(n,o){1&n&&e.YNc(0,X0,2,1,"ng-container",0),2&n&&e.Q6J("ngIf",o.selection)},dependencies:[f.O5,N_]}),t})();const Bg=["runningTpl"];function bm(t,i){1&t&&e._UZ(0,"cd-orchestrator-doc-panel")}function Tm(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"cd-table",3),e.NdJ("fetchData",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.getServices(l))})("setExpandedRow",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.setExpandedRow(l))})("updateSelection",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.updateSelection(l))}),e._UZ(2,"cd-table-actions",4)(3,"cd-service-details",5),e.qZA(),e.BQk()}if(2&t){const n=e.oxw();e.xp6(1),e.Q6J("data",n.services)("columns",n.columns)("autoReload",5e3)("hasDetails",n.hasDetails)("serverSide",!0)("count",n.count),e.xp6(1),e.Q6J("permission",n.permissions.hosts)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("permissions",n.permissions)("selection",n.expandedRow)}}const Cm=function(t){return[t]};function A1(t,i){if(1&t&&e._UZ(0,"i",8),2&t){const n=e.oxw(2);e.Q6J("ngClass",e.VKq(1,Cm,n.icons.warning))}}function Tg(t,i){if(1&t&&(e.TgZ(0,"span",6),e._uU(1),e.qZA(),e.YNc(2,A1,1,3,"i",7)),2&t){const n=i.value;e.xp6(1),e.AsE(" ",n.running," / ",n.size," "),e.xp6(1),e.Q6J("ngIf",0==n.running||0==n.size)}}const Mm="services";let Kf=(()=>{class t extends Hr.o{constructor(n,o,l,_,v,O,P,G){super(),this.actionLabels=n,this.authStorageService=o,this.modalService=l,this.orchService=_,this.cephServiceService=v,this.relativeDatePipe=O,this.taskWrapperService=P,this.router=G,this.hiddenColumns=[],this.hiddenServices=[],this.hasDetails=!0,this.routedModal=!0,this.showDocPanel=!1,this.count=0,this.actionOrchFeatures={create:[Jc.SERVICE_CREATE],update:[Jc.SERVICE_EDIT],delete:[Jc.SERVICE_DELETE]},this.columns=[],this.services=[],this.isLoadingServices=!1,this.selection=new Io.r,this.icons=Rr.P,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"create",icon:Rr.P.add,click:()=>this.openModal(),name:this.actionLabels.CREATE,canBePrimary:K=>!K.hasSelection},{permission:"update",icon:Rr.P.edit,click:()=>this.openModal(!0),name:this.actionLabels.EDIT,disable:K=>this.getDisable("update",K)},{permission:"delete",icon:Rr.P.destroy,click:()=>this.deleteAction(),name:this.actionLabels.DELETE,disable:K=>this.getDisable("delete",K)}]}openModal(n=!1){if(this.routedModal)this.router.navigate(n?[Mm,{outlets:{modal:[yr.MQ.EDIT,this.selection.first().service_type,this.selection.first().service_name]}}]:[Mm,{outlets:{modal:[yr.MQ.CREATE]}}]);else{let o={};o=n?{serviceName:this.selection.first()?.service_name,serviceType:this.selection?.first()?.service_type,hiddenServices:this.hiddenServices,editing:n}:{hiddenServices:this.hiddenServices,editing:n},this.bsModalRef=this.modalService.show(Ug,o,{size:"lg"})}}ngOnInit(){const n=[{name:"Service",prop:"service_name",flexGrow:1},{name:"Placement",prop:"",pipe:new ri,flexGrow:2},{name:"Running",prop:"status",flexGrow:1,cellTemplate:this.runningTpl},{name:"Last Refreshed",prop:"status.last_refresh",pipe:this.relativeDatePipe,flexGrow:1}];this.columns=n.filter(o=>!this.hiddenColumns.includes(o.prop)),this.orchService.status().subscribe(o=>{this.orchStatus=o,this.showDocPanel=!o.available})}ngOnChanges(){this.orchStatus?.available&&(this.services=[],this.table.reloadData())}getDisable(n,o){return"delete"===n&&!o?.hasSingleSelection||"update"===n&&["osd","container"].indexOf(this.selection.first()?.service_type)>=0||this.orchService.getTableActionDisableDesc(this.orchStatus,this.actionOrchFeatures[n])}getServices(n){if(this.isLoadingServices)return;this.isLoadingServices=!0;const o=this.cephServiceService.list(n.toParams());o.observable.subscribe(l=>{this.services=l,this.count=o.count,this.services=this.services.filter(_=>!this.hiddenServices.includes(_.service_name)),this.isLoadingServices=!1},()=>{this.isLoadingServices=!1,this.services=[],n.error()})}updateSelection(n){this.selection=n}deleteAction(){const n=this.selection.first();this.modalService.show(Go.M,{itemDescription:"Service",itemNames:[n.service_name],actionDescription:"delete",submitActionObservable:()=>this.taskWrapperService.wrapTaskAroundCall({task:new Fr.R(`service/${yr.MQ.DELETE}`,{service_name:n.service_name}),call:this.cephServiceService.delete(n.service_name)}).pipe((0,Ar.g)(5e3))})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(Do.j),e.Y36(ca.Z),e.Y36(td),e.Y36(rf),e.Y36(Wf.h),e.Y36(Gr.P),e.Y36(Ee.F0))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-services"]],viewQuery:function(n,o){if(1&n&&(e.Gf(zo.a,7),e.Gf(Bg,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.table=l.first),e.iGM(l=e.CRH())&&(o.runningTpl=l.first)}},inputs:{hostname:"hostname",hiddenColumns:"hiddenColumns",hiddenServices:"hiddenServices",hasDetails:"hasDetails",routedModal:"routedModal"},features:[e._Bn([{provide:Qn.F,useValue:new Qn.F(Mm)}]),e.qOj,e.TTD],decls:5,vars:2,consts:[[4,"ngIf"],["name","modal"],["runningTpl",""],["identifier","service_name","forceIdentifier","true","columnMode","flex","selectionType","single",3,"data","columns","autoReload","hasDetails","serverSide","count","fetchData","setExpandedRow","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"permissions","selection"],["ngbTooltip","Service instances running out of the total number of services requested."],["class","icon-warning-color",3,"ngClass",4,"ngIf"],[1,"icon-warning-color",3,"ngClass"]],template:function(n,o){1&n&&(e.YNc(0,bm,1,0,"cd-orchestrator-doc-panel",0),e.YNc(1,Tm,4,11,"ng-container",0),e._UZ(2,"router-outlet",1),e.YNc(3,Tg,3,3,"ng-template",null,2,e.W1O)),2&n&&(e.Q6J("ngIf",o.showDocPanel),e.xp6(1),e.Q6J("ngIf",null==o.orchStatus?null:o.orchStatus.available))},dependencies:[f.mk,f.O5,zf,zo.a,$l.K,Ee.lC,yi._L,q0]}),t})();var $_=(()=>{return(t=$_||($_={})).COST_CAPACITY="cost_capacity",t.THROUGHPUT="throughput_optimized",t.IOPS="iops_optimized",$_;var t})();let D1=(()=>{class t{constructor(n,o,l,_,v){this.activeModal=n,this.actionLabels=o,this.formBuilder=l,this.osdService=_,this.taskWrapper=v,this.driveGroups=[],this.submitAction=new e.vpe,this.action=o.CREATE,this.createForm()}createForm(){this.formGroup=this.formBuilder.group({})}onSubmit(){const n=Xe().join(Xe().map(this.driveGroups,"service_id"),", ");this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("osd/"+yr.MQ.CREATE,{tracking_id:n}),call:this.osdService.create(this.driveGroups,n)}).subscribe({error:()=>{this.formGroup.setErrors({cdSubmitButton:!0})},complete:()=>{this.submitAction.emit(),this.activeModal.close()}})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(Qi.O),e.Y36(Zc),e.Y36(Gr.P))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-creation-preview-modal"]],inputs:{driveGroups:"driveGroups"},outputs:{submitAction:"submitAction"},decls:15,vars:9,consts:function(){let i,n;return i="OSD creation preview",n="DriveGroups",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],n,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"]]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"h4"),e.SDv(8,7),e.qZA(),e.TgZ(9,"pre"),e._uU(10),e.ALo(11,"json"),e.qZA()(),e.TgZ(12,"div",8)(13,"cd-form-button-panel",9),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(14,"titlecase"),e.qZA()()(),e.BQk(),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.formGroup),e.xp6(6),e.Oqu(e.lcZ(11,5,o.driveGroups)),e.xp6(3),e.Q6J("form",o.formGroup)("submitText",e.lcZ(14,7,o.action)))},dependencies:[al.z,rl.p,Os.V,rn._Y,rn.JL,rn.sg,f.Ts,f.rS]}),t})();const Rv=["inventoryDevices"];function R1(t,i){if(1&t&&(e.TgZ(0,"span",16),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.hij(" ",n," ")}}function ey(t,i){if(1&t&&(e.TgZ(0,"cd-alert-panel",13),e.ynx(1),e.SDv(2,14),e.BQk(),e.YNc(3,R1,2,1,"span",15),e.qZA()),2&t){const n=e.oxw();e.Q6J("showTitle",!1),e.xp6(3),e.Q6J("ngForOf",n.requiredFilters)}}function ty(t,i){if(1&t&&(e.TgZ(0,"div")(1,"p",17)(2,"span"),e.SDv(3,18),e.ALo(4,"dimlessBinary"),e.qZA()()()),2&t){const n=e.oxw();e.xp6(4),e.pQV(n.filteredDevices.length)(e.lcZ(4,2,n.capacity)),e.QtT(3)}}const x1=function(){return["available","osd_ids"]};let Bh=(()=>{class t{constructor(n,o,l,_,v){this.formBuilder=n,this.cdRef=o,this.activeModal=l,this.actionLabels=_,this.wizardStepService=v,this.submitAction=new e.vpe,this.icons=Rr.P,this.filterColumns=[],this.devices=[],this.filteredDevices=[],this.capacity=0,this.canSubmit=!1,this.requiredFilters=[],this.action=_.ADD,this.createForm()}ngAfterViewInit(){const n=Xe().filter(this.inventoryDevices.columns,o=>this.filterColumns.includes(o.prop)&&"hostname"!==o.prop);setTimeout(()=>{this.requiredFilters=Xe().map(n,"name")},0)}createForm(){this.formGroup=this.formBuilder.group({})}onFilterChange(n){if(this.capacity=0,this.canSubmit=!1,Xe().isEmpty(n.filters))this.filteredDevices=[],this.event=void 0;else{const o=n.filters.filter(l=>"hostname"!==l.prop);this.canSubmit=!Xe().isEmpty(o),this.filteredDevices=n.data,this.capacity=Xe().sumBy(this.filteredDevices,"sys_api.size"),this.event=n}this.cdRef.detectChanges()}onSubmit(){this.submitAction.emit(this.event),this.activeModal.close()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Qi.O),e.Y36(e.sBO),e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(Cp))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-devices-selection-modal"]],viewQuery:function(n,o){if(1&n&&e.Gf(Rv,5),2&n){let l;e.iGM(l=e.CRH())&&(o.inventoryDevices=l.first)}},outputs:{submitAction:"submitAction"},decls:14,vars:16,consts:function(){let i,n,o;return i="" + "\ufffd0\ufffd" + " devices",n="At least one of these filters must be applied in order to proceed:",o="Number of devices: " + "\ufffd0\ufffd" + ". Raw capacity: " + "\ufffd1\ufffd" + ".",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],["type","warning","size","slim",3,"showTitle",4,"ngIf"],[3,"devices","filterColumns","hostname","diskType","hiddenColumns","filterChange"],["inventoryDevices",""],[4,"ngIf"],[1,"modal-footer"],[3,"form","disabled","submitText","submitActionEvent"],["type","warning","size","slim",3,"showTitle"],n,["class","badge badge-dark ms-2",4,"ngFor","ngForOf"],[1,"badge","badge-dark","ms-2"],[1,"text-center"],o]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6),e.YNc(7,ey,4,2,"cd-alert-panel",7),e.TgZ(8,"cd-inventory-devices",8,9),e.NdJ("filterChange",function(_){return o.onFilterChange(_)}),e.qZA(),e.YNc(10,ty,5,4,"div",10),e.qZA(),e.TgZ(11,"div",11)(12,"cd-form-button-panel",12),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(13,"titlecase"),e.qZA()()(),e.BQk(),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.deviceType),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.formGroup),e.xp6(3),e.Q6J("ngIf",!o.canSubmit),e.xp6(1),e.Q6J("devices",o.devices)("filterColumns",o.filterColumns)("hostname",o.hostname)("diskType",o.diskType)("hiddenColumns",e.DdM(15,x1)),e.xp6(2),e.Q6J("ngIf",o.canSubmit),e.xp6(2),e.Q6J("form",o.formGroup)("disabled",!o.canSubmit||0===o.filteredDevices.length)("submitText",e.lcZ(13,13,o.action)))},dependencies:[f.sg,f.O5,al.z,Zu.G,rl.p,Os.V,rn._Y,rn.JL,rn.sg,Vf,f.rS,Wl.$]}),t})();function tu(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,7),e.qZA())}function w1(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,8),e.qZA())}function g_(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,9),e.qZA())}const P1=function(t){return[t]};function Jp(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"button",10),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.showSelectionModal())}),e._UZ(2,"i",11),e.ynx(3),e.SDv(4,12),e.BQk(),e.qZA(),e.BQk()}if(2&t){const n=e.oxw();e.xp6(1),e.Q6J("title",n.addButtonTooltip)("disabled",0===n.availDevices.length||!n.canSelect||n.expansionCanSelect),e.xp6(1),e.Q6J("ngClass",e.VKq(3,P1,n.icons.add))}}function Ac(t,i){if(1&t&&(e.TgZ(0,"span")(1,"span",19),e._uU(2),e.qZA()()),2&t){const n=i.$implicit;e.xp6(2),e.AsE("",n.name,": ",n.value.formatted,"")}}function ny(t,i){if(1&t&&(e.TgZ(0,"div",20)(1,"span"),e.SDv(2,21),e.ALo(3,"dimlessBinary"),e.qZA()()),2&t){const n=e.oxw(2);e.xp6(3),e.pQV(e.lcZ(3,1,n.capacity)),e.QtT(2)}}const ry=function(){return["available","osd_ids"]},Bm=function(){return[]};function xv(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",13),e.YNc(1,Ac,3,2,"span",14),e.TgZ(2,"a",15),e.NdJ("click",function(){return e.CHM(n),e.oxw().clearDevices(),e.KtG(!1)}),e._UZ(3,"i",11),e.ynx(4),e.SDv(5,16),e.BQk(),e.qZA()(),e.TgZ(6,"div"),e._UZ(7,"cd-inventory-devices",17),e.qZA(),e.YNc(8,ny,4,3,"div",18)}if(2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngForOf",n.appliedFilters),e.xp6(2),e.Q6J("ngClass",e.VKq(6,P1,n.icons.clearFilters)),e.xp6(4),e.Q6J("devices",n.devices)("hiddenColumns",e.DdM(8,ry))("filterColumns",e.DdM(9,Bm)),e.xp6(1),e.Q6J("ngIf","data"===n.type)}}let iy=(()=>{class t{constructor(n,o,l){this.modalService=n,this.osdService=o,this.router=l,this.selected=new e.vpe,this.cleared=new e.vpe,this.icons=Rr.P,this.devices=[],this.capacity=0,this.appliedFilters=new Array,this.expansionCanSelect=!1,this.tooltips={noAvailDevices:"No available devices",addPrimaryFirst:"Please add primary devices first",addByFilters:"Add devices by using filters"},this.isOsdPage=this.router.url.includes("/osd")}ngOnInit(){this.isOsdPage||(this.devices=this.osdService?.osdDevices[this.type]?this.osdService.osdDevices[this.type]:[],this.capacity=Xe().sumBy(this.devices,"sys_api.size"),this.expansionCanSelect=!!this.osdService?.osdDevices&&this.osdService?.osdDevices.disableSelect),this.updateAddButtonTooltip()}ngOnChanges(){this.updateAddButtonTooltip()}showSelectionModal(){this.modalService.show(Bh,{hostname:this.hostname,deviceType:this.name,diskType:"Primary"===this.name?"hdd":"ssd",devices:this.availDevices,filterColumns:["hostname","human_readable_type","sys_api.vendor","sys_api.model","sys_api.size"]},{size:"xl"}).componentInstance.submitAction.subscribe(v=>{this.devices=v.data,this.capacity=Xe().sumBy(this.devices,"sys_api.size"),this.appliedFilters=v.filters;const O=Xe().assign({type:this.type},v);this.isOsdPage||(this.osdService.osdDevices[this.type]=this.devices,this.osdService.osdDevices.disableSelect=this.canSelect||this.devices.length===this.availDevices.length,this.osdService.osdDevices[this.type].capacity=this.capacity),this.selected.emit(O)})}updateAddButtonTooltip(){this.addButtonTooltip="data"===this.type&&0===this.availDevices.length?this.tooltips.noAvailDevices:this.canSelect?0===this.availDevices.length?this.tooltips.noAvailDevices:this.tooltips.addByFilters:this.tooltips.addPrimaryFirst}clearDevices(){this.isOsdPage||(this.expansionCanSelect=!1,this.osdService.osdDevices.disableSelect=!1,this.osdService.osdDevices=[]);const n={type:this.type,clearedDevices:[...this.devices]};this.devices=[],this.cleared.emit(n)}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(ca.Z),e.Y36(Zc),e.Y36(Ee.F0))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-devices-selection-groups"]],inputs:{type:"type",name:"name",hostname:"hostname",availDevices:"availDevices",canSelect:"canSelect"},outputs:{selected:"selected",cleared:"cleared"},features:[e.TTD],decls:12,vars:6,consts:function(){let i,n,o,l,_,v,O;return i="" + "\ufffd0\ufffd" + " devices",n="The primary storage devices. These devices contain all OSD data.",o="Write-Ahead-Log devices. These devices are used for BlueStore\u2019s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.",l="DB devices can be used for storing BlueStore\u2019s internal metadata. It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).",_="Add",v="Clear",O="Raw capacity: " + "\ufffd0\ufffd" + "",[[1,"form-group","row"],["for","createDeleteButton",1,"cd-col-form-label"],i,[4,"ngIf"],[1,"cd-col-form-input"],[4,"ngIf","ngIfElse"],["blockClearDevices",""],n,o,l,["type","button","data-toggle","tooltip",1,"btn","btn-light",3,"title","disabled","click"],[3,"ngClass"],_,[1,"pb-2","my-2","border-bottom"],[4,"ngFor","ngForOf"],["href","",1,"tc_clearSelections",3,"click"],v,[3,"devices","hiddenColumns","filterColumns"],["class","float-end",4,"ngIf"],[1,"badge","badge-dark","me-2"],[1,"float-end"],O]},template:function(n,o){if(1&n&&(e.TgZ(0,"div",0)(1,"label",1),e.ynx(2),e.SDv(3,2),e.BQk(),e.TgZ(4,"cd-helper"),e.YNc(5,tu,2,0,"span",3),e.YNc(6,w1,2,0,"span",3),e.YNc(7,g_,2,0,"span",3),e.qZA()(),e.TgZ(8,"div",4),e.YNc(9,Jp,5,5,"ng-container",5),e.YNc(10,xv,9,10,"ng-template",null,6,e.W1O),e.qZA()()),2&n){const l=e.MAs(11);e.xp6(3),e.pQV(o.name),e.QtT(3),e.xp6(2),e.Q6J("ngIf","data"===o.type),e.xp6(1),e.Q6J("ngIf","wal"===o.type),e.xp6(1),e.Q6J("ngIf","db"===o.type),e.xp6(2),e.Q6J("ngIf",0===o.devices.length)("ngIfElse",l)}},dependencies:[f.mk,f.sg,f.O5,La.S,st.o,Va.P,Vf,Wl.$],styles:[".tc_clearSelections[_ngcontent-%COMP%]{text-decoration:none}"]}),t})();const oy=["dataDeviceSelectionGroups"],sy=["walDeviceSelectionGroups"],wv=["dbDeviceSelectionGroups"],ay=["previewButtonPanel"];function ly(t,i){1&t&&e._UZ(0,"cd-orchestrator-doc-panel")}function N1(t,i){if(1&t&&(e.TgZ(0,"div",33),e.SDv(1,34),e.ALo(2,"titlecase"),e.ALo(3,"upperFirst"),e.qZA()),2&t){const n=e.oxw(2);e.xp6(3),e.pQV(e.lcZ(2,2,n.action))(e.lcZ(3,4,n.resource)),e.QtT(1)}}function uy(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",35),e.SDv(1,36),e.qZA())}function cy(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",37)(1,"div",38)(2,"input",39),e.NdJ("change",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.emitDeploymentSelection())}),e.qZA(),e.TgZ(3,"label",40),e.tHW(4,41),e.TgZ(5,"cd-helper"),e._UZ(6,"span"),e.qZA(),e.N_p(),e.qZA()()()}if(2&t){const n=i.$implicit,o=e.oxw(2);e.xp6(2),e.Q6J("id",n)("value",n),e.uIk("disabled",null==o.deploymentOptions||!o.deploymentOptions.options[n].available||null),e.xp6(1),e.Q6J("id","label_"+n)("for",n),e.xp6(3),e.pQV(null==o.deploymentOptions?null:o.deploymentOptions.options[n].title)((null==o.deploymentOptions?null:o.deploymentOptions.recommended_option)===n?"(Recommended)":"")(null==o.deploymentOptions?null:o.deploymentOptions.options[n].desc),e.QtT(4)}}function dy(t,i){1&t&&(e.TgZ(0,"span",50),e.SDv(1,51),e.qZA())}function fy(t,i){if(1&t&&(e.TgZ(0,"div",42)(1,"label",43),e.ynx(2),e.SDv(3,44),e.BQk(),e.TgZ(4,"cd-helper")(5,"span"),e.SDv(6,45),e.qZA(),e._UZ(7,"br"),e.TgZ(8,"span"),e.SDv(9,46),e.qZA()()(),e.TgZ(10,"div",47),e._UZ(11,"input",48),e.YNc(12,dy,2,0,"span",49),e.qZA()()),2&t){e.oxw();const n=e.MAs(4),o=e.oxw();e.xp6(12),e.Q6J("ngIf",o.form.showError("walSlots",n,"min"))}}function py(t,i){1&t&&(e.TgZ(0,"span",50),e.SDv(1,57),e.qZA())}function v_(t,i){if(1&t&&(e.TgZ(0,"div",42)(1,"label",52),e.ynx(2),e.SDv(3,53),e.BQk(),e.TgZ(4,"cd-helper")(5,"span"),e.SDv(6,54),e.qZA(),e._UZ(7,"br"),e.TgZ(8,"span"),e.SDv(9,55),e.qZA()()(),e.TgZ(10,"div",47),e._UZ(11,"input",56),e.YNc(12,py,2,0,"span",49),e.qZA()()),2&t){e.oxw();const n=e.MAs(4),o=e.oxw();e.xp6(12),e.Q6J("ngIf",o.form.showError("dbSlots",n,"min"))}}function I1(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",58)(1,"input",59),e.NdJ("change",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.emitDeploymentSelection())}),e.qZA(),e.TgZ(2,"label",60),e._uU(3),e.qZA()()}if(2&t){const n=i.$implicit;e.xp6(1),e.s9C("id",n.key),e.s9C("name",n.key),e.s9C("formControlName",n.key),e.xp6(1),e.s9C("for",n.key),e.xp6(1),e.Oqu(n.desc)}}function F1(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",61)(1,"cd-form-button-panel",62,63),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.submit())}),e.qZA()()}if(2&t){e.oxw();const n=e.MAs(23),o=e.oxw();e.xp6(1),e.Q6J("form",o.form)("disabled",0===n.devices.length&&!o.simpleDeployment)("submitText",o.simpleDeployment?"Create OSDs":o.actionLabels.PREVIEW)}}const Pv=function(t){return{collapsed:t}},L1=function(t){return{show:t}};function _y(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",2),e.YNc(1,N1,4,6,"div",3),e.TgZ(2,"div",4)(3,"form",5,6),e.YNc(5,uy,2,0,"cd-alert-panel",7),e.TgZ(6,"div",8)(7,"div",9)(8,"h2",10)(9,"button",11),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.emitDeploymentMode())}),e.SDv(10,12),e.qZA()()(),e.TgZ(11,"div",13)(12,"div",14),e.YNc(13,cy,7,8,"div",15),e.qZA()(),e.TgZ(14,"div",9)(15,"h2",10)(16,"button",16),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.emitDeploymentMode())}),e.SDv(17,17),e.qZA()()(),e.TgZ(18,"div",13)(19,"div",14)(20,"div",18)(21,"fieldset")(22,"cd-osd-devices-selection-groups",19,20),e.NdJ("selected",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.onDevicesSelected(l))})("cleared",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.onDevicesCleared(l))}),e.qZA()(),e.TgZ(24,"fieldset")(25,"legend"),e.SDv(26,21),e.qZA(),e.TgZ(27,"cd-osd-devices-selection-groups",22,23),e.NdJ("selected",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.onDevicesSelected(l))})("cleared",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.onDevicesCleared(l))}),e.qZA(),e.YNc(29,fy,13,1,"div",24),e.TgZ(30,"cd-osd-devices-selection-groups",25,26),e.NdJ("selected",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.onDevicesSelected(l))})("cleared",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.onDevicesCleared(l))}),e.qZA(),e.YNc(32,v_,13,1,"div",24),e.qZA()()()(),e.TgZ(33,"div",9)(34,"h2",10)(35,"button",27),e.SDv(36,28),e.qZA()()(),e.TgZ(37,"div",29)(38,"div",14)(39,"div",30),e.YNc(40,I1,4,5,"div",31),e.qZA()()()()()(),e.YNc(41,F1,3,3,"div",32),e.qZA()}if(2&t){const n=e.MAs(23),o=e.MAs(28),l=e.MAs(31),_=e.oxw();e.xp6(1),e.Q6J("ngIf",!_.hideTitle),e.xp6(2),e.Q6J("formGroup",_.form),e.xp6(2),e.Q6J("ngIf",!(null!=_.deploymentOptions&&_.deploymentOptions.recommended_option)),e.xp6(4),e.Q6J("ngClass",e.VKq(20,Pv,!_.simpleDeployment)),e.xp6(2),e.Q6J("ngClass",e.VKq(22,L1,_.simpleDeployment)),e.xp6(2),e.Q6J("ngForOf",_.optionNames),e.xp6(3),e.Q6J("ngClass",e.VKq(24,Pv,_.simpleDeployment)),e.xp6(2),e.Q6J("ngClass",e.VKq(26,L1,!_.simpleDeployment)),e.xp6(4),e.Q6J("availDevices",_.availDevices)("canSelect",0!==_.availDevices.length),e.xp6(5),e.Q6J("availDevices",_.availDevices)("canSelect",0!==n.devices.length)("hostname",_.hostname),e.xp6(2),e.Q6J("ngIf",0!==o.devices.length),e.xp6(1),e.Q6J("availDevices",_.availDevices)("canSelect",0!==n.devices.length)("hostname",_.hostname),e.xp6(2),e.Q6J("ngIf",0!==l.devices.length),e.xp6(8),e.Q6J("ngForOf",_.featureList),e.xp6(1),e.Q6J("ngIf",!_.hideSubmitBtn)}}let uf=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O,P,G){super(),this.actionLabels=n,this.authStorageService=o,this.orchService=l,this.hostService=_,this.router=v,this.modalService=O,this.osdService=P,this.taskWrapper=G,this.hideTitle=!1,this.hideSubmitBtn=!1,this.emitDriveGroup=new e.vpe,this.emitDeploymentOption=new e.vpe,this.emitMode=new e.vpe,this.icons=Rr.P,this.columns=[],this.allDevices=[],this.availDevices=[],this.dataDeviceFilters=[],this.dbDeviceFilters=[],this.walDeviceFilters=[],this.hostname="",this.driveGroup=new Pf,this.featureList=[],this.hasOrchestrator=!0,this.simpleDeployment=!0,this.optionNames=Object.values($_),this.resource="OSDs",this.action=this.actionLabels.CREATE,this.features={encrypted:{key:"encrypted",desc:"Encryption"}},this.featureList=Xe().map(this.features,(K,oe)=>Object.assign(K,{key:oe})),this.createForm()}ngOnInit(){this.orchService.status().subscribe(n=>{this.hasOrchestrator=n.available,n.available?this.getDataDevices():this.loadingNone()}),this.osdService.getDeploymentOptions().subscribe(n=>{this.deploymentOptions=n,this.form.get("deploymentOption").setValue(this.deploymentOptions?.recommended_option),this.deploymentOptions?.recommended_option&&this.enableFeatures()}),this.form.get("walSlots").valueChanges.subscribe(n=>this.setSlots("wal",n)),this.form.get("dbSlots").valueChanges.subscribe(n=>this.setSlots("db",n)),Xe().each(this.features,n=>{this.form.get("features").get(n.key).valueChanges.subscribe(o=>this.featureFormUpdate(n.key,o))})}createForm(){this.form=new fu.d({walSlots:new rn.p4(0),dbSlots:new rn.p4(0),features:new fu.d(this.featureList.reduce((n,o)=>(n[o.key]=new rn.p4({value:!1,disabled:!0}),n),{})),deploymentOption:new rn.p4(0)})}getDataDevices(){this.hostService.inventoryDeviceList().subscribe(n=>{this.allDevices=Xe().filter(n,"available"),this.availDevices=[...this.allDevices],this.loadingReady()},()=>{this.allDevices=[],this.availDevices=[],this.loadingError()})}setSlots(n,o){"number"==typeof o&&o>=0&&this.driveGroup.setSlots(n,o)}featureFormUpdate(n,o){this.driveGroup.setFeature(n,o)}enableFeatures(){this.featureList.forEach(n=>{this.form.get(n.key).enable({emitEvent:!1})})}disableFeatures(){this.featureList.forEach(n=>{const o=this.form.get(n.key);o.disable({emitEvent:!1}),o.setValue(!1,{emitEvent:!1})})}onDevicesSelected(n){if(this.availDevices=n.dataOut,"data"===n.type){const o=Xe().find(n.filters,{prop:"hostname"});o?(this.hostname=o.value.raw,this.availDevices=n.dataOut.filter(l=>l.hostname===this.hostname),this.driveGroup.setHostPattern(this.hostname)):this.driveGroup.setHostPattern("*"),this.enableFeatures()}this.driveGroup.setDeviceSelection(n.type,n.filters),this.emitDriveGroup.emit(this.driveGroup)}onDevicesCleared(n){"data"===n.type?(this.hostname="",this.availDevices=[...this.allDevices],this.walDeviceSelectionGroups.devices=[],this.dbDeviceSelectionGroups.devices=[],this.disableFeatures(),this.driveGroup.reset(),this.form.get("walSlots").setValue(0,{emitEvent:!1}),this.form.get("dbSlots").setValue(0,{emitEvent:!1})):(this.availDevices=[...this.availDevices,...n.clearedDevices],this.driveGroup.clearDeviceSelection(n.type),this.form.get(`${n.type}Slots`).setValue(0,{emitEvent:!1}))}emitDeploymentSelection(){const n=this.form.get("deploymentOption").value,o=this.form.get("encrypted").value;this.emitDeploymentOption.emit({option:n,encrypted:o})}emitDeploymentMode(){this.simpleDeployment=!this.simpleDeployment,this.simpleDeployment||0!==this.dataDeviceSelectionGroups.devices.length?this.enableFeatures():this.disableFeatures(),this.emitMode.emit(this.simpleDeployment)}submit(){if(this.simpleDeployment){const l={option:this.form.get("deploymentOption").value,encrypted:this.form.get("encrypted").value},v=`${this.deploymentOptions.options[l.option].title} deployment`;this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("osd/"+yr.MQ.CREATE,{tracking_id:v}),call:this.osdService.create([l],v,"predefined")}).subscribe({complete:()=>{this.router.navigate(["/osd"])}})}else{const n=this.authStorageService.getUsername();this.driveGroup.setName(`dashboard-${n}-${Xe().now()}`),this.modalService.show(D1,{driveGroups:[this.driveGroup.spec]}).componentInstance.submitAction.subscribe(()=>{this.router.navigate(["/osd"])}),this.previewButtonPanel.submitButton.loading=!1}}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(Do.j),e.Y36(td),e.Y36(Wa.x),e.Y36(Ee.F0),e.Y36(ca.Z),e.Y36(Zc),e.Y36(Gr.P))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-form"]],viewQuery:function(n,o){if(1&n&&(e.Gf(oy,5),e.Gf(sy,5),e.Gf(wv,5),e.Gf(ay,5)),2&n){let l;e.iGM(l=e.CRH())&&(o.dataDeviceSelectionGroups=l.first),e.iGM(l=e.CRH())&&(o.walDeviceSelectionGroups=l.first),e.iGM(l=e.CRH())&&(o.dbDeviceSelectionGroups=l.first),e.iGM(l=e.CRH())&&(o.previewButtonPanel=l.first)}},inputs:{hideTitle:"hideTitle",hideSubmitBtn:"hideSubmitBtn"},outputs:{emitDriveGroup:"emitDriveGroup",emitDeploymentOption:"emitDeploymentOption",emitMode:"emitMode"},features:[e.qOj],decls:2,vars:2,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue;return i="Deployment Options",n="Advanced Mode",o="Shared devices",l="Features",_="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",v=" No devices(HDD, SSD or NVME) were found. Creation of OSDs will remain disabled until devices are added. ",O="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + " " + "\ufffd#5\ufffd" + "" + "\ufffd#6\ufffd" + "" + "\ufffd2\ufffd" + "" + "\ufffd/#6\ufffd" + "" + "\ufffd/#5\ufffd" + "",P="WAL slots",G="How many OSDs per WAL device.",K="Specify 0 to let Orchestrator backend decide it.",oe="Value should be greater than or equal to 0",ue="DB slots",pe="How many OSDs per DB device.",ye="Specify 0 to let Orchestrator backend decide it.",Ue="Value should be greater than or equal to 0",[[4,"ngIf"],["class","card",4,"cdFormLoading"],[1,"card"],["class","card-header",4,"ngIf"],[1,"card-body","ms-2"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],["type","warning","class","mx-3",4,"ngIf"],[1,"accordion"],[1,"accordion-item"],[1,"accordion-header"],["type","button","data-toggle","collapse","aria-label","toggle deployment options",1,"accordion-button",3,"ngClass","click"],i,[1,"accordion-collapse","collapse",3,"ngClass"],[1,"accordion-body"],["class","pt-3 pb-3",4,"ngFor","ngForOf"],["type","button","aria-label","toggle advanced mode",1,"accordion-button",3,"ngClass","click"],n,[1,"card-body"],["name","Primary","type","data",3,"availDevices","canSelect","selected","cleared"],["dataDeviceSelectionGroups",""],o,["name","WAL","type","wal",3,"availDevices","canSelect","hostname","selected","cleared"],["walDeviceSelectionGroups",""],["class","form-group row",4,"ngIf"],["name","DB","type","db",3,"availDevices","canSelect","hostname","selected","cleared"],["dbDeviceSelectionGroups",""],["type","button","data-toggle","collapse","aria-label","features","aria-expanded","true",1,"accordion-button"],l,[1,"accordion-collapse","collapse","show"],["formGroupName","features",1,"pt-3","pb-3"],["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],["class","card-footer",4,"ngIf"],[1,"card-header"],_,["type","warning",1,"mx-3"],v,[1,"pt-3","pb-3"],[1,"custom-control","form-check","custom-control-inline"],["type","radio","name","deploymentOption","formControlName","deploymentOption",1,"form-check-input",3,"id","value","change"],[1,"form-check-label",3,"id","for"],O,[1,"form-group","row"],["for","walSlots",1,"cd-col-form-label"],P,G,K,[1,"cd-col-form-input"],["id","walSlots","name","walSlots","type","number","min","0","formControlName","walSlots",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"invalid-feedback"],oe,["for","dbSlots",1,"cd-col-form-label"],ue,pe,ye,["id","dbSlots","name","dbSlots","type","number","min","0","formControlName","dbSlots",1,"form-control"],Ue,[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","name","formControlName","change"],[1,"custom-control-label",3,"for"],[1,"card-footer"],["wrappingClass","text-right",3,"form","disabled","submitText","submitActionEvent"],["previewButtonPanel",""]]},template:function(n,o){1&n&&(e.YNc(0,ly,1,0,"cd-orchestrator-doc-panel",0),e.YNc(1,_y,42,28,"div",1)),2&n&&(e.Q6J("ngIf",!o.hasOrchestrator),e.xp6(1),e.Q6J("cdFormLoading",o.loading))},dependencies:[f.mk,f.sg,f.O5,La.S,Zu.G,zf,rl.p,Pu.y,st.o,za.b,Va.P,Os.V,rn._Y,rn.Fj,rn.wV,rn.Wl,rn._,rn.JJ,rn.JL,rn.qQ,rn.sg,rn.u,rn.x0,iy,f.rS,Cu.m]}),t})();const Lp=function(){return["services","status"]};let k1=(()=>{class t{constructor(n,o,l,_,v){this.wizardStepsService=n,this.cephServiceService=o,this.dimlessBinary=l,this.hostService=_,this.osdService=v,this.hosts=[],this.totalCapacity=0,this.services=[],this.totalCPUs=0,this.totalMemory=0}ngOnInit(){let n=0,o=0,l=0,_=0,v=0,O=0;const P=new Sc.E(()=>{});this.hostService.list(P.toParams(),"true").subscribe(G=>{this.hosts=G,this.hostsCount=this.hosts.length,Xe().forEach(this.hosts,K=>{this.totalCPUs=this.totalCPUs+K.cpu_count,this.totalMemory=this.totalMemory+1024*K.memory_total_kb}),this.totalMemory=this.dimlessBinary.transform(this.totalMemory)}),this.osdService.osdDevices.data&&(n=this.osdService.osdDevices.data?.length,o=this.osdService.osdDevices.data.capacity),this.osdService.osdDevices.wal&&(l=this.osdService.osdDevices.wal?.length,_=this.osdService.osdDevices.wal.capacity),this.osdService.osdDevices.db&&(v=this.osdService.osdDevices.db?.length,O=this.osdService.osdDevices.db.capacity),this.totalDevices=n+l+v,this.osdService.osdDevices.totalDevices=this.totalDevices,this.totalCapacity=o+_+O}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Cp),e.Y36(rf),e.Y36(Wl.$),e.Y36(Wa.x),e.Y36(Zc))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-create-cluster-review"]],decls:45,vars:16,consts:function(){let i,n,o,l,_,v,O,P;return i="Cluster Resources",n="Hosts",o="Storage Capacity",l="Number of devices",_="Raw capacity",v="CPUs",O="Memory",P="Host Details",[[1,"row"],[1,"col-lg-3"],[1,"cd-header"],i,[1,"table","table-striped"],[1,"bold"],n,o,l,_,[1,"pt-5"],v,O,[1,"col-lg-9"],P,[3,"hiddenColumns","hideToolHeader","hasTableDetails","showGeneralActionsOnly"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"fieldset")(3,"legend",2),e.SDv(4,3),e.qZA(),e.TgZ(5,"table",4)(6,"tr")(7,"td",5),e.SDv(8,6),e.qZA(),e.TgZ(9,"td"),e._uU(10),e.qZA()(),e.TgZ(11,"tr")(12,"td")(13,"dl")(14,"dt")(15,"p"),e.SDv(16,7),e.qZA()(),e.TgZ(17,"dd")(18,"p"),e.SDv(19,8),e.qZA()(),e.TgZ(20,"dd")(21,"p"),e.SDv(22,9),e.qZA()()()(),e.TgZ(23,"td",10)(24,"p"),e._uU(25),e.qZA(),e.TgZ(26,"p"),e._uU(27),e.ALo(28,"dimlessBinary"),e.qZA()()(),e.TgZ(29,"tr")(30,"td",5),e.SDv(31,11),e.qZA(),e.TgZ(32,"td"),e._uU(33),e.ALo(34,"empty"),e.qZA()(),e.TgZ(35,"tr")(36,"td",5),e.SDv(37,12),e.qZA(),e.TgZ(38,"td"),e._uU(39),e.ALo(40,"empty"),e.qZA()()()()(),e.TgZ(41,"div",13)(42,"legend",2),e.SDv(43,14),e.qZA(),e._UZ(44,"cd-hosts",15),e.qZA()()),2&n&&(e.xp6(10),e.Oqu(o.hostsCount),e.xp6(15),e.Oqu(o.totalDevices),e.xp6(2),e.hij(" ",e.lcZ(28,9,o.totalCapacity),""),e.xp6(6),e.Oqu(e.lcZ(34,11,o.totalCPUs)),e.xp6(6),e.Oqu(e.lcZ(40,13,o.totalMemory)),e.xp6(5),e.Q6J("hiddenColumns",e.DdM(15,Lp))("hideToolHeader",!0)("hasTableDetails",!1)("showGeneralActionsOnly",!0))},dependencies:[On,Wl.$,sp.W],styles:["cd-hosts[_ngcontent-%COMP%]     .nav{display:none}"]}),t})();const hy=["skipConfirmTpl"];function my(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",3)(1,"div",4)(2,"div",5),e._UZ(3,"img",6),e.TgZ(4,"h3",7),e.SDv(5,8),e.qZA(),e.TgZ(6,"div",9)(7,"h4",10),e.SDv(8,11),e.qZA(),e.TgZ(9,"div",10)(10,"button",12),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.createCluster())}),e.SDv(11,13),e.qZA(),e.TgZ(12,"button",14),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.skipClusterCreation())}),e.SDv(13,15),e.qZA()()()()()()}if(2&t){const n=e.oxw();e.xp6(3),e.Q6J("src",n.projectConstants.cephLogo,e.LSH),e.xp6(2),e.pQV(n.projectConstants.projectName),e.QtT(5)}}const Cg=function(){return["services"]};function Gg(t,i){1&t&&(e.TgZ(0,"div",29)(1,"h4",30),e.SDv(2,31),e.qZA(),e._UZ(3,"br")(4,"cd-hosts",32),e.qZA()),2&t&&(e.xp6(4),e.Q6J("hiddenColumns",e.DdM(4,Cg))("hideMaintenance",!0)("hasTableDetails",!1)("showGeneralActionsOnly",!0))}function Yg(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",29)(1,"h4",30),e.SDv(2,33),e.qZA(),e.TgZ(3,"div",34)(4,"cd-osd-form",35),e.NdJ("emitDriveGroup",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.setDriveGroup(l))})("emitDeploymentOption",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.setDeploymentOptions(l))})("emitMode",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.setDeploymentMode(l))}),e.qZA()()()}2&t&&(e.xp6(4),e.Q6J("hideTitle",!0)("hideSubmitBtn",!0))}const hS=function(){return["mon","mgr","crash","agent"]},jg=function(){return["status.running","status.size","status.last_refresh"]};function mS(t,i){1&t&&(e.TgZ(0,"div",29)(1,"h4",30),e.SDv(2,36),e.qZA(),e._UZ(3,"br")(4,"cd-services",37),e.qZA()),2&t&&(e.xp6(4),e.Q6J("hasDetails",!1)("hiddenServices",e.DdM(4,hS))("hiddenColumns",e.DdM(5,jg))("routedModal",!1))}function Nv(t,i){1&t&&(e.TgZ(0,"div",29),e._UZ(1,"cd-create-cluster-review"),e.qZA())}function Iv(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",38),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.onSkip())}),e.SDv(1,39),e.qZA()}}function $1(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",16)(1,"div",17),e.SDv(2,18),e.qZA(),e.TgZ(3,"div",19),e._UZ(4,"cd-wizard",20),e.TgZ(5,"div",21),e.ynx(6,22),e.YNc(7,Gg,5,5,"div",23),e.YNc(8,Yg,5,2,"div",23),e.YNc(9,mS,5,6,"div",23),e.YNc(10,Nv,2,0,"div",23),e.BQk(),e.qZA()(),e.TgZ(11,"div",24)(12,"button",25),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.onNextStep())}),e.SDv(13,26),e.qZA(),e.TgZ(14,"cd-back-button",27),e.NdJ("backAction",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.onPreviousStep())}),e.qZA(),e.YNc(15,Iv,2,0,"button",28),e.qZA()()}if(2&t){const n=e.oxw();e.xp6(4),e.Q6J("stepsTitle",n.stepTitles),e.xp6(2),e.Q6J("ngSwitch",null==n.currentStep?null:n.currentStep.stepIndex),e.xp6(1),e.Q6J("ngSwitchCase","1"),e.xp6(1),e.Q6J("ngSwitchCase","2"),e.xp6(1),e.Q6J("ngSwitchCase","3"),e.xp6(1),e.Q6J("ngSwitchCase","4"),e.xp6(3),e.pQV(n.showSubmitButtonLabel()),e.QtT(13),e.xp6(1),e.Q6J("name",n.showCancelButtonLabel()),e.xp6(1),e.Q6J("ngIf","Create OSDs"===n.stepTitles[n.currentStep.stepIndex-1])}}function H1(t,i){1&t&&(e.TgZ(0,"span"),e.tHW(1,40),e._UZ(2,"strong"),e.N_p(),e.qZA(),e.TgZ(3,"div",41),e.SDv(4,42),e.qZA())}let U1=(()=>{class t{constructor(n,o,l,_,v,O,P,G,K,oe){this.authStorageService=n,this.wizardStepsService=o,this.router=l,this.hostService=_,this.notificationService=v,this.actionLabels=O,this.clusterService=P,this.modalService=G,this.taskWrapper=K,this.osdService=oe,this.projectConstants=yr.$x,this.stepTitles=["Add Hosts","Create OSDs","Create Services","Review"],this.startClusterCreation=!1,this.observables=[],this.driveGroup=new Pf,this.driveGroups=[],this.selectedOption={},this.simpleDeployment=!0,this.stepsToSkip={},this.submitAction=new e.vpe,this.permissions=this.authStorageService.getPermissions(),this.currentStepSub=this.wizardStepsService.getCurrentStep().subscribe(ue=>{this.currentStep=ue}),this.currentStep.stepIndex=1}ngOnInit(){this.osdService.getDeploymentOptions().subscribe(n=>{this.deploymentOption=n,this.selectedOption={option:n.recommended_option,encrypted:!1}}),this.stepTitles.forEach(n=>{this.stepsToSkip[n]=!1})}createCluster(){this.startClusterCreation=!0}skipClusterCreation(){const n={titleText:"Warning",buttonText:"Continue",warning:!0,bodyTpl:this.skipConfirmTpl,showSubmit:!0,onSubmit:()=>{this.clusterService.updateStatus("POST_INSTALLED").subscribe({error:()=>this.modalRef.close(),complete:()=>{this.notificationService.show(Ho.k.info,"Cluster expansion skipped by user"),this.router.navigate(["/dashboard"]),this.modalRef.close()}})}};this.modalRef=this.modalService.show(le.Y,n)}onSubmit(){if(!this.stepsToSkip["Add Hosts"]){const n=new Sc.E(()=>{});this.hostService.list(n.toParams(),"false").subscribe(o=>{o.forEach(l=>{const _=l.labels.indexOf("_no_schedule",0);_>-1&&(l.labels.splice(_,1),this.observables.push(this.hostService.update(l.hostname,!0,l.labels)))}),(0,Za.D)(this.observables).pipe((0,_f.x)(()=>this.clusterService.updateStatus("POST_INSTALLED").subscribe(()=>{this.notificationService.show(Ho.k.success,"Cluster expansion was successful"),this.router.navigate(["/dashboard"])}))).subscribe({error:l=>l.preventDefault()})})}if(!this.stepsToSkip["Create OSDs"]){if(this.driveGroup){const n=this.authStorageService.getUsername();this.driveGroup.setName(`dashboard-${n}-${Xe().now()}`),this.driveGroups.push(this.driveGroup.spec)}if(this.simpleDeployment){const n=this.deploymentOption?.options[this.selectedOption.option].title,o="" + n + " deployment";this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("osd/"+yr.MQ.CREATE,{tracking_id:o}),call:this.osdService.create([this.selectedOption],o,"predefined")}).subscribe({error:l=>l.preventDefault(),complete:()=>{this.submitAction.emit()}})}else if(this.osdService.osdDevices.totalDevices>0){this.driveGroup.setFeature("encrypted",this.selectedOption.encrypted);const n=Xe().join(Xe().map(this.driveGroups,"service_id"),", ");this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("osd/"+yr.MQ.CREATE,{tracking_id:n}),call:this.osdService.create(this.driveGroups,n)}).subscribe({error:o=>o.preventDefault(),complete:()=>{this.submitAction.emit(),this.osdService.osdDevices=[]}})}}}setDriveGroup(n){this.driveGroup=n}setDeploymentOptions(n){this.selectedOption=n}setDeploymentMode(n){this.simpleDeployment=n}onNextStep(){this.wizardStepsService.isLastStep()?this.onSubmit():(this.wizardStepsService.getCurrentStep().subscribe(n=>{this.currentStep=n}),this.wizardStepsService.moveToNextStep())}onPreviousStep(){this.wizardStepsService.isFirstStep()?this.router.navigate(["/dashboard"]):this.wizardStepsService.moveToPreviousStep()}onSkip(){this.stepsToSkip[this.stepTitles[this.currentStep.stepIndex-1]]=!0,this.onNextStep()}showSubmitButtonLabel(){return this.wizardStepsService.isLastStep()?"Expand Cluster":this.actionLabels.NEXT}showCancelButtonLabel(){return this.wizardStepsService.isFirstStep()?this.actionLabels.CANCEL:this.actionLabels.BACK}ngOnDestroy(){this.currentStepSub.unsubscribe()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(Cp),e.Y36(Ee.F0),e.Y36(Wa.x),e.Y36(Ui.g),e.Y36(yr.p4),e.Y36(Bp),e.Y36(ca.Z),e.Y36(Gr.P),e.Y36(Zc))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-create-cluster"]],viewQuery:function(n,o){if(1&n&&e.Gf(hy,7),2&n){let l;e.iGM(l=e.CRH())&&(o.skipConfirmTpl=l.first)}},outputs:{submitAction:"submitAction"},decls:4,vars:2,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue;return i="Welcome to " + "\ufffd0\ufffd" + "",n="Please expand your cluster first",o="Expand Cluster",l="Skip",_="Expand Cluster",v="" + "\ufffd0\ufffd" + "",O="Add Hosts",P="Create OSDs",G="Create Services",K="Skip",oe="You are about to skip the cluster expansion process. You\u2019ll need to " + "\ufffd#2\ufffd" + "navigate through the menu to add hosts and services." + "\ufffd/#2\ufffd" + "",ue="Are you sure you want to continue?",[["class","container h-75",4,"ngIf"],["class","card",4,"ngIf"],["skipConfirmTpl",""],[1,"container","h-75"],[1,"row","h-100","justify-content-center","align-items-center"],[1,"blank-page"],["alt","Ceph",1,"img-fluid","mx-auto","d-block",3,"src"],[1,"text-center","m-2"],i,[1,"m-4"],[1,"text-center"],n,["name","expand-cluster","aria-label","Expand Cluster",1,"btn","btn-accent","m-2",3,"click"],o,["name","skip-cluster-creation","aria-label","Skip",1,"btn","btn-light",3,"click"],l,[1,"card"],[1,"card-header"],_,[1,"container-fluid"],[3,"stepsTitle"],[1,"card-body","vertical-line"],[3,"ngSwitch"],["class","ms-5",4,"ngSwitchCase"],[1,"card-footer"],["aria-label","Next",1,"btn","btn-accent","m-2","float-end",3,"click"],v,["aria-label","Close",1,"m-2","float-end",3,"name","backAction"],["class","btn btn-light m-2 me-4 float-end","id","skipStepBtn","aria-label","Skip this step",3,"click",4,"ngIf"],[1,"ms-5"],[1,"title"],O,[3,"hiddenColumns","hideMaintenance","hasTableDetails","showGeneralActionsOnly"],P,[1,"alignForm"],[3,"hideTitle","hideSubmitBtn","emitDriveGroup","emitDeploymentOption","emitMode"],G,[3,"hasDetails","hiddenServices","hiddenColumns","routedModal"],["id","skipStepBtn","aria-label","Skip this step",1,"btn","btn-light","m-2","me-4","float-end",3,"click"],K,oe,[1,"mt-4"],ue]},template:function(n,o){1&n&&(e.YNc(0,my,14,2,"div",0),e.YNc(1,$1,16,9,"div",1),e.YNc(2,H1,5,0,"ng-template",null,2,e.W1O)),2&n&&(e.Q6J("ngIf",!o.startClusterCreation),e.xp6(1),e.Q6J("ngIf",o.startClusterCreation))},dependencies:[f.O5,f.RF,f.n9,W_.W,M_,st.o,On,Kf,uf,k1],styles:[".container-fluid[_ngcontent-%COMP%]{align-items:flex-start;display:flex;padding-left:0;width:100%}cd-hosts[_ngcontent-%COMP%]     .nav{display:none}cd-osd-form[_ngcontent-%COMP%]     .card{border:0}cd-osd-form[_ngcontent-%COMP%]     .accordion{margin-left:-1.5rem}"]}),t})();var Gh=s(83608);const zg=["tree"],Vg=function(t,i,n){return[t,i,n]};function hh(t,i){if(1&t&&e._UZ(0,"i",12),2&t){const n=e.oxw();e.Q6J("ngClass",e.kEZ(1,Vg,n.icons.large,n.icons.spinner,n.icons.spin))}}const gy=function(){return["in","up"]},Fv=function(){return["down","out","destroyed"]},Lv=function(t,i){return{"badge-success":t,"badge-danger":i}};function vy(t,i){if(1&t&&(e.TgZ(0,"span",15),e._uU(1),e.qZA()),2&t){const n=e.oxw().$implicit;e.Q6J("ngClass",e.WLB(4,Lv,e.DdM(2,gy).includes(n.data.status),e.DdM(3,Fv).includes(n.data.status))),e.xp6(1),e.hij(" ",n.data.status," ")}}const yy=function(t){return{"type-osd":t}};function Gm(t,i){if(1&t&&(e.YNc(0,vy,2,7,"span",13),e.TgZ(1,"span"),e._uU(2,"\xa0"),e.qZA(),e._UZ(3,"span",14)),2&t){const n=i.$implicit;e.Q6J("ngIf",n.data.status),e.xp6(3),e.Q6J("ngClass",e.VKq(3,yy,"osd"===n.data.type))("innerHTML",n.data.name,e.oJD)}}function kv(t,i){if(1&t&&(e.TgZ(0,"div",16)(1,"legend"),e._uU(2),e.qZA(),e.TgZ(3,"div"),e._UZ(4,"cd-table-key-value",17),e.qZA()()),2&t){const n=e.oxw();e.xp6(2),e.Oqu(n.metadataTitle),e.xp6(2),e.Q6J("data",n.metadata)}}let gS=(()=>{class t{constructor(n,o){this.crushRuleService=n,this.timerService=o,this.sub=new bd.w,this.icons=Rr.P,this.loadingIndicator=!0,this.nodes=[],this.treeOptions={useVirtualScroll:!0,nodeHeight:22,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}},this.metadataKeyMap={}}ngOnInit(){this.sub=this.timerService.get(()=>this.crushRuleService.getInfo(),5e3).subscribe(n=>{this.loadingIndicator=!1,this.nodes=this.abstractTreeData(n)})}ngOnDestroy(){this.sub.unsubscribe()}abstractTreeData(n){const o=n.nodes||[],l=n.roots||[],_={};if(0===o.length)return[{name:"No nodes!"}];const v=[];return o.reverse().forEach(P=>{l.includes(P.id)&&v.push(P.id),_[P.id]=this.generateTreeLeaf(P,_)}),v.map(P=>_[P])}generateTreeLeaf(n,o){const l=n.id;this.metadataKeyMap[l]=n;const O=[],P={name:n.name+" ("+n.type+")",status:n.status,cdId:l,type:n.type};return n.children&&(n.children.sort().forEach(G=>{O.push(o[G])}),P.children=O),P}onNodeSelected(n,o){if(Jl.iM.ACTIVATE(n,o,!0),void 0!==o.data.cdId){const{name:l,type:_,status:v,...O}=this.metadataKeyMap[o.data.cdId];this.metadata=O,this.metadataTitle=l+" ("+_+")"}else delete this.metadata,delete this.metadataTitle}onUpdateData(){this.tree.treeModel.expandAll()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Gh.H),e.Y36(Ls.f))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-crushmap"]],viewQuery:function(n,o){if(1&n&&e.Gf(zg,5),2&n){let l;e.iGM(l=e.CRH())&&(o.tree=l.first)}},decls:14,vars:4,consts:function(){let i;return i="CRUSH map viewer",[[1,"row"],[1,"col-sm-12","col-lg-12"],[1,"card"],[1,"card-header"],i,[1,"card-body"],[1,"col-sm-6","col-lg-6","tree-container"],[3,"ngClass",4,"ngIf"],[3,"nodes","options","updateData"],["tree",""],["treeNodeTemplate",""],["class","col-sm-6 col-lg-6 metadata",4,"ngIf"],[3,"ngClass"],["class","badge",3,"ngClass",4,"ngIf"],[1,"node-name",3,"ngClass","innerHTML"],[1,"badge",3,"ngClass"],[1,"col-sm-6","col-lg-6","metadata"],[3,"data"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),e.SDv(4,4),e.qZA(),e.TgZ(5,"div",5)(6,"div",0)(7,"div",6),e.YNc(8,hh,1,5,"i",7),e.TgZ(9,"tree-root",8,9),e.NdJ("updateData",function(){return o.onUpdateData()}),e.YNc(11,Gm,4,5,"ng-template",null,10,e.W1O),e.qZA()(),e.YNc(13,kv,5,2,"div",11),e.qZA()()()()()),2&n&&(e.xp6(8),e.Q6J("ngIf",o.loadingIndicator),e.xp6(1),e.Q6J("nodes",o.nodes)("options",o.treeOptions),e.xp6(4),e.Q6J("ngIf",o.metadata))},dependencies:[f.mk,f.O5,bu.b,Jl.qr],styles:[".tree-container[_ngcontent-%COMP%]{height:calc(100vh - 200px)}"]}),t})(),Ey=(()=>{class t{constructor(n){this.http=n}getLogs(){return this.http.get("api/logs/all")}validateDashboardUrl(n){return this.http.get(`api/grafana/validation/${n}`)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var Sy=s(49457);let by=(()=>{class t{download(n,o){(0,Sy.saveAs)(new Blob([n]),o)}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();const B1=function(t){return[t]};function Ty(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",5),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.download("json"))}),e._UZ(1,"i",2),e.TgZ(2,"span"),e._uU(3,"JSON"),e.qZA()()}if(2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(1,B1,n.icons.json))}}function Cy(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",5),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.download())}),e._UZ(1,"i",2),e.TgZ(2,"span"),e._uU(3,"Text"),e.qZA()()}if(2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(1,B1,n.icons.text))}}let $v=(()=>{class t{constructor(n){this.textToDownloadService=n,this.title="Download",this.icons=Rr.P}download(n){this.fileName=`${this.fileName}_${(new Date).toLocaleDateString()}`,"json"===n?this.textToDownloadService.download(JSON.stringify(this.objectItem,null,2),`${this.fileName}.json`):this.textToDownloadService.download(this.textItem,`${this.fileName}.txt`)}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(by))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-download-button"]],inputs:{objectItem:"objectItem",textItem:"textItem",fileName:"fileName",title:"title"},decls:6,vars:6,consts:[["ngbDropdown","","placement","bottom-right"],["type","button","ngbDropdownToggle","",1,"btn","btn-light","dropdown-toggle-split",3,"title"],[3,"ngClass"],["ngbDropdownMenu",""],["ngbDropdownItem","",3,"click",4,"ngIf"],["ngbDropdownItem","",3,"click"]],template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"button",1),e._UZ(2,"i",2),e.qZA(),e.TgZ(3,"div",3),e.YNc(4,Ty,4,3,"button",4),e.YNc(5,Cy,4,3,"button",4),e.qZA()()),2&n&&(e.xp6(1),e.Q6J("title",o.title),e.xp6(1),e.Q6J("ngClass",e.VKq(4,B1,o.icons.download)),e.xp6(2),e.Q6J("ngIf",o.objectItem),e.xp6(1),e.Q6J("ngIf",o.textItem))},dependencies:[f.mk,f.O5,st.o,yi.jt,yi.iD,yi.Vi,yi.TH]}),t})();var Hv=s(42746);let G1=(()=>{class t{transform(n,o){if(!o)return n;o=this.escapeRegExp(o);const l=new RegExp(o,"gi");return n.match(l)?n.replace(l,"<mark>$&</mark>"):n}escapeRegExp(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275pipe=e.Yjl({name:"searchHighlight",type:t,pure:!0}),t})();function My(t,i){1&t&&e.GkF(0)}function Y1(t,i){if(1&t&&e._UZ(0,"cd-download-button",25),2&t){const n=e.oxw(5);e.Q6J("objectItem",n.clog)("textItem",n.clogText)}}function Oy(t,i){if(1&t&&e._UZ(0,"cd-copy-2-clipboard-button",26),2&t){const n=e.oxw(5);e.Q6J("source",n.clogText)("byId",!1)}}function Ay(t,i){if(1&t&&(e.TgZ(0,"div",22),e.YNc(1,Y1,1,2,"cd-download-button",23),e.YNc(2,Oy,1,2,"cd-copy-2-clipboard-button",24),e.qZA()),2&t){const n=e.oxw(4);e.xp6(1),e.Q6J("ngIf",n.showDownloadCopyButton),e.xp6(1),e.Q6J("ngIf",n.showDownloadCopyButton)}}function Dy(t,i){if(1&t&&(e.TgZ(0,"p")(1,"span",27),e._uU(2),e.ALo(3,"cdDate"),e.qZA(),e.TgZ(4,"span"),e.ALo(5,"logPriority"),e._uU(6),e.qZA(),e._UZ(7,"span",28),e.ALo(8,"searchHighlight"),e.qZA()),2&t){const n=i.$implicit,o=e.oxw(4);e.xp6(2),e.Oqu(e.lcZ(3,6,n.stamp)),e.xp6(2),e.Gre("priority ",e.lcZ(5,8,n.priority),""),e.xp6(2),e.Oqu(n.priority),e.xp6(1),e.Q6J("innerHTML",e.xi3(8,10,n.message,o.search),e.oJD)}}function Ry(t,i){1&t&&e.GkF(0)}const xy=function(t){return{"overflow-auto":t}};function wy(t,i){if(1&t&&(e.TgZ(0,"div",17),e.YNc(1,Ay,3,2,"div",18),e.TgZ(2,"div",19),e.YNc(3,Dy,9,13,"p",20),e.YNc(4,Ry,1,0,"ng-container",21),e.qZA()()),2&t){const n=e.oxw(3),o=e.MAs(4);e.xp6(1),e.Q6J("ngIf",n.clog.length&&n.showClusterLogs),e.xp6(1),e.Q6J("ngClass",e.VKq(5,xy,n.scrollable)),e.xp6(1),e.Q6J("ngForOf",n.clog),e.xp6(1),e.Q6J("ngIf",0!==n.clog.length)("ngIfElse",o)}}function Uv(t,i){if(1&t&&e.YNc(0,wy,5,7,"div",16),2&t){const n=e.oxw(2);e.Q6J("ngIf",n.clog)}}function Bv(t,i){if(1&t&&e._UZ(0,"cd-download-button",31),2&t){const n=e.oxw(5);e.Q6J("objectItem",n.audit_log)("textItem",n.auditLogText)}}function Gv(t,i){if(1&t&&e._UZ(0,"cd-copy-2-clipboard-button",26),2&t){const n=e.oxw(5);e.Q6J("source",n.auditLogText)("byId",!1)}}function Py(t,i){if(1&t&&(e.TgZ(0,"div",22),e.YNc(1,Bv,1,2,"cd-download-button",30),e.YNc(2,Gv,1,2,"cd-copy-2-clipboard-button",24),e.qZA()),2&t){const n=e.oxw(4);e.xp6(1),e.Q6J("ngIf",n.showDownloadCopyButton),e.xp6(1),e.Q6J("ngIf",n.showDownloadCopyButton)}}function vS(t,i){if(1&t&&(e.TgZ(0,"p")(1,"span",27),e._uU(2),e.ALo(3,"cdDate"),e.qZA(),e.TgZ(4,"span"),e.ALo(5,"logPriority"),e._uU(6),e.qZA(),e._UZ(7,"span",28),e.ALo(8,"searchHighlight"),e.qZA()),2&t){const n=i.$implicit,o=e.oxw(4);e.xp6(2),e.Oqu(e.lcZ(3,6,n.stamp)),e.xp6(2),e.Gre("priority ",e.lcZ(5,8,n.priority),""),e.xp6(2),e.Oqu(n.priority),e.xp6(1),e.Q6J("innerHTML",e.xi3(8,10,n.message,o.search),e.oJD)}}function Yv(t,i){1&t&&e.GkF(0)}function yS(t,i){if(1&t&&(e.TgZ(0,"div",17),e.YNc(1,Py,3,2,"div",18),e.TgZ(2,"div",29),e.YNc(3,vS,9,13,"p",20),e.YNc(4,Yv,1,0,"ng-container",21),e.qZA()()),2&t){const n=e.oxw(3),o=e.MAs(4);e.xp6(1),e.Q6J("ngIf",n.audit_log.length),e.xp6(2),e.Q6J("ngForOf",n.audit_log),e.xp6(1),e.Q6J("ngIf",0!==n.audit_log.length)("ngIfElse",o)}}function Ym(t,i){if(1&t&&e.YNc(0,yS,5,4,"div",16),2&t){const n=e.oxw(2);e.Q6J("ngIf",n.audit_log&&n.showAuditLogs)}}function jv(t,i){1&t&&(e.TgZ(0,"div"),e._UZ(1,"cd-grafana",32),e.qZA()),2&t&&(e.xp6(1),e.Q6J("grafanaPath","explore?")("type","logs"))}function zv(t,i){if(1&t&&(e.ynx(0),e.YNc(1,jv,2,2,"div",21),e.ALo(2,"async"),e.BQk()),2&t){const n=e.oxw(3),o=e.MAs(6);e.xp6(1),e.Q6J("ngIf",e.lcZ(2,2,n.promtailServiceStatus$))("ngIfElse",o)}}function j1(t,i){if(1&t&&(e.YNc(0,zv,3,4,"ng-container",21),e.ALo(1,"async")),2&t){const n=e.oxw(2),o=e.MAs(6);e.Q6J("ngIf",e.lcZ(1,2,n.showDaemonLogs&&n.lokiServiceStatus$))("ngIfElse",o)}}function Ny(t,i){if(1&t&&(e.TgZ(0,"div"),e.YNc(1,My,1,0,"ng-container",4),e.TgZ(2,"nav",5,6),e.ynx(4,7),e.TgZ(5,"a",8),e.SDv(6,9),e.qZA(),e.YNc(7,Uv,1,1,"ng-template",10),e.BQk(),e.ynx(8,11),e.TgZ(9,"a",8),e.SDv(10,12),e.qZA(),e.YNc(11,Ym,1,1,"ng-template",10),e.BQk(),e.ynx(12,13),e.TgZ(13,"a",8),e.SDv(14,14),e.qZA(),e.YNc(15,j1,2,4,"ng-template",10),e.BQk(),e.qZA(),e._UZ(16,"div",15),e.qZA()),2&t){const n=e.MAs(3),o=e.oxw(),l=e.MAs(2);e.xp6(1),e.Q6J("ngTemplateOutlet",l),e.xp6(1),e.Q6J("cdStatefulTabDefault",o.defaultTab)("hidden",!o.showNavLinks),e.xp6(14),e.Q6J("ngbNavOutlet",n)}}function mh(t,i){if(1&t&&(e.TgZ(0,"option",59),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.value),e.xp6(1),e.Oqu(n.name)}}const Om=function(t){return[t]};function Xf(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",34)(1,"div",35)(2,"div",36)(3,"label",37),e.SDv(4,38),e.qZA(),e.TgZ(5,"select",39),e.NdJ("ngModelChange",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.priority=l)})("ngModelChange",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.filterLogs())}),e.YNc(6,mh,2,2,"option",40),e.qZA()(),e.TgZ(7,"div",41)(8,"label",42),e.SDv(9,43),e.qZA(),e.TgZ(10,"div",44)(11,"span",45),e._UZ(12,"i",46),e.qZA(),e.TgZ(13,"input",47),e.NdJ("ngModelChange",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.search=l)})("keyup",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.filterLogs())}),e.qZA(),e.TgZ(14,"button",48),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.clearSearchKey())}),e._UZ(15,"i"),e.qZA()()(),e.TgZ(16,"div",41)(17,"label",49),e.SDv(18,50),e.qZA(),e.TgZ(19,"div",44)(20,"input",51,52),e.NdJ("click",function(){e.CHM(n);const l=e.MAs(21);return e.KtG(l.open())})("ngModelChange",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.selectedDate=l)})("ngModelChange",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.filterLogs())}),e.qZA(),e.TgZ(22,"button",48),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.clearDate())}),e._UZ(23,"i"),e.qZA()()(),e.TgZ(24,"div",53)(25,"label",54),e.SDv(26,55),e.qZA(),e.TgZ(27,"div",56)(28,"ngb-timepicker",57),e.NdJ("ngModelChange",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.startTime=l)})("ngModelChange",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.filterLogs())}),e.qZA(),e.TgZ(29,"span",58),e._uU(30,"\xa0\u2014\xa0"),e.qZA(),e.TgZ(31,"ngb-timepicker",57),e.NdJ("ngModelChange",function(l){e.CHM(n);const _=e.oxw(2);return e.KtG(_.endTime=l)})("ngModelChange",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.filterLogs())}),e.qZA()()()()()}if(2&t){const n=e.oxw(2);e.xp6(5),e.Q6J("ngModel",n.priority),e.xp6(1),e.Q6J("ngForOf",n.priorities),e.xp6(6),e.Q6J("ngClass",e.VKq(16,Om,n.icons.search)),e.xp6(1),e.Q6J("ngModel",n.search),e.xp6(2),e.Gre("icon-prepend ",n.icons.destroy,""),e.xp6(5),e.Q6J("maxDate",n.maxDate)("ngModel",n.selectedDate),e.xp6(3),e.Gre("icon-prepend ",n.icons.destroy,""),e.xp6(5),e.Q6J("spinners",!1)("ngModel",n.startTime),e.xp6(3),e.Q6J("spinners",!1)("ngModel",n.endTime)}}function Am(t,i){if(1&t&&e.YNc(0,Xf,32,18,"div",33),2&t){const n=e.oxw();e.Q6J("ngIf",n.showFilterTools)}}function Zg(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"span"),e.SDv(1,60),e.qZA(),e.TgZ(2,"span"),e._uU(3,"\xa0"),e.qZA(),e.TgZ(4,"a",61),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.resetFilter())}),e.SDv(5,62),e.qZA()}}function sd(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",63),e.ynx(1),e.SDv(2,64),e.BQk(),e.qZA())}let Dm=(()=>{class t{constructor(n,o,l,_){this.logsService=n,this.cephService=o,this.datePipe=l,this.ngZone=_,this.showClusterLogs=!0,this.showAuditLogs=!0,this.showDaemonLogs=!0,this.showNavLinks=!0,this.showFilterTools=!0,this.showDownloadCopyButton=!0,this.defaultTab="",this.scrollable=!1,this.icons=Rr.P,this.priorities=[{name:"Debug",value:"[DBG]"},{name:"Info",value:"[INF]"},{name:"Warning",value:"[WRN]"},{name:"Error",value:"[ERR]"},{name:"All",value:"All"}],this.priority="All",this.search="",this.startTime={hour:0,minute:0},this.endTime={hour:23,minute:59},this.maxDate={year:(new Date).getFullYear(),month:(new Date).getMonth()+1,day:(new Date).getDate()}}ngOnInit(){this.getInfo(),this.ngZone.runOutsideAngular(()=>{this.getDaemonDetails(),this.interval=window.setInterval(()=>{this.ngZone.run(()=>{this.getInfo()})},5e3)})}ngOnDestroy(){clearInterval(this.interval)}getDaemonDetails(){this.lokiServiceStatus$=this.cephService.getDaemons("loki").pipe((0,Ec.U)(n=>n.length>0&&1===n[0].status)),this.promtailServiceStatus$=this.cephService.getDaemons("promtail").pipe((0,Ec.U)(n=>n.length>0&&1===n[0].status))}getInfo(){this.logsService.getLogs().subscribe(n=>{this.contentData=n,this.clogText=this.logToText(this.contentData.clog),this.auditLogText=this.logToText(this.contentData.audit_log),this.filterLogs()})}abstractFilters(){const n=this.priority,o=this.search.toLowerCase();let l;if(this.selectedDate){const oe=this.selectedDate.month,ue=this.selectedDate.day;l=`${this.selectedDate.year}-${oe<=9?`0${oe}`:`${oe}`}-${ue<=9?`0${ue}`:`${ue}`}`}else l="";return{priority:n,key:o,yearMonthDay:l,sTime:60*(this.startTime?.hour??0)+(this.startTime?.minute??0),eTime:60*(this.endTime?.hour??23)+(this.endTime?.minute??59)}}filterExecutor(n,o){return n.filter(l=>{const _=this.datePipe.transform(l.stamp,"mediumTime"),v=parseInt(_.split(":")[0],10),O=parseInt(_.split(":")[1],10);let P,G,K;return P="All"===o.priority?l.priority:o.priority,G=o.yearMonthDay?o.yearMonthDay:l.stamp,K=60*v+O,l.priority===P&&-1!==l.message.toLowerCase().indexOf(o.key)&&-1!==l.stamp.indexOf(G)&&K>=o.sTime&&K<=o.eTime})}filterLogs(){const n=this.abstractFilters();this.clog=this.filterExecutor(this.contentData.clog,n),this.audit_log=this.filterExecutor(this.contentData.audit_log,n)}clearSearchKey(){this.search="",this.filterLogs()}clearDate(){this.selectedDate=null,this.filterLogs()}resetFilter(){return this.priority="All",this.search="",this.selectedDate=null,this.startTime={hour:0,minute:0},this.endTime={hour:23,minute:59},this.filterLogs(),!1}logToText(n){let o="";for(const l of Object.keys(n))o=o+this.datePipe.transform(n[l].stamp,"medium")+"\t"+n[l].priority+"\t"+n[l].message+"\n";return o}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ey),e.Y36(rf),e.Y36(f.uU),e.Y36(e.R0b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-logs"]],inputs:{showClusterLogs:"showClusterLogs",showAuditLogs:"showAuditLogs",showDaemonLogs:"showDaemonLogs",showNavLinks:"showNavLinks",showFilterTools:"showFilterTools",showDownloadCopyButton:"showDownloadCopyButton",defaultTab:"defaultTab",scrollable:"scrollable"},decls:7,vars:1,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue;return i="Cluster Logs",n="Audit Logs",o="Daemon Logs",l="Daemon logs",_="Priority:",v="Keyword:",O="Date:",P="Time range:",G="No log entries found. Please try to select different filter options.",K="Reset filter.",oe="Loki/Promtail service not running",ue="Please start the loki and promtail service to see these logs.",[[4,"ngIf"],["logFiltersTpl",""],["noEntriesTpl",""],["daemonLogsTpl",""],[4,"ngTemplateOutlet"],["ngbNav","","cdStatefulTab","logs",1,"nav-tabs",3,"cdStatefulTabDefault","hidden"],["nav","ngbNav"],["ngbNavItem","cluster-logs"],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","audit-logs"],n,["ngbNavItem","daemon-logs"],o,[3,"ngbNavOutlet"],["class","card bg-light mb-3",4,"ngIf"],[1,"card","bg-light","mb-3"],["class","btn-group","role","group",4,"ngIf"],[1,"card-body",3,"ngClass"],[4,"ngFor","ngForOf"],[4,"ngIf","ngIfElse"],["role","group",1,"btn-group"],["fileName","cluster_log",3,"objectItem","textItem",4,"ngIf"],[3,"source","byId",4,"ngIf"],["fileName","cluster_log",3,"objectItem","textItem"],[3,"source","byId"],[1,"timestamp"],[1,"message",3,"innerHTML"],[1,"card-body"],["fileName","audit_log",3,"objectItem","textItem",4,"ngIf"],["fileName","audit_log",3,"objectItem","textItem"],["title",l,"uid","CrAHE0iZz","grafanaStyle","two",3,"grafanaPath","type"],["class","row mb-3",4,"ngIf"],[1,"row","mb-3"],[1,"col-lg-10","d-flex"],[1,"col-sm-1","me-3"],["for","logs-priority",1,"fw-bold"],_,["id","logs-priority",1,"form-select",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],[1,"col-md-3","me-3"],["for","logs-keyword",1,"fw-bold"],v,[1,"input-group"],[1,"input-group-text"],[3,"ngClass"],["id","logs-keyword","type","text",1,"form-control",3,"ngModel","ngModelChange","keyup"],["type","button","title","Clear",1,"btn","btn-light",3,"click"],["for","logs-date",1,"fw-bold"],O,["id","logs-date","placeholder","YYYY-MM-DD","ngbDatepicker","",1,"form-control",3,"maxDate","ngModel","click","ngModelChange"],["d","ngbDatepicker"],[1,"col-md-5"],[1,"fw-bold"],P,[1,"d-flex"],[3,"spinners","ngModel","ngModelChange"],[1,"mt-2"],[3,"value"],G,["href","#",3,"click"],K,["type","info","title",oe],ue]},template:function(n,o){1&n&&(e.YNc(0,Ny,17,4,"div",0),e.YNc(1,Am,1,1,"ng-template",null,1,e.W1O),e.YNc(3,Zg,6,0,"ng-template",null,2,e.W1O),e.YNc(5,sd,3,0,"ng-template",null,3,e.W1O)),2&n&&e.Q6J("ngIf",o.contentData)},dependencies:[f.mk,f.sg,f.O5,f.tP,yi.uN,yi.Pz,yi.nv,yi.Vx,yi.tO,yi.Dy,ad.F,Zu.G,ia.s,$v,kc.m,st.o,za.b,rn.YN,rn.Kr,rn.Fj,rn.EJ,rn.JJ,rn.On,yi.Pm,yi.J4,f.Ov,Hv.e,Ve.N,G1],styles:["p[_ngcontent-%COMP%]{font-family:monospace}.card[_ngcontent-%COMP%]   .btn-group[_ngcontent-%COMP%]{margin-top:-45px;position:absolute;right:0}.card[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{display:flex}.card[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.card[_ngcontent-%COMP%]   .timestamp[_ngcontent-%COMP%]{flex-shrink:0;font-weight:700}.card[_ngcontent-%COMP%]   .priority[_ngcontent-%COMP%]{margin-left:.5rem}.card[_ngcontent-%COMP%]   .message[_ngcontent-%COMP%]{margin-left:1rem}.card[_ngcontent-%COMP%]   .err[_ngcontent-%COMP%]{color:#dc3545}.card[_ngcontent-%COMP%]   .warn[_ngcontent-%COMP%]{color:#d48200}.card[_ngcontent-%COMP%]   .info[_ngcontent-%COMP%]{color:#25828e}.card[_ngcontent-%COMP%]   .debug[_ngcontent-%COMP%]{color:#495057}  cd-logs ngb-timepicker input.ngb-tp-input{width:3.5rem!important}.card-body.overflow-auto[_ngcontent-%COMP%]{height:50vh}"]}),t})();var H_=s(7273);function jm(t,i){if(1&t&&(e.TgZ(0,"cd-helper"),e._uU(1),e.ALo(2,"upperFirst"),e.qZA()),2&t){const n=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.lcZ(2,1,n.value.long_desc||n.value.desc)," ")}}function zm(t,i){if(1&t&&(e.TgZ(0,"div",15)(1,"div",16),e._UZ(2,"input",17)(3,"label",18),e.qZA()()),2&t){const n=e.oxw().$implicit;e.xp6(2),e.s9C("id",n.value.name),e.s9C("formControlName",n.value.name),e.xp6(1),e.s9C("for",n.value.name)}}function Vm(t,i){if(1&t&&e._UZ(0,"input",22),2&t){const n=e.oxw(2).$implicit;e.s9C("id",n.value.name),e.s9C("formControlName",n.value.name)}}function um(t,i){if(1&t&&(e.TgZ(0,"option",25),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("ngValue",n),e.xp6(1),e.hij(" ",n," ")}}function Zm(t,i){if(1&t&&(e.TgZ(0,"select",23),e.YNc(1,um,2,2,"option",24),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.s9C("id",n.value.name),e.s9C("formControlName",n.value.name),e.xp6(1),e.Q6J("ngForOf",n.value.enum_allowed)}}function cm(t,i){1&t&&(e.TgZ(0,"span",26),e.SDv(1,27),e.qZA())}function Wm(t,i){1&t&&(e.TgZ(0,"span",26),e.SDv(1,28),e.qZA())}function Jm(t,i){if(1&t&&(e.TgZ(0,"div",15),e.YNc(1,Vm,1,2,"input",19),e.YNc(2,Zm,2,3,"select",20),e.YNc(3,cm,2,0,"span",21),e.YNc(4,Wm,2,0,"span",21),e.qZA()),2&t){const n=e.oxw().$implicit;e.oxw();const o=e.MAs(2),l=e.oxw();e.xp6(1),e.Q6J("ngIf",0===n.value.enum_allowed.length),e.xp6(1),e.Q6J("ngIf",n.value.enum_allowed.length>0),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(n.value.name,o,"invalidUuid")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(n.value.name,o,"pattern"))}}function Vv(t,i){1&t&&(e.TgZ(0,"span",26),e.SDv(1,30),e.qZA())}function Zv(t,i){if(1&t&&(e.TgZ(0,"span",26),e.SDv(1,31),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.xp6(1),e.pQV(n.value.max),e.QtT(1)}}function z1(t,i){if(1&t&&(e.TgZ(0,"span",26),e.SDv(1,32),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.xp6(1),e.pQV(n.value.min),e.QtT(1)}}function Wv(t,i){1&t&&(e.TgZ(0,"span",26),e.SDv(1,33),e.qZA())}function Jv(t,i){if(1&t&&(e.TgZ(0,"div",15),e._UZ(1,"input",29),e.YNc(2,Vv,2,0,"span",21),e.YNc(3,Zv,2,1,"span",21),e.YNc(4,z1,2,1,"span",21),e.YNc(5,Wv,2,0,"span",21),e.qZA()),2&t){const n=e.oxw().$implicit;e.oxw();const o=e.MAs(2),l=e.oxw();e.xp6(1),e.s9C("id",n.value.name),e.s9C("formControlName",n.value.name),e.s9C("min",n.value.min),e.s9C("max",n.value.max),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(n.value.name,o,"required")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(n.value.name,o,"max")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(n.value.name,o,"min")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(n.value.name,o,"pattern"))}}function Qv(t,i){1&t&&(e.TgZ(0,"span",26),e.SDv(1,35),e.qZA())}function Wg(t,i){1&t&&(e.TgZ(0,"span",26),e.SDv(1,36),e.qZA())}function Jg(t,i){if(1&t&&(e.TgZ(0,"div",15),e._UZ(1,"input",34),e.YNc(2,Qv,2,0,"span",21),e.YNc(3,Wg,2,0,"span",21),e.qZA()),2&t){const n=e.oxw().$implicit;e.oxw();const o=e.MAs(2),l=e.oxw();e.xp6(1),e.s9C("id",n.value.name),e.s9C("formControlName",n.value.name),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(n.value.name,o,"required")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(n.value.name,o,"pattern"))}}const Kv=function(){return["addr","str","uuid"]},Iy=function(){return["uint","int","size","secs"]};function Fy(t,i){if(1&t&&(e.TgZ(0,"div",11)(1,"label",12),e._uU(2),e.YNc(3,jm,3,3,"cd-helper",13),e.qZA(),e.YNc(4,zm,4,3,"div",14),e.YNc(5,Jm,5,4,"div",14),e.YNc(6,Jv,6,8,"div",14),e.YNc(7,Jg,4,4,"div",14),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.s9C("for",n.value.name),e.xp6(1),e.hij(" ",n.value.name," "),e.xp6(1),e.Q6J("ngIf",n.value.long_desc||n.value.desc),e.xp6(1),e.Q6J("ngIf","bool"===n.value.type),e.xp6(1),e.Q6J("ngIf",e.DdM(7,Kv).includes(n.value.type)),e.xp6(1),e.Q6J("ngIf",e.DdM(8,Iy).includes(n.value.type)),e.xp6(1),e.Q6J("ngIf","float"===n.value.type)}}function Xv(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.qZA(),e.TgZ(6,"div",7),e.YNc(7,Fy,8,9,"div",8),e.ALo(8,"keyvalue"),e.qZA(),e.TgZ(9,"div",9)(10,"cd-form-button-panel",10),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.onSubmit())}),e.qZA()()()()()}if(2&t){const n=e.oxw();e.xp6(1),e.Q6J("formGroup",n.mgrModuleForm),e.xp6(6),e.Q6J("ngForOf",e.lcZ(8,4,n.moduleOptions)),e.xp6(3),e.Q6J("form",n.mgrModuleForm)("submitText",n.actionLabels.UPDATE)}}let Ly=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O){super(),this.actionLabels=n,this.route=o,this.router=l,this.formBuilder=_,this.mgrModuleService=v,this.notificationService=O,this.moduleName="",this.moduleOptions=[]}ngOnInit(){this.route.params.subscribe(n=>{this.moduleName=decodeURIComponent(n.name);const o=[this.mgrModuleService.getOptions(this.moduleName),this.mgrModuleService.getConfig(this.moduleName)];(0,Za.D)(o).subscribe(l=>{this.moduleOptions=l[0],this.createForm(),this.mgrModuleForm.setValue(l[1]),this.loadingReady()},l=>{this.loadingError()})})}getValidators(n){const o=[];switch(n.type){case"addr":o.push(De.h.ip());break;case"uint":case"int":case"size":case"secs":o.push(rn.kI.required);break;case"str":Xe().isNumber(n.min)&&o.push(rn.kI.minLength(n.min)),Xe().isNumber(n.max)&&o.push(rn.kI.maxLength(n.max));break;case"float":o.push(rn.kI.required),o.push(De.h.decimalNumber());break;case"uuid":o.push(De.h.uuid())}return o}createForm(){const n={};Xe().forEach(this.moduleOptions,o=>{n[o.name]=[o.default_value,this.getValidators(o)]}),this.mgrModuleForm=this.formBuilder.group(n)}goToListView(){this.router.navigate(["/mgr-modules"])}onSubmit(){if(this.mgrModuleForm.pristine)return void this.goToListView();const n={};Xe().forEach(this.moduleOptions,o=>{const l=this.mgrModuleForm.get(o.name);l.dirty&&l.valid&&(n[o.name]=l.value)}),this.mgrModuleService.updateConfig(this.moduleName,n).subscribe(()=>{this.notificationService.show(Ho.k.success,"Updated options for module '" + this.moduleName + "'."),this.goToListView()},()=>{this.mgrModuleForm.setErrors({cdSubmitButton:!0})})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(Ee.gz),e.Y36(Ee.F0),e.Y36(Qi.O),e.Y36(H_.N),e.Y36(Ui.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-mgr-module-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let i,n,o,l,_,v,O,P,G;return i="Edit Manager module",n="The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8",o="The entered value needs to be a valid IP address.",l="This field is required.",_="The entered value is too high! It must be lower or equal to " + "\ufffd0\ufffd" + ".",v="The entered value is too low! It must be greater or equal to " + "\ufffd0\ufffd" + ".",O="The entered value needs to be a number.",P="This field is required.",G="The entered value needs to be a number or decimal.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","mgrModuleForm","novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],i,[1,"card-body"],["class","form-group row",4,"ngFor","ngForOf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"form-group","row"],[1,"cd-col-form-label",3,"for"],[4,"ngIf"],["class","cd-col-form-input",4,"ngIf"],[1,"cd-col-form-input"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","formControlName"],[1,"custom-control-label",3,"for"],["class","form-control","type","text",3,"id","formControlName",4,"ngIf"],["class","form-select",3,"id","formControlName",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["type","text",1,"form-control",3,"id","formControlName"],[1,"form-select",3,"id","formControlName"],[3,"ngValue",4,"ngFor","ngForOf"],[3,"ngValue"],[1,"invalid-feedback"],n,o,["type","number",1,"form-control",3,"id","formControlName","min","max"],l,_,v,O,["type","number",1,"form-control",3,"id","formControlName"],P,G]},template:function(n,o){1&n&&e.YNc(0,Xv,11,6,"div",0),2&n&&e.Q6J("cdFormLoading",o.loading)},dependencies:[f.sg,f.O5,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.wV,rn.Wl,rn.EJ,rn.JJ,rn.JL,rn.qQ,rn.Fd,rn.sg,rn.u,La.S,rl.p,Pu.y,st.o,za.b,Va.P,Os.V,f.Nd,Cu.m]}),t})();var Qg=s(61717);function V1(t,i){if(1&t&&(e.ynx(0),e._UZ(1,"cd-table-key-value",1),e.BQk()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("data",n.module_config)}}let Z1=(()=>{class t{constructor(n){this.mgrModuleService=n}ngOnChanges(){this.selection&&this.mgrModuleService.getConfig(this.selection.name).subscribe(n=>{this.module_config=n})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(H_.N))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-mgr-module-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:[[4,"ngIf"],[3,"data"]],template:function(n,o){1&n&&e.YNc(0,V1,2,1,"ng-container",0),2&n&&e.Q6J("ngIf",o.selection)},dependencies:[f.O5,bu.b]}),t})();class Qm extends Hr.o{constructor(i,n,o){super(),this.authStorageService=i,this.mgrModuleService=n,this.notificationService=o,this.columns=[],this.modules=[],this.selection=new Io.r,this.permission=this.authStorageService.getPermissions().configOpt,this.columns=[{name:"Name",prop:"name",flexGrow:1},{name:"Enabled",prop:"enabled",flexGrow:1,cellClass:"text-center",cellTransformation:Xr.e.checkIcon},{name:"Always-On",prop:"always_on",flexGrow:1,cellClass:"text-center",cellTransformation:Xr.e.checkIcon}];const l=()=>this.selection.first()&&encodeURIComponent(this.selection.first().name);this.tableActions=[{name:"Edit",permission:"update",disable:()=>!this.selection.hasSelection||0===Object.values(this.selection.first().options).length,routerLink:()=>`/mgr-modules/edit/${l()}`,icon:Rr.P.edit},{name:"Enable",permission:"update",click:()=>this.updateModuleState(),disable:()=>this.isTableActionDisabled("enabled"),icon:Rr.P.start},{name:"Disable",permission:"update",click:()=>this.updateModuleState(),disable:()=>this.getTableActionDisabledDesc(),icon:Rr.P.stop}]}getModuleList(i){this.mgrModuleService.list().subscribe(n=>{this.modules=n},()=>{i.error()})}updateSelection(i){this.selection=i}isTableActionDisabled(i){if(!this.selection.hasSelection)return!0;const n=this.selection.first();if("dashboard"===n.name||n.always_on)return!0;switch(i){case"enabled":return n.enabled;case"disabled":return!n.enabled}}getTableActionDisabledDesc(){return this.selection.first()?.always_on?"This Manager module is always on.":this.isTableActionDisabled("disabled")}updateModuleState(){if(!this.selection.hasSelection)return;let i;const n=()=>{(0,xl.H)(2e3).subscribe(()=>{this.mgrModuleService.list().subscribe(()=>{this.notificationService.suspendToasties(!1),this.blockUI.stop(),this.table.refreshBtn()},()=>{n()})})},o=this.selection.first();i=o.enabled?this.mgrModuleService.disable(o.name):this.mgrModuleService.enable(o.name),i.subscribe(()=>{},()=>{this.notificationService.suspendToasties(!0),this.blockUI.start("Reconnecting, please wait ..."),n()})}}Qm.\u0275fac=function(i){return new(i||Qm)(e.Y36(Do.j),e.Y36(H_.N),e.Y36(Ui.g))},Qm.\u0275cmp=e.Xpm({type:Qm,selectors:[["cd-mgr-module-list"]],viewQuery:function(i,n){if(1&i&&e.Gf(zo.a,7),2&i){let o;e.iGM(o=e.CRH())&&(n.table=o.first)}},features:[e.qOj],decls:4,vars:8,consts:[["columnMode","flex","selectionType","single","identifier","module",3,"autoReload","data","columns","hasDetails","setExpandedRow","updateSelection","fetchData"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"]],template:function(i,n){1&i&&(e.TgZ(0,"cd-table",0,1),e.NdJ("setExpandedRow",function(l){return n.setExpandedRow(l)})("updateSelection",function(l){return n.updateSelection(l)})("fetchData",function(l){return n.getModuleList(l)}),e._UZ(2,"cd-table-actions",2)(3,"cd-mgr-module-details",3),e.qZA()),2&i&&(e.Q6J("autoReload",!1)("data",n.modules)("columns",n.columns)("hasDetails",!0),e.xp6(2),e.Q6J("permission",n.permission)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("selection",n.expandedRow))},dependencies:[zo.a,$l.K,Z1]}),(0,Gt.gn)([(0,Qg.bH)(),(0,Gt.w6)("design:type",Object)],Qm.prototype,"blockUI",void 0);let Kg=(()=>{class t{constructor(n){this.http=n}getMonitor(){return this.http.get("api/monitor")}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function Xg(t,i){if(1&t&&(e.TgZ(0,"table",11)(1,"tbody")(2,"tr")(3,"td",12),e.SDv(4,13),e.qZA(),e.TgZ(5,"td"),e._uU(6),e.qZA()(),e.TgZ(7,"tr")(8,"td",12),e.SDv(9,14),e.qZA(),e.TgZ(10,"td"),e._uU(11),e.ALo(12,"relativeDate"),e.qZA()(),e.TgZ(13,"tr")(14,"td",12),e.SDv(15,15),e.qZA(),e.TgZ(16,"td"),e._uU(17),e.qZA()(),e.TgZ(18,"tr")(19,"td",12),e.SDv(20,16),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.qZA()(),e.TgZ(23,"tr")(24,"td",12),e.SDv(25,17),e.qZA(),e.TgZ(26,"td"),e._uU(27),e.qZA()(),e.TgZ(28,"tr")(29,"td",12),e.SDv(30,18),e.qZA(),e.TgZ(31,"td"),e._uU(32),e.qZA()(),e.TgZ(33,"tr")(34,"td",12),e.SDv(35,19),e.qZA(),e.TgZ(36,"td"),e._uU(37),e.qZA()()()()),2&t){const n=e.oxw();e.xp6(6),e.Oqu(n.mon_status.monmap.fsid),e.xp6(5),e.Oqu(e.lcZ(12,7,n.mon_status.monmap.modified)),e.xp6(6),e.Oqu(n.mon_status.monmap.epoch),e.xp6(5),e.Oqu(n.mon_status.features.quorum_con),e.xp6(5),e.Oqu(n.mon_status.features.quorum_mon),e.xp6(5),e.Oqu(n.mon_status.features.required_con),e.xp6(5),e.Oqu(n.mon_status.features.required_mon)}}let W1=(()=>{class t{constructor(n){this.monitorService=n,this.inQuorum={columns:[{prop:"name",name:"Name",cellTransformation:Xr.e.routerLink},{prop:"rank",name:"Rank"},{prop:"public_addr",name:"Public Address"},{prop:"cdOpenSessions",name:"Open Sessions",cellTransformation:Xr.e.sparkline,comparator:(o,l)=>{const _=Xe().last(o),v=Xe().last(l);return _&&v&&_!==v?_>v?1:-1:0}}]},this.notInQuorum={columns:[{prop:"name",name:"Name",cellTransformation:Xr.e.routerLink},{prop:"rank",name:"Rank"},{prop:"public_addr",name:"Public Address"}]}}refresh(){this.monitorService.getMonitor().subscribe(n=>{n.in_quorum.map(o=>(o.cdOpenSessions=o.stats.num_sessions.map(l=>l[1]),o.cdLink="/perf_counters/mon/"+o.name,o.cdParams={fromLink:"/monitor"},o)),n.out_quorum.map(o=>(o.cdLink="/perf_counters/mon/"+o.name,o.cdParams={fromLink:"/monitor"},o)),this.inQuorum.data=[...n.in_quorum],this.notInQuorum.data=[...n.out_quorum],this.mon_status=n.mon_status})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Kg))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-monitor"]],decls:15,vars:5,consts:function(){let i,n,o,l,_,v,O,P,G,K;return i="Status",n="In Quorum",o="Not In Quorum",l="Cluster ID",_="monmap modified",v="monmap epoch",O="quorum con",P="quorum mon",G="required con",K="required mon",[[1,"row"],[1,"col-lg-4"],[1,"cd-header"],i,["class","table table-striped",4,"ngIf"],[1,"col-lg-8"],[1,"in-quorum","cd-header"],n,[3,"data","columns"],o,[3,"data","columns","fetchData"],[1,"table","table-striped"],[1,"bold"],l,_,v,O,P,G,K]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"fieldset")(3,"legend",2),e.SDv(4,3),e.qZA(),e.YNc(5,Xg,38,9,"table",4),e.qZA()(),e.TgZ(6,"div",5)(7,"legend",6),e.SDv(8,7),e.qZA(),e.TgZ(9,"div"),e._UZ(10,"cd-table",8),e.qZA(),e.TgZ(11,"legend",6),e.SDv(12,9),e.qZA(),e.TgZ(13,"div")(14,"cd-table",10),e.NdJ("fetchData",function(){return o.refresh()}),e.qZA()()()()),2&n&&(e.xp6(5),e.Q6J("ngIf",o.mon_status),e.xp6(5),e.Q6J("data",o.inQuorum.data)("columns",o.inQuorum.columns),e.xp6(4),e.Q6J("data",o.notInQuorum.data)("columns",o.notInQuorum.columns))},dependencies:[f.O5,zo.a,Wf.h]}),t})();class qv{}function qg(t,i){if(1&t&&(e.TgZ(0,"span",18),e.SDv(1,19),e.qZA()),2&t){const n=e.oxw(2);e.Q6J("ngbTooltip",n.clusterWideTooltip)}}function e1(t,i){1&t&&e._UZ(0,"hr",20)}function J1(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",12)(1,"input",13),e.NdJ("change",function(){const _=e.CHM(n).$implicit,v=e.oxw();return e.KtG(v.changeValue(_))}),e.qZA(),e.TgZ(2,"label",14)(3,"strong"),e._uU(4),e.qZA(),e.YNc(5,qg,2,1,"span",15),e._UZ(6,"br"),e.TgZ(7,"span",16),e._uU(8),e.qZA()(),e.YNc(9,e1,1,0,"hr",17),e.qZA()}if(2&t){const n=i.$implicit,o=i.last;e.xp6(1),e.Q6J("checked",n.value)("indeterminate",n.indeterminate)("name",n.code)("id",n.code),e.xp6(1),e.Q6J("for",n.code),e.xp6(2),e.Oqu(n.name),e.xp6(1),e.Q6J("ngIf",n.clusterWide),e.xp6(3),e.Oqu(n.description),e.xp6(1),e.Q6J("ngIf",!o)}}let e0=(()=>{class t{constructor(n,o,l,_,v){this.activeModal=n,this.actionLabels=o,this.authStorageService=l,this.osdService=_,this.notificationService=v,this.initialSelection=[],this.osdFlagsForm=new rn.nJ({}),this.flags=[{code:"noup",name:"No Up",description:"OSDs are not allowed to start",value:!1,clusterWide:!1,indeterminate:!1},{code:"nodown",name:"No Down",description:"OSD failure reports are being ignored, such that the monitors will not mark OSDs down",value:!1,clusterWide:!1,indeterminate:!1},{code:"noin",name:"No In",description:"OSDs that were previously marked out will not be marked back in when they start",value:!1,clusterWide:!1,indeterminate:!1},{code:"noout",name:"No Out",description:"OSDs will not automatically be marked out after the configured interval",value:!1,clusterWide:!1,indeterminate:!1}],this.clusterWideTooltip="The flag has been enabled for the entire cluster.",this.permissions=this.authStorageService.getPermissions()}ngOnInit(){const n=this.selected.length;this.osdService.getFlags().subscribe(o=>{const l=this.getActivatedIndivFlags();this.flags.forEach(_=>{const v=l[_.code];o.includes(_.code)&&(_.clusterWide=!0),v===n?_.value=!0:v>0&&(_.indeterminate=!0)}),this.initialSelection=Xe().cloneDeep(this.flags)})}getActivatedIndivFlags(){const n={};return this.flags.forEach(o=>{n[o.code]=0}),[].concat(...this.selected.map(o=>o.state)).map(o=>{Object.keys(n).includes(o)&&(n[o]=n[o]+1)}),n}changeValue(n){n.value=!n.value,n.indeterminate=!1}resetSelection(){this.flags=Xe().cloneDeep(this.initialSelection)}submitAction(){const n={};this.flags.forEach(l=>{n[l.code]=l.indeterminate?null:l.value});const o=this.selected.map(l=>l.osd);this.osdService.updateIndividualFlags(n,o).subscribe(()=>{this.notificationService.show(Ho.k.success,"Updated OSD Flags"),this.activeModal.close()},()=>{this.activeModal.close()})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(Do.j),e.Y36(Zc),e.Y36(Ui.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-flags-indiv-modal"]],decls:12,vars:6,consts:function(){let i,n,o;return i="Individual OSD Flags",n="Restore previous selection",o="Cluster-wide",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["name","osdFlagsForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body","osd-modal"],["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],[1,"modal-footer"],["type","button",1,"btn","btn-light",3,"click"],n,[3,"form","showSubmit","submitText","submitActionEvent"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"checked","indeterminate","name","id","change"],["ng-class","['tc_' + key]",1,"custom-control-label",3,"for"],["class","badge badge-hdd ms-2",3,"ngbTooltip",4,"ngIf"],[1,"form-text","text-muted"],["class","m-1",4,"ngIf"],[1,"badge","badge-hdd","ms-2",3,"ngbTooltip"],o,[1,"m-1"]]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6),e.YNc(7,J1,10,9,"div",7),e.qZA(),e.TgZ(8,"div",8)(9,"button",9),e.NdJ("click",function(){return o.resetSelection()}),e.SDv(10,10),e.qZA(),e.TgZ(11,"cd-form-button-panel",11),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA()()(),e.BQk(),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.osdFlagsForm),e.xp6(3),e.Q6J("ngForOf",o.flags),e.xp6(4),e.Q6J("form",o.osdFlagsForm)("showSubmit",o.permissions.osd.update)("submitText",o.actionLabels.UPDATE))},dependencies:[f.sg,f.O5,al.z,rl.p,st.o,za.b,Os.V,rn._Y,rn.JL,rn.sg,yi._L]}),t})();var Mg=s(84333);function t0(t,i){1&t&&e._UZ(0,"hr",15)}function n0(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",10)(1,"input",11),e.NdJ("change",function(){const _=e.CHM(n).$implicit;return e.KtG(_.value=!_.value)}),e.qZA(),e.TgZ(2,"label",12)(3,"strong"),e._uU(4),e.qZA(),e._UZ(5,"br"),e.TgZ(6,"span",13),e._uU(7),e.qZA()(),e.YNc(8,t0,1,0,"hr",14),e.qZA()}if(2&t){const n=i.$implicit,o=i.last;e.xp6(1),e.Q6J("checked",n.value)("name",n.code)("id",n.code)("disabled",n.disabled),e.xp6(1),e.Q6J("for",n.code),e.xp6(2),e.Oqu(n.name),e.xp6(3),e.Oqu(n.description),e.xp6(1),e.Q6J("ngIf",!o)}}let Q1=(()=>{class t{constructor(n,o,l,_,v){this.activeModal=n,this.actionLabels=o,this.authStorageService=l,this.osdService=_,this.notificationService=v,this.osdFlagsForm=new rn.nJ({}),this.allFlags={noin:{code:"noin",name:"No In",value:!1,description:"OSDs that were previously marked out will not be marked back in when they start"},noout:{code:"noout",name:"No Out",value:!1,description:"OSDs will not automatically be marked out after the configured interval"},noup:{code:"noup",name:"No Up",value:!1,description:"OSDs are not allowed to start"},nodown:{code:"nodown",name:"No Down",value:!1,description:"OSD failure reports are being ignored, such that the monitors will not mark OSDs down"},pause:{code:"pause",name:"Pause",value:!1,description:"Pauses reads and writes"},noscrub:{code:"noscrub",name:"No Scrub",value:!1,description:"Scrubbing is disabled"},"nodeep-scrub":{code:"nodeep-scrub",name:"No Deep Scrub",value:!1,description:"Deep Scrubbing is disabled"},nobackfill:{code:"nobackfill",name:"No Backfill",value:!1,description:"Backfilling of PGs is suspended"},norebalance:{code:"norebalance",name:"No Rebalance",value:!1,description:"OSD will choose not to backfill unless PG is also degraded"},norecover:{code:"norecover",name:"No Recover",value:!1,description:"Recovery of PGs is suspended"},sortbitwise:{code:"sortbitwise",name:"Bitwise Sort",value:!1,description:"Use bitwise sort",disabled:!0},purged_snapdirs:{code:"purged_snapdirs",name:"Purged Snapdirs",value:!1,description:"OSDs have converted snapsets",disabled:!0},recovery_deletes:{code:"recovery_deletes",name:"Recovery Deletes",value:!1,description:"Deletes performed during recovery instead of peering",disabled:!0},pglog_hardlimit:{code:"pglog_hardlimit",name:"PG Log Hard Limit",value:!1,description:"Puts a hard limit on pg log length",disabled:!0}},this.unknownFlags=[],this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.osdService.getFlags().subscribe(n=>{n.forEach(o=>{this.allFlags[o]?this.allFlags[o].value=!0:this.unknownFlags.push(o)}),this.flags=Xe().toArray(this.allFlags)})}submitAction(){const n=this.flags.filter(o=>o.value).map(o=>o.code).concat(this.unknownFlags);this.osdService.updateFlags(n).subscribe(()=>{this.notificationService.show(Ho.k.success,"Updated OSD Flags"),this.activeModal.close()},()=>{this.activeModal.close()})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(Do.j),e.Y36(Zc),e.Y36(Ui.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-flags-modal"]],decls:10,vars:6,consts:function(){let i;return i="Cluster-wide OSD Flags",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["name","osdFlagsForm","novalidate","","cdFormScope","osd",3,"formGroup"],["formDir","ngForm"],[1,"modal-body","osd-modal"],["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","showSubmit","submitText","submitActionEvent"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"checked","name","id","disabled","change"],["ng-class","['tc_' + key]",1,"custom-control-label",3,"for"],[1,"form-text","text-muted"],["class","m-1",4,"ngIf"],[1,"m-1"]]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6),e.YNc(7,n0,9,8,"div",7),e.qZA(),e.TgZ(8,"div",8)(9,"cd-form-button-panel",9),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA()()(),e.BQk(),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.osdFlagsForm),e.xp6(3),e.Q6J("ngForOf",o.flags),e.xp6(2),e.Q6J("form",o.osdFlagsForm)("showSubmit",o.permissions.osd.update)("submitText",o.actionLabels.UPDATE))},dependencies:[f.sg,f.O5,al.z,rl.p,st.o,Mg.T,za.b,Os.V,rn._Y,rn.JL,rn.sg]}),t})();function A(t,i){if(1&t&&(e.TgZ(0,"cd-helper"),e._uU(1),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.xp6(1),e.hij(" ",n.long_desc,"")}}function B(t,i){if(1&t&&(e.TgZ(0,"div",4)(1,"label",5)(2,"b"),e._uU(3),e.qZA(),e._UZ(4,"br"),e.TgZ(5,"span",6),e._uU(6),e.YNc(7,A,2,1,"cd-helper",7),e.qZA()(),e.TgZ(8,"div",8)(9,"div",9),e._UZ(10,"input",10)(11,"label",11),e.qZA()()()),2&t){const n=e.oxw().$implicit;e.xp6(1),e.Q6J("for",n.name),e.xp6(2),e.Oqu(n.text),e.xp6(3),e.hij(" ",n.desc," "),e.xp6(1),e.Q6J("ngIf",n.long_desc),e.xp6(3),e.Q6J("id",n.name)("formControlName",n.name),e.xp6(1),e.Q6J("for",n.name)}}function me(t,i){if(1&t&&(e.TgZ(0,"cd-helper"),e._uU(1),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.xp6(1),e.hij(" ",n.long_desc,"")}}const _t=function(t){return[t]};function on(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",16),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2).$implicit,_=e.oxw();return e.KtG(_.resetValue(l.name))}),e._UZ(1,"i",17),e.qZA()}if(2&t){const n=e.oxw(3);e.xp6(1),e.Q6J("ngClass",e.VKq(1,_t,n.icons.erase))}}function Fn(t,i){if(1&t&&(e.TgZ(0,"span",18),e._uU(1),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.xp6(1),e.hij(" ",n.additionalTypeInfo.patternHelpText,"")}}function Tr(t,i){if(1&t&&(e.TgZ(0,"span",18),e._uU(1),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.xp6(1),e.hij(" ",n.additionalTypeInfo.patternHelpText,"")}}function Jr(t,i){if(1&t&&(e.TgZ(0,"span",18),e.SDv(1,19),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.xp6(1),e.pQV(n.maxValue),e.QtT(1)}}function hi(t,i){if(1&t&&(e.TgZ(0,"span",18),e.SDv(1,20),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.xp6(1),e.pQV(n.minValue),e.QtT(1)}}function Oo(t,i){if(1&t&&(e.TgZ(0,"div",4)(1,"label",5),e._uU(2),e._UZ(3,"br"),e.TgZ(4,"span",6),e._uU(5),e.YNc(6,me,2,1,"cd-helper",7),e.qZA()(),e.TgZ(7,"div",8)(8,"div",12),e._UZ(9,"input",13),e.YNc(10,on,2,3,"button",14),e.qZA(),e.YNc(11,Fn,2,1,"span",15),e.YNc(12,Tr,2,1,"span",15),e.YNc(13,Jr,2,1,"span",15),e.YNc(14,hi,2,1,"span",15),e.qZA()()),2&t){const n=e.oxw().$implicit,o=e.oxw();e.xp6(1),e.Q6J("for",n.name),e.xp6(1),e.hij("",n.text," "),e.xp6(3),e.hij(" ",n.desc," "),e.xp6(1),e.Q6J("ngIf",n.long_desc),e.xp6(3),e.Q6J("type",n.additionalTypeInfo.inputType)("id",n.name)("placeholder",n.additionalTypeInfo.humanReadable)("formControlName",n.name)("step",o.getStep(n.type,o.optionsForm.getValue(n.name))),e.xp6(1),e.Q6J("ngIf",o.optionsFormShowReset),e.xp6(1),e.Q6J("ngIf",o.optionsForm.showError(n.name,o.optionsFormDir,"pattern")),e.xp6(1),e.Q6J("ngIf",o.optionsForm.showError(n.name,o.optionsFormDir,"invalidUuid")),e.xp6(1),e.Q6J("ngIf",o.optionsForm.showError(n.name,o.optionsFormDir,"max")),e.xp6(1),e.Q6J("ngIf",o.optionsForm.showError(n.name,o.optionsFormDir,"min"))}}function Ao(t,i){1&t&&e._UZ(0,"hr",21)}function Bo(t,i){if(1&t&&(e.TgZ(0,"div"),e.YNc(1,B,12,7,"div",2),e.YNc(2,Oo,15,14,"div",2),e.YNc(3,Ao,1,0,"hr",3),e.qZA()),2&t){const n=i.$implicit,o=i.last;e.xp6(1),e.Q6J("ngIf","bool"===n.type),e.xp6(1),e.Q6J("ngIf","bool"!==n.type),e.xp6(1),e.Q6J("ngIf",!o)}}let Bs=(()=>{class t{constructor(n){this.configService=n,this.optionNames=[],this.optionsForm=new fu.d({}),this.optionsFormDir=new rn.F([],[]),this.optionsFormGroupName="",this.optionsFormShowReset=!0,this.icons=Rr.P,this.options=[],this.optionsFormGroup=new fu.d({})}static optionNameToText(n){const o=["mon","mgr","osd","mds","client"];return n.split("_").filter((l,_)=>0!==_||!o.includes(l)).map(l=>l.charAt(0).toUpperCase()+l.substring(1)).join(" ")}ngOnInit(){this.createForm(),this.loadStoredData()}createForm(){this.optionsForm.addControl(this.optionsFormGroupName,this.optionsFormGroup),this.optionNames.forEach(n=>{this.optionsFormGroup.addControl(n,new rn.p4(null))})}getStep(n,o){return wa.getTypeStep(n,o)}loadStoredData(){this.configService.filter(this.optionNames).subscribe(n=>{this.options=n.map(o=>{const l=this.optionsForm.get(o.name),_=wa.getTypeValidators(o);return o.additionalTypeInfo=wa.getType(o.type),o.text=t.optionNameToText(o.name),o.value=Xe().find(o.value,v=>"osd"===v.section),o.value&&l.setValue("bool"===o.additionalTypeInfo.name?"true"===o.value.value:o.value.value),_&&(o.patternHelpText=_.patternHelpText,"max"in _&&""!==_.max&&(o.maxValue=_.max),"min"in _&&""!==_.min&&(o.minValue=_.min),l.setValidators(_.validators)),o})})}saveValues(){const n={};return this.optionNames.forEach(o=>{const l=this.optionsForm.getValue(o);null!==l&&""!==l&&(n[o]={section:"osd",value:l})}),this.configService.bulkCreate({options:n})}resetValue(n){this.configService.delete(n,"osd").subscribe(()=>{this.optionsForm.get(n).reset()})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Fa.e))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-config-option"]],inputs:{optionNames:"optionNames",optionsForm:"optionsForm",optionsFormDir:"optionsFormDir",optionsFormGroupName:"optionsFormGroupName",optionsFormShowReset:"optionsFormShowReset"},decls:2,vars:2,consts:function(){let i,n,o;return i="Remove the custom configuration value. The default configuration will be inherited and used instead.",n="The entered value is too high! It must not be greater than " + "\ufffd0\ufffd" + ".",o="The entered value is too low! It must not be lower than " + "\ufffd0\ufffd" + ".",[[3,"formGroup"],[4,"ngFor","ngForOf"],["class","form-group row pt-2",4,"ngIf"],["class","my-2",4,"ngIf"],[1,"form-group","row","pt-2"],[1,"cd-col-form-label",3,"for"],[1,"text-muted"],[4,"ngIf"],[1,"cd-col-form-input"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","formControlName"],[1,"custom-control-label",3,"for"],[1,"input-group"],[1,"form-control",3,"type","id","placeholder","formControlName","step"],["class","btn btn-light","type","button","data-toggle","button","title",i,3,"click",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["type","button","data-toggle","button","title",i,1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],[1,"invalid-feedback"],n,o,[1,"my-2"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0),e.YNc(1,Bo,4,3,"div",1),e.qZA()),2&n&&(e.Q6J("formGroup",o.optionsFormGroup),e.xp6(1),e.Q6J("ngForOf",o.options))},dependencies:[f.mk,f.sg,f.O5,rn.Fj,rn.Wl,rn.JJ,rn.JL,rn.sg,rn.u,st.o,za.b,Va.P,Os.V,La.S],styles:[".custom-checkbox[_ngcontent-%COMP%]   label[_ngcontent-%COMP%], .custom-checkbox[_ngcontent-%COMP%]   input[_ngcontent-%COMP%]{cursor:pointer}.col-form-label[_ngcontent-%COMP%]{text-align:left}"]}),t})(),Ea=(()=>{class t{}return t.basicOptions=["osd_scrub_during_recovery","osd_scrub_begin_hour","osd_scrub_end_hour","osd_scrub_begin_week_day","osd_scrub_end_week_day","osd_scrub_min_interval","osd_scrub_max_interval","osd_deep_scrub_interval","osd_scrub_auto_repair","osd_max_scrubs","osd_scrub_priority","osd_scrub_sleep"],t.advancedOptions=["osd_scrub_auto_repair_num_errors","osd_debug_deep_scrub_sleep","osd_deep_scrub_keys","osd_deep_scrub_large_omap_object_key_threshold","osd_deep_scrub_large_omap_object_value_sum_threshold","osd_deep_scrub_randomize_ratio","osd_deep_scrub_stride","osd_deep_scrub_update_digest_min_age","osd_requested_scrub_priority","osd_scrub_backoff_ratio","osd_scrub_chunk_max","osd_scrub_chunk_min","osd_scrub_cost","osd_scrub_interval_randomize_ratio","osd_scrub_invalid_stats","osd_scrub_load_threshold","osd_scrub_max_preemptions","osd_shallow_scrub_chunk_max","osd_shallow_scrub_chunk_min"],t})();const pl=["basicOptionsValues"],ru=["advancedOptionsValues"];function _l(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"a",15),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.advancedEnabled=!0)}),e.SDv(1,16),e.qZA()}}function vu(t,i){if(1&t&&(e.TgZ(0,"div")(1,"h3",17),e.SDv(2,18),e.qZA(),e._UZ(3,"cd-config-option",7,19),e.qZA()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(3),e.Q6J("optionNames",n.advancedOptions)("optionsForm",n.osdPgScrubForm)("optionsFormDir",o)("optionsFormGroupName","advancedFormGroup")}}let Lu=(()=>{class t{constructor(n,o,l,_){this.activeModal=n,this.authStorageService=o,this.notificationService=l,this.actionLabels=_,this.basicOptions=Ea.basicOptions,this.advancedOptions=Ea.advancedOptions,this.advancedEnabled=!1,this.osdPgScrubForm=new fu.d({}),this.resource="PG scrub options",this.action=this.actionLabels.EDIT,this.permissions=this.authStorageService.getPermissions()}submitAction(){const n=[this.basicOptionsValues.saveValues()];this.advancedOptionsValues&&n.push(this.advancedOptionsValues.saveValues()),(0,Za.D)(n).subscribe(()=>{this.notificationService.show(Ho.k.success,"Updated PG scrub options"),this.activeModal.close()},()=>{this.activeModal.close()})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(Do.j),e.Y36(Ui.g),e.Y36(yr.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-pg-scrub-modal"]],viewQuery:function(n,o){if(1&n&&(e.Gf(pl,7),e.Gf(ru,5)),2&n){let l;e.iGM(l=e.CRH())&&(o.basicOptionsValues=l.first),e.iGM(l=e.CRH())&&(o.advancedOptionsValues=l.first)}},decls:19,vars:21,consts:function(){let i,n,o;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Advanced...",o="Advanced configuration options",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","","cdFormScope","osd",3,"formGroup"],["formDir","ngForm"],[1,"modal-body","osd-modal"],[3,"optionNames","optionsForm","optionsFormDir","optionsFormGroupName"],["basicOptionsValues",""],[1,"row"],[1,"col-sm-12"],["class","pull-right margin-right-md",3,"click",4,"ngIf"],[4,"ngIf"],[1,"modal-footer"],[3,"form","showSubmit","submitText","submitActionEvent"],[1,"pull-right","margin-right-md",3,"click"],n,[1,"page-header"],o,["advancedOptionsValues",""]]},template:function(n,o){if(1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6),e._UZ(9,"cd-config-option",7,8),e.TgZ(11,"div",9)(12,"div",10),e.YNc(13,_l,2,0,"a",11),e.qZA()(),e.YNc(14,vu,5,4,"div",12),e.qZA(),e.TgZ(15,"div",13)(16,"cd-form-button-panel",14),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.ALo(17,"titlecase"),e.ALo(18,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&n){const l=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,13,o.action))(e.lcZ(4,15,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.osdPgScrubForm),e.xp6(3),e.Q6J("optionNames",o.basicOptions)("optionsForm",o.osdPgScrubForm)("optionsFormDir",l)("optionsFormGroupName","basicFormGroup"),e.xp6(4),e.Q6J("ngIf",!o.advancedEnabled),e.xp6(1),e.Q6J("ngIf",o.advancedEnabled),e.xp6(2),e.Q6J("form",o.osdPgScrubForm)("showSubmit",o.permissions.configOpt.update)("submitText",e.lcZ(17,17,o.action)+" "+e.lcZ(18,19,o.resource))}},dependencies:[f.O5,al.z,Bs,rl.p,Mg.T,Os.V,rn._Y,rn.JL,rn.sg,f.rS,Cu.m]}),t})();function qf(t,i){if(1&t&&(e.TgZ(0,"option",22),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.name),e.xp6(1),e.hij(" ",n.text," ")}}function Md(t,i){1&t&&(e.TgZ(0,"span",23),e.SDv(1,24),e.qZA())}function Qp(t,i){if(1&t&&(e.TgZ(0,"cd-helper"),e._uU(1),e.qZA()),2&t){const n=e.oxw().$implicit;e.xp6(1),e.Oqu(n.value.desc)}}function Id(t,i){1&t&&(e.TgZ(0,"span",23),e.SDv(1,29),e.qZA())}function Kp(t,i){if(1&t&&(e.TgZ(0,"span",23),e.SDv(1,30),e.qZA()),2&t){const n=e.oxw().$implicit;e.xp6(1),e.pQV(n.value.patternHelpText),e.QtT(1)}}function gp(t,i){if(1&t&&(e.TgZ(0,"span",23),e.SDv(1,31),e.qZA()),2&t){const n=e.oxw().$implicit;e.xp6(1),e.pQV(n.value.maxValue),e.QtT(1)}}function t1(t,i){if(1&t&&(e.TgZ(0,"span",23),e.SDv(1,32),e.qZA()),2&t){const n=e.oxw().$implicit;e.xp6(1),e.pQV(n.value.minValue),e.QtT(1)}}const l2=function(t){return{required:t}};function ky(t,i){if(1&t&&(e.TgZ(0,"div",7)(1,"label",25)(2,"span",26),e._uU(3),e.qZA(),e.YNc(4,Qp,2,1,"cd-helper",27),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",28),e.YNc(7,Id,2,0,"span",13),e.YNc(8,Kp,2,1,"span",13),e.YNc(9,gp,2,1,"span",13),e.YNc(10,t1,2,1,"span",13),e.qZA()()),2&t){const n=i.$implicit,o=e.oxw(),l=e.MAs(5);e.xp6(1),e.Q6J("for",n.key),e.xp6(1),e.Q6J("ngClass",e.VKq(11,l2,o.osdRecvSpeedForm.getValue("customizePriority"))),e.xp6(1),e.hij(" ",n.value.text," "),e.xp6(1),e.Q6J("ngIf",n.value.desc),e.xp6(2),e.Q6J("id",n.key)("formControlName",n.key)("readonly",!o.osdRecvSpeedForm.getValue("customizePriority")),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.getValue("customizePriority")&&o.osdRecvSpeedForm.showError(n.key,l,"required")),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.getValue("customizePriority")&&o.osdRecvSpeedForm.showError(n.key,l,"pattern")),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.getValue("customizePriority")&&o.osdRecvSpeedForm.showError(n.key,l,"max")),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.getValue("customizePriority")&&o.osdRecvSpeedForm.showError(n.key,l,"min"))}}let mR=(()=>{class t{constructor(n,o,l,_,v,O){this.activeModal=n,this.actionLabels=o,this.authStorageService=l,this.configService=_,this.notificationService=v,this.osdService=O,this.priorities=[],this.priorityAttrs={},this.permissions=this.authStorageService.getPermissions(),this.priorities=this.osdService.osdRecvSpeedModalPriorities.KNOWN_PRIORITIES,this.osdRecvSpeedForm=new fu.d({priority:new rn.p4(null,{validators:[rn.kI.required]}),customizePriority:new rn.p4(!1)}),this.priorityAttrs={osd_max_backfills:{text:"Max Backfills",desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_max_active:{text:"Recovery Max Active",desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_max_single_start:{text:"Recovery Max Single Start",desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_sleep:{text:"Recovery Sleep",desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0}},Object.keys(this.priorityAttrs).forEach(P=>{this.osdRecvSpeedForm.addControl(P,new rn.p4(null,{validators:[rn.kI.required]}))})}ngOnInit(){this.configService.filter(Object.keys(this.priorityAttrs)).subscribe(n=>{const o=this.getCurrentValues(n);this.detectPriority(o.values,l=>{this.setPriority(l)}),this.setDescription(o.configOptions),this.setValidators(o.configOptions)})}detectPriority(n,o){const l=Xe().find(this.priorities,_=>Xe().isEqual(_.values,n));return this.osdRecvSpeedForm.controls.customizePriority.setValue(!1),l?o(l):4===Object.entries(n).length?(this.osdRecvSpeedForm.controls.customizePriority.setValue(!0),o(Object({name:"custom",text:"Custom",values:n}))):o(this.priorities[0])}getCurrentValues(n){const o={values:{},configOptions:[]};return n.forEach(l=>{o.configOptions.push(l),"value"in l?l.value.forEach(_=>{"osd"===_.section&&(o.values[l.name]=Number(_.value))}):"default"in l&&null!==l.default&&(o.values[l.name]=Number(l.default))}),o}setDescription(n){n.forEach(o=>{""!==o.desc&&(this.priorityAttrs[o.name].desc=o.desc)})}setPriority(n){const o=Xe().find(this.priorities,l=>"custom"===l.name);"custom"===n.name?o||this.priorities.push(n):o&&this.priorities.splice(this.priorities.indexOf(o),1),this.osdRecvSpeedForm.controls.priority.setValue(n.name),Object.entries(n.values).forEach(([l,_])=>{this.osdRecvSpeedForm.controls[l].setValue(_)})}setValidators(n){n.forEach(o=>{const l=wa.getTypeValidators(o);l?(l.validators.push(rn.kI.required),"max"in l&&""!==l.max&&(this.priorityAttrs[o.name].maxValue=l.max),"min"in l&&""!==l.min&&(this.priorityAttrs[o.name].minValue=l.min),this.priorityAttrs[o.name].patternHelpText=l.patternHelpText,this.osdRecvSpeedForm.controls[o.name].setValidators(l.validators)):this.osdRecvSpeedForm.controls[o.name].setValidators(rn.kI.required)})}onCustomizePriorityChange(){const n={};if(Object.keys(this.priorityAttrs).forEach(o=>{n[o]=this.osdRecvSpeedForm.getValue(o)}),this.osdRecvSpeedForm.getValue("customizePriority")){const o={name:"custom",text:"Custom",values:n};this.setPriority(o)}else this.detectPriority(n,o=>{this.setPriority(o)})}onPriorityChange(n){const o=Xe().find(this.priorities,l=>l.name===n)||this.priorities[0];this.osdRecvSpeedForm.get("customizePriority").setValue(!1),this.setPriority(o)}submitAction(){const n={};Object.keys(this.priorityAttrs).forEach(o=>{n[o]={section:"osd",value:this.osdRecvSpeedForm.getValue(o)}}),this.configService.bulkCreate({options:n}).subscribe(()=>{this.notificationService.show(Ho.k.success,"Updated OSD recovery speed priority '" + this.osdRecvSpeedForm.getValue("priority") + "'"),this.activeModal.close()},()=>{this.activeModal.close()})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(Do.j),e.Y36(Fa.e),e.Y36(Ui.g),e.Y36(Zc))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-recv-speed-modal"]],decls:24,vars:10,consts:function(){let i,n,o,l,_,v,O,P;return i="OSD Recovery Priority",n="Priority",o="Customize priority values",l="This field is required.",_="This field is required!",v="" + "\ufffd0\ufffd" + "",O="The entered value is too high! It must not be greater than " + "\ufffd0\ufffd" + ".",P="The entered value is too low! It must not be lower than " + "\ufffd0\ufffd" + ".",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["novalidate","","cdFormScope","osd",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","priority",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],["formControlName","priority","id","priority",1,"form-select",3,"change"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["formControlName","customizePriority","id","customizePriority","name","customizePriority","type","checkbox",1,"custom-control-input",3,"change"],["for","customizePriority",1,"custom-control-label"],o,["class","form-group row",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","showSubmit","submitActionEvent"],[3,"value"],[1,"invalid-feedback"],l,[1,"cd-col-form-label",3,"for"],[3,"ngClass"],[4,"ngIf"],["type","number",1,"form-control",3,"id","formControlName","readonly"],_,v,O,P]},template:function(n,o){if(1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10)(11,"select",11),e.NdJ("change",function(_){return o.onPriorityChange(_.target.value)}),e.YNc(12,qf,2,2,"option",12),e.qZA(),e.YNc(13,Md,2,0,"span",13),e.qZA()(),e.TgZ(14,"div",7)(15,"div",14)(16,"div",15)(17,"input",16),e.NdJ("change",function(){return o.onCustomizePriorityChange()}),e.qZA(),e.TgZ(18,"label",17),e.SDv(19,18),e.qZA()()()(),e.YNc(20,ky,11,13,"div",19),e.ALo(21,"keyvalue"),e.qZA(),e.TgZ(22,"div",20)(23,"cd-form-button-panel",21),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA()()(),e.BQk(),e.qZA()),2&n){const l=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.osdRecvSpeedForm),e.xp6(8),e.Q6J("ngForOf",o.priorities),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.showError("priority",l,"required")),e.xp6(7),e.Q6J("ngForOf",e.lcZ(21,8,o.priorityAttrs)),e.xp6(3),e.Q6J("form",o.osdRecvSpeedForm)("submitText",o.actionLabels.UPDATE)("showSubmit",o.permissions.configOpt.update)}},dependencies:[f.mk,f.sg,f.O5,La.S,al.z,rl.p,st.o,Mg.T,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.wV,rn.Wl,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u,f.Nd]}),t})();function gR(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,15),e.qZA())}function u2(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,16),e.qZA())}function c2(t,i){if(1&t&&(e.TgZ(0,"span",13),e.YNc(1,gR,2,0,"span",14),e.YNc(2,u2,2,0,"span",14),e.qZA()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngIf",null==n.weight.errors?null:n.weight.errors.required),e.xp6(1),e.Q6J("ngIf",(null==n.weight.errors?null:n.weight.errors.max)||(null==n.weight.errors?null:n.weight.errors.min))}}let ES=(()=>{class t{constructor(n,o,l,_){this.actionLabels=n,this.activeModal=o,this.osdService=l,this.fb=_,this.currentWeight=1}get weight(){return this.reweightForm.get("weight")}ngOnInit(){this.reweightForm=this.fb.group({weight:this.fb.control(this.currentWeight,[rn.kI.required])})}reweight(){this.osdService.reweight(this.osdId,this.reweightForm.value.weight).subscribe(()=>this.activeModal.close())}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(yi.Kz),e.Y36(Zc),e.Y36(Qi.O))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-reweight-modal"]],decls:14,vars:7,consts:function(){let i,n,o;return i="Reweight OSD: " + "\ufffd0\ufffd" + "",n="This field is required.",o="The value needs to be between 0 and 1.",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],[3,"formGroup"],[1,"modal-body"],[1,"row"],["for","weight",1,"cd-col-form-label"],[1,"cd-col-form-input"],["id","weight","type","number","step","0.1","formControlName","weight","min","0","max","1",1,"form-control",3,"value"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],[4,"ngIf"],n,o]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4)(5,"div",5)(6,"div",6)(7,"label",7),e._uU(8,"Weight"),e.qZA(),e.TgZ(9,"div",8),e._UZ(10,"input",9),e.YNc(11,c2,3,2,"span",10),e.qZA()()(),e.TgZ(12,"div",11)(13,"cd-form-button-panel",12),e.NdJ("submitActionEvent",function(){return o.reweight()}),e.qZA()()(),e.BQk(),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.osdId),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.reweightForm),e.xp6(6),e.Q6J("value",o.currentWeight),e.xp6(1),e.Q6J("ngIf",o.weight.errors),e.xp6(2),e.Q6J("form",o.reweightForm)("submitText",o.actionLabels.REWEIGHT))},dependencies:[f.O5,al.z,rl.p,st.o,za.b,Os.V,rn._Y,rn.Fj,rn.wV,rn.JJ,rn.JL,rn.qQ,rn.Fd,rn.sg,rn.u]}),t})();var $y=s(86969);let $f=(()=>{class t{constructor(n,o,l,_,v){this.activeModal=n,this.actionLabels=o,this.osdService=l,this.notificationService=_,this.joinPipe=v,this.selected=[]}ngOnInit(){this.scrubForm=new rn.nJ({})}scrub(){(0,Za.D)(this.selected.map(n=>this.osdService.scrub(n,this.deep))).subscribe(()=>{this.notificationService.show(Ho.k.success,"" + (this.deep ? "Deep scrub" : "Scrub") + " was initialized in the following OSD(s): " + this.joinPipe.transform(this.selected) + ""),this.activeModal.close()},()=>this.activeModal.close())}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(Zc),e.Y36(Ui.g),e.Y36($y.A))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-scrub-modal"]],decls:13,vars:9,consts:function(){let i,n,o,l;return i="{VAR_SELECT, select, true {Deep } other {}}",i=e.Zx4(i,{VAR_SELECT:"\ufffd0\ufffd"}),n="OSDs " + i + "Scrub",o="{VAR_SELECT, select, true {deep } other {}}",o=e.Zx4(o,{VAR_SELECT:"\ufffd0\ufffd"}),l="You are about to apply a " + o + "scrub to the OSD(s): " + "\ufffd#9\ufffd" + "" + "\ufffd1\ufffd" + "" + "\ufffd/#9\ufffd" + ".",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["name","scrubForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],l,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"]]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.qZA(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.tHW(8,7),e._UZ(9,"strong"),e.ALo(10,"join"),e.N_p(),e.qZA()(),e.TgZ(11,"div",8)(12,"cd-form-button-panel",9),e.NdJ("submitActionEvent",function(){return o.scrub()}),e.qZA()()(),e.BQk(),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.deep),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.scrubForm),e.xp6(6),e.pQV(o.deep)(e.lcZ(10,7,o.selected)),e.QtT(8),e.xp6(2),e.Q6J("form",o.scrubForm)("submitText",o.actionLabels.UPDATE))},dependencies:[al.z,rl.p,Os.V,rn._Y,rn.JL,rn.sg,$y.A]}),t})();var Hy=s(60351);function d2(t,i){if(1&t&&e._UZ(0,"cd-device-list",17),2&t){const n=e.oxw(2);e.Q6J("osdId",null==n.osd?null:n.osd.id)("hostname",null==n.selection?null:n.selection.host.name)("osdList",!0)}}function f2(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",18),2&t){const n=e.oxw(2);e.Q6J("data",null==n.osd||null==n.osd.details?null:n.osd.details.osd_map)}}function SS(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table-key-value",21),e.NdJ("fetchData",function(){e.CHM(n);const l=e.oxw(3);return e.KtG(l.refresh())}),e.qZA()}if(2&t){const n=e.oxw(3);e.Q6J("data",null==n.osd||null==n.osd.details?null:n.osd.details.osd_metadata)}}function p2(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",22),e.SDv(1,23),e.qZA())}function bS(t,i){if(1&t&&(e.YNc(0,SS,1,1,"cd-table-key-value",19),e.YNc(1,p2,2,0,"ng-template",null,20,e.W1O)),2&t){const n=e.MAs(2),o=e.oxw(2);e.Q6J("ngIf",null==o.osd||null==o.osd.details?null:o.osd.details.osd_metadata)("ngIfElse",n)}}function TS(t,i){if(1&t&&e._UZ(0,"cd-smart-list",24),2&t){const n=e.oxw(2);e.Q6J("osdId",null==n.osd?null:n.osd.id)}}function n1(t,i){if(1&t&&e._UZ(0,"cd-table-performance-counter",26),2&t){const n=e.oxw(3);e.Q6J("serviceId",null==n.osd?null:n.osd.id)}}function _2(t,i){if(1&t&&e.YNc(0,n1,1,1,"cd-table-performance-counter",25),2&t){const n=e.oxw(2);e.Q6J("ngIf",null==n.osd?null:n.osd.details)}}function h2(t,i){if(1&t&&e._UZ(0,"cd-grafana",29),2&t){const n=e.oxw(3);e.Q6J("grafanaPath","osd-device-details?var-osd=osd."+n.osd.id)("type","metrics")}}function CS(t,i){1&t&&(e.ynx(0,27),e.TgZ(1,"a",4),e.SDv(2,28),e.qZA(),e.YNc(3,h2,1,2,"ng-template",6),e.BQk())}function m2(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"nav",1,2),e.ynx(3,3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,d2,1,3,"ng-template",6),e.BQk(),e.ynx(7,7),e.TgZ(8,"a",4),e.SDv(9,8),e.qZA(),e.YNc(10,f2,1,1,"ng-template",6),e.BQk(),e.ynx(11,9),e.TgZ(12,"a",4),e.SDv(13,10),e.qZA(),e.YNc(14,bS,3,2,"ng-template",6),e.BQk(),e.ynx(15,11),e.TgZ(16,"a",4),e.SDv(17,12),e.qZA(),e.YNc(18,TS,1,1,"ng-template",6),e.BQk(),e.ynx(19,13),e.TgZ(20,"a",4),e.SDv(21,14),e.qZA(),e.YNc(22,_2,1,1,"ng-template",6),e.BQk(),e.YNc(23,CS,4,0,"ng-container",15),e.qZA(),e._UZ(24,"div",16),e.BQk()),2&t){const n=e.MAs(2),o=e.oxw();e.xp6(23),e.Q6J("ngIf",o.grafanaPermission.read),e.xp6(1),e.Q6J("ngbNavOutlet",n)}}let MS=(()=>{class t{constructor(n,o){this.osdService=n,this.authStorageService=o,this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.osd?.id!==this.selection?.id&&(this.osd=this.selection),Xe().isNumber(this.osd?.id)&&this.refresh()}refresh(){this.osdService.getDetails(this.osd.id).subscribe(n=>{this.osd.details=n})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Zc),e.Y36(Do.j))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let i,n,o,l,_,v,O,P;return i="Devices",n="Attributes (OSD map)",o="Metadata",l="Device health",_="Performance counter",v="Metadata not available",O="Performance Details",P="OSD details",[[4,"ngIf"],["ngbNav","","id","tabset-osd-details","cdStatefulTab","osd-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","devices"],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","attributes"],n,["ngbNavItem","metadata"],o,["ngbNavItem","device-health"],l,["ngbNavItem","performance-counter"],_,["ngbNavItem","performance-details",4,"ngIf"],[3,"ngbNavOutlet"],[3,"osdId","hostname","osdList"],[3,"data"],[3,"data","fetchData",4,"ngIf","ngIfElse"],["noMetaData",""],[3,"data","fetchData"],["type","warning"],v,[3,"osdId"],["serviceType","osd",3,"serviceId",4,"ngIf"],["serviceType","osd",3,"serviceId"],["ngbNavItem","performance-details"],O,["title",P,"uid","CrAHE0iZz","grafanaStyle","three",3,"grafanaPath","type"]]},template:function(n,o){1&n&&e.YNc(0,m2,25,2,"ng-container",0),2&n&&e.Q6J("ngIf",o.selection)},dependencies:[f.O5,Hy.p,yi.uN,yi.Pz,yi.nv,yi.Vx,yi.tO,yi.Dy,ad.F,Zu.G,bu.b,kc.m,Dp,Mc]}),t})();const vR=["osdUsageTpl"],Uy=["markOsdConfirmationTpl"],By=["criticalConfirmationTpl"],dm=["reweightBodyTpl"],g2=["safeToDestroyBodyTpl"],OS=["deleteOsdExtraTpl"],fm=["flagsTpl"],Yh=function(){return{read:!0}};function jh(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table",13),e.NdJ("fetchData",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.getOsdList())})("setExpandedRow",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.setExpandedRow(l))})("updateSelection",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.updateSelection(l))}),e.TgZ(1,"div",14),e._UZ(2,"cd-table-actions",15)(3,"cd-table-actions",16),e.qZA(),e._UZ(4,"cd-osd-details",17),e.qZA()}if(2&t){const n=e.oxw();e.Q6J("data",n.osds)("columns",n.columns)("hasDetails",!0)("updateSelectionOnRefresh","never"),e.xp6(2),e.Q6J("permission",n.permissions.osd)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("permission",e.DdM(11,Yh))("selection",n.selection)("tableActions",n.clusterWideActions),e.xp6(1),e.Q6J("selection",n.expandedRow)}}function AS(t,i){1&t&&e._UZ(0,"cd-grafana",19),2&t&&e.Q6J("grafanaPath","osd-overview?")("type","metrics")}function DS(t,i){1&t&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,18),e.qZA(),e.YNc(3,AS,1,2,"ng-template",5),e.BQk())}function v2(t,i){if(1&t&&(e.ynx(0),e.tHW(1,20),e._UZ(2,"strong"),e.ALo(3,"join"),e._UZ(4,"strong"),e.N_p(),e.BQk()),2&t){const n=i.markActionDescription,o=i.osdIds;e.xp6(4),e.pQV(e.lcZ(3,2,o))(n),e.QtT(1)}}function y2(t,i){if(1&t&&(e.TgZ(0,"li"),e.SDv(1,28),e.ALo(2,"join"),e.qZA()),2&t){const n=e.oxw(2).active,o=e.oxw();e.xp6(2),e.pQV(o.selection.hasSingleSelection)(e.lcZ(2,3,n))(1===n.length),e.QtT(1)}}function E2(t,i){if(1&t&&(e.TgZ(0,"li"),e.SDv(1,29),e.ALo(2,"join"),e.qZA()),2&t){const n=e.oxw(2).missingStats,o=e.oxw();e.xp6(2),e.pQV(o.selection.hasSingleSelection)(e.lcZ(2,2,n)),e.QtT(1)}}function S2(t,i){if(1&t&&(e.TgZ(0,"li"),e.SDv(1,30),e.ALo(2,"join"),e.qZA()),2&t){const n=e.oxw(2).storedPgs,o=e.oxw();e.xp6(2),e.pQV(o.selection.hasSingleSelection)(e.lcZ(2,2,n)),e.QtT(1)}}function Gy(t,i){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const n=e.oxw(2).message;e.xp6(1),e.hij(" ",n," ")}}function K1(t,i){if(1&t&&(e.TgZ(0,"div",23)(1,"cd-alert-panel",24)(2,"span"),e.SDv(3,25),e.qZA(),e._UZ(4,"br"),e.TgZ(5,"ul",26),e.YNc(6,y2,3,5,"li",27),e.YNc(7,E2,3,4,"li",27),e.YNc(8,S2,3,4,"li",27),e.YNc(9,Gy,2,1,"li",27),e.qZA()()()),2&t){const n=e.oxw(),o=n.actionDescription,l=n.active,_=n.missingStats,v=n.storedPgs,O=n.message,P=e.oxw();e.xp6(3),e.pQV(P.selection.hasSingleSelection)(o),e.QtT(3),e.xp6(3),e.Q6J("ngIf",l.length>0),e.xp6(1),e.Q6J("ngIf",_.length>0),e.xp6(1),e.Q6J("ngIf",v.length>0),e.xp6(1),e.Q6J("ngIf",O)}}function b2(t,i){if(1&t&&(e.TgZ(0,"div",23)(1,"cd-alert-panel",31)(2,"span"),e.SDv(3,32),e.qZA()()()),2&t){const n=e.oxw(2);e.xp6(3),e.pQV(n.selection.hasSingleSelection),e.QtT(3)}}function RS(t,i){if(1&t&&(e.YNc(0,K1,10,6,"div",21),e.YNc(1,b2,4,1,"div",21),e.ynx(2),e.tHW(3,22),e._UZ(4,"strong"),e.ALo(5,"join"),e._UZ(6,"strong"),e.N_p(),e.BQk()),2&t){const n=i.safeToPerform,o=i.actionDescription,l=i.osdIds;e.Q6J("ngIf",!n),e.xp6(1),e.Q6J("ngIf",n),e.xp6(5),e.pQV(e.lcZ(5,4,l))(o),e.QtT(3)}}function T2(t,i){if(1&t&&(e.TgZ(0,"span",35),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.Oqu(n)}}function C2(t,i){if(1&t&&(e.TgZ(0,"span",36),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.Oqu(n)}}function xS(t,i){if(1&t&&(e.YNc(0,T2,2,1,"span",33),e.YNc(1,C2,2,1,"span",34)),2&t){const n=i.row;e.Q6J("ngForOf",n.cdClusterFlags),e.xp6(1),e.Q6J("ngForOf",n.cdIndivFlags)}}function wS(t,i){if(1&t&&e._UZ(0,"cd-usage-bar",37),2&t){const n=i.row,o=e.oxw();e.Q6J("title","osd "+n.osd)("total",n.stats.stat_bytes)("used",n.stats.stat_bytes_used)("warningThreshold",o.osdSettings.nearfull_ratio)("errorThreshold",o.osdSettings.full_ratio)}}function r0(t,i){1&t&&(e.ynx(0,38)(1,39),e.TgZ(2,"div",40)(3,"div",41),e._UZ(4,"input",42),e.TgZ(5,"label",43),e.SDv(6,44),e.qZA()()(),e.BQk()()),2&t&&e.Q6J("formGroup",i.form)}let PS=(()=>{class t extends Hr.o{static collectStates(n){const o=[n.in?"in":"out"];return n.up?o.push("up"):n.state.includes("destroyed")?o.push("destroyed"):o.push("down"),o}constructor(n,o,l,_,v,O,P,G,K,oe){super(),this.authStorageService=n,this.osdService=o,this.dimlessBinaryPipe=l,this.modalService=_,this.urlBuilder=v,this.router=O,this.taskWrapper=P,this.actionLabels=G,this.notificationService=K,this.orchService=oe,this.icons=Rr.P,this.osdSettings=new qv,this.selection=new Io.r,this.osds=[],this.disabledFlags=["sortbitwise","purged_snapdirs","recovery_deletes","pglog_hardlimit"],this.indivFlagNames=["noup","nodown","noin","noout"],this.actionOrchFeatures={create:[Jc.OSD_CREATE],delete:[Jc.OSD_DELETE]},this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:Rr.P.add,click:()=>this.router.navigate([this.urlBuilder.getCreate()]),disable:ue=>this.getDisable("create",ue),canBePrimary:ue=>!ue.hasSelection},{name:this.actionLabels.EDIT,permission:"update",icon:Rr.P.edit,click:()=>this.editAction()},{name:this.actionLabels.FLAGS,permission:"update",icon:Rr.P.flag,click:()=>this.configureFlagsIndivAction(),disable:()=>!this.hasOsdSelected},{name:this.actionLabels.SCRUB,permission:"update",icon:Rr.P.analyse,click:()=>this.scrubAction(!1),disable:()=>!this.hasOsdSelected,canBePrimary:ue=>ue.hasSelection},{name:this.actionLabels.DEEP_SCRUB,permission:"update",icon:Rr.P.deepCheck,click:()=>this.scrubAction(!0),disable:()=>!this.hasOsdSelected},{name:this.actionLabels.REWEIGHT,permission:"update",click:()=>this.reweight(),disable:()=>!this.hasOsdSelected||!this.selection.hasSingleSelection,icon:Rr.P.reweight},{name:this.actionLabels.MARK_OUT,permission:"update",click:()=>this.showConfirmationModal("out",this.osdService.markOut),disable:()=>this.isNotSelectedOrInState("out"),icon:Rr.P.left},{name:this.actionLabels.MARK_IN,permission:"update",click:()=>this.showConfirmationModal("in",this.osdService.markIn),disable:()=>this.isNotSelectedOrInState("in"),icon:Rr.P.right},{name:this.actionLabels.MARK_DOWN,permission:"update",click:()=>this.showConfirmationModal("down",this.osdService.markDown),disable:()=>this.isNotSelectedOrInState("down"),icon:Rr.P.down},{name:this.actionLabels.MARK_LOST,permission:"delete",click:()=>this.showCriticalConfirmationModal("Mark","OSD lost","marked lost",ue=>this.osdService.safeToDestroy(JSON.stringify(ue)),"is_safe_to_destroy",this.osdService.markLost),disable:()=>this.isNotSelectedOrInState("up"),icon:Rr.P.flatten},{name:this.actionLabels.PURGE,permission:"delete",click:()=>this.showCriticalConfirmationModal("Purge","OSD","purged",ue=>this.osdService.safeToDestroy(JSON.stringify(ue)),"is_safe_to_destroy",ue=>(this.selection=new Io.r,this.osdService.purge(ue))),disable:()=>this.isNotSelectedOrInState("up"),icon:Rr.P.erase},{name:this.actionLabels.DESTROY,permission:"delete",click:()=>this.showCriticalConfirmationModal("destroy","OSD","destroyed",ue=>this.osdService.safeToDestroy(JSON.stringify(ue)),"is_safe_to_destroy",ue=>(this.selection=new Io.r,this.osdService.destroy(ue))),disable:()=>this.isNotSelectedOrInState("up"),icon:Rr.P.destroyCircle},{name:this.actionLabels.DELETE,permission:"delete",click:()=>this.delete(),disable:ue=>this.getDisable("delete",ue),icon:Rr.P.destroy}]}ngOnInit(){this.clusterWideActions=[{name:"Flags",icon:Rr.P.flag,click:()=>this.configureFlagsAction(),permission:"read",visible:()=>this.permissions.osd.read},{name:"Recovery Priority",icon:Rr.P.deepCheck,click:()=>this.configureQosParamsAction(),permission:"read",visible:()=>this.permissions.configOpt.read},{name:"PG scrub",icon:Rr.P.analyse,click:()=>this.configurePgScrubAction(),permission:"read",visible:()=>this.permissions.configOpt.read}],this.columns=[{prop:"id",name:"ID",flexGrow:1,cellTransformation:Xr.e.executing,customTemplateConfig:{valueClass:"bold"}},{prop:"host.name",name:"Host"},{prop:"collectedStates",name:"Status",flexGrow:1,cellTransformation:Xr.e.badge,customTemplateConfig:{map:{in:{class:"badge-success"},up:{class:"badge-success"},down:{class:"badge-danger"},out:{class:"badge-danger"},destroyed:{class:"badge-danger"}}}},{prop:"tree.device_class",name:"Device class",flexGrow:1.2,cellTransformation:Xr.e.badge,customTemplateConfig:{map:{hdd:{class:"badge-hdd"},ssd:{class:"badge-ssd"}}}},{prop:"stats.numpg",name:"PGs",flexGrow:1},{prop:"stats.stat_bytes",name:"Size",flexGrow:1,pipe:this.dimlessBinaryPipe},{prop:"state",name:"Flags",cellTemplate:this.flagsTpl},{prop:"stats.usage",name:"Usage",cellTemplate:this.osdUsageTpl},{prop:"stats_history.out_bytes",name:"Read bytes",cellTransformation:Xr.e.sparkline},{prop:"stats_history.in_bytes",name:"Write bytes",cellTransformation:Xr.e.sparkline},{prop:"stats.op_r",name:"Read ops",cellTransformation:Xr.e.perSecond},{prop:"stats.op_w",name:"Write ops",cellTransformation:Xr.e.perSecond}],this.orchService.status().subscribe(n=>this.orchStatus=n),this.osdService.getOsdSettings().pipe((0,Zf.q)(1)).subscribe(n=>{this.osdSettings=n})}getDisable(n,o){if("delete"===n){if(!o.hasSelection)return!0;if(Xe().some(this.getSelectedOsds(),_=>{const v=Xe().get(_,"operational_status");return"deleting"===v||"unmanaged"===v}))return!0}return this.orchService.getTableActionDisableDesc(this.orchStatus,this.actionOrchFeatures[n])}getSelectedOsdIds(){const n=this.osds.map(o=>o.id);return this.selection.selected.map(o=>o.id).filter(o=>n.includes(o)).sort()}getSelectedOsds(){return this.osds.filter(n=>!Xe().isUndefined(n)&&this.getSelectedOsdIds().includes(n.id))}get hasOsdSelected(){return this.getSelectedOsdIds().length>0}updateSelection(n){this.selection=n}isNotSelectedOrInState(n){const o=this.getSelectedOsds();if(0===o.length)return!0;switch(n){case"in":return o.some(l=>1===l.in);case"out":return o.some(l=>1!==l.in);case"down":return o.some(l=>1!==l.up);case"up":return o.some(l=>1===l.up)}}getOsdList(){const n=[this.osdService.getList(),this.osdService.getFlags()];(0,Za.D)(n).subscribe(o=>{this.osds=o[0].map(l=>{l.collectedStates=t.collectStates(l),l.stats_history.out_bytes=l.stats_history.op_out_bytes.map(v=>v[1]),l.stats_history.in_bytes=l.stats_history.op_in_bytes.map(v=>v[1]),l.stats.usage=l.stats.stat_bytes_used/l.stats.stat_bytes,l.cdIsBinary=!0,l.cdIndivFlags=l.state.filter(v=>this.indivFlagNames.includes(v)),l.cdClusterFlags=o[1].filter(v=>!this.disabledFlags.includes(v));const _=Xe().get(l,"operational_status","unmanaged");return"unmanaged"!==_&&"working"!==_&&(l.cdExecuting=_),l})})}editAction(){const n=Xe().filter(this.osds,["id",this.selection.first().id]).pop();this.modalService.show(ae.X,{titleText:"Edit OSD: " + n.id + "",fields:[{type:"text",name:"deviceClass",value:n.tree.device_class,label:"Device class",required:!0}],submitButtonText:"Edit OSD",onSubmit:o=>{this.osdService.update(n.id,o.deviceClass).subscribe(()=>{this.notificationService.show(Ho.k.success,"Updated OSD '" + n.id + "'"),this.getOsdList()})}})}scrubAction(n){if(!this.hasOsdSelected)return;const o={selected:this.getSelectedOsdIds(),deep:n};this.bsModalRef=this.modalService.show($f,o)}configureFlagsAction(){this.bsModalRef=this.modalService.show(Q1)}configureFlagsIndivAction(){const n={selected:this.getSelectedOsds()};this.bsModalRef=this.modalService.show(e0,n)}showConfirmationModal(n,o){const l=this.getSelectedOsdIds();this.bsModalRef=this.modalService.show(le.Y,{titleText:"Mark OSD " + n + "",buttonText:"Mark " + n + "",bodyTpl:this.markOsdConfirmationTpl,bodyContext:{markActionDescription:n,osdIds:l},onSubmit:()=>{(0,Za.D)(this.getSelectedOsdIds().map(_=>o.call(this.osdService,_))).subscribe(()=>this.bsModalRef.close())}})}reweight(){const n=this.osds.filter(o=>o.id===this.selection.first().id).pop();this.bsModalRef=this.modalService.show(ES,{currentWeight:n.weight,osdId:n.id})}delete(){const n=new fu.d({preserve:new rn.p4(!1)});this.showCriticalConfirmationModal("delete","OSD","deleted",o=>this.osdService.safeToDelete(JSON.stringify(o)),"is_safe_to_delete",o=>(this.selection=new Io.r,this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("osd/"+yr.MQ.DELETE,{svc_id:o}),call:this.osdService.delete(o,n.value.preserve,!0)})),!0,n,this.deleteOsdExtraTpl)}showCriticalConfirmationModal(n,o,l,_,v,O,P=!1,G,K){_(this.getSelectedOsdIds()).subscribe(oe=>{const ue=this.modalService.show(Go.M,{actionDescription:n,itemDescription:o,bodyTemplate:this.criticalConfirmationTpl,bodyContext:{safeToPerform:oe[v],message:oe.message,active:oe.active,missingStats:oe.missing_stats,storedPgs:oe.stored_pgs,actionDescription:l,osdIds:this.getSelectedOsdIds()},childFormGroup:G,childFormGroupTemplate:K,submitAction:()=>{const pe=(0,Za.D)(this.getSelectedOsdIds().map(ye=>O.call(this.osdService,ye)));P?pe.subscribe({error:()=>{this.getOsdList(),ue.close()},complete:()=>ue.close()}):pe.subscribe(()=>{this.getOsdList(),ue.close()},()=>ue.close())}})})}configureQosParamsAction(){this.bsModalRef=this.modalService.show(mR)}configurePgScrubAction(){this.bsModalRef=this.modalService.show(Lu,void 0,{size:"lg"})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(Zc),e.Y36(Wl.$),e.Y36(ca.Z),e.Y36(Qn.F),e.Y36(Ee.F0),e.Y36(Gr.P),e.Y36(yr.p4),e.Y36(Ui.g),e.Y36(td))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-osd-list"]],viewQuery:function(n,o){if(1&n&&(e.Gf(vR,7),e.Gf(Uy,7),e.Gf(By,7),e.Gf(dm,5),e.Gf(g2,5),e.Gf(OS,5),e.Gf(fm,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.osdUsageTpl=l.first),e.iGM(l=e.CRH())&&(o.markOsdConfirmationTpl=l.first),e.iGM(l=e.CRH())&&(o.criticalConfirmationTpl=l.first),e.iGM(l=e.CRH())&&(o.reweightBodyTpl=l.first),e.iGM(l=e.CRH())&&(o.safeToDestroyBodyTpl=l.first),e.iGM(l=e.CRH())&&(o.deleteOsdExtraTpl=l.first),e.iGM(l=e.CRH())&&(o.flagsTpl=l.first)}},features:[e._Bn([{provide:Qn.F,useValue:new Qn.F("osd")}]),e.qOj],decls:18,vars:2,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke;return i="OSDs List",n="Overall Performance",o="OSD list",l="" + "[\ufffd#2\ufffd|\ufffd#4\ufffd]" + "OSD(s) " + "\ufffd0\ufffd" + "" + "[\ufffd/#2\ufffd|\ufffd/#4\ufffd]" + " will be marked " + "[\ufffd#2\ufffd|\ufffd#4\ufffd]" + "" + "\ufffd1\ufffd" + "" + "[\ufffd/#2\ufffd|\ufffd/#4\ufffd]" + " if you proceed.",l=e.Zx4(l),_="" + "[\ufffd#4\ufffd|\ufffd#6\ufffd]" + "OSD " + "\ufffd0\ufffd" + "" + "[\ufffd/#4\ufffd|\ufffd/#6\ufffd]" + " will be " + "[\ufffd#4\ufffd|\ufffd#6\ufffd]" + "" + "\ufffd1\ufffd" + "" + "[\ufffd/#4\ufffd|\ufffd/#6\ufffd]" + " if you proceed.",_=e.Zx4(_),v="{VAR_SELECT, select, true {OSD is} other {OSDs are}}",v=e.Zx4(v,{VAR_SELECT:"\ufffd0\ufffd"}),O=" The " + v + " not safe to be " + "\ufffd1\ufffd" + "! ",P="{VAR_SELECT, select, true {} other {{INTERPOLATION} : }}",P=e.Zx4(P,{VAR_SELECT:"\ufffd0\ufffd",INTERPOLATION:"\ufffd1\ufffd"}),G="{VAR_SELECT, select, true {it} other {them}}",G=e.Zx4(G,{VAR_SELECT:"\ufffd2\ufffd"}),K=" " + P + " Some PGs are currently mapped to " + G + ". ",oe="{VAR_SELECT, select, true {} other {{INTERPOLATION} : }}",oe=e.Zx4(oe,{VAR_SELECT:"\ufffd0\ufffd",INTERPOLATION:"\ufffd1\ufffd"}),ue=" " + oe + " There are no reported stats and not all PGs are active and clean. ",pe="{VAR_SELECT, select, true {OSD} other {{INTERPOLATION} : OSDs }}",pe=e.Zx4(pe,{VAR_SELECT:"\ufffd0\ufffd",INTERPOLATION:"\ufffd1\ufffd"}),ye=" " + pe + " still store some PG data and not all PGs are active and clean. ",Ue="{VAR_SELECT, select, true {OSD is} other {OSDs are}}",Ue=e.Zx4(Ue,{VAR_SELECT:"\ufffd0\ufffd"}),xe=" The " + Ue + " safe to destroy without reducing data durability. ",ke="Preserve OSD ID(s) for replacement.",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","",4,"ngIf"],[3,"ngbNavOutlet"],["markOsdConfirmationTpl",""],["criticalConfirmationTpl",""],["flagsTpl",""],["osdUsageTpl",""],["deleteOsdExtraTpl",""],["selectionType","multiClick",3,"data","columns","hasDetails","updateSelectionOnRefresh","fetchData","setExpandedRow","updateSelection"],[1,"table-actions","btn-toolbar"],["id","osd-actions",1,"btn-group",3,"permission","selection","tableActions"],["dropDownOnly","Cluster-wide configuration","btnColor","light","id","cluster-wide-actions",1,"btn-group",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],n,["title",o,"uid","lo02I1Aiz","grafanaStyle","four",3,"grafanaPath","type"],l,["class","danger mb-3",4,"ngIf"],_,[1,"danger","mb-3"],["type","warning"],O,[1,"mb-0","ps-4"],[4,"ngIf"],K,ue,ye,["type","info"],xe,["class","badge badge-hdd me-1",4,"ngFor","ngForOf"],["class","badge badge-info me-1",4,"ngFor","ngForOf"],[1,"badge","badge-hdd","me-1"],[1,"badge","badge-info","me-1"],[3,"title","total","used","warningThreshold","errorThreshold"],[3,"formGroup"],["formGroupName","child"],[1,"form-group"],[1,"custom-control","custom-checkbox"],["type","checkbox","name","preserve","id","preserve","formControlName","preserve",1,"custom-control-input"],["for","preserve",1,"custom-control-label"],ke]},template:function(n,o){if(1&n&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,jh,5,12,"ng-template",5),e.BQk(),e.YNc(6,DS,4,0,"ng-container",6),e.qZA(),e._UZ(7,"div",7),e.YNc(8,v2,5,4,"ng-template",null,8,e.W1O),e.YNc(10,RS,7,6,"ng-template",null,9,e.W1O),e.YNc(12,xS,2,2,"ng-template",null,10,e.W1O),e.YNc(14,wS,1,5,"ng-template",null,11,e.W1O),e.YNc(16,r0,7,1,"ng-template",null,12,e.W1O)),2&n){const l=e.MAs(1);e.xp6(6),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngbNavOutlet",l)}},dependencies:[f.sg,f.O5,yi.uN,yi.Pz,yi.nv,yi.Vx,yi.tO,yi.Dy,fc.O,ad.F,Zu.G,zo.a,$l.K,st.o,za.b,Va.P,Os.V,rn.Wl,rn.JJ,rn.JL,rn.sg,rn.u,rn.x0,MS,$y.A]}),t})();var pm=s(11656);let r1=(()=>{class t extends Hr.o{constructor(n){super(),this.prometheusService=n,this.isPrometheusConfigured=!1,this.isAlertmanagerConfigured=!1}ngOnInit(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.isAlertmanagerConfigured=!0}),this.prometheusService.ifPrometheusConfigured(()=>{this.isPrometheusConfigured=!0})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(pm.Q))},t.\u0275dir=e.lG2({type:t,features:[e.qOj]}),t})();var i1=s(61355);let o0=(()=>{class t{constructor(n){this.notificationService=n}sendNotifications(n){n.forEach(o=>this.notificationService.show(o))}convertToCustomAlerts(n){return Xe().uniqWith(n.map(o=>({status:Xe().isObject(o.status)?o.status.state:this.getPrometheusNotificationStatus(o),name:o.labels.alertname,url:o.generatorURL,description:o.annotations.description,fingerprint:Xe().isObject(o.status)&&o.fingerprint})),Xe().isEqual)}getPrometheusNotificationStatus(n){const o=n.status;return"firing"===o?"active":o}convertAlertToNotification(n){return new i1.T(this.formatType(n.status),`${n.name} (${n.status})`,this.appendSourceLink(n,n.description),void 0,"Prometheus")}formatType(n){return Ho.k[Xe().findKey({error:["firing","active"],info:["suppressed","unprocessed"],success:["resolved"]},l=>l.includes(n))]}appendSourceLink(n,o){return`${o} <a href="${n.url}" target="_blank"><i class="${Rr.P.lineChart}"></i></a>`}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(Ui.g))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})(),Km=(()=>{class t{constructor(n,o){this.alertFormatter=n,this.prometheusService=o,this.canAlertsBeNotified=!1,this.alerts=[],this.rules=[]}getAlerts(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getAlerts().subscribe(n=>this.handleAlerts(n),n=>{[404,504].includes(n.status)&&this.prometheusService.disableAlertmanagerConfig()})})}getRules(){this.prometheusService.ifPrometheusConfigured(()=>{this.prometheusService.getRules("alerting").subscribe(n=>{this.rules=n.groups.reduce((o,l)=>o.concat(l.rules.map(_=>(_.group=l.name,_))),[])})})}refresh(){this.getAlerts(),this.getRules()}handleAlerts(n){this.canAlertsBeNotified&&this.notifyOnAlertChanges(n,this.alerts),this.activeAlerts=Xe().reduce(n,(o,l)=>"active"===l.status.state?++o:o,0),this.activeCriticalAlerts=Xe().reduce(n,(o,l)=>"active"===l.status.state&&"critical"===l.labels.severity?++o:o,0),this.activeWarningAlerts=Xe().reduce(n,(o,l)=>"active"===l.status.state&&"warning"===l.labels.severity?++o:o,0),this.alerts=n.reverse().sort((o,l)=>o.labels.severity.localeCompare(l.labels.severity)),this.canAlertsBeNotified=!0}notifyOnAlertChanges(n,o){const l=this.getChangedAlerts(this.alertFormatter.convertToCustomAlerts(n),this.alertFormatter.convertToCustomAlerts(o)),v=Xe().filter(l,O=>"suppressed"!==O.status).map(O=>this.alertFormatter.convertAlertToNotification(O));this.alertFormatter.sendNotifications(v)}getChangedAlerts(n,o){return Xe().differenceWith(n,o,Xe().isEqual).concat(this.getVanishedAlerts(n,o))}getVanishedAlerts(n,o){return Xe().differenceWith(o,n,(l,_)=>l.fingerprint===_.fingerprint).map(l=>(l.status="resolved",l))}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(o0),e.LFG(pm.Q))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function NS(t,i){if(1&t&&(e.tHW(0,3,1),e._UZ(1,"small",10),e.N_p()),2&t){const n=e.oxw();e.xp6(1),e.pQV(n.prometheusAlertService.activeCriticalAlerts),e.QtT(0)}}function IS(t,i){if(1&t&&(e.tHW(0,3,2),e._UZ(1,"small",11),e.N_p()),2&t){const n=e.oxw();e.xp6(1),e.pQV(n.prometheusAlertService.activeWarningAlerts),e.QtT(0)}}const s0=function(){return{exact:!0}};let a0=(()=>{class t{constructor(n){this.prometheusAlertService=n}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Km))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-prometheus-tabs"]],decls:12,vars:8,consts:function(){let i,n,o;return i="Alerts",n="Silences",o="Active Alerts " + "\ufffd*4:1\ufffd\ufffd#1:1\ufffd" + "" + "\ufffd0:1\ufffd" + "" + "[\ufffd/#1:1\ufffd\ufffd/*4:1\ufffd|\ufffd/#1:2\ufffd\ufffd/*5:2\ufffd]" + "" + "\ufffd*5:2\ufffd\ufffd#1:2\ufffd" + "" + "\ufffd0:2\ufffd" + "" + "[\ufffd/#1:1\ufffd\ufffd/*4:1\ufffd|\ufffd/#1:2\ufffd\ufffd/*5:2\ufffd]" + "",o=e.Zx4(o),[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/monitoring/active-alerts","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],o,["class","badge badge-danger ms-1",4,"ngIf"],["class","badge badge-warning ms-1",4,"ngIf"],["routerLink","/monitoring/alerts","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],i,["routerLink","/monitoring/silences","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],n,[1,"badge","badge-danger","ms-1"],[1,"badge","badge-warning","ms-1"]]},template:function(n,o){1&n&&(e.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),e.tHW(3,3),e.YNc(4,NS,2,1,"small",4),e.YNc(5,IS,2,1,"small",5),e.N_p(),e.qZA()(),e.TgZ(6,"li",1)(7,"a",6),e.SDv(8,7),e.qZA()(),e.TgZ(9,"li",1)(10,"a",8),e.SDv(11,9),e.qZA()()()),2&n&&(e.xp6(2),e.Q6J("routerLinkActiveOptions",e.DdM(5,s0)),e.xp6(2),e.Q6J("ngIf",o.prometheusAlertService.activeCriticalAlerts>0),e.xp6(1),e.Q6J("ngIf",o.prometheusAlertService.activeWarningAlerts>0),e.xp6(2),e.Q6J("routerLinkActiveOptions",e.DdM(6,s0)),e.xp6(3),e.Q6J("routerLinkActiveOptions",e.DdM(7,s0)))},dependencies:[f.O5,Ee.rH,Ee.Od]}),t})();const FS=["externalLinkTpl"];function LS(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",3),e.tHW(1,4),e._UZ(2,"cd-doc",5),e.N_p(),e.qZA())}function kS(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",9),2&t){const n=e.oxw(2);e.Q6J("renderObjects",!0)("hideEmpty",!0)("appendParentKey",!1)("data",n.expandedRow)("customCss",n.customCss)("autoReload",!1)}}function $S(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table",6),e.NdJ("setExpandedRow",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.setExpandedRow(l))})("updateSelection",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.updateSelection(l))}),e._UZ(1,"cd-table-actions",7),e.YNc(2,kS,1,6,"cd-table-key-value",8),e.qZA()}if(2&t){const n=e.oxw();e.Q6J("data",n.prometheusAlertService.alerts)("columns",n.columns)("forceIdentifier",!0)("customCss",n.customCss)("hasDetails",!0),e.xp6(1),e.Q6J("permission",n.permission)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("ngIf",n.expandedRow)}}const O2=function(t){return[t]};function A2(t,i){if(1&t&&(e.TgZ(0,"a",10),e._UZ(1,"i",11),e._uU(2," Source"),e.qZA()),2&t){const n=i.value,o=e.oxw();e.Q6J("href",n,e.LSH),e.xp6(1),e.Q6J("ngClass",e.VKq(2,O2,o.icons.lineChart))}}let R2=(()=>{class t extends r1{constructor(n,o,l,_){super(_),this.authStorageService=n,this.prometheusAlertService=o,this.urlBuilder=l,this.selection=new Io.r,this.icons=Rr.P,this.permission=this.authStorageService.getPermissions().prometheus,this.tableActions=[{permission:"create",canBePrimary:v=>v.hasSingleSelection,disable:v=>!v.hasSingleSelection||v.first().cdExecuting,icon:Rr.P.add,routerLink:()=>"/monitoring"+this.urlBuilder.getCreateFrom(this.selection.first().fingerprint),name:"Create Silence"}]}ngOnInit(){super.ngOnInit(),this.columns=[{name:"Name",prop:"labels.alertname",cellClass:"fw-bold",flexGrow:2},{name:"Summary",prop:"annotations.summary",flexGrow:3},{name:"Severity",prop:"labels.severity",flexGrow:1,cellTransformation:Xr.e.badge,customTemplateConfig:{map:{critical:{class:"badge-danger"},warning:{class:"badge-warning"}}}},{name:"State",prop:"status.state",flexGrow:1,cellTransformation:Xr.e.badge,customTemplateConfig:{map:{active:{class:"badge-info"},unprocessed:{class:"badge-warning"},suppressed:{class:"badge-dark"}}}},{name:"Started",prop:"startsAt",cellTransformation:Xr.e.timeAgo,flexGrow:1},{name:"URL",prop:"generatorURL",flexGrow:1,sortable:!1,cellTemplate:this.externalLinkTpl}]}updateSelection(n){this.selection=n}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(Km),e.Y36(Qn.F),e.Y36(pm.Q))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-active-alert-list"]],viewQuery:function(n,o){if(1&n&&e.Gf(FS,7),2&n){let l;e.iGM(l=e.CRH())&&(o.externalLinkTpl=l.first)}},features:[e._Bn([{provide:Qn.F,useValue:new Qn.F("silences")}]),e.qOj],decls:5,vars:2,consts:function(){let i;return i="To see all active Prometheus alerts, please provide the URL to the API of Prometheus' Alertmanager as described in the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + ".",[["type","info",4,"ngIf"],["identifier","fingerprint","selectionType","single",3,"data","columns","forceIdentifier","customCss","hasDetails","setExpandedRow","updateSelection",4,"ngIf"],["externalLinkTpl",""],["type","info"],i,["section","prometheus"],["identifier","fingerprint","selectionType","single",3,"data","columns","forceIdentifier","customCss","hasDetails","setExpandedRow","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"renderObjects","hideEmpty","appendParentKey","data","customCss","autoReload",4,"ngIf"],["cdTableDetail","",3,"renderObjects","hideEmpty","appendParentKey","data","customCss","autoReload"],["target","_blank",3,"href"],[3,"ngClass"]]},template:function(n,o){1&n&&(e._UZ(0,"cd-prometheus-tabs"),e.YNc(1,LS,3,0,"cd-alert-panel",0),e.YNc(2,$S,3,9,"cd-table",1),e.YNc(3,A2,3,4,"ng-template",null,2,e.W1O)),2&n&&(e.xp6(1),e.Q6J("ngIf",!o.isAlertmanagerConfigured),e.xp6(1),e.Q6J("ngIf",o.isAlertmanagerConfigured))},dependencies:[f.mk,f.O5,Zu.G,Ff.K,zo.a,bu.b,$l.K,a0]}),t})();var HS=s(94088);function x2(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",2),e.tHW(1,3),e._UZ(2,"cd-doc",4),e.N_p(),e.qZA())}function w2(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",7),2&t){const n=e.oxw(2);e.Q6J("data",n.expandedRow)("renderObjects",!0)("hideKeys",n.hideKeys)}}function P2(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table",5),e.NdJ("setExpandedRow",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.setExpandedRow(l))})("updateSelection",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.updateSelection(l))}),e.YNc(1,w2,1,3,"cd-table-key-value",6),e.qZA()}if(2&t){const n=e.oxw();e.Q6J("data",n.prometheusAlertService.rules)("columns",n.columns)("selectionType","single")("hasDetails",!0),e.xp6(1),e.Q6J("ngIf",n.expandedRow)}}let N2=(()=>{class t extends r1{constructor(n,o){super(o),this.prometheusAlertService=n,this.selection=new Io.r,this.hideKeys=["alerts","type"]}ngOnInit(){super.ngOnInit(),this.columns=[{prop:"name",name:"Name",cellClass:"fw-bold",flexGrow:2},{prop:"labels.severity",name:"Severity",flexGrow:1,cellTransformation:Xr.e.badge,customTemplateConfig:{map:{critical:{class:"badge-danger"},warning:{class:"badge-warning"}}}},{prop:"group",name:"Group",flexGrow:1,cellTransformation:Xr.e.badge},{prop:"duration",name:"Duration",pipe:new HS.u,flexGrow:1},{prop:"query",name:"Query",isHidden:!0,flexGrow:1},{prop:"annotations.summary",name:"Summary",flexGrow:3}]}updateSelection(n){this.selection=n}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Km),e.Y36(pm.Q))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-rules-list"]],features:[e.qOj],decls:3,vars:2,consts:function(){let i;return i="To see all configured Prometheus alerts, please provide the URL to the API of Prometheus as described in the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + ".",[["type","info",4,"ngIf"],[3,"data","columns","selectionType","hasDetails","setExpandedRow","updateSelection",4,"ngIf"],["type","info"],i,["section","prometheus"],[3,"data","columns","selectionType","hasDetails","setExpandedRow","updateSelection"],["cdTableDetail","",3,"data","renderObjects","hideKeys",4,"ngIf"],["cdTableDetail","",3,"data","renderObjects","hideKeys"]]},template:function(n,o){1&n&&(e._UZ(0,"cd-prometheus-tabs"),e.YNc(1,x2,3,0,"cd-alert-panel",0),e.YNc(2,P2,2,5,"cd-table",1)),2&n&&(e.xp6(1),e.Q6J("ngIf",!o.isPrometheusConfigured),e.xp6(1),e.Q6J("ngIf",o.isPrometheusConfigured))},dependencies:[f.O5,Zu.G,Ff.K,zo.a,bu.b,a0]}),t})();var Yy=s(26504);let jy=(()=>{class t{constructor(){this.valueAttributePath={alertname:"name",instance:"alerts.0.labels.instance",job:"alerts.0.labels.job",severity:"labels.severity"}}singleMatch(n,o){return this.multiMatch([n],o)}multiMatch(n,o){if(!n.some(l=>l.isRegex))return n.forEach(l=>{o=this.getMatchedRules(l,o)}),this.describeMatch(o)}getMatchedRules(n,o){const l=this.getAttributePath(n.name);return o.filter(_=>Xe().get(_,l)===n.value)}describeMatch(n){let o=0;return n.forEach(l=>o+=l.alerts.length),{status:this.getMatchText(n.length,o),cssClass:o?"has-success":"has-warning"}}getAttributePath(n){return this.valueAttributePath[n]}getMatchText(n,o){const l={noRule:"Your matcher seems to match no currently defined rule or active alert.",noAlerts:"no active alerts",alert:"1 active alert",alerts:"" + o + " active alerts",rule:"Matches 1 rule",rules:"Matches " + n + " rules"};return n?"" + (n > 1 ? l.rules : l.rule) + " with " + (o ? o > 1 ? l.alerts : l.alert : l.noAlerts) + ".":l.noRule}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})(),I2=(()=>{class t{calculateDuration(n,o){const l=+n,_=+o,v=this.getDuration(Math.abs(l-_));return l>_?"-"+v:v}getDuration(n){const o=new Date(n),l=o.getUTCHours(),_=o.getUTCMinutes(),O=(P,G)=>P&&P+G;return[O(Math.floor(n/864e5),"d"),O(l,"h"),O(_,"m")].filter(P=>P).join(" ")}calculateDate(n,o,l){const _=+n;if(Xe().isNaN(_))return;const v=this.getDurationMs(o)*(l?-1:1);return new Date(_+v)}getDurationMs(n){return 6e4*(60*(24*this.getNumbersFromString(n,"d")+this.getNumbersFromString(n,"h"))+this.getNumbersFromString(n,"m"))}getNumbersFromString(n,o){const l=n.match(new RegExp(`[0-9 ]+${o}`,"i"));return l?parseInt(l[0],10):0}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function F2(t,i){if(1&t&&(e.TgZ(0,"option",28),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.hij(" ",n," ")}}function L2(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function k2(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function $2(t,i){if(1&t&&(e.TgZ(0,"div",32)(1,"span"),e._uU(2),e.qZA()()),2&t){const n=e.oxw();e.Gre("cd-col-form-offset ",n.matcherMatch.cssClass,""),e.xp6(1),e.Gre("text-muted ",n.matcherMatch.cssClass,""),e.xp6(1),e.hij(" ",n.matcherMatch.status," ")}}let US=(()=>{class t{constructor(n,o,l,_){this.formBuilder=n,this.silenceMatcher=o,this.activeModal=l,this.actionLabels=_,this.submitAction=new e.vpe,this.editMode=!1,this.nameAttributes=["alertname","instance","job","severity"],this.possibleValues=[],this.matcherMatch=void 0,this.valueClick=new Di.xQ,this.valueFocus=new Di.xQ,this.search=v=>(0,Pi.T)(v.pipe((0,cs.b)(200),(0,Yo.x)()),this.valueFocus,this.valueClick.pipe((0,y.h)(()=>!this.typeahead.isPopupOpen()))).pipe((0,Ec.U)(O=>(""===O?this.possibleValues:this.possibleValues.filter(P=>P.toLowerCase().indexOf(O.toLowerCase())>-1)).slice(0,10))),this.createForm(),this.subscribeToChanges()}createForm(){this.form=this.formBuilder.group({name:[null,[rn.kI.required]],value:[{value:"",disabled:!0},[rn.kI.required]],isRegex:new rn.p4(!1)})}subscribeToChanges(){this.form.get("name").valueChanges.subscribe(n=>{null!==n?(this.setPossibleValues(n),this.form.get("value").enable()):this.form.get("value").disable()}),this.form.get("value").valueChanges.subscribe(n=>{const o=this.form.value;o.value=n,this.matcherMatch=this.silenceMatcher.singleMatch(o,this.rules)})}setPossibleValues(n){this.possibleValues=Xe().sortedUniq(this.rules.map(o=>Xe().get(o,this.silenceMatcher.getAttributePath(n))).filter(o=>o))}getMode(){return this.editMode?this.actionLabels.EDIT:this.actionLabels.ADD}preFillControls(n){this.form.setValue(n)}onSubmit(){this.submitAction.emit(this.form.value),this.activeModal.close()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Qi.O),e.Y36(jy),e.Y36(yi.Kz),e.Y36(yr.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-silence-matcher-modal"]],viewQuery:function(n,o){if(1&n&&e.Gf(yi.dR,7),2&n){let l;e.iGM(l=e.CRH())&&(o.typeahead=l.first)}},outputs:{submitAction:"submitAction"},decls:32,vars:11,consts:function(){let i,n,o,l,_,v,O,P;return i="{VAR_SELECT, select, true {Edit} other {Add}}",i=e.Zx4(i,{VAR_SELECT:"\ufffd0\ufffd"}),n="" + i + " Matcher",o="Name",l="-- Select an attribute to match against --",_="Value",v="Use regular expression",O="This field is required!",P="This field is required!",[[3,"modalRef"],[1,"modal-title"],n,[1,"modal-content"],["novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],o,[1,"cd-col-form-input"],["id","name","formControlName","name","name","name",1,"form-select"],[3,"ngValue"],l,[3,"value",4,"ngFor","ngForOf"],["class","help-block",4,"ngIf"],["for","value",1,"cd-col-form-label","required"],_,["id","value","type","text","formControlName","value",1,"form-control",3,"ngbTypeahead","focus","click"],["instance","ngbTypeahead"],["id","match-state",3,"class",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","isRegex","name","is-regex","id","is-regex",1,"custom-control-input"],["for","is-regex",1,"custom-control-label"],v,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[3,"value"],[1,"help-block"],O,P,["id","match-state"]]},template:function(n,o){if(1&n&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.qZA(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10)(11,"select",11)(12,"option",12),e.SDv(13,13),e.qZA(),e.YNc(14,F2,2,2,"option",14),e.qZA(),e.YNc(15,L2,2,0,"span",15),e.qZA()(),e.TgZ(16,"div",7)(17,"label",16),e.SDv(18,17),e.qZA(),e.TgZ(19,"div",10)(20,"input",18,19),e.NdJ("focus",function(_){return o.valueFocus.next(_.target.value)})("click",function(_){return o.valueClick.next(_.target.value)}),e.qZA(),e.YNc(22,k2,2,0,"span",15),e.qZA(),e.YNc(23,$2,3,7,"div",20),e.qZA(),e.TgZ(24,"div",7)(25,"div",21)(26,"div",22),e._UZ(27,"input",23),e.TgZ(28,"label",24),e.SDv(29,25),e.qZA()()()()(),e.TgZ(30,"div",26)(31,"cd-form-button-panel",27),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.qZA()()(),e.BQk(),e.qZA()),2&n){const l=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.editMode),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.form),e.xp6(8),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.nameAttributes),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",l,"required")),e.xp6(5),e.Q6J("ngbTypeahead",o.search),e.xp6(2),e.Q6J("ngIf",o.form.showError("value",l,"required")),e.xp6(1),e.Q6J("ngIf",o.form.getValue("value")&&!o.form.getValue("isRegex")&&o.matcherMatch),e.xp6(8),e.Q6J("form",o.form)("submitText",o.getMode())}},dependencies:[f.sg,f.O5,al.z,rl.p,st.o,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.Wl,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u,yi.dR]}),t})();var BS=s(52266);function GS(t,i){if(1&t&&(e.TgZ(0,"i",54),e._uU(1,"~"),e.qZA()),2&t){const n=e.oxw(2).$implicit;e.Q6J("ngbTooltip",n.tooltip)}}function YS(t,i){1&t&&(e.TgZ(0,"i",55),e._uU(1,"="),e.qZA())}function jS(t,i){if(1&t&&(e.TgZ(0,"span",51),e.YNc(1,GS,2,1,"i",52),e.YNc(2,YS,2,0,"i",53),e.qZA()),2&t){const n=e.oxw().$implicit,o=e.oxw().matcher;e.xp6(1),e.Q6J("ngIf",o[n.attribute]),e.xp6(1),e.Q6J("ngIf",!o[n.attribute])}}function zS(t,i){if(1&t&&(e.ynx(0),e._UZ(1,"input",56),e.BQk()),2&t){const n=e.oxw().$implicit,o=e.oxw(),l=o.index,_=o.matcher;e.xp6(1),e.hYB("id","matcher-",n.attribute,"-",l,""),e.Q6J("value",_[n.attribute])}}function VS(t,i){if(1&t&&(e.ynx(0),e.YNc(1,jS,3,2,"span",50),e.YNc(2,zS,2,3,"ng-container",7),e.BQk()),2&t){const n=i.$implicit;e.xp6(1),e.Q6J("ngIf","isRegex"===n.attribute),e.xp6(1),e.Q6J("ngIf","isRegex"!==n.attribute)}}const l0=function(t){return[t]};function ZS(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",46),e.YNc(1,VS,3,2,"ng-container",34),e.TgZ(2,"button",47),e.NdJ("click",function(){const _=e.CHM(n).index,v=e.oxw();return e.KtG(v.showMatcherModal(_))}),e._UZ(3,"i",38),e.qZA(),e.TgZ(4,"button",48),e.NdJ("click",function(){const _=e.CHM(n).index,v=e.oxw();return e.KtG(v.deleteMatcher(_))}),e._UZ(5,"i",38),e.qZA()(),e._UZ(6,"span",49)}if(2&t){const n=i.index,o=e.oxw();e.xp6(1),e.Q6J("ngForOf",o.matcherConfig),e.xp6(1),e.MGl("id","matcher-edit-",n,""),e.xp6(1),e.Q6J("ngClass",e.VKq(5,l0,o.icons.edit)),e.xp6(1),e.MGl("id","matcher-delete-",n,""),e.xp6(1),e.Q6J("ngClass",e.VKq(7,l0,o.icons.trash))}}function zy(t,i){1&t&&(e.TgZ(0,"cd-helper"),e.SDv(1,57),e.qZA())}function Vy(t,i){1&t&&(e.TgZ(0,"span",58),e.SDv(1,59),e.qZA())}function Og(t,i){1&t&&(e.TgZ(0,"span",58),e.SDv(1,60),e.qZA())}function H2(t,i){1&t&&(e.TgZ(0,"span",58),e.SDv(1,61),e.qZA())}function U2(t,i){1&t&&(e.TgZ(0,"span",58),e.SDv(1,62),e.qZA())}function o1(t,i){1&t&&(e.TgZ(0,"span",58),e.SDv(1,63),e.qZA())}const yR=function(t,i){return{"text-warning":t,"text-danger":i}};function Zy(t,i){if(1&t&&(e.TgZ(0,"h5",38)(1,"strong"),e.SDv(2,64),e.qZA()()),2&t){e.oxw();const n=e.MAs(4);e.Q6J("ngClass",e.WLB(1,yR,!n.submitted,n.submitted))}}function ER(t,i){1&t&&e.GkF(0)}const WS=function(t,i){return{index:t,matcher:i}};function JS(t,i){if(1&t&&(e.TgZ(0,"span"),e.YNc(1,ER,1,0,"ng-container",65),e.qZA()),2&t){const n=i.$implicit,o=i.index;e.oxw();const l=e.MAs(1);e.xp6(1),e.Q6J("ngTemplateOutlet",l)("ngTemplateOutletContext",e.WLB(2,WS,o,n))}}function SR(t,i){if(1&t&&(e.TgZ(0,"div",66)(1,"span"),e._uU(2),e.qZA()()),2&t){const n=e.oxw();e.Gre("cd-col-form-offset ",n.matcherMatch.cssClass,""),e.xp6(1),e.Gre("text-muted ",n.matcherMatch.cssClass,""),e.xp6(1),e.hij(" ",n.matcherMatch.status," ")}}function Sl(t,i){if(1&t&&e._UZ(0,"cd-date-time-picker",67),2&t){const n=e.oxw();e.Q6J("control",n.form.get("startsAt"))("hasSeconds",!1)}}function B2(t,i){if(1&t&&e._UZ(0,"cd-date-time-picker",67),2&t){const n=e.oxw();e.Q6J("control",n.form.get("endsAt"))("hasSeconds",!1)}}const G2=function(t){return{"btn-warning":t}};let s1=(()=>{class t{constructor(n,o,l,_,v,O,P,G,K,oe,ue){this.router=n,this.authStorageService=o,this.formBuilder=l,this.prometheusService=_,this.notificationService=v,this.route=O,this.timeDiff=P,this.modalService=G,this.silenceMatcher=K,this.actionLabels=oe,this.succeededLabels=ue,this.icons=Rr.P,this.matchName="",this.matchValue="",this.recreate=!1,this.edit=!1,this.resource="silence",this.matchers=[],this.matcherMatch=void 0,this.matcherConfig=[{tooltip:"Attribute name",attribute:"name"},{tooltip:"Regular expression",attribute:"isRegex"},{tooltip:"Value",attribute:"value"}],this.datetimeFormat="YYYY-MM-DD HH:mm",this.isNavigate=!0,this.init()}init(){this.chooseMode(),this.authenticate(),this.createForm(),this.setupDates(),this.getData()}chooseMode(){this.edit=this.router.url.startsWith("/monitoring/silences/edit"),this.recreate=this.router.url.startsWith("/monitoring/silences/recreate"),this.action=this.edit?this.actionLabels.EDIT:this.recreate?this.actionLabels.RECREATE:this.actionLabels.CREATE}authenticate(){if(this.permission=this.authStorageService.getPermissions().prometheus,!this.permission.read||!(this.edit?this.permission.update:this.permission.create))throw new Yy._2}createForm(){const n=De.h.custom("format",o=>!(""===o||Nt()(o,this.datetimeFormat).isValid()));this.form=this.formBuilder.group({startsAt:["",[rn.kI.required,n]],duration:["2h",[rn.kI.min(1)]],endsAt:["",[rn.kI.required,n]],createdBy:[this.authStorageService.getUsername(),[rn.kI.required]],comment:[null,[rn.kI.required]]},{validators:De.h.custom("matcherRequired",()=>0===this.matchers.length)})}setupDates(){const n=Nt()().format(this.datetimeFormat);this.form.silentSet("startsAt",n),this.updateDate(),this.subscribeDateChanges()}updateDate(n){const o=Nt()(this.form.getValue(n?"endsAt":"startsAt"),this.datetimeFormat).toDate(),l=this.timeDiff.calculateDate(o,this.form.getValue("duration"),n);if(l){const _=Nt()(l).format(this.datetimeFormat);this.form.silentSet(n?"startsAt":"endsAt",_)}}subscribeDateChanges(){this.form.get("startsAt").valueChanges.subscribe(()=>{this.onDateChange()}),this.form.get("duration").valueChanges.subscribe(()=>{this.updateDate()}),this.form.get("endsAt").valueChanges.subscribe(()=>{this.onDateChange(!0)})}onDateChange(n){const o=Nt()(this.form.getValue("startsAt"),this.datetimeFormat),l=Nt()(this.form.getValue("endsAt"),this.datetimeFormat);o.isBefore(l)?this.updateDuration():this.updateDate(n)}updateDuration(){const n=Nt()(this.form.getValue("startsAt"),this.datetimeFormat).toDate(),o=Nt()(this.form.getValue("endsAt"),this.datetimeFormat).toDate();this.form.silentSet("duration",this.timeDiff.calculateDuration(n,o))}getData(){this.getRules(),this.getModeSpecificData()}getRules(){return this.prometheusService.ifPrometheusConfigured(()=>this.prometheusService.getRules().subscribe(n=>{this.rules=n.groups.reduce((o,l)=>Xe().concat(o,l.rules),[])},()=>{this.prometheusService.disablePrometheusConfig(),this.rules=[]}),()=>{this.rules=[],this.notificationService.show(Ho.k.info,"Please add your Prometheus host to the dashboard configuration and refresh the page",void 0,void 0,"Prometheus")}),this.rules}getModeSpecificData(){this.route.params.subscribe(n=>{n.id&&(this.edit||this.recreate?this.prometheusService.getSilences().subscribe(o=>{const l=Xe().find(o,["id",n.id]);Xe().isUndefined(l)||this.fillFormWithSilence(l)}):this.prometheusService.getAlerts().subscribe(o=>{const l=Xe().find(o,["fingerprint",n.id]);Xe().isUndefined(l)||this.fillFormByAlert(l)}))})}fillFormWithSilence(n){this.id=n.id,this.edit&&(["startsAt","endsAt"].forEach(o=>this.form.silentSet(o,Nt()(n[o]).format(this.datetimeFormat))),this.updateDuration()),["createdBy","comment"].forEach(o=>this.form.silentSet(o,n[o])),this.matchers=n.matchers,this.validateMatchers()}validateMatchers(){this.rules?(this.matcherMatch=this.silenceMatcher.multiMatch(this.matchers,this.rules),this.form.markAsDirty(),this.form.updateValueAndValidity()):window.setTimeout(()=>this.validateMatchers(),100)}fillFormByAlert(n){this.setMatcher({name:"alertname",value:n.labels.alertname,isRegex:!1})}setMatcher(n,o){Xe().isNumber(o)?this.matchers[o]=n:this.matchers.push(n),this.validateMatchers()}showMatcherModal(n){const l=this.modalService.show(US).componentInstance;l.rules=this.rules,Xe().isNumber(n)&&(l.editMode=!0,l.preFillControls(this.matchers[n])),l.submitAction.subscribe(_=>{this.setMatcher(_,n)})}deleteMatcher(n){this.matchers.splice(n,1),this.validateMatchers()}submit(n){this.form.invalid||this.prometheusService.setSilence(this.getSubmitData()).subscribe(o=>{n&&(n.silenceId=o.body.silenceId),this.isNavigate&&this.router.navigate(["/monitoring/silences"]),this.notificationService.show(Ho.k.success,this.getNotificationTile(this.matchers),void 0,void 0,"Prometheus"),this.matchers=[]},()=>this.form.setErrors({cdSubmitButton:!0}))}getSubmitData(){const n=this.form.value;return delete n.duration,n.startsAt=Nt()(n.startsAt,this.datetimeFormat).toISOString(),n.endsAt=Nt()(n.endsAt,this.datetimeFormat).toISOString(),n.matchers=this.matchers,this.edit&&(n.id=this.id),n}getNotificationTile(n){let o;o=this.edit?this.succeededLabels.EDITED:this.recreate?this.succeededLabels.RECREATED:this.succeededLabels.CREATED;let l="";for(const _ of n)l=l.concat(` ${_.name} - ${_.value},`);return`${o} ${this.resource} for ${l.slice(0,-1)}`}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ee.F0),e.Y36(Do.j),e.Y36(Qi.O),e.Y36(pm.Q),e.Y36(Ui.g),e.Y36(Ee.gz),e.Y36(I2),e.Y36(ca.Z),e.Y36(jy),e.Y36(yr.p4),e.Y36(yr.aX))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-prometheus-form"]],decls:71,vars:30,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke,we;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Creator",o="Comment",l="Start time",_="If the start time lies in the past the creation time will be used",v="Duration",O="End time",P="Matchers",G="Add matcher",K="Edit",oe="Delete",ue="Editing a silence will expire the old silence and recreate it as a new silence",pe="This field is required!",ye="This field is required!",Ue="This field is required!",xe="This field is required!",ke="This field is required!",we="A silence requires at least one matcher",[["matcherTpl",""],[1,"cd-col-form"],["name","form","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],i,[4,"ngIf"],[1,"card-body"],[1,"form-group","row"],["for","created-by",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],["formControlName","createdBy","id","created-by","name","created-by","type","text",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","comment",1,"cd-col-form-label","required"],o,["formControlName","comment","id","comment","name","comment","type","text",1,"form-control"],["for","starts-at",1,"cd-col-form-label"],[1,"required"],l,_,["formControlName","startsAt","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["ps","ngbPopover"],["for","duration",1,"cd-col-form-label","required"],v,["formControlName","duration","id","duration","name","duration","type","text",1,"form-control"],["for","ends-at",1,"cd-col-form-label","required"],O,["formControlName","endsAt","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["pe","ngbPopover"],P,[1,"cd-col-form-offset"],[3,"ngClass",4,"ngIf"],[4,"ngFor","ngForOf"],[1,"row"],[1,"col-12"],["type","button","id","add-matcher",1,"btn","btn-light","float-end","my-3",3,"ngClass","click"],[3,"ngClass"],G,["id","match-state",3,"class",4,"ngIf"],[1,"card-footer"],[1,"text-right"],[3,"form","submitText","submitActionEvent"],["popStart",""],["popEnd",""],[1,"input-group","my-2"],["type","button","ngbTooltip",K,1,"btn","btn-light",3,"id","click"],["type","button","ngbTooltip",oe,1,"btn","btn-light",3,"id","click"],[1,"help-block"],["class","input-group-text",4,"ngIf"],[1,"input-group-text"],[3,"ngbTooltip",4,"ngIf"],["ngbTooltip","Equals",4,"ngIf"],[3,"ngbTooltip"],["ngbTooltip","Equals"],["type","text","disabled","","readonly","",1,"form-control",3,"id","value"],ue,[1,"invalid-feedback"],pe,ye,Ue,xe,ke,we,[4,"ngTemplateOutlet","ngTemplateOutletContext"],["id","match-state"],[3,"control","hasSeconds"]]},template:function(n,o){if(1&n){const l=e.EpF();e.YNc(0,ZS,7,9,"ng-template",null,0,e.W1O),e.TgZ(2,"div",1)(3,"form",2,3)(5,"div",4)(6,"div",5)(7,"span"),e.SDv(8,6),e.ALo(9,"titlecase"),e.ALo(10,"upperFirst"),e.qZA(),e.YNc(11,zy,2,0,"cd-helper",7),e.qZA(),e.TgZ(12,"div",8)(13,"div",9)(14,"label",10),e.SDv(15,11),e.qZA(),e.TgZ(16,"div",12),e._UZ(17,"input",13),e.YNc(18,Vy,2,0,"span",14),e.qZA()(),e.TgZ(19,"div",9)(20,"label",15),e.SDv(21,16),e.qZA(),e.TgZ(22,"div",12)(23,"textarea",17),e._uU(24,"            "),e.qZA(),e.YNc(25,Og,2,0,"span",14),e.qZA()(),e.TgZ(26,"div",9)(27,"label",18)(28,"span",19),e.SDv(29,20),e.qZA(),e.TgZ(30,"cd-helper"),e.SDv(31,21),e.qZA()(),e.TgZ(32,"div",12)(33,"input",22,23),e.NdJ("click",function(){e.CHM(l);const v=e.MAs(34);return e.KtG(v.open())})("keypress",function(){e.CHM(l);const v=e.MAs(34);return e.KtG(v.close())}),e.qZA(),e.YNc(35,H2,2,0,"span",14),e.qZA()(),e.TgZ(36,"div",9)(37,"label",24),e.SDv(38,25),e.qZA(),e.TgZ(39,"div",12),e._UZ(40,"input",26),e.YNc(41,U2,2,0,"span",14),e.qZA()(),e.TgZ(42,"div",9)(43,"label",27),e.SDv(44,28),e.qZA(),e.TgZ(45,"div",12)(46,"input",29,30),e.NdJ("click",function(){e.CHM(l);const v=e.MAs(47);return e.KtG(v.open())})("keypress",function(){e.CHM(l);const v=e.MAs(47);return e.KtG(v.close())}),e.qZA(),e.YNc(48,o1,2,0,"span",14),e.qZA()(),e.TgZ(49,"fieldset")(50,"legend",19),e.SDv(51,31),e.qZA(),e.TgZ(52,"div",32),e.YNc(53,Zy,3,4,"h5",33),e.YNc(54,JS,2,5,"span",34),e.TgZ(55,"div",35)(56,"div",36)(57,"button",37),e.NdJ("click",function(){return o.showMatcherModal()}),e._UZ(58,"i",38),e.ynx(59),e.SDv(60,39),e.BQk(),e.qZA()()()(),e.YNc(61,SR,3,7,"div",40),e.qZA()(),e.TgZ(62,"div",41)(63,"div",42)(64,"cd-form-button-panel",43),e.NdJ("submitActionEvent",function(){return o.submit()}),e.ALo(65,"titlecase"),e.ALo(66,"upperFirst"),e.qZA()()()()()(),e.YNc(67,Sl,1,2,"ng-template",null,44,e.W1O),e.YNc(69,B2,1,2,"ng-template",null,45,e.W1O)}if(2&n){const l=e.MAs(4),_=e.MAs(68),v=e.MAs(70);e.xp6(3),e.Q6J("formGroup",o.form),e.xp6(7),e.pQV(e.lcZ(9,18,o.action))(e.lcZ(10,20,o.resource)),e.QtT(8),e.xp6(1),e.Q6J("ngIf",o.edit),e.xp6(7),e.Q6J("ngIf",o.form.showError("createdBy",l,"required")),e.xp6(7),e.Q6J("ngIf",o.form.showError("comment",l,"required")),e.xp6(8),e.Q6J("ngbPopover",_),e.xp6(2),e.Q6J("ngIf",o.form.showError("startsAt",l,"required")),e.xp6(6),e.Q6J("ngIf",o.form.showError("duration",l,"required")),e.xp6(5),e.Q6J("ngbPopover",v),e.xp6(2),e.Q6J("ngIf",o.form.showError("endsAt",l,"required")),e.xp6(5),e.Q6J("ngIf",0===o.matchers.length),e.xp6(1),e.Q6J("ngForOf",o.matchers),e.xp6(3),e.Q6J("ngClass",e.VKq(26,G2,l.submitted&&0===o.matchers.length)),e.xp6(1),e.Q6J("ngClass",e.VKq(28,l0,o.icons.add)),e.xp6(3),e.Q6J("ngIf",o.matchers.length&&o.matcherMatch),e.xp6(3),e.Q6J("form",o.form)("submitText",e.lcZ(65,22,o.action)+" "+e.lcZ(66,24,o.resource))}},dependencies:[f.mk,f.sg,f.O5,f.tP,La.S,BS.J,rl.p,st.o,za.b,Va.P,Os.V,rn._Y,rn.Fj,rn.JJ,rn.JL,rn.sg,rn.u,yi._L,yi.o8,f.rS,Cu.m],styles:["textarea[_ngcontent-%COMP%]{resize:vertical}"]}),t})();var a1=s(84051),QS=s(70882);function u0(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",2),e.tHW(1,3),e._UZ(2,"cd-doc",4),e.N_p(),e.qZA())}function c0(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",8),2&t){const n=e.oxw(2);e.Q6J("renderObjects",!0)("hideEmpty",!0)("appendParentKey",!1)("data",n.expandedRow)("customCss",n.customCss)("autoReload",!1)}}function Jd(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-table",5),e.NdJ("setExpandedRow",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.setExpandedRow(l))})("fetchData",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.refresh())})("updateSelection",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.updateSelection(l))}),e._UZ(1,"cd-table-actions",6),e.YNc(2,c0,1,6,"cd-table-key-value",7),e.qZA()}if(2&t){const n=e.oxw();e.Q6J("data",n.silences)("columns",n.columns)("forceIdentifier",!0)("customCss",n.customCss)("sorts",n.sorts)("hasDetails",!0),e.xp6(1),e.Q6J("permission",n.permission)("selection",n.selection)("tableActions",n.tableActions),e.xp6(1),e.Q6J("ngIf",n.expandedRow)}}let KS=(()=>{class t extends r1{constructor(n,o,l,_,v,O,P,G,K,oe){super(oe),this.authStorageService=n,this.cdDatePipe=o,this.modalService=l,this.notificationService=_,this.urlBuilder=v,this.actionLabels=O,this.succeededLabels=P,this.silenceFormComponent=G,this.silenceMatcher=K,this.silences=[],this.selection=new Io.r,this.customCss={"badge badge-danger":"active","badge badge-warning":"pending","badge badge-default":"expired"},this.sorts=[{prop:"endsAt",dir:a1.Sr.desc}],this.permission=this.authStorageService.getPermissions().prometheus;const ue=pe=>pe.first()&&pe.first().status&&"expired"===pe.first().status.state;this.tableActions=[{permission:"create",icon:Rr.P.add,routerLink:()=>this.urlBuilder.getCreate(),canBePrimary:pe=>!pe.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"create",canBePrimary:pe=>pe.hasSingleSelection&&ue(pe),disable:pe=>!pe.hasSingleSelection||pe.first().cdExecuting||pe.first().cdExecuting&&ue(pe)||!ue(pe),icon:Rr.P.copy,routerLink:()=>this.urlBuilder.getRecreate(this.selection.first().id),name:this.actionLabels.RECREATE},{permission:"update",icon:Rr.P.edit,canBePrimary:pe=>pe.hasSingleSelection&&!ue(pe),disable:pe=>!pe.hasSingleSelection||pe.first().cdExecuting||pe.first().cdExecuting&&!ue(pe)||ue(pe),routerLink:()=>this.urlBuilder.getEdit(this.selection.first().id),name:this.actionLabels.EDIT},{permission:"delete",icon:Rr.P.trash,canBePrimary:pe=>pe.hasSingleSelection&&!ue(pe),disable:pe=>!pe.hasSingleSelection||pe.first().cdExecuting||ue(pe),click:()=>this.expireSilence(),name:this.actionLabels.EXPIRE}],this.columns=[{name:"ID",prop:"id",flexGrow:3},{name:"Alerts Silenced",prop:"silencedAlerts",flexGrow:3,cellTransformation:Xr.e.badge},{name:"Created by",prop:"createdBy",flexGrow:2},{name:"Started",prop:"startsAt",pipe:this.cdDatePipe},{name:"Updated",prop:"updatedAt",pipe:this.cdDatePipe},{name:"Ends",prop:"endsAt",pipe:this.cdDatePipe},{name:"Status",prop:"status.state",cellTransformation:Xr.e.classAdding}]}refresh(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getSilences().subscribe(n=>{this.silences=n;const o=n.filter(l=>"expired"!==l.status.state);this.getAlerts(o)},()=>{this.prometheusService.disableAlertmanagerConfig()})})}updateSelection(n){this.selection=n}getAlerts(n){const o=this.silenceFormComponent.getRules();n.forEach(l=>{l.matchers.forEach(_=>{this.rules=this.silenceMatcher.getMatchedRules(_,o);const v=[];for(const O of this.rules)v.push(O.name);l.silencedAlerts=v})})}expireSilence(){const n=this.selection.first().id,o="Silence",l="Prometheus";this.modalRef=this.modalService.show(Go.M,{itemDescription:o,itemNames:[n],actionDescription:this.actionLabels.EXPIRE,submitActionObservable:()=>new QS.y(_=>{this.prometheusService.expireSilence(n).subscribe(()=>{this.notificationService.show(Ho.k.success,`${this.succeededLabels.EXPIRED} ${o} ${n}`,void 0,void 0,l)},v=>{v.application=l,_.error(v)},()=>{_.complete(),this.refresh()})})})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(Ve.N),e.Y36(ca.Z),e.Y36(Ui.g),e.Y36(Qn.F),e.Y36(yr.p4),e.Y36(yr.aX),e.Y36(s1),e.Y36(jy),e.Y36(pm.Q))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-silences-list"]],features:[e._Bn([{provide:Qn.F,useValue:new Qn.F("monitoring/silences")},s1]),e.qOj],decls:3,vars:2,consts:function(){let i;return i="To enable Silences, please provide the URL to the API of the Prometheus' Alertmanager as described in the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + ".",[["type","info",4,"ngIf"],["selectionType","single",3,"data","columns","forceIdentifier","customCss","sorts","hasDetails","setExpandedRow","fetchData","updateSelection",4,"ngIf"],["type","info"],i,["section","prometheus"],["selectionType","single",3,"data","columns","forceIdentifier","customCss","sorts","hasDetails","setExpandedRow","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"renderObjects","hideEmpty","appendParentKey","data","customCss","autoReload",4,"ngIf"],["cdTableDetail","",3,"renderObjects","hideEmpty","appendParentKey","data","customCss","autoReload"]]},template:function(n,o){1&n&&(e._UZ(0,"cd-prometheus-tabs"),e.YNc(1,u0,3,0,"cd-alert-panel",0),e.YNc(2,Jd,3,10,"cd-table",1)),2&n&&(e.xp6(1),e.Q6J("ngIf",!o.isAlertmanagerConfigured),e.xp6(1),e.Q6J("ngIf",o.isAlertmanagerConfigured))},dependencies:[f.O5,Zu.G,Ff.K,zo.a,bu.b,$l.K,a0]}),t})(),XS=(()=>{class t{constructor(n){this.http=n,this.url="api/telemetry"}getReport(){return this.http.get(`${this.url}/report`)}enable(n=!0){const o={enable:n};return n&&(o.license_name="sharing-1-0"),this.http.put(`${this.url}`,o)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})(),Wy=(()=>{class t{constructor(){this.visible=!1,this.update=new e.vpe}setVisibility(n){this.visible=n,this.update.emit(n)}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function qS(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div"),e._uU(1," The plugin is already "),e.TgZ(2,"b"),e._uU(3,"enabled"),e.qZA(),e._uU(4,". Click "),e.TgZ(5,"b"),e._uU(6,"Deactivate"),e.qZA(),e._uU(7," to disable it.\xa0 "),e.TgZ(8,"button",66),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(3);return e.KtG(l.disableModule("The Telemetry module has been disabled successfully."))}),e.SDv(9,67),e.qZA()()}}function eb(t,i){1&t&&(e.ynx(0),e.TgZ(1,"legend"),e.ynx(2),e.SDv(3,68),e.BQk(),e.TgZ(4,"cd-helper"),e.SDv(5,69),e.qZA()(),e.TgZ(6,"div",15)(7,"label",70),e.SDv(8,71),e.qZA(),e.TgZ(9,"div",24),e._UZ(10,"input",72),e.qZA()(),e.TgZ(11,"div",15)(12,"label",73),e.SDv(13,74),e.qZA(),e.TgZ(14,"div",24),e._UZ(15,"input",75),e.qZA()(),e.TgZ(16,"div",15)(17,"label",76),e.SDv(18,77),e.qZA(),e.TgZ(19,"div",24),e._UZ(20,"input",78),e.qZA()(),e.BQk())}function tb(t,i){1&t&&(e.TgZ(0,"span",79),e.SDv(1,80),e.qZA())}function nb(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div")(1,"form",4,5)(3,"div",6)(4,"div",7),e.SDv(5,8),e.qZA(),e.TgZ(6,"div",9)(7,"p"),e.tHW(8,10),e._UZ(9,"br")(10,"a",11)(11,"br")(12,"br")(13,"b"),e.N_p(),e.qZA(),e.YNc(14,qS,10,0,"div",12),e.TgZ(15,"legend"),e.SDv(16,13),e.qZA(),e.TgZ(17,"p"),e.SDv(18,14),e.qZA(),e.TgZ(19,"div",15)(20,"label",16),e.ynx(21),e.SDv(22,17),e.BQk(),e.TgZ(23,"cd-helper"),e.ynx(24),e.SDv(25,18),e.BQk(),e.TgZ(26,"ul")(27,"li"),e.SDv(28,19),e.qZA(),e.TgZ(29,"li"),e.SDv(30,20),e.qZA(),e.TgZ(31,"li"),e.SDv(32,21),e.qZA(),e.TgZ(33,"li"),e.SDv(34,22),e.qZA(),e.TgZ(35,"li"),e.SDv(36,23),e.qZA()()()(),e.TgZ(37,"div",24)(38,"div",25),e._UZ(39,"input",26)(40,"label",27),e.qZA()()(),e.TgZ(41,"div",15)(42,"label",28),e.ynx(43),e.SDv(44,29),e.BQk(),e.TgZ(45,"cd-helper"),e.ynx(46),e.SDv(47,30),e.BQk(),e.TgZ(48,"ul")(49,"li"),e.SDv(50,31),e.qZA(),e.TgZ(51,"li"),e.SDv(52,32),e.qZA(),e.TgZ(53,"li"),e.SDv(54,33),e.qZA(),e.TgZ(55,"li"),e.SDv(56,34),e.qZA()()()(),e.TgZ(57,"div",24)(58,"div",25),e._UZ(59,"input",35)(60,"label",36),e.qZA()()(),e.TgZ(61,"div",15)(62,"label",37),e.ynx(63),e.SDv(64,38),e.BQk(),e._UZ(65,"cd-helper",39),e.qZA(),e.TgZ(66,"div",24)(67,"div",25),e._UZ(68,"input",40)(69,"label",41),e.qZA()()(),e.TgZ(70,"div",15)(71,"label",42),e.ynx(72),e.SDv(73,43),e.BQk(),e.TgZ(74,"cd-helper"),e.ynx(75),e.SDv(76,44),e.BQk(),e.TgZ(77,"ul")(78,"li"),e._uU(79,"Cluster description"),e.qZA(),e.TgZ(80,"li"),e._uU(81,"Contact email address"),e.qZA()()()(),e.TgZ(82,"div",24)(83,"div",25)(84,"input",45),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.toggleIdent())}),e.qZA(),e._UZ(85,"label",46),e.qZA()()(),e.TgZ(86,"div",15)(87,"label",47),e.ynx(88),e.SDv(89,48),e.BQk(),e.TgZ(90,"cd-helper"),e.ynx(91),e.SDv(92,49),e.BQk(),e.qZA()(),e.TgZ(93,"div",24)(94,"div",25),e._UZ(95,"input",50)(96,"label",51),e.qZA()()(),e.YNc(97,eb,21,0,"ng-container",12),e.TgZ(98,"legend"),e.SDv(99,52),e.qZA(),e.TgZ(100,"div",15)(101,"label",53),e.ynx(102),e.SDv(103,54),e.BQk(),e.TgZ(104,"cd-helper"),e.SDv(105,55),e.qZA()(),e.TgZ(106,"div",24),e._UZ(107,"input",56),e.YNc(108,tb,2,0,"span",57),e.qZA()(),e.TgZ(109,"div",15)(110,"label",58),e.ynx(111),e.SDv(112,59),e.BQk(),e.TgZ(113,"cd-helper")(114,"p"),e.SDv(115,60),e.qZA(),e.TgZ(116,"p"),e.SDv(117,61),e.qZA()()(),e.TgZ(118,"div",24),e._UZ(119,"input",62),e.qZA()(),e._UZ(120,"br"),e.TgZ(121,"p"),e.tHW(122,63),e._UZ(123,"b"),e.N_p(),e.qZA()(),e.TgZ(124,"div",64)(125,"div",65)(126,"button",66),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.next())}),e.ynx(127),e._uU(128),e.BQk(),e.qZA()()()()()()}if(2&t){const n=e.MAs(2),o=e.oxw(2);e.xp6(1),e.Q6J("formGroup",o.configForm),e.xp6(4),e.pQV(o.step),e.QtT(5),e.xp6(8),e.pQV(o.sendToUrl)(o.sendToDeviceUrl),e.QtT(8),e.xp6(1),e.Q6J("ngIf",o.moduleEnabled),e.xp6(83),e.Q6J("ngIf",o.showContactInfo),e.xp6(11),e.Q6J("ngIf",o.configForm.showError("interval",n,"min")),e.xp6(20),e.Oqu(o.actionLabels.NEXT)}}function Y2(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div")(1,"form",81,82)(3,"div",6)(4,"div",7),e.SDv(5,83),e.qZA(),e.TgZ(6,"div",9)(7,"div",15)(8,"label",84),e.tHW(9,85),e._UZ(10,"cd-helper",86),e.N_p(),e.qZA(),e.TgZ(11,"div",24),e._UZ(12,"input",87),e.qZA()(),e.TgZ(13,"div",15)(14,"label",88),e.tHW(15,89),e.TgZ(16,"cd-helper",90),e._UZ(17,"em"),e.qZA(),e.N_p(),e.qZA(),e.TgZ(18,"div",24),e._UZ(19,"textarea",91),e.qZA()(),e.TgZ(20,"div",15)(21,"div",92)(22,"div",93),e._UZ(23,"cd-download-button",94)(24,"cd-copy-2-clipboard-button",95),e.qZA()()(),e.TgZ(25,"div",15)(26,"div",92)(27,"div",25),e._UZ(28,"input",96),e.TgZ(29,"label",97),e.tHW(30,98),e._UZ(31,"a",99),e.N_p(),e.qZA()()()()(),e.TgZ(32,"div",64)(33,"div",65)(34,"cd-form-button-panel",100),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.onSubmit())})("backActionEvent",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.back())}),e.qZA()()()()()()}if(2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("formGroup",n.previewForm),e.xp6(4),e.pQV(n.step),e.QtT(5),e.xp6(18),e.Q6J("objectItem",n.report),e.xp6(11),e.Q6J("form",n.previewForm)("submitText",n.actionLabels.UPDATE)("cancelText",n.actionLabels.BACK)}}function j2(t,i){if(1&t&&(e.TgZ(0,"div",1),e.ynx(1,2),e.YNc(2,nb,129,8,"div",3),e.YNc(3,Y2,35,6,"div",3),e.BQk(),e.qZA()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngSwitch",n.step),e.xp6(1),e.Q6J("ngSwitchCase",1),e.xp6(1),e.Q6J("ngSwitchCase",2)}}let z2=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O,P){super(),this.actionLabels=n,this.formBuilder=o,this.mgrModuleService=l,this.notificationService=_,this.router=v,this.telemetryService=O,this.telemetryNotificationService=P,this.licenseAgrmt=!1,this.options={},this.newConfig={},this.configResp={},this.requiredFields=["channel_basic","channel_crash","channel_device","channel_ident","channel_perf","interval","proxy","contact","description","organization"],this.contactInfofields=["contact","description","organization"],this.report=void 0,this.reportId=void 0,this.sendToUrl="",this.sendToDeviceUrl="",this.step=1}ngOnInit(){const n=[this.mgrModuleService.getOptions("telemetry"),this.mgrModuleService.getConfig("telemetry")];(0,Za.D)(n).subscribe(o=>{const l=o[1];this.moduleEnabled=l.enabled,this.sendToUrl=l.url,this.sendToDeviceUrl=l.device_url,this.showContactInfo=l.channel_ident,this.options=Xe().pick(o[0],this.requiredFields),this.configResp=Xe().pick(l,this.requiredFields),this.createConfigForm(),this.configForm.setValue(this.configResp),this.loadingReady()},o=>{this.loadingError()})}createConfigForm(){const n={};Xe().forEach(Object.values(this.options),o=>{n[o.name]=[o.default_value,this.getValidators(o)]}),this.configForm=this.formBuilder.group(n)}replacer(n,o){if(("ranges"===n||"values"===n)&&Array.isArray(o)){const l=[];for(let _=0;_<o.length;_++)l.push(JSON.stringify(o[_]));return l}return o}replacerTest(n){return JSON.stringify(n,this.replacer,2)}formatReport(){let n={};n=JSON.parse(JSON.stringify(this.report));const o=["perf_counters","stats_per_pool","stats_per_pg","io_rate","osd_perf_histograms","mempool","heap_stats","rocksdb_stats"];for(let l=0;l<o.length;l++){const _=o[l];_ in n.report&&delete n.report[_]}return JSON.stringify(n,null,2)}formatReportTest(n){let o={};o=JSON.parse(JSON.stringify(n));const l=["perf_counters","stats_per_pool","stats_per_pg","io_rate","osd_perf_histograms","mempool","heap_stats","rocksdb_stats"];for(let _=0;_<l.length;_++){const v=l[_];v in o&&delete o[v]}return JSON.stringify(o,null,2)}createPreviewForm(){const n={report:this.formatReport(),reportId:this.reportId,licenseAgrmt:[this.licenseAgrmt,rn.kI.requiredTrue]};this.previewForm=this.formBuilder.group(n)}getValidators(n){const o=[];switch(n.type){case"int":o.push(rn.kI.required);break;case"str":Xe().isNumber(n.min)&&o.push(rn.kI.minLength(n.min)),Xe().isNumber(n.max)&&o.push(rn.kI.maxLength(n.max))}return o}updateReportFromConfig(n={}){const o=this.report.report.channels_available,l=[];for(const _ of o)n[`channel_${_}`]&&l.push(_);this.report.report.channels=l;for(const _ of this.contactInfofields)this.report.report[_]=n[_]}getReport(){this.loadingStart(),this.telemetryService.getReport().subscribe(n=>{this.report=n,this.reportId=n.report.report_id,this.updateReportFromConfig(this.newConfig),this.createPreviewForm(),this.loadingReady(),this.step++},n=>{this.loadingError()})}toggleIdent(){this.showContactInfo=!this.showContactInfo}buildReport(){this.newConfig={};for(const n of Object.values(this.options)){const o=this.configForm.get(n.name);if(!o.valid)return void this.configForm.setErrors({cdSubmitButton:!0});this.newConfig[n.name]=o.value}if(!this.newConfig.channel_ident)for(const n of this.contactInfofields)this.newConfig[n]="";this.getReport()}disableModule(n=null,o=null){this.telemetryService.enable(!1).subscribe(()=>{this.telemetryNotificationService.setVisibility(!0),n&&this.notificationService.show(Ho.k.success,n),o?o():this.router.navigate([""])})}next(){this.buildReport()}back(){this.step--}getChangedConfig(){const n={};return Xe().forEach(this.requiredFields,o=>{Xe().isEqual(this.configResp[o],this.newConfig[o])||(n[o]=this.newConfig[o])}),n}onSubmit(){const n=this.getChangedConfig(),o=[this.telemetryService.enable(),this.mgrModuleService.updateConfig("telemetry",n)];(0,Za.D)(o).subscribe(()=>{this.telemetryNotificationService.setVisibility(!1),this.notificationService.show(Ho.k.success,"The Telemetry module has been configured and activated successfully.")},()=>{this.telemetryNotificationService.setVisibility(!1),this.notificationService.show(Ho.k.error,"An Error occurred while updating the Telemetry module configuration.             Please Try again"),this.previewForm.setErrors({cdSubmitButton:!0})},()=>{this.newConfig={},this.router.navigate([""])})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(Qi.O),e.Y36(H_.N),e.Y36(Ui.g),e.Y36(Ee.F0),e.Y36(XS),e.Y36(Wy))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-telemetry"]],features:[e.qOj],decls:1,vars:1,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke,we,Z,Ft,Dt,Yt,ln,$n,nn,Jn,zn,Zr,$r,ui,gi,Un,lr,ar,Cr,Wn,ai,ho,Yi,lo,pi,Kn,Nn,_i,Zi;return i="Step " + "\ufffd0\ufffd" + " of 2: Telemetry report configuration",n="The telemetry module sends anonymous data about this Ceph cluster back to the Ceph developers to help understand how Ceph is used and what problems users may be experiencing." + "[\ufffd#9\ufffd\ufffd/#9\ufffd|\ufffd#11\ufffd\ufffd/#11\ufffd|\ufffd#12\ufffd\ufffd/#12\ufffd]" + " This data is visualized on " + "\ufffd#10\ufffd" + "public dashboards" + "\ufffd/#10\ufffd" + " that allow the community to quickly see summary statistics on how many clusters are reporting, their total capacity and OSD count, and version distribution trends." + "[\ufffd#9\ufffd\ufffd/#9\ufffd|\ufffd#11\ufffd\ufffd/#11\ufffd|\ufffd#12\ufffd\ufffd/#12\ufffd]" + "" + "[\ufffd#9\ufffd\ufffd/#9\ufffd|\ufffd#11\ufffd\ufffd/#11\ufffd|\ufffd#12\ufffd\ufffd/#12\ufffd]" + " The data being reported does " + "\ufffd#13\ufffd" + "not" + "\ufffd/#13\ufffd" + " contain any sensitive data like pool names, object names, object contents, hostnames, or device serial numbers. It contains counters and statistics on how the cluster has been deployed, the version of Ceph, the distribution of the hosts and other parameters which help the project to gain a better understanding of the way Ceph is used. The data is sent secured to " + "\ufffd0\ufffd" + " and " + "\ufffd1\ufffd" + " (device report).",n=e.Zx4(n),o="Channels",l="The telemetry report is broken down into several \"channels\", each with a different type of information that can be configured below.",_="Basic",v="Includes basic information about the cluster:",O="Capacity of the cluster",P="Number of monitors, managers, OSDs, MDSs, object gateways, or other daemons",G="Software version currently being used",K="Number and types of RADOS pools and CephFS file systems",oe="Names of configuration options that have been changed from their default (but not their values)",ue="Crash",pe="Includes information about daemon crashes:",ye="Type of daemon",Ue="Version of the daemon",xe="Operating system (OS distribution, kernel version)",ke="Stack trace identifying where in the Ceph code the crash occurred",we="Device",Z="Includes information about device metrics like anonymized SMART metrics.",Ft="Ident",Dt="Includes user-provided identifying information about the cluster:",Yt="Perf",ln="Includes various performance metrics of a cluster.",$n="Advanced Settings",nn="Interval",Jn="The module compiles and sends a new report every 24 hours by default. You can adjust this interval by setting a different number of hours.",zn="Proxy",Zr="If the cluster cannot directly connect to the configured telemetry endpoint (default telemetry.ceph.com), you can configure a HTTP/HTTPS proxy server by e.g. adding https://10.0.0.1:8080",$r="You can also include a user:pass if needed e.g. https://ceph:telemetry@10.0.0.1:8080",ui="" + "\ufffd#123\ufffd" + "Note:" + "\ufffd/#123\ufffd" + " By clicking 'Next' you will first see a preview of the report content before you can activate the automatic submission of your data.",gi="Deactivate",Un="Contact Information",lr="Submitting any contact information is completely optional and disabled by default.",ar="Contact",Cr="Description",Wn="My first Ceph cluster",ai="Organization",ho="Organization name",Yi="The entered value is too low! It must be greater or equal to 8.",lo="Step " + "\ufffd0\ufffd" + " of 2: Telemetry report preview",pi="A randomized UUID to identify a particular cluster over the course of several telemetry reports.",Kn="Report ID " + "\ufffd#10\ufffd" + "" + "\ufffd/#10\ufffd" + "",Nn="The actual telemetry data that will be submitted.",_i="Report preview " + "\ufffd#16\ufffd" + "" + "\ufffd#17\ufffd" + "Note: Please select 'Download' to view the full report, including metrics from the perf channel." + "\ufffd/#17\ufffd" + "" + "\ufffd/#16\ufffd" + "",Zi="I agree to my telemetry data being submitted under the " + "\ufffd#31\ufffd" + "Community Data License Agreement - Sharing - Version 1.0" + "\ufffd/#31\ufffd" + "",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],[3,"ngSwitch"],[4,"ngSwitchCase"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],i,[1,"card-body"],n,["href","https://telemetry-public.ceph.com/"],[4,"ngIf"],o,l,[1,"form-group","row"],["for","channel_basic",1,"cd-col-form-label"],_,v,O,P,G,K,oe,[1,"cd-col-form-input"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","channel_basic","formControlName","channel_basic",1,"custom-control-input"],["for","channel_basic",1,"custom-control-label"],["for","channel_crash",1,"cd-col-form-label"],ue,pe,ye,Ue,xe,ke,["type","checkbox","id","channel_crash","formControlName","channel_crash",1,"custom-control-input"],["for","channel_crash",1,"custom-control-label"],["for","channel_device",1,"cd-col-form-label"],we,["html",Z],["type","checkbox","id","channel_device","formControlName","channel_device",1,"custom-control-input"],["for","channel_device",1,"custom-control-label"],["for","channel_ident",1,"cd-col-form-label"],Ft,Dt,["type","checkbox","id","channel_ident","formControlName","channel_ident",1,"custom-control-input",3,"click"],["for","channel_ident",1,"custom-control-label"],["for","channel_perf",1,"cd-col-form-label"],Yt,ln,["type","checkbox","id","channel_perf","formControlName","channel_perf",1,"custom-control-input"],["for","channel_perf",1,"custom-control-label"],$n,["for","interval",1,"cd-col-form-label"],nn,Jn,["id","interval","type","number","formControlName","interval","min","8",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","proxy",1,"cd-col-form-label"],zn,Zr,$r,["id","proxy","type","text","formControlName","proxy","placeholder","https://10.0.0.1:8080",1,"form-control"],ui,[1,"card-footer"],[1,"button-group","text-right"],["type","button",1,"btn","btn-light",3,"click"],gi,Un,lr,["for","contact",1,"cd-col-form-label"],ar,["id","contact","type","text","formControlName","contact","placeholder","Example User <user@example.com>",1,"form-control"],["for","description",1,"cd-col-form-label"],Cr,["id","description","type","text","formControlName","description","placeholder",Wn,1,"form-control"],["for","organization",1,"cd-col-form-label"],ai,["id","organization","type","text","formControlName","organization","placeholder",ho,1,"form-control"],[1,"invalid-feedback"],Yi,["name","previewForm","novalidate","",3,"formGroup"],["frm","ngForm"],lo,["for","reportId",1,"cd-col-form-label"],Kn,["html",pi],["type","text","id","reportId","formControlName","reportId","readonly","",1,"form-control"],["for","report",1,"cd-col-form-label"],_i,["html",Nn],["id","report","formControlName","report","rows","15","readonly","",1,"form-control"],[1,"cd-col-form-offset"],["role","group",1,"btn-group"],["fileName","telemetry_report",3,"objectItem"],["source","report"],["type","checkbox","id","licenseAgrmt","name","licenseAgrmt","formControlName","licenseAgrmt",1,"custom-control-input"],["for","licenseAgrmt",1,"custom-control-label"],Zi,["href","https://cdla.io/sharing-1-0/"],[3,"form","submitText","cancelText","submitActionEvent","backActionEvent"]]},template:function(n,o){1&n&&e.YNc(0,j2,4,3,"div",0),2&n&&e.Q6J("cdFormLoading",o.loading)},dependencies:[f.O5,f.RF,f.n9,La.S,ia.s,$v,rl.p,Pu.y,st.o,za.b,Va.P,Os.V,rn._Y,rn.Fj,rn.wV,rn.Wl,rn.JJ,rn.JL,rn.qQ,rn.sg,rn.u]}),t})();var Rm=s(89154),X1=s(98677);function V2(t,i){if(1&t&&(e.TgZ(0,"option",7),e._uU(1),e.qZA()),2&t){const n=i.$implicit,o=e.oxw();e.Q6J("value",o.intervalList[n]),e.xp6(1),e.Oqu(n)}}let Z2=(()=>{class t{constructor(n){this.refreshIntervalService=n,this.intervalList={"5 s":5e3,"10 s":1e4,"15 s":15e3,"30 s":3e4,"1 min":6e4,"3 min":18e4,"5 min":3e5},this.intervalKeys=Object.keys(this.intervalList)}ngOnInit(){this.selectedInterval=this.refreshIntervalService.getRefreshInterval()||5e3}changeRefreshInterval(n){this.refreshIntervalService.setRefreshInterval(n)}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(X1.s))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-refresh-selector"]],decls:8,vars:2,consts:function(){let i;return i="Refresh",[[1,"container-fluid"],[1,"row"],[1,"col-sm-1","d-flex","float-end"],["for","refreshInterval",1,"col-form-label","my-0","mx-2","float-end"],i,["id","refreshInterval","name","refreshInterval",1,"form-select","float-end",3,"ngModel","change","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"form")(3,"div",2)(4,"label",3),e.SDv(5,4),e.qZA(),e.TgZ(6,"select",5),e.NdJ("change",function(_){return o.changeRefreshInterval(_.target.value)})("ngModelChange",function(_){return o.selectedInterval=_}),e.YNc(7,V2,2,2,"option",6),e.qZA()()()()()),2&n&&(e.xp6(6),e.Q6J("ngModel",o.selectedInterval),e.xp6(1),e.Q6J("ngForOf",o.intervalKeys))},dependencies:[f.sg,rn._Y,rn.YN,rn.Kr,rn.EJ,rn.JJ,rn.JL,rn.On,rn.F,st.o]}),t})();var d0=s(4167),zh=s(74255),rb=s(43892),f0=s(79241),ib=s(9219),q1=s(17401),Xm=s(85770),ob=s(6823),Ag=s(99475);let W2=(()=>{class t{constructor(n,o){this.cssHelper=n,this.dimlessBinary=o,this.chartConfig={},this.doughnutChartPlugins=[{id:"center_text",beforeDraw(l){const _=new Ag.P,v="Helvetica Neue, Helvetica, Arial, sans-serif";ob.defaults.global.defaultFontFamily=v;const O=l.ctx;if(!l.options.plugins.center_text||!l.data.datasets[0].label)return;O.save();const P=l.data.datasets[0].label[0].split("\n"),G=(l.chartArea.left+l.chartArea.right)/2,K=(l.chartArea.top+l.chartArea.bottom)/2;O.textAlign="center",O.textBaseline="middle",O.font=`24px ${v}`,O.fillText(P[0],G,K-10),P.length>1&&(O.font=`14px ${v}`,O.fillStyle=_.propertyValue("chart-color-center-text-description"),O.fillText(P[1],G,K+10)),O.restore()}}],this.chartConfig={chartType:"doughnut",labels:["","",""],dataset:[{label:null,backgroundColor:[this.cssHelper.propertyValue("chart-color-light-gray"),this.cssHelper.propertyValue("chart-color-slight-dark-gray"),this.cssHelper.propertyValue("chart-color-dark-gray")]},{label:null,borderWidth:0,backgroundColor:[this.cssHelper.propertyValue("chart-color-blue"),this.cssHelper.propertyValue("chart-color-white")]}],options:{cutoutPercentage:70,events:["click","mouseout","touchstart"],legend:{display:!0,position:"right",labels:{boxWidth:10,usePointStyle:!1,generateLabels:l=>{const _={0:{},1:{},2:{}};return _[0]={text:"Used: " + l.data.datasets[1].data[2] + "",fillStyle:l.data.datasets[1].backgroundColor[0],strokeStyle:l.data.datasets[1].backgroundColor[0]},_[1]={text:"Warning: " + l.data.datasets[0].data[0] + "%",fillStyle:l.data.datasets[0].backgroundColor[1],strokeStyle:l.data.datasets[0].backgroundColor[1]},_[2]={text:"Danger: " + (l.data.datasets[0].data[0] + l.data.datasets[0].data[1]) + "%",fillStyle:l.data.datasets[0].backgroundColor[2],strokeStyle:l.data.datasets[0].backgroundColor[2]},_}}},plugins:{center_text:!0},tooltips:{enabled:!0,displayColors:!1,backgroundColor:this.cssHelper.propertyValue("chart-color-tooltip-background"),cornerRadius:0,bodyFontSize:14,bodyFontStyle:"600",position:"nearest",xPadding:12,yPadding:12,filter:l=>1===l.datasetIndex,callbacks:{label:(l,_)=>{let v=_.labels[l.index];return v.includes("%")||(v=`${v} (${_.datasets[l.datasetIndex].data[l.index]}%)`),v}}},title:{display:!1}}}}ngOnInit(){this.prepareRawUsage(this.chartConfig,this.data)}ngOnChanges(){this.prepareRawUsage(this.chartConfig,this.data)}prepareRawUsage(n,o){const l=100*this.lowThreshold,_=100*this.highThreshold,v=this.calcPercentage(o.max-o.current,o.max),O=this.calcPercentage(o.current,o.max);this.color=O>=_?"chart-color-red":O>=l?"chart-color-yellow":"chart-color-blue",n.dataset[0].data=[Math.round(l),Math.round(Math.abs(l-_)),Math.round(100-_)],n.dataset[1].data=[O,v,this.dimlessBinary.transform(o.current)],n.dataset[1].backgroundColor[0]=this.cssHelper.propertyValue(this.color),n.dataset[0].label=[`${O}%\nof ${this.dimlessBinary.transform(o.max)}`]}calcPercentage(n,o){return Xe().isNumber(n)&&Xe().isNumber(o)&&0!==o?Math.ceil(n/o*100*100)/100:0}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ag.P),e.Y36(Wl.$))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-dashboard-pie"]],inputs:{data:"data",highThreshold:"highThreshold",lowThreshold:"lowThreshold"},features:[e.TTD],decls:6,vars:6,consts:[[1,"chart-container","d-flex","align-items-center","justify-content-center"],["baseChart","",1,"chart-canvas",3,"datasets","chartType","options","labels","colors","plugins"],["chartCanvas",""],[1,"chartjs-tooltip"],["chartTooltip",""]],template:function(n,o){1&n&&(e.TgZ(0,"div",0),e._UZ(1,"canvas",1,2),e.TgZ(3,"div",3,4),e._UZ(5,"table"),e.qZA()()),2&n&&(e.xp6(1),e.Q6J("datasets",o.chartConfig.dataset)("chartType",o.chartConfig.chartType)("options",o.chartConfig.options)("labels",o.chartConfig.labels)("colors",o.chartConfig.colors)("plugins",o.doughnutChartPlugins))},dependencies:[tn.jh],styles:['.chart-container[_ngcontent-%COMP%]{cursor:pointer;margin:auto;overflow:visible;position:absolute}canvas[_ngcontent-%COMP%]{user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important;opacity:0;pointer-events:none;position:absolute;transform:translate(-50%);transition:all .1s ease}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]:after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]:after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]:after{border-color:#000 transparent transparent transparent;border-style:solid;border-width:5px;content:" ";left:50%;margin-left:-5px;position:absolute;top:100%}  .chartjs-tooltip-key{display:inline-block;height:10px;margin-right:10px;width:10px}.chart-container[_ngcontent-%COMP%]{height:100%;margin-left:auto;margin-right:auto;position:unset;width:100%}.chart-canvas[_ngcontent-%COMP%]{height:100%;margin-left:auto;margin-right:auto;max-height:100%;max-width:100%;position:unset;width:100%}']}),t})();var sb=s(9024),ab=s(54740),qm=(()=>{return(t=qm||(qm={})).HEALTH_ERR="health-color-error",t.HEALTH_WARN="health-color-warning",t.HEALTH_OK="health-color-healthy",qm;var t})();let p0=(()=>{class t{constructor(n){this.cssHelper=n}transform(n){return Object.keys(qm).includes(n)?{color:this.cssHelper.propertyValue(qm[n])}:null}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ag.P,16))},t.\u0275pipe=e.Yjl({name:"healthColor",type:t,pure:!0}),t})();var lb=s(9228),ub=s(40473),J2=s(8074),TR=s(67891),Q2=s(20687);let CR=(()=>{class t{constructor(n){this.pgCategoryService=n}transform(n){const o={};let l=0;return Xe().forEach(n.statuses,(_,v)=>{const O=this.pgCategoryService.getTypeByStates(v);Xe().isUndefined(o[O])&&(o[O]=0),o[O]+=_,l+=_}),{categoryPgAmount:o,total:l}}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Q2.j,16))},t.\u0275pipe=e.Yjl({name:"pgSummary",type:t,pure:!0}),t})();function MR(t,i){if(1&t&&e._UZ(0,"cd-card-row",47),2&t){const n=e.oxw(2);e.Q6J("data",n.healthData.hosts)}}function cb(t,i){if(1&t&&e._UZ(0,"cd-card-row",48),2&t){const n=e.oxw(2);e.Q6J("data",n.healthData.mon_status.monmap.mons.length)}}function _0(t,i){if(1&t&&(e._UZ(0,"cd-card-row",49),e.ALo(1,"mgrSummary")),2&t){const n=e.oxw(2);e.Q6J("data",e.lcZ(1,1,n.healthData.mgr_map))}}function K2(t,i){if(1&t&&(e._UZ(0,"cd-card-row",50),e.ALo(1,"osdSummary")),2&t){const n=e.oxw(2);e.Q6J("data",e.lcZ(1,1,n.healthData.osd_map))}}function X2(t,i){if(1&t&&e._UZ(0,"cd-card-row",51),2&t){const n=e.oxw(2);e.Q6J("data",n.healthData.pools.length)}}function db(t,i){if(1&t&&(e._UZ(0,"cd-card-row",52),e.ALo(1,"pgSummary")),2&t){const n=e.oxw(2);e.Q6J("data",e.lcZ(1,1,n.healthData.pg_info))}}function ev(t,i){if(1&t&&e._UZ(0,"cd-card-row",53),2&t){const n=e.oxw(2);e.Q6J("data",n.healthData.rgw)}}function q2(t,i){if(1&t&&(e._UZ(0,"cd-card-row",54),e.ALo(1,"mdsSummary")),2&t){const n=e.oxw(2);e.Q6J("data",e.lcZ(1,1,n.healthData.fs_map))}}function eM(t,i){if(1&t&&e._UZ(0,"cd-card-row",55),2&t){const n=e.oxw(2);e.Q6J("data",n.healthData.iscsi_daemons)}}function tM(t,i){1&t&&(e.TgZ(0,"div",56)(1,"a",57),e.SDv(2,58),e.qZA()())}function nM(t,i){1&t&&e.GkF(0)}function OR(t,i){if(1&t&&(e.TgZ(0,"li")(1,"span",61),e.ALo(2,"healthColor"),e._uU(3),e.qZA(),e._uU(4),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.ekj("health-warn-description","HEALTH_WARN"===n.severity),e.Q6J("ngStyle",e.lcZ(2,5,n.severity)),e.xp6(2),e.hij(" ",n.type,""),e.xp6(1),e.hij(": ",n.summary.message," ")}}function rM(t,i){if(1&t&&(e.YNc(0,nM,1,0,"ng-container",59),e.TgZ(1,"ul"),e.YNc(2,OR,5,7,"li",60),e.qZA()),2&t){const n=e.oxw(2),o=e.MAs(5);e.Q6J("ngTemplateOutlet",o),e.xp6(2),e.Q6J("ngForOf",n.healthData.health.checks)}}const Jy=function(t,i){return[t,i]};function iM(t,i){if(1&t&&(e._UZ(0,"i",62),e.ALo(1,"healthIcon"),e.ALo(2,"healthColor")),2&t){const n=e.oxw(2);e.Q6J("ngClass",e.WLB(7,Jy,e.lcZ(1,3,n.healthData.health.status),n.icons.large2x))("ngStyle",e.lcZ(2,5,n.healthData.health.status))("title",n.healthData.health.status)}}function oM(t,i){if(1&t&&(e.TgZ(0,"a",63),e.SDv(1,64),e.qZA()),2&t){e.oxw();const n=e.MAs(49);e.Q6J("ngbPopover",n)("openDelay",300)("closeDelay",500)}}function tv(t,i){1&t&&(e.TgZ(0,"span",65),e.SDv(1,66),e.qZA())}const fb=function(t){return{active:t}},nv=function(t){return[t]};function sM(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",77),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(3);return e.KtG(l.toggleAlertsWindow("critical"))}),e._UZ(1,"i",78),e.TgZ(2,"span"),e._uU(3),e.qZA()()}if(2&t){const n=e.oxw(3);e.Q6J("ngClass",e.VKq(3,fb,"critical"===n.alertType)),e.xp6(1),e.Q6J("ngClass",e.VKq(5,nv,n.icons.danger)),e.xp6(2),e.Oqu(n.prometheusAlertService.activeCriticalAlerts)}}function pb(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",79),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(3);return e.KtG(l.toggleAlertsWindow("warning"))}),e._UZ(1,"i",78),e.TgZ(2,"span"),e._uU(3),e.qZA()()}if(2&t){const n=e.oxw(3);e.Q6J("ngClass",e.VKq(3,fb,"warning"===n.alertType)),e.xp6(1),e.Q6J("ngClass",e.VKq(5,nv,n.icons.infoCircle)),e.xp6(2),e.Oqu(n.prometheusAlertService.activeWarningAlerts)}}function aM(t,i){1&t&&e.GkF(0)}function _b(t,i){if(1&t&&(e.TgZ(0,"section",67)(1,"div",68)(2,"span",69),e.SDv(3,70),e.qZA(),e.YNc(4,sM,4,7,"button",71),e.YNc(5,pb,4,7,"button",72),e.qZA(),e.TgZ(6,"div",73),e._UZ(7,"hr",74),e.TgZ(8,"ngx-simplebar",75)(9,"div",76),e.YNc(10,aM,1,0,"ng-container",59),e.qZA()()()()),2&t){const n=e.oxw(2),o=e.MAs(3);e.xp6(4),e.Q6J("ngIf",null==n.prometheusAlertService?null:n.prometheusAlertService.activeCriticalAlerts),e.xp6(1),e.Q6J("ngIf",null==n.prometheusAlertService?null:n.prometheusAlertService.activeWarningAlerts),e.xp6(3),e.Q6J("options",n.simplebar),e.xp6(2),e.Q6J("ngTemplateOutlet",o)}}const lM=function(t,i){return{max:t,current:i}};function Qy(t,i){if(1&t&&(e.ynx(0,7),e._UZ(1,"cd-dashboard-pie",80),e.BQk()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("data",e.WLB(3,lM,n.capacity.total_bytes,n.capacity.total_used_raw_bytes))("lowThreshold",n.osdSettings.nearfull_ratio)("highThreshold",n.osdSettings.full_ratio)}}function uM(t,i){if(1&t&&(e.ynx(0),e._UZ(1,"cd-dashboard-area-chart",81),e.BQk()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("maxValue",n.capacity.total_bytes)("data",n.queriesResults.USEDCAPACITY)}}function hb(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",3)(1,"div",4)(2,"div",5)(3,"cd-card",6)(4,"dl",7)(5,"dt"),e._uU(6,"Cluster ID"),e.qZA(),e.TgZ(7,"dd"),e._uU(8),e.qZA(),e.TgZ(9,"dt"),e._uU(10,"Orchestrator"),e.qZA(),e.TgZ(11,"dd"),e.SDv(12,8),e.qZA(),e.TgZ(13,"dt"),e._uU(14,"Ceph version"),e.qZA(),e.TgZ(15,"dd"),e._uU(16),e.qZA(),e.TgZ(17,"dt"),e._uU(18,"Cluster API"),e.qZA(),e.TgZ(19,"dd")(20,"a",9),e._uU(21),e._UZ(22,"i",10),e.qZA()(),e.ynx(23),e.TgZ(24,"dt"),e._uU(25,"Telemetry Dashboard "),e.TgZ(26,"span",11),e._uU(27),e.qZA()(),e.TgZ(28,"dd")(29,"a",12),e._uU(30),e._UZ(31,"i",10),e.qZA()(),e.BQk(),e.qZA()(),e.TgZ(32,"cd-card",13),e.YNc(33,MR,1,1,"cd-card-row",14),e.YNc(34,cb,1,1,"cd-card-row",15),e.YNc(35,_0,2,3,"cd-card-row",16),e.YNc(36,K2,2,3,"cd-card-row",17),e.YNc(37,X2,1,1,"cd-card-row",18),e.YNc(38,db,2,3,"cd-card-row",19),e.YNc(39,ev,1,1,"cd-card-row",20),e.YNc(40,q2,2,3,"cd-card-row",21),e.YNc(41,eM,1,1,"cd-card-row",22),e.qZA()(),e.TgZ(42,"div",23)(43,"div",24)(44,"div",25)(45,"cd-card",26),e.YNc(46,tM,3,0,"div",27),e.TgZ(47,"div",28),e.YNc(48,rM,3,2,"ng-template",null,29,e.W1O),e.TgZ(50,"div",30),e.YNc(51,iM,3,10,"i",31),e.YNc(52,oM,2,3,"a",32),e.YNc(53,tv,2,0,"span",33),e.qZA()(),e.YNc(54,_b,11,4,"section",34),e.qZA()(),e.TgZ(55,"div",35)(56,"cd-card",36),e.YNc(57,Qy,2,6,"ng-container",37),e.qZA()(),e.TgZ(58,"div",38)(59,"cd-card",39)(60,"div",40)(61,"cd-dashboard-time-selector",41),e.NdJ("selectedTime",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.getPrometheusData(l))}),e.qZA(),e.YNc(62,uM,2,2,"ng-container",42),e._UZ(63,"cd-dashboard-area-chart",43)(64,"cd-dashboard-area-chart",44)(65,"cd-dashboard-area-chart",45)(66,"cd-dashboard-area-chart",46),e.qZA()()()()()()()}if(2&t){const n=i.ngIf,o=e.oxw();e.xp6(8),e.Oqu(o.detailsCardData.fsid),e.xp6(4),e.pQV(o.detailsCardData.orchestrator||"Orchestrator is not available"),e.QtT(12),e.xp6(4),e.Oqu(o.detailsCardData.cephVersion),e.xp6(5),e.hij(" ",o.origin,"/api-docs "),e.xp6(5),e.Q6J("ngClass",o.telemetryEnabled?"badge-success":"badge-secondary")("ngbTooltip",o.getTelemetryText()),e.xp6(1),e.hij(" ",o.telemetryEnabled?"Active":"Inactive"," "),e.xp6(2),e.Q6J("href",o.telemetryURL,e.LSH),e.xp6(1),e.hij(" ",o.telemetryURL," "),e.xp6(3),e.Q6J("ngIf",null!=o.healthData.hosts),e.xp6(1),e.Q6J("ngIf",o.healthData.mon_status),e.xp6(1),e.Q6J("ngIf",o.healthData.mgr_map),e.xp6(1),e.Q6J("ngIf",o.healthData.osd_map),e.xp6(1),e.Q6J("ngIf",o.healthData.pools),e.xp6(1),e.Q6J("ngIf",o.healthData.pg_info),e.xp6(1),e.Q6J("ngIf",n.rgw&&o.healthData.rgw||0===o.healthData.rgw),e.xp6(1),e.Q6J("ngIf",n.cephfs&&o.healthData.fs_map),e.xp6(1),e.Q6J("ngIf",n.iscsi&&o.healthData.iscsi_daemons),e.xp6(4),e.Q6J("alignItemsCenter",!0)("cardFooter",o.isAlertmanagerConfigured&&o.prometheusAlertService.alerts.length)("fullHeight",!0),e.xp6(1),e.Q6J("ngIf",o.prometheusAlertService.alerts.length),e.xp6(5),e.Q6J("ngIf",null==o.healthData.health?null:o.healthData.health.status),e.xp6(1),e.Q6J("ngIf",null==o.healthData.health||null==o.healthData.health.checks?null:o.healthData.health.checks.length),e.xp6(1),e.Q6J("ngIf",!(null!=o.healthData.health&&null!=o.healthData.health.checks&&o.healthData.health.checks.length)),e.xp6(1),e.Q6J("ngIf",o.isAlertmanagerConfigured&&o.prometheusAlertService.alerts.length),e.xp6(2),e.Q6J("fullHeight",!0),e.xp6(1),e.Q6J("ngIf",o.capacity&&o.osdSettings),e.xp6(5),e.Q6J("ngIf",o.capacity),e.xp6(1),e.Q6J("data",o.queriesResults.READIOPS)("data2",o.queriesResults.WRITEIOPS),e.xp6(1),e.Q6J("data",o.queriesResults.READLATENCY)("data2",o.queriesResults.WRITELATENCY),e.xp6(1),e.Q6J("data",o.queriesResults.READCLIENTTHROUGHPUT)("data2",o.queriesResults.WRITECLIENTTHROUGHPUT),e.xp6(1),e.Q6J("data",o.queriesResults.RECOVERYBYTES)}}const Ky=function(t,i,n){return[t,i,n]};function cM(t,i){if(1&t&&(e.TgZ(0,"div",78)(1,"div",84)(2,"div",85)(3,"div",86)(4,"span",78),e._UZ(5,"i",78)(6,"i",78),e.qZA()(),e.TgZ(7,"div",87)(8,"div",88)(9,"h6",89),e._uU(10),e.qZA(),e._UZ(11,"p",90),e.TgZ(12,"p",91)(13,"small",92),e.SDv(14,93),e.ALo(15,"cdDate"),e.ALo(16,"relativeDate"),e.qZA()()()()()(),e._UZ(17,"hr",94),e.qZA()),2&t){const n=e.oxw().$implicit,o=e.oxw(2);e.Q6J("ngClass",e.VKq(13,nv,"border-"+o.alertClass[n.labels.severity])),e.xp6(4),e.Q6J("ngClass",e.kEZ(15,Ky,o.icons.stack,o.icons.large,"text-"+o.alertClass[n.labels.severity])),e.xp6(1),e.Q6J("ngClass",e.WLB(19,Jy,o.icons.circle,o.icons.stack2x)),e.xp6(1),e.Q6J("ngClass",e.kEZ(22,Ky,o.icons.stack1x,o.icons.inverse,o.icons.warning)),e.xp6(4),e.Oqu(n.labels.alertname),e.xp6(1),e.Q6J("innerHtml",n.annotations.description,e.oJD)("ngbTooltip",n.annotations.description),e.xp6(2),e.Q6J("title",e.lcZ(15,9,n.startsAt)),e.xp6(3),e.pQV(e.lcZ(16,11,n.startsAt)),e.QtT(14)}}function dM(t,i){if(1&t&&(e.ynx(0),e.YNc(1,cM,18,26,"div",83),e.BQk()),2&t){const n=i.$implicit,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",n.labels.severity===o.alertType||!o.alertType)}}function fM(t,i){if(1&t&&e.YNc(0,dM,2,1,"ng-container",82),2&t){const n=e.oxw();e.Q6J("ngForOf",n.prometheusAlertService.alerts)("ngForTrackBy",n.trackByFn)}}function Xy(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"p",95),e.tHW(2,96),e._UZ(3,"i",78)(4,"a",97),e.N_p(),e.qZA(),e.BQk()),2&t){const n=e.oxw(2);e.xp6(3),e.Q6J("ngClass",e.VKq(1,nv,n.icons.infoCircle))}}function pM(t,i){if(1&t&&e.YNc(0,Xy,5,3,"ng-container",42),2&t){const n=e.oxw();e.Q6J("ngIf",n.permissions.log.read)}}let mb=(()=>{class t extends r1{constructor(n,o,l,_,v,O,P,G,K,oe){super(P),this.summaryService=n,this.orchestratorService=o,this.osdService=l,this.authStorageService=_,this.featureToggles=v,this.healthService=O,this.prometheusService=P,this.mgrModuleService=G,this.refreshIntervalService=K,this.prometheusAlertService=oe,this.detailsCardData={},this.interval=new bd.w,this.icons=Rr.P,this.flexHeight=!0,this.simplebar={autoHide:!0},this.alertClass=rb.y,this.categoryPgAmount={},this.totalPgs=0,this.queriesResults={USEDCAPACITY:"",IPS:"",OPS:"",READLATENCY:"",WRITELATENCY:"",READCLIENTTHROUGHPUT:"",WRITECLIENTTHROUGHPUT:"",RECOVERYBYTES:""},this.telemetryURL="https://telemetry-public.ceph.com/",this.origin=window.location.origin,this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}ngOnInit(){super.ngOnInit(),this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.getHealth(),this.getCapacityCardData()}),this.getPrometheusData(this.prometheusService.lastHourDateObject),this.getDetailsCardData(),this.getTelemetryReport()}getTelemetryText(){return this.telemetryEnabled?"Cluster telemetry is active":"Cluster telemetry is inactive. To Activate the Telemetry,        click settings icon on top navigation bar and select        Telemetry configration."}ngOnDestroy(){this.interval.unsubscribe(),this.prometheusService.unsubscribe()}getHealth(){this.healthService.getMinimalHealth().subscribe(n=>{this.healthData=n})}toggleAlertsWindow(n){this.alertType=this.alertType===n?null:n}getDetailsCardData(){this.healthService.getClusterFsid().subscribe(n=>{this.detailsCardData.fsid=n}),this.orchestratorService.getName().subscribe(n=>{this.detailsCardData.orchestrator=n}),this.summaryService.subscribe(n=>{const o=n.version.replace("ceph version ","").split(" ");this.detailsCardData.cephVersion=o[0]+" "+o.slice(2,o.length).join(" ")})}getCapacityCardData(){this.osdSettingsService=this.osdService.getOsdSettings().pipe((0,Zf.q)(1)).subscribe(n=>{this.osdSettings=n}),this.capacityService=this.healthService.getClusterCapacity().subscribe(n=>{this.capacity=n})}getPrometheusData(n){this.queriesResults=this.prometheusService.getPrometheusQueriesData(n,d0.w,this.queriesResults)}getTelemetryReport(){this.mgrModuleService.getConfig("telemetry").subscribe(n=>{this.telemetryEnabled=n?.enabled})}trackByFn(n){return n}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(zh.J),e.Y36(td),e.Y36(Zc),e.Y36(Do.j),e.Y36(Rm.l),e.Y36(f0.z),e.Y36(pm.Q),e.Y36(H_.N),e.Y36(X1.s),e.Y36(Km))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-dashboard-v3"]],features:[e.qOj],decls:6,vars:3,consts:function(){let i,n,o,l,_,v,O,P,G;return i="" + "\ufffd0\ufffd" + "",n=" View alerts ",o="Cluster",l="Cluster",_="Alerts",v="Danger",O="Warning",P="Active since: " + "\ufffd0\ufffd" + "",G="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " See " + "\ufffd#4\ufffd" + "Logs" + "\ufffd/#4\ufffd" + " for more details.",[["class","container-fluid p-4",4,"ngIf"],["alertsCard",""],["logsLink",""],[1,"container-fluid","p-4"],[1,"row","d-flex","flex-row","ps-3"],[1,"col-sm-3","d-flex","flex-column","ps-2","pe-4"],["cardTitle","Details","aria-label","Details card",1,"details"],[1,"ms-4","me-4"],i,["routerLink","/api-docs","target","_blank"],[1,"fa","fa-external-link"],[1,"badge",3,"ngClass","ngbTooltip"],["target","_blank",3,"href"],["cardTitle","Inventory","aria-label","Inventory card",1,"pt-4"],["link","/hosts","title","Host","summaryType","simplified",3,"data",4,"ngIf"],["link","/monitor","title","Monitor","summaryType","simplified",3,"data",4,"ngIf"],["title","Manager",3,"data",4,"ngIf"],["link","/osd","title","OSD","summaryType","osd",3,"data",4,"ngIf"],["link","/pool","title","Pool","summaryType","simplified",3,"data",4,"ngIf"],["title","PG",3,"data",4,"ngIf"],["link","/rgw/daemon","title","Object Gateway","summaryType","simplified","id","rgw-item",3,"data",4,"ngIf"],["title","Metadata Server","id","mds-item",3,"data",4,"ngIf"],["link","/iscsi/daemon","title","iSCSI Gateway","summaryType","iscsi","id","iscsi-item",3,"data",4,"ngIf"],[1,"col-sm-9","ps-0"],[1,"row"],[1,"col-sm-8"],["cardTitle","Status","aria-label","Status card",1,"status",3,"alignItemsCenter","cardFooter","fullHeight"],["class","viewAlert",4,"ngIf"],[1,"d-flex","flex-column","ms-4","me-4","mt-4","mb-4"],["healthChecks",""],[1,"d-flex","flex-row"],[3,"ngClass","ngStyle","title",4,"ngIf"],["class","ms-2 mt-n1 lead text-primary","popoverClass","info-card-popover-cluster-status","triggers","mouseenter:mouseleave",3,"ngbPopover","openDelay","closeDelay",4,"ngIf"],["class","ms-2 mt-n1 lead",4,"ngIf"],["class","footer alerts",4,"ngIf"],[1,"col-sm-4","ps-0"],["cardTitle","Capacity","aria-label","Capacity card",3,"fullHeight"],["class","ms-4 me-4",4,"ngIf"],[1,"col-sm-12","d-flex","flex-column","pt-4"],["cardTitle","Cluster Utilization","aria-label","Cluster utilization card"],[1,"ms-4","me-4","mt-0"],[3,"selectedTime"],[4,"ngIf"],["chartTitle","IOPS","dataUnits","","decimals","0","label","Reads","label2","Writes",3,"data","data2"],["chartTitle","OSD Latencies","dataUnits","ms","decimals","2","label","Apply","label2","Commit",3,"data","data2"],["chartTitle","Client Throughput","dataUnits","B/s","decimals","2","label","Reads","label2","Writes",3,"data","data2"],["chartTitle","Recovery Throughput","dataUnits","B/s","decimals","2","label","Recovery Throughput",3,"data"],["link","/hosts","title","Host","summaryType","simplified",3,"data"],["link","/monitor","title","Monitor","summaryType","simplified",3,"data"],["title","Manager",3,"data"],["link","/osd","title","OSD","summaryType","osd",3,"data"],["link","/pool","title","Pool","summaryType","simplified",3,"data"],["title","PG",3,"data"],["link","/rgw/daemon","title","Object Gateway","summaryType","simplified","id","rgw-item",3,"data"],["title","Metadata Server","id","mds-item",3,"data"],["link","/iscsi/daemon","title","iSCSI Gateway","summaryType","iscsi","id","iscsi-item",3,"data"],[1,"viewAlert"],["href","#/monitoring/active-alerts"],n,[4,"ngTemplateOutlet"],[4,"ngFor","ngForOf"],[3,"ngStyle"],[3,"ngClass","ngStyle","title"],["popoverClass","info-card-popover-cluster-status","triggers","mouseenter:mouseleave",1,"ms-2","mt-n1","lead","text-primary",3,"ngbPopover","openDelay","closeDelay"],o,[1,"ms-2","mt-n1","lead"],l,[1,"footer","alerts"],[1,"d-flex","flex-wrap","ms-4","me-4","mb-3","mt-3"],[1,"pt-2"],_,["class","btn btn-outline-danger rounded-pill ms-2","title",v,"id","dangerAlerts",3,"ngClass","click",4,"ngIf"],["class","btn btn-outline-warning rounded-pill ms-2","title",O,"id","warningAlerts",3,"ngClass","click",4,"ngIf"],[1,"alerts-section","pt-0"],[1,"mt-1","mb-0"],[3,"options"],[1,"card-body","p-0"],["title",v,"id","dangerAlerts",1,"btn","btn-outline-danger","rounded-pill","ms-2",3,"ngClass","click"],[3,"ngClass"],["title",O,"id","warningAlerts",1,"btn","btn-outline-warning","rounded-pill","ms-2",3,"ngClass","click"],[3,"data","lowThreshold","highThreshold"],["chartTitle","Used Capacity (RAW)","dataUnits","B","label","Used Capacity",3,"maxValue","data"],[4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngClass",4,"ngIf"],[1,"card","tc_alerts","border-0","pt-3"],[1,"row","no-gutters","ps-2"],[1,"col-sm-1","text-center"],[1,"col-md-11","ps-0"],[1,"card-body","ps-0","pe-1","pb-1","pt-0"],[1,"card-title","bold"],[1,"card-text","me-3","mb-0","text-truncate",3,"innerHtml","ngbTooltip"],[1,"card-text","text-muted","me-3"],[1,"date",3,"title"],P,[1,"mt-0","mb-0"],[1,"logs-link"],G,["routerLink","/logs"]]},template:function(n,o){1&n&&(e.YNc(0,hb,67,36,"div",0),e.ALo(1,"async"),e.YNc(2,fM,1,2,"ng-template",null,1,e.W1O),e.YNc(4,pM,1,1,"ng-template",null,2,e.W1O)),2&n&&e.Q6J("ngIf",e.lcZ(1,1,o.healthData&&o.enabledFeature$))},dependencies:[f.mk,f.sg,f.O5,f.tP,f.PC,ib.A,q1.e,st.o,Ee.rH,yi.o8,yi._L,Xm.M,W2,sb.S,ab.M,f.Ov,p0,Wf.h,Ve.N,lb.v,ub.c,J2.F,TR.H,CR],styles:[".details[_ngcontent-%COMP%]{font-size:larger}.details[_ngcontent-%COMP%]   dt[_ngcontent-%COMP%]{margin-bottom:.3rem}.details[_ngcontent-%COMP%]   dd[_ngcontent-%COMP%]{margin-bottom:.8rem}.status[_ngcontent-%COMP%]   .viewAlert[_ngcontent-%COMP%]{position:absolute;right:2rem;top:2rem}.alerts[_ngcontent-%COMP%]   ngx-simplebar[_ngcontent-%COMP%]{height:13.5rem;overflow-x:hidden}.alerts[_ngcontent-%COMP%]   .text-truncate[_ngcontent-%COMP%]{-webkit-box-orient:vertical;display:-webkit-box;-webkit-line-clamp:2;white-space:normal}"]}),t})();const _M=["chartCanvas"],hM=["chartTooltip"];let mM=(()=>{class t{constructor(n,o,l){this.dimlessBinary=n,this.dimless=o,this.cssHelper=l,this.config={},this.isBytesData=!1,this.showLabelAsTooltip=!1,this.prepareFn=new e.vpe,this.chartConfig={},this.doughnutChartPlugins=[{id:"center_text",beforeDraw(_){const v=new Ag.P,O="Helvetica Neue, Helvetica, Arial, sans-serif";ob.defaults.global.defaultFontFamily=O;const P=_.ctx;if(!_.options.plugins.center_text||!_.data.datasets[0].label)return;P.save();const G=_.data.datasets[0].label.split("\n"),K=(_.chartArea.left+_.chartArea.right)/2,oe=(_.chartArea.top+_.chartArea.bottom)/2;P.textAlign="center",P.textBaseline="middle",P.font=`24px ${O}`,P.fillStyle=v.propertyValue("chart-color-center-text"),P.fillText(G[0],K,oe-10),G.length>1&&(P.font=`14px ${O}`,P.fillStyle=v.propertyValue("chart-color-center-text-description"),P.fillText(G[1],K,oe+10)),P.restore()}}],this.chartConfig={chartType:"doughnut",dataset:[{label:null,borderWidth:0}],colors:[{backgroundColor:[this.cssHelper.propertyValue("chart-color-green"),this.cssHelper.propertyValue("chart-color-yellow"),this.cssHelper.propertyValue("chart-color-orange"),this.cssHelper.propertyValue("chart-color-red"),this.cssHelper.propertyValue("chart-color-blue")]}],options:{cutoutPercentage:90,events:["click","mouseout","touchstart"],legend:{display:!0,position:"right",labels:{boxWidth:10,usePointStyle:!1}},plugins:{center_text:!0},tooltips:{enabled:!0,displayColors:!1,backgroundColor:this.cssHelper.propertyValue("chart-color-tooltip-background"),cornerRadius:0,bodyFontSize:14,bodyFontStyle:"600",position:"nearest",xPadding:12,yPadding:12,callbacks:{label:(_,v)=>{let O=v.labels[_.index];return O.includes("%")||(O=`${O} (${v.datasets[_.datasetIndex].data[_.index]}%)`),O}}},title:{display:!1}}}}ngOnInit(){new tt.h(this.chartCanvasRef,this.chartTooltipRef,(_,v)=>v+_.caretX+"px",(_,v)=>v+_.caretY-_.height-10+"px").getBody=_=>this.getChartTooltipBody(_),Xe().merge(this.chartConfig,this.config),this.prepareFn.emit([this.chartConfig,this.data])}ngOnChanges(){this.prepareFn.emit([this.chartConfig,this.data]),this.setChartSliceBorderWidth()}getChartTooltipBody(n){const o=n[0].split(": ");return this.showLabelAsTooltip?o[0]:(o[1]=this.isBytesData?this.dimlessBinary.transform(o[1]):this.dimless.transform(o[1]),o.join(": "))}setChartSliceBorderWidth(){let n=0;Xe().forEach(this.chartConfig.dataset[0].data,function(o){o>0&&(n+=1)}),this.chartConfig.dataset[0].borderWidth=n>1?1:0}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Wl.$),e.Y36(Pa.n),e.Y36(Ag.P))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-health-pie"]],viewQuery:function(n,o){if(1&n&&(e.Gf(_M,7),e.Gf(hM,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.chartCanvasRef=l.first),e.iGM(l=e.CRH())&&(o.chartTooltipRef=l.first)}},inputs:{data:"data",config:"config",isBytesData:"isBytesData",tooltipFn:"tooltipFn",showLabelAsTooltip:"showLabelAsTooltip"},outputs:{prepareFn:"prepareFn"},features:[e.TTD],decls:5,vars:6,consts:[[1,"chart-container"],["baseChart","",1,"chart-canvas",3,"datasets","chartType","options","labels","colors","plugins"],["chartCanvas",""],[1,"chartjs-tooltip"],["chartTooltip",""]],template:function(n,o){1&n&&(e.TgZ(0,"div",0),e._UZ(1,"canvas",1,2)(3,"div",3,4),e.qZA()),2&n&&(e.xp6(1),e.Q6J("datasets",o.chartConfig.dataset)("chartType",o.chartConfig.chartType)("options",o.chartConfig.options)("labels",o.chartConfig.labels)("colors",o.chartConfig.colors)("plugins",o.doughnutChartPlugins))},dependencies:[tn.jh],styles:['.chart-container[_ngcontent-%COMP%]{cursor:pointer;margin:auto;overflow:visible;position:absolute}canvas[_ngcontent-%COMP%]{user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important;opacity:0;pointer-events:none;position:absolute;transform:translate(-50%);transition:all .1s ease}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]:after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]:after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]:after{border-color:#000 transparent transparent transparent;border-style:solid;border-width:5px;content:" ";left:50%;margin-left:-5px;position:absolute;top:100%}  .chartjs-tooltip-key{display:inline-block;height:10px;margin-right:10px;width:10px}.chart-container[_ngcontent-%COMP%]{height:100%;margin-left:auto;margin-right:auto;position:unset;width:100%}.chart-canvas[_ngcontent-%COMP%]{height:100%;margin-left:auto;margin-right:auto;max-height:100%;max-width:100%;position:unset;width:100%}']}),t})();function gM(t,i){if(1&t&&(e.TgZ(0,"a",6),e._uU(1),e.qZA()),2&t){const n=e.oxw();e.Q6J("routerLink",n.link),e.xp6(1),e.Oqu(n.cardTitle)}}function vM(t,i){if(1&t&&e._uU(0),2&t){const n=e.oxw();e.hij(" ",n.cardTitle," ")}}const yM=["*"];let EM=(()=>{class t{constructor(){this.cardClass=""}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-info-card"]],inputs:{cardTitle:"cardTitle",link:"link",cardClass:"cardClass",contentClass:"contentClass"},ngContentSelectors:yM,decls:8,vars:4,consts:[[1,"card","shadow-sm",3,"ngClass"],[1,"card-body","d-flex","align-items-center","justify-content-center"],[1,"card-title","m-4"],[3,"routerLink",4,"ngIf","ngIfElse"],["noLinkTitle",""],[1,"card-text","text-center",3,"ngClass"],[3,"routerLink"]],template:function(n,o){if(1&n&&(e.F$t(),e.TgZ(0,"div",0)(1,"div",1)(2,"h4",2),e.YNc(3,gM,2,2,"a",3),e.YNc(4,vM,1,1,"ng-template",null,4,e.W1O),e.qZA(),e.TgZ(6,"div",5),e.Hsn(7),e.qZA()()()),2&n){const l=e.MAs(5);e.Q6J("ngClass",o.cardClass),e.xp6(3),e.Q6J("ngIf",o.link)("ngIfElse",l),e.xp6(3),e.Q6J("ngClass",o.contentClass)}},dependencies:[f.mk,f.O5,Ee.rH],styles:[".card[_ngcontent-%COMP%]{font-size:12px;border:.5px solid #dee2e6;border-radius:3px;height:100%}@media screen and (min-width: 320px){.card[_ngcontent-%COMP%]{font-size:calc(12px + 9 * ((100vw - 320px) / 1728))}}@media screen and (min-width: 2048px){.card[_ngcontent-%COMP%]{font-size:21px}}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]{padding-top:40px!important}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]   .card-title[_ngcontent-%COMP%]{left:-.6rem;position:absolute;top:-.3rem}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]   .card-title[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]{color:#25828e}.no-center[_ngcontent-%COMP%]{left:unset;position:unset;top:unset;transform:unset}.content-highlight[_ngcontent-%COMP%]{font-weight:700}"]}),t})();const SM=["*"];let qy=(()=>{class t{constructor(){this.icons=Rr.P}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-info-group"]],inputs:{groupTitle:"groupTitle"},ngContentSelectors:SM,decls:12,vars:7,consts:function(){let i,n;return i="here",n="For an overview of " + "\ufffd0\ufffd" + " widgets click " + "\ufffd#8\ufffd" + "" + "\ufffd/#8\ufffd" + "",[[1,"row"],[1,"info-group-title"],["iconClass","fa fa-info-circle fa-2xs"],[1,"text-center"],n,["docText",i,3,"section"]]},template:function(n,o){1&n&&(e.F$t(),e.TgZ(0,"div",0)(1,"div",1)(2,"span"),e._uU(3),e.qZA(),e.TgZ(4,"cd-helper",2)(5,"div",3),e.tHW(6,4),e.ALo(7,"lowercase"),e._UZ(8,"cd-doc",5),e.ALo(9,"lowercase"),e.N_p(),e.qZA()()()(),e.TgZ(10,"div",0),e.Hsn(11),e.qZA()),2&n&&(e.xp6(3),e.Oqu(o.groupTitle),e.xp6(5),e.MGl("section","dashboard-landing-page-",e.lcZ(9,5,o.groupTitle),""),e.xp6(1),e.pQV(e.lcZ(7,3,o.groupTitle)),e.QtT(6))},dependencies:[La.S,Ff.K,f.i8],styles:[".info-group-title[_ngcontent-%COMP%]{font-size:1.75rem;margin:0 0 .5vw}.popover-icon[_ngcontent-%COMP%]{color:#25828e}.popover-icon[_ngcontent-%COMP%]:focus{box-shadow:none}"]}),t})();var Dg=(()=>{return(t=Dg||(Dg={})).HEALTH_ERR="error",t.HEALTH_WARN="warning",t.HEALTH_OK="ok",Dg;var t})();let eE=(()=>{class t{transform(n){return Object.keys(Dg).includes(n)?Dg[n]:null}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275pipe=e.Yjl({name:"healthLabel",type:t,pure:!0}),t})(),gb=(()=>{class t{transform(n){return n?"" + n.monmap.mons.length.toString() + " (quorum " + n.quorum.join(", ") + ")":""}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275pipe=e.Yjl({name:"monSummary",type:t,pure:!0}),t})(),tE=(()=>{class t{transform(n){if(!n)return"";let o=0,l=0,_=0,v=0;Xe().each(n.osds,K=>{K.in&&o++,K.up&&l++,K.state.includes("nearfull")&&_++,K.state.includes("full")&&v++});const O=[{content:`${n.osds.length} ${"total"}`,class:""}];O.push({content:"",class:"card-text-line-break"}),O.push({content:`${l} ${"up"}, ${o} ${"in"}`,class:""});const P=n.osds.length-l,G=n.osds.length-o;if(P>0||G>0){O.push({content:"",class:"card-text-line-break"});const K=P>0?`${P} ${"down"}`:"",ue=G>0?`${G} ${"out"}`:"";O.push({content:`${K}${P>0&&G>0?", ":""}${ue}`,class:"card-text-error"})}return _>0&&O.push({content:"",class:"card-text-line-break"},{content:`${_} ${"near full"}`,class:"card-text-error"},{content:"",class:"card-text-line-break"}),v>0&&O.push({content:`${v} ${"full"}`,class:"card-text-error"}),O}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275pipe=e.Yjl({name:"osdSummary",type:t,pure:!0}),t})(),vb=(()=>{class t{transform(n){if(!n)return"";let o="n/a";const l=Xe().isUndefined(n.active_name)?"":`${"active daemon"}: ${n.active_name}`;l.length>0&&(o="1");const _=n.standbys.map(G=>G.name).join(", "),v=_?`${"standby daemons"}: ${_}`:"",O=n.standbys.length,P=[{content:`${o} ${"active"}`,class:"popover-info",titleText:l}];return P.push({content:"",class:"card-text-line-break",titleText:""}),P.push({content:`${O} ${"standby"}`,class:"popover-info",titleText:v}),P}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275pipe=e.Yjl({name:"mgrSummary",type:t,pure:!0}),t})(),yb=(()=>{class t{transform(n){if(!n)return"";let o="",l="",_=0,v=0,O=0;Xe().each(n.standbys,()=>{_+=1}),n.standbys&&!n.filesystems?(o=`${_} ${"up"}`,l="no filesystems"):0===n.filesystems.length?o="no filesystems":(Xe().each(n.filesystems,Ue=>{Xe().each(Ue.mdsmap.info,xe=>{"up:standby-replay"===xe.state?O+=1:v+=1})}),o=`${v} ${"active"}`,l=`${_+O} ${"standby"}`);const P=n.standbys.map(Ue=>Ue.name).join(", "),G=P?`${"standby daemons"}: ${P}`:"",K=n.filesystems?n.filesystems.length:0,ue=Object.values(K>0?n.filesystems[0].mdsmap.info:{}).map(Ue=>Ue.name).join(", ");let pe=ue?`${"active daemon"}: ${ue}`:"";!v&&K>0&&(pe=`${O} ${"standbyReplay"}`);const ye=[{content:o,class:"popover-info",titleText:pe}];return l&&(ye.push({content:"",class:"card-text-line-break",titleText:""}),ye.push({content:l,class:"popover-info",titleText:G})),ye}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275pipe=e.Yjl({name:"mdsSummary",type:t,pure:!0}),t})();function bM(t,i){1&t&&e.GkF(0)}function nE(t,i){if(1&t&&(e.TgZ(0,"li")(1,"span",22),e.ALo(2,"healthColor"),e._uU(3),e.qZA(),e._uU(4),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.ekj("health-warn-description","HEALTH_WARN"===n.severity),e.Q6J("ngStyle",e.lcZ(2,5,n.severity)),e.xp6(2),e.hij(" ",n.type,""),e.xp6(1),e.hij(": ",n.summary.message," ")}}function rE(t,i){if(1&t&&(e.YNc(0,bM,1,0,"ng-container",20),e.TgZ(1,"ul"),e.YNc(2,nE,5,7,"li",21),e.qZA()),2&t){e.oxw(4);const n=e.MAs(5),o=e.oxw();e.Q6J("ngTemplateOutlet",n),e.xp6(2),e.Q6J("ngForOf",o.healthData.health.checks)}}function Eb(t,i){1&t&&e._UZ(0,"i",23)}function iE(t,i){if(1&t&&(e.ynx(0),e.YNc(1,rE,3,2,"ng-template",null,17,e.W1O),e.TgZ(3,"div",18),e.ALo(4,"healthColor"),e._uU(5),e.ALo(6,"uppercase"),e.ALo(7,"healthLabel"),e.YNc(8,Eb,1,0,"i",19),e.qZA(),e.BQk()),2&t){const n=e.MAs(2),o=e.oxw(4);e.xp6(3),e.Q6J("ngStyle",e.lcZ(4,4,o.healthData.health.status))("ngbPopover",n),e.xp6(2),e.hij(" ",e.lcZ(6,6,e.lcZ(7,8,o.healthData.health.status))," "),e.xp6(3),e.Q6J("ngIf","HEALTH_OK"!==(null==o.healthData.health?null:o.healthData.health.status))}}function TM(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",22),e.ALo(2,"healthColor"),e._uU(3),e.ALo(4,"uppercase"),e.ALo(5,"healthLabel"),e.qZA(),e.BQk()),2&t){const n=e.oxw(4);e.xp6(1),e.Q6J("ngStyle",e.lcZ(2,2,n.healthData.health.status)),e.xp6(2),e.hij(" ",e.lcZ(4,4,e.lcZ(5,6,n.healthData.health.status))," ")}}function CM(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",15),e.YNc(1,iE,9,10,"ng-container",16),e.YNc(2,TM,6,8,"ng-container",16),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.Q6J("ngIf",(null==n.healthData.health||null==n.healthData.health.checks?null:n.healthData.health.checks.length)>0),e.xp6(1),e.Q6J("ngIf",!(null!=n.healthData.health&&null!=n.healthData.health.checks&&n.healthData.health.checks.length))}}function oE(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",24),e._uU(1),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.hij(" ",n.healthData.hosts," total ")}}function MM(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",25),e._uU(1),e.ALo(2,"monSummary"),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,n.healthData.mon_status)," ")}}function Sb(t,i){if(1&t&&(e.TgZ(0,"span",28),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("ngClass",n.class),e.xp6(1),e.hij(" ",n.content," ")}}function l1(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",26),e.YNc(1,Sb,2,2,"span",27),e.qZA()),2&t){const n=i.ngIf;e.xp6(1),e.Q6J("ngForOf",n)}}function bb(t,i){if(1&t&&(e.TgZ(0,"span",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("ngClass",n.class)("title",null!=n.titleText?n.titleText:""),e.xp6(1),e.hij(" ",n.content," ")}}function OM(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",29),e.YNc(1,bb,2,3,"span",30),e.ALo(2,"mgrSummary"),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.Q6J("ngForOf",e.lcZ(2,1,n.healthData.mgr_map))}}function AR(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",32),e._uU(1),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.hij(" ",n.healthData.rgw," total ")}}function Tb(t,i){if(1&t&&(e.TgZ(0,"span",31),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("ngClass",n.class)("title",null!==n.titleText?n.titleText:""),e.xp6(1),e.hij(" ",n.content," ")}}function sE(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",33),e.YNc(1,Tb,2,3,"span",30),e.qZA()),2&t){const n=i.ngIf;e.Q6J("contentClass",(n.length>1?"text-area-size-2":"")+" content-highlight"),e.xp6(1),e.Q6J("ngForOf",n)}}const AM=function(t){return{"card-text-error":t}};function aE(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",34),e._uU(1),e._UZ(2,"span",35),e._uU(3),e.TgZ(4,"span",28),e._uU(5),e.qZA()()),2&t){const n=e.oxw(3);e.xp6(1),e.hij(" ",n.healthData.iscsi_daemons.up+n.healthData.iscsi_daemons.down," total "),e.xp6(2),e.hij(" ",n.healthData.iscsi_daemons.up," up, "),e.xp6(1),e.Q6J("ngClass",e.VKq(4,AM,n.healthData.iscsi_daemons.down>0)),e.xp6(1),e.hij("",n.healthData.iscsi_daemons.down," down")}}function DM(t,i){if(1&t&&(e.TgZ(0,"cd-info-group",6),e.YNc(1,CM,3,2,"cd-info-card",7),e.YNc(2,oE,2,1,"cd-info-card",8),e.YNc(3,MM,3,3,"cd-info-card",9),e.YNc(4,l1,2,1,"cd-info-card",10),e.ALo(5,"osdSummary"),e.YNc(6,OM,3,3,"cd-info-card",11),e.YNc(7,AR,2,1,"cd-info-card",12),e.YNc(8,sE,2,2,"cd-info-card",13),e.ALo(9,"mdsSummary"),e.YNc(10,aE,6,6,"cd-info-card",14),e.qZA()),2&t){const n=e.oxw().ngIf,o=e.oxw();e.xp6(1),e.Q6J("ngIf",null==o.healthData.health?null:o.healthData.health.status),e.xp6(1),e.Q6J("ngIf",null!=o.healthData.hosts),e.xp6(1),e.Q6J("ngIf",o.healthData.mon_status),e.xp6(1),e.Q6J("ngIf",e.lcZ(5,8,o.healthData.osd_map)),e.xp6(2),e.Q6J("ngIf",o.healthData.mgr_map),e.xp6(1),e.Q6J("ngIf",n.rgw&&null!=(null==o.healthData?null:o.healthData.rgw)),e.xp6(1),e.Q6J("ngIf",e.lcZ(9,10,n.cephfs&&o.healthData.fs_map)),e.xp6(2),e.Q6J("ngIf",n.iscsi&&null!=(null==o.healthData?null:o.healthData.iscsi_daemons))}}function Cb(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-info-card",42)(1,"cd-health-pie",43),e.NdJ("prepareFn",function(l){e.CHM(n);const _=e.oxw(3);return e.KtG(_.prepareRawUsage(l[0],l[1]))}),e.qZA()()}if(2&t){const n=e.oxw(3);e.xp6(1),e.Q6J("data",n.healthData)("config",n.rawCapacityChartConfig)("isBytesData",!0)}}function lE(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-info-card",44)(1,"cd-health-pie",45),e.NdJ("prepareFn",function(l){e.CHM(n);const _=e.oxw(3);return e.KtG(_.prepareObjects(l[0],l[1]))}),e.qZA()()}if(2&t){const n=e.oxw(3);e.xp6(1),e.Q6J("data",n.healthData)}}function Mb(t,i){1&t&&e.GkF(0)}function Ob(t,i){if(1&t&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.AsE(" ",n.key,": ",n.value," ")}}function Ab(t,i){if(1&t&&(e.YNc(0,Mb,1,0,"ng-container",20),e.TgZ(1,"ul"),e.YNc(2,Ob,2,2,"li",21),e.ALo(3,"keyvalue"),e.qZA()),2&t){e.oxw(3);const n=e.MAs(5),o=e.oxw();e.Q6J("ngTemplateOutlet",n),e.xp6(2),e.Q6J("ngForOf",e.lcZ(3,2,o.healthData.pg_info.statuses))}}function Db(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-info-card",46),e.YNc(1,Ab,4,4,"ng-template",null,47,e.W1O),e.TgZ(3,"div",48)(4,"div",49)(5,"cd-health-pie",50),e.NdJ("prepareFn",function(l){e.CHM(n);const _=e.oxw(3);return e.KtG(_.preparePgStatus(l[0],l[1]))}),e.qZA()()()()}if(2&t){const n=e.MAs(2),o=e.oxw(3);e.xp6(4),e.Q6J("ngbPopover",n),e.xp6(1),e.Q6J("data",o.healthData)("config",o.pgStatusChartConfig)}}function RM(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",51),e._uU(1),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.hij(" ",n.healthData.pools.length," ")}}function xM(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",52),e._uU(1),e.ALo(2,"dimless"),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,n.healthData.pg_info.pgs_per_osd)," ")}}function wM(t,i){if(1&t&&(e.TgZ(0,"cd-info-group",36),e.YNc(1,Cb,2,3,"cd-info-card",37),e.YNc(2,lE,2,1,"cd-info-card",38),e.YNc(3,Db,6,3,"cd-info-card",39),e.YNc(4,RM,2,1,"cd-info-card",40),e.YNc(5,xM,3,3,"cd-info-card",41),e.qZA()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("ngIf",n.healthData.df),e.xp6(1),e.Q6J("ngIf",null!=(null==n.healthData.pg_info||null==n.healthData.pg_info.object_stats?null:n.healthData.pg_info.object_stats.num_objects)),e.xp6(1),e.Q6J("ngIf",n.healthData.pg_info),e.xp6(1),e.Q6J("ngIf",n.healthData.pools),e.xp6(1),e.Q6J("ngIf",n.healthData.pg_info)}}function PM(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-info-card",58)(1,"cd-health-pie",50),e.NdJ("prepareFn",function(l){e.CHM(n);const _=e.oxw(3);return e.KtG(_.prepareReadWriteRatio(l[0],l[1]))}),e.qZA()()}if(2&t){const n=e.oxw(3);e.xp6(1),e.Q6J("data",n.healthData)("config",n.clientStatsConfig)}}function Rb(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-info-card",59)(1,"cd-health-pie",50),e.NdJ("prepareFn",function(l){e.CHM(n);const _=e.oxw(3);return e.KtG(_.prepareClientThroughput(l[0],l[1]))}),e.qZA()()}if(2&t){const n=e.oxw(3);e.xp6(1),e.Q6J("data",n.healthData)("config",n.clientStatsConfig)}}function DR(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",60),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,n.healthData.client_perf.recovering_bytes_per_sec)+"/s"," ")}}function xb(t,i){if(1&t&&(e.TgZ(0,"cd-info-card",61),e._uU(1),e.qZA()),2&t){const n=e.oxw(3);e.xp6(1),e.hij(" ",n.healthData.scrub_status," ")}}function NM(t,i){if(1&t&&(e.TgZ(0,"cd-info-group",53),e.YNc(1,PM,2,2,"cd-info-card",54),e.YNc(2,Rb,2,2,"cd-info-card",55),e.YNc(3,DR,3,3,"cd-info-card",56),e.YNc(4,xb,2,1,"cd-info-card",57),e.qZA()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("ngIf",n.healthData.client_perf),e.xp6(1),e.Q6J("ngIf",n.healthData.client_perf),e.xp6(1),e.Q6J("ngIf",n.healthData.client_perf),e.xp6(1),e.Q6J("ngIf",n.healthData.scrub_status)}}const IM=function(t){return[t]};function RR(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"p",62),e.tHW(2,63),e._UZ(3,"i",28)(4,"a",64),e.N_p(),e.qZA(),e.BQk()),2&t){const n=e.oxw(3);e.xp6(3),e.Q6J("ngClass",e.VKq(1,IM,n.icons.infoCircle))}}function FM(t,i){if(1&t&&e.YNc(0,RR,5,3,"ng-container",16),2&t){const n=e.oxw(2);e.Q6J("ngIf",n.permissions.log.read)}}function LM(t,i){if(1&t&&(e.TgZ(0,"div",1),e.YNc(1,DM,11,12,"cd-info-group",2),e.YNc(2,wM,6,5,"cd-info-group",3),e.YNc(3,NM,5,4,"cd-info-group",4),e.YNc(4,FM,1,1,"ng-template",null,5,e.W1O),e.qZA()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngIf",(null==n.healthData.health?null:n.healthData.health.status)||n.healthData.mon_status||n.healthData.osd_map||n.healthData.mgr_map||null!=n.healthData.hosts||null!=n.healthData.rgw||n.healthData.fs_map||null!=n.healthData.iscsi_daemons),e.xp6(1),e.Q6J("ngIf",n.healthData.pools||n.healthData.df||n.healthData.pg_info),e.xp6(1),e.Q6J("ngIf",n.healthData.client_perf||n.healthData.scrub_status)}}let wb=(()=>{class t{constructor(n,o,l,_,v,O,P,G,K){this.healthService=n,this.osdService=o,this.authStorageService=l,this.pgCategoryService=_,this.featureToggles=v,this.refreshIntervalService=O,this.dimlessBinary=P,this.dimless=G,this.cssHelper=K,this.osdSettings=new qv,this.interval=new bd.w,this.icons=Rr.P,this.clientStatsConfig={},this.rawCapacityChartConfig={},this.pgStatusChartConfig={options:{events:[""]}},this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}ngOnInit(){this.clientStatsConfig={colors:[{backgroundColor:[this.cssHelper.propertyValue("chart-color-cyan"),this.cssHelper.propertyValue("chart-color-purple")]}]},this.rawCapacityChartConfig={colors:[{backgroundColor:[this.cssHelper.propertyValue("chart-color-blue"),this.cssHelper.propertyValue("chart-color-gray")]}]},this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.getHealth()}),this.osdService.getOsdSettings().pipe((0,Zf.q)(1)).subscribe(n=>{this.osdSettings=n})}ngOnDestroy(){this.interval.unsubscribe()}getHealth(){this.healthService.getMinimalHealth().subscribe(n=>{this.healthData=n})}prepareReadWriteRatio(n){const o=[],l=[],_=this.healthData.client_perf.write_op_per_sec+this.healthData.client_perf.read_op_per_sec;o.push(`${"Reads"}: ${this.dimless.transform(this.healthData.client_perf.read_op_per_sec)} ${"/s"}`),l.push(this.calcPercentage(this.healthData.client_perf.read_op_per_sec,_)),o.push(`${"Writes"}: ${this.dimless.transform(this.healthData.client_perf.write_op_per_sec)} ${"/s"}`),l.push(this.calcPercentage(this.healthData.client_perf.write_op_per_sec,_)),n.labels=o,n.dataset[0].data=l,n.dataset[0].label=`${this.dimless.transform(_)}\n${"IOPS"}`}prepareClientThroughput(n){const o=[],l=[],_=this.healthData.client_perf.read_bytes_sec+this.healthData.client_perf.write_bytes_sec;o.push(`${"Reads"}: ${this.dimlessBinary.transform(this.healthData.client_perf.read_bytes_sec)}${"/s"}`),l.push(this.calcPercentage(this.healthData.client_perf.read_bytes_sec,_)),o.push(`${"Writes"}: ${this.dimlessBinary.transform(this.healthData.client_perf.write_bytes_sec)}${"/s"}`),l.push(this.calcPercentage(this.healthData.client_perf.write_bytes_sec,_)),n.labels=o,n.dataset[0].data=l,n.dataset[0].label=`${this.dimlessBinary.transform(_).replace(" ","\n")}${"/s"}`}prepareRawUsage(n,o){const l=this.calcPercentage(o.df.stats.total_bytes-o.df.stats.total_used_raw_bytes,o.df.stats.total_bytes),_=this.calcPercentage(o.df.stats.total_used_raw_bytes,o.df.stats.total_bytes);this.color=_/100>=this.osdSettings.nearfull_ratio?"chart-color-red":_/100>=this.osdSettings.full_ratio?"chart-color-yellow":"chart-color-blue",this.rawCapacityChartConfig.colors[0].backgroundColor[0]=this.cssHelper.propertyValue(this.color),n.dataset[0].data=[_,l],n.labels=[`${"Used"}: ${this.dimlessBinary.transform(o.df.stats.total_used_raw_bytes)}`,`${"Avail."}: ${this.dimlessBinary.transform(o.df.stats.total_bytes-o.df.stats.total_used_raw_bytes)}`],n.dataset[0].label=`${_}%\nof ${this.dimlessBinary.transform(o.df.stats.total_bytes)}`}preparePgStatus(n,o){const l={};let _=0;Xe().forEach(o.pg_info.statuses,(v,O)=>{const P=this.pgCategoryService.getTypeByStates(O);Xe().isUndefined(l[P])&&(l[P]=0),l[P]+=v,_+=v});for(const v of this.pgCategoryService.getAllTypes())Xe().isUndefined(l[v])&&(l[v]=0);n.dataset[0].data=this.pgCategoryService.getAllTypes().map(v=>this.calcPercentage(l[v],_)),n.labels=[`${"Clean"}: ${this.dimless.transform(l.clean)}`,`${"Working"}: ${this.dimless.transform(l.working)}`,`${"Warning"}: ${this.dimless.transform(l.warning)}`,`${"Unknown"}: ${this.dimless.transform(l.unknown)}`],n.dataset[0].label=`${_}\n${"PGs"}`}prepareObjects(n,o){const l=o.pg_info.object_stats.num_object_copies,v=this.calcPercentage(l-o.pg_info.object_stats.num_objects_misplaced-o.pg_info.object_stats.num_objects_degraded-o.pg_info.object_stats.num_objects_unfound,l),O=this.calcPercentage(o.pg_info.object_stats.num_objects_misplaced,l),P=this.calcPercentage(o.pg_info.object_stats.num_objects_degraded,l),G=this.calcPercentage(o.pg_info.object_stats.num_objects_unfound,l);n.labels=[`${"Healthy"}: ${v}%`,`${"Misplaced"}: ${O}%`,`${"Degraded"}: ${P}%`,`${"Unfound"}: ${G}%`],n.dataset[0].data=[v,O,P,G],n.dataset[0].label=`${this.dimless.transform(o.pg_info.object_stats.num_objects)}\n${"objects"}`}isClientReadWriteChartShowable(){return(this.healthData.client_perf.read_op_per_sec||0)+(this.healthData.client_perf.write_op_per_sec||0)>0}calcPercentage(n,o){return Xe().isNumber(n)&&Xe().isNumber(o)&&0!==o?Math.ceil(n/o*100*100)/100:0}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(f0.z),e.Y36(Zc),e.Y36(Do.j),e.Y36(Q2.j),e.Y36(Rm.l),e.Y36(X1.s),e.Y36(Wl.$),e.Y36(Pa.n),e.Y36(Ag.P))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-health"]],decls:2,vars:3,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke,we,Z,Ft,Dt;return i="Status",n="Capacity",o="Performance",l="Cluster Status",_="Hosts",v="Monitors",O="OSDs",P="Managers",G="Object Gateways",K="Metadata Servers",oe="iSCSI Gateways",ue="Raw Capacity",pe="Objects",ye="PG Status",Ue="Pools",xe="PGs per OSD",ke="Client Read/Write",we="Client Throughput",Z="Recovery Throughput",Ft="Scrubbing",Dt="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " See " + "\ufffd#4\ufffd" + "Logs" + "\ufffd/#4\ufffd" + " for more details.",[["class","container-fluid",4,"ngIf"],[1,"container-fluid"],["groupTitle",i,4,"ngIf"],["groupTitle",n,4,"ngIf"],["groupTitle",o,4,"ngIf"],["logsLink",""],["groupTitle",i],["cardTitle",l,"class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",_,"link","/hosts","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",v,"link","/monitor","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",O,"link","/osd","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",P,"class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",G,"link","/rgw/daemon","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",K,"class","cd-status-card",3,"contentClass",4,"ngIf"],["cardTitle",oe,"link","/block/iscsi","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",l,"contentClass","content-highlight",1,"cd-status-card"],[4,"ngIf"],["healthChecks",""],["popoverClass","info-card-popover-cluster-status",1,"info-card-content-clickable",3,"ngStyle","ngbPopover"],["class","fa fa-exclamation-triangle",4,"ngIf"],[4,"ngTemplateOutlet"],[4,"ngFor","ngForOf"],[3,"ngStyle"],[1,"fa","fa-exclamation-triangle"],["cardTitle",_,"link","/hosts","contentClass","content-highlight",1,"cd-status-card"],["cardTitle",v,"link","/monitor","contentClass","content-highlight",1,"cd-status-card"],["cardTitle",O,"link","/osd","contentClass","content-highlight",1,"cd-status-card"],[3,"ngClass",4,"ngFor","ngForOf"],[3,"ngClass"],["cardTitle",P,"contentClass","content-highlight",1,"cd-status-card"],[3,"ngClass","title",4,"ngFor","ngForOf"],[3,"ngClass","title"],["cardTitle",G,"link","/rgw/daemon","contentClass","content-highlight",1,"cd-status-card"],["cardTitle",K,1,"cd-status-card",3,"contentClass"],["cardTitle",oe,"link","/block/iscsi","contentClass","content-highlight",1,"cd-status-card"],[1,"card-text-line-break"],["groupTitle",n],["cardTitle",ue,"class","cd-capacity-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",pe,"class","cd-capacity-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",ye,"class","cd-capacity-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",Ue,"link","/pool","class","cd-capacity-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",xe,"class","cd-capacity-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",ue,"contentClass","content-chart",1,"cd-capacity-card","cd-chart-card"],[3,"data","config","isBytesData","prepareFn"],["cardTitle",pe,"contentClass","content-chart",1,"cd-capacity-card","cd-chart-card"],[3,"data","prepareFn"],["cardTitle",ye,"contentClass","content-chart",1,"cd-capacity-card","cd-chart-card"],["pgStatus",""],[1,"pg-status-popover-wrapper"],[3,"ngbPopover"],[3,"data","config","prepareFn"],["cardTitle",Ue,"link","/pool","contentClass","content-highlight",1,"cd-capacity-card"],["cardTitle",xe,"contentClass","content-highlight",1,"cd-capacity-card"],["groupTitle",o],["cardTitle",ke,"class","cd-performance-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",we,"class","cd-performance-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",Z,"class","cd-performance-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",Ft,"class","cd-performance-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",ke,"contentClass","content-chart",1,"cd-performance-card","cd-chart-card"],["cardTitle",we,"contentClass","content-chart",1,"cd-performance-card","cd-chart-card"],["cardTitle",Z,"contentClass","content-highlight",1,"cd-performance-card"],["cardTitle",Ft,"contentClass","content-highlight",1,"cd-performance-card"],[1,"logs-link"],Dt,["routerLink","/logs"]]},template:function(n,o){1&n&&(e.YNc(0,LM,6,3,"div",0),e.ALo(1,"async")),2&n&&e.Q6J("ngIf",e.lcZ(1,1,o.healthData&&o.enabledFeature$))},dependencies:[f.mk,f.sg,f.O5,f.tP,f.PC,Ee.rH,yi.o8,mM,EM,qy,f.Ov,f.gd,f.Nd,Wl.$,p0,eE,Pa.n,gb,tE,vb,yb],styles:['cd-info-card[_ngcontent-%COMP%]{padding:0 .5vw}  cd-health .pg-status-popover-wrapper{position:relative}  cd-health .pg-status-popover-wrapper .popover{max-height:20vh;max-width:unset!important;min-width:unset!important;position:absolute;width:116%}  cd-health .pg-status-popover-wrapper .popover .popover-body{font-size:1rem;max-height:19vh;max-width:100%}.logs-link[_ngcontent-%COMP%]{text-align:center}.logs-link[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:#25828e}.card-text-error[_ngcontent-%COMP%]{color:#c9190b;display:inline}.card-text-line-break[_ngcontent-%COMP%]:after{content:"\\a";white-space:pre}.popover-info[_ngcontent-%COMP%]:hover{cursor:pointer}']}),t})();function Pb(t,i){1&t&&(e.ynx(0,4),e._UZ(1,"cd-refresh-selector")(2,"cd-health",5),e.BQk())}function Nb(t,i){1&t&&e._UZ(0,"cd-dashboard-v3")}let Ib=(()=>{class t{constructor(n){this.featureToggles=n,this.enabledFeature$=this.featureToggles.get()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Rm.l))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-dashboard"]],decls:7,vars:4,consts:[["aria-label","Dashboard"],["href","#main",1,"sr-only"],["class","main-padding",4,"ngIf","ngIfElse"],["dashboardV3",""],[1,"main-padding"],["id","main"]],template:function(n,o){if(1&n&&(e.TgZ(0,"main",0)(1,"a",1),e._uU(2,"skip to content"),e.qZA(),e.YNc(3,Pb,3,0,"ng-container",2),e.ALo(4,"async"),e.YNc(5,Nb,1,0,"ng-template",null,3,e.W1O),e.qZA()),2&n){const l=e.MAs(6);let _;e.xp6(3),e.Q6J("ngIf",!1===(null==(_=e.lcZ(4,2,o.enabledFeature$))?null:_.dashboard))("ngIfElse",l)}},dependencies:[f.O5,Z2,mb,wb,f.Ov],styles:["main[_ngcontent-%COMP%]:has(cd-health){padding-top:20px}"]}),t})();var Fb=s(95152),Lb=s(33394),kb=s(40205);let uE=(()=>{class t extends h_.S{constructor(n){super(),this.http=n,this.apiPath="api/nfs-ganesha",this.uiApiPath="ui-api/nfs-ganesha",this.nfsAccessType=[{value:"RW",help:"Allows all operations"},{value:"RO",help:"Allows only operations that do not modify the server"},{value:"NONE",help:"Allows no access at all"}],this.nfsFsal=[{value:"CEPH",descr:"CephFS",disabled:!1},{value:"RGW",descr:"Object Gateway",disabled:!1}],this.nfsSquash={no_root_squash:["no_root_squash","noidsquash","none"],root_id_squash:["root_id_squash","rootidsquash","rootid"],root_squash:["root_squash","rootsquash","root"],all_squash:["all_squash","allsquash","all","allanonymous","all_anonymous"]}}list(){return this.http.get(`${this.apiPath}/export`)}get(n,o){return this.http.get(`${this.apiPath}/export/${n}/${o}`)}create(n){return this.http.post(`${this.apiPath}/export`,n,{headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"})}update(n,o,l){return this.http.put(`${this.apiPath}/export/${n}/${o}`,l,{headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"})}delete(n,o){return this.http.delete(`${this.apiPath}/export/${n}/${o}`,{headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"})}listClusters(){return this.http.get(`${this.apiPath}/cluster`,{headers:{Accept:this.getVersionHeaderValue(0,1)}})}lsDir(n,o){return n?this.http.get(`${this.uiApiPath}/lsdir/${n}?root_dir=${o}`):(0,kb._)("Please specify a filesystem volume.")}fsals(){return this.http.get(`${this.uiApiPath}/fsals`)}filesystems(){return this.http.get(`${this.uiApiPath}/cephfs/filesystems`)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var kM=s(36569);const $M=["squashHelper"];function rv(t,i){1&t&&(e.TgZ(0,"span",14)(1,"span",15),e.SDv(2,16),e.qZA()())}function $b(t,i){1&t&&(e.TgZ(0,"span"),e.SDv(1,37),e.qZA())}function Hb(t,i){1&t&&(e.TgZ(0,"span"),e.ynx(1),e.SDv(2,38),e.BQk(),e._UZ(3,"br"),e.ynx(4),e.SDv(5,39),e.BQk(),e._uU(6," 192.168.0.10, 192.168.1.0/8 "),e.qZA())}function Ub(t,i){if(1&t&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.value),e.xp6(1),e.Oqu(n.value)}}function Bb(t,i){if(1&t&&(e.TgZ(0,"span",15),e._uU(1),e.qZA()),2&t){const n=e.oxw().index,o=e.oxw();e.xp6(1),e.hij(" ",o.getAccessTypeHelp(n)," ")}}function Gb(t,i){1&t&&e.GkF(0)}function Yb(t,i){if(1&t&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.Oqu(n)}}function HM(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div")(1,"div",17)(2,"div",18),e._uU(3),e.ALo(4,"ordinal"),e.TgZ(5,"span",19),e.NdJ("click",function(){const _=e.CHM(n).index,v=e.oxw();return e.KtG(v.removeClient(_))}),e._uU(6,"\xd7"),e.qZA()(),e.TgZ(7,"div",20)(8,"div",0)(9,"label",21),e.SDv(10,22),e.qZA(),e.TgZ(11,"div",23),e._UZ(12,"input",24),e.TgZ(13,"span",25),e.YNc(14,$b,2,0,"span",26),e.YNc(15,Hb,7,0,"span",26),e.qZA()()(),e.TgZ(16,"div",0)(17,"label",27),e.SDv(18,28),e.qZA(),e.TgZ(19,"div",23)(20,"select",29)(21,"option",30),e._uU(22),e.qZA(),e.YNc(23,Ub,2,2,"option",31),e.qZA(),e.YNc(24,Bb,2,1,"span",32),e.qZA()(),e.TgZ(25,"div",0)(26,"label",33)(27,"span"),e.SDv(28,34),e.qZA(),e.YNc(29,Gb,1,0,"ng-container",35),e.qZA(),e.TgZ(30,"div",23)(31,"select",36)(32,"option",30),e._uU(33),e.qZA(),e.YNc(34,Yb,2,2,"option",31),e.qZA()()()()()()}if(2&t){const n=i.$implicit,o=i.index,l=e.oxw(),_=e.MAs(4);e.xp6(1),e.Q6J("formGroup",n),e.xp6(2),e.hij(" ",e.lcZ(4,10,o+1)," "),e.xp6(11),e.Q6J("ngIf",l.showError(o,"addresses",_,"required")),e.xp6(1),e.Q6J("ngIf",l.showError(o,"addresses",_,"pattern")),e.xp6(7),e.Oqu(l.getNoAccessTypeDescr()),e.xp6(1),e.Q6J("ngForOf",l.nfsAccessType),e.xp6(1),e.Q6J("ngIf",l.getValue(o,"access_type")),e.xp6(5),e.Q6J("ngTemplateOutlet",l.squashHelperTpl),e.xp6(4),e.Oqu(l.getNoSquashDescr()),e.xp6(1),e.Q6J("ngForOf",l.nfsSquash)}}const xR=function(t){return[t]};let jb=(()=>{class t{constructor(n){this.nfsService=n,this.nfsSquash=[],this.nfsAccessType=[],this.icons=Rr.P}ngOnInit(){this.nfsSquash=Object.keys(this.nfsService.nfsSquash),this.nfsAccessType=this.nfsService.nfsAccessType,Xe().forEach(this.clients,n=>{this.addClient().patchValue(n)}),this.clientsFormArray=this.form.get("clients")}getNoAccessTypeDescr(){return this.form.getValue("access_type")?`${this.form.getValue("access_type")} ${"(inherited from global config)"}`:"-- Select the access type --"}getAccessTypeHelp(n){const o=this.nfsAccessType.find(l=>this.getValue(n,"access_type")===l.value);return Xe().isObjectLike(o)?o.help:""}getNoSquashDescr(){return this.form.getValue("squash")?`${this.form.getValue("squash")} (${"inherited from global config"})`:"-- Select what kind of user id squashing is performed --"}addClient(){this.clientsFormArray=this.form.get("clients");const n="(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}).([0-9]{1,3})([/](\\d|[1-2]\\d|3[0-2]))?)",l=new fu.d({addresses:new rn.p4("",{validators:[rn.kI.required,rn.kI.pattern(`${n}([ ,]{1,2}${n})*`)]}),access_type:new rn.p4(""),squash:new rn.p4("")});return this.clientsFormArray.push(l),l}removeClient(n){this.clientsFormArray=this.form.get("clients"),this.clientsFormArray.removeAt(n)}showError(n,o,l,_){return this.form.controls.clients.controls[n].showError(o,l,_)}getValue(n,o){return this.clientsFormArray=this.form.get("clients"),this.clientsFormArray.at(n).getValue(o)}trackByFn(n){return n}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(uE))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-nfs-form-client"]],contentQueries:function(n,o,l){if(1&n&&e.Suo(l,$M,7),2&n){let _;e.iGM(_=e.CRH())&&(o.squashHelperTpl=_.first)}},inputs:{form:"form",clients:"clients"},decls:15,vars:7,consts:function(){let i,n,o,l,_,v,O,P,G;return i="Clients",n="Add clients",o="Any client can access",l="Addresses",_="Access Type",v="Squash",O="This field is required.",P="Must contain one or more comma-separated values",G="For example:",[[1,"form-group","row"],[1,"cd-col-form-label"],i,[1,"cd-col-form-input",3,"formGroup"],["formDir","ngForm"],["class","no-border text-muted",4,"ngIf"],["formArrayName","clients"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"row","my-2"],[1,"col-12"],[1,"float-end"],["name","add_client",1,"btn","btn-light",3,"click"],[3,"ngClass"],n,[1,"no-border","text-muted"],[1,"form-text","text-muted"],o,[1,"card",3,"formGroup"],[1,"card-header"],["name","remove_client","ngbTooltip","Remove",1,"float-end","clickable",3,"click"],[1,"card-body"],["for","addresses",1,"cd-col-form-label","required"],l,[1,"cd-col-form-input"],["type","text","name","addresses","id","addresses","formControlName","addresses","placeholder","192.168.0.10, 192.168.1.0/8",1,"form-control"],[1,"invalid-feedback"],[4,"ngIf"],["for","access_type",1,"cd-col-form-label"],_,["name","access_type","id","access_type","formControlName","access_type",1,"form-select"],["value",""],[3,"value",4,"ngFor","ngForOf"],["class","form-text text-muted",4,"ngIf"],["for","squash",1,"cd-col-form-label"],v,[4,"ngTemplateOutlet"],["name","squash","id","squash","formControlName","squash",1,"form-select"],O,P,G,[3,"value"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"label",1),e.SDv(2,2),e.qZA(),e.TgZ(3,"div",3,4),e.YNc(5,rv,3,0,"span",5),e.ynx(6,6),e.YNc(7,HM,35,12,"div",7),e.BQk(),e.TgZ(8,"div",8)(9,"div",9)(10,"div",10)(11,"button",11),e.NdJ("click",function(){return o.addClient()}),e._UZ(12,"i",12),e.ynx(13),e.SDv(14,13),e.BQk(),e.qZA()()()()()()),2&n&&(e.xp6(3),e.Q6J("formGroup",o.form),e.xp6(2),e.Q6J("ngIf",0===o.form.get("clients").value.length),e.xp6(2),e.Q6J("ngForOf",o.clientsFormArray.controls)("ngForTrackBy",o.trackByFn),e.xp6(5),e.Q6J("ngClass",e.VKq(5,xR,o.icons.add)))},dependencies:[rn.YN,rn.Kr,rn.Fj,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u,rn.CE,st.o,za.b,Va.P,Os.V,f.mk,f.sg,f.O5,f.tP,yi._L,kM.f]}),t})();const zb=["nfsClients"];function Vb(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,53),e.qZA())}function UM(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,54),e.qZA())}function BM(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,55),e.qZA())}function iv(t,i){if(1&t&&(e.TgZ(0,"option",56),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.cluster_id),e.xp6(1),e.Oqu(n.cluster_id)}}const GM=function(){return["create"]},cE=function(t){return{modal:t}},_m=function(t){return{outlets:t}},YM=function(t){return["/services",t]};function dE(t,i){1&t&&(e.TgZ(0,"span",57),e.tHW(1,58),e._UZ(2,"a",59),e.N_p(),e.qZA()),2&t&&(e.xp6(2),e.Q6J("routerLink",e.VKq(6,YM,e.VKq(4,_m,e.VKq(2,cE,e.DdM(1,GM))))))}function ov(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,60),e.qZA())}function jM(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,61),e.qZA())}function zM(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,62),e.qZA())}function VM(t,i){if(1&t&&(e.TgZ(0,"option",63),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.value)("disabled",n.disabled),e.xp6(1),e.Oqu(n.descr)}}function h0(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,64),e.qZA())}function m0(t,i){if(1&t&&(e.TgZ(0,"span",57),e.SDv(1,65),e.qZA()),2&t){const n=e.oxw(2);e.xp6(1),e.pQV(n.fsalAvailabilityError),e.QtT(1)}}function ZM(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,69),e.qZA())}function WM(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,70),e.qZA())}function Zb(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,71),e.qZA())}function Wb(t,i){if(1&t&&(e.TgZ(0,"option",56),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.name),e.xp6(1),e.Oqu(n.name)}}function fE(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,72),e.qZA())}function Jb(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",8)(1,"label",66),e.SDv(2,67),e.qZA(),e.TgZ(3,"div",13)(4,"select",68),e.NdJ("change",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.pathChangeHandler())}),e.YNc(5,ZM,2,0,"option",15),e.YNc(6,WM,2,0,"option",15),e.YNc(7,Zb,2,0,"option",15),e.YNc(8,Wb,2,2,"option",16),e.qZA(),e.YNc(9,fE,2,0,"span",17),e.qZA()()}if(2&t){e.oxw();const n=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",null===o.allFsNames),e.xp6(1),e.Q6J("ngIf",null!==o.allFsNames&&0===o.allFsNames.length),e.xp6(1),e.Q6J("ngIf",null!==o.allFsNames&&o.allFsNames.length>0),e.xp6(1),e.Q6J("ngForOf",o.allFsNames),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("fs_name",n,"required"))}}function pE(t,i){1&t&&e._UZ(0,"input",79)}function _E(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,80),e.qZA())}const Qb=function(t){return{required:t}};function hE(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",73),e.SDv(2,74),e.qZA(),e.TgZ(3,"div",13)(4,"div",26),e._UZ(5,"input",75),e.TgZ(6,"label",76),e.SDv(7,77),e.qZA()(),e._UZ(8,"br"),e.YNc(9,pE,1,0,"input",78),e.YNc(10,_E,2,0,"span",17),e.qZA()()),2&t){e.oxw();const n=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(3,Qb,o.nfsForm.getValue("security_label"))),e.xp6(8),e.Q6J("ngIf",o.nfsForm.getValue("security_label")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("sec_label_xattr",n,"required"))}}function mE(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,85),e.qZA())}function JM(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,86),e.qZA())}function QM(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,87),e.qZA())}function KM(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",8)(1,"label",81)(2,"span",10),e.SDv(3,82),e.qZA(),e.TgZ(4,"cd-helper")(5,"p"),e.SDv(6,83),e.qZA()()(),e.TgZ(7,"div",13)(8,"input",84),e.NdJ("selectItem",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.pathChangeHandler())})("blur",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.pathChangeHandler())}),e.qZA(),e.YNc(9,mE,2,0,"span",17),e.YNc(10,JM,2,0,"span",17),e.YNc(11,QM,2,0,"span",17),e.qZA()()}if(2&t){e.oxw();const n=e.MAs(2),o=e.oxw();e.xp6(8),e.Q6J("ngbTypeahead",o.pathDataSource),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",n,"required")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",n,"pattern")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",n,"pathNameNotAllowed"))}}function XM(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,90),e.qZA())}function Kb(t,i){1&t&&(e.TgZ(0,"span",57),e.tHW(1,91),e._UZ(2,"a",92),e.N_p(),e.qZA())}function gE(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",81)(2,"span",10),e.SDv(3,88),e.qZA()(),e.TgZ(4,"div",13),e._UZ(5,"input",89),e.YNc(6,XM,2,0,"span",17),e.YNc(7,Kb,3,0,"span",17),e.qZA()()),2&t){e.oxw();const n=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngbTypeahead",o.bucketDataSource),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",n,"required")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",n,"bucketNameNotAllowed"))}}function Xb(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,93),e.qZA())}function qb(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,99),e.qZA())}function eT(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,100),e.qZA())}function tT(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,101),e.qZA())}function qM(t,i){if(1&t&&(e.TgZ(0,"div",8)(1,"label",94)(2,"span",10),e.SDv(3,95),e.qZA(),e.TgZ(4,"cd-helper")(5,"p"),e.tHW(6,96),e._UZ(7,"strong")(8,"strong"),e.N_p(),e.qZA(),e.TgZ(9,"p"),e.SDv(10,97),e.qZA()()(),e.TgZ(11,"div",13),e._UZ(12,"input",98),e.YNc(13,qb,2,0,"span",17),e.YNc(14,eT,2,0,"span",17),e.YNc(15,tT,2,0,"span",17),e.qZA()()),2&t){e.oxw();const n=e.MAs(2),o=e.oxw();e.xp6(13),e.Q6J("ngIf",o.nfsForm.showError("pseudo",n,"required")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("pseudo",n,"pseudoAlreadyExists")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("pseudo",n,"pattern"))}}function nT(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,102),e.qZA())}function rT(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,103),e.qZA())}function eO(t,i){if(1&t&&(e.TgZ(0,"option",56),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n.value),e.xp6(1),e.Oqu(n.value)}}function iT(t,i){if(1&t&&(e.TgZ(0,"span",104),e._uU(1),e.qZA()),2&t){const n=e.oxw(2);e.xp6(1),e.hij(" ",n.getAccessTypeHelp(n.nfsForm.getValue("access_type"))," ")}}function oT(t,i){1&t&&(e.TgZ(0,"span",105),e.tHW(1,106),e._UZ(2,"cd-doc",107),e.N_p(),e.qZA())}function Xp(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,108),e.qZA())}function u1(t,i){1&t&&e.GkF(0)}function tO(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,109),e.qZA())}function nO(t,i){1&t&&(e.TgZ(0,"option",52),e.SDv(1,110),e.qZA())}function wR(t,i){if(1&t&&(e.TgZ(0,"option",56),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.Oqu(n)}}function PR(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,111),e.qZA())}function sT(t,i){1&t&&(e.TgZ(0,"span",57),e.SDv(1,112),e.qZA())}function vE(t,i){1&t&&(e.TgZ(0,"cd-helper")(1,"ul",113)(2,"li")(3,"span",114),e._uU(4,"no_root_squash: "),e.qZA(),e.TgZ(5,"span"),e.SDv(6,115),e.qZA()(),e.TgZ(7,"li")(8,"span",114),e._uU(9,"root_id_squash: "),e.qZA(),e.TgZ(10,"span"),e.SDv(11,116),e.qZA()(),e.TgZ(12,"li")(13,"span",114),e._uU(14,"root_squash: "),e.qZA(),e.TgZ(15,"span"),e.SDv(16,117),e.qZA()(),e.TgZ(17,"li")(18,"span",114),e._uU(19,"all_squash: "),e.qZA(),e.TgZ(20,"span"),e.SDv(21,118),e.qZA()()()())}function sv(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9)(11,"span",10),e.SDv(12,11),e.qZA(),e.TgZ(13,"cd-helper")(14,"p"),e.SDv(15,12),e.qZA()()(),e.TgZ(16,"div",13)(17,"select",14),e.YNc(18,Vb,2,0,"option",15),e.YNc(19,UM,2,0,"option",15),e.YNc(20,BM,2,0,"option",15),e.YNc(21,iv,2,2,"option",16),e.qZA(),e.YNc(22,dE,3,8,"span",17),e.qZA()(),e.TgZ(23,"div",18)(24,"div",8)(25,"label",19),e.SDv(26,20),e.qZA(),e.TgZ(27,"div",13)(28,"select",21),e.NdJ("change",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.fsalChangeHandler())}),e.YNc(29,ov,2,0,"option",15),e.YNc(30,jM,2,0,"option",15),e.YNc(31,zM,2,0,"option",15),e.YNc(32,VM,2,3,"option",22),e.qZA(),e.YNc(33,h0,2,0,"span",17),e.YNc(34,m0,2,1,"span",17),e.qZA()(),e.YNc(35,Jb,10,5,"div",23),e.qZA(),e.YNc(36,hE,11,5,"div",23),e.YNc(37,KM,12,4,"div",23),e.YNc(38,gE,8,3,"div",23),e.TgZ(39,"div",8)(40,"label",24),e.SDv(41,25),e.qZA(),e.TgZ(42,"div",13)(43,"div",26),e._UZ(44,"input",27),e.TgZ(45,"label",28),e.SDv(46,29),e.qZA()(),e.YNc(47,Xb,2,0,"span",17),e.qZA()(),e.YNc(48,qM,16,3,"div",23),e.TgZ(49,"div",8)(50,"label",30),e.SDv(51,31),e.qZA(),e.TgZ(52,"div",13)(53,"select",32),e.NdJ("change",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.accessTypeChangeHandler())}),e.YNc(54,nT,2,0,"option",15),e.YNc(55,rT,2,0,"option",15),e.YNc(56,eO,2,2,"option",16),e.qZA(),e.YNc(57,iT,2,1,"span",33),e.YNc(58,oT,3,0,"span",34),e.YNc(59,Xp,2,0,"span",17),e.qZA()(),e.TgZ(60,"div",8)(61,"label",35)(62,"span"),e.SDv(63,36),e.qZA(),e.YNc(64,u1,1,0,"ng-container",37),e.qZA(),e.TgZ(65,"div",13)(66,"select",38),e.YNc(67,tO,2,0,"option",15),e.YNc(68,nO,2,0,"option",15),e.YNc(69,wR,2,2,"option",16),e.qZA(),e.YNc(70,PR,2,0,"span",17),e.qZA()(),e.TgZ(71,"div",8)(72,"label",39),e.SDv(73,40),e.qZA(),e.TgZ(74,"div",13)(75,"div",26),e._UZ(76,"input",41),e.TgZ(77,"label",42),e.SDv(78,43),e.qZA()(),e.TgZ(79,"div",26),e._UZ(80,"input",44),e.TgZ(81,"label",45),e.SDv(82,46),e.qZA()(),e.YNc(83,sT,2,0,"span",17),e._UZ(84,"hr"),e.qZA()(),e.TgZ(85,"cd-nfs-form-client",47,48),e.YNc(87,vE,22,0,"ng-template",null,49,e.W1O),e.qZA()(),e.TgZ(89,"div",50)(90,"cd-form-button-panel",51),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.submitAction())}),e.ALo(91,"titlecase"),e.ALo(92,"upperFirst"),e.qZA()()()()()}if(2&t){const n=e.MAs(2),o=e.MAs(88),l=e.oxw();e.xp6(1),e.Q6J("formGroup",l.nfsForm),e.xp6(6),e.pQV(e.lcZ(6,36,l.action))(e.lcZ(7,38,l.resource)),e.QtT(5),e.xp6(11),e.Q6J("ngIf",null===l.allClusters),e.xp6(1),e.Q6J("ngIf",null!==l.allClusters&&0===l.allClusters.length),e.xp6(1),e.Q6J("ngIf",null!==l.allClusters&&l.allClusters.length>0),e.xp6(1),e.Q6J("ngForOf",l.allClusters),e.xp6(1),e.Q6J("ngIf",l.nfsForm.showError("cluster_id",n,"required")||0===(null==l.allClusters?null:l.allClusters.length)),e.xp6(7),e.Q6J("ngIf",null===l.allFsals),e.xp6(1),e.Q6J("ngIf",null!==l.allFsals&&0===l.allFsals.length),e.xp6(1),e.Q6J("ngIf",null!==l.allFsals&&l.allFsals.length>0),e.xp6(1),e.Q6J("ngForOf",l.allFsals),e.xp6(1),e.Q6J("ngIf",l.nfsForm.showError("name",n,"required")),e.xp6(1),e.Q6J("ngIf",l.fsalAvailabilityError),e.xp6(1),e.Q6J("ngIf","CEPH"===l.nfsForm.getValue("name")),e.xp6(1),e.Q6J("ngIf","CEPH"===l.nfsForm.getValue("name")),e.xp6(1),e.Q6J("ngIf","CEPH"===l.nfsForm.getValue("name")),e.xp6(1),e.Q6J("ngIf","RGW"===l.nfsForm.getValue("name")),e.xp6(9),e.Q6J("ngIf",l.nfsForm.showError("protocolNfsv4",n,"required")),e.xp6(1),e.Q6J("ngIf",l.nfsForm.getValue("protocolNfsv4")),e.xp6(6),e.Q6J("ngIf",null===l.nfsAccessType),e.xp6(1),e.Q6J("ngIf",null!==l.nfsAccessType&&0===l.nfsAccessType.length),e.xp6(1),e.Q6J("ngForOf",l.nfsAccessType),e.xp6(1),e.Q6J("ngIf",l.nfsForm.getValue("access_type")),e.xp6(1),e.Q6J("ngIf","RW"===l.nfsForm.getValue("access_type")&&"RGW"===l.nfsForm.getValue("name")),e.xp6(1),e.Q6J("ngIf",l.nfsForm.showError("access_type",n,"required")),e.xp6(5),e.Q6J("ngTemplateOutlet",o),e.xp6(3),e.Q6J("ngIf",null===l.nfsSquash),e.xp6(1),e.Q6J("ngIf",null!==l.nfsSquash&&0===l.nfsSquash.length),e.xp6(1),e.Q6J("ngForOf",l.nfsSquash),e.xp6(1),e.Q6J("ngIf",l.nfsForm.showError("squash",n,"required")),e.xp6(13),e.Q6J("ngIf",l.nfsForm.showError("transportUDP",n,"required")||l.nfsForm.showError("transportTCP",n,"required")),e.xp6(2),e.Q6J("form",l.nfsForm)("clients",l.clients),e.xp6(5),e.Q6J("form",l.nfsForm)("submitText",e.lcZ(91,40,l.action)+" "+e.lcZ(92,42,l.resource))}}let aT=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O,P,G,K,oe){super(),this.authStorageService=n,this.nfsService=o,this.route=l,this.router=_,this.rgwBucketService=v,this.rgwSiteService=O,this.formBuilder=P,this.taskWrapper=G,this.cdRef=K,this.actionLabels=oe,this.clients=[],this.isEdit=!1,this.cluster_id=null,this.export_id=null,this.allClusters=null,this.icons=Rr.P,this.allFsals=[],this.allFsNames=null,this.fsalAvailabilityError=null,this.defaultAccessType={RGW:"RO"},this.nfsAccessType=[],this.nfsSquash=[],this.pathDataSource=ue=>ue.pipe((0,cs.b)(200),(0,Yo.x)(),(0,dd.zg)(pe=>this.getPathTypeahead(pe)),(0,Ec.U)(pe=>pe)),this.bucketDataSource=ue=>ue.pipe((0,cs.b)(200),(0,Yo.x)(),(0,dd.zg)(pe=>this.getBucketTypeahead(pe))),this.permission=this.authStorageService.getPermissions().pool,this.resource="NFS export"}ngOnInit(){this.nfsAccessType=this.nfsService.nfsAccessType,this.nfsSquash=Object.keys(this.nfsService.nfsSquash),this.createForm();const n=[this.nfsService.listClusters(),this.nfsService.fsals(),this.nfsService.filesystems()];this.router.url.startsWith("/nfs/edit")&&(this.isEdit=!0),this.isEdit?(this.action=this.actionLabels.EDIT,this.route.params.subscribe(o=>{this.cluster_id=decodeURIComponent(o.cluster_id),this.export_id=decodeURIComponent(o.export_id),n.push(this.nfsService.get(this.cluster_id,this.export_id)),this.getData(n)}),this.nfsForm.get("cluster_id").disable()):(this.action=this.actionLabels.CREATE,this.getData(n))}getData(n){(0,Za.D)(n).subscribe(o=>{this.resolveClusters(o[0]),this.resolveFsals(o[1]),this.resolveFilesystems(o[2]),o[3]&&this.resolveModel(o[3]),this.loadingReady()})}createForm(){this.nfsForm=new fu.d({cluster_id:new rn.p4("",{validators:[rn.kI.required]}),fsal:new fu.d({name:new rn.p4("",{validators:[rn.kI.required]}),fs_name:new rn.p4("",{validators:[De.h.requiredIf({name:"CEPH"})]})}),path:new rn.p4("/"),protocolNfsv4:new rn.p4(!0),pseudo:new rn.p4("",{validators:[De.h.requiredIf({protocolNfsv4:!0}),rn.kI.pattern("^/[^><|&()]*$")]}),access_type:new rn.p4("RW"),squash:new rn.p4(this.nfsSquash[0]),transportUDP:new rn.p4(!0,{validators:[De.h.requiredIf({transportTCP:!1},n=>!n)]}),transportTCP:new rn.p4(!0,{validators:[De.h.requiredIf({transportUDP:!1},n=>!n)]}),clients:this.formBuilder.array([]),security_label:new rn.p4(!1),sec_label_xattr:new rn.p4("security.selinux",De.h.requiredIf({security_label:!0,"fsal.name":"CEPH"}))})}resolveModel(n){"CEPH"===n.fsal.name&&(n.sec_label_xattr=n.fsal.sec_label_xattr),n.protocolNfsv4=-1!==n.protocols.indexOf(4),delete n.protocols,n.transportTCP=-1!==n.transports.indexOf("TCP"),n.transportUDP=-1!==n.transports.indexOf("UDP"),delete n.transports,Object.entries(this.nfsService.nfsSquash).forEach(([o,l])=>{l.includes(n.squash)&&(n.squash=o)}),n.clients.forEach(o=>{let l="";o.addresses.forEach(_=>{l+=_+", "}),l.length>=2&&(l=l.substring(0,l.length-2)),o.addresses=l}),this.nfsForm.patchValue(n),this.setPathValidation(),this.clients=n.clients}resolveClusters(n){this.allClusters=[];for(const o of n)this.allClusters.push({cluster_id:o});!this.isEdit&&this.allClusters.length>0&&this.nfsForm.get("cluster_id").setValue(this.allClusters[0].cluster_id)}resolveFsals(n){n.forEach(o=>{const l=this.nfsService.nfsFsal.find(_=>o===_.value);Xe().isObjectLike(l)&&this.allFsals.push(l)}),!this.isEdit&&this.allFsals.length>0&&this.nfsForm.patchValue({fsal:{name:this.allFsals[0].value}})}resolveFilesystems(n){this.allFsNames=n,!this.isEdit&&n.length>0&&this.nfsForm.patchValue({fsal:{fs_name:n[0].name}})}fsalChangeHandler(){this.setPathValidation();const n=this.nfsForm.getValue("name");("RGW"===n?this.rgwSiteService.get("realms").pipe((0,dd.zg)(l=>0===l.length?(0,Ps.of)(!0):this.rgwSiteService.isDefaultRealm().pipe((0,dd.zg)(_=>{if(!_)throw new Error("Selected realm is not the default.");return(0,Ps.of)(!0)})))):this.nfsService.filesystems()).subscribe({next:()=>{this.setFsalAvailability(n,!0),this.isEdit||this.nfsForm.patchValue({path:"RGW"===n?"":"/",pseudo:this.generatePseudo(),access_type:this.updateAccessType()}),this.cdRef.detectChanges()},error:l=>{this.setFsalAvailability(n,!1,l),this.nfsForm.get("name").setValue("")}})}setFsalAvailability(n,o,l=""){this.allFsals=this.allFsals.map(_=>(_.value===n&&(_.disabled=!o,this.fsalAvailabilityError=_.disabled?"" + _.descr + " backend is not available. " + l + "":null),_))}accessTypeChangeHandler(){const n=this.nfsForm.getValue("name"),o=this.nfsForm.getValue("access_type");this.defaultAccessType[n]=o}setPathValidation(){const n=this.nfsForm.get("path");n.setValidators([rn.kI.required]),"RGW"===this.nfsForm.getValue("name")?n.setAsyncValidators([De.h.bucketExistence(!0,this.rgwBucketService)]):n.setAsyncValidators([this.pathExistence(!0)]),this.isEdit&&n.markAsDirty()}getAccessTypeHelp(n){const o=this.nfsAccessType.find(l=>{if(n===l.value)return l});return Xe().isObjectLike(o)?o.help:""}getId(){return Xe().isString(this.nfsForm.getValue("cluster_id"))&&Xe().isString(this.nfsForm.getValue("path"))?this.nfsForm.getValue("cluster_id")+":"+this.nfsForm.getValue("path"):""}getPathTypeahead(n){if(!Xe().isString(n)||"/"===n)return(0,Ps.of)([]);const o=this.nfsForm.getValue("fsal").fs_name;return this.nfsService.lsDir(o,n).pipe((0,Ec.U)(l=>l.paths.filter(_=>_.toLowerCase().includes(n)).slice(0,15)),(0,eu.K)(()=>(0,Ps.of)(["Error while retrieving paths."])))}pathChangeHandler(){this.isEdit||this.nfsForm.patchValue({pseudo:this.generatePseudo()})}getBucketTypeahead(n){return Xe().isString(n)&&"/"!==n&&""!==n?this.rgwBucketService.list().pipe((0,Ec.U)(o=>o.filter(l=>l.toLowerCase().includes(n)).slice(0,15)),(0,eu.K)(()=>(0,Ps.of)(["Error while retrieving bucket names."]))):(0,Ps.of)([])}generatePseudo(){let n=this.nfsForm.getValue("pseudo");return this.nfsForm.get("pseudo")&&!this.nfsForm.get("pseudo").dirty&&(n=void 0,"CEPH"===this.nfsForm.getValue("fsal")&&(n="/cephfs",Xe().isString(this.nfsForm.getValue("path"))&&(n+=this.nfsForm.getValue("path")))),n}updateAccessType(){const n=this.nfsForm.getValue("name");let o=this.defaultAccessType[n];return o||(o="RW"),o}submitAction(){let n;const o=this.buildRequest();n=this.taskWrapper.wrapTaskAroundCall(this.isEdit?{task:new Fr.R("nfs/edit",{cluster_id:this.cluster_id,export_id:Xe().parseInt(this.export_id)}),call:this.nfsService.update(this.cluster_id,Xe().parseInt(this.export_id),o)}:{task:new Fr.R("nfs/create",{path:o.path,fsal:o.fsal,cluster_id:o.cluster_id}),call:this.nfsService.create(o)}),n.subscribe({error:l=>this.setFormErrors(l),complete:()=>this.router.navigate(["/nfs"])})}setFormErrors(n){n.error.detail&&n.error.detail.toString().includes(`Pseudo ${this.nfsForm.getValue("pseudo")} is already in use`)&&this.nfsForm.get("pseudo").setErrors({pseudoAlreadyExists:!0}),this.nfsForm.setErrors({cdSubmitButton:!0})}buildRequest(){const n=Xe().cloneDeep(this.nfsForm.value);return this.isEdit&&(n.export_id=Xe().parseInt(this.export_id)),"RGW"===n.fsal.name&&delete n.fsal.fs_name,n.protocols=[],n.protocolNfsv4?n.protocols.push(4):n.pseudo=null,delete n.protocolNfsv4,n.transports=[],n.transportTCP&&n.transports.push("TCP"),delete n.transportTCP,n.transportUDP&&n.transports.push("UDP"),delete n.transportUDP,n.clients.forEach(o=>{o.addresses=Xe().isString(o.addresses)?Xe()(o.addresses).split(/[ ,]+/).uniq().filter(l=>""!==l).value():[],o.squash||(o.squash=n.squash),o.access_type||(o.access_type=n.access_type)}),n.fsal.sec_label_xattr=!1===n.security_label||"RGW"===n.fsal.name?null:n.sec_label_xattr,delete n.sec_label_xattr,n}pathExistence(n){return o=>{if(o.pristine||!o.value)return(0,Ps.of)({required:!0});const l=this.nfsForm.getValue("fsal").fs_name;return this.nfsService.lsDir(l,o.value).pipe((0,Ec.U)(_=>_.paths.includes(o.value)===n?null:{pathNameNotAllowed:!0}),(0,eu.K)(()=>(0,Ps.of)({pathNameNotAllowed:!0})))}}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(uE),e.Y36(Ee.gz),e.Y36(Ee.F0),e.Y36(Fb.o),e.Y36(Lb.I),e.Y36(Qi.O),e.Y36(Gr.P),e.Y36(e.sBO),e.Y36(yr.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-nfs-form"]],viewQuery:function(n,o){if(1&n&&e.Gf(zb,7),2&n){let l;e.iGM(l=e.CRH())&&(o.nfsClients=l.first)}},features:[e.qOj],decls:1,vars:1,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke,we,Z,Ft,Dt,Yt,ln,$n,nn,Jn,zn,Zr,$r,ui,gi,Un,lr,ar,Cr,Wn,ai,ho,Yi,lo,pi,Kn,Nn,_i,Zi,So,us,Zo,pa,va,qi,xo,$o,rt,kt;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Cluster",o="This is the ID of an NFS Service.",l="Storage Backend",_="NFS Protocol",v="NFSv4",O="Access Type",P="Squash",G="Transport Protocol",K="UDP",oe="TCP",ue="Loading...",pe="-- No cluster available --",ye="-- Select the cluster --",Ue="This field is required. To create a new NFS cluster, " + "\ufffd#2\ufffd" + "add a new NFS Service" + "\ufffd/#2\ufffd" + ".",xe="Loading...",ke="-- No data pools available --",we="-- Select the storage backend --",Z="This field is required.",Ft="" + "\ufffd0\ufffd" + "",Dt="Volume",Yt="Loading...",ln="-- No CephFS filesystem available --",$n="-- Select the CephFS filesystem --",nn="This field is required.",Jn="Security Label",zn="Enable security label",Zr="This field is required.",$r="CephFS Path",ui="A path in a CephFS file system.",gi="This field is required.",Un="Path need to start with a '/' and can be followed by a word",lr="The path does not exist in the selected volume.",ar="Bucket",Cr="This field is required.",Wn="The bucket does not exist or is not in the default realm (if multiple realms are configured). To continue, " + "\ufffd#2\ufffd" + "create a new bucket" + "\ufffd/#2\ufffd" + ".",ai="This field is required.",ho="Pseudo",Yi="The position that this " + "[\ufffd#7\ufffd|\ufffd#8\ufffd]" + "NFS v4" + "[\ufffd/#7\ufffd|\ufffd/#8\ufffd]" + " export occupies in the " + "[\ufffd#7\ufffd|\ufffd#8\ufffd]" + "Pseudo FS" + "[\ufffd/#7\ufffd|\ufffd/#8\ufffd]" + " (it must be unique).",Yi=e.Zx4(Yi),lo="By using different Pseudo options, the same Path may be exported multiple times.",pi="This field is required.",Kn="The pseudo is already in use by another export.",Nn="Pseudo needs to start with a '/' and can't contain any of the following: >, <, |, &, ( or ).",_i="Loading...",Zi="-- No access type available --",So="The Object Gateway NFS backend has a number of limitations which will seriously affect applications writing to the share. Please consult the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " for details before enabling write access.",us="This field is required.",Zo="Loading...",pa="-- No squash available --",va="This field is required.",qi="This field is required.",xo="No user id squashing is performed.",$o="uid 0 and gid 0 are squashed to the Anonymous_Uid and Anonymous_Gid gid 0 in alt_groups lists is also squashed.",rt="uid 0 and gid of any value are squashed to the Anonymous_Uid and Anonymous_Gid alt_groups lists is discarded.",kt="All users are squashed.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","nfsForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],i,[1,"card-body"],[1,"form-group","row"],["for","cluster_id",1,"cd-col-form-label"],[1,"required"],n,o,[1,"cd-col-form-input"],["formControlName","cluster_id","name","cluster_id","id","cluster_id",1,"form-select"],["value","",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],["formGroupName","fsal"],["for","name",1,"cd-col-form-label","required"],l,["formControlName","name","name","name","id","name",1,"form-select",3,"change"],[3,"value","disabled",4,"ngFor","ngForOf"],["class","form-group row",4,"ngIf"],["for","protocols",1,"cd-col-form-label","required"],_,[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","protocolNfsv4","name","protocolNfsv4","id","protocolNfsv4","disabled","",1,"custom-control-input"],["for","protocolNfsv4",1,"custom-control-label"],v,["for","access_type",1,"cd-col-form-label","required"],O,["formControlName","access_type","name","access_type","id","access_type",1,"form-select",3,"change"],["class","form-text text-muted",4,"ngIf"],["class","form-text text-warning",4,"ngIf"],["for","squash",1,"cd-col-form-label"],P,[4,"ngTemplateOutlet"],["name","squash","formControlName","squash","id","squash",1,"form-select"],["for","transports",1,"cd-col-form-label","required"],G,["type","checkbox","formControlName","transportUDP","name","transportUDP","id","transportUDP",1,"custom-control-input"],["for","transportUDP",1,"custom-control-label"],K,["type","checkbox","formControlName","transportTCP","name","transportTCP","id","transportTCP",1,"custom-control-input"],["for","transportTCP",1,"custom-control-label"],oe,[3,"form","clients"],["nfsClients",""],["squashHelper",""],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["value",""],ue,pe,ye,[3,"value"],[1,"invalid-feedback"],Ue,[1,"btn-link",3,"routerLink"],xe,ke,we,[3,"value","disabled"],Z,Ft,["for","fs_name",1,"cd-col-form-label","required"],Dt,["formControlName","fs_name","name","fs_name","id","fs_name",1,"form-select",3,"change"],Yt,ln,$n,nn,["for","security_label",1,"cd-col-form-label",3,"ngClass"],Jn,["type","checkbox","formControlName","security_label","name","security_label","id","security_label",1,"custom-control-input"],["for","security_label",1,"custom-control-label"],zn,["type","text","class","form-control","name","sec_label_xattr","id","sec_label_xattr","formControlName","sec_label_xattr",4,"ngIf"],["type","text","name","sec_label_xattr","id","sec_label_xattr","formControlName","sec_label_xattr",1,"form-control"],Zr,["for","path",1,"cd-col-form-label"],$r,ui,["type","text","name","path","id","path","data-testid","fs_path","formControlName","path",1,"form-control",3,"ngbTypeahead","selectItem","blur"],gi,Un,lr,ar,["type","text","name","path","id","path","data-testid","rgw_path","formControlName","path",1,"form-control",3,"ngbTypeahead"],Cr,Wn,["routerLink","/rgw/bucket/create",1,"btn-link"],ai,["for","pseudo",1,"cd-col-form-label"],ho,Yi,lo,["type","text","name","pseudo","id","pseudo","formControlName","pseudo",1,"form-control"],pi,Kn,Nn,_i,Zi,[1,"form-text","text-muted"],[1,"form-text","text-warning"],So,["section","rgw-nfs"],us,Zo,pa,va,qi,[1,"squash-helper"],[1,"squash-helper-item-value"],xo,$o,rt,kt]},template:function(n,o){1&n&&e.YNc(0,sv,93,44,"div",0),2&n&&e.Q6J("cdFormLoading",o.loading)},dependencies:[rn._Y,rn.YN,rn.Kr,rn.Fj,rn.Wl,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u,rn.x0,Ee.rH,La.S,Ff.K,rl.p,Pu.y,st.o,za.b,Va.P,Os.V,f.mk,f.sg,f.O5,f.tP,yi.dR,jb,Cu.m,f.rS],styles:[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}.squash-helper[_ngcontent-%COMP%]{padding-left:1rem}.squash-helper-item-value[_ngcontent-%COMP%]{font-weight:700}"]}),t})();var g0=s(38047);function rO(t,i){if(1&t&&e._UZ(0,"cd-table-key-value",10),2&t){const n=e.oxw(2);e.Q6J("data",n.data)}}function lT(t,i){if(1&t&&e._UZ(0,"cd-table",11,12),2&t){const n=e.oxw(2);e.Q6J("data",n.clients)("columns",n.clientsColumns)}}function iO(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"nav",1,2),e.ynx(3,3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,rO,1,1,"ng-template",6),e.BQk(),e.ynx(7,7),e.TgZ(8,"a",4),e.SDv(9,8),e.qZA(),e.YNc(10,lT,2,2,"ng-template",6),e.BQk(),e.qZA(),e._UZ(11,"div",9),e.BQk()),2&t){const n=e.MAs(2),o=e.oxw();e.xp6(9),e.pQV(o.clients.length),e.QtT(9),e.xp6(2),e.Q6J("ngbNavOutlet",n)}}let oO=(()=>{class t{constructor(){this.clients=[],this.clientsColumns=[{name:"Addresses",prop:"addresses",flexGrow:2},{name:"Access Type",prop:"access_type",flexGrow:1},{name:"Squash",prop:"squash",flexGrow:1}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.clients=this.selectedItem.clients,this.data={},this.data["Cluster"]=this.selectedItem.cluster_id,this.data["NFS Protocol"]=this.selectedItem.protocols.map(n=>"NFSv"+n),this.data["Pseudo"]=this.selectedItem.pseudo,this.data["Access Type"]=this.selectedItem.access_type,this.data["Squash"]=this.selectedItem.squash,this.data["Transport"]=this.selectedItem.transports,this.data["Path"]=this.selectedItem.path,"CEPH"===this.selectedItem.fsal.name?(this.data["Storage Backend"]="CephFS",this.data["CephFS User"]=this.selectedItem.fsal.user_id,this.data["CephFS Filesystem"]=this.selectedItem.fsal.fs_name,this.data["Security Label"]=this.selectedItem.fsal.sec_label_xattr):(this.data["Storage Backend"]="Object Gateway",this.data["Object Gateway User"]=this.selectedItem.fsal.user_id))}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-nfs-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let i,n;return i="Details",n="Clients (" + "\ufffd0\ufffd" + ")",[[4,"ngIf"],["ngbNav","","cdStatefulTab","nfs-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],i,["ngbNavContent",""],["ngbNavItem","clients"],n,[3,"ngbNavOutlet"],[3,"data"],["columnMode","flex","identifier","addresses","forceIdentifier","true","selectionType","",3,"data","columns"],["table",""]]},template:function(n,o){1&n&&e.YNc(0,iO,12,2,"ng-container",0),2&n&&e.Q6J("ngIf",o.selection)},dependencies:[zo.a,bu.b,kc.m,yi.uN,yi.Pz,yi.nv,yi.Vx,yi.tO,yi.Dy,f.O5]}),t})();const sO=["nfsState"],yE=["nfsFsal"],uT=["table"];function cT(t,i){1&t&&(e.ynx(0),e.SDv(1,7),e.BQk())}function v0(t,i){1&t&&(e.ynx(0),e.SDv(1,8),e.BQk())}function EE(t,i){if(1&t&&(e.YNc(0,cT,2,0,"ng-container",6),e.YNc(1,v0,2,0,"ng-container",6)),2&t){const n=i.value;e.Q6J("ngIf","CEPH"===n.name),e.xp6(1),e.Q6J("ngIf","RGW"===n.name)}}let NR=(()=>{class t extends Hr.o{constructor(n,o,l,_,v,O){super(),this.authStorageService=n,this.modalService=o,this.nfsService=l,this.taskListService=_,this.taskWrapper=v,this.actionLabels=O,this.selection=new Io.r,this.isDefaultCluster=!1,this.builders={"nfs/create":ue=>({path:ue.path,cluster_id:ue.cluster_id,fsal:ue.fsal})},this.permission=this.authStorageService.getPermissions().nfs;const P=()=>this.selection.first()&&`${encodeURI(this.selection.first().cluster_id)}/${encodeURI(this.selection.first().export_id)}`;this.tableActions=[{permission:"create",icon:Rr.P.add,routerLink:()=>"/nfs/create",canBePrimary:ue=>!ue.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:Rr.P.edit,routerLink:()=>`/nfs/edit/${P()}`,name:this.actionLabels.EDIT},{permission:"delete",icon:Rr.P.destroy,click:()=>this.deleteNfsModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"Path",prop:"path",flexGrow:2,cellTransformation:Xr.e.executing},{name:"Pseudo",prop:"pseudo",flexGrow:2},{name:"Cluster",prop:"cluster_id",flexGrow:2},{name:"Storage Backend",prop:"fsal",flexGrow:2,cellTemplate:this.nfsFsal},{name:"Access Type",prop:"access_type",flexGrow:2}],this.taskListService.init(()=>this.nfsService.list(),n=>this.prepareResponse(n),n=>this.exports=n,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders)}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}prepareResponse(n){let o=[];return n.forEach(l=>{l.id=`${l.cluster_id}:${l.export_id}`,l.state="LOADING",o=o.concat(l)}),o}onFetchError(){this.table.reset(),this.viewCacheStatus={status:Xc.T.ValueException}}itemFilter(n,o){return n.cluster_id===o.metadata.cluster_id&&n.export_id===o.metadata.export_id}taskFilter(n){return["nfs/create","nfs/delete","nfs/edit"].includes(n.name)}updateSelection(n){this.selection=n}deleteNfsModal(){const n=this.selection.first().cluster_id,o=this.selection.first().export_id;this.modalRef=this.modalService.show(Go.M,{itemDescription:"NFS export",itemNames:[`${n}:${o}`],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new Fr.R("nfs/delete",{cluster_id:n,export_id:o}),call:this.nfsService.delete(n,o)})})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(ca.Z),e.Y36(uE),e.Y36(g0.j),e.Y36(Gr.P),e.Y36(yr.p4))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-nfs-list"]],viewQuery:function(n,o){if(1&n&&(e.Gf(sO,5),e.Gf(yE,7),e.Gf(uT,7)),2&n){let l;e.iGM(l=e.CRH())&&(o.nfsState=l.first),e.iGM(l=e.CRH())&&(o.nfsFsal=l.first),e.iGM(l=e.CRH())&&(o.table=l.first)}},features:[e._Bn([g0.j]),e.qOj],decls:7,vars:7,consts:function(){let i,n;return i="CephFS",n="Object Gateway",[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","setExpandedRow","updateSelection"],["table",""],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["nfsFsal",""],[4,"ngIf"],i,n]},template:function(n,o){1&n&&(e.TgZ(0,"cd-table",0,1),e.NdJ("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e.TgZ(2,"div",2),e._UZ(3,"cd-table-actions",3),e.qZA(),e._UZ(4,"cd-nfs-details",4),e.qZA(),e.YNc(5,EE,2,2,"ng-template",null,5,e.W1O)),2&n&&(e.Q6J("data",o.exports)("columns",o.columns)("hasDetails",!0),e.xp6(3),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},dependencies:[zo.a,$l.K,f.O5,oO]}),t})(),dT=(()=>{class t{constructor(n){this.route=n,this.route.queryParams.subscribe(o=>{this.fromLink=o.fromLink||t.defaultFromLink}),this.route.params.subscribe(o=>{this.serviceId=decodeURIComponent(o.id),this.serviceType=o.type})}}return t.defaultFromLink="/hosts",t.\u0275fac=function(n){return new(n||t)(e.Y36(Ee.gz))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-performance-counter"]],decls:3,vars:4,consts:[[3,"serviceType","serviceId"]],template:function(n,o){1&n&&(e.TgZ(0,"legend"),e._uU(1),e.qZA(),e._UZ(2,"cd-table-performance-counter",0)),2&n&&(e.xp6(1),e.AsE("",o.serviceType,".",o.serviceId,""),e.xp6(1),e.Q6J("serviceType",o.serviceType)("serviceId",o.serviceId))},dependencies:[Hy.p]}),t})();var SE=s(39219),bE=s(81354),eg=s(32057);function aO(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function fT(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function TE(t,i){if(1&t&&e._UZ(0,"cd-helper",32),2&t){const n=e.oxw();e.s9C("html",n.passwordPolicyHelpText)}}function IR(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,33),e.qZA())}function lO(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,34),e.qZA())}function FR(t,i){if(1&t&&(e.TgZ(0,"span",29),e._uU(1),e.qZA()),2&t){const n=e.oxw();e.xp6(1),e.hij(" ",n.passwordValuation," ")}}function uO(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,35),e.qZA())}function cO(t,i){1&t&&(e.TgZ(0,"span",29),e.SDv(1,36),e.qZA())}let pT=(()=>{class t{constructor(n,o,l,_,v,O,P){this.actionLabels=n,this.notificationService=o,this.userService=l,this.authStorageService=_,this.formBuilder=v,this.router=O,this.passwordPolicyService=P,this.passwordPolicyHelpText="",this.icons=Rr.P,this.action=this.actionLabels.CHANGE,this.resource="password",this.createForm()}createForm(){this.passwordPolicyService.getHelpText().subscribe(n=>{this.passwordPolicyHelpText=n}),this.userForm=this.formBuilder.group({oldpassword:[null,[rn.kI.required,De.h.custom("notmatch",()=>this.userForm&&this.userForm.getValue("newpassword")===this.userForm.getValue("oldpassword"))]],newpassword:[null,[rn.kI.required,De.h.custom("notmatch",()=>this.userForm&&this.userForm.getValue("oldpassword")===this.userForm.getValue("newpassword"))],[De.h.passwordPolicy(this.userService,()=>this.authStorageService.getUsername(),(n,o,l)=>{this.passwordStrengthLevelClass=this.passwordPolicyService.mapCreditsToCssClass(o),this.passwordValuation=Xe().defaultTo(l,"")})]],confirmnewpassword:[null,[rn.kI.required]]},{validators:[De.h.match("newpassword","confirmnewpassword")]})}onSubmit(){if(this.userForm.pristine)return;const n=this.authStorageService.getUsername(),o=this.userForm.getValue("oldpassword"),l=this.userForm.getValue("newpassword");this.userService.changePassword(n,o,l).subscribe(()=>this.onPasswordChange(),()=>{this.userForm.setErrors({cdSubmitButton:!0})})}onPasswordChange(){this.notificationService.show(Ho.k.success,"Updated user password\""),this.router.navigate(["/login"])}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(Ui.g),e.Y36(eg.K),e.Y36(Do.j),e.Y36(Qi.O),e.Y36(Ee.F0),e.Y36(bE.q))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-user-password-form"]],decls:45,vars:25,consts:function(){let i,n,o,l,_,v,O,P,G,K;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Old password",o="New password",l="Confirm new password",_="This field is required.",v="The old and new passwords must be different.",O="This field is required.",P="The old and new passwords must be different.",G="This field is required.",K="Password confirmation doesn't match the new password.",[[1,"cd-col-form"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],i,[1,"card-body"],[1,"form-group","row"],["for","oldpassword",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],[1,"input-group"],["type","password","placeholder","Old password...","id","oldpassword","formControlName","oldpassword","autocomplete","new-password","autofocus","",1,"form-control"],["cdPasswordButton","oldpassword",1,"btn","btn-light"],["class","invalid-feedback",4,"ngIf"],["for","newpassword",1,"cd-col-form-label"],[1,"required"],o,["class","text-pre-wrap",3,"html",4,"ngIf"],["type","password","placeholder","Password...","id","newpassword","autocomplete","new-password","formControlName","newpassword",1,"form-control"],["type","button","cdPasswordButton","newpassword",1,"btn","btn-light"],[1,"password-strength-level"],["data-toggle","tooltip",3,"title"],["for","confirmnewpassword",1,"cd-col-form-label","required"],l,["type","password","autocomplete","new-password","placeholder","Confirm new password...","id","confirmnewpassword","formControlName","confirmnewpassword",1,"form-control"],["cdPasswordButton","confirmnewpassword",1,"btn","btn-light"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],_,v,[1,"text-pre-wrap",3,"html"],O,P,G,K]},template:function(n,o){if(1&n&&(e.TgZ(0,"div",0)(1,"form",1,2)(3,"div",3)(4,"div",4),e.SDv(5,5),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10)(13,"div",11),e._UZ(14,"input",12)(15,"button",13),e.qZA(),e.YNc(16,aO,2,0,"span",14),e.YNc(17,fT,2,0,"span",14),e.qZA()(),e.TgZ(18,"div",7)(19,"label",15)(20,"span",16),e.SDv(21,17),e.qZA(),e.YNc(22,TE,1,1,"cd-helper",18),e.qZA(),e.TgZ(23,"div",10)(24,"div",11),e._UZ(25,"input",19)(26,"button",20),e.qZA(),e.TgZ(27,"div",21),e._UZ(28,"div",22),e.qZA(),e.YNc(29,IR,2,0,"span",14),e.YNc(30,lO,2,0,"span",14),e.YNc(31,FR,2,1,"span",14),e.qZA()(),e.TgZ(32,"div",7)(33,"label",23),e.SDv(34,24),e.qZA(),e.TgZ(35,"div",10)(36,"div",11),e._UZ(37,"input",25)(38,"button",26),e.qZA(),e.YNc(39,uO,2,0,"span",14),e.YNc(40,cO,2,0,"span",14),e.qZA()()(),e.TgZ(41,"div",27)(42,"cd-form-button-panel",28),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(43,"titlecase"),e.ALo(44,"upperFirst"),e.qZA()()()()()),2&n){const l=e.MAs(2);e.xp6(1),e.Q6J("formGroup",o.userForm),e.xp6(6),e.pQV(e.lcZ(6,17,o.action))(e.lcZ(7,19,o.resource)),e.QtT(5),e.xp6(9),e.Q6J("ngIf",o.userForm.showError("oldpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("oldpassword",l,"notmatch")),e.xp6(5),e.Q6J("ngIf",o.passwordPolicyHelpText.length>0),e.xp6(6),e.Tol(o.passwordStrengthLevelClass),e.s9C("title",o.passwordValuation),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"notmatch")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"passwordPolicy")),e.xp6(8),e.Q6J("ngIf",o.userForm.showError("confirmnewpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("confirmnewpassword",l,"match")),e.xp6(2),e.Q6J("form",o.userForm)("submitText",e.lcZ(43,21,o.action)+" "+e.lcZ(44,23,o.resource))}},dependencies:[f.O5,rn._Y,rn.Fj,rn.JJ,rn.JL,rn.sg,rn.u,La.S,rl.p,Tu.U,oa.C,st.o,za.b,Va.P,Os.V,f.rS,Cu.m],styles:["#oldpassword.is-valid[_ngcontent-%COMP%]{background-image:unset;border-color:#ced4da}"]}),t})();function _T(t,i){1&t&&(e.TgZ(0,"span",16),e.SDv(1,17),e.qZA())}function hT(t,i){1&t&&(e.TgZ(0,"span",16),e.SDv(1,18),e.qZA())}function dO(t,i){1&t&&(e.TgZ(0,"span",16),e.SDv(1,19),e.qZA())}function mT(t,i){1&t&&(e.TgZ(0,"span",16),e.SDv(1,20),e.qZA())}function gT(t,i){if(1&t&&(e.TgZ(0,"span",16),e._uU(1),e.qZA()),2&t){const n=e.oxw();e.xp6(1),e.hij(" ",n.passwordValuation," ")}}function fO(t,i){1&t&&(e.TgZ(0,"span",16),e.SDv(1,21),e.qZA())}function pO(t,i){1&t&&(e.TgZ(0,"span",16),e.SDv(1,22),e.qZA())}let vT=(()=>{class t extends pT{constructor(n,o,l,_,v,O,P,G){super(n,o,l,_,v,O,P),this.actionLabels=n,this.notificationService=o,this.userService=l,this.authStorageService=_,this.formBuilder=v,this.router=O,this.passwordPolicyService=P,this.authService=G}onPasswordChange(){this.authService.logout()}onCancel(){this.authService.logout()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(Ui.g),e.Y36(eg.K),e.Y36(Do.j),e.Y36(Qi.O),e.Y36(Ee.F0),e.Y36(bE.q),e.Y36(SE.e))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-login-password-form"]],features:[e.qOj],decls:31,vars:19,consts:function(){let i,n,o,l,_,v,O,P;return i="Please set a new password.",n="You will be redirected to the login page afterwards.",o="This field is required.",l="The old and new passwords must be different.",_="This field is required.",v="The old and new passwords must be different.",O="This field is required.",P="Password confirmation doesn't match the new password.",[i,n,["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"form-group","has-feedback"],[1,"input-group"],["type","password","placeholder","Old password...","id","oldpassword","formControlName","oldpassword","autocomplete","new-password","autofocus","",1,"form-control"],["cdPasswordButton","oldpassword",1,"btn","btn-outline-light","btn-password"],["class","invalid-feedback",4,"ngIf"],["type","password","placeholder","New password...","id","newpassword","autocomplete","new-password","formControlName","newpassword",1,"form-control"],["type","button","cdPasswordButton","newpassword",1,"btn","btn-outline-light","btn-password"],[1,"password-strength-level"],["data-toggle","tooltip",3,"title"],["type","password","autocomplete","new-password","placeholder","Confirm new password...","id","confirmnewpassword","formControlName","confirmnewpassword",1,"form-control"],["cdPasswordButton","confirmnewpassword",1,"btn","btn-outline-light","btn-password"],["wrappingClass","text-right",3,"form","disabled","submitText","submitActionEvent","backActionEvent"],[1,"invalid-feedback"],o,l,_,v,O,P]},template:function(n,o){if(1&n&&(e.TgZ(0,"div")(1,"h2"),e.SDv(2,0),e.qZA(),e.TgZ(3,"h4"),e.SDv(4,1),e.qZA(),e.TgZ(5,"form",2,3)(7,"div",4)(8,"div",5),e._UZ(9,"input",6)(10,"button",7),e.qZA(),e.YNc(11,_T,2,0,"span",8),e.YNc(12,hT,2,0,"span",8),e.qZA(),e.TgZ(13,"div",4)(14,"div",5),e._UZ(15,"input",9)(16,"button",10),e.qZA(),e.TgZ(17,"div",11),e._UZ(18,"div",12),e.qZA(),e.YNc(19,dO,2,0,"span",8),e.YNc(20,mT,2,0,"span",8),e.YNc(21,gT,2,1,"span",8),e.qZA(),e.TgZ(22,"div",4)(23,"div",5),e._UZ(24,"input",13)(25,"button",14),e.qZA(),e.YNc(26,fO,2,0,"span",8),e.YNc(27,pO,2,0,"span",8),e.qZA(),e.TgZ(28,"cd-form-button-panel",15),e.NdJ("submitActionEvent",function(){return o.onSubmit()})("backActionEvent",function(){return o.onCancel()}),e.ALo(29,"titlecase"),e.ALo(30,"upperFirst"),e.qZA()()()),2&n){const l=e.MAs(6);e.xp6(5),e.Q6J("formGroup",o.userForm),e.xp6(6),e.Q6J("ngIf",o.userForm.showError("oldpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("oldpassword",l,"notmatch")),e.xp6(6),e.Tol(o.passwordStrengthLevelClass),e.s9C("title",o.passwordValuation),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"notmatch")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"passwordPolicy")),e.xp6(5),e.Q6J("ngIf",o.userForm.showError("confirmnewpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("confirmnewpassword",l,"match")),e.xp6(1),e.Q6J("form",o.userForm)("disabled",o.userForm.invalid)("submitText",e.lcZ(29,15,o.action)+" "+e.lcZ(30,17,o.resource))}},dependencies:[f.O5,rn._Y,rn.Fj,rn.JJ,rn.JL,rn.sg,rn.u,rl.p,Tu.U,oa.C,st.o,za.b,Va.P,Os.V,f.rS,Cu.m],styles:["cd-login-password-form h4{margin:0 0 30px}  cd-login-password-form .form-group{background-color:#2e373d;border-left:4px solid #fff}  cd-login-password-form .form-group:focus-within{border-left:4px solid #25828e}  cd-login-password-form .btn-password,   cd-login-password-form .btn-password:focus,   cd-login-password-form .form-control,   cd-login-password-form .form-control:focus{background-color:#2e373d;border:0;box-shadow:none;color:#f8f9fa;filter:none;outline:none}  cd-login-password-form .form-control::placeholder{color:#6c757d}  cd-login-password-form .btn-password:focus{outline-color:#25828e}  cd-login-password-form button.btn:not(:first-child){margin-left:5px}@keyframes _ngcontent-%COMP%_autofill{to{background-color:#2e373d;color:#f8f9fa}}input[_ngcontent-%COMP%]:-webkit-autofill{animation-fill-mode:both;animation-name:_ngcontent-%COMP%_autofill;border-radius:0;box-shadow:0 0 0 1000px #2e373d inset;-webkit-text-fill-color:#f8f9fa;-webkit-transition-property:none;transition-property:none}.invalid-feedback[_ngcontent-%COMP%]{padding-left:9px}.is-invalid.cd-form-control[_ngcontent-%COMP%]{border-color:transparent}#oldpassword.is-valid[_ngcontent-%COMP%]{background-image:unset;border-color:transparent}"]}),t})();class _O{}function yT(t,i){1&t&&(e.TgZ(0,"div",21),e.SDv(1,22),e.qZA())}function ET(t,i){1&t&&(e.TgZ(0,"div",21),e.SDv(1,23),e.qZA())}function ST(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",1)(1,"h1",2),e._uU(2,"Ceph login"),e.qZA(),e.TgZ(3,"form",3,4),e.NdJ("ngSubmit",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.login())}),e.TgZ(5,"div",5)(6,"label",6),e.SDv(7,7),e.qZA(),e.TgZ(8,"input",8,9),e.NdJ("ngModelChange",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.model.username=l)}),e.qZA(),e.YNc(10,yT,2,0,"div",10),e.qZA(),e.TgZ(11,"div",11)(12,"div",12)(13,"div",13)(14,"label",14),e.SDv(15,15),e.qZA(),e.TgZ(16,"input",16,17),e.NdJ("ngModelChange",function(l){e.CHM(n);const _=e.oxw();return e.KtG(_.model.password=l)}),e.qZA(),e.YNc(18,ET,2,0,"div",10),e.qZA(),e.TgZ(19,"span",18),e._UZ(20,"button",19),e.qZA()()(),e._UZ(21,"input",20),e.qZA()()}if(2&t){const n=e.MAs(4),o=e.MAs(9),l=e.MAs(17),_=e.oxw();e.xp6(8),e.Q6J("ngModel",_.model.username),e.uIk("aria-invalid",o.invalid),e.xp6(2),e.Q6J("ngIf",(n.submitted||o.dirty)&&o.invalid),e.xp6(6),e.Q6J("ngModel",_.model.password),e.uIk("aria-invalid",l.invalid),e.xp6(2),e.Q6J("ngIf",(n.submitted||l.dirty)&&l.invalid),e.xp6(3),e.Q6J("disabled",n.invalid)}}let bT=(()=>{class t{constructor(n,o,l,_,v){this.authService=n,this.authStorageService=o,this.modalService=l,this.route=_,this.router=v,this.model=new _O,this.isLoginActive=!1,this.postInstalled=!1}ngOnInit(){if(this.authStorageService.isLoggedIn())this.router.navigate([""]);else{this.modalService.dismissAll();let n=null;if(-1!==window.location.hash.indexOf("access_token=")){n=window.location.hash.split("access_token=")[1];const o=window.location.toString();window.history.replaceState({},document.title,o.split("?")[0])}this.authService.check(n).subscribe(o=>{o.login_url?(this.postInstalled="POST_INSTALLED"===o.cluster_status,"#/login"===o.login_url?this.isLoginActive=!0:window.location.replace(o.login_url)):(this.authStorageService.set(o.username,o.permissions,o.sso,o.pwdExpirationDate),this.router.navigate([""]))})}}login(){this.authService.login(this.model).subscribe(()=>{const n=this.postInstalled?"/":"/expand-cluster";let o=Xe().get(this.route.snapshot.queryParams,"returnUrl",n);!this.postInstalled&&"/dashboard"===this.route.snapshot.queryParams.returnUrl&&(o="/expand-cluster"),this.router.navigate([o])})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(SE.e),e.Y36(Do.j),e.Y36(ca.Z),e.Y36(Ee.gz),e.Y36(Ee.F0))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-login"]],decls:1,vars:1,consts:function(){let i,n,o,l,_;return i="Username",n="Password",o="Log in",l="Username is required",_="Password is required",[["class","container",4,"ngIf"],[1,"container"],[1,"sr-only"],["name","loginForm","novalidate","",3,"ngSubmit"],["loginForm","ngForm"],[1,"form-group","has-feedback","d-flex","flex-column","py-3"],["for","username",1,"ps-3"],i,["id","username","name","username","type","text","aria-labelledby","username","required","","autofocus","",1,"form-control","ps-3",3,"ngModel","ngModelChange"],["username","ngModel"],["class","invalid-feedback ps-3",4,"ngIf"],["id","password-div",1,"form-group","has-feedback"],[1,"input-group","d-flex","flex-nowrap"],[1,"d-flex","flex-column","flex-grow-1","py-3"],["for","password",1,"ps-3"],n,["id","password","name","password","type","password","aria-labelledby","password","required","",1,"form-control","ps-3",3,"ngModel","ngModelChange"],["password","ngModel"],[1,"form-group-append"],["type","button","cdPasswordButton","password","aria-label","toggle-password",1,"btn","btn-outline-light","btn-password","h-100","px-4"],["type","submit","value",o,1,"btn","btn-accent","px-5","py-2",3,"disabled"],[1,"invalid-feedback","ps-3"],l,_]},template:function(n,o){1&n&&e.YNc(0,ST,22,7,"div",0),2&n&&e.Q6J("ngIf",o.isLoginActive)},dependencies:[f.O5,rn._Y,rn.Fj,rn.JJ,rn.JL,rn.Q7,rn.On,rn.F,Tu.U,oa.C,st.o,za.b,Va.P],styles:["cd-login .form-group{background-color:#2e373d;border-left:4px solid #fff;height:auto;margin-bottom:2rem}  cd-login .form-group:focus-within{border-left:4px solid #25828e}  cd-login .btn-password,   cd-login .btn-password:focus,   cd-login .form-control,   cd-login .form-control:focus{background-color:#2e373d;border:0;box-shadow:none;color:#f8f9fa;filter:none;outline:none}  cd-login label{color:#adb5bd}  cd-login .btn-password:focus{outline-color:#25828e}@keyframes _ngcontent-%COMP%_autofill{to{background-color:#2e373d;color:#f8f9fa}}input[_ngcontent-%COMP%]:-webkit-autofill{animation-fill-mode:both;animation-name:_ngcontent-%COMP%_autofill;border-radius:0;box-shadow:0 0 0 1000px #2e373d inset;-webkit-text-fill-color:#f8f9fa;-webkit-transition-property:none;transition-property:none}"]}),t})();var TT=s(72625);function hO(t,i){if(1&t&&(e.TgZ(0,"h4",14),e._uU(1),e.qZA()),2&t){const n=e.oxw(2);e.xp6(1),e.Oqu(n.message)}}function LR(t,i){if(1&t&&(e.TgZ(0,"h4"),e.tHW(1,15),e._UZ(2,"a",16),e.N_p(),e.qZA()),2&t){const n=e.oxw(2);e.xp6(2),e.s9C("href",n.docUrl,e.LSH),e.pQV(n.sectionInfo),e.QtT(1)}}function CT(t,i){if(1&t&&(e.TgZ(0,"div"),e._UZ(1,"i",10),e.TgZ(2,"div",11)(3,"h3")(4,"b"),e._uU(5),e.qZA()(),e.YNc(6,hO,2,1,"h4",12),e.YNc(7,LR,3,2,"h4",13),e.qZA()()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngClass",n.icon),e.xp6(4),e.Oqu(n.header),e.xp6(1),e.Q6J("ngIf",n.header!==n.message),e.xp6(1),e.Q6J("ngIf",n.section)}}function kR(t,i){if(1&t&&(e.TgZ(0,"button",20),e.SDv(1,21),e.qZA()),2&t){const n=e.oxw(2);e.Q6J("routerLink",n.buttonRoute),e.xp6(1),e.pQV(n.buttonName),e.QtT(1)}}function $R(t,i){if(1&t&&(e.TgZ(0,"button",22),e.SDv(1,23),e.qZA()),2&t){const n=e.oxw(2);e.Q6J("routerLink",n.secondaryButtonRoute),e.xp6(1),e.pQV(n.secondaryButtonName),e.QtT(1)}}function HR(t,i){if(1&t&&(e.TgZ(0,"div",17),e.YNc(1,kR,2,2,"button",18),e.YNc(2,$R,2,2,"button",19),e.qZA()),2&t){const n=e.oxw(),o=e.MAs(11);e.xp6(1),e.Q6J("ngIf",!n.uiConfig)("ngIfElse",o),e.xp6(1),e.Q6J("ngIf",n.secondaryButtonName&&n.secondaryButtonRoute)}}function mO(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",25),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.doConfigure())}),e.SDv(1,26),e.qZA()}if(2&t){const n=e.oxw(2);e.uIk("title",n.buttonTitle),e.xp6(1),e.pQV(n.buttonName),e.QtT(1)}}function gO(t,i){if(1&t&&e.YNc(0,mO,2,2,"button",24),2&t){const n=e.oxw();e.Q6J("ngIf",n.uiConfig)}}function UR(t,i){1&t&&(e._UZ(0,"i",27),e.TgZ(1,"div",11)(2,"h3"),e.tHW(3,28),e._UZ(4,"b"),e.N_p(),e.qZA(),e.TgZ(5,"h4",5),e.SDv(6,29),e.qZA()())}function BR(t,i){1&t&&(e.TgZ(0,"div",11)(1,"button",30),e.SDv(2,31),e.qZA()()),2&t&&(e.xp6(1),e.Q6J("routerLink","/dashboard"))}let GR=(()=>{class t{constructor(n,o,l,_){this.router=n,this.docService=o,this.http=l,this.notificationService=_}ngOnInit(){this.fetchData(),this.routerSubscription=this.router.events.pipe((0,y.h)(n=>n instanceof Ee.m2)).subscribe(()=>{this.fetchData()})}doConfigure(){this.http.post(`ui-api/${this.uiApiPath}/configure`,{}).subscribe({next:()=>{this.notificationService.show(Ho.k.info,`Configuring ${this.component}`)},error:n=>{this.notificationService.show(Ho.k.error,n)},complete:()=>{setTimeout(()=>{this.router.navigate([this.uiApiPath]),this.notificationService.show(Ho.k.success,`Configured ${this.component}`)},3e3)}})}unloadHandler(n){n.returnValue=!1}fetchData(){try{this.router.onSameUrlNavigation="reload",this.message=history.state.message,this.header=history.state.header,this.section=history.state.section,this.sectionInfo=history.state.section_info,this.icon=history.state.icon,this.source=history.state.source,this.uiConfig=history.state.uiConfig,this.uiApiPath=history.state.uiApiPath,this.buttonRoute=history.state.button_route,this.buttonName=history.state.button_name,this.buttonTitle=history.state.button_title,this.secondaryButtonRoute=history.state.secondary_button_route,this.secondaryButtonName=history.state.secondary_button_name,this.secondaryButtonTitle=history.state.secondary_button_title,this.component=history.state.component,this.docUrl=this.docService.urlGenerator(this.section)}catch{this.router.navigate(["/error"])}}ngOnDestroy(){this.routerSubscription&&this.routerSubscription.unsubscribe()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ee.F0),e.Y36(TT.R),e.Y36(m.eN),e.Y36(Ui.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-error"]],hostBindings:function(n,o){1&n&&e.NdJ("beforeunload",function(_){return o.unloadHandler(_)},!1,e.Jf7)},decls:16,vars:4,consts:function(){let i,n,o,l,_,v,O;return i="Please consult the " + "\ufffd#2\ufffd" + "documentation" + "\ufffd/#2\ufffd" + " on how to configure and enable the " + "\ufffd0\ufffd" + " management functionality. ",n="" + "\ufffd0\ufffd" + "",o="" + "\ufffd0\ufffd" + "",l="" + "\ufffd0\ufffd" + "",_="" + "\ufffd#4\ufffd" + "Page not Found" + "\ufffd/#4\ufffd" + "",v="Sorry, we couldn\u2019t find what you were looking for. The page you requested may have been changed or moved.",O="Go To Dashboard",[["target","_blank"],[1,"container","h-75"],[1,"row","h-100","justify-content-center","align-items-center"],[1,"blank-page"],[4,"ngIf","ngIfElse"],[1,"mt-4"],["class","text-center",4,"ngIf","ngIfElse"],["configureButtonTpl",""],["elseBlock",""],["dashboardButton",""],[1,"mx-auto","d-block",3,"ngClass"],[1,"mt-4","text-center"],["class","mt-3",4,"ngIf"],[4,"ngIf"],[1,"mt-3"],i,[3,"href"],[1,"text-center"],["class","btn btn-primary ms-1",3,"routerLink",4,"ngIf","ngIfElse"],["class","btn btn-light ms-1",3,"routerLink",4,"ngIf"],[1,"btn","btn-primary","ms-1",3,"routerLink"],n,[1,"btn","btn-light","ms-1",3,"routerLink"],o,["class","btn btn-primary",3,"click",4,"ngIf"],[1,"btn","btn-primary",3,"click"],l,[1,"fa","fa-exclamation-triangle","mx-auto","d-block","text-danger"],_,v,[1,"btn","btn-primary",3,"routerLink"],O]},template:function(n,o){if(1&n&&(e.TgZ(0,"head")(1,"title"),e._uU(2,"Error Page"),e.qZA(),e._UZ(3,"base",0),e.qZA(),e.TgZ(4,"div",1)(5,"div",2)(6,"div",3),e.YNc(7,CT,8,4,"div",4),e.TgZ(8,"div",5),e.YNc(9,HR,3,3,"div",6),e.qZA()()()(),e.YNc(10,gO,1,1,"ng-template",null,7,e.W1O),e.YNc(12,UR,7,0,"ng-template",null,8,e.W1O),e.YNc(14,BR,3,1,"ng-template",null,9,e.W1O)),2&n){const l=e.MAs(13),_=e.MAs(15);e.xp6(7),e.Q6J("ngIf",o.header&&o.message)("ngIfElse",l),e.xp6(2),e.Q6J("ngIf",o.buttonName&&o.buttonRoute||o.uiConfig)("ngIfElse",_)}},dependencies:[f.mk,f.O5,Ee.rH,st.o],styles:["h4[_ngcontent-%COMP%]{color:#495057}i[_ngcontent-%COMP%]{font-size:6em;margin-top:120px}.fa-lock[_ngcontent-%COMP%]{color:#dc3545}.fa-wrench[_ngcontent-%COMP%]{color:#25828e}"]}),t})(),y0=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-blank-layout"]],decls:1,vars:0,template:function(n,o){1&n&&e._UZ(0,"router-outlet")},dependencies:[Ee.lC]}),t})();var vO=s(92340);let MT=(()=>{class t{constructor(n,o){this.http=n,this.localeId=o}getLocale(){return this.localeId||vO.N.default_lang}setLocale(n){document.cookie=`cd-lang=${n}`}getLanguages(){return this.http.get("ui-api/langs")}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN),e.LFG(e.soG))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var tg=(()=>{return(t=tg||(tg={})).cs="\u010ce\u0161tina",t.de="Deutsch",t["en-US"]="English",t.es="Espa\xf1ol",t.fr="Fran\xe7ais",t.id="Bahasa Indonesia",t.it="Italiano",t.ja="\u65e5\u672c\u8a9e",t.ko="\ud55c\uad6d\uc5b4",t.pl="Polski",t.pt="Portugu\xeas (brasileiro)",t["zh-Hans"]="\u4e2d\u6587 (\u7b80\u4f53)",t["zh-Hant"]="\u4e2d\u6587 (\u7e41\u9ad4\uff09",tg;var t})();function OT(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"button",4),e.NdJ("click",function(){const _=e.CHM(n).$implicit,v=e.oxw();return e.KtG(v.changeLanguage(_.key))}),e._uU(2),e.qZA(),e.BQk()}if(2&t){const n=i.$implicit;e.xp6(2),e.hij(" ",n.value," ")}}let CE=(()=>{class t{constructor(n){this.languageService=n,this.allLanguages=tg,this.supportedLanguages={}}ngOnInit(){this.selectedLanguage=this.languageService.getLocale(),this.languageService.getLanguages().subscribe(n=>{this.supportedLanguages=Xe().pick(tg,n)})}reloadWindow(){window.location.reload()}changeLanguage(n){this.languageService.setLocale(n),this.reloadWindow()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(MT))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-language-selector"]],decls:6,vars:4,consts:function(){let i;return i="Select a Language",[["ngbDropdown","","display","dynamic","placement","bottom-right"],["ngbDropdownToggle","","id","toggle-language-button","title",i,"role","button"],["ngbDropdownMenu","","role","listbox","aria-labelledby","toggle-language-button"],[4,"ngFor","ngForOf"],["ngbDropdownItem","","role","option",3,"click"]]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"a",1),e._uU(2),e.qZA(),e.TgZ(3,"div",2),e.YNc(4,OT,3,1,"ng-container",3),e.ALo(5,"keyvalue"),e.qZA()()),2&n&&(e.xp6(2),e.hij(" ",o.allLanguages[o.selectedLanguage]," "),e.xp6(2),e.Q6J("ngForOf",e.lcZ(5,2,o.supportedLanguages)))},dependencies:[f.sg,st.o,yi.jt,yi.iD,yi.Vi,yi.TH,f.Nd]}),t})(),YR=(()=>{class t{constructor(n){this.http=n,this.baseUiURL="ui-api/login/custom_banner"}getBannerText(){return this.http.get(this.baseUiURL)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function ME(t,i){if(1&t&&(e.TgZ(0,"p",1),e._uU(1),e.qZA()),2&t){const n=i.ngIf;e.xp6(1),e.Oqu(n)}}let AT=(()=>{class t{constructor(n){this.customLoginBannerService=n}ngOnInit(){this.bannerText$=this.customLoginBannerService.getBannerText()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(YR))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-custom-login-banner"]],decls:2,vars:3,consts:[["class","login-text",4,"ngIf"],[1,"login-text"]],template:function(n,o){1&n&&(e.YNc(0,ME,2,1,"p",0),e.ALo(1,"async")),2&n&&e.Q6J("ngIf",e.lcZ(1,1,o.bannerText$))},dependencies:[f.O5,f.Ov],styles:[".login-text[_ngcontent-%COMP%]{font-weight:700;margin:0;padding:12px 20% 12px 12px}"]}),t})();function yO(t,i){if(1&t&&(e.TgZ(0,"li",11)(1,"cd-doc",12),e.DtL(2,13),e.qZA()()),2&t){const n=i.$implicit;e.xp6(1),e.pQV(n.text),e.QtT(2),e.s9C("section",n.section)}}let jR=(()=>{class t{constructor(){this.docItems=[{section:"help",text:"Help"},{section:"security",text:"Security"},{section:"trademarks",text:"Trademarks"}]}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-login-layout"]],decls:16,vars:1,consts:function(){let i;return i="" + "\ufffd0\ufffd" + "",[[1,"login","full-height"],[1,"navbar","p-4"],[1,"navbar-brand"],[1,"form-inline"],[1,"container"],[1,"row","full-height"],[1,"col-sm-12","col-md-6","d-sm-block","login-form"],[1,"col-sm-12","col-md-6","d-sm-block","branding-info"],["src","assets/Ceph_Ceph_Logo_with_text_white.svg","alt","Ceph",1,"img-fluid","pb-3"],[1,"list-inline"],["class","list-inline-item p-3",4,"ngFor","ngForOf"],[1,"list-inline-item","p-3"],["noSubscribe","true",3,"section",6,"docText"],["docText",i]]},template:function(n,o){1&n&&(e.TgZ(0,"main",0)(1,"header")(2,"nav",1),e._UZ(3,"a",2),e.TgZ(4,"div",3),e._UZ(5,"cd-language-selector"),e.qZA()()(),e.TgZ(6,"section")(7,"div",4)(8,"div",5)(9,"div",6),e._UZ(10,"router-outlet"),e.qZA(),e.TgZ(11,"div",7),e._UZ(12,"img",8),e.TgZ(13,"ul",9),e.YNc(14,yO,3,2,"li",10),e.qZA(),e._UZ(15,"cd-custom-login-banner"),e.qZA()()()()()),2&n&&(e.xp6(14),e.Q6J("ngForOf",o.docItems))},dependencies:[f.sg,Ee.lC,CE,Ff.K,AT],styles:["cd-login-layout .login{background-color:#374249;background-image:url(ceph_background.3fbdf95cd52530d7.gif);background-position:right bottom;background-repeat:no-repeat;color:#f8f9fa}  cd-login-layout .login header{position:absolute;width:100vw}  cd-login-layout .login header .navbar .dropdown-menu{margin-top:.2rem}  cd-login-layout .login header .navbar .dropdown-menu li a:hover{background-color:#25828e}  cd-login-layout .login section{display:inline-flex;min-height:100vh;width:100vw}  cd-login-layout .login .list-inline{margin-bottom:0;margin-left:17%}  cd-login-layout .login a{color:#fff}  cd-login-layout .login a:hover{color:#adb5bd}@media screen and (min-width: 576px){  cd-login-layout .login .login-form,   cd-login-layout .login .branding-info{padding-top:30vh}}@media screen and (max-width: 767px){  cd-login-layout .login .login-form{padding-top:10vh}  cd-login-layout .login .branding-info{padding-top:0}}"]}),t})(),DT=(()=>{class t{constructor(n,o,l){this.document=n,this.summaryService=o,this.cssHelper=l}init(){this.url=this.document.getElementById("cdFavicon")?.getAttribute("href"),this.sub=this.summaryService.subscribe(n=>{this.changeIcon(n.health_status)})}changeIcon(n){if(n===this.oldStatus)return;this.oldStatus=n;const o=this.document.getElementById("cdFavicon"),v=this.document.createElement("canvas");v.width=16,v.height=16;const O=v.getContext("2d"),P=this.document.createElement("img");P.src=this.url,P.onload=()=>{O.drawImage(P,0,0,16,16),Object.keys(qm).includes(n)&&(O.save(),O.globalCompositeOperation="destination-out",O.beginPath(),O.arc(v.width-4,4,6,0,2*Math.PI),O.fill(),O.restore(),O.beginPath(),O.arc(v.width-4,4,4,0,2*Math.PI),O.fillStyle=this.cssHelper.propertyValue(qm[n]),O.fill()),o.setAttribute("href",v.toDataURL("image/png"))}}ngOnDestroy(){this.changeIcon(),this.sub?.unsubscribe()}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(f.K0),e.LFG(zh.J),e.LFG(Ag.P))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac}),t})();var EO=s(71099),RT=s(59193),c1=s(68307),SO=s(77393);class bO{constructor(i,n){this.count=i,this.source=n}call(i,n){return n.subscribe(new VR(i,this.count,this.source))}}class VR extends SO.L{constructor(i,n,o){super(i),this.count=n,this.source=o}complete(){if(!this.isStopped){const{source:i,count:n}=this;if(0===n)return super.complete();n>-1&&(this.count=n-1),i.subscribe(this._unsubscribeAndRecycle())}}}var TO=s(2817);let CO=(()=>{class t{constructor(n){this.http=n,this.url="ui-api/motd"}get(){return this.http.get(this.url)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})(),xT=(()=>{class t{constructor(n){this.motdService=n,this.motdSource=new Wc.X(null),this.localStorageKey="dashboard_motd_hidden",this.motd$=this.motdSource.asObservable(),this.subscription=(0,Ps.of)(!0).pipe((0,dd.zg)(()=>this.motdService.get()),(0,eu.K)(o=>(yt.isFunction(o.preventDefault)&&o.preventDefault(),RT.E)),(0,c1.b)(o=>this.processResponse(o)),(0,Ar.g)(6e4),function zR(t=-1){return i=>0===t?(0,RT.c)():i.lift(new bO(t<0?-1:t-1,i))}(),(0,TO.r)()).subscribe()}ngOnDestroy(){this.subscription.unsubscribe()}hide(){const n=this.motdSource.getValue();if(n){const o=`${n.severity}:${n.md5}`;switch(n.severity){case"info":localStorage.setItem(this.localStorageKey,o),sessionStorage.removeItem(this.localStorageKey);break;case"warning":sessionStorage.setItem(this.localStorageKey,o),localStorage.removeItem(this.localStorageKey)}}this.motdSource.next(null)}processResponse(n){const o=sessionStorage.getItem(this.localStorageKey)||localStorage.getItem(this.localStorageKey);let l=yt.isNull(o);if(!l&&n){const[_,v]=o.split(":");(_!==n.severity||v!==n.md5)&&(l=!0,sessionStorage.removeItem(this.localStorageKey),localStorage.removeItem(this.localStorageKey))}l&&this.motdSource.next(n)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(CO))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();class MO{constructor(i){if(this._maxConcurrency=i,this._queue=[],i<=0)throw new Error("semaphore must be initialized to a positive value");this._value=i}acquire(){const i=this.isLocked(),n=new Promise(o=>this._queue.push(o));return i||this._dispatch(),n}runExclusive(i){return function(t,i,n,o){return new(n||(n=Promise))(function(_,v){function O(K){try{G(o.next(K))}catch(oe){v(oe)}}function P(K){try{G(o.throw(K))}catch(oe){v(oe)}}function G(K){K.done?_(K.value):function l(_){return _ instanceof n?_:new n(function(v){v(_)})}(K.value).then(O,P)}G((o=o.apply(t,i||[])).next())})}(this,void 0,void 0,function*(){const[n,o]=yield this.acquire();try{return yield i(n)}finally{o()}})}isLocked(){return this._value<=0}release(){if(this._maxConcurrency>1)throw new Error("this method is unavailabel on semaphores with concurrency > 1; use the scoped release returned by acquire instead");this._currentReleaser&&(this._currentReleaser(),this._currentReleaser=void 0)}_dispatch(){const i=this._queue.shift();if(!i)return;let n=!1;this._currentReleaser=()=>{n||(n=!0,this._value++,this._dispatch())},i([this._value--,this._currentReleaser])}}class PT{constructor(){this._semaphore=new MO(1)}acquire(){return function(t,i,n,o){return new(n||(n=Promise))(function(_,v){function O(K){try{G(o.next(K))}catch(oe){v(oe)}}function P(K){try{G(o.throw(K))}catch(oe){v(oe)}}function G(K){K.done?_(K.value):function l(_){return _ instanceof n?_:new n(function(v){v(_)})}(K.value).then(O,P)}G((o=o.apply(t,i||[])).next())})}(this,void 0,void 0,function*(){const[,i]=yield this._semaphore.acquire();return i})}runExclusive(i){return this._semaphore.runExclusive(()=>i())}isLocked(){return this._semaphore.isLocked()}release(){this._semaphore.release()}}let AO=(()=>{class t{constructor(n,o){this.alertFormatter=n,this.prometheusService=o,this.backendFailure=!1,this.notifications=[]}refresh(){this.backendFailure||this.prometheusService.getNotifications(Xe().last(this.notifications)).subscribe(n=>this.handleNotifications(n),()=>this.backendFailure=!0)}handleNotifications(n){0!==n.length&&(this.notifications.length>0&&this.alertFormatter.sendNotifications(Xe().flatten(n.map(o=>this.formatNotification(o)))),this.notifications=this.notifications.concat(n))}formatNotification(n){return this.alertFormatter.convertToCustomAlerts(n.alerts).map(o=>this.alertFormatter.convertAlertToNotification(o))}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(o0),e.LFG(pm.Q))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var OE=s(57924),DO=s(90504);const NT=function(t,i){return[t,i]},gh=function(t,i,n,o){return[t,i,n,o]};function RO(t,i){if(1&t&&(e.TgZ(0,"div")(1,"div",11)(2,"div",12)(3,"div",13)(4,"span",14),e._UZ(5,"i",15)(6,"i",15),e.qZA()(),e.TgZ(7,"div",16)(8,"div",17)(9,"h6",18),e._uU(10),e.qZA(),e.TgZ(11,"div",19),e._UZ(12,"ngb-progressbar",20),e.qZA(),e.TgZ(13,"p",21)(14,"small",22),e._uU(15),e.ALo(16,"cdDate"),e.qZA(),e.TgZ(17,"span",23),e._uU(18),e.qZA()()()()()(),e._UZ(19,"hr"),e.qZA()),2&t){const n=i.$implicit,o=e.oxw(2);e.xp6(4),e.Q6J("ngClass",e.WLB(11,NT,o.icons.stack,o.icons.large2x)),e.xp6(1),e.Q6J("ngClass",e.WLB(14,NT,o.icons.stack2x,o.icons.circle)),e.xp6(1),e.Q6J("ngClass",e.l5B(17,gh,o.icons.stack1x,o.icons.spinner,o.icons.spin,o.icons.inverse)),e.xp6(4),e.Oqu(n.description),e.xp6(2),e.Q6J("value",null==n?null:n.progress)("striped",!0)("animated",!0),e.xp6(3),e.hij(" ",e.lcZ(16,9,n.begin_time)," "),e.xp6(3),e.hij(" ",n.progress||0," % ")}}function AE(t,i){if(1&t&&e.YNc(0,RO,20,22,"div",10),2&t){const n=e.oxw();e.Q6J("ngForOf",n.executingTasks)("ngForTrackBy",n.trackByFn)}}const av=function(t){return[t]};function xO(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",37),e.NdJ("click",function(){e.CHM(n);const l=e.oxw().$implicit,_=e.oxw(3);return e.KtG(_.silence(l))}),e._UZ(1,"i",15),e.qZA()}if(2&t){const n=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,av,n.icons.mute))}}function DE(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",38),e.NdJ("click",function(){e.CHM(n);const l=e.oxw().$implicit,_=e.oxw(3);return e.KtG(_.expire(l))}),e._UZ(1,"i",15),e.qZA()}if(2&t){const n=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,av,n.icons.bell))}}function IT(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"small"),e.ynx(2),e.SDv(3,39),e.BQk(),e._uU(4),e.ALo(5,"duration"),e.qZA(),e._UZ(6,"br"),e.BQk()),2&t){const n=e.oxw().$implicit;e.xp6(4),e.hij(" ",e.lcZ(5,1,n.duration)," ")}}const RE=function(t,i,n){return[t,i,n]};function wO(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",15)(1,"div",29)(2,"div",12)(3,"div",13)(4,"span",15),e._UZ(5,"i",15)(6,"i",15),e.qZA()(),e.TgZ(7,"div",30)(8,"div",17)(9,"button",31),e.NdJ("click",function(l){const v=e.CHM(n).index;return e.oxw(3).remove(v),e.KtG(l.stopPropagation())}),e._UZ(10,"i",15),e.qZA(),e.YNc(11,xO,2,3,"button",32),e.YNc(12,DE,2,3,"button",33),e.TgZ(13,"h6",18),e._uU(14),e.qZA(),e._UZ(15,"p",34),e.TgZ(16,"p",21),e.YNc(17,IT,7,3,"ng-container",24),e.TgZ(18,"small",35),e.ALo(19,"cdDate"),e._uU(20),e.ALo(21,"relativeDate"),e.qZA(),e._UZ(22,"i",36),e.qZA()()()()(),e._UZ(23,"hr"),e.qZA()}if(2&t){const n=i.$implicit,o=e.oxw(3);e.Q6J("ngClass",n.borderClass),e.xp6(4),e.Q6J("ngClass",e.kEZ(18,RE,o.icons.stack,o.icons.large2x,n.textClass)),e.xp6(1),e.Q6J("ngClass",e.WLB(22,NT,o.icons.circle,o.icons.stack2x)),e.xp6(1),e.Q6J("ngClass",e.kEZ(25,RE,o.icons.stack1x,o.icons.inverse,n.iconClass)),e.xp6(4),e.Q6J("ngClass",e.VKq(29,av,o.icons.trash)),e.xp6(1),e.Q6J("ngIf","Prometheus"===n.application&&2!==n.type&&!n.alertSilenced),e.xp6(1),e.Q6J("ngIf","Prometheus"===n.application&&2!==n.type&&n.alertSilenced),e.xp6(2),e.Oqu(n.title),e.xp6(1),e.Q6J("innerHtml",n.message,e.oJD),e.xp6(2),e.Q6J("ngIf",n.duration),e.xp6(1),e.Q6J("title",e.lcZ(19,14,n.timestamp)),e.xp6(2),e.Oqu(e.lcZ(21,16,n.timestamp)),e.xp6(2),e.Q6J("ngClass",e.VKq(31,av,n.applicationClass))("title",n.application)}}function FT(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"button",25),e.NdJ("click",function(l){return e.CHM(n),e.oxw(2).removeAll(),e.KtG(l.stopPropagation())}),e._UZ(2,"i",26),e._uU(3," \xa0 "),e.ynx(4),e.SDv(5,27),e.BQk(),e.qZA(),e._UZ(6,"hr"),e.YNc(7,wO,24,33,"div",28),e.BQk()}if(2&t){const n=e.oxw(2);e.xp6(2),e.Q6J("ngClass",e.VKq(2,av,n.icons.trash)),e.xp6(5),e.Q6J("ngForOf",n.notifications)}}function LT(t,i){if(1&t&&e.YNc(0,FT,8,4,"ng-container",24),2&t){const n=e.oxw();e.Q6J("ngIf",n.notifications.length>0)}}function PO(t,i){1&t&&(e.TgZ(0,"div")(1,"div",40),e.SDv(2,41),e.qZA()())}function kT(t,i){if(1&t&&e.YNc(0,PO,3,0,"div",24),2&t){const n=e.oxw();e.Q6J("ngIf",0===n.notifications.length&&0===n.executingTasks.length)}}function NO(t,i){1&t&&e.GkF(0)}function xE(t,i){1&t&&e.GkF(0)}function xm(t,i){1&t&&e.GkF(0)}let ng=(()=>{class t{constructor(n,o,l,_,v,O,P,G,K,oe){this.notificationService=n,this.summaryService=o,this.taskMessageService=l,this.prometheusNotificationService=_,this.succeededLabels=v,this.authStorageService=O,this.prometheusAlertService=P,this.prometheusService=G,this.ngZone=K,this.cdRef=oe,this.isSidebarOpened=!1,this.executingTasks=[],this.subs=new bd.w,this.icons=Rr.P,this.last_task="",this.mutex=new PT,this.simplebar={autoHide:!1},this.notifications=[]}ngOnDestroy(){window.clearInterval(this.interval),window.clearTimeout(this.timeout),this.subs.unsubscribe()}ngOnInit(){this.last_task=window.localStorage.getItem("last_task");const n=this.authStorageService.getPermissions();n.prometheus.read&&n.configOpt.read&&(this.triggerPrometheusAlerts(),this.ngZone.runOutsideAngular(()=>{this.interval=window.setInterval(()=>{this.ngZone.run(()=>{this.triggerPrometheusAlerts()})},5e3)})),this.subs.add(this.notificationService.data$.subscribe(o=>{this.notifications=Xe().orderBy(o,["timestamp"],["desc"]),this.cdRef.detectChanges()})),this.subs.add(this.notificationService.sidebarSubject.subscribe(o=>{this.isSidebarOpened=!o&&!this.isSidebarOpened,window.clearTimeout(this.timeout),this.timeout=window.setTimeout(()=>{this.cdRef.detectChanges()},0)})),this.subs.add(this.summaryService.subscribe(o=>{this._handleTasks(o.executing_tasks),this.mutex.acquire().then(l=>{Xe().filter(o.finished_tasks,_=>!this.last_task||Nt()(_.end_time).isAfter(this.last_task)).forEach(_=>{const v=this.notificationService.finishedTaskToNotification(_,_.success),O=new i1.e(v);O.timestamp=_.end_time,O.duration=_.duration,(!this.last_task||Nt()(_.end_time).isAfter(this.last_task))&&(this.last_task=_.end_time,window.localStorage.setItem("last_task",this.last_task)),this.notificationService.save(O)}),this.cdRef.detectChanges(),l()})}))}_handleTasks(n){for(const o of n)o.description=this.taskMessageService.getRunningTitle(o);this.executingTasks=n}triggerPrometheusAlerts(){this.prometheusAlertService.refresh(),this.prometheusNotificationService.refresh()}removeAll(){this.notificationService.removeAll()}remove(n){this.notificationService.remove(n)}closeSidebar(){this.isSidebarOpened=!1}trackByFn(n){return n}silence(n){const o="YYYY-MM-DD HH:mm",l="silence",_={name:"alertname",value:n.title.split(" ")[0],isRegex:!1},v={matchers:[_],startsAt:Nt()(Nt()().format(o)).toISOString(),endsAt:Nt()(Nt()().add(2,"hours").format(o)).toISOString(),createdBy:this.authStorageService.getUsername(),comment:"Silence created from the alert notification"};let O="";n.alertSilenced=!0,O=O.concat(` ${_.name} - ${_.value},`);const P=`${this.succeededLabels.CREATED} ${l} for ${O.slice(0,-1)}`;this.prometheusService.setSilence(v).subscribe(G=>{n&&(n.silenceId=G.body.silenceId),this.notificationService.show(Ho.k.success,P,void 0,void 0,"Prometheus")})}expire(n){n.alertSilenced=!1,this.prometheusService.expireSilence(n.silenceId).subscribe(()=>{this.notificationService.show(Ho.k.success,`${this.succeededLabels.EXPIRED} ${n.silenceId}`,void 0,void 0,"Prometheus")},o=>{o.application="Prometheus"})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ui.g),e.Y36(zh.J),e.Y36(OE.p),e.Y36(AO),e.Y36(yr.aX),e.Y36(Do.j),e.Y36(Km),e.Y36(pm.Q),e.Y36(e.R0b),e.Y36(e.sBO))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-notifications-sidebar"]],hostVars:2,hostBindings:function(n,o){2&n&&e.ekj("active",o.isSidebarOpened)},decls:16,vars:5,consts:function(){let i,n,o,l,_,v,O;return i="Tasks and Notifications",n="Clear notifications",o="Remove notification",l="Silence Alert",_="Expire Silence",v="Duration:",O="There are no notifications.",[["tasksTpl",""],["notificationsTpl",""],["emptyTpl",""],[1,"card",3,"clickOutsideEnabled","clickOutside"],[1,"card-header"],i,["tabindex","-1","type","button","title","close",1,"btn-close","float-end",3,"click"],[3,"options"],[1,"card-body"],[4,"ngTemplateOutlet"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"card","tc_task","border-0"],[1,"row","no-gutters"],[1,"col-md-2","text-center"],[1,"text-info",3,"ngClass"],[3,"ngClass"],[1,"col-md-9"],[1,"card-body","p-1"],[1,"card-title","bold"],[1,"mb-1"],["type","info",3,"value","striped","animated"],[1,"card-text","text-muted"],[1,"date","float-start"],[1,"float-end"],[4,"ngIf"],["type","button",1,"btn","btn-light","btn-block",3,"click"],["aria-hidden","true",3,"ngClass"],n,[3,"ngClass",4,"ngFor","ngForOf"],[1,"card","tc_notification","border-0"],[1,"col-md-10"],["title",o,1,"btn","btn-link","float-end","mt-0","pt-0",3,"click"],["class","btn btn-link float-end text-muted mute m-0 p-0","title",l,3,"click",4,"ngIf"],["class","btn btn-link float-end text-muted mute m-0 p-0","title",_,3,"click",4,"ngIf"],[1,"card-text",3,"innerHtml"],[1,"date",3,"title"],[1,"float-end","custom-icon",3,"ngClass","title"],["title",l,1,"btn","btn-link","float-end","text-muted","mute","m-0","p-0",3,"click"],["title",_,1,"btn","btn-link","float-end","text-muted","mute","m-0","p-0",3,"click"],v,[1,"message","text-center"],O]},template:function(n,o){if(1&n&&(e.YNc(0,AE,1,2,"ng-template",null,0,e.W1O),e.YNc(2,LT,1,1,"ng-template",null,1,e.W1O),e.YNc(4,kT,1,1,"ng-template",null,2,e.W1O),e.TgZ(6,"div",3),e.NdJ("clickOutside",function(){return o.closeSidebar()}),e.TgZ(7,"div",4),e.ynx(8),e.SDv(9,5),e.BQk(),e.TgZ(10,"button",6),e.NdJ("click",function(){return o.closeSidebar()}),e.qZA()(),e.TgZ(11,"ngx-simplebar",7)(12,"div",8),e.YNc(13,NO,1,0,"ng-container",9),e.YNc(14,xE,1,0,"ng-container",9),e.YNc(15,xm,1,0,"ng-container",9),e.qZA()()()),2&n){const l=e.MAs(1),_=e.MAs(3),v=e.MAs(5);e.xp6(6),e.Q6J("clickOutsideEnabled",o.isSidebarOpened),e.xp6(5),e.Q6J("options",o.simplebar),e.xp6(2),e.Q6J("ngTemplateOutlet",l),e.xp6(1),e.Q6J("ngTemplateOutlet",_),e.xp6(1),e.Q6J("ngTemplateOutlet",v)}},dependencies:[f.mk,f.sg,f.O5,f.tP,yi.Ly,st.o,DO._,Xm.M,Wf.h,Ve.N,HS.u],styles:["[_nghost-%COMP%]{bottom:10px;max-width:90vw;position:fixed;right:-350px;top:53px;transition:all .6s;width:350px;z-index:9}.active[_nghost-%COMP%]{right:20px}.card[_ngcontent-%COMP%]{height:100%}.card-body[_ngcontent-%COMP%]{padding-left:0;padding-right:5px;padding-top:3px}ngx-simplebar[_ngcontent-%COMP%]{height:calc(100% - 42.2px)}.separator[_ngcontent-%COMP%]{background-color:#e9ecef;color:#6c757d;font-size:1rem;padding:5px 12px}.btn-block[_ngcontent-%COMP%]{width:98%}.btn-link[_ngcontent-%COMP%]   .fa-trash-o[_ngcontent-%COMP%]{color:#000}table[_ngcontent-%COMP%]{width:100%}.row[_ngcontent-%COMP%]{margin-left:0;margin-right:0;padding-bottom:1rem;padding-top:1rem}hr[_ngcontent-%COMP%]{margin-bottom:2px;margin-top:2px}"],changeDetection:0}),t})();var $T=s(9837),wE=s(51907);function HT(t,i){1&t&&(e.TgZ(0,"div"),e.tHW(1,3),e._UZ(2,"strong")(3,"a",4),e.N_p(),e.qZA())}function IO(t,i){if(1&t&&(e.TgZ(0,"div"),e.tHW(1,5),e._UZ(2,"strong")(3,"a",4),e.N_p(),e.qZA()),2&t){const n=e.oxw(2);e.xp6(3),e.pQV(n.expirationDays),e.QtT(1)}}function WR(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-alert-panel",1),e.NdJ("dismissed",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.onDismissed())}),e.YNc(1,HT,4,0,"div",2),e.YNc(2,IO,4,1,"div",2),e.qZA()}if(2&t){const n=e.oxw();e.Q6J("type",n.alertType)("showTitle",!1)("dismissible","danger"!==n.alertType),e.xp6(1),e.Q6J("ngIf",0===n.expirationDays),e.xp6(1),e.Q6J("ngIf",n.expirationDays>0)}}let FO=(()=>{class t{constructor(n,o){this.settingsService=n,this.authStorageService=o,this.displayNotification=!1}ngOnInit(){this.settingsService.getStandardSettings().subscribe(n=>{this.pwdExpirationSettings=new wE.G(n);const o=this.authStorageService.getPwdExpirationDate();o&&(this.expirationDays=this.getExpirationDays(o),this.alertType=this.expirationDays<=this.pwdExpirationSettings.pwdExpirationWarning2?"danger":"warning",this.displayNotification=this.expirationDays<=this.pwdExpirationSettings.pwdExpirationWarning1,this.authStorageService.isPwdDisplayedSource.next(this.displayNotification))})}ngOnDestroy(){this.authStorageService.isPwdDisplayedSource.next(!1)}getExpirationDays(n){const o=new Date,l=new Date(1e3*n);return Math.floor((l.valueOf()-o.valueOf())/864e5)}onDismissed(){this.authStorageService.isPwdDisplayedSource.next(!1),this.displayNotification=!1}}return t.\u0275fac=function(n){return new(n||t)(e.Y36($T.g),e.Y36(Do.j))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-pwd-expiration-notification"]],decls:1,vars:1,consts:function(){let i,n;return i="Your password will expire in " + "\ufffd#2\ufffd" + "less than 1" + "\ufffd/#2\ufffd" + " day. Click " + "\ufffd#3\ufffd" + "here" + "\ufffd/#3\ufffd" + " to change it now.",n="Your password will expire in " + "\ufffd#2\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#2\ufffd" + " day(s). Click " + "\ufffd#3\ufffd" + "here" + "\ufffd/#3\ufffd" + " to change it now.",[["class","no-margin-bottom","size","slim",3,"type","showTitle","dismissible","dismissed",4,"ngIf"],["size","slim",1,"no-margin-bottom",3,"type","showTitle","dismissible","dismissed"],[4,"ngIf"],i,["routerLink","/user-profile/edit",1,"alert-link"],n]},template:function(n,o){1&n&&e.YNc(0,WR,3,5,"cd-alert-panel",0),2&n&&e.Q6J("ngIf",o.displayNotification)},dependencies:[f.O5,Ee.rH,Zu.G],styles:[".no-margin-bottom[_ngcontent-%COMP%]{margin-bottom:0}"]}),t})();function LO(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-alert-panel",1),e.NdJ("dismissed",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.onDismissed())}),e.TgZ(1,"div"),e.tHW(2,2),e._UZ(3,"a",3)(4,"a",4),e.N_p(),e.qZA()()}if(2&t){const n=e.oxw();e.Q6J("showTitle",!1)("type",n.notificationSeverity)("dismissible","danger"!==n.notificationSeverity)}}let kO=(()=>{class t{constructor(n,o,l,_){this.mgrModuleService=n,this.authStorageService=o,this.notificationService=l,this.telemetryNotificationService=_,this.displayNotification=!1,this.notificationSeverity="warning"}ngOnInit(){if(this.telemetryNotificationService.update.subscribe(n=>{this.displayNotification=n}),!this.isNotificationHidden()){const n=this.authStorageService.getPermissions().configOpt;Xe().every(Object.values(n))&&this.mgrModuleService.getConfig("telemetry").subscribe(o=>{o.enabled||this.telemetryNotificationService.setVisibility(!0)})}}ngOnDestroy(){this.telemetryNotificationService.setVisibility(!1)}isNotificationHidden(){return"true"===localStorage.getItem("telemetry_notification_hidden")}onDismissed(){this.telemetryNotificationService.setVisibility(!1),localStorage.setItem("telemetry_notification_hidden","true"),this.notificationService.show(Ho.k.success,"Telemetry activation reminder muted","You can activate the module on the Telemetry configuration page (<b>Dashboard Settings</b> -> <b>Telemetry configuration</b>) at any time.")}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(H_.N),e.Y36(Do.j),e.Y36(Ui.g),e.Y36(Wy))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-telemetry-notification"]],decls:1,vars:1,consts:function(){let i;return i="The Ceph community needs your help to continue improving: please " + "\ufffd#3\ufffd" + "Activate" + "[\ufffd/#3\ufffd|\ufffd/#4\ufffd]" + " the " + "\ufffd#4\ufffd" + "Telemetry" + "[\ufffd/#3\ufffd|\ufffd/#4\ufffd]" + " module.",i=e.Zx4(i),[["class","no-margin-bottom","size","slim",3,"showTitle","type","dismissible","dismissed",4,"ngIf"],["size","slim",1,"no-margin-bottom",3,"showTitle","type","dismissible","dismissed"],i,["routerLink","/telemetry",1,"btn","activate-button","alert-link","activate-text"],["href","https://docs.ceph.com/en/latest/mgr/telemetry/"]]},template:function(n,o){1&n&&e.YNc(0,LO,5,3,"cd-alert-panel",0),2&n&&e.Q6J("ngIf",o.displayNotification)},dependencies:[f.O5,Ee.rH,Zu.G],styles:[".no-margin-bottom[_ngcontent-%COMP%]{font-size:.875rem;margin-bottom:0}.activate-button[_ngcontent-%COMP%]{background-color:#fcecba;border:#495057 solid .5px;border-radius:10%;padding:.1rem .4rem}.activate-text[_ngcontent-%COMP%]{color:#495057;font-weight:700}a[_ngcontent-%COMP%]{color:#1a5d66;font-weight:700}"]}),t})();var $O=s(60793);function UT(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-alert-panel",1),e.NdJ("dismissed",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.onDismissed())}),e._UZ(1,"span",2),e.ALo(2,"sanitizeHtml"),e.qZA()}if(2&t){const n=e.oxw();e.Q6J("showTitle",!1)("type",n.motd.severity)("dismissible","danger"!==n.motd.severity),e.xp6(1),e.Q6J("innerHTML",e.lcZ(2,4,n.motd.message),e.oJD)}}let JR=(()=>{class t{constructor(n){this.motdNotificationService=n,this.motd=void 0}ngOnInit(){this.subscription=this.motdNotificationService.motd$.subscribe(n=>{this.motd=n})}ngOnDestroy(){this.subscription.unsubscribe()}onDismissed(){this.motdNotificationService.hide()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(xT))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-motd"]],decls:1,vars:1,consts:[["size","slim",3,"showTitle","type","dismissible","dismissed",4,"ngIf"],["size","slim",3,"showTitle","type","dismissible","dismissed"],[3,"innerHTML"]],template:function(n,o){1&n&&e.YNc(0,UT,3,6,"cd-alert-panel",0),2&n&&e.Q6J("ngIf",o.motd)},dependencies:[f.O5,Zu.G,$O.A]}),t})();function BT(t,i){1&t&&e._UZ(0,"span",5)}const HO=function(t){return{running:t}},GT=function(t){return[t]};let QR=(()=>{class t{constructor(n,o){this.notificationService=n,this.summaryService=o,this.icons=Rr.P,this.hasRunningTasks=!1,this.hasNotifications=!1,this.subs=new bd.w}ngOnInit(){this.subs.add(this.summaryService.subscribe(n=>{this.hasRunningTasks=n.executing_tasks.length>0})),this.subs.add(this.notificationService.data$.subscribe(n=>{this.hasNotifications=n.length>0}))}ngOnDestroy(){this.subs.unsubscribe()}toggleSidebar(){this.notificationService.toggleSidebar()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ui.g),e.Y36(zh.J))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-notifications"]],decls:5,vars:7,consts:function(){let i,n;return i="Tasks and Notifications",n="Tasks and Notifications",[["title",i,3,"ngClass","click"],[3,"ngClass"],["class","dot",4,"ngIf"],[1,"d-md-none"],n,[1,"dot"]]},template:function(n,o){1&n&&(e.TgZ(0,"a",0),e.NdJ("click",function(){return o.toggleSidebar()}),e._UZ(1,"i",1),e.YNc(2,BT,1,0,"span",2),e.TgZ(3,"span",3),e.SDv(4,4),e.qZA()()),2&n&&(e.Q6J("ngClass",e.VKq(3,HO,o.hasRunningTasks)),e.xp6(1),e.Q6J("ngClass",e.VKq(5,GT,o.icons.bell)),e.xp6(1),e.Q6J("ngIf",o.hasNotifications))},dependencies:[f.mk,f.O5],styles:[".running[_ngcontent-%COMP%]   i[_ngcontent-%COMP%]{color:#25828e}.running[_ngcontent-%COMP%]:hover   i[_ngcontent-%COMP%]{color:#fff}a[_ngcontent-%COMP%]   .dot[_ngcontent-%COMP%]{background-color:#2b99a8;border:2px solid #374249;border-radius:50%;height:11px;position:absolute;right:17px;top:10px;width:10px}a[_ngcontent-%COMP%]:hover   .dot[_ngcontent-%COMP%]{background-color:#fff;border-color:#2b99a8}"]}),t})(),PE=(()=>{class t{constructor(n){this.http=n,this.baseUIURL="api/feedback"}isKeyExist(){return this.http.get("ui-api/feedback/api_key/exist")}createIssue(n,o,l,_,v){return this.http.post("api/feedback",{project:n,tracker:o,subject:l,description:_,api_key:v},{headers:{Accept:"application/vnd.ceph.api.v0.1+json"}})}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();function YT(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"cd-alert-panel",30),e.tHW(1,31),e.TgZ(2,"a",32),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.redirect())}),e.qZA(),e.N_p(),e.qZA()}}function jT(t,i){1&t&&(e.TgZ(0,"span",37),e.SDv(1,38),e.qZA())}function zT(t,i){1&t&&(e.TgZ(0,"span",37),e.SDv(1,39),e.qZA())}function VT(t,i){if(1&t&&(e.TgZ(0,"div",33)(1,"label",34),e.SDv(2,35),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",36),e.YNc(5,jT,2,0,"span",17),e.YNc(6,zT,2,0,"span",17),e.qZA()()),2&t){const n=e.oxw(),o=e.MAs(5);e.xp6(5),e.Q6J("ngIf",n.feedbackForm.showError("api_key",o,"required")),e.xp6(1),e.Q6J("ngIf",n.feedbackForm.showError("api_key",o,"invalidApiKey"))}}function ZT(t,i){if(1&t&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.Oqu(n)}}function E0(t,i){1&t&&(e.TgZ(0,"span",37),e.SDv(1,41),e.qZA())}function S0(t,i){if(1&t&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.Oqu(n)}}function WT(t,i){1&t&&(e.TgZ(0,"span",37),e.SDv(1,42),e.qZA())}function UO(t,i){1&t&&(e.TgZ(0,"span",37),e.SDv(1,43),e.qZA())}function BO(t,i){1&t&&(e.TgZ(0,"span",37),e.SDv(1,44),e.qZA())}let GO=(()=>{class t{constructor(n,o,l,_,v,O){this.feedbackService=n,this.activeModal=o,this.actionLabels=l,this.secondaryModal=_,this.notificationService=v,this.router=O,this.title="Feedback",this.project=["dashboard","block","objects","file_system","ceph_manager","orchestrator","ceph_volume","core_ceph"],this.tracker=["bug","feature"],this.isAPIKeySet=!1,this.isFeedbackEnabled=!0}ngOnInit(){this.createForm(),this.keySub=this.feedbackService.isKeyExist().subscribe({next:n=>{this.isAPIKeySet=n,this.isAPIKeySet&&this.feedbackForm.get("api_key").clearValidators()},error:()=>{this.isFeedbackEnabled=!1,this.feedbackForm.disable()}})}createForm(){this.feedbackForm=new fu.d({project:new rn.p4("",rn.kI.required),tracker:new rn.p4("",rn.kI.required),subject:new rn.p4("",rn.kI.required),description:new rn.p4("",rn.kI.required),api_key:new rn.p4("",rn.kI.required)})}ngOnDestroy(){this.keySub.unsubscribe()}onSubmit(){this.feedbackService.createIssue(this.feedbackForm.controls.project.value,this.feedbackForm.controls.tracker.value,this.feedbackForm.controls.subject.value,this.feedbackForm.controls.description.value,this.feedbackForm.controls.api_key.value).subscribe({next:n=>{this.notificationService.show(Ho.k.success,"Issue successfully created on Ceph Issue tracker",`Go to the tracker: <a href="https://tracker.ceph.com/issues/${n.message.issue.id}" target="_blank"> ${n.message.issue.id} </a>`)},error:()=>{this.feedbackForm.get("api_key").setErrors({invalidApiKey:!0}),this.feedbackForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}redirect(){this.activeModal.close(),this.router.navigate(["/mgr-modules"])}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(PE),e.Y36(yi.Kz),e.Y36(yr.p4),e.Y36(yi.FF),e.Y36(Ui.g),e.Y36(Ee.F0))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-feedback"]],decls:42,vars:12,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue;return i="Report an issue",n="Project name",o="-- Select a project --",l="Tracker",_="-- Select a tracker --",v="Subject",O="Description",P="Feedback module is not enabled. Please enable it from " + "\ufffd#2\ufffd" + "Cluster-> Manager Modules." + "\ufffd/#2\ufffd" + "",G="Ceph Tracker API Key",K="Ceph Tracker API key is required.",oe="Ceph Tracker API key is invalid.",ue="Project name is required.",pe="Tracker name is required.",ye="Subject is required.",Ue="Description is required.",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["name","feedbackForm",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],["type","error",4,"ngIf"],["class","form-group row mt-3",4,"ngIf"],[1,"form-group","row"],["for","project",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],["id","project","formControlName","project",1,"form-control"],["ngValue",""],o,[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],["for","tracker",1,"cd-col-form-label","required"],l,["id","tracker","formControlName","tracker",1,"form-control"],_,["for","subject",1,"cd-col-form-label","required"],v,["id","subject","type","text","formControlName","subject","placeholder","Add issue title",1,"form-control"],["for","description",1,"cd-col-form-label","required"],O,["id","description","type","text","formControlName","description","placeholder","Add issue description",1,"form-control"],[1,"modal-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["type","error"],P,[3,"click"],[1,"form-group","row","mt-3"],["for","api_key",1,"cd-col-form-label","required"],G,["id","api_key","type","password","formControlName","api_key","placeholder","Add Ceph tracker API key",1,"form-control"],[1,"invalid-feedback"],K,oe,[3,"value"],ue,pe,ye,Ue]},template:function(n,o){if(1&n&&(e.TgZ(0,"cd-modal",0)(1,"div",1),e.SDv(2,2),e.qZA(),e.TgZ(3,"div",3)(4,"form",4,5)(6,"div",6),e.YNc(7,YT,3,0,"cd-alert-panel",7),e.YNc(8,VT,7,2,"div",8),e.TgZ(9,"div",9)(10,"label",10),e.SDv(11,11),e.qZA(),e.TgZ(12,"div",12)(13,"select",13)(14,"option",14),e.SDv(15,15),e.qZA(),e.YNc(16,ZT,2,2,"option",16),e.qZA(),e.YNc(17,E0,2,0,"span",17),e.qZA()(),e.TgZ(18,"div",9)(19,"label",18),e.SDv(20,19),e.qZA(),e.TgZ(21,"div",12)(22,"select",20)(23,"option",14),e.SDv(24,21),e.qZA(),e.YNc(25,S0,2,2,"option",16),e.qZA(),e.YNc(26,WT,2,0,"span",17),e.qZA()(),e.TgZ(27,"div",9)(28,"label",22),e.SDv(29,23),e.qZA(),e.TgZ(30,"div",12),e._UZ(31,"input",24),e.YNc(32,UO,2,0,"span",17),e.qZA()(),e.TgZ(33,"div",9)(34,"label",25),e.SDv(35,26),e.qZA(),e.TgZ(36,"div",12)(37,"textarea",27),e._uU(38,"            "),e.qZA(),e.YNc(39,BO,2,0,"span",17),e.qZA()()(),e.TgZ(40,"div",28)(41,"cd-form-button-panel",29),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.qZA()()()()()),2&n){const l=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.feedbackForm),e.xp6(3),e.Q6J("ngIf",!o.isFeedbackEnabled),e.xp6(1),e.Q6J("ngIf",!o.isAPIKeySet),e.xp6(8),e.Q6J("ngForOf",o.project),e.xp6(1),e.Q6J("ngIf",o.feedbackForm.showError("project",l,"required")),e.xp6(8),e.Q6J("ngForOf",o.tracker),e.xp6(1),e.Q6J("ngIf",o.feedbackForm.showError("tracker",l,"required")),e.xp6(6),e.Q6J("ngIf",o.feedbackForm.showError("subject",l,"required")),e.xp6(7),e.Q6J("ngIf",o.feedbackForm.showError("description",l,"required")),e.xp6(2),e.Q6J("form",o.feedbackForm)("submitText",o.actionLabels.SUBMIT)}},dependencies:[f.sg,f.O5,al.z,Zu.G,rl.p,st.o,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u]}),t})();var KR=s(97057);let XR=(()=>{class t{constructor(n,o,l,_){this.activeModal=n,this.summaryService=o,this.userService=l,this.authStorageService=_,this.userPermission=this.authStorageService.getPermissions().user}ngOnInit(){this.projectConstants=yr.$x,this.hostAddr=window.location.hostname,this.modalVariables=this.setVariables(),this.subs=this.summaryService.subscribe(n=>{const o=n.version.replace("ceph version ","").split(" ");this.hostAddr=n.mgr_host.replace(/(^\w+:|^)\/\//,"").replace(/\/$/,""),this.versionNumber=o[0],this.versionHash=o[1],this.versionName=o.slice(2,o.length).join(" ")})}ngOnDestroy(){this.subs.unsubscribe()}setVariables(){const n={};n.user=localStorage.getItem("dashboard_username"),n.role="user",this.userPermission.read&&this.userService.get(n.user).subscribe(l=>{n.role=l.roles});const o=(0,KR.qY)();return n.browserName=o&&o.name?o.name:"Not detected",n.browserVersion=o&&o.version?o.version:"Not detected",n.browserOS=o&&o.os?o.os:"Not detected",n}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.Kz),e.Y36(zh.J),e.Y36(eg.K),e.Y36(Do.j))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-about"]],decls:44,vars:13,consts:[[1,"about-container"],[1,"modal-header"],["type","button","aria-label","Close",1,"btn-close","float-end",3,"click"],[1,"modal-body"],["src","assets/Ceph_Ceph_Logo_with_text_red_white.svg",1,"ceph-logo",3,"alt"],[1,"product-versions"],[1,"modal-footer"],[1,"text-left"]],template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"div",1)(2,"button",2),e.NdJ("click",function(){return o.activeModal.close()}),e.qZA()(),e.TgZ(3,"div",3),e._UZ(4,"img",4),e.TgZ(5,"h3")(6,"strong"),e._uU(7),e.qZA()(),e.TgZ(8,"div",5)(9,"strong"),e._uU(10,"Version"),e.qZA(),e._UZ(11,"br"),e._uU(12),e._UZ(13,"br"),e._uU(14),e.qZA(),e._UZ(15,"br"),e.TgZ(16,"dl")(17,"dt"),e._uU(18,"Ceph Manager"),e.qZA(),e.TgZ(19,"dd"),e._uU(20),e.qZA(),e.TgZ(21,"dt"),e._uU(22,"User"),e.qZA(),e.TgZ(23,"dd"),e._uU(24),e.qZA(),e.TgZ(25,"dt"),e._uU(26,"User Role"),e.qZA(),e.TgZ(27,"dd"),e._uU(28),e.qZA(),e.TgZ(29,"dt"),e._uU(30,"Browser"),e.qZA(),e.TgZ(31,"dd"),e._uU(32),e.qZA(),e.TgZ(33,"dt"),e._uU(34,"Browser Version"),e.qZA(),e.TgZ(35,"dd"),e._uU(36),e.qZA(),e.TgZ(37,"dt"),e._uU(38,"Browser OS"),e.qZA(),e.TgZ(39,"dd"),e._uU(40),e.qZA()()(),e.TgZ(41,"div",6)(42,"div",7),e._uU(43),e.qZA()()()),2&n&&(e.xp6(4),e.s9C("alt",o.projectConstants.organization),e.xp6(3),e.Oqu(o.projectConstants.projectName),e.xp6(5),e.AsE(" ",o.versionNumber," ",o.versionHash," "),e.xp6(2),e.hij(" ",o.versionName," "),e.xp6(6),e.Oqu(o.hostAddr),e.xp6(4),e.Oqu(o.modalVariables.user),e.xp6(4),e.Oqu(o.modalVariables.role),e.xp6(4),e.Oqu(o.modalVariables.browserName),e.xp6(4),e.Oqu(o.modalVariables.browserVersion),e.xp6(4),e.Oqu(o.modalVariables.browserOS),e.xp6(3),e.AsE(" ",o.projectConstants.copyright," ",o.projectConstants.license," "))},dependencies:[st.o],styles:[".about-container[_ngcontent-%COMP%]{background-color:#374249;background-image:url(ceph_background.3fbdf95cd52530d7.gif);background-position:right bottom;background-repeat:no-repeat;color:#fff;text-shadow:1px 1px #374249}.product-versions[_ngcontent-%COMP%]{margin-top:30px}.product-versions[_ngcontent-%COMP%]   strong[_ngcontent-%COMP%]{margin-right:10px}.modal-header[_ngcontent-%COMP%]{border-bottom:0}.modal-header[_ngcontent-%COMP%]   .close[_ngcontent-%COMP%]{color:#fff;font-size:2em}.modal-body[_ngcontent-%COMP%]{padding-left:80px;padding-right:80px}.ceph-logo[_ngcontent-%COMP%]{margin-bottom:30px;width:25%}.modal-footer[_ngcontent-%COMP%]{border-top:0;display:block;padding:15px 80px 35px}"]}),t})();const JT=function(t){return[t]},YO=function(t){return{disabled:t}};let jO=(()=>{class t{constructor(n,o){this.modalService=n,this.docService=o,this.icons=Rr.P}ngOnInit(){this.docService.subscribeOnce("dashboard",n=>{this.docsUrl=n})}openAboutModal(){this.modalRef=this.modalService.show(XR,null,{size:"lg"})}openFeedbackModal(){this.bsModalRef=this.modalService.show(GO,null,{size:"lg"})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(ca.Z),e.Y36(TT.R))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-dashboard-help"]],decls:14,vars:7,consts:function(){let i,n,o,l,_,v;return i="Help",n="Help",o="documentation",l="API",_="About",v="Report an issue...",[["ngbDropdown","","placement","bottom-right"],["ngbDropdownToggle","","title",i,"role","button"],[3,"ngClass"],[1,"d-md-none"],n,["ngbDropdownMenu",""],["ngbDropdownItem","","target","_blank",1,"text-capitalize",3,"ngClass","href"],o,["ngbDropdownItem","","routerLink","/api-docs","target","_blank"],l,["ngbDropdownItem","",3,"click"],_,v]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"a",1),e._UZ(2,"i",2),e.TgZ(3,"span",3),e.SDv(4,4),e.qZA()(),e.TgZ(5,"div",5)(6,"a",6),e.SDv(7,7),e.qZA(),e.TgZ(8,"button",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"button",10),e.NdJ("click",function(){return o.openAboutModal()}),e.SDv(11,11),e.qZA(),e.TgZ(12,"button",10),e.NdJ("click",function(){return o.openFeedbackModal()}),e.SDv(13,12),e.qZA()()()),2&n&&(e.xp6(2),e.Q6J("ngClass",e.VKq(3,JT,o.icons.questionCircle)),e.xp6(4),e.s9C("href",o.docsUrl,e.LSH),e.Q6J("ngClass",e.VKq(5,YO,!o.docsUrl)))},dependencies:[f.mk,yi.jt,yi.iD,yi.Vi,yi.TH,Ee.rH,st.o]}),t})();function zO(t,i){1&t&&(e.TgZ(0,"button",9),e.SDv(1,10),e.qZA())}function qR(t,i){1&t&&(e.TgZ(0,"button",11),e.SDv(1,12),e.qZA())}const e3=function(t){return[t]};function t3(t,i){if(1&t&&(e.TgZ(0,"div",1)(1,"a",2),e._UZ(2,"i",3),e.TgZ(3,"span",4),e.SDv(4,5),e.qZA()(),e.TgZ(5,"div",6),e.YNc(6,zO,2,0,"button",7),e.YNc(7,qR,2,0,"button",8),e.qZA()()),2&t){const n=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(3,e3,n.icons.deepCheck)),e.xp6(4),e.Q6J("ngIf",n.userPermission.read),e.xp6(1),e.Q6J("ngIf",n.configOptPermission.read)}}let n3=(()=>{class t{constructor(n){this.authStorageService=n,this.icons=Rr.P;const o=this.authStorageService.getPermissions();this.userPermission=o.user,this.configOptPermission=o.configOpt}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-administration"]],decls:1,vars:1,consts:function(){let i,n,o,l;return i="Dashboard Settings",n="Dashboard Settings",o="User management",l="Telemetry configuration",[["ngbDropdown","","placement","bottom-right",4,"ngIf"],["ngbDropdown","","placement","bottom-right"],["ngbDropdownToggle","","title",i,"role","button",1,"dropdown-toggle"],[3,"ngClass"],[1,"d-md-none"],n,["ngbDropdownMenu",""],["ngbDropdownItem","","routerLink","/user-management",4,"ngIf"],["ngbDropdownItem","","routerLink","/telemetry",4,"ngIf"],["ngbDropdownItem","","routerLink","/user-management"],o,["ngbDropdownItem","","routerLink","/telemetry"],l]},template:function(n,o){1&n&&e.YNc(0,t3,8,5,"div",0),2&n&&e.Q6J("ngIf",o.userPermission.read)},dependencies:[f.mk,f.O5,yi.jt,yi.iD,yi.Vi,yi.TH,Ee.rH,st.o]}),t})();const QT=function(t){return[t]};function VO(t,i){if(1&t&&(e.TgZ(0,"button",12),e._UZ(1,"i",2),e.TgZ(2,"span"),e.SDv(3,13),e.qZA()()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(1,QT,n.icons.lock))}}let b0=(()=>{class t{constructor(n,o){this.authStorageService=n,this.authService=o,this.icons=Rr.P}ngOnInit(){this.username=this.authStorageService.getUsername(),this.sso=this.authStorageService.isSSO()}logout(){this.authService.logout()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(SE.e))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-identity"]],decls:15,vars:8,consts:function(){let i,n,o,l,_;return i="Logged in user",n="Logged in user",o="Signed in as " + "\ufffd#8\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#8\ufffd" + "",l="Sign out",_="Change password",[["ngbDropdown","","placement","bottom-right"],["ngbDropdownToggle","","title",i,"role","button"],[3,"ngClass"],[1,"d-md-none"],n,["ngbDropdownMenu",""],["ngbDropdownItem","","disabled",""],o,[1,"dropdown-divider"],["ngbDropdownItem","","routerLink","/user-profile/edit",4,"ngIf"],["ngbDropdownItem","",3,"click"],l,["ngbDropdownItem","","routerLink","/user-profile/edit"],_]},template:function(n,o){1&n&&(e.TgZ(0,"div",0)(1,"a",1),e._UZ(2,"i",2),e.TgZ(3,"span",3),e.SDv(4,4),e.qZA()(),e.TgZ(5,"div",5)(6,"button",6),e.tHW(7,7),e._UZ(8,"strong"),e.N_p(),e.qZA(),e._UZ(9,"hr",8),e.YNc(10,VO,4,3,"button",9),e.TgZ(11,"button",10),e.NdJ("click",function(){return o.logout()}),e._UZ(12,"i",2),e.TgZ(13,"span"),e.SDv(14,11),e.qZA()()()()),2&n&&(e.xp6(2),e.Q6J("ngClass",e.VKq(4,QT,o.icons.user)),e.xp6(6),e.pQV(o.username),e.QtT(7),e.xp6(2),e.Q6J("ngIf",!o.sso),e.xp6(2),e.Q6J("ngClass",e.VKq(6,QT,o.icons.signOut)))},dependencies:[f.mk,f.O5,yi.jt,yi.iD,yi.Vi,yi.TH,Ee.rH,st.o]}),t})();function ZO(t,i){1&t&&e.GkF(0)}function WO(t,i){1&t&&e.GkF(0)}function KT(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"li",22),e._UZ(1,"cd-language-selector",23),e.qZA(),e.TgZ(2,"li",22)(3,"cd-notifications",24),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.toggleRightSidebar())}),e.qZA()(),e.TgZ(4,"li",22),e._UZ(5,"cd-dashboard-help",23),e.qZA(),e.TgZ(6,"li",22),e._UZ(7,"cd-administration",23),e.qZA(),e.TgZ(8,"li",22),e._UZ(9,"cd-identity",23),e.qZA()}}function Rg(t,i){1&t&&(e.TgZ(0,"li",52)(1,"a",53),e.SDv(2,54),e.qZA()())}function XT(t,i){1&t&&(e.TgZ(0,"li",55)(1,"a",56),e.SDv(2,57),e.qZA()())}function NE(t,i){1&t&&(e.TgZ(0,"li",58)(1,"a",59),e.SDv(2,60),e.qZA()())}function IE(t,i){1&t&&(e.TgZ(0,"li",61)(1,"a",62),e.SDv(2,63),e.qZA()())}function JO(t,i){1&t&&(e.TgZ(0,"li",64)(1,"a",65),e.SDv(2,66),e.qZA()())}function FE(t,i){1&t&&(e.TgZ(0,"li",67)(1,"a",68),e.SDv(2,69),e.qZA()())}function LE(t,i){1&t&&(e.TgZ(0,"li",70)(1,"a",71),e.SDv(2,72),e.qZA()())}function T0(t,i){1&t&&(e.TgZ(0,"li",73)(1,"a",74),e.SDv(2,75),e.qZA()())}function r3(t,i){1&t&&(e.TgZ(0,"li",76)(1,"a",77),e.SDv(2,78),e.qZA()())}function i3(t,i){1&t&&(e.TgZ(0,"li",79)(1,"a",80),e.SDv(2,81),e.qZA()())}function o3(t,i){if(1&t&&(e.TgZ(0,"small",87),e._uU(1),e.qZA()),2&t){const n=e.oxw(5);e.xp6(1),e.Oqu(n.prometheusAlertService.activeCriticalAlerts)}}function s3(t,i){if(1&t&&(e.TgZ(0,"small",88),e._uU(1),e.qZA()),2&t){const n=e.oxw(5);e.xp6(1),e.Oqu(n.prometheusAlertService.activeWarningAlerts)}}function qT(t,i){if(1&t&&(e.TgZ(0,"li",82)(1,"a",83),e.ynx(2),e.SDv(3,84),e.BQk(),e.YNc(4,o3,2,1,"small",85),e.YNc(5,s3,2,1,"small",86),e.qZA()()),2&t){const n=e.oxw(4);e.xp6(4),e.Q6J("ngIf",n.prometheusAlertService.activeCriticalAlerts>0),e.xp6(1),e.Q6J("ngIf",n.prometheusAlertService.activeWarningAlerts>0)}}function QO(t,i){1&t&&(e.TgZ(0,"li",89)(1,"a",90),e.SDv(2,91),e.qZA()())}function KO(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"li",36)(1,"a",37),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(3);return e.KtG(l.toggleSubMenu("cluster"))}),e.ynx(2),e.SDv(3,38),e.BQk(),e.qZA(),e.TgZ(4,"ul",39),e.YNc(5,Rg,3,0,"li",40),e.YNc(6,XT,3,0,"li",41),e.YNc(7,NE,3,0,"li",42),e.YNc(8,IE,3,0,"li",43),e.YNc(9,JO,3,0,"li",44),e.YNc(10,FE,3,0,"li",45),e.YNc(11,LE,3,0,"li",46),e.YNc(12,T0,3,0,"li",47),e.YNc(13,r3,3,0,"li",48),e.YNc(14,i3,3,0,"li",49),e.YNc(15,qT,6,2,"li",50),e.YNc(16,QO,3,0,"li",51),e.qZA()()}if(2&t){const n=e.oxw(3);e.xp6(1),e.uIk("aria-expanded","cluster"===n.displayedSubMenu),e.xp6(3),e.Q6J("ngbCollapse","cluster"!==n.displayedSubMenu),e.xp6(1),e.Q6J("ngIf",n.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",n.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",n.permissions.monitor.read),e.xp6(1),e.Q6J("ngIf",n.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",n.permissions.osd.read),e.xp6(1),e.Q6J("ngIf",n.permissions.configOpt.read),e.xp6(1),e.Q6J("ngIf",n.permissions.osd.read),e.xp6(1),e.Q6J("ngIf",n.permissions.configOpt.read),e.xp6(1),e.Q6J("ngIf",n.permissions.configOpt.read),e.xp6(1),e.Q6J("ngIf",n.permissions.log.read),e.xp6(1),e.Q6J("ngIf",n.permissions.prometheus.read),e.xp6(1),e.Q6J("ngIf",n.permissions.configOpt.read)}}function XO(t,i){1&t&&(e.TgZ(0,"li",92)(1,"a",93),e.SDv(2,94),e.qZA()())}function qO(t,i){1&t&&(e.TgZ(0,"li",102)(1,"a",103),e.SDv(2,104),e.qZA()())}function eC(t,i){if(1&t&&(e.TgZ(0,"small",110),e._uU(1),e.qZA()),2&t){const n=e.oxw(5);e.xp6(1),e.Oqu(null==n.summaryData||null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.warnings)}}function tC(t,i){if(1&t&&(e.TgZ(0,"small",111),e._uU(1),e.qZA()),2&t){const n=e.oxw(5);e.xp6(1),e.Oqu(null==n.summaryData||null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.errors)}}function nC(t,i){if(1&t&&(e.TgZ(0,"li",105)(1,"a",106),e.ynx(2),e.SDv(3,107),e.BQk(),e.YNc(4,eC,2,1,"small",108),e.YNc(5,tC,2,1,"small",109),e.qZA()()),2&t){const n=e.oxw(4);e.xp6(4),e.Q6J("ngIf",0!==(null==n.summaryData||null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.warnings)),e.xp6(1),e.Q6J("ngIf",0!==(null==n.summaryData||null==n.summaryData.rbd_mirroring?null:n.summaryData.rbd_mirroring.errors))}}function eA(t,i){1&t&&(e.TgZ(0,"li",112)(1,"a",113),e.SDv(2,114),e.qZA()())}function tA(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"li",95)(1,"a",96),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(3);return e.KtG(l.toggleSubMenu("block"))}),e.ynx(2),e.SDv(3,97),e.BQk(),e.qZA(),e.TgZ(4,"ul",98),e.YNc(5,qO,3,0,"li",99),e.YNc(6,nC,6,2,"li",100),e.YNc(7,eA,3,0,"li",101),e.qZA()()}if(2&t){const n=e.oxw().ngIf,o=e.oxw(2);e.xp6(1),e.Q6J("ngStyle",o.blockHealthColor()),e.uIk("aria-expanded","block"===o.displayedSubMenu),e.xp6(3),e.Q6J("ngbCollapse","block"!==o.displayedSubMenu),e.xp6(1),e.Q6J("ngIf",o.permissions.rbdImage.read&&n.rbd),e.xp6(1),e.Q6J("ngIf",o.permissions.rbdMirroring.read&&n.mirroring),e.xp6(1),e.Q6J("ngIf",o.permissions.iscsi.read&&n.iscsi)}}function rC(t,i){1&t&&(e.TgZ(0,"li",115)(1,"a",116),e.SDv(2,117),e.qZA()())}function kE(t,i){1&t&&(e.TgZ(0,"li",118)(1,"a",119),e.SDv(2,120),e.qZA()())}function a3(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"li",121)(1,"a",122),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(3);return e.KtG(l.toggleSubMenu("rgw"))}),e.ynx(2),e.SDv(3,123),e.BQk(),e.qZA(),e.TgZ(4,"ul",124)(5,"li",125)(6,"a",126),e.SDv(7,127),e.qZA()(),e.TgZ(8,"li",128)(9,"a",129),e.SDv(10,130),e.qZA()(),e.TgZ(11,"li",131)(12,"a",132),e.SDv(13,133),e.qZA()(),e.TgZ(14,"li",134)(15,"a",135),e.SDv(16,136),e.qZA()(),e.TgZ(17,"li",134)(18,"a",137),e.SDv(19,138),e.qZA()()()()}if(2&t){const n=e.oxw(3);e.xp6(1),e.uIk("aria-expanded","rgw"===n.displayedSubMenu),e.xp6(3),e.Q6J("ngbCollapse","rgw"!==n.displayedSubMenu)}}const iC=function(t){return[t]};function $E(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"li",26)(2,"a",27)(3,"span"),e.SDv(4,28),e.qZA(),e._uU(5,"\xa0 "),e._UZ(6,"i",29),e.ALo(7,"healthColor"),e.qZA()(),e.YNc(8,KO,17,14,"li",30),e.YNc(9,XO,3,0,"li",31),e.YNc(10,tA,8,6,"li",32),e.YNc(11,rC,3,0,"li",33),e.YNc(12,kE,3,0,"li",34),e.YNc(13,a3,20,2,"li",35),e.BQk()),2&t){const n=i.ngIf,o=e.oxw(2);e.xp6(6),e.Q6J("ngClass",e.VKq(10,iC,o.icons.health))("ngStyle",e.lcZ(7,8,null==o.summaryData?null:o.summaryData.health_status)),e.xp6(2),e.Q6J("ngIf",o.permissions.hosts.read||o.permissions.monitor.read||o.permissions.osd.read||o.permissions.configOpt.read||o.permissions.log.read||o.permissions.prometheus.read),e.xp6(1),e.Q6J("ngIf",o.permissions.pool.read),e.xp6(1),e.Q6J("ngIf",(o.permissions.rbdImage.read||o.permissions.rbdMirroring.read||o.permissions.iscsi.read)&&(n.rbd||n.mirroring||n.iscsi)),e.xp6(1),e.Q6J("ngIf",o.permissions.nfs.read&&n.nfs),e.xp6(1),e.Q6J("ngIf",o.permissions.cephfs.read&&n.cephfs),e.xp6(1),e.Q6J("ngIf",o.permissions.rgw.read&&n.rgw)}}function nA(t,i){if(1&t&&(e.YNc(0,$E,14,12,"ng-container",25),e.ALo(1,"async")),2&t){const n=e.oxw();e.Q6J("ngIf",e.lcZ(1,1,n.enabledFeature$))}}const rA=function(t){return{show:t}},iA=function(t){return{active:t}},l3=["*"];let oA=(()=>{class t{get class(){return"top-notification-"+this.notifications.length}constructor(n,o,l,_,v,O){this.authStorageService=n,this.summaryService=o,this.featureToggles=l,this.telemetryNotificationService=_,this.prometheusAlertService=v,this.motdNotificationService=O,this.notifications=[],this.icons=Rr.P,this.rightSidebarOpen=!1,this.showMenuSidebar=!0,this.displayedSubMenu="",this.simplebar={autoHide:!1},this.subs=new bd.w,this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}ngOnInit(){this.subs.add(this.summaryService.subscribe(n=>{this.summaryData=n})),this.subs.add(this.authStorageService.isPwdDisplayed$.subscribe(n=>{this.showTopNotification("isPwdDisplayed",n)})),this.subs.add(this.telemetryNotificationService.update.subscribe(n=>{this.showTopNotification("telemetryNotificationEnabled",n)})),this.subs.add(this.motdNotificationService.motd$.subscribe(n=>{this.showTopNotification("motdNotificationEnabled",yt.isPlainObject(n))}))}ngOnDestroy(){this.subs.unsubscribe()}blockHealthColor(){if(this.summaryData&&this.summaryData.rbd_mirroring){if(this.summaryData.rbd_mirroring.errors>0)return{color:"#f4926c"};if(this.summaryData.rbd_mirroring.warnings>0)return{color:"#f0ad4e"}}}toggleSubMenu(n){this.displayedSubMenu=this.displayedSubMenu===n?"":n}toggleRightSidebar(){this.rightSidebarOpen=!this.rightSidebarOpen}showTopNotification(n,o){if(o)this.notifications.includes(n)||this.notifications.push(n);else{const l=this.notifications.indexOf(n);l>=0&&this.notifications.splice(l,1)}}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(zh.J),e.Y36(Rm.l),e.Y36(Wy),e.Y36(Km),e.Y36(xT))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-navigation"]],hostVars:2,hostBindings:function(n,o){2&n&&e.Tol(o.class)},ngContentSelectors:l3,decls:30,vars:12,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke,we,Z,Ft,Dt,Yt,ln,$n,nn,Jn,zn,Zr;return i="Toggle navigation",n="Dashboard",o="Cluster",l="Hosts",_="Physical Disks",v="Monitors",O="Services",P="OSDs",G="Configuration",K="CRUSH map",oe="Manager Modules",ue="Ceph Users",pe="Logs",ye="Alerts",Ue="Upgrade",xe="Pools",ke="Block",we="Images",Z="Mirroring",Ft="iSCSI",Dt="NFS",Yt="File Systems",ln="Object Gateway",$n="Overview",nn="Gateways",Jn="Users",zn="Buckets",Zr="Multi-Site",[[1,"cd-navbar-main"],[1,"cd-navbar-top"],[1,"navbar","navbar-expand-md","navbar-dark","cd-navbar-brand"],["aria-label","toggle sidebar visibility",1,"btn","btn-link","py-0","ms-3",3,"click"],["aria-hidden","true",1,"fa","fa-bars","fa-2x"],["href","#",1,"navbar-brand","ms-2"],["src","assets/Ceph_Ceph_Logo_with_text_white.svg","alt","Ceph"],["type","button",1,"navbar-toggler",3,"click"],[1,"sr-only"],i,[1,""],[1,"fa","fa-navicon","fa-lg"],[1,"collapse","navbar-collapse",3,"ngClass"],[1,"nav","navbar-nav","cd-navbar-utility","my-2","my-md-0"],[4,"ngTemplateOutlet"],[1,"wrapper"],["id","sidebar",3,"ngClass"],[3,"options"],[1,"list-unstyled","components","cd-navbar-primary"],["id","content",3,"ngClass"],["cd_utilities",""],["cd_menu",""],[1,"nav-item"],[1,"cd-navbar"],[1,"cd-navbar",3,"click"],[4,"ngIf"],["routerLinkActive","active",1,"nav-item","tc_menuitem_dashboard"],["routerLink","/dashboard",1,"nav-link"],n,[3,"ngClass","ngStyle"],["routerLinkActive","active","class","nav-item tc_menuitem_cluster",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_pool",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_block",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_nfs",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_cephfs",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_rgw",4,"ngIf"],["routerLinkActive","active",1,"nav-item","tc_menuitem_cluster"],["aria-controls","cluster-nav","role","button",1,"nav-link","dropdown-toggle",3,"click"],o,["id","cluster-nav",1,"list-unstyled",3,"ngbCollapse"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_hosts",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_cluster_inventory",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_cluster_monitor",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_cluster_services",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_osds",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_configuration",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_crush",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_modules",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_users",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_log",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_monitoring",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_upgrade",4,"ngIf"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_hosts"],["routerLink","/hosts"],l,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_cluster_inventory"],["routerLink","/inventory"],_,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_cluster_monitor"],["routerLink","/monitor/"],v,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_cluster_services"],["routerLink","/services/"],O,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_osds"],["routerLink","/osd"],P,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_configuration"],["routerLink","/configuration"],G,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_crush"],["routerLink","/crush-map"],K,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_modules"],["routerLink","/mgr-modules"],oe,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_users"],["routerLink","/ceph-users"],ue,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_log"],["routerLink","/logs"],pe,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_monitoring"],["routerLink","/monitoring"],ye,["class","badge badge-danger ms-1",4,"ngIf"],["class","badge badge-warning ms-1",4,"ngIf"],[1,"badge","badge-danger","ms-1"],[1,"badge","badge-warning","ms-1"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_upgrade"],["routerLink","/upgrade"],Ue,["routerLinkActive","active",1,"nav-item","tc_menuitem_pool"],["routerLink","/pool",1,"nav-link"],xe,["routerLinkActive","active",1,"nav-item","tc_menuitem_block"],["aria-controls","block-nav","role","button",1,"nav-link","dropdown-toggle",3,"ngStyle","click"],ke,["id","block-nav",1,"list-unstyled",3,"ngbCollapse"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_block_images",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_block_mirroring",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_block_iscsi",4,"ngIf"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_block_images"],["routerLink","/block/rbd"],we,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_block_mirroring"],["routerLink","/block/mirroring"],Z,["class","badge badge-warning",4,"ngIf"],["class","badge badge-danger",4,"ngIf"],[1,"badge","badge-warning"],[1,"badge","badge-danger"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_block_iscsi"],["routerLink","/block/iscsi"],Ft,["routerLinkActive","active",1,"nav-item","tc_menuitem_nfs"],["routerLink","/nfs",1,"nav-link"],Dt,["routerLinkActive","active",1,"nav-item","tc_menuitem_cephfs"],["routerLink","/cephfs",1,"nav-link"],Yt,["routerLinkActive","active",1,"nav-item","tc_menuitem_rgw"],["aria-controls","gateway-nav","role","button",1,"nav-link","dropdown-toggle",3,"click"],ln,["id","gateway-nav",1,"list-unstyled",3,"ngbCollapse"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_rgw_overview"],["routerLink","/rgw/overview"],$n,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_rgw_daemons"],["routerLink","/rgw/daemon"],nn,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_rgw_users"],["routerLink","/rgw/user"],Jn,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_rgw_buckets"],["routerLink","/rgw/bucket"],zn,["routerLink","/rgw/multisite"],Zr]},template:function(n,o){if(1&n&&(e.F$t(),e.TgZ(0,"div",0),e._UZ(1,"cd-pwd-expiration-notification")(2,"cd-telemetry-notification")(3,"cd-motd")(4,"cd-notifications-sidebar"),e.TgZ(5,"div",1)(6,"nav",2)(7,"button",3),e.NdJ("click",function(){return o.showMenuSidebar=!o.showMenuSidebar}),e._UZ(8,"i",4),e.qZA(),e.TgZ(9,"a",5),e._UZ(10,"img",6),e.qZA(),e.TgZ(11,"button",7),e.NdJ("click",function(){return o.toggleRightSidebar()}),e.TgZ(12,"span",8),e.SDv(13,9),e.qZA(),e.TgZ(14,"span",10),e._UZ(15,"i",11),e.qZA()(),e.TgZ(16,"div",12)(17,"ul",13),e.YNc(18,ZO,1,0,"ng-container",14),e.qZA()()()(),e.TgZ(19,"div",15)(20,"nav",16)(21,"ngx-simplebar",17)(22,"ul",18),e.YNc(23,WO,1,0,"ng-container",14),e.qZA()()(),e.TgZ(24,"div",19),e.Hsn(25),e.qZA()(),e.YNc(26,KT,10,0,"ng-template",null,20,e.W1O),e.YNc(28,nA,2,3,"ng-template",null,21,e.W1O),e.qZA()),2&n){const l=e.MAs(27),_=e.MAs(29);e.xp6(16),e.Q6J("ngClass",e.VKq(6,rA,o.rightSidebarOpen)),e.xp6(2),e.Q6J("ngTemplateOutlet",l),e.xp6(2),e.Q6J("ngClass",e.VKq(8,iA,!o.showMenuSidebar)),e.xp6(1),e.Q6J("options",o.simplebar),e.xp6(2),e.Q6J("ngTemplateOutlet",_),e.xp6(1),e.Q6J("ngClass",e.VKq(10,iA,!o.showMenuSidebar))}},dependencies:[f.mk,f.O5,f.tP,f.PC,yi._D,Ee.rH,Ee.Od,ng,CE,FO,kO,JR,st.o,Xm.M,QR,jO,n3,b0,f.Ov,p0],styles:['.cd-navbar-main[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;height:100%}  cd-navigation .cd-navbar-top .cd-navbar-brand{background:#374249;border-top:4px solid #25828e}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-brand,   cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-brand:hover{color:#e9ecef;height:auto;padding:0}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-brand>img{height:25px}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-toggler{border:0}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-toggler:focus,   cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-toggler:hover{outline:0}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-toggler .fa-navicon{color:#e9ecef}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-collapse{padding:0}  cd-navigation .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>.active>a{background-color:#25828e;color:#e9ecef}  cd-navigation .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a,   cd-navigation .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a:focus,   cd-navigation .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a:hover{background-color:transparent;border-color:transparent;color:#e9ecef}  cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>[ngbDropdown]>a,   cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>a,   cd-navigation .cd-navbar-top .navbar-nav>li>a{color:#e9ecef;display:block;line-height:1;padding:13.5px 18px!important;position:relative;text-decoration:none}  cd-navigation .cd-navbar-top .navbar-nav .nav-link,   cd-navigation .cd-navbar-top .navbar-nav .nav-link:hover{color:#e9ecef}  cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>[ngbDropdown]>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>[ngbDropdown].open>a,   cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>li>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>li:hover{background-color:#25828e}  cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>[ngbDropdown]>a,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>[ngbDropdown]>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>a,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>a:focus,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>li>a:focus,   cd-navigation .cd-navbar-top .navbar-nav>.open>a,   cd-navigation .cd-navbar-top .navbar-nav>.open>a:focus,   cd-navigation .cd-navbar-top .navbar-nav>.open>a:hover{background-color:transparent;border-color:transparent;color:#e9ecef}  cd-navigation .cd-navbar-top .no-hover:hover{background-color:#374249!important}@media (min-width: 768px){  cd-navigation .cd-navbar-top .cd-navbar-utility{border-bottom:0;font-size:1.1rem;position:absolute;right:0;top:0}}@media (max-width: 767px){  cd-navigation .cd-navbar-top .navbar-nav{margin:0}  cd-navigation .cd-navbar-top .navbar-nav .fa{margin-right:.5em}  cd-navigation .cd-navbar-top .navbar-nav .open .dropdown-menu{background-color:#25828e;border:0;padding-bottom:0;padding-top:0}  cd-navigation .cd-navbar-top .navbar-nav .open .dropdown-menu>li>a{color:#e9ecef;padding:5px 15px 5px 35px}  cd-navigation .cd-navbar-top .navbar-nav .open .dropdown-menu>.active>a{background-color:#25828e}  cd-navigation .cd-navbar-top .navbar-nav>li>a:hover{background-color:#25828e}}.cd-navbar-primary[_ngcontent-%COMP%]   .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .cd-navbar-primary[_ngcontent-%COMP%] > .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:focus, .cd-navbar-primary[_ngcontent-%COMP%] > .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:hover{background-color:#25828e!important;border:0!important;color:#fff!important}.wrapper[_ngcontent-%COMP%]{display:flex;height:100%;width:100%}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]{background:#374249;bottom:0;color:#fff;height:auto;left:0;overflow-y:auto;position:relative;transition:all .3s;width:200px;z-index:999}.wrapper[_ngcontent-%COMP%]   #sidebar.active[_ngcontent-%COMP%]{margin-left:-200px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul.component[_ngcontent-%COMP%]{margin:0;padding:20px 0}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{color:#fff;padding:10px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:#fff;display:block;font-size:1.3em;padding:10px 10px 10px 27px;text-decoration:none}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:hover{background:#25828e;color:#fff}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%] > .badge[_ngcontent-%COMP%]{margin-left:5px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li.active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]   a[aria-expanded=true][_ngcontent-%COMP%]{color:#fff}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[_ngcontent-%COMP%]{position:relative}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[_ngcontent-%COMP%]:after{border:0;content:"\\f054";font-family:ForkAwesome;font-size:1rem;margin-top:2px;position:absolute;right:20px;transition:transform .3s ease-in-out}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[aria-expanded=true][_ngcontent-%COMP%]:after{transform:rotate(90deg)}.wrapper[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{background:#4d5c66;font-size:1.1em!important;padding-left:40px!important}.wrapper[_ngcontent-%COMP%]   .cd-navbar-primary[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:focus{outline:none}.wrapper[_ngcontent-%COMP%]   ngx-simplebar[_ngcontent-%COMP%]{height:100%}#content[_ngcontent-%COMP%]{bottom:0;position:relative;right:0;transition:all .3s;width:calc(100% - 200px)}#content.active[_ngcontent-%COMP%]{width:100vw}']}),t})();var sA=s(6481),aA=s(76666),oC=s(85345);class c3{constructor(i,n){this.keySelector=i,this.flushes=n}call(i,n){return n.subscribe(new d3(i,this.keySelector,this.flushes))}}class d3 extends oC.Ds{constructor(i,n,o){super(i),this.keySelector=n,this.values=new Set,o&&this.add((0,oC.ft)(o,new oC.IY(this)))}notifyNext(){this.values.clear()}notifyError(i){this._error(i)}_next(i){this.keySelector?this._useKeySelector(i):this._finalizeNext(i,i)}_useKeySelector(i){let n;const{destination:o}=this;try{n=this.keySelector(i)}catch(l){return void o.error(l)}this._finalizeNext(n,i)}_finalizeNext(i,n){const{values:o}=this;o.has(i)||(o.add(i),this.destination.next(n))}}var lA=s(46240),uA=s(28049);class HE{resolve(i){const n=i.routeConfig.data,o=null===n.path?null:this.getFullPath(i);return(0,Ps.of)([{text:"string"==typeof n.breadcrumbs?n.breadcrumbs:n.breadcrumbs.text||n.text||o,path:o}])}getFullPath(i){return i.pathFromRoot.reduce((_,v)=>_+v.url.reduce((_,v)=>_+"/"+v.path,""),"")}}function f3(t,i){if(1&t&&(e.TgZ(0,"a",6),e._uU(1),e.qZA()),2&t){const n=e.oxw().$implicit;e.Q6J("routerLink",n.path),e.xp6(1),e.Oqu(n.text)}}function p3(t,i){if(1&t&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&t){const n=e.oxw().$implicit;e.xp6(1),e.Oqu(n.text)}}const cA=function(t){return{active:t}};function _3(t,i){if(1&t&&(e.TgZ(0,"li",3),e.YNc(1,f3,2,2,"a",4),e.YNc(2,p3,2,1,"span",5),e.qZA()),2&t){const n=i.$implicit,o=i.last,l=e.oxw(2);e.Q6J("ngClass",e.VKq(3,cA,o&&l.finished)),e.xp6(1),e.Q6J("ngIf",!o&&null!==n.path),e.xp6(1),e.Q6J("ngIf",o||null===n.path)}}function d(t,i){if(1&t&&(e.TgZ(0,"ol",1),e.YNc(1,_3,3,5,"li",2),e.qZA()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngForOf",n.crumbs)}}let p=(()=>{class t{constructor(n,o,l){this.router=n,this.injector=o,this.titleService=l,this.crumbs=[],this.finished=!1,this.defaultResolver=new HE,this.subscription=this.router.events.pipe((0,y.h)(_=>_ instanceof Ee.OD)).subscribe(()=>{this.finished=!1}),this.subscription=this.router.events.pipe((0,y.h)(_=>_ instanceof Ee.m2)).subscribe(()=>{this._resolveCrumbs(n.routerState.snapshot.root).pipe((0,dd.zg)(v=>v),function u3(t,i){return n=>n.lift(new c3(t,i))}(v=>v.text),(0,lA.q)(),(0,dd.zg)(v=>{const O=this.postProcess(v);return this.wrapIntoObservable(O).pipe((0,uA.P)())})).subscribe(v=>{this.finished=!0,this.crumbs=v;const O=this.getTitleFromCrumbs(this.crumbs);this.titleService.setTitle(O)})})}ngOnDestroy(){this.subscription.unsubscribe()}_resolveCrumbs(n){let o;const l=n.routeConfig&&n.routeConfig.data;if(l&&l.breadcrumbs){let _;_=l.breadcrumbs.prototype instanceof HE?this.injector.get(l.breadcrumbs):this.defaultResolver;const v=_.resolve(n);o=this.wrapIntoObservable(v).pipe((0,uA.P)())}else o=(0,Ps.of)([]);return n.firstChild&&(o=(0,sA.z)(o,this._resolveCrumbs(n.firstChild))),o}postProcess(n){const o=[];return n.forEach(l=>{const _=l.text.split("/");if(_.length>1){l.text=_[_.length-1];for(let v=0;v<_.length-1;v++)o.push({text:_[v],path:null})}o.push(l)}),o}isPromise(n){return n&&"function"==typeof n.then}wrapIntoObservable(n){return n instanceof QS.y?n:this.isPromise(n)?(0,aA.D)(Promise.resolve(n)):(0,Ps.of)(n)}getTitleFromCrumbs(n){const o=n.map(l=>l.text||"").join(" > ");return o.length>0?`Ceph: ${o}`:"Ceph"}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ee.F0),e.Y36(e.zs3),e.Y36(u.Dx))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-breadcrumbs"]],decls:1,vars:1,consts:[["class","breadcrumb",4,"ngIf"],[1,"breadcrumb"],["class","breadcrumb-item",3,"ngClass",4,"ngFor","ngForOf"],[1,"breadcrumb-item",3,"ngClass"],["preserveFragment","",3,"routerLink",4,"ngIf"],[4,"ngIf"],["preserveFragment","",3,"routerLink"]],template:function(n,o){1&n&&e.YNc(0,d,2,1,"ol",0),2&n&&e.Q6J("ngIf",o.crumbs.length)},dependencies:[f.mk,f.sg,f.O5,Ee.rH],styles:['.breadcrumb[_ngcontent-%COMP%]{background-color:transparent;border-radius:0;margin-top:8px;padding:8px 0}.breadcrumb[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%]:before{content:"\\f101";font-family:ForkAwesome;padding:0 5px 0 7px}']}),t})();var g=s(17757),R=s(20523);function H(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"button",8),e.NdJ("click",function(){const _=e.CHM(n).$implicit,v=e.oxw(3);return e.KtG(v.onDaemonSelection(_))}),e._uU(2),e.qZA(),e.BQk()}if(2&t){const n=i.$implicit;e.xp6(2),e.AsE(" ",n.id," ( ",n.zonegroup_name," ) ")}}function te(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",1)(2,"span",2),e.SDv(3,3),e.qZA(),e.TgZ(4,"div",4)(5,"button",5),e._uU(6),e.qZA(),e.TgZ(7,"div",6),e.YNc(8,H,3,2,"ng-container",7),e.qZA()()(),e.BQk()),2&t){const n=e.oxw().ngIf;e.xp6(6),e.AsE(" ",n.selectedDaemon.id," ( ",n.selectedDaemon.zonegroup_name," ) "),e.xp6(2),e.Q6J("ngForOf",n.daemons)}}function ve(t,i){if(1&t&&(e.ynx(0),e.YNc(1,te,9,3,"ng-container",0),e.BQk()),2&t){const n=i.ngIf,o=e.oxw();e.xp6(1),e.Q6J("ngIf",n.ftMap&&n.ftMap.rgw&&o.permissions.rgw.read&&o.isRgwRoute&&n.daemons.length>1)}}const Be=function(t,i,n){return{ftMap:t,daemons:i,selectedDaemon:n}};let nt=(()=>{class t{constructor(n,o,l,_,v){this.authStorageService=n,this.featureToggles=o,this.router=l,this.timerService=_,this.rgwDaemonService=v,this.REFRESH_INTERVAL=5e3,this.subs=new bd.w,this.rgwUrlPrefix="/rgw",this.rgwUserUrlPrefix="/rgw/user",this.rgwBuckerUrlPrefix="/rgw/bucket",this.isRgwRoute=document.location.href.includes(this.rgwUserUrlPrefix)||document.location.href.includes(this.rgwBuckerUrlPrefix)}ngOnInit(){this.permissions=this.authStorageService.getPermissions(),this.featureToggleMap$=this.featureToggles.get(),this.subs.add(this.router.events.pipe((0,y.h)(n=>n instanceof Ee.m2)).subscribe(()=>this.isRgwRoute=[this.rgwBuckerUrlPrefix,this.rgwUserUrlPrefix].some(n=>this.router.url.startsWith(n)))),this.subs.add(this.timerService.get(()=>this.isRgwRoute?this.rgwDaemonService.list():g.C,this.REFRESH_INTERVAL).subscribe())}ngOnDestroy(){this.subs.unsubscribe()}onDaemonSelection(n){this.rgwDaemonService.selectDaemon(n),this.reloadData()}reloadData(){const n=this.router.url;this.router.navigateByUrl(this.rgwUrlPrefix,{skipLocationChange:!0}).finally(()=>{this.router.navigate([n])})}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(Rm.l),e.Y36(Ee.F0),e.Y36(Ls.f),e.Y36(R.b))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-context"]],decls:4,vars:11,consts:function(){let i,n;return i="Selected Object Gateway:",n="Select Object Gateway",[[4,"ngIf"],[1,"cd-context-bar","pt-3","pb-3"],[1,"me-1"],i,["ngbDropdown","","placement","bottom-left",1,"d-inline-block","ms-2"],["ngbDropdownToggle","","title",n,1,"btn","btn-outline-info","ctx-bar-selected-rgw-daemon"],["ngbDropdownMenu",""],[4,"ngFor","ngForOf"],["ngbDropdownItem","",1,"ctx-bar-available-rgw-daemon",3,"click"]]},template:function(n,o){1&n&&(e.YNc(0,ve,2,1,"ng-container",0),e.ALo(1,"async"),e.ALo(2,"async"),e.ALo(3,"async")),2&n&&e.Q6J("ngIf",e.kEZ(7,Be,e.lcZ(1,1,o.featureToggleMap$),e.lcZ(2,3,o.rgwDaemonService.daemons$),e.lcZ(3,5,o.rgwDaemonService.selectedDaemon$)))},dependencies:[f.sg,f.O5,yi.jt,yi.iD,yi.Vi,yi.TH,st.o,f.Ov],styles:[".cd-context-bar[_ngcontent-%COMP%]{border-bottom:1px solid #dee2e6}"]}),t})();const Ht=function(t,i){return{dashboard:t,"rgw-dashboard":i}};let Sn=(()=>{class t{constructor(n,o,l,_){this.router=n,this.summaryService=o,this.taskManagerService=l,this.faviconService=_,this.subs=new bd.w}ngOnInit(){this.subs.add(this.summaryService.startPolling()),this.subs.add(this.taskManagerService.init(this.summaryService)),this.faviconService.init()}ngOnDestroy(){this.subs.unsubscribe()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ee.F0),e.Y36(zh.J),e.Y36(EO.k),e.Y36(DT))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-workbench-layout"]],features:[e._Bn([DT])],decls:6,vars:4,consts:[[1,"container-fluid","h-100",3,"ngClass"]],template:function(n,o){1&n&&(e.TgZ(0,"block-ui")(1,"cd-navigation")(2,"div",0),e._UZ(3,"cd-context")(4,"cd-breadcrumbs")(5,"router-outlet"),e.qZA()()()),2&n&&(e.xp6(2),e.Q6J("ngClass",e.WLB(1,Ht,"/dashboard"==o.router.url||"/dashboard_3"==o.router.url,"/rgw/overview"==o.router.url)))},dependencies:[Qg.G8,f.mk,oA,p,Ee.lC,nt],styles:[".dashboard[_ngcontent-%COMP%]{background-color:#e9ecef;margin:0;padding:0}.container-fluid[_ngcontent-%COMP%]{overflow:auto;position:absolute}.rgw-dashboard[_ngcontent-%COMP%]{background-color:#e9ecef}"]}),t})();var Ln=s(78139),ei=s(55004);function xi(t){return(xi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(i){return typeof i}:function(i){return i&&"function"==typeof Symbol&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i})(t)}function ls(t,i){for(var n=0;n<i.length;n++){var o=i[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function ga(t,i,n){return i in t?Object.defineProperty(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[i]=n,t}function bl(t,i){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);i&&(o=o.filter(function(l){return Object.getOwnPropertyDescriptor(t,l).enumerable})),n.push.apply(n,o)}return n}function _d(t){return(_d=Object.setPrototypeOf?Object.getPrototypeOf:function(n){return n.__proto__||Object.getPrototypeOf(n)})(t)}function Fd(t,i){return(Fd=Object.setPrototypeOf||function(o,l){return o.__proto__=l,o})(t,i)}var m3={};function JN(t,i,n){return function WN(t){return null==t}(t)?n:function ZN(t){return null!==t&&"object"===xi(t)&&"function"==typeof t.get&&"function"==typeof t.has}(t)?t.has(i)?t.get(i):n:hasOwnProperty.call(t,i)?t[i]:n}function g3(t,i,n){for(var o=0;o!==i.length;)if((t=JN(t,i[o++],m3))===m3)return n;return t}function dA(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=function QN(t,i){return function(n){if("string"==typeof n)return(0,ei.is)(i[n],t[n]);if(Array.isArray(n))return(0,ei.is)(g3(i,n),g3(t,n));throw new TypeError("Invalid key: expected Array or string: "+n)}}(i,n),l=t||Object.keys(function Vo(t){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?bl(n,!0).forEach(function(o){ga(t,o,n[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):bl(n).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(n,o))})}return t}({},n,{},i));return l.every(o)}var KN=function(t){function i(){return function mo(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}(this,i),function VN(t,i){return!i||"object"!=typeof i&&"function"!=typeof i?function h3(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):i}(this,_d(i).apply(this,arguments))}return function Kl(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(i&&i.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),i&&Fd(t,i)}(i,t),function js(t,i,n){i&&ls(t.prototype,i),n&&ls(t,n)}(i,[{key:"shouldComponentUpdate",value:function(o){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return!dA(this.updateOnProps,this.props,o,"updateOnProps")||!dA(this.updateOnStates,this.state,l,"updateOnStates")}}]),i}(Ln.Component);const XN=KN;function v3(t,i){if(Array.prototype.indexOf)return t.indexOf(i);for(var n=0,o=t.length;n<o;n++)if(t[n]===i)return n;return-1}function lv(t,i){for(var n=t.length-1;n>=0;n--)!0===i(t[n])&&t.splice(n,1)}function fA(t){throw new Error("Unhandled case for value: '".concat(t,"'"))}var n,pA=function(){function t(i){void 0===i&&(i={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=i.tagName||"",this.attrs=i.attrs||{},this.innerHTML=i.innerHtml||i.innerHTML||""}return t.prototype.setTagName=function(i){return this.tagName=i,this},t.prototype.getTagName=function(){return this.tagName||""},t.prototype.setAttr=function(i,n){return this.getAttrs()[i]=n,this},t.prototype.getAttr=function(i){return this.getAttrs()[i]},t.prototype.setAttrs=function(i){return Object.assign(this.getAttrs(),i),this},t.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},t.prototype.setClass=function(i){return this.setAttr("class",i)},t.prototype.addClass=function(i){for(var v,n=this.getClass(),o=this.whitespaceRegex,l=n?n.split(o):[],_=i.split(o);v=_.shift();)-1===v3(l,v)&&l.push(v);return this.getAttrs().class=l.join(" "),this},t.prototype.removeClass=function(i){for(var v,n=this.getClass(),o=this.whitespaceRegex,l=n?n.split(o):[],_=i.split(o);l.length&&(v=_.shift());){var O=v3(l,v);-1!==O&&l.splice(O,1)}return this.getAttrs().class=l.join(" "),this},t.prototype.getClass=function(){return this.getAttrs().class||""},t.prototype.hasClass=function(i){return-1!==(" "+this.getClass()+" ").indexOf(" "+i+" ")},t.prototype.setInnerHTML=function(i){return this.innerHTML=i,this},t.prototype.setInnerHtml=function(i){return this.setInnerHTML(i)},t.prototype.getInnerHTML=function(){return this.innerHTML||""},t.prototype.getInnerHtml=function(){return this.getInnerHTML()},t.prototype.toAnchorString=function(){var i=this.getTagName(),n=this.buildAttrsStr();return["<",i,n=n?" "+n:"",">",this.getInnerHtml(),"</",i,">"].join("")},t.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var i=this.getAttrs(),n=[];for(var o in i)i.hasOwnProperty(o)&&n.push(o+'="'+i[o]+'"');return n.join(" ")},t}(),y3=function(){function t(i){void 0===i&&(i={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=i.newWindow||!1,this.truncate=i.truncate||{},this.className=i.className||""}return t.prototype.build=function(i){return new pA({tagName:"a",attrs:this.createAttrs(i),innerHtml:this.processAnchorText(i.getAnchorText())})},t.prototype.createAttrs=function(i){var n={href:i.getAnchorHref()},o=this.createCssClass(i);return o&&(n.class=o),this.newWindow&&(n.target="_blank",n.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length<i.getAnchorText().length&&(n.title=i.getAnchorHref()),n},t.prototype.createCssClass=function(i){var n=this.className;if(n){for(var o=[n],l=i.getCssClassSuffixes(),_=0,v=l.length;_<v;_++)o.push(n+"-"+l[_]);return o.join(" ")}return""},t.prototype.processAnchorText=function(i){return this.doTruncate(i)},t.prototype.doTruncate=function(i){var n=this.truncate;if(!n||!n.length)return i;var o=n.length,l=n.location;return"smart"===l?function r8(t,i,n){var o,l;null==n?(n="&hellip;",l=3,o=8):(l=n.length,o=n.length);var v=function(we){var Z="";return we.scheme&&we.host&&(Z+=we.scheme+"://"),we.host&&(Z+=we.host),we.path&&(Z+="/"+we.path),we.query&&(Z+="?"+we.query),we.fragment&&(Z+="#"+we.fragment),Z},O=function(we,Z){var Ft=Z/2,Dt=Math.ceil(Ft),Yt=-1*Math.floor(Ft),ln="";return Yt<0&&(ln=we.substr(Yt)),we.substr(0,Dt)+n+ln};if(t.length<=i)return t;var Z,Ft,Dt,P=i-l,G=(Z={},(Dt=(Ft=t).match(/^([a-z]+):\/\//i))&&(Z.scheme=Dt[1],Ft=Ft.substr(Dt[0].length)),(Dt=Ft.match(/^(.*?)(?=(\?|#|\/|$))/i))&&(Z.host=Dt[1],Ft=Ft.substr(Dt[0].length)),(Dt=Ft.match(/^\/(.*?)(?=(\?|#|$))/i))&&(Z.path=Dt[1],Ft=Ft.substr(Dt[0].length)),(Dt=Ft.match(/^\?(.*?)(?=(#|$))/i))&&(Z.query=Dt[1],Ft=Ft.substr(Dt[0].length)),(Dt=Ft.match(/^#(.*?)$/i))&&(Z.fragment=Dt[1]),Z);if(G.query){var K=G.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);K&&(G.query=G.query.substr(0,K[1].length),t=v(G))}if(t.length<=i||(G.host&&(G.host=G.host.replace(/^www\./,""),t=v(G)),t.length<=i))return t;var oe="";if(G.host&&(oe+=G.host),oe.length>=P)return G.host.length==i?(G.host.substr(0,i-l)+n).substr(0,P+o):O(oe,P).substr(0,P+o);var ue="";if(G.path&&(ue+="/"+G.path),G.query&&(ue+="?"+G.query),ue){if((oe+ue).length>=P)return(oe+ue).length==i?(oe+ue).substr(0,i):(oe+O(ue,P-oe.length)).substr(0,P+o);oe+=ue}if(G.fragment){var ye="#"+G.fragment;if((oe+ye).length>=P)return(oe+ye).length==i?(oe+ye).substr(0,i):(oe+O(ye,P-oe.length)).substr(0,P+o);oe+=ye}if(G.scheme&&G.host){var xe=G.scheme+"://";if((oe+xe).length<P)return(xe+oe).substr(0,i)}if(oe.length<=i)return oe;var ke="";return P>0&&(ke=oe.substr(-1*Math.floor(P/2))),(oe.substr(0,Math.ceil(P/2))+n+ke).substr(0,P+o)}(i,o):"middle"===l?function i8(t,i,n){if(t.length<=i)return t;var o,l;null==n?(n="&hellip;",o=8,l=3):(o=n.length,l=n.length);var _=i-l,v="";return _>0&&(v=t.substr(-1*Math.floor(_/2))),(t.substr(0,Math.ceil(_/2))+n+v).substr(0,_+o)}(i,o):function o8(t,i,n){return function t8(t,i,n){var o;return t.length>i&&(null==n?(n="&hellip;",o=3):o=n.length,t=t.substring(0,i-o)+n),t}(t,i,n)}(i,o)},t}(),C0=function(){function t(i){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=i.tagBuilder,this.matchedText=i.matchedText,this.offset=i.offset}return t.prototype.getMatchedText=function(){return this.matchedText},t.prototype.setOffset=function(i){this.offset=i},t.prototype.getOffset=function(){return this.offset},t.prototype.getCssClassSuffixes=function(){return[this.getType()]},t.prototype.buildTag=function(){return this.tagBuilder.build(this)},t}(),E3=function(t){function i(n){var o=t.call(this,n)||this;return o.email="",o.email=n.email,o}return(0,Gt.ZT)(i,t),i.prototype.getType=function(){return"email"},i.prototype.getEmail=function(){return this.email},i.prototype.getAnchorHref=function(){return"mailto:"+this.email},i.prototype.getAnchorText=function(){return this.email},i}(C0),S3=function(t){function i(n){var o=t.call(this,n)||this;return o.serviceName="",o.hashtag="",o.serviceName=n.serviceName,o.hashtag=n.hashtag,o}return(0,Gt.ZT)(i,t),i.prototype.getType=function(){return"hashtag"},i.prototype.getServiceName=function(){return this.serviceName},i.prototype.getHashtag=function(){return this.hashtag},i.prototype.getAnchorHref=function(){var n=this.serviceName,o=this.hashtag;switch(n){case"twitter":return"https://twitter.com/hashtag/"+o;case"facebook":return"https://www.facebook.com/hashtag/"+o;case"instagram":return"https://instagram.com/explore/tags/"+o;case"tiktok":return"https://www.tiktok.com/tag/"+o;default:throw new Error("Unknown service name to point hashtag to: "+n)}},i.prototype.getAnchorText=function(){return"#"+this.hashtag},i}(C0),b3=function(t){function i(n){var o=t.call(this,n)||this;return o.serviceName="twitter",o.mention="",o.mention=n.mention,o.serviceName=n.serviceName,o}return(0,Gt.ZT)(i,t),i.prototype.getType=function(){return"mention"},i.prototype.getMention=function(){return this.mention},i.prototype.getServiceName=function(){return this.serviceName},i.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;case"tiktok":return"https://www.tiktok.com/@"+this.mention;default:throw new Error("Unknown service name to point mention to: "+this.serviceName)}},i.prototype.getAnchorText=function(){return"@"+this.mention},i.prototype.getCssClassSuffixes=function(){var n=t.prototype.getCssClassSuffixes.call(this),o=this.getServiceName();return o&&n.push(o),n},i}(C0),T3=function(t){function i(n){var o=t.call(this,n)||this;return o.number="",o.plusSign=!1,o.number=n.number,o.plusSign=n.plusSign,o}return(0,Gt.ZT)(i,t),i.prototype.getType=function(){return"phone"},i.prototype.getPhoneNumber=function(){return this.number},i.prototype.getNumber=function(){return this.getPhoneNumber()},i.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},i.prototype.getAnchorText=function(){return this.matchedText},i}(C0),C3=function(t){function i(n){var o=t.call(this,n)||this;return o.url="",o.urlMatchType="scheme",o.protocolUrlMatch=!1,o.protocolRelativeMatch=!1,o.stripPrefix={scheme:!0,www:!0},o.stripTrailingSlash=!0,o.decodePercentEncoding=!0,o.schemePrefixRegex=/^(https?:\/\/)?/i,o.wwwPrefixRegex=/^(https?:\/\/)?(www\.)?/i,o.protocolRelativeRegex=/^\/\//,o.protocolPrepended=!1,o.urlMatchType=n.urlMatchType,o.url=n.url,o.protocolUrlMatch=n.protocolUrlMatch,o.protocolRelativeMatch=n.protocolRelativeMatch,o.stripPrefix=n.stripPrefix,o.stripTrailingSlash=n.stripTrailingSlash,o.decodePercentEncoding=n.decodePercentEncoding,o}return(0,Gt.ZT)(i,t),i.prototype.getType=function(){return"url"},i.prototype.getUrlMatchType=function(){return this.urlMatchType},i.prototype.getUrl=function(){var n=this.url;return!this.protocolRelativeMatch&&!this.protocolUrlMatch&&!this.protocolPrepended&&(n=this.url="http://"+n,this.protocolPrepended=!0),n},i.prototype.getAnchorHref=function(){return this.getUrl().replace(/&amp;/g,"&")},i.prototype.getAnchorText=function(){var n=this.getMatchedText();return this.protocolRelativeMatch&&(n=this.stripProtocolRelativePrefix(n)),this.stripPrefix.scheme&&(n=this.stripSchemePrefix(n)),this.stripPrefix.www&&(n=this.stripWwwPrefix(n)),this.stripTrailingSlash&&(n=this.removeTrailingSlash(n)),this.decodePercentEncoding&&(n=this.removePercentEncoding(n)),n},i.prototype.stripSchemePrefix=function(n){return n.replace(this.schemePrefixRegex,"")},i.prototype.stripWwwPrefix=function(n){return n.replace(this.wwwPrefixRegex,"$1")},i.prototype.stripProtocolRelativePrefix=function(n){return n.replace(this.protocolRelativeRegex,"")},i.prototype.removeTrailingSlash=function(n){return"/"===n.charAt(n.length-1)&&(n=n.slice(0,-1)),n},i.prototype.removePercentEncoding=function(n){var o=n.replace(/%22/gi,"&quot;").replace(/%26/gi,"&amp;").replace(/%27/gi,"&#39;").replace(/%3C/gi,"&lt;").replace(/%3E/gi,"&gt;");try{return decodeURIComponent(o)}catch{return o}},i}(C0),M0=function t(i){this.__jsduckDummyDocProp=null,this.tagBuilder=i.tagBuilder},_A=/[A-Za-z]/,s8=/[\d]/,a8=/[\D]/,uv=/\s/,hA=/['"]/,l8=/[\x00-\x1F\x7F]/,M3=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,O3=M3+/\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff/.source+/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,sC=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,d8=O3+sC,Qd=O3+sC,UE=new RegExp("[".concat(Qd,"]")),f8="(?:["+sC+"]{1,3}\\.){3}["+sC+"]{1,3}",p8="["+Qd+"](?:["+Qd+"\\-_]{0,61}["+Qd+"])?",A3=function(t){return"(?=("+p8+"))\\"+t},mA=function(t){return"(?:"+A3(t)+"(?:\\."+A3(t+1)+"){0,126}|"+f8+")"},aC=(new RegExp("["+Qd+".\\-]*["+Qd+"\\-]"),UE),D3=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|verm\xf6gensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|verm\xf6gensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|travelchannel|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|\u043a\u0430\u0442\u043e\u043b\u0438\u043a|\u0627\u062a\u0635\u0627\u0644\u0627\u062a|\u0627\u0644\u0628\u062d\u0631\u064a\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0639\u0644\u064a\u0627\u0646|\u067e\u0627\u06a9\u0633\u062a\u0627\u0646|\u0643\u0627\u062b\u0648\u0644\u064a\u0643|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|\u043c\u043e\u0441\u043a\u0432\u0430|\u043e\u043d\u043b\u0430\u0439\u043d|\u0627\u0628\u0648\u0638\u0628\u064a|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0641\u0644\u0633\u0637\u064a\u0646|\u0645\u0644\u064a\u0633\u064a\u0627|\u092d\u093e\u0930\u0924\u092e\u094d|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u30d5\u30a1\u30c3\u30b7\u30e7\u30f3|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|\u05d9\u05e9\u05e8\u05d0\u05dc|\u0627\u06cc\u0631\u0627\u0646|\u0628\u0627\u0632\u0627\u0631|\u0628\u06be\u0627\u0631\u062a|\u0633\u0648\u062f\u0627\u0646|\u0633\u0648\u0631\u064a\u0629|\u0647\u0645\u0631\u0627\u0647|\u092d\u093e\u0930\u094b\u0924|\u0938\u0902\u0917\u0920\u0928|\u09ac\u09be\u0982\u09b2\u09be|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0d2d\u0d3e\u0d30\u0d24\u0d02|\u5609\u91cc\u5927\u9152\u5e97|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|\u0434\u0435\u0442\u0438|\u0441\u0430\u0439\u0442|\u0628\u0627\u0631\u062a|\u0628\u064a\u062a\u0643|\u0680\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0645\u0648\u0642\u0639|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u09ad\u09be\u09f0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b2d\u0b3e\u0b30\u0b24|\u0cad\u0cbe\u0cb0\u0ca4|\u0dbd\u0d82\u0d9a\u0dcf|\u30a2\u30de\u30be\u30f3|\u30b0\u30fc\u30b0\u30eb|\u30af\u30e9\u30a6\u30c9|\u30dd\u30a4\u30f3\u30c8|\u7ec4\u7ec7\u673a\u6784|\u96fb\u8a0a\u76c8\u79d1|\u9999\u683c\u91cc\u62c9|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|\u0431\u0435\u043b|\u043a\u043e\u043c|\u049b\u0430\u0437|\u043c\u043a\u0434|\u043c\u043e\u043d|\u043e\u0440\u0433|\u0440\u0443\u0441|\u0441\u0440\u0431|\u0443\u043a\u0440|\u0570\u0561\u0575|\u05e7\u05d5\u05dd|\u0639\u0631\u0628|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0915\u0949\u092e|\u0928\u0947\u091f|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22|\u0ea5\u0eb2\u0ea7|\u30b9\u30c8\u30a2|\u30bb\u30fc\u30eb|\u307f\u3093\u306a|\u4e2d\u6587\u7f51|\u4e9a\u9a6c\u900a|\u5929\u4e3b\u6559|\u6211\u7231\u4f60|\u65b0\u52a0\u5761|\u6de1\u9a6c\u9521|\u8bfa\u57fa\u4e9a|\u98de\u5229\u6d66|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|\u03b5\u03bb|\u03b5\u03c5|\u0431\u0433|\u0435\u044e|\u0440\u0444|\u10d2\u10d4|\ub2f7\ub137|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d|\u30b3\u30e0|\u4e16\u754c|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4f01\u4e1a|\u4f5b\u5c71|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063|\u5546\u57ce|\u5546\u5e97|\u5546\u6807|\u5609\u91cc|\u5728\u7ebf|\u5927\u62ff|\u5a31\u4e50|\u5bb6\u96fb|\u5e7f\u4e1c|\u5fae\u535a|\u6148\u5584|\u624b\u673a|\u62db\u8058|\u653f\u52a1|\u653f\u5e9c|\u65b0\u95fb|\u65f6\u5c1a|\u66f8\u7c4d|\u673a\u6784|\u6e38\u620f|\u6fb3\u9580|\u70b9\u770b|\u79fb\u52a8|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7ad9|\u7f51\u7edc|\u8054\u901a|\u8c37\u6b4c|\u8d2d\u7269|\u901a\u8ca9|\u96c6\u56e2|\u98df\u54c1|\u9910\u5385|\u9999\u6e2f)/,_8=new RegExp("[".concat(Qd,"!#$%&'*+/=?^_`{|}~-]")),h8=new RegExp("^".concat(D3.source,"$")),R3=function(t){function i(){var n=null!==t&&t.apply(this,arguments)||this;return n.localPartCharRegex=_8,n.strictTldRegex=h8,n}return(0,Gt.ZT)(i,t),i.prototype.parseMatches=function(n){for(var o=this.tagBuilder,l=this.localPartCharRegex,_=this.strictTldRegex,v=[],O=n.length,P=new lC,G={m:"a",a:"i",i:"l",l:"t",t:"o",o:":"},K=0,oe=0,ue=P;K<O;){var pe=n.charAt(K);switch(oe){case 0:"m"===(nn=pe)?Yt(1):l.test(nn)&&Yt();break;case 1:Ue(n.charAt(K-1),pe);break;case 2:xe(pe);break;case 3:ke(pe);break;case 4:we(pe);break;case 5:Z(pe);break;case 6:Ft(pe);break;case 7:Dt(pe);break;default:fA(oe)}K++}var nn;return $n(),v;function Ue(nn,Jn){":"===nn?l.test(Jn)?(oe=2,ue=new lC((0,Gt.pi)((0,Gt.pi)({},ue),{hasMailtoPrefix:!0}))):ln():G[nn]===Jn||(l.test(Jn)?oe=2:"."===Jn?oe=3:"@"===Jn?oe=4:ln())}function xe(nn){"."===nn?oe=3:"@"===nn?oe=4:l.test(nn)||ln()}function ke(nn){"."===nn||"@"===nn?ln():l.test(nn)?oe=2:ln()}function we(nn){aC.test(nn)?oe=5:ln()}function Z(nn){"."===nn?oe=7:"-"===nn?oe=6:aC.test(nn)||$n()}function Ft(nn){"-"===nn||"."===nn?$n():aC.test(nn)?oe=5:$n()}function Dt(nn){"."===nn||"-"===nn?$n():aC.test(nn)?(oe=5,ue=new lC((0,Gt.pi)((0,Gt.pi)({},ue),{hasDomainDot:!0}))):$n()}function Yt(nn){void 0===nn&&(nn=2),oe=nn,ue=new lC({idx:K})}function ln(){oe=0,ue=P}function $n(){if(ue.hasDomainDot){var nn=n.slice(ue.idx,K);/[-.]$/.test(nn)&&(nn=nn.slice(0,-1));var Jn=ue.hasMailtoPrefix?nn.slice(7):nn;(function zn(Zr){var ui=(Zr.split(".").pop()||"").toLowerCase();return _.test(ui)})(Jn)&&v.push(new E3({tagBuilder:o,matchedText:nn,offset:ue.idx,email:Jn}))}ln()}},i}(M0),lC=function t(i){void 0===i&&(i={}),this.idx=void 0!==i.idx?i.idx:-1,this.hasMailtoPrefix=!!i.hasMailtoPrefix,this.hasDomainDot=!!i.hasDomainDot},m8=function(){function t(){}return t.isValid=function(i,n){return!(n&&!this.isValidUriScheme(n)||this.urlMatchDoesNotHaveProtocolOrDot(i,n)||this.urlMatchDoesNotHaveAtLeastOneWordChar(i,n)&&!this.isValidIpAddress(i)||this.containsMultipleDots(i))},t.isValidIpAddress=function(i){var n=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==i.match(n)},t.containsMultipleDots=function(i){var n=i;return this.hasFullProtocolRegex.test(i)&&(n=i.split("://")[1]),n.split("/")[0].indexOf("..")>-1},t.isValidUriScheme=function(i){var n=i.match(this.uriSchemeRegex),o=n&&n[0].toLowerCase();return"javascript:"!==o&&"vbscript:"!==o},t.urlMatchDoesNotHaveProtocolOrDot=function(i,n){return!(!i||n&&this.hasFullProtocolRegex.test(n)||-1!==i.indexOf("."))},t.urlMatchDoesNotHaveAtLeastOneWordChar=function(i,n){return!(!i||!n||this.hasFullProtocolRegex.test(n)||this.hasWordCharAfterProtocolRegex.test(i))},t.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,t.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,t.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+M3+"]"),t.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,t}(),g8=(n=new RegExp("[/?#](?:["+Qd+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^\u2713]*["+Qd+"\\-+&@#/%=~_()|'$*\\[\\]{}\u2713])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,mA(2),")","|","(","(//)?",/(?:www\.)/.source,mA(6),")","|","(","(//)?",mA(10)+"\\.",D3.source,"(?![-"+d8+"])",")",")","(?::[0-9]+)?","(?:"+n.source+")?"].join(""),"gi")),v8=new RegExp("["+Qd+"]"),x3=function(t){function i(n){var o=t.call(this,n)||this;return o.stripPrefix={scheme:!0,www:!0},o.stripTrailingSlash=!0,o.decodePercentEncoding=!0,o.matcherRegex=g8,o.wordCharRegExp=v8,o.stripPrefix=n.stripPrefix,o.stripTrailingSlash=n.stripTrailingSlash,o.decodePercentEncoding=n.decodePercentEncoding,o}return(0,Gt.ZT)(i,t),i.prototype.parseMatches=function(n){for(var G,o=this.matcherRegex,l=this.stripPrefix,_=this.stripTrailingSlash,v=this.decodePercentEncoding,O=this.tagBuilder,P=[],K=function(){var ue=G[0],pe=G[1],ye=G[4],ke=G.index,we=G[5]||G[9],Z=n.charAt(ke-1);if(!m8.isValid(ue,pe)||ke>0&&"@"===Z||ke>0&&we&&oe.wordCharRegExp.test(Z))return"continue";if(/\?$/.test(ue)&&(ue=ue.substr(0,ue.length-1)),oe.matchHasUnbalancedClosingParen(ue))ue=ue.substr(0,ue.length-1);else{var Ft=oe.matchHasInvalidCharAfterTld(ue,pe);Ft>-1&&(ue=ue.substr(0,Ft))}var Dt=["http://","https://"].find(function(nn){return!!pe&&-1!==pe.indexOf(nn)});if(Dt){var Yt=ue.indexOf(Dt);ue=ue.substr(Yt),pe=pe.substr(Yt),ke+=Yt}P.push(new C3({tagBuilder:O,matchedText:ue,offset:ke,urlMatchType:pe?"scheme":ye?"www":"tld",url:ue,protocolUrlMatch:!!pe,protocolRelativeMatch:!!we,stripPrefix:l,stripTrailingSlash:_,decodePercentEncoding:v}))},oe=this;null!==(G=o.exec(n));)K();return P},i.prototype.matchHasUnbalancedClosingParen=function(n){var l,o=n.charAt(n.length-1);if(")"===o)l="(";else if("]"===o)l="[";else{if("}"!==o)return!1;l="{"}for(var _=0,v=0,O=n.length-1;v<O;v++){var P=n.charAt(v);P===l?_++:P===o&&(_=Math.max(_-1,0))}return 0===_},i.prototype.matchHasInvalidCharAfterTld=function(n,o){if(!n)return-1;var l=0;o&&(l=n.indexOf(":"),n=n.slice(l));var v=new RegExp("^((.?//)?[-."+Qd+"]*[-"+Qd+"]\\.[-"+Qd+"]+)").exec(n);return null===v?-1:(l+=v[1].length,n=n.slice(v[1].length),/^[^-.A-Za-z0-9:\/?#]/.test(n)?l:-1)},i}(M0),w3=new RegExp("[_".concat(Qd,"]")),P3=function(t){function i(n){var o=t.call(this,n)||this;return o.serviceName="twitter",o.serviceName=n.serviceName,o}return(0,Gt.ZT)(i,t),i.prototype.parseMatches=function(n){for(var o=this.tagBuilder,l=this.serviceName,_=[],v=n.length,O=0,P=-1,G=0;O<v;){var K=n.charAt(O);switch(G){case 0:"#"===(xe=K)?(G=2,P=O):UE.test(xe)&&(G=1);break;case 1:ue(K);break;case 2:pe(K);break;case 3:ye(K);break;default:fA(G)}O++}var xe;return Ue(),_;function ue(xe){UE.test(xe)||(G=0)}function pe(xe){G=w3.test(xe)?3:UE.test(xe)?1:0}function ye(xe){w3.test(xe)||(Ue(),P=-1,G=UE.test(xe)?1:0)}function Ue(){if(P>-1&&O-P<=140){var xe=n.slice(P,O),ke=new S3({tagBuilder:o,matchedText:xe,offset:P,serviceName:l,hashtag:xe.slice(1)});_.push(ke)}}},i}(M0),y8=["twitter","facebook","instagram","tiktok"],b8=new RegExp("".concat(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source,"|").concat(/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source),"g"),N3=function(t){function i(){var n=null!==t&&t.apply(this,arguments)||this;return n.matcherRegex=b8,n}return(0,Gt.ZT)(i,t),i.prototype.parseMatches=function(n){for(var v,o=this.matcherRegex,l=this.tagBuilder,_=[];null!==(v=o.exec(n));){var O=v[0],P=O.replace(/[^0-9,;#]/g,""),G=!(!v[1]&&!v[2]),K=0==v.index?"":n.substr(v.index-1,1),oe=n.substr(v.index+O.length,1),ue=!K.match(/\d/)&&!oe.match(/\d/);this.testMatch(v[3])&&this.testMatch(O)&&ue&&_.push(new T3({tagBuilder:l,matchedText:O,offset:v.index,number:P,plusSign:G}))}return _},i.prototype.testMatch=function(n){return a8.test(n)},i}(M0),T8=new RegExp("@[_".concat(Qd,"]{1,50}(?![_").concat(Qd,"])"),"g"),C8=new RegExp("@[_.".concat(Qd,"]{1,30}(?![_").concat(Qd,"])"),"g"),M8=new RegExp("@[-_.".concat(Qd,"]{1,50}(?![-_").concat(Qd,"])"),"g"),O8=new RegExp("@[_.".concat(Qd,"]{1,23}[_").concat(Qd,"](?![_").concat(Qd,"])"),"g"),A8=new RegExp("[^"+Qd+"]"),I3=function(t){function i(n){var o=t.call(this,n)||this;return o.serviceName="twitter",o.matcherRegexes={twitter:T8,instagram:C8,soundcloud:M8,tiktok:O8},o.nonWordCharRegex=A8,o.serviceName=n.serviceName,o}return(0,Gt.ZT)(i,t),i.prototype.parseMatches=function(n){var P,o=this.serviceName,l=this.matcherRegexes[this.serviceName],_=this.nonWordCharRegex,v=this.tagBuilder,O=[];if(!l)return O;for(;null!==(P=l.exec(n));){var G=P.index,K=n.charAt(G-1);if(0===G||_.test(K)){var oe=P[0].replace(/\.+$/g,""),ue=oe.slice(1);O.push(new b3({tagBuilder:v,matchedText:oe,offset:G,serviceName:o,mention:ue}))}}return O},i}(M0);var rg=function t(i){void 0===i&&(i={}),this.idx=void 0!==i.idx?i.idx:-1,this.type=i.type||"tag",this.name=i.name||"",this.isOpening=!!i.isOpening,this.isClosing=!!i.isClosing},R8=function(){function t(i){void 0===i&&(i={}),this.version=t.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(i.urls),this.email="boolean"==typeof i.email?i.email:this.email,this.phone="boolean"==typeof i.phone?i.phone:this.phone,this.hashtag=i.hashtag||this.hashtag,this.mention=i.mention||this.mention,this.newWindow="boolean"==typeof i.newWindow?i.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(i.stripPrefix),this.stripTrailingSlash="boolean"==typeof i.stripTrailingSlash?i.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding="boolean"==typeof i.decodePercentEncoding?i.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=i.sanitizeHtml||!1;var n=this.mention;if(!1!==n&&-1===["twitter","instagram","soundcloud","tiktok"].indexOf(n))throw new Error("invalid `mention` cfg '".concat(n,"' - see docs"));var o=this.hashtag;if(!1!==o&&-1===y8.indexOf(o))throw new Error("invalid `hashtag` cfg '".concat(o,"' - see docs"));this.truncate=this.normalizeTruncateCfg(i.truncate),this.className=i.className||this.className,this.replaceFn=i.replaceFn||this.replaceFn,this.context=i.context||this}return t.link=function(i,n){return new t(n).link(i)},t.parse=function(i,n){return new t(n).parse(i)},t.prototype.normalizeUrlsCfg=function(i){return null==i&&(i=!0),"boolean"==typeof i?{schemeMatches:i,wwwMatches:i,tldMatches:i}:{schemeMatches:"boolean"!=typeof i.schemeMatches||i.schemeMatches,wwwMatches:"boolean"!=typeof i.wwwMatches||i.wwwMatches,tldMatches:"boolean"!=typeof i.tldMatches||i.tldMatches}},t.prototype.normalizeStripPrefixCfg=function(i){return null==i&&(i=!0),"boolean"==typeof i?{scheme:i,www:i}:{scheme:"boolean"!=typeof i.scheme||i.scheme,www:"boolean"!=typeof i.www||i.www}},t.prototype.normalizeTruncateCfg=function(i){return"number"==typeof i?{length:i,location:"end"}:function e8(t,i){for(var n in i)i.hasOwnProperty(n)&&void 0===t[n]&&(t[n]=i[n]);return t}(i||{},{length:Number.POSITIVE_INFINITY,location:"end"})},t.prototype.parse=function(i){var n=this,o=["a","style","script"],l=0,_=[];return function D8(t,i){for(var n=i.onOpenTag,o=i.onCloseTag,l=i.onText,_=i.onComment,v=i.onDoctype,O=new rg,P=0,G=t.length,K=0,oe=0,ue=O;P<G;){var pe=t.charAt(P);switch(K){case 0:"<"===pe&&Wn();break;case 1:"!"===(pi=pe)?K=13:"/"===pi?(K=2,ue=new rg((0,Gt.pi)((0,Gt.pi)({},ue),{isClosing:!0}))):"<"===pi?Wn():_A.test(pi)?(K=3,ue=new rg((0,Gt.pi)((0,Gt.pi)({},ue),{isOpening:!0}))):(K=0,ue=O);break;case 2:ke(pe);break;case 3:xe(pe);break;case 4:we(pe);break;case 5:Z(pe);break;case 6:Ft(pe);break;case 7:Dt(pe);break;case 8:Yt(pe);break;case 9:ln(pe);break;case 10:$n(pe);break;case 11:nn(pe);break;case 12:Jn(pe);break;case 13:"--"===t.substr(P,2)?(P+=2,ue=new rg((0,Gt.pi)((0,Gt.pi)({},ue),{type:"comment"})),K=14):"DOCTYPE"===t.substr(P,7).toUpperCase()?(P+=7,ue=new rg((0,Gt.pi)((0,Gt.pi)({},ue),{type:"doctype"})),K=20):Cr();break;case 14:Zr(pe);break;case 15:$r(pe);break;case 16:ui(pe);break;case 17:gi(pe);break;case 18:Un(pe);break;case 19:lr(pe);break;case 20:ar(pe);break;default:fA(K)}P++}var pi;function xe(pi){uv.test(pi)?(ue=new rg((0,Gt.pi)((0,Gt.pi)({},ue),{name:Yi()})),K=4):"<"===pi?Wn():"/"===pi?(ue=new rg((0,Gt.pi)((0,Gt.pi)({},ue),{name:Yi()})),K=12):">"===pi?(ue=new rg((0,Gt.pi)((0,Gt.pi)({},ue),{name:Yi()})),ai()):!_A.test(pi)&&!s8.test(pi)&&":"!==pi&&Cr()}function ke(pi){">"===pi?Cr():_A.test(pi)?K=3:Cr()}function we(pi){uv.test(pi)||("/"===pi?K=12:">"===pi?ai():"<"===pi?Wn():"="===pi||hA.test(pi)||l8.test(pi)?Cr():K=5)}function Z(pi){uv.test(pi)?K=6:"/"===pi?K=12:"="===pi?K=7:">"===pi?ai():"<"===pi?Wn():hA.test(pi)&&Cr()}function Ft(pi){uv.test(pi)||("/"===pi?K=12:"="===pi?K=7:">"===pi?ai():"<"===pi?Wn():hA.test(pi)?Cr():K=5)}function Dt(pi){uv.test(pi)||('"'===pi?K=8:"'"===pi?K=9:/[>=`]/.test(pi)?Cr():"<"===pi?Wn():K=10)}function Yt(pi){'"'===pi&&(K=11)}function ln(pi){"'"===pi&&(K=11)}function $n(pi){uv.test(pi)?K=4:">"===pi?ai():"<"===pi&&Wn()}function nn(pi){uv.test(pi)?K=4:"/"===pi?K=12:">"===pi?ai():"<"===pi?Wn():(K=4,function lo(){P--}())}function Jn(pi){">"===pi?(ue=new rg((0,Gt.pi)((0,Gt.pi)({},ue),{isClosing:!0})),ai()):K=4}function Zr(pi){"-"===pi?K=15:">"===pi?Cr():K=16}function $r(pi){"-"===pi?K=18:">"===pi?Cr():K=16}function ui(pi){"-"===pi&&(K=17)}function gi(pi){K="-"===pi?18:16}function Un(pi){">"===pi?ai():"!"===pi?K=19:"-"===pi||(K=16)}function lr(pi){"-"===pi?K=17:">"===pi?ai():K=16}function ar(pi){">"===pi?ai():"<"===pi&&Wn()}function Cr(){K=0,ue=O}function Wn(){K=1,ue=new rg({idx:P})}function ai(){var pi=t.slice(oe,ue.idx);pi&&l(pi,oe),"comment"===ue.type?_(ue.idx):"doctype"===ue.type?v(ue.idx):(ue.isOpening&&n(ue.name,ue.idx),ue.isClosing&&o(ue.name,ue.idx)),Cr(),oe=P+1}function Yi(){return t.slice(ue.idx+(ue.isClosing?2:1),P).toLowerCase()}oe<P&&function ho(){var pi=t.slice(oe,P);l(pi,oe),oe=P+1}()}(i,{onOpenTag:function(v){o.indexOf(v)>=0&&l++},onText:function(v,O){if(0===l){var G=function n8(t,i){if(!i.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var l,n=[],o=0;l=i.exec(t);)n.push(t.substring(o,l.index)),n.push(l[0]),o=l.index+l[0].length;return n.push(t.substring(o)),n}(v,/(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi),K=O;G.forEach(function(oe,ue){if(ue%2==0){var pe=n.parseText(oe,K);_.push.apply(_,pe)}K+=oe.length})}},onCloseTag:function(v){o.indexOf(v)>=0&&(l=Math.max(l-1,0))},onComment:function(v){},onDoctype:function(v){}}),_=this.compactMatches(_),_=this.removeUnwantedMatches(_)},t.prototype.compactMatches=function(i){i.sort(function(P,G){return P.getOffset()-G.getOffset()});for(var n=0;n<i.length-1;){var o=i[n],l=o.getOffset(),_=o.getMatchedText().length,v=l+_;if(n+1<i.length){if(i[n+1].getOffset()===l){var O=i[n+1].getMatchedText().length>_?n:n+1;i.splice(O,1);continue}if(i[n+1].getOffset()<v){i.splice(n+1,1);continue}}n++}return i},t.prototype.removeUnwantedMatches=function(i){return this.hashtag||lv(i,function(n){return"hashtag"===n.getType()}),this.email||lv(i,function(n){return"email"===n.getType()}),this.phone||lv(i,function(n){return"phone"===n.getType()}),this.mention||lv(i,function(n){return"mention"===n.getType()}),this.urls.schemeMatches||lv(i,function(n){return"url"===n.getType()&&"scheme"===n.getUrlMatchType()}),this.urls.wwwMatches||lv(i,function(n){return"url"===n.getType()&&"www"===n.getUrlMatchType()}),this.urls.tldMatches||lv(i,function(n){return"url"===n.getType()&&"tld"===n.getUrlMatchType()}),i},t.prototype.parseText=function(i,n){void 0===n&&(n=0),n=n||0;for(var o=this.getMatchers(),l=[],_=0,v=o.length;_<v;_++){for(var O=o[_].parseMatches(i),P=0,G=O.length;P<G;P++)O[P].setOffset(n+O[P].getOffset());l.push.apply(l,O)}return l},t.prototype.link=function(i){if(!i)return"";this.sanitizeHtml&&(i=i.replace(/</g,"&lt;").replace(/>/g,"&gt;"));for(var n=this.parse(i),o=[],l=0,_=0,v=n.length;_<v;_++){var O=n[_];o.push(i.substring(l,O.getOffset())),o.push(this.createMatchReturnVal(O)),l=O.getOffset()+O.getMatchedText().length}return o.push(i.substring(l)),o.join("")},t.prototype.createMatchReturnVal=function(i){var n;return this.replaceFn&&(n=this.replaceFn.call(this.context,i)),"string"==typeof n?n:!1===n?i.getMatchedText():n instanceof pA?n.toAnchorString():i.buildTag().toAnchorString()},t.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var i=this.getTagBuilder(),n=[new P3({tagBuilder:i,serviceName:this.hashtag}),new R3({tagBuilder:i}),new N3({tagBuilder:i}),new I3({tagBuilder:i,serviceName:this.mention}),new x3({tagBuilder:i,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=n},t.prototype.getTagBuilder=function(){var i=this.tagBuilder;return i||(i=this.tagBuilder=new y3({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),i},t.version="3.16.2",t.AnchorTagBuilder=y3,t.HtmlTag=pA,t.matcher={Email:R3,Hashtag:P3,Matcher:M0,Mention:I3,Phone:N3,Url:x3},t.match={Email:E3,Hashtag:S3,Match:C0,Mention:b3,Phone:T3,Url:C3},t}();const x8=R8;var w8=/www|@|\:\/\//;function P8(t){return/^<a[>\s]/i.test(t)}function N8(t){return/^<\/a\s*>/i.test(t)}function I8(){var t=[],i=new x8({stripPrefix:!1,url:!0,email:!0,replaceFn:function(n){switch(n.getType()){case"url":t.push({text:n.matchedText,url:n.getUrl()});break;case"email":t.push({text:n.matchedText,url:"mailto:"+n.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:t,autolinker:i}}function F8(t){var i,n,o,l,_,v,O,P,G,K,oe,ye,Ue,ue=t.tokens,pe=null;for(n=0,o=ue.length;n<o;n++)if("inline"===ue[n].type)for(oe=0,i=(l=ue[n].children).length-1;i>=0;i--)if("link_close"!==(_=l[i]).type){if("htmltag"===_.type&&(P8(_.content)&&oe>0&&oe--,N8(_.content)&&oe++),!(oe>0)&&"text"===_.type&&w8.test(_.content)){if(pe||(ye=(pe=I8()).links,Ue=pe.autolinker),v=_.content,ye.length=0,Ue.link(v),!ye.length)continue;for(O=[],K=_.level,P=0;P<ye.length;P++)t.inline.validateLink(ye[P].url)&&((G=v.indexOf(ye[P].text))&&O.push({type:"text",content:v.slice(0,G),level:K}),O.push({type:"link_open",href:ye[P].url,title:"",level:K++}),O.push({type:"text",content:ye[P].text,level:K}),O.push({type:"link_close",level:--K}),v=v.slice(G+ye[P].text.length));v.length&&O.push({type:"text",content:v,level:K}),ue[n].children=l=[].concat(l.slice(0,i),O,l.slice(i+1))}}else for(i--;l[i].level!==_.level&&"link_open"!==l[i].type;)i--}function L8(t){t.core.ruler.push("linkify",F8)}var k8=s(23358),$8=s.n(k8),H8=s(1653),U8=s.n(H8),B8=s(86101),G8=s.n(B8),gA=s(91700);function F3(t){if(gA(t))return t}var cv=s(65861),vA=s(70589),L3=s(73875);function k3(t){if(typeof cv<"u"&&null!=vA(t)||null!=t["@@iterator"])return L3(t)}var Y8=s(46815);function yA(t,i){(null==i||i>t.length)&&(i=t.length);for(var n=0,o=new Array(i);n<i;n++)o[n]=t[n];return o}function uC(t,i){var n;if(t){if("string"==typeof t)return yA(t,i);var o=Y8(n=Object.prototype.toString.call(t)).call(n,8,-1);if("Object"===o&&t.constructor&&(o=t.constructor.name),"Map"===o||"Set"===o)return L3(t);if("Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return yA(t,i)}}function $3(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function j8(t){return F3(t)||k3(t)||uC(t)||$3()}var z8=s(53757),V8=s.n(z8),Z8=s(48129),W8=s.n(Z8),J8=s(31507),Q8=s.n(J8),K8=s(17346),X8=s.n(K8),q8=s(12232),eI=s.n(q8),H3=s(49745);function U3(t,i,n,o,l,_,v){try{var O=t[_](v),P=O.value}catch(G){return void n(G)}O.done?i(P):H3.resolve(P).then(o,l)}function tI(t){return function(){var i=this,n=arguments;return new H3(function(o,l){var _=t.apply(i,n);function v(P){U3(_,o,l,v,O,"next",P)}function O(P){U3(_,o,l,v,O,"throw",P)}v(void 0)})}}var nI=s(33950),rI=s.n(nI),iI=s(86413),oI=s.n(iI),sI=s(14226),aI=s.n(sI),lI=s(64871),uI=s.n(lI),cI=s(41776),dI=s.n(cI),fI=s(12666),pI=s.n(fI),mm=s(8239);const B3="application/json, application/yaml",EA="https://swagger.io";function G3(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{requestInterceptor:n,responseInterceptor:o}=i,l=t.withCredentials?"include":"same-origin";return _=>t({url:_,loadSpec:!0,requestInterceptor:n,responseInterceptor:o,headers:{Accept:B3},credentials:l}).then(v=>v.body)}var _I=s(79257),SA=s.n(_I);function Y3(t){return typeof t>"u"||null===t}var vp={isNothing:Y3,isObject:function hI(t){return"object"==typeof t&&null!==t},toArray:function mI(t){return Array.isArray(t)?t:Y3(t)?[]:[t]},repeat:function vI(t,i){var o,n="";for(o=0;o<i;o+=1)n+=t;return n},isNegativeZero:function yI(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function gI(t,i){var n,o,l,_;if(i)for(n=0,o=(_=Object.keys(i)).length;n<o;n+=1)t[l=_[n]]=i[l];return t}};function j3(t,i){var n="",o=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!i&&t.mark.snippet&&(n+="\n\n"+t.mark.snippet),o+" "+n):o}function BE(t,i){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=i,this.message=j3(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}(BE.prototype=Object.create(Error.prototype)).constructor=BE,BE.prototype.toString=function(i){return this.name+": "+j3(this,i)};var U_=BE;function bA(t,i,n,o,l){var _="",v="",O=Math.floor(l/2)-1;return o-i>O&&(i=o-O+(_=" ... ").length),n-o>O&&(n=o+O-(v=" ...").length),{str:_+t.slice(i,n).replace(/\t/g,"\u2192")+v,pos:o-i+_.length}}function TA(t,i){return vp.repeat(" ",i-t.length)+t}var AI=function OI(t,i){if(i=Object.create(i||null),!t.buffer)return null;i.maxLength||(i.maxLength=79),"number"!=typeof i.indent&&(i.indent=1),"number"!=typeof i.linesBefore&&(i.linesBefore=3),"number"!=typeof i.linesAfter&&(i.linesAfter=2);for(var _,n=/\r?\n|\r|\0/g,o=[0],l=[],v=-1;_=n.exec(t.buffer);)l.push(_.index),o.push(_.index+_[0].length),t.position<=_.index&&v<0&&(v=o.length-2);v<0&&(v=o.length-1);var P,G,O="",K=Math.min(t.line+i.linesAfter,l.length).toString().length,oe=i.maxLength-(i.indent+K+3);for(P=1;P<=i.linesBefore&&!(v-P<0);P++)G=bA(t.buffer,o[v-P],l[v-P],t.position-(o[v]-o[v-P]),oe),O=vp.repeat(" ",i.indent)+TA((t.line-P+1).toString(),K)+" | "+G.str+"\n"+O;for(G=bA(t.buffer,o[v],l[v],t.position,oe),O+=vp.repeat(" ",i.indent)+TA((t.line+1).toString(),K)+" | "+G.str+"\n",O+=vp.repeat("-",i.indent+K+3+G.pos)+"^\n",P=1;P<=i.linesAfter&&!(v+P>=l.length);P++)G=bA(t.buffer,o[v+P],l[v+P],t.position-(o[v]-o[v+P]),oe),O+=vp.repeat(" ",i.indent)+TA((t.line+P+1).toString(),K)+" | "+G.str+"\n";return O.replace(/\n$/,"")},DI=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],RI=["scalar","sequence","mapping"],qp=function wI(t,i){if(i=i||{},Object.keys(i).forEach(function(n){if(-1===DI.indexOf(n))throw new U_('Unknown option "'+n+'" is met in definition of "'+t+'" YAML type.')}),this.options=i,this.tag=t,this.kind=i.kind||null,this.resolve=i.resolve||function(){return!0},this.construct=i.construct||function(n){return n},this.instanceOf=i.instanceOf||null,this.predicate=i.predicate||null,this.represent=i.represent||null,this.representName=i.representName||null,this.defaultStyle=i.defaultStyle||null,this.multi=i.multi||!1,this.styleAliases=function xI(t){var i={};return null!==t&&Object.keys(t).forEach(function(n){t[n].forEach(function(o){i[String(o)]=n})}),i}(i.styleAliases||null),-1===RI.indexOf(this.kind))throw new U_('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function z3(t,i){var n=[];return t[i].forEach(function(o){var l=n.length;n.forEach(function(_,v){_.tag===o.tag&&_.kind===o.kind&&_.multi===o.multi&&(l=v)}),n[l]=o}),n}function CA(t){return this.extend(t)}CA.prototype.extend=function(i){var n=[],o=[];if(i instanceof qp)o.push(i);else if(Array.isArray(i))o=o.concat(i);else{if(!i||!Array.isArray(i.implicit)&&!Array.isArray(i.explicit))throw new U_("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");i.implicit&&(n=n.concat(i.implicit)),i.explicit&&(o=o.concat(i.explicit))}n.forEach(function(_){if(!(_ instanceof qp))throw new U_("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(_.loadKind&&"scalar"!==_.loadKind)throw new U_("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(_.multi)throw new U_("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),o.forEach(function(_){if(!(_ instanceof qp))throw new U_("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var l=Object.create(CA.prototype);return l.implicit=(this.implicit||[]).concat(n),l.explicit=(this.explicit||[]).concat(o),l.compiledImplicit=z3(l,"implicit"),l.compiledExplicit=z3(l,"explicit"),l.compiledTypeMap=function PI(){var i,n,t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function o(l){l.multi?(t.multi[l.kind].push(l),t.multi.fallback.push(l)):t[l.kind][l.tag]=t.fallback[l.tag]=l}for(i=0,n=arguments.length;i<n;i+=1)arguments[i].forEach(o);return t}(l.compiledImplicit,l.compiledExplicit),l};var V3=CA,Z3=new qp("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),W3=new qp("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),J3=new qp("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}}),Q3=new V3({explicit:[Z3,W3,J3]}),K3=new qp("tag:yaml.org,2002:null",{kind:"scalar",resolve:function NI(t){if(null===t)return!0;var i=t.length;return 1===i&&"~"===t||4===i&&("null"===t||"Null"===t||"NULL"===t)},construct:function II(){return null},predicate:function FI(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"}),X3=new qp("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function LI(t){if(null===t)return!1;var i=t.length;return 4===i&&("true"===t||"True"===t||"TRUE"===t)||5===i&&("false"===t||"False"===t||"FALSE"===t)},construct:function kI(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function $I(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function HI(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function UI(t){return 48<=t&&t<=55}function BI(t){return 48<=t&&t<=57}var q3=new qp("tag:yaml.org,2002:int",{kind:"scalar",resolve:function GI(t){if(null===t)return!1;var l,i=t.length,n=0,o=!1;if(!i)return!1;if(("-"===(l=t[n])||"+"===l)&&(l=t[++n]),"0"===l){if(n+1===i)return!0;if("b"===(l=t[++n])){for(n++;n<i;n++)if("_"!==(l=t[n])){if("0"!==l&&"1"!==l)return!1;o=!0}return o&&"_"!==l}if("x"===l){for(n++;n<i;n++)if("_"!==(l=t[n])){if(!HI(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==l}if("o"===l){for(n++;n<i;n++)if("_"!==(l=t[n])){if(!UI(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==l}}if("_"===l)return!1;for(;n<i;n++)if("_"!==(l=t[n])){if(!BI(t.charCodeAt(n)))return!1;o=!0}return!(!o||"_"===l)},construct:function YI(t){var o,i=t,n=1;if(-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),("-"===(o=i[0])||"+"===o)&&("-"===o&&(n=-1),o=(i=i.slice(1))[0]),"0"===i)return 0;if("0"===o){if("b"===i[1])return n*parseInt(i.slice(2),2);if("x"===i[1])return n*parseInt(i.slice(2),16);if("o"===i[1])return n*parseInt(i.slice(2),8)}return n*parseInt(i,10)},predicate:function jI(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!vp.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),zI=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),WI=/^[-+]?[0-9]+e/,ex=new qp("tag:yaml.org,2002:float",{kind:"scalar",resolve:function VI(t){return!(null===t||!zI.test(t)||"_"===t[t.length-1])},construct:function ZI(t){var i,n;return n="-"===(i=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(i[0])>=0&&(i=i.slice(1)),".inf"===i?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===i?NaN:n*parseFloat(i,10)},predicate:function QI(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||vp.isNegativeZero(t))},represent:function JI(t,i){var n;if(isNaN(t))switch(i){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(i){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(i){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(vp.isNegativeZero(t))return"-0.0";return n=t.toString(10),WI.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),tx=Q3.extend({implicit:[K3,X3,q3,ex]}),nx=tx,rx=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),ix=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"),ox=new qp("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function KI(t){return null!==t&&(null!==rx.exec(t)||null!==ix.exec(t))},construct:function XI(t){var i,n,o,l,_,v,O,ue,P=0,G=null;if(null===(i=rx.exec(t))&&(i=ix.exec(t)),null===i)throw new Error("Date resolve error");if(n=+i[1],o=+i[2]-1,l=+i[3],!i[4])return new Date(Date.UTC(n,o,l));if(_=+i[4],v=+i[5],O=+i[6],i[7]){for(P=i[7].slice(0,3);P.length<3;)P+="0";P=+P}return i[9]&&(G=6e4*(60*+i[10]+ +(i[11]||0)),"-"===i[9]&&(G=-G)),ue=new Date(Date.UTC(n,o,l,_,v,O,P)),G&&ue.setTime(ue.getTime()-G),ue},instanceOf:Date,represent:function qI(t){return t.toISOString()}}),sx=new qp("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function eF(t){return"<<"===t||null===t}}),MA="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r",ax=new qp("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function tF(t){if(null===t)return!1;var i,n,o=0,l=t.length,_=MA;for(n=0;n<l;n++)if(!((i=_.indexOf(t.charAt(n)))>64)){if(i<0)return!1;o+=6}return o%8==0},construct:function nF(t){var i,n,o=t.replace(/[\r\n=]/g,""),l=o.length,_=MA,v=0,O=[];for(i=0;i<l;i++)i%4==0&&i&&(O.push(v>>16&255),O.push(v>>8&255),O.push(255&v)),v=v<<6|_.indexOf(o.charAt(i));return 0==(n=l%4*6)?(O.push(v>>16&255),O.push(v>>8&255),O.push(255&v)):18===n?(O.push(v>>10&255),O.push(v>>2&255)):12===n&&O.push(v>>4&255),new Uint8Array(O)},predicate:function iF(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function rF(t){var o,l,i="",n=0,_=t.length,v=MA;for(o=0;o<_;o++)o%3==0&&o&&(i+=v[n>>18&63],i+=v[n>>12&63],i+=v[n>>6&63],i+=v[63&n]),n=(n<<8)+t[o];return 0==(l=_%3)?(i+=v[n>>18&63],i+=v[n>>12&63],i+=v[n>>6&63],i+=v[63&n]):2===l?(i+=v[n>>10&63],i+=v[n>>4&63],i+=v[n<<2&63],i+=v[64]):1===l&&(i+=v[n>>2&63],i+=v[n<<4&63],i+=v[64],i+=v[64]),i}}),oF=Object.prototype.hasOwnProperty,sF=Object.prototype.toString,lx=new qp("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function aF(t){if(null===t)return!0;var n,o,l,_,v,i=[],O=t;for(n=0,o=O.length;n<o;n+=1){if(v=!1,"[object Object]"!==sF.call(l=O[n]))return!1;for(_ in l)if(oF.call(l,_)){if(v)return!1;v=!0}if(!v)return!1;if(-1!==i.indexOf(_))return!1;i.push(_)}return!0},construct:function lF(t){return null!==t?t:[]}}),uF=Object.prototype.toString,ux=new qp("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function cF(t){if(null===t)return!0;var i,n,o,l,_,v=t;for(_=new Array(v.length),i=0,n=v.length;i<n;i+=1){if("[object Object]"!==uF.call(o=v[i])||1!==(l=Object.keys(o)).length)return!1;_[i]=[l[0],o[l[0]]]}return!0},construct:function dF(t){if(null===t)return[];var i,n,o,l,_,v=t;for(_=new Array(v.length),i=0,n=v.length;i<n;i+=1)o=v[i],l=Object.keys(o),_[i]=[l[0],o[l[0]]];return _}}),fF=Object.prototype.hasOwnProperty,cx=new qp("tag:yaml.org,2002:set",{kind:"mapping",resolve:function pF(t){if(null===t)return!0;var i,n=t;for(i in n)if(fF.call(n,i)&&null!==n[i])return!1;return!0},construct:function _F(t){return null!==t?t:{}}}),OA=nx.extend({implicit:[ox,sx],explicit:[ax,lx,ux,cx]}),d1=Object.prototype.hasOwnProperty,cC=1,dx=2,fx=3,dC=4,AA=1,hF=2,px=3,mF=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,gF=/[\x85\u2028\u2029]/,vF=/[,\[\]\{\}]/,_x=/^(?:!|!!|![a-z\-]+!)$/i,hx=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function mx(t){return Object.prototype.toString.call(t)}function ig(t){return 10===t||13===t}function dv(t){return 9===t||32===t}function vh(t){return 9===t||32===t||10===t||13===t}function O0(t){return 44===t||91===t||93===t||123===t||125===t}function yF(t){var i;return 48<=t&&t<=57?t-48:97<=(i=32|t)&&i<=102?i-97+10:-1}function EF(t){return 120===t?2:117===t?4:85===t?8:0}function SF(t){return 48<=t&&t<=57?t-48:-1}function gx(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function bF(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var vx=new Array(256),yx=new Array(256),A0=0;A0<256;A0++)vx[A0]=gx(A0)?1:0,yx[A0]=gx(A0);function TF(t,i){this.input=t,this.filename=i.filename||null,this.schema=i.schema||OA,this.onWarning=i.onWarning||null,this.legacy=i.legacy||!1,this.json=i.json||!1,this.listener=i.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Ex(t,i){var n={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return n.snippet=AI(n),new U_(i,n)}function ul(t,i){throw Ex(t,i)}function fC(t,i){t.onWarning&&t.onWarning.call(null,Ex(t,i))}var Sx={YAML:function(i,n,o){var l,_,v;null!==i.version&&ul(i,"duplication of %YAML directive"),1!==o.length&&ul(i,"YAML directive accepts exactly one argument"),null===(l=/^([0-9]+)\.([0-9]+)$/.exec(o[0]))&&ul(i,"ill-formed argument of the YAML directive"),_=parseInt(l[1],10),v=parseInt(l[2],10),1!==_&&ul(i,"unacceptable YAML version of the document"),i.version=o[0],i.checkLineBreaks=v<2,1!==v&&2!==v&&fC(i,"unsupported YAML version of the document")},TAG:function(i,n,o){var l,_;2!==o.length&&ul(i,"TAG directive accepts exactly two arguments"),_=o[1],_x.test(l=o[0])||ul(i,"ill-formed tag handle (first argument) of the TAG directive"),d1.call(i.tagMap,l)&&ul(i,'there is a previously declared suffix for "'+l+'" tag handle'),hx.test(_)||ul(i,"ill-formed tag prefix (second argument) of the TAG directive");try{_=decodeURIComponent(_)}catch{ul(i,"tag prefix is malformed: "+_)}i.tagMap[l]=_}};function f1(t,i,n,o){var l,_,v,O;if(i<n){if(O=t.input.slice(i,n),o)for(l=0,_=O.length;l<_;l+=1)9===(v=O.charCodeAt(l))||32<=v&&v<=1114111||ul(t,"expected valid JSON character");else mF.test(O)&&ul(t,"the stream contains non-printable characters");t.result+=O}}function bx(t,i,n,o){var l,_,v,O;for(vp.isObject(n)||ul(t,"cannot merge mappings; the provided source object is unacceptable"),v=0,O=(l=Object.keys(n)).length;v<O;v+=1)d1.call(i,_=l[v])||(i[_]=n[_],o[_]=!0)}function D0(t,i,n,o,l,_,v,O,P){var G,K;if(Array.isArray(l))for(G=0,K=(l=Array.prototype.slice.call(l)).length;G<K;G+=1)Array.isArray(l[G])&&ul(t,"nested arrays are not supported inside keys"),"object"==typeof l&&"[object Object]"===mx(l[G])&&(l[G]="[object Object]");if("object"==typeof l&&"[object Object]"===mx(l)&&(l="[object Object]"),l=String(l),null===i&&(i={}),"tag:yaml.org,2002:merge"===o)if(Array.isArray(_))for(G=0,K=_.length;G<K;G+=1)bx(t,i,_[G],n);else bx(t,i,_,n);else!t.json&&!d1.call(n,l)&&d1.call(i,l)&&(t.line=v||t.line,t.lineStart=O||t.lineStart,t.position=P||t.position,ul(t,"duplicated mapping key")),"__proto__"===l?Object.defineProperty(i,l,{configurable:!0,enumerable:!0,writable:!0,value:_}):i[l]=_,delete n[l];return i}function DA(t){var i;10===(i=t.input.charCodeAt(t.position))?t.position++:13===i?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):ul(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function ep(t,i,n){for(var o=0,l=t.input.charCodeAt(t.position);0!==l;){for(;dv(l);)9===l&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),l=t.input.charCodeAt(++t.position);if(i&&35===l)do{l=t.input.charCodeAt(++t.position)}while(10!==l&&13!==l&&0!==l);if(!ig(l))break;for(DA(t),l=t.input.charCodeAt(t.position),o++,t.lineIndent=0;32===l;)t.lineIndent++,l=t.input.charCodeAt(++t.position)}return-1!==n&&0!==o&&t.lineIndent<n&&fC(t,"deficient indentation"),o}function pC(t){var n,i=t.position;return!(45!==(n=t.input.charCodeAt(i))&&46!==n||n!==t.input.charCodeAt(i+1)||n!==t.input.charCodeAt(i+2)||(i+=3,n=t.input.charCodeAt(i),0!==n&&!vh(n)))}function RA(t,i){1===i?t.result+=" ":i>1&&(t.result+=vp.repeat("\n",i-1))}function Tx(t,i){var n,P,o=t.tag,l=t.anchor,_=[],O=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=_),P=t.input.charCodeAt(t.position);0!==P&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,ul(t,"tab characters must not be used in indentation")),45===P&&vh(t.input.charCodeAt(t.position+1)));)if(O=!0,t.position++,ep(t,!0,-1)&&t.lineIndent<=i)_.push(null),P=t.input.charCodeAt(t.position);else if(n=t.line,R0(t,i,fx,!1,!0),_.push(t.result),ep(t,!0,-1),P=t.input.charCodeAt(t.position),(t.line===n||t.lineIndent>i)&&0!==P)ul(t,"bad indentation of a sequence entry");else if(t.lineIndent<i)break;return!!O&&(t.tag=o,t.anchor=l,t.kind="sequence",t.result=_,!0)}function xF(t){var i,l,_,v,n=!1,o=!1;if(33!==(v=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&ul(t,"duplication of a tag property"),60===(v=t.input.charCodeAt(++t.position))?(n=!0,v=t.input.charCodeAt(++t.position)):33===v?(o=!0,l="!!",v=t.input.charCodeAt(++t.position)):l="!",i=t.position,n){do{v=t.input.charCodeAt(++t.position)}while(0!==v&&62!==v);t.position<t.length?(_=t.input.slice(i,t.position),v=t.input.charCodeAt(++t.position)):ul(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==v&&!vh(v);)33===v&&(o?ul(t,"tag suffix cannot contain exclamation marks"):(l=t.input.slice(i-1,t.position+1),_x.test(l)||ul(t,"named tag handle cannot contain such characters"),o=!0,i=t.position+1)),v=t.input.charCodeAt(++t.position);_=t.input.slice(i,t.position),vF.test(_)&&ul(t,"tag suffix cannot contain flow indicator characters")}_&&!hx.test(_)&&ul(t,"tag name cannot contain such characters: "+_);try{_=decodeURIComponent(_)}catch{ul(t,"tag name is malformed: "+_)}return n?t.tag=_:d1.call(t.tagMap,l)?t.tag=t.tagMap[l]+_:"!"===l?t.tag="!"+_:"!!"===l?t.tag="tag:yaml.org,2002:"+_:ul(t,'undeclared tag handle "'+l+'"'),!0}function wF(t){var i,n;if(38!==(n=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&ul(t,"duplication of an anchor property"),n=t.input.charCodeAt(++t.position),i=t.position;0!==n&&!vh(n)&&!O0(n);)n=t.input.charCodeAt(++t.position);return t.position===i&&ul(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(i,t.position),!0}function R0(t,i,n,o,l){var _,v,O,oe,ue,pe,ye,Ue,xe,P=1,G=!1,K=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,_=v=O=dC===n||fx===n,o&&ep(t,!0,-1)&&(G=!0,t.lineIndent>i?P=1:t.lineIndent===i?P=0:t.lineIndent<i&&(P=-1)),1===P)for(;xF(t)||wF(t);)ep(t,!0,-1)?(G=!0,O=_,t.lineIndent>i?P=1:t.lineIndent===i?P=0:t.lineIndent<i&&(P=-1)):O=!1;if(O&&(O=G||l),(1===P||dC===n)&&(Ue=cC===n||dx===n?i:i+1,xe=t.position-t.lineStart,1===P?O&&(Tx(t,xe)||function RF(t,i,n){var o,l,_,v,O,P,we,G=t.tag,K=t.anchor,oe={},ue=Object.create(null),pe=null,ye=null,Ue=null,xe=!1,ke=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=oe),we=t.input.charCodeAt(t.position);0!==we;){if(!xe&&-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,ul(t,"tab characters must not be used in indentation")),o=t.input.charCodeAt(t.position+1),_=t.line,63!==we&&58!==we||!vh(o)){if(v=t.line,O=t.lineStart,P=t.position,!R0(t,n,dx,!1,!0))break;if(t.line===_){for(we=t.input.charCodeAt(t.position);dv(we);)we=t.input.charCodeAt(++t.position);if(58===we)vh(we=t.input.charCodeAt(++t.position))||ul(t,"a whitespace character is expected after the key-value separator within a block mapping"),xe&&(D0(t,oe,ue,pe,ye,null,v,O,P),pe=ye=Ue=null),ke=!0,xe=!1,l=!1,pe=t.tag,ye=t.result;else{if(!ke)return t.tag=G,t.anchor=K,!0;ul(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!ke)return t.tag=G,t.anchor=K,!0;ul(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===we?(xe&&(D0(t,oe,ue,pe,ye,null,v,O,P),pe=ye=Ue=null),ke=!0,xe=!0,l=!0):xe?(xe=!1,l=!0):ul(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,we=o;if((t.line===_||t.lineIndent>i)&&(xe&&(v=t.line,O=t.lineStart,P=t.position),R0(t,i,dC,!0,l)&&(xe?ye=t.result:Ue=t.result),xe||(D0(t,oe,ue,pe,ye,Ue,v,O,P),pe=ye=Ue=null),ep(t,!0,-1),we=t.input.charCodeAt(t.position)),(t.line===_||t.lineIndent>i)&&0!==we)ul(t,"bad indentation of a mapping entry");else if(t.lineIndent<i)break}return xe&&D0(t,oe,ue,pe,ye,null,v,O,P),ke&&(t.tag=G,t.anchor=K,t.kind="mapping",t.result=oe),ke}(t,xe,Ue))||function AF(t,i){var o,l,_,O,K,oe,ue,pe,Ue,xe,ke,we,n=!0,v=t.tag,P=t.anchor,ye=Object.create(null);if(91===(we=t.input.charCodeAt(t.position)))K=93,pe=!1,O=[];else{if(123!==we)return!1;K=125,pe=!0,O={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=O),we=t.input.charCodeAt(++t.position);0!==we;){if(ep(t,!0,i),(we=t.input.charCodeAt(t.position))===K)return t.position++,t.tag=v,t.anchor=P,t.kind=pe?"mapping":"sequence",t.result=O,!0;n?44===we&&ul(t,"expected the node content, but found ','"):ul(t,"missed comma between flow collection entries"),ke=null,oe=ue=!1,63===we&&vh(t.input.charCodeAt(t.position+1))&&(oe=ue=!0,t.position++,ep(t,!0,i)),o=t.line,l=t.lineStart,_=t.position,R0(t,i,cC,!1,!0),xe=t.tag,Ue=t.result,ep(t,!0,i),we=t.input.charCodeAt(t.position),(ue||t.line===o)&&58===we&&(oe=!0,we=t.input.charCodeAt(++t.position),ep(t,!0,i),R0(t,i,cC,!1,!0),ke=t.result),pe?D0(t,O,ye,xe,Ue,ke,o,l,_):O.push(oe?D0(t,null,ye,xe,Ue,ke,o,l,_):Ue),ep(t,!0,i),44===(we=t.input.charCodeAt(t.position))?(n=!0,we=t.input.charCodeAt(++t.position)):n=!1}ul(t,"unexpected end of the stream within a flow collection")}(t,Ue)?K=!0:(v&&function DF(t,i){var n,o,K,oe,l=AA,_=!1,v=!1,O=i,P=0,G=!1;if(124===(oe=t.input.charCodeAt(t.position)))o=!1;else{if(62!==oe)return!1;o=!0}for(t.kind="scalar",t.result="";0!==oe;)if(43===(oe=t.input.charCodeAt(++t.position))||45===oe)AA===l?l=43===oe?px:hF:ul(t,"repeat of a chomping mode identifier");else{if(!((K=SF(oe))>=0))break;0===K?ul(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):v?ul(t,"repeat of an indentation width identifier"):(O=i+K-1,v=!0)}if(dv(oe)){do{oe=t.input.charCodeAt(++t.position)}while(dv(oe));if(35===oe)do{oe=t.input.charCodeAt(++t.position)}while(!ig(oe)&&0!==oe)}for(;0!==oe;){for(DA(t),t.lineIndent=0,oe=t.input.charCodeAt(t.position);(!v||t.lineIndent<O)&&32===oe;)t.lineIndent++,oe=t.input.charCodeAt(++t.position);if(!v&&t.lineIndent>O&&(O=t.lineIndent),ig(oe))P++;else{if(t.lineIndent<O){l===px?t.result+=vp.repeat("\n",_?1+P:P):l===AA&&_&&(t.result+="\n");break}for(o?dv(oe)?(G=!0,t.result+=vp.repeat("\n",_?1+P:P)):G?(G=!1,t.result+=vp.repeat("\n",P+1)):0===P?_&&(t.result+=" "):t.result+=vp.repeat("\n",P):t.result+=vp.repeat("\n",_?1+P:P),_=!0,v=!0,P=0,n=t.position;!ig(oe)&&0!==oe;)oe=t.input.charCodeAt(++t.position);f1(t,n,t.position,!1)}}return!0}(t,Ue)||function MF(t,i){var n,o,l;if(39!==(n=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,o=l=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(f1(t,o,t.position,!0),39!==(n=t.input.charCodeAt(++t.position)))return!0;o=t.position,t.position++,l=t.position}else ig(n)?(f1(t,o,l,!0),RA(t,ep(t,!1,i)),o=l=t.position):t.position===t.lineStart&&pC(t)?ul(t,"unexpected end of the document within a single quoted scalar"):(t.position++,l=t.position);ul(t,"unexpected end of the stream within a single quoted scalar")}(t,Ue)||function OF(t,i){var n,o,l,_,v,O;if(34!==(O=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=o=t.position;0!==(O=t.input.charCodeAt(t.position));){if(34===O)return f1(t,n,t.position,!0),t.position++,!0;if(92===O){if(f1(t,n,t.position,!0),ig(O=t.input.charCodeAt(++t.position)))ep(t,!1,i);else if(O<256&&vx[O])t.result+=yx[O],t.position++;else if((v=EF(O))>0){for(l=v,_=0;l>0;l--)(v=yF(O=t.input.charCodeAt(++t.position)))>=0?_=(_<<4)+v:ul(t,"expected hexadecimal character");t.result+=bF(_),t.position++}else ul(t,"unknown escape sequence");n=o=t.position}else ig(O)?(f1(t,n,o,!0),RA(t,ep(t,!1,i)),n=o=t.position):t.position===t.lineStart&&pC(t)?ul(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}ul(t,"unexpected end of the stream within a double quoted scalar")}(t,Ue)?K=!0:function PF(t){var i,n,o;if(42!==(o=t.input.charCodeAt(t.position)))return!1;for(o=t.input.charCodeAt(++t.position),i=t.position;0!==o&&!vh(o)&&!O0(o);)o=t.input.charCodeAt(++t.position);return t.position===i&&ul(t,"name of an alias node must contain at least one character"),n=t.input.slice(i,t.position),d1.call(t.anchorMap,n)||ul(t,'unidentified alias "'+n+'"'),t.result=t.anchorMap[n],ep(t,!0,-1),!0}(t)?(K=!0,(null!==t.tag||null!==t.anchor)&&ul(t,"alias node should not have any properties")):function CF(t,i,n){var l,_,v,O,P,G,K,pe,oe=t.kind,ue=t.result;if(vh(pe=t.input.charCodeAt(t.position))||O0(pe)||35===pe||38===pe||42===pe||33===pe||124===pe||62===pe||39===pe||34===pe||37===pe||64===pe||96===pe||(63===pe||45===pe)&&(vh(l=t.input.charCodeAt(t.position+1))||n&&O0(l)))return!1;for(t.kind="scalar",t.result="",_=v=t.position,O=!1;0!==pe;){if(58===pe){if(vh(l=t.input.charCodeAt(t.position+1))||n&&O0(l))break}else if(35===pe){if(vh(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&pC(t)||n&&O0(pe))break;if(ig(pe)){if(P=t.line,G=t.lineStart,K=t.lineIndent,ep(t,!1,-1),t.lineIndent>=i){O=!0,pe=t.input.charCodeAt(t.position);continue}t.position=v,t.line=P,t.lineStart=G,t.lineIndent=K;break}}O&&(f1(t,_,v,!1),RA(t,t.line-P),_=v=t.position,O=!1),dv(pe)||(v=t.position+1),pe=t.input.charCodeAt(++t.position)}return f1(t,_,v,!1),!!t.result||(t.kind=oe,t.result=ue,!1)}(t,Ue,cC===n)&&(K=!0,null===t.tag&&(t.tag="?")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===P&&(K=O&&Tx(t,xe))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&ul(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),oe=0,ue=t.implicitTypes.length;oe<ue;oe+=1)if((ye=t.implicitTypes[oe]).resolve(t.result)){t.result=ye.construct(t.result),t.tag=ye.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(d1.call(t.typeMap[t.kind||"fallback"],t.tag))ye=t.typeMap[t.kind||"fallback"][t.tag];else for(ye=null,oe=0,ue=(pe=t.typeMap.multi[t.kind||"fallback"]).length;oe<ue;oe+=1)if(t.tag.slice(0,pe[oe].tag.length)===pe[oe].tag){ye=pe[oe];break}ye||ul(t,"unknown tag !<"+t.tag+">"),null!==t.result&&ye.kind!==t.kind&&ul(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+ye.kind+'", not "'+t.kind+'"'),ye.resolve(t.result,t.tag)?(t.result=ye.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):ul(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||K}function NF(t){var n,o,l,v,i=t.position,_=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(v=t.input.charCodeAt(t.position))&&(ep(t,!0,-1),v=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==v));){for(_=!0,v=t.input.charCodeAt(++t.position),n=t.position;0!==v&&!vh(v);)v=t.input.charCodeAt(++t.position);for(l=[],(o=t.input.slice(n,t.position)).length<1&&ul(t,"directive name must not be less than one character in length");0!==v;){for(;dv(v);)v=t.input.charCodeAt(++t.position);if(35===v){do{v=t.input.charCodeAt(++t.position)}while(0!==v&&!ig(v));break}if(ig(v))break;for(n=t.position;0!==v&&!vh(v);)v=t.input.charCodeAt(++t.position);l.push(t.input.slice(n,t.position))}0!==v&&DA(t),d1.call(Sx,o)?Sx[o](t,o,l):fC(t,'unknown document directive "'+o+'"')}ep(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,ep(t,!0,-1)):_&&ul(t,"directives end mark is expected"),R0(t,t.lineIndent-1,dC,!1,!0),ep(t,!0,-1),t.checkLineBreaks&&gF.test(t.input.slice(i,t.position))&&fC(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&pC(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,ep(t,!0,-1)):t.position<t.length-1&&ul(t,"end of the stream or a document separator is expected")}function Cx(t,i){i=i||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var n=new TF(t,i),o=t.indexOf("\0");for(-1!==o&&(n.position=o,ul(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)NF(n);return n.documents}var Mx={loadAll:function IF(t,i,n){null!==i&&"object"==typeof i&&typeof n>"u"&&(n=i,i=null);var o=Cx(t,n);if("function"!=typeof i)return o;for(var l=0,_=o.length;l<_;l+=1)i(o[l])},load:function FF(t,i){var n=Cx(t,i);if(0!==n.length){if(1===n.length)return n[0];throw new U_("expected a single document in the stream, but found more")}}},Ox=Object.prototype.toString,Ax=Object.prototype.hasOwnProperty,xA=65279,$F=9,GE=10,HF=13,UF=32,BF=33,GF=34,wA=35,YF=37,jF=38,zF=39,VF=42,Dx=44,ZF=45,_C=58,WF=61,JF=62,QF=63,KF=64,Rx=91,xx=93,XF=96,wx=123,qF=124,Px=125,y_={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},e4=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],t4=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function r4(t){var i,n,o;if(i=t.toString(16).toUpperCase(),t<=255)n="x",o=2;else if(t<=65535)n="u",o=4;else{if(!(t<=4294967295))throw new U_("code point within a string may not be greater than 0xFFFFFFFF");n="U",o=8}return"\\"+n+vp.repeat("0",o-i.length)+i}var i4=1,YE=2;function o4(t){this.schema=t.schema||OA,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=vp.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=function n4(t,i){var n,o,l,_,v,O,P;if(null===i)return{};for(n={},l=0,_=(o=Object.keys(i)).length;l<_;l+=1)v=o[l],O=String(i[v]),"!!"===v.slice(0,2)&&(v="tag:yaml.org,2002:"+v.slice(2)),(P=t.compiledTypeMap.fallback[v])&&Ax.call(P.styleAliases,O)&&(O=P.styleAliases[O]),n[v]=O;return n}(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType='"'===t.quotingType?YE:i4,this.forceQuotes=t.forceQuotes||!1,this.replacer="function"==typeof t.replacer?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function Nx(t,i){for(var v,n=vp.repeat(" ",i),o=0,l=-1,_="",O=t.length;o<O;)-1===(l=t.indexOf("\n",o))?(v=t.slice(o),o=O):(v=t.slice(o,l+1),o=l+1),v.length&&"\n"!==v&&(_+=n),_+=v;return _}function PA(t,i){return"\n"+vp.repeat(" ",t.indent*i)}function hC(t){return t===UF||t===$F}function jE(t){return 32<=t&&t<=126||161<=t&&t<=55295&&8232!==t&&8233!==t||57344<=t&&t<=65533&&t!==xA||65536<=t&&t<=1114111}function Ix(t){return jE(t)&&t!==xA&&t!==HF&&t!==GE}function Fx(t,i,n){var o=Ix(t),l=o&&!hC(t);return(n?o:o&&t!==Dx&&t!==Rx&&t!==xx&&t!==wx&&t!==Px)&&t!==wA&&!(i===_C&&!l)||Ix(i)&&!hC(i)&&t===wA||i===_C&&l}function zE(t,i){var o,n=t.charCodeAt(i);return n>=55296&&n<=56319&&i+1<t.length&&(o=t.charCodeAt(i+1))>=56320&&o<=57343?1024*(n-55296)+o-56320+65536:n}function Lx(t){return/^\n* /.test(t)}var kx=1,NA=2,$x=3,Hx=4,x0=5;function c4(t,i,n,o,l){t.dump=function(){if(0===i.length)return t.quotingType===YE?'""':"''";if(!t.noCompatMode&&(-1!==e4.indexOf(i)||t4.test(i)))return t.quotingType===YE?'"'+i+'"':"'"+i+"'";var _=t.indent*Math.max(1,n),v=-1===t.lineWidth?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-_);switch(function u4(t,i,n,o,l,_,v,O){var P,G=0,K=null,oe=!1,ue=!1,pe=-1!==o,ye=-1,Ue=function a4(t){return jE(t)&&t!==xA&&!hC(t)&&t!==ZF&&t!==QF&&t!==_C&&t!==Dx&&t!==Rx&&t!==xx&&t!==wx&&t!==Px&&t!==wA&&t!==jF&&t!==VF&&t!==BF&&t!==qF&&t!==WF&&t!==JF&&t!==zF&&t!==GF&&t!==YF&&t!==KF&&t!==XF}(zE(t,0))&&function l4(t){return!hC(t)&&t!==_C}(zE(t,t.length-1));if(i||v)for(P=0;P<t.length;G>=65536?P+=2:P++){if(!jE(G=zE(t,P)))return x0;Ue=Ue&&Fx(G,K,O),K=G}else{for(P=0;P<t.length;G>=65536?P+=2:P++){if((G=zE(t,P))===GE)oe=!0,pe&&(ue=ue||P-ye-1>o&&" "!==t[ye+1],ye=P);else if(!jE(G))return x0;Ue=Ue&&Fx(G,K,O),K=G}ue=ue||pe&&P-ye-1>o&&" "!==t[ye+1]}return oe||ue?n>9&&Lx(t)?x0:v?_===YE?x0:NA:ue?Hx:$x:!Ue||v||l(t)?_===YE?x0:NA:kx}(i,o||t.flowLevel>-1&&n>=t.flowLevel,t.indent,v,function P(G){return function s4(t,i){var n,o;for(n=0,o=t.implicitTypes.length;n<o;n+=1)if(t.implicitTypes[n].resolve(i))return!0;return!1}(t,G)},t.quotingType,t.forceQuotes&&!o,l)){case kx:return i;case NA:return"'"+i.replace(/'/g,"''")+"'";case $x:return"|"+Ux(i,t.indent)+Bx(Nx(i,_));case Hx:return">"+Ux(i,t.indent)+Bx(Nx(function d4(t,i){for(var _,v,n=/(\n+)([^\n]*)/g,o=(G=void 0,G=t.indexOf("\n"),n.lastIndex=G=-1!==G?G:t.length,Gx(t.slice(0,G),i)),l="\n"===t[0]||" "===t[0];v=n.exec(t);){var P=v[2];_=" "===P[0],o+=v[1]+(l||_||""===P?"":"\n")+Gx(P,i),l=_}var G;return o}(i,v),_));case x0:return'"'+function f4(t){for(var o,i="",n=0,l=0;l<t.length;n>=65536?l+=2:l++)n=zE(t,l),!(o=y_[n])&&jE(n)?(i+=t[l],n>=65536&&(i+=t[l+1])):i+=o||r4(n);return i}(i)+'"';default:throw new U_("impossible error: invalid scalar style")}}()}function Ux(t,i){var n=Lx(t)?String(i):"",o="\n"===t[t.length-1];return n+(!o||"\n"!==t[t.length-2]&&"\n"!==t?o?"":"-":"+")+"\n"}function Bx(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function Gx(t,i){if(""===t||" "===t[0])return t;for(var o,_,n=/ [^ ]/g,l=0,v=0,O=0,P="";o=n.exec(t);)(O=o.index)-l>i&&(P+="\n"+t.slice(l,_=v>l?v:O),l=_+1),v=O;return P+="\n",(P+=t.length-l>i&&v>l?t.slice(l,v)+"\n"+t.slice(v+1):t.slice(l)).slice(1)}function jx(t,i,n){var o,l,_,v,O,P;for(_=0,v=(l=n?t.explicitTypes:t.implicitTypes).length;_<v;_+=1)if(((O=l[_]).instanceOf||O.predicate)&&(!O.instanceOf||"object"==typeof i&&i instanceof O.instanceOf)&&(!O.predicate||O.predicate(i))){if(t.tag=n?O.multi&&O.representName?O.representName(i):O.tag:"?",O.represent){if(P=t.styleMap[O.tag]||O.defaultStyle,"[object Function]"===Ox.call(O.represent))o=O.represent(i,P);else{if(!Ax.call(O.represent,P))throw new U_("!<"+O.tag+'> tag resolver accepts not "'+P+'" style');o=O.represent[P](i,P)}t.dump=o}return!0}return!1}function xg(t,i,n,o,l,_,v){t.tag=null,t.dump=n,jx(t,n,!1)||jx(t,n,!0);var G,O=Ox.call(t.dump),P=o;o&&(o=t.flowLevel<0||t.flowLevel>i);var oe,ue,K="[object Object]"===O||"[object Array]"===O;if(K&&(ue=-1!==(oe=t.duplicates.indexOf(n))),(null!==t.tag&&"?"!==t.tag||ue||2!==t.indent&&i>0)&&(l=!1),ue&&t.usedDuplicates[oe])t.dump="*ref_"+oe;else{if(K&&ue&&!t.usedDuplicates[oe]&&(t.usedDuplicates[oe]=!0),"[object Object]"===O)o&&0!==Object.keys(t.dump).length?(function h4(t,i,n,o){var O,P,G,K,oe,ue,l="",_=t.tag,v=Object.keys(n);if(!0===t.sortKeys)v.sort();else if("function"==typeof t.sortKeys)v.sort(t.sortKeys);else if(t.sortKeys)throw new U_("sortKeys must be a boolean or a function");for(O=0,P=v.length;O<P;O+=1)ue="",(!o||""!==l)&&(ue+=PA(t,i)),K=n[G=v[O]],t.replacer&&(K=t.replacer.call(n,G,K)),xg(t,i+1,G,!0,!0,!0)&&((oe=null!==t.tag&&"?"!==t.tag||t.dump&&t.dump.length>1024)&&(t.dump&&GE===t.dump.charCodeAt(0)?ue+="?":ue+="? "),ue+=t.dump,oe&&(ue+=PA(t,i)),xg(t,i+1,K,!0,oe)&&(t.dump&&GE===t.dump.charCodeAt(0)?ue+=":":ue+=": ",l+=ue+=t.dump));t.tag=_,t.dump=l||"{}"}(t,i,t.dump,l),ue&&(t.dump="&ref_"+oe+t.dump)):(function _4(t,i,n){var v,O,P,G,K,o="",l=t.tag,_=Object.keys(n);for(v=0,O=_.length;v<O;v+=1)K="",""!==o&&(K+=", "),t.condenseFlow&&(K+='"'),G=n[P=_[v]],t.replacer&&(G=t.replacer.call(n,P,G)),xg(t,i,P,!1,!1)&&(t.dump.length>1024&&(K+="? "),K+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),xg(t,i,G,!1,!1)&&(o+=K+=t.dump));t.tag=l,t.dump="{"+o+"}"}(t,i,t.dump),ue&&(t.dump="&ref_"+oe+" "+t.dump));else if("[object Array]"===O)o&&0!==t.dump.length?(function Yx(t,i,n,o){var v,O,P,l="",_=t.tag;for(v=0,O=n.length;v<O;v+=1)P=n[v],t.replacer&&(P=t.replacer.call(n,String(v),P)),(xg(t,i+1,P,!0,!0,!1,!0)||typeof P>"u"&&xg(t,i+1,null,!0,!0,!1,!0))&&((!o||""!==l)&&(l+=PA(t,i)),t.dump&&GE===t.dump.charCodeAt(0)?l+="-":l+="- ",l+=t.dump);t.tag=_,t.dump=l||"[]"}(t,t.noArrayIndent&&!v&&i>0?i-1:i,t.dump,l),ue&&(t.dump="&ref_"+oe+t.dump)):(function p4(t,i,n){var _,v,O,o="",l=t.tag;for(_=0,v=n.length;_<v;_+=1)O=n[_],t.replacer&&(O=t.replacer.call(n,String(_),O)),(xg(t,i,O,!1,!1)||typeof O>"u"&&xg(t,i,null,!1,!1))&&(""!==o&&(o+=","+(t.condenseFlow?"":" ")),o+=t.dump);t.tag=l,t.dump="["+o+"]"}(t,i,t.dump),ue&&(t.dump="&ref_"+oe+" "+t.dump));else{if("[object String]"!==O){if("[object Undefined]"===O)return!1;if(t.skipInvalid)return!1;throw new U_("unacceptable kind of an object to dump "+O)}"?"!==t.tag&&c4(t,t.dump,i,_,P)}null!==t.tag&&"?"!==t.tag&&(G=encodeURI("!"===t.tag[0]?t.tag.slice(1):t.tag).replace(/!/g,"%21"),G="!"===t.tag[0]?"!"+G:"tag:yaml.org,2002:"===G.slice(0,18)?"!!"+G.slice(18):"!<"+G+">",t.dump=G+" "+t.dump)}return!0}function m4(t,i){var l,_,n=[],o=[];for(IA(t,n,o),l=0,_=o.length;l<_;l+=1)i.duplicates.push(n[o[l]]);i.usedDuplicates=new Array(_)}function IA(t,i,n){var o,l,_;if(null!==t&&"object"==typeof t)if(-1!==(l=i.indexOf(t)))-1===n.indexOf(l)&&n.push(l);else if(i.push(t),Array.isArray(t))for(l=0,_=t.length;l<_;l+=1)IA(t[l],i,n);else for(l=0,_=(o=Object.keys(t)).length;l<_;l+=1)IA(t[o[l]],i,n)}function FA(t,i){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+i+" instead, which is now safe by default.")}}const zx={Type:qp,Schema:V3,FAILSAFE_SCHEMA:Q3,JSON_SCHEMA:tx,CORE_SCHEMA:nx,DEFAULT_SCHEMA:OA,load:Mx.load,loadAll:Mx.loadAll,dump:function g4(t,i){var n=new o4(i=i||{});n.noRefs||m4(t,n);var o=t;return n.replacer&&(o=n.replacer.call({"":o},"",o)),xg(n,0,o,!0,!0)?n.dump+"\n":""},YAMLException:U_,types:{binary:ax,float:ex,map:J3,null:K3,pairs:ux,set:cx,timestamp:ox,bool:X3,int:q3,merge:sx,omap:lx,seq:W3,str:Z3},safeLoad:FA("safeLoad","load"),safeLoadAll:FA("safeLoadAll","loadAll"),safeDump:FA("safeDump","dump")},{fetch:F4,Response:L4,Headers:k4,Request:$4,FormData:H4,File:U4,Blob:B4}=globalThis;typeof globalThis.fetch>"u"&&(globalThis.fetch=F4),typeof globalThis.Headers>"u"&&(globalThis.Headers=k4),typeof globalThis.Request>"u"&&(globalThis.Request=$4),typeof globalThis.Response>"u"&&(globalThis.Response=L4),typeof globalThis.FormData>"u"&&(globalThis.FormData=H4),typeof globalThis.File>"u"&&(globalThis.File=U4),typeof globalThis.Blob>"u"&&(globalThis.Blob=B4);const G4=t=>":/?#[]@!$&'()*+,;=".indexOf(t)>-1,Y4=t=>/^[a-z0-9\-._~]+$/i.test(t);function w0(t){let{escape:i}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return"number"==typeof t&&(t=t.toString()),"string"==typeof t&&t.length&&i?n?JSON.parse(t):[...t].map(o=>{if(Y4(o)||G4(o)&&"unsafe"===i)return o;const l=new TextEncoder;return Array.from(l.encode(o)).map(v=>`0${v.toString(16).toUpperCase()}`.slice(-2)).map(v=>`%${v}`).join("")}).join(""):t}function LA(t){const{value:i}=t;return Array.isArray(i)?function j4(t){let{key:i,value:n,style:o,explode:l,escape:_}=t;const v=O=>w0(O,{escape:_});if("simple"===o)return n.map(O=>v(O)).join(",");if("label"===o)return`.${n.map(O=>v(O)).join(".")}`;if("matrix"===o)return n.map(O=>v(O)).reduce((O,P)=>!O||l?`${O||""};${i}=${P}`:`${O},${P}`,"");if("form"===o){const O=l?`&${i}=`:",";return n.map(P=>v(P)).join(O)}if("spaceDelimited"===o){const O=l?`${i}=`:"";return n.map(P=>v(P)).join(` ${O}`)}if("pipeDelimited"===o){const O=l?`${i}=`:"";return n.map(P=>v(P)).join(`|${O}`)}}(t):"object"==typeof i?function z4(t){let{key:i,value:n,style:o,explode:l,escape:_}=t;const v=P=>w0(P,{escape:_}),O=Object.keys(n);return"simple"===o?O.reduce((P,G)=>{const K=v(n[G]);return`${P?`${P},`:""}${G}${l?"=":","}${K}`},""):"label"===o?O.reduce((P,G)=>{const K=v(n[G]);return`${P?`${P}.`:"."}${G}${l?"=":"."}${K}`},""):"matrix"===o&&l?O.reduce((P,G)=>`${P?`${P};`:";"}${G}=${v(n[G])}`,""):"matrix"===o?O.reduce((P,G)=>{const K=v(n[G]);return`${P?`${P},`:`;${i}=`}${G},${K}`},""):"form"===o?O.reduce((P,G)=>{const K=v(n[G]);return`${P?`${P}${l?"&":","}`:""}${G}${l?"=":","}${K}`},""):void 0}(t):function V4(t){let{key:i,value:n,style:o,escape:l}=t;const _=v=>w0(v,{escape:l});return"simple"===o?_(n):"label"===o?`.${_(n)}`:"matrix"===o?`;${i}=${_(n)}`:"form"===o||"deepObject"===o?_(n):void 0}(t)}const kA={serializeRes:Vx,mergeInQueryOrForm:Kx};function $A(t){return HA.apply(this,arguments)}function HA(){return HA=(0,mm.Z)(function*(t){let o,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"object"==typeof t&&(i=t,t=i.url),i.headers=i.headers||{},kA.mergeInQueryOrForm(i),i.headers&&Object.keys(i.headers).forEach(l=>{const _=i.headers[l];"string"==typeof _&&(i.headers[l]=_.replace(/\n+/g," "))}),i.requestInterceptor&&(i=(yield i.requestInterceptor(i))||i),/multipart\/form-data/i.test(i.headers["content-type"]||i.headers["Content-Type"])&&(delete i.headers["content-type"],delete i.headers["Content-Type"]);try{o=yield(i.userFetch||fetch)(i.url,i),o=yield kA.serializeRes(o,t,i),i.responseInterceptor&&(o=(yield i.responseInterceptor(o))||o)}catch(l){if(!o)throw l;const _=new Error(o.statusText||`response status is ${o.status}`);throw _.status=o.status,_.statusCode=o.status,_.responseError=l,_}if(!o.ok){const l=new Error(o.statusText||`response status is ${o.status}`);throw l.status=o.status,l.statusCode=o.status,l.response=o,l}return o}),HA.apply(this,arguments)}const Z4=function(){return/(json|xml|yaml|text)\b/.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")};function Vx(t,i){let{loadSpec:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o={ok:t.ok,url:t.url||i,status:t.status,statusText:t.statusText,headers:Q4(t.headers)},l=o.headers["content-type"],_=n||Z4(l);return(_?t.text:t.blob||t.buffer).call(t).then(O=>{if(o.text=O,o.data=O,_)try{const P=function W4(t,i){return i&&(0===i.indexOf("application/json")||i.indexOf("+json")>0)?JSON.parse(t):zx.load(t)}(O,l);o.body=P,o.obj=P}catch(P){o.parseError=P}return o})}function Q4(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return"function"!=typeof t.entries?{}:Array.from(t.entries()).reduce((i,n)=>{let[o,l]=n;return i[o]=function J4(t){return t.includes(", ")?t.split(", "):t}(l),i},{})}function UA(t,i){return!i&&typeof navigator<"u"&&(i=navigator),i&&"ReactNative"===i.product?!(!t||"object"!=typeof t||"string"!=typeof t.uri):!!(typeof File<"u"&&t instanceof File||typeof Blob<"u"&&t instanceof Blob||ArrayBuffer.isView(t))||null!==t&&"object"==typeof t&&"function"==typeof t.pipe}function Zx(t,i){return Array.isArray(t)&&t.some(n=>UA(n,i))}const K4={form:",",spaceDelimited:"%20",pipeDelimited:"|"},X4={csv:",",ssv:"%20",tsv:"%09",pipes:"|"};class BA extends File{constructor(i){super([i],arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),this.data=i}valueOf(){return this.data}toString(){return this.valueOf()}}function Wx(t,i){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{collectionFormat:o,allowEmptyValue:l,serializationOption:_,encoding:v}=i,O="object"!=typeof i||Array.isArray(i)?i:i.value,P=n?K=>K.toString():K=>encodeURIComponent(K),G=P(t);if(typeof O>"u"&&l)return[[G,""]];if(UA(O)||Zx(O))return[[G,O]];if(_)return Jx(t,O,n,_);if(v){if([typeof v.style,typeof v.explode,typeof v.allowReserved].some(K=>"undefined"!==K)){const{style:K,explode:oe,allowReserved:ue}=v;return Jx(t,O,n,{style:K,explode:oe,allowReserved:ue})}if("string"==typeof v.contentType){if(v.contentType.startsWith("application/json")){const pe=P("string"==typeof O?O:JSON.stringify(O));return[[G,new BA(pe,"blob",{type:v.contentType})]]}const K=P(String(O));return[[G,new BA(K,"blob",{type:v.contentType})]]}return"object"!=typeof O?[[G,P(O)]]:Array.isArray(O)&&O.every(K=>"object"!=typeof K)?[[G,O.map(P).join(",")]]:[[G,P(JSON.stringify(O))]]}return"object"!=typeof O?[[G,P(O)]]:Array.isArray(O)?"multi"===o?[[G,O.map(P)]]:[[G,O.map(P).join(X4[o||"csv"])]]:[[G,""]]}function Jx(t,i,n,o){const l=o.style||"form",_=typeof o.explode>"u"?"form"===l:o.explode,v=!n&&(o&&o.allowReserved?"unsafe":"reserved"),O=G=>w0(G,{escape:v}),P=n?G=>G:G=>w0(G,{escape:v});return"object"!=typeof i?[[P(t),O(i)]]:Array.isArray(i)?_?[[P(t),i.map(O)]]:[[P(t),i.map(O).join(K4[l])]]:"deepObject"===l?Object.keys(i).map(G=>[P(`${t}[${G}]`),O(i[G])]):_?Object.keys(i).map(G=>[P(G),O(i[G])]):[[P(t),Object.keys(i).map(G=>[`${P(G)},${O(i[G])}`]).join(",")]]}function Qx(t){const i=Object.keys(t).reduce((n,o)=>{for(const[l,_]of Wx(o,t[o]))n[l]=_ instanceof BA?_.valueOf():_;return n},{});return SA().stringify(i,{encode:!1,indices:!1})||""}function Kx(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{url:i="",query:n,form:o}=t;if(o){if(Object.keys(o).some(O=>{const{value:P}=o[O];return UA(P)||Zx(P)})||/multipart\/form-data/i.test(t.headers["content-type"]||t.headers["Content-Type"])){const O=function q4(t){return Object.entries(t).reduce((i,n)=>{let[o,l]=n;for(const[_,v]of Wx(o,l,!0))if(Array.isArray(v))for(const O of v)if(ArrayBuffer.isView(O)){const P=new Blob([O]);i.append(_,P)}else i.append(_,O);else if(ArrayBuffer.isView(v)){const O=new Blob([v]);i.append(_,O)}else i.append(_,v);return i},new FormData)}(t.form);t.formdata=O,t.body=O}else t.body=Qx(o);delete t.form}if(n){const[_,v]=i.split("?");let O="";if(v){const G=SA().parse(v);Object.keys(n).forEach(oe=>delete G[oe]),O=SA().stringify(G,{encode:!0})}const P=function(){for(var _=arguments.length,v=new Array(_),O=0;O<_;O++)v[O]=arguments[O];const P=v.filter(G=>G).join("&");return P?`?${P}`:""}(O,Qx(n));t.url=_+P,delete t.query}return t}function e5(t,i,n){return n=n||(o=>o),i=i||(o=>o),o=>("string"==typeof o&&(o={url:o}),kA.mergeInQueryOrForm(o),o=i(o),n(t(o)))}const Xx=t=>{const{baseDoc:i,url:n}=t;return i||n||""},qx=t=>{const{fetch:i,http:n}=t;return i||n||$A};var t,t5=(t=function(i,n){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,l){o.__proto__=l}||function(o,l){for(var _ in l)l.hasOwnProperty(_)&&(o[_]=l[_])})(i,n)},function(i,n){function o(){this.constructor=i}t(i,n),i.prototype=null===n?Object.create(n):(o.prototype=n.prototype,new o)}),n5=Object.prototype.hasOwnProperty;function mC(t,i){return n5.call(t,i)}function GA(t){if(Array.isArray(t)){for(var i=new Array(t.length),n=0;n<i.length;n++)i[n]=""+n;return i}if(Object.keys)return Object.keys(t);var o=[];for(var l in t)mC(t,l)&&o.push(l);return o}function Vh(t){switch(typeof t){case"object":return JSON.parse(JSON.stringify(t));case"undefined":return null;default:return t}}function YA(t){for(var o,i=0,n=t.length;i<n;){if(!((o=t.charCodeAt(i))>=48&&o<=57))return!1;i++}return!0}function wg(t){return-1===t.indexOf("/")&&-1===t.indexOf("~")?t:t.replace(/~/g,"~0").replace(/\//g,"~1")}function ew(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function jA(t){if(void 0===t)return!0;if(t)if(Array.isArray(t)){for(var i=0,n=t.length;i<n;i++)if(jA(t[i]))return!0}else if("object"==typeof t)for(var o=GA(t),l=o.length,_=0;_<l;_++)if(jA(t[o[_]]))return!0;return!1}function nw(t,i){var n=[t];for(var o in i){var l="object"==typeof i[o]?JSON.stringify(i[o],null,2):i[o];typeof l<"u"&&n.push(o+": "+l)}return n.join("\n")}var rw=function(t){function i(n,o,l,_,v){var O=this.constructor,P=t.call(this,nw(n,{name:o,index:l,operation:_,tree:v}))||this;return P.name=o,P.index=l,P.operation=_,P.tree=v,Object.setPrototypeOf(P,O.prototype),P.message=nw(n,{name:o,index:l,operation:_,tree:v}),P}return t5(i,t),i}(Error),Cf=rw,r5=Vh,P0={add:function(t,i,n){return t[i]=this.value,{newDocument:n}},remove:function(t,i,n){var o=t[i];return delete t[i],{newDocument:n,removed:o}},replace:function(t,i,n){var o=t[i];return t[i]=this.value,{newDocument:n,removed:o}},move:function(t,i,n){var o=VE(n,this.path);o&&(o=Vh(o));var l=fv(n,{op:"remove",path:this.from}).removed;return fv(n,{op:"add",path:this.path,value:l}),{newDocument:n,removed:o}},copy:function(t,i,n){var o=VE(n,this.from);return fv(n,{op:"add",path:this.path,value:Vh(o)}),{newDocument:n}},test:function(t,i,n){return{newDocument:n,test:ZE(t[i],this.value)}},_get:function(t,i,n){return this.value=t[i],{newDocument:n}}},i5={add:function(t,i,n){return YA(i)?t.splice(i,0,this.value):t[i]=this.value,{newDocument:n,index:i}},remove:function(t,i,n){return{newDocument:n,removed:t.splice(i,1)[0]}},replace:function(t,i,n){var o=t[i];return t[i]=this.value,{newDocument:n,removed:o}},move:P0.move,copy:P0.copy,test:P0.test,_get:P0._get};function VE(t,i){if(""==i)return t;var n={op:"_get",path:i};return fv(t,n),n.value}function fv(t,i,n,o,l,_){if(void 0===n&&(n=!1),void 0===o&&(o=!0),void 0===l&&(l=!0),void 0===_&&(_=0),n&&("function"==typeof n?n(i,0,t,i.path):gC(i,0)),""===i.path){var v={newDocument:t};if("add"===i.op)return v.newDocument=i.value,v;if("replace"===i.op)return v.newDocument=i.value,v.removed=t,v;if("move"===i.op||"copy"===i.op)return v.newDocument=VE(t,i.from),"move"===i.op&&(v.removed=t),v;if("test"===i.op){if(v.test=ZE(t,i.value),!1===v.test)throw new Cf("Test operation failed","TEST_OPERATION_FAILED",_,i,t);return v.newDocument=t,v}if("remove"===i.op)return v.removed=t,v.newDocument=null,v;if("_get"===i.op)return i.value=t,v;if(n)throw new Cf("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",_,i,t);return v}o||(t=Vh(t));var P=(i.path||"").split("/"),G=t,K=1,oe=P.length,ue=void 0,pe=void 0,ye=void 0;for(ye="function"==typeof n?n:gC;;){if((pe=P[K])&&-1!=pe.indexOf("~")&&(pe=ew(pe)),l&&("__proto__"==pe||"prototype"==pe&&K>0&&"constructor"==P[K-1]))throw new TypeError("JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(n&&void 0===ue&&(void 0===G[pe]?ue=P.slice(0,K).join("/"):K==oe-1&&(ue=i.path),void 0!==ue&&ye(i,0,t,ue)),K++,Array.isArray(G)){if("-"===pe)pe=G.length;else{if(n&&!YA(pe))throw new Cf("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",_,i,t);YA(pe)&&(pe=~~pe)}if(K>=oe){if(n&&"add"===i.op&&pe>G.length)throw new Cf("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",_,i,t);if(!1===(v=i5[i.op].call(i,G,pe,t)).test)throw new Cf("Test operation failed","TEST_OPERATION_FAILED",_,i,t);return v}}else if(K>=oe){if(!1===(v=P0[i.op].call(i,G,pe,t)).test)throw new Cf("Test operation failed","TEST_OPERATION_FAILED",_,i,t);return v}if(G=G[pe],n&&K<oe&&(!G||"object"!=typeof G))throw new Cf("Cannot perform operation at the desired path","OPERATION_PATH_UNRESOLVABLE",_,i,t)}}function p1(t,i,n,o,l){if(void 0===o&&(o=!0),void 0===l&&(l=!0),n&&!Array.isArray(i))throw new Cf("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");o||(t=Vh(t));for(var _=new Array(i.length),v=0,O=i.length;v<O;v++)_[v]=fv(t,i[v],n,!0,l,v),t=_[v].newDocument;return _.newDocument=t,_}function o5(t,i,n){var o=fv(t,i);if(!1===o.test)throw new Cf("Test operation failed","TEST_OPERATION_FAILED",n,i,t);return o.newDocument}function gC(t,i,n,o){if("object"!=typeof t||null===t||Array.isArray(t))throw new Cf("Operation is not an object","OPERATION_NOT_AN_OBJECT",i,t,n);if(!P0[t.op])throw new Cf("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",i,t,n);if("string"!=typeof t.path)throw new Cf("Operation `path` property is not a string","OPERATION_PATH_INVALID",i,t,n);if(0!==t.path.indexOf("/")&&t.path.length>0)throw new Cf('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",i,t,n);if(("move"===t.op||"copy"===t.op)&&"string"!=typeof t.from)throw new Cf("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",i,t,n);if(("add"===t.op||"replace"===t.op||"test"===t.op)&&void 0===t.value)throw new Cf("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",i,t,n);if(("add"===t.op||"replace"===t.op||"test"===t.op)&&jA(t.value))throw new Cf("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",i,t,n);if(n)if("add"==t.op){var l=t.path.split("/").length,_=o.split("/").length;if(l!==_+1&&l!==_)throw new Cf("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",i,t,n)}else if("replace"===t.op||"remove"===t.op||"_get"===t.op){if(t.path!==o)throw new Cf("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",i,t,n)}else if("move"===t.op||"copy"===t.op){var O=iw([{op:"_get",path:t.from,value:void 0}],n);if(O&&"OPERATION_PATH_UNRESOLVABLE"===O.name)throw new Cf("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",i,t,n)}}function iw(t,i,n){try{if(!Array.isArray(t))throw new Cf("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(i)p1(Vh(i),Vh(t),n||!0);else{n=n||gC;for(var o=0;o<t.length;o++)n(t[o],o,i,void 0)}}catch(l){if(l instanceof Cf)return l;throw l}}function ZE(t,i){if(t===i)return!0;if(t&&i&&"object"==typeof t&&"object"==typeof i){var l,_,v,n=Array.isArray(t),o=Array.isArray(i);if(n&&o){if((_=t.length)!=i.length)return!1;for(l=_;0!=l--;)if(!ZE(t[l],i[l]))return!1;return!0}if(n!=o)return!1;var O=Object.keys(t);if((_=O.length)!==Object.keys(i).length)return!1;for(l=_;0!=l--;)if(!i.hasOwnProperty(O[l]))return!1;for(l=_;0!=l--;)if(!ZE(t[v=O[l]],i[v]))return!1;return!0}return t!=t&&i!=i}var zA=new WeakMap,s5=function t(i){this.observers=new Map,this.obj=i},a5=function t(i,n){this.callback=i,this.observer=n};function d5(t,i){i.unobserve()}function f5(t,i){var o,l=function l5(t){return zA.get(t)}(t);if(l){var _=function u5(t,i){return t.observers.get(i)}(l,i);o=_&&_.observer}else l=new s5(t),zA.set(t,l);if(o)return o;if(o={},l.value=Vh(t),i){o.callback=i,o.next=null;var v=function(){VA(o)},O=function(){clearTimeout(o.next),o.next=setTimeout(v)};typeof window<"u"&&(window.addEventListener("mouseup",O),window.addEventListener("keyup",O),window.addEventListener("mousedown",O),window.addEventListener("keydown",O),window.addEventListener("change",O))}return o.patches=[],o.object=t,o.unobserve=function(){VA(o),clearTimeout(o.next),function c5(t,i){t.observers.delete(i.callback)}(l,o),typeof window<"u"&&(window.removeEventListener("mouseup",O),window.removeEventListener("keyup",O),window.removeEventListener("mousedown",O),window.removeEventListener("keydown",O),window.removeEventListener("change",O))},l.observers.set(i,new a5(i,o)),o}function VA(t,i){void 0===i&&(i=!1);var n=zA.get(t.object);ZA(n.value,t.object,t.patches,"",i),t.patches.length&&p1(n.value,t.patches);var o=t.patches;return o.length>0&&(t.patches=[],t.callback&&t.callback(o)),o}function ZA(t,i,n,o,l){if(i!==t){"function"==typeof i.toJSON&&(i=i.toJSON());for(var _=GA(i),v=GA(t),P=!1,G=v.length-1;G>=0;G--){var oe=t[K=v[G]];if(!mC(i,K)||void 0===i[K]&&void 0!==oe&&!1===Array.isArray(i))Array.isArray(t)===Array.isArray(i)?(l&&n.push({op:"test",path:o+"/"+wg(K),value:Vh(oe)}),n.push({op:"remove",path:o+"/"+wg(K)}),P=!0):(l&&n.push({op:"test",path:o,value:t}),n.push({op:"replace",path:o,value:i}));else{var ue=i[K];"object"==typeof oe&&null!=oe&&"object"==typeof ue&&null!=ue&&Array.isArray(oe)===Array.isArray(ue)?ZA(oe,ue,n,o+"/"+wg(K),l):oe!==ue&&(l&&n.push({op:"test",path:o+"/"+wg(K),value:Vh(oe)}),n.push({op:"replace",path:o+"/"+wg(K),value:Vh(ue)}))}}if(P||_.length!=v.length)for(G=0;G<_.length;G++){var K;!mC(t,K=_[G])&&void 0!==i[K]&&n.push({op:"add",path:o+"/"+wg(K),value:Vh(i[K])})}}}function p5(t,i,n){void 0===n&&(n=!1);var o=[];return ZA(t,i,o,"",n),o}Object.assign({},r,a,{JsonPatchError:rw,deepClone:Vh,escapePathComponent:wg,unescapePathComponent:ew});var _5=s(82312),h5=s.n(_5);const rd={add:function g5(t,i){return{op:"add",path:t,value:i}},replace:vC,remove:function v5(t){return{op:"remove",path:t}},merge:function y5(t,i){return{type:"mutation",op:"merge",path:t,value:i}},mergeDeep:function E5(t,i){return{type:"mutation",op:"mergeDeep",path:t,value:i}},context:function S5(t,i){return{type:"context",path:t,value:i}},getIn:function M5(t,i){return i.reduce((n,o)=>typeof o<"u"&&n?n[o]:n,t)},applyPatch:function m5(t,i,n){if(n=n||{},"merge"===(i={...i,path:i.path&&ow(i.path)}).op){const o=QA(t,i.path);Object.assign(o,i.value),p1(t,[vC(i.path,o)])}else if("mergeDeep"===i.op){const o=QA(t,i.path),l=h5()(o,i.value);t=p1(t,[vC(i.path,l)]).newDocument}else if("add"===i.op&&""===i.path&&pv(i.value))p1(t,Object.keys(i.value).reduce((l,_)=>(l.push({op:"add",path:`/${ow(_)}`,value:i.value[_]}),l),[]));else if("replace"===i.op&&""===i.path){let{value:o}=i;n.allowMetaPatches&&i.meta&&yC(i)&&(Array.isArray(i.value)||pv(i.value))&&(o={...o,...i.meta}),t=o}else if(p1(t,[i]),n.allowMetaPatches&&i.meta&&yC(i)&&(Array.isArray(i.value)||pv(i.value))){const l={...QA(t,i.path),...i.meta};p1(t,[vC(i.path,l)])}return t},parentPathMatch:function C5(t,i){if(!Array.isArray(i))return!1;for(let n=0,o=i.length;n<o;n+=1)if(i[n]!==t[n])return!1;return!0},flatten:WE,fullyNormalizeArray:function O5(t){return lw(WE(aw(t)))},normalizeArray:aw,isPromise:function A5(t){return pv(t)&&uw(t.then)},forEachNew:function b5(t,i){try{return sw(t,JA,i)}catch(n){return n}},forEachNewPrimitive:function T5(t,i){try{return sw(t,WA,i)}catch(n){return n}},isJsonPatch:cw,isContextPatch:function x5(t){return EC(t)&&"context"===t.type},isPatch:EC,isMutation:dw,isAdditiveMutation:yC,isGenerator:function R5(t){return"[object GeneratorFunction]"===Object.prototype.toString.call(t)},isFunction:uw,isObject:pv,isError:function D5(t){return t instanceof Error}};function ow(t){return Array.isArray(t)?t.length<1?"":`/${t.map(i=>(i+"").replace(/~/g,"~0").replace(/\//g,"~1")).join("/")}`:t}function vC(t,i,n){return{op:"replace",path:t,value:i,meta:n}}function sw(t,i,n){return lw(WE(t.filter(yC).map(v=>i(v.value,n,v.path))||[]))}function WA(t,i,n){return n=n||[],Array.isArray(t)?t.map((o,l)=>WA(o,i,n.concat(l))):pv(t)?Object.keys(t).map(o=>WA(t[o],i,n.concat(o))):i(t,n[n.length-1],n)}function JA(t,i,n){let o=[];if((n=n||[]).length>0){const l=i(t,n[n.length-1],n);l&&(o=o.concat(l))}if(Array.isArray(t)){const l=t.map((_,v)=>JA(_,i,n.concat(v)));l&&(o=o.concat(l))}else if(pv(t)){const l=Object.keys(t).map(_=>JA(t[_],i,n.concat(_)));l&&(o=o.concat(l))}return o=WE(o),o}function aw(t){return Array.isArray(t)?t:[t]}function WE(t){return[].concat(...t.map(i=>Array.isArray(i)?WE(i):i))}function lw(t){return t.filter(i=>typeof i<"u")}function pv(t){return t&&"object"==typeof t}function uw(t){return t&&"function"==typeof t}function cw(t){if(EC(t)){const{op:i}=t;return"add"===i||"remove"===i||"replace"===i}return!1}function dw(t){return cw(t)||EC(t)&&"mutation"===t.type}function yC(t){return dw(t)&&("add"===t.op||"replace"===t.op||"merge"===t.op||"mergeDeep"===t.op)}function EC(t){return t&&"object"==typeof t}function QA(t,i){try{return VE(t,i)}catch(n){return console.error(n),{}}}function Ld(t){return null!=t&&"object"==typeof t&&!0===t["@@functional/placeholder"]}function kd(t){return function i(n){return 0===arguments.length||Ld(n)?i:t.apply(this,arguments)}}function iu(t){return function i(n,o){switch(arguments.length){case 0:return i;case 1:return Ld(n)?i:kd(function(l){return t(n,l)});default:return Ld(n)&&Ld(o)?i:Ld(n)?kd(function(l){return t(l,o)}):Ld(o)?kd(function(l){return t(n,l)}):t(n,o)}}}s(29849);const KA=Array.isArray||function(i){return null!=i&&i.length>=0&&"[object Array]"===Object.prototype.toString.call(i)};function Kd(t,i,n){return function(){if(0===arguments.length)return n();var o=arguments[arguments.length-1];if(!KA(o)){for(var l=0;l<t.length;){if("function"==typeof o[t[l]])return o[t[l]].apply(o,Array.prototype.slice.call(arguments,0,-1));l+=1}if(function w5(t){return null!=t&&"function"==typeof t["@@transducer/step"]}(o))return i.apply(null,Array.prototype.slice.call(arguments,0,-1))(o)}return n.apply(this,arguments)}}const ic_init=function(){return this.xf["@@transducer/init"]()},ic_result=function(t){return this.xf["@@transducer/result"](t)};function fw(t){for(var n,i=[];!(n=t.next()).done;)i.push(n.value);return i}function SC(t,i,n){for(var o=0,l=n.length;o<l;){if(t(i,n[o]))return!0;o+=1}return!1}function hv(t,i){return Object.prototype.hasOwnProperty.call(i,t)}const XA="function"==typeof Object.is?Object.is:function F5(t,i){return t===i?0!==t||1/t==1/i:t!=t&&i!=i};var pw=Object.prototype.toString;const k5=function(){return"[object Arguments]"===pw.call(arguments)?function(i){return"[object Arguments]"===pw.call(i)}:function(i){return hv("callee",i)}}();var $5=!{toString:null}.propertyIsEnumerable("toString"),_w=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],hw=function(){return arguments.propertyIsEnumerable("length")}(),H5=function(i,n){for(var o=0;o<i.length;){if(i[o]===n)return!0;o+=1}return!1},U5=kd("function"!=typeof Object.keys||hw?function(i){if(Object(i)!==i)return[];var n,o,l=[],_=hw&&k5(i);for(n in i)hv(n,i)&&(!_||"length"!==n)&&(l[l.length]=n);if($5)for(o=_w.length-1;o>=0;)hv(n=_w[o],i)&&!H5(l,n)&&(l[l.length]=n),o-=1;return l}:function(i){return Object(i)!==i?[]:Object.keys(i)});const N0=U5;const qA=kd(function(i){return null===i?"Null":void 0===i?"Undefined":Object.prototype.toString.call(i).slice(8,-1)});function mw(t,i,n,o){var l=fw(t);function v(O,P){return eD(O,P,n.slice(),o.slice())}return!SC(function(O,P){return!SC(v,P,O)},fw(i),l)}function eD(t,i,n,o){if(XA(t,i))return!0;var l=qA(t);if(l!==qA(i))return!1;if("function"==typeof t["fantasy-land/equals"]||"function"==typeof i["fantasy-land/equals"])return"function"==typeof t["fantasy-land/equals"]&&t["fantasy-land/equals"](i)&&"function"==typeof i["fantasy-land/equals"]&&i["fantasy-land/equals"](t);if("function"==typeof t.equals||"function"==typeof i.equals)return"function"==typeof t.equals&&t.equals(i)&&"function"==typeof i.equals&&i.equals(t);switch(l){case"Arguments":case"Array":case"Object":if("function"==typeof t.constructor&&"Promise"===function I5(t){var i=String(t).match(/^function (\w*)/);return null==i?"":i[1]}(t.constructor))return t===i;break;case"Boolean":case"Number":case"String":if(typeof t!=typeof i||!XA(t.valueOf(),i.valueOf()))return!1;break;case"Date":if(!XA(t.valueOf(),i.valueOf()))return!1;break;case"Error":return t.name===i.name&&t.message===i.message;case"RegExp":if(t.source!==i.source||t.global!==i.global||t.ignoreCase!==i.ignoreCase||t.multiline!==i.multiline||t.sticky!==i.sticky||t.unicode!==i.unicode)return!1}for(var _=n.length-1;_>=0;){if(n[_]===t)return o[_]===i;_-=1}switch(l){case"Map":return t.size===i.size&&mw(t.entries(),i.entries(),n.concat([t]),o.concat([i]));case"Set":return t.size===i.size&&mw(t.values(),i.values(),n.concat([t]),o.concat([i]));case"Arguments":case"Array":case"Object":case"Boolean":case"Number":case"String":case"Date":case"Error":case"RegExp":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var v=N0(t);if(v.length!==N0(i).length)return!1;var O=n.concat([t]),P=o.concat([i]);for(_=v.length-1;_>=0;){var G=v[_];if(!hv(G,i)||!eD(i[G],t[G],O,P))return!1;_-=1}return!0}var G5=iu(function(i,n){return eD(i,n,[],[])});const bC=G5;function TC(t,i){return function Y5(t,i,n){var o,l;if("function"==typeof t.indexOf)switch(typeof i){case"number":if(0===i){for(o=1/i;n<t.length;){if(0===(l=t[n])&&1/l===o)return n;n+=1}return-1}if(i!=i){for(;n<t.length;){if("number"==typeof(l=t[n])&&l!=l)return n;n+=1}return-1}return t.indexOf(i,n);case"string":case"boolean":case"function":case"undefined":return t.indexOf(i,n);case"object":if(null===i)return t.indexOf(i,n)}for(;n<t.length;){if(bC(t[n],i))return n;n+=1}return-1}(i,t,0)>=0}function I0(t,i){for(var n=0,o=i.length,l=Array(o);n<o;)l[n]=t(i[n]),n+=1;return l}function tD(t){return'"'+t.replace(/\\/g,"\\\\").replace(/[\b]/g,"\\b").replace(/\f/g,"\\f").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/\v/g,"\\v").replace(/\0/g,"\\0").replace(/"/g,'\\"')+'"'}var JE=function(i){return(i<10?"0":"")+i};const z5="function"==typeof Date.prototype.toISOString?function(i){return i.toISOString()}:function(i){return i.getUTCFullYear()+"-"+JE(i.getUTCMonth()+1)+"-"+JE(i.getUTCDate())+"T"+JE(i.getUTCHours())+":"+JE(i.getUTCMinutes())+":"+JE(i.getUTCSeconds())+"."+(i.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+"Z"};function CC(t,i,n){for(var o=0,l=n.length;o<l;)i=t(i,n[o]),o+=1;return i}var J5=function(){function t(i,n){this.xf=n,this.f=i}return t.prototype["@@transducer/init"]=ic_init,t.prototype["@@transducer/result"]=ic_result,t.prototype["@@transducer/step"]=function(i,n){return this.f(n)?this.xf["@@transducer/step"](i,n):i},t}();function Q5(t){return function(i){return new J5(t,i)}}var K5=iu(Kd(["fantasy-land/filter","filter"],Q5,function(t,i){return function W5(t){return"[object Object]"===Object.prototype.toString.call(t)}(i)?CC(function(n,o){return t(i[o])&&(n[o]=i[o]),n},{},N0(i)):function Z5(t,i){for(var n=0,o=i.length,l=[];n<o;)t(i[n])&&(l[l.length]=i[n]),n+=1;return l}(t,i)}));const gw=K5;var X5=iu(function(i,n){return gw(function V5(t){return function(){return!t.apply(this,arguments)}}(i),n)});const vw=X5;function yw(t,i){var n=function(v){var O=i.concat([t]);return TC(v,O)?"<Circular>":yw(v,O)},o=function(_,v){return I0(function(O){return tD(O)+": "+n(_[O])},v.slice().sort())};switch(Object.prototype.toString.call(t)){case"[object Arguments]":return"(function() { return arguments; }("+I0(n,t).join(", ")+"))";case"[object Array]":return"["+I0(n,t).concat(o(t,vw(function(_){return/^\d+$/.test(_)},N0(t)))).join(", ")+"]";case"[object Boolean]":return"object"==typeof t?"new Boolean("+n(t.valueOf())+")":t.toString();case"[object Date]":return"new Date("+(isNaN(t.valueOf())?n(NaN):tD(z5(t)))+")";case"[object Map]":return"new Map("+n(Array.from(t))+")";case"[object Null]":return"null";case"[object Number]":return"object"==typeof t?"new Number("+n(t.valueOf())+")":1/t==-1/0?"-0":t.toString(10);case"[object Set]":return"new Set("+n(Array.from(t).sort())+")";case"[object String]":return"object"==typeof t?"new String("+n(t.valueOf())+")":tD(t);case"[object Undefined]":return"undefined";default:if("function"==typeof t.toString){var l=t.toString();if("[object Object]"!==l)return l}return"{"+o(t,N0(t)).join(", ")+"}"}}const nD=kd(function(i){return yw(i,[])});var nL=function(){function t(i,n){this.xf=n,this.f=i}return t.prototype["@@transducer/init"]=ic_init,t.prototype["@@transducer/result"]=ic_result,t.prototype["@@transducer/step"]=function(i,n){return this.xf["@@transducer/step"](i,this.f(n))},t}();const Ew=function(i){return function(n){return new nL(i,n)}};function MC(t,i){switch(t){case 0:return function(){return i.apply(this,arguments)};case 1:return function(n){return i.apply(this,arguments)};case 2:return function(n,o){return i.apply(this,arguments)};case 3:return function(n,o,l){return i.apply(this,arguments)};case 4:return function(n,o,l,_){return i.apply(this,arguments)};case 5:return function(n,o,l,_,v){return i.apply(this,arguments)};case 6:return function(n,o,l,_,v,O){return i.apply(this,arguments)};case 7:return function(n,o,l,_,v,O,P){return i.apply(this,arguments)};case 8:return function(n,o,l,_,v,O,P,G){return i.apply(this,arguments)};case 9:return function(n,o,l,_,v,O,P,G,K){return i.apply(this,arguments)};case 10:return function(n,o,l,_,v,O,P,G,K,oe){return i.apply(this,arguments)};default:throw new Error("First argument to _arity must be a non-negative integer no greater than ten")}}function rD(t,i,n){return function(){for(var o=[],l=0,_=t,v=0;v<i.length||l<arguments.length;){var O;v<i.length&&(!Ld(i[v])||l>=arguments.length)?O=i[v]:(O=arguments[l],l+=1),o[v]=O,Ld(O)||(_-=1),v+=1}return _<=0?n.apply(this,o):MC(_,rD(t,o,n))}}var iL=iu(function(i,n){return 1===i?kd(n):MC(i,rD(i,[],n))});const _1=iL;var oL=iu(Kd(["fantasy-land/map","map"],Ew,function(i,n){switch(Object.prototype.toString.call(n)){case"[object Function]":return _1(n.length,function(){return i.call(this,n.apply(this,arguments))});case"[object Object]":return CC(function(o,l){return o[l]=i(n[l]),o},{},N0(n));default:return I0(i,n)}}));const OC=oL;function QE(t){return function i(n,o,l){switch(arguments.length){case 0:return i;case 1:return Ld(n)?i:iu(function(_,v){return t(n,_,v)});case 2:return Ld(n)&&Ld(o)?i:Ld(n)?iu(function(_,v){return t(_,o,v)}):Ld(o)?iu(function(_,v){return t(n,_,v)}):kd(function(_){return t(n,o,_)});default:return Ld(n)&&Ld(o)&&Ld(l)?i:Ld(n)&&Ld(o)?iu(function(_,v){return t(_,v,l)}):Ld(n)&&Ld(l)?iu(function(_,v){return t(_,o,v)}):Ld(o)&&Ld(l)?iu(function(_,v){return t(n,_,v)}):Ld(n)?kd(function(_){return t(_,o,l)}):Ld(o)?kd(function(_){return t(n,_,l)}):Ld(l)?kd(function(_){return t(n,o,_)}):t(n,o,l)}}}var fL=kd(function(i){return!!KA(i)||!(!i||"object"!=typeof i||function iD(t){return"[object String]"===Object.prototype.toString.call(t)}(i))&&(0===i.length||i.length>0&&i.hasOwnProperty(0)&&i.hasOwnProperty(i.length-1))});const AC=fL;var bw=typeof Symbol<"u"?Symbol.iterator:"@@iterator";function Tw(t,i,n){return function(l,_,v){if(AC(v))return t(l,_,v);if(null==v)return _;if("function"==typeof v["fantasy-land/reduce"])return i(l,_,v,"fantasy-land/reduce");if(null!=v[bw])return n(l,_,v[bw]());if("function"==typeof v.next)return n(l,_,v);if("function"==typeof v.reduce)return i(l,_,v,"reduce");throw new TypeError("reduce: list must be array or iterable")}}function Cw(t,i,n){for(var o=0,l=n.length;o<l;){if((i=t["@@transducer/step"](i,n[o]))&&i["@@transducer/reduced"]){i=i["@@transducer/value"];break}o+=1}return t["@@transducer/result"](i)}var pL=iu(function(i,n){return MC(i.length,function(){return i.apply(n,arguments)})});const _L=pL;function hL(t,i,n){for(var o=n.next();!o.done;){if((i=t["@@transducer/step"](i,o.value))&&i["@@transducer/reduced"]){i=i["@@transducer/value"];break}o=n.next()}return t["@@transducer/result"](i)}function mL(t,i,n,o){return t["@@transducer/result"](n[o](_L(t["@@transducer/step"],t),i))}const DC=Tw(Cw,mL,hL);var vL=function(){function t(i){this.f=i}return t.prototype["@@transducer/init"]=function(){throw new Error("init not implemented on XWrap")},t.prototype["@@transducer/result"]=function(i){return i},t.prototype["@@transducer/step"]=function(i,n){return this.f(i,n)},t}();var yL=QE(function(t,i,n){return DC("function"==typeof t?function Mw(t){return new vL(t)}(t):t,i,n)});const RC=yL;const SL=kd(function(i){return function(){return i}});function CL(t,i,n){for(var o=n.next();!o.done;)i=t(i,o.value),o=n.next();return i}function ML(t,i,n,o){return n[o](t,i)}const AL=Tw(CC,ML,CL);var DL=iu(function(i,n){return"function"==typeof n["fantasy-land/ap"]?n["fantasy-land/ap"](i):"function"==typeof i.ap?i.ap(n):"function"==typeof i?function(o){return i(o)(n(o))}:AL(function(o,l){return function oD(t,i){var n,o=(t=t||[]).length,l=(i=i||[]).length,_=[];for(n=0;n<o;)_[_.length]=t[n],n+=1;for(n=0;n<l;)_[_.length]=i[n],n+=1;return _}(o,OC(l,n))},[],i)});const RL=DL;var NL=iu(function(i,n){var o=_1(i,n);return _1(i,function(){return CC(RL,OC(o,arguments[0]),Array.prototype.slice.call(arguments,1))})});const IL=NL;const WL=kd(function(i){return IL(i.length,i)})(kd(function(i){return!i}));function JL(t,i){return function(){return i.call(this,t.apply(this,arguments))}}function Dw(t,i){return function(){var n=arguments.length;if(0===n)return i();var o=arguments[n-1];return KA(o)||"function"!=typeof o[t]?i.apply(this,arguments):o[t].apply(o,Array.prototype.slice.call(arguments,0,n-1))}}var QL=QE(Dw("slice",function(i,n,o){return Array.prototype.slice.call(o,i,n)}));const F0=QL,XL=kd(Dw("tail",F0(1,1/0)));function aD(){if(0===arguments.length)throw new Error("pipe requires at least one argument");return MC(arguments[0].length,RC(JL,arguments[0],XL(arguments)))}const c7=kd(function(i){return _1(i.length,i)});function S7(t,i){for(var n=i.length-1;n>=0&&t(i[n]);)n-=1;return F0(0,n+1,i)}var b7=function(){function t(i,n){this.f=i,this.retained=[],this.xf=n}return t.prototype["@@transducer/init"]=ic_init,t.prototype["@@transducer/result"]=function(i){return this.retained=null,this.xf["@@transducer/result"](i)},t.prototype["@@transducer/step"]=function(i,n){return this.f(n)?this.retain(i,n):this.flush(i,n)},t.prototype.flush=function(i,n){return i=DC(this.xf,i,this.retained),this.retained=[],this.xf["@@transducer/step"](i,n)},t.prototype.retain=function(i,n){return this.retained.push(n),i},t}();function T7(t){return function(i){return new b7(t,i)}}const M7=iu(Kd([],T7,S7));var U7=kd(function(i){return _1(i.length,function(n,o){var l=Array.prototype.slice.call(arguments,0);return l[0]=o,l[1]=n,i.apply(this,l)})});const B7=U7,j7=iu(TC);var o9=iu(function(i,n){return _1(i+1,function(){var o=arguments[i];if(null!=o&&function i9(t){var i=Object.prototype.toString.call(t);return"[object Function]"===i||"[object AsyncFunction]"===i||"[object GeneratorFunction]"===i||"[object AsyncGeneratorFunction]"===i}(o[n]))return o[n].apply(o,Array.prototype.slice.call(arguments,0,i));throw new TypeError(nD(o)+' does not have a method named "'+n+'"')})});const Nw=o9,a9=Nw(1,"join"),E9=Nw(1,"split"),w9=B7(j7);var P9=c7(function(t,i){return aD(E9(""),M7(w9(t)),a9(""))(i)});const N9=P9;var I9=SL(void 0),L9=WL(bC(I9()));const dD=t=>{try{const i=new URL(t);return N9(":",i.protocol)}catch{return}},$9=(aD(dD,L9),t=>{const i=dD(t);return"http"===i||"https"===i}),qE=(t,i)=>{const n=new URL(i,new URL(t,"resolve://"));if("resolve:"===n.protocol){const{pathname:o,search:l,hash:_}=n;return o+l+_}return n.toString()};function $w(t,i){function n(){Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack;for(var o=arguments.length,l=new Array(o),_=0;_<o;_++)l[_]=arguments[_];[this.message]=l,i&&i.apply(this,l)}return(n.prototype=new Error).name=t,n.prototype.constructor=n,n}var B9=s(18807),G9=s.n(B9);const Y9=["properties"],j9=["properties"],z9=["definitions","parameters","responses","securityDefinitions","components/schemas","components/responses","components/parameters","components/securitySchemes"],V9=["schema/example","items/example"];function Hw(t){const i=t[t.length-1],n=t[t.length-2],o=t.join("/");return Y9.indexOf(i)>-1&&-1===j9.indexOf(n)||z9.indexOf(o)>-1||V9.some(l=>o.indexOf(l)>-1)}function fD(t,i){const[n,o]=t.split("#"),l=i??"",_=n??"";let v;if($9(l))v=qE(l,_);else{const O=qE(EA,l),G=qE(O,_).replace(EA,"");v=_.startsWith("/")?G:G.substring(1)}return o?`${v}#${o}`:v}const W9=/^([a-z]+:\/\/|\/\/)/i,L0=$w("JSONRefError",function(i,n,o){this.originalError=o,Object.assign(this,n||{})}),Pg={},Uw=new WeakMap,J9=[t=>"paths"===t[0]&&"responses"===t[3]&&"examples"===t[5],t=>"paths"===t[0]&&"responses"===t[3]&&"content"===t[5]&&"example"===t[7],t=>"paths"===t[0]&&"responses"===t[3]&&"content"===t[5]&&"examples"===t[7]&&"value"===t[9],t=>"paths"===t[0]&&"requestBody"===t[3]&&"content"===t[4]&&"example"===t[6],t=>"paths"===t[0]&&"requestBody"===t[3]&&"content"===t[4]&&"examples"===t[6]&&"value"===t[8],t=>"paths"===t[0]&&"parameters"===t[2]&&"example"===t[4],t=>"paths"===t[0]&&"parameters"===t[3]&&"example"===t[5],t=>"paths"===t[0]&&"parameters"===t[2]&&"examples"===t[4]&&"value"===t[6],t=>"paths"===t[0]&&"parameters"===t[3]&&"examples"===t[5]&&"value"===t[7],t=>"paths"===t[0]&&"parameters"===t[2]&&"content"===t[4]&&"example"===t[6],t=>"paths"===t[0]&&"parameters"===t[2]&&"content"===t[4]&&"examples"===t[6]&&"value"===t[8],t=>"paths"===t[0]&&"parameters"===t[3]&&"content"===t[4]&&"example"===t[7],t=>"paths"===t[0]&&"parameters"===t[3]&&"content"===t[5]&&"examples"===t[7]&&"value"===t[9]],Bw=Object.assign({key:"$ref",plugin:(t,i,n,o)=>{const l=o.getInstance(),_=n.slice(0,-1);if(Hw(_)||(t=>J9.some(i=>i(t)))(_))return;const{baseDoc:v}=o.getContext(n);if("string"!=typeof t)return new L0("$ref: must be a string (JSON-Ref)",{$ref:t,baseDoc:v,fullPath:n});const O=Yw(t),P=O[0],G=O[1]||"";let K,oe,ue;try{K=v||P?Gw(P,v):null}catch(Ue){return pD(Ue,{pointer:G,$ref:t,basePath:K,fullPath:n})}if(function nk(t,i,n,o){let l=Uw.get(o);l||(l={},Uw.set(o,l));const _=function ek(t){return 0===t.length?"":`/${t.map(Zw).join("/")}`}(n),v=`${i||"<specmap-base>"}#${t}`,O=_.replace(/allOf\/\d+\/?/g,"");if(i===o.contextTree.get([]).baseDoc&&mD(O,t))return!0;let G="";if(n.some(oe=>(G=`${G}/${Zw(oe)}`,l[G]&&l[G].some(ue=>mD(ue,v)||mD(v,ue)))))return!0;l[O]=(l[O]||[]).concat(v)}(G,K,_,o)&&!l.useCircularStructures){const Ue=fD(t,K);return t===Ue?null:rd.replace(n,Ue)}if(null==K?(ue=hD(G),oe=o.get(ue),typeof oe>"u"&&(oe=new L0(`Could not resolve reference: ${t}`,{pointer:G,$ref:t,baseDoc:v,fullPath:n}))):(oe=jw(K,G),oe=null!=oe.__value?oe.__value:oe.catch(Ue=>{throw pD(Ue,{pointer:G,$ref:t,baseDoc:v,fullPath:n})})),oe instanceof Error)return[rd.remove(n),oe];const pe=fD(t,K),ye=rd.replace(_,oe,{$$ref:pe});if(K&&K!==v)return[ye,rd.context(_,{baseDoc:K})];try{if(!function rk(t,i){const n=[t];return i.path.reduce((l,_)=>(n.push(l[_]),l[_]),t),function o(l){return rd.isObject(l)&&(n.indexOf(l)>=0||Object.keys(l).some(_=>o(l[_])))}(i.value)}(o.state,ye)||l.useCircularStructures)return ye}catch{return null}}},{docCache:Pg,absoluteify:Gw,clearCache:function X9(t){typeof t<"u"?delete Pg[t]:Object.keys(Pg).forEach(i=>{delete Pg[i]})},JSONRefError:L0,wrapError:pD,getDoc:zw,split:Yw,extractFromDoc:jw,fetchJSON:function q9(t){return fetch(t,{headers:{Accept:B3},loadSpec:!0}).then(i=>i.text()).then(i=>zx.load(i))},extract:_D,jsonPointerToArray:hD,unescapeJsonPointerToken:Vw}),K9=Bw;function Gw(t,i){if(!W9.test(t)){if(!i)throw new L0(`Tried to resolve a relative URL, without having a basePath. path: '${t}' basePath: '${i}'`);return qE(i,t)}return t}function pD(t,i){let n;return n=t&&t.response&&t.response.body?`${t.response.body.code} ${t.response.body.message}`:t.message,new L0(`Could not resolve reference: ${n}`,i,t)}function Yw(t){return(t+"").split("#")}function jw(t,i){const n=Pg[t];if(n&&!rd.isPromise(n))try{const o=_D(i,n);return Object.assign(Promise.resolve(o),{__value:o})}catch(o){return Promise.reject(o)}return zw(t).then(o=>_D(i,o))}function zw(t){const i=Pg[t];return i?rd.isPromise(i)?i:Promise.resolve(i):(Pg[t]=Bw.fetchJSON(t).then(n=>(Pg[t]=n,n)),Pg[t])}function _D(t,i){const n=hD(t);if(n.length<1)return i;const o=rd.getIn(i,n);if(typeof o>"u")throw new L0(`Could not resolve pointer: ${t} does not exist in document`,{pointer:t});return o}function hD(t){if("string"!=typeof t)throw new TypeError("Expected a string, got a "+typeof t);return"/"===t[0]&&(t=t.substr(1)),""===t?[]:t.split("/").map(Vw)}function Vw(t){return"string"!=typeof t?t:new URLSearchParams(`=${t.replace(/~1/g,"/").replace(/~0/g,"~")}`).get("")}function Zw(t){return new URLSearchParams([["",t.replace(/~/g,"~0").replace(/\//g,"~1")]]).toString().slice(1)}const tk=t=>!t||"/"===t||"#"===t;function mD(t,i){if(tk(i))return!0;const n=t.charAt(i.length),o=i.slice(-1);return 0===t.indexOf(i)&&(!n||"/"===n||"#"===n)&&"#"!==o}const ik={key:"allOf",plugin:(t,i,n,o,l)=>{if(l.meta&&l.meta.$$ref)return;const _=n.slice(0,-1);if(Hw(_))return;if(!Array.isArray(t)){const G=new TypeError("allOf must be an array");return G.fullPath=n,G}let v=!1,O=l.value;if(_.forEach(G=>{O&&(O=O[G])}),O={...O},0===Object.keys(O).length)return;delete O.allOf;const P=[];return P.push(o.replace(_,{})),t.forEach((G,K)=>{if(!o.isObject(G)){if(v)return null;v=!0;const pe=new TypeError("Elements in allOf must be objects");return pe.fullPath=n,P.push(pe)}P.push(o.mergeDeep(_,G));const ue=function Z9(t,i){let{specmap:n,getBaseUrlForNodePath:o=(v=>n.getContext([...i,...v]).baseDoc),targetKeys:l=["$ref","$$ref"]}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const _=[];return G9()(t).forEach(function(){if(l.includes(this.key)&&"string"==typeof this.node){const O=this.path,P=i.concat(this.path),G=fD(this.node,o(O));_.push(n.replace(P,G))}}),_}(G,n.slice(0,-1),{getBaseUrlForNodePath:pe=>o.getContext([...n,K,...pe]).baseDoc,specmap:o});P.push(...ue)}),O.example&&P.push(o.remove([].concat(_,"example"))),P.push(o.mergeDeep(_,O)),O.$$ref||P.push(o.remove([].concat(_,"$$ref"))),P}},ok={key:"parameters",plugin:(t,i,n,o)=>{if(Array.isArray(t)&&t.length){const l=Object.assign([],t),_=n.slice(0,-1),v={...rd.getIn(o.spec,_)};for(let O=0;O<t.length;O+=1){const P=t[O];try{l[O].default=o.parameterMacro(v,P)}catch(G){const K=new Error(G);return K.fullPath=n,K}}return rd.replace(n,l)}return rd.replace(n,t)}},sk={key:"properties",plugin:(t,i,n,o)=>{const l={...t};for(const v in t)try{l[v].default=o.modelPropertyMacro(l[v])}catch(O){const P=new Error(O);return P.fullPath=n,P}return rd.replace(n,l)}};class ak{constructor(i){this.root=gD(i||{})}set(i,n){const o=this.getParent(i,!0);if(!o)return void xC(this.root,n,null);const l=i[i.length-1],{children:_}=o;_[l]?xC(_[l],n,o):_[l]=gD(n,o)}get(i){if((i=i||[]).length<1)return this.root.value;let o,l,n=this.root;for(let _=0;_<i.length&&(l=i[_],o=n.children,o[l]);_+=1)n=o[l];return n&&n.protoValue}getParent(i,n){return!i||i.length<1?null:i.length<2?this.root:i.slice(0,-1).reduce((o,l)=>{if(!o)return o;const{children:_}=o;return!_[l]&&n&&(_[l]=gD(null,o)),_[l]},this.root)}}function gD(t,i){return xC({children:{}},t,i)}function xC(t,i,n){return t.value=i||{},t.protoValue=n?{...n.protoValue,...t.value}:t.value,Object.keys(t.children).forEach(o=>{const l=t.children[o];t.children[o]=xC(l,l.value,t)}),t}const Jw=()=>{};class lk{static getPluginName(i){return i.pluginName}static getPatchesOfType(i,n){return i.filter(n)}constructor(i){Object.assign(this,{spec:"",debugLevel:"info",plugins:[],pluginHistory:{},errors:[],mutations:[],promisedPatches:[],state:{},patches:[],context:{},contextTree:new ak,showDebug:!1,allPatches:[],pluginProp:"specMap",libMethods:Object.assign(Object.create(this),rd,{getInstance:()=>this}),allowMetaPatches:!1},i),this.get=this._get.bind(this),this.getContext=this._getContext.bind(this),this.hasRun=this._hasRun.bind(this),this.wrappedPlugins=this.plugins.map(this.wrapPlugin.bind(this)).filter(rd.isFunction),this.patches.push(rd.add([],this.spec)),this.patches.push(rd.context([],this.context)),this.updatePatches(this.patches)}debug(i){if(this.debugLevel===i){for(var n=arguments.length,o=new Array(n>1?n-1:0),l=1;l<n;l++)o[l-1]=arguments[l];console.log(...o)}}verbose(i){if("verbose"===this.debugLevel){for(var n=arguments.length,o=new Array(n>1?n-1:0),l=1;l<n;l++)o[l-1]=arguments[l];console.log(`[${i}]   `,...o)}}wrapPlugin(i,n){const{pathDiscriminator:o}=this;let _,l=null;return i[this.pluginProp]?(l=i,_=i[this.pluginProp]):rd.isFunction(i)?_=i:rd.isObject(i)&&(_=function v(O){const P=(G,K)=>!Array.isArray(G)||G.every((oe,ue)=>oe===K[ue]);return function*(K,oe){const ue={};for(const ye of K.filter(rd.isAdditiveMutation))yield*pe(ye.value,ye.path,ye);function*pe(ye,Ue,xe){if(rd.isObject(ye)){const ke=Ue.length-1,we=Ue[ke],Z=Ue.indexOf("properties"),Ft="properties"===we&&ke===Z,Dt=oe.allowMetaPatches&&ue[ye.$$ref];for(const Yt of Object.keys(ye)){const ln=ye[Yt],$n=Ue.concat(Yt),nn=rd.isObject(ln),Jn=ye.$$ref;if(Dt||nn&&(oe.allowMetaPatches&&Jn&&(ue[Jn]=!0),yield*pe(ln,$n,xe)),!Ft&&Yt===O.key){const zn=P(o,Ue);(!o||zn)&&(yield O.plugin(ln,Yt,$n,oe,xe))}}}else O.key===Ue[Ue.length-1]&&(yield O.plugin(ye,O.key,Ue,oe))}}}(i)),Object.assign(_.bind(l),{pluginName:i.name||n,isGenerator:rd.isGenerator(_)})}nextPlugin(){return this.wrappedPlugins.find(i=>this.getMutationsForPlugin(i).length>0)}nextPromisedPatch(){if(this.promisedPatches.length>0)return Promise.race(this.promisedPatches.map(i=>i.value))}getPluginHistory(i){const n=this.constructor.getPluginName(i);return this.pluginHistory[n]||[]}getPluginRunCount(i){return this.getPluginHistory(i).length}getPluginHistoryTip(i){const n=this.getPluginHistory(i);return n&&n[n.length-1]||{}}getPluginMutationIndex(i){const n=this.getPluginHistoryTip(i).mutationIndex;return"number"!=typeof n?-1:n}updatePluginHistory(i,n){const o=this.constructor.getPluginName(i);this.pluginHistory[o]=this.pluginHistory[o]||[],this.pluginHistory[o].push(n)}updatePatches(i){rd.normalizeArray(i).forEach(n=>{if(n instanceof Error)this.errors.push(n);else try{if(!rd.isObject(n))return void this.debug("updatePatches","Got a non-object patch",n);if(this.showDebug&&this.allPatches.push(n),rd.isPromise(n.value))return this.promisedPatches.push(n),void this.promisedPatchThen(n);if(rd.isContextPatch(n))return void this.setContext(n.path,n.value);rd.isMutation(n)&&this.updateMutations(n)}catch(o){console.error(o),this.errors.push(o)}})}updateMutations(i){"object"==typeof i.value&&!Array.isArray(i.value)&&this.allowMetaPatches&&(i.value={...i.value});const n=rd.applyPatch(this.state,i,{allowMetaPatches:this.allowMetaPatches});n&&(this.mutations.push(i),this.state=n)}removePromisedPatch(i){const n=this.promisedPatches.indexOf(i);n<0?this.debug("Tried to remove a promisedPatch that isn't there!"):this.promisedPatches.splice(n,1)}promisedPatchThen(i){return i.value=i.value.then(n=>{const o={...i,value:n};this.removePromisedPatch(i),this.updatePatches(o)}).catch(n=>{this.removePromisedPatch(i),this.updatePatches(n)}),i.value}getMutations(i,n){return"number"!=typeof n&&(n=this.mutations.length),this.mutations.slice(i=i||0,n)}getCurrentMutations(){return this.getMutationsForPlugin(this.getCurrentPlugin())}getMutationsForPlugin(i){const n=this.getPluginMutationIndex(i);return this.getMutations(n+1)}getCurrentPlugin(){return this.currentPlugin}getLib(){return this.libMethods}_get(i){return rd.getIn(this.state,i)}_getContext(i){return this.contextTree.get(i)}setContext(i,n){return this.contextTree.set(i,n)}_hasRun(i){return this.getPluginRunCount(this.getCurrentPlugin())>(i||0)}dispatch(){const i=this,n=this.nextPlugin();if(!n){const _=this.nextPromisedPatch();if(_)return _.then(()=>this.dispatch()).catch(()=>this.dispatch());const v={spec:this.state,errors:this.errors};return this.showDebug&&(v.patches=this.allPatches),Promise.resolve(v)}if(i.pluginCount=i.pluginCount||{},i.pluginCount[n]=(i.pluginCount[n]||0)+1,i.pluginCount[n]>100)return Promise.resolve({spec:i.state,errors:i.errors.concat(new Error("We've reached a hard limit of 100 plugin runs"))});if(n!==this.currentPlugin&&this.promisedPatches.length){const _=this.promisedPatches.map(v=>v.value);return Promise.all(_.map(v=>v.then(Jw,Jw))).then(()=>this.dispatch())}return function o(){i.currentPlugin=n;const _=i.getCurrentMutations(),v=i.mutations.length-1;try{if(n.isGenerator)for(const O of n(_,i.getLib()))l(O);else l(n(_,i.getLib()))}catch(O){console.error(O),l([Object.assign(Object.create(O),{plugin:n})])}finally{i.updatePluginHistory(n,{mutationIndex:v})}return i.dispatch()}();function l(_){_&&(_=rd.fullyNormalizeArray(_),i.updatePatches(_,n))}}}const k0={refs:K9,allOf:ik,parameters:ok,properties:sk},Qw=t=>t.replace(/\W/gi,"_");function vD(t,i){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",{v2OperationIdCompatibilityMode:o}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return t&&"object"==typeof t?(t.operationId||"").replace(/\s/g,"").length?Qw(t.operationId):function ck(t,i){let{v2OperationIdCompatibilityMode:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(n){let o=`${i.toLowerCase()}_${t}`.replace(/[\s!@#$%^&*()_+=[{\]};:<>|./?,\\'""-]/g,"_");return o=o||`${t.substring(1)}_${i}`,o.replace(/((_){2,})/g,"_").replace(/^(_)*/g,"").replace(/([_])*$/g,"")}return`${i.toLowerCase()}${Qw(t)}`}(i,n,{v2OperationIdCompatibilityMode:o}):null}function wC(t){const{spec:i}=t,{paths:n}=i,o={};if(!n||i.$$normalized)return t;for(const l in n){const _=n[l];if(null==_||!["object","function"].includes(typeof _))continue;const v=_.parameters;for(const O in _){const P=_[O];if(null==P||!["object","function"].includes(typeof P))continue;const G=vD(P,l,O);if(G){o[G]?o[G].push(P):o[G]=[P];const K=o[G];if(K.length>1)K.forEach((oe,ue)=>{oe.__originalOperationId=oe.__originalOperationId||oe.operationId,oe.operationId=`${G}${ue+1}`});else if(typeof P.operationId<"u"){const oe=K[0];oe.__originalOperationId=oe.__originalOperationId||P.operationId,oe.operationId=G}}if("parameters"!==O){const K=[],oe={};for(const ue in i)("produces"===ue||"consumes"===ue||"security"===ue)&&(oe[ue]=i[ue],K.push(oe));if(v&&(oe.parameters=v,K.push(oe)),K.length)for(const ue of K)for(const pe in ue)if(P[pe]){if("parameters"===pe)for(const ye of ue[pe])P[pe].some(xe=>xe.name&&xe.name===ye.name||xe.$ref&&xe.$ref===ye.$ref||xe.$$ref&&xe.$$ref===ye.$$ref||xe===ye)||P[pe].push(ye)}else P[pe]=ue[pe]}}}return i.$$normalized=!0,t}function yD(t){return ED.apply(this,arguments)}function ED(){return ED=(0,mm.Z)(function*(t){const{spec:i,mode:n,allowMetaPatches:o=!0,pathDiscriminator:l,modelPropertyMacro:_,parameterMacro:v,requestInterceptor:O,responseInterceptor:P,skipNormalization:G,useCircularStructures:K}=t,oe=Xx(t),ue=qx(t);return function pe(ye){oe&&(k0.refs.docCache[oe]=ye),k0.refs.fetchJSON=G3(ue,{requestInterceptor:O,responseInterceptor:P});const Ue=[k0.refs];return"function"==typeof v&&Ue.push(k0.parameters),"function"==typeof _&&Ue.push(k0.properties),"strict"!==n&&Ue.push(k0.allOf),function uk(t){return new lk(t).dispatch()}({spec:ye,context:{baseDoc:oe},plugins:Ue,allowMetaPatches:o,pathDiscriminator:l,parameterMacro:v,modelPropertyMacro:_,useCircularStructures:K}).then(G?function(){var xe=(0,mm.Z)(function*(ke){return ke});return function(ke){return xe.apply(this,arguments)}}():wC)}(i)}),ED.apply(this,arguments)}const Kw={name:"generic",match:()=>!0,normalize(t){let{spec:i}=t;const{spec:n}=wC({spec:i});return n},resolve:t=>(0,mm.Z)(function*(){return yD(t)})()};function SD(){return SD=(0,mm.Z)(function*(t){return yD(t)}),SD.apply(this,arguments)}const Xw=t=>{try{const{openapi:i}=t;return"string"==typeof i&&/^3\.0\.([0123])(?:-rc[012])?$/.test(i)}catch{return!1}},qw=t=>Xw(t)||(t=>{try{const{openapi:i}=t;return"string"==typeof i&&/^3\.1\.(?:[1-9]\d*|0)$/.test(i)}catch{return!1}})(t),eP={name:"openapi-2",match(t){let{spec:i}=t;return(t=>{try{const{swagger:i}=t;return"2.0"===i}catch{return!1}})(i)},normalize(t){let{spec:i}=t;const{spec:n}=wC({spec:i});return n},resolve:t=>(0,mm.Z)(function*(){return function dk(t){return SD.apply(this,arguments)}(t)})()};function bD(){return bD=(0,mm.Z)(function*(t){return yD(t)}),bD.apply(this,arguments)}const tP={name:"openapi-3-0",match(t){let{spec:i}=t;return Xw(i)},normalize(t){let{spec:i}=t;const{spec:n}=wC({spec:i});return n},resolve:t=>(0,mm.Z)(function*(){return function _k(t){return bD.apply(this,arguments)}(t)})()},hk=function(){var t=(0,mm.Z)(function*(i){const{spec:n,requestInterceptor:o,responseInterceptor:l}=i,_=Xx(i),v=qx(i),O=n||(yield G3(v,{requestInterceptor:o,responseInterceptor:l})(_)),P={...i,spec:O};return i.strategies.find(K=>K.match(P)).resolve(P)});return function(n){return t.apply(this,arguments)}}(),nP=(t=>function(){var i=(0,mm.Z)(function*(n){const o={...t,...n};return hk(o)});return function(n){return i.apply(this,arguments)}}())({strategies:[tP,eP,Kw]});var mk=s(46295);function rP(t){return"[object Object]"===Object.prototype.toString.call(t)}function iP(t){var i,n;return!1!==rP(t)&&(void 0===(i=t.constructor)||!(!1===rP(n=i.prototype)||!1===n.hasOwnProperty("isPrototypeOf")))}const gk={body:function vk(t){let{req:i,value:n}=t;i.body=n},header:function Ek(t){let{req:i,parameter:n,value:o}=t;i.headers=i.headers||{},typeof o<"u"&&(i.headers[n.name]=o)},query:function bk(t){let{req:i,value:n,parameter:o}=t;if(i.query=i.query||{},!1===n&&"boolean"===o.type&&(n="false"),0===n&&["number","integer"].indexOf(o.type)>-1&&(n="0"),n)i.query[o.name]={collectionFormat:o.collectionFormat,value:n};else if(o.allowEmptyValue&&void 0!==n){const l=o.name;i.query[l]=i.query[l]||{},i.query[l].allowEmptyValue=!0}},path:function Sk(t){let{req:i,value:n,parameter:o}=t;i.url=i.url.split(`{${o.name}}`).join(encodeURIComponent(n))},formData:function yk(t){let{req:i,value:n,parameter:o}=t;(n||o.allowEmptyValue)&&(i.form=i.form||{},i.form[o.name]={value:n,allowEmptyValue:o.allowEmptyValue,collectionFormat:o.collectionFormat})}};function PC(t,i){return i.includes("application/json")?"string"==typeof t?t:JSON.stringify(t):t.toString()}function Tk(t){let{req:i,value:n,parameter:o}=t;const{name:l,style:_,explode:v,content:O}=o;if(O){const G=Object.keys(O)[0];return void(i.url=i.url.split(`{${l}}`).join(w0(PC(n,G),{escape:!0})))}const P=LA({key:o.name,value:n,style:_||"simple",explode:v||!1,escape:!0});i.url=i.url.split(`{${l}}`).join(P)}function Ck(t){let{req:i,value:n,parameter:o}=t;if(i.query=i.query||{},o.content){const _=PC(n,Object.keys(o.content)[0]);if(_)i.query[o.name]=_;else if(o.allowEmptyValue&&void 0!==n){const v=o.name;i.query[v]=i.query[v]||{},i.query[v].allowEmptyValue=!0}}else if(!1===n&&(n="false"),0===n&&(n="0"),n){const{style:l,explode:_,allowReserved:v}=o;i.query[o.name]={value:n,serializationOption:{style:l,explode:_,allowReserved:v}}}else if(o.allowEmptyValue&&void 0!==n){const l=o.name;i.query[l]=i.query[l]||{},i.query[l].allowEmptyValue=!0}}const Mk=["accept","authorization","content-type"];function Ok(t){let{req:i,parameter:n,value:o}=t;if(i.headers=i.headers||{},!(Mk.indexOf(n.name.toLowerCase())>-1)){if(n.content){const l=Object.keys(n.content)[0];return void(i.headers[n.name]=PC(o,l))}typeof o<"u"&&(i.headers[n.name]=LA({key:n.name,value:o,style:n.style||"simple",explode:!(typeof n.explode>"u")&&n.explode,escape:!1}))}}function Ak(t){let{req:i,parameter:n,value:o}=t;i.headers=i.headers||{};const l=typeof o;if(n.content){const _=Object.keys(n.content)[0];i.headers.Cookie=`${n.name}=${PC(o,_)}`}else if("undefined"!==l){const _="object"===l&&!Array.isArray(o)&&n.explode?"":`${n.name}=`;i.headers.Cookie=_+LA({key:n.name,value:o,escape:!1,style:n.style||"form",explode:!(typeof n.explode>"u")&&n.explode})}}const Dk=typeof globalThis<"u"?globalThis:typeof self<"u"?self:window,{btoa:Rk}=Dk,oP=Rk;function sP(t,i){return`${i.toLowerCase()}-${t}`}const aP=t=>Array.isArray(t)?t:[],NC=t=>{try{return new URL(t)}catch{const i=new URL(t,EA),n=String(t).startsWith("/")?i.pathname:i.pathname.substring(1);return{hash:i.hash,host:"",hostname:"",href:"",origin:"",password:"",pathname:n,port:"",protocol:"",search:i.search,searchParams:i.searchParams}}},kk=$w("OperationNotFoundError",function(i,n,o){this.originalError=o,Object.assign(this,n||{})}),$k=(t,i)=>i.filter(n=>n.name===t),Hk=t=>{const i={};t.forEach(o=>{i[o.in]||(i[o.in]={}),i[o.in][o.name]=o});const n=[];return Object.keys(i).forEach(o=>{Object.keys(i[o]).forEach(l=>{n.push(i[o][l])})}),n},Uk={buildRequest:lP};function Bk(t){let{http:i,fetch:n,spec:o,operationId:l,pathName:_,method:v,parameters:O,securities:P,...G}=t;const K=i||n||$A;_&&v&&!l&&(l=sP(_,v));const oe=Uk.buildRequest({spec:o,operationId:l,parameters:O,securities:P,http:K,...G});return oe.body&&(iP(oe.body)||Array.isArray(oe.body))&&(oe.body=JSON.stringify(oe.body)),K(oe)}function lP(t){const{spec:i,operationId:n,responseContentType:o,scheme:l,requestInterceptor:_,responseInterceptor:v,contextUrl:O,userFetch:P,server:G,serverVariables:K,http:oe,signal:ue}=t;let{parameters:pe,parameterBuilders:ye}=t;const Ue=qw(i);ye||(ye=Ue?c:gk);let ke={url:"",credentials:oe&&oe.withCredentials?"include":"same-origin",headers:{},cookies:{}};ue&&(ke.signal=ue),_&&(ke.requestInterceptor=_),v&&(ke.responseInterceptor=v),P&&(ke.userFetch=P);const we=function Lk(t,i){return t&&t.paths?function Fk(t,i){return function Ik(t,i,n){if(!t||"object"!=typeof t||!t.paths||"object"!=typeof t.paths)return null;const{paths:o}=t;for(const l in o)for(const _ in o[l]){if("PARAMETERS"===_.toUpperCase())continue;const v=o[l][_];if(!v||"object"!=typeof v)continue;const O={spec:t,pathName:l,method:_.toUpperCase(),operation:v},P=i(O);if(n&&P)return O}}(t,i,!0)||null}(t,n=>{let{pathName:o,method:l,operation:_}=n;if(!_||"object"!=typeof _)return!1;const v=_.operationId;return[vD(_,o,l),sP(o,l),v].some(G=>G&&G===i)}):null}(i,n);if(!we)throw new kk(`Operation ${n} not found`);const{operation:Z={},method:Ft,pathName:Dt}=we;if(ke.url+=function Gk(t){return qw(t.spec)?function Yk(t){var i,n;let{spec:o,pathName:l,method:_,server:v,contextUrl:O,serverVariables:P={}}=t;const G=(null==o||null===(i=o.paths)||void 0===i||null===(i=i[l])||void 0===i||null===(i=i[(_||"").toLowerCase()])||void 0===i?void 0:i.servers)||(null==o||null===(n=o.paths)||void 0===n||null===(n=n[l])||void 0===n?void 0:n.servers)||o?.servers;let K="",oe=null;if(v&&G&&G.length){const ue=G.map(pe=>pe.url);ue.indexOf(v)>-1&&(K=v,oe=G[ue.indexOf(v)])}return!K&&G&&G.length&&(K=G[0].url,[oe]=G),K.indexOf("{")>-1&&function zk(t){const i=[],n=/{([^}]+)}/g;let o;for(;o=n.exec(t);)i.push(o[1]);return i}(K).forEach(pe=>{if(oe.variables&&oe.variables[pe]){const Ue=P[pe]||oe.variables[pe].default,xe=new RegExp(`{${pe}}`,"g");K=K.replace(xe,Ue)}}),function jk(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const n=NC(t&&i?qE(i,t):t),o=NC(i),l=TD(n.protocol)||TD(o.protocol),_=n.host||o.host,v=n.pathname;let O;return O=l&&_?`${l}://${_+v}`:v,"/"===O[O.length-1]?O.slice(0,-1):O}(K,O)}(t):function Vk(t){let{spec:i,scheme:n,contextUrl:o=""}=t;const l=NC(o),_=Array.isArray(i.schemes)?i.schemes[0]:null,v=n||_||TD(l.protocol)||"http",O=i.host||l.host||"",P=i.basePath||"";let G;return G=v&&O?`${v}://${O+P}`:P,"/"===G[G.length-1]?G.slice(0,-1):G}(t)}({spec:i,scheme:l,contextUrl:O,server:G,serverVariables:K,pathName:Dt,method:Ft}),!n)return delete ke.cookies,ke;ke.url+=Dt,ke.method=`${Ft}`.toUpperCase(),pe=pe||{};const Yt=i.paths[Dt]||{};o&&(ke.headers.accept=o);const ln=Hk([].concat(aP(Z.parameters)).concat(aP(Yt.parameters)));ln.forEach(nn=>{const Jn=ye[nn.in];let zn;if("body"===nn.in&&nn.schema&&nn.schema.properties&&(zn=pe),zn=nn&&nn.name&&pe[nn.name],typeof zn>"u"?zn=nn&&nn.name&&pe[`${nn.in}.${nn.name}`]:$k(nn.name,ln).length>1&&console.warn(`Parameter '${nn.name}' is ambiguous because the defined spec has more than one parameter with the name: '${nn.name}' and the passed-in parameter values did not define an 'in' value.`),null!==zn){if(typeof nn.default<"u"&&typeof zn>"u"&&(zn=nn.default),typeof zn>"u"&&nn.required&&!nn.allowEmptyValue)throw new Error(`Required parameter ${nn.name} is not provided`);if(Ue&&nn.schema&&"object"===nn.schema.type&&"string"==typeof zn)try{zn=JSON.parse(zn)}catch{throw new Error("Could not parse object parameter value string as JSON")}Jn&&Jn({req:ke,parameter:nn,value:zn,operation:Z,spec:i})}});const $n={...t,operation:Z};if(ke=Ue?function xk(t,i){const{operation:n,requestBody:o,securities:l,spec:_,attachContentTypeForEmptyPayload:v}=t;let{requestContentType:O}=t;i=function wk(t){var i;let{request:n,securities:o={},operation:l={},spec:_}=t;const v={...n},{authorized:O={}}=o,P=l.security||_.security||[],G=O&&!!Object.keys(O).length,K=(null==_||null===(i=_.components)||void 0===i?void 0:i.securitySchemes)||{};return v.headers=v.headers||{},v.query=v.query||{},Object.keys(o).length&&G&&P&&(!Array.isArray(l.security)||l.security.length)?(P.forEach(oe=>{Object.keys(oe).forEach(ue=>{const pe=O[ue],ye=K[ue];if(!pe)return;const Ue=pe.value||pe,{type:xe}=ye;if(pe)if("apiKey"===xe)"query"===ye.in&&(v.query[ye.name]=Ue),"header"===ye.in&&(v.headers[ye.name]=Ue),"cookie"===ye.in&&(v.cookies[ye.name]=Ue);else if("http"===xe){if(/^basic$/i.test(ye.scheme)){const Z=oP(`${Ue.username||""}:${Ue.password||""}`);v.headers.Authorization=`Basic ${Z}`}/^bearer$/i.test(ye.scheme)&&(v.headers.Authorization=`Bearer ${Ue}`)}else if("oauth2"===xe||"openIdConnect"===xe){const ke=pe.token||{},Z=ke[ye["x-tokenName"]||"access_token"];let Ft=ke.token_type;(!Ft||"bearer"===Ft.toLowerCase())&&(Ft="Bearer"),v.headers.Authorization=`${Ft} ${Z}`}})}),v):n}({request:i,securities:l,operation:n,spec:_});const P=n.requestBody||{},G=Object.keys(P.content||{}),K=O&&G.indexOf(O)>-1;if(o||v){if(O&&K)i.headers["Content-Type"]=O;else if(!O){const pe=G[0];pe&&(i.headers["Content-Type"]=pe,O=pe)}}else O&&K&&(i.headers["Content-Type"]=O);if(!t.responseContentType&&n.responses){const pe=Object.entries(n.responses).filter(ye=>{let[Ue,xe]=ye;const ke=parseInt(Ue,10);return ke>=200&&ke<300&&iP(xe.content)}).reduce((ye,Ue)=>{let[,xe]=Ue;return ye.concat(Object.keys(xe.content))},[]);pe.length>0&&(i.headers.accept=pe.join(", "))}if(o)if(O){if(G.indexOf(O)>-1)if("application/x-www-form-urlencoded"===O||"multipart/form-data"===O)if("object"==typeof o){var oe,ue;const pe=null!==(oe=null===(ue=P.content[O])||void 0===ue?void 0:ue.encoding)&&void 0!==oe?oe:{};i.form={},Object.keys(o).forEach(ye=>{i.form[ye]={value:o[ye],encoding:pe[ye]||{}}})}else i.form=o;else i.body=o}else i.body=o;return i}($n,ke):function Pk(t,i){const{spec:n,operation:o,securities:l,requestContentType:_,responseContentType:v,attachContentTypeForEmptyPayload:O}=t;if(i=function Nk(t){let{request:i,securities:n={},operation:o={},spec:l}=t;const _={...i},{authorized:v={},specSecurity:O=[]}=n,P=o.security||O,G=v&&!!Object.keys(v).length,K=l.securityDefinitions;return _.headers=_.headers||{},_.query=_.query||{},Object.keys(n).length&&G&&P&&(!Array.isArray(o.security)||o.security.length)?(P.forEach(oe=>{Object.keys(oe).forEach(ue=>{const pe=v[ue];if(!pe)return;const{token:ye}=pe,Ue=pe.value||pe,xe=K[ue],{type:ke}=xe,Z=ye&&ye[xe["x-tokenName"]||"access_token"];let Ft=ye&&ye.token_type;if(pe)if("apiKey"===ke){const Dt="query"===xe.in?"query":"headers";_[Dt]=_[Dt]||{},_[Dt][xe.name]=Ue}else"basic"===ke?Ue.header?_.headers.authorization=Ue.header:(Ue.base64=oP(`${Ue.username||""}:${Ue.password||""}`),_.headers.authorization=`Basic ${Ue.base64}`):"oauth2"===ke&&Z&&(Ft=Ft&&"bearer"!==Ft.toLowerCase()?Ft:"Bearer",_.headers.authorization=`${Ft} ${Z}`)})}),_):i}({request:i,securities:l,operation:o,spec:n}),i.body||i.form||O)_?i.headers["Content-Type"]=_:Array.isArray(o.consumes)?[i.headers["Content-Type"]]=o.consumes:Array.isArray(n.consumes)?[i.headers["Content-Type"]]=n.consumes:o.parameters&&o.parameters.filter(P=>"file"===P.type).length?i.headers["Content-Type"]="multipart/form-data":o.parameters&&o.parameters.filter(P=>"formData"===P.in).length&&(i.headers["Content-Type"]="application/x-www-form-urlencoded");else if(_){const P=o.parameters&&o.parameters.filter(K=>"body"===K.in).length>0,G=o.parameters&&o.parameters.filter(K=>"formData"===K.in).length>0;(P||G)&&(i.headers["Content-Type"]=_)}return!v&&Array.isArray(o.produces)&&o.produces.length>0&&(i.headers.accept=o.produces.join(", ")),i}($n,ke),ke.cookies&&Object.keys(ke.cookies).length){const nn=Object.keys(ke.cookies).reduce((Jn,zn)=>Jn+(Jn?"&":"")+mk.serialize(zn,ke.cookies[zn]),"");ke.headers.Cookie=nn}return ke.cookies&&delete ke.cookies,Kx(ke),ke}const TD=t=>t?t.replace(/\W/g,""):null,Zk=function(){var t=(0,mm.Z)(function*(i,n){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{returnEntireTree:l,baseDoc:_,requestInterceptor:v,responseInterceptor:O,parameterMacro:P,modelPropertyMacro:G,useCircularStructures:K,strategies:oe}=o,ue={spec:i,pathDiscriminator:n,baseDoc:_,requestInterceptor:v,responseInterceptor:O,parameterMacro:P,modelPropertyMacro:G,useCircularStructures:K,strategies:oe},ye=oe.find(xe=>xe.match(ue)).normalize(ue),Ue=yield nP({...ue,spec:ye,allowMetaPatches:!0,skipNormalization:!0});return!l&&Array.isArray(n)&&n.length&&(Ue.spec=n.reduce((xe,ke)=>xe?.[ke],Ue.spec)||null),Ue});return function(n,o){return t.apply(this,arguments)}}(),Wk=(t=>function(){var i=(0,mm.Z)(function*(n,o){const _={...t,...arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}};return Zk(n,o,_)});return function(n,o){return i.apply(this,arguments)}}())({strategies:[tP,eP,Kw]});var uP=s(88768),cP=Ln.createContext(null),dP=function Jk(t){t()},Kk=function(){return dP},fP={notify:function(){},get:function(){return[]}};function pP(t,i){var n,o=fP;function v(){K.onStateChange&&K.onStateChange()}function P(){n||(n=i?i.addNestedSub(v):t.subscribe(v),o=function Xk(){var t=Kk(),i=null,n=null;return{clear:function(){i=null,n=null},notify:function(){t(function(){for(var l=i;l;)l.callback(),l=l.next})},get:function(){for(var l=[],_=i;_;)l.push(_),_=_.next;return l},subscribe:function(l){var _=!0,v=n={callback:l,next:null,prev:n};return v.prev?v.prev.next=v:i=v,function(){!_||null===i||(_=!1,v.next?v.next.prev=v.prev:n=v.prev,v.prev?v.prev.next=v.next:i=v.next)}}}}())}var K={addNestedSub:function l(oe){return P(),o.subscribe(oe)},notifyNestedSubs:function _(){o.notify()},handleChangeWrapper:v,isSubscribed:function O(){return Boolean(n)},trySubscribe:P,tryUnsubscribe:function G(){n&&(n(),n=void 0,o.clear(),o=fP)},getListeners:function(){return o}};return K}var _P=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u"?Ln.useLayoutEffect:Ln.useEffect;const e$=function qk(t){var i=t.store,n=t.context,o=t.children,l=(0,Ln.useMemo)(function(){var O=pP(i);return{store:i,subscription:O}},[i]),_=(0,Ln.useMemo)(function(){return i.getState()},[i]);return _P(function(){var O=l.subscription;return O.onStateChange=O.notifyNestedSubs,O.trySubscribe(),_!==i.getState()&&O.notifyNestedSubs(),function(){O.tryUnsubscribe(),O.onStateChange=null}},[l,_]),Ln.createElement((n||cP).Provider,{value:l},o)};function Ng(){return Ng=Object.assign?Object.assign.bind():function(t){for(var i=1;i<arguments.length;i++){var n=arguments[i];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},Ng.apply(this,arguments)}function eS(t,i){if(null==t)return{};var l,_,n={},o=Object.keys(t);for(_=0;_<o.length;_++)!(i.indexOf(l=o[_])>=0)&&(n[l]=t[l]);return n}var t$=s(62568),hP=s.n(t$),n$=s(56261),r$=["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"],i$=["reactReduxForwardedRef"],o$=[],s$=[null,null];function a$(t,i){return[i.payload,t[1]+1]}function mP(t,i,n){_P(function(){return t.apply(void 0,i)},n)}function l$(t,i,n,o,l,_,v){t.current=o,i.current=l,n.current=!1,_.current&&(_.current=null,v())}function u$(t,i,n,o,l,_,v,O,P,G){if(t){var K=!1,oe=null,ue=function(){if(!K){var xe,ke,Ue=i.getState();try{xe=o(Ue,l.current)}catch(we){ke=we,oe=we}ke||(oe=null),xe===_.current?v.current||P():(_.current=xe,O.current=xe,v.current=!0,G({type:"STORE_UPDATED",payload:{error:ke}}))}};return n.onStateChange=ue,n.trySubscribe(),ue(),function(){if(K=!0,n.tryUnsubscribe(),n.onStateChange=null,oe)throw oe}}}var c$=function(){return[null,0]};function d$(t,i){void 0===i&&(i={});var o=i.getDisplayName,l=void 0===o?function(Yt){return"ConnectAdvanced("+Yt+")"}:o,_=i.methodName,v=void 0===_?"connectAdvanced":_,O=i.renderCountProp,P=void 0===O?void 0:O,G=i.shouldHandleStateChanges,K=void 0===G||G,oe=i.storeKey,ue=void 0===oe?"store":oe,Ue=i.forwardRef,xe=void 0!==Ue&&Ue,ke=i.context,we=void 0===ke?cP:ke,Z=eS(i,r$),Dt=we;return function(ln){var $n=ln.displayName||ln.name||"Component",nn=l($n),Jn=Ng({},Z,{getDisplayName:l,methodName:v,renderCountProp:P,shouldHandleStateChanges:K,storeKey:ue,displayName:nn,wrappedComponentName:$n,WrappedComponent:ln}),zn=Z.pure,$r=zn?Ln.useMemo:function(lr){return lr()};function ui(lr){var ar=(0,Ln.useMemo)(function(){var li=lr.reactReduxForwardedRef,eo=eS(lr,i$);return[lr.context,li,eo]},[lr]),Cr=ar[0],Wn=ar[1],ai=ar[2],ho=(0,Ln.useMemo)(function(){return Cr&&Cr.Consumer&&(0,n$.isContextConsumer)(Ln.createElement(Cr.Consumer,null))?Cr:Dt},[Cr,Dt]),Yi=(0,Ln.useContext)(ho),lo=Boolean(lr.store)&&Boolean(lr.store.getState)&&Boolean(lr.store.dispatch),Kn=(Boolean(Yi)&&Boolean(Yi.store),lo?lr.store:Yi.store),Nn=(0,Ln.useMemo)(function(){return function Zr(lr){return t(lr.dispatch,Jn)}(Kn)},[Kn]),_i=(0,Ln.useMemo)(function(){if(!K)return s$;var li=pP(Kn,lo?null:Yi.subscription),eo=li.notifyNestedSubs.bind(li);return[li,eo]},[Kn,lo,Yi]),Zi=_i[0],So=_i[1],us=(0,Ln.useMemo)(function(){return lo?Yi:Ng({},Yi,{subscription:Zi})},[lo,Yi,Zi]),Zo=(0,Ln.useReducer)(a$,o$,c$),va=Zo[0][0],qi=Zo[1];if(va&&va.error)throw va.error;var xo=(0,Ln.useRef)(),$o=(0,Ln.useRef)(ai),rt=(0,Ln.useRef)(),kt=(0,Ln.useRef)(!1),Lt=$r(function(){return rt.current&&ai===$o.current?rt.current:Nn(Kn.getState(),ai)},[Kn,va,ai]);mP(l$,[$o,xo,kt,ai,Lt,rt,So]),mP(u$,[K,Kn,Zi,Nn,$o,xo,kt,rt,So,qi],[Kn,Zi,Nn]);var cr=(0,Ln.useMemo)(function(){return Ln.createElement(ln,Ng({},Lt,{ref:Wn}))},[Wn,ln,Lt]);return(0,Ln.useMemo)(function(){return K?Ln.createElement(ho.Provider,{value:us},cr):cr},[ho,cr,us])}var gi=zn?Ln.memo(ui):ui;if(gi.WrappedComponent=ln,gi.displayName=ui.displayName=nn,xe){var Un=Ln.forwardRef(function(ar,Cr){return Ln.createElement(gi,Ng({},ar,{reactReduxForwardedRef:Cr}))});return Un.displayName=nn,Un.WrappedComponent=ln,hP()(Un,ln)}return hP()(gi,ln)}}function gP(t,i){return t===i?0!==t||0!==i||1/t==1/i:t!=t&&i!=i}function CD(t,i){if(gP(t,i))return!0;if("object"!=typeof t||null===t||"object"!=typeof i||null===i)return!1;var n=Object.keys(t),o=Object.keys(i);if(n.length!==o.length)return!1;for(var l=0;l<n.length;l++)if(!Object.prototype.hasOwnProperty.call(i,n[l])||!gP(t[n[l]],i[n[l]]))return!1;return!0}function MD(t){return function(n,o){var l=t(n,o);function _(){return l}return _.dependsOnOwnProps=!1,_}}function vP(t){return null!=t.dependsOnOwnProps?Boolean(t.dependsOnOwnProps):1!==t.length}function yP(t,i){return function(o,l){var v=function(P,G){return v.dependsOnOwnProps?v.mapToProps(P,G):v.mapToProps(P)};return v.dependsOnOwnProps=!0,v.mapToProps=function(P,G){v.mapToProps=t,v.dependsOnOwnProps=vP(t);var K=v(P,G);return"function"==typeof K&&(v.mapToProps=K,v.dependsOnOwnProps=vP(K),K=v(P,G)),K},v}}const m$=[function p$(t){return"function"==typeof t?yP(t):void 0},function _$(t){return t?void 0:MD(function(i){return{dispatch:i}})},function h$(t){return t&&"object"==typeof t?MD(function(i){return function f$(t,i){var n={},o=function(v){var O=t[v];"function"==typeof O&&(n[v]=function(){return i(O.apply(void 0,arguments))})};for(var l in t)o(l);return n}(t,i)}):void 0}],y$=[function g$(t){return"function"==typeof t?yP(t):void 0},function v$(t){return t?void 0:MD(function(){return{}})}];function E$(t,i,n){return Ng({},n,t,i)}const C$=[function b$(t){return"function"==typeof t?function S$(t){return function(n,o){var P,_=o.pure,v=o.areMergedPropsEqual,O=!1;return function(K,oe,ue){var pe=t(K,oe,ue);return O?(!_||!v(pe,P))&&(P=pe):(O=!0,P=pe),P}}}(t):void 0},function T$(t){return t?void 0:function(){return E$}}];var M$=["initMapStateToProps","initMapDispatchToProps","initMergeProps"];function O$(t,i,n,o){return function(_,v){return n(t(_,v),i(o,v),v)}}function A$(t,i,n,o,l){var G,K,oe,ue,pe,_=l.areStatesEqual,v=l.areOwnPropsEqual,O=l.areStatePropsEqual,P=!1;return function(Ft,Dt){return P?function we(Z,Ft){var Dt=!v(Ft,K),Yt=!_(Z,G,Ft,K);return G=Z,K=Ft,Dt&&Yt?function Ue(){return oe=t(G,K),i.dependsOnOwnProps&&(ue=i(o,K)),pe=n(oe,ue,K)}():Dt?function xe(){return t.dependsOnOwnProps&&(oe=t(G,K)),i.dependsOnOwnProps&&(ue=i(o,K)),pe=n(oe,ue,K)}():Yt?function ke(){var Z=t(G,K),Ft=!O(Z,oe);return oe=Z,Ft&&(pe=n(oe,ue,K)),pe}():pe}(Ft,Dt):function ye(Z,Ft){return oe=t(G=Z,K=Ft),ue=i(o,K),pe=n(oe,ue,K),P=!0,pe}(Ft,Dt)}}function D$(t,i){var n=i.initMapStateToProps,o=i.initMapDispatchToProps,l=i.initMergeProps,_=eS(i,M$),v=n(t,_),O=o(t,_),P=l(t,_);return(_.pure?A$:O$)(v,O,P,t,_)}var R$=["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"];function OD(t,i,n){for(var o=i.length-1;o>=0;o--){var l=i[o](t);if(l)return l}return function(_,v){throw new Error("Invalid value of type "+typeof t+" for "+n+" argument when connecting component "+v.wrappedComponentName+".")}}function x$(t,i){return t===i}function w$(t){var i=void 0===t?{}:t,n=i.connectHOC,o=void 0===n?d$:n,l=i.mapStateToPropsFactories,_=void 0===l?y$:l,v=i.mapDispatchToPropsFactories,O=void 0===v?m$:v,P=i.mergePropsFactories,G=void 0===P?C$:P,K=i.selectorFactory,oe=void 0===K?D$:K;return function(pe,ye,Ue,xe){void 0===xe&&(xe={});var we=xe.pure,Z=void 0===we||we,Ft=xe.areStatesEqual,Dt=void 0===Ft?x$:Ft,Yt=xe.areOwnPropsEqual,ln=void 0===Yt?CD:Yt,$n=xe.areStatePropsEqual,nn=void 0===$n?CD:$n,Jn=xe.areMergedPropsEqual,zn=void 0===Jn?CD:Jn,Zr=eS(xe,R$),$r=OD(pe,_,"mapStateToProps"),ui=OD(ye,O,"mapDispatchToProps"),gi=OD(Ue,G,"mergeProps");return o(oe,Ng({methodName:"connect",getDisplayName:function(lr){return"Connect("+lr+")"},shouldHandleStateChanges:Boolean(pe),initMapStateToProps:$r,initMapDispatchToProps:ui,initMergeProps:gi,pure:Z,areStatesEqual:Dt,areOwnPropsEqual:ln,areStatePropsEqual:nn,areMergedPropsEqual:zn},Zr))}}const P$=w$();dP=uP.unstable_batchedUpdates;var F$=s(12482),L$=s.n(F$),k$=s(80290),$$=s.n(k$);function AD(t,i){(null==i||i>t.length)&&(i=t.length);for(var n=0,o=new Array(i);n<i;n++)o[n]=t[n];return o}function j$(t){return function U$(t){if(Array.isArray(t))return AD(t)}(t)||function B$(t){if(typeof Symbol<"u"&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function G$(t,i){if(t){if("string"==typeof t)return AD(t,i);var n=Object.prototype.toString.call(t).slice(8,-1);if("Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return AD(t,i)}}(t)||function Y$(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function tS(t){return(tS="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(i){return typeof i}:function(i){return i&&"function"==typeof Symbol&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i})(t)}function DD(t,i,n){return(i=function V$(t){var i=function z$(t,i){if("object"!==tS(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,i||"default");if("object"!==tS(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===i?String:Number)(t)}(t,"string");return"symbol"===tS(i)?i:String(i)}(i))in t?Object.defineProperty(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[i]=n,t}function EP(t,i){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);i&&(o=o.filter(function(l){return Object.getOwnPropertyDescriptor(t,l).enumerable})),n.push.apply(n,o)}return n}function $0(t){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?EP(Object(n),!0).forEach(function(o){DD(t,o,n[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):EP(Object(n)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(n,o))})}return t}var RD={};function J$(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0,l=function W$(t){if(0===t.length||1===t.length)return t;var i=t.join(".");return RD[i]||(RD[i]=function Z$(t){var i=t.length;return 0===i||1===i?t:2===i?[t[0],t[1],"".concat(t[0],".").concat(t[1]),"".concat(t[1],".").concat(t[0])]:3===i?[t[0],t[1],t[2],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0])]:i>=4?[t[0],t[1],t[2],t[3],"".concat(t[0],".").concat(t[1]),"".concat(t[0],".").concat(t[2]),"".concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[0]),"".concat(t[1],".").concat(t[2]),"".concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[1]),"".concat(t[2],".").concat(t[3]),"".concat(t[3],".").concat(t[0]),"".concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[0]),"".concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[0],".").concat(t[1],".").concat(t[2],".").concat(t[3]),"".concat(t[0],".").concat(t[1],".").concat(t[3],".").concat(t[2]),"".concat(t[0],".").concat(t[2],".").concat(t[1],".").concat(t[3]),"".concat(t[0],".").concat(t[2],".").concat(t[3],".").concat(t[1]),"".concat(t[0],".").concat(t[3],".").concat(t[1],".").concat(t[2]),"".concat(t[0],".").concat(t[3],".").concat(t[2],".").concat(t[1]),"".concat(t[1],".").concat(t[0],".").concat(t[2],".").concat(t[3]),"".concat(t[1],".").concat(t[0],".").concat(t[3],".").concat(t[2]),"".concat(t[1],".").concat(t[2],".").concat(t[0],".").concat(t[3]),"".concat(t[1],".").concat(t[2],".").concat(t[3],".").concat(t[0]),"".concat(t[1],".").concat(t[3],".").concat(t[0],".").concat(t[2]),"".concat(t[1],".").concat(t[3],".").concat(t[2],".").concat(t[0]),"".concat(t[2],".").concat(t[0],".").concat(t[1],".").concat(t[3]),"".concat(t[2],".").concat(t[0],".").concat(t[3],".").concat(t[1]),"".concat(t[2],".").concat(t[1],".").concat(t[0],".").concat(t[3]),"".concat(t[2],".").concat(t[1],".").concat(t[3],".").concat(t[0]),"".concat(t[2],".").concat(t[3],".").concat(t[0],".").concat(t[1]),"".concat(t[2],".").concat(t[3],".").concat(t[1],".").concat(t[0]),"".concat(t[3],".").concat(t[0],".").concat(t[1],".").concat(t[2]),"".concat(t[3],".").concat(t[0],".").concat(t[2],".").concat(t[1]),"".concat(t[3],".").concat(t[1],".").concat(t[0],".").concat(t[2]),"".concat(t[3],".").concat(t[1],".").concat(t[2],".").concat(t[0]),"".concat(t[3],".").concat(t[2],".").concat(t[0],".").concat(t[1]),"".concat(t[3],".").concat(t[2],".").concat(t[1],".").concat(t[0])]:void 0}(t)),RD[i]}(t.filter(function(_){return"token"!==_}));return l.reduce(function(_,v){return $0($0({},_),n[v])},i)}function SP(t){return t.join(" ")}function bP(t){var i=t.node,n=t.stylesheet,o=t.style,l=void 0===o?{}:o,_=t.useInlineStyles,v=t.key,O=i.properties,G=i.tagName;if("text"===i.type)return i.value;if(G){var ue,oe=function Q$(t,i){var n=0;return function(o){return n+=1,o.map(function(l,_){return bP({node:l,stylesheet:t,useInlineStyles:i,key:"code-segment-".concat(n,"-").concat(_)})})}}(n,_);if(_){var pe=Object.keys(n).reduce(function(ke,we){return we.split(".").forEach(function(Z){ke.includes(Z)||ke.push(Z)}),ke},[]),ye=O.className&&O.className.includes("token")?["token"]:[],Ue=O.className&&ye.concat(O.className.filter(function(ke){return!pe.includes(ke)}));ue=$0($0({},O),{},{className:SP(Ue)||void 0,style:J$(O.className,Object.assign({},O.style,l),n)})}else ue=$0($0({},O),{},{className:SP(O.className)});var xe=oe(i.children);return Ln.createElement(G,Ng({key:v},ue),xe)}}var X$=["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"];function TP(t,i){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);i&&(o=o.filter(function(l){return Object.getOwnPropertyDescriptor(t,l).enumerable})),n.push.apply(n,o)}return n}function og(t){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?TP(Object(n),!0).forEach(function(o){DD(t,o,n[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):TP(Object(n)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(n,o))})}return t}var q$=/\n/g;function nH(t){var i=t.codeString,o=t.containerStyle,_=t.numberStyle,v=void 0===_?{}:_,O=t.startingLineNumber;return Ln.createElement("code",{style:Object.assign({},t.codeStyle,void 0===o?{float:"left",paddingRight:"10px"}:o)},function tH(t){var n=t.startingLineNumber,o=t.style;return t.lines.map(function(l,_){var v=_+n;return Ln.createElement("span",{key:"line-".concat(_),className:"react-syntax-highlighter-line-number",style:"function"==typeof o?o(v):o},"".concat(v,"\n"))})}({lines:i.replace(/\n$/,"").split("\n"),style:v,startingLineNumber:O}))}function rH(t){return"".concat(t.toString().length,".25em")}function CP(t,i){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(t),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:i},children:[{type:"text",value:t}]}}function MP(t,i,n){var o={display:"inline-block",minWidth:rH(n),paddingRight:"1em",textAlign:"right",userSelect:"none"},l="function"==typeof t?t(i):t;return og(og({},o),l)}function IC(t){var i=t.children,n=t.lineNumber,o=t.lineNumberStyle,l=t.largestLineNumber,_=t.showInlineLineNumbers,v=t.lineProps,O=void 0===v?{}:v,P=t.className,G=void 0===P?[]:P,K=t.showLineNumbers,oe=t.wrapLongLines,ue="function"==typeof O?O(n):O;if(ue.className=G,n&&_){var pe=MP(o,n,l);i.unshift(CP(n,pe))}return oe&K&&(ue.style=og(og({},ue.style),{},{display:"flex"})),{type:"element",tagName:"span",properties:ue,children:i}}function OP(t){for(var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=0;o<t.length;o++){var l=t[o];if("text"===l.type)n.push(IC({children:[l],className:j$(new Set(i))}));else if(l.children){var _=i.concat(l.properties.className);OP(l.children,_).forEach(function(v){return n.push(v)})}}return n}function iH(t,i,n,o,l,_,v,O,P){var G,K=OP(t.value),oe=[],ue=-1,pe=0;function xe(Dt,Yt){var ln=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return i||ln.length>0?function ye(Dt,Yt){return IC({children:Dt,lineNumber:Yt,lineNumberStyle:O,largestLineNumber:v,showInlineLineNumbers:l,lineProps:n,className:arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],showLineNumbers:o,wrapLongLines:P})}(Dt,Yt,ln):function Ue(Dt,Yt){if(o&&Yt&&l){var ln=MP(O,Yt,v);Dt.unshift(CP(Yt,ln))}return Dt}(Dt,Yt)}for(var ke=function(){var Yt=K[pe],ln=Yt.children[0].value,$n=function eH(t){return t.match(q$)}(ln);if($n){var nn=ln.split("\n");nn.forEach(function(Jn,zn){var Zr=o&&oe.length+_,$r={type:"text",value:"".concat(Jn,"\n")};if(0===zn){var gi=xe(K.slice(ue+1,pe).concat(IC({children:[$r],className:Yt.properties.className})),Zr);oe.push(gi)}else if(zn===nn.length-1){var Un=K[pe+1]&&K[pe+1].children&&K[pe+1].children[0],lr={type:"text",value:"".concat(Jn)};if(Un){var ar=IC({children:[lr],className:Yt.properties.className});K.splice(pe+1,0,ar)}else{var Wn=xe([lr],Zr,Yt.properties.className);oe.push(Wn)}}else{var ho=xe([$r],Zr,Yt.properties.className);oe.push(ho)}}),ue=pe}pe++};pe<K.length;)ke();if(ue!==K.length-1){var we=K.slice(ue+1,K.length);if(we&&we.length){var Ft=xe(we,o&&oe.length+_);oe.push(Ft)}}return i?oe:(G=[]).concat.apply(G,oe)}function oH(t){var n=t.stylesheet,o=t.useInlineStyles;return t.rows.map(function(l,_){return bP({node:l,stylesheet:n,useInlineStyles:o,key:"code-segement".concat(_)})})}function AP(t){return t&&typeof t.highlightAuto<"u"}var DP=s(74538),RP=function aH(t,i){return function(o){var l=o.language,_=o.children,v=o.style,O=void 0===v?i:v,P=o.customStyle,G=void 0===P?{}:P,K=o.codeTagProps,oe=void 0===K?{className:l?"language-".concat(l):void 0,style:og(og({},O['code[class*="language-"]']),O['code[class*="language-'.concat(l,'"]')])}:K,ue=o.useInlineStyles,pe=void 0===ue||ue,ye=o.showLineNumbers,Ue=void 0!==ye&&ye,xe=o.showInlineLineNumbers,ke=void 0===xe||xe,we=o.startingLineNumber,Z=void 0===we?1:we,Ft=o.lineNumberContainerStyle,Dt=o.lineNumberStyle,Yt=void 0===Dt?{}:Dt,ln=o.wrapLines,$n=o.wrapLongLines,nn=void 0!==$n&&$n,Jn=o.lineProps,zn=void 0===Jn?{}:Jn,Zr=o.renderer,$r=o.PreTag,ui=void 0===$r?"pre":$r,gi=o.CodeTag,Un=void 0===gi?"code":gi,lr=o.code,ar=void 0===lr?(Array.isArray(_)?_[0]:_)||"":lr,Cr=o.astGenerator,Wn=function H$(t,i){if(null==t)return{};var o,l,n=eS(t,i);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(t);for(l=0;l<_.length;l++)!(i.indexOf(o=_[l])>=0)&&Object.prototype.propertyIsEnumerable.call(t,o)&&(n[o]=t[o])}return n}(o,X$);Cr=Cr||t;var ai=Ue?Ln.createElement(nH,{containerStyle:Ft,codeStyle:oe.style||{},numberStyle:Yt,startingLineNumber:Z,codeString:ar}):null,ho=O.hljs||O['pre[class*="language-"]']||{backgroundColor:"#fff"},Yi=AP(Cr)?"hljs":"prismjs",lo=Object.assign({},Wn,pe?{style:Object.assign({},ho,G)}:{className:Wn.className?"".concat(Yi," ").concat(Wn.className):Yi,style:Object.assign({},G)});if(oe.style=og(og({},oe.style),{},nn?{whiteSpace:"pre-wrap"}:{whiteSpace:"pre"}),!Cr)return Ln.createElement(ui,lo,ai,Ln.createElement(Un,oe,ar));(void 0===ln&&Zr||nn)&&(ln=!0),Zr=Zr||oH;var pi=[{type:"text",value:ar}],Kn=function sH(t){var i=t.astGenerator,n=t.language,o=t.code,l=t.defaultCodeValue;if(AP(i)){var _=function(t,i){return-1!==t.listLanguages().indexOf(i)}(i,n);return"text"===n?{value:l,language:"text"}:_?i.highlight(n,o):i.highlightAuto(o)}try{return n&&"text"!==n?{value:i.highlight(o,n)}:{value:l}}catch{return{value:l}}}({astGenerator:Cr,language:l,code:ar,defaultCodeValue:pi});null===Kn.language&&(Kn.value=pi);var _i=iH(Kn,ln,zn,Ue,ke,Z,Kn.value.length+Z,Yt,nn);return Ln.createElement(ui,lo,Ln.createElement(Un,oe,!ke&&ai,Zr({rows:_i,stylesheet:O,useInlineStyles:pe})))}}(DP,{});RP.registerLanguage=DP.registerLanguage;const lH=RP;var uH=s(36147);const dH=s.n(uH)();var fH=s(92229);const _H=s.n(fH)();var hH=s(13546);const gH=s.n(hH)();var vH=s(4357);const EH=s.n(vH)();var SH=s(44776);const TH=s.n(SH)();var CH=s(28390);const OH=s.n(CH)();var AH=s(78932);const RH=s.n(AH)(),xH={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#333",color:"white"},"hljs-name":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-code":{fontStyle:"italic",color:"#888"},"hljs-emphasis":{fontStyle:"italic"},"hljs-tag":{color:"#62c8f3"},"hljs-variable":{color:"#ade5fc"},"hljs-template-variable":{color:"#ade5fc"},"hljs-selector-id":{color:"#ade5fc"},"hljs-selector-class":{color:"#ade5fc"},"hljs-string":{color:"#a2fca2"},"hljs-bullet":{color:"#d36363"},"hljs-type":{color:"#ffa"},"hljs-title":{color:"#ffa"},"hljs-section":{color:"#ffa"},"hljs-attribute":{color:"#ffa"},"hljs-quote":{color:"#ffa"},"hljs-built_in":{color:"#ffa"},"hljs-builtin-name":{color:"#ffa"},"hljs-number":{color:"#d36363"},"hljs-symbol":{color:"#d36363"},"hljs-keyword":{color:"#fcc28c"},"hljs-selector-tag":{color:"#fcc28c"},"hljs-literal":{color:"#fcc28c"},"hljs-comment":{color:"#888"},"hljs-deletion":{color:"#333",backgroundColor:"#fc9b9b"},"hljs-regexp":{color:"#c6b4f0"},"hljs-link":{color:"#c6b4f0"},"hljs-meta":{color:"#fc9b9b"},"hljs-addition":{backgroundColor:"#a2fca2",color:"#333"}},wH={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#222",color:"#aaa"},"hljs-subst":{color:"#aaa"},"hljs-section":{color:"#fff",fontWeight:"bold"},"hljs-comment":{color:"#444"},"hljs-quote":{color:"#444"},"hljs-meta":{color:"#444"},"hljs-string":{color:"#ffcc33"},"hljs-symbol":{color:"#ffcc33"},"hljs-bullet":{color:"#ffcc33"},"hljs-regexp":{color:"#ffcc33"},"hljs-number":{color:"#00cc66"},"hljs-addition":{color:"#00cc66"},"hljs-built_in":{color:"#32aaee"},"hljs-builtin-name":{color:"#32aaee"},"hljs-literal":{color:"#32aaee"},"hljs-type":{color:"#32aaee"},"hljs-template-variable":{color:"#32aaee"},"hljs-attribute":{color:"#32aaee"},"hljs-link":{color:"#32aaee"},"hljs-keyword":{color:"#6644aa"},"hljs-selector-tag":{color:"#6644aa"},"hljs-name":{color:"#6644aa"},"hljs-selector-id":{color:"#6644aa"},"hljs-selector-class":{color:"#6644aa"},"hljs-title":{color:"#bb1166"},"hljs-variable":{color:"#bb1166"},"hljs-deletion":{color:"#bb1166"},"hljs-template-tag":{color:"#bb1166"},"hljs-doctag":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-emphasis":{fontStyle:"italic"}},PH={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#272822",color:"#ddd"},"hljs-tag":{color:"#f92672"},"hljs-keyword":{color:"#f92672",fontWeight:"bold"},"hljs-selector-tag":{color:"#f92672",fontWeight:"bold"},"hljs-literal":{color:"#f92672",fontWeight:"bold"},"hljs-strong":{color:"#f92672"},"hljs-name":{color:"#f92672"},"hljs-code":{color:"#66d9ef"},"hljs-class .hljs-title":{color:"white"},"hljs-attribute":{color:"#bf79db"},"hljs-symbol":{color:"#bf79db"},"hljs-regexp":{color:"#bf79db"},"hljs-link":{color:"#bf79db"},"hljs-string":{color:"#a6e22e"},"hljs-bullet":{color:"#a6e22e"},"hljs-subst":{color:"#a6e22e"},"hljs-title":{color:"#a6e22e",fontWeight:"bold"},"hljs-section":{color:"#a6e22e",fontWeight:"bold"},"hljs-emphasis":{color:"#a6e22e"},"hljs-type":{color:"#a6e22e",fontWeight:"bold"},"hljs-built_in":{color:"#a6e22e"},"hljs-builtin-name":{color:"#a6e22e"},"hljs-selector-attr":{color:"#a6e22e"},"hljs-selector-pseudo":{color:"#a6e22e"},"hljs-addition":{color:"#a6e22e"},"hljs-variable":{color:"#a6e22e"},"hljs-template-tag":{color:"#a6e22e"},"hljs-template-variable":{color:"#a6e22e"},"hljs-comment":{color:"#75715e"},"hljs-quote":{color:"#75715e"},"hljs-deletion":{color:"#75715e"},"hljs-meta":{color:"#75715e"},"hljs-doctag":{fontWeight:"bold"},"hljs-selector-id":{fontWeight:"bold"}},NH={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#2E3440",color:"#D8DEE9"},"hljs-subst":{color:"#D8DEE9"},"hljs-selector-tag":{color:"#81A1C1"},"hljs-selector-id":{color:"#8FBCBB",fontWeight:"bold"},"hljs-selector-class":{color:"#8FBCBB"},"hljs-selector-attr":{color:"#8FBCBB"},"hljs-selector-pseudo":{color:"#88C0D0"},"hljs-addition":{backgroundColor:"rgba(163, 190, 140, 0.5)"},"hljs-deletion":{backgroundColor:"rgba(191, 97, 106, 0.5)"},"hljs-built_in":{color:"#8FBCBB"},"hljs-type":{color:"#8FBCBB"},"hljs-class":{color:"#8FBCBB"},"hljs-function":{color:"#88C0D0"},"hljs-function > .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},IH={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},FH={"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}};var LH=s(43155),kH=s(35037),$H=s.n(kH),HH=s(93890),UH=s.n(HH),BH=s(98990),GH=s.n(BH),YH=s(52190),jH=s.n(YH),zH=s(71166),VH=s.n(zH),ZH=s(52243),WH=s.n(ZH),xP=s(20611),H0=s(71432),xD=s(70729),wD=s(15123),wP=s(26421);function mv(t){var i;return(mv=wD?H0(i=wP).call(i):function(o){return o.__proto__||wP(o)})(t)}function FC(){var t;return FC=typeof Reflect<"u"&&xP?H0(t=xP).call(t):function(n,o,l){var _=function JH(t,i){for(;!Object.prototype.hasOwnProperty.call(t,i)&&null!==(t=mv(t)););return t}(n,o);if(_){var v=xD(_,o);return v.get?v.get.call(arguments.length<3?n:l):v.value}},FC.apply(this,arguments)}var PP=s(28296),NP=s(47194);function nS(t,i){var n;return(nS=wD?H0(n=wD).call(n):function(l,_){return l.__proto__=_,l})(t,i)}var PD=s(55451),rS=s(29044),ND=s(99692);function IP(){if(typeof Reflect>"u"||!rS||rS.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(rS(Boolean,[],function(){})),!0}catch{return!1}}function LC(t,i,n){var o;return(LC=IP()?H0(o=rS).call(o):function(_,v,O){var P=[null];ND(P).apply(P,v);var K=new(H0(Function).apply(_,P));return O&&nS(K,O.prototype),K}).apply(null,arguments)}function ID(t){var i="function"==typeof PP?new PP:void 0;return ID=function(o){if(null===o||!function QH(t){var i;return-1!==PD(i=Function.toString.call(t)).call(i,"[native code]")}(o))return o;if("function"!=typeof o)throw new TypeError("Super expression must either be null or a function");if(typeof i<"u"){if(i.has(o))return i.get(o);i.set(o,l)}function l(){return LC(o,arguments,mv(this).constructor)}return l.prototype=NP(o.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),nS(l,o)},ID(t)}var KH=s(45163),XH=s.n(KH),qH=s(30071),eU=s.n(qH),tU=s(58711),nU=s.n(tU),rU=s(15886),iU=s.n(rU),oU=s(34377),sU=s.n(oU),aU=s(28086),lU=s.n(aU),uU=s(56166),cU=s.n(uU),dU=s(10068),fU=s.n(dU),pU=s(45819),_U=s.n(pU),hU=s(84901),mU=s.n(hU),gU=s(35524),vU=s.n(gU),yU=s(71851),EU=s.n(yU),SU=s(91465),bU=s.n(SU),TU=s(37940),CU=s.n(TU),MU=s(35431),OU=s.n(MU),AU=s(46558),DU=s.n(AU),RU=s(53625),xU=s.n(RU),wU=s(31978),PU=s.n(wU),NU=s(84220),IU=s.n(NU),FU=s(40984),LU=s.n(FU),kU=s(44859),$U=s.n(kU),HU=s(54082),UU=s.n(HU),BU=s(30508),GU=s.n(BU),YU=s(46245),jU=s.n(YU),zU=s(35517),VU=s.n(zU),ZU=s(87513),WU=s.n(ZU),JU=s(69253),QU=s.n(JU);function FP(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function KU(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")}var iS=s(32944),XU=s(63816);function gv(t){return(gv="function"==typeof cv&&"symbol"==typeof XU?function(i){return typeof i}:function(i){return i&&"function"==typeof cv&&i.constructor===cv&&i!==cv.prototype?"symbol":typeof i})(t)}var qU=s(72378);function LP(t){var i=function eB(t,i){if("object"!==gv(t)||null===t)return t;var n=t[qU];if(void 0!==n){var o=n.call(t,i||"default");if("object"!==gv(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===i?String:Number)(t)}(t,"string");return"symbol"===gv(i)?i:String(i)}function kP(t,i){for(var n=0;n<i.length;n++){var o=i[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),iS(t,LP(o.key),o)}}function tB(t,i,n){return i&&kP(t.prototype,i),n&&kP(t,n),iS(t,"prototype",{writable:!1}),t}function nB(t,i){var n=typeof cv<"u"&&vA(t)||t["@@iterator"];if(!n){if(gA(t)||(n=uC(t))||i&&t&&"number"==typeof t.length){n&&(t=n);var o=0,l=function(){};return{s:l,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(G){throw G},f:l}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var O,_=!0,v=!1;return{s:function(){n=n.call(t)},n:function(){var G=n.next();return _=G.done,G},e:function(G){v=!0,O=G},f:function(){try{!_&&null!=n.return&&n.return()}finally{if(v)throw O}}}}function iB(t){var i=IP();return function(){var l,o=mv(t);if(i){var _=mv(this).constructor;l=rS(o,arguments,_)}else l=o.apply(this,arguments);return function rB(t,i){if(i&&("object"===gv(i)||"function"==typeof i))return i;if(void 0!==i)throw new TypeError("Derived constructors may only return object or undefined");return FP(t)}(this,l)}}function $P(t,i,n){return(i=LP(i))in t?iS(t,i,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[i]=n,t}var HP=s(96973);function FD(){var t;return FD=HP?H0(t=HP).call(t):function(i){for(var n=1;n<arguments.length;n++){var o=arguments[n];for(var l in o)Object.prototype.hasOwnProperty.call(o,l)&&(i[l]=o[l])}return i},FD.apply(this,arguments)}function oB(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Super expression must either be null or a function");t.prototype=NP(i&&i.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),iS(t,"prototype",{writable:!1}),i&&nS(t,i)}var UP=s(37785),kC=s(33969),sB=s(73712),BP=s(58044),GP=s(48299),aB=s(56805);function YP(t,i){var n=UP(t);if(kC){var o=kC(t);i&&(o=sB(o).call(o,function(l){return xD(t,l).enumerable})),ND(n).apply(n,o)}return n}function lB(t){for(var i=1;i<arguments.length;i++){var n,o,l=null!=arguments[i]?arguments[i]:{};i%2?BP(n=YP(Object(l),!0)).call(n,function(_){$P(t,_,l[_])}):GP?aB(t,GP(l)):BP(o=YP(Object(l))).call(o,function(_){iS(t,_,xD(l,_))})}return t}function cB(t,i){if(null==t)return{};var o,l,n=function uB(t,i){if(null==t)return{};var l,_,n={},o=UP(t);for(_=0;_<o.length;_++)l=o[_],!(PD(i).call(i,l)>=0)&&(n[l]=t[l]);return n}(t,i);if(kC){var _=kC(t);for(l=0;l<_.length;l++)o=_[l],!(PD(i).call(i,o)>=0)&&Object.prototype.propertyIsEnumerable.call(t,o)&&(n[o]=t[o])}return n}function fB(t,i){return F3(t)||function dB(t,i){var n=null==t?null:typeof cv<"u"&&vA(t)||t["@@iterator"];if(null!=n){var o,l,_,v,O=[],P=!0,G=!1;try{if(_=(n=n.call(t)).next,0===i){if(Object(n)!==n)return;P=!1}else for(;!(P=(o=_.call(n)).done)&&(ND(O).call(O,o.value),O.length!==i);P=!0);}catch(K){G=!0,l=K}finally{try{if(!P&&null!=n.return&&(v=n.return(),Object(v)!==v))return}finally{if(G)throw l}}return O}}(t,i)||uC(t,i)||$3()}function hB(t){return function pB(t){if(gA(t))return yA(t)}(t)||k3(t)||uC(t)||function _B(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var mB=s(96434),gB=s.t(mB,2),vB=s(82885),yB=s.n(vB),EB=s(12658),SB=s.t(EB,2),vv=s(52129),bB=s.n(vv);function jP(t){return typeof t>"u"||null===t}var yp={isNothing:jP,isObject:function TB(t){return"object"==typeof t&&null!==t},toArray:function CB(t){return Array.isArray(t)?t:jP(t)?[]:[t]},repeat:function OB(t,i){var o,n="";for(o=0;o<i;o+=1)n+=t;return n},isNegativeZero:function AB(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function MB(t,i){var n,o,l,_;if(i)for(n=0,o=(_=Object.keys(i)).length;n<o;n+=1)t[l=_[n]]=i[l];return t}};function zP(t,i){var n="",o=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(n+='in "'+t.mark.name+'" '),n+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!i&&t.mark.snippet&&(n+="\n\n"+t.mark.snippet),o+" "+n):o}function oS(t,i){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=i,this.message=zP(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}(oS.prototype=Object.create(Error.prototype)).constructor=oS,oS.prototype.toString=function(i){return this.name+": "+zP(this,i)};var B_=oS;function LD(t,i,n,o,l){var _="",v="",O=Math.floor(l/2)-1;return o-i>O&&(i=o-O+(_=" ... ").length),n-o>O&&(n=o+O-(v=" ...").length),{str:_+t.slice(i,n).replace(/\t/g,"\u2192")+v,pos:o-i+_.length}}function kD(t,i){return yp.repeat(" ",i-t.length)+t}var FB=function IB(t,i){if(i=Object.create(i||null),!t.buffer)return null;i.maxLength||(i.maxLength=79),"number"!=typeof i.indent&&(i.indent=1),"number"!=typeof i.linesBefore&&(i.linesBefore=3),"number"!=typeof i.linesAfter&&(i.linesAfter=2);for(var _,n=/\r?\n|\r|\0/g,o=[0],l=[],v=-1;_=n.exec(t.buffer);)l.push(_.index),o.push(_.index+_[0].length),t.position<=_.index&&v<0&&(v=o.length-2);v<0&&(v=o.length-1);var P,G,O="",K=Math.min(t.line+i.linesAfter,l.length).toString().length,oe=i.maxLength-(i.indent+K+3);for(P=1;P<=i.linesBefore&&!(v-P<0);P++)G=LD(t.buffer,o[v-P],l[v-P],t.position-(o[v]-o[v-P]),oe),O=yp.repeat(" ",i.indent)+kD((t.line-P+1).toString(),K)+" | "+G.str+"\n"+O;for(G=LD(t.buffer,o[v],l[v],t.position,oe),O+=yp.repeat(" ",i.indent)+kD((t.line+1).toString(),K)+" | "+G.str+"\n",O+=yp.repeat("-",i.indent+K+3+G.pos)+"^\n",P=1;P<=i.linesAfter&&!(v+P>=l.length);P++)G=LD(t.buffer,o[v+P],l[v+P],t.position-(o[v]-o[v+P]),oe),O+=yp.repeat(" ",i.indent)+kD((t.line+P+1).toString(),K)+" | "+G.str+"\n";return O.replace(/\n$/,"")},LB=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],kB=["scalar","sequence","mapping"],e_=function HB(t,i){if(i=i||{},Object.keys(i).forEach(function(n){if(-1===LB.indexOf(n))throw new B_('Unknown option "'+n+'" is met in definition of "'+t+'" YAML type.')}),this.options=i,this.tag=t,this.kind=i.kind||null,this.resolve=i.resolve||function(){return!0},this.construct=i.construct||function(n){return n},this.instanceOf=i.instanceOf||null,this.predicate=i.predicate||null,this.represent=i.represent||null,this.representName=i.representName||null,this.defaultStyle=i.defaultStyle||null,this.multi=i.multi||!1,this.styleAliases=function $B(t){var i={};return null!==t&&Object.keys(t).forEach(function(n){t[n].forEach(function(o){i[String(o)]=n})}),i}(i.styleAliases||null),-1===kB.indexOf(this.kind))throw new B_('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function VP(t,i){var n=[];return t[i].forEach(function(o){var l=n.length;n.forEach(function(_,v){_.tag===o.tag&&_.kind===o.kind&&_.multi===o.multi&&(l=v)}),n[l]=o}),n}function $D(t){return this.extend(t)}$D.prototype.extend=function(i){var n=[],o=[];if(i instanceof e_)o.push(i);else if(Array.isArray(i))o=o.concat(i);else{if(!i||!Array.isArray(i.implicit)&&!Array.isArray(i.explicit))throw new B_("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");i.implicit&&(n=n.concat(i.implicit)),i.explicit&&(o=o.concat(i.explicit))}n.forEach(function(_){if(!(_ instanceof e_))throw new B_("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(_.loadKind&&"scalar"!==_.loadKind)throw new B_("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(_.multi)throw new B_("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),o.forEach(function(_){if(!(_ instanceof e_))throw new B_("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var l=Object.create($D.prototype);return l.implicit=(this.implicit||[]).concat(n),l.explicit=(this.explicit||[]).concat(o),l.compiledImplicit=VP(l,"implicit"),l.compiledExplicit=VP(l,"explicit"),l.compiledTypeMap=function UB(){var i,n,t={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function o(l){l.multi?(t.multi[l.kind].push(l),t.multi.fallback.push(l)):t[l.kind][l.tag]=t.fallback[l.tag]=l}for(i=0,n=arguments.length;i<n;i+=1)arguments[i].forEach(o);return t}(l.compiledImplicit,l.compiledExplicit),l};var ZP=$D,WP=new e_("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),JP=new e_("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),QP=new e_("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}}),KP=new ZP({explicit:[WP,JP,QP]}),XP=new e_("tag:yaml.org,2002:null",{kind:"scalar",resolve:function BB(t){if(null===t)return!0;var i=t.length;return 1===i&&"~"===t||4===i&&("null"===t||"Null"===t||"NULL"===t)},construct:function GB(){return null},predicate:function YB(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"}),qP=new e_("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function jB(t){if(null===t)return!1;var i=t.length;return 4===i&&("true"===t||"True"===t||"TRUE"===t)||5===i&&("false"===t||"False"===t||"FALSE"===t)},construct:function zB(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function VB(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function ZB(t){return 48<=t&&t<=57||65<=t&&t<=70||97<=t&&t<=102}function WB(t){return 48<=t&&t<=55}function JB(t){return 48<=t&&t<=57}var e6=new e_("tag:yaml.org,2002:int",{kind:"scalar",resolve:function QB(t){if(null===t)return!1;var l,i=t.length,n=0,o=!1;if(!i)return!1;if(("-"===(l=t[n])||"+"===l)&&(l=t[++n]),"0"===l){if(n+1===i)return!0;if("b"===(l=t[++n])){for(n++;n<i;n++)if("_"!==(l=t[n])){if("0"!==l&&"1"!==l)return!1;o=!0}return o&&"_"!==l}if("x"===l){for(n++;n<i;n++)if("_"!==(l=t[n])){if(!ZB(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==l}if("o"===l){for(n++;n<i;n++)if("_"!==(l=t[n])){if(!WB(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==l}}if("_"===l)return!1;for(;n<i;n++)if("_"!==(l=t[n])){if(!JB(t.charCodeAt(n)))return!1;o=!0}return!(!o||"_"===l)},construct:function KB(t){var o,i=t,n=1;if(-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),("-"===(o=i[0])||"+"===o)&&("-"===o&&(n=-1),o=(i=i.slice(1))[0]),"0"===i)return 0;if("0"===o){if("b"===i[1])return n*parseInt(i.slice(2),2);if("x"===i[1])return n*parseInt(i.slice(2),16);if("o"===i[1])return n*parseInt(i.slice(2),8)}return n*parseInt(i,10)},predicate:function XB(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!yp.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),qB=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),nG=/^[-+]?[0-9]+e/,t6=new e_("tag:yaml.org,2002:float",{kind:"scalar",resolve:function eG(t){return!(null===t||!qB.test(t)||"_"===t[t.length-1])},construct:function tG(t){var i,n;return n="-"===(i=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(i[0])>=0&&(i=i.slice(1)),".inf"===i?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===i?NaN:n*parseFloat(i,10)},predicate:function iG(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||yp.isNegativeZero(t))},represent:function rG(t,i){var n;if(isNaN(t))switch(i){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(i){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(i){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(yp.isNegativeZero(t))return"-0.0";return n=t.toString(10),nG.test(n)?n.replace("e",".e"):n},defaultStyle:"lowercase"}),n6=KP.extend({implicit:[XP,qP,e6,t6]}),r6=n6,i6=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),o6=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"),s6=new e_("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function oG(t){return null!==t&&(null!==i6.exec(t)||null!==o6.exec(t))},construct:function sG(t){var i,n,o,l,_,v,O,ue,P=0,G=null;if(null===(i=i6.exec(t))&&(i=o6.exec(t)),null===i)throw new Error("Date resolve error");if(n=+i[1],o=+i[2]-1,l=+i[3],!i[4])return new Date(Date.UTC(n,o,l));if(_=+i[4],v=+i[5],O=+i[6],i[7]){for(P=i[7].slice(0,3);P.length<3;)P+="0";P=+P}return i[9]&&(G=6e4*(60*+i[10]+ +(i[11]||0)),"-"===i[9]&&(G=-G)),ue=new Date(Date.UTC(n,o,l,_,v,O,P)),G&&ue.setTime(ue.getTime()-G),ue},instanceOf:Date,represent:function aG(t){return t.toISOString()}}),a6=new e_("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function lG(t){return"<<"===t||null===t}}),HD="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r",l6=new e_("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function uG(t){if(null===t)return!1;var i,n,o=0,l=t.length,_=HD;for(n=0;n<l;n++)if(!((i=_.indexOf(t.charAt(n)))>64)){if(i<0)return!1;o+=6}return o%8==0},construct:function cG(t){var i,n,o=t.replace(/[\r\n=]/g,""),l=o.length,_=HD,v=0,O=[];for(i=0;i<l;i++)i%4==0&&i&&(O.push(v>>16&255),O.push(v>>8&255),O.push(255&v)),v=v<<6|_.indexOf(o.charAt(i));return 0==(n=l%4*6)?(O.push(v>>16&255),O.push(v>>8&255),O.push(255&v)):18===n?(O.push(v>>10&255),O.push(v>>2&255)):12===n&&O.push(v>>4&255),new Uint8Array(O)},predicate:function fG(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function dG(t){var o,l,i="",n=0,_=t.length,v=HD;for(o=0;o<_;o++)o%3==0&&o&&(i+=v[n>>18&63],i+=v[n>>12&63],i+=v[n>>6&63],i+=v[63&n]),n=(n<<8)+t[o];return 0==(l=_%3)?(i+=v[n>>18&63],i+=v[n>>12&63],i+=v[n>>6&63],i+=v[63&n]):2===l?(i+=v[n>>10&63],i+=v[n>>4&63],i+=v[n<<2&63],i+=v[64]):1===l&&(i+=v[n>>2&63],i+=v[n<<4&63],i+=v[64],i+=v[64]),i}}),pG=Object.prototype.hasOwnProperty,_G=Object.prototype.toString,u6=new e_("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function hG(t){if(null===t)return!0;var n,o,l,_,v,i=[],O=t;for(n=0,o=O.length;n<o;n+=1){if(v=!1,"[object Object]"!==_G.call(l=O[n]))return!1;for(_ in l)if(pG.call(l,_)){if(v)return!1;v=!0}if(!v)return!1;if(-1!==i.indexOf(_))return!1;i.push(_)}return!0},construct:function mG(t){return null!==t?t:[]}}),gG=Object.prototype.toString,c6=new e_("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function vG(t){if(null===t)return!0;var i,n,o,l,_,v=t;for(_=new Array(v.length),i=0,n=v.length;i<n;i+=1){if("[object Object]"!==gG.call(o=v[i])||1!==(l=Object.keys(o)).length)return!1;_[i]=[l[0],o[l[0]]]}return!0},construct:function yG(t){if(null===t)return[];var i,n,o,l,_,v=t;for(_=new Array(v.length),i=0,n=v.length;i<n;i+=1)o=v[i],l=Object.keys(o),_[i]=[l[0],o[l[0]]];return _}}),EG=Object.prototype.hasOwnProperty,d6=new e_("tag:yaml.org,2002:set",{kind:"mapping",resolve:function SG(t){if(null===t)return!0;var i,n=t;for(i in n)if(EG.call(n,i)&&null!==n[i])return!1;return!0},construct:function bG(t){return null!==t?t:{}}}),UD=r6.extend({implicit:[s6,a6],explicit:[l6,u6,c6,d6]}),h1=Object.prototype.hasOwnProperty,$C=1,f6=2,p6=3,HC=4,BD=1,TG=2,_6=3,CG=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,MG=/[\x85\u2028\u2029]/,OG=/[,\[\]\{\}]/,h6=/^(?:!|!!|![a-z\-]+!)$/i,m6=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function g6(t){return Object.prototype.toString.call(t)}function sg(t){return 10===t||13===t}function yv(t){return 9===t||32===t}function yh(t){return 9===t||32===t||10===t||13===t}function U0(t){return 44===t||91===t||93===t||123===t||125===t}function AG(t){var i;return 48<=t&&t<=57?t-48:97<=(i=32|t)&&i<=102?i-97+10:-1}function DG(t){return 120===t?2:117===t?4:85===t?8:0}function RG(t){return 48<=t&&t<=57?t-48:-1}function v6(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function xG(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var y6=new Array(256),E6=new Array(256),B0=0;B0<256;B0++)y6[B0]=v6(B0)?1:0,E6[B0]=v6(B0);function wG(t,i){this.input=t,this.filename=i.filename||null,this.schema=i.schema||UD,this.onWarning=i.onWarning||null,this.legacy=i.legacy||!1,this.json=i.json||!1,this.listener=i.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function S6(t,i){var n={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return n.snippet=FB(n),new B_(i,n)}function cl(t,i){throw S6(t,i)}function UC(t,i){t.onWarning&&t.onWarning.call(null,S6(t,i))}var b6={YAML:function(i,n,o){var l,_,v;null!==i.version&&cl(i,"duplication of %YAML directive"),1!==o.length&&cl(i,"YAML directive accepts exactly one argument"),null===(l=/^([0-9]+)\.([0-9]+)$/.exec(o[0]))&&cl(i,"ill-formed argument of the YAML directive"),_=parseInt(l[1],10),v=parseInt(l[2],10),1!==_&&cl(i,"unacceptable YAML version of the document"),i.version=o[0],i.checkLineBreaks=v<2,1!==v&&2!==v&&UC(i,"unsupported YAML version of the document")},TAG:function(i,n,o){var l,_;2!==o.length&&cl(i,"TAG directive accepts exactly two arguments"),_=o[1],h6.test(l=o[0])||cl(i,"ill-formed tag handle (first argument) of the TAG directive"),h1.call(i.tagMap,l)&&cl(i,'there is a previously declared suffix for "'+l+'" tag handle'),m6.test(_)||cl(i,"ill-formed tag prefix (second argument) of the TAG directive");try{_=decodeURIComponent(_)}catch{cl(i,"tag prefix is malformed: "+_)}i.tagMap[l]=_}};function m1(t,i,n,o){var l,_,v,O;if(i<n){if(O=t.input.slice(i,n),o)for(l=0,_=O.length;l<_;l+=1)9===(v=O.charCodeAt(l))||32<=v&&v<=1114111||cl(t,"expected valid JSON character");else CG.test(O)&&cl(t,"the stream contains non-printable characters");t.result+=O}}function T6(t,i,n,o){var l,_,v,O;for(yp.isObject(n)||cl(t,"cannot merge mappings; the provided source object is unacceptable"),v=0,O=(l=Object.keys(n)).length;v<O;v+=1)h1.call(i,_=l[v])||(i[_]=n[_],o[_]=!0)}function G0(t,i,n,o,l,_,v,O,P){var G,K;if(Array.isArray(l))for(G=0,K=(l=Array.prototype.slice.call(l)).length;G<K;G+=1)Array.isArray(l[G])&&cl(t,"nested arrays are not supported inside keys"),"object"==typeof l&&"[object Object]"===g6(l[G])&&(l[G]="[object Object]");if("object"==typeof l&&"[object Object]"===g6(l)&&(l="[object Object]"),l=String(l),null===i&&(i={}),"tag:yaml.org,2002:merge"===o)if(Array.isArray(_))for(G=0,K=_.length;G<K;G+=1)T6(t,i,_[G],n);else T6(t,i,_,n);else!t.json&&!h1.call(n,l)&&h1.call(i,l)&&(t.line=v||t.line,t.lineStart=O||t.lineStart,t.position=P||t.position,cl(t,"duplicated mapping key")),"__proto__"===l?Object.defineProperty(i,l,{configurable:!0,enumerable:!0,writable:!0,value:_}):i[l]=_,delete n[l];return i}function GD(t){var i;10===(i=t.input.charCodeAt(t.position))?t.position++:13===i?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):cl(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function tp(t,i,n){for(var o=0,l=t.input.charCodeAt(t.position);0!==l;){for(;yv(l);)9===l&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),l=t.input.charCodeAt(++t.position);if(i&&35===l)do{l=t.input.charCodeAt(++t.position)}while(10!==l&&13!==l&&0!==l);if(!sg(l))break;for(GD(t),l=t.input.charCodeAt(t.position),o++,t.lineIndent=0;32===l;)t.lineIndent++,l=t.input.charCodeAt(++t.position)}return-1!==n&&0!==o&&t.lineIndent<n&&UC(t,"deficient indentation"),o}function BC(t){var n,i=t.position;return!(45!==(n=t.input.charCodeAt(i))&&46!==n||n!==t.input.charCodeAt(i+1)||n!==t.input.charCodeAt(i+2)||(i+=3,n=t.input.charCodeAt(i),0!==n&&!yh(n)))}function YD(t,i){1===i?t.result+=" ":i>1&&(t.result+=yp.repeat("\n",i-1))}function C6(t,i){var n,P,o=t.tag,l=t.anchor,_=[],O=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=_),P=t.input.charCodeAt(t.position);0!==P&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,cl(t,"tab characters must not be used in indentation")),45===P&&yh(t.input.charCodeAt(t.position+1)));)if(O=!0,t.position++,tp(t,!0,-1)&&t.lineIndent<=i)_.push(null),P=t.input.charCodeAt(t.position);else if(n=t.line,Y0(t,i,p6,!1,!0),_.push(t.result),tp(t,!0,-1),P=t.input.charCodeAt(t.position),(t.line===n||t.lineIndent>i)&&0!==P)cl(t,"bad indentation of a sequence entry");else if(t.lineIndent<i)break;return!!O&&(t.tag=o,t.anchor=l,t.kind="sequence",t.result=_,!0)}function $G(t){var i,l,_,v,n=!1,o=!1;if(33!==(v=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&cl(t,"duplication of a tag property"),60===(v=t.input.charCodeAt(++t.position))?(n=!0,v=t.input.charCodeAt(++t.position)):33===v?(o=!0,l="!!",v=t.input.charCodeAt(++t.position)):l="!",i=t.position,n){do{v=t.input.charCodeAt(++t.position)}while(0!==v&&62!==v);t.position<t.length?(_=t.input.slice(i,t.position),v=t.input.charCodeAt(++t.position)):cl(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==v&&!yh(v);)33===v&&(o?cl(t,"tag suffix cannot contain exclamation marks"):(l=t.input.slice(i-1,t.position+1),h6.test(l)||cl(t,"named tag handle cannot contain such characters"),o=!0,i=t.position+1)),v=t.input.charCodeAt(++t.position);_=t.input.slice(i,t.position),OG.test(_)&&cl(t,"tag suffix cannot contain flow indicator characters")}_&&!m6.test(_)&&cl(t,"tag name cannot contain such characters: "+_);try{_=decodeURIComponent(_)}catch{cl(t,"tag name is malformed: "+_)}return n?t.tag=_:h1.call(t.tagMap,l)?t.tag=t.tagMap[l]+_:"!"===l?t.tag="!"+_:"!!"===l?t.tag="tag:yaml.org,2002:"+_:cl(t,'undeclared tag handle "'+l+'"'),!0}function HG(t){var i,n;if(38!==(n=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&cl(t,"duplication of an anchor property"),n=t.input.charCodeAt(++t.position),i=t.position;0!==n&&!yh(n)&&!U0(n);)n=t.input.charCodeAt(++t.position);return t.position===i&&cl(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(i,t.position),!0}function Y0(t,i,n,o,l){var _,v,O,oe,ue,pe,ye,Ue,xe,P=1,G=!1,K=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,_=v=O=HC===n||p6===n,o&&tp(t,!0,-1)&&(G=!0,t.lineIndent>i?P=1:t.lineIndent===i?P=0:t.lineIndent<i&&(P=-1)),1===P)for(;$G(t)||HG(t);)tp(t,!0,-1)?(G=!0,O=_,t.lineIndent>i?P=1:t.lineIndent===i?P=0:t.lineIndent<i&&(P=-1)):O=!1;if(O&&(O=G||l),(1===P||HC===n)&&(Ue=$C===n||f6===n?i:i+1,xe=t.position-t.lineStart,1===P?O&&(C6(t,xe)||function kG(t,i,n){var o,l,_,v,O,P,we,G=t.tag,K=t.anchor,oe={},ue=Object.create(null),pe=null,ye=null,Ue=null,xe=!1,ke=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=oe),we=t.input.charCodeAt(t.position);0!==we;){if(!xe&&-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,cl(t,"tab characters must not be used in indentation")),o=t.input.charCodeAt(t.position+1),_=t.line,63!==we&&58!==we||!yh(o)){if(v=t.line,O=t.lineStart,P=t.position,!Y0(t,n,f6,!1,!0))break;if(t.line===_){for(we=t.input.charCodeAt(t.position);yv(we);)we=t.input.charCodeAt(++t.position);if(58===we)yh(we=t.input.charCodeAt(++t.position))||cl(t,"a whitespace character is expected after the key-value separator within a block mapping"),xe&&(G0(t,oe,ue,pe,ye,null,v,O,P),pe=ye=Ue=null),ke=!0,xe=!1,l=!1,pe=t.tag,ye=t.result;else{if(!ke)return t.tag=G,t.anchor=K,!0;cl(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!ke)return t.tag=G,t.anchor=K,!0;cl(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===we?(xe&&(G0(t,oe,ue,pe,ye,null,v,O,P),pe=ye=Ue=null),ke=!0,xe=!0,l=!0):xe?(xe=!1,l=!0):cl(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,we=o;if((t.line===_||t.lineIndent>i)&&(xe&&(v=t.line,O=t.lineStart,P=t.position),Y0(t,i,HC,!0,l)&&(xe?ye=t.result:Ue=t.result),xe||(G0(t,oe,ue,pe,ye,Ue,v,O,P),pe=ye=Ue=null),tp(t,!0,-1),we=t.input.charCodeAt(t.position)),(t.line===_||t.lineIndent>i)&&0!==we)cl(t,"bad indentation of a mapping entry");else if(t.lineIndent<i)break}return xe&&G0(t,oe,ue,pe,ye,null,v,O,P),ke&&(t.tag=G,t.anchor=K,t.kind="mapping",t.result=oe),ke}(t,xe,Ue))||function FG(t,i){var o,l,_,O,K,oe,ue,pe,Ue,xe,ke,we,n=!0,v=t.tag,P=t.anchor,ye=Object.create(null);if(91===(we=t.input.charCodeAt(t.position)))K=93,pe=!1,O=[];else{if(123!==we)return!1;K=125,pe=!0,O={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=O),we=t.input.charCodeAt(++t.position);0!==we;){if(tp(t,!0,i),(we=t.input.charCodeAt(t.position))===K)return t.position++,t.tag=v,t.anchor=P,t.kind=pe?"mapping":"sequence",t.result=O,!0;n?44===we&&cl(t,"expected the node content, but found ','"):cl(t,"missed comma between flow collection entries"),ke=null,oe=ue=!1,63===we&&yh(t.input.charCodeAt(t.position+1))&&(oe=ue=!0,t.position++,tp(t,!0,i)),o=t.line,l=t.lineStart,_=t.position,Y0(t,i,$C,!1,!0),xe=t.tag,Ue=t.result,tp(t,!0,i),we=t.input.charCodeAt(t.position),(ue||t.line===o)&&58===we&&(oe=!0,we=t.input.charCodeAt(++t.position),tp(t,!0,i),Y0(t,i,$C,!1,!0),ke=t.result),pe?G0(t,O,ye,xe,Ue,ke,o,l,_):O.push(oe?G0(t,null,ye,xe,Ue,ke,o,l,_):Ue),tp(t,!0,i),44===(we=t.input.charCodeAt(t.position))?(n=!0,we=t.input.charCodeAt(++t.position)):n=!1}cl(t,"unexpected end of the stream within a flow collection")}(t,Ue)?K=!0:(v&&function LG(t,i){var n,o,K,oe,l=BD,_=!1,v=!1,O=i,P=0,G=!1;if(124===(oe=t.input.charCodeAt(t.position)))o=!1;else{if(62!==oe)return!1;o=!0}for(t.kind="scalar",t.result="";0!==oe;)if(43===(oe=t.input.charCodeAt(++t.position))||45===oe)BD===l?l=43===oe?_6:TG:cl(t,"repeat of a chomping mode identifier");else{if(!((K=RG(oe))>=0))break;0===K?cl(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):v?cl(t,"repeat of an indentation width identifier"):(O=i+K-1,v=!0)}if(yv(oe)){do{oe=t.input.charCodeAt(++t.position)}while(yv(oe));if(35===oe)do{oe=t.input.charCodeAt(++t.position)}while(!sg(oe)&&0!==oe)}for(;0!==oe;){for(GD(t),t.lineIndent=0,oe=t.input.charCodeAt(t.position);(!v||t.lineIndent<O)&&32===oe;)t.lineIndent++,oe=t.input.charCodeAt(++t.position);if(!v&&t.lineIndent>O&&(O=t.lineIndent),sg(oe))P++;else{if(t.lineIndent<O){l===_6?t.result+=yp.repeat("\n",_?1+P:P):l===BD&&_&&(t.result+="\n");break}for(o?yv(oe)?(G=!0,t.result+=yp.repeat("\n",_?1+P:P)):G?(G=!1,t.result+=yp.repeat("\n",P+1)):0===P?_&&(t.result+=" "):t.result+=yp.repeat("\n",P):t.result+=yp.repeat("\n",_?1+P:P),_=!0,v=!0,P=0,n=t.position;!sg(oe)&&0!==oe;)oe=t.input.charCodeAt(++t.position);m1(t,n,t.position,!1)}}return!0}(t,Ue)||function NG(t,i){var n,o,l;if(39!==(n=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,o=l=t.position;0!==(n=t.input.charCodeAt(t.position));)if(39===n){if(m1(t,o,t.position,!0),39!==(n=t.input.charCodeAt(++t.position)))return!0;o=t.position,t.position++,l=t.position}else sg(n)?(m1(t,o,l,!0),YD(t,tp(t,!1,i)),o=l=t.position):t.position===t.lineStart&&BC(t)?cl(t,"unexpected end of the document within a single quoted scalar"):(t.position++,l=t.position);cl(t,"unexpected end of the stream within a single quoted scalar")}(t,Ue)||function IG(t,i){var n,o,l,_,v,O;if(34!==(O=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,n=o=t.position;0!==(O=t.input.charCodeAt(t.position));){if(34===O)return m1(t,n,t.position,!0),t.position++,!0;if(92===O){if(m1(t,n,t.position,!0),sg(O=t.input.charCodeAt(++t.position)))tp(t,!1,i);else if(O<256&&y6[O])t.result+=E6[O],t.position++;else if((v=DG(O))>0){for(l=v,_=0;l>0;l--)(v=AG(O=t.input.charCodeAt(++t.position)))>=0?_=(_<<4)+v:cl(t,"expected hexadecimal character");t.result+=xG(_),t.position++}else cl(t,"unknown escape sequence");n=o=t.position}else sg(O)?(m1(t,n,o,!0),YD(t,tp(t,!1,i)),n=o=t.position):t.position===t.lineStart&&BC(t)?cl(t,"unexpected end of the document within a double quoted scalar"):(t.position++,o=t.position)}cl(t,"unexpected end of the stream within a double quoted scalar")}(t,Ue)?K=!0:function UG(t){var i,n,o;if(42!==(o=t.input.charCodeAt(t.position)))return!1;for(o=t.input.charCodeAt(++t.position),i=t.position;0!==o&&!yh(o)&&!U0(o);)o=t.input.charCodeAt(++t.position);return t.position===i&&cl(t,"name of an alias node must contain at least one character"),n=t.input.slice(i,t.position),h1.call(t.anchorMap,n)||cl(t,'unidentified alias "'+n+'"'),t.result=t.anchorMap[n],tp(t,!0,-1),!0}(t)?(K=!0,(null!==t.tag||null!==t.anchor)&&cl(t,"alias node should not have any properties")):function PG(t,i,n){var l,_,v,O,P,G,K,pe,oe=t.kind,ue=t.result;if(yh(pe=t.input.charCodeAt(t.position))||U0(pe)||35===pe||38===pe||42===pe||33===pe||124===pe||62===pe||39===pe||34===pe||37===pe||64===pe||96===pe||(63===pe||45===pe)&&(yh(l=t.input.charCodeAt(t.position+1))||n&&U0(l)))return!1;for(t.kind="scalar",t.result="",_=v=t.position,O=!1;0!==pe;){if(58===pe){if(yh(l=t.input.charCodeAt(t.position+1))||n&&U0(l))break}else if(35===pe){if(yh(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&BC(t)||n&&U0(pe))break;if(sg(pe)){if(P=t.line,G=t.lineStart,K=t.lineIndent,tp(t,!1,-1),t.lineIndent>=i){O=!0,pe=t.input.charCodeAt(t.position);continue}t.position=v,t.line=P,t.lineStart=G,t.lineIndent=K;break}}O&&(m1(t,_,v,!1),YD(t,t.line-P),_=v=t.position,O=!1),yv(pe)||(v=t.position+1),pe=t.input.charCodeAt(++t.position)}return m1(t,_,v,!1),!!t.result||(t.kind=oe,t.result=ue,!1)}(t,Ue,$C===n)&&(K=!0,null===t.tag&&(t.tag="?")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===P&&(K=O&&C6(t,xe))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&cl(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),oe=0,ue=t.implicitTypes.length;oe<ue;oe+=1)if((ye=t.implicitTypes[oe]).resolve(t.result)){t.result=ye.construct(t.result),t.tag=ye.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(h1.call(t.typeMap[t.kind||"fallback"],t.tag))ye=t.typeMap[t.kind||"fallback"][t.tag];else for(ye=null,oe=0,ue=(pe=t.typeMap.multi[t.kind||"fallback"]).length;oe<ue;oe+=1)if(t.tag.slice(0,pe[oe].tag.length)===pe[oe].tag){ye=pe[oe];break}ye||cl(t,"unknown tag !<"+t.tag+">"),null!==t.result&&ye.kind!==t.kind&&cl(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+ye.kind+'", not "'+t.kind+'"'),ye.resolve(t.result,t.tag)?(t.result=ye.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):cl(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||K}function BG(t){var n,o,l,v,i=t.position,_=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(v=t.input.charCodeAt(t.position))&&(tp(t,!0,-1),v=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==v));){for(_=!0,v=t.input.charCodeAt(++t.position),n=t.position;0!==v&&!yh(v);)v=t.input.charCodeAt(++t.position);for(l=[],(o=t.input.slice(n,t.position)).length<1&&cl(t,"directive name must not be less than one character in length");0!==v;){for(;yv(v);)v=t.input.charCodeAt(++t.position);if(35===v){do{v=t.input.charCodeAt(++t.position)}while(0!==v&&!sg(v));break}if(sg(v))break;for(n=t.position;0!==v&&!yh(v);)v=t.input.charCodeAt(++t.position);l.push(t.input.slice(n,t.position))}0!==v&&GD(t),h1.call(b6,o)?b6[o](t,o,l):UC(t,'unknown document directive "'+o+'"')}tp(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,tp(t,!0,-1)):_&&cl(t,"directives end mark is expected"),Y0(t,t.lineIndent-1,HC,!1,!0),tp(t,!0,-1),t.checkLineBreaks&&MG.test(t.input.slice(i,t.position))&&UC(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&BC(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,tp(t,!0,-1)):t.position<t.length-1&&cl(t,"end of the stream or a document separator is expected")}function M6(t,i){i=i||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var n=new wG(t,i),o=t.indexOf("\0");for(-1!==o&&(n.position=o,cl(n,"null byte is not allowed in input")),n.input+="\0";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)BG(n);return n.documents}var O6_loadAll=function GG(t,i,n){null!==i&&"object"==typeof i&&typeof n>"u"&&(n=i,i=null);var o=M6(t,n);if("function"!=typeof i)return o;for(var l=0,_=o.length;l<_;l+=1)i(o[l])},O6_load=function YG(t,i){var n=M6(t,i);if(0!==n.length){if(1===n.length)return n[0];throw new B_("expected a single document in the stream, but found more")}},A6=Object.prototype.toString,D6=Object.prototype.hasOwnProperty,jD=65279,VG=9,sS=10,ZG=13,WG=32,JG=33,QG=34,zD=35,KG=37,XG=38,qG=39,eY=42,R6=44,tY=45,GC=58,nY=61,rY=62,iY=63,oY=64,x6=91,w6=93,sY=96,P6=123,aY=124,N6=125,E_={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},lY=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],uY=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function dY(t){var i,n,o;if(i=t.toString(16).toUpperCase(),t<=255)n="x",o=2;else if(t<=65535)n="u",o=4;else{if(!(t<=4294967295))throw new B_("code point within a string may not be greater than 0xFFFFFFFF");n="U",o=8}return"\\"+n+yp.repeat("0",o-i.length)+i}var fY=1,aS=2;function pY(t){this.schema=t.schema||UD,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=yp.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=function cY(t,i){var n,o,l,_,v,O,P;if(null===i)return{};for(n={},l=0,_=(o=Object.keys(i)).length;l<_;l+=1)v=o[l],O=String(i[v]),"!!"===v.slice(0,2)&&(v="tag:yaml.org,2002:"+v.slice(2)),(P=t.compiledTypeMap.fallback[v])&&D6.call(P.styleAliases,O)&&(O=P.styleAliases[O]),n[v]=O;return n}(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType='"'===t.quotingType?aS:fY,this.forceQuotes=t.forceQuotes||!1,this.replacer="function"==typeof t.replacer?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function I6(t,i){for(var v,n=yp.repeat(" ",i),o=0,l=-1,_="",O=t.length;o<O;)-1===(l=t.indexOf("\n",o))?(v=t.slice(o),o=O):(v=t.slice(o,l+1),o=l+1),v.length&&"\n"!==v&&(_+=n),_+=v;return _}function VD(t,i){return"\n"+yp.repeat(" ",t.indent*i)}function YC(t){return t===WG||t===VG}function lS(t){return 32<=t&&t<=126||161<=t&&t<=55295&&8232!==t&&8233!==t||57344<=t&&t<=65533&&t!==jD||65536<=t&&t<=1114111}function F6(t){return lS(t)&&t!==jD&&t!==ZG&&t!==sS}function L6(t,i,n){var o=F6(t),l=o&&!YC(t);return(n?o:o&&t!==R6&&t!==x6&&t!==w6&&t!==P6&&t!==N6)&&t!==zD&&!(i===GC&&!l)||F6(i)&&!YC(i)&&t===zD||i===GC&&l}function uS(t,i){var o,n=t.charCodeAt(i);return n>=55296&&n<=56319&&i+1<t.length&&(o=t.charCodeAt(i+1))>=56320&&o<=57343?1024*(n-55296)+o-56320+65536:n}function k6(t){return/^\n* /.test(t)}var $6=1,ZD=2,H6=3,U6=4,j0=5;function vY(t,i,n,o,l){t.dump=function(){if(0===i.length)return t.quotingType===aS?'""':"''";if(!t.noCompatMode&&(-1!==lY.indexOf(i)||uY.test(i)))return t.quotingType===aS?'"'+i+'"':"'"+i+"'";var _=t.indent*Math.max(1,n),v=-1===t.lineWidth?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-_);switch(function gY(t,i,n,o,l,_,v,O){var P,G=0,K=null,oe=!1,ue=!1,pe=-1!==o,ye=-1,Ue=function hY(t){return lS(t)&&t!==jD&&!YC(t)&&t!==tY&&t!==iY&&t!==GC&&t!==R6&&t!==x6&&t!==w6&&t!==P6&&t!==N6&&t!==zD&&t!==XG&&t!==eY&&t!==JG&&t!==aY&&t!==nY&&t!==rY&&t!==qG&&t!==QG&&t!==KG&&t!==oY&&t!==sY}(uS(t,0))&&function mY(t){return!YC(t)&&t!==GC}(uS(t,t.length-1));if(i||v)for(P=0;P<t.length;G>=65536?P+=2:P++){if(!lS(G=uS(t,P)))return j0;Ue=Ue&&L6(G,K,O),K=G}else{for(P=0;P<t.length;G>=65536?P+=2:P++){if((G=uS(t,P))===sS)oe=!0,pe&&(ue=ue||P-ye-1>o&&" "!==t[ye+1],ye=P);else if(!lS(G))return j0;Ue=Ue&&L6(G,K,O),K=G}ue=ue||pe&&P-ye-1>o&&" "!==t[ye+1]}return oe||ue?n>9&&k6(t)?j0:v?_===aS?j0:ZD:ue?U6:H6:!Ue||v||l(t)?_===aS?j0:ZD:$6}(i,o||t.flowLevel>-1&&n>=t.flowLevel,t.indent,v,function P(G){return function _Y(t,i){var n,o;for(n=0,o=t.implicitTypes.length;n<o;n+=1)if(t.implicitTypes[n].resolve(i))return!0;return!1}(t,G)},t.quotingType,t.forceQuotes&&!o,l)){case $6:return i;case ZD:return"'"+i.replace(/'/g,"''")+"'";case H6:return"|"+B6(i,t.indent)+G6(I6(i,_));case U6:return">"+B6(i,t.indent)+G6(I6(function yY(t,i){for(var _,v,n=/(\n+)([^\n]*)/g,o=(G=void 0,G=t.indexOf("\n"),n.lastIndex=G=-1!==G?G:t.length,Y6(t.slice(0,G),i)),l="\n"===t[0]||" "===t[0];v=n.exec(t);){var P=v[2];_=" "===P[0],o+=v[1]+(l||_||""===P?"":"\n")+Y6(P,i),l=_}var G;return o}(i,v),_));case j0:return'"'+function EY(t){for(var o,i="",n=0,l=0;l<t.length;n>=65536?l+=2:l++)n=uS(t,l),!(o=E_[n])&&lS(n)?(i+=t[l],n>=65536&&(i+=t[l+1])):i+=o||dY(n);return i}(i)+'"';default:throw new B_("impossible error: invalid scalar style")}}()}function B6(t,i){var n=k6(t)?String(i):"",o="\n"===t[t.length-1];return n+(!o||"\n"!==t[t.length-2]&&"\n"!==t?o?"":"-":"+")+"\n"}function G6(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function Y6(t,i){if(""===t||" "===t[0])return t;for(var o,_,n=/ [^ ]/g,l=0,v=0,O=0,P="";o=n.exec(t);)(O=o.index)-l>i&&(P+="\n"+t.slice(l,_=v>l?v:O),l=_+1),v=O;return P+="\n",(P+=t.length-l>i&&v>l?t.slice(l,v)+"\n"+t.slice(v+1):t.slice(l)).slice(1)}function z6(t,i,n){var o,l,_,v,O,P;for(_=0,v=(l=n?t.explicitTypes:t.implicitTypes).length;_<v;_+=1)if(((O=l[_]).instanceOf||O.predicate)&&(!O.instanceOf||"object"==typeof i&&i instanceof O.instanceOf)&&(!O.predicate||O.predicate(i))){if(t.tag=n?O.multi&&O.representName?O.representName(i):O.tag:"?",O.represent){if(P=t.styleMap[O.tag]||O.defaultStyle,"[object Function]"===A6.call(O.represent))o=O.represent(i,P);else{if(!D6.call(O.represent,P))throw new B_("!<"+O.tag+'> tag resolver accepts not "'+P+'" style');o=O.represent[P](i,P)}t.dump=o}return!0}return!1}function Ig(t,i,n,o,l,_,v){t.tag=null,t.dump=n,z6(t,n,!1)||z6(t,n,!0);var G,O=A6.call(t.dump),P=o;o&&(o=t.flowLevel<0||t.flowLevel>i);var oe,ue,K="[object Object]"===O||"[object Array]"===O;if(K&&(ue=-1!==(oe=t.duplicates.indexOf(n))),(null!==t.tag&&"?"!==t.tag||ue||2!==t.indent&&i>0)&&(l=!1),ue&&t.usedDuplicates[oe])t.dump="*ref_"+oe;else{if(K&&ue&&!t.usedDuplicates[oe]&&(t.usedDuplicates[oe]=!0),"[object Object]"===O)o&&0!==Object.keys(t.dump).length?(function TY(t,i,n,o){var O,P,G,K,oe,ue,l="",_=t.tag,v=Object.keys(n);if(!0===t.sortKeys)v.sort();else if("function"==typeof t.sortKeys)v.sort(t.sortKeys);else if(t.sortKeys)throw new B_("sortKeys must be a boolean or a function");for(O=0,P=v.length;O<P;O+=1)ue="",(!o||""!==l)&&(ue+=VD(t,i)),K=n[G=v[O]],t.replacer&&(K=t.replacer.call(n,G,K)),Ig(t,i+1,G,!0,!0,!0)&&((oe=null!==t.tag&&"?"!==t.tag||t.dump&&t.dump.length>1024)&&(t.dump&&sS===t.dump.charCodeAt(0)?ue+="?":ue+="? "),ue+=t.dump,oe&&(ue+=VD(t,i)),Ig(t,i+1,K,!0,oe)&&(t.dump&&sS===t.dump.charCodeAt(0)?ue+=":":ue+=": ",l+=ue+=t.dump));t.tag=_,t.dump=l||"{}"}(t,i,t.dump,l),ue&&(t.dump="&ref_"+oe+t.dump)):(function bY(t,i,n){var v,O,P,G,K,o="",l=t.tag,_=Object.keys(n);for(v=0,O=_.length;v<O;v+=1)K="",""!==o&&(K+=", "),t.condenseFlow&&(K+='"'),G=n[P=_[v]],t.replacer&&(G=t.replacer.call(n,P,G)),Ig(t,i,P,!1,!1)&&(t.dump.length>1024&&(K+="? "),K+=t.dump+(t.condenseFlow?'"':"")+":"+(t.condenseFlow?"":" "),Ig(t,i,G,!1,!1)&&(o+=K+=t.dump));t.tag=l,t.dump="{"+o+"}"}(t,i,t.dump),ue&&(t.dump="&ref_"+oe+" "+t.dump));else if("[object Array]"===O)o&&0!==t.dump.length?(function j6(t,i,n,o){var v,O,P,l="",_=t.tag;for(v=0,O=n.length;v<O;v+=1)P=n[v],t.replacer&&(P=t.replacer.call(n,String(v),P)),(Ig(t,i+1,P,!0,!0,!1,!0)||typeof P>"u"&&Ig(t,i+1,null,!0,!0,!1,!0))&&((!o||""!==l)&&(l+=VD(t,i)),t.dump&&sS===t.dump.charCodeAt(0)?l+="-":l+="- ",l+=t.dump);t.tag=_,t.dump=l||"[]"}(t,t.noArrayIndent&&!v&&i>0?i-1:i,t.dump,l),ue&&(t.dump="&ref_"+oe+t.dump)):(function SY(t,i,n){var _,v,O,o="",l=t.tag;for(_=0,v=n.length;_<v;_+=1)O=n[_],t.replacer&&(O=t.replacer.call(n,String(_),O)),(Ig(t,i,O,!1,!1)||typeof O>"u"&&Ig(t,i,null,!1,!1))&&(""!==o&&(o+=","+(t.condenseFlow?"":" ")),o+=t.dump);t.tag=l,t.dump="["+o+"]"}(t,i,t.dump),ue&&(t.dump="&ref_"+oe+" "+t.dump));else{if("[object String]"!==O){if("[object Undefined]"===O)return!1;if(t.skipInvalid)return!1;throw new B_("unacceptable kind of an object to dump "+O)}"?"!==t.tag&&vY(t,t.dump,i,_,P)}null!==t.tag&&"?"!==t.tag&&(G=encodeURI("!"===t.tag[0]?t.tag.slice(1):t.tag).replace(/!/g,"%21"),G="!"===t.tag[0]?"!"+G:"tag:yaml.org,2002:"===G.slice(0,18)?"!!"+G.slice(18):"!<"+G+">",t.dump=G+" "+t.dump)}return!0}function CY(t,i){var l,_,n=[],o=[];for(WD(t,n,o),l=0,_=o.length;l<_;l+=1)i.duplicates.push(n[o[l]]);i.usedDuplicates=new Array(_)}function WD(t,i,n){var o,l,_;if(null!==t&&"object"==typeof t)if(-1!==(l=i.indexOf(t)))-1===n.indexOf(l)&&n.push(l);else if(i.push(t),Array.isArray(t))for(l=0,_=t.length;l<_;l+=1)WD(t[l],i,n);else for(l=0,_=(o=Object.keys(t)).length;l<_;l+=1)WD(t[o[l]],i,n)}function JD(t,i){return function(){throw new Error("Function yaml."+t+" is removed in js-yaml 4. Use yaml."+i+" instead, which is now safe by default.")}}var DY=e_,RY=ZP,xY=KP,V6=n6,wY=r6,PY=UD,NY=O6_load,IY=O6_loadAll,FY=function MY(t,i){var n=new pY(i=i||{});n.noRefs||CY(t,n);var o=t;return n.replacer&&(o=n.replacer.call({"":o},"",o)),Ig(n,0,o,!0,!0)?n.dump+"\n":""},LY=B_,kY={binary:l6,float:t6,map:QP,null:XP,pairs:c6,set:d6,timestamp:s6,bool:qP,int:e6,merge:a6,omap:u6,seq:JP,str:WP},$Y=JD("safeLoad","load"),HY=JD("safeLoadAll","loadAll"),UY=JD("safeDump","dump");const GY={Type:DY,Schema:RY,FAILSAFE_SCHEMA:xY,JSON_SCHEMA:V6,CORE_SCHEMA:wY,DEFAULT_SCHEMA:PY,load:NY,loadAll:IY,dump:FY,YAMLException:LY,types:kY,safeLoad:$Y,safeLoadAll:HY,safeDump:UY};var YY=s(58102),jY=s.n(YY),zY=s(55836),VY=s.n(zY),ZY=s(97425),WY=s.n(ZY),JY=s(76874),QY=s.n(JY),KY=s(43409),XY=s(14395),qY=s.n(XY);function Z6(t,i){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);i&&(o=o.filter(function(l){return Object.getOwnPropertyDescriptor(t,l).enumerable})),n.push.apply(n,o)}return n}function W6(t){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?Z6(Object(n),!0).forEach(function(o){DD(t,o,n[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Z6(Object(n)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(n,o))})}return t}function t_(t){return"Minified Redux error #"+t+"; visit https://redux.js.org/Errors?code="+t+" for the full message or use the non-minified dev environment for full errors. "}var jC,J6="function"==typeof Symbol&&Symbol.observable||"@@observable",QD=function(){return Math.random().toString(36).substring(7).split("").join(".")},z0={INIT:"@@redux/INIT"+QD(),REPLACE:"@@redux/REPLACE"+QD(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+QD()}};function K6(t,i,n){var o;if("function"==typeof i&&"function"==typeof n||"function"==typeof n&&"function"==typeof arguments[3])throw new Error(t_(0));if("function"==typeof i&&typeof n>"u"&&(n=i,i=void 0),typeof n<"u"){if("function"!=typeof n)throw new Error(t_(1));return n(K6)(t,i)}if("function"!=typeof t)throw new Error(t_(2));var l=t,_=i,v=[],O=v,P=!1;function G(){O===v&&(O=v.slice())}function K(){if(P)throw new Error(t_(3));return _}function oe(Ue){if("function"!=typeof Ue)throw new Error(t_(4));if(P)throw new Error(t_(5));var xe=!0;return G(),O.push(Ue),function(){if(xe){if(P)throw new Error(t_(6));xe=!1,G();var we=O.indexOf(Ue);O.splice(we,1),v=null}}}function ue(Ue){if(!function Q6(t){if("object"!=typeof t||null===t)return!1;for(var i=t;null!==Object.getPrototypeOf(i);)i=Object.getPrototypeOf(i);return Object.getPrototypeOf(t)===i}(Ue))throw new Error(t_(7));if(typeof Ue.type>"u")throw new Error(t_(8));if(P)throw new Error(t_(9));try{P=!0,_=l(_,Ue)}finally{P=!1}for(var xe=v=O,ke=0;ke<xe.length;ke++)(0,xe[ke])();return Ue}return ue({type:z0.INIT}),(o={dispatch:ue,subscribe:oe,getState:K,replaceReducer:function pe(Ue){if("function"!=typeof Ue)throw new Error(t_(10));l=Ue,ue({type:z0.REPLACE})}})[J6]=function ye(){var Ue,xe=oe;return(Ue={subscribe:function(we){if("object"!=typeof we||null===we)throw new Error(t_(11));function Z(){we.next&&we.next(K())}return Z(),{unsubscribe:xe(Z)}}})[J6]=function(){return this},Ue},o}function X6(t,i){return function(){return i(t.apply(this,arguments))}}function oj(t,i){if("function"==typeof t)return X6(t,i);if("object"!=typeof t||null===t)throw new Error(t_(16));var n={};for(var o in t){var l=t[o];"function"==typeof l&&(n[o]=X6(l,i))}return n}function q6(){for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];return 0===i.length?function(o){return o}:1===i.length?i[0]:i.reduce(function(o,l){return function(){return o(l.apply(void 0,arguments))}})}function sj(){for(var t=arguments.length,i=new Array(t),n=0;n<t;n++)i[n]=arguments[n];return function(o){return function(){var l=o.apply(void 0,arguments),_=function(){throw new Error(t_(15))},v={getState:l.getState,dispatch:function(){return _.apply(void 0,arguments)}},O=i.map(function(P){return P(v)});return _=q6.apply(void 0,O)(l.dispatch),W6(W6({},l),{},{dispatch:_})}}}function eN(t){return(jC=jC||document.createElement("textarea")).innerHTML="&"+t+";",jC.value}var uj=Object.prototype.hasOwnProperty;function KD(t){return[].slice.call(arguments,1).forEach(function(n){if(n){if("object"!=typeof n)throw new TypeError(n+"must be object");Object.keys(n).forEach(function(o){t[o]=n[o]})}}),t}var cj=/\\([\\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;function V0(t){return t.indexOf("\\")<0?t:t.replace(cj,"$1")}function XD(t){return!(t>=55296&&t<=57343||t>=64976&&t<=65007||65535==(65535&t)||65534==(65535&t)||t>=0&&t<=8||11===t||t>=14&&t<=31||t>=127&&t<=159||t>1114111)}function zC(t){return t>65535?(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t))):String.fromCharCode(t)}var dj=/&([a-z#][a-z0-9]{1,31});/gi,fj=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;function pj(t,i){var n=0,o=eN(i);return i!==o?o:35===i.charCodeAt(0)&&fj.test(i)&&XD(n="x"===i[1].toLowerCase()?parseInt(i.slice(2),16):parseInt(i.slice(1),10))?zC(n):t}function g1(t){return t.indexOf("&")<0?t:t.replace(dj,pj)}var _j=/[&<>"]/,hj=/[&<>"]/g,mj={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"};function gj(t){return mj[t]}function G_(t){return _j.test(t)?t.replace(hj,gj):t}var Ca={};function nN(t,i){return++i>=t.length-2?i:"paragraph_open"===t[i].type&&t[i].tight&&"inline"===t[i+1].type&&0===t[i+1].content.length&&"paragraph_close"===t[i+2].type&&t[i+2].tight?nN(t,i+2):i}Ca.blockquote_open=function(){return"<blockquote>\n"},Ca.blockquote_close=function(t,i){return"</blockquote>"+Ev(t,i)},Ca.code=function(t,i){return t[i].block?"<pre><code>"+G_(t[i].content)+"</code></pre>"+Ev(t,i):"<code>"+G_(t[i].content)+"</code>"},Ca.fence=function(t,i,n,o,l){var G,K,_=t[i],v="",O=n.langPrefix;if(_.params){if(K=(G=_.params.split(/\s+/g)).join(" "),function tN(t,i){return!!t&&uj.call(t,i)}(l.rules.fence_custom,G[0]))return l.rules.fence_custom[G[0]](t,i,n,o,l);v=' class="'+O+G_(g1(V0(K)))+'"'}return"<pre><code"+v+">"+(n.highlight&&n.highlight.apply(n.highlight,[_.content].concat(G))||G_(_.content))+"</code></pre>"+Ev(t,i)},Ca.fence_custom={},Ca.heading_open=function(t,i){return"<h"+t[i].hLevel+">"},Ca.heading_close=function(t,i){return"</h"+t[i].hLevel+">\n"},Ca.hr=function(t,i,n){return(n.xhtmlOut?"<hr />":"<hr>")+Ev(t,i)},Ca.bullet_list_open=function(){return"<ul>\n"},Ca.bullet_list_close=function(t,i){return"</ul>"+Ev(t,i)},Ca.list_item_open=function(){return"<li>"},Ca.list_item_close=function(){return"</li>\n"},Ca.ordered_list_open=function(t,i){var n=t[i];return"<ol"+(n.order>1?' start="'+n.order+'"':"")+">\n"},Ca.ordered_list_close=function(t,i){return"</ol>"+Ev(t,i)},Ca.paragraph_open=function(t,i){return t[i].tight?"":"<p>"},Ca.paragraph_close=function(t,i){return(t[i].tight?"":"</p>")+(t[i].tight&&i&&"inline"===t[i-1].type&&!t[i-1].content?"":Ev(t,i))},Ca.link_open=function(t,i,n){var o=t[i].title?' title="'+G_(g1(t[i].title))+'"':"",l=n.linkTarget?' target="'+n.linkTarget+'"':"";return'<a href="'+G_(t[i].href)+'"'+o+l+">"},Ca.link_close=function(){return"</a>"},Ca.image=function(t,i,n){var o=' src="'+G_(t[i].src)+'"',l=t[i].title?' title="'+G_(g1(t[i].title))+'"':"";return"<img"+o+' alt="'+(t[i].alt?G_(g1(V0(t[i].alt))):"")+'"'+l+(n.xhtmlOut?" /":"")+">"},Ca.table_open=function(){return"<table>\n"},Ca.table_close=function(){return"</table>\n"},Ca.thead_open=function(){return"<thead>\n"},Ca.thead_close=function(){return"</thead>\n"},Ca.tbody_open=function(){return"<tbody>\n"},Ca.tbody_close=function(){return"</tbody>\n"},Ca.tr_open=function(){return"<tr>"},Ca.tr_close=function(){return"</tr>\n"},Ca.th_open=function(t,i){var n=t[i];return"<th"+(n.align?' style="text-align:'+n.align+'"':"")+">"},Ca.th_close=function(){return"</th>"},Ca.td_open=function(t,i){var n=t[i];return"<td"+(n.align?' style="text-align:'+n.align+'"':"")+">"},Ca.td_close=function(){return"</td>"},Ca.strong_open=function(){return"<strong>"},Ca.strong_close=function(){return"</strong>"},Ca.em_open=function(){return"<em>"},Ca.em_close=function(){return"</em>"},Ca.del_open=function(){return"<del>"},Ca.del_close=function(){return"</del>"},Ca.ins_open=function(){return"<ins>"},Ca.ins_close=function(){return"</ins>"},Ca.mark_open=function(){return"<mark>"},Ca.mark_close=function(){return"</mark>"},Ca.sub=function(t,i){return"<sub>"+G_(t[i].content)+"</sub>"},Ca.sup=function(t,i){return"<sup>"+G_(t[i].content)+"</sup>"},Ca.hardbreak=function(t,i,n){return n.xhtmlOut?"<br />\n":"<br>\n"},Ca.softbreak=function(t,i,n){return n.breaks?n.xhtmlOut?"<br />\n":"<br>\n":"\n"},Ca.text=function(t,i){return G_(t[i].content)},Ca.htmlblock=function(t,i){return t[i].content},Ca.htmltag=function(t,i){return t[i].content},Ca.abbr_open=function(t,i){return'<abbr title="'+G_(g1(t[i].title))+'">'},Ca.abbr_close=function(){return"</abbr>"},Ca.footnote_ref=function(t,i){var n=Number(t[i].id+1).toString(),o="fnref"+n;return t[i].subId>0&&(o+=":"+t[i].subId),'<sup class="footnote-ref"><a href="#fn'+n+'" id="'+o+'">['+n+"]</a></sup>"},Ca.footnote_block_open=function(t,i,n){return(n.xhtmlOut?'<hr class="footnotes-sep" />\n':'<hr class="footnotes-sep">\n')+'<section class="footnotes">\n<ol class="footnotes-list">\n'},Ca.footnote_block_close=function(){return"</ol>\n</section>\n"},Ca.footnote_open=function(t,i){return'<li id="fn'+Number(t[i].id+1).toString()+'"  class="footnote-item">'},Ca.footnote_close=function(){return"</li>\n"},Ca.footnote_anchor=function(t,i){var o="fnref"+Number(t[i].id+1).toString();return t[i].subId>0&&(o+=":"+t[i].subId),' <a href="#'+o+'" class="footnote-backref">\u21a9</a>'},Ca.dl_open=function(){return"<dl>\n"},Ca.dt_open=function(){return"<dt>"},Ca.dd_open=function(){return"<dd>"},Ca.dl_close=function(){return"</dl>\n"},Ca.dt_close=function(){return"</dt>\n"},Ca.dd_close=function(){return"</dd>\n"};var Ev=Ca.getBreak=function(i,n){return(n=nN(i,n))<i.length&&"list_item_close"===i[n].type?"":"\n"};function qD(){this.rules=KD({},Ca),this.getBreak=Ca.getBreak}function Zh(){this.__rules__=[],this.__cache__=null}function Sv(t,i,n,o,l){this.src=t,this.env=o,this.options=n,this.parser=i,this.tokens=l,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache=[],this.isInLabel=!1,this.linkLevel=0,this.linkContent="",this.labelUnmatchedScopes=0}function cS(t,i){var n,o,l,_=-1,v=t.posMax,O=t.pos,P=t.isInLabel;if(t.isInLabel)return-1;if(t.labelUnmatchedScopes)return t.labelUnmatchedScopes--,-1;for(t.pos=i+1,t.isInLabel=!0,n=1;t.pos<v;){if(91===(l=t.src.charCodeAt(t.pos)))n++;else if(93===l&&0==--n){o=!0;break}t.parser.skipToken(t)}return o?(_=t.pos,t.labelUnmatchedScopes=0):t.labelUnmatchedScopes=n-1,t.pos=O,t.isInLabel=P,_}function yj(t,i,n,o){var l,_,v,O,P,G;if(42!==t.charCodeAt(0)||91!==t.charCodeAt(1)||-1===t.indexOf("]:")||(_=cS(l=new Sv(t,i,n,o,[]),1))<0||58!==t.charCodeAt(_+1))return-1;for(O=l.posMax,v=_+2;v<O&&10!==l.src.charCodeAt(v);v++);return P=t.slice(2,_),0===(G=t.slice(_+2,v).trim()).length?-1:(o.abbreviations||(o.abbreviations={}),typeof o.abbreviations[":"+P]>"u"&&(o.abbreviations[":"+P]=G),v)}function eR(t){var i=g1(t);try{i=decodeURI(i)}catch{}return encodeURI(i)}function rN(t,i){var n,o,l,_=i,v=t.posMax;if(60===t.src.charCodeAt(i)){for(i++;i<v;){if(10===(n=t.src.charCodeAt(i)))return!1;if(62===n)return l=eR(V0(t.src.slice(_+1,i))),!!t.parser.validateLink(l)&&(t.pos=i+1,t.linkContent=l,!0);92===n&&i+1<v?i+=2:i++}return!1}for(o=0;i<v&&!(32===(n=t.src.charCodeAt(i))||n<32||127===n);)if(92===n&&i+1<v)i+=2;else{if(40===n&&++o>1||41===n&&--o<0)break;i++}return!(_===i||(l=V0(t.src.slice(_,i)),!t.parser.validateLink(l))||(t.linkContent=l,t.pos=i,0))}function iN(t,i){var n,o=i,l=t.posMax,_=t.src.charCodeAt(i);if(34!==_&&39!==_&&40!==_)return!1;for(i++,40===_&&(_=41);i<l;){if((n=t.src.charCodeAt(i))===_)return t.pos=i+1,t.linkContent=V0(t.src.slice(o+1,i)),!0;92===n&&i+1<l?i+=2:i++}return!1}function oN(t){return t.trim().replace(/\s+/g," ").toUpperCase()}function Sj(t,i,n,o){var l,_,v,O,P,G,K,oe,ue;if(91!==t.charCodeAt(0)||-1===t.indexOf("]:")||(_=cS(l=new Sv(t,i,n,o,[]),0))<0||58!==t.charCodeAt(_+1))return-1;for(O=l.posMax,v=_+2;v<O&&(32===(P=l.src.charCodeAt(v))||10===P);v++);if(!rN(l,v))return-1;for(K=l.linkContent,G=v=l.pos,v+=1;v<O&&(32===(P=l.src.charCodeAt(v))||10===P);v++);for(v<O&&G!==v&&iN(l,v)?(oe=l.linkContent,v=l.pos):(oe="",v=G);v<O&&32===l.src.charCodeAt(v);)v++;return v<O&&10!==l.src.charCodeAt(v)?-1:(ue=oN(t.slice(1,_)),typeof o.references[ue]>"u"&&(o.references[ue]={title:oe,href:K}),v)}qD.prototype.renderInline=function(t,i,n){for(var o=this.rules,l=t.length,_=0,v="";l--;)v+=o[t[_].type](t,_++,i,n,this);return v},qD.prototype.render=function(t,i,n){for(var o=this.rules,l=t.length,_=-1,v="";++_<l;)v+="inline"===t[_].type?this.renderInline(t[_].children,i,n):o[t[_].type](t,_,i,n,this);return v},Zh.prototype.__find__=function(t){for(var i=this.__rules__.length,n=-1;i--;)if(this.__rules__[++n].name===t)return n;return-1},Zh.prototype.__compile__=function(){var t=this,i=[""];t.__rules__.forEach(function(n){n.enabled&&n.alt.forEach(function(o){i.indexOf(o)<0&&i.push(o)})}),t.__cache__={},i.forEach(function(n){t.__cache__[n]=[],t.__rules__.forEach(function(o){o.enabled&&(n&&o.alt.indexOf(n)<0||t.__cache__[n].push(o.fn))})})},Zh.prototype.at=function(t,i,n){var o=this.__find__(t),l=n||{};if(-1===o)throw new Error("Parser rule not found: "+t);this.__rules__[o].fn=i,this.__rules__[o].alt=l.alt||[],this.__cache__=null},Zh.prototype.before=function(t,i,n,o){var l=this.__find__(t),_=o||{};if(-1===l)throw new Error("Parser rule not found: "+t);this.__rules__.splice(l,0,{name:i,enabled:!0,fn:n,alt:_.alt||[]}),this.__cache__=null},Zh.prototype.after=function(t,i,n,o){var l=this.__find__(t),_=o||{};if(-1===l)throw new Error("Parser rule not found: "+t);this.__rules__.splice(l+1,0,{name:i,enabled:!0,fn:n,alt:_.alt||[]}),this.__cache__=null},Zh.prototype.push=function(t,i,n){this.__rules__.push({name:t,enabled:!0,fn:i,alt:(n||{}).alt||[]}),this.__cache__=null},Zh.prototype.enable=function(t,i){t=Array.isArray(t)?t:[t],i&&this.__rules__.forEach(function(n){n.enabled=!1}),t.forEach(function(n){var o=this.__find__(n);if(o<0)throw new Error("Rules manager: invalid rule name "+n);this.__rules__[o].enabled=!0},this),this.__cache__=null},Zh.prototype.disable=function(t){(t=Array.isArray(t)?t:[t]).forEach(function(i){var n=this.__find__(i);if(n<0)throw new Error("Rules manager: invalid rule name "+i);this.__rules__[n].enabled=!1},this),this.__cache__=null},Zh.prototype.getRules=function(t){return null===this.__cache__&&this.__compile__(),this.__cache__[t]||[]},Sv.prototype.pushPending=function(){this.tokens.push({type:"text",content:this.pending,level:this.pendingLevel}),this.pending=""},Sv.prototype.push=function(t){this.pending&&this.pushPending(),this.tokens.push(t),this.pendingLevel=this.level},Sv.prototype.cacheSet=function(t,i){for(var n=this.cache.length;n<=t;n++)this.cache.push(0);this.cache[t]=i},Sv.prototype.cacheGet=function(t){return t<this.cache.length?this.cache[t]:0};var sN=" \n()[]'\".,!?-";function tR(t){return t.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1")}var Oj=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,Aj=/\((c|tm|r|p)\)/gi,Dj={c:"\xa9",r:"\xae",p:"\xa7",tm:"\u2122"};function Rj(t){return t.indexOf("(")<0?t:t.replace(Aj,function(i,n){return Dj[n.toLowerCase()]})}var wj=/['"]/,aN=/['"]/g,Pj=/[-\s()\[\]]/;function uN(t,i){return!(i<0||i>=t.length||Pj.test(t[i]))}function Z0(t,i,n){return t.substr(0,i)+n+t.substr(i+1)}var nR=[["block",function vj(t){t.inlineMode?t.tokens.push({type:"inline",content:t.src.replace(/\n/g," ").trim(),level:0,lines:[0,1],children:[]}):t.block.parse(t.src,t.options,t.env,t.tokens)}],["abbr",function Ej(t){var n,o,l,_,i=t.tokens;if(!t.inlineMode)for(n=1,o=i.length-1;n<o;n++)if("paragraph_open"===i[n-1].type&&"inline"===i[n].type&&"paragraph_close"===i[n+1].type){for(l=i[n].content;l.length&&!((_=yj(l,t.inline,t.options,t.env))<0);)l=l.slice(_).trim();i[n].content=l,l.length||(i[n-1].tight=!0,i[n+1].tight=!0)}}],["references",function bj(t){var n,o,l,_,i=t.tokens;if(t.env.references=t.env.references||{},!t.inlineMode)for(n=1,o=i.length-1;n<o;n++)if("inline"===i[n].type&&"paragraph_open"===i[n-1].type&&"paragraph_close"===i[n+1].type){for(l=i[n].content;l.length&&!((_=Sj(l,t.inline,t.options,t.env))<0);)l=l.slice(_).trim();i[n].content=l,l.length||(i[n-1].tight=!0,i[n+1].tight=!0)}}],["inline",function Tj(t){var n,o,l,i=t.tokens;for(o=0,l=i.length;o<l;o++)"inline"===(n=i[o]).type&&t.inline.parse(n.content,t.options,t.env,n.children)}],["footnote_tail",function Cj(t){var i,n,o,l,_,v,O,P,G,K=0,oe=!1,ue={};if(t.env.footnotes&&(t.tokens=t.tokens.filter(function(pe){return"footnote_reference_open"===pe.type?(oe=!0,P=[],G=pe.label,!1):"footnote_reference_close"===pe.type?(oe=!1,ue[":"+G]=P,!1):(oe&&P.push(pe),!oe)}),t.env.footnotes.list)){for(v=t.env.footnotes.list,t.tokens.push({type:"footnote_block_open",level:K++}),i=0,n=v.length;i<n;i++){for(t.tokens.push({type:"footnote_open",id:i,level:K++}),v[i].tokens?((O=[]).push({type:"paragraph_open",tight:!1,level:K++}),O.push({type:"inline",content:"",level:K,children:v[i].tokens}),O.push({type:"paragraph_close",tight:!1,level:--K})):v[i].label&&(O=ue[":"+v[i].label]),t.tokens=t.tokens.concat(O),_="paragraph_close"===t.tokens[t.tokens.length-1].type?t.tokens.pop():null,l=v[i].count>0?v[i].count:1,o=0;o<l;o++)t.tokens.push({type:"footnote_anchor",id:i,subId:o,level:K});_&&t.tokens.push(_),t.tokens.push({type:"footnote_close",level:--K})}t.tokens.push({type:"footnote_block_close",level:--K})}}],["abbr2",function Mj(t){var i,n,o,l,_,v,O,P,G,K,oe,ue,pe=t.tokens;if(t.env.abbreviations)for(t.env.abbrRegExp||(ue="(^|["+sN.split("").map(tR).join("")+"])("+Object.keys(t.env.abbreviations).map(function(ye){return ye.substr(1)}).sort(function(ye,Ue){return Ue.length-ye.length}).map(tR).join("|")+")($|["+sN.split("").map(tR).join("")+"])",t.env.abbrRegExp=new RegExp(ue,"g")),K=t.env.abbrRegExp,n=0,o=pe.length;n<o;n++)if("inline"===pe[n].type)for(i=(l=pe[n].children).length-1;i>=0;i--)if("text"===(_=l[i]).type){for(P=0,v=_.content,K.lastIndex=0,G=_.level,O=[];oe=K.exec(v);)K.lastIndex>P&&O.push({type:"text",content:v.slice(P,oe.index+oe[1].length),level:G}),O.push({type:"abbr_open",title:t.env.abbreviations[":"+oe[2]],level:G++}),O.push({type:"text",content:oe[2],level:G}),O.push({type:"abbr_close",level:--G}),P=K.lastIndex-oe[3].length;O.length&&(P<v.length&&O.push({type:"text",content:v.slice(P),level:G}),pe[n].children=l=[].concat(l.slice(0,i),O,l.slice(i+1)))}}],["replacements",function xj(t){var i,n,o,l,_;if(t.options.typographer)for(_=t.tokens.length-1;_>=0;_--)if("inline"===t.tokens[_].type)for(i=(l=t.tokens[_].children).length-1;i>=0;i--)"text"===(n=l[i]).type&&(o=Rj(o=n.content),Oj.test(o)&&(o=o.replace(/\+-/g,"\xb1").replace(/\.{2,}/g,"\u2026").replace(/([?!])\u2026/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1\u2014$2").replace(/(^|\s)--(\s|$)/gm,"$1\u2013$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1\u2013$2")),n.content=o)}],["smartquotes",function Nj(t){var i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke;if(t.options.typographer)for(ke=[],Ue=t.tokens.length-1;Ue>=0;Ue--)if("inline"===t.tokens[Ue].type)for(xe=t.tokens[Ue].children,ke.length=0,i=0;i<xe.length;i++)if("text"===(n=xe[i]).type&&!wj.test(n.text)){for(O=xe[i].level,pe=ke.length-1;pe>=0&&!(ke[pe].level<=O);pe--);ke.length=pe+1,_=0,v=(o=n.content).length;e:for(;_<v&&(aN.lastIndex=_,l=aN.exec(o),l);)if(P=!uN(o,l.index-1),ye="'"===l[0],(G=!uN(o,_=l.index+1))||P){if(oe=!G,ue=!P)for(pe=ke.length-1;pe>=0&&(K=ke[pe],!(ke[pe].level<O));pe--)if(K.single===ye&&ke[pe].level===O){K=ke[pe],ye?(xe[K.token].content=Z0(xe[K.token].content,K.pos,t.options.quotes[2]),n.content=Z0(n.content,l.index,t.options.quotes[3])):(xe[K.token].content=Z0(xe[K.token].content,K.pos,t.options.quotes[0]),n.content=Z0(n.content,l.index,t.options.quotes[1])),ke.length=pe;continue e}oe?ke.push({token:i,pos:l.index,single:ye,level:O}):ue&&ye&&(n.content=Z0(n.content,l.index,"\u2019"))}else ye&&(n.content=Z0(n.content,l.index,"\u2019"))}}]];function cN(){this.options={},this.ruler=new Zh;for(var t=0;t<nR.length;t++)this.ruler.push(nR[t][0],nR[t][1])}function bv(t,i,n,o,l){var _,v,O,P,G,K,oe;for(this.src=t,this.parser=i,this.options=n,this.env=o,this.tokens=l,this.bMarks=[],this.eMarks=[],this.tShift=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.parentType="root",this.ddIndent=-1,this.level=0,this.result="",K=0,oe=!1,O=P=K=0,G=(v=this.src).length;P<G;P++){if(_=v.charCodeAt(P),!oe){if(32===_){K++;continue}oe=!0}(10===_||P===G-1)&&(10!==_&&P++,this.bMarks.push(O),this.eMarks.push(P),this.tShift.push(K),oe=!1,K=0,O=P+1)}this.bMarks.push(v.length),this.eMarks.push(v.length),this.tShift.push(0),this.lineMax=this.bMarks.length-1}function dN(t,i){var n,o,l;return(o=t.bMarks[i]+t.tShift[i])>=(l=t.eMarks[i])||42!==(n=t.src.charCodeAt(o++))&&45!==n&&43!==n||o<l&&32!==t.src.charCodeAt(o)?-1:o}function fN(t,i){var n,o=t.bMarks[i]+t.tShift[i],l=t.eMarks[i];if(o+1>=l||(n=t.src.charCodeAt(o++))<48||n>57)return-1;for(;;){if(o>=l)return-1;if(!((n=t.src.charCodeAt(o++))>=48&&n<=57)){if(41===n||46===n)break;return-1}}return o<l&&32!==t.src.charCodeAt(o)?-1:o}cN.prototype.process=function(t){var i,n,o;for(i=0,n=(o=this.ruler.getRules("")).length;i<n;i++)o[i](t)},bv.prototype.isEmpty=function(i){return this.bMarks[i]+this.tShift[i]>=this.eMarks[i]},bv.prototype.skipEmptyLines=function(i){for(var n=this.lineMax;i<n&&!(this.bMarks[i]+this.tShift[i]<this.eMarks[i]);i++);return i},bv.prototype.skipSpaces=function(i){for(var n=this.src.length;i<n&&32===this.src.charCodeAt(i);i++);return i},bv.prototype.skipChars=function(i,n){for(var o=this.src.length;i<o&&this.src.charCodeAt(i)===n;i++);return i},bv.prototype.skipCharsBack=function(i,n,o){if(i<=o)return i;for(;i>o;)if(n!==this.src.charCodeAt(--i))return i+1;return i},bv.prototype.getLines=function(i,n,o,l){var _,v,P,G,K=i;if(i>=n)return"";if(K+1===n)return v=this.bMarks[K]+Math.min(this.tShift[K],o),this.src.slice(v,l?this.eMarks[K]+1:this.eMarks[K]);for(P=new Array(n-i),_=0;K<n;K++,_++)(G=this.tShift[K])>o&&(G=o),G<0&&(G=0),P[_]=this.src.slice(v=this.bMarks[K]+G,K+1<n||l?this.eMarks[K]+1:this.eMarks[K]);return P.join("")};var pN={};["article","aside","button","blockquote","body","canvas","caption","col","colgroup","dd","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","iframe","li","map","object","ol","output","p","pre","progress","script","section","style","table","tbody","td","textarea","tfoot","th","tr","thead","ul","video"].forEach(function(t){pN[t]=!0});var Yj=/^<([a-zA-Z]{1,15})[\s\/>]/,jj=/^<\/([a-zA-Z]{1,15})[\s>]/;function rR(t,i){var n=t.bMarks[i]+t.blkIndent;return t.src.substr(n,t.eMarks[i]-n)}function VC(t,i){var n,o,l=t.bMarks[i]+t.tShift[i],_=t.eMarks[i];return l>=_||126!==(o=t.src.charCodeAt(l++))&&58!==o||l===(n=t.skipSpaces(l))||n>=_?-1:n}var ZC=[["code",function Ij(t,i,n){var o,l;if(t.tShift[i]-t.blkIndent<4)return!1;for(l=o=i+1;o<n;)if(t.isEmpty(o))o++;else{if(!(t.tShift[o]-t.blkIndent>=4))break;l=++o}return t.line=o,t.tokens.push({type:"code",content:t.getLines(i,l,4+t.blkIndent,!0),block:!0,lines:[i,t.line],level:t.level}),!0}],["fences",function Fj(t,i,n,o){var l,_,v,O,P,G=!1,K=t.bMarks[i]+t.tShift[i],oe=t.eMarks[i];if(K+3>oe||126!==(l=t.src.charCodeAt(K))&&96!==l||(P=K,(_=(K=t.skipChars(K,l))-P)<3)||(v=t.src.slice(K,oe).trim()).indexOf("`")>=0)return!1;if(o)return!0;for(O=i;!(++O>=n||(K=P=t.bMarks[O]+t.tShift[O],oe=t.eMarks[O],K<oe&&t.tShift[O]<t.blkIndent));)if(!(t.src.charCodeAt(K)!==l||t.tShift[O]-t.blkIndent>=4||(K=t.skipChars(K,l),K-P<_||(K=t.skipSpaces(K),K<oe)))){G=!0;break}return _=t.tShift[i],t.line=O+(G?1:0),t.tokens.push({type:"fence",params:v,content:t.getLines(i+1,O,_,!0),lines:[i,t.line],level:t.level}),!0},["paragraph","blockquote","list"]],["blockquote",function Lj(t,i,n,o){var l,_,v,O,P,G,K,oe,ue,pe,ye,Ue=t.bMarks[i]+t.tShift[i],xe=t.eMarks[i];if(Ue>xe||62!==t.src.charCodeAt(Ue++)||t.level>=t.options.maxNesting)return!1;if(o)return!0;for(32===t.src.charCodeAt(Ue)&&Ue++,P=t.blkIndent,t.blkIndent=0,O=[t.bMarks[i]],t.bMarks[i]=Ue,_=(Ue=Ue<xe?t.skipSpaces(Ue):Ue)>=xe,v=[t.tShift[i]],t.tShift[i]=Ue-t.bMarks[i],oe=t.parser.ruler.getRules("blockquote"),l=i+1;l<n&&!((Ue=t.bMarks[l]+t.tShift[l])>=(xe=t.eMarks[l]));l++)if(62!==t.src.charCodeAt(Ue++)){if(_)break;for(ye=!1,ue=0,pe=oe.length;ue<pe;ue++)if(oe[ue](t,l,n,!0)){ye=!0;break}if(ye)break;O.push(t.bMarks[l]),v.push(t.tShift[l]),t.tShift[l]=-1337}else 32===t.src.charCodeAt(Ue)&&Ue++,O.push(t.bMarks[l]),t.bMarks[l]=Ue,_=(Ue=Ue<xe?t.skipSpaces(Ue):Ue)>=xe,v.push(t.tShift[l]),t.tShift[l]=Ue-t.bMarks[l];for(G=t.parentType,t.parentType="blockquote",t.tokens.push({type:"blockquote_open",lines:K=[i,0],level:t.level++}),t.parser.tokenize(t,i,l),t.tokens.push({type:"blockquote_close",level:--t.level}),t.parentType=G,K[1]=t.line,ue=0;ue<v.length;ue++)t.bMarks[ue+i]=O[ue],t.tShift[ue+i]=v[ue];return t.blkIndent=P,!0},["paragraph","blockquote","list"]],["hr",function kj(t,i,n,o){var l,_,v,O=t.bMarks[i],P=t.eMarks[i];if((O+=t.tShift[i])>P||42!==(l=t.src.charCodeAt(O++))&&45!==l&&95!==l)return!1;for(_=1;O<P;){if((v=t.src.charCodeAt(O++))!==l&&32!==v)return!1;v===l&&_++}return!(_<3||(o||(t.line=i+1,t.tokens.push({type:"hr",lines:[i,t.line],level:t.level})),0))},["paragraph","blockquote","list"]],["list",function Hj(t,i,n,o){var l,_,v,O,P,G,K,oe,pe,ye,Ue,xe,ke,we,Z,Ft,Dt,ln,$n,nn,Jn,Yt=!0;if((oe=fN(t,i))>=0)xe=!0;else{if(!((oe=dN(t,i))>=0))return!1;xe=!1}if(t.level>=t.options.maxNesting)return!1;if(Ue=t.src.charCodeAt(oe-1),o)return!0;for(we=t.tokens.length,xe?(K=t.bMarks[i]+t.tShift[i],ye=Number(t.src.substr(K,oe-K-1)),t.tokens.push({type:"ordered_list_open",order:ye,lines:Ft=[i,0],level:t.level++})):t.tokens.push({type:"bullet_list_open",lines:Ft=[i,0],level:t.level++}),l=i,Z=!1,ln=t.parser.ruler.getRules("list");l<n&&((pe=(ke=t.skipSpaces(oe))>=t.eMarks[l]?1:ke-oe)>4&&(pe=1),pe<1&&(pe=1),_=oe-t.bMarks[l]+pe,t.tokens.push({type:"list_item_open",lines:Dt=[i,0],level:t.level++}),O=t.blkIndent,P=t.tight,v=t.tShift[i],G=t.parentType,t.tShift[i]=ke-t.bMarks[i],t.blkIndent=_,t.tight=!0,t.parentType="list",t.parser.tokenize(t,i,n,!0),(!t.tight||Z)&&(Yt=!1),Z=t.line-i>1&&t.isEmpty(t.line-1),t.blkIndent=O,t.tShift[i]=v,t.tight=P,t.parentType=G,t.tokens.push({type:"list_item_close",level:--t.level}),l=i=t.line,Dt[1]=l,ke=t.bMarks[i],!(l>=n||t.isEmpty(l)||t.tShift[l]<t.blkIndent));){for(Jn=!1,$n=0,nn=ln.length;$n<nn;$n++)if(ln[$n](t,l,n,!0)){Jn=!0;break}if(Jn)break;if(xe){if((oe=fN(t,l))<0)break}else if((oe=dN(t,l))<0)break;if(Ue!==t.src.charCodeAt(oe-1))break}return t.tokens.push({type:xe?"ordered_list_close":"bullet_list_close",level:--t.level}),Ft[1]=l,t.line=l,Yt&&function $j(t,i){var n,o,l=t.level+2;for(n=i+2,o=t.tokens.length-2;n<o;n++)t.tokens[n].level===l&&"paragraph_open"===t.tokens[n].type&&(t.tokens[n+2].tight=!0,t.tokens[n].tight=!0,n+=2)}(t,we),!0},["paragraph","blockquote"]],["footnote",function Uj(t,i,n,o){var l,_,v,O,P,G=t.bMarks[i]+t.tShift[i],K=t.eMarks[i];if(G+4>K||91!==t.src.charCodeAt(G)||94!==t.src.charCodeAt(G+1)||t.level>=t.options.maxNesting)return!1;for(O=G+2;O<K;O++){if(32===t.src.charCodeAt(O))return!1;if(93===t.src.charCodeAt(O))break}return!(O===G+2||O+1>=K||58!==t.src.charCodeAt(++O)||(o||(O++,t.env.footnotes||(t.env.footnotes={}),t.env.footnotes.refs||(t.env.footnotes.refs={}),P=t.src.slice(G+2,O-2),t.env.footnotes.refs[":"+P]=-1,t.tokens.push({type:"footnote_reference_open",label:P,level:t.level++}),l=t.bMarks[i],_=t.tShift[i],v=t.parentType,t.tShift[i]=t.skipSpaces(O)-O,t.bMarks[i]=O,t.blkIndent+=4,t.parentType="footnote",t.tShift[i]<t.blkIndent&&(t.tShift[i]+=t.blkIndent,t.bMarks[i]-=t.blkIndent),t.parser.tokenize(t,i,n,!0),t.parentType=v,t.blkIndent-=4,t.tShift[i]=_,t.bMarks[i]=l,t.tokens.push({type:"footnote_reference_close",level:--t.level})),0))},["paragraph"]],["heading",function Bj(t,i,n,o){var l,_,v,O=t.bMarks[i]+t.tShift[i],P=t.eMarks[i];if(O>=P||35!==(l=t.src.charCodeAt(O))||O>=P)return!1;for(_=1,l=t.src.charCodeAt(++O);35===l&&O<P&&_<=6;)_++,l=t.src.charCodeAt(++O);return!(_>6||O<P&&32!==l||(o||(P=t.skipCharsBack(P,32,O),(v=t.skipCharsBack(P,35,O))>O&&32===t.src.charCodeAt(v-1)&&(P=v),t.line=i+1,t.tokens.push({type:"heading_open",hLevel:_,lines:[i,t.line],level:t.level}),O<P&&t.tokens.push({type:"inline",content:t.src.slice(O,P).trim(),level:t.level+1,lines:[i,t.line],children:[]}),t.tokens.push({type:"heading_close",hLevel:_,level:t.level})),0))},["paragraph","blockquote"]],["lheading",function Gj(t,i,n){var o,l,_,v=i+1;return!(v>=n||t.tShift[v]<t.blkIndent||t.tShift[v]-t.blkIndent>3||(l=t.bMarks[v]+t.tShift[v],_=t.eMarks[v],l>=_)||(o=t.src.charCodeAt(l),45!==o&&61!==o)||(l=t.skipChars(l,o),l=t.skipSpaces(l),l<_)||(l=t.bMarks[i]+t.tShift[i],t.line=v+1,t.tokens.push({type:"heading_open",hLevel:61===o?1:2,lines:[i,t.line],level:t.level}),t.tokens.push({type:"inline",content:t.src.slice(l,t.eMarks[i]).trim(),level:t.level+1,lines:[i,t.line-1],children:[]}),t.tokens.push({type:"heading_close",hLevel:61===o?1:2,level:t.level}),0))}],["htmlblock",function Vj(t,i,n,o){var l,_,v,O=t.bMarks[i],P=t.eMarks[i],G=t.tShift[i];if(O+=G,!t.options.html||G>3||O+2>=P||60!==t.src.charCodeAt(O))return!1;if(33===(l=t.src.charCodeAt(O+1))||63===l){if(o)return!0}else{if(47!==l&&!function zj(t){var i=32|t;return i>=97&&i<=122}(l))return!1;if(47===l){if(!(_=t.src.slice(O,P).match(jj)))return!1}else if(!(_=t.src.slice(O,P).match(Yj)))return!1;if(!0!==pN[_[1].toLowerCase()])return!1;if(o)return!0}for(v=i+1;v<t.lineMax&&!t.isEmpty(v);)v++;return t.line=v,t.tokens.push({type:"htmlblock",level:t.level,lines:[i,t.line],content:t.getLines(i,v,0,!0)}),!0},["paragraph","blockquote"]],["table",function Zj(t,i,n,o){var l,_,v,O,P,G,K,oe,ue,pe,ye;if(i+2>n||t.tShift[P=i+1]<t.blkIndent||(v=t.bMarks[P]+t.tShift[P])>=t.eMarks[P]||124!==(l=t.src.charCodeAt(v))&&45!==l&&58!==l||(_=rR(t,i+1),!/^[-:| ]+$/.test(_))||(G=_.split("|"))<=2)return!1;for(oe=[],O=0;O<G.length;O++){if(!(ue=G[O].trim())){if(0===O||O===G.length-1)continue;return!1}if(!/^:?-+:?$/.test(ue))return!1;58===ue.charCodeAt(ue.length-1)?oe.push(58===ue.charCodeAt(0)?"center":"right"):58===ue.charCodeAt(0)?oe.push("left"):oe.push("")}if(-1===(_=rR(t,i).trim()).indexOf("|")||(G=_.replace(/^\||\|$/g,"").split("|"),oe.length!==G.length))return!1;if(o)return!0;for(t.tokens.push({type:"table_open",lines:pe=[i,0],level:t.level++}),t.tokens.push({type:"thead_open",lines:[i,i+1],level:t.level++}),t.tokens.push({type:"tr_open",lines:[i,i+1],level:t.level++}),O=0;O<G.length;O++)t.tokens.push({type:"th_open",align:oe[O],lines:[i,i+1],level:t.level++}),t.tokens.push({type:"inline",content:G[O].trim(),lines:[i,i+1],level:t.level,children:[]}),t.tokens.push({type:"th_close",level:--t.level});for(t.tokens.push({type:"tr_close",level:--t.level}),t.tokens.push({type:"thead_close",level:--t.level}),t.tokens.push({type:"tbody_open",lines:ye=[i+2,0],level:t.level++}),P=i+2;P<n&&!(t.tShift[P]<t.blkIndent||(_=rR(t,P).trim(),-1===_.indexOf("|")));P++){for(G=_.replace(/^\||\|$/g,"").split("|"),t.tokens.push({type:"tr_open",level:t.level++}),O=0;O<G.length;O++)t.tokens.push({type:"td_open",align:oe[O],level:t.level++}),K=G[O].substring(124===G[O].charCodeAt(0)?1:0,124===G[O].charCodeAt(G[O].length-1)?G[O].length-1:G[O].length).trim(),t.tokens.push({type:"inline",content:K,level:t.level,children:[]}),t.tokens.push({type:"td_close",level:--t.level});t.tokens.push({type:"tr_close",level:--t.level})}return t.tokens.push({type:"tbody_close",level:--t.level}),t.tokens.push({type:"table_close",level:--t.level}),pe[1]=ye[1]=P,t.line=P,!0},["paragraph"]],["deflist",function Jj(t,i,n,o){var l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke;if(o)return!(t.ddIndent<0)&&VC(t,i)>=0;if(t.isEmpty(K=i+1)&&++K>n||t.tShift[K]<t.blkIndent||(l=VC(t,K))<0||t.level>=t.options.maxNesting)return!1;G=t.tokens.length,t.tokens.push({type:"dl_open",lines:P=[i,0],level:t.level++}),v=i,_=K;e:for(;;){for(ke=!0,xe=!1,t.tokens.push({type:"dt_open",lines:[v,v],level:t.level++}),t.tokens.push({type:"inline",content:t.getLines(v,v+1,t.blkIndent,!1).trim(),level:t.level+1,lines:[v,v],children:[]}),t.tokens.push({type:"dt_close",level:--t.level});;){if(t.tokens.push({type:"dd_open",lines:O=[K,0],level:t.level++}),Ue=t.tight,ue=t.ddIndent,oe=t.blkIndent,ye=t.tShift[_],pe=t.parentType,t.blkIndent=t.ddIndent=t.tShift[_]+2,t.tShift[_]=l-t.bMarks[_],t.tight=!0,t.parentType="deflist",t.parser.tokenize(t,_,n,!0),(!t.tight||xe)&&(ke=!1),xe=t.line-_>1&&t.isEmpty(t.line-1),t.tShift[_]=ye,t.tight=Ue,t.parentType=pe,t.blkIndent=oe,t.ddIndent=ue,t.tokens.push({type:"dd_close",level:--t.level}),O[1]=K=t.line,K>=n||t.tShift[K]<t.blkIndent)break e;if((l=VC(t,K))<0)break;_=K}if(K>=n||t.isEmpty(v=K)||t.tShift[v]<t.blkIndent||(_=v+1)>=n||(t.isEmpty(_)&&_++,_>=n)||t.tShift[_]<t.blkIndent||(l=VC(t,_))<0)break}return t.tokens.push({type:"dl_close",level:--t.level}),P[1]=K,t.line=K,ke&&function Wj(t,i){var n,o,l=t.level+2;for(n=i+2,o=t.tokens.length-2;n<o;n++)t.tokens[n].level===l&&"paragraph_open"===t.tokens[n].type&&(t.tokens[n+2].tight=!0,t.tokens[n].tight=!0,n+=2)}(t,G),!0},["paragraph"]],["paragraph",function Qj(t,i){var n,o,l,_,v,P,O=i+1;if(O<(n=t.lineMax)&&!t.isEmpty(O))for(P=t.parser.ruler.getRules("paragraph");O<n&&!t.isEmpty(O);O++)if(!(t.tShift[O]-t.blkIndent>3)){for(l=!1,_=0,v=P.length;_<v;_++)if(P[_](t,O,n,!0)){l=!0;break}if(l)break}return o=t.getLines(i,O,t.blkIndent,!1).trim(),t.line=O,o.length&&(t.tokens.push({type:"paragraph_open",tight:!1,lines:[i,t.line],level:t.level}),t.tokens.push({type:"inline",content:o,level:t.level+1,lines:[i,t.line],children:[]}),t.tokens.push({type:"paragraph_close",tight:!1,level:t.level})),!0}]];function iR(){this.ruler=new Zh;for(var t=0;t<ZC.length;t++)this.ruler.push(ZC[t][0],ZC[t][1],{alt:(ZC[t][2]||[]).slice()})}iR.prototype.tokenize=function(t,i,n){for(var P,o=this.ruler.getRules(""),l=o.length,_=i,v=!1;_<n&&(t.line=_=t.skipEmptyLines(_),!(_>=n||t.tShift[_]<t.blkIndent));){for(P=0;P<l&&!o[P](t,_,n,!1);P++);if(t.tight=!v,t.isEmpty(t.line-1)&&(v=!0),(_=t.line)<n&&t.isEmpty(_)){if(v=!0,++_<n&&"list"===t.parentType&&t.isEmpty(_))break;t.line=_}}};var Kj=/[\n\t]/g,Xj=/\r[\n\u0085]|[\u2424\u2028\u0085]/g,qj=/\u00a0/g;function ez(t){switch(t){case 10:case 92:case 96:case 42:case 95:case 94:case 91:case 93:case 33:case 38:case 60:case 62:case 123:case 125:case 36:case 37:case 64:case 126:case 43:case 61:case 58:return!0;default:return!1}}iR.prototype.parse=function(t,i,n,o){var l,_=0,v=0;if(!t)return[];(t=(t=t.replace(qj," ")).replace(Xj,"\n")).indexOf("\t")>=0&&(t=t.replace(Kj,function(O,P){var G;return 10===t.charCodeAt(P)?(_=P+1,v=0,O):(G="    ".slice((P-_-v)%4),v=P-_+1,G)})),l=new bv(t,this,i,n,o),this.tokenize(l,l.line,l.lineMax)};for(var oR=[],_N=0;_N<256;_N++)oR.push(0);function hN(t){return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122}function mN(t,i){var o,l,_,n=i,v=!0,O=!0,P=t.posMax,G=t.src.charCodeAt(i);for(o=i>0?t.src.charCodeAt(i-1):-1;n<P&&t.src.charCodeAt(n)===G;)n++;return n>=P&&(v=!1),(_=n-i)>=4?v=O=!1:((32===(l=n<P?t.src.charCodeAt(n):-1)||10===l)&&(v=!1),(32===o||10===o)&&(O=!1),95===G&&(hN(o)&&(v=!1),hN(l)&&(O=!1))),{can_open:v,can_close:O,delims:_}}"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(t){oR[t.charCodeAt(0)]=1});var uz=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g,dz=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g,mz=["coap","doi","javascript","aaa","aaas","about","acap","cap","cid","crid","data","dav","dict","dns","file","ftp","geo","go","gopher","h323","http","https","iax","icap","im","imap","info","ipp","iris","iris.beep","iris.xpc","iris.xpcs","iris.lwz","ldap","mailto","mid","msrp","msrps","mtqp","mupdate","news","nfs","ni","nih","nntp","opaquelocktoken","pop","pres","rtsp","service","session","shttp","sieve","sip","sips","sms","snmp","soap.beep","soap.beeps","tag","tel","telnet","tftp","thismessage","tn3270","tip","tv","urn","vemmi","ws","wss","xcon","xcon-userid","xmlrpc.beep","xmlrpc.beeps","xmpp","z39.50r","z39.50s","adiumxtra","afp","afs","aim","apt","attachment","aw","beshare","bitcoin","bolo","callto","chrome","chrome-extension","com-eventbrite-attendee","content","cvs","dlna-playsingle","dlna-playcontainer","dtn","dvb","ed2k","facetime","feed","finger","fish","gg","git","gizmoproject","gtalk","hcp","icon","ipn","irc","irc6","ircs","itms","jar","jms","keyparc","lastfm","ldaps","magnet","maps","market","message","mms","ms-help","msnim","mumble","mvn","notes","oid","palm","paparazzi","platform","proxy","psyc","query","res","resource","rmi","rsync","rtmp","secondlife","sftp","sgn","skype","smb","soldat","spotify","ssh","steam","svn","teamspeak","things","udp","unreal","ut2004","ventrilo","view-source","webcal","wtai","wyciwyg","xfire","xri","ymsgr"],gz=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,vz=/^<([a-zA-Z.\-]{1,25}):([^<>\x00-\x20]*)>/;function WC(t,i){return t=t.source,i=i||"",function n(o,l){return o?(t=t.replace(o,l=l.source||l),n):new RegExp(t,i)}}var Cz=WC(/(?:unquoted|single_quoted|double_quoted)/)("unquoted",/[^"'=<>`\x00-\x20]+/)("single_quoted",/'[^']*'/)("double_quoted",/"[^"]*"/)(),Mz=WC(/(?:\s+attr_name(?:\s*=\s*attr_value)?)/)("attr_name",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)("attr_value",Cz)(),Oz=WC(/<[A-Za-z][A-Za-z0-9]*attribute*\s*\/?>/)("attribute",Mz)(),Pz=WC(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)("open_tag",Oz)("close_tag",/<\/[A-Za-z][A-Za-z0-9]*\s*>/)("comment",/<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->/)("processing",/<[?].*?[?]>/)("declaration",/<![A-Z]+\s+[^>]*>/)("cdata",/<!\[CDATA\[[\s\S]*?\]\]>/)(),Fz=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,Lz=/^&([a-z][a-z0-9]{1,31});/i,sR=[["text",function tz(t,i){for(var n=t.pos;n<t.posMax&&!ez(t.src.charCodeAt(n));)n++;return n!==t.pos&&(i||(t.pending+=t.src.slice(t.pos,n)),t.pos=n,!0)}],["newline",function nz(t,i){var n,o,l=t.pos;if(10!==t.src.charCodeAt(l))return!1;if(n=t.pending.length-1,o=t.posMax,!i)if(n>=0&&32===t.pending.charCodeAt(n))if(n>=1&&32===t.pending.charCodeAt(n-1)){for(var _=n-2;_>=0;_--)if(32!==t.pending.charCodeAt(_)){t.pending=t.pending.substring(0,_+1);break}t.push({type:"hardbreak",level:t.level})}else t.pending=t.pending.slice(0,-1),t.push({type:"softbreak",level:t.level});else t.push({type:"softbreak",level:t.level});for(l++;l<o&&32===t.src.charCodeAt(l);)l++;return t.pos=l,!0}],["escape",function rz(t,i){var n,o=t.pos,l=t.posMax;if(92!==t.src.charCodeAt(o))return!1;if(++o<l){if((n=t.src.charCodeAt(o))<256&&0!==oR[n])return i||(t.pending+=t.src[o]),t.pos+=2,!0;if(10===n){for(i||t.push({type:"hardbreak",level:t.level}),o++;o<l&&32===t.src.charCodeAt(o);)o++;return t.pos=o,!0}}return i||(t.pending+="\\"),t.pos++,!0}],["backticks",function iz(t,i){var n,o,l,_,v,O=t.pos;if(96!==t.src.charCodeAt(O))return!1;for(n=O,O++,o=t.posMax;O<o&&96===t.src.charCodeAt(O);)O++;for(l=t.src.slice(n,O),_=v=O;-1!==(_=t.src.indexOf("`",v));){for(v=_+1;v<o&&96===t.src.charCodeAt(v);)v++;if(v-_===l.length)return i||t.push({type:"code",content:t.src.slice(O,_).replace(/[ \n]+/g," ").trim(),block:!1,level:t.level}),t.pos=v,!0}return i||(t.pending+=l),t.pos+=l.length,!0}],["del",function oz(t,i){var n,o,l,O,P,_=t.posMax,v=t.pos;if(126!==t.src.charCodeAt(v)||i||v+4>=_||126!==t.src.charCodeAt(v+1)||t.level>=t.options.maxNesting||(O=v>0?t.src.charCodeAt(v-1):-1,P=t.src.charCodeAt(v+2),126===O)||126===P||32===P||10===P)return!1;for(o=v+2;o<_&&126===t.src.charCodeAt(o);)o++;if(o>v+3)return t.pos+=o-v,i||(t.pending+=t.src.slice(v,o)),!0;for(t.pos=v+2,l=1;t.pos+1<_;){if(126===t.src.charCodeAt(t.pos)&&126===t.src.charCodeAt(t.pos+1)&&(O=t.src.charCodeAt(t.pos-1),126!==(P=t.pos+2<_?t.src.charCodeAt(t.pos+2):-1)&&126!==O&&(32!==O&&10!==O?l--:32!==P&&10!==P&&l++,l<=0))){n=!0;break}t.parser.skipToken(t)}return n?(t.posMax=t.pos,t.pos=v+2,i||(t.push({type:"del_open",level:t.level++}),t.parser.tokenize(t),t.push({type:"del_close",level:--t.level})),t.pos=t.posMax+2,t.posMax=_,!0):(t.pos=v,!1)}],["ins",function sz(t,i){var n,o,l,O,P,_=t.posMax,v=t.pos;if(43!==t.src.charCodeAt(v)||i||v+4>=_||43!==t.src.charCodeAt(v+1)||t.level>=t.options.maxNesting||(O=v>0?t.src.charCodeAt(v-1):-1,P=t.src.charCodeAt(v+2),43===O)||43===P||32===P||10===P)return!1;for(o=v+2;o<_&&43===t.src.charCodeAt(o);)o++;if(o!==v+2)return t.pos+=o-v,i||(t.pending+=t.src.slice(v,o)),!0;for(t.pos=v+2,l=1;t.pos+1<_;){if(43===t.src.charCodeAt(t.pos)&&43===t.src.charCodeAt(t.pos+1)&&(O=t.src.charCodeAt(t.pos-1),43!==(P=t.pos+2<_?t.src.charCodeAt(t.pos+2):-1)&&43!==O&&(32!==O&&10!==O?l--:32!==P&&10!==P&&l++,l<=0))){n=!0;break}t.parser.skipToken(t)}return n?(t.posMax=t.pos,t.pos=v+2,i||(t.push({type:"ins_open",level:t.level++}),t.parser.tokenize(t),t.push({type:"ins_close",level:--t.level})),t.pos=t.posMax+2,t.posMax=_,!0):(t.pos=v,!1)}],["mark",function az(t,i){var n,o,l,O,P,_=t.posMax,v=t.pos;if(61!==t.src.charCodeAt(v)||i||v+4>=_||61!==t.src.charCodeAt(v+1)||t.level>=t.options.maxNesting||(O=v>0?t.src.charCodeAt(v-1):-1,P=t.src.charCodeAt(v+2),61===O)||61===P||32===P||10===P)return!1;for(o=v+2;o<_&&61===t.src.charCodeAt(o);)o++;if(o!==v+2)return t.pos+=o-v,i||(t.pending+=t.src.slice(v,o)),!0;for(t.pos=v+2,l=1;t.pos+1<_;){if(61===t.src.charCodeAt(t.pos)&&61===t.src.charCodeAt(t.pos+1)&&(O=t.src.charCodeAt(t.pos-1),61!==(P=t.pos+2<_?t.src.charCodeAt(t.pos+2):-1)&&61!==O&&(32!==O&&10!==O?l--:32!==P&&10!==P&&l++,l<=0))){n=!0;break}t.parser.skipToken(t)}return n?(t.posMax=t.pos,t.pos=v+2,i||(t.push({type:"mark_open",level:t.level++}),t.parser.tokenize(t),t.push({type:"mark_close",level:--t.level})),t.pos=t.posMax+2,t.posMax=_,!0):(t.pos=v,!1)}],["emphasis",function lz(t,i){var n,o,l,_,v,O,P,G=t.posMax,K=t.pos,oe=t.src.charCodeAt(K);if(95!==oe&&42!==oe||i)return!1;if(n=(P=mN(t,K)).delims,!P.can_open)return t.pos+=n,i||(t.pending+=t.src.slice(K,t.pos)),!0;if(t.level>=t.options.maxNesting)return!1;for(t.pos=K+n,O=[n];t.pos<G;)if(t.src.charCodeAt(t.pos)!==oe)t.parser.skipToken(t);else{if(o=(P=mN(t,t.pos)).delims,P.can_close){for(_=O.pop(),v=o;_!==v;){if(v<_){O.push(_-v);break}if(v-=_,0===O.length)break;t.pos+=_,_=O.pop()}if(0===O.length){n=_,l=!0;break}t.pos+=o;continue}P.can_open&&O.push(o),t.pos+=o}return l?(t.posMax=t.pos,t.pos=K+n,i||((2===n||3===n)&&t.push({type:"strong_open",level:t.level++}),(1===n||3===n)&&t.push({type:"em_open",level:t.level++}),t.parser.tokenize(t),(1===n||3===n)&&t.push({type:"em_close",level:--t.level}),(2===n||3===n)&&t.push({type:"strong_close",level:--t.level})),t.pos=t.posMax+n,t.posMax=G,!0):(t.pos=K,!1)}],["sub",function cz(t,i){var n,o,l=t.posMax,_=t.pos;if(126!==t.src.charCodeAt(_)||i||_+2>=l||t.level>=t.options.maxNesting)return!1;for(t.pos=_+1;t.pos<l;){if(126===t.src.charCodeAt(t.pos)){n=!0;break}t.parser.skipToken(t)}return!n||_+1===t.pos||(o=t.src.slice(_+1,t.pos)).match(/(^|[^\\])(\\\\)*\s/)?(t.pos=_,!1):(t.posMax=t.pos,t.pos=_+1,i||t.push({type:"sub",level:t.level,content:o.replace(uz,"$1")}),t.pos=t.posMax+1,t.posMax=l,!0)}],["sup",function fz(t,i){var n,o,l=t.posMax,_=t.pos;if(94!==t.src.charCodeAt(_)||i||_+2>=l||t.level>=t.options.maxNesting)return!1;for(t.pos=_+1;t.pos<l;){if(94===t.src.charCodeAt(t.pos)){n=!0;break}t.parser.skipToken(t)}return!n||_+1===t.pos||(o=t.src.slice(_+1,t.pos)).match(/(^|[^\\])(\\\\)*\s/)?(t.pos=_,!1):(t.posMax=t.pos,t.pos=_+1,i||t.push({type:"sup",level:t.level,content:o.replace(dz,"$1")}),t.pos=t.posMax+1,t.posMax=l,!0)}],["links",function pz(t,i){var n,o,l,_,v,O,P,G,K=!1,oe=t.pos,ue=t.posMax,pe=t.pos,ye=t.src.charCodeAt(pe);if(33===ye&&(K=!0,ye=t.src.charCodeAt(++pe)),91!==ye||t.level>=t.options.maxNesting||(n=pe+1,(o=cS(t,pe))<0))return!1;if((O=o+1)<ue&&40===t.src.charCodeAt(O)){for(O++;O<ue&&(32===(G=t.src.charCodeAt(O))||10===G);O++);if(O>=ue)return!1;for(pe=O,rN(t,O)?(_=t.linkContent,O=t.pos):_="",pe=O;O<ue&&(32===(G=t.src.charCodeAt(O))||10===G);O++);if(O<ue&&pe!==O&&iN(t,O))for(v=t.linkContent,O=t.pos;O<ue&&(32===(G=t.src.charCodeAt(O))||10===G);O++);else v="";if(O>=ue||41!==t.src.charCodeAt(O))return t.pos=oe,!1;O++}else{if(t.linkLevel>0)return!1;for(;O<ue&&(32===(G=t.src.charCodeAt(O))||10===G);O++);if(O<ue&&91===t.src.charCodeAt(O)&&(pe=O+1,(O=cS(t,O))>=0?l=t.src.slice(pe,O++):O=pe-1),l||(typeof l>"u"&&(O=o+1),l=t.src.slice(n,o)),!(P=t.env.references[oN(l)]))return t.pos=oe,!1;_=P.href,v=P.title}return i||(t.pos=n,t.posMax=o,K?t.push({type:"image",src:_,title:v,alt:t.src.substr(n,o-n),level:t.level}):(t.push({type:"link_open",href:_,title:v,level:t.level++}),t.linkLevel++,t.parser.tokenize(t),t.linkLevel--,t.push({type:"link_close",level:--t.level}))),t.pos=O,t.posMax=ue,!0}],["footnote_inline",function _z(t,i){var n,o,l,_,v=t.posMax,O=t.pos;return!(O+2>=v||94!==t.src.charCodeAt(O)||91!==t.src.charCodeAt(O+1)||t.level>=t.options.maxNesting||(n=O+2,o=cS(t,O+1),o<0)||(i||(t.env.footnotes||(t.env.footnotes={}),t.env.footnotes.list||(t.env.footnotes.list=[]),l=t.env.footnotes.list.length,t.pos=n,t.posMax=o,t.push({type:"footnote_ref",id:l,level:t.level}),t.linkLevel++,_=t.tokens.length,t.parser.tokenize(t),t.env.footnotes.list[l]={tokens:t.tokens.splice(_)},t.linkLevel--),t.pos=o+1,t.posMax=v,0))}],["footnote_ref",function hz(t,i){var n,o,l,_,v=t.posMax,O=t.pos;if(O+3>v||!t.env.footnotes||!t.env.footnotes.refs||91!==t.src.charCodeAt(O)||94!==t.src.charCodeAt(O+1)||t.level>=t.options.maxNesting)return!1;for(o=O+2;o<v;o++){if(32===t.src.charCodeAt(o)||10===t.src.charCodeAt(o))return!1;if(93===t.src.charCodeAt(o))break}return!(o===O+2||o>=v||(o++,n=t.src.slice(O+2,o-1),typeof t.env.footnotes.refs[":"+n]>"u")||(i||(t.env.footnotes.list||(t.env.footnotes.list=[]),t.env.footnotes.refs[":"+n]<0?(t.env.footnotes.list[l=t.env.footnotes.list.length]={label:n,count:0},t.env.footnotes.refs[":"+n]=l):l=t.env.footnotes.refs[":"+n],_=t.env.footnotes.list[l].count,t.env.footnotes.list[l].count++,t.push({type:"footnote_ref",id:l,subId:_,level:t.level})),t.pos=o,t.posMax=v,0))}],["autolink",function yz(t,i){var n,o,l,_,v,O=t.pos;return!(60!==t.src.charCodeAt(O)||(n=t.src.slice(O),n.indexOf(">")<0)||((o=n.match(vz))?mz.indexOf(o[1].toLowerCase())<0||(_=o[0].slice(1,-1),v=eR(_),!t.parser.validateLink(_))||(i||(t.push({type:"link_open",href:v,level:t.level}),t.push({type:"text",content:_,level:t.level+1}),t.push({type:"link_close",level:t.level})),t.pos+=o[0].length,0):!(l=n.match(gz))||(v=eR("mailto:"+(_=l[0].slice(1,-1))),!t.parser.validateLink(v)||(i||(t.push({type:"link_open",href:v,level:t.level}),t.push({type:"text",content:_,level:t.level+1}),t.push({type:"link_close",level:t.level})),t.pos+=l[0].length,0))))}],["htmltag",function Iz(t,i){var n,o,l,_=t.pos;return!(!t.options.html||(l=t.posMax,60!==t.src.charCodeAt(_)||_+2>=l)||(n=t.src.charCodeAt(_+1),33!==n&&63!==n&&47!==n&&!function Nz(t){var i=32|t;return i>=97&&i<=122}(n))||(o=t.src.slice(_).match(Pz),!o)||(i||t.push({type:"htmltag",content:t.src.slice(_,_+o[0].length),level:t.level}),t.pos+=o[0].length,0))}],["entity",function kz(t,i){var o,l,_=t.pos,v=t.posMax;if(38!==t.src.charCodeAt(_))return!1;if(_+1<v)if(35===t.src.charCodeAt(_+1)){if(l=t.src.slice(_).match(Fz))return i||(o="x"===l[1][0].toLowerCase()?parseInt(l[1].slice(1),16):parseInt(l[1],10),t.pending+=XD(o)?zC(o):zC(65533)),t.pos+=l[0].length,!0}else if(l=t.src.slice(_).match(Lz)){var O=eN(l[1]);if(l[1]!==O)return i||(t.pending+=O),t.pos+=l[0].length,!0}return i||(t.pending+="&"),t.pos++,!0}]];function JC(){this.ruler=new Zh;for(var t=0;t<sR.length;t++)this.ruler.push(sR[t][0],sR[t][1]);this.validateLink=$z}function $z(t){var n=t.trim().toLowerCase();return!(-1!==(n=g1(n)).indexOf(":")&&-1!==["vbscript","javascript","file","data"].indexOf(n.split(":")[0]))}JC.prototype.skipToken=function(t){var l,_,i=this.ruler.getRules(""),n=i.length,o=t.pos;if((_=t.cacheGet(o))>0)t.pos=_;else{for(l=0;l<n;l++)if(i[l](t,!0))return void t.cacheSet(o,t.pos);t.pos++,t.cacheSet(o,t.pos)}},JC.prototype.tokenize=function(t){for(var l,_,i=this.ruler.getRules(""),n=i.length,o=t.posMax;t.pos<o;){for(_=0;_<n&&!(l=i[_](t,!1));_++);if(l){if(t.pos>=o)break}else t.pending+=t.src[t.pos++]}t.pending&&t.pushPending()},JC.prototype.parse=function(t,i,n,o){var l=new Sv(t,this,i,n,o);this.tokenize(l)};var Gz={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","replacements","smartquotes","references","abbr2","footnote_tail"]},block:{rules:["blockquote","code","fences","footnote","heading","hr","htmlblock","lheading","list","paragraph","table"]},inline:{rules:["autolink","backticks","del","emphasis","entity","escape","footnote_ref","htmltag","links","newline","text"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","abbr2"]},block:{rules:["blockquote","code","fences","heading","hr","htmlblock","lheading","list","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","htmltag","links","newline","text"]}}}};function gN(t,i,n){this.src=i,this.env=n,this.options=t.options,this.tokens=[],this.inlineMode=!1,this.inline=t.inline,this.block=t.block,this.renderer=t.renderer,this.typographer=t.typographer}function v1(t,i){"string"!=typeof t&&(i=t,t="default"),i&&null!=i.linkify&&console.warn("linkify option is removed. Use linkify plugin instead:\n\nimport Remarkable from 'remarkable';\nimport linkify from 'remarkable/linkify';\nnew Remarkable().use(linkify)\n"),this.inline=new JC,this.block=new iR,this.core=new cN,this.renderer=new qD,this.ruler=new Zh,this.options={},this.configure(Gz[t]),this.set(i||{})}v1.prototype.set=function(t){KD(this.options,t)},v1.prototype.configure=function(t){var i=this;if(!t)throw new Error("Wrong `remarkable` preset, check name/content");t.options&&i.set(t.options),t.components&&Object.keys(t.components).forEach(function(n){t.components[n].rules&&i[n].ruler.enable(t.components[n].rules,!0)})},v1.prototype.use=function(t,i){return t(this,i),this},v1.prototype.parse=function(t,i){var n=new gN(this,t,i);return this.core.process(n),n.tokens},v1.prototype.render=function(t,i){return this.renderer.render(this.parse(t,i=i||{}),this.options,i)},v1.prototype.parseInline=function(t,i){var n=new gN(this,t,i);return n.inlineMode=!0,this.core.process(n),n.tokens},v1.prototype.renderInline=function(t,i){return this.renderer.render(this.parseInline(t,i=i||{}),this.options,i)};var QC="NOT_FOUND",zz=function(i,n){return i===n};function Zz(t,i){var n="object"==typeof i?i:{equalityCheck:i},o=n.equalityCheck,_=n.maxSize,v=void 0===_?1:_,O=n.resultEqualityCheck,P=function Vz(t){return function(n,o){if(null===n||null===o||n.length!==o.length)return!1;for(var l=n.length,_=0;_<l;_++)if(!t(n[_],o[_]))return!1;return!0}}(void 0===o?zz:o),G=1===v?function Yz(t){var i;return{get:function(o){return i&&t(i.key,o)?i.value:QC},put:function(o,l){i={key:o,value:l}},getEntries:function(){return i?[i]:[]},clear:function(){i=void 0}}}(P):function jz(t,i){var n=[];function o(O){var P=n.findIndex(function(K){return i(O,K.key)});if(P>-1){var G=n[P];return P>0&&(n.splice(P,1),n.unshift(G)),G.value}return QC}return{get:o,put:function l(O,P){o(O)===QC&&(n.unshift({key:O,value:P}),n.length>t&&n.pop())},getEntries:function _(){return n},clear:function v(){n=[]}}}(v,P);function K(){var oe=G.get(arguments);if(oe===QC){if(oe=t.apply(null,arguments),O){var pe=G.getEntries().find(function(ye){return O(ye.value,oe)});pe&&(oe=pe.value)}G.put(arguments,oe)}return oe}return K.clearCache=function(){return G.clear()},K}function Jz(t){for(var i=arguments.length,n=new Array(i>1?i-1:0),o=1;o<i;o++)n[o-1]=arguments[o];return function(){for(var v=arguments.length,O=new Array(v),P=0;P<v;P++)O[P]=arguments[P];var K,G=0,oe={memoizeOptions:void 0},ue=O.pop();if("object"==typeof ue&&(oe=ue,ue=O.pop()),"function"!=typeof ue)throw new Error("createSelector expects an output function after the inputs, but received: ["+typeof ue+"]");var ye=oe.memoizeOptions,Ue=void 0===ye?n:ye,xe=Array.isArray(Ue)?Ue:[Ue],ke=function Wz(t){var i=Array.isArray(t[0])?t[0]:t;if(!i.every(function(o){return"function"==typeof o})){var n=i.map(function(o){return"function"==typeof o?"function "+(o.name||"unnamed")+"()":typeof o}).join(", ");throw new Error("createSelector expects all input-selectors to be functions, but received the following types: ["+n+"]")}return i}(O),we=t.apply(void 0,[function(){return G++,ue.apply(null,arguments)}].concat(xe)),Z=t(function(){for(var Dt=[],Yt=ke.length,ln=0;ln<Yt;ln++)Dt.push(ke[ln].apply(null,arguments));return K=we.apply(null,Dt)});return Object.assign(Z,{resultFunc:ue,memoizedResultFunc:we,dependencies:ke,lastResult:function(){return K},recomputations:function(){return G},resetRecomputations:function(){return G=0}}),Z}}var vN=Jz(Zz),Qz=s(31536),Kz=s(2135),Xz=s.n(Kz),qz=s(95327),eV=s.n(qz),tV=s(31208),nV=s(3912),rV=s.n(nV),iV=s(41233),oV=s.n(iV),sV=s(33814),aV=s.n(sV),lV=s(74299),uV=s.n(lV),cV=s(32322),dV=s.n(cV),fV=s(58734),pV=s.n(fV),_V=s(69883),hV=s.n(_V),mV=s(41205),gV=s.n(mV),vV={3978:(t,i,n)=>{t.exports=n(1910)},1543:(t,i,n)=>{n.d(i,{Z:()=>ke});var o=n(863),l=n(7344),_=n(8656),v=n(6340),O=n(9972),P=n(5416),G=n(775),K=n(5171),oe=n(8818),ue=n(2565),pe=n(810);const ye=(n.d(Z={},{default:()=>XN}),Z);var Z,Ue=n(9569),xe=n(5053),ke=function(we){(0,O.default)(Ft,we);var Z=(0,P.default)(Ft);function Ft(){var Dt,Yt;(0,l.default)(this,Ft);for(var ln=arguments.length,$n=new Array(ln),nn=0;nn<ln;nn++)$n[nn]=arguments[nn];return Yt=Z.call.apply(Z,(0,K.default)(Dt=[this]).call(Dt,$n)),(0,G.default)((0,v.default)(Yt),"getModelName",function(Jn){return-1!==(0,oe.default)(Jn).call(Jn,"#/definitions/")?Jn.replace(/^.*#\/definitions\//,""):-1!==(0,oe.default)(Jn).call(Jn,"#/components/schemas/")?Jn.replace(/^.*#\/components\/schemas\//,""):void 0}),(0,G.default)((0,v.default)(Yt),"getRefSchema",function(Jn){return Yt.props.specSelectors.findDefinition(Jn)}),Yt}return(0,_.default)(Ft,[{key:"render",value:function(){var Dt=this.props,Yt=Dt.getComponent,ln=Dt.getConfigs,$n=Dt.specSelectors,nn=Dt.schema,Jn=Dt.required,zn=Dt.name,Zr=Dt.isRef,$r=Dt.specPath,ui=Dt.displayName,gi=Dt.includeReadOnly,Un=Dt.includeWriteOnly,lr=Yt("ObjectModel"),ar=Yt("ArrayModel"),Cr=Yt("PrimitiveModel"),Wn="object",ai=nn&&nn.get("$$ref");if(!zn&&ai&&(zn=this.getModelName(ai)),!nn&&ai&&(nn=this.getRefSchema(zn)),!nn)return pe.default.createElement("span",{className:"model model-title"},pe.default.createElement("span",{className:"model-title__text"},ui||zn),pe.default.createElement("img",{src:n(2517),height:"20px",width:"20px"}));var ho=$n.isOAS3()&&nn.get("deprecated");switch(Zr=void 0!==Zr?Zr:!!ai,Wn=nn&&nn.get("type")||Wn){case"object":return pe.default.createElement(lr,(0,o.default)({className:"object"},this.props,{specPath:$r,getConfigs:ln,schema:nn,name:zn,deprecated:ho,isRef:Zr,includeReadOnly:gi,includeWriteOnly:Un}));case"array":return pe.default.createElement(ar,(0,o.default)({className:"array"},this.props,{getConfigs:ln,schema:nn,name:zn,deprecated:ho,required:Jn,includeReadOnly:gi,includeWriteOnly:Un}));default:return pe.default.createElement(Cr,(0,o.default)({},this.props,{getComponent:Yt,getConfigs:ln,schema:nn,name:zn,deprecated:ho,required:Jn}))}}}]),Ft}(ye.default);(0,G.default)(ke,"propTypes",{schema:(0,ue.default)(Ue.default).isRequired,getComponent:xe.default.func.isRequired,getConfigs:xe.default.func.isRequired,specSelectors:xe.default.object.isRequired,name:xe.default.string,displayName:xe.default.string,isRef:xe.default.bool,required:xe.default.bool,expandDepth:xe.default.number,depth:xe.default.number,specPath:Ue.default.list.isRequired,includeReadOnly:xe.default.bool,includeWriteOnly:xe.default.bool})},5623:(t,i,n)=>{n.d(i,{Z:()=>xe});var o=n(1581),l=n(7344),_=n(8656),v=n(6340),O=n(9972),P=n(5416),G=n(775),K=n(2740),oe=n(5171),ue=n(810),pe=n(8900),ye=(n(5053),n(6298)),Ue=n(7504),xe=function(we){(0,O.default)(Ft,we);var Z=(0,P.default)(Ft);function Ft(Dt,Yt){var ln;(0,l.default)(this,Ft),ln=Z.call(this,Dt,Yt),(0,G.default)((0,v.default)(ln),"getDefinitionUrl",function(){return new pe.default(ln.props.specSelectors.url(),Ue.Z.location).toString()});var $n=(0,Dt.getConfigs)().validatorUrl;return ln.state={url:ln.getDefinitionUrl(),validatorUrl:void 0===$n?"https://validator.swagger.io/validator":$n},ln}return(0,_.default)(Ft,[{key:"UNSAFE_componentWillReceiveProps",value:function(Dt){var Yt=(0,Dt.getConfigs)().validatorUrl;this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===Yt?"https://validator.swagger.io/validator":Yt})}},{key:"render",value:function(){var Dt,Yt,ln=(0,this.props.getConfigs)().spec,$n=(0,ye.Nm)(this.state.validatorUrl);return"object"===(0,o.default)(ln)&&(0,K.default)(ln).length?null:this.state.url&&(0,ye.hW)(this.state.validatorUrl)&&(0,ye.hW)(this.state.url)?ue.default.createElement("span",{className:"float-right"},ue.default.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:(0,oe.default)(Dt="".concat($n,"/debug?url=")).call(Dt,encodeURIComponent(this.state.url))},ue.default.createElement(ke,{src:(0,oe.default)(Yt="".concat($n,"?url=")).call(Yt,encodeURIComponent(this.state.url)),alt:"Online validator badge"}))):null}}]),Ft}(ue.default.Component),ke=function(we){(0,O.default)(Ft,we);var Z=(0,P.default)(Ft);function Ft(Dt){var Yt;return(0,l.default)(this,Ft),(Yt=Z.call(this,Dt)).state={loaded:!1,error:!1},Yt}return(0,_.default)(Ft,[{key:"componentDidMount",value:function(){var Dt=this,Yt=new Image;Yt.onload=function(){Dt.setState({loaded:!0})},Yt.onerror=function(){Dt.setState({error:!0})},Yt.src=this.props.src}},{key:"UNSAFE_componentWillReceiveProps",value:function(Dt){var Yt=this;if(Dt.src!==this.props.src){var ln=new Image;ln.onload=function(){Yt.setState({loaded:!0})},ln.onerror=function(){Yt.setState({error:!0})},ln.src=Dt.src}}},{key:"render",value:function(){return this.state.error?ue.default.createElement("img",{alt:"Error"}):this.state.loaded?ue.default.createElement("img",{src:this.props.src,alt:this.props.alt}):null}}]),Ft}(ue.default.Component)},5466:(t,i,n)=>{n.d(i,{Z:()=>G,s:()=>K});var o=n(810),l=(n(5053),n(3952));const _=(n.d(ue={},{linkify:()=>L8}),ue),v=(oe=>{var ue={};return n.d(ue,oe),ue})({default:()=>$8()});var ue,O=n(8096);function P(oe){var ue=oe.source,pe=oe.className,ye=void 0===pe?"":pe,Ue=oe.getConfigs;if("string"!=typeof ue)return null;var xe=new l.Remarkable({html:!0,typographer:!0,breaks:!0,linkTarget:"_blank"}).use(_.linkify);xe.core.ruler.disable(["replacements","smartquotes"]);var ke=Ue().useUnsafeMarkdown,we=xe.render(ue),Z=K(we,{useUnsafeMarkdown:ke});return ue&&we&&Z?o.default.createElement("div",{className:(0,O.default)(ye,"markdown"),dangerouslySetInnerHTML:{__html:Z}}):null}v.default.addHook&&v.default.addHook("beforeSanitizeElements",function(oe){return oe.href&&oe.setAttribute("rel","noopener noreferrer"),oe}),P.defaultProps={getConfigs:function(){return{useUnsafeMarkdown:!1}}};const G=P;function K(oe){var pe=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).useUnsafeMarkdown,ye=void 0!==pe&&pe,Ue=ye,xe=ye?[]:["style","class"];return ye&&!K.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),K.hasWarnedAboutDeprecation=!0),v.default.sanitize(oe,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:Ue,FORBID_ATTR:xe})}K.hasWarnedAboutDeprecation=!1},5308:(t,i,n)=>{n.r(i),n.d(i,{default:()=>K});var o,l=n(29),_=n(5487),v=n(6298),O=n(8102),P=n(5102),G={};const K=G;(0,l.default)(o=(0,_.default)(P).call(P)).call(o,function(oe){if("./index.js"!==oe){var ue=P(oe);G[(0,v.Zl)(oe)]=ue.default?ue.default:ue}}),G.SafeRender=O.default},5812:(t,i,n)=>{n.r(i),n.d(i,{SHOW_AUTH_POPUP:()=>G,AUTHORIZE:()=>K,LOGOUT:()=>oe,PRE_AUTHORIZE_OAUTH2:()=>ue,AUTHORIZE_OAUTH2:()=>pe,VALIDATE:()=>ye,CONFIGURE_AUTH:()=>Ue,RESTORE_AUTHORIZATION:()=>xe,showDefinitions:()=>ke,authorize:()=>we,authorizeWithPersistOption:()=>Z,logout:()=>Ft,logoutWithPersistOption:()=>Dt,preAuthorizeImplicit:()=>Yt,authorizeOauth2:()=>ln,authorizeOauth2WithPersistOption:()=>$n,authorizePassword:()=>nn,authorizeApplication:()=>Jn,authorizeAccessCodeWithFormParams:()=>zn,authorizeAccessCodeWithBasicAuthentication:()=>Zr,authorizeRequest:()=>$r,configureAuth:()=>ui,restoreAuthorization:()=>gi,persistAuthorizationIfNeeded:()=>Un,authPopup:()=>lr});var o=n(1581),l=n(313),_=n(7512),v=n(8900),O=n(7504),P=n(6298),G="show_popup",K="authorize",oe="logout",ue="pre_authorize_oauth2",pe="authorize_oauth2",ye="validate",Ue="configure_auth",xe="restore_authorization";function ke(ar){return{type:G,payload:ar}}function we(ar){return{type:K,payload:ar}}var Z=function(ar){return function(Cr){var Wn=Cr.authActions;Wn.authorize(ar),Wn.persistAuthorizationIfNeeded()}};function Ft(ar){return{type:oe,payload:ar}}var Dt=function(ar){return function(Cr){var Wn=Cr.authActions;Wn.logout(ar),Wn.persistAuthorizationIfNeeded()}},Yt=function(ar){return function(Cr){var Wn=Cr.authActions,ai=Cr.errActions,ho=ar.auth,Yi=ar.token,lo=ar.isValid,Kn=ho.name,Nn=ho.schema.get("flow");delete O.Z.swaggerUIRedirectOauth2,"accessCode"===Nn||lo||ai.newAuthErr({authId:Kn,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),Yi.error?ai.newAuthErr({authId:Kn,source:"auth",level:"error",message:(0,l.default)(Yi)}):Wn.authorizeOauth2WithPersistOption({auth:ho,token:Yi})}};function ln(ar){return{type:pe,payload:ar}}var $n=function(ar){return function(Cr){var Wn=Cr.authActions;Wn.authorizeOauth2(ar),Wn.persistAuthorizationIfNeeded()}},nn=function(ar){return function(Cr){var So,us,Zo,Wn=Cr.authActions,ai=ar.schema,ho=ar.name,Yi=ar.username,lo=ar.password,pi=ar.passwordType,Kn=ar.clientId,Nn=ar.clientSecret,_i={grant_type:"password",scope:ar.scopes.join(" "),username:Yi,password:lo},Zi={};switch(pi){case"request-body":So=_i,Zo=Nn,(us=Kn)&&(0,_.default)(So,{client_id:us}),Zo&&(0,_.default)(So,{client_secret:Zo});break;case"basic":Zi.Authorization="Basic "+(0,P.r3)(Kn+":"+Nn);break;default:console.warn("Warning: invalid passwordType ".concat(pi," was passed, not including client id and secret"))}return Wn.authorizeRequest({body:(0,P.GZ)(_i),url:ai.get("tokenUrl"),name:ho,headers:Zi,query:{},auth:ar})}},Jn=function(ar){return function(Cr){var Wn=Cr.authActions,ai=ar.schema,ho=ar.scopes,Yi=ar.name,Kn={Authorization:"Basic "+(0,P.r3)(ar.clientId+":"+ar.clientSecret)},Nn={grant_type:"client_credentials",scope:ho.join(" ")};return Wn.authorizeRequest({body:(0,P.GZ)(Nn),name:Yi,url:ai.get("tokenUrl"),auth:ar,headers:Kn})}},zn=function(ar){var Cr=ar.auth,Wn=ar.redirectUrl;return function(ai){var Yi=Cr.schema,lo=Cr.name;return ai.authActions.authorizeRequest({body:(0,P.GZ)({grant_type:"authorization_code",code:Cr.code,client_id:Cr.clientId,client_secret:Cr.clientSecret,redirect_uri:Wn,code_verifier:Cr.codeVerifier}),name:lo,url:Yi.get("tokenUrl"),auth:Cr})}},Zr=function(ar){var Cr=ar.auth,Wn=ar.redirectUrl;return function(ai){var ho=ai.authActions,Yi=Cr.schema,lo=Cr.name,pi=Cr.clientId,Nn=Cr.codeVerifier,_i={Authorization:"Basic "+(0,P.r3)(pi+":"+Cr.clientSecret)};return ho.authorizeRequest({body:(0,P.GZ)({grant_type:"authorization_code",code:Cr.code,client_id:pi,redirect_uri:Wn,code_verifier:Nn}),name:lo,url:Yi.get("tokenUrl"),auth:Cr,headers:_i})}},$r=function(ar){return function(Cr){var Wn,ai=Cr.fn,ho=Cr.getConfigs,Yi=Cr.authActions,lo=Cr.errActions,pi=Cr.oas3Selectors,Kn=Cr.specSelectors,_i=ar.body,Zi=ar.query,So=void 0===Zi?{}:Zi,us=ar.headers,Zo=void 0===us?{}:us,pa=ar.name,va=ar.url,qi=ar.auth,xo=(Cr.authSelectors.getConfigs()||{}).additionalQueryStringParams;if(Kn.isOAS3()){var $o=pi.serverEffectiveValue(pi.selectedServer());Wn=(0,v.default)(va,$o,!0)}else Wn=(0,v.default)(va,Kn.url(),!0);"object"===(0,o.default)(xo)&&(Wn.query=(0,_.default)({},Wn.query,xo));var rt=Wn.toString(),kt=(0,_.default)({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},Zo);ai.fetch({url:rt,method:"post",headers:kt,query:So,body:_i,requestInterceptor:ho().requestInterceptor,responseInterceptor:ho().responseInterceptor}).then(function(Lt){var cr=JSON.parse(Lt.data);Lt.ok?cr&&cr.error||cr&&cr.parseError?lo.newAuthErr({authId:pa,level:"error",source:"auth",message:(0,l.default)(cr)}):Yi.authorizeOauth2WithPersistOption({auth:qi,token:cr}):lo.newAuthErr({authId:pa,level:"error",source:"auth",message:Lt.statusText})}).catch(function(Lt){var cr=new Error(Lt).message;if(Lt.response&&Lt.response.data){var Yr=Lt.response.data;try{var li="string"==typeof Yr?JSON.parse(Yr):Yr;li.error&&(cr+=", error: ".concat(li.error)),li.error_description&&(cr+=", description: ".concat(li.error_description))}catch{}}lo.newAuthErr({authId:pa,level:"error",source:"auth",message:cr})})}};function ui(ar){return{type:Ue,payload:ar}}function gi(ar){return{type:xe,payload:ar}}var Un=function(){return function(ar){var Cr=ar.authSelectors;if((0,ar.getConfigs)().persistAuthorization){var Wn=Cr.authorized();localStorage.setItem("authorized",(0,l.default)(Wn.toJS()))}}},lr=function(ar,Cr){return function(){O.Z.swaggerUIRedirectOauth2=Cr,O.Z.open(ar)}}},3705:(t,i,n)=>{n.r(i),n.d(i,{default:()=>K,preauthorizeBasic:()=>oe,preauthorizeApiKey:()=>ue});var o=n(775),l=n(5527),_=n(5171),v=n(3962),O=n(5812),P=n(35),G=n(8302);function K(){return{afterLoad:function(pe){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=pe.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=(0,l.default)(ue).call(ue,null,pe),this.rootInjects.preauthorizeBasic=(0,l.default)(oe).call(oe,null,pe)},statePlugins:{auth:{reducers:v.default,actions:O,selectors:P},spec:{wrapActions:G}}}}function oe(pe,ye,Ue,xe){var ke,we=pe.authActions.authorize,Z=pe.specSelectors,Ft=Z.specJson,Dt=(0,Z.isOAS3)()?["components","securitySchemes"]:["securityDefinitions"],Yt=Ft().getIn((0,_.default)(ke=[]).call(ke,Dt,[ye]));return Yt?we((0,o.default)({},ye,{value:{username:Ue,password:xe},schema:Yt.toJS()})):null}function ue(pe,ye,Ue){var xe,ke=pe.authActions.authorize,we=pe.specSelectors,Z=we.specJson,Ft=(0,we.isOAS3)()?["components","securitySchemes"]:["securityDefinitions"],Dt=Z().getIn((0,_.default)(xe=[]).call(xe,Ft,[ye]));return Dt?ke((0,o.default)({},ye,{value:Ue,schema:Dt.toJS()})):null}},3962:(t,i,n)=>{n.r(i),n.d(i,{default:()=>oe});var o,l=n(775),_=n(9334),v=n(29),O=n(7512),P=n(9725),G=n(6298),K=n(5812);const oe=((0,l.default)(o={},K.SHOW_AUTH_POPUP,function(ue,pe){return ue.set("showDefinitions",pe.payload)}),(0,l.default)(o,K.AUTHORIZE,function(ue,pe){var ye,xe=(0,P.fromJS)(pe.payload),ke=ue.get("authorized")||(0,P.Map)();return(0,v.default)(ye=xe.entrySeq()).call(ye,function(we){var Z=(0,_.default)(we,2),Ft=Z[0],Dt=Z[1];if(!(0,G.Wl)(Dt.getIn))return ue.set("authorized",ke);var Yt=Dt.getIn(["schema","type"]);if("apiKey"===Yt||"http"===Yt)ke=ke.set(Ft,Dt);else if("basic"===Yt){var ln=Dt.getIn(["value","username"]),$n=Dt.getIn(["value","password"]);ke=(ke=ke.setIn([Ft,"value"],{username:ln,header:"Basic "+(0,G.r3)(ln+":"+$n)})).setIn([Ft,"schema"],Dt.get("schema"))}}),ue.set("authorized",ke)}),(0,l.default)(o,K.AUTHORIZE_OAUTH2,function(ue,pe){var ye,Ue=pe.payload,xe=Ue.auth;xe.token=(0,O.default)({},Ue.token),ye=(0,P.fromJS)(xe);var we=ue.get("authorized")||(0,P.Map)();return we=we.set(ye.get("name"),ye),ue.set("authorized",we)}),(0,l.default)(o,K.LOGOUT,function(ue,pe){var ye=pe.payload,Ue=ue.get("authorized").withMutations(function(xe){(0,v.default)(ye).call(ye,function(ke){xe.delete(ke)})});return ue.set("authorized",Ue)}),(0,l.default)(o,K.CONFIGURE_AUTH,function(ue,pe){return ue.set("configs",pe.payload)}),(0,l.default)(o,K.RESTORE_AUTHORIZATION,function(ue,pe){return ue.set("authorized",(0,P.fromJS)(pe.payload.authorized))}),o)},35:(t,i,n)=>{n.r(i),n.d(i,{shownDefinitions:()=>pe,definitionsToAuthorize:()=>ye,getDefinitionsByNames:()=>Ue,definitionsForRequirements:()=>xe,authorized:()=>ke,isAuthorized:()=>we,getConfigs:()=>Z});var o=n(9334),l=n(29),_=n(6145),v=n(9963),O=n(8818),P=n(2565),G=n(2740),K=n(8639),oe=n(9725),ue=function(Ft){return Ft},pe=(0,K.createSelector)(ue,function(Ft){return Ft.get("showDefinitions")}),ye=(0,K.createSelector)(ue,function(){return function(Ft){var Dt,Yt=Ft.specSelectors.securityDefinitions()||(0,oe.Map)({}),ln=(0,oe.List)();return(0,l.default)(Dt=Yt.entrySeq()).call(Dt,function($n){var nn=(0,o.default)($n,2),Jn=nn[0],zn=nn[1],Zr=(0,oe.Map)();Zr=Zr.set(Jn,zn),ln=ln.push(Zr)}),ln}}),Ue=function(Ft,Dt){return function(Yt){var ln,$n=Yt.specSelectors;console.warn("WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.");var nn=$n.securityDefinitions(),Jn=(0,oe.List)();return(0,l.default)(ln=Dt.valueSeq()).call(ln,function(zn){var Zr,$r=(0,oe.Map)();(0,l.default)(Zr=zn.entrySeq()).call(Zr,function(ui){var gi,Un,lr=(0,o.default)(ui,2),ar=lr[0],Cr=lr[1],Wn=nn.get(ar);"oauth2"===Wn.get("type")&&Cr.size&&(gi=Wn.get("scopes"),(0,l.default)(Un=gi.keySeq()).call(Un,function(ai){Cr.contains(ai)||(gi=gi.delete(ai))}),Wn=Wn.set("allowedScopes",gi)),$r=$r.set(ar,Wn)}),Jn=Jn.push($r)}),Jn}},xe=function(Ft){var Dt=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,oe.List)();return function(Yt){var ln=Yt.authSelectors.definitionsToAuthorize()||(0,oe.List)();return(0,_.default)(ln).call(ln,function($n){return(0,v.default)(Dt).call(Dt,function(nn){return nn.get($n.keySeq().first())})})}},ke=(0,K.createSelector)(ue,function(Ft){return Ft.get("authorized")||(0,oe.Map)()}),we=function(Ft,Dt){return function(Yt){var ln,$n=Yt.authSelectors.authorized();return oe.List.isList(Dt)?!!(0,_.default)(ln=Dt.toJS()).call(ln,function(nn){var Jn,zn;return-1===(0,O.default)(Jn=(0,P.default)(zn=(0,G.default)(nn)).call(zn,function(Zr){return!!$n.get(Zr)})).call(Jn,!1)}).length:null}},Z=(0,K.createSelector)(ue,function(Ft){return Ft.get("configs")})},8302:(t,i,n)=>{n.r(i),n.d(i,{execute:()=>l});var o=n(1013),l=function(_,v){var O=v.authSelectors,P=v.specSelectors;return function(G){var K=G.path,oe=G.method,ue=G.operation,pe=G.extras,ye={authorized:O.authorized()&&O.authorized().toJS(),definitions:P.securityDefinitions()&&P.securityDefinitions().toJS(),specSecurity:P.security()&&P.security().toJS()};return _((0,o.default)({path:K,method:oe,operation:ue,securities:ye},pe))}}},714:(t,i,n)=>{n.r(i),n.d(i,{UPDATE_CONFIGS:()=>l,TOGGLE_CONFIGS:()=>_,update:()=>v,toggle:()=>O,loaded:()=>P});var o=n(775),l="configs_update",_="configs_toggle";function v(G,K){return{type:l,payload:(0,o.default)({},G,K)}}function O(G){return{type:_,payload:G}}var P=function(){return function(G){var oe=G.authActions;if((0,G.getConfigs)().persistAuthorization){var ue=localStorage.getItem("authorized");ue&&oe.restoreAuthorization({authorized:JSON.parse(ue)})}}}},2256:(t,i,n)=>{n.r(i),n.d(i,{parseYamlConfig:()=>l});var o=n(626),l=function(_,v){try{return o.default.load(_)}catch(O){return v&&v.errActions.newThrownErr(new Error(O)),{}}}},1661:(t,i,n)=>{n.r(i),n.d(i,{default:()=>K});var o=n(5163),l=n(2256),_=n(714),v=n(2698),O=n(9018),P=n(7743),G={getLocalConfig:function(){return(0,l.parseYamlConfig)(o)}};function K(){return{statePlugins:{spec:{actions:v,selectors:G},configs:{reducers:P.default,actions:_,selectors:O}}}}},7743:(t,i,n)=>{n.r(i),n.d(i,{default:()=>O});var o,l=n(775),_=n(9725),v=n(714);const O=((0,l.default)(o={},v.UPDATE_CONFIGS,function(P,G){return P.merge((0,_.fromJS)(G.payload))}),(0,l.default)(o,v.TOGGLE_CONFIGS,function(P,G){var K=G.payload,oe=P.get(K);return P.set(K,!oe)}),o)},9018:(t,i,n)=>{n.r(i),n.d(i,{get:()=>l});var o=n(4163),l=function(_,v){return _.getIn((0,o.default)(v)?v:[v])}},2698:(t,i,n)=>{n.r(i),n.d(i,{downloadConfig:()=>l,getConfigByUrl:()=>_});var o=n(2256),l=function(v){return function(O){return(0,O.fn.fetch)(v)}},_=function(v,O){return function(P){var G=P.specActions;if(v)return G.downloadConfig(v).then(K,K);function K(oe){oe instanceof Error||oe.status>=400?(G.updateLoadingStatus("failedConfig"),G.updateLoadingStatus("failedConfig"),G.updateUrl(""),console.error(oe.statusText+" "+v.url),O(null)):O((0,o.parseYamlConfig)(oe.text))}}}},1970:(t,i,n)=>{n.r(i),n.d(i,{setHash:()=>o});var o=function(l){return l?history.pushState(null,null,"#".concat(l)):window.location.hash=""}},4980:(t,i,n)=>{n.r(i),n.d(i,{default:()=>v});var o=n(5858),l=n(877),_=n(4584);function v(){return[o.default,{statePlugins:{configs:{wrapActions:{loaded:function(O,P){return function(){O.apply(void 0,arguments);var G=decodeURIComponent(window.location.hash);P.layoutActions.parseDeepLinkHash(G)}}}}},wrapComponents:{operation:l.default,OperationTag:_.default}}]}},5858:(t,i,n)=>{n.r(i),n.d(i,{clearScrollTo:()=>Yt,default:()=>ln,parseDeepLinkHash:()=>Z,readyToScroll:()=>Ft,scrollTo:()=>we,scrollToElement:()=>Dt,show:()=>ke});var o=n(775),l=n(9334),_=n(4163),v=n(5171),O=n(8136),P=n(2565),G=n(8818),K=n(1970);const oe=(n.d(nn={},{default:()=>U8()}),nn);var nn,ue,pe=n(6298),ye=n(9725),Ue="layout_scroll_to",xe="layout_clear_scroll",ke=function($n,nn){var Jn=nn.getConfigs,zn=nn.layoutSelectors;return function(){for(var Zr=arguments.length,$r=new Array(Zr),ui=0;ui<Zr;ui++)$r[ui]=arguments[ui];if($n.apply(void 0,$r),Jn().deepLinking)try{var gi=$r[0],Un=$r[1];gi=(0,_.default)(gi)?gi:[gi];var lr=zn.urlHashArrayFromIsShownKey(gi);if(!lr.length)return;var ar,Cr=(0,l.default)(lr,2),Wn=Cr[0],ai=Cr[1];if(!Un)return(0,K.setHash)("/");2===lr.length?(0,K.setHash)((0,pe.oJ)((0,v.default)(ar="/".concat(encodeURIComponent(Wn),"/")).call(ar,encodeURIComponent(ai)))):1===lr.length&&(0,K.setHash)((0,pe.oJ)("/".concat(encodeURIComponent(Wn))))}catch(ho){console.error(ho)}}},we=function($n){return{type:Ue,payload:(0,_.default)($n)?$n:[$n]}},Z=function($n){return function(nn){var Jn=nn.layoutActions,zn=nn.layoutSelectors;if((0,nn.getConfigs)().deepLinking&&$n){var Zr,$r=(0,O.default)($n).call($n,1);"!"===$r[0]&&($r=(0,O.default)($r).call($r,1)),"/"===$r[0]&&($r=(0,O.default)($r).call($r,1));var ui=(0,P.default)(Zr=$r.split("/")).call(Zr,function(Yi){return Yi||""}),gi=zn.isShownKeyFromUrlHashArray(ui),Un=(0,l.default)(gi,3),ar=Un[1],Cr=void 0===ar?"":ar,Wn=Un[2],ai=void 0===Wn?"":Wn;if("operations"===Un[0]){var ho=zn.isShownKeyFromUrlHashArray([Cr]);(0,G.default)(Cr).call(Cr,"_")>-1&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),Jn.show((0,P.default)(ho).call(ho,function(Yi){return Yi.replace(/_/g," ")}),!0)),Jn.show(ho,!0)}((0,G.default)(Cr).call(Cr,"_")>-1||(0,G.default)(ai).call(ai,"_")>-1)&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),Jn.show((0,P.default)(gi).call(gi,function(Yi){return Yi.replace(/_/g," ")}),!0)),Jn.show(gi,!0),Jn.scrollTo(gi)}}},Ft=function($n,nn){return function(Jn){var zn=Jn.layoutSelectors.getScrollToKey();ye.default.is(zn,(0,ye.fromJS)($n))&&(Jn.layoutActions.scrollToElement(nn),Jn.layoutActions.clearScrollTo())}},Dt=function($n,nn){return function(Jn){try{nn=nn||Jn.fn.getScrollParent($n),oe.default.createScroller(nn).to($n)}catch(zn){console.error(zn)}}},Yt=function(){return{type:xe}};const ln={fn:{getScrollParent:function($n,nn){var Jn=document.documentElement,zn=getComputedStyle($n),Zr="absolute"===zn.position,$r=nn?/(auto|scroll|hidden)/:/(auto|scroll)/;if("fixed"===zn.position)return Jn;for(var ui=$n;ui=ui.parentElement;)if(zn=getComputedStyle(ui),(!Zr||"static"!==zn.position)&&$r.test(zn.overflow+zn.overflowY+zn.overflowX))return ui;return Jn}},statePlugins:{layout:{actions:{scrollToElement:Dt,scrollTo:we,clearScrollTo:Yt,readyToScroll:Ft,parseDeepLinkHash:Z},selectors:{getScrollToKey:function($n){return $n.get("scrollToKey")},isShownKeyFromUrlHashArray:function($n,nn){var Jn=(0,l.default)(nn,2),zn=Jn[0],Zr=Jn[1];return Zr?["operations",zn,Zr]:zn?["operations-tag",zn]:[]},urlHashArrayFromIsShownKey:function($n,nn){var Jn=(0,l.default)(nn,3),zn=Jn[0],Zr=Jn[1];return"operations"==zn?[Zr,Jn[2]]:"operations-tag"==zn?[Zr]:[]}},reducers:(ue={},(0,o.default)(ue,Ue,function($n,nn){return $n.set("scrollToKey",ye.default.fromJS(nn.payload))}),(0,o.default)(ue,xe,function($n){return $n.delete("scrollToKey")}),ue),wrapActions:{show:ke}}}}},4584:(t,i,n)=>{n.r(i),n.d(i,{default:()=>oe});var o=n(7344),l=n(8656),_=n(6340),v=n(9972),O=n(5416),P=n(775),G=n(5171),K=n(810);n(5053);const oe=function(ue,pe){return function(ye){(0,v.default)(xe,ye);var Ue=(0,O.default)(xe);function xe(){var ke,we;(0,o.default)(this,xe);for(var Z=arguments.length,Ft=new Array(Z),Dt=0;Dt<Z;Dt++)Ft[Dt]=arguments[Dt];return we=Ue.call.apply(Ue,(0,G.default)(ke=[this]).call(ke,Ft)),(0,P.default)((0,_.default)(we),"onLoad",function(Yt){pe.layoutActions.readyToScroll(["operations-tag",we.props.tag],Yt)}),we}return(0,l.default)(xe,[{key:"render",value:function(){return K.default.createElement("span",{ref:this.onLoad},K.default.createElement(ue,this.props))}}]),xe}(K.default.Component)}},877:(t,i,n)=>{n.r(i),n.d(i,{default:()=>oe});var o=n(7344),l=n(8656),_=n(6340),v=n(9972),O=n(5416),P=n(775),G=n(5171),K=n(810);n(9569);const oe=function(ue,pe){return function(ye){(0,v.default)(xe,ye);var Ue=(0,O.default)(xe);function xe(){var ke,we;(0,o.default)(this,xe);for(var Z=arguments.length,Ft=new Array(Z),Dt=0;Dt<Z;Dt++)Ft[Dt]=arguments[Dt];return we=Ue.call.apply(Ue,(0,G.default)(ke=[this]).call(ke,Ft)),(0,P.default)((0,_.default)(we),"onLoad",function(Yt){var ln=we.props.operation,$n=ln.toObject(),nn=$n.tag,Jn=$n.operationId,zn=ln.toObject().isShownKey;pe.layoutActions.readyToScroll(zn=zn||["operations",nn,Jn],Yt)}),we}return(0,l.default)(xe,[{key:"render",value:function(){return K.default.createElement("span",{ref:this.onLoad},K.default.createElement(ue,this.props))}}]),xe}(K.default.Component)}},8011:(t,i,n)=>{n.r(i),n.d(i,{default:()=>oe});var o=n(7512),l=n(3769),_=n(5171),v=n(8818),O=n(313),P=n(8639),G=n(9725),K=n(7504);function oe(ue){var pe=ue.fn;return{statePlugins:{spec:{actions:{download:function(ye){return function(Ue){var xe=Ue.errActions,ke=Ue.specSelectors,we=Ue.specActions,Ft=pe.fetch,Dt=(0,Ue.getConfigs)();function Yt(ln){if(ln instanceof Error||ln.status>=400)return we.updateLoadingStatus("failed"),xe.newThrownErr((0,o.default)(new Error((ln.message||ln.statusText)+" "+ye),{source:"fetch"})),void(!ln.status&&ln instanceof Error&&function(){try{var $n;if("URL"in K.Z?$n=new l.default(ye):($n=document.createElement("a")).href=ye,"https:"!==$n.protocol&&"https:"===K.Z.location.protocol){var nn=(0,o.default)(new Error("Possible mixed-content issue? The page was loaded over https:// but a ".concat($n.protocol,"// URL was specified. Check that you are not attempting to load mixed content.")),{source:"fetch"});return void xe.newThrownErr(nn)}if($n.origin!==K.Z.location.origin){var Jn,zn=(0,o.default)(new Error((0,_.default)(Jn="Possible cross-origin (CORS) issue? The URL origin (".concat($n.origin,") does not match the page (")).call(Jn,K.Z.location.origin,"). Check the server returns the correct 'Access-Control-Allow-*' headers.")),{source:"fetch"});xe.newThrownErr(zn)}}catch{return}}());we.updateLoadingStatus("success"),we.updateSpec(ln.text),ke.url()!==ye&&we.updateUrl(ye)}ye=ye||ke.url(),we.updateLoadingStatus("loading"),xe.clear({source:"fetch"}),Ft({url:ye,loadSpec:!0,requestInterceptor:Dt.requestInterceptor||function(ln){return ln},responseInterceptor:Dt.responseInterceptor||function(ln){return ln},credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(Yt,Yt)}},updateLoadingStatus:function(ye){var Ue,xe=[null,"loading","failed","success","failedConfig"];return-1===(0,v.default)(xe).call(xe,ye)&&console.error((0,_.default)(Ue="Error: ".concat(ye," is not one of ")).call(Ue,(0,O.default)(xe))),{type:"spec_update_loading_status",payload:ye}}},reducers:{spec_update_loading_status:function(ye,Ue){return"string"==typeof Ue.payload?ye.set("loadingStatus",Ue.payload):ye}},selectors:{loadingStatus:(0,P.createSelector)(function(ye){return ye||(0,G.Map)()},function(ye){return ye.get("loadingStatus")||null})}}}}}},4966:(t,i,n)=>{n.r(i),n.d(i,{NEW_THROWN_ERR:()=>l,NEW_THROWN_ERR_BATCH:()=>_,NEW_SPEC_ERR:()=>v,NEW_SPEC_ERR_BATCH:()=>O,NEW_AUTH_ERR:()=>P,CLEAR:()=>G,CLEAR_BY:()=>K,newThrownErr:()=>oe,newThrownErrBatch:()=>ue,newSpecErr:()=>pe,newSpecErrBatch:()=>ye,newAuthErr:()=>Ue,clear:()=>xe,clearBy:()=>ke});var o=n(8518),l="err_new_thrown_err",_="err_new_thrown_err_batch",v="err_new_spec_err",O="err_new_spec_err_batch",P="err_new_auth_err",G="err_clear",K="err_clear_by";function oe(we){return{type:l,payload:(0,o.serializeError)(we)}}function ue(we){return{type:_,payload:we}}function pe(we){return{type:v,payload:we}}function ye(we){return{type:O,payload:we}}function Ue(we){return{type:P,payload:we}}function xe(){return{type:G,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function ke(){return{type:K,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!0}}}},6808:(t,i,n)=>{n.r(i),n.d(i,{default:()=>O});var o=n(6145),l=n(2565);const _=(n.d(G={},{default:()=>G8()}),G);var G,v=[n(2392),n(1835)];function O(P){var G,K={jsSpec:{}},oe=(0,_.default)(v,function(ue,pe){try{var ye=pe.transform(ue,K);return(0,o.default)(ye).call(ye,function(Ue){return!!Ue})}catch(Ue){return console.error("Transformer error:",Ue),ue}},P);return(0,l.default)(G=(0,o.default)(oe).call(oe,function(ue){return!!ue})).call(G,function(ue){return!ue.get("line")&&ue.get("path"),ue})}},2392:(t,i,n)=>{n.r(i),n.d(i,{transform:()=>O});var o=n(2565),l=n(8818),_=n(8136),v=n(6785);function O(P){return(0,o.default)(P).call(P,function(G){var K,xe,oe="is not of a type(s)",ue=(0,l.default)(K=G.get("message")).call(K,oe);if(ue>-1){var pe,ye,Ue=(0,_.default)(pe=G.get("message")).call(pe,ue+oe.length).split(",");return G.set("message",(0,_.default)(ye=G.get("message")).call(ye,0,ue)+(0,v.default)(xe=Ue).call(xe,function(ke,we,Z,Ft){return Z===Ft.length-1&&Ft.length>1?ke+"or "+we:Ft[Z+1]&&Ft.length>2?ke+we+", ":Ft[Z+1]?ke+we+" ":ke+we},"should be a"))}return G})}},1835:(t,i,n)=>{function o(l,_){return l}n.r(i),n.d(i,{transform:()=>o}),n(2565),n(8818),n(9908),n(9725)},7793:(t,i,n)=>{n.r(i),n.d(i,{default:()=>v});var o=n(3527),l=n(4966),_=n(7667);function v(O){return{statePlugins:{err:{reducers:(0,o.default)(O),actions:l,selectors:_}}}}},3527:(t,i,n)=>{n.r(i),n.d(i,{default:()=>pe});var o=n(775),l=n(7512),_=n(2565),v=n(5171),O=n(6145),P=n(7930),G=n(4966),K=n(9725),oe=n(6808),ue={line:0,level:"error",message:"Unknown error"};function pe(){var ye;return(0,o.default)(ye={},G.NEW_THROWN_ERR,function(Ue,xe){var we=(0,l.default)(ue,xe.payload,{type:"thrown"});return Ue.update("errors",function(Z){return(Z||(0,K.List)()).push((0,K.fromJS)(we))}).update("errors",function(Z){return(0,oe.default)(Z)})}),(0,o.default)(ye,G.NEW_THROWN_ERR_BATCH,function(Ue,xe){var ke=xe.payload;return ke=(0,_.default)(ke).call(ke,function(we){return(0,K.fromJS)((0,l.default)(ue,we,{type:"thrown"}))}),Ue.update("errors",function(we){var Z;return(0,v.default)(Z=we||(0,K.List)()).call(Z,(0,K.fromJS)(ke))}).update("errors",function(we){return(0,oe.default)(we)})}),(0,o.default)(ye,G.NEW_SPEC_ERR,function(Ue,xe){var we=(0,K.fromJS)(xe.payload);return we=we.set("type","spec"),Ue.update("errors",function(Z){return(Z||(0,K.List)()).push((0,K.fromJS)(we)).sortBy(function(Ft){return Ft.get("line")})}).update("errors",function(Z){return(0,oe.default)(Z)})}),(0,o.default)(ye,G.NEW_SPEC_ERR_BATCH,function(Ue,xe){var ke=xe.payload;return ke=(0,_.default)(ke).call(ke,function(we){return(0,K.fromJS)((0,l.default)(ue,we,{type:"spec"}))}),Ue.update("errors",function(we){var Z;return(0,v.default)(Z=we||(0,K.List)()).call(Z,(0,K.fromJS)(ke))}).update("errors",function(we){return(0,oe.default)(we)})}),(0,o.default)(ye,G.NEW_AUTH_ERR,function(Ue,xe){var we=(0,K.fromJS)((0,l.default)({},xe.payload));return we=we.set("type","auth"),Ue.update("errors",function(Z){return(Z||(0,K.List)()).push((0,K.fromJS)(we))}).update("errors",function(Z){return(0,oe.default)(Z)})}),(0,o.default)(ye,G.CLEAR,function(Ue,xe){var ke,we=xe.payload;if(!we||!Ue.get("errors"))return Ue;var Z=(0,O.default)(ke=Ue.get("errors")).call(ke,function(Ft){var Dt;return(0,P.default)(Dt=Ft.keySeq()).call(Dt,function(Yt){var ln=Ft.get(Yt),$n=we[Yt];return!$n||ln!==$n})});return Ue.merge({errors:Z})}),(0,o.default)(ye,G.CLEAR_BY,function(Ue,xe){var ke,we=xe.payload;if(!we||"function"!=typeof we)return Ue;var Z=(0,O.default)(ke=Ue.get("errors")).call(ke,function(Ft){return we(Ft)});return Ue.merge({errors:Z})}),ye}},7667:(t,i,n)=>{n.r(i),n.d(i,{allErrors:()=>_,lastError:()=>v});var o=n(9725),l=n(8639),_=(0,l.createSelector)(function(O){return O},function(O){return O.get("errors",(0,o.List)())}),v=(0,l.createSelector)(_,function(O){return O.last()})},9978:(t,i,n)=>{n.r(i),n.d(i,{default:()=>l});var o=n(4309);function l(){return{fn:{opsFilter:o.default}}}},4309:(t,i,n)=>{n.r(i),n.d(i,{default:()=>_});var o=n(6145),l=n(8818);function _(v,O){return(0,o.default)(v).call(v,function(P,G){return-1!==(0,l.default)(G).call(G,O)})}},5474:(t,i,n)=>{n.r(i),n.d(i,{UPDATE_LAYOUT:()=>l,UPDATE_FILTER:()=>_,UPDATE_MODE:()=>v,SHOW:()=>O,updateLayout:()=>P,updateFilter:()=>G,show:()=>K,changeMode:()=>oe});var o=n(6298),l="layout_update_layout",_="layout_update_filter",v="layout_update_mode",O="layout_show";function P(ue){return{type:l,payload:ue}}function G(ue){return{type:_,payload:ue}}function K(ue){var pe=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return ue=(0,o.AF)(ue),{type:O,payload:{thing:ue,shown:pe}}}function oe(ue){var pe=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return ue=(0,o.AF)(ue),{type:v,payload:{thing:ue,mode:pe}}}},6821:(t,i,n)=>{n.r(i),n.d(i,{default:()=>O});var o=n(5672),l=n(5474),_=n(4400),v=n(8989);function O(){return{statePlugins:{layout:{reducers:o.default,actions:l,selectors:_},spec:{wrapSelectors:v}}}}},5672:(t,i,n)=>{n.r(i),n.d(i,{default:()=>P});var o,l=n(775),_=n(5171),v=n(9725),O=n(5474);const P=((0,l.default)(o={},O.UPDATE_LAYOUT,function(G,K){return G.set("layout",K.payload)}),(0,l.default)(o,O.UPDATE_FILTER,function(G,K){return G.set("filter",K.payload)}),(0,l.default)(o,O.SHOW,function(G,K){var oe=K.payload.shown,ue=(0,v.fromJS)(K.payload.thing);return G.update("shown",(0,v.fromJS)({}),function(pe){return pe.set(ue,oe)})}),(0,l.default)(o,O.UPDATE_MODE,function(G,K){var oe,ue=K.payload.thing,pe=K.payload.mode;return G.setIn((0,_.default)(oe=["modes"]).call(oe,ue),(pe||"")+"")}),o)},4400:(t,i,n)=>{n.r(i),n.d(i,{current:()=>P,currentFilter:()=>G,isShown:()=>K,whatMode:()=>oe,showSummary:()=>ue});var o=n(2691),l=n(5171),_=n(8639),v=n(6298),O=n(9725),P=function(pe){return pe.get("layout")},G=function(pe){return pe.get("filter")},K=function(pe,ye,Ue){return ye=(0,v.AF)(ye),pe.get("shown",(0,O.fromJS)({})).get((0,O.fromJS)(ye),Ue)},oe=function(pe,ye){var Ue,xe=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return ye=(0,v.AF)(ye),pe.getIn((0,l.default)(Ue=["modes"]).call(Ue,(0,o.default)(ye)),xe)},ue=(0,_.createSelector)(function(pe){return pe},function(pe){return!K(pe,"editor")})},8989:(t,i,n)=>{n.r(i),n.d(i,{taggedOperations:()=>_});var o=n(5171),l=n(8136),_=function(v,O){return function(P){for(var G,K=arguments.length,oe=new Array(K>1?K-1:0),ue=1;ue<K;ue++)oe[ue-1]=arguments[ue];var pe=v.apply(void 0,(0,o.default)(G=[P]).call(G,oe)),ye=O.getSystem(),Ue=ye.fn,xe=ye.layoutSelectors,Z=(0,ye.getConfigs)().maxDisplayedTags,Ft=xe.currentFilter();return Ft&&!0!==Ft&&"true"!==Ft&&"false"!==Ft&&(pe=Ue.opsFilter(pe,Ft)),Z&&!isNaN(Z)&&Z>=0&&(pe=(0,l.default)(pe).call(pe,0,Z)),pe}}},9150:(t,i,n)=>{n.r(i),n.d(i,{default:()=>l});var o=n(5527);function l(_){var O={debug:0,info:1,log:2,warn:3,error:4},P=function(ue){return O[ue]||-1},K=P(_.configs.logLevel);function oe(ue){for(var pe,ye=arguments.length,Ue=new Array(ye>1?ye-1:0),xe=1;xe<ye;xe++)Ue[xe-1]=arguments[xe];P(ue)>=K&&(pe=console)[ue].apply(pe,Ue)}return oe.warn=(0,o.default)(oe).call(oe,null,"warn"),oe.error=(0,o.default)(oe).call(oe,null,"error"),oe.info=(0,o.default)(oe).call(oe,null,"info"),oe.debug=(0,o.default)(oe).call(oe,null,"debug"),{rootInjects:{log:oe}}}},7002:(t,i,n)=>{n.r(i),n.d(i,{UPDATE_SELECTED_SERVER:()=>o,UPDATE_REQUEST_BODY_VALUE:()=>l,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>_,UPDATE_REQUEST_BODY_INCLUSION:()=>v,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>O,UPDATE_REQUEST_CONTENT_TYPE:()=>P,UPDATE_RESPONSE_CONTENT_TYPE:()=>G,UPDATE_SERVER_VARIABLE_VALUE:()=>K,SET_REQUEST_BODY_VALIDATE_ERROR:()=>oe,CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>ue,CLEAR_REQUEST_BODY_VALUE:()=>pe,setSelectedServer:()=>ye,setRequestBodyValue:()=>Ue,setRetainRequestBodyValueFlag:()=>xe,setRequestBodyInclusion:()=>ke,setActiveExamplesMember:()=>we,setRequestContentType:()=>Z,setResponseContentType:()=>Ft,setServerVariableValue:()=>Dt,setRequestBodyValidateError:()=>Yt,clearRequestBodyValidateError:()=>ln,initRequestBodyValidateError:()=>$n,clearRequestBodyValue:()=>nn});var o="oas3_set_servers",l="oas3_set_request_body_value",_="oas3_set_request_body_retain_flag",v="oas3_set_request_body_inclusion",O="oas3_set_active_examples_member",P="oas3_set_request_content_type",G="oas3_set_response_content_type",K="oas3_set_server_variable_value",oe="oas3_set_request_body_validate_error",ue="oas3_clear_request_body_validate_error",pe="oas3_clear_request_body_value";function ye(Jn,zn){return{type:o,payload:{selectedServerUrl:Jn,namespace:zn}}}function Ue(Jn){return{type:l,payload:{value:Jn.value,pathMethod:Jn.pathMethod}}}var xe=function(Jn){return{type:_,payload:{value:Jn.value,pathMethod:Jn.pathMethod}}};function ke(Jn){return{type:v,payload:{value:Jn.value,pathMethod:Jn.pathMethod,name:Jn.name}}}function we(Jn){return{type:O,payload:{name:Jn.name,pathMethod:Jn.pathMethod,contextType:Jn.contextType,contextName:Jn.contextName}}}function Z(Jn){return{type:P,payload:{value:Jn.value,pathMethod:Jn.pathMethod}}}function Ft(Jn){return{type:G,payload:{value:Jn.value,path:Jn.path,method:Jn.method}}}function Dt(Jn){return{type:K,payload:{server:Jn.server,namespace:Jn.namespace,key:Jn.key,val:Jn.val}}}var Yt=function(Jn){return{type:oe,payload:{path:Jn.path,method:Jn.method,validationErrors:Jn.validationErrors}}},ln=function(Jn){return{type:ue,payload:{path:Jn.path,method:Jn.method}}},$n=function(Jn){var zn=Jn.pathMethod;return{type:ue,payload:{path:zn[0],method:zn[1]}}},nn=function(Jn){return{type:pe,payload:{pathMethod:Jn.pathMethod}}}},3723:(t,i,n)=>{n.r(i),n.d(i,{definitionsToAuthorize:()=>pe});var ue,o=n(775),l=n(9334),_=n(5171),v=n(29),O=n(6145),P=n(6785),G=n(8639),K=n(9725),oe=n(7779),pe=(ue=(0,G.createSelector)(function(ye){return ye},function(ye){return ye.specSelectors.securityDefinitions()},function(ye,Ue){var xe,ke=(0,K.List)();return Ue&&(0,v.default)(xe=Ue.entrySeq()).call(xe,function(we){var Z,Ft=(0,l.default)(we,2),Dt=Ft[0],Yt=Ft[1],ln=Yt.get("type");if("oauth2"===ln&&(0,v.default)(Z=Yt.get("flows").entrySeq()).call(Z,function(Jn){var zn=(0,l.default)(Jn,2),$r=zn[1],ui=(0,K.fromJS)({flow:zn[0],authorizationUrl:$r.get("authorizationUrl"),tokenUrl:$r.get("tokenUrl"),scopes:$r.get("scopes"),type:Yt.get("type"),description:Yt.get("description")});ke=ke.push(new K.Map((0,o.default)({},Dt,(0,O.default)(ui).call(ui,function(gi){return void 0!==gi}))))}),"http"!==ln&&"apiKey"!==ln||(ke=ke.push(new K.Map((0,o.default)({},Dt,Yt)))),"openIdConnect"===ln&&Yt.get("openIdConnectData")){var $n=Yt.get("openIdConnectData"),nn=$n.get("grant_types_supported")||["authorization_code","implicit"];(0,v.default)(nn).call(nn,function(Jn){var zn,Zr=$n.get("scopes_supported")&&(0,P.default)(zn=$n.get("scopes_supported")).call(zn,function(ui,gi){return ui.set(gi,"")},new K.Map),$r=(0,K.fromJS)({flow:Jn,authorizationUrl:$n.get("authorization_endpoint"),tokenUrl:$n.get("token_endpoint"),scopes:Zr,type:"oauth2",openIdConnectUrl:Yt.get("openIdConnectUrl")});ke=ke.push(new K.Map((0,o.default)({},Dt,(0,O.default)($r).call($r,function(ui){return void 0!==ui}))))})}}),ke}),function(ye,Ue){return function(){for(var xe=Ue.getSystem().specSelectors.specJson(),ke=arguments.length,we=new Array(ke),Z=0;Z<ke;Z++)we[Z]=arguments[Z];if((0,oe.isOAS3)(xe)){var Ft,Dt=Ue.getState().getIn(["spec","resolvedSubtrees","components","securitySchemes"]);return ue.apply(void 0,(0,_.default)(Ft=[Ue,Dt]).call(Ft,we))}return ye.apply(void 0,we)}})},3427:(t,i,n)=>{n.r(i),n.d(i,{default:()=>P});var o=n(863),l=n(9334),_=n(2565),v=n(810),O=(n(5053),n(9569),n(9725));const P=function(G){var K,oe=G.callbacks,pe=G.specPath,ye=(0,G.getComponent)("OperationContainer",!0);if(!oe)return v.default.createElement("span",null,"No callbacks");var Ue=(0,_.default)(K=oe.entrySeq()).call(K,function(xe){var ke,we=(0,l.default)(xe,2),Z=we[0],Ft=we[1];return v.default.createElement("div",{key:Z},v.default.createElement("h2",null,Z),(0,_.default)(ke=Ft.entrySeq()).call(ke,function(Dt){var Yt,ln=(0,l.default)(Dt,2),$n=ln[0];return"$$ref"===$n?null:v.default.createElement("div",{key:$n},(0,_.default)(Yt=ln[1].entrySeq()).call(Yt,function(Jn){var zn=(0,l.default)(Jn,2),Zr=zn[0];if("$$ref"===Zr)return null;var ui=(0,O.fromJS)({operation:zn[1]});return v.default.createElement(ye,(0,o.default)({},G,{op:ui,key:Zr,tag:"",method:Zr,path:$n,specPath:pe.push(Z,$n,Zr),allowTryItOut:!1}))}))}))});return v.default.createElement("div",null,Ue)}},6775:(t,i,n)=>{n.r(i),n.d(i,{default:()=>pe});var o=n(7344),l=n(8656),_=n(6340),v=n(9972),O=n(5416),P=n(775),G=n(7512),K=n(6145),oe=n(2565),ue=n(810),pe=(n(5053),function(ye){(0,v.default)(xe,ye);var Ue=(0,O.default)(xe);function xe(ke,we){var Z;(0,o.default)(this,xe),Z=Ue.call(this,ke,we),(0,P.default)((0,_.default)(Z),"onChange",function($n){var nn=Z.props.onChange,Jn=$n.target,zn=Jn.value,Zr=Jn.name,$r=(0,G.default)({},Z.state.value);Zr?$r[Zr]=zn:$r=zn,Z.setState({value:$r},function(){return nn(Z.state)})});var Ft=Z.props,Dt=Ft.name,Yt=Ft.schema,ln=Z.getValue();return Z.state={name:Dt,schema:Yt,value:ln},Z}return(0,l.default)(xe,[{key:"getValue",value:function(){var ke=this.props,Z=ke.authorized;return Z&&Z.getIn([ke.name,"value"])}},{key:"render",value:function(){var ke,we,Z=this.props,Ft=Z.schema,Dt=Z.getComponent,Yt=Z.errSelectors,ln=Z.name,$n=Dt("Input"),nn=Dt("Row"),Jn=Dt("Col"),zn=Dt("authError"),Zr=Dt("Markdown",!0),$r=Dt("JumpToPath",!0),ui=(Ft.get("scheme")||"").toLowerCase(),gi=this.getValue(),Un=(0,K.default)(ke=Yt.allErrors()).call(ke,function(Cr){return Cr.get("authId")===ln});if("basic"===ui){var lr,ar=gi?gi.get("username"):null;return ue.default.createElement("div",null,ue.default.createElement("h4",null,ue.default.createElement("code",null,ln||Ft.get("name")),"\xa0 (http, Basic)",ue.default.createElement($r,{path:["securityDefinitions",ln]})),ar&&ue.default.createElement("h6",null,"Authorized"),ue.default.createElement(nn,null,ue.default.createElement(Zr,{source:Ft.get("description")})),ue.default.createElement(nn,null,ue.default.createElement("label",null,"Username:"),ar?ue.default.createElement("code",null," ",ar," "):ue.default.createElement(Jn,null,ue.default.createElement($n,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),ue.default.createElement(nn,null,ue.default.createElement("label",null,"Password:"),ar?ue.default.createElement("code",null," ****** "):ue.default.createElement(Jn,null,ue.default.createElement($n,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),(0,oe.default)(lr=Un.valueSeq()).call(lr,function(Cr,Wn){return ue.default.createElement(zn,{error:Cr,key:Wn})}))}return"bearer"===ui?ue.default.createElement("div",null,ue.default.createElement("h4",null,ue.default.createElement("code",null,ln||Ft.get("name")),"\xa0 (http, Bearer)",ue.default.createElement($r,{path:["securityDefinitions",ln]})),gi&&ue.default.createElement("h6",null,"Authorized"),ue.default.createElement(nn,null,ue.default.createElement(Zr,{source:Ft.get("description")})),ue.default.createElement(nn,null,ue.default.createElement("label",null,"Value:"),gi?ue.default.createElement("code",null," ****** "):ue.default.createElement(Jn,null,ue.default.createElement($n,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),(0,oe.default)(we=Un.valueSeq()).call(we,function(Cr,Wn){return ue.default.createElement(zn,{error:Cr,key:Wn})})):ue.default.createElement("div",null,ue.default.createElement("em",null,ue.default.createElement("b",null,ln)," HTTP authentication: unsupported scheme ","'".concat(ui,"'")))}}]),xe}(ue.default.Component))},6467:(t,i,n)=>{n.r(i),n.d(i,{default:()=>oe});var o=n(3427),l=n(2458),_=n(5757),v=n(6617),O=n(9928),P=n(5327),G=n(6775),K=n(6796);const oe={Callbacks:o.default,HttpAuth:G.default,RequestBody:l.default,Servers:v.default,ServersContainer:O.default,RequestBodyEditor:P.default,OperationServers:K.default,operationLink:_.default}},5757:(t,i,n)=>{n.r(i),n.d(i,{default:()=>K});var o=n(7344),l=n(8656),_=n(9972),v=n(5416),O=n(313),P=n(2565),G=n(810);n(5053),n(9569);const K=function(oe){(0,_.default)(pe,oe);var ue=(0,v.default)(pe);function pe(){return(0,o.default)(this,pe),ue.apply(this,arguments)}return(0,l.default)(pe,[{key:"render",value:function(){var Yt,ln,ye=this.props,Ue=ye.link,xe=ye.name,ke=(0,ye.getComponent)("Markdown",!0),we=Ue.get("operationId")||Ue.get("operationRef"),Z=Ue.get("parameters")&&Ue.get("parameters").toJS(),Ft=Ue.get("description");return G.default.createElement("div",{className:"operation-link"},G.default.createElement("div",{className:"description"},G.default.createElement("b",null,G.default.createElement("code",null,xe)),Ft?G.default.createElement(ke,{source:Ft}):null),G.default.createElement("pre",null,"Operation `",we,"`",G.default.createElement("br",null),G.default.createElement("br",null),"Parameters ",("string"!=typeof(Yt=(0,O.default)(Z,null,2))?"":(0,P.default)(ln=Yt.split("\n")).call(ln,function($n,nn){return nn>0?Array(1).join(" ")+$n:$n}).join("\n"))||"{}",G.default.createElement("br",null)))}}]),pe}(G.Component)},6796:(t,i,n)=>{n.r(i),n.d(i,{default:()=>ue});var o=n(1013),l=n(7344),_=n(8656),v=n(6340),O=n(9972),P=n(5416),G=n(775),K=n(5171),oe=n(810),ue=(n(5053),n(9569),function(pe){(0,O.default)(Ue,pe);var ye=(0,P.default)(Ue);function Ue(){var xe,ke;(0,l.default)(this,Ue);for(var we=arguments.length,Z=new Array(we),Ft=0;Ft<we;Ft++)Z[Ft]=arguments[Ft];return ke=ye.call.apply(ye,(0,K.default)(xe=[this]).call(xe,Z)),(0,G.default)((0,v.default)(ke),"setSelectedServer",function(Dt){var Yt,ln=ke.props,$n=ln.path,nn=ln.method;return ke.forceUpdate(),ke.props.setSelectedServer(Dt,(0,K.default)(Yt="".concat($n,":")).call(Yt,nn))}),(0,G.default)((0,v.default)(ke),"setServerVariableValue",function(Dt){var Yt,ln=ke.props,$n=ln.path,nn=ln.method;return ke.forceUpdate(),ke.props.setServerVariableValue((0,o.default)((0,o.default)({},Dt),{},{namespace:(0,K.default)(Yt="".concat($n,":")).call(Yt,nn)}))}),(0,G.default)((0,v.default)(ke),"getSelectedServer",function(){var Dt,Yt=ke.props,$n=Yt.method;return ke.props.getSelectedServer((0,K.default)(Dt="".concat(Yt.path,":")).call(Dt,$n))}),(0,G.default)((0,v.default)(ke),"getServerVariable",function(Dt,Yt){var ln,$n=ke.props,Jn=$n.method;return ke.props.getServerVariable({namespace:(0,K.default)(ln="".concat($n.path,":")).call(ln,Jn),server:Dt},Yt)}),(0,G.default)((0,v.default)(ke),"getEffectiveServerValue",function(Dt){var Yt,ln=ke.props,nn=ln.method;return ke.props.getEffectiveServerValue({server:Dt,namespace:(0,K.default)(Yt="".concat(ln.path,":")).call(Yt,nn)})}),ke}return(0,_.default)(Ue,[{key:"render",value:function(){var xe=this.props,ke=xe.operationServers,we=xe.pathServers;if(!ke&&!we)return null;var Ft=(0,xe.getComponent)("Servers"),Dt=ke||we,Yt=ke?"operation":"path";return oe.default.createElement("div",{className:"opblock-section operation-servers"},oe.default.createElement("div",{className:"opblock-section-header"},oe.default.createElement("div",{className:"tab-header"},oe.default.createElement("h4",{className:"opblock-title"},"Servers"))),oe.default.createElement("div",{className:"opblock-description-wrapper"},oe.default.createElement("h4",{className:"message"},"These ",Yt,"-level options override the global server options."),oe.default.createElement(Ft,{servers:Dt,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}]),Ue}(oe.default.Component))},5327:(t,i,n)=>{n.r(i),n.d(i,{default:()=>pe});var o=n(7344),l=n(8656),_=n(6340),v=n(9972),O=n(5416),P=n(775),G=n(810),K=(n(5053),n(8096)),oe=n(6298),ue=Function.prototype,pe=function(ye){(0,v.default)(xe,ye);var Ue=(0,O.default)(xe);function xe(ke,we){var Z;return(0,o.default)(this,xe),Z=Ue.call(this,ke,we),(0,P.default)((0,_.default)(Z),"applyDefaultValue",function(Ft){var Dt=Ft||Z.props,Yt=Dt.onChange,ln=Dt.defaultValue;return Z.setState({value:ln}),Yt(ln)}),(0,P.default)((0,_.default)(Z),"onChange",function(Ft){Z.props.onChange((0,oe.Pz)(Ft))}),(0,P.default)((0,_.default)(Z),"onDomChange",function(Ft){var Dt=Ft.target.value;Z.setState({value:Dt},function(){return Z.onChange(Dt)})}),Z.state={value:(0,oe.Pz)(ke.value)||ke.defaultValue},ke.onChange(ke.value),Z}return(0,l.default)(xe,[{key:"UNSAFE_componentWillReceiveProps",value:function(ke){this.props.value!==ke.value&&ke.value!==this.state.value&&this.setState({value:(0,oe.Pz)(ke.value)}),!ke.value&&ke.defaultValue&&this.state.value&&this.applyDefaultValue(ke)}},{key:"render",value:function(){var ke=this.props,Z=ke.errors,Ft=this.state.value,Dt=Z.size>0,Yt=(0,ke.getComponent)("TextArea");return G.default.createElement("div",{className:"body-param"},G.default.createElement(Yt,{className:(0,K.default)("body-param__text",{invalid:Dt}),title:Z.size?Z.join(", "):"",value:Ft,onChange:this.onDomChange}))}}]),xe}(G.PureComponent);(0,P.default)(pe,"defaultProps",{onChange:ue,userHasEditedBody:!1})},2458:(t,i,n)=>{n.r(i),n.d(i,{getDefaultRequestBodyValue:()=>pe,default:()=>ye});var o=n(9334),l=n(2565),_=n(8818),v=n(2372),O=n(5171),P=n(4163),G=n(810),K=(n(5053),n(9569),n(9725)),oe=n(6298),ue=n(2518),pe=function(Ue,xe,ke){var we=Ue.getIn(["content",xe]),Z=we.get("schema").toJS(),Ft=void 0!==we.get("examples"),Dt=we.get("example"),Yt=Ft?we.getIn(["examples",ke,"value"]):Dt,ln=(0,oe.xi)(Z,xe,{includeWriteOnly:!0},Yt);return(0,oe.Pz)(ln)};const ye=function(Ue){var xe=Ue.userHasEditedBody,ke=Ue.requestBody,we=Ue.requestBodyValue,Z=Ue.requestBodyInclusionSetting,Ft=Ue.requestBodyErrors,Dt=Ue.getComponent,Yt=Ue.getConfigs,ln=Ue.specSelectors,$n=Ue.fn,nn=Ue.contentType,Jn=Ue.isExecute,zn=Ue.specPath,Zr=Ue.onChange,$r=Ue.onChangeIncludeEmpty,ui=Ue.activeExamplesKey,gi=Ue.updateActiveExamplesKey,Un=Ue.setRetainRequestBodyValueFlag,lr=function(Yr){var li={key:Yr,shouldDispatchInit:!1,defaultValue:!0};return"no value"===Z.get(Yr,"no value")&&(li.shouldDispatchInit=!0),li},ar=Dt("Markdown",!0),Cr=Dt("modelExample"),Wn=Dt("RequestBodyEditor"),ai=Dt("highlightCode"),ho=Dt("ExamplesSelectValueRetainer"),Yi=Dt("Example"),lo=Dt("ParameterIncludeEmpty"),pi=Yt().showCommonExtensions,Kn=ke&&ke.get("description")||null,Nn=ke&&ke.get("content")||new K.OrderedMap;nn=nn||Nn.keySeq().first()||"";var _i=Nn.get(nn,(0,K.OrderedMap)()),Zi=_i.get("schema",(0,K.OrderedMap)()),So=_i.get("examples",null),us=null==So?void 0:(0,l.default)(So).call(So,function(Yr,li){var eo,_a=null===(eo=Yr)||void 0===eo?void 0:eo.get("value",null);return _a&&(Yr=Yr.set("value",pe(ke,nn,li),_a)),Yr});if(Ft=K.List.isList(Ft)?Ft:(0,K.List)(),!_i.size)return null;var Zo="object"===_i.getIn(["schema","type"]),pa="binary"===_i.getIn(["schema","format"]),va="base64"===_i.getIn(["schema","format"]);if("application/octet-stream"===nn||0===(0,_.default)(nn).call(nn,"image/")||0===(0,_.default)(nn).call(nn,"audio/")||0===(0,_.default)(nn).call(nn,"video/")||pa||va){var qi=Dt("Input");return Jn?G.default.createElement(qi,{type:"file",onChange:function(Yr){Zr(Yr.target.files[0])}}):G.default.createElement("i",null,"Example values are not available for ",G.default.createElement("code",null,nn)," media types.")}if(Zo&&("application/x-www-form-urlencoded"===nn||0===(0,_.default)(nn).call(nn,"multipart/"))&&Zi.get("properties",(0,K.OrderedMap)()).size>0){var xo,$o=Dt("JsonSchemaForm"),rt=Dt("ParameterExt"),kt=Zi.get("properties",(0,K.OrderedMap)());return we=K.Map.isMap(we)?we:(0,K.OrderedMap)(),G.default.createElement("div",{className:"table-container"},Kn&&G.default.createElement(ar,{source:Kn}),G.default.createElement("table",null,G.default.createElement("tbody",null,K.Map.isMap(kt)&&(0,l.default)(xo=kt.entrySeq()).call(xo,function(Yr){var li,eo,_a=(0,o.default)(Yr,2),ps=_a[0],Fl=_a[1];if(!Fl.get("readOnly")){var Gl=pi?(0,oe.po)(Fl):null,Ou=(0,v.default)(li=Zi.get("required",(0,K.List)())).call(li,ps),Pc=Fl.get("type"),np=Fl.get("format"),ou=Fl.get("description"),yd=we.getIn([ps,"value"]),kp=we.getIn([ps,"errors"])||Ft,Y_=Z.get(ps)||!1,S_=Fl.has("default")||Fl.has("example")||Fl.hasIn(["items","example"])||Fl.hasIn(["items","default"]),j_=Fl.has("enum")&&(1===Fl.get("enum").size||Ou),Au=S_||j_,hd="";"array"!==Pc||Au||(hd=[]),("object"===Pc||Au)&&(hd=(0,oe.xi)(Fl,!1,{includeWriteOnly:!0})),"string"!=typeof hd&&"object"===Pc&&(hd=(0,oe.Pz)(hd)),"string"==typeof hd&&"array"===Pc&&(hd=JSON.parse(hd));var n_="string"===Pc&&("binary"===np||"base64"===np);return G.default.createElement("tr",{key:ps,className:"parameters","data-property-name":ps},G.default.createElement("td",{className:"parameters-col_name"},G.default.createElement("div",{className:Ou?"parameter__name required":"parameter__name"},ps,Ou?G.default.createElement("span",null,"\xa0*"):null),G.default.createElement("div",{className:"parameter__type"},Pc,np&&G.default.createElement("span",{className:"prop-format"},"($",np,")"),pi&&Gl.size?(0,l.default)(eo=Gl.entrySeq()).call(eo,function(co){var xr,ki=(0,o.default)(co,2),Co=ki[0],os=ki[1];return G.default.createElement(rt,{key:(0,O.default)(xr="".concat(Co,"-")).call(xr,os),xKey:Co,xVal:os})}):null),G.default.createElement("div",{className:"parameter__deprecated"},Fl.get("deprecated")?"deprecated":null)),G.default.createElement("td",{className:"parameters-col_description"},G.default.createElement(ar,{source:ou}),Jn?G.default.createElement("div",null,G.default.createElement($o,{fn:$n,dispatchInitialValue:!n_,schema:Fl,description:ps,getComponent:Dt,value:void 0===yd?hd:yd,required:Ou,errors:kp,onChange:function(co){Zr(co,[ps])}}),Ou?null:G.default.createElement(lo,{onChange:function(co){return $r(ps,co)},isIncluded:Y_,isIncludedOptions:lr(ps),isDisabled:(0,P.default)(yd)?0!==yd.length:!(0,oe.O2)(yd)})):null))}}))))}var Lt=pe(ke,nn,ui),cr=null;return(0,ue.O)(Lt)&&(cr="json"),G.default.createElement("div",null,Kn&&G.default.createElement(ar,{source:Kn}),us?G.default.createElement(ho,{userHasEditedBody:xe,examples:us,currentKey:ui,currentUserInputValue:we,onSelect:function(Yr){gi(Yr)},updateValue:Zr,defaultToFirstExample:!0,getComponent:Dt,setRetainRequestBodyValueFlag:Un}):null,Jn?G.default.createElement("div",null,G.default.createElement(Wn,{value:we,errors:Ft,defaultValue:Lt,onChange:Zr,getComponent:Dt})):G.default.createElement(Cr,{getComponent:Dt,getConfigs:Yt,specSelectors:ln,expandDepth:1,isExecute:Jn,schema:_i.get("schema"),specPath:zn.push("content",nn),example:G.default.createElement(ai,{className:"body-param__example",getConfigs:Yt,language:cr,value:(0,oe.Pz)(we)||Lt}),includeWriteOnly:!0}),us?G.default.createElement(Yi,{example:us.get(ui),getComponent:Dt,getConfigs:Yt}):null)}},9928:(t,i,n)=>{n.r(i),n.d(i,{default:()=>P});var o=n(7344),l=n(8656),_=n(9972),v=n(5416),O=n(810),P=(n(5053),function(G){(0,_.default)(oe,G);var K=(0,v.default)(oe);function oe(){return(0,o.default)(this,oe),K.apply(this,arguments)}return(0,l.default)(oe,[{key:"render",value:function(){var ue=this.props,ye=ue.oas3Selectors,Ue=ue.oas3Actions,xe=ue.getComponent,ke=ue.specSelectors.servers(),we=xe("Servers");return ke&&ke.size?O.default.createElement("div",null,O.default.createElement("span",{className:"servers-title"},"Servers"),O.default.createElement(we,{servers:ke,currentServer:ye.selectedServer(),setSelectedServer:Ue.setSelectedServer,setServerVariableValue:Ue.setServerVariableValue,getServerVariable:ye.serverVariableValue,getEffectiveServerValue:ye.serverEffectiveValue})):null}}]),oe}(O.default.Component))},6617:(t,i,n)=>{n.r(i),n.d(i,{default:()=>Ue});var o=n(9334),l=n(7344),_=n(8656),v=n(6340),O=n(9972),P=n(5416),G=n(775),K=n(5171),oe=n(1778),ue=n(2565),pe=n(810),ye=n(9725),Ue=(n(5053),n(9569),function(xe){(0,O.default)(we,xe);var ke=(0,P.default)(we);function we(){var Z,Ft;(0,l.default)(this,we);for(var Dt=arguments.length,Yt=new Array(Dt),ln=0;ln<Dt;ln++)Yt[ln]=arguments[ln];return Ft=ke.call.apply(ke,(0,K.default)(Z=[this]).call(Z,Yt)),(0,G.default)((0,v.default)(Ft),"onServerChange",function($n){Ft.setServer($n.target.value)}),(0,G.default)((0,v.default)(Ft),"onServerVariableValueChange",function($n){var nn=Ft.props,Jn=nn.setServerVariableValue,zn=nn.currentServer,Zr=$n.target.getAttribute("data-variable");"function"==typeof Jn&&Jn({server:zn,key:Zr,val:$n.target.value})}),(0,G.default)((0,v.default)(Ft),"setServer",function($n){(0,Ft.props.setSelectedServer)($n)}),Ft}return(0,_.default)(we,[{key:"componentDidMount",value:function(){var Z,Ft=this.props;Ft.currentServer||this.setServer(null===(Z=Ft.servers.first())||void 0===Z?void 0:Z.get("url"))}},{key:"UNSAFE_componentWillReceiveProps",value:function(Z){var Ft=this,Dt=Z.servers,Yt=Z.setServerVariableValue,ln=Z.getServerVariable;if(this.props.currentServer!==Z.currentServer||this.props.servers!==Z.servers){var $n,nn=(0,oe.default)(Dt).call(Dt,function(gi){return gi.get("url")===Z.currentServer}),Jn=(0,oe.default)($n=this.props.servers).call($n,function(gi){return gi.get("url")===Ft.props.currentServer})||(0,ye.OrderedMap)();if(!nn)return this.setServer(Dt.first().get("url"));var zn=Jn.get("variables")||(0,ye.OrderedMap)(),Zr=((0,oe.default)(zn).call(zn,function(gi){return gi.get("default")})||(0,ye.OrderedMap)()).get("default"),$r=nn.get("variables")||(0,ye.OrderedMap)(),ui=((0,oe.default)($r).call($r,function(gi){return gi.get("default")})||(0,ye.OrderedMap)()).get("default");(0,ue.default)($r).call($r,function(gi,Un){ln(Z.currentServer,Un)&&Zr===ui||Yt({server:Z.currentServer,key:Un,val:gi.get("default")||""})})}}},{key:"render",value:function(){var Z,Ft,Dt=this,Yt=this.props,ln=Yt.servers,$n=Yt.currentServer,nn=Yt.getServerVariable,Jn=Yt.getEffectiveServerValue,zn=((0,oe.default)(ln).call(ln,function($r){return $r.get("url")===$n})||(0,ye.OrderedMap)()).get("variables")||(0,ye.OrderedMap)(),Zr=0!==zn.size;return pe.default.createElement("div",{className:"servers"},pe.default.createElement("label",{htmlFor:"servers"},pe.default.createElement("select",{onChange:this.onServerChange,value:$n},(0,ue.default)(Z=ln.valueSeq()).call(Z,function($r){return pe.default.createElement("option",{value:$r.get("url"),key:$r.get("url")},$r.get("url"),$r.get("description")&&" - ".concat($r.get("description")))}).toArray())),Zr?pe.default.createElement("div",null,pe.default.createElement("div",{className:"computed-url"},"Computed URL:",pe.default.createElement("code",null,Jn($n))),pe.default.createElement("h4",null,"Server variables"),pe.default.createElement("table",null,pe.default.createElement("tbody",null,(0,ue.default)(Ft=zn.entrySeq()).call(Ft,function($r){var ui,gi=(0,o.default)($r,2),Un=gi[0],lr=gi[1];return pe.default.createElement("tr",{key:Un},pe.default.createElement("td",null,Un),pe.default.createElement("td",null,lr.get("enum")?pe.default.createElement("select",{"data-variable":Un,onChange:Dt.onServerVariableValueChange},(0,ue.default)(ui=lr.get("enum")).call(ui,function(ar){return pe.default.createElement("option",{selected:ar===nn($n,Un),key:ar,value:ar},ar)})):pe.default.createElement("input",{type:"text",value:nn($n,Un)||"",onChange:Dt.onServerVariableValueChange,"data-variable":Un})))})))):null)}}]),we}(pe.default.Component))},7779:(t,i,n)=>{n.r(i),n.d(i,{isOAS3:()=>v,isSwagger2:()=>O,OAS3ComponentWrapFactory:()=>P});var o=n(863),l=n(3590),_=n(810);function v(G){var K=G.get("openapi");return"string"==typeof K&&(0,l.default)(K).call(K,"3.0.")&&K.length>4}function O(G){var K=G.get("swagger");return"string"==typeof K&&(0,l.default)(K).call(K,"2.0")}function P(G){return function(K,oe){return function(ue){return oe&&oe.specSelectors&&oe.specSelectors.specJson?v(oe.specSelectors.specJson())?_.default.createElement(G,(0,o.default)({},ue,oe,{Ori:K})):_.default.createElement(K,ue):(console.warn("OAS3 wrapper: couldn't get spec"),null)}}}},7451:(t,i,n)=>{n.r(i),n.d(i,{default:()=>oe});var o=n(2044),l=n(3723),_=n(1741),v=n(6467),O=n(7761),P=n(7002),G=n(5065),K=n(9666);function oe(){return{components:v.default,wrapComponents:O.default,statePlugins:{spec:{wrapSelectors:o,selectors:_},auth:{wrapSelectors:l},oas3:{actions:P,reducers:K.default,selectors:G}}}}},9666:(t,i,n)=>{n.r(i),n.d(i,{default:()=>pe});var o=n(775);const l=(n.d(Ue={},{default:()=>j8}),Ue);var Ue,_,v=n(9334),O=n(5487),P=n(8136),G=n(29),K=n(6785),oe=n(9725),ue=n(7002);const pe=((0,o.default)(_={},ue.UPDATE_SELECTED_SERVER,function(ye,Ue){var xe=Ue.payload,we=xe.namespace;return ye.setIn(we?[we,"selectedServer"]:["selectedServer"],xe.selectedServerUrl)}),(0,o.default)(_,ue.UPDATE_REQUEST_BODY_VALUE,function(ye,Ue){var xe=Ue.payload,ke=xe.value,Z=(0,v.default)(xe.pathMethod,2),Ft=Z[0],Dt=Z[1];if(!oe.Map.isMap(ke))return ye.setIn(["requestData",Ft,Dt,"bodyValue"],ke);var Yt,ln=ye.getIn(["requestData",Ft,Dt,"bodyValue"])||(0,oe.Map)();oe.Map.isMap(ln)||(ln=(0,oe.Map)());var $n=(0,O.default)(ke).call(ke),nn=(0,l.default)($n),Jn=(0,P.default)(nn).call(nn,0);return(0,G.default)(Jn).call(Jn,function(zn){var Zr=ke.getIn([zn]);ln.has(zn)&&oe.Map.isMap(Zr)||(Yt=ln.setIn([zn,"value"],Zr))}),ye.setIn(["requestData",Ft,Dt,"bodyValue"],Yt)}),(0,o.default)(_,ue.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG,function(ye,Ue){var xe=Ue.payload,ke=xe.value,Z=(0,v.default)(xe.pathMethod,2);return ye.setIn(["requestData",Z[0],Z[1],"retainBodyValue"],ke)}),(0,o.default)(_,ue.UPDATE_REQUEST_BODY_INCLUSION,function(ye,Ue){var xe=Ue.payload,ke=xe.value,Z=xe.name,Ft=(0,v.default)(xe.pathMethod,2);return ye.setIn(["requestData",Ft[0],Ft[1],"bodyInclusion",Z],ke)}),(0,o.default)(_,ue.UPDATE_ACTIVE_EXAMPLES_MEMBER,function(ye,Ue){var xe=Ue.payload,ke=xe.name,Z=xe.contextType,Ft=xe.contextName,Dt=(0,v.default)(xe.pathMethod,2);return ye.setIn(["examples",Dt[0],Dt[1],Z,Ft,"activeExample"],ke)}),(0,o.default)(_,ue.UPDATE_REQUEST_CONTENT_TYPE,function(ye,Ue){var xe=Ue.payload,ke=xe.value,Z=(0,v.default)(xe.pathMethod,2);return ye.setIn(["requestData",Z[0],Z[1],"requestContentType"],ke)}),(0,o.default)(_,ue.UPDATE_RESPONSE_CONTENT_TYPE,function(ye,Ue){var xe=Ue.payload;return ye.setIn(["requestData",xe.path,xe.method,"responseContentType"],xe.value)}),(0,o.default)(_,ue.UPDATE_SERVER_VARIABLE_VALUE,function(ye,Ue){var xe=Ue.payload,ke=xe.server,we=xe.namespace,Z=xe.key;return ye.setIn(we?[we,"serverVariableValues",ke,Z]:["serverVariableValues",ke,Z],xe.val)}),(0,o.default)(_,ue.SET_REQUEST_BODY_VALIDATE_ERROR,function(ye,Ue){var xe=Ue.payload,ke=xe.path,we=xe.method,Z=xe.validationErrors,Ft=[];if(Ft.push("Required field is not provided"),Z.missingBodyValue)return ye.setIn(["requestData",ke,we,"errors"],(0,oe.fromJS)(Ft));if(Z.missingRequiredKeys&&Z.missingRequiredKeys.length>0){var Dt=Z.missingRequiredKeys;return ye.updateIn(["requestData",ke,we,"bodyValue"],(0,oe.fromJS)({}),function(Yt){return(0,K.default)(Dt).call(Dt,function(ln,$n){return ln.setIn([$n,"errors"],(0,oe.fromJS)(Ft))},Yt)})}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),ye}),(0,o.default)(_,ue.CLEAR_REQUEST_BODY_VALIDATE_ERROR,function(ye,Ue){var xe=Ue.payload,ke=xe.path,we=xe.method,Z=ye.getIn(["requestData",ke,we,"bodyValue"]);if(!oe.Map.isMap(Z))return ye.setIn(["requestData",ke,we,"errors"],(0,oe.fromJS)([]));var Ft=(0,O.default)(Z).call(Z),Dt=(0,l.default)(Ft),Yt=(0,P.default)(Dt).call(Dt,0);return Yt?ye.updateIn(["requestData",ke,we,"bodyValue"],(0,oe.fromJS)({}),function(ln){return(0,K.default)(Yt).call(Yt,function($n,nn){return $n.setIn([nn,"errors"],(0,oe.fromJS)([]))},ln)}):ye}),(0,o.default)(_,ue.CLEAR_REQUEST_BODY_VALUE,function(ye,Ue){var ke=(0,v.default)(Ue.payload.pathMethod,2),we=ke[0],Z=ke[1],Ft=ye.getIn(["requestData",we,Z,"bodyValue"]);return Ft?oe.Map.isMap(Ft)?ye.setIn(["requestData",we,Z,"bodyValue"],(0,oe.Map)()):ye.setIn(["requestData",we,Z,"bodyValue"],""):ye}),_)},5065:(t,i,n)=>{n.r(i),n.d(i,{selectedServer:()=>Ue,requestBodyValue:()=>xe,shouldRetainRequestBodyValue:()=>ke,hasUserEditedBody:()=>we,requestBodyInclusionSetting:()=>Z,requestBodyErrors:()=>Ft,activeExamplesMember:()=>Dt,requestContentType:()=>Yt,responseContentType:()=>ln,serverVariableValue:()=>$n,serverVariables:()=>nn,serverEffectiveValue:()=>Jn,validateBeforeExecute:()=>zn,validateShallowRequired:()=>Zr});var o=n(2691),l=n(5171),_=n(2565),v=n(29),O=n(2740),P=n(8818),G=n(9725),K=n(7779),oe=n(2458),ue=n(6298);function pe($r){return function(){for(var ui=arguments.length,gi=new Array(ui),Un=0;Un<ui;Un++)gi[Un]=arguments[Un];return function(lr){var ar=lr.getSystem().specSelectors.specJson();return(0,K.isOAS3)(ar)?$r.apply(void 0,gi):null}}}var ye,Ue=pe(function($r,ui){return $r.getIn(ui?[ui,"selectedServer"]:["selectedServer"])||""}),xe=pe(function($r,ui,gi){return $r.getIn(["requestData",ui,gi,"bodyValue"])||null}),ke=pe(function($r,ui,gi){return $r.getIn(["requestData",ui,gi,"retainBodyValue"])||!1}),we=function($r,ui,gi){return function(Un){var lr=Un.getSystem(),ar=lr.oas3Selectors,Cr=lr.specSelectors,Wn=Cr.specJson();if((0,K.isOAS3)(Wn)){var ai=!1,ho=ar.requestContentType(ui,gi),Yi=ar.requestBodyValue(ui,gi);if(G.Map.isMap(Yi)&&(Yi=(0,ue.Pz)(Yi.mapEntries(function(pi){return G.Map.isMap(pi[1])?[pi[0],pi[1].get("value")]:pi}).toJS())),G.List.isList(Yi)&&(Yi=(0,ue.Pz)(Yi)),ho){var lo=(0,oe.getDefaultRequestBodyValue)(Cr.specResolvedSubtree(["paths",ui,gi,"requestBody"]),ho,ar.activeExamplesMember(ui,gi,"requestBody","requestBody"));ai=!!Yi&&Yi!==lo}return ai}return null}},Z=pe(function($r,ui,gi){return $r.getIn(["requestData",ui,gi,"bodyInclusion"])||(0,G.Map)()}),Ft=pe(function($r,ui,gi){return $r.getIn(["requestData",ui,gi,"errors"])||null}),Dt=pe(function($r,ui,gi,Un,lr){return $r.getIn(["examples",ui,gi,Un,lr,"activeExample"])||null}),Yt=pe(function($r,ui,gi){return $r.getIn(["requestData",ui,gi,"requestContentType"])||null}),ln=pe(function($r,ui,gi){return $r.getIn(["requestData",ui,gi,"responseContentType"])||null}),$n=pe(function($r,ui,gi){var Un;if("string"!=typeof ui){var lr=ui.server,ar=ui.namespace;Un=ar?[ar,"serverVariableValues",lr,gi]:["serverVariableValues",lr,gi]}else Un=["serverVariableValues",ui,gi];return $r.getIn(Un)||null}),nn=pe(function($r,ui){var gi;if("string"!=typeof ui){var Un=ui.server,lr=ui.namespace;gi=lr?[lr,"serverVariableValues",Un]:["serverVariableValues",Un]}else gi=["serverVariableValues",ui];return $r.getIn(gi)||(0,G.OrderedMap)()}),Jn=pe(function($r,ui){var gi,Un;if("string"!=typeof ui){var ar=ui.namespace;Un=ui.server,gi=$r.getIn(ar?[ar,"serverVariableValues",Un]:["serverVariableValues",Un])}else gi=$r.getIn(["serverVariableValues",Un=ui]);gi=gi||(0,G.OrderedMap)();var Cr=Un;return(0,_.default)(gi).call(gi,function(Wn,ai){Cr=Cr.replace(new RegExp("{".concat(ai,"}"),"g"),Wn)}),Cr}),zn=(ye=function($r,ui){return Un=(Un=ui)||[],!!$r.getIn((0,l.default)(lr=["requestData"]).call(lr,(0,o.default)(Un),["bodyValue"]));var Un,lr},function(){for(var $r=arguments.length,ui=new Array($r),gi=0;gi<$r;gi++)ui[gi]=arguments[gi];return function(Un){var lr,ar,Cr=Un.getSystem().specSelectors.specJson(),Wn=(0,l.default)(lr=[]).call(lr,ui)[1]||[];return!Cr.getIn((0,l.default)(ar=["paths"]).call(ar,(0,o.default)(Wn),["requestBody","required"]))||ye.apply(void 0,ui)}}),Zr=function($r,ui){var gi,Un=ui.oas3RequiredRequestBodyContentType,lr=ui.oas3RequestContentType,ar=ui.oas3RequestBodyValue,Cr=[];if(!G.Map.isMap(ar))return Cr;var Wn=[];return(0,v.default)(gi=(0,O.default)(Un.requestContentType)).call(gi,function(ai){if(ai===lr){var ho=Un.requestContentType[ai];(0,v.default)(ho).call(ho,function(Yi){(0,P.default)(Wn).call(Wn,Yi)<0&&Wn.push(Yi)})}}),(0,v.default)(Wn).call(Wn,function(ai){ar.getIn([ai,"value"])||Cr.push(ai)}),Cr}},1741:(t,i,n)=>{n.r(i),n.d(i,{servers:()=>K,isSwagger2:()=>oe});var v,o=n(8639),l=n(9725),_=n(7779),O=function(ue){return ue||(0,l.Map)()},P=(0,o.createSelector)(O,function(ue){return ue.get("json",(0,l.Map)())}),G=(0,o.createSelector)(O,function(ue){return ue.get("resolved",(0,l.Map)())}),K=(v=(0,o.createSelector)(function(ue){var pe=G(ue);return pe.count()<1&&(pe=P(ue)),pe},function(ue){return ue.getIn(["servers"])||(0,l.Map)()}),function(){return function(ue){var pe=ue.getSystem().specSelectors.specJson();if((0,_.isOAS3)(pe)){for(var ye=arguments.length,Ue=new Array(ye>1?ye-1:0),xe=1;xe<ye;xe++)Ue[xe-1]=arguments[xe];return v.apply(void 0,Ue)}return null}}),oe=function(ue,pe){return function(){var ye=pe.getSystem().specSelectors.specJson();return(0,_.isSwagger2)(ye)}}},2044:(t,i,n)=>{n.r(i),n.d(i,{definitions:()=>pe,hasHost:()=>ye,securityDefinitions:()=>Ue,host:()=>xe,basePath:()=>ke,consumes:()=>we,produces:()=>Z,schemes:()=>Ft,servers:()=>Dt,isOAS3:()=>Yt,isSwagger2:()=>ln});var o=n(8639),l=n(3881),_=n(9725),v=n(7779);function O($n){return function(nn,Jn){return function(){var zn=Jn.getSystem().specSelectors.specJson();return(0,v.isOAS3)(zn)?$n.apply(void 0,arguments):nn.apply(void 0,arguments)}}}var P=function($n){return $n||(0,_.Map)()},G=O((0,o.createSelector)(function(){return null})),K=(0,o.createSelector)(P,function($n){return $n.get("json",(0,_.Map)())}),oe=(0,o.createSelector)(P,function($n){return $n.get("resolved",(0,_.Map)())}),ue=function($n){var nn=oe($n);return nn.count()<1&&(nn=K($n)),nn},pe=O((0,o.createSelector)(ue,function($n){var nn=$n.getIn(["components","schemas"]);return _.Map.isMap(nn)?nn:(0,_.Map)()})),ye=O(function($n){return ue($n).hasIn(["servers",0])}),Ue=O((0,o.createSelector)(l.specJsonWithResolvedSubtrees,function($n){return $n.getIn(["components","securitySchemes"])||null})),xe=G,ke=G,we=G,Z=G,Ft=G,Dt=O((0,o.createSelector)(ue,function($n){return $n.getIn(["servers"])||(0,_.Map)()})),Yt=function($n,nn){return function(){var Jn=nn.getSystem().specSelectors.specJson();return(0,v.isOAS3)(_.Map.isMap(Jn)?Jn:(0,_.Map)())}},ln=function($n,nn){return function(){var Jn=nn.getSystem().specSelectors.specJson();return(0,v.isSwagger2)(_.Map.isMap(Jn)?Jn:(0,_.Map)())}}},356:(t,i,n)=>{n.r(i),n.d(i,{default:()=>O});var o=n(302),l=n(810),_=n(7779),v=["Ori"];const O=(0,_.OAS3ComponentWrapFactory)(function(P){var G=P.Ori,K=(0,o.default)(P,v),oe=K.schema,ue=K.getComponent,pe=K.errSelectors,ye=K.authorized,Ue=K.onAuthChange,xe=K.name,ke=ue("HttpAuth");return"http"===oe.get("type")?l.default.createElement(ke,{key:xe,schema:oe,name:xe,errSelectors:pe,authorized:ye,getComponent:ue,onChange:Ue}):l.default.createElement(G,K)})},7761:(t,i,n)=>{n.r(i),n.d(i,{default:()=>G});var o=n(2460),l=n(356),_=n(9487),v=n(58),O=n(3499),P=n(287);const G={Markdown:o.default,AuthItem:l.default,JsonSchema_string:P.default,VersionStamp:_.default,model:O.default,onlineValidatorBadge:v.default}},287:(t,i,n)=>{n.r(i),n.d(i,{default:()=>O});var o=n(302),l=n(810),_=n(7779),v=["Ori"];const O=(0,_.OAS3ComponentWrapFactory)(function(P){var G=P.Ori,K=(0,o.default)(P,v),oe=K.schema,ue=K.getComponent,pe=K.errors,ye=K.onChange,Ue=oe&&oe.get?oe.get("format"):null,xe=oe&&oe.get?oe.get("type"):null,ke=ue("Input");return xe&&"string"===xe&&Ue&&("binary"===Ue||"base64"===Ue)?l.default.createElement(ke,{type:"file",className:pe.length?"invalid":"",title:pe.length?pe:"",onChange:function(we){ye(we.target.files[0])},disabled:G.isDisabled}):l.default.createElement(G,K)})},2460:(t,i,n)=>{n.r(i),n.d(i,{Markdown:()=>K,default:()=>oe});var o=n(5942),l=n(810),_=(n(5053),n(8096)),v=n(3952),O=n(7779),P=n(5466),G=new v.Remarkable("commonmark");G.block.ruler.enable(["table"]),G.set({linkTarget:"_blank"});var K=function(ue){var pe=ue.source,ye=ue.className,Ue=void 0===ye?"":ye;if("string"!=typeof pe)return null;if(pe){var ke,we=(0,ue.getConfigs)().useUnsafeMarkdown,Z=G.render(pe),Ft=(0,P.s)(Z,{useUnsafeMarkdown:we});return"string"==typeof Ft&&(ke=(0,o.default)(Ft).call(Ft)),l.default.createElement("div",{dangerouslySetInnerHTML:{__html:ke},className:(0,_.default)(Ue,"renderedMarkdown")})}return null};K.defaultProps={getConfigs:function(){return{useUnsafeMarkdown:!1}}};const oe=(0,O.OAS3ComponentWrapFactory)(K)},3499:(t,i,n)=>{n.r(i),n.d(i,{default:()=>ue});var o=n(863),l=n(7344),_=n(8656),v=n(9972),O=n(5416),P=n(810),G=(n(5053),n(7779)),K=n(1543),oe=function(pe){(0,v.default)(Ue,pe);var ye=(0,O.default)(Ue);function Ue(){return(0,l.default)(this,Ue),ye.apply(this,arguments)}return(0,_.default)(Ue,[{key:"render",value:function(){var xe=this.props,ke=xe.getConfigs,we=["model-box"],Z=null;return!0===xe.schema.get("deprecated")&&(we.push("deprecated"),Z=P.default.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),P.default.createElement("div",{className:we.join(" ")},Z,P.default.createElement(K.Z,(0,o.default)({},this.props,{getConfigs:ke,depth:1,expandDepth:this.props.expandDepth||0})))}}]),Ue}(P.Component);const ue=(0,G.OAS3ComponentWrapFactory)(oe)},58:(t,i,n)=>{n.r(i),n.d(i,{default:()=>_});var o=n(7779),l=n(5623);const _=(0,o.OAS3ComponentWrapFactory)(l.Z)},9487:(t,i,n)=>{n.r(i),n.d(i,{default:()=>l});var o=n(810);const l=(0,n(7779).OAS3ComponentWrapFactory)(function(_){return o.default.createElement("span",null,o.default.createElement(_.Ori,_),o.default.createElement("small",{className:"version-stamp"},o.default.createElement("pre",{className:"version"},"OAS3")))})},8560:(t,i,n)=>{n.r(i),n.d(i,{default:()=>_});var o=n(6235),l=!1;function _(){return{statePlugins:{spec:{wrapActions:{updateSpec:function(v){return function(){return l=!0,v.apply(void 0,arguments)}},updateJsonSpec:function(v,O){return function(){var P=O.getConfigs().onComplete;return l&&"function"==typeof P&&((0,o.default)(P,0),l=!1),v.apply(void 0,arguments)}}}}}}}},4624:(t,i,n)=>{n.r(i),n.d(i,{requestSnippetGenerator_curl_bash:()=>ln,requestSnippetGenerator_curl_cmd:()=>$n,requestSnippetGenerator_curl_powershell:()=>Yt});var o=n(2691),l=n(9334),_=n(3248),v=n(8818),O=n(5942),P=n(5171),G=n(313),K=n(2565);const oe=(n.d(Jn={},{default:()=>V8()}),Jn);var Jn,ue=n(2954),pe=n(2372),ye=n(7504),Ue=n(9725),xe=function(nn){var Jn;return(0,v.default)(nn).call(nn,"_**[]")<0?nn:(0,O.default)(Jn=nn.split("_**[]")[0]).call(Jn)},ke=function(nn){return"-d "===nn||/^[_\/-]/g.test(nn)?nn:"'"+nn.replace(/'/g,"'\\''")+"'"},we=function(nn){return"-d "===(nn=nn.replace(/\^/g,"^^").replace(/\\"/g,'\\\\"').replace(/"/g,'""').replace(/\n/g,"^\n"))?nn.replace(/-d /g,"-d ^\n"):/^[_\/-]/g.test(nn)?nn:'"'+nn+'"'},Z=function(nn){return"-d "===nn?nn:/\n/.test(nn)?'@"\n'+nn.replace(/"/g,'\\"').replace(/`/g,"``").replace(/\$/,"`$")+'\n"@':/^[_\/-]/g.test(nn)?nn:"'"+nn.replace(/"/g,'""').replace(/'/g,"''")+"'"},Dt=function(nn,Jn,zn){var Zr=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",$r=!1,ui="",gi=function(){for(var Lt=arguments.length,cr=new Array(Lt),Yr=0;Yr<Lt;Yr++)cr[Yr]=arguments[Yr];return ui+=" "+(0,K.default)(cr).call(cr,Jn).join(" ")},Un=function(){for(var Lt=arguments.length,cr=new Array(Lt),Yr=0;Yr<Lt;Yr++)cr[Yr]=arguments[Yr];return ui+=(0,K.default)(cr).call(cr,Jn).join(" ")},lr=function(){return ui+=" ".concat(zn)},ar=function(){var cr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return ui+=(0,oe.default)("  ").call("  ",cr)},Cr=nn.get("headers");if(ui+="curl"+Zr,nn.has("curlOptions")&&gi.apply(void 0,(0,o.default)(nn.get("curlOptions"))),gi("-X",nn.get("method")),lr(),ar(),Un("".concat(nn.get("url"))),Cr&&Cr.size){var Wn,ai,ho=(0,_.default)((0,ue.default)(Wn=nn.get("headers")).call(Wn));try{for(ho.s();!(ai=ho.n()).done;){var Yi,lo=ai.value;lr(),ar();var pi=(0,l.default)(lo,2),Kn=pi[0],Nn=pi[1];Un("-H",(0,P.default)(Yi="".concat(Kn,": ")).call(Yi,Nn)),$r=$r||/^content-type$/i.test(Kn)&&/^multipart\/form-data$/i.test(Nn)}}catch(Lt){ho.e(Lt)}finally{ho.f()}}var _i,Zi=nn.get("body");if(Zi)if($r&&(0,pe.default)(_i=["POST","PUT","PATCH"]).call(_i,nn.get("method"))){var So,us=(0,_.default)(Zi.entrySeq());try{for(us.s();!(So=us.n()).done;){var Zo,pa,va,qi=(0,l.default)(So.value,2),$o=qi[1],rt=xe(qi[0]);lr(),ar(),Un("-F"),gi($o instanceof ye.Z.File?(0,P.default)(Zo=(0,P.default)(pa="".concat(rt,"=@")).call(pa,$o.name)).call(Zo,$o.type?";type=".concat($o.type):""):(0,P.default)(va="".concat(rt,"=")).call(va,$o))}}catch(Lt){us.e(Lt)}finally{us.f()}}else if(Zi instanceof ye.Z.File)lr(),ar(),Un("--data-binary '@".concat(Zi.name,"'"));else{lr(),ar(),Un("-d ");var kt=Zi;Ue.Map.isMap(kt)?Un(function Ft(nn){var Jn,zn=[],Zr=(0,_.default)(nn.get("body").entrySeq());try{for(Zr.s();!(Jn=Zr.n()).done;){var $r,ui,gi,Un=(0,l.default)(Jn.value,2),ar=Un[1],Cr=xe(Un[0]);zn.push(ar instanceof ye.Z.File?(0,P.default)($r=(0,P.default)(ui='  "'.concat(Cr,'": {\n    "name": "')).call(ui,ar.name,'"')).call($r,ar.type?',\n    "type": "'.concat(ar.type,'"'):"","\n  }"):(0,P.default)(gi='  "'.concat(Cr,'": ')).call(gi,(0,G.default)(ar,null,2).replace(/(\r\n|\r|\n)/g,"\n  ")))}}catch(Wn){Zr.e(Wn)}finally{Zr.f()}return"{\n".concat(zn.join(",\n"),"\n}")}(nn)):("string"!=typeof kt&&(kt=(0,G.default)(kt)),Un(kt))}else Zi||"POST"!==nn.get("method")||(lr(),ar(),Un("-d ''"));return ui},Yt=function(nn){return Dt(nn,Z,"`\n",".exe")},ln=function(nn){return Dt(nn,ke,"\\\n")},$n=function(nn){return Dt(nn,we,"^\n")}},6575:(t,i,n)=>{n.r(i),n.d(i,{default:()=>v});var o=n(4624),l=n(4669),_=n(4206);const v=function(){return{components:{RequestSnippets:_.default},fn:o,statePlugins:{requestSnippets:{selectors:l}}}}},4206:(t,i,n)=>{n.r(i),n.d(i,{default:()=>Ue});var o=n(9334),l=n(6145),_=n(8898),v=n(29),O=n(2565),P=n(810),G=(n(5053),n(9908)),K=n(7068),oe=n(9874),ue=n(471),pe={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(250, 250, 250)",paddingBottom:"0",paddingTop:"0",border:"1px solid rgb(51, 51, 51)",borderRadius:"4px 4px 0 0",boxShadow:"none",borderBottom:"none"},ye={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(51, 51, 51)",boxShadow:"none",border:"1px solid rgb(51, 51, 51)",paddingBottom:"0",paddingTop:"0",borderRadius:"4px 4px 0 0",marginTop:"-5px",marginRight:"-5px",marginLeft:"-5px",zIndex:"9999",borderBottom:"none"};const Ue=function(xe){var ke,we,Z=xe.request,Ft=xe.requestSnippetsSelectors,Dt=xe.getConfigs,Yt=(0,K.default)(Dt)?Dt():null,ln=!1!==(0,G.default)(Yt,"syntaxHighlight")&&(0,G.default)(Yt,"syntaxHighlight.activated",!0),$n=(0,P.useRef)(null),nn=(0,P.useState)(null===(ke=Ft.getSnippetGenerators())||void 0===ke?void 0:ke.keySeq().first()),Jn=(0,o.default)(nn,2),zn=Jn[0],Zr=Jn[1],$r=(0,P.useState)(Ft?.getDefaultExpanded()),ui=(0,o.default)($r,2),gi=ui[0],Un=ui[1];(0,P.useEffect)(function(){},[]),(0,P.useEffect)(function(){var lo,pi=(0,l.default)(lo=(0,_.default)($n.current.childNodes)).call(lo,function(Kn){var Nn;return!!Kn.nodeType&&(null===(Nn=Kn.classList)||void 0===Nn?void 0:Nn.contains("curl-command"))});return(0,v.default)(pi).call(pi,function(Kn){return Kn.addEventListener("mousewheel",ho,{passive:!1})}),function(){(0,v.default)(pi).call(pi,function(Kn){return Kn.removeEventListener("mousewheel",ho)})}},[Z]);var lr=Ft.getSnippetGenerators(),ar=lr.get(zn),Cr=ar.get("fn")(Z),Wn=function(){Un(!gi)},ai=function(lo){return lo===zn?ye:pe},ho=function(lo){var pi=lo.target,Kn=lo.deltaY,Nn=pi.scrollHeight,_i=pi.offsetHeight,Zi=pi.scrollTop;Nn>_i&&(0===Zi&&Kn<0||_i+Zi>=Nn&&Kn>0)&&lo.preventDefault()},Yi=ln?P.default.createElement(ue.d3,{language:ar.get("syntax"),className:"curl microlight",style:(0,ue.C2)((0,G.default)(Yt,"syntaxHighlight.theme"))},Cr):P.default.createElement("textarea",{readOnly:!0,className:"curl",value:Cr});return P.default.createElement("div",{className:"request-snippets",ref:$n},P.default.createElement("div",{style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"center",marginBottom:"15px"}},P.default.createElement("h4",{onClick:function(){return Wn()},style:{cursor:"pointer"}},"Snippets"),P.default.createElement("button",{onClick:function(){return Wn()},style:{border:"none",background:"none"},title:gi?"Collapse operation":"Expand operation"},P.default.createElement("svg",{className:"arrow",width:"10",height:"10"},P.default.createElement("use",{href:gi?"#large-arrow-down":"#large-arrow",xlinkHref:gi?"#large-arrow-down":"#large-arrow"})))),gi&&P.default.createElement("div",{className:"curl-command"},P.default.createElement("div",{style:{paddingLeft:"15px",paddingRight:"10px",width:"100%",display:"flex"}},(0,O.default)(we=lr.entrySeq()).call(we,function(lo){var pi=(0,o.default)(lo,2),Kn=pi[0],Nn=pi[1];return P.default.createElement("div",{style:ai(Kn),className:"btn",key:Kn,onClick:function(){var _i;zn!==(_i=Kn)&&Zr(_i)}},P.default.createElement("h4",{style:Kn===zn?{color:"white"}:{}},Nn.get("title")))})),P.default.createElement("div",{className:"copy-to-clipboard"},P.default.createElement(oe.CopyToClipboard,{text:Cr},P.default.createElement("button",null))),P.default.createElement("div",null,Yi)))}},4669:(t,i,n)=>{n.r(i),n.d(i,{getGenerators:()=>G,getSnippetGenerators:()=>K,getActiveLanguage:()=>oe,getDefaultExpanded:()=>ue});var o=n(6145),l=n(2372),_=n(2565),v=n(8639),O=n(9725),P=function(pe){return pe||(0,O.Map)()},G=(0,v.createSelector)(P,function(pe){var ye=pe.get("languages"),Ue=pe.get("generators",(0,O.Map)());return!ye||ye.isEmpty()?Ue:(0,o.default)(Ue).call(Ue,function(xe,ke){return(0,l.default)(ye).call(ye,ke)})}),K=function(pe){return function(ye){var Ue,xe,ke=ye.fn;return(0,o.default)(Ue=(0,_.default)(xe=G(pe)).call(xe,function(we,Z){var Ft=ke["requestSnippetGenerator_".concat(Z)];return"function"!=typeof Ft?null:we.set("fn",Ft)})).call(Ue,function(we){return we})}},oe=(0,v.createSelector)(P,function(pe){return pe.get("activeLanguage")}),ue=(0,v.createSelector)(P,function(pe){return pe.get("defaultExpanded")})},6195:(t,i,n)=>{n.r(i),n.d(i,{ErrorBoundary:()=>oe,default:()=>ue});var o=n(7344),l=n(8656),_=n(9972),v=n(5416),O=n(5171),P=(n(5053),n(810)),G=n(6189),K=n(9403),oe=function(pe){(0,_.default)(Ue,pe);var ye=(0,v.default)(Ue);function Ue(){var xe,ke;(0,o.default)(this,Ue);for(var we=arguments.length,Z=new Array(we),Ft=0;Ft<we;Ft++)Z[Ft]=arguments[Ft];return(ke=ye.call.apply(ye,(0,O.default)(xe=[this]).call(xe,Z))).state={hasError:!1,error:null},ke}return(0,l.default)(Ue,[{key:"componentDidCatch",value:function(xe,ke){this.props.fn.componentDidCatch(xe,ke)}},{key:"render",value:function(){var xe=this.props,we=xe.targetName,Z=xe.children;if(this.state.hasError){var Ft=(0,xe.getComponent)("Fallback");return P.default.createElement(Ft,{name:we})}return Z}}],[{key:"getDerivedStateFromError",value:function(xe){return{hasError:!0,error:xe}}}]),Ue}(P.Component);oe.defaultProps={targetName:"this component",getComponent:function(){return K.default},fn:{componentDidCatch:G.componentDidCatch},children:null};const ue=oe},9403:(t,i,n)=>{n.r(i),n.d(i,{default:()=>l});var o=n(810);n(5053);const l=function(_){var v=_.name;return o.default.createElement("div",{className:"fallback"},"\u{1f631} ",o.default.createElement("i",null,"Could not render ","t"===v?"this component":v,", see the console."))}},6189:(t,i,n)=>{n.r(i),n.d(i,{componentDidCatch:()=>G,withErrorBoundary:()=>K});var o=n(863),l=n(7344),_=n(8656),v=n(9972),O=n(5416),P=n(810),G=console.error,K=function(oe){return function(ue){var pe,ye=oe(),Ue=ye.getComponent,xe=ye.fn,ke=Ue("ErrorBoundary"),we=xe.getDisplayName(ue),Z=function(Ft){(0,v.default)(Yt,Ft);var Dt=(0,O.default)(Yt);function Yt(){return(0,l.default)(this,Yt),Dt.apply(this,arguments)}return(0,_.default)(Yt,[{key:"render",value:function(){return P.default.createElement(ke,{targetName:we,getComponent:Ue,fn:xe},P.default.createElement(ue,(0,o.default)({},this.props,this.context)))}}]),Yt}(P.Component);return Z.displayName="WithErrorBoundary(".concat(we,")"),(pe=ue).prototype&&pe.prototype.isReactComponent&&(Z.prototype.mapStateToProps=ue.prototype.mapStateToProps),Z}}},8102:(t,i,n)=>{n.r(i),n.d(i,{default:()=>K});var o=n(2691),l=n(5171);const _=(n.d(ue={},{default:()=>W8()}),ue),v=(oe=>{var ue={};return n.d(ue,oe),ue})({default:()=>Q8()});var ue,O=n(6195),P=n(9403),G=n(6189);const K=function(){var oe=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},ue=oe.componentList,pe=void 0===ue?[]:ue,ye=oe.fullOverride,Ue=void 0!==ye&&ye;return function(xe){var ke,we,Z=xe.getSystem,Ft=Ue?pe:(0,l.default)(ke=[]).call(ke,["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper"],(0,o.default)(pe)),Dt=(0,v.default)(Ft,(0,_.default)(we=Array(Ft.length)).call(we,function(Yt,ln){return ln.fn.withErrorBoundary(Yt)}));return{fn:{componentDidCatch:G.componentDidCatch,withErrorBoundary:(0,G.withErrorBoundary)(Z)},components:{ErrorBoundary:O.default,Fallback:P.default},wrapComponents:Dt}}}},2473:(t,i,n)=>{n.r(i),n.d(i,{createXMLExample:()=>ui,inferSchema:()=>$r,memoizedCreateXMLExample:()=>lr,memoizedSampleFromSchema:()=>ar,sampleFromSchema:()=>gi,sampleFromSchemaGeneric:()=>Zr});var o=n(1581),l=n(5171),_=n(8818),v=n(29),O=n(4163),P=n(2372),G=n(9963),K=n(8136),oe=n(1778),ue=n(2565),pe=n(313),ye=n(3479),Ue=n.n(ye);const xe=(n.d(Wn={},{default:()=>X8()}),Wn),ke=(Cr=>{var Wn={};return n.d(Wn,Cr),Wn})({default:()=>eI()});var Wn,we=n(6298),Z=n(8287),Ft={string:function(Cr){return Cr.pattern?function(Wn){try{return new xe.default(Wn).gen()}catch{return"string"}}(Cr.pattern):"string"},string_email:function(){return"user@example.com"},"string_date-time":function(){return(new Date).toISOString()},string_date:function(){return(new Date).toISOString().substring(0,10)},string_uuid:function(){return"3fa85f64-5717-4562-b3fc-2c963f66afa6"},string_hostname:function(){return"example.com"},string_ipv4:function(){return"198.51.100.42"},string_ipv6:function(){return"2001:0db8:5b96:0000:0000:426f:8e17:642a"},number:function(){return 0},number_float:function(){return 0},integer:function(){return 0},boolean:function(Cr){return"boolean"!=typeof Cr.default||Cr.default}},Dt=function(Cr){var Wn,ai=Cr=(0,we.mz)(Cr),ho=ai.type,Yi=ai.format,lo=Ft[(0,l.default)(Wn="".concat(ho,"_")).call(Wn,Yi)]||Ft[ho];return(0,we.Wl)(lo)?lo(Cr):"Unknown Type: "+Cr.type},Yt=function(Cr){return(0,we.XV)(Cr,"$$ref",function(Wn){return"string"==typeof Wn&&(0,_.default)(Wn).call(Wn,"#")>-1})},ln=["maxProperties","minProperties"],$n=["minItems","maxItems"],nn=["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],Jn=["minLength","maxLength"],zn=function Cr(Wn,ai){var ho,Yi,lo,pi=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if((0,v.default)(ho=(0,l.default)(Yi=["example","default","enum","xml","type"]).call(Yi,ln,$n,nn,Jn)).call(ho,function(So){return function(So){void 0===ai[So]&&void 0!==Wn[So]&&(ai[So]=Wn[So])}(So)}),void 0!==Wn.required&&(0,O.default)(Wn.required)&&(void 0!==ai.required&&ai.required.length||(ai.required=[]),(0,v.default)(lo=Wn.required).call(lo,function(So){var us;(0,P.default)(us=ai.required).call(us,So)||ai.required.push(So)})),Wn.properties){ai.properties||(ai.properties={});var Nn=(0,we.mz)(Wn.properties);for(var _i in Nn){var Zi;Object.prototype.hasOwnProperty.call(Nn,_i)&&(!Nn[_i]||!Nn[_i].deprecated)&&(!Nn[_i]||!Nn[_i].readOnly||pi.includeReadOnly)&&(!Nn[_i]||!Nn[_i].writeOnly||pi.includeWriteOnly)&&(ai.properties[_i]||(ai.properties[_i]=Nn[_i],!Wn.required&&(0,O.default)(Wn.required)&&-1!==(0,_.default)(Zi=Wn.required).call(Zi,_i)&&(ai.required?ai.required.push(_i):ai.required=[_i])))}}return Wn.items&&(ai.items||(ai.items={}),ai.items=Cr(Wn.items,ai.items,pi)),ai},Zr=function Cr(Wn){var ai=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},ho=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,Yi=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Wn&&(0,we.Wl)(Wn.toJS)&&(Wn=Wn.toJS());var lo=void 0!==ho||Wn&&void 0!==Wn.example||Wn&&void 0!==Wn.default,pi=!lo&&Wn&&Wn.oneOf&&Wn.oneOf.length>0;if(!lo&&(pi||!lo&&Wn&&Wn.anyOf&&Wn.anyOf.length>0)){var Nn=(0,we.mz)(pi?Wn.oneOf[0]:Wn.anyOf[0]);if(zn(Nn,Wn,ai),!Wn.xml&&Nn.xml&&(Wn.xml=Nn.xml),void 0!==Wn.example&&void 0!==Nn.example)lo=!0;else if(Nn.properties){Wn.properties||(Wn.properties={});var _i=(0,we.mz)(Nn.properties);for(var Zi in _i){var So;Object.prototype.hasOwnProperty.call(_i,Zi)&&(!_i[Zi]||!_i[Zi].deprecated)&&(!_i[Zi]||!_i[Zi].readOnly||ai.includeReadOnly)&&(!_i[Zi]||!_i[Zi].writeOnly||ai.includeWriteOnly)&&(Wn.properties[Zi]||(Wn.properties[Zi]=_i[Zi],!Nn.required&&(0,O.default)(Nn.required)&&-1!==(0,_.default)(So=Nn.required).call(So,Zi)&&(Wn.required?Wn.required.push(Zi):Wn.required=[Zi])))}}}var us,Zo={},pa=Wn||{},va=pa.xml,qi=pa.type,xo=pa.example,$o=pa.properties,rt=pa.additionalProperties,kt=pa.items,Lt=ai.includeReadOnly,cr=ai.includeWriteOnly,Yr=va=va||{},li=Yr.name,eo=Yr.prefix,_a=Yr.namespace,ps={};Yi&&(us=(eo?eo+":":"")+(li=li||"notagname"),_a)&&(Zo[eo?"xmlns:"+eo:"xmlns"]=_a),Yi&&(ps[us]=[]);var Gl=function(fo){return(0,G.default)(fo).call(fo,function(ea){return Object.prototype.hasOwnProperty.call(Wn,ea)})};Wn&&!qi&&($o||rt||Gl(ln)?qi="object":kt||Gl($n)?qi="array":Gl(nn)?(qi="number",Wn.type="number"):lo||Wn.enum||(qi="string",Wn.type="string"));var Ou,Pc,np=function(fo){var ea,xs,Bu,Zl,Hl;if(null!==(null===(ea=Wn)||void 0===ea?void 0:ea.maxItems)&&void 0!==(null===(xs=Wn)||void 0===xs?void 0:xs.maxItems)&&(fo=(0,K.default)(fo).call(fo,0,null===(Hl=Wn)||void 0===Hl?void 0:Hl.maxItems)),null!==(null===(Bu=Wn)||void 0===Bu?void 0:Bu.minItems)&&void 0!==(null===(Zl=Wn)||void 0===Zl?void 0:Zl.minItems))for(var hl=0;fo.length<(null===(ol=Wn)||void 0===ol?void 0:ol.minItems);){var ol;fo.push(fo[hl++%fo.length])}return fo},ou=(0,we.mz)($o),yd=0,kp=function(){return Wn&&null!=Wn.maxProperties&&yd>=Wn.maxProperties},j_=function(fo){return!Wn||null==Wn.maxProperties||!kp()&&(!function(fo){var ea;return!(Wn&&Wn.required&&Wn.required.length&&(0,P.default)(ea=Wn.required).call(ea,fo))}(fo)||Wn.maxProperties-yd-function(){if(!Wn||!Wn.required)return 0;var fo,ea,xs=0;return Yi?(0,v.default)(fo=Wn.required).call(fo,function(Bu){return xs+=void 0===ps[Bu]?0:1}):(0,v.default)(ea=Wn.required).call(ea,function(Bu){var Zl;return xs+=void 0===(null===(Zl=ps[us])||void 0===Zl?void 0:(0,oe.default)(Zl).call(Zl,function(Hl){return void 0!==Hl[Bu]}))?0:1}),Wn.required.length-xs}()>0)};if(Ou=Yi?function(fo){var ea=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(Wn&&ou[fo]){if(ou[fo].xml=ou[fo].xml||{},ou[fo].xml.attribute){var xs=(0,O.default)(ou[fo].enum)?ou[fo].enum[0]:void 0,Bu=ou[fo].example,Zl=ou[fo].default;return void(Zo[ou[fo].xml.name||fo]=void 0!==Bu?Bu:void 0!==Zl?Zl:void 0!==xs?xs:Dt(ou[fo]))}ou[fo].xml.name=ou[fo].xml.name||fo}else ou[fo]||!1===rt||(ou[fo]={xml:{name:fo}});var Hl,hl=Cr(Wn&&ou[fo]||void 0,ai,ea,Yi);j_(fo)&&(yd++,(0,O.default)(hl)?ps[us]=(0,l.default)(Hl=ps[us]).call(Hl,hl):ps[us].push(hl))}:function(fo,ea){j_(fo)&&(ps[fo]=Cr(ou[fo],ai,ea,Yi),yd++)},lo){var Au;if(Au=Yt(void 0!==ho?ho:void 0!==xo?xo:Wn.default),!Yi){if("number"==typeof Au&&"string"===qi)return"".concat(Au);if("string"!=typeof Au||"string"===qi)return Au;try{return JSON.parse(Au)}catch{return Au}}if(Wn||(qi=(0,O.default)(Au)?"array":(0,o.default)(Au)),"array"===qi){if(!(0,O.default)(Au)){if("string"==typeof Au)return Au;Au=[Au]}var hd=Wn?Wn.items:void 0;hd&&(hd.xml=hd.xml||va||{},hd.xml.name=hd.xml.name||va.name);var n_=(0,ue.default)(Au).call(Au,function(fo){return Cr(hd,ai,fo,Yi)});return n_=np(n_),va.wrapped?(ps[us]=n_,(0,ke.default)(Zo)||ps[us].push({_attr:Zo})):ps=n_,ps}if("object"===qi){if("string"==typeof Au)return Au;for(var co in Au)Object.prototype.hasOwnProperty.call(Au,co)&&(Wn&&ou[co]&&ou[co].readOnly&&!Lt||Wn&&ou[co]&&ou[co].writeOnly&&!cr||(Wn&&ou[co]&&ou[co].xml&&ou[co].xml.attribute?Zo[ou[co].xml.name||co]=Au[co]:Ou(co,Au[co])));return(0,ke.default)(Zo)||ps[us].push({_attr:Zo}),ps}return ps[us]=(0,ke.default)(Zo)?Au:[{_attr:Zo},Au],ps}if("object"===qi){for(var xr in ou)Object.prototype.hasOwnProperty.call(ou,xr)&&(ou[xr]&&ou[xr].deprecated||ou[xr]&&ou[xr].readOnly&&!Lt||ou[xr]&&ou[xr].writeOnly&&!cr||Ou(xr));if(Yi&&Zo&&ps[us].push({_attr:Zo}),kp())return ps;if(!0===rt)Yi?ps[us].push({additionalProp:"Anything can be here"}):ps.additionalProp1={},yd++;else if(rt){var ki=(0,we.mz)(rt),Co=Cr(ki,ai,void 0,Yi);if(Yi&&ki.xml&&ki.xml.name&&"notagname"!==ki.xml.name)ps[us].push(Co);else for(var os=null!=Wn.minProperties&&yd<Wn.minProperties?Wn.minProperties-yd:3,Ss=1;Ss<=os;Ss++){if(kp())return ps;if(Yi){var Rs={};Rs["additionalProp"+Ss]=Co.notagname,ps[us].push(Rs)}else ps["additionalProp"+Ss]=Co;yd++}}return ps}if("array"===qi){if(!kt)return;var ks,Ua,Dl;if(Yi&&(kt.xml=kt.xml||(null===(Ua=Wn)||void 0===Ua?void 0:Ua.xml)||{},kt.xml.name=kt.xml.name||va.name),(0,O.default)(kt.anyOf))ks=(0,ue.default)(Dl=kt.anyOf).call(Dl,function(fo){return Cr(zn(kt,fo,ai),ai,void 0,Yi)});else if((0,O.default)(kt.oneOf)){var uc;ks=(0,ue.default)(uc=kt.oneOf).call(uc,function(fo){return Cr(zn(kt,fo,ai),ai,void 0,Yi)})}else{if(!(!Yi||Yi&&va.wrapped))return Cr(kt,ai,void 0,Yi);ks=[Cr(kt,ai,void 0,Yi)]}return ks=np(ks),Yi&&va.wrapped?(ps[us]=ks,(0,ke.default)(Zo)||ps[us].push({_attr:Zo}),ps):ks}if(Wn&&(0,O.default)(Wn.enum))Pc=(0,we.AF)(Wn.enum)[0];else{if(!Wn)return;if("number"==typeof(Pc=Dt(Wn))){var Sr=Wn.minimum;null!=Sr&&(Wn.exclusiveMinimum&&Sr++,Pc=Sr);var oo=Wn.maximum;null!=oo&&(Wn.exclusiveMaximum&&oo--,Pc=oo)}if("string"==typeof Pc&&(null!=Wn.maxLength&&(Pc=(0,K.default)(Pc).call(Pc,0,Wn.maxLength)),null!=Wn.minLength))for(var Ns=0;Pc.length<Wn.minLength;)Pc+=Pc[Ns++%Pc.length]}if("file"!==qi)return Yi?(ps[us]=(0,ke.default)(Zo)?Pc:[{_attr:Zo},Pc],ps):Pc},$r=function(Cr){return Cr.schema&&(Cr=Cr.schema),Cr.properties&&(Cr.type="object"),Cr},ui=function(Cr,Wn,ai){var ho=Zr(Cr,Wn,ai,!0);if(ho)return"string"==typeof ho?ho:Ue()(ho,{declaration:!0,indent:"\t"})},gi=function(Cr,Wn,ai){return Zr(Cr,Wn,ai,!1)},Un=function(Cr,Wn,ai){return[Cr,(0,pe.default)(Wn),(0,pe.default)(ai)]},lr=(0,Z.Z)(ui,Un),ar=(0,Z.Z)(gi,Un)},8883:(t,i,n)=>{n.r(i),n.d(i,{default:()=>l});var o=n(2473);function l(){return{fn:o}}},1737:(t,i,n)=>{n.r(i),n.d(i,{CLEAR_REQUEST:()=>Nn,CLEAR_RESPONSE:()=>Kn,CLEAR_VALIDATE_PARAMS:()=>_i,LOG_REQUEST:()=>pi,SET_MUTATED_REQUEST:()=>lo,SET_REQUEST:()=>Yi,SET_RESPONSE:()=>ho,SET_SCHEME:()=>Zo,UPDATE_EMPTY_PARAM_INCLUSION:()=>Wn,UPDATE_JSON:()=>ar,UPDATE_OPERATION_META_VALUE:()=>Zi,UPDATE_PARAM:()=>Cr,UPDATE_RESOLVED:()=>So,UPDATE_RESOLVED_SUBTREE:()=>us,UPDATE_SPEC:()=>Un,UPDATE_URL:()=>lr,VALIDATE_PARAMS:()=>ai,changeConsumesValue:()=>Pc,changeParam:()=>li,changeParamByIdentity:()=>eo,changeProducesValue:()=>np,clearRequest:()=>hd,clearResponse:()=>Au,clearValidateParams:()=>Ou,execute:()=>j_,executeRequest:()=>S_,invalidateResolvedSubtreeCache:()=>ps,logRequest:()=>Y_,parseToJson:()=>$o,requestResolvedSubtree:()=>Yr,resolveSpec:()=>kt,setMutatedRequest:()=>kp,setRequest:()=>yd,setResponse:()=>ou,setScheme:()=>n_,updateEmptyParamInclusion:()=>Gl,updateJsonSpec:()=>xo,updateResolved:()=>va,updateResolvedSubtree:()=>_a,updateSpec:()=>pa,updateUrl:()=>qi,validateParams:()=>Fl});var o=n(1013),l=n(302);const _=(n.d(xr={},{default:()=>tI}),xr);var xr,v=n(1581);const O=(co=>{var xr={};return n.d(xr,co),xr})({default:()=>rI()});var P=n(4163),G=n(2565),K=n(3978),oe=n.n(K),ue=n(6785),pe=n(7930);const ye=(co=>{var xr={};return n.d(xr,co),xr})({default:()=>oI()});var Ue=n(6145),xe=n(374),ke=n(8818),we=n(29),Z=n(5171),Ft=n(2740),Dt=n(7512);const Yt=(co=>{var xr={};return n.d(xr,co),xr})({default:()=>aI()});var ln=n(626),$n=n(9725),nn=n(8900),Jn=n(8518);const zn=(co=>{var xr={};return n.d(xr,co),xr})({default:()=>uI()}),Zr=(co=>{var xr={};return n.d(xr,co),xr})({default:()=>dI()}),$r=(co=>{var xr={};return n.d(xr,co),xr})({default:()=>pI()});var ui=n(6298),gi=["path","method"],Un="spec_update_spec",lr="spec_update_url",ar="spec_update_json",Cr="spec_update_param",Wn="spec_update_empty_param_inclusion",ai="spec_validate_param",ho="spec_set_response",Yi="spec_set_request",lo="spec_set_mutated_request",pi="spec_log_request",Kn="spec_clear_response",Nn="spec_clear_request",_i="spec_clear_validate_param",Zi="spec_update_operation_meta_value",So="spec_update_resolved",us="spec_update_resolved_subtree",Zo="set_scheme";function pa(co){var xr,ki=(xr=co,(0,zn.default)(xr)?xr:"").replace(/\t/g,"  ");if("string"==typeof co)return{type:Un,payload:ki}}function va(co){return{type:So,payload:co}}function qi(co){return{type:lr,payload:co}}function xo(co){return{type:ar,payload:co}}var $o=function(co){return function(xr){var ki=xr.specActions,os=xr.errActions,Ss=xr.specSelectors.specStr,Rs=null;try{co=co||Ss(),os.clear({source:"parser"}),Rs=ln.default.load(co,{schema:ln.JSON_SCHEMA})}catch(ks){return console.error(ks),os.newSpecErr({source:"parser",level:"error",message:ks.reason,line:ks.mark&&ks.mark.line?ks.mark.line+1:void 0})}return Rs&&"object"===(0,v.default)(Rs)?ki.updateJsonSpec(Rs):{}}},rt=!1,kt=function(co,xr){return function(ki){var Co=ki.specActions,os=ki.specSelectors,Ss=ki.errActions,Rs=ki.fn,ks=Rs.fetch,Ua=Rs.resolve,Dl=Rs.AST,uc=void 0===Dl?{}:Dl,Sr=ki.getConfigs;rt||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),rt=!0);var oo=Sr(),Ns=oo.modelPropertyMacro,fo=oo.parameterMacro,ea=oo.requestInterceptor,xs=oo.responseInterceptor;void 0===co&&(co=os.specJson()),void 0===xr&&(xr=os.url());var Bu=uc.getLineNumberForPath?uc.getLineNumberForPath:function(){},Zl=os.specStr();return Ua({fetch:ks,spec:co,baseDoc:xr,modelPropertyMacro:Ns,parameterMacro:fo,requestInterceptor:ea,responseInterceptor:xs}).then(function(Hl){var hl=Hl.spec,ol=Hl.errors;if(Ss.clear({type:"thrown"}),(0,P.default)(ol)&&ol.length>0){var cc=(0,G.default)(ol).call(ol,function(Gu){return console.error(Gu),Gu.line=Gu.fullPath?Bu(Zl,Gu.fullPath):null,Gu.path=Gu.fullPath?Gu.fullPath.join("."):null,Gu.level="error",Gu.type="thrown",Gu.source="resolver",oe()(Gu,"message",{enumerable:!0,value:Gu.message}),Gu});Ss.newThrownErrBatch(cc)}return Co.updateResolved(hl)})}},Lt=[],cr=(0,Zr.default)((0,_.default)(O.default.mark(function co(){var xr,ki,Co,os,Ss,Rs,ks,Ua,Dl,uc,Sr,oo,Ns,fo,ea,xs,Bu,Zl;return O.default.wrap(function(Hl){for(;;)switch(Hl.prev=Hl.next){case 0:if(xr=Lt.system){Hl.next=4;break}return console.error("debResolveSubtrees: don't have a system to operate on, aborting."),Hl.abrupt("return");case 4:if(ki=xr.errActions,Co=xr.errSelectors,Rs=(os=xr.fn).fetch,Ua=void 0===(ks=os.AST)?{}:ks,Dl=xr.specSelectors,uc=xr.specActions,Ss=os.resolveSubtree){Hl.next=8;break}return console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing."),Hl.abrupt("return");case 8:return Sr=Ua.getLineNumberForPath?Ua.getLineNumberForPath:function(){},oo=Dl.specStr(),Ns=xr.getConfigs(),fo=Ns.modelPropertyMacro,ea=Ns.parameterMacro,xs=Ns.requestInterceptor,Bu=Ns.responseInterceptor,Hl.prev=11,Hl.next=14,(0,ue.default)(Lt).call(Lt,function(){var hl=(0,_.default)(O.default.mark(function ol(cc,Gu){var cf,Ep,su,Mf,z_,Sp,Eh,b_,wm;return O.default.wrap(function(yo){for(;;)switch(yo.prev=yo.next){case 0:return yo.next=2,cc;case 2:return Ep=(cf=yo.sent).resultMap,su=cf.specWithCurrentSubtrees,yo.next=7,Ss(su,Gu,{baseDoc:Dl.url(),modelPropertyMacro:fo,parameterMacro:ea,requestInterceptor:xs,responseInterceptor:Bu});case 7:if(z_=(Mf=yo.sent).errors,Sp=Mf.spec,Co.allErrors().size&&ki.clearBy(function($d){var Pm;return"thrown"!==$d.get("type")||"resolver"!==$d.get("source")||!(0,pe.default)(Pm=$d.get("fullPath")).call(Pm,function(lg,gm){return lg===Gu[gm]||void 0===Gu[gm]})}),(0,P.default)(z_)&&z_.length>0&&(Eh=(0,G.default)(z_).call(z_,function($d){return $d.line=$d.fullPath?Sr(oo,$d.fullPath):null,$d.path=$d.fullPath?$d.fullPath.join("."):null,$d.level="error",$d.type="thrown",$d.source="resolver",oe()($d,"message",{enumerable:!0,value:$d.message}),$d}),ki.newThrownErrBatch(Eh)),!Sp||!Dl.isOAS3()||"components"!==Gu[0]||"securitySchemes"!==Gu[1]){yo.next=15;break}return yo.next=15,ye.default.all((0,G.default)(b_=(0,Ue.default)(wm=(0,xe.default)(Sp)).call(wm,function($d){return"openIdConnect"===$d.type})).call(b_,function(){var $d=(0,_.default)(O.default.mark(function Pm(lg){var gm,Fg;return O.default.wrap(function(r_){for(;;)switch(r_.prev=r_.next){case 0:return gm={url:lg.openIdConnectUrl,requestInterceptor:xs,responseInterceptor:Bu},r_.prev=1,r_.next=4,Rs(gm);case 4:(Fg=r_.sent)instanceof Error||Fg.status>=400?console.error(Fg.statusText+" "+gm.url):lg.openIdConnectData=JSON.parse(Fg.text),r_.next=11;break;case 8:r_.prev=8,r_.t0=r_.catch(1),console.error(r_.t0);case 11:case"end":return r_.stop()}},Pm,null,[[1,8]])}));return function(Pm){return $d.apply(this,arguments)}}()));case 15:return(0,$r.default)(Ep,Gu,Sp),(0,$r.default)(su,Gu,Sp),yo.abrupt("return",{resultMap:Ep,specWithCurrentSubtrees:su});case 18:case"end":return yo.stop()}},ol)}));return function(ol,cc){return hl.apply(this,arguments)}}(),ye.default.resolve({resultMap:(Dl.specResolvedSubtree([])||(0,$n.Map)()).toJS(),specWithCurrentSubtrees:Dl.specJson().toJS()}));case 14:Zl=Hl.sent,delete Lt.system,Lt=[],Hl.next=22;break;case 19:Hl.prev=19,Hl.t0=Hl.catch(11),console.error(Hl.t0);case 22:uc.updateResolvedSubtree([],Zl.resultMap);case 23:case"end":return Hl.stop()}},co,null,[[11,19]])})),35),Yr=function(co){return function(xr){var ki;(0,ke.default)(ki=(0,G.default)(Lt).call(Lt,function(Co){return Co.join("@@")})).call(ki,co.join("@@"))>-1||(Lt.push(co),Lt.system=xr,cr())}};function li(co,xr,ki,Co,os){return{type:Cr,payload:{path:co,value:Co,paramName:xr,paramIn:ki,isXml:os}}}function eo(co,xr,ki,Co){return{type:Cr,payload:{path:co,param:xr,value:ki,isXml:Co}}}var _a=function(co,xr){return{type:us,payload:{path:co,value:xr}}},ps=function(){return{type:us,payload:{path:[],value:(0,$n.Map)()}}},Fl=function(co,xr){return{type:ai,payload:{pathMethod:co,isOAS3:xr}}},Gl=function(co,xr,ki,Co){return{type:Wn,payload:{pathMethod:co,paramName:xr,paramIn:ki,includeEmptyValue:Co}}};function Ou(co){return{type:_i,payload:{pathMethod:co}}}function Pc(co,xr){return{type:Zi,payload:{path:co,value:xr,key:"consumes_value"}}}function np(co,xr){return{type:Zi,payload:{path:co,value:xr,key:"produces_value"}}}var ou=function(co,xr,ki){return{payload:{path:co,method:xr,res:ki},type:ho}},yd=function(co,xr,ki){return{payload:{path:co,method:xr,req:ki},type:Yi}},kp=function(co,xr,ki){return{payload:{path:co,method:xr,req:ki},type:lo}},Y_=function(co){return{payload:co,type:pi}},S_=function(co){return function(xr){var ki,Co,os=xr.fn,Ss=xr.specActions,Rs=xr.specSelectors,Ua=xr.oas3Selectors,Dl=co.pathName,uc=co.method,Sr=co.operation,oo=(0,xr.getConfigs)(),Ns=oo.requestInterceptor,fo=oo.responseInterceptor,ea=Sr.toJS();if(Sr&&Sr.get("parameters")&&(0,we.default)(ki=(0,Ue.default)(Co=Sr.get("parameters")).call(Co,function(su){return su&&!0===su.get("allowEmptyValue")})).call(ki,function(su){if(Rs.parameterInclusionSettingFor([Dl,uc],su.get("name"),su.get("in"))){co.parameters=co.parameters||{};var Mf=(0,ui.cz)(su,co.parameters);(!Mf||Mf&&0===Mf.size)&&(co.parameters[su.get("name")]="")}}),co.contextUrl=(0,nn.default)(Rs.url()).toString(),ea&&ea.operationId?co.operationId=ea.operationId:ea&&Dl&&uc&&(co.operationId=os.opId(ea,Dl,uc)),Rs.isOAS3()){var xs,Bu=(0,Z.default)(xs="".concat(Dl,":")).call(xs,uc);co.server=Ua.selectedServer(Bu)||Ua.selectedServer();var Zl=Ua.serverVariables({server:co.server,namespace:Bu}).toJS(),Hl=Ua.serverVariables({server:co.server}).toJS();co.serverVariables=(0,Ft.default)(Zl).length?Zl:Hl,co.requestContentType=Ua.requestContentType(Dl,uc),co.responseContentType=Ua.responseContentType(Dl,uc)||"*/*";var hl,ol=Ua.requestBodyValue(Dl,uc),cc=Ua.requestBodyInclusionSetting(Dl,uc);co.requestBody=ol&&ol.toJS?(0,Ue.default)(hl=(0,G.default)(ol).call(ol,function(su){return $n.Map.isMap(su)?su.get("value"):su})).call(hl,function(su,Mf){return((0,P.default)(su)?0!==su.length:!(0,ui.O2)(su))||cc.get(Mf)}).toJS():ol}var Gu=(0,Dt.default)({},co);Gu=os.buildRequest(Gu),Ss.setRequest(co.pathName,co.method,Gu);var su,cf=(su=(0,_.default)(O.default.mark(function Mf(z_){var Sp,Eh;return O.default.wrap(function(b_){for(;;)switch(b_.prev=b_.next){case 0:return b_.next=2,Ns.apply(void 0,[z_]);case 2:return Eh=(0,Dt.default)({},Sp=b_.sent),Ss.setMutatedRequest(co.pathName,co.method,Eh),b_.abrupt("return",Sp);case 6:case"end":return b_.stop()}},Mf)})),function(Mf){return su.apply(this,arguments)});co.requestInterceptor=cf,co.responseInterceptor=fo;var Ep=(0,Yt.default)();return os.execute(co).then(function(su){su.duration=(0,Yt.default)()-Ep,Ss.setResponse(co.pathName,co.method,su)}).catch(function(su){"Failed to fetch"===su.message&&(su.name="",su.message='**Failed to fetch.**  \n**Possible Reasons:** \n  - CORS \n  - Network Failure \n  - URL scheme must be "http" or "https" for CORS request.'),Ss.setResponse(co.pathName,co.method,{error:!0,err:(0,Jn.serializeError)(su)})})}},j_=function(){var co=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},xr=co.path,ki=co.method,Co=(0,l.default)(co,gi);return function(os){var Ss=os.fn.fetch,Rs=os.specSelectors,ks=os.specActions,Ua=Rs.specJsonWithResolvedSubtrees().toJS(),Dl=Rs.operationScheme(xr,ki),uc=Rs.contentTypeValues([xr,ki]).toJS(),Sr=uc.requestContentType,oo=uc.responseContentType,Ns=/xml/i.test(Sr),fo=Rs.parameterValues([xr,ki],Ns).toJS();return ks.executeRequest((0,o.default)((0,o.default)({},Co),{},{fetch:Ss,spec:Ua,pathName:xr,method:ki,parameters:fo,requestContentType:Sr,scheme:Dl,responseContentType:oo}))}};function Au(co,xr){return{type:Kn,payload:{path:co,method:xr}}}function hd(co,xr){return{type:Nn,payload:{path:co,method:xr}}}function n_(co,xr,ki){return{type:Zo,payload:{scheme:co,path:xr,method:ki}}}},7038:(t,i,n)=>{n.r(i),n.d(i,{default:()=>O});var o=n(32),l=n(1737),_=n(3881),v=n(7508);function O(){return{statePlugins:{spec:{wrapActions:v,reducers:o.default,actions:l,selectors:_}}}}},32:(t,i,n)=>{n.r(i),n.d(i,{default:()=>Ue});var o,l=n(775),_=n(2691),v=n(5171),O=n(6785),P=n(2565),G=n(7512),K=n(9725),oe=n(6298),ue=n(7504),pe=n(3881),ye=n(1737);const Ue=((0,l.default)(o={},ye.UPDATE_SPEC,function(xe,ke){return"string"==typeof ke.payload?xe.set("spec",ke.payload):xe}),(0,l.default)(o,ye.UPDATE_URL,function(xe,ke){return xe.set("url",ke.payload+"")}),(0,l.default)(o,ye.UPDATE_JSON,function(xe,ke){return xe.set("json",(0,oe.oG)(ke.payload))}),(0,l.default)(o,ye.UPDATE_RESOLVED,function(xe,ke){return xe.setIn(["resolved"],(0,oe.oG)(ke.payload))}),(0,l.default)(o,ye.UPDATE_RESOLVED_SUBTREE,function(xe,ke){var we,Z=ke.payload,Ft=Z.value,Dt=Z.path;return xe.setIn((0,v.default)(we=["resolvedSubtrees"]).call(we,(0,_.default)(Dt)),(0,oe.oG)(Ft))}),(0,l.default)(o,ye.UPDATE_PARAM,function(xe,ke){var we,Z,Ft=ke.payload,Dt=Ft.path,Yt=Ft.paramName,ln=Ft.paramIn,$n=Ft.param,nn=Ft.value,Jn=Ft.isXml,zn=$n?(0,oe.V9)($n):(0,v.default)(we="".concat(ln,".")).call(we,Yt),Zr=Jn?"value_xml":"value";return xe.setIn((0,v.default)(Z=["meta","paths"]).call(Z,(0,_.default)(Dt),["parameters",zn,Zr]),nn)}),(0,l.default)(o,ye.UPDATE_EMPTY_PARAM_INCLUSION,function(xe,ke){var we,Z,Ft=ke.payload,Dt=Ft.pathMethod,Yt=Ft.paramName,ln=Ft.paramIn,$n=Ft.includeEmptyValue;if(!Yt||!ln)return console.warn("Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey."),xe;var nn=(0,v.default)(we="".concat(ln,".")).call(we,Yt);return xe.setIn((0,v.default)(Z=["meta","paths"]).call(Z,(0,_.default)(Dt),["parameter_inclusions",nn]),$n)}),(0,l.default)(o,ye.VALIDATE_PARAMS,function(xe,ke){var we,Z,Ft=ke.payload,Dt=Ft.pathMethod,Yt=Ft.isOAS3,ln=(0,pe.specJsonWithResolvedSubtrees)(xe).getIn((0,v.default)(we=["paths"]).call(we,(0,_.default)(Dt))),$n=(0,pe.parameterValues)(xe,Dt).toJS();return xe.updateIn((0,v.default)(Z=["meta","paths"]).call(Z,(0,_.default)(Dt),["parameters"]),(0,K.fromJS)({}),function(nn){var Jn;return(0,O.default)(Jn=ln.get("parameters",(0,K.List)())).call(Jn,function(zn,Zr){var $r=(0,oe.cz)(Zr,$n),ui=(0,pe.parameterInclusionSettingFor)(xe,Dt,Zr.get("name"),Zr.get("in")),gi=(0,oe.Ik)(Zr,$r,{bypassRequiredCheck:ui,isOAS3:Yt});return zn.setIn([(0,oe.V9)(Zr),"errors"],(0,K.fromJS)(gi))},nn)})}),(0,l.default)(o,ye.CLEAR_VALIDATE_PARAMS,function(xe,ke){var we,Z=ke.payload.pathMethod;return xe.updateIn((0,v.default)(we=["meta","paths"]).call(we,(0,_.default)(Z),["parameters"]),(0,K.fromJS)([]),function(Ft){return(0,P.default)(Ft).call(Ft,function(Dt){return Dt.set("errors",(0,K.fromJS)([]))})})}),(0,l.default)(o,ye.SET_RESPONSE,function(xe,ke){var we,Z=ke.payload,Ft=Z.res,Dt=Z.path,Yt=Z.method;(we=Ft.error?(0,G.default)({error:!0,name:Ft.err.name,message:Ft.err.message,statusCode:Ft.err.statusCode},Ft.err.response):Ft).headers=we.headers||{};var ln=xe.setIn(["responses",Dt,Yt],(0,oe.oG)(we));return ue.Z.Blob&&Ft.data instanceof ue.Z.Blob&&(ln=ln.setIn(["responses",Dt,Yt,"text"],Ft.data)),ln}),(0,l.default)(o,ye.SET_REQUEST,function(xe,ke){var we=ke.payload;return xe.setIn(["requests",we.path,we.method],(0,oe.oG)(we.req))}),(0,l.default)(o,ye.SET_MUTATED_REQUEST,function(xe,ke){var we=ke.payload;return xe.setIn(["mutatedRequests",we.path,we.method],(0,oe.oG)(we.req))}),(0,l.default)(o,ye.UPDATE_OPERATION_META_VALUE,function(xe,ke){var we,Z,Ft,Dt,Yt,ln,$n=ke.payload,nn=$n.path,Jn=$n.value,zn=$n.key,Zr=(0,v.default)(we=["paths"]).call(we,(0,_.default)(nn)),$r=(0,v.default)(Z=["meta","paths"]).call(Z,(0,_.default)(nn));return xe.getIn((0,v.default)(Ft=["json"]).call(Ft,(0,_.default)(Zr)))||xe.getIn((0,v.default)(Dt=["resolved"]).call(Dt,(0,_.default)(Zr)))||xe.getIn((0,v.default)(Yt=["resolvedSubtrees"]).call(Yt,(0,_.default)(Zr)))?xe.setIn((0,v.default)(ln=[]).call(ln,(0,_.default)($r),[zn]),(0,K.fromJS)(Jn)):xe}),(0,l.default)(o,ye.CLEAR_RESPONSE,function(xe,ke){var we=ke.payload;return xe.deleteIn(["responses",we.path,we.method])}),(0,l.default)(o,ye.CLEAR_REQUEST,function(xe,ke){var we=ke.payload;return xe.deleteIn(["requests",we.path,we.method])}),(0,l.default)(o,ye.SET_SCHEME,function(xe,ke){var we=ke.payload,Z=we.scheme,Ft=we.path,Dt=we.method;return Ft&&Dt?xe.setIn(["scheme",Ft,Dt],Z):Ft||Dt?void 0:xe.setIn(["scheme","_defaultScheme"],Z)}),o)},3881:(t,i,n)=>{n.r(i),n.d(i,{lastError:()=>Dt,url:()=>Yt,specStr:()=>ln,specSource:()=>$n,specJson:()=>nn,specResolved:()=>Jn,specResolvedSubtree:()=>zn,specJsonWithResolvedSubtrees:()=>$r,spec:()=>ui,isOAS3:()=>gi,info:()=>Un,externalDocs:()=>lr,version:()=>ar,semver:()=>Cr,paths:()=>Wn,operations:()=>ai,consumes:()=>ho,produces:()=>Yi,security:()=>lo,securityDefinitions:()=>pi,findDefinition:()=>Kn,definitions:()=>Nn,basePath:()=>_i,host:()=>Zi,schemes:()=>So,operationsWithRootInherited:()=>us,tags:()=>Zo,tagDetails:()=>pa,operationsWithTags:()=>va,taggedOperations:()=>qi,responses:()=>xo,requests:()=>$o,mutatedRequests:()=>rt,responseFor:()=>kt,requestFor:()=>Lt,mutatedRequestFor:()=>cr,allowTryItOutFor:()=>Yr,parameterWithMetaByIdentity:()=>li,parameterInclusionSettingFor:()=>eo,parameterWithMeta:()=>_a,operationWithMeta:()=>ps,getParameter:()=>Fl,hasHost:()=>Gl,parameterValues:()=>Ou,parametersIncludeIn:()=>Pc,parametersIncludeType:()=>np,contentTypeValues:()=>ou,currentProducesFor:()=>yd,producesOptionsFor:()=>kp,consumesOptionsFor:()=>Y_,operationScheme:()=>S_,canExecuteScheme:()=>j_,validateBeforeExecute:()=>Au,getOAS3RequiredRequestBodyContentType:()=>hd,isMediaTypeSchemaPropertiesEqual:()=>n_});var o=n(9334),l=n(2691),_=n(5171),v=n(8136),O=n(29),P=n(8818),G=n(2565),K=n(6145),oe=n(1778),ue=n(6785),pe=n(4350),ye=n(9963),Ue=n(4163),xe=n(8639),ke=n(6298),we=n(9725),Z=["get","put","post","delete","options","head","patch","trace"],Ft=function(xr){return xr||(0,we.Map)()},Dt=(0,xe.createSelector)(Ft,function(xr){return xr.get("lastError")}),Yt=(0,xe.createSelector)(Ft,function(xr){return xr.get("url")}),ln=(0,xe.createSelector)(Ft,function(xr){return xr.get("spec")||""}),$n=(0,xe.createSelector)(Ft,function(xr){return xr.get("specSource")||"not-editor"}),nn=(0,xe.createSelector)(Ft,function(xr){return xr.get("json",(0,we.Map)())}),Jn=(0,xe.createSelector)(Ft,function(xr){return xr.get("resolved",(0,we.Map)())}),zn=function(xr,ki){var Co;return xr.getIn((0,_.default)(Co=["resolvedSubtrees"]).call(Co,(0,l.default)(ki)),void 0)},Zr=function xr(ki,Co){return we.Map.isMap(ki)&&we.Map.isMap(Co)?Co.get("$$ref")?Co:(0,we.OrderedMap)().mergeWith(xr,ki,Co):Co},$r=(0,xe.createSelector)(Ft,function(xr){return(0,we.OrderedMap)().mergeWith(Zr,xr.get("json"),xr.get("resolvedSubtrees"))}),ui=function(xr){return nn(xr)},gi=(0,xe.createSelector)(ui,function(){return!1}),Un=(0,xe.createSelector)(ui,function(xr){return co(xr&&xr.get("info"))}),lr=(0,xe.createSelector)(ui,function(xr){return co(xr&&xr.get("externalDocs"))}),ar=(0,xe.createSelector)(Un,function(xr){return xr&&xr.get("version")}),Cr=(0,xe.createSelector)(ar,function(xr){var ki;return(0,v.default)(ki=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(xr)).call(ki,1)}),Wn=(0,xe.createSelector)($r,function(xr){return xr.get("paths")}),ai=(0,xe.createSelector)(Wn,function(xr){if(!xr||xr.size<1)return(0,we.List)();var ki=(0,we.List)();return xr&&(0,O.default)(xr)?((0,O.default)(xr).call(xr,function(Co,os){if(!Co||!(0,O.default)(Co))return{};(0,O.default)(Co).call(Co,function(Ss,Rs){var ks;(0,P.default)(Z).call(Z,Rs)<0||(ki=ki.push((0,we.fromJS)({path:os,method:Rs,operation:Ss,id:(0,_.default)(ks="".concat(Rs,"-")).call(ks,os)})))})}),ki):(0,we.List)()}),ho=(0,xe.createSelector)(ui,function(xr){return(0,we.Set)(xr.get("consumes"))}),Yi=(0,xe.createSelector)(ui,function(xr){return(0,we.Set)(xr.get("produces"))}),lo=(0,xe.createSelector)(ui,function(xr){return xr.get("security",(0,we.List)())}),pi=(0,xe.createSelector)(ui,function(xr){return xr.get("securityDefinitions")}),Kn=function(xr,ki){var Co=xr.getIn(["resolvedSubtrees","definitions",ki],null),os=xr.getIn(["json","definitions",ki],null);return Co||os||null},Nn=(0,xe.createSelector)(ui,function(xr){var ki=xr.get("definitions");return we.Map.isMap(ki)?ki:(0,we.Map)()}),_i=(0,xe.createSelector)(ui,function(xr){return xr.get("basePath")}),Zi=(0,xe.createSelector)(ui,function(xr){return xr.get("host")}),So=(0,xe.createSelector)(ui,function(xr){return xr.get("schemes",(0,we.Map)())}),us=(0,xe.createSelector)(ai,ho,Yi,function(xr,ki,Co){return(0,G.default)(xr).call(xr,function(os){return os.update("operation",function(Ss){return Ss?we.Map.isMap(Ss)?Ss.withMutations(function(Rs){return Rs.get("consumes")||Rs.update("consumes",function(ks){return(0,we.Set)(ks).merge(ki)}),Rs.get("produces")||Rs.update("produces",function(ks){return(0,we.Set)(ks).merge(Co)}),Rs}):void 0:(0,we.Map)()})})}),Zo=(0,xe.createSelector)(ui,function(xr){var ki=xr.get("tags",(0,we.List)());return we.List.isList(ki)?(0,K.default)(ki).call(ki,function(Co){return we.Map.isMap(Co)}):(0,we.List)()}),pa=function(xr,ki){var Co,os=Zo(xr)||(0,we.List)();return(0,oe.default)(Co=(0,K.default)(os).call(os,we.Map.isMap)).call(Co,function(Ss){return Ss.get("name")===ki},(0,we.Map)())},va=(0,xe.createSelector)(us,Zo,function(xr,ki){return(0,ue.default)(xr).call(xr,function(Co,os){var Ss=(0,we.Set)(os.getIn(["operation","tags"]));return Ss.count()<1?Co.update("default",(0,we.List)(),function(Rs){return Rs.push(os)}):(0,ue.default)(Ss).call(Ss,function(Rs,ks){return Rs.update(ks,(0,we.List)(),function(Ua){return Ua.push(os)})},Co)},(0,ue.default)(ki).call(ki,function(Co,os){return Co.set(os.get("name"),(0,we.List)())},(0,we.OrderedMap)()))}),qi=function(xr){return function(ki){var Co,os=(0,ki.getConfigs)(),Ss=os.tagsSorter,Rs=os.operationsSorter;return(0,G.default)(Co=va(xr).sortBy(function(ks,Ua){return Ua},function(ks,Ua){var Dl="function"==typeof Ss?Ss:ke.wh.tagsSorter[Ss];return Dl?Dl(ks,Ua):null})).call(Co,function(ks,Ua){var Dl="function"==typeof Rs?Rs:ke.wh.operationsSorter[Rs],uc=Dl?(0,pe.default)(ks).call(ks,Dl):ks;return(0,we.Map)({tagDetails:pa(xr,Ua),operations:uc})})}},xo=(0,xe.createSelector)(Ft,function(xr){return xr.get("responses",(0,we.Map)())}),$o=(0,xe.createSelector)(Ft,function(xr){return xr.get("requests",(0,we.Map)())}),rt=(0,xe.createSelector)(Ft,function(xr){return xr.get("mutatedRequests",(0,we.Map)())}),kt=function(xr,ki,Co){return xo(xr).getIn([ki,Co],null)},Lt=function(xr,ki,Co){return $o(xr).getIn([ki,Co],null)},cr=function(xr,ki,Co){return rt(xr).getIn([ki,Co],null)},Yr=function(){return!0},li=function(xr,ki,Co){var os,Ss,Rs=$r(xr).getIn((0,_.default)(os=["paths"]).call(os,(0,l.default)(ki),["parameters"]),(0,we.OrderedMap)()),ks=xr.getIn((0,_.default)(Ss=["meta","paths"]).call(Ss,(0,l.default)(ki),["parameters"]),(0,we.OrderedMap)()),Ua=(0,G.default)(Rs).call(Rs,function(Dl){var uc,Sr,oo,Ns=ks.get((0,_.default)(uc="".concat(Co.get("in"),".")).call(uc,Co.get("name"))),fo=ks.get((0,_.default)(Sr=(0,_.default)(oo="".concat(Co.get("in"),".")).call(oo,Co.get("name"),".hash-")).call(Sr,Co.hashCode()));return(0,we.OrderedMap)().merge(Dl,Ns,fo)});return(0,oe.default)(Ua).call(Ua,function(Dl){return Dl.get("in")===Co.get("in")&&Dl.get("name")===Co.get("name")},(0,we.OrderedMap)())},eo=function(xr,ki,Co,os){var Ss,Rs,ks=(0,_.default)(Ss="".concat(os,".")).call(Ss,Co);return xr.getIn((0,_.default)(Rs=["meta","paths"]).call(Rs,(0,l.default)(ki),["parameter_inclusions",ks]),!1)},_a=function(xr,ki,Co,os){var Ss,Rs=$r(xr).getIn((0,_.default)(Ss=["paths"]).call(Ss,(0,l.default)(ki),["parameters"]),(0,we.OrderedMap)()),ks=(0,oe.default)(Rs).call(Rs,function(Ua){return Ua.get("in")===os&&Ua.get("name")===Co},(0,we.OrderedMap)());return li(xr,ki,ks)},ps=function(xr,ki,Co){var os,Ss=$r(xr).getIn(["paths",ki,Co],(0,we.OrderedMap)()),Rs=xr.getIn(["meta","paths",ki,Co],(0,we.OrderedMap)()),ks=(0,G.default)(os=Ss.get("parameters",(0,we.List)())).call(os,function(Ua){return li(xr,[ki,Co],Ua)});return(0,we.OrderedMap)().merge(Ss,Rs).set("parameters",ks)};function Fl(xr,ki,Co,os){var Ss;ki=ki||[];var Rs=xr.getIn((0,_.default)(Ss=["meta","paths"]).call(Ss,(0,l.default)(ki),["parameters"]),(0,we.fromJS)([]));return(0,oe.default)(Rs).call(Rs,function(ks){return we.Map.isMap(ks)&&ks.get("name")===Co&&ks.get("in")===os})||(0,we.Map)()}var Gl=(0,xe.createSelector)(ui,function(xr){var ki=xr.get("host");return"string"==typeof ki&&ki.length>0&&"/"!==ki[0]});function Ou(xr,ki,Co){var os;ki=ki||[];var Ss=ps.apply(void 0,(0,_.default)(os=[xr]).call(os,(0,l.default)(ki))).get("parameters",(0,we.List)());return(0,ue.default)(Ss).call(Ss,function(Rs,ks){var Ua=Co&&"body"===ks.get("in")?ks.get("value_xml"):ks.get("value");return Rs.set((0,ke.V9)(ks,{allowHashes:!1}),Ua)},(0,we.fromJS)({}))}function Pc(xr){var ki=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(we.List.isList(xr))return(0,ye.default)(xr).call(xr,function(Co){return we.Map.isMap(Co)&&Co.get("in")===ki})}function np(xr){var ki=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(we.List.isList(xr))return(0,ye.default)(xr).call(xr,function(Co){return we.Map.isMap(Co)&&Co.get("type")===ki})}function ou(xr,ki){var Co,os;ki=ki||[];var Ss=$r(xr).getIn((0,_.default)(Co=["paths"]).call(Co,(0,l.default)(ki)),(0,we.fromJS)({})),Rs=xr.getIn((0,_.default)(os=["meta","paths"]).call(os,(0,l.default)(ki)),(0,we.fromJS)({})),ks=yd(xr,ki),Ua=Ss.get("parameters")||new we.List,Dl=Rs.get("consumes_value")?Rs.get("consumes_value"):np(Ua,"file")?"multipart/form-data":np(Ua,"formData")?"application/x-www-form-urlencoded":void 0;return(0,we.fromJS)({requestContentType:Dl,responseContentType:ks})}function yd(xr,ki){var Co,os;ki=ki||[];var Ss=$r(xr).getIn((0,_.default)(Co=["paths"]).call(Co,(0,l.default)(ki)),null);if(null!==Ss){var Rs=xr.getIn((0,_.default)(os=["meta","paths"]).call(os,(0,l.default)(ki),["produces_value"]),null),ks=Ss.getIn(["produces",0],null);return Rs||ks||"application/json"}}function kp(xr,ki){var Co;ki=ki||[];var os=$r(xr),Ss=os.getIn((0,_.default)(Co=["paths"]).call(Co,(0,l.default)(ki)),null);if(null!==Ss){var ks=(0,o.default)(ki,1)[0],Ua=Ss.get("produces",null),Dl=os.getIn(["paths",ks,"produces"],null),uc=os.getIn(["produces"],null);return Ua||Dl||uc}}function Y_(xr,ki){var Co;ki=ki||[];var os=$r(xr),Ss=os.getIn((0,_.default)(Co=["paths"]).call(Co,(0,l.default)(ki)),null);if(null!==Ss){var ks=(0,o.default)(ki,1)[0],Ua=Ss.get("consumes",null),Dl=os.getIn(["paths",ks,"consumes"],null),uc=os.getIn(["consumes"],null);return Ua||Dl||uc}}var S_=function(xr,ki,Co){var os=xr.get("url").match(/^([a-z][a-z0-9+\-.]*):/),Ss=(0,Ue.default)(os)?os[1]:null;return xr.getIn(["scheme",ki,Co])||xr.getIn(["scheme","_defaultScheme"])||Ss||""},j_=function(xr,ki,Co){var os;return(0,P.default)(os=["http","https"]).call(os,S_(xr,ki,Co))>-1},Au=function(xr,ki){var Co;ki=ki||[];var os=xr.getIn((0,_.default)(Co=["meta","paths"]).call(Co,(0,l.default)(ki),["parameters"]),(0,we.fromJS)([])),Ss=!0;return(0,O.default)(os).call(os,function(Rs){var ks=Rs.get("errors");ks&&ks.count()&&(Ss=!1)}),Ss},hd=function(xr,ki){var Co,os,Ss={requestBody:!1,requestContentType:{}},Rs=xr.getIn((0,_.default)(Co=["resolvedSubtrees","paths"]).call(Co,(0,l.default)(ki),["requestBody"]),(0,we.fromJS)([]));return Rs.size<1||(Rs.getIn(["required"])&&(Ss.requestBody=Rs.getIn(["required"])),(0,O.default)(os=Rs.getIn(["content"]).entrySeq()).call(os,function(ks){var Ua=ks[0];if(ks[1].getIn(["schema","required"])){var Dl=ks[1].getIn(["schema","required"]).toJS();Ss.requestContentType[Ua]=Dl}})),Ss},n_=function(xr,ki,Co,os){var Ss;if((Co||os)&&Co===os)return!0;var Rs=xr.getIn((0,_.default)(Ss=["resolvedSubtrees","paths"]).call(Ss,(0,l.default)(ki),["requestBody","content"]),(0,we.fromJS)([]));if(Rs.size<2||!Co||!os)return!1;var ks=Rs.getIn([Co,"schema","properties"],(0,we.fromJS)([])),Ua=Rs.getIn([os,"schema","properties"],(0,we.fromJS)([]));return!!ks.equals(Ua)};function co(xr){return we.Map.isMap(xr)?xr:new we.Map}},7508:(t,i,n)=>{n.r(i),n.d(i,{updateSpec:()=>v,updateJsonSpec:()=>O,executeRequest:()=>P,validateParams:()=>G});var o=n(2740),l=n(29),_=n(9908),v=function(K,oe){var ue=oe.specActions;return function(){K.apply(void 0,arguments),ue.parseToJson.apply(ue,arguments)}},O=function(K,oe){var ue=oe.specActions;return function(){for(var pe=arguments.length,ye=new Array(pe),Ue=0;Ue<pe;Ue++)ye[Ue]=arguments[Ue];K.apply(void 0,ye),ue.invalidateResolvedSubtreeCache();var ke=(0,_.default)(ye[0],["paths"])||{},we=(0,o.default)(ke);(0,l.default)(we).call(we,function(Z){(0,_.default)(ke,[Z]).$ref&&ue.requestResolvedSubtree(["paths",Z])}),ue.requestResolvedSubtree(["components","securitySchemes"])}},P=function(K,oe){var ue=oe.specActions;return function(pe){return ue.logRequest(pe),K(pe)}},G=function(K,oe){var ue=oe.specSelectors;return function(pe){return K(pe,ue.isOAS3())}}},4852:(t,i,n)=>{n.r(i),n.d(i,{loaded:()=>o});var o=function(l,_){return function(){l.apply(void 0,arguments);var v=_.getConfigs().withCredentials;void 0!==v&&(_.fn.fetch.withCredentials="string"==typeof v?"true"===v:!!v)}}},2990:(t,i,n)=>{n.r(i),n.d(i,{default:()=>K});var o=n(5171);const l=(n.d(ue={},{default:()=>nP}),ue),_=(oe=>{var ue={};return n.d(ue,oe),ue})({buildRequest:()=>lP,execute:()=>Bk}),v=(oe=>{var ue={};return n.d(ue,oe),ue})({default:()=>$A,makeHttp:()=>e5,serializeRes:()=>Vx}),O=(oe=>{var ue={};return n.d(ue,oe),ue})({default:()=>Wk});var ue,P=n(5013),G=n(4852);function K(oe){var ue=oe.configs,pe=oe.getConfigs;return{fn:{fetch:(0,v.makeHttp)(v.default,ue.preFetch,ue.postFetch),buildRequest:_.buildRequest,execute:_.execute,resolve:l.default,resolveSubtree:function(ye,Ue,xe){var ke;if(void 0===xe){var we=pe();xe={modelPropertyMacro:we.modelPropertyMacro,parameterMacro:we.parameterMacro,requestInterceptor:we.requestInterceptor,responseInterceptor:we.responseInterceptor}}for(var Z=arguments.length,Ft=new Array(Z>3?Z-3:0),Dt=3;Dt<Z;Dt++)Ft[Dt-3]=arguments[Dt];return O.default.apply(void 0,(0,o.default)(ke=[ye,Ue,xe]).call(ke,Ft))},serializeRes:v.serializeRes,opId:P.opId},statePlugins:{configs:{wrapActions:{loaded:G.loaded}}}}}},8525:(t,i,n)=>{n.r(i),n.d(i,{default:()=>l});var o=n(6298);function l(){return{fn:{shallowEqualKeys:o.be}}}},8347:(t,i,n)=>{n.r(i),n.d(i,{getDisplayName:()=>o});var o=function(l){return l.displayName||l.name||"Component"}},3420:(t,i,n)=>{n.r(i),n.d(i,{default:()=>P});var o=n(313),l=n(6298),_=n(5005),v=n(8347),O=n(8287);const P=function(G){var K,xe,oe=G.getComponents,ue=G.getStore,pe=G.getSystem,ye=(K=(0,_.getComponent)(pe,ue,oe),(0,l.HP)(K,function(){for(var xe=arguments.length,ke=new Array(xe),we=0;we<xe;we++)ke[we]=arguments[we];return(0,o.default)(ke)})),Ue=(xe=(0,_.withMappedContainer)(pe,ue,ye),(0,O.Z)(xe,function(){for(var ke=arguments.length,we=new Array(ke),Z=0;Z<ke;Z++)we[Z]=arguments[Z];return we}));return{rootInjects:{getComponent:ye,makeMappedContainer:Ue,render:(0,_.render)(pe,ue,_.getComponent,oe)},fn:{getDisplayName:v.getDisplayName}}}},5005:(t,i,n)=>{n.r(i),n.d(i,{getComponent:()=>Dt,render:()=>Ft,withMappedContainer:()=>Z});var o=n(1581),l=n(1013),_=n(863),v=n(7344),O=n(8656),P=n(9972),G=n(5416),K=n(2740),oe=n(810);const ue=(n.d(ln={},{default:()=>uP}),ln);var ln,pe=n(9871);const ye=(Yt=>{var ln={};return n.d(ln,Yt),ln})({Provider:()=>e$,connect:()=>P$}),Ue=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>L$()}),xe=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>$$()});var ke=function(Yt,ln,$n){return(0,pe.compose)($n?(nn=Yt,Jn=$n,function(zn){var Zr=nn().fn,$r=function(ui){(0,P.default)(Un,ui);var gi=(0,G.default)(Un);function Un(){return(0,v.default)(this,Un),gi.apply(this,arguments)}return(0,O.default)(Un,[{key:"render",value:function(){return oe.default.createElement(ye.Provider,{store:Jn},oe.default.createElement(zn,(0,_.default)({},this.props,this.context)))}}]),Un}(oe.Component);return $r.displayName="WithRoot(".concat(Zr.getDisplayName(zn),")"),$r}):xe.default,(0,ye.connect)(function(nn,Jn){var zn,Zr=(0,l.default)((0,l.default)({},Jn),Yt());return((null===(zn=ln.prototype)||void 0===zn?void 0:zn.mapStateToProps)||function(ui){return{state:ui}})(nn,Zr)}),function(nn){return function(Jn){var zn=nn().fn,Zr=function($r){(0,P.default)(gi,$r);var ui=(0,G.default)(gi);function gi(){return(0,v.default)(this,gi),ui.apply(this,arguments)}return(0,O.default)(gi,[{key:"render",value:function(){return oe.default.createElement(Jn,(0,_.default)({},nn(),this.props,this.context))}}]),gi}(oe.Component);return Zr.displayName="WithSystem(".concat(zn.getDisplayName(Jn),")"),Zr}}(Yt))(ln);var nn,Jn},we=function(Yt,ln,$n,nn){for(var Jn in ln){var zn=ln[Jn];"function"==typeof zn&&zn($n[Jn],nn[Jn],Yt())}},Z=function(Yt,ln,$n){return function(nn,Jn){var zn=Yt().fn,Zr=$n(nn,"root"),$r=function(ui){(0,P.default)(Un,ui);var gi=(0,G.default)(Un);function Un(lr,ar){var Cr;return(0,v.default)(this,Un),Cr=gi.call(this,lr,ar),we(Yt,Jn,lr,{}),Cr}return(0,O.default)(Un,[{key:"UNSAFE_componentWillReceiveProps",value:function(lr){we(Yt,Jn,lr,this.props)}},{key:"render",value:function(){var lr=(0,Ue.default)(this.props,Jn?(0,K.default)(Jn):[]);return oe.default.createElement(Zr,lr)}}]),Un}(oe.Component);return $r.displayName="WithMappedContainer(".concat(zn.getDisplayName(Zr),")"),$r}},Ft=function(Yt,ln,$n,nn){return function(Jn){var zn=$n(Yt,ln,nn)("App","root");ue.default.render(oe.default.createElement(zn,null),Jn)}},Dt=function(Yt,ln,$n){return function(nn,Jn){var zn=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"!=typeof nn)throw new TypeError("Need a string, to fetch a component. Was given a "+(0,o.default)(nn));var Zr=$n(nn);return Zr?Jn?"root"===Jn?ke(Yt,Zr,ln()):ke(Yt,Zr):Zr:(zn.failSilently||Yt().log.warn("Could not find component:",nn),null)}}},471:(t,i,n)=>{n.d(i,{d3:()=>_.default,C2:()=>Dt});var o=n(2740),l=n(2372);const _=(n.d(ln={},{default:()=>lH}),ln),v=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>dH}),O=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>_H}),P=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>gH}),G=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>EH}),K=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>TH}),oe=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>OH}),ue=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>RH}),pe=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>xH}),ye=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>wH}),Ue=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>PH}),xe=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>NH}),ke=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>IH}),we=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>FH});var ln;_.default.registerLanguage("json",O.default),_.default.registerLanguage("js",v.default),_.default.registerLanguage("xml",P.default),_.default.registerLanguage("yaml",K.default),_.default.registerLanguage("http",oe.default),_.default.registerLanguage("bash",G.default),_.default.registerLanguage("powershell",ue.default),_.default.registerLanguage("javascript",v.default);var Z={agate:pe.default,arta:ye.default,monokai:Ue.default,nord:xe.default,obsidian:ke.default,"tomorrow-night":we.default},Ft=(0,o.default)(Z),Dt=function(Yt){return(0,l.default)(Ft).call(Ft,Yt)?Z[Yt]:(console.warn("Request style '".concat(Yt,"' is not available, returning default instead")),pe.default)}},6298:(t,i,n)=>{n.d(i,{r3:()=>ou,GZ:()=>kp,Xb:()=>Ua,oJ:()=>hd,XV:()=>ki,iQ:()=>kt,J6:()=>n_,DR:()=>cr,oG:()=>Zi,Uj:()=>ks,QG:()=>Au,po:()=>xr,nX:()=>co,gp:()=>Lt,xi:()=>Pc,kJ:()=>va,O2:()=>uc,LQ:()=>us,Wl:()=>pa,Kn:()=>Zo,HP:()=>qi,AF:()=>So,D$:()=>os,Ay:()=>xo,Q2:()=>$o,mz:()=>_i,V9:()=>Ss,cz:()=>Rs,UG:()=>np,Zl:()=>Yr,hW:()=>j_,Nm:()=>S_,be:()=>Y_,wh:()=>yd,Pz:()=>Co,_5:()=>rt,Ik:()=>eo});var o=n(2691),l=(n(9334),n(1581)),_=n(3248),v=n(4163),O=n(2565),P=n(2954),G=n(5171),K=n(29),oe=n(6145),ue=n(2740),pe=(n(5527),n(6785)),ye=n(7512),Ue=n(4350),xe=n(8136),ke=n(9963),we=(n(2372),n(313)),Z=n(8818),Ft=n(1778),Dt=n(3590),Yt=n(5942),ln=n(9725);const $n=(n.d(oo={},{sanitizeUrl:()=>LH.N}),oo),nn=(Sr=>{var oo={};return n.d(oo,Sr),oo})({default:()=>$H()}),Jn=(Sr=>{var oo={};return n.d(oo,Sr),oo})({default:()=>UH()});var oo,zn=n(5476);const Zr=(Sr=>{var oo={};return n.d(oo,Sr),oo})({default:()=>GH()}),$r=(Sr=>{var oo={};return n.d(oo,Sr),oo})({default:()=>jH()}),ui=(Sr=>{var oo={};return n.d(oo,Sr),oo})({default:()=>VH()});var gi=n(7068),Un=n(2473),lr=n(7504);const ar=(Sr=>{var oo={};return n.d(oo,Sr),oo})({default:()=>WH()});var Cr=n(9069),Wn=n(1798),ai=n.n(Wn),ho=n(9072),Yi=n.n(ho),lo=n(626),pi=n(8764).Buffer,Kn="default",Nn=function(Sr){return ln.default.Iterable.isIterable(Sr)};function _i(Sr){return Zo(Sr)?Nn(Sr)?Sr.toJS():Sr:{}}function Zi(Sr){var oo,Ns;if(Nn(Sr)||Sr instanceof lr.Z.File||!Zo(Sr))return Sr;if((0,v.default)(Sr))return(0,O.default)(Ns=ln.default.Seq(Sr)).call(Ns,Zi).toList();if((0,gi.default)((0,P.default)(Sr))){var fo,ea=function(xs){if(!(0,gi.default)((0,P.default)(xs)))return xs;var Bu,Zl={},hl={},ol=(0,_.default)((0,P.default)(xs).call(xs));try{for(ol.s();!(Bu=ol.n()).done;){var Gu,cf,Ep,su,cc=Bu.value;Zl[cc[0]]||hl[cc[0]]&&hl[cc[0]].containsMultiple?(hl[cc[0]]||(hl[cc[0]]={containsMultiple:!0,length:1},Zl[(0,G.default)(Ep=(0,G.default)(su="".concat(cc[0])).call(su,"_**[]")).call(Ep,hl[cc[0]].length)]=Zl[cc[0]],delete Zl[cc[0]]),hl[cc[0]].length+=1,Zl[(0,G.default)(Gu=(0,G.default)(cf="".concat(cc[0])).call(cf,"_**[]")).call(Gu,hl[cc[0]].length)]=cc[1]):Zl[cc[0]]=cc[1]}}catch(Mf){ol.e(Mf)}finally{ol.f()}return Zl}(Sr);return(0,O.default)(fo=ln.default.OrderedMap(ea)).call(fo,Zi)}return(0,O.default)(oo=ln.default.OrderedMap(Sr)).call(oo,Zi)}function So(Sr){return(0,v.default)(Sr)?Sr:[Sr]}function us(Sr){return"function"==typeof Sr}function Zo(Sr){return!!Sr&&"object"===(0,l.default)(Sr)}function pa(Sr){return"function"==typeof Sr}function va(Sr){return(0,v.default)(Sr)}var qi=zn.default;function xo(Sr,oo){var Ns;return(0,pe.default)(Ns=(0,ue.default)(Sr)).call(Ns,function(fo,ea){return fo[ea]=oo(Sr[ea],ea),fo},{})}function $o(Sr,oo){var Ns;return(0,pe.default)(Ns=(0,ue.default)(Sr)).call(Ns,function(fo,ea){var xs=oo(Sr[ea],ea);return xs&&"object"===(0,l.default)(xs)&&(0,ye.default)(fo,xs),fo},{})}function rt(Sr){return function(oo){return function(Ns){return function(fo){return"function"==typeof fo?fo(Sr()):Ns(fo)}}}}function kt(Sr){var oo,Ns=Sr.keySeq();return Ns.contains(Kn)?Kn:(0,Ue.default)(oo=(0,oe.default)(Ns).call(Ns,function(fo){return"2"===(fo+"")[0]})).call(oo).first()}function Lt(Sr,oo){if(!ln.default.Iterable.isIterable(Sr))return ln.default.List();var Ns=Sr.getIn((0,v.default)(oo)?oo:[oo]);return ln.default.List.isList(Ns)?Ns:ln.default.List()}function cr(Sr){var oo,Ns=[/filename\*=[^']+'\w*'"([^"]+)";?/i,/filename\*=[^']+'\w*'([^;]+);?/i,/filename="([^;]*);?"/i,/filename=([^;]*);?/i];if((0,ke.default)(Ns).call(Ns,function(fo){return null!==(oo=fo.exec(Sr))}),null!==oo&&oo.length>1)try{return decodeURIComponent(oo[1])}catch(fo){console.error(fo)}return null}function Yr(Sr){return oo=Sr.replace(/\.[^./]*$/,""),(0,Jn.default)((0,nn.default)(oo));var oo}function li(Sr,oo,Ns,fo,ea){if(!oo)return[];var xs=[],Bu=oo.get("nullable"),Zl=oo.get("required"),Hl=oo.get("maximum"),hl=oo.get("minimum"),ol=oo.get("type"),cc=oo.get("format"),Gu=oo.get("maxLength"),cf=oo.get("minLength"),Ep=oo.get("uniqueItems"),su=oo.get("maxItems"),Mf=oo.get("minItems"),z_=oo.get("pattern"),Sp=Ns||!0===Zl,Eh=null!=Sr;if(Bu&&null===Sr||!ol||!(Sp||Eh&&"array"===ol||Sp||Eh))return[];var b_="string"===ol&&Sr,wm="array"===ol&&(0,v.default)(Sr)&&Sr.length,yo="array"===ol&&ln.default.List.isList(Sr)&&Sr.count(),$d=[b_,wm,yo,"array"===ol&&"string"==typeof Sr&&Sr,"file"===ol&&Sr instanceof lr.Z.File,"boolean"===ol&&(Sr||!1===Sr),"number"===ol&&(Sr||0===Sr),"integer"===ol&&(Sr||0===Sr),"object"===ol&&"object"===(0,l.default)(Sr)&&null!==Sr,"object"===ol&&"string"==typeof Sr&&Sr],Pm=(0,ke.default)($d).call($d,function(Ml){return!!Ml});if(Sp&&!Pm&&!fo)return xs.push("Required field is not provided"),xs;if("object"===ol&&(null===ea||"application/json"===ea)){var lg,gm=Sr;if("string"==typeof Sr)try{gm=JSON.parse(Sr)}catch{return xs.push("Parameter string value must be valid JSON"),xs}oo&&oo.has("required")&&pa(Zl.isList)&&Zl.isList()&&(0,K.default)(Zl).call(Zl,function(Ml){void 0===gm[Ml]&&xs.push({propKey:Ml,error:"Required property not found"})}),oo&&oo.has("properties")&&(0,K.default)(lg=oo.get("properties")).call(lg,function(Ml,mc){var Od=li(gm[mc],Ml,!1,fo,ea);xs.push.apply(xs,(0,o.default)((0,O.default)(Od).call(Od,function(Tv){return{propKey:mc,error:Tv}})))})}if(z_){var Fg=function(Ml,mc){if(!new RegExp(mc).test(Ml))return"Value must follow pattern "+mc}(Sr,z_);Fg&&xs.push(Fg)}if(Mf&&"array"===ol){var r_=function(Ml,mc){var Od;if(!Ml&&mc>=1||Ml&&Ml.length<mc)return(0,G.default)(Od="Array must contain at least ".concat(mc," item")).call(Od,1===mc?"":"s")}(Sr,Mf);r_&&xs.push(r_)}if(su&&"array"===ol){var qC=function(Ml,mc){var Od;if(Ml&&Ml.length>mc)return(0,G.default)(Od="Array must not contain more then ".concat(mc," item")).call(Od,1===mc?"":"s")}(Sr,su);qC&&xs.push({needRemove:!0,error:qC})}if(Ep&&"array"===ol){var Xd=function(Ml,mc){if(Ml&&("true"===mc||!0===mc)){var Od=(0,ln.fromJS)(Ml),Tv=Od.toSet();if(Ml.length>Tv.size){var y1=(0,ln.Set)();if((0,K.default)(Od).call(Od,function(Cv,i_){(0,oe.default)(Od).call(Od,function(E1){return pa(E1.equals)?E1.equals(Cv):E1===Cv}).size>1&&(y1=y1.add(i_))}),0!==y1.size)return(0,O.default)(y1).call(y1,function(Cv){return{index:Cv,error:"No duplicates allowed."}}).toArray()}}}(Sr,Ep);Xd&&xs.push.apply(xs,(0,o.default)(Xd))}if(Gu||0===Gu){var e2=function(Ml,mc){var Od;if(Ml.length>mc)return(0,G.default)(Od="Value must be no longer than ".concat(mc," character")).call(Od,1!==mc?"s":"")}(Sr,Gu);e2&&xs.push(e2)}if(cf){var dS=function(Ml,mc){var Od;if(Ml.length<mc)return(0,G.default)(Od="Value must be at least ".concat(mc," character")).call(Od,1!==mc?"s":"")}(Sr,cf);dS&&xs.push(dS)}if(Hl||0===Hl){var t2=function(Ml,mc){if(Ml>mc)return"Value must be less than ".concat(mc)}(Sr,Hl);t2&&xs.push(t2)}if(hl||0===hl){var n2=function(Ml,mc){if(Ml<mc)return"Value must be greater than ".concat(mc)}(Sr,hl);n2&&xs.push(n2)}if("string"===ol){var fS;if(!(fS="date-time"===cc?function(Ml){if(isNaN(Date.parse(Ml)))return"Value must be a DateTime"}(Sr):"uuid"===cc?function(Ml){if(Ml=Ml.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(Ml))return"Value must be a Guid"}(Sr):function(Ml){if(Ml&&"string"!=typeof Ml)return"Value must be a string"}(Sr)))return xs;xs.push(fS)}else if("boolean"===ol){var Q0=function(Ml){if("true"!==Ml&&"false"!==Ml&&!0!==Ml&&!1!==Ml)return"Value must be a boolean"}(Sr);if(!Q0)return xs;xs.push(Q0)}else if("number"===ol){var r2=function(Ml){if(!/^-?\d+(\.?\d+)?$/.test(Ml))return"Value must be a number"}(Sr);if(!r2)return xs;xs.push(r2)}else if("integer"===ol){var i2=function(Ml){if(!/^-?\d+$/.test(Ml))return"Value must be an integer"}(Sr);if(!i2)return xs;xs.push(i2)}else if("array"===ol){if(!wm&&!yo)return xs;Sr&&(0,K.default)(Sr).call(Sr,function(Ml,mc){var Od=li(Ml,oo.get("items"),!1,fo,ea);xs.push.apply(xs,(0,o.default)((0,O.default)(Od).call(Od,function(Tv){return{index:mc,error:Tv}})))})}else if("file"===ol){var o2=function(Ml){if(Ml&&!(Ml instanceof lr.Z.File))return"Value must be a file"}(Sr);if(!o2)return xs;xs.push(o2)}return xs}var eo=function(Sr,oo){var Ns=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},fo=Ns.isOAS3,ea=void 0!==fo&&fo,xs=Ns.bypassRequiredCheck,Bu=void 0!==xs&&xs,Zl=Sr.get("required"),Hl=(0,Cr.Z)(Sr,{isOAS3:ea});return li(oo,Hl.schema,Zl,Bu,Hl.parameterContentMediaType)},_a=function(Sr,oo,Ns){if(Sr&&(!Sr.xml||!Sr.xml.name)){if(Sr.xml=Sr.xml||{},!Sr.$$ref)return Sr.type||Sr.items||Sr.properties||Sr.additionalProperties?'<?xml version="1.0" encoding="UTF-8"?>\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e':null;var fo=Sr.$$ref.match(/\S*\/(\S+)$/);Sr.xml.name=fo[1]}return(0,Un.memoizedCreateXMLExample)(Sr,oo,Ns)},ps=[{when:/json/,shouldStringifyTypes:["string"]}],Fl=["object"],Gl=function(Sr,oo,Ns,fo){var ea=(0,Un.memoizedSampleFromSchema)(Sr,oo,fo),xs=(0,l.default)(ea),Bu=(0,pe.default)(ps).call(ps,function(Zl,Hl){var hl;return Hl.when.test(Ns)?(0,G.default)(hl=[]).call(hl,(0,o.default)(Zl),(0,o.default)(Hl.shouldStringifyTypes)):Zl},Fl);return(0,$r.default)(Bu,function(Zl){return Zl===xs})?(0,we.default)(ea,null,2):ea},Ou=function(Sr,oo,Ns,fo){var ea,xs=Gl(Sr,oo,Ns,fo);try{"\n"===(ea=lo.default.dump(lo.default.load(xs),{lineWidth:-1},{schema:lo.JSON_SCHEMA}))[ea.length-1]&&(ea=(0,xe.default)(ea).call(ea,0,ea.length-1))}catch(Bu){return console.error(Bu),"error: could not generate yaml example"}return ea.replace(/\t/g,"  ")},Pc=function(Sr){var oo=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",Ns=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},fo=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Sr&&pa(Sr.toJS)&&(Sr=Sr.toJS()),fo&&pa(fo.toJS)&&(fo=fo.toJS()),/xml/.test(oo)?_a(Sr,Ns,fo):/(yaml|yml)/.test(oo)?Ou(Sr,Ns,oo,fo):Gl(Sr,Ns,oo,fo)},np=function(){var Sr={},oo=lr.Z.location.search;if(!oo)return{};if(""!=oo){var Ns=oo.substr(1).split("&");for(var fo in Ns)Object.prototype.hasOwnProperty.call(Ns,fo)&&(fo=Ns[fo].split("="),Sr[decodeURIComponent(fo[0])]=fo[1]&&decodeURIComponent(fo[1])||"")}return Sr},ou=function(Sr){return(Sr instanceof pi?Sr:pi.from(Sr.toString(),"utf-8")).toString("base64")},yd={operationsSorter:{alpha:function(Sr,oo){return Sr.get("path").localeCompare(oo.get("path"))},method:function(Sr,oo){return Sr.get("method").localeCompare(oo.get("method"))}},tagsSorter:{alpha:function(Sr,oo){return Sr.localeCompare(oo)}}},kp=function(Sr){var oo=[];for(var Ns in Sr){var fo=Sr[Ns];void 0!==fo&&""!==fo&&oo.push([Ns,"=",encodeURIComponent(fo).replace(/%20/g,"+")].join(""))}return oo.join("&")},Y_=function(Sr,oo,Ns){return!!(0,Zr.default)(Ns,function(fo){return(0,ui.default)(Sr[fo],oo[fo])})};function S_(Sr){return"string"!=typeof Sr||""===Sr?"":(0,$n.sanitizeUrl)(Sr)}function j_(Sr){return!(!Sr||(0,Z.default)(Sr).call(Sr,"localhost")>=0||(0,Z.default)(Sr).call(Sr,"127.0.0.1")>=0||"none"===Sr)}function Au(Sr){if(!ln.default.OrderedMap.isOrderedMap(Sr)||!Sr.size)return null;var oo=(0,Ft.default)(Sr).call(Sr,function(ea,xs){return(0,Dt.default)(xs).call(xs,"2")&&(0,ue.default)(ea.get("content")||{}).length>0}),Ns=Sr.get("default")||ln.default.OrderedMap(),fo=(Ns.get("content")||ln.default.OrderedMap()).keySeq().toJS().length?Ns:null;return oo||fo}var hd=function(Sr){return"string"==typeof Sr||Sr instanceof String?(0,Yt.default)(Sr).call(Sr).replace(/\s/g,"%20"):""},n_=function(Sr){return(0,ar.default)(hd(Sr).replace(/%20/g,"_"))},co=function(Sr){return(0,oe.default)(Sr).call(Sr,function(oo,Ns){return/^x-/.test(Ns)})},xr=function(Sr){return(0,oe.default)(Sr).call(Sr,function(oo,Ns){return/^pattern|maxLength|minLength|maximum|minimum/.test(Ns)})};function ki(Sr,oo){var Ns,fo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0};if("object"!==(0,l.default)(Sr)||(0,v.default)(Sr)||null===Sr||!oo)return Sr;var ea=(0,ye.default)({},Sr);return(0,K.default)(Ns=(0,ue.default)(ea)).call(Ns,function(xs){xs===oo&&fo(ea[xs],xs)?delete ea[xs]:ea[xs]=ki(ea[xs],oo,fo)}),ea}function Co(Sr){if("string"==typeof Sr)return Sr;if(Sr&&Sr.toJS&&(Sr=Sr.toJS()),"object"===(0,l.default)(Sr)&&null!==Sr)try{return(0,we.default)(Sr,null,2)}catch{return String(Sr)}return null==Sr?"":Sr.toString()}function os(Sr){return"number"==typeof Sr?Sr.toString():Sr}function Ss(Sr){var oo=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},Ns=oo.returnAll,fo=void 0!==Ns&&Ns,ea=oo.allowHashes,xs=void 0===ea||ea;if(!ln.default.Map.isMap(Sr))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");var Bu,Zl,Hl,hl=Sr.get("name"),ol=Sr.get("in"),cc=[];return Sr&&Sr.hashCode&&ol&&hl&&xs&&cc.push((0,G.default)(Bu=(0,G.default)(Zl="".concat(ol,".")).call(Zl,hl,".hash-")).call(Bu,Sr.hashCode())),ol&&hl&&cc.push((0,G.default)(Hl="".concat(ol,".")).call(Hl,hl)),cc.push(hl),fo?cc:cc[0]||""}function Rs(Sr,oo){var Ns,fo=Ss(Sr,{returnAll:!0});return(0,oe.default)(Ns=(0,O.default)(fo).call(fo,function(ea){return oo[ea]})).call(Ns,function(ea){return void 0!==ea})[0]}function ks(){return Dl(ai()(32).toString("base64"))}function Ua(Sr){return Dl(Yi()("sha256").update(Sr).digest("base64"))}function Dl(Sr){return Sr.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}var uc=function(Sr){return!Sr||!(!Nn(Sr)||!Sr.isEmpty())}},2518:(t,i,n)=>{function o(l){return function(_){try{return!!JSON.parse(_)}catch{return null}}(l)?"json":null}n.d(i,{O:()=>o})},7504:(t,i,n)=>{n.d(i,{Z:()=>o});const o=function(){var l={location:{},history:{},open:function(){},close:function(){},File:function(){}};if(typeof window>"u")return l;try{l=window;for(var _=0,v=["File","Blob","FormData"];_<v.length;_++){var O=v[_];O in window&&(l[O]=window[O])}}catch(P){console.error(P)}return l}()},9069:(t,i,n)=>{n.d(i,{Z:()=>O});var o=n(6145),l=n(2372),_=n(9725),v=_.default.Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");function O(P){var K=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).isOAS3;if(!_.default.Map.isMap(P))return{schema:_.default.Map(),parameterContentMediaType:null};if(!K)return"body"===P.get("in")?{schema:P.get("schema",_.default.Map()),parameterContentMediaType:null}:{schema:(0,o.default)(P).call(P,function(pe,ye){return(0,l.default)(v).call(v,ye)}),parameterContentMediaType:null};if(P.get("content")){var ue=P.get("content",_.default.Map({})).keySeq().first();return{schema:P.getIn(["content",ue,"schema"],_.default.Map()),parameterContentMediaType:ue}}return{schema:P.get("schema",_.default.Map()),parameterContentMediaType:null}}},8287:(t,i,n)=>{n.d(i,{Z:()=>Dt});var o=n(7344),l=n(8656);const _=(n.d(ln={},{default:()=>FC}),ln),v=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>mv});var ln,O=n(9972),P=n(5416);const G=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>ID});var K=n(4163),oe=n(7930),ue=n(8898),pe=n(5487),ye=n(1778);const Ue=(Yt=>{var ln={};return n.d(ln,Yt),ln})({default:()=>XH()});var xe=n(6914),ke=n(5476),we=function(Yt){return function(ln){return(0,K.default)(Yt)&&(0,K.default)(ln)&&Yt.length===ln.length&&(0,oe.default)(Yt).call(Yt,function($n,nn){return $n===ln[nn]})}},Z=function(){for(var Yt=arguments.length,ln=new Array(Yt),$n=0;$n<Yt;$n++)ln[$n]=arguments[$n];return ln},Ft=function(Yt){(0,O.default)($n,Yt);var ln=(0,P.default)($n);function $n(){return(0,o.default)(this,$n),ln.apply(this,arguments)}return(0,l.default)($n,[{key:"delete",value:function(nn){var Jn=(0,ue.default)((0,pe.default)(this).call(this)),zn=(0,ye.default)(Jn).call(Jn,we(nn));return(0,_.default)((0,v.default)($n.prototype),"delete",this).call(this,zn)}},{key:"get",value:function(nn){var Jn=(0,ue.default)((0,pe.default)(this).call(this)),zn=(0,ye.default)(Jn).call(Jn,we(nn));return(0,_.default)((0,v.default)($n.prototype),"get",this).call(this,zn)}},{key:"has",value:function(nn){var Jn=(0,ue.default)((0,pe.default)(this).call(this));return-1!==(0,Ue.default)(Jn).call(Jn,we(nn))}}]),$n}((0,G.default)(xe.default));const Dt=function(Yt){var ln=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Z,$n=ke.default.Cache;ke.default.Cache=Ft;var nn=(0,ke.default)(Yt,ln);return ke.default.Cache=$n,nn}},8764:(t,i,n)=>{const o=n(4780),l=n(3294),_="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;i.Buffer=P,i.SlowBuffer=function(rt){return+rt!=rt&&(rt=0),P.alloc(+rt)},i.INSPECT_MAX_BYTES=50;const v=2147483647;function O(rt){if(rt>v)throw new RangeError('The value "'+rt+'" is invalid for option "size"');const kt=new Uint8Array(rt);return Object.setPrototypeOf(kt,P.prototype),kt}function P(rt,kt,Lt){if("number"==typeof rt){if("string"==typeof kt)throw new TypeError('The "string" argument must be of type string. Received type number');return oe(rt)}return G(rt,kt,Lt)}function G(rt,kt,Lt){if("string"==typeof rt)return function(li,eo){if("string"==typeof eo&&""!==eo||(eo="utf8"),!P.isEncoding(eo))throw new TypeError("Unknown encoding: "+eo);const _a=0|Ue(li,eo);let ps=O(_a);const Fl=ps.write(li,eo);return Fl!==_a&&(ps=ps.slice(0,Fl)),ps}(rt,kt);if(ArrayBuffer.isView(rt))return function(li){if(pa(li,Uint8Array)){const eo=new Uint8Array(li);return pe(eo.buffer,eo.byteOffset,eo.byteLength)}return ue(li)}(rt);if(null==rt)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof rt);if(pa(rt,ArrayBuffer)||rt&&pa(rt.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(pa(rt,SharedArrayBuffer)||rt&&pa(rt.buffer,SharedArrayBuffer)))return pe(rt,kt,Lt);if("number"==typeof rt)throw new TypeError('The "value" argument must not be of type number. Received type number');const cr=rt.valueOf&&rt.valueOf();if(null!=cr&&cr!==rt)return P.from(cr,kt,Lt);const Yr=function(li){if(P.isBuffer(li)){const eo=0|ye(li.length),_a=O(eo);return 0===_a.length||li.copy(_a,0,0,eo),_a}return void 0!==li.length?"number"!=typeof li.length||va(li.length)?O(0):ue(li):"Buffer"===li.type&&Array.isArray(li.data)?ue(li.data):void 0}(rt);if(Yr)return Yr;if(typeof Symbol<"u"&&null!=Symbol.toPrimitive&&"function"==typeof rt[Symbol.toPrimitive])return P.from(rt[Symbol.toPrimitive]("string"),kt,Lt);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof rt)}function K(rt){if("number"!=typeof rt)throw new TypeError('"size" argument must be of type number');if(rt<0)throw new RangeError('The value "'+rt+'" is invalid for option "size"')}function oe(rt){return K(rt),O(rt<0?0:0|ye(rt))}function ue(rt){const kt=rt.length<0?0:0|ye(rt.length),Lt=O(kt);for(let cr=0;cr<kt;cr+=1)Lt[cr]=255&rt[cr];return Lt}function pe(rt,kt,Lt){if(kt<0||rt.byteLength<kt)throw new RangeError('"offset" is outside of buffer bounds');if(rt.byteLength<kt+(Lt||0))throw new RangeError('"length" is outside of buffer bounds');let cr;return cr=void 0===kt&&void 0===Lt?new Uint8Array(rt):void 0===Lt?new Uint8Array(rt,kt):new Uint8Array(rt,kt,Lt),Object.setPrototypeOf(cr,P.prototype),cr}function ye(rt){if(rt>=v)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+v.toString(16)+" bytes");return 0|rt}function Ue(rt,kt){if(P.isBuffer(rt))return rt.length;if(ArrayBuffer.isView(rt)||pa(rt,ArrayBuffer))return rt.byteLength;if("string"!=typeof rt)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof rt);const Lt=rt.length,cr=arguments.length>2&&!0===arguments[2];if(!cr&&0===Lt)return 0;let Yr=!1;for(;;)switch(kt){case"ascii":case"latin1":case"binary":return Lt;case"utf8":case"utf-8":return So(rt).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*Lt;case"hex":return Lt>>>1;case"base64":return us(rt).length;default:if(Yr)return cr?-1:So(rt).length;kt=(""+kt).toLowerCase(),Yr=!0}}function xe(rt,kt,Lt){let cr=!1;if((void 0===kt||kt<0)&&(kt=0),kt>this.length||((void 0===Lt||Lt>this.length)&&(Lt=this.length),Lt<=0)||(Lt>>>=0)<=(kt>>>=0))return"";for(rt||(rt="utf8");;)switch(rt){case"hex":return ui(this,kt,Lt);case"utf8":case"utf-8":return Jn(this,kt,Lt);case"ascii":return Zr(this,kt,Lt);case"latin1":case"binary":return $r(this,kt,Lt);case"base64":return nn(this,kt,Lt);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return gi(this,kt,Lt);default:if(cr)throw new TypeError("Unknown encoding: "+rt);rt=(rt+"").toLowerCase(),cr=!0}}function ke(rt,kt,Lt){const cr=rt[kt];rt[kt]=rt[Lt],rt[Lt]=cr}function we(rt,kt,Lt,cr,Yr){if(0===rt.length)return-1;if("string"==typeof Lt?(cr=Lt,Lt=0):Lt>2147483647?Lt=2147483647:Lt<-2147483648&&(Lt=-2147483648),va(Lt=+Lt)&&(Lt=Yr?0:rt.length-1),Lt<0&&(Lt=rt.length+Lt),Lt>=rt.length){if(Yr)return-1;Lt=rt.length-1}else if(Lt<0){if(!Yr)return-1;Lt=0}if("string"==typeof kt&&(kt=P.from(kt,cr)),P.isBuffer(kt))return 0===kt.length?-1:Z(rt,kt,Lt,cr,Yr);if("number"==typeof kt)return kt&=255,"function"==typeof Uint8Array.prototype.indexOf?Yr?Uint8Array.prototype.indexOf.call(rt,kt,Lt):Uint8Array.prototype.lastIndexOf.call(rt,kt,Lt):Z(rt,[kt],Lt,cr,Yr);throw new TypeError("val must be string, number or Buffer")}function Z(rt,kt,Lt,cr,Yr){let li,eo=1,_a=rt.length,ps=kt.length;if(void 0!==cr&&("ucs2"===(cr=String(cr).toLowerCase())||"ucs-2"===cr||"utf16le"===cr||"utf-16le"===cr)){if(rt.length<2||kt.length<2)return-1;eo=2,_a/=2,ps/=2,Lt/=2}function Fl(Gl,Ou){return 1===eo?Gl[Ou]:Gl.readUInt16BE(Ou*eo)}if(Yr){let Gl=-1;for(li=Lt;li<_a;li++)if(Fl(rt,li)===Fl(kt,-1===Gl?0:li-Gl)){if(-1===Gl&&(Gl=li),li-Gl+1===ps)return Gl*eo}else-1!==Gl&&(li-=li-Gl),Gl=-1}else for(Lt+ps>_a&&(Lt=_a-ps),li=Lt;li>=0;li--){let Gl=!0;for(let Ou=0;Ou<ps;Ou++)if(Fl(rt,li+Ou)!==Fl(kt,Ou)){Gl=!1;break}if(Gl)return li}return-1}function Ft(rt,kt,Lt,cr){Lt=Number(Lt)||0;const Yr=rt.length-Lt;cr?(cr=Number(cr))>Yr&&(cr=Yr):cr=Yr;const li=kt.length;let eo;for(cr>li/2&&(cr=li/2),eo=0;eo<cr;++eo){const _a=parseInt(kt.substr(2*eo,2),16);if(va(_a))return eo;rt[Lt+eo]=_a}return eo}function Dt(rt,kt,Lt,cr){return Zo(So(kt,rt.length-Lt),rt,Lt,cr)}function Yt(rt,kt,Lt,cr){return Zo(function(Yr){const li=[];for(let eo=0;eo<Yr.length;++eo)li.push(255&Yr.charCodeAt(eo));return li}(kt),rt,Lt,cr)}function ln(rt,kt,Lt,cr){return Zo(us(kt),rt,Lt,cr)}function $n(rt,kt,Lt,cr){return Zo(function(Yr,li){let eo,_a,ps;const Fl=[];for(let Gl=0;Gl<Yr.length&&!((li-=2)<0);++Gl)eo=Yr.charCodeAt(Gl),_a=eo>>8,ps=eo%256,Fl.push(ps),Fl.push(_a);return Fl}(kt,rt.length-Lt),rt,Lt,cr)}function nn(rt,kt,Lt){return o.fromByteArray(0===kt&&Lt===rt.length?rt:rt.slice(kt,Lt))}function Jn(rt,kt,Lt){Lt=Math.min(rt.length,Lt);const cr=[];let Yr=kt;for(;Yr<Lt;){const li=rt[Yr];let eo=null,_a=li>239?4:li>223?3:li>191?2:1;if(Yr+_a<=Lt){let ps,Fl,Gl,Ou;switch(_a){case 1:li<128&&(eo=li);break;case 2:ps=rt[Yr+1],128==(192&ps)&&(Ou=(31&li)<<6|63&ps,Ou>127&&(eo=Ou));break;case 3:ps=rt[Yr+1],Fl=rt[Yr+2],128==(192&ps)&&128==(192&Fl)&&(Ou=(15&li)<<12|(63&ps)<<6|63&Fl,Ou>2047&&(Ou<55296||Ou>57343)&&(eo=Ou));break;case 4:ps=rt[Yr+1],Fl=rt[Yr+2],Gl=rt[Yr+3],128==(192&ps)&&128==(192&Fl)&&128==(192&Gl)&&(Ou=(15&li)<<18|(63&ps)<<12|(63&Fl)<<6|63&Gl,Ou>65535&&Ou<1114112&&(eo=Ou))}}null===eo?(eo=65533,_a=1):eo>65535&&(eo-=65536,cr.push(eo>>>10&1023|55296),eo=56320|1023&eo),cr.push(eo),Yr+=_a}return function(li){const eo=li.length;if(eo<=zn)return String.fromCharCode.apply(String,li);let _a="",ps=0;for(;ps<eo;)_a+=String.fromCharCode.apply(String,li.slice(ps,ps+=zn));return _a}(cr)}i.kMaxLength=v,(P.TYPED_ARRAY_SUPPORT=function(){try{const rt=new Uint8Array(1),kt={foo:function(){return 42}};return Object.setPrototypeOf(kt,Uint8Array.prototype),Object.setPrototypeOf(rt,kt),42===rt.foo()}catch{return!1}}())||typeof console>"u"||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(P.prototype,"parent",{enumerable:!0,get:function(){if(P.isBuffer(this))return this.buffer}}),Object.defineProperty(P.prototype,"offset",{enumerable:!0,get:function(){if(P.isBuffer(this))return this.byteOffset}}),P.poolSize=8192,P.from=function(rt,kt,Lt){return G(rt,kt,Lt)},Object.setPrototypeOf(P.prototype,Uint8Array.prototype),Object.setPrototypeOf(P,Uint8Array),P.alloc=function(rt,kt,Lt){return Yr=kt,li=Lt,K(cr=rt),cr<=0?O(cr):void 0!==Yr?"string"==typeof li?O(cr).fill(Yr,li):O(cr).fill(Yr):O(cr);var cr,Yr,li},P.allocUnsafe=function(rt){return oe(rt)},P.allocUnsafeSlow=function(rt){return oe(rt)},P.isBuffer=function(rt){return null!=rt&&!0===rt._isBuffer&&rt!==P.prototype},P.compare=function(rt,kt){if(pa(rt,Uint8Array)&&(rt=P.from(rt,rt.offset,rt.byteLength)),pa(kt,Uint8Array)&&(kt=P.from(kt,kt.offset,kt.byteLength)),!P.isBuffer(rt)||!P.isBuffer(kt))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(rt===kt)return 0;let Lt=rt.length,cr=kt.length;for(let Yr=0,li=Math.min(Lt,cr);Yr<li;++Yr)if(rt[Yr]!==kt[Yr]){Lt=rt[Yr],cr=kt[Yr];break}return Lt<cr?-1:cr<Lt?1:0},P.isEncoding=function(rt){switch(String(rt).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},P.concat=function(rt,kt){if(!Array.isArray(rt))throw new TypeError('"list" argument must be an Array of Buffers');if(0===rt.length)return P.alloc(0);let Lt;if(void 0===kt)for(kt=0,Lt=0;Lt<rt.length;++Lt)kt+=rt[Lt].length;const cr=P.allocUnsafe(kt);let Yr=0;for(Lt=0;Lt<rt.length;++Lt){let li=rt[Lt];if(pa(li,Uint8Array))Yr+li.length>cr.length?(P.isBuffer(li)||(li=P.from(li)),li.copy(cr,Yr)):Uint8Array.prototype.set.call(cr,li,Yr);else{if(!P.isBuffer(li))throw new TypeError('"list" argument must be an Array of Buffers');li.copy(cr,Yr)}Yr+=li.length}return cr},P.byteLength=Ue,P.prototype._isBuffer=!0,P.prototype.swap16=function(){const rt=this.length;if(rt%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let kt=0;kt<rt;kt+=2)ke(this,kt,kt+1);return this},P.prototype.swap32=function(){const rt=this.length;if(rt%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let kt=0;kt<rt;kt+=4)ke(this,kt,kt+3),ke(this,kt+1,kt+2);return this},P.prototype.swap64=function(){const rt=this.length;if(rt%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let kt=0;kt<rt;kt+=8)ke(this,kt,kt+7),ke(this,kt+1,kt+6),ke(this,kt+2,kt+5),ke(this,kt+3,kt+4);return this},P.prototype.toLocaleString=P.prototype.toString=function(){const rt=this.length;return 0===rt?"":0===arguments.length?Jn(this,0,rt):xe.apply(this,arguments)},P.prototype.equals=function(rt){if(!P.isBuffer(rt))throw new TypeError("Argument must be a Buffer");return this===rt||0===P.compare(this,rt)},P.prototype.inspect=function(){let rt="";const kt=i.INSPECT_MAX_BYTES;return rt=this.toString("hex",0,kt).replace(/(.{2})/g,"$1 ").trim(),this.length>kt&&(rt+=" ... "),"<Buffer "+rt+">"},_&&(P.prototype[_]=P.prototype.inspect),P.prototype.compare=function(rt,kt,Lt,cr,Yr){if(pa(rt,Uint8Array)&&(rt=P.from(rt,rt.offset,rt.byteLength)),!P.isBuffer(rt))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof rt);if(void 0===kt&&(kt=0),void 0===Lt&&(Lt=rt?rt.length:0),void 0===cr&&(cr=0),void 0===Yr&&(Yr=this.length),kt<0||Lt>rt.length||cr<0||Yr>this.length)throw new RangeError("out of range index");if(cr>=Yr&&kt>=Lt)return 0;if(cr>=Yr)return-1;if(kt>=Lt)return 1;if(this===rt)return 0;let li=(Yr>>>=0)-(cr>>>=0),eo=(Lt>>>=0)-(kt>>>=0);const _a=Math.min(li,eo),ps=this.slice(cr,Yr),Fl=rt.slice(kt,Lt);for(let Gl=0;Gl<_a;++Gl)if(ps[Gl]!==Fl[Gl]){li=ps[Gl],eo=Fl[Gl];break}return li<eo?-1:eo<li?1:0},P.prototype.includes=function(rt,kt,Lt){return-1!==this.indexOf(rt,kt,Lt)},P.prototype.indexOf=function(rt,kt,Lt){return we(this,rt,kt,Lt,!0)},P.prototype.lastIndexOf=function(rt,kt,Lt){return we(this,rt,kt,Lt,!1)},P.prototype.write=function(rt,kt,Lt,cr){if(void 0===kt)cr="utf8",Lt=this.length,kt=0;else if(void 0===Lt&&"string"==typeof kt)cr=kt,Lt=this.length,kt=0;else{if(!isFinite(kt))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");kt>>>=0,isFinite(Lt)?(Lt>>>=0,void 0===cr&&(cr="utf8")):(cr=Lt,Lt=void 0)}const Yr=this.length-kt;if((void 0===Lt||Lt>Yr)&&(Lt=Yr),rt.length>0&&(Lt<0||kt<0)||kt>this.length)throw new RangeError("Attempt to write outside buffer bounds");cr||(cr="utf8");let li=!1;for(;;)switch(cr){case"hex":return Ft(this,rt,kt,Lt);case"utf8":case"utf-8":return Dt(this,rt,kt,Lt);case"ascii":case"latin1":case"binary":return Yt(this,rt,kt,Lt);case"base64":return ln(this,rt,kt,Lt);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return $n(this,rt,kt,Lt);default:if(li)throw new TypeError("Unknown encoding: "+cr);cr=(""+cr).toLowerCase(),li=!0}},P.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const zn=4096;function Zr(rt,kt,Lt){let cr="";Lt=Math.min(rt.length,Lt);for(let Yr=kt;Yr<Lt;++Yr)cr+=String.fromCharCode(127&rt[Yr]);return cr}function $r(rt,kt,Lt){let cr="";Lt=Math.min(rt.length,Lt);for(let Yr=kt;Yr<Lt;++Yr)cr+=String.fromCharCode(rt[Yr]);return cr}function ui(rt,kt,Lt){const cr=rt.length;(!kt||kt<0)&&(kt=0),(!Lt||Lt<0||Lt>cr)&&(Lt=cr);let Yr="";for(let li=kt;li<Lt;++li)Yr+=qi[rt[li]];return Yr}function gi(rt,kt,Lt){const cr=rt.slice(kt,Lt);let Yr="";for(let li=0;li<cr.length-1;li+=2)Yr+=String.fromCharCode(cr[li]+256*cr[li+1]);return Yr}function Un(rt,kt,Lt){if(rt%1!=0||rt<0)throw new RangeError("offset is not uint");if(rt+kt>Lt)throw new RangeError("Trying to access beyond buffer length")}function lr(rt,kt,Lt,cr,Yr,li){if(!P.isBuffer(rt))throw new TypeError('"buffer" argument must be a Buffer instance');if(kt>Yr||kt<li)throw new RangeError('"value" argument is out of bounds');if(Lt+cr>rt.length)throw new RangeError("Index out of range")}function ar(rt,kt,Lt,cr,Yr){Kn(kt,cr,Yr,rt,Lt,7);let li=Number(kt&BigInt(4294967295));rt[Lt++]=li,li>>=8,rt[Lt++]=li,li>>=8,rt[Lt++]=li,li>>=8,rt[Lt++]=li;let eo=Number(kt>>BigInt(32)&BigInt(4294967295));return rt[Lt++]=eo,eo>>=8,rt[Lt++]=eo,eo>>=8,rt[Lt++]=eo,eo>>=8,rt[Lt++]=eo,Lt}function Cr(rt,kt,Lt,cr,Yr){Kn(kt,cr,Yr,rt,Lt,7);let li=Number(kt&BigInt(4294967295));rt[Lt+7]=li,li>>=8,rt[Lt+6]=li,li>>=8,rt[Lt+5]=li,li>>=8,rt[Lt+4]=li;let eo=Number(kt>>BigInt(32)&BigInt(4294967295));return rt[Lt+3]=eo,eo>>=8,rt[Lt+2]=eo,eo>>=8,rt[Lt+1]=eo,eo>>=8,rt[Lt]=eo,Lt+8}function Wn(rt,kt,Lt,cr,Yr,li){if(Lt+cr>rt.length)throw new RangeError("Index out of range");if(Lt<0)throw new RangeError("Index out of range")}function ai(rt,kt,Lt,cr,Yr){return kt=+kt,Lt>>>=0,Yr||Wn(rt,0,Lt,4),l.write(rt,kt,Lt,cr,23,4),Lt+4}function ho(rt,kt,Lt,cr,Yr){return kt=+kt,Lt>>>=0,Yr||Wn(rt,0,Lt,8),l.write(rt,kt,Lt,cr,52,8),Lt+8}P.prototype.slice=function(rt,kt){const Lt=this.length;(rt=~~rt)<0?(rt+=Lt)<0&&(rt=0):rt>Lt&&(rt=Lt),(kt=void 0===kt?Lt:~~kt)<0?(kt+=Lt)<0&&(kt=0):kt>Lt&&(kt=Lt),kt<rt&&(kt=rt);const cr=this.subarray(rt,kt);return Object.setPrototypeOf(cr,P.prototype),cr},P.prototype.readUintLE=P.prototype.readUIntLE=function(rt,kt,Lt){rt>>>=0,kt>>>=0,Lt||Un(rt,kt,this.length);let cr=this[rt],Yr=1,li=0;for(;++li<kt&&(Yr*=256);)cr+=this[rt+li]*Yr;return cr},P.prototype.readUintBE=P.prototype.readUIntBE=function(rt,kt,Lt){rt>>>=0,kt>>>=0,Lt||Un(rt,kt,this.length);let cr=this[rt+--kt],Yr=1;for(;kt>0&&(Yr*=256);)cr+=this[rt+--kt]*Yr;return cr},P.prototype.readUint8=P.prototype.readUInt8=function(rt,kt){return rt>>>=0,kt||Un(rt,1,this.length),this[rt]},P.prototype.readUint16LE=P.prototype.readUInt16LE=function(rt,kt){return rt>>>=0,kt||Un(rt,2,this.length),this[rt]|this[rt+1]<<8},P.prototype.readUint16BE=P.prototype.readUInt16BE=function(rt,kt){return rt>>>=0,kt||Un(rt,2,this.length),this[rt]<<8|this[rt+1]},P.prototype.readUint32LE=P.prototype.readUInt32LE=function(rt,kt){return rt>>>=0,kt||Un(rt,4,this.length),(this[rt]|this[rt+1]<<8|this[rt+2]<<16)+16777216*this[rt+3]},P.prototype.readUint32BE=P.prototype.readUInt32BE=function(rt,kt){return rt>>>=0,kt||Un(rt,4,this.length),16777216*this[rt]+(this[rt+1]<<16|this[rt+2]<<8|this[rt+3])},P.prototype.readBigUInt64LE=xo(function(rt){Nn(rt>>>=0,"offset");const kt=this[rt],Lt=this[rt+7];void 0!==kt&&void 0!==Lt||_i(rt,this.length-8);const cr=kt+256*this[++rt]+65536*this[++rt]+this[++rt]*2**24,Yr=this[++rt]+256*this[++rt]+65536*this[++rt]+Lt*2**24;return BigInt(cr)+(BigInt(Yr)<<BigInt(32))}),P.prototype.readBigUInt64BE=xo(function(rt){Nn(rt>>>=0,"offset");const kt=this[rt],Lt=this[rt+7];void 0!==kt&&void 0!==Lt||_i(rt,this.length-8);const cr=kt*2**24+65536*this[++rt]+256*this[++rt]+this[++rt],Yr=this[++rt]*2**24+65536*this[++rt]+256*this[++rt]+Lt;return(BigInt(cr)<<BigInt(32))+BigInt(Yr)}),P.prototype.readIntLE=function(rt,kt,Lt){rt>>>=0,kt>>>=0,Lt||Un(rt,kt,this.length);let cr=this[rt],Yr=1,li=0;for(;++li<kt&&(Yr*=256);)cr+=this[rt+li]*Yr;return Yr*=128,cr>=Yr&&(cr-=Math.pow(2,8*kt)),cr},P.prototype.readIntBE=function(rt,kt,Lt){rt>>>=0,kt>>>=0,Lt||Un(rt,kt,this.length);let cr=kt,Yr=1,li=this[rt+--cr];for(;cr>0&&(Yr*=256);)li+=this[rt+--cr]*Yr;return Yr*=128,li>=Yr&&(li-=Math.pow(2,8*kt)),li},P.prototype.readInt8=function(rt,kt){return rt>>>=0,kt||Un(rt,1,this.length),128&this[rt]?-1*(255-this[rt]+1):this[rt]},P.prototype.readInt16LE=function(rt,kt){rt>>>=0,kt||Un(rt,2,this.length);const Lt=this[rt]|this[rt+1]<<8;return 32768&Lt?4294901760|Lt:Lt},P.prototype.readInt16BE=function(rt,kt){rt>>>=0,kt||Un(rt,2,this.length);const Lt=this[rt+1]|this[rt]<<8;return 32768&Lt?4294901760|Lt:Lt},P.prototype.readInt32LE=function(rt,kt){return rt>>>=0,kt||Un(rt,4,this.length),this[rt]|this[rt+1]<<8|this[rt+2]<<16|this[rt+3]<<24},P.prototype.readInt32BE=function(rt,kt){return rt>>>=0,kt||Un(rt,4,this.length),this[rt]<<24|this[rt+1]<<16|this[rt+2]<<8|this[rt+3]},P.prototype.readBigInt64LE=xo(function(rt){Nn(rt>>>=0,"offset");const kt=this[rt],Lt=this[rt+7];return void 0!==kt&&void 0!==Lt||_i(rt,this.length-8),(BigInt(this[rt+4]+256*this[rt+5]+65536*this[rt+6]+(Lt<<24))<<BigInt(32))+BigInt(kt+256*this[++rt]+65536*this[++rt]+this[++rt]*2**24)}),P.prototype.readBigInt64BE=xo(function(rt){Nn(rt>>>=0,"offset");const kt=this[rt],Lt=this[rt+7];void 0!==kt&&void 0!==Lt||_i(rt,this.length-8);const cr=(kt<<24)+65536*this[++rt]+256*this[++rt]+this[++rt];return(BigInt(cr)<<BigInt(32))+BigInt(this[++rt]*2**24+65536*this[++rt]+256*this[++rt]+Lt)}),P.prototype.readFloatLE=function(rt,kt){return rt>>>=0,kt||Un(rt,4,this.length),l.read(this,rt,!0,23,4)},P.prototype.readFloatBE=function(rt,kt){return rt>>>=0,kt||Un(rt,4,this.length),l.read(this,rt,!1,23,4)},P.prototype.readDoubleLE=function(rt,kt){return rt>>>=0,kt||Un(rt,8,this.length),l.read(this,rt,!0,52,8)},P.prototype.readDoubleBE=function(rt,kt){return rt>>>=0,kt||Un(rt,8,this.length),l.read(this,rt,!1,52,8)},P.prototype.writeUintLE=P.prototype.writeUIntLE=function(rt,kt,Lt,cr){rt=+rt,kt>>>=0,Lt>>>=0,!cr&&lr(this,rt,kt,Lt,Math.pow(2,8*Lt)-1,0);let Yr=1,li=0;for(this[kt]=255&rt;++li<Lt&&(Yr*=256);)this[kt+li]=rt/Yr&255;return kt+Lt},P.prototype.writeUintBE=P.prototype.writeUIntBE=function(rt,kt,Lt,cr){rt=+rt,kt>>>=0,Lt>>>=0,!cr&&lr(this,rt,kt,Lt,Math.pow(2,8*Lt)-1,0);let Yr=Lt-1,li=1;for(this[kt+Yr]=255&rt;--Yr>=0&&(li*=256);)this[kt+Yr]=rt/li&255;return kt+Lt},P.prototype.writeUint8=P.prototype.writeUInt8=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,1,255,0),this[kt]=255&rt,kt+1},P.prototype.writeUint16LE=P.prototype.writeUInt16LE=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,2,65535,0),this[kt]=255&rt,this[kt+1]=rt>>>8,kt+2},P.prototype.writeUint16BE=P.prototype.writeUInt16BE=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,2,65535,0),this[kt]=rt>>>8,this[kt+1]=255&rt,kt+2},P.prototype.writeUint32LE=P.prototype.writeUInt32LE=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,4,4294967295,0),this[kt+3]=rt>>>24,this[kt+2]=rt>>>16,this[kt+1]=rt>>>8,this[kt]=255&rt,kt+4},P.prototype.writeUint32BE=P.prototype.writeUInt32BE=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,4,4294967295,0),this[kt]=rt>>>24,this[kt+1]=rt>>>16,this[kt+2]=rt>>>8,this[kt+3]=255&rt,kt+4},P.prototype.writeBigUInt64LE=xo(function(rt,kt=0){return ar(this,rt,kt,BigInt(0),BigInt("0xffffffffffffffff"))}),P.prototype.writeBigUInt64BE=xo(function(rt,kt=0){return Cr(this,rt,kt,BigInt(0),BigInt("0xffffffffffffffff"))}),P.prototype.writeIntLE=function(rt,kt,Lt,cr){if(rt=+rt,kt>>>=0,!cr){const _a=Math.pow(2,8*Lt-1);lr(this,rt,kt,Lt,_a-1,-_a)}let Yr=0,li=1,eo=0;for(this[kt]=255&rt;++Yr<Lt&&(li*=256);)rt<0&&0===eo&&0!==this[kt+Yr-1]&&(eo=1),this[kt+Yr]=(rt/li>>0)-eo&255;return kt+Lt},P.prototype.writeIntBE=function(rt,kt,Lt,cr){if(rt=+rt,kt>>>=0,!cr){const _a=Math.pow(2,8*Lt-1);lr(this,rt,kt,Lt,_a-1,-_a)}let Yr=Lt-1,li=1,eo=0;for(this[kt+Yr]=255&rt;--Yr>=0&&(li*=256);)rt<0&&0===eo&&0!==this[kt+Yr+1]&&(eo=1),this[kt+Yr]=(rt/li>>0)-eo&255;return kt+Lt},P.prototype.writeInt8=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,1,127,-128),rt<0&&(rt=255+rt+1),this[kt]=255&rt,kt+1},P.prototype.writeInt16LE=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,2,32767,-32768),this[kt]=255&rt,this[kt+1]=rt>>>8,kt+2},P.prototype.writeInt16BE=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,2,32767,-32768),this[kt]=rt>>>8,this[kt+1]=255&rt,kt+2},P.prototype.writeInt32LE=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,4,2147483647,-2147483648),this[kt]=255&rt,this[kt+1]=rt>>>8,this[kt+2]=rt>>>16,this[kt+3]=rt>>>24,kt+4},P.prototype.writeInt32BE=function(rt,kt,Lt){return rt=+rt,kt>>>=0,Lt||lr(this,rt,kt,4,2147483647,-2147483648),rt<0&&(rt=4294967295+rt+1),this[kt]=rt>>>24,this[kt+1]=rt>>>16,this[kt+2]=rt>>>8,this[kt+3]=255&rt,kt+4},P.prototype.writeBigInt64LE=xo(function(rt,kt=0){return ar(this,rt,kt,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),P.prototype.writeBigInt64BE=xo(function(rt,kt=0){return Cr(this,rt,kt,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),P.prototype.writeFloatLE=function(rt,kt,Lt){return ai(this,rt,kt,!0,Lt)},P.prototype.writeFloatBE=function(rt,kt,Lt){return ai(this,rt,kt,!1,Lt)},P.prototype.writeDoubleLE=function(rt,kt,Lt){return ho(this,rt,kt,!0,Lt)},P.prototype.writeDoubleBE=function(rt,kt,Lt){return ho(this,rt,kt,!1,Lt)},P.prototype.copy=function(rt,kt,Lt,cr){if(!P.isBuffer(rt))throw new TypeError("argument should be a Buffer");if(Lt||(Lt=0),cr||0===cr||(cr=this.length),kt>=rt.length&&(kt=rt.length),kt||(kt=0),cr>0&&cr<Lt&&(cr=Lt),cr===Lt||0===rt.length||0===this.length)return 0;if(kt<0)throw new RangeError("targetStart out of bounds");if(Lt<0||Lt>=this.length)throw new RangeError("Index out of range");if(cr<0)throw new RangeError("sourceEnd out of bounds");cr>this.length&&(cr=this.length),rt.length-kt<cr-Lt&&(cr=rt.length-kt+Lt);const Yr=cr-Lt;return this===rt&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(kt,Lt,cr):Uint8Array.prototype.set.call(rt,this.subarray(Lt,cr),kt),Yr},P.prototype.fill=function(rt,kt,Lt,cr){if("string"==typeof rt){if("string"==typeof kt?(cr=kt,kt=0,Lt=this.length):"string"==typeof Lt&&(cr=Lt,Lt=this.length),void 0!==cr&&"string"!=typeof cr)throw new TypeError("encoding must be a string");if("string"==typeof cr&&!P.isEncoding(cr))throw new TypeError("Unknown encoding: "+cr);if(1===rt.length){const li=rt.charCodeAt(0);("utf8"===cr&&li<128||"latin1"===cr)&&(rt=li)}}else"number"==typeof rt?rt&=255:"boolean"==typeof rt&&(rt=Number(rt));if(kt<0||this.length<kt||this.length<Lt)throw new RangeError("Out of range index");if(Lt<=kt)return this;let Yr;if(kt>>>=0,Lt=void 0===Lt?this.length:Lt>>>0,rt||(rt=0),"number"==typeof rt)for(Yr=kt;Yr<Lt;++Yr)this[Yr]=rt;else{const li=P.isBuffer(rt)?rt:P.from(rt,cr),eo=li.length;if(0===eo)throw new TypeError('The value "'+rt+'" is invalid for argument "value"');for(Yr=0;Yr<Lt-kt;++Yr)this[Yr+kt]=li[Yr%eo]}return this};const Yi={};function lo(rt,kt,Lt){Yi[rt]=class extends Lt{constructor(){super(),Object.defineProperty(this,"message",{value:kt.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${rt}]`,delete this.name}get code(){return rt}set code(cr){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:cr,writable:!0})}toString(){return`${this.name} [${rt}]: ${this.message}`}}}function pi(rt){let kt="",Lt=rt.length;const cr="-"===rt[0]?1:0;for(;Lt>=cr+4;Lt-=3)kt=`_${rt.slice(Lt-3,Lt)}${kt}`;return`${rt.slice(0,Lt)}${kt}`}function Kn(rt,kt,Lt,cr,Yr,li){if(rt>Lt||rt<kt){const eo="bigint"==typeof kt?"n":"";let _a;throw _a=li>3?0===kt||kt===BigInt(0)?`>= 0${eo} and < 2${eo} ** ${8*(li+1)}${eo}`:`>= -(2${eo} ** ${8*(li+1)-1}${eo}) and < 2 ** ${8*(li+1)-1}${eo}`:`>= ${kt}${eo} and <= ${Lt}${eo}`,new Yi.ERR_OUT_OF_RANGE("value",_a,rt)}var eo,_a,ps;eo=cr,ps=li,Nn(_a=Yr,"offset"),void 0!==eo[_a]&&void 0!==eo[_a+ps]||_i(_a,eo.length-(ps+1))}function Nn(rt,kt){if("number"!=typeof rt)throw new Yi.ERR_INVALID_ARG_TYPE(kt,"number",rt)}function _i(rt,kt,Lt){throw Math.floor(rt)!==rt?(Nn(rt,Lt),new Yi.ERR_OUT_OF_RANGE(Lt||"offset","an integer",rt)):kt<0?new Yi.ERR_BUFFER_OUT_OF_BOUNDS:new Yi.ERR_OUT_OF_RANGE(Lt||"offset",`>= ${Lt?1:0} and <= ${kt}`,rt)}lo("ERR_BUFFER_OUT_OF_BOUNDS",function(rt){return rt?`${rt} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),lo("ERR_INVALID_ARG_TYPE",function(rt,kt){return`The "${rt}" argument must be of type number. Received type ${typeof kt}`},TypeError),lo("ERR_OUT_OF_RANGE",function(rt,kt,Lt){let cr=`The value of "${rt}" is out of range.`,Yr=Lt;return Number.isInteger(Lt)&&Math.abs(Lt)>2**32?Yr=pi(String(Lt)):"bigint"==typeof Lt&&(Yr=String(Lt),(Lt>BigInt(2)**BigInt(32)||Lt<-(BigInt(2)**BigInt(32)))&&(Yr=pi(Yr)),Yr+="n"),cr+=` It must be ${kt}. Received ${Yr}`,cr},RangeError);const Zi=/[^+/0-9A-Za-z-_]/g;function So(rt,kt){let Lt;kt=kt||1/0;const cr=rt.length;let Yr=null;const li=[];for(let eo=0;eo<cr;++eo){if(Lt=rt.charCodeAt(eo),Lt>55295&&Lt<57344){if(!Yr){if(Lt>56319){(kt-=3)>-1&&li.push(239,191,189);continue}if(eo+1===cr){(kt-=3)>-1&&li.push(239,191,189);continue}Yr=Lt;continue}if(Lt<56320){(kt-=3)>-1&&li.push(239,191,189),Yr=Lt;continue}Lt=65536+(Yr-55296<<10|Lt-56320)}else Yr&&(kt-=3)>-1&&li.push(239,191,189);if(Yr=null,Lt<128){if((kt-=1)<0)break;li.push(Lt)}else if(Lt<2048){if((kt-=2)<0)break;li.push(Lt>>6|192,63&Lt|128)}else if(Lt<65536){if((kt-=3)<0)break;li.push(Lt>>12|224,Lt>>6&63|128,63&Lt|128)}else{if(!(Lt<1114112))throw new Error("Invalid code point");if((kt-=4)<0)break;li.push(Lt>>18|240,Lt>>12&63|128,Lt>>6&63|128,63&Lt|128)}}return li}function us(rt){return o.toByteArray(function(kt){if((kt=(kt=kt.split("=")[0]).trim().replace(Zi,"")).length<2)return"";for(;kt.length%4!=0;)kt+="=";return kt}(rt))}function Zo(rt,kt,Lt,cr){let Yr;for(Yr=0;Yr<cr&&!(Yr+Lt>=kt.length||Yr>=rt.length);++Yr)kt[Yr+Lt]=rt[Yr];return Yr}function pa(rt,kt){return rt instanceof kt||null!=rt&&null!=rt.constructor&&null!=rt.constructor.name&&rt.constructor.name===kt.name}function va(rt){return rt!=rt}const qi=function(){const rt="0123456789abcdef",kt=new Array(256);for(let Lt=0;Lt<16;++Lt){const cr=16*Lt;for(let Yr=0;Yr<16;++Yr)kt[cr+Yr]=rt[Lt]+rt[Yr]}return kt}();function xo(rt){return typeof BigInt>"u"?$o:rt}function $o(){throw new Error("BigInt not supported")}},8171:(t,i,n)=>{n(6450);var o=n(4058).Object,l=t.exports=function(_,v,O){return o.defineProperty(_,v,O)};o.defineProperty.sham&&(l.sham=!0)},4883:(t,i,n)=>{var o=n(1899),l=n(7475),_=n(9826),v=o.TypeError;t.exports=function(O){if(l(O))return O;throw v(_(O)+" is not a function")}},6059:(t,i,n)=>{var o=n(1899),l=n(941),_=o.String,v=o.TypeError;t.exports=function(O){if(l(O))return O;throw v(_(O)+" is not an object")}},2532:(t,i,n)=>{var o=n(5329),l=o({}.toString),_=o("".slice);t.exports=function(v){return _(l(v),8,-1)}},2029:(t,i,n)=>{var o=n(5746),l=n(5988),_=n(1887);t.exports=o?function(v,O,P){return l.f(v,O,_(1,P))}:function(v,O,P){return v[O]=P,v}},1887:t=>{t.exports=function(i,n){return{enumerable:!(1&i),configurable:!(2&i),writable:!(4&i),value:n}}},5746:(t,i,n)=>{var o=n(5981);t.exports=!o(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},1333:(t,i,n)=>{var o=n(1899),l=n(941),_=o.document,v=l(_)&&l(_.createElement);t.exports=function(O){return v?_.createElement(O):{}}},2861:(t,i,n)=>{var o=n(224);t.exports=o("navigator","userAgent")||""},3385:(t,i,n)=>{var o,l,_=n(1899),v=n(2861),O=_.process,P=_.Deno,G=O&&O.versions||P&&P.version,K=G&&G.v8;K&&(l=(o=K.split("."))[0]>0&&o[0]<4?1:+(o[0]+o[1])),!l&&v&&(!(o=v.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=v.match(/Chrome\/(\d+)/))&&(l=+o[1]),t.exports=l},6887:(t,i,n)=>{var o=n(1899),l=n(9730),_=n(5329),v=n(7475),O=n(9677).f,P=n(7252),G=n(4058),K=n(6843),oe=n(2029),ue=n(953),pe=function(ye){var Ue=function(xe,ke,we){if(this instanceof Ue){switch(arguments.length){case 0:return new ye;case 1:return new ye(xe);case 2:return new ye(xe,ke)}return new ye(xe,ke,we)}return l(ye,this,arguments)};return Ue.prototype=ye.prototype,Ue};t.exports=function(ye,Ue){var xe,ke,we,Z,Ft,Dt,Yt,ln,$n=ye.target,nn=ye.global,Jn=ye.stat,zn=ye.proto,Zr=nn?o:Jn?o[$n]:(o[$n]||{}).prototype,$r=nn?G:G[$n]||oe(G,$n,{})[$n],ui=$r.prototype;for(we in Ue)xe=!P(nn?we:$n+(Jn?".":"#")+we,ye.forced)&&Zr&&ue(Zr,we),Ft=$r[we],xe&&(Dt=ye.noTargetGet?(ln=O(Zr,we))&&ln.value:Zr[we]),Z=xe&&Dt?Dt:Ue[we],xe&&typeof Ft==typeof Z||(Yt=ye.bind&&xe?K(Z,o):ye.wrap&&xe?pe(Z):zn&&v(Z)?_(Z):Z,(ye.sham||Z&&Z.sham||Ft&&Ft.sham)&&oe(Yt,"sham",!0),oe($r,we,Yt),zn&&(ue(G,ke=$n+"Prototype")||oe(G,ke,{}),oe(G[ke],we,Z),ye.real&&ui&&!ui[we]&&oe(ui,we,Z)))}},5981:t=>{t.exports=function(i){try{return!!i()}catch{return!0}}},9730:(t,i,n)=>{var o=n(8285),l=Function.prototype,_=l.apply,v=l.call;t.exports="object"==typeof Reflect&&Reflect.apply||(o?v.bind(_):function(){return v.apply(_,arguments)})},6843:(t,i,n)=>{var o=n(5329),l=n(4883),_=n(8285),v=o(o.bind);t.exports=function(O,P){return l(O),void 0===P?O:_?v(O,P):function(){return O.apply(P,arguments)}}},8285:(t,i,n)=>{var o=n(5981);t.exports=!o(function(){var l=function(){}.bind();return"function"!=typeof l||l.hasOwnProperty("prototype")})},8834:(t,i,n)=>{var o=n(8285),l=Function.prototype.call;t.exports=o?l.bind(l):function(){return l.apply(l,arguments)}},5329:(t,i,n)=>{var o=n(8285),l=Function.prototype,v=l.call,O=o&&l.bind.bind(v,v);t.exports=o?function(P){return P&&O(P)}:function(P){return P&&function(){return v.apply(P,arguments)}}},224:(t,i,n)=>{var o=n(4058),l=n(1899),_=n(7475),v=function(O){return _(O)?O:void 0};t.exports=function(O,P){return arguments.length<2?v(o[O])||v(l[O]):o[O]&&o[O][P]||l[O]&&l[O][P]}},9733:(t,i,n)=>{var o=n(4883);t.exports=function(l,_){var v=l[_];return null==v?void 0:o(v)}},1899:(t,i,n)=>{var o=function(l){return l&&l.Math==Math&&l};t.exports=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},953:(t,i,n)=>{var o=n(5329),l=n(9678),_=o({}.hasOwnProperty);t.exports=Object.hasOwn||function(v,O){return _(l(v),O)}},2840:(t,i,n)=>{var o=n(5746),l=n(5981),_=n(1333);t.exports=!o&&!l(function(){return 7!=Object.defineProperty(_("div"),"a",{get:function(){return 7}}).a})},7026:(t,i,n)=>{var o=n(1899),l=n(5329),_=n(5981),v=n(2532),O=o.Object,P=l("".split);t.exports=_(function(){return!O("z").propertyIsEnumerable(0)})?function(G){return"String"==v(G)?P(G,""):O(G)}:O},7475:t=>{t.exports=function(i){return"function"==typeof i}},7252:(t,i,n)=>{var o=n(5981),l=n(7475),_=/#|\.prototype\./,v=function(oe,ue){var pe=P[O(oe)];return pe==K||pe!=G&&(l(ue)?o(ue):!!ue)},O=v.normalize=function(oe){return String(oe).replace(_,".").toLowerCase()},P=v.data={},G=v.NATIVE="N",K=v.POLYFILL="P";t.exports=v},941:(t,i,n)=>{var o=n(7475);t.exports=function(l){return"object"==typeof l?null!==l:o(l)}},2529:t=>{t.exports=!0},6664:(t,i,n)=>{var o=n(1899),l=n(224),_=n(7475),v=n(7046),O=n(2302),P=o.Object;t.exports=O?function(G){return"symbol"==typeof G}:function(G){var K=l("Symbol");return _(K)&&v(K.prototype,P(G))}},2497:(t,i,n)=>{var o=n(3385),l=n(5981);t.exports=!!Object.getOwnPropertySymbols&&!l(function(){var _=Symbol();return!String(_)||!(Object(_)instanceof Symbol)||!Symbol.sham&&o&&o<41})},5988:(t,i,n)=>{var o=n(1899),l=n(5746),_=n(2840),v=n(3937),O=n(6059),P=n(3894),G=o.TypeError,K=Object.defineProperty,oe=Object.getOwnPropertyDescriptor;i.f=l?v?function(Ue,xe,ke){if(O(Ue),xe=P(xe),O(ke),"function"==typeof Ue&&"prototype"===xe&&"value"in ke&&"writable"in ke&&!ke.writable){var we=oe(Ue,xe);we&&we.writable&&(Ue[xe]=ke.value,ke={configurable:"configurable"in ke?ke.configurable:we.configurable,enumerable:"enumerable"in ke?ke.enumerable:we.enumerable,writable:!1})}return K(Ue,xe,ke)}:K:function(Ue,xe,ke){if(O(Ue),xe=P(xe),O(ke),_)try{return K(Ue,xe,ke)}catch{}if("get"in ke||"set"in ke)throw G("Accessors not supported");return"value"in ke&&(Ue[xe]=ke.value),Ue}},9677:(t,i,n)=>{var o=n(5746),l=n(8834),_=n(6760),v=n(1887),O=n(4529),P=n(3894),G=n(953),K=n(2840),oe=Object.getOwnPropertyDescriptor;i.f=o?oe:function(ue,pe){if(ue=O(ue),pe=P(pe),K)try{return oe(ue,pe)}catch{}if(G(ue,pe))return v(!l(_.f,ue,pe),ue[pe])}},7046:(t,i,n)=>{var o=n(5329);t.exports=o({}.isPrototypeOf)},6760:(t,i)=>{var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,l=o&&!n.call({1:2},1);i.f=l?function(_){var v=o(this,_);return!!v&&v.enumerable}:n},9811:(t,i,n)=>{var o=n(1899),l=n(8834),_=n(7475),v=n(941),O=o.TypeError;t.exports=function(P,G){var K,oe;if("string"===G&&_(K=P.toString)&&!v(oe=l(K,P))||_(K=P.valueOf)&&!v(oe=l(K,P))||"string"!==G&&_(K=P.toString)&&!v(oe=l(K,P)))return oe;throw O("Can't convert object to primitive value")}},4058:t=>{t.exports={}},8219:(t,i,n)=>{var o=n(1899).TypeError;t.exports=function(l){if(null==l)throw o("Can't call method on "+l);return l}},4911:(t,i,n)=>{var o=n(1899),l=Object.defineProperty;t.exports=function(_,v){try{l(o,_,{value:v,configurable:!0,writable:!0})}catch{o[_]=v}return v}},3030:(t,i,n)=>{var o=n(1899),l=n(4911),_="__core-js_shared__",v=o[_]||l(_,{});t.exports=v},8726:(t,i,n)=>{var o=n(2529),l=n(3030);(t.exports=function(_,v){return l[_]||(l[_]=void 0!==v?v:{})})("versions",[]).push({version:"3.20.3",mode:o?"pure":"global",copyright:"\xa9 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.20.3/LICENSE",source:"https://github.com/zloirock/core-js"})},4529:(t,i,n)=>{var o=n(7026),l=n(8219);t.exports=function(_){return o(l(_))}},9678:(t,i,n)=>{var o=n(1899),l=n(8219),_=o.Object;t.exports=function(v){return _(l(v))}},6935:(t,i,n)=>{var o=n(1899),l=n(8834),_=n(941),v=n(6664),O=n(9733),P=n(9811),G=n(9813),K=o.TypeError,oe=G("toPrimitive");t.exports=function(ue,pe){if(!_(ue)||v(ue))return ue;var ye,Ue=O(ue,oe);if(Ue){if(void 0===pe&&(pe="default"),ye=l(Ue,ue,pe),!_(ye)||v(ye))return ye;throw K("Can't convert object to primitive value")}return void 0===pe&&(pe="number"),P(ue,pe)}},3894:(t,i,n)=>{var o=n(6935),l=n(6664);t.exports=function(_){var v=o(_,"string");return l(v)?v:v+""}},9826:(t,i,n)=>{var o=n(1899).String;t.exports=function(l){try{return o(l)}catch{return"Object"}}},9418:(t,i,n)=>{var o=n(5329),l=0,_=Math.random(),v=o(1..toString);t.exports=function(O){return"Symbol("+(void 0===O?"":O)+")_"+v(++l+_,36)}},2302:(t,i,n)=>{var o=n(2497);t.exports=o&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},3937:(t,i,n)=>{var o=n(5746),l=n(5981);t.exports=o&&l(function(){return 42!=Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},9813:(t,i,n)=>{var o=n(1899),l=n(8726),_=n(953),v=n(9418),O=n(2497),P=n(2302),G=l("wks"),K=o.Symbol,oe=K&&K.for,ue=P?K:K&&K.withoutSetter||v;t.exports=function(pe){if(!_(G,pe)||!O&&"string"!=typeof G[pe]){var ye="Symbol."+pe;G[pe]=O&&_(K,pe)?K[pe]:P&&oe?oe(ye):ue(ye)}return G[pe]}},6450:(t,i,n)=>{var o=n(6887),l=n(5746),_=n(5988).f;o({target:"Object",stat:!0,forced:Object.defineProperty!==_,sham:!l},{defineProperty:_})},1910:(t,i,n)=>{var o=n(8171);t.exports=o},7698:(t,i,n)=>{var o=n(8764).Buffer;function l(G){return G instanceof o||G instanceof Date||G instanceof RegExp}function _(G){if(G instanceof o){var K=o.alloc?o.alloc(G.length):new o(G.length);return G.copy(K),K}if(G instanceof Date)return new Date(G.getTime());if(G instanceof RegExp)return new RegExp(G);throw new Error("Unexpected situation")}function v(G){var K=[];return G.forEach(function(oe,ue){K[ue]="object"==typeof oe&&null!==oe?Array.isArray(oe)?v(oe):l(oe)?_(oe):P({},oe):oe}),K}function O(G,K){return"__proto__"===K?void 0:G[K]}var P=t.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var G,K,oe=arguments[0];return Array.prototype.slice.call(arguments,1).forEach(function(pe){"object"!=typeof pe||null===pe||Array.isArray(pe)||Object.keys(pe).forEach(function(ye){return K=O(oe,ye),(G=O(pe,ye))===oe?void 0:"object"!=typeof G||null===G?void(oe[ye]=G):Array.isArray(G)?void(oe[ye]=v(G)):l(G)?void(oe[ye]=_(G)):"object"!=typeof K||null===K||Array.isArray(K)?void(oe[ye]=P({},G)):void(oe[ye]=P(K,G))})}),oe}},7187:t=>{var i,n="object"==typeof Reflect?Reflect:null,o=n&&"function"==typeof n.apply?n.apply:function(xe,ke,we){return Function.prototype.apply.call(xe,ke,we)};i=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(xe){return Object.getOwnPropertyNames(xe).concat(Object.getOwnPropertySymbols(xe))}:function(xe){return Object.getOwnPropertyNames(xe)};var l=Number.isNaN||function(xe){return xe!=xe};function _(){_.init.call(this)}t.exports=_,t.exports.once=function(xe,ke){return new Promise(function(we,Z){function Ft(Yt){xe.removeListener(ke,Dt),Z(Yt)}function Dt(){"function"==typeof xe.removeListener&&xe.removeListener("error",Ft),we([].slice.call(arguments))}var Yt;Ue(xe,ke,Dt,{once:!0}),"error"!==ke&&("function"==typeof(Yt=xe).on&&Ue(Yt,"error",Ft,{once:!0}))})},_.EventEmitter=_,_.prototype._events=void 0,_.prototype._eventsCount=0,_.prototype._maxListeners=void 0;var v=10;function O(xe){if("function"!=typeof xe)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof xe)}function P(xe){return void 0===xe._maxListeners?_.defaultMaxListeners:xe._maxListeners}function G(xe,ke,we,Z){var Ft,Dt,Yt;if(O(we),void 0===(Dt=xe._events)?(Dt=xe._events=Object.create(null),xe._eventsCount=0):(void 0!==Dt.newListener&&(xe.emit("newListener",ke,we.listener?we.listener:we),Dt=xe._events),Yt=Dt[ke]),void 0===Yt)Yt=Dt[ke]=we,++xe._eventsCount;else if("function"==typeof Yt?Yt=Dt[ke]=Z?[we,Yt]:[Yt,we]:Z?Yt.unshift(we):Yt.push(we),(Ft=P(xe))>0&&Yt.length>Ft&&!Yt.warned){Yt.warned=!0;var $n=new Error("Possible EventEmitter memory leak detected. "+Yt.length+" "+String(ke)+" listeners added. Use emitter.setMaxListeners() to increase limit");$n.name="MaxListenersExceededWarning",$n.emitter=xe,$n.type=ke,$n.count=Yt.length,console&&console.warn&&console.warn($n)}return xe}function K(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function oe(xe,ke,we){var Z={fired:!1,wrapFn:void 0,target:xe,type:ke,listener:we},Ft=K.bind(Z);return Ft.listener=we,Z.wrapFn=Ft,Ft}function ue(xe,ke,we){var Z=xe._events;if(void 0===Z)return[];var Ft=Z[ke];return void 0===Ft?[]:"function"==typeof Ft?we?[Ft.listener||Ft]:[Ft]:we?function(Dt){for(var Yt=new Array(Dt.length),ln=0;ln<Yt.length;++ln)Yt[ln]=Dt[ln].listener||Dt[ln];return Yt}(Ft):ye(Ft,Ft.length)}function pe(xe){var ke=this._events;if(void 0!==ke){var we=ke[xe];if("function"==typeof we)return 1;if(void 0!==we)return we.length}return 0}function ye(xe,ke){for(var we=new Array(ke),Z=0;Z<ke;++Z)we[Z]=xe[Z];return we}function Ue(xe,ke,we,Z){if("function"==typeof xe.on)Z.once?xe.once(ke,we):xe.on(ke,we);else{if("function"!=typeof xe.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof xe);xe.addEventListener(ke,function Ft(Dt){Z.once&&xe.removeEventListener(ke,Ft),we(Dt)})}}Object.defineProperty(_,"defaultMaxListeners",{enumerable:!0,get:function(){return v},set:function(xe){if("number"!=typeof xe||xe<0||l(xe))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+xe+".");v=xe}}),_.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},_.prototype.setMaxListeners=function(xe){if("number"!=typeof xe||xe<0||l(xe))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+xe+".");return this._maxListeners=xe,this},_.prototype.getMaxListeners=function(){return P(this)},_.prototype.emit=function(xe){for(var ke=[],we=1;we<arguments.length;we++)ke.push(arguments[we]);var Z="error"===xe,Ft=this._events;if(void 0!==Ft)Z=Z&&void 0===Ft.error;else if(!Z)return!1;if(Z){var Dt;if(ke.length>0&&(Dt=ke[0]),Dt instanceof Error)throw Dt;var Yt=new Error("Unhandled error."+(Dt?" ("+Dt.message+")":""));throw Yt.context=Dt,Yt}var ln=Ft[xe];if(void 0===ln)return!1;if("function"==typeof ln)o(ln,this,ke);else{var $n=ln.length,nn=ye(ln,$n);for(we=0;we<$n;++we)o(nn[we],this,ke)}return!0},_.prototype.on=_.prototype.addListener=function(xe,ke){return G(this,xe,ke,!1)},_.prototype.prependListener=function(xe,ke){return G(this,xe,ke,!0)},_.prototype.once=function(xe,ke){return O(ke),this.on(xe,oe(this,xe,ke)),this},_.prototype.prependOnceListener=function(xe,ke){return O(ke),this.prependListener(xe,oe(this,xe,ke)),this},_.prototype.off=_.prototype.removeListener=function(xe,ke){var we,Z,Ft,Dt,Yt;if(O(ke),void 0===(Z=this._events))return this;if(void 0===(we=Z[xe]))return this;if(we===ke||we.listener===ke)0==--this._eventsCount?this._events=Object.create(null):(delete Z[xe],Z.removeListener&&this.emit("removeListener",xe,we.listener||ke));else if("function"!=typeof we){for(Ft=-1,Dt=we.length-1;Dt>=0;Dt--)if(we[Dt]===ke||we[Dt].listener===ke){Yt=we[Dt].listener,Ft=Dt;break}if(Ft<0)return this;0===Ft?we.shift():function(ln,$n){for(;$n+1<ln.length;$n++)ln[$n]=ln[$n+1];ln.pop()}(we,Ft),1===we.length&&(Z[xe]=we[0]),void 0!==Z.removeListener&&this.emit("removeListener",xe,Yt||ke)}return this},_.prototype.removeAllListeners=function(xe){var ke,we,Z;if(void 0===(we=this._events))return this;if(void 0===we.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==we[xe]&&(0==--this._eventsCount?this._events=Object.create(null):delete we[xe]),this;if(0===arguments.length){var Ft,Dt=Object.keys(we);for(Z=0;Z<Dt.length;++Z)"removeListener"!==(Ft=Dt[Z])&&this.removeAllListeners(Ft);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(ke=we[xe]))this.removeListener(xe,ke);else if(void 0!==ke)for(Z=ke.length-1;Z>=0;Z--)this.removeListener(xe,ke[Z]);return this},_.prototype.listeners=function(xe){return ue(this,xe,!0)},_.prototype.rawListeners=function(xe){return ue(this,xe,!1)},_.listenerCount=function(xe,ke){return"function"==typeof xe.listenerCount?xe.listenerCount(ke):pe.call(xe,ke)},_.prototype.listenerCount=pe,_.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},5717:t=>{t.exports="function"==typeof Object.create?function(i,n){n&&(i.super_=n,i.prototype=Object.create(n.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}))}:function(i,n){if(n){i.super_=n;var o=function(){};o.prototype=n.prototype,i.prototype=new o,i.prototype.constructor=i}}},4155:t=>{var i,n,o=t.exports={};function l(){throw new Error("setTimeout has not been defined")}function _(){throw new Error("clearTimeout has not been defined")}function v(Ue){if(i===setTimeout)return setTimeout(Ue,0);if((i===l||!i)&&setTimeout)return i=setTimeout,setTimeout(Ue,0);try{return i(Ue,0)}catch{try{return i.call(null,Ue,0)}catch{return i.call(this,Ue,0)}}}!function(){try{i="function"==typeof setTimeout?setTimeout:l}catch{i=l}try{n="function"==typeof clearTimeout?clearTimeout:_}catch{n=_}}();var O,P=[],G=!1,K=-1;function oe(){G&&O&&(G=!1,O.length?P=O.concat(P):K=-1,P.length&&ue())}function ue(){if(!G){var Ue=v(oe);G=!0;for(var xe=P.length;xe;){for(O=P,P=[];++K<xe;)O&&O[K].run();K=-1,xe=P.length}O=null,G=!1,function(ke){if(n===clearTimeout)return clearTimeout(ke);if((n===_||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(ke);try{n(ke)}catch{try{return n.call(null,ke)}catch{return n.call(this,ke)}}}(Ue)}}function pe(Ue,xe){this.fun=Ue,this.array=xe}function ye(){}o.nextTick=function(Ue){var xe=new Array(arguments.length-1);if(arguments.length>1)for(var ke=1;ke<arguments.length;ke++)xe[ke-1]=arguments[ke];P.push(new pe(Ue,xe)),1!==P.length||G||v(ue)},pe.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=ye,o.addListener=ye,o.once=ye,o.off=ye,o.removeListener=ye,o.removeAllListeners=ye,o.emit=ye,o.prependListener=ye,o.prependOnceListener=ye,o.listeners=function(Ue){return[]},o.binding=function(Ue){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(Ue){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},1798:(t,i,n)=>{var o=n(4155),l=65536,v=n(396).Buffer,O=n.g.crypto||n.g.msCrypto;t.exports=O&&O.getRandomValues?function(P,G){if(P>4294967295)throw new RangeError("requested too many random bytes");var K=v.allocUnsafe(P);if(P>0)if(P>l)for(var oe=0;oe<P;oe+=l)O.getRandomValues(K.slice(oe,oe+l));else O.getRandomValues(K);return"function"==typeof G?o.nextTick(function(){G(null,K)}):K}:function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}},4281:t=>{var i={};function n(l,_,v){v||(v=Error);var O=function(P){var G,K;function oe(ue,pe,ye){return P.call(this,"string"==typeof _?_:_(ue,pe,ye))||this}return K=P,(G=oe).prototype=Object.create(K.prototype),G.prototype.constructor=G,G.__proto__=K,oe}(v);O.prototype.name=v.name,O.prototype.code=l,i[l]=O}function o(l,_){if(Array.isArray(l)){var v=l.length;return l=l.map(function(O){return String(O)}),v>2?"one of ".concat(_," ").concat(l.slice(0,v-1).join(", "),", or ")+l[v-1]:2===v?"one of ".concat(_," ").concat(l[0]," or ").concat(l[1]):"of ".concat(_," ").concat(l[0])}return"of ".concat(_," ").concat(String(l))}n("ERR_INVALID_OPT_VALUE",function(l,_){return'The value "'+_+'" is invalid for option "'+l+'"'},TypeError),n("ERR_INVALID_ARG_TYPE",function(l,_,v){var O,K,ue,ye;if("string"==typeof _&&"not "===_.substr(0,"not ".length)?(O="must not be",_=_.replace(/^not /,"")):O="must be",ue=l,(void 0===ye||ye>ue.length)&&(ye=ue.length)," argument"===ue.substring(ye-" argument".length,ye))K="The ".concat(l," ").concat(O," ").concat(o(_,"type"));else{var oe=function(ue,pe,ye){return"number"!=typeof ye&&(ye=0),!(ye+".".length>ue.length)&&-1!==ue.indexOf(".",ye)}(l)?"property":"argument";K='The "'.concat(l,'" ').concat(oe," ").concat(O," ").concat(o(_,"type"))}return K+". Received type ".concat(typeof v)},TypeError),n("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),n("ERR_METHOD_NOT_IMPLEMENTED",function(l){return"The "+l+" method is not implemented"}),n("ERR_STREAM_PREMATURE_CLOSE","Premature close"),n("ERR_STREAM_DESTROYED",function(l){return"Cannot call "+l+" after a stream was destroyed"}),n("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),n("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),n("ERR_STREAM_WRITE_AFTER_END","write after end"),n("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),n("ERR_UNKNOWN_ENCODING",function(l){return"Unknown encoding: "+l},TypeError),n("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),t.exports.q=i},6753:(t,i,n)=>{var o=n(4155),l=Object.keys||function(pe){var ye=[];for(var Ue in pe)ye.push(Ue);return ye};t.exports=K;var _=n(9481),v=n(4229);n(5717)(K,_);for(var O=l(v.prototype),P=0;P<O.length;P++){var G=O[P];K.prototype[G]||(K.prototype[G]=v.prototype[G])}function K(pe){if(!(this instanceof K))return new K(pe);_.call(this,pe),v.call(this,pe),this.allowHalfOpen=!0,pe&&(!1===pe.readable&&(this.readable=!1),!1===pe.writable&&(this.writable=!1),!1===pe.allowHalfOpen&&(this.allowHalfOpen=!1,this.once("end",oe)))}function oe(){this._writableState.ended||o.nextTick(ue,this)}function ue(pe){pe.end()}Object.defineProperty(K.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(K.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(K.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(K.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(pe){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=pe,this._writableState.destroyed=pe)}})},2725:(t,i,n)=>{t.exports=l;var o=n(4605);function l(_){if(!(this instanceof l))return new l(_);o.call(this,_)}n(5717)(l,o),l.prototype._transform=function(_,v,O){O(null,_)}},9481:(t,i,n)=>{var o,l=n(4155);t.exports=nn,nn.ReadableState=$n,n(7187);var G,_=function(Kn,Nn){return Kn.listeners(Nn).length},v=n(2503),O=n(8764).Buffer,P=n.g.Uint8Array||function(){},K=n(4616);G=K&&K.debuglog?K.debuglog("stream"):function(){};var oe,ue,pe,ye=n(7327),Ue=n(1195),xe=n(2457).getHighWaterMark,ke=n(4281).q,we=ke.ERR_INVALID_ARG_TYPE,Z=ke.ERR_STREAM_PUSH_AFTER_EOF,Ft=ke.ERR_METHOD_NOT_IMPLEMENTED,Dt=ke.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;n(5717)(nn,v);var Yt=Ue.errorOrDestroy,ln=["error","close","destroy","pause","resume"];function $n(Kn,Nn,_i){o=o||n(6753),"boolean"!=typeof _i&&(_i=Nn instanceof o),this.objectMode=!!(Kn=Kn||{}).objectMode,_i&&(this.objectMode=this.objectMode||!!Kn.readableObjectMode),this.highWaterMark=xe(this,Kn,"readableHighWaterMark",_i),this.buffer=new ye,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==Kn.emitClose,this.autoDestroy=!!Kn.autoDestroy,this.destroyed=!1,this.defaultEncoding=Kn.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,Kn.encoding&&(oe||(oe=n(2553).s),this.decoder=new oe(Kn.encoding),this.encoding=Kn.encoding)}function nn(Kn){if(o=o||n(6753),!(this instanceof nn))return new nn(Kn);this._readableState=new $n(Kn,this,this instanceof o),this.readable=!0,Kn&&("function"==typeof Kn.read&&(this._read=Kn.read),"function"==typeof Kn.destroy&&(this._destroy=Kn.destroy)),v.call(this)}function Jn(Kn,Nn,_i,Zi,So){G("readableAddChunk",Nn);var us,pa,va,qi,xo,Zo=Kn._readableState;if(null===Nn)Zo.reading=!1,function(pa,va){if(G("onEofChunk"),!va.ended){if(va.decoder){var qi=va.decoder.end();qi&&qi.length&&(va.buffer.push(qi),va.length+=va.objectMode?1:qi.length)}va.ended=!0,va.sync?ui(pa):(va.needReadable=!1,va.emittedReadable||(va.emittedReadable=!0,gi(pa)))}}(Kn,Zo);else if(So||(pa=Zo,O.isBuffer(xo=va=Nn)||xo instanceof P||"string"==typeof va||void 0===va||pa.objectMode||(qi=new we("chunk",["string","Buffer","Uint8Array"],va)),us=qi),us)Yt(Kn,us);else if(Zo.objectMode||Nn&&Nn.length>0)if("string"==typeof Nn||Zo.objectMode||Object.getPrototypeOf(Nn)===O.prototype||(Nn=function(pa){return O.from(pa)}(Nn)),Zi)Zo.endEmitted?Yt(Kn,new Dt):zn(Kn,Zo,Nn,!0);else if(Zo.ended)Yt(Kn,new Z);else{if(Zo.destroyed)return!1;Zo.reading=!1,Zo.decoder&&!_i?(Nn=Zo.decoder.write(Nn),Zo.objectMode||0!==Nn.length?zn(Kn,Zo,Nn,!1):Un(Kn,Zo)):zn(Kn,Zo,Nn,!1)}else Zi||(Zo.reading=!1,Un(Kn,Zo));return!Zo.ended&&(Zo.length<Zo.highWaterMark||0===Zo.length)}function zn(Kn,Nn,_i,Zi){Nn.flowing&&0===Nn.length&&!Nn.sync?(Nn.awaitDrain=0,Kn.emit("data",_i)):(Nn.length+=Nn.objectMode?1:_i.length,Zi?Nn.buffer.unshift(_i):Nn.buffer.push(_i),Nn.needReadable&&ui(Kn)),Un(Kn,Nn)}Object.defineProperty(nn.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(Kn){this._readableState&&(this._readableState.destroyed=Kn)}}),nn.prototype.destroy=Ue.destroy,nn.prototype._undestroy=Ue.undestroy,nn.prototype._destroy=function(Kn,Nn){Nn(Kn)},nn.prototype.push=function(Kn,Nn){var _i,Zi=this._readableState;return Zi.objectMode?_i=!0:"string"==typeof Kn&&((Nn=Nn||Zi.defaultEncoding)!==Zi.encoding&&(Kn=O.from(Kn,Nn),Nn=""),_i=!0),Jn(this,Kn,Nn,!1,_i)},nn.prototype.unshift=function(Kn){return Jn(this,Kn,null,!0,!1)},nn.prototype.isPaused=function(){return!1===this._readableState.flowing},nn.prototype.setEncoding=function(Kn){oe||(oe=n(2553).s);var Nn=new oe(Kn);this._readableState.decoder=Nn,this._readableState.encoding=this._readableState.decoder.encoding;for(var _i=this._readableState.buffer.head,Zi="";null!==_i;)Zi+=Nn.write(_i.data),_i=_i.next;return this._readableState.buffer.clear(),""!==Zi&&this._readableState.buffer.push(Zi),this._readableState.length=Zi.length,this};var Zr=1073741824;function $r(Kn,Nn){return Kn<=0||0===Nn.length&&Nn.ended?0:Nn.objectMode?1:Kn!=Kn?Nn.flowing&&Nn.length?Nn.buffer.head.data.length:Nn.length:(Kn>Nn.highWaterMark&&(Nn.highWaterMark=((_i=Kn)>=Zr?_i=Zr:(_i--,_i|=_i>>>1,_i|=_i>>>2,_i|=_i>>>4,_i|=_i>>>8,_i|=_i>>>16,_i++),_i)),Kn<=Nn.length?Kn:Nn.ended?Nn.length:(Nn.needReadable=!0,0));var _i}function ui(Kn){var Nn=Kn._readableState;G("emitReadable",Nn.needReadable,Nn.emittedReadable),Nn.needReadable=!1,Nn.emittedReadable||(G("emitReadable",Nn.flowing),Nn.emittedReadable=!0,l.nextTick(gi,Kn))}function gi(Kn){var Nn=Kn._readableState;G("emitReadable_",Nn.destroyed,Nn.length,Nn.ended),Nn.destroyed||!Nn.length&&!Nn.ended||(Kn.emit("readable"),Nn.emittedReadable=!1),Nn.needReadable=!Nn.flowing&&!Nn.ended&&Nn.length<=Nn.highWaterMark,ai(Kn)}function Un(Kn,Nn){Nn.readingMore||(Nn.readingMore=!0,l.nextTick(lr,Kn,Nn))}function lr(Kn,Nn){for(;!Nn.reading&&!Nn.ended&&(Nn.length<Nn.highWaterMark||Nn.flowing&&0===Nn.length);){var _i=Nn.length;if(G("maybeReadMore read 0"),Kn.read(0),_i===Nn.length)break}Nn.readingMore=!1}function ar(Kn){var Nn=Kn._readableState;Nn.readableListening=Kn.listenerCount("readable")>0,Nn.resumeScheduled&&!Nn.paused?Nn.flowing=!0:Kn.listenerCount("data")>0&&Kn.resume()}function Cr(Kn){G("readable nexttick read 0"),Kn.read(0)}function Wn(Kn,Nn){G("resume",Nn.reading),Nn.reading||Kn.read(0),Nn.resumeScheduled=!1,Kn.emit("resume"),ai(Kn),Nn.flowing&&!Nn.reading&&Kn.read(0)}function ai(Kn){var Nn=Kn._readableState;for(G("flow",Nn.flowing);Nn.flowing&&null!==Kn.read(););}function ho(Kn,Nn){return 0===Nn.length?null:(Nn.objectMode?_i=Nn.buffer.shift():!Kn||Kn>=Nn.length?(_i=Nn.decoder?Nn.buffer.join(""):1===Nn.buffer.length?Nn.buffer.first():Nn.buffer.concat(Nn.length),Nn.buffer.clear()):_i=Nn.buffer.consume(Kn,Nn.decoder),_i);var _i}function Yi(Kn){var Nn=Kn._readableState;G("endReadable",Nn.endEmitted),Nn.endEmitted||(Nn.ended=!0,l.nextTick(lo,Nn,Kn))}function lo(Kn,Nn){if(G("endReadableNT",Kn.endEmitted,Kn.length),!Kn.endEmitted&&0===Kn.length&&(Kn.endEmitted=!0,Nn.readable=!1,Nn.emit("end"),Kn.autoDestroy)){var _i=Nn._writableState;(!_i||_i.autoDestroy&&_i.finished)&&Nn.destroy()}}function pi(Kn,Nn){for(var _i=0,Zi=Kn.length;_i<Zi;_i++)if(Kn[_i]===Nn)return _i;return-1}nn.prototype.read=function(Kn){G("read",Kn),Kn=parseInt(Kn,10);var Nn=this._readableState,_i=Kn;if(0!==Kn&&(Nn.emittedReadable=!1),0===Kn&&Nn.needReadable&&((0!==Nn.highWaterMark?Nn.length>=Nn.highWaterMark:Nn.length>0)||Nn.ended))return G("read: emitReadable",Nn.length,Nn.ended),0===Nn.length&&Nn.ended?Yi(this):ui(this),null;if(0===(Kn=$r(Kn,Nn))&&Nn.ended)return 0===Nn.length&&Yi(this),null;var Zi,So=Nn.needReadable;return G("need readable",So),(0===Nn.length||Nn.length-Kn<Nn.highWaterMark)&&G("length less than watermark",So=!0),Nn.ended||Nn.reading?G("reading or ended",So=!1):So&&(G("do read"),Nn.reading=!0,Nn.sync=!0,0===Nn.length&&(Nn.needReadable=!0),this._read(Nn.highWaterMark),Nn.sync=!1,Nn.reading||(Kn=$r(_i,Nn))),null===(Zi=Kn>0?ho(Kn,Nn):null)?(Nn.needReadable=Nn.length<=Nn.highWaterMark,Kn=0):(Nn.length-=Kn,Nn.awaitDrain=0),0===Nn.length&&(Nn.ended||(Nn.needReadable=!0),_i!==Kn&&Nn.ended&&Yi(this)),null!==Zi&&this.emit("data",Zi),Zi},nn.prototype._read=function(Kn){Yt(this,new Ft("_read()"))},nn.prototype.pipe=function(Kn,Nn){var _i=this,Zi=this._readableState;switch(Zi.pipesCount){case 0:Zi.pipes=Kn;break;case 1:Zi.pipes=[Zi.pipes,Kn];break;default:Zi.pipes.push(Kn)}Zi.pipesCount+=1,G("pipe count=%d opts=%j",Zi.pipesCount,Nn);var So=Nn&&!1===Nn.end||Kn===l.stdout||Kn===l.stderr?kt:Zo;function Zo(){G("onend"),Kn.end()}Zi.endEmitted?l.nextTick(So):_i.once("end",So),Kn.on("unpipe",function us(Lt,cr){G("onunpipe"),Lt===_i&&cr&&!1===cr.hasUnpiped&&(cr.hasUnpiped=!0,G("cleanup"),Kn.removeListener("close",$o),Kn.removeListener("finish",rt),Kn.removeListener("drain",pa),Kn.removeListener("error",xo),Kn.removeListener("unpipe",us),_i.removeListener("end",Zo),_i.removeListener("end",kt),_i.removeListener("data",qi),va=!0,!Zi.awaitDrain||Kn._writableState&&!Kn._writableState.needDrain||pa())});var Lt,pa=(Lt=_i,function(){var cr=Lt._readableState;G("pipeOnDrain",cr.awaitDrain),cr.awaitDrain&&cr.awaitDrain--,0===cr.awaitDrain&&_(Lt,"data")&&(cr.flowing=!0,ai(Lt))});Kn.on("drain",pa);var va=!1;function qi(Lt){G("ondata");var cr=Kn.write(Lt);G("dest.write",cr),!1===cr&&((1===Zi.pipesCount&&Zi.pipes===Kn||Zi.pipesCount>1&&-1!==pi(Zi.pipes,Kn))&&!va&&(G("false write response, pause",Zi.awaitDrain),Zi.awaitDrain++),_i.pause())}function xo(Lt){G("onerror",Lt),kt(),Kn.removeListener("error",xo),0===_(Kn,"error")&&Yt(Kn,Lt)}function $o(){Kn.removeListener("finish",rt),kt()}function rt(){G("onfinish"),Kn.removeListener("close",$o),kt()}function kt(){G("unpipe"),_i.unpipe(Kn)}return _i.on("data",qi),function(Lt,cr,Yr){if("function"==typeof Lt.prependListener)return Lt.prependListener(cr,Yr);Lt._events&&Lt._events[cr]?Array.isArray(Lt._events[cr])?Lt._events[cr].unshift(Yr):Lt._events[cr]=[Yr,Lt._events[cr]]:Lt.on(cr,Yr)}(Kn,"error",xo),Kn.once("close",$o),Kn.once("finish",rt),Kn.emit("pipe",_i),Zi.flowing||(G("pipe resume"),_i.resume()),Kn},nn.prototype.unpipe=function(Kn){var Nn=this._readableState,_i={hasUnpiped:!1};if(0===Nn.pipesCount)return this;if(1===Nn.pipesCount)return Kn&&Kn!==Nn.pipes||(Kn||(Kn=Nn.pipes),Nn.pipes=null,Nn.pipesCount=0,Nn.flowing=!1,Kn&&Kn.emit("unpipe",this,_i)),this;if(!Kn){var Zi=Nn.pipes,So=Nn.pipesCount;Nn.pipes=null,Nn.pipesCount=0,Nn.flowing=!1;for(var us=0;us<So;us++)Zi[us].emit("unpipe",this,{hasUnpiped:!1});return this}var Zo=pi(Nn.pipes,Kn);return-1===Zo||(Nn.pipes.splice(Zo,1),Nn.pipesCount-=1,1===Nn.pipesCount&&(Nn.pipes=Nn.pipes[0]),Kn.emit("unpipe",this,_i)),this},nn.prototype.addListener=nn.prototype.on=function(Kn,Nn){var _i=v.prototype.on.call(this,Kn,Nn),Zi=this._readableState;return"data"===Kn?(Zi.readableListening=this.listenerCount("readable")>0,!1!==Zi.flowing&&this.resume()):"readable"===Kn&&(Zi.endEmitted||Zi.readableListening||(Zi.readableListening=Zi.needReadable=!0,Zi.flowing=!1,Zi.emittedReadable=!1,G("on readable",Zi.length,Zi.reading),Zi.length?ui(this):Zi.reading||l.nextTick(Cr,this))),_i},nn.prototype.removeListener=function(Kn,Nn){var _i=v.prototype.removeListener.call(this,Kn,Nn);return"readable"===Kn&&l.nextTick(ar,this),_i},nn.prototype.removeAllListeners=function(Kn){var Nn=v.prototype.removeAllListeners.apply(this,arguments);return"readable"!==Kn&&void 0!==Kn||l.nextTick(ar,this),Nn},nn.prototype.resume=function(){var _i,Kn=this._readableState;return Kn.flowing||(G("resume"),Kn.flowing=!Kn.readableListening,this,(_i=Kn).resumeScheduled||(_i.resumeScheduled=!0,l.nextTick(Wn,this,_i))),Kn.paused=!1,this},nn.prototype.pause=function(){return G("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(G("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},nn.prototype.wrap=function(Kn){var Nn=this,_i=this._readableState,Zi=!1;for(var So in Kn.on("end",function(){if(G("wrapped end"),_i.decoder&&!_i.ended){var Zo=_i.decoder.end();Zo&&Zo.length&&Nn.push(Zo)}Nn.push(null)}),Kn.on("data",function(Zo){G("wrapped data"),_i.decoder&&(Zo=_i.decoder.write(Zo)),_i.objectMode&&null==Zo||(_i.objectMode||Zo&&Zo.length)&&(Nn.push(Zo)||(Zi=!0,Kn.pause()))}),Kn)void 0===this[So]&&"function"==typeof Kn[So]&&(this[So]=function(Zo){return function(){return Kn[Zo].apply(Kn,arguments)}}(So));for(var us=0;us<ln.length;us++)Kn.on(ln[us],this.emit.bind(this,ln[us]));return this._read=function(Zo){G("wrapped _read",Zo),Zi&&(Zi=!1,Kn.resume())},this},"function"==typeof Symbol&&(nn.prototype[Symbol.asyncIterator]=function(){return void 0===ue&&(ue=n(5850)),ue(this)}),Object.defineProperty(nn.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(nn.prototype,"readableBuffer",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(nn.prototype,"readableFlowing",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(Kn){this._readableState&&(this._readableState.flowing=Kn)}}),nn._fromList=ho,Object.defineProperty(nn.prototype,"readableLength",{enumerable:!1,get:function(){return this._readableState.length}}),"function"==typeof Symbol&&(nn.from=function(Kn,Nn){return void 0===pe&&(pe=n(5167)),pe(nn,Kn,Nn)})},4605:(t,i,n)=>{t.exports=K;var o=n(4281).q,l=o.ERR_METHOD_NOT_IMPLEMENTED,_=o.ERR_MULTIPLE_CALLBACK,v=o.ERR_TRANSFORM_ALREADY_TRANSFORMING,O=o.ERR_TRANSFORM_WITH_LENGTH_0,P=n(6753);function G(pe,ye){var Ue=this._transformState;Ue.transforming=!1;var xe=Ue.writecb;if(null===xe)return this.emit("error",new _);Ue.writechunk=null,Ue.writecb=null,null!=ye&&this.push(ye),xe(pe);var ke=this._readableState;ke.reading=!1,(ke.needReadable||ke.length<ke.highWaterMark)&&this._read(ke.highWaterMark)}function K(pe){if(!(this instanceof K))return new K(pe);P.call(this,pe),this._transformState={afterTransform:G.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,pe&&("function"==typeof pe.transform&&(this._transform=pe.transform),"function"==typeof pe.flush&&(this._flush=pe.flush)),this.on("prefinish",oe)}function oe(){var pe=this;"function"!=typeof this._flush||this._readableState.destroyed?ue(this,null,null):this._flush(function(ye,Ue){ue(pe,ye,Ue)})}function ue(pe,ye,Ue){if(ye)return pe.emit("error",ye);if(null!=Ue&&pe.push(Ue),pe._writableState.length)throw new O;if(pe._transformState.transforming)throw new v;return pe.push(null)}n(5717)(K,P),K.prototype.push=function(pe,ye){return this._transformState.needTransform=!1,P.prototype.push.call(this,pe,ye)},K.prototype._transform=function(pe,ye,Ue){Ue(new l("_transform()"))},K.prototype._write=function(pe,ye,Ue){var xe=this._transformState;if(xe.writecb=Ue,xe.writechunk=pe,xe.writeencoding=ye,!xe.transforming){var ke=this._readableState;(xe.needTransform||ke.needReadable||ke.length<ke.highWaterMark)&&this._read(ke.highWaterMark)}},K.prototype._read=function(pe){var ye=this._transformState;null===ye.writechunk||ye.transforming?ye.needTransform=!0:(ye.transforming=!0,this._transform(ye.writechunk,ye.writeencoding,ye.afterTransform))},K.prototype._destroy=function(pe,ye){P.prototype._destroy.call(this,pe,function(Ue){ye(Ue)})}},4229:(t,i,n)=>{var o,l=n(4155);function _(Un){var lr=this;this.next=null,this.entry=null,this.finish=function(){!function(ar,Cr,Wn){var ai=ar.entry;for(ar.entry=null;ai;){var ho=ai.callback;Cr.pendingcb--,ho(void 0),ai=ai.next}Cr.corkedRequestsFree.next=ar}(lr,Un)}}t.exports=nn,nn.WritableState=$n;var K,v={deprecate:n(4927)},O=n(2503),P=n(8764).Buffer,G=n.g.Uint8Array||function(){},oe=n(1195),ue=n(2457).getHighWaterMark,pe=n(4281).q,ye=pe.ERR_INVALID_ARG_TYPE,Ue=pe.ERR_METHOD_NOT_IMPLEMENTED,xe=pe.ERR_MULTIPLE_CALLBACK,ke=pe.ERR_STREAM_CANNOT_PIPE,we=pe.ERR_STREAM_DESTROYED,Z=pe.ERR_STREAM_NULL_VALUES,Ft=pe.ERR_STREAM_WRITE_AFTER_END,Dt=pe.ERR_UNKNOWN_ENCODING,Yt=oe.errorOrDestroy;function ln(){}function $n(Un,lr,ar){o=o||n(6753),"boolean"!=typeof ar&&(ar=lr instanceof o),this.objectMode=!!(Un=Un||{}).objectMode,ar&&(this.objectMode=this.objectMode||!!Un.writableObjectMode),this.highWaterMark=ue(this,Un,"writableHighWaterMark",ar),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1,this.decodeStrings=!(!1===Un.decodeStrings),this.defaultEncoding=Un.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(Wn){!function(ai,ho){var Nn,Yi=ai._writableState,lo=Yi.sync,pi=Yi.writecb;if("function"!=typeof pi)throw new xe;if((Nn=Yi).writing=!1,Nn.writecb=null,Nn.length-=Nn.writelen,Nn.writelen=0,ho)!function(Nn,_i,Zi,So,us){--_i.pendingcb,Zi?(l.nextTick(us,So),l.nextTick(gi,Nn,_i),Nn._writableState.errorEmitted=!0,Yt(Nn,So)):(us(So),Nn._writableState.errorEmitted=!0,Yt(Nn,So),gi(Nn,_i))}(ai,Yi,lo,ho,pi);else{var Kn=$r(Yi)||ai.destroyed;Kn||Yi.corked||Yi.bufferProcessing||!Yi.bufferedRequest||Zr(ai,Yi),lo?l.nextTick(zn,ai,Yi,Kn,pi):zn(ai,Yi,Kn,pi)}}(lr,Wn)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==Un.emitClose,this.autoDestroy=!!Un.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new _(this)}function nn(Un){var lr=this instanceof(o=o||n(6753));if(!lr&&!K.call(nn,this))return new nn(Un);this._writableState=new $n(Un,this,lr),this.writable=!0,Un&&("function"==typeof Un.write&&(this._write=Un.write),"function"==typeof Un.writev&&(this._writev=Un.writev),"function"==typeof Un.destroy&&(this._destroy=Un.destroy),"function"==typeof Un.final&&(this._final=Un.final)),O.call(this)}function Jn(Un,lr,ar,Cr,Wn,ai,ho){lr.writelen=Cr,lr.writecb=ho,lr.writing=!0,lr.sync=!0,lr.destroyed?lr.onwrite(new we("write")):ar?Un._writev(Wn,lr.onwrite):Un._write(Wn,ai,lr.onwrite),lr.sync=!1}function zn(Un,lr,ar,Cr){var Wn,ai;ar||(Wn=Un,0===(ai=lr).length&&ai.needDrain&&(ai.needDrain=!1,Wn.emit("drain"))),lr.pendingcb--,Cr(),gi(Un,lr)}function Zr(Un,lr){lr.bufferProcessing=!0;var ar=lr.bufferedRequest;if(Un._writev&&ar&&ar.next){var Wn=new Array(lr.bufferedRequestCount),ai=lr.corkedRequestsFree;ai.entry=ar;for(var ho=0,Yi=!0;ar;)Wn[ho]=ar,ar.isBuf||(Yi=!1),ar=ar.next,ho+=1;Wn.allBuffers=Yi,Jn(Un,lr,!0,lr.length,Wn,"",ai.finish),lr.pendingcb++,lr.lastBufferedRequest=null,ai.next?(lr.corkedRequestsFree=ai.next,ai.next=null):lr.corkedRequestsFree=new _(lr),lr.bufferedRequestCount=0}else{for(;ar;){var lo=ar.chunk;if(Jn(Un,lr,!1,lr.objectMode?1:lo.length,lo,ar.encoding,ar.callback),ar=ar.next,lr.bufferedRequestCount--,lr.writing)break}null===ar&&(lr.lastBufferedRequest=null)}lr.bufferedRequest=ar,lr.bufferProcessing=!1}function $r(Un){return Un.ending&&0===Un.length&&null===Un.bufferedRequest&&!Un.finished&&!Un.writing}function ui(Un,lr){Un._final(function(ar){lr.pendingcb--,ar&&Yt(Un,ar),lr.prefinished=!0,Un.emit("prefinish"),gi(Un,lr)})}function gi(Un,lr){var Wn,ai,ar=$r(lr);if(ar&&(Wn=Un,(ai=lr).prefinished||ai.finalCalled||("function"!=typeof Wn._final||ai.destroyed?(ai.prefinished=!0,Wn.emit("prefinish")):(ai.pendingcb++,ai.finalCalled=!0,l.nextTick(ui,Wn,ai))),0===lr.pendingcb&&(lr.finished=!0,Un.emit("finish"),lr.autoDestroy))){var Cr=Un._readableState;(!Cr||Cr.autoDestroy&&Cr.endEmitted)&&Un.destroy()}return ar}n(5717)(nn,O),$n.prototype.getBuffer=function(){for(var Un=this.bufferedRequest,lr=[];Un;)lr.push(Un),Un=Un.next;return lr},function(){try{Object.defineProperty($n.prototype,"buffer",{get:v.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(K=Function.prototype[Symbol.hasInstance],Object.defineProperty(nn,Symbol.hasInstance,{value:function(Un){return!!K.call(this,Un)||this===nn&&Un&&Un._writableState instanceof $n}})):K=function(Un){return Un instanceof this},nn.prototype.pipe=function(){Yt(this,new ke)},nn.prototype.write=function(Un,lr,ar){var Cr,Yi,lo,pi,Wn=this._writableState,ai=!1,ho=!Wn.objectMode&&(P.isBuffer(Cr=Un)||Cr instanceof G);return ho&&!P.isBuffer(Un)&&(Un=P.from(Un)),"function"==typeof lr&&(ar=lr,lr=null),ho?lr="buffer":lr||(lr=Wn.defaultEncoding),"function"!=typeof ar&&(ar=ln),Wn.ending?(Yi=this,lo=ar,pi=new Ft,Yt(Yi,pi),l.nextTick(lo,pi)):(ho||function(Yi,lo,pi,Kn){var Nn;return null===pi?Nn=new Z:"string"==typeof pi||lo.objectMode||(Nn=new ye("chunk",["string","Buffer"],pi)),!Nn||(Yt(Yi,Nn),l.nextTick(Kn,Nn),!1)}(this,Wn,Un,ar))&&(Wn.pendingcb++,ai=function(Yi,lo,pi,Kn,Nn,_i){if(!pi){var Zi=(va=Kn,(pa=lo).objectMode||!1===pa.decodeStrings||"string"!=typeof va||(va=P.from(va,Nn)),va);Kn!==Zi&&(pi=!0,Nn="buffer",Kn=Zi)}var pa,va,So=lo.objectMode?1:Kn.length;lo.length+=So;var us=lo.length<lo.highWaterMark;if(us||(lo.needDrain=!0),lo.writing||lo.corked){var Zo=lo.lastBufferedRequest;lo.lastBufferedRequest={chunk:Kn,encoding:Nn,isBuf:pi,callback:_i,next:null},Zo?Zo.next=lo.lastBufferedRequest:lo.bufferedRequest=lo.lastBufferedRequest,lo.bufferedRequestCount+=1}else Jn(Yi,lo,!1,So,Kn,Nn,_i);return us}(this,Wn,ho,Un,lr,ar)),ai},nn.prototype.cork=function(){this._writableState.corked++},nn.prototype.uncork=function(){var Un=this._writableState;Un.corked&&(Un.corked--,Un.writing||Un.corked||Un.bufferProcessing||!Un.bufferedRequest||Zr(this,Un))},nn.prototype.setDefaultEncoding=function(Un){if("string"==typeof Un&&(Un=Un.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((Un+"").toLowerCase())>-1))throw new Dt(Un);return this._writableState.defaultEncoding=Un,this},Object.defineProperty(nn.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(nn.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),nn.prototype._write=function(Un,lr,ar){ar(new Ue("_write()"))},nn.prototype._writev=null,nn.prototype.end=function(Un,lr,ar){var ai,ho,Cr=this._writableState;return"function"==typeof Un?(ar=Un,Un=null,lr=null):"function"==typeof lr&&(ar=lr,lr=null),null!=Un&&this.write(Un,lr),Cr.corked&&(Cr.corked=1,this.uncork()),Cr.ending||(this,ho=ar,(ai=Cr).ending=!0,gi(this,ai),ho&&(ai.finished?l.nextTick(ho):this.once("finish",ho)),ai.ended=!0,this.writable=!1),this},Object.defineProperty(nn.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(nn.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(Un){this._writableState&&(this._writableState.destroyed=Un)}}),nn.prototype.destroy=oe.destroy,nn.prototype._undestroy=oe.undestroy,nn.prototype._destroy=function(Un,lr){lr(Un)}},5850:(t,i,n)=>{var o,l=n(4155);function _(Z,Ft,Dt){return Ft in Z?Object.defineProperty(Z,Ft,{value:Dt,enumerable:!0,configurable:!0,writable:!0}):Z[Ft]=Dt,Z}var v=n(8610),O=Symbol("lastResolve"),P=Symbol("lastReject"),G=Symbol("error"),K=Symbol("ended"),oe=Symbol("lastPromise"),ue=Symbol("handlePromise"),pe=Symbol("stream");function ye(Z,Ft){return{value:Z,done:Ft}}function Ue(Z){var Ft=Z[O];if(null!==Ft){var Dt=Z[pe].read();null!==Dt&&(Z[oe]=null,Z[O]=null,Z[P]=null,Ft(ye(Dt,!1)))}}function xe(Z){l.nextTick(Ue,Z)}var ke=Object.getPrototypeOf(function(){}),we=Object.setPrototypeOf((_(o={get stream(){return this[pe]},next:function(){var Z=this,Ft=this[G];if(null!==Ft)return Promise.reject(Ft);if(this[K])return Promise.resolve(ye(void 0,!0));if(this[pe].destroyed)return new Promise(function($n,nn){l.nextTick(function(){Z[G]?nn(Z[G]):$n(ye(void 0,!0))})});var Dt,$n,nn,Yt=this[oe];if(Yt)Dt=new Promise(($n=Yt,nn=this,function(Jn,zn){$n.then(function(){nn[K]?Jn(ye(void 0,!0)):nn[ue](Jn,zn)},zn)}));else{var ln=this[pe].read();if(null!==ln)return Promise.resolve(ye(ln,!1));Dt=new Promise(this[ue])}return this[oe]=Dt,Dt}},Symbol.asyncIterator,function(){return this}),_(o,"return",function(){var Z=this;return new Promise(function(Ft,Dt){Z[pe].destroy(null,function(Yt){Yt?Dt(Yt):Ft(ye(void 0,!0))})})}),o),ke);t.exports=function(Z){var Ft,Dt=Object.create(we,(_(Ft={},pe,{value:Z,writable:!0}),_(Ft,O,{value:null,writable:!0}),_(Ft,P,{value:null,writable:!0}),_(Ft,G,{value:null,writable:!0}),_(Ft,K,{value:Z._readableState.endEmitted,writable:!0}),_(Ft,ue,{value:function(Yt,ln){var $n=Dt[pe].read();$n?(Dt[oe]=null,Dt[O]=null,Dt[P]=null,Yt(ye($n,!1))):(Dt[O]=Yt,Dt[P]=ln)},writable:!0}),Ft));return Dt[oe]=null,v(Z,function(Yt){if(Yt&&"ERR_STREAM_PREMATURE_CLOSE"!==Yt.code){var ln=Dt[P];return null!==ln&&(Dt[oe]=null,Dt[O]=null,Dt[P]=null,ln(Yt)),void(Dt[G]=Yt)}var $n=Dt[O];null!==$n&&(Dt[oe]=null,Dt[O]=null,Dt[P]=null,$n(ye(void 0,!0))),Dt[K]=!0}),Z.on("readable",xe.bind(null,Dt)),Dt}},7327:(t,i,n)=>{function o(G,K){var oe=Object.keys(G);if(Object.getOwnPropertySymbols){var ue=Object.getOwnPropertySymbols(G);K&&(ue=ue.filter(function(pe){return Object.getOwnPropertyDescriptor(G,pe).enumerable})),oe.push.apply(oe,ue)}return oe}function l(G,K,oe){return K in G?Object.defineProperty(G,K,{value:oe,enumerable:!0,configurable:!0,writable:!0}):G[K]=oe,G}var v=n(8764).Buffer,O=n(2361).inspect,P=O&&O.custom||"inspect";t.exports=function(){function G(){(function(pe,ye){if(!(pe instanceof ye))throw new TypeError("Cannot call a class as a function")})(this,G),this.head=null,this.tail=null,this.length=0}var oe;return oe=[{key:"push",value:function(pe){var ye={data:pe,next:null};this.length>0?this.tail.next=ye:this.head=ye,this.tail=ye,++this.length}},{key:"unshift",value:function(pe){var ye={data:pe,next:this.head};0===this.length&&(this.tail=ye),this.head=ye,++this.length}},{key:"shift",value:function(){if(0!==this.length){var pe=this.head.data;return this.head=1===this.length?this.tail=null:this.head.next,--this.length,pe}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(pe){if(0===this.length)return"";for(var ye=this.head,Ue=""+ye.data;ye=ye.next;)Ue+=pe+ye.data;return Ue}},{key:"concat",value:function(pe){if(0===this.length)return v.alloc(0);for(var ke=v.allocUnsafe(pe>>>0),we=this.head,Z=0;we;)v.prototype.copy.call(we.data,ke,Z),Z+=we.data.length,we=we.next;return ke}},{key:"consume",value:function(pe,ye){var Ue;return pe<this.head.data.length?(Ue=this.head.data.slice(0,pe),this.head.data=this.head.data.slice(pe)):Ue=pe===this.head.data.length?this.shift():ye?this._getString(pe):this._getBuffer(pe),Ue}},{key:"first",value:function(){return this.head.data}},{key:"_getString",value:function(pe){var ye=this.head,Ue=1,xe=ye.data;for(pe-=xe.length;ye=ye.next;){var ke=ye.data,we=pe>ke.length?ke.length:pe;if(xe+=we===ke.length?ke:ke.slice(0,pe),0==(pe-=we)){we===ke.length?(++Ue,this.head=ye.next?ye.next:this.tail=null):(this.head=ye,ye.data=ke.slice(we));break}++Ue}return this.length-=Ue,xe}},{key:"_getBuffer",value:function(pe){var ye=v.allocUnsafe(pe),Ue=this.head,xe=1;for(Ue.data.copy(ye),pe-=Ue.data.length;Ue=Ue.next;){var ke=Ue.data,we=pe>ke.length?ke.length:pe;if(ke.copy(ye,ye.length-pe,0,we),0==(pe-=we)){we===ke.length?(++xe,this.head=Ue.next?Ue.next:this.tail=null):(this.head=Ue,Ue.data=ke.slice(we));break}++xe}return this.length-=xe,ye}},{key:P,value:function(pe,ye){return O(this,function(Ue){for(var xe=1;xe<arguments.length;xe++){var ke=null!=arguments[xe]?arguments[xe]:{};xe%2?o(Object(ke),!0).forEach(function(we){l(Ue,we,ke[we])}):Object.getOwnPropertyDescriptors?Object.defineProperties(Ue,Object.getOwnPropertyDescriptors(ke)):o(Object(ke)).forEach(function(we){Object.defineProperty(Ue,we,Object.getOwnPropertyDescriptor(ke,we))})}return Ue}({},ye,{depth:0,customInspect:!1}))}}],oe&&function _(G,K){for(var oe=0;oe<K.length;oe++){var ue=K[oe];ue.enumerable=ue.enumerable||!1,ue.configurable=!0,"value"in ue&&(ue.writable=!0),Object.defineProperty(G,ue.key,ue)}}(G.prototype,oe),G}()},1195:(t,i,n)=>{var o=n(4155);function l(O,P){v(O,P),_(O)}function _(O){O._writableState&&!O._writableState.emitClose||O._readableState&&!O._readableState.emitClose||O.emit("close")}function v(O,P){O.emit("error",P)}t.exports={destroy:function(O,P){var G=this;return this._readableState&&this._readableState.destroyed||this._writableState&&this._writableState.destroyed?(P?P(O):O&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,o.nextTick(v,this,O)):o.nextTick(v,this,O)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(O||null,function(ue){!P&&ue?G._writableState?G._writableState.errorEmitted?o.nextTick(_,G):(G._writableState.errorEmitted=!0,o.nextTick(l,G,ue)):o.nextTick(l,G,ue):P?(o.nextTick(_,G),P(ue)):o.nextTick(_,G)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(O,P){var G=O._readableState,K=O._writableState;G&&G.autoDestroy||K&&K.autoDestroy?O.destroy(P):O.emit("error",P)}}},8610:(t,i,n)=>{var o=n(4281).q.ERR_STREAM_PREMATURE_CLOSE;function l(){}t.exports=function _(v,O,P){if("function"==typeof O)return _(v,null,O);var Z,Ft;O||(O={}),Z=P||l,Ft=!1,P=function(){if(!Ft){Ft=!0;for(var Dt=arguments.length,Yt=new Array(Dt),ln=0;ln<Dt;ln++)Yt[ln]=arguments[ln];Z.apply(this,Yt)}};var G=O.readable||!1!==O.readable&&v.readable,K=O.writable||!1!==O.writable&&v.writable,oe=function(){v.writable||pe()},ue=v._writableState&&v._writableState.finished,pe=function(){K=!1,ue=!0,G||P.call(v)},ye=v._readableState&&v._readableState.endEmitted,Ue=function(){G=!1,ye=!0,K||P.call(v)},xe=function(Z){P.call(v,Z)},ke=function(){var Z;return G&&!ye?(v._readableState&&v._readableState.ended||(Z=new o),P.call(v,Z)):K&&!ue?(v._writableState&&v._writableState.ended||(Z=new o),P.call(v,Z)):void 0},we=function(){v.req.on("finish",pe)};return function(Z){return Z.setHeader&&"function"==typeof Z.abort}(v)?(v.on("complete",pe),v.on("abort",ke),v.req?we():v.on("request",we)):K&&!v._writableState&&(v.on("end",oe),v.on("close",oe)),v.on("end",Ue),v.on("finish",pe),!1!==O.error&&v.on("error",xe),v.on("close",ke),function(){v.removeListener("complete",pe),v.removeListener("abort",ke),v.removeListener("request",we),v.req&&v.req.removeListener("finish",pe),v.removeListener("end",oe),v.removeListener("close",oe),v.removeListener("finish",pe),v.removeListener("end",Ue),v.removeListener("error",xe),v.removeListener("close",ke)}}},5167:t=>{t.exports=function(){throw new Error("Readable.from is not available in the browser")}},9946:(t,i,n)=>{var o,l=n(4281).q,_=l.ERR_MISSING_ARGS,v=l.ERR_STREAM_DESTROYED;function O(ue){if(ue)throw ue}function G(ue){ue()}function K(ue,pe){return ue.pipe(pe)}t.exports=function(){for(var ue=arguments.length,pe=new Array(ue),ye=0;ye<ue;ye++)pe[ye]=arguments[ye];var Ue,xe=function oe(ue){return ue.length?"function"!=typeof ue[ue.length-1]?O:ue.pop():O}(pe);if(Array.isArray(pe[0])&&(pe=pe[0]),pe.length<2)throw new _("streams");var ke=pe.map(function(we,Z){var Ft=Z<pe.length-1;return function P(ue,pe,ye,Ue){var we,Z;we=Ue,Z=!1,Ue=function(){Z||(Z=!0,we.apply(void 0,arguments))};var xe=!1;ue.on("close",function(){xe=!0}),void 0===o&&(o=n(8610)),o(ue,{readable:pe,writable:ye},function(we){if(we)return Ue(we);xe=!0,Ue()});var ke=!1;return function(we){if(!xe&&!ke)return ke=!0,function(Z){return Z.setHeader&&"function"==typeof Z.abort}(ue)?ue.abort():"function"==typeof ue.destroy?ue.destroy():void Ue(we||new v("pipe"))}}(we,Ft,Z>0,function(Dt){Ue||(Ue=Dt),Dt&&ke.forEach(G),Ft||(ke.forEach(G),xe(Ue))})});return pe.reduce(K)}},2457:(t,i,n)=>{var o=n(4281).q.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(l,_,v,O){var G,P=null!=(G=_).highWaterMark?G.highWaterMark:O?G[v]:null;if(null!=P){if(!isFinite(P)||Math.floor(P)!==P||P<0)throw new o(O?v:"highWaterMark",P);return Math.floor(P)}return l.objectMode?16:16384}}},2503:(t,i,n)=>{t.exports=n(7187).EventEmitter},4189:(t,i,n)=>{var o=n(396).Buffer;function l(_,v){this._block=o.alloc(_),this._finalSize=v,this._blockSize=_,this._len=0}l.prototype.update=function(_,v){"string"==typeof _&&(_=o.from(_,v=v||"utf8"));for(var O=this._block,P=this._blockSize,G=_.length,K=this._len,oe=0;oe<G;){for(var ue=K%P,pe=Math.min(G-oe,P-ue),ye=0;ye<pe;ye++)O[ue+ye]=_[oe+ye];oe+=pe,(K+=pe)%P==0&&this._update(O)}return this._len+=G,this},l.prototype.digest=function(_){var v=this._len%this._blockSize;this._block[v]=128,this._block.fill(0,v+1),v>=this._finalSize&&(this._update(this._block),this._block.fill(0));var O=8*this._len;if(O<=4294967295)this._block.writeUInt32BE(O,this._blockSize-4);else{var P=(4294967295&O)>>>0;this._block.writeUInt32BE((O-P)/4294967296,this._blockSize-8),this._block.writeUInt32BE(P,this._blockSize-4)}this._update(this._block);var K=this._hash();return _?K.toString(_):K},l.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=l},9072:(t,i,n)=>{var o=t.exports=function(l){l=l.toLowerCase();var _=o[l];if(!_)throw new Error(l+" is not supported (we accept pull requests)");return new _};o.sha=n(4448),o.sha1=n(8336),o.sha224=n(8432),o.sha256=n(7499),o.sha384=n(1686),o.sha512=n(7816)},4448:(t,i,n)=>{var o=n(5717),l=n(4189),_=n(396).Buffer,v=[1518500249,1859775393,-1894007588,-899497514],O=new Array(80);function P(){this.init(),this._w=O,l.call(this,64,56)}function G(oe){return oe<<30|oe>>>2}function K(oe,ue,pe,ye){return 0===oe?ue&pe|~ue&ye:2===oe?ue&pe|ue&ye|pe&ye:ue^pe^ye}o(P,l),P.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},P.prototype._update=function(oe){for(var ue,pe=this._w,ye=0|this._a,Ue=0|this._b,xe=0|this._c,ke=0|this._d,we=0|this._e,Z=0;Z<16;++Z)pe[Z]=oe.readInt32BE(4*Z);for(;Z<80;++Z)pe[Z]=pe[Z-3]^pe[Z-8]^pe[Z-14]^pe[Z-16];for(var Ft=0;Ft<80;++Ft){var Dt=~~(Ft/20),Yt=0|((ue=ye)<<5|ue>>>27)+K(Dt,Ue,xe,ke)+we+pe[Ft]+v[Dt];we=ke,ke=xe,xe=G(Ue),Ue=ye,ye=Yt}this._a=ye+this._a|0,this._b=Ue+this._b|0,this._c=xe+this._c|0,this._d=ke+this._d|0,this._e=we+this._e|0},P.prototype._hash=function(){var oe=_.allocUnsafe(20);return oe.writeInt32BE(0|this._a,0),oe.writeInt32BE(0|this._b,4),oe.writeInt32BE(0|this._c,8),oe.writeInt32BE(0|this._d,12),oe.writeInt32BE(0|this._e,16),oe},t.exports=P},8336:(t,i,n)=>{var o=n(5717),l=n(4189),_=n(396).Buffer,v=[1518500249,1859775393,-1894007588,-899497514],O=new Array(80);function P(){this.init(),this._w=O,l.call(this,64,56)}function G(ue){return ue<<5|ue>>>27}function K(ue){return ue<<30|ue>>>2}function oe(ue,pe,ye,Ue){return 0===ue?pe&ye|~pe&Ue:2===ue?pe&ye|pe&Ue|ye&Ue:pe^ye^Ue}o(P,l),P.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},P.prototype._update=function(ue){for(var pe,ye=this._w,Ue=0|this._a,xe=0|this._b,ke=0|this._c,we=0|this._d,Z=0|this._e,Ft=0;Ft<16;++Ft)ye[Ft]=ue.readInt32BE(4*Ft);for(;Ft<80;++Ft)ye[Ft]=(pe=ye[Ft-3]^ye[Ft-8]^ye[Ft-14]^ye[Ft-16])<<1|pe>>>31;for(var Dt=0;Dt<80;++Dt){var Yt=~~(Dt/20),ln=G(Ue)+oe(Yt,xe,ke,we)+Z+ye[Dt]+v[Yt]|0;Z=we,we=ke,ke=K(xe),xe=Ue,Ue=ln}this._a=Ue+this._a|0,this._b=xe+this._b|0,this._c=ke+this._c|0,this._d=we+this._d|0,this._e=Z+this._e|0},P.prototype._hash=function(){var ue=_.allocUnsafe(20);return ue.writeInt32BE(0|this._a,0),ue.writeInt32BE(0|this._b,4),ue.writeInt32BE(0|this._c,8),ue.writeInt32BE(0|this._d,12),ue.writeInt32BE(0|this._e,16),ue},t.exports=P},8432:(t,i,n)=>{var o=n(5717),l=n(7499),_=n(4189),v=n(396).Buffer,O=new Array(64);function P(){this.init(),this._w=O,_.call(this,64,56)}o(P,l),P.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},P.prototype._hash=function(){var G=v.allocUnsafe(28);return G.writeInt32BE(this._a,0),G.writeInt32BE(this._b,4),G.writeInt32BE(this._c,8),G.writeInt32BE(this._d,12),G.writeInt32BE(this._e,16),G.writeInt32BE(this._f,20),G.writeInt32BE(this._g,24),G},t.exports=P},7499:(t,i,n)=>{var o=n(5717),l=n(4189),_=n(396).Buffer,v=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],O=new Array(64);function P(){this.init(),this._w=O,l.call(this,64,56)}function G(ye,Ue,xe){return xe^ye&(Ue^xe)}function K(ye,Ue,xe){return ye&Ue|xe&(ye|Ue)}function oe(ye){return(ye>>>2|ye<<30)^(ye>>>13|ye<<19)^(ye>>>22|ye<<10)}function ue(ye){return(ye>>>6|ye<<26)^(ye>>>11|ye<<21)^(ye>>>25|ye<<7)}function pe(ye){return(ye>>>7|ye<<25)^(ye>>>18|ye<<14)^ye>>>3}o(P,l),P.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},P.prototype._update=function(ye){for(var Ue,xe=this._w,ke=0|this._a,we=0|this._b,Z=0|this._c,Ft=0|this._d,Dt=0|this._e,Yt=0|this._f,ln=0|this._g,$n=0|this._h,nn=0;nn<16;++nn)xe[nn]=ye.readInt32BE(4*nn);for(;nn<64;++nn)xe[nn]=0|(((Ue=xe[nn-2])>>>17|Ue<<15)^(Ue>>>19|Ue<<13)^Ue>>>10)+xe[nn-7]+pe(xe[nn-15])+xe[nn-16];for(var Jn=0;Jn<64;++Jn){var zn=$n+ue(Dt)+G(Dt,Yt,ln)+v[Jn]+xe[Jn]|0,Zr=oe(ke)+K(ke,we,Z)|0;$n=ln,ln=Yt,Yt=Dt,Dt=Ft+zn|0,Ft=Z,Z=we,we=ke,ke=zn+Zr|0}this._a=ke+this._a|0,this._b=we+this._b|0,this._c=Z+this._c|0,this._d=Ft+this._d|0,this._e=Dt+this._e|0,this._f=Yt+this._f|0,this._g=ln+this._g|0,this._h=$n+this._h|0},P.prototype._hash=function(){var ye=_.allocUnsafe(32);return ye.writeInt32BE(this._a,0),ye.writeInt32BE(this._b,4),ye.writeInt32BE(this._c,8),ye.writeInt32BE(this._d,12),ye.writeInt32BE(this._e,16),ye.writeInt32BE(this._f,20),ye.writeInt32BE(this._g,24),ye.writeInt32BE(this._h,28),ye},t.exports=P},1686:(t,i,n)=>{var o=n(5717),l=n(7816),_=n(4189),v=n(396).Buffer,O=new Array(160);function P(){this.init(),this._w=O,_.call(this,128,112)}o(P,l),P.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},P.prototype._hash=function(){var G=v.allocUnsafe(48);function K(oe,ue,pe){G.writeInt32BE(oe,pe),G.writeInt32BE(ue,pe+4)}return K(this._ah,this._al,0),K(this._bh,this._bl,8),K(this._ch,this._cl,16),K(this._dh,this._dl,24),K(this._eh,this._el,32),K(this._fh,this._fl,40),G},t.exports=P},7816:(t,i,n)=>{var o=n(5717),l=n(4189),_=n(396).Buffer,v=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],O=new Array(160);function P(){this.init(),this._w=O,l.call(this,128,112)}function G(we,Z,Ft){return Ft^we&(Z^Ft)}function K(we,Z,Ft){return we&Z|Ft&(we|Z)}function oe(we,Z){return(we>>>28|Z<<4)^(Z>>>2|we<<30)^(Z>>>7|we<<25)}function ue(we,Z){return(we>>>14|Z<<18)^(we>>>18|Z<<14)^(Z>>>9|we<<23)}function pe(we,Z){return(we>>>1|Z<<31)^(we>>>8|Z<<24)^we>>>7}function ye(we,Z){return(we>>>1|Z<<31)^(we>>>8|Z<<24)^(we>>>7|Z<<25)}function Ue(we,Z){return(we>>>19|Z<<13)^(Z>>>29|we<<3)^we>>>6}function xe(we,Z){return(we>>>19|Z<<13)^(Z>>>29|we<<3)^(we>>>6|Z<<26)}function ke(we,Z){return we>>>0<Z>>>0?1:0}o(P,l),P.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},P.prototype._update=function(we){for(var Z=this._w,Ft=0|this._ah,Dt=0|this._bh,Yt=0|this._ch,ln=0|this._dh,$n=0|this._eh,nn=0|this._fh,Jn=0|this._gh,zn=0|this._hh,Zr=0|this._al,$r=0|this._bl,ui=0|this._cl,gi=0|this._dl,Un=0|this._el,lr=0|this._fl,ar=0|this._gl,Cr=0|this._hl,Wn=0;Wn<32;Wn+=2)Z[Wn]=we.readInt32BE(4*Wn),Z[Wn+1]=we.readInt32BE(4*Wn+4);for(;Wn<160;Wn+=2){var ai=Z[Wn-30],ho=Z[Wn-30+1],Yi=pe(ai,ho),lo=ye(ho,ai),pi=Ue(ai=Z[Wn-4],ho=Z[Wn-4+1]),Kn=xe(ho,ai),Zi=Z[Wn-32],So=Z[Wn-32+1],us=lo+Z[Wn-14+1]|0,Zo=Yi+Z[Wn-14]+ke(us,lo)|0;Zo=(Zo=Zo+pi+ke(us=us+Kn|0,Kn)|0)+Zi+ke(us=us+So|0,So)|0,Z[Wn]=Zo,Z[Wn+1]=us}for(var pa=0;pa<160;pa+=2){Zo=Z[pa],us=Z[pa+1];var va=K(Ft,Dt,Yt),qi=K(Zr,$r,ui),xo=oe(Ft,Zr),$o=oe(Zr,Ft),rt=ue($n,Un),kt=ue(Un,$n),Lt=v[pa],cr=v[pa+1],Yr=G($n,nn,Jn),li=G(Un,lr,ar),eo=Cr+kt|0,_a=zn+rt+ke(eo,Cr)|0;_a=(_a=(_a=_a+Yr+ke(eo=eo+li|0,li)|0)+Lt+ke(eo=eo+cr|0,cr)|0)+Zo+ke(eo=eo+us|0,us)|0;var ps=$o+qi|0,Fl=xo+va+ke(ps,$o)|0;zn=Jn,Cr=ar,Jn=nn,ar=lr,nn=$n,lr=Un,$n=ln+_a+ke(Un=gi+eo|0,gi)|0,ln=Yt,gi=ui,Yt=Dt,ui=$r,Dt=Ft,$r=Zr,Ft=_a+Fl+ke(Zr=eo+ps|0,eo)|0}this._al=this._al+Zr|0,this._bl=this._bl+$r|0,this._cl=this._cl+ui|0,this._dl=this._dl+gi|0,this._el=this._el+Un|0,this._fl=this._fl+lr|0,this._gl=this._gl+ar|0,this._hl=this._hl+Cr|0,this._ah=this._ah+Ft+ke(this._al,Zr)|0,this._bh=this._bh+Dt+ke(this._bl,$r)|0,this._ch=this._ch+Yt+ke(this._cl,ui)|0,this._dh=this._dh+ln+ke(this._dl,gi)|0,this._eh=this._eh+$n+ke(this._el,Un)|0,this._fh=this._fh+nn+ke(this._fl,lr)|0,this._gh=this._gh+Jn+ke(this._gl,ar)|0,this._hh=this._hh+zn+ke(this._hl,Cr)|0},P.prototype._hash=function(){var we=_.allocUnsafe(64);function Z(Ft,Dt,Yt){we.writeInt32BE(Ft,Yt),we.writeInt32BE(Dt,Yt+4)}return Z(this._ah,this._al,0),Z(this._bh,this._bl,8),Z(this._ch,this._cl,16),Z(this._dh,this._dl,24),Z(this._eh,this._el,32),Z(this._fh,this._fl,40),Z(this._gh,this._gl,48),Z(this._hh,this._hl,56),we},t.exports=P},2830:(t,i,n)=>{t.exports=l;var o=n(7187).EventEmitter;function l(){o.call(this)}n(5717)(l,o),l.Readable=n(9481),l.Writable=n(4229),l.Duplex=n(6753),l.Transform=n(4605),l.PassThrough=n(2725),l.finished=n(8610),l.pipeline=n(9946),l.Stream=l,l.prototype.pipe=function(_,v){var O=this;function P(Ue){_.writable&&!1===_.write(Ue)&&O.pause&&O.pause()}function G(){O.readable&&O.resume&&O.resume()}O.on("data",P),_.on("drain",G),_._isStdio||v&&!1===v.end||(O.on("end",oe),O.on("close",ue));var K=!1;function oe(){K||(K=!0,_.end())}function ue(){K||(K=!0,"function"==typeof _.destroy&&_.destroy())}function pe(Ue){if(ye(),0===o.listenerCount(this,"error"))throw Ue}function ye(){O.removeListener("data",P),_.removeListener("drain",G),O.removeListener("end",oe),O.removeListener("close",ue),O.removeListener("error",pe),_.removeListener("error",pe),O.removeListener("end",ye),O.removeListener("close",ye),_.removeListener("close",ye)}return O.on("error",pe),_.on("error",pe),O.on("end",ye),O.on("close",ye),_.on("close",ye),_.emit("pipe",O),_}},2553:(t,i,n)=>{var o=n(396).Buffer,l=o.isEncoding||function(ye){switch((ye=""+ye)&&ye.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function _(ye){var Ue;switch(this.encoding=function(xe){var ke=function(we){if(!we)return"utf8";for(var Z;;)switch(we){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return we;default:if(Z)return;we=(""+we).toLowerCase(),Z=!0}}(xe);if("string"!=typeof ke&&(o.isEncoding===l||!l(xe)))throw new Error("Unknown encoding: "+xe);return ke||xe}(ye),this.encoding){case"utf16le":this.text=P,this.end=G,Ue=4;break;case"utf8":this.fillLast=O,Ue=4;break;case"base64":this.text=K,this.end=oe,Ue=3;break;default:return this.write=ue,void(this.end=pe)}this.lastNeed=0,this.lastTotal=0,this.lastChar=o.allocUnsafe(Ue)}function v(ye){return ye<=127?0:ye>>5==6?2:ye>>4==14?3:ye>>3==30?4:ye>>6==2?-1:-2}function O(ye){var Ue=this.lastTotal-this.lastNeed,xe=function(ke,we,Z){if(128!=(192&we[0]))return ke.lastNeed=0,"\ufffd";if(ke.lastNeed>1&&we.length>1){if(128!=(192&we[1]))return ke.lastNeed=1,"\ufffd";if(ke.lastNeed>2&&we.length>2&&128!=(192&we[2]))return ke.lastNeed=2,"\ufffd"}}(this,ye);return void 0!==xe?xe:this.lastNeed<=ye.length?(ye.copy(this.lastChar,Ue,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(ye.copy(this.lastChar,Ue,0,ye.length),void(this.lastNeed-=ye.length))}function P(ye,Ue){if((ye.length-Ue)%2==0){var xe=ye.toString("utf16le",Ue);if(xe){var ke=xe.charCodeAt(xe.length-1);if(ke>=55296&&ke<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=ye[ye.length-2],this.lastChar[1]=ye[ye.length-1],xe.slice(0,-1)}return xe}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=ye[ye.length-1],ye.toString("utf16le",Ue,ye.length-1)}function G(ye){var Ue=ye&&ye.length?this.write(ye):"";return this.lastNeed?Ue+this.lastChar.toString("utf16le",0,this.lastTotal-this.lastNeed):Ue}function K(ye,Ue){var xe=(ye.length-Ue)%3;return 0===xe?ye.toString("base64",Ue):(this.lastNeed=3-xe,this.lastTotal=3,1===xe?this.lastChar[0]=ye[ye.length-1]:(this.lastChar[0]=ye[ye.length-2],this.lastChar[1]=ye[ye.length-1]),ye.toString("base64",Ue,ye.length-xe))}function oe(ye){var Ue=ye&&ye.length?this.write(ye):"";return this.lastNeed?Ue+this.lastChar.toString("base64",0,3-this.lastNeed):Ue}function ue(ye){return ye.toString(this.encoding)}function pe(ye){return ye&&ye.length?this.write(ye):""}i.s=_,_.prototype.write=function(ye){if(0===ye.length)return"";var Ue,xe;if(this.lastNeed){if(void 0===(Ue=this.fillLast(ye)))return"";xe=this.lastNeed,this.lastNeed=0}else xe=0;return xe<ye.length?Ue?Ue+this.text(ye,xe):this.text(ye,xe):Ue||""},_.prototype.end=function(ye){var Ue=ye&&ye.length?this.write(ye):"";return this.lastNeed?Ue+"\ufffd":Ue},_.prototype.text=function(ye,Ue){var xe=function(we,Z,Ft){var Dt=Z.length-1;if(Dt<Ft)return 0;var Yt=v(Z[Dt]);return Yt>=0?(Yt>0&&(we.lastNeed=Yt-1),Yt):--Dt<Ft||-2===Yt?0:(Yt=v(Z[Dt]))>=0?(Yt>0&&(we.lastNeed=Yt-2),Yt):--Dt<Ft||-2===Yt?0:(Yt=v(Z[Dt]))>=0?(Yt>0&&(2===Yt?Yt=0:we.lastNeed=Yt-3),Yt):0}(this,ye,Ue);if(!this.lastNeed)return ye.toString("utf8",Ue);this.lastTotal=xe;var ke=ye.length-(xe-this.lastNeed);return ye.copy(this.lastChar,0,ke),ye.toString("utf8",Ue,ke)},_.prototype.fillLast=function(ye){if(this.lastNeed<=ye.length)return ye.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);ye.copy(this.lastChar,this.lastTotal-this.lastNeed,0,ye.length),this.lastNeed-=ye.length}},396:(t,i,n)=>{var o=n(8764),l=o.Buffer;function _(O,P){for(var G in O)P[G]=O[G]}function v(O,P,G){return l(O,P,G)}l.from&&l.alloc&&l.allocUnsafe&&l.allocUnsafeSlow?t.exports=o:(_(o,i),i.Buffer=v),v.prototype=Object.create(l.prototype),_(l,v),v.from=function(O,P,G){if("number"==typeof O)throw new TypeError("Argument must not be a number");return l(O,P,G)},v.alloc=function(O,P,G){if("number"!=typeof O)throw new TypeError("Argument must be a number");var K=l(O);return void 0!==P?"string"==typeof G?K.fill(P,G):K.fill(P):K.fill(0),K},v.allocUnsafe=function(O){if("number"!=typeof O)throw new TypeError("Argument must be a number");return l(O)},v.allocUnsafeSlow=function(O){if("number"!=typeof O)throw new TypeError("Argument must be a number");return o.SlowBuffer(O)}},4927:(t,i,n)=>{function o(l){try{if(!n.g.localStorage)return!1}catch{return!1}var _=n.g.localStorage[l];return null!=_&&"true"===String(_).toLowerCase()}t.exports=function(l,_){if(o("noDeprecation"))return l;var v=!1;return function(){if(!v){if(o("throwDeprecation"))throw new Error(_);o("traceDeprecation")?console.trace(_):console.warn(_),v=!0}return l.apply(this,arguments)}}},255:t=>{var i={"&":"&amp;",'"':"&quot;","'":"&apos;","<":"&lt;",">":"&gt;"};t.exports=function(n){return n&&n.replace?n.replace(/([&"<>'])/g,function(o,l){return i[l]}):n}},3479:(t,i,n)=>{var o=n(4155),l=n(255),_=n(2830).Stream;function v(P,G,K){K=K||0;var oe,ue,pe=(oe=G,new Array(K||0).join(oe||"")),ye=P;if("object"==typeof P&&(ye=P[ue=Object.keys(P)[0]])&&ye._elem)return ye._elem.name=ue,ye._elem.icount=K,ye._elem.indent=G,ye._elem.indents=pe,ye._elem.interrupt=ye,ye._elem;var Ue,xe=[],ke=[];function we(Z){Object.keys(Z).forEach(function(Ft){xe.push(Ft+'="'+l(Z[Ft])+'"')})}switch(typeof ye){case"object":if(null===ye)break;ye._attr&&we(ye._attr),ye._cdata&&ke.push(("<![CDATA["+ye._cdata).replace(/\]\]>/g,"]]]]><![CDATA[>")+"]]>"),ye.forEach&&(Ue=!1,ke.push(""),ye.forEach(function(Z){"object"==typeof Z?"_attr"==Object.keys(Z)[0]?we(Z._attr):ke.push(v(Z,G,K+1)):(ke.pop(),Ue=!0,ke.push(l(Z)))}),Ue||ke.push(""));break;default:ke.push(l(ye))}return{name:ue,interrupt:!1,attributes:xe,content:ke,icount:K,indents:pe,indent:G}}function O(P,G,K){if("object"!=typeof G)return P(!1,G);var oe=G.interrupt?1:G.content.length;function ue(){for(;G.content.length;){var ye=G.content.shift();if(void 0!==ye){if(pe(ye))return;O(P,ye)}}P(!1,(oe>1?G.indents:"")+(G.name?"</"+G.name+">":"")+(G.indent&&!K?"\n":"")),K&&K()}function pe(ye){return!!ye.interrupt&&(ye.interrupt.append=P,ye.interrupt.end=ue,ye.interrupt=!1,P(!0),!0)}if(P(!1,G.indents+(G.name?"<"+G.name:"")+(G.attributes.length?" "+G.attributes.join(" "):"")+(oe?G.name?">":"":G.name?"/>":"")+(G.indent&&oe>1?"\n":"")),!oe)return P(!1,G.indent?"\n":"");pe(G)||ue()}t.exports=function(P,G){"object"!=typeof G&&(G={indent:G});var K,oe,ue=G.stream?new _:null,pe="",ye=!1,Ue=G.indent?!0===G.indent?"    ":G.indent:"",xe=!0;function ke(Dt){xe?o.nextTick(Dt):Dt()}function we(Dt,Yt){if(void 0!==Yt&&(pe+=Yt),Dt&&!ye&&(ue=ue||new _,ye=!0),Dt&&ye){var ln=pe;ke(function(){ue.emit("data",ln)}),pe=""}}function Z(Dt,Yt){O(we,v(Dt,Ue,Ue?1:0),Yt)}function Ft(){if(ue){var Dt=pe;ke(function(){ue.emit("data",Dt),ue.emit("end"),ue.readable=!1,ue.emit("close")})}}return ke(function(){xe=!1}),G.declaration&&(oe={version:"1.0",encoding:(K=G.declaration).encoding||"UTF-8"},K.standalone&&(oe.standalone=K.standalone),Z({"?xml":{_attr:oe}}),pe=pe.replace("/>","?>")),P&&P.forEach?P.forEach(function(Dt,Yt){var ln;Yt+1===P.length&&(ln=Ft),Z(Dt,ln)}):Z(P,Ft),ue?(ue.readable=!0,ue):pe},t.exports.element=t.exports.Element=function(){return{_elem:v(Array.prototype.slice.call(arguments)),push:function(K){if(!this.append)throw new Error("not assigned to a parent!");var oe=this,ue=this._elem.indent;O(this.append,v(K,ue,this._elem.icount+(ue?1:0)),function(){oe.append(!0)})},close:function(K){void 0!==K&&this.push(K),this.end&&this.end()}}}},5102:(t,i,n)=>{var o={"./all.js":5308,"./auth/actions.js":5812,"./auth/index.js":3705,"./auth/reducers.js":3962,"./auth/selectors.js":35,"./auth/spec-wrap-actions.js":8302,"./configs/actions.js":714,"./configs/helpers.js":2256,"./configs/index.js":1661,"./configs/reducers.js":7743,"./configs/selectors.js":9018,"./configs/spec-actions.js":2698,"./deep-linking/helpers.js":1970,"./deep-linking/index.js":4980,"./deep-linking/layout.js":5858,"./deep-linking/operation-tag-wrapper.jsx":4584,"./deep-linking/operation-wrapper.jsx":877,"./download-url.js":8011,"./err/actions.js":4966,"./err/error-transformers/hook.js":6808,"./err/error-transformers/transformers/not-of-type.js":2392,"./err/error-transformers/transformers/parameter-oneof.js":1835,"./err/index.js":7793,"./err/reducers.js":3527,"./err/selectors.js":7667,"./filter/index.js":9978,"./filter/opsFilter.js":4309,"./layout/actions.js":5474,"./layout/index.js":6821,"./layout/reducers.js":5672,"./layout/selectors.js":4400,"./layout/spec-extensions/wrap-selector.js":8989,"./logs/index.js":9150,"./oas3/actions.js":7002,"./oas3/auth-extensions/wrap-selectors.js":3723,"./oas3/components/callbacks.jsx":3427,"./oas3/components/http-auth.jsx":6775,"./oas3/components/index.js":6467,"./oas3/components/operation-link.jsx":5757,"./oas3/components/operation-servers.jsx":6796,"./oas3/components/request-body-editor.jsx":5327,"./oas3/components/request-body.jsx":2458,"./oas3/components/servers-container.jsx":9928,"./oas3/components/servers.jsx":6617,"./oas3/helpers.jsx":7779,"./oas3/index.js":7451,"./oas3/reducers.js":9666,"./oas3/selectors.js":5065,"./oas3/spec-extensions/selectors.js":1741,"./oas3/spec-extensions/wrap-selectors.js":2044,"./oas3/wrap-components/auth-item.jsx":356,"./oas3/wrap-components/index.js":7761,"./oas3/wrap-components/json-schema-string.jsx":287,"./oas3/wrap-components/markdown.jsx":2460,"./oas3/wrap-components/model.jsx":3499,"./oas3/wrap-components/online-validator-badge.js":58,"./oas3/wrap-components/version-stamp.jsx":9487,"./on-complete/index.js":8560,"./request-snippets/fn.js":4624,"./request-snippets/index.js":6575,"./request-snippets/request-snippets.jsx":4206,"./request-snippets/selectors.js":4669,"./safe-render/components/error-boundary.jsx":6195,"./safe-render/components/fallback.jsx":9403,"./safe-render/fn.jsx":6189,"./safe-render/index.js":8102,"./samples/fn.js":2473,"./samples/index.js":8883,"./spec/actions.js":1737,"./spec/index.js":7038,"./spec/reducers.js":32,"./spec/selectors.js":3881,"./spec/wrap-actions.js":7508,"./swagger-js/configs-wrap-actions.js":4852,"./swagger-js/index.js":2990,"./util/index.js":8525,"./view/fn.js":8347,"./view/index.js":3420,"./view/root-injects.jsx":5005,"core/plugins/all.js":5308,"core/plugins/auth/actions.js":5812,"core/plugins/auth/index.js":3705,"core/plugins/auth/reducers.js":3962,"core/plugins/auth/selectors.js":35,"core/plugins/auth/spec-wrap-actions.js":8302,"core/plugins/configs/actions.js":714,"core/plugins/configs/helpers.js":2256,"core/plugins/configs/index.js":1661,"core/plugins/configs/reducers.js":7743,"core/plugins/configs/selectors.js":9018,"core/plugins/configs/spec-actions.js":2698,"core/plugins/deep-linking/helpers.js":1970,"core/plugins/deep-linking/index.js":4980,"core/plugins/deep-linking/layout.js":5858,"core/plugins/deep-linking/operation-tag-wrapper.jsx":4584,"core/plugins/deep-linking/operation-wrapper.jsx":877,"core/plugins/download-url.js":8011,"core/plugins/err/actions.js":4966,"core/plugins/err/error-transformers/hook.js":6808,"core/plugins/err/error-transformers/transformers/not-of-type.js":2392,"core/plugins/err/error-transformers/transformers/parameter-oneof.js":1835,"core/plugins/err/index.js":7793,"core/plugins/err/reducers.js":3527,"core/plugins/err/selectors.js":7667,"core/plugins/filter/index.js":9978,"core/plugins/filter/opsFilter.js":4309,"core/plugins/layout/actions.js":5474,"core/plugins/layout/index.js":6821,"core/plugins/layout/reducers.js":5672,"core/plugins/layout/selectors.js":4400,"core/plugins/layout/spec-extensions/wrap-selector.js":8989,"core/plugins/logs/index.js":9150,"core/plugins/oas3/actions.js":7002,"core/plugins/oas3/auth-extensions/wrap-selectors.js":3723,"core/plugins/oas3/components/callbacks.jsx":3427,"core/plugins/oas3/components/http-auth.jsx":6775,"core/plugins/oas3/components/index.js":6467,"core/plugins/oas3/components/operation-link.jsx":5757,"core/plugins/oas3/components/operation-servers.jsx":6796,"core/plugins/oas3/components/request-body-editor.jsx":5327,"core/plugins/oas3/components/request-body.jsx":2458,"core/plugins/oas3/components/servers-container.jsx":9928,"core/plugins/oas3/components/servers.jsx":6617,"core/plugins/oas3/helpers.jsx":7779,"core/plugins/oas3/index.js":7451,"core/plugins/oas3/reducers.js":9666,"core/plugins/oas3/selectors.js":5065,"core/plugins/oas3/spec-extensions/selectors.js":1741,"core/plugins/oas3/spec-extensions/wrap-selectors.js":2044,"core/plugins/oas3/wrap-components/auth-item.jsx":356,"core/plugins/oas3/wrap-components/index.js":7761,"core/plugins/oas3/wrap-components/json-schema-string.jsx":287,"core/plugins/oas3/wrap-components/markdown.jsx":2460,"core/plugins/oas3/wrap-components/model.jsx":3499,"core/plugins/oas3/wrap-components/online-validator-badge.js":58,"core/plugins/oas3/wrap-components/version-stamp.jsx":9487,"core/plugins/on-complete/index.js":8560,"core/plugins/request-snippets/fn.js":4624,"core/plugins/request-snippets/index.js":6575,"core/plugins/request-snippets/request-snippets.jsx":4206,"core/plugins/request-snippets/selectors.js":4669,"core/plugins/safe-render/components/error-boundary.jsx":6195,"core/plugins/safe-render/components/fallback.jsx":9403,"core/plugins/safe-render/fn.jsx":6189,"core/plugins/safe-render/index.js":8102,"core/plugins/samples/fn.js":2473,"core/plugins/samples/index.js":8883,"core/plugins/spec/actions.js":1737,"core/plugins/spec/index.js":7038,"core/plugins/spec/reducers.js":32,"core/plugins/spec/selectors.js":3881,"core/plugins/spec/wrap-actions.js":7508,"core/plugins/swagger-js/configs-wrap-actions.js":4852,"core/plugins/swagger-js/index.js":2990,"core/plugins/util/index.js":8525,"core/plugins/view/fn.js":8347,"core/plugins/view/index.js":3420,"core/plugins/view/root-injects.jsx":5005};function l(v){var O=_(v);return n(O)}function _(v){if(!n.o(o,v)){var O=new Error("Cannot find module '"+v+"'");throw O.code="MODULE_NOT_FOUND",O}return o[v]}l.keys=function(){return Object.keys(o)},l.resolve=_,t.exports=l,l.id=5102},2517:t=>{t.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwcHgiICBoZWlnaHQ9IjIwMHB4IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIGNsYXNzPSJsZHMtcm9sbGluZyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IGJhY2tncm91bmQtcG9zaXRpb246IGluaXRpYWwgaW5pdGlhbDsgYmFja2dyb3VuZC1yZXBlYXQ6IGluaXRpYWwgaW5pdGlhbDsiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIG5nLWF0dHItc3Ryb2tlPSJ7e2NvbmZpZy5jb2xvcn19IiBuZy1hdHRyLXN0cm9rZS13aWR0aD0ie3tjb25maWcud2lkdGh9fSIgbmctYXR0ci1yPSJ7e2NvbmZpZy5yYWRpdXN9fSIgbmctYXR0ci1zdHJva2UtZGFzaGFycmF5PSJ7e2NvbmZpZy5kYXNoYXJyYXl9fSIgc3Ryb2tlPSIjNTU1NTU1IiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgY2FsY01vZGU9ImxpbmVhciIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49IjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlVHJhbnNmb3JtPjwvY2lyY2xlPjwvc3ZnPgo="},5163:t=>{t.exports='---\nurl: "https://petstore.swagger.io/v2/swagger.json"\ndom_id: "#swagger-ui"\nvalidatorUrl: "https://validator.swagger.io/validator"\n'},8898:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>eU()}),l)},4163:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>nU()}),l)},5527:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>iU()}),l)},5171:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>sU()}),l)},2954:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>lU()}),l)},7930:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>cU()}),l)},6145:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>fU()}),l)},1778:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>_U()}),l)},29:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>mU()}),l)},2372:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>vU()}),l)},8818:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>EU()}),l)},5487:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>bU()}),l)},2565:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>CU()}),l)},6785:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>OU()}),l)},8136:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>DU()}),l)},9963:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>xU()}),l)},4350:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>PU()}),l)},3590:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>IU()}),l)},5942:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>LU()}),l)},313:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>$U()}),l)},6914:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>UU()}),l)},7512:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>GU()}),l)},2740:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>jU()}),l)},374:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>VU()}),l)},6235:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>WU()}),l)},3769:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>QU()}),l)},6340:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>FP}),l)},7344:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>KU}),l)},8656:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>tB}),l)},3248:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>nB}),l)},5416:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>iB}),l)},775:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>$P}),l)},863:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>FD}),l)},9972:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>oB}),l)},1013:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>lB}),l)},302:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>cB}),l)},9334:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>fB}),l)},2691:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>hB}),l)},1581:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>gv}),l)},4780:t=>{t.exports=gB},8096:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>yB()}),l)},3294:t=>{t.exports=SB},9725:(t,i,n)=>{var l;t.exports=(n.d(l={},{List:()=>vv.List,Map:()=>vv.Map,OrderedMap:()=>vv.OrderedMap,Seq:()=>vv.Seq,Set:()=>vv.Set,default:()=>bB(),fromJS:()=>vv.fromJS}),l)},626:(t,i,n)=>{var l;t.exports=(n.d(l={},{JSON_SCHEMA:()=>V6,default:()=>GY}),l)},9908:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>jY()}),l)},7068:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>VY()}),l)},5476:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>WY()}),l)},5053:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>QY()}),l)},810:(t,i,n)=>{var l;t.exports=(n.d(l={},{Component:()=>Ln.Component,PureComponent:()=>Ln.PureComponent,default:()=>Ln,useEffect:()=>Ln.useEffect,useRef:()=>Ln.useRef,useState:()=>Ln.useState}),l)},9874:(t,i,n)=>{var l;t.exports=(n.d(l={},{CopyToClipboard:()=>KY.CopyToClipboard}),l)},9569:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>qY()}),l)},9871:(t,i,n)=>{var l;t.exports=(n.d(l={},{applyMiddleware:()=>sj,bindActionCreators:()=>oj,compose:()=>q6,createStore:()=>K6}),l)},3952:(t,i,n)=>{var l;t.exports=(n.d(l={},{Remarkable:()=>v1}),l)},8639:(t,i,n)=>{var l;t.exports=(n.d(l={},{createSelector:()=>vN}),l)},8518:(t,i,n)=>{var l;t.exports=(n.d(l={},{serializeError:()=>Qz.serializeError}),l)},5013:(t,i,n)=>{var l;t.exports=(n.d(l={},{opId:()=>vD}),l)},8900:(t,i,n)=>{var l;t.exports=(n.d(l={},{default:()=>Xz()}),l)},2361:()=>{},4616:()=>{}},yN={};function qo(t){var i=yN[t];if(void 0!==i)return i.exports;var n=yN[t]={exports:{}};return vV[t](n,n.exports,qo),n.exports}qo.n=t=>{var i=t&&t.__esModule?()=>t.default:()=>t;return qo.d(i,{a:i}),i},qo.d=(t,i)=>{for(var n in i)qo.o(i,n)&&!qo.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:i[n]})},qo.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch{if("object"==typeof window)return window}}(),qo.o=(t,i)=>Object.prototype.hasOwnProperty.call(t,i),qo.r=t=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var EN={};(()=>{qo.d(EN,{Z:()=>JW});var t={};qo.r(t),qo.d(t,{Button:()=>xN,Col:()=>iW,Collapse:()=>IN,Container:()=>rW,Input:()=>aW,Link:()=>PN,Row:()=>oW,Select:()=>wN,TextArea:()=>sW});var i={};qo.r(i),qo.d(i,{JsonSchemaArrayItemFile:()=>pR,JsonSchemaArrayItemText:()=>fR,JsonSchemaForm:()=>UN,JsonSchema_array:()=>GN,JsonSchema_boolean:()=>YN,JsonSchema_object:()=>jN,JsonSchema_string:()=>BN});var n=qo(1581),o=qo(5171);const l=(qo.d(vn={},{default:()=>eV()}),vn);var vn,_=qo(6145),v=qo(2740),O=qo(313),P=qo(7698),G=qo.n(P),K=qo(775),oe=qo(7344),ue=qo(8656),pe=qo(5527),ye=qo(7512),Ue=qo(8136),xe=qo(4163),ke=qo(6785),we=qo(2565),Z=qo(810),Ft=qo(9871),Dt=qo(9725);const Yt=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({combineReducers:()=>tV.U});var ln=qo(8518);const $n=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({default:()=>rV()});var nn=qo(4966),Jn=qo(7504),zn=qo(6298),Zr=function(Yn){return Yn},$r=function(){function Yn(){var vn,Ct=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,oe.default)(this,Yn),G()(this,{state:{},plugins:[],pluginsOptions:{},system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},Ct),this.getSystem=(0,pe.default)(vn=this._getSystem).call(vn,this),this.store=function ar(Yn,vn,Ct){var dt,mt,Bt;return dt=Yn,mt=vn,Bt=[(0,zn._5)(Ct)],(0,Ft.createStore)(dt,mt,(Jn.Z.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||Ft.compose)(Ft.applyMiddleware.apply(void 0,Bt)))}(Zr,(0,Dt.fromJS)(this.state),this.getSystem),this.buildSystem(!1),this.register(this.plugins)}return(0,ue.default)(Yn,[{key:"getStore",value:function(){return this.store}},{key:"register",value:function(vn){var Ct=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],at=ui(vn,this.getSystem(),this.pluginsOptions);Un(this.system,at),Ct&&this.buildSystem(),gi.call(this.system,vn,this.getSystem())&&this.buildSystem()}},{key:"buildSystem",value:function(){var vn=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],Ct=this.getStore().dispatch,at=this.getStore().getState;this.boundSystem=(0,ye.default)({},this.getRootInjects(),this.getWrappedAndBoundActions(Ct),this.getWrappedAndBoundSelectors(at,this.getSystem),this.getStateThunks(at),this.getFn(),this.getConfigs()),vn&&this.rebuildReducer()}},{key:"_getSystem",value:function(){return this.boundSystem}},{key:"getRootInjects",value:function(){var vn,Ct,at;return(0,ye.default)({getSystem:this.getSystem,getStore:(0,pe.default)(vn=this.getStore).call(vn,this),getComponents:(0,pe.default)(Ct=this.getComponents).call(Ct,this),getState:this.getStore().getState,getConfigs:(0,pe.default)(at=this._getConfigs).call(at,this),Im:Dt.default,React:Z.default},this.system.rootInjects||{})}},{key:"_getConfigs",value:function(){return this.system.configs}},{key:"getConfigs",value:function(){return{configs:this.system.configs}}},{key:"setConfigs",value:function(vn){this.system.configs=vn}},{key:"rebuildReducer",value:function(){var vn,Ct,at;this.store.replaceReducer((vn=(0,zn.Ay)(this.system.statePlugins,function(mt){return mt.reducers}),at=(0,ke.default)(Ct=(0,v.default)(vn)).call(Ct,function(mt,Ut){return mt[Ut]=(Bt=vn[Ut],function(){var hn=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Dt.Map,Vn=arguments.length>1?arguments[1]:void 0;if(!Bt)return hn;var fr=Bt[Vn.type];if(fr){var rr=lr(fr)(hn,Vn);return null===rr?hn:rr}return hn}),mt;var Bt},{}),(0,v.default)(at).length?(0,Yt.combineReducers)(at):Zr))}},{key:"getType",value:function(vn){var Ct=vn[0].toUpperCase()+(0,Ue.default)(vn).call(vn,1);return(0,zn.Q2)(this.system.statePlugins,function(at,dt){var mt=at[vn];if(mt)return(0,K.default)({},dt+Ct,mt)})}},{key:"getSelectors",value:function(){return this.getType("selectors")}},{key:"getActions",value:function(){var vn=this.getType("actions");return(0,zn.Ay)(vn,function(Ct){return(0,zn.Q2)(Ct,function(at,dt){if((0,zn.LQ)(at))return(0,K.default)({},dt,at)})})}},{key:"getWrappedAndBoundActions",value:function(vn){var Ct=this,at=this.getBoundActions(vn);return(0,zn.Ay)(at,function(dt,mt){var Ut=Ct.system.statePlugins[(0,Ue.default)(mt).call(mt,0,-7)].wrapActions;return Ut?(0,zn.Ay)(dt,function(Bt,hn){var Vn=Ut[hn];return Vn?((0,xe.default)(Vn)||(Vn=[Vn]),(0,ke.default)(Vn).call(Vn,function(fr,rr){var Mr=function(){return rr(fr,Ct.getSystem()).apply(void 0,arguments)};if(!(0,zn.LQ)(Mr))throw new TypeError("wrapActions needs to return a function that returns a new function (ie the wrapped action)");return lr(Mr)},Bt||Function.prototype)):Bt}):dt})}},{key:"getWrappedAndBoundSelectors",value:function(vn,Ct){var at=this,dt=this.getBoundSelectors(vn,Ct);return(0,zn.Ay)(dt,function(mt,Ut){var Bt=[(0,Ue.default)(Ut).call(Ut,0,-9)],hn=at.system.statePlugins[Bt].wrapSelectors;return hn?(0,zn.Ay)(mt,function(Vn,fr){var rr=hn[fr];return rr?((0,xe.default)(rr)||(rr=[rr]),(0,ke.default)(rr).call(rr,function(Mr,Li){var Fi=function(){for(var Ki,to=arguments.length,wo=new Array(to),bo=0;bo<to;bo++)wo[bo]=arguments[bo];return Li(Mr,at.getSystem()).apply(void 0,(0,o.default)(Ki=[vn().getIn(Bt)]).call(Ki,wo))};if(!(0,zn.LQ)(Fi))throw new TypeError("wrapSelector needs to return a function that returns a new function (ie the wrapped action)");return Fi},Vn||Function.prototype)):Vn}):mt})}},{key:"getStates",value:function(vn){var Ct;return(0,ke.default)(Ct=(0,v.default)(this.system.statePlugins)).call(Ct,function(at,dt){return at[dt]=vn.get(dt),at},{})}},{key:"getStateThunks",value:function(vn){var Ct;return(0,ke.default)(Ct=(0,v.default)(this.system.statePlugins)).call(Ct,function(at,dt){return at[dt]=function(){return vn().get(dt)},at},{})}},{key:"getFn",value:function(){return{fn:this.system.fn}}},{key:"getComponents",value:function(vn){var Ct=this,at=this.system.components[vn];return(0,xe.default)(at)?(0,ke.default)(at).call(at,function(dt,mt){return mt(dt,Ct.getSystem())}):void 0!==vn?this.system.components[vn]:this.system.components}},{key:"getBoundSelectors",value:function(vn,Ct){return(0,zn.Ay)(this.getSelectors(),function(at,dt){var mt=[(0,Ue.default)(dt).call(dt,0,-9)],Ut=function(){return vn().getIn(mt)};return(0,zn.Ay)(at,function(Bt){return function(){for(var hn,Vn=arguments.length,fr=new Array(Vn),rr=0;rr<Vn;rr++)fr[rr]=arguments[rr];var Mr=lr(Bt).apply(null,(0,o.default)(hn=[Ut()]).call(hn,fr));return"function"==typeof Mr&&(Mr=lr(Mr)(Ct())),Mr}})})}},{key:"getBoundActions",value:function(vn){vn=vn||this.getStore().dispatch;var Ct=this.getActions(),at=function dt(mt){return"function"!=typeof mt?(0,zn.Ay)(mt,function(Ut){return dt(Ut)}):function(){var Ut=null;try{Ut=mt.apply(void 0,arguments)}catch(Bt){Ut={type:nn.NEW_THROWN_ERR,error:!0,payload:(0,ln.serializeError)(Bt)}}finally{return Ut}}};return(0,zn.Ay)(Ct,function(dt){return(0,Ft.bindActionCreators)(at(dt),vn)})}},{key:"getMapStateToProps",value:function(){var vn=this;return function(){return(0,ye.default)({},vn.getSystem())}}},{key:"getMapDispatchToProps",value:function(vn){var Ct=this;return function(at){return G()({},Ct.getWrappedAndBoundActions(at),Ct.getFn(),vn)}}}]),Yn}();function ui(Yn,vn,Ct){if((0,zn.Kn)(Yn)&&!(0,zn.kJ)(Yn))return(0,$n.default)({},Yn);if((0,zn.Wl)(Yn))return ui(Yn(vn),vn,Ct);if((0,zn.kJ)(Yn)){var at,dt="chain"===Ct.pluginLoadType?vn.getComponents():{};return(0,ke.default)(at=(0,we.default)(Yn).call(Yn,function(mt){return ui(mt,vn,Ct)})).call(at,Un,dt)}return{}}function gi(Yn,vn){var Ct=this,mt=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).hasLoaded;return(0,zn.Kn)(Yn)&&!(0,zn.kJ)(Yn)&&"function"==typeof Yn.afterLoad&&(mt=!0,lr(Yn.afterLoad).call(this,vn)),(0,zn.Wl)(Yn)?gi.call(this,Yn(vn),vn,{hasLoaded:mt}):(0,zn.kJ)(Yn)?(0,we.default)(Yn).call(Yn,function(Ut){return gi.call(Ct,Ut,vn,{hasLoaded:mt})}):mt}function Un(){var Yn=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},vn=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,zn.Kn)(Yn))return{};if(!(0,zn.Kn)(vn))return Yn;vn.wrapComponents&&((0,zn.Ay)(vn.wrapComponents,function(Li,Fi){var Ki=Yn.components&&Yn.components[Fi];Ki&&(0,xe.default)(Ki)?(Yn.components[Fi]=(0,o.default)(Ki).call(Ki,[Li]),delete vn.wrapComponents[Fi]):Ki&&(Yn.components[Fi]=[Ki,Li],delete vn.wrapComponents[Fi])}),(0,v.default)(vn.wrapComponents).length||delete vn.wrapComponents);var Ct=Yn.statePlugins;if((0,zn.Kn)(Ct))for(var at in Ct){var dt=Ct[at];if((0,zn.Kn)(dt)){var mt=dt.wrapActions,Ut=dt.wrapSelectors;if((0,zn.Kn)(mt))for(var Bt in mt){var hn,Vn=mt[Bt];(0,xe.default)(Vn)||(mt[Bt]=Vn=[Vn]),vn&&vn.statePlugins&&vn.statePlugins[at]&&vn.statePlugins[at].wrapActions&&vn.statePlugins[at].wrapActions[Bt]&&(vn.statePlugins[at].wrapActions[Bt]=(0,o.default)(hn=mt[Bt]).call(hn,vn.statePlugins[at].wrapActions[Bt]))}if((0,zn.Kn)(Ut))for(var fr in Ut){var rr,Mr=Ut[fr];(0,xe.default)(Mr)||(Ut[fr]=Mr=[Mr]),vn&&vn.statePlugins&&vn.statePlugins[at]&&vn.statePlugins[at].wrapSelectors&&vn.statePlugins[at].wrapSelectors[fr]&&(vn.statePlugins[at].wrapSelectors[fr]=(0,o.default)(rr=Ut[fr]).call(rr,vn.statePlugins[at].wrapSelectors[fr]))}}}return G()(Yn,vn)}function lr(Yn){var Ct=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).logErrors,at=void 0===Ct||Ct;return"function"!=typeof Yn?Yn:function(){try{for(var dt,mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return Yn.call.apply(Yn,(0,o.default)(dt=[this]).call(dt,Ut))}catch(hn){return at&&console.error(hn),null}}}var Cr=qo(7793),Wn=qo(6821),ai=qo(7038),ho=qo(3420),Yi=qo(8883),lo=qo(6575),pi=qo(9150),Kn=qo(2990),Nn=qo(3705),_i=qo(8525),Zi=qo(8011),So=qo(1661),us=qo(4980),Zo=qo(9978),pa=qo(8560),va=qo(8102),qi=qo(6340),xo=qo(9972),$o=qo(5416),rt=qo(8818),kt=(qo(5053),qo(9569),qo(5013)),Lt=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"toggleShown",function(){var Bt=mt.props,hn=Bt.layoutActions,Vn=Bt.tag,fr=Bt.operationId,rr=Bt.isShown,Mr=mt.getResolvedSubtree();rr||void 0!==Mr||mt.requestResolvedSubtree(),hn.show(["operations",Vn,fr],!rr)}),(0,K.default)((0,qi.default)(mt),"onCancelClick",function(){mt.setState({tryItOutEnabled:!mt.state.tryItOutEnabled})}),(0,K.default)((0,qi.default)(mt),"onTryoutClick",function(){mt.setState({tryItOutEnabled:!mt.state.tryItOutEnabled})}),(0,K.default)((0,qi.default)(mt),"onExecute",function(){mt.setState({executeInProgress:!0})}),(0,K.default)((0,qi.default)(mt),"getResolvedSubtree",function(){var Bt=mt.props,Vn=Bt.path,fr=Bt.method,rr=Bt.specPath;return Bt.specSelectors.specResolvedSubtree(rr?rr.toJS():["paths",Vn,fr])}),(0,K.default)((0,qi.default)(mt),"requestResolvedSubtree",function(){var Bt=mt.props,Vn=Bt.path,fr=Bt.method,rr=Bt.specPath;return Bt.specActions.requestResolvedSubtree(rr?rr.toJS():["paths",Vn,fr])});var Ut=at.getConfigs().tryItOutEnabled;return mt.state={tryItOutEnabled:!0===Ut||"true"===Ut,executeInProgress:!1},mt}return(0,ue.default)(Ct,[{key:"mapStateToProps",value:function(at,dt){var mt,Ut=dt.op,Bt=dt.layoutSelectors,hn=(0,dt.getConfigs)(),Vn=hn.docExpansion,fr=hn.deepLinking,rr=hn.displayOperationId,Mr=hn.displayRequestDuration,Li=hn.supportedSubmitMethods,Fi=Bt.showSummary(),Ki=Ut.getIn(["operation","__originalOperationId"])||Ut.getIn(["operation","operationId"])||(0,kt.opId)(Ut.get("operation"),dt.path,dt.method)||Ut.get("id"),to=["operations",dt.tag,Ki],wo=fr&&"false"!==fr,bo=(0,rt.default)(Li).call(Li,dt.method)>=0&&(void 0===dt.allowTryItOut?dt.specSelectors.allowTryItOutFor(dt.path,dt.method):dt.allowTryItOut),Mo=Ut.getIn(["operation","security"])||dt.specSelectors.security();return{operationId:Ki,isDeepLinkingEnabled:wo,showSummary:Fi,displayOperationId:rr,displayRequestDuration:Mr,allowTryItOut:bo,security:Mo,isAuthorized:dt.authSelectors.isAuthorized(Mo),isShown:Bt.isShown(to,"full"===Vn),jumpToKey:(0,o.default)(mt="paths.".concat(dt.path,".")).call(mt,dt.method),response:dt.specSelectors.responseFor(dt.path,dt.method),request:dt.specSelectors.requestFor(dt.path,dt.method)}}},{key:"componentDidMount",value:function(){var at=this.props.isShown,dt=this.getResolvedSubtree();at&&void 0===dt&&this.requestResolvedSubtree()}},{key:"UNSAFE_componentWillReceiveProps",value:function(at){var dt=at.response,mt=at.isShown,Ut=this.getResolvedSubtree();dt!==this.props.response&&this.setState({executeInProgress:!1}),mt&&void 0===Ut&&this.requestResolvedSubtree()}},{key:"render",value:function(){var at=this.props,dt=at.op,mt=at.tag,Ut=at.path,Bt=at.method,hn=at.security,Vn=at.isAuthorized,fr=at.operationId,rr=at.showSummary,Mr=at.isShown,Li=at.jumpToKey,Fi=at.allowTryItOut,Ki=at.response,to=at.request,wo=at.displayOperationId,bo=at.displayRequestDuration,Mo=at.isDeepLinkingEnabled,Ws=at.specPath,sa=at.specSelectors,Ma=at.specActions,ta=at.getComponent,na=at.getConfigs,aa=at.layoutSelectors,Xs=at.layoutActions,ml=at.authActions,ha=at.authSelectors,Xa=at.oas3Actions,bs=at.oas3Selectors,Oa=at.fn,Yl=ta("operation"),Ad=this.getResolvedSubtree()||(0,Dt.Map)(),Of=(0,Dt.fromJS)({op:Ad,tag:mt,path:Ut,summary:dt.getIn(["operation","summary"])||"",deprecated:Ad.get("deprecated")||dt.getIn(["operation","deprecated"])||!1,method:Bt,security:hn,isAuthorized:Vn,operationId:fr,originalOperationId:Ad.getIn(["operation","__originalOperationId"]),showSummary:rr,isShown:Mr,jumpToKey:Li,allowTryItOut:Fi,request:to,displayOperationId:wo,displayRequestDuration:bo,isDeepLinkingEnabled:Mo,executeInProgress:this.state.executeInProgress,tryItOutEnabled:this.state.tryItOutEnabled});return Z.default.createElement(Yl,{operation:Of,response:Ki,request:to,isShown:Mr,toggleShown:this.toggleShown,onTryoutClick:this.onTryoutClick,onCancelClick:this.onCancelClick,onExecute:this.onExecute,specPath:Ws,specActions:Ma,specSelectors:sa,oas3Actions:Xa,oas3Selectors:bs,layoutActions:Xs,layoutSelectors:aa,authActions:ml,authSelectors:ha,getComponent:ta,getConfigs:na,fn:Oa})}}]),Ct}(Z.PureComponent);(0,K.default)(Lt,"defaultProps",{showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1,displayRequestDuration:!1});var cr=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"getLayout",value:function(){var at=this.props,dt=at.getComponent,mt=at.layoutSelectors.current();return dt(mt,!0)||function(){return Z.default.createElement("h1",null,' No layout defined for "',mt,'" ')}}},{key:"render",value:function(){var at=this.getLayout();return Z.default.createElement(at,null)}}]),Ct}(Z.default.Component);cr.defaultProps={};var Yr=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"close",function(){dt.props.authActions.showDefinitions(!1)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this.props,mt=dt.authSelectors,Ut=dt.authActions,Bt=dt.getComponent,hn=dt.errSelectors,Vn=dt.specSelectors,fr=dt.fn.AST,rr=void 0===fr?{}:fr,Mr=mt.shownDefinitions(),Li=Bt("auths");return Z.default.createElement("div",{className:"dialog-ux"},Z.default.createElement("div",{className:"backdrop-ux"}),Z.default.createElement("div",{className:"modal-ux"},Z.default.createElement("div",{className:"modal-dialog-ux"},Z.default.createElement("div",{className:"modal-ux-inner"},Z.default.createElement("div",{className:"modal-ux-header"},Z.default.createElement("h3",null,"Available authorizations"),Z.default.createElement("button",{type:"button",className:"close-modal",onClick:this.close},Z.default.createElement("svg",{width:"20",height:"20"},Z.default.createElement("use",{href:"#close",xlinkHref:"#close"})))),Z.default.createElement("div",{className:"modal-ux-content"},(0,we.default)(at=Mr.valueSeq()).call(at,function(Fi,Ki){return Z.default.createElement(Li,{key:Ki,AST:rr,definitions:Fi,getComponent:Bt,errSelectors:hn,authSelectors:mt,authActions:Ut,specSelectors:Vn})}))))))}}]),Ct}(Z.default.Component),li=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.isAuthorized,mt=at.showPopup,Ut=at.onClick,Bt=(0,at.getComponent)("authorizationPopup",!0);return Z.default.createElement("div",{className:"auth-wrapper"},Z.default.createElement("button",{className:dt?"btn authorize locked":"btn authorize unlocked",onClick:Ut},Z.default.createElement("span",null,"Authorize"),Z.default.createElement("svg",{width:"20",height:"20"},Z.default.createElement("use",{href:dt?"#locked":"#unlocked",xlinkHref:dt?"#locked":"#unlocked"}))),mt&&Z.default.createElement(Bt,null))}}]),Ct}(Z.default.Component),eo=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.authActions,mt=at.authSelectors,Bt=at.getComponent,hn=at.specSelectors.securityDefinitions(),Vn=mt.definitionsToAuthorize(),fr=Bt("authorizeBtn");return hn?Z.default.createElement(fr,{onClick:function(){return dt.showDefinitions(Vn)},isAuthorized:!!mt.authorized().size,showPopup:!!mt.shownDefinitions(),getComponent:Bt}):null}}]),Ct}(Z.default.Component),_a=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onClick",function(hn){hn.stopPropagation();var Vn=dt.props.onClick;Vn&&Vn()}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props.isAuthorized;return Z.default.createElement("button",{className:at?"authorization__btn locked":"authorization__btn unlocked","aria-label":at?"authorization button locked":"authorization button unlocked",onClick:this.onClick},Z.default.createElement("svg",{width:"20",height:"20"},Z.default.createElement("use",{href:at?"#locked":"#unlocked",xlinkHref:at?"#locked":"#unlocked"})))}}]),Ct}(Z.default.Component),ps=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;return(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"onAuthChange",function(Ut){mt.setState((0,K.default)({},Ut.name,Ut))}),(0,K.default)((0,qi.default)(mt),"submitAuth",function(Ut){Ut.preventDefault(),mt.props.authActions.authorizeWithPersistOption(mt.state)}),(0,K.default)((0,qi.default)(mt),"logoutClick",function(Ut){Ut.preventDefault();var Bt=mt.props,hn=Bt.authActions,Vn=Bt.definitions,fr=(0,we.default)(Vn).call(Vn,function(rr,Mr){return Mr}).toArray();mt.setState((0,ke.default)(fr).call(fr,function(rr,Mr){return rr[Mr]="",rr},{})),hn.logoutWithPersistOption(fr)}),(0,K.default)((0,qi.default)(mt),"close",function(Ut){Ut.preventDefault(),mt.props.authActions.showDefinitions(!1)}),mt.state={},mt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this,mt=this.props,Ut=mt.definitions,Bt=mt.getComponent,hn=mt.authSelectors,Vn=mt.errSelectors,fr=Bt("AuthItem"),rr=Bt("oauth2",!0),Mr=Bt("Button"),Li=hn.authorized(),Fi=(0,_.default)(Ut).call(Ut,function(wo,bo){return!!Li.get(bo)}),Ki=(0,_.default)(Ut).call(Ut,function(wo){return"oauth2"!==wo.get("type")}),to=(0,_.default)(Ut).call(Ut,function(wo){return"oauth2"===wo.get("type")});return Z.default.createElement("div",{className:"auth-container"},!!Ki.size&&Z.default.createElement("form",{onSubmit:this.submitAuth},(0,we.default)(Ki).call(Ki,function(wo,bo){return Z.default.createElement(fr,{key:bo,schema:wo,name:bo,getComponent:Bt,onAuthChange:dt.onAuthChange,authorized:Li,errSelectors:Vn})}).toArray(),Z.default.createElement("div",{className:"auth-btn-wrapper"},Ki.size===Fi.size?Z.default.createElement(Mr,{className:"btn modal-btn auth",onClick:this.logoutClick},"Logout"):Z.default.createElement(Mr,{type:"submit",className:"btn modal-btn auth authorize"},"Authorize"),Z.default.createElement(Mr,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),to&&to.size?Z.default.createElement("div",null,Z.default.createElement("div",{className:"scope-def"},Z.default.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),Z.default.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),(0,we.default)(at=(0,_.default)(Ut).call(Ut,function(wo){return"oauth2"===wo.get("type")})).call(at,function(wo,bo){return Z.default.createElement("div",{key:bo},Z.default.createElement(rr,{authorized:Li,schema:wo,name:bo}))}).toArray()):null)}}]),Ct}(Z.default.Component),Fl=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this.props,mt=dt.schema,Ut=dt.name,Bt=dt.getComponent,hn=dt.onAuthChange,Vn=dt.authorized,fr=dt.errSelectors,rr=Bt("apiKeyAuth"),Mr=Bt("basicAuth"),Li=mt.get("type");switch(Li){case"apiKey":at=Z.default.createElement(rr,{key:Ut,schema:mt,name:Ut,errSelectors:fr,authorized:Vn,getComponent:Bt,onChange:hn});break;case"basic":at=Z.default.createElement(Mr,{key:Ut,schema:mt,name:Ut,errSelectors:fr,authorized:Vn,getComponent:Bt,onChange:hn});break;default:at=Z.default.createElement("div",{key:Ut},"Unknown security definition type ",Li)}return Z.default.createElement("div",{key:"".concat(Ut,"-jump")},at)}}]),Ct}(Z.default.Component),Gl=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props.error,dt=at.get("level"),mt=at.get("message"),Ut=at.get("source");return Z.default.createElement("div",{className:"errors"},Z.default.createElement("b",null,Ut," ",dt),Z.default.createElement("span",null,mt))}}]),Ct}(Z.default.Component),Ou=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"onChange",function(fr){var rr=mt.props.onChange,Li=(0,ye.default)({},mt.state,{value:fr.target.value});mt.setState(Li),rr(Li)});var Ut=mt.props,Bt=Ut.name,hn=Ut.schema,Vn=mt.getValue();return mt.state={name:Bt,schema:hn,value:Vn},mt}return(0,ue.default)(Ct,[{key:"getValue",value:function(){var at=this.props,mt=at.authorized;return mt&&mt.getIn([at.name,"value"])}},{key:"render",value:function(){var at,dt,mt=this.props,Ut=mt.schema,Bt=mt.getComponent,hn=mt.errSelectors,Vn=mt.name,fr=Bt("Input"),rr=Bt("Row"),Mr=Bt("Col"),Li=Bt("authError"),Fi=Bt("Markdown",!0),Ki=Bt("JumpToPath",!0),to=this.getValue(),wo=(0,_.default)(at=hn.allErrors()).call(at,function(bo){return bo.get("authId")===Vn});return Z.default.createElement("div",null,Z.default.createElement("h4",null,Z.default.createElement("code",null,Vn||Ut.get("name")),"\xa0(apiKey)",Z.default.createElement(Ki,{path:["securityDefinitions",Vn]})),to&&Z.default.createElement("h6",null,"Authorized"),Z.default.createElement(rr,null,Z.default.createElement(Fi,{source:Ut.get("description")})),Z.default.createElement(rr,null,Z.default.createElement("p",null,"Name: ",Z.default.createElement("code",null,Ut.get("name")))),Z.default.createElement(rr,null,Z.default.createElement("p",null,"In: ",Z.default.createElement("code",null,Ut.get("in")))),Z.default.createElement(rr,null,Z.default.createElement("label",null,"Value:"),to?Z.default.createElement("code",null," ****** "):Z.default.createElement(Mr,null,Z.default.createElement(fr,{type:"text",onChange:this.onChange,autoFocus:!0}))),(0,we.default)(dt=wo.valueSeq()).call(dt,function(bo,Mo){return Z.default.createElement(Li,{error:bo,key:Mo})}))}}]),Ct}(Z.default.Component),Pc=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"onChange",function(fr){var rr=mt.props.onChange,Mr=fr.target,Ki=mt.state.value;Ki[Mr.name]=Mr.value,mt.setState({value:Ki}),rr(mt.state)});var Ut=mt.props,Bt=Ut.schema,hn=Ut.name,Vn=mt.getValue().username;return mt.state={name:hn,schema:Bt,value:Vn?{username:Vn}:{}},mt}return(0,ue.default)(Ct,[{key:"getValue",value:function(){var at=this.props,dt=at.authorized;return dt&&dt.getIn([at.name,"value"])||{}}},{key:"render",value:function(){var at,dt,mt=this.props,Ut=mt.schema,Bt=mt.getComponent,hn=mt.name,Vn=mt.errSelectors,fr=Bt("Input"),rr=Bt("Row"),Mr=Bt("Col"),Li=Bt("authError"),Fi=Bt("JumpToPath",!0),Ki=Bt("Markdown",!0),to=this.getValue().username,wo=(0,_.default)(at=Vn.allErrors()).call(at,function(bo){return bo.get("authId")===hn});return Z.default.createElement("div",null,Z.default.createElement("h4",null,"Basic authorization",Z.default.createElement(Fi,{path:["securityDefinitions",hn]})),to&&Z.default.createElement("h6",null,"Authorized"),Z.default.createElement(rr,null,Z.default.createElement(Ki,{source:Ut.get("description")})),Z.default.createElement(rr,null,Z.default.createElement("label",null,"Username:"),to?Z.default.createElement("code",null," ",to," "):Z.default.createElement(Mr,null,Z.default.createElement(fr,{type:"text",required:"required",name:"username",onChange:this.onChange,autoFocus:!0}))),Z.default.createElement(rr,null,Z.default.createElement("label",null,"Password:"),to?Z.default.createElement("code",null," ****** "):Z.default.createElement(Mr,null,Z.default.createElement(fr,{autoComplete:"new-password",name:"password",type:"password",onChange:this.onChange}))),(0,we.default)(dt=wo.valueSeq()).call(dt,function(bo,Mo){return Z.default.createElement(Li,{error:bo,key:Mo})}))}}]),Ct}(Z.default.Component);function np(Yn){var vn=Yn.example,Ct=Yn.showValue,at=Yn.getComponent,dt=Yn.getConfigs,mt=at("Markdown",!0),Ut=at("highlightCode");return vn?Z.default.createElement("div",{className:"example"},vn.get("description")?Z.default.createElement("section",{className:"example__section"},Z.default.createElement("div",{className:"example__section-header"},"Example Description"),Z.default.createElement("p",null,Z.default.createElement(mt,{source:vn.get("description")}))):null,Ct&&vn.has("value")?Z.default.createElement("section",{className:"example__section"},Z.default.createElement("div",{className:"example__section-header"},"Example Value"),Z.default.createElement(Ut,{getConfigs:dt,value:(0,zn.Pz)(vn.get("value"))})):null):null}var ou=qo(6914),yd=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"_onSelect",function(hn){var fr=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).isSyntheticChange;"function"==typeof dt.props.onSelect&&dt.props.onSelect(hn,{isSyntheticChange:void 0!==fr&&fr})}),(0,K.default)((0,qi.default)(dt),"_onDomSelect",function(hn){if("function"==typeof dt.props.onSelect){var Vn=hn.target.selectedOptions[0].getAttribute("value");dt._onSelect(Vn,{isSyntheticChange:!1})}}),(0,K.default)((0,qi.default)(dt),"getCurrentExample",function(){var hn=dt.props,Vn=hn.examples,rr=Vn.get(hn.currentExampleKey),Mr=Vn.keySeq().first(),Li=Vn.get(Mr);return rr||Li||(0,ou.default)({})}),dt}return(0,ue.default)(Ct,[{key:"componentDidMount",value:function(){var at=this.props,mt=at.examples;if("function"==typeof at.onSelect){var Ut=mt.first(),Bt=mt.keyOf(Ut);this._onSelect(Bt,{isSyntheticChange:!0})}}},{key:"UNSAFE_componentWillReceiveProps",value:function(at){var mt=at.examples;if(mt!==this.props.examples&&!mt.has(at.currentExampleKey)){var Ut=mt.first(),Bt=mt.keyOf(Ut);this._onSelect(Bt,{isSyntheticChange:!0})}}},{key:"render",value:function(){var at=this.props,dt=at.examples,mt=at.currentExampleKey,Ut=at.isValueModified,Bt=at.isModifiedValueAvailable;return Z.default.createElement("div",{className:"examples-select"},at.showLabels?Z.default.createElement("span",{className:"examples-select__section-label"},"Examples: "):null,Z.default.createElement("select",{className:"examples-select-element",onChange:this._onDomSelect,value:Bt&&Ut?"__MODIFIED__VALUE__":mt||""},Bt?Z.default.createElement("option",{value:"__MODIFIED__VALUE__"},"[Modified value]"):null,(0,we.default)(dt).call(dt,function(Vn,fr){return Z.default.createElement("option",{key:fr,value:fr},Vn.get("summary")||fr)}).valueSeq()))}}]),Ct}(Z.default.PureComponent);(0,K.default)(yd,"defaultProps",{examples:Dt.default.Map({}),onSelect:function(){for(var Yn,vn,Ct=arguments.length,at=new Array(Ct),dt=0;dt<Ct;dt++)at[dt]=arguments[dt];return(Yn=console).log.apply(Yn,(0,o.default)(vn=["DEBUG: ExamplesSelect was not given an onSelect callback"]).call(vn,at))},currentExampleKey:null,showLabels:!0});var kp=function(Yn){return Dt.List.isList(Yn)?Yn:(0,zn.Pz)(Yn)},Y_=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at){var dt;(0,oe.default)(this,Ct),dt=vn.call(this,at),(0,K.default)((0,qi.default)(dt),"_getStateForCurrentNamespace",function(){return(dt.state[dt.props.currentNamespace]||(0,Dt.Map)()).toObject()}),(0,K.default)((0,qi.default)(dt),"_setStateForCurrentNamespace",function(Ut){return dt._setStateForNamespace(dt.props.currentNamespace,Ut)}),(0,K.default)((0,qi.default)(dt),"_setStateForNamespace",function(Ut,Bt){var hn=(dt.state[Ut]||(0,Dt.Map)()).mergeDeep(Bt);return dt.setState((0,K.default)({},Ut,hn))}),(0,K.default)((0,qi.default)(dt),"_isCurrentUserInputSameAsExampleValue",function(){var Ut=dt.props.currentUserInputValue;return dt._getCurrentExampleValue()===Ut}),(0,K.default)((0,qi.default)(dt),"_getValueForExample",function(Ut,Bt){return kp(((Bt||dt.props).examples||(0,Dt.Map)({})).getIn([Ut,"value"]))}),(0,K.default)((0,qi.default)(dt),"_getCurrentExampleValue",function(Ut){return dt._getValueForExample((Ut||dt.props).currentKey,Ut||dt.props)}),(0,K.default)((0,qi.default)(dt),"_onExamplesSelect",function(Ut){var hn=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}).isSyntheticChange,Vn=dt.props,fr=Vn.onSelect,rr=Vn.updateValue,Mr=Vn.currentUserInputValue,Li=Vn.userHasEditedBody,Ki=dt._getStateForCurrentNamespace().lastUserEditedValue,to=dt._getValueForExample(Ut);if("__MODIFIED__VALUE__"===Ut)return rr(kp(Ki)),dt._setStateForCurrentNamespace({isModifiedValueSelected:!0});if("function"==typeof fr){for(var wo,bo=arguments.length,Mo=new Array(bo>2?bo-2:0),Ws=2;Ws<bo;Ws++)Mo[Ws-2]=arguments[Ws];fr.apply(void 0,(0,o.default)(wo=[Ut,{isSyntheticChange:hn}]).call(wo,Mo))}dt._setStateForCurrentNamespace({lastDownstreamValue:to,isModifiedValueSelected:hn&&Li||!!Mr&&Mr!==to}),hn||"function"==typeof rr&&rr(kp(to))});var mt=dt._getCurrentExampleValue();return dt.state=(0,K.default)({},at.currentNamespace,(0,Dt.Map)({lastUserEditedValue:dt.props.currentUserInputValue,lastDownstreamValue:mt,isModifiedValueSelected:dt.props.userHasEditedBody||dt.props.currentUserInputValue!==mt})),dt}return(0,ue.default)(Ct,[{key:"componentWillUnmount",value:function(){this.props.setRetainRequestBodyValueFlag(!1)}},{key:"UNSAFE_componentWillReceiveProps",value:function(at){var dt=at.currentUserInputValue,mt=at.examples,Ut=at.onSelect,Bt=at.userHasEditedBody,hn=this._getStateForCurrentNamespace(),Vn=hn.lastUserEditedValue,fr=hn.lastDownstreamValue,rr=this._getValueForExample(at.currentKey,at),Mr=(0,_.default)(mt).call(mt,function(Li){return Li.get("value")===dt||(0,zn.Pz)(Li.get("value"))===dt});Mr.size?Ut(Mr.has(at.currentKey)?at.currentKey:Mr.keySeq().first(),{isSyntheticChange:!0}):dt!==this.props.currentUserInputValue&&dt!==Vn&&dt!==fr&&(this.props.setRetainRequestBodyValueFlag(!0),this._setStateForNamespace(at.currentNamespace,{lastUserEditedValue:at.currentUserInputValue,isModifiedValueSelected:Bt||dt!==rr}))}},{key:"render",value:function(){var at=this.props,dt=at.currentUserInputValue,mt=at.examples,Ut=at.currentKey,Bt=at.getComponent,hn=at.userHasEditedBody,Vn=this._getStateForCurrentNamespace(),fr=Vn.lastDownstreamValue,rr=Vn.lastUserEditedValue,Mr=Vn.isModifiedValueSelected,Li=Bt("ExamplesSelect");return Z.default.createElement(Li,{examples:mt,currentExampleKey:Ut,onSelect:this._onExamplesSelect,isModifiedValueAvailable:!!rr&&rr!==fr,isValueModified:void 0!==dt&&Mr&&dt!==this._getCurrentExampleValue()||hn})}}]),Ct}(Z.default.PureComponent);(0,K.default)(Y_,"defaultProps",{userHasEditedBody:!1,examples:(0,Dt.Map)({}),currentNamespace:"__DEFAULT__NAMESPACE__",setRetainRequestBodyValueFlag:function(){},onSelect:function(){for(var Yn,vn,Ct=arguments.length,at=new Array(Ct),dt=0;dt<Ct;dt++)at[dt]=arguments[dt];return(Yn=console).log.apply(Yn,(0,o.default)(vn=["ExamplesSelectValueRetainer: no `onSelect` function was provided"]).call(vn,at))},updateValue:function(){for(var Yn,vn,Ct=arguments.length,at=new Array(Ct),dt=0;dt<Ct;dt++)at[dt]=arguments[dt];return(Yn=console).log.apply(Yn,(0,o.default)(vn=["ExamplesSelectValueRetainer: no `updateValue` function was provided"]).call(vn,at))}});var S_=qo(8898),j_=qo(5487),Au=qo(2372),hd=qo(8900),n_=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"close",function(bo){bo.preventDefault(),mt.props.authActions.showDefinitions(!1)}),(0,K.default)((0,qi.default)(mt),"authorize",function(){var bo=mt.props,Mo=bo.authActions,Ws=bo.errActions,Ma=bo.authSelectors,ta=bo.oas3Selectors,na=(0,bo.getConfigs)(),aa=Ma.getConfigs();Ws.clear({authId:name,type:"auth",source:"auth"}),function(Xs){var ml=Xs.auth,ha=Xs.authActions,Xa=Xs.errActions,bs=Xs.configs,Oa=Xs.authConfigs,Yl=void 0===Oa?{}:Oa,Ad=Xs.currentServer,Of=ml.schema,Af=ml.scopes,rp=ml.name,Du=ml.clientId,Dd=Of.get("flow"),jc=[];switch(Dd){case"password":return void ha.authorizePassword(ml);case"application":case"clientCredentials":case"client_credentials":return void ha.authorizeApplication(ml);case"accessCode":case"authorizationCode":case"authorization_code":jc.push("response_type=code");break;case"implicit":jc.push("response_type=token")}"string"==typeof Du&&jc.push("client_id="+encodeURIComponent(Du));var $p=bs.oauth2RedirectUrl;if(void 0!==$p){jc.push("redirect_uri="+encodeURIComponent($p));var bp=[];(0,xe.default)(Af)?bp=Af:Dt.default.List.isList(Af)&&(bp=Af.toArray()),bp.length>0&&jc.push("scope="+encodeURIComponent(bp.join(Yl.scopeSeparator||" ")));var df=(0,zn.r3)(new Date);if(jc.push("state="+encodeURIComponent(df)),void 0!==Yl.realm&&jc.push("realm="+encodeURIComponent(Yl.realm)),("authorizationCode"===Dd||"authorization_code"===Dd||"accessCode"===Dd)&&Yl.usePkceWithAuthorizationCodeGrant){var zc=(0,zn.Uj)(),ff=(0,zn.Xb)(zc);jc.push("code_challenge="+ff),jc.push("code_challenge_method=S256"),ml.codeVerifier=zc}var Df=Yl.additionalQueryStringParams;for(var Rf in Df){var V_;void 0!==Df[Rf]&&jc.push((0,we.default)(V_=[Rf,Df[Rf]]).call(V_,encodeURIComponent).join("="))}var ef=Of.get("authorizationUrl"),Hf=[Ad?(0,hd.default)((0,zn.Nm)(ef),Ad,!0).toString():(0,zn.Nm)(ef),jc.join("&")].join(-1===(0,rt.default)(ef).call(ef,"?")?"?":"&");ha.authPopup(Hf,{auth:ml,state:df,redirectUrl:$p,callback:"implicit"===Dd?ha.preAuthorizeImplicit:Yl.useBasicAuthenticationWithAccessCodeGrant?ha.authorizeAccessCodeWithBasicAuthentication:ha.authorizeAccessCodeWithFormParams,errCb:Xa.newAuthErr})}else Xa.newAuthErr({authId:rp,source:"validation",level:"error",message:"oauth2RedirectUrl configuration is not passed. Oauth2 authorization cannot be performed."})}({auth:mt.state,currentServer:ta.serverEffectiveValue(ta.selectedServer()),authActions:Mo,errActions:Ws,configs:na,authConfigs:aa})}),(0,K.default)((0,qi.default)(mt),"onScopeChange",function(bo){var Mo,Ws,sa=bo.target,Ma=sa.checked,ta=sa.dataset.value;if(Ma&&-1===(0,rt.default)(Mo=mt.state.scopes).call(Mo,ta)){var na,aa=(0,o.default)(na=mt.state.scopes).call(na,[ta]);mt.setState({scopes:aa})}else if(!Ma&&(0,rt.default)(Ws=mt.state.scopes).call(Ws,ta)>-1){var Xs;mt.setState({scopes:(0,_.default)(Xs=mt.state.scopes).call(Xs,function(ml){return ml!==ta})})}}),(0,K.default)((0,qi.default)(mt),"onInputChange",function(bo){var Mo=bo.target,Ma=(0,K.default)({},Mo.dataset.name,Mo.value);mt.setState(Ma)}),(0,K.default)((0,qi.default)(mt),"selectScopes",function(bo){var Mo;mt.setState(bo.target.dataset.all?{scopes:(0,S_.default)((0,j_.default)(Mo=mt.props.schema.get("allowedScopes")||mt.props.schema.get("scopes")).call(Mo))}:{scopes:[]})}),(0,K.default)((0,qi.default)(mt),"logout",function(bo){bo.preventDefault();var Mo=mt.props,Ws=Mo.authActions,Ma=Mo.name;Mo.errActions.clear({authId:Ma,type:"auth",source:"auth"}),Ws.logoutWithPersistOption([Ma])});var Ut=mt.props,Bt=Ut.name,hn=Ut.schema,Vn=Ut.authorized,fr=Ut.authSelectors,rr=Vn&&Vn.get(Bt),Mr=fr.getConfigs()||{},Li=rr&&rr.get("username")||"",Fi=rr&&rr.get("clientId")||Mr.clientId||"",Ki=rr&&rr.get("clientSecret")||Mr.clientSecret||"",to=rr&&rr.get("passwordType")||"basic",wo=rr&&rr.get("scopes")||Mr.scopes||[];return"string"==typeof wo&&(wo=wo.split(Mr.scopeSeparator||" ")),mt.state={appName:Mr.appName,name:Bt,schema:hn,scopes:wo,clientId:Fi,clientSecret:Ki,username:Li,password:"",passwordType:to},mt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt,mt=this,Ut=this.props,Bt=Ut.schema,hn=Ut.getComponent,Vn=Ut.authSelectors,fr=Ut.errSelectors,rr=Ut.name,Mr=Ut.specSelectors,Li=hn("Input"),Fi=hn("Row"),Ki=hn("Col"),to=hn("Button"),wo=hn("authError"),bo=hn("JumpToPath",!0),Mo=hn("Markdown",!0),Ws=hn("InitializedInput"),sa=Mr.isOAS3,Ma=sa()?Bt.get("openIdConnectUrl"):null,ta="implicit",na="password",aa=sa()?Ma?"authorization_code":"authorizationCode":"accessCode",Xs=sa()?Ma?"client_credentials":"clientCredentials":"application",ml=!!(Vn.getConfigs()||{}).usePkceWithAuthorizationCodeGrant,ha=Bt.get("flow"),Xa=ha===aa&&ml?ha+" with PKCE":ha,bs=Bt.get("allowedScopes")||Bt.get("scopes"),Oa=!!Vn.authorized().get(rr),Yl=(0,_.default)(at=fr.allErrors()).call(at,function(Af){return Af.get("authId")===rr}),Ad=!(0,_.default)(Yl).call(Yl,function(Af){return"validation"===Af.get("source")}).size,Of=Bt.get("description");return Z.default.createElement("div",null,Z.default.createElement("h4",null,rr," (OAuth2, ",Xa,") ",Z.default.createElement(bo,{path:["securityDefinitions",rr]})),this.state.appName?Z.default.createElement("h5",null,"Application: ",this.state.appName," "):null,Of&&Z.default.createElement(Mo,{source:Bt.get("description")}),Oa&&Z.default.createElement("h6",null,"Authorized"),Ma&&Z.default.createElement("p",null,"OpenID Connect URL: ",Z.default.createElement("code",null,Ma)),(ha===ta||ha===aa)&&Z.default.createElement("p",null,"Authorization URL: ",Z.default.createElement("code",null,Bt.get("authorizationUrl"))),(ha===na||ha===aa||ha===Xs)&&Z.default.createElement("p",null,"Token URL:",Z.default.createElement("code",null," ",Bt.get("tokenUrl"))),Z.default.createElement("p",{className:"flow"},"Flow: ",Z.default.createElement("code",null,Xa)),ha!==na?null:Z.default.createElement(Fi,null,Z.default.createElement(Fi,null,Z.default.createElement("label",{htmlFor:"oauth_username"},"username:"),Oa?Z.default.createElement("code",null," ",this.state.username," "):Z.default.createElement(Ki,{tablet:10,desktop:10},Z.default.createElement("input",{id:"oauth_username",type:"text","data-name":"username",onChange:this.onInputChange,autoFocus:!0}))),Z.default.createElement(Fi,null,Z.default.createElement("label",{htmlFor:"oauth_password"},"password:"),Oa?Z.default.createElement("code",null," ****** "):Z.default.createElement(Ki,{tablet:10,desktop:10},Z.default.createElement("input",{id:"oauth_password",type:"password","data-name":"password",onChange:this.onInputChange}))),Z.default.createElement(Fi,null,Z.default.createElement("label",{htmlFor:"password_type"},"Client credentials location:"),Oa?Z.default.createElement("code",null," ",this.state.passwordType," "):Z.default.createElement(Ki,{tablet:10,desktop:10},Z.default.createElement("select",{id:"password_type","data-name":"passwordType",onChange:this.onInputChange},Z.default.createElement("option",{value:"basic"},"Authorization header"),Z.default.createElement("option",{value:"request-body"},"Request body"))))),(ha===Xs||ha===ta||ha===aa||ha===na)&&(!Oa||Oa&&this.state.clientId)&&Z.default.createElement(Fi,null,Z.default.createElement("label",{htmlFor:"client_id"},"client_id:"),Oa?Z.default.createElement("code",null," ****** "):Z.default.createElement(Ki,{tablet:10,desktop:10},Z.default.createElement(Ws,{id:"client_id",type:"text",required:ha===na,initialValue:this.state.clientId,"data-name":"clientId",onChange:this.onInputChange}))),(ha===Xs||ha===aa||ha===na)&&!ml&&Z.default.createElement(Fi,null,Z.default.createElement("label",{htmlFor:"client_secret"},"client_secret:"),Oa?Z.default.createElement("code",null," ****** "):Z.default.createElement(Ki,{tablet:10,desktop:10},Z.default.createElement(Ws,{id:"client_secret",initialValue:this.state.clientSecret,type:"password","data-name":"clientSecret",onChange:this.onInputChange}))),!Oa&&bs&&bs.size?Z.default.createElement("div",{className:"scopes"},Z.default.createElement("h2",null,"Scopes:",Z.default.createElement("a",{onClick:this.selectScopes,"data-all":!0},"select all"),Z.default.createElement("a",{onClick:this.selectScopes},"select none")),(0,we.default)(bs).call(bs,function(Af,rp){var Du,Dd,jc,$p,bp;return Z.default.createElement(Fi,{key:rp},Z.default.createElement("div",{className:"checkbox"},Z.default.createElement(Li,{"data-value":rp,id:(0,o.default)(Du=(0,o.default)(Dd="".concat(rp,"-")).call(Dd,ha,"-checkbox-")).call(Du,mt.state.name),disabled:Oa,checked:(0,Au.default)(jc=mt.state.scopes).call(jc,rp),type:"checkbox",onChange:mt.onScopeChange}),Z.default.createElement("label",{htmlFor:(0,o.default)($p=(0,o.default)(bp="".concat(rp,"-")).call(bp,ha,"-checkbox-")).call($p,mt.state.name)},Z.default.createElement("span",{className:"item"}),Z.default.createElement("div",{className:"text"},Z.default.createElement("p",{className:"name"},rp),Z.default.createElement("p",{className:"description"},Af)))))}).toArray()):null,(0,we.default)(dt=Yl.valueSeq()).call(dt,function(Af,rp){return Z.default.createElement(wo,{error:Af,key:rp})}),Z.default.createElement("div",{className:"auth-btn-wrapper"},Ad&&(Oa?Z.default.createElement(to,{className:"btn modal-btn auth authorize",onClick:this.logout},"Logout"):Z.default.createElement(to,{className:"btn modal-btn auth authorize",onClick:this.authorize},"Authorize")),Z.default.createElement(to,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close")))}}]),Ct}(Z.default.Component),co=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onClick",function(){var hn=dt.props,Vn=hn.specActions,fr=hn.path,rr=hn.method;Vn.clearResponse(fr,rr),Vn.clearRequest(fr,rr)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){return Z.default.createElement("button",{className:"btn btn-clear opblock-control__btn",onClick:this.onClick},"Clear")}}]),Ct}(Z.Component),xr=function(Yn){var vn=Yn.headers;return Z.default.createElement("div",null,Z.default.createElement("h5",null,"Response headers"),Z.default.createElement("pre",{className:"microlight"},vn))},ki=function(Yn){var vn=Yn.duration;return Z.default.createElement("div",null,Z.default.createElement("h5",null,"Request duration"),Z.default.createElement("pre",{className:"microlight"},vn," ms"))},Co=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"shouldComponentUpdate",value:function(at){return this.props.response!==at.response||this.props.path!==at.path||this.props.method!==at.method||this.props.displayRequestDuration!==at.displayRequestDuration}},{key:"render",value:function(){var at,dt=this.props,mt=dt.response,Ut=dt.getComponent,Bt=dt.getConfigs,hn=dt.displayRequestDuration,Vn=dt.specSelectors,fr=dt.path,rr=dt.method,Mr=Bt(),Fi=Mr.requestSnippetsEnabled,Ki=Mr.showMutatedRequest?Vn.mutatedRequestFor(fr,rr):Vn.requestFor(fr,rr),to=mt.get("status"),wo=Ki.get("url"),bo=mt.get("headers").toJS(),Mo=mt.get("notDocumented"),Ws=mt.get("error"),sa=mt.get("text"),Ma=mt.get("duration"),ta=(0,v.default)(bo),na=bo["content-type"]||bo["Content-Type"],aa=Ut("responseBody"),Xs=(0,we.default)(ta).call(ta,function(Oa){var Yl=(0,xe.default)(bo[Oa])?bo[Oa].join():bo[Oa];return Z.default.createElement("span",{className:"headerline",key:Oa}," ",Oa,": ",Yl," ")}),ml=0!==Xs.length,ha=Ut("Markdown",!0),Xa=Ut("RequestSnippets",!0),bs=Ut("curl");return Z.default.createElement("div",null,Ki&&(!0===Fi||"true"===Fi?Z.default.createElement(Xa,{request:Ki}):Z.default.createElement(bs,{request:Ki,getConfigs:Bt})),wo&&Z.default.createElement("div",null,Z.default.createElement("div",{className:"request-url"},Z.default.createElement("h4",null,"Request URL"),Z.default.createElement("pre",{className:"microlight"},wo))),Z.default.createElement("h4",null,"Server response"),Z.default.createElement("table",{className:"responses-table live-responses-table"},Z.default.createElement("thead",null,Z.default.createElement("tr",{className:"responses-header"},Z.default.createElement("td",{className:"col_header response-col_status"},"Code"),Z.default.createElement("td",{className:"col_header response-col_description"},"Details"))),Z.default.createElement("tbody",null,Z.default.createElement("tr",{className:"response"},Z.default.createElement("td",{className:"response-col_status"},to,Mo?Z.default.createElement("div",{className:"response-undocumented"},Z.default.createElement("i",null," Undocumented ")):null),Z.default.createElement("td",{className:"response-col_description"},Ws?Z.default.createElement(ha,{source:(0,o.default)(at="".concat(""!==mt.get("name")?"".concat(mt.get("name"),": "):"")).call(at,mt.get("message"))}):null,sa?Z.default.createElement(aa,{content:sa,contentType:na,url:wo,headers:bo,getConfigs:Bt,getComponent:Ut}):null,ml?Z.default.createElement(xr,{headers:Xs}):null,hn&&Ma?Z.default.createElement(ki,{duration:Ma}):null)))))}}]),Ct}(Z.default.Component),os=qo(5623),Ss=["get","put","post","delete","options","head","patch"],Rs=(0,o.default)(Ss).call(Ss,["trace"]),ks=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"renderOperationTag",function(hn,Vn){var fr=dt.props,rr=fr.specSelectors,Mr=fr.getComponent,Li=fr.oas3Selectors,Fi=fr.layoutSelectors,Ki=fr.layoutActions,to=fr.getConfigs,wo=Mr("OperationContainer",!0),bo=Mr("OperationTag"),Mo=hn.get("operations");return Z.default.createElement(bo,{key:"operation-"+Vn,tagObj:hn,tag:Vn,oas3Selectors:Li,layoutSelectors:Fi,layoutActions:Ki,getConfigs:to,getComponent:Mr,specUrl:rr.url()},Z.default.createElement("div",{className:"operation-tag-content"},(0,we.default)(Mo).call(Mo,function(Ws){var sa,Ma=Ws.get("path"),ta=Ws.get("method"),na=Dt.default.List(["paths",Ma,ta]),aa=rr.isOAS3()?Rs:Ss;return-1===(0,rt.default)(aa).call(aa,ta)?null:Z.default.createElement(wo,{key:(0,o.default)(sa="".concat(Ma,"-")).call(sa,ta),specPath:na,op:Ws,path:Ma,method:ta,tag:Vn})}).toArray()))}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props.specSelectors.taggedOperations();return 0===at.size?Z.default.createElement("h3",null," No operations defined in spec!"):Z.default.createElement("div",null,(0,we.default)(at).call(at,this.renderOperationTag).toArray(),at.size<1?Z.default.createElement("h3",null," No operations defined in spec! "):null)}}]),Ct}(Z.default.Component),Ua=qo(3769);function Dl(Yn){return Yn.match(/^(?:[a-z]+:)?\/\//i)}function oo(Yn,vn){var at=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).selectedServer,dt=void 0===at?"":at;try{return function Sr(Yn,vn){var at=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).selectedServer,dt=void 0===at?"":at;if(Yn){if(Dl(Yn))return Yn;var mt=function uc(Yn,vn){return Yn?Dl(Yn)?(Ct=Yn).match(/^\/\//i)?(0,o.default)(at="".concat(window.location.protocol)).call(at,Ct):Ct:new Ua.default(Yn,vn).href:vn;var Ct,at}(dt,vn);return Dl(mt)?new Ua.default(Yn,mt).href:new Ua.default(Yn,window.location.href).href}}(Yn,vn,{selectedServer:dt})}catch{return}}var Ns=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this.props,mt=dt.tagObj,Ut=dt.tag,Bt=dt.children,hn=dt.oas3Selectors,Vn=dt.layoutSelectors,fr=dt.layoutActions,Mr=dt.getComponent,Li=dt.specUrl,Fi=(0,dt.getConfigs)(),Ki=Fi.docExpansion,to=Fi.deepLinking,wo=to&&"false"!==to,bo=Mr("Collapse"),Mo=Mr("Markdown",!0),Ws=Mr("DeepLink"),sa=Mr("Link"),Ma=mt.getIn(["tagDetails","description"],null),ta=mt.getIn(["tagDetails","externalDocs","description"]),na=mt.getIn(["tagDetails","externalDocs","url"]);at=(0,zn.Wl)(hn)&&(0,zn.Wl)(hn.selectedServer)?oo(na,Li,{selectedServer:hn.selectedServer()}):na;var aa=["operations-tag",Ut],Xs=Vn.isShown(aa,"full"===Ki||"list"===Ki);return Z.default.createElement("div",{className:Xs?"opblock-tag-section is-open":"opblock-tag-section"},Z.default.createElement("h3",{onClick:function(){return fr.show(aa,!Xs)},className:Ma?"opblock-tag":"opblock-tag no-desc",id:(0,we.default)(aa).call(aa,function(ml){return(0,zn.J6)(ml)}).join("-"),"data-tag":Ut,"data-is-open":Xs},Z.default.createElement(Ws,{enabled:wo,isShown:Xs,path:(0,zn.oJ)(Ut),text:Ut}),Ma?Z.default.createElement("small",null,Z.default.createElement(Mo,{source:Ma})):Z.default.createElement("small",null),ta?Z.default.createElement("div",{className:"info__externaldocs"},Z.default.createElement("small",null,ta,at?": ":null,at?Z.default.createElement(sa,{href:(0,zn.Nm)(at),onClick:function(ml){return ml.stopPropagation()},target:"_blank"},at):null)):null,Z.default.createElement("button",{"aria-expanded":Xs,className:"expand-operation",title:Xs?"Collapse operation":"Expand operation",onClick:function(){return fr.show(aa,!Xs)}},Z.default.createElement("svg",{className:"arrow",width:"20",height:"20","aria-hidden":"true",focusable:"false"},Z.default.createElement("use",{href:Xs?"#large-arrow-up":"#large-arrow-down",xlinkHref:Xs?"#large-arrow-up":"#large-arrow-down"})))),Z.default.createElement(bo,{isOpened:Xs},Bt))}}]),Ct}(Z.default.Component);(0,K.default)(Ns,"defaultProps",{tagObj:Dt.default.fromJS({}),tag:""});var fo=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.specPath,mt=at.response,Ut=at.request,Bt=at.toggleShown,hn=at.onTryoutClick,Vn=at.onCancelClick,fr=at.onExecute,rr=at.fn,Mr=at.getComponent,Li=at.getConfigs,Fi=at.specActions,Ki=at.specSelectors,to=at.authActions,wo=at.authSelectors,bo=at.oas3Actions,Mo=at.oas3Selectors,Ws=this.props.operation,sa=Ws.toJS(),Ma=sa.deprecated,ta=sa.isShown,na=sa.path,aa=sa.method,Xs=sa.op,ml=sa.tag,ha=sa.operationId,Xa=sa.allowTryItOut,bs=sa.displayRequestDuration,Oa=sa.tryItOutEnabled,Yl=sa.executeInProgress,Ad=Xs.description,Of=Xs.externalDocs,Af=Xs.schemes,rp=Of?oo(Of.url,Ki.url(),{selectedServer:Mo.selectedServer()}):"",Du=Ws.getIn(["op"]),Dd=Du.get("responses"),jc=(0,zn.gp)(Du,["parameters"]),$p=Ki.operationScheme(na,aa),bp=["operations",ml,ha],Wh=(0,zn.nX)(Du),df=Mr("responses"),zc=Mr("parameters"),ff=Mr("execute"),Df=Mr("clear"),Rf=Mr("Collapse"),V_=Mr("Markdown",!0),qd=Mr("schemes"),ef=Mr("OperationServers"),Hf=Mr("OperationExt"),Z_=Mr("OperationSummary"),ug=Mr("Link"),QW=Li().showExtensions;if(Dd&&mt&&mt.size>0){var KW=!Dd.get(String(mt.get("status")))&&!Dd.get("default");mt=mt.set("notDocumented",KW)}var XW=[na,aa];return Z.default.createElement("div",{className:Ma?"opblock opblock-deprecated":ta?"opblock opblock-".concat(aa," is-open"):"opblock opblock-".concat(aa),id:(0,zn.J6)(bp.join("-"))},Z.default.createElement(Z_,{operationProps:Ws,isShown:ta,toggleShown:Bt,getComponent:Mr,authActions:to,authSelectors:wo,specPath:dt}),Z.default.createElement(Rf,{isOpened:ta},Z.default.createElement("div",{className:"opblock-body"},Du&&Du.size||null===Du?null:Z.default.createElement("img",{height:"32px",width:"32px",src:qo(2517),className:"opblock-loading-animation"}),Ma&&Z.default.createElement("h4",{className:"opblock-title_normal"}," Warning: Deprecated"),Ad&&Z.default.createElement("div",{className:"opblock-description-wrapper"},Z.default.createElement("div",{className:"opblock-description"},Z.default.createElement(V_,{source:Ad}))),rp?Z.default.createElement("div",{className:"opblock-external-docs-wrapper"},Z.default.createElement("h4",{className:"opblock-title_normal"},"Find more details"),Z.default.createElement("div",{className:"opblock-external-docs"},Z.default.createElement("span",{className:"opblock-external-docs__description"},Z.default.createElement(V_,{source:Of.description})),Z.default.createElement(ug,{target:"_blank",className:"opblock-external-docs__link",href:(0,zn.Nm)(rp)},rp))):null,Du&&Du.size?Z.default.createElement(zc,{parameters:jc,specPath:dt.push("parameters"),operation:Du,onChangeKey:XW,onTryoutClick:hn,onCancelClick:Vn,tryItOutEnabled:Oa,allowTryItOut:Xa,fn:rr,getComponent:Mr,specActions:Fi,specSelectors:Ki,pathMethod:[na,aa],getConfigs:Li,oas3Actions:bo,oas3Selectors:Mo}):null,Oa?Z.default.createElement(ef,{getComponent:Mr,path:na,method:aa,operationServers:Du.get("servers"),pathServers:Ki.paths().getIn([na,"servers"]),getSelectedServer:Mo.selectedServer,setSelectedServer:bo.setSelectedServer,setServerVariableValue:bo.setServerVariableValue,getServerVariable:Mo.serverVariableValue,getEffectiveServerValue:Mo.serverEffectiveValue}):null,Oa&&Xa&&Af&&Af.size?Z.default.createElement("div",{className:"opblock-schemes"},Z.default.createElement(qd,{schemes:Af,path:na,method:aa,specActions:Fi,currentScheme:$p})):null,Z.default.createElement("div",{className:Oa&&mt&&Xa?"btn-group":"execute-wrapper"},Oa&&Xa?Z.default.createElement(ff,{operation:Du,specActions:Fi,specSelectors:Ki,oas3Selectors:Mo,oas3Actions:bo,path:na,method:aa,onExecute:fr,disabled:Yl}):null,Oa&&mt&&Xa?Z.default.createElement(Df,{specActions:Fi,path:na,method:aa}):null),Yl?Z.default.createElement("div",{className:"loading-container"},Z.default.createElement("div",{className:"loading"})):null,Dd?Z.default.createElement(df,{responses:Dd,request:Ut,tryItOutResponse:mt,getComponent:Mr,getConfigs:Li,specSelectors:Ki,oas3Actions:bo,oas3Selectors:Mo,specActions:Fi,produces:Ki.producesOptionsFor([na,aa]),producesValue:Ki.currentProducesFor([na,aa]),specPath:dt.push("responses"),path:na,method:aa,displayRequestDuration:bs,fn:rr}):null,QW&&Wh.size?Z.default.createElement(Hf,{extensions:Wh,getComponent:Mr}):null)))}}]),Ct}(Z.PureComponent);(0,K.default)(fo,"defaultProps",{operation:null,response:null,request:null,specPath:(0,Dt.List)(),summary:""});const ea=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({default:()=>oV()});var xs=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this.props,mt=dt.isShown,Ut=dt.toggleShown,Bt=dt.getComponent,hn=dt.authActions,Vn=dt.authSelectors,fr=dt.operationProps,rr=dt.specPath,Mr=fr.toJS(),Li=Mr.summary,Fi=Mr.isAuthorized,Ki=Mr.method,wo=Mr.showSummary,bo=Mr.path,Mo=Mr.operationId,Ws=Mr.originalOperationId,sa=Mr.displayOperationId,Ma=Mr.op.summary,ta=fr.get("security"),na=Bt("authorizeOperationBtn"),aa=Bt("OperationSummaryMethod"),Xs=Bt("OperationSummaryPath"),ml=Bt("JumpToPath",!0),ha=ta&&!!ta.count(),Xa=ha&&1===ta.size&&ta.first().isEmpty(),bs=!ha||Xa;return Z.default.createElement("div",{className:"opblock-summary opblock-summary-".concat(Ki)},Z.default.createElement("button",{"aria-label":(0,o.default)(at="".concat(Ki," ")).call(at,bo.replace(/\//g,"\u200b/")),"aria-expanded":mt,className:"opblock-summary-control",onClick:Ut},Z.default.createElement(aa,{method:Ki}),Z.default.createElement(Xs,{getComponent:Bt,operationProps:fr,specPath:rr}),wo?Z.default.createElement("div",{className:"opblock-summary-description"},(0,ea.default)(Ma||Li)):null,sa&&(Ws||Mo)?Z.default.createElement("span",{className:"opblock-summary-operation-id"},Ws||Mo):null,Z.default.createElement("svg",{className:"arrow",width:"20",height:"20","aria-hidden":"true",focusable:"false"},Z.default.createElement("use",{href:mt?"#large-arrow-up":"#large-arrow-down",xlinkHref:mt?"#large-arrow-up":"#large-arrow-down"}))),bs?null:Z.default.createElement(na,{isAuthorized:Fi,onClick:function(){var Oa=Vn.definitionsForRequirements(ta);hn.showDefinitions(Oa)}}),Z.default.createElement(ml,{path:rr}))}}]),Ct}(Z.PureComponent);(0,K.default)(xs,"defaultProps",{operationProps:null,specPath:(0,Dt.List)(),summary:""});var Bu=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){return Z.default.createElement("span",{className:"opblock-summary-method"},this.props.method.toUpperCase())}}]),Ct}(Z.PureComponent);(0,K.default)(Bu,"defaultProps",{operationProps:null});const Zl=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({default:()=>aV()});var Hl=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){for(var at,dt=this.props,mt=dt.getComponent,Ut=dt.operationProps.toJS(),Bt=Ut.deprecated,hn=Ut.isShown,Vn=Ut.path,fr=Ut.tag,rr=Ut.operationId,Mr=Ut.isDeepLinkingEnabled,Li=Vn.split(/(?=\/)/g),Fi=1;Fi<Li.length;Fi+=2)(0,Zl.default)(Li).call(Li,Fi,0,Z.default.createElement("wbr",{key:Fi}));var Ki=mt("DeepLink");return Z.default.createElement("span",{className:Bt?"opblock-summary-path__deprecated":"opblock-summary-path","data-path":Vn},Z.default.createElement(Ki,{enabled:Mr,isShown:hn,path:(0,zn.oJ)((0,o.default)(at="".concat(fr,"/")).call(at,rr)),text:Li}))}}]),Ct}(Z.PureComponent),hl=qo(9334);const ol=function(Yn){var vn,Ct=Yn.extensions,at=(0,Yn.getComponent)("OperationExtRow");return Z.default.createElement("div",{className:"opblock-section"},Z.default.createElement("div",{className:"opblock-section-header"},Z.default.createElement("h4",null,"Extensions")),Z.default.createElement("div",{className:"table-container"},Z.default.createElement("table",null,Z.default.createElement("thead",null,Z.default.createElement("tr",null,Z.default.createElement("td",{className:"col_header"},"Field"),Z.default.createElement("td",{className:"col_header"},"Value"))),Z.default.createElement("tbody",null,(0,we.default)(vn=Ct.entrySeq()).call(vn,function(dt){var mt,Ut=(0,hl.default)(dt,2),Bt=Ut[0],hn=Ut[1];return Z.default.createElement(at,{key:(0,o.default)(mt="".concat(Bt,"-")).call(mt,hn),xKey:Bt,xVal:hn})})))))},cc=function(Yn){var vn=Yn.xKey,Ct=Yn.xVal,at=Ct?Ct.toJS?Ct.toJS():Ct:null;return Z.default.createElement("tr",null,Z.default.createElement("td",null,vn),Z.default.createElement("td",null,(0,O.default)(at)))};var Gu=qo(29),cf=qo(8096),Ep=qo(471),su=qo(9908),Mf=qo(7068);const z_=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({default:()=>uV()});var Sp=qo(9874),Eh=function(Yn){var vn=Yn.value,Ct=Yn.fileName,at=Yn.className,dt=Yn.downloadable,mt=Yn.getConfigs,Ut=Yn.canCopy,Bt=Yn.language,hn=(0,Mf.default)(mt)?mt():null,Vn=!1!==(0,su.default)(hn,"syntaxHighlight")&&(0,su.default)(hn,"syntaxHighlight.activated",!0),fr=(0,Z.useRef)(null);(0,Z.useEffect)(function(){var Mr,Li=(0,_.default)(Mr=(0,S_.default)(fr.current.childNodes)).call(Mr,function(Fi){return!!Fi.nodeType&&Fi.classList.contains("microlight")});return(0,Gu.default)(Li).call(Li,function(Fi){return Fi.addEventListener("mousewheel",rr,{passive:!1})}),function(){(0,Gu.default)(Li).call(Li,function(Fi){return Fi.removeEventListener("mousewheel",rr)})}},[vn,at,Bt]);var rr=function(Mr){var Li=Mr.target,Fi=Mr.deltaY,Ki=Li.scrollHeight,to=Li.offsetHeight,wo=Li.scrollTop;Ki>to&&(0===wo&&Fi<0||to+wo>=Ki&&Fi>0)&&Mr.preventDefault()};return Z.default.createElement("div",{className:"highlight-code",ref:fr},dt?Z.default.createElement("div",{className:"download-contents",onClick:function(){(0,z_.default)(vn,Ct)}},"Download"):null,Ut&&Z.default.createElement("div",{className:"copy-to-clipboard"},Z.default.createElement(Sp.CopyToClipboard,{text:vn},Z.default.createElement("button",null))),Vn?Z.default.createElement(Ep.d3,{language:Bt,className:(0,cf.default)(at,"microlight"),style:(0,Ep.C2)((0,su.default)(hn,"syntaxHighlight.theme","agate"))},vn):Z.default.createElement("pre",{className:(0,cf.default)(at,"microlight")},vn))};Eh.defaultProps={fileName:"response.txt"};const b_=Eh;var wm=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onChangeProducesWrapper",function(hn){return dt.props.specActions.changeProducesValue([dt.props.path,dt.props.method],hn)}),(0,K.default)((0,qi.default)(dt),"onResponseContentTypeChange",function(hn){var rr=dt.props;hn.controlsAcceptHeader&&rr.oas3Actions.setResponseContentType({value:hn.value,path:rr.path,method:rr.method})}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt,mt=this,Ut=this.props,Bt=Ut.responses,hn=Ut.tryItOutResponse,Vn=Ut.getComponent,fr=Ut.getConfigs,rr=Ut.specSelectors,Mr=Ut.fn,Li=Ut.producesValue,Fi=Ut.displayRequestDuration,Ki=Ut.specPath,to=Ut.path,wo=Ut.method,bo=Ut.oas3Selectors,Mo=Ut.oas3Actions,Ws=(0,zn.iQ)(Bt),sa=Vn("contentType"),Ma=Vn("liveResponse"),ta=Vn("response"),na=this.props.produces&&this.props.produces.size?this.props.produces:Ct.defaultProps.produces,aa=rr.isOAS3()?(0,zn.QG)(Bt):null,Xs=function(ha){return ha.replace(/[^\w-]/g,arguments.length>1&&void 0!==arguments[1]?arguments[1]:"_")}((0,o.default)(at="".concat(wo)).call(at,to,"_responses")),ml="".concat(Xs,"_select");return Z.default.createElement("div",{className:"responses-wrapper"},Z.default.createElement("div",{className:"opblock-section-header"},Z.default.createElement("h4",null,"Responses"),rr.isOAS3()?null:Z.default.createElement("label",{htmlFor:ml},Z.default.createElement("span",null,"Response content type"),Z.default.createElement(sa,{value:Li,ariaControls:Xs,ariaLabel:"Response content type",className:"execute-content-type",contentTypes:na,controlId:ml,onChange:this.onChangeProducesWrapper}))),Z.default.createElement("div",{className:"responses-inner"},hn?Z.default.createElement("div",null,Z.default.createElement(Ma,{response:hn,getComponent:Vn,getConfigs:fr,specSelectors:rr,path:this.props.path,method:this.props.method,displayRequestDuration:Fi}),Z.default.createElement("h4",null,"Responses")):null,Z.default.createElement("table",{"aria-live":"polite",className:"responses-table",id:Xs,role:"region"},Z.default.createElement("thead",null,Z.default.createElement("tr",{className:"responses-header"},Z.default.createElement("td",{className:"col_header response-col_status"},"Code"),Z.default.createElement("td",{className:"col_header response-col_description"},"Description"),rr.isOAS3()?Z.default.createElement("td",{className:"col col_header response-col_links"},"Links"):null)),Z.default.createElement("tbody",null,(0,we.default)(dt=Bt.entrySeq()).call(dt,function(ha){var Xa=(0,hl.default)(ha,2),bs=Xa[0],Oa=Xa[1],Yl=hn&&hn.get("status")==bs?"response_current":"";return Z.default.createElement(ta,{key:bs,path:to,method:wo,specPath:Ki.push(bs),isDefault:Ws===bs,fn:Mr,className:Yl,code:bs,response:Oa,specSelectors:rr,controlsAcceptHeader:Oa===aa,onContentTypeChange:mt.onResponseContentTypeChange,contentType:Li,getConfigs:fr,activeExamplesKey:bo.activeExamplesMember(to,wo,"responses",bs),oas3Actions:Mo,getComponent:Vn})}).toArray()))))}}]),Ct}(Z.default.Component);(0,K.default)(wm,"defaultProps",{tryItOutResponse:null,produces:(0,Dt.fromJS)(["application/json"]),displayRequestDuration:!1});var yo=qo(1013);const $d=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({default:()=>dV()});var Pm=qo(2518),lg=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;return(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"_onContentTypeChange",function(Ut){var Bt=mt.props,hn=Bt.onContentTypeChange,Vn=Bt.controlsAcceptHeader;mt.setState({responseContentType:Ut}),hn({value:Ut,controlsAcceptHeader:Vn})}),(0,K.default)((0,qi.default)(mt),"getTargetExamplesKey",function(){var Ut=mt.props,Vn=Ut.activeExamplesKey,rr=Ut.response.getIn(["content",mt.state.responseContentType||Ut.contentType],(0,Dt.Map)({})).get("examples",null).keySeq().first();return Vn||rr}),mt.state={responseContentType:""},mt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt,mt,Ut,Bt,hn=this.props,Vn=hn.path,fr=hn.method,rr=hn.code,Mr=hn.response,Li=hn.className,Fi=hn.specPath,to=hn.getComponent,wo=hn.getConfigs,bo=hn.specSelectors,Mo=hn.contentType,Ws=hn.controlsAcceptHeader,sa=hn.oas3Actions,Ma=hn.fn.inferSchema,ta=bo.isOAS3(),na=wo().showExtensions,aa=na?(0,zn.nX)(Mr):null,Xs=Mr.get("headers"),ml=Mr.get("links"),ha=to("ResponseExtension"),Xa=to("headers"),bs=to("highlightCode"),Oa=to("modelExample"),Yl=to("Markdown",!0),Ad=to("operationLink"),Of=to("contentType"),Af=to("ExamplesSelect"),rp=to("Example"),Du=this.state.responseContentType||Mo,Dd=Mr.getIn(["content",Du],(0,Dt.Map)({})),jc=Dd.get("examples",null);if(ta){var $p=Dd.get("schema");mt=$p?Ma($p.toJS()):null,Ut=$p?(0,Dt.List)(["content",this.state.responseContentType,"schema"]):Fi}else mt=Mr.get("schema"),Ut=Mr.has("schema")?Fi.push("schema"):Fi;var bp,Wh=!1,df={includeReadOnly:!0};if(ta){var zc;if(bp=null===(zc=Dd.get("schema"))||void 0===zc?void 0:zc.toJS(),jc){var ff=this.getTargetExamplesKey(),Df=function(qd){return qd.get("value")};void 0===(Bt=Df(jc.get(ff,(0,Dt.Map)({}))))&&(Bt=Df((0,$d.default)(jc).call(jc).next().value)),Wh=!0}else void 0!==Dd.get("example")&&(Bt=Dd.get("example"),Wh=!0)}else{bp=mt,df=(0,yo.default)((0,yo.default)({},df),{},{includeWriteOnly:!0});var Rf=Mr.getIn(["examples",Du]);Rf&&(Bt=Rf,Wh=!0)}var V_=function(qd,ef,Hf){if(null!=qd){var Z_=null;return(0,Pm.O)(qd)&&(Z_="json"),Z.default.createElement("div",null,Z.default.createElement(ef,{className:"example",getConfigs:Hf,language:Z_,value:(0,zn.Pz)(qd)}))}return null}((0,zn.xi)(bp,Du,df,Wh?Bt:void 0),bs,wo);return Z.default.createElement("tr",{className:"response "+(Li||""),"data-code":rr},Z.default.createElement("td",{className:"response-col_status"},rr),Z.default.createElement("td",{className:"response-col_description"},Z.default.createElement("div",{className:"response-col_description__inner"},Z.default.createElement(Yl,{source:Mr.get("description")})),na&&aa.size?(0,we.default)(at=aa.entrySeq()).call(at,function(qd){var ef,Hf=(0,hl.default)(qd,2),Z_=Hf[0],ug=Hf[1];return Z.default.createElement(ha,{key:(0,o.default)(ef="".concat(Z_,"-")).call(ef,ug),xKey:Z_,xVal:ug})}):null,ta&&Mr.get("content")?Z.default.createElement("section",{className:"response-controls"},Z.default.createElement("div",{className:(0,cf.default)("response-control-media-type",{"response-control-media-type--accept-controller":Ws})},Z.default.createElement("small",{className:"response-control-media-type__title"},"Media type"),Z.default.createElement(Of,{value:this.state.responseContentType,contentTypes:Mr.get("content")?Mr.get("content").keySeq():(0,Dt.Seq)(),onChange:this._onContentTypeChange,ariaLabel:"Media Type"}),Ws?Z.default.createElement("small",{className:"response-control-media-type__accept-message"},"Controls ",Z.default.createElement("code",null,"Accept")," header."):null),jc?Z.default.createElement("div",{className:"response-control-examples"},Z.default.createElement("small",{className:"response-control-examples__title"},"Examples"),Z.default.createElement(Af,{examples:jc,currentExampleKey:this.getTargetExamplesKey(),onSelect:function(qd){return sa.setActiveExamplesMember({name:qd,pathMethod:[Vn,fr],contextType:"responses",contextName:rr})},showLabels:!1})):null):null,V_||mt?Z.default.createElement(Oa,{specPath:Ut,getComponent:to,getConfigs:wo,specSelectors:bo,schema:(0,zn.oG)(mt),example:V_,includeReadOnly:!0}):null,ta&&jc?Z.default.createElement(rp,{example:jc.get(this.getTargetExamplesKey(),(0,Dt.Map)({})),getComponent:to,getConfigs:wo,omitValue:!0}):null,Xs?Z.default.createElement(Xa,{headers:Xs,getComponent:to}):null),ta?Z.default.createElement("td",{className:"response-col_links"},ml?(0,we.default)(dt=ml.toSeq().entrySeq()).call(dt,function(qd){var ef=(0,hl.default)(qd,2),Hf=ef[0];return Z.default.createElement(Ad,{key:Hf,name:Hf,link:ef[1],getComponent:to})}):Z.default.createElement("i",null,"No links")):null)}}]),Ct}(Z.default.Component);(0,K.default)(lg,"defaultProps",{response:(0,Dt.fromJS)({}),onContentTypeChange:function(){}});const gm=function(Yn){return Z.default.createElement("div",{className:"response__extension"},Yn.xKey,": ",String(Yn.xVal))},Fg=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({default:()=>pV()}),r_=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({default:()=>hV()});var qC=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"state",{parsedContent:null}),(0,K.default)((0,qi.default)(dt),"updateParsedContent",function(hn){var Vn=dt.props.content;if(hn!==Vn)if(Vn&&Vn instanceof Blob){var fr=new FileReader;fr.onload=function(){dt.setState({parsedContent:fr.result})},fr.readAsText(Vn)}else dt.setState({parsedContent:Vn.toString()})}),dt}return(0,ue.default)(Ct,[{key:"componentDidMount",value:function(){this.updateParsedContent(null)}},{key:"componentDidUpdate",value:function(at){this.updateParsedContent(at.content)}},{key:"render",value:function(){var at,dt,mt=this.props,Ut=mt.content,Bt=mt.contentType,hn=mt.url,Vn=mt.headers,fr=void 0===Vn?{}:Vn,rr=mt.getConfigs,Li=this.state.parsedContent,Fi=(0,mt.getComponent)("highlightCode"),Ki="response_"+(new Date).getTime();if(hn=hn||"",/^application\/octet-stream/i.test(Bt)||fr["Content-Disposition"]&&/attachment/i.test(fr["Content-Disposition"])||fr["content-disposition"]&&/attachment/i.test(fr["content-disposition"])||fr["Content-Description"]&&/File Transfer/i.test(fr["Content-Description"])||fr["content-description"]&&/File Transfer/i.test(fr["content-description"]))if("Blob"in window){var to=Bt||"text/html",wo=Ut instanceof Blob?Ut:new Blob([Ut],{type:to}),bo=Ua.default.createObjectURL(wo),Mo=[to,hn.substr((0,l.default)(hn).call(hn,"/")+1),bo].join(":"),Ws=fr["content-disposition"]||fr["Content-Disposition"];if(void 0!==Ws){var sa=(0,zn.DR)(Ws);null!==sa&&(Mo=sa)}dt=Z.default.createElement("div",null,Z.default.createElement("a",Jn.Z.navigator&&Jn.Z.navigator.msSaveOrOpenBlob?{href:bo,onClick:function(){return Jn.Z.navigator.msSaveOrOpenBlob(wo,Mo)}}:{href:bo,download:Mo},"Download file"))}else dt=Z.default.createElement("pre",{className:"microlight"},"Download headers detected but your browser does not support downloading binary via XHR (Blob).");else if(/json/i.test(Bt)){var Ma=null;(0,Pm.O)(Ut)&&(Ma="json");try{at=(0,O.default)(JSON.parse(Ut),null,"  ")}catch{at="can't parse JSON.  Raw result:\n\n"+Ut}dt=Z.default.createElement(Fi,{language:Ma,downloadable:!0,fileName:"".concat(Ki,".json"),value:at,getConfigs:rr,canCopy:!0})}else/xml/i.test(Bt)?(at=(0,Fg.default)(Ut,{textNodesOnSameLine:!0,indentor:"  "}),dt=Z.default.createElement(Fi,{downloadable:!0,fileName:"".concat(Ki,".xml"),value:at,getConfigs:rr,canCopy:!0})):dt="text/html"===(0,r_.default)(Bt)||/text\/plain/.test(Bt)?Z.default.createElement(Fi,{downloadable:!0,fileName:"".concat(Ki,".html"),value:Ut,getConfigs:rr,canCopy:!0}):"text/csv"===(0,r_.default)(Bt)||/text\/csv/.test(Bt)?Z.default.createElement(Fi,{downloadable:!0,fileName:"".concat(Ki,".csv"),value:Ut,getConfigs:rr,canCopy:!0}):/^image\//i.test(Bt)?(0,Au.default)(Bt).call(Bt,"svg")?Z.default.createElement("div",null," ",Ut," "):Z.default.createElement("img",{src:Ua.default.createObjectURL(Ut)}):/^audio\//i.test(Bt)?Z.default.createElement("pre",{className:"microlight"},Z.default.createElement("audio",{controls:!0},Z.default.createElement("source",{src:hn,type:Bt}))):"string"==typeof Ut?Z.default.createElement(Fi,{downloadable:!0,fileName:"".concat(Ki,".txt"),value:Ut,getConfigs:rr,canCopy:!0}):Ut.size>0?Li?Z.default.createElement("div",null,Z.default.createElement("p",{className:"i"},"Unrecognized response type; displaying content as text."),Z.default.createElement(Fi,{downloadable:!0,fileName:"".concat(Ki,".txt"),value:Li,getConfigs:rr,canCopy:!0})):Z.default.createElement("p",{className:"i"},"Unrecognized response type; unable to display."):null;return dt?Z.default.createElement("div",null,Z.default.createElement("h5",null,"Response body"),dt):null}}]),Ct}(Z.default.PureComponent),Xd=qo(2691),e2=qo(374),dS=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at){var dt;return(0,oe.default)(this,Ct),dt=vn.call(this,at),(0,K.default)((0,qi.default)(dt),"onChange",function(mt,Ut,Bt){var hn=dt.props;(0,hn.specActions.changeParamByIdentity)(hn.onChangeKey,mt,Ut,Bt)}),(0,K.default)((0,qi.default)(dt),"onChangeConsumesWrapper",function(mt){var Ut=dt.props;(0,Ut.specActions.changeConsumesValue)(Ut.onChangeKey,mt)}),(0,K.default)((0,qi.default)(dt),"toggleTab",function(mt){return"parameters"===mt?dt.setState({parametersVisible:!0,callbackVisible:!1}):"callbacks"===mt?dt.setState({callbackVisible:!0,parametersVisible:!1}):void 0}),(0,K.default)((0,qi.default)(dt),"onChangeMediaType",function(mt){var Ut=mt.value,Bt=mt.pathMethod,hn=dt.props,Vn=hn.specActions,fr=hn.oas3Selectors,rr=hn.oas3Actions,Mr=fr.hasUserEditedBody.apply(fr,(0,Xd.default)(Bt)),Li=fr.shouldRetainRequestBodyValue.apply(fr,(0,Xd.default)(Bt));rr.setRequestContentType({value:Ut,pathMethod:Bt}),rr.initRequestBodyValidateError({pathMethod:Bt}),Mr||(Li||rr.setRequestBodyValue({value:void 0,pathMethod:Bt}),Vn.clearResponse.apply(Vn,(0,Xd.default)(Bt)),Vn.clearRequest.apply(Vn,(0,Xd.default)(Bt)),Vn.clearValidateParams(Bt))}),dt.state={callbackVisible:!1,parametersVisible:!0},dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt,mt=this,Ut=this.props,Bt=Ut.onTryoutClick,hn=Ut.parameters,Vn=Ut.allowTryItOut,fr=Ut.tryItOutEnabled,rr=Ut.specPath,Mr=Ut.fn,Li=Ut.getComponent,Fi=Ut.getConfigs,Ki=Ut.specSelectors,to=Ut.specActions,wo=Ut.pathMethod,bo=Ut.oas3Actions,Mo=Ut.oas3Selectors,Ws=Ut.operation,sa=Li("parameterRow"),Ma=Li("TryItOutButton"),ta=Li("contentType"),na=Li("Callbacks",!0),aa=Li("RequestBody",!0),Xs=fr&&Vn,ml=Ki.isOAS3(),ha=Ws.get("requestBody"),Xa=(0,ke.default)(at=(0,e2.default)((0,ke.default)(hn).call(hn,function(bs,Oa){var Yl,Ad=Oa.get("in");return null!==(Yl=bs[Ad])&&void 0!==Yl||(bs[Ad]=[]),bs[Ad].push(Oa),bs},{}))).call(at,function(bs,Oa){return(0,o.default)(bs).call(bs,Oa)},[]);return Z.default.createElement("div",{className:"opblock-section"},Z.default.createElement("div",{className:"opblock-section-header"},ml?Z.default.createElement("div",{className:"tab-header"},Z.default.createElement("div",{onClick:function(){return mt.toggleTab("parameters")},className:"tab-item ".concat(this.state.parametersVisible&&"active")},Z.default.createElement("h4",{className:"opblock-title"},Z.default.createElement("span",null,"Parameters"))),Ws.get("callbacks")?Z.default.createElement("div",{onClick:function(){return mt.toggleTab("callbacks")},className:"tab-item ".concat(this.state.callbackVisible&&"active")},Z.default.createElement("h4",{className:"opblock-title"},Z.default.createElement("span",null,"Callbacks"))):null):Z.default.createElement("div",{className:"tab-header"},Z.default.createElement("h4",{className:"opblock-title"},"Parameters")),Vn?Z.default.createElement(Ma,{isOAS3:Ki.isOAS3(),hasUserEditedBody:Mo.hasUserEditedBody.apply(Mo,(0,Xd.default)(wo)),enabled:fr,onCancelClick:this.props.onCancelClick,onTryoutClick:Bt,onResetClick:function(){return bo.setRequestBodyValue({value:void 0,pathMethod:wo})}}):null),this.state.parametersVisible?Z.default.createElement("div",{className:"parameters-container"},Xa.length?Z.default.createElement("div",{className:"table-container"},Z.default.createElement("table",{className:"parameters"},Z.default.createElement("thead",null,Z.default.createElement("tr",null,Z.default.createElement("th",{className:"col_header parameters-col_name"},"Name"),Z.default.createElement("th",{className:"col_header parameters-col_description"},"Description"))),Z.default.createElement("tbody",null,(0,we.default)(Xa).call(Xa,function(bs,Oa){var Yl;return Z.default.createElement(sa,{fn:Mr,specPath:rr.push(Oa.toString()),getComponent:Li,getConfigs:Fi,rawParam:bs,param:Ki.parameterWithMetaByIdentity(wo,bs),key:(0,o.default)(Yl="".concat(bs.get("in"),".")).call(Yl,bs.get("name")),onChange:mt.onChange,onChangeConsumes:mt.onChangeConsumesWrapper,specSelectors:Ki,specActions:to,oas3Actions:bo,oas3Selectors:Mo,pathMethod:wo,isExecute:Xs})})))):Z.default.createElement("div",{className:"opblock-description-wrapper"},Z.default.createElement("p",null,"No parameters"))):null,this.state.callbackVisible?Z.default.createElement("div",{className:"callbacks-container opblock-description-wrapper"},Z.default.createElement(na,{callbacks:(0,Dt.Map)(Ws.get("callbacks")),specPath:(0,Ue.default)(rr).call(rr,0,-1).push("callbacks")})):null,ml&&ha&&this.state.parametersVisible&&Z.default.createElement("div",{className:"opblock-section opblock-section-request-body"},Z.default.createElement("div",{className:"opblock-section-header"},Z.default.createElement("h4",{className:"opblock-title parameter__name ".concat(ha.get("required")&&"required")},"Request body"),Z.default.createElement("label",null,Z.default.createElement(ta,{value:Mo.requestContentType.apply(Mo,(0,Xd.default)(wo)),contentTypes:ha.get("content",(0,Dt.List)()).keySeq(),onChange:function(bs){mt.onChangeMediaType({value:bs,pathMethod:wo})},className:"body-param-content-type",ariaLabel:"Request content type"}))),Z.default.createElement("div",{className:"opblock-description-wrapper"},Z.default.createElement(aa,{setRetainRequestBodyValueFlag:function(bs){return bo.setRetainRequestBodyValueFlag({value:bs,pathMethod:wo})},userHasEditedBody:Mo.hasUserEditedBody.apply(Mo,(0,Xd.default)(wo)),specPath:(0,Ue.default)(rr).call(rr,0,-1).push("requestBody"),requestBody:ha,requestBodyValue:Mo.requestBodyValue.apply(Mo,(0,Xd.default)(wo)),requestBodyInclusionSetting:Mo.requestBodyInclusionSetting.apply(Mo,(0,Xd.default)(wo)),requestBodyErrors:Mo.requestBodyErrors.apply(Mo,(0,Xd.default)(wo)),isExecute:Xs,getConfigs:Fi,activeExamplesKey:Mo.activeExamplesMember.apply(Mo,(0,o.default)(dt=(0,Xd.default)(wo)).call(dt,["requestBody","requestBody"])),updateActiveExamplesKey:function(bs){mt.props.oas3Actions.setActiveExamplesMember({name:bs,pathMethod:mt.props.pathMethod,contextType:"requestBody",contextName:"requestBody"})},onChange:function(bs,Oa){if(Oa){var Yl=Mo.requestBodyValue.apply(Mo,(0,Xd.default)(wo)),Ad=Dt.Map.isMap(Yl)?Yl:(0,Dt.Map)();return bo.setRequestBodyValue({pathMethod:wo,value:Ad.setIn(Oa,bs)})}bo.setRequestBodyValue({value:bs,pathMethod:wo})},onChangeIncludeEmpty:function(bs,Oa){bo.setRequestBodyInclusion({pathMethod:wo,value:Oa,name:bs})},contentType:Mo.requestContentType.apply(Mo,(0,Xd.default)(wo))}))))}}]),Ct}(Z.Component);(0,K.default)(dS,"defaultProps",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,tryItOutEnabled:!1,allowTryItOut:!0,onChangeKey:[],specPath:[]});const t2=function(Yn){return Z.default.createElement("div",{className:"parameter__extension"},Yn.xKey,": ",String(Yn.xVal))};var fS=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onCheckboxChange",function(hn){(0,dt.props.onChange)(hn.target.checked)}),dt}return(0,ue.default)(Ct,[{key:"componentDidMount",value:function(){var at=this.props,dt=at.isIncludedOptions;dt.shouldDispatchInit&&(0,at.onChange)(dt.defaultValue)}},{key:"render",value:function(){var at=this.props,dt=at.isIncluded,mt=at.isDisabled;return Z.default.createElement("div",null,Z.default.createElement("label",{className:(0,cf.default)("parameter__empty_value_toggle",{disabled:mt})},Z.default.createElement("input",{type:"checkbox",disabled:mt,checked:!mt&&dt,onChange:this.onCheckboxChange}),"Send empty value"))}}]),Ct}(Z.Component);(0,K.default)(fS,"defaultProps",{onChange:function(){},isIncludedOptions:{}});var Q0=qo(9069),r2=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;return(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"onChangeWrapper",function(Ut){var hn=mt.props;return(0,hn.onChange)(hn.rawParam,""===Ut||Ut&&0===Ut.size?null:Ut,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}),(0,K.default)((0,qi.default)(mt),"_onExampleSelect",function(Ut){mt.props.oas3Actions.setActiveExamplesMember({name:Ut,pathMethod:mt.props.pathMethod,contextType:"parameters",contextName:mt.getParamKey()})}),(0,K.default)((0,qi.default)(mt),"onChangeIncludeEmpty",function(Ut){var Bt=mt.props,hn=Bt.specActions,Vn=Bt.param,fr=Bt.pathMethod,rr=Vn.get("name"),Mr=Vn.get("in");return hn.updateEmptyParamInclusion(fr,rr,Mr,Ut)}),(0,K.default)((0,qi.default)(mt),"setDefaultValue",function(){var Ut=mt.props,Bt=Ut.specSelectors,hn=Ut.pathMethod,fr=Ut.oas3Selectors,rr=Bt.parameterWithMetaByIdentity(hn,Ut.rawParam)||(0,Dt.Map)(),Mr=(0,Q0.Z)(rr,{isOAS3:Bt.isOAS3()}).schema,Li=rr.get("content",(0,Dt.Map)()).keySeq().first(),Fi=Mr?(0,zn.xi)(Mr.toJS(),Li,{includeWriteOnly:!0}):null;if(rr&&void 0===rr.get("value")&&"body"!==rr.get("in")){var Ki;if(Bt.isSwagger2())Ki=void 0!==rr.get("x-example")?rr.get("x-example"):void 0!==rr.getIn(["schema","example"])?rr.getIn(["schema","example"]):Mr&&Mr.getIn(["default"]);else if(Bt.isOAS3()){var to,wo=fr.activeExamplesMember.apply(fr,(0,o.default)(to=(0,Xd.default)(hn)).call(to,["parameters",mt.getParamKey()]));Ki=void 0!==rr.getIn(["examples",wo,"value"])?rr.getIn(["examples",wo,"value"]):void 0!==rr.getIn(["content",Li,"example"])?rr.getIn(["content",Li,"example"]):void 0!==rr.get("example")?rr.get("example"):void 0!==(Mr&&Mr.get("example"))?Mr&&Mr.get("example"):void 0!==(Mr&&Mr.get("default"))?Mr&&Mr.get("default"):rr.get("default")}void 0===Ki||Dt.List.isList(Ki)||(Ki=(0,zn.Pz)(Ki)),void 0!==Ki?mt.onChangeWrapper(Ki):Mr&&"object"===Mr.get("type")&&Fi&&!rr.get("examples")&&mt.onChangeWrapper(Dt.List.isList(Fi)?Fi:(0,zn.Pz)(Fi))}}),mt.setDefaultValue(),mt}return(0,ue.default)(Ct,[{key:"UNSAFE_componentWillReceiveProps",value:function(at){var dt,mt=at.specSelectors,Ut=at.pathMethod,Bt=at.rawParam,hn=mt.isOAS3(),Vn=mt.parameterWithMetaByIdentity(Ut,Bt)||new Dt.Map;if(Vn=Vn.isEmpty()?Bt:Vn,hn){var fr=(0,Q0.Z)(Vn,{isOAS3:hn}).schema;dt=fr?fr.get("enum"):void 0}else dt=Vn?Vn.get("enum"):void 0;var rr,Mr=Vn?Vn.get("value"):void 0;void 0!==Mr?rr=Mr:Bt.get("required")&&dt&&dt.size&&(rr=dt.first()),void 0!==rr&&rr!==Mr&&this.onChangeWrapper((0,zn.D$)(rr)),this.setDefaultValue()}},{key:"getParamKey",value:function(){var at,dt=this.props.param;return dt?(0,o.default)(at="".concat(dt.get("name"),"-")).call(at,dt.get("in")):null}},{key:"render",value:function(){var at,dt,mt,Ut,Bt=this.props,hn=Bt.param,Vn=Bt.rawParam,fr=Bt.getComponent,rr=Bt.getConfigs,Mr=Bt.isExecute,Li=Bt.fn,Fi=Bt.onChangeConsumes,Ki=Bt.specSelectors,to=Bt.pathMethod,wo=Bt.specPath,bo=Bt.oas3Selectors,Mo=Ki.isOAS3(),Ws=rr(),sa=Ws.showExtensions,Ma=Ws.showCommonExtensions;if(hn||(hn=Vn),!Vn)return null;var ta,na,aa,Xs,ml=fr("JsonSchemaForm"),ha=fr("ParamBody"),Xa=hn.get("in"),bs="body"!==Xa?null:Z.default.createElement(ha,{getComponent:fr,getConfigs:rr,fn:Li,param:hn,consumes:Ki.consumesOptionsFor(to),consumesValue:Ki.contentTypeValues(to).get("requestContentType"),onChange:this.onChangeWrapper,onChangeConsumes:Fi,isExecute:Mr,specSelectors:Ki,pathMethod:to}),Oa=fr("modelExample"),Yl=fr("Markdown",!0),Ad=fr("ParameterExt"),Of=fr("ParameterIncludeEmpty"),Af=fr("ExamplesSelectValueRetainer"),rp=fr("Example"),Du=(0,Q0.Z)(hn,{isOAS3:Mo}).schema,Dd=Ki.parameterWithMetaByIdentity(to,Vn)||(0,Dt.Map)(),jc=Du?Du.get("format"):null,$p=Du?Du.get("type"):null,bp=Du?Du.getIn(["items","type"]):null,Wh="formData"===Xa,df="FormData"in Jn.Z,zc=hn.get("required"),ff=Dd?Dd.get("value"):"",Df=Ma?(0,zn.po)(Du):null,Rf=sa?(0,zn.nX)(hn):null,V_=!1;return void 0!==hn&&Du&&(ta=Du.get("items")),void 0!==ta?(na=ta.get("enum"),aa=ta.get("default")):Du&&(na=Du.get("enum")),na&&na.size&&na.size>0&&(V_=!0),void 0!==hn&&(Du&&(aa=Du.get("default")),void 0===aa&&(aa=hn.get("default")),void 0===(Xs=hn.get("example"))&&(Xs=hn.get("x-example"))),Z.default.createElement("tr",{"data-param-name":hn.get("name"),"data-param-in":hn.get("in")},Z.default.createElement("td",{className:"parameters-col_name"},Z.default.createElement("div",{className:zc?"parameter__name required":"parameter__name"},hn.get("name"),zc?Z.default.createElement("span",null,"\xa0*"):null),Z.default.createElement("div",{className:"parameter__type"},$p,bp&&"[".concat(bp,"]"),jc&&Z.default.createElement("span",{className:"prop-format"},"($",jc,")")),Z.default.createElement("div",{className:"parameter__deprecated"},Mo&&hn.get("deprecated")?"deprecated":null),Z.default.createElement("div",{className:"parameter__in"},"(",hn.get("in"),")"),Ma&&Df.size?(0,we.default)(at=Df.entrySeq()).call(at,function(qd){var ef,Hf=(0,hl.default)(qd,2),Z_=Hf[0],ug=Hf[1];return Z.default.createElement(Ad,{key:(0,o.default)(ef="".concat(Z_,"-")).call(ef,ug),xKey:Z_,xVal:ug})}):null,sa&&Rf.size?(0,we.default)(dt=Rf.entrySeq()).call(dt,function(qd){var ef,Hf=(0,hl.default)(qd,2),Z_=Hf[0],ug=Hf[1];return Z.default.createElement(Ad,{key:(0,o.default)(ef="".concat(Z_,"-")).call(ef,ug),xKey:Z_,xVal:ug})}):null),Z.default.createElement("td",{className:"parameters-col_description"},hn.get("description")?Z.default.createElement(Yl,{source:hn.get("description")}):null,!bs&&Mr||!V_?null:Z.default.createElement(Yl,{className:"parameter__enum",source:"<i>Available values</i> : "+(0,we.default)(na).call(na,function(qd){return qd}).toArray().join(", ")}),!bs&&Mr||void 0===aa?null:Z.default.createElement(Yl,{className:"parameter__default",source:"<i>Default value</i> : "+aa}),!bs&&Mr||void 0===Xs?null:Z.default.createElement(Yl,{source:"<i>Example</i> : "+Xs}),Wh&&!df&&Z.default.createElement("div",null,"Error: your browser does not support FormData"),Mo&&hn.get("examples")?Z.default.createElement("section",{className:"parameter-controls"},Z.default.createElement(Af,{examples:hn.get("examples"),onSelect:this._onExampleSelect,updateValue:this.onChangeWrapper,getComponent:fr,defaultToFirstExample:!0,currentKey:bo.activeExamplesMember.apply(bo,(0,o.default)(mt=(0,Xd.default)(to)).call(mt,["parameters",this.getParamKey()])),currentUserInputValue:ff})):null,bs?null:Z.default.createElement(ml,{fn:Li,getComponent:fr,value:ff,required:zc,disabled:!Mr,description:hn.get("name"),onChange:this.onChangeWrapper,errors:Dd.get("errors"),schema:Du}),bs&&Du?Z.default.createElement(Oa,{getComponent:fr,specPath:wo.push("schema"),getConfigs:rr,isExecute:Mr,specSelectors:Ki,schema:Du,example:bs,includeWriteOnly:!0}):null,!bs&&Mr&&hn.get("allowEmptyValue")?Z.default.createElement(Of,{onChange:this.onChangeIncludeEmpty,isIncluded:Ki.parameterInclusionSettingFor(to,hn.get("name"),hn.get("in")),isDisabled:!(0,zn.O2)(ff)}):null,Mo&&hn.get("examples")?Z.default.createElement(rp,{example:hn.getIn(["examples",bo.activeExamplesMember.apply(bo,(0,o.default)(Ut=(0,Xd.default)(to)).call(Ut,["parameters",this.getParamKey()]))]),getComponent:fr,getConfigs:rr}):null))}}]),Ct}(Z.Component),i2=qo(6235),o2=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"handleValidateParameters",function(){var hn=dt.props,Vn=hn.specSelectors,rr=hn.path,Mr=hn.method;return hn.specActions.validateParams([rr,Mr]),Vn.validateBeforeExecute([rr,Mr])}),(0,K.default)((0,qi.default)(dt),"handleValidateRequestBody",function(){var hn=dt.props,Vn=hn.path,fr=hn.method,rr=hn.specSelectors,Mr=hn.oas3Selectors,Li=hn.oas3Actions,Fi={missingBodyValue:!1,missingRequiredKeys:[]};Li.clearRequestBodyValidateError({path:Vn,method:fr});var Ki=rr.getOAS3RequiredRequestBodyContentType([Vn,fr]),to=Mr.requestBodyValue(Vn,fr),wo=Mr.validateBeforeExecute([Vn,fr]),bo=Mr.requestContentType(Vn,fr);if(!wo)return Fi.missingBodyValue=!0,Li.setRequestBodyValidateError({path:Vn,method:fr,validationErrors:Fi}),!1;if(!Ki)return!0;var Mo=Mr.validateShallowRequired({oas3RequiredRequestBodyContentType:Ki,oas3RequestContentType:bo,oas3RequestBodyValue:to});return!Mo||Mo.length<1||((0,Gu.default)(Mo).call(Mo,function(Ws){Fi.missingRequiredKeys.push(Ws)}),Li.setRequestBodyValidateError({path:Vn,method:fr,validationErrors:Fi}),!1)}),(0,K.default)((0,qi.default)(dt),"handleValidationResultPass",function(){var hn=dt.props,Vn=hn.specActions,fr=hn.operation,rr=hn.path,Mr=hn.method;dt.props.onExecute&&dt.props.onExecute(),Vn.execute({operation:fr,path:rr,method:Mr})}),(0,K.default)((0,qi.default)(dt),"handleValidationResultFail",function(){var hn=dt.props,Vn=hn.specActions,fr=hn.path,rr=hn.method;Vn.clearValidateParams([fr,rr]),(0,i2.default)(function(){Vn.validateParams([fr,rr])},40)}),(0,K.default)((0,qi.default)(dt),"handleValidationResult",function(hn){hn?dt.handleValidationResultPass():dt.handleValidationResultFail()}),(0,K.default)((0,qi.default)(dt),"onClick",function(){var hn=dt.handleValidateParameters(),Vn=dt.handleValidateRequestBody();dt.handleValidationResult(hn&&Vn)}),(0,K.default)((0,qi.default)(dt),"onChangeProducesWrapper",function(hn){return dt.props.specActions.changeProducesValue([dt.props.path,dt.props.method],hn)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){return Z.default.createElement("button",{className:"btn execute opblock-control__btn",onClick:this.onClick,disabled:this.props.disabled},"Execute")}}]),Ct}(Z.Component),Ml=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this.props,mt=dt.headers,Ut=dt.getComponent,Bt=Ut("Property"),hn=Ut("Markdown",!0);return mt&&mt.size?Z.default.createElement("div",{className:"headers-wrapper"},Z.default.createElement("h4",{className:"headers__title"},"Headers:"),Z.default.createElement("table",{className:"headers"},Z.default.createElement("thead",null,Z.default.createElement("tr",{className:"header-row"},Z.default.createElement("th",{className:"header-col"},"Name"),Z.default.createElement("th",{className:"header-col"},"Description"),Z.default.createElement("th",{className:"header-col"},"Type"))),Z.default.createElement("tbody",null,(0,we.default)(at=mt.entrySeq()).call(at,function(Vn){var fr=(0,hl.default)(Vn,2),rr=fr[0],Mr=fr[1];if(!Dt.default.Map.isMap(Mr))return null;var Li=Mr.get("description"),Fi=Mr.getIn(["schema"])?Mr.getIn(["schema","type"]):Mr.getIn(["type"]),Ki=Mr.getIn(["schema","example"]);return Z.default.createElement("tr",{key:rr},Z.default.createElement("td",{className:"header-col"},rr),Z.default.createElement("td",{className:"header-col"},Li?Z.default.createElement(hn,{source:Li}):null),Z.default.createElement("td",{className:"header-col"},Fi," ",Ki?Z.default.createElement(Bt,{propKey:"Example",propVal:Ki,propClass:"header-example"}):null))}).toArray()))):null}}]),Ct}(Z.default.Component),mc=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.editorActions,mt=at.errSelectors,Ut=at.layoutSelectors,Bt=at.layoutActions,hn=(0,at.getComponent)("Collapse");if(dt&&dt.jumpToLine)var Vn=dt.jumpToLine;var fr=mt.allErrors(),rr=(0,_.default)(fr).call(fr,function(Fi){return"thrown"===Fi.get("type")||"error"===Fi.get("level")});if(!rr||rr.count()<1)return null;var Mr=Ut.isShown(["errorPane"],!0),Li=rr.sortBy(function(Fi){return Fi.get("line")});return Z.default.createElement("pre",{className:"errors-wrapper"},Z.default.createElement("hgroup",{className:"error"},Z.default.createElement("h4",{className:"errors__title"},"Errors"),Z.default.createElement("button",{className:"btn errors__clear-btn",onClick:function(){return Bt.show(["errorPane"],!Mr)}},Mr?"Hide":"Show")),Z.default.createElement(hn,{isOpened:Mr,animated:!0},Z.default.createElement("div",{className:"errors"},(0,we.default)(Li).call(Li,function(Fi,Ki){var to=Fi.get("type");return"thrown"===to||"auth"===to?Z.default.createElement(Od,{key:Ki,error:Fi.get("error")||Fi,jumpToLine:Vn}):"spec"===to?Z.default.createElement(Tv,{key:Ki,error:Fi,jumpToLine:Vn}):void 0}))))}}]),Ct}(Z.default.Component),Od=function(Yn){var vn=Yn.error,Ct=Yn.jumpToLine;if(!vn)return null;var at=vn.get("line");return Z.default.createElement("div",{className:"error-wrapper"},vn?Z.default.createElement("div",null,Z.default.createElement("h4",null,vn.get("source")&&vn.get("level")?y1(vn.get("source"))+" "+vn.get("level"):"",vn.get("path")?Z.default.createElement("small",null," at ",vn.get("path")):null),Z.default.createElement("span",{className:"message thrown"},vn.get("message")),Z.default.createElement("div",{className:"error-line"},at&&Ct?Z.default.createElement("a",{onClick:(0,pe.default)(Ct).call(Ct,null,at)},"Jump to line ",at):null)):null)},Tv=function(Yn){var vn=Yn.error,Ct=Yn.jumpToLine,at=null;return vn.get("path")?at=Dt.List.isList(vn.get("path"))?Z.default.createElement("small",null,"at ",vn.get("path").join(".")):Z.default.createElement("small",null,"at ",vn.get("path")):vn.get("line")&&!Ct&&(at=Z.default.createElement("small",null,"on line ",vn.get("line"))),Z.default.createElement("div",{className:"error-wrapper"},vn?Z.default.createElement("div",null,Z.default.createElement("h4",null,y1(vn.get("source"))+" "+vn.get("level"),"\xa0",at),Z.default.createElement("span",{className:"message"},vn.get("message")),Z.default.createElement("div",{className:"error-line"},Ct?Z.default.createElement("a",{onClick:(0,pe.default)(Ct).call(Ct,null,vn.get("line"))},"Jump to line ",vn.get("line")):null)):null)};function y1(Yn){var vn;return(0,we.default)(vn=(Yn||"").split(" ")).call(vn,function(Ct){return Ct[0].toUpperCase()+(0,Ue.default)(Ct).call(Ct,1)}).join(" ")}Od.defaultProps={jumpToLine:null};var Cv=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onChangeWrapper",function(hn){return dt.props.onChange(hn.target.value)}),dt}return(0,ue.default)(Ct,[{key:"componentDidMount",value:function(){this.props.contentTypes&&this.props.onChange(this.props.contentTypes.first())}},{key:"UNSAFE_componentWillReceiveProps",value:function(at){var dt;at.contentTypes&&at.contentTypes.size&&((0,Au.default)(dt=at.contentTypes).call(dt,at.value)||at.onChange(at.contentTypes.first()))}},{key:"render",value:function(){var at=this.props,Bt=at.contentTypes;return Bt&&Bt.size?Z.default.createElement("div",{className:"content-type-wrapper "+(at.className||"")},Z.default.createElement("select",{"aria-controls":at.ariaControls,"aria-label":at.ariaLabel,className:"content-type",id:at.controlId,onChange:this.onChangeWrapper,value:at.value||""},(0,we.default)(Bt).call(Bt,function(fr){return Z.default.createElement("option",{key:fr,value:fr},fr)}).toArray())):null}}]),Ct}(Z.default.Component);(0,K.default)(Cv,"defaultProps",{onChange:function(){},value:null,contentTypes:(0,Dt.fromJS)(["application/json"])});var i_=qo(863),E1=qo(302),eW=qo(5942),tW=["fullscreen","full"],nW=["hide","keepContents","mobile","tablet","desktop","large"];function pS(){for(var Yn,vn=arguments.length,Ct=new Array(vn),at=0;at<vn;at++)Ct[at]=arguments[at];return(0,eW.default)(Yn=(0,_.default)(Ct).call(Ct,function(dt){return!!dt}).join(" ")).call(Yn)}var rW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.fullscreen,mt=at.full,Ut=(0,E1.default)(at,tW);return Z.default.createElement("section",dt?Ut:(0,i_.default)({},Ut,{className:pS(Ut.className,"swagger-container"+(mt?"-full":""))}))}}]),Ct}(Z.default.Component),cR={mobile:"",tablet:"-tablet",desktop:"-desktop",large:"-hd"},iW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this.props,mt=dt.hide,Ut=dt.keepContents,Bt=(0,E1.default)(dt,nW);if(mt&&!Ut)return Z.default.createElement("span",null);var hn=[];for(var Vn in cR)if(Object.prototype.hasOwnProperty.call(cR,Vn)){var fr=cR[Vn];if(Vn in this.props){var rr=this.props[Vn];if(rr<1){hn.push("none"+fr);continue}hn.push("block"+fr),hn.push("col-"+rr+fr)}}mt&&hn.push("hidden");var Mr=pS.apply(void 0,(0,o.default)(at=[Bt.className]).call(at,hn));return Z.default.createElement("section",(0,i_.default)({},Bt,{className:Mr}))}}]),Ct}(Z.default.Component),oW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){return Z.default.createElement("div",(0,i_.default)({},this.props,{className:pS(this.props.className,"wrapper")}))}}]),Ct}(Z.default.Component),xN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){return Z.default.createElement("button",(0,i_.default)({},this.props,{className:pS(this.props.className,"button")}))}}]),Ct}(Z.default.Component);(0,K.default)(xN,"defaultProps",{className:""});var sW=function(Yn){return Z.default.createElement("textarea",Yn)},aW=function(Yn){return Z.default.createElement("input",Yn)},wN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;return(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"onChange",function(Bt){var hn,Vn,fr=mt.props,rr=fr.onChange,Mr=fr.multiple,Li=(0,Ue.default)([]).call(Bt.target.options);hn=Mr?(0,we.default)(Vn=(0,_.default)(Li).call(Li,function(Fi){return Fi.selected})).call(Vn,function(Fi){return Fi.value}):Bt.target.value,mt.setState({value:hn}),rr&&rr(hn)}),mt.state={value:at.value?at.value:at.multiple?[""]:""},mt}return(0,ue.default)(Ct,[{key:"UNSAFE_componentWillReceiveProps",value:function(at){at.value!==this.props.value&&this.setState({value:at.value})}},{key:"render",value:function(){var at,dt,mt=this.props,Ut=mt.allowedValues,Bt=mt.multiple,hn=mt.allowEmptyValue,Vn=mt.disabled,fr=(null===(at=this.state.value)||void 0===at||null===(dt=at.toJS)||void 0===dt?void 0:dt.call(at))||this.state.value;return Z.default.createElement("select",{className:this.props.className,multiple:Bt,value:fr,onChange:this.onChange,disabled:Vn},hn?Z.default.createElement("option",{value:""},"--"):null,(0,we.default)(Ut).call(Ut,function(rr,Mr){return Z.default.createElement("option",{key:Mr,value:String(rr)},String(rr))}))}}]),Ct}(Z.default.Component);(0,K.default)(wN,"defaultProps",{multiple:!1,allowEmptyValue:!0});var PN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){return Z.default.createElement("a",(0,i_.default)({},this.props,{rel:"noopener noreferrer",className:pS(this.props.className,"link")}))}}]),Ct}(Z.default.Component),NN=function(Yn){return Z.default.createElement("div",{className:"no-margin"}," ",Yn.children," ")},IN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"renderNotAnimated",value:function(){return this.props.isOpened?Z.default.createElement(NN,null,this.props.children):Z.default.createElement("noscript",null)}},{key:"render",value:function(){var at=this.props,Ut=at.children;return at.animated?Z.default.createElement(NN,null,Ut=at.isOpened?Ut:null):this.renderNotAnimated()}}]),Ct}(Z.default.Component);(0,K.default)(IN,"defaultProps",{isOpened:!1,animated:!1});var lW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt,mt;(0,oe.default)(this,Ct);for(var Ut=arguments.length,Bt=new Array(Ut),hn=0;hn<Ut;hn++)Bt[hn]=arguments[hn];return(mt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Bt))).setTagShown=(0,pe.default)(dt=mt._setTagShown).call(dt,(0,qi.default)(mt)),mt}return(0,ue.default)(Ct,[{key:"_setTagShown",value:function(at,dt){this.props.layoutActions.show(at,dt)}},{key:"showOp",value:function(at,dt){this.props.layoutActions.show(at,dt)}},{key:"render",value:function(){var at=this.props,mt=at.layoutSelectors,Ut=at.layoutActions,Bt=at.getComponent,hn=at.specSelectors.taggedOperations(),Vn=Bt("Collapse");return Z.default.createElement("div",null,Z.default.createElement("h4",{className:"overview-title"},"Overview"),(0,we.default)(hn).call(hn,function(fr,rr){var Mr=fr.get("operations"),Li=["overview-tags",rr],Fi=mt.isShown(Li,!0);return Z.default.createElement("div",{key:"overview-"+rr},Z.default.createElement("h4",{onClick:function(){return Ut.show(Li,!Fi)},className:"link overview-tag"}," ",Fi?"-":"+",rr),Z.default.createElement(Vn,{isOpened:Fi,animated:!0},(0,we.default)(Mr).call(Mr,function(Ki){var to=Ki.toObject(),wo=to.path,bo=to.method,Mo=to.id,Ws="operations",sa=Mo,Ma=mt.isShown([Ws,sa]);return Z.default.createElement(uW,{key:Mo,path:wo,method:bo,id:wo+"-"+bo,shown:Ma,showOpId:sa,showOpIdPrefix:Ws,href:"#operation-".concat(sa),onClick:Ut.show})}).toArray()))}).toArray(),hn.size<1&&Z.default.createElement("h3",null," No operations defined in spec! "))}}]),Ct}(Z.default.Component),uW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at){var dt,mt;return(0,oe.default)(this,Ct),(mt=vn.call(this,at)).onClick=(0,pe.default)(dt=mt._onClick).call(dt,(0,qi.default)(mt)),mt}return(0,ue.default)(Ct,[{key:"_onClick",value:function(){var at=this.props;(0,at.onClick)([at.showOpIdPrefix,at.showOpId],!at.shown)}},{key:"render",value:function(){var at=this.props,dt=at.id,mt=at.method;return Z.default.createElement(PN,{href:at.href,onClick:this.onClick,className:"block opblock-link ".concat(at.shown?"shown":"")},Z.default.createElement("div",null,Z.default.createElement("small",{className:"bold-label-".concat(mt)},mt.toUpperCase()),Z.default.createElement("span",{className:"bold-label"},dt)))}}]),Ct}(Z.default.Component),cW=["value","defaultValue","initialValue"],dW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"componentDidMount",value:function(){this.props.initialValue&&(this.inputRef.value=this.props.initialValue)}},{key:"render",value:function(){var at=this,mt=(0,E1.default)(this.props,cW);return Z.default.createElement("input",(0,i_.default)({},mt,{ref:function(Ut){return at.inputRef=Ut}}))}}]),Ct}(Z.default.Component),fW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props;return Z.default.createElement("pre",{className:"base-url"},"[ Base URL: ",at.host,at.basePath," ]")}}]),Ct}(Z.default.Component),pW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.data,mt=at.getComponent,Ut=at.selectedServer,Bt=at.url,hn=dt.get("name")||"the developer",Vn=oo(dt.get("url"),Bt,{selectedServer:Ut}),fr=dt.get("email"),rr=mt("Link");return Z.default.createElement("div",{className:"info__contact"},Vn&&Z.default.createElement("div",null,Z.default.createElement(rr,{href:(0,zn.Nm)(Vn),target:"_blank"},hn," - Website")),fr&&Z.default.createElement(rr,{href:(0,zn.Nm)("mailto:".concat(fr))},Vn?"Send email to ".concat(hn):"Contact ".concat(hn)))}}]),Ct}(Z.default.Component),_W=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.license,Ut=at.selectedServer,Bt=at.url,hn=(0,at.getComponent)("Link"),Vn=dt.get("name")||"License",fr=oo(dt.get("url"),Bt,{selectedServer:Ut});return Z.default.createElement("div",{className:"info__license"},fr?Z.default.createElement(hn,{target:"_blank",href:(0,zn.Nm)(fr)},Vn):Z.default.createElement("span",null,Vn))}}]),Ct}(Z.default.Component),hW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.url,mt=(0,at.getComponent)("Link");return Z.default.createElement(mt,{target:"_blank",href:(0,zn.Nm)(dt)},Z.default.createElement("span",{className:"url"}," ",dt))}}]),Ct}(Z.default.PureComponent),mW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.info,mt=at.url,Ut=at.host,Bt=at.basePath,hn=at.getComponent,Vn=at.externalDocs,fr=at.selectedServer,rr=at.url,Mr=dt.get("version"),Li=dt.get("description"),Fi=dt.get("title"),Ki=oo(dt.get("termsOfService"),rr,{selectedServer:fr}),to=dt.get("contact"),wo=dt.get("license"),bo=oo(Vn&&Vn.get("url"),rr,{selectedServer:fr}),Mo=Vn&&Vn.get("description"),Ws=hn("Markdown",!0),sa=hn("Link"),Ma=hn("VersionStamp"),ta=hn("InfoUrl"),na=hn("InfoBasePath");return Z.default.createElement("div",{className:"info"},Z.default.createElement("hgroup",{className:"main"},Z.default.createElement("h2",{className:"title"},Fi,Mr&&Z.default.createElement(Ma,{version:Mr})),Ut||Bt?Z.default.createElement(na,{host:Ut,basePath:Bt}):null,mt&&Z.default.createElement(ta,{getComponent:hn,url:mt})),Z.default.createElement("div",{className:"description"},Z.default.createElement(Ws,{source:Li})),Ki&&Z.default.createElement("div",{className:"info__tos"},Z.default.createElement(sa,{target:"_blank",href:(0,zn.Nm)(Ki)},"Terms of service")),to&&to.size?Z.default.createElement(pW,{getComponent:hn,data:to,selectedServer:fr,url:mt}):null,wo&&wo.size?Z.default.createElement(_W,{getComponent:hn,license:wo,selectedServer:fr,url:mt}):null,bo?Z.default.createElement(sa,{className:"info__extdocs",target:"_blank",href:(0,zn.Nm)(bo)},Mo||bo):null)}}]),Ct}(Z.default.Component),gW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.specSelectors,mt=at.getComponent,Ut=at.oas3Selectors,Bt=dt.info(),hn=dt.url(),Vn=dt.basePath(),fr=dt.host(),rr=dt.externalDocs(),Mr=Ut.selectedServer(),Li=mt("info");return Z.default.createElement("div",null,Bt&&Bt.count()?Z.default.createElement(Li,{info:Bt,url:hn,host:fr,basePath:Vn,externalDocs:rr,getComponent:mt,selectedServer:Mr}):null)}}]),Ct}(Z.default.Component),vW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){return null}}]),Ct}(Z.default.Component),yW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){return Z.default.createElement("div",{className:"footer"})}}]),Ct}(Z.default.Component),EW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onFilterChange",function(hn){dt.props.layoutActions.updateFilter(hn.target.value)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.specSelectors,mt=at.layoutSelectors,Ut=(0,at.getComponent)("Col"),Bt="loading"===dt.loadingStatus(),hn="failed"===dt.loadingStatus(),Vn=mt.currentFilter(),fr=["operation-filter-input"];return hn&&fr.push("failed"),Bt&&fr.push("loading"),Z.default.createElement("div",null,null===Vn||!1===Vn||"false"===Vn?null:Z.default.createElement("div",{className:"filter-container"},Z.default.createElement(Ut,{className:"filter wrapper",mobile:12},Z.default.createElement("input",{className:fr.join(" "),placeholder:"Filter by tag",type:"text",onChange:this.onFilterChange,value:!0===Vn||"true"===Vn?"":Vn,disabled:Bt}))))}}]),Ct}(Z.default.Component),dR=Function.prototype,FN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;return(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"updateValues",function(Ut){var Bt=Ut.param,hn=Ut.isExecute,Vn=Ut.consumesValue,fr=void 0===Vn?"":Vn,rr=/xml/i.test(fr),Mr=/json/i.test(fr),Li=Bt.get(rr?"value_xml":"value");if(void 0!==Li){var Fi=!Li&&Mr?"{}":Li;mt.setState({value:Fi}),mt.onChange(Fi,{isXml:rr,isEditBox:hn})}else rr?mt.onChange(mt.sample("xml"),{isXml:rr,isEditBox:hn}):mt.onChange(mt.sample(),{isEditBox:hn})}),(0,K.default)((0,qi.default)(mt),"sample",function(Ut){var Bt=mt.props,Vn=(0,Bt.fn.inferSchema)(Bt.param.toJS());return(0,zn.xi)(Vn,Ut,{includeWriteOnly:!0})}),(0,K.default)((0,qi.default)(mt),"onChange",function(Ut,Bt){var Vn=Bt.isXml;mt.setState({value:Ut,isEditBox:Bt.isEditBox}),mt._onChange(Ut,Vn)}),(0,K.default)((0,qi.default)(mt),"_onChange",function(Ut,Bt){(mt.props.onChange||dR)(Ut,Bt)}),(0,K.default)((0,qi.default)(mt),"handleOnChange",function(Ut){var hn=/xml/i.test(mt.props.consumesValue);mt.onChange(Ut.target.value,{isXml:hn,isEditBox:mt.state.isEditBox})}),(0,K.default)((0,qi.default)(mt),"toggleIsEditBox",function(){return mt.setState(function(Ut){return{isEditBox:!Ut.isEditBox}})}),mt.state={isEditBox:!1,value:""},mt}return(0,ue.default)(Ct,[{key:"componentDidMount",value:function(){this.updateValues.call(this,this.props)}},{key:"UNSAFE_componentWillReceiveProps",value:function(at){this.updateValues.call(this,at)}},{key:"render",value:function(){var at=this.props,dt=at.onChangeConsumes,mt=at.param,Ut=at.isExecute,Bt=at.specSelectors,hn=at.pathMethod,Vn=at.getConfigs,fr=at.getComponent,rr=fr("Button"),Mr=fr("TextArea"),Li=fr("highlightCode"),Fi=fr("contentType"),Ki=(Bt?Bt.parameterWithMetaByIdentity(hn,mt):mt).get("errors",(0,Dt.List)()),to=Bt.contentTypeValues(hn).get("requestContentType"),wo=this.props.consumes&&this.props.consumes.size?this.props.consumes:Ct.defaultProp.consumes,bo=this.state,Mo=bo.value,Ws=bo.isEditBox,sa=null;return(0,Pm.O)(Mo)&&(sa="json"),Z.default.createElement("div",{className:"body-param","data-param-name":mt.get("name"),"data-param-in":mt.get("in")},Ws&&Ut?Z.default.createElement(Mr,{className:"body-param__text"+(Ki.count()?" invalid":""),value:Mo,onChange:this.handleOnChange}):Mo&&Z.default.createElement(Li,{className:"body-param__example",language:sa,getConfigs:Vn,value:Mo}),Z.default.createElement("div",{className:"body-param-options"},Ut?Z.default.createElement("div",{className:"body-param-edit"},Z.default.createElement(rr,{className:Ws?"btn cancel body-param__example-edit":"btn edit body-param__example-edit",onClick:this.toggleIsEditBox},Ws?"Cancel":"Edit")):null,Z.default.createElement("label",{htmlFor:""},Z.default.createElement("span",null,"Parameter content type"),Z.default.createElement(Fi,{value:to,contentTypes:wo,onChange:dt,className:"body-param-content-type",ariaLabel:"Parameter content type"}))))}}]),Ct}(Z.PureComponent);(0,K.default)(FN,"defaultProp",{consumes:(0,Dt.fromJS)(["application/json"]),param:(0,Dt.fromJS)({}),onChange:dR,onChangeConsumes:dR});var SW=qo(4624),bW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,mt=at.getConfigs,Ut=(0,SW.requestSnippetGenerator_curl_bash)(at.request),Bt=mt(),hn=(0,su.default)(Bt,"syntaxHighlight.activated")?Z.default.createElement(Ep.d3,{language:"bash",className:"curl microlight",style:(0,Ep.C2)((0,su.default)(Bt,"syntaxHighlight.theme"))},Ut):Z.default.createElement("textarea",{readOnly:!0,className:"curl",value:Ut});return Z.default.createElement("div",{className:"curl-command"},Z.default.createElement("h4",null,"Curl"),Z.default.createElement("div",{className:"copy-to-clipboard"},Z.default.createElement(Sp.CopyToClipboard,{text:Ut},Z.default.createElement("button",null))),Z.default.createElement("div",null,hn))}}]),Ct}(Z.default.Component),TW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onChange",function(hn){dt.setScheme(hn.target.value)}),(0,K.default)((0,qi.default)(dt),"setScheme",function(hn){var Vn=dt.props;Vn.specActions.setScheme(hn,Vn.path,Vn.method)}),dt}return(0,ue.default)(Ct,[{key:"UNSAFE_componentWillMount",value:function(){this.setScheme(this.props.schemes.first())}},{key:"UNSAFE_componentWillReceiveProps",value:function(at){var dt;this.props.currentScheme&&(0,Au.default)(dt=at.schemes).call(dt,this.props.currentScheme)||this.setScheme(at.schemes.first())}},{key:"render",value:function(){var at,dt=this.props,mt=dt.schemes,Ut=dt.currentScheme;return Z.default.createElement("label",{htmlFor:"schemes"},Z.default.createElement("span",{className:"schemes-title"},"Schemes"),Z.default.createElement("select",{onChange:this.onChange,value:Ut},(0,we.default)(at=mt.valueSeq()).call(at,function(Bt){return Z.default.createElement("option",{value:Bt,key:Bt},Bt)}).toArray()))}}]),Ct}(Z.default.Component),CW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.specActions,mt=at.specSelectors,Ut=at.getComponent,Bt=mt.operationScheme(),hn=mt.schemes(),Vn=Ut("schemes");return hn&&hn.size?Z.default.createElement(Vn,{currentScheme:Bt,schemes:hn,specActions:dt}):null}}]),Ct}(Z.default.Component),LN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"toggleCollapsed",function(){mt.props.onToggle&&mt.props.onToggle(mt.props.modelName,!mt.state.expanded),mt.setState({expanded:!mt.state.expanded})}),(0,K.default)((0,qi.default)(mt),"onLoad",function(Vn){if(Vn&&mt.props.layoutSelectors){var fr=mt.props.layoutSelectors.getScrollToKey();Dt.default.is(fr,mt.props.specPath)&&mt.toggleCollapsed(),mt.props.layoutActions.readyToScroll(mt.props.specPath,Vn.parentElement)}});var Ut=mt.props;return mt.state={expanded:Ut.expanded,collapsedContent:Ut.collapsedContent||Ct.defaultProps.collapsedContent},mt}return(0,ue.default)(Ct,[{key:"componentDidMount",value:function(){var at=this.props,mt=at.expanded;at.hideSelfOnExpand&&mt&&this.props.onToggle(at.modelName,mt)}},{key:"UNSAFE_componentWillReceiveProps",value:function(at){this.props.expanded!==at.expanded&&this.setState({expanded:at.expanded})}},{key:"render",value:function(){var at=this.props,dt=at.title,mt=at.classes;return this.state.expanded&&this.props.hideSelfOnExpand?Z.default.createElement("span",{className:mt||""},this.props.children):Z.default.createElement("span",{className:mt||"",ref:this.onLoad},Z.default.createElement("button",{"aria-expanded":this.state.expanded,className:"model-box-control",onClick:this.toggleCollapsed},dt&&Z.default.createElement("span",{className:"pointer"},dt),Z.default.createElement("span",{className:"model-toggle"+(this.state.expanded?"":" collapsed")}),!this.state.expanded&&Z.default.createElement("span",null,this.state.collapsedContent)),this.state.expanded&&this.props.children)}}]),Ct}(Z.Component);(0,K.default)(LN,"defaultProps",{collapsedContent:"{...}",expanded:!1,title:null,onToggle:function(){},hideSelfOnExpand:!1,specPath:Dt.default.List([])});var MW=qo(1798),s2=qo.n(MW),OW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"activeTab",function(rr){mt.setState({activeTab:rr.target.dataset.name})});var Ut=mt.props,hn=Ut.isExecute,Vn=(0,Ut.getConfigs)().defaultModelRendering,fr=Vn;return"example"!==Vn&&"model"!==Vn&&(fr="example"),hn&&(fr="example"),mt.state={activeTab:fr},mt}return(0,ue.default)(Ct,[{key:"UNSAFE_componentWillReceiveProps",value:function(at){at.isExecute&&!this.props.isExecute&&this.props.example&&this.setState({activeTab:"example"})}},{key:"render",value:function(){var at=this.props,dt=at.getComponent,mt=at.specSelectors,Ut=at.schema,Bt=at.example,hn=at.isExecute,Vn=at.getConfigs,fr=at.specPath,rr=at.includeReadOnly,Mr=at.includeWriteOnly,Li=Vn().defaultModelExpandDepth,Fi=dt("ModelWrapper"),Ki=dt("highlightCode"),to=s2()(5).toString("base64"),wo=s2()(5).toString("base64"),bo=s2()(5).toString("base64"),Mo=s2()(5).toString("base64"),Ws=mt.isOAS3();return Z.default.createElement("div",{className:"model-example"},Z.default.createElement("ul",{className:"tab",role:"tablist"},Z.default.createElement("li",{className:(0,cf.default)("tabitem",{active:"example"===this.state.activeTab}),role:"presentation"},Z.default.createElement("button",{"aria-controls":wo,"aria-selected":"example"===this.state.activeTab,className:"tablinks","data-name":"example",id:to,onClick:this.activeTab,role:"tab"},hn?"Edit Value":"Example Value")),Ut&&Z.default.createElement("li",{className:(0,cf.default)("tabitem",{active:"model"===this.state.activeTab}),role:"presentation"},Z.default.createElement("button",{"aria-controls":Mo,"aria-selected":"model"===this.state.activeTab,className:(0,cf.default)("tablinks",{inactive:hn}),"data-name":"model",id:bo,onClick:this.activeTab,role:"tab"},Ws?"Schema":"Model"))),"example"===this.state.activeTab&&Z.default.createElement("div",{"aria-hidden":"example"!==this.state.activeTab,"aria-labelledby":to,"data-name":"examplePanel",id:wo,role:"tabpanel",tabIndex:"0"},Bt||Z.default.createElement(Ki,{value:"(no example available)",getConfigs:Vn})),"model"===this.state.activeTab&&Z.default.createElement("div",{"aria-hidden":"example"===this.state.activeTab,"aria-labelledby":bo,"data-name":"modelPanel",id:Mo,role:"tabpanel",tabIndex:"0"},Z.default.createElement(Fi,{schema:Ut,getComponent:dt,getConfigs:Vn,specSelectors:mt,expandDepth:Li,specPath:fr,includeReadOnly:rr,includeWriteOnly:Mr})))}}]),Ct}(Z.default.Component),AW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onToggle",function(hn,Vn){dt.props.layoutActions&&dt.props.layoutActions.show(dt.props.fullPath,Vn)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this.props,Ut=dt.getConfigs,Bt=(0,dt.getComponent)("Model");return this.props.layoutSelectors&&(at=this.props.layoutSelectors.isShown(this.props.fullPath)),Z.default.createElement("div",{className:"model-box"},Z.default.createElement(Bt,(0,i_.default)({},this.props,{getConfigs:Ut,expanded:at,depth:1,onToggle:this.onToggle,expandDepth:this.props.expandDepth||0})))}}]),Ct}(Z.Component),DW=qo(1543),RW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"getSchemaBasePath",function(){return dt.props.specSelectors.isOAS3()?["components","schemas"]:["definitions"]}),(0,K.default)((0,qi.default)(dt),"getCollapsedContent",function(){return" "}),(0,K.default)((0,qi.default)(dt),"handleToggle",function(hn,Vn){var fr,rr;dt.props.layoutActions.show((0,o.default)(fr=[]).call(fr,(0,Xd.default)(dt.getSchemaBasePath()),[hn]),Vn),Vn&&dt.props.specActions.requestResolvedSubtree((0,o.default)(rr=[]).call(rr,(0,Xd.default)(dt.getSchemaBasePath()),[hn]))}),(0,K.default)((0,qi.default)(dt),"onLoadModels",function(hn){hn&&dt.props.layoutActions.readyToScroll(dt.getSchemaBasePath(),hn)}),(0,K.default)((0,qi.default)(dt),"onLoadModel",function(hn){if(hn){var Vn,fr=hn.getAttribute("data-name");dt.props.layoutActions.readyToScroll((0,o.default)(Vn=[]).call(Vn,(0,Xd.default)(dt.getSchemaBasePath()),[fr]),hn)}}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this,mt=this.props,Ut=mt.specSelectors,Bt=mt.getComponent,hn=mt.layoutSelectors,Vn=mt.layoutActions,fr=mt.getConfigs,rr=Ut.definitions(),Mr=fr(),Li=Mr.docExpansion,Fi=Mr.defaultModelsExpandDepth;if(!rr.size||Fi<0)return null;var Ki=this.getSchemaBasePath(),to=hn.isShown(Ki,Fi>0&&"none"!==Li),wo=Ut.isOAS3(),bo=Bt("ModelWrapper"),Mo=Bt("Collapse"),Ws=Bt("ModelCollapse"),sa=Bt("JumpToPath",!0);return Z.default.createElement("section",{className:to?"models is-open":"models",ref:this.onLoadModels},Z.default.createElement("h4",null,Z.default.createElement("button",{"aria-expanded":to,className:"models-control",onClick:function(){return Vn.show(Ki,!to)}},Z.default.createElement("span",null,wo?"Schemas":"Models"),Z.default.createElement("svg",{width:"20",height:"20","aria-hidden":"true",focusable:"false"},Z.default.createElement("use",{xlinkHref:to?"#large-arrow-up":"#large-arrow-down"})))),Z.default.createElement(Mo,{isOpened:to},(0,we.default)(at=rr.entrySeq()).call(at,function(Ma){var ta,na=(0,hl.default)(Ma,1)[0],aa=(0,o.default)(ta=[]).call(ta,(0,Xd.default)(Ki),[na]),Xs=Dt.default.List(aa),ml=Ut.specResolvedSubtree(aa),ha=Ut.specJson().getIn(aa),Xa=Dt.Map.isMap(ml)?ml:Dt.default.Map(),bs=Dt.Map.isMap(ha)?ha:Dt.default.Map(),Oa=Xa.get("title")||bs.get("title")||na,Yl=hn.isShown(aa,!1);Yl&&0===Xa.size&&bs.size>0&&dt.props.specActions.requestResolvedSubtree(aa);var Ad=Z.default.createElement(bo,{name:na,expandDepth:Fi,schema:Xa||Dt.default.Map(),displayName:Oa,fullPath:aa,specPath:Xs,getComponent:Bt,specSelectors:Ut,getConfigs:fr,layoutSelectors:hn,layoutActions:Vn,includeReadOnly:!0,includeWriteOnly:!0}),Of=Z.default.createElement("span",{className:"model-box"},Z.default.createElement("span",{className:"model model-title"},Oa));return Z.default.createElement("div",{id:"model-".concat(na),className:"model-container",key:"models-section-".concat(na),"data-name":na,ref:dt.onLoadModel},Z.default.createElement("span",{className:"models-jump-to-path"},Z.default.createElement(sa,{specPath:Xs})),Z.default.createElement(Ws,{classes:"model-box",collapsedContent:dt.getCollapsedContent(na),onToggle:dt.handleToggle,title:Of,displayName:Oa,modelName:na,specPath:Xs,layoutSelectors:hn,layoutActions:Vn,hideSelfOnExpand:!0,expanded:Fi>0&&Yl},Ad))}).toArray()))}}]),Ct}(Z.Component);const xW=function(Yn){var vn=Yn.value,Ct=(0,Yn.getComponent)("ModelCollapse"),at=Z.default.createElement("span",null,"Array [ ",vn.count()," ]");return Z.default.createElement("span",{className:"prop-enum"},"Enum:",Z.default.createElement("br",null),Z.default.createElement(Ct,{collapsedContent:at},"[ ",vn.join(", ")," ]"))};var wW=["schema","name","displayName","isRef","getComponent","getConfigs","depth","onToggle","expanded","specPath"],PW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt,mt,Ut,Bt=this.props,hn=Bt.schema,Vn=Bt.name,fr=Bt.displayName,rr=Bt.isRef,Mr=Bt.getComponent,Li=Bt.getConfigs,Fi=Bt.depth,Ki=Bt.onToggle,to=Bt.expanded,wo=Bt.specPath,bo=(0,E1.default)(Bt,wW),Mo=bo.specSelectors,Ws=bo.expandDepth,sa=bo.includeReadOnly,Ma=bo.includeWriteOnly,ta=Mo.isOAS3;if(!hn)return null;var na=Li().showExtensions,aa=hn.get("description"),Xs=hn.get("properties"),ml=hn.get("additionalProperties"),ha=hn.get("title")||fr||Vn,Xa=hn.get("required"),bs=(0,_.default)(hn).call(hn,function(df,zc){var ff;return-1!==(0,rt.default)(ff=["maxProperties","minProperties","nullable","example"]).call(ff,zc)}),Oa=hn.get("deprecated"),Yl=Mr("JumpToPath",!0),Ad=Mr("Markdown",!0),Of=Mr("Model"),Af=Mr("ModelCollapse"),rp=Mr("Property"),Du=function(){return Z.default.createElement("span",{className:"model-jump-to-path"},Z.default.createElement(Yl,{specPath:wo}))},Dd=Z.default.createElement("span",null,Z.default.createElement("span",null,"{"),"...",Z.default.createElement("span",null,"}"),rr?Z.default.createElement(Du,null):""),jc=Mo.isOAS3()?hn.get("anyOf"):null,$p=Mo.isOAS3()?hn.get("oneOf"):null,bp=Mo.isOAS3()?hn.get("not"):null,Wh=ha&&Z.default.createElement("span",{className:"model-title"},rr&&hn.get("$$ref")&&Z.default.createElement("span",{className:"model-hint"},hn.get("$$ref")),Z.default.createElement("span",{className:"model-title__text"},ha));return Z.default.createElement("span",{className:"model"},Z.default.createElement(Af,{modelName:Vn,title:Wh,onToggle:Ki,expanded:!!to||Fi<=Ws,collapsedContent:Dd},Z.default.createElement("span",{className:"brace-open object"},"{"),rr?Z.default.createElement(Du,null):null,Z.default.createElement("span",{className:"inner-object"},Z.default.createElement("table",{className:"model"},Z.default.createElement("tbody",null,aa?Z.default.createElement("tr",{className:"description"},Z.default.createElement("td",null,"description:"),Z.default.createElement("td",null,Z.default.createElement(Ad,{source:aa}))):null,Oa?Z.default.createElement("tr",{className:"property"},Z.default.createElement("td",null,"deprecated:"),Z.default.createElement("td",null,"true")):null,Xs&&Xs.size?(0,we.default)(at=(0,_.default)(dt=Xs.entrySeq()).call(dt,function(df){var zc=(0,hl.default)(df,2)[1];return(!zc.get("readOnly")||sa)&&(!zc.get("writeOnly")||Ma)})).call(at,function(df){var zc,ff,Df=(0,hl.default)(df,2),Rf=Df[0],V_=Df[1],qd=ta()&&V_.get("deprecated"),ef=Dt.List.isList(Xa)&&Xa.contains(Rf),Hf=["property-row"];return qd&&Hf.push("deprecated"),ef&&Hf.push("required"),Z.default.createElement("tr",{key:Rf,className:Hf.join(" ")},Z.default.createElement("td",null,Rf,ef&&Z.default.createElement("span",{className:"star"},"*")),Z.default.createElement("td",null,Z.default.createElement(Of,(0,i_.default)({key:(0,o.default)(zc=(0,o.default)(ff="object-".concat(Vn,"-")).call(ff,Rf,"_")).call(zc,V_)},bo,{required:ef,getComponent:Mr,specPath:wo.push("properties",Rf),getConfigs:Li,schema:V_,depth:Fi+1}))))}).toArray():null,na?Z.default.createElement("tr",null,Z.default.createElement("td",null,"\xa0")):null,na?(0,we.default)(mt=hn.entrySeq()).call(mt,function(df){var zc=(0,hl.default)(df,2),ff=zc[0],Df=zc[1];if("x-"===(0,Ue.default)(ff).call(ff,0,2)){var Rf=Df?Df.toJS?Df.toJS():Df:null;return Z.default.createElement("tr",{key:ff,className:"extension"},Z.default.createElement("td",null,ff),Z.default.createElement("td",null,(0,O.default)(Rf)))}}).toArray():null,ml&&ml.size?Z.default.createElement("tr",null,Z.default.createElement("td",null,"< * >:"),Z.default.createElement("td",null,Z.default.createElement(Of,(0,i_.default)({},bo,{required:!1,getComponent:Mr,specPath:wo.push("additionalProperties"),getConfigs:Li,schema:ml,depth:Fi+1})))):null,jc?Z.default.createElement("tr",null,Z.default.createElement("td",null,"anyOf ->"),Z.default.createElement("td",null,(0,we.default)(jc).call(jc,function(df,zc){return Z.default.createElement("div",{key:zc},Z.default.createElement(Of,(0,i_.default)({},bo,{required:!1,getComponent:Mr,specPath:wo.push("anyOf",zc),getConfigs:Li,schema:df,depth:Fi+1})))}))):null,$p?Z.default.createElement("tr",null,Z.default.createElement("td",null,"oneOf ->"),Z.default.createElement("td",null,(0,we.default)($p).call($p,function(df,zc){return Z.default.createElement("div",{key:zc},Z.default.createElement(Of,(0,i_.default)({},bo,{required:!1,getComponent:Mr,specPath:wo.push("oneOf",zc),getConfigs:Li,schema:df,depth:Fi+1})))}))):null,bp?Z.default.createElement("tr",null,Z.default.createElement("td",null,"not ->"),Z.default.createElement("td",null,Z.default.createElement("div",null,Z.default.createElement(Of,(0,i_.default)({},bo,{required:!1,getComponent:Mr,specPath:wo.push("not"),getConfigs:Li,schema:bp,depth:Fi+1}))))):null))),Z.default.createElement("span",{className:"brace-close"},"}")),bs.size?(0,we.default)(Ut=bs.entrySeq()).call(Ut,function(df){var zc,ff=(0,hl.default)(df,2),Df=ff[0],Rf=ff[1];return Z.default.createElement(rp,{key:(0,o.default)(zc="".concat(Df,"-")).call(zc,Rf),propKey:Df,propVal:Rf,propClass:"property"})}):null)}}]),Ct}(Z.Component),NW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt=this.props,mt=dt.getComponent,Ut=dt.getConfigs,Bt=dt.schema,hn=dt.depth,Vn=dt.expandDepth,fr=dt.name,rr=dt.displayName,Mr=dt.specPath,Li=Bt.get("description"),Fi=Bt.get("items"),Ki=Bt.get("title")||rr||fr,to=(0,_.default)(Bt).call(Bt,function(Ma,ta){var na;return-1===(0,rt.default)(na=["type","items","description","$$ref"]).call(na,ta)}),wo=mt("Markdown",!0),bo=mt("ModelCollapse"),Mo=mt("Model"),Ws=mt("Property"),sa=Ki&&Z.default.createElement("span",{className:"model-title"},Z.default.createElement("span",{className:"model-title__text"},Ki));return Z.default.createElement("span",{className:"model"},Z.default.createElement(bo,{title:sa,expanded:hn<=Vn,collapsedContent:"[...]"},"[",to.size?(0,we.default)(at=to.entrySeq()).call(at,function(Ma){var ta,na=(0,hl.default)(Ma,2),aa=na[0],Xs=na[1];return Z.default.createElement(Ws,{key:(0,o.default)(ta="".concat(aa,"-")).call(ta,Xs),propKey:aa,propVal:Xs,propClass:"property"})}):null,Li?Z.default.createElement(wo,{source:Li}):to.size?Z.default.createElement("div",{className:"markdown"}):null,Z.default.createElement("span",null,Z.default.createElement(Mo,(0,i_.default)({},this.props,{getConfigs:Ut,specPath:Mr.push("items"),name:null,schema:Fi,required:!1,depth:hn+1}))),"]"))}}]),Ct}(Z.Component),a2="property primitive",IW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at,dt,mt,Ut=this.props,Bt=Ut.schema,hn=Ut.getComponent,fr=Ut.name,rr=Ut.displayName,Mr=Ut.depth,Li=Ut.expandDepth,Fi=(0,Ut.getConfigs)().showExtensions;if(!Bt||!Bt.get)return Z.default.createElement("div",null);var Ki=Bt.get("type"),to=Bt.get("format"),wo=Bt.get("xml"),bo=Bt.get("enum"),Mo=Bt.get("title")||rr||fr,Ws=Bt.get("description"),sa=(0,zn.nX)(Bt),Ma=(0,_.default)(Bt).call(Bt,function(ha,Xa){var bs;return-1===(0,rt.default)(bs=["enum","type","format","description","$$ref"]).call(bs,Xa)}).filterNot(function(ha,Xa){return sa.has(Xa)}),ta=hn("Markdown",!0),na=hn("EnumModel"),aa=hn("Property"),Xs=hn("ModelCollapse"),ml=Mo&&Z.default.createElement("span",{className:"model-title"},Z.default.createElement("span",{className:"model-title__text"},Mo));return Z.default.createElement("span",{className:"model"},Z.default.createElement(Xs,{title:ml,expanded:Mr>=Li,collapsedContent:" ",hideSelfOnExpand:Li!==Mr},Z.default.createElement("span",{className:"prop"},fr&&Mr>1&&Z.default.createElement("span",{className:"prop-name"},Mo),Z.default.createElement("span",{className:"prop-type"},Ki),to&&Z.default.createElement("span",{className:"prop-format"},"($",to,")"),Ma.size?(0,we.default)(at=Ma.entrySeq()).call(at,function(ha){var Xa,bs=(0,hl.default)(ha,2),Oa=bs[0],Yl=bs[1];return Z.default.createElement(aa,{key:(0,o.default)(Xa="".concat(Oa,"-")).call(Xa,Yl),propKey:Oa,propVal:Yl,propClass:a2})}):null,Fi&&sa.size?(0,we.default)(dt=sa.entrySeq()).call(dt,function(ha){var Xa,bs=(0,hl.default)(ha,2),Oa=bs[0],Yl=bs[1];return Z.default.createElement(aa,{key:(0,o.default)(Xa="".concat(Oa,"-")).call(Xa,Yl),propKey:Oa,propVal:Yl,propClass:a2})}):null,Ws?Z.default.createElement(ta,{source:Ws}):null,wo&&wo.size?Z.default.createElement("span",null,Z.default.createElement("br",null),Z.default.createElement("span",{className:a2},"xml:"),(0,we.default)(mt=wo.entrySeq()).call(mt,function(ha){var Xa,bs=(0,hl.default)(ha,2),Oa=bs[0],Yl=bs[1];return Z.default.createElement("span",{key:(0,o.default)(Xa="".concat(Oa,"-")).call(Xa,Yl),className:a2},Z.default.createElement("br",null),"\xa0\xa0\xa0",Oa,": ",String(Yl))}).toArray()):null,bo&&Z.default.createElement(na,{value:bo,getComponent:hn}))))}}]),Ct}(Z.Component);const FW=function(Yn){var vn=Yn.propKey,Ct=Yn.propVal;return Z.default.createElement("span",{className:Yn.propClass},Z.default.createElement("br",null),vn,": ",String(Ct))};var kN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.onTryoutClick,Ut=at.onResetClick,Vn=at.isOAS3&&at.hasUserEditedBody;return Z.default.createElement("div",{className:Vn?"try-out btn-group":"try-out"},at.enabled?Z.default.createElement("button",{className:"btn try-out__btn cancel",onClick:at.onCancelClick},"Cancel"):Z.default.createElement("button",{className:"btn try-out__btn",onClick:dt},"Try it out "),Vn&&Z.default.createElement("button",{className:"btn try-out__btn reset",onClick:Ut},"Reset"))}}]),Ct}(Z.default.Component);(0,K.default)(kN,"defaultProps",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,onResetClick:Function.prototype,enabled:!1,hasUserEditedBody:!1,isOAS3:!1});var $N=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,mt=at.isSwagger2,Ut=at.isOAS3,Bt=at.alsoShow;return at.bypass?Z.default.createElement("div",null,this.props.children):mt&&Ut?Z.default.createElement("div",{className:"version-pragma"},Bt,Z.default.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},Z.default.createElement("div",null,Z.default.createElement("h3",null,"Unable to render this definition"),Z.default.createElement("p",null,Z.default.createElement("code",null,"swagger")," and ",Z.default.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),Z.default.createElement("p",null,"Supported version fields are ",Z.default.createElement("code",null,"swagger: ",'"2.0"')," and those that match ",Z.default.createElement("code",null,"openapi: 3.0.n")," (for example, ",Z.default.createElement("code",null,"openapi: 3.0.0"),").")))):mt||Ut?Z.default.createElement("div",null,this.props.children):Z.default.createElement("div",{className:"version-pragma"},Bt,Z.default.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},Z.default.createElement("div",null,Z.default.createElement("h3",null,"Unable to render this definition"),Z.default.createElement("p",null,"The provided definition does not specify a valid version field."),Z.default.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",Z.default.createElement("code",null,"swagger: ",'"2.0"')," and those that match ",Z.default.createElement("code",null,"openapi: 3.0.n")," (for example, ",Z.default.createElement("code",null,"openapi: 3.0.0"),")."))))}}]),Ct}(Z.default.PureComponent);(0,K.default)($N,"defaultProps",{alsoShow:null,children:null,bypass:!1});const LW=function(Yn){return Z.default.createElement("small",null,Z.default.createElement("pre",{className:"version"}," ",Yn.version," "))},kW=function(Yn){var vn=Yn.enabled,at=Yn.text;return Z.default.createElement("a",{className:"nostyle",onClick:vn?function(dt){return dt.preventDefault()}:null,href:vn?"#/".concat(Yn.path):null},Z.default.createElement("span",null,at))},$W=function(){return Z.default.createElement("div",null,Z.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",className:"svg-assets"},Z.default.createElement("defs",null,Z.default.createElement("symbol",{viewBox:"0 0 20 20",id:"unlocked"},Z.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"})),Z.default.createElement("symbol",{viewBox:"0 0 20 20",id:"locked"},Z.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"})),Z.default.createElement("symbol",{viewBox:"0 0 20 20",id:"close"},Z.default.createElement("path",{d:"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"})),Z.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow"},Z.default.createElement("path",{d:"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"})),Z.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow-down"},Z.default.createElement("path",{d:"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"})),Z.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow-up"},Z.default.createElement("path",{d:"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z"})),Z.default.createElement("symbol",{viewBox:"0 0 24 24",id:"jump-to"},Z.default.createElement("path",{d:"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"})),Z.default.createElement("symbol",{viewBox:"0 0 24 24",id:"expand"},Z.default.createElement("path",{d:"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"})))))};var HW=qo(5466),UW=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.errSelectors,mt=at.specSelectors,Ut=at.getComponent,Bt=Ut("SvgAssets"),hn=Ut("InfoContainer",!0),Vn=Ut("VersionPragmaFilter"),fr=Ut("operations",!0),rr=Ut("Models",!0),Mr=Ut("Row"),Li=Ut("Col"),Fi=Ut("errors",!0),Ki=Ut("ServersContainer",!0),to=Ut("SchemesContainer",!0),wo=Ut("AuthorizeBtnContainer",!0),bo=Ut("FilterContainer",!0),Mo=mt.isSwagger2(),Ws=mt.isOAS3(),sa=!mt.specStr(),Ma=mt.loadingStatus(),ta=null;if("loading"===Ma&&(ta=Z.default.createElement("div",{className:"info"},Z.default.createElement("div",{className:"loading-container"},Z.default.createElement("div",{className:"loading"})))),"failed"===Ma&&(ta=Z.default.createElement("div",{className:"info"},Z.default.createElement("div",{className:"loading-container"},Z.default.createElement("h4",{className:"title"},"Failed to load API definition."),Z.default.createElement(Fi,null)))),"failedConfig"===Ma){var na=dt.lastError(),aa=na?na.get("message"):"";ta=Z.default.createElement("div",{className:"info failed-config"},Z.default.createElement("div",{className:"loading-container"},Z.default.createElement("h4",{className:"title"},"Failed to load remote configuration."),Z.default.createElement("p",null,aa)))}if(!ta&&sa&&(ta=Z.default.createElement("h4",null,"No API definition provided.")),ta)return Z.default.createElement("div",{className:"swagger-ui"},Z.default.createElement("div",{className:"loading-container"},ta));var Xs=mt.servers(),ml=mt.schemes(),ha=Xs&&Xs.size,Xa=ml&&ml.size,bs=!!mt.securityDefinitions();return Z.default.createElement("div",{className:"swagger-ui"},Z.default.createElement(Bt,null),Z.default.createElement(Vn,{isSwagger2:Mo,isOAS3:Ws,alsoShow:Z.default.createElement(Fi,null)},Z.default.createElement(Fi,null),Z.default.createElement(Mr,{className:"information-container"},Z.default.createElement(Li,{mobile:12},Z.default.createElement(hn,null))),ha||Xa||bs?Z.default.createElement("div",{className:"scheme-container"},Z.default.createElement(Li,{className:"schemes wrapper",mobile:12},ha?Z.default.createElement(Ki,null):null,Xa?Z.default.createElement(to,null):null,bs?Z.default.createElement(wo,null):null)):null,Z.default.createElement(bo,null),Z.default.createElement(Mr,null,Z.default.createElement(Li,{mobile:12,desktop:12},Z.default.createElement(fr,null))),Z.default.createElement(Mr,null,Z.default.createElement(Li,{mobile:12,desktop:12},Z.default.createElement(rr,null)))))}}]),Ct}(Z.default.Component);const HN=(Yn=>{var vn={};return qo.d(vn,Yn),vn})({default:()=>gV()});var Mv={value:"",onChange:function(){},schema:{},keyName:"",required:!1,errors:(0,Dt.List)()},UN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){return(0,oe.default)(this,Ct),vn.apply(this,arguments)}return(0,ue.default)(Ct,[{key:"componentDidMount",value:function(){var at=this.props,dt=at.dispatchInitialValue,Ut=at.onChange;dt?Ut(at.value):!1===dt&&Ut("")}},{key:"render",value:function(){var at,dt=this.props,mt=dt.schema,Ut=dt.errors,Bt=dt.value,hn=dt.onChange,Vn=dt.getComponent,fr=dt.fn,rr=dt.disabled,Mr=mt&&mt.get?mt.get("format"):null,Li=mt&&mt.get?mt.get("type"):null,Ki=Li?Vn(Mr?(0,o.default)(at="JsonSchema_".concat(Li,"_")).call(at,Mr):"JsonSchema_".concat(Li),!1,{failSilently:!0}):Vn("JsonSchema_string");return Ki||(Ki=Vn("JsonSchema_string")),Z.default.createElement(Ki,(0,i_.default)({},this.props,{errors:Ut,fn:fr,getComponent:Vn,value:Bt,onChange:hn,schema:mt,disabled:rr}))}}]),Ct}(Z.Component);(0,K.default)(UN,"defaultProps",Mv);var BN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onChange",function(hn){var Vn=dt.props.schema&&"file"===dt.props.schema.get("type")?hn.target.files[0]:hn.target.value;dt.props.onChange(Vn,dt.props.keyName)}),(0,K.default)((0,qi.default)(dt),"onEnumChange",function(hn){return dt.props.onChange(hn)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.getComponent,mt=at.value,Ut=at.schema,Bt=at.errors,hn=at.required,Vn=at.description,fr=at.disabled,rr=Ut&&Ut.get?Ut.get("enum"):null,Mr=Ut&&Ut.get?Ut.get("format"):null,Li=Ut&&Ut.get?Ut.get("type"):null,Fi=Ut&&Ut.get?Ut.get("in"):null;if(mt||(mt=""),Bt=Bt.toJS?Bt.toJS():[],rr){var Ki=dt("Select");return Z.default.createElement(Ki,{className:Bt.length?"invalid":"",title:Bt.length?Bt:"",allowedValues:rr,value:mt,allowEmptyValue:!hn,disabled:fr,onChange:this.onEnumChange})}var to=fr||Fi&&"formData"===Fi&&!("FormData"in window),wo=dt("Input");return Li&&"file"===Li?Z.default.createElement(wo,{type:"file",className:Bt.length?"invalid":"",title:Bt.length?Bt:"",onChange:this.onChange,disabled:to}):Z.default.createElement(HN.default,{type:Mr&&"password"===Mr?"password":"text",className:Bt.length?"invalid":"",title:Bt.length?Bt:"",value:mt,minLength:0,debounceTimeout:350,placeholder:Vn,onChange:this.onChange,disabled:to})}}]),Ct}(Z.Component);(0,K.default)(BN,"defaultProps",Mv);var GN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(at,dt){var mt;return(0,oe.default)(this,Ct),mt=vn.call(this,at,dt),(0,K.default)((0,qi.default)(mt),"onChange",function(){mt.props.onChange(mt.state.value)}),(0,K.default)((0,qi.default)(mt),"onItemChange",function(Ut,Bt){mt.setState(function(hn){return{value:hn.value.set(Bt,Ut)}},mt.onChange)}),(0,K.default)((0,qi.default)(mt),"removeItem",function(Ut){mt.setState(function(Bt){return{value:Bt.value.delete(Ut)}},mt.onChange)}),(0,K.default)((0,qi.default)(mt),"addItem",function(){var Ut=_R(mt.state.value);mt.setState(function(){return{value:Ut.push((0,zn.xi)(mt.state.schema.get("items"),!1,{includeWriteOnly:!0}))}},mt.onChange)}),(0,K.default)((0,qi.default)(mt),"onEnumChange",function(Ut){mt.setState(function(){return{value:Ut}},mt.onChange)}),mt.state={value:_R(at.value),schema:at.schema},mt}return(0,ue.default)(Ct,[{key:"UNSAFE_componentWillReceiveProps",value:function(at){var dt=_R(at.value);dt!==this.state.value&&this.setState({value:dt}),at.schema!==this.state.schema&&this.setState({schema:at.schema})}},{key:"render",value:function(){var at,dt=this,mt=this.props,Ut=mt.getComponent,Bt=mt.required,hn=mt.schema,Vn=mt.errors,fr=mt.fn,rr=mt.disabled;Vn=Vn.toJS?Vn.toJS():(0,xe.default)(Vn)?Vn:[];var Mr,Li,Fi=(0,_.default)(Vn).call(Vn,function(Xs){return"string"==typeof Xs}),Ki=(0,we.default)(at=(0,_.default)(Vn).call(Vn,function(Xs){return void 0!==Xs.needRemove})).call(at,function(Xs){return Xs.error}),to=this.state.value,wo=!!(to&&to.count&&to.count()>0),bo=hn.getIn(["items","enum"]),Mo=hn.getIn(["items","type"]),Ws=hn.getIn(["items","format"]),sa=hn.get("items"),Ma=!1,ta="file"===Mo||"string"===Mo&&"binary"===Ws;if(Mo&&Ws?Mr=Ut((0,o.default)(Li="JsonSchema_".concat(Mo,"_")).call(Li,Ws)):"boolean"!==Mo&&"array"!==Mo&&"object"!==Mo||(Mr=Ut("JsonSchema_".concat(Mo))),Mr||ta||(Ma=!0),bo){var na=Ut("Select");return Z.default.createElement(na,{className:Vn.length?"invalid":"",title:Vn.length?Vn:"",multiple:!0,value:to,disabled:rr,allowedValues:bo,allowEmptyValue:!Bt,onChange:this.onEnumChange})}var aa=Ut("Button");return Z.default.createElement("div",{className:"json-schema-array"},wo?(0,we.default)(to).call(to,function(Xs,ml){var ha,Xa=(0,Dt.fromJS)((0,Xd.default)((0,we.default)(ha=(0,_.default)(Vn).call(Vn,function(bs){return bs.index===ml})).call(ha,function(bs){return bs.error})));return Z.default.createElement("div",{key:ml,className:"json-schema-form-item"},ta?Z.default.createElement(pR,{value:Xs,onChange:function(bs){return dt.onItemChange(bs,ml)},disabled:rr,errors:Xa,getComponent:Ut}):Ma?Z.default.createElement(fR,{value:Xs,onChange:function(bs){return dt.onItemChange(bs,ml)},disabled:rr,errors:Xa}):Z.default.createElement(Mr,(0,i_.default)({},dt.props,{value:Xs,onChange:function(bs){return dt.onItemChange(bs,ml)},disabled:rr,errors:Xa,schema:sa,getComponent:Ut,fn:fr})),rr?null:Z.default.createElement(aa,{className:"btn btn-sm json-schema-form-item-remove ".concat(Ki.length?"invalid":null),title:Ki.length?Ki:"",onClick:function(){return dt.removeItem(ml)}}," - "))}):null,rr?null:Z.default.createElement(aa,{className:"btn btn-sm json-schema-form-item-add ".concat(Fi.length?"invalid":null),title:Fi.length?Fi:"",onClick:this.addItem},"Add ",Mo?"".concat(Mo," "):"","item"))}}]),Ct}(Z.PureComponent);(0,K.default)(GN,"defaultProps",Mv);var fR=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onChange",function(hn){dt.props.onChange(hn.target.value,dt.props.keyName)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.value,mt=at.errors,Ut=at.description,Bt=at.disabled;return dt||(dt=""),mt=mt.toJS?mt.toJS():[],Z.default.createElement(HN.default,{type:"text",className:mt.length?"invalid":"",title:mt.length?mt:"",value:dt,minLength:0,debounceTimeout:350,placeholder:Ut,onChange:this.onChange,disabled:Bt})}}]),Ct}(Z.Component);(0,K.default)(fR,"defaultProps",Mv);var pR=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onFileChange",function(hn){dt.props.onChange(hn.target.files[0],dt.props.keyName)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,mt=at.errors,Ut=at.disabled,Bt=(0,at.getComponent)("Input"),hn=Ut||!("FormData"in window);return Z.default.createElement(Bt,{type:"file",className:mt.length?"invalid":"",title:mt.length?mt:"",onChange:this.onFileChange,disabled:hn})}}]),Ct}(Z.Component);(0,K.default)(pR,"defaultProps",Mv);var YN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at,dt;(0,oe.default)(this,Ct);for(var mt=arguments.length,Ut=new Array(mt),Bt=0;Bt<mt;Bt++)Ut[Bt]=arguments[Bt];return dt=vn.call.apply(vn,(0,o.default)(at=[this]).call(at,Ut)),(0,K.default)((0,qi.default)(dt),"onEnumChange",function(hn){return dt.props.onChange(hn)}),dt}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,dt=at.getComponent,mt=at.value,Ut=at.errors,Bt=at.schema,hn=at.required,Vn=at.disabled;Ut=Ut.toJS?Ut.toJS():[];var fr=Bt&&Bt.get?Bt.get("enum"):null,rr=!fr||!hn,Mr=!fr&&(0,Dt.fromJS)(["true","false"]),Li=dt("Select");return Z.default.createElement(Li,{className:Ut.length?"invalid":"",title:Ut.length?Ut:"",value:String(mt),disabled:Vn,allowedValues:fr||Mr,allowEmptyValue:rr,onChange:this.onEnumChange})}}]),Ct}(Z.Component);(0,K.default)(YN,"defaultProps",Mv);var BW=function(Yn){return(0,we.default)(Yn).call(Yn,function(vn){var Ct,dt="string"==typeof vn?vn:"string"==typeof vn.error?vn.error:null;if(!(void 0!==vn.propKey?vn.propKey:vn.index)&&dt)return dt;for(var mt=vn.error,Ut="/".concat(vn.propKey);"object"===(0,n.default)(mt);){var Bt=void 0!==mt.propKey?mt.propKey:mt.index;if(void 0===Bt||(Ut+="/".concat(Bt),!mt.error))break;mt=mt.error}return(0,o.default)(Ct="".concat(Ut,": ")).call(Ct,mt)})},jN=function(Yn){(0,xo.default)(Ct,Yn);var vn=(0,$o.default)(Ct);function Ct(){var at;return(0,oe.default)(this,Ct),at=vn.call(this),(0,K.default)((0,qi.default)(at),"onChange",function(dt){at.props.onChange(dt)}),(0,K.default)((0,qi.default)(at),"handleOnChange",function(dt){at.onChange(dt.target.value)}),at}return(0,ue.default)(Ct,[{key:"render",value:function(){var at=this.props,mt=at.value,Ut=at.errors,Bt=at.disabled,hn=(0,at.getComponent)("TextArea");return Ut=Ut.toJS?Ut.toJS():(0,xe.default)(Ut)?Ut:[],Z.default.createElement("div",null,Z.default.createElement(hn,{className:(0,cf.default)({invalid:Ut.length}),title:Ut.length?BW(Ut).join(", "):"",value:(0,zn.Pz)(mt),disabled:Bt,onChange:this.handleOnChange}))}}]),Ct}(Z.PureComponent);function _R(Yn){return Dt.List.isList(Yn)?Yn:(0,xe.default)(Yn)?(0,Dt.fromJS)(Yn):(0,Dt.List)()}function GW(){return[So.default,_i.default,pi.default,ho.default,ai.default,Cr.default,Wn.default,Yi.default,{components:{App:cr,authorizationPopup:Yr,authorizeBtn:li,AuthorizeBtnContainer:eo,authorizeOperationBtn:_a,auths:ps,AuthItem:Fl,authError:Gl,oauth2:n_,apiKeyAuth:Ou,basicAuth:Pc,clear:co,liveResponse:Co,InitializedInput:dW,info:mW,InfoContainer:gW,JumpToPath:vW,onlineValidatorBadge:os.Z,operations:ks,operation:fo,OperationSummary:xs,OperationSummaryMethod:Bu,OperationSummaryPath:Hl,highlightCode:b_,responses:wm,response:lg,ResponseExtension:gm,responseBody:qC,parameters:dS,parameterRow:r2,execute:o2,headers:Ml,errors:mc,contentType:Cv,overview:lW,footer:yW,FilterContainer:EW,ParamBody:FN,curl:bW,schemes:TW,SchemesContainer:CW,modelExample:OW,ModelWrapper:AW,ModelCollapse:LN,Model:DW.Z,Models:RW,EnumModel:xW,ObjectModel:PW,ArrayModel:NW,PrimitiveModel:IW,Property:FW,TryItOutButton:kN,Markdown:HW.Z,BaseLayout:UW,VersionPragmaFilter:$N,VersionStamp:LW,OperationExt:ol,OperationExtRow:cc,ParameterExt:t2,ParameterIncludeEmpty:fS,OperationTag:Ns,OperationContainer:Lt,DeepLink:kW,InfoUrl:hW,InfoBasePath:fW,SvgAssets:$W,Example:np,ExamplesSelect:yd,ExamplesSelectValueRetainer:Y_}},{components:t},Kn.default,{components:i},Nn.default,Zi.default,us.default,Zo.default,pa.default,lo.default,(0,va.default)()]}(0,K.default)(jN,"defaultProps",Mv);var YW=qo(7451);function zN(){return[GW,YW.default]}var jW=qo(5308),zW=!0,VW="ga7e23b5",ZW="4.12.0",WW="Fri, 03 Jun 2022 17:07:59 GMT";function hR(Yn){var vn,Ct,at;Jn.Z.versions=Jn.Z.versions||{},Jn.Z.versions.swaggerUi={version:ZW,gitRevision:VW,gitDirty:zW,buildTimestamp:WW};var dt={dom_id:null,domNode:null,spec:{},url:"",urls:null,layout:"BaseLayout",docExpansion:"list",maxDisplayedTags:null,filter:null,validatorUrl:"https://validator.swagger.io/validator",oauth2RedirectUrl:(0,o.default)(vn=(0,o.default)(Ct="".concat(window.location.protocol,"//")).call(Ct,window.location.host)).call(vn,window.location.pathname.substring(0,(0,l.default)(at=window.location.pathname).call(at,"/")),"/oauth2-redirect.html"),persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:function(Fi){return Fi},responseInterceptor:function(Fi){return Fi},showMutatedRequest:!0,defaultModelRendering:"example",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:"cURL (bash)",syntax:"bash"},curl_powershell:{title:"cURL (PowerShell)",syntax:"powershell"},curl_cmd:{title:"cURL (CMD)",syntax:"bash"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:["get","put","post","delete","options","head","patch","trace"],queryConfigEnabled:!1,presets:[zN],plugins:[],pluginsOptions:{pluginLoadType:"legacy"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:"agate"}},mt=Yn.queryConfigEnabled?(0,zn.UG)():{},Ut=Yn.domNode;delete Yn.domNode;var Bt=G()({},dt,Yn,mt),hn={system:{configs:Bt.configs},plugins:Bt.presets,pluginsOptions:Bt.pluginsOptions,state:G()({layout:{layout:Bt.layout,filter:(0,_.default)(Bt)},spec:{spec:"",url:Bt.url},requestSnippets:Bt.requestSnippets},Bt.initialState)};if(Bt.initialState)for(var Vn in Bt.initialState)Object.prototype.hasOwnProperty.call(Bt.initialState,Vn)&&void 0===Bt.initialState[Vn]&&delete hn.state[Vn];var fr=new $r(hn);fr.register([Bt.plugins,function(){return{fn:Bt.fn,components:Bt.components,state:Bt.state}}]);var rr=fr.getSystem(),Mr=function(Fi){var Ki=rr.specSelectors.getLocalConfig?rr.specSelectors.getLocalConfig():{},to=G()({},Ki,Bt,Fi||{},mt);if(Ut&&(to.domNode=Ut),fr.setConfigs(to),rr.configsActions.loaded(),null!==Fi&&(!mt.url&&"object"===(0,n.default)(to.spec)&&(0,v.default)(to.spec).length?(rr.specActions.updateUrl(""),rr.specActions.updateLoadingStatus("success"),rr.specActions.updateSpec((0,O.default)(to.spec))):rr.specActions.download&&to.url&&!to.urls&&(rr.specActions.updateUrl(to.url),rr.specActions.download(to.url))),to.domNode)rr.render(to.domNode,"App");else if(to.dom_id){var wo=document.querySelector(to.dom_id);rr.render(wo,"App")}else null===to.dom_id||null===to.domNode||console.error("Skipped rendering: no `dom_id` or `domNode` was specified");return rr},Li=mt.config||Bt.configUrl;return Li&&rr.specActions&&rr.specActions.getConfigByUrl?(rr.specActions.getConfigByUrl({url:Li,loadRemoteConfig:!0,requestInterceptor:Bt.requestInterceptor,responseInterceptor:Bt.responseInterceptor},Mr),rr):Mr()}hR.presets={apis:zN},hR.plugins=jW.default;const JW=hR})();var yV=EN.Z;let EV=(()=>{class t{ngOnInit(){yV({url:window.location.origin+"/docs/openapi.json",dom_id:"#swagger-ui",layout:"BaseLayout"})}}return t.\u0275fac=function(n){return new(n||t)},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-api-docs"]],decls:1,vars:0,consts:[["id","swagger-ui",1,"apiDocs"]],template:function(n,o){1&n&&e._UZ(0,"div",0)},styles:[".apiDocs[_ngcontent-%COMP%]{background:#f8f9fa;font-size:18px!important;margin-top:-48px!important}"]}),t})();var aR=s(83357),SV=s(4268),SN=s(45510);let bN=(()=>{class t{constructor(n,o){this.router=n,this.authStorageService=o}canActivate(n,o){return!(this.authStorageService.isLoggedIn()&&!this.authStorageService.isSSO()&&this.authStorageService.getPwdUpdateRequired()&&(this.router.navigate(["/login-change-password"],{queryParams:{returnUrl:o.url}}),1))}canActivateChild(n,o){return this.canActivate(n,o)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(Ee.F0),e.LFG(Do.j))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();var lR=s(4222),W0=s(54462);let TN=(()=>{class t{constructor(n){this.authStorageService=n}canActivate(){if(!this.authStorageService.isSSO())return!0;throw new Yy.mM}canActivateChild(){return this.canActivate()}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(Do.j))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();const bV=["crushInfoTabs"],TV=["crushDeletionBtn"],CV=["ecpInfoTabs"],MV=["ecpDeletionBtn"];function OV(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",18),e.SDv(1,19),e.qZA())}function AV(t,i){if(1&t&&(e.ynx(0),e.YNc(1,OV,2,0,"cd-alert-panel",17),e.BQk()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("ngIf",!n.editing)}}function DV(t,i){1&t&&(e.TgZ(0,"span",20),e.SDv(1,21),e.qZA())}function RV(t,i){1&t&&(e.TgZ(0,"span",20),e.SDv(1,22),e.qZA())}function xV(t,i){1&t&&(e.TgZ(0,"div",9)(1,"label",24),e.SDv(2,25),e.qZA(),e.TgZ(3,"div",12)(4,"select",26)(5,"option",27),e.SDv(6,28),e.qZA(),e.TgZ(7,"option",29),e.SDv(8,30),e.qZA()()()())}function wV(t,i){1&t&&(e.TgZ(0,"span",20),e.SDv(1,34),e.qZA())}function PV(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",9)(1,"label",31),e.SDv(2,32),e.qZA(),e.TgZ(3,"div",12)(4,"input",33),e.NdJ("focus",function(l){e.CHM(n);const _=e.oxw(3);return e.KtG(_.labelFocus.next(l.target.value))})("click",function(l){e.CHM(n);const _=e.oxw(3);return e.KtG(_.labelClick.next(l.target.value))}),e.qZA(),e.YNc(5,wV,2,0,"span",14),e.qZA()()}if(2&t){e.oxw(2);const n=e.MAs(2),o=e.oxw();e.xp6(4),e.Q6J("ngbTypeahead",o.searchLabels),e.xp6(1),e.Q6J("ngIf",o.form.showError("label",n,"required"))}}function NV(t,i){if(1&t&&(e.TgZ(0,"div",9)(1,"label",35),e.SDv(2,36),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"cd-select-badges",37),e.qZA()()),2&t){const n=e.oxw(3);e.xp6(4),e.Q6J("data",n.form.controls.hosts.value)("options",n.hosts.options)("messages",n.hosts.messages)}}function IV(t,i){if(1&t&&(e.ynx(0),e.YNc(1,xV,9,0,"div",23),e.YNc(2,PV,6,2,"div",23),e.YNc(3,NV,5,3,"div",23),e.BQk()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("ngIf",!n.editing),e.xp6(1),e.Q6J("ngIf","label"===n.form.controls.placement.value&&!n.editing),e.xp6(1),e.Q6J("ngIf","hosts"===n.form.controls.placement.value&&!n.editing)}}function FV(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(4,"div",4)(5,"div",5),e.SDv(6,6),e.ALo(7,"titlecase"),e.ALo(8,"upperFirst"),e.qZA(),e.YNc(9,AV,2,1,"ng-container",7),e.TgZ(10,"div",8)(11,"div",9)(12,"label",10),e.SDv(13,11),e.qZA(),e.TgZ(14,"div",12),e._UZ(15,"input",13),e.YNc(16,DV,2,0,"span",14),e.YNc(17,RV,2,0,"span",14),e.qZA()(),e.YNc(18,IV,4,3,"ng-container",7),e.qZA(),e.TgZ(19,"div",15)(20,"cd-form-button-panel",16),e.NdJ("submitActionEvent",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.submit())}),e.ALo(21,"titlecase"),e.ALo(22,"upperFirst"),e.qZA()()()()()}if(2&t){const n=i.ngIf,o=e.MAs(3),l=e.oxw();e.xp6(1),e.Q6J("formGroup",l.form),e.xp6(7),e.pQV(e.lcZ(7,9,l.action))(e.lcZ(8,11,l.resource)),e.QtT(6),e.xp6(1),e.Q6J("ngIf",!n.available),e.xp6(7),e.Q6J("ngIf",l.form.showError("name",o,"required")),e.xp6(1),e.Q6J("ngIf",l.form.showError("name",o,"pattern")),e.xp6(1),e.Q6J("ngIf",n.available),e.xp6(2),e.Q6J("form",l.form)("submitText",e.lcZ(21,13,l.action)+" "+e.lcZ(22,15,l.resource))}}let CN=(()=>{class t extends $c.E{constructor(n,o,l,_,v,O,P,G){super(),this.router=n,this.taskWrapperService=o,this.orchService=l,this.formBuilder=_,this.actionLabels=v,this.hostService=O,this.cephfsService=P,this.route=G,this.labelFocus=new Di.xQ,this.labelClick=new Di.xQ,this.icons=Rr.P,this.searchLabels=K=>(0,Pi.T)(K.pipe((0,cs.b)(200),(0,Yo.x)()),this.labelFocus,this.labelClick.pipe((0,y.h)(()=>!this.typeahead.isPopupOpen()))).pipe((0,Ec.U)(oe=>this.labels.filter(ue=>ue.toLowerCase().indexOf(oe.toLowerCase())>-1).slice(0,10))),this.editing=this.router.url.startsWith(`/cephfs/${yr.MQ.EDIT}`),this.action=this.editing?this.actionLabels.EDIT:this.actionLabels.CREATE,this.resource="File System",this.hosts={options:[],messages:new Rd.a({empty:"There are no hosts.",filter:"Filter hosts"})},this.createForm()}createForm(){this.orchService.status().subscribe(n=>{this.hasOrchestrator=n.available}),this.form=this.formBuilder.group({name:new rn.NI("",{validators:[rn.kI.pattern(/^[a-zA-Z][.A-Za-z0-9_-]+$/),rn.kI.required]}),placement:["hosts"],hosts:[[]],label:[null,[De.h.requiredIf({placement:"label",unmanaged:!1})]],unmanaged:[!1]})}ngOnInit(){if(this.editing)this.route.params.subscribe(n=>{this.currentVolumeName=n.name,this.form.get("name").setValue(this.currentVolumeName)});else{const n=new Sc.E(()=>{});this.hostService.list(n.toParams(),"false").subscribe(o=>{const l=[];Xe().forEach(o,_=>{if(Xe().get(_,"sources.orchestrator",!1)){const v=new Ds.$(!1,Xe().get(_,"hostname"),"");l.push(v)}}),this.hosts.options=[...l]}),this.hostService.getLabels().subscribe(o=>{this.labels=o})}this.orchStatus$=this.orchService.status()}submit(){const n=this.form.get("name").value,o="cephfs";if(this.editing)this.taskWrapperService.wrapTaskAroundCall({task:new Fr.R(`${o}/${yr.MQ.EDIT}`,{volumeName:n}),call:this.cephfsService.rename(this.currentVolumeName,n)}).subscribe({error:()=>{this.form.setErrors({cdSubmitButton:!0})},complete:()=>{this.router.navigate([o])}});else{let l=this.form.getRawValue();const _={placement:{},unmanaged:l.unmanaged};switch(l.placement){case"hosts":l.hosts.length>0&&(_.placement.hosts=l.hosts);break;case"label":_.placement.label=l.label}const v=this;this.taskWrapperService.wrapTaskAroundCall({task:new Fr.R(`${o}/${yr.MQ.CREATE}`,{volumeName:n}),call:this.cephfsService.create(this.form.get("name").value,_)}).subscribe({error(){v.form.setErrors({cdSubmitButton:!0})},complete:()=>{this.router.navigate([o])}})}}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Ee.F0),e.Y36(Gr.P),e.Y36(td),e.Y36(Qi.O),e.Y36(yr.p4),e.Y36(Wa.x),e.Y36(kn),e.Y36(Ee.gz))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-cephfs-form"]],viewQuery:function(n,o){if(1&n&&(e.Gf(bV,5),e.Gf(TV,5),e.Gf(CV,5),e.Gf(MV,5),e.Gf(yi.dR,5)),2&n){let l;e.iGM(l=e.CRH())&&(o.crushInfoTabs=l.first),e.iGM(l=e.CRH())&&(o.crushDeletionBtn=l.first),e.iGM(l=e.CRH())&&(o.ecpInfoTabs=l.first),e.iGM(l=e.CRH())&&(o.ecpDeletionBtn=l.first),e.iGM(l=e.CRH())&&(o.typeahead=l.first)}},features:[e.qOj],decls:2,vars:3,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue;return i="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",n="Name",o="Name...",l="Orchestrator is not configured. Deploy MDS daemons manually after creating the volume.",_="This field is required!",v="File System name should start with a letter and can only contain letters, numbers, '.', '-' or '_'",O="Placement",P="Hosts",G="Label",K="Label",oe="This field is required.",ue="Hosts",[["class","cd-col-form",4,"ngIf"],[1,"cd-col-form"],["novalidate","",3,"formGroup"],["frm","ngForm","formDir","ngForm"],[1,"card"],[1,"card-header"],i,[4,"ngIf"],[1,"card-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],n,[1,"cd-col-form-input"],["id","name","name","name","type","text","placeholder",o,"formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["type","info","class","m-3","spacingClass","mt-3",4,"ngIf"],["type","info","spacingClass","mt-3",1,"m-3"],l,[1,"invalid-feedback"],_,v,["class","form-group row",4,"ngIf"],["for","placement",1,"cd-col-form-label"],O,["id","placement","formControlName","placement",1,"form-select"],["value","hosts"],P,["value","label"],G,["for","label",1,"cd-col-form-label"],K,["id","label","type","text","formControlName","label",1,"form-control",3,"ngbTypeahead","focus","click"],oe,["for","hosts",1,"cd-col-form-label"],ue,["id","hosts",3,"data","options","messages"]]},template:function(n,o){1&n&&(e.YNc(0,FV,23,17,"div",0),e.ALo(1,"async")),2&n&&e.Q6J("ngIf",e.lcZ(1,1,o.orchStatus$))},dependencies:[f.O5,bc.m,Zu.G,rl.p,Tu.U,st.o,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u,yi.dR,f.Ov,f.rS,Cu.m]}),t})();var LV=s(94458),$V=s(51307);let uR=(()=>{class t extends h_.S{constructor(n,o){super(),this.http=n,this.summaryService=o,this.baseURL="api/cluster/upgrade",this.upgradableServiceTypes=["mgr","mon","crash","osd","mds","rgw","rbd-mirror","cephfs-mirror","iscsi","nfs"]}list(){return this.http.get(this.baseURL).pipe((0,Ec.U)(n=>this.versionAvailableForUpgrades(n)))}versionAvailableForUpgrades(n){let o="";this.summaryService.subscribe(_=>{o=_.version.replace("ceph version ","").split("-")[0]});const l=n.versions.filter(_=>{const v=o.split("."),O=_.split(".");return v[0]===O[0]&&(v[1]<O[1]||v[2]<O[2])});return n.versions=l.sort(),n}start(n,o){return this.http.post(`${this.baseURL}/start`,{image:o,version:n})}pause(){return this.http.put(`${this.baseURL}/pause`,null)}resume(){return this.http.put(`${this.baseURL}/resume`,null)}stop(){return this.http.put(`${this.baseURL}/stop`,null)}status(){return this.http.get(`${this.baseURL}/status`)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN),e.LFG(zh.J))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})();const HV=["class","component"];function UV(t,i){1&t&&(e.TgZ(0,"cd-alert-panel",11),e.SDv(1,12),e.qZA())}function BV(t,i){1&t&&(e.TgZ(0,"option",22),e.SDv(1,23),e.qZA())}function GV(t,i){1&t&&(e.TgZ(0,"option",24),e.SDv(1,25),e.qZA()),2&t&&e.Q6J("ngValue",null)}function YV(t,i){1&t&&(e.TgZ(0,"option",24),e.SDv(1,26),e.qZA()),2&t&&e.Q6J("ngValue",null)}function jV(t,i){if(1&t&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&t){const n=i.$implicit;e.Q6J("value",n),e.xp6(1),e.Oqu(n)}}function zV(t,i){1&t&&(e.TgZ(0,"span",28),e.SDv(1,29),e.qZA())}const VV=function(t){return{required:t}};function ZV(t,i){if(1&t&&(e.TgZ(0,"div",13)(1,"label",14),e.SDv(2,15),e.qZA(),e.TgZ(3,"div",16)(4,"select",17),e.YNc(5,BV,2,0,"option",18),e.YNc(6,GV,2,1,"option",19),e.YNc(7,YV,2,1,"option",19),e.YNc(8,jV,2,2,"option",20),e.qZA(),e.YNc(9,zV,2,0,"span",21),e.qZA()()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(6,VV,!n.showImageField)),e.xp6(4),e.Q6J("ngIf",null===n.versions),e.xp6(1),e.Q6J("ngIf",null!==n.versions&&0===n.versions.length),e.xp6(1),e.Q6J("ngIf",null!==n.versions&&n.versions.length>0),e.xp6(1),e.Q6J("ngForOf",n.versions),e.xp6(1),e.Q6J("ngIf",n.upgradeForm.showError("availableVersions",o,"required"))}}function WV(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",13)(1,"div",30)(2,"div",31)(3,"input",32),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.useImage())}),e.qZA(),e.TgZ(4,"label",33),e.SDv(5,34),e.qZA()()()()}}function JV(t,i){1&t&&(e.TgZ(0,"span",28),e.SDv(1,38),e.qZA())}function QV(t,i){if(1&t&&(e.TgZ(0,"div",13)(1,"label",35),e.SDv(2,36),e.qZA(),e.TgZ(3,"div",16),e._UZ(4,"input",37),e.YNc(5,JV,2,0,"span",21),e.qZA()()),2&t){const n=e.oxw(),o=e.MAs(7);e.xp6(5),e.Q6J("ngIf",n.upgradeForm.showError("customImageName",o,"required"))}}let KV=(()=>{class t{constructor(n,o,l,_,v){this.actionLabels=n,this.authStorageService=o,this.activeModal=l,this.upgradeService=_,this.notificationService=v,this.icons=Rr.P,this.showImageField=!1,this.permission=this.authStorageService.getPermissions().configOpt}ngOnInit(){if(this.upgradeForm=new fu.d({availableVersions:new rn.NI(null,[rn.kI.required]),useImage:new rn.NI(!1),customImageName:new rn.NI(null)}),void 0===this.versions){this.upgradeForm.get("availableVersions").clearValidators();const o=this.upgradeForm.get("customImageName");o.setValidators(rn.kI.required),o.updateValueAndValidity()}}startUpgrade(){const n=this.upgradeForm.getValue("availableVersions"),o=this.upgradeForm.getValue("customImageName");this.upgradeService.start(n,o).subscribe({next:()=>{this.notificationService.show(Ho.k.success,"Started upgrading the cluster")},error:l=>{this.upgradeForm.setErrors({cdSubmitButton:!0}),this.notificationService.show(Ho.k.error,"Failed to start the upgrade",l)},complete:()=>{this.activeModal.close()}})}useImage(){this.showImageField=!this.showImageField;const n=this.upgradeForm.get("availableVersions"),o=this.upgradeForm.get("customImageName");this.showImageField?(n.disable(),n.clearValidators(),o.setValidators(rn.kI.required),o.updateValueAndValidity()):(n.enable(),n.setValidators(rn.kI.required),n.updateValueAndValidity(),o.clearValidators())}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yr.p4),e.Y36(Do.j),e.Y36(yi.Kz),e.Y36(uR),e.Y36(Ui.g))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-upgrade-start-modal",8,"component"]],attrs:HV,decls:15,vars:8,consts:function(){let i,n,o,l,_,v,O,P,G,K;return i="Upgrade Cluster",n="Make sure to put the correct image. Passing an incorrect image can lead the cluster into an undesired state.",o="New Version",l="Loading...",_="-- No version available --",v="-- Select a version --",O="This field is required!",P="Use image",G="Image",K="This field is required!",[[3,"modalRef"],[1,"modal-title"],i,[1,"modal-content"],["name","upgradeForm","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],["type","warning","spacingClass","mb-3",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["type","warning","spacingClass","mb-3"],n,[1,"form-group","row"],["for","availableVersions",1,"cd-col-form-label",3,"ngClass"],o,[1,"cd-col-form-input"],["id","availableVersions","name","availableVersions","formControlName","availableVersions",1,"form-select"],["ngValue","null",4,"ngIf"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],["ngValue","null"],l,[3,"ngValue"],_,v,[3,"value"],[1,"invalid-feedback"],O,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","useImage","name","useImage","formControlName","useImage",1,"custom-control-input",3,"click"],["for","useImage",1,"custom-control-label"],P,["for","customImageName",1,"cd-col-form-label","required"],G,["type","text","id","customImageName","name","customImageName","formControlName","customImageName",1,"form-control"],K]},template:function(n,o){1&n&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1)(2),e.SDv(3,2),e.BQk(),e._uU(4,"\xa0 "),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6),e.YNc(9,UV,2,0,"cd-alert-panel",7),e.YNc(10,ZV,10,8,"div",8),e.YNc(11,WV,6,0,"div",8),e.YNc(12,QV,6,1,"div",8),e.qZA(),e.TgZ(13,"div",9)(14,"cd-form-button-panel",10),e.NdJ("submitActionEvent",function(){return o.startUpgrade()}),e.qZA()()(),e.BQk(),e.qZA()),2&n&&(e.Q6J("modalRef",o.activeModal),e.xp6(6),e.Q6J("formGroup",o.upgradeForm),e.xp6(3),e.Q6J("ngIf",o.showImageField),e.xp6(1),e.Q6J("ngIf",o.versions),e.xp6(1),e.Q6J("ngIf",o.versions),e.xp6(1),e.Q6J("ngIf",o.showImageField||!o.versions),e.xp6(2),e.Q6J("form",o.upgradeForm)("submitText",o.actionLabels.START_UPGRADE))},dependencies:[f.mk,f.sg,f.O5,al.z,Zu.G,rl.p,st.o,za.b,Va.P,Os.V,rn._Y,rn.YN,rn.Kr,rn.Fj,rn.Wl,rn.EJ,rn.JJ,rn.JL,rn.sg,rn.u]}),t})();var XV=s(23240);const J0=function(t){return[t]};function qV(t,i){if(1&t&&(e.TgZ(0,"h5"),e.tHW(1,31),e._UZ(2,"i",32),e.N_p(),e.qZA()),2&t){const n=e.oxw(5);e.xp6(2),e.Q6J("ngClass",e.VKq(2,J0,n.icons.spinner)),e.pQV(null==n.executingTasks?null:n.executingTasks.progress),e.QtT(1)}}const KC=function(t,i){return[t,i]};function eZ(t,i){if(1&t&&(e.TgZ(0,"h5"),e.tHW(1,33),e._UZ(2,"i",32),e.N_p(),e.qZA()),2&t){const n=e.oxw(5);e.xp6(2),e.Q6J("ngClass",e.WLB(2,KC,n.icons.spin,n.icons.spinner)),e.pQV(null==n.executingTasks?null:n.executingTasks.progress),e.QtT(1)}}function tZ(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",27),e.YNc(2,qV,3,4,"h5",16),e.TgZ(3,"a",28),e.SDv(4,29),e.qZA()(),e.YNc(5,eZ,3,5,"ng-template",null,30,e.W1O),e.BQk()),2&t){const n=e.MAs(6),o=e.oxw().ngIf;e.xp6(2),e.Q6J("ngIf",o.is_paused)("ngIfElse",n)}}function nZ(t,i){if(1&t&&(e.TgZ(0,"cd-card",26),e.YNc(1,tZ,7,2,"ng-container",16),e.qZA()),2&t){const n=i.ngIf;e.oxw();const o=e.MAs(31);e.xp6(1),e.Q6J("ngIf",n.in_progress)("ngIfElse",o)}}function rZ(t,i){if(1&t&&(e.TgZ(0,"li")(1,"span",35),e.ALo(2,"healthColor"),e._uU(3),e.qZA(),e._uU(4),e.qZA()),2&t){const n=i.$implicit;e.xp6(1),e.ekj("health-warn-description","HEALTH_WARN"===n.severity),e.Q6J("ngStyle",e.lcZ(2,5,n.severity)),e.xp6(2),e.hij(" ",n.type,""),e.xp6(1),e.hij(": ",n.summary.message," ")}}function iZ(t,i){if(1&t&&(e.TgZ(0,"ul"),e.YNc(1,rZ,5,7,"li",34),e.qZA()),2&t){const n=e.oxw().ngIf;e.xp6(1),e.Q6J("ngForOf",n.health.checks)}}function oZ(t,i){1&t&&e._UZ(0,"i",38)}function sZ(t,i){if(1&t&&(e.TgZ(0,"div",36),e.ALo(1,"healthColor"),e._uU(2),e.ALo(3,"uppercase"),e.ALo(4,"healthLabel"),e.YNc(5,oZ,1,0,"i",37),e.qZA()),2&t){const n=e.oxw().ngIf,o=e.MAs(10);e.Q6J("ngStyle",e.lcZ(1,4,n.health.status))("ngbPopover",o),e.xp6(2),e.hij(" ",e.lcZ(3,6,e.lcZ(4,8,n.health.status))," "),e.xp6(3),e.Q6J("ngIf","HEALTH_OK"!==(null==n.health?null:n.health.status))}}function aZ(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"div",35),e.ALo(2,"healthColor"),e._uU(3),e.ALo(4,"uppercase"),e.ALo(5,"healthLabel"),e.qZA(),e.BQk()),2&t){const n=e.oxw().ngIf;e.xp6(1),e.Q6J("ngStyle",e.lcZ(2,2,n.health.status)),e.xp6(2),e.hij(" ",e.lcZ(4,4,e.lcZ(5,6,n.health.status))," ")}}function lZ(t,i){if(1&t&&e._UZ(0,"i",39),2&t){const n=e.oxw(3);e.Q6J("ngClass",e.VKq(1,J0,n.icons.success))}}function uZ(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"dt",40),e.SDv(2,43),e.qZA(),e.TgZ(3,"dd",42),e._uU(4),e.qZA(),e.TgZ(5,"dt",40),e.SDv(6,44),e.qZA(),e.TgZ(7,"dd",42),e._uU(8),e.qZA(),e.BQk()),2&t){const n=i.ngIf;e.xp6(4),e.Oqu(n.image),e.xp6(4),e.Oqu(n.registry)}}function cZ(t,i){if(1&t&&(e.TgZ(0,"dl",21)(1,"dt",40),e.SDv(2,41),e.qZA(),e.TgZ(3,"dd",42),e._uU(4),e.qZA(),e.YNc(5,uZ,9,2,"ng-container",16),e.ALo(6,"async"),e.qZA()),2&t){const n=i.ngIf,o=e.oxw(3),l=e.MAs(8);e.xp6(4),e.Oqu(n),e.xp6(1),e.Q6J("ngIf",e.lcZ(6,3,o.info$))("ngIfElse",l)}}function dZ(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"legend",22),e.SDv(2,45),e.qZA(),e.TgZ(3,"div"),e._UZ(4,"cd-table",46,47),e.qZA(),e.BQk()),2&t){const n=i.ngIf,o=e.oxw(3);e.xp6(4),e.Q6J("data",n)("columns",o.columns)("limit",5)}}function fZ(t,i){if(1&t){const n=e.EpF();e.ynx(0),e.TgZ(1,"div",49),e.ALo(2,"mgrSummary"),e.TgZ(3,"button",50),e.NdJ("click",function(){e.CHM(n);const l=e.oxw().ngIf,_=e.oxw(4);return e.KtG(_.upgradeNow(l.versions[l.versions.length-1]))}),e.SDv(4,51),e.ALo(5,"mgrSummary"),e.qZA()(),e.TgZ(6,"a",52),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(5);return e.KtG(l.startUpgradeModal())}),e.SDv(7,53),e.qZA(),e.BQk()}if(2&t){const n=e.oxw().ngIf,o=e.oxw(2).ngIf;e.xp6(1),e.Q6J("ngbTooltip",e.lcZ(2,3,o.mgr_map).total<=1?"To upgrade, you need minimum 2 mgr daemons.":""),e.xp6(2),e.Q6J("disabled",e.lcZ(5,5,o.mgr_map).total<=1),e.xp6(2),e.pQV(n.versions[n.versions.length-1]),e.QtT(4)}}function pZ(t,i){if(1&t&&(e.TgZ(0,"div",12),e.YNc(1,fZ,8,7,"ng-container",16),e.qZA()),2&t){const n=i.ngIf;e.oxw(4);const o=e.MAs(2);e.xp6(1),e.Q6J("ngIf",n.versions.length>0)("ngIfElse",o)}}function _Z(t,i){if(1&t&&(e.YNc(0,pZ,2,2,"div",48),e.ALo(1,"async")),2&t){const n=e.oxw(3),o=e.MAs(6);e.Q6J("ngIf",e.lcZ(1,2,n.info$))("ngIfElse",o)}}function hZ(t,i){if(1&t&&(e.ynx(0),e.YNc(1,nZ,2,2,"cd-card",10),e.ALo(2,"async"),e.TgZ(3,"cd-card",11)(4,"div",12)(5,"h5"),e._uU(6),e.qZA()()(),e.TgZ(7,"cd-card",13)(8,"div",12),e.YNc(9,iZ,2,1,"ng-template",null,14,e.W1O),e.YNc(11,sZ,6,10,"ng-template",null,15,e.W1O),e.YNc(13,aZ,6,8,"ng-container",16),e.qZA()(),e.TgZ(14,"cd-card",17)(15,"div",12)(16,"h5"),e.YNc(17,lZ,1,3,"i",18),e.ALo(18,"mgrSummary"),e._uU(19),e.ALo(20,"mgrSummary"),e.qZA()()(),e.TgZ(21,"div",19),e.YNc(22,cZ,7,5,"dl",20),e.ALo(23,"async"),e.TgZ(24,"div",21),e.YNc(25,dZ,6,3,"ng-container",9),e.ALo(26,"async"),e.qZA()(),e.TgZ(27,"legend",22),e.SDv(28,23),e.qZA(),e._UZ(29,"cd-logs",24),e.YNc(30,_Z,2,4,"ng-template",null,25,e.W1O),e.BQk()),2&t){const n=i.ngIf,o=e.MAs(12),l=e.oxw(2),_=e.MAs(4);e.xp6(1),e.Q6J("ngIf",e.lcZ(2,15,l.upgradeStatus$)),e.xp6(5),e.Oqu(l.version),e.xp6(7),e.Q6J("ngIf",!(null!=n.health&&null!=n.health.checks&&n.health.checks.length))("ngIfElse",o),e.xp6(4),e.Q6J("ngIf",e.lcZ(18,17,n.mgr_map).total>1)("ngIfElse",_),e.xp6(2),e.hij(" ",e.lcZ(20,19,n.mgr_map).total," "),e.xp6(3),e.Q6J("ngIf",e.lcZ(23,21,l.fsid$)),e.xp6(3),e.Q6J("ngIf",e.lcZ(26,23,l.daemons$)),e.xp6(4),e.Q6J("showAuditLogs",!1)("showDaemonLogs",!1)("showNavLinks",!1)("showFilterTools",!1)("showDownloadCopyButton",!1)("scrollable",!0)}}function mZ(t,i){if(1&t&&(e.TgZ(0,"div",8),e.YNc(1,hZ,32,25,"ng-container",9),e.ALo(2,"async"),e.qZA()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngIf",e.lcZ(2,1,n.healthData$))}}function gZ(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"span",54),e.tHW(1,55),e._UZ(2,"i",39),e.N_p(),e.qZA(),e.TgZ(3,"a",56),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.startUpgradeModal())}),e.SDv(4,57),e.qZA()}if(2&t){const n=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(1,J0,n.icons.success))}}function vZ(t,i){if(1&t&&e._UZ(0,"i",58),2&t){const n=e.oxw();e.Q6J("ngClass",e.VKq(1,J0,n.icons.warning))}}function yZ(t,i){if(1&t&&(e.TgZ(0,"div",12)(1,"button",59),e.tHW(2,60),e._UZ(3,"i",32),e.N_p(),e.qZA()()),2&t){const n=e.oxw(2);e.xp6(1),e.Q6J("disabled",!0),e.xp6(2),e.Q6J("ngClass",e.WLB(2,KC,n.icons.spin,n.icons.spinner))}}function EZ(t,i){if(1&t&&e.YNc(0,yZ,4,5,"div",48),2&t){const n=e.oxw(),o=e.MAs(10);e.Q6J("ngIf",!n.errorMessage)("ngIfElse",o)}}function SZ(t,i){if(1&t&&(e.TgZ(0,"div",21)(1,"span",62),e.tHW(2,63),e._UZ(3,"i",32),e.N_p(),e.qZA()()),2&t){const n=e.oxw(2);e.xp6(3),e.Q6J("ngClass",e.WLB(1,KC,n.icons.spin,n.icons.spinner))}}function bZ(t,i){if(1&t&&e.YNc(0,SZ,4,4,"div",61),2&t){const n=e.oxw(),o=e.MAs(12);e.Q6J("ngIf",!n.errorMessage)("ngIfElse",o)}}function TZ(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"div",12)(1,"span",64),e.tHW(2,65),e._UZ(3,"i",32),e.N_p(),e.qZA(),e.TgZ(4,"a",56),e.NdJ("click",function(){e.CHM(n);const l=e.oxw();return e.KtG(l.startUpgradeModal())}),e.SDv(5,66),e.qZA()()}if(2&t){const n=e.oxw();e.xp6(3),e.Q6J("ngClass",e.VKq(2,J0,n.icons.danger)),e.pQV(n.errorMessage),e.QtT(2)}}function CZ(t,i){if(1&t&&(e.TgZ(0,"span",67),e.tHW(1,68),e._UZ(2,"i",32),e.N_p(),e.qZA()),2&t){const n=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(1,J0,n.icons.danger))}}function MZ(t,i){if(1&t&&(e.TgZ(0,"div",27)(1,"h5"),e.tHW(2,69),e._UZ(3,"i",32),e.N_p(),e.qZA(),e.TgZ(4,"a",28),e.SDv(5,70),e.qZA()()),2&t){const n=e.oxw();e.xp6(3),e.Q6J("ngClass",e.WLB(2,KC,n.icons.spin,n.icons.spinner)),e.pQV(null==n.executingTasks?null:n.executingTasks.progress),e.QtT(2)}}let OZ=(()=>{class t{constructor(n,o,l,_,v,O,P,G){this.modalService=n,this.summaryService=o,this.upgradeService=l,this.healthService=_,this.daemonService=v,this.notificationService=O,this.router=P,this.refreshIntervalService=G,this.interval=new bd.w,this.columns=[],this.icons=Rr.P,this.subject=new ys.t}ngOnInit(){this.upgradeStatus$=this.subject.pipe((0,Ul.w)(()=>this.upgradeService.status()),(0,mu.d)(1)),this.columns=[{name:"Daemon name",prop:"daemon_name",flexGrow:1,filterable:!0},{name:"Version",prop:"version",flexGrow:1,filterable:!0}],this.summaryService.subscribe(n=>{const o=n.version.replace("ceph version ","").split("-");this.version=o[0],this.executingTasks=n.executing_tasks.filter(l=>l.name.includes("progress/Upgrade"))[0]}),this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.fetchStatus()}),this.info$=this.upgradeService.list().pipe((0,c1.b)(n=>this.upgradableVersions=n.versions),function kV(t,i,n,o){n&&"function"!=typeof n&&(o=n);const l="function"==typeof n?n:void 0,_=new ys.t(t,i,o);return v=>(0,LV.O)(()=>_,l)(v)}(1),(0,$V.x)(),(0,eu.K)(n=>(n.preventDefault(),this.errorMessage="Not retrieving upgrades",this.notificationService.show(Ho.k.error,this.errorMessage,n.error.detail||n.error.message),(0,Ps.of)(null)))),this.healthData$=this.healthService.getMinimalHealth(),this.daemons$=this.daemonService.list(this.upgradeService.upgradableServiceTypes),this.fsid$=this.healthService.getClusterFsid()}startUpgradeModal(){this.modalRef=this.modalService.show(KV,{versions:this.upgradableVersions})}fetchStatus(){this.subject.next()}upgradeNow(n){this.upgradeService.start(n).subscribe({error:o=>{this.notificationService.show(Ho.k.error,"Failed to start the upgrade",o)},complete:()=>{this.notificationService.show(Ho.k.success,"Started upgrading the cluster"),this.fetchStatus(),this.router.navigate(["/upgrade/progress"])}})}ngOnDestroy(){this.interval?.unsubscribe()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(ca.Z),e.Y36(zh.J),e.Y36(uR),e.Y36(f0.z),e.Y36(Vd),e.Y36(Ui.g),e.Y36(Ee.F0),e.Y36(X1.s))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-upgrade"]],decls:15,vars:1,consts:function(){let i,n,o,l,_,v,O,P,G,K,oe,ue,pe,ye,Ue,xe,ke,we,Z,Ft,Dt,Yt,ln,$n,nn,Jn,zn;return i="New Version",n="New Version",o="Current Version",l="Current Version",_="Cluster Status",v="Cluster Status",O="MGR Count",P="MGR Count",G="Cluster logs",K="View Details...",oe="" + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " Upgrade is paused " + "\ufffd0\ufffd" + "%",ue="" + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " Upgrade in progress " + "\ufffd0\ufffd" + "% ",pe="Cluster FSID",ye="Release Image",Ue="Registry",xe="Daemon versions",ke="Upgrade to " + "\ufffd0\ufffd" + "",we="Select another version...",Z="" + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " Cluster is up-to-date ",Ft="Upgrade using custom image...",Dt="Checking for upgrades " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + "",Yt="Fetching registry informations " + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + "",ln="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " " + "\ufffd0\ufffd" + " ",$n="Upgrade using custom image...",nn="" + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " Failed to fetch registry informations ",Jn="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " Upgrade in progress " + "\ufffd0\ufffd" + "%",zn="View Details...",[["class","row h-25",4,"cdScope"],["noUpgradesAvailable",""],["warningIcon",""],["checkingForUpgradeStatus",""],["loadingDetails",""],["upgradeStatusError",""],["upgradeInfoError",""],["upgradeProgress",""],[1,"row","h-25"],[4,"ngIf"],["class","col-sm-3 px-3 d-flex","cardTitle",i,"aria-label",n,"id","newVersionAvailable",4,"ngIf"],["cardTitle",o,"aria-label",l,"id","currentVersion",1,"col-sm-3","px-3","d-flex"],[1,"d-flex","flex-column","justify-content-center","align-items-center"],["cardTitle",_,"aria-label",v,"id","clusterStatus",1,"col-sm-3","px-3","d-flex"],["healthChecks",""],["healthWarningAndError",""],[4,"ngIf","ngIfElse"],["cardTitle",O,"aria-label",P,"id","mgrCount",1,"col-sm-3","px-3","d-flex"],["class","text-success",3,"ngClass",4,"ngIf","ngIfElse"],[1,"d-flex","mt-3"],["class","w-50",4,"ngIf"],[1,"w-50"],[1,"cd-header"],G,["defaultTab","cluster-logs",3,"showAuditLogs","showDaemonLogs","showNavLinks","showFilterTools","showDownloadCopyButton","scrollable"],["upgradeStatusTpl",""],["cardTitle",i,"aria-label",n,"id","newVersionAvailable",1,"col-sm-3","px-3","d-flex"],[1,"d-flex","flex-column","justify-content-center","align-items-center","mt-2"],["routerLink","/upgrade/progress",1,"mt-2","link-primary","mb-2"],K,["inProgress",""],oe,[3,"ngClass"],ue,[4,"ngFor","ngForOf"],[3,"ngStyle"],["popoverClass","info-card-popover-cluster-status",1,"info-card-content-clickable","mt-1",3,"ngStyle","ngbPopover"],["class","fa fa-exclamation-triangle",4,"ngIf"],[1,"fa","fa-exclamation-triangle"],[1,"text-success",3,"ngClass"],[1,"bold","mt-5"],pe,[1,"mt-2"],ye,Ue,xe,["selectionType","single","columnMode","flex",3,"data","columns","limit"],["daemonsTable",""],["class","d-flex flex-column justify-content-center align-items-center",4,"ngIf","ngIfElse"],[3,"ngbTooltip"],["id","upgrade","aria-label","Upgrade now",1,"btn","btn-accent","mt-2",3,"disabled","click"],ke,[1,"mt-2","link-primary","mb-2",3,"click"],we,["id","no-upgrades-available",1,"mt-1"],Z,[1,"link-primary","mb-2",3,"click"],Ft,["title","To upgrade, you need minimum 2 mgr daemons.",1,"text-warning",3,"ngClass"],["id","upgrade","aria-label","Upgrade now",1,"btn","btn-accent","mt-2","mb-4",3,"disabled"],Dt,["class","w-50",4,"ngIf","ngIfElse"],[1,"text-info","justify-content-center","align-items-center"],Yt,["id","upgrade-status-error",1,"text-danger","mt-2","mb-4"],ln,$n,[1,"text-danger","justify-content-center","align-items-center"],nn,Jn,zn]},template:function(n,o){1&n&&(e.YNc(0,mZ,3,3,"div",0),e.YNc(1,gZ,5,3,"ng-template",null,1,e.W1O),e.YNc(3,vZ,1,3,"ng-template",null,2,e.W1O),e.YNc(5,EZ,1,2,"ng-template",null,3,e.W1O),e.YNc(7,bZ,1,2,"ng-template",null,4,e.W1O),e.YNc(9,TZ,6,4,"ng-template",null,5,e.W1O),e.YNc(11,CZ,3,3,"ng-template",null,6,e.W1O),e.YNc(13,MZ,6,5,"ng-template",null,7,e.W1O)),2&n&&e.Q6J("cdScope","configOpt")},dependencies:[f.mk,f.sg,f.O5,f.PC,ib.A,zo.a,st.o,XV.w,Ee.rH,yi._L,yi.o8,Dm,f.Ov,f.gd,p0,eE,ub.c]}),t})();const AZ=function(t,i,n){return[t,i,n]};function DZ(t,i){if(1&t&&(e.ynx(0),e.TgZ(1,"h3",23),e.tHW(2,24),e._UZ(3,"i",25),e.N_p(),e.qZA(),e.TgZ(4,"h3",26),e._uU(5),e.qZA(),e.TgZ(6,"h5",17),e.SDv(7,27),e.qZA(),e.BQk()),2&t){const n=e.oxw().ngIf,o=e.oxw();e.xp6(3),e.Q6J("ngClass",e.kEZ(3,AZ,o.icons.large,o.icons.spin,o.icons.spinner)),e.xp6(2),e.hij(" ",null==o.executingTask?null:o.executingTask.description," "),e.xp6(2),e.pQV(n.which),e.QtT(7)}}function RZ(t,i){if(1&t&&(e.ynx(0),e._uU(1," Finished upgrading: "),e.TgZ(2,"span",28),e._uU(3),e.qZA(),e.BQk()),2&t){const n=e.oxw().ngIf;e.xp6(3),e.hij(" ",n.services_complete," ")}}function xZ(t,i){if(1&t&&(e.TgZ(0,"h5",26),e.SDv(1,29),e.qZA()),2&t){const n=e.oxw().ngIf;e.xp6(1),e.pQV(n.message),e.QtT(1)}}function wZ(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",30),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.pauseUpgrade())}),e.SDv(1,31),e.qZA()}}function PZ(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",32),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.resumeUpgrade())}),e.SDv(1,33),e.qZA()}}function NZ(t,i){if(1&t){const n=e.EpF();e.TgZ(0,"button",34),e.NdJ("click",function(){e.CHM(n);const l=e.oxw(2);return e.KtG(l.stopUpgradeModal())}),e.SDv(1,35),e.qZA()}}function IZ(t,i){if(1&t&&(e.TgZ(0,"div",5),e.YNc(1,DZ,8,7,"ng-container",6),e.TgZ(2,"div",7)(3,"div",8),e.YNc(4,RZ,4,1,"ng-container",9),e.TgZ(5,"div",10),e._UZ(6,"ngb-progressbar",11),e.qZA(),e.TgZ(7,"p",12)(8,"span",13),e._uU(9),e.qZA()()(),e.TgZ(10,"h4",14),e.SDv(11,15),e.qZA(),e.YNc(12,xZ,2,1,"h5",16),e.TgZ(13,"div",17)(14,"button",18),e.SDv(15,19),e.qZA(),e.YNc(16,wZ,2,0,"button",20),e.YNc(17,PZ,2,0,"button",21),e.YNc(18,NZ,2,0,"button",22),e.qZA()()()),2&t){const n=i.ngIf,o=e.oxw(),l=e.MAs(6);e.xp6(1),e.Q6J("ngIf",n.in_progress&&!n.is_paused)("ngIfElse",l),e.xp6(3),e.Q6J("ngIf",n.services_complete.length>0),e.xp6(2),e.Q6J("value",null==o.executingTask?null:o.executingTask.progress)("striped",!0)("animated",!n.is_paused),e.xp6(3),e.hij(" ",(null==o.executingTask?null:o.executingTask.progress)||0," % "),e.xp6(2),e.pQV(n.progress),e.QtT(11),e.xp6(1),e.Q6J("ngIf",n.in_progress),e.xp6(4),e.Q6J("ngIf",n.in_progress&&!n.is_paused),e.xp6(1),e.Q6J("ngIf",n.in_progress&&n.is_paused),e.xp6(1),e.Q6J("ngIf",n.in_progress)}}const FZ=function(t,i){return[t,i]};function LZ(t,i){if(1&t&&(e.TgZ(0,"h3",17),e._UZ(1,"i",25),e.qZA(),e.TgZ(2,"h3",36),e._uU(3),e.qZA()),2&t){const n=e.oxw();e.xp6(1),e.Q6J("ngClass",e.WLB(2,FZ,n.icons.large,n.icons.spinner)),e.xp6(2),e.hij(" ",null==n.executingTask?null:n.executingTask.description," ")}}let kZ=(()=>{class t{constructor(n,o,l,_,v,O,P){this.authStorageService=n,this.upgradeService=o,this.notificationService=l,this.modalService=_,this.summaryService=v,this.router=O,this.refreshIntervalService=P,this.icons=Rr.P,this.interval=new bd.w,this.subject=new ys.t,this.permission=this.authStorageService.getPermissions().configOpt}ngOnInit(){this.upgradeStatus$=this.subject.pipe((0,Ul.w)(()=>this.upgradeService.status()),(0,c1.b)(n=>{n.in_progress||this.router.navigate(["/upgrade"])}),(0,mu.d)(1)),this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.fetchStatus()}),this.summaryService.subscribe(n=>{this.executingTask=n.executing_tasks.filter(o=>o.name.includes("progress/Upgrade"))[0]})}pauseUpgrade(){this.upgradeService.pause().subscribe({error:n=>{this.notificationService.show(Ho.k.error,"Failed to pause the upgrade",n)},complete:()=>{this.notificationService.show(Ho.k.success,"The upgrade is paused"),this.fetchStatus()}})}fetchStatus(){this.subject.next()}resumeUpgrade(n=!1){this.upgradeService.resume().subscribe({error:o=>{this.notificationService.show(Ho.k.error,"Failed to resume the upgrade",o)},complete:()=>{this.fetchStatus(),this.notificationService.show(Ho.k.success,"Upgrade is resumed"),n&&this.modalRef.close()}})}stopUpgradeModal(){this.pauseUpgrade(),this.modalRef=this.modalService.show(Go.M,{itemDescription:"Upgrade",actionDescription:"stop",submitAction:()=>this.stopUpgrade(),callBackAtionObservable:()=>this.resumeUpgrade(!0)})}stopUpgrade(){this.modalRef.close(),this.upgradeService.stop().subscribe({error:n=>{this.notificationService.show(Ho.k.error,"Failed to stop the upgrade",n)},complete:()=>{this.notificationService.show(Ho.k.success,"The upgrade is stopped"),this.router.navigate(["/upgrade"])}})}ngOnDestroy(){this.interval?.unsubscribe()}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(Do.j),e.Y36(uR),e.Y36(Ui.g),e.Y36(ca.Z),e.Y36(zh.J),e.Y36(Ee.F0),e.Y36(X1.s))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-upgrade-progress"]],decls:7,vars:9,consts:function(){let i,n,o,l,_,v,O,P,G;return i="Cluster logs",n="" + "\ufffd0\ufffd" + "",o="Back",l="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + "",_="" + "\ufffd0\ufffd" + "",v=" " + "\ufffd0\ufffd" + " ",O="Pause",P="Resume",G="Stop",[["class","d-flex flex-column justify-content-center align-items-center bold",4,"ngIf"],[1,"cd-header"],i,["defaultTab","cluster-logs",3,"showAuditLogs","showDaemonLogs","showNavLinks","showFilterTools","showDownloadCopyButton","scrollable"],["upgradePaused",""],[1,"d-flex","flex-column","justify-content-center","align-items-center","bold"],[4,"ngIf","ngIfElse"],[1,"w-50","row","h-100","d-flex","justify-content-center","align-items-center","mt-4"],[1,"text-center","w-75"],[4,"ngIf"],[1,"mt-2"],["type","info",3,"value","striped","animated"],[1,"card-text","text-muted"],[1,"float-end"],[1,"text-center","m-2"],n,["class","text-center mt-2",4,"ngIf"],[1,"text-center","mt-3"],["aria-label","Go back","routerLink","/upgrade",1,"btn","btn-light"],o,["class","btn btn-light m-2","aria-label","Pause Upgrade",3,"click",4,"ngIf"],["class","btn btn-light m-2","aria-label","Resume Upgrade",3,"click",4,"ngIf"],["class","btn btn-danger","aria-label","Stop Upgrade",3,"click",4,"ngIf"],[1,"text-center"],l,[3,"ngClass"],[1,"text-center","mt-2"],_,[1,"text-success"],v,["aria-label","Pause Upgrade",1,"btn","btn-light","m-2",3,"click"],O,["aria-label","Resume Upgrade",1,"btn","btn-light","m-2",3,"click"],P,["aria-label","Stop Upgrade",1,"btn","btn-danger",3,"click"],G,[1,"text-center","mt-3","mb-4"]]},template:function(n,o){1&n&&(e.YNc(0,IZ,19,12,"div",0),e.ALo(1,"async"),e.TgZ(2,"legend",1),e.SDv(3,2),e.qZA(),e._UZ(4,"cd-logs",3),e.YNc(5,LZ,4,5,"ng-template",null,4,e.W1O)),2&n&&(e.Q6J("ngIf",e.lcZ(1,7,o.upgradeStatus$)),e.xp6(4),e.Q6J("showAuditLogs",!1)("showDaemonLogs",!1)("showNavLinks",!1)("showFilterTools",!1)("showDownloadCopyButton",!1)("scrollable",!0))},dependencies:[f.mk,f.O5,st.o,Ee.rH,yi.Ly,Dm,f.Ov]}),t})(),MN=(()=>{class t extends HE{resolve(n){const o=[],l=n.queryParams.fromLink||null;let _="";switch(l){case"/monitor":_="Monitors";break;case"/hosts":_="Hosts"}return o.push({text:"Cluster",path:null}),o.push({text:_,path:l}),o.push({text:"Performance Counters",path:""}),o}}return t.\u0275fac=function(){let i;return function(o){return(i||(i=e.n5z(t)))(o||t)}}(),t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac}),t})(),ON=(()=>{class t extends HE{resolve(n){const o=n.params.name;return[{text:`${Xe().startCase(o)}/Edit`,path:o}]}}return t.\u0275fac=function(){let i;return function(o){return(i||(i=e.n5z(t)))(o||t)}}(),t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac}),t})();const $Z=[{path:"",redirectTo:"dashboard",pathMatch:"full"},{path:"api-docs",component:EV},{path:"",component:Sn,canActivate:[SN.P,bN],canActivateChild:[SN.P,bN],children:[{path:"dashboard",component:Ib},{path:"error",component:GR},{path:"expand-cluster",component:U1,canActivate:[W0.P],data:{moduleStatusGuardConfig:{uiApiPath:"orchestrator",redirectTo:"dashboard",backend:"cephadm"},breadcrumbs:"Expand Cluster"}},{path:"hosts",component:On,data:{breadcrumbs:"Cluster/Hosts"},children:[{path:yr.MQ.ADD,component:q_,outlet:"modal"}]},{path:"ceph-users",component:SV.c,data:{breadcrumbs:"Cluster/Ceph Users",resource:"api.cluster.user@1.0"}},{path:"cluster/user/create",component:aR.U,data:{breadcrumbs:"Cluster/Ceph Users/Create",resource:"api.cluster.user@1.0"}},{path:"cluster/user/import",component:aR.U,data:{breadcrumbs:"Cluster/Ceph Users/Import",resource:"api.cluster.user@1.0"}},{path:"cluster/user/edit",component:aR.U,data:{breadcrumbs:"Cluster/Ceph Users/Edit",resource:"api.cluster.user@1.0"}},{path:"monitor",component:W1,data:{breadcrumbs:"Cluster/Monitors"}},{path:"services",component:Kf,canActivate:[W0.P],data:{moduleStatusGuardConfig:{uiApiPath:"orchestrator",redirectTo:"error",section:"orch",section_info:"Orchestrator",header:"Orchestrator is not available"},breadcrumbs:"Cluster/Services"},children:[{path:yr.MQ.CREATE,component:Ug,outlet:"modal"},{path:`${yr.MQ.EDIT}/:type/:name`,component:Ug,outlet:"modal"}]},{path:"inventory",canActivate:[W0.P],component:Ku,data:{moduleStatusGuardConfig:{uiApiPath:"orchestrator",redirectTo:"error",section:"orch",section_info:"Orchestrator",header:"Orchestrator is not available"},breadcrumbs:"Cluster/Physical Disks"}},{path:"osd",data:{breadcrumbs:"Cluster/OSDs"},children:[{path:"",component:PS},{path:yr.MQ.CREATE,component:uf,data:{breadcrumbs:yr.Qn.CREATE}}]},{path:"configuration",data:{breadcrumbs:"Cluster/Configuration"},children:[{path:"",component:op},{path:"edit/:name",component:ka,data:{breadcrumbs:yr.Qn.EDIT}}]},{path:"crush-map",component:gS,data:{breadcrumbs:"Cluster/CRUSH map"}},{path:"logs",component:Dm,data:{breadcrumbs:"Cluster/Logs"}},{path:"telemetry",component:z2,data:{breadcrumbs:"Telemetry configuration"}},{path:"monitoring",data:{breadcrumbs:"Cluster/Alerts"},children:[{path:"",redirectTo:"active-alerts",pathMatch:"full"},{path:"active-alerts",data:{breadcrumbs:"Active Alerts"},component:R2},{path:"alerts",data:{breadcrumbs:"Alerts"},component:N2},{path:"silences",data:{breadcrumbs:"Silences"},children:[{path:"",component:KS},{path:yr.MQ.CREATE,component:s1,data:{breadcrumbs:`${yr.Qn.CREATE} Silence`}},{path:`${yr.MQ.CREATE}/:id`,component:s1,data:{breadcrumbs:yr.Qn.CREATE}},{path:`${yr.MQ.EDIT}/:id`,component:s1,data:{breadcrumbs:yr.Qn.EDIT}},{path:`${yr.MQ.RECREATE}/:id`,component:s1,data:{breadcrumbs:yr.Qn.RECREATE}}]}]},{path:"upgrade",canActivate:[W0.P],data:{moduleStatusGuardConfig:{uiApiPath:"orchestrator",redirectTo:"error",backend:"cephadm",section:"orch",section_info:"Orchestrator",header:"Orchestrator is not available"},breadcrumbs:"Cluster/Upgrade"},children:[{path:"",component:OZ},{path:"progress",component:kZ,data:{breadcrumbs:"Progress"}}]},{path:"perf_counters/:type/:id",component:dT,data:{breadcrumbs:MN}},{path:"mgr-modules",data:{breadcrumbs:"Cluster/Manager Modules"},children:[{path:"",component:Qm},{path:"edit/:name",component:Ly,data:{breadcrumbs:ON}}]},{path:"pool",data:{breadcrumbs:"Pools"},loadChildren:()=>Promise.all([s.e(25),s.e(119)]).then(s.bind(s,22119)).then(t=>t.RoutedPoolModule)},{path:"block",data:{breadcrumbs:!0,text:"Block",path:null},loadChildren:()=>s.e(25).then(s.bind(s,39025)).then(t=>t.RoutedBlockModule)},{path:"cephfs",canActivate:[lR.T],data:{breadcrumbs:"File Systems"},children:[{path:"",component:ac},{path:yr.MQ.CREATE,component:CN,data:{breadcrumbs:yr.Qn.CREATE}},{path:`${yr.MQ.EDIT}/:name`,component:CN,data:{breadcrumbs:yr.Qn.EDIT}}]},{path:"rgw",canActivate:[lR.T,W0.P],data:{moduleStatusGuardConfig:{uiApiPath:"rgw",redirectTo:"error",section:"rgw",section_info:"Object Gateway",header:"The Object Gateway Service is not configured"},breadcrumbs:!0,text:"Object Gateway",path:null},loadChildren:()=>s.e(803).then(s.bind(s,77803)).then(t=>t.RoutedRgwModule)},{path:"user-management",data:{breadcrumbs:"User management",path:null},loadChildren:()=>Promise.resolve().then(s.bind(s,13140)).then(t=>t.RoutedAuthModule)},{path:"user-profile",data:{breadcrumbs:"User profile",path:null},children:[{path:yr.MQ.EDIT,component:pT,canActivate:[TN],data:{breadcrumbs:yr.Qn.EDIT}}]},{path:"nfs",canActivateChild:[lR.T,W0.P],data:{moduleStatusGuardConfig:{uiApiPath:"nfs-ganesha",redirectTo:"error",section:"nfs-ganesha",section_info:"NFS GANESHA",header:"NFS-Ganesha is not configured"},breadcrumbs:"NFS"},children:[{path:"",component:NR},{path:yr.MQ.CREATE,component:aT,data:{breadcrumbs:yr.Qn.CREATE}},{path:`${yr.MQ.EDIT}/:cluster_id/:export_id`,component:aT,data:{breadcrumbs:yr.Qn.EDIT}}]}]},{path:"",component:jR,children:[{path:"login",component:bT},{path:"login-change-password",component:vT,canActivate:[TN]}]},{path:"",component:y0,children:[{path:"**",redirectTo:"/error"}]}];let XC=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({providers:[ON,MN],imports:[Ee.Bz.forRoot($Z,{useHash:!0,preloadingStrategy:Ee.wm}),Ee.Bz]}),t})(),HZ=(()=>{class t{constructor(n,o){n.autoClose="outside",n.container="body",n.placement="bottom",o.container="body"}}return t.\u0275fac=function(n){return new(n||t)(e.Y36(yi.AX),e.Y36(yi.xI))},t.\u0275cmp=e.Xpm({type:t,selectors:[["cd-root"]],decls:1,vars:0,template:function(n,o){1&n&&e._UZ(0,"router-outlet")},dependencies:[Ee.lC]}),t})();var ag=s(44466);let UZ=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[f.ez,ag.m,XC,tn.m9,Jl.xc,yi.Oz,rn.u5,rn.UX,yi.ZS,yi.HK]}),t})();var AN=s(66265),DN=s(370);let BZ=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[XC,f.ez,rn.UX,ag.m,yi.Oz]}),t})(),GZ=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({providers:[yi.Kz],imports:[f.ez,AN.B,yi.Oz,ag.m,Ee.Bz,rn.u5,rn.UX,yi.HK,BZ,yi.ZS,yi.UL,Jl.xc,DN.t,yi.M,yi.dT,yi.XC,If.b,yi.ZQ]}),t})();var YZ=s(46767);let jZ=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[DN.t,f.ez,yi.Oz,ag.m,tn.m9,Ee.Bz,yi.dT,rn.u5,rn.UX,YZ.d]}),t})(),zZ=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[rn.UX,Ee.Bz,ag.m,yi.Oz,f.ez,yi.ZS,yi.HK]}),t})(),VZ=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[f.ez,GZ,jZ,AN.B,UZ,zZ,ag.m]}),t})();var ZZ=s(13140);let RN=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[f.ez,ZZ.AuthModule,yi.lQ,yi.XC,XC,ag.m,Xm.t,Ee.Bz]}),t})(),WZ=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t}),t.\u0275inj=e.cJS({imports:[Qg.uh.forRoot(),f.ez,RN,yi.XC,Ee.Bz,ag.m,RN]}),t})();var JZ=s(51295);let QZ=(()=>{class t{constructor(n,o,l){this.router=n,this.authStorageService=o,this.notificationService=l}intercept(n,o){const l=n.headers.get("Accept");let _;return _=l&&l.startsWith("application/vnd.ceph.api.v")?n.clone():n.clone({setHeaders:{Accept:JZ.T.cdVersionHeader("1","0")}}),o.handle(_).pipe((0,eu.K)(v=>{if(v instanceof m.UA){let O;switch(v.status){case 400:const P=new Fr.R,G=v.error.task;Xe().isPlainObject(G)?(G.metadata.component=G.metadata.component||v.error.component,P.name=G.name,P.metadata=G.metadata):P.metadata=v.error,P.success=!1,P.exception=v.error,O=this.notificationService.notifyTask(P);break;case 401:this.authStorageService.remove(),this.router.navigate(["/login"]);break;case 403:this.router.navigate(["error"],{state:{message:"Sorry, you don\u2019t have permission to view this page or resource.",header:"Access Denied",icon:"fa fa-lock",source:"forbidden"}});break;default:O=this.prepareNotification(v)}v.preventDefault=()=>{this.notificationService.cancel(O)},v.ignoreStatusCode=function(P){this.status===P&&this.preventDefault()}}return(0,kb._)(v)}))}prepareNotification(n){return this.notificationService.show(()=>{let o="";return Xe().isPlainObject(n.error)&&Xe().isString(n.error.detail)?o=n.error.detail:Xe().isString(n.error)?o=n.error:Xe().isString(n.message)&&(o=n.message),new i1.T(Ho.k.error,`${n.status} - ${n.statusText}`,o,void 0,n.application)})}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(Ee.F0),e.LFG(Do.j),e.LFG(Ui.g))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})(),KZ=(()=>{class t{constructor(n){this.http=n}jsError(n,o,l){return this.http.post("ui-api/logging/js-error",{url:n,message:o,stack:l})}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(m.eN))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac,providedIn:"root"}),t})(),XZ=(()=>{class t{constructor(n,o){this.injector=n,this.router=o}handleError(n){const o=this.injector.get(KZ),l=window.location.href;if(o.jsError(l,n&&n.message,n&&n.stack).subscribe(),!(n.rejection instanceof Yy.s9))throw n;setTimeout(()=>this.router.navigate(["error"],{state:{message:n.rejection.message,header:n.rejection.header,icon:n.rejection.icon}}),50)}}return t.\u0275fac=function(n){return new(n||t)(e.LFG(e.zs3),e.LFG(Ee.F0))},t.\u0275prov=e.Yz7({token:t,factory:t.\u0275fac}),t})(),qZ=(()=>{class t{}return t.\u0275fac=function(n){return new(n||t)},t.\u0275mod=e.oAB({type:t,bootstrap:[HZ]}),t.\u0275inj=e.cJS({providers:[{provide:e.qLn,useClass:XZ},{provide:m.TP,useClass:QZ,multi:!0},{provide:f.mr,useValue:"/"+(window.location.pathname.split("/",1)[1]||"")}],imports:[m.JF,u.b2,Lc,Q.Rh.forRoot({positionClass:"toast-top-right",preventDuplicates:!0,enableHtml:!0}),XC,WZ,ag.m,VZ,ag.m]}),t})();vO.N.production&&(0,e.G48)(),u.q6().bootstrapModule(qZ).then(t=>{if((0,e.X6Q)()){const n=t.injector.get(e.z2F).components[0];(0,u.HJ)(n)}}).catch(t=>console.log(t))},72432:(E,C,s)=>{"use strict";var r=s(55634),a=s(55781),c=TypeError;E.exports=function(u){if(r(u))return u;throw c(a(u)+" is not a function")}},54857:(E,C,s)=>{"use strict";var r=s(55634),a=String,c=TypeError;E.exports=function(u){if("object"==typeof u||r(u))return u;throw c("Can't set "+a(u)+" as a prototype")}},39488:(E,C,s)=>{"use strict";var r=s(24241),a=s(28362),c=s(47310).f,u=r("unscopables"),e=Array.prototype;void 0===e[u]&&c(e,u,{configurable:!0,value:a(null)}),E.exports=function(f){e[u][f]=!0}},11338:(E,C,s)=>{"use strict";var r=s(50354).charAt;E.exports=function(a,c,u){return c+(u?r(a,c).length:1)}},59728:(E,C,s)=>{"use strict";var r=s(7971),a=TypeError;E.exports=function(c,u){if(r(u,c))return c;throw a("Incorrect invocation")}},43869:(E,C,s)=>{"use strict";var r=s(11143),a=String,c=TypeError;E.exports=function(u){if(r(u))return u;throw c(a(u)+" is not an object")}},3181:(E,C,s)=>{"use strict";var r=s(80413);E.exports=r(function(){if("function"==typeof ArrayBuffer){var a=new ArrayBuffer(8);Object.isExtensible(a)&&Object.defineProperty(a,"a",{value:8})}})},63306:(E,C,s)=>{"use strict";var r=s(8622),a=s(77067),c=s(75796),u=function(e){return function(f,m,T){var U,M=r(f),w=c(M),D=a(T,w);if(e&&m!=m){for(;w>D;)if((U=M[D++])!=U)return!0}else for(;w>D;D++)if((e||D in M)&&M[D]===m)return e||D||0;return!e&&-1}};E.exports={includes:u(!0),indexOf:u(!1)}},76775:(E,C,s)=>{"use strict";var r=s(79083),a=s(49566),c=s(98679),u=s(43602),e=s(75796),f=s(12253),m=a([].push),T=function(M){var w=1===M,D=2===M,U=3===M,W=4===M,$=6===M,J=7===M,F=5===M||$;return function(X,de,V,ce){for(var ct,qe,se=u(X),fe=c(se),Te=r(de,V),$e=e(fe),ge=0,Et=ce||f,ot=w?Et(X,$e):D||J?Et(X,0):void 0;$e>ge;ge++)if((F||ge in fe)&&(qe=Te(ct=fe[ge],ge,se),M))if(w)ot[ge]=qe;else if(qe)switch(M){case 3:return!0;case 5:return ct;case 6:return ge;case 2:m(ot,ct)}else switch(M){case 4:return!1;case 7:m(ot,ct)}return $?-1:U||W?W:ot}};E.exports={forEach:T(0),map:T(1),filter:T(2),some:T(3),every:T(4),find:T(5),findIndex:T(6),filterReject:T(7)}},64020:(E,C,s)=>{"use strict";var r=s(80413),a=s(24241),c=s(22243),u=a("species");E.exports=function(e){return c>=51||!r(function(){var f=[];return(f.constructor={})[u]=function(){return{foo:1}},1!==f[e](Boolean).foo})}},55786:(E,C,s)=>{"use strict";var r=s(80413);E.exports=function(a,c){var u=[][a];return!!u&&r(function(){u.call(null,c||function(){return 1},1)})}},63385:(E,C,s)=>{"use strict";var r=s(72432),a=s(43602),c=s(98679),u=s(75796),e=TypeError,f=function(m){return function(T,M,w,D){r(M);var U=a(T),W=c(U),$=u(U),J=m?$-1:0,F=m?-1:1;if(w<2)for(;;){if(J in W){D=W[J],J+=F;break}if(J+=F,m?J<0:$<=J)throw e("Reduce of empty array with no initial value")}for(;m?J>=0:$>J;J+=F)J in W&&(D=M(D,W[J],J,U));return D}};E.exports={left:f(!1),right:f(!0)}},95202:(E,C,s)=>{"use strict";var r=s(77067),a=s(75796),c=s(54146),u=Array,e=Math.max;E.exports=function(f,m,T){for(var M=a(f),w=r(m,M),D=r(void 0===T?M:T,M),U=u(e(D-w,0)),W=0;w<D;w++,W++)c(U,W,f[w]);return U.length=W,U}},42868:(E,C,s)=>{"use strict";var r=s(13151),a=s(85463),c=s(11143),e=s(24241)("species"),f=Array;E.exports=function(m){var T;return r(m)&&(a(T=m.constructor)&&(T===f||r(T.prototype))||c(T)&&null===(T=T[e]))&&(T=void 0),void 0===T?f:T}},12253:(E,C,s)=>{"use strict";var r=s(42868);E.exports=function(a,c){return new(r(a))(0===c?0:c)}},70768:(E,C,s)=>{"use strict";var a=s(24241)("iterator"),c=!1;try{var u=0,e={next:function(){return{done:!!u++}},return:function(){c=!0}};e[a]=function(){return this},Array.from(e,function(){throw 2})}catch{}E.exports=function(f,m){try{if(!m&&!c)return!1}catch{return!1}var T=!1;try{var M={};M[a]=function(){return{next:function(){return{done:T=!0}}}},f(M)}catch{}return T}},31400:(E,C,s)=>{"use strict";var r=s(49566),a=r({}.toString),c=r("".slice);E.exports=function(u){return c(a(u),8,-1)}},96843:(E,C,s)=>{"use strict";var r=s(81469),a=s(55634),c=s(31400),e=s(24241)("toStringTag"),f=Object,m="Arguments"===c(function(){return arguments}());E.exports=r?c:function(M){var w,D,U;return void 0===M?"Undefined":null===M?"Null":"string"==typeof(D=function(M,w){try{return M[w]}catch{}}(w=f(M),e))?D:m?c(w):"Object"===(U=c(w))&&a(w.callee)?"Arguments":U}},59798:(E,C,s)=>{"use strict";var r=s(49566),a=s(94227),c=s(58991).getWeakData,u=s(59728),e=s(43869),f=s(56537),m=s(11143),T=s(6711),M=s(76775),w=s(24817),D=s(91874),U=D.set,W=D.getterFor,$=M.find,J=M.findIndex,F=r([].splice),X=0,de=function(se){return se.frozen||(se.frozen=new V)},V=function(){this.entries=[]},ce=function(se,fe){return $(se.entries,function(Te){return Te[0]===fe})};V.prototype={get:function(se){var fe=ce(this,se);if(fe)return fe[1]},has:function(se){return!!ce(this,se)},set:function(se,fe){var Te=ce(this,se);Te?Te[1]=fe:this.entries.push([se,fe])},delete:function(se){var fe=J(this.entries,function(Te){return Te[0]===se});return~fe&&F(this.entries,fe,1),!!~fe}},E.exports={getConstructor:function(se,fe,Te,$e){var ge=se(function(qe,He){u(qe,Et),U(qe,{type:fe,id:X++,frozen:void 0}),f(He)||T(He,qe[$e],{that:qe,AS_ENTRIES:Te})}),Et=ge.prototype,ot=W(fe),ct=function(qe,He,We){var Le=ot(qe),Pt=c(e(He),!0);return!0===Pt?de(Le).set(He,We):Pt[Le.id]=We,qe};return a(Et,{delete:function(qe){var He=ot(this);if(!m(qe))return!1;var We=c(qe);return!0===We?de(He).delete(qe):We&&w(We,He.id)&&delete We[He.id]},has:function(He){var We=ot(this);if(!m(He))return!1;var Le=c(He);return!0===Le?de(We).has(He):Le&&w(Le,We.id)}}),a(Et,Te?{get:function(He){var We=ot(this);if(m(He)){var Le=c(He);return!0===Le?de(We).get(He):Le?Le[We.id]:void 0}},set:function(He,We){return ct(this,He,We)}}:{add:function(He){return ct(this,He,!0)}}),ge}}},65210:(E,C,s)=>{"use strict";var r=s(81846),a=s(75099),c=s(49566),u=s(5469),e=s(67874),f=s(58991),m=s(6711),T=s(59728),M=s(55634),w=s(56537),D=s(11143),U=s(80413),W=s(70768),$=s(89342),J=s(72905);E.exports=function(F,X,de){var V=-1!==F.indexOf("Map"),ce=-1!==F.indexOf("Weak"),se=V?"set":"add",fe=a[F],Te=fe&&fe.prototype,$e=fe,ge={},Et=function(Pt){var it=c(Te[Pt]);e(Te,Pt,"add"===Pt?function(cn){return it(this,0===cn?0:cn),this}:"delete"===Pt?function(Xt){return!(ce&&!D(Xt))&&it(this,0===Xt?0:Xt)}:"get"===Pt?function(cn){return ce&&!D(cn)?void 0:it(this,0===cn?0:cn)}:"has"===Pt?function(cn){return!(ce&&!D(cn))&&it(this,0===cn?0:cn)}:function(cn,pn){return it(this,0===cn?0:cn,pn),this})};if(u(F,!M(fe)||!(ce||Te.forEach&&!U(function(){(new fe).entries().next()}))))$e=de.getConstructor(X,F,V,se),f.enable();else if(u(F,!0)){var ct=new $e,qe=ct[se](ce?{}:-0,1)!==ct,He=U(function(){ct.has(1)}),We=W(function(Pt){new fe(Pt)}),Le=!ce&&U(function(){for(var Pt=new fe,it=5;it--;)Pt[se](it,it);return!Pt.has(-0)});We||(($e=X(function(Pt,it){T(Pt,Te);var Xt=J(new fe,Pt,$e);return w(it)||m(it,Xt[se],{that:Xt,AS_ENTRIES:V}),Xt})).prototype=Te,Te.constructor=$e),(He||Le)&&(Et("delete"),Et("has"),V&&Et("get")),(Le||qe)&&Et(se),ce&&Te.clear&&delete Te.clear}return ge[F]=$e,r({global:!0,constructor:!0,forced:$e!==fe},ge),$($e,F),ce||de.setStrong($e,F,V),$e}},71852:(E,C,s)=>{"use strict";var r=s(24817),a=s(85818),c=s(977),u=s(47310);E.exports=function(e,f,m){for(var T=a(f),M=u.f,w=c.f,D=0;D<T.length;D++){var U=T[D];!r(e,U)&&(!m||!r(m,U))&&M(e,U,w(f,U))}}},42876:(E,C,s)=>{"use strict";var r=s(80413);E.exports=!r(function(){function a(){}return a.prototype.constructor=null,Object.getPrototypeOf(new a)!==a.prototype})},64026:E=>{"use strict";E.exports=function(C,s){return{value:C,done:s}}},14674:(E,C,s)=>{"use strict";var r=s(52731),a=s(47310),c=s(62220);E.exports=r?function(u,e,f){return a.f(u,e,c(1,f))}:function(u,e,f){return u[e]=f,u}},62220:E=>{"use strict";E.exports=function(C,s){return{enumerable:!(1&C),configurable:!(2&C),writable:!(4&C),value:s}}},54146:(E,C,s)=>{"use strict";var r=s(9419),a=s(47310),c=s(62220);E.exports=function(u,e,f){var m=r(e);m in u?a.f(u,m,c(0,f)):u[m]=f}},35852:(E,C,s)=>{"use strict";var r=s(62803),a=s(47310);E.exports=function(c,u,e){return e.get&&r(e.get,u,{getter:!0}),e.set&&r(e.set,u,{setter:!0}),a.f(c,u,e)}},67874:(E,C,s)=>{"use strict";var r=s(55634),a=s(47310),c=s(62803),u=s(85359);E.exports=function(e,f,m,T){T||(T={});var M=T.enumerable,w=void 0!==T.name?T.name:f;if(r(m)&&c(m,w,T),T.global)M?e[f]=m:u(f,m);else{try{T.unsafe?e[f]&&(M=!0):delete e[f]}catch{}M?e[f]=m:a.f(e,f,{value:m,enumerable:!1,configurable:!T.nonConfigurable,writable:!T.nonWritable})}return e}},94227:(E,C,s)=>{"use strict";var r=s(67874);E.exports=function(a,c,u){for(var e in c)r(a,e,c[e],u);return a}},85359:(E,C,s)=>{"use strict";var r=s(75099),a=Object.defineProperty;E.exports=function(c,u){try{a(r,c,{value:u,configurable:!0,writable:!0})}catch{r[c]=u}return u}},52731:(E,C,s)=>{"use strict";var r=s(80413);E.exports=!r(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})},83065:E=>{"use strict";var C="object"==typeof document&&document.all;E.exports={all:C,IS_HTMLDDA:typeof C>"u"&&void 0!==C}},81151:(E,C,s)=>{"use strict";var r=s(75099),a=s(11143),c=r.document,u=a(c)&&a(c.createElement);E.exports=function(e){return u?c.createElement(e):{}}},24756:E=>{"use strict";E.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},14306:(E,C,s)=>{"use strict";var a=s(81151)("span").classList,c=a&&a.constructor&&a.constructor.prototype;E.exports=c===Object.prototype?void 0:c},99702:(E,C,s)=>{"use strict";var r=s(75099),a=s(31400);E.exports="process"===a(r.process)},43945:E=>{"use strict";E.exports=typeof navigator<"u"&&String(navigator.userAgent)||""},22243:(E,C,s)=>{"use strict";var m,T,r=s(75099),a=s(43945),c=r.process,u=r.Deno,e=c&&c.versions||u&&u.version,f=e&&e.v8;f&&(T=(m=f.split("."))[0]>0&&m[0]<4?1:+(m[0]+m[1])),!T&&a&&(!(m=a.match(/Edge\/(\d+)/))||m[1]>=74)&&(m=a.match(/Chrome\/(\d+)/))&&(T=+m[1]),E.exports=T},54515:E=>{"use strict";E.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},81846:(E,C,s)=>{"use strict";var r=s(75099),a=s(977).f,c=s(14674),u=s(67874),e=s(85359),f=s(71852),m=s(5469);E.exports=function(T,M){var $,J,F,X,de,w=T.target,D=T.global,U=T.stat;if($=D?r:U?r[w]||e(w,{}):(r[w]||{}).prototype)for(J in M){if(X=M[J],F=T.dontCallGetSet?(de=a($,J))&&de.value:$[J],!m(D?J:w+(U?".":"#")+J,T.forced)&&void 0!==F){if(typeof X==typeof F)continue;f(X,F)}(T.sham||F&&F.sham)&&c(X,"sham",!0),u($,J,X,T)}}},80413:E=>{"use strict";E.exports=function(C){try{return!!C()}catch{return!0}}},99661:(E,C,s)=>{"use strict";s(27119);var r=s(96823),a=s(67874),c=s(63872),u=s(80413),e=s(24241),f=s(14674),m=e("species"),T=RegExp.prototype;E.exports=function(M,w,D,U){var W=e(M),$=!u(function(){var de={};return de[W]=function(){return 7},7!==""[M](de)}),J=$&&!u(function(){var de=!1,V=/a/;return"split"===M&&((V={}).constructor={},V.constructor[m]=function(){return V},V.flags="",V[W]=/./[W]),V.exec=function(){return de=!0,null},V[W](""),!de});if(!$||!J||D){var F=r(/./[W]),X=w(W,""[M],function(de,V,ce,se,fe){var Te=r(de),$e=V.exec;return $e===c||$e===T.exec?$&&!fe?{done:!0,value:F(V,ce,se)}:{done:!0,value:Te(ce,V,se)}:{done:!1}});a(String.prototype,M,X[0]),a(T,W,X[1])}U&&f(T[W],"sham",!0)}},46121:(E,C,s)=>{"use strict";var r=s(80413);E.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},65461:(E,C,s)=>{"use strict";var r=s(18846),a=Function.prototype,c=a.apply,u=a.call;E.exports="object"==typeof Reflect&&Reflect.apply||(r?u.bind(c):function(){return u.apply(c,arguments)})},79083:(E,C,s)=>{"use strict";var r=s(96823),a=s(72432),c=s(18846),u=r(r.bind);E.exports=function(e,f){return a(e),void 0===f?e:c?u(e,f):function(){return e.apply(f,arguments)}}},18846:(E,C,s)=>{"use strict";var r=s(80413);E.exports=!r(function(){var a=function(){}.bind();return"function"!=typeof a||a.hasOwnProperty("prototype")})},99150:(E,C,s)=>{"use strict";var r=s(18846),a=Function.prototype.call;E.exports=r?a.bind(a):function(){return a.apply(a,arguments)}},62264:(E,C,s)=>{"use strict";var r=s(52731),a=s(24817),c=Function.prototype,u=r&&Object.getOwnPropertyDescriptor,e=a(c,"name"),f=e&&"something"===function(){}.name,m=e&&(!r||r&&u(c,"name").configurable);E.exports={EXISTS:e,PROPER:f,CONFIGURABLE:m}},36770:(E,C,s)=>{"use strict";var r=s(49566),a=s(72432);E.exports=function(c,u,e){try{return r(a(Object.getOwnPropertyDescriptor(c,u)[e]))}catch{}}},96823:(E,C,s)=>{"use strict";var r=s(31400),a=s(49566);E.exports=function(c){if("Function"===r(c))return a(c)}},49566:(E,C,s)=>{"use strict";var r=s(18846),a=Function.prototype,c=a.call,u=r&&a.bind.bind(c,c);E.exports=r?u:function(e){return function(){return c.apply(e,arguments)}}},23988:(E,C,s)=>{"use strict";var r=s(75099),a=s(55634),c=function(u){return a(u)?u:void 0};E.exports=function(u,e){return arguments.length<2?c(r[u]):r[u]&&r[u][e]}},95762:(E,C,s)=>{"use strict";var r=s(96843),a=s(60989),c=s(56537),u=s(90338),f=s(24241)("iterator");E.exports=function(m){if(!c(m))return a(m,f)||a(m,"@@iterator")||u[r(m)]}},90322:(E,C,s)=>{"use strict";var r=s(99150),a=s(72432),c=s(43869),u=s(55781),e=s(95762),f=TypeError;E.exports=function(m,T){var M=arguments.length<2?e(m):T;if(a(M))return c(r(M,m));throw f(u(m)+" is not iterable")}},60989:(E,C,s)=>{"use strict";var r=s(72432),a=s(56537);E.exports=function(c,u){var e=c[u];return a(e)?void 0:r(e)}},49682:(E,C,s)=>{"use strict";var r=s(49566),a=s(43602),c=Math.floor,u=r("".charAt),e=r("".replace),f=r("".slice),m=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,T=/\$([$&'`]|\d{1,2})/g;E.exports=function(M,w,D,U,W,$){var J=D+M.length,F=U.length,X=T;return void 0!==W&&(W=a(W),X=m),e($,X,function(de,V){var ce;switch(u(V,0)){case"$":return"$";case"&":return M;case"`":return f(w,0,D);case"'":return f(w,J);case"<":ce=W[f(V,1,-1)];break;default:var se=+V;if(0===se)return de;if(se>F){var fe=c(se/10);return 0===fe?de:fe<=F?void 0===U[fe-1]?u(V,1):U[fe-1]+u(V,1):de}ce=U[se-1]}return void 0===ce?"":ce})}},75099:function(E){"use strict";var C=function(s){return s&&s.Math===Math&&s};E.exports=C("object"==typeof globalThis&&globalThis)||C("object"==typeof window&&window)||C("object"==typeof self&&self)||C("object"==typeof global&&global)||function(){return this}()||this||Function("return this")()},24817:(E,C,s)=>{"use strict";var r=s(49566),a=s(43602),c=r({}.hasOwnProperty);E.exports=Object.hasOwn||function(e,f){return c(a(e),f)}},88488:E=>{"use strict";E.exports={}},28277:(E,C,s)=>{"use strict";var r=s(23988);E.exports=r("document","documentElement")},74550:(E,C,s)=>{"use strict";var r=s(52731),a=s(80413),c=s(81151);E.exports=!r&&!a(function(){return 7!==Object.defineProperty(c("div"),"a",{get:function(){return 7}}).a})},98679:(E,C,s)=>{"use strict";var r=s(49566),a=s(80413),c=s(31400),u=Object,e=r("".split);E.exports=a(function(){return!u("z").propertyIsEnumerable(0)})?function(f){return"String"===c(f)?e(f,""):u(f)}:u},72905:(E,C,s)=>{"use strict";var r=s(55634),a=s(11143),c=s(78583);E.exports=function(u,e,f){var m,T;return c&&r(m=e.constructor)&&m!==f&&a(T=m.prototype)&&T!==f.prototype&&c(u,T),u}},42300:(E,C,s)=>{"use strict";var r=s(49566),a=s(55634),c=s(18692),u=r(Function.toString);a(c.inspectSource)||(c.inspectSource=function(e){return u(e)}),E.exports=c.inspectSource},58991:(E,C,s)=>{"use strict";var r=s(81846),a=s(49566),c=s(88488),u=s(11143),e=s(24817),f=s(47310).f,m=s(16751),T=s(32771),M=s(72416),w=s(6318),D=s(46121),U=!1,W=w("meta"),$=0,J=function(se){f(se,W,{value:{objectID:"O"+$++,weakData:{}}})},ce=E.exports={enable:function(){ce.enable=function(){},U=!0;var se=m.f,fe=a([].splice),Te={};Te[W]=1,se(Te).length&&(m.f=function($e){for(var ge=se($e),Et=0,ot=ge.length;Et<ot;Et++)if(ge[Et]===W){fe(ge,Et,1);break}return ge},r({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:T.f}))},fastKey:function(se,fe){if(!u(se))return"symbol"==typeof se?se:("string"==typeof se?"S":"P")+se;if(!e(se,W)){if(!M(se))return"F";if(!fe)return"E";J(se)}return se[W].objectID},getWeakData:function(se,fe){if(!e(se,W)){if(!M(se))return!0;if(!fe)return!1;J(se)}return se[W].weakData},onFreeze:function(se){return D&&U&&M(se)&&!e(se,W)&&J(se),se}};c[W]=!0},91874:(E,C,s)=>{"use strict";var U,W,$,r=s(14298),a=s(75099),c=s(11143),u=s(14674),e=s(24817),f=s(18692),m=s(54819),T=s(88488),M="Object already initialized",w=a.TypeError;if(r||f.state){var X=f.state||(f.state=new(0,a.WeakMap));X.get=X.get,X.has=X.has,X.set=X.set,U=function(V,ce){if(X.has(V))throw w(M);return ce.facade=V,X.set(V,ce),ce},W=function(V){return X.get(V)||{}},$=function(V){return X.has(V)}}else{var de=m("state");T[de]=!0,U=function(V,ce){if(e(V,de))throw w(M);return ce.facade=V,u(V,de,ce),ce},W=function(V){return e(V,de)?V[de]:{}},$=function(V){return e(V,de)}}E.exports={set:U,get:W,has:$,enforce:function(V){return $(V)?W(V):U(V,{})},getterFor:function(V){return function(ce){var se;if(!c(ce)||(se=W(ce)).type!==V)throw w("Incompatible receiver, "+V+" required");return se}}}},22134:(E,C,s)=>{"use strict";var r=s(24241),a=s(90338),c=r("iterator"),u=Array.prototype;E.exports=function(e){return void 0!==e&&(a.Array===e||u[c]===e)}},13151:(E,C,s)=>{"use strict";var r=s(31400);E.exports=Array.isArray||function(c){return"Array"===r(c)}},55634:(E,C,s)=>{"use strict";var r=s(83065),a=r.all;E.exports=r.IS_HTMLDDA?function(c){return"function"==typeof c||c===a}:function(c){return"function"==typeof c}},85463:(E,C,s)=>{"use strict";var r=s(49566),a=s(80413),c=s(55634),u=s(96843),e=s(23988),f=s(42300),m=function(){},T=[],M=e("Reflect","construct"),w=/^\s*(?:class|function)\b/,D=r(w.exec),U=!w.exec(m),W=function(F){if(!c(F))return!1;try{return M(m,T,F),!0}catch{return!1}},$=function(F){if(!c(F))return!1;switch(u(F)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return U||!!D(w,f(F))}catch{return!0}};$.sham=!0,E.exports=!M||a(function(){var J;return W(W.call)||!W(Object)||!W(function(){J=!0})||J})?$:W},5469:(E,C,s)=>{"use strict";var r=s(80413),a=s(55634),c=/#|\.prototype\./,u=function(M,w){var D=f[e(M)];return D===T||D!==m&&(a(w)?r(w):!!w)},e=u.normalize=function(M){return String(M).replace(c,".").toLowerCase()},f=u.data={},m=u.NATIVE="N",T=u.POLYFILL="P";E.exports=u},56537:E=>{"use strict";E.exports=function(C){return null==C}},11143:(E,C,s)=>{"use strict";var r=s(55634),a=s(83065),c=a.all;E.exports=a.IS_HTMLDDA?function(u){return"object"==typeof u?null!==u:r(u)||u===c}:function(u){return"object"==typeof u?null!==u:r(u)}},20065:E=>{"use strict";E.exports=!1},37507:(E,C,s)=>{"use strict";var r=s(23988),a=s(55634),c=s(7971),u=s(48531),e=Object;E.exports=u?function(f){return"symbol"==typeof f}:function(f){var m=r("Symbol");return a(m)&&c(m.prototype,e(f))}},6711:(E,C,s)=>{"use strict";var r=s(79083),a=s(99150),c=s(43869),u=s(55781),e=s(22134),f=s(75796),m=s(7971),T=s(90322),M=s(95762),w=s(25057),D=TypeError,U=function($,J){this.stopped=$,this.result=J},W=U.prototype;E.exports=function($,J,F){var Te,$e,ge,Et,ot,ct,qe,de=!(!F||!F.AS_ENTRIES),V=!(!F||!F.IS_RECORD),ce=!(!F||!F.IS_ITERATOR),se=!(!F||!F.INTERRUPTED),fe=r(J,F&&F.that),He=function(Le){return Te&&w(Te,"normal",Le),new U(!0,Le)},We=function(Le){return de?(c(Le),se?fe(Le[0],Le[1],He):fe(Le[0],Le[1])):se?fe(Le,He):fe(Le)};if(V)Te=$.iterator;else if(ce)Te=$;else{if(!($e=M($)))throw D(u($)+" is not iterable");if(e($e)){for(ge=0,Et=f($);Et>ge;ge++)if((ot=We($[ge]))&&m(W,ot))return ot;return new U(!1)}Te=T($,$e)}for(ct=V?$.next:Te.next;!(qe=a(ct,Te)).done;){try{ot=We(qe.value)}catch(Le){w(Te,"throw",Le)}if("object"==typeof ot&&ot&&m(W,ot))return ot}return new U(!1)}},25057:(E,C,s)=>{"use strict";var r=s(99150),a=s(43869),c=s(60989);E.exports=function(u,e,f){var m,T;a(u);try{if(!(m=c(u,"return"))){if("throw"===e)throw f;return f}m=r(m,u)}catch(M){T=!0,m=M}if("throw"===e)throw f;if(T)throw m;return a(m),f}},78511:(E,C,s)=>{"use strict";var r=s(70879).IteratorPrototype,a=s(28362),c=s(62220),u=s(89342),e=s(90338),f=function(){return this};E.exports=function(m,T,M,w){var D=T+" Iterator";return m.prototype=a(r,{next:c(+!w,M)}),u(m,D,!1,!0),e[D]=f,m}},12161:(E,C,s)=>{"use strict";var r=s(81846),a=s(99150),c=s(20065),u=s(62264),e=s(55634),f=s(78511),m=s(18981),T=s(78583),M=s(89342),w=s(14674),D=s(67874),U=s(24241),W=s(90338),$=s(70879),J=u.PROPER,F=u.CONFIGURABLE,X=$.IteratorPrototype,de=$.BUGGY_SAFARI_ITERATORS,V=U("iterator"),se="values",fe="entries",Te=function(){return this};E.exports=function($e,ge,Et,ot,ct,qe,He){f(Et,ge,ot);var Rn,At,qt,We=function(sn){if(sn===ct&&cn)return cn;if(!de&&sn&&sn in it)return it[sn];switch(sn){case"keys":case se:case fe:return function(){return new Et(this,sn)}}return function(){return new Et(this)}},Le=ge+" Iterator",Pt=!1,it=$e.prototype,Xt=it[V]||it["@@iterator"]||ct&&it[ct],cn=!de&&Xt||We(ct),pn="Array"===ge&&it.entries||Xt;if(pn&&(Rn=m(pn.call(new $e)))!==Object.prototype&&Rn.next&&(!c&&m(Rn)!==X&&(T?T(Rn,X):e(Rn[V])||D(Rn,V,Te)),M(Rn,Le,!0,!0),c&&(W[Le]=Te)),J&&ct===se&&Xt&&Xt.name!==se&&(!c&&F?w(it,"name",se):(Pt=!0,cn=function(){return a(Xt,this)})),ct)if(At={values:We(se),keys:qe?cn:We("keys"),entries:We(fe)},He)for(qt in At)(de||Pt||!(qt in it))&&D(it,qt,At[qt]);else r({target:ge,proto:!0,forced:de||Pt},At);return(!c||He)&&it[V]!==cn&&D(it,V,cn,{name:ct}),W[ge]=cn,At}},70879:(E,C,s)=>{"use strict";var D,U,W,r=s(80413),a=s(55634),c=s(11143),u=s(28362),e=s(18981),f=s(67874),m=s(24241),T=s(20065),M=m("iterator"),w=!1;[].keys&&("next"in(W=[].keys())?(U=e(e(W)))!==Object.prototype&&(D=U):w=!0),!c(D)||r(function(){var J={};return D[M].call(J)!==J})?D={}:T&&(D=u(D)),a(D[M])||f(D,M,function(){return this}),E.exports={IteratorPrototype:D,BUGGY_SAFARI_ITERATORS:w}},90338:E=>{"use strict";E.exports={}},75796:(E,C,s)=>{"use strict";var r=s(49499);E.exports=function(a){return r(a.length)}},62803:(E,C,s)=>{"use strict";var r=s(49566),a=s(80413),c=s(55634),u=s(24817),e=s(52731),f=s(62264).CONFIGURABLE,m=s(42300),T=s(91874),M=T.enforce,w=T.get,D=String,U=Object.defineProperty,W=r("".slice),$=r("".replace),J=r([].join),F=e&&!a(function(){return 8!==U(function(){},"length",{value:8}).length}),X=String(String).split("String"),de=E.exports=function(V,ce,se){"Symbol("===W(D(ce),0,7)&&(ce="["+$(D(ce),/^Symbol\(([^)]*)\)/,"$1")+"]"),se&&se.getter&&(ce="get "+ce),se&&se.setter&&(ce="set "+ce),(!u(V,"name")||f&&V.name!==ce)&&(e?U(V,"name",{value:ce,configurable:!0}):V.name=ce),F&&se&&u(se,"arity")&&V.length!==se.arity&&U(V,"length",{value:se.arity});try{se&&u(se,"constructor")&&se.constructor?e&&U(V,"prototype",{writable:!1}):V.prototype&&(V.prototype=void 0)}catch{}var fe=M(V);return u(fe,"source")||(fe.source=J(X,"string"==typeof ce?ce:"")),V};Function.prototype.toString=de(function(){return c(this)&&w(this).source||m(this)},"toString")},30744:E=>{"use strict";var C=Math.ceil,s=Math.floor;E.exports=Math.trunc||function(a){var c=+a;return(c>0?s:C)(c)}},1185:(E,C,s)=>{"use strict";var r=s(75099),a=s(80413),c=s(49566),u=s(17510),e=s(60709).trim,f=s(70017),m=r.parseInt,T=r.Symbol,M=T&&T.iterator,w=/^[+-]?0x/i,D=c(w.exec),U=8!==m(f+"08")||22!==m(f+"0x16")||M&&!a(function(){m(Object(M))});E.exports=U?function($,J){var F=e(u($));return m(F,J>>>0||(D(w,F)?16:10))}:m},41959:(E,C,s)=>{"use strict";var r=s(52731),a=s(49566),c=s(99150),u=s(80413),e=s(83715),f=s(42385),m=s(77602),T=s(43602),M=s(98679),w=Object.assign,D=Object.defineProperty,U=a([].concat);E.exports=!w||u(function(){if(r&&1!==w({b:1},w(D({},"a",{enumerable:!0,get:function(){D(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var W={},$={},J=Symbol("assign detection"),F="abcdefghijklmnopqrst";return W[J]=7,F.split("").forEach(function(X){$[X]=X}),7!==w({},W)[J]||e(w({},$)).join("")!==F})?function($,J){for(var F=T($),X=arguments.length,de=1,V=f.f,ce=m.f;X>de;)for(var ge,se=M(arguments[de++]),fe=V?U(e(se),V(se)):e(se),Te=fe.length,$e=0;Te>$e;)ge=fe[$e++],(!r||c(ce,se,ge))&&(F[ge]=se[ge]);return F}:w},28362:(E,C,s)=>{"use strict";var X,r=s(43869),a=s(34940),c=s(54515),u=s(88488),e=s(28277),f=s(81151),m=s(54819),w="prototype",D="script",U=m("IE_PROTO"),W=function(){},$=function(V){return"<"+D+">"+V+"</"+D+">"},J=function(V){V.write($("")),V.close();var ce=V.parentWindow.Object;return V=null,ce},de=function(){try{X=new ActiveXObject("htmlfile")}catch{}de=typeof document<"u"?document.domain&&X?J(X):function(){var se,V=f("iframe"),ce="java"+D+":";return V.style.display="none",e.appendChild(V),V.src=String(ce),(se=V.contentWindow.document).open(),se.write($("document.F=Object")),se.close(),se.F}():J(X);for(var V=c.length;V--;)delete de[w][c[V]];return de()};u[U]=!0,E.exports=Object.create||function(ce,se){var fe;return null!==ce?(W[w]=r(ce),fe=new W,W[w]=null,fe[U]=ce):fe=de(),void 0===se?fe:a.f(fe,se)}},34940:(E,C,s)=>{"use strict";var r=s(52731),a=s(53513),c=s(47310),u=s(43869),e=s(8622),f=s(83715);C.f=r&&!a?Object.defineProperties:function(T,M){u(T);for(var $,w=e(M),D=f(M),U=D.length,W=0;U>W;)c.f(T,$=D[W++],w[$]);return T}},47310:(E,C,s)=>{"use strict";var r=s(52731),a=s(74550),c=s(53513),u=s(43869),e=s(9419),f=TypeError,m=Object.defineProperty,T=Object.getOwnPropertyDescriptor,M="enumerable",w="configurable",D="writable";C.f=r?c?function(W,$,J){if(u(W),$=e($),u(J),"function"==typeof W&&"prototype"===$&&"value"in J&&D in J&&!J[D]){var F=T(W,$);F&&F[D]&&(W[$]=J.value,J={configurable:w in J?J[w]:F[w],enumerable:M in J?J[M]:F[M],writable:!1})}return m(W,$,J)}:m:function(W,$,J){if(u(W),$=e($),u(J),a)try{return m(W,$,J)}catch{}if("get"in J||"set"in J)throw f("Accessors not supported");return"value"in J&&(W[$]=J.value),W}},977:(E,C,s)=>{"use strict";var r=s(52731),a=s(99150),c=s(77602),u=s(62220),e=s(8622),f=s(9419),m=s(24817),T=s(74550),M=Object.getOwnPropertyDescriptor;C.f=r?M:function(D,U){if(D=e(D),U=f(U),T)try{return M(D,U)}catch{}if(m(D,U))return u(!a(c.f,D,U),D[U])}},32771:(E,C,s)=>{"use strict";var r=s(31400),a=s(8622),c=s(16751).f,u=s(95202),e="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];E.exports.f=function(T){return e&&"Window"===r(T)?function(m){try{return c(m)}catch{return u(e)}}(T):c(a(T))}},16751:(E,C,s)=>{"use strict";var r=s(49438),c=s(54515).concat("length","prototype");C.f=Object.getOwnPropertyNames||function(e){return r(e,c)}},42385:(E,C)=>{"use strict";C.f=Object.getOwnPropertySymbols},18981:(E,C,s)=>{"use strict";var r=s(24817),a=s(55634),c=s(43602),u=s(54819),e=s(42876),f=u("IE_PROTO"),m=Object,T=m.prototype;E.exports=e?m.getPrototypeOf:function(M){var w=c(M);if(r(w,f))return w[f];var D=w.constructor;return a(D)&&w instanceof D?D.prototype:w instanceof m?T:null}},72416:(E,C,s)=>{"use strict";var r=s(80413),a=s(11143),c=s(31400),u=s(3181),e=Object.isExtensible,f=r(function(){e(1)});E.exports=f||u?function(T){return!(!a(T)||u&&"ArrayBuffer"===c(T))&&(!e||e(T))}:e},7971:(E,C,s)=>{"use strict";var r=s(49566);E.exports=r({}.isPrototypeOf)},49438:(E,C,s)=>{"use strict";var r=s(49566),a=s(24817),c=s(8622),u=s(63306).indexOf,e=s(88488),f=r([].push);E.exports=function(m,T){var U,M=c(m),w=0,D=[];for(U in M)!a(e,U)&&a(M,U)&&f(D,U);for(;T.length>w;)a(M,U=T[w++])&&(~u(D,U)||f(D,U));return D}},83715:(E,C,s)=>{"use strict";var r=s(49438),a=s(54515);E.exports=Object.keys||function(u){return r(u,a)}},77602:(E,C)=>{"use strict";var s={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,a=r&&!s.call({1:2},1);C.f=a?function(u){var e=r(this,u);return!!e&&e.enumerable}:s},78583:(E,C,s)=>{"use strict";var r=s(36770),a=s(43869),c=s(54857);E.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var f,u=!1,e={};try{(f=r(Object.prototype,"__proto__","set"))(e,[]),u=e instanceof Array}catch{}return function(T,M){return a(T),c(M),u?f(T,M):T.__proto__=M,T}}():void 0)},12902:(E,C,s)=>{"use strict";var r=s(81469),a=s(96843);E.exports=r?{}.toString:function(){return"[object "+a(this)+"]"}},8061:(E,C,s)=>{"use strict";var r=s(99150),a=s(55634),c=s(11143),u=TypeError;E.exports=function(e,f){var m,T;if("string"===f&&a(m=e.toString)&&!c(T=r(m,e))||a(m=e.valueOf)&&!c(T=r(m,e))||"string"!==f&&a(m=e.toString)&&!c(T=r(m,e)))return T;throw u("Can't convert object to primitive value")}},85818:(E,C,s)=>{"use strict";var r=s(23988),a=s(49566),c=s(16751),u=s(42385),e=s(43869),f=a([].concat);E.exports=r("Reflect","ownKeys")||function(T){var M=c.f(e(T)),w=u.f;return w?f(M,w(T)):M}},64262:(E,C,s)=>{"use strict";var r=s(99150),a=s(43869),c=s(55634),u=s(31400),e=s(63872),f=TypeError;E.exports=function(m,T){var M=m.exec;if(c(M)){var w=r(M,m,T);return null!==w&&a(w),w}if("RegExp"===u(m))return r(e,m,T);throw f("RegExp#exec called on incompatible receiver")}},63872:(E,C,s)=>{"use strict";var fe,Te,r=s(99150),a=s(49566),c=s(17510),u=s(17367),e=s(92759),f=s(30505),m=s(28362),T=s(91874).get,M=s(94059),w=s(2104),D=f("native-string-replace",String.prototype.replace),U=RegExp.prototype.exec,W=U,$=a("".charAt),J=a("".indexOf),F=a("".replace),X=a("".slice),de=(Te=/b*/g,r(U,fe=/a/,"a"),r(U,Te,"a"),0!==fe.lastIndex||0!==Te.lastIndex),V=e.BROKEN_CARET,ce=void 0!==/()??/.exec("")[1];(de||ce||V||M||w)&&(W=function(Te){var ct,qe,He,We,Le,Pt,it,$e=this,ge=T($e),Et=c(Te),ot=ge.raw;if(ot)return ot.lastIndex=$e.lastIndex,ct=r(W,ot,Et),$e.lastIndex=ot.lastIndex,ct;var Xt=ge.groups,cn=V&&$e.sticky,pn=r(u,$e),Rn=$e.source,At=0,qt=Et;if(cn&&(pn=F(pn,"y",""),-1===J(pn,"g")&&(pn+="g"),qt=X(Et,$e.lastIndex),$e.lastIndex>0&&(!$e.multiline||$e.multiline&&"\n"!==$(Et,$e.lastIndex-1))&&(Rn="(?: "+Rn+")",qt=" "+qt,At++),qe=new RegExp("^(?:"+Rn+")",pn)),ce&&(qe=new RegExp("^"+Rn+"$(?!\\s)",pn)),de&&(He=$e.lastIndex),We=r(U,cn?qe:$e,qt),cn?We?(We.input=X(We.input,At),We[0]=X(We[0],At),We.index=$e.lastIndex,$e.lastIndex+=We[0].length):$e.lastIndex=0:de&&We&&($e.lastIndex=$e.global?We.index+We[0].length:He),ce&&We&&We.length>1&&r(D,We[0],qe,function(){for(Le=1;Le<arguments.length-2;Le++)void 0===arguments[Le]&&(We[Le]=void 0)}),We&&Xt)for(We.groups=Pt=m(null),Le=0;Le<Xt.length;Le++)Pt[(it=Xt[Le])[0]]=We[it[1]];return We}),E.exports=W},17367:(E,C,s)=>{"use strict";var r=s(43869);E.exports=function(){var a=r(this),c="";return a.hasIndices&&(c+="d"),a.global&&(c+="g"),a.ignoreCase&&(c+="i"),a.multiline&&(c+="m"),a.dotAll&&(c+="s"),a.unicode&&(c+="u"),a.unicodeSets&&(c+="v"),a.sticky&&(c+="y"),c}},92759:(E,C,s)=>{"use strict";var r=s(80413),c=s(75099).RegExp,u=r(function(){var m=c("a","y");return m.lastIndex=2,null!==m.exec("abcd")}),e=u||r(function(){return!c("a","y").sticky}),f=u||r(function(){var m=c("^r","gy");return m.lastIndex=2,null!==m.exec("str")});E.exports={BROKEN_CARET:f,MISSED_STICKY:e,UNSUPPORTED_Y:u}},94059:(E,C,s)=>{"use strict";var r=s(80413),c=s(75099).RegExp;E.exports=r(function(){var u=c(".","s");return!(u.dotAll&&u.exec("\n")&&"s"===u.flags)})},2104:(E,C,s)=>{"use strict";var r=s(80413),c=s(75099).RegExp;E.exports=r(function(){var u=c("(?<a>b)","g");return"b"!==u.exec("b").groups.a||"bc"!=="b".replace(u,"$<a>c")})},99324:(E,C,s)=>{"use strict";var r=s(56537),a=TypeError;E.exports=function(c){if(r(c))throw a("Can't call method on "+c);return c}},89342:(E,C,s)=>{"use strict";var r=s(47310).f,a=s(24817),u=s(24241)("toStringTag");E.exports=function(e,f,m){e&&!m&&(e=e.prototype),e&&!a(e,u)&&r(e,u,{configurable:!0,value:f})}},54819:(E,C,s)=>{"use strict";var r=s(30505),a=s(6318),c=r("keys");E.exports=function(u){return c[u]||(c[u]=a(u))}},18692:(E,C,s)=>{"use strict";var r=s(75099),a=s(85359),c="__core-js_shared__",u=r[c]||a(c,{});E.exports=u},30505:(E,C,s)=>{"use strict";var r=s(20065),a=s(18692);(E.exports=function(c,u){return a[c]||(a[c]=void 0!==u?u:{})})("versions",[]).push({version:"3.32.2",mode:r?"pure":"global",copyright:"\xa9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.2/LICENSE",source:"https://github.com/zloirock/core-js"})},50354:(E,C,s)=>{"use strict";var r=s(49566),a=s(8063),c=s(17510),u=s(99324),e=r("".charAt),f=r("".charCodeAt),m=r("".slice),T=function(M){return function(w,D){var J,F,U=c(u(w)),W=a(D),$=U.length;return W<0||W>=$?M?"":void 0:(J=f(U,W))<55296||J>56319||W+1===$||(F=f(U,W+1))<56320||F>57343?M?e(U,W):J:M?m(U,W,W+2):F-56320+(J-55296<<10)+65536}};E.exports={codeAt:T(!1),charAt:T(!0)}},60709:(E,C,s)=>{"use strict";var r=s(49566),a=s(99324),c=s(17510),u=s(70017),e=r("".replace),f=RegExp("^["+u+"]+"),m=RegExp("(^|[^"+u+"])["+u+"]+$"),T=function(M){return function(w){var D=c(a(w));return 1&M&&(D=e(D,f,"")),2&M&&(D=e(D,m,"$1")),D}};E.exports={start:T(1),end:T(2),trim:T(3)}},22455:(E,C,s)=>{"use strict";var r=s(22243),a=s(80413),u=s(75099).String;E.exports=!!Object.getOwnPropertySymbols&&!a(function(){var e=Symbol("symbol detection");return!u(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41})},77067:(E,C,s)=>{"use strict";var r=s(8063),a=Math.max,c=Math.min;E.exports=function(u,e){var f=r(u);return f<0?a(f+e,0):c(f,e)}},8622:(E,C,s)=>{"use strict";var r=s(98679),a=s(99324);E.exports=function(c){return r(a(c))}},8063:(E,C,s)=>{"use strict";var r=s(30744);E.exports=function(a){var c=+a;return c!=c||0===c?0:r(c)}},49499:(E,C,s)=>{"use strict";var r=s(8063),a=Math.min;E.exports=function(c){return c>0?a(r(c),9007199254740991):0}},43602:(E,C,s)=>{"use strict";var r=s(99324),a=Object;E.exports=function(c){return a(r(c))}},2736:(E,C,s)=>{"use strict";var r=s(99150),a=s(11143),c=s(37507),u=s(60989),e=s(8061),f=s(24241),m=TypeError,T=f("toPrimitive");E.exports=function(M,w){if(!a(M)||c(M))return M;var U,D=u(M,T);if(D){if(void 0===w&&(w="default"),U=r(D,M,w),!a(U)||c(U))return U;throw m("Can't convert object to primitive value")}return void 0===w&&(w="number"),e(M,w)}},9419:(E,C,s)=>{"use strict";var r=s(2736),a=s(37507);E.exports=function(c){var u=r(c,"string");return a(u)?u:u+""}},81469:(E,C,s)=>{"use strict";var c={};c[s(24241)("toStringTag")]="z",E.exports="[object z]"===String(c)},17510:(E,C,s)=>{"use strict";var r=s(96843),a=String;E.exports=function(c){if("Symbol"===r(c))throw TypeError("Cannot convert a Symbol value to a string");return a(c)}},55781:E=>{"use strict";var C=String;E.exports=function(s){try{return C(s)}catch{return"Object"}}},6318:(E,C,s)=>{"use strict";var r=s(49566),a=0,c=Math.random(),u=r(1..toString);E.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+u(++a+c,36)}},48531:(E,C,s)=>{"use strict";var r=s(22455);E.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},53513:(E,C,s)=>{"use strict";var r=s(52731),a=s(80413);E.exports=r&&a(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},14298:(E,C,s)=>{"use strict";var r=s(75099),a=s(55634),c=r.WeakMap;E.exports=a(c)&&/native code/.test(String(c))},24241:(E,C,s)=>{"use strict";var r=s(75099),a=s(30505),c=s(24817),u=s(6318),e=s(22455),f=s(48531),m=r.Symbol,T=a("wks"),M=f?m.for||m:m&&m.withoutSetter||u;E.exports=function(w){return c(T,w)||(T[w]=e&&c(m,w)?m[w]:M("Symbol."+w)),T[w]}},70017:E=>{"use strict";E.exports="\t\n\v\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},89001:(E,C,s)=>{"use strict";var r=s(81846),a=s(76775).filter;r({target:"Array",proto:!0,forced:!s(64020)("filter")},{filter:function(f){return a(this,f,arguments.length>1?arguments[1]:void 0)}})},4071:(E,C,s)=>{"use strict";var r=s(8622),a=s(39488),c=s(90338),u=s(91874),e=s(47310).f,f=s(12161),m=s(64026),T=s(20065),M=s(52731),w="Array Iterator",D=u.set,U=u.getterFor(w);E.exports=f(Array,"Array",function($,J){D(this,{type:w,target:r($),index:0,kind:J})},function(){var $=U(this),J=$.target,F=$.kind,X=$.index++;if(!J||X>=J.length)return $.target=void 0,m(void 0,!0);switch(F){case"keys":return m(X,!1);case"values":return m(J[X],!1)}return m([X,J[X]],!1)},"values");var W=c.Arguments=c.Array;if(a("keys"),a("values"),a("entries"),!T&&M&&"values"!==W.name)try{e(W,"name",{value:"values"})}catch{}},90808:(E,C,s)=>{"use strict";var r=s(81846),a=s(63385).left,c=s(55786),u=s(22243);r({target:"Array",proto:!0,forced:!s(99702)&&u>79&&u<83||!c("reduce")},{reduce:function(M){var w=arguments.length;return a(this,M,w,w>1?arguments[1]:void 0)}})},9579:(E,C,s)=>{"use strict";var r=s(52731),a=s(62264).EXISTS,c=s(49566),u=s(35852),e=Function.prototype,f=c(e.toString),m=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,T=c(m.exec);r&&!a&&u(e,"name",{configurable:!0,get:function(){try{return T(m,f(this))[1]}catch{return""}}})},79913:(E,C,s)=>{"use strict";var r=s(81846),a=s(41959);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==a},{assign:a})},54891:(E,C,s)=>{"use strict";var r=s(81469),a=s(67874),c=s(12902);r||a(Object.prototype,"toString",c,{unsafe:!0})},16331:(E,C,s)=>{"use strict";var r=s(81846),a=s(1185);r({global:!0,forced:parseInt!==a},{parseInt:a})},27119:(E,C,s)=>{"use strict";var r=s(81846),a=s(63872);r({target:"RegExp",proto:!0,forced:/./.exec!==a},{exec:a})},11125:(E,C,s)=>{"use strict";var r=s(50354).charAt,a=s(17510),c=s(91874),u=s(12161),e=s(64026),f="String Iterator",m=c.set,T=c.getterFor(f);u(String,"String",function(M){m(this,{type:f,string:a(M),index:0})},function(){var W,w=T(this),D=w.string,U=w.index;return U>=D.length?e(void 0,!0):(W=r(D,U),w.index+=W.length,e(W,!1))})},28036:(E,C,s)=>{"use strict";var r=s(99150),a=s(99661),c=s(43869),u=s(56537),e=s(49499),f=s(17510),m=s(99324),T=s(60989),M=s(11338),w=s(64262);a("match",function(D,U,W){return[function(J){var F=m(this),X=u(J)?void 0:T(J,D);return X?r(X,J,F):new RegExp(J)[D](f(F))},function($){var J=c(this),F=f($),X=W(U,J,F);if(X.done)return X.value;if(!J.global)return w(J,F);var de=J.unicode;J.lastIndex=0;for(var se,V=[],ce=0;null!==(se=w(J,F));){var fe=f(se[0]);V[ce]=fe,""===fe&&(J.lastIndex=M(F,e(J.lastIndex),de)),ce++}return 0===ce?null:V}]})},2082:(E,C,s)=>{"use strict";var r=s(65461),a=s(99150),c=s(49566),u=s(99661),e=s(80413),f=s(43869),m=s(55634),T=s(56537),M=s(8063),w=s(49499),D=s(17510),U=s(99324),W=s(11338),$=s(60989),J=s(49682),F=s(64262),de=s(24241)("replace"),V=Math.max,ce=Math.min,se=c([].concat),fe=c([].push),Te=c("".indexOf),$e=c("".slice),ge=function(qe){return void 0===qe?qe:String(qe)},Et="$0"==="a".replace(/./,"$0"),ot=!!/./[de]&&""===/./[de]("a","$0");u("replace",function(qe,He,We){var Le=ot?"$":"$0";return[function(it,Xt){var cn=U(this),pn=T(it)?void 0:$(it,de);return pn?a(pn,it,cn,Xt):a(He,D(cn),it,Xt)},function(Pt,it){var Xt=f(this),cn=D(Pt);if("string"==typeof it&&-1===Te(it,Le)&&-1===Te(it,"$<")){var pn=We(He,Xt,cn,it);if(pn.done)return pn.value}var Rn=m(it);Rn||(it=D(it));var qt,At=Xt.global;At&&(qt=Xt.unicode,Xt.lastIndex=0);for(var fn,sn=[];null!==(fn=F(Xt,cn))&&(fe(sn,fn),At);)""===D(fn[0])&&(Xt.lastIndex=W(cn,w(Xt.lastIndex),qt));for(var Kr="",Or=0,Lr=0;Lr<sn.length;Lr++){for(var br,ir=D((fn=sn[Lr])[0]),Qr=V(ce(M(fn.index),cn.length),0),jr=[],ht=1;ht<fn.length;ht++)fe(jr,ge(fn[ht]));var Wt=fn.groups;if(Rn){var Tt=se([ir],jr,Qr,cn);void 0!==Wt&&fe(Tt,Wt),br=D(r(it,void 0,Tt))}else br=J(ir,cn,Qr,jr,Wt,it);Qr>=Or&&(Kr+=$e(cn,Or,Qr)+br,Or=Qr+ir.length)}return Kr+$e(cn,Or)}]},!!e(function(){var qe=/./;return qe.exec=function(){var He=[];return He.groups={a:"7"},He},"7"!=="".replace(qe,"$<a>")})||!Et||ot)},10224:(E,C,s)=>{"use strict";var fe,r=s(46121),a=s(75099),c=s(49566),u=s(94227),e=s(58991),f=s(65210),m=s(59798),T=s(11143),M=s(91874).enforce,w=s(80413),D=s(14298),U=Object,W=Array.isArray,$=U.isExtensible,J=U.isFrozen,F=U.isSealed,X=U.freeze,de=U.seal,V={},ce={},se=!a.ActiveXObject&&"ActiveXObject"in a,Te=function(We){return function(){return We(this,arguments.length?arguments[0]:void 0)}},$e=f("WeakMap",Te,m),ge=$e.prototype,Et=c(ge.set);if(D)if(se){fe=m.getConstructor(Te,"WeakMap",!0),e.enable();var ct=c(ge.delete),qe=c(ge.has),He=c(ge.get);u(ge,{delete:function(We){if(T(We)&&!$(We)){var Le=M(this);return Le.frozen||(Le.frozen=new fe),ct(this,We)||Le.frozen.delete(We)}return ct(this,We)},has:function(Le){if(T(Le)&&!$(Le)){var Pt=M(this);return Pt.frozen||(Pt.frozen=new fe),qe(this,Le)||Pt.frozen.has(Le)}return qe(this,Le)},get:function(Le){if(T(Le)&&!$(Le)){var Pt=M(this);return Pt.frozen||(Pt.frozen=new fe),qe(this,Le)?He(this,Le):Pt.frozen.get(Le)}return He(this,Le)},set:function(Le,Pt){if(T(Le)&&!$(Le)){var it=M(this);it.frozen||(it.frozen=new fe),qe(this,Le)?Et(this,Le,Pt):it.frozen.set(Le,Pt)}else Et(this,Le,Pt);return this}})}else r&&w(function(){var We=X([]);return Et(new $e,We,1),!J(We)})&&u(ge,{set:function(Le,Pt){var it;return W(Le)&&(J(Le)?it=V:F(Le)&&(it=ce)),Et(this,Le,Pt),it===V&&X(Le),it===ce&&de(Le),this}})},30419:(E,C,s)=>{"use strict";s(10224)},39575:(E,C,s)=>{"use strict";var r=s(75099),a=s(24756),c=s(14306),u=s(4071),e=s(14674),f=s(24241),m=f("iterator"),T=f("toStringTag"),M=u.values,w=function(U,W){if(U){if(U[m]!==M)try{e(U,m,M)}catch{U[m]=M}if(U[T]||e(U,T,W),a[W])for(var $ in u)if(U[$]!==u[$])try{e(U,$,u[$])}catch{U[$]=u[$]}}};for(var D in a)w(r[D]&&r[D].prototype,D);w(c,"DOMTokenList")},64762:(E,C,s)=>{"use strict";s.d(C,{ZT:()=>a,fM:()=>f,gn:()=>e,pi:()=>c,w6:()=>m});var r=function(ot,ct){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(qe,He){qe.__proto__=He}||function(qe,He){for(var We in He)Object.prototype.hasOwnProperty.call(He,We)&&(qe[We]=He[We])})(ot,ct)};function a(ot,ct){if("function"!=typeof ct&&null!==ct)throw new TypeError("Class extends value "+String(ct)+" is not a constructor or null");function qe(){this.constructor=ot}r(ot,ct),ot.prototype=null===ct?Object.create(ct):(qe.prototype=ct.prototype,new qe)}var c=function(){return c=Object.assign||function(ct){for(var qe,He=1,We=arguments.length;He<We;He++)for(var Le in qe=arguments[He])Object.prototype.hasOwnProperty.call(qe,Le)&&(ct[Le]=qe[Le]);return ct},c.apply(this,arguments)};function e(ot,ct,qe,He){var Pt,We=arguments.length,Le=We<3?ct:null===He?He=Object.getOwnPropertyDescriptor(ct,qe):He;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Le=Reflect.decorate(ot,ct,qe,He);else for(var it=ot.length-1;it>=0;it--)(Pt=ot[it])&&(Le=(We<3?Pt(Le):We>3?Pt(ct,qe,Le):Pt(ct,qe))||Le);return We>3&&Le&&Object.defineProperty(ct,qe,Le),Le}function f(ot,ct){return function(qe,He){ct(qe,He,ot)}}function m(ot,ct){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(ot,ct)}},46700:(E,C,s)=>{var r={"./af":26431,"./af.js":26431,"./ar":81286,"./ar-dz":1616,"./ar-dz.js":1616,"./ar-kw":9759,"./ar-kw.js":9759,"./ar-ly":43160,"./ar-ly.js":43160,"./ar-ma":62551,"./ar-ma.js":62551,"./ar-sa":79989,"./ar-sa.js":79989,"./ar-tn":6962,"./ar-tn.js":6962,"./ar.js":81286,"./az":15887,"./az.js":15887,"./be":14572,"./be.js":14572,"./bg":3276,"./bg.js":3276,"./bm":93344,"./bm.js":93344,"./bn":58985,"./bn-bd":83990,"./bn-bd.js":83990,"./bn.js":58985,"./bo":94391,"./bo.js":94391,"./br":46728,"./br.js":46728,"./bs":5536,"./bs.js":5536,"./ca":41043,"./ca.js":41043,"./cs":70420,"./cs.js":70420,"./cv":33513,"./cv.js":33513,"./cy":6771,"./cy.js":6771,"./da":47978,"./da.js":47978,"./de":46061,"./de-at":25204,"./de-at.js":25204,"./de-ch":2653,"./de-ch.js":2653,"./de.js":46061,"./dv":85,"./dv.js":85,"./el":8579,"./el.js":8579,"./en-au":25724,"./en-au.js":25724,"./en-ca":10525,"./en-ca.js":10525,"./en-gb":52847,"./en-gb.js":52847,"./en-ie":67216,"./en-ie.js":67216,"./en-il":39305,"./en-il.js":39305,"./en-in":73364,"./en-in.js":73364,"./en-nz":79130,"./en-nz.js":79130,"./en-sg":11161,"./en-sg.js":11161,"./eo":50802,"./eo.js":50802,"./es":40328,"./es-do":45551,"./es-do.js":45551,"./es-mx":75615,"./es-mx.js":75615,"./es-us":64790,"./es-us.js":64790,"./es.js":40328,"./et":96389,"./et.js":96389,"./eu":52961,"./eu.js":52961,"./fa":26151,"./fa.js":26151,"./fi":7997,"./fi.js":7997,"./fil":58898,"./fil.js":58898,"./fo":37779,"./fo.js":37779,"./fr":28174,"./fr-ca":3287,"./fr-ca.js":3287,"./fr-ch":38867,"./fr-ch.js":38867,"./fr.js":28174,"./fy":50452,"./fy.js":50452,"./ga":45014,"./ga.js":45014,"./gd":74127,"./gd.js":74127,"./gl":72124,"./gl.js":72124,"./gom-deva":6444,"./gom-deva.js":6444,"./gom-latn":37953,"./gom-latn.js":37953,"./gu":76604,"./gu.js":76604,"./he":1222,"./he.js":1222,"./hi":74235,"./hi.js":74235,"./hr":622,"./hr.js":622,"./hu":37735,"./hu.js":37735,"./hy-am":90402,"./hy-am.js":90402,"./id":59187,"./id.js":59187,"./is":30536,"./is.js":30536,"./it":35007,"./it-ch":94667,"./it-ch.js":94667,"./it.js":35007,"./ja":62093,"./ja.js":62093,"./jv":80059,"./jv.js":80059,"./ka":66870,"./ka.js":66870,"./kk":80880,"./kk.js":80880,"./km":1083,"./km.js":1083,"./kn":68785,"./kn.js":68785,"./ko":21721,"./ko.js":21721,"./ku":37851,"./ku.js":37851,"./ky":1727,"./ky.js":1727,"./lb":40346,"./lb.js":40346,"./lo":93002,"./lo.js":93002,"./lt":64035,"./lt.js":64035,"./lv":56927,"./lv.js":56927,"./me":5634,"./me.js":5634,"./mi":94173,"./mi.js":94173,"./mk":86320,"./mk.js":86320,"./ml":11705,"./ml.js":11705,"./mn":31062,"./mn.js":31062,"./mr":92805,"./mr.js":92805,"./ms":11341,"./ms-my":59900,"./ms-my.js":59900,"./ms.js":11341,"./mt":37734,"./mt.js":37734,"./my":19034,"./my.js":19034,"./nb":9324,"./nb.js":9324,"./ne":46495,"./ne.js":46495,"./nl":70673,"./nl-be":76272,"./nl-be.js":76272,"./nl.js":70673,"./nn":72486,"./nn.js":72486,"./oc-lnc":46219,"./oc-lnc.js":46219,"./pa-in":2829,"./pa-in.js":2829,"./pl":78444,"./pl.js":78444,"./pt":53170,"./pt-br":66117,"./pt-br.js":66117,"./pt.js":53170,"./ro":96587,"./ro.js":96587,"./ru":39264,"./ru.js":39264,"./sd":42135,"./sd.js":42135,"./se":95366,"./se.js":95366,"./si":93379,"./si.js":93379,"./sk":46143,"./sk.js":46143,"./sl":196,"./sl.js":196,"./sq":21082,"./sq.js":21082,"./sr":91621,"./sr-cyrl":98963,"./sr-cyrl.js":98963,"./sr.js":91621,"./ss":41404,"./ss.js":41404,"./sv":55685,"./sv.js":55685,"./sw":3872,"./sw.js":3872,"./ta":54106,"./ta.js":54106,"./te":39204,"./te.js":39204,"./tet":83692,"./tet.js":83692,"./tg":86361,"./tg.js":86361,"./th":31735,"./th.js":31735,"./tk":1568,"./tk.js":1568,"./tl-ph":96129,"./tl-ph.js":96129,"./tlh":13759,"./tlh.js":13759,"./tr":81644,"./tr.js":81644,"./tzl":90875,"./tzl.js":90875,"./tzm":16878,"./tzm-latn":11041,"./tzm-latn.js":11041,"./tzm.js":16878,"./ug-cn":74357,"./ug-cn.js":74357,"./uk":74810,"./uk.js":74810,"./ur":86794,"./ur.js":86794,"./uz":28966,"./uz-latn":77959,"./uz-latn.js":77959,"./uz.js":28966,"./vi":35386,"./vi.js":35386,"./x-pseudo":23156,"./x-pseudo.js":23156,"./yo":68028,"./yo.js":68028,"./zh-cn":9330,"./zh-cn.js":9330,"./zh-hk":89380,"./zh-hk.js":89380,"./zh-mo":60874,"./zh-mo.js":60874,"./zh-tw":96508,"./zh-tw.js":96508};function a(u){var e=c(u);return s(e)}function c(u){if(!s.o(r,u)){var e=new Error("Cannot find module '"+u+"'");throw e.code="MODULE_NOT_FOUND",e}return r[u]}a.keys=function(){return Object.keys(r)},a.resolve=c,E.exports=a,a.id=46700},24654:()=>{},30071:(E,C,s)=>{E.exports=s(75242)},58711:(E,C,s)=>{E.exports=s(10323)},14226:(E,C,s)=>{E.exports=s(38762)},15886:(E,C,s)=>{E.exports=s(71873)},34377:(E,C,s)=>{E.exports=s(61599)},28086:(E,C,s)=>{E.exports=s(34097)},56166:(E,C,s)=>{E.exports=s(15149)},48129:(E,C,s)=>{E.exports=s(83361)},10068:(E,C,s)=>{E.exports=s(19095)},45163:(E,C,s)=>{E.exports=s(71420)},45819:(E,C,s)=>{E.exports=s(13178)},84901:(E,C,s)=>{E.exports=s(52049)},35524:(E,C,s)=>{E.exports=s(83655)},71851:(E,C,s)=>{E.exports=s(87054)},91465:(E,C,s)=>{E.exports=s(51946)},95327:(E,C,s)=>{E.exports=s(40764)},37940:(E,C,s)=>{E.exports=s(81214)},35431:(E,C,s)=>{E.exports=s(50881)},53757:(E,C,s)=>{E.exports=s(38813)},46558:(E,C,s)=>{E.exports=s(70157)},53625:(E,C,s)=>{E.exports=s(3502)},31978:(E,C,s)=>{E.exports=s(81610)},33814:(E,C,s)=>{E.exports=s(19543)},84220:(E,C,s)=>{E.exports=s(74046)},40984:(E,C,s)=>{E.exports=s(13731)},32322:(E,C,s)=>{E.exports=s(80129)},44859:(E,C,s)=>{E.exports=s(43720)},54082:(E,C,s)=>{E.exports=s(640)},30508:(E,C,s)=>{E.exports=s(50320)},46245:(E,C,s)=>{E.exports=s(1162)},35517:(E,C,s)=>{E.exports=s(70809)},86413:(E,C,s)=>{E.exports=s(26498)},87513:(E,C,s)=>{E.exports=s(12118)},69253:(E,C,s)=>{E.exports=s(70906)},12885:(E,C,s)=>{var r=s(79599).default,a=s(62005),c=s(88819),u=s(41171),e=s(42346),f=s(31236),m=s(63811),T=s(24329),M=s(2793),w=s(44948),D=s(96471);function U(){"use strict";E.exports=U=function(){return $},E.exports.__esModule=!0,E.exports.default=E.exports;var W,$={},J=Object.prototype,F=J.hasOwnProperty,X=a||function(Or,Lr,ir){Or[Lr]=ir.value},de="function"==typeof c?c:{},V=de.iterator||"@@iterator",ce=de.asyncIterator||"@@asyncIterator",se=de.toStringTag||"@@toStringTag";function fe(Or,Lr,ir){return a(Or,Lr,{value:ir,enumerable:!0,configurable:!0,writable:!0}),Or[Lr]}try{fe({},"")}catch{fe=function(ir,Qr,jr){return ir[Qr]=jr}}function Te(Or,Lr,ir,Qr){var br=u((Lr&&Lr.prototype instanceof He?Lr:He).prototype),ht=new xn(Qr||[]);return X(br,"_invoke",{value:At(Or,ir,ht)}),br}function $e(Or,Lr,ir){try{return{type:"normal",arg:Or.call(Lr,ir)}}catch(Qr){return{type:"throw",arg:Qr}}}$.wrap=Te;var ge="suspendedStart",Et="suspendedYield",ot="executing",ct="completed",qe={};function He(){}function We(){}function Le(){}var Pt={};fe(Pt,V,function(){return this});var Xt=e&&e(e(Kr([])));Xt&&Xt!==J&&F.call(Xt,V)&&(Pt=Xt);var cn=Le.prototype=He.prototype=u(Pt);function pn(Or){var Lr;f(Lr=["next","throw","return"]).call(Lr,function(ir){fe(Or,ir,function(Qr){return this._invoke(ir,Qr)})})}function Rn(Or,Lr){function ir(jr,br,ht,Wt){var Tt=$e(Or[jr],Or,br);if("throw"!==Tt.type){var wn=Tt.arg,jn=wn.value;return jn&&"object"==r(jn)&&F.call(jn,"__await")?Lr.resolve(jn.__await).then(function(hr){ir("next",hr,ht,Wt)},function(hr){ir("throw",hr,ht,Wt)}):Lr.resolve(jn).then(function(hr){wn.value=hr,ht(wn)},function(hr){return ir("throw",hr,ht,Wt)})}Wt(Tt.arg)}var Qr;X(this,"_invoke",{value:function(br,ht){function Wt(){return new Lr(function(Tt,wn){ir(br,ht,Tt,wn)})}return Qr=Qr?Qr.then(Wt,Wt):Wt()}})}function At(Or,Lr,ir){var Qr=ge;return function(jr,br){if(Qr===ot)throw new Error("Generator is already running");if(Qr===ct){if("throw"===jr)throw br;return{value:W,done:!0}}for(ir.method=jr,ir.arg=br;;){var ht=ir.delegate;if(ht){var Wt=qt(ht,ir);if(Wt){if(Wt===qe)continue;return Wt}}if("next"===ir.method)ir.sent=ir._sent=ir.arg;else if("throw"===ir.method){if(Qr===ge)throw Qr=ct,ir.arg;ir.dispatchException(ir.arg)}else"return"===ir.method&&ir.abrupt("return",ir.arg);Qr=ot;var Tt=$e(Or,Lr,ir);if("normal"===Tt.type){if(Qr=ir.done?ct:Et,Tt.arg===qe)continue;return{value:Tt.arg,done:ir.done}}"throw"===Tt.type&&(Qr=ct,ir.method="throw",ir.arg=Tt.arg)}}}function qt(Or,Lr){var ir=Lr.method,Qr=Or.iterator[ir];if(Qr===W)return Lr.delegate=null,"throw"===ir&&Or.iterator.return&&(Lr.method="return",Lr.arg=W,qt(Or,Lr),"throw"===Lr.method)||"return"!==ir&&(Lr.method="throw",Lr.arg=new TypeError("The iterator does not provide a '"+ir+"' method")),qe;var jr=$e(Qr,Or.iterator,Lr.arg);if("throw"===jr.type)return Lr.method="throw",Lr.arg=jr.arg,Lr.delegate=null,qe;var br=jr.arg;return br?br.done?(Lr[Or.resultName]=br.value,Lr.next=Or.nextLoc,"return"!==Lr.method&&(Lr.method="next",Lr.arg=W),Lr.delegate=null,qe):br:(Lr.method="throw",Lr.arg=new TypeError("iterator result is not an object"),Lr.delegate=null,qe)}function sn(Or){var Lr,ir={tryLoc:Or[0]};1 in Or&&(ir.catchLoc=Or[1]),2 in Or&&(ir.finallyLoc=Or[2],ir.afterLoc=Or[3]),m(Lr=this.tryEntries).call(Lr,ir)}function fn(Or){var Lr=Or.completion||{};Lr.type="normal",delete Lr.arg,Or.completion=Lr}function xn(Or){this.tryEntries=[{tryLoc:"root"}],f(Or).call(Or,sn,this),this.reset(!0)}function Kr(Or){if(Or||""===Or){var Lr=Or[V];if(Lr)return Lr.call(Or);if("function"==typeof Or.next)return Or;if(!isNaN(Or.length)){var ir=-1,Qr=function jr(){for(;++ir<Or.length;)if(F.call(Or,ir))return jr.value=Or[ir],jr.done=!1,jr;return jr.value=W,jr.done=!0,jr};return Qr.next=Qr}}throw new TypeError(r(Or)+" is not iterable")}return We.prototype=Le,X(cn,"constructor",{value:Le,configurable:!0}),X(Le,"constructor",{value:We,configurable:!0}),We.displayName=fe(Le,se,"GeneratorFunction"),$.isGeneratorFunction=function(Or){var Lr="function"==typeof Or&&Or.constructor;return!!Lr&&(Lr===We||"GeneratorFunction"===(Lr.displayName||Lr.name))},$.mark=function(Or){return T?T(Or,Le):(Or.__proto__=Le,fe(Or,se,"GeneratorFunction")),Or.prototype=u(cn),Or},$.awrap=function(Or){return{__await:Or}},pn(Rn.prototype),fe(Rn.prototype,ce,function(){return this}),$.AsyncIterator=Rn,$.async=function(Or,Lr,ir,Qr,jr){void 0===jr&&(jr=M);var br=new Rn(Te(Or,Lr,ir,Qr),jr);return $.isGeneratorFunction(Lr)?br:br.next().then(function(ht){return ht.done?ht.value:br.next()})},pn(cn),fe(cn,se,"Generator"),fe(cn,V,function(){return this}),fe(cn,"toString",function(){return"[object Generator]"}),$.keys=function(Or){var Lr=Object(Or),ir=[];for(var Qr in Lr)m(ir).call(ir,Qr);return w(ir).call(ir),function jr(){for(;ir.length;){var br=ir.pop();if(br in Lr)return jr.value=br,jr.done=!1,jr}return jr.done=!0,jr}},$.values=Kr,xn.prototype={constructor:xn,reset:function(Lr){var ir;if(this.prev=0,this.next=0,this.sent=this._sent=W,this.done=!1,this.delegate=null,this.method="next",this.arg=W,f(ir=this.tryEntries).call(ir,fn),!Lr)for(var Qr in this)"t"===Qr.charAt(0)&&F.call(this,Qr)&&!isNaN(+D(Qr).call(Qr,1))&&(this[Qr]=W)},stop:function(){this.done=!0;var Lr=this.tryEntries[0].completion;if("throw"===Lr.type)throw Lr.arg;return this.rval},dispatchException:function(Lr){if(this.done)throw Lr;var ir=this;function Qr(wn,jn){return ht.type="throw",ht.arg=Lr,ir.next=wn,jn&&(ir.method="next",ir.arg=W),!!jn}for(var jr=this.tryEntries.length-1;jr>=0;--jr){var br=this.tryEntries[jr],ht=br.completion;if("root"===br.tryLoc)return Qr("end");if(br.tryLoc<=this.prev){var Wt=F.call(br,"catchLoc"),Tt=F.call(br,"finallyLoc");if(Wt&&Tt){if(this.prev<br.catchLoc)return Qr(br.catchLoc,!0);if(this.prev<br.finallyLoc)return Qr(br.finallyLoc)}else if(Wt){if(this.prev<br.catchLoc)return Qr(br.catchLoc,!0)}else{if(!Tt)throw new Error("try statement without catch or finally");if(this.prev<br.finallyLoc)return Qr(br.finallyLoc)}}}},abrupt:function(Lr,ir){for(var Qr=this.tryEntries.length-1;Qr>=0;--Qr){var jr=this.tryEntries[Qr];if(jr.tryLoc<=this.prev&&F.call(jr,"finallyLoc")&&this.prev<jr.finallyLoc){var br=jr;break}}br&&("break"===Lr||"continue"===Lr)&&br.tryLoc<=ir&&ir<=br.finallyLoc&&(br=null);var ht=br?br.completion:{};return ht.type=Lr,ht.arg=ir,br?(this.method="next",this.next=br.finallyLoc,qe):this.complete(ht)},complete:function(Lr,ir){if("throw"===Lr.type)throw Lr.arg;return"break"===Lr.type||"continue"===Lr.type?this.next=Lr.arg:"return"===Lr.type?(this.rval=this.arg=Lr.arg,this.method="return",this.next="end"):"normal"===Lr.type&&ir&&(this.next=ir),qe},finish:function(Lr){for(var ir=this.tryEntries.length-1;ir>=0;--ir){var Qr=this.tryEntries[ir];if(Qr.finallyLoc===Lr)return this.complete(Qr.completion,Qr.afterLoc),fn(Qr),qe}},catch:function(Lr){for(var ir=this.tryEntries.length-1;ir>=0;--ir){var Qr=this.tryEntries[ir];if(Qr.tryLoc===Lr){var jr=Qr.completion;if("throw"===jr.type){var br=jr.arg;fn(Qr)}return br}}throw new Error("illegal catch attempt")},delegateYield:function(Lr,ir,Qr){return this.delegate={iterator:Kr(Lr),resultName:ir,nextLoc:Qr},"next"===this.method&&(this.arg=W),qe}},$}E.exports=U,E.exports.__esModule=!0,E.exports.default=E.exports},79599:(E,C,s)=>{var r=s(88819),a=s(55912);function c(u){return E.exports=c="function"==typeof r&&"symbol"==typeof a?function(e){return typeof e}:function(e){return e&&"function"==typeof r&&e.constructor===r&&e!==r.prototype?"symbol":typeof e},E.exports.__esModule=!0,E.exports.default=E.exports,c(u)}E.exports=c,E.exports.__esModule=!0,E.exports.default=E.exports},33950:(E,C,s)=>{var r=s(12885)();E.exports=r;try{regeneratorRuntime=r}catch{"object"==typeof globalThis?globalThis.regeneratorRuntime=r:Function("r","regeneratorRuntime = r")(r)}},14091:(E,C,s)=>{"use strict";s.d(C,{LC:()=>a,SB:()=>M,X$:()=>u,ZE:()=>V,ZN:()=>de,_j:()=>r,eR:()=>D,jt:()=>e,k1:()=>ce,l3:()=>c,oB:()=>T,vP:()=>m});class r{}class a{}const c="*";function u(se,fe){return{type:7,name:se,definitions:fe,options:{}}}function e(se,fe=null){return{type:4,styles:fe,timings:se}}function m(se,fe=null){return{type:2,steps:se,options:fe}}function T(se){return{type:6,styles:se,offset:null}}function M(se,fe,Te){return{type:0,name:se,styles:fe,options:Te}}function D(se,fe,Te=null){return{type:1,expr:se,animation:fe,options:Te}}function X(se){Promise.resolve().then(se)}class de{constructor(fe=0,Te=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._originalOnDoneFns=[],this._originalOnStartFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=fe+Te}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(fe=>fe()),this._onDoneFns=[])}onStart(fe){this._originalOnStartFns.push(fe),this._onStartFns.push(fe)}onDone(fe){this._originalOnDoneFns.push(fe),this._onDoneFns.push(fe)}onDestroy(fe){this._onDestroyFns.push(fe)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){X(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(fe=>fe()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(fe=>fe()),this._onDestroyFns=[])}reset(){this._started=!1,this._finished=!1,this._onStartFns=this._originalOnStartFns,this._onDoneFns=this._originalOnDoneFns}setPosition(fe){this._position=this.totalTime?fe*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(fe){const Te="start"==fe?this._onStartFns:this._onDoneFns;Te.forEach($e=>$e()),Te.length=0}}class V{constructor(fe){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=fe;let Te=0,$e=0,ge=0;const Et=this.players.length;0==Et?X(()=>this._onFinish()):this.players.forEach(ot=>{ot.onDone(()=>{++Te==Et&&this._onFinish()}),ot.onDestroy(()=>{++$e==Et&&this._onDestroy()}),ot.onStart(()=>{++ge==Et&&this._onStart()})}),this.totalTime=this.players.reduce((ot,ct)=>Math.max(ot,ct.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(fe=>fe()),this._onDoneFns=[])}init(){this.players.forEach(fe=>fe.init())}onStart(fe){this._onStartFns.push(fe)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(fe=>fe()),this._onStartFns=[])}onDone(fe){this._onDoneFns.push(fe)}onDestroy(fe){this._onDestroyFns.push(fe)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(fe=>fe.play())}pause(){this.players.forEach(fe=>fe.pause())}restart(){this.players.forEach(fe=>fe.restart())}finish(){this._onFinish(),this.players.forEach(fe=>fe.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(fe=>fe.destroy()),this._onDestroyFns.forEach(fe=>fe()),this._onDestroyFns=[])}reset(){this.players.forEach(fe=>fe.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(fe){const Te=fe*this.totalTime;this.players.forEach($e=>{const ge=$e.totalTime?Math.min(1,Te/$e.totalTime):1;$e.setPosition(ge)})}getPosition(){const fe=this.players.reduce((Te,$e)=>null===Te||$e.totalTime>Te.totalTime?$e:Te,null);return null!=fe?fe.getPosition():0}beforeDestroy(){this.players.forEach(fe=>{fe.beforeDestroy&&fe.beforeDestroy()})}triggerCallback(fe){const Te="start"==fe?this._onStartFns:this._onDoneFns;Te.forEach($e=>$e()),Te.length=0}}const ce="!"},88692:(E,C,s)=>{"use strict";s.d(C,{Do:()=>V,ED:()=>$a,EM:()=>Ic,Gx:()=>gn,HT:()=>u,JF:()=>El,JJ:()=>qs,K0:()=>f,Mn:()=>Xt,Mx:()=>bn,NF:()=>yu,Nd:()=>ws,O5:()=>la,Ov:()=>Cs,PC:()=>Ts,RF:()=>qa,S$:()=>F,Tn:()=>qe,Ts:()=>Bi,UT:()=>cn,V_:()=>M,Ye:()=>ce,Zx:()=>Js,ax:()=>ss,b0:()=>de,bD:()=>Kc,ez:()=>Ol,gd:()=>io,i8:()=>ns,iq:()=>Ji,mk:()=>_o,mr:()=>X,n9:()=>da,ol:()=>it,p6:()=>Eo,q:()=>c,rS:()=>zr,sg:()=>ss,tP:()=>hs,uU:()=>Ze,w_:()=>e,x:()=>ct,zE:()=>Ha});var r=s(64537);let a=null;function c(){return a}function u(je){a||(a=je)}class e{}const f=new r.OlP("DocumentToken");let m=(()=>{class je{historyGo(tt){throw new Error("Not implemented")}}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275prov=r.Yz7({token:je,factory:function(){return function T(){return(0,r.LFG)(w)}()},providedIn:"platform"}),je})();const M=new r.OlP("Location Initialized");let w=(()=>{class je extends m{constructor(tt){super(),this._doc=tt,this._location=window.location,this._history=window.history}getBaseHrefFromDOM(){return c().getBaseHref(this._doc)}onPopState(tt){const tn=c().getGlobalEventTarget(this._doc,"window");return tn.addEventListener("popstate",tt,!1),()=>tn.removeEventListener("popstate",tt)}onHashChange(tt){const tn=c().getGlobalEventTarget(this._doc,"window");return tn.addEventListener("hashchange",tt,!1),()=>tn.removeEventListener("hashchange",tt)}get href(){return this._location.href}get protocol(){return this._location.protocol}get hostname(){return this._location.hostname}get port(){return this._location.port}get pathname(){return this._location.pathname}get search(){return this._location.search}get hash(){return this._location.hash}set pathname(tt){this._location.pathname=tt}pushState(tt,tn,Xn){D()?this._history.pushState(tt,tn,Xn):this._location.hash=Xn}replaceState(tt,tn,Xn){D()?this._history.replaceState(tt,tn,Xn):this._location.hash=Xn}forward(){this._history.forward()}back(){this._history.back()}historyGo(tt=0){this._history.go(tt)}getState(){return this._history.state}}return je.\u0275fac=function(tt){return new(tt||je)(r.LFG(f))},je.\u0275prov=r.Yz7({token:je,factory:function(){return function U(){return new w((0,r.LFG)(f))}()},providedIn:"platform"}),je})();function D(){return!!window.history.pushState}function W(je,Nt){if(0==je.length)return Nt;if(0==Nt.length)return je;let tt=0;return je.endsWith("/")&&tt++,Nt.startsWith("/")&&tt++,2==tt?je+Nt.substring(1):1==tt?je+Nt:je+"/"+Nt}function $(je){const Nt=je.match(/#|\?|$/),tt=Nt&&Nt.index||je.length;return je.slice(0,tt-("/"===je[tt-1]?1:0))+je.slice(tt)}function J(je){return je&&"?"!==je[0]?"?"+je:je}let F=(()=>{class je{historyGo(tt){throw new Error("Not implemented")}}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275prov=r.Yz7({token:je,factory:function(){return(0,r.f3M)(de)},providedIn:"root"}),je})();const X=new r.OlP("appBaseHref");let de=(()=>{class je extends F{constructor(tt,tn){super(),this._platformLocation=tt,this._removeListenerFns=[],this._baseHref=tn??this._platformLocation.getBaseHrefFromDOM()??(0,r.f3M)(f).location?.origin??""}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(tt){this._removeListenerFns.push(this._platformLocation.onPopState(tt),this._platformLocation.onHashChange(tt))}getBaseHref(){return this._baseHref}prepareExternalUrl(tt){return W(this._baseHref,tt)}path(tt=!1){const tn=this._platformLocation.pathname+J(this._platformLocation.search),Xn=this._platformLocation.hash;return Xn&&tt?`${tn}${Xn}`:tn}pushState(tt,tn,Xn,bi){const Ri=this.prepareExternalUrl(Xn+J(bi));this._platformLocation.pushState(tt,tn,Ri)}replaceState(tt,tn,Xn,bi){const Ri=this.prepareExternalUrl(Xn+J(bi));this._platformLocation.replaceState(tt,tn,Ri)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(tt=0){this._platformLocation.historyGo?.(tt)}}return je.\u0275fac=function(tt){return new(tt||je)(r.LFG(m),r.LFG(X,8))},je.\u0275prov=r.Yz7({token:je,factory:je.\u0275fac,providedIn:"root"}),je})(),V=(()=>{class je extends F{constructor(tt,tn){super(),this._platformLocation=tt,this._baseHref="",this._removeListenerFns=[],null!=tn&&(this._baseHref=tn)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(tt){this._removeListenerFns.push(this._platformLocation.onPopState(tt),this._platformLocation.onHashChange(tt))}getBaseHref(){return this._baseHref}path(tt=!1){let tn=this._platformLocation.hash;return null==tn&&(tn="#"),tn.length>0?tn.substring(1):tn}prepareExternalUrl(tt){const tn=W(this._baseHref,tt);return tn.length>0?"#"+tn:tn}pushState(tt,tn,Xn,bi){let Ri=this.prepareExternalUrl(Xn+J(bi));0==Ri.length&&(Ri=this._platformLocation.pathname),this._platformLocation.pushState(tt,tn,Ri)}replaceState(tt,tn,Xn,bi){let Ri=this.prepareExternalUrl(Xn+J(bi));0==Ri.length&&(Ri=this._platformLocation.pathname),this._platformLocation.replaceState(tt,tn,Ri)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}getState(){return this._platformLocation.getState()}historyGo(tt=0){this._platformLocation.historyGo?.(tt)}}return je.\u0275fac=function(tt){return new(tt||je)(r.LFG(m),r.LFG(X,8))},je.\u0275prov=r.Yz7({token:je,factory:je.\u0275fac}),je})(),ce=(()=>{class je{constructor(tt){this._subject=new r.vpe,this._urlChangeListeners=[],this._urlChangeSubscription=null,this._locationStrategy=tt;const tn=this._locationStrategy.getBaseHref();this._basePath=function $e(je){if(new RegExp("^(https?:)?//").test(je)){const[,tt]=je.split(/\/\/[^\/]+/);return tt}return je}($(Te(tn))),this._locationStrategy.onPopState(Xn=>{this._subject.emit({url:this.path(!0),pop:!0,state:Xn.state,type:Xn.type})})}ngOnDestroy(){this._urlChangeSubscription?.unsubscribe(),this._urlChangeListeners=[]}path(tt=!1){return this.normalize(this._locationStrategy.path(tt))}getState(){return this._locationStrategy.getState()}isCurrentPathEqualTo(tt,tn=""){return this.path()==this.normalize(tt+J(tn))}normalize(tt){return je.stripTrailingSlash(function fe(je,Nt){if(!je||!Nt.startsWith(je))return Nt;const tt=Nt.substring(je.length);return""===tt||["/",";","?","#"].includes(tt[0])?tt:Nt}(this._basePath,Te(tt)))}prepareExternalUrl(tt){return tt&&"/"!==tt[0]&&(tt="/"+tt),this._locationStrategy.prepareExternalUrl(tt)}go(tt,tn="",Xn=null){this._locationStrategy.pushState(Xn,"",tt,tn),this._notifyUrlChangeListeners(this.prepareExternalUrl(tt+J(tn)),Xn)}replaceState(tt,tn="",Xn=null){this._locationStrategy.replaceState(Xn,"",tt,tn),this._notifyUrlChangeListeners(this.prepareExternalUrl(tt+J(tn)),Xn)}forward(){this._locationStrategy.forward()}back(){this._locationStrategy.back()}historyGo(tt=0){this._locationStrategy.historyGo?.(tt)}onUrlChange(tt){return this._urlChangeListeners.push(tt),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(tn=>{this._notifyUrlChangeListeners(tn.url,tn.state)})),()=>{const tn=this._urlChangeListeners.indexOf(tt);this._urlChangeListeners.splice(tn,1),0===this._urlChangeListeners.length&&(this._urlChangeSubscription?.unsubscribe(),this._urlChangeSubscription=null)}}_notifyUrlChangeListeners(tt="",tn){this._urlChangeListeners.forEach(Xn=>Xn(tt,tn))}subscribe(tt,tn,Xn){return this._subject.subscribe({next:tt,error:tn,complete:Xn})}}return je.normalizeQueryParams=J,je.joinWithSlash=W,je.stripTrailingSlash=$,je.\u0275fac=function(tt){return new(tt||je)(r.LFG(F))},je.\u0275prov=r.Yz7({token:je,factory:function(){return function se(){return new ce((0,r.LFG)(F))}()},providedIn:"root"}),je})();function Te(je){return je.replace(/\/index.html$/,"")}var Et=(()=>((Et=Et||{})[Et.Decimal=0]="Decimal",Et[Et.Percent=1]="Percent",Et[Et.Currency=2]="Currency",Et[Et.Scientific=3]="Scientific",Et))(),ot=(()=>((ot=ot||{})[ot.Zero=0]="Zero",ot[ot.One=1]="One",ot[ot.Two=2]="Two",ot[ot.Few=3]="Few",ot[ot.Many=4]="Many",ot[ot.Other=5]="Other",ot))(),ct=(()=>((ct=ct||{})[ct.Format=0]="Format",ct[ct.Standalone=1]="Standalone",ct))(),qe=(()=>((qe=qe||{})[qe.Narrow=0]="Narrow",qe[qe.Abbreviated=1]="Abbreviated",qe[qe.Wide=2]="Wide",qe[qe.Short=3]="Short",qe))(),He=(()=>((He=He||{})[He.Short=0]="Short",He[He.Medium=1]="Medium",He[He.Long=2]="Long",He[He.Full=3]="Full",He))(),We=(()=>((We=We||{})[We.Decimal=0]="Decimal",We[We.Group=1]="Group",We[We.List=2]="List",We[We.PercentSign=3]="PercentSign",We[We.PlusSign=4]="PlusSign",We[We.MinusSign=5]="MinusSign",We[We.Exponential=6]="Exponential",We[We.SuperscriptingExponent=7]="SuperscriptingExponent",We[We.PerMille=8]="PerMille",We[We.Infinity=9]="Infinity",We[We.NaN=10]="NaN",We[We.TimeSeparator=11]="TimeSeparator",We[We.CurrencyDecimal=12]="CurrencyDecimal",We[We.CurrencyGroup=13]="CurrencyGroup",We))();function it(je,Nt,tt){const tn=(0,r.cg1)(je),bi=wn([tn[r.wAp.DayPeriodsFormat],tn[r.wAp.DayPeriodsStandalone]],Nt);return wn(bi,tt)}function Xt(je,Nt,tt){const tn=(0,r.cg1)(je),bi=wn([tn[r.wAp.DaysFormat],tn[r.wAp.DaysStandalone]],Nt);return wn(bi,tt)}function cn(je,Nt,tt){const tn=(0,r.cg1)(je),bi=wn([tn[r.wAp.MonthsFormat],tn[r.wAp.MonthsStandalone]],Nt);return wn(bi,tt)}function qt(je,Nt){return wn((0,r.cg1)(je)[r.wAp.DateFormat],Nt)}function sn(je,Nt){return wn((0,r.cg1)(je)[r.wAp.TimeFormat],Nt)}function fn(je,Nt){return wn((0,r.cg1)(je)[r.wAp.DateTimeFormat],Nt)}function xn(je,Nt){const tt=(0,r.cg1)(je),tn=tt[r.wAp.NumberSymbols][Nt];if(typeof tn>"u"){if(Nt===We.CurrencyDecimal)return tt[r.wAp.NumberSymbols][We.Decimal];if(Nt===We.CurrencyGroup)return tt[r.wAp.NumberSymbols][We.Group]}return tn}function Kr(je,Nt){return(0,r.cg1)(je)[r.wAp.NumberFormats][Nt]}const jr=r.kL8;function br(je){if(!je[r.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${je[r.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function wn(je,Nt){for(let tt=Nt;tt>-1;tt--)if(typeof je[tt]<"u")return je[tt];throw new Error("Locale data API: locale data undefined")}function jn(je){const[Nt,tt]=je.split(":");return{hours:+Nt,minutes:+tt}}const so=/^(\d{4,})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,kr={},Ei=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var ii=(()=>((ii=ii||{})[ii.Short=0]="Short",ii[ii.ShortGMT=1]="ShortGMT",ii[ii.Long=2]="Long",ii[ii.Extended=3]="Extended",ii))(),mr=(()=>((mr=mr||{})[mr.FullYear=0]="FullYear",mr[mr.Month=1]="Month",mr[mr.Date=2]="Date",mr[mr.Hours=3]="Hours",mr[mr.Minutes=4]="Minutes",mr[mr.Seconds=5]="Seconds",mr[mr.FractionalSeconds=6]="FractionalSeconds",mr[mr.Day=7]="Day",mr))(),pr=(()=>((pr=pr||{})[pr.DayPeriods=0]="DayPeriods",pr[pr.Days=1]="Days",pr[pr.Months=2]="Months",pr[pr.Eras=3]="Eras",pr))();function Eo(je,Nt,tt,tn){let Xn=function Zn(je){if(Zt(je))return je;if("number"==typeof je&&!isNaN(je))return new Date(je);if("string"==typeof je){if(je=je.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(je)){const[Xn,bi=1,Ri=1]=je.split("-").map(fs=>+fs);return po(Xn,bi-1,Ri)}const tt=parseFloat(je);if(!isNaN(je-tt))return new Date(tt);let tn;if(tn=je.match(so))return function nr(je){const Nt=new Date(0);let tt=0,tn=0;const Xn=je[8]?Nt.setUTCFullYear:Nt.setFullYear,bi=je[8]?Nt.setUTCHours:Nt.setHours;je[9]&&(tt=Number(je[9]+je[10]),tn=Number(je[9]+je[11])),Xn.call(Nt,Number(je[1]),Number(je[2])-1,Number(je[3]));const Ri=Number(je[4]||0)-tt,fs=Number(je[5]||0)-tn,Fs=Number(je[6]||0),Ra=Math.floor(1e3*parseFloat("0."+(je[7]||0)));return bi.call(Nt,Ri,fs,Fs,Ra),Nt}(tn)}const Nt=new Date(je);if(!Zt(Nt))throw new Error(`Unable to convert "${je}" into a date`);return Nt}(je);Nt=$i(tt,Nt)||Nt;let fs,Ri=[];for(;Nt;){if(fs=Ei.exec(Nt),!fs){Ri.push(Nt);break}{Ri=Ri.concat(fs.slice(1));const Vs=Ri.pop();if(!Vs)break;Nt=Vs}}let Fs=Xn.getTimezoneOffset();tn&&(Fs=_r(tn,Fs),Xn=function tr(je,Nt,tt){const tn=tt?-1:1,Xn=je.getTimezoneOffset();return function Pr(je,Nt){return(je=new Date(je.getTime())).setMinutes(je.getMinutes()+Nt),je}(je,tn*(_r(Nt,Xn)-Xn))}(Xn,tn,!0));let Ra="";return Ri.forEach(Vs=>{const Ms=function Pn(je){if(gr[je])return gr[je];let Nt;switch(je){case"G":case"GG":case"GGG":Nt=Fe(pr.Eras,qe.Abbreviated);break;case"GGGG":Nt=Fe(pr.Eras,qe.Wide);break;case"GGGGG":Nt=Fe(pr.Eras,qe.Narrow);break;case"y":Nt=Hn(mr.FullYear,1,0,!1,!0);break;case"yy":Nt=Hn(mr.FullYear,2,0,!0,!0);break;case"yyy":Nt=Hn(mr.FullYear,3,0,!1,!0);break;case"yyyy":Nt=Hn(mr.FullYear,4,0,!1,!0);break;case"Y":Nt=qn(1);break;case"YY":Nt=qn(2,!0);break;case"YYY":Nt=qn(3);break;case"YYYY":Nt=qn(4);break;case"M":case"L":Nt=Hn(mr.Month,1,1);break;case"MM":case"LL":Nt=Hn(mr.Month,2,1);break;case"MMM":Nt=Fe(pr.Months,qe.Abbreviated);break;case"MMMM":Nt=Fe(pr.Months,qe.Wide);break;case"MMMMM":Nt=Fe(pr.Months,qe.Narrow);break;case"LLL":Nt=Fe(pr.Months,qe.Abbreviated,ct.Standalone);break;case"LLLL":Nt=Fe(pr.Months,qe.Wide,ct.Standalone);break;case"LLLLL":Nt=Fe(pr.Months,qe.Narrow,ct.Standalone);break;case"w":Nt=Pe(1);break;case"ww":Nt=Pe(2);break;case"W":Nt=Pe(1,!0);break;case"d":Nt=Hn(mr.Date,1);break;case"dd":Nt=Hn(mr.Date,2);break;case"c":case"cc":Nt=Hn(mr.Day,1);break;case"ccc":Nt=Fe(pr.Days,qe.Abbreviated,ct.Standalone);break;case"cccc":Nt=Fe(pr.Days,qe.Wide,ct.Standalone);break;case"ccccc":Nt=Fe(pr.Days,qe.Narrow,ct.Standalone);break;case"cccccc":Nt=Fe(pr.Days,qe.Short,ct.Standalone);break;case"E":case"EE":case"EEE":Nt=Fe(pr.Days,qe.Abbreviated);break;case"EEEE":Nt=Fe(pr.Days,qe.Wide);break;case"EEEEE":Nt=Fe(pr.Days,qe.Narrow);break;case"EEEEEE":Nt=Fe(pr.Days,qe.Short);break;case"a":case"aa":case"aaa":Nt=Fe(pr.DayPeriods,qe.Abbreviated);break;case"aaaa":Nt=Fe(pr.DayPeriods,qe.Wide);break;case"aaaaa":Nt=Fe(pr.DayPeriods,qe.Narrow);break;case"b":case"bb":case"bbb":Nt=Fe(pr.DayPeriods,qe.Abbreviated,ct.Standalone,!0);break;case"bbbb":Nt=Fe(pr.DayPeriods,qe.Wide,ct.Standalone,!0);break;case"bbbbb":Nt=Fe(pr.DayPeriods,qe.Narrow,ct.Standalone,!0);break;case"B":case"BB":case"BBB":Nt=Fe(pr.DayPeriods,qe.Abbreviated,ct.Format,!0);break;case"BBBB":Nt=Fe(pr.DayPeriods,qe.Wide,ct.Format,!0);break;case"BBBBB":Nt=Fe(pr.DayPeriods,qe.Narrow,ct.Format,!0);break;case"h":Nt=Hn(mr.Hours,1,-12);break;case"hh":Nt=Hn(mr.Hours,2,-12);break;case"H":Nt=Hn(mr.Hours,1);break;case"HH":Nt=Hn(mr.Hours,2);break;case"m":Nt=Hn(mr.Minutes,1);break;case"mm":Nt=Hn(mr.Minutes,2);break;case"s":Nt=Hn(mr.Seconds,1);break;case"ss":Nt=Hn(mr.Seconds,2);break;case"S":Nt=Hn(mr.FractionalSeconds,1);break;case"SS":Nt=Hn(mr.FractionalSeconds,2);break;case"SSS":Nt=Hn(mr.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":Nt=et(ii.Short);break;case"ZZZZZ":Nt=et(ii.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":Nt=et(ii.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":Nt=et(ii.Long);break;default:return null}return gr[je]=Nt,Nt}(Vs);Ra+=Ms?Ms(Xn,tt,Fs):"''"===Vs?"'":Vs.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Ra}function po(je,Nt,tt){const tn=new Date(0);return tn.setFullYear(je,Nt,tt),tn.setHours(0,0,0),tn}function $i(je,Nt){const tt=function Pt(je){return(0,r.cg1)(je)[r.wAp.LocaleId]}(je);if(kr[tt]=kr[tt]||{},kr[tt][Nt])return kr[tt][Nt];let tn="";switch(Nt){case"shortDate":tn=qt(je,He.Short);break;case"mediumDate":tn=qt(je,He.Medium);break;case"longDate":tn=qt(je,He.Long);break;case"fullDate":tn=qt(je,He.Full);break;case"shortTime":tn=sn(je,He.Short);break;case"mediumTime":tn=sn(je,He.Medium);break;case"longTime":tn=sn(je,He.Long);break;case"fullTime":tn=sn(je,He.Full);break;case"short":const Xn=$i(je,"shortTime"),bi=$i(je,"shortDate");tn=qr(fn(je,He.Short),[Xn,bi]);break;case"medium":const Ri=$i(je,"mediumTime"),fs=$i(je,"mediumDate");tn=qr(fn(je,He.Medium),[Ri,fs]);break;case"long":const Fs=$i(je,"longTime"),Ra=$i(je,"longDate");tn=qr(fn(je,He.Long),[Fs,Ra]);break;case"full":const Vs=$i(je,"fullTime"),Ms=$i(je,"fullDate");tn=qr(fn(je,He.Full),[Vs,Ms])}return tn&&(kr[tt][Nt]=tn),tn}function qr(je,Nt){return Nt&&(je=je.replace(/\{([^}]+)}/g,function(tt,tn){return null!=Nt&&tn in Nt?Nt[tn]:tt})),je}function Hi(je,Nt,tt="-",tn,Xn){let bi="";(je<0||Xn&&je<=0)&&(Xn?je=1-je:(je=-je,bi=tt));let Ri=String(je);for(;Ri.length<Nt;)Ri="0"+Ri;return tn&&(Ri=Ri.slice(Ri.length-Nt)),bi+Ri}function Hn(je,Nt,tt=0,tn=!1,Xn=!1){return function(bi,Ri){let fs=function jt(je,Nt){switch(je){case mr.FullYear:return Nt.getFullYear();case mr.Month:return Nt.getMonth();case mr.Date:return Nt.getDate();case mr.Hours:return Nt.getHours();case mr.Minutes:return Nt.getMinutes();case mr.Seconds:return Nt.getSeconds();case mr.FractionalSeconds:return Nt.getMilliseconds();case mr.Day:return Nt.getDay();default:throw new Error(`Unknown DateType value "${je}".`)}}(je,bi);if((tt>0||fs>-tt)&&(fs+=tt),je===mr.Hours)0===fs&&-12===tt&&(fs=12);else if(je===mr.FractionalSeconds)return function Dn(je,Nt){return Hi(je,3).substring(0,Nt)}(fs,Nt);const Fs=xn(Ri,We.MinusSign);return Hi(fs,Nt,Fs,tn,Xn)}}function Fe(je,Nt,tt=ct.Format,tn=!1){return function(Xn,bi){return function Ie(je,Nt,tt,tn,Xn,bi){switch(tt){case pr.Months:return cn(Nt,Xn,tn)[je.getMonth()];case pr.Days:return Xt(Nt,Xn,tn)[je.getDay()];case pr.DayPeriods:const Ri=je.getHours(),fs=je.getMinutes();if(bi){const Ra=function ht(je){const Nt=(0,r.cg1)(je);return br(Nt),(Nt[r.wAp.ExtraData][2]||[]).map(tn=>"string"==typeof tn?jn(tn):[jn(tn[0]),jn(tn[1])])}(Nt),Vs=function Wt(je,Nt,tt){const tn=(0,r.cg1)(je);br(tn);const bi=wn([tn[r.wAp.ExtraData][0],tn[r.wAp.ExtraData][1]],Nt)||[];return wn(bi,tt)||[]}(Nt,Xn,tn),Ms=Ra.findIndex(wl=>{if(Array.isArray(wl)){const[Ho,Qa]=wl,rn=Ri>=Ho.hours&&fs>=Ho.minutes,Jl=Ri<Qa.hours||Ri===Qa.hours&&fs<Qa.minutes;if(Ho.hours<Qa.hours){if(rn&&Jl)return!0}else if(rn||Jl)return!0}else if(wl.hours===Ri&&wl.minutes===fs)return!0;return!1});if(-1!==Ms)return Vs[Ms]}return it(Nt,Xn,tn)[Ri<12?0:1];case pr.Eras:return function pn(je,Nt){return wn((0,r.cg1)(je)[r.wAp.Eras],Nt)}(Nt,tn)[je.getFullYear()<=0?0:1];default:throw new Error(`unexpected translation type ${tt}`)}}(Xn,bi,je,Nt,tt,tn)}}function et(je){return function(Nt,tt,tn){const Xn=-1*tn,bi=xn(tt,We.MinusSign),Ri=Xn>0?Math.floor(Xn/60):Math.ceil(Xn/60);switch(je){case ii.Short:return(Xn>=0?"+":"")+Hi(Ri,2,bi)+Hi(Math.abs(Xn%60),2,bi);case ii.ShortGMT:return"GMT"+(Xn>=0?"+":"")+Hi(Ri,1,bi);case ii.Long:return"GMT"+(Xn>=0?"+":"")+Hi(Ri,2,bi)+":"+Hi(Math.abs(Xn%60),2,bi);case ii.Extended:return 0===tn?"Z":(Xn>=0?"+":"")+Hi(Ri,2,bi)+":"+Hi(Math.abs(Xn%60),2,bi);default:throw new Error(`Unknown zone width "${je}"`)}}}const ze=0,an=4;function Rt(je){return po(je.getFullYear(),je.getMonth(),je.getDate()+(an-je.getDay()))}function Pe(je,Nt=!1){return function(tt,tn){let Xn;if(Nt){const bi=new Date(tt.getFullYear(),tt.getMonth(),1).getDay()-1,Ri=tt.getDate();Xn=1+Math.floor((Ri+bi)/7)}else{const bi=Rt(tt),Ri=function lt(je){const Nt=po(je,ze,1).getDay();return po(je,0,1+(Nt<=an?an:an+7)-Nt)}(bi.getFullYear()),fs=bi.getTime()-Ri.getTime();Xn=1+Math.round(fs/6048e5)}return Hi(Xn,je,xn(tn,We.MinusSign))}}function qn(je,Nt=!1){return function(tt,tn){return Hi(Rt(tt).getFullYear(),je,xn(tn,We.MinusSign),Nt)}}const gr={};function _r(je,Nt){je=je.replace(/:/g,"");const tt=Date.parse("Jan 01, 1970 00:00:00 "+je)/6e4;return isNaN(tt)?Nt:tt}function Zt(je){return je instanceof Date&&!isNaN(je.valueOf())}const dn=/^(\d+)?\.((\d+)(-(\d+))?)?$/,Ge=22,Ot=".",mn="0",wr=";",Ti=",",Ci="#";function _s(je,Nt,tt,tn,Xn,bi,Ri=!1){let fs="",Fs=!1;if(isFinite(je)){let Ra=function ji(je){let tn,Xn,bi,Ri,fs,Nt=Math.abs(je)+"",tt=0;for((Xn=Nt.indexOf(Ot))>-1&&(Nt=Nt.replace(Ot,"")),(bi=Nt.search(/e/i))>0?(Xn<0&&(Xn=bi),Xn+=+Nt.slice(bi+1),Nt=Nt.substring(0,bi)):Xn<0&&(Xn=Nt.length),bi=0;Nt.charAt(bi)===mn;bi++);if(bi===(fs=Nt.length))tn=[0],Xn=1;else{for(fs--;Nt.charAt(fs)===mn;)fs--;for(Xn-=bi,tn=[],Ri=0;bi<=fs;bi++,Ri++)tn[Ri]=Number(Nt.charAt(bi))}return Xn>Ge&&(tn=tn.splice(0,Ge-1),tt=Xn-1,Xn=1),{digits:tn,exponent:tt,integerLen:Xn}}(je);Ri&&(Ra=function wi(je){if(0===je.digits[0])return je;const Nt=je.digits.length-je.integerLen;return je.exponent?je.exponent+=2:(0===Nt?je.digits.push(0,0):1===Nt&&je.digits.push(0),je.integerLen+=2),je}(Ra));let Vs=Nt.minInt,Ms=Nt.minFrac,wl=Nt.maxFrac;if(bi){const ae=bi.match(dn);if(null===ae)throw new Error(`${bi} is not a valid digit info`);const De=ae[1],Ve=ae[3],st=ae[5];null!=De&&(Vs=Po(De)),null!=Ve&&(Ms=Po(Ve)),null!=st?wl=Po(st):null!=Ve&&Ms>wl&&(wl=Ms)}!function Vi(je,Nt,tt){if(Nt>tt)throw new Error(`The minimum number of digits after fraction (${Nt}) is higher than the maximum (${tt}).`);let tn=je.digits,Xn=tn.length-je.integerLen;const bi=Math.min(Math.max(Nt,Xn),tt);let Ri=bi+je.integerLen,fs=tn[Ri];if(Ri>0){tn.splice(Math.max(je.integerLen,Ri));for(let Ms=Ri;Ms<tn.length;Ms++)tn[Ms]=0}else{Xn=Math.max(0,Xn),je.integerLen=1,tn.length=Math.max(1,Ri=bi+1),tn[0]=0;for(let Ms=1;Ms<Ri;Ms++)tn[Ms]=0}if(fs>=5)if(Ri-1<0){for(let Ms=0;Ms>Ri;Ms--)tn.unshift(0),je.integerLen++;tn.unshift(1),je.integerLen++}else tn[Ri-1]++;for(;Xn<Math.max(0,bi);Xn++)tn.push(0);let Fs=0!==bi;const Ra=Nt+je.integerLen,Vs=tn.reduceRight(function(Ms,wl,Ho,Qa){return Qa[Ho]=(wl+=Ms)<10?wl:wl-10,Fs&&(0===Qa[Ho]&&Ho>=Ra?Qa.pop():Fs=!1),wl>=10?1:0},0);Vs&&(tn.unshift(Vs),je.integerLen++)}(Ra,Ms,wl);let Ho=Ra.digits,Qa=Ra.integerLen;const rn=Ra.exponent;let Jl=[];for(Fs=Ho.every(ae=>!ae);Qa<Vs;Qa++)Ho.unshift(0);for(;Qa<0;Qa++)Ho.unshift(0);Qa>0?Jl=Ho.splice(Qa,Ho.length):(Jl=Ho,Ho=[0]);const le=[];for(Ho.length>=Nt.lgSize&&le.unshift(Ho.splice(-Nt.lgSize,Ho.length).join(""));Ho.length>Nt.gSize;)le.unshift(Ho.splice(-Nt.gSize,Ho.length).join(""));Ho.length&&le.unshift(Ho.join("")),fs=le.join(xn(tt,tn)),Jl.length&&(fs+=xn(tt,Xn)+Jl.join("")),rn&&(fs+=xn(tt,We.Exponential)+"+"+rn)}else fs=xn(tt,We.Infinity);return fs=je<0&&!Fs?Nt.negPre+fs+Nt.negSuf:Nt.posPre+fs+Nt.posSuf,fs}function Vr(je,Nt="-"){const tt={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},tn=je.split(wr),Xn=tn[0],bi=tn[1],Ri=-1!==Xn.indexOf(Ot)?Xn.split(Ot):[Xn.substring(0,Xn.lastIndexOf(mn)+1),Xn.substring(Xn.lastIndexOf(mn)+1)],fs=Ri[0],Fs=Ri[1]||"";tt.posPre=fs.substring(0,fs.indexOf(Ci));for(let Vs=0;Vs<Fs.length;Vs++){const Ms=Fs.charAt(Vs);Ms===mn?tt.minFrac=tt.maxFrac=Vs+1:Ms===Ci?tt.maxFrac=Vs+1:tt.posSuf+=Ms}const Ra=fs.split(Ti);if(tt.gSize=Ra[1]?Ra[1].length:0,tt.lgSize=Ra[2]||Ra[1]?(Ra[2]||Ra[1]).length:0,bi){const Vs=Xn.length-tt.posPre.length-tt.posSuf.length,Ms=bi.indexOf(Ci);tt.negPre=bi.substring(0,Ms).replace(/'/g,""),tt.negSuf=bi.slice(Ms+Vs).replace(/'/g,"")}else tt.negPre=Nt+tt.posPre,tt.negSuf=tt.posSuf;return tt}function Po(je){const Nt=parseInt(je);if(isNaN(Nt))throw new Error("Invalid integer literal when parsing "+je);return Nt}let ko=(()=>{class je{}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275prov=r.Yz7({token:je,factory:function(tt){let tn=null;return tt?tn=new tt:(Xn=r.LFG(r.soG),tn=new ro(Xn)),tn;var Xn},providedIn:"root"}),je})();function Ir(je,Nt,tt,tn){let Xn=`=${je}`;if(Nt.indexOf(Xn)>-1||(Xn=tt.getPluralCategory(je,tn),Nt.indexOf(Xn)>-1))return Xn;if(Nt.indexOf("other")>-1)return"other";throw new Error(`No plural message found for value "${je}"`)}let ro=(()=>{class je extends ko{constructor(tt){super(),this.locale=tt}getPluralCategory(tt,tn){switch(jr(tn||this.locale)(tt)){case ot.Zero:return"zero";case ot.One:return"one";case ot.Two:return"two";case ot.Few:return"few";case ot.Many:return"many";default:return"other"}}}return je.\u0275fac=function(tt){return new(tt||je)(r.LFG(r.soG))},je.\u0275prov=r.Yz7({token:je,factory:je.\u0275fac}),je})();function bn(je,Nt){Nt=encodeURIComponent(Nt);for(const tt of je.split(";")){const tn=tt.indexOf("="),[Xn,bi]=-1==tn?[tt,""]:[tt.slice(0,tn),tt.slice(tn+1)];if(Xn.trim()===Nt)return decodeURIComponent(bi)}return null}const Bn=/\s+/,ci=[];let _o=(()=>{class je{constructor(tt,tn,Xn,bi){this._iterableDiffers=tt,this._keyValueDiffers=tn,this._ngEl=Xn,this._renderer=bi,this.initialClasses=ci,this.stateMap=new Map}set klass(tt){this.initialClasses=null!=tt?tt.trim().split(Bn):ci}set ngClass(tt){this.rawClass="string"==typeof tt?tt.trim().split(Bn):tt}ngDoCheck(){for(const tn of this.initialClasses)this._updateState(tn,!0);const tt=this.rawClass;if(Array.isArray(tt)||tt instanceof Set)for(const tn of tt)this._updateState(tn,!0);else if(null!=tt)for(const tn of Object.keys(tt))this._updateState(tn,Boolean(tt[tn]));this._applyStateDiff()}_updateState(tt,tn){const Xn=this.stateMap.get(tt);void 0!==Xn?(Xn.enabled!==tn&&(Xn.changed=!0,Xn.enabled=tn),Xn.touched=!0):this.stateMap.set(tt,{enabled:tn,changed:!0,touched:!0})}_applyStateDiff(){for(const tt of this.stateMap){const tn=tt[0],Xn=tt[1];Xn.changed?(this._toggleClass(tn,Xn.enabled),Xn.changed=!1):Xn.touched||(Xn.enabled&&this._toggleClass(tn,!1),this.stateMap.delete(tn)),Xn.touched=!1}}_toggleClass(tt,tn){(tt=tt.trim()).length>0&&tt.split(Bn).forEach(Xn=>{tn?this._renderer.addClass(this._ngEl.nativeElement,Xn):this._renderer.removeClass(this._ngEl.nativeElement,Xn)})}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.ZZ4),r.Y36(r.aQg),r.Y36(r.SBq),r.Y36(r.Qsj))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"},standalone:!0}),je})();class jo{constructor(Nt,tt,tn,Xn){this.$implicit=Nt,this.ngForOf=tt,this.index=tn,this.count=Xn}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let ss=(()=>{class je{set ngForOf(tt){this._ngForOf=tt,this._ngForOfDirty=!0}set ngForTrackBy(tt){this._trackByFn=tt}get ngForTrackBy(){return this._trackByFn}constructor(tt,tn,Xn){this._viewContainer=tt,this._template=tn,this._differs=Xn,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForTemplate(tt){tt&&(this._template=tt)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const tt=this._ngForOf;!this._differ&&tt&&(this._differ=this._differs.find(tt).create(this.ngForTrackBy))}if(this._differ){const tt=this._differ.diff(this._ngForOf);tt&&this._applyChanges(tt)}}_applyChanges(tt){const tn=this._viewContainer;tt.forEachOperation((Xn,bi,Ri)=>{if(null==Xn.previousIndex)tn.createEmbeddedView(this._template,new jo(Xn.item,this._ngForOf,-1,-1),null===Ri?void 0:Ri);else if(null==Ri)tn.remove(null===bi?void 0:bi);else if(null!==bi){const fs=tn.get(bi);tn.move(fs,Ri),gs(fs,Xn)}});for(let Xn=0,bi=tn.length;Xn<bi;Xn++){const fs=tn.get(Xn).context;fs.index=Xn,fs.count=bi,fs.ngForOf=this._ngForOf}tt.forEachIdentityChange(Xn=>{gs(tn.get(Xn.currentIndex),Xn)})}static ngTemplateContextGuard(tt,tn){return!0}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(r.ZZ4))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"},standalone:!0}),je})();function gs(je,Nt){je.context.$implicit=Nt.item}let la=(()=>{class je{constructor(tt,tn){this._viewContainer=tt,this._context=new Ro,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=tn}set ngIf(tt){this._context.$implicit=this._context.ngIf=tt,this._updateView()}set ngIfThen(tt){jl("ngIfThen",tt),this._thenTemplateRef=tt,this._thenViewRef=null,this._updateView()}set ngIfElse(tt){jl("ngIfElse",tt),this._elseTemplateRef=tt,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(tt,tn){return!0}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.s_b),r.Y36(r.Rgc))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"},standalone:!0}),je})();class Ro{constructor(){this.$implicit=null,this.ngIf=null}}function jl(je,Nt){if(Nt&&!Nt.createEmbeddedView)throw new Error(`${je} must be a TemplateRef, but received '${(0,r.AaK)(Nt)}'.`)}class gl{constructor(Nt,tt){this._viewContainerRef=Nt,this._templateRef=tt,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(Nt){Nt&&!this._created?this.create():!Nt&&this._created&&this.destroy()}}let qa=(()=>{class je{constructor(){this._defaultViews=[],this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(tt){this._ngSwitch=tt,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(tt){this._defaultViews.push(tt)}_matchCase(tt){const tn=tt==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||tn,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),tn}_updateDefaultCases(tt){if(this._defaultViews.length>0&&tt!==this._defaultUsed){this._defaultUsed=tt;for(const tn of this._defaultViews)tn.enforceState(tt)}}}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275dir=r.lG2({type:je,selectors:[["","ngSwitch",""]],inputs:{ngSwitch:"ngSwitch"},standalone:!0}),je})(),da=(()=>{class je{constructor(tt,tn,Xn){this.ngSwitch=Xn,Xn._addCase(),this._view=new gl(tt,tn)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(qa,9))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngSwitchCase",""]],inputs:{ngSwitchCase:"ngSwitchCase"},standalone:!0}),je})(),$a=(()=>{class je{constructor(tt,tn,Xn){Xn._addDefault(new gl(tt,tn))}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(qa,9))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngSwitchDefault",""]],standalone:!0}),je})(),Ji=(()=>{class je{constructor(tt){this._localization=tt,this._caseViews={}}set ngPlural(tt){this._updateView(tt)}addCase(tt,tn){this._caseViews[tt]=tn}_updateView(tt){this._clearViews();const Xn=Ir(tt,Object.keys(this._caseViews),this._localization);this._activateView(this._caseViews[Xn])}_clearViews(){this._activeView&&this._activeView.destroy()}_activateView(tt){tt&&(this._activeView=tt,this._activeView.create())}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(ko))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngPlural",""]],inputs:{ngPlural:"ngPlural"},standalone:!0}),je})(),Ha=(()=>{class je{constructor(tt,tn,Xn,bi){this.value=tt;const Ri=!isNaN(Number(tt));bi.addCase(Ri?`=${tt}`:tt,new gl(Xn,tn))}}return je.\u0275fac=function(tt){return new(tt||je)(r.$8M("ngPluralCase"),r.Y36(r.Rgc),r.Y36(r.s_b),r.Y36(Ji,1))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngPluralCase",""]],standalone:!0}),je})(),Ts=(()=>{class je{constructor(tt,tn,Xn){this._ngEl=tt,this._differs=tn,this._renderer=Xn,this._ngStyle=null,this._differ=null}set ngStyle(tt){this._ngStyle=tt,!this._differ&&tt&&(this._differ=this._differs.find(tt).create())}ngDoCheck(){if(this._differ){const tt=this._differ.diff(this._ngStyle);tt&&this._applyChanges(tt)}}_setStyle(tt,tn){const[Xn,bi]=tt.split("."),Ri=-1===Xn.indexOf("-")?void 0:r.JOm.DashCase;null!=tn?this._renderer.setStyle(this._ngEl.nativeElement,Xn,bi?`${tn}${bi}`:tn,Ri):this._renderer.removeStyle(this._ngEl.nativeElement,Xn,Ri)}_applyChanges(tt){tt.forEachRemovedItem(tn=>this._setStyle(tn.key,null)),tt.forEachAddedItem(tn=>this._setStyle(tn.key,tn.currentValue)),tt.forEachChangedItem(tn=>this._setStyle(tn.key,tn.currentValue))}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.SBq),r.Y36(r.aQg),r.Y36(r.Qsj))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"},standalone:!0}),je})(),hs=(()=>{class je{constructor(tt){this._viewContainerRef=tt,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null,this.ngTemplateOutletInjector=null}ngOnChanges(tt){if(tt.ngTemplateOutlet||tt.ngTemplateOutletInjector){const tn=this._viewContainerRef;if(this._viewRef&&tn.remove(tn.indexOf(this._viewRef)),this.ngTemplateOutlet){const{ngTemplateOutlet:Xn,ngTemplateOutletContext:bi,ngTemplateOutletInjector:Ri}=this;this._viewRef=tn.createEmbeddedView(Xn,bi,Ri?{injector:Ri}:void 0)}else this._viewRef=null}else this._viewRef&&tt.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.s_b))},je.\u0275dir=r.lG2({type:je,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet",ngTemplateOutletInjector:"ngTemplateOutletInjector"},standalone:!0,features:[r.TTD]}),je})();function Aa(je,Nt){return new r.vHH(2100,!1)}class Ja{createSubscription(Nt,tt){return Nt.subscribe({next:tt,error:tn=>{throw tn}})}dispose(Nt){Nt.unsubscribe()}}class fa{createSubscription(Nt,tt){return Nt.then(tt,tn=>{throw tn})}dispose(Nt){}}const Xo=new fa,No=new Ja;let Cs=(()=>{class je{constructor(tt){this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null,this._ref=tt}ngOnDestroy(){this._subscription&&this._dispose(),this._ref=null}transform(tt){return this._obj?tt!==this._obj?(this._dispose(),this.transform(tt)):this._latestValue:(tt&&this._subscribe(tt),this._latestValue)}_subscribe(tt){this._obj=tt,this._strategy=this._selectStrategy(tt),this._subscription=this._strategy.createSubscription(tt,tn=>this._updateLatestValue(tt,tn))}_selectStrategy(tt){if((0,r.QGY)(tt))return Xo;if((0,r.F4k)(tt))return No;throw Aa()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(tt,tn){tt===this._obj&&(this._latestValue=tn,this._ref.markForCheck())}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.sBO,16))},je.\u0275pipe=r.Yjl({name:"async",type:je,pure:!1,standalone:!0}),je})(),ns=(()=>{class je{transform(tt){if(null==tt)return null;if("string"!=typeof tt)throw Aa();return tt.toLowerCase()}}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275pipe=r.Yjl({name:"lowercase",type:je,pure:!0,standalone:!0}),je})();const Fo=/(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;let zr=(()=>{class je{transform(tt){if(null==tt)return null;if("string"!=typeof tt)throw Aa();return tt.replace(Fo,tn=>tn[0].toUpperCase()+tn.slice(1).toLowerCase())}}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275pipe=r.Yjl({name:"titlecase",type:je,pure:!0,standalone:!0}),je})(),io=(()=>{class je{transform(tt){if(null==tt)return null;if("string"!=typeof tt)throw Aa();return tt.toUpperCase()}}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275pipe=r.Yjl({name:"uppercase",type:je,pure:!0,standalone:!0}),je})();const Tn=new r.OlP("DATE_PIPE_DEFAULT_TIMEZONE"),ie=new r.OlP("DATE_PIPE_DEFAULT_OPTIONS");let Ze=(()=>{class je{constructor(tt,tn,Xn){this.locale=tt,this.defaultTimezone=tn,this.defaultOptions=Xn}transform(tt,tn,Xn,bi){if(null==tt||""===tt||tt!=tt)return null;try{return Eo(tt,tn??this.defaultOptions?.dateFormat??"mediumDate",bi||this.locale,Xn??this.defaultOptions?.timezone??this.defaultTimezone??void 0)}catch(Ri){throw Aa()}}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.soG,16),r.Y36(Tn,24),r.Y36(ie,24))},je.\u0275pipe=r.Yjl({name:"date",type:je,pure:!0,standalone:!0}),je})();const Jt=/#/g;let gn=(()=>{class je{constructor(tt){this._localization=tt}transform(tt,tn,Xn){if(null==tt)return"";if("object"!=typeof tn||null===tn)throw Aa();return tn[Ir(tt,Object.keys(tn),this._localization,Xn)].replace(Jt,tt.toString())}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(ko,16))},je.\u0275pipe=r.Yjl({name:"i18nPlural",type:je,pure:!0,standalone:!0}),je})(),Bi=(()=>{class je{transform(tt){return JSON.stringify(tt,null,2)}}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275pipe=r.Yjl({name:"json",type:je,pure:!1,standalone:!0}),je})(),ws=(()=>{class je{constructor(tt){this.differs=tt,this.keyValues=[],this.compareFn=ds}transform(tt,tn=ds){if(!tt||!(tt instanceof Map)&&"object"!=typeof tt)return null;this.differ||(this.differ=this.differs.find(tt).create());const Xn=this.differ.diff(tt),bi=tn!==this.compareFn;return Xn&&(this.keyValues=[],Xn.forEachItem(Ri=>{this.keyValues.push(function Xi(je,Nt){return{key:je,value:Nt}}(Ri.key,Ri.currentValue))})),(Xn||bi)&&(this.keyValues.sort(tn),this.compareFn=tn),this.keyValues}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.aQg,16))},je.\u0275pipe=r.Yjl({name:"keyvalue",type:je,pure:!1,standalone:!0}),je})();function ds(je,Nt){const tt=je.key,tn=Nt.key;if(tt===tn)return 0;if(void 0===tt)return 1;if(void 0===tn)return-1;if(null===tt)return 1;if(null===tn)return-1;if("string"==typeof tt&&"string"==typeof tn)return tt<tn?-1:1;if("number"==typeof tt&&"number"==typeof tn)return tt-tn;if("boolean"==typeof tt&&"boolean"==typeof tn)return tt<tn?-1:1;const Xn=String(tt),bi=String(tn);return Xn==bi?0:Xn<bi?-1:1}let qs=(()=>{class je{constructor(tt){this._locale=tt}transform(tt,tn,Xn){if(!vl(tt))return null;Xn=Xn||this._locale;try{return function ti(je,Nt,tt){return _s(je,Vr(Kr(Nt,Et.Decimal),xn(Nt,We.MinusSign)),Nt,We.Group,We.Decimal,tt)}(Yu(tt),Xn,tn)}catch(bi){throw Aa()}}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.soG,16))},je.\u0275pipe=r.Yjl({name:"number",type:je,pure:!0,standalone:!0}),je})(),Js=(()=>{class je{constructor(tt){this._locale=tt}transform(tt,tn,Xn){if(!vl(tt))return null;Xn=Xn||this._locale;try{return function Ni(je,Nt,tt){return _s(je,Vr(Kr(Nt,Et.Percent),xn(Nt,We.MinusSign)),Nt,We.Group,We.Decimal,tt,!0).replace(new RegExp("%","g"),xn(Nt,We.PercentSign))}(Yu(tt),Xn,tn)}catch(bi){throw Aa()}}}return je.\u0275fac=function(tt){return new(tt||je)(r.Y36(r.soG,16))},je.\u0275pipe=r.Yjl({name:"percent",type:je,pure:!0,standalone:!0}),je})();function vl(je){return!(null==je||""===je||je!=je)}function Yu(je){if("string"==typeof je&&!isNaN(Number(je)-parseFloat(je)))return Number(je);if("number"!=typeof je)throw new Error(`${je} is not a number`);return je}let Ol=(()=>{class je{}return je.\u0275fac=function(tt){return new(tt||je)},je.\u0275mod=r.oAB({type:je}),je.\u0275inj=r.cJS({}),je})();const Kc="browser";function yu(je){return je===Kc}let Ic=(()=>{class je{}return je.\u0275prov=(0,r.Yz7)({token:je,providedIn:"root",factory:()=>new Gs((0,r.LFG)(f),window)}),je})();class Gs{constructor(Nt,tt){this.document=Nt,this.window=tt,this.offset=()=>[0,0]}setOffset(Nt){this.offset=Array.isArray(Nt)?()=>Nt:Nt}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(Nt){this.supportsScrolling()&&this.window.scrollTo(Nt[0],Nt[1])}scrollToAnchor(Nt){if(!this.supportsScrolling())return;const tt=function zu(je,Nt){const tt=je.getElementById(Nt)||je.getElementsByName(Nt)[0];if(tt)return tt;if("function"==typeof je.createTreeWalker&&je.body&&(je.body.createShadowRoot||je.body.attachShadow)){const tn=je.createTreeWalker(je.body,NodeFilter.SHOW_ELEMENT);let Xn=tn.currentNode;for(;Xn;){const bi=Xn.shadowRoot;if(bi){const Ri=bi.getElementById(Nt)||bi.querySelector(`[name="${Nt}"]`);if(Ri)return Ri}Xn=tn.nextNode()}}return null}(this.document,Nt);tt&&(this.scrollToElement(tt),tt.focus())}setHistoryScrollRestoration(Nt){if(this.supportScrollRestoration()){const tt=this.window.history;tt&&tt.scrollRestoration&&(tt.scrollRestoration=Nt)}}scrollToElement(Nt){const tt=Nt.getBoundingClientRect(),tn=tt.left+this.window.pageXOffset,Xn=tt.top+this.window.pageYOffset,bi=this.offset();this.window.scrollTo(tn-bi[0],Xn-bi[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const Nt=ku(this.window.history)||ku(Object.getPrototypeOf(this.window.history));return!(!Nt||!Nt.writable&&!Nt.set)}catch{return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch{return!1}}}function ku(je){return Object.getOwnPropertyDescriptor(je,"scrollRestoration")}class El{}},35732:(E,C,s)=>{"use strict";s.d(C,{JF:()=>et,LE:()=>de,TP:()=>pn,UA:()=>We,eN:()=>Pt});var r=s(88692),a=s(64537),c=s(25917),u=s(70882),e=s(94612),f=s(45435),m=s(88002);class T{}class M{}class w{constructor(Rt){this.normalizedNames=new Map,this.lazyUpdate=null,Rt?this.lazyInit="string"==typeof Rt?()=>{this.headers=new Map,Rt.split("\n").forEach(Pe=>{const qn=Pe.indexOf(":");if(qn>0){const gr=Pe.slice(0,qn),Pn=gr.toLowerCase(),_r=Pe.slice(qn+1).trim();this.maybeSetNormalizedName(gr,Pn),this.headers.has(Pn)?this.headers.get(Pn).push(_r):this.headers.set(Pn,[_r])}})}:()=>{this.headers=new Map,Object.entries(Rt).forEach(([Pe,qn])=>{let gr;if(gr="string"==typeof qn?[qn]:"number"==typeof qn?[qn.toString()]:qn.map(Pn=>Pn.toString()),gr.length>0){const Pn=Pe.toLowerCase();this.headers.set(Pn,gr),this.maybeSetNormalizedName(Pe,Pn)}})}:this.headers=new Map}has(Rt){return this.init(),this.headers.has(Rt.toLowerCase())}get(Rt){this.init();const Pe=this.headers.get(Rt.toLowerCase());return Pe&&Pe.length>0?Pe[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(Rt){return this.init(),this.headers.get(Rt.toLowerCase())||null}append(Rt,Pe){return this.clone({name:Rt,value:Pe,op:"a"})}set(Rt,Pe){return this.clone({name:Rt,value:Pe,op:"s"})}delete(Rt,Pe){return this.clone({name:Rt,value:Pe,op:"d"})}maybeSetNormalizedName(Rt,Pe){this.normalizedNames.has(Pe)||this.normalizedNames.set(Pe,Rt)}init(){this.lazyInit&&(this.lazyInit instanceof w?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(Rt=>this.applyUpdate(Rt)),this.lazyUpdate=null))}copyFrom(Rt){Rt.init(),Array.from(Rt.headers.keys()).forEach(Pe=>{this.headers.set(Pe,Rt.headers.get(Pe)),this.normalizedNames.set(Pe,Rt.normalizedNames.get(Pe))})}clone(Rt){const Pe=new w;return Pe.lazyInit=this.lazyInit&&this.lazyInit instanceof w?this.lazyInit:this,Pe.lazyUpdate=(this.lazyUpdate||[]).concat([Rt]),Pe}applyUpdate(Rt){const Pe=Rt.name.toLowerCase();switch(Rt.op){case"a":case"s":let qn=Rt.value;if("string"==typeof qn&&(qn=[qn]),0===qn.length)return;this.maybeSetNormalizedName(Rt.name,Pe);const gr=("a"===Rt.op?this.headers.get(Pe):void 0)||[];gr.push(...qn),this.headers.set(Pe,gr);break;case"d":const Pn=Rt.value;if(Pn){let _r=this.headers.get(Pe);if(!_r)return;_r=_r.filter(Pr=>-1===Pn.indexOf(Pr)),0===_r.length?(this.headers.delete(Pe),this.normalizedNames.delete(Pe)):this.headers.set(Pe,_r)}else this.headers.delete(Pe),this.normalizedNames.delete(Pe)}}forEach(Rt){this.init(),Array.from(this.normalizedNames.keys()).forEach(Pe=>Rt(this.normalizedNames.get(Pe),this.headers.get(Pe)))}}class U{encodeKey(Rt){return F(Rt)}encodeValue(Rt){return F(Rt)}decodeKey(Rt){return decodeURIComponent(Rt)}decodeValue(Rt){return decodeURIComponent(Rt)}}const $=/%(\d[a-f0-9])/gi,J={40:"@","3A":":",24:"$","2C":",","3B":";","3D":"=","3F":"?","2F":"/"};function F(lt){return encodeURIComponent(lt).replace($,(Rt,Pe)=>J[Pe]??Rt)}function X(lt){return`${lt}`}class de{constructor(Rt={}){if(this.updates=null,this.cloneFrom=null,this.encoder=Rt.encoder||new U,Rt.fromString){if(Rt.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function W(lt,Rt){const Pe=new Map;return lt.length>0&&lt.replace(/^\?/,"").split("&").forEach(gr=>{const Pn=gr.indexOf("="),[_r,Pr]=-1==Pn?[Rt.decodeKey(gr),""]:[Rt.decodeKey(gr.slice(0,Pn)),Rt.decodeValue(gr.slice(Pn+1))],tr=Pe.get(_r)||[];tr.push(Pr),Pe.set(_r,tr)}),Pe}(Rt.fromString,this.encoder)}else Rt.fromObject?(this.map=new Map,Object.keys(Rt.fromObject).forEach(Pe=>{const qn=Rt.fromObject[Pe],gr=Array.isArray(qn)?qn.map(X):[X(qn)];this.map.set(Pe,gr)})):this.map=null}has(Rt){return this.init(),this.map.has(Rt)}get(Rt){this.init();const Pe=this.map.get(Rt);return Pe?Pe[0]:null}getAll(Rt){return this.init(),this.map.get(Rt)||null}keys(){return this.init(),Array.from(this.map.keys())}append(Rt,Pe){return this.clone({param:Rt,value:Pe,op:"a"})}appendAll(Rt){const Pe=[];return Object.keys(Rt).forEach(qn=>{const gr=Rt[qn];Array.isArray(gr)?gr.forEach(Pn=>{Pe.push({param:qn,value:Pn,op:"a"})}):Pe.push({param:qn,value:gr,op:"a"})}),this.clone(Pe)}set(Rt,Pe){return this.clone({param:Rt,value:Pe,op:"s"})}delete(Rt,Pe){return this.clone({param:Rt,value:Pe,op:"d"})}toString(){return this.init(),this.keys().map(Rt=>{const Pe=this.encoder.encodeKey(Rt);return this.map.get(Rt).map(qn=>Pe+"="+this.encoder.encodeValue(qn)).join("&")}).filter(Rt=>""!==Rt).join("&")}clone(Rt){const Pe=new de({encoder:this.encoder});return Pe.cloneFrom=this.cloneFrom||this,Pe.updates=(this.updates||[]).concat(Rt),Pe}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(Rt=>this.map.set(Rt,this.cloneFrom.map.get(Rt))),this.updates.forEach(Rt=>{switch(Rt.op){case"a":case"s":const Pe=("a"===Rt.op?this.map.get(Rt.param):void 0)||[];Pe.push(X(Rt.value)),this.map.set(Rt.param,Pe);break;case"d":if(void 0===Rt.value){this.map.delete(Rt.param);break}{let qn=this.map.get(Rt.param)||[];const gr=qn.indexOf(X(Rt.value));-1!==gr&&qn.splice(gr,1),qn.length>0?this.map.set(Rt.param,qn):this.map.delete(Rt.param)}}}),this.cloneFrom=this.updates=null)}}class ce{constructor(){this.map=new Map}set(Rt,Pe){return this.map.set(Rt,Pe),this}get(Rt){return this.map.has(Rt)||this.map.set(Rt,Rt.defaultValue()),this.map.get(Rt)}delete(Rt){return this.map.delete(Rt),this}has(Rt){return this.map.has(Rt)}keys(){return this.map.keys()}}function fe(lt){return typeof ArrayBuffer<"u"&&lt instanceof ArrayBuffer}function Te(lt){return typeof Blob<"u"&&lt instanceof Blob}function $e(lt){return typeof FormData<"u"&&lt instanceof FormData}class Et{constructor(Rt,Pe,qn,gr){let Pn;if(this.url=Pe,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=Rt.toUpperCase(),function se(lt){switch(lt){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||gr?(this.body=void 0!==qn?qn:null,Pn=gr):Pn=qn,Pn&&(this.reportProgress=!!Pn.reportProgress,this.withCredentials=!!Pn.withCredentials,Pn.responseType&&(this.responseType=Pn.responseType),Pn.headers&&(this.headers=Pn.headers),Pn.context&&(this.context=Pn.context),Pn.params&&(this.params=Pn.params)),this.headers||(this.headers=new w),this.context||(this.context=new ce),this.params){const _r=this.params.toString();if(0===_r.length)this.urlWithParams=Pe;else{const Pr=Pe.indexOf("?");this.urlWithParams=Pe+(-1===Pr?"?":Pr<Pe.length-1?"&":"")+_r}}else this.params=new de,this.urlWithParams=Pe}serializeBody(){return null===this.body?null:fe(this.body)||Te(this.body)||$e(this.body)||function ge(lt){return typeof URLSearchParams<"u"&&lt instanceof URLSearchParams}(this.body)||"string"==typeof this.body?this.body:this.body instanceof de?this.body.toString():"object"==typeof this.body||"boolean"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()}detectContentTypeHeader(){return null===this.body||$e(this.body)?null:Te(this.body)?this.body.type||null:fe(this.body)?null:"string"==typeof this.body?"text/plain":this.body instanceof de?"application/x-www-form-urlencoded;charset=UTF-8":"object"==typeof this.body||"number"==typeof this.body||"boolean"==typeof this.body?"application/json":null}clone(Rt={}){const Pe=Rt.method||this.method,qn=Rt.url||this.url,gr=Rt.responseType||this.responseType,Pn=void 0!==Rt.body?Rt.body:this.body,_r=void 0!==Rt.withCredentials?Rt.withCredentials:this.withCredentials,Pr=void 0!==Rt.reportProgress?Rt.reportProgress:this.reportProgress;let tr=Rt.headers||this.headers,Zn=Rt.params||this.params;const nr=Rt.context??this.context;return void 0!==Rt.setHeaders&&(tr=Object.keys(Rt.setHeaders).reduce((Zt,dn)=>Zt.set(dn,Rt.setHeaders[dn]),tr)),Rt.setParams&&(Zn=Object.keys(Rt.setParams).reduce((Zt,dn)=>Zt.set(dn,Rt.setParams[dn]),Zn)),new Et(Pe,qn,Pn,{params:Zn,headers:tr,context:nr,reportProgress:Pr,responseType:gr,withCredentials:_r})}}var ot=(()=>((ot=ot||{})[ot.Sent=0]="Sent",ot[ot.UploadProgress=1]="UploadProgress",ot[ot.ResponseHeader=2]="ResponseHeader",ot[ot.DownloadProgress=3]="DownloadProgress",ot[ot.Response=4]="Response",ot[ot.User=5]="User",ot))();class ct{constructor(Rt,Pe=200,qn="OK"){this.headers=Rt.headers||new w,this.status=void 0!==Rt.status?Rt.status:Pe,this.statusText=Rt.statusText||qn,this.url=Rt.url||null,this.ok=this.status>=200&&this.status<300}}class qe extends ct{constructor(Rt={}){super(Rt),this.type=ot.ResponseHeader}clone(Rt={}){return new qe({headers:Rt.headers||this.headers,status:void 0!==Rt.status?Rt.status:this.status,statusText:Rt.statusText||this.statusText,url:Rt.url||this.url||void 0})}}class He extends ct{constructor(Rt={}){super(Rt),this.type=ot.Response,this.body=void 0!==Rt.body?Rt.body:null}clone(Rt={}){return new He({body:void 0!==Rt.body?Rt.body:this.body,headers:Rt.headers||this.headers,status:void 0!==Rt.status?Rt.status:this.status,statusText:Rt.statusText||this.statusText,url:Rt.url||this.url||void 0})}}class We extends ct{constructor(Rt){super(Rt,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${Rt.url||"(unknown url)"}`:`Http failure response for ${Rt.url||"(unknown url)"}: ${Rt.status} ${Rt.statusText}`,this.error=Rt.error||null}}function Le(lt,Rt){return{body:Rt,headers:lt.headers,context:lt.context,observe:lt.observe,params:lt.params,reportProgress:lt.reportProgress,responseType:lt.responseType,withCredentials:lt.withCredentials}}let Pt=(()=>{class lt{constructor(Pe){this.handler=Pe}request(Pe,qn,gr={}){let Pn;if(Pe instanceof Et)Pn=Pe;else{let tr,Zn;tr=gr.headers instanceof w?gr.headers:new w(gr.headers),gr.params&&(Zn=gr.params instanceof de?gr.params:new de({fromObject:gr.params})),Pn=new Et(Pe,qn,void 0!==gr.body?gr.body:null,{headers:tr,context:gr.context,params:Zn,reportProgress:gr.reportProgress,responseType:gr.responseType||"json",withCredentials:gr.withCredentials})}const _r=(0,c.of)(Pn).pipe((0,e.b)(tr=>this.handler.handle(tr)));if(Pe instanceof Et||"events"===gr.observe)return _r;const Pr=_r.pipe((0,f.h)(tr=>tr instanceof He));switch(gr.observe||"body"){case"body":switch(Pn.responseType){case"arraybuffer":return Pr.pipe((0,m.U)(tr=>{if(null!==tr.body&&!(tr.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return tr.body}));case"blob":return Pr.pipe((0,m.U)(tr=>{if(null!==tr.body&&!(tr.body instanceof Blob))throw new Error("Response is not a Blob.");return tr.body}));case"text":return Pr.pipe((0,m.U)(tr=>{if(null!==tr.body&&"string"!=typeof tr.body)throw new Error("Response is not a string.");return tr.body}));default:return Pr.pipe((0,m.U)(tr=>tr.body))}case"response":return Pr;default:throw new Error(`Unreachable: unhandled observe type ${gr.observe}}`)}}delete(Pe,qn={}){return this.request("DELETE",Pe,qn)}get(Pe,qn={}){return this.request("GET",Pe,qn)}head(Pe,qn={}){return this.request("HEAD",Pe,qn)}jsonp(Pe,qn){return this.request("JSONP",Pe,{params:(new de).append(qn,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(Pe,qn={}){return this.request("OPTIONS",Pe,qn)}patch(Pe,qn,gr={}){return this.request("PATCH",Pe,Le(gr,qn))}post(Pe,qn,gr={}){return this.request("POST",Pe,Le(gr,qn))}put(Pe,qn,gr={}){return this.request("PUT",Pe,Le(gr,qn))}}return lt.\u0275fac=function(Pe){return new(Pe||lt)(a.LFG(T))},lt.\u0275prov=a.Yz7({token:lt,factory:lt.\u0275fac}),lt})();function it(lt,Rt){return Rt(lt)}function Xt(lt,Rt){return(Pe,qn)=>Rt.intercept(Pe,{handle:gr=>lt(gr,qn)})}const pn=new a.OlP("HTTP_INTERCEPTORS"),Rn=new a.OlP("HTTP_INTERCEPTOR_FNS");function At(){let lt=null;return(Rt,Pe)=>(null===lt&&(lt=((0,a.f3M)(pn,{optional:!0})??[]).reduceRight(Xt,it)),lt(Rt,Pe))}let qt=(()=>{class lt extends T{constructor(Pe,qn){super(),this.backend=Pe,this.injector=qn,this.chain=null}handle(Pe){if(null===this.chain){const qn=Array.from(new Set(this.injector.get(Rn)));this.chain=qn.reduceRight((gr,Pn)=>function cn(lt,Rt,Pe){return(qn,gr)=>Pe.runInContext(()=>Rt(qn,Pn=>lt(Pn,gr)))}(gr,Pn,this.injector),it)}return this.chain(Pe,qn=>this.backend.handle(qn))}}return lt.\u0275fac=function(Pe){return new(Pe||lt)(a.LFG(M),a.LFG(a.lqb))},lt.\u0275prov=a.Yz7({token:lt,factory:lt.\u0275fac}),lt})();const Wt=/^\)\]\}',?\n/;let wn=(()=>{class lt{constructor(Pe){this.xhrFactory=Pe}handle(Pe){if("JSONP"===Pe.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new u.y(qn=>{const gr=this.xhrFactory.build();if(gr.open(Pe.method,Pe.urlWithParams),Pe.withCredentials&&(gr.withCredentials=!0),Pe.headers.forEach((Ge,Ot)=>gr.setRequestHeader(Ge,Ot.join(","))),Pe.headers.has("Accept")||gr.setRequestHeader("Accept","application/json, text/plain, */*"),!Pe.headers.has("Content-Type")){const Ge=Pe.detectContentTypeHeader();null!==Ge&&gr.setRequestHeader("Content-Type",Ge)}if(Pe.responseType){const Ge=Pe.responseType.toLowerCase();gr.responseType="json"!==Ge?Ge:"text"}const Pn=Pe.serializeBody();let _r=null;const Pr=()=>{if(null!==_r)return _r;const Ge=gr.statusText||"OK",Ot=new w(gr.getAllResponseHeaders()),mn=function Tt(lt){return"responseURL"in lt&&lt.responseURL?lt.responseURL:/^X-Request-URL:/m.test(lt.getAllResponseHeaders())?lt.getResponseHeader("X-Request-URL"):null}(gr)||Pe.url;return _r=new qe({headers:Ot,status:gr.status,statusText:Ge,url:mn}),_r},tr=()=>{let{headers:Ge,status:Ot,statusText:mn,url:wr}=Pr(),Ti=null;204!==Ot&&(Ti=typeof gr.response>"u"?gr.responseText:gr.response),0===Ot&&(Ot=Ti?200:0);let Ci=Ot>=200&&Ot<300;if("json"===Pe.responseType&&"string"==typeof Ti){const Ai=Ti;Ti=Ti.replace(Wt,"");try{Ti=""!==Ti?JSON.parse(Ti):null}catch(Ko){Ti=Ai,Ci&&(Ci=!1,Ti={error:Ko,text:Ti})}}Ci?(qn.next(new He({body:Ti,headers:Ge,status:Ot,statusText:mn,url:wr||void 0})),qn.complete()):qn.error(new We({error:Ti,headers:Ge,status:Ot,statusText:mn,url:wr||void 0}))},Zn=Ge=>{const{url:Ot}=Pr(),mn=new We({error:Ge,status:gr.status||0,statusText:gr.statusText||"Unknown Error",url:Ot||void 0});qn.error(mn)};let nr=!1;const Zt=Ge=>{nr||(qn.next(Pr()),nr=!0);let Ot={type:ot.DownloadProgress,loaded:Ge.loaded};Ge.lengthComputable&&(Ot.total=Ge.total),"text"===Pe.responseType&&gr.responseText&&(Ot.partialText=gr.responseText),qn.next(Ot)},dn=Ge=>{let Ot={type:ot.UploadProgress,loaded:Ge.loaded};Ge.lengthComputable&&(Ot.total=Ge.total),qn.next(Ot)};return gr.addEventListener("load",tr),gr.addEventListener("error",Zn),gr.addEventListener("timeout",Zn),gr.addEventListener("abort",Zn),Pe.reportProgress&&(gr.addEventListener("progress",Zt),null!==Pn&&gr.upload&&gr.upload.addEventListener("progress",dn)),gr.send(Pn),qn.next({type:ot.Sent}),()=>{gr.removeEventListener("error",Zn),gr.removeEventListener("abort",Zn),gr.removeEventListener("load",tr),gr.removeEventListener("timeout",Zn),Pe.reportProgress&&(gr.removeEventListener("progress",Zt),null!==Pn&&gr.upload&&gr.upload.removeEventListener("progress",dn)),gr.readyState!==gr.DONE&&gr.abort()}})}}return lt.\u0275fac=function(Pe){return new(Pe||lt)(a.LFG(r.JF))},lt.\u0275prov=a.Yz7({token:lt,factory:lt.\u0275fac}),lt})();const jn=new a.OlP("XSRF_ENABLED"),Oi=new a.OlP("XSRF_COOKIE_NAME",{providedIn:"root",factory:()=>"XSRF-TOKEN"}),so=new a.OlP("XSRF_HEADER_NAME",{providedIn:"root",factory:()=>"X-XSRF-TOKEN"});class kr{}let Ei=(()=>{class lt{constructor(Pe,qn,gr){this.doc=Pe,this.platform=qn,this.cookieName=gr,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const Pe=this.doc.cookie||"";return Pe!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,r.Mx)(Pe,this.cookieName),this.lastCookieString=Pe),this.lastToken}}return lt.\u0275fac=function(Pe){return new(Pe||lt)(a.LFG(r.K0),a.LFG(a.Lbi),a.LFG(Oi))},lt.\u0275prov=a.Yz7({token:lt,factory:lt.\u0275fac}),lt})();function ii(lt,Rt){const Pe=lt.url.toLowerCase();if(!(0,a.f3M)(jn)||"GET"===lt.method||"HEAD"===lt.method||Pe.startsWith("http://")||Pe.startsWith("https://"))return Rt(lt);const qn=(0,a.f3M)(kr).getToken(),gr=(0,a.f3M)(so);return null!=qn&&!lt.headers.has(gr)&&(lt=lt.clone({headers:lt.headers.set(gr,qn)})),Rt(lt)}var pr=(()=>((pr=pr||{})[pr.Interceptors=0]="Interceptors",pr[pr.LegacyInterceptors=1]="LegacyInterceptors",pr[pr.CustomXsrfConfiguration=2]="CustomXsrfConfiguration",pr[pr.NoXsrfProtection=3]="NoXsrfProtection",pr[pr.JsonpSupport=4]="JsonpSupport",pr[pr.RequestsMadeViaParent=5]="RequestsMadeViaParent",pr))();function Eo(lt,Rt){return{\u0275kind:lt,\u0275providers:Rt}}function po(...lt){const Rt=[Pt,wn,qt,{provide:T,useExisting:qt},{provide:M,useExisting:wn},{provide:Rn,useValue:ii,multi:!0},{provide:jn,useValue:!0},{provide:kr,useClass:Ei}];for(const Pe of lt)Rt.push(...Pe.\u0275providers);return(0,a.MR2)(Rt)}const qr=new a.OlP("LEGACY_INTERCEPTOR_FN");let et=(()=>{class lt{}return lt.\u0275fac=function(Pe){return new(Pe||lt)},lt.\u0275mod=a.oAB({type:lt}),lt.\u0275inj=a.cJS({providers:[po(Eo(pr.LegacyInterceptors,[{provide:qr,useFactory:At},{provide:Rn,useExisting:qr,multi:!0}]))]}),lt})()},64537:(E,C,s)=>{"use strict";s.d(C,{$8M:()=>Os,$WT:()=>ko,$Z:()=>Dv,AFp:()=>OT,ALo:()=>Yb,AaK:()=>T,AsE:()=>o0,BQk:()=>e1,CHM:()=>Qs,CRH:()=>tT,CZH:()=>tg,CqO:()=>n0,D6c:()=>aA,DdM:()=>wb,Dn7:()=>Vb,DtL:()=>gb,DyG:()=>Ud,EJc:()=>SO,EiD:()=>wh,EpF:()=>e0,F$t:()=>Jr,F4k:()=>t0,FYo:()=>vo,FiY:()=>k,G48:()=>GO,Gf:()=>qb,GfV:()=>Cl,GkF:()=>J1,Gpc:()=>D,Gre:()=>kS,Hsn:()=>hi,IIB:()=>mO,Ikx:()=>zy,JOm:()=>_c,JVY:()=>Vd,JZr:()=>F,Jf7:()=>Lm,KtG:()=>Hu,L6k:()=>Wf,LAX:()=>kf,LFG:()=>et,LMc:()=>cA,LSH:()=>lh,Lbi:()=>yO,Lck:()=>OM,MAs:()=>Qg,MGl:()=>Ao,MMx:()=>aE,MR2:()=>Cd,MT6:()=>$S,N_p:()=>Dg,NdJ:()=>Q1,OlP:()=>Mu,Oqu:()=>r1,P3R:()=>rm,PXZ:()=>LO,Q6J:()=>V1,QGY:()=>Mg,QbO:()=>DT,Qsj:()=>fl,QtT:()=>vb,R0b:()=>gh,RDi:()=>Cc,Rgc:()=>ov,SBq:()=>si,SDv:()=>eE,Sil:()=>CO,Suo:()=>eT,TTD:()=>Xl,TgZ:()=>Kg,Tol:()=>OS,Udp:()=>Uy,UuU:()=>Si,VKq:()=>Pb,W1O:()=>oT,WLB:()=>Nb,X6Q:()=>BO,XFs:()=>jn,Xpm:()=>Ci,Xts:()=>uh,Y36:()=>Sm,YKP:()=>bb,YNc:()=>Xv,Yjl:()=>wi,Yz7:()=>xn,Z0I:()=>ir,ZZ4:()=>kE,Zx4:()=>yb,_Bn:()=>Sb,_UZ:()=>W1,_Vd:()=>oa,_c5:()=>oA,_uU:()=>pm,aQg:()=>$E,c2e:()=>EO,cJS:()=>Or,cg1:()=>Zy,d8E:()=>Vy,dDg:()=>PO,dqk:()=>Ei,eBb:()=>h_,eFA:()=>BT,eJc:()=>vE,ekj:()=>By,eoX:()=>kT,f3M:()=>an,g9A:()=>AT,h0i:()=>l1,hGG:()=>sA,hYB:()=>Bo,hij:()=>i1,i9L:()=>gd,iGM:()=>Xb,ifc:()=>tr,ip1:()=>MT,jDz:()=>Cb,kEZ:()=>Ib,kL8:()=>WS,kYT:()=>Ni,l5B:()=>Fb,lG2:()=>Vr,lcZ:()=>jb,lnq:()=>Km,lqb:()=>cs,lri:()=>FT,mCW:()=>dp,n5z:()=>En,oAB:()=>dr,oJD:()=>em,oxw:()=>Fn,pB0:()=>rf,pQV:()=>tE,pYS:()=>Tf,q3G:()=>Qc,qLn:()=>dh,qOj:()=>G1,qZA:()=>Xg,qbA:()=>Lb,qzn:()=>Ku,rWj:()=>LT,r_U:()=>gO,s9C:()=>Oo,sBO:()=>YO,s_b:()=>m0,soG:()=>c1,tBr:()=>N,tHW:()=>qy,tb:()=>HT,tp0:()=>he,uIk:()=>Dm,uOi:()=>F_,vHH:()=>X,vpe:()=>_m,wAp:()=>Sl,xi3:()=>zb,xp6:()=>gg,ynx:()=>qg,z2F:()=>E0,z3N:()=>lc,zSh:()=>On,zW0:()=>Uv,zs3:()=>_h});var r=s(79765),a=s(13464),c=s(70882),u=s(66682),e=s(78345);function f(d){for(let p in d)if(d[p]===f)return p;throw Error("Could not find renamed property on target object.")}function m(d,p){for(const g in p)p.hasOwnProperty(g)&&!d.hasOwnProperty(g)&&(d[g]=p[g])}function T(d){if("string"==typeof d)return d;if(Array.isArray(d))return"["+d.map(T).join(", ")+"]";if(null==d)return""+d;if(d.overriddenName)return`${d.overriddenName}`;if(d.name)return`${d.name}`;const p=d.toString();if(null==p)return""+p;const g=p.indexOf("\n");return-1===g?p:p.substring(0,g)}function M(d,p){return null==d||""===d?null===p?"":p:null==p||""===p?d:d+" "+p}const w=f({__forward_ref__:f});function D(d){return d.__forward_ref__=D,d.toString=function(){return T(this())},d}function U(d){return W(d)?d():d}function W(d){return"function"==typeof d&&d.hasOwnProperty(w)&&d.__forward_ref__===D}function $(d){return d&&!!d.\u0275providers}const F="https://g.co/ng/security#xss";class X extends Error{constructor(p,g){super(de(p,g)),this.code=p}}function de(d,p){return`NG0${Math.abs(d)}${p?": "+p.trim():""}`}function V(d){return"string"==typeof d?d:null==d?"":String(d)}function $e(d,p){throw new X(-201,!1)}function At(d,p,g,R){throw new Error(`ASSERTION ERROR: ${d}`+(null==R?"":` [Expected=> ${g} ${R} ${p} <=Actual]`))}function xn(d){return{token:d.token,providedIn:d.providedIn||null,factory:d.factory,value:void 0}}function Or(d){return{providers:d.providers||[],imports:d.imports||[]}}function Lr(d){return Qr(d,ht)||Qr(d,Tt)}function ir(d){return null!==Lr(d)}function Qr(d,p){return d.hasOwnProperty(p)?d[p]:null}function br(d){return d&&(d.hasOwnProperty(Wt)||d.hasOwnProperty(wn))?d[Wt]:null}const ht=f({\u0275prov:f}),Wt=f({\u0275inj:f}),Tt=f({ngInjectableDef:f}),wn=f({ngInjectorDef:f});var jn=(()=>((jn=jn||{})[jn.Default=0]="Default",jn[jn.Host=1]="Host",jn[jn.Self=2]="Self",jn[jn.SkipSelf=4]="SkipSelf",jn[jn.Optional=8]="Optional",jn))();let hr;function Wi(d){const p=hr;return hr=d,p}function so(d,p,g){const R=Lr(d);return R&&"root"==R.providedIn?void 0===R.value?R.value=R.factory():R.value:g&jn.Optional?null:void 0!==p?p:void $e(T(d))}const Ei=(()=>typeof globalThis<"u"&&globalThis||typeof global<"u"&&global||typeof window<"u"&&window||typeof self<"u"&&typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&self)(),Eo={},po="__NG_DI_FLAG__",$i="ngTempTokenPath",qr="ngTokenPath",Hi=/\n/gm,Dn="\u0275",Hn="__source";let jt;function Fe(d){const p=jt;return jt=d,p}function Ie(d,p=jn.Default){if(void 0===jt)throw new X(-203,!1);return null===jt?so(d,void 0,p):jt.get(d,p&jn.Optional?null:void 0,p)}function et(d,p=jn.Default){return(function Oi(){return hr}()||Ie)(U(d),p)}function an(d,p=jn.Default){return et(d,lt(p))}function lt(d){return typeof d>"u"||"number"==typeof d?d:0|(d.optional&&8)|(d.host&&1)|(d.self&&2)|(d.skipSelf&&4)}function Rt(d){const p=[];for(let g=0;g<d.length;g++){const R=U(d[g]);if(Array.isArray(R)){if(0===R.length)throw new X(900,!1);let H,te=jn.Default;for(let ve=0;ve<R.length;ve++){const Be=R[ve],nt=qn(Be);"number"==typeof nt?-1===nt?H=Be.token:te|=nt:H=Be}p.push(et(H,te))}else p.push(et(R))}return p}function Pe(d,p){return d[po]=p,d.prototype[po]=p,d}function qn(d){return d[po]}function _r(d){return{toString:d}.toString()}var Pr=(()=>((Pr=Pr||{})[Pr.OnPush=0]="OnPush",Pr[Pr.Default=1]="Default",Pr))(),tr=(()=>{return(d=tr||(tr={}))[d.Emulated=0]="Emulated",d[d.None=2]="None",d[d.ShadowDom=3]="ShadowDom",tr;var d})();const Zn={},nr=[],Zt=f({\u0275cmp:f}),dn=f({\u0275dir:f}),Ge=f({\u0275pipe:f}),Ot=f({\u0275mod:f}),mn=f({\u0275fac:f}),wr=f({__NG_ELEMENT_ID__:f});let Ti=0;function Ci(d){return _r(()=>{const p=ro(d),g={...p,decls:d.decls,vars:d.vars,template:d.template,consts:d.consts||null,ngContentSelectors:d.ngContentSelectors,onPush:d.changeDetection===Pr.OnPush,directiveDefs:null,pipeDefs:null,dependencies:p.standalone&&d.dependencies||null,getStandaloneInjector:null,data:d.data||{},encapsulation:d.encapsulation||tr.Emulated,id:"c"+Ti++,styles:d.styles||nr,_:null,schemas:d.schemas||null,tView:null};Vt(g);const R=d.dependencies;return g.directiveDefs=bn(R,!1),g.pipeDefs=bn(R,!0),g})}function Ko(d){return ji(d)||Vi(d)}function _s(d){return null!==d}function dr(d){return _r(()=>({type:d.type,bootstrap:d.bootstrap||nr,declarations:d.declarations||nr,imports:d.imports||nr,exports:d.exports||nr,transitiveCompileScopes:null,schemas:d.schemas||null,id:d.id||null}))}function Ni(d,p){return _r(()=>{const g=Ir(d,!0);g.declarations=p.declarations||nr,g.imports=p.imports||nr,g.exports=p.exports||nr})}function ti(d,p){if(null==d)return Zn;const g={};for(const R in d)if(d.hasOwnProperty(R)){let H=d[R],te=H;Array.isArray(H)&&(te=H[1],H=H[0]),g[H]=R,p&&(p[H]=te)}return g}function Vr(d){return _r(()=>{const p=ro(d);return Vt(p),p})}function wi(d){return{type:d.type,name:d.name,factory:null,pure:!1!==d.pure,standalone:!0===d.standalone,onDestroy:d.type.prototype.ngOnDestroy||null}}function ji(d){return d[Zt]||null}function Vi(d){return d[dn]||null}function Po(d){return d[Ge]||null}function ko(d){const p=ji(d)||Vi(d)||Po(d);return null!==p&&p.standalone}function Ir(d,p){const g=d[Ot]||null;if(!g&&!0===p)throw new Error(`Type ${T(d)} does not have '\u0275mod' property.`);return g}function ro(d){const p={};return{type:d.type,providersResolver:null,factory:null,hostBindings:d.hostBindings||null,hostVars:d.hostVars||0,hostAttrs:d.hostAttrs||null,contentQueries:d.contentQueries||null,declaredInputs:p,exportAs:d.exportAs||null,standalone:!0===d.standalone,selectors:d.selectors||nr,viewQuery:d.viewQuery||null,features:d.features||null,setInput:null,findHostDirectiveDefs:null,hostDirectives:null,inputs:ti(d.inputs,p),outputs:ti(d.outputs)}}function Vt(d){d.features?.forEach(p=>p(d))}function bn(d,p){if(!d)return null;const g=p?Po:Ko;return()=>("function"==typeof d?d():d).map(R=>g(R)).filter(_s)}const Bn=0,ci=1,_o=2,go=3,es=4,ts=5,jo=6,ss=7,gs=8,Is=9,la=10,Ro=11,jl=12,gl=13,qa=14,da=15,$a=16,Rl=17,Ji=18,Ha=19,Ts=20,hs=21,$s=22,Ja=1,fa=2,Xo=7,No=8,Cs=9,ns=10;function zr(d){return Array.isArray(d)&&"object"==typeof d[Ja]}function io(d){return Array.isArray(d)&&!0===d[Ja]}function gt(d){return 0!=(4&d.flags)}function Tn(d){return d.componentOffset>-1}function ie(d){return 1==(1&d.flags)}function Ze(d){return!!d.template}function Jt(d){return 0!=(256&d[_o])}function el(d,p){return d.hasOwnProperty(mn)?d[mn]:null}class oc{constructor(p,g,R){this.previousValue=p,this.currentValue=g,this.firstChange=R}isFirstChange(){return this.firstChange}}function Xl(){return Ic}function Ic(d){return d.type.prototype.ngOnChanges&&(d.setInput=ku),Gs}function Gs(){const d=ua(this),p=d?.current;if(p){const g=d.previous;if(g===Zn)d.previous=p;else for(let R in p)g[R]=p[R];d.current=null,this.ngOnChanges(p)}}function ku(d,p,g,R){const H=this.declaredInputs[g],te=ua(d)||function El(d,p){return d[zu]=p}(d,{previous:Zn,current:null}),ve=te.current||(te.current={}),Be=te.previous,nt=Be[H];ve[H]=new oc(nt&&nt.currentValue,p,Be===Zn),d[R]=p}Xl.ngInherit=!0;const zu="__ngSimpleChanges__";function ua(d){return d[zu]||null}const $u=function(d,p,g){};function tl(d){for(;Array.isArray(d);)d=d[Bn];return d}function dc(d,p){return tl(p[d])}function cu(d,p){return tl(p[d.index])}function Ru(d,p){return d.data[p]}function xu(d,p){return d[p]}function ba(d,p){const g=p[d];return zr(g)?g:g[Bn]}function Su(d){return 64==(64&d[_o])}function ql(d,p){return null==p?null:d[p]}function Al(d){d[Ji]=0}function Dc(d,p){d[ts]+=p;let g=d,R=d[go];for(;null!==R&&(1===p&&1===g[ts]||-1===p&&0===g[ts]);)R[ts]+=p,g=R,R=R[go]}const zs={lFrame:Gr(null),bindingsEnabled:!0};function fi(){return zs.bindingsEnabled}function mi(){return zs.lFrame.lView}function Hs(){return zs.lFrame.tView}function Qs(d){return zs.lFrame.contextLView=d,d[gs]}function Hu(d){return zs.lFrame.contextLView=null,d}function zl(){let d=sc();for(;null!==d&&64===d.type;)d=d.parent;return d}function sc(){return zs.lFrame.currentTNode}function hu(){const d=zs.lFrame,p=d.currentTNode;return d.isParent?p:p.parent}function lu(d,p){const g=zs.lFrame;g.currentTNode=d,g.isParent=p}function id(){return zs.lFrame.isParent}function ec(){zs.lFrame.isParent=!1}function kl(){const d=zs.lFrame;let p=d.bindingRootIndex;return-1===p&&(p=d.bindingRootIndex=d.tView.bindingStartIndex),p}function sl(){return zs.lFrame.bindingIndex}function Q(){return zs.lFrame.bindingIndex++}function Ee(d){const p=zs.lFrame,g=p.bindingIndex;return p.bindingIndex=p.bindingIndex+d,g}function Xe(d){zs.lFrame.inI18n=d}function Gt(d,p){const g=zs.lFrame;g.bindingIndex=g.bindingRootIndex=d,kn(p)}function kn(d){zs.lFrame.currentDirectiveIndex=d}function Hr(d){const p=zs.lFrame.currentDirectiveIndex;return-1===p?null:d[p]}function Xr(){return zs.lFrame.currentQueryIndex}function yr(d){zs.lFrame.currentQueryIndex=d}function Rr(d){const p=d[ci];return 2===p.type?p.declTNode:1===p.type?d[jo]:null}function Go(d,p,g){if(g&jn.SkipSelf){let H=p,te=d;for(;!(H=H.parent,null!==H||g&jn.Host||(H=Rr(te),null===H||(te=te[da],10&H.type))););if(null===H)return!1;p=H,d=te}const R=zs.lFrame=Qn();return R.currentTNode=p,R.lView=d,!0}function Io(d){const p=Qn(),g=d[ci];zs.lFrame=p,p.currentTNode=g.firstChild,p.lView=d,p.tView=g,p.contextLView=d,p.bindingIndex=g.bindingStartIndex,p.inI18n=!1}function Qn(){const d=zs.lFrame,p=null===d?null:d.child;return null===p?Gr(d):p}function Gr(d){const p={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:d,child:null,inI18n:!1};return null!==d&&(d.child=p),p}function Fr(){const d=zs.lFrame;return zs.lFrame=d.parent,d.currentTNode=null,d.lView=null,d}const Ui=Fr;function Do(){const d=Fr();d.isParent=!0,d.tView=null,d.selectedIndex=-1,d.contextLView=null,d.elementDepthCount=0,d.currentDirectiveIndex=-1,d.currentNamespace=null,d.bindingRootIndex=-1,d.bindingIndex=-1,d.currentQueryIndex=0}function zo(){return zs.lFrame.selectedIndex}function $l(d){zs.lFrame.selectedIndex=d}function xl(){const d=zs.lFrame;return Ru(d.tView,d.selectedIndex)}function Pa(d,p){for(let g=p.directiveStart,R=p.directiveEnd;g<R;g++){const te=d.data[g].type.prototype,{ngAfterContentInit:ve,ngAfterContentChecked:Be,ngAfterViewInit:nt,ngAfterViewChecked:Ht,ngOnDestroy:Sn}=te;ve&&(d.contentHooks??(d.contentHooks=[])).push(-g,ve),Be&&((d.contentHooks??(d.contentHooks=[])).push(g,Be),(d.contentCheckHooks??(d.contentCheckHooks=[])).push(g,Be)),nt&&(d.viewHooks??(d.viewHooks=[])).push(-g,nt),Ht&&((d.viewHooks??(d.viewHooks=[])).push(g,Ht),(d.viewCheckHooks??(d.viewCheckHooks=[])).push(g,Ht)),null!=Sn&&(d.destroyHooks??(d.destroyHooks=[])).push(g,Sn)}}function fc(d,p,g){Nt(d,p,3,g)}function bu(d,p,g,R){(3&d[_o])===g&&Nt(d,p,g,R)}function je(d,p){let g=d[_o];(3&g)===p&&(g&=2047,g+=1,d[_o]=g)}function Nt(d,p,g,R){const te=R??-1,ve=p.length-1;let Be=0;for(let nt=void 0!==R?65535&d[Ji]:0;nt<ve;nt++)if("number"==typeof p[nt+1]){if(Be=p[nt],null!=R&&Be>=R)break}else p[nt]<0&&(d[Ji]+=65536),(Be<te||-1==te)&&(tt(d,g,p,nt),d[Ji]=(4294901760&d[Ji])+nt+2),nt++}function tt(d,p,g,R){const H=g[R]<0,te=g[R+1],Be=d[H?-g[R]:g[R]];if(H){if(d[_o]>>11<d[Ji]>>16&&(3&d[_o])===p){d[_o]+=2048,$u(4,Be,te);try{te.call(Be)}finally{$u(5,Be,te)}}}else{$u(4,Be,te);try{te.call(Be)}finally{$u(5,Be,te)}}}const tn=-1;class Xn{constructor(p,g,R){this.factory=p,this.resolving=!1,this.canSeeViewProviders=g,this.injectImpl=R}}function Ho(d,p,g){let R=0;for(;R<g.length;){const H=g[R];if("number"==typeof H){if(0!==H)break;R++;const te=g[R++],ve=g[R++],Be=g[R++];d.setAttribute(p,ve,Be,te)}else{const te=H,ve=g[++R];rn(te)?d.setProperty(p,te,ve):d.setAttribute(p,te,ve),R++}}return R}function Qa(d){return 3===d||4===d||6===d}function rn(d){return 64===d.charCodeAt(0)}function Jl(d,p){if(null!==p&&0!==p.length)if(null===d||0===d.length)d=p.slice();else{let g=-1;for(let R=0;R<p.length;R++){const H=p[R];"number"==typeof H?g=H:0===g||le(d,g,H,null,-1===g||2===g?p[++R]:null)}}return d}function le(d,p,g,R,H){let te=0,ve=d.length;if(-1===p)ve=-1;else for(;te<d.length;){const Be=d[te++];if("number"==typeof Be){if(Be===p){ve=-1;break}if(Be>p){ve=te-1;break}}}for(;te<d.length;){const Be=d[te];if("number"==typeof Be)break;if(Be===g){if(null===R)return void(null!==H&&(d[te+1]=H));if(R===d[te+1])return void(d[te+2]=H)}te++,null!==R&&te++,null!==H&&te++}-1!==ve&&(d.splice(ve,0,p),te=ve+1),d.splice(te++,0,g),null!==R&&d.splice(te++,0,R),null!==H&&d.splice(te++,0,H)}function ae(d){return d!==tn}function De(d){return 32767&d}function st(d,p){let g=function Ve(d){return d>>16}(d),R=p;for(;g>0;)R=R[da],g--;return R}let zt=!0;function Qt(d){const p=zt;return zt=d,p}const Er=255,Nr=5;let Mi=0;const ao={};function rs(d,p){const g=Ps(d,p);if(-1!==g)return g;const R=p[ci];R.firstCreatePass&&(d.injectorIndex=p.length,ys(R.data,d),ys(p,null),ys(R.blueprint,null));const H=Ul(d,p),te=d.injectorIndex;if(ae(H)){const ve=De(H),Be=st(H,p),nt=Be[ci].data;for(let Ht=0;Ht<8;Ht++)p[te+Ht]=Be[ve+Ht]|nt[ve+Ht]}return p[te+8]=H,te}function ys(d,p){d.push(0,0,0,0,0,0,0,0,p)}function Ps(d,p){return-1===d.injectorIndex||d.parent&&d.parent.injectorIndex===d.injectorIndex||null===p[d.injectorIndex+8]?-1:d.injectorIndex}function Ul(d,p){if(d.parent&&-1!==d.parent.injectorIndex)return d.parent.injectorIndex;let g=0,R=null,H=p;for(;null!==H;){if(R=Va(H),null===R)return tn;if(g++,H=H[da],-1!==R.injectorIndex)return R.injectorIndex|g<<16}return tn}function eu(d,p,g){!function Jo(d,p,g){let R;"string"==typeof g?R=g.charCodeAt(0)||0:g.hasOwnProperty(wr)&&(R=g[wr]),null==R&&(R=g[wr]=Mi++);const H=R&Er;p.data[d+(H>>Nr)]|=1<<H}(d,p,g)}function wu(d,p,g){if(g&jn.Optional||void 0!==d)return d;$e()}function Rc(d,p,g,R){if(g&jn.Optional&&void 0===R&&(R=null),!(g&(jn.Self|jn.Host))){const H=d[Is],te=Wi(void 0);try{return H?H.get(p,R,g&jn.Optional):so(p,R,g&jn.Optional)}finally{Wi(te)}}return wu(R,0,g)}function fu(d,p,g,R=jn.Default,H){if(null!==d){if(1024&p[_o]){const ve=function za(d,p,g,R,H){let te=d,ve=p;for(;null!==te&&null!==ve&&1024&ve[_o]&&!(256&ve[_o]);){const Be=qc(te,ve,g,R|jn.Self,ao);if(Be!==ao)return Be;let nt=te.parent;if(!nt){const Ht=ve[hs];if(Ht){const Sn=Ht.get(g,ao,R);if(Sn!==ao)return Sn}nt=Va(ve),ve=ve[da]}te=nt}return H}(d,p,g,R,ao);if(ve!==ao)return ve}const te=qc(d,p,g,R,ao);if(te!==ao)return te}return Rc(p,g,R,H)}function qc(d,p,g,R,H){const te=function La(d){if("string"==typeof d)return d.charCodeAt(0)||0;const p=d.hasOwnProperty(wr)?d[wr]:void 0;return"number"==typeof p?p>=0?p&Er:Tu:p}(g);if("function"==typeof te){if(!Go(p,d,R))return R&jn.Host?wu(H,0,R):Rc(p,g,R,H);try{const ve=te(R);if(null!=ve||R&jn.Optional)return ve;$e()}finally{Ui()}}else if("number"==typeof te){let ve=null,Be=Ps(d,p),nt=tn,Ht=R&jn.Host?p[$a][jo]:null;for((-1===Be||R&jn.SkipSelf)&&(nt=-1===Be?Ul(d,p):p[Be+8],nt!==tn&&rl(R,!1)?(ve=p[ci],Be=De(nt),p=st(nt,p)):Be=-1);-1!==Be;){const Sn=p[ci];if(al(te,Be,Sn.data)){const Ln=$c(Be,p,g,ve,R,Ht);if(Ln!==ao)return Ln}nt=p[Be+8],nt!==tn&&rl(R,p[ci].data[Be+8]===Ht)&&al(te,Be,p)?(ve=Sn,Be=De(nt),p=st(nt,p)):Be=-1}}return H}function $c(d,p,g,R,H,te){const ve=p[ci],Be=ve.data[d+8],Sn=pu(Be,ve,g,null==R?Tn(Be)&&zt:R!=ve&&0!=(3&Be.type),H&jn.Host&&te===Be);return null!==Sn?vc(p,ve,Sn,Be):ao}function pu(d,p,g,R,H){const te=d.providerIndexes,ve=p.data,Be=1048575&te,nt=d.directiveStart,Sn=te>>20,ei=H?Be+Sn:d.directiveEnd;for(let xi=R?Be:Be+Sn;xi<ei;xi++){const mo=ve[xi];if(xi<nt&&g===mo||xi>=nt&&mo.type===g)return xi}if(H){const xi=ve[nt];if(xi&&Ze(xi)&&xi.type===g)return nt}return null}function vc(d,p,g,R){let H=d[g];const te=p.data;if(function bi(d){return d instanceof Xn}(H)){const ve=H;ve.resolving&&function se(d,p){const g=p?`. Dependency path: ${p.join(" > ")} > ${d}`:"";throw new X(-200,`Circular dependency in DI detected for ${d}${g}`)}(function ce(d){return"function"==typeof d?d.name||d.toString():"object"==typeof d&&null!=d&&"function"==typeof d.type?d.type.name||d.type.toString():V(d)}(te[g]));const Be=Qt(ve.canSeeViewProviders);ve.resolving=!0;const nt=ve.injectImpl?Wi(ve.injectImpl):null;Go(d,R,jn.Default);try{H=d[g]=ve.factory(void 0,te,d,R),p.firstCreatePass&&g>=R.directiveStart&&function Wl(d,p,g){const{ngOnChanges:R,ngOnInit:H,ngDoCheck:te}=p.type.prototype;if(R){const ve=Ic(p);(g.preOrderHooks??(g.preOrderHooks=[])).push(d,ve),(g.preOrderCheckHooks??(g.preOrderCheckHooks=[])).push(d,ve)}H&&(g.preOrderHooks??(g.preOrderHooks=[])).push(0-d,H),te&&((g.preOrderHooks??(g.preOrderHooks=[])).push(d,te),(g.preOrderCheckHooks??(g.preOrderCheckHooks=[])).push(d,te))}(g,te[g],p)}finally{null!==nt&&Wi(nt),Qt(Be),ve.resolving=!1,Ui()}}return H}function al(d,p,g){return!!(g[p+(d>>Nr)]&1<<d)}function rl(d,p){return!(d&jn.Self||d&jn.Host&&p)}class xa{constructor(p,g){this._tNode=p,this._lView=g}get(p,g,R){return fu(this._tNode,this._lView,p,lt(R),g)}}function Tu(){return new xa(zl(),mi())}function En(d){return _r(()=>{const p=d.prototype.constructor,g=p[mn]||Pu(p),R=Object.prototype;let H=Object.getPrototypeOf(d.prototype).constructor;for(;H&&H!==R;){const te=H[mn]||Pu(H);if(te&&te!==g)return te;H=Object.getPrototypeOf(H)}return te=>new te})}function Pu(d){return W(d)?()=>{const p=Pu(U(d));return p&&p()}:el(d)}function Va(d){const p=d[ci],g=p.type;return 2===g?p.declTNode:1===g?d[jo]:null}function Os(d){return function mu(d,p){if("class"===p)return d.classes;if("style"===p)return d.styles;const g=d.attrs;if(g){const R=g.length;let H=0;for(;H<R;){const te=g[H];if(Qa(te))break;if(0===te)H+=2;else if("number"==typeof te)for(H++;H<R&&"string"==typeof g[H];)H++;else{if(te===p)return g[H+1];H+=2}}}return null}(zl(),d)}const ld="__parameters__",Hc="__prop__metadata__";function ud(d){return function(...g){if(d){const R=d(...g);for(const H in R)this[H]=R[H]}}}function md(d,p,g){return _r(()=>{const R=ud(p);function H(...te){if(this instanceof H)return R.apply(this,te),this;const ve=new H(...te);return Be.annotation=ve,Be;function Be(nt,Ht,Sn){const Ln=nt.hasOwnProperty(ld)?nt[ld]:Object.defineProperty(nt,ld,{value:[]})[ld];for(;Ln.length<=Sn;)Ln.push(null);return(Ln[Sn]=Ln[Sn]||[]).push(ve),nt}}return g&&(H.prototype=Object.create(g.prototype)),H.prototype.ngMetadataName=d,H.annotationCls=H,H})}function tf(d,p,g,R){return _r(()=>{const H=ud(p);function te(...ve){if(this instanceof te)return H.apply(this,ve),this;const Be=new te(...ve);return function nt(Ht,Sn){const Ln=Ht.constructor,ei=Ln.hasOwnProperty(Hc)?Ln[Hc]:Object.defineProperty(Ln,Hc,{value:{}})[Hc];ei[Sn]=ei.hasOwnProperty(Sn)&&ei[Sn]||[],ei[Sn].unshift(Be),R&&R(Ht,Sn,...ve)}}return g&&(te.prototype=Object.create(g.prototype)),te.prototype.ngMetadataName=d,te.annotationCls=te,te})}class Mu{constructor(p,g){this._desc=p,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof g?this.__NG_ELEMENT_ID__=g:void 0!==g&&(this.\u0275prov=xn({token:this,providedIn:g.providedIn||"root",factory:g.factory}))}get multi(){return this}toString(){return`InjectionToken ${this._desc}`}}class Tp{}const gd=tf("ViewChild",(d,p)=>({selector:d,first:!0,isViewQuery:!0,descendants:!0,...p}),Tp),Ud=Function;function Ne(d,p){d.forEach(g=>Array.isArray(g)?Ne(g,p):p(g))}function _e(d,p,g){p>=d.length?d.push(g):d.splice(p,0,g)}function Ye(d,p){return p>=d.length-1?d.pop():d.splice(p,1)[0]}function Mt(d,p){const g=[];for(let R=0;R<d;R++)g.push(p);return g}function Wo(d,p,g){let R=ya(d,p);return R>=0?d[1|R]=g:(R=~R,function ni(d,p,g,R){let H=d.length;if(H==p)d.push(g,R);else if(1===H)d.push(R,d[0]),d[0]=g;else{for(H--,d.push(d[H-1],d[H]);H>p;)d[H]=d[H-2],H--;d[p]=g,d[p+1]=R}}(d,R,p,g)),R}function Qo(d,p){const g=ya(d,p);if(g>=0)return d[1|g]}function ya(d,p){return function Wu(d,p,g){let R=0,H=d.length>>g;for(;H!==R;){const te=R+(H-R>>1),ve=d[te<<g];if(p===ve)return te<<g;ve>p?H=te:R=te+1}return~(H<<g)}(d,p,1)}const N=Pe(md("Inject",d=>({token:d})),-1),k=Pe(md("Optional"),8),he=Pe(md("SkipSelf"),4);var _c=(()=>((_c=_c||{})[_c.Important=1]="Important",_c[_c.DashCase=2]="DashCase",_c))();const T_=/^>|^->|<!--|-->|--!>|<!-$/g,Bd=/(<|>)/,Sh="\u200b$1\u200b";const Gf=new Map;let Hp=0;const Zc="__ngContext__";function Sc(d,p){zr(p)?(d[Zc]=p[Ts],function C_(d){Gf.set(d[Ts],d)}(p)):d[Zc]=p}let td;function Rd(d,p){return td(d,p)}function sp(d){const p=d[go];return io(p)?p[go]:p}function xd(d){return J_(d[gl])}function bc(d){return J_(d[es])}function J_(d){for(;null!==d&&!io(d);)d=d[es];return d}function Gp(d,p,g,R,H){if(null!=R){let te,ve=!1;io(R)?te=R:zr(R)&&(ve=!0,R=R[Bn]);const Be=tl(R);0===d&&null!==g?null==H?jf(p,g,Be):mf(p,g,Be,H||null,!0):1===d&&null!==g?mf(p,g,Be,H||null,!0):2===d?th(p,Be,ve):3===d&&p.destroyNode(Be),null!=te&&function Kh(d,p,g,R,H){const te=g[Xo];te!==tl(g)&&Gp(p,d,R,te,H);for(let Be=ns;Be<g.length;Be++){const nt=g[Be];zd(nt[ci],nt,d,p,R,te)}}(p,d,te,g,H)}}function a_(d,p){return d.createText(p)}function Q_(d,p,g){d.setValue(p,g)}function K_(d,p){return d.createComment(function bh(d){return d.replace(T_,p=>p.replace(Bd,Sh))}(p))}function X_(d,p,g){return d.createElement(p,g)}function Nf(d,p){const g=d[Cs],R=g.indexOf(p),H=p[go];512&p[_o]&&(p[_o]&=-513,Dc(H,-1)),g.splice(R,1)}function Mh(d,p){if(d.length<=ns)return;const g=ns+p,R=d[g];if(R){const H=R[Rl];null!==H&&H!==d&&Nf(H,R),p>0&&(d[g-1][es]=R[es]);const te=Ye(d,ns+p);!function q_(d,p){zd(d,p,p[Ro],2,null,null),p[Bn]=null,p[jo]=null}(R[ci],R);const ve=te[Ha];null!==ve&&ve.detachView(te[ci]),R[go]=null,R[es]=null,R[_o]&=-65}return R}function Jh(d,p){if(!(128&p[_o])){const g=p[Ro];g.destroyNode&&zd(d,p,g,3,null,null),function O_(d){let p=d[gl];if(!p)return lp(d[ci],d);for(;p;){let g=null;if(zr(p))g=p[gl];else{const R=p[ns];R&&(g=R)}if(!g){for(;p&&!p[es]&&p!==d;)zr(p)&&lp(p[ci],p),p=p[go];null===p&&(p=d),zr(p)&&lp(p[ci],p),g=p&&p[es]}p=g}}(p)}}function lp(d,p){if(!(128&p[_o])){p[_o]&=-65,p[_o]|=128,function hf(d,p){let g;if(null!=d&&null!=(g=d.destroyHooks))for(let R=0;R<g.length;R+=2){const H=p[g[R]];if(!(H instanceof Xn)){const te=g[R+1];if(Array.isArray(te))for(let ve=0;ve<te.length;ve+=2){const Be=H[te[ve]],nt=te[ve+1];$u(4,Be,nt);try{nt.call(Be)}finally{$u(5,Be,nt)}}else{$u(4,H,te);try{te.call(H)}finally{$u(5,H,te)}}}}}(d,p),function Mp(d,p){const g=d.cleanup,R=p[ss];let H=-1;if(null!==g)for(let te=0;te<g.length-1;te+=2)if("string"==typeof g[te]){const ve=g[te+3];ve>=0?R[H=ve]():R[H=-ve].unsubscribe(),te+=2}else{const ve=R[H=g[te+1]];g[te].call(ve)}if(null!==R){for(let te=H+1;te<R.length;te++)(0,R[te])();p[ss]=null}}(d,p),1===p[ci].type&&p[Ro].destroy();const g=p[Rl];if(null!==g&&io(p[go])){g!==p[go]&&Nf(g,p);const R=p[Ha];null!==R&&R.detachView(d)}!function Za(d){Gf.delete(d[Ts])}(p)}}function l_(d,p,g){return u_(d,p.parent,g)}function u_(d,p,g){let R=p;for(;null!==R&&40&R.type;)R=(p=R).parent;if(null===R)return g[Bn];{const{componentOffset:H}=R;if(H>-1){const{encapsulation:te}=d.data[R.directiveStart+H];if(te===tr.None||te===tr.Emulated)return null}return cu(R,g)}}function mf(d,p,g,R,H){d.insertBefore(p,g,R,H)}function jf(d,p,g){d.appendChild(p,g)}function jd(d,p,g,R,H){null!==R?mf(d,p,g,R,H):jf(d,p,g)}function nf(d,p){return d.parentNode(p)}function Oh(d,p,g){return A_(d,p,g)}function Ap(d,p,g){return 40&d.type?cu(d,g):null}let Dp,gf,p_,yf,A_=Ap;function Ah(d,p){A_=d,Dp=p}function If(d,p,g,R){const H=l_(d,R,p),te=p[Ro],Be=Oh(R.parent||p[jo],R,p);if(null!=H)if(Array.isArray(g))for(let nt=0;nt<g.length;nt++)jd(te,H,g[nt],Be,!1);else jd(te,H,g,Be,!1);void 0!==Dp&&Dp(te,R,p,g,H)}function Yp(d,p){if(null!==p){const g=p.type;if(3&g)return cu(p,d);if(4&g)return c_(-1,d[p.index]);if(8&g){const R=p.child;if(null!==R)return Yp(d,R);{const H=d[p.index];return io(H)?c_(-1,H):tl(H)}}if(32&g)return Rd(p,d)()||tl(d[p.index]);{const R=eh(d,p);return null!==R?Array.isArray(R)?R[0]:Yp(sp(d[$a]),R):Yp(d,p.next)}}return null}function eh(d,p){return null!==p?d[$a][jo].projection[p.projection]:null}function c_(d,p){const g=ns+d+1;if(g<p.length){const R=p[g],H=R[ci].firstChild;if(null!==H)return Yp(R,H)}return p[Xo]}function th(d,p,g){const R=nf(d,p);R&&function Nm(d,p,g,R){d.removeChild(p,g,R)}(d,R,p,g)}function d_(d,p,g,R,H,te,ve){for(;null!=g;){const Be=R[g.index],nt=g.type;if(ve&&0===p&&(Be&&Sc(tl(Be),R),g.flags|=2),32!=(32&g.flags))if(8&nt)d_(d,p,g.child,R,H,te,!1),Gp(p,d,H,Be,te);else if(32&nt){const Ht=Rd(g,R);let Sn;for(;Sn=Ht();)Gp(p,d,H,Sn,te);Gp(p,d,H,Be,te)}else 16&nt?f_(d,p,R,g,H,te):Gp(p,d,H,Be,te);g=ve?g.projectionNext:g.next}}function zd(d,p,g,R,H,te){d_(g,R,d.firstChild,p,H,te,!1)}function f_(d,p,g,R,H,te){const ve=g[$a],nt=ve[jo].projection[R.projection];if(Array.isArray(nt))for(let Ht=0;Ht<nt.length;Ht++)Gp(p,d,H,nt[Ht],te);else d_(d,p,nt,ve[go],H,te,!0)}function jp(d,p,g){""===g?d.removeAttribute(p,"class"):d.setAttribute(p,"class",g)}function Td(d,p,g){const{mergedAttrs:R,classes:H,styles:te}=g;null!==R&&Ho(d,p,R),null!==H&&jp(d,p,H),null!==te&&function Dh(d,p,g){d.setAttribute(p,"style",g)}(d,p,te)}function Ta(d){return function zp(){if(void 0===gf&&(gf=null,Ei.trustedTypes))try{gf=Ei.trustedTypes.createPolicy("angular",{createHTML:d=>d,createScript:d=>d,createScriptURL:d=>d})}catch{}return gf}()?.createHTML(d)||d}function Cc(d){p_=d}function D_(){return void 0!==p_?p_:typeof document<"u"?document:void 0}function cp(){if(void 0===yf&&(yf=null,Ei.trustedTypes))try{yf=Ei.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:d=>d,createScript:d=>d,createScriptURL:d=>d})}catch{}return yf}function Mc(d){return cp()?.createHTML(d)||d}function __(d){return cp()?.createScriptURL(d)||d}class Lf{constructor(p){this.changingThisBreaksApplicationSecurity=p}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see ${F})`}}class zf extends Lf{getTypeName(){return"HTML"}}class Vf extends Lf{getTypeName(){return"Style"}}class ra extends Lf{getTypeName(){return"Script"}}class rh extends Lf{getTypeName(){return"URL"}}class ih extends Lf{getTypeName(){return"ResourceURL"}}function lc(d){return d instanceof Lf?d.changingThisBreaksApplicationSecurity:d}function Ku(d,p){const g=function Zf(d){return d instanceof Lf&&d.getTypeName()||null}(d);if(null!=g&&g!==p){if("ResourceURL"===g&&"URL"===p)return!0;throw new Error(`Required a safe ${p}, got a ${g} (see ${F})`)}return g===p}function Vd(d){return new zf(d)}function Wf(d){return new Vf(d)}function h_(d){return new ra(d)}function kf(d){return new rh(d)}function rf(d){return new ih(d)}function R_(d){const p=new Jf(d);return function oh(){try{return!!(new window.DOMParser).parseFromString(Ta(""),"text/html")}catch{return!1}}()?new x_(p):p}class x_{constructor(p){this.inertDocumentHelper=p}getInertBodyElement(p){p="<body><remove></remove>"+p;try{const g=(new window.DOMParser).parseFromString(Ta(p),"text/html").body;return null===g?this.inertDocumentHelper.getInertBodyElement(p):(g.removeChild(g.firstChild),g)}catch{return null}}}class Jf{constructor(p){this.defaultDoc=p,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert")}getInertBodyElement(p){const g=this.inertDocument.createElement("template");return g.innerHTML=Ta(p),g}}const Rp=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:\/?#]*(?:[\/?#]|$))/i;function dp(d){return(d=String(d)).match(Rp)?d:"unsafe:"+d}function Yc(d){const p={};for(const g of d.split(","))p[g]=!0;return p}function sf(...d){const p={};for(const g of d)for(const R in g)g.hasOwnProperty(R)&&(p[R]=!0);return p}const fp=Yc("area,br,col,hr,img,wbr"),xp=Yc("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),wd=Yc("rp,rt"),sh=sf(fp,sf(xp,Yc("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),sf(wd,Yc("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),sf(wd,xp)),pp=Yc("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),Sf=sf(pp,Yc("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,srcset,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),Yc("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),Vp=Yc("script,style,template");class xh{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(p){let g=p.firstChild,R=!0;for(;g;)if(g.nodeType===Node.ELEMENT_NODE?R=this.startElement(g):g.nodeType===Node.TEXT_NODE?this.chars(g.nodeValue):this.sanitizedSomething=!0,R&&g.firstChild)g=g.firstChild;else for(;g;){g.nodeType===Node.ELEMENT_NODE&&this.endElement(g);let H=this.checkClobberedElement(g,g.nextSibling);if(H){g=H;break}g=this.checkClobberedElement(g,g.parentNode)}return this.buf.join("")}startElement(p){const g=p.nodeName.toLowerCase();if(!sh.hasOwnProperty(g))return this.sanitizedSomething=!0,!Vp.hasOwnProperty(g);this.buf.push("<"),this.buf.push(g);const R=p.attributes;for(let H=0;H<R.length;H++){const te=R.item(H),ve=te.name,Be=ve.toLowerCase();if(!Sf.hasOwnProperty(Be)){this.sanitizedSomething=!0;continue}let nt=te.value;pp[Be]&&(nt=dp(nt)),this.buf.push(" ",ve,'="',qh(nt),'"')}return this.buf.push(">"),!0}endElement(p){const g=p.nodeName.toLowerCase();sh.hasOwnProperty(g)&&!fp.hasOwnProperty(g)&&(this.buf.push("</"),this.buf.push(g),this.buf.push(">"))}chars(p){this.buf.push(qh(p))}checkClobberedElement(p,g){if(g&&(p.compareDocumentPosition(g)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${p.outerHTML}`);return g}}const ah=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,P_=/([^\#-~ |!])/g;function qh(d){return d.replace(/&/g,"&amp;").replace(ah,function(p){return"&#"+(1024*(p.charCodeAt(0)-55296)+(p.charCodeAt(1)-56320)+65536)+";"}).replace(P_,function(p){return"&#"+p.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}let N_;function wh(d,p){let g=null;try{N_=N_||R_(d);let R=p?String(p):"";g=N_.getInertBodyElement(R);let H=5,te=R;do{if(0===H)throw new Error("Failed to sanitize html because the input is unstable");H--,R=te,te=g.innerHTML,g=N_.getInertBodyElement(R)}while(R!==te);return Ta((new xh).sanitizeChildren(I_(g)||g))}finally{if(g){const R=I_(g)||g;for(;R.firstChild;)R.removeChild(R.firstChild)}}}function I_(d){return"content"in d&&function Zp(d){return d.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===d.nodeName}(d)?d.content:null}var Qc=(()=>((Qc=Qc||{})[Qc.NONE=0]="NONE",Qc[Qc.HTML=1]="HTML",Qc[Qc.STYLE=2]="STYLE",Qc[Qc.SCRIPT=3]="SCRIPT",Qc[Qc.URL=4]="URL",Qc[Qc.RESOURCE_URL=5]="RESOURCE_URL",Qc))();function em(d){const p=vd();return p?Mc(p.sanitize(Qc.HTML,d)||""):Ku(d,"HTML")?Mc(lc(d)):wh(D_(),V(d))}function lh(d){const p=vd();return p?p.sanitize(Qc.URL,d)||"":Ku(d,"URL")?lc(d):dp(V(d))}function F_(d){const p=vd();if(p)return __(p.sanitize(Qc.RESOURCE_URL,d)||"");if(Ku(d,"ResourceURL"))return __(lc(d));throw new X(904,!1)}function rm(d,p,g){return function nm(d,p){return"src"===p&&("embed"===d||"frame"===d||"iframe"===d||"media"===d||"script"===d)||"href"===p&&("base"===d||"link"===d)?F_:lh}(p,g)(d)}function vd(){const d=mi();return d&&d[jl]}const uh=new Mu("ENVIRONMENT_INITIALIZER"),ym=new Mu("INJECTOR",-1),Np=new Mu("INJECTOR_DEF_TYPES");class ch{get(p,g=Eo){if(g===Eo){const R=new Error(`NullInjectorError: No provider for ${T(p)}!`);throw R.name="NullInjectorError",R}return g}}function Cd(d){return{\u0275providers:d}}function om(...d){return{\u0275providers:Nh(0,d),\u0275fromNgModule:!0}}function Nh(d,...p){const g=[],R=new Set;let H;return Ne(p,te=>{const ve=te;Fh(ve,g,[],R)&&(H||(H=[]),H.push(ve))}),void 0!==H&&Ih(H,g),g}function Ih(d,p){for(let g=0;g<d.length;g++){const{providers:H}=d[g];L_(H,te=>{p.push(te)})}}function Fh(d,p,g,R){if(!(d=U(d)))return!1;let H=null,te=br(d);const ve=!te&&ji(d);if(te||ve){if(ve&&!ve.standalone)return!1;H=d}else{const nt=d.ngModule;if(te=br(nt),!te)return!1;H=nt}const Be=R.has(H);if(ve){if(Be)return!1;if(R.add(H),ve.dependencies){const nt="function"==typeof ve.dependencies?ve.dependencies():ve.dependencies;for(const Ht of nt)Fh(Ht,p,g,R)}}else{if(!te)return!1;{if(null!=te.imports&&!Be){let Ht;R.add(H);try{Ne(te.imports,Sn=>{Fh(Sn,p,g,R)&&(Ht||(Ht=[]),Ht.push(Sn))})}finally{}void 0!==Ht&&Ih(Ht,p)}if(!Be){const Ht=el(H)||(()=>new H);p.push({provide:H,useFactory:Ht,deps:nr},{provide:Np,useValue:H,multi:!0},{provide:uh,useValue:()=>et(H),multi:!0})}const nt=te.providers;null==nt||Be||L_(nt,Sn=>{p.push(Sn)})}}return H!==d&&void 0!==d.providers}function L_(d,p){for(let g of d)$(g)&&(g=g.\u0275providers),Array.isArray(g)?L_(g,p):p(g)}const I=f({provide:String,useValue:f});function re(d){return null!==d&&"object"==typeof d&&I in d}function Oe(d){return"function"==typeof d}const On=new Mu("Set Injector scope."),Ar={},ri={};let Di;function Pi(){return void 0===Di&&(Di=new ch),Di}class cs{}class Yo extends cs{get destroyed(){return this._destroyed}constructor(p,g,R,H){super(),this.parent=g,this.source=R,this.scopes=H,this.records=new Map,this._ngOnDestroyHooks=new Set,this._onDestroyHooks=[],this._destroyed=!1,vr(p,ve=>this.processProvider(ve)),this.records.set(ym,Ke(void 0,this)),H.has("environment")&&this.records.set(cs,Ke(void 0,this));const te=this.records.get(On);null!=te&&"string"==typeof te.value&&this.scopes.add(te.value),this.injectorDefTypes=new Set(this.get(Np.multi,nr,jn.Self))}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{for(const p of this._ngOnDestroyHooks)p.ngOnDestroy();for(const p of this._onDestroyHooks)p()}finally{this.records.clear(),this._ngOnDestroyHooks.clear(),this.injectorDefTypes.clear(),this._onDestroyHooks.length=0}}onDestroy(p){this._onDestroyHooks.push(p)}runInContext(p){this.assertNotDestroyed();const g=Fe(this),R=Wi(void 0);try{return p()}finally{Fe(g),Wi(R)}}get(p,g=Eo,R=jn.Default){this.assertNotDestroyed(),R=lt(R);const H=Fe(this),te=Wi(void 0);try{if(!(R&jn.SkipSelf)){let Be=this.records.get(p);if(void 0===Be){const nt=function In(d){return"function"==typeof d||"object"==typeof d&&d instanceof Mu}(p)&&Lr(p);Be=nt&&this.injectableDefInScope(nt)?Ke(y(p),Ar):null,this.records.set(p,Be)}if(null!=Be)return this.hydrate(p,Be)}return(R&jn.Self?Pi():this.parent).get(p,g=R&jn.Optional&&g===Eo?null:g)}catch(ve){if("NullInjectorError"===ve.name){if((ve[$i]=ve[$i]||[]).unshift(T(p)),H)throw ve;return function gr(d,p,g,R){const H=d[$i];throw p[Hn]&&H.unshift(p[Hn]),d.message=function Pn(d,p,g,R=null){d=d&&"\n"===d.charAt(0)&&d.charAt(1)==Dn?d.slice(2):d;let H=T(p);if(Array.isArray(p))H=p.map(T).join(" -> ");else if("object"==typeof p){let te=[];for(let ve in p)if(p.hasOwnProperty(ve)){let Be=p[ve];te.push(ve+":"+("string"==typeof Be?JSON.stringify(Be):T(Be)))}H=`{${te.join(", ")}}`}return`${g}${R?"("+R+")":""}[${H}]: ${d.replace(Hi,"\n  ")}`}("\n"+d.message,H,g,R),d[qr]=H,d[$i]=null,d}(ve,p,"R3InjectorError",this.source)}throw ve}finally{Wi(te),Fe(H)}}resolveInjectorInitializers(){const p=Fe(this),g=Wi(void 0);try{const R=this.get(uh.multi,nr,jn.Self);for(const H of R)H()}finally{Fe(p),Wi(g)}}toString(){const p=[],g=this.records;for(const R of g.keys())p.push(T(R));return`R3Injector[${p.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new X(205,!1)}processProvider(p){let g=Oe(p=U(p))?p:U(p&&p.provide);const R=function Y(d){return re(d)?Ke(void 0,d.useValue):Ke(be(d),Ar)}(p);if(Oe(p)||!0!==p.multi)this.records.get(g);else{let H=this.records.get(g);H||(H=Ke(void 0,Ar,!0),H.factory=()=>Rt(H.multi),this.records.set(g,H)),g=p,H.multi.push(p)}this.records.set(g,R)}hydrate(p,g){return g.value===Ar&&(g.value=ri,g.value=g.factory()),"object"==typeof g.value&&g.value&&function _n(d){return null!==d&&"object"==typeof d&&"function"==typeof d.ngOnDestroy}(g.value)&&this._ngOnDestroyHooks.add(g.value),g.value}injectableDefInScope(p){if(!p.providedIn)return!1;const g=U(p.providedIn);return"string"==typeof g?"any"===g||this.scopes.has(g):this.injectorDefTypes.has(g)}}function y(d){const p=Lr(d),g=null!==p?p.factory:el(d);if(null!==g)return g;if(d instanceof Mu)throw new X(204,!1);if(d instanceof Function)return function x(d){const p=d.length;if(p>0)throw Mt(p,"?"),new X(204,!1);const g=function jr(d){return d&&(d[ht]||d[Tt])||null}(d);return null!==g?()=>g.factory(d):()=>new d}(d);throw new X(204,!1)}function be(d,p,g){let R;if(Oe(d)){const H=U(d);return el(H)||y(H)}if(re(d))R=()=>U(d.useValue);else if(function z(d){return!(!d||!d.useFactory)}(d))R=()=>d.useFactory(...Rt(d.deps||[]));else if(function S(d){return!(!d||!d.useExisting)}(d))R=()=>et(U(d.useExisting));else{const H=U(d&&(d.useClass||d.provide));if(!function xt(d){return!!d.deps}(d))return el(H)||y(H);R=()=>new H(...Rt(d.deps))}return R}function Ke(d,p,g=!1){return{factory:d,value:p,multi:g?[]:void 0}}function vr(d,p){for(const g of d)Array.isArray(g)?vr(g,p):g&&$(g)?vr(g.\u0275providers,p):p(g)}class Si{}class Uo{}class ia{resolveComponentFactory(p){throw function Ds(d){const p=Error(`No component factory found for ${T(d)}. Did you add it to @NgModule.entryComponents?`);return p.ngComponent=d,p}(p)}}let oa=(()=>{class d{}return d.NULL=new ia,d})();function di(){return Wr(zl(),mi())}function Wr(d,p){return new si(cu(d,p))}let si=(()=>{class d{constructor(g){this.nativeElement=g}}return d.__NG_ELEMENT_ID__=di,d})();function no(d){return d instanceof si?d.nativeElement:d}class vo{}let fl=(()=>{class d{}return d.__NG_ELEMENT_ID__=()=>function Us(){const d=mi(),g=ba(zl().index,d);return(zr(g)?g:d)[Ro]}(),d})(),ll=(()=>{class d{}return d.\u0275prov=xn({token:d,providedIn:"root",factory:()=>null}),d})();class Cl{constructor(p){this.full=p,this.major=p.split(".")[0],this.minor=p.split(".")[1],this.patch=p.split(".").slice(2).join(".")}}const Ia=new Cl("15.2.9"),bf={},Ip="ngOriginalError";function Lh(d){return d[Ip]}class dh{constructor(){this._console=console}handleError(p){const g=this._findOriginalError(p);this._console.error("ERROR",p),g&&this._console.error("ORIGINAL ERROR",g)}_findOriginalError(p){let g=p&&Lh(p);for(;g&&Lh(g);)g=Lh(g);return g||null}}function Lm(d){return d.ownerDocument.defaultView}function Tf(d){return d.ownerDocument.body}function Qf(d){return d instanceof Function?d():d}function Iu(d,p,g){let R=d.length;for(;;){const H=d.indexOf(p,g);if(-1===H)return H;if(0===H||d.charCodeAt(H-1)<=32){const te=p.length;if(H+te===R||d.charCodeAt(H+te)<=32)return H}g=H+1}}const Es="ng-template";function gu(d,p,g){let R=0,H=!0;for(;R<d.length;){let te=d[R++];if("string"==typeof te&&H){const ve=d[R++];if(g&&"class"===te&&-1!==Iu(ve.toLowerCase(),p,0))return!0}else{if(1===te){for(;R<d.length&&"string"==typeof(te=d[R++]);)if(te.toLowerCase()===p)return!0;return!1}"number"==typeof te&&(H=!1)}}return!1}function km(d){return 4===d.type&&d.value!==Es}function k_(d,p,g){return p===(4!==d.type||g?d.value:Es)}function Pd(d,p,g){let R=4;const H=d.attrs||[],te=function S1(d){for(let p=0;p<d.length;p++)if(Qa(d[p]))return p;return d.length}(H);let ve=!1;for(let Be=0;Be<p.length;Be++){const nt=p[Be];if("number"!=typeof nt){if(!ve)if(4&R){if(R=2|1&R,""!==nt&&!k_(d,nt,g)||""===nt&&1===p.length){if(hp(R))return!1;ve=!0}}else{const Ht=8&R?nt:p[++Be];if(8&R&&null!==d.attrs){if(!gu(d.attrs,Ht,g)){if(hp(R))return!1;ve=!0}continue}const Ln=$m(8&R?"class":nt,H,km(d),g);if(-1===Ln){if(hp(R))return!1;ve=!0;continue}if(""!==Ht){let ei;ei=Ln>te?"":H[Ln+1].toLowerCase();const xi=8&R?ei:null;if(xi&&-1!==Iu(xi,Ht,0)||2&R&&Ht!==ei){if(hp(R))return!1;ve=!0}}}}else{if(!ve&&!hp(R)&&!hp(nt))return!1;if(ve&&hp(nt))continue;ve=!1,R=nt|1&R}}return hp(R)||ve}function hp(d){return 0==(1&d)}function $m(d,p,g,R){if(null===p)return-1;let H=0;if(R||!g){let te=!1;for(;H<p.length;){const ve=p[H];if(ve===d)return H;if(3===ve||6===ve)te=!0;else{if(1===ve||2===ve){let Be=p[++H];for(;"string"==typeof Be;)Be=p[++H];continue}if(4===ve)break;if(0===ve){H+=4;continue}}H+=te?1:2}return-1}return function Hm(d,p){let g=d.indexOf(4);if(g>-1)for(g++;g<d.length;){const R=d[g];if("number"==typeof R)return-1;if(R===p)return g;g++}return-1}(p,d)}function Fp(d,p,g=!1){for(let R=0;R<p.length;R++)if(Pd(d,p[R],g))return!0;return!1}function b1(d,p){e:for(let g=0;g<p.length;g++){const R=p[g];if(d.length===R.length){for(let H=0;H<d.length;H++)if(d[H]!==R[H])continue e;return!0}}return!1}function mg(d,p){return d?":not("+p.trim()+")":p}function kg(d){let p=d[0],g=1,R=2,H="",te=!1;for(;g<d.length;){let ve=d[g];if("string"==typeof ve)if(2&R){const Be=d[++g];H+="["+ve+(Be.length>0?'="'+Be+'"':"")+"]"}else 8&R?H+="."+ve:4&R&&(H+=" "+ve);else""!==H&&!hp(ve)&&(p+=mg(te,H),H=""),R=ve,te=te||!hp(R);g++}return""!==H&&(p+=mg(te,H)),p}const Il={};function gg(d){vg(Hs(),mi(),zo()+d,!1)}function vg(d,p,g,R){if(!R)if(3==(3&p[_o])){const te=d.preOrderCheckHooks;null!==te&&fc(p,te,g)}else{const te=d.preOrderHooks;null!==te&&bu(p,te,0,g)}$l(g)}function Eg(d,p=null,g=null,R){const H=Sg(d,p,g,R);return H.resolveInjectorInitializers(),H}function Sg(d,p=null,g=null,R,H=new Set){const te=[g||nr,om(d)];return R=R||("object"==typeof d?void 0:T(d)),new Yo(te,p||Pi(),R||null,H)}let _h=(()=>{class d{static create(g,R){if(Array.isArray(g))return Eg({name:""},R,g,"");{const H=g.name??"";return Eg({name:H},g.parent,g.providers,H)}}}return d.THROW_IF_NOT_FOUND=Eo,d.NULL=new ch,d.\u0275prov=xn({token:d,providedIn:"any",factory:()=>et(ym)}),d.__NG_ELEMENT_ID__=-1,d})();function Sm(d,p=jn.Default){const g=mi();return null===g?et(d,p):fu(zl(),g,U(d),p)}function Dv(){throw new Error("invalid")}function Ug(d,p){const g=d.contentQueries;if(null!==g)for(let R=0;R<g.length;R+=2){const te=g[R+1];if(-1!==te){const ve=d.data[te];yr(g[R]),ve.contentQueries(2,p[te],te)}}}function Bg(d,p,g,R,H,te,ve,Be,nt,Ht,Sn){const Ln=p.blueprint.slice();return Ln[Bn]=H,Ln[_o]=76|R,(null!==Sn||d&&1024&d[_o])&&(Ln[_o]|=1024),Al(Ln),Ln[go]=Ln[da]=d,Ln[gs]=g,Ln[la]=ve||d&&d[la],Ln[Ro]=Be||d&&d[Ro],Ln[jl]=nt||d&&d[jl]||null,Ln[Is]=Ht||d&&d[Is]||null,Ln[jo]=te,Ln[Ts]=function pf(){return Hp++}(),Ln[hs]=Sn,Ln[$a]=2==p.type?d[$a]:Ln,Ln}function bm(d,p,g,R,H){let te=d.data[p];if(null===te)te=Tm(d,p,g,R,H),function yt(){return zs.lFrame.inI18n}()&&(te.flags|=32);else if(64&te.type){te.type=g,te.value=R,te.attrs=H;const ve=hu();te.injectorIndex=null===ve?-1:ve.injectorIndex}return lu(te,!0),te}function Tm(d,p,g,R,H){const te=sc(),ve=id(),nt=d.data[p]=function Bh(d,p,g,R,H,te){return{type:g,index:R,insertBeforeIndex:null,injectorIndex:p?p.injectorIndex:-1,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,componentOffset:-1,propertyBindings:null,flags:0,providerIndexes:0,value:H,attrs:te,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tView:null,next:null,prev:null,projectionNext:null,child:null,parent:p,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,ve?te:te&&te.parent,g,p,R,H);return null===d.firstChild&&(d.firstChild=nt),null!==te&&(ve?null==te.child&&null!==nt.parent&&(te.child=nt):null===te.next&&(te.next=nt,nt.prev=te)),nt}function Cm(d,p,g,R){if(0===g)return-1;const H=p.length;for(let te=0;te<g;te++)p.push(R),d.blueprint.push(R),d.data.push(null);return H}function A1(d,p,g){Io(p);try{const R=d.viewQuery;null!==R&&jg(1,R,g);const H=d.template;null!==H&&Mm(d,p,H,1,g),d.firstCreatePass&&(d.firstCreatePass=!1),d.staticContentQueries&&Ug(d,p),d.staticViewQueries&&jg(2,d.viewQuery,g);const te=d.components;null!==te&&function q0(d,p){for(let g=0;g<p.length;g++)hy(d,p[g])}(p,te)}catch(R){throw d.firstCreatePass&&(d.incompleteFirstPass=!0,d.firstCreatePass=!1),R}finally{p[_o]&=-5,Do()}}function Tg(d,p,g,R){const H=p[_o];if(128!=(128&H)){Io(p);try{Al(p),function ja(d){return zs.lFrame.bindingIndex=d}(d.bindingStartIndex),null!==g&&Mm(d,p,g,2,R);const ve=3==(3&H);if(ve){const Ht=d.preOrderCheckHooks;null!==Ht&&fc(p,Ht,null)}else{const Ht=d.preOrderHooks;null!==Ht&&bu(p,Ht,0,null),je(p,0)}if(function uf(d){for(let p=xd(d);null!==p;p=bc(p)){if(!p[fa])continue;const g=p[Cs];for(let R=0;R<g.length;R++){const H=g[R];512&H[_o]||Dc(H[go],1),H[_o]|=512}}}(p),function _y(d){for(let p=xd(d);null!==p;p=bc(p))for(let g=ns;g<p.length;g++){const R=p[g],H=R[ci];Su(R)&&Tg(H,R,H.template,R[gs])}}(p),null!==d.contentQueries&&Ug(d,p),ve){const Ht=d.contentCheckHooks;null!==Ht&&fc(p,Ht)}else{const Ht=d.contentHooks;null!==Ht&&bu(p,Ht,1),je(p,1)}!function K0(d,p){const g=d.hostBindingOpCodes;if(null!==g)try{for(let R=0;R<g.length;R++){const H=g[R];if(H<0)$l(~H);else{const te=H,ve=g[++R],Be=g[++R];Gt(ve,te),Be(2,p[te])}}}finally{$l(-1)}}(d,p);const Be=d.components;null!==Be&&function X0(d,p){for(let g=0;g<p.length;g++)Lp(d,p[g])}(p,Be);const nt=d.viewQuery;if(null!==nt&&jg(2,nt,R),ve){const Ht=d.viewCheckHooks;null!==Ht&&fc(p,Ht)}else{const Ht=d.viewHooks;null!==Ht&&bu(p,Ht,2),je(p,2)}!0===d.firstUpdatePass&&(d.firstUpdatePass=!1),p[_o]&=-41,512&p[_o]&&(p[_o]&=-513,Dc(p[go],-1))}finally{Do()}}}function Mm(d,p,g,R,H){const te=zo(),ve=2&R;try{$l(-1),ve&&p.length>$s&&vg(d,p,$s,!1),$u(ve?2:0,H),g(R,H)}finally{$l(te),$u(ve?3:1,H)}}function Kf(d,p,g){if(gt(p)){const H=p.directiveEnd;for(let te=p.directiveStart;te<H;te++){const ve=d.data[te];ve.contentQueries&&ve.contentQueries(1,g[te],te)}}}function $_(d,p,g){fi()&&(function sy(d,p,g,R){const H=g.directiveStart,te=g.directiveEnd;Tn(g)&&function py(d,p,g){const R=cu(p,d),H=Rv(g),te=d[la],ve=Cg(d,Bg(d,H,null,g.onPush?32:16,R,p,te,te.createRenderer(R,g),null,null,null));d[p.index]=ve}(p,g,d.data[H+g.componentOffset]),d.firstCreatePass||rs(g,p),Sc(R,p);const ve=g.initialInputs;for(let Be=H;Be<te;Be++){const nt=d.data[Be],Ht=vc(p,d,Be,g);Sc(Ht,p),null!==ve&&F1(0,Be-H,Ht,nt,0,ve),Ze(nt)&&(ba(g.index,p)[gs]=vc(p,d,Be,g))}}(d,p,g,cu(g,p)),64==(64&g.flags)&&wv(d,p,g))}function D1(d,p,g=cu){const R=p.localNames;if(null!==R){let H=p.index+1;for(let te=0;te<R.length;te+=2){const ve=R[te+1],Be=-1===ve?g(p,d):d[ve];d[H++]=Be}}}function Rv(d){const p=d.tView;return null===p||p.incompleteFirstPass?d.tView=R1(1,null,d.template,d.decls,d.vars,d.directiveDefs,d.pipeDefs,d.viewQuery,d.schemas,d.consts):p}function R1(d,p,g,R,H,te,ve,Be,nt,Ht){const Sn=$s+R,Ln=Sn+H,ei=function ey(d,p){const g=[];for(let R=0;R<p;R++)g.push(R<d?null:Il);return g}(Sn,Ln),xi="function"==typeof Ht?Ht():Ht;return ei[ci]={type:d,blueprint:ei,template:g,queries:null,viewQuery:Be,declTNode:p,data:ei.slice().fill(null,Sn),bindingStartIndex:Sn,expandoStartIndex:Ln,hostBindingOpCodes:null,firstCreatePass:!0,firstUpdatePass:!0,staticViewQueries:!1,staticContentQueries:!1,preOrderHooks:null,preOrderCheckHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,cleanup:null,contentQueries:null,components:null,directiveRegistry:"function"==typeof te?te():te,pipeRegistry:"function"==typeof ve?ve():ve,firstChild:null,schemas:nt,consts:xi,incompleteFirstPass:!1}}function x1(d,p,g,R){const H=Nv(p);null===g?H.push(R):(H.push(g),d.firstCreatePass&&Iv(d).push(R,H.length-1))}function tu(d,p,g,R){for(let H in d)if(d.hasOwnProperty(H)){g=null===g?{}:g;const te=d[H];null===R?w1(g,p,H,te):R.hasOwnProperty(H)&&w1(g,p,R[H],te)}return g}function w1(d,p,g,R){d.hasOwnProperty(g)?d[g].push(p,R):d[g]=[p,R]}function Jp(d,p,g,R,H,te,ve,Be){const nt=cu(p,g);let Sn,Ht=p.inputs;!Be&&null!=Ht&&(Sn=Ht[R])?(U1(d,g,Sn,R,H),Tn(p)&&function Ac(d,p){const g=ba(p,d);16&g[_o]||(g[_o]|=32)}(g,p.index)):3&p.type&&(R=function P1(d){return"class"===d?"className":"for"===d?"htmlFor":"formaction"===d?"formAction":"innerHtml"===d?"innerHTML":"readonly"===d?"readOnly":"tabindex"===d?"tabIndex":d}(R),H=null!=ve?ve(H,p.value||"",R):H,te.setProperty(nt,R,H))}function Bm(d,p,g,R){if(fi()){const H=null===R?null:{"":-1},te=function ly(d,p){const g=d.directiveRegistry;let R=null,H=null;if(g)for(let te=0;te<g.length;te++){const ve=g[te];if(Fp(p,ve.selectors,!1))if(R||(R=[]),Ze(ve))if(null!==ve.findHostDirectiveDefs){const Be=[];H=H||new Map,ve.findHostDirectiveDefs(ve,Be,H),R.unshift(...Be,ve),N1(d,p,Be.length)}else R.unshift(ve),N1(d,p,0);else H=H||new Map,ve.findHostDirectiveDefs?.(ve,R,H),R.push(ve)}return null===R?null:[R,H]}(d,g);let ve,Be;null===te?ve=Be=null:[ve,Be]=te,null!==ve&&xv(d,p,g,ve,H,Be),H&&function uy(d,p,g){if(p){const R=d.localNames=[];for(let H=0;H<p.length;H+=2){const te=g[p[H+1]];if(null==te)throw new X(-301,!1);R.push(p[H],te)}}}(g,R,H)}g.mergedAttrs=Jl(g.mergedAttrs,g.attrs)}function xv(d,p,g,R,H,te){for(let Ht=0;Ht<R.length;Ht++)eu(rs(g,p),d,R[Ht].type);!function dy(d,p,g){d.flags|=1,d.directiveStart=p,d.directiveEnd=p+g,d.providerIndexes=p}(g,d.data.length,R.length);for(let Ht=0;Ht<R.length;Ht++){const Sn=R[Ht];Sn.providersResolver&&Sn.providersResolver(Sn)}let ve=!1,Be=!1,nt=Cm(d,p,R.length,null);for(let Ht=0;Ht<R.length;Ht++){const Sn=R[Ht];g.mergedAttrs=Jl(g.mergedAttrs,Sn.hostAttrs),fy(d,g,p,nt,Sn),cy(nt,Sn,H),null!==Sn.contentQueries&&(g.flags|=4),(null!==Sn.hostBindings||null!==Sn.hostAttrs||0!==Sn.hostVars)&&(g.flags|=64);const Ln=Sn.type.prototype;!ve&&(Ln.ngOnChanges||Ln.ngOnInit||Ln.ngDoCheck)&&((d.preOrderHooks??(d.preOrderHooks=[])).push(g.index),ve=!0),!Be&&(Ln.ngOnChanges||Ln.ngDoCheck)&&((d.preOrderCheckHooks??(d.preOrderCheckHooks=[])).push(g.index),Be=!0),nt++}!function g_(d,p,g){const H=p.directiveEnd,te=d.data,ve=p.attrs,Be=[];let nt=null,Ht=null;for(let Sn=p.directiveStart;Sn<H;Sn++){const Ln=te[Sn],ei=g?g.get(Ln):null,mo=ei?ei.outputs:null;nt=tu(Ln.inputs,Sn,nt,ei?ei.inputs:null),Ht=tu(Ln.outputs,Sn,Ht,mo);const ls=null===nt||null===ve||km(p)?null:Pv(nt,Sn,ve);Be.push(ls)}null!==nt&&(nt.hasOwnProperty("class")&&(p.flags|=8),nt.hasOwnProperty("style")&&(p.flags|=16)),p.initialInputs=Be,p.inputs=nt,p.outputs=Ht}(d,g,te)}function wv(d,p,g){const R=g.directiveStart,H=g.directiveEnd,te=g.index,ve=function An(){return zs.lFrame.currentDirectiveIndex}();try{$l(te);for(let Be=R;Be<H;Be++){const nt=d.data[Be],Ht=p[Be];kn(Be),(null!==nt.hostBindings||0!==nt.hostVars||null!==nt.hostAttrs)&&ay(nt,Ht)}}finally{$l(-1),kn(ve)}}function ay(d,p){null!==d.hostBindings&&d.hostBindings(1,p)}function N1(d,p,g){p.componentOffset=g,(d.components??(d.components=[])).push(p.index)}function cy(d,p,g){if(g){if(p.exportAs)for(let R=0;R<p.exportAs.length;R++)g[p.exportAs[R]]=d;Ze(p)&&(g[""]=d)}}function fy(d,p,g,R,H){d.data[R]=H;const te=H.factory||(H.factory=el(H.type)),ve=new Xn(te,Ze(H),Sm);d.blueprint[R]=ve,g[R]=ve,function iy(d,p,g,R,H){const te=H.hostBindings;if(te){let ve=d.hostBindingOpCodes;null===ve&&(ve=d.hostBindingOpCodes=[]);const Be=~p.index;(function oy(d){let p=d.length;for(;p>0;){const g=d[--p];if("number"==typeof g&&g<0)return g}return 0})(ve)!=Be&&ve.push(Be),ve.push(g,R,te)}}(d,p,R,Cm(d,g,H.hostVars,Il),H)}function I1(d,p,g,R,H,te,ve){if(null==te)d.removeAttribute(p,H,g);else{const Be=null==ve?V(te):ve(te,R||"",H);d.setAttribute(p,H,Be,g)}}function F1(d,p,g,R,H,te){const ve=te[p];if(null!==ve){const Be=R.setInput;for(let nt=0;nt<ve.length;){const Ht=ve[nt++],Sn=ve[nt++],Ln=ve[nt++];null!==Be?R.setInput(g,Ln,Ht,Sn):g[Sn]=Ln}}}function Pv(d,p,g){let R=null,H=0;for(;H<g.length;){const te=g[H];if(0!==te)if(5!==te){if("number"==typeof te)break;if(d.hasOwnProperty(te)){null===R&&(R=[]);const ve=d[te];for(let Be=0;Be<ve.length;Be+=2)if(ve[Be]===p){R.push(te,ve[Be+1],g[H+1]);break}}H+=2}else H+=2;else H+=4}return R}function L1(d,p,g,R){return[d,!0,!1,p,null,0,R,g,null,null]}function Lp(d,p){const g=ba(p,d);if(Su(g)){const R=g[ci];48&g[_o]?Tg(R,g,R.template,g[gs]):g[ts]>0&&k1(g)}}function k1(d){for(let R=xd(d);null!==R;R=bc(R))for(let H=ns;H<R.length;H++){const te=R[H];if(Su(te))if(512&te[_o]){const ve=te[ci];Tg(ve,te,ve.template,te[gs])}else te[ts]>0&&k1(te)}const g=d[ci].components;if(null!==g)for(let R=0;R<g.length;R++){const H=ba(g[R],d);Su(H)&&H[ts]>0&&k1(H)}}function hy(d,p){const g=ba(p,d),R=g[ci];(function my(d,p){for(let g=p.length;g<d.blueprint.length;g++)p.push(d.blueprint[g])})(R,g),A1(R,g,g[gs])}function Cg(d,p){return d[gl]?d[qa][es]=p:d[gl]=p,d[qa]=p,p}function Gg(d){for(;d;){d[_o]|=32;const p=sp(d);if(Jt(d)&&!p)return d;d=p}return null}function Yg(d,p,g,R=!0){const H=p[la];H.begin&&H.begin();try{Tg(d,p,d.template,g)}catch(ve){throw R&&H1(p,ve),ve}finally{H.end&&H.end()}}function jg(d,p,g){yr(0),p(d,g)}function Nv(d){return d[ss]||(d[ss]=[])}function Iv(d){return d.cleanup||(d.cleanup=[])}function H1(d,p){const g=d[Is],R=g?g.get(dh,null):null;R&&R.handleError(p)}function U1(d,p,g,R,H){for(let te=0;te<g.length;){const ve=g[te++],Be=g[te++],nt=p[ve],Ht=d.data[ve];null!==Ht.setInput?Ht.setInput(nt,H,R,Be):nt[Be]=H}}function Gh(d,p,g){const R=dc(p,d);Q_(d[Ro],R,g)}function zg(d,p,g){let R=g?d.styles:null,H=g?d.classes:null,te=0;if(null!==p)for(let ve=0;ve<p.length;ve++){const Be=p[ve];"number"==typeof Be?te=Be:1==te?H=M(H,Be):2==te&&(R=M(R,Be+": "+p[++ve]+";"))}g?d.styles=R:d.stylesWithoutHost=R,g?d.classes=H:d.classesWithoutHost=H}function Vg(d,p,g,R,H=!1){for(;null!==g;){const te=p[g.index];if(null!==te&&R.push(tl(te)),io(te))for(let Be=ns;Be<te.length;Be++){const nt=te[Be],Ht=nt[ci].firstChild;null!==Ht&&Vg(nt[ci],nt,Ht,R)}const ve=g.type;if(8&ve)Vg(d,p,g.child,R);else if(32&ve){const Be=Rd(g,p);let nt;for(;nt=Be();)R.push(nt)}else if(16&ve){const Be=eh(p,g);if(Array.isArray(Be))R.push(...Be);else{const nt=sp(p[$a]);Vg(nt[ci],nt,Be,R,!0)}}g=H?g.projectionNext:g.next}return R}class hh{get rootNodes(){const p=this._lView,g=p[ci];return Vg(g,p,g.firstChild,[])}constructor(p,g){this._lView=p,this._cdRefInjectingView=g,this._appRef=null,this._attachedToViewContainer=!1}get context(){return this._lView[gs]}set context(p){this._lView[gs]=p}get destroyed(){return 128==(128&this._lView[_o])}destroy(){if(this._appRef)this._appRef.detachView(this);else if(this._attachedToViewContainer){const p=this._lView[go];if(io(p)){const g=p[No],R=g?g.indexOf(this):-1;R>-1&&(Mh(p,R),Ye(g,R))}this._attachedToViewContainer=!1}Jh(this._lView[ci],this._lView)}onDestroy(p){x1(this._lView[ci],this._lView,null,p)}markForCheck(){Gg(this._cdRefInjectingView||this._lView)}detach(){this._lView[_o]&=-65}reattach(){this._lView[_o]|=64}detectChanges(){Yg(this._lView[ci],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new X(902,!1);this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function vm(d,p){zd(d,p,p[Ro],2,null,null)}(this._lView[ci],this._lView)}attachToAppRef(p){if(this._attachedToViewContainer)throw new X(902,!1);this._appRef=p}}class gy extends hh{constructor(p){super(p),this._view=p}detectChanges(){const p=this._view;Yg(p[ci],p,p[gs],!1)}checkNoChanges(){}get context(){return null}}class Fv extends oa{constructor(p){super(),this.ngModule=p}resolveComponentFactory(p){const g=ji(p);return new Gm(g,this.ngModule)}}function Lv(d){const p=[];for(let g in d)d.hasOwnProperty(g)&&p.push({propName:d[g],templateName:g});return p}class yy{constructor(p,g){this.injector=p,this.parentInjector=g}get(p,g,R){R=lt(R);const H=this.injector.get(p,bf,R);return H!==bf||g===bf?H:this.parentInjector.get(p,g,R)}}class Gm extends Uo{get inputs(){return Lv(this.componentDef.inputs)}get outputs(){return Lv(this.componentDef.outputs)}constructor(p,g){super(),this.componentDef=p,this.ngModule=g,this.componentType=p.type,this.selector=function Em(d){return d.map(kg).join(",")}(p.selectors),this.ngContentSelectors=p.ngContentSelectors?p.ngContentSelectors:[],this.isBoundToModule=!!g}create(p,g,R,H){let te=(H=H||this.ngModule)instanceof cs?H:H?.injector;te&&null!==this.componentDef.getStandaloneInjector&&(te=this.componentDef.getStandaloneInjector(te)||te);const ve=te?new yy(p,te):p,Be=ve.get(vo,null);if(null===Be)throw new X(407,!1);const nt=ve.get(ll,null),Ht=Be.createRenderer(null,this.componentDef),Sn=this.componentDef.selectors[0][0]||"div",Ln=R?function ty(d,p,g){return d.selectRootElement(p,g===tr.ShadowDom)}(Ht,R,this.componentDef.encapsulation):X_(Ht,Sn,function vy(d){const p=d.toLowerCase();return"svg"===p?"svg":"math"===p?"math":null}(Sn)),ei=this.componentDef.onPush?288:272,xi=R1(0,null,null,1,0,null,null,null,null,null),mo=Bg(null,xi,null,ei,null,null,Be,Ht,nt,ve,null);let ls,js;Io(mo);try{const ga=this.componentDef;let bl,Vo=null;ga.findHostDirectiveDefs?(bl=[],Vo=new Map,ga.findHostDirectiveDefs(ga,bl,Vo),bl.push(ga)):bl=[ga];const Kl=function Ey(d,p){const g=d[ci],R=$s;return d[R]=p,bm(g,R,2,"#host",null)}(mo,Ln),_d=function Sy(d,p,g,R,H,te,ve,Be){const nt=H[ci];!function by(d,p,g,R){for(const H of d)p.mergedAttrs=Jl(p.mergedAttrs,H.hostAttrs);null!==p.mergedAttrs&&(zg(p,p.mergedAttrs,!0),null!==g&&Td(R,g,p))}(R,d,p,ve);const Ht=te.createRenderer(p,g),Sn=Bg(H,Rv(g),null,g.onPush?32:16,H[d.index],d,te,Ht,Be||null,null,null);return nt.firstCreatePass&&N1(nt,d,R.length-1),Cg(H,Sn),H[d.index]=Sn}(Kl,Ln,ga,bl,mo,Be,Ht);js=Ru(xi,$s),Ln&&function Ty(d,p,g,R){if(R)Ho(d,g,["ng-version",Ia.full]);else{const{attrs:H,classes:te}=function $g(d){const p=[],g=[];let R=1,H=2;for(;R<d.length;){let te=d[R];if("string"==typeof te)2===H?""!==te&&p.push(te,d[++R]):8===H&&g.push(te);else{if(!hp(H))break;H=te}R++}return{attrs:p,classes:g}}(p.selectors[0]);H&&Ho(d,g,H),te&&te.length>0&&jp(d,g,te.join(" "))}}(Ht,ga,Ln,R),void 0!==g&&function Cy(d,p,g){const R=d.projection=[];for(let H=0;H<p.length;H++){const te=g[H];R.push(null!=te?Array.from(te):null)}}(js,this.ngContentSelectors,g),ls=function B1(d,p,g,R,H,te){const ve=zl(),Be=H[ci],nt=cu(ve,H);xv(Be,H,ve,g,null,R);for(let Sn=0;Sn<g.length;Sn++)Sc(vc(H,Be,ve.directiveStart+Sn,ve),H);wv(Be,H,ve),nt&&Sc(nt,H);const Ht=vc(H,Be,ve.directiveStart+ve.componentOffset,ve);if(d[gs]=H[gs]=Ht,null!==te)for(const Sn of te)Sn(Ht,p);return Kf(Be,ve,d),Ht}(_d,ga,bl,Vo,mo,[$v]),A1(xi,mo,null)}finally{Do()}return new kv(this.componentType,ls,Wr(js,mo),mo,js)}}class kv extends Si{constructor(p,g,R,H,te){super(),this.location=R,this._rootLView=H,this._tNode=te,this.instance=g,this.hostView=this.changeDetectorRef=new gy(H),this.componentType=p}setInput(p,g){const R=this._tNode.inputs;let H;if(null!==R&&(H=R[p])){const te=this._rootLView;U1(te[ci],te,H,p,g),Gg(ba(this._tNode.index,te))}}get injector(){return new xa(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(p){this.hostView.onDestroy(p)}}function $v(){const d=zl();Pa(mi()[ci],d)}function G1(d){let p=function Hv(d){return Object.getPrototypeOf(d.prototype).constructor}(d.type),g=!0;const R=[d];for(;p;){let H;if(Ze(d))H=p.\u0275cmp||p.\u0275dir;else{if(p.\u0275cmp)throw new X(903,!1);H=p.\u0275dir}if(H){if(g){R.push(H);const ve=d;ve.inputs=Y1(d.inputs),ve.declaredInputs=Y1(d.declaredInputs),ve.outputs=Y1(d.outputs);const Be=H.hostBindings;Be&&Dy(d,Be);const nt=H.viewQuery,Ht=H.contentQueries;if(nt&&Oy(d,nt),Ht&&Ay(d,Ht),m(d.inputs,H.inputs),m(d.declaredInputs,H.declaredInputs),m(d.outputs,H.outputs),Ze(H)&&H.data.animation){const Sn=d.data;Sn.animation=(Sn.animation||[]).concat(H.data.animation)}}const te=H.features;if(te)for(let ve=0;ve<te.length;ve++){const Be=te[ve];Be&&Be.ngInherit&&Be(d),Be===G1&&(g=!1)}}p=Object.getPrototypeOf(p)}!function My(d){let p=0,g=null;for(let R=d.length-1;R>=0;R--){const H=d[R];H.hostVars=p+=H.hostVars,H.hostAttrs=Jl(H.hostAttrs,g=Jl(g,H.hostAttrs))}}(R)}function Y1(d){return d===Zn?{}:d===nr?[]:d}function Oy(d,p){const g=d.viewQuery;d.viewQuery=g?(R,H)=>{p(R,H),g(R,H)}:p}function Ay(d,p){const g=d.contentQueries;d.contentQueries=g?(R,H,te)=>{p(R,H,te),g(R,H,te)}:p}function Dy(d,p){const g=d.hostBindings;d.hostBindings=g?(R,H)=>{p(R,H),g(R,H)}:p}function Uv(d){return p=>{p.findHostDirectiveDefs=Bv,p.hostDirectives=(Array.isArray(d)?d:d()).map(g=>"function"==typeof g?{directive:U(g),inputs:Zn,outputs:Zn}:{directive:U(g.directive),inputs:Gv(g.inputs),outputs:Gv(g.outputs)})}}function Bv(d,p,g){if(null!==d.hostDirectives)for(const R of d.hostDirectives){const H=Vi(R.directive);Py(H.declaredInputs,R.inputs),Bv(H,p,g),g.set(H,R),p.push(H)}}function Gv(d){if(void 0===d||0===d.length)return Zn;const p={};for(let g=0;g<d.length;g+=2)p[d[g]]=d[g+1];return p}function Py(d,p){for(const g in p)p.hasOwnProperty(g)&&(d[p[g]]=d[g])}function Ym(d){return!!j1(d)&&(Array.isArray(d)||!(d instanceof Map)&&Symbol.iterator in d)}function j1(d){return null!==d&&("function"==typeof d||"object"==typeof d)}function mh(d,p,g){return d[p]=g}function Om(d,p){return d[p]}function Xf(d,p,g){return!Object.is(d[p],g)&&(d[p]=g,!0)}function Am(d,p,g,R){const H=Xf(d,p,g);return Xf(d,p+1,R)||H}function Zg(d,p,g,R,H){const te=Am(d,p,g,R);return Xf(d,p+2,H)||te}function sd(d,p,g,R,H,te){const ve=Am(d,p,g,R);return Am(d,p+2,H,te)||ve}function Dm(d,p,g,R){const H=mi();return Xf(H,Q(),p)&&(Hs(),function v_(d,p,g,R,H,te){const ve=cu(d,p);I1(p[Ro],ve,te,d.value,g,R,H)}(xl(),H,d,p,g,R)),Dm}function jm(d,p,g,R){return Xf(d,Q(),g)?p+V(g)+R:Il}function zm(d,p,g,R,H,te){const Be=Am(d,sl(),g,H);return Ee(2),Be?p+V(g)+R+V(H)+te:Il}function Xv(d,p,g,R,H,te,ve,Be){const nt=mi(),Ht=Hs(),Sn=d+$s,Ln=Ht.firstCreatePass?function Fy(d,p,g,R,H,te,ve,Be,nt){const Ht=p.consts,Sn=bm(p,d,4,ve||null,ql(Ht,Be));Bm(p,g,Sn,ql(Ht,nt)),Pa(p,Sn);const Ln=Sn.tView=R1(2,Sn,R,H,te,p.directiveRegistry,p.pipeRegistry,null,p.schemas,Ht);return null!==p.queries&&(p.queries.template(p,Sn),Ln.queries=p.queries.embeddedTView(Sn)),Sn}(Sn,Ht,nt,p,g,R,H,te,ve):Ht.data[Sn];lu(Ln,!1);const ei=nt[Ro].createComment("");If(Ht,nt,ei,Ln),Sc(ei,nt),Cg(nt,nt[Sn]=L1(ei,nt,ei,Ln)),ie(Ln)&&$_(Ht,nt,Ln),null!=ve&&D1(nt,Ln,Be)}function Qg(d){return xu(function Fc(){return zs.lFrame.contextLView}(),$s+d)}function V1(d,p,g){const R=mi();return Xf(R,Q(),p)&&Jp(Hs(),xl(),R,d,p,R[Ro],g,!1),V1}function Z1(d,p,g,R,H){const ve=H?"class":"style";U1(d,g,p.inputs[ve],ve,R)}function Kg(d,p,g,R){const H=mi(),te=Hs(),ve=$s+d,Be=H[Ro],nt=te.firstCreatePass?function Qm(d,p,g,R,H,te){const ve=p.consts,nt=bm(p,d,2,R,ql(ve,H));return Bm(p,g,nt,ql(ve,te)),null!==nt.attrs&&zg(nt,nt.attrs,!1),null!==nt.mergedAttrs&&zg(nt,nt.mergedAttrs,!0),null!==p.queries&&p.queries.elementStart(p,nt),nt}(ve,te,H,p,g,R):te.data[ve],Ht=H[ve]=X_(Be,p,function yi(){return zs.lFrame.currentNamespace}()),Sn=ie(nt);return lu(nt,!0),Td(Be,Ht,nt),32!=(32&nt.flags)&&If(te,H,Ht,nt),0===function pt(){return zs.lFrame.elementDepthCount}()&&Sc(Ht,H),function Je(){zs.lFrame.elementDepthCount++}(),Sn&&($_(te,H,nt),Kf(te,nt,H)),null!==R&&D1(H,nt),Kg}function Xg(){let d=zl();id()?ec():(d=d.parent,lu(d,!1));const p=d;!function en(){zs.lFrame.elementDepthCount--}();const g=Hs();return g.firstCreatePass&&(Pa(g,d),gt(d)&&g.queries.elementEnd(d)),null!=p.classesWithoutHost&&function Ra(d){return 0!=(8&d.flags)}(p)&&Z1(g,p,mi(),p.classesWithoutHost,!0),null!=p.stylesWithoutHost&&function Vs(d){return 0!=(16&d.flags)}(p)&&Z1(g,p,mi(),p.stylesWithoutHost,!1),Xg}function W1(d,p,g,R){return Kg(d,p,g,R),Xg(),W1}function qg(d,p,g){const R=mi(),H=Hs(),te=d+$s,ve=H.firstCreatePass?function qv(d,p,g,R,H){const te=p.consts,ve=ql(te,R),Be=bm(p,d,8,"ng-container",ve);return null!==ve&&zg(Be,ve,!0),Bm(p,g,Be,ql(te,H)),null!==p.queries&&p.queries.elementStart(p,Be),Be}(te,H,R,p,g):H.data[te];lu(ve,!0);const Be=R[te]=R[Ro].createComment("");return If(H,R,Be,ve),Sc(Be,R),ie(ve)&&($_(H,R,ve),Kf(H,ve,R)),null!=g&&D1(R,ve),qg}function e1(){let d=zl();const p=Hs();return id()?ec():(d=d.parent,lu(d,!1)),p.firstCreatePass&&(Pa(p,d),gt(d)&&p.queries.elementEnd(d)),e1}function J1(d,p,g){return qg(d,p,g),e1(),J1}function e0(){return mi()}function Mg(d){return!!d&&"function"==typeof d.then}function t0(d){return!!d&&"function"==typeof d.subscribe}const n0=t0;function Q1(d,p,g,R){const H=mi(),te=Hs(),ve=zl();return function me(d,p,g,R,H,te,ve){const Be=ie(R),Ht=d.firstCreatePass&&Iv(d),Sn=p[gs],Ln=Nv(p);let ei=!0;if(3&R.type||ve){const ls=cu(R,p),js=ve?ve(ls):ls,ga=Ln.length,bl=ve?Kl=>ve(tl(Kl[R.index])):R.index;let Vo=null;if(!ve&&Be&&(Vo=function B(d,p,g,R){const H=d.cleanup;if(null!=H)for(let te=0;te<H.length-1;te+=2){const ve=H[te];if(ve===g&&H[te+1]===R){const Be=p[ss],nt=H[te+2];return Be.length>nt?Be[nt]:null}"string"==typeof ve&&(te+=2)}return null}(d,p,H,R.index)),null!==Vo)(Vo.__ngLastListenerFn__||Vo).__ngNextListenerFn__=te,Vo.__ngLastListenerFn__=te,ei=!1;else{te=on(R,p,Sn,te,!1);const Kl=g.listen(js,H,te);Ln.push(te,Kl),Ht&&Ht.push(H,bl,ga,ga+1)}}else te=on(R,p,Sn,te,!1);const xi=R.outputs;let mo;if(ei&&null!==xi&&(mo=xi[H])){const ls=mo.length;if(ls)for(let js=0;js<ls;js+=2){const _d=p[mo[js]][mo[js+1]].subscribe(te),Fd=Ln.length;Ln.push(te,_d),Ht&&Ht.push(H,R.index,Fd,-(Fd+1))}}}(te,H,H[Ro],ve,d,p,R),Q1}function _t(d,p,g,R){try{return $u(6,p,g),!1!==g(R)}catch(H){return H1(d,H),!1}finally{$u(7,p,g)}}function on(d,p,g,R,H){return function te(ve){if(ve===Function)return R;Gg(d.componentOffset>-1?ba(d.index,p):p);let nt=_t(p,g,R,ve),Ht=te.__ngNextListenerFn__;for(;Ht;)nt=_t(p,g,Ht,ve)&&nt,Ht=Ht.__ngNextListenerFn__;return H&&!1===nt&&(ve.preventDefault(),ve.returnValue=!1),nt}}function Fn(d=1){return function Fa(d){return(zs.lFrame.contextLView=function ca(d,p){for(;d>0;)p=p[da],d--;return p}(d,zs.lFrame.contextLView))[gs]}(d)}function Tr(d,p){let g=null;const R=function Lg(d){const p=d.attrs;if(null!=p){const g=p.indexOf(5);if(!(1&g))return p[g+1]}return null}(d);for(let H=0;H<p.length;H++){const te=p[H];if("*"!==te){if(null===R?Fp(d,te,!0):b1(R,te))return H}else g=H}return g}function Jr(d){const p=mi()[$a][jo];if(!p.projection){const R=p.projection=Mt(d?d.length:1,null),H=R.slice();let te=p.child;for(;null!==te;){const ve=d?Tr(te,d):0;null!==ve&&(H[ve]?H[ve].projectionNext=te:R[ve]=te,H[ve]=te),te=te.next}}}function hi(d,p=0,g){const R=mi(),H=Hs(),te=bm(H,$s+d,16,null,g||null);null===te.projection&&(te.projection=p),ec(),32!=(32&te.flags)&&function nh(d,p,g){f_(p[Ro],0,p,g,l_(d,g,p),Oh(g.parent||p[jo],g,p))}(H,R,te)}function Oo(d,p,g){return Ao(d,"",p,"",g),Oo}function Ao(d,p,g,R,H){const te=mi(),ve=jm(te,p,g,R);return ve!==Il&&Jp(Hs(),xl(),te,d,ve,te[Ro],H,!1),Ao}function Bo(d,p,g,R,H,te,ve){const Be=mi(),nt=zm(Be,p,g,R,H,te);return nt!==Il&&Jp(Hs(),xl(),Be,d,nt,Be[Ro],ve,!1),Bo}function qf(d,p){return d<<17|p<<2}function Md(d){return d>>17&32767}function Kp(d){return 2|d}function gp(d){return(131068&d)>>2}function t1(d,p){return-131069&d|p<<2}function ky(d){return 1|d}function ES(d,p,g,R,H){const te=d[g+1],ve=null===p;let Be=R?Md(te):gp(te),nt=!1;for(;0!==Be&&(!1===nt||ve);){const Sn=d[Be+1];$y(d[Be],p)&&(nt=!0,d[Be+1]=R?ky(Sn):Kp(Sn)),Be=R?Md(Sn):gp(Sn)}nt&&(d[g+1]=R?Kp(te):ky(te))}function $y(d,p){return null===d||null==p||(Array.isArray(d)?d[1]:d)===p||!(!Array.isArray(d)||"string"!=typeof p)&&ya(d,p)>=0}const $f={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function Hy(d){return d.substring($f.key,$f.keyEnd)}function SS(d,p){const g=$f.textEnd;return g===p?-1:(p=$f.keyEnd=function _2(d,p,g){for(;p<g&&d.charCodeAt(p)>32;)p++;return p}(d,$f.key=p,g),n1(d,p,g))}function n1(d,p,g){for(;p<g&&d.charCodeAt(p)<=32;)p++;return p}function Uy(d,p,g){return Yh(d,p,g,!1),Uy}function By(d,p){return Yh(d,p,null,!0),By}function OS(d){jh(T2,fm,d,!0)}function fm(d,p){for(let g=function f2(d){return function TS(d){$f.key=0,$f.keyEnd=0,$f.value=0,$f.valueEnd=0,$f.textEnd=d.length}(d),SS(d,n1(d,0,$f.textEnd))}(p);g>=0;g=SS(p,g))Wo(d,Hy(p),!0)}function Yh(d,p,g,R){const H=mi(),te=Hs(),ve=Ee(2);te.firstUpdatePass&&DS(te,d,ve,R),p!==Il&&Xf(H,ve,p)&&xS(te,te.data[zo()],H,H[Ro],d,H[ve+1]=function M2(d,p){return null==d||""===d||("string"==typeof p?d+=p:"object"==typeof d&&(d=T(lc(d)))),d}(p,g),R,ve)}function jh(d,p,g,R){const H=Hs(),te=Ee(2);H.firstUpdatePass&&DS(H,null,te,R);const ve=mi();if(g!==Il&&Xf(ve,te,g)){const Be=H.data[zo()];if(PS(Be,R)&&!AS(H,te)){let nt=R?Be.classesWithoutHost:Be.stylesWithoutHost;null!==nt&&(g=M(nt,g||"")),Z1(H,Be,ve,g,R)}else!function C2(d,p,g,R,H,te,ve,Be){H===Il&&(H=nr);let nt=0,Ht=0,Sn=0<H.length?H[0]:null,Ln=0<te.length?te[0]:null;for(;null!==Sn||null!==Ln;){const ei=nt<H.length?H[nt+1]:void 0,xi=Ht<te.length?te[Ht+1]:void 0;let ls,mo=null;Sn===Ln?(nt+=2,Ht+=2,ei!==xi&&(mo=Ln,ls=xi)):null===Ln||null!==Sn&&Sn<Ln?(nt+=2,mo=Sn):(Ht+=2,mo=Ln,ls=xi),null!==mo&&xS(d,p,g,R,mo,ls,ve,Be),Sn=nt<H.length?H[nt]:null,Ln=Ht<te.length?te[Ht]:null}}(H,Be,ve,ve[Ro],ve[te+1],ve[te+1]=function b2(d,p,g){if(null==g||""===g)return nr;const R=[],H=lc(g);if(Array.isArray(H))for(let te=0;te<H.length;te++)d(R,H[te],!0);else if("object"==typeof H)for(const te in H)H.hasOwnProperty(te)&&d(R,te,H[te]);else"string"==typeof H&&p(R,H);return R}(d,p,g),R,te)}}function AS(d,p){return p>=d.expandoStartIndex}function DS(d,p,g,R){const H=d.data;if(null===H[g+1]){const te=H[zo()],ve=AS(d,g);PS(te,R)&&null===p&&!ve&&(p=!1),p=function v2(d,p,g,R){const H=Hr(d);let te=R?p.residualClasses:p.residualStyles;if(null===H)0===(R?p.classBindings:p.styleBindings)&&(g=K1(g=Gy(null,d,p,g,R),p.attrs,R),te=null);else{const ve=p.directiveStylingLast;if(-1===ve||d[ve]!==H)if(g=Gy(H,d,p,g,R),null===te){let nt=function y2(d,p,g){const R=g?p.classBindings:p.styleBindings;if(0!==gp(R))return d[Md(R)]}(d,p,R);void 0!==nt&&Array.isArray(nt)&&(nt=Gy(null,d,p,nt[1],R),nt=K1(nt,p.attrs,R),function E2(d,p,g,R){d[Md(g?p.classBindings:p.styleBindings)]=R}(d,p,R,nt))}else te=function S2(d,p,g){let R;const H=p.directiveEnd;for(let te=1+p.directiveStylingLast;te<H;te++)R=K1(R,d[te].hostAttrs,g);return K1(R,p.attrs,g)}(d,p,R)}return void 0!==te&&(R?p.residualClasses=te:p.residualStyles=te),g}(H,te,p,R),function u2(d,p,g,R,H,te){let ve=te?p.classBindings:p.styleBindings,Be=Md(ve),nt=gp(ve);d[R]=g;let Sn,Ht=!1;if(Array.isArray(g)?(Sn=g[1],(null===Sn||ya(g,Sn)>0)&&(Ht=!0)):Sn=g,H)if(0!==nt){const ei=Md(d[Be+1]);d[R+1]=qf(ei,Be),0!==ei&&(d[ei+1]=t1(d[ei+1],R)),d[Be+1]=function Id(d,p){return 131071&d|p<<17}(d[Be+1],R)}else d[R+1]=qf(Be,0),0!==Be&&(d[Be+1]=t1(d[Be+1],R)),Be=R;else d[R+1]=qf(nt,0),0===Be?Be=R:d[nt+1]=t1(d[nt+1],R),nt=R;Ht&&(d[R+1]=Kp(d[R+1])),ES(d,Sn,R,!0),ES(d,Sn,R,!1),function c2(d,p,g,R,H){const te=H?d.residualClasses:d.residualStyles;null!=te&&"string"==typeof p&&ya(te,p)>=0&&(g[R+1]=ky(g[R+1]))}(p,Sn,d,R,te),ve=qf(Be,nt),te?p.classBindings=ve:p.styleBindings=ve}(H,te,p,g,ve,R)}}function Gy(d,p,g,R,H){let te=null;const ve=g.directiveEnd;let Be=g.directiveStylingLast;for(-1===Be?Be=g.directiveStart:Be++;Be<ve&&(te=p[Be],R=K1(R,te.hostAttrs,H),te!==d);)Be++;return null!==d&&(g.directiveStylingLast=Be),R}function K1(d,p,g){const R=g?1:2;let H=-1;if(null!==p)for(let te=0;te<p.length;te++){const ve=p[te];"number"==typeof ve?H=ve:H===R&&(Array.isArray(d)||(d=void 0===d?[]:["",d]),Wo(d,ve,!!g||p[++te]))}return void 0===d?null:d}function T2(d,p,g){const R=String(p);""!==R&&!R.includes(" ")&&Wo(d,R,g)}function xS(d,p,g,R,H,te,ve,Be){if(!(3&p.type))return;const nt=d.data,Ht=nt[Be+1],Sn=function l2(d){return 1==(1&d)}(Ht)?wS(nt,p,g,H,gp(Ht),ve):void 0;r0(Sn)||(r0(te)||function Qp(d){return 2==(2&d)}(Ht)&&(te=wS(nt,null,g,H,Be,ve)),function up(d,p,g,R,H){if(p)H?d.addClass(g,R):d.removeClass(g,R);else{let te=-1===R.indexOf("-")?void 0:_c.DashCase;null==H?d.removeStyle(g,R,te):("string"==typeof H&&H.endsWith("!important")&&(H=H.slice(0,-10),te|=_c.Important),d.setStyle(g,R,H,te))}}(R,ve,dc(zo(),g),H,te))}function wS(d,p,g,R,H,te){const ve=null===p;let Be;for(;H>0;){const nt=d[H],Ht=Array.isArray(nt),Sn=Ht?nt[1]:nt,Ln=null===Sn;let ei=g[H+1];ei===Il&&(ei=Ln?nr:void 0);let xi=Ln?Qo(ei,R):Sn===R?ei:void 0;if(Ht&&!r0(xi)&&(xi=Qo(nt,R)),r0(xi)&&(Be=xi,ve))return Be;const mo=d[H+1];H=ve?Md(mo):gp(mo)}if(null!==p){let nt=te?p.residualClasses:p.residualStyles;null!=nt&&(Be=Qo(nt,R))}return Be}function r0(d){return void 0!==d}function PS(d,p){return 0!=(d.flags&(p?8:16))}function pm(d,p=""){const g=mi(),R=Hs(),H=d+$s,te=R.firstCreatePass?bm(R,H,1,p,null):R.data[H],ve=g[H]=a_(g[Ro],p);If(R,g,ve,te),lu(te,!1)}function r1(d){return i1("",d,""),r1}function i1(d,p,g){const R=mi(),H=jm(R,d,p,g);return H!==Il&&Gh(R,zo(),H),i1}function o0(d,p,g,R,H){const te=mi(),ve=zm(te,d,p,g,R,H);return ve!==Il&&Gh(te,zo(),ve),o0}function Km(d,p,g,R,H,te,ve){const Be=mi(),nt=function Vm(d,p,g,R,H,te,ve,Be){const Ht=Zg(d,sl(),g,H,ve);return Ee(3),Ht?p+V(g)+R+V(H)+te+V(ve)+Be:Il}(Be,d,p,g,R,H,te,ve);return nt!==Il&&Gh(Be,zo(),nt),Km}function kS(d,p,g){jh(Wo,fm,jm(mi(),d,p,g),!0)}function $S(d,p,g,R,H){jh(Wo,fm,zm(mi(),d,p,g,R,H),!0)}function zy(d,p,g){const R=mi();return Xf(R,Q(),p)&&Jp(Hs(),xl(),R,d,p,R[Ro],g,!0),zy}function Vy(d,p,g){const R=mi();if(Xf(R,Q(),p)){const te=Hs(),ve=xl();Jp(te,ve,R,d,p,function $1(d,p,g){return(null===d||Ze(d))&&(g=function Ga(d){for(;Array.isArray(d);){if("object"==typeof d[Ja])return d;d=d[Bn]}return null}(g[p.index])),g[Ro]}(Hr(te.data),ve,R),g,!0)}return Vy}const Og=void 0;var U2=["en",[["a","p"],["AM","PM"],Og],[["AM","PM"],Og,Og],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],Og,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],Og,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",Og,"{1} 'at' {0}",Og],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function H2(d){const g=Math.floor(Math.abs(d)),R=d.toString().replace(/^[^.]*\.?/,"").length;return 1===g&&0===R?1:5}];let o1={};function Zy(d){const p=function B2(d){return d.toLowerCase().replace(/_/g,"-")}(d);let g=JS(p);if(g)return g;const R=p.split("-")[0];if(g=JS(R),g)return g;if("en"===R)return U2;throw new X(701,!1)}function WS(d){return Zy(d)[Sl.PluralCase]}function JS(d){return d in o1||(o1[d]=Ei.ng&&Ei.ng.common&&Ei.ng.common.locales&&Ei.ng.common.locales[d]),o1[d]}var Sl=(()=>((Sl=Sl||{})[Sl.LocaleId=0]="LocaleId",Sl[Sl.DayPeriodsFormat=1]="DayPeriodsFormat",Sl[Sl.DayPeriodsStandalone=2]="DayPeriodsStandalone",Sl[Sl.DaysFormat=3]="DaysFormat",Sl[Sl.DaysStandalone=4]="DaysStandalone",Sl[Sl.MonthsFormat=5]="MonthsFormat",Sl[Sl.MonthsStandalone=6]="MonthsStandalone",Sl[Sl.Eras=7]="Eras",Sl[Sl.FirstDayOfWeek=8]="FirstDayOfWeek",Sl[Sl.WeekendRange=9]="WeekendRange",Sl[Sl.DateFormat=10]="DateFormat",Sl[Sl.TimeFormat=11]="TimeFormat",Sl[Sl.DateTimeFormat=12]="DateTimeFormat",Sl[Sl.NumberSymbols=13]="NumberSymbols",Sl[Sl.NumberFormats=14]="NumberFormats",Sl[Sl.CurrencyCode=15]="CurrencyCode",Sl[Sl.CurrencySymbol=16]="CurrencySymbol",Sl[Sl.CurrencyName=17]="CurrencyName",Sl[Sl.Currencies=18]="Currencies",Sl[Sl.Directionality=19]="Directionality",Sl[Sl.PluralCase=20]="PluralCase",Sl[Sl.ExtraData=21]="ExtraData",Sl))();const G2=["zero","one","two","few","many"],a1="en-US",u0={marker:"element"},c0={marker:"ICU"};var Jd=(()=>((Jd=Jd||{})[Jd.SHIFT=2]="SHIFT",Jd[Jd.APPEND_EAGERLY=1]="APPEND_EAGERLY",Jd[Jd.COMMENT=2]="COMMENT",Jd))();let KS=a1;function XS(d){(function Rn(d,p){null==d&&At(p,d,null,"!=")})(d,"Expected localeId to be defined"),"string"==typeof d&&(KS=d.toLowerCase().replace(/_/g,"-"))}function qS(d,p,g){const R=p.insertBeforeIndex,H=Array.isArray(R)?R[0]:R;return null===H?Ap(d,0,g):tl(g[H])}function eb(d,p,g,R,H){const te=p.insertBeforeIndex;if(Array.isArray(te)){let ve=R,Be=null;if(3&p.type||(Be=ve,ve=H),null!==ve&&-1===p.componentOffset)for(let nt=1;nt<te.length;nt++)mf(d,ve,g[te[nt]],Be,!1)}}function tb(d,p){if(d.push(p),d.length>1)for(let g=d.length-2;g>=0;g--){const R=d[g];nb(R)||Y2(R,p)&&null===j2(R)&&z2(R,p.index)}}function nb(d){return!(64&d.type)}function Y2(d,p){return nb(p)||d.index>p.index}function j2(d){const p=d.insertBeforeIndex;return Array.isArray(p)?p[0]:p}function z2(d,p){const g=d.insertBeforeIndex;Array.isArray(g)?g[0]=p:(Ah(qS,eb),d.insertBeforeIndex=p)}function Rm(d,p){const g=d.data[p];return null===g||"string"==typeof g?null:g.hasOwnProperty("currentCaseLViewIndex")?g:g.value}function Z2(d,p,g){const R=Tm(d,g,64,null,null);return tb(p,R),R}function d0(d,p){const g=p[d.currentCaseLViewIndex];return null===g?g:g<0?~g:g}function zh(d){return d>>>17}function rb(d){return(131070&d)>>>1}let q1=0,Xm=0;function sb(d,p,g,R){const H=g[Ro];let ve,te=null;for(let Be=0;Be<p.length;Be++){const nt=p[Be];if("string"==typeof nt){const Ht=p[++Be];null===g[Ht]&&(g[Ht]=a_(H,nt))}else if("number"==typeof nt)switch(1&nt){case 0:const Ht=zh(nt);let Sn,Ln;if(null===te&&(te=Ht,ve=nf(H,R)),Ht===te?(Sn=R,Ln=ve):(Sn=null,Ln=tl(g[Ht])),null!==Ln){const ls=rb(nt);mf(H,Ln,g[ls],Sn,!1);const ga=Rm(d,ls);if(null!==ga&&"object"==typeof ga){const bl=d0(ga,g);null!==bl&&sb(d,ga.create[bl],g,g[ga.anchorIdx])}}break;case 1:const xi=p[++Be],mo=p[++Be];I1(H,dc(nt>>>1,g),null,null,xi,mo,null)}else switch(nt){case c0:const Ht=p[++Be],Sn=p[++Be];null===g[Sn]&&Sc(g[Sn]=K_(H,Ht),g);break;case u0:const Ln=p[++Be],ei=p[++Be];null===g[ei]&&Sc(g[ei]=X_(H,Ln,null),g)}}}function ab(d,p,g,R,H){for(let te=0;te<g.length;te++){const ve=g[te],Be=g[++te];if(ve&H){let nt="";for(let Ht=te+1;Ht<=te+Be;Ht++){const Sn=g[Ht];if("string"==typeof Sn)nt+=Sn;else if("number"==typeof Sn)if(Sn<0)nt+=V(p[R-Sn]);else{const Ln=Sn>>>2;switch(3&Sn){case 1:const ei=g[++Ht],xi=g[++Ht],mo=d.data[Ln];"string"==typeof mo?I1(p[Ro],p[Ln],null,mo,ei,nt,xi):Jp(d,mo,p,ei,nt,p[Ro],xi,!1);break;case 0:const ls=p[Ln];null!==ls&&Q_(p[Ro],ls,nt);break;case 2:p0(d,Rm(d,Ln),p,nt);break;case 3:qm(d,Rm(d,Ln),R,p)}}}}else{const nt=g[te+1];if(nt>0&&3==(3&nt)){const Sn=Rm(d,nt>>>2);p[Sn.currentCaseLViewIndex]<0&&qm(d,Sn,R,p)}}te+=Be}}function qm(d,p,g,R){let H=R[p.currentCaseLViewIndex];if(null!==H){let te=q1;H<0&&(H=R[p.currentCaseLViewIndex]=~H,te=-1),ab(d,R,p.update[H],g,te)}}function p0(d,p,g,R){const H=function ub(d,p){let g=d.cases.indexOf(p);if(-1===g)switch(d.type){case 1:{const R=function s1(d,p){const g=WS(p)(parseInt(d,10)),R=G2[g];return void 0!==R?R:"other"}(p,function Wy(){return KS}());g=d.cases.indexOf(R),-1===g&&"other"!==R&&(g=d.cases.indexOf("other"));break}case 0:g=d.cases.indexOf("other")}return-1===g?null:g}(p,R);if(d0(p,g)!==H&&(lb(d,p,g),g[p.currentCaseLViewIndex]=null===H?null:~H,null!==H)){const ve=g[p.anchorIdx];ve&&sb(d,p.create[H],g,ve)}}function lb(d,p,g){let R=d0(p,g);if(null!==R){const H=p.remove[R];for(let te=0;te<H.length;te++){const ve=H[te];if(ve>0){const Be=dc(ve,g);null!==Be&&th(g[Ro],Be)}else lb(d,Rm(d,~ve),g)}}}function J2(){const d=[];let g,R,p=-1;function te(Be,nt){p=0;const Ht=d0(Be,nt);R=null!==Ht?Be.remove[Ht]:nr}function ve(){if(p<R.length){const Be=R[p++];return Be>0?g[Be]:(d.push(p,R),te(g[ci].data[~Be],g),ve())}return 0===d.length?null:(R=d.pop(),p=d.pop(),ve())}return function H(Be,nt){for(g=nt;d.length;)d.pop();return te(Be.value,nt),ve}}const _0=/\ufffd(\d+):?\d*\ufffd/gi,K2=/({\s*\ufffd\d+:?\d*\ufffd\s*,\s*\S{6}\s*,[\s\S]*})/gi,X2=/\ufffd(\d+)\ufffd/,db=/^\s*(\ufffd\d+:?\d*\ufffd)\s*,\s*(select|plural)\s*,/,ev="\ufffd",q2=/\ufffd\/?\*(\d+:\d+)\ufffd/gi,eM=/\ufffd(\/?[#*]\d+):?\d*\ufffd/gi,tM=/\uE500/g;function Jy(d,p,g,R,H,te,ve){const Be=Cm(d,R,1,null);let nt=Be<<Jd.SHIFT,Ht=hu();p===Ht&&(Ht=null),null===Ht&&(nt|=Jd.APPEND_EAGERLY),ve&&(nt|=Jd.COMMENT,function Jc(d){void 0===td&&(td=d())}(J2)),H.push(nt,null===te?"":te);const Sn=Tm(d,Be,ve?32:1,null===te?"":te,null);tb(g,Sn);const Ln=Sn.index;return lu(Sn,!1),null!==Ht&&p!==Ht&&function V2(d,p){let g=d.insertBeforeIndex;null===g?(Ah(qS,eb),g=d.insertBeforeIndex=[null,p]):(function qe(d,p,g){d!=p&&At(g,d,p,"==")}(Array.isArray(g),!0,"Expecting array here"),g.push(p))}(Ht,Ln),Sn}function iM(d,p,g,R,H,te,ve){const Be=ve.match(_0),nt=Jy(d,p,g,te,R,Be?null:ve,!1);Be&&tv(H,ve,nt.index,null,0,null)}function tv(d,p,g,R,H,te){const ve=d.length,Be=ve+1;d.push(null,null);const nt=ve+2,Ht=p.split(_0);let Sn=0;for(let Ln=0;Ln<Ht.length;Ln++){const ei=Ht[Ln];if(1&Ln){const xi=H+parseInt(ei,10);d.push(-1-xi),Sn|=nv(xi)}else""!==ei&&d.push(ei)}return d.push(g<<2|(R?1:0)),R&&d.push(R,te),d[ve]=Sn,d[Be]=d.length-nt,Sn}function fb(d){let p=0;for(let g=0;g<d.length;g++){const R=d[g];"number"==typeof R&&R<0&&p++}return p}function nv(d){return 1<<Math.min(d,31)}function pb(d){let p,te,g="",R=0,H=!1;for(;null!==(p=q2.exec(d));)H?p[0]===`${ev}/*${te}${ev}`&&(R=p.index,H=!1):(g+=d.substring(R,p.index+p[0].length),te=p[1],H=!0);return g+=d.slice(R),g}function _b(d,p,g,R,H,te){let ve=0;const Be={type:H.type,currentCaseLViewIndex:Cm(d,p,1,null),anchorIdx:te,cases:[],create:[],remove:[],update:[]};(function dM(d,p,g){d.push(nv(p.mainBinding),2,-1-p.mainBinding,g<<2|2)})(g,H,te),function X1(d,p,g){const R=d.data[p];null===R?d.data[p]=g:R.value=g}(d,te,Be);const nt=H.values;for(let Ht=0;Ht<nt.length;Ht++){const Sn=nt[Ht],Ln=[];for(let ei=0;ei<Sn.length;ei++){const xi=Sn[ei];if("string"!=typeof xi){const mo=Ln.push(xi)-1;Sn[ei]=`\x3c!--\ufffd${mo}\ufffd--\x3e`}}ve=uM(d,Be,p,g,R,H.cases[Ht],Sn.join(""),Ln)|ve}ve&&function fM(d,p,g){d.push(p,1,g<<2|3)}(g,ve,te)}function lM(d){const p=[],g=[];let R=1,H=0;const te=Qy(d=d.replace(db,function(ve,Be,nt){return R="select"===nt?0:1,H=parseInt(Be.slice(1),10),""}));for(let ve=0;ve<te.length;){let Be=te[ve++].trim();1===R&&(Be=Be.replace(/\s*(?:=)?(\w+)\s*/,"$1")),Be.length&&p.push(Be);const nt=Qy(te[ve++]);p.length>g.length&&g.push(nt)}return{type:R,mainBinding:H,cases:p,values:g}}function Qy(d){if(!d)return[];let p=0;const g=[],R=[],H=/[{}]/g;let te;for(H.lastIndex=0;te=H.exec(d);){const Be=te.index;if("}"==te[0]){if(g.pop(),0==g.length){const nt=d.substring(p,Be);db.test(nt)?R.push(lM(nt)):R.push(nt),p=Be+1}}else{if(0==g.length){const nt=d.substring(p,Be);R.push(nt),p=Be+1}g.push("{")}}const ve=d.substring(p);return R.push(ve),R}function uM(d,p,g,R,H,te,ve,Be){const nt=[],Ht=[],Sn=[];p.cases.push(te),p.create.push(nt),p.remove.push(Ht),p.update.push(Sn);const ei=R_(D_()).getInertBodyElement(ve),xi=I_(ei)||ei;return xi?hb(d,p,g,R,nt,Ht,Sn,xi,H,Be,0):0}function hb(d,p,g,R,H,te,ve,Be,nt,Ht,Sn){let Ln=0,ei=Be.firstChild;for(;ei;){const xi=Cm(d,g,1,null);switch(ei.nodeType){case Node.ELEMENT_NODE:const mo=ei,ls=mo.tagName.toLowerCase();if(sh.hasOwnProperty(ls)){Xy(H,u0,ls,nt,xi),d.data[xi]=ls;const Vo=mo.attributes;for(let Kl=0;Kl<Vo.length;Kl++){const _d=Vo.item(Kl),Fd=_d.name.toLowerCase();_d.value.match(_0)?Sf.hasOwnProperty(Fd)&&tv(ve,_d.value,xi,_d.name,0,pp[Fd]?dp:null):pM(H,xi,_d)}Ln=hb(d,p,g,R,H,te,ve,ei,xi,Ht,Sn+1)|Ln,Ky(te,xi,Sn)}break;case Node.TEXT_NODE:const js=ei.textContent||"",ga=js.match(_0);Xy(H,null,ga?"":js,nt,xi),Ky(te,xi,Sn),ga&&(Ln=tv(ve,js,xi,null,0,null)|Ln);break;case Node.COMMENT_NODE:const bl=X2.exec(ei.textContent||"");if(bl){const Kl=Ht[parseInt(bl[1],10)];Xy(H,c0,"",nt,xi),_b(d,g,R,nt,Kl,xi),cM(te,xi,Sn)}}ei=ei.nextSibling}return Ln}function Ky(d,p,g){0===g&&d.push(p)}function cM(d,p,g){0===g&&(d.push(~p),d.push(p))}function Xy(d,p,g,R,H){null!==p&&d.push(p),d.push(g,H,function ib(d,p,g){return d|p<<17|g<<1}(0,R,H))}function pM(d,p,g){d.push(p<<1|1,g.name,g.value)}const mb=0,_M=/\[(\ufffd.+?\ufffd?)\]/,hM=/\[(\ufffd.+?\ufffd?)\]|(\ufffd\/?\*\d+:\d+\ufffd)/g,mM=/({\s*)(VAR_(PLURAL|SELECT)(_\d+)?)(\s*,)/g,gM=/{([A-Z0-9_]+)}/g,vM=/\ufffdI18N_EXP_(ICU(_\d+)?)\ufffd/g,yM=/\/\*/,EM=/\d+\:(\d+)/;function qy(d,p,g=-1){const R=Hs(),H=mi(),te=$s+d,ve=ql(R.consts,p),Be=hu();R.firstCreatePass&&function rM(d,p,g,R,H,te){const ve=hu(),Be=[],nt=[],Ht=[[]];H=function aM(d,p){if(function sM(d){return-1===d}(p))return pb(d);{const g=d.indexOf(`:${p}${ev}`)+2+p.toString().length,R=d.search(new RegExp(`${ev}\\/\\*\\d+:${p}${ev}`));return pb(d.substring(g,R))}}(H,te);const Sn=function nM(d){return d.replace(tM," ")}(H).split(eM);for(let Ln=0;Ln<Sn.length;Ln++){let ei=Sn[Ln];if(1&Ln){const xi=47===ei.charCodeAt(0),ls=(ei.charCodeAt(xi?1:0),$s+Number.parseInt(ei.substring(xi?2:1)));if(xi)Ht.shift(),lu(hu(),!1);else{const js=Z2(d,Ht[0],ls);Ht.unshift([]),lu(js,!0)}}else{const xi=Qy(ei);for(let mo=0;mo<xi.length;mo++){let ls=xi[mo];if(1&mo){const js=ls;if("object"!=typeof js)throw new Error(`Unable to parse ICU expression in "${H}" message.`);_b(d,g,nt,p,js,Jy(d,ve,Ht[0],g,Be,"",!0).index)}else""!==ls&&iM(d,ve,Ht[0],Be,nt,g,ls)}}}d.data[R]={create:Be,update:nt}}(R,null===Be?0:Be.index,H,te,ve,g);const nt=R.data[te],Sn=u_(R,Be===H[jo]?null:Be,H);(function W2(d,p,g,R){const H=d[Ro];for(let te=0;te<p.length;te++){const ve=p[te++],Be=p[te],Ht=(ve&Jd.APPEND_EAGERLY)===Jd.APPEND_EAGERLY,Sn=ve>>>Jd.SHIFT;let Ln=d[Sn];null===Ln&&(Ln=d[Sn]=(ve&Jd.COMMENT)===Jd.COMMENT?H.createComment(Be):a_(H,Be)),Ht&&null!==g&&mf(H,g,Ln,R,!1)}})(H,nt.create,Sn,Be&&8&Be.type?H[Be.index]:null),Xe(!0)}function Dg(){Xe(!1)}function eE(d,p,g){qy(d,p,g),Dg()}function gb(d,p){const g=Hs(),R=ql(g.consts,p);!function oM(d,p,g){const H=zl().index,te=[];if(d.firstCreatePass&&null===d.data[p]){for(let ve=0;ve<g.length;ve+=2){const Be=g[ve],nt=g[ve+1];if(""!==nt){if(K2.test(nt))throw new Error(`ICU expressions are not supported in attributes. Message: "${nt}".`);tv(te,nt,H,Be,fb(te),null)}}d.data[p]=te}}(g,d+$s,R)}function tE(d){return function ob(d){d&&(q1|=1<<Math.min(Xm,31)),Xm++}(Xf(mi(),Q(),d)),tE}function vb(d){!function Ag(d,p,g){if(Xm>0){const R=d.data[g];ab(d,p,Array.isArray(R)?R:R.update,sl()-Xm-1,q1)}q1=0,Xm=0}(Hs(),mi(),d+$s)}function yb(d,p={}){return function SM(d,p={}){let g=d;if(_M.test(d)){const R={},H=[mb];g=g.replace(hM,(te,ve,Be)=>{const nt=ve||Be,Ht=R[nt]||[];if(Ht.length||(nt.split("|").forEach(ls=>{const js=ls.match(EM),ga=js?parseInt(js[1],10):mb,bl=yM.test(ls);Ht.push([ga,bl,ls])}),R[nt]=Ht),!Ht.length)throw new Error(`i18n postprocess: unmatched placeholder - ${nt}`);const Sn=H[H.length-1];let Ln=0;for(let ls=0;ls<Ht.length;ls++)if(Ht[ls][0]===Sn){Ln=ls;break}const[ei,xi,mo]=Ht[Ln];return xi?H.pop():Sn!==ei&&H.push(ei),Ht.splice(Ln,1),mo})}return Object.keys(p).length&&(g=g.replace(mM,(R,H,te,ve,Be,nt)=>p.hasOwnProperty(te)?`${H}${p[te]}${nt}`:R),g=g.replace(gM,(R,H)=>p.hasOwnProperty(H)?p[H]:R),g=g.replace(vM,(R,H)=>{if(p.hasOwnProperty(H)){const te=p[H];if(!te.length)throw new Error(`i18n postprocess: unmatched ICU - ${R} with key: ${H}`);return te.shift()}return R})),g}(d,p)}function nE(d,p,g,R,H){if(d=U(d),Array.isArray(d))for(let te=0;te<d.length;te++)nE(d[te],p,g,R,H);else{const te=Hs(),ve=mi();let Be=Oe(d)?d:U(d.provide),nt=be(d);const Ht=zl(),Sn=1048575&Ht.providerIndexes,Ln=Ht.directiveStart,ei=Ht.providerIndexes>>20;if(Oe(d)||!d.multi){const xi=new Xn(nt,H,Sm),mo=iE(Be,p,H?Sn:Sn+ei,Ln);-1===mo?(eu(rs(Ht,ve),te,Be),rE(te,d,p.length),p.push(Be),Ht.directiveStart++,Ht.directiveEnd++,H&&(Ht.providerIndexes+=1048576),g.push(xi),ve.push(xi)):(g[mo]=xi,ve[mo]=xi)}else{const xi=iE(Be,p,Sn+ei,Ln),mo=iE(Be,p,Sn,Sn+ei),js=mo>=0&&g[mo];if(H&&!js||!H&&!(xi>=0&&g[xi])){eu(rs(Ht,ve),te,Be);const ga=function MM(d,p,g,R,H){const te=new Xn(d,g,Sm);return te.multi=[],te.index=p,te.componentProviders=0,Eb(te,H,R&&!g),te}(H?CM:TM,g.length,H,R,nt);!H&&js&&(g[mo].providerFactory=ga),rE(te,d,p.length,0),p.push(Be),Ht.directiveStart++,Ht.directiveEnd++,H&&(Ht.providerIndexes+=1048576),g.push(ga),ve.push(ga)}else rE(te,d,xi>-1?xi:mo,Eb(g[H?mo:xi],nt,!H&&R));!H&&R&&js&&g[mo].componentProviders++}}}function rE(d,p,g,R){const H=Oe(p),te=function ut(d){return!!d.useClass}(p);if(H||te){const nt=(te?U(p.useClass):p).prototype.ngOnDestroy;if(nt){const Ht=d.destroyHooks||(d.destroyHooks=[]);if(!H&&p.multi){const Sn=Ht.indexOf(g);-1===Sn?Ht.push(g,[R,nt]):Ht[Sn+1].push(R,nt)}else Ht.push(g,nt)}}}function Eb(d,p,g){return g&&d.componentProviders++,d.multi.push(p)-1}function iE(d,p,g,R){for(let H=g;H<R;H++)if(p[H]===d)return H;return-1}function TM(d,p,g,R){return oE(this.multi,[])}function CM(d,p,g,R){const H=this.multi;let te;if(this.providerFactory){const ve=this.providerFactory.componentProviders,Be=vc(g,g[ci],this.providerFactory.index,R);te=Be.slice(0,ve),oE(H,te);for(let nt=ve;nt<Be.length;nt++)te.push(Be[nt])}else te=[],oE(H,te);return te}function oE(d,p){for(let g=0;g<d.length;g++)p.push((0,d[g])());return p}function Sb(d,p=[]){return g=>{g.providersResolver=(R,H)=>function bM(d,p,g){const R=Hs();if(R.firstCreatePass){const H=Ze(d);nE(g,R.data,R.blueprint,H,!0),nE(p,R.data,R.blueprint,H,!1)}}(R,H?H(d):d,p)}}class l1{}class bb{}function OM(d,p){return new Tb(d,p??null)}class Tb extends l1{constructor(p,g){super(),this._parent=g,this._bootstrapComponents=[],this.destroyCbs=[],this.componentFactoryResolver=new Fv(this);const R=Ir(p);this._bootstrapComponents=Qf(R.bootstrap),this._r3Injector=Sg(p,g,[{provide:l1,useValue:this},{provide:oa,useValue:this.componentFactoryResolver}],T(p),new Set(["environment"])),this._r3Injector.resolveInjectorInitializers(),this.instance=this._r3Injector.get(p)}get injector(){return this._r3Injector}destroy(){const p=this._r3Injector;!p.destroyed&&p.destroy(),this.destroyCbs.forEach(g=>g()),this.destroyCbs=null}onDestroy(p){this.destroyCbs.push(p)}}class sE extends bb{constructor(p){super(),this.moduleType=p}create(p){return new Tb(this.moduleType,p)}}class AM extends l1{constructor(p,g,R){super(),this.componentFactoryResolver=new Fv(this),this.instance=null;const H=new Yo([...p,{provide:l1,useValue:this},{provide:oa,useValue:this.componentFactoryResolver}],g||Pi(),R,new Set(["environment"]));this.injector=H,H.resolveInjectorInitializers()}destroy(){this.injector.destroy()}onDestroy(p){this.injector.onDestroy(p)}}function aE(d,p,g=null){return new AM(d,p,g).injector}let DM=(()=>{class d{constructor(g){this._injector=g,this.cachedInjectors=new Map}getOrCreateStandaloneInjector(g){if(!g.standalone)return null;if(!this.cachedInjectors.has(g.id)){const R=Nh(0,g.type),H=R.length>0?aE([R],this._injector,`Standalone[${g.type.name}]`):null;this.cachedInjectors.set(g.id,H)}return this.cachedInjectors.get(g.id)}ngOnDestroy(){try{for(const g of this.cachedInjectors.values())null!==g&&g.destroy()}finally{this.cachedInjectors.clear()}}}return d.\u0275prov=xn({token:d,providedIn:"environment",factory:()=>new d(et(cs))}),d})();function Cb(d){d.getStandaloneInjector=p=>p.get(DM).getOrCreateStandaloneInjector(d)}function wb(d,p,g){const R=kl()+d,H=mi();return H[R]===Il?mh(H,R,g?p.call(g):p()):Om(H,R)}function Pb(d,p,g,R){return $b(mi(),kl(),d,p,g,R)}function Nb(d,p,g,R,H){return Hb(mi(),kl(),d,p,g,R,H)}function Ib(d,p,g,R,H,te){return Ub(mi(),kl(),d,p,g,R,H,te)}function Fb(d,p,g,R,H,te,ve){return function Bb(d,p,g,R,H,te,ve,Be,nt){const Ht=p+g;return sd(d,Ht,H,te,ve,Be)?mh(d,Ht+4,nt?R.call(nt,H,te,ve,Be):R(H,te,ve,Be)):rv(d,Ht+4)}(mi(),kl(),d,p,g,R,H,te,ve)}function Lb(d,p,g,R,H,te,ve,Be){const nt=kl()+d,Ht=mi(),Sn=sd(Ht,nt,g,R,H,te);return Xf(Ht,nt+4,ve)||Sn?mh(Ht,nt+5,Be?p.call(Be,g,R,H,te,ve):p(g,R,H,te,ve)):Om(Ht,nt+5)}function rv(d,p){const g=d[p];return g===Il?void 0:g}function $b(d,p,g,R,H,te){const ve=p+g;return Xf(d,ve,H)?mh(d,ve+1,te?R.call(te,H):R(H)):rv(d,ve+1)}function Hb(d,p,g,R,H,te,ve){const Be=p+g;return Am(d,Be,H,te)?mh(d,Be+2,ve?R.call(ve,H,te):R(H,te)):rv(d,Be+2)}function Ub(d,p,g,R,H,te,ve,Be){const nt=p+g;return Zg(d,nt,H,te,ve)?mh(d,nt+3,Be?R.call(Be,H,te,ve):R(H,te,ve)):rv(d,nt+3)}function Yb(d,p){const g=Hs();let R;const H=d+$s;g.firstCreatePass?(R=function HM(d,p){if(p)for(let g=p.length-1;g>=0;g--){const R=p[g];if(d===R.name)return R}}(p,g.pipeRegistry),g.data[H]=R,R.onDestroy&&(g.destroyHooks??(g.destroyHooks=[])).push(H,R.onDestroy)):R=g.data[H];const te=R.factory||(R.factory=el(R.type)),ve=Wi(Sm);try{const Be=Qt(!1),nt=te();return Qt(Be),function Ly(d,p,g,R){g>=d.data.length&&(d.data[g]=null,d.blueprint[g]=null),p[g]=R}(g,mi(),H,nt),nt}finally{Wi(ve)}}function jb(d,p,g){const R=d+$s,H=mi(),te=xu(H,R);return iv(H,R)?$b(H,kl(),p,te.transform,g,te):te.transform(g)}function zb(d,p,g,R){const H=d+$s,te=mi(),ve=xu(te,H);return iv(te,H)?Hb(te,kl(),p,ve.transform,g,R,ve):ve.transform(g,R)}function Vb(d,p,g,R,H){const te=d+$s,ve=mi(),Be=xu(ve,te);return iv(ve,te)?Ub(ve,kl(),p,Be.transform,g,R,H,Be):Be.transform(g,R,H)}function iv(d,p){return d[ci].data[p].pure}function cE(d){return p=>{setTimeout(d,void 0,p)}}const _m=class GM extends r.xQ{constructor(p=!1){super(),this.__isAsync=p}emit(p){super.next(p)}subscribe(p,g,R){let H=p,te=g||(()=>null),ve=R;if(p&&"object"==typeof p){const nt=p;H=nt.next?.bind(nt),te=nt.error?.bind(nt),ve=nt.complete?.bind(nt)}this.__isAsync&&(te=cE(te),H&&(H=cE(H)),ve&&(ve=cE(ve)));const Be=super.subscribe({next:H,error:te,complete:ve});return p instanceof a.w&&p.add(Be),Be}};function YM(){return this._results[Symbol.iterator]()}class dE{get changes(){return this._changes||(this._changes=new _m)}constructor(p=!1){this._emitDistinctChangesOnly=p,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const g=dE.prototype;g[Symbol.iterator]||(g[Symbol.iterator]=YM)}get(p){return this._results[p]}map(p){return this._results.map(p)}filter(p){return this._results.filter(p)}find(p){return this._results.find(p)}reduce(p,g){return this._results.reduce(p,g)}forEach(p){this._results.forEach(p)}some(p){return this._results.some(p)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(p,g){const R=this;R.dirty=!1;const H=function Se(d){return d.flat(Number.POSITIVE_INFINITY)}(p);(this._changesDetected=!function Lo(d,p,g){if(d.length!==p.length)return!1;for(let R=0;R<d.length;R++){let H=d[R],te=p[R];if(g&&(H=g(H),te=g(te)),te!==H)return!1}return!0}(R._results,H,g))&&(R._results=H,R.length=H.length,R.last=H[this.length-1],R.first=H[0])}notifyOnChanges(){this._changes&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.emit(this)}setDirty(){this.dirty=!0}destroy(){this.changes.complete(),this.changes.unsubscribe()}}let ov=(()=>{class d{}return d.__NG_ELEMENT_ID__=VM,d})();const jM=ov,zM=class extends jM{constructor(p,g,R){super(),this._declarationLView=p,this._declarationTContainer=g,this.elementRef=R}createEmbeddedView(p,g){const R=this._declarationTContainer.tView,H=Bg(this._declarationLView,R,p,16,null,R.declTNode,null,null,null,null,g||null);H[Rl]=this._declarationLView[this._declarationTContainer.index];const ve=this._declarationLView[Ha];return null!==ve&&(H[Ha]=ve.createEmbeddedView(R)),A1(R,H,p),new hh(H)}};function VM(){return h0(zl(),mi())}function h0(d,p){return 4&d.type?new zM(p,d,Wr(d,p)):null}let m0=(()=>{class d{}return d.__NG_ELEMENT_ID__=ZM,d})();function ZM(){return Jb(zl(),mi())}const WM=m0,Zb=class extends WM{constructor(p,g,R){super(),this._lContainer=p,this._hostTNode=g,this._hostLView=R}get element(){return Wr(this._hostTNode,this._hostLView)}get injector(){return new xa(this._hostTNode,this._hostLView)}get parentInjector(){const p=Ul(this._hostTNode,this._hostLView);if(ae(p)){const g=st(p,this._hostLView),R=De(p);return new xa(g[ci].data[R+8],g)}return new xa(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(p){const g=Wb(this._lContainer);return null!==g&&g[p]||null}get length(){return this._lContainer.length-ns}createEmbeddedView(p,g,R){let H,te;"number"==typeof R?H=R:null!=R&&(H=R.index,te=R.injector);const ve=p.createEmbeddedView(g||{},te);return this.insert(ve,H),ve}createComponent(p,g,R,H,te){const ve=p&&!function Bc(d){return"function"==typeof d}(p);let Be;if(ve)Be=g;else{const Ln=g||{};Be=Ln.index,R=Ln.injector,H=Ln.projectableNodes,te=Ln.environmentInjector||Ln.ngModuleRef}const nt=ve?p:new Gm(ji(p)),Ht=R||this.parentInjector;if(!te&&null==nt.ngModule){const ei=(ve?Ht:this.parentInjector).get(cs,null);ei&&(te=ei)}const Sn=nt.create(Ht,H,void 0,te);return this.insert(Sn.hostView,Be),Sn}insert(p,g){const R=p._lView,H=R[ci];if(function gc(d){return io(d[go])}(R)){const Sn=this.indexOf(p);if(-1!==Sn)this.detach(Sn);else{const Ln=R[go],ei=new Zb(Ln,Ln[jo],Ln[go]);ei.detach(ei.indexOf(p))}}const te=this._adjustIndex(g),ve=this._lContainer;!function Ch(d,p,g,R){const H=ns+R,te=g.length;R>0&&(g[H-1][es]=p),R<te-ns?(p[es]=g[H],_e(g,ns+R,p)):(g.push(p),p[es]=null),p[go]=g;const ve=p[Rl];null!==ve&&g!==ve&&function Yd(d,p){const g=d[Cs];p[$a]!==p[go][go][$a]&&(d[fa]=!0),null===g?d[Cs]=[p]:g.push(p)}(ve,p);const Be=p[Ha];null!==Be&&Be.insertView(d),p[_o]|=64}(H,R,ve,te);const Be=c_(te,ve),nt=R[Ro],Ht=nf(nt,ve[Xo]);return null!==Ht&&function Th(d,p,g,R,H,te){R[Bn]=H,R[jo]=p,zd(d,R,g,1,H,te)}(H,ve[jo],nt,R,Ht,Be),p.attachToViewContainerRef(),_e(fE(ve),te,p),p}move(p,g){return this.insert(p,g)}indexOf(p){const g=Wb(this._lContainer);return null!==g?g.indexOf(p):-1}remove(p){const g=this._adjustIndex(p,-1),R=Mh(this._lContainer,g);R&&(Ye(fE(this._lContainer),g),Jh(R[ci],R))}detach(p){const g=this._adjustIndex(p,-1),R=Mh(this._lContainer,g);return R&&null!=Ye(fE(this._lContainer),g)?new hh(R):null}_adjustIndex(p,g=0){return p??this.length+g}};function Wb(d){return d[No]}function fE(d){return d[No]||(d[No]=[])}function Jb(d,p){let g;const R=p[d.index];if(io(R))g=R;else{let H;if(8&d.type)H=tl(R);else{const te=p[Ro];H=te.createComment("");const ve=cu(d,p);mf(te,nf(te,ve),H,function Op(d,p){return d.nextSibling(p)}(te,ve),!1)}p[d.index]=g=L1(R,p,H,d),Cg(p,g)}return new Zb(g,d,p)}class pE{constructor(p){this.queryList=p,this.matches=null}clone(){return new pE(this.queryList)}setDirty(){this.queryList.setDirty()}}class _E{constructor(p=[]){this.queries=p}createEmbeddedView(p){const g=p.queries;if(null!==g){const R=null!==p.contentQueries?p.contentQueries[0]:g.length,H=[];for(let te=0;te<R;te++){const ve=g.getByIndex(te);H.push(this.queries[ve.indexInDeclarationView].clone())}return new _E(H)}return null}insertView(p){this.dirtyQueriesWithMatches(p)}detachView(p){this.dirtyQueriesWithMatches(p)}dirtyQueriesWithMatches(p){for(let g=0;g<this.queries.length;g++)null!==iT(p,g).matches&&this.queries[g].setDirty()}}class Qb{constructor(p,g,R=null){this.predicate=p,this.flags=g,this.read=R}}class hE{constructor(p=[]){this.queries=p}elementStart(p,g){for(let R=0;R<this.queries.length;R++)this.queries[R].elementStart(p,g)}elementEnd(p){for(let g=0;g<this.queries.length;g++)this.queries[g].elementEnd(p)}embeddedTView(p){let g=null;for(let R=0;R<this.length;R++){const H=null!==g?g.length:0,te=this.getByIndex(R).embeddedTView(p,H);te&&(te.indexInDeclarationView=R,null!==g?g.push(te):g=[te])}return null!==g?new hE(g):null}template(p,g){for(let R=0;R<this.queries.length;R++)this.queries[R].template(p,g)}getByIndex(p){return this.queries[p]}get length(){return this.queries.length}track(p){this.queries.push(p)}}class mE{constructor(p,g=-1){this.metadata=p,this.matches=null,this.indexInDeclarationView=-1,this.crossesNgTemplate=!1,this._appliesToNextNode=!0,this._declarationNodeIndex=g}elementStart(p,g){this.isApplyingToNode(g)&&this.matchTNode(p,g)}elementEnd(p){this._declarationNodeIndex===p.index&&(this._appliesToNextNode=!1)}template(p,g){this.elementStart(p,g)}embeddedTView(p,g){return this.isApplyingToNode(p)?(this.crossesNgTemplate=!0,this.addMatch(-p.index,g),new mE(this.metadata)):null}isApplyingToNode(p){if(this._appliesToNextNode&&1!=(1&this.metadata.flags)){const g=this._declarationNodeIndex;let R=p.parent;for(;null!==R&&8&R.type&&R.index!==g;)R=R.parent;return g===(null!==R?R.index:-1)}return this._appliesToNextNode}matchTNode(p,g){const R=this.metadata.predicate;if(Array.isArray(R))for(let H=0;H<R.length;H++){const te=R[H];this.matchTNodeWithReadOption(p,g,JM(g,te)),this.matchTNodeWithReadOption(p,g,pu(g,p,te,!1,!1))}else R===ov?4&g.type&&this.matchTNodeWithReadOption(p,g,-1):this.matchTNodeWithReadOption(p,g,pu(g,p,R,!1,!1))}matchTNodeWithReadOption(p,g,R){if(null!==R){const H=this.metadata.read;if(null!==H)if(H===si||H===m0||H===ov&&4&g.type)this.addMatch(g.index,-2);else{const te=pu(g,p,H,!1,!1);null!==te&&this.addMatch(g.index,te)}else this.addMatch(g.index,R)}}addMatch(p,g){null===this.matches?this.matches=[p,g]:this.matches.push(p,g)}}function JM(d,p){const g=d.localNames;if(null!==g)for(let R=0;R<g.length;R+=2)if(g[R]===p)return g[R+1];return null}function KM(d,p,g,R){return-1===g?function QM(d,p){return 11&d.type?Wr(d,p):4&d.type?h0(d,p):null}(p,d):-2===g?function XM(d,p,g){return g===si?Wr(p,d):g===ov?h0(p,d):g===m0?Jb(p,d):void 0}(d,p,R):vc(d,d[ci],g,p)}function Kb(d,p,g,R){const H=p[Ha].queries[R];if(null===H.matches){const te=d.data,ve=g.matches,Be=[];for(let nt=0;nt<ve.length;nt+=2){const Ht=ve[nt];Be.push(Ht<0?null:KM(p,te[Ht],ve[nt+1],g.metadata.read))}H.matches=Be}return H.matches}function gE(d,p,g,R){const H=d.queries.getByIndex(g),te=H.matches;if(null!==te){const ve=Kb(d,p,H,g);for(let Be=0;Be<te.length;Be+=2){const nt=te[Be];if(nt>0)R.push(ve[Be/2]);else{const Ht=te[Be+1],Sn=p[-nt];for(let Ln=ns;Ln<Sn.length;Ln++){const ei=Sn[Ln];ei[Rl]===ei[go]&&gE(ei[ci],ei,Ht,R)}if(null!==Sn[Cs]){const Ln=Sn[Cs];for(let ei=0;ei<Ln.length;ei++){const xi=Ln[ei];gE(xi[ci],xi,Ht,R)}}}}}return R}function Xb(d){const p=mi(),g=Hs(),R=Xr();yr(R+1);const H=iT(g,R);if(d.dirty&&function nl(d){return 4==(4&d[_o])}(p)===(2==(2&H.metadata.flags))){if(null===H.matches)d.reset([]);else{const te=H.crossesNgTemplate?gE(g,p,R,[]):Kb(g,p,H,R);d.reset(te,no),d.notifyOnChanges()}return!0}return!1}function qb(d,p,g){const R=Hs();R.firstCreatePass&&(rT(R,new Qb(d,p,g),-1),2==(2&p)&&(R.staticViewQueries=!0)),nT(R,mi(),p)}function eT(d,p,g,R){const H=Hs();if(H.firstCreatePass){const te=zl();rT(H,new Qb(p,g,R),te.index),function eO(d,p){const g=d.contentQueries||(d.contentQueries=[]);p!==(g.length?g[g.length-1]:-1)&&g.push(d.queries.length-1,p)}(H,d),2==(2&g)&&(H.staticContentQueries=!0)}nT(H,mi(),g)}function tT(){return function qM(d,p){return d[Ha].queries[p].queryList}(mi(),Xr())}function nT(d,p,g){const R=new dE(4==(4&g));x1(d,p,R,R.destroy),null===p[Ha]&&(p[Ha]=new _E),p[Ha].queries.push(new pE(R))}function rT(d,p,g){null===d.queries&&(d.queries=new hE),d.queries.track(new mE(p,g))}function iT(d,p){return d.queries.getByIndex(p)}function oT(d,p){return h0(d,p)}function vE(d){return!!Ir(d)}const mO=tf("Input",d=>({bindingPropertyName:d})),gO=tf("Output",d=>({bindingPropertyName:d}));function y0(...d){}const MT=new Mu("Application Initializer");let tg=(()=>{class d{constructor(g){this.appInits=g,this.resolve=y0,this.reject=y0,this.initialized=!1,this.done=!1,this.donePromise=new Promise((R,H)=>{this.resolve=R,this.reject=H})}runInitializers(){if(this.initialized)return;const g=[],R=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let H=0;H<this.appInits.length;H++){const te=this.appInits[H]();if(Mg(te))g.push(te);else if(n0(te)){const ve=new Promise((Be,nt)=>{te.subscribe({complete:Be,error:nt})});g.push(ve)}}Promise.all(g).then(()=>{R()}).catch(H=>{this.reject(H)}),0===g.length&&R(),this.initialized=!0}}return d.\u0275fac=function(g){return new(g||d)(et(MT,8))},d.\u0275prov=xn({token:d,factory:d.\u0275fac,providedIn:"root"}),d})();const OT=new Mu("AppId",{providedIn:"root",factory:function CE(){return`${ME()}${ME()}${ME()}`}});function ME(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const AT=new Mu("Platform Initializer"),yO=new Mu("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),DT=new Mu("AnimationModuleType");let EO=(()=>{class d{log(g){console.log(g)}warn(g){console.warn(g)}}return d.\u0275fac=function(g){return new(g||d)},d.\u0275prov=xn({token:d,factory:d.\u0275fac,providedIn:"platform"}),d})();const c1=new Mu("LocaleId",{providedIn:"root",factory:()=>an(c1,jn.Optional|jn.SkipSelf)||function RT(){return typeof $localize<"u"&&$localize.locale||a1}()}),SO=new Mu("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"});class TO{constructor(p,g){this.ngModuleFactory=p,this.componentFactories=g}}let CO=(()=>{class d{compileModuleSync(g){return new sE(g)}compileModuleAsync(g){return Promise.resolve(this.compileModuleSync(g))}compileModuleAndAllComponentsSync(g){const R=this.compileModuleSync(g),te=Qf(Ir(g).declarations).reduce((ve,Be)=>{const nt=ji(Be);return nt&&ve.push(new Gm(nt)),ve},[]);return new TO(R,te)}compileModuleAndAllComponentsAsync(g){return Promise.resolve(this.compileModuleAndAllComponentsSync(g))}clearCache(){}clearCacheFor(g){}getModuleId(g){}}return d.\u0275fac=function(g){return new(g||d)},d.\u0275prov=xn({token:d,factory:d.\u0275fac,providedIn:"root"}),d})();const AO=(()=>Promise.resolve(0))();function OE(d){typeof Zone>"u"?AO.then(()=>{d&&d.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",d)}class gh{constructor({enableLongStackTrace:p=!1,shouldCoalesceEventChangeDetection:g=!1,shouldCoalesceRunChangeDetection:R=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new _m(!1),this.onMicrotaskEmpty=new _m(!1),this.onStable=new _m(!1),this.onError=new _m(!1),typeof Zone>"u")throw new X(908,!1);Zone.assertZonePatched();const H=this;H._nesting=0,H._outer=H._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(H._inner=H._inner.fork(new Zone.TaskTrackingZoneSpec)),p&&Zone.longStackTraceZoneSpec&&(H._inner=H._inner.fork(Zone.longStackTraceZoneSpec)),H.shouldCoalesceEventChangeDetection=!R&&g,H.shouldCoalesceRunChangeDetection=R,H.lastRequestAnimationFrameId=-1,H.nativeRequestAnimationFrame=function DO(){let d=Ei.requestAnimationFrame,p=Ei.cancelAnimationFrame;if(typeof Zone<"u"&&d&&p){const g=d[Zone.__symbol__("OriginalDelegate")];g&&(d=g);const R=p[Zone.__symbol__("OriginalDelegate")];R&&(p=R)}return{nativeRequestAnimationFrame:d,nativeCancelAnimationFrame:p}}().nativeRequestAnimationFrame,function xO(d){const p=()=>{!function av(d){d.isCheckStableRunning||-1!==d.lastRequestAnimationFrameId||(d.lastRequestAnimationFrameId=d.nativeRequestAnimationFrame.call(Ei,()=>{d.fakeTopEventTask||(d.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{d.lastRequestAnimationFrameId=-1,DE(d),d.isCheckStableRunning=!0,AE(d),d.isCheckStableRunning=!1},void 0,()=>{},()=>{})),d.fakeTopEventTask.invoke()}),DE(d))}(d)};d._inner=d._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(g,R,H,te,ve,Be)=>{try{return IT(d),g.invokeTask(H,te,ve,Be)}finally{(d.shouldCoalesceEventChangeDetection&&"eventTask"===te.type||d.shouldCoalesceRunChangeDetection)&&p(),RE(d)}},onInvoke:(g,R,H,te,ve,Be,nt)=>{try{return IT(d),g.invoke(H,te,ve,Be,nt)}finally{d.shouldCoalesceRunChangeDetection&&p(),RE(d)}},onHasTask:(g,R,H,te)=>{g.hasTask(H,te),R===H&&("microTask"==te.change?(d._hasPendingMicrotasks=te.microTask,DE(d),AE(d)):"macroTask"==te.change&&(d.hasPendingMacrotasks=te.macroTask))},onHandleError:(g,R,H,te)=>(g.handleError(H,te),d.runOutsideAngular(()=>d.onError.emit(te)),!1)})}(H)}static isInAngularZone(){return typeof Zone<"u"&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!gh.isInAngularZone())throw new X(909,!1)}static assertNotInAngularZone(){if(gh.isInAngularZone())throw new X(909,!1)}run(p,g,R){return this._inner.run(p,g,R)}runTask(p,g,R,H){const te=this._inner,ve=te.scheduleEventTask("NgZoneEvent: "+H,p,RO,y0,y0);try{return te.runTask(ve,g,R)}finally{te.cancelTask(ve)}}runGuarded(p,g,R){return this._inner.runGuarded(p,g,R)}runOutsideAngular(p){return this._outer.run(p)}}const RO={};function AE(d){if(0==d._nesting&&!d.hasPendingMicrotasks&&!d.isStable)try{d._nesting++,d.onMicrotaskEmpty.emit(null)}finally{if(d._nesting--,!d.hasPendingMicrotasks)try{d.runOutsideAngular(()=>d.onStable.emit(null))}finally{d.isStable=!0}}}function DE(d){d.hasPendingMicrotasks=!!(d._hasPendingMicrotasks||(d.shouldCoalesceEventChangeDetection||d.shouldCoalesceRunChangeDetection)&&-1!==d.lastRequestAnimationFrameId)}function IT(d){d._nesting++,d.isStable&&(d.isStable=!1,d.onUnstable.emit(null))}function RE(d){d._nesting--,AE(d)}class wO{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new _m,this.onMicrotaskEmpty=new _m,this.onStable=new _m,this.onError=new _m}run(p,g,R){return p.apply(g,R)}runGuarded(p,g,R){return p.apply(g,R)}runOutsideAngular(p){return p()}runTask(p,g,R,H){return p.apply(g,R)}}const FT=new Mu(""),LT=new Mu("");let xE,PO=(()=>{class d{constructor(g,R,H){this._ngZone=g,this.registry=R,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,xE||(function NO(d){xE=d}(H),H.addToWindow(R)),this._watchAngularEvents(),g.run(()=>{this.taskTrackingZone=typeof Zone>"u"?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{gh.assertNotInAngularZone(),OE(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())OE(()=>{for(;0!==this._callbacks.length;){let g=this._callbacks.pop();clearTimeout(g.timeoutId),g.doneCb(this._didWork)}this._didWork=!1});else{let g=this.getPendingTasks();this._callbacks=this._callbacks.filter(R=>!R.updateCb||!R.updateCb(g)||(clearTimeout(R.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(g=>({source:g.source,creationLocation:g.creationLocation,data:g.data})):[]}addCallback(g,R,H){let te=-1;R&&R>0&&(te=setTimeout(()=>{this._callbacks=this._callbacks.filter(ve=>ve.timeoutId!==te),g(this._didWork,this.getPendingTasks())},R)),this._callbacks.push({doneCb:g,timeoutId:te,updateCb:H})}whenStable(g,R,H){if(H&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(g,R,H),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}registerApplication(g){this.registry.registerApplication(g,this)}unregisterApplication(g){this.registry.unregisterApplication(g)}findProviders(g,R,H){return[]}}return d.\u0275fac=function(g){return new(g||d)(et(gh),et(kT),et(LT))},d.\u0275prov=xn({token:d,factory:d.\u0275fac}),d})(),kT=(()=>{class d{constructor(){this._applications=new Map}registerApplication(g,R){this._applications.set(g,R)}unregisterApplication(g){this._applications.delete(g)}unregisterAllApplications(){this._applications.clear()}getTestability(g){return this._applications.get(g)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(g,R=!0){return xE?.findTestabilityInTree(this,g,R)??null}}return d.\u0275fac=function(g){return new(g||d)},d.\u0275prov=xn({token:d,factory:d.\u0275fac,providedIn:"platform"}),d})();const xm=!1;let ng=null;const $T=new Mu("AllowMultipleToken"),wE=new Mu("PlatformDestroyListeners"),HT=new Mu("appBootstrapListener");class LO{constructor(p,g){this.name=p,this.token=g}}function BT(d,p,g=[]){const R=`Platform: ${p}`,H=new Mu(R);return(te=[])=>{let ve=PE();if(!ve||ve.injector.get($T,!1)){const Be=[...g,...te,{provide:H,useValue:!0}];d?d(Be):function kO(d){if(ng&&!ng.get($T,!1))throw new X(400,!1);ng=d;const p=d.get(YT);(function UT(d){const p=d.get(AT,null);p&&p.forEach(g=>g())})(d)}(function GT(d=[],p){return _h.create({name:p,providers:[{provide:On,useValue:"platform"},{provide:wE,useValue:new Set([()=>ng=null])},...d]})}(Be,R))}return function HO(d){const p=PE();if(!p)throw new X(401,!1);return p}()}}function PE(){return ng?.get(YT)??null}let YT=(()=>{class d{constructor(g){this._injector=g,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(g,R){const H=function zT(d,p){let g;return g="noop"===d?new wO:("zone.js"===d?void 0:d)||new gh(p),g}(R?.ngZone,function jT(d){return{enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!(!d||!d.ngZoneEventCoalescing)||!1,shouldCoalesceRunChangeDetection:!(!d||!d.ngZoneRunCoalescing)||!1}}(R)),te=[{provide:gh,useValue:H}];return H.run(()=>{const ve=_h.create({providers:te,parent:this.injector,name:g.moduleType.name}),Be=g.create(ve),nt=Be.injector.get(dh,null);if(!nt)throw new X(402,!1);return H.runOutsideAngular(()=>{const Ht=H.onError.subscribe({next:Sn=>{nt.handleError(Sn)}});Be.onDestroy(()=>{S0(this._modules,Be),Ht.unsubscribe()})}),function VT(d,p,g){try{const R=g();return Mg(R)?R.catch(H=>{throw p.runOutsideAngular(()=>d.handleError(H)),H}):R}catch(R){throw p.runOutsideAngular(()=>d.handleError(R)),R}}(nt,H,()=>{const Ht=Be.injector.get(tg);return Ht.runInitializers(),Ht.donePromise.then(()=>(XS(Be.injector.get(c1,a1)||a1),this._moduleDoBootstrap(Be),Be))})})}bootstrapModule(g,R=[]){const H=ZT({},R);return function IO(d,p,g){const R=new sE(g);return Promise.resolve(R)}(0,0,g).then(te=>this.bootstrapModuleFactory(te,H))}_moduleDoBootstrap(g){const R=g.injector.get(E0);if(g._bootstrapComponents.length>0)g._bootstrapComponents.forEach(H=>R.bootstrap(H));else{if(!g.instance.ngDoBootstrap)throw new X(-403,!1);g.instance.ngDoBootstrap(R)}this._modules.push(g)}onDestroy(g){this._destroyListeners.push(g)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new X(404,!1);this._modules.slice().forEach(R=>R.destroy()),this._destroyListeners.forEach(R=>R());const g=this._injector.get(wE,null);g&&(g.forEach(R=>R()),g.clear()),this._destroyed=!0}get destroyed(){return this._destroyed}}return d.\u0275fac=function(g){return new(g||d)(et(_h))},d.\u0275prov=xn({token:d,factory:d.\u0275fac,providedIn:"platform"}),d})();function ZT(d,p){return Array.isArray(p)?p.reduce(ZT,d):{...d,...p}}let E0=(()=>{class d{get destroyed(){return this._destroyed}get injector(){return this._injector}constructor(g,R,H){this._zone=g,this._injector=R,this._exceptionHandler=H,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this._destroyed=!1,this._destroyListeners=[],this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const te=new c.y(Be=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{Be.next(this._stable),Be.complete()})}),ve=new c.y(Be=>{let nt;this._zone.runOutsideAngular(()=>{nt=this._zone.onStable.subscribe(()=>{gh.assertNotInAngularZone(),OE(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,Be.next(!0))})})});const Ht=this._zone.onUnstable.subscribe(()=>{gh.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{Be.next(!1)}))});return()=>{nt.unsubscribe(),Ht.unsubscribe()}});this.isStable=(0,u.T)(te,ve.pipe((0,e.B)()))}bootstrap(g,R){const H=g instanceof Uo;if(!this._injector.get(tg).done){!H&&ko(g);throw new X(405,xm)}let ve;ve=H?g:this._injector.get(oa).resolveComponentFactory(g),this.componentTypes.push(ve.componentType);const Be=function FO(d){return d.isBoundToModule}(ve)?void 0:this._injector.get(l1),Ht=ve.create(_h.NULL,[],R||ve.selector,Be),Sn=Ht.location.nativeElement,Ln=Ht.injector.get(FT,null);return Ln?.registerApplication(Sn),Ht.onDestroy(()=>{this.detachView(Ht.hostView),S0(this.components,Ht),Ln?.unregisterApplication(Sn)}),this._loadComponent(Ht),Ht}tick(){if(this._runningTick)throw new X(101,!1);try{this._runningTick=!0;for(let g of this._views)g.detectChanges()}catch(g){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(g))}finally{this._runningTick=!1}}attachView(g){const R=g;this._views.push(R),R.attachToAppRef(this)}detachView(g){const R=g;S0(this._views,R),R.detachFromAppRef()}_loadComponent(g){this.attachView(g.hostView),this.tick(),this.components.push(g);const R=this._injector.get(HT,[]);R.push(...this._bootstrapListeners),R.forEach(H=>H(g))}ngOnDestroy(){if(!this._destroyed)try{this._destroyListeners.forEach(g=>g()),this._views.slice().forEach(g=>g.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}finally{this._destroyed=!0,this._views=[],this._bootstrapListeners=[],this._destroyListeners=[]}}onDestroy(g){return this._destroyListeners.push(g),()=>S0(this._destroyListeners,g)}destroy(){if(this._destroyed)throw new X(406,!1);const g=this._injector;g.destroy&&!g.destroyed&&g.destroy()}get viewCount(){return this._views.length}warnIfDestroyed(){}}return d.\u0275fac=function(g){return new(g||d)(et(gh),et(cs),et(dh))},d.\u0275prov=xn({token:d,factory:d.\u0275fac,providedIn:"root"}),d})();function S0(d,p){const g=d.indexOf(p);g>-1&&d.splice(g,1)}function BO(){return!1}function GO(){}let YO=(()=>{class d{}return d.__NG_ELEMENT_ID__=jO,d})();function jO(d){return function zO(d,p,g){if(Tn(d)&&!g){const R=ba(d.index,p);return new hh(R,R)}return 47&d.type?new hh(p[$a],p):null}(zl(),mi(),16==(16&d))}class qT{constructor(){}supports(p){return Ym(p)}create(p){return new KO(p)}}const QO=(d,p)=>p;class KO{constructor(p){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=p||QO}forEachItem(p){let g;for(g=this._itHead;null!==g;g=g._next)p(g)}forEachOperation(p){let g=this._itHead,R=this._removalsHead,H=0,te=null;for(;g||R;){const ve=!R||g&&g.currentIndex<tC(R,H,te)?g:R,Be=tC(ve,H,te),nt=ve.currentIndex;if(ve===R)H--,R=R._nextRemoved;else if(g=g._next,null==ve.previousIndex)H++;else{te||(te=[]);const Ht=Be-H,Sn=nt-H;if(Ht!=Sn){for(let ei=0;ei<Ht;ei++){const xi=ei<te.length?te[ei]:te[ei]=0,mo=xi+ei;Sn<=mo&&mo<Ht&&(te[ei]=xi+1)}te[ve.previousIndex]=Sn-Ht}}Be!==nt&&p(ve,Be,nt)}}forEachPreviousItem(p){let g;for(g=this._previousItHead;null!==g;g=g._nextPrevious)p(g)}forEachAddedItem(p){let g;for(g=this._additionsHead;null!==g;g=g._nextAdded)p(g)}forEachMovedItem(p){let g;for(g=this._movesHead;null!==g;g=g._nextMoved)p(g)}forEachRemovedItem(p){let g;for(g=this._removalsHead;null!==g;g=g._nextRemoved)p(g)}forEachIdentityChange(p){let g;for(g=this._identityChangesHead;null!==g;g=g._nextIdentityChange)p(g)}diff(p){if(null==p&&(p=[]),!Ym(p))throw new X(900,!1);return this.check(p)?this:null}onDestroy(){}check(p){this._reset();let H,te,ve,g=this._itHead,R=!1;if(Array.isArray(p)){this.length=p.length;for(let Be=0;Be<this.length;Be++)te=p[Be],ve=this._trackByFn(Be,te),null!==g&&Object.is(g.trackById,ve)?(R&&(g=this._verifyReinsertion(g,te,ve,Be)),Object.is(g.item,te)||this._addIdentityChange(g,te)):(g=this._mismatch(g,te,ve,Be),R=!0),g=g._next}else H=0,function zv(d,p){if(Array.isArray(d))for(let g=0;g<d.length;g++)p(d[g]);else{const g=d[Symbol.iterator]();let R;for(;!(R=g.next()).done;)p(R.value)}}(p,Be=>{ve=this._trackByFn(H,Be),null!==g&&Object.is(g.trackById,ve)?(R&&(g=this._verifyReinsertion(g,Be,ve,H)),Object.is(g.item,Be)||this._addIdentityChange(g,Be)):(g=this._mismatch(g,Be,ve,H),R=!0),g=g._next,H++}),this.length=H;return this._truncate(g),this.collection=p,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let p;for(p=this._previousItHead=this._itHead;null!==p;p=p._next)p._nextPrevious=p._next;for(p=this._additionsHead;null!==p;p=p._nextAdded)p.previousIndex=p.currentIndex;for(this._additionsHead=this._additionsTail=null,p=this._movesHead;null!==p;p=p._nextMoved)p.previousIndex=p.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(p,g,R,H){let te;return null===p?te=this._itTail:(te=p._prev,this._remove(p)),null!==(p=null===this._unlinkedRecords?null:this._unlinkedRecords.get(R,null))?(Object.is(p.item,g)||this._addIdentityChange(p,g),this._reinsertAfter(p,te,H)):null!==(p=null===this._linkedRecords?null:this._linkedRecords.get(R,H))?(Object.is(p.item,g)||this._addIdentityChange(p,g),this._moveAfter(p,te,H)):p=this._addAfter(new XO(g,R),te,H),p}_verifyReinsertion(p,g,R,H){let te=null===this._unlinkedRecords?null:this._unlinkedRecords.get(R,null);return null!==te?p=this._reinsertAfter(te,p._prev,H):p.currentIndex!=H&&(p.currentIndex=H,this._addToMoves(p,H)),p}_truncate(p){for(;null!==p;){const g=p._next;this._addToRemovals(this._unlink(p)),p=g}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(p,g,R){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(p);const H=p._prevRemoved,te=p._nextRemoved;return null===H?this._removalsHead=te:H._nextRemoved=te,null===te?this._removalsTail=H:te._prevRemoved=H,this._insertAfter(p,g,R),this._addToMoves(p,R),p}_moveAfter(p,g,R){return this._unlink(p),this._insertAfter(p,g,R),this._addToMoves(p,R),p}_addAfter(p,g,R){return this._insertAfter(p,g,R),this._additionsTail=null===this._additionsTail?this._additionsHead=p:this._additionsTail._nextAdded=p,p}_insertAfter(p,g,R){const H=null===g?this._itHead:g._next;return p._next=H,p._prev=g,null===H?this._itTail=p:H._prev=p,null===g?this._itHead=p:g._next=p,null===this._linkedRecords&&(this._linkedRecords=new eC),this._linkedRecords.put(p),p.currentIndex=R,p}_remove(p){return this._addToRemovals(this._unlink(p))}_unlink(p){null!==this._linkedRecords&&this._linkedRecords.remove(p);const g=p._prev,R=p._next;return null===g?this._itHead=R:g._next=R,null===R?this._itTail=g:R._prev=g,p}_addToMoves(p,g){return p.previousIndex===g||(this._movesTail=null===this._movesTail?this._movesHead=p:this._movesTail._nextMoved=p),p}_addToRemovals(p){return null===this._unlinkedRecords&&(this._unlinkedRecords=new eC),this._unlinkedRecords.put(p),p.currentIndex=null,p._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=p,p._prevRemoved=null):(p._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=p),p}_addIdentityChange(p,g){return p.item=g,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=p:this._identityChangesTail._nextIdentityChange=p,p}}class XO{constructor(p,g){this.item=p,this.trackById=g,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class qO{constructor(){this._head=null,this._tail=null}add(p){null===this._head?(this._head=this._tail=p,p._nextDup=null,p._prevDup=null):(this._tail._nextDup=p,p._prevDup=this._tail,p._nextDup=null,this._tail=p)}get(p,g){let R;for(R=this._head;null!==R;R=R._nextDup)if((null===g||g<=R.currentIndex)&&Object.is(R.trackById,p))return R;return null}remove(p){const g=p._prevDup,R=p._nextDup;return null===g?this._head=R:g._nextDup=R,null===R?this._tail=g:R._prevDup=g,null===this._head}}class eC{constructor(){this.map=new Map}put(p){const g=p.trackById;let R=this.map.get(g);R||(R=new qO,this.map.set(g,R)),R.add(p)}get(p,g){const H=this.map.get(p);return H?H.get(p,g):null}remove(p){const g=p.trackById;return this.map.get(g).remove(p)&&this.map.delete(g),p}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function tC(d,p,g){const R=d.previousIndex;if(null===R)return R;let H=0;return g&&R<g.length&&(H=g[R]),R+p+H}class nC{constructor(){}supports(p){return p instanceof Map||j1(p)}create(){return new eA}}class eA{constructor(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}get isDirty(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead}forEachItem(p){let g;for(g=this._mapHead;null!==g;g=g._next)p(g)}forEachPreviousItem(p){let g;for(g=this._previousMapHead;null!==g;g=g._nextPrevious)p(g)}forEachChangedItem(p){let g;for(g=this._changesHead;null!==g;g=g._nextChanged)p(g)}forEachAddedItem(p){let g;for(g=this._additionsHead;null!==g;g=g._nextAdded)p(g)}forEachRemovedItem(p){let g;for(g=this._removalsHead;null!==g;g=g._nextRemoved)p(g)}diff(p){if(p){if(!(p instanceof Map||j1(p)))throw new X(900,!1)}else p=new Map;return this.check(p)?this:null}onDestroy(){}check(p){this._reset();let g=this._mapHead;if(this._appendAfter=null,this._forEach(p,(R,H)=>{if(g&&g.key===H)this._maybeAddToChanges(g,R),this._appendAfter=g,g=g._next;else{const te=this._getOrCreateRecordForKey(H,R);g=this._insertBeforeOrAppend(g,te)}}),g){g._prev&&(g._prev._next=null),this._removalsHead=g;for(let R=g;null!==R;R=R._nextRemoved)R===this._mapHead&&(this._mapHead=null),this._records.delete(R.key),R._nextRemoved=R._next,R.previousValue=R.currentValue,R.currentValue=null,R._prev=null,R._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(p,g){if(p){const R=p._prev;return g._next=p,g._prev=R,p._prev=g,R&&(R._next=g),p===this._mapHead&&(this._mapHead=g),this._appendAfter=p,p}return this._appendAfter?(this._appendAfter._next=g,g._prev=this._appendAfter):this._mapHead=g,this._appendAfter=g,null}_getOrCreateRecordForKey(p,g){if(this._records.has(p)){const H=this._records.get(p);this._maybeAddToChanges(H,g);const te=H._prev,ve=H._next;return te&&(te._next=ve),ve&&(ve._prev=te),H._next=null,H._prev=null,H}const R=new tA(p);return this._records.set(p,R),R.currentValue=g,this._addToAdditions(R),R}_reset(){if(this.isDirty){let p;for(this._previousMapHead=this._mapHead,p=this._previousMapHead;null!==p;p=p._next)p._nextPrevious=p._next;for(p=this._changesHead;null!==p;p=p._nextChanged)p.previousValue=p.currentValue;for(p=this._additionsHead;null!=p;p=p._nextAdded)p.previousValue=p.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(p,g){Object.is(g,p.currentValue)||(p.previousValue=p.currentValue,p.currentValue=g,this._addToChanges(p))}_addToAdditions(p){null===this._additionsHead?this._additionsHead=this._additionsTail=p:(this._additionsTail._nextAdded=p,this._additionsTail=p)}_addToChanges(p){null===this._changesHead?this._changesHead=this._changesTail=p:(this._changesTail._nextChanged=p,this._changesTail=p)}_forEach(p,g){p instanceof Map?p.forEach(g):Object.keys(p).forEach(R=>g(p[R],R))}}class tA{constructor(p){this.key=p,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function rC(){return new kE([new qT])}let kE=(()=>{class d{constructor(g){this.factories=g}static create(g,R){if(null!=R){const H=R.factories.slice();g=g.concat(H)}return new d(g)}static extend(g){return{provide:d,useFactory:R=>d.create(g,R||rC()),deps:[[d,new he,new k]]}}find(g){const R=this.factories.find(H=>H.supports(g));if(null!=R)return R;throw new X(901,!1)}}return d.\u0275prov=xn({token:d,providedIn:"root",factory:rC}),d})();function iC(){return new $E([new nC])}let $E=(()=>{class d{constructor(g){this.factories=g}static create(g,R){if(R){const H=R.factories.slice();g=g.concat(H)}return new d(g)}static extend(g){return{provide:d,useFactory:R=>d.create(g,R||iC()),deps:[[d,new he,new k]]}}find(g){const R=this.factories.find(H=>H.supports(g));if(R)return R;throw new X(901,!1)}}return d.\u0275prov=xn({token:d,providedIn:"root",factory:iC}),d})();const oA=BT(null,"core",[]);let sA=(()=>{class d{constructor(g){}}return d.\u0275fac=function(g){return new(g||d)(et(E0))},d.\u0275mod=dr({type:d}),d.\u0275inj=Or({}),d})();function aA(d){return"boolean"==typeof d?d:null!=d&&"false"!==d}function cA(d,p){const g=ji(d),R=p.elementInjector||Pi();return new Gm(g).create(R,p.projectableNodes,p.hostElement,p.environmentInjector)}},20092:(E,C,s)=>{"use strict";s.d(C,{CE:()=>Bi,Cf:()=>de,EJ:()=>vl,F:()=>jo,Fd:()=>oc,Fj:()=>$,JJ:()=>wn,JL:()=>jn,JU:()=>T,K7:()=>yl,Kr:()=>au,NI:()=>Is,Oe:()=>xu,On:()=>hs,Q7:()=>zu,QS:()=>Al,TO:()=>Pr,UX:()=>Vc,Wl:()=>w,YN:()=>Yu,_:()=>ns,_Y:()=>$s,a5:()=>br,cw:()=>tr,gN:()=>jr,kI:()=>se,nJ:()=>Zn,oH:()=>Tn,p4:()=>la,qQ:()=>Ic,sg:()=>Ze,u:()=>ds,u5:()=>zs,vC:()=>ba,wV:()=>Ja,x0:()=>gn});var r=s(64537),a=s(88692),c=s(76666),u=s(35758),e=s(88002);let f=(()=>{class bt{constructor(Je,en){this._renderer=Je,this._elementRef=en,this.onChange=fi=>{},this.onTouched=()=>{}}setProperty(Je,en){this._renderer.setProperty(this._elementRef.nativeElement,Je,en)}registerOnTouched(Je){this.onTouched=Je}registerOnChange(Je){this.onChange=Je}setDisabledState(Je){this.setProperty("disabled",Je)}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(r.Qsj),r.Y36(r.SBq))},bt.\u0275dir=r.lG2({type:bt}),bt})(),m=(()=>{class bt extends f{}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,features:[r.qOj]}),bt})();const T=new r.OlP("NgValueAccessor"),M={provide:T,useExisting:(0,r.Gpc)(()=>w),multi:!0};let w=(()=>{class bt extends m{writeValue(Je){this.setProperty("checked",Je)}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,selectors:[["input","type","checkbox","formControlName",""],["input","type","checkbox","formControl",""],["input","type","checkbox","ngModel",""]],hostBindings:function(Je,en){1&Je&&r.NdJ("change",function(To){return en.onChange(To.target.checked)})("blur",function(){return en.onTouched()})},features:[r._Bn([M]),r.qOj]}),bt})();const D={provide:T,useExisting:(0,r.Gpc)(()=>$),multi:!0},W=new r.OlP("CompositionEventMode");let $=(()=>{class bt extends f{constructor(Je,en,fi){super(Je,en),this._compositionMode=fi,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function U(){const bt=(0,a.q)()?(0,a.q)().getUserAgent():"";return/android (\d+)/.test(bt.toLowerCase())}())}writeValue(Je){this.setProperty("value",Je??"")}_handleInput(Je){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(Je)}_compositionStart(){this._composing=!0}_compositionEnd(Je){this._composing=!1,this._compositionMode&&this.onChange(Je)}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(W,8))},bt.\u0275dir=r.lG2({type:bt,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(Je,en){1&Je&&r.NdJ("input",function(To){return en._handleInput(To.target.value)})("blur",function(){return en.onTouched()})("compositionstart",function(){return en._compositionStart()})("compositionend",function(To){return en._compositionEnd(To.target.value)})},features:[r._Bn([D]),r.qOj]}),bt})();const J=!1;function F(bt){return null==bt||("string"==typeof bt||Array.isArray(bt))&&0===bt.length}function X(bt){return null!=bt&&"number"==typeof bt.length}const de=new r.OlP("NgValidators"),V=new r.OlP("NgAsyncValidators"),ce=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;class se{static min(pt){return fe(pt)}static max(pt){return Te(pt)}static required(pt){return $e(pt)}static requiredTrue(pt){return function ge(bt){return!0===bt.value?null:{required:!0}}(pt)}static email(pt){return function Et(bt){return F(bt.value)||ce.test(bt.value)?null:{email:!0}}(pt)}static minLength(pt){return function ot(bt){return pt=>F(pt.value)||!X(pt.value)?null:pt.value.length<bt?{minlength:{requiredLength:bt,actualLength:pt.value.length}}:null}(pt)}static maxLength(pt){return function ct(bt){return pt=>X(pt.value)&&pt.value.length>bt?{maxlength:{requiredLength:bt,actualLength:pt.value.length}}:null}(pt)}static pattern(pt){return function qe(bt){if(!bt)return He;let pt,Je;return"string"==typeof bt?(Je="","^"!==bt.charAt(0)&&(Je+="^"),Je+=bt,"$"!==bt.charAt(bt.length-1)&&(Je+="$"),pt=new RegExp(Je)):(Je=bt.toString(),pt=bt),en=>{if(F(en.value))return null;const fi=en.value;return pt.test(fi)?null:{pattern:{requiredPattern:Je,actualValue:fi}}}}(pt)}static nullValidator(pt){return null}static compose(pt){return pn(pt)}static composeAsync(pt){return At(pt)}}function fe(bt){return pt=>{if(F(pt.value)||F(bt))return null;const Je=parseFloat(pt.value);return!isNaN(Je)&&Je<bt?{min:{min:bt,actual:pt.value}}:null}}function Te(bt){return pt=>{if(F(pt.value)||F(bt))return null;const Je=parseFloat(pt.value);return!isNaN(Je)&&Je>bt?{max:{max:bt,actual:pt.value}}:null}}function $e(bt){return F(bt.value)?{required:!0}:null}function He(bt){return null}function We(bt){return null!=bt}function Le(bt){const pt=(0,r.QGY)(bt)?(0,c.D)(bt):bt;if(J&&!(0,r.CqO)(pt)){let Je="Expected async validator to return Promise or Observable.";throw"object"==typeof bt&&(Je+=" Are you using a synchronous validator where an async validator is expected?"),new r.vHH(-1101,Je)}return pt}function Pt(bt){let pt={};return bt.forEach(Je=>{pt=null!=Je?{...pt,...Je}:pt}),0===Object.keys(pt).length?null:pt}function it(bt,pt){return pt.map(Je=>Je(bt))}function cn(bt){return bt.map(pt=>function Xt(bt){return!bt.validate}(pt)?pt:Je=>pt.validate(Je))}function pn(bt){if(!bt)return null;const pt=bt.filter(We);return 0==pt.length?null:function(Je){return Pt(it(Je,pt))}}function Rn(bt){return null!=bt?pn(cn(bt)):null}function At(bt){if(!bt)return null;const pt=bt.filter(We);return 0==pt.length?null:function(Je){const en=it(Je,pt).map(Le);return(0,u.D)(en).pipe((0,e.U)(Pt))}}function qt(bt){return null!=bt?At(cn(bt)):null}function sn(bt,pt){return null===bt?[pt]:Array.isArray(bt)?[...bt,pt]:[bt,pt]}function fn(bt){return bt._rawValidators}function xn(bt){return bt._rawAsyncValidators}function Kr(bt){return bt?Array.isArray(bt)?bt:[bt]:[]}function Or(bt,pt){return Array.isArray(bt)?bt.includes(pt):bt===pt}function Lr(bt,pt){const Je=Kr(pt);return Kr(bt).forEach(fi=>{Or(Je,fi)||Je.push(fi)}),Je}function ir(bt,pt){return Kr(pt).filter(Je=>!Or(bt,Je))}class Qr{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(pt){this._rawValidators=pt||[],this._composedValidatorFn=Rn(this._rawValidators)}_setAsyncValidators(pt){this._rawAsyncValidators=pt||[],this._composedAsyncValidatorFn=qt(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(pt){this._onDestroyCallbacks.push(pt)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(pt=>pt()),this._onDestroyCallbacks=[]}reset(pt){this.control&&this.control.reset(pt)}hasError(pt,Je){return!!this.control&&this.control.hasError(pt,Je)}getError(pt,Je){return this.control?this.control.getError(pt,Je):null}}class jr extends Qr{get formDirective(){return null}get path(){return null}}class br extends Qr{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class ht{constructor(pt){this._cd=pt}get isTouched(){return!!this._cd?.control?.touched}get isUntouched(){return!!this._cd?.control?.untouched}get isPristine(){return!!this._cd?.control?.pristine}get isDirty(){return!!this._cd?.control?.dirty}get isValid(){return!!this._cd?.control?.valid}get isInvalid(){return!!this._cd?.control?.invalid}get isPending(){return!!this._cd?.control?.pending}get isSubmitted(){return!!this._cd?.submitted}}let wn=(()=>{class bt extends ht{constructor(Je){super(Je)}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(br,2))},bt.\u0275dir=r.lG2({type:bt,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(Je,en){2&Je&&r.ekj("ng-untouched",en.isUntouched)("ng-touched",en.isTouched)("ng-pristine",en.isPristine)("ng-dirty",en.isDirty)("ng-valid",en.isValid)("ng-invalid",en.isInvalid)("ng-pending",en.isPending)},features:[r.qOj]}),bt})(),jn=(()=>{class bt extends ht{constructor(Je){super(Je)}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(jr,10))},bt.\u0275dir=r.lG2({type:bt,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(Je,en){2&Je&&r.ekj("ng-untouched",en.isUntouched)("ng-touched",en.isTouched)("ng-pristine",en.isPristine)("ng-dirty",en.isDirty)("ng-valid",en.isValid)("ng-invalid",en.isInvalid)("ng-pending",en.isPending)("ng-submitted",en.isSubmitted)},features:[r.qOj]}),bt})();function Hi(bt,pt){return bt?`with name: '${pt}'`:`at index: ${pt}`}const Fe=!1,Ie="VALID",et="INVALID",ze="PENDING",an="DISABLED";function lt(bt){return(gr(bt)?bt.validators:bt)||null}function Pe(bt,pt){return(gr(pt)?pt.asyncValidators:bt)||null}function gr(bt){return null!=bt&&!Array.isArray(bt)&&"object"==typeof bt}function Pn(bt,pt,Je){const en=bt.controls;if(!(pt?Object.keys(en):en).length)throw new r.vHH(1e3,Fe?function Dn(bt){return`\n    There are no form controls registered with this ${bt?"group":"array"} yet. If you're using ngModel,\n    you may want to check next tick (e.g. use setTimeout).\n  `}(pt):"");if(!en[Je])throw new r.vHH(1001,Fe?function Hn(bt,pt){return`Cannot find form control ${Hi(bt,pt)}`}(pt,Je):"")}function _r(bt,pt,Je){bt._forEachChild((en,fi)=>{if(void 0===Je[fi])throw new r.vHH(1002,Fe?function jt(bt,pt){return`Must supply a value for form control ${Hi(bt,pt)}`}(pt,fi):"")})}class Pr{constructor(pt,Je){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._assignValidators(pt),this._assignAsyncValidators(Je)}get validator(){return this._composedValidatorFn}set validator(pt){this._rawValidators=this._composedValidatorFn=pt}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(pt){this._rawAsyncValidators=this._composedAsyncValidatorFn=pt}get parent(){return this._parent}get valid(){return this.status===Ie}get invalid(){return this.status===et}get pending(){return this.status==ze}get disabled(){return this.status===an}get enabled(){return this.status!==an}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(pt){this._assignValidators(pt)}setAsyncValidators(pt){this._assignAsyncValidators(pt)}addValidators(pt){this.setValidators(Lr(pt,this._rawValidators))}addAsyncValidators(pt){this.setAsyncValidators(Lr(pt,this._rawAsyncValidators))}removeValidators(pt){this.setValidators(ir(pt,this._rawValidators))}removeAsyncValidators(pt){this.setAsyncValidators(ir(pt,this._rawAsyncValidators))}hasValidator(pt){return Or(this._rawValidators,pt)}hasAsyncValidator(pt){return Or(this._rawAsyncValidators,pt)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(pt={}){this.touched=!0,this._parent&&!pt.onlySelf&&this._parent.markAsTouched(pt)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(pt=>pt.markAllAsTouched())}markAsUntouched(pt={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(Je=>{Je.markAsUntouched({onlySelf:!0})}),this._parent&&!pt.onlySelf&&this._parent._updateTouched(pt)}markAsDirty(pt={}){this.pristine=!1,this._parent&&!pt.onlySelf&&this._parent.markAsDirty(pt)}markAsPristine(pt={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(Je=>{Je.markAsPristine({onlySelf:!0})}),this._parent&&!pt.onlySelf&&this._parent._updatePristine(pt)}markAsPending(pt={}){this.status=ze,!1!==pt.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!pt.onlySelf&&this._parent.markAsPending(pt)}disable(pt={}){const Je=this._parentMarkedDirty(pt.onlySelf);this.status=an,this.errors=null,this._forEachChild(en=>{en.disable({...pt,onlySelf:!0})}),this._updateValue(),!1!==pt.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors({...pt,skipPristineCheck:Je}),this._onDisabledChange.forEach(en=>en(!0))}enable(pt={}){const Je=this._parentMarkedDirty(pt.onlySelf);this.status=Ie,this._forEachChild(en=>{en.enable({...pt,onlySelf:!0})}),this.updateValueAndValidity({onlySelf:!0,emitEvent:pt.emitEvent}),this._updateAncestors({...pt,skipPristineCheck:Je}),this._onDisabledChange.forEach(en=>en(!1))}_updateAncestors(pt){this._parent&&!pt.onlySelf&&(this._parent.updateValueAndValidity(pt),pt.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(pt){this._parent=pt}getRawValue(){return this.value}updateValueAndValidity(pt={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===Ie||this.status===ze)&&this._runAsyncValidator(pt.emitEvent)),!1!==pt.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!pt.onlySelf&&this._parent.updateValueAndValidity(pt)}_updateTreeValidity(pt={emitEvent:!0}){this._forEachChild(Je=>Je._updateTreeValidity(pt)),this.updateValueAndValidity({onlySelf:!0,emitEvent:pt.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?an:Ie}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(pt){if(this.asyncValidator){this.status=ze,this._hasOwnPendingAsyncValidator=!0;const Je=Le(this.asyncValidator(this));this._asyncValidationSubscription=Je.subscribe(en=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(en,{emitEvent:pt})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(pt,Je={}){this.errors=pt,this._updateControlsErrors(!1!==Je.emitEvent)}get(pt){let Je=pt;return null==Je||(Array.isArray(Je)||(Je=Je.split(".")),0===Je.length)?null:Je.reduce((en,fi)=>en&&en._find(fi),this)}getError(pt,Je){const en=Je?this.get(Je):this;return en&&en.errors?en.errors[pt]:null}hasError(pt,Je){return!!this.getError(pt,Je)}get root(){let pt=this;for(;pt._parent;)pt=pt._parent;return pt}_updateControlsErrors(pt){this.status=this._calculateStatus(),pt&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(pt)}_initObservables(){this.valueChanges=new r.vpe,this.statusChanges=new r.vpe}_calculateStatus(){return this._allControlsDisabled()?an:this.errors?et:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(ze)?ze:this._anyControlsHaveStatus(et)?et:Ie}_anyControlsHaveStatus(pt){return this._anyControls(Je=>Je.status===pt)}_anyControlsDirty(){return this._anyControls(pt=>pt.dirty)}_anyControlsTouched(){return this._anyControls(pt=>pt.touched)}_updatePristine(pt={}){this.pristine=!this._anyControlsDirty(),this._parent&&!pt.onlySelf&&this._parent._updatePristine(pt)}_updateTouched(pt={}){this.touched=this._anyControlsTouched(),this._parent&&!pt.onlySelf&&this._parent._updateTouched(pt)}_registerOnCollectionChange(pt){this._onCollectionChange=pt}_setUpdateStrategy(pt){gr(pt)&&null!=pt.updateOn&&(this._updateOn=pt.updateOn)}_parentMarkedDirty(pt){return!pt&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}_find(pt){return null}_assignValidators(pt){this._rawValidators=Array.isArray(pt)?pt.slice():pt,this._composedValidatorFn=function Rt(bt){return Array.isArray(bt)?Rn(bt):bt||null}(this._rawValidators)}_assignAsyncValidators(pt){this._rawAsyncValidators=Array.isArray(pt)?pt.slice():pt,this._composedAsyncValidatorFn=function qn(bt){return Array.isArray(bt)?qt(bt):bt||null}(this._rawAsyncValidators)}}class tr extends Pr{constructor(pt,Je,en){super(lt(Je),Pe(en,Je)),this.controls=pt,this._initObservables(),this._setUpdateStrategy(Je),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(pt,Je){return this.controls[pt]?this.controls[pt]:(this.controls[pt]=Je,Je.setParent(this),Je._registerOnCollectionChange(this._onCollectionChange),Je)}addControl(pt,Je,en={}){this.registerControl(pt,Je),this.updateValueAndValidity({emitEvent:en.emitEvent}),this._onCollectionChange()}removeControl(pt,Je={}){this.controls[pt]&&this.controls[pt]._registerOnCollectionChange(()=>{}),delete this.controls[pt],this.updateValueAndValidity({emitEvent:Je.emitEvent}),this._onCollectionChange()}setControl(pt,Je,en={}){this.controls[pt]&&this.controls[pt]._registerOnCollectionChange(()=>{}),delete this.controls[pt],Je&&this.registerControl(pt,Je),this.updateValueAndValidity({emitEvent:en.emitEvent}),this._onCollectionChange()}contains(pt){return this.controls.hasOwnProperty(pt)&&this.controls[pt].enabled}setValue(pt,Je={}){_r(this,!0,pt),Object.keys(pt).forEach(en=>{Pn(this,!0,en),this.controls[en].setValue(pt[en],{onlySelf:!0,emitEvent:Je.emitEvent})}),this.updateValueAndValidity(Je)}patchValue(pt,Je={}){null!=pt&&(Object.keys(pt).forEach(en=>{const fi=this.controls[en];fi&&fi.patchValue(pt[en],{onlySelf:!0,emitEvent:Je.emitEvent})}),this.updateValueAndValidity(Je))}reset(pt={},Je={}){this._forEachChild((en,fi)=>{en.reset(pt[fi],{onlySelf:!0,emitEvent:Je.emitEvent})}),this._updatePristine(Je),this._updateTouched(Je),this.updateValueAndValidity(Je)}getRawValue(){return this._reduceChildren({},(pt,Je,en)=>(pt[en]=Je.getRawValue(),pt))}_syncPendingControls(){let pt=this._reduceChildren(!1,(Je,en)=>!!en._syncPendingControls()||Je);return pt&&this.updateValueAndValidity({onlySelf:!0}),pt}_forEachChild(pt){Object.keys(this.controls).forEach(Je=>{const en=this.controls[Je];en&&pt(en,Je)})}_setUpControls(){this._forEachChild(pt=>{pt.setParent(this),pt._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(pt){for(const[Je,en]of Object.entries(this.controls))if(this.contains(Je)&&pt(en))return!0;return!1}_reduceValue(){return this._reduceChildren({},(Je,en,fi)=>((en.enabled||this.disabled)&&(Je[fi]=en.value),Je))}_reduceChildren(pt,Je){let en=pt;return this._forEachChild((fi,To)=>{en=Je(en,fi,To)}),en}_allControlsDisabled(){for(const pt of Object.keys(this.controls))if(this.controls[pt].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}_find(pt){return this.controls.hasOwnProperty(pt)?this.controls[pt]:null}}const Zn=tr;class Zt extends tr{}const Ge=new r.OlP("CallSetDisabledState",{providedIn:"root",factory:()=>Ot}),Ot="always";function mn(bt,pt){return[...pt.path,bt]}function wr(bt,pt,Je=Ot){Ko(bt,pt),pt.valueAccessor.writeValue(bt.value),(bt.disabled||"always"===Je)&&pt.valueAccessor.setDisabledState?.(bt.disabled),function dr(bt,pt){pt.valueAccessor.registerOnChange(Je=>{bt._pendingValue=Je,bt._pendingChange=!0,bt._pendingDirty=!0,"change"===bt.updateOn&&ti(bt,pt)})}(bt,pt),function Vr(bt,pt){const Je=(en,fi)=>{pt.valueAccessor.writeValue(en),fi&&pt.viewToModelUpdate(en)};bt.registerOnChange(Je),pt._registerOnDestroy(()=>{bt._unregisterOnChange(Je)})}(bt,pt),function Ni(bt,pt){pt.valueAccessor.registerOnTouched(()=>{bt._pendingTouched=!0,"blur"===bt.updateOn&&bt._pendingChange&&ti(bt,pt),"submit"!==bt.updateOn&&bt.markAsTouched()})}(bt,pt),function Ai(bt,pt){if(pt.valueAccessor.setDisabledState){const Je=en=>{pt.valueAccessor.setDisabledState(en)};bt.registerOnDisabledChange(Je),pt._registerOnDestroy(()=>{bt._unregisterOnDisabledChange(Je)})}}(bt,pt)}function Ti(bt,pt,Je=!0){const en=()=>{};pt.valueAccessor&&(pt.valueAccessor.registerOnChange(en),pt.valueAccessor.registerOnTouched(en)),_s(bt,pt),bt&&(pt._invokeOnDestroyCallbacks(),bt._registerOnCollectionChange(()=>{}))}function Ci(bt,pt){bt.forEach(Je=>{Je.registerOnValidatorChange&&Je.registerOnValidatorChange(pt)})}function Ko(bt,pt){const Je=fn(bt);null!==pt.validator?bt.setValidators(sn(Je,pt.validator)):"function"==typeof Je&&bt.setValidators([Je]);const en=xn(bt);null!==pt.asyncValidator?bt.setAsyncValidators(sn(en,pt.asyncValidator)):"function"==typeof en&&bt.setAsyncValidators([en]);const fi=()=>bt.updateValueAndValidity();Ci(pt._rawValidators,fi),Ci(pt._rawAsyncValidators,fi)}function _s(bt,pt){let Je=!1;if(null!==bt){if(null!==pt.validator){const fi=fn(bt);if(Array.isArray(fi)&&fi.length>0){const To=fi.filter(Ya=>Ya!==pt.validator);To.length!==fi.length&&(Je=!0,bt.setValidators(To))}}if(null!==pt.asyncValidator){const fi=xn(bt);if(Array.isArray(fi)&&fi.length>0){const To=fi.filter(Ya=>Ya!==pt.asyncValidator);To.length!==fi.length&&(Je=!0,bt.setAsyncValidators(To))}}}const en=()=>{};return Ci(pt._rawValidators,en),Ci(pt._rawAsyncValidators,en),Je}function ti(bt,pt){bt._pendingDirty&&bt.markAsDirty(),bt.setValue(bt._pendingValue,{emitModelToViewChange:!1}),pt.viewToModelUpdate(bt._pendingValue),bt._pendingChange=!1}function wi(bt,pt){Ko(bt,pt)}function Vt(bt,pt){if(!bt.hasOwnProperty("model"))return!1;const Je=bt.model;return!!Je.isFirstChange()||!Object.is(pt,Je.currentValue)}function Bn(bt,pt){bt._syncPendingControls(),pt.forEach(Je=>{const en=Je.control;"submit"===en.updateOn&&en._pendingChange&&(Je.viewToModelUpdate(en._pendingValue),en._pendingChange=!1)})}function ci(bt,pt){if(!pt)return null;let Je,en,fi;return Array.isArray(pt),pt.forEach(To=>{To.constructor===$?Je=To:function bn(bt){return Object.getPrototypeOf(bt.constructor)===m}(To)?en=To:fi=To}),fi||en||Je||null}const es={provide:jr,useExisting:(0,r.Gpc)(()=>jo)},ts=(()=>Promise.resolve())();let jo=(()=>{class bt extends jr{constructor(Je,en,fi){super(),this.callSetDisabledState=fi,this.submitted=!1,this._directives=new Set,this.ngSubmit=new r.vpe,this.form=new tr({},Rn(Je),qt(en))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(Je){ts.then(()=>{const en=this._findContainer(Je.path);Je.control=en.registerControl(Je.name,Je.control),wr(Je.control,Je,this.callSetDisabledState),Je.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(Je)})}getControl(Je){return this.form.get(Je.path)}removeControl(Je){ts.then(()=>{const en=this._findContainer(Je.path);en&&en.removeControl(Je.name),this._directives.delete(Je)})}addFormGroup(Je){ts.then(()=>{const en=this._findContainer(Je.path),fi=new tr({});wi(fi,Je),en.registerControl(Je.name,fi),fi.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(Je){ts.then(()=>{const en=this._findContainer(Je.path);en&&en.removeControl(Je.name)})}getFormGroup(Je){return this.form.get(Je.path)}updateModel(Je,en){ts.then(()=>{this.form.get(Je.path).setValue(en)})}setValue(Je){this.control.setValue(Je)}onSubmit(Je){return this.submitted=!0,Bn(this.form,this._directives),this.ngSubmit.emit(Je),"dialog"===Je?.target?.method}onReset(){this.resetForm()}resetForm(Je){this.form.reset(Je),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(Je){return Je.pop(),Je.length?this.form.get(Je):this.form}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(de,10),r.Y36(V,10),r.Y36(Ge,8))},bt.\u0275dir=r.lG2({type:bt,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(Je,en){1&Je&&r.NdJ("submit",function(To){return en.onSubmit(To)})("reset",function(){return en.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[r._Bn([es]),r.qOj]}),bt})();function ss(bt,pt){const Je=bt.indexOf(pt);Je>-1&&bt.splice(Je,1)}function gs(bt){return"object"==typeof bt&&null!==bt&&2===Object.keys(bt).length&&"value"in bt&&"disabled"in bt}const Is=class extends Pr{constructor(pt=null,Je,en){super(lt(Je),Pe(en,Je)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(pt),this._setUpdateStrategy(Je),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),gr(Je)&&(Je.nonNullable||Je.initialValueIsDefault)&&(this.defaultValue=gs(pt)?pt.value:pt)}setValue(pt,Je={}){this.value=this._pendingValue=pt,this._onChange.length&&!1!==Je.emitModelToViewChange&&this._onChange.forEach(en=>en(this.value,!1!==Je.emitViewToModelChange)),this.updateValueAndValidity(Je)}patchValue(pt,Je={}){this.setValue(pt,Je)}reset(pt=this.defaultValue,Je={}){this._applyFormState(pt),this.markAsPristine(Je),this.markAsUntouched(Je),this.setValue(this.value,Je),this._pendingChange=!1}_updateValue(){}_anyControls(pt){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(pt){this._onChange.push(pt)}_unregisterOnChange(pt){ss(this._onChange,pt)}registerOnDisabledChange(pt){this._onDisabledChange.push(pt)}_unregisterOnDisabledChange(pt){ss(this._onDisabledChange,pt)}_forEachChild(pt){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(pt){gs(pt)?(this.value=this._pendingValue=pt.value,pt.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=pt}},la=Is;let jl=(()=>{class bt extends jr{ngOnInit(){this._checkParentType(),this.formDirective.addFormGroup(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormGroup(this)}get control(){return this.formDirective.getFormGroup(this)}get path(){return mn(null==this.name?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_checkParentType(){}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,features:[r.qOj]}),bt})();const Ha={provide:br,useExisting:(0,r.Gpc)(()=>hs)},Ts=(()=>Promise.resolve())();let hs=(()=>{class bt extends br{constructor(Je,en,fi,To,Ya,mi){super(),this._changeDetectorRef=Ya,this.callSetDisabledState=mi,this.control=new Is,this._registered=!1,this.update=new r.vpe,this._parent=Je,this._setValidators(en),this._setAsyncValidators(fi),this.valueAccessor=ci(0,To)}ngOnChanges(Je){if(this._checkForErrors(),!this._registered||"name"in Je){if(this._registered&&(this._checkName(),this.formDirective)){const en=Je.name.previousValue;this.formDirective.removeControl({name:en,path:this._getPath(en)})}this._setUpControl()}"isDisabled"in Je&&this._updateDisabled(Je),Vt(Je,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(Je){this.viewModel=Je,this.update.emit(Je)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){wr(this.control,this,this.callSetDisabledState),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(Je){Ts.then(()=>{this.control.setValue(Je,{emitViewToModelChange:!1}),this._changeDetectorRef?.markForCheck()})}_updateDisabled(Je){const en=Je.isDisabled.currentValue,fi=0!==en&&(0,r.D6c)(en);Ts.then(()=>{fi&&!this.control.disabled?this.control.disable():!fi&&this.control.disabled&&this.control.enable(),this._changeDetectorRef?.markForCheck()})}_getPath(Je){return this._parent?mn(Je,this._parent):[Je]}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(jr,9),r.Y36(de,10),r.Y36(V,10),r.Y36(T,10),r.Y36(r.sBO,8),r.Y36(Ge,8))},bt.\u0275dir=r.lG2({type:bt,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[r._Bn([Ha]),r.qOj,r.TTD]}),bt})(),$s=(()=>{class bt{}return bt.\u0275fac=function(Je){return new(Je||bt)},bt.\u0275dir=r.lG2({type:bt,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),bt})();const Aa={provide:T,useExisting:(0,r.Gpc)(()=>Ja),multi:!0};let Ja=(()=>{class bt extends m{writeValue(Je){this.setProperty("value",Je??"")}registerOnChange(Je){this.onChange=en=>{Je(""==en?null:parseFloat(en))}}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,selectors:[["input","type","number","formControlName",""],["input","type","number","formControl",""],["input","type","number","ngModel",""]],hostBindings:function(Je,en){1&Je&&r.NdJ("input",function(To){return en.onChange(To.target.value)})("blur",function(){return en.onTouched()})},features:[r._Bn([Aa]),r.qOj]}),bt})();const fa={provide:T,useExisting:(0,r.Gpc)(()=>ns),multi:!0};let No=(()=>{class bt{}return bt.\u0275fac=function(Je){return new(Je||bt)},bt.\u0275mod=r.oAB({type:bt}),bt.\u0275inj=r.cJS({}),bt})(),Cs=(()=>{class bt{constructor(){this._accessors=[]}add(Je,en){this._accessors.push([Je,en])}remove(Je){for(let en=this._accessors.length-1;en>=0;--en)if(this._accessors[en][1]===Je)return void this._accessors.splice(en,1)}select(Je){this._accessors.forEach(en=>{this._isSameGroup(en,Je)&&en[1]!==Je&&en[1].fireUncheck(Je.value)})}_isSameGroup(Je,en){return!!Je[0].control&&Je[0]._parent===en._control._parent&&Je[1].name===en.name}}return bt.\u0275fac=function(Je){return new(Je||bt)},bt.\u0275prov=r.Yz7({token:bt,factory:bt.\u0275fac,providedIn:No}),bt})(),ns=(()=>{class bt extends m{constructor(Je,en,fi,To){super(Je,en),this._registry=fi,this._injector=To,this.setDisabledStateFired=!1,this.onChange=()=>{},this.callSetDisabledState=(0,r.f3M)(Ge,{optional:!0})??Ot}ngOnInit(){this._control=this._injector.get(br),this._checkName(),this._registry.add(this._control,this)}ngOnDestroy(){this._registry.remove(this)}writeValue(Je){this._state=Je===this.value,this.setProperty("checked",this._state)}registerOnChange(Je){this._fn=Je,this.onChange=()=>{Je(this.value),this._registry.select(this)}}setDisabledState(Je){(this.setDisabledStateFired||Je||"whenDisabledForLegacyCode"===this.callSetDisabledState)&&this.setProperty("disabled",Je),this.setDisabledStateFired=!0}fireUncheck(Je){this.writeValue(Je)}_checkName(){!this.name&&this.formControlName&&(this.name=this.formControlName)}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(Cs),r.Y36(r.zs3))},bt.\u0275dir=r.lG2({type:bt,selectors:[["input","type","radio","formControlName",""],["input","type","radio","formControl",""],["input","type","radio","ngModel",""]],hostBindings:function(Je,en){1&Je&&r.NdJ("change",function(){return en.onChange()})("blur",function(){return en.onTouched()})},inputs:{name:"name",formControlName:"formControlName",value:"value"},features:[r._Bn([fa]),r.qOj]}),bt})();const io=new r.OlP("NgModelWithFormControlWarning"),gt={provide:br,useExisting:(0,r.Gpc)(()=>Tn)};let Tn=(()=>{class bt extends br{set isDisabled(Je){}constructor(Je,en,fi,To,Ya){super(),this._ngModelWarningConfig=To,this.callSetDisabledState=Ya,this.update=new r.vpe,this._ngModelWarningSent=!1,this._setValidators(Je),this._setAsyncValidators(en),this.valueAccessor=ci(0,fi)}ngOnChanges(Je){if(this._isControlChanged(Je)){const en=Je.form.previousValue;en&&Ti(en,this,!1),wr(this.form,this,this.callSetDisabledState),this.form.updateValueAndValidity({emitEvent:!1})}Vt(Je,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&Ti(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(Je){this.viewModel=Je,this.update.emit(Je)}_isControlChanged(Je){return Je.hasOwnProperty("form")}}return bt._ngModelWarningSentOnce=!1,bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(de,10),r.Y36(V,10),r.Y36(T,10),r.Y36(io,8),r.Y36(Ge,8))},bt.\u0275dir=r.lG2({type:bt,selectors:[["","formControl",""]],inputs:{form:["formControl","form"],isDisabled:["disabled","isDisabled"],model:["ngModel","model"]},outputs:{update:"ngModelChange"},exportAs:["ngForm"],features:[r._Bn([gt]),r.qOj,r.TTD]}),bt})();const ie={provide:jr,useExisting:(0,r.Gpc)(()=>Ze)};let Ze=(()=>{class bt extends jr{constructor(Je,en,fi){super(),this.callSetDisabledState=fi,this.submitted=!1,this._onCollectionChange=()=>this._updateDomValue(),this.directives=[],this.form=null,this.ngSubmit=new r.vpe,this._setValidators(Je),this._setAsyncValidators(en)}ngOnChanges(Je){this._checkFormPresent(),Je.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}ngOnDestroy(){this.form&&(_s(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(Je){const en=this.form.get(Je.path);return wr(en,Je,this.callSetDisabledState),en.updateValueAndValidity({emitEvent:!1}),this.directives.push(Je),en}getControl(Je){return this.form.get(Je.path)}removeControl(Je){Ti(Je.control||null,Je,!1),function _o(bt,pt){const Je=bt.indexOf(pt);Je>-1&&bt.splice(Je,1)}(this.directives,Je)}addFormGroup(Je){this._setUpFormContainer(Je)}removeFormGroup(Je){this._cleanUpFormContainer(Je)}getFormGroup(Je){return this.form.get(Je.path)}addFormArray(Je){this._setUpFormContainer(Je)}removeFormArray(Je){this._cleanUpFormContainer(Je)}getFormArray(Je){return this.form.get(Je.path)}updateModel(Je,en){this.form.get(Je.path).setValue(en)}onSubmit(Je){return this.submitted=!0,Bn(this.form,this.directives),this.ngSubmit.emit(Je),"dialog"===Je?.target?.method}onReset(){this.resetForm()}resetForm(Je){this.form.reset(Je),this.submitted=!1}_updateDomValue(){this.directives.forEach(Je=>{const en=Je.control,fi=this.form.get(Je.path);en!==fi&&(Ti(en||null,Je),(bt=>bt instanceof Is)(fi)&&(wr(fi,Je,this.callSetDisabledState),Je.control=fi))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(Je){const en=this.form.get(Je.path);wi(en,Je),en.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(Je){if(this.form){const en=this.form.get(Je.path);en&&function ji(bt,pt){return _s(bt,pt)}(en,Je)&&en.updateValueAndValidity({emitEvent:!1})}}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){Ko(this.form,this),this._oldForm&&_s(this._oldForm,this)}_checkFormPresent(){}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(de,10),r.Y36(V,10),r.Y36(Ge,8))},bt.\u0275dir=r.lG2({type:bt,selectors:[["","formGroup",""]],hostBindings:function(Je,en){1&Je&&r.NdJ("submit",function(To){return en.onSubmit(To)})("reset",function(){return en.onReset()})},inputs:{form:["formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[r._Bn([ie]),r.qOj,r.TTD]}),bt})();const Jt={provide:jr,useExisting:(0,r.Gpc)(()=>gn)};let gn=(()=>{class bt extends jl{constructor(Je,en,fi){super(),this._parent=Je,this._setValidators(en),this._setAsyncValidators(fi)}_checkParentType(){Xi(this._parent)}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(jr,13),r.Y36(de,10),r.Y36(V,10))},bt.\u0275dir=r.lG2({type:bt,selectors:[["","formGroupName",""]],inputs:{name:["formGroupName","name"]},features:[r._Bn([Jt]),r.qOj]}),bt})();const vi={provide:jr,useExisting:(0,r.Gpc)(()=>Bi)};let Bi=(()=>{class bt extends jr{constructor(Je,en,fi){super(),this._parent=Je,this._setValidators(en),this._setAsyncValidators(fi)}ngOnInit(){this._checkParentType(),this.formDirective.addFormArray(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormArray(this)}get control(){return this.formDirective.getFormArray(this)}get formDirective(){return this._parent?this._parent.formDirective:null}get path(){return mn(null==this.name?this.name:this.name.toString(),this._parent)}_checkParentType(){Xi(this._parent)}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(jr,13),r.Y36(de,10),r.Y36(V,10))},bt.\u0275dir=r.lG2({type:bt,selectors:[["","formArrayName",""]],inputs:{name:["formArrayName","name"]},features:[r._Bn([vi]),r.qOj]}),bt})();function Xi(bt){return!(bt instanceof gn||bt instanceof Ze||bt instanceof Bi)}const ws={provide:br,useExisting:(0,r.Gpc)(()=>ds)};let ds=(()=>{class bt extends br{set isDisabled(Je){}constructor(Je,en,fi,To,Ya){super(),this._ngModelWarningConfig=Ya,this._added=!1,this.update=new r.vpe,this._ngModelWarningSent=!1,this._parent=Je,this._setValidators(en),this._setAsyncValidators(fi),this.valueAccessor=ci(0,To)}ngOnChanges(Je){this._added||this._setUpControl(),Vt(Je,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(Je){this.viewModel=Je,this.update.emit(Je)}get path(){return mn(null==this.name?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_checkParentType(){}_setUpControl(){this._checkParentType(),this.control=this.formDirective.addControl(this),this._added=!0}}return bt._ngModelWarningSentOnce=!1,bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(jr,13),r.Y36(de,10),r.Y36(V,10),r.Y36(T,10),r.Y36(io,8))},bt.\u0275dir=r.lG2({type:bt,selectors:[["","formControlName",""]],inputs:{name:["formControlName","name"],isDisabled:["disabled","isDisabled"],model:["ngModel","model"]},outputs:{update:"ngModelChange"},features:[r._Bn([ws]),r.qOj,r.TTD]}),bt})();const qs={provide:T,useExisting:(0,r.Gpc)(()=>vl),multi:!0};function Js(bt,pt){return null==bt?`${pt}`:(pt&&"object"==typeof pt&&(pt="Object"),`${bt}: ${pt}`.slice(0,50))}let vl=(()=>{class bt extends m{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(Je){this._compareWith=Je}writeValue(Je){this.value=Je;const fi=Js(this._getOptionId(Je),Je);this.setProperty("value",fi)}registerOnChange(Je){this.onChange=en=>{this.value=this._getOptionValue(en),Je(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(Je){for(const en of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(en),Je))return en;return null}_getOptionValue(Je){const en=function Ll(bt){return bt.split(":")[0]}(Je);return this._optionMap.has(en)?this._optionMap.get(en):Je}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(Je,en){1&Je&&r.NdJ("change",function(To){return en.onChange(To.target.value)})("blur",function(){return en.onTouched()})},inputs:{compareWith:"compareWith"},features:[r._Bn([qs]),r.qOj]}),bt})(),Yu=(()=>{class bt{constructor(Je,en,fi){this._element=Je,this._renderer=en,this._select=fi,this._select&&(this.id=this._select._registerOption())}set ngValue(Je){null!=this._select&&(this._select._optionMap.set(this.id,Je),this._setElementValue(Js(this.id,Je)),this._select.writeValue(this._select.value))}set value(Je){this._setElementValue(Je),this._select&&this._select.writeValue(this._select.value)}_setElementValue(Je){this._renderer.setProperty(this._element.nativeElement,"value",Je)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(vl,9))},bt.\u0275dir=r.lG2({type:bt,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),bt})();const Nc={provide:T,useExisting:(0,r.Gpc)(()=>yl),multi:!0};function qu(bt,pt){return null==bt?`${pt}`:("string"==typeof pt&&(pt=`'${pt}'`),pt&&"object"==typeof pt&&(pt="Object"),`${bt}: ${pt}`.slice(0,50))}let yl=(()=>{class bt extends m{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(Je){this._compareWith=Je}writeValue(Je){let en;if(this.value=Je,Array.isArray(Je)){const fi=Je.map(To=>this._getOptionId(To));en=(To,Ya)=>{To._setSelected(fi.indexOf(Ya.toString())>-1)}}else en=(fi,To)=>{fi._setSelected(!1)};this._optionMap.forEach(en)}registerOnChange(Je){this.onChange=en=>{const fi=[],To=en.selectedOptions;if(void 0!==To){const Ya=To;for(let mi=0;mi<Ya.length;mi++){const Qs=this._getOptionValue(Ya[mi].value);fi.push(Qs)}}else{const Ya=en.options;for(let mi=0;mi<Ya.length;mi++){const Hs=Ya[mi];if(Hs.selected){const Qs=this._getOptionValue(Hs.value);fi.push(Qs)}}}this.value=fi,Je(fi)}}_registerOption(Je){const en=(this._idCounter++).toString();return this._optionMap.set(en,Je),en}_getOptionId(Je){for(const en of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(en)._value,Je))return en;return null}_getOptionValue(Je){const en=function Ol(bt){return bt.split(":")[0]}(Je);return this._optionMap.has(en)?this._optionMap.get(en)._value:Je}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,selectors:[["select","multiple","","formControlName",""],["select","multiple","","formControl",""],["select","multiple","","ngModel",""]],hostBindings:function(Je,en){1&Je&&r.NdJ("change",function(To){return en.onChange(To.target)})("blur",function(){return en.onTouched()})},inputs:{compareWith:"compareWith"},features:[r._Bn([Nc]),r.qOj]}),bt})(),au=(()=>{class bt{constructor(Je,en,fi){this._element=Je,this._renderer=en,this._select=fi,this._select&&(this.id=this._select._registerOption(this))}set ngValue(Je){null!=this._select&&(this._value=Je,this._setElementValue(qu(this.id,Je)),this._select.writeValue(this._select.value))}set value(Je){this._select?(this._value=Je,this._setElementValue(qu(this.id,Je)),this._select.writeValue(this._select.value)):this._setElementValue(Je)}_setElementValue(Je){this._renderer.setProperty(this._element.nativeElement,"value",Je)}_setSelected(Je){this._renderer.setProperty(this._element.nativeElement,"selected",Je)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return bt.\u0275fac=function(Je){return new(Je||bt)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(yl,9))},bt.\u0275dir=r.lG2({type:bt,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),bt})();function yu(bt){return"number"==typeof bt?bt:parseFloat(bt)}let ju=(()=>{class bt{constructor(){this._validator=He}ngOnChanges(Je){if(this.inputName in Je){const en=this.normalizeInput(Je[this.inputName].currentValue);this._enabled=this.enabled(en),this._validator=this._enabled?this.createValidator(en):He,this._onChange&&this._onChange()}}validate(Je){return this._validator(Je)}registerOnValidatorChange(Je){this._onChange=Je}enabled(Je){return null!=Je}}return bt.\u0275fac=function(Je){return new(Je||bt)},bt.\u0275dir=r.lG2({type:bt,features:[r.TTD]}),bt})();const el={provide:de,useExisting:(0,r.Gpc)(()=>oc),multi:!0};let oc=(()=>{class bt extends ju{constructor(){super(...arguments),this.inputName="max",this.normalizeInput=Je=>yu(Je),this.createValidator=Je=>Te(Je)}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,selectors:[["input","type","number","max","","formControlName",""],["input","type","number","max","","formControl",""],["input","type","number","max","","ngModel",""]],hostVars:1,hostBindings:function(Je,en){2&Je&&r.uIk("max",en._enabled?en.max:null)},inputs:{max:"max"},features:[r._Bn([el]),r.qOj]}),bt})();const Xl={provide:de,useExisting:(0,r.Gpc)(()=>Ic),multi:!0};let Ic=(()=>{class bt extends ju{constructor(){super(...arguments),this.inputName="min",this.normalizeInput=Je=>yu(Je),this.createValidator=Je=>fe(Je)}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,selectors:[["input","type","number","min","","formControlName",""],["input","type","number","min","","formControl",""],["input","type","number","min","","ngModel",""]],hostVars:1,hostBindings:function(Je,en){2&Je&&r.uIk("min",en._enabled?en.min:null)},inputs:{min:"min"},features:[r._Bn([Xl]),r.qOj]}),bt})();const Gs={provide:de,useExisting:(0,r.Gpc)(()=>zu),multi:!0};let zu=(()=>{class bt extends ju{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=r.D6c,this.createValidator=Je=>$e}enabled(Je){return Je}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275dir=r.lG2({type:bt,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(Je,en){2&Je&&r.uIk("required",en._enabled?"":null)},inputs:{required:"required"},features:[r._Bn([Gs]),r.qOj]}),bt})(),Ru=(()=>{class bt{}return bt.\u0275fac=function(Je){return new(Je||bt)},bt.\u0275mod=r.oAB({type:bt}),bt.\u0275inj=r.cJS({imports:[No]}),bt})();class xu extends Pr{constructor(pt,Je,en){super(lt(Je),Pe(en,Je)),this.controls=pt,this._initObservables(),this._setUpdateStrategy(Je),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}at(pt){return this.controls[this._adjustIndex(pt)]}push(pt,Je={}){this.controls.push(pt),this._registerControl(pt),this.updateValueAndValidity({emitEvent:Je.emitEvent}),this._onCollectionChange()}insert(pt,Je,en={}){this.controls.splice(pt,0,Je),this._registerControl(Je),this.updateValueAndValidity({emitEvent:en.emitEvent})}removeAt(pt,Je={}){let en=this._adjustIndex(pt);en<0&&(en=0),this.controls[en]&&this.controls[en]._registerOnCollectionChange(()=>{}),this.controls.splice(en,1),this.updateValueAndValidity({emitEvent:Je.emitEvent})}setControl(pt,Je,en={}){let fi=this._adjustIndex(pt);fi<0&&(fi=0),this.controls[fi]&&this.controls[fi]._registerOnCollectionChange(()=>{}),this.controls.splice(fi,1),Je&&(this.controls.splice(fi,0,Je),this._registerControl(Je)),this.updateValueAndValidity({emitEvent:en.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(pt,Je={}){_r(this,!1,pt),pt.forEach((en,fi)=>{Pn(this,!1,fi),this.at(fi).setValue(en,{onlySelf:!0,emitEvent:Je.emitEvent})}),this.updateValueAndValidity(Je)}patchValue(pt,Je={}){null!=pt&&(pt.forEach((en,fi)=>{this.at(fi)&&this.at(fi).patchValue(en,{onlySelf:!0,emitEvent:Je.emitEvent})}),this.updateValueAndValidity(Je))}reset(pt=[],Je={}){this._forEachChild((en,fi)=>{en.reset(pt[fi],{onlySelf:!0,emitEvent:Je.emitEvent})}),this._updatePristine(Je),this._updateTouched(Je),this.updateValueAndValidity(Je)}getRawValue(){return this.controls.map(pt=>pt.getRawValue())}clear(pt={}){this.controls.length<1||(this._forEachChild(Je=>Je._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:pt.emitEvent}))}_adjustIndex(pt){return pt<0?pt+this.length:pt}_syncPendingControls(){let pt=this.controls.reduce((Je,en)=>!!en._syncPendingControls()||Je,!1);return pt&&this.updateValueAndValidity({onlySelf:!0}),pt}_forEachChild(pt){this.controls.forEach((Je,en)=>{pt(Je,en)})}_updateValue(){this.value=this.controls.filter(pt=>pt.enabled||this.disabled).map(pt=>pt.value)}_anyControls(pt){return this.controls.some(Je=>Je.enabled&&pt(Je))}_setUpControls(){this._forEachChild(pt=>this._registerControl(pt))}_allControlsDisabled(){for(const pt of this.controls)if(pt.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(pt){pt.setParent(this),pt._registerOnCollectionChange(this._onCollectionChange)}_find(pt){return this.at(pt)??null}}const ba=xu;function Su(bt){return!!bt&&(void 0!==bt.asyncValidators||void 0!==bt.validators||void 0!==bt.updateOn)}let gc=(()=>{class bt{constructor(){this.useNonNullable=!1}get nonNullable(){const Je=new bt;return Je.useNonNullable=!0,Je}group(Je,en=null){const fi=this._reduceControls(Je);let To={};return Su(en)?To=en:null!==en&&(To.validators=en.validator,To.asyncValidators=en.asyncValidator),new tr(fi,To)}record(Je,en=null){const fi=this._reduceControls(Je);return new Zt(fi,en)}control(Je,en,fi){let To={};return this.useNonNullable?(Su(en)?To=en:(To.validators=en,To.asyncValidators=fi),new Is(Je,{...To,nonNullable:!0})):new Is(Je,en,fi)}array(Je,en,fi){const To=Je.map(Ya=>this._createControl(Ya));return new xu(To,en,fi)}_reduceControls(Je){const en={};return Object.keys(Je).forEach(fi=>{en[fi]=this._createControl(Je[fi])}),en}_createControl(Je){return Je instanceof Is||Je instanceof Pr?Je:Array.isArray(Je)?this.control(Je[0],Je.length>1?Je[1]:null,Je.length>2?Je[2]:null):this.control(Je)}}return bt.\u0275fac=function(Je){return new(Je||bt)},bt.\u0275prov=r.Yz7({token:bt,factory:bt.\u0275fac,providedIn:"root"}),bt})(),Al=(()=>{class bt extends gc{group(Je,en=null){return super.group(Je,en)}control(Je,en,fi){return super.control(Je,en,fi)}array(Je,en,fi){return super.array(Je,en,fi)}}return bt.\u0275fac=function(){let pt;return function(en){return(pt||(pt=r.n5z(bt)))(en||bt)}}(),bt.\u0275prov=r.Yz7({token:bt,factory:bt.\u0275fac,providedIn:"root"}),bt})(),zs=(()=>{class bt{static withConfig(Je){return{ngModule:bt,providers:[{provide:Ge,useValue:Je.callSetDisabledState??Ot}]}}}return bt.\u0275fac=function(Je){return new(Je||bt)},bt.\u0275mod=r.oAB({type:bt}),bt.\u0275inj=r.cJS({imports:[Ru]}),bt})(),Vc=(()=>{class bt{static withConfig(Je){return{ngModule:bt,providers:[{provide:io,useValue:Je.warnOnNgModelWithFormControl??"always"},{provide:Ge,useValue:Je.callSetDisabledState??Ot}]}}}return bt.\u0275fac=function(Je){return new(Je||bt)},bt.\u0275mod=r.oAB({type:bt}),bt.\u0275inj=r.cJS({imports:[Ru]}),bt})()},5998:(E,C,s)=>{"use strict";s.d(C,{Dx:()=>ii,H7:()=>Pr,HJ:()=>Hi,b2:()=>Oi,q6:()=>Tt,se:()=>We});var r=s(88692),a=s(64537);class c extends r.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class u extends c{static makeCurrent(){(0,r.HT)(new u)}onAndCancel(dn,Ge,Ot){return dn.addEventListener(Ge,Ot,!1),()=>{dn.removeEventListener(Ge,Ot,!1)}}dispatchEvent(dn,Ge){dn.dispatchEvent(Ge)}remove(dn){dn.parentNode&&dn.parentNode.removeChild(dn)}createElement(dn,Ge){return(Ge=Ge||this.getDefaultDocument()).createElement(dn)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(dn){return dn.nodeType===Node.ELEMENT_NODE}isShadowRoot(dn){return dn instanceof DocumentFragment}getGlobalEventTarget(dn,Ge){return"window"===Ge?window:"document"===Ge?dn:"body"===Ge?dn.body:null}getBaseHref(dn){const Ge=function f(){return e=e||document.querySelector("base"),e?e.getAttribute("href"):null}();return null==Ge?null:function T(Zt){m=m||document.createElement("a"),m.setAttribute("href",Zt);const dn=m.pathname;return"/"===dn.charAt(0)?dn:`/${dn}`}(Ge)}resetBaseElement(){e=null}getUserAgent(){return window.navigator.userAgent}getCookie(dn){return(0,r.Mx)(document.cookie,dn)}}let m,e=null;const M=new a.OlP("TRANSITION_ID"),D=[{provide:a.ip1,useFactory:function w(Zt,dn,Ge){return()=>{Ge.get(a.CZH).donePromise.then(()=>{const Ot=(0,r.q)(),mn=dn.querySelectorAll(`style[ng-transition="${Zt}"]`);for(let wr=0;wr<mn.length;wr++)Ot.remove(mn[wr])})}},deps:[M,r.K0,a.zs3],multi:!0}];let W=(()=>{class Zt{build(){return new XMLHttpRequest}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)},Zt.\u0275prov=a.Yz7({token:Zt,factory:Zt.\u0275fac}),Zt})();const $=new a.OlP("EventManagerPlugins");let J=(()=>{class Zt{constructor(Ge,Ot){this._zone=Ot,this._eventNameToPlugin=new Map,Ge.forEach(mn=>{mn.manager=this}),this._plugins=Ge.slice().reverse()}addEventListener(Ge,Ot,mn){return this._findPluginFor(Ot).addEventListener(Ge,Ot,mn)}addGlobalEventListener(Ge,Ot,mn){return this._findPluginFor(Ot).addGlobalEventListener(Ge,Ot,mn)}getZone(){return this._zone}_findPluginFor(Ge){const Ot=this._eventNameToPlugin.get(Ge);if(Ot)return Ot;const mn=this._plugins;for(let wr=0;wr<mn.length;wr++){const Ti=mn[wr];if(Ti.supports(Ge))return this._eventNameToPlugin.set(Ge,Ti),Ti}throw new Error(`No event manager plugin found for event ${Ge}`)}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(a.LFG($),a.LFG(a.R0b))},Zt.\u0275prov=a.Yz7({token:Zt,factory:Zt.\u0275fac}),Zt})();class F{constructor(dn){this._doc=dn}addGlobalEventListener(dn,Ge,Ot){const mn=(0,r.q)().getGlobalEventTarget(this._doc,dn);if(!mn)throw new Error(`Unsupported event target ${mn} for event ${Ge}`);return this.addEventListener(mn,Ge,Ot)}}let X=(()=>{class Zt{constructor(){this.usageCount=new Map}addStyles(Ge){for(const Ot of Ge)1===this.changeUsageCount(Ot,1)&&this.onStyleAdded(Ot)}removeStyles(Ge){for(const Ot of Ge)0===this.changeUsageCount(Ot,-1)&&this.onStyleRemoved(Ot)}onStyleRemoved(Ge){}onStyleAdded(Ge){}getAllStyles(){return this.usageCount.keys()}changeUsageCount(Ge,Ot){const mn=this.usageCount;let wr=mn.get(Ge)??0;return wr+=Ot,wr>0?mn.set(Ge,wr):mn.delete(Ge),wr}ngOnDestroy(){for(const Ge of this.getAllStyles())this.onStyleRemoved(Ge);this.usageCount.clear()}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)},Zt.\u0275prov=a.Yz7({token:Zt,factory:Zt.\u0275fac}),Zt})(),de=(()=>{class Zt extends X{constructor(Ge){super(),this.doc=Ge,this.styleRef=new Map,this.hostNodes=new Set,this.resetHostNodes()}onStyleAdded(Ge){for(const Ot of this.hostNodes)this.addStyleToHost(Ot,Ge)}onStyleRemoved(Ge){const Ot=this.styleRef;Ot.get(Ge)?.forEach(wr=>wr.remove()),Ot.delete(Ge)}ngOnDestroy(){super.ngOnDestroy(),this.styleRef.clear(),this.resetHostNodes()}addHost(Ge){this.hostNodes.add(Ge);for(const Ot of this.getAllStyles())this.addStyleToHost(Ge,Ot)}removeHost(Ge){this.hostNodes.delete(Ge)}addStyleToHost(Ge,Ot){const mn=this.doc.createElement("style");mn.textContent=Ot,Ge.appendChild(mn);const wr=this.styleRef.get(Ot);wr?wr.push(mn):this.styleRef.set(Ot,[mn])}resetHostNodes(){const Ge=this.hostNodes;Ge.clear(),Ge.add(this.doc.head)}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(a.LFG(r.K0))},Zt.\u0275prov=a.Yz7({token:Zt,factory:Zt.\u0275fac}),Zt})();const V={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},ce=/%COMP%/g,Et=new a.OlP("RemoveStylesOnCompDestory",{providedIn:"root",factory:()=>!1});function qe(Zt,dn){return dn.flat(100).map(Ge=>Ge.replace(ce,Zt))}function He(Zt){return dn=>{if("__ngUnwrap__"===dn)return Zt;!1===Zt(dn)&&(dn.preventDefault(),dn.returnValue=!1)}}let We=(()=>{class Zt{constructor(Ge,Ot,mn,wr){this.eventManager=Ge,this.sharedStylesHost=Ot,this.appId=mn,this.removeStylesOnCompDestory=wr,this.rendererByCompId=new Map,this.defaultRenderer=new Le(Ge)}createRenderer(Ge,Ot){if(!Ge||!Ot)return this.defaultRenderer;const mn=this.getOrCreateRenderer(Ge,Ot);return mn instanceof Rn?mn.applyToHost(Ge):mn instanceof pn&&mn.applyStyles(),mn}getOrCreateRenderer(Ge,Ot){const mn=this.rendererByCompId;let wr=mn.get(Ot.id);if(!wr){const Ti=this.eventManager,Ci=this.sharedStylesHost,Ai=this.removeStylesOnCompDestory;switch(Ot.encapsulation){case a.ifc.Emulated:wr=new Rn(Ti,Ci,Ot,this.appId,Ai);break;case a.ifc.ShadowDom:return new cn(Ti,Ci,Ge,Ot);default:wr=new pn(Ti,Ci,Ot,Ai)}wr.onDestroy=()=>mn.delete(Ot.id),mn.set(Ot.id,wr)}return wr}ngOnDestroy(){this.rendererByCompId.clear()}begin(){}end(){}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(a.LFG(J),a.LFG(de),a.LFG(a.AFp),a.LFG(Et))},Zt.\u0275prov=a.Yz7({token:Zt,factory:Zt.\u0275fac}),Zt})();class Le{constructor(dn){this.eventManager=dn,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(dn,Ge){return Ge?document.createElementNS(V[Ge]||Ge,dn):document.createElement(dn)}createComment(dn){return document.createComment(dn)}createText(dn){return document.createTextNode(dn)}appendChild(dn,Ge){(Xt(dn)?dn.content:dn).appendChild(Ge)}insertBefore(dn,Ge,Ot){dn&&(Xt(dn)?dn.content:dn).insertBefore(Ge,Ot)}removeChild(dn,Ge){dn&&dn.removeChild(Ge)}selectRootElement(dn,Ge){let Ot="string"==typeof dn?document.querySelector(dn):dn;if(!Ot)throw new Error(`The selector "${dn}" did not match any elements`);return Ge||(Ot.textContent=""),Ot}parentNode(dn){return dn.parentNode}nextSibling(dn){return dn.nextSibling}setAttribute(dn,Ge,Ot,mn){if(mn){Ge=mn+":"+Ge;const wr=V[mn];wr?dn.setAttributeNS(wr,Ge,Ot):dn.setAttribute(Ge,Ot)}else dn.setAttribute(Ge,Ot)}removeAttribute(dn,Ge,Ot){if(Ot){const mn=V[Ot];mn?dn.removeAttributeNS(mn,Ge):dn.removeAttribute(`${Ot}:${Ge}`)}else dn.removeAttribute(Ge)}addClass(dn,Ge){dn.classList.add(Ge)}removeClass(dn,Ge){dn.classList.remove(Ge)}setStyle(dn,Ge,Ot,mn){mn&(a.JOm.DashCase|a.JOm.Important)?dn.style.setProperty(Ge,Ot,mn&a.JOm.Important?"important":""):dn.style[Ge]=Ot}removeStyle(dn,Ge,Ot){Ot&a.JOm.DashCase?dn.style.removeProperty(Ge):dn.style[Ge]=""}setProperty(dn,Ge,Ot){dn[Ge]=Ot}setValue(dn,Ge){dn.nodeValue=Ge}listen(dn,Ge,Ot){return"string"==typeof dn?this.eventManager.addGlobalEventListener(dn,Ge,He(Ot)):this.eventManager.addEventListener(dn,Ge,He(Ot))}}function Xt(Zt){return"TEMPLATE"===Zt.tagName&&void 0!==Zt.content}class cn extends Le{constructor(dn,Ge,Ot,mn){super(dn),this.sharedStylesHost=Ge,this.hostEl=Ot,this.shadowRoot=Ot.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const wr=qe(mn.id,mn.styles);for(const Ti of wr){const Ci=document.createElement("style");Ci.textContent=Ti,this.shadowRoot.appendChild(Ci)}}nodeOrShadowRoot(dn){return dn===this.hostEl?this.shadowRoot:dn}appendChild(dn,Ge){return super.appendChild(this.nodeOrShadowRoot(dn),Ge)}insertBefore(dn,Ge,Ot){return super.insertBefore(this.nodeOrShadowRoot(dn),Ge,Ot)}removeChild(dn,Ge){return super.removeChild(this.nodeOrShadowRoot(dn),Ge)}parentNode(dn){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(dn)))}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}}class pn extends Le{constructor(dn,Ge,Ot,mn,wr=Ot.id){super(dn),this.sharedStylesHost=Ge,this.removeStylesOnCompDestory=mn,this.rendererUsageCount=0,this.styles=qe(wr,Ot.styles)}applyStyles(){this.sharedStylesHost.addStyles(this.styles),this.rendererUsageCount++}destroy(){this.removeStylesOnCompDestory&&(this.sharedStylesHost.removeStyles(this.styles),this.rendererUsageCount--,0===this.rendererUsageCount&&this.onDestroy?.())}}class Rn extends pn{constructor(dn,Ge,Ot,mn,wr){const Ti=mn+"-"+Ot.id;super(dn,Ge,Ot,wr,Ti),this.contentAttr=function ot(Zt){return"_ngcontent-%COMP%".replace(ce,Zt)}(Ti),this.hostAttr=function ct(Zt){return"_nghost-%COMP%".replace(ce,Zt)}(Ti)}applyToHost(dn){this.applyStyles(),this.setAttribute(dn,this.hostAttr,"")}createElement(dn,Ge){const Ot=super.createElement(dn,Ge);return super.setAttribute(Ot,this.contentAttr,""),Ot}}let At=(()=>{class Zt extends F{constructor(Ge){super(Ge)}supports(Ge){return!0}addEventListener(Ge,Ot,mn){return Ge.addEventListener(Ot,mn,!1),()=>this.removeEventListener(Ge,Ot,mn)}removeEventListener(Ge,Ot,mn){return Ge.removeEventListener(Ot,mn)}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(a.LFG(r.K0))},Zt.\u0275prov=a.Yz7({token:Zt,factory:Zt.\u0275fac}),Zt})();const qt=["alt","control","meta","shift"],sn={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},fn={alt:Zt=>Zt.altKey,control:Zt=>Zt.ctrlKey,meta:Zt=>Zt.metaKey,shift:Zt=>Zt.shiftKey};let xn=(()=>{class Zt extends F{constructor(Ge){super(Ge)}supports(Ge){return null!=Zt.parseEventName(Ge)}addEventListener(Ge,Ot,mn){const wr=Zt.parseEventName(Ot),Ti=Zt.eventCallback(wr.fullKey,mn,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,r.q)().onAndCancel(Ge,wr.domEventName,Ti))}static parseEventName(Ge){const Ot=Ge.toLowerCase().split("."),mn=Ot.shift();if(0===Ot.length||"keydown"!==mn&&"keyup"!==mn)return null;const wr=Zt._normalizeKey(Ot.pop());let Ti="",Ci=Ot.indexOf("code");if(Ci>-1&&(Ot.splice(Ci,1),Ti="code."),qt.forEach(Ko=>{const _s=Ot.indexOf(Ko);_s>-1&&(Ot.splice(_s,1),Ti+=Ko+".")}),Ti+=wr,0!=Ot.length||0===wr.length)return null;const Ai={};return Ai.domEventName=mn,Ai.fullKey=Ti,Ai}static matchEventFullKeyCode(Ge,Ot){let mn=sn[Ge.key]||Ge.key,wr="";return Ot.indexOf("code.")>-1&&(mn=Ge.code,wr="code."),!(null==mn||!mn)&&(mn=mn.toLowerCase()," "===mn?mn="space":"."===mn&&(mn="dot"),qt.forEach(Ti=>{Ti!==mn&&(0,fn[Ti])(Ge)&&(wr+=Ti+".")}),wr+=mn,wr===Ot)}static eventCallback(Ge,Ot,mn){return wr=>{Zt.matchEventFullKeyCode(wr,Ge)&&mn.runGuarded(()=>Ot(wr))}}static _normalizeKey(Ge){return"esc"===Ge?"escape":Ge}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(a.LFG(r.K0))},Zt.\u0275prov=a.Yz7({token:Zt,factory:Zt.\u0275fac}),Zt})();const Tt=(0,a.eFA)(a._c5,"browser",[{provide:a.Lbi,useValue:r.bD},{provide:a.g9A,useValue:function jr(){u.makeCurrent()},multi:!0},{provide:r.K0,useFactory:function ht(){return(0,a.RDi)(document),document},deps:[]}]),wn=new a.OlP(""),jn=[{provide:a.rWj,useClass:class U{addToWindow(dn){a.dqk.getAngularTestability=(Ot,mn=!0)=>{const wr=dn.findTestabilityInTree(Ot,mn);if(null==wr)throw new Error("Could not find testability for element.");return wr},a.dqk.getAllAngularTestabilities=()=>dn.getAllTestabilities(),a.dqk.getAllAngularRootElements=()=>dn.getAllRootElements(),a.dqk.frameworkStabilizers||(a.dqk.frameworkStabilizers=[]),a.dqk.frameworkStabilizers.push(Ot=>{const mn=a.dqk.getAllAngularTestabilities();let wr=mn.length,Ti=!1;const Ci=function(Ai){Ti=Ti||Ai,wr--,0==wr&&Ot(Ti)};mn.forEach(function(Ai){Ai.whenStable(Ci)})})}findTestabilityInTree(dn,Ge,Ot){return null==Ge?null:dn.getTestability(Ge)??(Ot?(0,r.q)().isShadowRoot(Ge)?this.findTestabilityInTree(dn,Ge.host,!0):this.findTestabilityInTree(dn,Ge.parentElement,!0):null)}},deps:[]},{provide:a.lri,useClass:a.dDg,deps:[a.R0b,a.eoX,a.rWj]},{provide:a.dDg,useClass:a.dDg,deps:[a.R0b,a.eoX,a.rWj]}],hr=[{provide:a.zSh,useValue:"root"},{provide:a.qLn,useFactory:function br(){return new a.qLn},deps:[]},{provide:$,useClass:At,multi:!0,deps:[r.K0,a.R0b,a.Lbi]},{provide:$,useClass:xn,multi:!0,deps:[r.K0]},{provide:We,useClass:We,deps:[J,de,a.AFp,Et]},{provide:a.FYo,useExisting:We},{provide:X,useExisting:de},{provide:de,useClass:de,deps:[r.K0]},{provide:J,useClass:J,deps:[$,a.R0b]},{provide:r.JF,useClass:W,deps:[]},[]];let Oi=(()=>{class Zt{constructor(Ge){}static withServerTransition(Ge){return{ngModule:Zt,providers:[{provide:a.AFp,useValue:Ge.appId},{provide:M,useExisting:a.AFp},D]}}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(a.LFG(wn,12))},Zt.\u0275mod=a.oAB({type:Zt}),Zt.\u0275inj=a.cJS({providers:[...hr,...jn],imports:[r.ez,a.hGG]}),Zt})(),ii=(()=>{class Zt{constructor(Ge){this._doc=Ge}getTitle(){return this._doc.title}setTitle(Ge){this._doc.title=Ge||""}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(a.LFG(r.K0))},Zt.\u0275prov=a.Yz7({token:Zt,factory:function(Ge){let Ot=null;return Ot=Ge?new Ge:function Ei(){return new ii((0,a.LFG)(r.K0))}(),Ot},providedIn:"root"}),Zt})();const pr=typeof window<"u"&&window||{};class Eo{constructor(dn,Ge){this.msPerTick=dn,this.numTicks=Ge}}class po{constructor(dn){this.appRef=dn.injector.get(a.z2F)}timeChangeDetection(dn){const Ge=dn&&dn.record,Ot="Change Detection",mn=null!=pr.console.profile;Ge&&mn&&pr.console.profile(Ot);const wr=$i();let Ti=0;for(;Ti<5||$i()-wr<500;)this.appRef.tick(),Ti++;const Ci=$i();Ge&&mn&&pr.console.profileEnd(Ot);const Ai=(Ci-wr)/Ti;return pr.console.log(`ran ${Ti} change detection cycles`),pr.console.log(`${Ai.toFixed(2)} ms per check`),new Eo(Ai,Ti)}}function $i(){return pr.performance&&pr.performance.now?pr.performance.now():(new Date).getTime()}const qr="profiler";function Hi(Zt){return function mr(Zt,dn){(typeof COMPILED>"u"||!COMPILED)&&((a.dqk.ng=a.dqk.ng||{})[Zt]=dn)}(qr,new po(Zt)),Zt}let Pr=(()=>{class Zt{}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)},Zt.\u0275prov=a.Yz7({token:Zt,factory:function(Ge){let Ot=null;return Ot=Ge?new(Ge||Zt):a.LFG(Zn),Ot},providedIn:"root"}),Zt})(),Zn=(()=>{class Zt extends Pr{constructor(Ge){super(),this._doc=Ge}sanitize(Ge,Ot){if(null==Ot)return null;switch(Ge){case a.q3G.NONE:return Ot;case a.q3G.HTML:return(0,a.qzn)(Ot,"HTML")?(0,a.z3N)(Ot):(0,a.EiD)(this._doc,String(Ot)).toString();case a.q3G.STYLE:return(0,a.qzn)(Ot,"Style")?(0,a.z3N)(Ot):Ot;case a.q3G.SCRIPT:if((0,a.qzn)(Ot,"Script"))return(0,a.z3N)(Ot);throw new Error("unsafe value used in a script context");case a.q3G.URL:return(0,a.qzn)(Ot,"URL")?(0,a.z3N)(Ot):(0,a.mCW)(String(Ot));case a.q3G.RESOURCE_URL:if((0,a.qzn)(Ot,"ResourceURL"))return(0,a.z3N)(Ot);throw new Error(`unsafe value used in a resource URL context (see ${a.JZr})`);default:throw new Error(`Unexpected SecurityContext ${Ge} (see ${a.JZr})`)}}bypassSecurityTrustHtml(Ge){return(0,a.JVY)(Ge)}bypassSecurityTrustStyle(Ge){return(0,a.L6k)(Ge)}bypassSecurityTrustScript(Ge){return(0,a.eBb)(Ge)}bypassSecurityTrustUrl(Ge){return(0,a.LAX)(Ge)}bypassSecurityTrustResourceUrl(Ge){return(0,a.pB0)(Ge)}}return Zt.\u0275fac=function(Ge){return new(Ge||Zt)(a.LFG(r.K0))},Zt.\u0275prov=a.Yz7({token:Zt,factory:function(Ge){let Ot=null;return Ot=Ge?new Ge:function tr(Zt){return new Zn(Zt.get(r.K0))}(a.LFG(a.zs3)),Ot},providedIn:"root"}),Zt})()},54247:(E,C,s)=>{"use strict";s.d(C,{gz:()=>ie,m2:()=>jo,OD:()=>ts,wm:()=>wu,F0:()=>rs,rH:()=>Ps,Od:()=>Ul,Bz:()=>Bf,lC:()=>yu});var r=s(64537),a=s(76666),c=s(25917),u=s(26215),e=s(13410),f=s(9112),m=s(6481),T=s(70882),M=s(59193);function w(Se){return new T.y(Ne=>{let _e;try{_e=Se()}catch(Mt){return void Ne.error(Mt)}return(_e?(0,a.D)(_e):(0,M.c)()).subscribe(Ne)})}var D=s(34022),U=s(40205),W=s(52441),$=s(79765),J=s(88692),F=s(88002),X=s(43190),de=s(15257),V=s(39761),ce=s(45435),se=s(19773),fe=s(28049),Te=s(94612),$e=s(68307),ge=s(5304),Et=s(42145),ot=s(12627),ct=s(77393);class He{constructor(Ne,_e){this.predicate=Ne,this.inclusive=_e}call(Ne,_e){return _e.subscribe(new We(Ne,this.predicate,this.inclusive))}}class We extends ct.L{constructor(Ne,_e,Ye){super(Ne),this.predicate=_e,this.inclusive=Ye,this.index=0}_next(Ne){const _e=this.destination;let Ye;try{Ye=this.predicate(Ne,this.index++)}catch(Mt){return void _e.error(Mt)}this.nextOrComplete(Ne,Ye)}nextOrComplete(Ne,_e){const Ye=this.destination;Boolean(_e)?Ye.next(Ne):(this.inclusive&&Ye.next(Ne),Ye.complete())}}var Le=s(95242),Pt=s(548),it=s(96736),Xt=s(68939),cn=s(51307),pn=s(63282),Rn=s(5998);const At="primary",qt=Symbol("RouteTitle");class sn{constructor(Ne){this.params=Ne||{}}has(Ne){return Object.prototype.hasOwnProperty.call(this.params,Ne)}get(Ne){if(this.has(Ne)){const _e=this.params[Ne];return Array.isArray(_e)?_e[0]:_e}return null}getAll(Ne){if(this.has(Ne)){const _e=this.params[Ne];return Array.isArray(_e)?_e:[_e]}return[]}get keys(){return Object.keys(this.params)}}function fn(Se){return new sn(Se)}function xn(Se,Ne,_e){const Ye=_e.path.split("/");if(Ye.length>Se.length||"full"===_e.pathMatch&&(Ne.hasChildren()||Ye.length<Se.length))return null;const Mt={};for(let un=0;un<Ye.length;un++){const Mn=Ye[un],ni=Se[un];if(Mn.startsWith(":"))Mt[Mn.substring(1)]=ni;else if(Mn!==ni.path)return null}return{consumed:Se.slice(0,Ye.length),posParams:Mt}}function Or(Se,Ne){const _e=Se?Object.keys(Se):void 0,Ye=Ne?Object.keys(Ne):void 0;if(!_e||!Ye||_e.length!=Ye.length)return!1;let Mt;for(let un=0;un<_e.length;un++)if(Mt=_e[un],!Lr(Se[Mt],Ne[Mt]))return!1;return!0}function Lr(Se,Ne){if(Array.isArray(Se)&&Array.isArray(Ne)){if(Se.length!==Ne.length)return!1;const _e=[...Se].sort(),Ye=[...Ne].sort();return _e.every((Mt,un)=>Ye[un]===Mt)}return Se===Ne}function ir(Se){return Array.prototype.concat.apply([],Se)}function Qr(Se){return Se.length>0?Se[Se.length-1]:null}function br(Se,Ne){for(const _e in Se)Se.hasOwnProperty(_e)&&Ne(Se[_e],_e)}function ht(Se){return(0,r.CqO)(Se)?Se:(0,r.QGY)(Se)?(0,a.D)(Promise.resolve(Se)):(0,c.of)(Se)}const Wt=!1,Tt={exact:function Oi(Se,Ne,_e){if(!po(Se.segments,Ne.segments)||!Ei(Se.segments,Ne.segments,_e)||Se.numberOfChildren!==Ne.numberOfChildren)return!1;for(const Ye in Ne.children)if(!Se.children[Ye]||!Oi(Se.children[Ye],Ne.children[Ye],_e))return!1;return!0},subset:so},wn={exact:function hr(Se,Ne){return Or(Se,Ne)},subset:function Wi(Se,Ne){return Object.keys(Ne).length<=Object.keys(Se).length&&Object.keys(Ne).every(_e=>Lr(Se[_e],Ne[_e]))},ignored:()=>!0};function jn(Se,Ne,_e){return Tt[_e.paths](Se.root,Ne.root,_e.matrixParams)&&wn[_e.queryParams](Se.queryParams,Ne.queryParams)&&!("exact"===_e.fragment&&Se.fragment!==Ne.fragment)}function so(Se,Ne,_e){return kr(Se,Ne,Ne.segments,_e)}function kr(Se,Ne,_e,Ye){if(Se.segments.length>_e.length){const Mt=Se.segments.slice(0,_e.length);return!(!po(Mt,_e)||Ne.hasChildren()||!Ei(Mt,_e,Ye))}if(Se.segments.length===_e.length){if(!po(Se.segments,_e)||!Ei(Se.segments,_e,Ye))return!1;for(const Mt in Ne.children)if(!Se.children[Mt]||!so(Se.children[Mt],Ne.children[Mt],Ye))return!1;return!0}{const Mt=_e.slice(0,Se.segments.length),un=_e.slice(Se.segments.length);return!!(po(Se.segments,Mt)&&Ei(Se.segments,Mt,Ye)&&Se.children[At])&&kr(Se.children[At],Ne,un,Ye)}}function Ei(Se,Ne,_e){return Ne.every((Ye,Mt)=>wn[_e](Se[Mt].parameters,Ye.parameters))}class ii{constructor(Ne=new mr([],{}),_e={},Ye=null){this.root=Ne,this.queryParams=_e,this.fragment=Ye}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=fn(this.queryParams)),this._queryParamMap}toString(){return Dn.serialize(this)}}class mr{constructor(Ne,_e){this.segments=Ne,this.children=_e,this.parent=null,br(_e,(Ye,Mt)=>Ye.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return Hn(this)}}class pr{constructor(Ne,_e){this.path=Ne,this.parameters=_e}get parameterMap(){return this._parameterMap||(this._parameterMap=fn(this.parameters)),this._parameterMap}toString(){return Rt(this)}}function po(Se,Ne){return Se.length===Ne.length&&Se.every((_e,Ye)=>_e.path===Ne[Ye].path)}let qr=(()=>{class Se{}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:function(){return new Hi},providedIn:"root"}),Se})();class Hi{parse(Ne){const _e=new nr(Ne);return new ii(_e.parseRootSegment(),_e.parseQueryParams(),_e.parseFragment())}serialize(Ne){const _e=`/${jt(Ne.root,!0)}`,Ye=function qn(Se){const Ne=Object.keys(Se).map(_e=>{const Ye=Se[_e];return Array.isArray(Ye)?Ye.map(Mt=>`${Ie(_e)}=${Ie(Mt)}`).join("&"):`${Ie(_e)}=${Ie(Ye)}`}).filter(_e=>!!_e);return Ne.length?`?${Ne.join("&")}`:""}(Ne.queryParams);return`${_e}${Ye}${"string"==typeof Ne.fragment?`#${function et(Se){return encodeURI(Se)}(Ne.fragment)}`:""}`}}const Dn=new Hi;function Hn(Se){return Se.segments.map(Ne=>Rt(Ne)).join("/")}function jt(Se,Ne){if(!Se.hasChildren())return Hn(Se);if(Ne){const _e=Se.children[At]?jt(Se.children[At],!1):"",Ye=[];return br(Se.children,(Mt,un)=>{un!==At&&Ye.push(`${un}:${jt(Mt,!1)}`)}),Ye.length>0?`${_e}(${Ye.join("//")})`:_e}{const _e=function $i(Se,Ne){let _e=[];return br(Se.children,(Ye,Mt)=>{Mt===At&&(_e=_e.concat(Ne(Ye,Mt)))}),br(Se.children,(Ye,Mt)=>{Mt!==At&&(_e=_e.concat(Ne(Ye,Mt)))}),_e}(Se,(Ye,Mt)=>Mt===At?[jt(Se.children[At],!1)]:[`${Mt}:${jt(Ye,!1)}`]);return 1===Object.keys(Se.children).length&&null!=Se.children[At]?`${Hn(Se)}/${_e[0]}`:`${Hn(Se)}/(${_e.join("//")})`}}function Fe(Se){return encodeURIComponent(Se).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Ie(Se){return Fe(Se).replace(/%3B/gi,";")}function ze(Se){return Fe(Se).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function an(Se){return decodeURIComponent(Se)}function lt(Se){return an(Se.replace(/\+/g,"%20"))}function Rt(Se){return`${ze(Se.path)}${function Pe(Se){return Object.keys(Se).map(Ne=>`;${ze(Ne)}=${ze(Se[Ne])}`).join("")}(Se.parameters)}`}const gr=/^[^\/()?;=#]+/;function Pn(Se){const Ne=Se.match(gr);return Ne?Ne[0]:""}const _r=/^[^=?&#]+/,tr=/^[^&#]+/;class nr{constructor(Ne){this.url=Ne,this.remaining=Ne}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new mr([],{}):new mr([],this.parseChildren())}parseQueryParams(){const Ne={};if(this.consumeOptional("?"))do{this.parseQueryParam(Ne)}while(this.consumeOptional("&"));return Ne}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const Ne=[];for(this.peekStartsWith("(")||Ne.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),Ne.push(this.parseSegment());let _e={};this.peekStartsWith("/(")&&(this.capture("/"),_e=this.parseParens(!0));let Ye={};return this.peekStartsWith("(")&&(Ye=this.parseParens(!1)),(Ne.length>0||Object.keys(_e).length>0)&&(Ye[At]=new mr(Ne,_e)),Ye}parseSegment(){const Ne=Pn(this.remaining);if(""===Ne&&this.peekStartsWith(";"))throw new r.vHH(4009,Wt);return this.capture(Ne),new pr(an(Ne),this.parseMatrixParams())}parseMatrixParams(){const Ne={};for(;this.consumeOptional(";");)this.parseParam(Ne);return Ne}parseParam(Ne){const _e=Pn(this.remaining);if(!_e)return;this.capture(_e);let Ye="";if(this.consumeOptional("=")){const Mt=Pn(this.remaining);Mt&&(Ye=Mt,this.capture(Ye))}Ne[an(_e)]=an(Ye)}parseQueryParam(Ne){const _e=function Pr(Se){const Ne=Se.match(_r);return Ne?Ne[0]:""}(this.remaining);if(!_e)return;this.capture(_e);let Ye="";if(this.consumeOptional("=")){const Mn=function Zn(Se){const Ne=Se.match(tr);return Ne?Ne[0]:""}(this.remaining);Mn&&(Ye=Mn,this.capture(Ye))}const Mt=lt(_e),un=lt(Ye);if(Ne.hasOwnProperty(Mt)){let Mn=Ne[Mt];Array.isArray(Mn)||(Mn=[Mn],Ne[Mt]=Mn),Mn.push(un)}else Ne[Mt]=un}parseParens(Ne){const _e={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const Ye=Pn(this.remaining),Mt=this.remaining[Ye.length];if("/"!==Mt&&")"!==Mt&&";"!==Mt)throw new r.vHH(4010,Wt);let un;Ye.indexOf(":")>-1?(un=Ye.slice(0,Ye.indexOf(":")),this.capture(un),this.capture(":")):Ne&&(un=At);const Mn=this.parseChildren();_e[un]=1===Object.keys(Mn).length?Mn[At]:new mr([],Mn),this.consumeOptional("//")}return _e}peekStartsWith(Ne){return this.remaining.startsWith(Ne)}consumeOptional(Ne){return!!this.peekStartsWith(Ne)&&(this.remaining=this.remaining.substring(Ne.length),!0)}capture(Ne){if(!this.consumeOptional(Ne))throw new r.vHH(4011,Wt)}}function Zt(Se){return Se.segments.length>0?new mr([],{[At]:Se}):Se}function dn(Se){const Ne={};for(const Ye of Object.keys(Se.children)){const un=dn(Se.children[Ye]);(un.segments.length>0||un.hasChildren())&&(Ne[Ye]=un)}return function Ge(Se){if(1===Se.numberOfChildren&&Se.children[At]){const Ne=Se.children[At];return new mr(Se.segments.concat(Ne.segments),Ne.children)}return Se}(new mr(Se.segments,Ne))}function Ot(Se){return Se instanceof ii}const mn=!1;function Ai(Se,Ne,_e,Ye,Mt){if(0===_e.length)return dr(Ne.root,Ne.root,Ne.root,Ye,Mt);const un=function Vr(Se){if("string"==typeof Se[0]&&1===Se.length&&"/"===Se[0])return new ti(!0,0,Se);let Ne=0,_e=!1;const Ye=Se.reduce((Mt,un,Mn)=>{if("object"==typeof un&&null!=un){if(un.outlets){const ni={};return br(un.outlets,(zi,Wo)=>{ni[Wo]="string"==typeof zi?zi.split("/"):zi}),[...Mt,{outlets:ni}]}if(un.segmentPath)return[...Mt,un.segmentPath]}return"string"!=typeof un?[...Mt,un]:0===Mn?(un.split("/").forEach((ni,zi)=>{0==zi&&"."===ni||(0==zi&&""===ni?_e=!0:".."===ni?Ne++:""!=ni&&Mt.push(ni))}),Mt):[...Mt,un]},[]);return new ti(_e,Ne,Ye)}(_e);return un.toRoot()?dr(Ne.root,Ne.root,new mr([],{}),Ye,Mt):function Mn(zi){const Wo=function Vi(Se,Ne,_e,Ye){if(Se.isAbsolute)return new wi(Ne.root,!0,0);if(-1===Ye)return new wi(_e,_e===Ne.root,0);return function Po(Se,Ne,_e){let Ye=Se,Mt=Ne,un=_e;for(;un>Mt;){if(un-=Mt,Ye=Ye.parent,!Ye)throw new r.vHH(4005,mn&&"Invalid number of '../'");Mt=Ye.segments.length}return new wi(Ye,!1,Mt-un)}(_e,Ye+(Ko(Se.commands[0])?0:1),Se.numberOfDoubleDots)}(un,Ne,Se.snapshot?._urlSegment,zi),Qo=Wo.processChildren?ro(Wo.segmentGroup,Wo.index,un.commands):Ir(Wo.segmentGroup,Wo.index,un.commands);return dr(Ne.root,Wo.segmentGroup,Qo,Ye,Mt)}(Se.snapshot?._lastPathIndex)}function Ko(Se){return"object"==typeof Se&&null!=Se&&!Se.outlets&&!Se.segmentPath}function _s(Se){return"object"==typeof Se&&null!=Se&&Se.outlets}function dr(Se,Ne,_e,Ye,Mt){let Mn,un={};Ye&&br(Ye,(zi,Wo)=>{un[Wo]=Array.isArray(zi)?zi.map(Qo=>`${Qo}`):`${zi}`}),Mn=Se===Ne?_e:Ni(Se,Ne,_e);const ni=Zt(dn(Mn));return new ii(ni,un,Mt)}function Ni(Se,Ne,_e){const Ye={};return br(Se.children,(Mt,un)=>{Ye[un]=Mt===Ne?_e:Ni(Mt,Ne,_e)}),new mr(Se.segments,Ye)}class ti{constructor(Ne,_e,Ye){if(this.isAbsolute=Ne,this.numberOfDoubleDots=_e,this.commands=Ye,Ne&&Ye.length>0&&Ko(Ye[0]))throw new r.vHH(4003,mn&&"Root segment cannot have matrix parameters");const Mt=Ye.find(_s);if(Mt&&Mt!==Qr(Ye))throw new r.vHH(4004,mn&&"{outlets:{}} has to be the last command")}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class wi{constructor(Ne,_e,Ye){this.segmentGroup=Ne,this.processChildren=_e,this.index=Ye}}function Ir(Se,Ne,_e){if(Se||(Se=new mr([],{})),0===Se.segments.length&&Se.hasChildren())return ro(Se,Ne,_e);const Ye=function Vt(Se,Ne,_e){let Ye=0,Mt=Ne;const un={match:!1,pathIndex:0,commandIndex:0};for(;Mt<Se.segments.length;){if(Ye>=_e.length)return un;const Mn=Se.segments[Mt],ni=_e[Ye];if(_s(ni))break;const zi=`${ni}`,Wo=Ye<_e.length-1?_e[Ye+1]:null;if(Mt>0&&void 0===zi)break;if(zi&&Wo&&"object"==typeof Wo&&void 0===Wo.outlets){if(!_o(zi,Wo,Mn))return un;Ye+=2}else{if(!_o(zi,{},Mn))return un;Ye++}Mt++}return{match:!0,pathIndex:Mt,commandIndex:Ye}}(Se,Ne,_e),Mt=_e.slice(Ye.commandIndex);if(Ye.match&&Ye.pathIndex<Se.segments.length){const un=new mr(Se.segments.slice(0,Ye.pathIndex),{});return un.children[At]=new mr(Se.segments.slice(Ye.pathIndex),Se.children),ro(un,0,Mt)}return Ye.match&&0===Mt.length?new mr(Se.segments,{}):Ye.match&&!Se.hasChildren()?bn(Se,Ne,_e):Ye.match?ro(Se,0,Mt):bn(Se,Ne,_e)}function ro(Se,Ne,_e){if(0===_e.length)return new mr(Se.segments,{});{const Ye=function ko(Se){return _s(Se[0])?Se[0].outlets:{[At]:Se}}(_e),Mt={};if(!Ye[At]&&Se.children[At]&&1===Se.numberOfChildren&&0===Se.children[At].segments.length){const un=ro(Se.children[At],Ne,_e);return new mr(Se.segments,un.children)}return br(Ye,(un,Mn)=>{"string"==typeof un&&(un=[un]),null!==un&&(Mt[Mn]=Ir(Se.children[Mn],Ne,un))}),br(Se.children,(un,Mn)=>{void 0===Ye[Mn]&&(Mt[Mn]=un)}),new mr(Se.segments,Mt)}}function bn(Se,Ne,_e){const Ye=Se.segments.slice(0,Ne);let Mt=0;for(;Mt<_e.length;){const un=_e[Mt];if(_s(un)){const zi=Bn(un.outlets);return new mr(Ye,zi)}if(0===Mt&&Ko(_e[0])){Ye.push(new pr(Se.segments[Ne].path,ci(_e[0]))),Mt++;continue}const Mn=_s(un)?un.outlets[At]:`${un}`,ni=Mt<_e.length-1?_e[Mt+1]:null;Mn&&ni&&Ko(ni)?(Ye.push(new pr(Mn,ci(ni))),Mt+=2):(Ye.push(new pr(Mn,{})),Mt++)}return new mr(Ye,{})}function Bn(Se){const Ne={};return br(Se,(_e,Ye)=>{"string"==typeof _e&&(_e=[_e]),null!==_e&&(Ne[Ye]=bn(new mr([],{}),0,_e))}),Ne}function ci(Se){const Ne={};return br(Se,(_e,Ye)=>Ne[Ye]=`${_e}`),Ne}function _o(Se,Ne,_e){return Se==_e.path&&Or(Ne,_e.parameters)}const go="imperative";class es{constructor(Ne,_e){this.id=Ne,this.url=_e}}class ts extends es{constructor(Ne,_e,Ye="imperative",Mt=null){super(Ne,_e),this.type=0,this.navigationTrigger=Ye,this.restoredState=Mt}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class jo extends es{constructor(Ne,_e,Ye){super(Ne,_e),this.urlAfterRedirects=Ye,this.type=1}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class ss extends es{constructor(Ne,_e,Ye,Mt){super(Ne,_e),this.reason=Ye,this.code=Mt,this.type=2}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class gs extends es{constructor(Ne,_e,Ye,Mt){super(Ne,_e),this.reason=Ye,this.code=Mt,this.type=16}}class Is extends es{constructor(Ne,_e,Ye,Mt){super(Ne,_e),this.error=Ye,this.target=Mt,this.type=3}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class la extends es{constructor(Ne,_e,Ye,Mt){super(Ne,_e),this.urlAfterRedirects=Ye,this.state=Mt,this.type=4}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Ro extends es{constructor(Ne,_e,Ye,Mt){super(Ne,_e),this.urlAfterRedirects=Ye,this.state=Mt,this.type=7}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class jl extends es{constructor(Ne,_e,Ye,Mt,un){super(Ne,_e),this.urlAfterRedirects=Ye,this.state=Mt,this.shouldActivate=un,this.type=8}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class gl extends es{constructor(Ne,_e,Ye,Mt){super(Ne,_e),this.urlAfterRedirects=Ye,this.state=Mt,this.type=5}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class qa extends es{constructor(Ne,_e,Ye,Mt){super(Ne,_e),this.urlAfterRedirects=Ye,this.state=Mt,this.type=6}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class da{constructor(Ne){this.route=Ne,this.type=9}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class $a{constructor(Ne){this.route=Ne,this.type=10}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Rl{constructor(Ne){this.snapshot=Ne,this.type=11}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Ji{constructor(Ne){this.snapshot=Ne,this.type=12}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Ha{constructor(Ne){this.snapshot=Ne,this.type=13}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Ts{constructor(Ne){this.snapshot=Ne,this.type=14}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class hs{constructor(Ne,_e,Ye){this.routerEvent=Ne,this.position=_e,this.anchor=Ye,this.type=15}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}let Ja=(()=>{class Se{createUrlTree(_e,Ye,Mt,un,Mn,ni){return Ai(_e||Ye.root,Mt,un,Mn,ni)}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac}),Se})(),Xo=(()=>{class Se{}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:function(Ne){return Ja.\u0275fac(Ne)},providedIn:"root"}),Se})();class No{constructor(Ne){this._root=Ne}get root(){return this._root.value}parent(Ne){const _e=this.pathFromRoot(Ne);return _e.length>1?_e[_e.length-2]:null}children(Ne){const _e=Cs(Ne,this._root);return _e?_e.children.map(Ye=>Ye.value):[]}firstChild(Ne){const _e=Cs(Ne,this._root);return _e&&_e.children.length>0?_e.children[0].value:null}siblings(Ne){const _e=ns(Ne,this._root);return _e.length<2?[]:_e[_e.length-2].children.map(Mt=>Mt.value).filter(Mt=>Mt!==Ne)}pathFromRoot(Ne){return ns(Ne,this._root).map(_e=>_e.value)}}function Cs(Se,Ne){if(Se===Ne.value)return Ne;for(const _e of Ne.children){const Ye=Cs(Se,_e);if(Ye)return Ye}return null}function ns(Se,Ne){if(Se===Ne.value)return[Ne];for(const _e of Ne.children){const Ye=ns(Se,_e);if(Ye.length)return Ye.unshift(Ne),Ye}return[]}class Fo{constructor(Ne,_e){this.value=Ne,this.children=_e}toString(){return`TreeNode(${this.value})`}}function zr(Se){const Ne={};return Se&&Se.children.forEach(_e=>Ne[_e.value.outlet]=_e),Ne}class io extends No{constructor(Ne,_e){super(Ne),this.snapshot=_e,Bi(this,Ne)}toString(){return this.snapshot.toString()}}function gt(Se,Ne){const _e=function Tn(Se,Ne){const Mn=new gn([],{},{},"",{},At,Ne,null,Se.root,-1,{});return new vi("",new Fo(Mn,[]))}(Se,Ne),Ye=new u.X([new pr("",{})]),Mt=new u.X({}),un=new u.X({}),Mn=new u.X({}),ni=new u.X(""),zi=new ie(Ye,Mt,Mn,ni,un,At,Ne,_e.root);return zi.snapshot=_e.root,new io(new Fo(zi,[]),_e)}class ie{constructor(Ne,_e,Ye,Mt,un,Mn,ni,zi){this.url=Ne,this.params=_e,this.queryParams=Ye,this.fragment=Mt,this.data=un,this.outlet=Mn,this.component=ni,this.title=this.data?.pipe((0,F.U)(Wo=>Wo[qt]))??(0,c.of)(void 0),this._futureSnapshot=zi}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,F.U)(Ne=>fn(Ne)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,F.U)(Ne=>fn(Ne)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function Ze(Se,Ne="emptyOnly"){const _e=Se.pathFromRoot;let Ye=0;if("always"!==Ne)for(Ye=_e.length-1;Ye>=1;){const Mt=_e[Ye],un=_e[Ye-1];if(Mt.routeConfig&&""===Mt.routeConfig.path)Ye--;else{if(un.component)break;Ye--}}return function Jt(Se){return Se.reduce((Ne,_e)=>({params:{...Ne.params,..._e.params},data:{...Ne.data,..._e.data},resolve:{..._e.data,...Ne.resolve,..._e.routeConfig?.data,..._e._resolvedData}}),{params:{},data:{},resolve:{}})}(_e.slice(Ye))}class gn{get title(){return this.data?.[qt]}constructor(Ne,_e,Ye,Mt,un,Mn,ni,zi,Wo,Qo,ya){this.url=Ne,this.params=_e,this.queryParams=Ye,this.fragment=Mt,this.data=un,this.outlet=Mn,this.component=ni,this.routeConfig=zi,this._urlSegment=Wo,this._lastPathIndex=Qo,this._resolve=ya}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=fn(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=fn(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(Ye=>Ye.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class vi extends No{constructor(Ne,_e){super(_e),this.url=Ne,Bi(this,_e)}toString(){return Xi(this._root)}}function Bi(Se,Ne){Ne.value._routerState=Se,Ne.children.forEach(_e=>Bi(Se,_e))}function Xi(Se){const Ne=Se.children.length>0?` { ${Se.children.map(Xi).join(", ")} } `:"";return`${Se.value}${Ne}`}function ws(Se){if(Se.snapshot){const Ne=Se.snapshot,_e=Se._futureSnapshot;Se.snapshot=_e,Or(Ne.queryParams,_e.queryParams)||Se.queryParams.next(_e.queryParams),Ne.fragment!==_e.fragment&&Se.fragment.next(_e.fragment),Or(Ne.params,_e.params)||Se.params.next(_e.params),function Kr(Se,Ne){if(Se.length!==Ne.length)return!1;for(let _e=0;_e<Se.length;++_e)if(!Or(Se[_e],Ne[_e]))return!1;return!0}(Ne.url,_e.url)||Se.url.next(_e.url),Or(Ne.data,_e.data)||Se.data.next(_e.data)}else Se.snapshot=Se._futureSnapshot,Se.data.next(Se._futureSnapshot.data)}function ds(Se,Ne){const _e=Or(Se.params,Ne.params)&&function Eo(Se,Ne){return po(Se,Ne)&&Se.every((_e,Ye)=>Or(_e.parameters,Ne[Ye].parameters))}(Se.url,Ne.url);return _e&&!(!Se.parent!=!Ne.parent)&&(!Se.parent||ds(Se.parent,Ne.parent))}function Js(Se,Ne,_e){if(_e&&Se.shouldReuseRoute(Ne.value,_e.value.snapshot)){const Ye=_e.value;Ye._futureSnapshot=Ne.value;const Mt=function Ll(Se,Ne,_e){return Ne.children.map(Ye=>{for(const Mt of _e.children)if(Se.shouldReuseRoute(Ye.value,Mt.value.snapshot))return Js(Se,Ye,Mt);return Js(Se,Ye)})}(Se,Ne,_e);return new Fo(Ye,Mt)}{if(Se.shouldAttach(Ne.value)){const un=Se.retrieve(Ne.value);if(null!==un){const Mn=un.route;return Mn.value._futureSnapshot=Ne.value,Mn.children=Ne.children.map(ni=>Js(Se,ni)),Mn}}const Ye=function vl(Se){return new ie(new u.X(Se.url),new u.X(Se.params),new u.X(Se.queryParams),new u.X(Se.fragment),new u.X(Se.data),Se.outlet,Se.component,Se)}(Ne.value),Mt=Ne.children.map(un=>Js(Se,un));return new Fo(Ye,Mt)}}const Yu="ngNavigationCancelingError";function Nc(Se,Ne){const{redirectTo:_e,navigationBehaviorOptions:Ye}=Ot(Ne)?{redirectTo:Ne,navigationBehaviorOptions:void 0}:Ne,Mt=qu(!1,0,Ne);return Mt.url=_e,Mt.navigationBehaviorOptions=Ye,Mt}function qu(Se,Ne,_e){const Ye=new Error("NavigationCancelingError: "+(Se||""));return Ye[Yu]=!0,Ye.cancellationCode=Ne,_e&&(Ye.url=_e),Ye}function Ol(Se){return Kc(Se)&&Ot(Se.url)}function Kc(Se){return Se&&Se[Yu]}class yl{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.injector=null,this.children=new au,this.attachRef=null}}let au=(()=>{class Se{constructor(){this.contexts=new Map}onChildOutletCreated(_e,Ye){const Mt=this.getOrCreateContext(_e);Mt.outlet=Ye,this.contexts.set(_e,Mt)}onChildOutletDestroyed(_e){const Ye=this.getContext(_e);Ye&&(Ye.outlet=null,Ye.attachRef=null)}onOutletDeactivated(){const _e=this.contexts;return this.contexts=new Map,_e}onOutletReAttached(_e){this.contexts=_e}getOrCreateContext(_e){let Ye=this.getContext(_e);return Ye||(Ye=new yl,this.contexts.set(_e,Ye)),Ye}getContext(_e){return this.contexts.get(_e)||null}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})();const Da=!1;let yu=(()=>{class Se{constructor(){this.activated=null,this._activatedRoute=null,this.name=At,this.activateEvents=new r.vpe,this.deactivateEvents=new r.vpe,this.attachEvents=new r.vpe,this.detachEvents=new r.vpe,this.parentContexts=(0,r.f3M)(au),this.location=(0,r.f3M)(r.s_b),this.changeDetector=(0,r.f3M)(r.sBO),this.environmentInjector=(0,r.f3M)(r.lqb)}ngOnChanges(_e){if(_e.name){const{firstChange:Ye,previousValue:Mt}=_e.name;if(Ye)return;this.isTrackedInParentContexts(Mt)&&(this.deactivate(),this.parentContexts.onChildOutletDestroyed(Mt)),this.initializeOutletWithName()}}ngOnDestroy(){this.isTrackedInParentContexts(this.name)&&this.parentContexts.onChildOutletDestroyed(this.name)}isTrackedInParentContexts(_e){return this.parentContexts.getContext(_e)?.outlet===this}ngOnInit(){this.initializeOutletWithName()}initializeOutletWithName(){if(this.parentContexts.onChildOutletCreated(this.name,this),this.activated)return;const _e=this.parentContexts.getContext(this.name);_e?.route&&(_e.attachRef?this.attach(_e.attachRef,_e.route):this.activateWith(_e.route,_e.injector))}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new r.vHH(4012,Da);return this.activated.instance}get activatedRoute(){if(!this.activated)throw new r.vHH(4012,Da);return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new r.vHH(4012,Da);this.location.detach();const _e=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(_e.instance),_e}attach(_e,Ye){this.activated=_e,this._activatedRoute=Ye,this.location.insert(_e.hostView),this.attachEvents.emit(_e.instance)}deactivate(){if(this.activated){const _e=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(_e)}}activateWith(_e,Ye){if(this.isActivated)throw new r.vHH(4013,Da);this._activatedRoute=_e;const Mt=this.location,Mn=_e.snapshot.component,ni=this.parentContexts.getOrCreateContext(this.name).children,zi=new ju(_e,ni,Mt.injector);if(Ye&&function el(Se){return!!Se.resolveComponentFactory}(Ye)){const Wo=Ye.resolveComponentFactory(Mn);this.activated=Mt.createComponent(Wo,Mt.length,zi)}else this.activated=Mt.createComponent(Mn,{index:Mt.length,injector:zi,environmentInjector:Ye??this.environmentInjector});this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275dir=r.lG2({type:Se,selectors:[["router-outlet"]],inputs:{name:"name"},outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"],standalone:!0,features:[r.TTD]}),Se})();class ju{constructor(Ne,_e,Ye){this.route=Ne,this.childContexts=_e,this.parent=Ye}get(Ne,_e){return Ne===ie?this.route:Ne===au?this.childContexts:this.parent.get(Ne,_e)}}let oc=(()=>{class Se{}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275cmp=r.Xpm({type:Se,selectors:[["ng-component"]],standalone:!0,features:[r.jDz],decls:1,vars:0,template:function(_e,Ye){1&_e&&r._UZ(0,"router-outlet")},dependencies:[yu],encapsulation:2}),Se})();function Xl(Se,Ne){return Se.providers&&!Se._injector&&(Se._injector=(0,r.MMx)(Se.providers,Ne,`Route: ${Se.path}`)),Se._injector??Ne}function $u(Se){const Ne=Se.children&&Se.children.map($u),_e=Ne?{...Se,children:Ne}:{...Se};return!_e.component&&!_e.loadComponent&&(Ne||_e.loadChildren)&&_e.outlet&&_e.outlet!==At&&(_e.component=oc),_e}function Ba(Se){return Se.outlet||At}function Tl(Se,Ne){const _e=Se.filter(Ye=>Ba(Ye)===Ne);return _e.push(...Se.filter(Ye=>Ba(Ye)!==Ne)),_e}function tl(Se){if(!Se)return null;if(Se.routeConfig?._injector)return Se.routeConfig._injector;for(let Ne=Se.parent;Ne;Ne=Ne.parent){const _e=Ne.routeConfig;if(_e?._loadedInjector)return _e._loadedInjector;if(_e?._injector)return _e._injector}return null}class dc{constructor(Ne,_e,Ye,Mt){this.routeReuseStrategy=Ne,this.futureState=_e,this.currState=Ye,this.forwardEvent=Mt}activate(Ne){const _e=this.futureState._root,Ye=this.currState?this.currState._root:null;this.deactivateChildRoutes(_e,Ye,Ne),ws(this.futureState.root),this.activateChildRoutes(_e,Ye,Ne)}deactivateChildRoutes(Ne,_e,Ye){const Mt=zr(_e);Ne.children.forEach(un=>{const Mn=un.value.outlet;this.deactivateRoutes(un,Mt[Mn],Ye),delete Mt[Mn]}),br(Mt,(un,Mn)=>{this.deactivateRouteAndItsChildren(un,Ye)})}deactivateRoutes(Ne,_e,Ye){const Mt=Ne.value,un=_e?_e.value:null;if(Mt===un)if(Mt.component){const Mn=Ye.getContext(Mt.outlet);Mn&&this.deactivateChildRoutes(Ne,_e,Mn.children)}else this.deactivateChildRoutes(Ne,_e,Ye);else un&&this.deactivateRouteAndItsChildren(_e,Ye)}deactivateRouteAndItsChildren(Ne,_e){Ne.value.component&&this.routeReuseStrategy.shouldDetach(Ne.value.snapshot)?this.detachAndStoreRouteSubtree(Ne,_e):this.deactivateRouteAndOutlet(Ne,_e)}detachAndStoreRouteSubtree(Ne,_e){const Ye=_e.getContext(Ne.value.outlet),Mt=Ye&&Ne.value.component?Ye.children:_e,un=zr(Ne);for(const Mn of Object.keys(un))this.deactivateRouteAndItsChildren(un[Mn],Mt);if(Ye&&Ye.outlet){const Mn=Ye.outlet.detach(),ni=Ye.children.onOutletDeactivated();this.routeReuseStrategy.store(Ne.value.snapshot,{componentRef:Mn,route:Ne,contexts:ni})}}deactivateRouteAndOutlet(Ne,_e){const Ye=_e.getContext(Ne.value.outlet),Mt=Ye&&Ne.value.component?Ye.children:_e,un=zr(Ne);for(const Mn of Object.keys(un))this.deactivateRouteAndItsChildren(un[Mn],Mt);Ye&&(Ye.outlet&&(Ye.outlet.deactivate(),Ye.children.onOutletDeactivated()),Ye.attachRef=null,Ye.resolver=null,Ye.route=null)}activateChildRoutes(Ne,_e,Ye){const Mt=zr(_e);Ne.children.forEach(un=>{this.activateRoutes(un,Mt[un.value.outlet],Ye),this.forwardEvent(new Ts(un.value.snapshot))}),Ne.children.length&&this.forwardEvent(new Ji(Ne.value.snapshot))}activateRoutes(Ne,_e,Ye){const Mt=Ne.value,un=_e?_e.value:null;if(ws(Mt),Mt===un)if(Mt.component){const Mn=Ye.getOrCreateContext(Mt.outlet);this.activateChildRoutes(Ne,_e,Mn.children)}else this.activateChildRoutes(Ne,_e,Ye);else if(Mt.component){const Mn=Ye.getOrCreateContext(Mt.outlet);if(this.routeReuseStrategy.shouldAttach(Mt.snapshot)){const ni=this.routeReuseStrategy.retrieve(Mt.snapshot);this.routeReuseStrategy.store(Mt.snapshot,null),Mn.children.onOutletReAttached(ni.contexts),Mn.attachRef=ni.componentRef,Mn.route=ni.route.value,Mn.outlet&&Mn.outlet.attach(ni.componentRef,ni.route.value),ws(ni.route.value),this.activateChildRoutes(Ne,null,Mn.children)}else{const ni=tl(Mt.snapshot),zi=ni?.get(r._Vd)??null;Mn.attachRef=null,Mn.route=Mt,Mn.resolver=zi,Mn.injector=ni,Mn.outlet&&Mn.outlet.activateWith(Mt,Mn.injector),this.activateChildRoutes(Ne,null,Mn.children)}}else this.activateChildRoutes(Ne,null,Ye)}}class cu{constructor(Ne){this.path=Ne,this.route=this.path[this.path.length-1]}}class Sa{constructor(Ne,_e){this.component=Ne,this.route=_e}}function Ru(Se,Ne,_e){const Ye=Se._root;return nl(Ye,Ne?Ne._root:null,_e,[Ye.value])}function ba(Se,Ne){const _e=Symbol(),Ye=Ne.get(Se,_e);return Ye===_e?"function"!=typeof Se||(0,r.Z0I)(Se)?Ne.get(Se):Se:Ye}function nl(Se,Ne,_e,Ye,Mt={canDeactivateChecks:[],canActivateChecks:[]}){const un=zr(Ne);return Se.children.forEach(Mn=>{(function Su(Se,Ne,_e,Ye,Mt={canDeactivateChecks:[],canActivateChecks:[]}){const un=Se.value,Mn=Ne?Ne.value:null,ni=_e?_e.getContext(Se.value.outlet):null;if(Mn&&un.routeConfig===Mn.routeConfig){const zi=function gc(Se,Ne,_e){if("function"==typeof _e)return _e(Se,Ne);switch(_e){case"pathParamsChange":return!po(Se.url,Ne.url);case"pathParamsOrQueryParamsChange":return!po(Se.url,Ne.url)||!Or(Se.queryParams,Ne.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!ds(Se,Ne)||!Or(Se.queryParams,Ne.queryParams);default:return!ds(Se,Ne)}}(Mn,un,un.routeConfig.runGuardsAndResolvers);zi?Mt.canActivateChecks.push(new cu(Ye)):(un.data=Mn.data,un._resolvedData=Mn._resolvedData),nl(Se,Ne,un.component?ni?ni.children:null:_e,Ye,Mt),zi&&ni&&ni.outlet&&ni.outlet.isActivated&&Mt.canDeactivateChecks.push(new Sa(ni.outlet.component,Mn))}else Mn&&ql(Ne,ni,Mt),Mt.canActivateChecks.push(new cu(Ye)),nl(Se,null,un.component?ni?ni.children:null:_e,Ye,Mt)})(Mn,un[Mn.value.outlet],_e,Ye.concat([Mn.value]),Mt),delete un[Mn.value.outlet]}),br(un,(Mn,ni)=>ql(Mn,_e.getContext(ni),Mt)),Mt}function ql(Se,Ne,_e){const Ye=zr(Se),Mt=Se.value;br(Ye,(un,Mn)=>{ql(un,Mt.component?Ne?Ne.children.getContext(Mn):null:Ne,_e)}),_e.canDeactivateChecks.push(new Sa(Mt.component&&Ne&&Ne.outlet&&Ne.outlet.isActivated?Ne.outlet.component:null,Mt))}function Al(Se){return"function"==typeof Se}function To(Se){return Se instanceof e.K||"EmptyError"===Se?.name}const Ya=Symbol("INITIAL_VALUE");function mi(){return(0,X.w)(Se=>(0,f.aj)(Se.map(Ne=>Ne.pipe((0,de.q)(1),(0,V.O)(Ya)))).pipe((0,F.U)(Ne=>{for(const _e of Ne)if(!0!==_e){if(_e===Ya)return Ya;if(!1===_e||_e instanceof ii)return _e}return!0}),(0,ce.h)(Ne=>Ne!==Ya),(0,de.q)(1)))}function Fc(Se){return(0,D.z)((0,$e.b)(Ne=>{if(Ot(Ne))throw Nc(0,Ne)}),(0,F.U)(Ne=>!0===Ne))}const Lc={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function kl(Se,Ne,_e,Ye,Mt){const un=sl(Se,Ne,_e);return un.matched?function du(Se,Ne,_e,Ye){const Mt=Ne.canMatch;if(!Mt||0===Mt.length)return(0,c.of)(!0);const un=Mt.map(Mn=>{const ni=ba(Mn,Se);return ht(function Je(Se){return Se&&Al(Se.canMatch)}(ni)?ni.canMatch(Ne,_e):Se.runInContext(()=>ni(Ne,_e)))});return(0,c.of)(un).pipe(mi(),Fc())}(Ye=Xl(Ne,Ye),Ne,_e).pipe((0,F.U)(Mn=>!0===Mn?un:{...Lc})):(0,c.of)(un)}function sl(Se,Ne,_e){if(""===Ne.path)return"full"===Ne.pathMatch&&(Se.hasChildren()||_e.length>0)?{...Lc}:{matched:!0,consumedSegments:[],remainingSegments:_e,parameters:{},positionalParamSegments:{}};const Mt=(Ne.matcher||xn)(_e,Se,Ne);if(!Mt)return{...Lc};const un={};br(Mt.posParams,(ni,zi)=>{un[zi]=ni.path});const Mn=Mt.consumed.length>0?{...un,...Mt.consumed[Mt.consumed.length-1].parameters}:un;return{matched:!0,consumedSegments:Mt.consumed,remainingSegments:_e.slice(Mt.consumed.length),parameters:Mn,positionalParamSegments:Mt.posParams??{}}}function ja(Se,Ne,_e,Ye){if(_e.length>0&&function yt(Se,Ne,_e){return _e.some(Ye=>Gt(Se,Ne,Ye)&&Ba(Ye)!==At)}(Se,_e,Ye)){const un=new mr(Ne,function Ee(Se,Ne,_e,Ye){const Mt={};Mt[At]=Ye,Ye._sourceSegment=Se,Ye._segmentIndexShift=Ne.length;for(const un of _e)if(""===un.path&&Ba(un)!==At){const Mn=new mr([],{});Mn._sourceSegment=Se,Mn._segmentIndexShift=Ne.length,Mt[Ba(un)]=Mn}return Mt}(Se,Ne,Ye,new mr(_e,Se.children)));return un._sourceSegment=Se,un._segmentIndexShift=Ne.length,{segmentGroup:un,slicedSegments:[]}}if(0===_e.length&&function Xe(Se,Ne,_e){return _e.some(Ye=>Gt(Se,Ne,Ye))}(Se,_e,Ye)){const un=new mr(Se.segments,function Q(Se,Ne,_e,Ye,Mt){const un={};for(const Mn of Ye)if(Gt(Se,_e,Mn)&&!Mt[Ba(Mn)]){const ni=new mr([],{});ni._sourceSegment=Se,ni._segmentIndexShift=Ne.length,un[Ba(Mn)]=ni}return{...Mt,...un}}(Se,Ne,_e,Ye,Se.children));return un._sourceSegment=Se,un._segmentIndexShift=Ne.length,{segmentGroup:un,slicedSegments:_e}}const Mt=new mr(Se.segments,Se.children);return Mt._sourceSegment=Se,Mt._segmentIndexShift=Ne.length,{segmentGroup:Mt,slicedSegments:_e}}function Gt(Se,Ne,_e){return(!(Se.hasChildren()||Ne.length>0)||"full"!==_e.pathMatch)&&""===_e.path}function An(Se,Ne,_e,Ye){return!!(Ba(Se)===Ye||Ye!==At&&Gt(Ne,_e,Se))&&("**"===Se.path||sl(Ne,Se,_e).matched)}function kn(Se,Ne,_e){return 0===Ne.length&&!Se.children[_e]}const Hr=!1;class Xr{constructor(Ne){this.segmentGroup=Ne||null}}class yr{constructor(Ne){this.urlTree=Ne}}function Rr(Se){return(0,U._)(new Xr(Se))}function Go(Se){return(0,U._)(new yr(Se))}class Fr{constructor(Ne,_e,Ye,Mt,un){this.injector=Ne,this.configLoader=_e,this.urlSerializer=Ye,this.urlTree=Mt,this.config=un,this.allowRedirects=!0}apply(){const Ne=ja(this.urlTree.root,[],[],this.config).segmentGroup,_e=new mr(Ne.segments,Ne.children);return this.expandSegmentGroup(this.injector,this.config,_e,At).pipe((0,F.U)(un=>this.createUrlTree(dn(un),this.urlTree.queryParams,this.urlTree.fragment))).pipe((0,ge.K)(un=>{if(un instanceof yr)return this.allowRedirects=!1,this.match(un.urlTree);throw un instanceof Xr?this.noMatchError(un):un}))}match(Ne){return this.expandSegmentGroup(this.injector,this.config,Ne.root,At).pipe((0,F.U)(Mt=>this.createUrlTree(dn(Mt),Ne.queryParams,Ne.fragment))).pipe((0,ge.K)(Mt=>{throw Mt instanceof Xr?this.noMatchError(Mt):Mt}))}noMatchError(Ne){return new r.vHH(4002,Hr)}createUrlTree(Ne,_e,Ye){const Mt=Zt(Ne);return new ii(Mt,_e,Ye)}expandSegmentGroup(Ne,_e,Ye,Mt){return 0===Ye.segments.length&&Ye.hasChildren()?this.expandChildren(Ne,_e,Ye).pipe((0,F.U)(un=>new mr([],un))):this.expandSegment(Ne,Ye,_e,Ye.segments,Mt,!0)}expandChildren(Ne,_e,Ye){const Mt=[];for(const un of Object.keys(Ye.children))"primary"===un?Mt.unshift(un):Mt.push(un);return(0,a.D)(Mt).pipe((0,Te.b)(un=>{const Mn=Ye.children[un],ni=Tl(_e,un);return this.expandSegmentGroup(Ne,ni,Mn,un).pipe((0,F.U)(zi=>({segment:zi,outlet:un})))}),(0,Et.R)((un,Mn)=>(un[Mn.outlet]=Mn.segment,un),{}),(0,ot.Z)())}expandSegment(Ne,_e,Ye,Mt,un,Mn){return(0,a.D)(Ye).pipe((0,Te.b)(ni=>this.expandSegmentAgainstRoute(Ne,_e,Ye,ni,Mt,un,Mn).pipe((0,ge.K)(Wo=>{if(Wo instanceof Xr)return(0,c.of)(null);throw Wo}))),(0,fe.P)(ni=>!!ni),(0,ge.K)((ni,zi)=>{if(To(ni))return kn(_e,Mt,un)?(0,c.of)(new mr([],{})):Rr(_e);throw ni}))}expandSegmentAgainstRoute(Ne,_e,Ye,Mt,un,Mn,ni){return An(Mt,_e,un,Mn)?void 0===Mt.redirectTo?this.matchSegmentAgainstRoute(Ne,_e,Mt,un,Mn):ni&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(Ne,_e,Ye,Mt,un,Mn):Rr(_e):Rr(_e)}expandSegmentAgainstRouteUsingRedirect(Ne,_e,Ye,Mt,un,Mn){return"**"===Mt.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(Ne,Ye,Mt,Mn):this.expandRegularSegmentAgainstRouteUsingRedirect(Ne,_e,Ye,Mt,un,Mn)}expandWildCardWithParamsAgainstRouteUsingRedirect(Ne,_e,Ye,Mt){const un=this.applyRedirectCommands([],Ye.redirectTo,{});return Ye.redirectTo.startsWith("/")?Go(un):this.lineralizeSegments(Ye,un).pipe((0,se.zg)(Mn=>{const ni=new mr(Mn,{});return this.expandSegment(Ne,ni,_e,Mn,Mt,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(Ne,_e,Ye,Mt,un,Mn){const{matched:ni,consumedSegments:zi,remainingSegments:Wo,positionalParamSegments:Qo}=sl(_e,Mt,un);if(!ni)return Rr(_e);const ya=this.applyRedirectCommands(zi,Mt.redirectTo,Qo);return Mt.redirectTo.startsWith("/")?Go(ya):this.lineralizeSegments(Mt,ya).pipe((0,se.zg)(Bl=>this.expandSegment(Ne,_e,Ye,Bl.concat(Wo),Mn,!1)))}matchSegmentAgainstRoute(Ne,_e,Ye,Mt,un){return"**"===Ye.path?(Ne=Xl(Ye,Ne),Ye.loadChildren?(Ye._loadedRoutes?(0,c.of)({routes:Ye._loadedRoutes,injector:Ye._loadedInjector}):this.configLoader.loadChildren(Ne,Ye)).pipe((0,F.U)(ni=>(Ye._loadedRoutes=ni.routes,Ye._loadedInjector=ni.injector,new mr(Mt,{})))):(0,c.of)(new mr(Mt,{}))):kl(_e,Ye,Mt,Ne).pipe((0,X.w)(({matched:Mn,consumedSegments:ni,remainingSegments:zi})=>Mn?this.getChildConfig(Ne=Ye._injector??Ne,Ye,Mt).pipe((0,se.zg)(Qo=>{const ya=Qo.injector??Ne,Bl=Qo.routes,{segmentGroup:Wu,slicedSegments:pc}=ja(_e,ni,zi,Bl),cd=new mr(Wu.segments,Wu.children);if(0===pc.length&&cd.hasChildren())return this.expandChildren(ya,Bl,cd).pipe((0,F.U)(Ed=>new mr(ni,Ed)));if(0===Bl.length&&0===pc.length)return(0,c.of)(new mr(ni,{}));const Ju=Ba(Ye)===un;return this.expandSegment(ya,cd,Bl,pc,Ju?At:un,!0).pipe((0,F.U)(od=>new mr(ni.concat(od.segments),od.children)))})):Rr(_e)))}getChildConfig(Ne,_e,Ye){return _e.children?(0,c.of)({routes:_e.children,injector:Ne}):_e.loadChildren?void 0!==_e._loadedRoutes?(0,c.of)({routes:_e._loadedRoutes,injector:_e._loadedInjector}):function ec(Se,Ne,_e,Ye){const Mt=Ne.canLoad;if(void 0===Mt||0===Mt.length)return(0,c.of)(!0);const un=Mt.map(Mn=>{const ni=ba(Mn,Se);return ht(function zs(Se){return Se&&Al(Se.canLoad)}(ni)?ni.canLoad(Ne,_e):Se.runInContext(()=>ni(Ne,_e)))});return(0,c.of)(un).pipe(mi(),Fc())}(Ne,_e,Ye).pipe((0,se.zg)(Mt=>Mt?this.configLoader.loadChildren(Ne,_e).pipe((0,$e.b)(un=>{_e._loadedRoutes=un.routes,_e._loadedInjector=un.injector})):function Qn(Se){return(0,U._)(qu(Hr,3))}())):(0,c.of)({routes:[],injector:Ne})}lineralizeSegments(Ne,_e){let Ye=[],Mt=_e.root;for(;;){if(Ye=Ye.concat(Mt.segments),0===Mt.numberOfChildren)return(0,c.of)(Ye);if(Mt.numberOfChildren>1||!Mt.children[At])return Ne.redirectTo,(0,U._)(new r.vHH(4e3,Hr));Mt=Mt.children[At]}}applyRedirectCommands(Ne,_e,Ye){return this.applyRedirectCreateUrlTree(_e,this.urlSerializer.parse(_e),Ne,Ye)}applyRedirectCreateUrlTree(Ne,_e,Ye,Mt){const un=this.createSegmentGroup(Ne,_e.root,Ye,Mt);return new ii(un,this.createQueryParams(_e.queryParams,this.urlTree.queryParams),_e.fragment)}createQueryParams(Ne,_e){const Ye={};return br(Ne,(Mt,un)=>{if("string"==typeof Mt&&Mt.startsWith(":")){const ni=Mt.substring(1);Ye[un]=_e[ni]}else Ye[un]=Mt}),Ye}createSegmentGroup(Ne,_e,Ye,Mt){const un=this.createSegments(Ne,_e.segments,Ye,Mt);let Mn={};return br(_e.children,(ni,zi)=>{Mn[zi]=this.createSegmentGroup(Ne,ni,Ye,Mt)}),new mr(un,Mn)}createSegments(Ne,_e,Ye,Mt){return _e.map(un=>un.path.startsWith(":")?this.findPosParam(Ne,un,Mt):this.findOrReturn(un,Ye))}findPosParam(Ne,_e,Ye){const Mt=Ye[_e.path.substring(1)];if(!Mt)throw new r.vHH(4001,Hr);return Mt}findOrReturn(Ne,_e){let Ye=0;for(const Mt of _e){if(Mt.path===Ne.path)return _e.splice(Ye),Mt;Ye++}return Ne}}class Fa{}class $l{constructor(Ne,_e,Ye,Mt,un,Mn,ni){this.injector=Ne,this.rootComponentType=_e,this.config=Ye,this.urlTree=Mt,this.url=un,this.paramsInheritanceStrategy=Mn,this.urlSerializer=ni}recognize(){const Ne=ja(this.urlTree.root,[],[],this.config.filter(_e=>void 0===_e.redirectTo)).segmentGroup;return this.processSegmentGroup(this.injector,this.config,Ne,At).pipe((0,F.U)(_e=>{if(null===_e)return null;const Ye=new gn([],Object.freeze({}),Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,{},At,this.rootComponentType,null,this.urlTree.root,-1,{}),Mt=new Fo(Ye,_e),un=new vi(this.url,Mt);return this.inheritParamsAndData(un._root),un}))}inheritParamsAndData(Ne){const _e=Ne.value,Ye=Ze(_e,this.paramsInheritanceStrategy);_e.params=Object.freeze(Ye.params),_e.data=Object.freeze(Ye.data),Ne.children.forEach(Mt=>this.inheritParamsAndData(Mt))}processSegmentGroup(Ne,_e,Ye,Mt){return 0===Ye.segments.length&&Ye.hasChildren()?this.processChildren(Ne,_e,Ye):this.processSegment(Ne,_e,Ye,Ye.segments,Mt)}processChildren(Ne,_e,Ye){return(0,a.D)(Object.keys(Ye.children)).pipe((0,Te.b)(Mt=>{const un=Ye.children[Mt],Mn=Tl(_e,Mt);return this.processSegmentGroup(Ne,Mn,un,Mt)}),(0,Et.R)((Mt,un)=>Mt&&un?(Mt.push(...un),Mt):null),function qe(Se,Ne=!1){return _e=>_e.lift(new He(Se,Ne))}(Mt=>null!==Mt),(0,Le.d)(null),(0,ot.Z)(),(0,F.U)(Mt=>{if(null===Mt)return null;const un=ad(Mt);return function xl(Se){Se.sort((Ne,_e)=>Ne.value.outlet===At?-1:_e.value.outlet===At?1:Ne.value.outlet.localeCompare(_e.value.outlet))}(un),un}))}processSegment(Ne,_e,Ye,Mt,un){return(0,a.D)(_e).pipe((0,Te.b)(Mn=>this.processSegmentAgainstRoute(Mn._injector??Ne,Mn,Ye,Mt,un)),(0,fe.P)(Mn=>!!Mn),(0,ge.K)(Mn=>{if(To(Mn))return kn(Ye,Mt,un)?(0,c.of)([]):(0,c.of)(null);throw Mn}))}processSegmentAgainstRoute(Ne,_e,Ye,Mt,un){if(_e.redirectTo||!An(_e,Ye,Mt,un))return(0,c.of)(null);let Mn;if("**"===_e.path){const ni=Mt.length>0?Qr(Mt).parameters:{},zi=Wl(Ye)+Mt.length,Wo=new gn(Mt,ni,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,fc(_e),Ba(_e),_e.component??_e._loadedComponent??null,_e,yi(Ye),zi,bu(_e));Mn=(0,c.of)({snapshot:Wo,consumedSegments:[],remainingSegments:[]})}else Mn=kl(Ye,_e,Mt,Ne).pipe((0,F.U)(({matched:ni,consumedSegments:zi,remainingSegments:Wo,parameters:Qo})=>{if(!ni)return null;const ya=Wl(Ye)+zi.length;return{snapshot:new gn(zi,Qo,Object.freeze({...this.urlTree.queryParams}),this.urlTree.fragment,fc(_e),Ba(_e),_e.component??_e._loadedComponent??null,_e,yi(Ye),ya,bu(_e)),consumedSegments:zi,remainingSegments:Wo}}));return Mn.pipe((0,X.w)(ni=>{if(null===ni)return(0,c.of)(null);const{snapshot:zi,consumedSegments:Wo,remainingSegments:Qo}=ni;Ne=_e._injector??Ne;const ya=_e._loadedInjector??Ne,Bl=function Uu(Se){return Se.children?Se.children:Se.loadChildren?Se._loadedRoutes:[]}(_e),{segmentGroup:Wu,slicedSegments:pc}=ja(Ye,Wo,Qo,Bl.filter(Ju=>void 0===Ju.redirectTo));if(0===pc.length&&Wu.hasChildren())return this.processChildren(ya,Bl,Wu).pipe((0,F.U)(Ju=>null===Ju?null:[new Fo(zi,Ju)]));if(0===Bl.length&&0===pc.length)return(0,c.of)([new Fo(zi,[])]);const cd=Ba(_e)===un;return this.processSegment(ya,Bl,Wu,pc,cd?At:un).pipe((0,F.U)(Ju=>null===Ju?null:[new Fo(zi,Ju)]))}))}}function Xc(Se){const Ne=Se.value.routeConfig;return Ne&&""===Ne.path&&void 0===Ne.redirectTo}function ad(Se){const Ne=[],_e=new Set;for(const Ye of Se){if(!Xc(Ye)){Ne.push(Ye);continue}const Mt=Ne.find(un=>Ye.value.routeConfig===un.value.routeConfig);void 0!==Mt?(Mt.children.push(...Ye.children),_e.add(Mt)):Ne.push(Ye)}for(const Ye of _e){const Mt=ad(Ye.children);Ne.push(new Fo(Ye.value,Mt))}return Ne.filter(Ye=>!_e.has(Ye))}function yi(Se){let Ne=Se;for(;Ne._sourceSegment;)Ne=Ne._sourceSegment;return Ne}function Wl(Se){let Ne=Se,_e=Ne._segmentIndexShift??0;for(;Ne._sourceSegment;)Ne=Ne._sourceSegment,_e+=Ne._segmentIndexShift??0;return _e-1}function fc(Se){return Se.data||{}}function bu(Se){return Se.resolve||{}}function Ri(Se){return"string"==typeof Se.title||null===Se.title}function fs(Se){return(0,X.w)(Ne=>{const _e=Se(Ne);return _e?(0,a.D)(_e).pipe((0,F.U)(()=>Ne)):(0,c.of)(Ne)})}const Ra=new r.OlP("ROUTES");let Vs=(()=>{class Se{constructor(){this.componentLoaders=new WeakMap,this.childrenLoaders=new WeakMap,this.compiler=(0,r.f3M)(r.Sil)}loadComponent(_e){if(this.componentLoaders.get(_e))return this.componentLoaders.get(_e);if(_e._loadedComponent)return(0,c.of)(_e._loadedComponent);this.onLoadStartListener&&this.onLoadStartListener(_e);const Ye=ht(_e.loadComponent()).pipe((0,F.U)(wl),(0,$e.b)(un=>{this.onLoadEndListener&&this.onLoadEndListener(_e),_e._loadedComponent=un}),(0,Xt.x)(()=>{this.componentLoaders.delete(_e)})),Mt=new W.c(Ye,()=>new $.xQ).pipe((0,cn.x)());return this.componentLoaders.set(_e,Mt),Mt}loadChildren(_e,Ye){if(this.childrenLoaders.get(Ye))return this.childrenLoaders.get(Ye);if(Ye._loadedRoutes)return(0,c.of)({routes:Ye._loadedRoutes,injector:Ye._loadedInjector});this.onLoadStartListener&&this.onLoadStartListener(Ye);const un=this.loadModuleFactoryOrRoutes(Ye.loadChildren).pipe((0,F.U)(ni=>{this.onLoadEndListener&&this.onLoadEndListener(Ye);let zi,Wo,Qo=!1;Array.isArray(ni)?Wo=ni:(zi=ni.create(_e).injector,Wo=ir(zi.get(Ra,[],r.XFs.Self|r.XFs.Optional)));return{routes:Wo.map($u),injector:zi}}),(0,Xt.x)(()=>{this.childrenLoaders.delete(Ye)})),Mn=new W.c(un,()=>new $.xQ).pipe((0,cn.x)());return this.childrenLoaders.set(Ye,Mn),Mn}loadModuleFactoryOrRoutes(_e){return ht(_e()).pipe((0,F.U)(wl),(0,se.zg)(Ye=>Ye instanceof r.YKP||Array.isArray(Ye)?(0,c.of)(Ye):(0,a.D)(this.compiler.compileModuleAsync(Ye))))}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})();function wl(Se){return function Ms(Se){return Se&&"object"==typeof Se&&"default"in Se}(Se)?Se.default:Se}let Qa=(()=>{class Se{get hasRequestedNavigation(){return 0!==this.navigationId}constructor(){this.currentNavigation=null,this.lastSuccessfulNavigation=null,this.events=new $.xQ,this.configLoader=(0,r.f3M)(Vs),this.environmentInjector=(0,r.f3M)(r.lqb),this.urlSerializer=(0,r.f3M)(qr),this.rootContexts=(0,r.f3M)(au),this.navigationId=0,this.afterPreactivation=()=>(0,c.of)(void 0),this.rootComponentType=null,this.configLoader.onLoadEndListener=Mt=>this.events.next(new $a(Mt)),this.configLoader.onLoadStartListener=Mt=>this.events.next(new da(Mt))}complete(){this.transitions?.complete()}handleNavigationRequest(_e){const Ye=++this.navigationId;this.transitions?.next({...this.transitions.value,..._e,id:Ye})}setupNavigations(_e){return this.transitions=new u.X({id:0,targetPageId:0,currentUrlTree:_e.currentUrlTree,currentRawUrl:_e.currentUrlTree,extractedUrl:_e.urlHandlingStrategy.extract(_e.currentUrlTree),urlAfterRedirects:_e.urlHandlingStrategy.extract(_e.currentUrlTree),rawUrl:_e.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:go,restoredState:null,currentSnapshot:_e.routerState.snapshot,targetSnapshot:null,currentRouterState:_e.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.transitions.pipe((0,ce.h)(Ye=>0!==Ye.id),(0,F.U)(Ye=>({...Ye,extractedUrl:_e.urlHandlingStrategy.extract(Ye.rawUrl)})),(0,X.w)(Ye=>{let Mt=!1,un=!1;return(0,c.of)(Ye).pipe((0,$e.b)(Mn=>{this.currentNavigation={id:Mn.id,initialUrl:Mn.rawUrl,extractedUrl:Mn.extractedUrl,trigger:Mn.source,extras:Mn.extras,previousNavigation:this.lastSuccessfulNavigation?{...this.lastSuccessfulNavigation,previousNavigation:null}:null}}),(0,X.w)(Mn=>{const ni=_e.browserUrlTree.toString(),zi=!_e.navigated||Mn.extractedUrl.toString()!==ni||ni!==_e.currentUrlTree.toString();if(!zi&&"reload"!==(Mn.extras.onSameUrlNavigation??_e.onSameUrlNavigation)){const Qo="";return this.events.next(new gs(Mn.id,_e.serializeUrl(Ye.rawUrl),Qo,0)),_e.rawUrlTree=Mn.rawUrl,Mn.resolve(null),M.E}if(_e.urlHandlingStrategy.shouldProcessUrl(Mn.rawUrl))return rn(Mn.source)&&(_e.browserUrlTree=Mn.extractedUrl),(0,c.of)(Mn).pipe((0,X.w)(Qo=>{const ya=this.transitions?.getValue();return this.events.next(new ts(Qo.id,this.urlSerializer.serialize(Qo.extractedUrl),Qo.source,Qo.restoredState)),ya!==this.transitions?.getValue()?M.E:Promise.resolve(Qo)}),function Ui(Se,Ne,_e,Ye){return(0,X.w)(Mt=>function Gr(Se,Ne,_e,Ye,Mt){return new Fr(Se,Ne,_e,Ye,Mt).apply()}(Se,Ne,_e,Mt.extractedUrl,Ye).pipe((0,F.U)(un=>({...Mt,urlAfterRedirects:un}))))}(this.environmentInjector,this.configLoader,this.urlSerializer,_e.config),(0,$e.b)(Qo=>{this.currentNavigation={...this.currentNavigation,finalUrl:Qo.urlAfterRedirects},Ye.urlAfterRedirects=Qo.urlAfterRedirects}),function je(Se,Ne,_e,Ye,Mt){return(0,se.zg)(un=>function zo(Se,Ne,_e,Ye,Mt,un,Mn="emptyOnly"){return new $l(Se,Ne,_e,Ye,Mt,Mn,un).recognize().pipe((0,X.w)(ni=>null===ni?function ca(Se){return new T.y(Ne=>Ne.error(Se))}(new Fa):(0,c.of)(ni)))}(Se,Ne,_e,un.urlAfterRedirects,Ye.serialize(un.urlAfterRedirects),Ye,Mt).pipe((0,F.U)(Mn=>({...un,targetSnapshot:Mn}))))}(this.environmentInjector,this.rootComponentType,_e.config,this.urlSerializer,_e.paramsInheritanceStrategy),(0,$e.b)(Qo=>{if(Ye.targetSnapshot=Qo.targetSnapshot,"eager"===_e.urlUpdateStrategy){if(!Qo.extras.skipLocationChange){const Bl=_e.urlHandlingStrategy.merge(Qo.urlAfterRedirects,Qo.rawUrl);_e.setBrowserUrl(Bl,Qo)}_e.browserUrlTree=Qo.urlAfterRedirects}const ya=new la(Qo.id,this.urlSerializer.serialize(Qo.extractedUrl),this.urlSerializer.serialize(Qo.urlAfterRedirects),Qo.targetSnapshot);this.events.next(ya)}));if(zi&&_e.urlHandlingStrategy.shouldProcessUrl(_e.rawUrlTree)){const{id:Qo,extractedUrl:ya,source:Bl,restoredState:Wu,extras:pc}=Mn,cd=new ts(Qo,this.urlSerializer.serialize(ya),Bl,Wu);this.events.next(cd);const Ju=gt(ya,this.rootComponentType).snapshot;return Ye={...Mn,targetSnapshot:Ju,urlAfterRedirects:ya,extras:{...pc,skipLocationChange:!1,replaceUrl:!1}},(0,c.of)(Ye)}{const Qo="";return this.events.next(new gs(Mn.id,_e.serializeUrl(Ye.extractedUrl),Qo,1)),_e.rawUrlTree=Mn.rawUrl,Mn.resolve(null),M.E}}),(0,$e.b)(Mn=>{const ni=new Ro(Mn.id,this.urlSerializer.serialize(Mn.extractedUrl),this.urlSerializer.serialize(Mn.urlAfterRedirects),Mn.targetSnapshot);this.events.next(ni)}),(0,F.U)(Mn=>Ye={...Mn,guards:Ru(Mn.targetSnapshot,Mn.currentSnapshot,this.rootContexts)}),function Hs(Se,Ne){return(0,se.zg)(_e=>{const{targetSnapshot:Ye,currentSnapshot:Mt,guards:{canActivateChecks:un,canDeactivateChecks:Mn}}=_e;return 0===Mn.length&&0===un.length?(0,c.of)({..._e,guardsResult:!0}):function Qs(Se,Ne,_e,Ye){return(0,a.D)(Se).pipe((0,se.zg)(Mt=>function id(Se,Ne,_e,Ye,Mt){const un=Ne&&Ne.routeConfig?Ne.routeConfig.canDeactivate:null;if(!un||0===un.length)return(0,c.of)(!0);const Mn=un.map(ni=>{const zi=tl(Ne)??Mt,Wo=ba(ni,zi);return ht(function pt(Se){return Se&&Al(Se.canDeactivate)}(Wo)?Wo.canDeactivate(Se,Ne,_e,Ye):zi.runInContext(()=>Wo(Se,Ne,_e,Ye))).pipe((0,fe.P)())});return(0,c.of)(Mn).pipe(mi())}(Mt.component,Mt.route,_e,Ne,Ye)),(0,fe.P)(Mt=>!0!==Mt,!0))}(Mn,Ye,Mt,Se).pipe((0,se.zg)(ni=>ni&&function Dc(Se){return"boolean"==typeof Se}(ni)?function Hu(Se,Ne,_e,Ye){return(0,a.D)(Ne).pipe((0,Te.b)(Mt=>(0,m.z)(function sc(Se,Ne){return null!==Se&&Ne&&Ne(new Rl(Se)),(0,c.of)(!0)}(Mt.route.parent,Ye),function zl(Se,Ne){return null!==Se&&Ne&&Ne(new Ha(Se)),(0,c.of)(!0)}(Mt.route,Ye),function lu(Se,Ne,_e){const Ye=Ne[Ne.length-1],un=Ne.slice(0,Ne.length-1).reverse().map(Mn=>function xu(Se){const Ne=Se.routeConfig?Se.routeConfig.canActivateChild:null;return Ne&&0!==Ne.length?{node:Se,guards:Ne}:null}(Mn)).filter(Mn=>null!==Mn).map(Mn=>w(()=>{const ni=Mn.guards.map(zi=>{const Wo=tl(Mn.node)??_e,Qo=ba(zi,Wo);return ht(function bt(Se){return Se&&Al(Se.canActivateChild)}(Qo)?Qo.canActivateChild(Ye,Se):Wo.runInContext(()=>Qo(Ye,Se))).pipe((0,fe.P)())});return(0,c.of)(ni).pipe(mi())}));return(0,c.of)(un).pipe(mi())}(Se,Mt.path,_e),function hu(Se,Ne,_e){const Ye=Ne.routeConfig?Ne.routeConfig.canActivate:null;if(!Ye||0===Ye.length)return(0,c.of)(!0);const Mt=Ye.map(un=>w(()=>{const Mn=tl(Ne)??_e,ni=ba(un,Mn);return ht(function Vc(Se){return Se&&Al(Se.canActivate)}(ni)?ni.canActivate(Ne,Se):Mn.runInContext(()=>ni(Ne,Se))).pipe((0,fe.P)())}));return(0,c.of)(Mt).pipe(mi())}(Se,Mt.route,_e))),(0,fe.P)(Mt=>!0!==Mt,!0))}(Ye,un,Se,Ne):(0,c.of)(ni)),(0,F.U)(ni=>({..._e,guardsResult:ni})))})}(this.environmentInjector,Mn=>this.events.next(Mn)),(0,$e.b)(Mn=>{if(Ye.guardsResult=Mn.guardsResult,Ot(Mn.guardsResult))throw Nc(0,Mn.guardsResult);const ni=new jl(Mn.id,this.urlSerializer.serialize(Mn.extractedUrl),this.urlSerializer.serialize(Mn.urlAfterRedirects),Mn.targetSnapshot,!!Mn.guardsResult);this.events.next(ni)}),(0,ce.h)(Mn=>!!Mn.guardsResult||(_e.restoreHistory(Mn),this.cancelNavigationTransition(Mn,"",3),!1)),fs(Mn=>{if(Mn.guards.canActivateChecks.length)return(0,c.of)(Mn).pipe((0,$e.b)(ni=>{const zi=new gl(ni.id,this.urlSerializer.serialize(ni.extractedUrl),this.urlSerializer.serialize(ni.urlAfterRedirects),ni.targetSnapshot);this.events.next(zi)}),(0,X.w)(ni=>{let zi=!1;return(0,c.of)(ni).pipe(function Nt(Se,Ne){return(0,se.zg)(_e=>{const{targetSnapshot:Ye,guards:{canActivateChecks:Mt}}=_e;if(!Mt.length)return(0,c.of)(_e);let un=0;return(0,a.D)(Mt).pipe((0,Te.b)(Mn=>function tt(Se,Ne,_e,Ye){const Mt=Se.routeConfig,un=Se._resolve;return void 0!==Mt?.title&&!Ri(Mt)&&(un[qt]=Mt.title),function tn(Se,Ne,_e,Ye){const Mt=function Xn(Se){return[...Object.keys(Se),...Object.getOwnPropertySymbols(Se)]}(Se);if(0===Mt.length)return(0,c.of)({});const un={};return(0,a.D)(Mt).pipe((0,se.zg)(Mn=>function bi(Se,Ne,_e,Ye){const Mt=tl(Ne)??Ye,un=ba(Se,Mt);return ht(un.resolve?un.resolve(Ne,_e):Mt.runInContext(()=>un(Ne,_e)))}(Se[Mn],Ne,_e,Ye).pipe((0,fe.P)(),(0,$e.b)(ni=>{un[Mn]=ni}))),(0,Pt.h)(1),(0,it.h)(un),(0,ge.K)(Mn=>To(Mn)?M.E:(0,U._)(Mn)))}(un,Se,Ne,Ye).pipe((0,F.U)(Mn=>(Se._resolvedData=Mn,Se.data=Ze(Se,_e).resolve,Mt&&Ri(Mt)&&(Se.data[qt]=Mt.title),null)))}(Mn.route,Ye,Se,Ne)),(0,$e.b)(()=>un++),(0,Pt.h)(1),(0,se.zg)(Mn=>un===Mt.length?(0,c.of)(_e):M.E))})}(_e.paramsInheritanceStrategy,this.environmentInjector),(0,$e.b)({next:()=>zi=!0,complete:()=>{zi||(_e.restoreHistory(ni),this.cancelNavigationTransition(ni,"",2))}}))}),(0,$e.b)(ni=>{const zi=new qa(ni.id,this.urlSerializer.serialize(ni.extractedUrl),this.urlSerializer.serialize(ni.urlAfterRedirects),ni.targetSnapshot);this.events.next(zi)}))}),fs(Mn=>{const ni=zi=>{const Wo=[];zi.routeConfig?.loadComponent&&!zi.routeConfig._loadedComponent&&Wo.push(this.configLoader.loadComponent(zi.routeConfig).pipe((0,$e.b)(Qo=>{zi.component=Qo}),(0,F.U)(()=>{})));for(const Qo of zi.children)Wo.push(...ni(Qo));return Wo};return(0,f.aj)(ni(Mn.targetSnapshot.root)).pipe((0,Le.d)(),(0,de.q)(1))}),fs(()=>this.afterPreactivation()),(0,F.U)(Mn=>{const ni=function qs(Se,Ne,_e){const Ye=Js(Se,Ne._root,_e?_e._root:void 0);return new io(Ye,Ne)}(_e.routeReuseStrategy,Mn.targetSnapshot,Mn.currentRouterState);return Ye={...Mn,targetRouterState:ni}}),(0,$e.b)(Mn=>{_e.currentUrlTree=Mn.urlAfterRedirects,_e.rawUrlTree=_e.urlHandlingStrategy.merge(Mn.urlAfterRedirects,Mn.rawUrl),_e.routerState=Mn.targetRouterState,"deferred"===_e.urlUpdateStrategy&&(Mn.extras.skipLocationChange||_e.setBrowserUrl(_e.rawUrlTree,Mn),_e.browserUrlTree=Mn.urlAfterRedirects)}),((Se,Ne,_e)=>(0,F.U)(Ye=>(new dc(Ne,Ye.targetRouterState,Ye.currentRouterState,_e).activate(Se),Ye)))(this.rootContexts,_e.routeReuseStrategy,Mn=>this.events.next(Mn)),(0,de.q)(1),(0,$e.b)({next:Mn=>{Mt=!0,this.lastSuccessfulNavigation=this.currentNavigation,_e.navigated=!0,this.events.next(new jo(Mn.id,this.urlSerializer.serialize(Mn.extractedUrl),this.urlSerializer.serialize(_e.currentUrlTree))),_e.titleStrategy?.updateTitle(Mn.targetRouterState.snapshot),Mn.resolve(!0)},complete:()=>{Mt=!0}}),(0,Xt.x)(()=>{Mt||un||this.cancelNavigationTransition(Ye,"",1),this.currentNavigation?.id===Ye.id&&(this.currentNavigation=null)}),(0,ge.K)(Mn=>{if(un=!0,Kc(Mn)){Ol(Mn)||(_e.navigated=!0,_e.restoreHistory(Ye,!0));const ni=new ss(Ye.id,this.urlSerializer.serialize(Ye.extractedUrl),Mn.message,Mn.cancellationCode);if(this.events.next(ni),Ol(Mn)){const zi=_e.urlHandlingStrategy.merge(Mn.url,_e.rawUrlTree),Wo={skipLocationChange:Ye.extras.skipLocationChange,replaceUrl:"eager"===_e.urlUpdateStrategy||rn(Ye.source)};_e.scheduleNavigation(zi,go,null,Wo,{resolve:Ye.resolve,reject:Ye.reject,promise:Ye.promise})}else Ye.resolve(!1)}else{_e.restoreHistory(Ye,!0);const ni=new Is(Ye.id,this.urlSerializer.serialize(Ye.extractedUrl),Mn,Ye.targetSnapshot??void 0);this.events.next(ni);try{Ye.resolve(_e.errorHandler(Mn))}catch(zi){Ye.reject(zi)}}return M.E}))}))}cancelNavigationTransition(_e,Ye,Mt){const un=new ss(_e.id,this.urlSerializer.serialize(_e.extractedUrl),Ye,Mt);this.events.next(un),_e.resolve(!1)}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})();function rn(Se){return Se!==go}let Jl=(()=>{class Se{buildTitle(_e){let Ye,Mt=_e.root;for(;void 0!==Mt;)Ye=this.getResolvedTitleForRoute(Mt)??Ye,Mt=Mt.children.find(un=>un.outlet===At);return Ye}getResolvedTitleForRoute(_e){return _e.data[qt]}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:function(){return(0,r.f3M)(le)},providedIn:"root"}),Se})(),le=(()=>{class Se extends Jl{constructor(_e){super(),this.title=_e}updateTitle(_e){const Ye=this.buildTitle(_e);void 0!==Ye&&this.title.setTitle(Ye)}}return Se.\u0275fac=function(_e){return new(_e||Se)(r.LFG(Rn.Dx))},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})(),ae=(()=>{class Se{}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:function(){return(0,r.f3M)(Ve)},providedIn:"root"}),Se})();class De{shouldDetach(Ne){return!1}store(Ne,_e){}shouldAttach(Ne){return!1}retrieve(Ne){return null}shouldReuseRoute(Ne,_e){return Ne.routeConfig===_e.routeConfig}}let Ve=(()=>{class Se extends De{}return Se.\u0275fac=function(){let Ne;return function(Ye){return(Ne||(Ne=r.n5z(Se)))(Ye||Se)}}(),Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})();const zt=new r.OlP("",{providedIn:"root",factory:()=>({})});let Qt=(()=>{class Se{}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:function(){return(0,r.f3M)(Gn)},providedIn:"root"}),Se})(),Gn=(()=>{class Se{shouldProcessUrl(_e){return!0}extract(_e){return _e}merge(_e,Ye){return _e}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})();function Nr(Se){throw Se}function Mi(Se,Ne,_e){return Ne.parse("/")}const ao={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},Jo={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let rs=(()=>{class Se{get navigationId(){return this.navigationTransitions.navigationId}get browserPageId(){if("computed"===this.canceledNavigationResolution)return this.location.getState()?.\u0275routerPageId}get events(){return this.navigationTransitions.events}constructor(){this.disposed=!1,this.currentPageId=0,this.console=(0,r.f3M)(r.c2e),this.isNgZoneEnabled=!1,this.options=(0,r.f3M)(zt,{optional:!0})||{},this.errorHandler=this.options.errorHandler||Nr,this.malformedUriErrorHandler=this.options.malformedUriErrorHandler||Mi,this.navigated=!1,this.lastSuccessfulId=-1,this.urlHandlingStrategy=(0,r.f3M)(Qt),this.routeReuseStrategy=(0,r.f3M)(ae),this.urlCreationStrategy=(0,r.f3M)(Xo),this.titleStrategy=(0,r.f3M)(Jl),this.onSameUrlNavigation=this.options.onSameUrlNavigation||"ignore",this.paramsInheritanceStrategy=this.options.paramsInheritanceStrategy||"emptyOnly",this.urlUpdateStrategy=this.options.urlUpdateStrategy||"deferred",this.canceledNavigationResolution=this.options.canceledNavigationResolution||"replace",this.config=ir((0,r.f3M)(Ra,{optional:!0})??[]),this.navigationTransitions=(0,r.f3M)(Qa),this.urlSerializer=(0,r.f3M)(qr),this.location=(0,r.f3M)(J.Ye),this.isNgZoneEnabled=(0,r.f3M)(r.R0b)instanceof r.R0b&&r.R0b.isInAngularZone(),this.resetConfig(this.config),this.currentUrlTree=new ii,this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.routerState=gt(this.currentUrlTree,null),this.navigationTransitions.setupNavigations(this).subscribe(_e=>{this.lastSuccessfulId=_e.id,this.currentPageId=this.browserPageId??0},_e=>{this.console.warn(`Unhandled Navigation Error: ${_e}`)})}resetRootComponentType(_e){this.routerState.root.component=_e,this.navigationTransitions.rootComponentType=_e}initialNavigation(){if(this.setUpLocationChangeListener(),!this.navigationTransitions.hasRequestedNavigation){const _e=this.location.getState();this.navigateToSyncWithBrowser(this.location.path(!0),go,_e)}}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(_e=>{const Ye="popstate"===_e.type?"popstate":"hashchange";"popstate"===Ye&&setTimeout(()=>{this.navigateToSyncWithBrowser(_e.url,Ye,_e.state)},0)}))}navigateToSyncWithBrowser(_e,Ye,Mt){const un={replaceUrl:!0},Mn=Mt?.navigationId?Mt:null;if(Mt){const zi={...Mt};delete zi.navigationId,delete zi.\u0275routerPageId,0!==Object.keys(zi).length&&(un.state=zi)}const ni=this.parseUrl(_e);this.scheduleNavigation(ni,Ye,Mn,un)}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.navigationTransitions.currentNavigation}resetConfig(_e){this.config=_e.map($u),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.navigationTransitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(_e,Ye={}){const{relativeTo:Mt,queryParams:un,fragment:Mn,queryParamsHandling:ni,preserveFragment:zi}=Ye,Wo=zi?this.currentUrlTree.fragment:Mn;let Qo=null;switch(ni){case"merge":Qo={...this.currentUrlTree.queryParams,...un};break;case"preserve":Qo=this.currentUrlTree.queryParams;break;default:Qo=un||null}return null!==Qo&&(Qo=this.removeEmptyProps(Qo)),this.urlCreationStrategy.createUrlTree(Mt,this.routerState,this.currentUrlTree,_e,Qo,Wo??null)}navigateByUrl(_e,Ye={skipLocationChange:!1}){const Mt=Ot(_e)?_e:this.parseUrl(_e),un=this.urlHandlingStrategy.merge(Mt,this.rawUrlTree);return this.scheduleNavigation(un,go,null,Ye)}navigate(_e,Ye={skipLocationChange:!1}){return function ys(Se){for(let Ne=0;Ne<Se.length;Ne++){const _e=Se[Ne];if(null==_e)throw new r.vHH(4008,false)}}(_e),this.navigateByUrl(this.createUrlTree(_e,Ye),Ye)}serializeUrl(_e){return this.urlSerializer.serialize(_e)}parseUrl(_e){let Ye;try{Ye=this.urlSerializer.parse(_e)}catch(Mt){Ye=this.malformedUriErrorHandler(Mt,this.urlSerializer,_e)}return Ye}isActive(_e,Ye){let Mt;if(Mt=!0===Ye?{...ao}:!1===Ye?{...Jo}:Ye,Ot(_e))return jn(this.currentUrlTree,_e,Mt);const un=this.parseUrl(_e);return jn(this.currentUrlTree,un,Mt)}removeEmptyProps(_e){return Object.keys(_e).reduce((Ye,Mt)=>{const un=_e[Mt];return null!=un&&(Ye[Mt]=un),Ye},{})}scheduleNavigation(_e,Ye,Mt,un,Mn){if(this.disposed)return Promise.resolve(!1);let ni,zi,Wo,Qo;return Mn?(ni=Mn.resolve,zi=Mn.reject,Wo=Mn.promise):Wo=new Promise((ya,Bl)=>{ni=ya,zi=Bl}),Qo="computed"===this.canceledNavigationResolution?Mt&&Mt.\u0275routerPageId?Mt.\u0275routerPageId:(this.browserPageId??0)+1:0,this.navigationTransitions.handleNavigationRequest({targetPageId:Qo,source:Ye,restoredState:Mt,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,rawUrl:_e,extras:un,resolve:ni,reject:zi,promise:Wo,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),Wo.catch(ya=>Promise.reject(ya))}setBrowserUrl(_e,Ye){const Mt=this.urlSerializer.serialize(_e);if(this.location.isCurrentPathEqualTo(Mt)||Ye.extras.replaceUrl){const Mn={...Ye.extras.state,...this.generateNgRouterState(Ye.id,this.browserPageId)};this.location.replaceState(Mt,"",Mn)}else{const un={...Ye.extras.state,...this.generateNgRouterState(Ye.id,Ye.targetPageId)};this.location.go(Mt,"",un)}}restoreHistory(_e,Ye=!1){if("computed"===this.canceledNavigationResolution){const un=this.currentPageId-(this.browserPageId??this.currentPageId);0!==un?this.location.historyGo(un):this.currentUrlTree===this.getCurrentNavigation()?.finalUrl&&0===un&&(this.resetState(_e),this.browserUrlTree=_e.currentUrlTree,this.resetUrlToCurrentUrlTree())}else"replace"===this.canceledNavigationResolution&&(Ye&&this.resetState(_e),this.resetUrlToCurrentUrlTree())}resetState(_e){this.routerState=_e.currentRouterState,this.currentUrlTree=_e.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,_e.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}generateNgRouterState(_e,Ye){return"computed"===this.canceledNavigationResolution?{navigationId:_e,\u0275routerPageId:Ye}:{navigationId:_e}}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})(),Ps=(()=>{class Se{constructor(_e,Ye,Mt,un,Mn,ni){this.router=_e,this.route=Ye,this.tabIndexAttribute=Mt,this.renderer=un,this.el=Mn,this.locationStrategy=ni,this._preserveFragment=!1,this._skipLocationChange=!1,this._replaceUrl=!1,this.href=null,this.commands=null,this.onChanges=new $.xQ;const zi=Mn.nativeElement.tagName?.toLowerCase();this.isAnchorElement="a"===zi||"area"===zi,this.isAnchorElement?this.subscription=_e.events.subscribe(Wo=>{Wo instanceof jo&&this.updateHref()}):this.setTabIndexIfNotOnNativeEl("0")}set preserveFragment(_e){this._preserveFragment=(0,r.D6c)(_e)}get preserveFragment(){return this._preserveFragment}set skipLocationChange(_e){this._skipLocationChange=(0,r.D6c)(_e)}get skipLocationChange(){return this._skipLocationChange}set replaceUrl(_e){this._replaceUrl=(0,r.D6c)(_e)}get replaceUrl(){return this._replaceUrl}setTabIndexIfNotOnNativeEl(_e){null!=this.tabIndexAttribute||this.isAnchorElement||this.applyAttributeValue("tabindex",_e)}ngOnChanges(_e){this.isAnchorElement&&this.updateHref(),this.onChanges.next(this)}set routerLink(_e){null!=_e?(this.commands=Array.isArray(_e)?_e:[_e],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(_e,Ye,Mt,un,Mn){return!!(null===this.urlTree||this.isAnchorElement&&(0!==_e||Ye||Mt||un||Mn||"string"==typeof this.target&&"_self"!=this.target))||(this.router.navigateByUrl(this.urlTree,{skipLocationChange:this.skipLocationChange,replaceUrl:this.replaceUrl,state:this.state}),!this.isAnchorElement)}ngOnDestroy(){this.subscription?.unsubscribe()}updateHref(){this.href=null!==this.urlTree&&this.locationStrategy?this.locationStrategy?.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null;const _e=null===this.href?null:(0,r.P3R)(this.href,this.el.nativeElement.tagName.toLowerCase(),"href");this.applyAttributeValue("href",_e)}applyAttributeValue(_e,Ye){const Mt=this.renderer,un=this.el.nativeElement;null!==Ye?Mt.setAttribute(un,_e,Ye):Mt.removeAttribute(un,_e)}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:this.preserveFragment})}}return Se.\u0275fac=function(_e){return new(_e||Se)(r.Y36(rs),r.Y36(ie),r.$8M("tabindex"),r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(J.S$))},Se.\u0275dir=r.lG2({type:Se,selectors:[["","routerLink",""]],hostVars:1,hostBindings:function(_e,Ye){1&_e&&r.NdJ("click",function(un){return Ye.onClick(un.button,un.ctrlKey,un.shiftKey,un.altKey,un.metaKey)}),2&_e&&r.uIk("target",Ye.target)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",state:"state",relativeTo:"relativeTo",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",routerLink:"routerLink"},standalone:!0,features:[r.TTD]}),Se})(),Ul=(()=>{class Se{get isActive(){return this._isActive}constructor(_e,Ye,Mt,un,Mn){this.router=_e,this.element=Ye,this.renderer=Mt,this.cdr=un,this.link=Mn,this.classes=[],this._isActive=!1,this.routerLinkActiveOptions={exact:!1},this.isActiveChange=new r.vpe,this.routerEventsSubscription=_e.events.subscribe(ni=>{ni instanceof jo&&this.update()})}ngAfterContentInit(){(0,c.of)(this.links.changes,(0,c.of)(null)).pipe((0,pn.J)()).subscribe(_e=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){this.linkInputChangesSubscription?.unsubscribe();const _e=[...this.links.toArray(),this.link].filter(Ye=>!!Ye).map(Ye=>Ye.onChanges);this.linkInputChangesSubscription=(0,a.D)(_e).pipe((0,pn.J)()).subscribe(Ye=>{this._isActive!==this.isLinkActive(this.router)(Ye)&&this.update()})}set routerLinkActive(_e){const Ye=Array.isArray(_e)?_e:_e.split(" ");this.classes=Ye.filter(Mt=>!!Mt)}ngOnChanges(_e){this.update()}ngOnDestroy(){this.routerEventsSubscription.unsubscribe(),this.linkInputChangesSubscription?.unsubscribe()}update(){!this.links||!this.router.navigated||Promise.resolve().then(()=>{const _e=this.hasActiveLinks();this._isActive!==_e&&(this._isActive=_e,this.cdr.markForCheck(),this.classes.forEach(Ye=>{_e?this.renderer.addClass(this.element.nativeElement,Ye):this.renderer.removeClass(this.element.nativeElement,Ye)}),_e&&void 0!==this.ariaCurrentWhenActive?this.renderer.setAttribute(this.element.nativeElement,"aria-current",this.ariaCurrentWhenActive.toString()):this.renderer.removeAttribute(this.element.nativeElement,"aria-current"),this.isActiveChange.emit(_e))})}isLinkActive(_e){const Ye=function eu(Se){return!!Se.paths}(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return Mt=>!!Mt.urlTree&&_e.isActive(Mt.urlTree,Ye)}hasActiveLinks(){const _e=this.isLinkActive(this.router);return this.link&&_e(this.link)||this.links.some(_e)}}return Se.\u0275fac=function(_e){return new(_e||Se)(r.Y36(rs),r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(r.sBO),r.Y36(Ps,8))},Se.\u0275dir=r.lG2({type:Se,selectors:[["","routerLinkActive",""]],contentQueries:function(_e,Ye,Mt){if(1&_e&&r.Suo(Mt,Ps,5),2&_e){let un;r.iGM(un=r.CRH())&&(Ye.links=un)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",ariaCurrentWhenActive:"ariaCurrentWhenActive",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],standalone:!0,features:[r.TTD]}),Se})();class mu{}let wu=(()=>{class Se{preload(_e,Ye){return Ye().pipe((0,ge.K)(()=>(0,c.of)(null)))}}return Se.\u0275fac=function(_e){return new(_e||Se)},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})(),fu=(()=>{class Se{constructor(_e,Ye,Mt,un,Mn){this.router=_e,this.injector=Mt,this.preloadingStrategy=un,this.loader=Mn}setUpPreloading(){this.subscription=this.router.events.pipe((0,ce.h)(_e=>_e instanceof jo),(0,Te.b)(()=>this.preload())).subscribe(()=>{})}preload(){return this.processRoutes(this.injector,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(_e,Ye){const Mt=[];for(const un of Ye){un.providers&&!un._injector&&(un._injector=(0,r.MMx)(un.providers,_e,`Route: ${un.path}`));const Mn=un._injector??_e,ni=un._loadedInjector??Mn;(un.loadChildren&&!un._loadedRoutes&&void 0===un.canLoad||un.loadComponent&&!un._loadedComponent)&&Mt.push(this.preloadConfig(Mn,un)),(un.children||un._loadedRoutes)&&Mt.push(this.processRoutes(ni,un.children??un._loadedRoutes))}return(0,a.D)(Mt).pipe((0,pn.J)())}preloadConfig(_e,Ye){return this.preloadingStrategy.preload(Ye,()=>{let Mt;Mt=Ye.loadChildren&&void 0===Ye.canLoad?this.loader.loadChildren(_e,Ye):(0,c.of)(null);const un=Mt.pipe((0,se.zg)(Mn=>null===Mn?(0,c.of)(void 0):(Ye._loadedRoutes=Mn.routes,Ye._loadedInjector=Mn.injector,this.processRoutes(Mn.injector??_e,Mn.routes))));if(Ye.loadComponent&&!Ye._loadedComponent){const Mn=this.loader.loadComponent(Ye);return(0,a.D)([un,Mn]).pipe((0,pn.J)())}return un})}}return Se.\u0275fac=function(_e){return new(_e||Se)(r.LFG(rs),r.LFG(r.Sil),r.LFG(r.lqb),r.LFG(mu),r.LFG(Vs))},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac,providedIn:"root"}),Se})();const qc=new r.OlP("");let $c=(()=>{class Se{constructor(_e,Ye,Mt,un,Mn={}){this.urlSerializer=_e,this.transitions=Ye,this.viewportScroller=Mt,this.zone=un,this.options=Mn,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},Mn.scrollPositionRestoration=Mn.scrollPositionRestoration||"disabled",Mn.anchorScrolling=Mn.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.transitions.events.subscribe(_e=>{_e instanceof ts?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=_e.navigationTrigger,this.restoredId=_e.restoredState?_e.restoredState.navigationId:0):_e instanceof jo&&(this.lastId=_e.id,this.scheduleScrollEvent(_e,this.urlSerializer.parse(_e.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.transitions.events.subscribe(_e=>{_e instanceof hs&&(_e.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(_e.position):_e.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(_e.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(_e,Ye){this.zone.runOutsideAngular(()=>{setTimeout(()=>{this.zone.run(()=>{this.transitions.events.next(new hs(_e,"popstate"===this.lastSource?this.store[this.restoredId]:null,Ye))})},0)})}ngOnDestroy(){this.routerEventsSubscription?.unsubscribe(),this.scrollEventsSubscription?.unsubscribe()}}return Se.\u0275fac=function(_e){r.$Z()},Se.\u0275prov=r.Yz7({token:Se,factory:Se.\u0275fac}),Se})();var pu=(()=>((pu=pu||{})[pu.COMPLETE=0]="COMPLETE",pu[pu.FAILED=1]="FAILED",pu[pu.REDIRECTING=2]="REDIRECTING",pu))();const La=!1;function xa(Se,Ne){return{\u0275kind:Se,\u0275providers:Ne}}const Tu=new r.OlP("",{providedIn:"root",factory:()=>!1});function Va(){const Se=(0,r.f3M)(r.zs3);return Ne=>{const _e=Se.get(r.z2F);if(Ne!==_e.components[0])return;const Ye=Se.get(rs),Mt=Se.get(Os);1===Se.get(Cu)&&Ye.initialNavigation(),Se.get(ud,null,r.XFs.Optional)?.setUpPreloading(),Se.get(qc,null,r.XFs.Optional)?.init(),Ye.resetRootComponentType(_e.componentTypes[0]),Mt.closed||(Mt.next(),Mt.complete(),Mt.unsubscribe())}}const Os=new r.OlP(La?"bootstrap done indicator":"",{factory:()=>new $.xQ}),Cu=new r.OlP(La?"initial navigation":"",{providedIn:"root",factory:()=>1});function Vu(){let Se=[];return Se=La?[{provide:r.Xts,multi:!0,useFactory:()=>{const Ne=(0,r.f3M)(rs);return()=>Ne.events.subscribe(_e=>{console.group?.(`Router Event: ${_e.constructor.name}`),console.log(function $s(Se){if(!("type"in Se))return`Unknown Router Event: ${Se.constructor.name}`;switch(Se.type){case 14:return`ActivationEnd(path: '${Se.snapshot.routeConfig?.path||""}')`;case 13:return`ActivationStart(path: '${Se.snapshot.routeConfig?.path||""}')`;case 12:return`ChildActivationEnd(path: '${Se.snapshot.routeConfig?.path||""}')`;case 11:return`ChildActivationStart(path: '${Se.snapshot.routeConfig?.path||""}')`;case 8:return`GuardsCheckEnd(id: ${Se.id}, url: '${Se.url}', urlAfterRedirects: '${Se.urlAfterRedirects}', state: ${Se.state}, shouldActivate: ${Se.shouldActivate})`;case 7:return`GuardsCheckStart(id: ${Se.id}, url: '${Se.url}', urlAfterRedirects: '${Se.urlAfterRedirects}', state: ${Se.state})`;case 2:return`NavigationCancel(id: ${Se.id}, url: '${Se.url}')`;case 16:return`NavigationSkipped(id: ${Se.id}, url: '${Se.url}')`;case 1:return`NavigationEnd(id: ${Se.id}, url: '${Se.url}', urlAfterRedirects: '${Se.urlAfterRedirects}')`;case 3:return`NavigationError(id: ${Se.id}, url: '${Se.url}', error: ${Se.error})`;case 0:return`NavigationStart(id: ${Se.id}, url: '${Se.url}')`;case 6:return`ResolveEnd(id: ${Se.id}, url: '${Se.url}', urlAfterRedirects: '${Se.urlAfterRedirects}', state: ${Se.state})`;case 5:return`ResolveStart(id: ${Se.id}, url: '${Se.url}', urlAfterRedirects: '${Se.urlAfterRedirects}', state: ${Se.state})`;case 10:return`RouteConfigLoadEnd(path: ${Se.route.path})`;case 9:return`RouteConfigLoadStart(path: ${Se.route.path})`;case 4:return`RoutesRecognized(id: ${Se.id}, url: '${Se.url}', urlAfterRedirects: '${Se.urlAfterRedirects}', state: ${Se.state})`;case 15:return`Scroll(anchor: '${Se.anchor}', position: '${Se.position?`${Se.position[0]}, ${Se.position[1]}`:null}')`}}(_e)),console.log(_e),console.groupEnd?.()})}}]:[],xa(1,Se)}const ud=new r.OlP(La?"router preloader":"");function md(Se){return xa(0,[{provide:ud,useExisting:fu},{provide:mu,useExisting:Se}])}const Uc=!1,Tp=new r.OlP(Uc?"router duplicate forRoot guard":"ROUTER_FORROOT_GUARD"),ip=[J.Ye,{provide:qr,useClass:Hi},rs,au,{provide:ie,useFactory:function rl(Se){return Se.routerState.root},deps:[rs]},Vs,Uc?{provide:Tu,useValue:!0}:[]];function Hd(){return new r.PXZ("Router",rs)}let Bf=(()=>{class Se{constructor(_e){}static forRoot(_e,Ye){return{ngModule:Se,providers:[ip,Uc&&Ye?.enableTracing?Vu().\u0275providers:[],{provide:Ra,multi:!0,useValue:_e},{provide:Tp,useFactory:xf,deps:[[rs,new r.FiY,new r.tp0]]},{provide:zt,useValue:Ye||{}},Ye?.useHash?{provide:J.S$,useClass:J.Do}:{provide:J.S$,useClass:J.b0},{provide:qc,useFactory:()=>{const Se=(0,r.f3M)(J.EM),Ne=(0,r.f3M)(r.R0b),_e=(0,r.f3M)(zt),Ye=(0,r.f3M)(Qa),Mt=(0,r.f3M)(qr);return _e.scrollOffset&&Se.setOffset(_e.scrollOffset),new $c(Mt,Ye,Se,Ne,_e)}},Ye?.preloadingStrategy?md(Ye.preloadingStrategy).\u0275providers:[],{provide:r.PXZ,multi:!0,useFactory:Hd},Ye?.initialNavigation?_u(Ye):[],[{provide:Ud,useFactory:Va},{provide:r.tb,multi:!0,useExisting:Ud}]]}}static forChild(_e){return{ngModule:Se,providers:[{provide:Ra,multi:!0,useValue:_e}]}}}return Se.\u0275fac=function(_e){return new(_e||Se)(r.LFG(Tp,8))},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[oc]}),Se})();function xf(Se){if(Uc&&Se)throw new r.vHH(4007,"The Router was provided more than once. This can happen if 'forRoot' is used outside of the root injector. Lazy loaded modules should use RouterModule.forChild() instead.");return"guarded"}function _u(Se){return["disabled"===Se.initialNavigation?xa(3,[{provide:r.ip1,multi:!0,useFactory:()=>{const Ne=(0,r.f3M)(rs);return()=>{Ne.setUpLocationChangeListener()}}},{provide:Cu,useValue:2}]).\u0275providers:[],"enabledBlocking"===Se.initialNavigation?xa(2,[{provide:Cu,useValue:0},{provide:r.ip1,multi:!0,deps:[r.zs3],useFactory:Ne=>{const _e=Ne.get(J.V_,Promise.resolve());return()=>_e.then(()=>new Promise(Ye=>{const Mt=Ne.get(rs),un=Ne.get(Os);(function vc(Se,Ne){Se.events.pipe((0,ce.h)(_e=>_e instanceof jo||_e instanceof ss||_e instanceof Is||_e instanceof gs),(0,F.U)(_e=>_e instanceof jo||_e instanceof gs?pu.COMPLETE:_e instanceof ss&&(0===_e.code||1===_e.code)?pu.REDIRECTING:pu.FAILED),(0,ce.h)(_e=>_e!==pu.REDIRECTING),(0,de.q)(1)).subscribe(()=>{Ne()})})(Mt,()=>{Ye(!0)}),Ne.get(Qa).afterPreactivation=()=>(Ye(!0),un.closed?(0,c.of)(void 0):un),Mt.initialNavigation()}))}}]).\u0275providers:[]]}const Ud=new r.OlP(Uc?"Router Initializer":"")},51389:(E,C,s)=>{"use strict";s.d(C,{Kz:()=>Ap,xm:()=>ld,_A:()=>Hc,vL:()=>Qo,_D:()=>pu,lQ:()=>gd,VL:()=>Re,M:()=>lp,jt:()=>jd,TH:()=>l_,Vi:()=>u_,XC:()=>Qh,iD:()=>jf,J4:()=>ee,FF:()=>d_,Pz:()=>Td,uN:()=>up,nv:()=>jp,Is:()=>Dh,Vx:()=>Ta,tO:()=>gf,Oz:()=>Cc,Dy:()=>vf,o8:()=>x_,AX:()=>kf,dT:()=>Jf,Ly:()=>Rp,ZQ:()=>dp,Pm:()=>Sf,UL:()=>Vp,_L:()=>em,xI:()=>I_,HK:()=>_p,dR:()=>Im,ZS:()=>vd});var r=s(64537),a=s(70882),c=s(59193),u=s(25917),e=s(79765),f=s(22759),m=s(46797),T=s(59796),M=s(56693),w=s(55197),D=s(53960);function U(...I){if(1===I.length){if(!(0,T.k)(I[0]))return I[0];I=I[0]}return(0,M.n)(I,void 0).lift(new W)}class W{call(re,S){return S.subscribe(new $(re))}}class $ extends w.L{constructor(re){super(re),this.hasFirst=!1,this.observables=[],this.subscriptions=[]}_next(re){this.observables.push(re)}_complete(){const re=this.observables,S=re.length;if(0===S)this.destination.complete();else{for(let z=0;z<S&&!this.hasFirst;z++){const ut=(0,D.D)(this,re[z],void 0,z);this.subscriptions&&this.subscriptions.push(ut),this.add(ut)}this.observables=null}}notifyNext(re,S,z){if(!this.hasFirst){this.hasFirst=!0;for(let Oe=0;Oe<this.subscriptions.length;Oe++)if(Oe!==z){let ut=this.subscriptions[Oe];ut.unsubscribe(),this.remove(ut)}this.subscriptions=null}this.destination.next(S)}}var J=s(26215),de=(s(9112),s(17757),s(77393)),V=s(20377),ce=s(85345);function se(...I){const re=I[I.length-1];return"function"==typeof re&&I.pop(),(0,M.n)(I,void 0).lift(new fe(re))}class fe{constructor(re){this.resultSelector=re}call(re,S){return S.subscribe(new Te(re,this.resultSelector))}}class Te extends de.L{constructor(re,S,z=Object.create(null)){super(re),this.resultSelector=S,this.iterators=[],this.active=0,this.resultSelector="function"==typeof S?S:void 0}_next(re){const S=this.iterators;(0,T.k)(re)?S.push(new ge(re)):S.push("function"==typeof re[V.hZ]?new $e(re[V.hZ]()):new Et(this.destination,this,re))}_complete(){const re=this.iterators,S=re.length;if(this.unsubscribe(),0!==S){this.active=S;for(let z=0;z<S;z++){let Oe=re[z];Oe.stillUnsubscribed?this.destination.add(Oe.subscribe()):this.active--}}else this.destination.complete()}notifyInactive(){this.active--,0===this.active&&this.destination.complete()}checkIterators(){const re=this.iterators,S=re.length,z=this.destination;for(let On=0;On<S;On++){let Ar=re[On];if("function"==typeof Ar.hasValue&&!Ar.hasValue())return}let Oe=!1;const ut=[];for(let On=0;On<S;On++){let Ar=re[On],ri=Ar.next();if(Ar.hasCompleted()&&(Oe=!0),ri.done)return void z.complete();ut.push(ri.value)}this.resultSelector?this._tryresultSelector(ut):z.next(ut),Oe&&z.complete()}_tryresultSelector(re){let S;try{S=this.resultSelector.apply(this,re)}catch(z){return void this.destination.error(z)}this.destination.next(S)}}class $e{constructor(re){this.iterator=re,this.nextResult=re.next()}hasValue(){return!0}next(){const re=this.nextResult;return this.nextResult=this.iterator.next(),re}hasCompleted(){const re=this.nextResult;return Boolean(re&&re.done)}}class ge{constructor(re){this.array=re,this.index=0,this.length=0,this.length=re.length}[V.hZ](){return this}next(re){const S=this.index++;return S<this.length?{value:this.array[S],done:!1}:{value:null,done:!0}}hasValue(){return this.array.length>this.index}hasCompleted(){return this.array.length===this.index}}class Et extends ce.Ds{constructor(re,S,z){super(re),this.parent=S,this.observable=z,this.stillUnsubscribed=!0,this.buffer=[],this.isComplete=!1}[V.hZ](){return this}next(){const re=this.buffer;return 0===re.length&&this.isComplete?{value:null,done:!0}:{value:re.shift(),done:!1}}hasValue(){return this.buffer.length>0}hasCompleted(){return 0===this.buffer.length&&this.isComplete}notifyComplete(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()}notifyNext(re){this.buffer.push(re),this.parent.checkIterators()}subscribe(){return(0,ce.ft)(this.observable,new ce.IY(this))}}var ot=s(66682),ct=s(6481),He=s(46782),We=s(45435),Le=s(15257),Pt=s(88002),it=s(39761),Xt=s(87519),cn=s(43190),pn=s(68307);function Rn(...I){return re=>{let S;return"function"==typeof I[I.length-1]&&(S=I.pop()),re.lift(new At(I,S))}}class At{constructor(re,S){this.observables=re,this.project=S}call(re,S){return S.subscribe(new qt(re,this.observables,this.project))}}class qt extends w.L{constructor(re,S,z){super(re),this.observables=S,this.project=z,this.toRespond=[];const Oe=S.length;this.values=new Array(Oe);for(let ut=0;ut<Oe;ut++)this.toRespond.push(ut);for(let ut=0;ut<Oe;ut++)this.add((0,D.D)(this,S[ut],void 0,ut))}notifyNext(re,S,z){this.values[z]=S;const Oe=this.toRespond;if(Oe.length>0){const ut=Oe.indexOf(z);-1!==ut&&Oe.splice(ut,1)}}notifyComplete(){}_next(re){if(0===this.toRespond.length){const S=[re,...this.values];this.project?this._tryProject(S):this.destination.next(S)}}_tryProject(re){let S;try{S=this.project.apply(this,re)}catch(z){return void this.destination.error(z)}this.destination.next(S)}}var sn=s(67460),fn=s(19773);class Kr{constructor(re){this.total=re}call(re,S){return S.subscribe(new Or(re,this.total))}}class Or extends de.L{constructor(re,S){super(re),this.total=S,this.count=0}_next(re){++this.count>this.total&&this.destination.next(re)}}var Lr=s(78345),ir=s(88692),Qr=s(20092),jr={left:"right",right:"left",bottom:"top",top:"bottom"};function br(I){return I.replace(/left|right|bottom|top/g,function(re){return jr[re]})}function ht(I){return I.split("-")[0]}var Wt={start:"end",end:"start"};function Tt(I){return I.replace(/start|end/g,function(re){return Wt[re]})}var wn="top",jn="bottom",hr="right",Oi="left",Wi="auto",so=[wn,jn,hr,Oi],kr="start",Ei="end",ii="clippingParents",mr="viewport",pr="popper",Eo="reference",po=so.reduce(function(I,re){return I.concat([re+"-"+kr,re+"-"+Ei])},[]),$i=[].concat(so,[Wi]).reduce(function(I,re){return I.concat([re,re+"-"+kr,re+"-"+Ei])},[]),an=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function lt(I){if(null==I)return window;if("[object Window]"!==I.toString()){var re=I.ownerDocument;return re&&re.defaultView||window}return I}function Rt(I){return I instanceof lt(I).Element||I instanceof Element}function Pe(I){return I instanceof lt(I).HTMLElement||I instanceof HTMLElement}function qn(I){return!(typeof ShadowRoot>"u")&&(I instanceof lt(I).ShadowRoot||I instanceof ShadowRoot)}function gr(I){return((Rt(I)?I.ownerDocument:I.document)||window.document).documentElement}function Pn(I,re){void 0===re&&(re=!1);var S=I.getBoundingClientRect();return{width:S.width/1,height:S.height/1,top:S.top/1,right:S.right/1,bottom:S.bottom/1,left:S.left/1,x:S.left/1,y:S.top/1}}function _r(I){var re=lt(I);return{scrollLeft:re.pageXOffset,scrollTop:re.pageYOffset}}function Pr(I){return Pn(gr(I)).left+_r(I).scrollLeft}function Zn(I){return lt(I).getComputedStyle(I)}var nr=Math.max,Zt=Math.min,dn=Math.round;function Ot(I){return I?(I.nodeName||"").toLowerCase():null}function mn(I){return"html"===Ot(I)?I:I.assignedSlot||I.parentNode||(qn(I)?I.host:null)||gr(I)}function wr(I){var re=Zn(I);return/auto|scroll|overlay|hidden/.test(re.overflow+re.overflowY+re.overflowX)}function Ti(I){return["html","body","#document"].indexOf(Ot(I))>=0?I.ownerDocument.body:Pe(I)&&wr(I)?I:Ti(mn(I))}function Ci(I,re){var S;void 0===re&&(re=[]);var z=Ti(I),Oe=z===(null==(S=I.ownerDocument)?void 0:S.body),ut=lt(z),On=Oe?[ut].concat(ut.visualViewport||[],wr(z)?z:[]):z,Ar=re.concat(On);return Oe?Ar:Ar.concat(Ci(mn(On)))}function Ai(I){return["table","td","th"].indexOf(Ot(I))>=0}function Ko(I){return Pe(I)&&"fixed"!==Zn(I).position?I.offsetParent:null}function dr(I){for(var re=lt(I),S=Ko(I);S&&Ai(S)&&"static"===Zn(S).position;)S=Ko(S);return S&&("html"===Ot(S)||"body"===Ot(S)&&"static"===Zn(S).position)?re:S||function _s(I){var re=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&Pe(I)&&"fixed"===Zn(I).position)return null;for(var Oe=mn(I);Pe(Oe)&&["html","body"].indexOf(Ot(Oe))<0;){var ut=Zn(Oe);if("none"!==ut.transform||"none"!==ut.perspective||"paint"===ut.contain||-1!==["transform","perspective"].indexOf(ut.willChange)||re&&"filter"===ut.willChange||re&&ut.filter&&"none"!==ut.filter)return Oe;Oe=Oe.parentNode}return null}(I)||re}function Ni(I,re){var S=re.getRootNode&&re.getRootNode();if(I.contains(re))return!0;if(S&&qn(S)){var z=re;do{if(z&&I.isSameNode(z))return!0;z=z.parentNode||z.host}while(z)}return!1}function ti(I){return Object.assign({},I,{left:I.x,top:I.y,right:I.x+I.width,bottom:I.y+I.height})}function wi(I,re){return re===mr?ti(function tr(I){var re=lt(I),S=gr(I),z=re.visualViewport,Oe=S.clientWidth,ut=S.clientHeight,On=0,Ar=0;return z&&(Oe=z.width,ut=z.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(On=z.offsetLeft,Ar=z.offsetTop)),{width:Oe,height:ut,x:On+Pr(I),y:Ar}}(I)):Pe(re)?function Vr(I){var re=Pn(I);return re.top=re.top+I.clientTop,re.left=re.left+I.clientLeft,re.bottom=re.top+I.clientHeight,re.right=re.left+I.clientWidth,re.width=I.clientWidth,re.height=I.clientHeight,re.x=re.left,re.y=re.top,re}(re):ti(function Ge(I){var re,S=gr(I),z=_r(I),Oe=null==(re=I.ownerDocument)?void 0:re.body,ut=nr(S.scrollWidth,S.clientWidth,Oe?Oe.scrollWidth:0,Oe?Oe.clientWidth:0),On=nr(S.scrollHeight,S.clientHeight,Oe?Oe.scrollHeight:0,Oe?Oe.clientHeight:0),Ar=-z.scrollLeft+Pr(I),ri=-z.scrollTop;return"rtl"===Zn(Oe||S).direction&&(Ar+=nr(S.clientWidth,Oe?Oe.clientWidth:0)-ut),{width:ut,height:On,x:Ar,y:ri}}(gr(I)))}function Po(I){return I.split("-")[1]}function ko(I){return["top","bottom"].indexOf(I)>=0?"x":"y"}function Ir(I){var ri,re=I.reference,S=I.element,z=I.placement,Oe=z?ht(z):null,ut=z?Po(z):null,On=re.x+re.width/2-S.width/2,Ar=re.y+re.height/2-S.height/2;switch(Oe){case wn:ri={x:On,y:re.y-S.height};break;case jn:ri={x:On,y:re.y+re.height};break;case hr:ri={x:re.x+re.width,y:Ar};break;case Oi:ri={x:re.x-S.width,y:Ar};break;default:ri={x:re.x,y:re.y}}var Di=Oe?ko(Oe):null;if(null!=Di){var Pi="y"===Di?"height":"width";switch(ut){case kr:ri[Di]=ri[Di]-(re[Pi]/2-S[Pi]/2);break;case Ei:ri[Di]=ri[Di]+(re[Pi]/2-S[Pi]/2)}}return ri}function Vt(I){return Object.assign({},{top:0,right:0,bottom:0,left:0},I)}function bn(I,re){return re.reduce(function(S,z){return S[z]=I,S},{})}function Bn(I,re){void 0===re&&(re={});var z=re.placement,Oe=void 0===z?I.placement:z,ut=re.boundary,On=void 0===ut?ii:ut,Ar=re.rootBoundary,ri=void 0===Ar?mr:Ar,Di=re.elementContext,Pi=void 0===Di?pr:Di,cs=re.altBoundary,Yo=void 0!==cs&&cs,y=re.padding,x=void 0===y?0:y,Y=Vt("number"!=typeof x?x:bn(x,so)),Ke=I.rects.popper,xt=I.elements[Yo?Pi===pr?Eo:pr:Pi],_n=function Vi(I,re,S){var z="clippingParents"===re?function ji(I){var re=Ci(mn(I)),z=["absolute","fixed"].indexOf(Zn(I).position)>=0&&Pe(I)?dr(I):I;return Rt(z)?re.filter(function(Oe){return Rt(Oe)&&Ni(Oe,z)&&"body"!==Ot(Oe)}):[]}(I):[].concat(re),Oe=[].concat(z,[S]),On=Oe.reduce(function(Ar,ri){var Di=wi(I,ri);return Ar.top=nr(Di.top,Ar.top),Ar.right=Zt(Di.right,Ar.right),Ar.bottom=Zt(Di.bottom,Ar.bottom),Ar.left=nr(Di.left,Ar.left),Ar},wi(I,Oe[0]));return On.width=On.right-On.left,On.height=On.bottom-On.top,On.x=On.left,On.y=On.top,On}(Rt(xt)?xt:xt.contextElement||gr(I.elements.popper),On,ri),In=Pn(I.elements.reference),vr=Ir({reference:In,element:Ke,strategy:"absolute",placement:Oe}),Si=ti(Object.assign({},Ke,vr)),Uo=Pi===pr?Si:In,Ds={top:_n.top-Uo.top+Y.top,bottom:Uo.bottom-_n.bottom+Y.bottom,left:_n.left-Uo.left+Y.left,right:Uo.right-_n.right+Y.right},Qi=I.modifiersData.offset;if(Pi===pr&&Qi){var Ls=Qi[Oe];Object.keys(Ds).forEach(function(ia){var oa=[hr,jn].indexOf(ia)>=0?1:-1,di=[wn,jn].indexOf(ia)>=0?"y":"x";Ds[ia]+=Ls[di]*oa})}return Ds}const es={name:"flip",enabled:!0,phase:"main",fn:function go(I){var re=I.state,S=I.options,z=I.name;if(!re.modifiersData[z]._skip){for(var Oe=S.mainAxis,ut=void 0===Oe||Oe,On=S.altAxis,Ar=void 0===On||On,ri=S.fallbackPlacements,Di=S.padding,Pi=S.boundary,cs=S.rootBoundary,Yo=S.altBoundary,y=S.flipVariations,x=void 0===y||y,Y=S.allowedAutoPlacements,be=re.options.placement,Ke=ht(be),_n=ri||(Ke!==be&&x?function _o(I){if(ht(I)===Wi)return[];var re=br(I);return[Tt(I),re,Tt(re)]}(be):[br(be)]),In=[be].concat(_n).reduce(function(Ip,Wp){return Ip.concat(ht(Wp)===Wi?function ci(I,re){void 0===re&&(re={});var Oe=re.boundary,ut=re.rootBoundary,On=re.padding,Ar=re.flipVariations,ri=re.allowedAutoPlacements,Di=void 0===ri?$i:ri,Pi=Po(re.placement),cs=Pi?Ar?po:po.filter(function(x){return Po(x)===Pi}):so,Yo=cs.filter(function(x){return Di.indexOf(x)>=0});0===Yo.length&&(Yo=cs);var y=Yo.reduce(function(x,Y){return x[Y]=Bn(I,{placement:Y,boundary:Oe,rootBoundary:ut,padding:On})[ht(Y)],x},{});return Object.keys(y).sort(function(x,Y){return y[x]-y[Y]})}(re,{placement:Wp,boundary:Pi,rootBoundary:cs,padding:Di,flipVariations:x,allowedAutoPlacements:Y}):Wp)},[]),vr=re.rects.reference,Si=re.rects.popper,Uo=new Map,Ds=!0,Qi=In[0],Ls=0;Ls<In.length;Ls++){var ia=In[Ls],oa=ht(ia),di=Po(ia)===kr,Wr=[wn,jn].indexOf(oa)>=0,si=Wr?"width":"height",no=Bn(re,{placement:ia,boundary:Pi,rootBoundary:cs,altBoundary:Yo,padding:Di}),vo=Wr?di?hr:Oi:di?jn:wn;vr[si]>Si[si]&&(vo=br(vo));var fl=br(vo),Us=[];if(ut&&Us.push(no[oa]<=0),Ar&&Us.push(no[vo]<=0,no[fl]<=0),Us.every(function(Ip){return Ip})){Qi=ia,Ds=!1;break}Uo.set(ia,Us)}if(Ds)for(var Cl=function(Wp){var Lh=In.find(function(dh){var kh=Uo.get(dh);if(kh)return kh.slice(0,Wp).every(function(Fm){return Fm})});if(Lh)return Qi=Lh,"break"},Ia=x?3:1;Ia>0&&"break"!==Cl(Ia);Ia--);re.placement!==Qi&&(re.modifiersData[z]._skip=!0,re.placement=Qi,re.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function jo(I,re,S){return nr(I,Zt(re,S))}function ss(I){var re=Pn(I),S=I.offsetWidth,z=I.offsetHeight;return Math.abs(re.width-S)<=1&&(S=re.width),Math.abs(re.height-z)<=1&&(z=re.height),{x:I.offsetLeft,y:I.offsetTop,width:S,height:z}}const Is={name:"preventOverflow",enabled:!0,phase:"main",fn:function gs(I){var re=I.state,S=I.options,z=I.name,Oe=S.mainAxis,ut=void 0===Oe||Oe,On=S.altAxis,Ar=void 0!==On&&On,Yo=S.tether,y=void 0===Yo||Yo,x=S.tetherOffset,Y=void 0===x?0:x,be=Bn(re,{boundary:S.boundary,rootBoundary:S.rootBoundary,padding:S.padding,altBoundary:S.altBoundary}),Ke=ht(re.placement),xt=Po(re.placement),_n=!xt,In=ko(Ke),vr=function ts(I){return"x"===I?"y":"x"}(In),Si=re.modifiersData.popperOffsets,Uo=re.rects.reference,Ds=re.rects.popper,Qi="function"==typeof Y?Y(Object.assign({},re.rects,{placement:re.placement})):Y,Ls={x:0,y:0};if(Si){if(ut||Ar){var ia="y"===In?wn:Oi,oa="y"===In?jn:hr,di="y"===In?"height":"width",Wr=Si[In],si=Si[In]+be[ia],no=Si[In]-be[oa],vo=y?-Ds[di]/2:0,fl=xt===kr?Uo[di]:Ds[di],Us=xt===kr?-Ds[di]:-Uo[di],ll=re.elements.arrow,Cl=y&&ll?ss(ll):{width:0,height:0},Ia=re.modifiersData["arrow#persistent"]?re.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},bf=Ia[ia],Ip=Ia[oa],Wp=jo(0,Uo[di],Cl[di]),Lh=_n?Uo[di]/2-vo-Wp-bf-Qi:fl-Wp-bf-Qi,dh=_n?-Uo[di]/2+vo+Wp+Ip+Qi:Us+Wp+Ip+Qi,kh=re.elements.arrow&&dr(re.elements.arrow),dg=re.modifiersData.offset?re.modifiersData.offset[re.placement][In]:0,fg=Si[In]+Lh-dg-(kh?"y"===In?kh.clientTop||0:kh.clientLeft||0:0),Lm=Si[In]+dh-dg;if(ut){var pg=jo(y?Zt(si,fg):si,Wr,y?nr(no,Lm):no);Si[In]=pg,Ls[In]=pg-Wr}if(Ar){var Qf=Si[vr],sm=Qf+be["x"===In?wn:Oi],nd=Qf-be["x"===In?jn:hr],Zd=jo(y?Zt(sm,fg):sm,Qf,y?nr(nd,Lm):nd);Si[vr]=Zd,Ls[vr]=Zd-Qf}}re.modifiersData[z]=Ls}},requiresIfExists:["offset"]};const gl={name:"arrow",enabled:!0,phase:"main",fn:function Ro(I){var re,S=I.state,z=I.name,Oe=I.options,ut=S.elements.arrow,On=S.modifiersData.popperOffsets,Ar=ht(S.placement),ri=ko(Ar),Pi=[Oi,hr].indexOf(Ar)>=0?"height":"width";if(ut&&On){var cs=function(re,S){return Vt("number"!=typeof(re="function"==typeof re?re(Object.assign({},S.rects,{placement:S.placement})):re)?re:bn(re,so))}(Oe.padding,S),Yo=ss(ut),y="y"===ri?wn:Oi,x="y"===ri?jn:hr,Y=S.rects.reference[Pi]+S.rects.reference[ri]-On[ri]-S.rects.popper[Pi],be=On[ri]-S.rects.reference[ri],Ke=dr(ut),xt=Ke?"y"===ri?Ke.clientHeight||0:Ke.clientWidth||0:0,Si=xt/2-Yo[Pi]/2+(Y/2-be/2),Uo=jo(cs[y],Si,xt-Yo[Pi]-cs[x]);S.modifiersData[z]=((re={})[ri]=Uo,re.centerOffset=Uo-Si,re)}},effect:function jl(I){var re=I.state,z=I.options.element,Oe=void 0===z?"[data-popper-arrow]":z;null!=Oe&&("string"==typeof Oe&&!(Oe=re.elements.popper.querySelector(Oe))||Ni(re.elements.popper,Oe)&&(re.elements.arrow=Oe))},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Rl(I,re,S){void 0===S&&(S=!1);var z=Pe(re),Oe=Pe(re)&&function $a(I){var re=I.getBoundingClientRect();return 1!==(re.width/I.offsetWidth||1)||1!==(re.height/I.offsetHeight||1)}(re),ut=gr(re),On=Pn(I,Oe),Ar={scrollLeft:0,scrollTop:0},ri={x:0,y:0};return(z||!z&&!S)&&(("body"!==Ot(re)||wr(ut))&&(Ar=function da(I){return I!==lt(I)&&Pe(I)?function qa(I){return{scrollLeft:I.scrollLeft,scrollTop:I.scrollTop}}(I):_r(I)}(re)),Pe(re)?((ri=Pn(re,!0)).x+=re.clientLeft,ri.y+=re.clientTop):ut&&(ri.x=Pr(ut))),{x:On.left+Ar.scrollLeft-ri.x,y:On.top+Ar.scrollTop-ri.y,width:On.width,height:On.height}}function Ji(I){var re=new Map,S=new Set,z=[];function Oe(ut){S.add(ut.name),[].concat(ut.requires||[],ut.requiresIfExists||[]).forEach(function(Ar){if(!S.has(Ar)){var ri=re.get(Ar);ri&&Oe(ri)}}),z.push(ut)}return I.forEach(function(ut){re.set(ut.name,ut)}),I.forEach(function(ut){S.has(ut.name)||Oe(ut)}),z}function Ts(I){var re;return function(){return re||(re=new Promise(function(S){Promise.resolve().then(function(){re=void 0,S(I())})})),re}}var Ja={placement:"bottom",modifiers:[],strategy:"absolute"};function fa(){for(var I=arguments.length,re=new Array(I),S=0;S<I;S++)re[S]=arguments[S];return!re.some(function(z){return!(z&&"function"==typeof z.getBoundingClientRect)})}function Xo(I){void 0===I&&(I={});var S=I.defaultModifiers,z=void 0===S?[]:S,Oe=I.defaultOptions,ut=void 0===Oe?Ja:Oe;return function(Ar,ri,Di){void 0===Di&&(Di=ut);var Pi={placement:"bottom",orderedModifiers:[],options:Object.assign({},Ja,ut),modifiersData:{},elements:{reference:Ar,popper:ri},attributes:{},styles:{}},cs=[],Yo=!1,y={state:Pi,setOptions:function(Ke){var xt="function"==typeof Ke?Ke(Pi.options):Ke;Y(),Pi.options=Object.assign({},ut,Pi.options,xt),Pi.scrollParents={reference:Rt(Ar)?Ci(Ar):Ar.contextElement?Ci(Ar.contextElement):[],popper:Ci(ri)};var _n=function Ha(I){var re=Ji(I);return an.reduce(function(S,z){return S.concat(re.filter(function(Oe){return Oe.phase===z}))},[])}(function hs(I){var re=I.reduce(function(S,z){var Oe=S[z.name];return S[z.name]=Oe?Object.assign({},Oe,z,{options:Object.assign({},Oe.options,z.options),data:Object.assign({},Oe.data,z.data)}):z,S},{});return Object.keys(re).map(function(S){return re[S]})}([].concat(z,Pi.options.modifiers)));return Pi.orderedModifiers=_n.filter(function(ia){return ia.enabled}),function x(){Pi.orderedModifiers.forEach(function(be){var xt=be.options,In=be.effect;if("function"==typeof In){var vr=In({state:Pi,name:be.name,instance:y,options:void 0===xt?{}:xt});cs.push(vr||function(){})}})}(),y.update()},forceUpdate:function(){if(!Yo){var Ke=Pi.elements,xt=Ke.reference,_n=Ke.popper;if(fa(xt,_n)){Pi.rects={reference:Rl(xt,dr(_n),"fixed"===Pi.options.strategy),popper:ss(_n)},Pi.reset=!1,Pi.placement=Pi.options.placement,Pi.orderedModifiers.forEach(function(ia){return Pi.modifiersData[ia.name]=Object.assign({},ia.data)});for(var vr=0;vr<Pi.orderedModifiers.length;vr++)if(!0!==Pi.reset){var Si=Pi.orderedModifiers[vr],Uo=Si.fn,Ds=Si.options;"function"==typeof Uo&&(Pi=Uo({state:Pi,options:void 0===Ds?{}:Ds,name:Si.name,instance:y})||Pi)}else Pi.reset=!1,vr=-1}}},update:Ts(function(){return new Promise(function(be){y.forceUpdate(),be(Pi)})}),destroy:function(){Y(),Yo=!0}};if(!fa(Ar,ri))return y;function Y(){cs.forEach(function(be){return be()}),cs=[]}return y.setOptions(Di).then(function(be){!Yo&&Di.onFirstUpdate&&Di.onFirstUpdate(be)}),y}}var Cs={passive:!0},gt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ie(I){var re,S=I.popper,z=I.popperRect,Oe=I.placement,ut=I.variation,On=I.offsets,Ar=I.position,ri=I.gpuAcceleration,Di=I.adaptive,Pi=I.roundOffsets,cs=!0===Pi?function Tn(I){var S=I.y,Oe=window.devicePixelRatio||1;return{x:dn(dn(I.x*Oe)/Oe)||0,y:dn(dn(S*Oe)/Oe)||0}}(On):"function"==typeof Pi?Pi(On):On,Yo=cs.x,y=void 0===Yo?0:Yo,x=cs.y,Y=void 0===x?0:x,be=On.hasOwnProperty("x"),Ke=On.hasOwnProperty("y"),xt=Oi,_n=wn,In=window;if(Di){var vr=dr(S),Si="clientHeight",Uo="clientWidth";vr===lt(S)&&"static"!==Zn(vr=gr(S)).position&&"absolute"===Ar&&(Si="scrollHeight",Uo="scrollWidth"),(Oe===wn||(Oe===Oi||Oe===hr)&&ut===Ei)&&(_n=jn,Y-=vr[Si]-z.height,Y*=ri?1:-1),(Oe===Oi||(Oe===wn||Oe===jn)&&ut===Ei)&&(xt=hr,y-=vr[Uo]-z.width,y*=ri?1:-1)}var Qi,Ds=Object.assign({position:Ar},Di&&gt);return Object.assign({},Ds,ri?((Qi={})[_n]=Ke?"0":"",Qi[xt]=be?"0":"",Qi.transform=(In.devicePixelRatio||1)<=1?"translate("+y+"px, "+Y+"px)":"translate3d("+y+"px, "+Y+"px, 0)",Qi):((re={})[_n]=Ke?Y+"px":"",re[xt]=be?y+"px":"",re.transform="",re))}var ws=Xo({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function ns(I){var re=I.state,S=I.instance,z=I.options,Oe=z.scroll,ut=void 0===Oe||Oe,On=z.resize,Ar=void 0===On||On,ri=lt(re.elements.popper),Di=[].concat(re.scrollParents.reference,re.scrollParents.popper);return ut&&Di.forEach(function(Pi){Pi.addEventListener("scroll",S.update,Cs)}),Ar&&ri.addEventListener("resize",S.update,Cs),function(){ut&&Di.forEach(function(Pi){Pi.removeEventListener("scroll",S.update,Cs)}),Ar&&ri.removeEventListener("resize",S.update,Cs)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function zr(I){var re=I.state;re.modifiersData[I.name]=Ir({reference:re.rects.reference,element:re.rects.popper,strategy:"absolute",placement:re.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function Ze(I){var re=I.state,S=I.options,z=S.gpuAcceleration,Oe=void 0===z||z,ut=S.adaptive,On=void 0===ut||ut,Ar=S.roundOffsets,ri=void 0===Ar||Ar,Pi={placement:ht(re.placement),variation:Po(re.placement),popper:re.elements.popper,popperRect:re.rects.popper,gpuAcceleration:Oe};null!=re.modifiersData.popperOffsets&&(re.styles.popper=Object.assign({},re.styles.popper,ie(Object.assign({},Pi,{offsets:re.modifiersData.popperOffsets,position:re.options.strategy,adaptive:On,roundOffsets:ri})))),null!=re.modifiersData.arrow&&(re.styles.arrow=Object.assign({},re.styles.arrow,ie(Object.assign({},Pi,{offsets:re.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:ri})))),re.attributes.popper=Object.assign({},re.attributes.popper,{"data-popper-placement":re.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function gn(I){var re=I.state;Object.keys(re.elements).forEach(function(S){var z=re.styles[S]||{},Oe=re.attributes[S]||{},ut=re.elements[S];!Pe(ut)||!Ot(ut)||(Object.assign(ut.style,z),Object.keys(Oe).forEach(function(On){var Ar=Oe[On];!1===Ar?ut.removeAttribute(On):ut.setAttribute(On,!0===Ar?"":Ar)}))})},effect:function vi(I){var re=I.state,S={popper:{position:re.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(re.elements.popper.style,S.popper),re.styles=S,re.elements.arrow&&Object.assign(re.elements.arrow.style,S.arrow),function(){Object.keys(re.elements).forEach(function(z){var Oe=re.elements[z],ut=re.attributes[z]||{},Ar=Object.keys(re.styles.hasOwnProperty(z)?re.styles[z]:S[z]).reduce(function(ri,Di){return ri[Di]="",ri},{});!Pe(Oe)||!Ot(Oe)||(Object.assign(Oe.style,Ar),Object.keys(ut).forEach(function(ri){Oe.removeAttribute(ri)}))})}},requires:["computeStyles"]}]});const Js={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function qs(I){var re=I.state,z=I.name,Oe=I.options.offset,ut=void 0===Oe?[0,0]:Oe,On=$i.reduce(function(Pi,cs){return Pi[cs]=function ds(I,re,S){var z=ht(I),Oe=[Oi,wn].indexOf(z)>=0?-1:1,ut="function"==typeof S?S(Object.assign({},re,{placement:I})):S,On=ut[0],Ar=ut[1];return On=On||0,Ar=(Ar||0)*Oe,[Oi,hr].indexOf(z)>=0?{x:Ar,y:On}:{x:On,y:Ar}}(cs,re.rects,ut),Pi},{}),Ar=On[re.placement],Di=Ar.y;null!=re.modifiersData.popperOffsets&&(re.modifiersData.popperOffsets.x+=Ar.x,re.modifiersData.popperOffsets.y+=Di),re.modifiersData[z]=On}};function yl(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"button",1),r.NdJ("click",function(){r.CHM(S);const Oe=r.oxw();return r.KtG(Oe.close())}),r.qZA()}}const au=["*"],Xl=["ngbDatepickerDayView",""],Ic=["month"],Gs=["year"];function ku(I,re){if(1&I&&(r.TgZ(0,"option",5),r._uU(1),r.qZA()),2&I){const S=re.$implicit,z=r.oxw();r.Q6J("value",S),r.uIk("aria-label",z.i18n.getMonthFullName(S,z.date.year)),r.xp6(1),r.Oqu(z.i18n.getMonthShortName(S,z.date.year))}}function zu(I,re){if(1&I&&(r.TgZ(0,"option",5),r._uU(1),r.qZA()),2&I){const S=re.$implicit,z=r.oxw();r.Q6J("value",S),r.xp6(1),r.Oqu(z.i18n.getYearNumerals(S))}}function ua(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"ngb-datepicker-navigation-select",7),r.NdJ("select",function(Oe){r.CHM(S);const ut=r.oxw();return r.KtG(ut.select.emit(Oe))}),r.qZA()}if(2&I){const S=r.oxw();r.Q6J("date",S.date)("disabled",S.disabled)("months",S.selectBoxes.months)("years",S.selectBoxes.years)}}function El(I,re){1&I&&r._UZ(0,"div",0)}function uu(I,re){1&I&&r._UZ(0,"div",0)}function Eu(I,re){if(1&I&&(r.YNc(0,El,1,0,"div",9),r.TgZ(1,"div",10),r._uU(2),r.qZA(),r.YNc(3,uu,1,0,"div",9)),2&I){const S=re.$implicit,z=re.index,Oe=r.oxw(2);r.Q6J("ngIf",z>0),r.xp6(2),r.hij(" ",Oe.i18n.getMonthLabel(S.firstDate)," "),r.xp6(1),r.Q6J("ngIf",z!==Oe.months.length-1)}}function $u(I,re){if(1&I&&r.YNc(0,Eu,4,3,"ng-template",8),2&I){const S=r.oxw();r.Q6J("ngForOf",S.months)}}function Ba(I,re){if(1&I&&(r.TgZ(0,"div",5),r._uU(1),r.qZA()),2&I){const S=r.oxw(2);r.xp6(1),r.Oqu(S.i18n.getWeekLabel())}}function Tl(I,re){if(1&I&&(r.TgZ(0,"div",6),r._uU(1),r.qZA()),2&I){const S=re.$implicit;r.xp6(1),r.Oqu(S)}}function tl(I,re){if(1&I&&(r.TgZ(0,"div",2),r.YNc(1,Ba,2,1,"div",3),r.YNc(2,Tl,2,1,"div",4),r.qZA()),2&I){const S=r.oxw();r.xp6(1),r.Q6J("ngIf",S.datepicker.showWeekNumbers),r.xp6(1),r.Q6J("ngForOf",S.viewModel.weekdays)}}function Ga(I,re){if(1&I&&(r.TgZ(0,"div",11),r._uU(1),r.qZA()),2&I){const S=r.oxw(2).$implicit,z=r.oxw();r.xp6(1),r.Oqu(z.i18n.getWeekNumerals(S.number))}}function dc(I,re){}function cu(I,re){if(1&I&&r.YNc(0,dc,0,0,"ng-template",14),2&I){const S=r.oxw().$implicit,z=r.oxw(3);r.Q6J("ngTemplateOutlet",z.datepicker.dayTemplate)("ngTemplateOutletContext",S.context)}}function Sa(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"div",12),r.NdJ("click",function(Oe){const On=r.CHM(S).$implicit;return r.oxw(3).doSelect(On),r.KtG(Oe.preventDefault())}),r.YNc(1,cu,1,2,"ng-template",13),r.qZA()}if(2&I){const S=re.$implicit;r.ekj("disabled",S.context.disabled)("hidden",S.hidden)("ngb-dp-today",S.context.today),r.Q6J("tabindex",S.tabindex),r.uIk("aria-label",S.ariaLabel),r.xp6(1),r.Q6J("ngIf",!S.hidden)}}function Ru(I,re){if(1&I&&(r.TgZ(0,"div",8),r.YNc(1,Ga,2,1,"div",9),r.YNc(2,Sa,2,9,"div",10),r.qZA()),2&I){const S=r.oxw().$implicit,z=r.oxw();r.xp6(1),r.Q6J("ngIf",z.datepicker.showWeekNumbers),r.xp6(1),r.Q6J("ngForOf",S.days)}}function xu(I,re){1&I&&r.YNc(0,Ru,3,2,"div",7),2&I&&r.Q6J("ngIf",!re.$implicit.collapsed)}const ba=["defaultDayTemplate"],nl=["content"];function Su(I,re){if(1&I&&r._UZ(0,"div",8),2&I){const z=re.currentMonth,Oe=re.selected,ut=re.disabled,On=re.focused;r.Q6J("date",re.date)("currentMonth",z)("selected",Oe)("disabled",ut)("focused",On)}}function gc(I,re){if(1&I&&(r.TgZ(0,"div",13),r._uU(1),r.qZA()),2&I){const S=r.oxw().$implicit,z=r.oxw(2);r.xp6(1),r.hij(" ",z.i18n.getMonthLabel(S.firstDate)," ")}}function ql(I,re){if(1&I&&(r.TgZ(0,"div",10),r.YNc(1,gc,2,1,"div",11),r._UZ(2,"ngb-datepicker-month",12),r.qZA()),2&I){const S=re.$implicit,z=r.oxw(2);r.xp6(1),r.Q6J("ngIf","none"===z.navigation||z.displayMonths>1&&"select"===z.navigation),r.xp6(1),r.Q6J("month",S.firstDate)}}function Al(I,re){if(1&I&&r.YNc(0,ql,3,2,"div",9),2&I){const S=r.oxw();r.Q6J("ngForOf",S.model.months)}}function Dc(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"ngb-datepicker-navigation",14),r.NdJ("navigate",function(Oe){r.CHM(S);const ut=r.oxw();return r.KtG(ut.onNavigateEvent(Oe))})("select",function(Oe){r.CHM(S);const ut=r.oxw();return r.KtG(ut.onNavigateDateSelect(Oe))}),r.qZA()}if(2&I){const S=r.oxw();r.Q6J("date",S.model.firstDate)("months",S.model.months)("disabled",S.model.disabled)("showSelect","select"===S.model.navigation)("prevDisabled",S.model.prevDisabled)("nextDisabled",S.model.nextDisabled)("selectBoxes",S.model.selectBoxes)}}function zs(I,re){}function Vc(I,re){}const bt=function(I){return{$implicit:I}},pt=["dialog"],Je=["ngbNavOutlet",""];function en(I,re){}function fi(I,re){if(1&I&&(r.TgZ(0,"div",2),r.YNc(1,en,0,0,"ng-template",3),r.qZA()),2&I){const S=r.oxw().$implicit,z=r.oxw();r.Q6J("item",S)("nav",z.nav)("role",z.paneRole),r.xp6(1),r.Q6J("ngTemplateOutlet",(null==S.contentTpl?null:S.contentTpl.templateRef)||null)("ngTemplateOutletContext",r.VKq(5,bt,S.active||z.isPanelTransitioning(S)))}}function To(I,re){if(1&I&&r.YNc(0,fi,2,7,"div",1),2&I){const S=re.$implicit,z=r.oxw();r.Q6J("ngIf",S.isPanelInDom()||z.isPanelTransitioning(S))}}function yr(I,re){if(1&I&&r._uU(0),2&I){const S=r.oxw(2);r.Oqu(S.title)}}function Rr(I,re){}function Go(I,re){if(1&I&&(r.TgZ(0,"h3",3),r.YNc(1,yr,1,1,"ng-template",null,4,r.W1O),r.YNc(3,Rr,0,0,"ng-template",5),r.qZA()),2&I){const S=r.MAs(2),z=r.oxw();r.xp6(3),r.Q6J("ngTemplateOutlet",z.isTitleTemplate()?z.title:S)("ngTemplateOutletContext",z.context)}}function Io(I,re){if(1&I&&(r.TgZ(0,"span"),r.SDv(1,1),r.ALo(2,"percent"),r.qZA()),2&I){const S=r.oxw();r.xp6(2),r.pQV(r.lcZ(2,1,S.getValue()/S.max)),r.QtT(1)}}function Ui(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(S);const Oe=r.oxw();return r.KtG(Oe.changeHour(Oe.hourStep))}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,14),r.qZA()()}if(2&I){const S=r.oxw();r.ekj("btn-sm",S.isSmallSize)("btn-lg",S.isLargeSize)("disabled",S.disabled),r.Q6J("disabled",S.disabled)}}function Do(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(S);const Oe=r.oxw();return r.KtG(Oe.changeHour(-Oe.hourStep))}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,16),r.qZA()()}if(2&I){const S=r.oxw();r.ekj("btn-sm",S.isSmallSize)("btn-lg",S.isLargeSize)("disabled",S.disabled),r.Q6J("disabled",S.disabled)}}function Fa(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(S);const Oe=r.oxw();return r.KtG(Oe.changeMinute(Oe.minuteStep))}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,17),r.qZA()()}if(2&I){const S=r.oxw();r.ekj("btn-sm",S.isSmallSize)("btn-lg",S.isLargeSize)("disabled",S.disabled),r.Q6J("disabled",S.disabled)}}function ca(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(S);const Oe=r.oxw();return r.KtG(Oe.changeMinute(-Oe.minuteStep))}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,18),r.qZA()()}if(2&I){const S=r.oxw();r.ekj("btn-sm",S.isSmallSize)("btn-lg",S.isLargeSize)("disabled",S.disabled),r.Q6J("disabled",S.disabled)}}function zo(I,re){1&I&&(r.TgZ(0,"div",5),r._uU(1,":"),r.qZA())}function $l(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(S);const Oe=r.oxw(2);return r.KtG(Oe.changeSecond(Oe.secondStep))}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,21),r.qZA()()}if(2&I){const S=r.oxw(2);r.ekj("btn-sm",S.isSmallSize)("btn-lg",S.isLargeSize)("disabled",S.disabled),r.Q6J("disabled",S.disabled)}}function xl(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(S);const Oe=r.oxw(2);return r.KtG(Oe.changeSecond(-Oe.secondStep))}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,22),r.qZA()()}if(2&I){const S=r.oxw(2);r.ekj("btn-sm",S.isSmallSize)("btn-lg",S.isLargeSize)("disabled",S.disabled),r.Q6J("disabled",S.disabled)}}function Uu(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"div",19),r.YNc(1,$l,4,7,"button",3),r.TgZ(2,"input",20),r.NdJ("change",function(Oe){r.CHM(S);const ut=r.oxw();return r.KtG(ut.updateSecond(Oe.target.value))})("blur",function(){r.CHM(S);const Oe=r.oxw();return r.KtG(Oe.handleBlur())})("input",function(Oe){r.CHM(S);const ut=r.oxw();return r.KtG(ut.formatInput(Oe.target))})("keydown.ArrowUp",function(Oe){r.CHM(S);const ut=r.oxw();return ut.changeSecond(ut.secondStep),r.KtG(Oe.preventDefault())})("keydown.ArrowDown",function(Oe){r.CHM(S);const ut=r.oxw();return ut.changeSecond(-ut.secondStep),r.KtG(Oe.preventDefault())}),r.qZA(),r.YNc(3,xl,4,7,"button",3),r.qZA()}if(2&I){const S=r.oxw();r.xp6(1),r.Q6J("ngIf",S.spinners),r.xp6(1),r.ekj("form-control-sm",S.isSmallSize)("form-control-lg",S.isLargeSize),r.Q6J("value",S.formatMinSec(null==S.model?null:S.model.second))("readOnly",S.readonlyInputs)("disabled",S.disabled),r.xp6(1),r.Q6J("ngIf",S.spinners)}}function Xc(I,re){1&I&&r._UZ(0,"div",5)}function ad(I,re){if(1&I&&(r.ynx(0),r.SDv(1,27),r.BQk()),2&I){const S=r.oxw(2);r.xp6(1),r.pQV(S.i18n.getAfternoonPeriod()),r.QtT(1)}}function kc(I,re){if(1&I&&r.SDv(0,28),2&I){const S=r.oxw(2);r.pQV(S.i18n.getMorningPeriod()),r.QtT(0)}}function yi(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"div",23)(1,"button",24),r.NdJ("click",function(){r.CHM(S);const Oe=r.oxw();return r.KtG(Oe.toggleMeridian())}),r.YNc(2,ad,2,1,"ng-container",25),r.YNc(3,kc,1,1,"ng-template",null,26,r.W1O),r.qZA()()}if(2&I){const S=r.MAs(4),z=r.oxw();r.xp6(1),r.ekj("btn-sm",z.isSmallSize)("btn-lg",z.isLargeSize)("disabled",z.disabled),r.Q6J("disabled",z.disabled),r.xp6(1),r.Q6J("ngIf",z.model&&z.model.hour>=12)("ngIfElse",S)}}function bu(I,re){if(1&I&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&I){const S=r.oxw().$implicit,z=r.oxw();r.Tol(z.highlightClass),r.xp6(1),r.Oqu(S)}}function je(I,re){if(1&I&&r._uU(0),2&I){const S=r.oxw().$implicit;r.Oqu(S)}}function Nt(I,re){if(1&I&&(r.YNc(0,bu,2,3,"span",1),r.YNc(1,je,1,1,"ng-template",null,2,r.W1O)),2&I){const S=re.odd,z=r.MAs(2);r.Q6J("ngIf",S)("ngIfElse",z)}}function tt(I,re){if(1&I&&r._UZ(0,"ngb-highlight",2),2&I){const z=re.term;r.Q6J("result",(0,re.formatter)(re.result))("term",z)}}function tn(I,re){}const Xn=function(I,re,S){return{result:I,term:re,formatter:S}};function bi(I,re){if(1&I){const S=r.EpF();r.TgZ(0,"button",3),r.NdJ("mouseenter",function(){const ut=r.CHM(S).index,On=r.oxw();return r.KtG(On.markActive(ut))})("click",function(){const ut=r.CHM(S).$implicit,On=r.oxw();return r.KtG(On.select(ut))}),r.YNc(1,tn,0,0,"ng-template",4),r.qZA()}if(2&I){const S=re.$implicit,z=re.index,Oe=r.oxw(),ut=r.MAs(1);r.ekj("active",z===Oe.activeIdx),r.Q6J("id",Oe.id+"-"+z),r.xp6(1),r.Q6J("ngTemplateOutlet",Oe.resultTemplate||ut)("ngTemplateOutletContext",r.kEZ(5,Xn,S,Oe.term,Oe.formatter))}}function Ri(I){return parseInt(`${I}`,10)}function fs(I){return null!=I?`${I}`:""}function Ra(I){return"string"==typeof I}function Vs(I){return!isNaN(Ri(I))}function Ms(I){return"number"==typeof I&&isFinite(I)&&Math.floor(I)===I}function wl(I){return null!=I}function Qa(I){return Vs(I)?`0${I}`.slice(-2):""}function Jl(I,re){return I&&I.className&&I.className.split&&I.className.split(/\s+/).indexOf(re)>=0}function ae(I){return(I||document.body).getBoundingClientRect()}function Ve(I){return I.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}const zt={animation:!0,transitionTimerDelayMs:5},Qt=()=>{},{transitionTimerDelayMs:Gn}=zt,Er=new Map,Nr=(I,re,S,z)=>{let Oe=z.context||{};const ut=Er.get(re);if(ut)switch(z.runningTransition){case"continue":return c.E;case"stop":I.run(()=>ut.transition$.complete()),Oe=Object.assign(ut.context,Oe),Er.delete(re)}const On=S(re,z.animation,Oe)||Qt;if(!z.animation||"none"===window.getComputedStyle(re).transitionProperty)return I.run(()=>On()),(0,u.of)(void 0).pipe(function De(I){return re=>new a.y(S=>re.subscribe({next:On=>I.run(()=>S.next(On)),error:On=>I.run(()=>S.error(On)),complete:()=>I.run(()=>S.complete())}))}(I));const Ar=new e.xQ,ri=new e.xQ,Di=Ar.pipe(function qe(...I){return re=>(0,ct.z)(re,(0,u.of)(...I))}(!0));Er.set(re,{transition$:Ar,complete:()=>{ri.next(),ri.complete()},context:Oe});const Pi=function st(I){const{transitionDelay:re,transitionDuration:S}=window.getComputedStyle(I);return 1e3*(parseFloat(re)+parseFloat(S))}(re);return I.runOutsideAngular(()=>{const cs=(0,f.R)(re,"transitionend").pipe((0,He.R)(Di),(0,We.h)(({target:y})=>y===re));U((0,m.H)(Pi+Gn).pipe((0,He.R)(Di)),cs,ri).pipe((0,He.R)(Di)).subscribe(()=>{Er.delete(re),I.run(()=>{On(),Ar.next(),Ar.complete()})})}),Ar.asObservable()},Jo=(I,re,S)=>{let{direction:z,maxSize:Oe,dimension:ut}=S;const{classList:On}=I;function Ar(){On.add("collapse"),"show"===z?On.add("show"):On.remove("show")}if(re)return Oe||(Oe=function ao(I,re){if(typeof navigator>"u")return"0px";const{classList:S}=I,z=S.contains("show");z||S.add("show"),I.style[re]="";const Oe=I.getBoundingClientRect()[re]+"px";return z||S.remove("show"),Oe}(I,ut),S.maxSize=Oe,I.style[ut]="show"!==z?Oe:"0px",On.remove("collapse"),On.remove("collapsing"),On.remove("show"),ae(I),On.add("collapsing")),I.style[ut]="show"===z?Oe:"0px",()=>{Ar(),On.remove("collapsing"),I.style[ut]=""};Ar()};let rs=(()=>{class I{constructor(){this.animation=zt.animation}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),$c=(()=>{class I{constructor(S){this._ngbConfig=S,this.horizontal=!1}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(S){this._animation=S}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(rs))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),pu=(()=>{class I{constructor(S,z,Oe){this._element=S,this._zone=Oe,this._afterInit=!1,this._isCollapsed=!1,this.ngbCollapseChange=new r.vpe,this.shown=new r.vpe,this.hidden=new r.vpe,this.animation=z.animation,this.horizontal=z.horizontal}set collapsed(S){this._isCollapsed!==S&&(this._isCollapsed=S,this._afterInit&&this._runTransitionWithEvents(S,this.animation))}ngOnInit(){this._runTransition(this._isCollapsed,!1),this._afterInit=!0}toggle(S=this._isCollapsed){this.collapsed=!S,this.ngbCollapseChange.next(this._isCollapsed)}_runTransition(S,z){return Nr(this._zone,this._element.nativeElement,Jo,{animation:z,runningTransition:"stop",context:{direction:S?"hide":"show",dimension:this.horizontal?"width":"height"}})}_runTransitionWithEvents(S,z){this._runTransition(S,z).subscribe(()=>{S?this.hidden.emit():this.shown.emit()})}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.SBq),r.Y36($c),r.Y36(r.R0b))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbCollapse",""]],hostVars:2,hostBindings:function(S,z){2&S&&r.ekj("collapse-horizontal",z.horizontal)},inputs:{animation:"animation",collapsed:["ngbCollapse","collapsed"],horizontal:"horizontal"},outputs:{ngbCollapseChange:"ngbCollapseChange",shown:"shown",hidden:"hidden"},exportAs:["ngbCollapse"],standalone:!0}),I})();const Os=({classList:I})=>{I.remove("show")};let Cu=(()=>{class I{constructor(S){this._ngbConfig=S,this.dismissible=!0,this.type="warning"}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(S){this._animation=S}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(rs))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),ld=(()=>{class I{constructor(S,z,Oe,ut){this._renderer=z,this._element=Oe,this._zone=ut,this.closed=new r.vpe,this.dismissible=S.dismissible,this.type=S.type,this.animation=S.animation}close(){const S=Nr(this._zone,this._element.nativeElement,Os,{animation:this.animation,runningTransition:"continue"});return S.subscribe(()=>this.closed.emit()),S}ngOnChanges(S){const z=S.type;z&&!z.firstChange&&(this._renderer.removeClass(this._element.nativeElement,`alert-${z.previousValue}`),this._renderer.addClass(this._element.nativeElement,`alert-${z.currentValue}`))}ngOnInit(){this._renderer.addClass(this._element.nativeElement,`alert-${this.type}`)}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(Cu),r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-alert"]],hostAttrs:["role","alert",1,"alert","show"],hostVars:4,hostBindings:function(S,z){2&S&&r.ekj("fade",z.animation)("alert-dismissible",z.dismissible)},inputs:{animation:"animation",dismissible:"dismissible",type:"type"},outputs:{closed:"closed"},exportAs:["ngbAlert"],standalone:!0,features:[r.TTD,r.jDz],ngContentSelectors:au,decls:2,vars:1,consts:function(){let re;return re="Close",[["type","button","class","btn-close","aria-label",re,3,"click",4,"ngIf"],["type","button","aria-label",re,1,"btn-close",3,"click"]]},template:function(S,z){1&S&&(r.F$t(),r.Hsn(0),r.YNc(1,yl,1,0,"button",0)),2&S&&(r.xp6(1),r.Q6J("ngIf",z.dismissible))},dependencies:[ir.O5],styles:["ngb-alert{display:block}\n"],encapsulation:2,changeDetection:0}),I})(),Hc=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[ld]}),I})(),gd=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({}),I})();class Nu{constructor(re,S,z){this.year=Ms(re)?re:null,this.month=Ms(S)?S:null,this.day=Ms(z)?z:null}static from(re){return re instanceof Nu?re:re?new Nu(re.year,re.month,re.day):null}equals(re){return null!=re&&this.year===re.year&&this.month===re.month&&this.day===re.day}before(re){return!!re&&(this.year===re.year?this.month===re.month?this.day!==re.day&&this.day<re.day:this.month<re.month:this.year<re.year)}after(re){return!!re&&(this.year===re.year?this.month===re.month?this.day!==re.day&&this.day>re.day:this.month>re.month:this.year>re.year)}}function ed(I,re){return!function _u(I,re){return!I&&!re||!!I&&!!re&&I.equals(re)}(I,re)}function xf(I,re){return!(!I&&!re||I&&re&&I.year===re.year&&I.month===re.month)}function Bc(I,re,S){return I&&re&&I.before(re)?re:I&&S&&I.after(S)?S:I||null}function Lo(I,re){const{minDate:S,maxDate:z,disabled:Oe,markDisabled:ut}=re;return!(null==I||Oe||ut&&ut(I,{year:I.year,month:I.month})||S&&I.before(S)||z&&I.after(z))}function ni(I){return new Nu(I.getFullYear(),I.getMonth()+1,I.getDate())}function zi(I){const re=new Date(I.year,I.month-1,I.day,12);return isNaN(re.getTime())||re.setFullYear(I.year),re}let Qo=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:function(){return function Wo(){return new ya}()},providedIn:"root"}),I})(),ya=(()=>{class I extends Qo{getDaysPerWeek(){return 7}getMonths(){return[1,2,3,4,5,6,7,8,9,10,11,12]}getWeeksPerMonth(){return 6}getNext(S,z="d",Oe=1){let ut=zi(S),On=!0,Ar=ut.getMonth();switch(z){case"y":ut.setFullYear(ut.getFullYear()+Oe);break;case"m":Ar+=Oe,ut.setMonth(Ar),Ar%=12,Ar<0&&(Ar+=12);break;case"d":ut.setDate(ut.getDate()+Oe),On=!1;break;default:return S}return On&&ut.getMonth()!==Ar&&ut.setDate(0),ni(ut)}getPrev(S,z="d",Oe=1){return this.getNext(S,z,-Oe)}getWeekday(S){let Oe=zi(S).getDay();return 0===Oe?7:Oe}getWeekNumber(S,z){7===z&&(z=0);const On=zi(S[(11-z)%7]);On.setDate(On.getDate()+4-(On.getDay()||7));const Ar=On.getTime();return On.setMonth(0),On.setDate(1),Math.floor(Math.round((Ar-On.getTime())/864e5)/7)+1}getToday(){return ni(new Date)}isValid(S){if(!(S&&Ms(S.year)&&Ms(S.month)&&Ms(S.day)&&0!==S.year))return!1;const z=zi(S);return!isNaN(z.getTime())&&z.getFullYear()===S.year&&z.getMonth()+1===S.month&&z.getDate()===S.day}}return I.\u0275fac=function(){let re;return function(z){return(re||(re=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),Wu=(()=>{class I{getMonthLabel(S){return`${this.getMonthFullName(S.month,S.year)} ${this.getYearNumerals(S.year)}`}getDayNumerals(S){return`${S.day}`}getWeekNumerals(S){return`${S}`}getYearNumerals(S){return`${S}`}getWeekLabel(){return""}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:function(S){let z=null;return z=S?new S:function Bl(I){return new pc(I)}(r.LFG(r.soG)),z},providedIn:"root"}),I})(),pc=(()=>{class I extends Wu{constructor(S){super(),this._locale=S,this._monthsShort=(0,ir.UT)(S,ir.x.Standalone,ir.Tn.Abbreviated),this._monthsFull=(0,ir.UT)(S,ir.x.Standalone,ir.Tn.Wide)}getWeekdayLabel(S,z){const Oe=(0,ir.Mn)(this._locale,ir.x.Standalone,void 0===z?ir.Tn.Short:z);return Oe.map((On,Ar)=>Oe[(Ar+1)%7])[S-1]||""}getMonthShortName(S){return this._monthsShort[S-1]||""}getMonthFullName(S){return this._monthsFull[S-1]||""}getDayAriaLabel(S){const z=new Date(S.year,S.month-1,S.day);return(0,ir.p6)(z,"fullDate",this._locale)}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(r.soG))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),cd=(()=>{class I{constructor(S,z){this._calendar=S,this._i18n=z,this._VALIDATORS={dayTemplateData:Oe=>{if(this._state.dayTemplateData!==Oe)return{dayTemplateData:Oe}},displayMonths:Oe=>{if(Ms(Oe=Ri(Oe))&&Oe>0&&this._state.displayMonths!==Oe)return{displayMonths:Oe}},disabled:Oe=>{if(this._state.disabled!==Oe)return{disabled:Oe}},firstDayOfWeek:Oe=>{if(Ms(Oe=Ri(Oe))&&Oe>=0&&this._state.firstDayOfWeek!==Oe)return{firstDayOfWeek:Oe}},focusVisible:Oe=>{if(this._state.focusVisible!==Oe&&!this._state.disabled)return{focusVisible:Oe}},markDisabled:Oe=>{if(this._state.markDisabled!==Oe)return{markDisabled:Oe}},maxDate:Oe=>{const ut=this.toValidDate(Oe,null);if(ed(this._state.maxDate,ut))return{maxDate:ut}},minDate:Oe=>{const ut=this.toValidDate(Oe,null);if(ed(this._state.minDate,ut))return{minDate:ut}},navigation:Oe=>{if(this._state.navigation!==Oe)return{navigation:Oe}},outsideDays:Oe=>{if(this._state.outsideDays!==Oe)return{outsideDays:Oe}},weekdays:Oe=>{const ut=!0===Oe||!1===Oe?ir.Tn.Short:Oe,On=!0!==Oe&&!1!==Oe||Oe;if(this._state.weekdayWidth!==ut||this._state.weekdaysVisible!==On)return{weekdayWidth:ut,weekdaysVisible:On}}},this._model$=new e.xQ,this._dateSelect$=new e.xQ,this._state={dayTemplateData:null,markDisabled:null,maxDate:null,minDate:null,disabled:!1,displayMonths:1,firstDate:null,firstDayOfWeek:1,lastDate:null,focusDate:null,focusVisible:!1,months:[],navigation:"select",outsideDays:"visible",prevDisabled:!1,nextDisabled:!1,selectedDate:null,selectBoxes:{years:[],months:[]},weekdayWidth:ir.Tn.Short,weekdaysVisible:!0}}get model$(){return this._model$.pipe((0,We.h)(S=>S.months.length>0))}get dateSelect$(){return this._dateSelect$.pipe((0,We.h)(S=>null!==S))}set(S){let z=Object.keys(S).map(Oe=>this._VALIDATORS[Oe](S[Oe])).reduce((Oe,ut)=>({...Oe,...ut}),{});Object.keys(z).length>0&&this._nextState(z)}focus(S){const z=this.toValidDate(S,null);null!=z&&!this._state.disabled&&ed(this._state.focusDate,z)&&this._nextState({focusDate:S})}focusSelect(){Lo(this._state.focusDate,this._state)&&this.select(this._state.focusDate,{emitEvent:!0})}open(S){const z=this.toValidDate(S,this._calendar.getToday());null!=z&&!this._state.disabled&&(!this._state.firstDate||xf(this._state.firstDate,z))&&this._nextState({firstDate:z})}select(S,z={}){const Oe=this.toValidDate(S,null);null!=Oe&&!this._state.disabled&&(ed(this._state.selectedDate,Oe)&&this._nextState({selectedDate:Oe}),z.emitEvent&&Lo(Oe,this._state)&&this._dateSelect$.next(Oe))}toValidDate(S,z){const Oe=Nu.from(S);return void 0===z&&(z=this._calendar.getToday()),this._calendar.isValid(Oe)?Oe:z}getMonth(S){for(let z of this._state.months)if(S.month===z.number&&S.year===z.year)return z;throw new Error(`month ${S.month} of year ${S.year} not found`)}_nextState(S){const z=this._updateState(S);this._patchContexts(z),this._state=z,this._model$.next(this._state)}_patchContexts(S){const{months:z,displayMonths:Oe,selectedDate:ut,focusDate:On,focusVisible:Ar,disabled:ri,outsideDays:Di}=S;S.months.forEach(Pi=>{Pi.weeks.forEach(cs=>{cs.days.forEach(Yo=>{On&&(Yo.context.focused=On.equals(Yo.date)&&Ar),Yo.tabindex=!ri&&On&&Yo.date.equals(On)&&On.month===Pi.number?0:-1,!0===ri&&(Yo.context.disabled=!0),void 0!==ut&&(Yo.context.selected=null!==ut&&ut.equals(Yo.date)),Pi.number!==Yo.date.month&&(Yo.hidden="hidden"===Di||"collapsed"===Di||Oe>1&&Yo.date.after(z[0].firstDate)&&Yo.date.before(z[Oe-1].lastDate))})})})}_updateState(S){const z=Object.assign({},this._state,S);let Oe=z.firstDate;if(("minDate"in S||"maxDate"in S)&&(function Ud(I,re){if(re&&I&&re.before(I))throw new Error(`'maxDate' ${re} should be greater than 'minDate' ${I}`)}(z.minDate,z.maxDate),z.focusDate=Bc(z.focusDate,z.minDate,z.maxDate),z.firstDate=Bc(z.firstDate,z.minDate,z.maxDate),Oe=z.focusDate),"disabled"in S&&(z.focusVisible=!1),"selectedDate"in S&&0===this._state.months.length&&(Oe=z.selectedDate),"focusVisible"in S||"focusDate"in S&&(z.focusDate=Bc(z.focusDate,z.minDate,z.maxDate),Oe=z.focusDate,0!==z.months.length&&z.focusDate&&!z.focusDate.before(z.firstDate)&&!z.focusDate.after(z.lastDate)))return z;if("firstDate"in S&&(z.firstDate=Bc(z.firstDate,z.minDate,z.maxDate),Oe=z.firstDate),Oe){const On=function Mt(I,re,S,z,Oe){const{displayMonths:ut,months:On}=S,Ar=On.splice(0,On.length);return Array.from({length:ut},(Di,Pi)=>{const cs=Object.assign(I.getNext(re,"m",Pi),{day:1});if(On[Pi]=null,!Oe){const Yo=Ar.findIndex(y=>y.firstDate.equals(cs));-1!==Yo&&(On[Pi]=Ar.splice(Yo,1)[0])}return cs}).forEach((Di,Pi)=>{null===On[Pi]&&(On[Pi]=function un(I,re,S,z,Oe={}){const{dayTemplateData:ut,minDate:On,maxDate:Ar,firstDayOfWeek:ri,markDisabled:Di,outsideDays:Pi,weekdayWidth:cs,weekdaysVisible:Yo}=S,y=I.getToday();Oe.firstDate=null,Oe.lastDate=null,Oe.number=re.month,Oe.year=re.year,Oe.weeks=Oe.weeks||[],Oe.weekdays=Oe.weekdays||[],re=function Mn(I,re,S){const z=I.getDaysPerWeek(),Oe=new Nu(re.year,re.month,1),ut=I.getWeekday(Oe)%z;return I.getPrev(Oe,"d",(z+ut-S)%z)}(I,re,ri),Yo||(Oe.weekdays.length=0);for(let x=0;x<I.getWeeksPerMonth();x++){let Y=Oe.weeks[x];Y||(Y=Oe.weeks[x]={number:0,days:[],collapsed:!0});const be=Y.days;for(let Ke=0;Ke<I.getDaysPerWeek();Ke++){0===x&&Yo&&(Oe.weekdays[Ke]=z.getWeekdayLabel(I.getWeekday(re),cs));const xt=new Nu(re.year,re.month,re.day),_n=I.getNext(xt),In=z.getDayAriaLabel(xt);let vr=!!(On&&xt.before(On)||Ar&&xt.after(Ar));!vr&&Di&&(vr=Di(xt,{month:Oe.number,year:Oe.year}));let Si=xt.equals(y),Uo=ut?ut(xt,{month:Oe.number,year:Oe.year}):void 0;null===Oe.firstDate&&xt.month===Oe.number&&(Oe.firstDate=xt),xt.month===Oe.number&&_n.month!==Oe.number&&(Oe.lastDate=xt);let Ds=be[Ke];Ds||(Ds=be[Ke]={}),Ds.date=xt,Ds.context=Object.assign(Ds.context||{},{$implicit:xt,date:xt,data:Uo,currentMonth:Oe.number,currentYear:Oe.year,disabled:vr,focused:!1,selected:!1,today:Si}),Ds.tabindex=-1,Ds.ariaLabel=In,Ds.hidden=!1,re=_n}Y.number=I.getWeekNumber(be.map(Ke=>Ke.date),ri),Y.collapsed="collapsed"===Pi&&be[0].date.month!==Oe.number&&be[be.length-1].date.month!==Oe.number}return Oe}(I,Di,S,z,Ar.shift()||{}))}),On}(this._calendar,Oe,z,this._i18n,"dayTemplateData"in S||"firstDayOfWeek"in S||"markDisabled"in S||"minDate"in S||"maxDate"in S||"disabled"in S||"outsideDays"in S||"weekdaysVisible"in S);z.months=On,z.firstDate=On[0].firstDate,z.lastDate=On[On.length-1].lastDate,"selectedDate"in S&&!Lo(z.selectedDate,z)&&(z.selectedDate=null),"firstDate"in S&&(!z.focusDate||z.focusDate.before(z.firstDate)||z.focusDate.after(z.lastDate))&&(z.focusDate=Oe);const Ar=!this._state.firstDate||this._state.firstDate.year!==z.firstDate.year,ri=!this._state.firstDate||this._state.firstDate.month!==z.firstDate.month;"select"===z.navigation?(("minDate"in S||"maxDate"in S||0===z.selectBoxes.years.length||Ar)&&(z.selectBoxes.years=function Ne(I,re,S){if(!I)return[];const z=re?Math.max(re.year,I.year-500):I.year-10,ut=(S?Math.min(S.year,I.year+500):I.year+10)-z+1,On=Array(ut);for(let Ar=0;Ar<ut;Ar++)On[Ar]=z+Ar;return On}(z.firstDate,z.minDate,z.maxDate)),("minDate"in S||"maxDate"in S||0===z.selectBoxes.months.length||Ar)&&(z.selectBoxes.months=function Se(I,re,S,z){if(!re)return[];let Oe=I.getMonths(re.year);if(S&&re.year===S.year){const ut=Oe.findIndex(On=>On===S.month);Oe=Oe.slice(ut)}if(z&&re.year===z.year){const ut=Oe.findIndex(On=>On===z.month);Oe=Oe.slice(0,ut+1)}return Oe}(this._calendar,z.firstDate,z.minDate,z.maxDate))):z.selectBoxes={years:[],months:[]},("arrows"===z.navigation||"select"===z.navigation)&&(ri||Ar||"minDate"in S||"maxDate"in S||"disabled"in S)&&(z.prevDisabled=z.disabled||function Ye(I,re,S){const z=Object.assign(I.getPrev(re,"m"),{day:1});return null!=S&&(z.year===S.year&&z.month<S.month||z.year<S.year&&1===S.month)}(this._calendar,z.firstDate,z.minDate),z.nextDisabled=z.disabled||function _e(I,re,S){const z=Object.assign(I.getNext(re,"m"),{day:1});return null!=S&&z.after(S)}(this._calendar,z.lastDate,z.maxDate))}return z}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(Qo),r.LFG(Wu))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})();var Ju=(()=>{return(I=Ju||(Ju={}))[I.PREV=0]="PREV",I[I.NEXT=1]="NEXT",Ju;var I})();let tc=(()=>{class I{constructor(S){this.i18n=S}isMuted(){return!this.selected&&(this.date.month!==this.currentMonth||this.disabled)}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(Wu))},I.\u0275cmp=r.Xpm({type:I,selectors:[["","ngbDatepickerDayView",""]],hostAttrs:[1,"btn-light"],hostVars:10,hostBindings:function(S,z){2&S&&r.ekj("bg-primary",z.selected)("text-white",z.selected)("text-muted",z.isMuted())("outside",z.isMuted())("active",z.focused)},inputs:{currentMonth:"currentMonth",date:"date",disabled:"disabled",focused:"focused",selected:"selected"},standalone:!0,features:[r.jDz],attrs:Xl,decls:1,vars:1,template:function(S,z){1&S&&r._uU(0),2&S&&r.Oqu(z.i18n.getDayNumerals(z.date))},styles:["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView]:hover:not(.bg-primary),[ngbDatepickerDayView].active:not(.bg-primary){background-color:var(--bs-btn-bg);outline:1px solid var(--bs-border-color)}[ngbDatepickerDayView].outside{opacity:.5}\n"],encapsulation:2,changeDetection:0}),I})(),od=(()=>{class I{constructor(S,z){this.i18n=S,this._renderer=z,this.select=new r.vpe,this._month=-1,this._year=-1}changeMonth(S){this.select.emit(new Nu(this.date.year,Ri(S),1))}changeYear(S){this.select.emit(new Nu(Ri(S),this.date.month,1))}ngAfterViewChecked(){this.date&&(this.date.month!==this._month&&(this._month=this.date.month,this._renderer.setProperty(this.monthSelect.nativeElement,"value",this._month)),this.date.year!==this._year&&(this._year=this.date.year,this._renderer.setProperty(this.yearSelect.nativeElement,"value",this._year)))}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(Wu),r.Y36(r.Qsj))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-datepicker-navigation-select"]],viewQuery:function(S,z){if(1&S&&(r.Gf(Ic,7,r.SBq),r.Gf(Gs,7,r.SBq)),2&S){let Oe;r.iGM(Oe=r.CRH())&&(z.monthSelect=Oe.first),r.iGM(Oe=r.CRH())&&(z.yearSelect=Oe.first)}},inputs:{date:"date",disabled:"disabled",months:"months",years:"years"},outputs:{select:"select"},standalone:!0,features:[r.jDz],decls:6,vars:4,consts:function(){let re,S,z,Oe;return re="Select month",S="Select month",z="Select year",Oe="Select year",[["aria-label",re,"title",S,1,"form-select",3,"disabled","change"],["month",""],[3,"value",4,"ngFor","ngForOf"],["aria-label",z,"title",Oe,1,"form-select",3,"disabled","change"],["year",""],[3,"value"]]},template:function(S,z){1&S&&(r.TgZ(0,"select",0,1),r.NdJ("change",function(ut){return z.changeMonth(ut.target.value)}),r.YNc(2,ku,2,3,"option",2),r.qZA(),r.TgZ(3,"select",3,4),r.NdJ("change",function(ut){return z.changeYear(ut.target.value)}),r.YNc(5,zu,2,2,"option",2),r.qZA()),2&S&&(r.Q6J("disabled",z.disabled),r.xp6(2),r.Q6J("ngForOf",z.months),r.xp6(1),r.Q6J("disabled",z.disabled),r.xp6(2),r.Q6J("ngForOf",z.years))},dependencies:[ir.ax],styles:["ngb-datepicker-navigation-select>.form-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.form-select:focus{z-index:1}ngb-datepicker-navigation-select>.form-select::-ms-value{background-color:transparent!important}\n"],encapsulation:2,changeDetection:0}),I})(),Ed=(()=>{class I{constructor(S){this.i18n=S,this.navigation=Ju,this.months=[],this.navigate=new r.vpe,this.select=new r.vpe}onClickPrev(S){S.currentTarget.focus(),this.navigate.emit(this.navigation.PREV)}onClickNext(S){S.currentTarget.focus(),this.navigate.emit(this.navigation.NEXT)}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(Wu))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-datepicker-navigation"]],inputs:{date:"date",disabled:"disabled",months:"months",showSelect:"showSelect",prevDisabled:"prevDisabled",nextDisabled:"nextDisabled",selectBoxes:"selectBoxes"},outputs:{navigate:"navigate",select:"select"},standalone:!0,features:[r.jDz],decls:8,vars:4,consts:function(){let re,S,z,Oe;return re="Previous month",S="Previous month",z="Next month",Oe="Next month",[[1,"ngb-dp-arrow"],["type","button","aria-label",re,"title",S,1,"btn","btn-link","ngb-dp-arrow-btn",3,"disabled","click"],[1,"ngb-dp-navigation-chevron"],["class","ngb-dp-navigation-select",3,"date","disabled","months","years","select",4,"ngIf"],[4,"ngIf"],[1,"ngb-dp-arrow","right"],["type","button","aria-label",z,"title",Oe,1,"btn","btn-link","ngb-dp-arrow-btn",3,"disabled","click"],[1,"ngb-dp-navigation-select",3,"date","disabled","months","years","select"],["ngFor","",3,"ngForOf"],["class","ngb-dp-arrow",4,"ngIf"],[1,"ngb-dp-month-name"]]},template:function(S,z){1&S&&(r.TgZ(0,"div",0)(1,"button",1),r.NdJ("click",function(ut){return z.onClickPrev(ut)}),r._UZ(2,"span",2),r.qZA()(),r.YNc(3,ua,1,4,"ngb-datepicker-navigation-select",3),r.YNc(4,$u,1,1,null,4),r.TgZ(5,"div",5)(6,"button",6),r.NdJ("click",function(ut){return z.onClickNext(ut)}),r._UZ(7,"span",2),r.qZA()()),2&S&&(r.xp6(1),r.Q6J("disabled",z.prevDisabled),r.xp6(2),r.Q6J("ngIf",z.showSelect),r.xp6(1),r.Q6J("ngIf",!z.showSelect),r.xp6(2),r.Q6J("disabled",z.nextDisabled))},dependencies:[ir.O5,ir.ax,od],styles:["ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{justify-content:flex-end}.ngb-dp-arrow.right .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}\n"],encapsulation:2,changeDetection:0}),I})();var h=(()=>{return(I=h||(h={}))[I.Tab=9]="Tab",I[I.Enter=13]="Enter",I[I.Escape=27]="Escape",I[I.Space=32]="Space",I[I.PageUp=33]="PageUp",I[I.PageDown=34]="PageDown",I[I.End=35]="End",I[I.Home=36]="Home",I[I.ArrowLeft=37]="ArrowLeft",I[I.ArrowUp=38]="ArrowUp",I[I.ArrowRight=39]="ArrowRight",I[I.ArrowDown=40]="ArrowDown",h;var I})();let b=(()=>{class I{processKey(S,z){const{state:Oe,calendar:ut}=z;switch(S.which){case h.PageUp:z.focusDate(ut.getPrev(Oe.focusedDate,S.shiftKey?"y":"m",1));break;case h.PageDown:z.focusDate(ut.getNext(Oe.focusedDate,S.shiftKey?"y":"m",1));break;case h.End:z.focusDate(S.shiftKey?Oe.maxDate:Oe.lastDate);break;case h.Home:z.focusDate(S.shiftKey?Oe.minDate:Oe.firstDate);break;case h.ArrowLeft:z.focusDate(ut.getPrev(Oe.focusedDate,"d",1));break;case h.ArrowUp:z.focusDate(ut.getPrev(Oe.focusedDate,"d",ut.getDaysPerWeek()));break;case h.ArrowRight:z.focusDate(ut.getNext(Oe.focusedDate,"d",1));break;case h.ArrowDown:z.focusDate(ut.getNext(Oe.focusedDate,"d",ut.getDaysPerWeek()));break;case h.Enter:case h.Space:z.focusSelect();break;default:return}S.preventDefault(),S.stopPropagation()}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),N=(()=>{class I{constructor(){this.displayMonths=1,this.firstDayOfWeek=1,this.navigation="select",this.outsideDays="visible",this.showWeekNumbers=!1,this.weekdays=ir.Tn.Short}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),ne=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:function(){return function k(){return new he}()},providedIn:"root"}),I})(),he=(()=>{class I extends ne{fromModel(S){return S&&Ms(S.year)&&Ms(S.month)&&Ms(S.day)?{year:S.year,month:S.month,day:S.day}:null}toModel(S){return S&&Ms(S.year)&&Ms(S.month)&&Ms(S.day)?{year:S.year,month:S.month,day:S.day}:null}}return I.\u0275fac=function(){let re;return function(z){return(re||(re=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),Me=(()=>{class I{constructor(S){this.templateRef=S}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.Rgc))},I.\u0275dir=r.lG2({type:I,selectors:[["ng-template","ngbDatepickerContent",""]],standalone:!0}),I})(),Qe=(()=>{class I{constructor(S,z,Oe,ut){this.i18n=S,this.datepicker=z,this._keyboardService=Oe,this._service=ut}set month(S){this.viewModel=this._service.getMonth(S)}onKeyDown(S){this._keyboardService.processKey(S,this.datepicker)}doSelect(S){!S.context.disabled&&!S.hidden&&this.datepicker.onDateSelect(S.date)}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(Wu),r.Y36((0,r.Gpc)(()=>Re)),r.Y36(b),r.Y36(cd))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-datepicker-month"]],hostAttrs:["role","grid"],hostBindings:function(S,z){1&S&&r.NdJ("keydown",function(ut){return z.onKeyDown(ut)})},inputs:{month:"month"},standalone:!0,features:[r.jDz],decls:2,vars:2,consts:[["class","ngb-dp-week ngb-dp-weekdays","role","row",4,"ngIf"],["ngFor","",3,"ngForOf"],["role","row",1,"ngb-dp-week","ngb-dp-weekdays"],["class","ngb-dp-weekday ngb-dp-showweek small",4,"ngIf"],["class","ngb-dp-weekday small","role","columnheader",4,"ngFor","ngForOf"],[1,"ngb-dp-weekday","ngb-dp-showweek","small"],["role","columnheader",1,"ngb-dp-weekday","small"],["class","ngb-dp-week","role","row",4,"ngIf"],["role","row",1,"ngb-dp-week"],["class","ngb-dp-week-number small text-muted",4,"ngIf"],["class","ngb-dp-day","role","gridcell",3,"disabled","tabindex","hidden","ngb-dp-today","click",4,"ngFor","ngForOf"],[1,"ngb-dp-week-number","small","text-muted"],["role","gridcell",1,"ngb-dp-day",3,"tabindex","click"],[3,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(S,z){1&S&&(r.YNc(0,tl,3,2,"div",0),r.YNc(1,xu,1,1,"ng-template",1)),2&S&&(r.Q6J("ngIf",z.viewModel.weekdays.length>0),r.xp6(1),r.Q6J("ngForOf",z.viewModel.weeks))},dependencies:[ir.O5,ir.ax,ir.tP],styles:['ngb-datepicker-month{display:block}.ngb-dp-weekday,.ngb-dp-week-number{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:var(--bs-info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid var(--bs-border-color);border-radius:0;background-color:var(--bs-light)}.ngb-dp-day,.ngb-dp-weekday,.ngb-dp-week-number{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex="0"]{z-index:1}\n'],encapsulation:2}),I})(),Re=(()=>{class I{constructor(S,z,Oe,ut,On,Ar,ri,Di){this._service=S,this._calendar=z,this._i18n=Oe,this._elementRef=Ar,this._ngbDateAdapter=ri,this._ngZone=Di,this.injector=(0,r.f3M)(r.zs3),this._controlValue=null,this._destroyed$=new e.xQ,this._publicState={},this.navigate=new r.vpe,this.dateSelect=new r.vpe,this.onChange=Pi=>{},this.onTouched=()=>{},["contentTemplate","dayTemplate","dayTemplateData","displayMonths","firstDayOfWeek","footerTemplate","markDisabled","minDate","maxDate","navigation","outsideDays","showWeekNumbers","startDate","weekdays"].forEach(Pi=>this[Pi]=ut[Pi]),S.dateSelect$.pipe((0,He.R)(this._destroyed$)).subscribe(Pi=>{this.dateSelect.emit(Pi)}),S.model$.pipe((0,He.R)(this._destroyed$)).subscribe(Pi=>{const cs=Pi.firstDate,Yo=this.model?this.model.firstDate:null;this._publicState={maxDate:Pi.maxDate,minDate:Pi.minDate,firstDate:Pi.firstDate,lastDate:Pi.lastDate,focusedDate:Pi.focusDate,months:Pi.months.map(Ke=>Ke.firstDate)};let y=!1;if(!cs.equals(Yo)&&(this.navigate.emit({current:Yo?{year:Yo.year,month:Yo.month}:null,next:{year:cs.year,month:cs.month},preventDefault:()=>y=!0}),y&&null!==Yo))return void this._service.open(Yo);const x=Pi.selectedDate,Y=Pi.focusDate,be=this.model?this.model.focusDate:null;this.model=Pi,ed(x,this._controlValue)&&(this._controlValue=x,this.onTouched(),this.onChange(this._ngbDateAdapter.toModel(x))),ed(Y,be)&&be&&Pi.focusVisible&&this.focus(),On.markForCheck()})}get state(){return this._publicState}get calendar(){return this._calendar}get i18n(){return this._i18n}focusDate(S){this._service.focus(Nu.from(S))}focusSelect(){this._service.focusSelect()}focus(){this._ngZone.onStable.asObservable().pipe((0,Le.q)(1)).subscribe(()=>{const S=this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]');S&&S.focus()})}navigateTo(S){this._service.open(Nu.from(S?S.day?S:{...S,day:1}:null))}ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{const S=(0,f.R)(this._contentEl.nativeElement,"focusin"),z=(0,f.R)(this._contentEl.nativeElement,"focusout"),{nativeElement:Oe}=this._elementRef;(0,ot.T)(S,z).pipe((0,We.h)(({target:ut,relatedTarget:On})=>!(Jl(ut,"ngb-dp-day")&&Jl(On,"ngb-dp-day")&&Oe.contains(ut)&&Oe.contains(On))),(0,He.R)(this._destroyed$)).subscribe(({type:ut})=>this._ngZone.run(()=>this._service.set({focusVisible:"focusin"===ut})))})}ngOnDestroy(){this._destroyed$.next()}ngOnInit(){if(void 0===this.model){const S={};["dayTemplateData","displayMonths","markDisabled","firstDayOfWeek","navigation","minDate","maxDate","outsideDays","weekdays"].forEach(z=>S[z]=this[z]),this._service.set(S),this.navigateTo(this.startDate)}this.dayTemplate||(this.dayTemplate=this._defaultDayTemplate)}ngOnChanges(S){const z={};if(["dayTemplateData","displayMonths","markDisabled","firstDayOfWeek","navigation","minDate","maxDate","outsideDays","weekdays"].filter(Oe=>Oe in S).forEach(Oe=>z[Oe]=this[Oe]),this._service.set(z),"startDate"in S){const{currentValue:Oe,previousValue:ut}=S.startDate;xf(ut,Oe)&&this.navigateTo(this.startDate)}}onDateSelect(S){this._service.focus(S),this._service.select(S,{emitEvent:!0})}onNavigateDateSelect(S){this._service.open(S)}onNavigateEvent(S){switch(S){case Ju.PREV:this._service.open(this._calendar.getPrev(this.model.firstDate,"m",1));break;case Ju.NEXT:this._service.open(this._calendar.getNext(this.model.firstDate,"m",1))}}registerOnChange(S){this.onChange=S}registerOnTouched(S){this.onTouched=S}setDisabledState(S){this._service.set({disabled:S})}writeValue(S){this._controlValue=Nu.from(this._ngbDateAdapter.fromModel(S)),this._service.select(this._controlValue)}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(cd),r.Y36(Qo),r.Y36(Wu),r.Y36(N),r.Y36(r.sBO),r.Y36(r.SBq),r.Y36(ne),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-datepicker"]],contentQueries:function(S,z,Oe){if(1&S&&r.Suo(Oe,Me,7),2&S){let ut;r.iGM(ut=r.CRH())&&(z.contentTemplateFromContent=ut.first)}},viewQuery:function(S,z){if(1&S&&(r.Gf(ba,7),r.Gf(nl,7)),2&S){let Oe;r.iGM(Oe=r.CRH())&&(z._defaultDayTemplate=Oe.first),r.iGM(Oe=r.CRH())&&(z._contentEl=Oe.first)}},hostVars:2,hostBindings:function(S,z){2&S&&r.ekj("disabled",z.model.disabled)},inputs:{contentTemplate:"contentTemplate",dayTemplate:"dayTemplate",dayTemplateData:"dayTemplateData",displayMonths:"displayMonths",firstDayOfWeek:"firstDayOfWeek",footerTemplate:"footerTemplate",markDisabled:"markDisabled",maxDate:"maxDate",minDate:"minDate",navigation:"navigation",outsideDays:"outsideDays",showWeekNumbers:"showWeekNumbers",startDate:"startDate",weekdays:"weekdays"},outputs:{navigate:"navigate",dateSelect:"dateSelect"},exportAs:["ngbDatepicker"],standalone:!0,features:[r._Bn([{provide:Qr.JU,useExisting:(0,r.Gpc)(()=>I),multi:!0},cd]),r.TTD,r.jDz],decls:10,vars:9,consts:[["defaultDayTemplate",""],["defaultContentTemplate",""],[1,"ngb-dp-header"],[3,"date","months","disabled","showSelect","prevDisabled","nextDisabled","selectBoxes","navigate","select",4,"ngIf"],[1,"ngb-dp-content"],["content",""],[3,"ngTemplateOutlet","ngTemplateOutletContext","ngTemplateOutletInjector"],[3,"ngTemplateOutlet"],["ngbDatepickerDayView","",3,"date","currentMonth","selected","disabled","focused"],["class","ngb-dp-month",4,"ngFor","ngForOf"],[1,"ngb-dp-month"],["class","ngb-dp-month-name",4,"ngIf"],[3,"month"],[1,"ngb-dp-month-name"],[3,"date","months","disabled","showSelect","prevDisabled","nextDisabled","selectBoxes","navigate","select"]],template:function(S,z){if(1&S&&(r.YNc(0,Su,1,5,"ng-template",null,0,r.W1O),r.YNc(2,Al,1,1,"ng-template",null,1,r.W1O),r.TgZ(4,"div",2),r.YNc(5,Dc,1,7,"ngb-datepicker-navigation",3),r.qZA(),r.TgZ(6,"div",4,5),r.YNc(8,zs,0,0,"ng-template",6),r.qZA(),r.YNc(9,Vc,0,0,"ng-template",7)),2&S){const Oe=r.MAs(3);r.xp6(5),r.Q6J("ngIf","none"!==z.navigation),r.xp6(1),r.ekj("ngb-dp-months",!z.contentTemplate),r.xp6(2),r.Q6J("ngTemplateOutlet",z.contentTemplate||(null==z.contentTemplateFromContent?null:z.contentTemplateFromContent.templateRef)||Oe)("ngTemplateOutletContext",r.VKq(7,bt,z))("ngTemplateOutletInjector",z.injector),r.xp6(1),r.Q6J("ngTemplateOutlet",z.footerTemplate)}},dependencies:[ir.O5,ir.ax,ir.tP,tc,Qe,Ed],styles:["ngb-datepicker{border:1px solid var(--bs-border-color);border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}ngb-datepicker.disabled .ngb-dp-weekday,ngb-datepicker.disabled .ngb-dp-week-number,ngb-datepicker.disabled .ngb-dp-month-name{color:var(--bs-text-muted)}.ngb-dp-body{z-index:1055}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:var(--bs-light)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:var(--bs-light)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}\n"],encapsulation:2,changeDetection:0}),I})();const ft=(I,re)=>!!re&&re.some(S=>S.contains(I)),wt=(I,re)=>!re||null!=function le(I,re){return!re||typeof I.closest>"u"?null:I.closest(re)}(I,re),It=typeof navigator<"u"&&!!navigator.userAgent&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||/Macintosh/.test(navigator.userAgent)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2||/Android/.test(navigator.userAgent)),Cn=I=>It?()=>setTimeout(()=>I(),100):I;function er(I,re,S,z,Oe,ut,On,Ar){S&&I.runOutsideAngular(Cn(()=>{const Di=(0,f.R)(re,"keydown").pipe((0,He.R)(Oe),(0,We.h)(Yo=>Yo.which===h.Escape),(0,pn.b)(Yo=>Yo.preventDefault())),Pi=(0,f.R)(re,"mousedown").pipe((0,Pt.U)(Yo=>{const y=Yo.target;return 2!==Yo.button&&!ft(y,On)&&("inside"===S?ft(y,ut)&&wt(y,Ar):"outside"===S?!ft(y,ut):wt(y,Ar)||!ft(y,ut))}),(0,He.R)(Oe)),cs=(0,f.R)(re,"mouseup").pipe(Rn(Pi),(0,We.h)(([Yo,y])=>y),(0,sn.g)(0),(0,He.R)(Oe));U([Di.pipe((0,Pt.U)(Yo=>0)),cs.pipe((0,Pt.U)(Yo=>1))]).subscribe(Yo=>I.run(()=>z(Yo)))}))}const sr=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","[contenteditable]",'[tabindex]:not([tabindex="-1"])'].join(", ");function Dr(I){const re=Array.from(I.querySelectorAll(sr)).filter(S=>-1!==S.tabIndex);return[re[0],re[re.length-1]]}const oi=(I,re,S,z=!1)=>{I.runOutsideAngular(()=>{const Oe=(0,f.R)(re,"focusin").pipe((0,He.R)(S),(0,Pt.U)(ut=>ut.target));(0,f.R)(re,"keydown").pipe((0,He.R)(S),(0,We.h)(ut=>ut.which===h.Tab),Rn(Oe)).subscribe(([ut,On])=>{const[Ar,ri]=Dr(re);(On===Ar||On===re)&&ut.shiftKey&&(ri.focus(),ut.preventDefault()),On===ri&&!ut.shiftKey&&(Ar.focus(),ut.preventDefault())}),z&&(0,f.R)(re,"click").pipe((0,He.R)(S),Rn(Oe),(0,Pt.U)(ut=>ut[1])).subscribe(ut=>ut.focus())})};let uo=(()=>{class I{constructor(S){this._element=S.documentElement}isRTL(){return"rtl"===(this._element.getAttribute("dir")||"").toLowerCase()}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(ir.K0))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})();const As=/\s+/,as=/  +/gi,ma={top:["top"],bottom:["bottom"],start:["left","right"],left:["left"],end:["right","left"],right:["right"],"top-start":["top-start","top-end"],"top-left":["top-start"],"top-end":["top-end","top-start"],"top-right":["top-end"],"bottom-start":["bottom-start","bottom-end"],"bottom-left":["bottom-start"],"bottom-end":["bottom-end","bottom-start"],"bottom-right":["bottom-end"],"start-top":["left-start","right-start"],"left-top":["left-start"],"start-bottom":["left-end","right-end"],"left-bottom":["left-end"],"end-top":["right-start","left-start"],"right-top":["right-start"],"end-bottom":["right-end","left-end"],"right-bottom":["right-end"]},Pl=/^left/,il=/^right/,dl=/^start/,Nl=/^end/;function ac({placement:I,baseClass:re},S){let z=Array.isArray(I)?I:I.split(As),ut=z.findIndex(Di=>"auto"===Di);ut>=0&&["top","bottom","start","end","top-start","top-end","bottom-start","bottom-end","start-top","start-bottom","end-top","end-bottom"].forEach(function(Di){null==z.find(Pi=>-1!==Pi.search("^"+Di))&&z.splice(ut++,1,Di)});const On=z.map(Di=>function Na(I,re){const[S,z]=ma[I];return re&&z||S}(Di,S.isRTL()));return{placement:On.shift(),modifiers:[{name:"bootstrapClasses",enabled:!!re,phase:"write",fn({state:Di}){const Pi=new RegExp(re+"(-[a-z]+)*","gi"),cs=Di.elements.popper,Yo=Di.placement;let y=cs.className;y=y.replace(Pi,""),y+=` ${function Qu(I,re){let[S,z]=re.split("-");const Oe=S.replace(Pl,"start").replace(il,"end");let ut=[Oe];if(z){let On=z;("left"===S||"right"===S)&&(On=On.replace(dl,"top").replace(Nl,"bottom")),ut.push(`${Oe}-${On}`)}return I&&(ut=ut.map(On=>`${I}-${On}`)),ut.join(" ")}(re,Yo)}`,y=y.trim().replace(as," "),cs.className=y}},es,Is,gl,{enabled:!0,name:"flip",options:{fallbackPlacements:On}},{enabled:!0,name:"preventOverflow",phase:"main",fn:function(){}}]}}function wa(I){return I}function nc(){const I=(0,r.f3M)(uo);let re=null;return{createPopper(S){if(!re){let Oe=(S.updatePopperOptions||wa)(ac(S,I));re=ws(S.hostElement,S.targetElement,Oe)}},update(){re&&re.update()},setOptions(S){if(re){let Oe=(S.updatePopperOptions||wa)(ac(S,I));re.setOptions(Oe)}},destroy(){re&&(re.destroy(),re=null)}}}let yc=(()=>{class I extends N{constructor(){super(...arguments),this.autoClose=!0,this.placement=["bottom-start","bottom-end","top-start","top-end"],this.popperOptions=S=>S,this.restoreFocus=!0}}return I.\u0275fac=function(){let re;return function(z){return(re||(re=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})();function Gc(I){return re=>(re.modifiers.push(Js,{name:"offset",options:{offset:()=>I}}),re)}let wf=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:function(){return function xc(){return new Ql}()},providedIn:"root"}),I})(),Ql=(()=>{class I extends wf{parse(S){if(null!=S){const z=S.trim().split("-");if(1===z.length&&Vs(z[0]))return{year:Ri(z[0]),month:null,day:null};if(2===z.length&&Vs(z[0])&&Vs(z[1]))return{year:Ri(z[0]),month:Ri(z[1]),day:null};if(3===z.length&&Vs(z[0])&&Vs(z[1])&&Vs(z[2]))return{year:Ri(z[0]),month:Ri(z[1]),day:Ri(z[2])}}return null}format(S){return S?`${S.year}-${Vs(S.month)?Qa(S.month):""}-${Vs(S.day)?Qa(S.day):""}`:""}}return I.\u0275fac=function(){let re;return function(z){return(re||(re=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),ee=(()=>{class I{constructor(S,z,Oe,ut,On,Ar,ri,Di,Pi,cs){this._parserFormatter=S,this._elRef=z,this._vcRef=Oe,this._renderer=ut,this._ngZone=On,this._calendar=Ar,this._dateAdapter=ri,this._document=Di,this._changeDetector=Pi,this._cRef=null,this._disabled=!1,this._elWithFocus=null,this._model=null,this._destroyCloseHandlers$=new e.xQ,this.dateSelect=new r.vpe,this.navigate=new r.vpe,this.closed=new r.vpe,this._onChange=Yo=>{},this._onTouched=()=>{},this._validatorChange=()=>{},["autoClose","container","positionTarget","placement","popperOptions"].forEach(Yo=>this[Yo]=cs[Yo]),this._positioning=nc()}get disabled(){return this._disabled}set disabled(S){this._disabled=""===S||S&&"false"!==S,this.isOpen()&&this._cRef.instance.setDisabledState(this._disabled)}registerOnChange(S){this._onChange=S}registerOnTouched(S){this._onTouched=S}registerOnValidatorChange(S){this._validatorChange=S}setDisabledState(S){this.disabled=S}validate(S){const{value:z}=S;if(null!=z){const Oe=this._fromDateStruct(this._dateAdapter.fromModel(z));if(!Oe)return{ngbDate:{invalid:z}};if(this.minDate&&Oe.before(Nu.from(this.minDate)))return{ngbDate:{minDate:{minDate:this.minDate,actual:z}}};if(this.maxDate&&Oe.after(Nu.from(this.maxDate)))return{ngbDate:{maxDate:{maxDate:this.maxDate,actual:z}}}}return null}writeValue(S){this._model=this._fromDateStruct(this._dateAdapter.fromModel(S)),this._writeModelValue(this._model)}manualDateChange(S,z=!1){const Oe=S!==this._inputValue;Oe&&(this._inputValue=S,this._model=this._fromDateStruct(this._parserFormatter.parse(S))),(Oe||!z)&&this._onChange(this._model?this._dateAdapter.toModel(this._model):""===S?null:S),z&&this._model&&this._writeModelValue(this._model)}isOpen(){return!!this._cRef}open(){if(!this.isOpen()){let S;if(this._cRef=this._vcRef.createComponent(Re),this._applyPopupStyling(this._cRef.location.nativeElement),this._applyDatepickerInputs(this._cRef),this._subscribeForDatepickerOutputs(this._cRef.instance),this._cRef.instance.ngOnInit(),this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)),this._cRef.instance.registerOnChange(z=>{this.writeValue(z),this._onChange(z),this._onTouched()}),this._cRef.changeDetectorRef.detectChanges(),this._cRef.instance.setDisabledState(this.disabled),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._cRef.location.nativeElement),this._elWithFocus=this._document.activeElement,oi(this._ngZone,this._cRef.location.nativeElement,this.closed,!0),setTimeout(()=>this._cRef?.instance.focus()),S=Ra(this.positionTarget)?this._document.querySelector(this.positionTarget):this.positionTarget instanceof HTMLElement?this.positionTarget:this._elRef.nativeElement,this._ngZone.runOutsideAngular(()=>{this._cRef&&(this._positioning.createPopper({hostElement:S,targetElement:this._cRef.location.nativeElement,placement:this.placement,appendToBody:"body"===this.container,updatePopperOptions:z=>this.popperOptions(Gc([0,2])(z))}),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positioning.update()))}),this.positionTarget&&!S)throw new Error("ngbDatepicker could not find element declared in [positionTarget] to position against.");this._setCloseHandlers()}}close(){if(this.isOpen()){this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)),this._cRef=null,this._positioning.destroy(),this._zoneSubscription?.unsubscribe(),this._destroyCloseHandlers$.next(),this.closed.emit(),this._changeDetector.markForCheck();let S=this._elWithFocus;Ra(this.restoreFocus)?S=this._document.querySelector(this.restoreFocus):void 0!==this.restoreFocus&&(S=this.restoreFocus),S&&S.focus?S.focus():this._document.body.focus()}}toggle(){this.isOpen()?this.close():this.open()}navigateTo(S){this.isOpen()&&this._cRef.instance.navigateTo(S)}onBlur(){this._onTouched()}onFocus(){this._elWithFocus=this._elRef.nativeElement}ngOnChanges(S){if((S.minDate||S.maxDate)&&(this._validatorChange(),this.isOpen()&&(S.minDate&&(this._cRef.instance.minDate=this.minDate),S.maxDate&&(this._cRef.instance.maxDate=this.maxDate),this._cRef.instance.ngOnChanges(S))),S.datepickerClass){const{currentValue:z,previousValue:Oe}=S.datepickerClass;this._applyPopupClass(z,Oe)}S.autoClose&&this.isOpen()&&this._setCloseHandlers()}ngOnDestroy(){this.close()}_applyDatepickerInputs(S){["contentTemplate","dayTemplate","dayTemplateData","displayMonths","firstDayOfWeek","footerTemplate","markDisabled","minDate","maxDate","navigation","outsideDays","showNavigation","showWeekNumbers","weekdays"].forEach(z=>{void 0!==this[z]&&S.setInput(z,this[z])}),S.setInput("startDate",this.startDate||this._model)}_applyPopupClass(S,z){const Oe=this._cRef?.location.nativeElement;Oe&&(S&&this._renderer.addClass(Oe,S),z&&this._renderer.removeClass(Oe,z))}_applyPopupStyling(S){this._renderer.addClass(S,"dropdown-menu"),this._renderer.addClass(S,"show"),"body"===this.container&&this._renderer.addClass(S,"ngb-dp-body"),this._applyPopupClass(this.datepickerClass)}_subscribeForDatepickerOutputs(S){S.navigate.subscribe(z=>this.navigate.emit(z)),S.dateSelect.subscribe(z=>{this.dateSelect.emit(z),(!0===this.autoClose||"inside"===this.autoClose)&&this.close()})}_writeModelValue(S){const z=this._parserFormatter.format(S);this._inputValue=z,this._renderer.setProperty(this._elRef.nativeElement,"value",z),this.isOpen()&&(this._cRef.instance.writeValue(this._dateAdapter.toModel(S)),this._onTouched())}_fromDateStruct(S){const z=S?new Nu(S.year,S.month,S.day):null;return this._calendar.isValid(z)?z:null}_setCloseHandlers(){this._destroyCloseHandlers$.next(),er(this._ngZone,this._document,this.autoClose,()=>this.close(),this._destroyCloseHandlers$,[],[this._elRef.nativeElement,this._cRef.location.nativeElement])}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(wf),r.Y36(r.SBq),r.Y36(r.s_b),r.Y36(r.Qsj),r.Y36(r.R0b),r.Y36(Qo),r.Y36(ne),r.Y36(ir.K0),r.Y36(r.sBO),r.Y36(yc))},I.\u0275dir=r.lG2({type:I,selectors:[["input","ngbDatepicker",""]],hostVars:1,hostBindings:function(S,z){1&S&&r.NdJ("input",function(ut){return z.manualDateChange(ut.target.value)})("change",function(ut){return z.manualDateChange(ut.target.value,!0)})("focus",function(){return z.onFocus()})("blur",function(){return z.onBlur()}),2&S&&r.Ikx("disabled",z.disabled)},inputs:{autoClose:"autoClose",contentTemplate:"contentTemplate",datepickerClass:"datepickerClass",dayTemplate:"dayTemplate",dayTemplateData:"dayTemplateData",displayMonths:"displayMonths",firstDayOfWeek:"firstDayOfWeek",footerTemplate:"footerTemplate",markDisabled:"markDisabled",minDate:"minDate",maxDate:"maxDate",navigation:"navigation",outsideDays:"outsideDays",placement:"placement",popperOptions:"popperOptions",restoreFocus:"restoreFocus",showWeekNumbers:"showWeekNumbers",startDate:"startDate",container:"container",positionTarget:"positionTarget",weekdays:"weekdays",disabled:"disabled"},outputs:{dateSelect:"dateSelect",navigate:"navigate",closed:"closed"},exportAs:["ngbDatepicker"],standalone:!0,features:[r._Bn([{provide:Qr.JU,useExisting:(0,r.Gpc)(()=>I),multi:!0},{provide:Qr.Cf,useExisting:(0,r.Gpc)(()=>I),multi:!0},{provide:N,useExisting:yc}]),r.TTD]}),I})();new Date(1882,10,12),new Date(2174,10,25);let lp=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[Re,Qe]}),I})(),Mp=(()=>{class I{constructor(){this.autoClose=!0,this.placement=["bottom-start","bottom-end","top-start","top-end"],this.popperOptions=S=>S}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),l_=(()=>{class I{constructor(S,z){this.elementRef=S,this._renderer=z,this._disabled=!1}set disabled(S){this._disabled=""===S||!0===S,this._renderer.setProperty(this.elementRef.nativeElement,"disabled",this._disabled)}get disabled(){return this._disabled}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.SBq),r.Y36(r.Qsj))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdownItem",""]],hostAttrs:[1,"dropdown-item"],hostVars:3,hostBindings:function(S,z){2&S&&(r.Ikx("tabIndex",z.disabled?-1:0),r.ekj("disabled",z.disabled))},inputs:{disabled:"disabled"},standalone:!0}),I})(),u_=(()=>{class I{constructor(S,z){this.dropdown=S,this.placement="bottom",this.isOpen=!1,this.nativeElement=z.nativeElement}}return I.\u0275fac=function(S){return new(S||I)(r.Y36((0,r.Gpc)(()=>jd)),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdownMenu",""]],contentQueries:function(S,z,Oe){if(1&S&&r.Suo(Oe,l_,4),2&S){let ut;r.iGM(ut=r.CRH())&&(z.menuItems=ut)}},hostVars:4,hostBindings:function(S,z){1&S&&r.NdJ("keydown.ArrowUp",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.ArrowDown",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.Home",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.End",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.Enter",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.Space",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.Tab",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.Shift.Tab",function(ut){return z.dropdown.onKeyDown(ut)}),2&S&&r.ekj("dropdown-menu",!0)("show",z.dropdown.isOpen())},standalone:!0}),I})(),mf=(()=>{class I{constructor(S,z){this.dropdown=S,this.nativeElement=z.nativeElement}}return I.\u0275fac=function(S){return new(S||I)(r.Y36((0,r.Gpc)(()=>jd)),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdownAnchor",""]],hostAttrs:[1,"dropdown-toggle"],hostVars:1,hostBindings:function(S,z){2&S&&r.uIk("aria-expanded",z.dropdown.isOpen())},standalone:!0}),I})(),jf=(()=>{class I extends mf{constructor(S,z){super(S,z)}}return I.\u0275fac=function(S){return new(S||I)(r.Y36((0,r.Gpc)(()=>jd)),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdownToggle",""]],hostAttrs:[1,"dropdown-toggle"],hostVars:1,hostBindings:function(S,z){1&S&&r.NdJ("click",function(){return z.dropdown.toggle()})("keydown.ArrowUp",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.ArrowDown",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.Home",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.End",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.Tab",function(ut){return z.dropdown.onKeyDown(ut)})("keydown.Shift.Tab",function(ut){return z.dropdown.onKeyDown(ut)}),2&S&&r.uIk("aria-expanded",z.dropdown.isOpen())},standalone:!0,features:[r._Bn([{provide:mf,useExisting:(0,r.Gpc)(()=>I)}]),r.qOj]}),I})(),jd=(()=>{class I{constructor(S,z,Oe,ut,On,Ar){this._changeDetector=S,this._document=Oe,this._ngZone=ut,this._elementRef=On,this._renderer=Ar,this._destroyCloseHandlers$=new e.xQ,this._bodyContainer=null,this._open=!1,this.openChange=new r.vpe,this.placement=z.placement,this.popperOptions=z.popperOptions,this.container=z.container,this.autoClose=z.autoClose,this._positioning=nc(),this.display=this._elementRef.nativeElement.closest(".navbar")?"static":"dynamic"}ngAfterContentInit(){this._ngZone.onStable.pipe((0,Le.q)(1)).subscribe(()=>{this._applyPlacementClasses(),this._open&&this._setCloseHandlers()})}ngOnChanges(S){if(S.container&&this._open&&this._applyContainer(this.container),S.placement&&!S.placement.firstChange&&(this._positioning.setOptions({hostElement:this._anchor.nativeElement,targetElement:this._bodyContainer||this._menu.nativeElement,placement:this.placement,appendToBody:"body"===this.container}),this._applyPlacementClasses()),S.dropdownClass){const{currentValue:z,previousValue:Oe}=S.dropdownClass;this._applyCustomDropdownClass(z,Oe)}S.autoClose&&this._open&&(this.autoClose=S.autoClose.currentValue,this._setCloseHandlers())}isOpen(){return this._open}open(){this._open||(this._open=!0,this._applyContainer(this.container),this.openChange.emit(!0),this._setCloseHandlers(),this._anchor&&(this._anchor.nativeElement.focus(),"dynamic"===this.display&&this._ngZone.runOutsideAngular(()=>{this._positioning.createPopper({hostElement:this._anchor.nativeElement,targetElement:this._bodyContainer||this._menu.nativeElement,placement:this.placement,appendToBody:"body"===this.container,updatePopperOptions:S=>this.popperOptions(Gc([0,2])(S))}),this._applyPlacementClasses(),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positionMenu())})))}_setCloseHandlers(){this._destroyCloseHandlers$.next(),er(this._ngZone,this._document,this.autoClose,S=>{this.close(),0===S&&this._anchor.nativeElement.focus()},this._destroyCloseHandlers$,this._menu?[this._menu.nativeElement]:[],this._anchor?[this._anchor.nativeElement]:[],".dropdown-item,.dropdown-divider")}close(){this._open&&(this._open=!1,this._resetContainer(),this._positioning.destroy(),this._zoneSubscription?.unsubscribe(),this._destroyCloseHandlers$.next(),this.openChange.emit(!1),this._changeDetector.markForCheck())}toggle(){this.isOpen()?this.close():this.open()}ngOnDestroy(){this.close()}onKeyDown(S){const z=S.which,Oe=this._getMenuElements();let ut=-1,On=null;const Ar=this._isEventFromToggle(S);if(!Ar&&Oe.length&&Oe.forEach((ri,Di)=>{ri.contains(S.target)&&(On=ri),ri===this._document.activeElement&&(ut=Di)}),z!==h.Space&&z!==h.Enter){if(z!==h.Tab){if(Ar||On){if(this.open(),Oe.length){switch(z){case h.ArrowDown:ut=Math.min(ut+1,Oe.length-1);break;case h.ArrowUp:if(this._isDropup()&&-1===ut){ut=Oe.length-1;break}ut=Math.max(ut-1,0);break;case h.Home:ut=0;break;case h.End:ut=Oe.length-1}Oe[ut].focus()}S.preventDefault()}}else if(S.target&&this.isOpen()&&this.autoClose){if(this._anchor.nativeElement===S.target)return void("body"!==this.container||S.shiftKey?S.shiftKey&&this.close():(this._renderer.setAttribute(this._menu.nativeElement,"tabindex","0"),this._menu.nativeElement.focus(),this._renderer.removeAttribute(this._menu.nativeElement,"tabindex")));if("body"===this.container){const ri=this._menu.nativeElement.querySelectorAll(sr);S.shiftKey&&S.target===ri[0]?(this._anchor.nativeElement.focus(),S.preventDefault()):!S.shiftKey&&S.target===ri[ri.length-1]&&(this._anchor.nativeElement.focus(),this.close())}else(0,f.R)(S.target,"focusout").pipe((0,Le.q)(1)).subscribe(({relatedTarget:ri})=>{this._elementRef.nativeElement.contains(ri)||this.close()})}}else On&&(!0===this.autoClose||"inside"===this.autoClose)&&(0,f.R)(On,"click").pipe((0,Le.q)(1)).subscribe(()=>this.close())}_isDropup(){return this._elementRef.nativeElement.classList.contains("dropup")}_isEventFromToggle(S){return this._anchor.nativeElement.contains(S.target)}_getMenuElements(){const S=this._menu;return null==S?[]:S.menuItems.filter(z=>!z.disabled).map(z=>z.elementRef.nativeElement)}_positionMenu(){const S=this._menu;this.isOpen()&&S&&("dynamic"===this.display?(this._positioning.update(),this._applyPlacementClasses()):this._applyPlacementClasses(this._getFirstPlacement(this.placement)))}_getFirstPlacement(S){return Array.isArray(S)?S[0]:S.split(" ")[0]}_resetContainer(){const S=this._renderer;this._menu&&S.appendChild(this._elementRef.nativeElement,this._menu.nativeElement),this._bodyContainer&&(S.removeChild(this._document.body,this._bodyContainer),this._bodyContainer=null)}_applyContainer(S=null){if(this._resetContainer(),"body"===S){const z=this._renderer,Oe=this._menu.nativeElement,ut=this._bodyContainer=this._bodyContainer||z.createElement("div");z.setStyle(ut,"position","absolute"),z.setStyle(Oe,"position","static"),z.setStyle(ut,"z-index","1055"),z.appendChild(ut,Oe),z.appendChild(this._document.body,ut)}this._applyCustomDropdownClass(this.dropdownClass)}_applyCustomDropdownClass(S,z){const Oe="body"===this.container?this._bodyContainer:this._elementRef.nativeElement;Oe&&(z&&this._renderer.removeClass(Oe,z),S&&this._renderer.addClass(Oe,S))}_applyPlacementClasses(S){const z=this._menu;if(z){S||(S=this._getFirstPlacement(this.placement));const Oe=this._renderer,ut=this._elementRef.nativeElement;Oe.removeClass(ut,"dropup"),Oe.removeClass(ut,"dropdown");const{nativeElement:On}=z;"static"===this.display?(z.placement=null,Oe.setAttribute(On,"data-bs-popper","static")):(z.placement=S,Oe.removeAttribute(On,"data-bs-popper"));const Ar=-1!==S.search("^top")?"dropup":"dropdown";Oe.addClass(ut,Ar);const ri=this._bodyContainer;ri&&(Oe.removeClass(ri,"dropup"),Oe.removeClass(ri,"dropdown"),Oe.addClass(ri,Ar))}}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.sBO),r.Y36(Mp),r.Y36(ir.K0),r.Y36(r.R0b),r.Y36(r.SBq),r.Y36(r.Qsj))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdown",""]],contentQueries:function(S,z,Oe){if(1&S&&(r.Suo(Oe,u_,5),r.Suo(Oe,mf,5)),2&S){let ut;r.iGM(ut=r.CRH())&&(z._menu=ut.first),r.iGM(ut=r.CRH())&&(z._anchor=ut.first)}},hostVars:2,hostBindings:function(S,z){2&S&&r.ekj("show",z.isOpen())},inputs:{autoClose:"autoClose",dropdownClass:"dropdownClass",_open:["open","_open"],placement:"placement",popperOptions:"popperOptions",container:"container",display:"display"},outputs:{openChange:"openChange"},exportAs:["ngbDropdown"],standalone:!0,features:[r.TTD]}),I})(),Qh=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({}),I})();class nf{constructor(re,S,z){this.nodes=re,this.viewRef=S,this.componentRef=z}}class Op{constructor(re,S,z,Oe,ut,On){this._componentType=re,this._injector=S,this._viewContainerRef=z,this._renderer=Oe,this._ngZone=ut,this._applicationRef=On,this._windowRef=null,this._contentRef=null}open(re,S,z=!1){this._windowRef||(this._contentRef=this._getContentRef(re,S),this._windowRef=this._viewContainerRef.createComponent(this._componentType,{injector:this._injector,projectableNodes:this._contentRef.nodes}));const{nativeElement:Oe}=this._windowRef.location,ut=this._ngZone.onStable.pipe((0,Le.q)(1),(0,fn.zg)(()=>Nr(this._ngZone,Oe,({classList:On})=>On.add("show"),{animation:z,runningTransition:"continue"})));return{windowRef:this._windowRef,transition$:ut}}close(re=!1){return this._windowRef?Nr(this._ngZone,this._windowRef.location.nativeElement,({classList:S})=>S.remove("show"),{animation:re,runningTransition:"stop"}).pipe((0,pn.b)(()=>{this._windowRef&&(this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)),this._windowRef=null),this._contentRef?.viewRef&&(this._applicationRef.detachView(this._contentRef.viewRef),this._contentRef.viewRef.destroy(),this._contentRef=null)})):(0,u.of)(void 0)}_getContentRef(re,S){if(re){if(re instanceof r.Rgc){const z=re.createEmbeddedView(S);return this._applicationRef.attachView(z),new nf([z.rootNodes],z)}return new nf([[this._renderer.createText(`${re}`)]])}return new nf([])}}let Oh=(()=>{class I{constructor(S,z){this._el=S,this._zone=z}ngOnInit(){this._zone.onStable.asObservable().pipe((0,Le.q)(1)).subscribe(()=>{Nr(this._zone,this._el.nativeElement,(S,z)=>{z&&ae(S),S.classList.add("show")},{animation:this.animation,runningTransition:"continue"})})}hide(){return Nr(this._zone,this._el.nativeElement,({classList:S})=>S.remove("show"),{animation:this.animation,runningTransition:"stop"})}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.SBq),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-modal-backdrop"]],hostAttrs:[2,"z-index","1055"],hostVars:6,hostBindings:function(S,z){2&S&&(r.Tol("modal-backdrop"+(z.backdropClass?" "+z.backdropClass:"")),r.ekj("show",!z.animation)("fade",z.animation))},inputs:{animation:"animation",backdropClass:"backdropClass"},standalone:!0,features:[r.jDz],decls:0,vars:0,template:function(S,z){},encapsulation:2}),I})();class Ap{update(re){}close(re){}dismiss(re){}}const A_=["animation","ariaLabelledBy","ariaDescribedBy","backdrop","centered","fullscreen","keyboard","scrollable","size","windowClass","modalDialogClass"],Dp=["animation","backdropClass"];class Ah{constructor(re,S,z,Oe){this._windowCmptRef=re,this._contentRef=S,this._backdropCmptRef=z,this._beforeDismiss=Oe,this._closed=new e.xQ,this._dismissed=new e.xQ,this._hidden=new e.xQ,re.instance.dismissEvent.subscribe(ut=>{this.dismiss(ut)}),this.result=new Promise((ut,On)=>{this._resolve=ut,this._reject=On}),this.result.then(null,()=>{})}_applyWindowOptions(re,S){A_.forEach(z=>{wl(S[z])&&(re[z]=S[z])})}_applyBackdropOptions(re,S){Dp.forEach(z=>{wl(S[z])&&(re[z]=S[z])})}update(re){this._applyWindowOptions(this._windowCmptRef.instance,re),this._backdropCmptRef&&this._backdropCmptRef.instance&&this._applyBackdropOptions(this._backdropCmptRef.instance,re)}get componentInstance(){if(this._contentRef&&this._contentRef.componentRef)return this._contentRef.componentRef.instance}get closed(){return this._closed.asObservable().pipe((0,He.R)(this._hidden))}get dismissed(){return this._dismissed.asObservable().pipe((0,He.R)(this._hidden))}get hidden(){return this._hidden.asObservable()}get shown(){return this._windowCmptRef.instance.shown.asObservable()}close(re){this._windowCmptRef&&(this._closed.next(re),this._resolve(re),this._removeModalElements())}_dismiss(re){this._dismissed.next(re),this._reject(re),this._removeModalElements()}dismiss(re){if(this._windowCmptRef)if(this._beforeDismiss){const S=this._beforeDismiss();!function Ho(I){return I&&I.then}(S)?!1!==S&&this._dismiss(re):S.then(z=>{!1!==z&&this._dismiss(re)},()=>{})}else this._dismiss(re)}_removeModalElements(){const re=this._windowCmptRef.instance.hide(),S=this._backdropCmptRef?this._backdropCmptRef.instance.hide():(0,u.of)(void 0);re.subscribe(()=>{const{nativeElement:z}=this._windowCmptRef.location;z.parentNode.removeChild(z),this._windowCmptRef.destroy(),this._contentRef&&this._contentRef.viewRef&&this._contentRef.viewRef.destroy(),this._windowCmptRef=null,this._contentRef=null}),S.subscribe(()=>{if(this._backdropCmptRef){const{nativeElement:z}=this._backdropCmptRef.location;z.parentNode.removeChild(z),this._backdropCmptRef.destroy(),this._backdropCmptRef=null}}),se(re,S).subscribe(()=>{this._hidden.next(),this._hidden.complete()})}}var If=(()=>{return(I=If||(If={}))[I.BACKDROP_CLICK=0]="BACKDROP_CLICK",I[I.ESC=1]="ESC",If;var I})();let Yp=(()=>{class I{constructor(S,z,Oe){this._document=S,this._elRef=z,this._zone=Oe,this._closed$=new e.xQ,this._elWithFocus=null,this.backdrop=!0,this.keyboard=!0,this.dismissEvent=new r.vpe,this.shown=new e.xQ,this.hidden=new e.xQ}get fullscreenClass(){return!0===this.fullscreen?" modal-fullscreen":Ra(this.fullscreen)?` modal-fullscreen-${this.fullscreen}-down`:""}dismiss(S){this.dismissEvent.emit(S)}ngOnInit(){this._elWithFocus=this._document.activeElement,this._zone.onStable.asObservable().pipe((0,Le.q)(1)).subscribe(()=>{this._show()})}ngOnDestroy(){this._disableEventHandling()}hide(){const{nativeElement:S}=this._elRef,z={animation:this.animation,runningTransition:"stop"},On=se(Nr(this._zone,S,()=>S.classList.remove("show"),z),Nr(this._zone,this._dialogEl.nativeElement,()=>{},z));return On.subscribe(()=>{this.hidden.next(),this.hidden.complete()}),this._disableEventHandling(),this._restoreFocus(),On}_show(){const S={animation:this.animation,runningTransition:"continue"};se(Nr(this._zone,this._elRef.nativeElement,(ut,On)=>{On&&ae(ut),ut.classList.add("show")},S),Nr(this._zone,this._dialogEl.nativeElement,()=>{},S)).subscribe(()=>{this.shown.next(),this.shown.complete()}),this._enableEventHandling(),this._setFocus()}_enableEventHandling(){const{nativeElement:S}=this._elRef;this._zone.runOutsideAngular(()=>{(0,f.R)(S,"keydown").pipe((0,He.R)(this._closed$),(0,We.h)(Oe=>Oe.which===h.Escape)).subscribe(Oe=>{this.keyboard?requestAnimationFrame(()=>{Oe.defaultPrevented||this._zone.run(()=>this.dismiss(If.ESC))}):"static"===this.backdrop&&this._bumpBackdrop()});let z=!1;(0,f.R)(this._dialogEl.nativeElement,"mousedown").pipe((0,He.R)(this._closed$),(0,pn.b)(()=>z=!1),(0,cn.w)(()=>(0,f.R)(S,"mouseup").pipe((0,He.R)(this._closed$),(0,Le.q)(1))),(0,We.h)(({target:Oe})=>S===Oe)).subscribe(()=>{z=!0}),(0,f.R)(S,"click").pipe((0,He.R)(this._closed$)).subscribe(({target:Oe})=>{S===Oe&&("static"===this.backdrop?this._bumpBackdrop():!0===this.backdrop&&!z&&this._zone.run(()=>this.dismiss(If.BACKDROP_CLICK))),z=!1})})}_disableEventHandling(){this._closed$.next()}_setFocus(){const{nativeElement:S}=this._elRef;if(!S.contains(document.activeElement)){const z=S.querySelector("[ngbAutofocus]"),Oe=Dr(S)[0];(z||Oe||S).focus()}}_restoreFocus(){const S=this._document.body,z=this._elWithFocus;let Oe;Oe=z&&z.focus&&S.contains(z)?z:S,this._zone.runOutsideAngular(()=>{setTimeout(()=>Oe.focus()),this._elWithFocus=null})}_bumpBackdrop(){"static"===this.backdrop&&Nr(this._zone,this._elRef.nativeElement,({classList:S})=>(S.add("modal-static"),()=>S.remove("modal-static")),{animation:this.animation,runningTransition:"continue"})}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(ir.K0),r.Y36(r.SBq),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-modal-window"]],viewQuery:function(S,z){if(1&S&&r.Gf(pt,7),2&S){let Oe;r.iGM(Oe=r.CRH())&&(z._dialogEl=Oe.first)}},hostAttrs:["role","dialog","tabindex","-1"],hostVars:7,hostBindings:function(S,z){2&S&&(r.uIk("aria-modal",!0)("aria-labelledby",z.ariaLabelledBy)("aria-describedby",z.ariaDescribedBy),r.Tol("modal d-block"+(z.windowClass?" "+z.windowClass:"")),r.ekj("fade",z.animation))},inputs:{animation:"animation",ariaLabelledBy:"ariaLabelledBy",ariaDescribedBy:"ariaDescribedBy",backdrop:"backdrop",centered:"centered",fullscreen:"fullscreen",keyboard:"keyboard",scrollable:"scrollable",size:"size",windowClass:"windowClass",modalDialogClass:"modalDialogClass"},outputs:{dismissEvent:"dismiss"},standalone:!0,features:[r.jDz],ngContentSelectors:au,decls:4,vars:2,consts:[["role","document"],["dialog",""],[1,"modal-content"]],template:function(S,z){1&S&&(r.F$t(),r.TgZ(0,"div",0,1)(2,"div",2),r.Hsn(3),r.qZA()()),2&S&&r.Tol("modal-dialog"+(z.size?" modal-"+z.size:"")+(z.centered?" modal-dialog-centered":"")+z.fullscreenClass+(z.scrollable?" modal-dialog-scrollable":"")+(z.modalDialogClass?" "+z.modalDialogClass:""))},styles:["ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\n"],encapsulation:2}),I})(),eh=(()=>{class I{constructor(S){this._document=S}hide(){const S=Math.abs(window.innerWidth-this._document.documentElement.clientWidth),z=this._document.body,Oe=z.style,{overflow:ut,paddingRight:On}=Oe;if(S>0){const Ar=parseFloat(window.getComputedStyle(z).paddingRight);Oe.paddingRight=`${Ar+S}px`}return Oe.overflow="hidden",()=>{S>0&&(Oe.paddingRight=On),Oe.overflow=ut}}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(ir.K0))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),c_=(()=>{class I{constructor(S,z,Oe,ut,On,Ar,ri){this._applicationRef=S,this._injector=z,this._environmentInjector=Oe,this._document=ut,this._scrollBar=On,this._rendererFactory=Ar,this._ngZone=ri,this._activeWindowCmptHasChanged=new e.xQ,this._ariaHiddenValues=new Map,this._scrollBarRestoreFn=null,this._modalRefs=[],this._windowCmpts=[],this._activeInstances=new r.vpe,this._activeWindowCmptHasChanged.subscribe(()=>{if(this._windowCmpts.length){const Di=this._windowCmpts[this._windowCmpts.length-1];oi(this._ngZone,Di.location.nativeElement,this._activeWindowCmptHasChanged),this._revertAriaHidden(),this._setAriaHidden(Di.location.nativeElement)}})}_restoreScrollBar(){const S=this._scrollBarRestoreFn;S&&(this._scrollBarRestoreFn=null,S())}_hideScrollBar(){this._scrollBarRestoreFn||(this._scrollBarRestoreFn=this._scrollBar.hide())}open(S,z,Oe){const ut=Oe.container instanceof HTMLElement?Oe.container:wl(Oe.container)?this._document.querySelector(Oe.container):this._document.body,On=this._rendererFactory.createRenderer(null,null);if(!ut)throw new Error(`The specified modal container "${Oe.container||"body"}" was not found in the DOM.`);this._hideScrollBar();const Ar=new Ap,ri=(S=Oe.injector||S).get(r.lqb,null)||this._environmentInjector,Di=this._getContentRef(S,ri,z,Ar,Oe);let Pi=!1!==Oe.backdrop?this._attachBackdrop(ut):void 0,cs=this._attachWindowComponent(ut,Di.nodes),Yo=new Ah(cs,Di,Pi,Oe.beforeDismiss);return this._registerModalRef(Yo),this._registerWindowCmpt(cs),Yo.hidden.pipe((0,Le.q)(1)).subscribe(()=>Promise.resolve(!0).then(()=>{this._modalRefs.length||(On.removeClass(this._document.body,"modal-open"),this._restoreScrollBar(),this._revertAriaHidden())})),Ar.close=y=>{Yo.close(y)},Ar.dismiss=y=>{Yo.dismiss(y)},Ar.update=y=>{Yo.update(y)},Yo.update(Oe),1===this._modalRefs.length&&On.addClass(this._document.body,"modal-open"),Pi&&Pi.instance&&Pi.changeDetectorRef.detectChanges(),cs.changeDetectorRef.detectChanges(),Yo}get activeInstances(){return this._activeInstances}dismissAll(S){this._modalRefs.forEach(z=>z.dismiss(S))}hasOpenModals(){return this._modalRefs.length>0}_attachBackdrop(S){let z=(0,r.LMc)(Oh,{environmentInjector:this._applicationRef.injector,elementInjector:this._injector});return this._applicationRef.attachView(z.hostView),S.appendChild(z.location.nativeElement),z}_attachWindowComponent(S,z){let Oe=(0,r.LMc)(Yp,{environmentInjector:this._applicationRef.injector,elementInjector:this._injector,projectableNodes:z});return this._applicationRef.attachView(Oe.hostView),S.appendChild(Oe.location.nativeElement),Oe}_getContentRef(S,z,Oe,ut,On){return Oe?Oe instanceof r.Rgc?this._createFromTemplateRef(Oe,ut):Ra(Oe)?this._createFromString(Oe):this._createFromComponent(S,z,Oe,ut,On):new nf([])}_createFromTemplateRef(S,z){const ut=S.createEmbeddedView({$implicit:z,close(On){z.close(On)},dismiss(On){z.dismiss(On)}});return this._applicationRef.attachView(ut),new nf([ut.rootNodes],ut)}_createFromString(S){const z=this._document.createTextNode(`${S}`);return new nf([[z]])}_createFromComponent(S,z,Oe,ut,On){const Ar=r.zs3.create({providers:[{provide:Ap,useValue:ut}],parent:S}),ri=(0,r.LMc)(Oe,{environmentInjector:z,elementInjector:Ar}),Di=ri.location.nativeElement;return On.scrollable&&Di.classList.add("component-host-scrollable"),this._applicationRef.attachView(ri.hostView),new nf([[Di]],ri.hostView,ri)}_setAriaHidden(S){const z=S.parentElement;z&&S!==this._document.body&&(Array.from(z.children).forEach(Oe=>{Oe!==S&&"SCRIPT"!==Oe.nodeName&&(this._ariaHiddenValues.set(Oe,Oe.getAttribute("aria-hidden")),Oe.setAttribute("aria-hidden","true"))}),this._setAriaHidden(z))}_revertAriaHidden(){this._ariaHiddenValues.forEach((S,z)=>{S?z.setAttribute("aria-hidden",S):z.removeAttribute("aria-hidden")}),this._ariaHiddenValues.clear()}_registerModalRef(S){const z=()=>{const Oe=this._modalRefs.indexOf(S);Oe>-1&&(this._modalRefs.splice(Oe,1),this._activeInstances.emit(this._modalRefs))};this._modalRefs.push(S),this._activeInstances.emit(this._modalRefs),S.result.then(z,z)}_registerWindowCmpt(S){this._windowCmpts.push(S),this._activeWindowCmptHasChanged.next(),S.onDestroy(()=>{const z=this._windowCmpts.indexOf(S);z>-1&&(this._windowCmpts.splice(z,1),this._activeWindowCmptHasChanged.next())})}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(r.z2F),r.LFG(r.zs3),r.LFG(r.lqb),r.LFG(ir.K0),r.LFG(eh),r.LFG(r.FYo),r.LFG(r.R0b))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),th=(()=>{class I{constructor(S){this._ngbConfig=S,this.backdrop=!0,this.fullscreen=!1,this.keyboard=!0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(S){this._animation=S}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(rs))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),d_=(()=>{class I{constructor(S,z,Oe){this._injector=S,this._modalStack=z,this._config=Oe}open(S,z={}){const Oe={...this._config,animation:this._config.animation,...z};return this._modalStack.open(this._injector,S,Oe)}get activeInstances(){return this._modalStack.activeInstances}dismissAll(S){this._modalStack.dismissAll(S)}hasOpenModals(){return this._modalStack.hasOpenModals()}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(r.zs3),r.LFG(c_),r.LFG(th))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),nh=(()=>{class I{constructor(S){this._ngbConfig=S,this.destroyOnHide=!0,this.orientation="horizontal",this.roles="tablist",this.keyboard=!1}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(S){this._animation=S}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(rs))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})();const f_=I=>wl(I)&&""!==I;let Kh=0,up=(()=>{class I{constructor(S){this.templateRef=S}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.Rgc))},I.\u0275dir=r.lG2({type:I,selectors:[["ng-template","ngbNavContent",""]],standalone:!0}),I})(),Dh=(()=>{class I{constructor(S,z){this.role=S,this.nav=z}}return I.\u0275fac=function(S){return new(S||I)(r.$8M("role"),r.Y36((0,r.Gpc)(()=>Td)))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbNavItem","",5,"ng-container"]],hostVars:1,hostBindings:function(S,z){2&S&&r.uIk("role",z.role?z.role:z.nav.roles?"presentation":void 0)},standalone:!0}),I})(),jp=(()=>{class I{constructor(S,z){this._nav=S,this.elementRef=z,this.disabled=!1,this.shown=new r.vpe,this.hidden=new r.vpe}ngAfterContentChecked(){this.contentTpl=this.contentTpls.first}ngOnInit(){wl(this.domId)||(this.domId="ngb-nav-"+Kh++)}get active(){return this._nav.activeId===this.id}get id(){return f_(this._id)?this._id:this.domId}get panelDomId(){return`${this.domId}-panel`}isPanelInDom(){return(wl(this.destroyOnHide)?!this.destroyOnHide:!this._nav.destroyOnHide)||this.active}}return I.\u0275fac=function(S){return new(S||I)(r.Y36((0,r.Gpc)(()=>Td)),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbNavItem",""]],contentQueries:function(S,z,Oe){if(1&S&&r.Suo(Oe,up,4),2&S){let ut;r.iGM(ut=r.CRH())&&(z.contentTpls=ut)}},hostVars:2,hostBindings:function(S,z){2&S&&r.ekj("nav-item",!0)},inputs:{destroyOnHide:"destroyOnHide",disabled:"disabled",domId:"domId",_id:["ngbNavItem","_id"]},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbNavItem"],standalone:!0}),I})(),Td=(()=>{class I{constructor(S,z,Oe,ut){this.role=S,this._cd=Oe,this._document=ut,this.activeIdChange=new r.vpe,this.shown=new r.vpe,this.hidden=new r.vpe,this.destroy$=new e.xQ,this.navItemChange$=new e.xQ,this.navChange=new r.vpe,this.animation=z.animation,this.destroyOnHide=z.destroyOnHide,this.orientation=z.orientation,this.roles=z.roles,this.keyboard=z.keyboard}click(S){S.disabled||this._updateActiveId(S.id)}onKeyDown(S){if("tablist"!==this.roles||!this.keyboard)return;const z=S.which,Oe=this.links.filter(Ar=>!Ar.navItem.disabled),{length:ut}=Oe;let On=-1;if(Oe.forEach((Ar,ri)=>{Ar.elRef.nativeElement===this._document.activeElement&&(On=ri)}),ut){switch(z){case h.ArrowLeft:if("vertical"===this.orientation)return;On=(On-1+ut)%ut;break;case h.ArrowRight:if("vertical"===this.orientation)return;On=(On+1)%ut;break;case h.ArrowDown:if("horizontal"===this.orientation)return;On=(On+1)%ut;break;case h.ArrowUp:if("horizontal"===this.orientation)return;On=(On-1+ut)%ut;break;case h.Home:On=0;break;case h.End:On=ut-1}"changeWithArrows"===this.keyboard&&this.select(Oe[On].navItem.id),Oe[On].elRef.nativeElement.focus(),S.preventDefault()}}select(S){this._updateActiveId(S,!1)}ngAfterContentInit(){if(!wl(this.activeId)){const S=this.items.first?this.items.first.id:null;f_(S)&&(this._updateActiveId(S,!1),this._cd.detectChanges())}this.items.changes.pipe((0,He.R)(this.destroy$)).subscribe(()=>this._notifyItemChanged(this.activeId))}ngOnChanges({activeId:S}){S&&!S.firstChange&&this._notifyItemChanged(S.currentValue)}ngOnDestroy(){this.destroy$.next()}_updateActiveId(S,z=!0){if(this.activeId!==S){let Oe=!1;z&&this.navChange.emit({activeId:this.activeId,nextId:S,preventDefault:()=>{Oe=!0}}),Oe||(this.activeId=S,this.activeIdChange.emit(S),this._notifyItemChanged(S))}}_notifyItemChanged(S){this.navItemChange$.next(this._getItemById(S))}_getItemById(S){return this.items&&this.items.find(z=>z.id===S)||null}}return I.\u0275fac=function(S){return new(S||I)(r.$8M("role"),r.Y36(nh),r.Y36(r.sBO),r.Y36(ir.K0))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbNav",""]],contentQueries:function(S,z,Oe){if(1&S&&(r.Suo(Oe,jp,4),r.Suo(Oe,gf,5)),2&S){let ut;r.iGM(ut=r.CRH())&&(z.items=ut),r.iGM(ut=r.CRH())&&(z.links=ut)}},hostVars:6,hostBindings:function(S,z){1&S&&r.NdJ("keydown.arrowLeft",function(ut){return z.onKeyDown(ut)})("keydown.arrowRight",function(ut){return z.onKeyDown(ut)})("keydown.arrowDown",function(ut){return z.onKeyDown(ut)})("keydown.arrowUp",function(ut){return z.onKeyDown(ut)})("keydown.Home",function(ut){return z.onKeyDown(ut)})("keydown.End",function(ut){return z.onKeyDown(ut)}),2&S&&(r.uIk("aria-orientation","vertical"===z.orientation&&"tablist"===z.roles?"vertical":void 0)("role",z.role?z.role:z.roles?"tablist":void 0),r.ekj("nav",!0)("flex-column","vertical"===z.orientation))},inputs:{activeId:"activeId",animation:"animation",destroyOnHide:"destroyOnHide",orientation:"orientation",roles:"roles",keyboard:"keyboard"},outputs:{activeIdChange:"activeIdChange",shown:"shown",hidden:"hidden",navChange:"navChange"},exportAs:["ngbNav"],standalone:!0,features:[r.TTD]}),I})(),gf=(()=>{class I{constructor(S,z,Oe,ut){this.role=S,this.navItem=z,this.nav=Oe,this.elRef=ut}hasNavItemClass(){return this.navItem.elementRef.nativeElement.nodeType===Node.COMMENT_NODE}}return I.\u0275fac=function(S){return new(S||I)(r.$8M("role"),r.Y36(jp),r.Y36(Td),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbNavLink",""]],hostVars:14,hostBindings:function(S,z){2&S&&(r.Ikx("id",z.navItem.domId),r.uIk("role",z.role?z.role:z.nav.roles?"tab":void 0)("tabindex",z.navItem.disabled?-1:void 0)("aria-controls",z.navItem.isPanelInDom()?z.navItem.panelDomId:null)("aria-selected",z.navItem.active)("aria-disabled",z.navItem.disabled),r.ekj("nav-link",!0)("nav-item",z.hasNavItemClass())("active",z.navItem.active)("disabled",z.navItem.disabled))},standalone:!0}),I})(),Ta=(()=>{class I{constructor(S,z){this.navItem=S,this.nav=z}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(jp),r.Y36(Td))},I.\u0275dir=r.lG2({type:I,selectors:[["a","ngbNavLink",""]],hostAttrs:["href",""],hostBindings:function(S,z){1&S&&r.NdJ("click",function(ut){return z.nav.click(z.navItem),ut.preventDefault()})},standalone:!0,features:[r.zW0([gf])]}),I})();const fd=({classList:I})=>(I.remove("show"),()=>I.remove("active")),Tc=(I,re)=>{re&&ae(I),I.classList.add("show")};let Zs=(()=>{class I{constructor(S){this.elRef=S}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbNavPane",""]],hostAttrs:[1,"tab-pane"],hostVars:5,hostBindings:function(S,z){2&S&&(r.Ikx("id",z.item.panelDomId),r.uIk("role",z.role?z.role:z.nav.roles?"tabpanel":void 0)("aria-labelledby",z.item.domId),r.ekj("fade",z.nav.animation))},inputs:{item:"item",nav:"nav",role:"role"},standalone:!0}),I})(),vf=(()=>{class I{constructor(S,z){this._cd=S,this._ngZone=z,this._activePane=null}isPanelTransitioning(S){return this._activePane?.item===S}ngAfterViewInit(){this._updateActivePane(),this.nav.navItemChange$.pipe((0,He.R)(this.nav.destroy$),(0,it.O)(this._activePane?.item||null),(0,Xt.x)(),function xn(I){return re=>re.lift(new Kr(I))}(1)).subscribe(S=>{const z={animation:this.nav.animation,runningTransition:"stop"};this._cd.detectChanges(),this._activePane?Nr(this._ngZone,this._activePane.elRef.nativeElement,fd,z).subscribe(()=>{const Oe=this._activePane?.item;this._activePane=this._getPaneForItem(S),this._cd.markForCheck(),this._activePane&&(this._activePane.elRef.nativeElement.classList.add("active"),Nr(this._ngZone,this._activePane.elRef.nativeElement,Tc,z).subscribe(()=>{S&&(S.shown.emit(),this.nav.shown.emit(S.id))})),Oe&&(Oe.hidden.emit(),this.nav.hidden.emit(Oe.id))}):this._updateActivePane()})}_updateActivePane(){this._activePane=this._getActivePane(),this._activePane?.elRef.nativeElement.classList.add("show"),this._activePane?.elRef.nativeElement.classList.add("active")}_getPaneForItem(S){return this._panes&&this._panes.find(z=>z.item===S)||null}_getActivePane(){return this._panes&&this._panes.find(S=>S.item.active)||null}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.sBO),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["","ngbNavOutlet",""]],viewQuery:function(S,z){if(1&S&&r.Gf(Zs,5),2&S){let Oe;r.iGM(Oe=r.CRH())&&(z._panes=Oe)}},hostVars:2,hostBindings:function(S,z){2&S&&r.ekj("tab-content",!0)},inputs:{paneRole:"paneRole",nav:["ngbNavOutlet","nav"]},standalone:!0,features:[r.jDz],attrs:Je,decls:1,vars:1,consts:[["ngFor","",3,"ngForOf"],["ngbNavPane","",3,"item","nav","role",4,"ngIf"],["ngbNavPane","",3,"item","nav","role"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(S,z){1&S&&r.YNc(0,To,1,1,"ng-template",0),2&S&&r.Q6J("ngForOf",z.nav.items)},dependencies:[Zs,ir.ax,ir.O5,ir.tP],encapsulation:2,changeDetection:0}),I})(),Cc=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[vf]}),I})();class ih{constructor(re,S){this.open=re,this.close=S,S||(this.close=re)}isManual(){return"manual"===this.open||"manual"===this.close}}const lc={hover:["mouseenter","mouseleave"],focus:["focusin","focusout"]},Vd=I=>I>0?(0,sn.g)(I):re=>re;function h_(I,re,S,z,Oe,ut,On=0,Ar=0){const ri=function Ku(I,re=lc){const S=(I||"").trim();if(0===S.length)return[];const z=S.split(/\s+/).map(ut=>ut.split(":")).map(ut=>{let On=re[ut[0]]||ut;return new ih(On[0],On[1])}),Oe=z.filter(ut=>ut.isManual());if(Oe.length>1)throw"Triggers parse error: only one manual trigger is allowed";if(1===Oe.length&&z.length>1)throw"Triggers parse error: manual trigger can't be mixed with other triggers";return z}(S);if(1===ri.length&&ri[0].isManual())return()=>{};const Di=function Zf(I,re,S,z){return new a.y(Oe=>{const ut=[],On=()=>Oe.next(!0),Ar=()=>Oe.next(!1),ri=()=>Oe.next(!z());return S.forEach(Di=>{Di.open===Di.close?ut.push(I.listen(re,Di.open,ri)):ut.push(I.listen(re,Di.open,On),I.listen(re,Di.close,Ar))}),()=>{ut.forEach(Di=>Di())}})}(I,re,ri,z).pipe(function Wf(I,re,S){return z=>{let Oe=null;const ut=z.pipe((0,Pt.U)(ri=>({open:ri})),(0,We.h)(ri=>{const Di=S();return Di===ri.open||Oe&&Oe.open!==Di?(Oe&&Oe.open!==ri.open&&(Oe=null),!1):(Oe=ri,!0)}),(0,Lr.B)()),On=ut.pipe((0,We.h)(ri=>ri.open),Vd(I)),Ar=ut.pipe((0,We.h)(ri=>!ri.open),Vd(re));return(0,ot.T)(On,Ar).pipe((0,We.h)(ri=>ri===Oe&&(Oe=null,ri.open!==S())),(0,Pt.U)(ri=>ri.open))}}(On,Ar,z)).subscribe(Pi=>Pi?Oe():ut());return()=>Di.unsubscribe()}let kf=(()=>{class I{constructor(S){this._ngbConfig=S,this.autoClose=!0,this.placement="auto",this.popperOptions=z=>z,this.triggers="click",this.disablePopover=!1,this.openDelay=0,this.closeDelay=0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(S){this._animation=S}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(rs))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),rf=0,R_=(()=>{class I{isTitleTemplate(){return this.title instanceof r.Rgc}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-popover-window"]],hostAttrs:["role","tooltip",2,"position","absolute"],hostVars:5,hostBindings:function(S,z){2&S&&(r.Ikx("id",z.id),r.Tol("popover"+(z.popoverClass?" "+z.popoverClass:"")),r.ekj("fade",z.animation))},inputs:{animation:"animation",title:"title",id:"id",popoverClass:"popoverClass",context:"context"},standalone:!0,features:[r.jDz],ngContentSelectors:au,decls:4,vars:1,consts:[["data-popper-arrow","",1,"popover-arrow"],["class","popover-header",4,"ngIf"],[1,"popover-body"],[1,"popover-header"],["simpleTitle",""],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(S,z){1&S&&(r.F$t(),r._UZ(0,"div",0),r.YNc(1,Go,4,2,"h3",1),r.TgZ(2,"div",2),r.Hsn(3),r.qZA()),2&S&&(r.xp6(1),r.Q6J("ngIf",z.title))},dependencies:[ir.tP,ir.O5],encapsulation:2,changeDetection:0}),I})(),x_=(()=>{class I{constructor(S,z,Oe,ut,On,Ar,ri,Di,Pi){this._elementRef=S,this._renderer=z,this._ngZone=Ar,this._document=ri,this._changeDetector=Di,this.shown=new r.vpe,this.hidden=new r.vpe,this._ngbPopoverWindowId="ngb-popover-"+rf++,this._windowRef=null,this.animation=On.animation,this.autoClose=On.autoClose,this.placement=On.placement,this.popperOptions=On.popperOptions,this.triggers=On.triggers,this.container=On.container,this.disablePopover=On.disablePopover,this.popoverClass=On.popoverClass,this.openDelay=On.openDelay,this.closeDelay=On.closeDelay,this._positioning=nc(),this._popupService=new Op(R_,Oe,ut,z,this._ngZone,Pi)}_isDisabled(){return!(!this.disablePopover&&(this.ngbPopover||this.popoverTitle))}open(S){if(!this._windowRef&&!this._isDisabled()){const{windowRef:z,transition$:Oe}=this._popupService.open(this.ngbPopover,S,this.animation);this._windowRef=z,this._windowRef.setInput("animation",this.animation),this._windowRef.setInput("title",this.popoverTitle),this._windowRef.setInput("context",S),this._windowRef.setInput("popoverClass",this.popoverClass),this._windowRef.setInput("id",this._ngbPopoverWindowId),this._renderer.setAttribute(this._getPositionTargetElement(),"aria-describedby",this._ngbPopoverWindowId),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._windowRef.changeDetectorRef.detectChanges(),this._windowRef.changeDetectorRef.markForCheck(),this._ngZone.runOutsideAngular(()=>{this._positioning.createPopper({hostElement:this._getPositionTargetElement(),targetElement:this._windowRef.location.nativeElement,placement:this.placement,appendToBody:"body"===this.container,baseClass:"bs-popover",updatePopperOptions:ut=>this.popperOptions(Gc([0,8])(ut))}),Promise.resolve().then(()=>{this._positioning.update(),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positioning.update())})}),er(this._ngZone,this._document,this.autoClose,()=>this.close(),this.hidden,[this._windowRef.location.nativeElement]),Oe.subscribe(()=>this.shown.emit())}}close(S=this.animation){this._windowRef&&(this._renderer.removeAttribute(this._getPositionTargetElement(),"aria-describedby"),this._popupService.close(S).subscribe(()=>{this._windowRef=null,this._positioning.destroy(),this._zoneSubscription?.unsubscribe(),this.hidden.emit(),this._changeDetector.markForCheck()}))}toggle(){this._windowRef?this.close():this.open()}isOpen(){return null!=this._windowRef}ngOnInit(){this._unregisterListenersFn=h_(this._renderer,this._elementRef.nativeElement,this.triggers,this.isOpen.bind(this),this.open.bind(this),this.close.bind(this),+this.openDelay,+this.closeDelay)}ngOnChanges({ngbPopover:S,popoverTitle:z,disablePopover:Oe,popoverClass:ut}){ut&&this.isOpen()&&(this._windowRef.instance.popoverClass=ut.currentValue),(S||z||Oe)&&this._isDisabled()&&this.close()}ngOnDestroy(){this.close(!1),this._unregisterListenersFn?.()}_getPositionTargetElement(){return(Ra(this.positionTarget)?this._document.querySelector(this.positionTarget):this.positionTarget)||this._elementRef.nativeElement}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(r.s_b),r.Y36(kf),r.Y36(r.R0b),r.Y36(ir.K0),r.Y36(r.sBO),r.Y36(r.z2F))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbPopover",""]],inputs:{animation:"animation",autoClose:"autoClose",ngbPopover:"ngbPopover",popoverTitle:"popoverTitle",placement:"placement",popperOptions:"popperOptions",triggers:"triggers",positionTarget:"positionTarget",container:"container",disablePopover:"disablePopover",popoverClass:"popoverClass",openDelay:"openDelay",closeDelay:"closeDelay"},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbPopover"],standalone:!0,features:[r.TTD]}),I})(),Jf=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({}),I})(),oh=(()=>{class I{constructor(){this.max=100,this.animated=!1,this.ariaLabel="progress bar",this.striped=!1,this.showValue=!1}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Rp=(()=>{class I{constructor(S){this.value=0,this.max=S.max,this.animated=S.animated,this.ariaLabel=S.ariaLabel,this.striped=S.striped,this.textType=S.textType,this.type=S.type,this.showValue=S.showValue,this.height=S.height}set max(S){this._max=!Vs(S)||S<=0?100:S}get max(){return this._max}getValue(){return function Fs(I,re,S=0){return Math.max(Math.min(I,re),S)}(this.value,this.max)}getPercentValue(){return 100*this.getValue()/this.max}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(oh))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-progressbar"]],hostAttrs:["role","progressbar","aria-valuemin","0",1,"progress"],hostVars:5,hostBindings:function(S,z){2&S&&(r.uIk("aria-valuenow",z.getValue())("aria-valuemax",z.max)("aria-label",z.ariaLabel),r.Udp("height",z.height))},inputs:{max:"max",animated:"animated",ariaLabel:"ariaLabel",striped:"striped",showValue:"showValue",textType:"textType",type:"type",value:"value",height:"height"},standalone:!0,features:[r.jDz],ngContentSelectors:au,decls:3,vars:11,consts:function(){let re;return re="" + "\ufffd0\ufffd" + "",[[4,"ngIf"],re]},template:function(S,z){1&S&&(r.F$t(),r.TgZ(0,"div"),r.YNc(1,Io,3,3,"span",0),r.Hsn(2),r.qZA()),2&S&&(r.MT6("progress-bar",z.type?z.textType?" bg-"+z.type:" text-bg-"+z.type:"","",z.textType?" text-"+z.textType:"",""),r.Udp("width",z.getPercentValue(),"%"),r.ekj("progress-bar-animated",z.animated)("progress-bar-striped",z.striped),r.xp6(1),r.Q6J("ngIf",z.showValue))},dependencies:[ir.O5,ir.Zx],encapsulation:2,changeDetection:0}),I})(),dp=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[Rp]}),I})();class xp{constructor(re,S,z){this.hour=Ri(re),this.minute=Ri(S),this.second=Ri(z)}changeHour(re=1){this.updateHour((isNaN(this.hour)?0:this.hour)+re)}updateHour(re){this.hour=Vs(re)?(re<0?24+re:re)%24:NaN}changeMinute(re=1){this.updateMinute((isNaN(this.minute)?0:this.minute)+re)}updateMinute(re){Vs(re)?(this.minute=re%60<0?60+re%60:re%60,this.changeHour(Math.floor(re/60))):this.minute=NaN}changeSecond(re=1){this.updateSecond((isNaN(this.second)?0:this.second)+re)}updateSecond(re){Vs(re)?(this.second=re<0?60+re%60:re%60,this.changeMinute(Math.floor(re/60))):this.second=NaN}isValid(re=!0){return Vs(this.hour)&&Vs(this.minute)&&(!re||Vs(this.second))}toString(){return`${this.hour||0}:${this.minute||0}:${this.second||0}`}}let wd=(()=>{class I{constructor(){this.meridian=!1,this.spinners=!0,this.seconds=!1,this.hourStep=1,this.minuteStep=1,this.secondStep=1,this.disabled=!1,this.readonlyInputs=!1,this.size="medium"}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),wp=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:function(){return function w_(){return new Rh}()},providedIn:"root"}),I})(),Rh=(()=>{class I extends wp{fromModel(S){return S&&Ms(S.hour)&&Ms(S.minute)?{hour:S.hour,minute:S.minute,second:Ms(S.second)?S.second:null}:null}toModel(S){return S&&Ms(S.hour)&&Ms(S.minute)?{hour:S.hour,minute:S.minute,second:Ms(S.second)?S.second:null}:null}}return I.\u0275fac=function(){let re;return function(z){return(re||(re=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),pp=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:function(S){let z=null;return z=S?new S:function sh(I){return new Xh(I)}(r.LFG(r.soG)),z},providedIn:"root"}),I})(),Xh=(()=>{class I extends pp{constructor(S){super(),this._periods=(0,ir.ol)(S,ir.x.Standalone,ir.Tn.Narrow)}getMorningPeriod(){return this._periods[0]}getAfternoonPeriod(){return this._periods[1]}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(r.soG))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})();const Ef=/[^0-9]/g;let Sf=(()=>{class I{constructor(S,z,Oe,ut){this._config=S,this._ngbTimeAdapter=z,this._cd=Oe,this.i18n=ut,this.onChange=On=>{},this.onTouched=()=>{},this.meridian=S.meridian,this.spinners=S.spinners,this.seconds=S.seconds,this.hourStep=S.hourStep,this.minuteStep=S.minuteStep,this.secondStep=S.secondStep,this.disabled=S.disabled,this.readonlyInputs=S.readonlyInputs,this.size=S.size}set hourStep(S){this._hourStep=Ms(S)?S:this._config.hourStep}get hourStep(){return this._hourStep}set minuteStep(S){this._minuteStep=Ms(S)?S:this._config.minuteStep}get minuteStep(){return this._minuteStep}set secondStep(S){this._secondStep=Ms(S)?S:this._config.secondStep}get secondStep(){return this._secondStep}writeValue(S){const z=this._ngbTimeAdapter.fromModel(S);this.model=z?new xp(z.hour,z.minute,z.second):new xp,!this.seconds&&(!z||!Vs(z.second))&&(this.model.second=0),this._cd.markForCheck()}registerOnChange(S){this.onChange=S}registerOnTouched(S){this.onTouched=S}setDisabledState(S){this.disabled=S}changeHour(S){this.model?.changeHour(S),this.propagateModelChange()}changeMinute(S){this.model?.changeMinute(S),this.propagateModelChange()}changeSecond(S){this.model?.changeSecond(S),this.propagateModelChange()}updateHour(S){const z=!!this.model&&this.model.hour>=12,Oe=Ri(S);this.model?.updateHour(this.meridian&&(z&&Oe<12||!z&&12===Oe)?Oe+12:Oe),this.propagateModelChange()}updateMinute(S){this.model?.updateMinute(Ri(S)),this.propagateModelChange()}updateSecond(S){this.model?.updateSecond(Ri(S)),this.propagateModelChange()}toggleMeridian(){this.meridian&&this.changeHour(12)}formatInput(S){S.value=S.value.replace(Ef,"")}formatHour(S){return Vs(S)?Qa(this.meridian?S%12==0?12:S%12:S%24):Qa(NaN)}formatMinSec(S){return Qa(Vs(S)?S:NaN)}handleBlur(){this.onTouched()}get isSmallSize(){return"small"===this.size}get isLargeSize(){return"large"===this.size}ngOnChanges(S){S.seconds&&!this.seconds&&this.model&&!Vs(this.model.second)&&(this.model.second=0,this.propagateModelChange(!1))}propagateModelChange(S=!0){S&&this.onTouched(),this.model?.isValid(this.seconds)?this.onChange(this._ngbTimeAdapter.toModel({hour:this.model.hour,minute:this.model.minute,second:this.model.second})):this.onChange(this._ngbTimeAdapter.toModel(null))}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(wd),r.Y36(wp),r.Y36(r.sBO),r.Y36(pp))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-timepicker"]],inputs:{meridian:"meridian",spinners:"spinners",seconds:"seconds",hourStep:"hourStep",minuteStep:"minuteStep",secondStep:"secondStep",readonlyInputs:"readonlyInputs",size:"size"},exportAs:["ngbTimepicker"],standalone:!0,features:[r._Bn([{provide:Qr.JU,useExisting:(0,r.Gpc)(()=>I),multi:!0}]),r.TTD,r.jDz],decls:16,vars:25,consts:function(){let re,S,z,Oe,ut,On,Ar,ri,Di,Pi,cs,Yo,y,x;return re="HH",S="Hours",z="MM",Oe="Minutes",ut="Increment hours",On="Decrement hours",Ar="Increment minutes",ri="Decrement minutes",Di="SS",Pi="Seconds",cs="Increment seconds",Yo="Decrement seconds",y="" + "\ufffd0\ufffd" + "",x="" + "\ufffd0\ufffd" + "",[[3,"disabled"],[1,"ngb-tp"],[1,"ngb-tp-input-container","ngb-tp-hour"],["tabindex","-1","type","button","class","btn btn-link",3,"btn-sm","btn-lg","disabled","click",4,"ngIf"],["type","text","maxlength","2","inputmode","numeric","placeholder",re,"aria-label",S,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],[1,"ngb-tp-spacer"],[1,"ngb-tp-input-container","ngb-tp-minute"],["type","text","maxlength","2","inputmode","numeric","placeholder",z,"aria-label",Oe,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],["class","ngb-tp-spacer",4,"ngIf"],["class","ngb-tp-input-container ngb-tp-second",4,"ngIf"],["class","ngb-tp-meridian",4,"ngIf"],["tabindex","-1","type","button",1,"btn","btn-link",3,"disabled","click"],[1,"chevron","ngb-tp-chevron"],[1,"visually-hidden"],ut,[1,"chevron","ngb-tp-chevron","bottom"],On,Ar,ri,[1,"ngb-tp-input-container","ngb-tp-second"],["type","text","maxlength","2","inputmode","numeric","placeholder",Di,"aria-label",Pi,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],cs,Yo,[1,"ngb-tp-meridian"],["type","button",1,"btn","btn-outline-primary",3,"disabled","click"],[4,"ngIf","ngIfElse"],["am",""],y,x]},template:function(S,z){1&S&&(r.TgZ(0,"fieldset",0)(1,"div",1)(2,"div",2),r.YNc(3,Ui,4,7,"button",3),r.TgZ(4,"input",4),r.NdJ("change",function(ut){return z.updateHour(ut.target.value)})("blur",function(){return z.handleBlur()})("input",function(ut){return z.formatInput(ut.target)})("keydown.ArrowUp",function(ut){return z.changeHour(z.hourStep),ut.preventDefault()})("keydown.ArrowDown",function(ut){return z.changeHour(-z.hourStep),ut.preventDefault()}),r.qZA(),r.YNc(5,Do,4,7,"button",3),r.qZA(),r.TgZ(6,"div",5),r._uU(7,":"),r.qZA(),r.TgZ(8,"div",6),r.YNc(9,Fa,4,7,"button",3),r.TgZ(10,"input",7),r.NdJ("change",function(ut){return z.updateMinute(ut.target.value)})("blur",function(){return z.handleBlur()})("input",function(ut){return z.formatInput(ut.target)})("keydown.ArrowUp",function(ut){return z.changeMinute(z.minuteStep),ut.preventDefault()})("keydown.ArrowDown",function(ut){return z.changeMinute(-z.minuteStep),ut.preventDefault()}),r.qZA(),r.YNc(11,ca,4,7,"button",3),r.qZA(),r.YNc(12,zo,2,0,"div",8),r.YNc(13,Uu,4,9,"div",9),r.YNc(14,Xc,1,0,"div",8),r.YNc(15,yi,5,9,"div",10),r.qZA()()),2&S&&(r.ekj("disabled",z.disabled),r.Q6J("disabled",z.disabled),r.xp6(3),r.Q6J("ngIf",z.spinners),r.xp6(1),r.ekj("form-control-sm",z.isSmallSize)("form-control-lg",z.isLargeSize),r.Q6J("value",z.formatHour(null==z.model?null:z.model.hour))("readOnly",z.readonlyInputs)("disabled",z.disabled),r.xp6(1),r.Q6J("ngIf",z.spinners),r.xp6(4),r.Q6J("ngIf",z.spinners),r.xp6(1),r.ekj("form-control-sm",z.isSmallSize)("form-control-lg",z.isLargeSize),r.Q6J("value",z.formatMinSec(null==z.model?null:z.model.minute))("readOnly",z.readonlyInputs)("disabled",z.disabled),r.xp6(1),r.Q6J("ngIf",z.spinners),r.xp6(1),r.Q6J("ngIf",z.seconds),r.xp6(1),r.Q6J("ngIf",z.seconds),r.xp6(1),r.Q6J("ngIf",z.meridian),r.xp6(1),r.Q6J("ngIf",z.meridian))},dependencies:[ir.O5],styles:['ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:"";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-minute,.ngb-tp-second,.ngb-tp-meridian{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}\n'],encapsulation:2}),I})(),Vp=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[Sf]}),I})(),I_=(()=>{class I{constructor(S){this._ngbConfig=S,this.autoClose=!0,this.placement="auto",this.popperOptions=z=>z,this.triggers="hover focus",this.disableTooltip=!1,this.openDelay=0,this.closeDelay=0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(S){this._animation=S}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(rs))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Zp=0,Qc=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-tooltip-window"]],hostAttrs:["role","tooltip",2,"position","absolute"],hostVars:5,hostBindings:function(S,z){2&S&&(r.Ikx("id",z.id),r.Tol("tooltip"+(z.tooltipClass?" "+z.tooltipClass:"")),r.ekj("fade",z.animation))},inputs:{animation:"animation",id:"id",tooltipClass:"tooltipClass"},standalone:!0,features:[r.jDz],ngContentSelectors:au,decls:3,vars:0,consts:[["data-popper-arrow","",1,"tooltip-arrow"],[1,"tooltip-inner"]],template:function(S,z){1&S&&(r.F$t(),r._UZ(0,"div",0),r.TgZ(1,"div",1),r.Hsn(2),r.qZA())},encapsulation:2,changeDetection:0}),I})(),em=(()=>{class I{constructor(S,z,Oe,ut,On,Ar,ri,Di,Pi){this._elementRef=S,this._renderer=z,this._ngZone=Ar,this._document=ri,this._changeDetector=Di,this.shown=new r.vpe,this.hidden=new r.vpe,this._ngbTooltipWindowId="ngb-tooltip-"+Zp++,this._windowRef=null,this.animation=On.animation,this.autoClose=On.autoClose,this.placement=On.placement,this.popperOptions=On.popperOptions,this.triggers=On.triggers,this.container=On.container,this.disableTooltip=On.disableTooltip,this.tooltipClass=On.tooltipClass,this.openDelay=On.openDelay,this.closeDelay=On.closeDelay,this._popupService=new Op(Qc,Oe,ut,z,this._ngZone,Pi),this._positioning=nc()}set ngbTooltip(S){this._ngbTooltip=S,!S&&this._windowRef&&this.close()}get ngbTooltip(){return this._ngbTooltip}open(S){if(!this._windowRef&&this._ngbTooltip&&!this.disableTooltip){const{windowRef:z,transition$:Oe}=this._popupService.open(this._ngbTooltip,S,this.animation);this._windowRef=z,this._windowRef.setInput("animation",this.animation),this._windowRef.setInput("tooltipClass",this.tooltipClass),this._windowRef.setInput("id",this._ngbTooltipWindowId),this._renderer.setAttribute(this._getPositionTargetElement(),"aria-describedby",this._ngbTooltipWindowId),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._windowRef.changeDetectorRef.detectChanges(),this._windowRef.changeDetectorRef.markForCheck(),this._ngZone.runOutsideAngular(()=>{this._positioning.createPopper({hostElement:this._getPositionTargetElement(),targetElement:this._windowRef.location.nativeElement,placement:this.placement,appendToBody:"body"===this.container,baseClass:"bs-tooltip",updatePopperOptions:ut=>this.popperOptions(ut)}),Promise.resolve().then(()=>{this._positioning.update(),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positioning.update())})}),er(this._ngZone,this._document,this.autoClose,()=>this.close(),this.hidden,[this._windowRef.location.nativeElement]),Oe.subscribe(()=>this.shown.emit())}}close(S=this.animation){null!=this._windowRef&&(this._renderer.removeAttribute(this._getPositionTargetElement(),"aria-describedby"),this._popupService.close(S).subscribe(()=>{this._windowRef=null,this._positioning.destroy(),this._zoneSubscription?.unsubscribe(),this.hidden.emit(),this._changeDetector.markForCheck()}))}toggle(){this._windowRef?this.close():this.open()}isOpen(){return null!=this._windowRef}ngOnInit(){this._unregisterListenersFn=h_(this._renderer,this._elementRef.nativeElement,this.triggers,this.isOpen.bind(this),this.open.bind(this),this.close.bind(this),+this.openDelay,+this.closeDelay)}ngOnChanges({tooltipClass:S}){S&&this.isOpen()&&(this._windowRef.instance.tooltipClass=S.currentValue)}ngOnDestroy(){this.close(!1),this._unregisterListenersFn?.()}_getPositionTargetElement(){return(Ra(this.positionTarget)?this._document.querySelector(this.positionTarget):this.positionTarget)||this._elementRef.nativeElement}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(r.s_b),r.Y36(I_),r.Y36(r.R0b),r.Y36(ir.K0),r.Y36(r.sBO),r.Y36(r.z2F))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbTooltip",""]],inputs:{animation:"animation",autoClose:"autoClose",placement:"placement",popperOptions:"popperOptions",triggers:"triggers",positionTarget:"positionTarget",container:"container",disableTooltip:"disableTooltip",tooltipClass:"tooltipClass",openDelay:"openDelay",closeDelay:"closeDelay",ngbTooltip:"ngbTooltip"},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbTooltip"],standalone:!0,features:[r.TTD]}),I})(),_p=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({}),I})(),lh=(()=>{class I{constructor(){this.highlightClass="ngb-highlight",this.accentSensitive=!0}ngOnChanges(S){!this.accentSensitive&&!String.prototype.normalize&&(console.warn("The `accentSensitive` input in `ngb-highlight` cannot be set to `false` in a browser that does not implement the `String.normalize` function. You will have to include a polyfill in your application to use this feature in the current browser."),this.accentSensitive=!0);const z=fs(this.result),Oe=Array.isArray(this.term)?this.term:[this.term],ut=Di=>this.accentSensitive?Di:Ve(Di),On=Oe.map(Di=>function rn(I){return I.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}(ut(fs(Di)))).filter(Di=>Di),Ar=this.accentSensitive?z:Ve(z),ri=On.length?Ar.split(new RegExp(`(${On.join("|")})`,"gmi")):[z];if(this.accentSensitive)this.parts=ri;else{let Di=0;this.parts=ri.map(Pi=>z.substring(Di,Di+=Pi.length))}}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-highlight"]],inputs:{highlightClass:"highlightClass",result:"result",term:"term",accentSensitive:"accentSensitive"},standalone:!0,features:[r.TTD,r.jDz],decls:1,vars:1,consts:[["ngFor","",3,"ngForOf"],[3,"class",4,"ngIf","ngIfElse"],["even",""]],template:function(S,z){1&S&&r.YNc(0,Nt,3,2,"ng-template",0),2&S&&r.Q6J("ngForOf",z.parts)},dependencies:[ir.O5,ir.ax],styles:[".ngb-highlight{font-weight:700}\n"],encapsulation:2,changeDetection:0}),I})(),F_=(()=>{class I{constructor(){this.activeIdx=0,this.focusFirst=!0,this.formatter=fs,this.selectEvent=new r.vpe,this.activeChangeEvent=new r.vpe}hasActive(){return this.activeIdx>-1&&this.activeIdx<this.results.length}getActive(){return this.results[this.activeIdx]}markActive(S){this.activeIdx=S,this._activeChanged()}next(){this.activeIdx===this.results.length-1?this.activeIdx=this.focusFirst?(this.activeIdx+1)%this.results.length:-1:this.activeIdx++,this._activeChanged()}prev(){this.activeIdx<0?this.activeIdx=this.results.length-1:0===this.activeIdx?this.activeIdx=this.focusFirst?this.results.length-1:-1:this.activeIdx--,this._activeChanged()}resetActive(){this.activeIdx=this.focusFirst?0:-1,this._activeChanged()}select(S){this.selectEvent.emit(S)}ngOnInit(){this.resetActive()}_activeChanged(){this.activeChangeEvent.emit(this.activeIdx>=0?this.id+"-"+this.activeIdx:void 0)}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-typeahead-window"]],hostAttrs:["role","listbox"],hostVars:3,hostBindings:function(S,z){1&S&&r.NdJ("mousedown",function(ut){return ut.preventDefault()}),2&S&&(r.Ikx("id",z.id),r.Tol("dropdown-menu show"+(z.popupClass?" "+z.popupClass:"")))},inputs:{id:"id",focusFirst:"focusFirst",results:"results",term:"term",formatter:"formatter",resultTemplate:"resultTemplate",popupClass:"popupClass"},outputs:{selectEvent:"select",activeChangeEvent:"activeChange"},exportAs:["ngbTypeaheadWindow"],standalone:!0,features:[r.jDz],decls:3,vars:1,consts:[["rt",""],["ngFor","",3,"ngForOf"],[3,"result","term"],["type","button","role","option",1,"dropdown-item",3,"id","mouseenter","click"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(S,z){1&S&&(r.YNc(0,tt,1,2,"ng-template",null,0,r.W1O),r.YNc(2,bi,2,9,"ng-template",1)),2&S&&(r.xp6(2),r.Q6J("ngForOf",z.results))},dependencies:[lh,ir.ax,ir.tP],encapsulation:2}),I})(),tm=(()=>{class I{constructor(){this.editable=!0,this.focusFirst=!0,this.selectOnExact=!1,this.showHint=!1,this.placement=["bottom-start","bottom-end","top-start","top-end"],this.popperOptions=S=>S}}return I.\u0275fac=function(S){return new(S||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})();const Ph=new r.OlP("live announcer delay",{providedIn:"root",factory:function Pp(){return 100}});function nm(I,re=!1){let S=I.body.querySelector("#ngb-live");return null==S&&re&&(S=I.createElement("div"),S.setAttribute("id","ngb-live"),S.setAttribute("aria-live","polite"),S.setAttribute("aria-atomic","true"),S.classList.add("visually-hidden"),I.body.appendChild(S)),S}let rm=(()=>{class I{constructor(S,z){this._document=S,this._delay=z}ngOnDestroy(){const S=nm(this._document);S&&S.parentElement.removeChild(S)}say(S){const z=nm(this._document,!0),Oe=this._delay;if(null!=z){z.textContent="";const ut=()=>z.textContent=S;null===Oe?ut():setTimeout(ut,Oe)}}}return I.\u0275fac=function(S){return new(S||I)(r.LFG(ir.K0),r.LFG(Ph))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),im=0,Im=(()=>{class I{constructor(S,z,Oe,ut,On,Ar,ri,Di,Pi,cs,Yo){this._elementRef=S,this._renderer=Oe,this._live=ri,this._document=Di,this._ngZone=Pi,this._changeDetector=cs,this._subscription=null,this._closed$=new e.xQ,this._inputValueBackup=null,this._inputValueForSelectOnExact=null,this._windowRef=null,this.autocomplete="off",this.placement="bottom-start",this.selectItem=new r.vpe,this.activeDescendant=null,this.popupId="ngb-typeahead-"+im++,this._onTouched=()=>{},this._onChange=y=>{},this.container=On.container,this.editable=On.editable,this.focusFirst=On.focusFirst,this.selectOnExact=On.selectOnExact,this.showHint=On.showHint,this.placement=On.placement,this.popperOptions=On.popperOptions,this._valueChanges=(0,f.R)(S.nativeElement,"input").pipe((0,Pt.U)(y=>y.target.value)),this._resubscribeTypeahead=new J.X(null),this._popupService=new Op(F_,ut,z,Oe,this._ngZone,Yo),this._positioning=nc()}ngOnInit(){this._subscribeToUserInput()}ngOnChanges({ngbTypeahead:S}){S&&!S.firstChange&&(this._unsubscribeFromUserInput(),this._subscribeToUserInput())}ngOnDestroy(){this._closePopup(),this._unsubscribeFromUserInput()}registerOnChange(S){this._onChange=S}registerOnTouched(S){this._onTouched=S}writeValue(S){this._writeInputValue(this._formatItemForInput(S)),this.showHint&&(this._inputValueBackup=S)}setDisabledState(S){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",S)}dismissPopup(){this.isPopupOpen()&&(this._resubscribeTypeahead.next(null),this._closePopup(),this.showHint&&null!==this._inputValueBackup&&this._writeInputValue(this._inputValueBackup),this._changeDetector.markForCheck())}isPopupOpen(){return null!=this._windowRef}handleBlur(){this._resubscribeTypeahead.next(null),this._onTouched()}handleKeyDown(S){if(this.isPopupOpen())switch(S.which){case h.ArrowDown:S.preventDefault(),this._windowRef.instance.next(),this._showHint();break;case h.ArrowUp:S.preventDefault(),this._windowRef.instance.prev(),this._showHint();break;case h.Enter:case h.Tab:{const z=this._windowRef.instance.getActive();wl(z)&&(S.preventDefault(),S.stopPropagation(),this._selectResult(z)),this._closePopup();break}}}_openPopup(){if(!this.isPopupOpen()){this._inputValueBackup=this._elementRef.nativeElement.value;const{windowRef:S}=this._popupService.open();this._windowRef=S,this._windowRef.setInput("id",this.popupId),this._windowRef.setInput("popupClass",this.popupClass),this._windowRef.instance.selectEvent.subscribe(z=>this._selectResultClosePopup(z)),this._windowRef.instance.activeChangeEvent.subscribe(z=>this.activeDescendant=z),"body"===this.container&&(this._renderer.setStyle(this._windowRef.location.nativeElement,"z-index","1055"),this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement)),this._changeDetector.markForCheck(),this._ngZone.runOutsideAngular(()=>{this._windowRef&&(this._positioning.createPopper({hostElement:this._elementRef.nativeElement,targetElement:this._windowRef.location.nativeElement,placement:this.placement,appendToBody:"body"===this.container,updatePopperOptions:z=>this.popperOptions(Gc([0,2])(z))}),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positioning.update()))}),er(this._ngZone,this._document,"outside",()=>this.dismissPopup(),this._closed$,[this._elementRef.nativeElement,this._windowRef.location.nativeElement])}}_closePopup(){this._popupService.close().subscribe(()=>{this._positioning.destroy(),this._zoneSubscription?.unsubscribe(),this._closed$.next(),this._windowRef=null,this.activeDescendant=null})}_selectResult(S){let z=!1;this.selectItem.emit({item:S,preventDefault:()=>{z=!0}}),this._resubscribeTypeahead.next(null),z||(this.writeValue(S),this._onChange(S))}_selectResultClosePopup(S){this._selectResult(S),this._closePopup()}_showHint(){if(this.showHint&&this._windowRef?.instance.hasActive()&&null!=this._inputValueBackup){const S=this._inputValueBackup.toLowerCase(),z=this._formatItemForInput(this._windowRef.instance.getActive());S===z.substring(0,this._inputValueBackup.length).toLowerCase()?(this._writeInputValue(this._inputValueBackup+z.substring(this._inputValueBackup.length)),this._elementRef.nativeElement.setSelectionRange.apply(this._elementRef.nativeElement,[this._inputValueBackup.length,z.length])):this._writeInputValue(z)}}_formatItemForInput(S){return null!=S&&this.inputFormatter?this.inputFormatter(S):fs(S)}_writeInputValue(S){this._renderer.setProperty(this._elementRef.nativeElement,"value",fs(S))}_subscribeToUserInput(){const S=this._valueChanges.pipe((0,pn.b)(z=>{this._inputValueBackup=this.showHint?z:null,this._inputValueForSelectOnExact=this.selectOnExact?z:null,this._onChange(this.editable?z:void 0)}),this.ngbTypeahead?this.ngbTypeahead:()=>(0,u.of)([]));this._subscription=this._resubscribeTypeahead.pipe((0,cn.w)(()=>S)).subscribe(z=>{z&&0!==z.length?this.selectOnExact&&1===z.length&&this._formatItemForInput(z[0])===this._inputValueForSelectOnExact?(this._selectResult(z[0]),this._closePopup()):(this._openPopup(),this._windowRef.instance.focusFirst=this.focusFirst,this._windowRef.instance.results=z,this._windowRef.instance.term=this._elementRef.nativeElement.value,this.resultFormatter&&(this._windowRef.instance.formatter=this.resultFormatter),this.resultTemplate&&(this._windowRef.instance.resultTemplate=this.resultTemplate),this._windowRef.instance.resetActive(),this._windowRef.changeDetectorRef.detectChanges(),this._showHint()):this._closePopup();const Oe=z?z.length:0;this._live.say(0===Oe?"No results available":`${Oe} result${1===Oe?"":"s"} available`)})}_unsubscribeFromUserInput(){this._subscription&&this._subscription.unsubscribe(),this._subscription=null}}return I.\u0275fac=function(S){return new(S||I)(r.Y36(r.SBq),r.Y36(r.s_b),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(tm),r.Y36(r.R0b),r.Y36(rm),r.Y36(ir.K0),r.Y36(r.R0b),r.Y36(r.sBO),r.Y36(r.z2F))},I.\u0275dir=r.lG2({type:I,selectors:[["input","ngbTypeahead",""]],hostAttrs:["autocapitalize","off","autocorrect","off","role","combobox"],hostVars:7,hostBindings:function(S,z){1&S&&r.NdJ("blur",function(){return z.handleBlur()})("keydown",function(ut){return z.handleKeyDown(ut)}),2&S&&(r.Ikx("autocomplete",z.autocomplete),r.uIk("aria-autocomplete",z.showHint?"both":"list")("aria-activedescendant",z.activeDescendant)("aria-owns",z.isPopupOpen()?z.popupId:null)("aria-expanded",z.isPopupOpen()),r.ekj("open",z.isPopupOpen()))},inputs:{autocomplete:"autocomplete",container:"container",editable:"editable",focusFirst:"focusFirst",inputFormatter:"inputFormatter",ngbTypeahead:"ngbTypeahead",resultFormatter:"resultFormatter",resultTemplate:"resultTemplate",selectOnExact:"selectOnExact",showHint:"showHint",placement:"placement",popperOptions:"popperOptions",popupClass:"popupClass"},outputs:{selectItem:"selectItem"},exportAs:["ngbTypeahead"],standalone:!0,features:[r._Bn([{provide:Qr.JU,useExisting:(0,r.Gpc)(()=>I),multi:!0}]),r.TTD]}),I})(),vd=(()=>{class I{}return I.\u0275fac=function(S){return new(S||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[lh]}),I})()},43765:(E,C,s)=>{"use strict";s.d(C,{z:()=>et});var r=s(64537),a=s(88692),c=s(13066),u=s(20092);function e(ze,an){1&ze&&(r.TgZ(0,"span",9),r._uU(1,"*"),r.qZA())}function f(ze,an){if(1&ze&&(r.TgZ(0,"label",7),r._uU(1),r.YNc(2,e,2,0,"span",8),r.qZA()),2&ze){const lt=r.oxw(2);r.uIk("for",lt.id),r.xp6(1),r.hij(" ",lt.props.label," "),r.xp6(1),r.Q6J("ngIf",lt.props.required&&!0!==lt.props.hideRequiredMarker)}}function m(ze,an){if(1&ze&&r.YNc(0,f,3,3,"label",6),2&ze){const lt=r.oxw();r.Q6J("ngIf",lt.props.label&&!0!==lt.props.hideLabel)}}function T(ze,an){if(1&ze&&(r.ynx(0),r.GkF(1,10),r.BQk()),2&ze){r.oxw();const lt=r.MAs(1);r.xp6(1),r.Q6J("ngTemplateOutlet",lt)}}function M(ze,an){}function w(ze,an){if(1&ze&&(r.ynx(0),r.GkF(1,10),r.BQk()),2&ze){r.oxw();const lt=r.MAs(1);r.xp6(1),r.Q6J("ngTemplateOutlet",lt)}}function D(ze,an){if(1&ze&&(r.TgZ(0,"div",11),r._UZ(1,"formly-validation-message",12),r.qZA()),2&ze){const lt=r.oxw();r.Udp("display","block"),r.xp6(1),r.Q6J("field",lt.field)}}function U(ze,an){if(1&ze&&(r.TgZ(0,"small",13),r._uU(1),r.qZA()),2&ze){const lt=r.oxw();r.xp6(1),r.Oqu(lt.props.description)}}const W=["fieldTypeTemplate"];let $=(()=>{class ze extends c.n2{}return ze.\u0275fac=function(){let an;return function(Rt){return(an||(an=r.n5z(ze)))(Rt||ze)}}(),ze.\u0275cmp=r.Xpm({type:ze,selectors:[["formly-wrapper-form-field"]],features:[r.qOj],decls:9,vars:8,consts:[["labelTemplate",""],[1,"mb-3"],[4,"ngIf"],["fieldComponent",""],["class","invalid-feedback",3,"display",4,"ngIf"],["class","form-text text-muted",4,"ngIf"],["class","form-label",4,"ngIf"],[1,"form-label"],["aria-hidden","true",4,"ngIf"],["aria-hidden","true"],[3,"ngTemplateOutlet"],[1,"invalid-feedback"],[3,"field"],[1,"form-text","text-muted"]],template:function(lt,Rt){1&lt&&(r.YNc(0,m,1,1,"ng-template",null,0,r.W1O),r.TgZ(2,"div",1),r.YNc(3,T,2,1,"ng-container",2),r.YNc(4,M,0,0,"ng-template",null,3,r.W1O),r.YNc(6,w,2,1,"ng-container",2),r.YNc(7,D,2,3,"div",4),r.YNc(8,U,2,1,"small",5),r.qZA()),2&lt&&(r.xp6(2),r.ekj("form-floating","floating"===Rt.props.labelPosition)("has-error",Rt.showError),r.xp6(1),r.Q6J("ngIf","floating"!==Rt.props.labelPosition),r.xp6(3),r.Q6J("ngIf","floating"===Rt.props.labelPosition),r.xp6(1),r.Q6J("ngIf",Rt.showError),r.xp6(1),r.Q6J("ngIf",Rt.props.description))},dependencies:[c.M2,a.O5,a.tP],encapsulation:2}),ze})(),J=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[a.ez,u.UX,c.X0.forChild({wrappers:[{name:"form-field",component:$}]})]]}),ze})(),F=(()=>{class ze extends c.fS{constructor(lt){super(),this.hostContainerRef=lt}set content(lt){lt&&this.hostContainerRef&&this.hostContainerRef.createEmbeddedView(lt)}}return ze.\u0275fac=function(lt){return new(lt||ze)(r.Y36(r.s_b,8))},ze.\u0275dir=r.lG2({type:ze,viewQuery:function(lt,Rt){if(1&lt&&r.Gf(W,7),2&lt){let Pe;r.iGM(Pe=r.CRH())&&(Rt.content=Pe.first)}},features:[r.qOj]}),ze})();function X(ze,an){if(1&ze&&r._UZ(0,"input",3),2&ze){const lt=r.oxw(2);r.ekj("is-invalid",lt.showError),r.Q6J("type",lt.type)("formControl",lt.formControl)("formlyAttributes",lt.field)}}function de(ze,an){if(1&ze&&r._UZ(0,"input",4),2&ze){const lt=r.oxw(2);r.ekj("is-invalid",lt.showError),r.Q6J("formControl",lt.formControl)("formlyAttributes",lt.field)}}function V(ze,an){if(1&ze&&(r.YNc(0,X,1,5,"input",1),r.YNc(1,de,1,4,"ng-template",null,2,r.W1O)),2&ze){const lt=r.MAs(2),Rt=r.oxw();r.Q6J("ngIf","number"!==Rt.type)("ngIfElse",lt)}}let ce=(()=>{class ze extends F{get type(){return this.props.type||"text"}}return ze.\u0275fac=function(){let an;return function(Rt){return(an||(an=r.n5z(ze)))(Rt||ze)}}(),ze.\u0275cmp=r.Xpm({type:ze,selectors:[["formly-field-input"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],["class","form-control",3,"type","formControl","formlyAttributes","is-invalid",4,"ngIf","ngIfElse"],["numberTmp",""],[1,"form-control",3,"type","formControl","formlyAttributes"],["type","number",1,"form-control",3,"formControl","formlyAttributes"]],template:function(lt,Rt){1&lt&&r.YNc(0,V,3,2,"ng-template",null,0,r.W1O)},dependencies:[a.O5,u.Fj,u.JJ,u.oH,c.JD,u.wV],encapsulation:2,changeDetection:0}),ze})(),se=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[a.ez,u.UX,J,c.X0.forChild({types:[{name:"input",component:ce,wrappers:["form-field"]},{name:"string",extends:"input"},{name:"number",extends:"input",defaultOptions:{props:{type:"number"}}},{name:"integer",extends:"input",defaultOptions:{props:{type:"number"}}}]})]]}),ze})();function fe(ze,an){if(1&ze&&(r.TgZ(0,"textarea",1),r._uU(1,"      "),r.qZA()),2&ze){const lt=r.oxw();r.ekj("is-invalid",lt.showError),r.Q6J("formControl",lt.formControl)("cols",lt.props.cols)("rows",lt.props.rows)("formlyAttributes",lt.field)}}let Te=(()=>{class ze extends F{constructor(){super(...arguments),this.defaultOptions={props:{cols:1,rows:1}}}}return ze.\u0275fac=function(){let an;return function(Rt){return(an||(an=r.n5z(ze)))(Rt||ze)}}(),ze.\u0275cmp=r.Xpm({type:ze,selectors:[["formly-field-textarea"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],[1,"form-control",3,"formControl","cols","rows","formlyAttributes"]],template:function(lt,Rt){1&lt&&r.YNc(0,fe,2,6,"ng-template",null,0,r.W1O)},dependencies:[u.Fj,u.JJ,u.oH,c.JD],encapsulation:2,changeDetection:0}),ze})(),$e=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[a.ez,u.UX,J,c.X0.forChild({types:[{name:"textarea",component:Te,wrappers:["form-field"]}]})]]}),ze})();var ge=s(70882),Et=s(26215),ot=s(88002),ct=s(45435),qe=s(68307);let He=(()=>{class ze{transform(lt,Rt){return lt instanceof ge.y?this.dispose():lt=this.observableOf(lt,Rt),lt.pipe((0,ot.U)(Pe=>this.transformOptions(Pe,Rt)))}ngOnDestroy(){this.dispose()}transformOptions(lt,Rt){const Pe=this.transformSelectProps(Rt),qn=[],gr={};return lt?.forEach(Pn=>{const _r=this.transformOption(Pn,Pe);if(_r.group){const Pr=gr[_r.label];void 0===Pr?gr[_r.label]=qn.push(_r)-1:_r.group.forEach(tr=>qn[Pr].group.push(tr))}else qn.push(_r)}),qn}transformOption(lt,Rt){const Pe=Rt.groupProp(lt);return Array.isArray(Pe)?{label:Rt.labelProp(lt),group:Pe.map(qn=>this.transformOption(qn,Rt))}:(lt={label:Rt.labelProp(lt),value:Rt.valueProp(lt),disabled:!!Rt.disabledProp(lt)},Pe?{label:Pe,group:[lt]}:lt)}transformSelectProps(lt){const Rt=lt?.props||lt?.templateOptions||{},Pe=qn=>"function"==typeof qn?qn:gr=>gr[qn];return{groupProp:Pe(Rt.groupProp||"group"),labelProp:Pe(Rt.labelProp||"label"),valueProp:Pe(Rt.valueProp||"value"),disabledProp:Pe(Rt.disabledProp||"disabled")}}dispose(){this._options&&(this._options.complete(),this._options=null),this._subscription&&(this._subscription.unsubscribe(),this._subscription=null)}observableOf(lt,Rt){return this.dispose(),Rt&&Rt.options&&Rt.options.fieldChanges&&(this._subscription=Rt.options.fieldChanges.pipe((0,ct.h)(({property:Pe,type:qn,field:gr})=>"expressionChanges"===qn&&(0===Pe.indexOf("templateOptions.options")||0===Pe.indexOf("props.options"))&&gr===Rt&&Array.isArray(gr.props.options)&&!!this._options),(0,qe.b)(()=>this._options.next(Rt.props.options))).subscribe()),this._options=new Et.X(lt),this._options.asObservable()}}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275pipe=r.Yjl({name:"formlySelectOptions",type:ze,pure:!0}),ze})(),We=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({}),ze})();function Le(ze,an){if(1&ze&&(r.TgZ(0,"div",2),r._UZ(1,"input",3),r.TgZ(2,"label",4),r._uU(3),r.qZA()()),2&ze){const lt=an.$implicit,Rt=an.index,Pe=r.oxw(2);r.ekj("form-check-inline","inline"===Pe.props.formCheck),r.xp6(1),r.ekj("is-invalid",Pe.showError),r.Q6J("id",Pe.id+"_"+Rt)("name",Pe.field.name||Pe.id)("value",lt.value)("formControl",lt.disabled?Pe.disabledControl:Pe.formControl)("formlyAttributes",Pe.field),r.uIk("value",lt.value),r.xp6(1),r.Q6J("for",Pe.id+"_"+Rt),r.xp6(1),r.hij(" ",lt.label," ")}}function Pt(ze,an){if(1&ze&&(r.YNc(0,Le,4,12,"div",1),r.ALo(1,"async"),r.ALo(2,"formlySelectOptions")),2&ze){const lt=r.oxw();r.Q6J("ngForOf",r.lcZ(1,1,r.xi3(2,3,lt.props.options,lt.field)))}}let it=(()=>{class ze extends F{constructor(){super(...arguments),this.defaultOptions={props:{formCheck:"default"}}}get disabledControl(){return new u.NI({value:this.formControl.value,disabled:!0})}}return ze.\u0275fac=function(){let an;return function(Rt){return(an||(an=r.n5z(ze)))(Rt||ze)}}(),ze.\u0275cmp=r.Xpm({type:ze,selectors:[["formly-field-radio"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],["class","form-check",3,"form-check-inline",4,"ngFor","ngForOf"],[1,"form-check"],["type","radio",1,"form-check-input",3,"id","name","value","formControl","formlyAttributes"],[1,"form-check-label",3,"for"]],template:function(lt,Rt){1&lt&&r.YNc(0,Pt,3,6,"ng-template",null,0,r.W1O)},dependencies:[a.sg,u._,u.Fj,u.JJ,u.oH,c.JD,a.Ov,He],encapsulation:2,changeDetection:0}),ze})(),Xt=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[a.ez,u.UX,J,We,c.X0.forChild({types:[{name:"radio",component:it,wrappers:["form-field"]}]})]]}),ze})();function cn(ze,an){1&ze&&(r.TgZ(0,"span",6),r._uU(1,"*"),r.qZA())}function pn(ze,an){if(1&ze&&(r.TgZ(0,"label",4),r._uU(1),r.YNc(2,cn,2,0,"span",5),r.qZA()),2&ze){const lt=r.oxw(2);r.Q6J("for",lt.id),r.xp6(1),r.hij(" ",lt.props.label," "),r.xp6(1),r.Q6J("ngIf",lt.props.required&&!0!==lt.props.hideRequiredMarker)}}const Rn=function(ze,an){return{"form-check-inline":ze,"form-switch":an}};function At(ze,an){if(1&ze&&(r.TgZ(0,"div",1),r._UZ(1,"input",2),r.YNc(2,pn,3,3,"label",3),r.qZA()),2&ze){const lt=r.oxw();r.Q6J("ngClass",r.WLB(9,Rn,"inline"===lt.props.formCheck||"inline-switch"===lt.props.formCheck,"switch"===lt.props.formCheck||"inline-switch"===lt.props.formCheck)),r.xp6(1),r.ekj("is-invalid",lt.showError)("position-static","nolabel"===lt.props.formCheck),r.Q6J("indeterminate",lt.props.indeterminate&&null==lt.formControl.value)("formControl",lt.formControl)("formlyAttributes",lt.field),r.xp6(1),r.Q6J("ngIf","nolabel"!==lt.props.formCheck)}}let qt=(()=>{class ze extends F{constructor(){super(...arguments),this.defaultOptions={props:{indeterminate:!0,hideLabel:!0,formCheck:"default"}}}}return ze.\u0275fac=function(){let an;return function(Rt){return(an||(an=r.n5z(ze)))(Rt||ze)}}(),ze.\u0275cmp=r.Xpm({type:ze,selectors:[["formly-field-checkbox"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],[1,"form-check",3,"ngClass"],["type","checkbox",1,"form-check-input",3,"indeterminate","formControl","formlyAttributes"],["class","form-check-label",3,"for",4,"ngIf"],[1,"form-check-label",3,"for"],["aria-hidden","true",4,"ngIf"],["aria-hidden","true"]],template:function(lt,Rt){1&lt&&r.YNc(0,At,3,12,"ng-template",null,0,r.W1O)},dependencies:[a.mk,u.Wl,u.JJ,u.oH,c.JD,a.O5],encapsulation:2,changeDetection:0}),ze})(),sn=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[a.ez,u.UX,J,c.X0.forChild({types:[{name:"checkbox",component:qt,wrappers:["form-field"]},{name:"boolean",extends:"checkbox"}]})]]}),ze})();const fn=function(ze,an){return{"form-check-inline":ze,"form-switch":an}};function xn(ze,an){if(1&ze){const lt=r.EpF();r.TgZ(0,"div",2)(1,"input",3),r.NdJ("change",function(Pe){const gr=r.CHM(lt).$implicit,Pn=r.oxw(2);return r.KtG(Pn.onChange(gr.value,Pe.target.checked))}),r.qZA(),r.TgZ(2,"label",4),r._uU(3),r.qZA()()}if(2&ze){const lt=an.$implicit,Rt=an.index,Pe=r.oxw(2);r.Q6J("ngClass",r.WLB(8,fn,"inline"===Pe.props.formCheck||"inline-switch"===Pe.props.formCheck,"switch"===Pe.props.formCheck||"inline-switch"===Pe.props.formCheck)),r.xp6(1),r.Q6J("id",Pe.id+"_"+Rt)("value",lt.value)("checked",Pe.isChecked(lt))("formlyAttributes",Pe.field)("disabled",Pe.formControl.disabled||lt.disabled),r.xp6(1),r.Q6J("for",Pe.id+"_"+Rt),r.xp6(1),r.hij(" ",lt.label," ")}}function Kr(ze,an){if(1&ze&&(r.YNc(0,xn,4,11,"div",1),r.ALo(1,"async"),r.ALo(2,"formlySelectOptions")),2&ze){const lt=r.oxw();r.Q6J("ngForOf",r.lcZ(1,1,r.xi3(2,3,lt.props.options,lt.field)))}}let Or=(()=>{class ze extends F{constructor(){super(...arguments),this.defaultOptions={props:{formCheck:"default"}}}onChange(lt,Rt){this.formControl.markAsDirty(),this.formControl.patchValue("array"===this.props.type?Rt?[...this.formControl.value||[],lt]:[...this.formControl.value||[]].filter(Pe=>Pe!==lt):{...this.formControl.value,[lt]:Rt}),this.formControl.markAsTouched()}isChecked(lt){const Rt=this.formControl.value;return Rt&&("array"===this.props.type?-1!==Rt.indexOf(lt.value):Rt[lt.value])}}return ze.\u0275fac=function(){let an;return function(Rt){return(an||(an=r.n5z(ze)))(Rt||ze)}}(),ze.\u0275cmp=r.Xpm({type:ze,selectors:[["formly-field-multicheckbox"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],["class","form-check",3,"ngClass",4,"ngFor","ngForOf"],[1,"form-check",3,"ngClass"],["type","checkbox",1,"form-check-input",3,"id","value","checked","formlyAttributes","disabled","change"],[1,"form-check-label",3,"for"]],template:function(lt,Rt){1&lt&&r.YNc(0,Kr,3,6,"ng-template",null,0,r.W1O)},dependencies:[a.sg,a.mk,c.JD,a.Ov,He],encapsulation:2,changeDetection:0}),ze})(),Lr=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[a.ez,u.UX,J,We,c.X0.forChild({types:[{name:"multicheckbox",component:Or,wrappers:["form-field"]}]})]]}),ze})();var ir=s(15257);function Qr(ze,an){if(1&ze&&(r.TgZ(0,"option",8),r._uU(1),r.qZA()),2&ze){const lt=r.oxw().$implicit;r.Q6J("ngValue",lt.value)("disabled",lt.disabled),r.xp6(1),r.hij(" ",lt.label," ")}}function jr(ze,an){if(1&ze&&(r.TgZ(0,"option",8),r._uU(1),r.qZA()),2&ze){const lt=an.$implicit;r.Q6J("ngValue",lt.value)("disabled",lt.disabled),r.xp6(1),r.hij(" ",lt.label," ")}}function br(ze,an){if(1&ze&&(r.TgZ(0,"optgroup",9),r.YNc(1,jr,2,3,"option",10),r.qZA()),2&ze){const lt=r.oxw().$implicit;r.Q6J("label",lt.label),r.xp6(1),r.Q6J("ngForOf",lt.group)}}function ht(ze,an){if(1&ze&&(r.ynx(0),r.YNc(1,Qr,2,3,"option",6),r.YNc(2,br,2,2,"ng-template",null,7,r.W1O),r.BQk()),2&ze){const lt=an.$implicit,Rt=r.MAs(3);r.xp6(1),r.Q6J("ngIf",!lt.group)("ngIfElse",Rt)}}function Wt(ze,an){if(1&ze&&(r.ynx(0),r.YNc(1,ht,4,2,"ng-container",5),r.BQk()),2&ze){const lt=an.ngIf;r.xp6(1),r.Q6J("ngForOf",lt)}}function Tt(ze,an){if(1&ze&&(r.TgZ(0,"select",3),r.YNc(1,Wt,2,1,"ng-container",4),r.ALo(2,"async"),r.ALo(3,"formlySelectOptions"),r.qZA()),2&ze){const lt=r.oxw(2);r.ekj("is-invalid",lt.showError),r.Q6J("formControl",lt.formControl)("compareWith",lt.props.compareWith)("formlyAttributes",lt.field),r.xp6(1),r.Q6J("ngIf",r.lcZ(2,6,r.xi3(3,8,lt.props.options,lt.field)))}}function wn(ze,an){if(1&ze&&(r.TgZ(0,"option",13),r._uU(1),r.qZA()),2&ze){const lt=r.oxw(3);r.Q6J("ngValue",void 0),r.xp6(1),r.Oqu(lt.props.placeholder)}}function jn(ze,an){if(1&ze&&(r.TgZ(0,"option",8),r._uU(1),r.qZA()),2&ze){const lt=r.oxw().$implicit;r.Q6J("ngValue",lt.value)("disabled",lt.disabled),r.xp6(1),r.hij(" ",lt.label," ")}}function hr(ze,an){if(1&ze&&(r.TgZ(0,"option",8),r._uU(1),r.qZA()),2&ze){const lt=an.$implicit;r.Q6J("ngValue",lt.value)("disabled",lt.disabled),r.xp6(1),r.hij(" ",lt.label," ")}}function Oi(ze,an){if(1&ze&&(r.TgZ(0,"optgroup",9),r.YNc(1,hr,2,3,"option",10),r.qZA()),2&ze){const lt=r.oxw().$implicit;r.Q6J("label",lt.label),r.xp6(1),r.Q6J("ngForOf",lt.group)}}function Wi(ze,an){if(1&ze&&(r.ynx(0),r.YNc(1,jn,2,3,"option",6),r.YNc(2,Oi,2,2,"ng-template",null,7,r.W1O),r.BQk()),2&ze){const lt=an.$implicit,Rt=r.MAs(3);r.xp6(1),r.Q6J("ngIf",!lt.group)("ngIfElse",Rt)}}function so(ze,an){if(1&ze&&(r.ynx(0),r.YNc(1,Wi,4,2,"ng-container",5),r.BQk()),2&ze){const lt=an.ngIf;r.xp6(1),r.Q6J("ngForOf",lt)}}function kr(ze,an){if(1&ze&&(r.TgZ(0,"select",11),r.YNc(1,wn,2,2,"option",12),r.YNc(2,so,2,1,"ng-container",4),r.ALo(3,"async"),r.ALo(4,"formlySelectOptions"),r.qZA()),2&ze){const lt=r.oxw(2);r.ekj("is-invalid",lt.showError),r.Q6J("formControl",lt.formControl)("compareWith",lt.props.compareWith)("formlyAttributes",lt.field),r.xp6(1),r.Q6J("ngIf",lt.props.placeholder),r.xp6(1),r.Q6J("ngIf",r.lcZ(3,7,r.xi3(4,9,lt.props.options,lt.field)))}}function Ei(ze,an){if(1&ze&&(r.YNc(0,Tt,4,11,"select",1),r.YNc(1,kr,5,12,"ng-template",null,2,r.W1O)),2&ze){const lt=r.MAs(2),Rt=r.oxw();r.Q6J("ngIf",Rt.props.multiple)("ngIfElse",lt)}}let ii=(()=>{class ze extends F{constructor(lt,Rt){super(Rt),this.ngZone=lt,this.defaultOptions={props:{compareWith:(Pe,qn)=>Pe===qn}}}set selectAccessor(lt){if(!lt)return;const Rt=lt.writeValue.bind(lt);null===lt._getOptionId(lt.value)&&Rt(lt.value),lt.writeValue=Pe=>{const qn=lt._idCounter;Rt(Pe),null===Pe&&this.ngZone.onStable.asObservable().pipe((0,ir.q)(1)).subscribe(()=>{qn!==lt._idCounter&&null===lt._getOptionId(Pe)&&-1!==lt._elementRef.nativeElement.selectedIndex&&Rt(Pe)})}}}return ze.\u0275fac=function(lt){return new(lt||ze)(r.Y36(r.R0b),r.Y36(r.s_b))},ze.\u0275cmp=r.Xpm({type:ze,selectors:[["formly-field-select"]],viewQuery:function(lt,Rt){if(1&lt&&r.Gf(u.EJ,5),2&lt){let Pe;r.iGM(Pe=r.CRH())&&(Rt.selectAccessor=Pe.first)}},features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],["class","form-select","multiple","",3,"formControl","compareWith","is-invalid","formlyAttributes",4,"ngIf","ngIfElse"],["singleSelect",""],["multiple","",1,"form-select",3,"formControl","compareWith","formlyAttributes"],[4,"ngIf"],[4,"ngFor","ngForOf"],[3,"ngValue","disabled",4,"ngIf","ngIfElse"],["optgroup",""],[3,"ngValue","disabled"],[3,"label"],[3,"ngValue","disabled",4,"ngFor","ngForOf"],[1,"form-select",3,"formControl","compareWith","formlyAttributes"],[3,"ngValue",4,"ngIf"],[3,"ngValue"]],template:function(lt,Rt){1&lt&&r.YNc(0,Ei,3,2,"ng-template",null,0,r.W1O)},dependencies:[a.O5,u.K7,u.JJ,u.oH,c.JD,a.sg,u.YN,u.Kr,u.EJ,a.Ov,He],encapsulation:2,changeDetection:0}),ze})(),mr=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[a.ez,u.UX,J,We,c.X0.forChild({types:[{name:"select",component:ii,wrappers:["form-field"]},{name:"enum",extends:"select"}]})]]}),ze})();const pr=["fieldTypeTemplate"];function Eo(ze,an){if(1&ze&&r._UZ(0,"i",7),2&ze){const lt=r.oxw(3);r.Q6J("ngClass",lt.props.addonLeft.class)}}function po(ze,an){if(1&ze&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&ze){const lt=r.oxw(3);r.xp6(1),r.Oqu(lt.props.addonLeft.text)}}function $i(ze,an){if(1&ze){const lt=r.EpF();r.TgZ(0,"div",4),r.NdJ("click",function(Pe){r.CHM(lt);const qn=r.oxw(2);return r.KtG(qn.addonLeftClick(Pe))}),r.YNc(1,Eo,1,1,"i",5),r.YNc(2,po,2,1,"span",6),r.qZA()}if(2&ze){const lt=r.oxw(2);r.ekj("input-group-btn",lt.props.addonLeft.onClick),r.xp6(1),r.Q6J("ngIf",lt.props.addonLeft.class),r.xp6(1),r.Q6J("ngIf",lt.props.addonLeft.text)}}function qr(ze,an){if(1&ze&&r._UZ(0,"i",7),2&ze){const lt=r.oxw(3);r.Q6J("ngClass",lt.props.addonRight.class)}}function Hi(ze,an){if(1&ze&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&ze){const lt=r.oxw(3);r.xp6(1),r.Oqu(lt.props.addonRight.text)}}function Dn(ze,an){if(1&ze){const lt=r.EpF();r.TgZ(0,"div",4),r.NdJ("click",function(Pe){r.CHM(lt);const qn=r.oxw(2);return r.KtG(qn.addonRightClick(Pe))}),r.YNc(1,qr,1,1,"i",5),r.YNc(2,Hi,2,1,"span",6),r.qZA()}if(2&ze){const lt=r.oxw(2);r.ekj("input-group-btn",lt.props.addonRight.onClick),r.xp6(1),r.Q6J("ngIf",lt.props.addonRight.class),r.xp6(1),r.Q6J("ngIf",lt.props.addonRight.text)}}function Hn(ze,an){if(1&ze&&(r.TgZ(0,"div",1),r.YNc(1,$i,3,4,"div",2),r.GkF(2,null,3),r.YNc(4,Dn,3,4,"div",2),r.qZA()),2&ze){const lt=r.oxw();r.ekj("has-validation",lt.showError),r.xp6(1),r.Q6J("ngIf",lt.props.addonLeft),r.xp6(3),r.Q6J("ngIf",lt.props.addonRight)}}let jt=(()=>{class ze extends c.n2{constructor(lt){super(),this.hostContainerRef=lt}set content(lt){lt&&this.hostContainerRef&&this.hostContainerRef.createEmbeddedView(lt)}addonRightClick(lt){this.props.addonRight.onClick?.(this.field,lt)}addonLeftClick(lt){this.props.addonLeft.onClick?.(this.field,lt)}}return ze.\u0275fac=function(lt){return new(lt||ze)(r.Y36(r.s_b))},ze.\u0275cmp=r.Xpm({type:ze,selectors:[["formly-wrapper-addons"]],viewQuery:function(lt,Rt){if(1&lt&&r.Gf(pr,7),2&lt){let Pe;r.iGM(Pe=r.CRH())&&(Rt.content=Pe.first)}},features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],[1,"input-group"],["class","input-group-text",3,"input-group-btn","click",4,"ngIf"],["fieldComponent",""],[1,"input-group-text",3,"click"],[3,"ngClass",4,"ngIf"],[4,"ngIf"],[3,"ngClass"]],template:function(lt,Rt){1&lt&&r.YNc(0,Hn,5,4,"ng-template",null,0,r.W1O)},dependencies:[a.O5,a.mk],styles:["formly-wrapper-form-field .input-group-btn{cursor:pointer}\n"],encapsulation:2}),ze})();function Fe(ze){!ze.props||ze.wrappers&&-1!==ze.wrappers.indexOf("addons")||(ze.props.addonLeft||ze.props.addonRight)&&(ze.wrappers=[...ze.wrappers||[],"addons"])}let Ie=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[a.ez,u.UX,c.X0.forChild({wrappers:[{name:"addons",component:jt}],extensions:[{name:"addons",extension:{postPopulate:Fe}}]})]]}),ze})(),et=(()=>{class ze{}return ze.\u0275fac=function(lt){return new(lt||ze)},ze.\u0275mod=r.oAB({type:ze}),ze.\u0275inj=r.cJS({imports:[[J,se,$e,Xt,sn,Lr,mr,Ie]]}),ze})()},13066:(E,C,s)=>{"use strict";s.d(C,{hv:()=>Ei,fS:()=>Wi,n2:()=>ii,cw:()=>jn,T7:()=>hr,X0:()=>Hn,JD:()=>Oi,M2:()=>kr,kg:()=>At,Hl:()=>He,_S:()=>ge,Du:()=>We});var r=s(64537),a=s(20092),c=s(70882);function u(jt){return!!jt&&(jt instanceof c.y||"function"==typeof jt.lift&&"function"==typeof jt.subscribe)}var e=s(66682),f=s(25917),m=s(79765),T=s(87519),M=s(39761),w=s(54395),D=s(45435),U=s(43190),W=s(15257),$=s(68307),J=s(88002),F=s(88692),X=s(5998);const de=["container"];function V(jt,Fe){}function ce(jt,Fe){1&jt&&r._UZ(0,"formly-field",1),2&jt&&r.Q6J("field",Fe.$implicit)}const se=["*"],fe=["fieldComponent"];function $e(jt,Fe,Ie){if(Fe.id)return Fe.id;let et=Fe.type;return!et&&Fe.template&&(et="template"),et instanceof r.DyG&&(et=et.prototype.constructor.name),[jt,et,Fe.key,Ie].join("_")}function ge(jt){return!Le(jt.key)&&""!==jt.key}function Et(jt){if(!ge(jt))return[];if(jt._keyPath?.key!==jt.key){let Fe=[];if("string"==typeof jt.key){const Ie=-1===jt.key.indexOf("[")?jt.key:jt.key.replace(/\[(\w+)\]/g,".$1");Fe=-1!==Ie.indexOf(".")?Ie.split("."):[Ie]}else Fe=Array.isArray(jt.key)?jt.key.slice(0):[`${jt.key}`];qt(jt,"_keyPath",{key:jt.key,path:Fe})}return jt._keyPath.path.slice(0)}const ot=["required","pattern","minLength","maxLength","min","max"];function ct(jt,Fe){let Ie=Et(jt);if(0===Ie.length)return;let et=jt;for(;et.parent;)et=et.parent,Ie=[...Et(et),...Ie];if(void 0===Fe&&jt.resetOnHide){const ze=Ie.pop();delete Ie.reduce((lt,Rt)=>lt[Rt]||{},et.model)[ze]}else!function qe(jt,Fe,Ie){for(let et=0;et<Fe.length-1;et++){const ze=Fe[et];(!jt[ze]||!pn(jt[ze]))&&(jt[ze]=/^\d+$/.test(Fe[et+1])?[]:{}),jt=jt[ze]}jt[Fe[Fe.length-1]]=At(Ie)}(et.model,Ie,Fe)}function He(jt){let Fe=jt.parent?jt.parent.model:jt.model;for(const Ie of Et(jt)){if(!Fe)return Fe;Fe=Fe[Ie]}return Fe}function We(jt,...Fe){return Fe.forEach(Ie=>{for(const et in Ie)Le(jt[et])||it(jt[et])?jt[et]=At(Ie[et]):cn(jt[et],Ie[et])&&We(jt[et],Ie[et])}),jt}function Le(jt){return null==jt}function Pt(jt){return void 0===jt}function it(jt){return""===jt}function Xt(jt){return"function"==typeof jt}function cn(jt,Fe){return pn(jt)&&pn(Fe)&&Object.getPrototypeOf(jt)===Object.getPrototypeOf(Fe)&&!(Array.isArray(jt)||Array.isArray(Fe))}function pn(jt){return null!=jt&&"object"==typeof jt}function At(jt){if(!pn(jt)||u(jt)||jt instanceof r.Rgc||jt.changingThisBreaksApplicationSecurity||-1!==["RegExp","FileList","File","Blob"].indexOf(jt.constructor.name))return jt;if(jt instanceof Set)return new Set(jt);if(jt instanceof Map)return new Map(jt);if(jt._isAMomentObject&&Xt(jt.clone))return jt.clone();if(jt instanceof a.TO)return null;if(jt instanceof Date)return new Date(jt.getTime());if(Array.isArray(jt))return jt.slice(0).map(et=>At(et));const Fe=Object.getPrototypeOf(jt);let Ie=Object.create(Fe);return Ie=Object.setPrototypeOf(Ie,Fe),Object.keys(jt).reduce((et,ze)=>{const an=Object.getOwnPropertyDescriptor(jt,ze);return an.get?Object.defineProperty(et,ze,an):et[ze]=At(jt[ze]),et},Ie)}function qt(jt,Fe,Ie){Object.defineProperty(jt,Fe,{enumerable:!1,writable:!0,configurable:!0}),jt[Fe]=Ie}function sn(jt,Fe,Ie){let et=[];const ze=()=>{et.forEach(lt=>lt()),et=[]},an=fn(jt,Fe,({firstChange:lt,currentValue:Rt})=>{!lt&&Ie(),ze(),pn(Rt)&&"Object"===Rt.constructor.name&&Object.keys(Rt).forEach(Pe=>{et.push(sn(jt,[...Fe,Pe],Ie))})});return()=>{an.unsubscribe(),ze()}}function fn(jt,Fe,Ie){jt._observers||qt(jt,"_observers",{});let et=jt;for(let Rt=0;Rt<Fe.length-1;Rt++)(!et[Fe[Rt]]||!pn(et[Fe[Rt]]))&&(et[Fe[Rt]]=/^\d+$/.test(Fe[Rt+1])?[]:{}),et=et[Fe[Rt]];const ze=Fe[Fe.length-1],an=Fe.join(".");jt._observers[an]||(jt._observers[an]={value:et[ze],onChange:[]});const lt=jt._observers[an];if(et[ze]!==lt.value&&(lt.value=et[ze]),-1===lt.onChange.indexOf(Ie)&&(lt.onChange.push(Ie),Ie({currentValue:lt.value,firstChange:!0}),lt.onChange.length>=1)){const{enumerable:Rt}=Object.getOwnPropertyDescriptor(et,ze)||{enumerable:!0};Object.defineProperty(et,ze,{enumerable:Rt,configurable:!0,get:()=>lt.value,set:Pe=>{if(Pe!==lt.value){const qn=lt.value;lt.value=Pe,lt.onChange.forEach(gr=>gr({previousValue:qn,currentValue:Pe,firstChange:!1}))}}})}return{setValue(Rt){lt.value=Rt},unsubscribe(){lt.onChange=lt.onChange.filter(Rt=>Rt!==Ie),0===lt.onChange.length&&delete jt._observers[an]}}}function xn(jt,Fe){if(Fe=Array.isArray(Fe)?Fe.join("."):Fe,jt.fieldGroup)for(let Ie=0,et=jt.fieldGroup.length;Ie<et;Ie++){const ze=jt.fieldGroup[Ie],an=Array.isArray(ze.key)?ze.key.join("."):ze.key;if(an===Fe)return ze;if(ze.fieldGroup&&(Le(an)||0===Fe.indexOf(`${an}.`))){const lt=xn(ze,Le(an)?Fe:Fe.slice(an.length+1));if(lt)return lt}}}function Kr(jt){jt._componentRefs?.forEach(Fe=>{Fe instanceof r.UuU?Fe.injector.get(r.sBO).markForCheck():Fe.markForCheck()})}const Or=new r.OlP("FORMLY_CONFIG");let Lr=(()=>{class jt{constructor(){this.types={},this.validators={},this.wrappers={},this.messages={},this.extras={checkExpressionOn:"modelChange",lazyRender:!0,resetFieldOnHide:!0,renderFormlyFieldElement:!0,showError:Ie=>Ie.formControl?.invalid&&(Ie.formControl?.touched||Ie.options.parentForm?.submitted||!!Ie.field.validation?.show)},this.extensions={},this.presets={},this.extensionsByPriority={}}addConfig(Ie){Ie.types&&Ie.types.forEach(et=>this.setType(et)),Ie.validators&&Ie.validators.forEach(et=>this.setValidator(et)),Ie.wrappers&&Ie.wrappers.forEach(et=>this.setWrapper(et)),Ie.validationMessages&&Ie.validationMessages.forEach(et=>this.addValidatorMessage(et.name,et.message)),Ie.extensions&&this.setSortedExtensions(Ie.extensions),Ie.extras&&(this.extras={...this.extras,...Ie.extras}),Ie.presets&&(this.presets={...this.presets,...Ie.presets.reduce((et,ze)=>({...et,[ze.name]:ze.config}),{})})}setType(Ie){Array.isArray(Ie)?Ie.forEach(et=>this.setType(et)):(this.types[Ie.name]||(this.types[Ie.name]={name:Ie.name}),["component","extends","defaultOptions","wrappers"].forEach(et=>{Ie.hasOwnProperty(et)&&(this.types[Ie.name][et]=Ie[et])}))}getType(Ie,et=!1){if(Ie instanceof r.DyG)return{component:Ie,name:Ie.prototype.constructor.name};if(!this.types[Ie]){if(et)throw new Error(`[Formly Error] The type "${Ie}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);return null}return this.mergeExtendedType(Ie),this.types[Ie]}getMergedField(Ie={}){const et=this.getType(Ie.type);if(!et)return;et.defaultOptions&&We(Ie,et.defaultOptions);const ze=et.extends&&this.getType(et.extends).defaultOptions;ze&&We(Ie,ze),Ie?.optionsTypes&&Ie.optionsTypes.forEach(lt=>{const Rt=this.getType(lt).defaultOptions;Rt&&We(Ie,Rt)});const an=this.resolveFieldTypeRef(Ie);an?.instance?.defaultOptions&&We(Ie,an.instance.defaultOptions),!Ie.wrappers&&et.wrappers&&(Ie.wrappers=[...et.wrappers])}resolveFieldTypeRef(Ie={}){const et=this.getType(Ie.type);if(!et)return null;if(!et.component||et._componentRef)return et._componentRef;const{_viewContainerRef:ze,_injector:an}=Ie.options;if(!ze||!an)return null;const lt=ze.createComponent(et.component,{injector:an});qt(et,"_componentRef",lt);try{lt.destroy()}catch(Rt){console.error(`An error occurred while destroying the Formly component type "${Ie.type}"`,Rt)}return et._componentRef}setWrapper(Ie){this.wrappers[Ie.name]=Ie,Ie.types&&Ie.types.forEach(et=>{this.setTypeWrapper(et,Ie.name)})}getWrapper(Ie){if(Ie instanceof r.DyG)return{component:Ie,name:Ie.prototype.constructor.name};if(!this.wrappers[Ie])throw new Error(`[Formly Error] The wrapper "${Ie}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);return this.wrappers[Ie]}setTypeWrapper(Ie,et){this.types[Ie]||(this.types[Ie]={}),this.types[Ie].wrappers||(this.types[Ie].wrappers=[]),-1===this.types[Ie].wrappers.indexOf(et)&&this.types[Ie].wrappers.push(et)}setValidator(Ie){this.validators[Ie.name]=Ie}getValidator(Ie){if(!this.validators[Ie])throw new Error(`[Formly Error] The validator "${Ie}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);return this.validators[Ie]}addValidatorMessage(Ie,et){this.messages[Ie]=et}getValidatorMessage(Ie){return this.messages[Ie]}setSortedExtensions(Ie){Ie.forEach(et=>{const ze=et.priority??1;this.extensionsByPriority[ze]={...this.extensionsByPriority[ze],[et.name]:et.extension}}),this.extensions=Object.keys(this.extensionsByPriority).map(Number).sort((et,ze)=>et-ze).reduce((et,ze)=>({...et,...this.extensionsByPriority[ze]}),{})}mergeExtendedType(Ie){if(!this.types[Ie].extends)return;const et=this.getType(this.types[Ie].extends);this.types[Ie].component||(this.types[Ie].component=et.component),this.types[Ie].wrappers||(this.types[Ie].wrappers=et.wrappers)}}return jt.\u0275fac=function(Ie){return new(Ie||jt)},jt.\u0275prov=r.Yz7({token:jt,factory:jt.\u0275fac,providedIn:"root"}),jt})(),ir=(()=>{class jt{constructor(Ie,et,ze,an){this.config=Ie,this.injector=et,this.viewContainerRef=ze,this.parentForm=an}buildForm(Ie,et=[],ze,an){this.build({fieldGroup:et,model:ze,form:Ie,options:an})}build(Ie){if(!this.config.extensions.core)throw new Error("NgxFormly: missing `forRoot()` call. use `forRoot()` when registering the `FormlyModule`.");Ie.parent?this._build(Ie):(this._setOptions(Ie),function Te(jt,Fe){const Ie=jt._updateTreeValidity.bind(jt);jt._updateTreeValidity=()=>{},Fe(),jt._updateTreeValidity=Ie}(Ie.form,()=>{this._build(Ie);const et=Ie.options;et.checkExpressions?.(Ie,!0),et.detectChanges?.(Ie)}))}_build(Ie){if(!Ie)return;const et=Object.values(this.config.extensions);et.forEach(ze=>ze.prePopulate?.(Ie)),et.forEach(ze=>ze.onPopulate?.(Ie)),Ie.fieldGroup?.forEach(ze=>this._build(ze)),et.forEach(ze=>ze.postPopulate?.(Ie))}_setOptions(Ie){Ie.form=Ie.form||new a.cw({}),Ie.model=Ie.model||{},Ie.options=Ie.options||{};const et=Ie.options;et._viewContainerRef||qt(et,"_viewContainerRef",this.viewContainerRef),et._injector||qt(et,"_injector",this.injector),et.build||(et._buildForm=()=>{console.warn("Formly: 'options._buildForm' is deprecated since v6.0, use 'options.build' instead."),this.build(Ie)},et.build=(ze=Ie)=>(this.build(ze),ze)),!et.parentForm&&this.parentForm&&(qt(et,"parentForm",this.parentForm),fn(et,["parentForm","submitted"],({firstChange:ze})=>{ze||(et.checkExpressions(Ie),et.detectChanges(Ie))}))}}return jt.\u0275fac=function(Ie){return new(Ie||jt)(r.LFG(Lr),r.LFG(r.zs3),r.LFG(r.s_b,8),r.LFG(a.sg,8))},jt.\u0275prov=r.Yz7({token:jt,factory:jt.\u0275fac,providedIn:"root"}),jt})();function Qr(jt,Fe=!1){const Ie=jt.formControl,et=Ie._fields?Ie._fields.indexOf(jt):-1;-1!==et&&Ie._fields.splice(et,1);const ze=Ie.parent;if(!ze)return;const an={emitEvent:Fe};if(ze instanceof a.Oe){const lt=ze.controls.findIndex(Rt=>Rt===Ie);-1!==lt&&ze.removeAt(lt,an)}else if(ze instanceof a.cw){const lt=Et(jt),Rt=lt[lt.length-1];ze.get([Rt])===Ie&&ze.removeControl(Rt,an)}Ie.setParent(null)}function jr(jt){return jt.formControl?jt.formControl:!1===jt.shareFormControl?null:jt.form?.get(Et(jt))}function br(jt,Fe,Ie=!1){if((Fe=Fe||jt.formControl)._fields||qt(Fe,"_fields",[]),-1===Fe._fields.indexOf(jt)&&Fe._fields.push(jt),!jt.formControl&&Fe){qt(jt,"formControl",Fe),Fe.setValidators(null),Fe.setAsyncValidators(null),jt.props.disabled=!!jt.props.disabled;const Rt=fn(jt,["props","disabled"],({firstChange:Pe,currentValue:qn})=>{Pe||(qn?jt.formControl.disable():jt.formControl.enable())});Fe instanceof a.NI&&Fe.registerOnDisabledChange(Rt.setValue)}if(!jt.form||!ge(jt))return;let et=jt.form;const ze=Et(jt),an=He(jt);(!Le(Fe.value)||!Le(an))&&Fe.value!==an&&Fe instanceof a.NI&&Fe.patchValue(an);for(let Rt=0;Rt<ze.length-1;Rt++){const Pe=ze[Rt];et.get([Pe])||et.setControl(Pe,new a.cw({}),{emitEvent:Ie}),et=et.get([Pe])}const lt=ze[ze.length-1];!jt._hide&&et.get([lt])!==Fe&&et.setControl(lt,Fe,{emitEvent:Ie})}function ht(jt,Fe=!1){const Ie=jt.status,et=jt.value;jt.updateValueAndValidity({emitEvent:!1,onlySelf:Fe}),Ie!==jt.status&&jt.statusChanges.emit(jt.status),et!==jt.value&&jt.valueChanges.emit(jt.value)}function Wt(jt){delete jt?._fields,jt.setValidators(null),jt.setAsyncValidators(null),(jt instanceof a.cw||jt instanceof a.Oe)&&Object.values(jt.controls).forEach(Fe=>Wt(Fe))}let Tt=(()=>{class jt{constructor(Ie){this.ref=Ie}ngOnChanges(){this.name=this.name||"formly-group"}}return jt.\u0275fac=function(Ie){return new(Ie||jt)(r.Y36(r.Rgc))},jt.\u0275dir=r.lG2({type:jt,selectors:[["","formlyTemplate",""]],inputs:{name:["formlyTemplate","name"]},features:[r.TTD]}),jt})(),wn=(()=>{class jt{}return jt.\u0275fac=function(Ie){return new(Ie||jt)},jt.\u0275prov=r.Yz7({token:jt,factory:jt.\u0275fac}),jt})(),jn=(()=>{class jt{constructor(Ie,et,ze,an,lt){this.config=Ie,this.renderer=et,this._elementRef=ze,this.hostContainerRef=an,this.form=lt,this.hostObservers=[],this.componentRefs=[],this.hooksObservers=[],this.detectFieldBuild=!1,this.valueChangesUnsubscribe=()=>{}}get containerRef(){return this.config.extras.renderFormlyFieldElement?this.viewContainerRef:this.hostContainerRef}get elementRef(){return this.config.extras.renderFormlyFieldElement?this._elementRef:this.componentRefs?.[0]instanceof r.UuU?this.componentRefs[0].location:null}ngAfterContentInit(){this.triggerHook("afterContentInit")}ngAfterViewInit(){this.triggerHook("afterViewInit")}ngDoCheck(){this.detectFieldBuild&&this.field&&this.field.options&&this.render()}ngOnInit(){this.triggerHook("onInit")}ngOnChanges(Ie){this.triggerHook("onChanges",Ie)}ngOnDestroy(){this.resetRefs(this.field),this.hostObservers.forEach(Ie=>Ie.unsubscribe()),this.hooksObservers.forEach(Ie=>Ie()),this.valueChangesUnsubscribe(),this.triggerHook("onDestroy")}renderField(Ie,et,ze=[]){if(this.containerRef===Ie&&(this.resetRefs(this.field),this.containerRef.clear(),ze=this.field?.wrappers),ze?.length>0){const[an,...lt]=ze,{component:Rt}=this.config.getWrapper(an),Pe=Ie.createComponent(Rt);this.attachComponentRef(Pe,et),fn(Pe.instance,["fieldComponent"],({currentValue:qn,previousValue:gr,firstChange:Pn})=>{if(qn){if(gr&&gr._lContainer===qn._lContainer)return;const _r=gr?gr.detach():null;_r&&!_r.destroyed?qn.insert(_r):this.renderField(qn,et,lt),!Pn&&Pe.changeDetectorRef.detectChanges()}})}else if(et?.type){const an=this.form?.templates?.find(Rt=>Rt.name===et.type);let lt;if(an)lt=Ie.createEmbeddedView(an.ref,{$implicit:et});else{const{component:Rt}=this.config.getType(et.type,!0);lt=Ie.createComponent(Rt)}this.attachComponentRef(lt,et)}}triggerHook(Ie,et){if(("onInit"===Ie||"onChanges"===Ie&&et.field&&!et.field.firstChange)&&(this.valueChangesUnsubscribe=this.fieldChanges(this.field)),this.field?.hooks?.[Ie]&&(!et||et.field)){const ze=this.field.hooks[Ie](this.field);if(u(ze)&&-1!==["onInit","afterContentInit","afterViewInit"].indexOf(Ie)){const an=ze.subscribe();this.hooksObservers.push(()=>an.unsubscribe())}}"onChanges"===Ie&&et.field&&(this.resetRefs(et.field.previousValue),this.render())}attachComponentRef(Ie,et){this.componentRefs.push(Ie),et._componentRefs.push(Ie),Ie instanceof r.UuU&&Object.assign(Ie.instance,{field:et})}render(){if(this.field){if(!this.field.options)return void(this.detectFieldBuild=!0);this.detectFieldBuild=!1,this.hostObservers.forEach(Ie=>Ie.unsubscribe()),this.hostObservers=[fn(this.field,["hide"],({firstChange:Ie,currentValue:et})=>{const ze=this.containerRef;!1===this.config.extras.lazyRender?(Ie&&this.renderField(ze,this.field),(!Ie||Ie&&et)&&this.elementRef&&this.renderer.setStyle(this.elementRef.nativeElement,"display",et?"none":"")):et?(ze.clear(),this.field.className&&this.renderer.removeAttribute(this.elementRef.nativeElement,"class")):(this.renderField(ze,this.field),this.field.className&&this.renderer.setAttribute(this.elementRef.nativeElement,"class",this.field.className)),!Ie&&this.field.options.detectChanges(this.field)}),fn(this.field,["className"],({firstChange:Ie,currentValue:et})=>{(!Ie||Ie&&et)&&(!this.config.extras.lazyRender||!0!==this.field.hide)&&this.elementRef&&this.renderer.setAttribute(this.elementRef.nativeElement,"class",et)}),...["touched","pristine","status"].map(Ie=>fn(this.field,["formControl",Ie],({firstChange:et})=>!et&&Kr(this.field)))]}}resetRefs(Ie){Ie&&(Ie._componentRefs?Ie._componentRefs=Ie._componentRefs.filter(et=>-1===this.componentRefs.indexOf(et)):qt(this.field,"_componentRefs",[])),this.componentRefs=[]}fieldChanges(Ie){if(this.valueChangesUnsubscribe(),!Ie)return()=>{};const et=[sn(Ie,["props"],()=>Ie.options.detectChanges(Ie)),sn(Ie.options,["formState"],()=>Ie.options.detectChanges(Ie))];for(const ze of Object.keys(Ie._expressions)){const an=fn(Ie,["_expressions",ze],({currentValue:lt,previousValue:Rt})=>{Rt?.subscription&&(Rt.subscription.unsubscribe(),Rt.subscription=null),u(lt.value$)&&(lt.subscription=lt.value$.subscribe())});et.push(()=>{Ie._expressions[ze]?.subscription&&Ie._expressions[ze].subscription.unsubscribe(),an.unsubscribe()})}for(const ze of[["template"],["fieldGroupClassName"],["validation","show"]]){const an=fn(Ie,ze,({firstChange:lt})=>!lt&&Ie.options.detectChanges(Ie));et.push(()=>an.unsubscribe())}if(Ie.formControl&&!Ie.fieldGroup){const ze=Ie.formControl;let an=ze.valueChanges.pipe((0,T.x)((qn,gr)=>!(qn!==gr||Array.isArray(qn)||pn(qn))));ze.value!==He(Ie)&&(an=an.pipe((0,M.O)(ze.value)));const{updateOn:lt,debounce:Rt}=Ie.modelOptions;(!lt||"change"===lt)&&Rt?.default>0&&(an=ze.valueChanges.pipe((0,w.b)(Rt.default)));const Pe=an.subscribe(qn=>{ze._fields?.length>1&&ze instanceof a.NI&&ze.patchValue(qn,{emitEvent:!1,onlySelf:!0}),Ie.parsers?.forEach(gr=>qn=gr(qn)),qn===Ie.formControl.value?(ge(Ie)&&ct(Ie,qn),Ie.options.fieldChanges.next({value:qn,field:Ie,type:"valueChanges"})):Ie.formControl.setValue(qn)});et.push(()=>Pe.unsubscribe())}return()=>et.forEach(ze=>ze())}}return jt.\u0275fac=function(Ie){return new(Ie||jt)(r.Y36(Lr),r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(r.s_b),r.Y36(wn,8))},jt.\u0275cmp=r.Xpm({type:jt,selectors:[["formly-field"]],viewQuery:function(Ie,et){if(1&Ie&&r.Gf(de,7,r.s_b),2&Ie){let ze;r.iGM(ze=r.CRH())&&(et.viewContainerRef=ze.first)}},inputs:{field:"field"},features:[r.TTD],decls:2,vars:0,consts:[["container",""]],template:function(Ie,et){1&Ie&&r.YNc(0,V,0,0,"ng-template",null,0,r.W1O)},styles:["[_nghost-%COMP%]:empty{display:none}"]}),jt})(),hr=(()=>{class jt{constructor(Ie,et,ze,an){this.builder=Ie,this.config=et,this.ngZone=ze,this.fieldTemplates=an,this.modelChange=new r.vpe,this.field={type:"formly-group"},this._modelChangeValue={},this.valueChangesUnsubscribe=()=>{}}set form(Ie){this.field.form=Ie}get form(){return this.field.form}set model(Ie){this.setField({model:Ie})}get model(){return this.field.model}set fields(Ie){this.setField({fieldGroup:Ie})}get fields(){return this.field.fieldGroup}set options(Ie){this.setField({options:Ie})}get options(){return this.field.options}set templates(Ie){this.fieldTemplates.templates=Ie}ngDoCheck(){"changeDetectionCheck"===this.config.extras.checkExpressionOn&&this.checkExpressionChange()}ngOnChanges(Ie){Ie.fields&&this.form&&Wt(this.form),(Ie.fields||Ie.form||Ie.model&&this._modelChangeValue!==Ie.model.currentValue)&&(this.valueChangesUnsubscribe(),this.builder.build(this.field),this.valueChangesUnsubscribe=this.valueChanges())}ngOnDestroy(){this.valueChangesUnsubscribe()}checkExpressionChange(){this.field.options.checkExpressions?.(this.field)}valueChanges(){this.valueChangesUnsubscribe();const Ie=this.field.options.fieldChanges.pipe((0,D.h)(({field:et,type:ze})=>ge(et)&&"valueChanges"===ze),(0,U.w)(()=>this.ngZone.onStable.asObservable().pipe((0,W.q)(1)))).subscribe(()=>this.ngZone.runGuarded(()=>{this.checkExpressionChange(),this.modelChange.emit(this._modelChangeValue=At(this.model))}));return()=>Ie.unsubscribe()}setField(Ie){this.config.extras.immutable?this.field={...this.field,...At(Ie)}:Object.keys(Ie).forEach(et=>this.field[et]=Ie[et])}}return jt.\u0275fac=function(Ie){return new(Ie||jt)(r.Y36(ir),r.Y36(Lr),r.Y36(r.R0b),r.Y36(wn))},jt.\u0275cmp=r.Xpm({type:jt,selectors:[["formly-form"]],contentQueries:function(Ie,et,ze){if(1&Ie&&r.Suo(ze,Tt,4),2&Ie){let an;r.iGM(an=r.CRH())&&(et.templates=an)}},inputs:{form:"form",model:"model",fields:"fields",options:"options"},outputs:{modelChange:"modelChange"},features:[r._Bn([ir,wn]),r.TTD],decls:1,vars:1,consts:[[3,"field"]],template:function(Ie,et){1&Ie&&r._UZ(0,"formly-field",0),2&Ie&&r.Q6J("field",et.field)},dependencies:[jn],encapsulation:2,changeDetection:0}),jt})(),Oi=(()=>{class jt{constructor(Ie,et,ze){this.renderer=Ie,this.elementRef=et,this.uiAttributesCache={},this.uiEvents={listeners:[],events:["click","keyup","keydown","keypress","focus","blur","change"],callback:(an,lt)=>{switch(an){case"focus":return this.onFocus(lt);case"blur":return this.onBlur(lt);case"change":return this.onChange(lt);default:return this.props[an](this.field,lt)}}},this.document=ze}get props(){return this.field.props||{}}get fieldAttrElements(){return this.field?._elementRefs||[]}ngOnChanges(Ie){Ie.field&&(this.field.name&&this.setAttribute("name",this.field.name),this.uiEvents.listeners.forEach(et=>et()),this.uiEvents.events.forEach(et=>{(this.props?.[et]||-1!==["focus","blur","change"].indexOf(et))&&this.uiEvents.listeners.push(this.renderer.listen(this.elementRef.nativeElement,et,ze=>this.uiEvents.callback(et,ze)))}),this.props?.attributes&&fn(this.field,["props","attributes"],({currentValue:et,previousValue:ze})=>{ze&&Object.keys(ze).forEach(an=>this.removeAttribute(an)),et&&Object.keys(et).forEach(an=>{null!=et[an]&&this.setAttribute(an,et[an])})}),this.detachElementRef(Ie.field.previousValue),this.attachElementRef(Ie.field.currentValue),1===this.fieldAttrElements.length&&(!this.id&&this.field.id&&this.setAttribute("id",this.field.id),this.focusObserver=fn(this.field,["focus"],({currentValue:et})=>{this.toggleFocus(et)}))),Ie.id&&this.setAttribute("id",this.id)}ngDoCheck(){if(!this.uiAttributes){const Ie=this.elementRef.nativeElement;this.uiAttributes=[...ot,"tabindex","placeholder","readonly","disabled","step"].filter(et=>!Ie.hasAttribute||!Ie.hasAttribute(et))}this.uiAttributes.forEach(Ie=>{const et=this.props[Ie];this.uiAttributesCache[Ie]!==et&&(!this.props.attributes||!this.props.attributes.hasOwnProperty(Ie.toLowerCase()))&&(this.uiAttributesCache[Ie]=et,et||0===et?this.setAttribute(Ie,!0===et?Ie:`${et}`):this.removeAttribute(Ie))})}ngOnDestroy(){this.uiEvents.listeners.forEach(Ie=>Ie()),this.detachElementRef(this.field),this.focusObserver?.unsubscribe()}toggleFocus(Ie){const et=this.fieldAttrElements?this.fieldAttrElements[0]:null;if(!et||!et.nativeElement.focus)return;const ze=!!this.document.activeElement&&this.fieldAttrElements.some(({nativeElement:an})=>this.document.activeElement===an||an.contains(this.document.activeElement));Ie&&!ze?Promise.resolve().then(()=>et.nativeElement.focus()):!Ie&&ze&&Promise.resolve().then(()=>et.nativeElement.blur())}onFocus(Ie){this.focusObserver?.setValue(!0),this.props.focus?.(this.field,Ie)}onBlur(Ie){this.focusObserver?.setValue(!1),this.props.blur?.(this.field,Ie)}onHostChange(Ie){Ie instanceof Event||this.onChange(Ie)}onChange(Ie){this.props.change?.(this.field,Ie),this.field.formControl?.markAsDirty()}attachElementRef(Ie){Ie&&(-1===Ie._elementRefs?.indexOf(this.elementRef)?Ie._elementRefs.push(this.elementRef):qt(Ie,"_elementRefs",[this.elementRef]))}detachElementRef(Ie){const et=Ie?._elementRefs?this.fieldAttrElements.indexOf(this.elementRef):-1;-1!==et&&Ie._elementRefs.splice(et,1)}setAttribute(Ie,et){this.renderer.setAttribute(this.elementRef.nativeElement,Ie,et)}removeAttribute(Ie){this.renderer.removeAttribute(this.elementRef.nativeElement,Ie)}}return jt.\u0275fac=function(Ie){return new(Ie||jt)(r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(F.K0))},jt.\u0275dir=r.lG2({type:jt,selectors:[["","formlyAttributes",""]],hostBindings:function(Ie,et){1&Ie&&r.NdJ("change",function(an){return et.onHostChange(an)})},inputs:{field:["formlyAttributes","field"],id:"id"},features:[r.TTD]}),jt})(),Wi=(()=>{class jt{get model(){return this.field.model}get form(){return this.field.form}get options(){return this.field.options}get key(){return this.field.key}get formControl(){return this.field.formControl}get props(){return this.field.props||{}}get to(){return this.props}get showError(){return this.options.showError(this)}get id(){return this.field.id}get formState(){return this.options.formState||{}}}return jt.\u0275fac=function(Ie){return new(Ie||jt)},jt.\u0275dir=r.lG2({type:jt,inputs:{field:"field"}}),jt})(),so=(()=>{class jt extends Wi{}return jt.\u0275fac=function(){let Fe;return function(et){return(Fe||(Fe=r.n5z(jt)))(et||jt)}}(),jt.\u0275cmp=r.Xpm({type:jt,selectors:[["formly-group"]],hostVars:2,hostBindings:function(Ie,et){2&Ie&&r.Tol(et.field.fieldGroupClassName||"")},features:[r.qOj],ngContentSelectors:se,decls:2,vars:1,consts:[[3,"field",4,"ngFor","ngForOf"],[3,"field"]],template:function(Ie,et){1&Ie&&(r.F$t(),r.YNc(0,ce,1,1,"formly-field",0),r.Hsn(1)),2&Ie&&r.Q6J("ngForOf",et.field.fieldGroup)},dependencies:[jn,F.sg],encapsulation:2,changeDetection:0}),jt})(),kr=(()=>{class jt{constructor(Ie){this.config=Ie}ngOnChanges(){const Ie=ot.map(et=>`templateOptions.${et}`);this.errorMessage$=(0,e.T)(this.field.formControl.statusChanges,this.field.options?this.field.options.fieldChanges.pipe((0,D.h)(({field:et,type:ze,property:an})=>et===this.field&&"expressionChanges"===ze&&(-1!==an.indexOf("validation")||-1!==Ie.indexOf(an)))):(0,f.of)(null)).pipe((0,M.O)(null),(0,U.w)(()=>u(this.errorMessage)?this.errorMessage:(0,f.of)(this.errorMessage)))}get errorMessage(){const Ie=this.field.formControl;for(const et in Ie.errors)if(Ie.errors.hasOwnProperty(et)){let ze=this.config.getValidatorMessage(et);if(pn(Ie.errors[et])){if(Ie.errors[et].errorPath)return;Ie.errors[et].message&&(ze=Ie.errors[et].message)}return this.field.validation?.messages?.[et]&&(ze=this.field.validation.messages[et]),this.field.validators?.[et]?.message&&(ze=this.field.validators[et].message),this.field.asyncValidators?.[et]?.message&&(ze=this.field.asyncValidators[et].message),"function"==typeof ze?ze(Ie.errors[et],this.field):ze}}}return jt.\u0275fac=function(Ie){return new(Ie||jt)(r.Y36(Lr))},jt.\u0275cmp=r.Xpm({type:jt,selectors:[["formly-validation-message"]],inputs:{field:"field"},features:[r.TTD],decls:2,vars:3,template:function(Ie,et){1&Ie&&(r._uU(0),r.ALo(1,"async")),2&Ie&&r.Oqu(r.lcZ(1,1,et.errorMessage$))},dependencies:[F.Ov],encapsulation:2,changeDetection:0}),jt})(),Ei=(()=>{class jt extends Wi{onPopulate(Ie){!Ie.formControl&&ge(Ie)&&br(Ie,jr(Ie)||new a.Oe([],{updateOn:Ie.modelOptions.updateOn})),Ie.fieldGroup=Ie.fieldGroup||[];const et=Array.isArray(Ie.model)?Ie.model.length:0;if(Ie.fieldGroup.length>et)for(let ze=Ie.fieldGroup.length-1;ze>=et;--ze)Qr(Ie.fieldGroup[ze],!0),Ie.fieldGroup.splice(ze,1);for(let ze=Ie.fieldGroup.length;ze<et;ze++){const an={...At("function"==typeof Ie.fieldArray?Ie.fieldArray(Ie):Ie.fieldArray),key:`${ze}`};Ie.fieldGroup.push(an)}}add(Ie,et,{markAsDirty:ze}={markAsDirty:!0}){Ie=Ie??this.field.fieldGroup.length,this.model||ct(this.field,[]),this.model.splice(Ie,0,et?At(et):void 0),this._build(),ze&&this.formControl.markAsDirty()}remove(Ie,{markAsDirty:et}={markAsDirty:!0}){this.model.splice(Ie,1);const ze=this.field.fieldGroup[Ie];this.field.fieldGroup.splice(Ie,1),this.field.fieldGroup.forEach((an,lt)=>an.key=`${lt}`),Qr(ze,!0),this._build(),et&&this.formControl.markAsDirty()}_build(){(this.field.formControl._fields??[this.field]).forEach(et=>this.options.build(et)),this.options.fieldChanges.next({field:this.field,value:He(this.field),type:"valueChanges"})}}return jt.\u0275fac=function(){let Fe;return function(et){return(Fe||(Fe=r.n5z(jt)))(et||jt)}}(),jt.\u0275dir=r.lG2({type:jt,features:[r.qOj]}),jt})(),ii=(()=>{class jt extends Wi{set _staticContent(Ie){this.fieldComponent=Ie}}return jt.\u0275fac=function(){let Fe;return function(et){return(Fe||(Fe=r.n5z(jt)))(et||jt)}}(),jt.\u0275dir=r.lG2({type:jt,viewQuery:function(Ie,et){if(1&Ie&&(r.Gf(fe,5,r.s_b),r.Gf(fe,7,r.s_b)),2&Ie){let ze;r.iGM(ze=r.CRH())&&(et.fieldComponent=ze.first),r.iGM(ze=r.CRH())&&(et._staticContent=ze.first)}},features:[r.qOj]}),jt})(),mr=(()=>{class jt extends Wi{constructor(Ie){super(),this.sanitizer=Ie,this.innerHtml={}}get template(){return this.field&&this.field.template!==this.innerHtml.template&&(this.innerHtml={template:this.field.template,content:this.props.safeHtml?this.sanitizer.bypassSecurityTrustHtml(this.field.template):this.field.template}),this.innerHtml.content}}return jt.\u0275fac=function(Ie){return new(Ie||jt)(r.Y36(X.H7))},jt.\u0275cmp=r.Xpm({type:jt,selectors:[["formly-template"]],features:[r.qOj],decls:1,vars:1,consts:[[3,"innerHtml"]],template:function(Ie,et){1&Ie&&r._UZ(0,"div",0),2&Ie&&r.Q6J("innerHtml",et.template,r.oJD)},encapsulation:2,changeDetection:0}),jt})();class po{onPopulate(Fe){if(Fe._expressions)return;qt(Fe,"_expressions",{}),fn(Fe,["hide"],({currentValue:et,firstChange:ze})=>{qt(Fe,"_hide",!!et),(!ze||ze&&!0===et)&&(Fe.props.hidden=et,Fe.options._hiddenFieldsForCheck.push(Fe))}),Fe.hideExpression&&fn(Fe,["hideExpression"],({currentValue:et})=>{Fe._expressions.hide=this.parseExpressions(Fe,"hide","boolean"==typeof et?()=>et:et)});const Ie=(et,ze)=>{"string"==typeof ze||Xt(ze)?Fe._expressions[et]=this.parseExpressions(Fe,et,ze):ze instanceof c.y&&(Fe._expressions[et]={value$:ze.pipe((0,$.b)(an=>{this.evalExpr(Fe,et,an),Fe.options.detectChanges(Fe)}))})};Fe.expressions=Fe.expressions||{};for(const et of Object.keys(Fe.expressions))fn(Fe,["expressions",et],({currentValue:ze})=>{Ie(et,Xt(ze)?(...an)=>ze(Fe,an[3]):ze)});Fe.expressionProperties=Fe.expressionProperties||{};for(const et of Object.keys(Fe.expressionProperties))fn(Fe,["expressionProperties",et],({currentValue:ze})=>Ie(et,ze))}postPopulate(Fe){if(!Fe.parent&&!Fe.options.checkExpressions){let Ie=!1;Fe.options.checkExpressions=(et,ze)=>{if(Ie)return;Ie=!0;const an=this.checkExpressions(et,ze),lt=Fe.options;lt._hiddenFieldsForCheck.sort(Rt=>Rt.hide?-1:1).forEach(Rt=>this.changeHideState(Rt,Rt.hide,!ze)),lt._hiddenFieldsForCheck=[],an&&(this.checkExpressions(Fe),Fe.options&&Fe.options.detectChanges&&Fe.options.detectChanges(Fe)),Ie=!1},Fe.options._checkField=(et,ze)=>{console.warn("Formly: 'options._checkField' is deprecated since v6.0, use 'options.checkExpressions' instead."),Fe.options.checkExpressions(et,ze)}}}parseExpressions(Fe,Ie,et){let ze,an;if(Fe.parent&&["hide","props.disabled"].includes(Ie)){const lt=Rt=>"hide"===Ie?Rt.hide:Rt.props.disabled;ze=()=>{let Rt=Fe.parent;for(;Rt.parent&&!lt(Rt);)Rt=Rt.parent;return lt(Rt)}}return"string"==typeof(et=et||(()=>!1))&&(et=function pr(jt,Fe){try{return Function(...Fe,`return ${jt};`)}catch(Ie){console.error(Ie)}}(et,["model","formState","field"])),{callback:lt=>{try{const Rt=function Eo(jt,Fe,Ie){return"function"==typeof jt?jt.apply(Fe,Ie):!!jt}(ze?(...Pe)=>ze(Fe)||et(...Pe):et,{field:Fe},[Fe.model,Fe.options.formState,Fe,lt]);return!(!lt&&(an===Rt||pn(Rt)&&!u(Rt)&&JSON.stringify(Rt)===JSON.stringify(an))||(an=Rt,this.evalExpr(Fe,Ie,Rt),0))}catch(Rt){throw Rt.message=`[Formly Error] [Expression "${Ie}"] ${Rt.message}`,Rt}}}}checkExpressions(Fe,Ie=!1){if(!Fe)return!1;let et=!1;if(Fe._expressions)for(const ze of Object.keys(Fe._expressions))Fe._expressions[ze].callback?.(Ie)&&(et=!0);return Fe.fieldGroup?.forEach(ze=>this.checkExpressions(ze,Ie)&&(et=!0)),et}changeDisabledState(Fe,Ie){Fe.fieldGroup&&Fe.fieldGroup.filter(et=>!et._expressions.hasOwnProperty("props.disabled")).forEach(et=>this.changeDisabledState(et,Ie)),ge(Fe)&&Fe.props.disabled!==Ie&&(Fe.props.disabled=Ie)}changeHideState(Fe,Ie,et){if(Fe.fieldGroup&&Fe.fieldGroup.filter(ze=>!ze._expressions.hide).forEach(ze=>this.changeHideState(ze,Ie,et)),Fe.formControl&&ge(Fe)){qt(Fe,"_hide",!(!Ie&&!Fe.hide));const ze=Fe.formControl;ze._fields?.length>1&&ht(ze),!0!==Ie||ze._fields&&!ze._fields.every(an=>!!an._hide)?!1===Ie&&(Fe.resetOnHide&&!Pt(Fe.defaultValue)&&Pt(He(Fe))&&ct(Fe,Fe.defaultValue),br(Fe,void 0,!0),Fe.resetOnHide&&Fe.fieldArray&&Fe.fieldGroup?.length!==Fe.model?.length&&Fe.options.build(Fe)):(Qr(Fe,!0),et&&Fe.resetOnHide&&(ct(Fe,void 0),Fe.formControl.reset({value:void 0,disabled:Fe.formControl.disabled}),Fe.options.fieldChanges.next({value:void 0,field:Fe,type:"valueChanges"}),Fe.fieldGroup&&Fe.formControl instanceof a.Oe&&(Fe.fieldGroup.length=0)))}Fe.options.fieldChanges&&Fe.options.fieldChanges.next({field:Fe,type:"hidden",value:Ie})}evalExpr(Fe,Ie,et){try{let ze=Fe;const an=this._evalExpressionPath(Fe,Ie),lt=an.length-1;for(let Rt=0;Rt<lt;Rt++)ze=ze[an[Rt]];ze[an[lt]]=et}catch(ze){throw ze.message=`[Formly Error] [Expression "${Ie}"] ${ze.message}`,ze}if(["templateOptions.disabled","props.disabled"].includes(Ie)&&ge(Fe)&&this.changeDisabledState(Fe,et),0===Ie.indexOf("model.")){const ze=Ie.replace(/^model\./,""),an=Fe?.key===ze?Fe.formControl:Fe.form.get(ze);an&&(!Le(an.value)||!Le(et))&&an.value!==et&&an.patchValue(et)}this.emitExpressionChanges(Fe,Ie,et)}emitExpressionChanges(Fe,Ie,et){Fe.options.fieldChanges&&Fe.options.fieldChanges.next({field:Fe,type:"expressionChanges",property:Ie,value:et})}_evalExpressionPath(Fe,Ie){if(Fe._expressions[Ie]&&Fe._expressions[Ie].paths)return Fe._expressions[Ie].paths;let et=[];return-1===Ie.indexOf("[")?et=Ie.split("."):Ie.split(/[[\]]{1,2}/).filter(ze=>ze).forEach(ze=>{const an=ze.match(/['|"](.*?)['|"]/);an?et.push(an[1]):et.push(...ze.split(".").filter(lt=>lt))}),Fe._expressions[Ie]&&(Fe._expressions[Ie].paths=et),et}}class $i{constructor(Fe){this.config=Fe}onPopulate(Fe){this.initFieldValidation(Fe,"validators"),this.initFieldValidation(Fe,"asyncValidators")}initFieldValidation(Fe,Ie){const et=[];if("validators"===Ie&&!(Fe.hasOwnProperty("fieldGroup")&&!ge(Fe))&&et.push(this.getPredefinedFieldValidation(Fe)),Fe[Ie])for(const ze of Object.keys(Fe[Ie]))"validation"===ze?et.push(...Fe[Ie].validation.map(an=>this.wrapNgValidatorFn(Fe,an))):et.push(this.wrapNgValidatorFn(Fe,Fe[Ie][ze],ze));qt(Fe,"_"+Ie,et)}getPredefinedFieldValidation(Fe){let Ie=[];return ot.forEach(et=>fn(Fe,["props",et],({currentValue:ze,firstChange:an})=>{Ie=Ie.filter(lt=>lt!==et),null!=ze&&!1!==ze&&Ie.push(et),!an&&Fe.formControl&&ht(Fe.formControl)})),et=>0===Ie.length?null:a.kI.compose(Ie.map(ze=>()=>{const an=Fe.props[ze];switch(ze){case"required":return a.kI.required(et);case"pattern":return a.kI.pattern(an)(et);case"minLength":const lt=a.kI.minLength(an)(et),Rt=this.config.getValidatorMessage("minlength")||Fe.validation?.messages?.minlength?"minlength":"minLength";return lt?{[Rt]:lt.minlength}:null;case"maxLength":const Pe=a.kI.maxLength(an)(et),qn=this.config.getValidatorMessage("maxlength")||Fe.validation?.messages?.maxlength?"maxlength":"maxLength";return Pe?{[qn]:Pe.maxlength}:null;case"min":return a.kI.min(an)(et);case"max":return a.kI.max(an)(et);default:return null}}))(et)}wrapNgValidatorFn(Fe,Ie,et){let ze;if("string"==typeof Ie&&(ze=At(this.config.getValidator(Ie))),"object"==typeof Ie&&Ie.name&&(ze=At(this.config.getValidator(Ie.name)),Ie.options&&(ze.options=Ie.options)),"object"==typeof Ie&&Ie.expression){const{expression:an,...lt}=Ie;ze={name:et,validation:an,options:Object.keys(lt).length>0?lt:null}}return"function"==typeof Ie&&(ze={name:et,validation:Ie}),an=>{const lt=ze.validation(an,Fe,ze.options);return function Rn(jt){return!!jt&&"function"==typeof jt.then}(lt)?lt.then(Rt=>this.handleAsyncResult(Fe,et?!!Rt:Rt,ze)):u(lt)?lt.pipe((0,J.U)(Rt=>this.handleAsyncResult(Fe,et?!!Rt:Rt,ze))):this.handleResult(Fe,et?!!lt:lt,ze)}}handleAsyncResult(Fe,Ie,et){return Fe.options.detectChanges(Fe),this.handleResult(Fe,Ie,et)}handleResult(Fe,Ie,{name:et,options:ze}){"boolean"==typeof Ie&&(Ie=Ie?null:{[et]:ze||!0});const an=Fe.formControl;return an?._childrenErrors?.[et]?.(),pn(Ie)&&Object.keys(Ie).forEach(lt=>{const Rt=Ie[lt].errorPath?Ie[lt].errorPath:ze?.errorPath,Pe=Rt?Fe.formControl.get(Rt):null;if(Pe){const{errorPath:qn,...gr}=Ie[lt];Pe.setErrors({...Pe.errors||{},[lt]:gr}),!an._childrenErrors&&qt(an,"_childrenErrors",{}),an._childrenErrors[lt]=()=>{const{[lt]:Pn,..._r}=Pe.errors||{};Pe.setErrors(0===Object.keys(_r).length?null:_r)}}}),Ie}}class qr{prePopulate(Fe){this.root||(this.root=Fe),Fe.parent&&Object.defineProperty(Fe,"form",{get:()=>Fe.parent.formControl,configurable:!0})}onPopulate(Fe){Fe.hasOwnProperty("fieldGroup")&&!ge(Fe)?qt(Fe,"formControl",Fe.form):this.addFormControl(Fe)}postPopulate(Fe){if(this.root===Fe&&(this.root=null,this.setValidators(Fe)&&Fe.parent)){let et=Fe.parent;for(;et;)(ge(et)||!et.parent)&&ht(et.formControl,!0),et=et.parent}}addFormControl(Fe){let Ie=jr(Fe);if(!Ie){const et={updateOn:Fe.modelOptions.updateOn};if(Fe.fieldGroup)Ie=new a.cw({},et);else{const ze=ge(Fe)?He(Fe):Fe.defaultValue;Ie=new a.NI({value:ze,disabled:!1},{...et,initialValueIsDefault:!0})}}br(Fe,Ie)}setValidators(Fe,Ie=!1){!1===Ie&&ge(Fe)&&Fe.props?.disabled&&(Ie=!0);let et=!1;if(Fe.fieldGroup?.forEach(ze=>ze&&this.setValidators(ze,Ie)&&(et=!0)),ge(Fe)||!Fe.parent||!ge(Fe)&&!Fe.fieldGroup){const{formControl:ze}=Fe;if(ze&&(ge(Fe)&&ze instanceof a.NI&&(Ie&&ze.enabled&&(ze.disable({emitEvent:!1,onlySelf:!0}),et=!0),!Ie&&ze.disabled&&(ze.enable({emitEvent:!1,onlySelf:!0}),et=!0)),(null===ze.validator||null===ze.asyncValidator)&&(ze.setValidators(()=>{const an=a.kI.compose(this.mergeValidators(Fe,"_validators"));return an?an(ze):null}),ze.setAsyncValidators(()=>{const an=a.kI.composeAsync(this.mergeValidators(Fe,"_asyncValidators"));return an?an(ze):(0,f.of)(null)}),et=!0),et)){ht(ze,!0);let an=ze.parent;for(let lt=1;lt<Et(Fe).length;lt++)an&&(ht(an,!0),an=an.parent)}}return et}mergeValidators(Fe,Ie){const et=[],ze=Fe.formControl;return ze?._fields?.length>1?ze._fields.filter(an=>!an._hide).forEach(an=>et.push(...an[Ie])):Fe[Ie]&&et.push(...Fe[Ie]),Fe.fieldGroup&&Fe.fieldGroup.filter(an=>an?.fieldGroup&&!ge(an)).forEach(an=>et.push(...this.mergeValidators(an,Ie))),et}}class Hi{constructor(Fe){this.config=Fe,this.formId=0}prePopulate(Fe){const Ie=Fe.parent;this.initRootOptions(Fe),this.initFieldProps(Fe),Ie&&(Object.defineProperty(Fe,"options",{get:()=>Ie.options,configurable:!0}),Object.defineProperty(Fe,"model",{get:()=>ge(Fe)&&Fe.fieldGroup?He(Fe):Ie.model,configurable:!0})),Object.defineProperty(Fe,"get",{value:et=>xn(Fe,et),configurable:!0}),this.getFieldComponentInstance(Fe).prePopulate?.(Fe)}onPopulate(Fe){this.initFieldOptions(Fe),this.getFieldComponentInstance(Fe).onPopulate?.(Fe),Fe.fieldGroup&&Fe.fieldGroup.forEach((Ie,et)=>{Ie&&(Object.defineProperty(Ie,"parent",{get:()=>Fe,configurable:!0}),Object.defineProperty(Ie,"index",{get:()=>et,configurable:!0})),this.formId++})}postPopulate(Fe){this.getFieldComponentInstance(Fe).postPopulate?.(Fe)}initFieldProps(Fe){Fe.props??(Fe.props=Fe.templateOptions),Object.defineProperty(Fe,"templateOptions",{get:()=>Fe.props,set:Ie=>Fe.props=Ie,configurable:!0})}initRootOptions(Fe){if(Fe.parent)return;const Ie=Fe.options;Fe.options.formState=Fe.options.formState||{},Ie.showError||(Ie.showError=this.config.extras.showError),Ie.fieldChanges||qt(Ie,"fieldChanges",new m.xQ),Ie._hiddenFieldsForCheck||(Ie._hiddenFieldsForCheck=[]),Ie._markForCheck=et=>{console.warn("Formly: 'options._markForCheck' is deprecated since v6.0, use 'options.detectChanges' instead."),Ie.detectChanges(et)},Ie.detectChanges=et=>{et._componentRefs&&(et.options.checkExpressions(et),Kr(et)),et.fieldGroup?.forEach(ze=>ze&&Ie.detectChanges(ze))},Ie.resetModel=et=>{et=At(et??Ie._initialModel),Fe.model&&(Object.keys(Fe.model).forEach(ze=>delete Fe.model[ze]),Object.assign(Fe.model,et||{})),Ie.build(Fe),Fe.form.reset(Fe.model),Ie.parentForm&&Ie.parentForm.control===Fe.formControl&&(Ie.parentForm.submitted=!1)},Ie.updateInitialValue=et=>Ie._initialModel=At(et??Fe.model),Fe.options.updateInitialValue()}initFieldOptions(Fe){if(We(Fe,{id:$e(`formly_${this.formId}`,Fe,Fe.index),hooks:{},modelOptions:{},validation:{messages:{}},props:Fe.type&&ge(Fe)?{label:"",placeholder:"",disabled:!1}:{}}),this.config.extras.resetFieldOnHide&&!1!==Fe.resetOnHide&&(Fe.resetOnHide=!0),"formly-template"!==Fe.type&&(Fe.template||Fe.expressions?.template||Fe.expressionProperties?.template)&&(Fe.type="formly-template"),!Fe.type&&Fe.fieldGroup&&(Fe.type="formly-group"),Fe.type&&this.config.getMergedField(Fe),ge(Fe)&&!Pt(Fe.defaultValue)&&Pt(He(Fe))){const Ie=ze=>ze.hide||ze.expressions?.hide||ze.hideExpression;let et=!Fe.resetOnHide||!Ie(Fe);if(!Ie(Fe)&&Fe.resetOnHide){let ze=Fe.parent;for(;ze&&!Ie(ze);)ze=ze.parent;et=!ze||!Ie(ze)}et&&ct(Fe,Fe.defaultValue)}Fe.wrappers=Fe.wrappers||[]}getFieldComponentInstance(Fe){const Ie=()=>{let et=this.config.resolveFieldTypeRef(Fe);const ze=Fe._componentRefs?.slice(-1)[0];return ze instanceof r.UuU&&ze?.componentType===et?.componentType&&(et=ze),et?.instance};return Fe._proxyInstance||qt(Fe,"_proxyInstance",new Proxy({},{get:(et,ze)=>Ie()?.[ze],set:(et,ze,an)=>Ie()[ze]=an})),Fe._proxyInstance}}function Dn(jt){return{types:[{name:"formly-group",component:so},{name:"formly-template",component:mr}],extensions:[{name:"core",extension:new Hi(jt),priority:-250},{name:"field-validation",extension:new $i(jt),priority:-200},{name:"field-form",extension:new qr,priority:-150},{name:"field-expression",extension:new po,priority:-100}]}}let Hn=(()=>{class jt{constructor(Ie,et=[]){et&&et.forEach(ze=>Ie.addConfig(ze))}static forRoot(Ie={}){return{ngModule:jt,providers:[{provide:Or,multi:!0,useFactory:Dn,deps:[Lr]},{provide:Or,useValue:Ie,multi:!0},Lr,ir]}}static forChild(Ie={}){return{ngModule:jt,providers:[{provide:Or,multi:!0,useFactory:Dn,deps:[Lr]},{provide:Or,useValue:Ie,multi:!0},ir]}}}return jt.\u0275fac=function(Ie){return new(Ie||jt)(r.LFG(Lr),r.LFG(Or,8))},jt.\u0275mod=r.oAB({type:jt}),jt.\u0275inj=r.cJS({imports:[[F.ez]]}),jt})()},78160:(E,C,s)=>{"use strict";s.d(C,{Z:()=>X});var c=s(66224);const e=function u(de,V){for(var ce=de.length;ce--;)if((0,c.Z)(de[ce][0],V))return ce;return-1};var m=Array.prototype.splice;function F(de){var V=-1,ce=null==de?0:de.length;for(this.clear();++V<ce;){var se=de[V];this.set(se[0],se[1])}}F.prototype.clear=function r(){this.__data__=[],this.size=0},F.prototype.delete=function T(de){var V=this.__data__,ce=e(V,de);return!(ce<0||(ce==V.length-1?V.pop():m.call(V,ce,1),--this.size,0))},F.prototype.get=function w(de){var V=this.__data__,ce=e(V,de);return ce<0?void 0:V[ce][1]},F.prototype.has=function U(de){return e(this.__data__,de)>-1},F.prototype.set=function $(de,V){var ce=this.__data__,se=e(ce,de);return se<0?(++this.size,ce.push([de,V])):ce[se][1]=V,this};const X=F},54673:(E,C,s)=>{"use strict";s.d(C,{Z:()=>u});var r=s(10259),a=s(40309);const u=(0,r.Z)(a.Z,"Map")},94013:(E,C,s)=>{"use strict";s.d(C,{Z:()=>At});const c=(0,s(10259).Z)(Object,"create");var w=Object.prototype.hasOwnProperty;var $=Object.prototype.hasOwnProperty;function ce(qt){var sn=-1,fn=null==qt?0:qt.length;for(this.clear();++sn<fn;){var xn=qt[sn];this.set(xn[0],xn[1])}}ce.prototype.clear=function u(){this.__data__=c?c(null):{},this.size=0},ce.prototype.delete=function f(qt){var sn=this.has(qt)&&delete this.__data__[qt];return this.size-=sn?1:0,sn},ce.prototype.get=function D(qt){var sn=this.__data__;if(c){var fn=sn[qt];return"__lodash_hash_undefined__"===fn?void 0:fn}return w.call(sn,qt)?sn[qt]:void 0},ce.prototype.has=function J(qt){var sn=this.__data__;return c?void 0!==sn[qt]:$.call(sn,qt)},ce.prototype.set=function de(qt,sn){var fn=this.__data__;return this.size+=this.has(qt)?0:1,fn[qt]=c&&void 0===sn?"__lodash_hash_undefined__":sn,this};const se=ce;var fe=s(78160),Te=s(54673);const qe=function ct(qt,sn){var fn=qt.__data__;return function Et(qt){var sn=typeof qt;return"string"==sn||"number"==sn||"symbol"==sn||"boolean"==sn?"__proto__"!==qt:null===qt}(sn)?fn["string"==typeof sn?"string":"hash"]:fn.map};function Rn(qt){var sn=-1,fn=null==qt?0:qt.length;for(this.clear();++sn<fn;){var xn=qt[sn];this.set(xn[0],xn[1])}}Rn.prototype.clear=function $e(){this.size=0,this.__data__={hash:new se,map:new(Te.Z||fe.Z),string:new se}},Rn.prototype.delete=function He(qt){var sn=qe(this,qt).delete(qt);return this.size-=sn?1:0,sn},Rn.prototype.get=function Le(qt){return qe(this,qt).get(qt)},Rn.prototype.has=function it(qt){return qe(this,qt).has(qt)},Rn.prototype.set=function cn(qt,sn){var fn=qe(this,qt),xn=fn.size;return fn.set(qt,sn),this.size+=fn.size==xn?0:1,this};const At=Rn},15131:(E,C,s)=>{"use strict";s.d(C,{Z:()=>F});var r=s(78160);var w=s(54673),D=s(94013);function J(X){var de=this.__data__=new r.Z(X);this.size=de.size}J.prototype.clear=function a(){this.__data__=new r.Z,this.size=0},J.prototype.delete=function u(X){var de=this.__data__,V=de.delete(X);return this.size=de.size,V},J.prototype.get=function f(X){return this.__data__.get(X)},J.prototype.has=function T(X){return this.__data__.has(X)},J.prototype.set=function W(X,de){var V=this.__data__;if(V instanceof r.Z){var ce=V.__data__;if(!w.Z||ce.length<199)return ce.push([X,de]),this.size=++V.size,this;V=this.__data__=new D.Z(ce)}return V.set(X,de),this.size=V.size,this};const F=J},35770:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});const c=s(40309).Z.Symbol},83345:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});const c=s(40309).Z.Uint8Array},26438:(E,C,s)=>{"use strict";s.d(C,{Z:()=>D});var c=s(40591),u=s(34654),e=s(25014),f=s(28078),m=s(14803),M=Object.prototype.hasOwnProperty;const D=function w(U,W){var $=(0,u.Z)(U),J=!$&&(0,c.Z)(U),F=!$&&!J&&(0,e.Z)(U),X=!$&&!J&&!F&&(0,m.Z)(U),de=$||J||F||X,V=de?function r(U,W){for(var $=-1,J=Array(U);++$<U;)J[$]=W($);return J}(U.length,String):[],ce=V.length;for(var se in U)(W||M.call(U,se))&&(!de||!("length"==se||F&&("offset"==se||"parent"==se)||X&&("buffer"==se||"byteLength"==se||"byteOffset"==se)||(0,f.Z)(se,ce)))&&V.push(se);return V}},57052:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=function r(c,u){for(var e=-1,f=u.length,m=c.length;++e<f;)c[m+e]=u[e];return c}},15427:(E,C,s)=>{"use strict";s.d(C,{Z:()=>f});var r=s(2951),a=s(66224),u=Object.prototype.hasOwnProperty;const f=function e(m,T,M){var w=m[T];(!u.call(m,T)||!(0,a.Z)(w,M)||void 0===M&&!(T in m))&&(0,r.Z)(m,T,M)}},2951:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});var r=s(99567);const c=function a(u,e,f){"__proto__"==e&&r.Z?(0,r.Z)(u,e,{configurable:!0,enumerable:!0,value:f,writable:!0}):u[e]=f}},65252:(E,C,s)=>{"use strict";s.d(C,{Z:()=>ro});var r=s(15131);var u=s(15427),e=s(57640),f=s(44409);var M=s(34673);var U=s(27672),W=s(36889),$=s(75694);var X=s(74202);var ce=s(22018),se=s(23359),fe=s(17507),$e=Object.prototype.hasOwnProperty;var ot=s(80609);var He=/\w*$/;var Pt=s(35770),it=Pt.Z?Pt.Z.prototype:void 0,Xt=it?it.valueOf:void 0;var Rn=s(1044);const so=function Wi(Vt,bn,Bn){var ci=Vt.constructor;switch(bn){case"[object ArrayBuffer]":return(0,ot.Z)(Vt);case"[object Boolean]":case"[object Date]":return new ci(+Vt);case"[object DataView]":return function ct(Vt,bn){var Bn=bn?(0,ot.Z)(Vt.buffer):Vt.buffer;return new Vt.constructor(Bn,Vt.byteOffset,Vt.byteLength)}(Vt,Bn);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,Rn.Z)(Vt,Bn);case"[object Map]":case"[object Set]":return new ci;case"[object Number]":case"[object String]":return new ci(Vt);case"[object RegExp]":return function We(Vt){var bn=new Vt.constructor(Vt.source,He.exec(Vt));return bn.lastIndex=Vt.lastIndex,bn}(Vt);case"[object Symbol]":return function cn(Vt){return Xt?Object(Xt.call(Vt)):{}}(Vt)}};var kr=s(42542),Ei=s(34654),ii=s(25014),mr=s(6539);var $i=s(21162),qr=s(48514),Hi=qr.Z&&qr.Z.isMap;const Hn=Hi?(0,$i.Z)(Hi):function Eo(Vt){return(0,mr.Z)(Vt)&&"[object Map]"==(0,fe.Z)(Vt)};var jt=s(4214);var ze=qr.Z&&qr.Z.isSet;const lt=ze?(0,$i.Z)(ze):function Ie(Vt){return(0,mr.Z)(Vt)&&"[object Set]"==(0,fe.Z)(Vt)};var gr="[object Arguments]",Zn="[object Function]",Ge="[object Object]",ko={};ko[gr]=ko["[object Array]"]=ko["[object ArrayBuffer]"]=ko["[object DataView]"]=ko["[object Boolean]"]=ko["[object Date]"]=ko["[object Float32Array]"]=ko["[object Float64Array]"]=ko["[object Int8Array]"]=ko["[object Int16Array]"]=ko["[object Int32Array]"]=ko["[object Map]"]=ko["[object Number]"]=ko[Ge]=ko["[object RegExp]"]=ko["[object Set]"]=ko["[object String]"]=ko["[object Symbol]"]=ko["[object Uint8Array]"]=ko["[object Uint8ClampedArray]"]=ko["[object Uint16Array]"]=ko["[object Uint32Array]"]=!0,ko["[object Error]"]=ko[Zn]=ko["[object WeakMap]"]=!1;const ro=function Ir(Vt,bn,Bn,ci,_o,go){var es,ts=1&bn,jo=2&bn,ss=4&bn;if(Bn&&(es=_o?Bn(Vt,ci,_o,go):Bn(Vt)),void 0!==es)return es;if(!(0,jt.Z)(Vt))return Vt;var gs=(0,Ei.Z)(Vt);if(gs){if(es=function ge(Vt){var bn=Vt.length,Bn=new Vt.constructor(bn);return bn&&"string"==typeof Vt[0]&&$e.call(Vt,"index")&&(Bn.index=Vt.index,Bn.input=Vt.input),Bn}(Vt),!ts)return(0,W.Z)(Vt,es)}else{var Is=(0,fe.Z)(Vt),la=Is==Zn||"[object GeneratorFunction]"==Is;if((0,ii.Z)(Vt))return(0,U.Z)(Vt,ts);if(Is==Ge||Is==gr||la&&!_o){if(es=jo||la?{}:(0,kr.Z)(Vt),!ts)return jo?function de(Vt,bn){return(0,e.Z)(Vt,(0,X.Z)(Vt),bn)}(Vt,function w(Vt,bn){return Vt&&(0,e.Z)(bn,(0,M.Z)(bn),Vt)}(es,Vt)):function J(Vt,bn){return(0,e.Z)(Vt,(0,$.Z)(Vt),bn)}(Vt,function m(Vt,bn){return Vt&&(0,e.Z)(bn,(0,f.Z)(bn),Vt)}(es,Vt))}else{if(!ko[Is])return _o?Vt:{};es=so(Vt,Is,ts)}}go||(go=new r.Z);var Ro=go.get(Vt);if(Ro)return Ro;go.set(Vt,es),lt(Vt)?Vt.forEach(function(qa){es.add(Ir(qa,bn,Bn,qa,Vt,go))}):Hn(Vt)&&Vt.forEach(function(qa,da){es.set(da,Ir(qa,bn,Bn,da,Vt,go))});var gl=gs?void 0:(ss?jo?se.Z:ce.Z:jo?M.Z:f.Z)(Vt);return function a(Vt,bn){for(var Bn=-1,ci=null==Vt?0:Vt.length;++Bn<ci&&!1!==bn(Vt[Bn],Bn,Vt););}(gl||Vt,function(qa,da){gl&&(qa=Vt[da=qa]),(0,u.Z)(es,da,Ir(qa,bn,Bn,da,Vt,go))}),es}},49137:(E,C,s)=>{"use strict";s.d(C,{Z:()=>u});var r=s(57052),a=s(34654);const u=function c(e,f,m){var T=f(e);return(0,a.Z)(e)?T:(0,r.Z)(T,m(e))}},98286:(E,C,s)=>{"use strict";s.d(C,{Z:()=>F});var r=s(35770),a=Object.prototype,c=a.hasOwnProperty,u=a.toString,e=r.Z?r.Z.toStringTag:void 0;var M=Object.prototype.toString;var $=r.Z?r.Z.toStringTag:void 0;const F=function J(X){return null==X?void 0===X?"[object Undefined]":"[object Null]":$&&$ in Object(X)?function f(X){var de=c.call(X,e),V=X[e];try{X[e]=void 0;var ce=!0}catch{}var se=u.call(X);return ce&&(de?X[e]=V:delete X[e]),se}(X):function w(X){return M.call(X)}(X)}},21162:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=function r(c){return function(u){return c(u)}}},80609:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});var r=s(83345);const c=function a(u){var e=new u.constructor(u.byteLength);return new r.Z(e).set(new r.Z(u)),e}},27672:(E,C,s)=>{"use strict";s.d(C,{Z:()=>T});var r=s(40309),a="object"==typeof exports&&exports&&!exports.nodeType&&exports,c=a&&"object"==typeof module&&module&&!module.nodeType&&module,e=c&&c.exports===a?r.Z.Buffer:void 0,f=e?e.allocUnsafe:void 0;const T=function m(M,w){if(w)return M.slice();var D=M.length,U=f?f(D):new M.constructor(D);return M.copy(U),U}},1044:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});var r=s(80609);const c=function a(u,e){var f=e?(0,r.Z)(u.buffer):u.buffer;return new u.constructor(f,u.byteOffset,u.length)}},36889:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=function r(c,u){var e=-1,f=c.length;for(u||(u=Array(f));++e<f;)u[e]=c[e];return u}},57640:(E,C,s)=>{"use strict";s.d(C,{Z:()=>u});var r=s(15427),a=s(2951);const u=function c(e,f,m,T){var M=!m;m||(m={});for(var w=-1,D=f.length;++w<D;){var U=f[w],W=T?T(m[U],e[U],U,m,e):void 0;void 0===W&&(W=e[U]),M?(0,a.Z)(m,U,W):(0,r.Z)(m,U,W)}return m}},99567:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});var r=s(10259);const c=function(){try{var u=(0,r.Z)(Object,"defineProperty");return u({},"",{}),u}catch{}}()},7746:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a="object"==typeof global&&global&&global.Object===Object&&global},22018:(E,C,s)=>{"use strict";s.d(C,{Z:()=>e});var r=s(49137),a=s(75694),c=s(44409);const e=function u(f){return(0,r.Z)(f,c.Z,a.Z)}},23359:(E,C,s)=>{"use strict";s.d(C,{Z:()=>e});var r=s(49137),a=s(74202),c=s(34673);const e=function u(f){return(0,r.Z)(f,c.Z,a.Z)}},10259:(E,C,s)=>{"use strict";s.d(C,{Z:()=>fe});var Te,r=s(58209),c=s(40309).Z["__core-js_shared__"],e=(Te=/[^.]+$/.exec(c&&c.keys&&c.keys.IE_PROTO||""))?"Symbol(src)_1."+Te:"";var T=s(4214),M=s(22035),D=/^\[object .+?Constructor\]$/,F=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const de=function X(Te){return!(!(0,T.Z)(Te)||function f(Te){return!!e&&e in Te}(Te))&&((0,r.Z)(Te)?F:D).test((0,M.Z)(Te))},fe=function se(Te,$e){var ge=function V(Te,$e){return Te?.[$e]}(Te,$e);return de(ge)?ge:void 0}},11595:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});const c=(0,s(24184).Z)(Object.getPrototypeOf,Object)},75694:(E,C,s)=>{"use strict";s.d(C,{Z:()=>T});var c=s(38387),e=Object.prototype.propertyIsEnumerable,f=Object.getOwnPropertySymbols;const T=f?function(M){return null==M?[]:(M=Object(M),function r(M,w){for(var D=-1,U=null==M?0:M.length,W=0,$=[];++D<U;){var J=M[D];w(J,D,M)&&($[W++]=J)}return $}(f(M),function(w){return e.call(M,w)}))}:c.Z},74202:(E,C,s)=>{"use strict";s.d(C,{Z:()=>m});var r=s(57052),a=s(11595),c=s(75694),u=s(38387);const m=Object.getOwnPropertySymbols?function(T){for(var M=[];T;)(0,r.Z)(M,(0,c.Z)(T)),T=(0,a.Z)(T);return M}:u.Z},17507:(E,C,s)=>{"use strict";s.d(C,{Z:()=>Et});var r=s(10259),a=s(40309);const u=(0,r.Z)(a.Z,"DataView");var e=s(54673);const m=(0,r.Z)(a.Z,"Promise"),M=(0,r.Z)(a.Z,"Set"),D=(0,r.Z)(a.Z,"WeakMap");var U=s(98286),W=s(22035),$="[object Map]",F="[object Promise]",X="[object Set]",de="[object WeakMap]",V="[object DataView]",ce=(0,W.Z)(u),se=(0,W.Z)(e.Z),fe=(0,W.Z)(m),Te=(0,W.Z)(M),$e=(0,W.Z)(D),ge=U.Z;(u&&ge(new u(new ArrayBuffer(1)))!=V||e.Z&&ge(new e.Z)!=$||m&&ge(m.resolve())!=F||M&&ge(new M)!=X||D&&ge(new D)!=de)&&(ge=function(ot){var ct=(0,U.Z)(ot),qe="[object Object]"==ct?ot.constructor:void 0,He=qe?(0,W.Z)(qe):"";if(He)switch(He){case ce:return V;case se:return $;case fe:return F;case Te:return X;case $e:return de}return ct});const Et=ge},42542:(E,C,s)=>{"use strict";s.d(C,{Z:()=>T});var r=s(4214),a=Object.create;const u=function(){function M(){}return function(w){if(!(0,r.Z)(w))return{};if(a)return a(w);M.prototype=w;var D=new M;return M.prototype=void 0,D}}();var e=s(11595),f=s(31550);const T=function m(M){return"function"!=typeof M.constructor||(0,f.Z)(M)?{}:u((0,e.Z)(M))}},28078:(E,C,s)=>{"use strict";s.d(C,{Z:()=>u});var a=/^(?:0|[1-9]\d*)$/;const u=function c(e,f){var m=typeof e;return!!(f=f??9007199254740991)&&("number"==m||"symbol"!=m&&a.test(e))&&e>-1&&e%1==0&&e<f}},31550:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});var r=Object.prototype;const c=function a(u){var e=u&&u.constructor;return u===("function"==typeof e&&e.prototype||r)}},48514:(E,C,s)=>{"use strict";s.d(C,{Z:()=>m});var r=s(7746),a="object"==typeof exports&&exports&&!exports.nodeType&&exports,c=a&&"object"==typeof module&&module&&!module.nodeType&&module,e=c&&c.exports===a&&r.Z.process;const m=function(){try{return c&&c.require&&c.require("util").types||e&&e.binding&&e.binding("util")}catch{}}()},24184:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=function r(c,u){return function(e){return c(u(e))}}},40309:(E,C,s)=>{"use strict";s.d(C,{Z:()=>u});var r=s(7746),a="object"==typeof self&&self&&self.Object===Object&&self;const u=r.Z||a||Function("return this")()},22035:(E,C,s)=>{"use strict";s.d(C,{Z:()=>u});var a=Function.prototype.toString;const u=function c(e){if(null!=e){try{return a.call(e)}catch{}try{return e+""}catch{}}return""}},66224:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=function r(c,u){return c===u||c!=c&&u!=u}},40591:(E,C,s)=>{"use strict";s.d(C,{Z:()=>w});var r=s(98286),a=s(6539);const e=function u(D){return(0,a.Z)(D)&&"[object Arguments]"==(0,r.Z)(D)};var f=Object.prototype,m=f.hasOwnProperty,T=f.propertyIsEnumerable;const w=e(function(){return arguments}())?e:function(D){return(0,a.Z)(D)&&m.call(D,"callee")&&!T.call(D,"callee")}},34654:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=Array.isArray},18402:(E,C,s)=>{"use strict";s.d(C,{Z:()=>u});var r=s(58209),a=s(19238);const u=function c(e){return null!=e&&(0,a.Z)(e.length)&&!(0,r.Z)(e)}},25014:(E,C,s)=>{"use strict";s.d(C,{Z:()=>w});var r=s(40309),u="object"==typeof exports&&exports&&!exports.nodeType&&exports,e=u&&"object"==typeof module&&module&&!module.nodeType&&module,m=e&&e.exports===u?r.Z.Buffer:void 0;const w=(m?m.isBuffer:void 0)||function a(){return!1}},58209:(E,C,s)=>{"use strict";s.d(C,{Z:()=>T});var r=s(98286),a=s(4214);const T=function m(M){if(!(0,a.Z)(M))return!1;var w=(0,r.Z)(M);return"[object Function]"==w||"[object GeneratorFunction]"==w||"[object AsyncFunction]"==w||"[object Proxy]"==w}},19238:(E,C,s)=>{"use strict";s.d(C,{Z:()=>c});const c=function a(u){return"number"==typeof u&&u>-1&&u%1==0&&u<=9007199254740991}},4214:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=function r(c){var u=typeof c;return null!=c&&("object"==u||"function"==u)}},6539:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=function r(c){return null!=c&&"object"==typeof c}},14803:(E,C,s)=>{"use strict";s.d(C,{Z:()=>Xt});var r=s(98286),a=s(19238),c=s(6539),ct={};ct["[object Float32Array]"]=ct["[object Float64Array]"]=ct["[object Int8Array]"]=ct["[object Int16Array]"]=ct["[object Int32Array]"]=ct["[object Uint8Array]"]=ct["[object Uint8ClampedArray]"]=ct["[object Uint16Array]"]=ct["[object Uint32Array]"]=!0,ct["[object Arguments]"]=ct["[object Array]"]=ct["[object ArrayBuffer]"]=ct["[object Boolean]"]=ct["[object DataView]"]=ct["[object Date]"]=ct["[object Error]"]=ct["[object Function]"]=ct["[object Map]"]=ct["[object Number]"]=ct["[object Object]"]=ct["[object RegExp]"]=ct["[object Set]"]=ct["[object String]"]=ct["[object WeakMap]"]=!1;var We=s(21162),Le=s(48514),Pt=Le.Z&&Le.Z.isTypedArray;const Xt=Pt?(0,We.Z)(Pt):function qe(cn){return(0,c.Z)(cn)&&(0,a.Z)(cn.length)&&!!ct[(0,r.Z)(cn)]}},44409:(E,C,s)=>{"use strict";s.d(C,{Z:()=>U});var r=s(26438),a=s(31550);const e=(0,s(24184).Z)(Object.keys,Object);var m=Object.prototype.hasOwnProperty;var w=s(18402);const U=function D(W){return(0,w.Z)(W)?(0,r.Z)(W):function T(W){if(!(0,a.Z)(W))return e(W);var $=[];for(var J in Object(W))m.call(W,J)&&"constructor"!=J&&$.push(J);return $}(W)}},34673:(E,C,s)=>{"use strict";s.d(C,{Z:()=>U});var r=s(26438),a=s(4214),c=s(31550);var m=Object.prototype.hasOwnProperty;const M=function T(W){if(!(0,a.Z)(W))return function u(W){var $=[];if(null!=W)for(var J in Object(W))$.push(J);return $}(W);var $=(0,c.Z)(W),J=[];for(var F in W)"constructor"==F&&($||!m.call(W,F))||J.push(F);return J};var w=s(18402);const U=function D(W){return(0,w.Z)(W)?(0,r.Z)(W,!0):M(W)}},38387:(E,C,s)=>{"use strict";s.d(C,{Z:()=>a});const a=function r(){return[]}},23122:(E,C,s)=>{"use strict";s.d(C,{Rh:()=>it,_W:()=>He});var r=s(64537),a=s(14091),c=s(88692),u=s(79765),e=s(5998);const f=["toast-component",""];function m(At,qt){if(1&At){const sn=r.EpF();r.TgZ(0,"button",5),r.NdJ("click",function(){r.CHM(sn);const xn=r.oxw();return r.KtG(xn.remove())}),r.TgZ(1,"span",6),r._uU(2,"\xd7"),r.qZA()()}}function T(At,qt){if(1&At&&(r.ynx(0),r._uU(1),r.BQk()),2&At){const sn=r.oxw(2);r.xp6(1),r.hij("[",sn.duplicatesCount+1,"]")}}function M(At,qt){if(1&At&&(r.TgZ(0,"div"),r._uU(1),r.YNc(2,T,2,1,"ng-container",4),r.qZA()),2&At){const sn=r.oxw();r.Tol(sn.options.titleClass),r.uIk("aria-label",sn.title),r.xp6(1),r.hij(" ",sn.title," "),r.xp6(1),r.Q6J("ngIf",sn.duplicatesCount)}}function w(At,qt){if(1&At&&r._UZ(0,"div",7),2&At){const sn=r.oxw();r.Tol(sn.options.messageClass),r.Q6J("innerHTML",sn.message,r.oJD)}}function D(At,qt){if(1&At&&(r.TgZ(0,"div",8),r._uU(1),r.qZA()),2&At){const sn=r.oxw();r.Tol(sn.options.messageClass),r.uIk("aria-label",sn.message),r.xp6(1),r.hij(" ",sn.message," ")}}function U(At,qt){if(1&At&&(r.TgZ(0,"div"),r._UZ(1,"div",9),r.qZA()),2&At){const sn=r.oxw();r.xp6(1),r.Udp("width",sn.width+"%")}}class ce{_attachedHost;component;viewContainerRef;injector;constructor(qt,sn){this.component=qt,this.injector=sn}attach(qt,sn){return this._attachedHost=qt,qt.attach(this,sn)}detach(){const qt=this._attachedHost;if(qt)return this._attachedHost=void 0,qt.detach()}get isAttached(){return null!=this._attachedHost}setAttachedHost(qt){this._attachedHost=qt}}class se{_attachedPortal;_disposeFn;attach(qt,sn){return this._attachedPortal=qt,this.attachComponentPortal(qt,sn)}detach(){this._attachedPortal&&this._attachedPortal.setAttachedHost(),this._attachedPortal=void 0,this._disposeFn&&(this._disposeFn(),this._disposeFn=void 0)}setDisposeFn(qt){this._disposeFn=qt}}class fe{_overlayRef;componentInstance;duplicatesCount=0;_afterClosed=new u.xQ;_activate=new u.xQ;_manualClose=new u.xQ;_resetTimeout=new u.xQ;_countDuplicate=new u.xQ;constructor(qt){this._overlayRef=qt}manualClose(){this._manualClose.next(),this._manualClose.complete()}manualClosed(){return this._manualClose.asObservable()}timeoutReset(){return this._resetTimeout.asObservable()}countDuplicate(){return this._countDuplicate.asObservable()}close(){this._overlayRef.detach(),this._afterClosed.next(),this._manualClose.next(),this._afterClosed.complete(),this._manualClose.complete(),this._activate.complete(),this._resetTimeout.complete(),this._countDuplicate.complete()}afterClosed(){return this._afterClosed.asObservable()}isInactive(){return this._activate.isStopped}activate(){this._activate.next(),this._activate.complete()}afterActivate(){return this._activate.asObservable()}onDuplicate(qt,sn){qt&&this._resetTimeout.next(),sn&&this._countDuplicate.next(++this.duplicatesCount)}}class Te{toastId;config;message;title;toastType;toastRef;_onTap=new u.xQ;_onAction=new u.xQ;constructor(qt,sn,fn,xn,Kr,Or){this.toastId=qt,this.config=sn,this.message=fn,this.title=xn,this.toastType=Kr,this.toastRef=Or,this.toastRef.afterClosed().subscribe(()=>{this._onAction.complete(),this._onTap.complete()})}triggerTap(){this._onTap.next(),this.config.tapToDismiss&&this._onTap.complete()}onTap(){return this._onTap.asObservable()}triggerAction(qt){this._onAction.next(qt)}onAction(){return this._onAction.asObservable()}}const ge=new r.OlP("ToastConfig");class Et extends se{_hostDomElement;_componentFactoryResolver;_appRef;constructor(qt,sn,fn){super(),this._hostDomElement=qt,this._componentFactoryResolver=sn,this._appRef=fn}attachComponentPortal(qt,sn){const fn=this._componentFactoryResolver.resolveComponentFactory(qt.component);let xn;return xn=fn.create(qt.injector),this._appRef.attachView(xn.hostView),this.setDisposeFn(()=>{this._appRef.detachView(xn.hostView),xn.destroy()}),sn?this._hostDomElement.insertBefore(this._getComponentRootNode(xn),this._hostDomElement.firstChild):this._hostDomElement.appendChild(this._getComponentRootNode(xn)),xn}_getComponentRootNode(qt){return qt.hostView.rootNodes[0]}}let ot=(()=>{class At{_document=(0,r.f3M)(c.K0);_containerElement;ngOnDestroy(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)}getContainerElement(){return this._containerElement||this._createContainer(),this._containerElement}_createContainer(){const sn=this._document.createElement("div");sn.classList.add("overlay-container"),sn.setAttribute("aria-live","polite"),this._document.body.appendChild(sn),this._containerElement=sn}static \u0275fac=function(fn){return new(fn||At)};static \u0275prov=r.Yz7({token:At,factory:At.\u0275fac,providedIn:"root"})}return At})();class ct{_portalHost;constructor(qt){this._portalHost=qt}attach(qt,sn=!0){return this._portalHost.attach(qt,sn)}detach(){return this._portalHost.detach()}}let qe=(()=>{class At{_overlayContainer=(0,r.f3M)(ot);_componentFactoryResolver=(0,r.f3M)(r._Vd);_appRef=(0,r.f3M)(r.z2F);_document=(0,r.f3M)(c.K0);_paneElements=new Map;create(sn,fn){return this._createOverlayRef(this.getPaneElement(sn,fn))}getPaneElement(sn="",fn){return this._paneElements.get(fn)||this._paneElements.set(fn,{}),this._paneElements.get(fn)[sn]||(this._paneElements.get(fn)[sn]=this._createPaneElement(sn,fn)),this._paneElements.get(fn)[sn]}_createPaneElement(sn,fn){const xn=this._document.createElement("div");return xn.id="toast-container",xn.classList.add(sn),xn.classList.add("toast-container"),fn?fn.getContainerElement().appendChild(xn):this._overlayContainer.getContainerElement().appendChild(xn),xn}_createPortalHost(sn){return new Et(sn,this._componentFactoryResolver,this._appRef)}_createOverlayRef(sn){return new ct(this._createPortalHost(sn))}static \u0275fac=function(fn){return new(fn||At)};static \u0275prov=r.Yz7({token:At,factory:At.\u0275fac,providedIn:"root"})}return At})(),He=(()=>{class At{overlay;_injector;sanitizer;ngZone;toastrConfig;currentlyActive=0;toasts=[];overlayContainer;previousToastMessage;index=0;constructor(sn,fn,xn,Kr,Or){this.overlay=fn,this._injector=xn,this.sanitizer=Kr,this.ngZone=Or,this.toastrConfig={...sn.default,...sn.config},sn.config.iconClasses&&(this.toastrConfig.iconClasses={...sn.default.iconClasses,...sn.config.iconClasses})}show(sn,fn,xn={},Kr=""){return this._preBuildNotification(Kr,sn,fn,this.applyConfig(xn))}success(sn,fn,xn={}){return this._preBuildNotification(this.toastrConfig.iconClasses.success||"",sn,fn,this.applyConfig(xn))}error(sn,fn,xn={}){return this._preBuildNotification(this.toastrConfig.iconClasses.error||"",sn,fn,this.applyConfig(xn))}info(sn,fn,xn={}){return this._preBuildNotification(this.toastrConfig.iconClasses.info||"",sn,fn,this.applyConfig(xn))}warning(sn,fn,xn={}){return this._preBuildNotification(this.toastrConfig.iconClasses.warning||"",sn,fn,this.applyConfig(xn))}clear(sn){for(const fn of this.toasts)if(void 0!==sn){if(fn.toastId===sn)return void fn.toastRef.manualClose()}else fn.toastRef.manualClose()}remove(sn){const fn=this._findToast(sn);if(!fn||(fn.activeToast.toastRef.close(),this.toasts.splice(fn.index,1),this.currentlyActive=this.currentlyActive-1,!this.toastrConfig.maxOpened||!this.toasts.length))return!1;if(this.currentlyActive<this.toastrConfig.maxOpened&&this.toasts[this.currentlyActive]){const xn=this.toasts[this.currentlyActive].toastRef;xn.isInactive()||(this.currentlyActive=this.currentlyActive+1,xn.activate())}return!0}findDuplicate(sn="",fn="",xn,Kr){const{includeTitleDuplicates:Or}=this.toastrConfig;for(const Lr of this.toasts)if((!Or||Or&&Lr.title===sn)&&Lr.message===fn)return Lr.toastRef.onDuplicate(xn,Kr),Lr;return null}applyConfig(sn={}){return{...this.toastrConfig,...sn}}_findToast(sn){for(let fn=0;fn<this.toasts.length;fn++)if(this.toasts[fn].toastId===sn)return{index:fn,activeToast:this.toasts[fn]};return null}_preBuildNotification(sn,fn,xn,Kr){return Kr.onActivateTick?this.ngZone.run(()=>this._buildNotification(sn,fn,xn,Kr)):this._buildNotification(sn,fn,xn,Kr)}_buildNotification(sn,fn,xn,Kr){if(!Kr.toastComponent)throw new Error("toastComponent required");const Or=this.findDuplicate(xn,fn,this.toastrConfig.resetTimeoutOnDuplicate&&Kr.timeOut>0,this.toastrConfig.countDuplicates);if((this.toastrConfig.includeTitleDuplicates&&xn||fn)&&this.toastrConfig.preventDuplicates&&null!==Or)return Or;this.previousToastMessage=fn;let Lr=!1;this.toastrConfig.maxOpened&&this.currentlyActive>=this.toastrConfig.maxOpened&&(Lr=!0,this.toastrConfig.autoDismiss&&this.clear(this.toasts[0].toastId));const ir=this.overlay.create(Kr.positionClass,this.overlayContainer);this.index=this.index+1;let Qr=fn;fn&&Kr.enableHtml&&(Qr=this.sanitizer.sanitize(r.q3G.HTML,fn));const jr=new fe(ir),br=new Te(this.index,Kr,Qr,xn,sn,jr),Wt=r.zs3.create({providers:[{provide:Te,useValue:br}],parent:this._injector}),Tt=new ce(Kr.toastComponent,Wt),wn=ir.attach(Tt,Kr.newestOnTop);jr.componentInstance=wn.instance;const jn={toastId:this.index,title:xn||"",message:fn||"",toastRef:jr,onShown:jr.afterActivate(),onHidden:jr.afterClosed(),onTap:br.onTap(),onAction:br.onAction(),portal:wn};return Lr||(this.currentlyActive=this.currentlyActive+1,setTimeout(()=>{jn.toastRef.activate()})),this.toasts.push(jn),jn}static \u0275fac=function(fn){return new(fn||At)(r.LFG(ge),r.LFG(qe),r.LFG(r.zs3),r.LFG(e.H7),r.LFG(r.R0b))};static \u0275prov=r.Yz7({token:At,factory:At.\u0275fac,providedIn:"root"})}return At})();const Le={maxOpened:0,autoDismiss:!1,newestOnTop:!0,preventDuplicates:!1,countDuplicates:!1,resetTimeoutOnDuplicate:!1,includeTitleDuplicates:!1,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},closeButton:!1,disableTimeOut:!1,timeOut:5e3,extendedTimeOut:1e3,enableHtml:!1,progressBar:!1,toastClass:"ngx-toastr",positionClass:"toast-top-right",titleClass:"toast-title",messageClass:"toast-message",easing:"ease-in",easeTime:300,tapToDismiss:!0,onActivateTick:!1,progressAnimation:"decreasing",toastComponent:(()=>{class At{toastrService;toastPackage;ngZone;message;title;options;duplicatesCount;originalTimeout;width=-1;toastClasses="";state;get displayStyle(){if("inactive"===this.state.value)return"none"}timeout;intervalId;hideTime;sub;sub1;sub2;sub3;constructor(sn,fn,xn){this.toastrService=sn,this.toastPackage=fn,this.ngZone=xn,this.message=fn.message,this.title=fn.title,this.options=fn.config,this.originalTimeout=fn.config.timeOut,this.toastClasses=`${fn.toastType} ${fn.config.toastClass}`,this.sub=fn.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=fn.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=fn.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=fn.toastRef.countDuplicate().subscribe(Kr=>{this.duplicatesCount=Kr}),this.state={value:"inactive",params:{easeTime:this.toastPackage.config.easeTime,easing:"ease-in"}}}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state={...this.state,value:"active"},!0!==this.options.disableTimeOut&&"timeOut"!==this.options.disableTimeOut&&this.options.timeOut&&(this.outsideTimeout(()=>this.remove(),this.options.timeOut),this.hideTime=(new Date).getTime()+this.options.timeOut,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}updateProgress(){if(0===this.width||100===this.width||!this.options.timeOut)return;const sn=(new Date).getTime();this.width=(this.hideTime-sn)/this.options.timeOut*100,"increasing"===this.options.progressAnimation&&(this.width=100-this.width),this.width<=0&&(this.width=0),this.width>=100&&(this.width=100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state={...this.state,value:"active"},this.outsideTimeout(()=>this.remove(),this.originalTimeout),this.options.timeOut=this.originalTimeout,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10)}remove(){"removed"!==this.state.value&&(clearTimeout(this.timeout),this.state={...this.state,value:"removed"},this.outsideTimeout(()=>this.toastrService.remove(this.toastPackage.toastId),+this.toastPackage.config.easeTime))}tapToast(){"removed"!==this.state.value&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){"removed"!==this.state.value&&"extendedTimeOut"!==this.options.disableTimeOut&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width=0)}delayedHideToast(){!0===this.options.disableTimeOut||"extendedTimeOut"===this.options.disableTimeOut||0===this.options.extendedTimeOut||"removed"===this.state.value||(this.outsideTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}outsideTimeout(sn,fn){this.ngZone?this.ngZone.runOutsideAngular(()=>this.timeout=setTimeout(()=>this.runInsideAngular(sn),fn)):this.timeout=setTimeout(()=>sn(),fn)}outsideInterval(sn,fn){this.ngZone?this.ngZone.runOutsideAngular(()=>this.intervalId=setInterval(()=>this.runInsideAngular(sn),fn)):this.intervalId=setInterval(()=>sn(),fn)}runInsideAngular(sn){this.ngZone?this.ngZone.run(()=>sn()):sn()}static \u0275fac=function(fn){return new(fn||At)(r.Y36(He),r.Y36(Te),r.Y36(r.R0b))};static \u0275cmp=r.Xpm({type:At,selectors:[["","toast-component",""]],hostVars:5,hostBindings:function(fn,xn){1&fn&&r.NdJ("click",function(){return xn.tapToast()})("mouseenter",function(){return xn.stickAround()})("mouseleave",function(){return xn.delayedHideToast()}),2&fn&&(r.d8E("@flyInOut",xn.state),r.Tol(xn.toastClasses),r.Udp("display",xn.displayStyle))},standalone:!0,features:[r.jDz],attrs:f,decls:5,vars:5,consts:[["type","button","class","toast-close-button","aria-label","Close",3,"click",4,"ngIf"],[3,"class",4,"ngIf"],["role","alert",3,"class","innerHTML",4,"ngIf"],["role","alert",3,"class",4,"ngIf"],[4,"ngIf"],["type","button","aria-label","Close",1,"toast-close-button",3,"click"],["aria-hidden","true"],["role","alert",3,"innerHTML"],["role","alert"],[1,"toast-progress"]],template:function(fn,xn){1&fn&&(r.YNc(0,m,3,0,"button",0),r.YNc(1,M,3,5,"div",1),r.YNc(2,w,1,3,"div",2),r.YNc(3,D,2,4,"div",3),r.YNc(4,U,2,2,"div",4)),2&fn&&(r.Q6J("ngIf",xn.options.closeButton),r.xp6(1),r.Q6J("ngIf",xn.title),r.xp6(1),r.Q6J("ngIf",xn.message&&xn.options.enableHtml),r.xp6(1),r.Q6J("ngIf",xn.message&&!xn.options.enableHtml),r.xp6(1),r.Q6J("ngIf",xn.options.progressBar))},dependencies:[c.O5],encapsulation:2,data:{animation:[(0,a.X$)("flyInOut",[(0,a.SB)("inactive",(0,a.oB)({opacity:0})),(0,a.SB)("active",(0,a.oB)({opacity:1})),(0,a.SB)("removed",(0,a.oB)({opacity:0})),(0,a.eR)("inactive => active",(0,a.jt)("{{ easeTime }}ms {{ easing }}")),(0,a.eR)("active => removed",(0,a.jt)("{{ easeTime }}ms {{ easing }}"))])]}})}return At})()},Pt=(At={})=>(0,r.MR2)([{provide:ge,useValue:{default:Le,config:At}}]);let it=(()=>{class At{static forRoot(sn={}){return{ngModule:At,providers:[Pt(sn)]}}static \u0275fac=function(fn){return new(fn||At)};static \u0275mod=r.oAB({type:At});static \u0275inj=r.cJS({})}return At})()},8239:(E,C,s)=>{"use strict";function r(c,u,e,f,m,T,M){try{var w=c[T](M),D=w.value}catch(U){return void e(U)}w.done?u(D):Promise.resolve(D).then(f,m)}function a(c){return function(){var u=this,e=arguments;return new Promise(function(f,m){var T=c.apply(u,e);function M(D){r(T,f,m,M,w,"next",D)}function w(D){r(T,f,m,M,w,"throw",D)}M(void 0)})}}s.d(C,{Z:()=>a})}},E=>{E(E.s=43486)}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.8be028f171baab96.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/main.8be028f171baab96.js
deleted file mode 100644 (file)
index add13c8..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-var $localize=Object.assign(void 0===$localize?{}:$localize,{locale:"en-US"});
-"use strict";(function(global){global.ng=global.ng||{};global.ng.common=global.ng.common||{};global.ng.common.locales=global.ng.common.locales||{};const u=undefined;function plural(val){const n=val,i=Math.floor(Math.abs(val)),v=val.toString().replace(/^[^.]*\.?/,"").length;if(i===1&&v===0)return 1;return 5}global.ng.common.locales["en-us-posix"]=["en-US-POSIX",[["a","p"],["AM","PM"],u],[["AM","PM"],u,u],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],u,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],u,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",u,"{1} 'at' {0}",u],[".",",",";","%","+","-","E","\xD7","0/00","INF","NaN",":"],["0.######","0%","\xA4\xA00.00","0.000000E+000"],"USD","$","US Dollar",{},"ltr",plural,[[["mi","n","in the morning","in the afternoon","in the evening","at night"],["midnight","noon","in the morning","in the afternoon","in the evening","at night"],u],[["midnight","noon","morning","afternoon","evening","night"],u,u],["00:00","12:00",["06:00","12:00"],["12:00","18:00"],["18:00","21:00"],["21:00","06:00"]]]]})(typeof globalThis!=="undefined"&&globalThis||typeof global!=="undefined"&&global||typeof window!=="undefined"&&window);;
-var Jm=Math.pow;(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[179],{43155:(v,b)=>{"use strict";b.N=void 0;var r=/^([^\w]*)(javascript|data|vbscript)/im,a=/&#(\w+)(^\w|;)?/g,f=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,u=/^([^:]+):/gm,e=[".","/"];b.N=function S(M){var w=function g(M){return M.replace(a,function(w,x){return String.fromCharCode(x)})}(M||"").replace(f,"").trim();if(!w)return"about:blank";if(function p(M){return e.indexOf(M[0])>-1}(w))return w;var x=w.match(u);return x&&r.test(x[0])?"about:blank":w}},62946:(v,b,i)=>{"use strict";i.d(b,{iM:()=>Of,qr:()=>lm,xc:()=>lv});var r=i(89724),a=i(11048),f=function(F,J){return(f=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(U,Te){U.__proto__=Te}||function(U,Te){for(var ft in Te)Te.hasOwnProperty(ft)&&(U[ft]=Te[ft])})(F,J)};function u(F,J){function U(){this.constructor=F}f(F,J),F.prototype=null===J?Object.create(J):(U.prototype=J.prototype,new U)}var e=function(){return e=Object.assign||function(J){for(var U,Te=1,ft=arguments.length;Te<ft;Te++)for(var Zt in U=arguments[Te])Object.prototype.hasOwnProperty.call(U,Zt)&&(J[Zt]=U[Zt]);return J},e.apply(this,arguments)};function p(F,J){var U="function"==typeof Symbol&&F[Symbol.iterator];if(!U)return F;var ft,rr,Te=U.call(F),Zt=[];try{for(;(void 0===J||J-- >0)&&!(ft=Te.next()).done;)Zt.push(ft.value)}catch(xr){rr={error:xr}}finally{try{ft&&!ft.done&&(U=Te.return)&&U.call(Te)}finally{if(rr)throw rr.error}}return Zt}function g(){for(var F=[],J=0;J<arguments.length;J++)F=F.concat(p(arguments[J]));return F}var M=[];Object.freeze(M);var w={};Object.freeze(w);var x={};function B(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:x}function W(){return++Ar.mobxGuid}function j(F){throw q(!1,F),"X"}function q(F,J){if(!F)throw new Error("[mobx] "+(J||"An invariant failed, however the error is obfuscated because this is an production build."))}function H(F){var J=!1;return function(){if(!J)return J=!0,F.apply(this,arguments)}}var se=function(){};function ie(F){return null!==F&&"object"==typeof F}function fe(F){if(null===F||"object"!=typeof F)return!1;var J=Object.getPrototypeOf(F);return J===Object.prototype||null===J}function ce(F,J,U){Object.defineProperty(F,J,{enumerable:!1,writable:!0,configurable:!0,value:U})}function Be(F,J,U){Object.defineProperty(F,J,{enumerable:!1,writable:!1,configurable:!0,value:U})}function He(F,J){var U="isMobX"+F;return J.prototype[U]=!0,function(Te){return ie(Te)&&!0===Te[U]}}function Oe(F){return void 0!==B().Map&&F instanceof B().Map}function Tt(F){return F instanceof Set}function We(F){for(var J=[];;){var U=F.next();if(U.done)break;J.push(U.value)}return J}function Qt(){return"function"==typeof Symbol&&Symbol.toPrimitive||"@@toPrimitive"}function Nt(F){return null===F?null:"object"==typeof F?""+F:F}function Yt(){return"function"==typeof Symbol&&Symbol.iterator||"@@iterator"}function dn(F,J){Be(F,Yt(),J)}function rn(F){return F[Yt()]=xt,F}function vt(){return"function"==typeof Symbol&&Symbol.toStringTag||"@@toStringTag"}function xt(){return this}var Ct=function(){function F(J){void 0===J&&(J="Atom@"+W()),this.name=J,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=dt.NOT_TRACKING}return F.prototype.onBecomeUnobserved=function(){},F.prototype.onBecomeObserved=function(){},F.prototype.reportObserved=function(){return es(this)},F.prototype.reportChanged=function(){Ys(),function ma(F){if(F.lowestObserverState!==dt.STALE){F.lowestObserverState=dt.STALE;for(var J=F.observers,U=J.length;U--;){var Te=J[U];Te.dependenciesState===dt.UP_TO_DATE&&(Te.isTracing!==st.NONE&&sa(Te,F),Te.onBecomeStale()),Te.dependenciesState=dt.STALE}}}(this),ds()},F.prototype.toString=function(){return this.name},F}(),Gt=He("Atom",Ct);function pr(F,J){return F===J}var Br={identity:pr,structural:function mi(F,J){return _l(F,J)},default:function hr(F,J){return function Pe(F,J){return"number"==typeof F&&"number"==typeof J&&isNaN(F)&&isNaN(J)}(F,J)||pr(F,J)},shallow:function ci(F,J){return _l(F,J,1)}},Ur={},Hn={};function er(F,J){var U=J?Ur:Hn;return U[F]||(U[F]={configurable:!0,enumerable:J,get:function(){return _r(this),this[F]},set:function(Te){_r(this),this[F]=Te}})}function _r(F){if(!0!==F.__mobxDidRunLazyInitializers){var J=F.__mobxDecorators;if(J)for(var U in ce(F,"__mobxDidRunLazyInitializers",!0),J){var Te=J[U];Te.propertyCreator(F,Te.prop,Te.descriptor,Te.decoratorTarget,Te.decoratorArguments)}}}function ei(F,J){return function(){var Te,ft=function(rr,xr,hi,ns){return!0===ns?(J(rr,xr,hi,rr,Te),null):(Object.prototype.hasOwnProperty.call(rr,"__mobxDecorators")||ce(rr,"__mobxDecorators",e({},rr.__mobxDecorators)),rr.__mobxDecorators[xr]={prop:xr,propertyCreator:J,descriptor:hi,decoratorTarget:rr,decoratorArguments:Te},er(xr,F))};return bi(arguments)?(Te=M,ft.apply(null,arguments)):(Te=Array.prototype.slice.call(arguments),ft)}}function bi(F){return(2===F.length||3===F.length)&&"string"==typeof F[1]||4===F.length&&!0===F[3]}function fi(F,J,U){return Kn(F)?F:Array.isArray(F)?Wn.array(F,{name:U}):fe(F)?Wn.object(F,void 0,{name:U}):Oe(F)?Wn.map(F,{name:U}):Tt(F)?Wn.set(F,{name:U}):F}function xo(F){return F}function an(F){var J=ei(!0,function(Te,ft,Zt,rr,xr){!function _n(F,J,U,Te){var ft=Ht(F);if(Yi(ft)){var Zt=Fa(ft,{object:F,name:J,type:"add",newValue:U});if(!Zt)return;U=Zt.newValue}U=(ft.values[J]=new ao(U,Te,ft.name+"."+J,!1)).value,Object.defineProperty(F,J,function Ei(F){return Tr[F]||(Tr[F]={configurable:!0,enumerable:!0,get:function(){return this.$mobx.read(this,F)},set:function(J){this.$mobx.write(this,F,J)}})}(J)),ft.keys&&ft.keys.push(J),function Pr(F,J,U,Te){var ft=Es(F),Zt=js(),rr=ft||Zt?{type:"add",object:J,name:U,newValue:Te}:null;Zt&&To(e({},rr,{name:F.name,key:U})),ft&&Sl(F,rr),Zt&&hs()}(ft,F,J,U)}(Te,ft,Zt?Zt.initializer?Zt.initializer.call(Te):Zt.value:void 0,F)}),U=("undefined"!=typeof process&&process,J);return U.enhancer=F,U}var vn={deep:!0,name:void 0,defaultDecorator:void 0};function zn(F){return null==F?vn:"string"==typeof F?{name:F,deep:!0}:F}function ri(F){return F.defaultDecorator?F.defaultDecorator.enhancer:!1===F.deep?xo:fi}Object.freeze(vn),Object.freeze({deep:!1,name:void 0,defaultDecorator:void 0});var Gi=an(fi),ui=an(function no(F,J,U){return null==F||Rr(F)||wu(F)||Sr(F)||ct(F)?F:Array.isArray(F)?Wn.array(F,{name:U,deep:!1}):fe(F)?Wn.object(F,void 0,{name:U,deep:!1}):Oe(F)?Wn.map(F,{name:U,deep:!1}):Tt(F)?Wn.set(F,{name:U,deep:!1}):j(!1)}),vr=an(xo),Ji=an(function Er(F,J,U){return _l(F,J)?J:F}),Rn={box:function(F,J){arguments.length>2&&et("box");var U=zn(J);return new ao(F,ri(U),U.name,!0,U.equals)},shallowBox:function(F,J){return arguments.length>2&&et("shallowBox"),Wn.box(F,{name:J,deep:!1})},array:function(F,J){arguments.length>2&&et("array");var U=zn(J);return new ec(F,ri(U),U.name)},shallowArray:function(F,J){return arguments.length>2&&et("shallowArray"),Wn.array(F,{name:J,deep:!1})},map:function(F,J){arguments.length>2&&et("map");var U=zn(J);return new Io(F,ri(U),U.name)},shallowMap:function(F,J){return arguments.length>2&&et("shallowMap"),Wn.map(F,{name:J,deep:!1})},set:function(F,J){arguments.length>2&&et("set");var U=zn(J);return new De(F,ri(U),U.name)},object:function(F,J,U){"string"==typeof arguments[1]&&et("object");var Te=zn(U);return _c({},F,J,Te)},shallowObject:function(F,J){return"string"==typeof arguments[1]&&et("shallowObject"),Wn.object(F,{},{name:J,deep:!1})},ref:vr,shallow:ui,deep:Gi,struct:Ji},Wn=function mn(F,J,U){if("string"==typeof arguments[1])return Gi.apply(null,arguments);if(Kn(F))return F;var Te=fe(F)?Wn.object(F,J,U):Array.isArray(F)?Wn.array(F,J):Oe(F)?Wn.map(F,J):Tt(F)?Wn.set(F,J):F;if(Te!==F)return Te;j(!1)};function et(F){j("Expected one or two arguments to observable."+F+". Did you accidentally try to use observable."+F+" as decorator?")}Object.keys(Rn).forEach(function(F){return Wn[F]=Rn[F]});var Le=ei(!1,function(F,J,U,Te,ft){!function Pn(F,J,U){var Te=Ht(F);U.name=Te.name+"."+J,U.context=F,Te.values[J]=new Eo(U),Object.defineProperty(F,J,function Vi(F){return ai[F]||(ai[F]={configurable:Ar.computedConfigurable,enumerable:!1,get:function(){return Ci(this).read(this,F)},set:function(J){Ci(this).write(this,F,J)}})}(J))}(F,J,e({get:U.get,set:U.set},ft[0]||{}))}),Re=Le({equals:Br.structural}),Se=function(J,U,Te){if("string"==typeof U||null!==J&&"object"==typeof J&&1===arguments.length)return Le.apply(null,arguments);var ft="object"==typeof U?U:{};return ft.get=J,ft.set="function"==typeof U?U:ft.set,ft.name=ft.name||J.name||"",new Eo(ft)};Se.struct=Re;var dt=(()=>{return(F=dt||(dt={}))[F.NOT_TRACKING=-1]="NOT_TRACKING",F[F.UP_TO_DATE=0]="UP_TO_DATE",F[F.POSSIBLY_STALE=1]="POSSIBLY_STALE",F[F.STALE=2]="STALE",dt;var F})(),st=(()=>{return(F=st||(st={}))[F.NONE=0]="NONE",F[F.LOG=1]="LOG",F[F.BREAK=2]="BREAK",st;var F})(),nn=function F(J){this.cause=J};function Fe(F){return F instanceof nn}function Lr(F){switch(F.dependenciesState){case dt.UP_TO_DATE:return!1;case dt.NOT_TRACKING:case dt.STALE:return!0;case dt.POSSIBLY_STALE:for(var J=yn(),U=F.observing,Te=U.length,ft=0;ft<Te;ft++){var Zt=U[ft];if(mo(Zt)){if(Ar.disableErrorBoundaries)Zt.get();else try{Zt.get()}catch(rr){return Cr(J),!0}if(F.dependenciesState===dt.STALE)return Cr(J),!0}}return Yo(F),Cr(J),!1}}function Ut(F){var J=F.observers.length>0;Ar.computationDepth>0&&J&&j(!1),!Ar.allowStateChanges&&(J||"strict"===Ar.enforceActions)&&j(!1)}function Et(F,J,U){var Te=xi(!0);Yo(F),F.newObserving=new Array(F.observing.length+100),F.unboundDepsCount=0,F.runId=++Ar.runId;var Zt,ft=Ar.trackingDerivation;if(Ar.trackingDerivation=F,!0===Ar.disableErrorBoundaries)Zt=J.call(U);else try{Zt=J.call(U)}catch(rr){Zt=new nn(rr)}return Ar.trackingDerivation=ft,function _t(F){for(var J=F.observing,U=F.observing=F.newObserving,Te=dt.UP_TO_DATE,ft=0,Zt=F.unboundDepsCount,rr=0;rr<Zt;rr++)0===(xr=U[rr]).diffValue&&(xr.diffValue=1,ft!==rr&&(U[ft]=xr),ft++),xr.dependenciesState>Te&&(Te=xr.dependenciesState);for(U.length=ft,F.newObserving=null,Zt=J.length;Zt--;)0===(xr=J[Zt]).diffValue&&go(xr,F),xr.diffValue=0;for(;ft--;){var xr;1===(xr=U[ft]).diffValue&&(xr.diffValue=0,ro(xr,F))}Te!==dt.UP_TO_DATE&&(F.dependenciesState=Te,F.onBecomeStale())}(F),yi(Te),Zt}function yt(F){var J=F.observing;F.observing=[];for(var U=J.length;U--;)go(J[U],F);F.dependenciesState=dt.NOT_TRACKING}function Vt(F){var J=yn(),U=F();return Cr(J),U}function yn(){var F=Ar.trackingDerivation;return Ar.trackingDerivation=null,F}function Cr(F){Ar.trackingDerivation=F}function xi(F){var J=Ar.allowStateReads;return Ar.allowStateReads=F,J}function yi(F){Ar.allowStateReads=F}function Yo(F){if(F.dependenciesState!==dt.UP_TO_DATE){F.dependenciesState=dt.UP_TO_DATE;for(var J=F.observing,U=J.length;U--;)J[U].lowestObserverState=dt.UP_TO_DATE}}var Qo=0,lo=1;function Ri(F,J){var U=function(){return ko(F,J,this,arguments)};return U.isMobxAction=!0,U}function ko(F,J,U,Te){var ft=function Xo(F,J,U){var Te=js()&&!!F,ft=0;if(Te){ft=Date.now();var Zt=U&&U.length||0,rr=new Array(Zt);if(Zt>0)for(var xr=0;xr<Zt;xr++)rr[xr]=U[xr];To({type:"action",name:F,object:J,arguments:rr})}var hi=yn();Ys();var As={prevDerivation:hi,prevAllowStateChanges:kn(!0),prevAllowStateReads:xi(!0),notifySpy:Te,startTime:ft,actionId:lo++,parentActionId:Qo};return Qo=As.actionId,As}(F,U,Te);try{return J.apply(U,Te)}catch(Zt){throw ft.error=Zt,Zt}finally{!function ir(F){Qo!==F.actionId&&j("invalid action stack. did you forget to finish an action?"),Qo=F.parentActionId,void 0!==F.error&&(Ar.suppressReactionErrors=!0),nr(F.prevAllowStateChanges),yi(F.prevAllowStateReads),ds(),Cr(F.prevDerivation),F.notifySpy&&hs({time:Date.now()-F.startTime}),Ar.suppressReactionErrors=!1}(ft)}}function kn(F){var J=Ar.allowStateChanges;return Ar.allowStateChanges=F,J}function nr(F){Ar.allowStateChanges=F}var ao=function(F){function J(U,Te,ft,Zt,rr){void 0===ft&&(ft="ObservableValue@"+W()),void 0===Zt&&(Zt=!0),void 0===rr&&(rr=Br.default);var xr=F.call(this,ft)||this;return xr.enhancer=Te,xr.name=ft,xr.equals=rr,xr.hasUnreportedChange=!1,xr.value=Te(U,void 0,ft),Zt&&js()&&$o({type:"create",name:xr.name,newValue:""+xr.value}),xr}return u(J,F),J.prototype.dehanceValue=function(U){return void 0!==this.dehancer?this.dehancer(U):U},J.prototype.set=function(U){var Te=this.value;if((U=this.prepareNewValue(U))!==Ar.UNCHANGED){var ft=js();ft&&To({type:"update",name:this.name,newValue:U,oldValue:Te}),this.setNewValue(U),ft&&hs()}},J.prototype.prepareNewValue=function(U){if(Ut(this),Yi(this)){var Te=Fa(this,{object:this,type:"update",newValue:U});if(!Te)return Ar.UNCHANGED;U=Te.newValue}return U=this.enhancer(U,this.value,this.name),this.equals(this.value,U)?Ar.UNCHANGED:U},J.prototype.setNewValue=function(U){var Te=this.value;this.value=U,this.reportChanged(),Es(this)&&Sl(this,{type:"update",object:this,newValue:U,oldValue:Te})},J.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},J.prototype.intercept=function(U){return aa(this,U)},J.prototype.observe=function(U,Te){return Te&&U({object:this,type:"update",newValue:this.value,oldValue:void 0}),qu(this,U)},J.prototype.toJSON=function(){return this.get()},J.prototype.toString=function(){return this.name+"["+this.value+"]"},J.prototype.valueOf=function(){return Nt(this.get())},J}(Ct);ao.prototype[Qt()]=ao.prototype.valueOf,He("ObservableValue",ao);var Eo=function(){function F(J){this.dependenciesState=dt.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=[],this.observersIndexes={},this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=dt.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+W(),this.value=new nn(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=st.NONE,this.derivation=J.get,this.name=J.name||"ComputedValue@"+W(),J.set&&(this.setter=Ri(this.name+"-setter",J.set)),this.equals=J.equals||(J.compareStructural||J.struct?Br.structural:Br.default),this.scope=J.context,this.requiresReaction=!!J.requiresReaction,this.keepAlive=!!J.keepAlive}return F.prototype.onBecomeStale=function(){!function fa(F){if(F.lowestObserverState===dt.UP_TO_DATE){F.lowestObserverState=dt.POSSIBLY_STALE;for(var J=F.observers,U=J.length;U--;){var Te=J[U];Te.dependenciesState===dt.UP_TO_DATE&&(Te.dependenciesState=dt.POSSIBLY_STALE,Te.isTracing!==st.NONE&&sa(Te,F),Te.onBecomeStale())}}}(this)},F.prototype.onBecomeUnobserved=function(){},F.prototype.onBecomeObserved=function(){},F.prototype.get=function(){this.isComputing&&j("Cycle detected in computation "+this.name+": "+this.derivation),0!==Ar.inBatch||0!==this.observers.length||this.keepAlive?(es(this),Lr(this)&&this.trackAndCompute()&&function Ea(F){if(F.lowestObserverState!==dt.STALE){F.lowestObserverState=dt.STALE;for(var J=F.observers,U=J.length;U--;){var Te=J[U];Te.dependenciesState===dt.POSSIBLY_STALE?Te.dependenciesState=dt.STALE:Te.dependenciesState===dt.UP_TO_DATE&&(F.lowestObserverState=dt.UP_TO_DATE)}}}(this)):Lr(this)&&(this.warnAboutUntrackedRead(),Ys(),this.value=this.computeValue(!1),ds());var J=this.value;if(Fe(J))throw J.cause;return J},F.prototype.peek=function(){var J=this.computeValue(!1);if(Fe(J))throw J.cause;return J},F.prototype.set=function(J){if(this.setter){q(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,J)}finally{this.isRunningSetter=!1}}else q(!1,!1)},F.prototype.trackAndCompute=function(){js()&&$o({object:this.scope,type:"compute",name:this.name});var J=this.value,U=this.dependenciesState===dt.NOT_TRACKING,Te=this.computeValue(!0),ft=U||Fe(J)||Fe(Te)||!this.equals(J,Te);return ft&&(this.value=Te),ft},F.prototype.computeValue=function(J){var U;if(this.isComputing=!0,Ar.computationDepth++,J)U=Et(this,this.derivation,this.scope);else if(!0===Ar.disableErrorBoundaries)U=this.derivation.call(this.scope);else try{U=this.derivation.call(this.scope)}catch(Te){U=new nn(Te)}return Ar.computationDepth--,this.isComputing=!1,U},F.prototype.suspend=function(){this.keepAlive||(yt(this),this.value=void 0)},F.prototype.observe=function(J,U){var Te=this,ft=!0,Zt=void 0;return ii(function(){var rr=Te.get();if(!ft||U){var xr=yn();J({type:"update",object:Te,newValue:rr,oldValue:Zt}),Cr(xr)}ft=!1,Zt=rr})},F.prototype.warnAboutUntrackedRead=function(){},F.prototype.toJSON=function(){return this.get()},F.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},F.prototype.valueOf=function(){return Nt(this.get())},F}();Eo.prototype[Qt()]=Eo.prototype.valueOf;var F,mo=He("ComputedValue",Eo),ua=function F(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1},or=!0,Ar=((F=B()).__mobxInstanceCount>0&&!F.__mobxGlobals&&(or=!1),F.__mobxGlobals&&F.__mobxGlobals.version!==(new ua).version&&(or=!1),or?F.__mobxGlobals?(F.__mobxInstanceCount+=1,F.__mobxGlobals.UNCHANGED||(F.__mobxGlobals.UNCHANGED={}),F.__mobxGlobals):(F.__mobxInstanceCount=1,F.__mobxGlobals=new ua):(setTimeout(function(){j("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")},1),new ua));function ro(F,J){var U=F.observers.length;U&&(F.observersIndexes[J.__mapid]=U),F.observers[U]=J,F.lowestObserverState>J.dependenciesState&&(F.lowestObserverState=J.dependenciesState)}function go(F,J){if(1===F.observers.length)F.observers.length=0,Ro(F);else{var U=F.observers,Te=F.observersIndexes,ft=U.pop();if(ft!==J){var Zt=Te[J.__mapid]||0;Zt?Te[ft.__mapid]=Zt:delete Te[ft.__mapid],U[Zt]=ft}delete Te[J.__mapid]}}function Ro(F){!1===F.isPendingUnobservation&&(F.isPendingUnobservation=!0,Ar.pendingUnobservations.push(F))}function Ys(){Ar.inBatch++}function ds(){if(0==--Ar.inBatch){ys();for(var F=Ar.pendingUnobservations,J=0;J<F.length;J++){var U=F[J];U.isPendingUnobservation=!1,0===U.observers.length&&(U.isBeingObserved&&(U.isBeingObserved=!1,U.onBecomeUnobserved()),U instanceof Eo&&U.suspend())}Ar.pendingUnobservations=[]}}function es(F){var J=Ar.trackingDerivation;return null!==J?(J.runId!==F.lastAccessedBy&&(F.lastAccessedBy=J.runId,J.newObserving[J.unboundDepsCount++]=F,F.isBeingObserved||(F.isBeingObserved=!0,F.onBecomeObserved())),!0):(0===F.observers.length&&Ar.inBatch>0&&Ro(F),!1)}function sa(F,J){if(console.log("[mobx.trace] '"+F.name+"' is invalidated due to a change in: '"+J.name+"'"),F.isTracing===st.BREAK){var U=[];Ra(function Cl(F,J){return mc(br(F,J))}(F),U,1),new Function("debugger;\n/*\nTracing '"+F.name+"'\n\nYou are entering this break point because derivation '"+F.name+"' is being traced and '"+J.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(F instanceof Eo?F.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+U.join("\n")+"\n*/\n    ")()}}function Ra(F,J,U){J.length>=1e3?J.push("(and many more)"):(J.push(""+new Array(U).join("\t")+F.name),F.dependencies&&F.dependencies.forEach(function(Te){return Ra(Te,J,U+1)}))}var pl=function(){function F(J,U,Te,ft){void 0===J&&(J="Reaction@"+W()),void 0===ft&&(ft=!1),this.name=J,this.onInvalidate=U,this.errorHandler=Te,this.requiresObservable=ft,this.observing=[],this.newObserving=[],this.dependenciesState=dt.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+W(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=st.NONE}return F.prototype.onBecomeStale=function(){this.schedule()},F.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,Ar.pendingReactions.push(this),ys())},F.prototype.isScheduled=function(){return this._isScheduled},F.prototype.runReaction=function(){if(!this.isDisposed){if(Ys(),this._isScheduled=!1,Lr(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending&&js()&&$o({name:this.name,type:"scheduled-reaction"})}catch(J){this.reportExceptionInDerivation(J)}}ds()}},F.prototype.track=function(J){Ys();var Te,U=js();U&&(Te=Date.now(),To({name:this.name,type:"reaction"})),this._isRunning=!0;var ft=Et(this,J,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&yt(this),Fe(ft)&&this.reportExceptionInDerivation(ft.cause),U&&hs({time:Date.now()-Te}),ds()},F.prototype.reportExceptionInDerivation=function(J){var U=this;if(this.errorHandler)this.errorHandler(J,this);else{if(Ar.disableErrorBoundaries)throw J;var Te="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";Ar.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(Te,J),js()&&$o({type:"error",name:this.name,message:Te,error:""+J}),Ar.globalReactionErrorHandlers.forEach(function(ft){return ft(J,U)})}},F.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||(Ys(),yt(this),ds()))},F.prototype.getDisposer=function(){var J=this.dispose.bind(this);return J.$mobx=this,J},F.prototype.toString=function(){return"Reaction["+this.name+"]"},F.prototype.trace=function(J){void 0===J&&(J=!1),function Jo(){for(var F=[],J=0;J<arguments.length;J++)F[J]=arguments[J];var U=!1;"boolean"==typeof F[F.length-1]&&(U=F.pop());var Te=ja(F);if(!Te)return j(!1);Te.isTracing===st.NONE&&console.log("[mobx.trace] '"+Te.name+"' tracing enabled"),Te.isTracing=U?st.BREAK:st.LOG}(this,J)},F}();function ys(){Ar.inBatch>0||Ar.isRunningReactions||function(F){F()}(Wa)}function Wa(){Ar.isRunningReactions=!0;for(var F=Ar.pendingReactions,J=0;F.length>0;){100==++J&&(console.error("Reaction doesn't converge to a stable state after 100 iterations. Probably there is a cycle in the reactive function: "+F[0]),F.splice(0));for(var U=F.splice(0),Te=0,ft=U.length;Te<ft;Te++)U[Te].runReaction()}Ar.isRunningReactions=!1}var Is=He("Reaction",pl);function js(){return!!Ar.spyListeners.length}function $o(F){if(Ar.spyListeners.length)for(var J=Ar.spyListeners,U=0,Te=J.length;U<Te;U++)J[U](F)}function To(F){$o(e({},F,{spyReportStart:!0}))}var Ns={spyReportEnd:!0};function hs(F){$o(F?e({},F,{spyReportEnd:!0}):Ns)}function kr(){j(!1)}function Ki(F){return function(J,U,Te){if(Te){if(Te.value)return{value:Ri(F,Te.value),enumerable:!1,configurable:!0,writable:!0};var ft=Te.initializer;return{enumerable:!1,configurable:!0,writable:!0,initializer:function(){return Ri(F,ft.call(this))}}}return ut(F).apply(this,arguments)}}function ut(F){return function(J,U,Te){Object.defineProperty(J,U,{configurable:!0,enumerable:!1,get:function(){},set:function(ft){ce(this,U,te(F,ft))}})}}var te=function(J,U,Te,ft){return 1===arguments.length&&"function"==typeof J?Ri(J.name||"<unnamed action>",J):2===arguments.length&&"function"==typeof U?Ri(J,U):1===arguments.length&&"string"==typeof J?Ki(J):!0!==ft?Ki(U).apply(null,arguments):void(J[U]=Ri(J.name||U,Te.value))};function hn(F,J,U){ce(F,J,Ri(J,U.bind(F)))}function ii(F,J){void 0===J&&(J=w);var ft,U=J&&J.name||F.name||"Autorun@"+W();if(J.scheduler||J.delay){var Zt=ki(J),rr=!1;ft=new pl(U,function(){rr||(rr=!0,Zt(function(){rr=!1,ft.isDisposed||ft.track(xr)}))},J.onError,J.requiresObservable)}else ft=new pl(U,function(){this.track(xr)},J.onError,J.requiresObservable);function xr(){F(ft)}return ft.schedule(),ft.getDisposer()}te.bound=function pn(F,J,U,Te){return!0===Te?(hn(F,J,U.value),null):U?{configurable:!0,enumerable:!1,get:function(){return hn(this,J,U.value||U.initializer.call(this)),this[J]},set:kr}:{enumerable:!1,configurable:!0,set:function(ft){hn(this,J,ft)},get:function(){}}};var Oi=function(F){return F()};function ki(F){return F.scheduler?F.scheduler:F.delay?function(J){return setTimeout(J,F.delay)}:Oi}function _s(F,J,U){void 0===U&&(U=w),"boolean"==typeof U&&(U={fireImmediately:U});var ns,Te=U.name||"Reaction@"+W(),ft=te(Te,U.onError?function Vo(F,J){return function(){try{return J.apply(this,arguments)}catch(U){F.call(this,U)}}}(U.onError,J):J),Zt=!U.scheduler&&!U.delay,rr=ki(U),xr=!0,hi=!1,zo=U.compareStructural?Br.structural:U.equals||Br.default,As=new pl(Te,function(){xr||Zt?ml():hi||(hi=!0,rr(ml))},U.onError,U.requiresObservable);function ml(){if(hi=!1,!As.isDisposed){var au=!1;As.track(function(){var Xl=F(As);au=xr||!zo(ns,Xl),ns=Xl}),xr&&U.fireImmediately&&ft(ns,As),!xr&&!0===au&&ft(ns,As),xr&&(xr=!1)}}return As.schedule(),As.getDisposer()}function Ks(F,J,U){return hl("onBecomeUnobserved",F,J,U)}function hl(F,J,U,Te){var ft="function"==typeof Te?br(J,U):br(J),Zt="function"==typeof Te?Te:U,rr=ft[F];return"function"!=typeof rr?j(!1):(ft[F]=function(){rr.call(this),Zt.call(this)},function(){ft[F]=rr})}function _c(F,J,U,Te){var Zt=(Te=zn(Te)).defaultDecorator||(!1===Te.deep?vr:Gi);_r(F),Ht(F,Te.name,Zt.enhancer),Ys();try{for(var ft in J){var rr=Object.getOwnPropertyDescriptor(J,ft),hi=(U&&ft in U?U[ft]:rr.get?Le:Zt)(F,ft,rr,!0);hi&&Object.defineProperty(F,ft,hi)}}finally{ds()}return F}function mc(F){var J={name:F.name};return F.observing&&F.observing.length>0&&(J.dependencies=function ae(F){var J=[];return F.forEach(function(U){-1===J.indexOf(U)&&J.push(U)}),J}(F.observing).map(mc)),J}function Kt(F,J){if(null==F)return!1;if(void 0!==J){if(Rr(F)){var U=F.$mobx;return U.values&&!!U.values[J]}return!1}return Rr(F)||!!F.$mobx||Gt(F)||Is(F)||mo(F)}function Kn(F){return 1!==arguments.length&&j(!1),Kt(F)}function ja(F){switch(F.length){case 0:return Ar.trackingDerivation;case 1:return br(F[0]);case 2:return br(F[0],F[1])}}function El(F,J){void 0===J&&(J=void 0),Ys();try{return F.apply(J)}finally{ds()}}function Yi(F){return void 0!==F.interceptors&&F.interceptors.length>0}function aa(F,J){var U=F.interceptors||(F.interceptors=[]);return U.push(J),H(function(){var Te=U.indexOf(J);-1!==Te&&U.splice(Te,1)})}function Fa(F,J){var U=yn();try{var Te=F.interceptors;if(Te)for(var ft=0,Zt=Te.length;ft<Zt&&(q(!(J=Te[ft](J))||J.type,"Intercept handlers should return nothing or a change object"),J);ft++);return J}finally{Cr(U)}}function Es(F){return void 0!==F.changeListeners&&F.changeListeners.length>0}function qu(F,J){var U=F.changeListeners||(F.changeListeners=[]);return U.push(J),H(function(){var Te=U.indexOf(J);-1!==Te&&U.splice(Te,1)})}function Sl(F,J){var U=yn(),Te=F.changeListeners;if(Te){for(var ft=0,Zt=(Te=Te.slice()).length;ft<Zt;ft++)Te[ft](J);Cr(U)}}var Eu=function(){var F=!1,J={};return Object.defineProperty(J,"0",{set:function(){F=!0}}),Object.create(J)[0]=1,!1===F}(),iu=0,ra=function F(){};(function bu(F,J){void 0!==Object.setPrototypeOf?Object.setPrototypeOf(F.prototype,J):void 0!==F.prototype.__proto__?F.prototype.__proto__=J:F.prototype=J})(ra,Array.prototype),Object.isFrozen(Array)&&["constructor","push","shift","concat","pop","unshift","replace","find","findIndex","splice","reverse","sort"].forEach(function(F){Object.defineProperty(ra.prototype,F,{configurable:!0,writable:!0,value:Array.prototype[F]})});var td=function(){function F(J,U,Te,ft){this.array=Te,this.owned=ft,this.values=[],this.lastKnownLength=0,this.atom=new Ct(J||"ObservableArray@"+W()),this.enhancer=function(Zt,rr){return U(Zt,rr,J+"[..]")}}return F.prototype.dehanceValue=function(J){return void 0!==this.dehancer?this.dehancer(J):J},F.prototype.dehanceValues=function(J){return void 0!==this.dehancer&&J.length>0?J.map(this.dehancer):J},F.prototype.intercept=function(J){return aa(this,J)},F.prototype.observe=function(J,U){return void 0===U&&(U=!1),U&&J({object:this.array,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),qu(this,J)},F.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},F.prototype.setArrayLength=function(J){if("number"!=typeof J||J<0)throw new Error("[mobx.array] Out of range: "+J);var U=this.values.length;if(J!==U)if(J>U){for(var Te=new Array(J-U),ft=0;ft<J-U;ft++)Te[ft]=void 0;this.spliceWithArray(U,0,Te)}else this.spliceWithArray(J,U-J)},F.prototype.updateArrayLength=function(J,U){if(J!==this.lastKnownLength)throw new Error("[mobx] Modification exception: the internal structure of an observable array was changed. Did you use peek() to change it?");this.lastKnownLength+=U,U>0&&J+U+1>iu&&Uu(J+U+1)},F.prototype.spliceWithArray=function(J,U,Te){var ft=this;Ut(this.atom);var Zt=this.values.length;if(void 0===J?J=0:J>Zt?J=Zt:J<0&&(J=Math.max(0,Zt+J)),U=1===arguments.length?Zt-J:null==U?0:Math.max(0,Math.min(U,Zt-J)),void 0===Te&&(Te=M),Yi(this)){var rr=Fa(this,{object:this.array,type:"splice",index:J,removedCount:U,added:Te});if(!rr)return M;U=rr.removedCount,Te=rr.added}var xr=(Te=0===Te.length?Te:Te.map(function(ns){return ft.enhancer(ns,void 0)})).length-U;this.updateArrayLength(Zt,xr);var hi=this.spliceItemsIntoValues(J,U,Te);return(0!==U||0!==Te.length)&&this.notifyArraySplice(J,Te,hi),this.dehanceValues(hi)},F.prototype.spliceItemsIntoValues=function(J,U,Te){var ft;if(Te.length<1e4)return(ft=this.values).splice.apply(ft,g([J,U],Te));var Zt=this.values.slice(J,J+U);return this.values=this.values.slice(0,J).concat(Te,this.values.slice(J+U)),Zt},F.prototype.notifyArrayChildUpdate=function(J,U,Te){var ft=!this.owned&&js(),Zt=Es(this),rr=Zt||ft?{object:this.array,type:"update",index:J,newValue:U,oldValue:Te}:null;ft&&To(e({},rr,{name:this.atom.name})),this.atom.reportChanged(),Zt&&Sl(this,rr),ft&&hs()},F.prototype.notifyArraySplice=function(J,U,Te){var ft=!this.owned&&js(),Zt=Es(this),rr=Zt||ft?{object:this.array,type:"splice",index:J,removed:Te,added:U,removedCount:Te.length,addedCount:U.length}:null;ft&&To(e({},rr,{name:this.atom.name})),this.atom.reportChanged(),Zt&&Sl(this,rr),ft&&hs()},F}(),ec=function(F){function J(U,Te,ft,Zt){void 0===ft&&(ft="ObservableArray@"+W()),void 0===Zt&&(Zt=!1);var rr=F.call(this)||this,xr=new td(ft,Te,rr,Zt);if(Be(rr,"$mobx",xr),U&&U.length){var hi=kn(!0);rr.spliceWithArray(0,0,U),nr(hi)}return Eu&&Object.defineProperty(xr.array,"0",uu),rr}return u(J,F),J.prototype.intercept=function(U){return this.$mobx.intercept(U)},J.prototype.observe=function(U,Te){return void 0===Te&&(Te=!1),this.$mobx.observe(U,Te)},J.prototype.clear=function(){return this.splice(0)},J.prototype.concat=function(){for(var U=[],Te=0;Te<arguments.length;Te++)U[Te]=arguments[Te];return this.$mobx.atom.reportObserved(),Array.prototype.concat.apply(this.peek(),U.map(function(ft){return wu(ft)?ft.peek():ft}))},J.prototype.replace=function(U){return this.$mobx.spliceWithArray(0,this.$mobx.values.length,U)},J.prototype.toJS=function(){return this.slice()},J.prototype.toJSON=function(){return this.toJS()},J.prototype.peek=function(){return this.$mobx.atom.reportObserved(),this.$mobx.dehanceValues(this.$mobx.values)},J.prototype.find=function(U,Te,ft){void 0===ft&&(ft=0);var Zt=this.findIndex.apply(this,arguments);return-1===Zt?void 0:this.get(Zt)},J.prototype.findIndex=function(U,Te,ft){void 0===ft&&(ft=0);for(var Zt=this.peek(),rr=Zt.length,xr=ft;xr<rr;xr++)if(U.call(Te,Zt[xr],xr,this))return xr;return-1},J.prototype.splice=function(U,Te){for(var ft=[],Zt=2;Zt<arguments.length;Zt++)ft[Zt-2]=arguments[Zt];switch(arguments.length){case 0:return[];case 1:return this.$mobx.spliceWithArray(U);case 2:return this.$mobx.spliceWithArray(U,Te)}return this.$mobx.spliceWithArray(U,Te,ft)},J.prototype.spliceWithArray=function(U,Te,ft){return this.$mobx.spliceWithArray(U,Te,ft)},J.prototype.push=function(){for(var U=[],Te=0;Te<arguments.length;Te++)U[Te]=arguments[Te];var ft=this.$mobx;return ft.spliceWithArray(ft.values.length,0,U),ft.values.length},J.prototype.pop=function(){return this.splice(Math.max(this.$mobx.values.length-1,0),1)[0]},J.prototype.shift=function(){return this.splice(0,1)[0]},J.prototype.unshift=function(){for(var U=[],Te=0;Te<arguments.length;Te++)U[Te]=arguments[Te];var ft=this.$mobx;return ft.spliceWithArray(0,0,U),ft.values.length},J.prototype.reverse=function(){var U=this.slice();return U.reverse.apply(U,arguments)},J.prototype.sort=function(U){var Te=this.slice();return Te.sort.apply(Te,arguments)},J.prototype.remove=function(U){var Te=this.$mobx.dehanceValues(this.$mobx.values).indexOf(U);return Te>-1&&(this.splice(Te,1),!0)},J.prototype.move=function(U,Te){function ft(xr){if(xr<0)throw new Error("[mobx.array] Index out of bounds: "+xr+" is negative");var hi=this.$mobx.values.length;if(xr>=hi)throw new Error("[mobx.array] Index out of bounds: "+xr+" is not smaller than "+hi)}if(ft.call(this,U),ft.call(this,Te),U!==Te){var rr,Zt=this.$mobx.values;rr=U<Te?g(Zt.slice(0,U),Zt.slice(U+1,Te+1),[Zt[U]],Zt.slice(Te+1)):g(Zt.slice(0,Te),[Zt[U]],Zt.slice(Te,U),Zt.slice(U+1)),this.replace(rr)}},J.prototype.get=function(U){var Te=this.$mobx;if(Te){if(U<Te.values.length)return Te.atom.reportObserved(),Te.dehanceValue(Te.values[U]);console.warn("[mobx.array] Attempt to read an array index ("+U+") that is out of bounds ("+Te.values.length+"). Please check length first. Out of bound indices will not be tracked by MobX")}},J.prototype.set=function(U,Te){var ft=this.$mobx,Zt=ft.values;if(U<Zt.length){Ut(ft.atom);var rr=Zt[U];if(Yi(ft)){var xr=Fa(ft,{type:"update",object:this,index:U,newValue:Te});if(!xr)return;Te=xr.newValue}(Te=ft.enhancer(Te,rr))!==rr&&(Zt[U]=Te,ft.notifyArrayChildUpdate(U,Te,rr))}else{if(U!==Zt.length)throw new Error("[mobx.array] Index out of bounds, "+U+" is larger than "+Zt.length);ft.spliceWithArray(U,0,[Te])}},J}(ra);dn(ec.prototype,function(){this.$mobx.atom.reportObserved();var F=this,J=0;return rn({next:function(){return J<F.length?{value:F[J++],done:!1}:{done:!0,value:void 0}}})}),Object.defineProperty(ec.prototype,"length",{enumerable:!1,configurable:!0,get:function(){return this.$mobx.getArrayLength()},set:function(F){this.$mobx.setArrayLength(F)}}),ce(ec.prototype,vt(),"Array"),["every","filter","forEach","indexOf","join","lastIndexOf","map","reduce","reduceRight","slice","some","toString","toLocaleString"].forEach(function(F){var J=Array.prototype[F];q("function"==typeof J,"Base function not defined on Array prototype: '"+F+"'"),ce(ec.prototype,F,function(){return J.apply(this.peek(),arguments)})}),function Ce(F,J){for(var U=0;U<J.length;U++)ce(F,J[U],F[J[U]])}(ec.prototype,["constructor","intercept","observe","clear","concat","get","replace","toJS","toJSON","peek","find","findIndex","splice","spliceWithArray","push","pop","set","shift","unshift","reverse","sort","remove","move","toString","toLocaleString"]);var uu=du(0);function du(F){return{enumerable:!1,configurable:!1,get:function(){return this.get(F)},set:function(J){this.set(F,J)}}}function nd(F){Object.defineProperty(ec.prototype,""+F,du(F))}function Uu(F){for(var J=iu;J<F;J++)nd(J);iu=F}Uu(1e3);var Yu=He("ObservableArrayAdministration",td);function wu(F){return ie(F)&&Yu(F.$mobx)}var Ld={},Io=function(){function F(J,U,Te){if(void 0===U&&(U=fi),void 0===Te&&(Te="ObservableMap@"+W()),this.enhancer=U,this.name=Te,this.$mobx=Ld,this._keys=new ec(void 0,xo,this.name+".keys()",!0),"function"!=typeof Map)throw new Error("mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js");this._data=new Map,this._hasMap=new Map,this.merge(J)}return F.prototype._has=function(J){return this._data.has(J)},F.prototype.has=function(J){var U=this;if(!Ar.trackingDerivation)return this._has(J);var Te=this._hasMap.get(J);if(!Te){var ft=Te=new ao(this._has(J),xo,this.name+"."+fu(J)+"?",!1);this._hasMap.set(J,ft),Ks(ft,function(){return U._hasMap.delete(J)})}return Te.get()},F.prototype.set=function(J,U){var Te=this._has(J);if(Yi(this)){var ft=Fa(this,{type:Te?"update":"add",object:this,newValue:U,name:J});if(!ft)return this;U=ft.newValue}return Te?this._updateValue(J,U):this._addValue(J,U),this},F.prototype.delete=function(J){var U=this;if(Yi(this)&&!(Te=Fa(this,{type:"delete",object:this,name:J})))return!1;if(this._has(J)){var ft=js(),Zt=Es(this),Te=Zt||ft?{type:"delete",object:this,oldValue:this._data.get(J).value,name:J}:null;return ft&&To(e({},Te,{name:this.name,key:J})),El(function(){U._keys.remove(J),U._updateHasMapEntry(J,!1),U._data.get(J).setNewValue(void 0),U._data.delete(J)}),Zt&&Sl(this,Te),ft&&hs(),!0}return!1},F.prototype._updateHasMapEntry=function(J,U){var Te=this._hasMap.get(J);Te&&Te.setNewValue(U)},F.prototype._updateValue=function(J,U){var Te=this._data.get(J);if((U=Te.prepareNewValue(U))!==Ar.UNCHANGED){var ft=js(),Zt=Es(this),rr=Zt||ft?{type:"update",object:this,oldValue:Te.value,name:J,newValue:U}:null;ft&&To(e({},rr,{name:this.name,key:J})),Te.setNewValue(U),Zt&&Sl(this,rr),ft&&hs()}},F.prototype._addValue=function(J,U){var Te=this;El(function(){var xr=new ao(U,Te.enhancer,Te.name+"."+fu(J),!1);Te._data.set(J,xr),U=xr.value,Te._updateHasMapEntry(J,!0),Te._keys.push(J)});var ft=js(),Zt=Es(this),rr=Zt||ft?{type:"add",object:this,name:J,newValue:U}:null;ft&&To(e({},rr,{name:this.name,key:J})),Zt&&Sl(this,rr),ft&&hs()},F.prototype.get=function(J){return this.has(J)?this.dehanceValue(this._data.get(J).get()):this.dehanceValue(void 0)},F.prototype.dehanceValue=function(J){return void 0!==this.dehancer?this.dehancer(J):J},F.prototype.keys=function(){return this._keys[Yt()]()},F.prototype.values=function(){var J=this,U=0;return rn({next:function(){return U<J._keys.length?{value:J.get(J._keys[U++]),done:!1}:{value:void 0,done:!0}}})},F.prototype.entries=function(){var J=this,U=0;return rn({next:function(){if(U<J._keys.length){var Te=J._keys[U++];return{value:[Te,J.get(Te)],done:!1}}return{done:!0}}})},F.prototype.forEach=function(J,U){var Te=this;this._keys.forEach(function(ft){return J.call(U,Te.get(ft),ft,Te)})},F.prototype.merge=function(J){var U=this;return Sr(J)&&(J=J.toJS()),El(function(){fe(J)?Object.keys(J).forEach(function(Te){return U.set(Te,J[Te])}):Array.isArray(J)?J.forEach(function(Te){var ft=p(Te,2);return U.set(ft[0],ft[1])}):Oe(J)?J.constructor!==Map?j("Cannot initialize from classes that inherit from Map: "+J.constructor.name):J.forEach(function(Te,ft){return U.set(ft,Te)}):null!=J&&j("Cannot initialize map from "+J)}),this},F.prototype.clear=function(){var J=this;El(function(){Vt(function(){J._keys.slice().forEach(function(U){return J.delete(U)})})})},F.prototype.replace=function(J){var U=this;return El(function(){for(var Te=function he(F){return Oe(F)||Sr(F)?F:Array.isArray(F)?new Map(F):fe(F)?new Map(Object.entries(F)):j("Cannot convert to map from '"+F+"'")}(J),ft=U._keys,Zt=Array.from(Te.keys()),rr=!1,xr=0;xr<ft.length;xr++){var hi=ft[xr];ft.length===Zt.length&&hi!==Zt[xr]&&(rr=!0),Te.has(hi)||(rr=!0,U.delete(hi))}Te.forEach(function(ns,zo){U._data.has(zo)||(rr=!0),U.set(zo,ns)}),rr&&U._keys.replace(Zt)}),this},Object.defineProperty(F.prototype,"size",{get:function(){return this._keys.length},enumerable:!0,configurable:!0}),F.prototype.toPOJO=function(){var J=this,U={};return this._keys.forEach(function(Te){return U["symbol"==typeof Te?Te:fu(Te)]=J.get(Te)}),U},F.prototype.toJS=function(){var J=this,U=new Map;return this._keys.forEach(function(Te){return U.set(Te,J.get(Te))}),U},F.prototype.toJSON=function(){return this.toPOJO()},F.prototype.toString=function(){var J=this;return this.name+"[{ "+this._keys.map(function(U){return fu(U)+": "+J.get(U)}).join(", ")+" }]"},F.prototype.observe=function(J,U){return qu(this,J)},F.prototype.intercept=function(J){return aa(this,J)},F}();function fu(F){return F&&F.toString?F.toString():new String(F).toString()}dn(Io.prototype,function(){return this.entries()}),Be(Io.prototype,vt(),"Map");var Sr=He("ObservableMap",Io),Z={},De=function(){function F(J,U,Te){if(void 0===U&&(U=fi),void 0===Te&&(Te="ObservableSet@"+W()),this.name=Te,this.$mobx=Z,this._data=new Set,this._atom=function Fn(F,J,U){void 0===J&&(J=se),void 0===U&&(U=se);var Te=new Ct(F);return function Fs(F,J,U){hl("onBecomeObserved",F,J,U)}(Te,J),Ks(Te,U),Te}(this.name),"function"!=typeof Set)throw new Error("mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js");this.enhancer=function(ft,Zt){return U(ft,Zt,Te)},J&&this.replace(J)}return F.prototype.dehanceValue=function(J){return void 0!==this.dehancer?this.dehancer(J):J},F.prototype.clear=function(){var J=this;El(function(){Vt(function(){J._data.forEach(function(U){J.delete(U)})})})},F.prototype.forEach=function(J,U){var Te=this;this._data.forEach(function(ft){J.call(U,ft,ft,Te)})},Object.defineProperty(F.prototype,"size",{get:function(){return this._atom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),F.prototype.add=function(J){var U=this;if(Ut(this._atom),Yi(this)&&!(Te=Fa(this,{type:"add",object:this,newValue:J})))return this;if(!this.has(J)){El(function(){U._data.add(U.enhancer(J,void 0)),U._atom.reportChanged()});var ft=js(),Zt=Es(this),Te=Zt||ft?{type:"add",object:this,newValue:J}:null;Zt&&Sl(this,Te)}return this},F.prototype.delete=function(J){var U=this;if(Yi(this)&&!(Te=Fa(this,{type:"delete",object:this,oldValue:J})))return!1;if(this.has(J)){var ft=js(),Zt=Es(this),Te=Zt||ft?{type:"delete",object:this,oldValue:J}:null;return El(function(){U._atom.reportChanged(),U._data.delete(J)}),Zt&&Sl(this,Te),!0}return!1},F.prototype.has=function(J){return this._atom.reportObserved(),this._data.has(this.dehanceValue(J))},F.prototype.entries=function(){var J=0,U=We(this.keys()),Te=We(this.values());return rn({next:function(){var ft=J;return J+=1,ft<Te.length?{value:[U[ft],Te[ft]],done:!1}:{done:!0}}})},F.prototype.keys=function(){return this.values()},F.prototype.values=function(){this._atom.reportObserved();var Te,J=this,U=0;return void 0!==this._data.values?Te=We(this._data.values()):(Te=[],this._data.forEach(function(ft){return Te.push(ft)})),rn({next:function(){return U<Te.length?{value:J.dehanceValue(Te[U++]),done:!1}:{done:!0}}})},F.prototype.replace=function(J){var U=this;return ct(J)&&(J=J.toJS()),El(function(){Array.isArray(J)||Tt(J)?(U.clear(),J.forEach(function(Te){return U.add(Te)})):null!=J&&j("Cannot initialize set from "+J)}),this},F.prototype.observe=function(J,U){return qu(this,J)},F.prototype.intercept=function(J){return aa(this,J)},F.prototype.toJS=function(){return new Set(this)},F.prototype.toString=function(){return this.name+"[ "+We(this.keys()).join(", ")+" ]"},F}();dn(De.prototype,function(){return this.values()}),Be(De.prototype,vt(),"Set");var ct=He("ObservableSet",De),It=function(){function F(J,U,Te){this.target=J,this.name=U,this.defaultEnhancer=Te,this.values={}}return F.prototype.read=function(J,U){if(this.target===J||(this.illegalAccess(J,U),this.values[U]))return this.values[U].get()},F.prototype.write=function(J,U,Te){var ft=this.target;ft!==J&&this.illegalAccess(J,U);var Zt=this.values[U];if(Zt instanceof Eo)Zt.set(Te);else{if(Yi(this)){if(!(rr=Fa(this,{type:"update",object:ft,name:U,newValue:Te})))return;Te=rr.newValue}if((Te=Zt.prepareNewValue(Te))!==Ar.UNCHANGED){var xr=Es(this),hi=js(),rr=xr||hi?{type:"update",object:ft,oldValue:Zt.value,name:U,newValue:Te}:null;hi&&To(e({},rr,{name:this.name,key:U})),Zt.setNewValue(Te),xr&&Sl(this,rr),hi&&hs()}}},F.prototype.remove=function(J){if(this.values[J]){var U=this.target;if(Yi(this)&&!(Te=Fa(this,{object:U,name:J,type:"remove"})))return;try{Ys();var ft=Es(this),Zt=js(),rr=this.values[J].get();this.keys&&this.keys.remove(J),delete this.values[J],delete this.target[J];var Te=ft||Zt?{type:"remove",object:U,oldValue:rr,name:J}:null;Zt&&To(e({},Te,{name:this.name,key:J})),ft&&Sl(this,Te),Zt&&hs()}finally{ds()}}},F.prototype.illegalAccess=function(J,U){console.warn("Property '"+U+"' of '"+J+"' was accessed through the prototype chain. Use 'decorate' instead to declare the prop or access it statically through it's owner")},F.prototype.observe=function(J,U){return qu(this,J)},F.prototype.intercept=function(J){return aa(this,J)},F.prototype.getKeys=function(){var J=this;return void 0===this.keys&&(this.keys=new ec(Object.keys(this.values).filter(function(U){return J.values[U]instanceof ao}),xo,"keys("+this.name+")",!0)),this.keys.slice()},F}();function Ht(F,J,U){void 0===J&&(J=""),void 0===U&&(U=fi);var Te=F.$mobx;return Te||(fe(F)||(J=(F.constructor.name||"ObservableObject")+"@"+W()),J||(J="ObservableObject@"+W()),Be(F,"$mobx",Te=new It(F,J,U)),Te)}var Tr=Object.create(null),ai=Object.create(null);function Ci(F){return F.$mobx||(_r(F),F.$mobx)}var Yn=He("ObservableObjectAdministration",It);function Rr(F){return!!ie(F)&&(_r(F),Yn(F.$mobx))}function br(F,J){if("object"==typeof F&&null!==F){if(wu(F))return void 0!==J&&j(!1),F.$mobx.atom;if(ct(F))return F.$mobx;if(Sr(F)){var U=F;return void 0===J?br(U._keys):((Te=U._data.get(J)||U._hasMap.get(J))||j(!1),Te)}var Te;if(_r(F),Rr(F))return J?((Te=F.$mobx.values[J])||j(!1),Te):j(!1);if(Gt(F)||mo(F)||Is(F))return F}else if("function"==typeof F&&Is(F.$mobx))return F.$mobx;return j(!1)}function fo(F,J){return F||j("Expecting some object"),void 0!==J?fo(br(F,J)):Gt(F)||mo(F)||Is(F)||Sr(F)||ct(F)?F:(_r(F),F.$mobx?F.$mobx:void j(!1))}var ls=Object.prototype.toString;function _l(F,J,U){return void 0===U&&(U=-1),Us(F,J,U)}function Us(F,J,U,Te,ft){if(F===J)return 0!==F||1/F==1/J;if(null==F||null==J)return!1;if(F!=F)return J!=J;var Zt=typeof F;if("function"!==Zt&&"object"!==Zt&&"object"!=typeof J)return!1;F=zc(F),J=zc(J);var rr=ls.call(F);if(rr!==ls.call(J))return!1;switch(rr){case"[object RegExp]":case"[object String]":return""+F==""+J;case"[object Number]":return+F!=+F?+J!=+J:0==+F?1/+F==1/J:+F==+J;case"[object Date]":case"[object Boolean]":return+F==+J;case"[object Symbol]":return"undefined"!=typeof Symbol&&Symbol.valueOf.call(F)===Symbol.valueOf.call(J)}var xr="[object Array]"===rr;if(!xr){if("object"!=typeof F||"object"!=typeof J)return!1;var hi=F.constructor,ns=J.constructor;if(hi!==ns&&!("function"==typeof hi&&hi instanceof hi&&"function"==typeof ns&&ns instanceof ns)&&"constructor"in F&&"constructor"in J)return!1}if(0===U)return!1;U<0&&(U=-1),ft=ft||[];for(var zo=(Te=Te||[]).length;zo--;)if(Te[zo]===F)return ft[zo]===J;if(Te.push(F),ft.push(J),xr){if((zo=F.length)!==J.length)return!1;for(;zo--;)if(!Us(F[zo],J[zo],U-1,Te,ft))return!1}else{var As=Object.keys(F),ml=void 0;if(zo=As.length,Object.keys(J).length!==zo)return!1;for(;zo--;)if(!Ic(J,ml=As[zo])||!Us(F[ml],J[ml],U-1,Te,ft))return!1}return Te.pop(),ft.pop(),!0}function zc(F){return wu(F)?F.peek():Oe(F)||Sr(F)||Tt(F)||ct(F)?We(F.entries()):F}function Ic(F,J){return Object.prototype.hasOwnProperty.call(F,J)}"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:function Oo(F){return Ar.spyListeners.push(F),H(function(){Ar.spyListeners=Ar.spyListeners.filter(function(J){return J!==F})})},extras:{getDebugName:function $s(F,J){return(void 0!==J?br(F,J):Rr(F)||Sr(F)||ct(F)?fo(F):br(F)).name}},$mobx:"$mobx"});const md=function _d(F,J,U){switch(U.length){case 0:return F.call(J);case 1:return F.call(J,U[0]);case 2:return F.call(J,U[0],U[1]);case 3:return F.call(J,U[0],U[1],U[2])}return F.apply(J,U)},La=function Hc(F){return F};var kd=Math.max;const Mo=function Oc(F,J,U){return J=kd(void 0===J?F.length-1:J,0),function(){for(var Te=arguments,ft=-1,Zt=kd(Te.length-J,0),rr=Array(Zt);++ft<Zt;)rr[ft]=Te[J+ft];ft=-1;for(var xr=Array(J+1);++ft<J;)xr[ft]=Te[ft];return xr[J]=U(rr),md(F,this,xr)}},Ta=function wo(F){return function(){return F}};var Tl=i(99567),ou=Tl.Z?function(F,J){return(0,Tl.Z)(F,"toString",{configurable:!0,enumerable:!1,value:Ta(J),writable:!0})}:La,pa=Date.now,Ae=function rd(F){var J=0,U=0;return function(){var Te=pa(),ft=16-(Te-U);if(U=Te,ft>0){if(++J>=800)return arguments[0]}else J=0;return F.apply(void 0,arguments)}}(ou);const ge=Ae,Ot=function ht(F,J){return ge(Mo(F,J,La),F+"")};var sn=i(15131),Un=i(2951),gr=i(66224);const Lo=function gi(F,J,U){(void 0!==U&&!(0,gr.Z)(F[J],U)||void 0===U&&!(J in F))&&(0,Un.Z)(F,J,U)};var ha=function Ca(F){return function(J,U,Te){for(var ft=-1,Zt=Object(J),rr=Te(J),xr=rr.length;xr--;){var hi=rr[F?xr:++ft];if(!1===U(Zt[hi],hi,Zt))break}return J}}();const Ma=ha;var Nu=i(27672),cc=i(1044),ka=i(36889),rl=i(42542),vc=i(40591),yc=i(34654),ju=i(18402),Ul=i(6539);var Fc=i(25014),cu=i(58209),Oa=i(4214),ll=i(98286),Ll=i(11595),id=Function.prototype.toString,Al=Object.prototype.hasOwnProperty,kl=id.call(Object);const ul=function Gu(F){if(!(0,Ul.Z)(F)||"[object Object]"!=(0,ll.Z)(F))return!1;var J=(0,Ll.Z)(F);if(null===J)return!0;var U=Al.call(J,"constructor")&&J.constructor;return"function"==typeof U&&U instanceof U&&id.call(U)==kl};var Cu=i(14803);const Ec=function cn(F,J){if(("constructor"!==J||"function"!=typeof F[J])&&"__proto__"!=J)return F[J]};var Iu=i(57640),qa=i(34673);const vd=function Bc(F,J,U,Te,ft,Zt,rr){var xr=Ec(F,U),hi=Ec(J,U),ns=rr.get(hi);if(ns)Lo(F,U,ns);else{var zo=Zt?Zt(xr,hi,U+"",F,J,rr):void 0,As=void 0===zo;if(As){var ml=(0,yc.Z)(hi),au=!ml&&(0,Fc.Z)(hi),Xl=!ml&&!au&&(0,Cu.Z)(hi);zo=hi,ml||au||Xl?(0,yc.Z)(xr)?zo=xr:function tc(F){return(0,Ul.Z)(F)&&(0,ju.Z)(F)}(xr)?zo=(0,ka.Z)(xr):au?(As=!1,zo=(0,Nu.Z)(hi,!0)):Xl?(As=!1,zo=(0,cc.Z)(hi,!0)):zo=[]:ul(hi)||(0,vc.Z)(hi)?(zo=xr,(0,vc.Z)(xr)?zo=function cl(F){return(0,Iu.Z)(F,(0,qa.Z)(F))}(xr):(!(0,Oa.Z)(xr)||(0,cu.Z)(xr))&&(zo=(0,rl.Z)(hi))):As=!1}As&&(rr.set(hi,zo),ft(zo,hi,Te,Zt,rr),rr.delete(hi)),Lo(F,U,zo)}},yd=function dc(F,J,U,Te,ft){F!==J&&Ma(J,function(Zt,rr){if(ft||(ft=new sn.Z),(0,Oa.Z)(Zt))vd(F,J,rr,U,dc,Te,ft);else{var xr=Te?Te(Ec(F,rr),Zt,rr+"",F,J,ft):void 0;void 0===xr&&(xr=Zt),Lo(F,rr,xr)}},qa.Z)},vf=function $p(F,J,U,Te,ft,Zt){return(0,Oa.Z)(F)&&(0,Oa.Z)(J)&&(Zt.set(J,F),yd(F,J,void 0,$p,Zt),Zt.delete(J)),F};var ap=i(28078);const fc=function Vu(F,J,U){if(!(0,Oa.Z)(U))return!1;var Te=typeof J;return!!("number"==Te?(0,ju.Z)(U)&&(0,ap.Z)(J,U.length):"string"==Te&&J in U)&&(0,gr.Z)(U[J],F)};var yp=function Wd(F){return Ot(function(J,U){var Te=-1,ft=U.length,Zt=ft>1?U[ft-1]:void 0,rr=ft>2?U[2]:void 0;for(Zt=F.length>3&&"function"==typeof Zt?(ft--,Zt):void 0,rr&&fc(U[0],U[1],rr)&&(Zt=ft<3?void 0:Zt,ft=1),J=Object(J);++Te<ft;){var xr=U[Te];xr&&F(J,xr,Te,Zt)}return J})}(function(F,J,U,Te){yd(F,J,U,Te)});const Lc=yp;var Fu=Ot(function(F){return F.push(void 0,vf),md(Lc,void 0,F)});const od=Fu,Wc=function Aa(F){return"symbol"==typeof F||(0,Ul.Z)(F)&&"[object Symbol]"==(0,ll.Z)(F)};var sd=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,lp=/^\w*$/;const vo=function $d(F,J){if((0,yc.Z)(F))return!1;var U=typeof F;return!("number"!=U&&"symbol"!=U&&"boolean"!=U&&null!=F&&!Wc(F))||lp.test(F)||!sd.test(F)||null!=J&&F in Object(J)};var pu=i(94013);function Ac(F,J){if("function"!=typeof F||null!=J&&"function"!=typeof J)throw new TypeError("Expected a function");var U=function(){var Te=arguments,ft=J?J.apply(this,Te):Te[0],Zt=U.cache;if(Zt.has(ft))return Zt.get(ft);var rr=F.apply(this,Te);return U.cache=Zt.set(ft,rr)||Zt,rr};return U.cache=new(Ac.Cache||pu.Z),U}Ac.Cache=pu.Z;const ga=Ac;var rc=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ql=/\\(\\)?/g,Sc=function Lu(F){var J=ga(F,function(Te){return 500===U.size&&U.clear(),Te}),U=J.cache;return J}(function(F){var J=[];return 46===F.charCodeAt(0)&&J.push(""),F.replace(rc,function(U,Te,ft,Zt){J.push(ft?Zt.replace(Ql,"$1"):Te||U)}),J});const Tc=Sc;var Zu=i(35770);const Uc=function hu(F,J){for(var U=-1,Te=null==F?0:F.length,ft=Array(Te);++U<Te;)ft[U]=J(F[U],U,F);return ft};var Jd=Zu.Z?Zu.Z.prototype:void 0,Jc=Jd?Jd.toString:void 0;const Yc=function Nl(F){if("string"==typeof F)return F;if((0,yc.Z)(F))return Uc(F,Nl)+"";if(Wc(F))return Jc?Jc.call(F):"";var J=F+"";return"0"==J&&1/F==-1/0?"-0":J},h=function ic(F){return null==F?"":Yc(F)},P=function E(F,J){return(0,yc.Z)(F)?F:vo(F,J)?[F]:Tc(h(F))},de=function X(F){if("string"==typeof F||Wc(F))return F;var J=F+"";return"0"==J&&1/F==-1/0?"-0":J},Ye=function ve(F,J){for(var U=0,Te=(J=P(J,F)).length;null!=F&&U<Te;)F=F[de(J[U++])];return U&&U==Te?F:void 0},nt=function xe(F,J,U){var Te=null==F?void 0:Ye(F,J);return void 0===Te?U:Te};var St=i(65252);const fn=function Mt(F){var J=null==F?0:F.length;return J?F[J-1]:void 0},$r=function fr(F,J){return J.length<2?F:Ye(F,function jn(F,J,U){var Te=-1,ft=F.length;J<0&&(J=-J>ft?0:ft+J),(U=U>ft?ft:U)<0&&(U+=ft),ft=J>U?0:U-J>>>0,J>>>=0;for(var Zt=Array(ft);++Te<ft;)Zt[Te]=F[Te+J];return Zt}(J,0,-1))},is=function Ui(F,J){return J=P(J,F),null==(F=$r(F,J))||delete F[de(fn(J))]},Vs=function yo(F){return ul(F)?void 0:F};var qs=i(57052),el=Zu.Z?Zu.Z.isConcatSpreadable:void 0;const Ga=function $a(F){return(0,yc.Z)(F)||(0,vc.Z)(F)||!!(el&&F&&F[el])},Gl=function wa(F,J,U,Te,ft){var Zt=-1,rr=F.length;for(U||(U=Ga),ft||(ft=[]);++Zt<rr;){var xr=F[Zt];J>0&&U(xr)?J>1?wa(xr,J-1,U,Te,ft):(0,qs.Z)(ft,xr):Te||(ft[ft.length]=xr)}return ft},Va=function _u(F){return null!=F&&F.length?Gl(F,1):[]},ku=function Mu(F){return ge(Mo(F,void 0,Va),F+"")};var xc=i(23359),K=ku(function(F,J){var U={};if(null==F)return U;var Te=!1;J=Uc(J,function(Zt){return Zt=P(Zt,F),Te||(Te=Zt.length>1),Zt}),(0,Iu.Z)(F,(0,xc.Z)(F),U),Te&&(U=(0,St.Z)(U,7,Vs));for(var ft=J.length;ft--;)is(U,J[ft]);return U});const be=K,Ai=function Dr(F,J){for(var U=-1,Te=null==F?0:F.length;++U<Te;)if(J(F[U],U,F))return!0;return!1};function jc(F){var J=-1,U=null==F?0:F.length;for(this.__data__=new pu.Z;++J<U;)this.add(F[J])}jc.prototype.add=jc.prototype.push=function Da(F){return this.__data__.set(F,"__lodash_hash_undefined__"),this},jc.prototype.has=function Dl(F){return this.__data__.has(F)};const yf=jc,d_=function Hd(F,J){return F.has(J)},Bd=function Xd(F,J,U,Te,ft,Zt){var rr=1&U,xr=F.length,hi=J.length;if(xr!=hi&&!(rr&&hi>xr))return!1;var ns=Zt.get(F),zo=Zt.get(J);if(ns&&zo)return ns==J&&zo==F;var As=-1,ml=!0,au=2&U?new yf:void 0;for(Zt.set(F,J),Zt.set(J,F);++As<xr;){var Xl=F[As],xu=J[As];if(Te)var Dd=rr?Te(xu,Xl,As,J,F,Zt):Te(Xl,xu,As,F,J,Zt);if(void 0!==Dd){if(Dd)continue;ml=!1;break}if(au){if(!Ai(J,function(lf,cd){if(!d_(au,cd)&&(Xl===lf||ft(Xl,lf,U,Te,Zt)))return au.push(cd)})){ml=!1;break}}else if(Xl!==xu&&!ft(Xl,xu,U,Te,Zt)){ml=!1;break}}return Zt.delete(F),Zt.delete(J),ml};var lh=i(83345);const dl=function Hp(F){var J=-1,U=Array(F.size);return F.forEach(function(Te,ft){U[++J]=[ft,Te]}),U},wf=function Bh(F){var J=-1,U=Array(F.size);return F.forEach(function(Te){U[++J]=Te}),U};var ch=Zu.Z?Zu.Z.prototype:void 0,dh=ch?ch.valueOf:void 0;var bf=i(22018),Nf=Object.prototype.hasOwnProperty;var If=i(17507),jh="[object Arguments]",p_="[object Array]",ph="[object Object]",Gh=Object.prototype.hasOwnProperty;const em=function hh(F,J,U,Te,ft,Zt){var rr=(0,yc.Z)(F),xr=(0,yc.Z)(J),hi=rr?p_:(0,If.Z)(F),ns=xr?p_:(0,If.Z)(J),zo=(hi=hi==jh?ph:hi)==ph,As=(ns=ns==jh?ph:ns)==ph,ml=hi==ns;if(ml&&(0,Fc.Z)(F)){if(!(0,Fc.Z)(J))return!1;rr=!0,zo=!1}if(ml&&!zo)return Zt||(Zt=new sn.Z),rr||(0,Cu.Z)(F)?Bd(F,J,U,Te,ft,Zt):function f_(F,J,U,Te,ft,Zt,rr){switch(U){case"[object DataView]":if(F.byteLength!=J.byteLength||F.byteOffset!=J.byteOffset)return!1;F=F.buffer,J=J.buffer;case"[object ArrayBuffer]":return!(F.byteLength!=J.byteLength||!Zt(new lh.Z(F),new lh.Z(J)));case"[object Boolean]":case"[object Date]":case"[object Number]":return(0,gr.Z)(+F,+J);case"[object Error]":return F.name==J.name&&F.message==J.message;case"[object RegExp]":case"[object String]":return F==J+"";case"[object Map]":var xr=dl;case"[object Set]":if(xr||(xr=wf),F.size!=J.size&&!(1&Te))return!1;var ns=rr.get(F);if(ns)return ns==J;Te|=2,rr.set(F,J);var zo=Bd(xr(F),xr(J),Te,ft,Zt,rr);return rr.delete(F),zo;case"[object Symbol]":if(dh)return dh.call(F)==dh.call(J)}return!1}(F,J,hi,U,Te,ft,Zt);if(!(1&U)){var au=zo&&Gh.call(F,"__wrapped__"),Xl=As&&Gh.call(J,"__wrapped__");if(au||Xl){var xu=au?F.value():F,Dd=Xl?J.value():J;return Zt||(Zt=new sn.Z),ft(xu,Dd,U,Te,Zt)}}return!!ml&&(Zt||(Zt=new sn.Z),function Tf(F,J,U,Te,ft,Zt){var rr=1&U,xr=(0,bf.Z)(F),hi=xr.length;if(hi!=(0,bf.Z)(J).length&&!rr)return!1;for(var As=hi;As--;){var ml=xr[As];if(!(rr?ml in J:Nf.call(J,ml)))return!1}var au=Zt.get(F),Xl=Zt.get(J);if(au&&Xl)return au==J&&Xl==F;var xu=!0;Zt.set(F,J),Zt.set(J,F);for(var Dd=rr;++As<hi;){var lf=F[ml=xr[As]],cd=J[ml];if(Te)var s_=rr?Te(cd,lf,ml,J,F,Zt):Te(lf,cd,ml,F,J,Zt);if(!(void 0===s_?lf===cd||ft(lf,cd,U,Te,Zt):s_)){xu=!1;break}Dd||(Dd="constructor"==ml)}if(xu&&!Dd){var G_=F.constructor,uf=J.constructor;G_!=uf&&"constructor"in F&&"constructor"in J&&!("function"==typeof G_&&G_ instanceof G_&&"function"==typeof uf&&uf instanceof uf)&&(xu=!1)}return Zt.delete(F),Zt.delete(J),xu}(F,J,U,Te,ft,Zt))},Vh=function Du(F,J,U,Te,ft){return F===J||(null==F||null==J||!(0,Ul.Z)(F)&&!(0,Ul.Z)(J)?F!=F&&J!=J:em(F,J,U,Te,Du,ft))},Ep=function _h(F){return F==F&&!(0,Oa.Z)(F)};var Td=i(44409);const Cd=function zh(F,J){return function(U){return null!=U&&U[F]===J&&(void 0!==J||F in Object(U))}},Wh=function mu(F){var J=function __(F){for(var J=(0,Td.Z)(F),U=J.length;U--;){var Te=J[U],ft=F[Te];J[U]=[Te,ft,Ep(ft)]}return J}(F);return 1==J.length&&J[0][2]?Cd(J[0][0],J[0][1]):function(U){return U===F||function h_(F,J,U,Te){var ft=U.length,Zt=ft,rr=!Te;if(null==F)return!Zt;for(F=Object(F);ft--;){var xr=U[ft];if(rr&&xr[2]?xr[1]!==F[xr[0]]:!(xr[0]in F))return!1}for(;++ft<Zt;){var hi=(xr=U[ft])[0],ns=F[hi],zo=xr[1];if(rr&&xr[2]){if(void 0===ns&&!(hi in F))return!1}else{var As=new sn.Z;if(Te)var ml=Te(ns,zo,hi,F,J,As);if(!(void 0===ml?Vh(zo,ns,3,Te,As):ml))return!1}}return!0}(U,F,J)}},Jh=function bp(F,J){return null!=F&&J in Object(F)};var sc=i(19238);const Sp=function Qh(F,J){return null!=F&&function qd(F,J,U){for(var Te=-1,ft=(J=P(J,F)).length,Zt=!1;++Te<ft;){var rr=de(J[Te]);if(!(Zt=null!=F&&U(F,rr)))break;F=F[rr]}return Zt||++Te!=ft?Zt:!!(ft=null==F?0:F.length)&&(0,sc.Z)(ft)&&(0,ap.Z)(rr,ft)&&((0,yc.Z)(F)||(0,vc.Z)(F))}(F,J,Jh)},vh=function Kh(F){return vo(F)?function gh(F){return function(J){return null==J?void 0:J[F]}}(de(F)):function Xh(F){return function(J){return Ye(J,F)}}(F)},Wf=function qh(F){return"function"==typeof F?F:null==F?La:"object"==typeof F?(0,yc.Z)(F)?function mh(F,J){return vo(F)&&Ep(J)?Cd(de(F),J):function(U){var Te=nt(U,F);return void 0===Te&&Te===J?Sp(U,F):Vh(J,Te,3)}}(F[0],F[1]):Wh(F):vh(F)};var bh=function Cf(F,J){return function(U,Te){if(null==U)return U;if(!(0,ju.Z)(U))return F(U,Te);for(var ft=U.length,Zt=J?ft:-1,rr=Object(U);(J?Zt--:++Zt<ft)&&!1!==Te(rr[Zt],Zt,rr););return U}}(function yh(F,J){return F&&Ma(F,J,Td.Z)});const da=bh,$u=function wc(F,J){var U;return da(F,function(Te,ft,Zt){return!(U=J(Te,ft,Zt))}),!!U},Hu=function jp(F,J){for(var U=-1,Te=null==F?0:F.length;++U<Te;)if(!J(F[U],U,F))return!1;return!0},Lf=function Sh(F,J){var U=!0;return da(F,function(Te,ft,Zt){return U=!!J(Te,ft,Zt)}),U},tf=function Jf(F){return F&&F.length?F[0]:void 0},Th=function k_(F){for(var J=-1,U=null==F?0:F.length,Te=0,ft=[];++J<U;){var Zt=F[J];Zt&&(ft[Te++]=Zt)}return ft},dp=function Md(F,J,U,Te){for(var ft=F.length,Zt=U+(Te?1:-1);Te?Zt--:++Zt<ft;)if(J(F[Zt],Zt,F))return Zt;return-1};var Bu=/\s/;var kf=/^\s+/;const e_=function Gp(F){return F&&F.slice(0,function jl(F){for(var J=F.length;J--&&Bu.test(F.charAt(J)););return J}(F)+1).replace(kf,"")};var rf=/^[-+]0x[0-9a-f]+$/i,Ch=/^0b[01]+$/i,t_=/^0o[0-7]+$/i,ud=parseInt;const fp=function Mh(F){if("number"==typeof F)return F;if(Wc(F))return NaN;if((0,Oa.Z)(F)){var J="function"==typeof F.valueOf?F.valueOf():F;F=(0,Oa.Z)(J)?J+"":J}if("string"!=typeof F)return 0===F?F:+F;F=e_(F);var U=Ch.test(F);return U||t_.test(F)?ud(F.slice(2),U?2:8):rf.test(F)?NaN:+F},Od=function Op(F){var J=function Xf(F){return F?1/0===(F=fp(F))||-1/0===F?17976931348623157e292*(F<0?-1:1):F==F?F:0:0===F?F:0}(F),U=J%1;return J==J?U?J-U:J:0};var Vp=Math.max,r_=function cp(F){return function(J,U,Te){var ft=Object(J);if(!(0,ju.Z)(J)){var Zt=Wf(U);J=(0,Td.Z)(J),U=function(xr){return Zt(ft[xr],xr,ft)}}var rr=F(J,U,Te);return rr>-1?ft[Zt?J[rr]:rr]:void 0}}(function Kf(F,J,U){var Te=null==F?0:F.length;if(!Te)return-1;var ft=null==U?0:Od(U);return ft<0&&(ft=Vp(Te+ft,0)),dp(F,Wf(J),ft)});const Ap=r_,qf=function sf(F){return"string"==typeof F||!(0,yc.Z)(F)&&(0,Ul.Z)(F)&&"[object String]"==(0,ll.Z)(F)};var zp=i(40309);const ep=function(){return zp.Z.Date.now()};var y_=Math.max,nm=Math.min;const b_=function $_(F,J,U){var Te=!0,ft=!0;if("function"!=typeof F)throw new TypeError("Expected a function");return(0,Oa.Z)(U)&&(Te="leading"in U?!!U.leading:Te,ft="trailing"in U?!!U.trailing:ft),function Ah(F,J,U){var Te,ft,Zt,rr,xr,hi,ns=0,zo=!1,As=!1,ml=!0;if("function"!=typeof F)throw new TypeError("Expected a function");function au(dd){var _p=Te,Wu=ft;return Te=ft=void 0,ns=dd,rr=F.apply(Wu,_p)}function Xl(dd){return ns=dd,xr=setTimeout(lf,J),zo?au(dd):rr}function Dd(dd){var _p=dd-hi;return void 0===hi||_p>=J||_p<0||As&&dd-ns>=Zt}function lf(){var dd=ep();if(Dd(dd))return cd(dd);xr=setTimeout(lf,function xu(dd){var hc=J-(dd-hi);return As?nm(hc,Zt-(dd-ns)):hc}(dd))}function cd(dd){return xr=void 0,ml&&Te?au(dd):(Te=ft=void 0,rr)}function uf(){var dd=ep(),_p=Dd(dd);if(Te=arguments,ft=this,hi=dd,_p){if(void 0===xr)return Xl(hi);if(As)return clearTimeout(xr),xr=setTimeout(lf,J),au(hi)}return void 0===xr&&(xr=setTimeout(lf,J)),rr}return J=fp(J)||0,(0,Oa.Z)(U)&&(zo=!!U.leading,Zt=(As="maxWait"in U)?y_(fp(U.maxWait)||0,J):Zt,ml="trailing"in U?!!U.trailing:ml),uf.cancel=function s_(){void 0!==xr&&clearTimeout(xr),ns=0,Te=hi=ft=xr=void 0},uf.flush=function G_(){return void 0===xr?rr:cd(ep())},uf}(F,J,{leading:Te,maxWait:J,trailing:ft})},H_=function Mf(F){return F!=F},S_=function Jp(F){return null==F?[]:function Rp(F,J){return Uc(J,function(U){return F[U]})}(F,(0,Td.Z)(F))};var Ad=Math.max;const Sm=function B_(F,J,U,Te){F=(0,ju.Z)(F)?F:S_(F),U=U&&!Te?Od(U):0;var ft=F.length;return U<0&&(U=Ad(ft+U,0)),qf(F)?U<=ft&&F.indexOf(J,U)>-1:!!ft&&function xp(F,J,U){return J==J?function tp(F,J,U){for(var Te=U-1,ft=F.length;++Te<ft;)if(F[Te]===J)return Te;return-1}(F,J,U):dp(F,H_,U)}(F,J,U)>-1};var hp=i(15427);const Vc=function Dh(F,J,U,Te){if(!(0,Oa.Z)(F))return F;for(var ft=-1,Zt=(J=P(J,F)).length,rr=Zt-1,xr=F;null!=xr&&++ft<Zt;){var hi=de(J[ft]),ns=U;if("__proto__"===hi||"constructor"===hi||"prototype"===hi)return F;if(ft!=rr){var zo=xr[hi];void 0===(ns=Te?Te(zo,hi,xr):void 0)&&(ns=(0,Oa.Z)(zo)?zo:(0,ap.Z)(J[ft+1])?[]:{})}(0,hp.Z)(xr,hi,ns),xr=xr[hi]}return F},I=function xh(F,J){return function rm(F,J,U){for(var Te=-1,ft=J.length,Zt={};++Te<ft;){var rr=J[Te],xr=Ye(F,rr);U(xr,rr)&&Vc(Zt,P(rr,F),xr)}return Zt}(F,J,function(U,Te){return Sp(F,Te)})};var ne=ku(function(F,J){return null==F?{}:I(F,J)});const T=ne;function z(F,J){1&F&&(r.TgZ(0,"span"),r._uU(1,"loading..."),r.qZA())}const Me=function(F){return{$implicit:F}};function Ke(F,J){if(1&F&&(r.ynx(0),r.TgZ(1,"div"),r.Hsn(2),r.qZA(),r.BQk()),2&F){const U=r.oxw();r.xp6(1),r.Udp("height",U.getTotalHeight())}}const gn=function(){return{dontDetach:!0}},yr=["*"],Nr=["loadingTemplate"],vi=["treeNodeTemplate"],di=["treeNodeWrapperTemplate"],ts=["treeNodeFullTemplate"],Do=["viewport"],Ss=function(F,J,U,Te){return{loadingTemplate:F,treeNodeTemplate:J,treeNodeWrapperTemplate:U,treeNodeFullTemplate:Te}};function jo(F,J){if(1&F&&r._UZ(0,"tree-node-collection",4),2&F){const U=r.oxw();r.Q6J("nodes",U.treeModel.roots)("treeModel",U.treeModel)("templates",r.l5B(3,Ss,U.loadingTemplate,U.treeNodeTemplate,U.treeNodeWrapperTemplate,U.treeNodeFullTemplate))}}function ia(F,J){if(1&F&&r._UZ(0,"tree-node-drop-slot",5),2&F){const U=r.oxw();r.Q6J("dropIndex",0)("node",U.treeModel.virtualRoot)}}function y(F,J){if(1&F&&r._UZ(0,"tree-node-drop-slot",6),2&F){const U=r.oxw(3);r.Q6J("dropIndex",U.node.index)("node",U.node.parent)}}function D(F,J){if(1&F&&(r.TgZ(0,"div"),r.YNc(1,y,1,2,"tree-node-drop-slot",3),r._UZ(2,"tree-node-wrapper",4)(3,"tree-node-children",5)(4,"tree-node-drop-slot",6),r.qZA()),2&F){const U=r.oxw(2);r.Tol(U.node.getClass()),r.ekj("tree-node",!0)("tree-node-expanded",U.node.isExpanded&&U.node.hasChildren)("tree-node-collapsed",U.node.isCollapsed&&U.node.hasChildren)("tree-node-leaf",U.node.isLeaf)("tree-node-active",U.node.isActive)("tree-node-focused",U.node.isFocused),r.xp6(1),r.Q6J("ngIf",0===U.index),r.xp6(1),r.Q6J("node",U.node)("index",U.index)("templates",U.templates),r.xp6(1),r.Q6J("node",U.node)("templates",U.templates),r.xp6(1),r.Q6J("dropIndex",U.node.index+1)("node",U.node.parent)}}const Y=function(F,J,U,Te){return{$implicit:F,node:J,index:U,templates:Te}};function Ee(F,J){if(1&F&&(r.ynx(0),r.YNc(1,D,5,22,"div",1),r.GkF(2,2),r.BQk()),2&F){const U=r.oxw();r.xp6(1),r.Q6J("ngIf",!U.templates.treeNodeFullTemplate),r.xp6(1),r.Q6J("ngTemplateOutlet",U.templates.treeNodeFullTemplate)("ngTemplateOutletContext",r.l5B(3,Y,U.node,U.node,U.index,U.templates))}}function ze(F,J){if(1&F&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&F){const U=r.oxw();r.xp6(1),r.Oqu(U.node.displayField)}}const At=function(F,J,U){return{$implicit:F,node:J,index:U}};function tn(F,J){if(1&F){const U=r.EpF();r.TgZ(0,"span",3),r.NdJ("click",function(ft){return r.CHM(U),r.oxw(2).node.mouseAction("expanderClick",ft)}),r._UZ(1,"span",4),r.qZA()}if(2&F){const U=r.oxw(2);r.ekj("toggle-children-wrapper-expanded",U.node.isExpanded)("toggle-children-wrapper-collapsed",U.node.isCollapsed)}}function Tn(F,J){1&F&&r._UZ(0,"span",5)}function ar(F,J){if(1&F&&(r.ynx(0),r.YNc(1,tn,2,4,"span",1),r.YNc(2,Tn,1,0,"span",2),r.BQk()),2&F){const U=r.oxw();r.xp6(1),r.Q6J("ngIf",U.node.hasChildren),r.xp6(1),r.Q6J("ngIf",!U.node.hasChildren)}}function li(F,J){if(1&F&&r._UZ(0,"tree-node-collection",4),2&F){const U=r.oxw(3);r.Q6J("nodes",U.node.children)("templates",U.templates)("treeModel",U.node.treeModel)}}function Ho(F,J){if(1&F&&r._UZ(0,"tree-loading-component",5),2&F){const U=r.oxw(3);r.Udp("padding-left",U.node.getNodePadding()),r.Q6J("template",U.templates.loadingTemplate)("node",U.node)}}function Hs(F,J){if(1&F&&(r.TgZ(0,"div"),r.YNc(1,li,1,3,"tree-node-collection",2),r.YNc(2,Ho,1,4,"tree-loading-component",3),r.qZA()),2&F){const U=r.oxw(2);r.ekj("tree-children",!0)("tree-children-no-padding",U.node.options.levelPadding),r.xp6(1),r.Q6J("ngIf",U.node.children),r.xp6(1),r.Q6J("ngIf",!U.node.children)}}function po(F,J){if(1&F&&(r.ynx(0),r.YNc(1,Hs,3,6,"div",1),r.BQk()),2&F){const U=r.oxw();r.xp6(1),r.Q6J("treeAnimateOpen",U.node.isExpanded)("treeAnimateOpenSpeed",U.node.options.animateSpeed)("treeAnimateOpenAcceleration",U.node.options.animateAcceleration)("treeAnimateOpenEnabled",U.node.options.animateExpand)}}function fs(F,J){if(1&F&&r._UZ(0,"tree-node",2),2&F){const U=J.$implicit,Te=J.index,ft=r.oxw(2);r.Q6J("node",U)("index",Te)("templates",ft.templates)}}function oa(F,J){if(1&F&&(r.ynx(0),r.TgZ(1,"div"),r.YNc(2,fs,1,3,"tree-node",1),r.qZA(),r.BQk()),2&F){const U=r.oxw();r.xp6(1),r.Udp("margin-top",U.marginTop),r.xp6(1),r.Q6J("ngForOf",U.viewportNodes)("ngForTrackBy",U.trackNode)}}function Xs(F,J){if(1&F&&r._UZ(0,"tree-node-checkbox",4),2&F){const U=r.oxw(2);r.Q6J("node",U.node)}}function Qr(F,J){if(1&F){const U=r.EpF();r.TgZ(0,"div",2),r.YNc(1,Xs,1,1,"tree-node-checkbox",3),r._UZ(2,"tree-node-expander",4),r.TgZ(3,"div",5),r.NdJ("click",function(ft){return r.CHM(U),r.oxw().node.mouseAction("click",ft)})("dblclick",function(ft){return r.CHM(U),r.oxw().node.mouseAction("dblClick",ft)})("mouseover",function(ft){return r.CHM(U),r.oxw().node.mouseAction("mouseOver",ft)})("mouseout",function(ft){return r.CHM(U),r.oxw().node.mouseAction("mouseOut",ft)})("contextmenu",function(ft){return r.CHM(U),r.oxw().node.mouseAction("contextMenu",ft)})("treeDrop",function(ft){return r.CHM(U),r.oxw().node.onDrop(ft)})("treeDropDragOver",function(ft){return r.CHM(U),r.oxw().node.mouseAction("dragOver",ft)})("treeDropDragLeave",function(ft){return r.CHM(U),r.oxw().node.mouseAction("dragLeave",ft)})("treeDropDragEnter",function(ft){return r.CHM(U),r.oxw().node.mouseAction("dragEnter",ft)}),r._UZ(4,"tree-node-content",6),r.qZA()()}if(2&F){const U=r.oxw();r.Udp("padding-left",U.node.getNodePadding()),r.xp6(1),r.Q6J("ngIf",U.node.options.useCheckbox),r.xp6(1),r.Q6J("node",U.node),r.xp6(1),r.ekj("node-content-wrapper-active",U.node.isActive)("node-content-wrapper-focused",U.node.isFocused),r.Q6J("treeAllowDrop",U.node.allowDrop)("allowDragoverStyling",U.node.allowDragoverStyling())("treeDrag",U.node)("treeDragEnabled",U.node.allowDrag()),r.xp6(1),r.Q6J("node",U.node)("index",U.index)("template",U.templates.treeNodeTemplate)}}function Fr(F,J){if(1&F){const U=r.EpF();r.ynx(0),r.TgZ(1,"input",1),r.NdJ("click",function(ft){return r.CHM(U),r.oxw().node.mouseAction("checkboxClick",ft)}),r.qZA(),r.BQk()}if(2&F){const U=r.oxw();r.xp6(1),r.Q6J("checked",U.node.isSelected)("indeterminate",U.node.isPartiallySelected)}}let Zr=(()=>{class F{constructor(U,Te){this.templateRef=U,this.viewContainer=Te,this.templateBindings={}}ngOnInit(){this.view=this.viewContainer.createEmbeddedView(this.templateRef),this.dispose&&this.dispose(),this.shouldDetach()&&this.view.detach(),this.autoDetect(this.view)}shouldDetach(){return this.treeMobxAutorun&&this.treeMobxAutorun.detach}autoDetect(U){this.dispose=ii(()=>U.detectChanges())}ngOnDestroy(){this.dispose&&this.dispose()}}return F.\u0275fac=function(U){return new(U||F)(r.Y36(r.Rgc),r.Y36(r.s_b))},F.\u0275dir=r.lG2({type:F,selectors:[["","treeMobxAutorun",""]],inputs:{treeMobxAutorun:"treeMobxAutorun"}}),F})();const Of={TOGGLE_ACTIVE:(F,J,U)=>J&&J.toggleActivated(),TOGGLE_ACTIVE_MULTI:(F,J,U)=>J&&J.toggleActivated(!0),TOGGLE_SELECTED:(F,J,U)=>J&&J.toggleSelected(),ACTIVATE:(F,J,U)=>J.setIsActive(!0),DEACTIVATE:(F,J,U)=>J.setIsActive(!1),SELECT:(F,J,U)=>J.setIsSelected(!0),DESELECT:(F,J,U)=>J.setIsSelected(!1),FOCUS:(F,J,U)=>J.focus(),TOGGLE_EXPANDED:(F,J,U)=>J.hasChildren&&J.toggleExpanded(),EXPAND:(F,J,U)=>J.expand(),COLLAPSE:(F,J,U)=>J.collapse(),DRILL_DOWN:(F,J,U)=>F.focusDrillDown(),DRILL_UP:(F,J,U)=>F.focusDrillUp(),NEXT_NODE:(F,J,U)=>F.focusNextNode(),PREVIOUS_NODE:(F,J,U)=>F.focusPreviousNode(),MOVE_NODE:(F,J,U,{from:Te,to:ft})=>{U.ctrlKey?F.copyNode(Te,ft):F.moveNode(Te,ft)}},Xm={mouse:{click:Of.TOGGLE_ACTIVE,dblClick:null,contextMenu:null,expanderClick:Of.TOGGLE_EXPANDED,checkboxClick:Of.TOGGLE_SELECTED,drop:Of.MOVE_NODE},keys:{39:Of.DRILL_DOWN,37:Of.DRILL_UP,40:Of.NEXT_NODE,38:Of.PREVIOUS_NODE,32:Of.TOGGLE_ACTIVE,13:Of.TOGGLE_ACTIVE}};class Tg{constructor(J={}){this.options=J,this.actionMapping=od({},this.options.actionMapping,Xm),J.rtl&&(this.actionMapping.keys[39]=nt(J,["actionMapping","keys",39])||Of.DRILL_UP,this.actionMapping.keys[37]=nt(J,["actionMapping","keys",37])||Of.DRILL_DOWN)}get hasChildrenField(){return this.options.hasChildrenField||"hasChildren"}get childrenField(){return this.options.childrenField||"children"}get displayField(){return this.options.displayField||"name"}get idField(){return this.options.idField||"id"}get isExpandedField(){return this.options.isExpandedField||"isExpanded"}get getChildren(){return this.options.getChildren}get levelPadding(){return this.options.levelPadding||0}get useVirtualScroll(){return this.options.useVirtualScroll}get animateExpand(){return this.options.animateExpand}get animateSpeed(){return this.options.animateSpeed||1}get animateAcceleration(){return this.options.animateAcceleration||1.2}get scrollOnActivate(){return void 0===this.options.scrollOnActivate||this.options.scrollOnActivate}get rtl(){return!!this.options.rtl}get rootId(){return this.options.rootId}get useCheckbox(){return this.options.useCheckbox}get useTriState(){return void 0===this.options.useTriState||this.options.useTriState}get scrollContainer(){return this.options.scrollContainer}get allowDragoverStyling(){return void 0===this.options.allowDragoverStyling||this.options.allowDragoverStyling}getNodeClone(J){return this.options.getNodeClone?this.options.getNodeClone(J):be(Object.assign({},J.data),["id"])}allowDrop(J,U,Te){return this.options.allowDrop instanceof Function?this.options.allowDrop(J,U,Te):void 0===this.options.allowDrop||this.options.allowDrop}allowDrag(J){return this.options.allowDrag instanceof Function?this.options.allowDrag(J):this.options.allowDrag}nodeClass(J){return this.options.nodeClass?this.options.nodeClass(J):""}nodeHeight(J){if(J.data.virtual)return 0;let U=this.options.nodeHeight||22;return"function"==typeof U&&(U=U(J)),U+(0===J.index?2:1)*this.dropSlotHeight}get dropSlotHeight(){return function wt(F){return"number"==typeof F||(0,Ul.Z)(F)&&"[object Number]"==(0,ll.Z)(F)}(this.options.dropSlotHeight)?this.options.dropSlotHeight:2}}const Qc={toggleExpanded:"toggleExpanded",activate:"activate",deactivate:"deactivate",nodeActivate:"nodeActivate",nodeDeactivate:"nodeDeactivate",select:"select",deselect:"deselect",focus:"focus",blur:"blur",initialized:"initialized",updateData:"updateData",moveNode:"moveNode",copyNode:"copyNode",event:"event",loadNodeChildren:"loadNodeChildren",changeFilter:"changeFilter",stateChange:"stateChange"};var Pc=function(F,J,U,Te){var rr,ft=arguments.length,Zt=ft<3?J:null===Te?Te=Object.getOwnPropertyDescriptor(J,U):Te;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Zt=Reflect.decorate(F,J,U,Te);else for(var xr=F.length-1;xr>=0;xr--)(rr=F[xr])&&(Zt=(ft<3?rr(Zt):ft>3?rr(J,U,Zt):rr(J,U))||Zt);return ft>3&&Zt&&Object.defineProperty(J,U,Zt),Zt},su=function(F,J){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(F,J)};let Cg=(()=>{class F{constructor(U,Te,ft,Zt){this.data=U,this.parent=Te,this.treeModel=ft,this.position=0,this.allowDrop=(rr,xr)=>this.options.allowDrop(rr,{parent:this,index:0},xr),this.allowDragoverStyling=()=>this.options.allowDragoverStyling,null==this.id&&(this.id=function am(){return Math.floor(1e13*Math.random())}()),this.index=Zt,this.getField("children")&&this._initChildren(),this.autoLoadChildren()}get isHidden(){return this.treeModel.isHidden(this)}get isExpanded(){return this.treeModel.isExpanded(this)}get isActive(){return this.treeModel.isActive(this)}get isFocused(){return this.treeModel.isNodeFocused(this)}get isSelected(){return this.isSelectable()?this.treeModel.isSelected(this):function Ts(F,J,U){var Te=(0,yc.Z)(F)?Ai:$u;return U&&fc(F,J,U)&&(J=void 0),Te(F,Wf(J))}(this.children,U=>U.isSelected)}get isAllSelected(){return this.isSelectable()?this.treeModel.isSelected(this):function Mp(F,J,U){var Te=(0,yc.Z)(F)?Hu:Lf;return U&&fc(F,J,U)&&(J=void 0),Te(F,Wf(J))}(this.children,U=>U.isAllSelected)}get isPartiallySelected(){return this.isSelected&&!this.isAllSelected}get level(){return this.parent?this.parent.level+1:0}get path(){return this.parent?[...this.parent.path,this.id]:[]}get elementRef(){throw"Element Ref is no longer supported since introducing virtual scroll\n\n      You may use a template to obtain a reference to the element"}get originalNode(){return this._originalNode}get hasChildren(){return!!(this.getField("hasChildren")||this.children&&this.children.length>0)}get isCollapsed(){return!this.isExpanded}get isLeaf(){return!this.hasChildren}get isRoot(){return this.parent.data.virtual}get realParent(){return this.isRoot?null:this.parent}get options(){return this.treeModel.options}fireEvent(U){this.treeModel.fireEvent(U)}get displayField(){return this.getField("display")}get id(){return this.getField("id")}set id(U){this.setField("id",U)}getField(U){return this.data[this.options[`${U}Field`]]}setField(U,Te){this.data[this.options[`${U}Field`]]=Te}_findAdjacentSibling(U,Te=!1){const ft=this._getParentsChildren(Te),Zt=ft.indexOf(this);return ft.length>Zt+U?ft[Zt+U]:null}findNextSibling(U=!1){return this._findAdjacentSibling(1,U)}findPreviousSibling(U=!1){return this._findAdjacentSibling(-1,U)}getVisibleChildren(){return this.visibleChildren}get visibleChildren(){return(this.children||[]).filter(U=>!U.isHidden)}getFirstChild(U=!1){return tf((U?this.visibleChildren:this.children)||[])}getLastChild(U=!1){return fn((U?this.visibleChildren:this.children)||[])}findNextNode(U=!0,Te=!1){return U&&this.isExpanded&&this.getFirstChild(Te)||this.findNextSibling(Te)||this.parent&&this.parent.findNextNode(!1,Te)}findPreviousNode(U=!1){let Te=this.findPreviousSibling(U);return Te?Te._getLastOpenDescendant(U):this.realParent}_getLastOpenDescendant(U=!1){const Te=this.getLastChild(U);return this.isCollapsed||!Te?this:Te._getLastOpenDescendant(U)}_getParentsChildren(U=!1){return this.parent&&(U?this.parent.getVisibleChildren():this.parent.children)||[]}getIndexInParent(U=!1){return this._getParentsChildren(U).indexOf(this)}isDescendantOf(U){return this===U||this.parent&&this.parent.isDescendantOf(U)}getNodePadding(){return this.options.levelPadding*(this.level-1)+"px"}getClass(){return[this.options.nodeClass(this),`tree-node-level-${this.level}`].join(" ")}onDrop(U){this.mouseAction("drop",U.event,{from:U.element,to:{parent:this,index:0,dropOnNode:!0}})}allowDrag(){return this.options.allowDrag(this)}loadNodeChildren(){return this.options.getChildren?Promise.resolve(this.options.getChildren(this)).then(U=>{U&&(this.setField("children",U),this._initChildren(),this.options.useTriState&&this.treeModel.isSelected(this)&&this.setIsSelected(!0),this.children.forEach(Te=>{Te.getField("isExpanded")&&Te.hasChildren&&Te.expand()}))}).then(()=>{this.fireEvent({eventName:Qc.loadNodeChildren,node:this})}):Promise.resolve()}expand(){return this.isExpanded||this.toggleExpanded(),this}collapse(){return this.isExpanded&&this.toggleExpanded(),this}doForAll(U){Promise.resolve(U(this)).then(()=>{this.children&&this.children.forEach(Te=>Te.doForAll(U))})}expandAll(){this.doForAll(U=>U.expand())}collapseAll(){this.doForAll(U=>U.collapse())}ensureVisible(){return this.realParent&&(this.realParent.expand(),this.realParent.ensureVisible()),this}toggleExpanded(){return this.setIsExpanded(!this.isExpanded),this}setIsExpanded(U){return this.hasChildren&&this.treeModel.setExpandedNode(this,U),this}autoLoadChildren(){this.handler=_s(()=>this.isExpanded,U=>{!this.children&&this.hasChildren&&U&&this.loadNodeChildren()},{fireImmediately:!0})}dispose(){this.children&&this.children.forEach(U=>U.dispose()),this.handler&&this.handler(),this.parent=null,this.children=null}setIsActive(U,Te=!1){return this.treeModel.setActiveNode(this,U,Te),U&&this.focus(this.options.scrollOnActivate),this}isSelectable(){return this.isLeaf||!this.children||!this.options.useTriState}setIsSelected(U){return this.isSelectable()?this.treeModel.setSelectedNode(this,U):this.visibleChildren.forEach(Te=>Te.setIsSelected(U)),this}toggleSelected(){return this.setIsSelected(!this.isSelected),this}toggleActivated(U=!1){return this.setIsActive(!this.isActive,U),this}setActiveAndVisible(U=!1){return this.setIsActive(!0,U).ensureVisible(),setTimeout(this.scrollIntoView.bind(this)),this}scrollIntoView(U=!1){this.treeModel.virtualScroll.scrollIntoView(this,U)}focus(U=!0){let Te=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(this),U&&this.scrollIntoView(),Te&&this.fireEvent({eventName:Qc.blur,node:Te}),this.fireEvent({eventName:Qc.focus,node:this}),this}blur(){let U=this.treeModel.getFocusedNode();return this.treeModel.setFocusedNode(null),U&&this.fireEvent({eventName:Qc.blur,node:this}),this}setIsHidden(U){this.treeModel.setIsHidden(this,U)}hide(){this.setIsHidden(!0)}show(){this.setIsHidden(!1)}mouseAction(U,Te,ft=null){this.treeModel.setFocus(!0);const rr=this.options.actionMapping.mouse[U];rr&&rr(this.treeModel,this,Te,ft)}getSelfHeight(){return this.options.nodeHeight(this)}_initChildren(){this.children=this.getField("children").map((U,Te)=>new F(U,this,this.treeModel,Te))}}return Pc([Se,su("design:type",Object),su("design:paramtypes",[])],F.prototype,"isHidden",null),Pc([Se,su("design:type",Object),su("design:paramtypes",[])],F.prototype,"isExpanded",null),Pc([Se,su("design:type",Object),su("design:paramtypes",[])],F.prototype,"isActive",null),Pc([Se,su("design:type",Object),su("design:paramtypes",[])],F.prototype,"isFocused",null),Pc([Se,su("design:type",Object),su("design:paramtypes",[])],F.prototype,"isSelected",null),Pc([Se,su("design:type",Object),su("design:paramtypes",[])],F.prototype,"isAllSelected",null),Pc([Se,su("design:type",Object),su("design:paramtypes",[])],F.prototype,"isPartiallySelected",null),Pc([Wn,su("design:type",Array)],F.prototype,"children",void 0),Pc([Wn,su("design:type",Number)],F.prototype,"index",void 0),Pc([Wn,su("design:type",Object)],F.prototype,"position",void 0),Pc([Wn,su("design:type",Number)],F.prototype,"height",void 0),Pc([Se,su("design:type",Number),su("design:paramtypes",[])],F.prototype,"level",null),Pc([Se,su("design:type",Array),su("design:paramtypes",[])],F.prototype,"path",null),Pc([Se,su("design:type",Object),su("design:paramtypes",[])],F.prototype,"visibleChildren",null),Pc([te,su("design:type",Function),su("design:paramtypes",[Object]),su("design:returntype",void 0)],F.prototype,"setIsSelected",null),Pc([te,su("design:type",Function),su("design:paramtypes",[]),su("design:returntype",void 0)],F.prototype,"_initChildren",null),F})();var Vl=function(F,J,U,Te){var rr,ft=arguments.length,Zt=ft<3?J:null===Te?Te=Object.getOwnPropertyDescriptor(J,U):Te;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Zt=Reflect.decorate(F,J,U,Te);else for(var xr=F.length-1;xr>=0;xr--)(rr=F[xr])&&(Zt=(ft<3?rr(Zt):ft>3?rr(J,U,Zt):rr(J,U))||Zt);return ft>3&&Zt&&Object.defineProperty(J,U,Zt),Zt},Ko=function(F,J){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(F,J)};let Il=(()=>{class F{constructor(){this.options=new Tg,this.eventNames=Object.keys(Qc),this.expandedNodeIds={},this.selectedLeafNodeIds={},this.activeNodeIds={},this.hiddenNodeIds={},this.focusedNodeId=null,this.firstUpdate=!0,this.subscriptions=[]}fireEvent(U){U.treeModel=this,this.events[U.eventName].emit(U),this.events.event.emit(U)}subscribe(U,Te){const ft=this.events[U].subscribe(Te);this.subscriptions.push(ft)}getFocusedNode(){return this.focusedNode}getActiveNode(){return this.activeNodes[0]}getActiveNodes(){return this.activeNodes}getVisibleRoots(){return this.virtualRoot.visibleChildren}getFirstRoot(U=!1){return tf(U?this.getVisibleRoots():this.roots)}getLastRoot(U=!1){return fn(U?this.getVisibleRoots():this.roots)}get isFocused(){return F.focusedTree===this}isNodeFocused(U){return this.focusedNode===U}isEmptyTree(){return this.roots&&0===this.roots.length}get focusedNode(){return this.focusedNodeId?this.getNodeById(this.focusedNodeId):null}get expandedNodes(){const U=Object.keys(this.expandedNodeIds).filter(Te=>this.expandedNodeIds[Te]).map(Te=>this.getNodeById(Te));return Th(U)}get activeNodes(){const U=Object.keys(this.activeNodeIds).filter(Te=>this.activeNodeIds[Te]).map(Te=>this.getNodeById(Te));return Th(U)}get hiddenNodes(){const U=Object.keys(this.hiddenNodeIds).filter(Te=>this.hiddenNodeIds[Te]).map(Te=>this.getNodeById(Te));return Th(U)}get selectedLeafNodes(){const U=Object.keys(this.selectedLeafNodeIds).filter(Te=>this.selectedLeafNodeIds[Te]).map(Te=>this.getNodeById(Te));return Th(U)}getNodeByPath(U,Te=null){if(!U)return null;if(Te=Te||this.virtualRoot,0===U.length)return Te;if(!Te.children)return null;const ft=U.shift(),Zt=Ap(Te.children,{id:ft});return Zt?this.getNodeByPath(U,Zt):null}getNodeById(U){const Te=U.toString();return this.getNodeBy(ft=>ft.id.toString()===Te)}getNodeBy(U,Te=null){if(!(Te=Te||this.virtualRoot).children)return null;const ft=Ap(Te.children,U);if(ft)return ft;for(let Zt of Te.children){const rr=this.getNodeBy(U,Zt);if(rr)return rr}}isExpanded(U){return this.expandedNodeIds[U.id]}isHidden(U){return this.hiddenNodeIds[U.id]}isActive(U){return this.activeNodeIds[U.id]}isSelected(U){return this.selectedLeafNodeIds[U.id]}ngOnDestroy(){this.dispose(),this.unsubscribeAll()}dispose(){this.virtualRoot&&this.virtualRoot.dispose()}unsubscribeAll(){this.subscriptions.forEach(U=>U.unsubscribe()),this.subscriptions=[]}setData({nodes:U,options:Te=null,events:ft=null}){Te&&(this.options=new Tg(Te)),ft&&(this.events=ft),U&&(this.nodes=U),this.update()}update(){let U={id:this.options.rootId,virtual:!0,[this.options.childrenField]:this.nodes};this.dispose(),this.virtualRoot=new Cg(U,null,this,0),this.roots=this.virtualRoot.children,this.firstUpdate?this.roots&&(this.firstUpdate=!1,this._calculateExpandedNodes()):this.fireEvent({eventName:Qc.updateData})}setFocusedNode(U){this.focusedNodeId=U?U.id:null}setFocus(U){F.focusedTree=U?this:null}doForAll(U){this.roots.forEach(Te=>Te.doForAll(U))}focusNextNode(){let U=this.getFocusedNode(),Te=U?U.findNextNode(!0,!0):this.getFirstRoot(!0);Te&&Te.focus()}focusPreviousNode(){let U=this.getFocusedNode(),Te=U?U.findPreviousNode(!0):this.getLastRoot(!0);Te&&Te.focus()}focusDrillDown(){let U=this.getFocusedNode();if(U&&U.isCollapsed&&U.hasChildren)U.toggleExpanded();else{let Te=U?U.getFirstChild(!0):this.getFirstRoot(!0);Te&&Te.focus()}}focusDrillUp(){let U=this.getFocusedNode();if(U)if(U.isExpanded)U.toggleExpanded();else{let Te=U.realParent;Te&&Te.focus()}}setActiveNode(U,Te,ft=!1){ft?this._setActiveNodeMulti(U,Te):this._setActiveNodeSingle(U,Te),Te?(U.focus(this.options.scrollOnActivate),this.fireEvent({eventName:Qc.activate,node:U}),this.fireEvent({eventName:Qc.nodeActivate,node:U})):(this.fireEvent({eventName:Qc.deactivate,node:U}),this.fireEvent({eventName:Qc.nodeDeactivate,node:U}))}setSelectedNode(U,Te){this.selectedLeafNodeIds=Object.assign({},this.selectedLeafNodeIds,{[U.id]:Te}),Te?(U.focus(),this.fireEvent({eventName:Qc.select,node:U})):this.fireEvent({eventName:Qc.deselect,node:U})}setExpandedNode(U,Te){this.expandedNodeIds=Object.assign({},this.expandedNodeIds,{[U.id]:Te}),this.fireEvent({eventName:Qc.toggleExpanded,node:U,isExpanded:Te})}expandAll(){this.roots.forEach(U=>U.expandAll())}collapseAll(){this.roots.forEach(U=>U.collapseAll())}setIsHidden(U,Te){this.hiddenNodeIds=Object.assign({},this.hiddenNodeIds,{[U.id]:Te})}setHiddenNodeIds(U){this.hiddenNodeIds=U.reduce((Te,ft)=>Object.assign(Te,{[ft]:!0}),{})}performKeyAction(U,Te){const ft=this.options.actionMapping.keys[Te.keyCode];return!!ft&&(Te.preventDefault(),ft(this,U,Te),!0)}filterNodes(U,Te=!0){let ft;if(!U)return this.clearFilter();if(qf(U))ft=rr=>-1!==rr.displayField.toLowerCase().indexOf(U.toLowerCase());else{if(!(0,cu.Z)(U))return console.error("Don't know what to do with filter",U),void console.error("Should be either a string or function");ft=U}const Zt={};this.roots.forEach(rr=>this._filterNode(Zt,rr,ft,Te)),this.hiddenNodeIds=Zt,this.fireEvent({eventName:Qc.changeFilter})}clearFilter(){this.hiddenNodeIds={},this.fireEvent({eventName:Qc.changeFilter})}moveNode(U,Te){const ft=U.getIndexInParent(),Zt=U.parent;if(!this.canMoveNode(U,Te,ft))return;const rr=Zt.getField("children");Te.parent.getField("children")||Te.parent.setField("children",[]);const xr=Te.parent.getField("children"),hi=rr.splice(ft,1)[0];let ns=Zt===Te.parent&&Te.index>ft?Te.index-1:Te.index;xr.splice(ns,0,hi),Zt.treeModel.update(),Te.parent.treeModel!==Zt.treeModel&&Te.parent.treeModel.update(),this.fireEvent({eventName:Qc.moveNode,node:hi,to:{parent:Te.parent.data,index:ns},from:{parent:Zt.data,index:ft}})}copyNode(U,Te){const ft=U.getIndexInParent();if(!this.canMoveNode(U,Te,ft))return;Te.parent.getField("children")||Te.parent.setField("children",[]);const Zt=Te.parent.getField("children"),rr=this.options.getNodeClone(U);Zt.splice(Te.index,0,rr),U.treeModel.update(),Te.parent.treeModel!==U.treeModel&&Te.parent.treeModel.update(),this.fireEvent({eventName:Qc.copyNode,node:rr,to:{parent:Te.parent.data,index:Te.index}})}getState(){return{expandedNodeIds:this.expandedNodeIds,selectedLeafNodeIds:this.selectedLeafNodeIds,activeNodeIds:this.activeNodeIds,hiddenNodeIds:this.hiddenNodeIds,focusedNodeId:this.focusedNodeId}}setState(U){!U||Object.assign(this,{expandedNodeIds:U.expandedNodeIds||{},selectedLeafNodeIds:U.selectedLeafNodeIds||{},activeNodeIds:U.activeNodeIds||{},hiddenNodeIds:U.hiddenNodeIds||{},focusedNodeId:U.focusedNodeId})}subscribeToState(U){ii(()=>U(this.getState()))}canMoveNode(U,Te,ft){return ft||U.getIndexInParent(),(U.parent!==Te.parent||ft!==Te.index)&&!Te.parent.isDescendantOf(U)}calculateExpandedNodes(){this._calculateExpandedNodes()}_filterNode(U,Te,ft,Zt){let rr=ft(Te);return Te.children&&Te.children.forEach(xr=>{this._filterNode(U,xr,ft,Zt)&&(rr=!0)}),rr||(U[Te.id]=!0),Zt&&rr&&Te.ensureVisible(),rr}_calculateExpandedNodes(U=null){(U=U||this.virtualRoot).data[this.options.isExpandedField]&&(this.expandedNodeIds=Object.assign({},this.expandedNodeIds,{[U.id]:!0})),U.children&&U.children.forEach(Te=>this._calculateExpandedNodes(Te))}_setActiveNodeSingle(U,Te){this.activeNodes.filter(ft=>ft!==U).forEach(ft=>{this.fireEvent({eventName:Qc.deactivate,node:ft}),this.fireEvent({eventName:Qc.nodeDeactivate,node:ft})}),this.activeNodeIds=Te?{[U.id]:!0}:{}}_setActiveNodeMulti(U,Te){this.activeNodeIds=Object.assign({},this.activeNodeIds,{[U.id]:Te})}}return F.\u0275fac=function(U){return new(U||F)},F.\u0275prov=r.Yz7({token:F,factory:F.\u0275fac}),F.focusedTree=null,F})();Vl([Wn,Ko("design:type",Array)],Il.prototype,"roots",void 0),Vl([Wn,Ko("design:type",Object)],Il.prototype,"expandedNodeIds",void 0),Vl([Wn,Ko("design:type",Object)],Il.prototype,"selectedLeafNodeIds",void 0),Vl([Wn,Ko("design:type",Object)],Il.prototype,"activeNodeIds",void 0),Vl([Wn,Ko("design:type",Object)],Il.prototype,"hiddenNodeIds",void 0),Vl([Wn,Ko("design:type",Object)],Il.prototype,"focusedNodeId",void 0),Vl([Wn,Ko("design:type",Cg)],Il.prototype,"virtualRoot",void 0),Vl([Se,Ko("design:type",Object),Ko("design:paramtypes",[])],Il.prototype,"focusedNode",null),Vl([Se,Ko("design:type",Object),Ko("design:paramtypes",[])],Il.prototype,"expandedNodes",null),Vl([Se,Ko("design:type",Object),Ko("design:paramtypes",[])],Il.prototype,"activeNodes",null),Vl([Se,Ko("design:type",Object),Ko("design:paramtypes",[])],Il.prototype,"hiddenNodes",null),Vl([Se,Ko("design:type",Object),Ko("design:paramtypes",[])],Il.prototype,"selectedLeafNodes",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object]),Ko("design:returntype",void 0)],Il.prototype,"setData",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[]),Ko("design:returntype",void 0)],Il.prototype,"update",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object]),Ko("design:returntype",void 0)],Il.prototype,"setFocusedNode",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object]),Ko("design:returntype",void 0)],Il.prototype,"setFocus",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object]),Ko("design:returntype",void 0)],Il.prototype,"doForAll",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[]),Ko("design:returntype",void 0)],Il.prototype,"focusNextNode",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[]),Ko("design:returntype",void 0)],Il.prototype,"focusPreviousNode",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[]),Ko("design:returntype",void 0)],Il.prototype,"focusDrillDown",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[]),Ko("design:returntype",void 0)],Il.prototype,"focusDrillUp",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object,Object,Object]),Ko("design:returntype",void 0)],Il.prototype,"setActiveNode",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object,Object]),Ko("design:returntype",void 0)],Il.prototype,"setSelectedNode",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object,Object]),Ko("design:returntype",void 0)],Il.prototype,"setExpandedNode",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[]),Ko("design:returntype",void 0)],Il.prototype,"expandAll",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[]),Ko("design:returntype",void 0)],Il.prototype,"collapseAll",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object,Object]),Ko("design:returntype",void 0)],Il.prototype,"setIsHidden",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object]),Ko("design:returntype",void 0)],Il.prototype,"setHiddenNodeIds",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object,Object]),Ko("design:returntype",void 0)],Il.prototype,"filterNodes",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[]),Ko("design:returntype",void 0)],Il.prototype,"clearFilter",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object,Object]),Ko("design:returntype",void 0)],Il.prototype,"moveNode",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object,Object]),Ko("design:returntype",void 0)],Il.prototype,"copyNode",null),Vl([te,Ko("design:type",Function),Ko("design:paramtypes",[Object]),Ko("design:returntype",void 0)],Il.prototype,"setState",null);let qm=(()=>{class F{constructor(){this._draggedElement=null}set(U){this._draggedElement=U}get(){return this._draggedElement}isDragging(){return!!this.get()}}return F.\u0275fac=function(U){return new(U||F)},F.\u0275prov=(0,r.Yz7)({factory:function(){return new F},token:F,providedIn:"root"}),F})();var af=function(F,J,U,Te){var rr,ft=arguments.length,Zt=ft<3?J:null===Te?Te=Object.getOwnPropertyDescriptor(J,U):Te;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Zt=Reflect.decorate(F,J,U,Te);else for(var xr=F.length-1;xr>=0;xr--)(rr=F[xr])&&(Zt=(ft<3?rr(Zt):ft>3?rr(J,U,Zt):rr(J,U))||Zt);return ft>3&&Zt&&Object.defineProperty(J,U,Zt),Zt},Xc=function(F,J){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(F,J)};let wp=(()=>{class F{constructor(U){this.treeModel=U,this.yBlocks=0,this.x=0,this.viewportHeight=null,this.viewport=null,U.virtualScroll=this,this._dispose=[ii(()=>this.fixScroll())]}get y(){return 150*this.yBlocks}get totalHeight(){return this.treeModel.virtualRoot?this.treeModel.virtualRoot.height:0}fireEvent(U){this.treeModel.fireEvent(U)}init(){const U=this.recalcPositions.bind(this);U(),this._dispose=[...this._dispose,_s(()=>this.treeModel.roots,U),_s(()=>this.treeModel.expandedNodeIds,U),_s(()=>this.treeModel.hiddenNodeIds,U)],this.treeModel.subscribe(Qc.loadNodeChildren,U)}isEnabled(){return this.treeModel.options.useVirtualScroll}_setYBlocks(U){this.yBlocks=U}recalcPositions(){this.treeModel.virtualRoot.height=this._getPositionAfter(this.treeModel.getVisibleRoots(),0)}_getPositionAfter(U,Te){let ft=Te;return U.forEach(Zt=>{Zt.position=ft,ft=this._getPositionAfterNode(Zt,ft)}),ft}_getPositionAfterNode(U,Te){let ft=U.getSelfHeight()+Te;return U.children&&U.isExpanded&&(ft=this._getPositionAfter(U.visibleChildren,ft)),U.height=ft-Te,ft}clear(){this._dispose.forEach(U=>U())}setViewport(U){Object.assign(this,{viewport:U,x:U.scrollLeft,yBlocks:Math.round(U.scrollTop/150),viewportHeight:U.getBoundingClientRect?U.getBoundingClientRect().height:0})}scrollIntoView(U,Te,ft=!0){if(U.options.scrollContainer){const Zt=U.options.scrollContainer,rr=Zt.getBoundingClientRect().height,xr=Zt.getBoundingClientRect().top,hi=this.viewport.getBoundingClientRect().top+U.position-xr;(Te||hi<Zt.scrollTop||hi+U.getSelfHeight()>Zt.scrollTop+rr)&&(Zt.scrollTop=ft?hi-rr/2:hi)}else(Te||U.position<this.y||U.position+U.getSelfHeight()>this.y+this.viewportHeight)&&this.viewport&&(this.viewport.scrollTop=ft?U.position-this.viewportHeight/2:U.position,this._setYBlocks(Math.floor(this.viewport.scrollTop/150)))}getViewportNodes(U){if(!U)return[];const Te=U.filter(ns=>!ns.isHidden);if(!this.isEnabled())return Te;if(!this.viewportHeight||!Te.length)return[];const ft=tg(Te,ns=>ns.position+500>this.y||ns.position+ns.height>this.y),Zt=tg(Te,ns=>ns.position-500>this.y+this.viewportHeight,ft),rr=[];if(Zt-ft>(1e3+this.viewportHeight)/Te[0].treeModel.options.options.nodeHeight)return[];for(let ns=ft;ns<=Zt;ns++)rr.push(Te[ns]);return rr}fixScroll(){const U=Math.max(0,this.totalHeight-this.viewportHeight);this.y<0&&this._setYBlocks(0),this.y>U&&this._setYBlocks(U/150)}}return F.\u0275fac=function(U){return new(U||F)(r.LFG(Il))},F.\u0275prov=r.Yz7({token:F,factory:F.\u0275fac}),F})();function tg(F,J,U=0){let Te=U,ft=F.length-1;for(;Te!==ft;){let Zt=Math.floor((Te+ft)/2);J(F[Zt])?ft=Zt:Te=Te===Zt?ft:Zt}return Te}af([Wn,Xc("design:type",Object)],wp.prototype,"yBlocks",void 0),af([Wn,Xc("design:type",Object)],wp.prototype,"x",void 0),af([Wn,Xc("design:type",Object)],wp.prototype,"viewportHeight",void 0),af([Se,Xc("design:type",Object),Xc("design:paramtypes",[])],wp.prototype,"y",null),af([Se,Xc("design:type",Object),Xc("design:paramtypes",[])],wp.prototype,"totalHeight",null),af([te,Xc("design:type",Function),Xc("design:paramtypes",[Object]),Xc("design:returntype",void 0)],wp.prototype,"_setYBlocks",null),af([te,Xc("design:type",Function),Xc("design:paramtypes",[]),Xc("design:returntype",void 0)],wp.prototype,"recalcPositions",null),af([te,Xc("design:type",Function),Xc("design:paramtypes",[Object]),Xc("design:returntype",void 0)],wp.prototype,"setViewport",null),af([te,Xc("design:type",Function),Xc("design:paramtypes",[Object,Object,Object]),Xc("design:returntype",void 0)],wp.prototype,"scrollIntoView",null);let ov=(()=>{class F{}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["tree-loading-component"]],inputs:{template:"template",node:"node"},decls:2,vars:5,consts:[[4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(U,Te){1&U&&(r.YNc(0,z,2,0,"span",0),r.GkF(1,1)),2&U&&(r.Q6J("ngIf",!Te.template),r.xp6(1),r.Q6J("ngTemplateOutlet",Te.template)("ngTemplateOutletContext",r.VKq(3,Me,Te.node)))},directives:[a.O5,a.tP],encapsulation:2}),F})(),Cm=(()=>{class F{constructor(U,Te,ft){this.elementRef=U,this.ngZone=Te,this.virtualScroll=ft,this.setViewport=b_(()=>{this.virtualScroll.setViewport(this.elementRef.nativeElement)},17),this.scrollEventHandler=this.setViewport.bind(this)}ngOnInit(){this.virtualScroll.init()}ngAfterViewInit(){setTimeout(()=>{this.setViewport(),this.virtualScroll.fireEvent({eventName:Qc.initialized})});let U=this.elementRef.nativeElement;this.ngZone.runOutsideAngular(()=>{U.addEventListener("scroll",this.scrollEventHandler)})}ngOnDestroy(){this.virtualScroll.clear(),this.elementRef.nativeElement.removeEventListener("scroll",this.scrollEventHandler)}getTotalHeight(){return this.virtualScroll.isEnabled()&&this.virtualScroll.totalHeight+"px"||"auto"}}return F.\u0275fac=function(U){return new(U||F)(r.Y36(r.SBq),r.Y36(r.R0b),r.Y36(wp))},F.\u0275cmp=r.Xpm({type:F,selectors:[["tree-viewport"]],features:[r._Bn([wp])],ngContentSelectors:yr,decls:1,vars:2,consts:[[4,"treeMobxAutorun"]],template:function(U,Te){1&U&&(r.F$t(),r.YNc(0,Ke,3,2,"ng-container",0)),2&U&&r.Q6J("treeMobxAutorun",r.DdM(1,gn))},directives:[Zr],encapsulation:2}),F})(),lm=(()=>{class F{constructor(U,Te){this.treeModel=U,this.treeDraggedElement=Te,U.eventNames.forEach(ft=>this[ft]=new r.vpe),U.subscribeToState(ft=>this.stateChange.emit(ft))}set nodes(U){}set options(U){}set focused(U){this.treeModel.setFocus(U)}set state(U){this.treeModel.setState(U)}onKeydown(U){if(!this.treeModel.isFocused||Sm(["input","textarea"],document.activeElement.tagName.toLowerCase()))return;const Te=this.treeModel.getFocusedNode();this.treeModel.performKeyAction(Te,U)}onMousedown(U){(function Te(ft,Zt){return!ft||ft.localName!==Zt&&Te(ft.parentElement,Zt)})(U.target,"tree-root")&&this.treeModel.setFocus(!1)}ngOnChanges(U){(U.options||U.nodes)&&this.treeModel.setData({options:U.options&&U.options.currentValue,nodes:U.nodes&&U.nodes.currentValue,events:T(this,this.treeModel.eventNames)})}sizeChanged(){this.viewportComponent.setViewport()}}return F.\u0275fac=function(U){return new(U||F)(r.Y36(Il),r.Y36(qm))},F.\u0275cmp=r.Xpm({type:F,selectors:[["Tree"],["tree-root"]],contentQueries:function(U,Te,ft){if(1&U&&(r.Suo(ft,Nr,5),r.Suo(ft,vi,5),r.Suo(ft,di,5),r.Suo(ft,ts,5)),2&U){let Zt;r.iGM(Zt=r.CRH())&&(Te.loadingTemplate=Zt.first),r.iGM(Zt=r.CRH())&&(Te.treeNodeTemplate=Zt.first),r.iGM(Zt=r.CRH())&&(Te.treeNodeWrapperTemplate=Zt.first),r.iGM(Zt=r.CRH())&&(Te.treeNodeFullTemplate=Zt.first)}},viewQuery:function(U,Te){if(1&U&&r.Gf(Do,5),2&U){let ft;r.iGM(ft=r.CRH())&&(Te.viewportComponent=ft.first)}},hostBindings:function(U,Te){1&U&&r.NdJ("keydown",function(Zt){return Te.onKeydown(Zt)},!1,r.pYS)("mousedown",function(Zt){return Te.onMousedown(Zt)},!1,r.pYS)},inputs:{nodes:"nodes",options:"options",focused:"focused",state:"state"},outputs:{toggleExpanded:"toggleExpanded",activate:"activate",deactivate:"deactivate",nodeActivate:"nodeActivate",nodeDeactivate:"nodeDeactivate",select:"select",deselect:"deselect",focus:"focus",blur:"blur",updateData:"updateData",initialized:"initialized",moveNode:"moveNode",copyNode:"copyNode",loadNodeChildren:"loadNodeChildren",changeFilter:"changeFilter",event:"event",stateChange:"stateChange"},features:[r._Bn([Il]),r.TTD],decls:5,vars:6,consts:[["viewport",""],[1,"angular-tree-component"],[3,"nodes","treeModel","templates",4,"ngIf"],["class","empty-tree-drop-slot",3,"dropIndex","node",4,"ngIf"],[3,"nodes","treeModel","templates"],[1,"empty-tree-drop-slot",3,"dropIndex","node"]],template:function(U,Te){1&U&&(r.TgZ(0,"tree-viewport",null,0)(2,"div",1),r.YNc(3,jo,1,8,"tree-node-collection",2),r.YNc(4,ia,1,2,"tree-node-drop-slot",3),r.qZA()()),2&U&&(r.xp6(2),r.ekj("node-dragging",Te.treeDraggedElement.isDragging())("angular-tree-component-rtl",Te.treeModel.options.rtl),r.xp6(1),r.Q6J("ngIf",Te.treeModel.roots),r.xp6(1),r.Q6J("ngIf",Te.treeModel.isEmptyTree()))},directives:function(){return[Cm,a.O5,A_,Rh]},encapsulation:2}),F})(),C_=(()=>{class F{}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["TreeNode"],["tree-node"]],inputs:{node:"node",index:"index",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"class","tree-node","tree-node-expanded","tree-node-collapsed","tree-node-leaf","tree-node-active","tree-node-focused",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"dropIndex","node",4,"ngIf"],[3,"node","index","templates"],[3,"node","templates"],[3,"dropIndex","node"]],template:function(U,Te){1&U&&r.YNc(0,Ee,3,8,"ng-container",0),2&U&&r.Q6J("treeMobxAutorun",r.DdM(1,gn))},directives:function(){return[Zr,a.O5,Rh,Ag,M_,a.tP]},encapsulation:2}),F})(),Mm=(()=>{class F{}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["tree-node-content"]],inputs:{node:"node",index:"index",template:"template"},decls:2,vars:7,consts:[[4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(U,Te){1&U&&(r.YNc(0,ze,2,1,"span",0),r.GkF(1,1)),2&U&&(r.Q6J("ngIf",!Te.template),r.xp6(1),r.Q6J("ngTemplateOutlet",Te.template)("ngTemplateOutletContext",r.kEZ(3,At,Te.node,Te.node,Te.index)))},directives:[a.O5,a.tP],encapsulation:2}),F})(),Rh=(()=>{class F{onDrop(U){this.node.mouseAction("drop",U.event,{from:U.element,to:{parent:this.node,index:this.dropIndex}})}allowDrop(U,Te){return this.node.options.allowDrop(U,{parent:this.node,index:this.dropIndex},Te)}}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["TreeNodeDropSlot"],["tree-node-drop-slot"]],inputs:{node:"node",dropIndex:"dropIndex"},decls:1,vars:2,consts:[[1,"node-drop-slot",3,"treeAllowDrop","allowDragoverStyling","treeDrop"]],template:function(U,Te){1&U&&(r.TgZ(0,"div",0),r.NdJ("treeDrop",function(Zt){return Te.onDrop(Zt)}),r.qZA()),2&U&&r.Q6J("treeAllowDrop",Te.allowDrop.bind(Te))("allowDragoverStyling",!0)},directives:function(){return[ig]},encapsulation:2}),F})(),Y_=(()=>{class F{}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["tree-node-expander"]],inputs:{node:"node"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],["class","toggle-children-wrapper",3,"toggle-children-wrapper-expanded","toggle-children-wrapper-collapsed","click",4,"ngIf"],["class","toggle-children-placeholder",4,"ngIf"],[1,"toggle-children-wrapper",3,"click"],[1,"toggle-children"],[1,"toggle-children-placeholder"]],template:function(U,Te){1&U&&r.YNc(0,ar,3,2,"ng-container",0),2&U&&r.Q6J("treeMobxAutorun",r.DdM(1,gn))},directives:[Zr,a.O5],encapsulation:2}),F})(),M_=(()=>{class F{}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["tree-node-children"]],inputs:{node:"node",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"tree-children","tree-children-no-padding",4,"treeAnimateOpen","treeAnimateOpenSpeed","treeAnimateOpenAcceleration","treeAnimateOpenEnabled"],[3,"nodes","templates","treeModel",4,"ngIf"],["class","tree-node-loading",3,"padding-left","template","node",4,"ngIf"],[3,"nodes","templates","treeModel"],[1,"tree-node-loading",3,"template","node"]],template:function(U,Te){1&U&&r.YNc(0,po,2,4,"ng-container",0),2&U&&r.Q6J("treeMobxAutorun",r.DdM(1,gn))},directives:function(){return[Zr,av,a.O5,A_,ov]},encapsulation:2}),F})();const um=Object.assign(function Mg(...F){return te(...F)},te),ng=Object.assign(function Og(...F){return Se(...F)},Se),j_=Object.assign(function rg(...F){return Wn(...F)},Wn);var Qp=function(F,J,U,Te){var rr,ft=arguments.length,Zt=ft<3?J:null===Te?Te=Object.getOwnPropertyDescriptor(J,U):Te;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Zt=Reflect.decorate(F,J,U,Te);else for(var xr=F.length-1;xr>=0;xr--)(rr=F[xr])&&(Zt=(ft<3?rr(Zt):ft>3?rr(J,U,Zt):rr(J,U))||Zt);return ft>3&&Zt&&Object.defineProperty(J,U,Zt),Zt},O_=function(F,J){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(F,J)};let A_=(()=>{class F{constructor(){this._dispose=[]}get nodes(){return this._nodes}set nodes(U){this.setNodes(U)}get marginTop(){const U=this.viewportNodes&&this.viewportNodes.length&&this.viewportNodes[0];return(U&&U.parent?U.position-U.parent.position-U.parent.getSelfHeight():0)+"px"}setNodes(U){this._nodes=U}ngOnInit(){this.virtualScroll=this.treeModel.virtualScroll,this._dispose=[_s(()=>this.virtualScroll.getViewportNodes(this.nodes).map(U=>U.index),U=>{this.viewportNodes=U.map(Te=>this.nodes[Te])},{compareStructural:!0,fireImmediately:!0}),_s(()=>this.nodes,U=>{this.viewportNodes=this.virtualScroll.getViewportNodes(U)})]}ngOnDestroy(){this._dispose.forEach(U=>U())}trackNode(U,Te){return Te.id}}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["tree-node-collection"]],inputs:{nodes:"nodes",treeModel:"treeModel",templates:"templates"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],[3,"node","index","templates",4,"ngFor","ngForOf","ngForTrackBy"],[3,"node","index","templates"]],template:function(U,Te){1&U&&r.YNc(0,oa,3,4,"ng-container",0),2&U&&r.Q6J("treeMobxAutorun",r.DdM(1,gn))},directives:[Zr,a.sg,C_],encapsulation:2}),F})();Qp([j_,O_("design:type",Object)],A_.prototype,"_nodes",void 0),Qp([j_,O_("design:type",Array)],A_.prototype,"viewportNodes",void 0),Qp([ng,O_("design:type",String),O_("design:paramtypes",[])],A_.prototype,"marginTop",null),Qp([um,O_("design:type",Function),O_("design:paramtypes",[Object]),O_("design:returntype",void 0)],A_.prototype,"setNodes",null);let Ag=(()=>{class F{constructor(){}}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["tree-node-wrapper"]],inputs:{node:"node",index:"index",templates:"templates"},decls:2,vars:8,consts:[["class","node-wrapper",3,"padding-left",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"node-wrapper"],[3,"node",4,"ngIf"],[3,"node"],[1,"node-content-wrapper",3,"treeAllowDrop","allowDragoverStyling","treeDrag","treeDragEnabled","click","dblclick","mouseover","mouseout","contextmenu","treeDrop","treeDropDragOver","treeDropDragLeave","treeDropDragEnter"],[3,"node","index","template"]],template:function(U,Te){1&U&&(r.YNc(0,Qr,5,15,"div",0),r.GkF(1,1)),2&U&&(r.Q6J("ngIf",!Te.templates.treeNodeWrapperTemplate),r.xp6(1),r.Q6J("ngTemplateOutlet",Te.templates.treeNodeWrapperTemplate)("ngTemplateOutletContext",r.l5B(3,Y,Te.node,Te.node,Te.index,Te.templates)))},directives:function(){return[a.O5,cm,Y_,sv,ig,Mm,a.tP]},encapsulation:2}),F})(),cm=(()=>{class F{}return F.\u0275fac=function(U){return new(U||F)},F.\u0275cmp=r.Xpm({type:F,selectors:[["tree-node-checkbox"]],inputs:{node:"node"},decls:1,vars:2,consts:[[4,"treeMobxAutorun"],["type","checkbox",1,"tree-node-checkbox",3,"checked","indeterminate","click"]],template:function(U,Te){1&U&&r.YNc(0,Fr,2,2,"ng-container",0),2&U&&r.Q6J("treeMobxAutorun",r.DdM(1,gn))},directives:[Zr],encapsulation:2}),F})();const Om="is-dragging-over",Dg="is-dragging-over-disabled";let ig=(()=>{class F{constructor(U,Te,ft,Zt){this.el=U,this.renderer=Te,this.treeDraggedElement=ft,this.ngZone=Zt,this.allowDragoverStyling=!0,this.onDropCallback=new r.vpe,this.onDragOverCallback=new r.vpe,this.onDragLeaveCallback=new r.vpe,this.onDragEnterCallback=new r.vpe,this._allowDrop=(rr,xr)=>!0,this.dragOverEventHandler=this.onDragOver.bind(this),this.dragEnterEventHandler=this.onDragEnter.bind(this),this.dragLeaveEventHandler=this.onDragLeave.bind(this)}set treeAllowDrop(U){this._allowDrop=U instanceof Function?U:(Te,ft)=>U}allowDrop(U){return this._allowDrop(this.treeDraggedElement.get(),U)}ngAfterViewInit(){let U=this.el.nativeElement;this.ngZone.runOutsideAngular(()=>{U.addEventListener("dragover",this.dragOverEventHandler),U.addEventListener("dragenter",this.dragEnterEventHandler),U.addEventListener("dragleave",this.dragLeaveEventHandler)})}ngOnDestroy(){let U=this.el.nativeElement;U.removeEventListener("dragover",this.dragOverEventHandler),U.removeEventListener("dragenter",this.dragEnterEventHandler),U.removeEventListener("dragleave",this.dragLeaveEventHandler)}onDragOver(U){if(!this.allowDrop(U))return this.allowDragoverStyling?this.addDisabledClass():void 0;this.onDragOverCallback.emit({event:U,element:this.treeDraggedElement.get()}),U.preventDefault(),this.allowDragoverStyling&&this.addClass()}onDragEnter(U){!this.allowDrop(U)||(U.preventDefault(),this.onDragEnterCallback.emit({event:U,element:this.treeDraggedElement.get()}))}onDragLeave(U){if(!this.allowDrop(U))return this.allowDragoverStyling?this.removeDisabledClass():void 0;this.onDragLeaveCallback.emit({event:U,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass()}onDrop(U){!this.allowDrop(U)||(U.preventDefault(),this.onDropCallback.emit({event:U,element:this.treeDraggedElement.get()}),this.allowDragoverStyling&&this.removeClass(),this.treeDraggedElement.set(null))}addClass(){this.renderer.addClass(this.el.nativeElement,Om)}removeClass(){this.renderer.removeClass(this.el.nativeElement,Om)}addDisabledClass(){this.renderer.addClass(this.el.nativeElement,Dg)}removeDisabledClass(){this.renderer.removeClass(this.el.nativeElement,Dg)}}return F.\u0275fac=function(U){return new(U||F)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(qm),r.Y36(r.R0b))},F.\u0275dir=r.lG2({type:F,selectors:[["","treeDrop",""]],hostBindings:function(U,Te){1&U&&r.NdJ("drop",function(Zt){return Te.onDrop(Zt)})},inputs:{allowDragoverStyling:"allowDragoverStyling",treeAllowDrop:"treeAllowDrop"},outputs:{onDropCallback:"treeDrop",onDragOverCallback:"treeDropDragOver",onDragLeaveCallback:"treeDropDragLeave",onDragEnterCallback:"treeDropDragEnter"}}),F})(),sv=(()=>{class F{constructor(U,Te,ft,Zt){this.el=U,this.renderer=Te,this.treeDraggedElement=ft,this.ngZone=Zt,this.dragEventHandler=this.onDrag.bind(this)}ngAfterViewInit(){let U=this.el.nativeElement;this.ngZone.runOutsideAngular(()=>{U.addEventListener("drag",this.dragEventHandler)})}ngDoCheck(){this.renderer.setAttribute(this.el.nativeElement,"draggable",this.treeDragEnabled?"true":"false")}ngOnDestroy(){this.el.nativeElement.removeEventListener("drag",this.dragEventHandler)}onDragStart(U){U.dataTransfer.setData("text",U.target.id),this.treeDraggedElement.set(this.draggedElement),this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragStart",U)}onDrag(U){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("drag",U)}onDragEnd(){this.draggedElement.mouseAction&&this.draggedElement.mouseAction("dragEnd"),this.treeDraggedElement.set(null)}}return F.\u0275fac=function(U){return new(U||F)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(qm),r.Y36(r.R0b))},F.\u0275dir=r.lG2({type:F,selectors:[["","treeDrag",""]],hostBindings:function(U,Te){1&U&&r.NdJ("dragstart",function(Zt){return Te.onDragStart(Zt)})("dragend",function(){return Te.onDragEnd()})},inputs:{draggedElement:["treeDrag","draggedElement"],treeDragEnabled:"treeDragEnabled"}}),F})(),av=(()=>{class F{constructor(U,Te,ft){this.renderer=U,this.templateRef=Te,this.viewContainerRef=ft}set isOpen(U){U?(this._show(),this.isEnabled&&!1===this._isOpen&&this._animateOpen()):this.isEnabled?this._animateClose():this._hide(),this._isOpen=!!U}_show(){this.innerElement||(this.innerElement=this.viewContainerRef.createEmbeddedView(this.templateRef).rootNodes[0])}_hide(){this.viewContainerRef.clear(),this.innerElement=null}_animateOpen(){let U=this.animateSpeed,Te=this.animateAcceleration,ft=0;this.renderer.setStyle(this.innerElement,"max-height","0"),setTimeout(()=>{const Zt=setInterval(()=>{if(!this._isOpen||!this.innerElement)return clearInterval(Zt);ft+=U;const rr=Math.round(ft);this.renderer.setStyle(this.innerElement,"max-height",`${rr}px`);const xr=this.innerElement.getBoundingClientRect?this.innerElement.getBoundingClientRect().height:0;U*=Te,Te*=1.005,xr<rr&&(this.renderer.setStyle(this.innerElement,"max-height",null),clearInterval(Zt))},17)})}_animateClose(){if(!this.innerElement)return;let U=this.animateSpeed,Te=this.animateAcceleration,ft=this.innerElement.getBoundingClientRect().height;const Zt=setInterval(()=>{if(this._isOpen||!this.innerElement)return clearInterval(Zt);ft-=U,this.renderer.setStyle(this.innerElement,"max-height",`${ft}px`),U*=Te,Te*=1.005,ft<=0&&(this.viewContainerRef.clear(),this.innerElement=null,clearInterval(Zt))},17)}}return F.\u0275fac=function(U){return new(U||F)(r.Y36(r.Qsj),r.Y36(r.Rgc),r.Y36(r.s_b))},F.\u0275dir=r.lG2({type:F,selectors:[["","treeAnimateOpen",""]],inputs:{isOpen:["treeAnimateOpen","isOpen"],animateSpeed:["treeAnimateOpenSpeed","animateSpeed"],animateAcceleration:["treeAnimateOpenAcceleration","animateAcceleration"],isEnabled:["treeAnimateOpenEnabled","isEnabled"]}}),F})(),lv=(()=>{class F{}return F.\u0275fac=function(U){return new(U||F)},F.\u0275mod=r.oAB({type:F}),F.\u0275inj=r.cJS({providers:[],imports:[[a.ez]]}),F})()},84051:(v,b,i)=>{"use strict";i.d(b,{$7:()=>Yo,AR:()=>yi,Hg:()=>Wn,Sr:()=>es,dX:()=>Qo,ii:()=>Zn,nE:()=>sa,vq:()=>yn,xD:()=>Oo});var r=i(89724),a=i(11048),f=i(79765),u=i(22759),e=i(26215),p=i(46782),g=i(64762);const S=["*"];function M(ut,pn){1&ut&&r._UZ(0,"datatable-progress")}function w(ut,pn){if(1&ut&&r._UZ(0,"datatable-summary-row",9),2&ut){const te=r.oxw(2);r.Q6J("rowHeight",te.summaryHeight)("offsetX",te.offsetX)("innerWidth",te.innerWidth)("rows",te.rows)("columns",te.columns)}}function x(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-body-row",13),r.NdJ("treeAction",function(){r.CHM(te);const jt=r.oxw().$implicit;return r.oxw(2).onTreeAction(jt)})("activate",function(jt){r.CHM(te);const hn=r.oxw().index,ii=r.oxw(2);return r.MAs(2).onActivate(jt,ii.indexes.first+hn)}),r.qZA()}if(2&ut){const te=r.oxw().$implicit,Ue=r.oxw(2),jt=r.MAs(2);r.Q6J("isSelected",jt.getRowSelected(te))("innerWidth",Ue.innerWidth)("offsetX",Ue.offsetX)("columns",Ue.columns)("rowHeight",Ue.getRowHeight(te))("row",te)("rowIndex",Ue.getRowIndex(te))("expanded",Ue.getRowExpanded(te))("rowClass",Ue.rowClass)("displayCheck",Ue.displayCheck)("treeStatus",te&&te.treeStatus)}}function B(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-body-row",15),r.NdJ("activate",function(jt){const ii=r.CHM(te).index;return r.oxw(4),r.MAs(2).onActivate(jt,ii)}),r.qZA()}if(2&ut){const te=pn.$implicit,Ue=r.oxw(2).$implicit,jt=r.oxw(2),hn=r.MAs(2);r.Q6J("isSelected",hn.getRowSelected(te))("innerWidth",jt.innerWidth)("offsetX",jt.offsetX)("columns",jt.columns)("rowHeight",jt.getRowHeight(te))("row",te)("group",Ue.value)("rowIndex",jt.getRowIndex(te))("expanded",jt.getRowExpanded(te))("rowClass",jt.rowClass)}}function W(ut,pn){if(1&ut&&r.YNc(0,B,1,10,"datatable-body-row",14),2&ut){const te=r.oxw().$implicit,Ue=r.oxw(2);r.Q6J("ngForOf",te.value)("ngForTrackBy",Ue.rowTrackingFn)}}function j(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-row-wrapper",10),r.NdJ("rowContextmenu",function(jt){return r.CHM(te),r.oxw(2).rowContextmenu.emit(jt)}),r.YNc(1,x,1,11,"datatable-body-row",11),r.YNc(2,W,1,2,"ng-template",null,12,r.W1O),r.qZA()}if(2&ut){const te=pn.$implicit,Ue=pn.index,jt=r.MAs(3),hn=r.oxw(2);r.Q6J("groupedRows",hn.groupedRows)("innerWidth",hn.innerWidth)("ngStyle",hn.getRowsStyles(te))("rowDetail",hn.rowDetail)("groupHeader",hn.groupHeader)("offsetX",hn.offsetX)("detailRowHeight",hn.getDetailRowHeight(te&&te[Ue],Ue))("row",te)("expanded",hn.getRowExpanded(te))("rowIndex",hn.getRowIndex(te&&te[Ue])),r.xp6(1),r.Q6J("ngIf",!hn.groupedRows)("ngIfElse",jt)}}function q(ut,pn){if(1&ut&&r._UZ(0,"datatable-summary-row",16),2&ut){const te=r.oxw(2);r.Q6J("ngStyle",te.getBottomSummaryRowStyles())("rowHeight",te.summaryHeight)("offsetX",te.offsetX)("innerWidth",te.innerWidth)("rows",te.rows)("columns",te.columns)}}function ue(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-scroller",5),r.NdJ("scroll",function(jt){return r.CHM(te),r.oxw().onBodyScroll(jt)}),r.YNc(1,w,1,5,"datatable-summary-row",6),r.YNc(2,j,4,12,"datatable-row-wrapper",7),r.YNc(3,q,1,6,"datatable-summary-row",8),r.qZA()}if(2&ut){const te=r.oxw();r.Q6J("scrollbarV",te.scrollbarV)("scrollbarH",te.scrollbarH)("scrollHeight",te.scrollHeight)("scrollWidth",null==te.columnGroupWidths?null:te.columnGroupWidths.total),r.xp6(1),r.Q6J("ngIf",te.summaryRow&&"top"===te.summaryPosition),r.xp6(1),r.Q6J("ngForOf",te.temp)("ngForTrackBy",te.rowTrackingFn),r.xp6(1),r.Q6J("ngIf",te.summaryRow&&"bottom"===te.summaryPosition)}}function re(ut,pn){if(1&ut&&r._UZ(0,"div",17),2&ut){const te=r.oxw();r.Q6J("innerHTML",te.emptyMessage,r.oJD)}}function H(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-header-cell",4),r.NdJ("resize",function(jt){const ii=r.CHM(te).$implicit;return r.oxw(2).onColumnResized(jt,ii)})("longPressStart",function(jt){return r.CHM(te),r.oxw(2).onLongPressStart(jt)})("longPressEnd",function(jt){return r.CHM(te),r.oxw(2).onLongPressEnd(jt)})("sort",function(jt){return r.CHM(te),r.oxw(2).onSort(jt)})("select",function(jt){return r.CHM(te),r.oxw(2).select.emit(jt)})("columnContextmenu",function(jt){return r.CHM(te),r.oxw(2).columnContextmenu.emit(jt)}),r.qZA()}if(2&ut){const te=pn.$implicit,Ue=r.oxw(2);r.Q6J("resizeEnabled",te.resizeable)("pressModel",te)("pressEnabled",Ue.reorderable&&te.draggable)("dragX",Ue.reorderable&&te.draggable&&te.dragging)("dragY",!1)("dragModel",te)("dragEventTarget",Ue.dragEventTarget)("headerHeight",Ue.headerHeight)("isTarget",te.isTarget)("targetMarkerTemplate",Ue.targetMarkerTemplate)("targetMarkerContext",te.targetMarkerContext)("column",te)("sortType",Ue.sortType)("sorts",Ue.sorts)("selectionType",Ue.selectionType)("sortAscendingIcon",Ue.sortAscendingIcon)("sortDescendingIcon",Ue.sortDescendingIcon)("sortUnsetIcon",Ue.sortUnsetIcon)("allRowsSelected",Ue.allRowsSelected)}}function se(ut,pn){if(1&ut&&(r.TgZ(0,"div",2),r.YNc(1,H,1,19,"datatable-header-cell",3),r.qZA()),2&ut){const te=pn.$implicit,Ue=r.oxw();r.Tol("datatable-row-"+te.type),r.Q6J("ngStyle",Ue._styleByGroup[te.type]),r.xp6(1),r.Q6J("ngForOf",te.columns)("ngForTrackBy",Ue.columnTrackingFn)}}function ae(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-header",4),r.NdJ("sort",function(jt){return r.CHM(te),r.oxw().onColumnSort(jt)})("resize",function(jt){return r.CHM(te),r.oxw().onColumnResize(jt)})("reorder",function(jt){return r.CHM(te),r.oxw().onColumnReorder(jt)})("select",function(jt){return r.CHM(te),r.oxw().onHeaderSelect(jt)})("columnContextmenu",function(jt){return r.CHM(te),r.oxw().onColumnContextmenu(jt)}),r.ALo(1,"async"),r.qZA()}if(2&ut){const te=r.oxw();r.Q6J("sorts",te.sorts)("sortType",te.sortType)("scrollbarH",te.scrollbarH)("innerWidth",te._innerWidth)("offsetX",r.lcZ(1,15,te._offsetX))("dealsWithGroup",void 0!==te.groupedRows)("columns",te._internalColumns)("headerHeight",te.headerHeight)("reorderable",te.reorderable)("targetMarkerTemplate",te.targetMarkerTemplate)("sortAscendingIcon",te.cssClasses.sortAscending)("sortDescendingIcon",te.cssClasses.sortDescending)("sortUnsetIcon",te.cssClasses.sortUnset)("allRowsSelected",te.allRowsSelected)("selectionType",te.selectionType)}}function ie(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-footer",5),r.NdJ("page",function(jt){return r.CHM(te),r.oxw().onFooterPage(jt)}),r.qZA()}if(2&ut){const te=r.oxw();r.Q6J("rowCount",te.rowCount)("pageSize",te.pageSize)("offset",te.offset)("footerHeight",te.footerHeight)("footerTemplate",te.footer)("totalMessage",te.messages.totalMessage)("pagerLeftArrowIcon",te.cssClasses.pagerLeftArrow)("pagerRightArrowIcon",te.cssClasses.pagerRightArrow)("pagerPreviousIcon",te.cssClasses.pagerPrevious)("selectedCount",te.selected.length)("selectedMessage",!!te.selectionType&&te.messages.selectedMessage)("pagerNextIcon",te.cssClasses.pagerNext)}}function fe(ut,pn){}function he(ut,pn){if(1&ut&&r.YNc(0,fe,0,0,"ng-template",5),2&ut){const te=r.oxw();r.Q6J("ngTemplateOutlet",te.targetMarkerTemplate)("ngTemplateOutletContext",te.targetMarkerContext)}}function Ce(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"label",6)(1,"input",7),r.NdJ("change",function(){r.CHM(te);const jt=r.oxw();return jt.select.emit(!jt.allRowsSelected)}),r.qZA()()}if(2&ut){const te=r.oxw();r.xp6(1),r.Q6J("checked",te.allRowsSelected)}}function ce(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"span",8)(1,"span",9),r.NdJ("click",function(){return r.CHM(te),r.oxw().onSort()}),r.qZA()()}if(2&ut){const te=r.oxw();r.xp6(1),r.Q6J("innerHTML",te.name,r.oJD)}}function Be(ut,pn){}function Ve(ut,pn){if(1&ut&&r.YNc(0,Be,0,0,"ng-template",5),2&ut){const te=r.oxw();r.Q6J("ngTemplateOutlet",te.column.headerTemplate)("ngTemplateOutletContext",te.cellContext)}}function Xe(ut,pn){}const He=function(ut,pn,te,Ue,jt){return{rowCount:ut,pageSize:pn,selectedCount:te,curPage:Ue,offset:jt}};function Pe(ut,pn){if(1&ut&&r.YNc(0,Xe,0,0,"ng-template",4),2&ut){const te=r.oxw();r.Q6J("ngTemplateOutlet",te.footerTemplate.template)("ngTemplateOutletContext",r.qbA(2,He,te.rowCount,te.pageSize,te.selectedCount,te.curPage,te.offset))}}function Ge(ut,pn){if(1&ut&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&ut){const te=r.oxw(2);r.xp6(1),r.AsE(" ",null==te.selectedCount?null:te.selectedCount.toLocaleString()," ",te.selectedMessage," / ")}}function Oe(ut,pn){if(1&ut&&(r.TgZ(0,"div",5),r.YNc(1,Ge,2,2,"span",1),r._uU(2),r.qZA()),2&ut){const te=r.oxw();r.xp6(1),r.Q6J("ngIf",te.selectedMessage),r.xp6(1),r.AsE(" ",null==te.rowCount?null:te.rowCount.toLocaleString()," ",te.totalMessage," ")}}function Tt(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-pager",6),r.NdJ("change",function(jt){return r.CHM(te),r.oxw().page.emit(jt)}),r.qZA()}if(2&ut){const te=r.oxw();r.Q6J("pagerLeftArrowIcon",te.pagerLeftArrowIcon)("pagerRightArrowIcon",te.pagerRightArrowIcon)("pagerPreviousIcon",te.pagerPreviousIcon)("pagerNextIcon",te.pagerNextIcon)("page",te.curPage)("size",te.pageSize)("count",te.rowCount)("hidden",!te.isVisible)}}const We=function(ut){return{"selected-count":ut}};function Qt(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"li",6)(1,"a",7),r.NdJ("click",function(){const hn=r.CHM(te).$implicit;return r.oxw().selectPage(hn.number)}),r._uU(2),r.qZA()()}if(2&ut){const te=pn.$implicit,Ue=r.oxw();r.ekj("active",te.number===Ue.page),r.uIk("aria-label","page "+te.number),r.xp6(2),r.hij(" ",te.text," ")}}function Nt(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"datatable-body-cell",3),r.NdJ("activate",function(jt){const ii=r.CHM(te).index;return r.oxw(2).onActivate(jt,ii)})("treeAction",function(){return r.CHM(te),r.oxw(2).onTreeAction()}),r.qZA()}if(2&ut){const te=pn.$implicit,Ue=r.oxw(2);r.Q6J("row",Ue.row)("group",Ue.group)("expanded",Ue.expanded)("isSelected",Ue.isSelected)("rowIndex",Ue.rowIndex)("column",te)("rowHeight",Ue.rowHeight)("displayCheck",Ue.displayCheck)("treeStatus",Ue.treeStatus)}}function Yt(ut,pn){if(1&ut&&(r.TgZ(0,"div",1),r.YNc(1,Nt,1,9,"datatable-body-cell",2),r.qZA()),2&ut){const te=pn.$implicit,Ue=r.oxw();r.Gre("datatable-row-",te.type," datatable-row-group"),r.Q6J("ngStyle",Ue._groupStyles[te.type]),r.xp6(1),r.Q6J("ngForOf",te.columns)("ngForTrackBy",Ue.columnTrackingFn)}}function dn(ut,pn){}function rn(ut,pn){if(1&ut&&r.YNc(0,dn,0,0,"ng-template",4),2&ut){const te=r.oxw(2);r.Q6J("ngTemplateOutlet",te.groupHeader.template)("ngTemplateOutletContext",te.groupContext)}}function vt(ut,pn){if(1&ut&&(r.TgZ(0,"div",3),r.YNc(1,rn,1,2,null,1),r.qZA()),2&ut){const te=r.oxw();r.Q6J("ngStyle",te.getGroupHeaderStyle()),r.xp6(1),r.Q6J("ngIf",te.groupHeader&&te.groupHeader.template)}}function xt(ut,pn){1&ut&&r.Hsn(0,0,["*ngIf","(groupHeader && groupHeader.template && expanded) || !groupHeader || !groupHeader.template"])}function Ct(ut,pn){}function Gt(ut,pn){if(1&ut&&r.YNc(0,Ct,0,0,"ng-template",4),2&ut){const te=r.oxw(2);r.Q6J("ngTemplateOutlet",te.rowDetail.template)("ngTemplateOutletContext",te.rowContext)}}function Fn(ut,pn){if(1&ut&&(r.TgZ(0,"div",5),r.YNc(1,Gt,1,2,null,1),r.qZA()),2&ut){const te=r.oxw();r.Udp("height",te.detailRowHeight,"px"),r.xp6(1),r.Q6J("ngIf",te.rowDetail&&te.rowDetail.template)}}const pr=["cellTemplate"];function mi(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"label",4)(1,"input",5),r.NdJ("click",function(jt){return r.CHM(te),r.oxw().onCheckboxChange(jt)}),r.qZA()()}if(2&ut){const te=r.oxw();r.xp6(1),r.Q6J("checked",te.isSelected)}}function ci(ut,pn){1&ut&&r._UZ(0,"i",11)}function hr(ut,pn){1&ut&&r._UZ(0,"i",12)}function Br(ut,pn){1&ut&&r._UZ(0,"i",13)}function Ur(ut,pn){if(1&ut){const te=r.EpF();r.TgZ(0,"button",7),r.NdJ("click",function(){return r.CHM(te),r.oxw(2).onTreeAction()}),r.TgZ(1,"span"),r.YNc(2,ci,1,0,"i",8),r.YNc(3,hr,1,0,"i",9),r.YNc(4,Br,1,0,"i",10),r.qZA()()}if(2&ut){const te=r.oxw(2);r.Q6J("disabled","disabled"===te.treeStatus),r.xp6(2),r.Q6J("ngIf","loading"===te.treeStatus),r.xp6(1),r.Q6J("ngIf","collapsed"===te.treeStatus),r.xp6(1),r.Q6J("ngIf","expanded"===te.treeStatus||"disabled"===te.treeStatus)}}function Hn(ut,pn){}const er=function(ut){return{cellContext:ut}};function _r(ut,pn){if(1&ut&&r.YNc(0,Hn,0,0,"ng-template",14),2&ut){const te=r.oxw(2);r.Q6J("ngTemplateOutlet",te.column.treeToggleTemplate)("ngTemplateOutletContext",r.VKq(2,er,te.cellContext))}}function ei(ut,pn){if(1&ut&&(r.ynx(0),r.YNc(1,Ur,5,4,"button",6),r.YNc(2,_r,1,4,null,2),r.BQk()),2&ut){const te=r.oxw();r.xp6(1),r.Q6J("ngIf",!te.column.treeToggleTemplate),r.xp6(1),r.Q6J("ngIf",te.column.treeToggleTemplate)}}function bi(ut,pn){if(1&ut&&r._UZ(0,"span",15),2&ut){const te=r.oxw();r.Q6J("title",te.sanitizedValue)("innerHTML",te.value,r.oJD)}}function fi(ut,pn){}function no(ut,pn){if(1&ut&&r.YNc(0,fi,0,0,"ng-template",14,16,r.W1O),2&ut){const te=r.oxw();r.Q6J("ngTemplateOutlet",te.column.cellTemplate)("ngTemplateOutletContext",te.cellContext)}}function xo(ut,pn){if(1&ut&&r._UZ(0,"datatable-body-row",1),2&ut){const te=r.oxw();r.Q6J("innerWidth",te.innerWidth)("offsetX",te.offsetX)("columns",te._internalColumns)("rowHeight",te.rowHeight)("row",te.summaryRow)("rowIndex",-1)}}let Er=(()=>{class ut{constructor(te){this.document=te,this.width=this.getWidth()}getWidth(){const te=this.document.createElement("div");te.style.visibility="hidden",te.style.width="100px",te.style.msOverflowStyle="scrollbar",this.document.body.appendChild(te);const Ue=te.offsetWidth;te.style.overflow="scroll";const jt=this.document.createElement("div");jt.style.width="100%",te.appendChild(jt);const hn=jt.offsetWidth;return te.parentNode.removeChild(te),Ue-hn}}return ut.\u0275fac=function(te){return new(te||ut)(r.LFG(a.K0))},ut.\u0275prov=r.Yz7({token:ut,factory:ut.\u0275fac}),ut})(),an=(()=>{class ut{getDimensions(te){return te.getBoundingClientRect()}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275prov=r.Yz7({token:ut,factory:ut.\u0275fac}),ut})(),vn=(()=>{class ut{constructor(){this.columnInputChanges=new f.xQ}get columnInputChanges$(){return this.columnInputChanges.asObservable()}onInputChange(){this.columnInputChanges.next()}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275prov=r.Yz7({token:ut,factory:ut.\u0275fac}),ut})(),Zn=(()=>{class ut{constructor(te){this.template=te}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.Rgc))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","ngx-datatable-footer-template",""]]}),ut})(),Xn=(()=>{class ut{constructor(te,Ue){this.element=te,this.zone=Ue,this.isVisible=!1,this.visible=new r.vpe}ngOnInit(){this.runCheck()}ngOnDestroy(){clearTimeout(this.timeout)}onVisibilityChange(){this.zone.run(()=>{this.isVisible=!0,this.visible.emit(!0)})}runCheck(){const te=()=>{const{offsetHeight:Ue,offsetWidth:jt}=this.element.nativeElement;Ue&&jt?(clearTimeout(this.timeout),this.onVisibilityChange()):(clearTimeout(this.timeout),this.zone.runOutsideAngular(()=>{this.timeout=setTimeout(()=>te(),50)}))};this.timeout=setTimeout(()=>te())}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.SBq),r.Y36(r.R0b))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","visibilityObserver",""]],hostVars:2,hostBindings:function(te,Ue){2&te&&r.ekj("visible",Ue.isVisible)},outputs:{visible:"visible"}}),ut})(),zn=(()=>{class ut{constructor(te){this.dragX=!0,this.dragY=!0,this.dragStart=new r.vpe,this.dragging=new r.vpe,this.dragEnd=new r.vpe,this.isDragging=!1,this.element=te.nativeElement}ngOnChanges(te){te.dragEventTarget&&te.dragEventTarget.currentValue&&this.dragModel.dragging&&this.onMousedown(te.dragEventTarget.currentValue)}ngOnDestroy(){this._destroySubscription()}onMouseup(te){!this.isDragging||(this.isDragging=!1,this.element.classList.remove("dragging"),this.subscription&&(this._destroySubscription(),this.dragEnd.emit({event:te,element:this.element,model:this.dragModel})))}onMousedown(te){if(te.target.classList.contains("draggable")&&(this.dragX||this.dragY)){te.preventDefault(),this.isDragging=!0;const jt={x:te.clientX,y:te.clientY},hn=(0,u.R)(document,"mouseup");this.subscription=hn.subscribe(Oi=>this.onMouseup(Oi));const ii=(0,u.R)(document,"mousemove").pipe((0,p.R)(hn)).subscribe(Oi=>this.move(Oi,jt));this.subscription.add(ii),this.dragStart.emit({event:te,element:this.element,model:this.dragModel})}}move(te,Ue){if(!this.isDragging)return;const hn=te.clientY-Ue.y;this.dragX&&(this.element.style.left=te.clientX-Ue.x+"px"),this.dragY&&(this.element.style.top=`${hn}px`),this.element.classList.add("dragging"),this.dragging.emit({event:te,element:this.element,model:this.dragModel})}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.SBq))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","draggable",""]],inputs:{dragX:"dragX",dragY:"dragY",dragEventTarget:"dragEventTarget",dragModel:"dragModel"},outputs:{dragStart:"dragStart",dragging:"dragging",dragEnd:"dragEnd"},features:[r.TTD]}),ut})(),ri=(()=>{class ut{constructor(te,Ue){this.renderer=Ue,this.resizeEnabled=!0,this.resize=new r.vpe,this.resizing=!1,this.element=te.nativeElement}ngAfterViewInit(){const te=this.renderer;this.resizeHandle=te.createElement("span"),te.addClass(this.resizeHandle,this.resizeEnabled?"resize-handle":"resize-handle--not-resizable"),te.appendChild(this.element,this.resizeHandle)}ngOnDestroy(){this._destroySubscription(),this.renderer.destroyNode?this.renderer.destroyNode(this.resizeHandle):this.resizeHandle&&this.renderer.removeChild(this.renderer.parentNode(this.resizeHandle),this.resizeHandle)}onMouseup(){this.resizing=!1,this.subscription&&!this.subscription.closed&&(this._destroySubscription(),this.resize.emit(this.element.clientWidth))}onMousedown(te){const Ue=te.target.classList.contains("resize-handle"),jt=this.element.clientWidth,hn=te.screenX;if(Ue){te.stopPropagation(),this.resizing=!0;const ii=(0,u.R)(document,"mouseup");this.subscription=ii.subscribe(ki=>this.onMouseup());const Oi=(0,u.R)(document,"mousemove").pipe((0,p.R)(ii)).subscribe(ki=>this.move(ki,jt,hn));this.subscription.add(Oi)}}move(te,Ue,jt){const ii=Ue+(te.screenX-jt);(!this.minWidth||ii>=this.minWidth)&&(!this.maxWidth||ii<=this.maxWidth)&&(this.element.style.width=`${ii}px`)}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.SBq),r.Y36(r.Qsj))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","resizeable",""]],hostVars:2,hostBindings:function(te,Ue){1&te&&r.NdJ("mousedown",function(hn){return Ue.onMousedown(hn)}),2&te&&r.ekj("resizeable",Ue.resizeEnabled)},inputs:{resizeEnabled:"resizeEnabled",minWidth:"minWidth",maxWidth:"maxWidth"},outputs:{resize:"resize"}}),ut})(),Gi=(()=>{class ut{constructor(te,Ue){this.document=Ue,this.reorder=new r.vpe,this.targetChanged=new r.vpe,this.differ=te.find({}).create()}ngAfterContentInit(){this.updateSubscriptions(),this.draggables.changes.subscribe(this.updateSubscriptions.bind(this))}ngOnDestroy(){this.draggables.forEach(te=>{te.dragStart.unsubscribe(),te.dragging.unsubscribe(),te.dragEnd.unsubscribe()})}updateSubscriptions(){const te=this.differ.diff(this.createMapDiffs());if(te){const Ue=({currentValue:hn,previousValue:ii})=>{jt({previousValue:ii}),hn&&(hn.dragStart.subscribe(this.onDragStart.bind(this)),hn.dragging.subscribe(this.onDragging.bind(this)),hn.dragEnd.subscribe(this.onDragEnd.bind(this)))},jt=({previousValue:hn})=>{hn&&(hn.dragStart.unsubscribe(),hn.dragging.unsubscribe(),hn.dragEnd.unsubscribe())};te.forEachAddedItem(Ue),te.forEachRemovedItem(jt)}}onDragStart(){this.positions={};let te=0;for(const Ue of this.draggables.toArray()){const jt=Ue.element,hn=parseInt(jt.offsetLeft.toString(),0);this.positions[Ue.dragModel.prop]={left:hn,right:hn+parseInt(jt.offsetWidth.toString(),0),index:te++,element:jt}}}onDragging({model:Ue,event:jt}){const hn=this.positions[Ue.prop],ii=this.isTarget(Ue,jt);ii?this.lastDraggingIndex!==ii.i&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,newIndex:ii.i,initialIndex:hn.index}),this.lastDraggingIndex=ii.i):this.lastDraggingIndex!==hn.index&&(this.targetChanged.emit({prevIndex:this.lastDraggingIndex,initialIndex:hn.index}),this.lastDraggingIndex=hn.index)}onDragEnd({element:te,model:Ue,event:jt}){const hn=this.positions[Ue.prop],ii=this.isTarget(Ue,jt);ii&&this.reorder.emit({prevIndex:hn.index,newIndex:ii.i,model:Ue}),this.lastDraggingIndex=void 0,te.style.left="auto"}isTarget(te,Ue){let jt=0;const Oi=this.document.elementsFromPoint(Ue.x||Ue.clientX,Ue.y||Ue.clientY);for(const ki in this.positions){const _s=this.positions[ki];if(te.prop!==ki&&Oi.find(Vo=>Vo===_s.element))return{pos:_s,i:jt};jt++}}createMapDiffs(){return this.draggables.toArray().reduce((te,Ue)=>(te[Ue.dragModel.$$id]=Ue,te),{})}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.aQg),r.Y36(a.K0))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","orderable",""]],contentQueries:function(te,Ue,jt){if(1&te&&r.Suo(jt,zn,5),2&te){let hn;r.iGM(hn=r.CRH())&&(Ue.draggables=hn)}},outputs:{reorder:"reorder",targetChanged:"targetChanged"}}),ut})(),ui=(()=>{class ut{constructor(){this.pressEnabled=!0,this.duration=500,this.longPressStart=new r.vpe,this.longPressing=new r.vpe,this.longPressEnd=new r.vpe,this.mouseX=0,this.mouseY=0}get press(){return this.pressing}get isLongPress(){return this.isLongPressing}onMouseDown(te){if(1!==te.which||!this.pressEnabled||te.target.classList.contains("resize-handle"))return;this.mouseX=te.clientX,this.mouseY=te.clientY,this.pressing=!0,this.isLongPressing=!1;const jt=(0,u.R)(document,"mouseup");this.subscription=jt.subscribe(hn=>this.onMouseup()),this.timeout=setTimeout(()=>{this.isLongPressing=!0,this.longPressStart.emit({event:te,model:this.pressModel}),this.subscription.add((0,u.R)(document,"mousemove").pipe((0,p.R)(jt)).subscribe(hn=>this.onMouseMove(hn))),this.loop(te)},this.duration),this.loop(te)}onMouseMove(te){if(this.pressing&&!this.isLongPressing){const Ue=Math.abs(te.clientX-this.mouseX)>10,jt=Math.abs(te.clientY-this.mouseY)>10;(Ue||jt)&&this.endPress()}}loop(te){this.isLongPressing&&(this.timeout=setTimeout(()=>{this.longPressing.emit({event:te,model:this.pressModel}),this.loop(te)},50))}endPress(){clearTimeout(this.timeout),this.isLongPressing=!1,this.pressing=!1,this._destroySubscription(),this.longPressEnd.emit({model:this.pressModel})}onMouseup(){this.endPress()}ngOnDestroy(){this._destroySubscription()}_destroySubscription(){this.subscription&&(this.subscription.unsubscribe(),this.subscription=void 0)}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275dir=r.lG2({type:ut,selectors:[["","long-press",""]],hostVars:4,hostBindings:function(te,Ue){1&te&&r.NdJ("mousedown",function(hn){return Ue.onMouseDown(hn)}),2&te&&r.ekj("press",Ue.press)("longpress",Ue.isLongPress)},inputs:{pressEnabled:"pressEnabled",duration:"duration",pressModel:"pressModel"},outputs:{longPressStart:"longPressStart",longPressing:"longPressing",longPressEnd:"longPressEnd"}}),ut})(),vr=(()=>{class ut{constructor(te,Ue,jt){this.ngZone=te,this.renderer=jt,this.scrollbarV=!1,this.scrollbarH=!1,this.scroll=new r.vpe,this.scrollYPos=0,this.scrollXPos=0,this.prevScrollYPos=0,this.prevScrollXPos=0,this._scrollEventListener=null,this.element=Ue.nativeElement}ngOnInit(){if(this.scrollbarV||this.scrollbarH){const te=this.renderer;this.parentElement=te.parentNode(te.parentNode(this.element)),this._scrollEventListener=this.onScrolled.bind(this),this.parentElement.addEventListener("scroll",this._scrollEventListener)}}ngOnDestroy(){this._scrollEventListener&&(this.parentElement.removeEventListener("scroll",this._scrollEventListener),this._scrollEventListener=null)}setOffset(te){this.parentElement&&(this.parentElement.scrollTop=te)}onScrolled(te){const Ue=te.currentTarget;requestAnimationFrame(()=>{this.scrollYPos=Ue.scrollTop,this.scrollXPos=Ue.scrollLeft,this.updateOffset()})}updateOffset(){let te;this.scrollYPos<this.prevScrollYPos?te="down":this.scrollYPos>this.prevScrollYPos&&(te="up"),this.scroll.emit({direction:te,scrollYPos:this.scrollYPos,scrollXPos:this.scrollXPos}),this.prevScrollYPos=this.scrollYPos,this.prevScrollXPos=this.scrollXPos}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.R0b),r.Y36(r.SBq),r.Y36(r.Qsj))},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-scroller"]],hostAttrs:[1,"datatable-scroll"],hostVars:4,hostBindings:function(te,Ue){2&te&&r.Udp("height",Ue.scrollHeight,"px")("width",Ue.scrollWidth,"px")},inputs:{scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",scrollHeight:"scrollHeight",scrollWidth:"scrollWidth"},outputs:{scroll:"scroll"},ngContentSelectors:S,decls:1,vars:0,template:function(te,Ue){1&te&&(r.F$t(),r.Hsn(0))},encapsulation:2,changeDetection:0}),ut})(),Ji=(()=>{class ut{constructor(te){this.template=te}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.Rgc))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","ngx-datatable-group-header-template",""]]}),ut})(),mn=(()=>{class ut{constructor(){this.rowHeight=0,this.toggle=new r.vpe}get template(){return this._templateInput||this._templateQuery}toggleExpandGroup(te){this.toggle.emit({type:"group",value:te})}expandAllGroups(){this.toggle.emit({type:"all",value:!0})}collapseAllGroups(){this.toggle.emit({type:"all",value:!1})}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275dir=r.lG2({type:ut,selectors:[["ngx-datatable-group-header"]],contentQueries:function(te,Ue,jt){if(1&te&&r.Suo(jt,Ji,7,r.Rgc),2&te){let hn;r.iGM(hn=r.CRH())&&(Ue._templateQuery=hn.first)}},inputs:{rowHeight:"rowHeight",_templateInput:["template","_templateInput"]},outputs:{toggle:"toggle"}}),ut})();function Rn(){return""}function Wn(ut){return null==ut?Rn:"number"==typeof ut?et:-1!==ut.indexOf(".")?Re:Le}function et(ut,pn){if(null==ut)return"";if(!ut||null==pn)return ut;const te=ut[pn];return null==te?"":te}function Le(ut,pn){if(null==ut)return"";if(!ut||!pn)return ut;const te=ut[pn];return null==te?"":te}function Re(ut,pn){if(null==ut)return"";if(!ut||!pn)return ut;let te=ut[pn];if(void 0!==te)return te;te=ut;const Ue=pn.split(".");if(Ue.length)for(let jt=0;jt<Ue.length;jt++)if(te=te[Ue[jt]],null==te)return"";return te}function Se(ut){return ut&&(pn=>Wn(ut)(pn,ut))}function dt(ut,pn,te){if(pn&&te){const Ue={},jt=ut.length;let hn=null;Ue[0]=new st;const ii=ut.reduce((ki,_s)=>{const Vo=te(_s);return-1===ki.indexOf(Vo)&&ki.push(Vo),ki},[]);for(let ki=0;ki<jt;ki++)Ue[te(ut[ki])]=new st(ut[ki]);for(let ki=0;ki<jt;ki++){hn=Ue[te(ut[ki])];let _s=0;const Vo=pn(hn.row);!!Vo&&ii.indexOf(Vo)>-1&&(_s=Vo),hn.parent=Ue[_s],hn.row.level=hn.parent.row.level+1,hn.parent.children.push(hn)}let Oi=[];return Ue[0].flatten(function(){Oi=[...Oi,this.row]},!0),Oi}return ut}class st{constructor(pn=null){pn||(pn={level:-1,treeStatus:"expanded"}),this.row=pn,this.parent=null,this.children=[]}flatten(pn,te){if("expanded"===this.row.treeStatus)for(let Ue=0,jt=this.children.length;Ue<jt;Ue++){const hn=this.children[Ue];pn.apply(hn,Array.prototype.slice.call(arguments,2)),te&&hn.flatten.apply(hn,arguments)}}}function nn(ut){return(ut=(ut=(ut=ut.replace(/[^a-zA-Z0-9 ]/g," ")).replace(/([a-z](?=[A-Z]))/g,"$1 ")).replace(/([^a-zA-Z0-9 ])|^[0-9]+/g,"").trim().toLowerCase()).replace(/([ 0-9]+)([a-zA-Z])/g,function(pn,te,Ue){return te.trim()+Ue.toUpperCase()})}function Fe(ut){return ut.replace(/([A-Z])/g,pn=>` ${pn}`).replace(/^./,pn=>pn.toUpperCase())}function ti(ut){if(!ut)return;let pn=!1;for(const te of ut)te.$$id||(te.$$id=("0000"+(Math.random()*Math.pow(36,4)<<0).toString(36)).slice(-4)),Ut(te.prop)&&te.name&&(te.prop=nn(te.name)),te.$$valueGetter||(te.$$valueGetter=Wn(te.prop)),!Ut(te.prop)&&Ut(te.name)&&(te.name=Fe(String(te.prop))),Ut(te.prop)&&Ut(te.name)&&(te.name=""),te.hasOwnProperty("resizeable")||(te.resizeable=!0),te.hasOwnProperty("sortable")||(te.sortable=!0),te.hasOwnProperty("draggable")||(te.draggable=!0),te.hasOwnProperty("canAutoResize")||(te.canAutoResize=!0),te.hasOwnProperty("width")||(te.width=150),te.hasOwnProperty("isTreeColumn")&&te.isTreeColumn&&!pn?pn=!0:te.isTreeColumn=!1}function Ut(ut){return null==ut}var Et=(()=>{return(ut=Et||(Et={})).standard="standard",ut.flex="flex",ut.force="force",Et;var ut})(),$t=(()=>{return(ut=$t||($t={})).single="single",ut.multi="multi",ut.multiClick="multiClick",ut.cell="cell",ut.checkbox="checkbox",$t;var ut})(),_t=(()=>{return(ut=_t||(_t={})).single="single",ut.multi="multi",_t;var ut})(),yt=(()=>{return(ut=yt||(yt={})).header="header",ut.body="body",yt;var ut})();let Vt=(()=>{class ut{constructor(te){this.template=te}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.Rgc))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","ngx-datatable-header-template",""]]}),ut})(),yn=(()=>{class ut{constructor(te){this.template=te}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.Rgc))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","ngx-datatable-cell-template",""]]}),ut})(),Cr=(()=>{class ut{constructor(te){this.template=te}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.Rgc))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","ngx-datatable-tree-toggle",""]]}),ut})(),xi=(()=>{class ut{constructor(te){this.columnChangesService=te,this.isFirstChange=!0}get cellTemplate(){return this._cellTemplateInput||this._cellTemplateQuery}get headerTemplate(){return this._headerTemplateInput||this._headerTemplateQuery}get treeToggleTemplate(){return this._treeToggleTemplateInput||this._treeToggleTemplateQuery}ngOnChanges(){this.isFirstChange?this.isFirstChange=!1:this.columnChangesService.onInputChange()}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(vn))},ut.\u0275dir=r.lG2({type:ut,selectors:[["ngx-datatable-column"]],contentQueries:function(te,Ue,jt){if(1&te&&(r.Suo(jt,yn,7,r.Rgc),r.Suo(jt,Vt,7,r.Rgc),r.Suo(jt,Cr,7,r.Rgc)),2&te){let hn;r.iGM(hn=r.CRH())&&(Ue._cellTemplateQuery=hn.first),r.iGM(hn=r.CRH())&&(Ue._headerTemplateQuery=hn.first),r.iGM(hn=r.CRH())&&(Ue._treeToggleTemplateQuery=hn.first)}},inputs:{name:"name",prop:"prop",frozenLeft:"frozenLeft",frozenRight:"frozenRight",flexGrow:"flexGrow",resizeable:"resizeable",comparator:"comparator",pipe:"pipe",sortable:"sortable",draggable:"draggable",canAutoResize:"canAutoResize",minWidth:"minWidth",width:"width",maxWidth:"maxWidth",checkboxable:"checkboxable",headerCheckboxable:"headerCheckboxable",headerClass:"headerClass",cellClass:"cellClass",isTreeColumn:"isTreeColumn",treeLevelIndent:"treeLevelIndent",summaryFunc:"summaryFunc",summaryTemplate:"summaryTemplate",_cellTemplateInput:["cellTemplate","_cellTemplateInput"],_headerTemplateInput:["headerTemplate","_headerTemplateInput"],_treeToggleTemplateInput:["treeToggleTemplate","_treeToggleTemplateInput"]},features:[r.TTD]}),ut})(),yi=(()=>{class ut{constructor(te){this.template=te}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.Rgc))},ut.\u0275dir=r.lG2({type:ut,selectors:[["","ngx-datatable-row-detail-template",""]]}),ut})(),Yo=(()=>{class ut{constructor(){this.rowHeight=0,this.toggle=new r.vpe}get template(){return this._templateInput||this._templateQuery}toggleExpandRow(te){this.toggle.emit({type:"row",value:te})}expandAllRows(){this.toggle.emit({type:"all",value:!0})}collapseAllRows(){this.toggle.emit({type:"all",value:!1})}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275dir=r.lG2({type:ut,selectors:[["ngx-datatable-row-detail"]],contentQueries:function(te,Ue,jt){if(1&te&&r.Suo(jt,yi,7,r.Rgc),2&te){let hn;r.iGM(hn=r.CRH())&&(Ue._templateQuery=hn.first)}},inputs:{rowHeight:"rowHeight",_templateInput:["template","_templateInput"]},outputs:{toggle:"toggle"}}),ut})(),Qo=(()=>{class ut{get template(){return this._templateInput||this._templateQuery}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275dir=r.lG2({type:ut,selectors:[["ngx-datatable-footer"]],contentQueries:function(te,Ue,jt){if(1&te&&r.Suo(jt,Zn,5,r.Rgc),2&te){let hn;r.iGM(hn=r.CRH())&&(Ue._templateQuery=hn.first)}},inputs:{footerHeight:"footerHeight",totalMessage:"totalMessage",selectedMessage:"selectedMessage",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon",_templateInput:["template","_templateInput"]}}),ut})();function lo(ut){const pn={left:[],center:[],right:[]};if(ut)for(const te of ut)te.frozenLeft?pn.left.push(te):te.frozenRight?pn.right.push(te):pn.center.push(te);return pn}function Ri(ut,pn){return{left:ko(ut.left),center:ko(ut.center),right:ko(ut.right),total:Math.floor(ko(pn))}}function ko(ut,pn){let te=0;if(ut)for(const Ue of ut)te+=parseFloat(pn&&Ue[pn]?Ue[pn]:Ue.width);return te}function ir(ut){const pn=[],te=lo(ut);return pn.push({type:"left",columns:te.left}),pn.push({type:"center",columns:te.center}),pn.push({type:"right",columns:te.right}),pn}class si{constructor(){this.treeArray=[]}clearCache(){this.treeArray=[]}initCache(pn){const{rows:te,rowHeight:Ue,detailRowHeight:jt,externalVirtual:hn,rowCount:ii,rowIndexes:Oi,rowExpansions:ki}=pn,_s="function"==typeof Ue,Vo="function"==typeof jt;if(!_s&&isNaN(Ue))throw new Error(`Row Height cache initialization failed. Please ensure that 'rowHeight' is a\n        valid number or function value: (${Ue}) when 'scrollbarV' is enabled.`);if(!Vo&&isNaN(jt))throw new Error(`Row Height cache initialization failed. Please ensure that 'detailRowHeight' is a\n        valid number or function value: (${jt}) when 'scrollbarV' is enabled.`);const Fs=hn?ii:te.length;this.treeArray=new Array(Fs);for(let Ks=0;Ks<Fs;++Ks)this.treeArray[Ks]=0;for(let Ks=0;Ks<Fs;++Ks){const hl=te[Ks];let sl=Ue;_s&&(sl=Ue(hl));const Jl=ki.has(hl);hl&&Jl&&(sl+=Vo?jt(hl,Oi.get(hl)):jt),this.update(Ks,sl)}}getRowIndex(pn){return 0===pn?0:this.calcRowIndex(pn)}update(pn,te){if(!this.treeArray.length)throw new Error(`Update at index ${pn} with value ${te} failed:\n        Row Height cache not initialized.`);const Ue=this.treeArray.length;for(pn|=0;pn<Ue;)this.treeArray[pn]+=te,pn|=pn+1}query(pn){if(!this.treeArray.length)throw new Error(`query at index ${pn} failed: Fenwick tree array not initialized.`);let te=0;for(pn|=0;pn>=0;)te+=this.treeArray[pn],pn=(pn&pn+1)-1;return te}queryBetween(pn,te){return this.query(te)-this.query(pn-1)}calcRowIndex(pn){if(!this.treeArray.length)return 0;let te=-1;const Ue=this.treeArray.length;for(let hn=Math.pow(2,Ue.toString(2).length-1);0!==hn;hn>>=1){const ii=te+hn;ii<Ue&&pn>=this.treeArray[ii]&&(pn-=this.treeArray[ii],te=ii)}return te+1}}const kn={},nr="undefined"!=typeof document?document.createElement("div").style:void 0,ao=function(){const ut="undefined"!=typeof window?window.getComputedStyle(document.documentElement,""):void 0,pn=void 0!==ut?Array.prototype.slice.call(ut).join("").match(/-(moz|webkit|ms)-/):null,te=null!==pn?pn[1]:void 0,Ue=void 0!==te?"WebKit|Moz|MS|O".match(new RegExp("("+te+")","i"))[1]:void 0;return Ue?{dom:Ue,lowercase:te,css:`-${te}-`,js:te[0].toUpperCase()+te.substr(1)}:void 0}();function $i(ut){const pn=nn(ut);return kn[pn]||(void 0!==ao&&void 0!==nr[ao.css+ut]?kn[pn]=ao.css+ut:void 0!==nr[ut]&&(kn[pn]=ut)),kn[pn]}const Eo="undefined"!=typeof window?$i("transform"):void 0,mo="undefined"!=typeof window?$i("backfaceVisibility"):void 0,Go="undefined"!=typeof window?!!$i("transform"):void 0,ua="undefined"!=typeof window?!!$i("perspective"):void 0,or="undefined"!=typeof window?window.navigator.userAgent:"Chrome",Mr=/Safari\//.test(or)&&!/Chrome\//.test(or);function Ar(ut,pn,te){void 0!==Eo&&Go?!Mr&&ua?(ut[Eo]=`translate3d(${pn}px, ${te}px, 0)`,ut[mo]="hidden"):ut[nn(Eo)]=`translate(${pn}px, ${te}px)`:(ut.top=`${te}px`,ut.left=`${pn}px`)}let cr=(()=>{class ut{constructor(te){this.cd=te,this.selected=[],this.scroll=new r.vpe,this.page=new r.vpe,this.activate=new r.vpe,this.select=new r.vpe,this.detailToggle=new r.vpe,this.rowContextmenu=new r.vpe(!1),this.treeAction=new r.vpe,this.rowHeightsCache=new si,this.temp=[],this.offsetY=0,this.indexes={},this.rowIndexes=new WeakMap,this.rowExpansions=[],this.getDetailRowHeight=(Ue,jt)=>{if(!this.rowDetail)return 0;const hn=this.rowDetail.rowHeight;return"function"==typeof hn?hn(Ue,jt):hn},this.rowTrackingFn=(Ue,jt)=>{const hn=this.getRowIndex(jt);return this.trackByProp?jt[this.trackByProp]:hn}}set pageSize(te){this._pageSize=te,this.recalcLayout()}get pageSize(){return this._pageSize}set rows(te){this._rows=te,this.recalcLayout()}get rows(){return this._rows}set columns(te){this._columns=te;const Ue=lo(te);this.columnGroupWidths=Ri(Ue,te)}get columns(){return this._columns}set offset(te){this._offset=te,(!this.scrollbarV||this.scrollbarV&&!this.virtualization)&&this.recalcLayout()}get offset(){return this._offset}set rowCount(te){this._rowCount=te,this.recalcLayout()}get rowCount(){return this._rowCount}get bodyWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}set bodyHeight(te){this._bodyHeight=this.scrollbarV?te+"px":"auto",this.recalcLayout()}get bodyHeight(){return this._bodyHeight}get selectEnabled(){return!!this.selectionType}get scrollHeight(){if(this.scrollbarV&&this.virtualization&&this.rowCount)return this.rowHeightsCache.query(this.rowCount-1)}ngOnInit(){this.rowDetail&&(this.listener=this.rowDetail.toggle.subscribe(({type:te,value:Ue})=>{"row"===te&&this.toggleRowExpansion(Ue),"all"===te&&this.toggleAllRows(Ue),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()})),this.groupHeader&&(this.listener=this.groupHeader.toggle.subscribe(({type:te,value:Ue})=>{"group"===te&&this.toggleRowExpansion(Ue),"all"===te&&this.toggleAllRows(Ue),this.updateIndexes(),this.updateRows(),this.cd.markForCheck()}))}ngOnDestroy(){(this.rowDetail||this.groupHeader)&&this.listener.unsubscribe()}updateOffsetY(te){this.scroller&&(this.scrollbarV&&this.virtualization&&te?te=this.rowHeightsCache.query(this.pageSize*te-1):this.scrollbarV&&!this.virtualization&&(te=0),this.scroller.setOffset(te||0))}onBodyScroll(te){const Ue=te.scrollYPos,jt=te.scrollXPos;(this.offsetY!==Ue||this.offsetX!==jt)&&this.scroll.emit({offsetY:Ue,offsetX:jt}),this.offsetY=Ue,this.offsetX=jt,this.updateIndexes(),this.updatePage(te.direction),this.updateRows()}updatePage(te){let Ue=this.indexes.first/this.pageSize;"up"===te?Ue=Math.ceil(Ue):"down"===te&&(Ue=Math.floor(Ue)),void 0!==te&&!isNaN(Ue)&&this.page.emit({offset:Ue})}updateRows(){const{first:te,last:Ue}=this.indexes;let jt=te,hn=0;const ii=[];if(this.groupedRows){let Oi=3;for(1===this.groupedRows.length&&(Oi=this.groupedRows[0].value.length);jt<Ue&&jt<this.groupedRows.length;){const ki=this.groupedRows[jt];this.rowIndexes.set(ki,jt),ki.value&&ki.value.forEach((_s,Vo)=>{this.rowIndexes.set(_s,`${jt}-${Vo}`)}),ii[hn]=ki,hn++,jt++}}else for(;jt<Ue&&jt<this.rowCount;){const Oi=this.rows[jt];Oi&&(this.rowIndexes.set(Oi,jt),ii[hn]=Oi),hn++,jt++}this.temp=ii}getRowHeight(te){return"function"==typeof this.rowHeight?this.rowHeight(te):this.rowHeight}getGroupHeight(te){let Ue=0;if(te.value)for(let jt=0;jt<te.value.length;jt++)Ue+=this.getRowAndDetailHeight(te.value[jt]);return Ue}getRowAndDetailHeight(te){let Ue=this.getRowHeight(te);return this.getRowExpanded(te)&&(Ue+=this.getDetailRowHeight(te)),Ue}getRowsStyles(te){const Ue={};if(this.groupedRows&&(Ue.width=this.columnGroupWidths.total),this.scrollbarV&&this.virtualization){let jt=0;if(this.groupedRows){const ii=te[te.length-1];jt=ii?this.getRowIndex(ii):0}else jt=this.getRowIndex(te);Ar(Ue,0,this.rowHeightsCache.query(jt-1))}return Ue}getBottomSummaryRowStyles(){if(!this.scrollbarV||!this.rows||!this.rows.length)return null;const te={position:"absolute"};return Ar(te,0,this.rowHeightsCache.query(this.rows.length-1)),te}hideIndicator(){setTimeout(()=>this.loadingIndicator=!1,500)}updateIndexes(){let te=0,Ue=0;if(this.scrollbarV)if(this.virtualization){const jt=parseInt(this.bodyHeight,0);te=this.rowHeightsCache.getRowIndex(this.offsetY),Ue=this.rowHeightsCache.getRowIndex(jt+this.offsetY)+1}else te=0,Ue=this.rowCount;else this.externalPaging||(te=Math.max(this.offset*this.pageSize,0)),Ue=Math.min(te+this.pageSize,this.rowCount);this.indexes={first:te,last:Ue}}refreshRowHeightCache(){if(this.scrollbarV&&(!this.scrollbarV||this.virtualization)&&(this.rowHeightsCache.clearCache(),this.rows&&this.rows.length)){const te=new Set;for(const Ue of this.rows)this.getRowExpanded(Ue)&&te.add(Ue);this.rowHeightsCache.initCache({rows:this.rows,rowHeight:this.rowHeight,detailRowHeight:this.getDetailRowHeight,externalVirtual:this.scrollbarV&&this.externalPaging,rowCount:this.rowCount,rowIndexes:this.rowIndexes,rowExpansions:te})}}getAdjustedViewPortIndex(){const te=this.indexes.first;return this.scrollbarV&&this.virtualization&&this.rowHeightsCache.query(te-1)<=this.offsetY?te-1:te}toggleRowExpansion(te){const Ue=this.getAdjustedViewPortIndex(),jt=this.getRowExpandedIdx(te,this.rowExpansions),hn=jt>-1;if(this.scrollbarV&&this.virtualization){const ii=this.getDetailRowHeight(te)*(hn?-1:1),Oi=this.getRowIndex(te);this.rowHeightsCache.update(Oi,ii)}hn?this.rowExpansions.splice(jt,1):this.rowExpansions.push(te),this.detailToggle.emit({rows:[te],currentIndex:Ue})}toggleAllRows(te){this.rowExpansions=[];const Ue=this.getAdjustedViewPortIndex();if(te)for(const jt of this.rows)this.rowExpansions.push(jt);this.scrollbarV&&this.recalcLayout(),this.detailToggle.emit({rows:this.rows,currentIndex:Ue})}recalcLayout(){this.refreshRowHeightCache(),this.updateIndexes(),this.updateRows()}columnTrackingFn(te,Ue){return Ue.$$id}stylesByGroup(te){const Ue=this.columnGroupWidths,jt=this.offsetX,hn={width:`${Ue[te]}px`};if("left"===te)Ar(hn,jt,0);else if("right"===te){const ii=parseInt(this.innerWidth+"",0);Ar(hn,-1*(Ue.total-ii-jt),0)}return hn}getRowExpanded(te){if(0===this.rowExpansions.length&&this.groupExpansionDefault)for(const Ue of this.groupedRows)this.rowExpansions.push(Ue);return this.getRowExpandedIdx(te,this.rowExpansions)>-1}getRowExpandedIdx(te,Ue){if(!Ue||!Ue.length)return-1;const jt=this.rowIdentity(te);return Ue.findIndex(hn=>this.rowIdentity(hn)===jt)}getRowIndex(te){return this.rowIndexes.get(te)||0}onTreeAction(te){this.treeAction.emit({row:te})}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.sBO))},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-body"]],viewQuery:function(te,Ue){if(1&te&&r.Gf(vr,5),2&te){let jt;r.iGM(jt=r.CRH())&&(Ue.scroller=jt.first)}},hostAttrs:[1,"datatable-body"],hostVars:4,hostBindings:function(te,Ue){2&te&&r.Udp("width",Ue.bodyWidth)("height",Ue.bodyHeight)},inputs:{selected:"selected",pageSize:"pageSize",rows:"rows",columns:"columns",offset:"offset",rowCount:"rowCount",bodyHeight:"bodyHeight",offsetX:"offsetX",loadingIndicator:"loadingIndicator",scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",externalPaging:"externalPaging",rowHeight:"rowHeight",emptyMessage:"emptyMessage",selectionType:"selectionType",rowIdentity:"rowIdentity",rowDetail:"rowDetail",groupHeader:"groupHeader",selectCheck:"selectCheck",displayCheck:"displayCheck",trackByProp:"trackByProp",rowClass:"rowClass",groupedRows:"groupedRows",groupExpansionDefault:"groupExpansionDefault",innerWidth:"innerWidth",groupRowsBy:"groupRowsBy",virtualization:"virtualization",summaryRow:"summaryRow",summaryPosition:"summaryPosition",summaryHeight:"summaryHeight"},outputs:{scroll:"scroll",page:"page",activate:"activate",select:"select",detailToggle:"detailToggle",rowContextmenu:"rowContextmenu",treeAction:"treeAction"},decls:5,vars:9,consts:[[4,"ngIf"],[3,"selected","rows","selectCheck","selectEnabled","selectionType","rowIdentity","select","activate"],["selector",""],[3,"scrollbarV","scrollbarH","scrollHeight","scrollWidth","scroll",4,"ngIf"],["class","empty-row",3,"innerHTML",4,"ngIf"],[3,"scrollbarV","scrollbarH","scrollHeight","scrollWidth","scroll"],[3,"rowHeight","offsetX","innerWidth","rows","columns",4,"ngIf"],[3,"groupedRows","innerWidth","ngStyle","rowDetail","groupHeader","offsetX","detailRowHeight","row","expanded","rowIndex","rowContextmenu",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle","rowHeight","offsetX","innerWidth","rows","columns",4,"ngIf"],[3,"rowHeight","offsetX","innerWidth","rows","columns"],[3,"groupedRows","innerWidth","ngStyle","rowDetail","groupHeader","offsetX","detailRowHeight","row","expanded","rowIndex","rowContextmenu"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","rowIndex","expanded","rowClass","displayCheck","treeStatus","treeAction","activate",4,"ngIf","ngIfElse"],["groupedRowsTemplate",""],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","rowIndex","expanded","rowClass","displayCheck","treeStatus","treeAction","activate"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","group","rowIndex","expanded","rowClass","activate",4,"ngFor","ngForOf","ngForTrackBy"],["tabindex","-1",3,"isSelected","innerWidth","offsetX","columns","rowHeight","row","group","rowIndex","expanded","rowClass","activate"],[3,"ngStyle","rowHeight","offsetX","innerWidth","rows","columns"],[1,"empty-row",3,"innerHTML"]],template:function(te,Ue){1&te&&(r.YNc(0,M,1,0,"datatable-progress",0),r.TgZ(1,"datatable-selection",1,2),r.NdJ("select",function(hn){return Ue.select.emit(hn)})("activate",function(hn){return Ue.activate.emit(hn)}),r.YNc(3,ue,4,8,"datatable-scroller",3),r.YNc(4,re,1,1,"div",4),r.qZA()),2&te&&(r.Q6J("ngIf",Ue.loadingIndicator),r.xp6(1),r.Q6J("selected",Ue.selected)("rows",Ue.rows)("selectCheck",Ue.selectCheck)("selectEnabled",Ue.selectEnabled)("selectionType",Ue.selectionType)("rowIdentity",Ue.rowIdentity),r.xp6(2),r.Q6J("ngIf",null==Ue.rows?null:Ue.rows.length),r.xp6(1),r.Q6J("ngIf",!(null!=Ue.rows&&Ue.rows.length||Ue.loadingIndicator)))},directives:function(){return[a.O5,yl,$o,vr,hs,a.sg,Wa,a.PC,ys]},encapsulation:2,changeDetection:0}),ut})(),pi=(()=>{class ut{constructor(te){this.cd=te,this.sort=new r.vpe,this.reorder=new r.vpe,this.resize=new r.vpe,this.select=new r.vpe,this.columnContextmenu=new r.vpe(!1),this._columnGroupWidths={total:100},this._styleByGroup={left:{},center:{},right:{}},this.destroyed=!1}set innerWidth(te){this._innerWidth=te,setTimeout(()=>{if(this._columns){const Ue=lo(this._columns);this._columnGroupWidths=Ri(Ue,this._columns),this.setStylesByGroup()}})}get innerWidth(){return this._innerWidth}set headerHeight(te){this._headerHeight="auto"!==te?`${te}px`:te}get headerHeight(){return this._headerHeight}set columns(te){this._columns=te;const Ue=lo(te);this._columnsByPin=ir(te),setTimeout(()=>{this._columnGroupWidths=Ri(Ue,te),this.setStylesByGroup()})}get columns(){return this._columns}set offsetX(te){this._offsetX=te,this.setStylesByGroup()}get offsetX(){return this._offsetX}ngOnDestroy(){this.destroyed=!0}onLongPressStart({event:te,model:Ue}){Ue.dragging=!0,this.dragEventTarget=te}onLongPressEnd({event:te,model:Ue}){this.dragEventTarget=te,setTimeout(()=>{const jt=this._columns.find(hn=>hn.$$id===Ue.$$id);jt&&(jt.dragging=!1)},5)}get headerWidth(){return this.scrollbarH?this.innerWidth+"px":"100%"}trackByGroups(te,Ue){return Ue.type}columnTrackingFn(te,Ue){return Ue.$$id}onColumnResized(te,Ue){te<=Ue.minWidth?te=Ue.minWidth:te>=Ue.maxWidth&&(te=Ue.maxWidth),this.resize.emit({column:Ue,prevValue:Ue.width,newValue:te})}onColumnReordered({prevIndex:te,newIndex:Ue,model:jt}){const hn=this.getColumn(Ue);hn.isTarget=!1,hn.targetMarkerContext=void 0,this.reorder.emit({column:jt,prevValue:te,newValue:Ue})}onTargetChanged({prevIndex:te,newIndex:Ue,initialIndex:jt}){if(te||0===te){const hn=this.getColumn(te);hn.isTarget=!1,hn.targetMarkerContext=void 0}if(Ue||0===Ue){const hn=this.getColumn(Ue);hn.isTarget=!0,jt!==Ue&&(hn.targetMarkerContext={class:"targetMarker ".concat(jt>Ue?"dragFromRight":"dragFromLeft")})}}getColumn(te){const Ue=this._columnsByPin[0].columns.length;if(te<Ue)return this._columnsByPin[0].columns[te];const jt=this._columnsByPin[1].columns.length;return te<Ue+jt?this._columnsByPin[1].columns[te-Ue]:this._columnsByPin[2].columns[te-Ue-jt]}onSort({column:te,prevValue:Ue,newValue:jt}){if(te.dragging)return;const hn=this.calcNewSorts(te,Ue,jt);this.sort.emit({sorts:hn,column:te,prevValue:Ue,newValue:jt})}calcNewSorts(te,Ue,jt){let hn=0;this.sorts||(this.sorts=[]);const ii=this.sorts.map((Oi,ki)=>((Oi=Object.assign({},Oi)).prop===te.prop&&(hn=ki),Oi));return void 0===jt?ii.splice(hn,1):Ue?ii[hn].dir=jt:(this.sortType===_t.single&&ii.splice(0,this.sorts.length),ii.push({dir:jt,prop:te.prop})),ii}setStylesByGroup(){this._styleByGroup.left=this.calcStylesByGroup("left"),this._styleByGroup.center=this.calcStylesByGroup("center"),this._styleByGroup.right=this.calcStylesByGroup("right"),this.destroyed||this.cd.detectChanges()}calcStylesByGroup(te){const Ue=this._columnGroupWidths,hn={width:`${Ue[te]}px`};return"center"===te?Ar(hn,-1*this.offsetX,0):"right"===te&&Ar(hn,-1*(Ue.total-this.innerWidth),0),hn}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.sBO))},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-header"]],hostAttrs:[1,"datatable-header"],hostVars:4,hostBindings:function(te,Ue){2&te&&r.Udp("height",Ue.headerHeight)("width",Ue.headerWidth)},inputs:{innerWidth:"innerWidth",headerHeight:"headerHeight",columns:"columns",offsetX:"offsetX",sorts:"sorts",sortAscendingIcon:"sortAscendingIcon",sortDescendingIcon:"sortDescendingIcon",sortUnsetIcon:"sortUnsetIcon",scrollbarH:"scrollbarH",dealsWithGroup:"dealsWithGroup",targetMarkerTemplate:"targetMarkerTemplate",sortType:"sortType",allRowsSelected:"allRowsSelected",selectionType:"selectionType",reorderable:"reorderable"},outputs:{sort:"sort",reorder:"reorder",resize:"resize",select:"select",columnContextmenu:"columnContextmenu"},decls:2,vars:4,consts:[["orderable","",1,"datatable-header-inner",3,"reorder","targetChanged"],[3,"class","ngStyle",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle"],["resizeable","","long-press","","draggable","",3,"resizeEnabled","pressModel","pressEnabled","dragX","dragY","dragModel","dragEventTarget","headerHeight","isTarget","targetMarkerTemplate","targetMarkerContext","column","sortType","sorts","selectionType","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","resize","longPressStart","longPressEnd","sort","select","columnContextmenu",4,"ngFor","ngForOf","ngForTrackBy"],["resizeable","","long-press","","draggable","",3,"resizeEnabled","pressModel","pressEnabled","dragX","dragY","dragModel","dragEventTarget","headerHeight","isTarget","targetMarkerTemplate","targetMarkerContext","column","sortType","sorts","selectionType","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","resize","longPressStart","longPressEnd","sort","select","columnContextmenu"]],template:function(te,Ue){1&te&&(r.TgZ(0,"div",0),r.NdJ("reorder",function(hn){return Ue.onColumnReordered(hn)})("targetChanged",function(hn){return Ue.onTargetChanged(hn)}),r.YNc(1,se,2,5,"div",1),r.qZA()),2&te&&(r.Udp("width",Ue._columnGroupWidths.total,"px"),r.xp6(1),r.Q6J("ngForOf",Ue._columnsByPin)("ngForTrackBy",Ue.trackByGroups))},directives:function(){return[Gi,a.sg,a.PC,Ra,ri,ui,zn]},encapsulation:2,changeDetection:0}),ut})();function Sn(ut,pn,te){te=te||{};let Ue,jt,hn,ii=null,Oi=0;function ki(){Oi=!1===te.leading?0:+new Date,ii=null,hn=ut.apply(Ue,jt)}return function(){const _s=+new Date;!Oi&&!1===te.leading&&(Oi=_s);const Vo=pn-(_s-Oi);return Ue=this,jt=arguments,Vo<=0?(clearTimeout(ii),ii=null,Oi=_s,hn=ut.apply(Ue,jt)):!ii&&!1!==te.trailing&&(ii=setTimeout(ki,Vo)),hn}}function $n(ut,pn){return function(Ue,jt,hn){return{configurable:!0,enumerable:hn.enumerable,get:function(){return Object.defineProperty(this,jt,{configurable:!0,enumerable:hn.enumerable,value:Sn(hn.value,ut,pn)}),this[jt]}}}}function Ys(ut,pn){for(const te of pn){const Ue=ut.indexOf(te);ut.splice(Ue,1)}}function ds(ut,pn=300){let te=0;for(const Ue of ut)te+=Ue.width||pn;return te}var es=(()=>{return(ut=es||(es={})).asc="asc",ut.desc="desc",es;var ut})();function Ea(ut,pn){if(null==ut&&(ut=0),null==pn&&(pn=0),ut instanceof Date&&pn instanceof Date){if(ut<pn)return-1;if(ut>pn)return 1}else if(isNaN(parseFloat(ut))||!isFinite(ut)||isNaN(parseFloat(pn))||!isFinite(pn)){if(ut=String(ut),pn=String(pn),ut.toLowerCase()<pn.toLowerCase())return-1;if(ut.toLowerCase()>pn.toLowerCase())return 1}else{if(parseFloat(ut)<parseFloat(pn))return-1;if(parseFloat(ut)>parseFloat(pn))return 1}return 0}let sa=(()=>{class ut{constructor(te,Ue,jt,hn,ii,Oi,ki){this.scrollbarHelper=te,this.dimensionsHelper=Ue,this.cd=jt,this.columnChangesService=Oi,this.configuration=ki,this.selected=[],this.scrollbarV=!1,this.scrollbarH=!1,this.rowHeight=30,this.columnMode=Et.standard,this.headerHeight=30,this.footerHeight=0,this.externalPaging=!1,this.externalSorting=!1,this.loadingIndicator=!1,this.reorderable=!0,this.swapColumns=!0,this.sortType=_t.single,this.sorts=[],this.cssClasses={sortAscending:"datatable-icon-up",sortDescending:"datatable-icon-down",sortUnset:"datatable-icon-sort-unset",pagerLeftArrow:"datatable-icon-left",pagerRightArrow:"datatable-icon-right",pagerPrevious:"datatable-icon-prev",pagerNext:"datatable-icon-skip"},this.messages={emptyMessage:"No data to display",totalMessage:"total",selectedMessage:"selected"},this.groupExpansionDefault=!1,this.selectAllRowsOnPage=!1,this.virtualization=!0,this.summaryRow=!1,this.summaryHeight=30,this.summaryPosition="top",this.scroll=new r.vpe,this.activate=new r.vpe,this.select=new r.vpe,this.sort=new r.vpe,this.page=new r.vpe,this.reorder=new r.vpe,this.resize=new r.vpe,this.tableContextmenu=new r.vpe(!1),this.treeAction=new r.vpe,this.rowCount=0,this._offsetX=new e.X(0),this._count=0,this._offset=0,this._subscriptions=[],this.rowIdentity=_s=>this._groupRowsBy?_s.key:_s,this.element=hn.nativeElement,this.rowDiffer=ii.find({}).create(),this.configuration&&this.configuration.messages&&(this.messages=Object.assign({},this.configuration.messages))}set rows(te){this._rows=te,te&&(this._internalRows=[...te]),this.externalSorting||this.sortInternalRows(),this._internalRows=dt(this._internalRows,Se(this.treeFromRelation),Se(this.treeToRelation)),this.recalculate(),this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)),this.cd.markForCheck()}get rows(){return this._rows}set groupRowsBy(te){te&&(this._groupRowsBy=te,this._rows&&this._groupRowsBy&&(this.groupedRows=this.groupArrayBy(this._rows,this._groupRowsBy)))}get groupRowsBy(){return this._groupRowsBy}set columns(te){te&&(this._internalColumns=[...te],ti(this._internalColumns),this.recalculateColumns()),this._columns=te}get columns(){return this._columns}set limit(te){this._limit=te,this.recalculate()}get limit(){return this._limit}set count(te){this._count=te,this.recalculate()}get count(){return this._count}set offset(te){this._offset=te}get offset(){return Math.max(Math.min(this._offset,Math.ceil(this.rowCount/this.pageSize)-1),0)}get isFixedHeader(){const te=this.headerHeight;return"string"!=typeof te||"auto"!==te}get isFixedRow(){return"auto"!==this.rowHeight}get isVertScroll(){return this.scrollbarV}get isVirtualized(){return this.virtualization}get isHorScroll(){return this.scrollbarH}get isSelectable(){return void 0!==this.selectionType}get isCheckboxSelection(){return this.selectionType===$t.checkbox}get isCellSelection(){return this.selectionType===$t.cell}get isSingleSelection(){return this.selectionType===$t.single}get isMultiSelection(){return this.selectionType===$t.multi}get isMultiClickSelection(){return this.selectionType===$t.multiClick}set columnTemplates(te){this._columnTemplates=te,this.translateColumns(te)}get columnTemplates(){return this._columnTemplates}get allRowsSelected(){let te=this.rows&&this.selected&&this.selected.length===this.rows.length;if(this.bodyComponent&&this.selectAllRowsOnPage){const Ue=this.bodyComponent.indexes;te=this.selected.length===Ue.last-Ue.first}return this.selected&&this.rows&&0!==this.rows.length&&te}ngOnInit(){this.recalculate()}ngAfterViewInit(){this.externalSorting||this.sortInternalRows(),"undefined"!=typeof requestAnimationFrame&&requestAnimationFrame(()=>{this.recalculate(),this.externalPaging&&this.scrollbarV&&this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:0})})}ngAfterContentInit(){this.columnTemplates.changes.subscribe(te=>this.translateColumns(te)),this.listenForColumnInputChanges()}translateColumns(te){if(te){const Ue=te.toArray();Ue.length&&(this._internalColumns=function Dn(ut){const pn=[];for(const te of ut){const Ue={},jt=Object.getOwnPropertyNames(te);for(const hn of jt)Ue[hn]=te[hn];te.headerTemplate&&(Ue.headerTemplate=te.headerTemplate),te.cellTemplate&&(Ue.cellTemplate=te.cellTemplate),te.summaryFunc&&(Ue.summaryFunc=te.summaryFunc),te.summaryTemplate&&(Ue.summaryTemplate=te.summaryTemplate),pn.push(Ue)}return pn}(Ue),ti(this._internalColumns),this.recalculateColumns(),this.sortInternalRows(),this.cd.markForCheck())}}groupArrayBy(te,Ue){const jt=new Map;return te.forEach(Oi=>{const ki=Oi[Ue];jt.has(ki)?jt.get(ki).push(Oi):jt.set(ki,[Oi])}),Array.from(jt,Oi=>((Oi,ki)=>({key:Oi,value:ki}))(Oi[0],Oi[1]))}ngDoCheck(){this.rowDiffer.diff(this.rows)&&(this.externalSorting?this._internalRows=[...this.rows]:this.sortInternalRows(),this._internalRows=dt(this._internalRows,Se(this.treeFromRelation),Se(this.treeToRelation)),this.recalculatePages(),this.cd.markForCheck())}recalculate(){this.recalculateDims(),this.recalculateColumns(),this.cd.markForCheck()}onWindowResize(){this.recalculate()}recalculateColumns(te=this._internalColumns,Ue=-1,jt=this.scrollbarH){if(!te)return;let hn=this._innerWidth;return this.scrollbarV&&(hn-=this.scrollbarHelper.width),this.columnMode===Et.force?function Ro(ut,pn,te,Ue,jt=300){const hn=ut.slice(te+1,ut.length).filter(Ks=>!1!==Ks.canAutoResize);for(const Ks of hn)Ks.$$oldWidth||(Ks.$$oldWidth=Ks.width);let ii=0,Oi=!1,ki=ds(ut,jt),_s=pn-ki;const Vo=[];do{ii=_s/hn.length,Oi=ki>=pn;for(const Ks of hn){if(Oi&&Ue)Ks.width=Ks.$$oldWidth||Ks.width||jt;else{const hl=(Ks.width||jt)+ii;Ks.minWidth&&hl<Ks.minWidth?(Ks.width=Ks.minWidth,Vo.push(Ks)):Ks.maxWidth&&hl>Ks.maxWidth?(Ks.width=Ks.maxWidth,Vo.push(Ks)):Ks.width=hl}Ks.width=Math.max(0,Ks.width)}ki=ds(ut),_s=pn-ki,Ys(hn,Vo)}while(_s>1&&0!==hn.length)}(te,hn,Ue,jt):this.columnMode===Et.flex&&function ro(ut,pn){const te=function Xo(ut,pn){let te=0;for(const Ue of ut)te+=pn&&Ue[pn]?Ue[pn]:Ue.width;return te}(ut),Ue=function Jr(ut){let pn=0;for(const te of ut)pn+=te.flexGrow||0;return pn}(ut),jt=lo(ut);te!==pn&&function go(ut,pn,te){for(const hn in ut)for(const ii of ut[hn])ii.canAutoResize?ii.width=0:(pn-=ii.width,te-=ii.flexGrow?ii.flexGrow:0);const Ue={};let jt=pn;do{const hn=jt/te;jt=0;for(const ii in ut)for(const Oi of ut[ii])if(Oi.canAutoResize&&!Ue[Oi.prop]){const ki=Oi.width+Oi.flexGrow*hn;void 0!==Oi.minWidth&&ki<Oi.minWidth?(jt+=ki-Oi.minWidth,Oi.width=Oi.minWidth,Ue[Oi.prop]=!0):Oi.width=ki}}while(0!==jt)}(jt,pn,Ue)}(te,hn),te}recalculateDims(){const te=this.dimensionsHelper.getDimensions(this.element);if(this._innerWidth=Math.floor(te.width),this.scrollbarV){let Ue=te.height;this.headerHeight&&(Ue-=this.headerHeight),this.footerHeight&&(Ue-=this.footerHeight),this.bodyHeight=Ue}this.recalculatePages()}recalculatePages(){this.pageSize=this.calcPageSize(),this.rowCount=this.calcRowCount()}onBodyPage({offset:te}){this.externalPaging&&!this.virtualization||(this.offset=te,this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:this.offset}))}onBodyScroll(te){this._offsetX.next(te.offsetX),this.scroll.emit(te),this.cd.detectChanges()}onFooterPage(te){this.offset=te.page-1,this.bodyComponent.updateOffsetY(this.offset),this.page.emit({count:this.count,pageSize:this.pageSize,limit:this.limit,offset:this.offset}),this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected}))}calcPageSize(te=this.rows){if(this.scrollbarV&&this.virtualization){const Ue=Math.ceil(this.bodyHeight/this.rowHeight);return Math.max(Ue,0)}return void 0!==this.limit?this.limit:te?te.length:0}calcRowCount(te=this.rows){return this.externalPaging?this.count:te?this.groupedRows?this.groupedRows.length:null!=this.treeFromRelation&&null!=this.treeToRelation?this._internalRows.length:te.length:0}onColumnContextmenu({event:te,column:Ue}){this.tableContextmenu.emit({event:te,type:yt.header,content:Ue})}onRowContextmenu({event:te,row:Ue}){this.tableContextmenu.emit({event:te,type:yt.body,content:Ue})}onColumnResize({column:te,newValue:Ue}){if(void 0===te)return;let jt;const hn=this._internalColumns.map((ii,Oi)=>((ii=Object.assign({},ii)).$$id===te.$$id&&(jt=Oi,ii.width=Ue,ii.$$oldWidth=Ue),ii));this.recalculateColumns(hn,jt),this._internalColumns=hn,this.resize.emit({column:te,newValue:Ue})}onColumnReorder({column:te,newValue:Ue,prevValue:jt}){const hn=this._internalColumns.map(ii=>Object.assign({},ii));if(this.swapColumns){const ii=hn[Ue];hn[Ue]=te,hn[jt]=ii}else if(Ue>jt){const ii=hn[jt];for(let Oi=jt;Oi<Ue;Oi++)hn[Oi]=hn[Oi+1];hn[Ue]=ii}else{const ii=hn[jt];for(let Oi=jt;Oi>Ue;Oi--)hn[Oi]=hn[Oi-1];hn[Ue]=ii}this._internalColumns=hn,this.reorder.emit({column:te,newValue:Ue,prevValue:jt})}onColumnSort(te){this.selectAllRowsOnPage&&(this.selected=[],this.select.emit({selected:this.selected})),this.sorts=te.sorts,!1===this.externalSorting&&this.sortInternalRows(),this._internalRows=dt(this._internalRows,Se(this.treeFromRelation),Se(this.treeToRelation)),this.offset=0,this.bodyComponent.updateOffsetY(this.offset),this.sort.emit(te)}onHeaderSelect(te){if(this.bodyComponent&&this.selectAllRowsOnPage){const Ue=this.bodyComponent.indexes.first,jt=this.bodyComponent.indexes.last,hn=this.selected.length===jt-Ue;this.selected=[],hn||this.selected.push(...this._internalRows.slice(Ue,jt))}else{const Ue=this.selected.length===this.rows.length;this.selected=[],Ue||this.selected.push(...this.rows)}this.select.emit({selected:this.selected})}onBodySelect(te){this.select.emit(te)}onTreeAction(te){const Ue=te.row,jt=this._rows.findIndex(hn=>hn[this.treeToRelation]===te.row[this.treeToRelation]);this.treeAction.emit({row:Ue,rowIndex:jt})}ngOnDestroy(){this._subscriptions.forEach(te=>te.unsubscribe())}listenForColumnInputChanges(){this._subscriptions.push(this.columnChangesService.columnInputChanges$.subscribe(()=>{this.columnTemplates&&this.columnTemplates.notifyOnChanges()}))}sortInternalRows(){this._internalRows=function fa(ut,pn,te){if(!ut)return[];if(!te||!te.length||!pn)return[...ut];const Ue=new Map;ut.forEach((Oi,ki)=>Ue.set(Oi,ki));const jt=[...ut],hn=pn.reduce((Oi,ki)=>(ki.comparator&&"function"==typeof ki.comparator&&(Oi[ki.prop]=ki.comparator),Oi),{}),ii=te.map(Oi=>{const ki=Oi.prop;return{prop:ki,dir:Oi.dir,valueGetter:Wn(ki),compareFn:hn[ki]||Ea}});return jt.sort(function(Oi,ki){for(const _s of ii){const{prop:Vo,valueGetter:Fs}=_s,Ks=Fs(Oi,Vo),hl=Fs(ki,Vo),sl=_s.dir!==es.desc?_s.compareFn(Ks,hl,Oi,ki,_s.dir):-_s.compareFn(Ks,hl,Oi,ki,_s.dir);if(0!==sl)return sl}return Ue.has(Oi)&&Ue.has(ki)?Ue.get(Oi)<Ue.get(ki)?-1:1:0})}(this._internalRows,this._internalColumns,this.sorts)}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(Er,4),r.Y36(an,4),r.Y36(r.sBO),r.Y36(r.SBq),r.Y36(r.aQg),r.Y36(vn),r.Y36("configuration",8))},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["ngx-datatable"]],contentQueries:function(te,Ue,jt){if(1&te&&(r.Suo(jt,Yo,5),r.Suo(jt,mn,5),r.Suo(jt,Qo,5),r.Suo(jt,xi,4)),2&te){let hn;r.iGM(hn=r.CRH())&&(Ue.rowDetail=hn.first),r.iGM(hn=r.CRH())&&(Ue.groupHeader=hn.first),r.iGM(hn=r.CRH())&&(Ue.footer=hn.first),r.iGM(hn=r.CRH())&&(Ue.columnTemplates=hn)}},viewQuery:function(te,Ue){if(1&te&&(r.Gf(cr,5),r.Gf(pi,5)),2&te){let jt;r.iGM(jt=r.CRH())&&(Ue.bodyComponent=jt.first),r.iGM(jt=r.CRH())&&(Ue.headerComponent=jt.first)}},hostAttrs:[1,"ngx-datatable"],hostVars:22,hostBindings:function(te,Ue){1&te&&r.NdJ("resize",function(){return Ue.onWindowResize()},!1,r.Jf7),2&te&&r.ekj("fixed-header",Ue.isFixedHeader)("fixed-row",Ue.isFixedRow)("scroll-vertical",Ue.isVertScroll)("virtualized",Ue.isVirtualized)("scroll-horz",Ue.isHorScroll)("selectable",Ue.isSelectable)("checkbox-selection",Ue.isCheckboxSelection)("cell-selection",Ue.isCellSelection)("single-selection",Ue.isSingleSelection)("multi-selection",Ue.isMultiSelection)("multi-click-selection",Ue.isMultiClickSelection)},inputs:{selected:"selected",scrollbarV:"scrollbarV",scrollbarH:"scrollbarH",rowHeight:"rowHeight",columnMode:"columnMode",headerHeight:"headerHeight",footerHeight:"footerHeight",externalPaging:"externalPaging",externalSorting:"externalSorting",loadingIndicator:"loadingIndicator",reorderable:"reorderable",swapColumns:"swapColumns",sortType:"sortType",sorts:"sorts",cssClasses:"cssClasses",messages:"messages",groupExpansionDefault:"groupExpansionDefault",selectAllRowsOnPage:"selectAllRowsOnPage",virtualization:"virtualization",summaryRow:"summaryRow",summaryHeight:"summaryHeight",summaryPosition:"summaryPosition",rowIdentity:"rowIdentity",rows:"rows",groupedRows:"groupedRows",groupRowsBy:"groupRowsBy",columns:"columns",limit:"limit",count:"count",offset:"offset",targetMarkerTemplate:"targetMarkerTemplate",selectionType:"selectionType",rowClass:"rowClass",selectCheck:"selectCheck",displayCheck:"displayCheck",trackByProp:"trackByProp",treeFromRelation:"treeFromRelation",treeToRelation:"treeToRelation"},outputs:{scroll:"scroll",activate:"activate",select:"select",sort:"sort",page:"page",reorder:"reorder",resize:"resize",tableContextmenu:"tableContextmenu",treeAction:"treeAction"},decls:5,vars:34,consts:[["visibilityObserver","",3,"visible"],[3,"sorts","sortType","scrollbarH","innerWidth","offsetX","dealsWithGroup","columns","headerHeight","reorderable","targetMarkerTemplate","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","selectionType","sort","resize","reorder","select","columnContextmenu",4,"ngIf"],[3,"groupRowsBy","groupedRows","rows","groupExpansionDefault","scrollbarV","scrollbarH","virtualization","loadingIndicator","externalPaging","rowHeight","rowCount","offset","trackByProp","columns","pageSize","offsetX","rowDetail","groupHeader","selected","innerWidth","bodyHeight","selectionType","emptyMessage","rowIdentity","rowClass","selectCheck","displayCheck","summaryRow","summaryHeight","summaryPosition","page","activate","rowContextmenu","select","scroll","treeAction"],[3,"rowCount","pageSize","offset","footerHeight","footerTemplate","totalMessage","pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","selectedCount","selectedMessage","pagerNextIcon","page",4,"ngIf"],[3,"sorts","sortType","scrollbarH","innerWidth","offsetX","dealsWithGroup","columns","headerHeight","reorderable","targetMarkerTemplate","sortAscendingIcon","sortDescendingIcon","sortUnsetIcon","allRowsSelected","selectionType","sort","resize","reorder","select","columnContextmenu"],[3,"rowCount","pageSize","offset","footerHeight","footerTemplate","totalMessage","pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","selectedCount","selectedMessage","pagerNextIcon","page"]],template:function(te,Ue){1&te&&(r.TgZ(0,"div",0),r.NdJ("visible",function(){return Ue.recalculate()}),r.YNc(1,ae,2,17,"datatable-header",1),r.TgZ(2,"datatable-body",2),r.NdJ("page",function(hn){return Ue.onBodyPage(hn)})("activate",function(hn){return Ue.activate.emit(hn)})("rowContextmenu",function(hn){return Ue.onRowContextmenu(hn)})("select",function(hn){return Ue.onBodySelect(hn)})("scroll",function(hn){return Ue.onBodyScroll(hn)})("treeAction",function(hn){return Ue.onTreeAction(hn)}),r.ALo(3,"async"),r.qZA(),r.YNc(4,ie,1,12,"datatable-footer",3),r.qZA()),2&te&&(r.xp6(1),r.Q6J("ngIf",Ue.headerHeight),r.xp6(1),r.Q6J("groupRowsBy",Ue.groupRowsBy)("groupedRows",Ue.groupedRows)("rows",Ue._internalRows)("groupExpansionDefault",Ue.groupExpansionDefault)("scrollbarV",Ue.scrollbarV)("scrollbarH",Ue.scrollbarH)("virtualization",Ue.virtualization)("loadingIndicator",Ue.loadingIndicator)("externalPaging",Ue.externalPaging)("rowHeight",Ue.rowHeight)("rowCount",Ue.rowCount)("offset",Ue.offset)("trackByProp",Ue.trackByProp)("columns",Ue._internalColumns)("pageSize",Ue.pageSize)("offsetX",r.lcZ(3,32,Ue._offsetX))("rowDetail",Ue.rowDetail)("groupHeader",Ue.groupHeader)("selected",Ue.selected)("innerWidth",Ue._innerWidth)("bodyHeight",Ue.bodyHeight)("selectionType",Ue.selectionType)("emptyMessage",Ue.messages.emptyMessage)("rowIdentity",Ue.rowIdentity)("rowClass",Ue.rowClass)("selectCheck",Ue.selectCheck)("displayCheck",Ue.displayCheck)("summaryRow",Ue.summaryRow)("summaryHeight",Ue.summaryHeight)("summaryPosition",Ue.summaryPosition),r.xp6(2),r.Q6J("ngIf",Ue.footerHeight))},directives:function(){return[Xn,a.O5,pi,cr,pl]},pipes:function(){return[a.Ov]},styles:[".ngx-datatable{display:block;justify-content:center;overflow:hidden;position:relative;transform:translateZ(0)}.ngx-datatable [hidden]{display:none!important}.ngx-datatable *,.ngx-datatable :after,.ngx-datatable :before{box-sizing:border-box}.ngx-datatable.scroll-vertical .datatable-body{overflow-y:auto}.ngx-datatable.scroll-vertical.virtualized .datatable-body .datatable-row-wrapper{position:absolute}.ngx-datatable.scroll-horz .datatable-body{-webkit-overflow-scrolling:touch;overflow-x:auto}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner{white-space:nowrap}.ngx-datatable.fixed-header .datatable-header .datatable-header-inner .datatable-header-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row{white-space:nowrap}.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-cell,.ngx-datatable.fixed-row .datatable-scroll .datatable-body-row .datatable-body-group-cell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ngx-datatable .datatable-body-row,.ngx-datatable .datatable-header-inner,.ngx-datatable .datatable-row-center{-o-flex-flow:row;display:flex;flex-direction:row;flex-flow:row}.ngx-datatable .datatable-body-cell,.ngx-datatable .datatable-header-cell{display:inline-block;line-height:1.625;overflow-x:hidden;vertical-align:top}.ngx-datatable .datatable-body-cell:focus,.ngx-datatable .datatable-header-cell:focus{outline:none}.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{z-index:9}.ngx-datatable .datatable-row-center,.ngx-datatable .datatable-row-group,.ngx-datatable .datatable-row-left,.ngx-datatable .datatable-row-right{position:relative}.ngx-datatable .datatable-header{display:block;overflow:hidden}.ngx-datatable .datatable-header .datatable-header-inner{-webkit-align-items:stretch;align-items:stretch}.ngx-datatable .datatable-header .datatable-header-cell{display:inline-block;position:relative}.ngx-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-wrapper{cursor:pointer}.ngx-datatable .datatable-header .datatable-header-cell.longpress .datatable-header-cell-wrapper{cursor:move}.ngx-datatable .datatable-header .datatable-header-cell .sort-btn{cursor:pointer;display:inline-block;line-height:100%;vertical-align:middle}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell .resize-handle--not-resizable{bottom:0;display:inline-block;padding:0 4px;position:absolute;right:0;top:0;visibility:hidden;width:5px}.ngx-datatable .datatable-header .datatable-header-cell .resize-handle{cursor:ew-resize}.ngx-datatable .datatable-header .datatable-header-cell.resizeable:hover .resize-handle,.ngx-datatable .datatable-header .datatable-header-cell:hover .resize-handle--not-resizable{visibility:visible}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker{bottom:0;position:absolute;top:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromLeft{right:0}.ngx-datatable .datatable-header .datatable-header-cell .targetMarker.dragFromRight{left:0}.ngx-datatable .datatable-header .datatable-header-cell .datatable-header-cell-template-wrap{height:inherit}.ngx-datatable .datatable-body{display:block;position:relative;z-index:10}.ngx-datatable .datatable-body .datatable-scroll{display:inline-block}.ngx-datatable .datatable-body .datatable-row-detail{overflow-y:hidden}.ngx-datatable .datatable-body .datatable-row-wrapper{display:flex;flex-direction:column}.ngx-datatable .datatable-body .datatable-body-row{outline:none}.ngx-datatable .datatable-body .datatable-body-row>div{display:flex}.ngx-datatable .datatable-footer{display:block;overflow:auto;width:100%}.ngx-datatable .datatable-footer .datatable-footer-inner{align-items:center;display:flex;width:100%}.ngx-datatable .datatable-footer .selected-count .page-count{flex:1 1 40%}.ngx-datatable .datatable-footer .selected-count .datatable-pager{flex:1 1 60%}.ngx-datatable .datatable-footer .page-count{flex:1 1 20%}.ngx-datatable .datatable-footer .datatable-pager{flex:1 1 80%;text-align:right}.ngx-datatable .datatable-footer .datatable-pager .pager,.ngx-datatable .datatable-footer .datatable-pager .pager li{display:inline-block;list-style:none;margin:0;padding:0}.ngx-datatable .datatable-footer .datatable-pager .pager li,.ngx-datatable .datatable-footer .datatable-pager .pager li a{outline:none}.ngx-datatable .datatable-footer .datatable-pager .pager li a{cursor:pointer;display:inline-block}.ngx-datatable .datatable-footer .datatable-pager .pager li.disabled a{cursor:not-allowed}"],encapsulation:2,changeDetection:0}),(0,g.gn)([$n(5)],ut.prototype,"onWindowResize",null),ut})(),Ra=(()=>{class ut{constructor(te){this.cd=te,this.sort=new r.vpe,this.select=new r.vpe,this.columnContextmenu=new r.vpe(!1),this.sortFn=this.onSort.bind(this),this.selectFn=this.select.emit.bind(this.select),this.cellContext={column:this.column,sortDir:this.sortDir,sortFn:this.sortFn,allRowsSelected:this.allRowsSelected,selectFn:this.selectFn}}set allRowsSelected(te){this._allRowsSelected=te,this.cellContext.allRowsSelected=te}get allRowsSelected(){return this._allRowsSelected}set column(te){this._column=te,this.cellContext.column=te,this.cd.markForCheck()}get column(){return this._column}set sorts(te){this._sorts=te,this.sortDir=this.calcSortDir(te),this.cellContext.sortDir=this.sortDir,this.sortClass=this.calcSortClass(this.sortDir),this.cd.markForCheck()}get sorts(){return this._sorts}get columnCssClasses(){let te="datatable-header-cell";if(this.column.sortable&&(te+=" sortable"),this.column.resizeable&&(te+=" resizeable"),this.column.headerClass)if("string"==typeof this.column.headerClass)te+=" "+this.column.headerClass;else if("function"==typeof this.column.headerClass){const jt=this.column.headerClass({column:this.column});if("string"==typeof jt)te+=jt;else if("object"==typeof jt){const hn=Object.keys(jt);for(const ii of hn)!0===jt[ii]&&(te+=` ${ii}`)}}const Ue=this.sortDir;return Ue&&(te+=` sort-active sort-${Ue}`),te}get name(){return void 0===this.column.headerTemplate?this.column.name:void 0}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get width(){return this.column.width}get isCheckboxable(){return this.column.checkboxable&&this.column.headerCheckboxable&&this.selectionType===$t.checkbox}onContextmenu(te){this.columnContextmenu.emit({event:te,column:this.column})}ngOnInit(){this.sortClass=this.calcSortClass(this.sortDir)}calcSortDir(te){if(te&&this.column){const Ue=te.find(jt=>jt.prop===this.column.prop);if(Ue)return Ue.dir}}onSort(){if(!this.column.sortable)return;const te=function ma(ut,pn){return ut===_t.single?pn===es.asc?es.desc:es.asc:pn?pn===es.asc?es.desc:void 0:es.asc}(this.sortType,this.sortDir);this.sort.emit({column:this.column,prevValue:this.sortDir,newValue:te})}calcSortClass(te){if(this.cellContext.column.sortable)return te===es.asc?`sort-btn sort-asc ${this.sortAscendingIcon}`:te===es.desc?`sort-btn sort-desc ${this.sortDescendingIcon}`:`sort-btn ${this.sortUnsetIcon}`}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.sBO))},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-header-cell"]],hostAttrs:[1,"datatable-header-cell"],hostVars:11,hostBindings:function(te,Ue){1&te&&r.NdJ("contextmenu",function(hn){return Ue.onContextmenu(hn)}),2&te&&(r.uIk("title",Ue.name),r.Tol(Ue.columnCssClasses),r.Udp("min-width",Ue.minWidth,"px")("max-width",Ue.maxWidth,"px")("width",Ue.width,"px")("height",Ue.headerHeight,"px"))},inputs:{allRowsSelected:"allRowsSelected",column:"column",sorts:"sorts",sortType:"sortType",sortAscendingIcon:"sortAscendingIcon",sortDescendingIcon:"sortDescendingIcon",sortUnsetIcon:"sortUnsetIcon",isTarget:"isTarget",targetMarkerTemplate:"targetMarkerTemplate",targetMarkerContext:"targetMarkerContext",selectionType:"selectionType",headerHeight:"headerHeight"},outputs:{sort:"sort",select:"select",columnContextmenu:"columnContextmenu"},decls:6,vars:6,consts:[[1,"datatable-header-cell-template-wrap"],[4,"ngIf"],["class","datatable-checkbox",4,"ngIf"],["class","datatable-header-cell-wrapper",4,"ngIf"],[3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"datatable-checkbox"],["type","checkbox",3,"checked","change"],[1,"datatable-header-cell-wrapper"],[1,"datatable-header-cell-label","draggable",3,"innerHTML","click"]],template:function(te,Ue){1&te&&(r.TgZ(0,"div",0),r.YNc(1,he,1,2,null,1),r.YNc(2,Ce,2,1,"label",2),r.YNc(3,ce,2,1,"span",3),r.YNc(4,Ve,1,2,null,1),r.TgZ(5,"span",4),r.NdJ("click",function(){return Ue.onSort()}),r.qZA()()),2&te&&(r.xp6(1),r.Q6J("ngIf",Ue.isTarget),r.xp6(1),r.Q6J("ngIf",Ue.isCheckboxable),r.xp6(1),r.Q6J("ngIf",!Ue.column.headerTemplate),r.xp6(1),r.Q6J("ngIf",Ue.column.headerTemplate),r.xp6(1),r.Tol(Ue.sortClass))},directives:[a.O5,a.tP],encapsulation:2,changeDetection:0}),ut})(),pl=(()=>{class ut{constructor(){this.selectedCount=0,this.page=new r.vpe}get isVisible(){return this.rowCount/this.pageSize>1}get curPage(){return this.offset+1}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-footer"]],hostAttrs:[1,"datatable-footer"],inputs:{selectedCount:"selectedCount",footerHeight:"footerHeight",rowCount:"rowCount",pageSize:"pageSize",offset:"offset",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon",totalMessage:"totalMessage",footerTemplate:"footerTemplate",selectedMessage:"selectedMessage"},outputs:{page:"page"},decls:4,vars:8,consts:[[1,"datatable-footer-inner",3,"ngClass"],[4,"ngIf"],["class","page-count",4,"ngIf"],[3,"pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","pagerNextIcon","page","size","count","hidden","change",4,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"page-count"],[3,"pagerLeftArrowIcon","pagerRightArrowIcon","pagerPreviousIcon","pagerNextIcon","page","size","count","hidden","change"]],template:function(te,Ue){1&te&&(r.TgZ(0,"div",0),r.YNc(1,Pe,1,8,null,1),r.YNc(2,Oe,3,3,"div",2),r.YNc(3,Tt,1,8,"datatable-pager",3),r.qZA()),2&te&&(r.Udp("height",Ue.footerHeight,"px"),r.Q6J("ngClass",r.VKq(6,We,Ue.selectedMessage)),r.xp6(1),r.Q6J("ngIf",Ue.footerTemplate),r.xp6(1),r.Q6J("ngIf",!Ue.footerTemplate),r.xp6(1),r.Q6J("ngIf",!Ue.footerTemplate))},directives:function(){return[a.mk,a.O5,a.tP,Co]},encapsulation:2,changeDetection:0}),ut})(),Co=(()=>{class ut{constructor(){this.change=new r.vpe,this._count=0,this._page=1,this._size=0}set size(te){this._size=te,this.pages=this.calcPages()}get size(){return this._size}set count(te){this._count=te,this.pages=this.calcPages()}get count(){return this._count}set page(te){this._page=te,this.pages=this.calcPages()}get page(){return this._page}get totalPages(){const te=this.size<1?1:Math.ceil(this.count/this.size);return Math.max(te||0,1)}canPrevious(){return this.page>1}canNext(){return this.page<this.totalPages}prevPage(){this.selectPage(this.page-1)}nextPage(){this.selectPage(this.page+1)}selectPage(te){te>0&&te<=this.totalPages&&te!==this.page&&(this.page=te,this.change.emit({page:te}))}calcPages(te){const Ue=[];let jt=1,hn=this.totalPages;te=te||this.page,5<this.totalPages&&(jt=te-Math.floor(2.5),hn=te+Math.floor(2.5),jt<1?(jt=1,hn=Math.min(jt+5-1,this.totalPages)):hn>this.totalPages&&(jt=Math.max(this.totalPages-5+1,1),hn=this.totalPages));for(let ki=jt;ki<=hn;ki++)Ue.push({number:ki,text:ki});return Ue}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-pager"]],hostAttrs:[1,"datatable-pager"],inputs:{size:"size",count:"count",page:"page",pagerLeftArrowIcon:"pagerLeftArrowIcon",pagerRightArrowIcon:"pagerRightArrowIcon",pagerPreviousIcon:"pagerPreviousIcon",pagerNextIcon:"pagerNextIcon"},outputs:{change:"change"},decls:14,vars:21,consts:[[1,"pager"],["role","button","aria-label","go to first page","href","javascript:void(0)",3,"click"],["role","button","aria-label","go to previous page","href","javascript:void(0)",3,"click"],["role","button","class","pages",3,"active",4,"ngFor","ngForOf"],["role","button","aria-label","go to next page","href","javascript:void(0)",3,"click"],["role","button","aria-label","go to last page","href","javascript:void(0)",3,"click"],["role","button",1,"pages"],["href","javascript:void(0)",3,"click"]],template:function(te,Ue){1&te&&(r.TgZ(0,"ul",0)(1,"li")(2,"a",1),r.NdJ("click",function(){return Ue.selectPage(1)}),r._UZ(3,"i"),r.qZA()(),r.TgZ(4,"li")(5,"a",2),r.NdJ("click",function(){return Ue.prevPage()}),r._UZ(6,"i"),r.qZA()(),r.YNc(7,Qt,3,4,"li",3),r.TgZ(8,"li")(9,"a",4),r.NdJ("click",function(){return Ue.nextPage()}),r._UZ(10,"i"),r.qZA()(),r.TgZ(11,"li")(12,"a",5),r.NdJ("click",function(){return Ue.selectPage(Ue.totalPages)}),r._UZ(13,"i"),r.qZA()()()),2&te&&(r.xp6(1),r.ekj("disabled",!Ue.canPrevious()),r.xp6(2),r.Tol(Ue.pagerPreviousIcon),r.xp6(1),r.ekj("disabled",!Ue.canPrevious()),r.xp6(2),r.Tol(Ue.pagerLeftArrowIcon),r.xp6(1),r.Q6J("ngForOf",Ue.pages),r.xp6(1),r.ekj("disabled",!Ue.canNext()),r.xp6(2),r.Tol(Ue.pagerRightArrowIcon),r.xp6(1),r.ekj("disabled",!Ue.canNext()),r.xp6(2),r.Tol(Ue.pagerNextIcon))},directives:[a.sg],encapsulation:2,changeDetection:0}),ut})(),yl=(()=>{class ut{}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-progress"]],decls:3,vars:0,consts:[["role","progressbar",1,"progress-linear"],[1,"container"],[1,"bar"]],template:function(te,Ue){1&te&&(r.TgZ(0,"div",0)(1,"div",1),r._UZ(2,"div",2),r.qZA()())},encapsulation:2,changeDetection:0}),ut})();var Wo=(()=>{return(ut=Wo||(Wo={}))[ut.up=38]="up",ut[ut.down=40]="down",ut[ut.return=13]="return",ut[ut.escape=27]="escape",ut[ut.left=37]="left",ut[ut.right=39]="right",Wo;var ut})();let ys=(()=>{class ut{constructor(te,Ue,jt,hn){this.differs=te,this.scrollbarHelper=Ue,this.cd=jt,this.treeStatus="collapsed",this.activate=new r.vpe,this.treeAction=new r.vpe,this._groupStyles={left:{},center:{},right:{}},this._element=hn.nativeElement,this._rowDiffer=te.find({}).create()}set columns(te){this._columns=te,this.recalculateColumns(te),this.buildStylesByGroup()}get columns(){return this._columns}set innerWidth(te){if(this._columns){const Ue=lo(this._columns);this._columnGroupWidths=Ri(Ue,this._columns)}this._innerWidth=te,this.recalculateColumns(),this.buildStylesByGroup()}get innerWidth(){return this._innerWidth}set offsetX(te){this._offsetX=te,this.buildStylesByGroup()}get offsetX(){return this._offsetX}get cssClass(){let te="datatable-body-row";if(this.isSelected&&(te+=" active"),this.rowIndex%2!=0&&(te+=" datatable-row-odd"),this.rowIndex%2==0&&(te+=" datatable-row-even"),this.rowClass){const Ue=this.rowClass(this.row);if("string"==typeof Ue)te+=` ${Ue}`;else if("object"==typeof Ue){const jt=Object.keys(Ue);for(const hn of jt)!0===Ue[hn]&&(te+=` ${hn}`)}}return te}get columnsTotalWidths(){return this._columnGroupWidths.total}ngDoCheck(){this._rowDiffer.diff(this.row)&&this.cd.markForCheck()}trackByGroups(te,Ue){return Ue.type}columnTrackingFn(te,Ue){return Ue.$$id}buildStylesByGroup(){this._groupStyles.left=this.calcStylesByGroup("left"),this._groupStyles.center=this.calcStylesByGroup("center"),this._groupStyles.right=this.calcStylesByGroup("right"),this.cd.markForCheck()}calcStylesByGroup(te){const Ue=this._columnGroupWidths,jt=this.offsetX,hn={width:`${Ue[te]}px`};if("left"===te)Ar(hn,jt,0);else if("right"===te){const ii=parseInt(this.innerWidth+"",0);Ar(hn,-1*(Ue.total-ii-jt+this.scrollbarHelper.width),0)}return hn}onActivate(te,Ue){te.cellIndex=Ue,te.rowElement=this._element,this.activate.emit(te)}onKeyDown(te){const Ue=te.keyCode;(Ue===Wo.return||Ue===Wo.down||Ue===Wo.up||Ue===Wo.left||Ue===Wo.right)&&te.target===this._element&&(te.preventDefault(),te.stopPropagation(),this.activate.emit({type:"keydown",event:te,row:this.row,rowElement:this._element}))}onMouseenter(te){this.activate.emit({type:"mouseenter",event:te,row:this.row,rowElement:this._element})}recalculateColumns(te=this.columns){this._columns=te;const Ue=lo(this._columns);this._columnsByPin=ir(this._columns),this._columnGroupWidths=Ri(Ue,this._columns)}onTreeAction(){this.treeAction.emit()}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.aQg),r.Y36(Er,4),r.Y36(r.sBO),r.Y36(r.SBq))},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-body-row"]],hostVars:6,hostBindings:function(te,Ue){1&te&&r.NdJ("keydown",function(hn){return Ue.onKeyDown(hn)})("mouseenter",function(hn){return Ue.onMouseenter(hn)}),2&te&&(r.Tol(Ue.cssClass),r.Udp("width",Ue.columnsTotalWidths,"px")("height",Ue.rowHeight,"px"))},inputs:{treeStatus:"treeStatus",columns:"columns",innerWidth:"innerWidth",offsetX:"offsetX",expanded:"expanded",rowClass:"rowClass",row:"row",group:"group",isSelected:"isSelected",rowIndex:"rowIndex",displayCheck:"displayCheck",rowHeight:"rowHeight"},outputs:{activate:"activate",treeAction:"treeAction"},decls:1,vars:2,consts:[[3,"class","ngStyle",4,"ngFor","ngForOf","ngForTrackBy"],[3,"ngStyle"],["tabindex","-1",3,"row","group","expanded","isSelected","rowIndex","column","rowHeight","displayCheck","treeStatus","activate","treeAction",4,"ngFor","ngForOf","ngForTrackBy"],["tabindex","-1",3,"row","group","expanded","isSelected","rowIndex","column","rowHeight","displayCheck","treeStatus","activate","treeAction"]],template:function(te,Ue){1&te&&r.YNc(0,Yt,2,6,"div",0),2&te&&r.Q6J("ngForOf",Ue._columnsByPin)("ngForTrackBy",Ue.trackByGroups)},directives:function(){return[a.sg,a.PC,Is]},encapsulation:2,changeDetection:0}),ut})(),Wa=(()=>{class ut{constructor(te,Ue){this.cd=te,this.differs=Ue,this.rowContextmenu=new r.vpe(!1),this.groupContext={group:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this.rowContext={row:this.row,expanded:this.expanded,rowIndex:this.rowIndex},this._expanded=!1,this.rowDiffer=Ue.find({}).create()}set rowIndex(te){this._rowIndex=te,this.rowContext.rowIndex=te,this.groupContext.rowIndex=te,this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set expanded(te){this._expanded=te,this.groupContext.expanded=te,this.rowContext.expanded=te,this.cd.markForCheck()}get expanded(){return this._expanded}ngDoCheck(){this.rowDiffer.diff(this.row)&&(this.rowContext.row=this.row,this.groupContext.group=this.row,this.cd.markForCheck())}onContextmenu(te){this.rowContextmenu.emit({event:te,row:this.row})}getGroupHeaderStyle(){const te={};return te.transform="translate3d("+this.offsetX+"px, 0px, 0px)",te["backface-visibility"]="hidden",te.width=this.innerWidth,te}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.sBO),r.Y36(r.aQg))},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-row-wrapper"]],hostAttrs:[1,"datatable-row-wrapper"],hostBindings:function(te,Ue){1&te&&r.NdJ("contextmenu",function(hn){return Ue.onContextmenu(hn)})},inputs:{rowIndex:"rowIndex",expanded:"expanded",innerWidth:"innerWidth",rowDetail:"rowDetail",groupHeader:"groupHeader",offsetX:"offsetX",detailRowHeight:"detailRowHeight",row:"row",groupedRows:"groupedRows"},outputs:{rowContextmenu:"rowContextmenu"},ngContentSelectors:S,decls:3,vars:3,consts:[["class","datatable-group-header",3,"ngStyle",4,"ngIf"],[4,"ngIf"],["class","datatable-row-detail",3,"height",4,"ngIf"],[1,"datatable-group-header",3,"ngStyle"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"datatable-row-detail"]],template:function(te,Ue){1&te&&(r.F$t(),r.YNc(0,vt,2,2,"div",0),r.YNc(1,xt,1,0,"ng-content",1),r.YNc(2,Fn,2,3,"div",2)),2&te&&(r.Q6J("ngIf",Ue.groupHeader&&Ue.groupHeader.template),r.xp6(1),r.Q6J("ngIf",Ue.groupHeader&&Ue.groupHeader.template&&Ue.expanded||!Ue.groupHeader||!Ue.groupHeader.template),r.xp6(1),r.Q6J("ngIf",Ue.rowDetail&&Ue.rowDetail.template&&Ue.expanded))},directives:[a.O5,a.PC,a.tP],encapsulation:2,changeDetection:0}),ut})(),Is=(()=>{class ut{constructor(te,Ue){this.cd=Ue,this.activate=new r.vpe,this.treeAction=new r.vpe,this.isFocused=!1,this.onCheckboxChangeFn=this.onCheckboxChange.bind(this),this.activateFn=this.activate.emit.bind(this.activate),this.cellContext={onCheckboxChangeFn:this.onCheckboxChangeFn,activateFn:this.activateFn,row:this.row,group:this.group,value:this.value,column:this.column,rowHeight:this.rowHeight,isSelected:this.isSelected,rowIndex:this.rowIndex,treeStatus:this.treeStatus,onTreeAction:this.onTreeAction.bind(this)},this._element=te.nativeElement}set group(te){this._group=te,this.cellContext.group=te,this.checkValueUpdates(),this.cd.markForCheck()}get group(){return this._group}set rowHeight(te){this._rowHeight=te,this.cellContext.rowHeight=te,this.checkValueUpdates(),this.cd.markForCheck()}get rowHeight(){return this._rowHeight}set isSelected(te){this._isSelected=te,this.cellContext.isSelected=te,this.cd.markForCheck()}get isSelected(){return this._isSelected}set expanded(te){this._expanded=te,this.cellContext.expanded=te,this.cd.markForCheck()}get expanded(){return this._expanded}set rowIndex(te){this._rowIndex=te,this.cellContext.rowIndex=te,this.checkValueUpdates(),this.cd.markForCheck()}get rowIndex(){return this._rowIndex}set column(te){this._column=te,this.cellContext.column=te,this.checkValueUpdates(),this.cd.markForCheck()}get column(){return this._column}set row(te){this._row=te,this.cellContext.row=te,this.checkValueUpdates(),this.cd.markForCheck()}get row(){return this._row}set sorts(te){this._sorts=te,this.calcSortDir=this.calcSortDir(te)}get sorts(){return this._sorts}set treeStatus(te){this._treeStatus="collapsed"!==te&&"expanded"!==te&&"loading"!==te&&"disabled"!==te?"collapsed":te,this.cellContext.treeStatus=this._treeStatus,this.checkValueUpdates(),this.cd.markForCheck()}get treeStatus(){return this._treeStatus}get columnCssClasses(){let te="datatable-body-cell";if(this.column.cellClass)if("string"==typeof this.column.cellClass)te+=" "+this.column.cellClass;else if("function"==typeof this.column.cellClass){const Ue=this.column.cellClass({row:this.row,group:this.group,column:this.column,value:this.value,rowHeight:this.rowHeight});if("string"==typeof Ue)te+=" "+Ue;else if("object"==typeof Ue){const jt=Object.keys(Ue);for(const hn of jt)!0===Ue[hn]&&(te+=` ${hn}`)}}return this.sortDir||(te+=" sort-active"),this.isFocused&&(te+=" active"),this.sortDir===es.asc&&(te+=" sort-asc"),this.sortDir===es.desc&&(te+=" sort-desc"),te}get width(){return this.column.width}get minWidth(){return this.column.minWidth}get maxWidth(){return this.column.maxWidth}get height(){const te=this.rowHeight;return isNaN(te)?te:te+"px"}ngDoCheck(){this.checkValueUpdates()}ngOnDestroy(){this.cellTemplate&&this.cellTemplate.clear()}checkValueUpdates(){let te="";if(this.row&&this.column){const Ue=this.column.$$valueGetter(this.row,this.column.prop),jt=this.column.pipe;jt?te=jt.transform(Ue):void 0!==te&&(te=Ue)}else te="";this.value!==te&&(this.value=te,this.cellContext.value=te,this.sanitizedValue=null!=te?this.stripHtml(te):te,this.cd.markForCheck())}onFocus(){this.isFocused=!0}onBlur(){this.isFocused=!1}onClick(te){this.activate.emit({type:"click",event:te,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onDblClick(te){this.activate.emit({type:"dblclick",event:te,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element})}onKeyDown(te){const Ue=te.keyCode;(Ue===Wo.return||Ue===Wo.down||Ue===Wo.up||Ue===Wo.left||Ue===Wo.right)&&te.target===this._element&&(te.preventDefault(),te.stopPropagation(),this.activate.emit({type:"keydown",event:te,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element}))}onCheckboxChange(te){this.activate.emit({type:"checkbox",event:te,row:this.row,group:this.group,rowHeight:this.rowHeight,column:this.column,value:this.value,cellElement:this._element,treeStatus:"collapsed"})}calcSortDir(te){if(!te)return;const Ue=te.find(jt=>jt.prop===this.column.prop);return Ue?Ue.dir:void 0}stripHtml(te){return te.replace?te.replace(/<\/?[^>]+(>|$)/g,""):te}onTreeAction(){this.treeAction.emit(this.row)}calcLeftMargin(te,Ue){return te.isTreeColumn?Ue.level*(null!=te.treeLevelIndent?te.treeLevelIndent:50):0}}return ut.\u0275fac=function(te){return new(te||ut)(r.Y36(r.SBq),r.Y36(r.sBO))},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-body-cell"]],viewQuery:function(te,Ue){if(1&te&&r.Gf(pr,7,r.s_b),2&te){let jt;r.iGM(jt=r.CRH())&&(Ue.cellTemplate=jt.first)}},hostVars:10,hostBindings:function(te,Ue){1&te&&r.NdJ("focus",function(){return Ue.onFocus()})("blur",function(){return Ue.onBlur()})("click",function(hn){return Ue.onClick(hn)})("dblclick",function(hn){return Ue.onDblClick(hn)})("keydown",function(hn){return Ue.onKeyDown(hn)}),2&te&&(r.Tol(Ue.columnCssClasses),r.Udp("width",Ue.width,"px")("min-width",Ue.minWidth,"px")("max-width",Ue.maxWidth,"px")("height",Ue.height))},inputs:{group:"group",rowHeight:"rowHeight",isSelected:"isSelected",expanded:"expanded",rowIndex:"rowIndex",column:"column",row:"row",sorts:"sorts",treeStatus:"treeStatus",displayCheck:"displayCheck"},outputs:{activate:"activate",treeAction:"treeAction"},decls:5,vars:6,consts:[[1,"datatable-body-cell-label"],["class","datatable-checkbox",4,"ngIf"],[4,"ngIf"],[3,"title","innerHTML",4,"ngIf"],[1,"datatable-checkbox"],["type","checkbox",3,"checked","click"],["class","datatable-tree-button",3,"disabled","click",4,"ngIf"],[1,"datatable-tree-button",3,"disabled","click"],["class","icon datatable-icon-collapse",4,"ngIf"],["class","icon datatable-icon-up",4,"ngIf"],["class","icon datatable-icon-down",4,"ngIf"],[1,"icon","datatable-icon-collapse"],[1,"icon","datatable-icon-up"],[1,"icon","datatable-icon-down"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"title","innerHTML"],["cellTemplate",""]],template:function(te,Ue){1&te&&(r.TgZ(0,"div",0),r.YNc(1,mi,2,1,"label",1),r.YNc(2,ei,3,2,"ng-container",2),r.YNc(3,bi,1,2,"span",3),r.YNc(4,no,2,2,null,2),r.qZA()),2&te&&(r.Udp("margin-left",Ue.calcLeftMargin(Ue.column,Ue.row),"px"),r.xp6(1),r.Q6J("ngIf",Ue.column.checkboxable&&(!Ue.displayCheck||Ue.displayCheck(Ue.row,Ue.column,Ue.value))),r.xp6(1),r.Q6J("ngIf",Ue.column.isTreeColumn),r.xp6(1),r.Q6J("ngIf",!Ue.column.cellTemplate),r.xp6(1),r.Q6J("ngIf",Ue.column.cellTemplate))},directives:[a.O5,a.tP],encapsulation:2,changeDetection:0}),ut})();function nl(ut,pn,te){const Ue=te(pn,ut);return Ue>-1?ut.splice(Ue,1):ut.push(pn),ut}let $o=(()=>{class ut{constructor(){this.activate=new r.vpe,this.select=new r.vpe}selectRow(te,Ue,jt){if(!this.selectEnabled)return;const hn=this.selectionType===$t.checkbox,Oi=this.selectionType===$t.multiClick;let ki=[];ki=this.selectionType===$t.multi||hn||Oi?te.shiftKey?function js(ut,pn,te,Ue,jt){const hn=te<Ue;for(let ii=0;ii<pn.length;ii++){const Oi=pn[ii],ki=ii>=Ue&&ii<=te,_s=ii<=Ue&&ii>=te;let Vo={start:0,end:0};Vo=hn?{start:te,end:Ue}:{start:Ue,end:te+1},(hn&&_s||!hn&&ki)&&ii>=Vo.start&&ii<=Vo.end&&ut.push(Oi)}return ut}([],this.rows,Ue,this.prevIndex,this.getRowSelectedIdx.bind(this)):nl(te.ctrlKey||te.metaKey||Oi||hn?[...this.selected]:[],jt,this.getRowSelectedIdx.bind(this)):nl([],jt,this.getRowSelectedIdx.bind(this)),"function"==typeof this.selectCheck&&(ki=ki.filter(this.selectCheck.bind(this))),this.selected.splice(0,this.selected.length),this.selected.push(...ki),this.prevIndex=Ue,this.select.emit({selected:ki})}onActivate(te,Ue){const{type:jt,event:hn,row:ii}=te,Oi=this.selectionType===$t.checkbox;!Oi&&("click"===jt||"dblclick"===jt)||Oi&&"checkbox"===jt?this.selectRow(hn,Ue,ii):"keydown"===jt&&(hn.keyCode===Wo.return?this.selectRow(hn,Ue,ii):this.onKeyboardFocus(te)),this.activate.emit(te)}onKeyboardFocus(te){const{keyCode:Ue}=te.event;if(Ue===Wo.up||Ue===Wo.down||Ue===Wo.right||Ue===Wo.left){const hn=this.selectionType===$t.cell;te.cellElement&&hn?hn&&this.focusCell(te.cellElement,te.rowElement,Ue,te.cellIndex):this.focusRow(te.rowElement,Ue)}}focusRow(te,Ue){const jt=this.getPrevNextRow(te,Ue);jt&&jt.focus()}getPrevNextRow(te,Ue){const jt=te.parentElement;if(jt){let hn;if(Ue===Wo.up?hn=jt.previousElementSibling:Ue===Wo.down&&(hn=jt.nextElementSibling),hn&&hn.children.length)return hn.children[0]}}focusCell(te,Ue,jt,hn){let ii;if(jt===Wo.left)ii=te.previousElementSibling;else if(jt===Wo.right)ii=te.nextElementSibling;else if(jt===Wo.up||jt===Wo.down){const Oi=this.getPrevNextRow(Ue,jt);if(Oi){const ki=Oi.getElementsByClassName("datatable-body-cell");ki.length&&(ii=ki[hn])}}ii&&ii.focus()}getRowSelected(te){return this.getRowSelectedIdx(te,this.selected)>-1}getRowSelectedIdx(te,Ue){if(!Ue||!Ue.length)return-1;const jt=this.rowIdentity(te);return Ue.findIndex(hn=>this.rowIdentity(hn)===jt)}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-selection"]],inputs:{rows:"rows",selected:"selected",selectEnabled:"selectEnabled",selectionType:"selectionType",rowIdentity:"rowIdentity",selectCheck:"selectCheck"},outputs:{activate:"activate",select:"select"},ngContentSelectors:S,decls:1,vars:0,template:function(te,Ue){1&te&&(r.F$t(),r.Hsn(0))},encapsulation:2,changeDetection:0}),ut})();function To(ut){const pn=ut.filter(te=>!!te);return!pn.length||pn.some(te=>"number"!=typeof te)?null:pn.reduce((te,Ue)=>te+Ue)}function Ns(ut){return null}let hs=(()=>{class ut{constructor(){this.summaryRow={}}ngOnChanges(){!this.columns||!this.rows||(this.updateInternalColumns(),this.updateValues())}updateInternalColumns(){this._internalColumns=this.columns.map(te=>Object.assign(Object.assign({},te),{cellTemplate:te.summaryTemplate}))}updateValues(){this.summaryRow={},this.columns.filter(te=>!te.summaryTemplate).forEach(te=>{const Ue=this.rows.map(hn=>hn[te.prop]),jt=this.getSummaryFunction(te);this.summaryRow[te.prop]=te.pipe?te.pipe.transform(jt(Ue)):jt(Ue)})}getSummaryFunction(te){return void 0===te.summaryFunc?To:null===te.summaryFunc?Ns:te.summaryFunc}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275cmp=r.Xpm({type:ut,selectors:[["datatable-summary-row"]],hostAttrs:[1,"datatable-summary-row"],inputs:{rows:"rows",columns:"columns",rowHeight:"rowHeight",offsetX:"offsetX",innerWidth:"innerWidth"},features:[r.TTD],decls:1,vars:1,consts:[["tabindex","-1",3,"innerWidth","offsetX","columns","rowHeight","row","rowIndex",4,"ngIf"],["tabindex","-1",3,"innerWidth","offsetX","columns","rowHeight","row","rowIndex"]],template:function(te,Ue){1&te&&r.YNc(0,xo,1,6,"datatable-body-row",0),2&te&&r.Q6J("ngIf",Ue.summaryRow&&Ue._internalColumns)},directives:[a.O5,ys],encapsulation:2}),ut})(),Oo=(()=>{class ut{static forRoot(te){return{ngModule:ut,providers:[{provide:"configuration",useValue:te}]}}}return ut.\u0275fac=function(te){return new(te||ut)},ut.\u0275mod=r.oAB({type:ut}),ut.\u0275inj=r.cJS({providers:[Er,an,vn],imports:[[a.ez]]}),ut})();"undefined"!=typeof document&&!document.elementsFromPoint&&(document.elementsFromPoint=function Ki(ut,pn){const te=[],Ue=[];let jt,hn,ii;for(;(jt=document.elementFromPoint(ut,pn))&&-1===te.indexOf(jt)&&null!=jt;)te.push(jt),Ue.push({value:jt.style.getPropertyValue("pointer-events"),priority:jt.style.getPropertyPriority("pointer-events")}),jt.style.setProperty("pointer-events","none","important");for(hn=Ue.length;ii=Ue[--hn];)te[hn].style.setProperty("pointer-events",ii.value?ii.value:"",ii.priority);return te})},67506:v=>{"use strict";function b(a,f,u){a instanceof RegExp&&(a=i(a,u)),f instanceof RegExp&&(f=i(f,u));var e=r(a,f,u);return e&&{start:e[0],end:e[1],pre:u.slice(0,e[0]),body:u.slice(e[0]+a.length,e[1]),post:u.slice(e[1]+f.length)}}function i(a,f){var u=f.match(a);return u?u[0]:null}function r(a,f,u){var e,p,g,S,M,w=u.indexOf(a),x=u.indexOf(f,w+1),B=w;if(w>=0&&x>0){if(a===f)return[w,x];for(e=[],g=u.length;B>=0&&!M;)B==w?(e.push(B),w=u.indexOf(a,B+1)):1==e.length?M=[e.pop(),x]:((p=e.pop())<g&&(g=p,S=x),x=u.indexOf(f,B+1)),B=w<x&&w>=0?w:x;e.length&&(M=[g,S])}return M}v.exports=b,b.range=r},96434:(v,b)=>{"use strict";b.byteLength=function g(W){var j=p(W),ue=j[1];return 3*(j[0]+ue)/4-ue},b.toByteArray=function M(W){var j,ie,q=p(W),ue=q[0],re=q[1],H=new a(function S(W,j,q){return 3*(j+q)/4-q}(0,ue,re)),se=0,ae=re>0?ue-4:ue;for(ie=0;ie<ae;ie+=4)j=r[W.charCodeAt(ie)]<<18|r[W.charCodeAt(ie+1)]<<12|r[W.charCodeAt(ie+2)]<<6|r[W.charCodeAt(ie+3)],H[se++]=j>>16&255,H[se++]=j>>8&255,H[se++]=255&j;return 2===re&&(j=r[W.charCodeAt(ie)]<<2|r[W.charCodeAt(ie+1)]>>4,H[se++]=255&j),1===re&&(j=r[W.charCodeAt(ie)]<<10|r[W.charCodeAt(ie+1)]<<4|r[W.charCodeAt(ie+2)]>>2,H[se++]=j>>8&255,H[se++]=255&j),H},b.fromByteArray=function B(W){for(var j,q=W.length,ue=q%3,re=[],H=16383,se=0,ae=q-ue;se<ae;se+=H)re.push(x(W,se,se+H>ae?ae:se+H));return 1===ue?re.push(i[(j=W[q-1])>>2]+i[j<<4&63]+"=="):2===ue&&re.push(i[(j=(W[q-2]<<8)+W[q-1])>>10]+i[j>>4&63]+i[j<<2&63]+"="),re.join("")};for(var i=[],r=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",u=0,e=f.length;u<e;++u)i[u]=f[u],r[f.charCodeAt(u)]=u;function p(W){var j=W.length;if(j%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var q=W.indexOf("=");return-1===q&&(q=j),[q,q===j?0:4-q%4]}function w(W){return i[W>>18&63]+i[W>>12&63]+i[W>>6&63]+i[63&W]}function x(W,j,q){for(var re=[],H=j;H<q;H+=3)re.push(w((W[H]<<16&16711680)+(W[H+1]<<8&65280)+(255&W[H+2])));return re.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},33512:(v,b,i)=>{var r=i(2665),a=i(67506);v.exports=function B(se){return se?("{}"===se.substr(0,2)&&(se="\\{\\}"+se.substr(2)),H(function M(se){return se.split("\\\\").join(f).split("\\{").join(u).split("\\}").join(e).split("\\,").join(p).split("\\.").join(g)}(se),!0).map(w)):[]};var f="\0SLASH"+Math.random()+"\0",u="\0OPEN"+Math.random()+"\0",e="\0CLOSE"+Math.random()+"\0",p="\0COMMA"+Math.random()+"\0",g="\0PERIOD"+Math.random()+"\0";function S(se){return parseInt(se,10)==se?parseInt(se,10):se.charCodeAt(0)}function w(se){return se.split(f).join("\\").split(u).join("{").split(e).join("}").split(p).join(",").split(g).join(".")}function x(se){if(!se)return[""];var ae=[],ie=a("{","}",se);if(!ie)return se.split(",");var he=ie.body,Ce=ie.post,ce=ie.pre.split(",");ce[ce.length-1]+="{"+he+"}";var Be=x(Ce);return Ce.length&&(ce[ce.length-1]+=Be.shift(),ce.push.apply(ce,Be)),ae.push.apply(ae,ce),ae}function j(se){return"{"+se+"}"}function q(se){return/^-?0\d/.test(se)}function ue(se,ae){return se<=ae}function re(se,ae){return se>=ae}function H(se,ae){var ie=[],fe=a("{","}",se);if(!fe||/\$$/.test(fe.pre))return[se];var Ve,he=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(fe.body),Ce=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(fe.body),ce=he||Ce,Be=fe.body.indexOf(",")>=0;if(!ce&&!Be)return fe.post.match(/,.*\}/)?H(se=fe.pre+"{"+fe.body+e+fe.post):[se];if(ce)Ve=fe.body.split(/\.\./);else if(1===(Ve=x(fe.body)).length&&1===(Ve=H(Ve[0],!1).map(j)).length)return(He=fe.post.length?H(fe.post,!1):[""]).map(function(mi){return fe.pre+Ve[0]+mi});var Pe,Xe=fe.pre,He=fe.post.length?H(fe.post,!1):[""];if(ce){var Ge=S(Ve[0]),Oe=S(Ve[1]),Tt=Math.max(Ve[0].length,Ve[1].length),We=3==Ve.length?Math.abs(S(Ve[2])):1,Qt=ue;Oe<Ge&&(We*=-1,Qt=re);var Yt=Ve.some(q);Pe=[];for(var dn=Ge;Qt(dn,Oe);dn+=We){var rn;if(Ce)"\\"===(rn=String.fromCharCode(dn))&&(rn="");else if(rn=String(dn),Yt){var vt=Tt-rn.length;if(vt>0){var xt=new Array(vt+1).join("0");rn=dn<0?"-"+xt+rn.slice(1):xt+rn}}Pe.push(rn)}}else Pe=r(Ve,function(pr){return H(pr,!1)});for(var Ct=0;Ct<Pe.length;Ct++)for(var Gt=0;Gt<He.length;Gt++){var Fn=Xe+Pe[Ct]+He[Gt];(!ae||ce||Fn)&&ie.push(Fn)}return ie}},19568:(v,b,i)=>{"use strict";var r=i(18540),a=i(60044),f=a(r("String.prototype.indexOf"));v.exports=function(e,p){var g=r(e,!!p);return"function"==typeof g&&f(e,".prototype.")>-1?a(g):g}},60044:(v,b,i)=>{"use strict";var r=i(75396),a=i(18540),f=a("%Function.prototype.apply%"),u=a("%Function.prototype.call%"),e=a("%Reflect.apply%",!0)||r.call(u,f),p=a("%Object.getOwnPropertyDescriptor%",!0),g=a("%Object.defineProperty%",!0),S=a("%Math.max%");if(g)try{g({},"a",{value:1})}catch(w){g=null}v.exports=function(x){var B=e(r,u,arguments);if(p&&g){var W=p(B,"length");W.configurable&&g(B,"length",{value:1+S(0,x.length-(arguments.length-1))})}return B};var M=function(){return e(r,f,arguments)};g?g(v.exports,"apply",{value:M}):v.exports.apply=M},72318:v=>{var b=!("undefined"==typeof window||!window.document||!window.document.createElement);v.exports=b},6823:function(v,b,i){v.exports=function(r){"use strict";r=r&&r.hasOwnProperty("default")?r.default:r;var u={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},e=function a(h,E){return h(E={exports:{}},E.exports),E.exports}(function(h){var E={};for(var P in u)u.hasOwnProperty(P)&&(E[u[P]]=P);var L=h.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var X in L)if(L.hasOwnProperty(X)){if(!("channels"in L[X]))throw new Error("missing channels property: "+X);if(!("labels"in L[X]))throw new Error("missing channel labels property: "+X);if(L[X].labels.length!==L[X].channels)throw new Error("channel and label counts mismatch: "+X);var de=L[X].channels,ve=L[X].labels;delete L[X].channels,delete L[X].labels,Object.defineProperty(L[X],"channels",{value:de}),Object.defineProperty(L[X],"labels",{value:ve})}function Ye(xe,nt){return Math.pow(xe[0]-nt[0],2)+Math.pow(xe[1]-nt[1],2)+Math.pow(xe[2]-nt[2],2)}L.rgb.hsl=function(xe){var fr,Ui,nt=xe[0]/255,St=xe[1]/255,Mt=xe[2]/255,fn=Math.min(nt,St,Mt),jn=Math.max(nt,St,Mt),Vn=jn-fn;return jn===fn?fr=0:nt===jn?fr=(St-Mt)/Vn:St===jn?fr=2+(Mt-nt)/Vn:Mt===jn&&(fr=4+(nt-St)/Vn),(fr=Math.min(60*fr,360))<0&&(fr+=360),Ui=(fn+jn)/2,[fr,100*(jn===fn?0:Ui<=.5?Vn/(jn+fn):Vn/(2-jn-fn)),100*Ui]},L.rgb.hsv=function(xe){var nt,St,Mt,fn,jn,Vn=xe[0]/255,fr=xe[1]/255,$r=xe[2]/255,Ui=Math.max(Vn,fr,$r),is=Ui-Math.min(Vn,fr,$r),yo=function(Vs){return(Ui-Vs)/6/is+.5};return 0===is?fn=jn=0:(jn=is/Ui,nt=yo(Vn),St=yo(fr),Mt=yo($r),Vn===Ui?fn=Mt-St:fr===Ui?fn=1/3+nt-Mt:$r===Ui&&(fn=2/3+St-nt),fn<0?fn+=1:fn>1&&(fn-=1)),[360*fn,100*jn,100*Ui]},L.rgb.hwb=function(xe){var nt=xe[0],St=xe[1],Mt=xe[2];return[L.rgb.hsl(xe)[0],1/255*Math.min(nt,Math.min(St,Mt))*100,100*(Mt=1-1/255*Math.max(nt,Math.max(St,Mt)))]},L.rgb.cmyk=function(xe){var fr,nt=xe[0]/255,St=xe[1]/255,Mt=xe[2]/255;return[100*((1-nt-(fr=Math.min(1-nt,1-St,1-Mt)))/(1-fr)||0),100*((1-St-fr)/(1-fr)||0),100*((1-Mt-fr)/(1-fr)||0),100*fr]},L.rgb.keyword=function(xe){var nt=E[xe];if(nt)return nt;var Mt,St=1/0;for(var fn in u)if(u.hasOwnProperty(fn)){var Vn=Ye(xe,u[fn]);Vn<St&&(St=Vn,Mt=fn)}return Mt},L.keyword.rgb=function(xe){return u[xe]},L.rgb.xyz=function(xe){var nt=xe[0]/255,St=xe[1]/255,Mt=xe[2]/255;return[100*(.4124*(nt=nt>.04045?Math.pow((nt+.055)/1.055,2.4):nt/12.92)+.3576*(St=St>.04045?Math.pow((St+.055)/1.055,2.4):St/12.92)+.1805*(Mt=Mt>.04045?Math.pow((Mt+.055)/1.055,2.4):Mt/12.92)),100*(.2126*nt+.7152*St+.0722*Mt),100*(.0193*nt+.1192*St+.9505*Mt)]},L.rgb.lab=function(xe){var nt=L.rgb.xyz(xe),St=nt[0],Mt=nt[1],fn=nt[2];return Mt/=100,fn/=108.883,St=(St/=95.047)>.008856?Math.pow(St,1/3):7.787*St+16/116,[116*(Mt=Mt>.008856?Math.pow(Mt,1/3):7.787*Mt+16/116)-16,500*(St-Mt),200*(Mt-(fn=fn>.008856?Math.pow(fn,1/3):7.787*fn+16/116))]},L.hsl.rgb=function(xe){var fn,jn,Vn,fr,$r,nt=xe[0]/360,St=xe[1]/100,Mt=xe[2]/100;if(0===St)return[$r=255*Mt,$r,$r];fn=2*Mt-(jn=Mt<.5?Mt*(1+St):Mt+St-Mt*St),fr=[0,0,0];for(var Ui=0;Ui<3;Ui++)(Vn=nt+1/3*-(Ui-1))<0&&Vn++,Vn>1&&Vn--,fr[Ui]=255*($r=6*Vn<1?fn+6*(jn-fn)*Vn:2*Vn<1?jn:3*Vn<2?fn+(jn-fn)*(2/3-Vn)*6:fn);return fr},L.hsl.hsv=function(xe){var nt=xe[0],St=xe[1]/100,Mt=xe[2]/100,fn=St,jn=Math.max(Mt,.01);return St*=(Mt*=2)<=1?Mt:2-Mt,fn*=jn<=1?jn:2-jn,[nt,100*(0===Mt?2*fn/(jn+fn):2*St/(Mt+St)),(Mt+St)/2*100]},L.hsv.rgb=function(xe){var nt=xe[0]/60,St=xe[1]/100,Mt=xe[2]/100,fn=Math.floor(nt)%6,jn=nt-Math.floor(nt),Vn=255*Mt*(1-St),fr=255*Mt*(1-St*jn),$r=255*Mt*(1-St*(1-jn));switch(Mt*=255,fn){case 0:return[Mt,$r,Vn];case 1:return[fr,Mt,Vn];case 2:return[Vn,Mt,$r];case 3:return[Vn,fr,Mt];case 4:return[$r,Vn,Mt];case 5:return[Mt,Vn,fr]}},L.hsv.hsl=function(xe){var jn,Vn,fr,nt=xe[0],St=xe[1]/100,Mt=xe[2]/100,fn=Math.max(Mt,.01);return fr=(2-St)*Mt,Vn=St*fn,[nt,100*(Vn=(Vn/=(jn=(2-St)*fn)<=1?jn:2-jn)||0),100*(fr/=2)]},L.hwb.rgb=function(xe){var jn,Vn,fr,$r,Ui,is,yo,nt=xe[0]/360,St=xe[1]/100,Mt=xe[2]/100,fn=St+Mt;switch(fn>1&&(St/=fn,Mt/=fn),fr=6*nt-(jn=Math.floor(6*nt)),0!=(1&jn)&&(fr=1-fr),$r=St+fr*((Vn=1-Mt)-St),jn){default:case 6:case 0:Ui=Vn,is=$r,yo=St;break;case 1:Ui=$r,is=Vn,yo=St;break;case 2:Ui=St,is=Vn,yo=$r;break;case 3:Ui=St,is=$r,yo=Vn;break;case 4:Ui=$r,is=St,yo=Vn;break;case 5:Ui=Vn,is=St,yo=$r}return[255*Ui,255*is,255*yo]},L.cmyk.rgb=function(xe){var St=xe[1]/100,Mt=xe[2]/100,fn=xe[3]/100;return[255*(1-Math.min(1,xe[0]/100*(1-fn)+fn)),255*(1-Math.min(1,St*(1-fn)+fn)),255*(1-Math.min(1,Mt*(1-fn)+fn))]},L.xyz.rgb=function(xe){var fn,jn,Vn,nt=xe[0]/100,St=xe[1]/100,Mt=xe[2]/100;return jn=-.9689*nt+1.8758*St+.0415*Mt,Vn=.0557*nt+-.204*St+1.057*Mt,fn=(fn=3.2406*nt+-1.5372*St+-.4986*Mt)>.0031308?1.055*Math.pow(fn,1/2.4)-.055:12.92*fn,jn=jn>.0031308?1.055*Math.pow(jn,1/2.4)-.055:12.92*jn,Vn=Vn>.0031308?1.055*Math.pow(Vn,1/2.4)-.055:12.92*Vn,[255*(fn=Math.min(Math.max(0,fn),1)),255*(jn=Math.min(Math.max(0,jn),1)),255*(Vn=Math.min(Math.max(0,Vn),1))]},L.xyz.lab=function(xe){var nt=xe[0],St=xe[1],Mt=xe[2];return St/=100,Mt/=108.883,nt=(nt/=95.047)>.008856?Math.pow(nt,1/3):7.787*nt+16/116,[116*(St=St>.008856?Math.pow(St,1/3):7.787*St+16/116)-16,500*(nt-St),200*(St-(Mt=Mt>.008856?Math.pow(Mt,1/3):7.787*Mt+16/116))]},L.lab.xyz=function(xe){var fn,jn,Vn;fn=xe[1]/500+(jn=(xe[0]+16)/116),Vn=jn-xe[2]/200;var fr=Math.pow(jn,3),$r=Math.pow(fn,3),Ui=Math.pow(Vn,3);return jn=fr>.008856?fr:(jn-16/116)/7.787,fn=$r>.008856?$r:(fn-16/116)/7.787,Vn=Ui>.008856?Ui:(Vn-16/116)/7.787,[fn*=95.047,jn*=100,Vn*=108.883]},L.lab.lch=function(xe){var jn,nt=xe[0],St=xe[1],Mt=xe[2];return(jn=360*Math.atan2(Mt,St)/2/Math.PI)<0&&(jn+=360),[nt,Math.sqrt(St*St+Mt*Mt),jn]},L.lch.lab=function(xe){var Vn,St=xe[1];return Vn=xe[2]/360*2*Math.PI,[xe[0],St*Math.cos(Vn),St*Math.sin(Vn)]},L.rgb.ansi16=function(xe){var nt=xe[0],St=xe[1],Mt=xe[2],fn=1 in arguments?arguments[1]:L.rgb.hsv(xe)[2];if(0===(fn=Math.round(fn/50)))return 30;var jn=30+(Math.round(Mt/255)<<2|Math.round(St/255)<<1|Math.round(nt/255));return 2===fn&&(jn+=60),jn},L.hsv.ansi16=function(xe){return L.rgb.ansi16(L.hsv.rgb(xe),xe[2])},L.rgb.ansi256=function(xe){var nt=xe[0],St=xe[1],Mt=xe[2];return nt===St&&St===Mt?nt<8?16:nt>248?231:Math.round((nt-8)/247*24)+232:16+36*Math.round(nt/255*5)+6*Math.round(St/255*5)+Math.round(Mt/255*5)},L.ansi16.rgb=function(xe){var nt=xe%10;if(0===nt||7===nt)return xe>50&&(nt+=3.5),[nt=nt/10.5*255,nt,nt];var St=.5*(1+~~(xe>50));return[(1&nt)*St*255,(nt>>1&1)*St*255,(nt>>2&1)*St*255]},L.ansi256.rgb=function(xe){if(xe>=232){var nt=10*(xe-232)+8;return[nt,nt,nt]}var St;return xe-=16,[Math.floor(xe/36)/5*255,Math.floor((St=xe%36)/6)/5*255,St%6/5*255]},L.rgb.hex=function(xe){var St=(((255&Math.round(xe[0]))<<16)+((255&Math.round(xe[1]))<<8)+(255&Math.round(xe[2]))).toString(16).toUpperCase();return"000000".substring(St.length)+St},L.hex.rgb=function(xe){var nt=xe.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!nt)return[0,0,0];var St=nt[0];3===nt[0].length&&(St=St.split("").map(function(fr){return fr+fr}).join(""));var Mt=parseInt(St,16);return[Mt>>16&255,Mt>>8&255,255&Mt]},L.rgb.hcg=function(xe){var $r,nt=xe[0]/255,St=xe[1]/255,Mt=xe[2]/255,fn=Math.max(Math.max(nt,St),Mt),jn=Math.min(Math.min(nt,St),Mt),Vn=fn-jn;return $r=Vn<=0?0:fn===nt?(St-Mt)/Vn%6:fn===St?2+(Mt-nt)/Vn:4+(nt-St)/Vn+4,$r/=6,[360*($r%=1),100*Vn,100*(Vn<1?jn/(1-Vn):0)]},L.hsl.hcg=function(xe){var Mt,nt=xe[1]/100,St=xe[2]/100,fn=0;return(Mt=St<.5?2*nt*St:2*nt*(1-St))<1&&(fn=(St-.5*Mt)/(1-Mt)),[xe[0],100*Mt,100*fn]},L.hsv.hcg=function(xe){var St=xe[2]/100,Mt=xe[1]/100*St,fn=0;return Mt<1&&(fn=(St-Mt)/(1-Mt)),[xe[0],100*Mt,100*fn]},L.hcg.rgb=function(xe){var St=xe[1]/100,Mt=xe[2]/100;if(0===St)return[255*Mt,255*Mt,255*Mt];var $r,fn=[0,0,0],jn=xe[0]/360%1*6,Vn=jn%1,fr=1-Vn;switch(Math.floor(jn)){case 0:fn[0]=1,fn[1]=Vn,fn[2]=0;break;case 1:fn[0]=fr,fn[1]=1,fn[2]=0;break;case 2:fn[0]=0,fn[1]=1,fn[2]=Vn;break;case 3:fn[0]=0,fn[1]=fr,fn[2]=1;break;case 4:fn[0]=Vn,fn[1]=0,fn[2]=1;break;default:fn[0]=1,fn[1]=0,fn[2]=fr}return[255*(St*fn[0]+($r=(1-St)*Mt)),255*(St*fn[1]+$r),255*(St*fn[2]+$r)]},L.hcg.hsv=function(xe){var nt=xe[1]/100,Mt=nt+xe[2]/100*(1-nt),fn=0;return Mt>0&&(fn=nt/Mt),[xe[0],100*fn,100*Mt]},L.hcg.hsl=function(xe){var nt=xe[1]/100,Mt=xe[2]/100*(1-nt)+.5*nt,fn=0;return Mt>0&&Mt<.5?fn=nt/(2*Mt):Mt>=.5&&Mt<1&&(fn=nt/(2*(1-Mt))),[xe[0],100*fn,100*Mt]},L.hcg.hwb=function(xe){var nt=xe[1]/100,Mt=nt+xe[2]/100*(1-nt);return[xe[0],100*(Mt-nt),100*(1-Mt)]},L.hwb.hcg=function(xe){var Mt=1-xe[2]/100,fn=Mt-xe[1]/100,jn=0;return fn<1&&(jn=(Mt-fn)/(1-fn)),[xe[0],100*fn,100*jn]},L.apple.rgb=function(xe){return[xe[0]/65535*255,xe[1]/65535*255,xe[2]/65535*255]},L.rgb.apple=function(xe){return[xe[0]/255*65535,xe[1]/255*65535,xe[2]/255*65535]},L.gray.rgb=function(xe){return[xe[0]/100*255,xe[0]/100*255,xe[0]/100*255]},L.gray.hsl=L.gray.hsv=function(xe){return[0,0,xe[0]]},L.gray.hwb=function(xe){return[0,100,xe[0]]},L.gray.cmyk=function(xe){return[0,0,0,xe[0]]},L.gray.lab=function(xe){return[xe[0],0,0]},L.gray.hex=function(xe){var nt=255&Math.round(xe[0]/100*255),Mt=((nt<<16)+(nt<<8)+nt).toString(16).toUpperCase();return"000000".substring(Mt.length)+Mt},L.rgb.gray=function(xe){return[(xe[0]+xe[1]+xe[2])/3/255*100]}});function fe(h){var E=function ie(){for(var h={},E=Object.keys(e),P=E.length,L=0;L<P;L++)h[E[L]]={distance:-1,parent:null};return h}(),P=[h];for(E[h].distance=0;P.length;)for(var L=P.pop(),X=Object.keys(e[L]),de=X.length,ve=0;ve<de;ve++){var Ye=X[ve],xe=E[Ye];-1===xe.distance&&(xe.distance=E[L].distance+1,xe.parent=L,P.unshift(Ye))}return E}function he(h,E){return function(P){return E(h(P))}}function Ce(h,E){for(var P=[E[h].parent,h],L=e[E[h].parent][h],X=E[h].parent;E[X].parent;)P.unshift(E[X].parent),L=he(e[E[X].parent][X],L),X=E[X].parent;return L.conversion=P,L}var Be={};Object.keys(e).forEach(function(h){Be[h]={},Object.defineProperty(Be[h],"channels",{value:e[h].channels}),Object.defineProperty(Be[h],"labels",{value:e[h].labels});var E=function(h){for(var E=fe(h),P={},L=Object.keys(E),X=L.length,de=0;de<X;de++){var ve=L[de];null!==E[ve].parent&&(P[ve]=Ce(ve,E))}return P}(h);Object.keys(E).forEach(function(L){var X=E[L];Be[h][L]=function He(h){var E=function(P){if(null==P)return P;arguments.length>1&&(P=Array.prototype.slice.call(arguments));var L=h(P);if("object"==typeof L)for(var X=L.length,de=0;de<X;de++)L[de]=Math.round(L[de]);return L};return"conversion"in h&&(E.conversion=h.conversion),E}(X),Be[h][L].raw=function Xe(h){var E=function(P){return null==P?P:(arguments.length>1&&(P=Array.prototype.slice.call(arguments)),h(P))};return"conversion"in h&&(E.conversion=h.conversion),E}(X)})});var Pe=Be,Ge={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Oe={getRgba:Tt,getHsla:We,getRgb:function Nt(h){var E=Tt(h);return E&&E.slice(0,3)},getHsl:function Yt(h){var E=We(h);return E&&E.slice(0,3)},getHwb:Qt,getAlpha:function dn(h){var E=Tt(h);return E||(E=We(h))||(E=Qt(h))?E[3]:void 0},hexString:function rn(h,P){return P=void 0!==P&&3===h.length?P:h[3],"#"+Br(h[0])+Br(h[1])+Br(h[2])+(P>=0&&P<1?Br(Math.round(255*P)):"")},rgbString:function vt(h,E){return E<1||h[3]&&h[3]<1?xt(h,E):"rgb("+h[0]+", "+h[1]+", "+h[2]+")"},rgbaString:xt,percentString:function Ct(h,E){return E<1||h[3]&&h[3]<1?Gt(h,E):"rgb("+Math.round(h[0]/255*100)+"%, "+Math.round(h[1]/255*100)+"%, "+Math.round(h[2]/255*100)+"%)"},percentaString:Gt,hslString:function Fn(h,E){return E<1||h[3]&&h[3]<1?pr(h,E):"hsl("+h[0]+", "+h[1]+"%, "+h[2]+"%)"},hslaString:pr,hwbString:function mi(h,E){return void 0===E&&(E=void 0!==h[3]?h[3]:1),"hwb("+h[0]+", "+h[1]+"%, "+h[2]+"%"+(void 0!==E&&1!==E?", "+E:"")+")"},keyword:function ci(h){return Ur[h.slice(0,3)]}};function Tt(h){if(h){var ve=[0,0,0],Ye=1,xe=h.match(/^#([a-fA-F0-9]{3,4})$/i),nt="";if(xe){nt=(xe=xe[1])[3];for(var St=0;St<ve.length;St++)ve[St]=parseInt(xe[St]+xe[St],16);nt&&(Ye=Math.round(parseInt(nt+nt,16)/255*100)/100)}else if(xe=h.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){for(nt=xe[2],xe=xe[1],St=0;St<ve.length;St++)ve[St]=parseInt(xe.slice(2*St,2*St+2),16);nt&&(Ye=Math.round(parseInt(nt,16)/255*100)/100)}else if(xe=h.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(St=0;St<ve.length;St++)ve[St]=parseInt(xe[St+1]);Ye=parseFloat(xe[4])}else if(xe=h.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(St=0;St<ve.length;St++)ve[St]=Math.round(2.55*parseFloat(xe[St+1]));Ye=parseFloat(xe[4])}else if(xe=h.match(/(\w+)/)){if("transparent"==xe[1])return[0,0,0,0];if(!(ve=Ge[xe[1]]))return}for(St=0;St<ve.length;St++)ve[St]=hr(ve[St],0,255);return Ye=Ye||0==Ye?hr(Ye,0,1):1,ve[3]=Ye,ve}}function We(h){if(h){var P=h.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(P){var L=parseFloat(P[4]);return[hr(parseInt(P[1]),0,360),hr(parseFloat(P[2]),0,100),hr(parseFloat(P[3]),0,100),hr(isNaN(L)?1:L,0,1)]}}}function Qt(h){if(h){var P=h.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(P){var L=parseFloat(P[4]);return[hr(parseInt(P[1]),0,360),hr(parseFloat(P[2]),0,100),hr(parseFloat(P[3]),0,100),hr(isNaN(L)?1:L,0,1)]}}}function xt(h,E){return void 0===E&&(E=void 0!==h[3]?h[3]:1),"rgba("+h[0]+", "+h[1]+", "+h[2]+", "+E+")"}function Gt(h,E){return"rgba("+Math.round(h[0]/255*100)+"%, "+Math.round(h[1]/255*100)+"%, "+Math.round(h[2]/255*100)+"%, "+(E||h[3]||1)+")"}function pr(h,E){return void 0===E&&(E=void 0!==h[3]?h[3]:1),"hsla("+h[0]+", "+h[1]+"%, "+h[2]+"%, "+E+")"}function hr(h,E,P){return Math.min(Math.max(E,h),P)}function Br(h){var E=h.toString(16).toUpperCase();return E.length<2?"0"+E:E}var Ur={};for(var Hn in Ge)Ur[Ge[Hn]]=Hn;var er=function(h){return h instanceof er?h:this instanceof er?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof h?(E=Oe.getRgba(h))?this.setValues("rgb",E):(E=Oe.getHsla(h))?this.setValues("hsl",E):(E=Oe.getHwb(h))&&this.setValues("hwb",E):"object"==typeof h&&(void 0!==(E=h).r||void 0!==E.red?this.setValues("rgb",E):void 0!==E.l||void 0!==E.lightness?this.setValues("hsl",E):void 0!==E.v||void 0!==E.value?this.setValues("hsv",E):void 0!==E.w||void 0!==E.whiteness?this.setValues("hwb",E):(void 0!==E.c||void 0!==E.cyan)&&this.setValues("cmyk",E)))):new er(h);var E};er.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var h=this.values;return 1!==h.alpha?h.hwb.concat([h.alpha]):h.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var h=this.values;return h.rgb.concat([h.alpha])},hslaArray:function(){var h=this.values;return h.hsl.concat([h.alpha])},alpha:function(h){return void 0===h?this.values.alpha:(this.setValues("alpha",h),this)},red:function(h){return this.setChannel("rgb",0,h)},green:function(h){return this.setChannel("rgb",1,h)},blue:function(h){return this.setChannel("rgb",2,h)},hue:function(h){return h&&(h=(h%=360)<0?360+h:h),this.setChannel("hsl",0,h)},saturation:function(h){return this.setChannel("hsl",1,h)},lightness:function(h){return this.setChannel("hsl",2,h)},saturationv:function(h){return this.setChannel("hsv",1,h)},whiteness:function(h){return this.setChannel("hwb",1,h)},blackness:function(h){return this.setChannel("hwb",2,h)},value:function(h){return this.setChannel("hsv",2,h)},cyan:function(h){return this.setChannel("cmyk",0,h)},magenta:function(h){return this.setChannel("cmyk",1,h)},yellow:function(h){return this.setChannel("cmyk",2,h)},black:function(h){return this.setChannel("cmyk",3,h)},hexString:function(){return Oe.hexString(this.values.rgb)},rgbString:function(){return Oe.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return Oe.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return Oe.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return Oe.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return Oe.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return Oe.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return Oe.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var h=this.values.rgb;return h[0]<<16|h[1]<<8|h[2]},luminosity:function(){for(var h=this.values.rgb,E=[],P=0;P<h.length;P++){var L=h[P]/255;E[P]=L<=.03928?L/12.92:Math.pow((L+.055)/1.055,2.4)}return.2126*E[0]+.7152*E[1]+.0722*E[2]},contrast:function(h){var E=this.luminosity(),P=h.luminosity();return E>P?(E+.05)/(P+.05):(P+.05)/(E+.05)},level:function(h){var E=this.contrast(h);return E>=7.1?"AAA":E>=4.5?"AA":""},dark:function(){var h=this.values.rgb;return(299*h[0]+587*h[1]+114*h[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var h=[],E=0;E<3;E++)h[E]=255-this.values.rgb[E];return this.setValues("rgb",h),this},lighten:function(h){var E=this.values.hsl;return E[2]+=E[2]*h,this.setValues("hsl",E),this},darken:function(h){var E=this.values.hsl;return E[2]-=E[2]*h,this.setValues("hsl",E),this},saturate:function(h){var E=this.values.hsl;return E[1]+=E[1]*h,this.setValues("hsl",E),this},desaturate:function(h){var E=this.values.hsl;return E[1]-=E[1]*h,this.setValues("hsl",E),this},whiten:function(h){var E=this.values.hwb;return E[1]+=E[1]*h,this.setValues("hwb",E),this},blacken:function(h){var E=this.values.hwb;return E[2]+=E[2]*h,this.setValues("hwb",E),this},greyscale:function(){var h=this.values.rgb,E=.3*h[0]+.59*h[1]+.11*h[2];return this.setValues("rgb",[E,E,E]),this},clearer:function(h){var E=this.values.alpha;return this.setValues("alpha",E-E*h),this},opaquer:function(h){var E=this.values.alpha;return this.setValues("alpha",E+E*h),this},rotate:function(h){var E=this.values.hsl,P=(E[0]+h)%360;return E[0]=P<0?360+P:P,this.setValues("hsl",E),this},mix:function(h,E){var P=this,L=h,X=void 0===E?.5:E,de=2*X-1,ve=P.alpha()-L.alpha(),Ye=((de*ve==-1?de:(de+ve)/(1+de*ve))+1)/2,xe=1-Ye;return this.rgb(Ye*P.red()+xe*L.red(),Ye*P.green()+xe*L.green(),Ye*P.blue()+xe*L.blue()).alpha(P.alpha()*X+L.alpha()*(1-X))},toJSON:function(){return this.rgb()},clone:function(){var L,X,h=new er,E=this.values,P=h.values;for(var de in E)E.hasOwnProperty(de)&&("[object Array]"===(X={}.toString.call(L=E[de]))?P[de]=L.slice(0):"[object Number]"===X?P[de]=L:console.error("unexpected color value:",L));return h}},er.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},er.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},er.prototype.getValues=function(h){for(var E=this.values,P={},L=0;L<h.length;L++)P[h.charAt(L)]=E[h][L];return 1!==E.alpha&&(P.a=E.alpha),P},er.prototype.setValues=function(h,E){var ve,xe,P=this.values,L=this.spaces,X=this.maxes,de=1;if(this.valid=!0,"alpha"===h)de=E;else if(E.length)P[h]=E.slice(0,h.length),de=E[h.length];else if(void 0!==E[h.charAt(0)]){for(ve=0;ve<h.length;ve++)P[h][ve]=E[h.charAt(ve)];de=E.a}else if(void 0!==E[L[h][0]]){var Ye=L[h];for(ve=0;ve<h.length;ve++)P[h][ve]=E[Ye[ve]];de=E.alpha}if(P.alpha=Math.max(0,Math.min(1,void 0===de?P.alpha:de)),"alpha"===h)return!1;for(ve=0;ve<h.length;ve++)xe=Math.max(0,Math.min(X[h][ve],P[h][ve])),P[h][ve]=Math.round(xe);for(var nt in L)nt!==h&&(P[nt]=Pe[h][nt](P[h]));return!0},er.prototype.setSpace=function(h,E){var P=E[0];return void 0===P?this.getValues(h):("number"==typeof P&&(P=Array.prototype.slice.call(E)),this.setValues(h,P),this)},er.prototype.setChannel=function(h,E,P){var L=this.values[h];return void 0===P?L[E]:(P===L[E]||(L[E]=P,this.setValues(h,L)),this)},"undefined"!=typeof window&&(window.Color=er);var _r=er;function ei(h){return-1===["__proto__","prototype","constructor"].indexOf(h)}var h,bi={noop:function(){},uid:(h=0,function(){return h++}),isNullOrUndef:function(h){return null==h},isArray:function(h){if(Array.isArray&&Array.isArray(h))return!0;var E=Object.prototype.toString.call(h);return"[object"===E.substr(0,7)&&"Array]"===E.substr(-6)},isObject:function(h){return null!==h&&"[object Object]"===Object.prototype.toString.call(h)},isFinite:function(h){return("number"==typeof h||h instanceof Number)&&isFinite(h)},valueOrDefault:function(h,E){return void 0===h?E:h},valueAtIndexOrDefault:function(h,E,P){return bi.valueOrDefault(bi.isArray(h)?h[E]:h,P)},callback:function(h,E,P){if(h&&"function"==typeof h.call)return h.apply(P,E)},each:function(h,E,P,L){var X,de,ve;if(bi.isArray(h))if(de=h.length,L)for(X=de-1;X>=0;X--)E.call(P,h[X],X);else for(X=0;X<de;X++)E.call(P,h[X],X);else if(bi.isObject(h))for(de=(ve=Object.keys(h)).length,X=0;X<de;X++)E.call(P,h[ve[X]],ve[X])},arrayEquals:function(h,E){var P,L,X,de;if(!h||!E||h.length!==E.length)return!1;for(P=0,L=h.length;P<L;++P)if(de=E[P],(X=h[P])instanceof Array&&de instanceof Array){if(!bi.arrayEquals(X,de))return!1}else if(X!==de)return!1;return!0},clone:function(h){if(bi.isArray(h))return h.map(bi.clone);if(bi.isObject(h)){for(var E=Object.create(h),P=Object.keys(h),L=P.length,X=0;X<L;++X)E[P[X]]=bi.clone(h[P[X]]);return E}return h},_merger:function(h,E,P,L){if(ei(h)){var X=E[h],de=P[h];bi.isObject(X)&&bi.isObject(de)?bi.merge(X,de,L):E[h]=bi.clone(de)}},_mergerIf:function(h,E,P){if(ei(h)){var L=E[h],X=P[h];bi.isObject(L)&&bi.isObject(X)?bi.mergeIf(L,X):E.hasOwnProperty(h)||(E[h]=bi.clone(X))}},merge:function(h,E,P){var de,ve,Ye,xe,nt,L=bi.isArray(E)?E:[E],X=L.length;if(!bi.isObject(h))return h;for(de=(P=P||{}).merger||bi._merger,ve=0;ve<X;++ve)if(bi.isObject(E=L[ve]))for(nt=0,xe=(Ye=Object.keys(E)).length;nt<xe;++nt)de(Ye[nt],h,E,P);return h},mergeIf:function(h,E){return bi.merge(h,E,{merger:bi._mergerIf})},extend:Object.assign||function(h){return bi.merge(h,[].slice.call(arguments,1),{merger:function(E,P,L){P[E]=L[E]}})},inherits:function(h){var E=this,P=h&&h.hasOwnProperty("constructor")?h.constructor:function(){return E.apply(this,arguments)},L=function(){this.constructor=P};return L.prototype=E.prototype,P.prototype=new L,P.extend=bi.inherits,h&&bi.extend(P.prototype,h),P.__super__=E.prototype,P},_deprecated:function(h,E,P,L){void 0!==E&&console.warn(h+': "'+P+'" is deprecated. Please use "'+L+'" instead')}},fi=bi;bi.callCallback=bi.callback,bi.indexOf=function(h,E,P){return Array.prototype.indexOf.call(h,E,P)},bi.getValueOrDefault=bi.valueOrDefault,bi.getValueAtIndexOrDefault=bi.valueAtIndexOrDefault;var no={linear:function(h){return h},easeInQuad:function(h){return h*h},easeOutQuad:function(h){return-h*(h-2)},easeInOutQuad:function(h){return(h/=.5)<1?.5*h*h:-.5*(--h*(h-2)-1)},easeInCubic:function(h){return h*h*h},easeOutCubic:function(h){return(h-=1)*h*h+1},easeInOutCubic:function(h){return(h/=.5)<1?.5*h*h*h:.5*((h-=2)*h*h+2)},easeInQuart:function(h){return h*h*h*h},easeOutQuart:function(h){return-((h-=1)*h*h*h-1)},easeInOutQuart:function(h){return(h/=.5)<1?.5*h*h*h*h:-.5*((h-=2)*h*h*h-2)},easeInQuint:function(h){return h*h*h*h*h},easeOutQuint:function(h){return(h-=1)*h*h*h*h+1},easeInOutQuint:function(h){return(h/=.5)<1?.5*h*h*h*h*h:.5*((h-=2)*h*h*h*h+2)},easeInSine:function(h){return 1-Math.cos(h*(Math.PI/2))},easeOutSine:function(h){return Math.sin(h*(Math.PI/2))},easeInOutSine:function(h){return-.5*(Math.cos(Math.PI*h)-1)},easeInExpo:function(h){return 0===h?0:Math.pow(2,10*(h-1))},easeOutExpo:function(h){return 1===h?1:1-Math.pow(2,-10*h)},easeInOutExpo:function(h){return 0===h?0:1===h?1:(h/=.5)<1?.5*Math.pow(2,10*(h-1)):.5*(2-Math.pow(2,-10*--h))},easeInCirc:function(h){return h>=1?h:-(Math.sqrt(1-h*h)-1)},easeOutCirc:function(h){return Math.sqrt(1-(h-=1)*h)},easeInOutCirc:function(h){return(h/=.5)<1?-.5*(Math.sqrt(1-h*h)-1):.5*(Math.sqrt(1-(h-=2)*h)+1)},easeInElastic:function(h){var E=1.70158,P=0,L=1;return 0===h?0:1===h?1:(P||(P=.3),L<1?(L=1,E=P/4):E=P/(2*Math.PI)*Math.asin(1/L),-L*Math.pow(2,10*(h-=1))*Math.sin((h-E)*(2*Math.PI)/P))},easeOutElastic:function(h){var E=1.70158,P=0,L=1;return 0===h?0:1===h?1:(P||(P=.3),L<1?(L=1,E=P/4):E=P/(2*Math.PI)*Math.asin(1/L),L*Math.pow(2,-10*h)*Math.sin((h-E)*(2*Math.PI)/P)+1)},easeInOutElastic:function(h){var E=1.70158,P=0,L=1;return 0===h?0:2==(h/=.5)?1:(P||(P=.45),L<1?(L=1,E=P/4):E=P/(2*Math.PI)*Math.asin(1/L),h<1?L*Math.pow(2,10*(h-=1))*Math.sin((h-E)*(2*Math.PI)/P)*-.5:L*Math.pow(2,-10*(h-=1))*Math.sin((h-E)*(2*Math.PI)/P)*.5+1)},easeInBack:function(h){var E=1.70158;return h*h*((E+1)*h-E)},easeOutBack:function(h){var E=1.70158;return(h-=1)*h*((E+1)*h+E)+1},easeInOutBack:function(h){var E=1.70158;return(h/=.5)<1?h*h*((1+(E*=1.525))*h-E)*.5:.5*((h-=2)*h*((1+(E*=1.525))*h+E)+2)},easeInBounce:function(h){return 1-no.easeOutBounce(1-h)},easeOutBounce:function(h){return h<1/2.75?7.5625*h*h:h<2/2.75?7.5625*(h-=1.5/2.75)*h+.75:h<2.5/2.75?7.5625*(h-=2.25/2.75)*h+.9375:7.5625*(h-=2.625/2.75)*h+.984375},easeInOutBounce:function(h){return h<.5?.5*no.easeInBounce(2*h):.5*no.easeOutBounce(2*h-1)+.5}},xo={effects:no};fi.easingEffects=no;var Er=Math.PI,an=Er/180,vn=2*Er,Zn=Er/2,Xn=Er/4,zn=2*Er/3,ri={clear:function(h){h.ctx.clearRect(0,0,h.width,h.height)},roundedRect:function(h,E,P,L,X,de){if(de){var ve=Math.min(de,X/2,L/2),Ye=E+ve,xe=P+ve,nt=E+L-ve,St=P+X-ve;h.moveTo(E,xe),Ye<nt&&xe<St?(h.arc(Ye,xe,ve,-Er,-Zn),h.arc(nt,xe,ve,-Zn,0),h.arc(nt,St,ve,0,Zn),h.arc(Ye,St,ve,Zn,Er)):Ye<nt?(h.moveTo(Ye,P),h.arc(nt,xe,ve,-Zn,Zn),h.arc(Ye,xe,ve,Zn,Er+Zn)):xe<St?(h.arc(Ye,xe,ve,-Er,0),h.arc(Ye,St,ve,0,Er)):h.arc(Ye,xe,ve,-Er,Er),h.closePath(),h.moveTo(E,P)}else h.rect(E,P,L,X)},drawPoint:function(h,E,P,L,X,de){var ve,Ye,xe,nt,St,Mt=(de||0)*an;if(E&&"object"==typeof E&&("[object HTMLImageElement]"===(ve=E.toString())||"[object HTMLCanvasElement]"===ve))return h.save(),h.translate(L,X),h.rotate(Mt),h.drawImage(E,-E.width/2,-E.height/2,E.width,E.height),void h.restore();if(!(isNaN(P)||P<=0)){switch(h.beginPath(),E){default:h.arc(L,X,P,0,vn),h.closePath();break;case"triangle":h.moveTo(L+Math.sin(Mt)*P,X-Math.cos(Mt)*P),Mt+=zn,h.lineTo(L+Math.sin(Mt)*P,X-Math.cos(Mt)*P),Mt+=zn,h.lineTo(L+Math.sin(Mt)*P,X-Math.cos(Mt)*P),h.closePath();break;case"rectRounded":nt=P-(St=.516*P),Ye=Math.cos(Mt+Xn)*nt,xe=Math.sin(Mt+Xn)*nt,h.arc(L-Ye,X-xe,St,Mt-Er,Mt-Zn),h.arc(L+xe,X-Ye,St,Mt-Zn,Mt),h.arc(L+Ye,X+xe,St,Mt,Mt+Zn),h.arc(L-xe,X+Ye,St,Mt+Zn,Mt+Er),h.closePath();break;case"rect":if(!de){nt=Math.SQRT1_2*P,h.rect(L-nt,X-nt,2*nt,2*nt);break}Mt+=Xn;case"rectRot":Ye=Math.cos(Mt)*P,xe=Math.sin(Mt)*P,h.moveTo(L-Ye,X-xe),h.lineTo(L+xe,X-Ye),h.lineTo(L+Ye,X+xe),h.lineTo(L-xe,X+Ye),h.closePath();break;case"crossRot":Mt+=Xn;case"cross":Ye=Math.cos(Mt)*P,xe=Math.sin(Mt)*P,h.moveTo(L-Ye,X-xe),h.lineTo(L+Ye,X+xe),h.moveTo(L+xe,X-Ye),h.lineTo(L-xe,X+Ye);break;case"star":Ye=Math.cos(Mt)*P,xe=Math.sin(Mt)*P,h.moveTo(L-Ye,X-xe),h.lineTo(L+Ye,X+xe),h.moveTo(L+xe,X-Ye),h.lineTo(L-xe,X+Ye),Mt+=Xn,Ye=Math.cos(Mt)*P,xe=Math.sin(Mt)*P,h.moveTo(L-Ye,X-xe),h.lineTo(L+Ye,X+xe),h.moveTo(L+xe,X-Ye),h.lineTo(L-xe,X+Ye);break;case"line":Ye=Math.cos(Mt)*P,xe=Math.sin(Mt)*P,h.moveTo(L-Ye,X-xe),h.lineTo(L+Ye,X+xe);break;case"dash":h.moveTo(L,X),h.lineTo(L+Math.cos(Mt)*P,X+Math.sin(Mt)*P)}h.fill(),h.stroke()}},_isPointInArea:function(h,E){var P=1e-6;return h.x>E.left-P&&h.x<E.right+P&&h.y>E.top-P&&h.y<E.bottom+P},clipArea:function(h,E){h.save(),h.beginPath(),h.rect(E.left,E.top,E.right-E.left,E.bottom-E.top),h.clip()},unclipArea:function(h){h.restore()},lineTo:function(h,E,P,L){var X=P.steppedLine;if(X){if("middle"===X){var de=(E.x+P.x)/2;h.lineTo(de,L?P.y:E.y),h.lineTo(de,L?E.y:P.y)}else"after"===X&&!L||"after"!==X&&L?h.lineTo(E.x,P.y):h.lineTo(P.x,E.y);h.lineTo(P.x,P.y)}else P.tension?h.bezierCurveTo(L?E.controlPointPreviousX:E.controlPointNextX,L?E.controlPointPreviousY:E.controlPointNextY,L?P.controlPointNextX:P.controlPointPreviousX,L?P.controlPointNextY:P.controlPointPreviousY,P.x,P.y):h.lineTo(P.x,P.y)}},Gi=ri;fi.clear=ri.clear,fi.drawRoundedRectangle=function(h){h.beginPath(),ri.roundedRect.apply(ri,arguments)};var ui={_set:function(h,E){return fi.merge(this[h]||(this[h]={}),E)}};ui._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var vr=ui,Ji=fi.valueOrDefault;var Rn={toLineHeight:function(h,E){var P=(""+h).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!P||"normal"===P[1])return 1.2*E;switch(h=+P[2],P[3]){case"px":return h;case"%":h/=100}return E*h},toPadding:function(h){var E,P,L,X;return fi.isObject(h)?(E=+h.top||0,P=+h.right||0,L=+h.bottom||0,X=+h.left||0):E=P=L=X=+h||0,{top:E,right:P,bottom:L,left:X,height:E+L,width:X+P}},_parseFont:function(h){var E=vr.global,P=Ji(h.fontSize,E.defaultFontSize),L={family:Ji(h.fontFamily,E.defaultFontFamily),lineHeight:fi.options.toLineHeight(Ji(h.lineHeight,E.defaultLineHeight),P),size:P,style:Ji(h.fontStyle,E.defaultFontStyle),weight:null,string:""};return L.string=function mn(h){return!h||fi.isNullOrUndef(h.size)||fi.isNullOrUndef(h.family)?null:(h.style?h.style+" ":"")+(h.weight?h.weight+" ":"")+h.size+"px "+h.family}(L),L},resolve:function(h,E,P,L){var de,ve,Ye,X=!0;for(de=0,ve=h.length;de<ve;++de)if(void 0!==(Ye=h[de])&&(void 0!==E&&"function"==typeof Ye&&(Ye=Ye(E),X=!1),void 0!==P&&fi.isArray(Ye)&&(Ye=Ye[P],X=!1),void 0!==Ye))return L&&!X&&(L.cacheable=!1),Ye}},Wn={_factorize:function(h){var L,E=[],P=Math.sqrt(h);for(L=1;L<P;L++)h%L==0&&(E.push(L),E.push(h/L));return P===(0|P)&&E.push(P),E.sort(function(X,de){return X-de}).pop(),E},log10:Math.log10||function(h){var E=Math.log(h)*Math.LOG10E,P=Math.round(E);return h===Math.pow(10,P)?P:E}},et=Wn;fi.log10=Wn.log10;var Fe=fi,ti=Gi,Ut=Rn,Dn=et,Et={getRtlAdapter:function(h,E,P){return h?function(h,E){return{x:function(P){return h+h+E-P},setWidth:function(P){E=P},textAlign:function(P){return"center"===P?P:"right"===P?"left":"right"},xPlus:function(P,L){return P-L},leftForLtr:function(P,L){return P-L}}}(E,P):{x:function(h){return h},setWidth:function(h){},textAlign:function(h){return h},xPlus:function(h,E){return h+E},leftForLtr:function(h,E){return h}}},overrideTextDirection:function(h,E){var P,L;("ltr"===E||"rtl"===E)&&(L=[(P=h.canvas.style).getPropertyValue("direction"),P.getPropertyPriority("direction")],P.setProperty("direction",E,"important"),h.prevTextDirection=L)},restoreTextDirection:function(h){var E=h.prevTextDirection;void 0!==E&&(delete h.prevTextDirection,h.canvas.style.setProperty("direction",E[0],E[1]))}};Fe.easing=xo,Fe.canvas=ti,Fe.options=Ut,Fe.math=Dn,Fe.rtl=Et;var _t=function(h){Fe.extend(this,h),this.initialize.apply(this,arguments)};Fe.extend(_t.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var h=this;return h._view||(h._view=Fe.extend({},h._model)),h._start={},h},transition:function(h){var E=this,P=E._model,L=E._start,X=E._view;return P&&1!==h?(X||(X=E._view={}),L||(L=E._start={}),function $t(h,E,P,L){var de,ve,Ye,xe,nt,St,Mt,fn,jn,X=Object.keys(P);for(de=0,ve=X.length;de<ve;++de)if(St=P[Ye=X[de]],E.hasOwnProperty(Ye)||(E[Ye]=St),(xe=E[Ye])!==St&&"_"!==Ye[0]){if(h.hasOwnProperty(Ye)||(h[Ye]=xe),(Mt=typeof St)==typeof(nt=h[Ye]))if("string"===Mt){if((fn=_r(nt)).valid&&(jn=_r(St)).valid){E[Ye]=jn.mix(fn,L).rgbString();continue}}else if(Fe.isFinite(nt)&&Fe.isFinite(St)){E[Ye]=nt+(St-nt)*L;continue}E[Ye]=St}}(L,X,P,h),E):(E._view=Fe.extend({},P),E._start=null,E)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return Fe.isNumber(this._model.x)&&Fe.isNumber(this._model.y)}}),_t.extend=Fe.inherits;var yt=_t,Vt=yt.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),yn=Vt;Object.defineProperty(Vt.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Vt.prototype,"chartInstance",{get:function(){return this.chart},set:function(h){this.chart=h}}),vr._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:Fe.noop,onComplete:Fe.noop}});var Cr={animations:[],request:null,addAnimation:function(h,E,P,L){var de,ve,X=this.animations;for(E.chart=h,E.startTime=Date.now(),E.duration=P,L||(h.animating=!0),de=0,ve=X.length;de<ve;++de)if(X[de].chart===h)return void(X[de]=E);X.push(E),1===X.length&&this.requestAnimationFrame()},cancelAnimation:function(h){var E=Fe.findIndex(this.animations,function(P){return P.chart===h});-1!==E&&(this.animations.splice(E,1),h.animating=!1)},requestAnimationFrame:function(){var h=this;null===h.request&&(h.request=Fe.requestAnimFrame.call(window,function(){h.request=null,h.startDigest()}))},startDigest:function(){var h=this;h.advance(),h.animations.length>0&&h.requestAnimationFrame()},advance:function(){for(var E,P,L,X,h=this.animations,de=0;de<h.length;)P=(E=h[de]).chart,L=E.numSteps,X=Math.floor((Date.now()-E.startTime)/E.duration*L)+1,E.currentStep=Math.min(X,L),Fe.callback(E.render,[P,E],P),Fe.callback(E.onAnimationProgress,[E],P),E.currentStep>=L?(Fe.callback(E.onAnimationComplete,[E],P),P.animating=!1,h.splice(de,1)):++de}},xi=Fe.options.resolve,yi=["push","pop","shift","splice","unshift"];function Qo(h,E){var P=h._chartjs;if(P){var L=P.listeners,X=L.indexOf(E);-1!==X&&L.splice(X,1),!(L.length>0)&&(yi.forEach(function(de){delete h[de]}),delete h._chartjs)}}var lo=function(h,E){this.initialize(h,E)};Fe.extend(lo.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(h,E){var P=this;P.chart=h,P.index=E,P.linkScales(),P.addElements(),P._type=P.getMeta().type},updateIndex:function(h){this.index=h},linkScales:function(){var h=this,E=h.getMeta(),P=h.chart,L=P.scales,X=h.getDataset(),de=P.options.scales;(null===E.xAxisID||!(E.xAxisID in L)||X.xAxisID)&&(E.xAxisID=X.xAxisID||de.xAxes[0].id),(null===E.yAxisID||!(E.yAxisID in L)||X.yAxisID)&&(E.yAxisID=X.yAxisID||de.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(h){return this.chart.scales[h]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&Qo(this._data,this)},createMetaDataset:function(){var h=this,E=h.datasetElementType;return E&&new E({_chart:h.chart,_datasetIndex:h.index})},createMetaData:function(h){var E=this,P=E.dataElementType;return P&&new P({_chart:E.chart,_datasetIndex:E.index,_index:h})},addElements:function(){var X,de,h=this,E=h.getMeta(),P=h.getDataset().data||[],L=E.data;for(X=0,de=P.length;X<de;++X)L[X]=L[X]||h.createMetaData(X);E.dataset=E.dataset||h.createMetaDataset()},addElementAndReset:function(h){var E=this.createMetaData(h);this.getMeta().data.splice(h,0,E),this.updateElement(E,h,!0)},buildOrUpdateElements:function(){var h=this,E=h.getDataset(),P=E.data||(E.data=[]);h._data!==P&&(h._data&&Qo(h._data,h),P&&Object.isExtensible(P)&&function Yo(h,E){h._chartjs?h._chartjs.listeners.push(E):(Object.defineProperty(h,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[E]}}),yi.forEach(function(P){var L="onData"+P.charAt(0).toUpperCase()+P.slice(1),X=h[P];Object.defineProperty(h,P,{configurable:!0,enumerable:!1,value:function(){var de=Array.prototype.slice.call(arguments),ve=X.apply(this,de);return Fe.each(h._chartjs.listeners,function(Ye){"function"==typeof Ye[L]&&Ye[L].apply(Ye,de)}),ve}})}))}(P,h),h._data=P),h.resyncElements()},_configure:function(){var h=this;h._config=Fe.merge(Object.create(null),[h.chart.options.datasets[h._type],h.getDataset()],{merger:function(E,P,L){"_meta"!==E&&"data"!==E&&Fe._merger(E,P,L)}})},_update:function(h){var E=this;E._configure(),E._cachedDataOpts=null,E.update(h)},update:Fe.noop,transition:function(h){for(var E=this.getMeta(),P=E.data||[],L=P.length,X=0;X<L;++X)P[X].transition(h);E.dataset&&E.dataset.transition(h)},draw:function(){var h=this.getMeta(),E=h.data||[],P=E.length,L=0;for(h.dataset&&h.dataset.draw();L<P;++L)E[L].draw()},getStyle:function(h){var X,E=this,P=E.getMeta(),L=P.dataset;return E._configure(),(!1===(X=L&&void 0===h?E._resolveDatasetElementOptions(L||{}):E._resolveDataElementOptions(P.data[h=h||0]||{},h)).fill||null===X.fill)&&(X.backgroundColor=X.borderColor),X},_resolveDatasetElementOptions:function(h,E){var nt,St,Mt,fn,P=this,L=P.chart,X=P._config,de=h.custom||{},ve=L.options.elements[P.datasetElementType.prototype._type]||{},Ye=P._datasetElementOptions,xe={},jn={chart:L,dataset:P.getDataset(),datasetIndex:P.index,hover:E};for(nt=0,St=Ye.length;nt<St;++nt)Mt=Ye[nt],fn=E?"hover"+Mt.charAt(0).toUpperCase()+Mt.slice(1):Mt,xe[Mt]=xi([de[fn],X[fn],ve[fn]],jn);return xe},_resolveDataElementOptions:function(h,E){var P=this,L=h&&h.custom,X=P._cachedDataOpts;if(X&&!L)return X;var fn,jn,Vn,fr,de=P.chart,ve=P._config,Ye=de.options.elements[P.dataElementType.prototype._type]||{},xe=P._dataElementOptions,nt={},St={chart:de,dataIndex:E,dataset:P.getDataset(),datasetIndex:P.index},Mt={cacheable:!L};if(L=L||{},Fe.isArray(xe))for(jn=0,Vn=xe.length;jn<Vn;++jn)nt[fr=xe[jn]]=xi([L[fr],ve[fr],Ye[fr]],St,E,Mt);else for(jn=0,Vn=(fn=Object.keys(xe)).length;jn<Vn;++jn)nt[fr=fn[jn]]=xi([L[fr],ve[xe[fr]],ve[fr],Ye[fr]],St,E,Mt);return Mt.cacheable&&(P._cachedDataOpts=Object.freeze(nt)),nt},removeHoverStyle:function(h){Fe.merge(h._model,h.$previousStyle||{}),delete h.$previousStyle},setHoverStyle:function(h){var E=this.chart.data.datasets[h._datasetIndex],P=h._index,L=h.custom||{},X=h._model,de=Fe.getHoverColor;h.$previousStyle={backgroundColor:X.backgroundColor,borderColor:X.borderColor,borderWidth:X.borderWidth},X.backgroundColor=xi([L.hoverBackgroundColor,E.hoverBackgroundColor,de(X.backgroundColor)],void 0,P),X.borderColor=xi([L.hoverBorderColor,E.hoverBorderColor,de(X.borderColor)],void 0,P),X.borderWidth=xi([L.hoverBorderWidth,E.hoverBorderWidth,X.borderWidth],void 0,P)},_removeDatasetHoverStyle:function(){var h=this.getMeta().dataset;h&&this.removeHoverStyle(h)},_setDatasetHoverStyle:function(){var P,L,X,de,ve,Ye,h=this.getMeta().dataset,E={};if(h){for(Ye=h._model,ve=this._resolveDatasetElementOptions(h,!0),P=0,L=(de=Object.keys(ve)).length;P<L;++P)E[X=de[P]]=Ye[X],Ye[X]=ve[X];h.$previousStyle=E}},resyncElements:function(){var h=this,E=h.getMeta(),P=h.getDataset().data,L=E.data.length,X=P.length;X<L?E.data.splice(X,L-X):X>L&&h.insertElements(L,X-L)},insertElements:function(h,E){for(var P=0;P<E;++P)this.addElementAndReset(h+P)},onDataPush:function(){var h=arguments.length;this.insertElements(this.getDataset().data.length-h,h)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(h,E){this.getMeta().data.splice(h,E),this.insertElements(h,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),lo.extend=Fe.inherits;var Ri=lo,ko=2*Math.PI;function Xo(h,E){var P=E.startAngle,L=E.endAngle,X=E.pixelMargin,de=X/E.outerRadius,ve=E.x,Ye=E.y;h.beginPath(),h.arc(ve,Ye,E.outerRadius,P-de,L+de),E.innerRadius>X?h.arc(ve,Ye,E.innerRadius-X,L+(de=X/E.innerRadius),P-de,!0):h.arc(ve,Ye,X,L+Math.PI/2,P-Math.PI/2),h.closePath(),h.clip()}function si(h,E,P){var L="inner"===E.borderAlign;L?(h.lineWidth=2*E.borderWidth,h.lineJoin="round"):(h.lineWidth=E.borderWidth,h.lineJoin="bevel"),P.fullCircles&&function ir(h,E,P,L){var de,X=P.endAngle;for(L&&(P.endAngle=P.startAngle+ko,Xo(h,P),P.endAngle=X,P.endAngle===P.startAngle&&P.fullCircles&&(P.endAngle+=ko,P.fullCircles--)),h.beginPath(),h.arc(P.x,P.y,P.innerRadius,P.startAngle+ko,P.startAngle,!0),de=0;de<P.fullCircles;++de)h.stroke();for(h.beginPath(),h.arc(P.x,P.y,E.outerRadius,P.startAngle,P.startAngle+ko),de=0;de<P.fullCircles;++de)h.stroke()}(h,E,P,L),L&&Xo(h,P),h.beginPath(),h.arc(P.x,P.y,E.outerRadius,P.startAngle,P.endAngle),h.arc(P.x,P.y,P.innerRadius,P.endAngle,P.startAngle,!0),h.closePath(),h.stroke()}vr._set("global",{elements:{arc:{backgroundColor:vr.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var kn=yt.extend({_type:"arc",inLabelRange:function(h){var E=this._view;return!!E&&Math.pow(h-E.x,2)<Math.pow(E.radius+E.hoverRadius,2)},inRange:function(h,E){var P=this._view;if(P){for(var L=Fe.getAngleFromPoint(P,{x:h,y:E}),X=L.angle,de=L.distance,ve=P.startAngle,Ye=P.endAngle;Ye<ve;)Ye+=ko;for(;X>Ye;)X-=ko;for(;X<ve;)X+=ko;return X>=ve&&X<=Ye&&de>=P.innerRadius&&de<=P.outerRadius}return!1},getCenterPoint:function(){var h=this._view,E=(h.startAngle+h.endAngle)/2,P=(h.innerRadius+h.outerRadius)/2;return{x:h.x+Math.cos(E)*P,y:h.y+Math.sin(E)*P}},getArea:function(){var h=this._view;return Math.PI*((h.endAngle-h.startAngle)/(2*Math.PI))*(Math.pow(h.outerRadius,2)-Math.pow(h.innerRadius,2))},tooltipPosition:function(){var h=this._view,E=h.startAngle+(h.endAngle-h.startAngle)/2,P=(h.outerRadius-h.innerRadius)/2+h.innerRadius;return{x:h.x+Math.cos(E)*P,y:h.y+Math.sin(E)*P}},draw:function(){var X,h=this._chart.ctx,E=this._view,P="inner"===E.borderAlign?.33:0,L={x:E.x,y:E.y,innerRadius:E.innerRadius,outerRadius:Math.max(E.outerRadius-P,0),pixelMargin:P,startAngle:E.startAngle,endAngle:E.endAngle,fullCircles:Math.floor(E.circumference/ko)};if(h.save(),h.fillStyle=E.backgroundColor,h.strokeStyle=E.borderColor,L.fullCircles){for(L.endAngle=L.startAngle+ko,h.beginPath(),h.arc(L.x,L.y,L.outerRadius,L.startAngle,L.endAngle),h.arc(L.x,L.y,L.innerRadius,L.endAngle,L.startAngle,!0),h.closePath(),X=0;X<L.fullCircles;++X)h.fill();L.endAngle=L.startAngle+E.circumference%ko}h.beginPath(),h.arc(L.x,L.y,L.outerRadius,L.startAngle,L.endAngle),h.arc(L.x,L.y,L.innerRadius,L.endAngle,L.startAngle,!0),h.closePath(),h.fill(),E.borderWidth&&si(h,E,L),h.restore()}}),nr=Fe.valueOrDefault,jr=vr.global.defaultColor;vr._set("global",{elements:{line:{tension:.4,backgroundColor:jr,borderWidth:3,borderColor:jr,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var ao=yt.extend({_type:"line",draw:function(){var nt,St,Mt,h=this,E=h._view,P=h._chart.ctx,L=E.spanGaps,X=h._children.slice(),de=vr.global,ve=de.elements.line,Ye=-1,xe=h._loop;if(X.length){if(h._loop){for(nt=0;nt<X.length;++nt)if(St=Fe.previousItem(X,nt),!X[nt]._view.skip&&St._view.skip){X=X.slice(nt).concat(X.slice(0,nt)),xe=L;break}xe&&X.push(X[0])}for(P.save(),P.lineCap=E.borderCapStyle||ve.borderCapStyle,P.setLineDash&&P.setLineDash(E.borderDash||ve.borderDash),P.lineDashOffset=nr(E.borderDashOffset,ve.borderDashOffset),P.lineJoin=E.borderJoinStyle||ve.borderJoinStyle,P.lineWidth=nr(E.borderWidth,ve.borderWidth),P.strokeStyle=E.borderColor||de.defaultColor,P.beginPath(),(Mt=X[0]._view).skip||(P.moveTo(Mt.x,Mt.y),Ye=0),nt=1;nt<X.length;++nt)Mt=X[nt]._view,St=-1===Ye?Fe.previousItem(X,nt):X[Ye],Mt.skip||(Ye!==nt-1&&!L||-1===Ye?P.moveTo(Mt.x,Mt.y):Fe.canvas.lineTo(P,St._view,Mt),Ye=nt);xe&&P.closePath(),P.stroke(),P.restore()}}}),$i=Fe.valueOrDefault,Eo=vr.global.defaultColor;function mo(h){var E=this._view;return!!E&&Math.abs(h-E.x)<E.radius+E.hitRadius}vr._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:Eo,borderColor:Eo,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var ua=yt.extend({_type:"point",inRange:function(h,E){var P=this._view;return!!P&&Math.pow(h-P.x,2)+Math.pow(E-P.y,2)<Math.pow(P.hitRadius+P.radius,2)},inLabelRange:mo,inXRange:mo,inYRange:function Go(h){var E=this._view;return!!E&&Math.abs(h-E.y)<E.radius+E.hitRadius},getCenterPoint:function(){var h=this._view;return{x:h.x,y:h.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var h=this._view;return{x:h.x,y:h.y,padding:h.radius+h.borderWidth}},draw:function(h){var E=this._view,P=this._chart.ctx,L=E.pointStyle,X=E.rotation,de=E.radius,ve=E.x,Ye=E.y,xe=vr.global,nt=xe.defaultColor;E.skip||(void 0===h||Fe.canvas._isPointInArea(E,h))&&(P.strokeStyle=E.borderColor||nt,P.lineWidth=$i(E.borderWidth,xe.elements.point.borderWidth),P.fillStyle=E.backgroundColor||nt,Fe.canvas.drawPoint(P,L,de,ve,Ye,X))}}),or=vr.global.defaultColor;function Mr(h){return h&&void 0!==h.width}function Ar(h){var E,P,L,X,de;return Mr(h)?(E=h.x-(de=h.width/2),P=h.x+de,L=Math.min(h.y,h.base),X=Math.max(h.y,h.base)):(de=h.height/2,E=Math.min(h.x,h.base),P=Math.max(h.x,h.base),L=h.y-de,X=h.y+de),{left:E,top:L,right:P,bottom:X}}function cr(h,E,P){return h===E?P:h===P?E:h}function Sn(h,E,P){var de,ve,Ye,xe,L=h.borderWidth,X=function pi(h){var E=h.borderSkipped,P={};return E&&(h.horizontal?h.base>h.x&&(E=cr(E,"left","right")):h.base<h.y&&(E=cr(E,"bottom","top")),P[E]=!0),P}(h);return Fe.isObject(L)?(de=+L.top||0,ve=+L.right||0,Ye=+L.bottom||0,xe=+L.left||0):de=ve=Ye=xe=+L||0,{t:X.top||de<0?0:de>P?P:de,r:X.right||ve<0?0:ve>E?E:ve,b:X.bottom||Ye<0?0:Ye>P?P:Ye,l:X.left||xe<0?0:xe>E?E:xe}}function Jr(h,E,P){var L=null===E,X=null===P,de=!(!h||L&&X)&&Ar(h);return de&&(L||E>=de.left&&E<=de.right)&&(X||P>=de.top&&P<=de.bottom)}vr._set("global",{elements:{rectangle:{backgroundColor:or,borderColor:or,borderSkipped:"bottom",borderWidth:0}}});var ro=yt.extend({_type:"rectangle",draw:function(){var h=this._chart.ctx,E=this._view,P=function $n(h){var E=Ar(h),P=E.right-E.left,L=E.bottom-E.top,X=Sn(h,P/2,L/2);return{outer:{x:E.left,y:E.top,w:P,h:L},inner:{x:E.left+X.l,y:E.top+X.t,w:P-X.l-X.r,h:L-X.t-X.b}}}(E),L=P.outer,X=P.inner;h.fillStyle=E.backgroundColor,h.fillRect(L.x,L.y,L.w,L.h),(L.w!==X.w||L.h!==X.h)&&(h.save(),h.beginPath(),h.rect(L.x,L.y,L.w,L.h),h.clip(),h.fillStyle=E.borderColor,h.rect(X.x,X.y,X.w,X.h),h.fill("evenodd"),h.restore())},height:function(){var h=this._view;return h.base-h.y},inRange:function(h,E){return Jr(this._view,h,E)},inLabelRange:function(h,E){var P=this._view;return Mr(P)?Jr(P,h,null):Jr(P,null,E)},inXRange:function(h){return Jr(this._view,h,null)},inYRange:function(h){return Jr(this._view,null,h)},getCenterPoint:function(){var E,P,h=this._view;return Mr(h)?(E=h.x,P=(h.y+h.base)/2):(E=(h.x+h.base)/2,P=h.y),{x:E,y:P}},getArea:function(){var h=this._view;return Mr(h)?h.width*Math.abs(h.y-h.base):h.height*Math.abs(h.x-h.base)},tooltipPosition:function(){var h=this._view;return{x:h.x,y:h.y}}}),go={},Ys=ao,ds=ua,es=ro;go.Arc=kn,go.Line=Ys,go.Point=ds,go.Rectangle=es;var ma=Fe._deprecated,Ea=Fe.valueOrDefault;function sa(h,E,P){var Ye,xe,L=P.barThickness,X=E.stackCount,de=E.pixels[h],ve=Fe.isNullOrUndef(L)?function fa(h,E){var L,X,de,ve,P=h._length;for(de=1,ve=E.length;de<ve;++de)P=Math.min(P,Math.abs(E[de]-E[de-1]));for(de=0,ve=h.getTicks().length;de<ve;++de)X=h.getPixelForTick(de),P=de>0?Math.min(P,Math.abs(X-L)):P,L=X;return P}(E.scale,E.pixels):-1;return Fe.isNullOrUndef(L)?(Ye=ve*P.categoryPercentage,xe=P.barPercentage):(Ye=L*X,xe=1),{chunk:Ye/X,ratio:xe,start:de-Ye/2}}vr._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),vr._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var pl=Ri.extend({dataElementType:go.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var E,P,h=this;Ri.prototype.initialize.apply(h,arguments),(E=h.getMeta()).stack=h.getDataset().stack,E.bar=!0,P=h._getIndexScale().options,ma("bar chart",P.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),ma("bar chart",P.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),ma("bar chart",P.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),ma("bar chart",h._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),ma("bar chart",P.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(h){var L,X,E=this,P=E.getMeta().data;for(E._ruler=E.getRuler(),L=0,X=P.length;L<X;++L)E.updateElement(P[L],L,h)},updateElement:function(h,E,P){var L=this,X=L.getMeta(),de=L.getDataset(),ve=L._resolveDataElementOptions(h,E);h._xScale=L.getScaleForId(X.xAxisID),h._yScale=L.getScaleForId(X.yAxisID),h._datasetIndex=L.index,h._index=E,h._model={backgroundColor:ve.backgroundColor,borderColor:ve.borderColor,borderSkipped:ve.borderSkipped,borderWidth:ve.borderWidth,datasetLabel:de.label,label:L.chart.data.labels[E]},Fe.isArray(de.data[E])&&(h._model.borderSkipped=null),L._updateElementGeometry(h,E,P,ve),h.pivot()},_updateElementGeometry:function(h,E,P,L){var X=this,de=h._model,ve=X._getValueScale(),Ye=ve.getBasePixel(),xe=ve.isHorizontal(),nt=X._ruler||X.getRuler(),St=X.calculateBarValuePixels(X.index,E,L),Mt=X.calculateBarIndexPixels(X.index,E,nt,L);de.horizontal=xe,de.base=P?Ye:St.base,de.x=xe?P?Ye:St.head:Mt.center,de.y=xe?Mt.center:P?Ye:St.head,de.height=xe?Mt.size:void 0,de.width=xe?void 0:Mt.size},_getStacks:function(h){var Ye,xe,P=this._getIndexScale(),L=P._getMatchingVisibleMetas(this._type),X=P.options.stacked,de=L.length,ve=[];for(Ye=0;Ye<de&&(xe=L[Ye],(!1===X||-1===ve.indexOf(xe.stack)||void 0===X&&void 0===xe.stack)&&ve.push(xe.stack),xe.index!==h);++Ye);return ve},getStackCount:function(){return this._getStacks().length},getStackIndex:function(h,E){var P=this._getStacks(h),L=void 0!==E?P.indexOf(E):-1;return-1===L?P.length-1:L},getRuler:function(){var L,X,h=this,E=h._getIndexScale(),P=[];for(L=0,X=h.getMeta().data.length;L<X;++L)P.push(E.getPixelForValue(null,L,h.index));return{pixels:P,start:E._startPixel,end:E._endPixel,stackCount:h.getStackCount(),scale:E}},calculateBarValuePixels:function(h,E,P){var $r,Ui,is,yo,Vs,qs,el,L=this,X=L.chart,de=L._getValueScale(),ve=de.isHorizontal(),Ye=X.data.datasets,xe=de._getMatchingVisibleMetas(L._type),nt=de._parseValue(Ye[h].data[E]),St=P.minBarLength,Mt=de.options.stacked,fn=L.getMeta().stack,jn=void 0===nt.start?0:nt.max>=0&&nt.min>=0?nt.min:nt.max,Vn=void 0===nt.start?nt.end:nt.max>=0&&nt.min>=0?nt.max-nt.min:nt.min-nt.max,fr=xe.length;if(Mt||void 0===Mt&&void 0!==fn)for($r=0;$r<fr&&(Ui=xe[$r]).index!==h;++$r)Ui.stack===fn&&(is=void 0===(el=de._parseValue(Ye[Ui.index].data[E])).start?el.end:el.min>=0&&el.max>=0?el.max:el.min,(nt.min<0&&is<0||nt.max>=0&&is>0)&&(jn+=is));return yo=de.getPixelForValue(jn),qs=(Vs=de.getPixelForValue(jn+Vn))-yo,void 0!==St&&Math.abs(qs)<St&&(qs=St,Vs=Vn>=0&&!ve||Vn<0&&ve?yo-St:yo+St),{size:qs,base:yo,head:Vs,center:Vs+qs/2}},calculateBarIndexPixels:function(h,E,P,L){var de="flex"===L.barThickness?function Ra(h,E,P){var xe,L=E.pixels,X=L[h],de=h>0?L[h-1]:null,ve=h<L.length-1?L[h+1]:null,Ye=P.categoryPercentage;return null===de&&(de=X-(null===ve?E.end-E.start:ve-X)),null===ve&&(ve=X+X-de),xe=X-(X-Math.min(de,ve))/2*Ye,{chunk:Math.abs(ve-de)/2*Ye/E.stackCount,ratio:P.barPercentage,start:xe}}(E,P,L):sa(E,P,L),ve=this.getStackIndex(h,this.getMeta().stack),Ye=de.start+de.chunk*ve+de.chunk/2,xe=Math.min(Ea(L.maxBarThickness,1/0),de.chunk*de.ratio);return{base:Ye-xe/2,head:Ye+xe/2,center:Ye,size:xe}},draw:function(){var h=this,E=h.chart,P=h._getValueScale(),L=h.getMeta().data,X=h.getDataset(),de=L.length,ve=0;for(Fe.canvas.clipArea(E.ctx,E.chartArea);ve<de;++ve){var Ye=P._parseValue(X.data[ve]);!isNaN(Ye.min)&&!isNaN(Ye.max)&&L[ve].draw()}Fe.canvas.unclipArea(E.ctx)},_resolveDataElementOptions:function(){var h=this,E=Fe.extend({},Ri.prototype._resolveDataElementOptions.apply(h,arguments)),P=h._getIndexScale().options,L=h._getValueScale().options;return E.barPercentage=Ea(P.barPercentage,E.barPercentage),E.barThickness=Ea(P.barThickness,E.barThickness),E.categoryPercentage=Ea(P.categoryPercentage,E.categoryPercentage),E.maxBarThickness=Ea(P.maxBarThickness,E.maxBarThickness),E.minBarLength=Ea(L.minBarLength,E.minBarLength),E}}),Co=Fe.valueOrDefault,yl=Fe.options.resolve;vr._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(h,E){return(E.datasets[h.datasetIndex].label||"")+": ("+h.xLabel+", "+h.yLabel+", "+E.datasets[h.datasetIndex].data[h.index].r+")"}}}});var Wo=Ri.extend({dataElementType:go.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(h){var E=this,P=E.getMeta();Fe.each(P.data,function(X,de){E.updateElement(X,de,h)})},updateElement:function(h,E,P){var L=this,X=L.getMeta(),de=h.custom||{},ve=L.getScaleForId(X.xAxisID),Ye=L.getScaleForId(X.yAxisID),xe=L._resolveDataElementOptions(h,E),nt=L.getDataset().data[E],St=L.index,Mt=P?ve.getPixelForDecimal(.5):ve.getPixelForValue("object"==typeof nt?nt:NaN,E,St),fn=P?Ye.getBasePixel():Ye.getPixelForValue(nt,E,St);h._xScale=ve,h._yScale=Ye,h._options=xe,h._datasetIndex=St,h._index=E,h._model={backgroundColor:xe.backgroundColor,borderColor:xe.borderColor,borderWidth:xe.borderWidth,hitRadius:xe.hitRadius,pointStyle:xe.pointStyle,rotation:xe.rotation,radius:P?0:xe.radius,skip:de.skip||isNaN(Mt)||isNaN(fn),x:Mt,y:fn},h.pivot()},setHoverStyle:function(h){var E=h._model,P=h._options,L=Fe.getHoverColor;h.$previousStyle={backgroundColor:E.backgroundColor,borderColor:E.borderColor,borderWidth:E.borderWidth,radius:E.radius},E.backgroundColor=Co(P.hoverBackgroundColor,L(P.backgroundColor)),E.borderColor=Co(P.hoverBorderColor,L(P.borderColor)),E.borderWidth=Co(P.hoverBorderWidth,P.borderWidth),E.radius=P.radius+P.hoverRadius},_resolveDataElementOptions:function(h,E){var P=this,L=P.chart,X=P.getDataset(),de=h.custom||{},ve=X.data[E]||{},Ye=Ri.prototype._resolveDataElementOptions.apply(P,arguments),xe={chart:L,dataIndex:E,dataset:X,datasetIndex:P.index};return P._cachedDataOpts===Ye&&(Ye=Fe.extend({},Ye)),Ye.radius=yl([de.radius,ve.r,P._config.radius,L.options.elements.point.radius],xe,E),Ye}}),ys=Fe.valueOrDefault,Wa=Math.PI,Is=2*Wa,nl=Wa/2;vr._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(h){var de,ve,Ye,E=document.createElement("ul"),P=h.data,L=P.datasets,X=P.labels;if(E.setAttribute("class",h.id+"-legend"),L.length)for(de=0,ve=L[0].data.length;de<ve;++de)(Ye=E.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=L[0].backgroundColor[de],X[de]&&Ye.appendChild(document.createTextNode(X[de]));return E.outerHTML},legend:{labels:{generateLabels:function(h){var E=h.data;return E.labels.length&&E.datasets.length?E.labels.map(function(P,L){var X=h.getDatasetMeta(0),de=X.controller.getStyle(L);return{text:P,fillStyle:de.backgroundColor,strokeStyle:de.borderColor,lineWidth:de.borderWidth,hidden:isNaN(E.datasets[0].data[L])||X.data[L].hidden,index:L}}):[]}},onClick:function(h,E){var X,de,ve,P=E.index,L=this.chart;for(X=0,de=(L.data.datasets||[]).length;X<de;++X)(ve=L.getDatasetMeta(X)).data[P]&&(ve.data[P].hidden=!ve.data[P].hidden);L.update()}},cutoutPercentage:50,rotation:-nl,circumference:Is,tooltips:{callbacks:{title:function(){return""},label:function(h,E){var P=E.labels[h.index],L=": "+E.datasets[h.datasetIndex].data[h.index];return Fe.isArray(P)?(P=P.slice())[0]+=L:P+=L,P}}}});var js=Ri.extend({dataElementType:go.Arc,linkScales:Fe.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(h){for(var E=0,P=0;P<h;++P)this.chart.isDatasetVisible(P)&&++E;return E},update:function(h){var $r,Ui,E=this,P=E.chart,L=P.chartArea,X=P.options,de=1,ve=1,Ye=0,xe=0,nt=E.getMeta(),St=nt.data,Mt=X.cutoutPercentage/100||0,fn=X.circumference,jn=E._getRingWeight(E.index);if(fn<Is){var is=X.rotation%Is,yo=(is+=is>=Wa?-Is:is<-Wa?Is:0)+fn,Vs=Math.cos(is),qs=Math.sin(is),el=Math.cos(yo),$a=Math.sin(yo),Ga=is<=0&&yo>=0||yo>=Is,wa=is<=nl&&yo>=nl||yo>=Is+nl,_u=is<=-nl&&yo>=-nl||yo>=Wa+nl,Va=is===-Wa||yo>=Wa?-1:Math.min(Vs,Vs*Mt,el,el*Mt),Mu=_u?-1:Math.min(qs,qs*Mt,$a,$a*Mt),ku=Ga?1:Math.max(Vs,Vs*Mt,el,el*Mt),xc=wa?1:Math.max(qs,qs*Mt,$a,$a*Mt);de=(ku-Va)/2,ve=(xc-Mu)/2,Ye=-(ku+Va)/2,xe=-(xc+Mu)/2}for($r=0,Ui=St.length;$r<Ui;++$r)St[$r]._options=E._resolveDataElementOptions(St[$r],$r);for(P.borderWidth=E.getMaxBorderWidth(),P.outerRadius=Math.max(Math.min((L.right-L.left-P.borderWidth)/de,(L.bottom-L.top-P.borderWidth)/ve)/2,0),P.innerRadius=Math.max(P.outerRadius*Mt,0),P.radiusLength=(P.outerRadius-P.innerRadius)/(E._getVisibleDatasetWeightTotal()||1),P.offsetX=Ye*P.outerRadius,P.offsetY=xe*P.outerRadius,nt.total=E.calculateTotal(),E.outerRadius=P.outerRadius-P.radiusLength*E._getRingWeightOffset(E.index),E.innerRadius=Math.max(E.outerRadius-P.radiusLength*jn,0),$r=0,Ui=St.length;$r<Ui;++$r)E.updateElement(St[$r],$r,h)},updateElement:function(h,E,P){var L=this,X=L.chart,de=X.chartArea,ve=X.options,Ye=ve.animation,xe=(de.left+de.right)/2,nt=(de.top+de.bottom)/2,St=ve.rotation,Mt=ve.rotation,fn=L.getDataset(),jn=P&&Ye.animateRotate||h.hidden?0:L.calculateCircumference(fn.data[E])*(ve.circumference/Is),$r=h._options||{};Fe.extend(h,{_datasetIndex:L.index,_index:E,_model:{backgroundColor:$r.backgroundColor,borderColor:$r.borderColor,borderWidth:$r.borderWidth,borderAlign:$r.borderAlign,x:xe+X.offsetX,y:nt+X.offsetY,startAngle:St,endAngle:Mt,circumference:jn,outerRadius:P&&Ye.animateScale?0:L.outerRadius,innerRadius:P&&Ye.animateScale?0:L.innerRadius,label:Fe.valueAtIndexOrDefault(fn.label,E,X.data.labels[E])}});var Ui=h._model;(!P||!Ye.animateRotate)&&(Ui.startAngle=0===E?ve.rotation:L.getMeta().data[E-1]._model.endAngle,Ui.endAngle=Ui.startAngle+Ui.circumference),h.pivot()},calculateTotal:function(){var L,h=this.getDataset(),E=this.getMeta(),P=0;return Fe.each(E.data,function(X,de){L=h.data[de],!isNaN(L)&&!X.hidden&&(P+=Math.abs(L))}),P},calculateCircumference:function(h){var E=this.getMeta().total;return E>0&&!isNaN(h)?Is*(Math.abs(h)/E):0},getMaxBorderWidth:function(h){var X,de,ve,Ye,xe,nt,St,Mt,P=0,L=this.chart;if(!h)for(X=0,de=L.data.datasets.length;X<de;++X)if(L.isDatasetVisible(X)){h=(ve=L.getDatasetMeta(X)).data,X!==this.index&&(xe=ve.controller);break}if(!h)return 0;for(X=0,de=h.length;X<de;++X)Ye=h[X],xe?(xe._configure(),nt=xe._resolveDataElementOptions(Ye,X)):nt=Ye._options,"inner"!==nt.borderAlign&&(P=(Mt=nt.hoverBorderWidth)>(P=(St=nt.borderWidth)>P?St:P)?Mt:P);return P},setHoverStyle:function(h){var E=h._model,P=h._options,L=Fe.getHoverColor;h.$previousStyle={backgroundColor:E.backgroundColor,borderColor:E.borderColor,borderWidth:E.borderWidth},E.backgroundColor=ys(P.hoverBackgroundColor,L(P.backgroundColor)),E.borderColor=ys(P.hoverBorderColor,L(P.borderColor)),E.borderWidth=ys(P.hoverBorderWidth,P.borderWidth)},_getRingWeightOffset:function(h){for(var E=0,P=0;P<h;++P)this.chart.isDatasetVisible(P)&&(E+=this._getRingWeight(P));return E},_getRingWeight:function(h){return Math.max(ys(this.chart.data.datasets[h].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});vr._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),vr._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var $o=pl.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),To=Fe.valueOrDefault,Ns=Fe.options.resolve,hs=Fe.canvas._isPointInArea;function Oo(h,E){var P=h&&h.options.ticks||{},L=P.reverse,X=void 0===P.min?E:0,de=void 0===P.max?E:0;return{start:L?de:X,end:L?X:de}}function kr(h,E,P){var L=P/2,X=Oo(h,L),de=Oo(E,L);return{top:de.end,right:X.end,bottom:de.start,left:X.start}}function Ki(h){var E,P,L,X;return Fe.isObject(h)?(E=h.top,P=h.right,L=h.bottom,X=h.left):E=P=L=X=h,{top:E,right:P,bottom:L,left:X}}vr._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var ut=Ri.extend({datasetElementType:go.Line,dataElementType:go.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(h){var xe,nt,E=this,P=E.getMeta(),L=P.dataset,X=P.data||[],ve=E._config,Ye=E._showLine=To(ve.showLine,E.chart.options.showLines);for(E._xScale=E.getScaleForId(P.xAxisID),E._yScale=E.getScaleForId(P.yAxisID),Ye&&(void 0!==ve.tension&&void 0===ve.lineTension&&(ve.lineTension=ve.tension),L._scale=E._yScale,L._datasetIndex=E.index,L._children=X,L._model=E._resolveDatasetElementOptions(L),L.pivot()),xe=0,nt=X.length;xe<nt;++xe)E.updateElement(X[xe],xe,h);for(Ye&&0!==L._model.tension&&E.updateBezierControlPoints(),xe=0,nt=X.length;xe<nt;++xe)X[xe].pivot()},updateElement:function(h,E,P){var fn,jn,L=this,X=L.getMeta(),de=h.custom||{},ve=L.getDataset(),Ye=L.index,xe=ve.data[E],nt=L._xScale,St=L._yScale,Mt=X.dataset._model,Vn=L._resolveDataElementOptions(h,E);fn=nt.getPixelForValue("object"==typeof xe?xe:NaN,E,Ye),jn=P?St.getBasePixel():L.calculatePointY(xe,E,Ye),h._xScale=nt,h._yScale=St,h._options=Vn,h._datasetIndex=Ye,h._index=E,h._model={x:fn,y:jn,skip:de.skip||isNaN(fn)||isNaN(jn),radius:Vn.radius,pointStyle:Vn.pointStyle,rotation:Vn.rotation,backgroundColor:Vn.backgroundColor,borderColor:Vn.borderColor,borderWidth:Vn.borderWidth,tension:To(de.tension,Mt?Mt.tension:0),steppedLine:!!Mt&&Mt.steppedLine,hitRadius:Vn.hitRadius}},_resolveDatasetElementOptions:function(h){var E=this,P=E._config,L=h.custom||{},X=E.chart.options,de=X.elements.line,ve=Ri.prototype._resolveDatasetElementOptions.apply(E,arguments);return ve.spanGaps=To(P.spanGaps,X.spanGaps),ve.tension=To(P.lineTension,de.tension),ve.steppedLine=Ns([L.steppedLine,P.steppedLine,de.stepped]),ve.clip=Ki(To(P.clip,kr(E._xScale,E._yScale,ve.borderWidth))),ve},calculatePointY:function(h,E,P){var xe,St,Mt,fn,jn,Vn,X=this.chart,de=this._yScale,ve=0,Ye=0;if(de.options.stacked){for(fn=+de.getRightValue(h),Vn=(jn=X._getSortedVisibleDatasetMetas()).length,xe=0;xe<Vn&&(St=jn[xe]).index!==P;++xe)"line"===St.type&&St.yAxisID===de.id&&((Mt=+de.getRightValue(X.data.datasets[St.index].data[E]))<0?Ye+=Mt||0:ve+=Mt||0);return de.getPixelForValue(fn<0?Ye+fn:ve+fn)}return de.getPixelForValue(h)},updateBezierControlPoints:function(){var ve,Ye,xe,nt,E=this.chart,P=this.getMeta(),L=P.dataset._model,X=E.chartArea,de=P.data||[];function St(Mt,fn,jn){return Math.max(Math.min(Mt,jn),fn)}if(L.spanGaps&&(de=de.filter(function(Mt){return!Mt._model.skip})),"monotone"===L.cubicInterpolationMode)Fe.splineCurveMonotone(de);else for(ve=0,Ye=de.length;ve<Ye;++ve)xe=de[ve]._model,nt=Fe.splineCurve(Fe.previousItem(de,ve)._model,xe,Fe.nextItem(de,ve)._model,L.tension),xe.controlPointPreviousX=nt.previous.x,xe.controlPointPreviousY=nt.previous.y,xe.controlPointNextX=nt.next.x,xe.controlPointNextY=nt.next.y;if(E.options.elements.line.capBezierPoints)for(ve=0,Ye=de.length;ve<Ye;++ve)hs(xe=de[ve]._model,X)&&(ve>0&&hs(de[ve-1]._model,X)&&(xe.controlPointPreviousX=St(xe.controlPointPreviousX,X.left,X.right),xe.controlPointPreviousY=St(xe.controlPointPreviousY,X.top,X.bottom)),ve<de.length-1&&hs(de[ve+1]._model,X)&&(xe.controlPointNextX=St(xe.controlPointNextX,X.left,X.right),xe.controlPointNextY=St(xe.controlPointNextY,X.top,X.bottom)))},draw:function(){var xe,h=this,E=h.chart,P=h.getMeta(),L=P.data||[],X=E.chartArea,de=E.canvas,ve=0,Ye=L.length;for(h._showLine&&(Fe.canvas.clipArea(E.ctx,{left:!1===(xe=P.dataset._model.clip).left?0:X.left-xe.left,right:!1===xe.right?de.width:X.right+xe.right,top:!1===xe.top?0:X.top-xe.top,bottom:!1===xe.bottom?de.height:X.bottom+xe.bottom}),P.dataset.draw(),Fe.canvas.unclipArea(E.ctx));ve<Ye;++ve)L[ve].draw(X)},setHoverStyle:function(h){var E=h._model,P=h._options,L=Fe.getHoverColor;h.$previousStyle={backgroundColor:E.backgroundColor,borderColor:E.borderColor,borderWidth:E.borderWidth,radius:E.radius},E.backgroundColor=To(P.hoverBackgroundColor,L(P.backgroundColor)),E.borderColor=To(P.hoverBorderColor,L(P.borderColor)),E.borderWidth=To(P.hoverBorderWidth,P.borderWidth),E.radius=To(P.hoverRadius,P.radius)}}),pn=Fe.options.resolve;vr._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(h){var de,ve,Ye,E=document.createElement("ul"),P=h.data,L=P.datasets,X=P.labels;if(E.setAttribute("class",h.id+"-legend"),L.length)for(de=0,ve=L[0].data.length;de<ve;++de)(Ye=E.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=L[0].backgroundColor[de],X[de]&&Ye.appendChild(document.createTextNode(X[de]));return E.outerHTML},legend:{labels:{generateLabels:function(h){var E=h.data;return E.labels.length&&E.datasets.length?E.labels.map(function(P,L){var X=h.getDatasetMeta(0),de=X.controller.getStyle(L);return{text:P,fillStyle:de.backgroundColor,strokeStyle:de.borderColor,lineWidth:de.borderWidth,hidden:isNaN(E.datasets[0].data[L])||X.data[L].hidden,index:L}}):[]}},onClick:function(h,E){var X,de,ve,P=E.index,L=this.chart;for(X=0,de=(L.data.datasets||[]).length;X<de;++X)(ve=L.getDatasetMeta(X)).data[P].hidden=!ve.data[P].hidden;L.update()}},tooltips:{callbacks:{title:function(){return""},label:function(h,E){return E.labels[h.index]+": "+h.yLabel}}}});var te=Ri.extend({dataElementType:go.Arc,linkScales:Fe.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(h){var xe,nt,St,E=this,P=E.getDataset(),L=E.getMeta(),X=E.chart.options.startAngle||0,de=E._starts=[],ve=E._angles=[],Ye=L.data;for(E._updateRadius(),L.count=E.countVisibleElements(),xe=0,nt=P.data.length;xe<nt;xe++)de[xe]=X,St=E._computeAngle(xe),ve[xe]=St,X+=St;for(xe=0,nt=Ye.length;xe<nt;++xe)Ye[xe]._options=E._resolveDataElementOptions(Ye[xe],xe),E.updateElement(Ye[xe],xe,h)},_updateRadius:function(){var h=this,E=h.chart,P=E.chartArea,L=E.options,X=Math.min(P.right-P.left,P.bottom-P.top);E.outerRadius=Math.max(X/2,0),E.innerRadius=Math.max(L.cutoutPercentage?E.outerRadius/100*L.cutoutPercentage:1,0),E.radiusLength=(E.outerRadius-E.innerRadius)/E.getVisibleDatasetCount(),h.outerRadius=E.outerRadius-E.radiusLength*h.index,h.innerRadius=h.outerRadius-E.radiusLength},updateElement:function(h,E,P){var L=this,X=L.chart,de=L.getDataset(),ve=X.options,Ye=ve.animation,xe=X.scale,nt=X.data.labels,St=xe.xCenter,Mt=xe.yCenter,fn=ve.startAngle,jn=h.hidden?0:xe.getDistanceFromCenterForValue(de.data[E]),Vn=L._starts[E],fr=Vn+(h.hidden?0:L._angles[E]),$r=Ye.animateScale?0:xe.getDistanceFromCenterForValue(de.data[E]),Ui=h._options||{};Fe.extend(h,{_datasetIndex:L.index,_index:E,_scale:xe,_model:{backgroundColor:Ui.backgroundColor,borderColor:Ui.borderColor,borderWidth:Ui.borderWidth,borderAlign:Ui.borderAlign,x:St,y:Mt,innerRadius:0,outerRadius:P?$r:jn,startAngle:P&&Ye.animateRotate?fn:Vn,endAngle:P&&Ye.animateRotate?fn:fr,label:Fe.valueAtIndexOrDefault(nt,E,nt[E])}}),h.pivot()},countVisibleElements:function(){var h=this.getDataset(),E=this.getMeta(),P=0;return Fe.each(E.data,function(L,X){!isNaN(h.data[X])&&!L.hidden&&P++}),P},setHoverStyle:function(h){var E=h._model,P=h._options,L=Fe.getHoverColor,X=Fe.valueOrDefault;h.$previousStyle={backgroundColor:E.backgroundColor,borderColor:E.borderColor,borderWidth:E.borderWidth},E.backgroundColor=X(P.hoverBackgroundColor,L(P.backgroundColor)),E.borderColor=X(P.hoverBorderColor,L(P.borderColor)),E.borderWidth=X(P.hoverBorderWidth,P.borderWidth)},_computeAngle:function(h){var E=this,P=this.getMeta().count,L=E.getDataset(),X=E.getMeta();return isNaN(L.data[h])||X.data[h].hidden?0:pn([E.chart.options.elements.arc.angle,2*Math.PI/P],{chart:E.chart,dataIndex:h,dataset:L,datasetIndex:E.index},h)}});vr._set("pie",Fe.clone(vr.doughnut)),vr._set("pie",{cutoutPercentage:0});var Ue=js,jt=Fe.valueOrDefault;vr._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var hn=Ri.extend({datasetElementType:go.Line,dataElementType:go.Point,linkScales:Fe.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(h){var Ye,xe,E=this,P=E.getMeta(),L=P.dataset,X=P.data||[],de=E.chart.scale,ve=E._config;for(void 0!==ve.tension&&void 0===ve.lineTension&&(ve.lineTension=ve.tension),L._scale=de,L._datasetIndex=E.index,L._children=X,L._loop=!0,L._model=E._resolveDatasetElementOptions(L),L.pivot(),Ye=0,xe=X.length;Ye<xe;++Ye)E.updateElement(X[Ye],Ye,h);for(E.updateBezierControlPoints(),Ye=0,xe=X.length;Ye<xe;++Ye)X[Ye].pivot()},updateElement:function(h,E,P){var L=this,X=h.custom||{},de=L.getDataset(),ve=L.chart.scale,Ye=ve.getPointPositionForValue(E,de.data[E]),xe=L._resolveDataElementOptions(h,E),nt=L.getMeta().dataset._model,St=P?ve.xCenter:Ye.x,Mt=P?ve.yCenter:Ye.y;h._scale=ve,h._options=xe,h._datasetIndex=L.index,h._index=E,h._model={x:St,y:Mt,skip:X.skip||isNaN(St)||isNaN(Mt),radius:xe.radius,pointStyle:xe.pointStyle,rotation:xe.rotation,backgroundColor:xe.backgroundColor,borderColor:xe.borderColor,borderWidth:xe.borderWidth,tension:jt(X.tension,nt?nt.tension:0),hitRadius:xe.hitRadius}},_resolveDatasetElementOptions:function(){var h=this,E=h._config,P=h.chart.options,L=Ri.prototype._resolveDatasetElementOptions.apply(h,arguments);return L.spanGaps=jt(E.spanGaps,P.spanGaps),L.tension=jt(E.lineTension,P.elements.line.tension),L},updateBezierControlPoints:function(){var X,de,ve,Ye,E=this.getMeta(),P=this.chart.chartArea,L=E.data||[];function xe(nt,St,Mt){return Math.max(Math.min(nt,Mt),St)}for(E.dataset._model.spanGaps&&(L=L.filter(function(nt){return!nt._model.skip})),X=0,de=L.length;X<de;++X)ve=L[X]._model,Ye=Fe.splineCurve(Fe.previousItem(L,X,!0)._model,ve,Fe.nextItem(L,X,!0)._model,ve.tension),ve.controlPointPreviousX=xe(Ye.previous.x,P.left,P.right),ve.controlPointPreviousY=xe(Ye.previous.y,P.top,P.bottom),ve.controlPointNextX=xe(Ye.next.x,P.left,P.right),ve.controlPointNextY=xe(Ye.next.y,P.top,P.bottom)},setHoverStyle:function(h){var E=h._model,P=h._options,L=Fe.getHoverColor;h.$previousStyle={backgroundColor:E.backgroundColor,borderColor:E.borderColor,borderWidth:E.borderWidth,radius:E.radius},E.backgroundColor=jt(P.hoverBackgroundColor,L(P.backgroundColor)),E.borderColor=jt(P.hoverBorderColor,L(P.borderColor)),E.borderWidth=jt(P.hoverBorderWidth,P.borderWidth),E.radius=jt(P.hoverRadius,P.radius)}});vr._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(h){return"("+h.xLabel+", "+h.yLabel+")"}}}}),vr._set("global",{datasets:{scatter:{showLine:!1}}});var Oi={bar:pl,bubble:Wo,doughnut:js,horizontalBar:$o,line:ut,polarArea:te,pie:Ue,radar:hn,scatter:ut};function ki(h,E){return h.native?{x:h.x,y:h.y}:Fe.getRelativePosition(h,E)}function _s(h,E){var L,X,de,ve,Ye,xe,P=h._getSortedVisibleDatasetMetas();for(X=0,ve=P.length;X<ve;++X)for(de=0,Ye=(L=P[X].data).length;de<Ye;++de)(xe=L[de])._view.skip||E(xe)}function Vo(h,E){var P=[];return _s(h,function(L){L.inRange(E.x,E.y)&&P.push(L)}),P}function Fs(h,E,P,L){var X=Number.POSITIVE_INFINITY,de=[];return _s(h,function(ve){if(!P||ve.inRange(E.x,E.y)){var Ye=ve.getCenterPoint(),xe=L(E,Ye);xe<X?(de=[ve],X=xe):xe===X&&de.push(ve)}}),de}function Ks(h){var E=-1!==h.indexOf("x"),P=-1!==h.indexOf("y");return function(L,X){var de=E?Math.abs(L.x-X.x):0,ve=P?Math.abs(L.y-X.y):0;return Math.sqrt(Math.pow(de,2)+Math.pow(ve,2))}}function hl(h,E,P){var L=ki(E,h);P.axis=P.axis||"x";var X=Ks(P.axis),de=P.intersect?Vo(h,L):Fs(h,L,!1,X),ve=[];return de.length?(h._getSortedVisibleDatasetMetas().forEach(function(Ye){var xe=Ye.data[de[0]._index];xe&&!xe._view.skip&&ve.push(xe)}),ve):[]}var sl={modes:{single:function(h,E){var P=ki(E,h),L=[];return _s(h,function(X){if(X.inRange(P.x,P.y))return L.push(X),L}),L.slice(0,1)},label:hl,index:hl,dataset:function(h,E,P){var L=ki(E,h);P.axis=P.axis||"xy";var X=Ks(P.axis),de=P.intersect?Vo(h,L):Fs(h,L,!1,X);return de.length>0&&(de=h.getDatasetMeta(de[0]._datasetIndex).data),de},"x-axis":function(h,E){return hl(h,E,{intersect:!1})},point:function(h,E){return Vo(h,ki(E,h))},nearest:function(h,E,P){var L=ki(E,h);P.axis=P.axis||"xy";var X=Ks(P.axis);return Fs(h,L,P.intersect,X)},x:function(h,E,P){var L=ki(E,h),X=[],de=!1;return _s(h,function(ve){ve.inXRange(L.x)&&X.push(ve),ve.inRange(L.x,L.y)&&(de=!0)}),P.intersect&&!de&&(X=[]),X},y:function(h,E,P){var L=ki(E,h),X=[],de=!1;return _s(h,function(ve){ve.inYRange(L.y)&&X.push(ve),ve.inRange(L.x,L.y)&&(de=!0)}),P.intersect&&!de&&(X=[]),X}}},Jl=Fe.extend;function Qu(h,E){return Fe.where(h,function(P){return P.pos===E})}function _c(h,E){return h.sort(function(P,L){var X=E?L:P,de=E?P:L;return X.weight===de.weight?X.index-de.index:X.weight-de.weight})}function Xu(h,E,P,L){return Math.max(h[P],E[P])+Math.max(h[L],E[L])}function Xa(h,E,P){var de,ve,L=P.box,X=h.maxPadding;if(P.size&&(h[P.pos]-=P.size),P.size=P.horizontal?L.height:L.width,h[P.pos]+=P.size,L.getPadding){var Ye=L.getPadding();X.top=Math.max(X.top,Ye.top),X.left=Math.max(X.left,Ye.left),X.bottom=Math.max(X.bottom,Ye.bottom),X.right=Math.max(X.right,Ye.right)}if(de=E.outerWidth-Xu(X,h,"left","right"),ve=E.outerHeight-Xu(X,h,"top","bottom"),de!==h.w||ve!==h.h){h.w=de,h.h=ve;var xe=P.horizontal?[de,h.w]:[ve,h.h];return!(xe[0]===xe[1]||isNaN(xe[0])&&isNaN(xe[1]))}}function ru(h,E){var P=E.maxPadding;return function L(X){var de={left:0,top:0,right:0,bottom:0};return X.forEach(function(ve){de[ve]=Math.max(E[ve],P[ve])}),de}(h?["left","right"]:["top","bottom"])}function Ja(h,E,P){var X,de,ve,Ye,xe,nt,L=[];for(X=0,de=h.length;X<de;++X)(Ye=(ve=h[X]).box).update(ve.width||E.w,ve.height||E.h,ru(ve.horizontal,E)),Xa(E,P,ve)&&(nt=!0,L.length&&(xe=!0)),Ye.fullWidth||L.push(ve);return xe&&Ja(L,E,P)||nt}function Ol(h,E,P){var ve,Ye,xe,nt,L=P.padding,X=E.x,de=E.y;for(ve=0,Ye=h.length;ve<Ye;++ve)nt=(xe=h[ve]).box,xe.horizontal?(nt.left=nt.fullWidth?L.left:E.left,nt.right=nt.fullWidth?P.outerWidth-L.right:E.left+E.w,nt.top=de,nt.bottom=de+nt.height,nt.width=nt.right-nt.left,de=nt.bottom):(nt.left=X,nt.right=X+nt.width,nt.top=E.top,nt.bottom=E.top+E.h,nt.height=nt.bottom-nt.top,X=nt.right);E.x=X,E.y=de}vr._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var Bl={defaults:{},addBox:function(h,E){h.boxes||(h.boxes=[]),E.fullWidth=E.fullWidth||!1,E.position=E.position||"top",E.weight=E.weight||0,E._layers=E._layers||function(){return[{z:0,draw:function(){E.draw.apply(E,arguments)}}]},h.boxes.push(E)},removeBox:function(h,E){var P=h.boxes?h.boxes.indexOf(E):-1;-1!==P&&h.boxes.splice(P,1)},configure:function(h,E,P){for(var ve,L=["fullWidth","position","weight"],X=L.length,de=0;de<X;++de)P.hasOwnProperty(ve=L[de])&&(E[ve]=P[ve])},update:function(h,E,P){if(h){var X=Fe.options.toPadding((h.options.layout||{}).padding),de=E-X.width,ve=P-X.height,Ye=function Fl(h){var E=function Cl(h){var P,L,X,E=[];for(P=0,L=(h||[]).length;P<L;++P)E.push({index:P,box:X=h[P],pos:X.position,horizontal:X.isHorizontal(),weight:X.weight});return E}(h),P=_c(Qu(E,"left"),!0),L=_c(Qu(E,"right")),X=_c(Qu(E,"top"),!0),de=_c(Qu(E,"bottom"));return{leftAndTop:P.concat(X),rightAndBottom:L.concat(de),chartArea:Qu(E,"chartArea"),vertical:P.concat(L),horizontal:X.concat(de)}}(h.boxes),xe=Ye.vertical,nt=Ye.horizontal,St=Object.freeze({outerWidth:E,outerHeight:P,padding:X,availableWidth:de,vBoxMaxWidth:de/2/xe.length,hBoxMaxHeight:ve/2}),Mt=Jl({maxPadding:Jl({},X),w:de,h:ve,x:X.left,y:X.top},X);(function mc(h,E){var P,L,X;for(P=0,L=h.length;P<L;++P)(X=h[P]).width=X.horizontal?X.box.fullWidth&&E.availableWidth:E.vBoxMaxWidth,X.height=X.horizontal&&E.hBoxMaxHeight})(xe.concat(nt),St),Ja(xe,Mt,St),Ja(nt,Mt,St)&&Ja(xe,Mt,St),function Mc(h){var E=h.maxPadding;function P(L){var X=Math.max(E[L]-h[L],0);return h[L]+=X,X}h.y+=P("top"),h.x+=P("left"),P("right"),P("bottom")}(Mt),Ol(Ye.leftAndTop,Mt,St),Mt.x+=Mt.w,Mt.y+=Mt.h,Ol(Ye.rightAndBottom,Mt,St),h.chartArea={left:Mt.left,top:Mt.top,right:Mt.left+Mt.w,bottom:Mt.top+Mt.h},Fe.each(Ye.chartArea,function(fn){var jn=fn.box;Jl(jn,h.chartArea),jn.update(Mt.w,Mt.h)})}}},pt=function f(h){return h&&h.default||h}(Object.freeze({__proto__:null,default:"/*\r\n * DOM element rendering detection\r\n * https://davidwalsh.name/detect-node-insertion\r\n */\r\n@keyframes chartjs-render-animation {\r\n\tfrom { opacity: 0.99; }\r\n\tto { opacity: 1; }\r\n}\r\n\r\n.chartjs-render-monitor {\r\n\tanimation: chartjs-render-animation 0.001s;\r\n}\r\n\r\n/*\r\n * DOM element resizing detection\r\n * https://github.com/marcj/css-element-queries\r\n */\r\n.chartjs-size-monitor,\r\n.chartjs-size-monitor-expand,\r\n.chartjs-size-monitor-shrink {\r\n\tposition: absolute;\r\n\tdirection: ltr;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\tvisibility: hidden;\r\n\tz-index: -1;\r\n}\r\n\r\n.chartjs-size-monitor-expand > div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n"})),Kt="$chartjs",Kn="chartjs-",oi=Kn+"size-monitor",wi=Kn+"render-monitor",Gs=["animationstart","webkitAnimationStart"],Os={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function ws(h,E){var P=Fe.getStyle(h,E),L=P&&P.match(/^(\d+)(\.\d+)?px$/);return L?Number(L[1]):void 0}var al=!!function(){var h=!1;try{var E=Object.defineProperty({},"passive",{get:function(){h=!0}});window.addEventListener("e",null,E)}catch(P){}return h}()&&{passive:!0};function Bs(h,E,P){h.addEventListener(E,P,al)}function mt(h,E,P){h.removeEventListener(E,P,al)}function ot(h,E,P,L,X){return{type:h,chart:E,native:X||null,x:void 0!==P?P:null,y:void 0!==L?L:null}}function Si(h){var E=document.createElement("div");return E.className=h||"",E}function Ku(h,E,P){var L=h[Kt]||(h[Kt]={}),X=L.resizer=function Jo(h){var E=1e6,P=Si(oi),L=Si(oi+"-expand"),X=Si(oi+"-shrink");L.appendChild(Si()),X.appendChild(Si()),P.appendChild(L),P.appendChild(X),P._reset=function(){L.scrollLeft=E,L.scrollTop=E,X.scrollLeft=E,X.scrollTop=E};var de=function(){P._reset(),h()};return Bs(L,"scroll",de.bind(L,"expand")),Bs(X,"scroll",de.bind(X,"shrink")),P}(function Xt(h,E){var P=!1,L=[];return function(){L=Array.prototype.slice.call(arguments),E=E||this,P||(P=!0,Fe.requestAnimFrame.call(window,function(){P=!1,h.apply(E,L)}))}}(function(){if(L.resizer){var de=P.options.maintainAspectRatio&&h.parentNode,ve=de?de.clientWidth:0;E(ot("resize",P)),de&&de.clientWidth<ve&&P.canvas&&E(ot("resize",P))}}));!function ja(h,E){var P=h[Kt]||(h[Kt]={}),L=P.renderProxy=function(X){"chartjs-render-animation"===X.animationName&&E()};Fe.each(Gs,function(X){Bs(h,X,L)}),P.reflow=!!h.offsetParent,h.classList.add(wi)}(h,function(){if(L.resizer){var de=h.parentNode;de&&de!==X.parentNode&&de.insertBefore(X,de.firstChild),X._reset()}})}function Nc(h){var E=h[Kt]||{},P=E.resizer;delete E.resizer,function El(h){var E=h[Kt]||{},P=E.renderProxy;P&&(Fe.each(Gs,function(L){mt(h,L,P)}),delete E.renderProxy),h.classList.remove(wi)}(h),P&&P.parentNode&&P.parentNode.removeChild(P)}var Yi={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(h){if(!this.disableCSSInjection){var E=h.getRootNode?h.getRootNode():document;!function hd(h,E){var P=h[Kt]||(h[Kt]={});if(!P.containsStyles){P.containsStyles=!0,E="/* Chart.js */\n"+E;var L=document.createElement("style");L.setAttribute("type","text/css"),L.appendChild(document.createTextNode(E)),h.appendChild(L)}}(E.host?E:document.head,pt)}},acquireContext:function(h,E){"string"==typeof h?h=document.getElementById(h):h.length&&(h=h[0]),h&&h.canvas&&(h=h.canvas);var P=h&&h.getContext&&h.getContext("2d");return P&&P.canvas===h?(this._ensureLoaded(h),function Fo(h,E){var P=h.style,L=h.getAttribute("height"),X=h.getAttribute("width");if(h[Kt]={initial:{height:L,width:X,style:{display:P.display,height:P.height,width:P.width}}},P.display=P.display||"block",null===X||""===X){var de=ws(h,"width");void 0!==de&&(h.width=de)}if(null===L||""===L)if(""===h.style.height)h.height=h.width/(E.options.aspectRatio||2);else{var ve=ws(h,"height");void 0!==de&&(h.height=ve)}return h}(h,E),P):null},releaseContext:function(h){var E=h.canvas;if(E[Kt]){var P=E[Kt].initial;["height","width"].forEach(function(L){var X=P[L];Fe.isNullOrUndef(X)?E.removeAttribute(L):E.setAttribute(L,X)}),Fe.each(P.style||{},function(L,X){E.style[X]=L}),E.width=E.width,delete E[Kt]}},addEventListener:function(h,E,P){var L=h.canvas;if("resize"!==E){var X=P[Kt]||(P[Kt]={});Bs(L,E,(X.proxies||(X.proxies={}))[h.id+"_"+E]=function(Ye){P(function je(h,E){var P=Os[h.type]||h.type,L=Fe.getRelativePosition(h,E);return ot(P,E,L.x,L.y,h)}(Ye,h))})}else Ku(L,P,h)},removeEventListener:function(h,E,P){var L=h.canvas;if("resize"!==E){var ve=((P[Kt]||{}).proxies||{})[h.id+"_"+E];!ve||mt(L,E,ve)}else Nc(L)}};Fe.addEvent=Bs,Fe.removeEvent=mt;var Fa=Fe.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},Yi._enabled?Yi:{acquireContext:function(h){return h&&h.canvas&&(h=h.canvas),h&&h.getContext("2d")||null}});vr._set("global",{plugins:{}});var Es={_plugins:[],_cacheId:0,register:function(h){var E=this._plugins;[].concat(h).forEach(function(P){-1===E.indexOf(P)&&E.push(P)}),this._cacheId++},unregister:function(h){var E=this._plugins;[].concat(h).forEach(function(P){var L=E.indexOf(P);-1!==L&&E.splice(L,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(h,E,P){var de,ve,Ye,xe,nt,L=this.descriptors(h),X=L.length;for(de=0;de<X;++de)if("function"==typeof(nt=(Ye=(ve=L[de]).plugin)[E])&&((xe=[h].concat(P||[])).push(ve.options),!1===nt.apply(Ye,xe)))return!1;return!0},descriptors:function(h){var E=h.$plugins||(h.$plugins={});if(E.id===this._cacheId)return E.descriptors;var P=[],L=[],X=h&&h.config||{},de=X.options&&X.options.plugins||{};return this._plugins.concat(X.plugins||[]).forEach(function(ve){if(-1===P.indexOf(ve)){var xe=ve.id,nt=de[xe];!1!==nt&&(!0===nt&&(nt=Fe.clone(vr.global.plugins[xe])),P.push(ve),L.push({plugin:ve,options:nt||{}}))}}),E.descriptors=L,E.id=this._cacheId,L},_invalidate:function(h){delete h.$plugins}},qu={constructors:{},defaults:{},registerScaleType:function(h,E,P){this.constructors[h]=E,this.defaults[h]=Fe.clone(P)},getScaleConstructor:function(h){return this.constructors.hasOwnProperty(h)?this.constructors[h]:void 0},getScaleDefaults:function(h){return this.defaults.hasOwnProperty(h)?Fe.merge(Object.create(null),[vr.scale,this.defaults[h]]):{}},updateScaleDefaults:function(h,E){var P=this;P.defaults.hasOwnProperty(h)&&(P.defaults[h]=Fe.extend(P.defaults[h],E))},addScalesToLayout:function(h){Fe.each(h.scales,function(E){E.fullWidth=E.options.fullWidth,E.position=E.options.position,E.weight=E.options.weight,Bl.addBox(h,E)})}},Sl=Fe.valueOrDefault,lu=Fe.rtl.getRtlAdapter;vr._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:Fe.noop,title:function(h,E){var P="",L=E.labels,X=L?L.length:0;if(h.length>0){var de=h[0];de.label?P=de.label:de.xLabel?P=de.xLabel:X>0&&de.index<X&&(P=L[de.index])}return P},afterTitle:Fe.noop,beforeBody:Fe.noop,beforeLabel:Fe.noop,label:function(h,E){var P=E.datasets[h.datasetIndex].label||"";return P&&(P+=": "),Fe.isNullOrUndef(h.value)?P+=h.yLabel:P+=h.value,P},labelColor:function(h,E){var X=E.getDatasetMeta(h.datasetIndex).data[h.index]._view;return{borderColor:X.borderColor,backgroundColor:X.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:Fe.noop,afterBody:Fe.noop,beforeFooter:Fe.noop,footer:Fe.noop,afterFooter:Fe.noop}}});var Eu={average:function(h){if(!h.length)return!1;var E,P,L=0,X=0,de=0;for(E=0,P=h.length;E<P;++E){var ve=h[E];if(ve&&ve.hasValue()){var Ye=ve.tooltipPosition();L+=Ye.x,X+=Ye.y,++de}}return{x:L/de,y:X/de}},nearest:function(h,E){var de,ve,Ye,P=E.x,L=E.y,X=Number.POSITIVE_INFINITY;for(de=0,ve=h.length;de<ve;++de){var xe=h[de];if(xe&&xe.hasValue()){var nt=xe.getCenterPoint(),St=Fe.distanceBetweenPoints(E,nt);St<X&&(X=St,Ye=xe)}}if(Ye){var Mt=Ye.tooltipPosition();P=Mt.x,L=Mt.y}return{x:P,y:L}}};function iu(h,E){return E&&(Fe.isArray(E)?Array.prototype.push.apply(h,E):h.push(E)),h}function ra(h){return("string"==typeof h||h instanceof String)&&h.indexOf("\n")>-1?h.split("\n"):h}function bu(h){var E=h._xScale,P=h._yScale||h._scale,L=h._index,X=h._datasetIndex,de=h._chart.getDatasetMeta(X).controller,ve=de._getIndexScale(),Ye=de._getValueScale();return{xLabel:E?E.getLabelForIndex(L,X):"",yLabel:P?P.getLabelForIndex(L,X):"",label:ve?""+ve.getLabelForIndex(L,X):"",value:Ye?""+Ye.getLabelForIndex(L,X):"",index:L,datasetIndex:X,x:h._model.x,y:h._model.y}}function td(h){var E=vr.global;return{xPadding:h.xPadding,yPadding:h.yPadding,xAlign:h.xAlign,yAlign:h.yAlign,rtl:h.rtl,textDirection:h.textDirection,bodyFontColor:h.bodyFontColor,_bodyFontFamily:Sl(h.bodyFontFamily,E.defaultFontFamily),_bodyFontStyle:Sl(h.bodyFontStyle,E.defaultFontStyle),_bodyAlign:h.bodyAlign,bodyFontSize:Sl(h.bodyFontSize,E.defaultFontSize),bodySpacing:h.bodySpacing,titleFontColor:h.titleFontColor,_titleFontFamily:Sl(h.titleFontFamily,E.defaultFontFamily),_titleFontStyle:Sl(h.titleFontStyle,E.defaultFontStyle),titleFontSize:Sl(h.titleFontSize,E.defaultFontSize),_titleAlign:h.titleAlign,titleSpacing:h.titleSpacing,titleMarginBottom:h.titleMarginBottom,footerFontColor:h.footerFontColor,_footerFontFamily:Sl(h.footerFontFamily,E.defaultFontFamily),_footerFontStyle:Sl(h.footerFontStyle,E.defaultFontStyle),footerFontSize:Sl(h.footerFontSize,E.defaultFontSize),_footerAlign:h.footerAlign,footerSpacing:h.footerSpacing,footerMarginTop:h.footerMarginTop,caretSize:h.caretSize,cornerRadius:h.cornerRadius,backgroundColor:h.backgroundColor,opacity:0,legendColorBackground:h.multiKeyBackground,displayColors:h.displayColors,borderColor:h.borderColor,borderWidth:h.borderWidth}}function nd(h,E){return"center"===E?h.x+h.width/2:"right"===E?h.x+h.width-h.xPadding:h.x+h.xPadding}function Uu(h){return iu([],ra(h))}var Yu=yt.extend({initialize:function(){this._model=td(this._options),this._lastActive=[]},getTitle:function(){var h=this,P=h._options.callbacks,L=P.beforeTitle.apply(h,arguments),X=P.title.apply(h,arguments),de=P.afterTitle.apply(h,arguments),ve=[];return ve=iu(ve,ra(L)),ve=iu(ve,ra(X)),iu(ve,ra(de))},getBeforeBody:function(){return Uu(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(h,E){var P=this,L=P._options.callbacks,X=[];return Fe.each(h,function(de){var ve={before:[],lines:[],after:[]};iu(ve.before,ra(L.beforeLabel.call(P,de,E))),iu(ve.lines,L.label.call(P,de,E)),iu(ve.after,ra(L.afterLabel.call(P,de,E))),X.push(ve)}),X},getAfterBody:function(){return Uu(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var h=this,E=h._options.callbacks,P=E.beforeFooter.apply(h,arguments),L=E.footer.apply(h,arguments),X=E.afterFooter.apply(h,arguments),de=[];return de=iu(de,ra(P)),de=iu(de,ra(L)),iu(de,ra(X))},update:function(h){var Mt,fn,E=this,P=E._options,L=E._model,X=E._model=td(P),de=E._active,ve=E._data,Ye={xAlign:L.xAlign,yAlign:L.yAlign},xe={x:L.x,y:L.y},nt={width:L.width,height:L.height},St={x:L.caretX,y:L.caretY};if(de.length){X.opacity=1;var jn=[],Vn=[];St=Eu[P.position].call(E,de,E._eventPosition);var fr=[];for(Mt=0,fn=de.length;Mt<fn;++Mt)fr.push(bu(de[Mt]));P.filter&&(fr=fr.filter(function($r){return P.filter($r,ve)})),P.itemSort&&(fr=fr.sort(function($r,Ui){return P.itemSort($r,Ui,ve)})),Fe.each(fr,function($r){jn.push(P.callbacks.labelColor.call(E,$r,E._chart)),Vn.push(P.callbacks.labelTextColor.call(E,$r,E._chart))}),X.title=E.getTitle(fr,ve),X.beforeBody=E.getBeforeBody(fr,ve),X.body=E.getBody(fr,ve),X.afterBody=E.getAfterBody(fr,ve),X.footer=E.getFooter(fr,ve),X.x=St.x,X.y=St.y,X.caretPadding=P.caretPadding,X.labelColors=jn,X.labelTextColors=Vn,X.dataPoints=fr,xe=function du(h,E,P,L){var X=h.x,de=h.y,Ye=h.caretPadding,nt=P.xAlign,St=P.yAlign,Mt=h.caretSize+Ye,fn=h.cornerRadius+Ye;return"right"===nt?X-=E.width:"center"===nt&&((X-=E.width/2)+E.width>L.width&&(X=L.width-E.width),X<0&&(X=0)),"top"===St?de+=Mt:de-="bottom"===St?E.height+Mt:E.height/2,"center"===St?"left"===nt?X+=Mt:"right"===nt&&(X-=Mt):"left"===nt?X-=fn:"right"===nt&&(X+=fn),{x:X,y:de}}(X,nt=function ec(h,E){var P=h._chart.ctx,L=2*E.yPadding,X=0,de=E.body,ve=de.reduce(function(Vn,fr){return Vn+fr.before.length+fr.lines.length+fr.after.length},0),Ye=E.title.length,xe=E.footer.length,nt=E.titleFontSize,St=E.bodyFontSize,Mt=E.footerFontSize;L+=Ye*nt,L+=Ye?(Ye-1)*E.titleSpacing:0,L+=Ye?E.titleMarginBottom:0,L+=(ve+=E.beforeBody.length+E.afterBody.length)*St,L+=ve?(ve-1)*E.bodySpacing:0,L+=xe?E.footerMarginTop:0,L+=xe*Mt,L+=xe?(xe-1)*E.footerSpacing:0;var fn=0,jn=function(Vn){X=Math.max(X,P.measureText(Vn).width+fn)};return P.font=Fe.fontString(nt,E._titleFontStyle,E._titleFontFamily),Fe.each(E.title,jn),P.font=Fe.fontString(St,E._bodyFontStyle,E._bodyFontFamily),Fe.each(E.beforeBody.concat(E.afterBody),jn),fn=E.displayColors?St+2:0,Fe.each(de,function(Vn){Fe.each(Vn.before,jn),Fe.each(Vn.lines,jn),Fe.each(Vn.after,jn)}),fn=0,P.font=Fe.fontString(Mt,E._footerFontStyle,E._footerFontFamily),Fe.each(E.footer,jn),{width:X+=2*E.xPadding,height:L}}(this,X),Ye=function uu(h,E){var P=h._model,L=h._chart,X=h._chart.chartArea,de="center",ve="center";P.y<E.height?ve="top":P.y>L.height-E.height&&(ve="bottom");var Ye,xe,nt,St,Mt,fn=(X.left+X.right)/2,jn=(X.top+X.bottom)/2;"center"===ve?(Ye=function(fr){return fr<=fn},xe=function(fr){return fr>fn}):(Ye=function(fr){return fr<=E.width/2},xe=function(fr){return fr>=L.width-E.width/2}),nt=function(fr){return fr+E.width+P.caretSize+P.caretPadding>L.width},St=function(fr){return fr-E.width-P.caretSize-P.caretPadding<0},Mt=function(fr){return fr<=jn?"top":"bottom"},Ye(P.x)?(de="left",nt(P.x)&&(de="center",ve=Mt(P.y))):xe(P.x)&&(de="right",St(P.x)&&(de="center",ve=Mt(P.y)));var Vn=h._options;return{xAlign:Vn.xAlign?Vn.xAlign:de,yAlign:Vn.yAlign?Vn.yAlign:ve}}(this,nt),E._chart)}else X.opacity=0;return X.xAlign=Ye.xAlign,X.yAlign=Ye.yAlign,X.x=xe.x,X.y=xe.y,X.width=nt.width,X.height=nt.height,X.caretX=St.x,X.caretY=St.y,E._model=X,h&&P.custom&&P.custom.call(E,X),E},drawCaret:function(h,E){var P=this._chart.ctx,X=this.getCaretPosition(h,E,this._view);P.lineTo(X.x1,X.y1),P.lineTo(X.x2,X.y2),P.lineTo(X.x3,X.y3)},getCaretPosition:function(h,E,P){var L,X,de,ve,Ye,xe,nt=P.caretSize,St=P.cornerRadius,Mt=P.xAlign,fn=P.yAlign,jn=h.x,Vn=h.y,fr=E.width,$r=E.height;if("center"===fn)Ye=Vn+$r/2,"left"===Mt?(X=(L=jn)-nt,de=L,ve=Ye+nt,xe=Ye-nt):(X=(L=jn+fr)+nt,de=L,ve=Ye-nt,xe=Ye+nt);else if("left"===Mt?(L=(X=jn+St+nt)-nt,de=X+nt):"right"===Mt?(L=(X=jn+fr-St-nt)-nt,de=X+nt):(L=(X=P.caretX)-nt,de=X+nt),"top"===fn)Ye=(ve=Vn)-nt,xe=ve;else{Ye=(ve=Vn+$r)+nt,xe=ve;var Ui=de;de=L,L=Ui}return{x1:L,x2:X,x3:de,y1:ve,y2:Ye,y3:xe}},drawTitle:function(h,E,P){var de,ve,Ye,L=E.title,X=L.length;if(X){var xe=lu(E.rtl,E.x,E.width);for(h.x=nd(E,E._titleAlign),P.textAlign=xe.textAlign(E._titleAlign),P.textBaseline="middle",de=E.titleFontSize,ve=E.titleSpacing,P.fillStyle=E.titleFontColor,P.font=Fe.fontString(de,E._titleFontStyle,E._titleFontFamily),Ye=0;Ye<X;++Ye)P.fillText(L[Ye],xe.x(h.x),h.y+de/2),h.y+=de+ve,Ye+1===X&&(h.y+=E.titleMarginBottom-ve)}},drawBody:function(h,E,P){var fn,jn,Vn,fr,$r,Ui,is,yo,L=E.bodyFontSize,X=E.bodySpacing,de=E._bodyAlign,ve=E.body,Ye=E.displayColors,xe=0,nt=Ye?nd(E,"left"):0,St=lu(E.rtl,E.x,E.width),Mt=function(el){P.fillText(el,St.x(h.x+xe),h.y+L/2),h.y+=L+X},Vs=St.textAlign(de);for(P.textAlign=de,P.textBaseline="middle",P.font=Fe.fontString(L,E._bodyFontStyle,E._bodyFontFamily),h.x=nd(E,Vs),P.fillStyle=E.bodyFontColor,Fe.each(E.beforeBody,Mt),xe=Ye&&"right"!==Vs?"center"===de?L/2+1:L+2:0,$r=0,is=ve.length;$r<is;++$r){for(fn=ve[$r],Vn=E.labelColors[$r],P.fillStyle=jn=E.labelTextColors[$r],Fe.each(fn.before,Mt),Ui=0,yo=(fr=fn.lines).length;Ui<yo;++Ui){if(Ye){var qs=St.x(nt);P.fillStyle=E.legendColorBackground,P.fillRect(St.leftForLtr(qs,L),h.y,L,L),P.lineWidth=1,P.strokeStyle=Vn.borderColor,P.strokeRect(St.leftForLtr(qs,L),h.y,L,L),P.fillStyle=Vn.backgroundColor,P.fillRect(St.leftForLtr(St.xPlus(qs,1),L-2),h.y+1,L-2,L-2),P.fillStyle=jn}Mt(fr[Ui])}Fe.each(fn.after,Mt)}xe=0,Fe.each(E.afterBody,Mt),h.y-=X},drawFooter:function(h,E,P){var de,ve,L=E.footer,X=L.length;if(X){var Ye=lu(E.rtl,E.x,E.width);for(h.x=nd(E,E._footerAlign),h.y+=E.footerMarginTop,P.textAlign=Ye.textAlign(E._footerAlign),P.textBaseline="middle",de=E.footerFontSize,P.fillStyle=E.footerFontColor,P.font=Fe.fontString(de,E._footerFontStyle,E._footerFontFamily),ve=0;ve<X;++ve)P.fillText(L[ve],Ye.x(h.x),h.y+de/2),h.y+=de+E.footerSpacing}},drawBackground:function(h,E,P,L){P.fillStyle=E.backgroundColor,P.strokeStyle=E.borderColor,P.lineWidth=E.borderWidth;var X=E.xAlign,de=E.yAlign,ve=h.x,Ye=h.y,xe=L.width,nt=L.height,St=E.cornerRadius;P.beginPath(),P.moveTo(ve+St,Ye),"top"===de&&this.drawCaret(h,L),P.lineTo(ve+xe-St,Ye),P.quadraticCurveTo(ve+xe,Ye,ve+xe,Ye+St),"center"===de&&"right"===X&&this.drawCaret(h,L),P.lineTo(ve+xe,Ye+nt-St),P.quadraticCurveTo(ve+xe,Ye+nt,ve+xe-St,Ye+nt),"bottom"===de&&this.drawCaret(h,L),P.lineTo(ve+St,Ye+nt),P.quadraticCurveTo(ve,Ye+nt,ve,Ye+nt-St),"center"===de&&"left"===X&&this.drawCaret(h,L),P.lineTo(ve,Ye+St),P.quadraticCurveTo(ve,Ye,ve+St,Ye),P.closePath(),P.fill(),E.borderWidth>0&&P.stroke()},draw:function(){var h=this._chart.ctx,E=this._view;if(0!==E.opacity){var P={width:E.width,height:E.height},L={x:E.x,y:E.y},X=Math.abs(E.opacity<.001)?0:E.opacity;this._options.enabled&&(E.title.length||E.beforeBody.length||E.body.length||E.afterBody.length||E.footer.length)&&(h.save(),h.globalAlpha=X,this.drawBackground(L,E,h,P),L.y+=E.yPadding,Fe.rtl.overrideTextDirection(h,E.textDirection),this.drawTitle(L,E,h),this.drawBody(L,E,h),this.drawFooter(L,E,h),Fe.rtl.restoreTextDirection(h,E.textDirection),h.restore())}},handleEvent:function(h){var L,E=this,P=E._options;return E._lastActive=E._lastActive||[],"mouseout"===h.type?E._active=[]:(E._active=E._chart.getElementsAtEventForMode(h,P.mode,P),P.reverse&&E._active.reverse()),(L=!Fe.arrayEquals(E._active,E._lastActive))&&(E._lastActive=E._active,(P.enabled||P.custom)&&(E._eventPosition={x:h.x,y:h.y},E.update(!0),E.pivot())),L}}),Ld=Yu;Ld.positioners=Eu;var Io=Fe.valueOrDefault;function fu(){return Fe.merge(Object.create(null),[].slice.call(arguments),{merger:function(h,E,P,L){if("xAxes"===h||"yAxes"===h){var de,ve,Ye,X=P[h].length;for(E[h]||(E[h]=[]),de=0;de<X;++de)ve=Io((Ye=P[h][de]).type,"xAxes"===h?"category":"linear"),de>=E[h].length&&E[h].push({}),Fe.merge(E[h][de],!E[h][de].type||Ye.type&&Ye.type!==E[h][de].type?[qu.getScaleDefaults(ve),Ye]:Ye)}else Fe._merger(h,E,P,L)}})}function Sr(){return Fe.merge(Object.create(null),[].slice.call(arguments),{merger:function(h,E,P,L){var X=E[h]||Object.create(null),de=P[h];"scales"===h?E[h]=fu(X,de):"scale"===h?E[h]=Fe.merge(X,[qu.getScaleDefaults(de.type),de]):Fe._merger(h,E,P,L)}})}function De(h){var E=h.options;Fe.each(h.scales,function(P){Bl.removeBox(h,P)}),E=Sr(vr.global,vr[h.config.type],E),h.options=h.config.options=E,h.ensureScalesHaveIDs(),h.buildOrUpdateScales(),h.tooltip._options=E.tooltips,h.tooltip.initialize()}function ct(h,E,P){var L,X=function(de){return de.id===L};do{L=E+P++}while(Fe.findIndex(h,X)>=0);return L}function It(h){return"top"===h||"bottom"===h}function Ht(h,E){return function(P,L){return P[h]===L[h]?P[E]-L[E]:P[h]-L[h]}}vr._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var _n=function(h,E){return this.construct(h,E),this};Fe.extend(_n.prototype,{construct:function(h,E){var P=this;E=function Z(h){var E=(h=h||Object.create(null)).data=h.data||{};return E.datasets=E.datasets||[],E.labels=E.labels||[],h.options=Sr(vr.global,vr[h.type],h.options||{}),h}(E);var L=Fa.acquireContext(h,E),X=L&&L.canvas,de=X&&X.height,ve=X&&X.width;P.id=Fe.uid(),P.ctx=L,P.canvas=X,P.config=E,P.width=ve,P.height=de,P.aspectRatio=de?ve/de:null,P.options=E.options,P._bufferedRender=!1,P._layers=[],P.chart=P,P.controller=P,_n.instances[P.id]=P,Object.defineProperty(P,"data",{get:function(){return P.config.data},set:function(Ye){P.config.data=Ye}}),L&&X?(P.initialize(),P.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var h=this;return Es.notify(h,"beforeInit"),Fe.retinaScale(h,h.options.devicePixelRatio),h.bindEvents(),h.options.responsive&&h.resize(!0),h.initToolTip(),Es.notify(h,"afterInit"),h},clear:function(){return Fe.canvas.clear(this),this},stop:function(){return Cr.cancelAnimation(this),this},resize:function(h){var E=this,P=E.options,L=E.canvas,X=P.maintainAspectRatio&&E.aspectRatio||null,de=Math.max(0,Math.floor(Fe.getMaximumWidth(L))),ve=Math.max(0,Math.floor(X?de/X:Fe.getMaximumHeight(L)));if((E.width!==de||E.height!==ve)&&(L.width=E.width=de,L.height=E.height=ve,L.style.width=de+"px",L.style.height=ve+"px",Fe.retinaScale(E,P.devicePixelRatio),!h)){var Ye={width:de,height:ve};Es.notify(E,"resize",[Ye]),P.onResize&&P.onResize(E,Ye),E.stop(),E.update({duration:P.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var h=this.options,E=h.scales||{},P=h.scale;Fe.each(E.xAxes,function(L,X){L.id||(L.id=ct(E.xAxes,"x-axis-",X))}),Fe.each(E.yAxes,function(L,X){L.id||(L.id=ct(E.yAxes,"y-axis-",X))}),P&&(P.id=P.id||"scale")},buildOrUpdateScales:function(){var h=this,E=h.options,P=h.scales||{},L=[],X=Object.keys(P).reduce(function(de,ve){return de[ve]=!1,de},{});E.scales&&(L=L.concat((E.scales.xAxes||[]).map(function(de){return{options:de,dtype:"category",dposition:"bottom"}}),(E.scales.yAxes||[]).map(function(de){return{options:de,dtype:"linear",dposition:"left"}}))),E.scale&&L.push({options:E.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),Fe.each(L,function(de){var ve=de.options,Ye=ve.id,xe=Io(ve.type,de.dtype);It(ve.position)!==It(de.dposition)&&(ve.position=de.dposition),X[Ye]=!0;var nt=null;if(Ye in P&&P[Ye].type===xe)(nt=P[Ye]).options=ve,nt.ctx=h.ctx,nt.chart=h;else{var St=qu.getScaleConstructor(xe);if(!St)return;nt=new St({id:Ye,type:xe,options:ve,ctx:h.ctx,chart:h}),P[nt.id]=nt}nt.mergeTicksOptions(),de.isDefault&&(h.scale=nt)}),Fe.each(X,function(de,ve){de||delete P[ve]}),h.scales=P,qu.addScalesToLayout(this)},buildOrUpdateControllers:function(){var L,X,h=this,E=[],P=h.data.datasets;for(L=0,X=P.length;L<X;L++){var de=P[L],ve=h.getDatasetMeta(L),Ye=de.type||h.config.type;if(ve.type&&ve.type!==Ye&&(h.destroyDatasetMeta(L),ve=h.getDatasetMeta(L)),ve.type=Ye,ve.order=de.order||0,ve.index=L,ve.controller)ve.controller.updateIndex(L),ve.controller.linkScales();else{var xe=Oi[ve.type];if(void 0===xe)throw new Error('"'+ve.type+'" is not a chart type.');ve.controller=new xe(h,L),E.push(ve.controller)}}return E},resetElements:function(){var h=this;Fe.each(h.data.datasets,function(E,P){h.getDatasetMeta(P).controller.reset()},h)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(h){var P,L,E=this;if((!h||"object"!=typeof h)&&(h={duration:h,lazy:arguments[1]}),De(E),Es._invalidate(E),!1!==Es.notify(E,"beforeUpdate")){E.tooltip._data=E.data;var X=E.buildOrUpdateControllers();for(P=0,L=E.data.datasets.length;P<L;P++)E.getDatasetMeta(P).controller.buildOrUpdateElements();E.updateLayout(),E.options.animation&&E.options.animation.duration&&Fe.each(X,function(de){de.reset()}),E.updateDatasets(),E.tooltip.initialize(),E.lastActive=[],Es.notify(E,"afterUpdate"),E._layers.sort(Ht("z","_idx")),E._bufferedRender?E._bufferedRequest={duration:h.duration,easing:h.easing,lazy:h.lazy}:E.render(h)}},updateLayout:function(){var h=this;!1!==Es.notify(h,"beforeLayout")&&(Bl.update(this,this.width,this.height),h._layers=[],Fe.each(h.boxes,function(E){E._configure&&E._configure(),h._layers.push.apply(h._layers,E._layers())},h),h._layers.forEach(function(E,P){E._idx=P}),Es.notify(h,"afterScaleUpdate"),Es.notify(h,"afterLayout"))},updateDatasets:function(){var h=this;if(!1!==Es.notify(h,"beforeDatasetsUpdate")){for(var E=0,P=h.data.datasets.length;E<P;++E)h.updateDataset(E);Es.notify(h,"afterDatasetsUpdate")}},updateDataset:function(h){var E=this,P=E.getDatasetMeta(h),L={meta:P,index:h};!1!==Es.notify(E,"beforeDatasetUpdate",[L])&&(P.controller._update(),Es.notify(E,"afterDatasetUpdate",[L]))},render:function(h){var E=this;(!h||"object"!=typeof h)&&(h={duration:h,lazy:arguments[1]});var P=E.options.animation,L=Io(h.duration,P&&P.duration),X=h.lazy;if(!1!==Es.notify(E,"beforeRender")){var de=function(Ye){Es.notify(E,"afterRender"),Fe.callback(P&&P.onComplete,[Ye],E)};if(P&&L){var ve=new yn({numSteps:L/16.66,easing:h.easing||P.easing,render:function(Ye,xe){var St=xe.currentStep,Mt=St/xe.numSteps;Ye.draw((0,Fe.easing.effects[xe.easing])(Mt),Mt,St)},onAnimationProgress:P.onProgress,onAnimationComplete:de});Cr.addAnimation(E,ve,L,X)}else E.draw(),de(new yn({numSteps:0,chart:E}));return E}},draw:function(h){var P,L,E=this;if(E.clear(),Fe.isNullOrUndef(h)&&(h=1),E.transition(h),!(E.width<=0||E.height<=0)&&!1!==Es.notify(E,"beforeDraw",[h])){for(L=E._layers,P=0;P<L.length&&L[P].z<=0;++P)L[P].draw(E.chartArea);for(E.drawDatasets(h);P<L.length;++P)L[P].draw(E.chartArea);E._drawTooltip(h),Es.notify(E,"afterDraw",[h])}},transition:function(h){for(var E=this,P=0,L=(E.data.datasets||[]).length;P<L;++P)E.isDatasetVisible(P)&&E.getDatasetMeta(P).controller.transition(h);E.tooltip.transition(h)},_getSortedDatasetMetas:function(h){var X,de,E=this,L=[];for(X=0,de=(E.data.datasets||[]).length;X<de;++X)(!h||E.isDatasetVisible(X))&&L.push(E.getDatasetMeta(X));return L.sort(Ht("order","index")),L},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(h){var P,L,E=this;if(!1!==Es.notify(E,"beforeDatasetsDraw",[h])){for(L=(P=E._getSortedVisibleDatasetMetas()).length-1;L>=0;--L)E.drawDataset(P[L],h);Es.notify(E,"afterDatasetsDraw",[h])}},drawDataset:function(h,E){var L={meta:h,index:h.index,easingValue:E};!1!==Es.notify(this,"beforeDatasetDraw",[L])&&(h.controller.draw(E),Es.notify(this,"afterDatasetDraw",[L]))},_drawTooltip:function(h){var E=this,P=E.tooltip,L={tooltip:P,easingValue:h};!1!==Es.notify(E,"beforeTooltipDraw",[L])&&(P.draw(),Es.notify(E,"afterTooltipDraw",[L]))},getElementAtEvent:function(h){return sl.modes.single(this,h)},getElementsAtEvent:function(h){return sl.modes.label(this,h,{intersect:!0})},getElementsAtXAxis:function(h){return sl.modes["x-axis"](this,h,{intersect:!0})},getElementsAtEventForMode:function(h,E,P){var L=sl.modes[E];return"function"==typeof L?L(this,h,P):[]},getDatasetAtEvent:function(h){return sl.modes.dataset(this,h,{intersect:!0})},getDatasetMeta:function(h){var E=this,P=E.data.datasets[h];P._meta||(P._meta={});var L=P._meta[E.id];return L||(L=P._meta[E.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:P.order||0,index:h}),L},getVisibleDatasetCount:function(){for(var h=0,E=0,P=this.data.datasets.length;E<P;++E)this.isDatasetVisible(E)&&h++;return h},isDatasetVisible:function(h){var E=this.getDatasetMeta(h);return"boolean"==typeof E.hidden?!E.hidden:!this.data.datasets[h].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(h){var E=this.id,P=this.data.datasets[h],L=P._meta&&P._meta[E];L&&(L.controller.destroy(),delete P._meta[E])},destroy:function(){var P,L,h=this,E=h.canvas;for(h.stop(),P=0,L=h.data.datasets.length;P<L;++P)h.destroyDatasetMeta(P);E&&(h.unbindEvents(),Fe.canvas.clear(h),Fa.releaseContext(h.ctx),h.canvas=null,h.ctx=null),Es.notify(h,"destroy"),delete _n.instances[h.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var h=this;h.tooltip=new Ld({_chart:h,_chartInstance:h,_data:h.data,_options:h.options.tooltips},h)},bindEvents:function(){var h=this,E=h._listeners={},P=function(){h.eventHandler.apply(h,arguments)};Fe.each(h.options.events,function(L){Fa.addEventListener(h,L,P),E[L]=P}),h.options.responsive&&(P=function(){h.resize()},Fa.addEventListener(h,"resize",P),E.resize=P)},unbindEvents:function(){var h=this,E=h._listeners;!E||(delete h._listeners,Fe.each(E,function(P,L){Fa.removeEventListener(h,L,P)}))},updateHoverStyle:function(h,E,P){var X,de,ve,L=P?"set":"remove";for(de=0,ve=h.length;de<ve;++de)(X=h[de])&&this.getDatasetMeta(X._datasetIndex).controller[L+"HoverStyle"](X);"dataset"===E&&this.getDatasetMeta(h[0]._datasetIndex).controller["_"+L+"DatasetHoverStyle"]()},eventHandler:function(h){var E=this,P=E.tooltip;if(!1!==Es.notify(E,"beforeEvent",[h])){E._bufferedRender=!0,E._bufferedRequest=null;var L=E.handleEvent(h);P&&(L=P._start?P.handleEvent(h):L|P.handleEvent(h)),Es.notify(E,"afterEvent",[h]);var X=E._bufferedRequest;return X?E.render(X):L&&!E.animating&&(E.stop(),E.render({duration:E.options.hover.animationDuration,lazy:!0})),E._bufferedRender=!1,E._bufferedRequest=null,E}},handleEvent:function(h){var X,E=this,P=E.options||{},L=P.hover;return E.lastActive=E.lastActive||[],E.active="mouseout"===h.type?[]:E.getElementsAtEventForMode(h,L.mode,L),Fe.callback(P.onHover||P.hover.onHover,[h.native,E.active],E),("mouseup"===h.type||"click"===h.type)&&P.onClick&&P.onClick.call(E,h.native,E.active),E.lastActive.length&&E.updateHoverStyle(E.lastActive,L.mode,!1),E.active.length&&L.mode&&E.updateHoverStyle(E.active,L.mode,!0),X=!Fe.arrayEquals(E.active,E.lastActive),E.lastActive=E.active,X}}),_n.instances={};var Pn=_n;_n.Controller=_n,_n.types={},Fe.configMerge=Sr,Fe.scaleMerge=fu;function ai(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function Ei(h){this.options=h||{}}Fe.extend(Ei.prototype,{formats:ai,parse:ai,format:ai,add:ai,diff:ai,startOf:ai,endOf:ai,_create:function(h){return h}}),Ei.override=function(h){Fe.extend(Ei.prototype,h)};var Vi={_date:Ei},Pr={formatters:{values:function(h){return Fe.isArray(h)?h:""+h},linear:function(h,E,P){var L=P.length>3?P[2]-P[1]:P[1]-P[0];Math.abs(L)>1&&h!==Math.floor(h)&&(L=h-Math.floor(h));var X=Fe.log10(Math.abs(L)),de="";if(0!==h)if(Math.max(Math.abs(P[0]),Math.abs(P[P.length-1]))<1e-4){var Ye=Fe.log10(Math.abs(h)),xe=Math.floor(Ye)-Math.floor(X);xe=Math.max(Math.min(xe,20),0),de=h.toExponential(xe)}else{var nt=-1*Math.floor(X);nt=Math.max(Math.min(nt,20),0),de=h.toFixed(nt)}else de="0";return de},logarithmic:function(h,E,P){var L=h/Math.pow(10,Math.floor(Fe.log10(h)));return 0===h?"0":1===L||2===L||5===L||0===E||E===P.length-1?h.toExponential():""}}},Yn=Fe.isArray,Rr=Fe.isNullOrUndef,br=Fe.valueOrDefault,fo=Fe.valueAtIndexOrDefault;function ls(h,E,P){var nt,L=h.getTicks().length,X=Math.min(E,L-1),de=h.getPixelForTick(X),ve=h._startPixel,Ye=h._endPixel;if(!(P&&(nt=1===L?Math.max(de-ve,Ye-de):0===E?(h.getPixelForTick(1)-de)/2:(de-h.getPixelForTick(X-1))/2,de+=X<E?nt:-nt,de<ve-1e-6||de>Ye+1e-6)))return de}function Us(h,E,P,L){var St,Mt,fn,jn,Vn,fr,$r,Ui,is,yo,Vs,qs,el,X=P.length,de=[],ve=[],Ye=[],xe=0,nt=0;for(St=0;St<X;++St){if(jn=P[St].label,h.font=fr=(Vn=P[St].major?E.major:E.minor).string,$r=L[fr]=L[fr]||{data:{},gc:[]},Ui=Vn.lineHeight,is=yo=0,Rr(jn)||Yn(jn)){if(Yn(jn))for(Mt=0,fn=jn.length;Mt<fn;++Mt)!Rr(Vs=jn[Mt])&&!Yn(Vs)&&(is=Fe.measureText(h,$r.data,$r.gc,is,Vs),yo+=Ui)}else is=Fe.measureText(h,$r.data,$r.gc,is,jn),yo=Ui;de.push(is),ve.push(yo),Ye.push(Ui/2),xe=Math.max(is,xe),nt=Math.max(yo,nt)}function $a(Ga){return{width:de[Ga]||0,height:ve[Ga]||0,offset:Ye[Ga]||0}}return function _l(h,E){Fe.each(h,function(P){var de,L=P.gc,X=L.length/2;if(X>E){for(de=0;de<X;++de)delete P.data[L[de]];L.splice(0,X)}})}(L,X),qs=de.indexOf(xe),el=ve.indexOf(nt),{first:$a(0),last:$a(X-1),widest:$a(qs),highest:$a(el)}}function zc(h){return h.drawTicks?h.tickMarkLength:0}function Ic(h){var E,P;return h.display?(E=Fe.options._parseFont(h),P=Fe.options.toPadding(h.padding),E.lineHeight+P.height):0}function Pu(h,E){return Fe.extend(Fe.options._parseFont({fontFamily:br(E.fontFamily,h.fontFamily),fontSize:br(E.fontSize,h.fontSize),fontStyle:br(E.fontStyle,h.fontStyle),lineHeight:br(E.lineHeight,h.lineHeight)}),{color:Fe.options.resolve([E.fontColor,h.fontColor,vr.global.defaultFontColor])})}function Su(h){var E=Pu(h,h.minor);return{minor:E,major:h.major.enabled?Pu(h,h.major):E}}function Zd(h){var P,L,X,E=[];for(L=0,X=h.length;L<X;++L)void 0!==(P=h[L])._index&&E.push(P);return E}function kd(h,E,P,L){var Ye,xe,nt,St,X=br(P,0),de=Math.min(br(L,h.length),h.length),ve=0;for(E=Math.ceil(E),L&&(E=(Ye=L-P)/Math.floor(Ye/E)),St=X;St<0;)ve++,St=Math.round(X+ve*E);for(xe=Math.max(X,0);xe<de;xe++)nt=h[xe],xe===St?(nt._index=xe,ve++,St=Math.round(X+ve*E)):delete nt.label}vr._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Pr.formatters.values,minor:{},major:{}}});var Oc=yt.extend({zeroLineIndex:0,getPadding:function(){var h=this;return{left:h.paddingLeft||0,top:h.paddingTop||0,right:h.paddingRight||0,bottom:h.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var h=this.chart.data;return this.options.labels||(this.isHorizontal()?h.xLabels:h.yLabels)||h.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){Fe.callback(this.options.beforeUpdate,[this])},update:function(h,E,P){var ve,Ye,xe,nt,St,L=this,X=L.options.ticks,de=X.sampleSize;if(L.beforeUpdate(),L.maxWidth=h,L.maxHeight=E,L.margins=Fe.extend({left:0,right:0,top:0,bottom:0},P),L._ticks=null,L.ticks=null,L._labelSizes=null,L._maxLabelLines=0,L.longestLabelWidth=0,L.longestTextCache=L.longestTextCache||{},L._gridLineItems=null,L._labelItems=null,L.beforeSetDimensions(),L.setDimensions(),L.afterSetDimensions(),L.beforeDataLimits(),L.determineDataLimits(),L.afterDataLimits(),L.beforeBuildTicks(),nt=L.buildTicks()||[],(!(nt=L.afterBuildTicks(nt)||nt)||!nt.length)&&L.ticks)for(nt=[],ve=0,Ye=L.ticks.length;ve<Ye;++ve)nt.push({value:L.ticks[ve],major:!1});return L._ticks=nt,xe=L._convertTicksToLabels((St=de<nt.length)?function $s(h,E){for(var P=[],L=h.length/E,X=0,de=h.length;X<de;X+=L)P.push(h[Math.floor(X)]);return P}(nt,de):nt),L._configure(),L.beforeCalculateTickRotation(),L.calculateTickRotation(),L.afterCalculateTickRotation(),L.beforeFit(),L.fit(),L.afterFit(),L._ticksToDraw=X.display&&(X.autoSkip||"auto"===X.source)?L._autoSkip(nt):nt,St&&(xe=L._convertTicksToLabels(L._ticksToDraw)),L.ticks=xe,L.afterUpdate(),L.minSize},_configure:function(){var P,L,h=this,E=h.options.ticks.reverse;h.isHorizontal()?(P=h.left,L=h.right):(P=h.top,L=h.bottom,E=!E),h._startPixel=P,h._endPixel=L,h._reversePixels=E,h._length=L-P},afterUpdate:function(){Fe.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){Fe.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var h=this;h.isHorizontal()?(h.width=h.maxWidth,h.left=0,h.right=h.width):(h.height=h.maxHeight,h.top=0,h.bottom=h.height),h.paddingLeft=0,h.paddingTop=0,h.paddingRight=0,h.paddingBottom=0},afterSetDimensions:function(){Fe.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){Fe.callback(this.options.beforeDataLimits,[this])},determineDataLimits:Fe.noop,afterDataLimits:function(){Fe.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){Fe.callback(this.options.beforeBuildTicks,[this])},buildTicks:Fe.noop,afterBuildTicks:function(h){var E=this;return Yn(h)&&h.length?Fe.callback(E.options.afterBuildTicks,[E,h]):(E.ticks=Fe.callback(E.options.afterBuildTicks,[E,E.ticks])||E.ticks,h)},beforeTickToLabelConversion:function(){Fe.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var h=this,E=h.options.ticks;h.ticks=h.ticks.map(E.userCallback||E.callback,this)},afterTickToLabelConversion:function(){Fe.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){Fe.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var Ye,xe,nt,St,Mt,fn,jn,h=this,E=h.options,P=E.ticks,L=h.getTicks().length,X=P.minRotation||0,de=P.maxRotation,ve=X;!h._isVisible()||!P.display||X>=de||L<=1||!h.isHorizontal()?h.labelRotation=X:(xe=(Ye=h._getLabelSizes()).widest.width,nt=Ye.highest.height-Ye.highest.offset,St=Math.min(h.maxWidth,h.chart.width-xe),xe+6>(Mt=E.offset?h.maxWidth/L:St/(L-1))&&(Mt=St/(L-(E.offset?.5:1)),fn=h.maxHeight-zc(E.gridLines)-P.padding-Ic(E.scaleLabel),jn=Math.sqrt(xe*xe+nt*nt),ve=Fe.toDegrees(Math.min(Math.asin(Math.min((Ye.highest.height+6)/Mt,1)),Math.asin(Math.min(fn/jn,1))-Math.asin(nt/jn))),ve=Math.max(X,Math.min(de,ve))),h.labelRotation=ve)},afterCalculateTickRotation:function(){Fe.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){Fe.callback(this.options.beforeFit,[this])},fit:function(){var h=this,E=h.minSize={width:0,height:0},P=h.chart,L=h.options,X=L.ticks,de=L.scaleLabel,ve=L.gridLines,Ye=h._isVisible(),xe="bottom"===L.position,nt=h.isHorizontal();if(nt?E.width=h.maxWidth:Ye&&(E.width=zc(ve)+Ic(de)),nt?Ye&&(E.height=zc(ve)+Ic(de)):E.height=h.maxHeight,X.display&&Ye){var St=Su(X),Mt=h._getLabelSizes(),fn=Mt.first,jn=Mt.last,Vn=Mt.widest,fr=Mt.highest,$r=.4*St.minor.lineHeight,Ui=X.padding;if(nt){var is=0!==h.labelRotation,yo=Fe.toRadians(h.labelRotation),Vs=Math.cos(yo),qs=Math.sin(yo);E.height=Math.min(h.maxHeight,E.height+(qs*Vn.width+Vs*(fr.height-(is?fr.offset:0))+(is?0:$r))+Ui);var wa,Gl,$a=h.getPixelForTick(0)-h.left,Ga=h.right-h.getPixelForTick(h.getTicks().length-1);is?(wa=xe?Vs*fn.width+qs*fn.offset:qs*(fn.height-fn.offset),Gl=xe?qs*(jn.height-jn.offset):Vs*jn.width+qs*jn.offset):(wa=fn.width/2,Gl=jn.width/2),h.paddingLeft=Math.max((wa-$a)*h.width/(h.width-$a),0)+3,h.paddingRight=Math.max((Gl-Ga)*h.width/(h.width-Ga),0)+3}else E.width=Math.min(h.maxWidth,E.width+(X.mirror?0:Vn.width+Ui+$r)),h.paddingTop=fn.height/2,h.paddingBottom=jn.height/2}h.handleMargins(),nt?(h.width=h._length=P.width-h.margins.left-h.margins.right,h.height=E.height):(h.width=E.width,h.height=h._length=P.height-h.margins.top-h.margins.bottom)},handleMargins:function(){var h=this;h.margins&&(h.margins.left=Math.max(h.paddingLeft,h.margins.left),h.margins.top=Math.max(h.paddingTop,h.margins.top),h.margins.right=Math.max(h.paddingRight,h.margins.right),h.margins.bottom=Math.max(h.paddingBottom,h.margins.bottom))},afterFit:function(){Fe.callback(this.options.afterFit,[this])},isHorizontal:function(){var h=this.options.position;return"top"===h||"bottom"===h},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(h){if(Rr(h))return NaN;if(("number"==typeof h||h instanceof Number)&&!isFinite(h))return NaN;if(h)if(this.isHorizontal()){if(void 0!==h.x)return this.getRightValue(h.x)}else if(void 0!==h.y)return this.getRightValue(h.y);return h},_convertTicksToLabels:function(h){var P,L,X,E=this;for(E.ticks=h.map(function(de){return de.value}),E.beforeTickToLabelConversion(),P=E.convertTicksToLabels(h)||E.ticks,E.afterTickToLabelConversion(),L=0,X=h.length;L<X;++L)h[L].label=P[L];return P},_getLabelSizes:function(){var h=this,E=h._labelSizes;return E||(h._labelSizes=E=Us(h.ctx,Su(h.options.ticks),h.getTicks(),h.longestTextCache),h.longestLabelWidth=E.widest.width),E},_parseValue:function(h){var E,P,L,X;return Yn(h)?(E=+this.getRightValue(h[0]),P=+this.getRightValue(h[1]),L=Math.min(E,P),X=Math.max(E,P)):(E=void 0,P=h=+this.getRightValue(h),L=h,X=h),{min:L,max:X,start:E,end:P}},_getScaleLabel:function(h){var E=this._parseValue(h);return void 0!==E.start?"["+E.start+", "+E.end+"]":+this.getRightValue(h)},getLabelForIndex:Fe.noop,getPixelForValue:Fe.noop,getValueForPixel:Fe.noop,getPixelForTick:function(h){var E=this,P=E.options.offset,L=E._ticks.length,X=1/Math.max(L-(P?0:1),1);return h<0||h>L-1?null:E.getPixelForDecimal(h*X+(P?X/2:0))},getPixelForDecimal:function(h){var E=this;return E._reversePixels&&(h=1-h),E._startPixel+h*E._length},getDecimalForPixel:function(h){var E=(h-this._startPixel)/this._length;return this._reversePixels?1-E:E},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var h=this,E=h.min,P=h.max;return h.beginAtZero?0:E<0&&P<0?P:E>0&&P>0?E:0},_autoSkip:function(h){var nt,St,Mt,fn,E=this,P=E.options.ticks,L=E._length,X=P.maxTicksLimit||L/E._tickSize()+1,de=P.major.enabled?function Hc(h){var P,L,E=[];for(P=0,L=h.length;P<L;P++)h[P].major&&E.push(P);return E}(h):[],ve=de.length,Ye=de[0],xe=de[ve-1];if(ve>X)return function La(h,E,P){var de,ve,L=0,X=E[0];for(P=Math.ceil(P),de=0;de<h.length;de++)ve=h[de],de===X?(ve._index=de,X=E[++L*P]):delete ve.label}(h,de,ve/X),Zd(h);if(Mt=function md(h,E,P,L){var ve,Ye,xe,nt,X=function _d(h){var P,L,E=h.length;if(E<2)return!1;for(L=h[0],P=1;P<E;++P)if(h[P]-h[P-1]!==L)return!1;return L}(h),de=(E.length-1)/L;if(!X)return Math.max(de,1);for(xe=0,nt=(ve=Fe.math._factorize(X)).length-1;xe<nt;xe++)if((Ye=ve[xe])>de)return Ye;return Math.max(de,1)}(de,h,0,X),ve>0){for(nt=0,St=ve-1;nt<St;nt++)kd(h,Mt,de[nt],de[nt+1]);return kd(h,Mt,Fe.isNullOrUndef(fn=ve>1?(xe-Ye)/(ve-1):null)?0:Ye-fn,Ye),kd(h,Mt,xe,Fe.isNullOrUndef(fn)?h.length:xe+fn),Zd(h)}return kd(h,Mt),Zd(h)},_tickSize:function(){var h=this,E=h.options.ticks,P=Fe.toRadians(h.labelRotation),L=Math.abs(Math.cos(P)),X=Math.abs(Math.sin(P)),de=h._getLabelSizes(),ve=E.autoSkipPadding||0,Ye=de?de.widest.width+ve:0,xe=de?de.highest.height+ve:0;return h.isHorizontal()?xe*L>Ye*X?Ye/L:xe/X:xe*X<Ye*L?xe/L:Ye/X},_isVisible:function(){var L,X,de,h=this,E=h.chart,P=h.options.display;if("auto"!==P)return!!P;for(L=0,X=E.data.datasets.length;L<X;++L)if(E.isDatasetVisible(L)&&((de=E.getDatasetMeta(L)).xAxisID===h.id||de.yAxisID===h.id))return!0;return!1},_computeGridLineItems:function(h){var $r,Ui,is,yo,Vs,qs,el,$a,Ga,wa,Gl,_u,Va,Mu,ku,xc,Ou,E=this,P=E.chart,L=E.options,X=L.gridLines,de=L.position,ve=X.offsetGridLines,Ye=E.isHorizontal(),xe=E._ticksToDraw,nt=xe.length+(ve?1:0),St=zc(X),Mt=[],fn=X.drawBorder?fo(X.lineWidth,0,0):0,jn=fn/2,Vn=Fe._alignPixel,fr=function(Qd){return Vn(P,Qd,fn)};for("top"===de?($r=fr(E.bottom),el=E.bottom-St,Ga=$r-jn,Gl=fr(h.top)+jn,Va=h.bottom):"bottom"===de?($r=fr(E.top),Gl=h.top,Va=fr(h.bottom)-jn,el=$r+jn,Ga=E.top+St):"left"===de?($r=fr(E.right),qs=E.right-St,$a=$r-jn,wa=fr(h.left)+jn,_u=h.right):($r=fr(E.left),wa=h.left,_u=fr(h.right)-jn,qs=$r+jn,$a=E.left+St),Ui=0;Ui<nt;++Ui)!(Rr((is=xe[Ui]||{}).label)&&Ui<xe.length)&&(Ui===E.zeroLineIndex&&L.offset===ve?(Mu=X.zeroLineWidth,ku=X.zeroLineColor,xc=X.zeroLineBorderDash||[],Ou=X.zeroLineBorderDashOffset||0):(Mu=fo(X.lineWidth,Ui,1),ku=fo(X.color,Ui,"rgba(0,0,0,0.1)"),xc=X.borderDash||[],Ou=X.borderDashOffset||0),void 0!==(yo=ls(E,is._index||Ui,ve))&&(Vs=Vn(P,yo,Mu),Ye?qs=$a=wa=_u=Vs:el=Ga=Gl=Va=Vs,Mt.push({tx1:qs,ty1:el,tx2:$a,ty2:Ga,x1:wa,y1:Gl,x2:_u,y2:Va,width:Mu,color:ku,borderDash:xc,borderDashOffset:Ou})));return Mt.ticksLength=nt,Mt.borderValue=$r,Mt},_computeLabelItems:function(){var fn,jn,Vn,fr,$r,Ui,is,yo,Vs,qs,el,$a,h=this,E=h.options,P=E.ticks,L=E.position,X=P.mirror,de=h.isHorizontal(),ve=h._ticksToDraw,Ye=Su(P),xe=P.padding,nt=zc(E.gridLines),St=-Fe.toRadians(h.labelRotation),Mt=[];for("top"===L?(Ui=h.bottom-nt-xe,is=St?"left":"center"):"bottom"===L?(Ui=h.top+nt+xe,is=St?"right":"center"):"left"===L?($r=h.right-(X?0:nt)-xe,is=X?"left":"right"):($r=h.left+(X?0:nt)+xe,is=X?"right":"left"),fn=0,jn=ve.length;fn<jn;++fn)!Rr(fr=(Vn=ve[fn]).label)&&(yo=h.getPixelForTick(Vn._index||fn)+P.labelOffset,qs=(Vs=Vn.major?Ye.major:Ye.minor).lineHeight,el=Yn(fr)?fr.length:1,de?($r=yo,$a="top"===L?((St?1:.5)-el)*qs:(St?0:.5)*qs):(Ui=yo,$a=(1-el)*qs/2),Mt.push({x:$r,y:Ui,rotation:St,label:fr,font:Vs,textOffset:$a,textAlign:is}));return Mt},_drawGrid:function(h){var E=this,P=E.options.gridLines;if(P.display){var xe,nt,St,Mt,fn,L=E.ctx,X=E.chart,de=Fe._alignPixel,ve=P.drawBorder?fo(P.lineWidth,0,0):0,Ye=E._gridLineItems||(E._gridLineItems=E._computeGridLineItems(h));for(St=0,Mt=Ye.length;St<Mt;++St)nt=(fn=Ye[St]).color,(xe=fn.width)&&nt&&(L.save(),L.lineWidth=xe,L.strokeStyle=nt,L.setLineDash&&(L.setLineDash(fn.borderDash),L.lineDashOffset=fn.borderDashOffset),L.beginPath(),P.drawTicks&&(L.moveTo(fn.tx1,fn.ty1),L.lineTo(fn.tx2,fn.ty2)),P.drawOnChartArea&&(L.moveTo(fn.x1,fn.y1),L.lineTo(fn.x2,fn.y2)),L.stroke(),L.restore());if(ve){var $r,Ui,is,yo,jn=ve,Vn=fo(P.lineWidth,Ye.ticksLength-1,1),fr=Ye.borderValue;E.isHorizontal()?($r=de(X,E.left,jn)-jn/2,Ui=de(X,E.right,Vn)+Vn/2,is=yo=fr):(is=de(X,E.top,jn)-jn/2,yo=de(X,E.bottom,Vn)+Vn/2,$r=Ui=fr),L.lineWidth=ve,L.strokeStyle=fo(P.color,0),L.beginPath(),L.moveTo($r,is),L.lineTo(Ui,yo),L.stroke()}}},_drawLabels:function(){var h=this;if(h.options.ticks.display){var X,de,ve,Ye,xe,nt,St,Mt,P=h.ctx,L=h._labelItems||(h._labelItems=h._computeLabelItems());for(X=0,ve=L.length;X<ve;++X){if(nt=(xe=L[X]).font,P.save(),P.translate(xe.x,xe.y),P.rotate(xe.rotation),P.font=nt.string,P.fillStyle=nt.color,P.textBaseline="middle",P.textAlign=xe.textAlign,Mt=xe.textOffset,Yn(St=xe.label))for(de=0,Ye=St.length;de<Ye;++de)P.fillText(""+St[de],0,Mt),Mt+=nt.lineHeight;else P.fillText(St,0,Mt);P.restore()}}},_drawTitle:function(){var h=this,E=h.ctx,P=h.options,L=P.scaleLabel;if(L.display){var St,Mt,X=br(L.fontColor,vr.global.defaultFontColor),de=Fe.options._parseFont(L),ve=Fe.options.toPadding(L.padding),Ye=de.lineHeight/2,xe=P.position,nt=0;if(h.isHorizontal())St=h.left+h.width/2,Mt="bottom"===xe?h.bottom-Ye-ve.bottom:h.top+Ye+ve.top;else{var fn="left"===xe;St=fn?h.left+Ye+ve.top:h.right-Ye-ve.top,Mt=h.top+h.height/2,nt=fn?-.5*Math.PI:.5*Math.PI}E.save(),E.translate(St,Mt),E.rotate(nt),E.textAlign="center",E.textBaseline="middle",E.fillStyle=X,E.font=de.string,E.fillText(L.labelString,0,0),E.restore()}},draw:function(h){var E=this;!E._isVisible()||(E._drawGrid(h),E._drawTitle(),E._drawLabels())},_layers:function(){var h=this,E=h.options,P=E.ticks&&E.ticks.z||0,L=E.gridLines&&E.gridLines.z||0;return h._isVisible()&&P!==L&&h.draw===h._draw?[{z:L,draw:function(){h._drawGrid.apply(h,arguments),h._drawTitle.apply(h,arguments)}},{z:P,draw:function(){h._drawLabels.apply(h,arguments)}}]:[{z:P,draw:function(){h.draw.apply(h,arguments)}}]},_getMatchingVisibleMetas:function(h){var E=this,P=E.isHorizontal();return E.chart._getSortedVisibleDatasetMetas().filter(function(L){return(!h||L.type===h)&&(P?L.xAxisID===E.id:L.yAxisID===E.id)})}});Oc.prototype._draw=Oc.prototype.draw;var Mo=Oc,wo=Fe.isNullOrUndef,Tl=Mo.extend({determineDataLimits:function(){var Ye,h=this,E=h._getLabels(),P=h.options.ticks,L=P.min,X=P.max,de=0,ve=E.length-1;void 0!==L&&(Ye=E.indexOf(L))>=0&&(de=Ye),void 0!==X&&(Ye=E.indexOf(X))>=0&&(ve=Ye),h.minIndex=de,h.maxIndex=ve,h.min=E[de],h.max=E[ve]},buildTicks:function(){var h=this,E=h._getLabels(),P=h.minIndex,L=h.maxIndex;h.ticks=0===P&&L===E.length-1?E:E.slice(P,L+1)},getLabelForIndex:function(h,E){var P=this,L=P.chart;return L.getDatasetMeta(E).controller._getValueScaleId()===P.id?P.getRightValue(L.data.datasets[E].data[h]):P._getLabels()[h]},_configure:function(){var h=this,E=h.options.offset,P=h.ticks;Mo.prototype._configure.call(h),h.isHorizontal()||(h._reversePixels=!h._reversePixels),P&&(h._startValue=h.minIndex-(E?.5:0),h._valueRange=Math.max(P.length-(E?0:1),1))},getPixelForValue:function(h,E,P){var X,de,ve,L=this;return!wo(E)&&!wo(P)&&(h=L.chart.data.datasets[P].data[E]),wo(h)||(X=L.isHorizontal()?h.x:h.y),(void 0!==X||void 0!==h&&isNaN(E))&&(de=L._getLabels(),h=Fe.valueOrDefault(X,h),E=-1!==(ve=de.indexOf(h))?ve:E,isNaN(E)&&(E=h)),L.getPixelForDecimal((E-L._startValue)/L._valueRange)},getPixelForTick:function(h){var E=this.ticks;return h<0||h>E.length-1?null:this.getPixelForValue(E[h],h+this.minIndex)},getValueForPixel:function(h){var E=this,P=Math.round(E._startValue+E.getDecimalForPixel(h)*E._valueRange);return Math.min(Math.max(P,0),E.ticks.length-1)},getBasePixel:function(){return this.bottom}});Tl._defaults={position:"bottom"};var gc=Fe.isNullOrUndef;var pa=Mo.extend({getRightValue:function(h){return"string"==typeof h?+h:Mo.prototype.getRightValue.call(this,h)},handleTickRangeOptions:function(){var h=this,P=h.options.ticks;if(P.beginAtZero){var L=Fe.sign(h.min),X=Fe.sign(h.max);L<0&&X<0?h.max=0:L>0&&X>0&&(h.min=0)}var de=void 0!==P.min||void 0!==P.suggestedMin,ve=void 0!==P.max||void 0!==P.suggestedMax;void 0!==P.min?h.min=P.min:void 0!==P.suggestedMin&&(h.min=null===h.min?P.suggestedMin:Math.min(h.min,P.suggestedMin)),void 0!==P.max?h.max=P.max:void 0!==P.suggestedMax&&(h.max=null===h.max?P.suggestedMax:Math.max(h.max,P.suggestedMax)),de!==ve&&h.min>=h.max&&(de?h.max=h.min+1:h.min=h.max-1),h.min===h.max&&(h.max++,P.beginAtZero||h.min--)},getTickLimit:function(){var X,h=this,E=h.options.ticks,P=E.stepSize,L=E.maxTicksLimit;return P?X=Math.ceil(h.max/P)-Math.floor(h.min/P)+1:(X=h._computeTickLimit(),L=L||11),L&&(X=Math.min(L,X)),X},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:Fe.noop,buildTicks:function(){var h=this,P=h.options.ticks,L=h.getTickLimit(),X={maxTicks:L=Math.max(2,L),min:P.min,max:P.max,precision:P.precision,stepSize:Fe.valueOrDefault(P.fixedStepSize,P.stepSize)},de=h.ticks=function En(h,E){var jn,Vn,fr,$r,P=[],X=h.stepSize,de=X||1,ve=h.maxTicks-1,Ye=h.min,xe=h.max,nt=h.precision,St=E.min,Mt=E.max,fn=Fe.niceNum((Mt-St)/ve/de)*de;if(fn<1e-14&&gc(Ye)&&gc(xe))return[St,Mt];($r=Math.ceil(Mt/fn)-Math.floor(St/fn))>ve&&(fn=Fe.niceNum($r*fn/ve/de)*de),X||gc(nt)?jn=Math.pow(10,Fe._decimalPlaces(fn)):(jn=Math.pow(10,nt),fn=Math.ceil(fn*jn)/jn),Vn=Math.floor(St/fn)*fn,fr=Math.ceil(Mt/fn)*fn,X&&(!gc(Ye)&&Fe.almostWhole(Ye/fn,fn/1e3)&&(Vn=Ye),!gc(xe)&&Fe.almostWhole(xe/fn,fn/1e3)&&(fr=xe)),$r=Fe.almostEquals($r=(fr-Vn)/fn,Math.round($r),fn/1e3)?Math.round($r):Math.ceil($r),Vn=Math.round(Vn*jn)/jn,fr=Math.round(fr*jn)/jn,P.push(gc(Ye)?Vn:Ye);for(var Ui=1;Ui<$r;++Ui)P.push(Math.round((Vn+Ui*fn)*jn)/jn);return P.push(gc(xe)?fr:xe),P}(X,h);h.handleDirectionalChanges(),h.max=Fe.max(de),h.min=Fe.min(de),P.reverse?(de.reverse(),h.start=h.max,h.end=h.min):(h.start=h.min,h.end=h.max)},convertTicksToLabels:function(){var h=this;h.ticksAsNumbers=h.ticks.slice(),h.zeroLineIndex=h.ticks.indexOf(0),Mo.prototype.convertTicksToLabels.call(h)},_configure:function(){var X,h=this,E=h.getTicks(),P=h.min,L=h.max;Mo.prototype._configure.call(h),h.options.offset&&E.length&&(P-=X=(L-P)/Math.max(E.length-1,1)/2,L+=X),h._startValue=P,h._endValue=L,h._valueRange=L-P}}),rd={position:"left",ticks:{callback:Pr.formatters.linear}};function ht(h,E,P,L){var St,Mt,X=h.options,ve=function ge(h,E,P){var L=[P.type,void 0===E&&void 0===P.stack?P.index:"",P.stack].join(".");return void 0===h[L]&&(h[L]={pos:[],neg:[]}),h[L]}(E,X.stacked,P),Ye=ve.pos,xe=ve.neg,nt=L.length;for(St=0;St<nt;++St)Mt=h._parseValue(L[St]),!(isNaN(Mt.min)||isNaN(Mt.max)||P.data[St].hidden)&&(Ye[St]=Ye[St]||0,xe[St]=xe[St]||0,X.relativePoints?Ye[St]=100:Mt.min<0||Mt.max<0?xe[St]+=Mt.min:Ye[St]+=Mt.max)}function Ot(h,E,P){var X,de,L=P.length;for(X=0;X<L;++X)de=h._parseValue(P[X]),!(isNaN(de.min)||isNaN(de.max)||E.data[X].hidden)&&(h.min=Math.min(h.min,de.min),h.max=Math.max(h.max,de.max))}var sn=pa.extend({determineDataLimits:function(){var xe,nt,St,Mt,h=this,E=h.options,L=h.chart.data.datasets,X=h._getMatchingVisibleMetas(),de=E.stacked,ve={},Ye=X.length;if(h.min=Number.POSITIVE_INFINITY,h.max=Number.NEGATIVE_INFINITY,void 0===de)for(xe=0;!de&&xe<Ye;++xe)de=void 0!==(nt=X[xe]).stack;for(xe=0;xe<Ye;++xe)St=L[(nt=X[xe]).index].data,de?ht(h,ve,nt,St):Ot(h,nt,St);Fe.each(ve,function(fn){Mt=fn.pos.concat(fn.neg),h.min=Math.min(h.min,Fe.min(Mt)),h.max=Math.max(h.max,Fe.max(Mt))}),h.min=Fe.isFinite(h.min)&&!isNaN(h.min)?h.min:0,h.max=Fe.isFinite(h.max)&&!isNaN(h.max)?h.max:1,h.handleTickRangeOptions()},_computeTickLimit:function(){var E,h=this;return h.isHorizontal()?Math.ceil(h.width/40):(E=Fe.options._parseFont(h.options.ticks),Math.ceil(h.height/E.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(h,E){return this._getScaleLabel(this.chart.data.datasets[E].data[h])},getPixelForValue:function(h){var E=this;return E.getPixelForDecimal((+E.getRightValue(h)-E._startValue)/E._valueRange)},getValueForPixel:function(h){return this._startValue+this.getDecimalForPixel(h)*this._valueRange},getPixelForTick:function(h){var E=this.ticksAsNumbers;return h<0||h>E.length-1?null:this.getPixelForValue(E[h])}});sn._defaults=rd;var gr=Fe.valueOrDefault,gi=Fe.math.log10;var Ca={position:"left",ticks:{callback:Pr.formatters.logarithmic}};function ms(h,E){return Fe.isFinite(h)&&h>=0?h:E}var ha=Mo.extend({determineDataLimits:function(){var ve,Ye,xe,nt,St,Mt,h=this,E=h.options,P=h.chart,L=P.data.datasets,X=h.isHorizontal();function de($r){return X?$r.xAxisID===h.id:$r.yAxisID===h.id}h.min=Number.POSITIVE_INFINITY,h.max=Number.NEGATIVE_INFINITY,h.minNotZero=Number.POSITIVE_INFINITY;var fn=E.stacked;if(void 0===fn)for(ve=0;ve<L.length;ve++)if(Ye=P.getDatasetMeta(ve),P.isDatasetVisible(ve)&&de(Ye)&&void 0!==Ye.stack){fn=!0;break}if(E.stacked||fn){var jn={};for(ve=0;ve<L.length;ve++){var Vn=[(Ye=P.getDatasetMeta(ve)).type,void 0===E.stacked&&void 0===Ye.stack?ve:"",Ye.stack].join(".");if(P.isDatasetVisible(ve)&&de(Ye))for(void 0===jn[Vn]&&(jn[Vn]=[]),St=0,Mt=(nt=L[ve].data).length;St<Mt;St++){var fr=jn[Vn];xe=h._parseValue(nt[St]),!(isNaN(xe.min)||isNaN(xe.max)||Ye.data[St].hidden||xe.min<0||xe.max<0)&&(fr[St]=fr[St]||0,fr[St]+=xe.max)}}Fe.each(jn,function($r){if($r.length>0){var Ui=Fe.min($r),is=Fe.max($r);h.min=Math.min(h.min,Ui),h.max=Math.max(h.max,is)}})}else for(ve=0;ve<L.length;ve++)if(Ye=P.getDatasetMeta(ve),P.isDatasetVisible(ve)&&de(Ye))for(St=0,Mt=(nt=L[ve].data).length;St<Mt;St++)xe=h._parseValue(nt[St]),!(isNaN(xe.min)||isNaN(xe.max)||Ye.data[St].hidden||xe.min<0||xe.max<0)&&(h.min=Math.min(xe.min,h.min),h.max=Math.max(xe.max,h.max),0!==xe.min&&(h.minNotZero=Math.min(xe.min,h.minNotZero)));h.min=Fe.isFinite(h.min)?h.min:null,h.max=Fe.isFinite(h.max)?h.max:null,h.minNotZero=Fe.isFinite(h.minNotZero)?h.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var h=this,E=h.options.ticks;h.min=ms(E.min,h.min),h.max=ms(E.max,h.max),h.min===h.max&&(0!==h.min&&null!==h.min?(h.min=Math.pow(10,Math.floor(gi(h.min))-1),h.max=Math.pow(10,Math.floor(gi(h.max))+1)):(h.min=1,h.max=10)),null===h.min&&(h.min=Math.pow(10,Math.floor(gi(h.max))-1)),null===h.max&&(h.max=0!==h.min?Math.pow(10,Math.floor(gi(h.min))+1):10),null===h.minNotZero&&(h.minNotZero=h.min>0?h.min:h.max<1?Math.pow(10,Math.floor(gi(h.max))):1)},buildTicks:function(){var h=this,E=h.options.ticks,P=!h.isHorizontal(),L={min:ms(E.min),max:ms(E.max)},X=h.ticks=function Lo(h,E){var ve,Ye,P=[],L=gr(h.min,Math.pow(10,Math.floor(gi(E.min)))),X=Math.floor(gi(E.max)),de=Math.ceil(E.max/Math.pow(10,X));0===L?(ve=Math.floor(gi(E.minNotZero)),Ye=Math.floor(E.minNotZero/Math.pow(10,ve)),P.push(L),L=Ye*Math.pow(10,ve)):(ve=Math.floor(gi(L)),Ye=Math.floor(L/Math.pow(10,ve)));var xe=ve<0?Math.pow(10,Math.abs(ve)):1;do{P.push(L),10==++Ye&&(Ye=1,xe=++ve>=0?1:xe),L=Math.round(Ye*Math.pow(10,ve)*xe)/xe}while(ve<X||ve===X&&Ye<de);var nt=gr(h.max,L);return P.push(nt),P}(L,h);h.max=Fe.max(X),h.min=Fe.min(X),E.reverse?(P=!P,h.start=h.max,h.end=h.min):(h.start=h.min,h.end=h.max),P&&X.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),Mo.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(h,E){return this._getScaleLabel(this.chart.data.datasets[E].data[h])},getPixelForTick:function(h){var E=this.tickValues;return h<0||h>E.length-1?null:this.getPixelForValue(E[h])},_getFirstTickValue:function(h){var E=Math.floor(gi(h));return Math.floor(h/Math.pow(10,E))*Math.pow(10,E)},_configure:function(){var h=this,E=h.min,P=0;Mo.prototype._configure.call(h),0===E&&(E=h._getFirstTickValue(h.minNotZero),P=gr(h.options.ticks.fontSize,vr.global.defaultFontSize)/h._length),h._startValue=gi(E),h._valueOffset=P,h._valueRange=(gi(h.max)-gi(E))/(1-P)},getPixelForValue:function(h){var E=this,P=0;return(h=+E.getRightValue(h))>E.min&&h>0&&(P=(gi(h)-E._startValue)/E._valueRange+E._valueOffset),E.getPixelForDecimal(P)},getValueForPixel:function(h){var E=this,P=E.getDecimalForPixel(h);return 0===P&&0===E.min?0:Math.pow(10,E._startValue+(P-E._valueOffset)*E._valueRange)}});ha._defaults=Ca;var Nu=Fe.valueOrDefault,cc=Fe.valueAtIndexOrDefault,ka=Fe.options.resolve,rl={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Pr.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(h){return h}}};function vc(h){var E=h.ticks;return E.display&&h.display?Nu(E.fontSize,vr.global.defaultFontSize)+2*E.backdropPaddingY:0}function yc(h,E,P){return Fe.isArray(P)?{w:Fe.longestText(h,h.font,P),h:P.length*E}:{w:h.measureText(P).width,h:E}}function ju(h,E,P,L,X){return h===L||h===X?{start:E-P/2,end:E+P/2}:h<L||h>X?{start:E-P,end:E}:{start:E,end:E+P}}function tc(h){return 0===h||180===h?"center":h<180?"left":"right"}function gd(h,E,P,L){var de,ve,X=P.y+L/2;if(Fe.isArray(E))for(de=0,ve=E.length;de<ve;++de)h.fillText(E[de],P.x,X),X+=L;else h.fillText(E,P.x,X)}function Fc(h,E,P){90===h||270===h?P.y-=E.h/2:(h>270||h<90)&&(P.y-=E.h)}function ll(h){return Fe.isNumber(h)?h:0}var Ll=pa.extend({setDimensions:function(){var h=this;h.width=h.maxWidth,h.height=h.maxHeight,h.paddingTop=vc(h.options)/2,h.xCenter=Math.floor(h.width/2),h.yCenter=Math.floor((h.height-h.paddingTop)/2),h.drawingArea=Math.min(h.height-h.paddingTop,h.width)/2},determineDataLimits:function(){var h=this,E=h.chart,P=Number.POSITIVE_INFINITY,L=Number.NEGATIVE_INFINITY;Fe.each(E.data.datasets,function(X,de){if(E.isDatasetVisible(de)){var ve=E.getDatasetMeta(de);Fe.each(X.data,function(Ye,xe){var nt=+h.getRightValue(Ye);isNaN(nt)||ve.data[xe].hidden||(P=Math.min(nt,P),L=Math.max(nt,L))})}}),h.min=P===Number.POSITIVE_INFINITY?0:P,h.max=L===Number.NEGATIVE_INFINITY?0:L,h.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/vc(this.options))},convertTicksToLabels:function(){var h=this;pa.prototype.convertTicksToLabels.call(h),h.pointLabels=h.chart.data.labels.map(function(){var E=Fe.callback(h.options.pointLabels.callback,arguments,h);return E||0===E?E:""})},getLabelForIndex:function(h,E){return+this.getRightValue(this.chart.data.datasets[E].data[h])},fit:function(){var h=this,E=h.options;E.display&&E.pointLabels.display?function Ul(h){var X,de,ve,E=Fe.options._parseFont(h.options.pointLabels),P={l:0,r:h.width,t:0,b:h.height-h.paddingTop},L={};h.ctx.font=E.string,h._pointLabelSizes=[];var Ye=h.chart.data.labels.length;for(X=0;X<Ye;X++){ve=h.getPointPosition(X,h.drawingArea+5),de=yc(h.ctx,E.lineHeight,h.pointLabels[X]),h._pointLabelSizes[X]=de;var xe=h.getIndexAngle(X),nt=Fe.toDegrees(xe)%360,St=ju(nt,ve.x,de.w,0,180),Mt=ju(nt,ve.y,de.h,90,270);St.start<P.l&&(P.l=St.start,L.l=xe),St.end>P.r&&(P.r=St.end,L.r=xe),Mt.start<P.t&&(P.t=Mt.start,L.t=xe),Mt.end>P.b&&(P.b=Mt.end,L.b=xe)}h.setReductions(h.drawingArea,P,L)}(h):h.setCenterPoint(0,0,0,0)},setReductions:function(h,E,P){var L=this,X=E.l/Math.sin(P.l),de=Math.max(E.r-L.width,0)/Math.sin(P.r),ve=-E.t/Math.cos(P.t),Ye=-Math.max(E.b-(L.height-L.paddingTop),0)/Math.cos(P.b);X=ll(X),de=ll(de),ve=ll(ve),Ye=ll(Ye),L.drawingArea=Math.min(Math.floor(h-(X+de)/2),Math.floor(h-(ve+Ye)/2)),L.setCenterPoint(X,de,ve,Ye)},setCenterPoint:function(h,E,P,L){var X=this,Ye=P+X.drawingArea,xe=X.height-X.paddingTop-L-X.drawingArea;X.xCenter=Math.floor((h+X.drawingArea+(X.width-E-X.drawingArea))/2+X.left),X.yCenter=Math.floor((Ye+xe)/2+X.top+X.paddingTop)},getIndexAngle:function(h){var E=this.chart,de=(h*(360/E.data.labels.length)+((E.options||{}).startAngle||0))%360;return(de<0?de+360:de)*Math.PI*2/360},getDistanceFromCenterForValue:function(h){var E=this;if(Fe.isNullOrUndef(h))return NaN;var P=E.drawingArea/(E.max-E.min);return E.options.ticks.reverse?(E.max-h)*P:(h-E.min)*P},getPointPosition:function(h,E){var P=this,L=P.getIndexAngle(h)-Math.PI/2;return{x:Math.cos(L)*E+P.xCenter,y:Math.sin(L)*E+P.yCenter}},getPointPositionForValue:function(h,E){return this.getPointPosition(h,this.getDistanceFromCenterForValue(E))},getBasePosition:function(h){var E=this,P=E.min,L=E.max;return E.getPointPositionForValue(h||0,E.beginAtZero?0:P<0&&L<0?L:P>0&&L>0?P:0)},_drawGrid:function(){var Ye,xe,nt,h=this,E=h.ctx,P=h.options,L=P.gridLines,X=P.angleLines,de=Nu(X.lineWidth,L.lineWidth),ve=Nu(X.color,L.color);if(P.pointLabels.display&&function cu(h){var E=h.ctx,P=h.options,L=P.pointLabels,X=vc(P),de=h.getDistanceFromCenterForValue(P.ticks.reverse?h.min:h.max),ve=Fe.options._parseFont(L);E.save(),E.font=ve.string,E.textBaseline="middle";for(var Ye=h.chart.data.labels.length-1;Ye>=0;Ye--){var nt=h.getPointPosition(Ye,de+(0===Ye?X/2:0)+5),St=cc(L.fontColor,Ye,vr.global.defaultFontColor);E.fillStyle=St;var Mt=h.getIndexAngle(Ye),fn=Fe.toDegrees(Mt);E.textAlign=tc(fn),Fc(fn,h._pointLabelSizes[Ye],nt),gd(E,h.pointLabels[Ye],nt,ve.lineHeight)}E.restore()}(h),L.display&&Fe.each(h.ticks,function(St,Mt){0!==Mt&&(xe=h.getDistanceFromCenterForValue(h.ticksAsNumbers[Mt]),function Oa(h,E,P,L){var nt,X=h.ctx,de=E.circular,ve=h.chart.data.labels.length,Ye=cc(E.color,L-1),xe=cc(E.lineWidth,L-1);if((de||ve)&&Ye&&xe){if(X.save(),X.strokeStyle=Ye,X.lineWidth=xe,X.setLineDash&&(X.setLineDash(E.borderDash||[]),X.lineDashOffset=E.borderDashOffset||0),X.beginPath(),de)X.arc(h.xCenter,h.yCenter,P,0,2*Math.PI);else{nt=h.getPointPosition(0,P),X.moveTo(nt.x,nt.y);for(var St=1;St<ve;St++)nt=h.getPointPosition(St,P),X.lineTo(nt.x,nt.y)}X.closePath(),X.stroke(),X.restore()}}(h,L,xe,Mt))}),X.display&&de&&ve){for(E.save(),E.lineWidth=de,E.strokeStyle=ve,E.setLineDash&&(E.setLineDash(ka([X.borderDash,L.borderDash,[]])),E.lineDashOffset=ka([X.borderDashOffset,L.borderDashOffset,0])),Ye=h.chart.data.labels.length-1;Ye>=0;Ye--)xe=h.getDistanceFromCenterForValue(P.ticks.reverse?h.min:h.max),nt=h.getPointPosition(Ye,xe),E.beginPath(),E.moveTo(h.xCenter,h.yCenter),E.lineTo(nt.x,nt.y),E.stroke();E.restore()}},_drawLabels:function(){var h=this,E=h.ctx,L=h.options.ticks;if(L.display){var Ye,xe,X=h.getIndexAngle(0),de=Fe.options._parseFont(L),ve=Nu(L.fontColor,vr.global.defaultFontColor);E.save(),E.font=de.string,E.translate(h.xCenter,h.yCenter),E.rotate(X),E.textAlign="center",E.textBaseline="middle",Fe.each(h.ticks,function(nt,St){0===St&&!L.reverse||(Ye=h.getDistanceFromCenterForValue(h.ticksAsNumbers[St]),L.showLabelBackdrop&&(xe=E.measureText(nt).width,E.fillStyle=L.backdropColor,E.fillRect(-xe/2-L.backdropPaddingX,-Ye-de.size/2-L.backdropPaddingY,xe+2*L.backdropPaddingX,de.size+2*L.backdropPaddingY)),E.fillStyle=ve,E.fillText(nt,0,-Ye))}),E.restore()}},_drawTitle:Fe.noop});Ll._defaults=rl;var gf=Fe._deprecated,zd=Fe.options.resolve,id=Fe.valueOrDefault,Al=Number.MIN_SAFE_INTEGER||-9007199254740991,kl=Number.MAX_SAFE_INTEGER||9007199254740991,Gu={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ul=Object.keys(Gu);function Cu(h,E){return h-E}function Ec(h){return Fe.valueOrDefault(h.time.min,h.ticks.min)}function Iu(h){return Fe.valueOrDefault(h.time.max,h.ticks.max)}function xf(h,E,P,L){var X=function cl(h,E,P){for(var de,ve,Ye,L=0,X=h.length-1;L>=0&&L<=X;){if(Ye=h[de=L+X>>1],!(ve=h[de-1]||null))return{lo:null,hi:Ye};if(Ye[E]<P)L=de+1;else{if(!(ve[E]>P))return{lo:ve,hi:Ye};X=de-1}}return{lo:Ye,hi:null}}(h,E,P),de=X.lo?X.hi?X.lo:h[h.length-2]:h[0],ve=X.lo?X.hi?X.hi:h[h.length-1]:h[1],Ye=ve[E]-de[E];return de[L]+(ve[L]-de[L])*(Ye?(P-de[E])/Ye:0)}function Bc(h,E){var P=h._adapter,L=h.options.time,X=L.parser,de=X||L.format,ve=E;return"function"==typeof X&&(ve=X(ve)),Fe.isFinite(ve)||(ve="string"==typeof de?P.parse(ve,de):P.parse(ve)),null!==ve?+ve:(!X&&"function"==typeof de&&(ve=de(E),Fe.isFinite(ve)||(ve=P.parse(ve))),ve)}function vd(h,E){if(Fe.isNullOrUndef(E))return null;var P=h.options.time,L=Bc(h,h.getRightValue(E));return null===L||P.round&&(L=+h._adapter.startOf(L,P.round)),L}function dc(h,E,P,L){var de,ve,X=ul.length;for(de=ul.indexOf(h);de<X-1;++de)if((ve=Gu[ul[de]]).common&&Math.ceil((P-E)/((ve.steps?ve.steps:kl)*ve.size))<=L)return ul[de];return ul[X-1]}function fc(h,E,P){var ve,Ye,L=[],X={},de=E.length;for(ve=0;ve<de;++ve)X[Ye=E[ve]]=ve,L.push({value:Ye,major:!1});return 0!==de&&P?function Vu(h,E,P,L){var Ye,xe,X=h._adapter,de=+X.startOf(E[0].value,L),ve=E[E.length-1].value;for(Ye=de;Ye<=ve;Ye=+X.add(Ye,1,L))(xe=P[Ye])>=0&&(E[xe].major=!0);return E}(h,L,X,P):L}var Rf=Mo.extend({initialize:function(){this.mergeTicksOptions(),Mo.prototype.initialize.call(this)},update:function(){var h=this,E=h.options,P=E.time||(E.time={}),L=h._adapter=new Vi._date(E.adapters.date);return gf("time scale",P.format,"time.format","time.parser"),gf("time scale",P.min,"time.min","ticks.min"),gf("time scale",P.max,"time.max","ticks.max"),Fe.mergeIf(P.displayFormats,L.formats()),Mo.prototype.update.apply(h,arguments)},getRightValue:function(h){return h&&void 0!==h.t&&(h=h.t),Mo.prototype.getRightValue.call(this,h)},determineDataLimits:function(){var St,Mt,fn,jn,Vn,fr,$r,h=this,E=h.chart,P=h._adapter,L=h.options,X=L.time.unit||"day",de=kl,ve=Al,Ye=[],xe=[],nt=[],Ui=h._getLabels();for(St=0,fn=Ui.length;St<fn;++St)nt.push(vd(h,Ui[St]));for(St=0,fn=(E.data.datasets||[]).length;St<fn;++St)if(E.isDatasetVisible(St))if(Fe.isObject((Vn=E.data.datasets[St].data)[0]))for(xe[St]=[],Mt=0,jn=Vn.length;Mt<jn;++Mt)fr=vd(h,Vn[Mt]),Ye.push(fr),xe[St][Mt]=fr;else xe[St]=nt.slice(0),$r||(Ye=Ye.concat(nt),$r=!0);else xe[St]=[];nt.length&&(de=Math.min(de,nt[0]),ve=Math.max(ve,nt[nt.length-1])),Ye.length&&(Ye=fn>1?function cn(h){var L,X,de,E={},P=[];for(L=0,X=h.length;L<X;++L)E[de=h[L]]||(E[de]=!0,P.push(de));return P}(Ye).sort(Cu):Ye.sort(Cu),de=Math.min(de,Ye[0]),ve=Math.max(ve,Ye[Ye.length-1])),de=vd(h,Ec(L))||de,ve=vd(h,Iu(L))||ve,de=de===kl?+P.startOf(Date.now(),X):de,ve=ve===Al?+P.endOf(Date.now(),X)+1:ve,h.min=Math.min(de,ve),h.max=Math.max(de+1,ve),h._table=[],h._timestamps={data:Ye,datasets:xe,labels:nt}},buildTicks:function(){var Mt,fn,jn,h=this,E=h.min,P=h.max,L=h.options,X=L.ticks,de=L.time,ve=h._timestamps,Ye=[],xe=h.getLabelCapacity(E),nt=X.source,St=L.distribution;for(ve="data"===nt||"auto"===nt&&"series"===St?ve.data:"labels"===nt?ve.labels:function vf(h,E,P,L){var fn,X=h._adapter,de=h.options,ve=de.time,Ye=ve.unit||dc(ve.minUnit,E,P,L),xe=zd([ve.stepSize,ve.unitStepSize,1]),nt="week"===Ye&&ve.isoWeekday,St=E,Mt=[];if(nt&&(St=+X.startOf(St,"isoWeek",nt)),St=+X.startOf(St,nt?"day":Ye),X.diff(P,E,Ye)>1e5*xe)throw E+" and "+P+" are too far apart with stepSize of "+xe+" "+Ye;for(fn=St;fn<P;fn=+X.add(fn,xe,Ye))Mt.push(fn);return(fn===P||"ticks"===de.bounds)&&Mt.push(fn),Mt}(h,E,P,xe),"ticks"===L.bounds&&ve.length&&(E=ve[0],P=ve[ve.length-1]),E=vd(h,Ec(L))||E,P=vd(h,Iu(L))||P,Mt=0,fn=ve.length;Mt<fn;++Mt)(jn=ve[Mt])>=E&&jn<=P&&Ye.push(jn);return h.min=E,h.max=P,h._unit=de.unit||(X.autoSkip?dc(de.minUnit,h.min,h.max,xe):function yd(h,E,P,L,X){var de,ve;for(de=ul.length-1;de>=ul.indexOf(P);de--)if(Gu[ve=ul[de]].common&&h._adapter.diff(X,L,ve)>=E-1)return ve;return ul[P?ul.indexOf(P):0]}(h,Ye.length,de.minUnit,h.min,h.max)),h._majorUnit=X.major.enabled&&"year"!==h._unit?function $p(h){for(var E=ul.indexOf(h)+1,P=ul.length;E<P;++E)if(Gu[ul[E]].common)return ul[E]}(h._unit):void 0,h._table=function qa(h,E,P,L){if("linear"===L||!h.length)return[{time:E,pos:0},{time:P,pos:1}];var ve,Ye,xe,nt,St,X=[],de=[E];for(ve=0,Ye=h.length;ve<Ye;++ve)(nt=h[ve])>E&&nt<P&&de.push(nt);for(de.push(P),ve=0,Ye=de.length;ve<Ye;++ve)St=de[ve+1],nt=de[ve],(void 0===(xe=de[ve-1])||void 0===St||Math.round((St+xe)/2)!==nt)&&X.push({time:nt,pos:ve/(Ye-1)});return X}(h._timestamps.data,E,P,St),h._offsets=function ap(h,E,P,L,X){var Ye,xe,de=0,ve=0;return X.offset&&E.length&&(Ye=xf(h,"time",E[0],"pos"),de=1===E.length?1-Ye:(xf(h,"time",E[1],"pos")-Ye)/2,xe=xf(h,"time",E[E.length-1],"pos"),ve=1===E.length?xe:(xe-xf(h,"time",E[E.length-2],"pos"))/2),{start:de,end:ve,factor:1/(de+1+ve)}}(h._table,Ye,0,0,L),X.reverse&&Ye.reverse(),fc(h,Ye,h._majorUnit)},getLabelForIndex:function(h,E){var P=this,L=P._adapter,X=P.chart.data,de=P.options.time,ve=X.labels&&h<X.labels.length?X.labels[h]:"",Ye=X.datasets[E].data[h];return Fe.isObject(Ye)&&(ve=P.getRightValue(Ye)),de.tooltipFormat?L.format(Bc(P,ve),de.tooltipFormat):"string"==typeof ve?ve:L.format(Bc(P,ve),de.displayFormats.datetime)},tickFormatFunction:function(h,E,P,L){var X=this,ve=X.options,Ye=ve.time.displayFormats,nt=X._majorUnit,St=Ye[nt],Mt=P[E],fn=ve.ticks,jn=nt&&St&&Mt&&Mt.major,Vn=X._adapter.format(h,L||(jn?St:Ye[X._unit])),fr=jn?fn.major:fn.minor,$r=zd([fr.callback,fr.userCallback,fn.callback,fn.userCallback]);return $r?$r(Vn,E,P):Vn},convertTicksToLabels:function(h){var P,L,E=[];for(P=0,L=h.length;P<L;++P)E.push(this.tickFormatFunction(h[P].value,P,h));return E},getPixelForOffset:function(h){var E=this,P=E._offsets,L=xf(E._table,"time",h,"pos");return E.getPixelForDecimal((P.start+L)*P.factor)},getPixelForValue:function(h,E,P){var L=this,X=null;if(void 0!==E&&void 0!==P&&(X=L._timestamps.datasets[P][E]),null===X&&(X=vd(L,h)),null!==X)return L.getPixelForOffset(X)},getPixelForTick:function(h){var E=this.getTicks();return h>=0&&h<E.length?this.getPixelForOffset(E[h].value):null},getValueForPixel:function(h){var E=this,P=E._offsets,L=E.getDecimalForPixel(h)/P.factor-P.end,X=xf(E._table,"pos",L,"time");return E._adapter._create(X)},_getLabelSize:function(h){var E=this,P=E.options.ticks,L=E.ctx.measureText(h).width,X=Fe.toRadians(E.isHorizontal()?P.maxRotation:P.minRotation),de=Math.cos(X),ve=Math.sin(X),Ye=id(P.fontSize,vr.global.defaultFontSize);return{w:L*de+Ye*ve,h:L*ve+Ye*de}},getLabelWidth:function(h){return this._getLabelSize(h).w},getLabelCapacity:function(h){var E=this,P=E.options.time,L=P.displayFormats,X=L[P.unit]||L.millisecond,de=E.tickFormatFunction(h,0,fc(E,[h],E._majorUnit),X),ve=E._getLabelSize(de),Ye=Math.floor(E.isHorizontal()?E.width/ve.w:E.height/ve.h);return E.options.offset&&Ye--,Ye>0?Ye:1}});Rf._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var Lc={category:Tl,linear:sn,logarithmic:ha,radialLinear:Ll,time:Rf},Fu={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};Vi._date.override("function"==typeof r?{_id:"moment",formats:function(){return Fu},parse:function(h,E){return"string"==typeof h&&"string"==typeof E?h=r(h,E):h instanceof r||(h=r(h)),h.isValid()?h.valueOf():null},format:function(h,E){return r(h).format(E)},add:function(h,E,P){return r(h).add(E,P).valueOf()},diff:function(h,E,P){return r(h).diff(r(E),P)},startOf:function(h,E,P){return h=r(h),"isoWeek"===E?h.isoWeekday(P).valueOf():h.startOf(E).valueOf()},endOf:function(h,E){return r(h).endOf(E).valueOf()},_create:function(h){return r(h)}}:{}),vr._set("global",{plugins:{filler:{propagate:!0}}});var od={dataset:function(h){var E=h.fill,P=h.chart,L=P.getDatasetMeta(E),de=L&&P.isDatasetVisible(E)&&L.dataset._children||[],ve=de.length||0;return ve?function(Ye,xe){return xe<ve&&de[xe]._view||null}:null},boundary:function(h){var E=h.boundary,P=E?E.x:null,L=E?E.y:null;return Fe.isArray(E)?function(X,de){return E[de]}:function(X){return{x:null===P?X.x:P,y:null===L?X.y:L}}}};function nc(h,E,P){var de,L=h._model||{},X=L.fill;if(void 0===X&&(X=!!L.backgroundColor),!1===X||null===X)return!1;if(!0===X)return"origin";if(de=parseFloat(X,10),isFinite(de)&&Math.floor(de)===de)return("-"===X[0]||"+"===X[0])&&(de=E+de),!(de===E||de<0||de>=P)&&de;switch(X){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return X;default:return!1}}function sd(h){return(h.el._scale||{}).getPointPositionForValue?function Wc(h){var ve,Ye,xe,nt,St,E=h.el._scale,P=E.options,L=E.chart.data.labels.length,X=h.fill,de=[];if(!L)return null;for(Ye=P.ticks.reverse?E.min:E.max,xe=E.getPointPositionForValue(0,ve=P.ticks.reverse?E.max:E.min),nt=0;nt<L;++nt)St="start"===X||"end"===X?E.getPointPositionForValue(nt,"start"===X?ve:Ye):E.getBasePosition(nt),P.gridLines.circular&&(St.cx=xe.x,St.cy=xe.y,St.angle=E.getIndexAngle(nt)-Math.PI/2),de.push(St);return de}(h):function Aa(h){var de,E=h.el._model||{},P=h.el._scale||{},L=h.fill,X=null;if(isFinite(L))return null;if("start"===L?X=void 0===E.scaleBottom?P.bottom:E.scaleBottom:"end"===L?X=void 0===E.scaleTop?P.top:E.scaleTop:void 0!==E.scaleZero?X=E.scaleZero:P.getBasePixel&&(X=P.getBasePixel()),null!=X){if(void 0!==X.x&&void 0!==X.y)return X;if(Fe.isFinite(X))return{x:(de=P.isHorizontal())?X:null,y:de?null:X}}return null}(h)}function lp(h,E,P){var ve,X=h[E].fill,de=[E];if(!P)return X;for(;!1!==X&&-1===de.indexOf(X);){if(!isFinite(X))return X;if(!(ve=h[X]))return!1;if(ve.visible)return X;de.push(X),X=ve.fill}return!1}function $d(h){var E=h.fill,P="dataset";return!1===E?null:(isFinite(E)||(P="boundary"),od[P](h))}function vo(h){return h&&!h.skip}function pu(h,E,P,L,X){var de,ve,Ye,xe;if(L&&X){for(h.moveTo(E[0].x,E[0].y),de=1;de<L;++de)Fe.canvas.lineTo(h,E[de-1],E[de]);if(void 0!==P[0].angle){for(ve=P[0].cx,Ye=P[0].cy,xe=Math.sqrt(Math.pow(P[0].x-ve,2)+Math.pow(P[0].y-Ye,2)),de=X-1;de>0;--de)h.arc(ve,Ye,xe,P[de].angle,P[de-1].angle,!0);return}for(h.lineTo(P[X-1].x,P[X-1].y),de=X-1;de>0;--de)Fe.canvas.lineTo(h,P[de],P[de-1],!0)}}function $l(h,E,P,L,X,de){var fn,jn,Vn,fr,$r,Ui,is,yo,ve=E.length,Ye=L.spanGaps,xe=[],nt=[],St=0,Mt=0;for(h.beginPath(),fn=0,jn=ve;fn<jn;++fn)$r=P(fr=E[Vn=fn%ve]._view,Vn,L),Ui=vo(fr),is=vo($r),de&&void 0===yo&&Ui&&(jn=ve+(yo=fn+1)),Ui&&is?(St=xe.push(fr),Mt=nt.push($r)):St&&Mt&&(Ye?(Ui&&xe.push(fr),is&&nt.push($r)):(pu(h,xe,nt,St,Mt),St=Mt=0,xe=[],nt=[]));pu(h,xe,nt,St,Mt),h.closePath(),h.fillStyle=X,h.fill()}var Ac={id:"filler",afterDatasetsUpdate:function(h,E){var de,ve,Ye,xe,P=(h.data.datasets||[]).length,L=E.propagate,X=[];for(ve=0;ve<P;++ve)xe=null,(Ye=(de=h.getDatasetMeta(ve)).dataset)&&Ye._model&&Ye instanceof go.Line&&(xe={visible:h.isDatasetVisible(ve),fill:nc(Ye,ve,P),chart:h,el:Ye}),de.$filler=xe,X.push(xe);for(ve=0;ve<P;++ve)(xe=X[ve])&&(xe.fill=lp(X,ve,L),xe.boundary=sd(xe),xe.mapper=$d(xe))},beforeDatasetsDraw:function(h){var L,X,de,ve,Ye,xe,nt,E=h._getSortedVisibleDatasetMetas(),P=h.ctx;for(X=E.length-1;X>=0;--X)(L=E[X].$filler)&&L.visible&&(Ye=(de=L.el)._children||[],nt=(ve=de._view).backgroundColor||vr.global.defaultColor,(xe=L.mapper)&&nt&&Ye.length&&(Fe.canvas.clipArea(P,h.chartArea),$l(P,Ye,xe,ve,nt,de._loop),Fe.canvas.unclipArea(P)))}},ga=Fe.rtl.getRtlAdapter,Dc=Fe.noop,Lu=Fe.valueOrDefault;function bc(h,E){return h.usePointStyle&&h.boxWidth>E?E:h.boxWidth}vr._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(h,E){var P=E.datasetIndex,L=this.chart,X=L.getDatasetMeta(P);X.hidden=null===X.hidden?!L.data.datasets[P].hidden:null,L.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(h){var E=h.data.datasets,P=h.options.legend||{},L=P.labels&&P.labels.usePointStyle;return h._getSortedDatasetMetas().map(function(X){var de=X.controller.getStyle(L?0:void 0);return{text:E[X.index].label,fillStyle:de.backgroundColor,hidden:!h.isDatasetVisible(X.index),lineCap:de.borderCapStyle,lineDash:de.borderDash,lineDashOffset:de.borderDashOffset,lineJoin:de.borderJoinStyle,lineWidth:de.borderWidth,strokeStyle:de.borderColor,pointStyle:de.pointStyle,rotation:de.rotation,datasetIndex:X.index}},this)}}},legendCallback:function(h){var L,X,de,E=document.createElement("ul"),P=h.data.datasets;for(E.setAttribute("class",h.id+"-legend"),L=0,X=P.length;L<X;L++)(de=E.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=P[L].backgroundColor,P[L].label&&de.appendChild(document.createTextNode(P[L].label));return E.outerHTML}});var rc=yt.extend({initialize:function(h){var E=this;Fe.extend(E,h),E.legendHitBoxes=[],E._hoveredItem=null,E.doughnutMode=!1},beforeUpdate:Dc,update:function(h,E,P){var L=this;return L.beforeUpdate(),L.maxWidth=h,L.maxHeight=E,L.margins=P,L.beforeSetDimensions(),L.setDimensions(),L.afterSetDimensions(),L.beforeBuildLabels(),L.buildLabels(),L.afterBuildLabels(),L.beforeFit(),L.fit(),L.afterFit(),L.afterUpdate(),L.minSize},afterUpdate:Dc,beforeSetDimensions:Dc,setDimensions:function(){var h=this;h.isHorizontal()?(h.width=h.maxWidth,h.left=0,h.right=h.width):(h.height=h.maxHeight,h.top=0,h.bottom=h.height),h.paddingLeft=0,h.paddingTop=0,h.paddingRight=0,h.paddingBottom=0,h.minSize={width:0,height:0}},afterSetDimensions:Dc,beforeBuildLabels:Dc,buildLabels:function(){var h=this,E=h.options.labels||{},P=Fe.callback(E.generateLabels,[h.chart],h)||[];E.filter&&(P=P.filter(function(L){return E.filter(L,h.chart.data)})),h.options.reverse&&P.reverse(),h.legendItems=P},afterBuildLabels:Dc,beforeFit:Dc,fit:function(){var h=this,E=h.options,P=E.labels,L=E.display,X=h.ctx,de=Fe.options._parseFont(P),ve=de.size,Ye=h.legendHitBoxes=[],xe=h.minSize,nt=h.isHorizontal();if(nt?(xe.width=h.maxWidth,xe.height=L?10:0):(xe.width=L?10:0,xe.height=h.maxHeight),L){if(X.font=de.string,nt){var St=h.lineWidths=[0],Mt=0;X.textAlign="left",X.textBaseline="middle",Fe.each(h.legendItems,function(is,yo){var qs=bc(P,ve)+ve/2+X.measureText(is.text).width;(0===yo||St[St.length-1]+qs+2*P.padding>xe.width)&&(Mt+=ve+P.padding,St[St.length-(yo>0?0:1)]=0),Ye[yo]={left:0,top:0,width:qs,height:ve},St[St.length-1]+=qs+P.padding}),xe.height+=Mt}else{var fn=P.padding,jn=h.columnWidths=[],Vn=h.columnHeights=[],fr=P.padding,$r=0,Ui=0;Fe.each(h.legendItems,function(is,yo){var qs=bc(P,ve)+ve/2+X.measureText(is.text).width;yo>0&&Ui+ve+2*fn>xe.height&&(fr+=$r+P.padding,jn.push($r),Vn.push(Ui),$r=0,Ui=0),$r=Math.max($r,qs),Ui+=ve+fn,Ye[yo]={left:0,top:0,width:qs,height:ve}}),fr+=$r,jn.push($r),Vn.push(Ui),xe.width+=fr}h.width=xe.width,h.height=xe.height}else h.width=xe.width=h.height=xe.height=0},afterFit:Dc,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var h=this,E=h.options,P=E.labels,L=vr.global,X=L.defaultColor,de=L.elements.line,ve=h.height,Ye=h.columnHeights,xe=h.width,nt=h.lineWidths;if(E.display){var fr,St=ga(E.rtl,h.left,h.minSize.width),Mt=h.ctx,fn=Lu(P.fontColor,L.defaultFontColor),jn=Fe.options._parseFont(P),Vn=jn.size;Mt.textAlign=St.textAlign("left"),Mt.textBaseline="middle",Mt.lineWidth=.5,Mt.strokeStyle=fn,Mt.fillStyle=fn,Mt.font=jn.string;var $r=bc(P,Vn),Ui=h.legendHitBoxes,Vs=function($a,Ga){switch(E.align){case"start":return P.padding;case"end":return $a-Ga;default:return($a-Ga+P.padding)/2}},qs=h.isHorizontal();fr=qs?{x:h.left+Vs(xe,nt[0]),y:h.top+P.padding,line:0}:{x:h.left+P.padding,y:h.top+Vs(ve,Ye[0]),line:0},Fe.rtl.overrideTextDirection(h.ctx,E.textDirection);var el=Vn+P.padding;Fe.each(h.legendItems,function($a,Ga){var wa=Mt.measureText($a.text).width,Gl=$r+Vn/2+wa,_u=fr.x,Va=fr.y;St.setWidth(h.minSize.width),qs?Ga>0&&_u+Gl+P.padding>h.left+h.minSize.width&&(Va=fr.y+=el,fr.line++,_u=fr.x=h.left+Vs(xe,nt[fr.line])):Ga>0&&Va+el>h.top+h.minSize.height&&(_u=fr.x=_u+h.columnWidths[fr.line]+P.padding,fr.line++,Va=fr.y=h.top+Vs(ve,Ye[fr.line]));var Mu=St.x(_u);(function($a,Ga,wa){if(!(isNaN($r)||$r<=0)){Mt.save();var Gl=Lu(wa.lineWidth,de.borderWidth);if(Mt.fillStyle=Lu(wa.fillStyle,X),Mt.lineCap=Lu(wa.lineCap,de.borderCapStyle),Mt.lineDashOffset=Lu(wa.lineDashOffset,de.borderDashOffset),Mt.lineJoin=Lu(wa.lineJoin,de.borderJoinStyle),Mt.lineWidth=Gl,Mt.strokeStyle=Lu(wa.strokeStyle,X),Mt.setLineDash&&Mt.setLineDash(Lu(wa.lineDash,de.borderDash)),P&&P.usePointStyle){var _u=$r*Math.SQRT2/2,Va=St.xPlus($a,$r/2);Fe.canvas.drawPoint(Mt,wa.pointStyle,_u,Va,Ga+Vn/2,wa.rotation)}else Mt.fillRect(St.leftForLtr($a,$r),Ga,$r,Vn),0!==Gl&&Mt.strokeRect(St.leftForLtr($a,$r),Ga,$r,Vn);Mt.restore()}})(Mu,Va,$a),Ui[Ga].left=St.leftForLtr(Mu,Ui[Ga].width),Ui[Ga].top=Va,function($a,Ga,wa,Gl){var _u=Vn/2,Va=St.xPlus($a,$r+_u),Mu=Ga+_u;Mt.fillText(wa.text,Va,Mu),wa.hidden&&(Mt.beginPath(),Mt.lineWidth=2,Mt.moveTo(Va,Mu),Mt.lineTo(St.xPlus(Va,Gl),Mu),Mt.stroke())}(Mu,Va,$a,wa),qs?fr.x+=Gl+P.padding:fr.y+=el}),Fe.rtl.restoreTextDirection(h.ctx,E.textDirection)}},_getLegendItemAt:function(h,E){var L,X,de,P=this;if(h>=P.left&&h<=P.right&&E>=P.top&&E<=P.bottom)for(de=P.legendHitBoxes,L=0;L<de.length;++L)if(h>=(X=de[L]).left&&h<=X.left+X.width&&E>=X.top&&E<=X.top+X.height)return P.legendItems[L];return null},handleEvent:function(h){var X,E=this,P=E.options,L="mouseup"===h.type?"click":h.type;if("mousemove"===L){if(!P.onHover&&!P.onLeave)return}else{if("click"!==L)return;if(!P.onClick)return}X=E._getLegendItemAt(h.x,h.y),"click"===L?X&&P.onClick&&P.onClick.call(E,h.native,X):(P.onLeave&&X!==E._hoveredItem&&(E._hoveredItem&&P.onLeave.call(E,h.native,E._hoveredItem),E._hoveredItem=X),P.onHover&&X&&P.onHover.call(E,h.native,X))}});function Ql(h,E){var P=new rc({ctx:h.ctx,options:E,chart:h});Bl.configure(h,P,E),Bl.addBox(h,P),h.legend=P}var Sc={id:"legend",_element:rc,beforeInit:function(h){var E=h.options.legend;E&&Ql(h,E)},beforeUpdate:function(h){var E=h.options.legend,P=h.legend;E?(Fe.mergeIf(E,vr.global.legend),P?(Bl.configure(h,P,E),P.options=E):Ql(h,E)):P&&(Bl.removeBox(h,P),delete h.legend)},afterEvent:function(h,E){var P=h.legend;P&&P.handleEvent(E)}},Tc=Fe.noop;vr._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Zu=yt.extend({initialize:function(h){Fe.extend(this,h),this.legendHitBoxes=[]},beforeUpdate:Tc,update:function(h,E,P){var L=this;return L.beforeUpdate(),L.maxWidth=h,L.maxHeight=E,L.margins=P,L.beforeSetDimensions(),L.setDimensions(),L.afterSetDimensions(),L.beforeBuildLabels(),L.buildLabels(),L.afterBuildLabels(),L.beforeFit(),L.fit(),L.afterFit(),L.afterUpdate(),L.minSize},afterUpdate:Tc,beforeSetDimensions:Tc,setDimensions:function(){var h=this;h.isHorizontal()?(h.width=h.maxWidth,h.left=0,h.right=h.width):(h.height=h.maxHeight,h.top=0,h.bottom=h.height),h.paddingLeft=0,h.paddingTop=0,h.paddingRight=0,h.paddingBottom=0,h.minSize={width:0,height:0}},afterSetDimensions:Tc,beforeBuildLabels:Tc,buildLabels:Tc,afterBuildLabels:Tc,beforeFit:Tc,fit:function(){var de,h=this,E=h.options,P=h.minSize={},L=h.isHorizontal();E.display?(de=(Fe.isArray(E.text)?E.text.length:1)*Fe.options._parseFont(E).lineHeight+2*E.padding,h.width=P.width=L?h.maxWidth:de,h.height=P.height=L?de:h.maxHeight):h.width=P.width=h.height=P.height=0},afterFit:Tc,isHorizontal:function(){var h=this.options.position;return"top"===h||"bottom"===h},draw:function(){var h=this,E=h.ctx,P=h.options;if(P.display){var Mt,fn,jn,L=Fe.options._parseFont(P),X=L.lineHeight,de=X/2+P.padding,ve=0,Ye=h.top,xe=h.left,nt=h.bottom,St=h.right;E.fillStyle=Fe.valueOrDefault(P.fontColor,vr.global.defaultFontColor),E.font=L.string,h.isHorizontal()?(fn=xe+(St-xe)/2,jn=Ye+de,Mt=St-xe):(fn="left"===P.position?xe+de:St-de,jn=Ye+(nt-Ye)/2,Mt=nt-Ye,ve=Math.PI*("left"===P.position?-.5:.5)),E.save(),E.translate(fn,jn),E.rotate(ve),E.textAlign="center",E.textBaseline="middle";var Vn=P.text;if(Fe.isArray(Vn))for(var fr=0,$r=0;$r<Vn.length;++$r)E.fillText(Vn[$r],0,fr,Mt),fr+=X;else E.fillText(Vn,0,0,Mt);E.restore()}}});function hu(h,E){var P=new Zu({ctx:h.ctx,options:E,chart:h});Bl.configure(h,P,E),Bl.addBox(h,P),h.titleBlock=P}var pc={},Jd=Ac,Jc=Sc,Nl={id:"title",_element:Zu,beforeInit:function(h){var E=h.options.title;E&&hu(h,E)},beforeUpdate:function(h){var E=h.options.title,P=h.titleBlock;E?(Fe.mergeIf(E,vr.global.title),P?(Bl.configure(h,P,E),P.options=E):hu(h,E)):P&&(Bl.removeBox(h,P),delete h.titleBlock)}};for(var Yc in pc.filler=Jd,pc.legend=Jc,pc.title=Nl,Pn.helpers=Fe,function(){function h(L,X,de){var ve;return"string"==typeof L?(ve=parseInt(L,10),-1!==L.indexOf("%")&&(ve=ve/100*X.parentNode[de])):ve=L,ve}function E(L){return null!=L&&"none"!==L}function P(L,X,de){var ve=document.defaultView,Ye=Fe._getParentNode(L),xe=ve.getComputedStyle(L)[X],nt=ve.getComputedStyle(Ye)[X],St=E(xe),Mt=E(nt),fn=Number.POSITIVE_INFINITY;return St||Mt?Math.min(St?h(xe,L,de):fn,Mt?h(nt,Ye,de):fn):"none"}Fe.where=function(L,X){if(Fe.isArray(L)&&Array.prototype.filter)return L.filter(X);var de=[];return Fe.each(L,function(ve){X(ve)&&de.push(ve)}),de},Fe.findIndex=Array.prototype.findIndex?function(L,X,de){return L.findIndex(X,de)}:function(L,X,de){de=void 0===de?L:de;for(var ve=0,Ye=L.length;ve<Ye;++ve)if(X.call(de,L[ve],ve,L))return ve;return-1},Fe.findNextWhere=function(L,X,de){Fe.isNullOrUndef(de)&&(de=-1);for(var ve=de+1;ve<L.length;ve++){var Ye=L[ve];if(X(Ye))return Ye}},Fe.findPreviousWhere=function(L,X,de){Fe.isNullOrUndef(de)&&(de=L.length);for(var ve=de-1;ve>=0;ve--){var Ye=L[ve];if(X(Ye))return Ye}},Fe.isNumber=function(L){return!isNaN(parseFloat(L))&&isFinite(L)},Fe.almostEquals=function(L,X,de){return Math.abs(L-X)<de},Fe.almostWhole=function(L,X){var de=Math.round(L);return de-X<=L&&de+X>=L},Fe.max=function(L){return L.reduce(function(X,de){return isNaN(de)?X:Math.max(X,de)},Number.NEGATIVE_INFINITY)},Fe.min=function(L){return L.reduce(function(X,de){return isNaN(de)?X:Math.min(X,de)},Number.POSITIVE_INFINITY)},Fe.sign=Math.sign?function(L){return Math.sign(L)}:function(L){return 0==(L=+L)||isNaN(L)?L:L>0?1:-1},Fe.toRadians=function(L){return L*(Math.PI/180)},Fe.toDegrees=function(L){return L*(180/Math.PI)},Fe._decimalPlaces=function(L){if(Fe.isFinite(L)){for(var X=1,de=0;Math.round(L*X)/X!==L;)X*=10,de++;return de}},Fe.getAngleFromPoint=function(L,X){var de=X.x-L.x,ve=X.y-L.y,Ye=Math.sqrt(de*de+ve*ve),xe=Math.atan2(ve,de);return xe<-.5*Math.PI&&(xe+=2*Math.PI),{angle:xe,distance:Ye}},Fe.distanceBetweenPoints=function(L,X){return Math.sqrt(Math.pow(X.x-L.x,2)+Math.pow(X.y-L.y,2))},Fe.aliasPixel=function(L){return L%2==0?0:.5},Fe._alignPixel=function(L,X,de){var ve=L.currentDevicePixelRatio,Ye=de/2;return Math.round((X-Ye)*ve)/ve+Ye},Fe.splineCurve=function(L,X,de,ve){var Ye=L.skip?X:L,xe=X,nt=de.skip?X:de,St=Math.sqrt(Math.pow(xe.x-Ye.x,2)+Math.pow(xe.y-Ye.y,2)),Mt=Math.sqrt(Math.pow(nt.x-xe.x,2)+Math.pow(nt.y-xe.y,2)),fn=St/(St+Mt),jn=Mt/(St+Mt),Vn=ve*(fn=isNaN(fn)?0:fn),fr=ve*(jn=isNaN(jn)?0:jn);return{previous:{x:xe.x-Vn*(nt.x-Ye.x),y:xe.y-Vn*(nt.y-Ye.y)},next:{x:xe.x+fr*(nt.x-Ye.x),y:xe.y+fr*(nt.y-Ye.y)}}},Fe.EPSILON=Number.EPSILON||1e-14,Fe.splineCurveMonotone=function(L){var ve,Ye,xe,nt,Mt,fn,jn,Vn,fr,X=(L||[]).map(function($r){return{model:$r._model,deltaK:0,mK:0}}),de=X.length;for(ve=0;ve<de;++ve)if(!(xe=X[ve]).model.skip){if(Ye=ve>0?X[ve-1]:null,(nt=ve<de-1?X[ve+1]:null)&&!nt.model.skip){var St=nt.model.x-xe.model.x;xe.deltaK=0!==St?(nt.model.y-xe.model.y)/St:0}xe.mK=!Ye||Ye.model.skip?xe.deltaK:!nt||nt.model.skip?Ye.deltaK:this.sign(Ye.deltaK)!==this.sign(xe.deltaK)?0:(Ye.deltaK+xe.deltaK)/2}for(ve=0;ve<de-1;++ve)if(nt=X[ve+1],!(xe=X[ve]).model.skip&&!nt.model.skip){if(Fe.almostEquals(xe.deltaK,0,this.EPSILON)){xe.mK=nt.mK=0;continue}Mt=xe.mK/xe.deltaK,fn=nt.mK/xe.deltaK,!((Vn=Math.pow(Mt,2)+Math.pow(fn,2))<=9)&&(jn=3/Math.sqrt(Vn),xe.mK=Mt*jn*xe.deltaK,nt.mK=fn*jn*xe.deltaK)}for(ve=0;ve<de;++ve)!(xe=X[ve]).model.skip&&(nt=ve<de-1?X[ve+1]:null,(Ye=ve>0?X[ve-1]:null)&&!Ye.model.skip&&(xe.model.controlPointPreviousX=xe.model.x-(fr=(xe.model.x-Ye.model.x)/3),xe.model.controlPointPreviousY=xe.model.y-fr*xe.mK),nt&&!nt.model.skip&&(xe.model.controlPointNextX=xe.model.x+(fr=(nt.model.x-xe.model.x)/3),xe.model.controlPointNextY=xe.model.y+fr*xe.mK))},Fe.nextItem=function(L,X,de){return de?X>=L.length-1?L[0]:L[X+1]:X>=L.length-1?L[L.length-1]:L[X+1]},Fe.previousItem=function(L,X,de){return de?X<=0?L[L.length-1]:L[X-1]:X<=0?L[0]:L[X-1]},Fe.niceNum=function(L,X){var de=Math.floor(Fe.log10(L)),ve=L/Math.pow(10,de);return(X?ve<1.5?1:ve<3?2:ve<7?5:10:ve<=1?1:ve<=2?2:ve<=5?5:10)*Math.pow(10,de)},Fe.requestAnimFrame="undefined"==typeof window?function(L){L()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(L){return window.setTimeout(L,1e3/60)},Fe.getRelativePosition=function(L,X){var de,ve,Ye=L.originalEvent||L,xe=L.target||L.srcElement,nt=xe.getBoundingClientRect(),St=Ye.touches;St&&St.length>0?(de=St[0].clientX,ve=St[0].clientY):(de=Ye.clientX,ve=Ye.clientY);var Mt=parseFloat(Fe.getStyle(xe,"padding-left")),fn=parseFloat(Fe.getStyle(xe,"padding-top")),jn=parseFloat(Fe.getStyle(xe,"padding-right")),Vn=parseFloat(Fe.getStyle(xe,"padding-bottom")),$r=nt.bottom-nt.top-fn-Vn;return{x:de=Math.round((de-nt.left-Mt)/(nt.right-nt.left-Mt-jn)*xe.width/X.currentDevicePixelRatio),y:ve=Math.round((ve-nt.top-fn)/$r*xe.height/X.currentDevicePixelRatio)}},Fe.getConstraintWidth=function(L){return P(L,"max-width","clientWidth")},Fe.getConstraintHeight=function(L){return P(L,"max-height","clientHeight")},Fe._calculatePadding=function(L,X,de){return(X=Fe.getStyle(L,X)).indexOf("%")>-1?de*parseInt(X,10)/100:parseInt(X,10)},Fe._getParentNode=function(L){var X=L.parentNode;return X&&"[object ShadowRoot]"===X.toString()&&(X=X.host),X},Fe.getMaximumWidth=function(L){var X=Fe._getParentNode(L);if(!X)return L.clientWidth;var de=X.clientWidth,xe=de-Fe._calculatePadding(X,"padding-left",de)-Fe._calculatePadding(X,"padding-right",de),nt=Fe.getConstraintWidth(L);return isNaN(nt)?xe:Math.min(xe,nt)},Fe.getMaximumHeight=function(L){var X=Fe._getParentNode(L);if(!X)return L.clientHeight;var de=X.clientHeight,xe=de-Fe._calculatePadding(X,"padding-top",de)-Fe._calculatePadding(X,"padding-bottom",de),nt=Fe.getConstraintHeight(L);return isNaN(nt)?xe:Math.min(xe,nt)},Fe.getStyle=function(L,X){return L.currentStyle?L.currentStyle[X]:document.defaultView.getComputedStyle(L,null).getPropertyValue(X)},Fe.retinaScale=function(L,X){var de=L.currentDevicePixelRatio=X||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==de){var ve=L.canvas,Ye=L.height,xe=L.width;ve.height=Ye*de,ve.width=xe*de,L.ctx.scale(de,de),!ve.style.height&&!ve.style.width&&(ve.style.height=Ye+"px",ve.style.width=xe+"px")}},Fe.fontString=function(L,X,de){return X+" "+L+"px "+de},Fe.longestText=function(L,X,de,ve){var Ye=(ve=ve||{}).data=ve.data||{},xe=ve.garbageCollect=ve.garbageCollect||[];ve.font!==X&&(Ye=ve.data={},xe=ve.garbageCollect=[],ve.font=X),L.font=X;var Mt,fn,jn,Vn,fr,nt=0,St=de.length;for(Mt=0;Mt<St;Mt++)if(null!=(Vn=de[Mt])&&!0!==Fe.isArray(Vn))nt=Fe.measureText(L,Ye,xe,nt,Vn);else if(Fe.isArray(Vn))for(fn=0,jn=Vn.length;fn<jn;fn++)null!=(fr=Vn[fn])&&!Fe.isArray(fr)&&(nt=Fe.measureText(L,Ye,xe,nt,fr));var $r=xe.length/2;if($r>de.length){for(Mt=0;Mt<$r;Mt++)delete Ye[xe[Mt]];xe.splice(0,$r)}return nt},Fe.measureText=function(L,X,de,ve,Ye){var xe=X[Ye];return xe||(xe=X[Ye]=L.measureText(Ye).width,de.push(Ye)),xe>ve&&(ve=xe),ve},Fe.numberOfLabelLines=function(L){var X=1;return Fe.each(L,function(de){Fe.isArray(de)&&de.length>X&&(X=de.length)}),X},Fe.color=_r?function(L){return L instanceof CanvasGradient&&(L=vr.global.defaultColor),_r(L)}:function(L){return console.error("Color.js not found!"),L},Fe.getHoverColor=function(L){return L instanceof CanvasPattern||L instanceof CanvasGradient?L:Fe.color(L).saturate(.5).darken(.1).rgbString()}}(),Pn._adapters=Vi,Pn.Animation=yn,Pn.animationService=Cr,Pn.controllers=Oi,Pn.DatasetController=Ri,Pn.defaults=vr,Pn.Element=yt,Pn.elements=go,Pn.Interaction=sl,Pn.layouts=Bl,Pn.platform=Fa,Pn.plugins=Es,Pn.Scale=Mo,Pn.scaleService=qu,Pn.Ticks=Pr,Pn.Tooltip=Ld,Pn.helpers.each(Lc,function(h,E){Pn.scaleService.registerScaleType(E,h,h._defaults)}),pc)pc.hasOwnProperty(Yc)&&Pn.plugins.register(pc[Yc]);Pn.platform.initialize();var ic=Pn;return"undefined"!=typeof window&&(window.Chart=Pn),Pn.Chart=Pn,Pn.Legend=pc.legend._element,Pn.Title=pc.title._element,Pn.pluginService=Pn.plugins,Pn.PluginBase=Pn.Element.extend({}),Pn.canvasHelpers=Pn.helpers.canvas,Pn.layoutService=Pn.layouts,Pn.LinearScaleBase=pa,Pn.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],function(h){Pn[h]=function(E,P){return new Pn(E,Pn.helpers.merge(P||{},{type:h.charAt(0).toLowerCase()+h.slice(1)}))}}),ic}(function(){try{return i(16738)}catch(f){}}())},82885:(v,b)=>{var r;!function(){"use strict";var a={}.hasOwnProperty;function u(){for(var e=[],p=0;p<arguments.length;p++){var g=arguments[p];if(g){var S=typeof g;if("string"===S||"number"===S)e.push(g);else if(Array.isArray(g)){if(g.length){var M=u.apply(null,g);M&&e.push(M)}}else if("object"===S){if(g.toString!==Object.prototype.toString&&!g.toString.toString().includes("[native code]")){e.push(g.toString());continue}for(var w in g)a.call(g,w)&&g[w]&&e.push(w)}}}return e.join(" ")}v.exports?(u.default=u,v.exports=u):void 0!==(r=function(){return u}.apply(b,[]))&&(v.exports=r)}()},2665:v=>{v.exports=function(i,r){for(var a=[],f=0;f<i.length;f++){var u=r(i[f],f);b(u)?a.push.apply(a,u):a.push(u)}return a};var b=Array.isArray||function(i){return"[object Array]"===Object.prototype.toString.call(i)}},7281:(v,b)=>{"use strict";b.parse=function a(S,M){if("string"!=typeof S)throw new TypeError("argument str must be a string");for(var w={},B=(M||{}).decode||u,W=0;W<S.length;){var j=S.indexOf("=",W);if(-1===j)break;var q=S.indexOf(";",W);if(-1===q)q=S.length;else if(q<j){W=S.lastIndexOf(";",j-1)+1;continue}var ue=S.slice(W,j).trim();if(void 0===w[ue]){var re=S.slice(j+1,q).trim();34===re.charCodeAt(0)&&(re=re.slice(1,-1)),w[ue]=g(re,B)}W=q+1}return w},b.serialize=function f(S,M,w){var x=w||{},B=x.encode||e;if("function"!=typeof B)throw new TypeError("option encode is invalid");if(!r.test(S))throw new TypeError("argument name is invalid");var W=B(M);if(W&&!r.test(W))throw new TypeError("argument val is invalid");var j=S+"="+W;if(null!=x.maxAge){var q=x.maxAge-0;if(isNaN(q)||!isFinite(q))throw new TypeError("option maxAge is invalid");j+="; Max-Age="+Math.floor(q)}if(x.domain){if(!r.test(x.domain))throw new TypeError("option domain is invalid");j+="; Domain="+x.domain}if(x.path){if(!r.test(x.path))throw new TypeError("option path is invalid");j+="; Path="+x.path}if(x.expires){var ue=x.expires;if(!function p(S){return"[object Date]"===i.call(S)||S instanceof Date}(ue)||isNaN(ue.valueOf()))throw new TypeError("option expires is invalid");j+="; Expires="+ue.toUTCString()}if(x.httpOnly&&(j+="; HttpOnly"),x.secure&&(j+="; Secure"),x.priority)switch("string"==typeof x.priority?x.priority.toLowerCase():x.priority){case"low":j+="; Priority=Low";break;case"medium":j+="; Priority=Medium";break;case"high":j+="; Priority=High";break;default:throw new TypeError("option priority is invalid")}if(x.sameSite)switch("string"==typeof x.sameSite?x.sameSite.toLowerCase():x.sameSite){case!0:j+="; SameSite=Strict";break;case"lax":j+="; SameSite=Lax";break;case"strict":j+="; SameSite=Strict";break;case"none":j+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}return j};var i=Object.prototype.toString,r=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function u(S){return-1!==S.indexOf("%")?decodeURIComponent(S):S}function e(S){return encodeURIComponent(S)}function g(S,M){try{return M(S)}catch(w){return S}}},96967:(v,b,i)=>{"use strict";var r=i(35311),a={"text/plain":"Text","text/html":"Url",default:"Text"};v.exports=function e(p,g){var S,M,w,x,B,W,j=!1;g||(g={}),S=g.debug||!1;try{if(w=r(),x=document.createRange(),B=document.getSelection(),(W=document.createElement("span")).textContent=p,W.ariaHidden="true",W.style.all="unset",W.style.position="fixed",W.style.top=0,W.style.clip="rect(0, 0, 0, 0)",W.style.whiteSpace="pre",W.style.webkitUserSelect="text",W.style.MozUserSelect="text",W.style.msUserSelect="text",W.style.userSelect="text",W.addEventListener("copy",function(ue){ue.stopPropagation(),g.format&&(ue.preventDefault(),void 0===ue.clipboardData?(S&&console.warn("unable to use e.clipboardData"),S&&console.warn("trying IE specific stuff"),window.clipboardData.clearData(),window.clipboardData.setData(a[g.format]||a.default,p)):(ue.clipboardData.clearData(),ue.clipboardData.setData(g.format,p))),g.onCopy&&(ue.preventDefault(),g.onCopy(ue.clipboardData))}),document.body.appendChild(W),x.selectNodeContents(W),B.addRange(x),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");j=!0}catch(ue){S&&console.error("unable to copy using execCommand: ",ue),S&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(g.format||"text",p),g.onCopy&&g.onCopy(window.clipboardData),j=!0}catch(re){S&&console.error("unable to copy using clipboardData: ",re),S&&console.error("falling back to prompt"),M=function u(p){var g=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return p.replace(/#{\s*key\s*}/g,g)}("message"in g?g.message:"Copy to clipboard: #{key}, Enter"),window.prompt(M,p)}}finally{B&&("function"==typeof B.removeRange?B.removeRange(x):B.removeAllRanges()),W&&document.body.removeChild(W),w()}return j}},43987:(v,b,i)=>{var r=i(75242);v.exports=r},99556:(v,b,i)=>{var r=i(10323);v.exports=r},39287:(v,b,i)=>{var r=i(8748);v.exports=r},25272:(v,b,i)=>{var r=i(71873);v.exports=r},54450:(v,b,i)=>{var r=i(19095);v.exports=r},39557:(v,b,i)=>{var r=i(52049);v.exports=r},61611:(v,b,i)=>{var r=i(87054);v.exports=r},22549:(v,b,i)=>{var r=i(45284);v.exports=r},47646:(v,b,i)=>{var r=i(70157);v.exports=r},78663:(v,b,i)=>{var r=i(640);v.exports=r},48498:(v,b,i)=>{var r=i(50320);v.exports=r},4922:(v,b,i)=>{var r=i(93006);v.exports=r},95190:(v,b,i)=>{var r=i(36226);v.exports=r},78525:(v,b,i)=>{var r=i(21968);v.exports=r},21064:(v,b,i)=>{var r=i(87259);v.exports=r},65641:(v,b,i)=>{var r=i(62021);v.exports=r},21693:(v,b,i)=>{var r=i(57682);v.exports=r},88907:(v,b,i)=>{var r=i(94222);v.exports=r},41432:(v,b,i)=>{var r=i(1162);v.exports=r},7398:(v,b,i)=>{var r=i(82805);v.exports=r},67221:(v,b,i)=>{var r=i(26498);v.exports=r},67447:(v,b,i)=>{var r=i(44850);v.exports=r},58811:(v,b,i)=>{var r=i(9634);v.exports=r},19573:(v,b,i)=>{var r=i(96551);i(5737),v.exports=r},10226:(v,b,i)=>{var r=i(98908);v.exports=r},56378:(v,b,i)=>{var r=i(55434);v.exports=r},74771:(v,b,i)=>{i(3934),i(261);var r=i(13544);v.exports=r.Array.from},8412:(v,b,i)=>{i(2862);var r=i(13544);v.exports=r.Array.isArray},77377:(v,b,i)=>{i(1625);var r=i(97911);v.exports=r("Array").concat},399:(v,b,i)=>{i(1285),i(17221);var r=i(97911);v.exports=r("Array").entries},66933:(v,b,i)=>{i(70466);var r=i(97911);v.exports=r("Array").every},9504:(v,b,i)=>{i(24990);var r=i(97911);v.exports=r("Array").fill},82168:(v,b,i)=>{i(56534);var r=i(97911);v.exports=r("Array").filter},65618:(v,b,i)=>{i(12773);var r=i(97911);v.exports=r("Array").findIndex},9186:(v,b,i)=>{i(60326);var r=i(97911);v.exports=r("Array").find},98812:(v,b,i)=>{i(98792);var r=i(97911);v.exports=r("Array").forEach},58479:(v,b,i)=>{i(77059);var r=i(97911);v.exports=r("Array").includes},43207:(v,b,i)=>{i(2795);var r=i(97911);v.exports=r("Array").indexOf},33195:(v,b,i)=>{i(1285),i(17221);var r=i(97911);v.exports=r("Array").keys},63033:(v,b,i)=>{i(74926);var r=i(97911);v.exports=r("Array").lastIndexOf},5736:(v,b,i)=>{i(88119);var r=i(97911);v.exports=r("Array").map},7198:(v,b,i)=>{i(46250);var r=i(97911);v.exports=r("Array").reduce},84302:(v,b,i)=>{i(32836);var r=i(97911);v.exports=r("Array").reverse},86693:(v,b,i)=>{i(72999);var r=i(97911);v.exports=r("Array").slice},24273:(v,b,i)=>{i(50733);var r=i(97911);v.exports=r("Array").some},45974:(v,b,i)=>{i(93639);var r=i(97911);v.exports=r("Array").sort},68012:(v,b,i)=>{i(63117);var r=i(97911);v.exports=r("Array").splice},46332:(v,b,i)=>{i(1285),i(17221);var r=i(97911);v.exports=r("Array").values},42618:(v,b,i)=>{i(34699);var r=i(13544);v.exports=r.Date.now},97724:(v,b,i)=>{i(33379);var r=i(97911);v.exports=r("Function").bind},63791:(v,b,i)=>{i(1285),i(3934);var r=i(34014);v.exports=r},69029:(v,b,i)=>{var r=i(23336),a=i(97724),f=Function.prototype;v.exports=function(u){var e=u.bind;return u===f||r(f,u)&&e===f.bind?a:e}},28924:(v,b,i)=>{var r=i(23336),a=i(77377),f=Array.prototype;v.exports=function(u){var e=u.concat;return u===f||r(f,u)&&e===f.concat?a:e}},98709:(v,b,i)=>{var r=i(23336),a=i(66933),f=Array.prototype;v.exports=function(u){var e=u.every;return u===f||r(f,u)&&e===f.every?a:e}},65991:(v,b,i)=>{var r=i(23336),a=i(9504),f=Array.prototype;v.exports=function(u){var e=u.fill;return u===f||r(f,u)&&e===f.fill?a:e}},64158:(v,b,i)=>{var r=i(23336),a=i(82168),f=Array.prototype;v.exports=function(u){var e=u.filter;return u===f||r(f,u)&&e===f.filter?a:e}},91799:(v,b,i)=>{var r=i(23336),a=i(65618),f=Array.prototype;v.exports=function(u){var e=u.findIndex;return u===f||r(f,u)&&e===f.findIndex?a:e}},26155:(v,b,i)=>{var r=i(23336),a=i(9186),f=Array.prototype;v.exports=function(u){var e=u.find;return u===f||r(f,u)&&e===f.find?a:e}},33758:(v,b,i)=>{var r=i(23336),a=i(58479),f=i(85136),u=Array.prototype,e=String.prototype;v.exports=function(p){var g=p.includes;return p===u||r(u,p)&&g===u.includes?a:"string"==typeof p||p===e||r(e,p)&&g===e.includes?f:g}},7592:(v,b,i)=>{var r=i(23336),a=i(43207),f=Array.prototype;v.exports=function(u){var e=u.indexOf;return u===f||r(f,u)&&e===f.indexOf?a:e}},17480:(v,b,i)=>{var r=i(23336),a=i(63033),f=Array.prototype;v.exports=function(u){var e=u.lastIndexOf;return u===f||r(f,u)&&e===f.lastIndexOf?a:e}},20681:(v,b,i)=>{var r=i(23336),a=i(5736),f=Array.prototype;v.exports=function(u){var e=u.map;return u===f||r(f,u)&&e===f.map?a:e}},90949:(v,b,i)=>{var r=i(23336),a=i(7198),f=Array.prototype;v.exports=function(u){var e=u.reduce;return u===f||r(f,u)&&e===f.reduce?a:e}},99316:(v,b,i)=>{var r=i(23336),a=i(96302),f=String.prototype;v.exports=function(u){var e=u.repeat;return"string"==typeof u||u===f||r(f,u)&&e===f.repeat?a:e}},62212:(v,b,i)=>{var r=i(23336),a=i(84302),f=Array.prototype;v.exports=function(u){var e=u.reverse;return u===f||r(f,u)&&e===f.reverse?a:e}},49073:(v,b,i)=>{var r=i(23336),a=i(86693),f=Array.prototype;v.exports=function(u){var e=u.slice;return u===f||r(f,u)&&e===f.slice?a:e}},24146:(v,b,i)=>{var r=i(23336),a=i(24273),f=Array.prototype;v.exports=function(u){var e=u.some;return u===f||r(f,u)&&e===f.some?a:e}},40104:(v,b,i)=>{var r=i(23336),a=i(45974),f=Array.prototype;v.exports=function(u){var e=u.sort;return u===f||r(f,u)&&e===f.sort?a:e}},3555:(v,b,i)=>{var r=i(23336),a=i(68012),f=Array.prototype;v.exports=function(u){var e=u.splice;return u===f||r(f,u)&&e===f.splice?a:e}},68333:(v,b,i)=>{var r=i(23336),a=i(98720),f=String.prototype;v.exports=function(u){var e=u.startsWith;return"string"==typeof u||u===f||r(f,u)&&e===f.startsWith?a:e}},65786:(v,b,i)=>{var r=i(23336),a=i(75998),f=String.prototype;v.exports=function(u){var e=u.trim;return"string"==typeof u||u===f||r(f,u)&&e===f.trim?a:e}},66306:(v,b,i)=>{i(75071);var r=i(13544),a=i(2543);r.JSON||(r.JSON={stringify:JSON.stringify}),v.exports=function(u,e,p){return a(r.JSON.stringify,null,arguments)}},31845:(v,b,i)=>{i(1285),i(85140),i(17221),i(3934);var r=i(13544);v.exports=r.Map},44168:(v,b,i)=>{i(67234);var r=i(13544);v.exports=r.Object.assign},25852:(v,b,i)=>{i(86516);var a=i(13544).Object;v.exports=function(u,e){return a.create(u,e)}},24457:(v,b,i)=>{i(36255);var a=i(13544).Object,f=v.exports=function(e,p){return a.defineProperties(e,p)};a.defineProperties.sham&&(f.sham=!0)},99671:(v,b,i)=>{i(84468);var a=i(13544).Object,f=v.exports=function(e,p,g){return a.defineProperty(e,p,g)};a.defineProperty.sham&&(f.sham=!0)},38007:(v,b,i)=>{i(86627);var a=i(13544).Object,f=v.exports=function(e,p){return a.getOwnPropertyDescriptor(e,p)};a.getOwnPropertyDescriptor.sham&&(f.sham=!0)},57432:(v,b,i)=>{i(78275);var r=i(13544);v.exports=r.Object.getOwnPropertyDescriptors},36541:(v,b,i)=>{i(56728);var r=i(13544);v.exports=r.Object.getOwnPropertySymbols},17303:(v,b,i)=>{i(31193);var r=i(13544);v.exports=r.Object.getPrototypeOf},62149:(v,b,i)=>{i(56557);var r=i(13544);v.exports=r.Object.keys},86537:(v,b,i)=>{i(17971);var r=i(13544);v.exports=r.Object.setPrototypeOf},79553:(v,b,i)=>{i(88923);var r=i(13544);v.exports=r.Object.values},80092:(v,b,i)=>{i(10901),i(1285),i(17221),i(66793),i(84798),i(98857),i(30185),i(3934);var r=i(13544);v.exports=r.Promise},472:(v,b,i)=>{i(19539);var r=i(13544);v.exports=r.Reflect.construct},4678:(v,b,i)=>{i(60851);var r=i(13544);v.exports=r.Reflect.get},85136:(v,b,i)=>{i(97764);var r=i(97911);v.exports=r("String").includes},96302:(v,b,i)=>{i(3588);var r=i(97911);v.exports=r("String").repeat},98720:(v,b,i)=>{i(24655);var r=i(97911);v.exports=r("String").startsWith},75998:(v,b,i)=>{i(90451);var r=i(97911);v.exports=r("String").trim},61697:(v,b,i)=>{i(1625),i(17221),i(56728),i(16426),i(1172),i(99579),i(41258),i(2383),i(44339),i(64776),i(88215),i(65389),i(12733),i(97977),i(59792),i(60242),i(26291),i(32300),i(63603),i(44864);var r=i(13544);v.exports=r.Symbol},42497:(v,b,i)=>{i(1285),i(17221),i(3934),i(2383);var r=i(89734);v.exports=r.f("iterator")},50681:(v,b,i)=>{i(68154),i(59792);var r=i(89734);v.exports=r.f("toPrimitive")},56286:(v,b,i)=>{v.exports=i(73875)},54153:(v,b,i)=>{v.exports=i(91700)},90755:(v,b,i)=>{v.exports=i(70589)},98235:(v,b,i)=>{v.exports=i(71432)},78096:(v,b,i)=>{v.exports=i(73712)},31236:(v,b,i)=>{v.exports=i(58044)},15819:(v,b,i)=>{v.exports=i(55451)},44948:(v,b,i)=>{v.exports=i(61483)},96471:(v,b,i)=>{v.exports=i(46815)},5228:(v,b,i)=>{v.exports=i(28296)},50182:(v,b,i)=>{v.exports=i(96973)},41171:(v,b,i)=>{v.exports=i(47194)},54585:(v,b,i)=>{v.exports=i(56805)},62005:(v,b,i)=>{v.exports=i(32944)},39964:(v,b,i)=>{v.exports=i(70729)},70326:(v,b,i)=>{v.exports=i(48299)},98162:(v,b,i)=>{v.exports=i(33969)},42346:(v,b,i)=>{v.exports=i(26421)},4204:(v,b,i)=>{v.exports=i(37785)},24329:(v,b,i)=>{v.exports=i(15123)},2793:(v,b,i)=>{v.exports=i(49745)},42700:(v,b,i)=>{v.exports=i(29044)},70269:(v,b,i)=>{v.exports=i(20611)},88819:(v,b,i)=>{v.exports=i(65861)},55912:(v,b,i)=>{v.exports=i(63816)},91185:(v,b,i)=>{v.exports=i(72378)},73875:(v,b,i)=>{var r=i(43987);v.exports=r},91700:(v,b,i)=>{var r=i(99556);v.exports=r},70589:(v,b,i)=>{var r=i(39287);v.exports=r},71432:(v,b,i)=>{var r=i(25272);v.exports=r},73712:(v,b,i)=>{var r=i(54450);v.exports=r},58044:(v,b,i)=>{var r=i(39557);v.exports=r},55451:(v,b,i)=>{var r=i(61611);v.exports=r},61483:(v,b,i)=>{var r=i(22549);v.exports=r},46815:(v,b,i)=>{var r=i(47646);v.exports=r},28296:(v,b,i)=>{var r=i(78663);i(78271),i(60854),i(10509),i(30887),i(54547),i(68996),i(1530),i(60176),i(41554),i(41688),i(92847),i(17316),i(58786),i(35517),i(12783),i(69773),i(22337),i(40199),i(69046),i(84131),v.exports=r},96973:(v,b,i)=>{var r=i(48498);v.exports=r},47194:(v,b,i)=>{var r=i(4922);v.exports=r},56805:(v,b,i)=>{var r=i(95190);v.exports=r},32944:(v,b,i)=>{var r=i(78525);v.exports=r},70729:(v,b,i)=>{var r=i(21064);v.exports=r},48299:(v,b,i)=>{var r=i(65641);v.exports=r},33969:(v,b,i)=>{var r=i(21693);v.exports=r},26421:(v,b,i)=>{var r=i(88907);v.exports=r},37785:(v,b,i)=>{var r=i(41432);v.exports=r},15123:(v,b,i)=>{var r=i(7398);v.exports=r},49745:(v,b,i)=>{var r=i(67221);i(67670),i(61127),i(93114),i(45975),v.exports=r},29044:(v,b,i)=>{var r=i(67447);v.exports=r},20611:(v,b,i)=>{var r=i(58811);v.exports=r},65861:(v,b,i)=>{var r=i(19573);i(55461),i(61652),i(90791),i(87097),i(29559),i(90212),i(71985),i(93770),i(47743),v.exports=r},63816:(v,b,i)=>{var r=i(10226);v.exports=r},72378:(v,b,i)=>{var r=i(56378);v.exports=r},61812:(v,b,i)=>{var r=i(52208),a=i(7378),f=TypeError;v.exports=function(u){if(r(u))return u;throw f(a(u)+" is not a function")}},54356:(v,b,i)=>{var r=i(81177),a=i(7378),f=TypeError;v.exports=function(u){if(r(u))return u;throw f(a(u)+" is not a constructor")}},64902:(v,b,i)=>{var r=i(7378);v.exports=function(a){if("object"==typeof a&&"size"in a&&"has"in a&&"get"in a&&"set"in a&&"delete"in a&&"entries"in a)return a;throw TypeError(r(a)+" is not a map")}},93221:(v,b,i)=>{var r=i(52208),a=String,f=TypeError;v.exports=function(u){if("object"==typeof u||r(u))return u;throw f("Can't set "+a(u)+" as a prototype")}},82196:v=>{v.exports=function(){}},54849:(v,b,i)=>{var r=i(23336),a=TypeError;v.exports=function(f,u){if(r(u,f))return f;throw a("Incorrect invocation")}},64562:(v,b,i)=>{var r=i(77293),a=String,f=TypeError;v.exports=function(u){if(r(u))return u;throw f(a(u)+" is not an object")}},76318:(v,b,i)=>{var r=i(55756);v.exports=r(function(){if("function"==typeof ArrayBuffer){var a=new ArrayBuffer(8);Object.isExtensible(a)&&Object.defineProperty(a,"a",{value:8})}})},35277:(v,b,i)=>{"use strict";var r=i(70267),a=i(19401),f=i(6381);v.exports=function(e){for(var p=r(this),g=f(p),S=arguments.length,M=a(S>1?arguments[1]:void 0,g),w=S>2?arguments[2]:void 0,x=void 0===w?g:a(w,g);x>M;)p[M++]=e;return p}},8366:(v,b,i)=>{"use strict";var r=i(68607).forEach,f=i(33620)("forEach");v.exports=f?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},51923:(v,b,i)=>{"use strict";var r=i(76781),a=i(25401),f=i(70267),u=i(93463),e=i(39918),p=i(81177),g=i(6381),S=i(46751),M=i(88055),w=i(34014),x=Array;v.exports=function(W){var j=f(W),q=p(this),ue=arguments.length,re=ue>1?arguments[1]:void 0,H=void 0!==re;H&&(re=r(re,ue>2?arguments[2]:void 0));var ie,fe,he,Ce,ce,Be,se=w(j),ae=0;if(!se||this===x&&e(se))for(ie=g(j),fe=q?new this(ie):x(ie);ie>ae;ae++)Be=H?re(j[ae],ae):j[ae],S(fe,ae,Be);else for(ce=(Ce=M(j,se)).next,fe=q?new this:[];!(he=a(ce,Ce)).done;ae++)Be=H?u(Ce,re,[he.value,ae],!0):he.value,S(fe,ae,Be);return fe.length=ae,fe}},95171:(v,b,i)=>{var r=i(81010),a=i(19401),f=i(6381),u=function(e){return function(p,g,S){var B,M=r(p),w=f(M),x=a(S,w);if(e&&g!=g){for(;w>x;)if((B=M[x++])!=B)return!0}else for(;w>x;x++)if((e||x in M)&&M[x]===g)return e||x||0;return!e&&-1}};v.exports={includes:u(!0),indexOf:u(!1)}},68607:(v,b,i)=>{var r=i(76781),a=i(23634),f=i(20973),u=i(70267),e=i(6381),p=i(2103),g=a([].push),S=function(M){var w=1==M,x=2==M,B=3==M,W=4==M,j=6==M,q=7==M,ue=5==M||j;return function(re,H,se,ae){for(var Xe,He,ie=u(re),fe=f(ie),he=r(H,se),Ce=e(fe),ce=0,Be=ae||p,Ve=w?Be(re,Ce):x||q?Be(re,0):void 0;Ce>ce;ce++)if((ue||ce in fe)&&(He=he(Xe=fe[ce],ce,ie),M))if(w)Ve[ce]=He;else if(He)switch(M){case 3:return!0;case 5:return Xe;case 6:return ce;case 2:g(Ve,Xe)}else switch(M){case 4:return!1;case 7:g(Ve,Xe)}return j?-1:B||W?W:Ve}};v.exports={forEach:S(0),map:S(1),filter:S(2),some:S(3),every:S(4),find:S(5),findIndex:S(6),filterReject:S(7)}},78375:(v,b,i)=>{"use strict";var r=i(2543),a=i(81010),f=i(33912),u=i(6381),e=i(33620),p=Math.min,g=[].lastIndexOf,S=!!g&&1/[1].lastIndexOf(1,-0)<0,M=e("lastIndexOf");v.exports=S||!M?function(B){if(S)return r(g,this,arguments)||0;var W=a(this),j=u(W),q=j-1;for(arguments.length>1&&(q=p(q,f(arguments[1]))),q<0&&(q=j+q);q>=0;q--)if(q in W&&W[q]===B)return q||0;return-1}:g},95913:(v,b,i)=>{var r=i(55756),a=i(91840),f=i(63556),u=a("species");v.exports=function(e){return f>=51||!r(function(){var p=[];return(p.constructor={})[u]=function(){return{foo:1}},1!==p[e](Boolean).foo})}},33620:(v,b,i)=>{"use strict";var r=i(55756);v.exports=function(a,f){var u=[][a];return!!u&&r(function(){u.call(null,f||function(){return 1},1)})}},88908:(v,b,i)=>{var r=i(61812),a=i(70267),f=i(20973),u=i(6381),e=TypeError,p=function(g){return function(S,M,w,x){r(M);var B=a(S),W=f(B),j=u(B),q=g?j-1:0,ue=g?-1:1;if(w<2)for(;;){if(q in W){x=W[q],q+=ue;break}if(q+=ue,g?q<0:j<=q)throw e("Reduce of empty array with no initial value")}for(;g?q>=0:j>q;q+=ue)q in W&&(x=M(x,W[q],q,B));return x}};v.exports={left:p(!1),right:p(!0)}},54716:(v,b,i)=>{"use strict";var r=i(49642),a=i(89735),f=TypeError,u=Object.getOwnPropertyDescriptor,e=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(p){return p instanceof TypeError}}();v.exports=e?function(p,g){if(a(p)&&!u(p,"length").writable)throw f("Cannot set read only .length");return p.length=g}:function(p,g){return p.length=g}},8681:(v,b,i)=>{var r=i(19401),a=i(6381),f=i(46751),u=Array,e=Math.max;v.exports=function(p,g,S){for(var M=a(p),w=r(g,M),x=r(void 0===S?M:S,M),B=u(e(x-w,0)),W=0;w<x;w++,W++)f(B,W,p[w]);return B.length=W,B}},37591:(v,b,i)=>{var r=i(23634);v.exports=r([].slice)},84865:(v,b,i)=>{var r=i(8681),a=Math.floor,f=function(p,g){var S=p.length,M=a(S/2);return S<8?u(p,g):e(p,f(r(p,0,M),g),f(r(p,M),g),g)},u=function(p,g){for(var w,x,S=p.length,M=1;M<S;){for(x=M,w=p[M];x&&g(p[x-1],w)>0;)p[x]=p[--x];x!==M++&&(p[x]=w)}return p},e=function(p,g,S,M){for(var w=g.length,x=S.length,B=0,W=0;B<w||W<x;)p[B+W]=B<w&&W<x?M(g[B],S[W])<=0?g[B++]:S[W++]:B<w?g[B++]:S[W++];return p};v.exports=f},48045:(v,b,i)=>{var r=i(89735),a=i(81177),f=i(77293),e=i(91840)("species"),p=Array;v.exports=function(g){var S;return r(g)&&(a(S=g.constructor)&&(S===p||r(S.prototype))||f(S)&&null===(S=S[e]))&&(S=void 0),void 0===S?p:S}},2103:(v,b,i)=>{var r=i(48045);v.exports=function(a,f){return new(r(a))(0===f?0:f)}},93463:(v,b,i)=>{var r=i(64562),a=i(40798);v.exports=function(f,u,e,p){try{return p?u(r(e)[0],e[1]):u(e)}catch(g){a(f,"throw",g)}}},49458:v=>{v.exports=function(b,i){return 1==i?function(r,a){return r[b](a)}:function(r,a,f){return r[b](a,f)}}},5253:(v,b,i)=>{var a=i(91840)("iterator"),f=!1;try{var u=0,e={next:function(){return{done:!!u++}},return:function(){f=!0}};e[a]=function(){return this},Array.from(e,function(){throw 2})}catch(p){}v.exports=function(p,g){if(!g&&!f)return!1;var S=!1;try{var M={};M[a]=function(){return{next:function(){return{done:S=!0}}}},p(M)}catch(w){}return S}},49806:(v,b,i)=>{var r=i(23634),a=r({}.toString),f=r("".slice);v.exports=function(u){return f(a(u),8,-1)}},35329:(v,b,i)=>{var r=i(5552),a=i(52208),f=i(49806),e=i(91840)("toStringTag"),p=Object,g="Arguments"==f(function(){return arguments}());v.exports=r?f:function(M){var w,x,B;return void 0===M?"Undefined":null===M?"Null":"string"==typeof(x=function(M,w){try{return M[w]}catch(x){}}(w=p(M),e))?x:g?f(w):"Object"==(B=f(w))&&a(w.callee)?"Arguments":B}},83483:(v,b,i)=>{"use strict";var r=i(76781),a=i(25401),f=i(61812),u=i(54356),e=i(43550),p=i(41605),g=[].push;v.exports=function(M){var B,W,j,q,w=arguments.length,x=w>1?arguments[1]:void 0;return u(this),(B=void 0!==x)&&f(x),e(M)?new this:(W=[],B?(j=0,q=r(x,w>2?arguments[2]:void 0),p(M,function(ue){a(g,W,q(ue,j++))})):p(M,g,{that:W}),new this(W))}},13067:(v,b,i)=>{"use strict";var r=i(37591);v.exports=function(){return new this(r(arguments))}},26650:(v,b,i)=>{"use strict";var r=i(83272),a=i(1707),f=i(84604),u=i(76781),e=i(54849),p=i(43550),g=i(41605),S=i(79077),M=i(28738),w=i(58014),x=i(49642),B=i(57867).fastKey,W=i(91093),j=W.set,q=W.getterFor;v.exports={getConstructor:function(ue,re,H,se){var ae=ue(function(ce,Be){e(ce,ie),j(ce,{type:re,index:r(null),first:void 0,last:void 0,size:0}),x||(ce.size=0),p(Be)||g(Be,ce[se],{that:ce,AS_ENTRIES:H})}),ie=ae.prototype,fe=q(re),he=function(ce,Be,Ve){var Pe,Ge,Xe=fe(ce),He=Ce(ce,Be);return He?He.value=Ve:(Xe.last=He={index:Ge=B(Be,!0),key:Be,value:Ve,previous:Pe=Xe.last,next:void 0,removed:!1},Xe.first||(Xe.first=He),Pe&&(Pe.next=He),x?Xe.size++:ce.size++,"F"!==Ge&&(Xe.index[Ge]=He)),ce},Ce=function(ce,Be){var He,Ve=fe(ce),Xe=B(Be);if("F"!==Xe)return Ve.index[Xe];for(He=Ve.first;He;He=He.next)if(He.key==Be)return He};return f(ie,{clear:function(){for(var Ve=fe(this),Xe=Ve.index,He=Ve.first;He;)He.removed=!0,He.previous&&(He.previous=He.previous.next=void 0),delete Xe[He.index],He=He.next;Ve.first=Ve.last=void 0,x?Ve.size=0:this.size=0},delete:function(ce){var Ve=fe(this),Xe=Ce(this,ce);if(Xe){var He=Xe.next,Pe=Xe.previous;delete Ve.index[Xe.index],Xe.removed=!0,Pe&&(Pe.next=He),He&&(He.previous=Pe),Ve.first==Xe&&(Ve.first=He),Ve.last==Xe&&(Ve.last=Pe),x?Ve.size--:this.size--}return!!Xe},forEach:function(Be){for(var He,Ve=fe(this),Xe=u(Be,arguments.length>1?arguments[1]:void 0);He=He?He.next:Ve.first;)for(Xe(He.value,He.key,this);He&&He.removed;)He=He.previous},has:function(Be){return!!Ce(this,Be)}}),f(ie,H?{get:function(Be){var Ve=Ce(this,Be);return Ve&&Ve.value},set:function(Be,Ve){return he(this,0===Be?0:Be,Ve)}}:{add:function(Be){return he(this,Be=0===Be?0:Be,Be)}}),x&&a(ie,"size",{configurable:!0,get:function(){return fe(this).size}}),ae},setStrong:function(ue,re,H){var se=re+" Iterator",ae=q(re),ie=q(se);S(ue,re,function(fe,he){j(this,{type:se,target:fe,state:ae(fe),kind:he,last:void 0})},function(){for(var fe=ie(this),he=fe.kind,Ce=fe.last;Ce&&Ce.removed;)Ce=Ce.previous;return fe.target&&(fe.last=Ce=Ce?Ce.next:fe.state.first)?M("keys"==he?Ce.key:"values"==he?Ce.value:[Ce.key,Ce.value],!1):(fe.target=void 0,M(void 0,!0))},H?"entries":"values",!H,!0),w(re)}}},85116:(v,b,i)=>{"use strict";var r=i(90513),a=i(70009),f=i(57867),u=i(55756),e=i(65162),p=i(41605),g=i(54849),S=i(52208),M=i(77293),w=i(85681),x=i(48011).f,B=i(68607).forEach,W=i(49642),j=i(91093),q=j.set,ue=j.getterFor;v.exports=function(re,H,se){var Be,ae=-1!==re.indexOf("Map"),ie=-1!==re.indexOf("Weak"),fe=ae?"set":"add",he=a[re],Ce=he&&he.prototype,ce={};if(W&&S(he)&&(ie||Ce.forEach&&!u(function(){(new he).entries().next()}))){var Ve=(Be=H(function(He,Pe){q(g(He,Ve),{type:re,collection:new he}),null!=Pe&&p(Pe,He[fe],{that:He,AS_ENTRIES:ae})})).prototype,Xe=ue(re);B(["add","clear","delete","forEach","get","has","set","keys","values","entries"],function(He){var Pe="add"==He||"set"==He;He in Ce&&(!ie||"clear"!=He)&&e(Ve,He,function(Ge,Oe){var Tt=Xe(this).collection;if(!Pe&&ie&&!M(Ge))return"get"==He&&void 0;var We=Tt[He](0===Ge?0:Ge,Oe);return Pe?this:We})}),ie||x(Ve,"size",{configurable:!0,get:function(){return Xe(this).collection.size}})}else Be=se.getConstructor(H,re,ae,fe),f.enable();return w(Be,re,!1,!0),ce[re]=Be,r({global:!0,forced:!0},ce),ie||se.setStrong(Be,re,ae),Be}},65031:(v,b,i)=>{var r=i(80112),a=i(59823),f=i(25525),u=i(48011);v.exports=function(e,p,g){for(var S=a(p),M=u.f,w=f.f,x=0;x<S.length;x++){var B=S[x];!r(e,B)&&(!g||!r(g,B))&&M(e,B,w(p,B))}}},79668:(v,b,i)=>{var a=i(91840)("match");v.exports=function(f){var u=/./;try{"/./"[f](u)}catch(e){try{return u[a]=!1,"/./"[f](u)}catch(p){}}return!1}},37112:(v,b,i)=>{var r=i(55756);v.exports=!r(function(){function a(){}return a.prototype.constructor=null,Object.getPrototypeOf(new a)!==a.prototype})},28738:v=>{v.exports=function(b,i){return{value:b,done:i}}},65162:(v,b,i)=>{var r=i(49642),a=i(48011),f=i(51361);v.exports=r?function(u,e,p){return a.f(u,e,f(1,p))}:function(u,e,p){return u[e]=p,u}},51361:v=>{v.exports=function(b,i){return{enumerable:!(1&b),configurable:!(2&b),writable:!(4&b),value:i}}},46751:(v,b,i)=>{"use strict";var r=i(62939),a=i(48011),f=i(51361);v.exports=function(u,e,p){var g=r(e);g in u?a.f(u,g,f(0,p)):u[g]=p}},1707:(v,b,i)=>{var r=i(48011);v.exports=function(a,f,u){return r.f(a,f,u)}},42915:(v,b,i)=>{var r=i(65162);v.exports=function(a,f,u,e){return e&&e.enumerable?a[f]=u:r(a,f,u),a}},84604:(v,b,i)=>{var r=i(42915);v.exports=function(a,f,u){for(var e in f)u&&u.unsafe&&a[e]?a[e]=f[e]:r(a,e,f[e],u);return a}},34056:(v,b,i)=>{var r=i(70009),a=Object.defineProperty;v.exports=function(f,u){try{a(r,f,{value:u,configurable:!0,writable:!0})}catch(e){r[f]=u}return u}},67236:(v,b,i)=>{"use strict";var r=i(7378),a=TypeError;v.exports=function(f,u){if(!delete f[u])throw a("Cannot delete property "+r(u)+" of "+r(f))}},49642:(v,b,i)=>{var r=i(55756);v.exports=!r(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},59478:v=>{var b="object"==typeof document&&document.all;v.exports={all:b,IS_HTMLDDA:void 0===b&&void 0!==b}},96682:(v,b,i)=>{var r=i(70009),a=i(77293),f=r.document,u=a(f)&&a(f.createElement);v.exports=function(e){return u?f.createElement(e):{}}},11594:v=>{var b=TypeError;v.exports=function(r){if(r>9007199254740991)throw b("Maximum allowed index exceeded");return r}},44125:v=>{v.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},36410:(v,b,i)=>{var a=i(86053).match(/firefox\/(\d+)/i);v.exports=!!a&&+a[1]},34008:(v,b,i)=>{var r=i(31813),a=i(3787);v.exports=!r&&!a&&"object"==typeof window&&"object"==typeof document},70902:v=>{v.exports="function"==typeof Bun&&Bun&&"string"==typeof Bun.version},31813:v=>{v.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},5329:(v,b,i)=>{var r=i(86053);v.exports=/MSIE|Trident/.test(r)},16137:(v,b,i)=>{var r=i(86053);v.exports=/ipad|iphone|ipod/i.test(r)&&"undefined"!=typeof Pebble},3877:(v,b,i)=>{var r=i(86053);v.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},3787:(v,b,i)=>{var r=i(49806);v.exports="undefined"!=typeof process&&"process"==r(process)},85308:(v,b,i)=>{var r=i(86053);v.exports=/web0s(?!.*chrome)/i.test(r)},86053:v=>{v.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},63556:(v,b,i)=>{var g,S,r=i(70009),a=i(86053),f=r.process,u=r.Deno,e=f&&f.versions||u&&u.version,p=e&&e.v8;p&&(S=(g=p.split("."))[0]>0&&g[0]<4?1:+(g[0]+g[1])),!S&&a&&(!(g=a.match(/Edge\/(\d+)/))||g[1]>=74)&&(g=a.match(/Chrome\/(\d+)/))&&(S=+g[1]),v.exports=S},34545:(v,b,i)=>{var a=i(86053).match(/AppleWebKit\/(\d+)\./);v.exports=!!a&&+a[1]},97911:(v,b,i)=>{var r=i(13544);v.exports=function(a){return r[a+"Prototype"]}},44939:v=>{v.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},40039:(v,b,i)=>{var r=i(23634),a=Error,f=r("".replace),u=String(a("zxcasd").stack),e=/\n\s*at [^:]*:[^\n]*/,p=e.test(u);v.exports=function(g,S){if(p&&"string"==typeof g&&!a.prepareStackTrace)for(;S--;)g=f(g,e,"");return g}},77732:(v,b,i)=>{var r=i(65162),a=i(40039),f=i(50499),u=Error.captureStackTrace;v.exports=function(e,p,g,S){f&&(u?u(e,p):r(e,"stack",a(g,S)))}},50499:(v,b,i)=>{var r=i(55756),a=i(51361);v.exports=!r(function(){var f=Error("a");return!("stack"in f)||(Object.defineProperty(f,"stack",a(1,7)),7!==f.stack)})},90513:(v,b,i)=>{"use strict";var r=i(70009),a=i(2543),f=i(64350),u=i(52208),e=i(25525).f,p=i(79482),g=i(13544),S=i(76781),M=i(65162),w=i(80112),x=function(B){var W=function(j,q,ue){if(this instanceof W){switch(arguments.length){case 0:return new B;case 1:return new B(j);case 2:return new B(j,q)}return new B(j,q,ue)}return a(B,this,arguments)};return W.prototype=B.prototype,W};v.exports=function(B,W){var ie,fe,he,Ce,ce,Be,Ve,Xe,He,j=B.target,q=B.global,ue=B.stat,re=B.proto,H=q?r:ue?r[j]:(r[j]||{}).prototype,se=q?g:g[j]||M(g,j,{})[j],ae=se.prototype;for(Ce in W)fe=!(ie=p(q?Ce:j+(ue?".":"#")+Ce,B.forced))&&H&&w(H,Ce),Be=se[Ce],fe&&(Ve=B.dontCallGetSet?(He=e(H,Ce))&&He.value:H[Ce]),ce=fe&&Ve?Ve:W[Ce],(!fe||typeof Be!=typeof ce)&&(Xe=B.bind&&fe?S(ce,r):B.wrap&&fe?x(ce):re&&u(ce)?f(ce):ce,(B.sham||ce&&ce.sham||Be&&Be.sham)&&M(Xe,"sham",!0),M(se,Ce,Xe),re&&(w(g,he=j+"Prototype")||M(g,he,{}),M(g[he],Ce,ce),B.real&&ae&&(ie||!ae[Ce])&&M(ae,Ce,ce)))}},55756:v=>{v.exports=function(b){try{return!!b()}catch(i){return!0}}},3124:(v,b,i)=>{var r=i(55756);v.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},2543:(v,b,i)=>{var r=i(29046),a=Function.prototype,f=a.apply,u=a.call;v.exports="object"==typeof Reflect&&Reflect.apply||(r?u.bind(f):function(){return u.apply(f,arguments)})},76781:(v,b,i)=>{var r=i(64350),a=i(61812),f=i(29046),u=r(r.bind);v.exports=function(e,p){return a(e),void 0===p?e:f?u(e,p):function(){return e.apply(p,arguments)}}},29046:(v,b,i)=>{var r=i(55756);v.exports=!r(function(){var a=function(){}.bind();return"function"!=typeof a||a.hasOwnProperty("prototype")})},44197:(v,b,i)=>{"use strict";var r=i(23634),a=i(61812),f=i(77293),u=i(80112),e=i(37591),p=i(29046),g=Function,S=r([].concat),M=r([].join),w={},x=function(B,W,j){if(!u(w,W)){for(var q=[],ue=0;ue<W;ue++)q[ue]="a["+ue+"]";w[W]=g("C,a","return new C("+M(q,",")+")")}return w[W](B,j)};v.exports=p?g.bind:function(W){var j=a(this),q=j.prototype,ue=e(arguments,1),re=function(){var se=S(ue,e(arguments));return this instanceof re?x(j,se.length,se):j.apply(W,se)};return f(q)&&(re.prototype=q),re}},25401:(v,b,i)=>{var r=i(29046),a=Function.prototype.call;v.exports=r?a.bind(a):function(){return a.apply(a,arguments)}},29862:(v,b,i)=>{var r=i(49642),a=i(80112),f=Function.prototype,u=r&&Object.getOwnPropertyDescriptor,e=a(f,"name"),p=e&&"something"===function(){}.name,g=e&&(!r||r&&u(f,"name").configurable);v.exports={EXISTS:e,PROPER:p,CONFIGURABLE:g}},13325:(v,b,i)=>{var r=i(23634),a=i(61812);v.exports=function(f,u,e){try{return r(a(Object.getOwnPropertyDescriptor(f,u)[e]))}catch(p){}}},64350:(v,b,i)=>{var r=i(49806),a=i(23634);v.exports=function(f){if("Function"===r(f))return a(f)}},23634:(v,b,i)=>{var r=i(29046),a=Function.prototype,f=a.call,u=r&&a.bind.bind(f,f);v.exports=r?u:function(e){return function(){return f.apply(e,arguments)}}},7365:(v,b,i)=>{var r=i(13544),a=i(70009),f=i(52208),u=function(e){return f(e)?e:void 0};v.exports=function(e,p){return arguments.length<2?u(r[e])||u(a[e]):r[e]&&r[e][p]||a[e]&&a[e][p]}},34014:(v,b,i)=>{var r=i(35329),a=i(34778),f=i(43550),u=i(84394),p=i(91840)("iterator");v.exports=function(g){if(!f(g))return a(g,p)||a(g,"@@iterator")||u[r(g)]}},88055:(v,b,i)=>{var r=i(25401),a=i(61812),f=i(64562),u=i(7378),e=i(34014),p=TypeError;v.exports=function(g,S){var M=arguments.length<2?e(g):S;if(a(M))return f(r(M,g));throw p(u(g)+" is not iterable")}},32092:(v,b,i)=>{var r=i(23634),a=i(89735),f=i(52208),u=i(49806),e=i(41433),p=r([].push);v.exports=function(g){if(f(g))return g;if(a(g)){for(var S=g.length,M=[],w=0;w<S;w++){var x=g[w];"string"==typeof x?p(M,x):("number"==typeof x||"Number"==u(x)||"String"==u(x))&&p(M,e(x))}var B=M.length,W=!0;return function(j,q){if(W)return W=!1,q;if(a(this))return q;for(var ue=0;ue<B;ue++)if(M[ue]===j)return q}}}},34778:(v,b,i)=>{var r=i(61812),a=i(43550);v.exports=function(f,u){var e=f[u];return a(e)?void 0:r(e)}},70009:function(v){var b=function(i){return i&&i.Math==Math&&i};v.exports=b("object"==typeof globalThis&&globalThis)||b("object"==typeof window&&window)||b("object"==typeof self&&self)||b("object"==typeof global&&global)||function(){return this}()||this||Function("return this")()},80112:(v,b,i)=>{var r=i(23634),a=i(70267),f=r({}.hasOwnProperty);v.exports=Object.hasOwn||function(e,p){return f(a(e),p)}},45599:v=>{v.exports={}},52912:v=>{v.exports=function(b,i){try{1==arguments.length?console.error(b):console.error(b,i)}catch(r){}}},55690:(v,b,i)=>{var r=i(7365);v.exports=r("document","documentElement")},50495:(v,b,i)=>{var r=i(49642),a=i(55756),f=i(96682);v.exports=!r&&!a(function(){return 7!=Object.defineProperty(f("div"),"a",{get:function(){return 7}}).a})},20973:(v,b,i)=>{var r=i(23634),a=i(55756),f=i(49806),u=Object,e=r("".split);v.exports=a(function(){return!u("z").propertyIsEnumerable(0)})?function(p){return"String"==f(p)?e(p,""):u(p)}:u},26699:(v,b,i)=>{var r=i(23634),a=i(52208),f=i(24766),u=r(Function.toString);a(f.inspectSource)||(f.inspectSource=function(e){return u(e)}),v.exports=f.inspectSource},33411:(v,b,i)=>{var r=i(77293),a=i(65162);v.exports=function(f,u){r(u)&&"cause"in u&&a(f,"cause",u.cause)}},57867:(v,b,i)=>{var r=i(90513),a=i(23634),f=i(45599),u=i(77293),e=i(80112),p=i(48011).f,g=i(51518),S=i(62469),M=i(46401),w=i(13708),x=i(3124),B=!1,W=w("meta"),j=0,q=function(ie){p(ie,W,{value:{objectID:"O"+j++,weakData:{}}})},ae=v.exports={enable:function(){ae.enable=function(){},B=!0;var ie=g.f,fe=a([].splice),he={};he[W]=1,ie(he).length&&(g.f=function(Ce){for(var ce=ie(Ce),Be=0,Ve=ce.length;Be<Ve;Be++)if(ce[Be]===W){fe(ce,Be,1);break}return ce},r({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:S.f}))},fastKey:function(ie,fe){if(!u(ie))return"symbol"==typeof ie?ie:("string"==typeof ie?"S":"P")+ie;if(!e(ie,W)){if(!M(ie))return"F";if(!fe)return"E";q(ie)}return ie[W].objectID},getWeakData:function(ie,fe){if(!e(ie,W)){if(!M(ie))return!0;if(!fe)return!1;q(ie)}return ie[W].weakData},onFreeze:function(ie){return x&&B&&M(ie)&&!e(ie,W)&&q(ie),ie}};f[W]=!0},91093:(v,b,i)=>{var B,W,j,r=i(81101),a=i(70009),f=i(77293),u=i(65162),e=i(80112),p=i(24766),g=i(86066),S=i(45599),M="Object already initialized",w=a.TypeError;if(r||p.state){var re=p.state||(p.state=new(0,a.WeakMap));re.get=re.get,re.has=re.has,re.set=re.set,B=function(se,ae){if(re.has(se))throw w(M);return ae.facade=se,re.set(se,ae),ae},W=function(se){return re.get(se)||{}},j=function(se){return re.has(se)}}else{var H=g("state");S[H]=!0,B=function(se,ae){if(e(se,H))throw w(M);return ae.facade=se,u(se,H,ae),ae},W=function(se){return e(se,H)?se[H]:{}},j=function(se){return e(se,H)}}v.exports={set:B,get:W,has:j,enforce:function(se){return j(se)?W(se):B(se,{})},getterFor:function(se){return function(ae){var ie;if(!f(ae)||(ie=W(ae)).type!==se)throw w("Incompatible receiver, "+se+" required");return ie}}}},39918:(v,b,i)=>{var r=i(91840),a=i(84394),f=r("iterator"),u=Array.prototype;v.exports=function(e){return void 0!==e&&(a.Array===e||u[f]===e)}},89735:(v,b,i)=>{var r=i(49806);v.exports=Array.isArray||function(f){return"Array"==r(f)}},52208:(v,b,i)=>{var r=i(59478),a=r.all;v.exports=r.IS_HTMLDDA?function(f){return"function"==typeof f||f===a}:function(f){return"function"==typeof f}},81177:(v,b,i)=>{var r=i(23634),a=i(55756),f=i(52208),u=i(35329),e=i(7365),p=i(26699),g=function(){},S=[],M=e("Reflect","construct"),w=/^\s*(?:class|function)\b/,x=r(w.exec),B=!w.exec(g),W=function(ue){if(!f(ue))return!1;try{return M(g,S,ue),!0}catch(re){return!1}},j=function(ue){if(!f(ue))return!1;switch(u(ue)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return B||!!x(w,p(ue))}catch(re){return!0}};j.sham=!0,v.exports=!M||a(function(){var q;return W(W.call)||!W(Object)||!W(function(){q=!0})||q})?j:W},27029:(v,b,i)=>{var r=i(80112);v.exports=function(a){return void 0!==a&&(r(a,"value")||r(a,"writable"))}},79482:(v,b,i)=>{var r=i(55756),a=i(52208),f=/#|\.prototype\./,u=function(M,w){var x=p[e(M)];return x==S||x!=g&&(a(w)?r(w):!!w)},e=u.normalize=function(M){return String(M).replace(f,".").toLowerCase()},p=u.data={},g=u.NATIVE="N",S=u.POLYFILL="P";v.exports=u},43550:v=>{v.exports=function(b){return null==b}},77293:(v,b,i)=>{var r=i(52208),a=i(59478),f=a.all;v.exports=a.IS_HTMLDDA?function(u){return"object"==typeof u?null!==u:r(u)||u===f}:function(u){return"object"==typeof u?null!==u:r(u)}},81124:v=>{v.exports=!0},60373:(v,b,i)=>{var r=i(77293),a=i(49806),u=i(91840)("match");v.exports=function(e){var p;return r(e)&&(void 0!==(p=e[u])?!!p:"RegExp"==a(e))}},74717:(v,b,i)=>{var r=i(7365),a=i(52208),f=i(23336),u=i(99554),e=Object;v.exports=u?function(p){return"symbol"==typeof p}:function(p){var g=r("Symbol");return a(g)&&f(g.prototype,e(p))}},87463:(v,b,i)=>{var r=i(25401);v.exports=function(a,f,u){for(var p,g,e=u||a.next;!(p=r(e,a)).done;)if(void 0!==(g=f(p.value)))return g}},41605:(v,b,i)=>{var r=i(76781),a=i(25401),f=i(64562),u=i(7378),e=i(39918),p=i(6381),g=i(23336),S=i(88055),M=i(34014),w=i(40798),x=TypeError,B=function(j,q){this.stopped=j,this.result=q},W=B.prototype;v.exports=function(j,q,ue){var he,Ce,ce,Be,Ve,Xe,He,H=!(!ue||!ue.AS_ENTRIES),se=!(!ue||!ue.IS_RECORD),ae=!(!ue||!ue.IS_ITERATOR),ie=!(!ue||!ue.INTERRUPTED),fe=r(q,ue&&ue.that),Pe=function(Oe){return he&&w(he,"normal",Oe),new B(!0,Oe)},Ge=function(Oe){return H?(f(Oe),ie?fe(Oe[0],Oe[1],Pe):fe(Oe[0],Oe[1])):ie?fe(Oe,Pe):fe(Oe)};if(se)he=j.iterator;else if(ae)he=j;else{if(!(Ce=M(j)))throw x(u(j)+" is not iterable");if(e(Ce)){for(ce=0,Be=p(j);Be>ce;ce++)if((Ve=Ge(j[ce]))&&g(W,Ve))return Ve;return new B(!1)}he=S(j,Ce)}for(Xe=se?j.next:he.next;!(He=a(Xe,he)).done;){try{Ve=Ge(He.value)}catch(Oe){w(he,"throw",Oe)}if("object"==typeof Ve&&Ve&&g(W,Ve))return Ve}return new B(!1)}},40798:(v,b,i)=>{var r=i(25401),a=i(64562),f=i(34778);v.exports=function(u,e,p){var g,S;a(u);try{if(!(g=f(u,"return"))){if("throw"===e)throw p;return p}g=r(g,u)}catch(M){S=!0,g=M}if("throw"===e)throw p;if(S)throw g;return a(g),p}},14554:(v,b,i)=>{"use strict";var r=i(38432).IteratorPrototype,a=i(83272),f=i(51361),u=i(85681),e=i(84394),p=function(){return this};v.exports=function(g,S,M,w){var x=S+" Iterator";return g.prototype=a(r,{next:f(+!w,M)}),u(g,x,!1,!0),e[x]=p,g}},79077:(v,b,i)=>{"use strict";var r=i(90513),a=i(25401),f=i(81124),u=i(29862),e=i(52208),p=i(14554),g=i(31426),S=i(54945),M=i(85681),w=i(65162),x=i(42915),B=i(91840),W=i(84394),j=i(38432),q=u.PROPER,ue=u.CONFIGURABLE,re=j.IteratorPrototype,H=j.BUGGY_SAFARI_ITERATORS,se=B("iterator"),ie="values",fe="entries",he=function(){return this};v.exports=function(Ce,ce,Be,Ve,Xe,He,Pe){p(Be,ce,Ve);var dn,rn,vt,Ge=function(xt){if(xt===Xe&&Nt)return Nt;if(!H&&xt in We)return We[xt];switch(xt){case"keys":case ie:case fe:return function(){return new Be(this,xt)}}return function(){return new Be(this)}},Oe=ce+" Iterator",Tt=!1,We=Ce.prototype,Qt=We[se]||We["@@iterator"]||Xe&&We[Xe],Nt=!H&&Qt||Ge(Xe),Yt="Array"==ce&&We.entries||Qt;if(Yt&&(dn=g(Yt.call(new Ce)))!==Object.prototype&&dn.next&&(!f&&g(dn)!==re&&(S?S(dn,re):e(dn[se])||x(dn,se,he)),M(dn,Oe,!0,!0),f&&(W[Oe]=he)),q&&Xe==ie&&Qt&&Qt.name!==ie&&(!f&&ue?w(We,"name",ie):(Tt=!0,Nt=function(){return a(Qt,this)})),Xe)if(rn={values:Ge(ie),keys:He?Nt:Ge("keys"),entries:Ge(fe)},Pe)for(vt in rn)(H||Tt||!(vt in We))&&x(We,vt,rn[vt]);else r({target:ce,proto:!0,forced:H||Tt},rn);return(!f||Pe)&&We[se]!==Nt&&x(We,se,Nt,{name:Xe}),W[ce]=Nt,rn}},38432:(v,b,i)=>{"use strict";var x,B,W,r=i(55756),a=i(52208),f=i(77293),u=i(83272),e=i(31426),p=i(42915),g=i(91840),S=i(81124),M=g("iterator"),w=!1;[].keys&&("next"in(W=[].keys())?(B=e(e(W)))!==Object.prototype&&(x=B):w=!0),!f(x)||r(function(){var q={};return x[M].call(q)!==q})?x={}:S&&(x=u(x)),a(x[M])||p(x,M,function(){return this}),v.exports={IteratorPrototype:x,BUGGY_SAFARI_ITERATORS:w}},84394:v=>{v.exports={}},6381:(v,b,i)=>{var r=i(48869);v.exports=function(a){return r(a.length)}},60077:(v,b,i)=>{var r=i(7365),a=i(49458),f=r("Map");v.exports={Map:f,set:a("set",2),get:a("get",1),has:a("has",1),remove:a("delete",1),proto:f.prototype}},21515:(v,b,i)=>{var r=i(87463);v.exports=function(a,f,u){return u?r(a.entries(),function(e){return f(e[1],e[0])}):a.forEach(f)}},57729:(v,b,i)=>{"use strict";var r=i(25401),a=i(61812),f=i(52208),u=i(64562),e=TypeError;v.exports=function(g,S){var j,M=u(this),w=a(M.get),x=a(M.has),B=a(M.set),W=arguments.length>2?arguments[2]:void 0;if(!f(S)&&!f(W))throw e("At least one callback required");return r(x,M,g)?(j=r(w,M,g),f(S)&&(j=S(j),r(B,M,g,j))):f(W)&&(j=W(),r(B,M,g,j)),j}},8651:v=>{var b=Math.ceil,i=Math.floor;v.exports=Math.trunc||function(a){var f=+a;return(f>0?i:b)(f)}},58991:(v,b,i)=>{var ue,re,H,se,ae,r=i(70009),a=i(76781),f=i(25525).f,u=i(37352).set,e=i(70918),p=i(3877),g=i(16137),S=i(85308),M=i(3787),w=r.MutationObserver||r.WebKitMutationObserver,x=r.document,B=r.process,W=r.Promise,j=f(r,"queueMicrotask"),q=j&&j.value;if(!q){var ie=new e,fe=function(){var he,Ce;for(M&&(he=B.domain)&&he.exit();Ce=ie.get();)try{Ce()}catch(ce){throw ie.head&&ue(),ce}he&&he.enter()};p||M||S||!w||!x?!g&&W&&W.resolve?((se=W.resolve(void 0)).constructor=W,ae=a(se.then,se),ue=function(){ae(fe)}):M?ue=function(){B.nextTick(fe)}:(u=a(u,r),ue=function(){u(fe)}):(re=!0,H=x.createTextNode(""),new w(fe).observe(H,{characterData:!0}),ue=function(){H.data=re=!re}),q=function(he){ie.head||ue(),ie.add(he)}}v.exports=q},54256:(v,b,i)=>{"use strict";var r=i(61812),a=TypeError,f=function(u){var e,p;this.promise=new u(function(g,S){if(void 0!==e||void 0!==p)throw a("Bad Promise constructor");e=g,p=S}),this.resolve=r(e),this.reject=r(p)};v.exports.f=function(u){return new f(u)}},63313:(v,b,i)=>{var r=i(41433);v.exports=function(a,f){return void 0===a?arguments.length<2?"":f:r(a)}},56421:(v,b,i)=>{var r=i(60373),a=TypeError;v.exports=function(f){if(r(f))throw a("The method doesn't accept regular expressions");return f}},75791:(v,b,i)=>{"use strict";var r=i(49642),a=i(23634),f=i(25401),u=i(55756),e=i(28474),p=i(47238),g=i(25558),S=i(70267),M=i(20973),w=Object.assign,x=Object.defineProperty,B=a([].concat);v.exports=!w||u(function(){if(r&&1!==w({b:1},w(x({},"a",{enumerable:!0,get:function(){x(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var W={},j={},q=Symbol(),ue="abcdefghijklmnopqrst";return W[q]=7,ue.split("").forEach(function(re){j[re]=re}),7!=w({},W)[q]||e(w({},j)).join("")!=ue})?function(j,q){for(var ue=S(j),re=arguments.length,H=1,se=p.f,ae=g.f;re>H;)for(var ce,ie=M(arguments[H++]),fe=se?B(e(ie),se(ie)):e(ie),he=fe.length,Ce=0;he>Ce;)ce=fe[Ce++],(!r||f(ae,ie,ce))&&(ue[ce]=ie[ce]);return ue}:w},83272:(v,b,i)=>{var re,r=i(64562),a=i(25913),f=i(44939),u=i(45599),e=i(55690),p=i(96682),g=i(86066),w="prototype",x="script",B=g("IE_PROTO"),W=function(){},j=function(se){return"<"+x+">"+se+"</"+x+">"},q=function(se){se.write(j("")),se.close();var ae=se.parentWindow.Object;return se=null,ae},H=function(){try{re=new ActiveXObject("htmlfile")}catch(ae){}H="undefined"!=typeof document?document.domain&&re?q(re):function(){var ie,se=p("iframe");return se.style.display="none",e.appendChild(se),se.src=String("javascript:"),(ie=se.contentWindow.document).open(),ie.write(j("document.F=Object")),ie.close(),ie.F}():q(re);for(var se=f.length;se--;)delete H[w][f[se]];return H()};u[B]=!0,v.exports=Object.create||function(ae,ie){var fe;return null!==ae?(W[w]=r(ae),fe=new W,W[w]=null,fe[B]=ae):fe=H(),void 0===ie?fe:a.f(fe,ie)}},25913:(v,b,i)=>{var r=i(49642),a=i(47960),f=i(48011),u=i(64562),e=i(81010),p=i(28474);b.f=r&&!a?Object.defineProperties:function(S,M){u(S);for(var j,w=e(M),x=p(M),B=x.length,W=0;B>W;)f.f(S,j=x[W++],w[j]);return S}},48011:(v,b,i)=>{var r=i(49642),a=i(50495),f=i(47960),u=i(64562),e=i(62939),p=TypeError,g=Object.defineProperty,S=Object.getOwnPropertyDescriptor,M="enumerable",w="configurable",x="writable";b.f=r?f?function(W,j,q){if(u(W),j=e(j),u(q),"function"==typeof W&&"prototype"===j&&"value"in q&&x in q&&!q[x]){var ue=S(W,j);ue&&ue[x]&&(W[j]=q.value,q={configurable:w in q?q[w]:ue[w],enumerable:M in q?q[M]:ue[M],writable:!1})}return g(W,j,q)}:g:function(W,j,q){if(u(W),j=e(j),u(q),a)try{return g(W,j,q)}catch(ue){}if("get"in q||"set"in q)throw p("Accessors not supported");return"value"in q&&(W[j]=q.value),W}},25525:(v,b,i)=>{var r=i(49642),a=i(25401),f=i(25558),u=i(51361),e=i(81010),p=i(62939),g=i(80112),S=i(50495),M=Object.getOwnPropertyDescriptor;b.f=r?M:function(x,B){if(x=e(x),B=p(B),S)try{return M(x,B)}catch(W){}if(g(x,B))return u(!a(f.f,x,B),x[B])}},62469:(v,b,i)=>{var r=i(49806),a=i(81010),f=i(51518).f,u=i(8681),e="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];v.exports.f=function(S){return e&&"Window"==r(S)?function(g){try{return f(g)}catch(S){return u(e)}}(S):f(a(S))}},51518:(v,b,i)=>{var r=i(66250),f=i(44939).concat("length","prototype");b.f=Object.getOwnPropertyNames||function(e){return r(e,f)}},47238:(v,b)=>{b.f=Object.getOwnPropertySymbols},31426:(v,b,i)=>{var r=i(80112),a=i(52208),f=i(70267),u=i(86066),e=i(37112),p=u("IE_PROTO"),g=Object,S=g.prototype;v.exports=e?g.getPrototypeOf:function(M){var w=f(M);if(r(w,p))return w[p];var x=w.constructor;return a(x)&&w instanceof x?x.prototype:w instanceof g?S:null}},46401:(v,b,i)=>{var r=i(55756),a=i(77293),f=i(49806),u=i(76318),e=Object.isExtensible,p=r(function(){e(1)});v.exports=p||u?function(S){return!(!a(S)||u&&"ArrayBuffer"==f(S))&&(!e||e(S))}:e},23336:(v,b,i)=>{var r=i(23634);v.exports=r({}.isPrototypeOf)},66250:(v,b,i)=>{var r=i(23634),a=i(80112),f=i(81010),u=i(95171).indexOf,e=i(45599),p=r([].push);v.exports=function(g,S){var B,M=f(g),w=0,x=[];for(B in M)!a(e,B)&&a(M,B)&&p(x,B);for(;S.length>w;)a(M,B=S[w++])&&(~u(x,B)||p(x,B));return x}},28474:(v,b,i)=>{var r=i(66250),a=i(44939);v.exports=Object.keys||function(u){return r(u,a)}},25558:(v,b)=>{"use strict";var i={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,a=r&&!i.call({1:2},1);b.f=a?function(u){var e=r(this,u);return!!e&&e.enumerable}:i},54945:(v,b,i)=>{var r=i(13325),a=i(64562),f=i(93221);v.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var p,u=!1,e={};try{(p=r(Object.prototype,"__proto__","set"))(e,[]),u=e instanceof Array}catch(g){}return function(S,M){return a(S),f(M),u?p(S,M):S.__proto__=M,S}}():void 0)},36805:(v,b,i)=>{var r=i(49642),a=i(23634),f=i(28474),u=i(81010),p=a(i(25558).f),g=a([].push),S=function(M){return function(w){for(var ue,x=u(w),B=f(x),W=B.length,j=0,q=[];W>j;)ue=B[j++],(!r||p(x,ue))&&g(q,M?[ue,x[ue]]:x[ue]);return q}};v.exports={entries:S(!0),values:S(!1)}},97686:(v,b,i)=>{"use strict";var r=i(5552),a=i(35329);v.exports=r?{}.toString:function(){return"[object "+a(this)+"]"}},71689:(v,b,i)=>{var r=i(25401),a=i(52208),f=i(77293),u=TypeError;v.exports=function(e,p){var g,S;if("string"===p&&a(g=e.toString)&&!f(S=r(g,e))||a(g=e.valueOf)&&!f(S=r(g,e))||"string"!==p&&a(g=e.toString)&&!f(S=r(g,e)))return S;throw u("Can't convert object to primitive value")}},59823:(v,b,i)=>{var r=i(7365),a=i(23634),f=i(51518),u=i(47238),e=i(64562),p=a([].concat);v.exports=r("Reflect","ownKeys")||function(S){var M=f.f(e(S)),w=u.f;return w?p(M,w(S)):M}},13544:v=>{v.exports={}},26975:v=>{v.exports=function(b){try{return{error:!1,value:b()}}catch(i){return{error:!0,value:i}}}},9936:(v,b,i)=>{var r=i(70009),a=i(46456),f=i(52208),u=i(79482),e=i(26699),p=i(91840),g=i(34008),S=i(31813),M=i(81124),w=i(63556),x=a&&a.prototype,B=p("species"),W=!1,j=f(r.PromiseRejectionEvent),q=u("Promise",function(){var ue=e(a),re=ue!==String(a);if(!re&&66===w||M&&(!x.catch||!x.finally))return!0;if(!w||w<51||!/native code/.test(ue)){var H=new a(function(ie){ie(1)}),se=function(ie){ie(function(){},function(){})};if((H.constructor={})[B]=se,!(W=H.then(function(){})instanceof se))return!0}return!re&&(g||S)&&!j});v.exports={CONSTRUCTOR:q,REJECTION_EVENT:j,SUBCLASSING:W}},46456:(v,b,i)=>{var r=i(70009);v.exports=r.Promise},25524:(v,b,i)=>{var r=i(64562),a=i(77293),f=i(54256);v.exports=function(u,e){if(r(u),a(e)&&e.constructor===u)return e;var p=f.f(u);return(0,p.resolve)(e),p.promise}},95758:(v,b,i)=>{var r=i(46456),a=i(5253),f=i(9936).CONSTRUCTOR;v.exports=f||!a(function(u){r.all(u).then(void 0,function(){})})},70918:v=>{var b=function(){this.head=null,this.tail=null};b.prototype={add:function(i){var r={item:i,next:null},a=this.tail;a?a.next=r:this.head=r,this.tail=r},get:function(){var i=this.head;if(i)return null===(this.head=i.next)&&(this.tail=null),i.item}},v.exports=b},67917:(v,b,i)=>{var r=i(43550),a=TypeError;v.exports=function(f){if(r(f))throw a("Can't call method on "+f);return f}},29627:v=>{v.exports=function(b,i){return b===i||b!=b&&i!=i}},53814:(v,b,i)=>{"use strict";var w,r=i(70009),a=i(2543),f=i(52208),u=i(70902),e=i(86053),p=i(37591),g=i(15086),S=r.Function,M=/MSIE .\./.test(e)||u&&((w=r.Bun.version.split(".")).length<3||0==w[0]&&(w[1]<3||3==w[1]&&0==w[2]));v.exports=function(w,x){var B=x?2:1;return M?function(W,j){var q=g(arguments.length,1)>B,ue=f(W)?W:S(W),re=q?p(arguments,B):[],H=q?function(){a(ue,this,re)}:ue;return x?w(H,j):w(H)}:w}},58014:(v,b,i)=>{"use strict";var r=i(7365),a=i(1707),f=i(91840),u=i(49642),e=f("species");v.exports=function(p){var g=r(p);u&&g&&!g[e]&&a(g,e,{configurable:!0,get:function(){return this}})}},85681:(v,b,i)=>{var r=i(5552),a=i(48011).f,f=i(65162),u=i(80112),e=i(97686),g=i(91840)("toStringTag");v.exports=function(S,M,w,x){if(S){var B=w?S:S.prototype;u(B,g)||a(B,g,{configurable:!0,value:M}),x&&!r&&f(B,"toString",e)}}},86066:(v,b,i)=>{var r=i(64579),a=i(13708),f=r("keys");v.exports=function(u){return f[u]||(f[u]=a(u))}},24766:(v,b,i)=>{var r=i(70009),a=i(34056),f="__core-js_shared__",u=r[f]||a(f,{});v.exports=u},64579:(v,b,i)=>{var r=i(81124),a=i(24766);(v.exports=function(f,u){return a[f]||(a[f]=void 0!==u?u:{})})("versions",[]).push({version:"3.30.2",mode:r?"pure":"global",copyright:"\xa9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.30.2/LICENSE",source:"https://github.com/zloirock/core-js"})},95869:(v,b,i)=>{var r=i(64562),a=i(54356),f=i(43550),e=i(91840)("species");v.exports=function(p,g){var M,S=r(p).constructor;return void 0===S||f(M=r(S)[e])?g:a(M)}},61557:(v,b,i)=>{var r=i(23634),a=i(33912),f=i(41433),u=i(67917),e=r("".charAt),p=r("".charCodeAt),g=r("".slice),S=function(M){return function(w,x){var q,ue,B=f(u(w)),W=a(x),j=B.length;return W<0||W>=j?M?"":void 0:(q=p(B,W))<55296||q>56319||W+1===j||(ue=p(B,W+1))<56320||ue>57343?M?e(B,W):q:M?g(B,W,W+2):ue-56320+(q-55296<<10)+65536}};v.exports={codeAt:S(!1),charAt:S(!0)}},26662:(v,b,i)=>{var r=i(23634),a=2147483647,x=/[^\0-\u007E]/,B=/[.\u3002\uFF0E\uFF61]/g,W="Overflow: input needs wider integers to process",q=RangeError,ue=r(B.exec),re=Math.floor,H=String.fromCharCode,se=r("".charCodeAt),ae=r([].join),ie=r([].push),fe=r("".replace),he=r("".split),Ce=r("".toLowerCase),Be=function(He){return He+22+75*(He<26)},Ve=function(He,Pe,Ge){var Oe=0;for(He=Ge?re(He/700):He>>1,He+=re(He/Pe);He>455;)He=re(He/35),Oe+=36;return re(Oe+36*He/(He+38))},Xe=function(He){var Pe=[];He=function(He){for(var Pe=[],Ge=0,Oe=He.length;Ge<Oe;){var Tt=se(He,Ge++);if(Tt>=55296&&Tt<=56319&&Ge<Oe){var We=se(He,Ge++);56320==(64512&We)?ie(Pe,((1023&Tt)<<10)+(1023&We)+65536):(ie(Pe,Tt),Ge--)}else ie(Pe,Tt)}return Pe}(He);var Qt,Nt,Ge=He.length,Oe=128,Tt=0,We=72;for(Qt=0;Qt<He.length;Qt++)(Nt=He[Qt])<128&&ie(Pe,H(Nt));var Yt=Pe.length,dn=Yt;for(Yt&&ie(Pe,"-");dn<Ge;){var rn=a;for(Qt=0;Qt<He.length;Qt++)(Nt=He[Qt])>=Oe&&Nt<rn&&(rn=Nt);var vt=dn+1;if(rn-Oe>re((a-Tt)/vt))throw q(W);for(Tt+=(rn-Oe)*vt,Oe=rn,Qt=0;Qt<He.length;Qt++){if((Nt=He[Qt])<Oe&&++Tt>a)throw q(W);if(Nt==Oe){for(var xt=Tt,Ct=36;;){var Gt=Ct<=We?1:Ct>=We+26?26:Ct-We;if(xt<Gt)break;var Fn=xt-Gt,pr=36-Gt;ie(Pe,H(Be(Gt+Fn%pr))),xt=re(Fn/pr),Ct+=36}ie(Pe,H(Be(xt))),We=Ve(Tt,vt,dn==Yt),Tt=0,dn++}}Tt++,Oe++}return ae(Pe,"")};v.exports=function(He){var Oe,Tt,Pe=[],Ge=he(fe(Ce(He),B,"."),".");for(Oe=0;Oe<Ge.length;Oe++)ie(Pe,ue(x,Tt=Ge[Oe])?"xn--"+Xe(Tt):Tt);return ae(Pe,".")}},53411:(v,b,i)=>{"use strict";var r=i(33912),a=i(41433),f=i(67917),u=RangeError;v.exports=function(p){var g=a(f(this)),S="",M=r(p);if(M<0||M==1/0)throw u("Wrong number of repetitions");for(;M>0;(M>>>=1)&&(g+=g))1&M&&(S+=g);return S}},85462:(v,b,i)=>{var r=i(29862).PROPER,a=i(55756),f=i(88185);v.exports=function(e){return a(function(){return!!f[e]()||"\u200b\x85\u180e"!=="\u200b\x85\u180e"[e]()||r&&f[e].name!==e})}},89858:(v,b,i)=>{var r=i(23634),a=i(67917),f=i(41433),u=i(88185),e=r("".replace),p=RegExp("^["+u+"]+"),g=RegExp("(^|[^"+u+"])["+u+"]+$"),S=function(M){return function(w){var x=f(a(w));return 1&M&&(x=e(x,p,"")),2&M&&(x=e(x,g,"$1")),x}};v.exports={start:S(1),end:S(2),trim:S(3)}},98535:(v,b,i)=>{var r=i(63556),a=i(55756),u=i(70009).String;v.exports=!!Object.getOwnPropertySymbols&&!a(function(){var e=Symbol();return!u(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41})},56992:(v,b,i)=>{var r=i(25401),a=i(7365),f=i(91840),u=i(42915);v.exports=function(){var e=a("Symbol"),p=e&&e.prototype,g=p&&p.valueOf,S=f("toPrimitive");p&&!p[S]&&u(p,S,function(M){return r(g,this)},{arity:1})}},56709:(v,b,i)=>{var r=i(98535);v.exports=r&&!!Symbol.for&&!!Symbol.keyFor},37352:(v,b,i)=>{var he,Ce,ce,Be,r=i(70009),a=i(2543),f=i(76781),u=i(52208),e=i(80112),p=i(55756),g=i(55690),S=i(37591),M=i(96682),w=i(15086),x=i(3877),B=i(3787),W=r.setImmediate,j=r.clearImmediate,q=r.process,ue=r.Dispatch,re=r.Function,H=r.MessageChannel,se=r.String,ae=0,ie={},fe="onreadystatechange";p(function(){he=r.location});var Ve=function(Ge){if(e(ie,Ge)){var Oe=ie[Ge];delete ie[Ge],Oe()}},Xe=function(Ge){return function(){Ve(Ge)}},He=function(Ge){Ve(Ge.data)},Pe=function(Ge){r.postMessage(se(Ge),he.protocol+"//"+he.host)};(!W||!j)&&(W=function(Oe){w(arguments.length,1);var Tt=u(Oe)?Oe:re(Oe),We=S(arguments,1);return ie[++ae]=function(){a(Tt,void 0,We)},Ce(ae),ae},j=function(Oe){delete ie[Oe]},B?Ce=function(Ge){q.nextTick(Xe(Ge))}:ue&&ue.now?Ce=function(Ge){ue.now(Xe(Ge))}:H&&!x?(Be=(ce=new H).port2,ce.port1.onmessage=He,Ce=f(Be.postMessage,Be)):r.addEventListener&&u(r.postMessage)&&!r.importScripts&&he&&"file:"!==he.protocol&&!p(Pe)?(Ce=Pe,r.addEventListener("message",He,!1)):Ce=fe in M("script")?function(Ge){g.appendChild(M("script"))[fe]=function(){g.removeChild(this),Ve(Ge)}}:function(Ge){setTimeout(Xe(Ge),0)}),v.exports={set:W,clear:j}},19401:(v,b,i)=>{var r=i(33912),a=Math.max,f=Math.min;v.exports=function(u,e){var p=r(u);return p<0?a(p+e,0):f(p,e)}},81010:(v,b,i)=>{var r=i(20973),a=i(67917);v.exports=function(f){return r(a(f))}},33912:(v,b,i)=>{var r=i(8651);v.exports=function(a){var f=+a;return f!=f||0===f?0:r(f)}},48869:(v,b,i)=>{var r=i(33912),a=Math.min;v.exports=function(f){return f>0?a(r(f),9007199254740991):0}},70267:(v,b,i)=>{var r=i(67917),a=Object;v.exports=function(f){return a(r(f))}},1645:(v,b,i)=>{var r=i(25401),a=i(77293),f=i(74717),u=i(34778),e=i(71689),p=i(91840),g=TypeError,S=p("toPrimitive");v.exports=function(M,w){if(!a(M)||f(M))return M;var B,x=u(M,S);if(x){if(void 0===w&&(w="default"),B=r(x,M,w),!a(B)||f(B))return B;throw g("Can't convert object to primitive value")}return void 0===w&&(w="number"),e(M,w)}},62939:(v,b,i)=>{var r=i(1645),a=i(74717);v.exports=function(f){var u=r(f,"string");return a(u)?u:u+""}},5552:(v,b,i)=>{var f={};f[i(91840)("toStringTag")]="z",v.exports="[object z]"===String(f)},41433:(v,b,i)=>{var r=i(35329),a=String;v.exports=function(f){if("Symbol"===r(f))throw TypeError("Cannot convert a Symbol value to a string");return a(f)}},7378:v=>{var b=String;v.exports=function(i){try{return b(i)}catch(r){return"Object"}}},13708:(v,b,i)=>{var r=i(23634),a=0,f=Math.random(),u=r(1..toString);v.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+u(++a+f,36)}},54933:(v,b,i)=>{var r=i(55756),a=i(91840),f=i(49642),u=i(81124),e=a("iterator");v.exports=!r(function(){var p=new URL("b?a=1&b=2&c=3","http://a"),g=p.searchParams,S="";return p.pathname="c%20d",g.forEach(function(M,w){g.delete("b"),S+=w+M}),u&&!p.toJSON||!g.size&&(u||!f)||!g.sort||"http://a/c%20d?a=1&c=3"!==p.href||"3"!==g.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!g[e]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://\u0442\u0435\u0441\u0442").host||"#%D0%B1"!==new URL("http://a#\u0431").hash||"a1c3"!==S||"x"!==new URL("http://x",void 0).host})},99554:(v,b,i)=>{var r=i(98535);v.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},47960:(v,b,i)=>{var r=i(49642),a=i(55756);v.exports=r&&a(function(){return 42!=Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},15086:v=>{var b=TypeError;v.exports=function(i,r){if(i<r)throw b("Not enough arguments");return i}},81101:(v,b,i)=>{var r=i(70009),a=i(52208),f=r.WeakMap;v.exports=a(f)&&/native code/.test(String(f))},25374:(v,b,i)=>{var r=i(13544),a=i(80112),f=i(89734),u=i(48011).f;v.exports=function(e){var p=r.Symbol||(r.Symbol={});a(p,e)||u(p,e,{value:f.f(e)})}},89734:(v,b,i)=>{var r=i(91840);b.f=r},91840:(v,b,i)=>{var r=i(70009),a=i(64579),f=i(80112),u=i(13708),e=i(98535),p=i(99554),g=r.Symbol,S=a("wks"),M=p?g.for||g:g&&g.withoutSetter||u;v.exports=function(w){return f(S,w)||(S[w]=e&&f(g,w)?g[w]:M("Symbol."+w)),S[w]}},88185:v=>{v.exports="\t\n\v\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},70210:(v,b,i)=>{"use strict";var r=i(90513),a=i(23336),f=i(31426),u=i(54945),e=i(65031),p=i(83272),g=i(65162),S=i(51361),M=i(33411),w=i(77732),x=i(41605),B=i(63313),j=i(91840)("toStringTag"),q=Error,ue=[].push,re=function(ae,ie){var he,fe=a(H,this);u?he=u(q(),fe?f(this):H):(he=fe?this:p(H),g(he,j,"Error")),void 0!==ie&&g(he,"message",B(ie)),w(he,re,he.stack,1),arguments.length>2&&M(he,arguments[2]);var Ce=[];return x(ae,ue,{that:Ce}),g(he,"errors",Ce),he};u?u(re,q):e(re,q,{name:!0});var H=re.prototype=p(q.prototype,{constructor:S(1,re),message:S(1,""),name:S(1,"AggregateError")});r({global:!0,constructor:!0,arity:2},{AggregateError:re})},10901:(v,b,i)=>{i(70210)},1625:(v,b,i)=>{"use strict";var r=i(90513),a=i(55756),f=i(89735),u=i(77293),e=i(70267),p=i(6381),g=i(11594),S=i(46751),M=i(2103),w=i(95913),x=i(91840),B=i(63556),W=x("isConcatSpreadable"),j=B>=51||!a(function(){var re=[];return re[W]=!1,re.concat()[0]!==re}),q=function(re){if(!u(re))return!1;var H=re[W];return void 0!==H?!!H:f(re)};r({target:"Array",proto:!0,arity:1,forced:!j||!w("concat")},{concat:function(H){var fe,he,Ce,ce,Be,se=e(this),ae=M(se,0),ie=0;for(fe=-1,Ce=arguments.length;fe<Ce;fe++)if(q(Be=-1===fe?se:arguments[fe]))for(ce=p(Be),g(ie+ce),he=0;he<ce;he++,ie++)he in Be&&S(ae,ie,Be[he]);else g(ie+1),S(ae,ie++,Be);return ae.length=ie,ae}})},70466:(v,b,i)=>{"use strict";var r=i(90513),a=i(68607).every;r({target:"Array",proto:!0,forced:!i(33620)("every")},{every:function(p){return a(this,p,arguments.length>1?arguments[1]:void 0)}})},24990:(v,b,i)=>{var r=i(90513),a=i(35277),f=i(82196);r({target:"Array",proto:!0},{fill:a}),f("fill")},56534:(v,b,i)=>{"use strict";var r=i(90513),a=i(68607).filter;r({target:"Array",proto:!0,forced:!i(95913)("filter")},{filter:function(p){return a(this,p,arguments.length>1?arguments[1]:void 0)}})},12773:(v,b,i)=>{"use strict";var r=i(90513),a=i(68607).findIndex,f=i(82196),u="findIndex",e=!0;u in[]&&Array(1)[u](function(){e=!1}),r({target:"Array",proto:!0,forced:e},{findIndex:function(g){return a(this,g,arguments.length>1?arguments[1]:void 0)}}),f(u)},60326:(v,b,i)=>{"use strict";var r=i(90513),a=i(68607).find,f=i(82196),u="find",e=!0;u in[]&&Array(1)[u](function(){e=!1}),r({target:"Array",proto:!0,forced:e},{find:function(g){return a(this,g,arguments.length>1?arguments[1]:void 0)}}),f(u)},98792:(v,b,i)=>{"use strict";var r=i(90513),a=i(8366);r({target:"Array",proto:!0,forced:[].forEach!=a},{forEach:a})},261:(v,b,i)=>{var r=i(90513),a=i(51923);r({target:"Array",stat:!0,forced:!i(5253)(function(e){Array.from(e)})},{from:a})},77059:(v,b,i)=>{"use strict";var r=i(90513),a=i(95171).includes,f=i(55756),u=i(82196);r({target:"Array",proto:!0,forced:f(function(){return!Array(1).includes()})},{includes:function(g){return a(this,g,arguments.length>1?arguments[1]:void 0)}}),u("includes")},2795:(v,b,i)=>{"use strict";var r=i(90513),a=i(64350),f=i(95171).indexOf,u=i(33620),e=a([].indexOf),p=!!e&&1/e([1],1,-0)<0;r({target:"Array",proto:!0,forced:p||!u("indexOf")},{indexOf:function(M){var w=arguments.length>1?arguments[1]:void 0;return p?e(this,M,w)||0:f(this,M,w)}})},2862:(v,b,i)=>{i(90513)({target:"Array",stat:!0},{isArray:i(89735)})},1285:(v,b,i)=>{"use strict";var r=i(81010),a=i(82196),f=i(84394),u=i(91093),e=i(48011).f,p=i(79077),g=i(28738),S=i(81124),M=i(49642),w="Array Iterator",x=u.set,B=u.getterFor(w);v.exports=p(Array,"Array",function(j,q){x(this,{type:w,target:r(j),index:0,kind:q})},function(){var j=B(this),q=j.target,ue=j.kind,re=j.index++;return!q||re>=q.length?(j.target=void 0,g(void 0,!0)):g("keys"==ue?re:"values"==ue?q[re]:[re,q[re]],!1)},"values");var W=f.Arguments=f.Array;if(a("keys"),a("values"),a("entries"),!S&&M&&"values"!==W.name)try{e(W,"name",{value:"values"})}catch(j){}},74926:(v,b,i)=>{var r=i(90513),a=i(78375);r({target:"Array",proto:!0,forced:a!==[].lastIndexOf},{lastIndexOf:a})},88119:(v,b,i)=>{"use strict";var r=i(90513),a=i(68607).map;r({target:"Array",proto:!0,forced:!i(95913)("map")},{map:function(p){return a(this,p,arguments.length>1?arguments[1]:void 0)}})},46250:(v,b,i)=>{"use strict";var r=i(90513),a=i(88908).left,f=i(33620),u=i(63556);r({target:"Array",proto:!0,forced:!i(3787)&&u>79&&u<83||!f("reduce")},{reduce:function(M){var w=arguments.length;return a(this,M,w,w>1?arguments[1]:void 0)}})},32836:(v,b,i)=>{"use strict";var r=i(90513),a=i(23634),f=i(89735),u=a([].reverse),e=[1,2];r({target:"Array",proto:!0,forced:String(e)===String(e.reverse())},{reverse:function(){return f(this)&&(this.length=this.length),u(this)}})},72999:(v,b,i)=>{"use strict";var r=i(90513),a=i(89735),f=i(81177),u=i(77293),e=i(19401),p=i(6381),g=i(81010),S=i(46751),M=i(91840),w=i(95913),x=i(37591),B=w("slice"),W=M("species"),j=Array,q=Math.max;r({target:"Array",proto:!0,forced:!B},{slice:function(re,H){var he,Ce,ce,se=g(this),ae=p(se),ie=e(re,ae),fe=e(void 0===H?ae:H,ae);if(a(se)&&((f(he=se.constructor)&&(he===j||a(he.prototype))||u(he)&&null===(he=he[W]))&&(he=void 0),he===j||void 0===he))return x(se,ie,fe);for(Ce=new(void 0===he?j:he)(q(fe-ie,0)),ce=0;ie<fe;ie++,ce++)ie in se&&S(Ce,ce,se[ie]);return Ce.length=ce,Ce}})},50733:(v,b,i)=>{"use strict";var r=i(90513),a=i(68607).some;r({target:"Array",proto:!0,forced:!i(33620)("some")},{some:function(p){return a(this,p,arguments.length>1?arguments[1]:void 0)}})},93639:(v,b,i)=>{"use strict";var r=i(90513),a=i(23634),f=i(61812),u=i(70267),e=i(6381),p=i(67236),g=i(41433),S=i(55756),M=i(84865),w=i(33620),x=i(36410),B=i(5329),W=i(63556),j=i(34545),q=[],ue=a(q.sort),re=a(q.push),H=S(function(){q.sort(void 0)}),se=S(function(){q.sort(null)}),ae=w("sort"),ie=!S(function(){if(W)return W<70;if(!(x&&x>3)){if(B)return!0;if(j)return j<603;var ce,Be,Ve,Xe,Ce="";for(ce=65;ce<76;ce++){switch(Be=String.fromCharCode(ce),ce){case 66:case 69:case 70:case 72:Ve=3;break;case 68:case 71:Ve=4;break;default:Ve=2}for(Xe=0;Xe<47;Xe++)q.push({k:Be+Xe,v:Ve})}for(q.sort(function(He,Pe){return Pe.v-He.v}),Xe=0;Xe<q.length;Xe++)Be=q[Xe].k.charAt(0),Ce.charAt(Ce.length-1)!==Be&&(Ce+=Be);return"DGBEFHACIJK"!==Ce}});r({target:"Array",proto:!0,forced:H||!se||!ae||!ie},{sort:function(ce){void 0!==ce&&f(ce);var Be=u(this);if(ie)return void 0===ce?ue(Be):ue(Be,ce);var He,Pe,Ve=[],Xe=e(Be);for(Pe=0;Pe<Xe;Pe++)Pe in Be&&re(Ve,Be[Pe]);for(M(Ve,function(Ce){return function(ce,Be){return void 0===Be?-1:void 0===ce?1:void 0!==Ce?+Ce(ce,Be)||0:g(ce)>g(Be)?1:-1}}(ce)),He=e(Ve),Pe=0;Pe<He;)Be[Pe]=Ve[Pe++];for(;Pe<Xe;)p(Be,Pe++);return Be}})},63117:(v,b,i)=>{"use strict";var r=i(90513),a=i(70267),f=i(19401),u=i(33912),e=i(6381),p=i(54716),g=i(11594),S=i(2103),M=i(46751),w=i(67236),B=i(95913)("splice"),W=Math.max,j=Math.min;r({target:"Array",proto:!0,forced:!B},{splice:function(ue,re){var fe,he,Ce,ce,Be,Ve,H=a(this),se=e(H),ae=f(ue,se),ie=arguments.length;for(0===ie?fe=he=0:1===ie?(fe=0,he=se-ae):(fe=ie-2,he=j(W(u(re),0),se-ae)),g(se+fe-he),Ce=S(H,he),ce=0;ce<he;ce++)(Be=ae+ce)in H&&M(Ce,ce,H[Be]);if(Ce.length=he,fe<he){for(ce=ae;ce<se-he;ce++)Ve=ce+fe,(Be=ce+he)in H?H[Ve]=H[Be]:w(H,Ve);for(ce=se;ce>se-he+fe;ce--)w(H,ce-1)}else if(fe>he)for(ce=se-he;ce>ae;ce--)Ve=ce+fe-1,(Be=ce+he-1)in H?H[Ve]=H[Be]:w(H,Ve);for(ce=0;ce<fe;ce++)H[ce+ae]=arguments[ce+2];return p(H,se-he+fe),Ce}})},34699:(v,b,i)=>{var r=i(90513),a=i(23634),f=Date,u=a(f.prototype.getTime);r({target:"Date",stat:!0},{now:function(){return u(new f)}})},68154:()=>{},33379:(v,b,i)=>{var r=i(90513),a=i(44197);r({target:"Function",proto:!0,forced:Function.bind!==a},{bind:a})},75071:(v,b,i)=>{var r=i(90513),a=i(7365),f=i(2543),u=i(25401),e=i(23634),p=i(55756),g=i(52208),S=i(74717),M=i(37591),w=i(32092),x=i(98535),B=String,W=a("JSON","stringify"),j=e(/./.exec),q=e("".charAt),ue=e("".charCodeAt),re=e("".replace),H=e(1..toString),se=/[\uD800-\uDFFF]/g,ae=/^[\uD800-\uDBFF]$/,ie=/^[\uDC00-\uDFFF]$/,fe=!x||p(function(){var Be=a("Symbol")();return"[null]"!=W([Be])||"{}"!=W({a:Be})||"{}"!=W(Object(Be))}),he=p(function(){return'"\\udf06\\ud834"'!==W("\udf06\ud834")||'"\\udead"'!==W("\udead")}),Ce=function(Be,Ve){var Xe=M(arguments),He=w(Ve);if(g(He)||void 0!==Be&&!S(Be))return Xe[1]=function(Pe,Ge){if(g(He)&&(Ge=u(He,this,B(Pe),Ge)),!S(Ge))return Ge},f(W,null,Xe)},ce=function(Be,Ve,Xe){var He=q(Xe,Ve-1),Pe=q(Xe,Ve+1);return j(ae,Be)&&!j(ie,Pe)||j(ie,Be)&&!j(ae,He)?"\\u"+H(ue(Be,0),16):Be};W&&r({target:"JSON",stat:!0,arity:3,forced:fe||he},{stringify:function(Ve,Xe,He){var Pe=M(arguments),Ge=f(fe?Ce:W,null,Pe);return he&&"string"==typeof Ge?re(Ge,se,ce):Ge}})},32300:(v,b,i)=>{var r=i(70009);i(85681)(r.JSON,"JSON",!0)},83616:(v,b,i)=>{"use strict";i(85116)("Map",function(f){return function(){return f(this,arguments.length?arguments[0]:void 0)}},i(26650))},85140:(v,b,i)=>{i(83616)},63603:()=>{},67234:(v,b,i)=>{var r=i(90513),a=i(75791);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==a},{assign:a})},86516:(v,b,i)=>{i(90513)({target:"Object",stat:!0,sham:!i(49642)},{create:i(83272)})},36255:(v,b,i)=>{var r=i(90513),a=i(49642),f=i(25913).f;r({target:"Object",stat:!0,forced:Object.defineProperties!==f,sham:!a},{defineProperties:f})},84468:(v,b,i)=>{var r=i(90513),a=i(49642),f=i(48011).f;r({target:"Object",stat:!0,forced:Object.defineProperty!==f,sham:!a},{defineProperty:f})},86627:(v,b,i)=>{var r=i(90513),a=i(55756),f=i(81010),u=i(25525).f,e=i(49642);r({target:"Object",stat:!0,forced:!e||a(function(){u(1)}),sham:!e},{getOwnPropertyDescriptor:function(S,M){return u(f(S),M)}})},78275:(v,b,i)=>{var r=i(90513),a=i(49642),f=i(59823),u=i(81010),e=i(25525),p=i(46751);r({target:"Object",stat:!0,sham:!a},{getOwnPropertyDescriptors:function(S){for(var j,q,M=u(S),w=e.f,x=f(M),B={},W=0;x.length>W;)void 0!==(q=w(M,j=x[W++]))&&p(B,j,q);return B}})},37764:(v,b,i)=>{var r=i(90513),a=i(98535),f=i(55756),u=i(47238),e=i(70267);r({target:"Object",stat:!0,forced:!a||f(function(){u.f(1)})},{getOwnPropertySymbols:function(S){var M=u.f;return M?M(e(S)):[]}})},31193:(v,b,i)=>{var r=i(90513),a=i(55756),f=i(70267),u=i(31426),e=i(37112);r({target:"Object",stat:!0,forced:a(function(){u(1)}),sham:!e},{getPrototypeOf:function(S){return u(f(S))}})},56557:(v,b,i)=>{var r=i(90513),a=i(70267),f=i(28474);r({target:"Object",stat:!0,forced:i(55756)(function(){f(1)})},{keys:function(g){return f(a(g))}})},17971:(v,b,i)=>{i(90513)({target:"Object",stat:!0},{setPrototypeOf:i(54945)})},17221:()=>{},88923:(v,b,i)=>{var r=i(90513),a=i(36805).values;r({target:"Object",stat:!0},{values:function(u){return a(u)}})},84798:(v,b,i)=>{"use strict";var r=i(90513),a=i(25401),f=i(61812),u=i(54256),e=i(26975),p=i(41605);r({target:"Promise",stat:!0,forced:i(95758)},{allSettled:function(M){var w=this,x=u.f(w),B=x.resolve,W=x.reject,j=e(function(){var q=f(w.resolve),ue=[],re=0,H=1;p(M,function(se){var ae=re++,ie=!1;H++,a(q,w,se).then(function(fe){ie||(ie=!0,ue[ae]={status:"fulfilled",value:fe},--H||B(ue))},function(fe){ie||(ie=!0,ue[ae]={status:"rejected",reason:fe},--H||B(ue))})}),--H||B(ue)});return j.error&&W(j.value),x.promise}})},58085:(v,b,i)=>{"use strict";var r=i(90513),a=i(25401),f=i(61812),u=i(54256),e=i(26975),p=i(41605);r({target:"Promise",stat:!0,forced:i(95758)},{all:function(M){var w=this,x=u.f(w),B=x.resolve,W=x.reject,j=e(function(){var q=f(w.resolve),ue=[],re=0,H=1;p(M,function(se){var ae=re++,ie=!1;H++,a(q,w,se).then(function(fe){ie||(ie=!0,ue[ae]=fe,--H||B(ue))},W)}),--H||B(ue)});return j.error&&W(j.value),x.promise}})},98857:(v,b,i)=>{"use strict";var r=i(90513),a=i(25401),f=i(61812),u=i(7365),e=i(54256),p=i(26975),g=i(41605),S=i(95758),M="No one promise resolved";r({target:"Promise",stat:!0,forced:S},{any:function(x){var B=this,W=u("AggregateError"),j=e.f(B),q=j.resolve,ue=j.reject,re=p(function(){var H=f(B.resolve),se=[],ae=0,ie=1,fe=!1;g(x,function(he){var Ce=ae++,ce=!1;ie++,a(H,B,he).then(function(Be){ce||fe||(fe=!0,q(Be))},function(Be){ce||fe||(ce=!0,se[Ce]=Be,--ie||ue(new W(se,M)))})}),--ie||ue(new W(se,M))});return re.error&&ue(re.value),j.promise}})},5846:(v,b,i)=>{"use strict";var r=i(90513),a=i(81124),f=i(9936).CONSTRUCTOR,u=i(46456),e=i(7365),p=i(52208),g=i(42915),S=u&&u.prototype;if(r({target:"Promise",proto:!0,forced:f,real:!0},{catch:function(w){return this.then(void 0,w)}}),!a&&p(u)){var M=e("Promise").prototype.catch;S.catch!==M&&g(S,"catch",M,{unsafe:!0})}},38206:(v,b,i)=>{"use strict";var mi,ci,Br,r=i(90513),a=i(81124),f=i(3787),u=i(70009),e=i(25401),p=i(42915),g=i(54945),S=i(85681),M=i(58014),w=i(61812),x=i(52208),B=i(77293),W=i(54849),j=i(95869),q=i(37352).set,ue=i(58991),re=i(52912),H=i(26975),se=i(70918),ae=i(91093),ie=i(46456),fe=i(9936),he=i(54256),Ce="Promise",ce=fe.CONSTRUCTOR,Be=fe.REJECTION_EVENT,Ve=fe.SUBCLASSING,Xe=ae.getterFor(Ce),He=ae.set,Pe=ie&&ie.prototype,Ge=ie,Oe=Pe,Tt=u.TypeError,We=u.document,Qt=u.process,Nt=he.f,Yt=Nt,dn=!!(We&&We.createEvent&&u.dispatchEvent),rn="unhandledrejection",Ur=function(an){var vn;return!(!B(an)||!x(vn=an.then))&&vn},Hn=function(an,vn){var vr,Ji,mn,Zn=vn.value,Xn=1==vn.state,zn=Xn?an.ok:an.fail,ri=an.resolve,Gi=an.reject,ui=an.domain;try{zn?(Xn||(2===vn.rejection&&fi(vn),vn.rejection=1),!0===zn?vr=Zn:(ui&&ui.enter(),vr=zn(Zn),ui&&(ui.exit(),mn=!0)),vr===an.promise?Gi(Tt("Promise-chain cycle")):(Ji=Ur(vr))?e(Ji,vr,ri,Gi):ri(vr)):Gi(Zn)}catch(Rn){ui&&!mn&&ui.exit(),Gi(Rn)}},er=function(an,vn){an.notified||(an.notified=!0,ue(function(){for(var Xn,Zn=an.reactions;Xn=Zn.get();)Hn(Xn,an);an.notified=!1,vn&&!an.rejection&&ei(an)}))},_r=function(an,vn,Zn){var Xn,zn;dn?((Xn=We.createEvent("Event")).promise=vn,Xn.reason=Zn,Xn.initEvent(an,!1,!0),u.dispatchEvent(Xn)):Xn={promise:vn,reason:Zn},!Be&&(zn=u["on"+an])?zn(Xn):an===rn&&re("Unhandled promise rejection",Zn)},ei=function(an){e(q,u,function(){var zn,vn=an.facade,Zn=an.value;if(bi(an)&&(zn=H(function(){f?Qt.emit("unhandledRejection",Zn,vn):_r(rn,vn,Zn)}),an.rejection=f||bi(an)?2:1,zn.error))throw zn.value})},bi=function(an){return 1!==an.rejection&&!an.parent},fi=function(an){e(q,u,function(){var vn=an.facade;f?Qt.emit("rejectionHandled",vn):_r("rejectionhandled",vn,an.value)})},no=function(an,vn,Zn){return function(Xn){an(vn,Xn,Zn)}},xo=function(an,vn,Zn){an.done||(an.done=!0,Zn&&(an=Zn),an.value=vn,an.state=2,er(an,!0))},Er=function(an,vn,Zn){if(!an.done){an.done=!0,Zn&&(an=Zn);try{if(an.facade===vn)throw Tt("Promise can't be resolved itself");var Xn=Ur(vn);Xn?ue(function(){var zn={done:!1};try{e(Xn,vn,no(Er,zn,an),no(xo,zn,an))}catch(ri){xo(zn,ri,an)}}):(an.value=vn,an.state=1,er(an,!1))}catch(zn){xo({done:!1},zn,an)}}};if(ce&&(Ge=function(vn){W(this,Oe),w(vn),e(mi,this);var Zn=Xe(this);try{vn(no(Er,Zn),no(xo,Zn))}catch(Xn){xo(Zn,Xn)}},(mi=function(vn){He(this,{type:Ce,done:!1,notified:!1,parent:!1,reactions:new se,rejection:!1,state:0,value:void 0})}).prototype=p(Oe=Ge.prototype,"then",function(vn,Zn){var Xn=Xe(this),zn=Nt(j(this,Ge));return Xn.parent=!0,zn.ok=!x(vn)||vn,zn.fail=x(Zn)&&Zn,zn.domain=f?Qt.domain:void 0,0==Xn.state?Xn.reactions.add(zn):ue(function(){Hn(zn,Xn)}),zn.promise}),ci=function(){var an=new mi,vn=Xe(an);this.promise=an,this.resolve=no(Er,vn),this.reject=no(xo,vn)},he.f=Nt=function(an){return an===Ge||void 0===an?new ci(an):Yt(an)},!a&&x(ie)&&Pe!==Object.prototype)){Br=Pe.then,Ve||p(Pe,"then",function(vn,Zn){var Xn=this;return new Ge(function(zn,ri){e(Br,Xn,zn,ri)}).then(vn,Zn)},{unsafe:!0});try{delete Pe.constructor}catch(an){}g&&g(Pe,Oe)}r({global:!0,constructor:!0,wrap:!0,forced:ce},{Promise:Ge}),S(Ge,Ce,!1,!0),M(Ce)},30185:(v,b,i)=>{"use strict";var r=i(90513),a=i(81124),f=i(46456),u=i(55756),e=i(7365),p=i(52208),g=i(95869),S=i(25524),M=i(42915),w=f&&f.prototype;if(r({target:"Promise",proto:!0,real:!0,forced:!!f&&u(function(){w.finally.call({then:function(){}},function(){})})},{finally:function(W){var j=g(this,e("Promise")),q=p(W);return this.then(q?function(ue){return S(j,W()).then(function(){return ue})}:W,q?function(ue){return S(j,W()).then(function(){throw ue})}:W)}}),!a&&p(f)){var B=e("Promise").prototype.finally;w.finally!==B&&M(w,"finally",B,{unsafe:!0})}},66793:(v,b,i)=>{i(38206),i(58085),i(5846),i(44738),i(74767),i(4991)},44738:(v,b,i)=>{"use strict";var r=i(90513),a=i(25401),f=i(61812),u=i(54256),e=i(26975),p=i(41605);r({target:"Promise",stat:!0,forced:i(95758)},{race:function(M){var w=this,x=u.f(w),B=x.reject,W=e(function(){var j=f(w.resolve);p(M,function(q){a(j,w,q).then(x.resolve,B)})});return W.error&&B(W.value),x.promise}})},74767:(v,b,i)=>{"use strict";var r=i(90513),a=i(25401),f=i(54256);r({target:"Promise",stat:!0,forced:i(9936).CONSTRUCTOR},{reject:function(p){var g=f.f(this);return a(g.reject,void 0,p),g.promise}})},4991:(v,b,i)=>{"use strict";var r=i(90513),a=i(7365),f=i(81124),u=i(46456),e=i(9936).CONSTRUCTOR,p=i(25524),g=a("Promise"),S=f&&!e;r({target:"Promise",stat:!0,forced:f||e},{resolve:function(w){return p(S&&this===g?u:this,w)}})},19539:(v,b,i)=>{var r=i(90513),a=i(7365),f=i(2543),u=i(44197),e=i(54356),p=i(64562),g=i(77293),S=i(83272),M=i(55756),w=a("Reflect","construct"),x=Object.prototype,B=[].push,W=M(function(){function ue(){}return!(w(function(){},[],ue)instanceof ue)}),j=!M(function(){w(function(){})}),q=W||j;r({target:"Reflect",stat:!0,forced:q,sham:q},{construct:function(re,H){e(re),p(H);var se=arguments.length<3?re:e(arguments[2]);if(j&&!W)return w(re,H,se);if(re==se){switch(H.length){case 0:return new re;case 1:return new re(H[0]);case 2:return new re(H[0],H[1]);case 3:return new re(H[0],H[1],H[2]);case 4:return new re(H[0],H[1],H[2],H[3])}var ae=[null];return f(B,ae,H),new(f(u,re,ae))}var ie=se.prototype,fe=S(g(ie)?ie:x),he=f(re,fe,H);return g(he)?he:fe}})},60851:(v,b,i)=>{var r=i(90513),a=i(25401),f=i(77293),u=i(64562),e=i(27029),p=i(25525),g=i(31426);r({target:"Reflect",stat:!0},{get:function S(M,w){var B,W,x=arguments.length<3?M:arguments[2];return u(M)===x?M[w]:(B=p.f(M,w))?e(B)?B.value:void 0===B.get?void 0:a(B.get,x):f(W=g(M))?S(W,w,x):void 0}})},44864:()=>{},97764:(v,b,i)=>{"use strict";var r=i(90513),a=i(23634),f=i(56421),u=i(67917),e=i(41433),p=i(79668),g=a("".indexOf);r({target:"String",proto:!0,forced:!p("includes")},{includes:function(M){return!!~g(e(u(this)),e(f(M)),arguments.length>1?arguments[1]:void 0)}})},3934:(v,b,i)=>{"use strict";var r=i(61557).charAt,a=i(41433),f=i(91093),u=i(79077),e=i(28738),p="String Iterator",g=f.set,S=f.getterFor(p);u(String,"String",function(M){g(this,{type:p,string:a(M),index:0})},function(){var W,w=S(this),x=w.string,B=w.index;return B>=x.length?e(void 0,!0):(W=r(x,B),w.index+=W.length,e(W,!1))})},3588:(v,b,i)=>{i(90513)({target:"String",proto:!0},{repeat:i(53411)})},24655:(v,b,i)=>{"use strict";var q,r=i(90513),a=i(64350),f=i(25525).f,u=i(48869),e=i(41433),p=i(56421),g=i(67917),S=i(79668),M=i(81124),w=a("".startsWith),x=a("".slice),B=Math.min,W=S("startsWith");r({target:"String",proto:!0,forced:!(!M&&!W&&(q=f(String.prototype,"startsWith"),q&&!q.writable)||W)},{startsWith:function(ue){var re=e(g(this));p(ue);var H=u(B(arguments.length>1?arguments[1]:void 0,re.length)),se=e(ue);return w?w(re,se,H):x(re,H,H+se.length)===se}})},90451:(v,b,i)=>{"use strict";var r=i(90513),a=i(89858).trim;r({target:"String",proto:!0,forced:i(85462)("trim")},{trim:function(){return a(this)}})},16426:(v,b,i)=>{i(25374)("asyncIterator")},17858:(v,b,i)=>{"use strict";var r=i(90513),a=i(70009),f=i(25401),u=i(23634),e=i(81124),p=i(49642),g=i(98535),S=i(55756),M=i(80112),w=i(23336),x=i(64562),B=i(81010),W=i(62939),j=i(41433),q=i(51361),ue=i(83272),re=i(28474),H=i(51518),se=i(62469),ae=i(47238),ie=i(25525),fe=i(48011),he=i(25913),Ce=i(25558),ce=i(42915),Be=i(1707),Ve=i(64579),Xe=i(86066),He=i(45599),Pe=i(13708),Ge=i(91840),Oe=i(89734),Tt=i(25374),We=i(56992),Qt=i(85681),Nt=i(91093),Yt=i(68607).forEach,dn=Xe("hidden"),rn="Symbol",vt="prototype",xt=Nt.set,Ct=Nt.getterFor(rn),Gt=Object[vt],Fn=a.Symbol,pr=Fn&&Fn[vt],mi=a.TypeError,ci=a.QObject,hr=ie.f,Br=fe.f,Ur=se.f,Hn=Ce.f,er=u([].push),_r=Ve("symbols"),ei=Ve("op-symbols"),bi=Ve("wks"),fi=!ci||!ci[vt]||!ci[vt].findChild,no=p&&S(function(){return 7!=ue(Br({},"a",{get:function(){return Br(this,"a",{value:7}).a}})).a})?function(Gi,ui,vr){var Ji=hr(Gt,ui);Ji&&delete Gt[ui],Br(Gi,ui,vr),Ji&&Gi!==Gt&&Br(Gt,ui,Ji)}:Br,xo=function(Gi,ui){var vr=_r[Gi]=ue(pr);return xt(vr,{type:rn,tag:Gi,description:ui}),p||(vr.description=ui),vr},Er=function(ui,vr,Ji){ui===Gt&&Er(ei,vr,Ji),x(ui);var mn=W(vr);return x(Ji),M(_r,mn)?(Ji.enumerable?(M(ui,dn)&&ui[dn][mn]&&(ui[dn][mn]=!1),Ji=ue(Ji,{enumerable:q(0,!1)})):(M(ui,dn)||Br(ui,dn,q(1,{})),ui[dn][mn]=!0),no(ui,mn,Ji)):Br(ui,mn,Ji)},an=function(ui,vr){x(ui);var Ji=B(vr),mn=re(Ji).concat(ri(Ji));return Yt(mn,function(Rn){(!p||f(Zn,Ji,Rn))&&Er(ui,Rn,Ji[Rn])}),ui},Zn=function(ui){var vr=W(ui),Ji=f(Hn,this,vr);return!(this===Gt&&M(_r,vr)&&!M(ei,vr))&&(!(Ji||!M(this,vr)||!M(_r,vr)||M(this,dn)&&this[dn][vr])||Ji)},Xn=function(ui,vr){var Ji=B(ui),mn=W(vr);if(Ji!==Gt||!M(_r,mn)||M(ei,mn)){var Rn=hr(Ji,mn);return Rn&&M(_r,mn)&&!(M(Ji,dn)&&Ji[dn][mn])&&(Rn.enumerable=!0),Rn}},zn=function(ui){var vr=Ur(B(ui)),Ji=[];return Yt(vr,function(mn){!M(_r,mn)&&!M(He,mn)&&er(Ji,mn)}),Ji},ri=function(Gi){var ui=Gi===Gt,vr=Ur(ui?ei:B(Gi)),Ji=[];return Yt(vr,function(mn){M(_r,mn)&&(!ui||M(Gt,mn))&&er(Ji,_r[mn])}),Ji};g||(ce(pr=(Fn=function(){if(w(pr,this))throw mi("Symbol is not a constructor");var ui=arguments.length&&void 0!==arguments[0]?j(arguments[0]):void 0,vr=Pe(ui),Ji=function(mn){this===Gt&&f(Ji,ei,mn),M(this,dn)&&M(this[dn],vr)&&(this[dn][vr]=!1),no(this,vr,q(1,mn))};return p&&fi&&no(Gt,vr,{configurable:!0,set:Ji}),xo(vr,ui)})[vt],"toString",function(){return Ct(this).tag}),ce(Fn,"withoutSetter",function(Gi){return xo(Pe(Gi),Gi)}),Ce.f=Zn,fe.f=Er,he.f=an,ie.f=Xn,H.f=se.f=zn,ae.f=ri,Oe.f=function(Gi){return xo(Ge(Gi),Gi)},p&&(Be(pr,"description",{configurable:!0,get:function(){return Ct(this).description}}),e||ce(Gt,"propertyIsEnumerable",Zn,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!g,sham:!g},{Symbol:Fn}),Yt(re(bi),function(Gi){Tt(Gi)}),r({target:rn,stat:!0,forced:!g},{useSetter:function(){fi=!0},useSimple:function(){fi=!1}}),r({target:"Object",stat:!0,forced:!g,sham:!p},{create:function(ui,vr){return void 0===vr?ue(ui):an(ue(ui),vr)},defineProperty:Er,defineProperties:an,getOwnPropertyDescriptor:Xn}),r({target:"Object",stat:!0,forced:!g},{getOwnPropertyNames:zn}),We(),Qt(Fn,rn),He[dn]=!0},1172:()=>{},12353:(v,b,i)=>{var r=i(90513),a=i(7365),f=i(80112),u=i(41433),e=i(64579),p=i(56709),g=e("string-to-symbol-registry"),S=e("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!p},{for:function(M){var w=u(M);if(f(g,w))return g[w];var x=a("Symbol")(w);return g[w]=x,S[x]=w,x}})},99579:(v,b,i)=>{i(25374)("hasInstance")},41258:(v,b,i)=>{i(25374)("isConcatSpreadable")},2383:(v,b,i)=>{i(25374)("iterator")},56728:(v,b,i)=>{i(17858),i(12353),i(27632),i(75071),i(37764)},27632:(v,b,i)=>{var r=i(90513),a=i(80112),f=i(74717),u=i(7378),e=i(64579),p=i(56709),g=e("symbol-to-string-registry");r({target:"Symbol",stat:!0,forced:!p},{keyFor:function(M){if(!f(M))throw TypeError(u(M)+" is not a symbol");if(a(g,M))return g[M]}})},64776:(v,b,i)=>{i(25374)("matchAll")},44339:(v,b,i)=>{i(25374)("match")},88215:(v,b,i)=>{i(25374)("replace")},65389:(v,b,i)=>{i(25374)("search")},12733:(v,b,i)=>{i(25374)("species")},97977:(v,b,i)=>{i(25374)("split")},59792:(v,b,i)=>{var r=i(25374),a=i(56992);r("toPrimitive"),a()},60242:(v,b,i)=>{var r=i(7365),a=i(25374),f=i(85681);a("toStringTag"),f(r("Symbol"),"Symbol")},26291:(v,b,i)=>{i(25374)("unscopables")},67670:(v,b,i)=>{i(10901)},10509:(v,b,i)=>{"use strict";var r=i(90513),a=i(64902),f=i(60077).remove;r({target:"Map",proto:!0,real:!0,forced:!0},{deleteAll:function(){for(var g,e=a(this),p=!0,S=0,M=arguments.length;S<M;S++)g=f(e,arguments[S]),p=p&&g;return!!p}})},30887:(v,b,i)=>{"use strict";var r=i(90513),a=i(64902),f=i(60077),u=f.get,e=f.has,p=f.set;r({target:"Map",proto:!0,real:!0,forced:!0},{emplace:function(S,M){var x,B,w=a(this);return e(w,S)?(x=u(w,S),"update"in M&&(x=M.update(x,S,w),p(w,S,x)),x):(B=M.insert(S,w),p(w,S,B),B)}})},54547:(v,b,i)=>{"use strict";var r=i(90513),a=i(76781),f=i(64902),u=i(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{every:function(p){var g=f(this),S=a(p,arguments.length>1?arguments[1]:void 0);return!1!==u(g,function(M,w){if(!S(M,w,g))return!1},!0)}})},68996:(v,b,i)=>{"use strict";var r=i(90513),a=i(76781),f=i(64902),u=i(60077),e=i(21515),p=u.Map,g=u.set;r({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(M){var w=f(this),x=a(M,arguments.length>1?arguments[1]:void 0),B=new p;return e(w,function(W,j){x(W,j,w)&&g(B,j,W)}),B}})},60176:(v,b,i)=>{"use strict";var r=i(90513),a=i(76781),f=i(64902),u=i(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(p){var g=f(this),S=a(p,arguments.length>1?arguments[1]:void 0),M=u(g,function(w,x){if(S(w,x,g))return{key:x}},!0);return M&&M.key}})},1530:(v,b,i)=>{"use strict";var r=i(90513),a=i(76781),f=i(64902),u=i(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{find:function(p){var g=f(this),S=a(p,arguments.length>1?arguments[1]:void 0),M=u(g,function(w,x){if(S(w,x,g))return{value:w}},!0);return M&&M.value}})},78271:(v,b,i)=>{i(90513)({target:"Map",stat:!0,forced:!0},{from:i(83483)})},41554:(v,b,i)=>{"use strict";var r=i(90513),a=i(25401),f=i(23634),u=i(52208),e=i(61812),p=i(41605),g=i(60077).Map,S=f([].push);r({target:"Map",stat:!0,forced:!0},{groupBy:function(w,x){var W=new(u(this)?this:g);e(x);var j=e(W.has),q=e(W.get),ue=e(W.set);return p(w,function(re){var H=x(re);a(j,W,H)?S(a(q,W,H),re):a(ue,W,H,[re])}),W}})},41688:(v,b,i)=>{"use strict";var r=i(90513),a=i(29627),f=i(64902),u=i(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(p){return!0===u(f(this),function(g){if(a(g,p))return!0},!0)}})},92847:(v,b,i)=>{"use strict";var r=i(90513),a=i(25401),f=i(41605),u=i(52208),e=i(61812),p=i(60077).Map;r({target:"Map",stat:!0,forced:!0},{keyBy:function(S,M){var x=new(u(this)?this:p);e(M);var B=e(x.set);return f(S,function(W){a(B,x,M(W),W)}),x}})},17316:(v,b,i)=>{"use strict";var r=i(90513),a=i(64902),f=i(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(e){var p=f(a(this),function(g,S){if(g===e)return{key:S}},!0);return p&&p.key}})},58786:(v,b,i)=>{"use strict";var r=i(90513),a=i(76781),f=i(64902),u=i(60077),e=i(21515),p=u.Map,g=u.set;r({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(M){var w=f(this),x=a(M,arguments.length>1?arguments[1]:void 0),B=new p;return e(w,function(W,j){g(B,x(W,j,w),W)}),B}})},35517:(v,b,i)=>{"use strict";var r=i(90513),a=i(76781),f=i(64902),u=i(60077),e=i(21515),p=u.Map,g=u.set;r({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(M){var w=f(this),x=a(M,arguments.length>1?arguments[1]:void 0),B=new p;return e(w,function(W,j){g(B,j,x(W,j,w))}),B}})},12783:(v,b,i)=>{"use strict";var r=i(90513),a=i(64902),f=i(41605),u=i(60077).set;r({target:"Map",proto:!0,real:!0,arity:1,forced:!0},{merge:function(p){for(var g=a(this),S=arguments.length,M=0;M<S;)f(arguments[M++],function(w,x){u(g,w,x)},{AS_ENTRIES:!0});return g}})},60854:(v,b,i)=>{i(90513)({target:"Map",stat:!0,forced:!0},{of:i(13067)})},69773:(v,b,i)=>{"use strict";var r=i(90513),a=i(61812),f=i(64902),u=i(21515),e=TypeError;r({target:"Map",proto:!0,real:!0,forced:!0},{reduce:function(g){var S=f(this),M=arguments.length<2,w=M?void 0:arguments[1];if(a(g),u(S,function(x,B){M?(M=!1,w=x):w=g(w,x,B,S)}),M)throw e("Reduce of empty map with no initial value");return w}})},22337:(v,b,i)=>{"use strict";var r=i(90513),a=i(76781),f=i(64902),u=i(21515);r({target:"Map",proto:!0,real:!0,forced:!0},{some:function(p){var g=f(this),S=a(p,arguments.length>1?arguments[1]:void 0);return!0===u(g,function(M,w){if(S(M,w,g))return!0},!0)}})},84131:(v,b,i)=>{"use strict";i(90513)({target:"Map",proto:!0,real:!0,name:"upsert",forced:!0},{updateOrInsert:i(57729)})},40199:(v,b,i)=>{"use strict";var r=i(90513),a=i(61812),f=i(64902),u=i(60077),e=TypeError,p=u.get,g=u.has,S=u.set;r({target:"Map",proto:!0,real:!0,forced:!0},{update:function(w,x){var B=f(this),W=arguments.length;a(x);var j=g(B,w);if(!j&&W<3)throw e("Updating absent value");var q=j?p(B,w):a(W>2?arguments[2]:void 0)(w,B);return S(B,w,x(q,w,B)),B}})},69046:(v,b,i)=>{"use strict";i(90513)({target:"Map",proto:!0,real:!0,forced:!0},{upsert:i(57729)})},61127:(v,b,i)=>{i(84798)},45975:(v,b,i)=>{i(98857)},93114:(v,b,i)=>{"use strict";var r=i(90513),a=i(54256),f=i(26975);r({target:"Promise",stat:!0,forced:!0},{try:function(u){var e=a.f(this),p=f(u);return(p.error?e.reject:e.resolve)(p.value),e.promise}})},55461:(v,b,i)=>{i(25374)("asyncDispose")},5737:(v,b,i)=>{i(25374)("dispose")},61652:(v,b,i)=>{var r=i(90513),a=i(7365),f=i(23634),u=a("Symbol"),e=u.keyFor,p=f(u.prototype.valueOf);r({target:"Symbol",stat:!0},{isRegistered:function(S){try{return void 0!==e(p(S))}catch(M){return!1}}})},90791:(v,b,i)=>{for(var r=i(90513),a=i(64579),f=i(7365),u=i(23634),e=i(74717),p=i(91840),g=f("Symbol"),S=g.isWellKnown,M=f("Object","getOwnPropertyNames"),w=u(g.prototype.valueOf),x=a("wks"),B=0,W=M(g),j=W.length;B<j;B++)try{var q=W[B];e(g[q])&&p(q)}catch(ue){}r({target:"Symbol",stat:!0,forced:!0},{isWellKnown:function(re){if(S&&S(re))return!0;try{for(var H=w(re),se=0,ae=M(x),ie=ae.length;se<ie;se++)if(x[ae[se]]==H)return!0}catch(fe){}return!1}})},87097:(v,b,i)=>{i(25374)("matcher")},29559:(v,b,i)=>{i(25374)("metadataKey")},71985:(v,b,i)=>{i(25374)("metadata")},90212:(v,b,i)=>{i(25374)("observable")},93770:(v,b,i)=>{i(25374)("patternMatch")},47743:(v,b,i)=>{i(25374)("replaceAll")},33089:(v,b,i)=>{i(1285);var r=i(44125),a=i(70009),f=i(35329),u=i(65162),e=i(84394),g=i(91840)("toStringTag");for(var S in r){var M=a[S],w=M&&M.prototype;w&&f(w)!==g&&u(w,g,S),e[S]=e.Array}},94784:(v,b,i)=>{var r=i(90513),a=i(70009),u=i(53814)(a.setInterval,!0);r({global:!0,bind:!0,forced:a.setInterval!==u},{setInterval:u})},36445:(v,b,i)=>{var r=i(90513),a=i(70009),u=i(53814)(a.setTimeout,!0);r({global:!0,bind:!0,forced:a.setTimeout!==u},{setTimeout:u})},69280:(v,b,i)=>{i(94784),i(36445)},73842:(v,b,i)=>{"use strict";i(1285);var r=i(90513),a=i(70009),f=i(25401),u=i(23634),e=i(49642),p=i(54933),g=i(42915),S=i(1707),M=i(84604),w=i(85681),x=i(14554),B=i(91093),W=i(54849),j=i(52208),q=i(80112),ue=i(76781),re=i(35329),H=i(64562),se=i(77293),ae=i(41433),ie=i(83272),fe=i(51361),he=i(88055),Ce=i(34014),ce=i(15086),Be=i(91840),Ve=i(84865),Xe=Be("iterator"),He="URLSearchParams",Pe=He+"Iterator",Ge=B.set,Oe=B.getterFor(He),Tt=B.getterFor(Pe),We=Object.getOwnPropertyDescriptor,Qt=function(mn){if(!e)return a[mn];var Rn=We(a,mn);return Rn&&Rn.value},Nt=Qt("fetch"),Yt=Qt("Request"),dn=Qt("Headers"),rn=Yt&&Yt.prototype,vt=dn&&dn.prototype,xt=a.RegExp,Ct=a.TypeError,Gt=a.decodeURIComponent,Fn=a.encodeURIComponent,pr=u("".charAt),mi=u([].join),ci=u([].push),hr=u("".replace),Br=u([].shift),Ur=u([].splice),Hn=u("".split),er=u("".slice),_r=/\+/g,ei=Array(4),bi=function(mn){return ei[mn-1]||(ei[mn-1]=xt("((?:%[\\da-f]{2}){"+mn+"})","gi"))},fi=function(mn){try{return Gt(mn)}catch(Rn){return mn}},no=function(mn){var Rn=hr(mn,_r," "),Wn=4;try{return Gt(Rn)}catch(et){for(;Wn;)Rn=hr(Rn,bi(Wn--),fi);return Rn}},xo=/[!'()~]|%20/g,Er={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},an=function(mn){return Er[mn]},vn=function(mn){return hr(Fn(mn),xo,an)},Zn=x(function(Rn,Wn){Ge(this,{type:Pe,iterator:he(Oe(Rn).entries),kind:Wn})},"Iterator",function(){var Rn=Tt(this),Wn=Rn.kind,et=Rn.iterator.next(),Le=et.value;return et.done||(et.value="keys"===Wn?Le.key:"values"===Wn?Le.value:[Le.key,Le.value]),et},!0),Xn=function(mn){this.entries=[],this.url=null,void 0!==mn&&(se(mn)?this.parseObject(mn):this.parseQuery("string"==typeof mn?"?"===pr(mn,0)?er(mn,1):mn:ae(mn)))};Xn.prototype={type:He,bindURL:function(mn){this.url=mn,this.update()},parseObject:function(mn){var Wn,et,Le,Re,Se,dt,st,Rn=Ce(mn);if(Rn)for(et=(Wn=he(mn,Rn)).next;!(Le=f(et,Wn)).done;){if(Re=he(H(Le.value)),(dt=f(Se=Re.next,Re)).done||(st=f(Se,Re)).done||!f(Se,Re).done)throw Ct("Expected sequence with length 2");ci(this.entries,{key:ae(dt.value),value:ae(st.value)})}else for(var nn in mn)q(mn,nn)&&ci(this.entries,{key:nn,value:ae(mn[nn])})},parseQuery:function(mn){if(mn)for(var et,Le,Rn=Hn(mn,"&"),Wn=0;Wn<Rn.length;)(et=Rn[Wn++]).length&&(Le=Hn(et,"="),ci(this.entries,{key:no(Br(Le)),value:no(mi(Le,"="))}))},serialize:function(){for(var et,mn=this.entries,Rn=[],Wn=0;Wn<mn.length;)et=mn[Wn++],ci(Rn,vn(et.key)+"="+vn(et.value));return mi(Rn,"&")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var zn=function(){W(this,ri);var Rn=arguments.length>0?arguments[0]:void 0,Wn=Ge(this,new Xn(Rn));e||(this.length=Wn.entries.length)},ri=zn.prototype;if(M(ri,{append:function(Rn,Wn){ce(arguments.length,2);var et=Oe(this);ci(et.entries,{key:ae(Rn),value:ae(Wn)}),e||this.length++,et.updateURL()},delete:function(mn){ce(arguments.length,1);for(var Rn=Oe(this),Wn=Rn.entries,et=ae(mn),Le=0;Le<Wn.length;)Wn[Le].key===et?Ur(Wn,Le,1):Le++;e||(this.length=Wn.length),Rn.updateURL()},get:function(Rn){ce(arguments.length,1);for(var Wn=Oe(this).entries,et=ae(Rn),Le=0;Le<Wn.length;Le++)if(Wn[Le].key===et)return Wn[Le].value;return null},getAll:function(Rn){ce(arguments.length,1);for(var Wn=Oe(this).entries,et=ae(Rn),Le=[],Re=0;Re<Wn.length;Re++)Wn[Re].key===et&&ci(Le,Wn[Re].value);return Le},has:function(Rn){ce(arguments.length,1);for(var Wn=Oe(this).entries,et=ae(Rn),Le=0;Le<Wn.length;)if(Wn[Le++].key===et)return!0;return!1},set:function(Rn,Wn){ce(arguments.length,1);for(var nn,et=Oe(this),Le=et.entries,Re=!1,Se=ae(Rn),dt=ae(Wn),st=0;st<Le.length;st++)(nn=Le[st]).key===Se&&(Re?Ur(Le,st--,1):(Re=!0,nn.value=dt));Re||ci(Le,{key:Se,value:dt}),e||(this.length=Le.length),et.updateURL()},sort:function(){var Rn=Oe(this);Ve(Rn.entries,function(Wn,et){return Wn.key>et.key?1:-1}),Rn.updateURL()},forEach:function(Rn){for(var Re,Wn=Oe(this).entries,et=ue(Rn,arguments.length>1?arguments[1]:void 0),Le=0;Le<Wn.length;)et((Re=Wn[Le++]).value,Re.key,this)},keys:function(){return new Zn(this,"keys")},values:function(){return new Zn(this,"values")},entries:function(){return new Zn(this,"entries")}},{enumerable:!0}),g(ri,Xe,ri.entries,{name:"entries"}),g(ri,"toString",function(){return Oe(this).serialize()},{enumerable:!0}),e&&S(ri,"size",{get:function(){return Oe(this).entries.length},configurable:!0,enumerable:!0}),w(zn,He),r({global:!0,constructor:!0,forced:!p},{URLSearchParams:zn}),!p&&j(dn)){var Gi=u(vt.has),ui=u(vt.set),vr=function(mn){if(se(mn)){var Wn,Rn=mn.body;if(re(Rn)===He)return Wn=mn.headers?new dn(mn.headers):new dn,Gi(Wn,"content-type")||ui(Wn,"content-type","application/x-www-form-urlencoded;charset=UTF-8"),ie(mn,{body:fe(0,ae(Rn)),headers:fe(0,Wn)})}return mn};if(j(Nt)&&r({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(Rn){return Nt(Rn,arguments.length>1?vr(arguments[1]):{})}}),j(Yt)){var Ji=function(Rn){return W(this,rn),new Yt(Rn,arguments.length>1?vr(arguments[1]):{})};rn.constructor=Ji,Ji.prototype=rn,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:Ji})}}v.exports={URLSearchParams:zn,getState:Oe}},26953:(v,b,i)=>{i(73842)},86023:()=>{},37256:(v,b,i)=>{var r=i(90513),a=i(7365),f=i(55756),u=i(15086),e=i(41433),p=i(54933),g=a("URL");r({target:"URL",stat:!0,forced:!(p&&f(function(){g.canParse()}))},{canParse:function(w){var x=u(arguments.length,1),B=e(w),W=x<2||void 0===arguments[1]?void 0:e(arguments[1]);try{return!!new g(B,W)}catch(j){return!1}}})},80504:(v,b,i)=>{"use strict";i(3934);var xo,r=i(90513),a=i(49642),f=i(54933),u=i(70009),e=i(76781),p=i(23634),g=i(42915),S=i(1707),M=i(54849),w=i(80112),x=i(75791),B=i(51923),W=i(8681),j=i(61557).codeAt,q=i(26662),ue=i(41433),re=i(85681),H=i(15086),se=i(73842),ae=i(91093),ie=ae.set,fe=ae.getterFor("URL"),he=se.URLSearchParams,Ce=se.getState,ce=u.URL,Be=u.TypeError,Ve=u.parseInt,Xe=Math.floor,He=Math.pow,Pe=p("".charAt),Ge=p(/./.exec),Oe=p([].join),Tt=p(1..toString),We=p([].pop),Qt=p([].push),Nt=p("".replace),Yt=p([].shift),dn=p("".split),rn=p("".slice),vt=p("".toLowerCase),xt=p([].unshift),Gt="Invalid scheme",Fn="Invalid host",pr="Invalid port",mi=/[a-z]/i,ci=/[\d+-.a-z]/i,hr=/\d/,Br=/^0x/i,Ur=/^[0-7]+$/,Hn=/^\d+$/,er=/^[\da-f]+$/i,_r=/[\0\t\n\r #%/:<>?@[\\\]^|]/,ei=/[\0\t\n\r #/:<>?@[\\\]^|]/,bi=/^[\u0000-\u0020]+/,fi=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,no=/[\t\n\r]/g,Zn=function(ir){var si,kn,nr,jr;if("number"==typeof ir){for(si=[],kn=0;kn<4;kn++)xt(si,ir%256),ir=Xe(ir/256);return Oe(si,".")}if("object"==typeof ir){for(si="",nr=function(ir){for(var si=null,kn=1,nr=null,jr=0,ao=0;ao<8;ao++)0!==ir[ao]?(jr>kn&&(si=nr,kn=jr),nr=null,jr=0):(null===nr&&(nr=ao),++jr);return jr>kn&&(si=nr,kn=jr),si}(ir),kn=0;kn<8;kn++)jr&&0===ir[kn]||(jr&&(jr=!1),nr===kn?(si+=kn?":":"::",jr=!0):(si+=Tt(ir[kn],16),kn<7&&(si+=":")));return"["+si+"]"}return ir},Xn={},zn=x({},Xn,{" ":1,'"':1,"<":1,">":1,"`":1}),ri=x({},zn,{"#":1,"?":1,"{":1,"}":1}),Gi=x({},ri,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),ui=function(ir,si){var kn=j(ir,0);return kn>32&&kn<127&&!w(si,ir)?ir:encodeURIComponent(ir)},vr={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Ji=function(ir,si){var kn;return 2==ir.length&&Ge(mi,Pe(ir,0))&&(":"==(kn=Pe(ir,1))||!si&&"|"==kn)},mn=function(ir){var si;return ir.length>1&&Ji(rn(ir,0,2))&&(2==ir.length||"/"===(si=Pe(ir,2))||"\\"===si||"?"===si||"#"===si)},Rn=function(ir){return"."===ir||"%2e"===vt(ir)},Wn=function(ir){return".."===(ir=vt(ir))||"%2e."===ir||".%2e"===ir||"%2e%2e"===ir},et={},Le={},Re={},Se={},dt={},st={},nn={},Fe={},Lr={},ti={},Ut={},Dn={},Et={},$t={},_t={},yt={},Vt={},yn={},Cr={},xi={},yi={},Yo=function(ir,si,kn){var jr,ao,$i,nr=ue(ir);if(si){if(ao=this.parse(nr))throw Be(ao);this.searchParams=null}else{if(void 0!==kn&&(jr=new Yo(kn,!0)),ao=this.parse(nr,null,jr))throw Be(ao);($i=Ce(new he)).bindURL(this),this.searchParams=$i}};Yo.prototype={type:"URL",parse:function(ir,si,kn){var ua,or,Mr,Ar,nr=this,jr=si||et,ao=0,$i="",Eo=!1,mo=!1,Go=!1;for(ir=ue(ir),si||(nr.scheme="",nr.username="",nr.password="",nr.host=null,nr.port=null,nr.path=[],nr.query=null,nr.fragment=null,nr.cannotBeABaseURL=!1,ir=Nt(ir,bi,""),ir=Nt(ir,fi,"$1")),ir=Nt(ir,no,""),ua=B(ir);ao<=ua.length;){switch(or=ua[ao],jr){case et:if(!or||!Ge(mi,or)){if(si)return Gt;jr=Re;continue}$i+=vt(or),jr=Le;break;case Le:if(or&&(Ge(ci,or)||"+"==or||"-"==or||"."==or))$i+=vt(or);else{if(":"!=or){if(si)return Gt;$i="",jr=Re,ao=0;continue}if(si&&(nr.isSpecial()!=w(vr,$i)||"file"==$i&&(nr.includesCredentials()||null!==nr.port)||"file"==nr.scheme&&!nr.host))return;if(nr.scheme=$i,si)return void(nr.isSpecial()&&vr[nr.scheme]==nr.port&&(nr.port=null));$i="","file"==nr.scheme?jr=$t:nr.isSpecial()&&kn&&kn.scheme==nr.scheme?jr=Se:nr.isSpecial()?jr=Fe:"/"==ua[ao+1]?(jr=dt,ao++):(nr.cannotBeABaseURL=!0,Qt(nr.path,""),jr=Cr)}break;case Re:if(!kn||kn.cannotBeABaseURL&&"#"!=or)return Gt;if(kn.cannotBeABaseURL&&"#"==or){nr.scheme=kn.scheme,nr.path=W(kn.path),nr.query=kn.query,nr.fragment="",nr.cannotBeABaseURL=!0,jr=yi;break}jr="file"==kn.scheme?$t:st;continue;case Se:if("/"!=or||"/"!=ua[ao+1]){jr=st;continue}jr=Lr,ao++;break;case dt:if("/"==or){jr=ti;break}jr=yn;continue;case st:if(nr.scheme=kn.scheme,or==xo)nr.username=kn.username,nr.password=kn.password,nr.host=kn.host,nr.port=kn.port,nr.path=W(kn.path),nr.query=kn.query;else if("/"==or||"\\"==or&&nr.isSpecial())jr=nn;else if("?"==or)nr.username=kn.username,nr.password=kn.password,nr.host=kn.host,nr.port=kn.port,nr.path=W(kn.path),nr.query="",jr=xi;else{if("#"!=or){nr.username=kn.username,nr.password=kn.password,nr.host=kn.host,nr.port=kn.port,nr.path=W(kn.path),nr.path.length--,jr=yn;continue}nr.username=kn.username,nr.password=kn.password,nr.host=kn.host,nr.port=kn.port,nr.path=W(kn.path),nr.query=kn.query,nr.fragment="",jr=yi}break;case nn:if(!nr.isSpecial()||"/"!=or&&"\\"!=or){if("/"!=or){nr.username=kn.username,nr.password=kn.password,nr.host=kn.host,nr.port=kn.port,jr=yn;continue}jr=ti}else jr=Lr;break;case Fe:if(jr=Lr,"/"!=or||"/"!=Pe($i,ao+1))continue;ao++;break;case Lr:if("/"!=or&&"\\"!=or){jr=ti;continue}break;case ti:if("@"==or){Eo&&($i="%40"+$i),Eo=!0,Mr=B($i);for(var cr=0;cr<Mr.length;cr++){var pi=Mr[cr];if(":"!=pi||Go){var Sn=ui(pi,Gi);Go?nr.password+=Sn:nr.username+=Sn}else Go=!0}$i=""}else if(or==xo||"/"==or||"?"==or||"#"==or||"\\"==or&&nr.isSpecial()){if(Eo&&""==$i)return"Invalid authority";ao-=B($i).length+1,$i="",jr=Ut}else $i+=or;break;case Ut:case Dn:if(si&&"file"==nr.scheme){jr=yt;continue}if(":"!=or||mo){if(or==xo||"/"==or||"?"==or||"#"==or||"\\"==or&&nr.isSpecial()){if(nr.isSpecial()&&""==$i)return Fn;if(si&&""==$i&&(nr.includesCredentials()||null!==nr.port))return;if(Ar=nr.parseHost($i))return Ar;if($i="",jr=Vt,si)return;continue}"["==or?mo=!0:"]"==or&&(mo=!1),$i+=or}else{if(""==$i)return Fn;if(Ar=nr.parseHost($i))return Ar;if($i="",jr=Et,si==Dn)return}break;case Et:if(!Ge(hr,or)){if(or==xo||"/"==or||"?"==or||"#"==or||"\\"==or&&nr.isSpecial()||si){if(""!=$i){var $n=Ve($i,10);if($n>65535)return pr;nr.port=nr.isSpecial()&&$n===vr[nr.scheme]?null:$n,$i=""}if(si)return;jr=Vt;continue}return pr}$i+=or;break;case $t:if(nr.scheme="file","/"==or||"\\"==or)jr=_t;else{if(!kn||"file"!=kn.scheme){jr=yn;continue}if(or==xo)nr.host=kn.host,nr.path=W(kn.path),nr.query=kn.query;else if("?"==or)nr.host=kn.host,nr.path=W(kn.path),nr.query="",jr=xi;else{if("#"!=or){mn(Oe(W(ua,ao),""))||(nr.host=kn.host,nr.path=W(kn.path),nr.shortenPath()),jr=yn;continue}nr.host=kn.host,nr.path=W(kn.path),nr.query=kn.query,nr.fragment="",jr=yi}}break;case _t:if("/"==or||"\\"==or){jr=yt;break}kn&&"file"==kn.scheme&&!mn(Oe(W(ua,ao),""))&&(Ji(kn.path[0],!0)?Qt(nr.path,kn.path[0]):nr.host=kn.host),jr=yn;continue;case yt:if(or==xo||"/"==or||"\\"==or||"?"==or||"#"==or){if(!si&&Ji($i))jr=yn;else if(""==$i){if(nr.host="",si)return;jr=Vt}else{if(Ar=nr.parseHost($i))return Ar;if("localhost"==nr.host&&(nr.host=""),si)return;$i="",jr=Vt}continue}$i+=or;break;case Vt:if(nr.isSpecial()){if(jr=yn,"/"!=or&&"\\"!=or)continue}else if(si||"?"!=or)if(si||"#"!=or){if(or!=xo&&(jr=yn,"/"!=or))continue}else nr.fragment="",jr=yi;else nr.query="",jr=xi;break;case yn:if(or==xo||"/"==or||"\\"==or&&nr.isSpecial()||!si&&("?"==or||"#"==or)){if(Wn($i)?(nr.shortenPath(),"/"!=or&&!("\\"==or&&nr.isSpecial())&&Qt(nr.path,"")):Rn($i)?"/"!=or&&!("\\"==or&&nr.isSpecial())&&Qt(nr.path,""):("file"==nr.scheme&&!nr.path.length&&Ji($i)&&(nr.host&&(nr.host=""),$i=Pe($i,0)+":"),Qt(nr.path,$i)),$i="","file"==nr.scheme&&(or==xo||"?"==or||"#"==or))for(;nr.path.length>1&&""===nr.path[0];)Yt(nr.path);"?"==or?(nr.query="",jr=xi):"#"==or&&(nr.fragment="",jr=yi)}else $i+=ui(or,ri);break;case Cr:"?"==or?(nr.query="",jr=xi):"#"==or?(nr.fragment="",jr=yi):or!=xo&&(nr.path[0]+=ui(or,Xn));break;case xi:si||"#"!=or?or!=xo&&("'"==or&&nr.isSpecial()?nr.query+="%27":nr.query+="#"==or?"%23":ui(or,Xn)):(nr.fragment="",jr=yi);break;case yi:or!=xo&&(nr.fragment+=ui(or,zn))}ao++}},parseHost:function(ir){var si,kn,nr;if("["==Pe(ir,0)){if("]"!=Pe(ir,ir.length-1)||(si=function(ir){var ao,$i,Eo,mo,Go,ua,or,si=[0,0,0,0,0,0,0,0],kn=0,nr=null,jr=0,Mr=function(){return Pe(ir,jr)};if(":"==Mr()){if(":"!=Pe(ir,1))return;jr+=2,nr=++kn}for(;Mr();){if(8==kn)return;if(":"!=Mr()){for(ao=$i=0;$i<4&&Ge(er,Mr());)ao=16*ao+Ve(Mr(),16),jr++,$i++;if("."==Mr()){if(0==$i||(jr-=$i,kn>6))return;for(Eo=0;Mr();){if(mo=null,Eo>0){if(!("."==Mr()&&Eo<4))return;jr++}if(!Ge(hr,Mr()))return;for(;Ge(hr,Mr());){if(Go=Ve(Mr(),10),null===mo)mo=Go;else{if(0==mo)return;mo=10*mo+Go}if(mo>255)return;jr++}si[kn]=256*si[kn]+mo,(2==++Eo||4==Eo)&&kn++}if(4!=Eo)return;break}if(":"==Mr()){if(jr++,!Mr())return}else if(Mr())return;si[kn++]=ao}else{if(null!==nr)return;jr++,nr=++kn}}if(null!==nr)for(ua=kn-nr,kn=7;0!=kn&&ua>0;)or=si[kn],si[kn--]=si[nr+ua-1],si[nr+--ua]=or;else if(8!=kn)return;return si}(rn(ir,1,-1)),!si))return Fn;this.host=si}else if(this.isSpecial()){if(ir=q(ir),Ge(_r,ir)||(si=function(ir){var kn,nr,jr,ao,$i,Eo,mo,si=dn(ir,".");if(si.length&&""==si[si.length-1]&&si.length--,(kn=si.length)>4)return ir;for(nr=[],jr=0;jr<kn;jr++){if(""==(ao=si[jr]))return ir;if($i=10,ao.length>1&&"0"==Pe(ao,0)&&($i=Ge(Br,ao)?16:8,ao=rn(ao,8==$i?1:2)),""===ao)Eo=0;else{if(!Ge(10==$i?Hn:8==$i?Ur:er,ao))return ir;Eo=Ve(ao,$i)}Qt(nr,Eo)}for(jr=0;jr<kn;jr++)if(Eo=nr[jr],jr==kn-1){if(Eo>=He(256,5-kn))return null}else if(Eo>255)return null;for(mo=We(nr),jr=0;jr<nr.length;jr++)mo+=nr[jr]*He(256,3-jr);return mo}(ir),null===si))return Fn;this.host=si}else{if(Ge(ei,ir))return Fn;for(si="",kn=B(ir),nr=0;nr<kn.length;nr++)si+=ui(kn[nr],Xn);this.host=si}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||"file"==this.scheme},includesCredentials:function(){return""!=this.username||""!=this.password},isSpecial:function(){return w(vr,this.scheme)},shortenPath:function(){var ir=this.path,si=ir.length;si&&("file"!=this.scheme||1!=si||!Ji(ir[0],!0))&&ir.length--},serialize:function(){var ir=this,si=ir.scheme,kn=ir.username,nr=ir.password,jr=ir.host,ao=ir.port,$i=ir.path,Eo=ir.query,mo=ir.fragment,Go=si+":";return null!==jr?(Go+="//",ir.includesCredentials()&&(Go+=kn+(nr?":"+nr:"")+"@"),Go+=Zn(jr),null!==ao&&(Go+=":"+ao)):"file"==si&&(Go+="//"),Go+=ir.cannotBeABaseURL?$i[0]:$i.length?"/"+Oe($i,"/"):"",null!==Eo&&(Go+="?"+Eo),null!==mo&&(Go+="#"+mo),Go},setHref:function(ir){var si=this.parse(ir);if(si)throw Be(si);this.searchParams.update()},getOrigin:function(){var ir=this.scheme,si=this.port;if("blob"==ir)try{return new Qo(ir.path[0]).origin}catch(kn){return"null"}return"file"!=ir&&this.isSpecial()?ir+"://"+Zn(this.host)+(null!==si?":"+si:""):"null"},getProtocol:function(){return this.scheme+":"},setProtocol:function(ir){this.parse(ue(ir)+":",et)},getUsername:function(){return this.username},setUsername:function(ir){var si=B(ue(ir));if(!this.cannotHaveUsernamePasswordPort()){this.username="";for(var kn=0;kn<si.length;kn++)this.username+=ui(si[kn],Gi)}},getPassword:function(){return this.password},setPassword:function(ir){var si=B(ue(ir));if(!this.cannotHaveUsernamePasswordPort()){this.password="";for(var kn=0;kn<si.length;kn++)this.password+=ui(si[kn],Gi)}},getHost:function(){var ir=this.host,si=this.port;return null===ir?"":null===si?Zn(ir):Zn(ir)+":"+si},setHost:function(ir){this.cannotBeABaseURL||this.parse(ir,Ut)},getHostname:function(){var ir=this.host;return null===ir?"":Zn(ir)},setHostname:function(ir){this.cannotBeABaseURL||this.parse(ir,Dn)},getPort:function(){var ir=this.port;return null===ir?"":ue(ir)},setPort:function(ir){this.cannotHaveUsernamePasswordPort()||(""==(ir=ue(ir))?this.port=null:this.parse(ir,Et))},getPathname:function(){var ir=this.path;return this.cannotBeABaseURL?ir[0]:ir.length?"/"+Oe(ir,"/"):""},setPathname:function(ir){this.cannotBeABaseURL||(this.path=[],this.parse(ir,Vt))},getSearch:function(){var ir=this.query;return ir?"?"+ir:""},setSearch:function(ir){""==(ir=ue(ir))?this.query=null:("?"==Pe(ir,0)&&(ir=rn(ir,1)),this.query="",this.parse(ir,xi)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var ir=this.fragment;return ir?"#"+ir:""},setHash:function(ir){""!=(ir=ue(ir))?("#"==Pe(ir,0)&&(ir=rn(ir,1)),this.fragment="",this.parse(ir,yi)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Qo=function(si){var kn=M(this,lo),nr=H(arguments.length,1)>1?arguments[1]:void 0,jr=ie(kn,new Yo(si,!1,nr));a||(kn.href=jr.serialize(),kn.origin=jr.getOrigin(),kn.protocol=jr.getProtocol(),kn.username=jr.getUsername(),kn.password=jr.getPassword(),kn.host=jr.getHost(),kn.hostname=jr.getHostname(),kn.port=jr.getPort(),kn.pathname=jr.getPathname(),kn.search=jr.getSearch(),kn.searchParams=jr.getSearchParams(),kn.hash=jr.getHash())},lo=Qo.prototype,Ri=function(ir,si){return{get:function(){return fe(this)[ir]()},set:si&&function(kn){return fe(this)[si](kn)},configurable:!0,enumerable:!0}};if(a&&(S(lo,"href",Ri("serialize","setHref")),S(lo,"origin",Ri("getOrigin")),S(lo,"protocol",Ri("getProtocol","setProtocol")),S(lo,"username",Ri("getUsername","setUsername")),S(lo,"password",Ri("getPassword","setPassword")),S(lo,"host",Ri("getHost","setHost")),S(lo,"hostname",Ri("getHostname","setHostname")),S(lo,"port",Ri("getPort","setPort")),S(lo,"pathname",Ri("getPathname","setPathname")),S(lo,"search",Ri("getSearch","setSearch")),S(lo,"searchParams",Ri("getSearchParams")),S(lo,"hash",Ri("getHash","setHash"))),g(lo,"toJSON",function(){return fe(this).serialize()},{enumerable:!0}),g(lo,"toString",function(){return fe(this).serialize()},{enumerable:!0}),ce){var ko=ce.createObjectURL,Xo=ce.revokeObjectURL;ko&&g(Qo,"createObjectURL",e(ko,ce)),Xo&&g(Qo,"revokeObjectURL",e(Xo,ce))}re(Qo,"URL"),r({global:!0,constructor:!0,forced:!f,sham:!a},{URL:Qo})},95981:(v,b,i)=>{i(80504)},71324:()=>{},75242:(v,b,i)=>{var r=i(74771);v.exports=r},10323:(v,b,i)=>{var r=i(8412);v.exports=r},99940:(v,b,i)=>{var r=i(399);v.exports=r},89919:(v,b,i)=>{var r=i(98812);v.exports=r},14869:(v,b,i)=>{var r=i(33195);v.exports=r},4475:(v,b,i)=>{var r=i(46332);v.exports=r},38762:(v,b,i)=>{var r=i(42618);v.exports=r},8748:(v,b,i)=>{var r=i(63791);i(33089),v.exports=r},71873:(v,b,i)=>{var r=i(69029);v.exports=r},61599:(v,b,i)=>{var r=i(28924);v.exports=r},34097:(v,b,i)=>{i(33089);var r=i(35329),a=i(80112),f=i(23336),u=i(99940),e=Array.prototype,p={DOMTokenList:!0,NodeList:!0};v.exports=function(g){var S=g.entries;return g===e||f(e,g)&&S===e.entries||a(p,r(g))?u:S}},15149:(v,b,i)=>{var r=i(98709);v.exports=r},83361:(v,b,i)=>{var r=i(65991);v.exports=r},19095:(v,b,i)=>{var r=i(64158);v.exports=r},71420:(v,b,i)=>{var r=i(91799);v.exports=r},13178:(v,b,i)=>{var r=i(26155);v.exports=r},52049:(v,b,i)=>{i(33089);var r=i(35329),a=i(80112),f=i(23336),u=i(89919),e=Array.prototype,p={DOMTokenList:!0,NodeList:!0};v.exports=function(g){var S=g.forEach;return g===e||f(e,g)&&S===e.forEach||a(p,r(g))?u:S}},83655:(v,b,i)=>{var r=i(33758);v.exports=r},87054:(v,b,i)=>{var r=i(7592);v.exports=r},51946:(v,b,i)=>{i(33089);var r=i(35329),a=i(80112),f=i(23336),u=i(14869),e=Array.prototype,p={DOMTokenList:!0,NodeList:!0};v.exports=function(g){var S=g.keys;return g===e||f(e,g)&&S===e.keys||a(p,r(g))?u:S}},40764:(v,b,i)=>{var r=i(17480);v.exports=r},81214:(v,b,i)=>{var r=i(20681);v.exports=r},50881:(v,b,i)=>{var r=i(90949);v.exports=r},38813:(v,b,i)=>{var r=i(99316);v.exports=r},45284:(v,b,i)=>{var r=i(62212);v.exports=r},70157:(v,b,i)=>{var r=i(49073);v.exports=r},3502:(v,b,i)=>{var r=i(24146);v.exports=r},81610:(v,b,i)=>{var r=i(40104);v.exports=r},19543:(v,b,i)=>{var r=i(3555);v.exports=r},74046:(v,b,i)=>{var r=i(68333);v.exports=r},13731:(v,b,i)=>{var r=i(65786);v.exports=r},80129:(v,b,i)=>{i(33089);var r=i(35329),a=i(80112),f=i(23336),u=i(4475),e=Array.prototype,p={DOMTokenList:!0,NodeList:!0};v.exports=function(g){var S=g.values;return g===e||f(e,g)&&S===e.values||a(p,r(g))?u:S}},43720:(v,b,i)=>{var r=i(66306);v.exports=r},640:(v,b,i)=>{var r=i(31845);i(33089),v.exports=r},50320:(v,b,i)=>{var r=i(44168);v.exports=r},93006:(v,b,i)=>{var r=i(25852);v.exports=r},36226:(v,b,i)=>{var r=i(24457);v.exports=r},21968:(v,b,i)=>{var r=i(99671);v.exports=r},87259:(v,b,i)=>{var r=i(38007);v.exports=r},62021:(v,b,i)=>{var r=i(57432);v.exports=r},57682:(v,b,i)=>{var r=i(36541);v.exports=r},94222:(v,b,i)=>{var r=i(17303);v.exports=r},1162:(v,b,i)=>{var r=i(62149);v.exports=r},82805:(v,b,i)=>{var r=i(86537);v.exports=r},70809:(v,b,i)=>{var r=i(79553);v.exports=r},26498:(v,b,i)=>{var r=i(80092);i(33089),v.exports=r},44850:(v,b,i)=>{var r=i(472);v.exports=r},9634:(v,b,i)=>{var r=i(4678);v.exports=r},12118:(v,b,i)=>{i(69280);var r=i(13544);v.exports=r.setTimeout},96551:(v,b,i)=>{var r=i(61697);i(33089),v.exports=r},98908:(v,b,i)=>{var r=i(42497);i(33089),v.exports=r},55434:(v,b,i)=>{var r=i(50681);v.exports=r},70906:(v,b,i)=>{var r=i(75081);v.exports=r},75081:(v,b,i)=>{i(95981),i(37256),i(71324),i(26953),i(86023);var r=i(13544);v.exports=r.URL},71577:function(){var v;v="undefined"!=typeof self?self:this,function(i){var r_searchParams="URLSearchParams"in v,r_iterable="Symbol"in v&&"iterator"in Symbol,r_blob="FileReader"in v&&"Blob"in v&&function(){try{return new Blob,!0}catch(Ce){return!1}}(),r_formData="FormData"in v,r_arrayBuffer="ArrayBuffer"in v;if(r_arrayBuffer)var f=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],u=ArrayBuffer.isView||function(Ce){return Ce&&f.indexOf(Object.prototype.toString.call(Ce))>-1};function e(Ce){if("string"!=typeof Ce&&(Ce=String(Ce)),/[^a-z0-9\-#$%&'*+.^_`|~]/i.test(Ce))throw new TypeError("Invalid character in header field name");return Ce.toLowerCase()}function p(Ce){return"string"!=typeof Ce&&(Ce=String(Ce)),Ce}function g(Ce){var ce={next:function(){var Be=Ce.shift();return{done:void 0===Be,value:Be}}};return r_iterable&&(ce[Symbol.iterator]=function(){return ce}),ce}function S(Ce){this.map={},Ce instanceof S?Ce.forEach(function(ce,Be){this.append(Be,ce)},this):Array.isArray(Ce)?Ce.forEach(function(ce){this.append(ce[0],ce[1])},this):Ce&&Object.getOwnPropertyNames(Ce).forEach(function(ce){this.append(ce,Ce[ce])},this)}function M(Ce){if(Ce.bodyUsed)return Promise.reject(new TypeError("Already read"));Ce.bodyUsed=!0}function w(Ce){return new Promise(function(ce,Be){Ce.onload=function(){ce(Ce.result)},Ce.onerror=function(){Be(Ce.error)}})}function x(Ce){var ce=new FileReader,Be=w(ce);return ce.readAsArrayBuffer(Ce),Be}function j(Ce){if(Ce.slice)return Ce.slice(0);var ce=new Uint8Array(Ce.byteLength);return ce.set(new Uint8Array(Ce)),ce.buffer}function q(){return this.bodyUsed=!1,this._initBody=function(Ce){this._bodyInit=Ce,Ce?"string"==typeof Ce?this._bodyText=Ce:r_blob&&Blob.prototype.isPrototypeOf(Ce)?this._bodyBlob=Ce:r_formData&&FormData.prototype.isPrototypeOf(Ce)?this._bodyFormData=Ce:r_searchParams&&URLSearchParams.prototype.isPrototypeOf(Ce)?this._bodyText=Ce.toString():r_arrayBuffer&&r_blob&&function a(Ce){return Ce&&DataView.prototype.isPrototypeOf(Ce)}(Ce)?(this._bodyArrayBuffer=j(Ce.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):r_arrayBuffer&&(ArrayBuffer.prototype.isPrototypeOf(Ce)||u(Ce))?this._bodyArrayBuffer=j(Ce):this._bodyText=Ce=Object.prototype.toString.call(Ce):this._bodyText="",this.headers.get("content-type")||("string"==typeof Ce?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):r_searchParams&&URLSearchParams.prototype.isPrototypeOf(Ce)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},r_blob&&(this.blob=function(){var Ce=M(this);if(Ce)return Ce;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?M(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(x)}),this.text=function(){var Ce=M(this);if(Ce)return Ce;if(this._bodyBlob)return function B(Ce){var ce=new FileReader,Be=w(ce);return ce.readAsText(Ce),Be}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function W(Ce){for(var ce=new Uint8Array(Ce),Be=new Array(ce.length),Ve=0;Ve<ce.length;Ve++)Be[Ve]=String.fromCharCode(ce[Ve]);return Be.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},r_formData&&(this.formData=function(){return this.text().then(se)}),this.json=function(){return this.text().then(JSON.parse)},this}S.prototype.append=function(Ce,ce){Ce=e(Ce),ce=p(ce);var Be=this.map[Ce];this.map[Ce]=Be?Be+", "+ce:ce},S.prototype.delete=function(Ce){delete this.map[e(Ce)]},S.prototype.get=function(Ce){return Ce=e(Ce),this.has(Ce)?this.map[Ce]:null},S.prototype.has=function(Ce){return this.map.hasOwnProperty(e(Ce))},S.prototype.set=function(Ce,ce){this.map[e(Ce)]=p(ce)},S.prototype.forEach=function(Ce,ce){for(var Be in this.map)this.map.hasOwnProperty(Be)&&Ce.call(ce,this.map[Be],Be,this)},S.prototype.keys=function(){var Ce=[];return this.forEach(function(ce,Be){Ce.push(Be)}),g(Ce)},S.prototype.values=function(){var Ce=[];return this.forEach(function(ce){Ce.push(ce)}),g(Ce)},S.prototype.entries=function(){var Ce=[];return this.forEach(function(ce,Be){Ce.push([Be,ce])}),g(Ce)},r_iterable&&(S.prototype[Symbol.iterator]=S.prototype.entries);var ue=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];function H(Ce,ce){var Be=(ce=ce||{}).body;if(Ce instanceof H){if(Ce.bodyUsed)throw new TypeError("Already read");this.url=Ce.url,this.credentials=Ce.credentials,ce.headers||(this.headers=new S(Ce.headers)),this.method=Ce.method,this.mode=Ce.mode,this.signal=Ce.signal,!Be&&null!=Ce._bodyInit&&(Be=Ce._bodyInit,Ce.bodyUsed=!0)}else this.url=String(Ce);if(this.credentials=ce.credentials||this.credentials||"same-origin",(ce.headers||!this.headers)&&(this.headers=new S(ce.headers)),this.method=function re(Ce){var ce=Ce.toUpperCase();return ue.indexOf(ce)>-1?ce:Ce}(ce.method||this.method||"GET"),this.mode=ce.mode||this.mode||null,this.signal=ce.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&Be)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(Be)}function se(Ce){var ce=new FormData;return Ce.trim().split("&").forEach(function(Be){if(Be){var Ve=Be.split("="),Xe=Ve.shift().replace(/\+/g," "),He=Ve.join("=").replace(/\+/g," ");ce.append(decodeURIComponent(Xe),decodeURIComponent(He))}}),ce}function ae(Ce){var ce=new S;return Ce.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(Ve){var Xe=Ve.split(":"),He=Xe.shift().trim();if(He){var Pe=Xe.join(":").trim();ce.append(He,Pe)}}),ce}function ie(Ce,ce){ce||(ce={}),this.type="default",this.status=void 0===ce.status?200:ce.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in ce?ce.statusText:"OK",this.headers=new S(ce.headers),this.url=ce.url||"",this._initBody(Ce)}H.prototype.clone=function(){return new H(this,{body:this._bodyInit})},q.call(H.prototype),q.call(ie.prototype),ie.prototype.clone=function(){return new ie(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new S(this.headers),url:this.url})},ie.error=function(){var Ce=new ie(null,{status:0,statusText:""});return Ce.type="error",Ce};var fe=[301,302,303,307,308];ie.redirect=function(Ce,ce){if(-1===fe.indexOf(ce))throw new RangeError("Invalid status code");return new ie(null,{status:ce,headers:{location:Ce}})},i.DOMException=v.DOMException;try{new i.DOMException}catch(Ce){i.DOMException=function(ce,Be){this.message=ce,this.name=Be;var Ve=Error(ce);this.stack=Ve.stack},i.DOMException.prototype=Object.create(Error.prototype),i.DOMException.prototype.constructor=i.DOMException}function he(Ce,ce){return new Promise(function(Be,Ve){var Xe=new H(Ce,ce);if(Xe.signal&&Xe.signal.aborted)return Ve(new i.DOMException("Aborted","AbortError"));var He=new XMLHttpRequest;function Pe(){He.abort()}He.onload=function(){var Ge={status:He.status,statusText:He.statusText,headers:ae(He.getAllResponseHeaders()||"")};Ge.url="responseURL"in He?He.responseURL:Ge.headers.get("X-Request-URL"),Be(new ie("response"in He?He.response:He.responseText,Ge))},He.onerror=function(){Ve(new TypeError("Network request failed"))},He.ontimeout=function(){Ve(new TypeError("Network request failed"))},He.onabort=function(){Ve(new i.DOMException("Aborted","AbortError"))},He.open(Xe.method,Xe.url,!0),"include"===Xe.credentials?He.withCredentials=!0:"omit"===Xe.credentials&&(He.withCredentials=!1),"responseType"in He&&r_blob&&(He.responseType="blob"),Xe.headers.forEach(function(Ge,Oe){He.setRequestHeader(Oe,Ge)}),Xe.signal&&(Xe.signal.addEventListener("abort",Pe),He.onreadystatechange=function(){4===He.readyState&&Xe.signal.removeEventListener("abort",Pe)}),He.send(void 0===Xe._bodyInit?null:Xe._bodyInit)})}he.polyfill=!0,v.fetch||(v.fetch=he,v.Headers=S,v.Request=H,v.Response=ie),i.Headers=S,i.Request=H,i.Response=ie,i.fetch=he,Object.defineProperty(i,"__esModule",{value:!0})}({})},52243:function(v){var b;b="undefined"!=typeof global?global:this,v.exports=function(b){if(b.CSS&&b.CSS.escape)return b.CSS.escape;var i=function(r){if(0==arguments.length)throw new TypeError("`CSS.escape` requires an argument.");for(var e,a=String(r),f=a.length,u=-1,p="",g=a.charCodeAt(0);++u<f;)0!=(e=a.charCodeAt(u))?p+=e>=1&&e<=31||127==e||0==u&&e>=48&&e<=57||1==u&&e>=48&&e<=57&&45==g?"\\"+e.toString(16)+" ":0==u&&1==f&&45==e||!(e>=128||45==e||95==e||e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122)?"\\"+a.charAt(u):a.charAt(u):p+="\ufffd";return p};return b.CSS||(b.CSS={}),b.CSS.escape=i,i}(b)},89225:v=>{"use strict";var b=function(re){return function i(ue){return!!ue&&"object"==typeof ue}(re)&&!function r(ue){var re=Object.prototype.toString.call(ue);return"[object RegExp]"===re||"[object Date]"===re||function u(ue){return ue.$$typeof===f}(ue)}(re)},f="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function p(ue,re){return!1!==re.clone&&re.isMergeableObject(ue)?j(function e(ue){return Array.isArray(ue)?[]:{}}(ue),ue,re):ue}function g(ue,re,H){return ue.concat(re).map(function(se){return p(se,H)})}function w(ue){return Object.keys(ue).concat(function M(ue){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(ue).filter(function(re){return Object.propertyIsEnumerable.call(ue,re)}):[]}(ue))}function x(ue,re){try{return re in ue}catch(H){return!1}}function j(ue,re,H){(H=H||{}).arrayMerge=H.arrayMerge||g,H.isMergeableObject=H.isMergeableObject||b,H.cloneUnlessOtherwiseSpecified=p;var se=Array.isArray(re);return se===Array.isArray(ue)?se?H.arrayMerge(ue,re,H):function W(ue,re,H){var se={};return H.isMergeableObject(ue)&&w(ue).forEach(function(ae){se[ae]=p(ue[ae],H)}),w(re).forEach(function(ae){(function B(ue,re){return x(ue,re)&&!(Object.hasOwnProperty.call(ue,re)&&Object.propertyIsEnumerable.call(ue,re))})(ue,ae)||(se[ae]=x(ue,ae)&&H.isMergeableObject(re[ae])?function S(ue,re){if(!re.customMerge)return j;var H=re.customMerge(ue);return"function"==typeof H?H:j}(ae,H)(ue[ae],re[ae],H):p(re[ae],H))}),se}(ue,re,H):p(re,H)}j.all=function(re,H){if(!Array.isArray(re))throw new Error("first argument should be an array");return re.reduce(function(se,ae){return j(se,ae,H)},{})},v.exports=j},97057:(v,b,i)=>{"use strict";i.d(b,{qY:()=>B});var a=function se(ae,ie,fe){this.name=ae,this.version=ie,this.os=fe,this.type="browser"},f=function se(ae){this.version=ae,this.type="node",this.name="node",this.os=process.platform},u=function se(ae,ie,fe,he){this.name=ae,this.version=ie,this.os=fe,this.bot=he,this.type="bot-device"},e=function se(){this.type="bot",this.bot=!0,this.name="bot",this.version=null,this.os=null},p=function se(){this.type="react-native",this.name="react-native",this.version=null,this.os=null},S=/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\ Jeeves\/Teoma|ia_archiver)/,w=[["aol",/AOLShield\/([0-9\._]+)/],["edge",/Edge\/([0-9\._]+)/],["edge-ios",/EdgiOS\/([0-9\._]+)/],["yandexbrowser",/YaBrowser\/([0-9\._]+)/],["kakaotalk",/KAKAOTALK\s([0-9\.]+)/],["samsung",/SamsungBrowser\/([0-9\.]+)/],["silk",/\bSilk\/([0-9._-]+)\b/],["miui",/MiuiBrowser\/([0-9\.]+)$/],["beaker",/BeakerBrowser\/([0-9\.]+)/],["edge-chromium",/EdgA?\/([0-9\.]+)/],["chromium-webview",/(?!Chrom.*OPR)wv\).*Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["chrome",/(?!Chrom.*OPR)Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["phantomjs",/PhantomJS\/([0-9\.]+)(:?\s|$)/],["crios",/CriOS\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["fxios",/FxiOS\/([0-9\.]+)/],["opera-mini",/Opera Mini.*Version\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["opera",/OPR\/([0-9\.]+)(:?\s|$)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+).*\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-7].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/Version\/([0-9\._]+).*Mobile.*Safari.*/],["safari",/Version\/([0-9\._]+).*Safari/],["facebook",/FBAV\/([0-9\.]+)/],["instagram",/Instagram\s([0-9\.]+)/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Mobile/],["ios-webview",/AppleWebKit\/([0-9\.]+).*Gecko\)$/],["searchbot",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],x=[["iOS",/iP(hone|od|ad)/],["Android OS",/Android/],["BlackBerry OS",/BlackBerry|BB10/],["Windows Mobile",/IEMobile/],["Amazon OS",/Kindle/],["Windows 3.11",/Win16/],["Windows 95",/(Windows 95)|(Win95)|(Windows_95)/],["Windows 98",/(Windows 98)|(Win98)/],["Windows 2000",/(Windows NT 5.0)|(Windows 2000)/],["Windows XP",/(Windows NT 5.1)|(Windows XP)/],["Windows Server 2003",/(Windows NT 5.2)/],["Windows Vista",/(Windows NT 6.0)/],["Windows 7",/(Windows NT 6.1)/],["Windows 8",/(Windows NT 6.2)/],["Windows 8.1",/(Windows NT 6.3)/],["Windows 10",/(Windows NT 10.0)/],["Windows ME",/Windows ME/],["Open BSD",/OpenBSD/],["Sun OS",/SunOS/],["Chrome OS",/CrOS/],["Linux",/(Linux)|(X11)/],["Mac OS",/(Mac_PowerPC)|(Macintosh)/],["QNX",/QNX/],["BeOS",/BeOS/],["OS/2",/OS\/2/]];function B(se){return se?q(se):"undefined"==typeof document&&"undefined"!=typeof navigator&&"ReactNative"===navigator.product?new p:"undefined"!=typeof navigator?q(navigator.userAgent):function re(){return"undefined"!=typeof process&&process.version?new f(process.version.slice(1)):null}()}function q(se){var ae=function W(se){return""!==se&&w.reduce(function(ae,ie){var fe=ie[0];if(ae)return ae;var Ce=ie[1].exec(se);return!!Ce&&[fe,Ce]},!1)}(se);if(!ae)return null;var ie=ae[0],fe=ae[1];if("searchbot"===ie)return new e;var he=fe[1]&&fe[1].split(/[._]/).slice(0,3);he?he.length<3&&(he=function(){for(var se=0,ae=0,ie=arguments.length;ae<ie;ae++)se+=arguments[ae].length;var fe=Array(se),he=0;for(ae=0;ae<ie;ae++)for(var Ce=arguments[ae],ce=0,Be=Ce.length;ce<Be;ce++,he++)fe[he]=Ce[ce];return fe}(he,function H(se){for(var ae=[],ie=0;ie<se;ie++)ae.push("0");return ae}(3-he.length))):he=[];var Ce=he.join("."),ce=function ue(se){for(var ae=0,ie=x.length;ae<ie;ae++){var fe=x[ae],he=fe[0];if(fe[1].exec(se))return he}return null}(se),Be=S.exec(se);return Be&&Be[1]?new u(ie,Ce,ce,Be[1]):new a(ie,Ce,ce)}},23358:function(v){v.exports=function(){"use strict";var i=Object.hasOwnProperty,r=Object.setPrototypeOf,a=Object.isFrozen,f=Object.getPrototypeOf,u=Object.getOwnPropertyDescriptor,e=Object.freeze,p=Object.seal,g=Object.create,S="undefined"!=typeof Reflect&&Reflect,M=S.apply,w=S.construct;M||(M=function(Hn,er,_r){return Hn.apply(er,_r)}),e||(e=function(Hn){return Hn}),p||(p=function(Hn){return Hn}),w||(w=function(Hn,er){return new(Function.prototype.bind.apply(Hn,[null].concat(function b(Ur){if(Array.isArray(Ur)){for(var Hn=0,er=Array(Ur.length);Hn<Ur.length;Hn++)er[Hn]=Ur[Hn];return er}return Array.from(Ur)}(er))))});var x=ie(Array.prototype.forEach),B=ie(Array.prototype.pop),W=ie(Array.prototype.push),j=ie(String.prototype.toLowerCase),q=ie(String.prototype.match),ue=ie(String.prototype.replace),re=ie(String.prototype.indexOf),H=ie(String.prototype.trim),se=ie(RegExp.prototype.test),ae=function fe(Ur){return function(){for(var Hn=arguments.length,er=Array(Hn),_r=0;_r<Hn;_r++)er[_r]=arguments[_r];return w(Ur,er)}}(TypeError);function ie(Ur){return function(Hn){for(var er=arguments.length,_r=Array(er>1?er-1:0),ei=1;ei<er;ei++)_r[ei-1]=arguments[ei];return M(Ur,Hn,_r)}}function he(Ur,Hn){r&&r(Ur,null);for(var er=Hn.length;er--;){var _r=Hn[er];if("string"==typeof _r){var ei=j(_r);ei!==_r&&(a(Hn)||(Hn[er]=ei),_r=ei)}Ur[_r]=!0}return Ur}function Ce(Ur){var Hn=g(null),er=void 0;for(er in Ur)M(i,Ur,[er])&&(Hn[er]=Ur[er]);return Hn}function ce(Ur,Hn){for(;null!==Ur;){var er=u(Ur,Hn);if(er){if(er.get)return ie(er.get);if("function"==typeof er.value)return ie(er.value)}Ur=f(Ur)}return function _r(ei){return console.warn("fallback value for",ei),null}}var Be=e(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Ve=e(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Xe=e(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),He=e(["animate","color-profile","cursor","discard","fedropshadow","feimage","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Pe=e(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover"]),Ge=e(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Oe=e(["#text"]),Tt=e(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),We=e(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Qt=e(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Nt=e(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Yt=p(/\{\{[\s\S]*|[\s\S]*\}\}/gm),dn=p(/<%[\s\S]*|[\s\S]*%>/gm),rn=p(/^data-[\-\w.\u00B7-\uFFFF]/),vt=p(/^aria-[\-\w]+$/),xt=p(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Ct=p(/^(?:\w+script|data):/i),Gt=p(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Fn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(Ur){return typeof Ur}:function(Ur){return Ur&&"function"==typeof Symbol&&Ur.constructor===Symbol&&Ur!==Symbol.prototype?"symbol":typeof Ur};function pr(Ur){if(Array.isArray(Ur)){for(var Hn=0,er=Array(Ur.length);Hn<Ur.length;Hn++)er[Hn]=Ur[Hn];return er}return Array.from(Ur)}var mi=function(){return"undefined"==typeof window?null:window},ci=function(Hn,er){if("object"!==(void 0===Hn?"undefined":Fn(Hn))||"function"!=typeof Hn.createPolicy)return null;var _r=null,ei="data-tt-policy-suffix";er.currentScript&&er.currentScript.hasAttribute(ei)&&(_r=er.currentScript.getAttribute(ei));var bi="dompurify"+(_r?"#"+_r:"");try{return Hn.createPolicy(bi,{createHTML:function(no){return no}})}catch(fi){return console.warn("TrustedTypes policy "+bi+" could not be created."),null}};return function hr(){var Ur=arguments.length>0&&void 0!==arguments[0]?arguments[0]:mi(),Hn=function(kr){return hr(kr)};if(Hn.version="2.3.3",Hn.removed=[],!Ur||!Ur.document||9!==Ur.document.nodeType)return Hn.isSupported=!1,Hn;var er=Ur.document,_r=Ur.document,ei=Ur.DocumentFragment,bi=Ur.HTMLTemplateElement,fi=Ur.Node,no=Ur.Element,xo=Ur.NodeFilter,Er=Ur.NamedNodeMap,an=void 0===Er?Ur.NamedNodeMap||Ur.MozNamedAttrMap:Er,vn=Ur.Text,Zn=Ur.Comment,Xn=Ur.DOMParser,zn=Ur.trustedTypes,ri=no.prototype,Gi=ce(ri,"cloneNode"),ui=ce(ri,"nextSibling"),vr=ce(ri,"childNodes"),Ji=ce(ri,"parentNode");if("function"==typeof bi){var mn=_r.createElement("template");mn.content&&mn.content.ownerDocument&&(_r=mn.content.ownerDocument)}var Rn=ci(zn,er),Wn=Rn&&jr?Rn.createHTML(""):"",Le=_r.implementation,Re=_r.createNodeIterator,Se=_r.createDocumentFragment,dt=_r.getElementsByTagName,st=er.importNode,nn={};try{nn=Ce(_r).documentMode?_r.documentMode:{}}catch(Oo){}var Fe={};Hn.isSupported="function"==typeof Ji&&Le&&void 0!==Le.createHTMLDocument&&9!==nn;var Lr=Yt,ti=dn,Ut=rn,Dn=vt,Et=Ct,$t=Gt,_t=xt,yt=null,Vt=he({},[].concat(pr(Be),pr(Ve),pr(Xe),pr(Pe),pr(Oe))),yn=null,Cr=he({},[].concat(pr(Tt),pr(We),pr(Qt),pr(Nt))),xi=null,yi=null,Yo=!0,Qo=!0,lo=!1,Ri=!1,ko=!1,Xo=!1,ir=!1,si=!1,kn=!1,nr=!0,jr=!1,ao=!0,$i=!0,Eo=!1,mo={},Go=null,ua=he({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),or=null,Mr=he({},["audio","video","img","source","image","track"]),Ar=null,cr=he({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),pi="http://www.w3.org/1998/Math/MathML",Sn="http://www.w3.org/2000/svg",$n="http://www.w3.org/1999/xhtml",Jr=$n,ro=!1,go=void 0,Ro=["application/xhtml+xml","text/html"],Ys="text/html",ds=void 0,es=null,ma=_r.createElement("form"),Ea=function(kr){es&&es===kr||((!kr||"object"!==(void 0===kr?"undefined":Fn(kr)))&&(kr={}),kr=Ce(kr),yt="ALLOWED_TAGS"in kr?he({},kr.ALLOWED_TAGS):Vt,yn="ALLOWED_ATTR"in kr?he({},kr.ALLOWED_ATTR):Cr,Ar="ADD_URI_SAFE_ATTR"in kr?he(Ce(cr),kr.ADD_URI_SAFE_ATTR):cr,or="ADD_DATA_URI_TAGS"in kr?he(Ce(Mr),kr.ADD_DATA_URI_TAGS):Mr,Go="FORBID_CONTENTS"in kr?he({},kr.FORBID_CONTENTS):ua,xi="FORBID_TAGS"in kr?he({},kr.FORBID_TAGS):{},yi="FORBID_ATTR"in kr?he({},kr.FORBID_ATTR):{},mo="USE_PROFILES"in kr&&kr.USE_PROFILES,Yo=!1!==kr.ALLOW_ARIA_ATTR,Qo=!1!==kr.ALLOW_DATA_ATTR,lo=kr.ALLOW_UNKNOWN_PROTOCOLS||!1,Ri=kr.SAFE_FOR_TEMPLATES||!1,ko=kr.WHOLE_DOCUMENT||!1,si=kr.RETURN_DOM||!1,kn=kr.RETURN_DOM_FRAGMENT||!1,nr=!1!==kr.RETURN_DOM_IMPORT,jr=kr.RETURN_TRUSTED_TYPE||!1,ir=kr.FORCE_BODY||!1,ao=!1!==kr.SANITIZE_DOM,$i=!1!==kr.KEEP_CONTENT,Eo=kr.IN_PLACE||!1,_t=kr.ALLOWED_URI_REGEXP||_t,Jr=kr.NAMESPACE||$n,go=go=-1===Ro.indexOf(kr.PARSER_MEDIA_TYPE)?Ys:kr.PARSER_MEDIA_TYPE,ds="application/xhtml+xml"===go?function(Ki){return Ki}:j,Ri&&(Qo=!1),kn&&(si=!0),mo&&(yt=he({},[].concat(pr(Oe))),yn=[],!0===mo.html&&(he(yt,Be),he(yn,Tt)),!0===mo.svg&&(he(yt,Ve),he(yn,We),he(yn,Nt)),!0===mo.svgFilters&&(he(yt,Xe),he(yn,We),he(yn,Nt)),!0===mo.mathMl&&(he(yt,Pe),he(yn,Qt),he(yn,Nt))),kr.ADD_TAGS&&(yt===Vt&&(yt=Ce(yt)),he(yt,kr.ADD_TAGS)),kr.ADD_ATTR&&(yn===Cr&&(yn=Ce(yn)),he(yn,kr.ADD_ATTR)),kr.ADD_URI_SAFE_ATTR&&he(Ar,kr.ADD_URI_SAFE_ATTR),kr.FORBID_CONTENTS&&(Go===ua&&(Go=Ce(Go)),he(Go,kr.FORBID_CONTENTS)),$i&&(yt["#text"]=!0),ko&&he(yt,["html","head","body"]),yt.table&&(he(yt,["tbody"]),delete xi.tbody),e&&e(kr),es=kr)},fa=he({},["mi","mo","mn","ms","mtext"]),sa=he({},["foreignobject","desc","title","annotation-xml"]),Ra=he({},Ve);he(Ra,Xe),he(Ra,He);var pl=he({},Pe);he(pl,Ge);var Co=function(kr){var Ki=Ji(kr);(!Ki||!Ki.tagName)&&(Ki={namespaceURI:$n,tagName:"template"});var ut=j(kr.tagName),pn=j(Ki.tagName);if(kr.namespaceURI===Sn)return Ki.namespaceURI===$n?"svg"===ut:Ki.namespaceURI===pi?"svg"===ut&&("annotation-xml"===pn||fa[pn]):Boolean(Ra[ut]);if(kr.namespaceURI===pi)return Ki.namespaceURI===$n?"math"===ut:Ki.namespaceURI===Sn?"math"===ut&&sa[pn]:Boolean(pl[ut]);if(kr.namespaceURI===$n){if(Ki.namespaceURI===Sn&&!sa[pn]||Ki.namespaceURI===pi&&!fa[pn])return!1;var te=he({},["title","style","font","a","script"]);return!pl[ut]&&(te[ut]||!Ra[ut])}return!1},yl=function(kr){W(Hn.removed,{element:kr});try{kr.parentNode.removeChild(kr)}catch(Ki){try{kr.outerHTML=Wn}catch(ut){kr.remove()}}},Wo=function(kr,Ki){try{W(Hn.removed,{attribute:Ki.getAttributeNode(kr),from:Ki})}catch(ut){W(Hn.removed,{attribute:null,from:Ki})}if(Ki.removeAttribute(kr),"is"===kr&&!yn[kr])if(si||kn)try{yl(Ki)}catch(ut){}else try{Ki.setAttribute(kr,"")}catch(ut){}},ys=function(kr){var Ki=void 0,ut=void 0;if(ir)kr="<remove></remove>"+kr;else{var pn=q(kr,/^[\r\n\t ]+/);ut=pn&&pn[0]}"application/xhtml+xml"===go&&(kr='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+kr+"</body></html>");var te=Rn?Rn.createHTML(kr):kr;if(Jr===$n)try{Ki=(new Xn).parseFromString(te,go)}catch(jt){}if(!Ki||!Ki.documentElement){Ki=Le.createDocument(Jr,"template",null);try{Ki.documentElement.innerHTML=ro?"":te}catch(jt){}}var Ue=Ki.body||Ki.documentElement;return kr&&ut&&Ue.insertBefore(_r.createTextNode(ut),Ue.childNodes[0]||null),Jr===$n?dt.call(Ki,ko?"html":"body")[0]:ko?Ki.documentElement:Ue},Wa=function(kr){return Re.call(kr.ownerDocument||kr,kr,xo.SHOW_ELEMENT|xo.SHOW_COMMENT|xo.SHOW_TEXT,null,!1)},Is=function(kr){return!(kr instanceof vn||kr instanceof Zn||"string"==typeof kr.nodeName&&"string"==typeof kr.textContent&&"function"==typeof kr.removeChild&&kr.attributes instanceof an&&"function"==typeof kr.removeAttribute&&"function"==typeof kr.setAttribute&&"string"==typeof kr.namespaceURI&&"function"==typeof kr.insertBefore)},nl=function(kr){return"object"===(void 0===fi?"undefined":Fn(fi))?kr instanceof fi:kr&&"object"===(void 0===kr?"undefined":Fn(kr))&&"number"==typeof kr.nodeType&&"string"==typeof kr.nodeName},js=function(kr,Ki,ut){!Fe[kr]||x(Fe[kr],function(pn){pn.call(Hn,Ki,ut,es)})},$o=function(kr){var Ki=void 0;if(js("beforeSanitizeElements",kr,null),Is(kr)||q(kr.nodeName,/[\u0080-\uFFFF]/))return yl(kr),!0;var ut=ds(kr.nodeName);if(js("uponSanitizeElement",kr,{tagName:ut,allowedTags:yt}),!nl(kr.firstElementChild)&&(!nl(kr.content)||!nl(kr.content.firstElementChild))&&se(/<[/\w]/g,kr.innerHTML)&&se(/<[/\w]/g,kr.textContent)||"select"===ut&&se(/<template/i,kr.innerHTML))return yl(kr),!0;if(!yt[ut]||xi[ut]){if($i&&!Go[ut]){var pn=Ji(kr)||kr.parentNode,te=vr(kr)||kr.childNodes;if(te&&pn)for(var jt=te.length-1;jt>=0;--jt)pn.insertBefore(Gi(te[jt],!0),ui(kr))}return yl(kr),!0}return kr instanceof no&&!Co(kr)||("noscript"===ut||"noembed"===ut)&&se(/<\/no(script|embed)/i,kr.innerHTML)?(yl(kr),!0):(Ri&&3===kr.nodeType&&(Ki=ue(Ki=kr.textContent,Lr," "),Ki=ue(Ki,ti," "),kr.textContent!==Ki&&(W(Hn.removed,{element:kr.cloneNode()}),kr.textContent=Ki)),js("afterSanitizeElements",kr,null),!1)},To=function(kr,Ki,ut){if(ao&&("id"===Ki||"name"===Ki)&&(ut in _r||ut in ma))return!1;if((!Qo||yi[Ki]||!se(Ut,Ki))&&(!Yo||!se(Dn,Ki))){if(!yn[Ki]||yi[Ki])return!1;if(!Ar[Ki]&&!se(_t,ue(ut,$t,""))&&("src"!==Ki&&"xlink:href"!==Ki&&"href"!==Ki||"script"===kr||0!==re(ut,"data:")||!or[kr])&&(!lo||se(Et,ue(ut,$t,"")))&&ut)return!1}return!0},Ns=function(kr){var Ki=void 0,ut=void 0,pn=void 0,te=void 0;js("beforeSanitizeAttributes",kr,null);var Ue=kr.attributes;if(Ue){var jt={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:yn};for(te=Ue.length;te--;){var ii=(Ki=Ue[te]).name,Oi=Ki.namespaceURI;if(ut=H(Ki.value),pn=ds(ii),jt.attrName=pn,jt.attrValue=ut,jt.keepAttr=!0,jt.forceKeepAttr=void 0,js("uponSanitizeAttribute",kr,jt),ut=jt.attrValue,!jt.forceKeepAttr&&(Wo(ii,kr),jt.keepAttr)){if(se(/\/>/i,ut)){Wo(ii,kr);continue}Ri&&(ut=ue(ut,Lr," "),ut=ue(ut,ti," "));var ki=ds(kr.nodeName);if(To(ki,pn,ut))try{Oi?kr.setAttributeNS(Oi,ii,ut):kr.setAttribute(ii,ut),B(Hn.removed)}catch(_s){}}}js("afterSanitizeAttributes",kr,null)}},hs=function Oo(kr){var Ki=void 0,ut=Wa(kr);for(js("beforeSanitizeShadowDOM",kr,null);Ki=ut.nextNode();)js("uponSanitizeShadowNode",Ki,null),!$o(Ki)&&(Ki.content instanceof ei&&Oo(Ki.content),Ns(Ki));js("afterSanitizeShadowDOM",kr,null)};return Hn.sanitize=function(Oo,kr){var Ki=void 0,ut=void 0,pn=void 0,te=void 0,Ue=void 0;if((ro=!Oo)&&(Oo="\x3c!--\x3e"),"string"!=typeof Oo&&!nl(Oo)){if("function"!=typeof Oo.toString)throw ae("toString is not a function");if("string"!=typeof(Oo=Oo.toString()))throw ae("dirty is not a string, aborting")}if(!Hn.isSupported){if("object"===Fn(Ur.toStaticHTML)||"function"==typeof Ur.toStaticHTML){if("string"==typeof Oo)return Ur.toStaticHTML(Oo);if(nl(Oo))return Ur.toStaticHTML(Oo.outerHTML)}return Oo}if(Xo||Ea(kr),Hn.removed=[],"string"==typeof Oo&&(Eo=!1),!Eo)if(Oo instanceof fi)1===(ut=(Ki=ys("\x3c!----\x3e")).ownerDocument.importNode(Oo,!0)).nodeType&&"BODY"===ut.nodeName||"HTML"===ut.nodeName?Ki=ut:Ki.appendChild(ut);else{if(!si&&!Ri&&!ko&&-1===Oo.indexOf("<"))return Rn&&jr?Rn.createHTML(Oo):Oo;if(!(Ki=ys(Oo)))return si?null:Wn}Ki&&ir&&yl(Ki.firstChild);for(var jt=Wa(Eo?Oo:Ki);pn=jt.nextNode();)3===pn.nodeType&&pn===te||$o(pn)||(pn.content instanceof ei&&hs(pn.content),Ns(pn),te=pn);if(te=null,Eo)return Oo;if(si){if(kn)for(Ue=Se.call(Ki.ownerDocument);Ki.firstChild;)Ue.appendChild(Ki.firstChild);else Ue=Ki;return nr&&(Ue=st.call(er,Ue,!0)),Ue}var hn=ko?Ki.outerHTML:Ki.innerHTML;return Ri&&(hn=ue(hn,Lr," "),hn=ue(hn,ti," ")),Rn&&jr?Rn.createHTML(hn):hn},Hn.setConfig=function(Oo){Ea(Oo),Xo=!0},Hn.clearConfig=function(){es=null,Xo=!1},Hn.isValidAttribute=function(Oo,kr,Ki){es||Ea({});var ut=ds(Oo),pn=ds(kr);return To(ut,pn,Ki)},Hn.addHook=function(Oo,kr){"function"==typeof kr&&(Fe[Oo]=Fe[Oo]||[],W(Fe[Oo],kr))},Hn.removeHook=function(Oo){Fe[Oo]&&B(Fe[Oo])},Hn.removeHooks=function(Oo){Fe[Oo]&&(Fe[Oo]=[])},Hn.removeAllHooks=function(){Fe={}},Hn}()}()},32582:v=>{"use strict";class b{constructor(a,f){this.low=a,this.high=f,this.length=1+f-a}overlaps(a){return!(this.high<a.low||this.low>a.high)}touches(a){return!(this.high+1<a.low||this.low-1>a.high)}add(a){return new b(Math.min(this.low,a.low),Math.max(this.high,a.high))}subtract(a){return a.low<=this.low&&a.high>=this.high?[]:a.low>this.low&&a.high<this.high?[new b(this.low,a.low-1),new b(a.high+1,this.high)]:a.low<=this.low?[new b(a.high+1,this.high)]:[new b(this.low,a.low-1)]}toString(){return this.low==this.high?this.low.toString():this.low+"-"+this.high}}class i{constructor(a,f){this.ranges=[],this.length=0,null!=a&&this.add(a,f)}_update_length(){this.length=this.ranges.reduce((a,f)=>a+f.length,0)}add(a,f){var u=e=>{for(var p=0;p<this.ranges.length&&!e.touches(this.ranges[p]);)p++;for(var g=this.ranges.slice(0,p);p<this.ranges.length&&e.touches(this.ranges[p]);)e=e.add(this.ranges[p]),p++;g.push(e),this.ranges=g.concat(this.ranges.slice(p)),this._update_length()};return a instanceof i?a.ranges.forEach(u):(null==f&&(f=a),u(new b(a,f))),this}subtract(a,f){var u=e=>{for(var p=0;p<this.ranges.length&&!e.overlaps(this.ranges[p]);)p++;for(var g=this.ranges.slice(0,p);p<this.ranges.length&&e.overlaps(this.ranges[p]);)g=g.concat(this.ranges[p].subtract(e)),p++;this.ranges=g.concat(this.ranges.slice(p)),this._update_length()};return a instanceof i?a.ranges.forEach(u):(null==f&&(f=a),u(new b(a,f))),this}intersect(a,f){var u=[],e=p=>{for(var g=0;g<this.ranges.length&&!p.overlaps(this.ranges[g]);)g++;for(;g<this.ranges.length&&p.overlaps(this.ranges[g]);){var S=Math.max(this.ranges[g].low,p.low),M=Math.min(this.ranges[g].high,p.high);u.push(new b(S,M)),g++}};return a instanceof i?a.ranges.forEach(e):(null==f&&(f=a),e(new b(a,f))),this.ranges=u,this._update_length(),this}index(a){for(var f=0;f<this.ranges.length&&this.ranges[f].length<=a;)a-=this.ranges[f].length,f++;return this.ranges[f].low+a}toString(){return"[ "+this.ranges.join(", ")+" ]"}clone(){return new i(this)}numbers(){return this.ranges.reduce((a,f)=>{for(var u=f.low;u<=f.high;)a.push(u),u++;return a},[])}subranges(){return this.ranges.map(a=>({low:a.low,high:a.high,length:1+a.high-a.low}))}}v.exports=i},11926:(v,b,i)=>{"use strict";var r=i(88430),a=f(Error);function f(u){return e.displayName=u.displayName||u.name,e;function e(p){return p&&(p=r.apply(null,arguments)),new u(p)}}v.exports=a,a.eval=f(EvalError),a.range=f(RangeError),a.reference=f(ReferenceError),a.syntax=f(SyntaxError),a.type=f(TypeError),a.uri=f(URIError),a.create=f},49457:function(v,b){var a;void 0!==(a=function(){"use strict";function u(M,w,x){var B=new XMLHttpRequest;B.open("GET",M),B.responseType="blob",B.onload=function(){S(B.response,w,x)},B.onerror=function(){console.error("could not download file")},B.send()}function e(M){var w=new XMLHttpRequest;w.open("HEAD",M,!1);try{w.send()}catch(x){}return 200<=w.status&&299>=w.status}function p(M){try{M.dispatchEvent(new MouseEvent("click"))}catch(x){var w=document.createEvent("MouseEvents");w.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),M.dispatchEvent(w)}}var g="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,S=g.saveAs||("object"!=typeof window||window!==g?function(){}:"download"in HTMLAnchorElement.prototype?function(M,w,x){var B=g.URL||g.webkitURL,W=document.createElement("a");W.download=w=w||M.name||"download",W.rel="noopener","string"==typeof M?(W.href=M,W.origin===location.origin?p(W):e(W.href)?u(M,w,x):p(W,W.target="_blank")):(W.href=B.createObjectURL(M),setTimeout(function(){B.revokeObjectURL(W.href)},4e4),setTimeout(function(){p(W)},0))}:"msSaveOrOpenBlob"in navigator?function(M,w,x){if(w=w||M.name||"download","string"!=typeof M)navigator.msSaveOrOpenBlob(function f(M,w){return void 0===w?w={autoBom:!1}:"object"!=typeof w&&(console.warn("Deprecated: Expected third argument to be a object"),w={autoBom:!w}),w.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(M.type)?new Blob(["\ufeff",M],{type:M.type}):M}(M,x),w);else if(e(M))u(M,w,x);else{var B=document.createElement("a");B.href=M,B.target="_blank",setTimeout(function(){p(B)})}}:function(M,w,x,B){if((B=B||open("","_blank"))&&(B.document.title=B.document.body.innerText="downloading..."),"string"==typeof M)return u(M,w,x);var W="application/octet-stream"===M.type,j=/constructor/i.test(g.HTMLElement)||g.safari,q=/CriOS\/[\d]+/.test(navigator.userAgent);if((q||W&&j)&&"object"==typeof FileReader){var ue=new FileReader;ue.onloadend=function(){var se=ue.result;se=q?se:se.replace(/^data:[^;]*;/,"data:attachment/file;"),B?B.location.href=se:location=se,B=null},ue.readAsDataURL(M)}else{var re=g.URL||g.webkitURL,H=re.createObjectURL(M);B?B.location=H:location.href=H,B=null,setTimeout(function(){re.revokeObjectURL(H)},4e4)}});g.saveAs=S.saveAs=S,v.exports=S}.apply(b,[]))&&(v.exports=a)},88430:v=>{!function(){var b;function a(f){for(var M,x,B,j,u=1,e=[].slice.call(arguments),p=0,g=f.length,S="",w=!1,W=!1,q=function(){return e[u++]},ue=function(){for(var re="";/\d/.test(f[p]);)re+=f[p++],M=f[p];return re.length>0?parseInt(re):null};p<g;++p)if(M=f[p],w)switch(w=!1,"."==M?(W=!1,M=f[++p]):"0"==M&&"."==f[p+1]?(W=!0,p+=2,M=f[p]):W=!0,j=ue(),M){case"b":S+=parseInt(q(),10).toString(2);break;case"c":S+="string"==typeof(x=q())||x instanceof String?x:String.fromCharCode(parseInt(x,10));break;case"d":S+=parseInt(q(),10);break;case"f":B=String(parseFloat(q()).toFixed(j||6)),S+=W?B:B.replace(/^0/,"");break;case"j":S+=JSON.stringify(q());break;case"o":S+="0"+parseInt(q(),10).toString(8);break;case"s":S+=q();break;case"x":S+="0x"+parseInt(q(),10).toString(16);break;case"X":S+="0x"+parseInt(q(),10).toString(16).toUpperCase();break;default:S+=M}else"%"===M?w=!0:S+=M;return S}(b=v.exports=a).format=a,b.vsprintf=function r(f,u){return a.apply(null,[f].concat(u))},"undefined"!=typeof console&&"function"==typeof console.log&&(b.printf=function i(){console.log(a.apply(null,arguments))})}()},31609:v=>{"use strict";var b="Function.prototype.bind called on incompatible ",i=Array.prototype.slice,r=Object.prototype.toString,a="[object Function]";v.exports=function(u){var e=this;if("function"!=typeof e||r.call(e)!==a)throw new TypeError(b+e);for(var g,p=i.call(arguments,1),S=function(){if(this instanceof g){var W=e.apply(this,p.concat(i.call(arguments)));return Object(W)===W?W:this}return e.apply(u,p.concat(i.call(arguments)))},M=Math.max(0,e.length-p.length),w=[],x=0;x<M;x++)w.push("$"+x);if(g=Function("binder","return function ("+w.join(",")+"){ return binder.apply(this,arguments); }")(S),e.prototype){var B=function(){};B.prototype=e.prototype,g.prototype=new B,B.prototype=null}return g}},75396:(v,b,i)=>{"use strict";var r=i(31609);v.exports=Function.prototype.bind||r},18540:(v,b,i)=>{"use strict";var r,a=SyntaxError,f=Function,u=TypeError,e=function(He){try{return f('"use strict"; return ('+He+").constructor;")()}catch(Pe){}},p=Object.getOwnPropertyDescriptor;if(p)try{p({},"")}catch(He){p=null}var g=function(){throw new u},S=p?function(){try{return g}catch(He){try{return p(arguments,"callee").get}catch(Pe){return g}}}():g,M=i(59326)(),w=i(41606)(),x=Object.getPrototypeOf||(w?function(He){return He.__proto__}:null),B={},W="undefined"!=typeof Uint8Array&&x?x(Uint8Array):r,j={"%AggregateError%":"undefined"==typeof AggregateError?r:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?r:ArrayBuffer,"%ArrayIteratorPrototype%":M&&x?x([][Symbol.iterator]()):r,"%AsyncFromSyncIteratorPrototype%":r,"%AsyncFunction%":B,"%AsyncGenerator%":B,"%AsyncGeneratorFunction%":B,"%AsyncIteratorPrototype%":B,"%Atomics%":"undefined"==typeof Atomics?r:Atomics,"%BigInt%":"undefined"==typeof BigInt?r:BigInt,"%BigInt64Array%":"undefined"==typeof BigInt64Array?r:BigInt64Array,"%BigUint64Array%":"undefined"==typeof BigUint64Array?r:BigUint64Array,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?r:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?r:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?r:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?r:FinalizationRegistry,"%Function%":f,"%GeneratorFunction%":B,"%Int8Array%":"undefined"==typeof Int8Array?r:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?r:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?r:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":M&&x?x(x([][Symbol.iterator]())):r,"%JSON%":"object"==typeof JSON?JSON:r,"%Map%":"undefined"==typeof Map?r:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&M&&x?x((new Map)[Symbol.iterator]()):r,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?r:Promise,"%Proxy%":"undefined"==typeof Proxy?r:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?r:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?r:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&M&&x?x((new Set)[Symbol.iterator]()):r,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?r:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":M&&x?x(""[Symbol.iterator]()):r,"%Symbol%":M?Symbol:r,"%SyntaxError%":a,"%ThrowTypeError%":S,"%TypedArray%":W,"%TypeError%":u,"%Uint8Array%":"undefined"==typeof Uint8Array?r:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?r:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?r:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?r:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?r:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?r:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?r:WeakSet};if(x)try{null.error}catch(He){var q=x(x(He));j["%Error.prototype%"]=q}var ue=function He(Pe){var Ge;if("%AsyncFunction%"===Pe)Ge=e("async function () {}");else if("%GeneratorFunction%"===Pe)Ge=e("function* () {}");else if("%AsyncGeneratorFunction%"===Pe)Ge=e("async function* () {}");else if("%AsyncGenerator%"===Pe){var Oe=He("%AsyncGeneratorFunction%");Oe&&(Ge=Oe.prototype)}else if("%AsyncIteratorPrototype%"===Pe){var Tt=He("%AsyncGenerator%");Tt&&x&&(Ge=x(Tt.prototype))}return j[Pe]=Ge,Ge},re={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},H=i(75396),se=i(57709),ae=H.call(Function.call,Array.prototype.concat),ie=H.call(Function.apply,Array.prototype.splice),fe=H.call(Function.call,String.prototype.replace),he=H.call(Function.call,String.prototype.slice),Ce=H.call(Function.call,RegExp.prototype.exec),ce=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,Be=/\\(\\)?/g,Ve=function(Pe){var Ge=he(Pe,0,1),Oe=he(Pe,-1);if("%"===Ge&&"%"!==Oe)throw new a("invalid intrinsic syntax, expected closing `%`");if("%"===Oe&&"%"!==Ge)throw new a("invalid intrinsic syntax, expected opening `%`");var Tt=[];return fe(Pe,ce,function(We,Qt,Nt,Yt){Tt[Tt.length]=Nt?fe(Yt,Be,"$1"):Qt||We}),Tt},Xe=function(Pe,Ge){var Tt,Oe=Pe;if(se(re,Oe)&&(Oe="%"+(Tt=re[Oe])[0]+"%"),se(j,Oe)){var We=j[Oe];if(We===B&&(We=ue(Oe)),void 0===We&&!Ge)throw new u("intrinsic "+Pe+" exists, but is not available. Please file an issue!");return{alias:Tt,name:Oe,value:We}}throw new a("intrinsic "+Pe+" does not exist!")};v.exports=function(Pe,Ge){if("string"!=typeof Pe||0===Pe.length)throw new u("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof Ge)throw new u('"allowMissing" argument must be a boolean');if(null===Ce(/^%?[^%]*%?$/,Pe))throw new a("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var Oe=Ve(Pe),Tt=Oe.length>0?Oe[0]:"",We=Xe("%"+Tt+"%",Ge),Qt=We.name,Nt=We.value,Yt=!1,dn=We.alias;dn&&(Tt=dn[0],ie(Oe,ae([0,1],dn)));for(var rn=1,vt=!0;rn<Oe.length;rn+=1){var xt=Oe[rn],Ct=he(xt,0,1),Gt=he(xt,-1);if(('"'===Ct||"'"===Ct||"`"===Ct||'"'===Gt||"'"===Gt||"`"===Gt)&&Ct!==Gt)throw new a("property names with quotes must have matching quotes");if(("constructor"===xt||!vt)&&(Yt=!0),se(j,Qt="%"+(Tt+="."+xt)+"%"))Nt=j[Qt];else if(null!=Nt){if(!(xt in Nt)){if(!Ge)throw new u("base intrinsic for "+Pe+" exists, but the property is not available.");return}if(p&&rn+1>=Oe.length){var Fn=p(Nt,xt);Nt=(vt=!!Fn)&&"get"in Fn&&!("originalValue"in Fn.get)?Fn.get:Nt[xt]}else vt=se(Nt,xt),Nt=Nt[xt];vt&&!Yt&&(j[Qt]=Nt)}}return Nt}},41606:v=>{"use strict";var b={foo:{}},i=Object;v.exports=function(){return{__proto__:b}.foo===b.foo&&!({__proto__:null}instanceof i)}},59326:(v,b,i)=>{"use strict";var r="undefined"!=typeof Symbol&&Symbol,a=i(79045);v.exports=function(){return"function"==typeof r&&"function"==typeof Symbol&&"symbol"==typeof r("foo")&&"symbol"==typeof Symbol("bar")&&a()}},79045:v=>{"use strict";v.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var i={},r=Symbol("test"),a=Object(r);if("string"==typeof r||"[object Symbol]"!==Object.prototype.toString.call(r)||"[object Symbol]"!==Object.prototype.toString.call(a))return!1;for(r in i[r]=42,i)return!1;if("function"==typeof Object.keys&&0!==Object.keys(i).length||"function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(i).length)return!1;var u=Object.getOwnPropertySymbols(i);if(1!==u.length||u[0]!==r||!Object.prototype.propertyIsEnumerable.call(i,r))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var e=Object.getOwnPropertyDescriptor(i,r);if(42!==e.value||!0!==e.enumerable)return!1}return!0}},57709:(v,b,i)=>{"use strict";var r=i(75396);v.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},7856:v=>{function b(et){return et instanceof Map?et.clear=et.delete=et.set=function(){throw new Error("map is read-only")}:et instanceof Set&&(et.add=et.clear=et.delete=function(){throw new Error("set is read-only")}),Object.freeze(et),Object.getOwnPropertyNames(et).forEach(function(Le){var Re=et[Le];"object"==typeof Re&&!Object.isFrozen(Re)&&b(Re)}),et}var i=b;i.default=b;class a{constructor(Le){void 0===Le.data&&(Le.data={}),this.data=Le.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function f(et){return et.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function u(et,...Le){const Re=Object.create(null);for(const Se in et)Re[Se]=et[Se];return Le.forEach(function(Se){for(const dt in Se)Re[dt]=Se[dt]}),Re}const p=et=>!!et.kind;class g{constructor(Le,Re){this.buffer="",this.classPrefix=Re.classPrefix,Le.walk(this)}addText(Le){this.buffer+=f(Le)}openNode(Le){if(!p(Le))return;let Re=Le.kind;Le.sublanguage||(Re=`${this.classPrefix}${Re}`),this.span(Re)}closeNode(Le){!p(Le)||(this.buffer+="</span>")}value(){return this.buffer}span(Le){this.buffer+=`<span class="${Le}">`}}class S{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(Le){this.top.children.push(Le)}openNode(Le){const Re={kind:Le,children:[]};this.add(Re),this.stack.push(Re)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(Le){return this.constructor._walk(Le,this.rootNode)}static _walk(Le,Re){return"string"==typeof Re?Le.addText(Re):Re.children&&(Le.openNode(Re),Re.children.forEach(Se=>this._walk(Le,Se)),Le.closeNode(Re)),Le}static _collapse(Le){"string"!=typeof Le&&(!Le.children||(Le.children.every(Re=>"string"==typeof Re)?Le.children=[Le.children.join("")]:Le.children.forEach(Re=>{S._collapse(Re)})))}}class M extends S{constructor(Le){super(),this.options=Le}addKeyword(Le,Re){""!==Le&&(this.openNode(Re),this.addText(Le),this.closeNode())}addText(Le){""!==Le&&this.add(Le)}addSublanguage(Le,Re){const Se=Le.root;Se.kind=Re,Se.sublanguage=!0,this.add(Se)}toHTML(){return new g(this,this.options).value()}finalize(){return!0}}function x(et){return et?"string"==typeof et?et:et.source:null}const ue=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,se="[a-zA-Z]\\w*",ae="[a-zA-Z_]\\w*",ie="\\b\\d+(\\.\\d+)?",fe="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",he="\\b(0b[01]+)",Be={begin:"\\\\[\\s\\S]",relevance:0},Ve={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[Be]},Xe={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[Be]},He={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},Pe=function(et,Le,Re={}){const Se=u({className:"comment",begin:et,end:Le,contains:[]},Re);return Se.contains.push(He),Se.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),Se},Ge=Pe("//","$"),Oe=Pe("/\\*","\\*/"),Tt=Pe("#","$");var Gt=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:se,UNDERSCORE_IDENT_RE:ae,NUMBER_RE:ie,C_NUMBER_RE:fe,BINARY_NUMBER_RE:he,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(et={})=>{const Le=/^#![ ]*\//;return et.binary&&(et.begin=function B(...et){return et.map(Re=>x(Re)).join("")}(Le,/.*\b/,et.binary,/\b.*/)),u({className:"meta",begin:Le,end:/$/,relevance:0,"on:begin":(Re,Se)=>{0!==Re.index&&Se.ignoreMatch()}},et)},BACKSLASH_ESCAPE:Be,APOS_STRING_MODE:Ve,QUOTE_STRING_MODE:Xe,PHRASAL_WORDS_MODE:He,COMMENT:Pe,C_LINE_COMMENT_MODE:Ge,C_BLOCK_COMMENT_MODE:Oe,HASH_COMMENT_MODE:Tt,NUMBER_MODE:{className:"number",begin:ie,relevance:0},C_NUMBER_MODE:{className:"number",begin:fe,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:he,relevance:0},CSS_NUMBER_MODE:{className:"number",begin:ie+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[Be,{begin:/\[/,end:/\]/,relevance:0,contains:[Be]}]}]},TITLE_MODE:{className:"title",begin:se,relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:ae,relevance:0},METHOD_GUARD:{begin:"\\.\\s*"+ae,relevance:0},END_SAME_AS_BEGIN:function(et){return Object.assign(et,{"on:begin":(Le,Re)=>{Re.data._beginMatch=Le[1]},"on:end":(Le,Re)=>{Re.data._beginMatch!==Le[1]&&Re.ignoreMatch()}})}});function Fn(et,Le){"."===et.input[et.index-1]&&Le.ignoreMatch()}function pr(et,Le){!Le||!et.beginKeywords||(et.begin="\\b("+et.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",et.__beforeBegin=Fn,et.keywords=et.keywords||et.beginKeywords,delete et.beginKeywords,void 0===et.relevance&&(et.relevance=0))}function mi(et,Le){!Array.isArray(et.illegal)||(et.illegal=function W(...et){return"("+et.map(Re=>x(Re)).join("|")+")"}(...et.illegal))}function ci(et,Le){if(et.match){if(et.begin||et.end)throw new Error("begin & end are not supported with match");et.begin=et.match,delete et.match}}function hr(et,Le){void 0===et.relevance&&(et.relevance=1)}const Br=["of","and","for","in","not","or","if","then","parent","list","value"];function Hn(et,Le,Re="keyword"){const Se={};return"string"==typeof et?dt(Re,et.split(" ")):Array.isArray(et)?dt(Re,et):Object.keys(et).forEach(function(st){Object.assign(Se,Hn(et[st],Le,st))}),Se;function dt(st,nn){Le&&(nn=nn.map(Fe=>Fe.toLowerCase())),nn.forEach(function(Fe){const Lr=Fe.split("|");Se[Lr[0]]=[st,er(Lr[0],Lr[1])]})}}function er(et,Le){return Le?Number(Le):function _r(et){return Br.includes(et.toLowerCase())}(et)?0:1}function ei(et,{}){function Re(Fe,Lr){return new RegExp(x(Fe),"m"+(et.case_insensitive?"i":"")+(Lr?"g":""))}class Se{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(Lr,ti){ti.position=this.position++,this.matchIndexes[this.matchAt]=ti,this.regexes.push([ti,Lr]),this.matchAt+=function j(et){return new RegExp(et.toString()+"|").exec("").length-1}(Lr)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const Lr=this.regexes.map(ti=>ti[1]);this.matcherRe=Re(function re(et,Le="|"){let Re=0;return et.map(Se=>{Re+=1;const dt=Re;let st=x(Se),nn="";for(;st.length>0;){const Fe=ue.exec(st);if(!Fe){nn+=st;break}nn+=st.substring(0,Fe.index),st=st.substring(Fe.index+Fe[0].length),"\\"===Fe[0][0]&&Fe[1]?nn+="\\"+String(Number(Fe[1])+dt):(nn+=Fe[0],"("===Fe[0]&&Re++)}return nn}).map(Se=>`(${Se})`).join(Le)}(Lr),!0),this.lastIndex=0}exec(Lr){this.matcherRe.lastIndex=this.lastIndex;const ti=this.matcherRe.exec(Lr);if(!ti)return null;const Ut=ti.findIndex((Et,$t)=>$t>0&&void 0!==Et),Dn=this.matchIndexes[Ut];return ti.splice(0,Ut),Object.assign(ti,Dn)}}class dt{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(Lr){if(this.multiRegexes[Lr])return this.multiRegexes[Lr];const ti=new Se;return this.rules.slice(Lr).forEach(([Ut,Dn])=>ti.addRule(Ut,Dn)),ti.compile(),this.multiRegexes[Lr]=ti,ti}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(Lr,ti){this.rules.push([Lr,ti]),"begin"===ti.type&&this.count++}exec(Lr){const ti=this.getMatcher(this.regexIndex);ti.lastIndex=this.lastIndex;let Ut=ti.exec(Lr);if(this.resumingScanAtSamePosition()&&(!Ut||Ut.index!==this.lastIndex)){const Dn=this.getMatcher(0);Dn.lastIndex=this.lastIndex+1,Ut=Dn.exec(Lr)}return Ut&&(this.regexIndex+=Ut.position+1,this.regexIndex===this.count&&this.considerAll()),Ut}}if(et.compilerExtensions||(et.compilerExtensions=[]),et.contains&&et.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language.  See documentation.");return et.classNameAliases=u(et.classNameAliases||{}),function nn(Fe,Lr){const ti=Fe;if(Fe.isCompiled)return ti;[ci].forEach(Dn=>Dn(Fe,Lr)),et.compilerExtensions.forEach(Dn=>Dn(Fe,Lr)),Fe.__beforeBegin=null,[pr,mi,hr].forEach(Dn=>Dn(Fe,Lr)),Fe.isCompiled=!0;let Ut=null;if("object"==typeof Fe.keywords&&(Ut=Fe.keywords.$pattern,delete Fe.keywords.$pattern),Fe.keywords&&(Fe.keywords=Hn(Fe.keywords,et.case_insensitive)),Fe.lexemes&&Ut)throw new Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return Ut=Ut||Fe.lexemes||/\w+/,ti.keywordPatternRe=Re(Ut,!0),Lr&&(Fe.begin||(Fe.begin=/\B|\b/),ti.beginRe=Re(Fe.begin),Fe.endSameAsBegin&&(Fe.end=Fe.begin),!Fe.end&&!Fe.endsWithParent&&(Fe.end=/\B|\b/),Fe.end&&(ti.endRe=Re(Fe.end)),ti.terminatorEnd=x(Fe.end)||"",Fe.endsWithParent&&Lr.terminatorEnd&&(ti.terminatorEnd+=(Fe.end?"|":"")+Lr.terminatorEnd)),Fe.illegal&&(ti.illegalRe=Re(Fe.illegal)),Fe.contains||(Fe.contains=[]),Fe.contains=[].concat(...Fe.contains.map(function(Dn){return function fi(et){return et.variants&&!et.cachedVariants&&(et.cachedVariants=et.variants.map(function(Le){return u(et,{variants:null},Le)})),et.cachedVariants?et.cachedVariants:bi(et)?u(et,{starts:et.starts?u(et.starts):null}):Object.isFrozen(et)?u(et):et}("self"===Dn?Fe:Dn)})),Fe.contains.forEach(function(Dn){nn(Dn,ti)}),Fe.starts&&nn(Fe.starts,Lr),ti.matcher=function st(Fe){const Lr=new dt;return Fe.contains.forEach(ti=>Lr.addRule(ti.begin,{rule:ti,type:"begin"})),Fe.terminatorEnd&&Lr.addRule(Fe.terminatorEnd,{type:"end"}),Fe.illegal&&Lr.addRule(Fe.illegal,{type:"illegal"}),Lr}(ti),ti}(et)}function bi(et){return!!et&&(et.endsWithParent||bi(et.starts))}function Er(et){const Le={props:["language","code","autodetect"],data:function(){return{detectedLanguage:"",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?"":"hljs "+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!et.getLanguage(this.language))return console.warn(`The language "${this.language}" you specified could not be found.`),this.unknownLanguage=!0,f(this.code);let Se={};return this.autoDetect?(Se=et.highlightAuto(this.code),this.detectedLanguage=Se.language):(Se=et.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),Se.value},autoDetect(){return!this.language||function xo(et){return Boolean(et||""===et)}(this.autodetect)},ignoreIllegals:()=>!0},render(Se){return Se("pre",{},[Se("code",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:Le,VuePlugin:{install(Se){Se.component("highlightjs",Le)}}}}const an={"after:highlightElement":({el:et,result:Le,text:Re})=>{const Se=Zn(et);if(!Se.length)return;const dt=document.createElement("div");dt.innerHTML=Le.value,Le.value=function Xn(et,Le,Re){let Se=0,dt="";const st=[];function nn(){return et.length&&Le.length?et[0].offset!==Le[0].offset?et[0].offset<Le[0].offset?et:Le:"start"===Le[0].event?et:Le:et.length?et:Le}function Fe(Ut){dt+="<"+vn(Ut)+[].map.call(Ut.attributes,function Dn(Et){return" "+Et.nodeName+'="'+f(Et.value)+'"'}).join("")+">"}function Lr(Ut){dt+="</"+vn(Ut)+">"}function ti(Ut){("start"===Ut.event?Fe:Lr)(Ut.node)}for(;et.length||Le.length;){let Ut=nn();if(dt+=f(Re.substring(Se,Ut[0].offset)),Se=Ut[0].offset,Ut===et){st.reverse().forEach(Lr);do{ti(Ut.splice(0,1)[0]),Ut=nn()}while(Ut===et&&Ut.length&&Ut[0].offset===Se);st.reverse().forEach(Fe)}else"start"===Ut[0].event?st.push(Ut[0].node):st.pop(),ti(Ut.splice(0,1)[0])}return dt+f(Re.substr(Se))}(Se,Zn(dt),Re)}};function vn(et){return et.nodeName.toLowerCase()}function Zn(et){const Le=[];return function Re(Se,dt){for(let st=Se.firstChild;st;st=st.nextSibling)3===st.nodeType?dt+=st.nodeValue.length:1===st.nodeType&&(Le.push({event:"start",offset:dt,node:st}),dt=Re(st,dt),vn(st).match(/br|hr|img|input/)||Le.push({event:"stop",offset:dt,node:st}));return dt}(et,0),Le}const zn={},ri=et=>{console.error(et)},Gi=(et,...Le)=>{console.log(`WARN: ${et}`,...Le)},ui=(et,Le)=>{zn[`${et}/${Le}`]||(console.log(`Deprecated as of ${et}. ${Le}`),zn[`${et}/${Le}`]=!0)},vr=f,Ji=u,mn=Symbol("nomatch");var Wn=function(et){const Le=Object.create(null),Re=Object.create(null),Se=[];let dt=!0;const st=/(^(<[^>]+>|\t|)+|\n)/gm,nn="Could not find the language '{}', did you forget to load/include a language module?",Fe={disableAutodetect:!0,name:"Plain text",contains:[]};let Lr={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:M};function ti(Mr){return Lr.noHighlightRe.test(Mr)}function Dn(Mr,Ar,cr,pi){let Sn="",$n="";"object"==typeof Ar?(Sn=Mr,cr=Ar.ignoreIllegals,$n=Ar.language,pi=void 0):(ui("10.7.0","highlight(lang, code, ...args) has been deprecated."),ui("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),$n=Mr,Sn=Ar);const Jr={code:Sn,language:$n};Go("before:highlight",Jr);const ro=Jr.result?Jr.result:Et(Jr.language,Jr.code,cr,pi);return ro.code=Jr.code,Go("after:highlight",ro),ro}function Et(Mr,Ar,cr,pi){function Sn($o,To){const Ns=sa.case_insensitive?To[0].toLowerCase():To[0];return Object.prototype.hasOwnProperty.call($o.keywords,Ns)&&$o.keywords[Ns]}function ro(){null!=Co.subLanguage?function Jr(){if(""===ys)return;let $o=null;if("string"==typeof Co.subLanguage){if(!Le[Co.subLanguage])return void Wo.addText(ys);$o=Et(Co.subLanguage,ys,!0,yl[Co.subLanguage]),yl[Co.subLanguage]=$o.top}else $o=_t(ys,Co.subLanguage.length?Co.subLanguage:null);Co.relevance>0&&(Wa+=$o.relevance),Wo.addSublanguage($o.emitter,$o.language)}():function $n(){if(!Co.keywords)return void Wo.addText(ys);let $o=0;Co.keywordPatternRe.lastIndex=0;let To=Co.keywordPatternRe.exec(ys),Ns="";for(;To;){Ns+=ys.substring($o,To.index);const hs=Sn(Co,To);if(hs){const[Oo,kr]=hs;Wo.addText(Ns),Ns="",Wa+=kr,Oo.startsWith("_")?Ns+=To[0]:Wo.addKeyword(To[0],sa.classNameAliases[Oo]||Oo)}else Ns+=To[0];$o=Co.keywordPatternRe.lastIndex,To=Co.keywordPatternRe.exec(ys)}Ns+=ys.substr($o),Wo.addText(Ns)}(),ys=""}function go($o){return $o.className&&Wo.openNode(sa.classNameAliases[$o.className]||$o.className),Co=Object.create($o,{parent:{value:Co}}),Co}function Ro($o,To,Ns){let hs=function q(et,Le){const Re=et&&et.exec(Le);return Re&&0===Re.index}($o.endRe,Ns);if(hs){if($o["on:end"]){const Oo=new a($o);$o["on:end"](To,Oo),Oo.isMatchIgnored&&(hs=!1)}if(hs){for(;$o.endsParent&&$o.parent;)$o=$o.parent;return $o}}if($o.endsWithParent)return Ro($o.parent,To,Ns)}function Ys($o){return 0===Co.matcher.regexIndex?(ys+=$o[0],1):(js=!0,0)}function es($o){const To=$o[0],Ns=Ar.substr($o.index),hs=Ro(Co,$o,Ns);if(!hs)return mn;const Oo=Co;Oo.skip?ys+=To:(Oo.returnEnd||Oo.excludeEnd||(ys+=To),ro(),Oo.excludeEnd&&(ys=To));do{Co.className&&Wo.closeNode(),!Co.skip&&!Co.subLanguage&&(Wa+=Co.relevance),Co=Co.parent}while(Co!==hs.parent);return hs.starts&&(hs.endSameAsBegin&&(hs.starts.endRe=hs.endRe),go(hs.starts)),Oo.returnEnd?0:To.length}let Ea={};function fa($o,To){const Ns=To&&To[0];if(ys+=$o,null==Ns)return ro(),0;if("begin"===Ea.type&&"end"===To.type&&Ea.index===To.index&&""===Ns){if(ys+=Ar.slice(To.index,To.index+1),!dt){const hs=new Error("0 width match regex");throw hs.languageName=Mr,hs.badRule=Ea.rule,hs}return 1}if(Ea=To,"begin"===To.type)return function ds($o){const To=$o[0],Ns=$o.rule,hs=new a(Ns),Oo=[Ns.__beforeBegin,Ns["on:begin"]];for(const kr of Oo)if(kr&&(kr($o,hs),hs.isMatchIgnored))return Ys(To);return Ns&&Ns.endSameAsBegin&&(Ns.endRe=function w(et){return new RegExp(et.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}(To)),Ns.skip?ys+=To:(Ns.excludeBegin&&(ys+=To),ro(),!Ns.returnBegin&&!Ns.excludeBegin&&(ys=To)),go(Ns),Ns.returnBegin?0:To.length}(To);if("illegal"===To.type&&!cr){const hs=new Error('Illegal lexeme "'+Ns+'" for mode "'+(Co.className||"<unnamed>")+'"');throw hs.mode=Co,hs}if("end"===To.type){const hs=es(To);if(hs!==mn)return hs}if("illegal"===To.type&&""===Ns)return 1;if(nl>1e5&&nl>3*To.index)throw new Error("potential infinite loop, way more iterations than matches");return ys+=Ns,Ns.length}const sa=jr(Mr);if(!sa)throw ri(nn.replace("{}",Mr)),new Error('Unknown language: "'+Mr+'"');const Ra=ei(sa,{plugins:Se});let pl="",Co=pi||Ra;const yl={},Wo=new Lr.__emitter(Lr);!function ma(){const $o=[];for(let To=Co;To!==sa;To=To.parent)To.className&&$o.unshift(To.className);$o.forEach(To=>Wo.openNode(To))}();let ys="",Wa=0,Is=0,nl=0,js=!1;try{for(Co.matcher.considerAll();;){nl++,js?js=!1:Co.matcher.considerAll(),Co.matcher.lastIndex=Is;const $o=Co.matcher.exec(Ar);if(!$o)break;const Ns=fa(Ar.substring(Is,$o.index),$o);Is=$o.index+Ns}return fa(Ar.substr(Is)),Wo.closeAllNodes(),Wo.finalize(),pl=Wo.toHTML(),{relevance:Math.floor(Wa),value:pl,language:Mr,illegal:!1,emitter:Wo,top:Co}}catch($o){if($o.message&&$o.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:$o.message,context:Ar.slice(Is-100,Is+100),mode:$o.mode},sofar:pl,relevance:0,value:vr(Ar),emitter:Wo};if(dt)return{illegal:!1,relevance:0,value:vr(Ar),emitter:Wo,language:Mr,top:Co,errorRaised:$o};throw $o}}function _t(Mr,Ar){Ar=Ar||Lr.languages||Object.keys(Le);const cr=function $t(Mr){const Ar={relevance:0,emitter:new Lr.__emitter(Lr),value:vr(Mr),illegal:!1,top:Fe};return Ar.emitter.addText(Mr),Ar}(Mr),pi=Ar.filter(jr).filter($i).map(go=>Et(go,Mr,!1));pi.unshift(cr);const Sn=pi.sort((go,Ro)=>{if(go.relevance!==Ro.relevance)return Ro.relevance-go.relevance;if(go.language&&Ro.language){if(jr(go.language).supersetOf===Ro.language)return 1;if(jr(Ro.language).supersetOf===go.language)return-1}return 0}),[$n,Jr]=Sn,ro=$n;return ro.second_best=Jr,ro}const yn={"before:highlightElement":({el:Mr})=>{Lr.useBR&&(Mr.innerHTML=Mr.innerHTML.replace(/\n/g,"").replace(/<br[ /]*>/g,"\n"))},"after:highlightElement":({result:Mr})=>{Lr.useBR&&(Mr.value=Mr.value.replace(/\n/g,"<br>"))}},Cr=/^(<[^>]+>|\t)+/gm,xi={"after:highlightElement":({result:Mr})=>{Lr.tabReplace&&(Mr.value=Mr.value.replace(Cr,Ar=>Ar.replace(/\t/g,Lr.tabReplace)))}};function yi(Mr){let Ar=null;const cr=function Ut(Mr){let Ar=Mr.className+" ";Ar+=Mr.parentNode?Mr.parentNode.className:"";const cr=Lr.languageDetectRe.exec(Ar);if(cr){const pi=jr(cr[1]);return pi||(Gi(nn.replace("{}",cr[1])),Gi("Falling back to no-highlight mode for this block.",Mr)),pi?cr[1]:"no-highlight"}return Ar.split(/\s+/).find(pi=>ti(pi)||jr(pi))}(Mr);if(ti(cr))return;Go("before:highlightElement",{el:Mr,language:cr}),Ar=Mr;const pi=Ar.textContent,Sn=cr?Dn(pi,{language:cr,ignoreIllegals:!0}):_t(pi);Go("after:highlightElement",{el:Mr,result:Sn,text:pi}),Mr.innerHTML=Sn.value,function Vt(Mr,Ar,cr){const pi=Ar?Re[Ar]:cr;Mr.classList.add("hljs"),pi&&Mr.classList.add(pi)}(Mr,cr,Sn.language),Mr.result={language:Sn.language,re:Sn.relevance,relavance:Sn.relevance},Sn.second_best&&(Mr.second_best={language:Sn.second_best.language,re:Sn.second_best.relevance,relavance:Sn.second_best.relevance})}const Qo=()=>{Qo.called||(Qo.called=!0,ui("10.6.0","initHighlighting() is deprecated.  Use highlightAll() instead."),document.querySelectorAll("pre code").forEach(yi))};let Ri=!1;function ko(){"loading"!==document.readyState?document.querySelectorAll("pre code").forEach(yi):Ri=!0}function jr(Mr){return Mr=(Mr||"").toLowerCase(),Le[Mr]||Le[Re[Mr]]}function ao(Mr,{languageName:Ar}){"string"==typeof Mr&&(Mr=[Mr]),Mr.forEach(cr=>{Re[cr.toLowerCase()]=Ar})}function $i(Mr){const Ar=jr(Mr);return Ar&&!Ar.disableAutodetect}function Go(Mr,Ar){const cr=Mr;Se.forEach(function(pi){pi[cr]&&pi[cr](Ar)})}"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",function Xo(){Ri&&ko()},!1),Object.assign(et,{highlight:Dn,highlightAuto:_t,highlightAll:ko,fixMarkup:function ua(Mr){return ui("10.2.0","fixMarkup will be removed entirely in v11.0"),ui("10.2.0","Please see https://github.com/highlightjs/highlight.js/issues/2534"),function yt(Mr){return Lr.tabReplace||Lr.useBR?Mr.replace(st,Ar=>"\n"===Ar?Lr.useBR?"<br>":Ar:Lr.tabReplace?Ar.replace(/\t/g,Lr.tabReplace):Ar):Mr}(Mr)},highlightElement:yi,highlightBlock:function or(Mr){return ui("10.7.0","highlightBlock will be removed entirely in v12.0"),ui("10.7.0","Please use highlightElement now."),yi(Mr)},configure:function Yo(Mr){Mr.useBR&&(ui("10.3.0","'useBR' will be removed entirely in v11.0"),ui("10.3.0","Please see https://github.com/highlightjs/highlight.js/issues/2559")),Lr=Ji(Lr,Mr)},initHighlighting:Qo,initHighlightingOnLoad:function lo(){ui("10.6.0","initHighlightingOnLoad() is deprecated.  Use highlightAll() instead."),Ri=!0},registerLanguage:function ir(Mr,Ar){let cr=null;try{cr=Ar(et)}catch(pi){if(ri("Language definition for '{}' could not be registered.".replace("{}",Mr)),!dt)throw pi;ri(pi),cr=Fe}cr.name||(cr.name=Mr),Le[Mr]=cr,cr.rawDefinition=Ar.bind(null,et),cr.aliases&&ao(cr.aliases,{languageName:Mr})},unregisterLanguage:function si(Mr){delete Le[Mr];for(const Ar of Object.keys(Re))Re[Ar]===Mr&&delete Re[Ar]},listLanguages:function kn(){return Object.keys(Le)},getLanguage:jr,registerAliases:ao,requireLanguage:function nr(Mr){ui("10.4.0","requireLanguage will be removed entirely in v11."),ui("10.4.0","Please see https://github.com/highlightjs/highlight.js/pull/2844");const Ar=jr(Mr);if(Ar)return Ar;throw new Error("The '{}' language is required, but not loaded.".replace("{}",Mr))},autoDetection:$i,inherit:Ji,addPlugin:function mo(Mr){(function Eo(Mr){Mr["before:highlightBlock"]&&!Mr["before:highlightElement"]&&(Mr["before:highlightElement"]=Ar=>{Mr["before:highlightBlock"](Object.assign({block:Ar.el},Ar))}),Mr["after:highlightBlock"]&&!Mr["after:highlightElement"]&&(Mr["after:highlightElement"]=Ar=>{Mr["after:highlightBlock"](Object.assign({block:Ar.el},Ar))})})(Mr),Se.push(Mr)},vuePlugin:Er(et).VuePlugin}),et.debugMode=function(){dt=!1},et.safeMode=function(){dt=!0},et.versionString="10.7.3";for(const Mr in Gt)"object"==typeof Gt[Mr]&&i(Gt[Mr]);return Object.assign(et,Gt),et.addPlugin(yn),et.addPlugin(an),et.addPlugin(xi),et}({});v.exports=Wn},4357:v=>{function i(...a){return a.map(u=>function b(a){return a?"string"==typeof a?a:a.source:null}(u)).join("")}v.exports=function r(a){const f={},u={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[f]}]};Object.assign(f,{className:"variable",variants:[{begin:i(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},u]});const e={className:"subst",begin:/\$\(/,end:/\)/,contains:[a.BACKSLASH_ESCAPE]},p={begin:/<<-?\s*(?=\w+)/,starts:{contains:[a.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},g={className:"string",begin:/"/,end:/"/,contains:[a.BACKSLASH_ESCAPE,f,e]};e.contains.push(g);const w={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},a.NUMBER_MODE,f]},B=a.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),W={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[a.inherit(a.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z._-]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp"},contains:[B,a.SHEBANG(),W,w,a.HASH_COMMENT_MODE,p,g,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},f]}}},28390:v=>{function i(...a){return a.map(u=>function b(a){return a?"string"==typeof a?a:a.source:null}(u)).join("")}v.exports=function r(a){const f="HTTP/(2|1\\.[01])",e={className:"attribute",begin:i("^",/[A-Za-z][A-Za-z0-9-]*/,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},p=[e,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+f+" \\d{3})",end:/$/,contains:[{className:"meta",begin:f},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:p}},{begin:"(?=^[A-Z]+ (.*?) "+f+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:f},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:p}},a.inherit(e,{relevance:0})]}}},36147:v=>{const b="[A-Za-z$_][0-9A-Za-z$_]*",i=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],r=["true","false","null","undefined","NaN","Infinity"],p=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer","BigInt64Array","BigUint64Array","BigInt"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);function S(x){return M("(?=",x,")")}function M(...x){return x.map(W=>function g(x){return x?"string"==typeof x?x:x.source:null}(W)).join("")}v.exports=function w(x){const W=b,q={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(Ge,Oe)=>{const Tt=Ge[0].length+Ge.index,We=Ge.input[Tt];"<"!==We?">"===We&&(((Ge,{after:Oe})=>{const Tt="</"+Ge[0].slice(1);return-1!==Ge.input.indexOf(Tt,Oe)})(Ge,{after:Tt})||Oe.ignoreMatch()):Oe.ignoreMatch()}},ue={$pattern:b,keyword:i,literal:r,built_in:p},re="[0-9](_?[0-9])*",H=`\\.(${re})`,se="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",ae={className:"number",variants:[{begin:`(\\b(${se})((${H})|\\.)?|(${H}))[eE][+-]?(${re})\\b`},{begin:`\\b(${se})\\b((${H})\\b|\\.)?|(${H})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},ie={className:"subst",begin:"\\$\\{",end:"\\}",keywords:ue,contains:[]},fe={begin:"html`",end:"",starts:{end:"`",returnEnd:!1,contains:[x.BACKSLASH_ESCAPE,ie],subLanguage:"xml"}},he={begin:"css`",end:"",starts:{end:"`",returnEnd:!1,contains:[x.BACKSLASH_ESCAPE,ie],subLanguage:"css"}},Ce={className:"string",begin:"`",end:"`",contains:[x.BACKSLASH_ESCAPE,ie]},Be={className:"comment",variants:[x.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+",contains:[{className:"type",begin:"\\{",end:"\\}",relevance:0},{className:"variable",begin:W+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),x.C_BLOCK_COMMENT_MODE,x.C_LINE_COMMENT_MODE]},Ve=[x.APOS_STRING_MODE,x.QUOTE_STRING_MODE,fe,he,Ce,ae,x.REGEXP_MODE];ie.contains=Ve.concat({begin:/\{/,end:/\}/,keywords:ue,contains:["self"].concat(Ve)});const Xe=[].concat(Be,ie.contains),He=Xe.concat([{begin:/\(/,end:/\)/,keywords:ue,contains:["self"].concat(Xe)}]),Pe={className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:ue,contains:He};return{name:"Javascript",aliases:["js","jsx","mjs","cjs"],keywords:ue,exports:{PARAMS_CONTAINS:He},illegal:/#(?![$_A-z])/,contains:[x.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},x.APOS_STRING_MODE,x.QUOTE_STRING_MODE,fe,he,Ce,Be,ae,{begin:M(/[{,\n]\s*/,S(M(/(((\/\/.*$)|(\/\*(\*[^/]|[^*])*\*\/))\s*)*/,W+"\\s*:"))),relevance:0,contains:[{className:"attr",begin:W+S("\\s*:"),relevance:0}]},{begin:"("+x.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[Be,x.REGEXP_MODE,{className:"function",begin:"(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+x.UNDERSCORE_IDENT_RE+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:x.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:ue,contains:He}]}]},{begin:/,/,relevance:0},{className:"",begin:/\s/,end:/\s*/,skip:!0},{variants:[{begin:"<>",end:"</>"},{begin:q.begin,"on:begin":q.isTrulyOpeningTag,end:q.end}],subLanguage:"xml",contains:[{begin:q.begin,end:q.end,skip:!0,contains:["self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/[{;]/,excludeEnd:!0,keywords:ue,contains:["self",x.inherit(x.TITLE_MODE,{begin:W}),Pe],illegal:/%/},{beginKeywords:"while if switch catch for"},{className:"function",begin:x.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,contains:[Pe,x.inherit(x.TITLE_MODE,{begin:W})]},{variants:[{begin:"\\."+W},{begin:"\\$"+W}],relevance:0},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"[\]]/,contains:[{beginKeywords:"extends"},x.UNDERSCORE_TITLE_MODE]},{begin:/\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[x.inherit(x.TITLE_MODE,{begin:W}),"self",Pe]},{begin:"(get|set)\\s+(?="+W+"\\()",end:/\{/,keywords:"get set",contains:[x.inherit(x.TITLE_MODE,{begin:W}),{begin:/\(\)/},Pe]},{begin:/\$[(.]/}]}}},92229:v=>{v.exports=function b(i){const r={literal:"true false null"},a=[i.C_LINE_COMMENT_MODE,i.C_BLOCK_COMMENT_MODE],f=[i.QUOTE_STRING_MODE,i.C_NUMBER_MODE],u={end:",",endsWithParent:!0,excludeEnd:!0,contains:f,keywords:r},e={begin:/\{/,end:/\}/,contains:[{className:"attr",begin:/"/,end:/"/,contains:[i.BACKSLASH_ESCAPE],illegal:"\\n"},i.inherit(u,{begin:/:/})].concat(a),illegal:"\\S"},p={begin:"\\[",end:"\\]",contains:[i.inherit(u)],illegal:"\\S"};return f.push(e,p),a.forEach(function(g){f.push(g)}),{name:"JSON",contains:f,keywords:r,illegal:"\\S"}}},78932:v=>{v.exports=function b(i){const u={$pattern:/-?[A-z\.\-]+\b/,keyword:"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter",built_in:"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write"},p={begin:"`[\\s\\S]",relevance:0},g={className:"variable",variants:[{begin:/\$\B/},{className:"keyword",begin:/\$this/},{begin:/\$[\w\d][\w\d_:]*/}]},M={className:"string",variants:[{begin:/"/,end:/"/},{begin:/@"/,end:/^"@/}],contains:[p,g,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},w={className:"string",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},B=i.inherit(i.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:"doctag",variants:[{begin:/\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/}]}]}),W={className:"built_in",variants:[{begin:"(".concat("Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where",")+(-)[\\w\\d]+")}]},j={className:"class",beginKeywords:"class enum",end:/\s*[{]/,excludeEnd:!0,relevance:0,contains:[i.TITLE_MODE]},q={className:"function",begin:/function\s+/,end:/\s*\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:"function",relevance:0,className:"keyword"},{className:"title",begin:/\w[\w\d]*((-)[\w\d]+)*/,relevance:0},{begin:/\(/,end:/\)/,className:"params",relevance:0,contains:[g]}]},ue={begin:/using\s/,end:/$/,returnBegin:!0,contains:[M,w,{className:"keyword",begin:/(using|assembly|command|module|namespace|type)/}]},re={variants:[{className:"operator",begin:"(".concat("-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor",")\\b")},{className:"literal",begin:/(-)[\w\d]+/,relevance:0}]},se={className:"function",begin:/\[.*\]\s*[\w]+[ ]??\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:"keyword",begin:"(".concat(u.keyword.toString().replace(/\s/g,"|"),")\\b"),endsParent:!0,relevance:0},i.inherit(i.TITLE_MODE,{endsParent:!0})]},ae=[se,B,p,i.NUMBER_MODE,M,w,W,g,{className:"literal",begin:/\$(null|true|false)\b/},{className:"selector-tag",begin:/@\B/,relevance:0}],ie={begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat("self",ae,{begin:"("+["string","char","byte","int","long","bool","decimal","single","double","DateTime","xml","array","hashtable","void"].join("|")+")",className:"built_in",relevance:0},{className:"type",begin:/[\.\w\d]+/,relevance:0})};return se.contains.unshift(ie),{name:"PowerShell",aliases:["ps","ps1"],case_insensitive:!0,keywords:u,contains:ae.concat(j,q,ue,re,ie)}}},13546:v=>{function b(e){return e?"string"==typeof e?e:e.source:null}function i(e){return a("(?=",e,")")}function a(...e){return e.map(g=>b(g)).join("")}function f(...e){return"("+e.map(g=>b(g)).join("|")+")"}v.exports=function u(e){const p=a(/[A-Z_]/,function r(e){return a("(",e,")?")}(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),S={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},M={begin:/\s/,contains:[{className:"meta-keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},w=e.inherit(M,{begin:/\(/,end:/\)/}),x=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),B=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),W={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:/[A-Za-z0-9._:-]+/,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[S]},{begin:/'/,end:/'/,contains:[S]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[M,B,x,w,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[M,w,B,x]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},S,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[W],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[W],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:a(/</,i(a(p,f(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:p,relevance:0,starts:W}]},{className:"tag",begin:a(/<\//,i(a(p,/>/))),contains:[{className:"name",begin:p,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},44776:v=>{v.exports=function b(i){var r="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",e={className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/\S+/}],contains:[i.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},p=i.inherit(e,{variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),B={end:",",endsWithParent:!0,excludeEnd:!0,keywords:r,relevance:0},q=[{className:"attr",variants:[{begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+i.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+i.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},i.HASH_COMMENT_MODE,{beginKeywords:r,keywords:{literal:r}},{className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},{className:"number",begin:i.C_NUMBER_RE+"\\b",relevance:0},{begin:/\{/,end:/\}/,contains:[B],illegal:"\\n",relevance:0},{begin:"\\[",end:"\\]",contains:[B],illegal:"\\n",relevance:0},e],ue=[...q];return ue.pop(),ue.push(p),B.contains=ue,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:q}}},62568:(v,b,i)=>{"use strict";var r=i(38308),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},f={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},e={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},p={};function g(q){return r.isMemo(q)?e:p[q.$$typeof]||a}p[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},p[r.Memo]=e;var S=Object.defineProperty,M=Object.getOwnPropertyNames,w=Object.getOwnPropertySymbols,x=Object.getOwnPropertyDescriptor,B=Object.getPrototypeOf,W=Object.prototype;v.exports=function j(q,ue,re){if("string"!=typeof ue){if(W){var H=B(ue);H&&H!==W&&j(q,H,re)}var se=M(ue);w&&(se=se.concat(w(ue)));for(var ae=g(q),ie=g(ue),fe=0;fe<se.length;++fe){var he=se[fe];if(!(f[he]||re&&re[he]||ie&&ie[he]||ae&&ae[he])){var Ce=x(ue,he);try{S(q,he,Ce)}catch(ce){}}}}return q}},12658:(v,b)=>{b.read=function(i,r,a,f,u){var e,p,g=8*u-f-1,S=(1<<g)-1,M=S>>1,w=-7,x=a?u-1:0,B=a?-1:1,W=i[r+x];for(x+=B,e=W&(1<<-w)-1,W>>=-w,w+=g;w>0;e=256*e+i[r+x],x+=B,w-=8);for(p=e&(1<<-w)-1,e>>=-w,w+=f;w>0;p=256*p+i[r+x],x+=B,w-=8);if(0===e)e=1-M;else{if(e===S)return p?NaN:1/0*(W?-1:1);p+=Math.pow(2,f),e-=M}return(W?-1:1)*p*Math.pow(2,e-f)},b.write=function(i,r,a,f,u,e){var p,g,S,M=8*e-u-1,w=(1<<M)-1,x=w>>1,B=23===u?Math.pow(2,-24)-Math.pow(2,-77):0,W=f?0:e-1,j=f?1:-1,q=r<0||0===r&&1/r<0?1:0;for(r=Math.abs(r),isNaN(r)||r===1/0?(g=isNaN(r)?1:0,p=w):(p=Math.floor(Math.log(r)/Math.LN2),r*(S=Math.pow(2,-p))<1&&(p--,S*=2),(r+=p+x>=1?B/S:B*Math.pow(2,1-x))*S>=2&&(p++,S/=2),p+x>=w?(g=0,p=w):p+x>=1?(g=(r*S-1)*Math.pow(2,u),p+=x):(g=r*Math.pow(2,x-1)*Math.pow(2,u),p=0));u>=8;i[a+W]=255&g,W+=j,g/=256,u-=8);for(p=p<<u|g,M+=u;M>0;i[a+W]=255&p,W+=j,p/=256,M-=8);i[a+W-j]|=128*q}},16482:function(v){v.exports=function(){"use strict";var b=Array.prototype.slice;function i(Z,De){De&&(Z.prototype=Object.create(De.prototype)),Z.prototype.constructor=Z}function r(Z){return e(Z)?Z:mi(Z)}function a(Z){return p(Z)?Z:ci(Z)}function f(Z){return g(Z)?Z:hr(Z)}function u(Z){return e(Z)&&!S(Z)?Z:Br(Z)}function e(Z){return!(!Z||!Z[w])}function p(Z){return!(!Z||!Z[x])}function g(Z){return!(!Z||!Z[B])}function S(Z){return p(Z)||g(Z)}function M(Z){return!(!Z||!Z[W])}i(a,r),i(f,r),i(u,r),r.isIterable=e,r.isKeyed=p,r.isIndexed=g,r.isAssociative=S,r.isOrdered=M,r.Keyed=a,r.Indexed=f,r.Set=u;var w="@@__IMMUTABLE_ITERABLE__@@",x="@@__IMMUTABLE_KEYED__@@",B="@@__IMMUTABLE_INDEXED__@@",W="@@__IMMUTABLE_ORDERED__@@",j="delete",H={},se={value:!1},ae={value:!1};function ie(Z){return Z.value=!1,Z}function fe(Z){Z&&(Z.value=!0)}function he(){}function Ce(Z,De){De=De||0;for(var ct=Math.max(0,Z.length-De),It=new Array(ct),Ht=0;Ht<ct;Ht++)It[Ht]=Z[Ht+De];return It}function ce(Z){return void 0===Z.size&&(Z.size=Z.__iterate(Ve)),Z.size}function Be(Z,De){if("number"!=typeof De){var ct=De>>>0;if(""+ct!==De||4294967295===ct)return NaN;De=ct}return De<0?ce(Z)+De:De}function Ve(){return!0}function Xe(Z,De,ct){return(0===Z||void 0!==ct&&Z<=-ct)&&(void 0===De||void 0!==ct&&De>=ct)}function He(Z,De){return Ge(Z,De,0)}function Pe(Z,De){return Ge(Z,De,De)}function Ge(Z,De,ct){return void 0===Z?ct:Z<0?Math.max(0,De+Z):void 0===De?Z:Math.min(De,Z)}var Qt="function"==typeof Symbol&&Symbol.iterator,Nt="@@iterator",Yt=Qt||Nt;function dn(Z){this.next=Z}function rn(Z,De,ct,It){var Ht=0===Z?De:1===Z?ct:[De,ct];return It?It.value=Ht:It={value:Ht,done:!1},It}function vt(){return{value:void 0,done:!0}}function xt(Z){return!!Fn(Z)}function Ct(Z){return Z&&"function"==typeof Z.next}function Gt(Z){var De=Fn(Z);return De&&De.call(Z)}function Fn(Z){var De=Z&&(Qt&&Z[Qt]||Z[Nt]);if("function"==typeof De)return De}function pr(Z){return Z&&"number"==typeof Z.length}function mi(Z){return null==Z?no():e(Z)?Z.toSeq():function an(Z){var De=vn(Z)||"object"==typeof Z&&new er(Z);if(!De)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+Z);return De}(Z)}function ci(Z){return null==Z?no().toKeyedSeq():e(Z)?p(Z)?Z.toSeq():Z.fromEntrySeq():xo(Z)}function hr(Z){return null==Z?no():e(Z)?p(Z)?Z.entrySeq():Z.toIndexedSeq():Er(Z)}function Br(Z){return(null==Z?no():e(Z)?p(Z)?Z.entrySeq():Z:Er(Z)).toSetSeq()}dn.prototype.toString=function(){return"[Iterator]"},dn.KEYS=0,dn.VALUES=1,dn.ENTRIES=2,dn.prototype.inspect=dn.prototype.toSource=function(){return this.toString()},dn.prototype[Yt]=function(){return this},i(mi,r),mi.of=function(){return mi(arguments)},mi.prototype.toSeq=function(){return this},mi.prototype.toString=function(){return this.__toString("Seq {","}")},mi.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},mi.prototype.__iterate=function(Z,De){return Zn(this,Z,De,!0)},mi.prototype.__iterator=function(Z,De){return Xn(this,Z,De,!0)},i(ci,mi),ci.prototype.toKeyedSeq=function(){return this},i(hr,mi),hr.of=function(){return hr(arguments)},hr.prototype.toIndexedSeq=function(){return this},hr.prototype.toString=function(){return this.__toString("Seq [","]")},hr.prototype.__iterate=function(Z,De){return Zn(this,Z,De,!1)},hr.prototype.__iterator=function(Z,De){return Xn(this,Z,De,!1)},i(Br,mi),Br.of=function(){return Br(arguments)},Br.prototype.toSetSeq=function(){return this},mi.isSeq=bi,mi.Keyed=ci,mi.Set=Br,mi.Indexed=hr;var fi,Rn,Le,Ur="@@__IMMUTABLE_SEQ__@@";function Hn(Z){this._array=Z,this.size=Z.length}function er(Z){var De=Object.keys(Z);this._object=Z,this._keys=De,this.size=De.length}function _r(Z){this._iterable=Z,this.size=Z.length||Z.size}function ei(Z){this._iterator=Z,this._iteratorCache=[]}function bi(Z){return!(!Z||!Z[Ur])}function no(){return fi||(fi=new Hn([]))}function xo(Z){var De=Array.isArray(Z)?new Hn(Z).fromEntrySeq():Ct(Z)?new ei(Z).fromEntrySeq():xt(Z)?new _r(Z).fromEntrySeq():"object"==typeof Z?new er(Z):void 0;if(!De)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+Z);return De}function Er(Z){var De=vn(Z);if(!De)throw new TypeError("Expected Array or iterable object of values: "+Z);return De}function vn(Z){return pr(Z)?new Hn(Z):Ct(Z)?new ei(Z):xt(Z)?new _r(Z):void 0}function Zn(Z,De,ct,It){var Ht=Z._cache;if(Ht){for(var _n=Ht.length-1,Pn=0;Pn<=_n;Pn++){var Tr=Ht[ct?_n-Pn:Pn];if(!1===De(Tr[1],It?Tr[0]:Pn,Z))return Pn+1}return Pn}return Z.__iterateUncached(De,ct)}function Xn(Z,De,ct,It){var Ht=Z._cache;if(Ht){var _n=Ht.length-1,Pn=0;return new dn(function(){var Tr=Ht[ct?_n-Pn:Pn];return Pn++>_n?{value:void 0,done:!0}:rn(De,It?Tr[0]:Pn-1,Tr[1])})}return Z.__iteratorUncached(De,ct)}function zn(Z,De){return De?ri(De,Z,"",{"":Z}):Gi(Z)}function ri(Z,De,ct,It){return Array.isArray(De)?Z.call(It,ct,hr(De).map(function(Ht,_n){return ri(Z,Ht,_n,De)})):ui(De)?Z.call(It,ct,ci(De).map(function(Ht,_n){return ri(Z,Ht,_n,De)})):De}function Gi(Z){return Array.isArray(Z)?hr(Z).map(Gi).toList():ui(Z)?ci(Z).map(Gi).toMap():Z}function ui(Z){return Z&&(Z.constructor===Object||void 0===Z.constructor)}function vr(Z,De){if(Z===De||Z!=Z&&De!=De)return!0;if(!Z||!De)return!1;if("function"==typeof Z.valueOf&&"function"==typeof De.valueOf){if((Z=Z.valueOf())===(De=De.valueOf())||Z!=Z&&De!=De)return!0;if(!Z||!De)return!1}return!("function"!=typeof Z.equals||"function"!=typeof De.equals||!Z.equals(De))}function Ji(Z,De){if(Z===De)return!0;if(!e(De)||void 0!==Z.size&&void 0!==De.size&&Z.size!==De.size||void 0!==Z.__hash&&void 0!==De.__hash&&Z.__hash!==De.__hash||p(Z)!==p(De)||g(Z)!==g(De)||M(Z)!==M(De))return!1;if(0===Z.size&&0===De.size)return!0;var ct=!S(Z);if(M(Z)){var It=Z.entries();return De.every(function(ai,Ei){var Ci=It.next().value;return Ci&&vr(Ci[1],ai)&&(ct||vr(Ci[0],Ei))})&&It.next().done}var Ht=!1;if(void 0===Z.size)if(void 0===De.size)"function"==typeof Z.cacheResult&&Z.cacheResult();else{Ht=!0;var _n=Z;Z=De,De=_n}var Pn=!0,Tr=De.__iterate(function(ai,Ei){if(ct?!Z.has(ai):Ht?!vr(ai,Z.get(Ei,H)):!vr(Z.get(Ei,H),ai))return Pn=!1,!1});return Pn&&Z.size===Tr}function mn(Z,De){if(!(this instanceof mn))return new mn(Z,De);if(this._value=Z,this.size=void 0===De?1/0:Math.max(0,De),0===this.size){if(Rn)return Rn;Rn=this}}function Wn(Z,De){if(!Z)throw new Error(De)}function et(Z,De,ct){if(!(this instanceof et))return new et(Z,De,ct);if(Wn(0!==ct,"Cannot step a Range by 0"),Z=Z||0,void 0===De&&(De=1/0),ct=void 0===ct?1:Math.abs(ct),De<Z&&(ct=-ct),this._start=Z,this._end=De,this._step=ct,this.size=Math.max(0,Math.ceil((De-Z)/ct-1)+1),0===this.size){if(Le)return Le;Le=this}}function Re(){throw TypeError("Abstract")}function Se(){}function dt(){}function st(){}mi.prototype[Ur]=!0,i(Hn,hr),Hn.prototype.get=function(Z,De){return this.has(Z)?this._array[Be(this,Z)]:De},Hn.prototype.__iterate=function(Z,De){for(var ct=this._array,It=ct.length-1,Ht=0;Ht<=It;Ht++)if(!1===Z(ct[De?It-Ht:Ht],Ht,this))return Ht+1;return Ht},Hn.prototype.__iterator=function(Z,De){var ct=this._array,It=ct.length-1,Ht=0;return new dn(function(){return Ht>It?{value:void 0,done:!0}:rn(Z,Ht,ct[De?It-Ht++:Ht++])})},i(er,ci),er.prototype.get=function(Z,De){return void 0===De||this.has(Z)?this._object[Z]:De},er.prototype.has=function(Z){return this._object.hasOwnProperty(Z)},er.prototype.__iterate=function(Z,De){for(var ct=this._object,It=this._keys,Ht=It.length-1,_n=0;_n<=Ht;_n++){var Pn=It[De?Ht-_n:_n];if(!1===Z(ct[Pn],Pn,this))return _n+1}return _n},er.prototype.__iterator=function(Z,De){var ct=this._object,It=this._keys,Ht=It.length-1,_n=0;return new dn(function(){var Pn=It[De?Ht-_n:_n];return _n++>Ht?{value:void 0,done:!0}:rn(Z,Pn,ct[Pn])})},er.prototype[W]=!0,i(_r,hr),_r.prototype.__iterateUncached=function(Z,De){if(De)return this.cacheResult().__iterate(Z,De);var It=Gt(this._iterable),Ht=0;if(Ct(It))for(var _n;!(_n=It.next()).done&&!1!==Z(_n.value,Ht++,this););return Ht},_r.prototype.__iteratorUncached=function(Z,De){if(De)return this.cacheResult().__iterator(Z,De);var It=Gt(this._iterable);if(!Ct(It))return new dn(vt);var Ht=0;return new dn(function(){var _n=It.next();return _n.done?_n:rn(Z,Ht++,_n.value)})},i(ei,hr),ei.prototype.__iterateUncached=function(Z,De){if(De)return this.cacheResult().__iterate(Z,De);for(var ct=this._iterator,It=this._iteratorCache,Ht=0;Ht<It.length;)if(!1===Z(It[Ht],Ht++,this))return Ht;for(var _n;!(_n=ct.next()).done;){var Pn=_n.value;if(It[Ht]=Pn,!1===Z(Pn,Ht++,this))break}return Ht},ei.prototype.__iteratorUncached=function(Z,De){if(De)return this.cacheResult().__iterator(Z,De);var ct=this._iterator,It=this._iteratorCache,Ht=0;return new dn(function(){if(Ht>=It.length){var _n=ct.next();if(_n.done)return _n;It[Ht]=_n.value}return rn(Z,Ht,It[Ht++])})},i(mn,hr),mn.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},mn.prototype.get=function(Z,De){return this.has(Z)?this._value:De},mn.prototype.includes=function(Z){return vr(this._value,Z)},mn.prototype.slice=function(Z,De){var ct=this.size;return Xe(Z,De,ct)?this:new mn(this._value,Pe(De,ct)-He(Z,ct))},mn.prototype.reverse=function(){return this},mn.prototype.indexOf=function(Z){return vr(this._value,Z)?0:-1},mn.prototype.lastIndexOf=function(Z){return vr(this._value,Z)?this.size:-1},mn.prototype.__iterate=function(Z,De){for(var ct=0;ct<this.size;ct++)if(!1===Z(this._value,ct,this))return ct+1;return ct},mn.prototype.__iterator=function(Z,De){var ct=this,It=0;return new dn(function(){return It<ct.size?rn(Z,It++,ct._value):{value:void 0,done:!0}})},mn.prototype.equals=function(Z){return Z instanceof mn?vr(this._value,Z._value):Ji(Z)},i(et,hr),et.prototype.toString=function(){return 0===this.size?"Range []":"Range [ "+this._start+"..."+this._end+(1!==this._step?" by "+this._step:"")+" ]"},et.prototype.get=function(Z,De){return this.has(Z)?this._start+Be(this,Z)*this._step:De},et.prototype.includes=function(Z){var De=(Z-this._start)/this._step;return De>=0&&De<this.size&&De===Math.floor(De)},et.prototype.slice=function(Z,De){return Xe(Z,De,this.size)?this:(Z=He(Z,this.size),(De=Pe(De,this.size))<=Z?new et(0,0):new et(this.get(Z,this._end),this.get(De,this._end),this._step))},et.prototype.indexOf=function(Z){var De=Z-this._start;if(De%this._step==0){var ct=De/this._step;if(ct>=0&&ct<this.size)return ct}return-1},et.prototype.lastIndexOf=function(Z){return this.indexOf(Z)},et.prototype.__iterate=function(Z,De){for(var ct=this.size-1,It=this._step,Ht=De?this._start+ct*It:this._start,_n=0;_n<=ct;_n++){if(!1===Z(Ht,_n,this))return _n+1;Ht+=De?-It:It}return _n},et.prototype.__iterator=function(Z,De){var ct=this.size-1,It=this._step,Ht=De?this._start+ct*It:this._start,_n=0;return new dn(function(){var Pn=Ht;return Ht+=De?-It:It,_n>ct?{value:void 0,done:!0}:rn(Z,_n++,Pn)})},et.prototype.equals=function(Z){return Z instanceof et?this._start===Z._start&&this._end===Z._end&&this._step===Z._step:Ji(this,Z)},i(Re,r),i(Se,Re),i(dt,Re),i(st,Re),Re.Keyed=Se,Re.Indexed=dt,Re.Set=st;var nn="function"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(De,ct){var It=65535&(De|=0),Ht=65535&(ct|=0);return It*Ht+((De>>>16)*Ht+It*(ct>>>16)<<16>>>0)|0};function Fe(Z){return Z>>>1&1073741824|3221225471&Z}function Lr(Z){if(!1===Z||null==Z||"function"==typeof Z.valueOf&&(!1===(Z=Z.valueOf())||null==Z))return 0;if(!0===Z)return 1;var De=typeof Z;if("number"===De){if(Z!=Z||Z===1/0)return 0;var ct=0|Z;for(ct!==Z&&(ct^=4294967295*Z);Z>4294967295;)ct^=Z/=4294967295;return Fe(ct)}if("string"===De)return Z.length>xi?function ti(Z){var De=Qo[Z];return void 0===De&&(De=Ut(Z),Yo===yi&&(Yo=0,Qo={}),Yo++,Qo[Z]=De),De}(Z):Ut(Z);if("function"==typeof Z.hashCode)return Z.hashCode();if("object"===De)return function Dn(Z){var De;if(yt&&void 0!==(De=Vt.get(Z))||void 0!==(De=Z[Cr])||!$t&&(void 0!==(De=Z.propertyIsEnumerable&&Z.propertyIsEnumerable[Cr])||void 0!==(De=function _t(Z){if(Z&&Z.nodeType>0)switch(Z.nodeType){case 1:return Z.uniqueID;case 9:return Z.documentElement&&Z.documentElement.uniqueID}}(Z))))return De;if(De=++yn,1073741824&yn&&(yn=0),yt)Vt.set(Z,De);else{if(void 0!==Et&&!1===Et(Z))throw new Error("Non-extensible objects are not allowed as keys.");if($t)Object.defineProperty(Z,Cr,{enumerable:!1,configurable:!1,writable:!1,value:De});else if(void 0!==Z.propertyIsEnumerable&&Z.propertyIsEnumerable===Z.constructor.prototype.propertyIsEnumerable)Z.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},Z.propertyIsEnumerable[Cr]=De;else{if(void 0===Z.nodeType)throw new Error("Unable to set a non-enumerable property on object.");Z[Cr]=De}}return De}(Z);if("function"==typeof Z.toString)return Ut(Z.toString());throw new Error("Value type "+De+" cannot be hashed.")}function Ut(Z){for(var De=0,ct=0;ct<Z.length;ct++)De=31*De+Z.charCodeAt(ct)|0;return Fe(De)}var Et=Object.isExtensible,$t=function(){try{return Object.defineProperty({},"@",{}),!0}catch(Z){return!1}}();var Vt,yt="function"==typeof WeakMap;yt&&(Vt=new WeakMap);var yn=0,Cr="__immutablehash__";"function"==typeof Symbol&&(Cr=Symbol(Cr));var xi=16,yi=255,Yo=0,Qo={};function lo(Z){Wn(Z!==1/0,"Cannot perform this action with an infinite size.")}function Ri(Z){return null==Z?or():ko(Z)&&!M(Z)?Z:or().withMutations(function(De){var ct=a(Z);lo(ct.size),ct.forEach(function(It,Ht){return De.set(Ht,It)})})}function ko(Z){return!(!Z||!Z[Xo])}i(Ri,Se),Ri.of=function(){var Z=b.call(arguments,0);return or().withMutations(function(De){for(var ct=0;ct<Z.length;ct+=2){if(ct+1>=Z.length)throw new Error("Missing value for key: "+Z[ct]);De.set(Z[ct],Z[ct+1])}})},Ri.prototype.toString=function(){return this.__toString("Map {","}")},Ri.prototype.get=function(Z,De){return this._root?this._root.get(0,void 0,Z,De):De},Ri.prototype.set=function(Z,De){return Mr(this,Z,De)},Ri.prototype.setIn=function(Z,De){return this.updateIn(Z,H,function(){return De})},Ri.prototype.remove=function(Z){return Mr(this,Z,H)},Ri.prototype.deleteIn=function(Z){return this.updateIn(Z,function(){return H})},Ri.prototype.update=function(Z,De,ct){return 1===arguments.length?Z(this):this.updateIn([Z],De,ct)},Ri.prototype.updateIn=function(Z,De,ct){ct||(ct=De,De=void 0);var It=ds(this,as(Z),De,ct);return It===H?void 0:It},Ri.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):or()},Ri.prototype.merge=function(){return ro(this,void 0,arguments)},Ri.prototype.mergeWith=function(Z){return ro(this,Z,b.call(arguments,1))},Ri.prototype.mergeIn=function(Z){var De=b.call(arguments,1);return this.updateIn(Z,or(),function(ct){return"function"==typeof ct.merge?ct.merge.apply(ct,De):De[De.length-1]})},Ri.prototype.mergeDeep=function(){return ro(this,go,arguments)},Ri.prototype.mergeDeepWith=function(Z){var De=b.call(arguments,1);return ro(this,Ro(Z),De)},Ri.prototype.mergeDeepIn=function(Z){var De=b.call(arguments,1);return this.updateIn(Z,or(),function(ct){return"function"==typeof ct.mergeDeep?ct.mergeDeep.apply(ct,De):De[De.length-1]})},Ri.prototype.sort=function(Z){return te(Ja(this,Z))},Ri.prototype.sortBy=function(Z,De){return te(Ja(this,De,Z))},Ri.prototype.withMutations=function(Z){var De=this.asMutable();return Z(De),De.wasAltered()?De.__ensureOwner(this.__ownerID):this},Ri.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new he)},Ri.prototype.asImmutable=function(){return this.__ensureOwner()},Ri.prototype.wasAltered=function(){return this.__altered},Ri.prototype.__iterator=function(Z,De){return new $i(this,Z,De)},Ri.prototype.__iterate=function(Z,De){var ct=this,It=0;return this._root&&this._root.iterate(function(Ht){return It++,Z(Ht[1],Ht[0],ct)},De),It},Ri.prototype.__ensureOwner=function(Z){return Z===this.__ownerID?this:Z?Go(this.size,this._root,Z,this.__hash):(this.__ownerID=Z,this.__altered=!1,this)},Ri.isMap=ko;var ua,Xo="@@__IMMUTABLE_MAP__@@",ir=Ri.prototype;function si(Z,De){this.ownerID=Z,this.entries=De}function kn(Z,De,ct){this.ownerID=Z,this.bitmap=De,this.nodes=ct}function nr(Z,De,ct){this.ownerID=Z,this.count=De,this.nodes=ct}function jr(Z,De,ct){this.ownerID=Z,this.keyHash=De,this.entries=ct}function ao(Z,De,ct){this.ownerID=Z,this.keyHash=De,this.entry=ct}function $i(Z,De,ct){this._type=De,this._reverse=ct,this._stack=Z._root&&mo(Z._root)}function Eo(Z,De){return rn(Z,De[0],De[1])}function mo(Z,De){return{node:Z,index:0,__prev:De}}function Go(Z,De,ct,It){var Ht=Object.create(ir);return Ht.size=Z,Ht._root=De,Ht.__ownerID=ct,Ht.__hash=It,Ht.__altered=!1,Ht}function or(){return ua||(ua=Go(0))}function Mr(Z,De,ct){var It,Ht;if(Z._root){var _n=ie(se),Pn=ie(ae);if(It=Ar(Z._root,Z.__ownerID,0,void 0,De,ct,_n,Pn),!Pn.value)return Z;Ht=Z.size+(_n.value?ct===H?-1:1:0)}else{if(ct===H)return Z;Ht=1,It=new si(Z.__ownerID,[[De,ct]])}return Z.__ownerID?(Z.size=Ht,Z._root=It,Z.__hash=void 0,Z.__altered=!0,Z):It?Go(Ht,It):or()}function Ar(Z,De,ct,It,Ht,_n,Pn,Tr){return Z?Z.update(De,ct,It,Ht,_n,Pn,Tr):_n===H?Z:(fe(Tr),fe(Pn),new ao(De,It,[Ht,_n]))}function cr(Z){return Z.constructor===ao||Z.constructor===jr}function pi(Z,De,ct,It,Ht){if(Z.keyHash===It)return new jr(De,It,[Z.entry,Ht]);var Tr,_n=31&(0===ct?Z.keyHash:Z.keyHash>>>ct),Pn=31&(0===ct?It:It>>>ct);return new kn(De,1<<_n|1<<Pn,_n===Pn?[pi(Z,De,ct+5,It,Ht)]:(Tr=new ao(De,It,Ht),_n<Pn?[Z,Tr]:[Tr,Z]))}function ro(Z,De,ct){for(var It=[],Ht=0;Ht<ct.length;Ht++){var _n=ct[Ht],Pn=a(_n);e(_n)||(Pn=Pn.map(function(Tr){return zn(Tr)})),It.push(Pn)}return Ys(Z,De,It)}function go(Z,De,ct){return Z&&Z.mergeDeep&&e(De)?Z.mergeDeep(De):vr(Z,De)?Z:De}function Ro(Z){return function(De,ct,It){if(De&&De.mergeDeepWith&&e(ct))return De.mergeDeepWith(Z,ct);var Ht=Z(De,ct,It);return vr(De,Ht)?De:Ht}}function Ys(Z,De,ct){return 0===(ct=ct.filter(function(It){return 0!==It.size})).length?Z:0!==Z.size||Z.__ownerID||1!==ct.length?Z.withMutations(function(It){for(var Ht=De?function(Pn,Tr){It.update(Tr,H,function(ai){return ai===H?Pn:De(ai,Pn,Tr)})}:function(Pn,Tr){It.set(Tr,Pn)},_n=0;_n<ct.length;_n++)ct[_n].forEach(Ht)}):Z.constructor(ct[0])}function ds(Z,De,ct,It){var Ht=Z===H,_n=De.next();if(_n.done){var Pn=Ht?ct:Z,Tr=It(Pn);return Tr===Pn?Z:Tr}Wn(Ht||Z&&Z.set,"invalid keyPath");var ai=_n.value,Ei=Ht?H:Z.get(ai,H),Ci=ds(Ei,De,ct,It);return Ci===Ei?Z:Ci===H?Z.remove(ai):(Ht?or():Z).set(ai,Ci)}function es(Z){return Z=(Z=(858993459&(Z-=Z>>1&1431655765))+(Z>>2&858993459))+(Z>>4)&252645135,127&(Z+=Z>>8)+(Z>>16)}function ma(Z,De,ct,It){var Ht=It?Z:Ce(Z);return Ht[De]=ct,Ht}ir[Xo]=!0,ir[j]=ir.remove,ir.removeIn=ir.deleteIn,si.prototype.get=function(Z,De,ct,It){for(var Ht=this.entries,_n=0,Pn=Ht.length;_n<Pn;_n++)if(vr(ct,Ht[_n][0]))return Ht[_n][1];return It},si.prototype.update=function(Z,De,ct,It,Ht,_n,Pn){for(var Tr=Ht===H,ai=this.entries,Ei=0,Ci=ai.length;Ei<Ci&&!vr(It,ai[Ei][0]);Ei++);var Vi=Ei<Ci;if(Vi?ai[Ei][1]===Ht:Tr)return this;if(fe(Pn),(Tr||!Vi)&&fe(_n),!Tr||1!==ai.length){if(!Vi&&!Tr&&ai.length>=sa)return function Sn(Z,De,ct,It){Z||(Z=new he);for(var Ht=new ao(Z,Lr(ct),[ct,It]),_n=0;_n<De.length;_n++){var Pn=De[_n];Ht=Ht.update(Z,0,void 0,Pn[0],Pn[1])}return Ht}(Z,ai,It,Ht);var Pr=Z&&Z===this.ownerID,Yn=Pr?ai:Ce(ai);return Vi?Tr?Ei===Ci-1?Yn.pop():Yn[Ei]=Yn.pop():Yn[Ei]=[It,Ht]:Yn.push([It,Ht]),Pr?(this.entries=Yn,this):new si(Z,Yn)}},kn.prototype.get=function(Z,De,ct,It){void 0===De&&(De=Lr(ct));var Ht=1<<(31&(0===Z?De:De>>>Z)),_n=this.bitmap;return 0==(_n&Ht)?It:this.nodes[es(_n&Ht-1)].get(Z+5,De,ct,It)},kn.prototype.update=function(Z,De,ct,It,Ht,_n,Pn){void 0===ct&&(ct=Lr(It));var Tr=31&(0===De?ct:ct>>>De),ai=1<<Tr,Ei=this.bitmap,Ci=0!=(Ei&ai);if(!Ci&&Ht===H)return this;var Vi=es(Ei&ai-1),Pr=this.nodes,Yn=Ci?Pr[Vi]:void 0,Rr=Ar(Yn,Z,De+5,ct,It,Ht,_n,Pn);if(Rr===Yn)return this;if(!Ci&&Rr&&Pr.length>=Ra)return function Jr(Z,De,ct,It,Ht){for(var _n=0,Pn=new Array(32),Tr=0;0!==ct;Tr++,ct>>>=1)Pn[Tr]=1&ct?De[_n++]:void 0;return Pn[It]=Ht,new nr(Z,_n+1,Pn)}(Z,Pr,Ei,Tr,Rr);if(Ci&&!Rr&&2===Pr.length&&cr(Pr[1^Vi]))return Pr[1^Vi];if(Ci&&Rr&&1===Pr.length&&cr(Rr))return Rr;var br=Z&&Z===this.ownerID,fo=Ci?Rr?Ei:Ei^ai:Ei|ai,$s=Ci?Rr?ma(Pr,Vi,Rr,br):function fa(Z,De,ct){var It=Z.length-1;if(ct&&De===It)return Z.pop(),Z;for(var Ht=new Array(It),_n=0,Pn=0;Pn<It;Pn++)Pn===De&&(_n=1),Ht[Pn]=Z[Pn+_n];return Ht}(Pr,Vi,br):function Ea(Z,De,ct,It){var Ht=Z.length+1;if(It&&De+1===Ht)return Z[De]=ct,Z;for(var _n=new Array(Ht),Pn=0,Tr=0;Tr<Ht;Tr++)Tr===De?(_n[Tr]=ct,Pn=-1):_n[Tr]=Z[Tr+Pn];return _n}(Pr,Vi,Rr,br);return br?(this.bitmap=fo,this.nodes=$s,this):new kn(Z,fo,$s)},nr.prototype.get=function(Z,De,ct,It){void 0===De&&(De=Lr(ct));var _n=this.nodes[31&(0===Z?De:De>>>Z)];return _n?_n.get(Z+5,De,ct,It):It},nr.prototype.update=function(Z,De,ct,It,Ht,_n,Pn){void 0===ct&&(ct=Lr(It));var Tr=31&(0===De?ct:ct>>>De),Ei=this.nodes,Ci=Ei[Tr];if(Ht===H&&!Ci)return this;var Vi=Ar(Ci,Z,De+5,ct,It,Ht,_n,Pn);if(Vi===Ci)return this;var Pr=this.count;if(Ci){if(!Vi&&--Pr<pl)return function $n(Z,De,ct,It){for(var Ht=0,_n=0,Pn=new Array(ct),Tr=0,ai=1,Ei=De.length;Tr<Ei;Tr++,ai<<=1){var Ci=De[Tr];void 0!==Ci&&Tr!==It&&(Ht|=ai,Pn[_n++]=Ci)}return new kn(Z,Ht,Pn)}(Z,Ei,Pr,Tr)}else Pr++;var Yn=Z&&Z===this.ownerID,Rr=ma(Ei,Tr,Vi,Yn);return Yn?(this.count=Pr,this.nodes=Rr,this):new nr(Z,Pr,Rr)},jr.prototype.get=function(Z,De,ct,It){for(var Ht=this.entries,_n=0,Pn=Ht.length;_n<Pn;_n++)if(vr(ct,Ht[_n][0]))return Ht[_n][1];return It},jr.prototype.update=function(Z,De,ct,It,Ht,_n,Pn){void 0===ct&&(ct=Lr(It));var Tr=Ht===H;if(ct!==this.keyHash)return Tr?this:(fe(Pn),fe(_n),pi(this,Z,De,ct,[It,Ht]));for(var ai=this.entries,Ei=0,Ci=ai.length;Ei<Ci&&!vr(It,ai[Ei][0]);Ei++);var Vi=Ei<Ci;if(Vi?ai[Ei][1]===Ht:Tr)return this;if(fe(Pn),(Tr||!Vi)&&fe(_n),Tr&&2===Ci)return new ao(Z,this.keyHash,ai[1^Ei]);var Pr=Z&&Z===this.ownerID,Yn=Pr?ai:Ce(ai);return Vi?Tr?Ei===Ci-1?Yn.pop():Yn[Ei]=Yn.pop():Yn[Ei]=[It,Ht]:Yn.push([It,Ht]),Pr?(this.entries=Yn,this):new jr(Z,this.keyHash,Yn)},ao.prototype.get=function(Z,De,ct,It){return vr(ct,this.entry[0])?this.entry[1]:It},ao.prototype.update=function(Z,De,ct,It,Ht,_n,Pn){var Tr=Ht===H,ai=vr(It,this.entry[0]);return(ai?Ht===this.entry[1]:Tr)?this:(fe(Pn),Tr?void fe(_n):ai?Z&&Z===this.ownerID?(this.entry[1]=Ht,this):new ao(Z,this.keyHash,[It,Ht]):(fe(_n),pi(this,Z,De,Lr(It),[It,Ht])))},si.prototype.iterate=jr.prototype.iterate=function(Z,De){for(var ct=this.entries,It=0,Ht=ct.length-1;It<=Ht;It++)if(!1===Z(ct[De?Ht-It:It]))return!1},kn.prototype.iterate=nr.prototype.iterate=function(Z,De){for(var ct=this.nodes,It=0,Ht=ct.length-1;It<=Ht;It++){var _n=ct[De?Ht-It:It];if(_n&&!1===_n.iterate(Z,De))return!1}},ao.prototype.iterate=function(Z,De){return Z(this.entry)},i($i,dn),$i.prototype.next=function(){for(var Z=this._type,De=this._stack;De;){var Ht,ct=De.node,It=De.index++;if(ct.entry){if(0===It)return Eo(Z,ct.entry)}else if(ct.entries){if(It<=(Ht=ct.entries.length-1))return Eo(Z,ct.entries[this._reverse?Ht-It:It])}else if(It<=(Ht=ct.nodes.length-1)){var _n=ct.nodes[this._reverse?Ht-It:It];if(_n){if(_n.entry)return Eo(Z,_n.entry);De=this._stack=mo(_n,De)}continue}De=this._stack=this._stack.__prev}return{value:void 0,done:!0}};var sa=8,Ra=16,pl=8;function Co(Z){var De=To();if(null==Z)return De;if(yl(Z))return Z;var ct=f(Z),It=ct.size;return 0===It?De:(lo(It),It>0&&It<32?js(0,It,5,null,new Wa(ct.toArray())):De.withMutations(function(Ht){Ht.setSize(It),ct.forEach(function(_n,Pn){return Ht.set(Pn,_n)})}))}function yl(Z){return!(!Z||!Z[Wo])}i(Co,dt),Co.of=function(){return this(arguments)},Co.prototype.toString=function(){return this.__toString("List [","]")},Co.prototype.get=function(Z,De){if((Z=Be(this,Z))>=0&&Z<this.size){var ct=kr(this,Z+=this._origin);return ct&&ct.array[31&Z]}return De},Co.prototype.set=function(Z,De){return function Ns(Z,De,ct){if((De=Be(Z,De))!=De)return Z;if(De>=Z.size||De<0)return Z.withMutations(function(Pn){De<0?Ki(Pn,De).set(0,ct):Ki(Pn,0,De+1).set(De,ct)});De+=Z._origin;var It=Z._tail,Ht=Z._root,_n=ie(ae);return De>=pn(Z._capacity)?It=hs(It,Z.__ownerID,0,De,ct,_n):Ht=hs(Ht,Z.__ownerID,Z._level,De,ct,_n),_n.value?Z.__ownerID?(Z._root=Ht,Z._tail=It,Z.__hash=void 0,Z.__altered=!0,Z):js(Z._origin,Z._capacity,Z._level,Ht,It):Z}(this,Z,De)},Co.prototype.remove=function(Z){return this.has(Z)?0===Z?this.shift():Z===this.size-1?this.pop():this.splice(Z,1):this},Co.prototype.insert=function(Z,De){return this.splice(Z,0,De)},Co.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=5,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):To()},Co.prototype.push=function(){var Z=arguments,De=this.size;return this.withMutations(function(ct){Ki(ct,0,De+Z.length);for(var It=0;It<Z.length;It++)ct.set(De+It,Z[It])})},Co.prototype.pop=function(){return Ki(this,0,-1)},Co.prototype.unshift=function(){var Z=arguments;return this.withMutations(function(De){Ki(De,-Z.length);for(var ct=0;ct<Z.length;ct++)De.set(ct,Z[ct])})},Co.prototype.shift=function(){return Ki(this,1)},Co.prototype.merge=function(){return ut(this,void 0,arguments)},Co.prototype.mergeWith=function(Z){return ut(this,Z,b.call(arguments,1))},Co.prototype.mergeDeep=function(){return ut(this,go,arguments)},Co.prototype.mergeDeepWith=function(Z){var De=b.call(arguments,1);return ut(this,Ro(Z),De)},Co.prototype.setSize=function(Z){return Ki(this,0,Z)},Co.prototype.slice=function(Z,De){var ct=this.size;return Xe(Z,De,ct)?this:Ki(this,He(Z,ct),Pe(De,ct))},Co.prototype.__iterator=function(Z,De){var ct=0,It=nl(this,De);return new dn(function(){var Ht=It();return Ht===Is?{value:void 0,done:!0}:rn(Z,ct++,Ht)})},Co.prototype.__iterate=function(Z,De){for(var Ht,ct=0,It=nl(this,De);(Ht=It())!==Is&&!1!==Z(Ht,ct++,this););return ct},Co.prototype.__ensureOwner=function(Z){return Z===this.__ownerID?this:Z?js(this._origin,this._capacity,this._level,this._root,this._tail,Z,this.__hash):(this.__ownerID=Z,this)},Co.isList=yl;var Wo="@@__IMMUTABLE_LIST__@@",ys=Co.prototype;function Wa(Z,De){this.array=Z,this.ownerID=De}ys[Wo]=!0,ys[j]=ys.remove,ys.setIn=ir.setIn,ys.deleteIn=ys.removeIn=ir.removeIn,ys.update=ir.update,ys.updateIn=ir.updateIn,ys.mergeIn=ir.mergeIn,ys.mergeDeepIn=ir.mergeDeepIn,ys.withMutations=ir.withMutations,ys.asMutable=ir.asMutable,ys.asImmutable=ir.asImmutable,ys.wasAltered=ir.wasAltered,Wa.prototype.removeBefore=function(Z,De,ct){if(ct===De?1<<De:0===this.array.length)return this;var It=ct>>>De&31;if(It>=this.array.length)return new Wa([],Z);var _n,Ht=0===It;if(De>0){var Pn=this.array[It];if((_n=Pn&&Pn.removeBefore(Z,De-5,ct))===Pn&&Ht)return this}if(Ht&&!_n)return this;var Tr=Oo(this,Z);if(!Ht)for(var ai=0;ai<It;ai++)Tr.array[ai]=void 0;return _n&&(Tr.array[It]=_n),Tr},Wa.prototype.removeAfter=function(Z,De,ct){if(ct===(De?1<<De:0)||0===this.array.length)return this;var Ht,It=ct-1>>>De&31;if(It>=this.array.length)return this;if(De>0){var _n=this.array[It];if((Ht=_n&&_n.removeAfter(Z,De-5,ct))===_n&&It===this.array.length-1)return this}var Pn=Oo(this,Z);return Pn.array.splice(It+1),Ht&&(Pn.array[It]=Ht),Pn};var $o,hn,Is={};function nl(Z,De){var ct=Z._origin,It=Z._capacity,Ht=pn(It),_n=Z._tail;return Pn(Z._root,Z._level,0);function Pn(Ei,Ci,Vi){return 0===Ci?function Tr(Ei,Ci){var Vi=Ci===Ht?_n&&_n.array:Ei&&Ei.array,Pr=Ci>ct?0:ct-Ci,Yn=It-Ci;return Yn>32&&(Yn=32),function(){if(Pr===Yn)return Is;var Rr=De?--Yn:Pr++;return Vi&&Vi[Rr]}}(Ei,Vi):function ai(Ei,Ci,Vi){var Pr,Yn=Ei&&Ei.array,Rr=Vi>ct?0:ct-Vi>>Ci,br=1+(It-Vi>>Ci);return br>32&&(br=32),function(){for(;;){if(Pr){var fo=Pr();if(fo!==Is)return fo;Pr=null}if(Rr===br)return Is;var $s=De?--br:Rr++;Pr=Pn(Yn&&Yn[$s],Ci-5,Vi+($s<<Ci))}}}(Ei,Ci,Vi)}}function js(Z,De,ct,It,Ht,_n,Pn){var Tr=Object.create(ys);return Tr.size=De-Z,Tr._origin=Z,Tr._capacity=De,Tr._level=ct,Tr._root=It,Tr._tail=Ht,Tr.__ownerID=_n,Tr.__hash=Pn,Tr.__altered=!1,Tr}function To(){return $o||($o=js(0,0,5))}function hs(Z,De,ct,It,Ht,_n){var ai,Pn=It>>>ct&31,Tr=Z&&Pn<Z.array.length;if(!Tr&&void 0===Ht)return Z;if(ct>0){var Ei=Z&&Z.array[Pn],Ci=hs(Ei,De,ct-5,It,Ht,_n);return Ci===Ei?Z:((ai=Oo(Z,De)).array[Pn]=Ci,ai)}return Tr&&Z.array[Pn]===Ht?Z:(fe(_n),ai=Oo(Z,De),void 0===Ht&&Pn===ai.array.length-1?ai.array.pop():ai.array[Pn]=Ht,ai)}function Oo(Z,De){return De&&Z&&De===Z.ownerID?Z:new Wa(Z?Z.array.slice():[],De)}function kr(Z,De){if(De>=pn(Z._capacity))return Z._tail;if(De<1<<Z._level+5){for(var ct=Z._root,It=Z._level;ct&&It>0;)ct=ct.array[De>>>It&31],It-=5;return ct}}function Ki(Z,De,ct){void 0!==De&&(De|=0),void 0!==ct&&(ct|=0);var It=Z.__ownerID||new he,Ht=Z._origin,_n=Z._capacity,Pn=Ht+De,Tr=void 0===ct?_n:ct<0?_n+ct:Ht+ct;if(Pn===Ht&&Tr===_n)return Z;if(Pn>=Tr)return Z.clear();for(var ai=Z._level,Ei=Z._root,Ci=0;Pn+Ci<0;)Ei=new Wa(Ei&&Ei.array.length?[void 0,Ei]:[],It),Ci+=1<<(ai+=5);Ci&&(Pn+=Ci,Ht+=Ci,Tr+=Ci,_n+=Ci);for(var Vi=pn(_n),Pr=pn(Tr);Pr>=1<<ai+5;)Ei=new Wa(Ei&&Ei.array.length?[Ei]:[],It),ai+=5;var Yn=Z._tail,Rr=Pr<Vi?kr(Z,Tr-1):Pr>Vi?new Wa([],It):Yn;if(Yn&&Pr>Vi&&Pn<_n&&Yn.array.length){for(var br=Ei=Oo(Ei,It),fo=ai;fo>5;fo-=5){var $s=Vi>>>fo&31;br=br.array[$s]=Oo(br.array[$s],It)}br.array[Vi>>>5&31]=Yn}if(Tr<_n&&(Rr=Rr&&Rr.removeAfter(It,0,Tr)),Pn>=Pr)Pn-=Pr,Tr-=Pr,ai=5,Ei=null,Rr=Rr&&Rr.removeBefore(It,0,Pn);else if(Pn>Ht||Pr<Vi){for(Ci=0;Ei;){var ls=Pn>>>ai&31;if(ls!==Pr>>>ai&31)break;ls&&(Ci+=(1<<ai)*ls),ai-=5,Ei=Ei.array[ls]}Ei&&Pn>Ht&&(Ei=Ei.removeBefore(It,ai,Pn-Ci)),Ei&&Pr<Vi&&(Ei=Ei.removeAfter(It,ai,Pr-Ci)),Ci&&(Pn-=Ci,Tr-=Ci)}return Z.__ownerID?(Z.size=Tr-Pn,Z._origin=Pn,Z._capacity=Tr,Z._level=ai,Z._root=Ei,Z._tail=Rr,Z.__hash=void 0,Z.__altered=!0,Z):js(Pn,Tr,ai,Ei,Rr)}function ut(Z,De,ct){for(var It=[],Ht=0,_n=0;_n<ct.length;_n++){var Pn=ct[_n],Tr=f(Pn);Tr.size>Ht&&(Ht=Tr.size),e(Pn)||(Tr=Tr.map(function(ai){return zn(ai)})),It.push(Tr)}return Ht>Z.size&&(Z=Z.setSize(Ht)),Ys(Z,De,It)}function pn(Z){return Z<32?0:Z-1>>>5<<5}function te(Z){return null==Z?ii():Ue(Z)?Z:ii().withMutations(function(De){var ct=a(Z);lo(ct.size),ct.forEach(function(It,Ht){return De.set(Ht,It)})})}function Ue(Z){return ko(Z)&&M(Z)}function jt(Z,De,ct,It){var Ht=Object.create(te.prototype);return Ht.size=Z?Z.size:0,Ht._map=Z,Ht._list=De,Ht.__ownerID=ct,Ht.__hash=It,Ht}function ii(){return hn||(hn=jt(or(),To()))}function Oi(Z,De,ct){var Tr,ai,It=Z._map,Ht=Z._list,_n=It.get(De),Pn=void 0!==_n;if(ct===H){if(!Pn)return Z;Ht.size>=32&&Ht.size>=2*It.size?(Tr=(ai=Ht.filter(function(Ei,Ci){return void 0!==Ei&&_n!==Ci})).toKeyedSeq().map(function(Ei){return Ei[0]}).flip().toMap(),Z.__ownerID&&(Tr.__ownerID=ai.__ownerID=Z.__ownerID)):(Tr=It.remove(De),ai=_n===Ht.size-1?Ht.pop():Ht.set(_n,void 0))}else if(Pn){if(ct===Ht.get(_n)[1])return Z;Tr=It,ai=Ht.set(_n,[De,ct])}else Tr=It.set(De,Ht.size),ai=Ht.set(Ht.size,[De,ct]);return Z.__ownerID?(Z.size=Tr.size,Z._map=Tr,Z._list=ai,Z.__hash=void 0,Z):jt(Tr,ai)}function ki(Z,De){this._iter=Z,this._useKeys=De,this.size=Z.size}function _s(Z){this._iter=Z,this.size=Z.size}function Vo(Z){this._iter=Z,this.size=Z.size}function Fs(Z){this._iter=Z,this.size=Z.size}function Ks(Z){var De=Kn(Z);return De._iter=Z,De.size=Z.size,De.flip=function(){return Z},De.reverse=function(){var ct=Z.reverse.apply(this);return ct.flip=function(){return Z.reverse()},ct},De.has=function(ct){return Z.includes(ct)},De.includes=function(ct){return Z.has(ct)},De.cacheResult=oi,De.__iterateUncached=function(ct,It){var Ht=this;return Z.__iterate(function(_n,Pn){return!1!==ct(Pn,_n,Ht)},It)},De.__iteratorUncached=function(ct,It){if(2===ct){var Ht=Z.__iterator(ct,It);return new dn(function(){var _n=Ht.next();if(!_n.done){var Pn=_n.value[0];_n.value[0]=_n.value[1],_n.value[1]=Pn}return _n})}return Z.__iterator(1===ct?0:1,It)},De}function hl(Z,De,ct){var It=Kn(Z);return It.size=Z.size,It.has=function(Ht){return Z.has(Ht)},It.get=function(Ht,_n){var Pn=Z.get(Ht,H);return Pn===H?_n:De.call(ct,Pn,Ht,Z)},It.__iterateUncached=function(Ht,_n){var Pn=this;return Z.__iterate(function(Tr,ai,Ei){return!1!==Ht(De.call(ct,Tr,ai,Ei),ai,Pn)},_n)},It.__iteratorUncached=function(Ht,_n){var Pn=Z.__iterator(2,_n);return new dn(function(){var Tr=Pn.next();if(Tr.done)return Tr;var ai=Tr.value,Ei=ai[0];return rn(Ht,Ei,De.call(ct,ai[1],Ei,Z),Tr)})},It}function sl(Z,De){var ct=Kn(Z);return ct._iter=Z,ct.size=Z.size,ct.reverse=function(){return Z},Z.flip&&(ct.flip=function(){var It=Ks(Z);return It.reverse=function(){return Z.flip()},It}),ct.get=function(It,Ht){return Z.get(De?It:-1-It,Ht)},ct.has=function(It){return Z.has(De?It:-1-It)},ct.includes=function(It){return Z.includes(It)},ct.cacheResult=oi,ct.__iterate=function(It,Ht){var _n=this;return Z.__iterate(function(Pn,Tr){return It(Pn,Tr,_n)},!Ht)},ct.__iterator=function(It,Ht){return Z.__iterator(It,!Ht)},ct}function Jl(Z,De,ct,It){var Ht=Kn(Z);return It&&(Ht.has=function(_n){var Pn=Z.get(_n,H);return Pn!==H&&!!De.call(ct,Pn,_n,Z)},Ht.get=function(_n,Pn){var Tr=Z.get(_n,H);return Tr!==H&&De.call(ct,Tr,_n,Z)?Tr:Pn}),Ht.__iterateUncached=function(_n,Pn){var Tr=this,ai=0;return Z.__iterate(function(Ei,Ci,Vi){if(De.call(ct,Ei,Ci,Vi))return ai++,_n(Ei,It?Ci:ai-1,Tr)},Pn),ai},Ht.__iteratorUncached=function(_n,Pn){var Tr=Z.__iterator(2,Pn),ai=0;return new dn(function(){for(;;){var Ei=Tr.next();if(Ei.done)return Ei;var Ci=Ei.value,Vi=Ci[0],Pr=Ci[1];if(De.call(ct,Pr,Vi,Z))return rn(_n,It?Vi:ai++,Pr,Ei)}})},Ht}function Cl(Z,De,ct,It){var Ht=Z.size;if(void 0!==De&&(De|=0),void 0!==ct&&(ct===1/0?ct=Ht:ct|=0),Xe(De,ct,Ht))return Z;var _n=He(De,Ht),Pn=Pe(ct,Ht);if(_n!=_n||Pn!=Pn)return Cl(Z.toSeq().cacheResult(),De,ct,It);var ai,Tr=Pn-_n;Tr==Tr&&(ai=Tr<0?0:Tr);var Ei=Kn(Z);return Ei.size=0===ai?ai:Z.size&&ai||void 0,!It&&bi(Z)&&ai>=0&&(Ei.get=function(Ci,Vi){return(Ci=Be(this,Ci))>=0&&Ci<ai?Z.get(Ci+_n,Vi):Vi}),Ei.__iterateUncached=function(Ci,Vi){var Pr=this;if(0===ai)return 0;if(Vi)return this.cacheResult().__iterate(Ci,Vi);var Yn=0,Rr=!0,br=0;return Z.__iterate(function(fo,$s){if(!Rr||!(Rr=Yn++<_n))return br++,!1!==Ci(fo,It?$s:br-1,Pr)&&br!==ai}),br},Ei.__iteratorUncached=function(Ci,Vi){if(0!==ai&&Vi)return this.cacheResult().__iterator(Ci,Vi);var Pr=0!==ai&&Z.__iterator(Ci,Vi),Yn=0,Rr=0;return new dn(function(){for(;Yn++<_n;)Pr.next();if(++Rr>ai)return{value:void 0,done:!0};var br=Pr.next();return It||1===Ci?br:rn(Ci,Rr-1,0===Ci?void 0:br.value[1],br)})},Ei}function Fl(Z,De,ct,It){var Ht=Kn(Z);return Ht.__iterateUncached=function(_n,Pn){var Tr=this;if(Pn)return this.cacheResult().__iterate(_n,Pn);var ai=!0,Ei=0;return Z.__iterate(function(Ci,Vi,Pr){if(!ai||!(ai=De.call(ct,Ci,Vi,Pr)))return Ei++,_n(Ci,It?Vi:Ei-1,Tr)}),Ei},Ht.__iteratorUncached=function(_n,Pn){var Tr=this;if(Pn)return this.cacheResult().__iterator(_n,Pn);var ai=Z.__iterator(2,Pn),Ei=!0,Ci=0;return new dn(function(){var Vi,Pr,Yn;do{if((Vi=ai.next()).done)return It||1===_n?Vi:rn(_n,Ci++,0===_n?void 0:Vi.value[1],Vi);var Rr=Vi.value;Pr=Rr[0],Yn=Rr[1],Ei&&(Ei=De.call(ct,Yn,Pr,Tr))}while(Ei);return 2===_n?Vi:rn(_n,Pr,Yn,Vi)})},Ht}function Xu(Z,De){var ct=p(Z),It=[Z].concat(De).map(function(Pn){return e(Pn)?ct&&(Pn=a(Pn)):Pn=ct?xo(Pn):Er(Array.isArray(Pn)?Pn:[Pn]),Pn}).filter(function(Pn){return 0!==Pn.size});if(0===It.length)return Z;if(1===It.length){var Ht=It[0];if(Ht===Z||ct&&p(Ht)||g(Z)&&g(Ht))return Ht}var _n=new Hn(It);return ct?_n=_n.toKeyedSeq():g(Z)||(_n=_n.toSetSeq()),(_n=_n.flatten(!0)).size=It.reduce(function(Pn,Tr){if(void 0!==Pn){var ai=Tr.size;if(void 0!==ai)return Pn+ai}},0),_n}function Xa(Z,De,ct){var It=Kn(Z);return It.__iterateUncached=function(Ht,_n){var Pn=0,Tr=!1;return function ai(Ei,Ci){var Vi=this;Ei.__iterate(function(Pr,Yn){return(!De||Ci<De)&&e(Pr)?ai(Pr,Ci+1):!1===Ht(Pr,ct?Yn:Pn++,Vi)&&(Tr=!0),!Tr},_n)}(Z,0),Pn},It.__iteratorUncached=function(Ht,_n){var Pn=Z.__iterator(Ht,_n),Tr=[],ai=0;return new dn(function(){for(;Pn;){var Ei=Pn.next();if(!1===Ei.done){var Ci=Ei.value;if(2===Ht&&(Ci=Ci[1]),De&&!(Tr.length<De)||!e(Ci))return ct?Ei:rn(Ht,ai++,Ci,Ei);Tr.push(Pn),Pn=Ci.__iterator(Ht,_n)}else Pn=Tr.pop()}return{value:void 0,done:!0}})},It}function Ja(Z,De,ct){De||(De=wi);var It=p(Z),Ht=0,_n=Z.toSeq().map(function(Pn,Tr){return[Tr,Pn,Ht++,ct?ct(Pn,Tr,Z):Pn]}).toArray();return _n.sort(function(Pn,Tr){return De(Pn[3],Tr[3])||Pn[2]-Tr[2]}).forEach(It?function(Pn,Tr){_n[Tr].length=2}:function(Pn,Tr){_n[Tr]=Pn[1]}),It?ci(_n):g(Z)?hr(_n):Br(_n)}function Ol(Z,De,ct){if(De||(De=wi),ct){var It=Z.toSeq().map(function(Ht,_n){return[Ht,ct(Ht,_n,Z)]}).reduce(function(Ht,_n){return Bl(De,Ht[1],_n[1])?_n:Ht});return It&&It[0]}return Z.reduce(function(Ht,_n){return Bl(De,Ht,_n)?_n:Ht})}function Bl(Z,De,ct){var It=Z(ct,De);return 0===It&&ct!==De&&(null==ct||ct!=ct)||It>0}function Ya(Z,De,ct){var It=Kn(Z);return It.size=new Hn(ct).map(function(Ht){return Ht.size}).min(),It.__iterate=function(Ht,_n){for(var Tr,Pn=this.__iterator(1,_n),ai=0;!(Tr=Pn.next()).done&&!1!==Ht(Tr.value,ai++,this););return ai},It.__iteratorUncached=function(Ht,_n){var Pn=ct.map(function(Ei){return Ei=r(Ei),Gt(_n?Ei.reverse():Ei)}),Tr=0,ai=!1;return new dn(function(){var Ei;return ai||(Ei=Pn.map(function(Ci){return Ci.next()}),ai=Ei.some(function(Ci){return Ci.done})),ai?{value:void 0,done:!0}:rn(Ht,Tr++,De.apply(null,Ei.map(function(Ci){return Ci.value})))})},It}function rt(Z,De){return bi(Z)?De:Z.constructor(De)}function qt(Z){if(Z!==Object(Z))throw new TypeError("Expected [K, V] tuple: "+Z)}function pt(Z){return lo(Z.size),ce(Z)}function Kt(Z){return p(Z)?a:g(Z)?f:u}function Kn(Z){return Object.create((p(Z)?ci:g(Z)?hr:Br).prototype)}function oi(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):mi.prototype.cacheResult.call(this)}function wi(Z,De){return Z>De?1:Z<De?-1:0}function as(Z){var De=Gt(Z);if(!De){if(!pr(Z))throw new TypeError("Expected iterable or array-like: "+Z);De=Gt(r(Z))}return De}function Gs(Z,De){var ct,It=function(Pn){if(Pn instanceof It)return Pn;if(!(this instanceof It))return new It(Pn);if(!ct){ct=!0;var Tr=Object.keys(Z);(function Ka(Z,De){try{De.forEach(al.bind(void 0,Z))}catch(ct){}})(Ht,Tr),Ht.size=Tr.length,Ht._name=De,Ht._keys=Tr,Ht._defaultValues=Z}this._map=Ri(Pn)},Ht=It.prototype=Object.create(Os);return Ht.constructor=It,It}i(te,Ri),te.of=function(){return this(arguments)},te.prototype.toString=function(){return this.__toString("OrderedMap {","}")},te.prototype.get=function(Z,De){var ct=this._map.get(Z);return void 0!==ct?this._list.get(ct)[1]:De},te.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):ii()},te.prototype.set=function(Z,De){return Oi(this,Z,De)},te.prototype.remove=function(Z){return Oi(this,Z,H)},te.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},te.prototype.__iterate=function(Z,De){var ct=this;return this._list.__iterate(function(It){return It&&Z(It[1],It[0],ct)},De)},te.prototype.__iterator=function(Z,De){return this._list.fromEntrySeq().__iterator(Z,De)},te.prototype.__ensureOwner=function(Z){if(Z===this.__ownerID)return this;var De=this._map.__ensureOwner(Z),ct=this._list.__ensureOwner(Z);return Z?jt(De,ct,Z,this.__hash):(this.__ownerID=Z,this._map=De,this._list=ct,this)},te.isOrderedMap=Ue,te.prototype[W]=!0,te.prototype[j]=te.prototype.remove,i(ki,ci),ki.prototype.get=function(Z,De){return this._iter.get(Z,De)},ki.prototype.has=function(Z){return this._iter.has(Z)},ki.prototype.valueSeq=function(){return this._iter.valueSeq()},ki.prototype.reverse=function(){var Z=this,De=sl(this,!0);return this._useKeys||(De.valueSeq=function(){return Z._iter.toSeq().reverse()}),De},ki.prototype.map=function(Z,De){var ct=this,It=hl(this,Z,De);return this._useKeys||(It.valueSeq=function(){return ct._iter.toSeq().map(Z,De)}),It},ki.prototype.__iterate=function(Z,De){var It,ct=this;return this._iter.__iterate(this._useKeys?function(Ht,_n){return Z(Ht,_n,ct)}:(It=De?pt(this):0,function(Ht){return Z(Ht,De?--It:It++,ct)}),De)},ki.prototype.__iterator=function(Z,De){if(this._useKeys)return this._iter.__iterator(Z,De);var ct=this._iter.__iterator(1,De),It=De?pt(this):0;return new dn(function(){var Ht=ct.next();return Ht.done?Ht:rn(Z,De?--It:It++,Ht.value,Ht)})},ki.prototype[W]=!0,i(_s,hr),_s.prototype.includes=function(Z){return this._iter.includes(Z)},_s.prototype.__iterate=function(Z,De){var ct=this,It=0;return this._iter.__iterate(function(Ht){return Z(Ht,It++,ct)},De)},_s.prototype.__iterator=function(Z,De){var ct=this._iter.__iterator(1,De),It=0;return new dn(function(){var Ht=ct.next();return Ht.done?Ht:rn(Z,It++,Ht.value,Ht)})},i(Vo,Br),Vo.prototype.has=function(Z){return this._iter.includes(Z)},Vo.prototype.__iterate=function(Z,De){var ct=this;return this._iter.__iterate(function(It){return Z(It,It,ct)},De)},Vo.prototype.__iterator=function(Z,De){var ct=this._iter.__iterator(1,De);return new dn(function(){var It=ct.next();return It.done?It:rn(Z,It.value,It.value,It)})},i(Fs,ci),Fs.prototype.entrySeq=function(){return this._iter.toSeq()},Fs.prototype.__iterate=function(Z,De){var ct=this;return this._iter.__iterate(function(It){if(It){qt(It);var Ht=e(It);return Z(Ht?It.get(1):It[1],Ht?It.get(0):It[0],ct)}},De)},Fs.prototype.__iterator=function(Z,De){var ct=this._iter.__iterator(1,De);return new dn(function(){for(;;){var It=ct.next();if(It.done)return It;var Ht=It.value;if(Ht){qt(Ht);var _n=e(Ht);return rn(Z,_n?Ht.get(0):Ht[0],_n?Ht.get(1):Ht[1],It)}}})},_s.prototype.cacheResult=ki.prototype.cacheResult=Vo.prototype.cacheResult=Fs.prototype.cacheResult=oi,i(Gs,Se),Gs.prototype.toString=function(){return this.__toString(Fo(this)+" {","}")},Gs.prototype.has=function(Z){return this._defaultValues.hasOwnProperty(Z)},Gs.prototype.get=function(Z,De){if(!this.has(Z))return De;var ct=this._defaultValues[Z];return this._map?this._map.get(Z,ct):ct},Gs.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var Z=this.constructor;return Z._empty||(Z._empty=ws(this,or()))},Gs.prototype.set=function(Z,De){if(!this.has(Z))throw new Error('Cannot set unknown key "'+Z+'" on '+Fo(this));if(this._map&&!this._map.has(Z)&&De===this._defaultValues[Z])return this;var It=this._map&&this._map.set(Z,De);return this.__ownerID||It===this._map?this:ws(this,It)},Gs.prototype.remove=function(Z){if(!this.has(Z))return this;var De=this._map&&this._map.remove(Z);return this.__ownerID||De===this._map?this:ws(this,De)},Gs.prototype.wasAltered=function(){return this._map.wasAltered()},Gs.prototype.__iterator=function(Z,De){var ct=this;return a(this._defaultValues).map(function(It,Ht){return ct.get(Ht)}).__iterator(Z,De)},Gs.prototype.__iterate=function(Z,De){var ct=this;return a(this._defaultValues).map(function(It,Ht){return ct.get(Ht)}).__iterate(Z,De)},Gs.prototype.__ensureOwner=function(Z){if(Z===this.__ownerID)return this;var De=this._map&&this._map.__ensureOwner(Z);return Z?ws(this,De,Z):(this.__ownerID=Z,this._map=De,this)};var Os=Gs.prototype;function ws(Z,De,ct){var It=Object.create(Object.getPrototypeOf(Z));return It._map=De,It.__ownerID=ct,It}function Fo(Z){return Z._name||Z.constructor.name||"Record"}function al(Z,De){Object.defineProperty(Z,De,{get:function(){return this.get(De)},set:function(ct){Wn(this.__ownerID,"Cannot set on an immutable record."),this.set(De,ct)}})}function Bs(Z){return null==Z?ja():mt(Z)&&!M(Z)?Z:ja().withMutations(function(De){var ct=u(Z);lo(ct.size),ct.forEach(function(It){return De.add(It)})})}function mt(Z){return!(!Z||!Z[ot])}Os[j]=Os.remove,Os.deleteIn=Os.removeIn=ir.removeIn,Os.merge=ir.merge,Os.mergeWith=ir.mergeWith,Os.mergeIn=ir.mergeIn,Os.mergeDeep=ir.mergeDeep,Os.mergeDeepWith=ir.mergeDeepWith,Os.mergeDeepIn=ir.mergeDeepIn,Os.setIn=ir.setIn,Os.update=ir.update,Os.updateIn=ir.updateIn,Os.withMutations=ir.withMutations,Os.asMutable=ir.asMutable,Os.asImmutable=ir.asImmutable,i(Bs,st),Bs.of=function(){return this(arguments)},Bs.fromKeys=function(Z){return this(a(Z).keySeq())},Bs.prototype.toString=function(){return this.__toString("Set {","}")},Bs.prototype.has=function(Z){return this._map.has(Z)},Bs.prototype.add=function(Z){return Xt(this,this._map.set(Z,!0))},Bs.prototype.remove=function(Z){return Xt(this,this._map.remove(Z))},Bs.prototype.clear=function(){return Xt(this,this._map.clear())},Bs.prototype.union=function(){var Z=b.call(arguments,0);return 0===(Z=Z.filter(function(De){return 0!==De.size})).length?this:0!==this.size||this.__ownerID||1!==Z.length?this.withMutations(function(De){for(var ct=0;ct<Z.length;ct++)u(Z[ct]).forEach(function(It){return De.add(It)})}):this.constructor(Z[0])},Bs.prototype.intersect=function(){var Z=b.call(arguments,0);if(0===Z.length)return this;Z=Z.map(function(ct){return u(ct)});var De=this;return this.withMutations(function(ct){De.forEach(function(It){Z.every(function(Ht){return Ht.includes(It)})||ct.remove(It)})})},Bs.prototype.subtract=function(){var Z=b.call(arguments,0);if(0===Z.length)return this;Z=Z.map(function(ct){return u(ct)});var De=this;return this.withMutations(function(ct){De.forEach(function(It){Z.some(function(Ht){return Ht.includes(It)})&&ct.remove(It)})})},Bs.prototype.merge=function(){return this.union.apply(this,arguments)},Bs.prototype.mergeWith=function(Z){var De=b.call(arguments,1);return this.union.apply(this,De)},Bs.prototype.sort=function(Z){return El(Ja(this,Z))},Bs.prototype.sortBy=function(Z,De){return El(Ja(this,De,Z))},Bs.prototype.wasAltered=function(){return this._map.wasAltered()},Bs.prototype.__iterate=function(Z,De){var ct=this;return this._map.__iterate(function(It,Ht){return Z(Ht,Ht,ct)},De)},Bs.prototype.__iterator=function(Z,De){return this._map.map(function(ct,It){return It}).__iterator(Z,De)},Bs.prototype.__ensureOwner=function(Z){if(Z===this.__ownerID)return this;var De=this._map.__ensureOwner(Z);return Z?this.__make(De,Z):(this.__ownerID=Z,this._map=De,this)},Bs.isSet=mt;var Jo,ot="@@__IMMUTABLE_SET__@@",je=Bs.prototype;function Xt(Z,De){return Z.__ownerID?(Z.size=De.size,Z._map=De,Z):De===Z._map?Z:0===De.size?Z.__empty():Z.__make(De)}function Si(Z,De){var ct=Object.create(je);return ct.size=Z?Z.size:0,ct._map=Z,ct.__ownerID=De,ct}function ja(){return Jo||(Jo=Si(or()))}function El(Z){return null==Z?aa():Ku(Z)?Z:aa().withMutations(function(De){var ct=u(Z);lo(ct.size),ct.forEach(function(It){return De.add(It)})})}function Ku(Z){return mt(Z)&&M(Z)}je[ot]=!0,je[j]=je.remove,je.mergeDeep=je.merge,je.mergeDeepWith=je.mergeWith,je.withMutations=ir.withMutations,je.asMutable=ir.asMutable,je.asImmutable=ir.asImmutable,je.__empty=ja,je.__make=Si,i(El,Bs),El.of=function(){return this(arguments)},El.fromKeys=function(Z){return this(a(Z).keySeq())},El.prototype.toString=function(){return this.__toString("OrderedSet {","}")},El.isOrderedSet=Ku;var Yi,Nc=El.prototype;function hd(Z,De){var ct=Object.create(Nc);return ct.size=Z?Z.size:0,ct._map=Z,ct.__ownerID=De,ct}function aa(){return Yi||(Yi=hd(ii()))}function Fa(Z){return null==Z?iu():Es(Z)?Z:iu().unshiftAll(Z)}function Es(Z){return!(!Z||!Z[qu])}Nc[W]=!0,Nc.__empty=aa,Nc.__make=hd,i(Fa,dt),Fa.of=function(){return this(arguments)},Fa.prototype.toString=function(){return this.__toString("Stack [","]")},Fa.prototype.get=function(Z,De){var ct=this._head;for(Z=Be(this,Z);ct&&Z--;)ct=ct.next;return ct?ct.value:De},Fa.prototype.peek=function(){return this._head&&this._head.value},Fa.prototype.push=function(){if(0===arguments.length)return this;for(var Z=this.size+arguments.length,De=this._head,ct=arguments.length-1;ct>=0;ct--)De={value:arguments[ct],next:De};return this.__ownerID?(this.size=Z,this._head=De,this.__hash=void 0,this.__altered=!0,this):lu(Z,De)},Fa.prototype.pushAll=function(Z){if(0===(Z=f(Z)).size)return this;lo(Z.size);var De=this.size,ct=this._head;return Z.reverse().forEach(function(It){De++,ct={value:It,next:ct}}),this.__ownerID?(this.size=De,this._head=ct,this.__hash=void 0,this.__altered=!0,this):lu(De,ct)},Fa.prototype.pop=function(){return this.slice(1)},Fa.prototype.unshift=function(){return this.push.apply(this,arguments)},Fa.prototype.unshiftAll=function(Z){return this.pushAll(Z)},Fa.prototype.shift=function(){return this.pop.apply(this,arguments)},Fa.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):iu()},Fa.prototype.slice=function(Z,De){if(Xe(Z,De,this.size))return this;var ct=He(Z,this.size);if(Pe(De,this.size)!==this.size)return dt.prototype.slice.call(this,Z,De);for(var Ht=this.size-ct,_n=this._head;ct--;)_n=_n.next;return this.__ownerID?(this.size=Ht,this._head=_n,this.__hash=void 0,this.__altered=!0,this):lu(Ht,_n)},Fa.prototype.__ensureOwner=function(Z){return Z===this.__ownerID?this:Z?lu(this.size,this._head,Z,this.__hash):(this.__ownerID=Z,this.__altered=!1,this)},Fa.prototype.__iterate=function(Z,De){if(De)return this.reverse().__iterate(Z);for(var ct=0,It=this._head;It&&!1!==Z(It.value,ct++,this);)It=It.next;return ct},Fa.prototype.__iterator=function(Z,De){if(De)return this.reverse().__iterator(Z);var ct=0,It=this._head;return new dn(function(){if(It){var Ht=It.value;return It=It.next,rn(Z,ct++,Ht)}return{value:void 0,done:!0}})},Fa.isStack=Es;var Eu,qu="@@__IMMUTABLE_STACK__@@",Sl=Fa.prototype;function lu(Z,De,ct,It){var Ht=Object.create(Sl);return Ht.size=Z,Ht._head=De,Ht.__ownerID=ct,Ht.__hash=It,Ht.__altered=!1,Ht}function iu(){return Eu||(Eu=lu(0))}function ra(Z,De){var ct=function(It){Z.prototype[It]=De[It]};return Object.keys(De).forEach(ct),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(De).forEach(ct),Z}Sl[qu]=!0,Sl.withMutations=ir.withMutations,Sl.asMutable=ir.asMutable,Sl.asImmutable=ir.asImmutable,Sl.wasAltered=ir.wasAltered,r.Iterator=dn,ra(r,{toArray:function(){lo(this.size);var Z=new Array(this.size||0);return this.valueSeq().__iterate(function(De,ct){Z[ct]=De}),Z},toIndexedSeq:function(){return new _s(this)},toJS:function(){return this.toSeq().map(function(Z){return Z&&"function"==typeof Z.toJS?Z.toJS():Z}).__toJS()},toJSON:function(){return this.toSeq().map(function(Z){return Z&&"function"==typeof Z.toJSON?Z.toJSON():Z}).__toJS()},toKeyedSeq:function(){return new ki(this,!0)},toMap:function(){return Ri(this.toKeyedSeq())},toObject:function(){lo(this.size);var Z={};return this.__iterate(function(De,ct){Z[ct]=De}),Z},toOrderedMap:function(){return te(this.toKeyedSeq())},toOrderedSet:function(){return El(p(this)?this.valueSeq():this)},toSet:function(){return Bs(p(this)?this.valueSeq():this)},toSetSeq:function(){return new Vo(this)},toSeq:function(){return g(this)?this.toIndexedSeq():p(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Fa(p(this)?this.valueSeq():this)},toList:function(){return Co(p(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(Z,De){return 0===this.size?Z+De:Z+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+De},concat:function(){return rt(this,Xu(this,b.call(arguments,0)))},includes:function(Z){return this.some(function(De){return vr(De,Z)})},entries:function(){return this.__iterator(2)},every:function(Z,De){lo(this.size);var ct=!0;return this.__iterate(function(It,Ht,_n){if(!Z.call(De,It,Ht,_n))return ct=!1,!1}),ct},filter:function(Z,De){return rt(this,Jl(this,Z,De,!0))},find:function(Z,De,ct){var It=this.findEntry(Z,De);return It?It[1]:ct},forEach:function(Z,De){return lo(this.size),this.__iterate(De?Z.bind(De):Z)},join:function(Z){lo(this.size),Z=void 0!==Z?""+Z:",";var De="",ct=!0;return this.__iterate(function(It){ct?ct=!1:De+=Z,De+=null!=It?It.toString():""}),De},keys:function(){return this.__iterator(0)},map:function(Z,De){return rt(this,hl(this,Z,De))},reduce:function(Z,De,ct){var It,Ht;return lo(this.size),arguments.length<2?Ht=!0:It=De,this.__iterate(function(_n,Pn,Tr){Ht?(Ht=!1,It=_n):It=Z.call(ct,It,_n,Pn,Tr)}),It},reduceRight:function(Z,De,ct){var It=this.toKeyedSeq().reverse();return It.reduce.apply(It,arguments)},reverse:function(){return rt(this,sl(this,!0))},slice:function(Z,De){return rt(this,Cl(this,Z,De,!0))},some:function(Z,De){return!this.every(du(Z),De)},sort:function(Z){return rt(this,Ja(this,Z))},values:function(){return this.__iterator(1)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(Z,De){return ce(Z?this.toSeq().filter(Z,De):this)},countBy:function(Z,De){return function Qu(Z,De,ct){var It=Ri().asMutable();return Z.__iterate(function(Ht,_n){It.update(De.call(ct,Ht,_n,Z),0,function(Pn){return Pn+1})}),It.asImmutable()}(this,Z,De)},equals:function(Z){return Ji(this,Z)},entrySeq:function(){var Z=this;if(Z._cache)return new Hn(Z._cache);var De=Z.toSeq().map(uu).toIndexedSeq();return De.fromEntrySeq=function(){return Z.toSeq()},De},filterNot:function(Z,De){return this.filter(du(Z),De)},findEntry:function(Z,De,ct){var It=ct;return this.__iterate(function(Ht,_n,Pn){if(Z.call(De,Ht,_n,Pn))return It=[_n,Ht],!1}),It},findKey:function(Z,De){var ct=this.findEntry(Z,De);return ct&&ct[0]},findLast:function(Z,De,ct){return this.toKeyedSeq().reverse().find(Z,De,ct)},findLastEntry:function(Z,De,ct){return this.toKeyedSeq().reverse().findEntry(Z,De,ct)},findLastKey:function(Z,De){return this.toKeyedSeq().reverse().findKey(Z,De)},first:function(){return this.find(Ve)},flatMap:function(Z,De){return rt(this,function Mc(Z,De,ct){var It=Kt(Z);return Z.toSeq().map(function(Ht,_n){return It(De.call(ct,Ht,_n,Z))}).flatten(!0)}(this,Z,De))},flatten:function(Z){return rt(this,Xa(this,Z,!0))},fromEntrySeq:function(){return new Fs(this)},get:function(Z,De){return this.find(function(ct,It){return vr(It,Z)},void 0,De)},getIn:function(Z,De){for(var Ht,ct=this,It=as(Z);!(Ht=It.next()).done;)if((ct=ct&&ct.get?ct.get(Ht.value,H):H)===H)return De;return ct},groupBy:function(Z,De){return function _c(Z,De,ct){var It=p(Z),Ht=(M(Z)?te():Ri()).asMutable();Z.__iterate(function(Pn,Tr){Ht.update(De.call(ct,Pn,Tr,Z),function(ai){return(ai=ai||[]).push(It?[Tr,Pn]:Pn),ai})});var _n=Kt(Z);return Ht.map(function(Pn){return rt(Z,_n(Pn))})}(this,Z,De)},has:function(Z){return this.get(Z,H)!==H},hasIn:function(Z){return this.getIn(Z,H)!==H},isSubset:function(Z){return Z="function"==typeof Z.includes?Z:r(Z),this.every(function(De){return Z.includes(De)})},isSuperset:function(Z){return(Z="function"==typeof Z.isSubset?Z:r(Z)).isSubset(this)},keyOf:function(Z){return this.findKey(function(De){return vr(De,Z)})},keySeq:function(){return this.toSeq().map(ec).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(Z){return this.toKeyedSeq().reverse().keyOf(Z)},max:function(Z){return Ol(this,Z)},maxBy:function(Z,De){return Ol(this,De,Z)},min:function(Z){return Ol(this,Z?nd(Z):wu)},minBy:function(Z,De){return Ol(this,De?nd(De):wu,Z)},rest:function(){return this.slice(1)},skip:function(Z){return this.slice(Math.max(0,Z))},skipLast:function(Z){return rt(this,this.toSeq().reverse().skip(Z).reverse())},skipWhile:function(Z,De){return rt(this,Fl(this,Z,De,!0))},skipUntil:function(Z,De){return this.skipWhile(du(Z),De)},sortBy:function(Z,De){return rt(this,Ja(this,De,Z))},take:function(Z){return this.slice(0,Math.max(0,Z))},takeLast:function(Z){return rt(this,this.toSeq().reverse().take(Z).reverse())},takeWhile:function(Z,De){return rt(this,function mc(Z,De,ct){var It=Kn(Z);return It.__iterateUncached=function(Ht,_n){var Pn=this;if(_n)return this.cacheResult().__iterate(Ht,_n);var Tr=0;return Z.__iterate(function(ai,Ei,Ci){return De.call(ct,ai,Ei,Ci)&&++Tr&&Ht(ai,Ei,Pn)}),Tr},It.__iteratorUncached=function(Ht,_n){var Pn=this;if(_n)return this.cacheResult().__iterator(Ht,_n);var Tr=Z.__iterator(2,_n),ai=!0;return new dn(function(){if(!ai)return{value:void 0,done:!0};var Ei=Tr.next();if(Ei.done)return Ei;var Ci=Ei.value,Vi=Ci[0],Pr=Ci[1];return De.call(ct,Pr,Vi,Pn)?2===Ht?Ei:rn(Ht,Vi,Pr,Ei):(ai=!1,{value:void 0,done:!0})})},It}(this,Z,De))},takeUntil:function(Z,De){return this.takeWhile(du(Z),De)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=function Ld(Z){if(Z.size===1/0)return 0;var De=M(Z),ct=p(Z),It=De?1:0;return function Io(Z,De){return De=nn(De,3432918353),De=nn(De<<15|De>>>-15,461845907),De=nn(De<<13|De>>>-13,5),De=nn((De=(De+3864292196|0)^Z)^De>>>16,2246822507),Fe((De=nn(De^De>>>13,3266489909))^De>>>16)}(Z.__iterate(ct?De?function(_n,Pn){It=31*It+fu(Lr(_n),Lr(Pn))|0}:function(_n,Pn){It=It+fu(Lr(_n),Lr(Pn))|0}:De?function(_n){It=31*It+Lr(_n)|0}:function(_n){It=It+Lr(_n)|0}),It)}(this))}});var bu=r.prototype;bu[w]=!0,bu[Yt]=bu.values,bu.__toJS=bu.toArray,bu.__toStringMapper=Uu,bu.inspect=bu.toSource=function(){return this.toString()},bu.chain=bu.flatMap,bu.contains=bu.includes,ra(a,{flip:function(){return rt(this,Ks(this))},mapEntries:function(Z,De){var ct=this,It=0;return rt(this,this.toSeq().map(function(Ht,_n){return Z.call(De,[_n,Ht],It++,ct)}).fromEntrySeq())},mapKeys:function(Z,De){var ct=this;return rt(this,this.toSeq().flip().map(function(It,Ht){return Z.call(De,It,Ht,ct)}).flip())}});var td=a.prototype;function ec(Z,De){return De}function uu(Z,De){return[De,Z]}function du(Z){return function(){return!Z.apply(this,arguments)}}function nd(Z){return function(){return-Z.apply(this,arguments)}}function Uu(Z){return"string"==typeof Z?JSON.stringify(Z):String(Z)}function Yu(){return Ce(arguments)}function wu(Z,De){return Z<De?1:Z>De?-1:0}function fu(Z,De){return Z^De+2654435769+(Z<<6)+(Z>>2)|0}return td[x]=!0,td[Yt]=bu.entries,td.__toJS=bu.toObject,td.__toStringMapper=function(Z,De){return JSON.stringify(De)+": "+Uu(Z)},ra(f,{toKeyedSeq:function(){return new ki(this,!1)},filter:function(Z,De){return rt(this,Jl(this,Z,De,!1))},findIndex:function(Z,De){var ct=this.findEntry(Z,De);return ct?ct[0]:-1},indexOf:function(Z){var De=this.keyOf(Z);return void 0===De?-1:De},lastIndexOf:function(Z){var De=this.lastKeyOf(Z);return void 0===De?-1:De},reverse:function(){return rt(this,sl(this,!1))},slice:function(Z,De){return rt(this,Cl(this,Z,De,!1))},splice:function(Z,De){var ct=arguments.length;if(De=Math.max(0|De,0),0===ct||2===ct&&!De)return this;Z=He(Z,Z<0?this.count():this.size);var It=this.slice(0,Z);return rt(this,1===ct?It:It.concat(Ce(arguments,2),this.slice(Z+De)))},findLastIndex:function(Z,De){var ct=this.findLastEntry(Z,De);return ct?ct[0]:-1},first:function(){return this.get(0)},flatten:function(Z){return rt(this,Xa(this,Z,!1))},get:function(Z,De){return(Z=Be(this,Z))<0||this.size===1/0||void 0!==this.size&&Z>this.size?De:this.find(function(ct,It){return It===Z},void 0,De)},has:function(Z){return(Z=Be(this,Z))>=0&&(void 0!==this.size?this.size===1/0||Z<this.size:-1!==this.indexOf(Z))},interpose:function(Z){return rt(this,function ru(Z,De){var ct=Kn(Z);return ct.size=Z.size&&2*Z.size-1,ct.__iterateUncached=function(It,Ht){var _n=this,Pn=0;return Z.__iterate(function(Tr,ai){return(!Pn||!1!==It(De,Pn++,_n))&&!1!==It(Tr,Pn++,_n)},Ht),Pn},ct.__iteratorUncached=function(It,Ht){var Tr,_n=Z.__iterator(1,Ht),Pn=0;return new dn(function(){return(!Tr||Pn%2)&&(Tr=_n.next()).done?Tr:Pn%2?rn(It,Pn++,De):rn(It,Pn++,Tr.value,Tr)})},ct}(this,Z))},interleave:function(){var Z=[this].concat(Ce(arguments)),De=Ya(this.toSeq(),hr.of,Z),ct=De.flatten(!0);return De.size&&(ct.size=De.size*Z.length),rt(this,ct)},keySeq:function(){return et(0,this.size)},last:function(){return this.get(-1)},skipWhile:function(Z,De){return rt(this,Fl(this,Z,De,!1))},zip:function(){return rt(this,Ya(this,Yu,[this].concat(Ce(arguments))))},zipWith:function(Z){var De=Ce(arguments);return De[0]=this,rt(this,Ya(this,Z,De))}}),f.prototype[B]=!0,f.prototype[W]=!0,ra(u,{get:function(Z,De){return this.has(Z)?Z:De},includes:function(Z){return this.has(Z)},keySeq:function(){return this.valueSeq()}}),u.prototype.has=bu.includes,u.prototype.contains=u.prototype.includes,ra(ci,a.prototype),ra(hr,f.prototype),ra(Br,u.prototype),ra(Se,a.prototype),ra(dt,f.prototype),ra(st,u.prototype),{Iterable:r,Seq:mi,Collection:Re,Map:Ri,OrderedMap:te,List:Co,Stack:Fa,Set:Bs,OrderedSet:El,Record:Gs,Range:et,Repeat:mn,is:vr,fromJS:zn}}()},74299:v=>{v.exports=function(b,i,r,a){var u=new Blob(void 0!==a?[a,b]:[b],{type:r||"application/octet-stream"});if(void 0!==window.navigator.msSaveBlob)window.navigator.msSaveBlob(u,i);else{var e=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(u):window.webkitURL.createObjectURL(u),p=document.createElement("a");p.style.display="none",p.href=e,p.setAttribute("download",i),void 0===p.download&&p.setAttribute("target","_blank"),document.body.appendChild(p),p.click(),setTimeout(function(){document.body.removeChild(p),window.URL.revokeObjectURL(e)},200)}}},86906:v=>{var a=/^\s+|\s+$/g,f=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,e=/^0o[0-7]+$/i,p=parseInt,g="object"==typeof global&&global&&global.Object===Object&&global,S="object"==typeof self&&self&&self.Object===Object&&self,M=g||S||Function("return this")(),x=Object.prototype.toString,B=Math.max,W=Math.min,j=function(){return M.Date.now()};function ue(ae){var ie=typeof ae;return!!ae&&("object"==ie||"function"==ie)}function se(ae){if("number"==typeof ae)return ae;if(function H(ae){return"symbol"==typeof ae||function re(ae){return!!ae&&"object"==typeof ae}(ae)&&"[object Symbol]"==x.call(ae)}(ae))return NaN;if(ue(ae)){var ie="function"==typeof ae.valueOf?ae.valueOf():ae;ae=ue(ie)?ie+"":ie}if("string"!=typeof ae)return 0===ae?ae:+ae;ae=ae.replace(a,"");var fe=u.test(ae);return fe||e.test(ae)?p(ae.slice(2),fe?2:8):f.test(ae)?NaN:+ae}v.exports=function q(ae,ie,fe){var he,Ce,ce,Be,Ve,Xe,He=0,Pe=!1,Ge=!1,Oe=!0;if("function"!=typeof ae)throw new TypeError("Expected a function");function Tt(Ct){var Gt=he,Fn=Ce;return he=Ce=void 0,He=Ct,Be=ae.apply(Fn,Gt)}function We(Ct){return He=Ct,Ve=setTimeout(Yt,ie),Pe?Tt(Ct):Be}function Nt(Ct){var Gt=Ct-Xe;return void 0===Xe||Gt>=ie||Gt<0||Ge&&Ct-He>=ce}function Yt(){var Ct=j();if(Nt(Ct))return dn(Ct);Ve=setTimeout(Yt,function Qt(Ct){var pr=ie-(Ct-Xe);return Ge?W(pr,ce-(Ct-He)):pr}(Ct))}function dn(Ct){return Ve=void 0,Oe&&he?Tt(Ct):(he=Ce=void 0,Be)}function xt(){var Ct=j(),Gt=Nt(Ct);if(he=arguments,Ce=this,Xe=Ct,Gt){if(void 0===Ve)return We(Xe);if(Ge)return Ve=setTimeout(Yt,ie),Tt(Xe)}return void 0===Ve&&(Ve=setTimeout(Yt,ie)),Be}return ie=se(ie)||0,ue(fe)&&(Pe=!!fe.leading,ce=(Ge="maxWait"in fe)?B(se(fe.maxWait)||0,ie):ce,Oe="trailing"in fe?!!fe.trailing:Oe),xt.cancel=function rn(){void 0!==Ve&&clearTimeout(Ve),He=0,he=Xe=Ce=Ve=void 0},xt.flush=function vt(){return void 0===Ve?Be:dn(j())},xt}},66941:v=>{var Hn,i="__lodash_hash_undefined__",u=/^\[object .+?Constructor\]$/,e="object"==typeof global&&global&&global.Object===Object&&global,p="object"==typeof self&&self&&self.Object===Object&&self,g=e||p||Function("return this")(),w=Array.prototype,x=Function.prototype,B=Object.prototype,W=g["__core-js_shared__"],j=(Hn=/[^.]+$/.exec(W&&W.keys&&W.keys.IE_PROTO||""))?"Symbol(src)_1."+Hn:"",q=x.toString,ue=B.hasOwnProperty,re=B.toString,H=RegExp("^"+q.call(ue).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),se=w.splice,ae=Gt(g,"Map"),ie=Gt(Object,"create");function fe(Hn){var er=-1,_r=Hn?Hn.length:0;for(this.clear();++er<_r;){var ei=Hn[er];this.set(ei[0],ei[1])}}function Xe(Hn){var er=-1,_r=Hn?Hn.length:0;for(this.clear();++er<_r;){var ei=Hn[er];this.set(ei[0],ei[1])}}function We(Hn){var er=-1,_r=Hn?Hn.length:0;for(this.clear();++er<_r;){var ei=Hn[er];this.set(ei[0],ei[1])}}function vt(Hn,er){for(var _r=Hn.length;_r--;)if(hr(Hn[_r][0],er))return _r;return-1}function Ct(Hn,er){var _r=Hn.__data__;return function Fn(Hn){var er=typeof Hn;return"string"==er||"number"==er||"symbol"==er||"boolean"==er?"__proto__"!==Hn:null===Hn}(er)?_r["string"==typeof er?"string":"hash"]:_r.map}function Gt(Hn,er){var _r=function S(Hn,er){return null==Hn?void 0:Hn[er]}(Hn,er);return function xt(Hn){if(!Ur(Hn)||function pr(Hn){return!!j&&j in Hn}(Hn))return!1;var er=function Br(Hn){var er=Ur(Hn)?re.call(Hn):"";return"[object Function]"==er||"[object GeneratorFunction]"==er}(Hn)||function M(Hn){var er=!1;if(null!=Hn&&"function"!=typeof Hn.toString)try{er=!!(Hn+"")}catch(_r){}return er}(Hn)?H:u;return er.test(function mi(Hn){if(null!=Hn){try{return q.call(Hn)}catch(er){}try{return Hn+""}catch(er){}}return""}(Hn))}(_r)?_r:void 0}function ci(Hn,er){if("function"!=typeof Hn||er&&"function"!=typeof er)throw new TypeError("Expected a function");var _r=function(){var ei=arguments,bi=er?er.apply(this,ei):ei[0],fi=_r.cache;if(fi.has(bi))return fi.get(bi);var no=Hn.apply(this,ei);return _r.cache=fi.set(bi,no),no};return _r.cache=new(ci.Cache||We),_r}function hr(Hn,er){return Hn===er||Hn!=Hn&&er!=er}function Ur(Hn){var er=typeof Hn;return!!Hn&&("object"==er||"function"==er)}fe.prototype.clear=function he(){this.__data__=ie?ie(null):{}},fe.prototype.delete=function Ce(Hn){return this.has(Hn)&&delete this.__data__[Hn]},fe.prototype.get=function ce(Hn){var er=this.__data__;if(ie){var _r=er[Hn];return _r===i?void 0:_r}return ue.call(er,Hn)?er[Hn]:void 0},fe.prototype.has=function Be(Hn){var er=this.__data__;return ie?void 0!==er[Hn]:ue.call(er,Hn)},fe.prototype.set=function Ve(Hn,er){return this.__data__[Hn]=ie&&void 0===er?i:er,this},Xe.prototype.clear=function He(){this.__data__=[]},Xe.prototype.delete=function Pe(Hn){var er=this.__data__,_r=vt(er,Hn);return!(_r<0||(_r==er.length-1?er.pop():se.call(er,_r,1),0))},Xe.prototype.get=function Ge(Hn){var er=this.__data__,_r=vt(er,Hn);return _r<0?void 0:er[_r][1]},Xe.prototype.has=function Oe(Hn){return vt(this.__data__,Hn)>-1},Xe.prototype.set=function Tt(Hn,er){var _r=this.__data__,ei=vt(_r,Hn);return ei<0?_r.push([Hn,er]):_r[ei][1]=er,this},We.prototype.clear=function Qt(){this.__data__={hash:new fe,map:new(ae||Xe),string:new fe}},We.prototype.delete=function Nt(Hn){return Ct(this,Hn).delete(Hn)},We.prototype.get=function Yt(Hn){return Ct(this,Hn).get(Hn)},We.prototype.has=function dn(Hn){return Ct(this,Hn).has(Hn)},We.prototype.set=function rn(Hn,er){return Ct(this,Hn).set(Hn,er),this},ci.Cache=We,v.exports=ci},6123:v=>{var b="Expected a function",a=/^\s+|\s+$/g,f=/^[-+]0x[0-9a-f]+$/i,u=/^0b[01]+$/i,e=/^0o[0-7]+$/i,p=parseInt,g="object"==typeof global&&global&&global.Object===Object&&global,S="object"==typeof self&&self&&self.Object===Object&&self,M=g||S||Function("return this")(),x=Object.prototype.toString,B=Math.max,W=Math.min,j=function(){return M.Date.now()};function re(ie){var fe=typeof ie;return!!ie&&("object"==fe||"function"==fe)}function ae(ie){if("number"==typeof ie)return ie;if(function se(ie){return"symbol"==typeof ie||function H(ie){return!!ie&&"object"==typeof ie}(ie)&&"[object Symbol]"==x.call(ie)}(ie))return NaN;if(re(ie)){var fe="function"==typeof ie.valueOf?ie.valueOf():ie;ie=re(fe)?fe+"":fe}if("string"!=typeof ie)return 0===ie?ie:+ie;ie=ie.replace(a,"");var he=u.test(ie);return he||e.test(ie)?p(ie.slice(2),he?2:8):f.test(ie)?NaN:+ie}v.exports=function ue(ie,fe,he){var Ce=!0,ce=!0;if("function"!=typeof ie)throw new TypeError(b);return re(he)&&(Ce="leading"in he?!!he.leading:Ce,ce="trailing"in he?!!he.trailing:ce),function q(ie,fe,he){var Ce,ce,Be,Ve,Xe,He,Pe=0,Ge=!1,Oe=!1,Tt=!0;if("function"!=typeof ie)throw new TypeError(b);function We(Gt){var Fn=Ce,pr=ce;return Ce=ce=void 0,Pe=Gt,Ve=ie.apply(pr,Fn)}function Qt(Gt){return Pe=Gt,Xe=setTimeout(dn,fe),Ge?We(Gt):Ve}function Yt(Gt){var Fn=Gt-He;return void 0===He||Fn>=fe||Fn<0||Oe&&Gt-Pe>=Be}function dn(){var Gt=j();if(Yt(Gt))return rn(Gt);Xe=setTimeout(dn,function Nt(Gt){var mi=fe-(Gt-He);return Oe?W(mi,Be-(Gt-Pe)):mi}(Gt))}function rn(Gt){return Xe=void 0,Tt&&Ce?We(Gt):(Ce=ce=void 0,Ve)}function Ct(){var Gt=j(),Fn=Yt(Gt);if(Ce=arguments,ce=this,He=Gt,Fn){if(void 0===Xe)return Qt(He);if(Oe)return Xe=setTimeout(dn,fe),We(He)}return void 0===Xe&&(Xe=setTimeout(dn,fe)),Ve}return fe=ae(fe)||0,re(he)&&(Ge=!!he.leading,Be=(Oe="maxWait"in he)?B(ae(he.maxWait)||0,fe):Be,Tt="trailing"in he?!!he.trailing:Tt),Ct.cancel=function vt(){void 0!==Xe&&clearTimeout(Xe),Pe=0,Ce=He=ce=Xe=void 0},Ct.flush=function xt(){return void 0===Xe?Ve:rn(j())},Ct}(ie,fe,{leading:Ce,maxWait:fe,trailing:ce})}},81235:(v,b,i)=>{var f=i(4153)(i(27038),"DataView");v.exports=f},41505:(v,b,i)=>{var r=i(59410),a=i(21143),f=i(604),u=i(80584),e=i(7792);function p(g){var S=-1,M=null==g?0:g.length;for(this.clear();++S<M;){var w=g[S];this.set(w[0],w[1])}}p.prototype.clear=r,p.prototype.delete=a,p.prototype.get=f,p.prototype.has=u,p.prototype.set=e,v.exports=p},73545:(v,b,i)=>{var r=i(63391),a=i(68971),f=i(18858),u=i(13913),e=i(68944);function p(g){var S=-1,M=null==g?0:g.length;for(this.clear();++S<M;){var w=g[S];this.set(w[0],w[1])}}p.prototype.clear=r,p.prototype.delete=a,p.prototype.get=f,p.prototype.has=u,p.prototype.set=e,v.exports=p},39046:(v,b,i)=>{var f=i(4153)(i(27038),"Map");v.exports=f},93177:(v,b,i)=>{var r=i(70536),a=i(61502),f=i(94960),u=i(61539),e=i(34138);function p(g){var S=-1,M=null==g?0:g.length;for(this.clear();++S<M;){var w=g[S];this.set(w[0],w[1])}}p.prototype.clear=r,p.prototype.delete=a,p.prototype.get=f,p.prototype.has=u,p.prototype.set=e,v.exports=p},97129:(v,b,i)=>{var f=i(4153)(i(27038),"Promise");v.exports=f},74918:(v,b,i)=>{var f=i(4153)(i(27038),"Set");v.exports=f},48690:(v,b,i)=>{var r=i(93177),a=i(30365),f=i(58235);function u(e){var p=-1,g=null==e?0:e.length;for(this.__data__=new r;++p<g;)this.add(e[p])}u.prototype.add=u.prototype.push=a,u.prototype.has=f,v.exports=u},33667:(v,b,i)=>{var r=i(73545),a=i(18034),f=i(37238),u=i(75887),e=i(81450),p=i(61386);function g(S){var M=this.__data__=new r(S);this.size=M.size}g.prototype.clear=a,g.prototype.delete=f,g.prototype.get=u,g.prototype.has=e,g.prototype.set=p,v.exports=g},57333:(v,b,i)=>{var r=i(27038);v.exports=r.Symbol},96820:(v,b,i)=>{var r=i(27038);v.exports=r.Uint8Array},54203:(v,b,i)=>{var f=i(4153)(i(27038),"WeakMap");v.exports=f},81638:v=>{v.exports=function b(i,r,a){switch(a.length){case 0:return i.call(r);case 1:return i.call(r,a[0]);case 2:return i.call(r,a[0],a[1]);case 3:return i.call(r,a[0],a[1],a[2])}return i.apply(r,a)}},4500:v=>{v.exports=function b(i,r){for(var a=-1,f=null==i?0:i.length;++a<f&&!1!==r(i[a],a,i););return i}},11375:v=>{v.exports=function b(i,r){for(var a=-1,f=null==i?0:i.length,u=0,e=[];++a<f;){var p=i[a];r(p,a,i)&&(e[u++]=p)}return e}},71890:(v,b,i)=>{var r=i(48282),a=i(2952),f=i(81690),u=i(84444),e=i(20968),p=i(47679),S=Object.prototype.hasOwnProperty;v.exports=function M(w,x){var B=f(w),W=!B&&a(w),j=!B&&!W&&u(w),q=!B&&!W&&!j&&p(w),ue=B||W||j||q,re=ue?r(w.length,String):[],H=re.length;for(var se in w)(x||S.call(w,se))&&(!ue||!("length"==se||j&&("offset"==se||"parent"==se)||q&&("buffer"==se||"byteLength"==se||"byteOffset"==se)||e(se,H)))&&re.push(se);return re}},14992:v=>{v.exports=function b(i,r){for(var a=-1,f=null==i?0:i.length,u=Array(f);++a<f;)u[a]=r(i[a],a,i);return u}},94165:v=>{v.exports=function b(i,r){for(var a=-1,f=r.length,u=i.length;++a<f;)i[u+a]=r[a];return i}},89731:v=>{v.exports=function b(i,r,a,f){var u=-1,e=null==i?0:i.length;for(f&&e&&(a=i[++u]);++u<e;)a=r(a,i[u],u,i);return a}},8141:v=>{v.exports=function b(i,r){for(var a=-1,f=null==i?0:i.length;++a<f;)if(r(i[a],a,i))return!0;return!1}},87280:v=>{v.exports=function b(i){return i.split("")}},54561:v=>{var b=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;v.exports=function i(r){return r.match(b)||[]}},63530:(v,b,i)=>{var r=i(92007),a=i(71166);v.exports=function f(u,e,p){(void 0!==p&&!a(u[e],p)||void 0===p&&!(e in u))&&r(u,e,p)}},23898:(v,b,i)=>{var r=i(92007),a=i(71166),u=Object.prototype.hasOwnProperty;v.exports=function e(p,g,S){var M=p[g];(!u.call(p,g)||!a(M,S)||void 0===S&&!(g in p))&&r(p,g,S)}},15758:(v,b,i)=>{var r=i(71166);v.exports=function a(f,u){for(var e=f.length;e--;)if(r(f[e][0],u))return e;return-1}},22067:(v,b,i)=>{var r=i(11694),a=i(59108);v.exports=function f(u,e){return u&&r(e,a(e),u)}},57836:(v,b,i)=>{var r=i(11694),a=i(42970);v.exports=function f(u,e){return u&&r(e,a(e),u)}},92007:(v,b,i)=>{var r=i(20395);v.exports=function a(f,u,e){"__proto__"==u&&r?r(f,u,{configurable:!0,enumerable:!0,value:e,writable:!0}):f[u]=e}},77007:(v,b,i)=>{var r=i(33667),a=i(4500),f=i(23898),u=i(22067),e=i(57836),p=i(50694),g=i(53595),S=i(14746),M=i(78857),w=i(58605),x=i(51675),B=i(26663),W=i(62963),j=i(32143),q=i(31563),ue=i(81690),re=i(84444),H=i(32e3),se=i(53867),ae=i(48855),ie=i(59108),fe=i(42970),Be="[object Arguments]",Ge="[object Function]",Qt="[object Object]",er={};er[Be]=er["[object Array]"]=er["[object ArrayBuffer]"]=er["[object DataView]"]=er["[object Boolean]"]=er["[object Date]"]=er["[object Float32Array]"]=er["[object Float64Array]"]=er["[object Int8Array]"]=er["[object Int16Array]"]=er["[object Int32Array]"]=er["[object Map]"]=er["[object Number]"]=er[Qt]=er["[object RegExp]"]=er["[object Set]"]=er["[object String]"]=er["[object Symbol]"]=er["[object Uint8Array]"]=er["[object Uint8ClampedArray]"]=er["[object Uint16Array]"]=er["[object Uint32Array]"]=!0,er["[object Error]"]=er[Ge]=er["[object WeakMap]"]=!1,v.exports=function _r(ei,bi,fi,no,xo,Er){var an,vn=1&bi,Zn=2&bi,Xn=4&bi;if(fi&&(an=xo?fi(ei,no,xo,Er):fi(ei)),void 0!==an)return an;if(!se(ei))return ei;var zn=ue(ei);if(zn){if(an=W(ei),!vn)return g(ei,an)}else{var ri=B(ei),Gi=ri==Ge||"[object GeneratorFunction]"==ri;if(re(ei))return p(ei,vn);if(ri==Qt||ri==Be||Gi&&!xo){if(an=Zn||Gi?{}:q(ei),!vn)return Zn?M(ei,e(an,ei)):S(ei,u(an,ei))}else{if(!er[ri])return xo?ei:{};an=j(ei,ri,vn)}}Er||(Er=new r);var ui=Er.get(ei);if(ui)return ui;Er.set(ei,an),ae(ei)?ei.forEach(function(mn){an.add(_r(mn,bi,fi,mn,ei,Er))}):H(ei)&&ei.forEach(function(mn,Rn){an.set(Rn,_r(mn,bi,fi,Rn,ei,Er))});var Ji=zn?void 0:(Xn?Zn?x:w:Zn?fe:ie)(ei);return a(Ji||ei,function(mn,Rn){Ji&&(mn=ei[Rn=mn]),f(an,Rn,_r(mn,bi,fi,Rn,ei,Er))}),an}},60920:(v,b,i)=>{var r=i(53867),a=Object.create,f=function(){function u(){}return function(e){if(!r(e))return{};if(a)return a(e);u.prototype=e;var p=new u;return u.prototype=void 0,p}}();v.exports=f},59026:(v,b,i)=>{var r=i(18022),f=i(99889)(r);v.exports=f},12229:v=>{v.exports=function b(i,r,a,f){for(var u=i.length,e=a+(f?1:-1);f?e--:++e<u;)if(r(i[e],e,i))return e;return-1}},56369:(v,b,i)=>{var r=i(94165),a=i(21006);v.exports=function f(u,e,p,g,S){var M=-1,w=u.length;for(p||(p=a),S||(S=[]);++M<w;){var x=u[M];e>0&&p(x)?e>1?f(x,e-1,p,g,S):r(S,x):g||(S[S.length]=x)}return S}},75290:(v,b,i)=>{var a=i(8269)();v.exports=a},18022:(v,b,i)=>{var r=i(75290),a=i(59108);v.exports=function f(u,e){return u&&r(u,e,a)}},93436:(v,b,i)=>{var r=i(64667),a=i(82773);v.exports=function f(u,e){for(var p=0,g=(e=r(e,u)).length;null!=u&&p<g;)u=u[a(e[p++])];return p&&p==g?u:void 0}},19215:(v,b,i)=>{var r=i(94165),a=i(81690);v.exports=function f(u,e,p){var g=e(u);return a(u)?g:r(g,p(u))}},72802:(v,b,i)=>{var r=i(57333),a=i(21613),f=i(81244),p=r?r.toStringTag:void 0;v.exports=function g(S){return null==S?void 0===S?"[object Undefined]":"[object Null]":p&&p in Object(S)?a(S):f(S)}},55333:v=>{v.exports=function b(i,r){return null!=i&&r in Object(i)}},77090:(v,b,i)=>{var r=i(72802),a=i(27503);v.exports=function u(e){return a(e)&&"[object Arguments]"==r(e)}},30696:(v,b,i)=>{var r=i(36863),a=i(27503);v.exports=function f(u,e,p,g,S){return u===e||(null==u||null==e||!a(u)&&!a(e)?u!=u&&e!=e:r(u,e,p,g,f,S))}},36863:(v,b,i)=>{var r=i(33667),a=i(27667),f=i(64630),u=i(70838),e=i(26663),p=i(81690),g=i(84444),S=i(47679),w="[object Arguments]",x="[object Array]",B="[object Object]",j=Object.prototype.hasOwnProperty;v.exports=function q(ue,re,H,se,ae,ie){var fe=p(ue),he=p(re),Ce=fe?x:e(ue),ce=he?x:e(re),Be=(Ce=Ce==w?B:Ce)==B,Ve=(ce=ce==w?B:ce)==B,Xe=Ce==ce;if(Xe&&g(ue)){if(!g(re))return!1;fe=!0,Be=!1}if(Xe&&!Be)return ie||(ie=new r),fe||S(ue)?a(ue,re,H,se,ae,ie):f(ue,re,Ce,H,se,ae,ie);if(!(1&H)){var He=Be&&j.call(ue,"__wrapped__"),Pe=Ve&&j.call(re,"__wrapped__");if(He||Pe){var Ge=He?ue.value():ue,Oe=Pe?re.value():re;return ie||(ie=new r),ae(Ge,Oe,H,se,ie)}}return!!Xe&&(ie||(ie=new r),u(ue,re,H,se,ae,ie))}},63434:(v,b,i)=>{var r=i(26663),a=i(27503);v.exports=function u(e){return a(e)&&"[object Map]"==r(e)}},88783:(v,b,i)=>{var r=i(33667),a=i(30696);v.exports=function e(p,g,S,M){var w=S.length,x=w,B=!M;if(null==p)return!x;for(p=Object(p);w--;){var W=S[w];if(B&&W[2]?W[1]!==p[W[0]]:!(W[0]in p))return!1}for(;++w<x;){var j=(W=S[w])[0],q=p[j],ue=W[1];if(B&&W[2]){if(void 0===q&&!(j in p))return!1}else{var re=new r;if(M)var H=M(q,ue,j,p,g,re);if(!(void 0===H?a(ue,q,3,M,re):H))return!1}}return!0}},43540:(v,b,i)=>{var r=i(55836),a=i(38466),f=i(53867),u=i(51217),p=/^\[object .+?Constructor\]$/,x=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");v.exports=function B(W){return!(!f(W)||a(W))&&(r(W)?x:p).test(u(W))}},67495:(v,b,i)=>{var r=i(26663),a=i(27503);v.exports=function u(e){return a(e)&&"[object Set]"==r(e)}},99390:(v,b,i)=>{var r=i(72802),a=i(8613),f=i(27503),Xe={};Xe["[object Float32Array]"]=Xe["[object Float64Array]"]=Xe["[object Int8Array]"]=Xe["[object Int16Array]"]=Xe["[object Int32Array]"]=Xe["[object Uint8Array]"]=Xe["[object Uint8ClampedArray]"]=Xe["[object Uint16Array]"]=Xe["[object Uint32Array]"]=!0,Xe["[object Arguments]"]=Xe["[object Array]"]=Xe["[object ArrayBuffer]"]=Xe["[object Boolean]"]=Xe["[object DataView]"]=Xe["[object Date]"]=Xe["[object Error]"]=Xe["[object Function]"]=Xe["[object Map]"]=Xe["[object Number]"]=Xe["[object Object]"]=Xe["[object RegExp]"]=Xe["[object Set]"]=Xe["[object String]"]=Xe["[object WeakMap]"]=!1,v.exports=function He(Pe){return f(Pe)&&a(Pe.length)&&!!Xe[r(Pe)]}},5245:(v,b,i)=>{var r=i(69433),a=i(68608),f=i(80290),u=i(81690),e=i(63354);v.exports=function p(g){return"function"==typeof g?g:null==g?f:"object"==typeof g?u(g)?a(g[0],g[1]):r(g):e(g)}},92488:(v,b,i)=>{var r=i(58845),a=i(36700),u=Object.prototype.hasOwnProperty;v.exports=function e(p){if(!r(p))return a(p);var g=[];for(var S in Object(p))u.call(p,S)&&"constructor"!=S&&g.push(S);return g}},50762:(v,b,i)=>{var r=i(53867),a=i(58845),f=i(25618),e=Object.prototype.hasOwnProperty;v.exports=function p(g){if(!r(g))return f(g);var S=a(g),M=[];for(var w in g)"constructor"==w&&(S||!e.call(g,w))||M.push(w);return M}},69433:(v,b,i)=>{var r=i(88783),a=i(48834),f=i(63587);v.exports=function u(e){var p=a(e);return 1==p.length&&p[0][2]?f(p[0][0],p[0][1]):function(g){return g===e||r(g,e,p)}}},68608:(v,b,i)=>{var r=i(30696),a=i(58102),f=i(18303),u=i(99743),e=i(45774),p=i(63587),g=i(82773);v.exports=function w(x,B){return u(x)&&e(B)?p(g(x),B):function(W){var j=a(W,x);return void 0===j&&j===B?f(W,x):r(B,j,3)}}},9085:(v,b,i)=>{var r=i(33667),a=i(63530),f=i(75290),u=i(23607),e=i(53867),p=i(42970),g=i(45959);v.exports=function S(M,w,x,B,W){M!==w&&f(w,function(j,q){if(W||(W=new r),e(j))u(M,w,q,x,S,B,W);else{var ue=B?B(g(M,q),j,q+"",M,w,W):void 0;void 0===ue&&(ue=j),a(M,q,ue)}},p)}},23607:(v,b,i)=>{var r=i(63530),a=i(50694),f=i(96282),u=i(53595),e=i(31563),p=i(2952),g=i(81690),S=i(82027),M=i(84444),w=i(55836),x=i(53867),B=i(82358),W=i(47679),j=i(45959),q=i(31413);v.exports=function ue(re,H,se,ae,ie,fe,he){var Ce=j(re,se),ce=j(H,se),Be=he.get(ce);if(Be)r(re,se,Be);else{var Ve=fe?fe(Ce,ce,se+"",re,H,he):void 0,Xe=void 0===Ve;if(Xe){var He=g(ce),Pe=!He&&M(ce),Ge=!He&&!Pe&&W(ce);Ve=ce,He||Pe||Ge?g(Ce)?Ve=Ce:S(Ce)?Ve=u(Ce):Pe?(Xe=!1,Ve=a(ce,!0)):Ge?(Xe=!1,Ve=f(ce,!0)):Ve=[]:B(ce)||p(ce)?(Ve=Ce,p(Ce)?Ve=q(Ce):(!x(Ce)||w(Ce))&&(Ve=e(ce))):Xe=!1}Xe&&(he.set(ce,Ve),ie(Ve,ce,ae,fe,he),he.delete(ce)),r(re,se,Ve)}}},68840:v=>{v.exports=function b(i){return function(r){return null==r?void 0:r[i]}}},59866:(v,b,i)=>{var r=i(93436);v.exports=function a(f){return function(u){return r(u,f)}}},17421:v=>{v.exports=function b(i){return function(r){return null==i?void 0:i[r]}}},85105:v=>{v.exports=function b(i,r,a,f,u){return u(i,function(e,p,g){a=f?(f=!1,e):r(a,e,p,g)}),a}},84441:(v,b,i)=>{var r=i(80290),a=i(15529),f=i(39009);v.exports=function u(e,p){return f(a(e,p,r),e+"")}},32773:(v,b,i)=>{var r=i(23898),a=i(64667),f=i(20968),u=i(53867),e=i(82773);v.exports=function p(g,S,M,w){if(!u(g))return g;for(var x=-1,B=(S=a(S,g)).length,W=B-1,j=g;null!=j&&++x<B;){var q=e(S[x]),ue=M;if("__proto__"===q||"constructor"===q||"prototype"===q)return g;if(x!=W){var re=j[q];void 0===(ue=w?w(re,q,j):void 0)&&(ue=u(re)?re:f(S[x+1])?[]:{})}r(j,q,ue),j=j[q]}return g}},99372:(v,b,i)=>{var r=i(45654),a=i(20395),f=i(80290);v.exports=a?function(e,p){return a(e,"toString",{configurable:!0,enumerable:!1,value:r(p),writable:!0})}:f},63586:v=>{v.exports=function b(i,r,a){var f=-1,u=i.length;r<0&&(r=-r>u?0:u+r),(a=a>u?u:a)<0&&(a+=u),u=r>a?0:a-r>>>0,r>>>=0;for(var e=Array(u);++f<u;)e[f]=i[f+r];return e}},37834:(v,b,i)=>{var r=i(59026);v.exports=function a(f,u){var e;return r(f,function(p,g,S){return!(e=u(p,g,S))}),!!e}},48282:v=>{v.exports=function b(i,r){for(var a=-1,f=Array(i);++a<i;)f[a]=r(a);return f}},68166:(v,b,i)=>{var r=i(57333),a=i(14992),f=i(81690),u=i(7786),p=r?r.prototype:void 0,g=p?p.toString:void 0;v.exports=function S(M){if("string"==typeof M)return M;if(f(M))return a(M,S)+"";if(u(M))return g?g.call(M):"";var w=M+"";return"0"==w&&1/M==-1/0?"-0":w}},13743:(v,b,i)=>{var r=i(87478),a=/^\s+/;v.exports=function f(u){return u&&u.slice(0,r(u)+1).replace(a,"")}},70544:v=>{v.exports=function b(i){return function(r){return i(r)}}},72064:(v,b,i)=>{var r=i(64667),a=i(27842),f=i(61746),u=i(82773);v.exports=function e(p,g){return g=r(g,p),null==(p=f(p,g))||delete p[u(a(g))]}},25687:v=>{v.exports=function b(i,r,a){for(var f=-1,u=i.length,e=r.length,p={};++f<u;)a(p,i[f],f<e?r[f]:void 0);return p}},13747:v=>{v.exports=function b(i,r){return i.has(r)}},64667:(v,b,i)=>{var r=i(81690),a=i(99743),f=i(89775),u=i(41233);v.exports=function e(p,g){return r(p)?p:a(p,g)?[p]:f(u(p))}},26477:(v,b,i)=>{var r=i(63586);v.exports=function a(f,u,e){var p=f.length;return e=void 0===e?p:e,!u&&e>=p?f:r(f,u,e)}},88461:(v,b,i)=>{var r=i(96820);v.exports=function a(f){var u=new f.constructor(f.byteLength);return new r(u).set(new r(f)),u}},50694:(v,b,i)=>{v=i.nmd(v);var r=i(27038),a=b&&!b.nodeType&&b,f=a&&v&&!v.nodeType&&v,e=f&&f.exports===a?r.Buffer:void 0,p=e?e.allocUnsafe:void 0;v.exports=function g(S,M){if(M)return S.slice();var w=S.length,x=p?p(w):new S.constructor(w);return S.copy(x),x}},59757:(v,b,i)=>{var r=i(88461);v.exports=function a(f,u){var e=u?r(f.buffer):f.buffer;return new f.constructor(e,f.byteOffset,f.byteLength)}},83615:v=>{var b=/\w*$/;v.exports=function i(r){var a=new r.constructor(r.source,b.exec(r));return a.lastIndex=r.lastIndex,a}},42282:(v,b,i)=>{var r=i(57333),a=r?r.prototype:void 0,f=a?a.valueOf:void 0;v.exports=function u(e){return f?Object(f.call(e)):{}}},96282:(v,b,i)=>{var r=i(88461);v.exports=function a(f,u){var e=u?r(f.buffer):f.buffer;return new f.constructor(e,f.byteOffset,f.length)}},53595:v=>{v.exports=function b(i,r){var a=-1,f=i.length;for(r||(r=Array(f));++a<f;)r[a]=i[a];return r}},11694:(v,b,i)=>{var r=i(23898),a=i(92007);v.exports=function f(u,e,p,g){var S=!p;p||(p={});for(var M=-1,w=e.length;++M<w;){var x=e[M],B=g?g(p[x],u[x],x,p,u):void 0;void 0===B&&(B=u[x]),S?a(p,x,B):r(p,x,B)}return p}},14746:(v,b,i)=>{var r=i(11694),a=i(10296);v.exports=function f(u,e){return r(u,a(u),e)}},78857:(v,b,i)=>{var r=i(11694),a=i(29572);v.exports=function f(u,e){return r(u,a(u),e)}},93412:(v,b,i)=>{var r=i(27038);v.exports=r["__core-js_shared__"]},30906:(v,b,i)=>{var r=i(84441),a=i(71100);v.exports=function f(u){return r(function(e,p){var g=-1,S=p.length,M=S>1?p[S-1]:void 0,w=S>2?p[2]:void 0;for(M=u.length>3&&"function"==typeof M?(S--,M):void 0,w&&a(p[0],p[1],w)&&(M=S<3?void 0:M,S=1),e=Object(e);++g<S;){var x=p[g];x&&u(e,x,g,M)}return e})}},99889:(v,b,i)=>{var r=i(93406);v.exports=function a(f,u){return function(e,p){if(null==e)return e;if(!r(e))return f(e,p);for(var g=e.length,S=u?g:-1,M=Object(e);(u?S--:++S<g)&&!1!==p(M[S],S,M););return e}}},8269:v=>{v.exports=function b(i){return function(r,a,f){for(var u=-1,e=Object(r),p=f(r),g=p.length;g--;){var S=p[i?g:++u];if(!1===a(e[S],S,e))break}return r}}},66803:(v,b,i)=>{var r=i(26477),a=i(407),f=i(2150),u=i(41233);v.exports=function e(p){return function(g){g=u(g);var S=a(g)?f(g):void 0,M=S?S[0]:g.charAt(0),w=S?r(S,1).join(""):g.slice(1);return M[p]()+w}}},17407:(v,b,i)=>{var r=i(89731),a=i(75289),f=i(96590),e=RegExp("['\u2019]","g");v.exports=function p(g){return function(S){return r(f(a(S).replace(e,"")),g,"")}}},44674:(v,b,i)=>{var r=i(5245),a=i(93406),f=i(59108);v.exports=function u(e){return function(p,g,S){var M=Object(p);if(!a(p)){var w=r(g,3);p=f(p),g=function(B){return w(M[B],B,M)}}var x=e(p,g,S);return x>-1?M[w?p[x]:x]:void 0}}},925:(v,b,i)=>{var r=i(82358);v.exports=function a(f){return r(f)?void 0:f}},4068:(v,b,i)=>{var f=i(17421)({\u00c0:"A",\u00c1:"A",\u00c2:"A",\u00c3:"A",\u00c4:"A",\u00c5:"A",\u00e0:"a",\u00e1:"a",\u00e2:"a",\u00e3:"a",\u00e4:"a",\u00e5:"a",\u00c7:"C",\u00e7:"c",\u00d0:"D",\u00f0:"d",\u00c8:"E",\u00c9:"E",\u00ca:"E",\u00cb:"E",\u00e8:"e",\u00e9:"e",\u00ea:"e",\u00eb:"e",\u00cc:"I",\u00cd:"I",\u00ce:"I",\u00cf:"I",\u00ec:"i",\u00ed:"i",\u00ee:"i",\u00ef:"i",\u00d1:"N",\u00f1:"n",\u00d2:"O",\u00d3:"O",\u00d4:"O",\u00d5:"O",\u00d6:"O",\u00d8:"O",\u00f2:"o",\u00f3:"o",\u00f4:"o",\u00f5:"o",\u00f6:"o",\u00f8:"o",\u00d9:"U",\u00da:"U",\u00db:"U",\u00dc:"U",\u00f9:"u",\u00fa:"u",\u00fb:"u",\u00fc:"u",\u00dd:"Y",\u00fd:"y",\u00ff:"y",\u00c6:"Ae",\u00e6:"ae",\u00de:"Th",\u00fe:"th",\u00df:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010a:"C",\u010c:"C",\u0107:"c",\u0109:"c",\u010b:"c",\u010d:"c",\u010e:"D",\u0110:"D",\u010f:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011a:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011b:"e",\u011c:"G",\u011e:"G",\u0120:"G",\u0122:"G",\u011d:"g",\u011f:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012a:"I",\u012c:"I",\u012e:"I",\u0130:"I",\u0129:"i",\u012b:"i",\u012d:"i",\u012f:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013b:"L",\u013d:"L",\u013f:"L",\u0141:"L",\u013a:"l",\u013c:"l",\u013e:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014a:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014b:"n",\u014c:"O",\u014e:"O",\u0150:"O",\u014d:"o",\u014f:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015a:"S",\u015c:"S",\u015e:"S",\u0160:"S",\u015b:"s",\u015d:"s",\u015f:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016a:"U",\u016c:"U",\u016e:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016b:"u",\u016d:"u",\u016f:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017b:"Z",\u017d:"Z",\u017a:"z",\u017c:"z",\u017e:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017f:"s"});v.exports=f},20395:(v,b,i)=>{var r=i(4153),a=function(){try{var f=r(Object,"defineProperty");return f({},"",{}),f}catch(u){}}();v.exports=a},27667:(v,b,i)=>{var r=i(48690),a=i(8141),f=i(13747);v.exports=function p(g,S,M,w,x,B){var W=1&M,j=g.length,q=S.length;if(j!=q&&!(W&&q>j))return!1;var ue=B.get(g),re=B.get(S);if(ue&&re)return ue==S&&re==g;var H=-1,se=!0,ae=2&M?new r:void 0;for(B.set(g,S),B.set(S,g);++H<j;){var ie=g[H],fe=S[H];if(w)var he=W?w(fe,ie,H,S,g,B):w(ie,fe,H,g,S,B);if(void 0!==he){if(he)continue;se=!1;break}if(ae){if(!a(S,function(Ce,ce){if(!f(ae,ce)&&(ie===Ce||x(ie,Ce,M,w,B)))return ae.push(ce)})){se=!1;break}}else if(ie!==fe&&!x(ie,fe,M,w,B)){se=!1;break}}return B.delete(g),B.delete(S),se}},64630:(v,b,i)=>{var r=i(57333),a=i(96820),f=i(71166),u=i(27667),e=i(37461),p=i(57673),ae=r?r.prototype:void 0,ie=ae?ae.valueOf:void 0;v.exports=function fe(he,Ce,ce,Be,Ve,Xe,He){switch(ce){case"[object DataView]":if(he.byteLength!=Ce.byteLength||he.byteOffset!=Ce.byteOffset)return!1;he=he.buffer,Ce=Ce.buffer;case"[object ArrayBuffer]":return!(he.byteLength!=Ce.byteLength||!Xe(new a(he),new a(Ce)));case"[object Boolean]":case"[object Date]":case"[object Number]":return f(+he,+Ce);case"[object Error]":return he.name==Ce.name&&he.message==Ce.message;case"[object RegExp]":case"[object String]":return he==Ce+"";case"[object Map]":var Pe=e;case"[object Set]":if(Pe||(Pe=p),he.size!=Ce.size&&!(1&Be))return!1;var Oe=He.get(he);if(Oe)return Oe==Ce;Be|=2,He.set(he,Ce);var Tt=u(Pe(he),Pe(Ce),Be,Ve,Xe,He);return He.delete(he),Tt;case"[object Symbol]":if(ie)return ie.call(he)==ie.call(Ce)}return!1}},70838:(v,b,i)=>{var r=i(58605),u=Object.prototype.hasOwnProperty;v.exports=function e(p,g,S,M,w,x){var B=1&S,W=r(p),j=W.length;if(j!=r(g).length&&!B)return!1;for(var re=j;re--;){var H=W[re];if(!(B?H in g:u.call(g,H)))return!1}var se=x.get(p),ae=x.get(g);if(se&&ae)return se==g&&ae==p;var ie=!0;x.set(p,g),x.set(g,p);for(var fe=B;++re<j;){var he=p[H=W[re]],Ce=g[H];if(M)var ce=B?M(Ce,he,H,g,p,x):M(he,Ce,H,p,g,x);if(!(void 0===ce?he===Ce||w(he,Ce,S,M,x):ce)){ie=!1;break}fe||(fe="constructor"==H)}if(ie&&!fe){var Be=p.constructor,Ve=g.constructor;Be!=Ve&&"constructor"in p&&"constructor"in g&&!("function"==typeof Be&&Be instanceof Be&&"function"==typeof Ve&&Ve instanceof Ve)&&(ie=!1)}return x.delete(p),x.delete(g),ie}},10058:(v,b,i)=>{var r=i(94694),a=i(15529),f=i(39009);v.exports=function u(e){return f(a(e,void 0,r),e+"")}},61138:v=>{var b="object"==typeof global&&global&&global.Object===Object&&global;v.exports=b},58605:(v,b,i)=>{var r=i(19215),a=i(10296),f=i(59108);v.exports=function u(e){return r(e,f,a)}},51675:(v,b,i)=>{var r=i(19215),a=i(29572),f=i(42970);v.exports=function u(e){return r(e,f,a)}},85556:(v,b,i)=>{var r=i(36586);v.exports=function a(f,u){var e=f.__data__;return r(u)?e["string"==typeof u?"string":"hash"]:e.map}},48834:(v,b,i)=>{var r=i(45774),a=i(59108);v.exports=function f(u){for(var e=a(u),p=e.length;p--;){var g=e[p],S=u[g];e[p]=[g,S,r(S)]}return e}},4153:(v,b,i)=>{var r=i(43540),a=i(36825);v.exports=function f(u,e){var p=a(u,e);return r(p)?p:void 0}},52398:(v,b,i)=>{var a=i(93332)(Object.getPrototypeOf,Object);v.exports=a},21613:(v,b,i)=>{var r=i(57333),a=Object.prototype,f=a.hasOwnProperty,u=a.toString,e=r?r.toStringTag:void 0;v.exports=function p(g){var S=f.call(g,e),M=g[e];try{g[e]=void 0;var w=!0}catch(B){}var x=u.call(g);return w&&(S?g[e]=M:delete g[e]),x}},10296:(v,b,i)=>{var r=i(11375),a=i(65336),u=Object.prototype.propertyIsEnumerable,e=Object.getOwnPropertySymbols;v.exports=e?function(g){return null==g?[]:(g=Object(g),r(e(g),function(S){return u.call(g,S)}))}:a},29572:(v,b,i)=>{var r=i(94165),a=i(52398),f=i(10296),u=i(65336);v.exports=Object.getOwnPropertySymbols?function(g){for(var S=[];g;)r(S,f(g)),g=a(g);return S}:u},26663:(v,b,i)=>{var r=i(81235),a=i(39046),f=i(97129),u=i(74918),e=i(54203),p=i(72802),g=i(51217),S="[object Map]",w="[object Promise]",x="[object Set]",B="[object WeakMap]",W="[object DataView]",j=g(r),q=g(a),ue=g(f),re=g(u),H=g(e),se=p;(r&&se(new r(new ArrayBuffer(1)))!=W||a&&se(new a)!=S||f&&se(f.resolve())!=w||u&&se(new u)!=x||e&&se(new e)!=B)&&(se=function(ae){var ie=p(ae),fe="[object Object]"==ie?ae.constructor:void 0,he=fe?g(fe):"";if(he)switch(he){case j:return W;case q:return S;case ue:return w;case re:return x;case H:return B}return ie}),v.exports=se},36825:v=>{v.exports=function b(i,r){return null==i?void 0:i[r]}},82138:(v,b,i)=>{var r=i(64667),a=i(2952),f=i(81690),u=i(20968),e=i(8613),p=i(82773);v.exports=function g(S,M,w){for(var x=-1,B=(M=r(M,S)).length,W=!1;++x<B;){var j=p(M[x]);if(!(W=null!=S&&w(S,j)))break;S=S[j]}return W||++x!=B?W:!!(B=null==S?0:S.length)&&e(B)&&u(j,B)&&(f(S)||a(S))}},407:v=>{var p=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");v.exports=function g(S){return p.test(S)}},59316:v=>{var b=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;v.exports=function i(r){return b.test(r)}},59410:(v,b,i)=>{var r=i(95969);v.exports=function a(){this.__data__=r?r(null):{},this.size=0}},21143:v=>{v.exports=function b(i){var r=this.has(i)&&delete this.__data__[i];return this.size-=r?1:0,r}},604:(v,b,i)=>{var r=i(95969),u=Object.prototype.hasOwnProperty;v.exports=function e(p){var g=this.__data__;if(r){var S=g[p];return"__lodash_hash_undefined__"===S?void 0:S}return u.call(g,p)?g[p]:void 0}},80584:(v,b,i)=>{var r=i(95969),f=Object.prototype.hasOwnProperty;v.exports=function u(e){var p=this.__data__;return r?void 0!==p[e]:f.call(p,e)}},7792:(v,b,i)=>{var r=i(95969);v.exports=function f(u,e){var p=this.__data__;return this.size+=this.has(u)?0:1,p[u]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},62963:v=>{var i=Object.prototype.hasOwnProperty;v.exports=function r(a){var f=a.length,u=new a.constructor(f);return f&&"string"==typeof a[0]&&i.call(a,"index")&&(u.index=a.index,u.input=a.input),u}},32143:(v,b,i)=>{var r=i(88461),a=i(59757),f=i(83615),u=i(42282),e=i(96282);v.exports=function ce(Be,Ve,Xe){var He=Be.constructor;switch(Ve){case"[object ArrayBuffer]":return r(Be);case"[object Boolean]":case"[object Date]":return new He(+Be);case"[object DataView]":return a(Be,Xe);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return e(Be,Xe);case"[object Map]":case"[object Set]":return new He;case"[object Number]":case"[object String]":return new He(Be);case"[object RegExp]":return f(Be);case"[object Symbol]":return u(Be)}}},31563:(v,b,i)=>{var r=i(60920),a=i(52398),f=i(58845);v.exports=function u(e){return"function"!=typeof e.constructor||f(e)?{}:r(a(e))}},21006:(v,b,i)=>{var r=i(57333),a=i(2952),f=i(81690),u=r?r.isConcatSpreadable:void 0;v.exports=function e(p){return f(p)||a(p)||!!(u&&p&&p[u])}},20968:v=>{var i=/^(?:0|[1-9]\d*)$/;v.exports=function r(a,f){var u=typeof a;return!!(f=null==f?9007199254740991:f)&&("number"==u||"symbol"!=u&&i.test(a))&&a>-1&&a%1==0&&a<f}},71100:(v,b,i)=>{var r=i(71166),a=i(93406),f=i(20968),u=i(53867);v.exports=function e(p,g,S){if(!u(S))return!1;var M=typeof g;return!!("number"==M?a(S)&&f(g,S.length):"string"==M&&g in S)&&r(S[g],p)}},99743:(v,b,i)=>{var r=i(81690),a=i(7786),f=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;v.exports=function e(p,g){if(r(p))return!1;var S=typeof p;return!("number"!=S&&"symbol"!=S&&"boolean"!=S&&null!=p&&!a(p))||u.test(p)||!f.test(p)||null!=g&&p in Object(g)}},36586:v=>{v.exports=function b(i){var r=typeof i;return"string"==r||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==i:null===i}},38466:(v,b,i)=>{var u,r=i(93412),a=(u=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+u:"";v.exports=function f(u){return!!a&&a in u}},58845:v=>{var b=Object.prototype;v.exports=function i(r){var a=r&&r.constructor;return r===("function"==typeof a&&a.prototype||b)}},45774:(v,b,i)=>{var r=i(53867);v.exports=function a(f){return f==f&&!r(f)}},63391:v=>{v.exports=function b(){this.__data__=[],this.size=0}},68971:(v,b,i)=>{var r=i(15758),f=Array.prototype.splice;v.exports=function u(e){var p=this.__data__,g=r(p,e);return!(g<0||(g==p.length-1?p.pop():f.call(p,g,1),--this.size,0))}},18858:(v,b,i)=>{var r=i(15758);v.exports=function a(f){var u=this.__data__,e=r(u,f);return e<0?void 0:u[e][1]}},13913:(v,b,i)=>{var r=i(15758);v.exports=function a(f){return r(this.__data__,f)>-1}},68944:(v,b,i)=>{var r=i(15758);v.exports=function a(f,u){var e=this.__data__,p=r(e,f);return p<0?(++this.size,e.push([f,u])):e[p][1]=u,this}},70536:(v,b,i)=>{var r=i(41505),a=i(73545),f=i(39046);v.exports=function u(){this.size=0,this.__data__={hash:new r,map:new(f||a),string:new r}}},61502:(v,b,i)=>{var r=i(85556);v.exports=function a(f){var u=r(this,f).delete(f);return this.size-=u?1:0,u}},94960:(v,b,i)=>{var r=i(85556);v.exports=function a(f){return r(this,f).get(f)}},61539:(v,b,i)=>{var r=i(85556);v.exports=function a(f){return r(this,f).has(f)}},34138:(v,b,i)=>{var r=i(85556);v.exports=function a(f,u){var e=r(this,f),p=e.size;return e.set(f,u),this.size+=e.size==p?0:1,this}},37461:v=>{v.exports=function b(i){var r=-1,a=Array(i.size);return i.forEach(function(f,u){a[++r]=[u,f]}),a}},63587:v=>{v.exports=function b(i,r){return function(a){return null!=a&&a[i]===r&&(void 0!==r||i in Object(a))}}},43911:(v,b,i)=>{var r=i(97425);v.exports=function f(u){var e=r(u,function(g){return 500===p.size&&p.clear(),g}),p=e.cache;return e}},95969:(v,b,i)=>{var a=i(4153)(Object,"create");v.exports=a},36700:(v,b,i)=>{var a=i(93332)(Object.keys,Object);v.exports=a},25618:v=>{v.exports=function b(i){var r=[];if(null!=i)for(var a in Object(i))r.push(a);return r}},70938:(v,b,i)=>{v=i.nmd(v);var r=i(61138),a=b&&!b.nodeType&&b,f=a&&v&&!v.nodeType&&v,e=f&&f.exports===a&&r.process,p=function(){try{return f&&f.require&&f.require("util").types||e&&e.binding&&e.binding("util")}catch(S){}}();v.exports=p},81244:v=>{var i=Object.prototype.toString;v.exports=function r(a){return i.call(a)}},93332:v=>{v.exports=function b(i,r){return function(a){return i(r(a))}}},15529:(v,b,i)=>{var r=i(81638),a=Math.max;v.exports=function f(u,e,p){return e=a(void 0===e?u.length-1:e,0),function(){for(var g=arguments,S=-1,M=a(g.length-e,0),w=Array(M);++S<M;)w[S]=g[e+S];S=-1;for(var x=Array(e+1);++S<e;)x[S]=g[S];return x[e]=p(w),r(u,this,x)}}},61746:(v,b,i)=>{var r=i(93436),a=i(63586);v.exports=function f(u,e){return e.length<2?u:r(u,a(e,0,-1))}},27038:(v,b,i)=>{var r=i(61138),a="object"==typeof self&&self&&self.Object===Object&&self,f=r||a||Function("return this")();v.exports=f},45959:v=>{v.exports=function b(i,r){if(("constructor"!==r||"function"!=typeof i[r])&&"__proto__"!=r)return i[r]}},30365:v=>{v.exports=function i(r){return this.__data__.set(r,"__lodash_hash_undefined__"),this}},58235:v=>{v.exports=function b(i){return this.__data__.has(i)}},57673:v=>{v.exports=function b(i){var r=-1,a=Array(i.size);return i.forEach(function(f){a[++r]=f}),a}},39009:(v,b,i)=>{var r=i(99372),f=i(44094)(r);v.exports=f},44094:v=>{var r=Date.now;v.exports=function a(f){var u=0,e=0;return function(){var p=r(),g=16-(p-e);if(e=p,g>0){if(++u>=800)return arguments[0]}else u=0;return f.apply(void 0,arguments)}}},18034:(v,b,i)=>{var r=i(73545);v.exports=function a(){this.__data__=new r,this.size=0}},37238:v=>{v.exports=function b(i){var r=this.__data__,a=r.delete(i);return this.size=r.size,a}},75887:v=>{v.exports=function b(i){return this.__data__.get(i)}},81450:v=>{v.exports=function b(i){return this.__data__.has(i)}},61386:(v,b,i)=>{var r=i(73545),a=i(39046),f=i(93177);v.exports=function e(p,g){var S=this.__data__;if(S instanceof r){var M=S.__data__;if(!a||M.length<199)return M.push([p,g]),this.size=++S.size,this;S=this.__data__=new f(M)}return S.set(p,g),this.size=S.size,this}},2150:(v,b,i)=>{var r=i(87280),a=i(407),f=i(1879);v.exports=function u(e){return a(e)?f(e):r(e)}},89775:(v,b,i)=>{var r=i(43911),a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,f=/\\(\\)?/g,u=r(function(e){var p=[];return 46===e.charCodeAt(0)&&p.push(""),e.replace(a,function(g,S,M,w){p.push(M?w.replace(f,"$1"):S||g)}),p});v.exports=u},82773:(v,b,i)=>{var r=i(7786);v.exports=function f(u){if("string"==typeof u||r(u))return u;var e=u+"";return"0"==e&&1/u==-1/0?"-0":e}},51217:v=>{var i=Function.prototype.toString;v.exports=function r(a){if(null!=a){try{return i.call(a)}catch(f){}try{return a+""}catch(f){}}return""}},87478:v=>{var b=/\s/;v.exports=function i(r){for(var a=r.length;a--&&b.test(r.charAt(a)););return a}},1879:v=>{var b="\\ud800-\\udfff",e="["+b+"]",p="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",g="\\ud83c[\\udffb-\\udfff]",M="[^"+b+"]",w="(?:\\ud83c[\\udde6-\\uddff]){2}",x="[\\ud800-\\udbff][\\udc00-\\udfff]",W="(?:"+p+"|"+g+")?",j="[\\ufe0e\\ufe0f]?",ue=j+W+"(?:\\u200d(?:"+[M,w,x].join("|")+")"+j+W+")*",re="(?:"+[M+p+"?",p,w,x,e].join("|")+")",H=RegExp(g+"(?="+g+")|"+re+ue,"g");v.exports=function se(ae){return ae.match(H)||[]}},58863:v=>{var b="\\ud800-\\udfff",u="\\u2700-\\u27bf",e="a-z\\xdf-\\xf6\\xf8-\\xff",w="A-Z\\xc0-\\xd6\\xd8-\\xde",B="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",j="["+B+"]",ue="\\d+",re="["+u+"]",H="["+e+"]",se="[^"+b+B+ue+u+e+w+"]",he="(?:\\ud83c[\\udde6-\\uddff]){2}",Ce="[\\ud800-\\udbff][\\udc00-\\udfff]",ce="["+w+"]",Ve="(?:"+H+"|"+se+")",Xe="(?:"+ce+"|"+se+")",He="(?:['\u2019](?:d|ll|m|re|s|t|ve))?",Pe="(?:['\u2019](?:D|LL|M|RE|S|T|VE))?",Ge="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",Oe="[\\ufe0e\\ufe0f]?",Nt=Oe+Ge+"(?:\\u200d(?:"+["[^"+b+"]",he,Ce].join("|")+")"+Oe+Ge+")*",Yt="(?:"+[re,he,Ce].join("|")+")"+Nt,dn=RegExp([ce+"?"+H+"+"+He+"(?="+[j,ce,"$"].join("|")+")",Xe+"+"+Pe+"(?="+[j,ce+Ve,"$"].join("|")+")",ce+"?"+Ve+"+"+He,ce+"+"+Pe,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ue,Yt].join("|"),"g");v.exports=function rn(vt){return vt.match(dn)||[]}},35037:(v,b,i)=>{var r=i(76974),f=i(17407)(function(u,e,p){return e=e.toLowerCase(),u+(p?r(e):e)});v.exports=f},76974:(v,b,i)=>{var r=i(41233),a=i(93890);v.exports=function f(u){return a(r(u).toLowerCase())}},45654:v=>{v.exports=function b(i){return function(){return i}}},41776:(v,b,i)=>{var r=i(53867),a=i(30765),f=i(45038),e=Math.max,p=Math.min;v.exports=function g(S,M,w){var x,B,W,j,q,ue,re=0,H=!1,se=!1,ae=!0;if("function"!=typeof S)throw new TypeError("Expected a function");function ie(Pe){var Ge=x,Oe=B;return x=B=void 0,re=Pe,j=S.apply(Oe,Ge)}function fe(Pe){return re=Pe,q=setTimeout(ce,M),H?ie(Pe):j}function Ce(Pe){var Ge=Pe-ue;return void 0===ue||Ge>=M||Ge<0||se&&Pe-re>=W}function ce(){var Pe=a();if(Ce(Pe))return Be(Pe);q=setTimeout(ce,function he(Pe){var Tt=M-(Pe-ue);return se?p(Tt,W-(Pe-re)):Tt}(Pe))}function Be(Pe){return q=void 0,ae&&x?ie(Pe):(x=B=void 0,j)}function He(){var Pe=a(),Ge=Ce(Pe);if(x=arguments,B=this,ue=Pe,Ge){if(void 0===q)return fe(ue);if(se)return clearTimeout(q),q=setTimeout(ce,M),ie(ue)}return void 0===q&&(q=setTimeout(ce,M)),j}return M=f(M)||0,r(w)&&(H=!!w.leading,W=(se="maxWait"in w)?e(f(w.maxWait)||0,M):W,ae="trailing"in w?!!w.trailing:ae),He.cancel=function Ve(){void 0!==q&&clearTimeout(q),re=0,x=ue=B=q=void 0},He.flush=function Xe(){return void 0===q?j:Be(a())},He}},75289:(v,b,i)=>{var r=i(4068),a=i(41233),f=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,M=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g");v.exports=function w(x){return(x=a(x))&&x.replace(f,r).replace(M,"")}},71166:v=>{v.exports=function b(i,r){return i===r||i!=i&&r!=r}},98990:(v,b,i)=>{var f=i(44674)(i(84857));v.exports=f},84857:(v,b,i)=>{var r=i(12229),a=i(5245),f=i(32781),u=Math.max;v.exports=function e(p,g,S){var M=null==p?0:p.length;if(!M)return-1;var w=null==S?0:f(S);return w<0&&(w=u(M+w,0)),r(p,a(g,3),w)}},94694:(v,b,i)=>{var r=i(56369);v.exports=function a(f){return null!=f&&f.length?r(f,1):[]}},58102:(v,b,i)=>{var r=i(93436);v.exports=function a(f,u,e){var p=null==f?void 0:r(f,u);return void 0===p?e:p}},18303:(v,b,i)=>{var r=i(55333),a=i(82138);v.exports=function f(u,e){return null!=u&&a(u,e,r)}},80290:v=>{v.exports=function b(i){return i}},2952:(v,b,i)=>{var r=i(77090),a=i(27503),f=Object.prototype,u=f.hasOwnProperty,e=f.propertyIsEnumerable,p=r(function(){return arguments}())?r:function(g){return a(g)&&u.call(g,"callee")&&!e.call(g,"callee")};v.exports=p},81690:v=>{v.exports=Array.isArray},93406:(v,b,i)=>{var r=i(55836),a=i(8613);v.exports=function f(u){return null!=u&&a(u.length)&&!r(u)}},82027:(v,b,i)=>{var r=i(93406),a=i(27503);v.exports=function f(u){return a(u)&&r(u)}},84444:(v,b,i)=>{v=i.nmd(v);var r=i(27038),a=i(61711),f=b&&!b.nodeType&&b,u=f&&v&&!v.nodeType&&v,p=u&&u.exports===f?r.Buffer:void 0;v.exports=(p?p.isBuffer:void 0)||a},12232:(v,b,i)=>{var r=i(92488),a=i(26663),f=i(2952),u=i(81690),e=i(93406),p=i(84444),g=i(58845),S=i(47679),B=Object.prototype.hasOwnProperty;v.exports=function W(j){if(null==j)return!0;if(e(j)&&(u(j)||"string"==typeof j||"function"==typeof j.splice||p(j)||S(j)||f(j)))return!j.length;var q=a(j);if("[object Map]"==q||"[object Set]"==q)return!j.size;if(g(j))return!r(j).length;for(var ue in j)if(B.call(j,ue))return!1;return!0}},55836:(v,b,i)=>{var r=i(72802),a=i(53867);v.exports=function g(S){if(!a(S))return!1;var M=r(S);return"[object Function]"==M||"[object GeneratorFunction]"==M||"[object AsyncFunction]"==M||"[object Proxy]"==M}},8613:v=>{v.exports=function i(r){return"number"==typeof r&&r>-1&&r%1==0&&r<=9007199254740991}},32e3:(v,b,i)=>{var r=i(63434),a=i(70544),f=i(70938),u=f&&f.isMap,e=u?a(u):r;v.exports=e},53867:v=>{v.exports=function b(i){var r=typeof i;return null!=i&&("object"==r||"function"==r)}},27503:v=>{v.exports=function b(i){return null!=i&&"object"==typeof i}},82358:(v,b,i)=>{var r=i(72802),a=i(52398),f=i(27503),g=Function.prototype.toString,S=Object.prototype.hasOwnProperty,M=g.call(Object);v.exports=function w(x){if(!f(x)||"[object Object]"!=r(x))return!1;var B=a(x);if(null===B)return!0;var W=S.call(B,"constructor")&&B.constructor;return"function"==typeof W&&W instanceof W&&g.call(W)==M}},48855:(v,b,i)=>{var r=i(67495),a=i(70544),f=i(70938),u=f&&f.isSet,e=u?a(u):r;v.exports=e},64871:(v,b,i)=>{var r=i(72802),a=i(81690),f=i(27503);v.exports=function e(p){return"string"==typeof p||!a(p)&&f(p)&&"[object String]"==r(p)}},7786:(v,b,i)=>{var r=i(72802),a=i(27503);v.exports=function u(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==r(e)}},47679:(v,b,i)=>{var r=i(99390),a=i(70544),f=i(70938),u=f&&f.isTypedArray,e=u?a(u):r;v.exports=e},59108:(v,b,i)=>{var r=i(71890),a=i(92488),f=i(93406);v.exports=function u(e){return f(e)?r(e):a(e)}},42970:(v,b,i)=>{var r=i(71890),a=i(50762),f=i(93406);v.exports=function u(e){return f(e)?r(e,!0):a(e)}},27842:v=>{v.exports=function b(i){var r=null==i?0:i.length;return r?i[r-1]:void 0}},23815:function(v,b,i){var r;v=i.nmd(v),function(){var a,p="Expected a function",S="__lodash_hash_undefined__",w="__lodash_placeholder__",Tt=1/0,We=9007199254740991,Yt=4294967295,vt=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],xt="[object Arguments]",Ct="[object Array]",Fn="[object Boolean]",pr="[object Date]",ci="[object Error]",hr="[object Function]",Br="[object GeneratorFunction]",Ur="[object Map]",Hn="[object Number]",_r="[object Object]",ei="[object Promise]",fi="[object RegExp]",no="[object Set]",xo="[object String]",Er="[object Symbol]",vn="[object WeakMap]",Xn="[object ArrayBuffer]",zn="[object DataView]",ri="[object Float32Array]",Gi="[object Float64Array]",ui="[object Int8Array]",vr="[object Int16Array]",Ji="[object Int32Array]",mn="[object Uint8Array]",Rn="[object Uint8ClampedArray]",Wn="[object Uint16Array]",et="[object Uint32Array]",Le=/\b__p \+= '';/g,Re=/\b(__p \+=) '' \+/g,Se=/(__e\(.*?\)|\b__t\)) \+\n'';/g,dt=/&(?:amp|lt|gt|quot|#39);/g,st=/[&<>"']/g,nn=RegExp(dt.source),Fe=RegExp(st.source),Lr=/<%-([\s\S]+?)%>/g,ti=/<%([\s\S]+?)%>/g,Ut=/<%=([\s\S]+?)%>/g,Dn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Et=/^\w*$/,$t=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,_t=/[\\^$.*+?()[\]{}|]/g,yt=RegExp(_t.source),Vt=/^\s+/,yn=/\s/,Cr=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,xi=/\{\n\/\* \[wrapped with (.+)\] \*/,yi=/,? & /,Yo=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Qo=/[()=,{}\[\]\/\s]/,lo=/\\(\\)?/g,Ri=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,ko=/\w*$/,Xo=/^[-+]0x[0-9a-f]+$/i,ir=/^0b[01]+$/i,si=/^\[object .+?Constructor\]$/,kn=/^0o[0-7]+$/i,nr=/^(?:0|[1-9]\d*)$/,jr=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ao=/($^)/,$i=/['\n\r\u2028\u2029\\]/g,Eo="\\ud800-\\udfff",or="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Mr="\\u2700-\\u27bf",Ar="a-z\\xdf-\\xf6\\xf8-\\xff",Jr="A-Z\\xc0-\\xd6\\xd8-\\xde",ro="\\ufe0e\\ufe0f",go="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ys="["+Eo+"]",ds="["+go+"]",es="["+or+"]",ma="\\d+",Ea="["+Mr+"]",fa="["+Ar+"]",sa="[^"+Eo+go+ma+Mr+Ar+Jr+"]",Ra="\\ud83c[\\udffb-\\udfff]",Co="[^"+Eo+"]",yl="(?:\\ud83c[\\udde6-\\uddff]){2}",Wo="[\\ud800-\\udbff][\\udc00-\\udfff]",ys="["+Jr+"]",Is="(?:"+fa+"|"+sa+")",nl="(?:"+ys+"|"+sa+")",js="(?:['\u2019](?:d|ll|m|re|s|t|ve))?",$o="(?:['\u2019](?:D|LL|M|RE|S|T|VE))?",To="(?:"+es+"|"+Ra+")?",Ns="["+ro+"]?",Ki=Ns+To+"(?:\\u200d(?:"+[Co,yl,Wo].join("|")+")"+Ns+To+")*",ut="(?:"+[Ea,yl,Wo].join("|")+")"+Ki,pn="(?:"+[Co+es+"?",es,yl,Wo,Ys].join("|")+")",te=RegExp("['\u2019]","g"),Ue=RegExp(es,"g"),jt=RegExp(Ra+"(?="+Ra+")|"+pn+Ki,"g"),hn=RegExp([ys+"?"+fa+"+"+js+"(?="+[ds,ys,"$"].join("|")+")",nl+"+"+$o+"(?="+[ds,ys+Is,"$"].join("|")+")",ys+"?"+Is+"+"+js,ys+"+"+$o,"\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ma,ut].join("|"),"g"),ii=RegExp("[\\u200d"+Eo+or+ro+"]"),Oi=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ki=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],_s=-1,Vo={};Vo[ri]=Vo[Gi]=Vo[ui]=Vo[vr]=Vo[Ji]=Vo[mn]=Vo[Rn]=Vo[Wn]=Vo[et]=!0,Vo[xt]=Vo[Ct]=Vo[Xn]=Vo[Fn]=Vo[zn]=Vo[pr]=Vo[ci]=Vo[hr]=Vo[Ur]=Vo[Hn]=Vo[_r]=Vo[fi]=Vo[no]=Vo[xo]=Vo[vn]=!1;var Fs={};Fs[xt]=Fs[Ct]=Fs[Xn]=Fs[zn]=Fs[Fn]=Fs[pr]=Fs[ri]=Fs[Gi]=Fs[ui]=Fs[vr]=Fs[Ji]=Fs[Ur]=Fs[Hn]=Fs[_r]=Fs[fi]=Fs[no]=Fs[xo]=Fs[Er]=Fs[mn]=Fs[Rn]=Fs[Wn]=Fs[et]=!0,Fs[ci]=Fs[hr]=Fs[vn]=!1;var Jl={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Qu=parseFloat,_c=parseInt,Cl="object"==typeof global&&global&&global.Object===Object&&global,mc="object"==typeof self&&self&&self.Object===Object&&self,Fl=Cl||mc||Function("return this")(),Xu=b&&!b.nodeType&&b,Xa=Xu&&v&&!v.nodeType&&v,Mc=Xa&&Xa.exports===Xu,ru=Mc&&Cl.process,Ja=function(){try{return Xa&&Xa.require&&Xa.require("util").types||ru&&ru.binding&&ru.binding("util")}catch(Rr){}}(),Ol=Ja&&Ja.isArrayBuffer,Bl=Ja&&Ja.isDate,Ya=Ja&&Ja.isMap,rt=Ja&&Ja.isRegExp,qt=Ja&&Ja.isSet,pt=Ja&&Ja.isTypedArray;function Kt(Yn,Rr,br){switch(br.length){case 0:return Yn.call(Rr);case 1:return Yn.call(Rr,br[0]);case 2:return Yn.call(Rr,br[0],br[1]);case 3:return Yn.call(Rr,br[0],br[1],br[2])}return Yn.apply(Rr,br)}function Kn(Yn,Rr,br,fo){for(var $s=-1,ls=null==Yn?0:Yn.length;++$s<ls;){var _l=Yn[$s];Rr(fo,_l,br(_l),Yn)}return fo}function oi(Yn,Rr){for(var br=-1,fo=null==Yn?0:Yn.length;++br<fo&&!1!==Rr(Yn[br],br,Yn););return Yn}function wi(Yn,Rr){for(var br=null==Yn?0:Yn.length;br--&&!1!==Rr(Yn[br],br,Yn););return Yn}function as(Yn,Rr){for(var br=-1,fo=null==Yn?0:Yn.length;++br<fo;)if(!Rr(Yn[br],br,Yn))return!1;return!0}function Gs(Yn,Rr){for(var br=-1,fo=null==Yn?0:Yn.length,$s=0,ls=[];++br<fo;){var _l=Yn[br];Rr(_l,br,Yn)&&(ls[$s++]=_l)}return ls}function Os(Yn,Rr){return!(null==Yn||!Yn.length)&&ja(Yn,Rr,0)>-1}function ws(Yn,Rr,br){for(var fo=-1,$s=null==Yn?0:Yn.length;++fo<$s;)if(br(Rr,Yn[fo]))return!0;return!1}function Fo(Yn,Rr){for(var br=-1,fo=null==Yn?0:Yn.length,$s=Array(fo);++br<fo;)$s[br]=Rr(Yn[br],br,Yn);return $s}function Ka(Yn,Rr){for(var br=-1,fo=Rr.length,$s=Yn.length;++br<fo;)Yn[$s+br]=Rr[br];return Yn}function al(Yn,Rr,br,fo){var $s=-1,ls=null==Yn?0:Yn.length;for(fo&&ls&&(br=Yn[++$s]);++$s<ls;)br=Rr(br,Yn[$s],$s,Yn);return br}function Bs(Yn,Rr,br,fo){var $s=null==Yn?0:Yn.length;for(fo&&$s&&(br=Yn[--$s]);$s--;)br=Rr(br,Yn[$s],$s,Yn);return br}function mt(Yn,Rr){for(var br=-1,fo=null==Yn?0:Yn.length;++br<fo;)if(Rr(Yn[br],br,Yn))return!0;return!1}var ot=hd("length");function Si(Yn,Rr,br){var fo;return br(Yn,function($s,ls,_l){if(Rr($s,ls,_l))return fo=ls,!1}),fo}function Jo(Yn,Rr,br,fo){for(var $s=Yn.length,ls=br+(fo?1:-1);fo?ls--:++ls<$s;)if(Rr(Yn[ls],ls,Yn))return ls;return-1}function ja(Yn,Rr,br){return Rr==Rr?function ct(Yn,Rr,br){for(var fo=br-1,$s=Yn.length;++fo<$s;)if(Yn[fo]===Rr)return fo;return-1}(Yn,Rr,br):Jo(Yn,Ku,br)}function El(Yn,Rr,br,fo){for(var $s=br-1,ls=Yn.length;++$s<ls;)if(fo(Yn[$s],Rr))return $s;return-1}function Ku(Yn){return Yn!=Yn}function Nc(Yn,Rr){var br=null==Yn?0:Yn.length;return br?Es(Yn,Rr)/br:NaN}function hd(Yn){return function(Rr){return null==Rr?a:Rr[Yn]}}function Yi(Yn){return function(Rr){return null==Yn?a:Yn[Rr]}}function aa(Yn,Rr,br,fo,$s){return $s(Yn,function(ls,_l,Us){br=fo?(fo=!1,ls):Rr(br,ls,_l,Us)}),br}function Es(Yn,Rr){for(var br,fo=-1,$s=Yn.length;++fo<$s;){var ls=Rr(Yn[fo]);ls!==a&&(br=br===a?ls:br+ls)}return br}function qu(Yn,Rr){for(var br=-1,fo=Array(Yn);++br<Yn;)fo[br]=Rr(br);return fo}function lu(Yn){return Yn&&Yn.slice(0,Pn(Yn)+1).replace(Vt,"")}function Eu(Yn){return function(Rr){return Yn(Rr)}}function iu(Yn,Rr){return Fo(Rr,function(br){return Yn[br]})}function ra(Yn,Rr){return Yn.has(Rr)}function bu(Yn,Rr){for(var br=-1,fo=Yn.length;++br<fo&&ja(Rr,Yn[br],0)>-1;);return br}function td(Yn,Rr){for(var br=Yn.length;br--&&ja(Rr,Yn[br],0)>-1;);return br}function ec(Yn,Rr){for(var br=Yn.length,fo=0;br--;)Yn[br]===Rr&&++fo;return fo}var uu=Yi({\u00c0:"A",\u00c1:"A",\u00c2:"A",\u00c3:"A",\u00c4:"A",\u00c5:"A",\u00e0:"a",\u00e1:"a",\u00e2:"a",\u00e3:"a",\u00e4:"a",\u00e5:"a",\u00c7:"C",\u00e7:"c",\u00d0:"D",\u00f0:"d",\u00c8:"E",\u00c9:"E",\u00ca:"E",\u00cb:"E",\u00e8:"e",\u00e9:"e",\u00ea:"e",\u00eb:"e",\u00cc:"I",\u00cd:"I",\u00ce:"I",\u00cf:"I",\u00ec:"i",\u00ed:"i",\u00ee:"i",\u00ef:"i",\u00d1:"N",\u00f1:"n",\u00d2:"O",\u00d3:"O",\u00d4:"O",\u00d5:"O",\u00d6:"O",\u00d8:"O",\u00f2:"o",\u00f3:"o",\u00f4:"o",\u00f5:"o",\u00f6:"o",\u00f8:"o",\u00d9:"U",\u00da:"U",\u00db:"U",\u00dc:"U",\u00f9:"u",\u00fa:"u",\u00fb:"u",\u00fc:"u",\u00dd:"Y",\u00fd:"y",\u00ff:"y",\u00c6:"Ae",\u00e6:"ae",\u00de:"Th",\u00fe:"th",\u00df:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010a:"C",\u010c:"C",\u0107:"c",\u0109:"c",\u010b:"c",\u010d:"c",\u010e:"D",\u0110:"D",\u010f:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011a:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011b:"e",\u011c:"G",\u011e:"G",\u0120:"G",\u0122:"G",\u011d:"g",\u011f:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012a:"I",\u012c:"I",\u012e:"I",\u0130:"I",\u0129:"i",\u012b:"i",\u012d:"i",\u012f:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013b:"L",\u013d:"L",\u013f:"L",\u0141:"L",\u013a:"l",\u013c:"l",\u013e:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014a:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014b:"n",\u014c:"O",\u014e:"O",\u0150:"O",\u014d:"o",\u014f:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015a:"S",\u015c:"S",\u015e:"S",\u0160:"S",\u015b:"s",\u015d:"s",\u015f:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016a:"U",\u016c:"U",\u016e:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016b:"u",\u016d:"u",\u016f:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017b:"Z",\u017d:"Z",\u017a:"z",\u017c:"z",\u017e:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017f:"s"}),du=Yi({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function nd(Yn){return"\\"+Jl[Yn]}function Yu(Yn){return ii.test(Yn)}function Io(Yn){var Rr=-1,br=Array(Yn.size);return Yn.forEach(function(fo,$s){br[++Rr]=[$s,fo]}),br}function fu(Yn,Rr){return function(br){return Yn(Rr(br))}}function Sr(Yn,Rr){for(var br=-1,fo=Yn.length,$s=0,ls=[];++br<fo;){var _l=Yn[br];(_l===Rr||_l===w)&&(Yn[br]=w,ls[$s++]=br)}return ls}function Z(Yn){var Rr=-1,br=Array(Yn.size);return Yn.forEach(function(fo){br[++Rr]=fo}),br}function Ht(Yn){return Yu(Yn)?function ai(Yn){for(var Rr=jt.lastIndex=0;jt.test(Yn);)++Rr;return Rr}(Yn):ot(Yn)}function _n(Yn){return Yu(Yn)?function Ei(Yn){return Yn.match(jt)||[]}(Yn):function je(Yn){return Yn.split("")}(Yn)}function Pn(Yn){for(var Rr=Yn.length;Rr--&&yn.test(Yn.charAt(Rr)););return Rr}var Tr=Yi({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"}),Pr=function Yn(Rr){var O,br=(Rr=null==Rr?Fl:Pr.defaults(Fl.Object(),Rr,Pr.pick(Fl,ki))).Array,fo=Rr.Date,$s=Rr.Error,ls=Rr.Function,_l=Rr.Math,Us=Rr.Object,zc=Rr.RegExp,Ic=Rr.String,Pu=Rr.TypeError,Su=br.prototype,_d=Us.prototype,md=Rr["__core-js_shared__"],Hc=ls.prototype.toString,La=_d.hasOwnProperty,kd=0,Oc=(O=/[^.]+$/.exec(md&&md.keys&&md.keys.IE_PROTO||""))?"Symbol(src)_1."+O:"",Mo=_d.toString,wo=Hc.call(Us),Ta=Fl._,Tl=zc("^"+Hc.call(La).replace(_t,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ou=Mc?Rr.Buffer:a,Tu=Rr.Symbol,gc=Rr.Uint8Array,En=ou?ou.allocUnsafe:a,pa=fu(Us.getPrototypeOf,Us),rd=Us.create,Ze=_d.propertyIsEnumerable,Ae=Su.splice,ge=Tu?Tu.isConcatSpreadable:a,ht=Tu?Tu.iterator:a,Ot=Tu?Tu.toStringTag:a,sn=function(){try{var O=Hu(Us,"defineProperty");return O({},"",{}),O}catch($){}}(),Un=Rr.clearTimeout!==Fl.clearTimeout&&Rr.clearTimeout,gr=fo&&fo.now!==Fl.Date.now&&fo.now,gi=Rr.setTimeout!==Fl.setTimeout&&Rr.setTimeout,Lo=_l.ceil,Ca=_l.floor,ms=Us.getOwnPropertySymbols,ha=ou?ou.isBuffer:a,Ma=Rr.isFinite,Nu=Su.join,cc=fu(Us.keys,Us),ka=_l.max,rl=_l.min,vc=fo.now,yc=Rr.parseInt,ju=_l.random,Ul=Su.reverse,tc=Hu(Rr,"DataView"),gd=Hu(Rr,"Map"),Fc=Hu(Rr,"Promise"),cu=Hu(Rr,"Set"),Oa=Hu(Rr,"WeakMap"),ll=Hu(Us,"create"),Ll=Oa&&new Oa,Ml={},gf=qf(tc),zd=qf(gd),id=qf(Fc),Al=qf(cu),kl=qf(Oa),Gu=Tu?Tu.prototype:a,ul=Gu?Gu.valueOf:a,Cu=Gu?Gu.toString:a;function cn(O){if(hc(O)&&!hi(O)&&!(O instanceof cl)){if(O instanceof qa)return O;if(La.call(O,"__wrapped__"))return v_(O)}return new qa(O)}var Ec=function(){function O(){}return function($){if(!Wu($))return{};if(rd)return rd($);O.prototype=$;var pe=new O;return O.prototype=a,pe}}();function Iu(){}function qa(O,$){this.__wrapped__=O,this.__actions__=[],this.__chain__=!!$,this.__index__=0,this.__values__=a}function cl(O){this.__wrapped__=O,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Yt,this.__views__=[]}function dc(O){var $=-1,pe=null==O?0:O.length;for(this.clear();++$<pe;){var it=O[$];this.set(it[0],it[1])}}function fc(O){var $=-1,pe=null==O?0:O.length;for(this.clear();++$<pe;){var it=O[$];this.set(it[0],it[1])}}function od(O){var $=-1,pe=null==O?0:O.length;for(this.clear();++$<pe;){var it=O[$];this.set(it[0],it[1])}}function $d(O){var $=-1,pe=null==O?0:O.length;for(this.__data__=new od;++$<pe;)this.add(O[$])}function $l(O){var $=this.__data__=new fc(O);this.size=$.size}function rc(O,$){var pe=hi(O),it=!pe&&xr(O),Wt=!pe&&!it&&au(O),Cn=!pe&&!it&&!Wt&&Dm(O),lr=pe||it||Wt||Cn,Ir=lr?qu(O.length,Ic):[],Kr=Ir.length;for(var oo in O)($||La.call(O,oo))&&(!lr||!("length"==oo||Wt&&("offset"==oo||"parent"==oo)||Cn&&("buffer"==oo||"byteLength"==oo||"byteOffset"==oo)||Bu(oo,Kr)))&&Ir.push(oo);return Ir}function Ql(O){var $=O.length;return $?O[Bd(0,$-1)]:a}function Sc(O,$){return Ap(Sd(O),ic($,0,O.length))}function Tc(O){return Ap(Sd(O))}function Zu(O,$,pe){(pe!==a&&!ft(O[$],pe)||pe===a&&!($ in O))&&Nl(O,$,pe)}function hu(O,$,pe){var it=O[$];(!La.call(O,$)||!ft(it,pe)||pe===a&&!($ in O))&&Nl(O,$,pe)}function Uc(O,$){for(var pe=O.length;pe--;)if(ft(O[pe][0],$))return pe;return-1}function pc(O,$,pe,it){return de(O,function(Wt,Cn,lr){$(it,Wt,pe(Wt),lr)}),it}function Jd(O,$){return O&&Kd($,xd($),O)}function Nl(O,$,pe){"__proto__"==$&&sn?sn(O,$,{configurable:!0,enumerable:!0,value:pe,writable:!0}):O[$]=pe}function Yc(O,$){for(var pe=-1,it=$.length,Wt=br(it),Cn=null==O;++pe<it;)Wt[pe]=Cn?a:fv(O,$[pe]);return Wt}function ic(O,$,pe){return O==O&&(pe!==a&&(O=O<=pe?O:pe),$!==a&&(O=O>=$?O:$)),O}function h(O,$,pe,it,Wt,Cn){var lr,Ir=1&$,Kr=2&$,oo=4&$;if(pe&&(lr=Wt?pe(O,it,Wt,Cn):pe(O)),lr!==a)return lr;if(!Wu(O))return O;var ho=hi(O);if(ho){if(lr=function Th(O){var $=O.length,pe=new O.constructor($);return $&&"string"==typeof O[0]&&La.call(O,"index")&&(pe.index=O.index,pe.input=O.input),pe}(O),!Ir)return Sd(O,lr)}else{var So=zu(O),bs=So==hr||So==Br;if(au(O))return Yh(O,Ir);if(So==_r||So==xt||bs&&!Wt){if(lr=Kr||bs?{}:cp(O),!Ir)return Kr?function tm(O,$){return Kd(O,Mp(O),$)}(O,function Jc(O,$){return O&&Kd($,mp($),O)}(lr,O)):function h_(O,$){return Kd(O,Lf(O),$)}(O,Jd(lr,O))}else{if(!Fs[So])return Wt?O:{};lr=function Ps(O,$,pe){var it=O.constructor;switch($){case Xn:return jh(O);case Fn:case pr:return new it(+O);case zn:return function p_(O,$){var pe=$?jh(O.buffer):O.buffer;return new O.constructor(pe,O.byteOffset,O.byteLength)}(O,pe);case ri:case Gi:case ui:case vr:case Ji:case mn:case Rn:case Wn:case et:return Gh(O,pe);case Ur:return new it;case Hn:case xo:return new it(O);case fi:return function ph(O){var $=new O.constructor(O.source,ko.exec(O));return $.lastIndex=O.lastIndex,$}(O);case no:return new it;case Er:return function Yp(O){return ul?Us(ul.call(O)):{}}(O)}}(O,So,Ir)}}Cn||(Cn=new $l);var la=Cn.get(O);if(la)return la;Cn.set(O,lr),P0(O)?O.forEach(function(Na){lr.add(h(Na,$,pe,Na,O,Cn))}):e1(O)&&O.forEach(function(Na,Hl){lr.set(Hl,h(Na,$,pe,Hl,O,Cn))});var Rl=ho?a:(oo?Kr?bh:Eh:Kr?mp:xd)(O);return oi(Rl||O,function(Na,Hl){Rl&&(Na=O[Hl=Na]),hu(lr,Hl,h(Na,$,pe,Hl,O,Cn))}),lr}function P(O,$,pe){var it=pe.length;if(null==O)return!it;for(O=Us(O);it--;){var Wt=pe[it],lr=O[Wt];if(lr===a&&!(Wt in O)||!(0,$[Wt])(lr))return!1}return!0}function L(O,$,pe){if("function"!=typeof O)throw new Pu(p);return Vp(function(){O.apply(a,pe)},$)}function X(O,$,pe,it){var Wt=-1,Cn=Os,lr=!0,Ir=O.length,Kr=[],oo=$.length;if(!Ir)return Kr;pe&&($=Fo($,Eu(pe))),it?(Cn=ws,lr=!1):$.length>=200&&(Cn=ra,lr=!1,$=new $d($));e:for(;++Wt<Ir;){var ho=O[Wt],So=null==pe?ho:pe(ho);if(ho=it||0!==ho?ho:0,lr&&So==So){for(var bs=oo;bs--;)if($[bs]===So)continue e;Kr.push(ho)}else Cn($,So,it)||Kr.push(ho)}return Kr}cn.templateSettings={escape:Lr,evaluate:ti,interpolate:Ut,variable:"",imports:{_:cn}},(cn.prototype=Iu.prototype).constructor=cn,(qa.prototype=Ec(Iu.prototype)).constructor=qa,(cl.prototype=Ec(Iu.prototype)).constructor=cl,dc.prototype.clear=function yd(){this.__data__=ll?ll(null):{},this.size=0},dc.prototype.delete=function $p(O){var $=this.has(O)&&delete this.__data__[O];return this.size-=$?1:0,$},dc.prototype.get=function vf(O){var $=this.__data__;if(ll){var pe=$[O];return pe===S?a:pe}return La.call($,O)?$[O]:a},dc.prototype.has=function ap(O){var $=this.__data__;return ll?$[O]!==a:La.call($,O)},dc.prototype.set=function Vu(O,$){var pe=this.__data__;return this.size+=this.has(O)?0:1,pe[O]=ll&&$===a?S:$,this},fc.prototype.clear=function Wd(){this.__data__=[],this.size=0},fc.prototype.delete=function Rf(O){var $=this.__data__,pe=Uc($,O);return!(pe<0||(pe==$.length-1?$.pop():Ae.call($,pe,1),--this.size,0))},fc.prototype.get=function yp(O){var $=this.__data__,pe=Uc($,O);return pe<0?a:$[pe][1]},fc.prototype.has=function Lc(O){return Uc(this.__data__,O)>-1},fc.prototype.set=function Fu(O,$){var pe=this.__data__,it=Uc(pe,O);return it<0?(++this.size,pe.push([O,$])):pe[it][1]=$,this},od.prototype.clear=function nc(){this.size=0,this.__data__={hash:new dc,map:new(gd||fc),string:new dc}},od.prototype.delete=function Aa(O){var $=Ff(this,O).delete(O);return this.size-=$?1:0,$},od.prototype.get=function Wc(O){return Ff(this,O).get(O)},od.prototype.has=function sd(O){return Ff(this,O).has(O)},od.prototype.set=function lp(O,$){var pe=Ff(this,O),it=pe.size;return pe.set(O,$),this.size+=pe.size==it?0:1,this},$d.prototype.add=$d.prototype.push=function vo(O){return this.__data__.set(O,S),this},$d.prototype.has=function pu(O){return this.__data__.has(O)},$l.prototype.clear=function Ac(){this.__data__=new fc,this.size=0},$l.prototype.delete=function ga(O){var $=this.__data__,pe=$.delete(O);return this.size=$.size,pe},$l.prototype.get=function Dc(O){return this.__data__.get(O)},$l.prototype.has=function Lu(O){return this.__data__.has(O)},$l.prototype.set=function bc(O,$){var pe=this.__data__;if(pe instanceof fc){var it=pe.__data__;if(!gd||it.length<199)return it.push([O,$]),this.size=++pe.size,this;pe=this.__data__=new od(it)}return pe.set(O,$),this.size=pe.size,this};var de=Td(Vn),ve=Td(fr,!0);function Ye(O,$){var pe=!0;return de(O,function(it,Wt,Cn){return pe=!!$(it,Wt,Cn)}),pe}function xe(O,$,pe){for(var it=-1,Wt=O.length;++it<Wt;){var Cn=O[it],lr=$(Cn);if(null!=lr&&(Ir===a?lr==lr&&!Xp(lr):pe(lr,Ir)))var Ir=lr,Kr=Cn}return Kr}function St(O,$){var pe=[];return de(O,function(it,Wt,Cn){$(it,Wt,Cn)&&pe.push(it)}),pe}function Mt(O,$,pe,it,Wt){var Cn=-1,lr=O.length;for(pe||(pe=dp),Wt||(Wt=[]);++Cn<lr;){var Ir=O[Cn];$>0&&pe(Ir)?$>1?Mt(Ir,$-1,pe,it,Wt):Ka(Wt,Ir):it||(Wt[Wt.length]=Ir)}return Wt}var fn=__(),jn=__(!0);function Vn(O,$){return O&&fn(O,$,xd)}function fr(O,$){return O&&jn(O,$,xd)}function $r(O,$){return Gs($,function(pe){return uf(O[pe])})}function Ui(O,$){for(var pe=0,it=($=Nf($,O)).length;null!=O&&pe<it;)O=O[sf($[pe++])];return pe&&pe==it?O:a}function is(O,$,pe){var it=$(O);return hi(O)?it:Ka(it,pe(O))}function yo(O){return null==O?O===a?"[object Undefined]":"[object Null]":Ot&&Ot in Us(O)?function Sh(O){var $=La.call(O,Ot),pe=O[Ot];try{O[Ot]=a;var it=!0}catch(Cn){}var Wt=Mo.call(O);return it&&($?O[Ot]=pe:delete O[Ot]),Wt}(O):function Oh(O){return Mo.call(O)}(O)}function Vs(O,$){return O>$}function qs(O,$){return null!=O&&La.call(O,$)}function el(O,$){return null!=O&&$ in Us(O)}function Ga(O,$,pe){for(var it=pe?ws:Os,Wt=O[0].length,Cn=O.length,lr=Cn,Ir=br(Cn),Kr=1/0,oo=[];lr--;){var ho=O[lr];lr&&$&&(ho=Fo(ho,Eu($))),Kr=rl(ho.length,Kr),Ir[lr]=!pe&&($||Wt>=120&&ho.length>=120)?new $d(lr&&ho):a}ho=O[0];var So=-1,bs=Ir[0];e:for(;++So<Wt&&oo.length<Kr;){var la=ho[So],ba=$?$(la):la;if(la=pe||0!==la?la:0,!(bs?ra(bs,ba):it(oo,ba,pe))){for(lr=Cn;--lr;){var Rl=Ir[lr];if(!(Rl?ra(Rl,ba):it(O[lr],ba,pe)))continue e}bs&&bs.push(ba),oo.push(la)}}return oo}function Gl(O,$,pe){var it=null==(O=Xf(O,$=Nf($,O)))?O:O[sf(Vc($))];return null==it?a:Kt(it,O,pe)}function _u(O){return hc(O)&&yo(O)==xt}function ku(O,$,pe,it,Wt){return O===$||(null==O||null==$||!hc(O)&&!hc($)?O!=O&&$!=$:function xc(O,$,pe,it,Wt,Cn){var lr=hi(O),Ir=hi($),Kr=lr?Ct:zu(O),oo=Ir?Ct:zu($),ho=(Kr=Kr==xt?_r:Kr)==_r,So=(oo=oo==xt?_r:oo)==_r,bs=Kr==oo;if(bs&&au(O)){if(!au($))return!1;lr=!0,ho=!1}if(bs&&!ho)return Cn||(Cn=new $l),lr||Dm(O)?Wf(O,$,pe,it,Wt,Cn):function yh(O,$,pe,it,Wt,Cn,lr){switch(pe){case zn:if(O.byteLength!=$.byteLength||O.byteOffset!=$.byteOffset)return!1;O=O.buffer,$=$.buffer;case Xn:return!(O.byteLength!=$.byteLength||!Cn(new gc(O),new gc($)));case Fn:case pr:case Hn:return ft(+O,+$);case ci:return O.name==$.name&&O.message==$.message;case fi:case xo:return O==$+"";case Ur:var Ir=Io;case no:if(Ir||(Ir=Z),O.size!=$.size&&!(1&it))return!1;var oo=lr.get(O);if(oo)return oo==$;it|=2,lr.set(O,$);var ho=Wf(Ir(O),Ir($),it,Wt,Cn,lr);return lr.delete(O),ho;case Er:if(ul)return ul.call(O)==ul.call($)}return!1}(O,$,Kr,pe,it,Wt,Cn);if(!(1&pe)){var la=ho&&La.call(O,"__wrapped__"),ba=So&&La.call($,"__wrapped__");if(la||ba){var Rl=la?O.value():O,Na=ba?$.value():$;return Cn||(Cn=new $l),Wt(Rl,Na,pe,it,Cn)}}return!!bs&&(Cn||(Cn=new $l),function Cp(O,$,pe,it,Wt,Cn){var lr=1&pe,Ir=Eh(O),Kr=Ir.length;if(Kr!=Eh($).length&&!lr)return!1;for(var So=Kr;So--;){var bs=Ir[So];if(!(lr?bs in $:La.call($,bs)))return!1}var la=Cn.get(O),ba=Cn.get($);if(la&&ba)return la==$&&ba==O;var Rl=!0;Cn.set(O,$),Cn.set($,O);for(var Na=lr;++So<Kr;){var Hl=O[bs=Ir[So]],ql=$[bs];if(it)var Yf=lr?it(ql,Hl,bs,$,O,Cn):it(Hl,ql,bs,O,$,Cn);if(!(Yf===a?Hl===ql||Wt(Hl,ql,pe,it,Cn):Yf)){Rl=!1;break}Na||(Na="constructor"==bs)}if(Rl&&!Na){var cf=O.constructor,rp=$.constructor;cf!=rp&&"constructor"in O&&"constructor"in $&&!("function"==typeof cf&&cf instanceof cf&&"function"==typeof rp&&rp instanceof rp)&&(Rl=!1)}return Cn.delete(O),Cn.delete($),Rl}(O,$,pe,it,Wt,Cn))}(O,$,pe,it,ku,Wt))}function Qd(O,$,pe,it){var Wt=pe.length,Cn=Wt,lr=!it;if(null==O)return!Cn;for(O=Us(O);Wt--;){var Ir=pe[Wt];if(lr&&Ir[2]?Ir[1]!==O[Ir[0]]:!(Ir[0]in O))return!1}for(;++Wt<Cn;){var Kr=(Ir=pe[Wt])[0],oo=O[Kr],ho=Ir[1];if(lr&&Ir[2]){if(oo===a&&!(Kr in O))return!1}else{var So=new $l;if(it)var bs=it(oo,ho,Kr,O,$,So);if(!(bs===a?ku(ho,oo,3,it,So):bs))return!1}}return!0}function il(O){return!(!Wu(O)||function e_(O){return!!Oc&&Oc in O}(O))&&(uf(O)?Tl:si).test(qf(O))}function wt(O){return"function"==typeof O?O:null==O?np:"object"==typeof O?hi(O)?ca(O[0],O[1]):Da(O):P1(O)}function ln(O){if(!rf(O))return cc(O);var $=[];for(var pe in Us(O))La.call(O,pe)&&"constructor"!=pe&&$.push(pe);return $}function Ai(O,$){return O<$}function gs(O,$){var pe=-1,it=zo(O)?br(O.length):[];return de(O,function(Wt,Cn,lr){it[++pe]=$(Wt,Cn,lr)}),it}function Da(O){var $=jp(O);return 1==$.length&&$[0][2]?t_($[0][0],$[0][1]):function(pe){return pe===O||Qd(pe,O,$)}}function ca(O,$){return Qf(O)&&Ch($)?t_(sf(O),$):function(pe){var it=fv(pe,O);return it===a&&it===$?pv(pe,O):ku($,it,3)}}function Dl(O,$,pe,it,Wt){O!==$&&fn($,function(Cn,lr){if(Wt||(Wt=new $l),Wu(Cn))!function Yl(O,$,pe,it,Wt,Cn,lr){var Ir=Op(O,pe),Kr=Op($,pe),oo=lr.get(Kr);if(oo)Zu(O,pe,oo);else{var ho=Cn?Cn(Ir,Kr,pe+"",O,$,lr):a,So=ho===a;if(So){var bs=hi(Kr),la=!bs&&au(Kr),ba=!bs&&!la&&Dm(Kr);ho=Kr,bs||la||ba?hi(Ir)?ho=Ir:As(Ir)?ho=Sd(Ir):la?(So=!1,ho=Yh(Kr,!0)):ba?(So=!1,ho=Gh(Kr,!0)):ho=[]:dm(Kr)||xr(Kr)?(ho=Ir,xr(Ir)?ho=Pg(Ir):(!Wu(Ir)||uf(Ir))&&(ho=cp(Kr))):So=!1}So&&(lr.set(Kr,ho),Wt(ho,Kr,it,Cn,lr),lr.delete(Kr)),Zu(O,pe,ho)}}(O,$,lr,pe,Dl,it,Wt);else{var Ir=it?it(Op(O,lr),Cn,lr+"",O,$,Wt):a;Ir===a&&(Ir=Cn),Zu(O,lr,Ir)}},mp)}function jc(O,$){var pe=O.length;if(pe)return Bu($+=$<0?pe:0,pe)?O[$]:a}function yf(O,$,pe){$=$.length?Fo($,function(Cn){return hi(Cn)?function(lr){return Ui(lr,1===Cn.length?Cn[0]:Cn)}:Cn}):[np];var it=-1;return $=Fo($,Eu(Ts())),function Fa(Yn,Rr){var br=Yn.length;for(Yn.sort(Rr);br--;)Yn[br]=Yn[br].value;return Yn}(gs(O,function(Cn,lr,Ir){return{criteria:Fo($,function(oo){return oo(Cn)}),index:++it,value:Cn}}),function(Cn,lr){return function em(O,$,pe){for(var it=-1,Wt=O.criteria,Cn=$.criteria,lr=Wt.length,Ir=pe.length;++it<lr;){var Kr=hh(Wt[it],Cn[it]);if(Kr)return it>=Ir?Kr:Kr*("desc"==pe[it]?-1:1)}return O.index-$.index}(Cn,lr,pe)})}function d_(O,$,pe){for(var it=-1,Wt=$.length,Cn={};++it<Wt;){var lr=$[it],Ir=Ui(O,lr);pe(Ir,lr)&&Ed(Cn,Nf(lr,O),Ir)}return Cn}function Rc(O,$,pe,it){var Wt=it?El:ja,Cn=-1,lr=$.length,Ir=O;for(O===$&&($=Sd($)),pe&&(Ir=Fo(O,Eu(pe)));++Cn<lr;)for(var Kr=0,oo=$[Cn],ho=pe?pe(oo):oo;(Kr=Wt(Ir,ho,Kr,it))>-1;)Ir!==O&&Ae.call(Ir,Kr,1),Ae.call(O,Kr,1);return O}function Xd(O,$){for(var pe=O?$.length:0,it=pe-1;pe--;){var Wt=$[pe];if(pe==it||Wt!==Cn){var Cn=Wt;Bu(Wt)?Ae.call(O,Wt,1):Up(O,Wt)}}return O}function Bd(O,$){return O+Ca(ju()*($-O+1))}function Hp(O,$){var pe="";if(!O||$<1||$>We)return pe;do{$%2&&(pe+=O),($=Ca($/2))&&(O+=O)}while($);return pe}function dl(O,$){return Kf(Gc(O,$,np),O+"")}function Bh(O){return Ql(Ig(O))}function wf(O,$){var pe=Ig(O);return Ap(pe,ic($,0,pe.length))}function Ed(O,$,pe,it){if(!Wu(O))return O;for(var Wt=-1,Cn=($=Nf($,O)).length,lr=Cn-1,Ir=O;null!=Ir&&++Wt<Cn;){var Kr=sf($[Wt]),oo=pe;if("__proto__"===Kr||"constructor"===Kr||"prototype"===Kr)return O;if(Wt!=lr){var ho=Ir[Kr];(oo=it?it(ho,Kr,Ir):a)===a&&(oo=Wu(ho)?ho:Bu($[Wt+1])?[]:{})}hu(Ir,Kr,oo),Ir=Ir[Kr]}return O}var ad=Ll?function(O,$){return Ll.set(O,$),O}:np,Kl=sn?function(O,$){return sn(O,"toString",{configurable:!0,enumerable:!1,value:Z_($),writable:!0})}:np;function up(O){return Ap(Ig(O))}function ld(O,$,pe){var it=-1,Wt=O.length;$<0&&($=-$>Wt?0:Wt+$),(pe=pe>Wt?Wt:pe)<0&&(pe+=Wt),Wt=$>pe?0:pe-$>>>0,$>>>=0;for(var Cn=br(Wt);++it<Wt;)Cn[it]=O[it+$];return Cn}function Uh(O,$){var pe;return de(O,function(it,Wt,Cn){return!(pe=$(it,Wt,Cn))}),!!pe}function uh(O,$,pe){var it=0,Wt=null==O?it:O.length;if("number"==typeof $&&$==$&&Wt<=2147483647){for(;it<Wt;){var Cn=it+Wt>>>1,lr=O[Cn];null!==lr&&!Xp(lr)&&(pe?lr<=$:lr<$)?it=Cn+1:Wt=Cn}return Wt}return Pf(O,$,np,pe)}function Pf(O,$,pe,it){var Wt=0,Cn=null==O?0:O.length;if(0===Cn)return 0;for(var lr=($=pe($))!=$,Ir=null===$,Kr=Xp($),oo=$===a;Wt<Cn;){var ho=Ca((Wt+Cn)/2),So=pe(O[ho]),bs=So!==a,la=null===So,ba=So==So,Rl=Xp(So);if(lr)var Na=it||ba;else Na=oo?ba&&(it||bs):Ir?ba&&bs&&(it||!la):Kr?ba&&bs&&!la&&(it||!Rl):!la&&!Rl&&(it?So<=$:So<$);Na?Wt=ho+1:Cn=ho}return rl(Cn,4294967294)}function Bp(O,$){for(var pe=-1,it=O.length,Wt=0,Cn=[];++pe<it;){var lr=O[pe],Ir=$?$(lr):lr;if(!pe||!ft(Ir,Kr)){var Kr=Ir;Cn[Wt++]=0===lr?0:lr}}return Cn}function Ef(O){return"number"==typeof O?O:Xp(O)?NaN:+O}function oc(O){if("string"==typeof O)return O;if(hi(O))return Fo(O,oc)+"";if(Xp(O))return Cu?Cu.call(O):"";var $=O+"";return"0"==$&&1/O==-Tt?"-0":$}function bd(O,$,pe){var it=-1,Wt=Os,Cn=O.length,lr=!0,Ir=[],Kr=Ir;if(pe)lr=!1,Wt=ws;else if(Cn>=200){var oo=$?null:L_(O);if(oo)return Z(oo);lr=!1,Wt=ra,Kr=new $d}else Kr=$?[]:Ir;e:for(;++it<Cn;){var ho=O[it],So=$?$(ho):ho;if(ho=pe||0!==ho?ho:0,lr&&So==So){for(var bs=Kr.length;bs--;)if(Kr[bs]===So)continue e;$&&Kr.push(So),Ir.push(ho)}else Wt(Kr,So,pe)||(Kr!==Ir&&Kr.push(So),Ir.push(ho))}return Ir}function Up(O,$){return null==(O=Xf(O,$=Nf($,O)))||delete O[sf(Vc($))]}function ch(O,$,pe,it){return Ed(O,$,pe(Ui(O,$)),it)}function dh(O,$,pe,it){for(var Wt=O.length,Cn=it?Wt:-1;(it?Cn--:++Cn<Wt)&&$(O[Cn],Cn,O););return pe?ld(O,it?0:Cn,it?Cn+1:Wt):ld(O,it?Cn+1:0,it?Wt:Cn)}function f_(O,$){var pe=O;return pe instanceof cl&&(pe=pe.value()),al($,function(it,Wt){return Wt.func.apply(Wt.thisArg,Ka([it],Wt.args))},pe)}function fh(O,$,pe){var it=O.length;if(it<2)return it?bd(O[0]):[];for(var Wt=-1,Cn=br(it);++Wt<it;)for(var lr=O[Wt],Ir=-1;++Ir<it;)Ir!=Wt&&(Cn[Wt]=X(Cn[Wt]||lr,O[Ir],$,pe));return bd(Mt(Cn,1),$,pe)}function bf(O,$,pe){for(var it=-1,Wt=O.length,Cn=$.length,lr={};++it<Wt;)pe(lr,O[it],it<Cn?$[it]:a);return lr}function Sf(O){return As(O)?O:[]}function Zf(O){return"function"==typeof O?O:np}function Nf(O,$){return hi(O)?O:Qf(O,$)?[O]:Zp(gu(O))}var Tf=dl;function Au(O,$,pe){var it=O.length;return pe=pe===a?it:pe,!$&&pe>=it?O:ld(O,$,pe)}var If=Un||function(O){return Fl.clearTimeout(O)};function Yh(O,$){if($)return O.slice();var pe=O.length,it=En?En(pe):new O.constructor(pe);return O.copy(it),it}function jh(O){var $=new O.constructor(O.byteLength);return new gc($).set(new gc(O)),$}function Gh(O,$){var pe=$?jh(O.buffer):O.buffer;return new O.constructor(pe,O.byteOffset,O.length)}function hh(O,$){if(O!==$){var pe=O!==a,it=null===O,Wt=O==O,Cn=Xp(O),lr=$!==a,Ir=null===$,Kr=$==$,oo=Xp($);if(!Ir&&!oo&&!Cn&&O>$||Cn&&lr&&Kr&&!Ir&&!oo||it&&lr&&Kr||!pe&&Kr||!Wt)return 1;if(!it&&!Cn&&!oo&&O<$||oo&&pe&&Wt&&!it&&!Cn||Ir&&pe&&Wt||!lr&&Wt||!Kr)return-1}return 0}function Du(O,$,pe,it){for(var Wt=-1,Cn=O.length,lr=pe.length,Ir=-1,Kr=$.length,oo=ka(Cn-lr,0),ho=br(Kr+oo),So=!it;++Ir<Kr;)ho[Ir]=$[Ir];for(;++Wt<lr;)(So||Wt<Cn)&&(ho[pe[Wt]]=O[Wt]);for(;oo--;)ho[Ir++]=O[Wt++];return ho}function Vh(O,$,pe,it){for(var Wt=-1,Cn=O.length,lr=-1,Ir=pe.length,Kr=-1,oo=$.length,ho=ka(Cn-Ir,0),So=br(ho+oo),bs=!it;++Wt<ho;)So[Wt]=O[Wt];for(var la=Wt;++Kr<oo;)So[la+Kr]=$[Kr];for(;++lr<Ir;)(bs||Wt<Cn)&&(So[la+pe[lr]]=O[Wt++]);return So}function Sd(O,$){var pe=-1,it=O.length;for($||($=br(it));++pe<it;)$[pe]=O[pe];return $}function Kd(O,$,pe,it){var Wt=!pe;pe||(pe={});for(var Cn=-1,lr=$.length;++Cn<lr;){var Ir=$[Cn],Kr=it?it(pe[Ir],O[Ir],Ir,pe,O):a;Kr===a&&(Kr=O[Ir]),Wt?Nl(pe,Ir,Kr):hu(pe,Ir,Kr)}return pe}function _h(O,$){return function(pe,it){var Wt=hi(pe)?Kn:pc,Cn=$?$():{};return Wt(pe,O,Ts(it,2),Cn)}}function Ep(O){return dl(function($,pe){var it=-1,Wt=pe.length,Cn=Wt>1?pe[Wt-1]:a,lr=Wt>2?pe[2]:a;for(Cn=O.length>3&&"function"==typeof Cn?(Wt--,Cn):a,lr&&jl(pe[0],pe[1],lr)&&(Cn=Wt<3?a:Cn,Wt=1),$=Us($);++it<Wt;){var Ir=pe[it];Ir&&O($,Ir,it,Cn)}return $})}function Td(O,$){return function(pe,it){if(null==pe)return pe;if(!zo(pe))return O(pe,it);for(var Wt=pe.length,Cn=$?Wt:-1,lr=Us(pe);($?Cn--:++Cn<Wt)&&!1!==it(lr[Cn],Cn,lr););return pe}}function __(O){return function($,pe,it){for(var Wt=-1,Cn=Us($),lr=it($),Ir=lr.length;Ir--;){var Kr=lr[O?Ir:++Wt];if(!1===pe(Cn[Kr],Kr,Cn))break}return $}}function zh(O){return function($){var pe=Yu($=gu($))?_n($):a,it=pe?pe[0]:$.charAt(0),Wt=pe?Au(pe,1).join(""):$.slice(1);return it[O]()+Wt}}function Cd(O){return function($){return al(hm(E1($).replace(te,"")),O,"")}}function mu(O){return function(){var $=arguments;switch($.length){case 0:return new O;case 1:return new O($[0]);case 2:return new O($[0],$[1]);case 3:return new O($[0],$[1],$[2]);case 4:return new O($[0],$[1],$[2],$[3]);case 5:return new O($[0],$[1],$[2],$[3],$[4]);case 6:return new O($[0],$[1],$[2],$[3],$[4],$[5]);case 7:return new O($[0],$[1],$[2],$[3],$[4],$[5],$[6])}var pe=Ec(O.prototype),it=O.apply(pe,$);return Wu(it)?it:pe}}function bp(O){return function($,pe,it){var Wt=Us($);if(!zo($)){var Cn=Ts(pe,3);$=xd($),pe=function(Ir){return Cn(Wt[Ir],Ir,Wt)}}var lr=O($,pe,it);return lr>-1?Wt[Cn?$[lr]:lr]:a}}function Jh(O){return Cf(function($){var pe=$.length,it=pe,Wt=qa.prototype.thru;for(O&&$.reverse();it--;){var Cn=$[it];if("function"!=typeof Cn)throw new Pu(p);if(Wt&&!lr&&"wrapper"==wc(Cn))var lr=new qa([],!0)}for(it=lr?it:pe;++it<pe;){var Ir=wc(Cn=$[it]),Kr="wrapper"==Ir?da(Cn):a;lr=Kr&&Gp(Kr[0])&&424==Kr[1]&&!Kr[4].length&&1==Kr[9]?lr[wc(Kr[0])].apply(lr,Kr[3]):1==Cn.length&&Gp(Cn)?lr[Ir]():lr.thru(Cn)}return function(){var oo=arguments,ho=oo[0];if(lr&&1==oo.length&&hi(ho))return lr.plant(ho).value();for(var So=0,bs=pe?$[So].apply(this,oo):ho;++So<pe;)bs=$[So].call(this,bs);return bs}})}function sc(O,$,pe,it,Wt,Cn,lr,Ir,Kr,oo){var ho=128&$,So=1&$,bs=2&$,la=24&$,ba=512&$,Rl=bs?a:mu(O);return function Na(){for(var Hl=arguments.length,ql=br(Hl),Yf=Hl;Yf--;)ql[Yf]=arguments[Yf];if(la)var cf=$u(Na),rp=ec(ql,cf);if(it&&(ql=Du(ql,it,Wt,la)),Cn&&(ql=Vh(ql,Cn,lr,la)),Hl-=rp,la&&Hl<oo){var Rd=Sr(ql,cf);return g_(O,$,sc,Na.placeholder,pe,ql,Rd,Ir,Kr,oo-Hl)}var Ph=So?pe:this,nh=bs?Ph[O]:O;return Hl=ql.length,Ir?ql=pp(ql,Ir):ba&&Hl>1&&ql.reverse(),ho&&Kr<Hl&&(ql.length=Kr),this&&this!==Fl&&this instanceof Na&&(nh=Rl||mu(nh)),nh.apply(Ph,ql)}}function qd(O,$){return function(pe,it){return function wa(O,$,pe,it){return Vn(O,function(Wt,Cn,lr){$(it,pe(Wt),Cn,lr)}),it}(pe,O,$(it),{})}}function zf(O,$){return function(pe,it){var Wt;if(pe===a&&it===a)return $;if(pe!==a&&(Wt=pe),it!==a){if(Wt===a)return it;"string"==typeof pe||"string"==typeof it?(pe=oc(pe),it=oc(it)):(pe=Ef(pe),it=Ef(it)),Wt=O(pe,it)}return Wt}}function Qh(O){return Cf(function($){return $=Fo($,Eu(Ts())),dl(function(pe){var it=this;return O($,function(Wt){return Kt(Wt,it,pe)})})})}function Sp(O,$){var pe=($=$===a?" ":oc($)).length;if(pe<2)return pe?Hp($,O):$;var it=Hp($,Lo(O/Ht($)));return Yu($)?Au(_n(it),0,O).join(""):it.slice(0,O)}function Tp(O){return function($,pe,it){return it&&"number"!=typeof it&&jl($,pe,it)&&(pe=it=a),$=Kp($),pe===a?(pe=$,$=0):pe=Kp(pe),function lh(O,$,pe,it){for(var Wt=-1,Cn=ka(Lo(($-O)/(pe||1)),0),lr=br(Cn);Cn--;)lr[it?Cn:++Wt]=O,O+=pe;return lr}($,pe,it=it===a?$<pe?1:-1:Kp(it),O)}}function mh(O){return function($,pe){return"string"==typeof $&&"string"==typeof pe||($=wh($),pe=wh(pe)),O($,pe)}}function g_(O,$,pe,it,Wt,Cn,lr,Ir,Kr,oo){var ho=8&$;$|=ho?32:64,4&($&=~(ho?64:32))||($&=-4);var Rl=[O,$,Wt,ho?Cn:a,ho?lr:a,ho?a:Cn,ho?a:lr,Ir,Kr,oo],Na=pe.apply(a,Rl);return Gp(O)&&Od(Na,Rl),Na.placeholder=it,n_(Na,O,$)}function gh(O){var $=_l[O];return function(pe,it){if(pe=wh(pe),(it=null==it?0:rl(xl(it),292))&&Ma(pe)){var Wt=(gu(pe)+"e").split("e");return+((Wt=(gu($(Wt[0]+"e"+(+Wt[1]+it)))+"e").split("e"))[0]+"e"+(+Wt[1]-it))}return $(pe)}}var L_=cu&&1/Z(new cu([,-0]))[1]==Tt?function(O){return new cu(O)}:yv;function Xh(O){return function($){var pe=zu($);return pe==Ur?Io($):pe==no?function De(Yn){var Rr=-1,br=Array(Yn.size);return Yn.forEach(function(fo){br[++Rr]=[fo,fo]}),br}($):function Sl(Yn,Rr){return Fo(Rr,function(br){return[br,Yn[br]]})}($,O($))}}function ef(O,$,pe,it,Wt,Cn,lr,Ir){var Kr=2&$;if(!Kr&&"function"!=typeof O)throw new Pu(p);var oo=it?it.length:0;if(oo||($&=-97,it=Wt=a),lr=lr===a?lr:ka(xl(lr),0),Ir=Ir===a?Ir:xl(Ir),oo-=Wt?Wt.length:0,64&$){var ho=it,So=Wt;it=Wt=a}var bs=Kr?a:da(O),la=[O,$,pe,it,Wt,ho,So,Cn,lr,Ir];if(bs&&function Mh(O,$){var pe=O[1],it=$[1],Wt=pe|it;if(!(Wt<131||(128==it&&8==pe||128==it&&256==pe&&O[7].length<=$[8]||384==it&&$[7].length<=$[8]&&8==pe)))return O;1&it&&(O[2]=$[2],Wt|=1&pe?0:4);var Ir=$[3];if(Ir){var Kr=O[3];O[3]=Kr?Du(Kr,Ir,$[4]):Ir,O[4]=Kr?Sr(O[3],w):$[4]}(Ir=$[5])&&(O[5]=(Kr=O[5])?Vh(Kr,Ir,$[6]):Ir,O[6]=Kr?Sr(O[5],w):$[6]),(Ir=$[7])&&(O[7]=Ir),128&it&&(O[8]=null==O[8]?$[8]:rl(O[8],$[8])),null==O[9]&&(O[9]=$[9]),O[0]=$[0],O[1]=Wt}(la,bs),O=la[0],$=la[1],pe=la[2],it=la[3],Wt=la[4],!(Ir=la[9]=la[9]===a?Kr?0:O.length:ka(la[9]-oo,0))&&24&$&&($&=-25),$&&1!=$)ba=8==$||16==$?function Wh(O,$,pe){var it=mu(O);return function Wt(){for(var Cn=arguments.length,lr=br(Cn),Ir=Cn,Kr=$u(Wt);Ir--;)lr[Ir]=arguments[Ir];var oo=Cn<3&&lr[0]!==Kr&&lr[Cn-1]!==Kr?[]:Sr(lr,Kr);return(Cn-=oo.length)<pe?g_(O,$,sc,Wt.placeholder,a,lr,oo,a,a,pe-Cn):Kt(this&&this!==Fl&&this instanceof Wt?it:O,this,lr)}}(O,$,Ir):32!=$&&33!=$||Wt.length?sc.apply(a,la):function m_(O,$,pe,it){var Wt=1&$,Cn=mu(O);return function lr(){for(var Ir=-1,Kr=arguments.length,oo=-1,ho=it.length,So=br(ho+Kr),bs=this&&this!==Fl&&this instanceof lr?Cn:O;++oo<ho;)So[oo]=it[oo];for(;Kr--;)So[oo++]=arguments[++Ir];return Kt(bs,Wt?pe:this,So)}}(O,$,pe,it);else var ba=function Zh(O,$,pe){var it=1&$,Wt=mu(O);return function Cn(){return(this&&this!==Fl&&this instanceof Cn?Wt:O).apply(it?pe:this,arguments)}}(O,$,pe);return n_((bs?ad:Od)(ba,la),O,$)}function Kh(O,$,pe,it){return O===a||ft(O,_d[pe])&&!La.call(it,pe)?$:O}function vh(O,$,pe,it,Wt,Cn){return Wu(O)&&Wu($)&&(Cn.set($,O),Dl(O,$,a,vh,Cn),Cn.delete($)),O}function qh(O){return dm(O)?a:O}function Wf(O,$,pe,it,Wt,Cn){var lr=1&pe,Ir=O.length,Kr=$.length;if(Ir!=Kr&&!(lr&&Kr>Ir))return!1;var oo=Cn.get(O),ho=Cn.get($);if(oo&&ho)return oo==$&&ho==O;var So=-1,bs=!0,la=2&pe?new $d:a;for(Cn.set(O,$),Cn.set($,O);++So<Ir;){var ba=O[So],Rl=$[So];if(it)var Na=lr?it(Rl,ba,So,$,O,Cn):it(ba,Rl,So,O,$,Cn);if(Na!==a){if(Na)continue;bs=!1;break}if(la){if(!mt($,function(Hl,ql){if(!ra(la,ql)&&(ba===Hl||Wt(ba,Hl,pe,it,Cn)))return la.push(ql)})){bs=!1;break}}else if(ba!==Rl&&!Wt(ba,Rl,pe,it,Cn)){bs=!1;break}}return Cn.delete(O),Cn.delete($),bs}function Cf(O){return Kf(Gc(O,a,xp),O+"")}function Eh(O){return is(O,xd,Lf)}function bh(O){return is(O,mp,Mp)}var da=Ll?function(O){return Ll.get(O)}:yv;function wc(O){for(var $=O.name+"",pe=Ml[$],it=La.call(Ml,$)?pe.length:0;it--;){var Wt=pe[it],Cn=Wt.func;if(null==Cn||Cn==O)return Wt.name}return $}function $u(O){return(La.call(cn,"placeholder")?cn:O).placeholder}function Ts(){var O=cn.iteratee||kg;return O=O===kg?wt:O,arguments.length?O(arguments[0],arguments[1]):O}function Ff(O,$){var pe=O.__data__;return function kf(O){var $=typeof O;return"string"==$||"number"==$||"symbol"==$||"boolean"==$?"__proto__"!==O:null===O}($)?pe["string"==typeof $?"string":"hash"]:pe.map}function jp(O){for(var $=xd(O),pe=$.length;pe--;){var it=$[pe],Wt=O[it];$[pe]=[it,Wt,Ch(Wt)]}return $}function Hu(O,$){var pe=function Uu(Yn,Rr){return null==Yn?a:Yn[Rr]}(O,$);return il(pe)?pe:a}var Lf=ms?function(O){return null==O?[]:(O=Us(O),Gs(ms(O),function($){return Ze.call(O,$)}))}:Hg,Mp=ms?function(O){for(var $=[];O;)Ka($,Lf(O)),O=pa(O);return $}:Hg,zu=yo;function k_(O,$,pe){for(var it=-1,Wt=($=Nf($,O)).length,Cn=!1;++it<Wt;){var lr=sf($[it]);if(!(Cn=null!=O&&pe(O,lr)))break;O=O[lr]}return Cn||++it!=Wt?Cn:!!(Wt=null==O?0:O.length)&&_p(Wt)&&Bu(lr,Wt)&&(hi(O)||xr(O))}function cp(O){return"function"!=typeof O.constructor||rf(O)?{}:Ec(pa(O))}function dp(O){return hi(O)||xr(O)||!!(ge&&O&&O[ge])}function Bu(O,$){var pe=typeof O;return!!($=null==$?We:$)&&("number"==pe||"symbol"!=pe&&nr.test(O))&&O>-1&&O%1==0&&O<$}function jl(O,$,pe){if(!Wu(pe))return!1;var it=typeof $;return!!("number"==it?zo(pe)&&Bu($,pe.length):"string"==it&&$ in pe)&&ft(pe[$],O)}function Qf(O,$){if(hi(O))return!1;var pe=typeof O;return!("number"!=pe&&"symbol"!=pe&&"boolean"!=pe&&null!=O&&!Xp(O))||Et.test(O)||!Dn.test(O)||null!=$&&O in Us($)}function Gp(O){var $=wc(O),pe=cn[$];if("function"!=typeof pe||!($ in cl.prototype))return!1;if(O===pe)return!0;var it=da(pe);return!!it&&O===it[0]}(tc&&zu(new tc(new ArrayBuffer(1)))!=zn||gd&&zu(new gd)!=Ur||Fc&&zu(Fc.resolve())!=ei||cu&&zu(new cu)!=no||Oa&&zu(new Oa)!=vn)&&(zu=function(O){var $=yo(O),pe=$==_r?O.constructor:a,it=pe?qf(pe):"";if(it)switch(it){case gf:return zn;case zd:return Ur;case id:return ei;case Al:return no;case kl:return vn}return $});var nf=md?uf:bv;function rf(O){var $=O&&O.constructor;return O===("function"==typeof $&&$.prototype||_d)}function Ch(O){return O==O&&!Wu(O)}function t_(O,$){return function(pe){return null!=pe&&pe[O]===$&&($!==a||O in Us(pe))}}function Gc(O,$,pe){return $=ka($===a?O.length-1:$,0),function(){for(var it=arguments,Wt=-1,Cn=ka(it.length-$,0),lr=br(Cn);++Wt<Cn;)lr[Wt]=it[$+Wt];Wt=-1;for(var Ir=br($+1);++Wt<$;)Ir[Wt]=it[Wt];return Ir[$]=pe(lr),Kt(O,this,Ir)}}function Xf(O,$){return $.length<2?O:Ui(O,ld($,0,-1))}function pp(O,$){for(var pe=O.length,it=rl($.length,pe),Wt=Sd(O);it--;){var Cn=$[it];O[it]=Bu(Cn,pe)?Wt[Cn]:a}return O}function Op(O,$){if(("constructor"!==$||"function"!=typeof O[$])&&"__proto__"!=$)return O[$]}var Od=r_(ad),Vp=gi||function(O,$){return Fl.setTimeout(O,$)},Kf=r_(Kl);function n_(O,$,pe){var it=$+"";return Kf(O,function Md(O,$){var pe=$.length;if(!pe)return O;var it=pe-1;return $[it]=(pe>1?"& ":"")+$[it],$=$.join(pe>2?", ":" "),O.replace(Cr,"{\n/* [wrapped with "+$+"] */\n")}(it,function zp(O,$){return oi(vt,function(pe){var it="_."+pe[0];$&pe[1]&&!Os(O,it)&&O.push(it)}),O.sort()}(function tf(O){var $=O.match(xi);return $?$[1].split(yi):[]}(it),pe)))}function r_(O){var $=0,pe=0;return function(){var it=vc(),Wt=16-(it-pe);if(pe=it,Wt>0){if(++$>=800)return arguments[0]}else $=0;return O.apply(a,arguments)}}function Ap(O,$){var pe=-1,it=O.length,Wt=it-1;for($=$===a?it:$;++pe<$;){var Cn=Bd(pe,Wt),lr=O[Cn];O[Cn]=O[pe],O[pe]=lr}return O.length=$,O}var Zp=function ud(O){var $=j_(O,function(it){return 500===pe.size&&pe.clear(),it}),pe=$.cache;return $}(function(O){var $=[];return 46===O.charCodeAt(0)&&$.push(""),O.replace($t,function(pe,it,Wt,Cn){$.push(Wt?Cn.replace(lo,"$1"):it||pe)}),$});function sf(O){if("string"==typeof O||Xp(O))return O;var $=O+"";return"0"==$&&1/O==-Tt?"-0":$}function qf(O){if(null!=O){try{return Hc.call(O)}catch($){}try{return O+""}catch($){}}return""}function v_(O){if(O instanceof cl)return O.clone();var $=new qa(O.__wrapped__,O.__chain__);return $.__actions__=Sd(O.__actions__),$.__index__=O.__index__,$.__values__=O.__values__,$}var nm=dl(function(O,$){return As(O)?X(O,Mt($,1,As,!0)):[]}),Ah=dl(function(O,$){var pe=Vc($);return As(pe)&&(pe=a),As(O)?X(O,Mt($,1,As,!0),Ts(pe,2)):[]}),E_=dl(function(O,$){var pe=Vc($);return As(pe)&&(pe=a),As(O)?X(O,Mt($,1,As,!0),a,pe):[]});function tp(O,$,pe){var it=null==O?0:O.length;if(!it)return-1;var Wt=null==pe?0:xl(pe);return Wt<0&&(Wt=ka(it+Wt,0)),Jo(O,Ts($,3),Wt)}function Dp(O,$,pe){var it=null==O?0:O.length;if(!it)return-1;var Wt=it-1;return pe!==a&&(Wt=xl(pe),Wt=pe<0?ka(it+Wt,0):rl(Wt,it-1)),Jo(O,Ts($,3),Wt,!0)}function xp(O){return null!=O&&O.length?Mt(O,1):[]}function Jp(O){return O&&O.length?O[0]:a}var B_=dl(function(O){var $=Fo(O,Sf);return $.length&&$[0]===O[0]?Ga($):[]}),Sm=dl(function(O){var $=Vc(O),pe=Fo(O,Sf);return $===Vc(pe)?$=a:pe.pop(),pe.length&&pe[0]===O[0]?Ga(pe,Ts($,2)):[]}),hp=dl(function(O){var $=Vc(O),pe=Fo(O,Sf);return($="function"==typeof $?$:a)&&pe.pop(),pe.length&&pe[0]===O[0]?Ga(pe,a,$):[]});function Vc(O){var $=null==O?0:O.length;return $?O[$-1]:a}var xh=dl(I);function I(O,$){return O&&O.length&&$&&$.length?Rc(O,$):O}var z=Cf(function(O,$){var pe=null==O?0:O.length,it=Yc(O,$);return Xd(O,Fo($,function(Wt){return Bu(Wt,pe)?+Wt:Wt}).sort(hh)),it});function Ke(O){return null==O?O:Ul.call(O)}var ze=dl(function(O){return bd(Mt(O,1,As,!0))}),At=dl(function(O){var $=Vc(O);return As($)&&($=a),bd(Mt(O,1,As,!0),Ts($,2))}),tn=dl(function(O){var $=Vc(O);return $="function"==typeof $?$:a,bd(Mt(O,1,As,!0),a,$)});function Ho(O){if(!O||!O.length)return[];var $=0;return O=Gs(O,function(pe){if(As(pe))return $=ka(pe.length,$),!0}),qu($,function(pe){return Fo(O,hd(pe))})}function Hs(O,$){if(!O||!O.length)return[];var pe=Ho(O);return null==$?pe:Fo(pe,function(it){return Kt($,a,it)})}var po=dl(function(O,$){return As(O)?X(O,$):[]}),fs=dl(function(O){return fh(Gs(O,As))}),oa=dl(function(O){var $=Vc(O);return As($)&&($=a),fh(Gs(O,As),Ts($,2))}),Xs=dl(function(O){var $=Vc(O);return $="function"==typeof $?$:a,fh(Gs(O,As),a,$)}),Qr=dl(Ho),Hi=dl(function(O){var $=O.length,pe=$>1?O[$-1]:a;return pe="function"==typeof pe?(O.pop(),pe):a,Hs(O,pe)});function io(O){var $=cn(O);return $.__chain__=!0,$}function vs(O,$){return $(O)}var Pa=Cf(function(O){var $=O.length,pe=$?O[0]:0,it=this.__wrapped__,Wt=function(Cn){return Yc(Cn,O)};return!($>1||this.__actions__.length)&&it instanceof cl&&Bu(pe)?((it=it.slice(pe,+pe+($?1:0))).__actions__.push({func:vs,args:[Wt],thisArg:a}),new qa(it,this.__chain__).thru(function(Cn){return $&&!Cn.length&&Cn.push(a),Cn})):this.thru(Wt)}),sm=_h(function(O,$,pe){La.call(O,pe)?++O[pe]:Nl(O,pe,1)}),rv=bp(tp),iv=bp(Dp);function Km(O,$){return(hi(O)?oi:de)(O,Ts($,3))}function Tg(O,$){return(hi(O)?wi:ve)(O,Ts($,3))}var Qc=_h(function(O,$,pe){La.call(O,pe)?O[pe].push($):Nl(O,pe,[$])}),su=dl(function(O,$,pe){var it=-1,Wt="function"==typeof $,Cn=zo(O)?br(O.length):[];return de(O,function(lr){Cn[++it]=Wt?Kt($,lr,pe):Gl(lr,$,pe)}),Cn}),Cg=_h(function(O,$,pe){Nl(O,pe,$)});function am(O,$){return(hi(O)?Fo:gs)(O,Ts($,3))}var Ko=_h(function(O,$,pe){O[pe?0:1].push($)},function(){return[[],[]]}),ov=dl(function(O,$){if(null==O)return[];var pe=$.length;return pe>1&&jl(O,$[0],$[1])?$=[]:pe>2&&jl($[0],$[1],$[2])&&($=[$[0]]),yf(O,Mt($,1),[])}),Cm=gr||function(){return Fl.Date.now()};function C_(O,$,pe){return $=pe?a:$,ef(O,128,a,a,a,a,$=O&&null==$?O.length:$)}function Mm(O,$){var pe;if("function"!=typeof $)throw new Pu(p);return O=xl(O),function(){return--O>0&&(pe=$.apply(this,arguments)),O<=1&&($=a),pe}}var Rh=dl(function(O,$,pe){var it=1;if(pe.length){var Wt=Sr(pe,$u(Rh));it|=32}return ef(O,it,$,pe,Wt)}),Y_=dl(function(O,$,pe){var it=3;if(pe.length){var Wt=Sr(pe,$u(Y_));it|=32}return ef($,it,O,pe,Wt)});function um(O,$,pe){var it,Wt,Cn,lr,Ir,Kr,oo=0,ho=!1,So=!1,bs=!0;if("function"!=typeof O)throw new Pu(p);function la(Rd){var Ph=it,nh=Wt;return it=Wt=a,oo=Rd,lr=O.apply(nh,Ph)}function ba(Rd){return oo=Rd,Ir=Vp(Hl,$),ho?la(Rd):lr}function Na(Rd){var Ph=Rd-Kr;return Kr===a||Ph>=$||Ph<0||So&&Rd-oo>=Cn}function Hl(){var Rd=Cm();if(Na(Rd))return ql(Rd);Ir=Vp(Hl,function Rl(Rd){var ag=$-(Rd-Kr);return So?rl(ag,Cn-(Rd-oo)):ag}(Rd))}function ql(Rd){return Ir=a,bs&&it?la(Rd):(it=Wt=a,lr)}function rp(){var Rd=Cm(),Ph=Na(Rd);if(it=arguments,Wt=this,Kr=Rd,Ph){if(Ir===a)return ba(Kr);if(So)return If(Ir),Ir=Vp(Hl,$),la(Kr)}return Ir===a&&(Ir=Vp(Hl,$)),lr}return $=wh($)||0,Wu(pe)&&(ho=!!pe.leading,Cn=(So="maxWait"in pe)?ka(wh(pe.maxWait)||0,$):Cn,bs="trailing"in pe?!!pe.trailing:bs),rp.cancel=function Yf(){Ir!==a&&If(Ir),oo=0,it=Kr=Wt=Ir=a},rp.flush=function cf(){return Ir===a?lr:ql(Cm())},rp}var Og=dl(function(O,$){return L(O,1,$)}),ng=dl(function(O,$,pe){return L(O,wh($)||0,pe)});function j_(O,$){if("function"!=typeof O||null!=$&&"function"!=typeof $)throw new Pu(p);var pe=function(){var it=arguments,Wt=$?$.apply(this,it):it[0],Cn=pe.cache;if(Cn.has(Wt))return Cn.get(Wt);var lr=O.apply(this,it);return pe.cache=Cn.set(Wt,lr)||Cn,lr};return pe.cache=new(j_.Cache||od),pe}function Qp(O){if("function"!=typeof O)throw new Pu(p);return function(){var $=arguments;switch($.length){case 0:return!O.call(this);case 1:return!O.call(this,$[0]);case 2:return!O.call(this,$[0],$[1]);case 3:return!O.call(this,$[0],$[1],$[2])}return!O.apply(this,$)}}j_.Cache=od;var A_=Tf(function(O,$){var pe=($=1==$.length&&hi($[0])?Fo($[0],Eu(Ts())):Fo(Mt($,1),Eu(Ts()))).length;return dl(function(it){for(var Wt=-1,Cn=rl(it.length,pe);++Wt<Cn;)it[Wt]=$[Wt].call(this,it[Wt]);return Kt(O,this,it)})}),Ag=dl(function(O,$){var pe=Sr($,$u(Ag));return ef(O,32,a,$,pe)}),cm=dl(function(O,$){var pe=Sr($,$u(cm));return ef(O,64,a,$,pe)}),Om=Cf(function(O,$){return ef(O,256,a,a,a,$)});function ft(O,$){return O===$||O!=O&&$!=$}var Zt=mh(Vs),rr=mh(function(O,$){return O>=$}),xr=_u(function(){return arguments}())?_u:function(O){return hc(O)&&La.call(O,"callee")&&!Ze.call(O,"callee")},hi=br.isArray,ns=Ol?Eu(Ol):function Va(O){return hc(O)&&yo(O)==Xn};function zo(O){return null!=O&&_p(O.length)&&!uf(O)}function As(O){return hc(O)&&zo(O)}var au=ha||bv,Xl=Bl?Eu(Bl):function Mu(O){return hc(O)&&yo(O)==pr};function s_(O){if(!hc(O))return!1;var $=yo(O);return $==ci||"[object DOMException]"==$||"string"==typeof O.message&&"string"==typeof O.name&&!dm(O)}function uf(O){if(!Wu(O))return!1;var $=yo(O);return $==hr||$==Br||"[object AsyncFunction]"==$||"[object Proxy]"==$}function dd(O){return"number"==typeof O&&O==xl(O)}function _p(O){return"number"==typeof O&&O>-1&&O%1==0&&O<=We}function Wu(O){var $=typeof O;return null!=O&&("object"==$||"function"==$)}function hc(O){return null!=O&&"object"==typeof O}var e1=Ya?Eu(Ya):function Ou(O){return hc(O)&&zu(O)==Ur};function Rg(O){return"number"==typeof O||hc(O)&&yo(O)==Hn}function dm(O){if(!hc(O)||yo(O)!=_r)return!1;var $=pa(O);if(null===$)return!0;var pe=La.call($,"constructor")&&$.constructor;return"function"==typeof pe&&pe instanceof pe&&Hc.call(pe)==wo}var wg=rt?Eu(rt):function K(O){return hc(O)&&yo(O)==fi},P0=qt?Eu(qt):function be(O){return hc(O)&&zu(O)==no};function Am(O){return"string"==typeof O||!hi(O)&&hc(O)&&yo(O)==xo}function Xp(O){return"symbol"==typeof O||hc(O)&&yo(O)==Er}var Dm=pt?Eu(pt):function lt(O){return hc(O)&&_p(O.length)&&!!Vo[yo(O)]},o1=mh(Ai),s1=mh(function(O,$){return O<=$});function a_(O){if(!O)return[];if(zo(O))return Am(O)?_n(O):Sd(O);if(ht&&O[ht])return function Ld(Yn){for(var Rr,br=[];!(Rr=Yn.next()).done;)br.push(Rr.value);return br}(O[ht]());var $=zu(O);return($==Ur?Io:$==no?Z:Ig)(O)}function Kp(O){return O?(O=wh(O))===Tt||O===-Tt?17976931348623157e292*(O<0?-1:1):O==O?O:0:0===O?O:0}function xl(O){var $=Kp(O),pe=$%1;return $==$?pe?$-pe:$:0}function a1(O){return O?ic(xl(O),0,Yt):0}function wh(O){if("number"==typeof O)return O;if(Xp(O))return NaN;if(Wu(O)){var $="function"==typeof O.valueOf?O.valueOf():O;O=Wu($)?$+"":$}if("string"!=typeof O)return 0===O?O:+O;O=lu(O);var pe=ir.test(O);return pe||kn.test(O)?_c(O.slice(2),pe?2:8):Xo.test(O)?NaN:+O}function Pg(O){return Kd(O,mp(O))}function gu(O){return null==O?"":oc(O)}var og=Ep(function(O,$){if(rf($)||zo($))Kd($,xd($),O);else for(var pe in $)La.call($,pe)&&hu(O,pe,$[pe])}),l1=Ep(function(O,$){Kd($,mp($),O)}),Rm=Ep(function(O,$,pe,it){Kd($,mp($),O,it)}),u1=Ep(function(O,$,pe,it){Kd($,xd($),O,it)}),c1=Cf(Yc),N0=dl(function(O,$){O=Us(O);var pe=-1,it=$.length,Wt=it>2?$[2]:a;for(Wt&&jl($[0],$[1],Wt)&&(it=1);++pe<it;)for(var Cn=$[pe],lr=mp(Cn),Ir=-1,Kr=lr.length;++Ir<Kr;){var oo=lr[Ir],ho=O[oo];(ho===a||ft(ho,_d[oo])&&!La.call(O,oo))&&(O[oo]=Cn[oo])}return O}),dv=dl(function(O){return O.push(a,vh),Kt(U0,a,O)});function fv(O,$,pe){var it=null==O?a:Ui(O,$);return it===a?pe:it}function pv(O,$){return null!=O&&k_(O,$,el)}var H0=qd(function(O,$,pe){null!=$&&"function"!=typeof $.toString&&($=Mo.call($)),O[$]=pe},Z_(np)),qp=qd(function(O,$,pe){null!=$&&"function"!=typeof $.toString&&($=Mo.call($)),La.call(O,$)?O[$].push(pe):O[$]=[pe]},Ts),h1=dl(Gl);function xd(O){return zo(O)?rc(O):ln(O)}function mp(O){return zo(O)?rc(O,!0):function Dr(O){if(!Wu(O))return function fp(O){var $=[];if(null!=O)for(var pe in Us(O))$.push(pe);return $}(O);var $=rf(O),pe=[];for(var it in O)"constructor"==it&&($||!La.call(O,it))||pe.push(it);return pe}(O)}var UE=Ep(function(O,$,pe){Dl(O,$,pe)}),U0=Ep(function(O,$,pe,it){Dl(O,$,pe,it)}),YE=Cf(function(O,$){var pe={};if(null==O)return pe;var it=!1;$=Fo($,function(Cn){return Cn=Nf(Cn,O),it||(it=Cn.length>1),Cn}),Kd(O,bh(O),pe),it&&(pe=h(pe,7,qh));for(var Wt=$.length;Wt--;)Up(pe,$[Wt]);return pe}),Y0=Cf(function(O,$){return null==O?{}:function Hd(O,$){return d_(O,$,function(pe,it){return pv(O,it)})}(O,$)});function _1(O,$){if(null==O)return{};var pe=Fo(bh(O),function(it){return[it]});return $=Ts($),d_(O,pe,function(it,Wt){return $(it,Wt[0])})}var Ng=Xh(xd),ZE=Xh(mp);function Ig(O){return null==O?[]:iu(O,xd(O))}var y1=Cd(function(O,$,pe){return $=$.toLowerCase(),O+(pe?hv($):$)});function hv(O){return D_(gu(O).toLowerCase())}function E1(O){return(O=gu(O))&&O.replace(jr,uu).replace(Ue,"")}var fd=Cd(function(O,$,pe){return O+(pe?"-":"")+$.toLowerCase()}),fm=Cd(function(O,$,pe){return O+(pe?" ":"")+$.toLowerCase()}),Nm=zh("toLowerCase"),pm=Cd(function(O,$,pe){return O+(pe?"_":"")+$.toLowerCase()}),Im=Cd(function(O,$,pe){return O+(pe?" ":"")+D_($)}),vv=Cd(function(O,$,pe){return O+(pe?" ":"")+$.toUpperCase()}),D_=zh("toUpperCase");function hm(O,$,pe){return O=gu(O),($=pe?a:$)===a?function wu(Yn){return Oi.test(Yn)}(O)?function Ci(Yn){return Yn.match(hn)||[]}(O):function Xt(Yn){return Yn.match(Yo)||[]}(O):O.match($)||[]}var _m=dl(function(O,$){try{return Kt(O,a,$)}catch(pe){return s_(pe)?pe:new $s(pe)}}),Lm=Cf(function(O,$){return oi($,function(pe){pe=sf(pe),Nl(O,pe,Rh(O[pe],O))}),O});function Z_(O){return function(){return O}}var Hm=Jh(),C1=Jh(!0);function np(O){return O}function kg(O){return wt("function"==typeof O?O:h(O,1))}var A1=dl(function(O,$){return function(pe){return Gl(pe,O,$)}}),D1=dl(function(O,$){return function(pe){return Gl(O,pe,$)}});function $g(O,$,pe){var it=xd($),Wt=$r($,it);null==pe&&(!Wu($)||!Wt.length&&it.length)&&(pe=$,$=O,O=this,Wt=$r($,xd($)));var Cn=!(Wu(pe)&&"chain"in pe&&!pe.chain),lr=uf(O);return oi(Wt,function(Ir){var Kr=$[Ir];O[Ir]=Kr,lr&&(O.prototype[Ir]=function(){var oo=this.__chain__;if(Cn||oo){var ho=O(this.__wrapped__),So=ho.__actions__=Sd(this.__actions__);return So.push({func:Kr,args:arguments,thisArg:O}),ho.__chain__=oo,ho}return Kr.apply(O,Ka([this.value()],arguments))})}),O}function yv(){}var z0=Qh(Fo),w1=Qh(as),Ev=Qh(mt);function P1(O){return Qf(O)?hd(sf(O)):function ah(O){return function($){return Ui($,O)}}(O)}var N1=Tp(),J0=Tp(!0);function Hg(){return[]}function bv(){return!1}var qE=zf(function(O,$){return O+$},0),eb=gh("ceil"),tb=zf(function(O,$){return O/$},1),q0=gh("floor"),ny=zf(function(O,$){return O*$},1),F1=gh("round"),Bg=zf(function(O,$){return O-$},0);return cn.after=function lm(O,$){if("function"!=typeof $)throw new Pu(p);return O=xl(O),function(){if(--O<1)return $.apply(this,arguments)}},cn.ary=C_,cn.assign=og,cn.assignIn=l1,cn.assignInWith=Rm,cn.assignWith=u1,cn.at=c1,cn.before=Mm,cn.bind=Rh,cn.bindAll=Lm,cn.bindKey=Y_,cn.castArray=function av(){if(!arguments.length)return[];var O=arguments[0];return hi(O)?O:[O]},cn.chain=io,cn.chunk=function ep(O,$,pe){$=(pe?jl(O,$,pe):$===a)?1:ka(xl($),0);var it=null==O?0:O.length;if(!it||$<1)return[];for(var Wt=0,Cn=0,lr=br(Lo(it/$));Wt<it;)lr[Cn++]=ld(O,Wt,Wt+=$);return lr},cn.compact=function Wp(O){for(var $=-1,pe=null==O?0:O.length,it=0,Wt=[];++$<pe;){var Cn=O[$];Cn&&(Wt[it++]=Cn)}return Wt},cn.concat=function y_(){var O=arguments.length;if(!O)return[];for(var $=br(O-1),pe=arguments[0],it=O;it--;)$[it-1]=arguments[it];return Ka(hi(pe)?Sd(pe):[pe],Mt($,1))},cn.cond=function km(O){var $=null==O?0:O.length,pe=Ts();return O=$?Fo(O,function(it){if("function"!=typeof it[1])throw new Pu(p);return[pe(it[0]),it[1]]}):[],dl(function(it){for(var Wt=-1;++Wt<$;){var Cn=O[Wt];if(Kt(Cn[0],this,it))return Kt(Cn[1],this,it)}})},cn.conforms=function V_(O){return function E(O){var $=xd(O);return function(pe){return P(pe,O,$)}}(h(O,1))},cn.constant=Z_,cn.countBy=sm,cn.create=function d1(O,$){var pe=Ec(O);return null==$?pe:Jd(pe,$)},cn.curry=function M_(O,$,pe){var it=ef(O,8,a,a,a,a,a,$=pe?a:$);return it.placeholder=M_.placeholder,it},cn.curryRight=function Mg(O,$,pe){var it=ef(O,16,a,a,a,a,a,$=pe?a:$);return it.placeholder=Mg.placeholder,it},cn.debounce=um,cn.defaults=N0,cn.defaultsDeep=dv,cn.defer=Og,cn.delay=ng,cn.difference=nm,cn.differenceBy=Ah,cn.differenceWith=E_,cn.drop=function $f(O,$,pe){var it=null==O?0:O.length;return it?ld(O,($=pe||$===a?1:xl($))<0?0:$,it):[]},cn.dropRight=function $_(O,$,pe){var it=null==O?0:O.length;return it?ld(O,0,($=it-($=pe||$===a?1:xl($)))<0?0:$):[]},cn.dropRightWhile=function b_(O,$){return O&&O.length?dh(O,Ts($,3),!0,!0):[]},cn.dropWhile=function Mf(O,$){return O&&O.length?dh(O,Ts($,3),!0):[]},cn.fill=function H_(O,$,pe,it){var Wt=null==O?0:O.length;return Wt?(pe&&"number"!=typeof pe&&jl(O,$,pe)&&(pe=0,it=Wt),function nt(O,$,pe,it){var Wt=O.length;for((pe=xl(pe))<0&&(pe=-pe>Wt?0:Wt+pe),(it=it===a||it>Wt?Wt:xl(it))<0&&(it+=Wt),it=pe>it?0:a1(it);pe<it;)O[pe++]=$;return O}(O,$,pe,it)):[]},cn.filter=function Sg(O,$){return(hi(O)?Gs:St)(O,Ts($,3))},cn.flatMap=function Tm(O,$){return Mt(am(O,$),1)},cn.flatMapDeep=function Of(O,$){return Mt(am(O,$),Tt)},cn.flatMapDepth=function Xm(O,$,pe){return pe=pe===a?1:xl(pe),Mt(am(O,$),pe)},cn.flatten=xp,cn.flattenDeep=function Ud(O){return null!=O&&O.length?Mt(O,Tt):[]},cn.flattenDepth=function Rp(O,$){return null!=O&&O.length?Mt(O,$=$===a?1:xl($)):[]},cn.flip=function rg(O){return ef(O,512)},cn.flow=Hm,cn.flowRight=C1,cn.fromPairs=function i_(O){for(var $=-1,pe=null==O?0:O.length,it={};++$<pe;){var Wt=O[$];it[Wt[0]]=Wt[1]}return it},cn.functions=function k0(O){return null==O?[]:$r(O,xd(O))},cn.functionsIn=function Pm(O){return null==O?[]:$r(O,mp(O))},cn.groupBy=Qc,cn.initial=function Ad(O){return null!=O&&O.length?ld(O,0,-1):[]},cn.intersection=B_,cn.intersectionBy=Sm,cn.intersectionWith=hp,cn.invert=H0,cn.invertBy=qp,cn.invokeMap=su,cn.iteratee=kg,cn.keyBy=Cg,cn.keys=xd,cn.keysIn=mp,cn.map=am,cn.mapKeys=function Af(O,$){var pe={};return $=Ts($,3),Vn(O,function(it,Wt,Cn){Nl(pe,$(it,Wt,Cn),it)}),pe},cn.mapValues=function B0(O,$){var pe={};return $=Ts($,3),Vn(O,function(it,Wt,Cn){Nl(pe,Wt,$(it,Wt,Cn))}),pe},cn.matches=function M1(O){return Da(h(O,1))},cn.matchesProperty=function O1(O,$){return ca(O,h($,1))},cn.memoize=j_,cn.merge=UE,cn.mergeWith=U0,cn.method=A1,cn.methodOf=D1,cn.mixin=$g,cn.negate=Qp,cn.nthArg=function R1(O){return O=xl(O),dl(function($){return jc($,O)})},cn.omit=YE,cn.omitBy=function jE(O,$){return _1(O,Qp(Ts($)))},cn.once=function O_(O){return Mm(2,O)},cn.orderBy=function Vl(O,$,pe,it){return null==O?[]:(hi($)||($=null==$?[]:[$]),hi(pe=it?a:pe)||(pe=null==pe?[]:[pe]),yf(O,$,pe))},cn.over=z0,cn.overArgs=A_,cn.overEvery=w1,cn.overSome=Ev,cn.partial=Ag,cn.partialRight=cm,cn.partition=Ko,cn.pick=Y0,cn.pickBy=_1,cn.property=P1,cn.propertyOf=function W0(O){return function($){return null==O?a:Ui(O,$)}},cn.pull=xh,cn.pullAll=I,cn.pullAllBy=function ne(O,$,pe){return O&&O.length&&$&&$.length?Rc(O,$,Ts(pe,2)):O},cn.pullAllWith=function T(O,$,pe){return O&&O.length&&$&&$.length?Rc(O,$,a,pe):O},cn.pullAt=z,cn.range=N1,cn.rangeRight=J0,cn.rearg=Om,cn.reject=function af(O,$){return(hi(O)?Gs:St)(O,Qp(Ts($,3)))},cn.remove=function Me(O,$){var pe=[];if(!O||!O.length)return pe;var it=-1,Wt=[],Cn=O.length;for($=Ts($,3);++it<Cn;){var lr=O[it];$(lr,it,O)&&(pe.push(lr),Wt.push(it))}return Xd(O,Wt),pe},cn.rest=function Dg(O,$){if("function"!=typeof O)throw new Pu(p);return dl(O,$=$===a?$:xl($))},cn.reverse=Ke,cn.sampleSize=function eg(O,$,pe){return $=(pe?jl(O,$,pe):$===a)?1:xl($),(hi(O)?Sc:wf)(O,$)},cn.set=function GE(O,$,pe){return null==O?O:Ed(O,$,pe)},cn.setWith=function VE(O,$,pe,it){return it="function"==typeof it?it:a,null==O?O:Ed(O,$,pe,it)},cn.shuffle=function U_(O){return(hi(O)?Tc:up)(O)},cn.slice=function gn(O,$,pe){var it=null==O?0:O.length;return it?(pe&&"number"!=typeof pe&&jl(O,$,pe)?($=0,pe=it):($=null==$?0:xl($),pe=pe===a?it:xl(pe)),ld(O,$,pe)):[]},cn.sortBy=ov,cn.sortedUniq=function Ss(O){return O&&O.length?Bp(O):[]},cn.sortedUniqBy=function jo(O,$){return O&&O.length?Bp(O,Ts($,2)):[]},cn.split=function Fg(O,$,pe){return pe&&"number"!=typeof pe&&jl(O,$,pe)&&($=pe=a),(pe=pe===a?Yt:pe>>>0)?(O=gu(O))&&("string"==typeof $||null!=$&&!wg($))&&!($=oc($))&&Yu(O)?Au(_n(O),0,pe):O.split($,pe):[]},cn.spread=function ig(O,$){if("function"!=typeof O)throw new Pu(p);return $=null==$?0:ka(xl($),0),dl(function(pe){var it=pe[$],Wt=Au(pe,0,$);return it&&Ka(Wt,it),Kt(O,this,Wt)})},cn.tail=function ia(O){var $=null==O?0:O.length;return $?ld(O,1,$):[]},cn.take=function y(O,$,pe){return O&&O.length?ld(O,0,($=pe||$===a?1:xl($))<0?0:$):[]},cn.takeRight=function D(O,$,pe){var it=null==O?0:O.length;return it?ld(O,($=it-($=pe||$===a?1:xl($)))<0?0:$,it):[]},cn.takeRightWhile=function Y(O,$){return O&&O.length?dh(O,Ts($,3),!1,!0):[]},cn.takeWhile=function Ee(O,$){return O&&O.length?dh(O,Ts($,3)):[]},cn.tap=function Ha(O,$){return $(O),O},cn.throttle=function qv(O,$,pe){var it=!0,Wt=!0;if("function"!=typeof O)throw new Pu(p);return Wu(pe)&&(it="leading"in pe?!!pe.leading:it,Wt="trailing"in pe?!!pe.trailing:Wt),um(O,$,{leading:it,maxWait:$,trailing:Wt})},cn.thru=vs,cn.toArray=a_,cn.toPairs=Ng,cn.toPairsIn=ZE,cn.toPath=function Tv(O){return hi(O)?Fo(O,sf):Xp(O)?[O]:Sd(Zp(gu(O)))},cn.toPlainObject=Pg,cn.transform=function g1(O,$,pe){var it=hi(O),Wt=it||au(O)||Dm(O);if($=Ts($,4),null==pe){var Cn=O&&O.constructor;pe=Wt?it?new Cn:[]:Wu(O)&&uf(Cn)?Ec(pa(O)):{}}return(Wt?oi:Vn)(O,function(lr,Ir,Kr){return $(pe,lr,Ir,Kr)}),pe},cn.unary=function sv(O){return C_(O,1)},cn.union=ze,cn.unionBy=At,cn.unionWith=tn,cn.uniq=function Tn(O){return O&&O.length?bd(O):[]},cn.uniqBy=function ar(O,$){return O&&O.length?bd(O,Ts($,2)):[]},cn.uniqWith=function li(O,$){return $="function"==typeof $?$:a,O&&O.length?bd(O,a,$):[]},cn.unset=function zE(O,$){return null==O||Up(O,$)},cn.unzip=Ho,cn.unzipWith=Hs,cn.update=function j0(O,$,pe){return null==O?O:ch(O,$,Zf(pe))},cn.updateWith=function G0(O,$,pe,it){return it="function"==typeof it?it:a,null==O?O:ch(O,$,Zf(pe),it)},cn.values=Ig,cn.valuesIn=function l_(O){return null==O?[]:iu(O,mp(O))},cn.without=po,cn.words=hm,cn.wrap=function Bf(O,$){return Ag(Zf($),O)},cn.xor=fs,cn.xorBy=oa,cn.xorWith=Xs,cn.zip=Qr,cn.zipObject=function Fr(O,$){return bf(O||[],$||[],hu)},cn.zipObjectDeep=function Zr(O,$){return bf(O||[],$||[],Ed)},cn.zipWith=Hi,cn.entries=Ng,cn.entriesIn=ZE,cn.extend=l1,cn.extendWith=Rm,$g(cn,cn),cn.add=qE,cn.attempt=_m,cn.camelCase=y1,cn.capitalize=hv,cn.ceil=eb,cn.clamp=function AC(O,$,pe){return pe===a&&(pe=$,$=a),pe!==a&&(pe=(pe=wh(pe))==pe?pe:0),$!==a&&($=($=wh($))==$?$:0),ic(wh(O),$,pe)},cn.clone=function lv(O){return h(O,4)},cn.cloneDeep=function J(O){return h(O,5)},cn.cloneDeepWith=function U(O,$){return h(O,5,$="function"==typeof $?$:a)},cn.cloneWith=function F(O,$){return h(O,4,$="function"==typeof $?$:a)},cn.conformsTo=function Te(O,$){return null==$||P(O,$,xd($))},cn.deburr=E1,cn.defaultTo=function $m(O,$){return null==O||O!=O?$:O},cn.divide=tb,cn.endsWith=function JE(O,$,pe){O=gu(O),$=oc($);var it=O.length,Wt=pe=pe===a?it:ic(xl(pe),0,it);return(pe-=$.length)>=0&&O.slice(pe,Wt)==$},cn.eq=ft,cn.escape=function b1(O){return(O=gu(O))&&Fe.test(O)?O.replace(st,du):O},cn.escapeRegExp=function _v(O){return(O=gu(O))&&yt.test(O)?O.replace(_t,"\\$&"):O},cn.every=function bg(O,$,pe){var it=hi(O)?as:Ye;return pe&&jl(O,$,pe)&&($=a),it(O,Ts($,3))},cn.find=rv,cn.findIndex=tp,cn.findKey=function I0(O,$){return Si(O,Ts($,3),Vn)},cn.findLast=iv,cn.findLastIndex=Dp,cn.findLastKey=function F0(O,$){return Si(O,Ts($,3),fr)},cn.floor=q0,cn.forEach=Km,cn.forEachRight=Tg,cn.forIn=function f1(O,$){return null==O?O:fn(O,Ts($,3),mp)},cn.forInRight=function wm(O,$){return null==O?O:jn(O,Ts($,3),mp)},cn.forOwn=function p1(O,$){return O&&Vn(O,Ts($,3))},cn.forOwnRight=function L0(O,$){return O&&fr(O,Ts($,3))},cn.get=fv,cn.gt=Zt,cn.gte=rr,cn.has=function $0(O,$){return null!=O&&k_(O,$,qs)},cn.hasIn=pv,cn.head=Jp,cn.identity=np,cn.includes=function Pc(O,$,pe,it){O=zo(O)?O:Ig(O),pe=pe&&!it?xl(pe):0;var Wt=O.length;return pe<0&&(pe=ka(Wt+pe,0)),Am(O)?pe<=Wt&&O.indexOf($,pe)>-1:!!Wt&&ja(O,$,pe)>-1},cn.indexOf=function S_(O,$,pe){var it=null==O?0:O.length;if(!it)return-1;var Wt=null==pe?0:xl(pe);return Wt<0&&(Wt=ka(it+Wt,0)),ja(O,$,Wt)},cn.inRange=function WE(O,$,pe){return $=Kp($),pe===a?(pe=$,$=0):pe=Kp(pe),function $a(O,$,pe){return O>=rl($,pe)&&O<ka($,pe)}(O=wh(O),$,pe)},cn.invoke=h1,cn.isArguments=xr,cn.isArray=hi,cn.isArrayBuffer=ns,cn.isArrayLike=zo,cn.isArrayLikeObject=As,cn.isBoolean=function ml(O){return!0===O||!1===O||hc(O)&&yo(O)==Fn},cn.isBuffer=au,cn.isDate=Xl,cn.isElement=function xu(O){return hc(O)&&1===O.nodeType&&!dm(O)},cn.isEmpty=function Dd(O){if(null==O)return!0;if(zo(O)&&(hi(O)||"string"==typeof O||"function"==typeof O.splice||au(O)||Dm(O)||xr(O)))return!O.length;var $=zu(O);if($==Ur||$==no)return!O.size;if(rf(O))return!ln(O).length;for(var pe in O)if(La.call(O,pe))return!1;return!0},cn.isEqual=function lf(O,$){return ku(O,$)},cn.isEqualWith=function cd(O,$,pe){var it=(pe="function"==typeof pe?pe:a)?pe(O,$):a;return it===a?ku(O,$,a,pe):!!it},cn.isError=s_,cn.isFinite=function G_(O){return"number"==typeof O&&Ma(O)},cn.isFunction=uf,cn.isInteger=dd,cn.isLength=_p,cn.isMap=e1,cn.isMatch=function uv(O,$){return O===$||Qd(O,$,jp($))},cn.isMatchWith=function t1(O,$,pe){return pe="function"==typeof pe?pe:a,Qd(O,$,jp($),pe)},cn.isNaN=function R0(O){return Rg(O)&&O!=+O},cn.isNative=function xg(O){if(nf(O))throw new $s("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return il(O)},cn.isNil=function w0(O){return null==O},cn.isNull=function cv(O){return null===O},cn.isNumber=Rg,cn.isObject=Wu,cn.isObjectLike=hc,cn.isPlainObject=dm,cn.isRegExp=wg,cn.isSafeInteger=function BE(O){return dd(O)&&O>=-We&&O<=We},cn.isSet=P0,cn.isString=Am,cn.isSymbol=Xp,cn.isTypedArray=Dm,cn.isUndefined=function n1(O){return O===a},cn.isWeakMap=function r1(O){return hc(O)&&zu(O)==vn},cn.isWeakSet=function i1(O){return hc(O)&&"[object WeakSet]"==yo(O)},cn.join=function Dh(O,$){return null==O?"":Nu.call(O,$)},cn.kebabCase=fd,cn.last=Vc,cn.lastIndexOf=function rm(O,$,pe){var it=null==O?0:O.length;if(!it)return-1;var Wt=it;return pe!==a&&(Wt=(Wt=xl(pe))<0?ka(it+Wt,0):rl(Wt,it-1)),$==$?function It(Yn,Rr,br){for(var fo=br+1;fo--;)if(Yn[fo]===Rr)return fo;return fo}(O,$,Wt):Jo(O,Ku,Wt,!0)},cn.lowerCase=fm,cn.lowerFirst=Nm,cn.lt=o1,cn.lte=s1,cn.max=function I1(O){return O&&O.length?xe(O,np,Vs):a},cn.maxBy=function nb(O,$){return O&&O.length?xe(O,Ts($,2),Vs):a},cn.mean=function ey(O){return Nc(O,np)},cn.meanBy=function z_(O,$){return Nc(O,Ts($,2))},cn.min=function ty(O){return O&&O.length?xe(O,np,Ai):a},cn.minBy=function Cv(O,$){return O&&O.length?xe(O,Ts($,2),Ai):a},cn.stubArray=Hg,cn.stubFalse=bv,cn.stubObject=function Q0(){return{}},cn.stubString=function KE(){return""},cn.stubTrue=function X0(){return!0},cn.multiply=ny,cn.nth=function T_(O,$){return O&&O.length?jc(O,xl($)):a},cn.noConflict=function x1(){return Fl._===this&&(Fl._=Ta),this},cn.noop=yv,cn.now=Cm,cn.pad=function V0(O,$,pe){O=gu(O);var it=($=xl($))?Ht(O):0;if(!$||it>=$)return O;var Wt=($-it)/2;return Sp(Ca(Wt),pe)+O+Sp(Lo(Wt),pe)},cn.padEnd=function QE(O,$,pe){O=gu(O);var it=($=xl($))?Ht(O):0;return $&&it<$?O+Sp($-it,pe):O},cn.padStart=function XE(O,$,pe){O=gu(O);var it=($=xl($))?Ht(O):0;return $&&it<$?Sp($-it,pe)+O:O},cn.parseInt=function S1(O,$,pe){return pe||null==$?$=0:$&&($=+$),yc(gu(O).replace(Vt,""),$||0)},cn.random=function v1(O,$,pe){if(pe&&"boolean"!=typeof pe&&jl(O,$,pe)&&($=pe=a),pe===a&&("boolean"==typeof $?(pe=$,$=a):"boolean"==typeof O&&(pe=O,O=a)),O===a&&$===a?(O=0,$=1):(O=Kp(O),$===a?($=O,O=0):$=Kp($)),O>$){var it=O;O=$,$=it}if(pe||O%1||$%1){var Wt=ju();return rl(O+Wt*($-O+Qu("1e-"+((Wt+"").length-1))),$)}return Bd(O,$)},cn.reduce=function Il(O,$,pe){var it=hi(O)?al:aa,Wt=arguments.length<3;return it(O,Ts($,4),pe,Wt,de)},cn.reduceRight=function qm(O,$,pe){var it=hi(O)?Bs:aa,Wt=arguments.length<3;return it(O,Ts($,4),pe,Wt,ve)},cn.repeat=function T1(O,$,pe){return $=(pe?jl(O,$,pe):$===a)?1:xl($),Hp(gu(O),$)},cn.replace=function mv(){var O=arguments,$=gu(O[0]);return O.length<3?$:$.replace(O[1],O[2])},cn.result=function m1(O,$,pe){var it=-1,Wt=($=Nf($,O)).length;for(Wt||(Wt=1,O=a);++it<Wt;){var Cn=null==O?a:O[sf($[it])];Cn===a&&(it=Wt,Cn=pe),O=uf(Cn)?Cn.call(O):Cn}return O},cn.round=F1,cn.runInContext=Yn,cn.sample=function Xc(O){return(hi(O)?Ql:Bh)(O)},cn.size=function wp(O){if(null==O)return 0;if(zo(O))return Am(O)?Ht(O):O.length;var $=zu(O);return $==Ur||$==no?O.size:ln(O).length},cn.snakeCase=pm,cn.some=function tg(O,$,pe){var it=hi(O)?mt:Uh;return pe&&jl(O,$,pe)&&($=a),it(O,Ts($,3))},cn.sortedIndex=function yr(O,$){return uh(O,$)},cn.sortedIndexBy=function Nr(O,$,pe){return Pf(O,$,Ts(pe,2))},cn.sortedIndexOf=function vi(O,$){var pe=null==O?0:O.length;if(pe){var it=uh(O,$);if(it<pe&&ft(O[it],$))return it}return-1},cn.sortedLastIndex=function di(O,$){return uh(O,$,!0)},cn.sortedLastIndexBy=function ts(O,$,pe){return Pf(O,$,Ts(pe,2),!0)},cn.sortedLastIndexOf=function Do(O,$){if(null!=O&&O.length){var it=uh(O,$,!0)-1;if(ft(O[it],$))return it}return-1},cn.startCase=Im,cn.startsWith=function Z0(O,$,pe){return O=gu(O),pe=null==pe?0:ic(xl(pe),0,O.length),$=oc($),O.slice(pe,pe+$.length)==$},cn.subtract=Bg,cn.sum=function ry(O){return O&&O.length?Es(O,np):0},cn.sumBy=function L1(O,$){return O&&O.length?Es(O,Ts($,2)):0},cn.template=function Fm(O,$,pe){var it=cn.templateSettings;pe&&jl(O,$,pe)&&($=a),O=gu(O),$=Rm({},$,it,Kh);var Ir,Kr,Wt=Rm({},$.imports,it.imports,Kh),Cn=xd(Wt),lr=iu(Wt,Cn),oo=0,ho=$.interpolate||ao,So="__p += '",bs=zc(($.escape||ao).source+"|"+ho.source+"|"+(ho===Ut?Ri:ao).source+"|"+($.evaluate||ao).source+"|$","g"),la="//# sourceURL="+(La.call($,"sourceURL")?($.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++_s+"]")+"\n";O.replace(bs,function(Na,Hl,ql,Yf,cf,rp){return ql||(ql=Yf),So+=O.slice(oo,rp).replace($i,nd),Hl&&(Ir=!0,So+="' +\n__e("+Hl+") +\n'"),cf&&(Kr=!0,So+="';\n"+cf+";\n__p += '"),ql&&(So+="' +\n((__t = ("+ql+")) == null ? '' : __t) +\n'"),oo=rp+Na.length,Na}),So+="';\n";var ba=La.call($,"variable")&&$.variable;if(ba){if(Qo.test(ba))throw new $s("Invalid `variable` option passed into `_.template`")}else So="with (obj) {\n"+So+"\n}\n";So=(Kr?So.replace(Le,""):So).replace(Re,"$1").replace(Se,"$1;"),So="function("+(ba||"obj")+") {\n"+(ba?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(Ir?", __e = _.escape":"")+(Kr?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+So+"return __p\n}";var Rl=_m(function(){return ls(Cn,la+"return "+So).apply(a,lr)});if(Rl.source=So,s_(Rl))throw Rl;return Rl},cn.times=function Sv(O,$){if((O=xl(O))<1||O>We)return[];var pe=Yt,it=rl(O,Yt);$=Ts($),O-=Yt;for(var Wt=qu(it,$);++pe<O;)$(pe);return Wt},cn.toFinite=Kp,cn.toInteger=xl,cn.toLength=a1,cn.toLower=function gv(O){return gu(O).toLowerCase()},cn.toNumber=wh,cn.toSafeInteger=function xm(O){return O?ic(xl(O),-We,We):0===O?O:0},cn.toString=gu,cn.toUpper=function u_(O){return gu(O).toUpperCase()},cn.trim=function sg(O,$,pe){if((O=gu(O))&&(pe||$===a))return lu(O);if(!O||!($=oc($)))return O;var it=_n(O),Wt=_n($);return Au(it,bu(it,Wt),td(it,Wt)+1).join("")},cn.trimEnd=function Uf(O,$,pe){if((O=gu(O))&&(pe||$===a))return O.slice(0,Pn(O)+1);if(!O||!($=oc($)))return O;var it=_n(O);return Au(it,0,td(it,_n($))+1).join("")},cn.trimStart=function eh(O,$,pe){if((O=gu(O))&&(pe||$===a))return O.replace(Vt,"");if(!O||!($=oc($)))return O;var it=_n(O);return Au(it,bu(it,_n($))).join("")},cn.truncate=function Lg(O,$){var pe=30,it="...";if(Wu($)){var Wt="separator"in $?$.separator:Wt;pe="length"in $?xl($.length):pe,it="omission"in $?oc($.omission):it}var Cn=(O=gu(O)).length;if(Yu(O)){var lr=_n(O);Cn=lr.length}if(pe>=Cn)return O;var Ir=pe-Ht(it);if(Ir<1)return it;var Kr=lr?Au(lr,0,Ir).join(""):O.slice(0,Ir);if(Wt===a)return Kr+it;if(lr&&(Ir+=Kr.length-Ir),wg(Wt)){if(O.slice(Ir).search(Wt)){var oo,ho=Kr;for(Wt.global||(Wt=zc(Wt.source,gu(ko.exec(Wt))+"g")),Wt.lastIndex=0;oo=Wt.exec(ho);)var So=oo.index;Kr=Kr.slice(0,So===a?Ir:So)}}else if(O.indexOf(oc(Wt),Ir)!=Ir){var bs=Kr.lastIndexOf(Wt);bs>-1&&(Kr=Kr.slice(0,bs))}return Kr+it},cn.unescape=function th(O){return(O=gu(O))&&nn.test(O)?O.replace(dt,Tr):O},cn.uniqueId=function K0(O){var $=++kd;return gu(O)+$},cn.upperCase=vv,cn.upperFirst=D_,cn.each=Km,cn.eachRight=Tg,cn.first=Jp,$g(cn,function(){var O={};return Vn(cn,function($,pe){La.call(cn.prototype,pe)||(O[pe]=$)}),O}(),{chain:!1}),cn.VERSION="4.17.21",oi(["bind","bindKey","curry","curryRight","partial","partialRight"],function(O){cn[O].placeholder=cn}),oi(["drop","take"],function(O,$){cl.prototype[O]=function(pe){pe=pe===a?1:ka(xl(pe),0);var it=this.__filtered__&&!$?new cl(this):this.clone();return it.__filtered__?it.__takeCount__=rl(pe,it.__takeCount__):it.__views__.push({size:rl(pe,Yt),type:O+(it.__dir__<0?"Right":"")}),it},cl.prototype[O+"Right"]=function(pe){return this.reverse()[O](pe).reverse()}}),oi(["filter","map","takeWhile"],function(O,$){var pe=$+1,it=1==pe||3==pe;cl.prototype[O]=function(Wt){var Cn=this.clone();return Cn.__iteratees__.push({iteratee:Ts(Wt,3),type:pe}),Cn.__filtered__=Cn.__filtered__||it,Cn}}),oi(["head","last"],function(O,$){var pe="take"+($?"Right":"");cl.prototype[O]=function(){return this[pe](1).value()[0]}}),oi(["initial","tail"],function(O,$){var pe="drop"+($?"":"Right");cl.prototype[O]=function(){return this.__filtered__?new cl(this):this[pe](1)}}),cl.prototype.compact=function(){return this.filter(np)},cl.prototype.find=function(O){return this.filter(O).head()},cl.prototype.findLast=function(O){return this.reverse().find(O)},cl.prototype.invokeMap=dl(function(O,$){return"function"==typeof O?new cl(this):this.map(function(pe){return Gl(pe,O,$)})}),cl.prototype.reject=function(O){return this.filter(Qp(Ts(O)))},cl.prototype.slice=function(O,$){O=xl(O);var pe=this;return pe.__filtered__&&(O>0||$<0)?new cl(pe):(O<0?pe=pe.takeRight(-O):O&&(pe=pe.drop(O)),$!==a&&(pe=($=xl($))<0?pe.dropRight(-$):pe.take($-O)),pe)},cl.prototype.takeRightWhile=function(O){return this.reverse().takeWhile(O).reverse()},cl.prototype.toArray=function(){return this.take(Yt)},Vn(cl.prototype,function(O,$){var pe=/^(?:filter|find|map|reject)|While$/.test($),it=/^(?:head|last)$/.test($),Wt=cn[it?"take"+("last"==$?"Right":""):$],Cn=it||/^find/.test($);!Wt||(cn.prototype[$]=function(){var lr=this.__wrapped__,Ir=it?[1]:arguments,Kr=lr instanceof cl,oo=Ir[0],ho=Kr||hi(lr),So=function(Hl){var ql=Wt.apply(cn,Ka([Hl],Ir));return it&&bs?ql[0]:ql};ho&&pe&&"function"==typeof oo&&1!=oo.length&&(Kr=ho=!1);var bs=this.__chain__,la=!!this.__actions__.length,ba=Cn&&!bs,Rl=Kr&&!la;if(!Cn&&ho){lr=Rl?lr:new cl(this);var Na=O.apply(lr,Ir);return Na.__actions__.push({func:vs,args:[So],thisArg:a}),new qa(Na,bs)}return ba&&Rl?O.apply(this,Ir):(Na=this.thru(So),ba?it?Na.value()[0]:Na.value():Na)})}),oi(["pop","push","shift","sort","splice","unshift"],function(O){var $=Su[O],pe=/^(?:push|sort|unshift)$/.test(O)?"tap":"thru",it=/^(?:pop|shift)$/.test(O);cn.prototype[O]=function(){var Wt=arguments;if(it&&!this.__chain__){var Cn=this.value();return $.apply(hi(Cn)?Cn:[],Wt)}return this[pe](function(lr){return $.apply(hi(lr)?lr:[],Wt)})}}),Vn(cl.prototype,function(O,$){var pe=cn[$];if(pe){var it=pe.name+"";La.call(Ml,it)||(Ml[it]=[]),Ml[it].push({name:$,func:pe})}}),Ml[sc(a,2).name]=[{name:"wrapper",func:a}],cl.prototype.clone=function xf(){var O=new cl(this.__wrapped__);return O.__actions__=Sd(this.__actions__),O.__dir__=this.__dir__,O.__filtered__=this.__filtered__,O.__iteratees__=Sd(this.__iteratees__),O.__takeCount__=this.__takeCount__,O.__views__=Sd(this.__views__),O},cl.prototype.reverse=function Bc(){if(this.__filtered__){var O=new cl(this);O.__dir__=-1,O.__filtered__=!0}else(O=this.clone()).__dir__*=-1;return O},cl.prototype.value=function vd(){var O=this.__wrapped__.value(),$=this.__dir__,pe=hi(O),it=$<0,Wt=pe?O.length:0,Cn=function Jf(O,$,pe){for(var it=-1,Wt=pe.length;++it<Wt;){var Cn=pe[it],lr=Cn.size;switch(Cn.type){case"drop":O+=lr;break;case"dropRight":$-=lr;break;case"take":$=rl($,O+lr);break;case"takeRight":O=ka(O,$-lr)}}return{start:O,end:$}}(0,Wt,this.__views__),lr=Cn.start,Ir=Cn.end,Kr=Ir-lr,oo=it?Ir:lr-1,ho=this.__iteratees__,So=ho.length,bs=0,la=rl(Kr,this.__takeCount__);if(!pe||!it&&Wt==Kr&&la==Kr)return f_(O,this.__actions__);var ba=[];e:for(;Kr--&&bs<la;){for(var Rl=-1,Na=O[oo+=$];++Rl<So;){var Hl=ho[Rl],Yf=Hl.type,cf=(0,Hl.iteratee)(Na);if(2==Yf)Na=cf;else if(!cf){if(1==Yf)continue e;break e}}ba[bs++]=Na}return ba},cn.prototype.at=Pa,cn.prototype.chain=function Za(){return io(this)},cn.prototype.commit=function va(){return new qa(this.value(),this.__chain__)},cn.prototype.next=function Hf(){this.__values__===a&&(this.__values__=a_(this.value()));var O=this.__index__>=this.__values__.length;return{done:O,value:O?a:this.__values__[this.__index__++]}},cn.prototype.plant=function o_(O){for(var $,pe=this;pe instanceof Iu;){var it=v_(pe);it.__index__=0,it.__values__=a,$?Wt.__wrapped__=it:$=it;var Wt=it;pe=pe.__wrapped__}return Wt.__wrapped__=O,$},cn.prototype.reverse=function om(){var O=this.__wrapped__;if(O instanceof cl){var $=O;return this.__actions__.length&&($=new cl(this)),($=$.reverse()).__actions__.push({func:vs,args:[Ke],thisArg:a}),new qa($,this.__chain__)}return this.thru(Ke)},cn.prototype.toJSON=cn.prototype.valueOf=cn.prototype.value=function Qm(){return f_(this.__wrapped__,this.__actions__)},cn.prototype.first=cn.prototype.head,ht&&(cn.prototype[ht]=function im(){return this}),cn}();Fl._=Pr,(r=function(){return Pr}.call(b,i,b,v))!==a&&(v.exports=r)}.call(this)},97425:(v,b,i)=>{var r=i(93177);function f(u,e){if("function"!=typeof u||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var p=function(){var g=arguments,S=e?e.apply(this,g):g[0],M=p.cache;if(M.has(S))return M.get(S);var w=u.apply(this,g);return p.cache=M.set(S,w)||M,w};return p.cache=new(f.Cache||r),p}f.Cache=r,v.exports=f},3912:(v,b,i)=>{var r=i(9085),f=i(30906)(function(u,e,p){r(u,e,p)});v.exports=f},30765:(v,b,i)=>{var r=i(27038);v.exports=function(){return r.Date.now()}},12482:(v,b,i)=>{var r=i(14992),a=i(77007),f=i(72064),u=i(64667),e=i(11694),p=i(925),g=i(10058),S=i(51675),B=g(function(W,j){var q={};if(null==W)return q;var ue=!1;j=r(j,function(H){return H=u(H,W),ue||(ue=H.length>1),H}),e(W,S(W),q),ue&&(q=a(q,7,p));for(var re=j.length;re--;)f(q,j[re]);return q});v.exports=B},63354:(v,b,i)=>{var r=i(68840),a=i(59866),f=i(99743),u=i(82773);v.exports=function e(p){return f(p)?r(u(p)):a(p)}},86101:(v,b,i)=>{var r=i(89731),a=i(59026),f=i(5245),u=i(85105),e=i(81690);v.exports=function p(g,S,M){var w=e(g)?r:u,x=arguments.length<3;return w(g,f(S,4),M,x,a)}},12666:(v,b,i)=>{var r=i(32773);v.exports=function a(f,u,e){return null==f?f:r(f,u,e)}},52190:(v,b,i)=>{var r=i(8141),a=i(5245),f=i(37834),u=i(81690),e=i(71100);v.exports=function p(g,S,M){var w=u(g)?r:f;return M&&e(g,S,M)&&(S=void 0),w(g,a(S,3))}},65336:v=>{v.exports=function b(){return[]}},61711:v=>{v.exports=function b(){return!1}},5152:(v,b,i)=>{var r=i(45038),a=1/0;v.exports=function u(e){return e?(e=r(e))===a||e===-a?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},32781:(v,b,i)=>{var r=i(5152);v.exports=function a(f){var u=r(f),e=u%1;return u==u?e?u-e:u:0}},69883:(v,b,i)=>{var r=i(41233);v.exports=function a(f){return r(f).toLowerCase()}},45038:(v,b,i)=>{var r=i(13743),a=i(53867),f=i(7786),e=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,g=/^0o[0-7]+$/i,S=parseInt;v.exports=function M(w){if("number"==typeof w)return w;if(f(w))return NaN;if(a(w)){var x="function"==typeof w.valueOf?w.valueOf():w;w=a(x)?x+"":x}if("string"!=typeof w)return 0===w?w:+w;w=r(w);var B=p.test(w);return B||g.test(w)?S(w.slice(2),B?2:8):e.test(w)?NaN:+w}},31413:(v,b,i)=>{var r=i(11694),a=i(42970);v.exports=function f(u){return r(u,a(u))}},41233:(v,b,i)=>{var r=i(68166);v.exports=function a(f){return null==f?"":r(f)}},93890:(v,b,i)=>{var a=i(66803)("toUpperCase");v.exports=a},96590:(v,b,i)=>{var r=i(54561),a=i(59316),f=i(41233),u=i(58863);v.exports=function e(p,g,S){return p=f(p),void 0===(g=S?void 0:g)?a(p)?u(p):r(p):p.match(g)||[]}},31507:(v,b,i)=>{var r=i(23898),a=i(25687);v.exports=function f(u,e){return a(u||[],e||[],r)}},74538:(v,b,i)=>{"use strict";var r=i(7856),a=i(11926);b.highlight=u,b.highlightAuto=function e(re,H){var Ce,ce,Be,Ve,se=H||{},ae=se.subset||r.listLanguages(),ie=se.prefix,fe=ae.length,he=-1;if(null==ie&&(ie=f),"string"!=typeof re)throw a("Expected `string` for value, got `%s`",re);for(ce={relevance:0,language:null,value:[]},Ce={relevance:0,language:null,value:[]};++he<fe;)r.getLanguage(Ve=ae[he])&&((Be=u(Ve,re,H)).language=Ve,Be.relevance>ce.relevance&&(ce=Be),Be.relevance>Ce.relevance&&(ce=Ce,Ce=Be));return ce.language&&(Ce.secondBest=ce),Ce},b.registerLanguage=function p(re,H){r.registerLanguage(re,H)},b.listLanguages=function g(){return r.listLanguages()},b.registerAlias=function S(re,H){var ae,se=re;for(ae in H&&((se={})[re]=H),se)r.registerAliases(se[ae],{languageName:ae})},M.prototype.addText=function B(re){var se,ae,H=this.stack;""!==re&&((ae=(se=H[H.length-1]).children[se.children.length-1])&&"text"===ae.type?ae.value+=re:se.children.push({type:"text",value:re}))},M.prototype.addKeyword=function w(re,H){this.openNode(H),this.addText(re),this.closeNode()},M.prototype.addSublanguage=function x(re,H){var se=this.stack,ae=se[se.length-1],ie=re.rootNode.children;ae.children=ae.children.concat(H?{type:"element",tagName:"span",properties:{className:[H]},children:ie}:ie)},M.prototype.openNode=function W(re){var H=this.stack,ie={type:"element",tagName:"span",properties:{className:[this.options.classPrefix+re]},children:[]};H[H.length-1].children.push(ie),H.push(ie)},M.prototype.closeNode=function j(){this.stack.pop()},M.prototype.closeAllNodes=ue,M.prototype.finalize=ue,M.prototype.toHTML=function q(){return""};var f="hljs-";function u(re,H,se){var he,ae=r.configure({}),fe=(se||{}).prefix;if("string"!=typeof re)throw a("Expected `string` for name, got `%s`",re);if(!r.getLanguage(re))throw a("Unknown language: `%s` is not registered",re);if("string"!=typeof H)throw a("Expected `string` for value, got `%s`",H);if(null==fe&&(fe=f),r.configure({__emitter:M,classPrefix:fe}),he=r.highlight(H,{language:re,ignoreIllegals:!0}),r.configure(ae||{}),he.errorRaised)throw he.errorRaised;return{relevance:he.relevance,language:he.language,value:he.emitter.rootNode.children}}function M(re){this.options=re,this.rootNode={children:[]},this.stack=[this.rootNode]}function ue(){}},26431:function(v,b,i){!function(r){"use strict";r.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(f){return/^nm$/i.test(f)},meridiem:function(f,u,e){return f<12?e?"vm":"VM":e?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[M\xf4re om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(f){return f+(1===f||8===f||f>=20?"ste":"de")},week:{dow:1,doy:4}})}(i(16738))},1616:function(v,b,i){!function(r){"use strict";var a=function(g){return 0===g?0:1===g?1:2===g?2:g%100>=3&&g%100<=10?3:g%100>=11?4:5},f={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},u=function(g){return function(S,M,w,x){var B=a(S),W=f[g][a(S)];return 2===B&&(W=W[M?0:1]),W.replace(/%d/i,S)}},e=["\u062c\u0627\u0646\u0641\u064a","\u0641\u064a\u0641\u0631\u064a","\u0645\u0627\u0631\u0633","\u0623\u0641\u0631\u064a\u0644","\u0645\u0627\u064a","\u062c\u0648\u0627\u0646","\u062c\u0648\u064a\u0644\u064a\u0629","\u0623\u0648\u062a","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];r.defineLocale("ar-dz",{months:e,monthsShort:e,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(g){return"\u0645"===g},meridiem:function(g,S,M){return g<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:u("s"),ss:u("s"),m:u("m"),mm:u("m"),h:u("h"),hh:u("h"),d:u("d"),dd:u("d"),M:u("M"),MM:u("M"),y:u("y"),yy:u("y")},postformat:function(g){return g.replace(/,/g,"\u060c")},week:{dow:0,doy:4}})}(i(16738))},9759:function(v,b,i){!function(r){"use strict";r.defineLocale("ar-kw",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062a\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062a\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:0,doy:12}})}(i(16738))},43160:function(v,b,i){!function(r){"use strict";var a={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},f=function(S){return 0===S?0:1===S?1:2===S?2:S%100>=3&&S%100<=10?3:S%100>=11?4:5},u={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},e=function(S){return function(M,w,x,B){var W=f(M),j=u[S][f(M)];return 2===W&&(j=j[w?0:1]),j.replace(/%d/i,M)}},p=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];r.defineLocale("ar-ly",{months:p,monthsShort:p,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(S){return"\u0645"===S},meridiem:function(S,M,w){return S<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:e("s"),ss:e("s"),m:e("m"),mm:e("m"),h:e("h"),hh:e("h"),d:e("d"),dd:e("d"),M:e("M"),MM:e("M"),y:e("y"),yy:e("y")},preparse:function(S){return S.replace(/\u060c/g,",")},postformat:function(S){return S.replace(/\d/g,function(M){return a[M]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(i(16738))},62551:function(v,b,i){!function(r){"use strict";r.defineLocale("ar-ma",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648\u0632_\u063a\u0634\u062a_\u0634\u062a\u0646\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0646\u0628\u0631_\u062f\u062c\u0646\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0627\u062d\u062f_\u0627\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}})}(i(16738))},79989:function(v,b,i){!function(r){"use strict";var a={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},f={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"};r.defineLocale("ar-sa",{months:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u064a\u0646\u0627\u064a\u0631_\u0641\u0628\u0631\u0627\u064a\u0631_\u0645\u0627\u0631\u0633_\u0623\u0628\u0631\u064a\u0644_\u0645\u0627\u064a\u0648_\u064a\u0648\u0646\u064a\u0648_\u064a\u0648\u0644\u064a\u0648_\u0623\u063a\u0633\u0637\u0633_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(e){return"\u0645"===e},meridiem:function(e,p,g){return e<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},preparse:function(e){return e.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(p){return f[p]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]}).replace(/,/g,"\u060c")},week:{dow:0,doy:6}})}(i(16738))},6962:function(v,b,i){!function(r){"use strict";r.defineLocale("ar-tn",{months:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),monthsShort:"\u062c\u0627\u0646\u0641\u064a_\u0641\u064a\u0641\u0631\u064a_\u0645\u0627\u0631\u0633_\u0623\u0641\u0631\u064a\u0644_\u0645\u0627\u064a_\u062c\u0648\u0627\u0646_\u062c\u0648\u064a\u0644\u064a\u0629_\u0623\u0648\u062a_\u0633\u0628\u062a\u0645\u0628\u0631_\u0623\u0643\u062a\u0648\u0628\u0631_\u0646\u0648\u0641\u0645\u0628\u0631_\u062f\u064a\u0633\u0645\u0628\u0631".split("_"),weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u0627 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0644\u0649 \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0641\u064a %s",past:"\u0645\u0646\u0630 %s",s:"\u062b\u0648\u0627\u0646",ss:"%d \u062b\u0627\u0646\u064a\u0629",m:"\u062f\u0642\u064a\u0642\u0629",mm:"%d \u062f\u0642\u0627\u0626\u0642",h:"\u0633\u0627\u0639\u0629",hh:"%d \u0633\u0627\u0639\u0627\u062a",d:"\u064a\u0648\u0645",dd:"%d \u0623\u064a\u0627\u0645",M:"\u0634\u0647\u0631",MM:"%d \u0623\u0634\u0647\u0631",y:"\u0633\u0646\u0629",yy:"%d \u0633\u0646\u0648\u0627\u062a"},week:{dow:1,doy:4}})}(i(16738))},81286:function(v,b,i){!function(r){"use strict";var a={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},f={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},u=function(M){return 0===M?0:1===M?1:2===M?2:M%100>=3&&M%100<=10?3:M%100>=11?4:5},e={s:["\u0623\u0642\u0644 \u0645\u0646 \u062b\u0627\u0646\u064a\u0629","\u062b\u0627\u0646\u064a\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062b\u0627\u0646\u064a\u062a\u0627\u0646","\u062b\u0627\u0646\u064a\u062a\u064a\u0646"],"%d \u062b\u0648\u0627\u0646","%d \u062b\u0627\u0646\u064a\u0629","%d \u062b\u0627\u0646\u064a\u0629"],m:["\u0623\u0642\u0644 \u0645\u0646 \u062f\u0642\u064a\u0642\u0629","\u062f\u0642\u064a\u0642\u0629 \u0648\u0627\u062d\u062f\u0629",["\u062f\u0642\u064a\u0642\u062a\u0627\u0646","\u062f\u0642\u064a\u0642\u062a\u064a\u0646"],"%d \u062f\u0642\u0627\u0626\u0642","%d \u062f\u0642\u064a\u0642\u0629","%d \u062f\u0642\u064a\u0642\u0629"],h:["\u0623\u0642\u0644 \u0645\u0646 \u0633\u0627\u0639\u0629","\u0633\u0627\u0639\u0629 \u0648\u0627\u062d\u062f\u0629",["\u0633\u0627\u0639\u062a\u0627\u0646","\u0633\u0627\u0639\u062a\u064a\u0646"],"%d \u0633\u0627\u0639\u0627\u062a","%d \u0633\u0627\u0639\u0629","%d \u0633\u0627\u0639\u0629"],d:["\u0623\u0642\u0644 \u0645\u0646 \u064a\u0648\u0645","\u064a\u0648\u0645 \u0648\u0627\u062d\u062f",["\u064a\u0648\u0645\u0627\u0646","\u064a\u0648\u0645\u064a\u0646"],"%d \u0623\u064a\u0627\u0645","%d \u064a\u0648\u0645\u064b\u0627","%d \u064a\u0648\u0645"],M:["\u0623\u0642\u0644 \u0645\u0646 \u0634\u0647\u0631","\u0634\u0647\u0631 \u0648\u0627\u062d\u062f",["\u0634\u0647\u0631\u0627\u0646","\u0634\u0647\u0631\u064a\u0646"],"%d \u0623\u0634\u0647\u0631","%d \u0634\u0647\u0631\u0627","%d \u0634\u0647\u0631"],y:["\u0623\u0642\u0644 \u0645\u0646 \u0639\u0627\u0645","\u0639\u0627\u0645 \u0648\u0627\u062d\u062f",["\u0639\u0627\u0645\u0627\u0646","\u0639\u0627\u0645\u064a\u0646"],"%d \u0623\u0639\u0648\u0627\u0645","%d \u0639\u0627\u0645\u064b\u0627","%d \u0639\u0627\u0645"]},p=function(M){return function(w,x,B,W){var j=u(w),q=e[M][u(w)];return 2===j&&(q=q[x?0:1]),q.replace(/%d/i,w)}},g=["\u064a\u0646\u0627\u064a\u0631","\u0641\u0628\u0631\u0627\u064a\u0631","\u0645\u0627\u0631\u0633","\u0623\u0628\u0631\u064a\u0644","\u0645\u0627\u064a\u0648","\u064a\u0648\u0646\u064a\u0648","\u064a\u0648\u0644\u064a\u0648","\u0623\u063a\u0633\u0637\u0633","\u0633\u0628\u062a\u0645\u0628\u0631","\u0623\u0643\u062a\u0648\u0628\u0631","\u0646\u0648\u0641\u0645\u0628\u0631","\u062f\u064a\u0633\u0645\u0628\u0631"];r.defineLocale("ar",{months:g,monthsShort:g,weekdays:"\u0627\u0644\u0623\u062d\u062f_\u0627\u0644\u0625\u062b\u0646\u064a\u0646_\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621_\u0627\u0644\u0623\u0631\u0628\u0639\u0627\u0621_\u0627\u0644\u062e\u0645\u064a\u0633_\u0627\u0644\u062c\u0645\u0639\u0629_\u0627\u0644\u0633\u0628\u062a".split("_"),weekdaysShort:"\u0623\u062d\u062f_\u0625\u062b\u0646\u064a\u0646_\u062b\u0644\u0627\u062b\u0627\u0621_\u0623\u0631\u0628\u0639\u0627\u0621_\u062e\u0645\u064a\u0633_\u062c\u0645\u0639\u0629_\u0633\u0628\u062a".split("_"),weekdaysMin:"\u062d_\u0646_\u062b_\u0631_\u062e_\u062c_\u0633".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/\u200fM/\u200fYYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0635|\u0645/,isPM:function(M){return"\u0645"===M},meridiem:function(M,w,x){return M<12?"\u0635":"\u0645"},calendar:{sameDay:"[\u0627\u0644\u064a\u0648\u0645 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextDay:"[\u063a\u062f\u064b\u0627 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",nextWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastDay:"[\u0623\u0645\u0633 \u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",lastWeek:"dddd [\u0639\u0646\u062f \u0627\u0644\u0633\u0627\u0639\u0629] LT",sameElse:"L"},relativeTime:{future:"\u0628\u0639\u062f %s",past:"\u0645\u0646\u0630 %s",s:p("s"),ss:p("s"),m:p("m"),mm:p("m"),h:p("h"),hh:p("h"),d:p("d"),dd:p("d"),M:p("M"),MM:p("M"),y:p("y"),yy:p("y")},preparse:function(M){return M.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(w){return f[w]}).replace(/\u060c/g,",")},postformat:function(M){return M.replace(/\d/g,function(w){return a[w]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(i(16738))},15887:function(v,b,i){!function(r){"use strict";var a={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-\xfcnc\xfc",4:"-\xfcnc\xfc",100:"-\xfcnc\xfc",6:"-nc\u0131",9:"-uncu",10:"-uncu",30:"-uncu",60:"-\u0131nc\u0131",90:"-\u0131nc\u0131"};r.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ert\u0259si_\xc7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131_\xc7\u0259r\u015f\u0259nb\u0259_C\xfcm\u0259 ax\u015fam\u0131_C\xfcm\u0259_\u015e\u0259nb\u0259".split("_"),weekdaysShort:"Baz_BzE_\xc7Ax_\xc7\u0259r_CAx_C\xfcm_\u015e\u0259n".split("_"),weekdaysMin:"Bz_BE_\xc7A_\xc7\u0259_CA_C\xfc_\u015e\u0259".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[g\u0259l\u0259n h\u0259ft\u0259] dddd [saat] LT",lastDay:"[d\xfcn\u0259n] LT",lastWeek:"[ke\xe7\u0259n h\u0259ft\u0259] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \u0259vv\u0259l",s:"bir ne\xe7\u0259 saniy\u0259",ss:"%d saniy\u0259",m:"bir d\u0259qiq\u0259",mm:"%d d\u0259qiq\u0259",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gec\u0259|s\u0259h\u0259r|g\xfcnd\xfcz|ax\u015fam/,isPM:function(u){return/^(g\xfcnd\xfcz|ax\u015fam)$/.test(u)},meridiem:function(u,e,p){return u<4?"gec\u0259":u<12?"s\u0259h\u0259r":u<17?"g\xfcnd\xfcz":"ax\u015fam"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0131nc\u0131|inci|nci|\xfcnc\xfc|nc\u0131|uncu)/,ordinal:function(u){if(0===u)return u+"-\u0131nc\u0131";var e=u%10;return u+(a[e]||a[u%100-e]||a[u>=100?100:null])},week:{dow:1,doy:7}})}(i(16738))},14572:function(v,b,i){!function(r){"use strict";function f(e,p,g){return"m"===g?p?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443":"h"===g?p?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443":e+" "+function a(e,p){var g=e.split("_");return p%10==1&&p%100!=11?g[0]:p%10>=2&&p%10<=4&&(p%100<10||p%100>=20)?g[1]:g[2]}({ss:p?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:p?"\u0445\u0432\u0456\u043b\u0456\u043d\u0430_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d":"\u0445\u0432\u0456\u043b\u0456\u043d\u0443_\u0445\u0432\u0456\u043b\u0456\u043d\u044b_\u0445\u0432\u0456\u043b\u0456\u043d",hh:p?"\u0433\u0430\u0434\u0437\u0456\u043d\u0430_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d":"\u0433\u0430\u0434\u0437\u0456\u043d\u0443_\u0433\u0430\u0434\u0437\u0456\u043d\u044b_\u0433\u0430\u0434\u0437\u0456\u043d",dd:"\u0434\u0437\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u0437\u0451\u043d",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u044b_\u043c\u0435\u0441\u044f\u0446\u0430\u045e",yy:"\u0433\u043e\u0434_\u0433\u0430\u0434\u044b_\u0433\u0430\u0434\u043e\u045e"}[g],+e)}r.defineLocale("be",{months:{format:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044f_\u043b\u044e\u0442\u0430\u0433\u0430_\u0441\u0430\u043a\u0430\u0432\u0456\u043a\u0430_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a\u0430_\u0442\u0440\u0430\u045e\u043d\u044f_\u0447\u044d\u0440\u0432\u0435\u043d\u044f_\u043b\u0456\u043f\u0435\u043d\u044f_\u0436\u043d\u0456\u045e\u043d\u044f_\u0432\u0435\u0440\u0430\u0441\u043d\u044f_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a\u0430_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434\u0430_\u0441\u043d\u0435\u0436\u043d\u044f".split("_"),standalone:"\u0441\u0442\u0443\u0434\u0437\u0435\u043d\u044c_\u043b\u044e\u0442\u044b_\u0441\u0430\u043a\u0430\u0432\u0456\u043a_\u043a\u0440\u0430\u0441\u0430\u0432\u0456\u043a_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u044d\u0440\u0432\u0435\u043d\u044c_\u043b\u0456\u043f\u0435\u043d\u044c_\u0436\u043d\u0456\u0432\u0435\u043d\u044c_\u0432\u0435\u0440\u0430\u0441\u0435\u043d\u044c_\u043a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a_\u043b\u0456\u0441\u0442\u0430\u043f\u0430\u0434_\u0441\u043d\u0435\u0436\u0430\u043d\u044c".split("_")},monthsShort:"\u0441\u0442\u0443\u0434_\u043b\u044e\u0442_\u0441\u0430\u043a_\u043a\u0440\u0430\u0441_\u0442\u0440\u0430\u0432_\u0447\u044d\u0440\u0432_\u043b\u0456\u043f_\u0436\u043d\u0456\u0432_\u0432\u0435\u0440_\u043a\u0430\u0441\u0442_\u043b\u0456\u0441\u0442_\u0441\u043d\u0435\u0436".split("_"),weekdays:{format:"\u043d\u044f\u0434\u0437\u0435\u043b\u044e_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0443_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0443_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),standalone:"\u043d\u044f\u0434\u0437\u0435\u043b\u044f_\u043f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a_\u0430\u045e\u0442\u043e\u0440\u0430\u043a_\u0441\u0435\u0440\u0430\u0434\u0430_\u0447\u0430\u0446\u0432\u0435\u0440_\u043f\u044f\u0442\u043d\u0456\u0446\u0430_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),isFormat:/\[ ?[\u0423\u0443\u045e] ?(?:\u043c\u0456\u043d\u0443\u043b\u0443\u044e|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0443\u044e)? ?\] ?dddd/},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0430\u0442_\u0441\u0440_\u0447\u0446_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., HH:mm",LLLL:"dddd, D MMMM YYYY \u0433., HH:mm"},calendar:{sameDay:"[\u0421\u0451\u043d\u043d\u044f \u045e] LT",nextDay:"[\u0417\u0430\u045e\u0442\u0440\u0430 \u045e] LT",lastDay:"[\u0423\u0447\u043e\u0440\u0430 \u045e] LT",nextWeek:function(){return"[\u0423] dddd [\u045e] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u0443\u044e] dddd [\u045e] LT";case 1:case 2:case 4:return"[\u0423 \u043c\u0456\u043d\u0443\u043b\u044b] dddd [\u045e] LT"}},sameElse:"L"},relativeTime:{future:"\u043f\u0440\u0430\u0437 %s",past:"%s \u0442\u0430\u043c\u0443",s:"\u043d\u0435\u043a\u0430\u043b\u044c\u043a\u0456 \u0441\u0435\u043a\u0443\u043d\u0434",m:f,mm:f,h:f,hh:f,d:"\u0434\u0437\u0435\u043d\u044c",dd:f,M:"\u043c\u0435\u0441\u044f\u0446",MM:f,y:"\u0433\u043e\u0434",yy:f},meridiemParse:/\u043d\u043e\u0447\u044b|\u0440\u0430\u043d\u0456\u0446\u044b|\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430/,isPM:function(e){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0430\u0440\u0430)$/.test(e)},meridiem:function(e,p,g){return e<4?"\u043d\u043e\u0447\u044b":e<12?"\u0440\u0430\u043d\u0456\u0446\u044b":e<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0430\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0456|\u044b|\u0433\u0430)/,ordinal:function(e,p){switch(p){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-\u044b":e+"-\u0456";case"D":return e+"-\u0433\u0430";default:return e}},week:{dow:1,doy:7}})}(i(16738))},3276:function(v,b,i){!function(r){"use strict";r.defineLocale("bg",{months:"\u044f\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u044f\u043d\u0443_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u044e\u043d\u0438_\u044e\u043b\u0438_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u044f\u0434\u0430_\u0447\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a_\u043f\u0435\u0442\u044a\u043a_\u0441\u044a\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u044f_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u044a\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u043d\u0435\u0441 \u0432] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432] LT",nextWeek:"dddd [\u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u041c\u0438\u043d\u0430\u043b\u0430\u0442\u0430] dddd [\u0432] LT";case 1:case 2:case 4:case 5:return"[\u041c\u0438\u043d\u0430\u043b\u0438\u044f] dddd [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0441\u043b\u0435\u0434 %s",past:"\u043f\u0440\u0435\u0434\u0438 %s",s:"\u043d\u044f\u043a\u043e\u043b\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",w:"\u0441\u0435\u0434\u043c\u0438\u0446\u0430",ww:"%d \u0441\u0435\u0434\u043c\u0438\u0446\u0438",M:"\u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0430",y:"\u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(f){var u=f%10,e=f%100;return 0===f?f+"-\u0435\u0432":0===e?f+"-\u0435\u043d":e>10&&e<20?f+"-\u0442\u0438":1===u?f+"-\u0432\u0438":2===u?f+"-\u0440\u0438":7===u||8===u?f+"-\u043c\u0438":f+"-\u0442\u0438"},week:{dow:1,doy:7}})}(i(16738))},93344:function(v,b,i){!function(r){"use strict";r.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_M\u025bkalo_Zuw\u025bnkalo_Zuluyekalo_Utikalo_S\u025btanburukalo_\u0254kut\u0254burukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_M\u025b_Zuw_Zul_Uti_S\u025bt_\u0254ku_Now_Des".split("_"),weekdays:"Kari_Nt\u025bn\u025bn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Nt\u025b_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [l\u025br\u025b] HH:mm"},calendar:{sameDay:"[Bi l\u025br\u025b] LT",nextDay:"[Sini l\u025br\u025b] LT",nextWeek:"dddd [don l\u025br\u025b] LT",lastDay:"[Kunu l\u025br\u025b] LT",lastWeek:"dddd [t\u025bm\u025bnen l\u025br\u025b] LT",sameElse:"L"},relativeTime:{future:"%s k\u0254n\u0254",past:"a b\u025b %s b\u0254",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"l\u025br\u025b kelen",hh:"l\u025br\u025b %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(i(16738))},83990:function(v,b,i){!function(r){"use strict";var a={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},f={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};r.defineLocale("bn-bd",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},meridiemParse:/\u09b0\u09be\u09a4|\u09ad\u09cb\u09b0|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be|\u09b0\u09be\u09a4/,meridiemHour:function(e,p){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===p?e<4?e:e+12:"\u09ad\u09cb\u09b0"===p||"\u09b8\u0995\u09be\u09b2"===p?e:"\u09a6\u09c1\u09aa\u09c1\u09b0"===p?e>=3?e:e+12:"\u09ac\u09bf\u0995\u09be\u09b2"===p||"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be"===p?e+12:void 0},meridiem:function(e,p,g){return e<4?"\u09b0\u09be\u09a4":e<6?"\u09ad\u09cb\u09b0":e<12?"\u09b8\u0995\u09be\u09b2":e<15?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<18?"\u09ac\u09bf\u0995\u09be\u09b2":e<20?"\u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}})}(i(16738))},58985:function(v,b,i){!function(r){"use strict";var a={1:"\u09e7",2:"\u09e8",3:"\u09e9",4:"\u09ea",5:"\u09eb",6:"\u09ec",7:"\u09ed",8:"\u09ee",9:"\u09ef",0:"\u09e6"},f={"\u09e7":"1","\u09e8":"2","\u09e9":"3","\u09ea":"4","\u09eb":"5","\u09ec":"6","\u09ed":"7","\u09ee":"8","\u09ef":"9","\u09e6":"0"};r.defineLocale("bn",{months:"\u099c\u09be\u09a8\u09c1\u09df\u09be\u09b0\u09bf_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09df\u09be\u09b0\u09bf_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f\u09c7\u09ae\u09cd\u09ac\u09b0_\u0985\u0995\u09cd\u099f\u09cb\u09ac\u09b0_\u09a8\u09ad\u09c7\u09ae\u09cd\u09ac\u09b0_\u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0".split("_"),monthsShort:"\u099c\u09be\u09a8\u09c1_\u09ab\u09c7\u09ac\u09cd\u09b0\u09c1_\u09ae\u09be\u09b0\u09cd\u099a_\u098f\u09aa\u09cd\u09b0\u09bf\u09b2_\u09ae\u09c7_\u099c\u09c1\u09a8_\u099c\u09c1\u09b2\u09be\u0987_\u0986\u0997\u09b8\u09cd\u099f_\u09b8\u09c7\u09aa\u09cd\u099f_\u0985\u0995\u09cd\u099f\u09cb_\u09a8\u09ad\u09c7_\u09a1\u09bf\u09b8\u09c7".split("_"),weekdays:"\u09b0\u09ac\u09bf\u09ac\u09be\u09b0_\u09b8\u09cb\u09ae\u09ac\u09be\u09b0_\u09ae\u0999\u09cd\u0997\u09b2\u09ac\u09be\u09b0_\u09ac\u09c1\u09a7\u09ac\u09be\u09b0_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf\u09ac\u09be\u09b0_\u09b6\u09c1\u0995\u09cd\u09b0\u09ac\u09be\u09b0_\u09b6\u09a8\u09bf\u09ac\u09be\u09b0".split("_"),weekdaysShort:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9\u09b8\u09cd\u09aa\u09a4\u09bf_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),weekdaysMin:"\u09b0\u09ac\u09bf_\u09b8\u09cb\u09ae_\u09ae\u0999\u09cd\u0997\u09b2_\u09ac\u09c1\u09a7_\u09ac\u09c3\u09b9_\u09b6\u09c1\u0995\u09cd\u09b0_\u09b6\u09a8\u09bf".split("_"),longDateFormat:{LT:"A h:mm \u09b8\u09ae\u09df",LTS:"A h:mm:ss \u09b8\u09ae\u09df",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u09b8\u09ae\u09df",LLLL:"dddd, D MMMM YYYY, A h:mm \u09b8\u09ae\u09df"},calendar:{sameDay:"[\u0986\u099c] LT",nextDay:"[\u0986\u0997\u09be\u09ae\u09c0\u0995\u09be\u09b2] LT",nextWeek:"dddd, LT",lastDay:"[\u0997\u09a4\u0995\u09be\u09b2] LT",lastWeek:"[\u0997\u09a4] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u09aa\u09b0\u09c7",past:"%s \u0986\u0997\u09c7",s:"\u0995\u09df\u09c7\u0995 \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",ss:"%d \u09b8\u09c7\u0995\u09c7\u09a8\u09cd\u09a1",m:"\u098f\u0995 \u09ae\u09bf\u09a8\u09bf\u099f",mm:"%d \u09ae\u09bf\u09a8\u09bf\u099f",h:"\u098f\u0995 \u0998\u09a8\u09cd\u099f\u09be",hh:"%d \u0998\u09a8\u09cd\u099f\u09be",d:"\u098f\u0995 \u09a6\u09bf\u09a8",dd:"%d \u09a6\u09bf\u09a8",M:"\u098f\u0995 \u09ae\u09be\u09b8",MM:"%d \u09ae\u09be\u09b8",y:"\u098f\u0995 \u09ac\u099b\u09b0",yy:"%d \u09ac\u099b\u09b0"},preparse:function(e){return e.replace(/[\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09e6]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},meridiemParse:/\u09b0\u09be\u09a4|\u09b8\u0995\u09be\u09b2|\u09a6\u09c1\u09aa\u09c1\u09b0|\u09ac\u09bf\u0995\u09be\u09b2|\u09b0\u09be\u09a4/,meridiemHour:function(e,p){return 12===e&&(e=0),"\u09b0\u09be\u09a4"===p&&e>=4||"\u09a6\u09c1\u09aa\u09c1\u09b0"===p&&e<5||"\u09ac\u09bf\u0995\u09be\u09b2"===p?e+12:e},meridiem:function(e,p,g){return e<4?"\u09b0\u09be\u09a4":e<10?"\u09b8\u0995\u09be\u09b2":e<17?"\u09a6\u09c1\u09aa\u09c1\u09b0":e<20?"\u09ac\u09bf\u0995\u09be\u09b2":"\u09b0\u09be\u09a4"},week:{dow:0,doy:6}})}(i(16738))},94391:function(v,b,i){!function(r){"use strict";var a={1:"\u0f21",2:"\u0f22",3:"\u0f23",4:"\u0f24",5:"\u0f25",6:"\u0f26",7:"\u0f27",8:"\u0f28",9:"\u0f29",0:"\u0f20"},f={"\u0f21":"1","\u0f22":"2","\u0f23":"3","\u0f24":"4","\u0f25":"5","\u0f26":"6","\u0f27":"7","\u0f28":"8","\u0f29":"9","\u0f20":"0"};r.defineLocale("bo",{months:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f44\u0f0b\u0f54\u0f7c_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f66\u0f74\u0f58\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f5e\u0f72\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f63\u0f94\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0fb2\u0f74\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f62\u0f92\u0fb1\u0f51\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f51\u0f42\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f45\u0f72\u0f42\u0f0b\u0f54_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f56\u0f45\u0f74\u0f0b\u0f42\u0f49\u0f72\u0f66\u0f0b\u0f54".split("_"),monthsShort:"\u0f5f\u0fb3\u0f0b1_\u0f5f\u0fb3\u0f0b2_\u0f5f\u0fb3\u0f0b3_\u0f5f\u0fb3\u0f0b4_\u0f5f\u0fb3\u0f0b5_\u0f5f\u0fb3\u0f0b6_\u0f5f\u0fb3\u0f0b7_\u0f5f\u0fb3\u0f0b8_\u0f5f\u0fb3\u0f0b9_\u0f5f\u0fb3\u0f0b10_\u0f5f\u0fb3\u0f0b11_\u0f5f\u0fb3\u0f0b12".split("_"),monthsShortRegex:/^(\u0f5f\u0fb3\u0f0b\d{1,2})/,monthsParseExact:!0,weekdays:"\u0f42\u0f5f\u0f60\u0f0b\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f42\u0f5f\u0f60\u0f0b\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f42\u0f5f\u0f60\u0f0b\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysShort:"\u0f49\u0f72\u0f0b\u0f58\u0f0b_\u0f5f\u0fb3\u0f0b\u0f56\u0f0b_\u0f58\u0f72\u0f42\u0f0b\u0f51\u0f58\u0f62\u0f0b_\u0f63\u0fb7\u0f42\u0f0b\u0f54\u0f0b_\u0f55\u0f74\u0f62\u0f0b\u0f56\u0f74_\u0f54\u0f0b\u0f66\u0f44\u0f66\u0f0b_\u0f66\u0fa4\u0f7a\u0f53\u0f0b\u0f54\u0f0b".split("_"),weekdaysMin:"\u0f49\u0f72_\u0f5f\u0fb3_\u0f58\u0f72\u0f42_\u0f63\u0fb7\u0f42_\u0f55\u0f74\u0f62_\u0f66\u0f44\u0f66_\u0f66\u0fa4\u0f7a\u0f53".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0f51\u0f72\u0f0b\u0f62\u0f72\u0f44] LT",nextDay:"[\u0f66\u0f44\u0f0b\u0f49\u0f72\u0f53] LT",nextWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f62\u0f97\u0f7a\u0f66\u0f0b\u0f58], LT",lastDay:"[\u0f41\u0f0b\u0f66\u0f44] LT",lastWeek:"[\u0f56\u0f51\u0f74\u0f53\u0f0b\u0f55\u0fb2\u0f42\u0f0b\u0f58\u0f50\u0f60\u0f0b\u0f58] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0f63\u0f0b",past:"%s \u0f66\u0f94\u0f53\u0f0b\u0f63",s:"\u0f63\u0f58\u0f0b\u0f66\u0f44",ss:"%d \u0f66\u0f90\u0f62\u0f0b\u0f46\u0f0d",m:"\u0f66\u0f90\u0f62\u0f0b\u0f58\u0f0b\u0f42\u0f45\u0f72\u0f42",mm:"%d \u0f66\u0f90\u0f62\u0f0b\u0f58",h:"\u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51\u0f0b\u0f42\u0f45\u0f72\u0f42",hh:"%d \u0f46\u0f74\u0f0b\u0f5a\u0f7c\u0f51",d:"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f45\u0f72\u0f42",dd:"%d \u0f49\u0f72\u0f53\u0f0b",M:"\u0f5f\u0fb3\u0f0b\u0f56\u0f0b\u0f42\u0f45\u0f72\u0f42",MM:"%d \u0f5f\u0fb3\u0f0b\u0f56",y:"\u0f63\u0f7c\u0f0b\u0f42\u0f45\u0f72\u0f42",yy:"%d \u0f63\u0f7c"},preparse:function(e){return e.replace(/[\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f20]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},meridiemParse:/\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c|\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66|\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44|\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42|\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c/,meridiemHour:function(e,p){return 12===e&&(e=0),"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"===p&&e>=4||"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44"===p&&e<5||"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42"===p?e+12:e},meridiem:function(e,p,g){return e<4?"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c":e<10?"\u0f5e\u0f7c\u0f42\u0f66\u0f0b\u0f40\u0f66":e<17?"\u0f49\u0f72\u0f53\u0f0b\u0f42\u0f74\u0f44":e<20?"\u0f51\u0f42\u0f7c\u0f44\u0f0b\u0f51\u0f42":"\u0f58\u0f5a\u0f53\u0f0b\u0f58\u0f7c"},week:{dow:0,doy:6}})}(i(16738))},46728:function(v,b,i){!function(r){"use strict";function a(q,ue,re){return q+" "+function e(q,ue){return 2===ue?function p(q){var ue={m:"v",b:"v",d:"z"};return void 0===ue[q.charAt(0)]?q:ue[q.charAt(0)]+q.substring(1)}(q):q}({mm:"munutenn",MM:"miz",dd:"devezh"}[re],q)}function u(q){return q>9?u(q%10):q}var g=[/^gen/i,/^c[\u02bc\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],S=/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,W=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];r.defineLocale("br",{months:"Genver_C\u02bchwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C\u02bchwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc\u02bcher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:W,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[\u02bc\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:W,monthsRegex:S,monthsShortRegex:S,monthsStrictRegex:/^(genver|c[\u02bc\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[\u02bc\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:g,longMonthsParse:g,shortMonthsParse:g,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc\u02bchoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec\u02bch da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s \u02bczo",s:"un nebeud segondenno\xf9",ss:"%d eilenn",m:"ur vunutenn",mm:a,h:"un eur",hh:"%d eur",d:"un devezh",dd:a,M:"ur miz",MM:a,y:"ur bloaz",yy:function f(q){switch(u(q)){case 1:case 3:case 4:case 5:case 9:return q+" bloaz";default:return q+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(a\xf1|vet)/,ordinal:function(q){return q+(1===q?"a\xf1":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(q){return"g.m."===q},meridiem:function(q,ue,re){return q<12?"a.m.":"g.m."}})}(i(16738))},5536:function(v,b,i){!function(r){"use strict";function a(u,e,p){var g=u+" ";switch(p){case"ss":return g+(1===u?"sekunda":2===u||3===u||4===u?"sekunde":"sekundi");case"m":return e?"jedna minuta":"jedne minute";case"mm":return g+(1===u?"minuta":2===u||3===u||4===u?"minute":"minuta");case"h":return e?"jedan sat":"jednog sata";case"hh":return g+(1===u?"sat":2===u||3===u||4===u?"sata":"sati");case"dd":return g+(1===u?"dan":"dana");case"MM":return g+(1===u?"mjesec":2===u||3===u||4===u?"mjeseca":"mjeseci");case"yy":return g+(1===u?"godina":2===u||3===u||4===u?"godine":"godina")}}r.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[pro\u0161lu] dddd [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(i(16738))},41043:function(v,b,i){!function(r){"use strict";r.defineLocale("ca",{months:{standalone:"gener_febrer_mar\xe7_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de mar\xe7_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[dem\xe0 a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(f,u){var e=1===f?"r":2===f?"n":3===f?"r":4===f?"t":"\xe8";return("w"===u||"W"===u)&&(e="a"),f+e},week:{dow:1,doy:4}})}(i(16738))},70420:function(v,b,i){!function(r){"use strict";var a={format:"leden_\xfanor_b\u0159ezen_duben_kv\u011bten_\u010derven_\u010dervenec_srpen_z\xe1\u0159\xed_\u0159\xedjen_listopad_prosinec".split("_"),standalone:"ledna_\xfanora_b\u0159ezna_dubna_kv\u011btna_\u010dervna_\u010dervence_srpna_z\xe1\u0159\xed_\u0159\xedjna_listopadu_prosince".split("_")},f="led_\xfano_b\u0159e_dub_kv\u011b_\u010dvn_\u010dvc_srp_z\xe1\u0159_\u0159\xedj_lis_pro".split("_"),u=[/^led/i,/^\xfano/i,/^b\u0159e/i,/^dub/i,/^kv\u011b/i,/^(\u010dvn|\u010derven$|\u010dervna)/i,/^(\u010dvc|\u010dervenec|\u010dervence)/i,/^srp/i,/^z\xe1\u0159/i,/^\u0159\xedj/i,/^lis/i,/^pro/i],e=/^(leden|\xfanor|b\u0159ezen|duben|kv\u011bten|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|z\xe1\u0159\xed|\u0159\xedjen|listopad|prosinec|led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i;function p(M){return M>1&&M<5&&1!=~~(M/10)}function g(M,w,x,B){var W=M+" ";switch(x){case"s":return w||B?"p\xe1r sekund":"p\xe1r sekundami";case"ss":return w||B?W+(p(M)?"sekundy":"sekund"):W+"sekundami";case"m":return w?"minuta":B?"minutu":"minutou";case"mm":return w||B?W+(p(M)?"minuty":"minut"):W+"minutami";case"h":return w?"hodina":B?"hodinu":"hodinou";case"hh":return w||B?W+(p(M)?"hodiny":"hodin"):W+"hodinami";case"d":return w||B?"den":"dnem";case"dd":return w||B?W+(p(M)?"dny":"dn\xed"):W+"dny";case"M":return w||B?"m\u011bs\xedc":"m\u011bs\xedcem";case"MM":return w||B?W+(p(M)?"m\u011bs\xedce":"m\u011bs\xedc\u016f"):W+"m\u011bs\xedci";case"y":return w||B?"rok":"rokem";case"yy":return w||B?W+(p(M)?"roky":"let"):W+"lety"}}r.defineLocale("cs",{months:a,monthsShort:f,monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(leden|ledna|\xfanora|\xfanor|b\u0159ezen|b\u0159ezna|duben|dubna|kv\u011bten|kv\u011btna|\u010dervenec|\u010dervence|\u010derven|\u010dervna|srpen|srpna|z\xe1\u0159\xed|\u0159\xedjen|\u0159\xedjna|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|\xfano|b\u0159e|dub|kv\u011b|\u010dvn|\u010dvc|srp|z\xe1\u0159|\u0159\xedj|lis|pro)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"ned\u011ble_pond\u011bl\xed_\xfater\xfd_st\u0159eda_\u010dtvrtek_p\xe1tek_sobota".split("_"),weekdaysShort:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),weekdaysMin:"ne_po_\xfat_st_\u010dt_p\xe1_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[z\xedtra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v ned\u011bli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve st\u0159edu v] LT";case 4:return"[ve \u010dtvrtek v] LT";case 5:return"[v p\xe1tek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[v\u010dera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou ned\u011bli v] LT";case 1:case 2:return"[minul\xe9] dddd [v] LT";case 3:return"[minulou st\u0159edu v] LT";case 4:case 5:return"[minul\xfd] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"p\u0159ed %s",s:g,ss:g,m:g,mm:g,h:g,hh:g,d:g,dd:g,M:g,MM:g,y:g,yy:g},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},33513:function(v,b,i){!function(r){"use strict";r.defineLocale("cv",{months:"\u043a\u04d1\u0440\u043b\u0430\u0447_\u043d\u0430\u0440\u04d1\u0441_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440\u0442\u043c\u0435_\u0443\u0442\u04d1_\u04ab\u0443\u0440\u043b\u0430_\u0430\u0432\u04d1\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448\u0442\u0430\u0432".split("_"),monthsShort:"\u043a\u04d1\u0440_\u043d\u0430\u0440_\u043f\u0443\u0448_\u0430\u043a\u0430_\u043c\u0430\u0439_\u04ab\u04d7\u0440_\u0443\u0442\u04d1_\u04ab\u0443\u0440_\u0430\u0432\u043d_\u044e\u043f\u0430_\u0447\u04f3\u043a_\u0440\u0430\u0448".split("_"),weekdays:"\u0432\u044b\u0440\u0441\u0430\u0440\u043d\u0438\u043a\u0443\u043d_\u0442\u0443\u043d\u0442\u0438\u043a\u0443\u043d_\u044b\u0442\u043b\u0430\u0440\u0438\u043a\u0443\u043d_\u044e\u043d\u043a\u0443\u043d_\u043a\u04d7\u04ab\u043d\u0435\u0440\u043d\u0438\u043a\u0443\u043d_\u044d\u0440\u043d\u0435\u043a\u0443\u043d_\u0448\u04d1\u043c\u0430\u0442\u043a\u0443\u043d".split("_"),weekdaysShort:"\u0432\u044b\u0440_\u0442\u0443\u043d_\u044b\u0442\u043b_\u044e\u043d_\u043a\u04d7\u04ab_\u044d\u0440\u043d_\u0448\u04d1\u043c".split("_"),weekdaysMin:"\u0432\u0440_\u0442\u043d_\u044b\u0442_\u044e\u043d_\u043a\u04ab_\u044d\u0440_\u0448\u043c".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7]",LLL:"YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm",LLLL:"dddd, YYYY [\u04ab\u0443\u043b\u0445\u0438] MMMM [\u0443\u0439\u04d1\u0445\u04d7\u043d] D[-\u043c\u04d7\u0448\u04d7], HH:mm"},calendar:{sameDay:"[\u041f\u0430\u044f\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextDay:"[\u042b\u0440\u0430\u043d] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastDay:"[\u04d6\u043d\u0435\u0440] LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",nextWeek:"[\u04aa\u0438\u0442\u0435\u0441] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",lastWeek:"[\u0418\u0440\u0442\u043d\u04d7] dddd LT [\u0441\u0435\u0445\u0435\u0442\u0440\u0435]",sameElse:"L"},relativeTime:{future:function(f){return f+(/\u0441\u0435\u0445\u0435\u0442$/i.exec(f)?"\u0440\u0435\u043d":/\u04ab\u0443\u043b$/i.exec(f)?"\u0442\u0430\u043d":"\u0440\u0430\u043d")},past:"%s \u043a\u0430\u044f\u043b\u043b\u0430",s:"\u043f\u04d7\u0440-\u0438\u043a \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",ss:"%d \u04ab\u0435\u043a\u043a\u0443\u043d\u0442",m:"\u043f\u04d7\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u043f\u04d7\u0440 \u0441\u0435\u0445\u0435\u0442",hh:"%d \u0441\u0435\u0445\u0435\u0442",d:"\u043f\u04d7\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u043f\u04d7\u0440 \u0443\u0439\u04d1\u0445",MM:"%d \u0443\u0439\u04d1\u0445",y:"\u043f\u04d7\u0440 \u04ab\u0443\u043b",yy:"%d \u04ab\u0443\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-\u043c\u04d7\u0448/,ordinal:"%d-\u043c\u04d7\u0448",week:{dow:1,doy:7}})}(i(16738))},6771:function(v,b,i){!function(r){"use strict";r.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn \xf4l",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(f){var e="";return f>20?e=40===f||50===f||60===f||80===f||100===f?"fed":"ain":f>0&&(e=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][f]),f+e},week:{dow:1,doy:4}})}(i(16738))},47978:function(v,b,i){!function(r){"use strict";r.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8n_man_tir_ons_tor_fre_l\xf8r".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"p\xe5 dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"f\xe5 sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"et \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},25204:function(v,b,i){!function(r){"use strict";function a(u,e,p,g){var S={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[u+" Tage",u+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[u+" Monate",u+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[u+" Jahre",u+" Jahren"]};return e?S[p][0]:S[p][1]}r.defineLocale("de-at",{months:"J\xe4nner_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"J\xe4n._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,w:a,ww:"%d Wochen",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},2653:function(v,b,i){!function(r){"use strict";function a(u,e,p,g){var S={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[u+" Tage",u+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[u+" Monate",u+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[u+" Jahre",u+" Jahren"]};return e?S[p][0]:S[p][1]}r.defineLocale("de-ch",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,w:a,ww:"%d Wochen",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},46061:function(v,b,i){!function(r){"use strict";function a(u,e,p,g){var S={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[u+" Tage",u+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[u+" Monate",u+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[u+" Jahre",u+" Jahren"]};return e?S[p][0]:S[p][1]}r.defineLocale("de",{months:"Januar_Februar_M\xe4rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._M\xe4rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:a,mm:"%d Minuten",h:a,hh:"%d Stunden",d:a,dd:a,w:a,ww:"%d Wochen",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},85:function(v,b,i){!function(r){"use strict";var a=["\u0796\u07ac\u0782\u07aa\u0787\u07a6\u0783\u07a9","\u078a\u07ac\u0784\u07b0\u0783\u07aa\u0787\u07a6\u0783\u07a9","\u0789\u07a7\u0783\u07a8\u0797\u07aa","\u0787\u07ad\u0795\u07b0\u0783\u07a9\u078d\u07aa","\u0789\u07ad","\u0796\u07ab\u0782\u07b0","\u0796\u07aa\u078d\u07a6\u0787\u07a8","\u0787\u07af\u078e\u07a6\u0790\u07b0\u0793\u07aa","\u0790\u07ac\u0795\u07b0\u0793\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0787\u07ae\u0786\u07b0\u0793\u07af\u0784\u07a6\u0783\u07aa","\u0782\u07ae\u0788\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa","\u0791\u07a8\u0790\u07ac\u0789\u07b0\u0784\u07a6\u0783\u07aa"],f=["\u0787\u07a7\u078b\u07a8\u0787\u07b0\u078c\u07a6","\u0780\u07af\u0789\u07a6","\u0787\u07a6\u0782\u07b0\u078e\u07a7\u0783\u07a6","\u0784\u07aa\u078b\u07a6","\u0784\u07aa\u0783\u07a7\u0790\u07b0\u078a\u07a6\u078c\u07a8","\u0780\u07aa\u0786\u07aa\u0783\u07aa","\u0780\u07ae\u0782\u07a8\u0780\u07a8\u0783\u07aa"];r.defineLocale("dv",{months:a,monthsShort:a,weekdays:f,weekdaysShort:f,weekdaysMin:"\u0787\u07a7\u078b\u07a8_\u0780\u07af\u0789\u07a6_\u0787\u07a6\u0782\u07b0_\u0784\u07aa\u078b\u07a6_\u0784\u07aa\u0783\u07a7_\u0780\u07aa\u0786\u07aa_\u0780\u07ae\u0782\u07a8".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0789\u0786|\u0789\u078a/,isPM:function(e){return"\u0789\u078a"===e},meridiem:function(e,p,g){return e<12?"\u0789\u0786":"\u0789\u078a"},calendar:{sameDay:"[\u0789\u07a8\u0787\u07a6\u078b\u07aa] LT",nextDay:"[\u0789\u07a7\u078b\u07a6\u0789\u07a7] LT",nextWeek:"dddd LT",lastDay:"[\u0787\u07a8\u0787\u07b0\u0794\u07ac] LT",lastWeek:"[\u078a\u07a7\u0787\u07a8\u078c\u07aa\u0788\u07a8] dddd LT",sameElse:"L"},relativeTime:{future:"\u078c\u07ac\u0783\u07ad\u078e\u07a6\u0787\u07a8 %s",past:"\u0786\u07aa\u0783\u07a8\u0782\u07b0 %s",s:"\u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa\u0786\u07ae\u0785\u07ac\u0787\u07b0",ss:"d% \u0790\u07a8\u0786\u07aa\u0782\u07b0\u078c\u07aa",m:"\u0789\u07a8\u0782\u07a8\u0793\u07ac\u0787\u07b0",mm:"\u0789\u07a8\u0782\u07a8\u0793\u07aa %d",h:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07ac\u0787\u07b0",hh:"\u078e\u07a6\u0791\u07a8\u0787\u07a8\u0783\u07aa %d",d:"\u078b\u07aa\u0788\u07a6\u0780\u07ac\u0787\u07b0",dd:"\u078b\u07aa\u0788\u07a6\u0790\u07b0 %d",M:"\u0789\u07a6\u0780\u07ac\u0787\u07b0",MM:"\u0789\u07a6\u0790\u07b0 %d",y:"\u0787\u07a6\u0780\u07a6\u0783\u07ac\u0787\u07b0",yy:"\u0787\u07a6\u0780\u07a6\u0783\u07aa %d"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:7,doy:12}})}(i(16738))},8579:function(v,b,i){!function(r){"use strict";r.defineLocale("el",{monthsNominativeEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2_\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2_\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2_\u039c\u03ac\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2_\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2_\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2_\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2_\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2_\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2".split("_"),monthsGenitiveEl:"\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5_\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5_\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5_\u039c\u03b1\u0390\u03bf\u03c5_\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5_\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5_\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5_\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5_\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5_\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5".split("_"),months:function(u,e){return u?"string"==typeof e&&/D/.test(e.substring(0,e.indexOf("MMMM")))?this._monthsGenitiveEl[u.month()]:this._monthsNominativeEl[u.month()]:this._monthsNominativeEl},monthsShort:"\u0399\u03b1\u03bd_\u03a6\u03b5\u03b2_\u039c\u03b1\u03c1_\u0391\u03c0\u03c1_\u039c\u03b1\u03ca_\u0399\u03bf\u03c5\u03bd_\u0399\u03bf\u03c5\u03bb_\u0391\u03c5\u03b3_\u03a3\u03b5\u03c0_\u039f\u03ba\u03c4_\u039d\u03bf\u03b5_\u0394\u03b5\u03ba".split("_"),weekdays:"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae_\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1_\u03a4\u03c1\u03af\u03c4\u03b7_\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7_\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7_\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae_\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf".split("_"),weekdaysShort:"\u039a\u03c5\u03c1_\u0394\u03b5\u03c5_\u03a4\u03c1\u03b9_\u03a4\u03b5\u03c4_\u03a0\u03b5\u03bc_\u03a0\u03b1\u03c1_\u03a3\u03b1\u03b2".split("_"),weekdaysMin:"\u039a\u03c5_\u0394\u03b5_\u03a4\u03c1_\u03a4\u03b5_\u03a0\u03b5_\u03a0\u03b1_\u03a3\u03b1".split("_"),meridiem:function(u,e,p){return u>11?p?"\u03bc\u03bc":"\u039c\u039c":p?"\u03c0\u03bc":"\u03a0\u039c"},isPM:function(u){return"\u03bc"===(u+"").toLowerCase()[0]},meridiemParse:/[\u03a0\u039c]\.?\u039c?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[\u03a3\u03ae\u03bc\u03b5\u03c1\u03b1 {}] LT",nextDay:"[\u0391\u03cd\u03c1\u03b9\u03bf {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[\u03a7\u03b8\u03b5\u03c2 {}] LT",lastWeek:function(){return 6===this.day()?"[\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf] dddd [{}] LT":"[\u03c4\u03b7\u03bd \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7] dddd [{}] LT"},sameElse:"L"},calendar:function(u,e){var p=this._calendarEl[u],g=e&&e.hours();return function a(u){return"undefined"!=typeof Function&&u instanceof Function||"[object Function]"===Object.prototype.toString.call(u)}(p)&&(p=p.apply(e)),p.replace("{}",g%12==1?"\u03c3\u03c4\u03b7":"\u03c3\u03c4\u03b9\u03c2")},relativeTime:{future:"\u03c3\u03b5 %s",past:"%s \u03c0\u03c1\u03b9\u03bd",s:"\u03bb\u03af\u03b3\u03b1 \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",ss:"%d \u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1",m:"\u03ad\u03bd\u03b1 \u03bb\u03b5\u03c0\u03c4\u03cc",mm:"%d \u03bb\u03b5\u03c0\u03c4\u03ac",h:"\u03bc\u03af\u03b1 \u03ce\u03c1\u03b1",hh:"%d \u03ce\u03c1\u03b5\u03c2",d:"\u03bc\u03af\u03b1 \u03bc\u03ad\u03c1\u03b1",dd:"%d \u03bc\u03ad\u03c1\u03b5\u03c2",M:"\u03ad\u03bd\u03b1\u03c2 \u03bc\u03ae\u03bd\u03b1\u03c2",MM:"%d \u03bc\u03ae\u03bd\u03b5\u03c2",y:"\u03ad\u03bd\u03b1\u03c2 \u03c7\u03c1\u03cc\u03bd\u03bf\u03c2",yy:"%d \u03c7\u03c1\u03cc\u03bd\u03b9\u03b1"},dayOfMonthOrdinalParse:/\d{1,2}\u03b7/,ordinal:"%d\u03b7",week:{dow:1,doy:4}})}(i(16738))},25724:function(v,b,i){!function(r){"use strict";r.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:0,doy:4}})}(i(16738))},10525:function(v,b,i){!function(r){"use strict";r.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")}})}(i(16738))},52847:function(v,b,i){!function(r){"use strict";r.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(i(16738))},67216:function(v,b,i){!function(r){"use strict";r.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(i(16738))},39305:function(v,b,i){!function(r){"use strict";r.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")}})}(i(16738))},73364:function(v,b,i){!function(r){"use strict";r.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:0,doy:6}})}(i(16738))},79130:function(v,b,i){!function(r){"use strict";r.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(i(16738))},11161:function(v,b,i){!function(r){"use strict";r.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(i(16738))},50802:function(v,b,i){!function(r){"use strict";r.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_a\u016dgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_a\u016dg_sept_okt_nov_dec".split("_"),weekdays:"diman\u0109o_lundo_mardo_merkredo_\u0135a\u016ddo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_\u0135a\u016d_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_\u0135a_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(f){return"p"===f.charAt(0).toLowerCase()},meridiem:function(f,u,e){return f>11?e?"p.t.m.":"P.T.M.":e?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodia\u016d je] LT",nextDay:"[Morga\u016d je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hiera\u016d je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"anta\u016d %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(i(16738))},45551:function(v,b,i){!function(r){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),f="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),u=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],e=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;r.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(g,S){return g?/-MMM-/.test(S)?f[g.month()]:a[g.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(i(16738))},75615:function(v,b,i){!function(r){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),f="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),u=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],e=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;r.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(g,S){return g?/-MMM-/.test(S)?f[g.month()]:a[g.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:4},invalidDate:"Fecha inv\xe1lida"})}(i(16738))},64790:function(v,b,i){!function(r){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),f="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),u=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],e=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;r.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(g,S){return g?/-MMM-/.test(S)?f[g.month()]:a[g.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:0,doy:6}})}(i(16738))},40328:function(v,b,i){!function(r){"use strict";var a="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),f="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),u=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],e=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;r.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(g,S){return g?/-MMM-/.test(S)?f[g.month()]:a[g.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"domingo_lunes_martes_mi\xe9rcoles_jueves_viernes_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._mi\xe9._jue._vie._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[ma\xf1ana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un a\xf1o",yy:"%d a\xf1os"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4},invalidDate:"Fecha inv\xe1lida"})}(i(16738))},96389:function(v,b,i){!function(r){"use strict";function a(u,e,p,g){var S={s:["m\xf5ne sekundi","m\xf5ni sekund","paar sekundit"],ss:[u+"sekundi",u+"sekundit"],m:["\xfche minuti","\xfcks minut"],mm:[u+" minuti",u+" minutit"],h:["\xfche tunni","tund aega","\xfcks tund"],hh:[u+" tunni",u+" tundi"],d:["\xfche p\xe4eva","\xfcks p\xe4ev"],M:["kuu aja","kuu aega","\xfcks kuu"],MM:[u+" kuu",u+" kuud"],y:["\xfche aasta","aasta","\xfcks aasta"],yy:[u+" aasta",u+" aastat"]};return e?S[p][2]?S[p][2]:S[p][1]:g?S[p][0]:S[p][1]}r.defineLocale("et",{months:"jaanuar_veebruar_m\xe4rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_m\xe4rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"p\xfchap\xe4ev_esmasp\xe4ev_teisip\xe4ev_kolmap\xe4ev_neljap\xe4ev_reede_laup\xe4ev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[T\xe4na,] LT",nextDay:"[Homme,] LT",nextWeek:"[J\xe4rgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s p\xe4rast",past:"%s tagasi",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:"%d p\xe4eva",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},52961:function(v,b,i){!function(r){"use strict";r.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(i(16738))},26151:function(v,b,i){!function(r){"use strict";var a={1:"\u06f1",2:"\u06f2",3:"\u06f3",4:"\u06f4",5:"\u06f5",6:"\u06f6",7:"\u06f7",8:"\u06f8",9:"\u06f9",0:"\u06f0"},f={"\u06f1":"1","\u06f2":"2","\u06f3":"3","\u06f4":"4","\u06f5":"5","\u06f6":"6","\u06f7":"7","\u06f8":"8","\u06f9":"9","\u06f0":"0"};r.defineLocale("fa",{months:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),monthsShort:"\u0698\u0627\u0646\u0648\u06cc\u0647_\u0641\u0648\u0631\u06cc\u0647_\u0645\u0627\u0631\u0633_\u0622\u0648\u0631\u06cc\u0644_\u0645\u0647_\u0698\u0648\u0626\u0646_\u0698\u0648\u0626\u06cc\u0647_\u0627\u0648\u062a_\u0633\u067e\u062a\u0627\u0645\u0628\u0631_\u0627\u06a9\u062a\u0628\u0631_\u0646\u0648\u0627\u0645\u0628\u0631_\u062f\u0633\u0627\u0645\u0628\u0631".split("_"),weekdays:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysShort:"\u06cc\u06a9\u200c\u0634\u0646\u0628\u0647_\u062f\u0648\u0634\u0646\u0628\u0647_\u0633\u0647\u200c\u0634\u0646\u0628\u0647_\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647_\u067e\u0646\u062c\u200c\u0634\u0646\u0628\u0647_\u062c\u0645\u0639\u0647_\u0634\u0646\u0628\u0647".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u062c_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631|\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/,isPM:function(e){return/\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631/.test(e)},meridiem:function(e,p,g){return e<12?"\u0642\u0628\u0644 \u0627\u0632 \u0638\u0647\u0631":"\u0628\u0639\u062f \u0627\u0632 \u0638\u0647\u0631"},calendar:{sameDay:"[\u0627\u0645\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",nextDay:"[\u0641\u0631\u062f\u0627 \u0633\u0627\u0639\u062a] LT",nextWeek:"dddd [\u0633\u0627\u0639\u062a] LT",lastDay:"[\u062f\u06cc\u0631\u0648\u0632 \u0633\u0627\u0639\u062a] LT",lastWeek:"dddd [\u067e\u06cc\u0634] [\u0633\u0627\u0639\u062a] LT",sameElse:"L"},relativeTime:{future:"\u062f\u0631 %s",past:"%s \u067e\u06cc\u0634",s:"\u0686\u0646\u062f \u062b\u0627\u0646\u06cc\u0647",ss:"%d \u062b\u0627\u0646\u06cc\u0647",m:"\u06cc\u06a9 \u062f\u0642\u06cc\u0642\u0647",mm:"%d \u062f\u0642\u06cc\u0642\u0647",h:"\u06cc\u06a9 \u0633\u0627\u0639\u062a",hh:"%d \u0633\u0627\u0639\u062a",d:"\u06cc\u06a9 \u0631\u0648\u0632",dd:"%d \u0631\u0648\u0632",M:"\u06cc\u06a9 \u0645\u0627\u0647",MM:"%d \u0645\u0627\u0647",y:"\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/[\u06f0-\u06f9]/g,function(p){return f[p]}).replace(/\u060c/g,",")},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]}).replace(/,/g,"\u060c")},dayOfMonthOrdinalParse:/\d{1,2}\u0645/,ordinal:"%d\u0645",week:{dow:6,doy:12}})}(i(16738))},7997:function(v,b,i){!function(r){"use strict";var a="nolla yksi kaksi kolme nelj\xe4 viisi kuusi seitsem\xe4n kahdeksan yhdeks\xe4n".split(" "),f=["nolla","yhden","kahden","kolmen","nelj\xe4n","viiden","kuuden",a[7],a[8],a[9]];function u(g,S,M,w){var x="";switch(M){case"s":return w?"muutaman sekunnin":"muutama sekunti";case"ss":x=w?"sekunnin":"sekuntia";break;case"m":return w?"minuutin":"minuutti";case"mm":x=w?"minuutin":"minuuttia";break;case"h":return w?"tunnin":"tunti";case"hh":x=w?"tunnin":"tuntia";break;case"d":return w?"p\xe4iv\xe4n":"p\xe4iv\xe4";case"dd":x=w?"p\xe4iv\xe4n":"p\xe4iv\xe4\xe4";break;case"M":return w?"kuukauden":"kuukausi";case"MM":x=w?"kuukauden":"kuukautta";break;case"y":return w?"vuoden":"vuosi";case"yy":x=w?"vuoden":"vuotta"}return function e(g,S){return g<10?S?f[g]:a[g]:g}(g,w)+" "+x}r.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kes\xe4kuu_hein\xe4kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kes\xe4_hein\xe4_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[t\xe4n\xe4\xe4n] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s p\xe4\xe4st\xe4",past:"%s sitten",s:u,ss:u,m:u,mm:u,h:u,hh:u,d:u,dd:u,M:u,MM:u,y:u,yy:u},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},58898:function(v,b,i){!function(r){"use strict";r.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(f){return f},week:{dow:1,doy:4}})}(i(16738))},37779:function(v,b,i){!function(r){"use strict";r.defineLocale("fo",{months:"januar_februar_mars_apr\xedl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_m\xe1nadagur_t\xfdsdagur_mikudagur_h\xf3sdagur_fr\xedggjadagur_leygardagur".split("_"),weekdaysShort:"sun_m\xe1n_t\xfds_mik_h\xf3s_fr\xed_ley".split("_"),weekdaysMin:"su_m\xe1_t\xfd_mi_h\xf3_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[\xcd dag kl.] LT",nextDay:"[\xcd morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xcd gj\xe1r kl.] LT",lastWeek:"[s\xed\xf0stu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s s\xed\xf0ani",s:"f\xe1 sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein t\xedmi",hh:"%d t\xedmar",d:"ein dagur",dd:"%d dagar",M:"ein m\xe1na\xf0ur",MM:"%d m\xe1na\xf0ir",y:"eitt \xe1r",yy:"%d \xe1r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},3287:function(v,b,i){!function(r){"use strict";r.defineLocale("fr-ca",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(f,u){switch(u){default:case"M":case"Q":case"D":case"DDD":case"d":return f+(1===f?"er":"e");case"w":case"W":return f+(1===f?"re":"e")}}})}(i(16738))},38867:function(v,b,i){!function(r){"use strict";r.defineLocale("fr-ch",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(f,u){switch(u){default:case"M":case"Q":case"D":case"DDD":case"d":return f+(1===f?"er":"e");case"w":case"W":return f+(1===f?"re":"e")}},week:{dow:1,doy:4}})}(i(16738))},28174:function(v,b,i){!function(r){"use strict";var u=/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?|janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,e=[/^janv/i,/^f\xe9vr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^ao\xfbt/i,/^sept/i,/^oct/i,/^nov/i,/^d\xe9c/i];r.defineLocale("fr",{months:"janvier_f\xe9vrier_mars_avril_mai_juin_juillet_ao\xfbt_septembre_octobre_novembre_d\xe9cembre".split("_"),monthsShort:"janv._f\xe9vr._mars_avr._mai_juin_juil._ao\xfbt_sept._oct._nov._d\xe9c.".split("_"),monthsRegex:u,monthsShortRegex:u,monthsStrictRegex:/^(janvier|f\xe9vrier|mars|avril|mai|juin|juillet|ao\xfbt|septembre|octobre|novembre|d\xe9cembre)/i,monthsShortStrictRegex:/(janv\.?|f\xe9vr\.?|mars|avr\.?|mai|juin|juil\.?|ao\xfbt|sept\.?|oct\.?|nov\.?|d\xe9c\.?)/i,monthsParse:e,longMonthsParse:e,shortMonthsParse:e,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd\u2019hui \xe0] LT",nextDay:"[Demain \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[Hier \xe0] LT",lastWeek:"dddd [dernier \xe0] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(g,S){switch(S){case"D":return g+(1===g?"er":"");default:case"M":case"Q":case"DDD":case"d":return g+(1===g?"er":"e");case"w":case"W":return g+(1===g?"re":"e")}},week:{dow:1,doy:4}})}(i(16738))},50452:function(v,b,i){!function(r){"use strict";var a="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),f="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");r.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,p){return e?/-MMM-/.test(p)?f[e.month()]:a[e.month()]:a},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[\xf4fr\xfbne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien min\xfat",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(i(16738))},45014:function(v,b,i){!function(r){"use strict";r.defineLocale("ga",{months:["Ean\xe1ir","Feabhra","M\xe1rta","Aibre\xe1n","Bealtaine","Meitheamh","I\xfail","L\xfanasa","Me\xe1n F\xf3mhair","Deireadh F\xf3mhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","M\xe1rt","Aib","Beal","Meith","I\xfail","L\xfan","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["D\xe9 Domhnaigh","D\xe9 Luain","D\xe9 M\xe1irt","D\xe9 C\xe9adaoin","D\xe9ardaoin","D\xe9 hAoine","D\xe9 Sathairn"],weekdaysShort:["Domh","Luan","M\xe1irt","C\xe9ad","D\xe9ar","Aoine","Sath"],weekdaysMin:["Do","Lu","M\xe1","C\xe9","D\xe9","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Am\xe1rach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inn\xe9 ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s \xf3 shin",s:"c\xfapla soicind",ss:"%d soicind",m:"n\xf3im\xe9ad",mm:"%d n\xf3im\xe9ad",h:"uair an chloig",hh:"%d uair an chloig",d:"l\xe1",dd:"%d l\xe1",M:"m\xed",MM:"%d m\xedonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(S){return S+(1===S?"d":S%10==2?"na":"mh")},week:{dow:1,doy:4}})}(i(16738))},74127:function(v,b,i){!function(r){"use strict";r.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am M\xe0rt","An Giblean","An C\xe8itean","An t-\xd2gmhios","An t-Iuchar","An L\xf9nastal","An t-Sultain","An D\xe0mhair","An t-Samhain","An D\xf9bhlachd"],monthsShort:["Faoi","Gear","M\xe0rt","Gibl","C\xe8it","\xd2gmh","Iuch","L\xf9n","Sult","D\xe0mh","Samh","D\xf9bh"],monthsParseExact:!0,weekdays:["Did\xf2mhnaich","Diluain","Dim\xe0irt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["D\xf2","Lu","M\xe0","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-m\xe0ireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-d\xe8 aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"m\xecos",MM:"%d m\xecosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(S){return S+(1===S?"d":S%10==2?"na":"mh")},week:{dow:1,doy:4}})}(i(16738))},72124:function(v,b,i){!function(r){"use strict";r.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xu\xf1o_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xu\xf1._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_m\xe9rcores_xoves_venres_s\xe1bado".split("_"),weekdaysShort:"dom._lun._mar._m\xe9r._xov._ven._s\xe1b.".split("_"),weekdaysMin:"do_lu_ma_m\xe9_xo_ve_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextDay:function(){return"[ma\xf1\xe1 "+(1!==this.hours()?"\xe1s":"\xe1")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"\xe1s":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"\xe1":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"\xe1s":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(f){return 0===f.indexOf("un")?"n"+f:"en "+f},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un d\xeda",dd:"%d d\xedas",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(i(16738))},6444:function(v,b,i){!function(r){"use strict";function a(u,e,p,g){var S={s:["\u0925\u094b\u0921\u092f\u093e \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940","\u0925\u094b\u0921\u0947 \u0938\u0945\u0915\u0902\u0921"],ss:[u+" \u0938\u0945\u0915\u0902\u0921\u093e\u0902\u0928\u0940",u+" \u0938\u0945\u0915\u0902\u0921"],m:["\u090f\u0915\u093e \u092e\u093f\u0923\u091f\u093e\u0928","\u090f\u0915 \u092e\u093f\u0928\u0942\u091f"],mm:[u+" \u092e\u093f\u0923\u091f\u093e\u0902\u0928\u0940",u+" \u092e\u093f\u0923\u091f\u093e\u0902"],h:["\u090f\u0915\u093e \u0935\u0930\u093e\u0928","\u090f\u0915 \u0935\u0930"],hh:[u+" \u0935\u0930\u093e\u0902\u0928\u0940",u+" \u0935\u0930\u093e\u0902"],d:["\u090f\u0915\u093e \u0926\u093f\u0938\u093e\u0928","\u090f\u0915 \u0926\u0940\u0938"],dd:[u+" \u0926\u093f\u0938\u093e\u0902\u0928\u0940",u+" \u0926\u0940\u0938"],M:["\u090f\u0915\u093e \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928","\u090f\u0915 \u092e\u094d\u0939\u092f\u0928\u094b"],MM:[u+" \u092e\u094d\u0939\u092f\u0928\u094d\u092f\u093e\u0928\u0940",u+" \u092e\u094d\u0939\u092f\u0928\u0947"],y:["\u090f\u0915\u093e \u0935\u0930\u094d\u0938\u093e\u0928","\u090f\u0915 \u0935\u0930\u094d\u0938"],yy:[u+" \u0935\u0930\u094d\u0938\u093e\u0902\u0928\u0940",u+" \u0935\u0930\u094d\u0938\u093e\u0902"]};return g?S[p][0]:S[p][1]}r.defineLocale("gom-deva",{months:{standalone:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u092f_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),format:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940\u091a\u094d\u092f\u093e_\u092e\u093e\u0930\u094d\u091a\u093e\u091a\u094d\u092f\u093e_\u090f\u092a\u094d\u0930\u0940\u0932\u093e\u091a\u094d\u092f\u093e_\u092e\u0947\u092f\u093e\u091a\u094d\u092f\u093e_\u091c\u0942\u0928\u093e\u091a\u094d\u092f\u093e_\u091c\u0941\u0932\u092f\u093e\u091a\u094d\u092f\u093e_\u0911\u0917\u0938\u094d\u091f\u093e\u091a\u094d\u092f\u093e_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0911\u0915\u094d\u091f\u094b\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e_\u0921\u093f\u0938\u0947\u0902\u092c\u0930\u093e\u091a\u094d\u092f\u093e".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u0940._\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u092f\u0924\u093e\u0930_\u0938\u094b\u092e\u093e\u0930_\u092e\u0902\u0917\u0933\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u092c\u093f\u0930\u0947\u0938\u094d\u0924\u093e\u0930_\u0938\u0941\u0915\u094d\u0930\u093e\u0930_\u0936\u0947\u0928\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0906\u092f\u0924._\u0938\u094b\u092e._\u092e\u0902\u0917\u0933._\u092c\u0941\u0927._\u092c\u094d\u0930\u0947\u0938\u094d\u0924._\u0938\u0941\u0915\u094d\u0930._\u0936\u0947\u0928.".split("_"),weekdaysMin:"\u0906_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u092c\u094d\u0930\u0947_\u0938\u0941_\u0936\u0947".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LTS:"A h:mm:ss [\u0935\u093e\u091c\u0924\u093e\u0902]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]",llll:"ddd, D MMM YYYY, A h:mm [\u0935\u093e\u091c\u0924\u093e\u0902]"},calendar:{sameDay:"[\u0906\u092f\u091c] LT",nextDay:"[\u092b\u093e\u0932\u094d\u092f\u093e\u0902] LT",nextWeek:"[\u092b\u0941\u0921\u0932\u094b] dddd[,] LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092b\u093e\u091f\u0932\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s \u0906\u0926\u0940\u0902",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}(\u0935\u0947\u0930)/,ordinal:function(u,e){return"D"===e?u+"\u0935\u0947\u0930":u},week:{dow:0,doy:3},meridiemParse:/\u0930\u093e\u0924\u0940|\u0938\u0915\u093e\u0933\u0940\u0902|\u0926\u0928\u092a\u093e\u0930\u093e\u0902|\u0938\u093e\u0902\u091c\u0947/,meridiemHour:function(u,e){return 12===u&&(u=0),"\u0930\u093e\u0924\u0940"===e?u<4?u:u+12:"\u0938\u0915\u093e\u0933\u0940\u0902"===e?u:"\u0926\u0928\u092a\u093e\u0930\u093e\u0902"===e?u>12?u:u+12:"\u0938\u093e\u0902\u091c\u0947"===e?u+12:void 0},meridiem:function(u,e,p){return u<4?"\u0930\u093e\u0924\u0940":u<12?"\u0938\u0915\u093e\u0933\u0940\u0902":u<16?"\u0926\u0928\u092a\u093e\u0930\u093e\u0902":u<20?"\u0938\u093e\u0902\u091c\u0947":"\u0930\u093e\u0924\u0940"}})}(i(16738))},37953:function(v,b,i){!function(r){"use strict";function a(u,e,p,g){var S={s:["thoddea sekondamni","thodde sekond"],ss:[u+" sekondamni",u+" sekond"],m:["eka mintan","ek minut"],mm:[u+" mintamni",u+" mintam"],h:["eka voran","ek vor"],hh:[u+" voramni",u+" voram"],d:["eka disan","ek dis"],dd:[u+" disamni",u+" dis"],M:["eka mhoinean","ek mhoino"],MM:[u+" mhoineamni",u+" mhoine"],y:["eka vorsan","ek voros"],yy:[u+" vorsamni",u+" vorsam"]};return g?S[p][0]:S[p][1]}r.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(u,e){return"D"===e?u+"er":u},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(u,e){return 12===u&&(u=0),"rati"===e?u<4?u:u+12:"sokallim"===e?u:"donparam"===e?u>12?u:u+12:"sanje"===e?u+12:void 0},meridiem:function(u,e,p){return u<4?"rati":u<12?"sokallim":u<16?"donparam":u<20?"sanje":"rati"}})}(i(16738))},76604:function(v,b,i){!function(r){"use strict";var a={1:"\u0ae7",2:"\u0ae8",3:"\u0ae9",4:"\u0aea",5:"\u0aeb",6:"\u0aec",7:"\u0aed",8:"\u0aee",9:"\u0aef",0:"\u0ae6"},f={"\u0ae7":"1","\u0ae8":"2","\u0ae9":"3","\u0aea":"4","\u0aeb":"5","\u0aec":"6","\u0aed":"7","\u0aee":"8","\u0aef":"9","\u0ae6":"0"};r.defineLocale("gu",{months:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1\u0a86\u0ab0\u0ac0_\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1\u0a86\u0ab0\u0ac0_\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf\u0ab2_\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe\u0a88_\u0a91\u0a97\u0ab8\u0acd\u0a9f_\u0ab8\u0aaa\u0acd\u0a9f\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0a91\u0a95\u0acd\u0a9f\u0acd\u0aac\u0ab0_\u0aa8\u0ab5\u0ac7\u0aae\u0acd\u0aac\u0ab0_\u0aa1\u0abf\u0ab8\u0ac7\u0aae\u0acd\u0aac\u0ab0".split("_"),monthsShort:"\u0a9c\u0abe\u0aa8\u0acd\u0aaf\u0ac1._\u0aab\u0ac7\u0aac\u0acd\u0ab0\u0ac1._\u0aae\u0abe\u0ab0\u0acd\u0a9a_\u0a8f\u0aaa\u0acd\u0ab0\u0abf._\u0aae\u0ac7_\u0a9c\u0ac2\u0aa8_\u0a9c\u0ac1\u0ab2\u0abe._\u0a91\u0a97._\u0ab8\u0aaa\u0acd\u0a9f\u0ac7._\u0a91\u0a95\u0acd\u0a9f\u0acd._\u0aa8\u0ab5\u0ac7._\u0aa1\u0abf\u0ab8\u0ac7.".split("_"),monthsParseExact:!0,weekdays:"\u0ab0\u0ab5\u0abf\u0ab5\u0abe\u0ab0_\u0ab8\u0acb\u0aae\u0ab5\u0abe\u0ab0_\u0aae\u0a82\u0a97\u0ab3\u0ab5\u0abe\u0ab0_\u0aac\u0ac1\u0aa7\u0acd\u0ab5\u0abe\u0ab0_\u0a97\u0ac1\u0ab0\u0ac1\u0ab5\u0abe\u0ab0_\u0ab6\u0ac1\u0a95\u0acd\u0ab0\u0ab5\u0abe\u0ab0_\u0ab6\u0aa8\u0abf\u0ab5\u0abe\u0ab0".split("_"),weekdaysShort:"\u0ab0\u0ab5\u0abf_\u0ab8\u0acb\u0aae_\u0aae\u0a82\u0a97\u0ab3_\u0aac\u0ac1\u0aa7\u0acd_\u0a97\u0ac1\u0ab0\u0ac1_\u0ab6\u0ac1\u0a95\u0acd\u0ab0_\u0ab6\u0aa8\u0abf".split("_"),weekdaysMin:"\u0ab0_\u0ab8\u0acb_\u0aae\u0a82_\u0aac\u0ac1_\u0a97\u0ac1_\u0ab6\u0ac1_\u0ab6".split("_"),longDateFormat:{LT:"A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LTS:"A h:mm:ss \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7",LLLL:"dddd, D MMMM YYYY, A h:mm \u0ab5\u0abe\u0a97\u0acd\u0aaf\u0ac7"},calendar:{sameDay:"[\u0a86\u0a9c] LT",nextDay:"[\u0a95\u0abe\u0ab2\u0ac7] LT",nextWeek:"dddd, LT",lastDay:"[\u0a97\u0a87\u0a95\u0abe\u0ab2\u0ac7] LT",lastWeek:"[\u0aaa\u0abe\u0a9b\u0ab2\u0abe] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0aae\u0abe",past:"%s \u0aaa\u0ab9\u0ac7\u0ab2\u0abe",s:"\u0a85\u0aae\u0ac1\u0a95 \u0aaa\u0ab3\u0acb",ss:"%d \u0ab8\u0ac7\u0a95\u0a82\u0aa1",m:"\u0a8f\u0a95 \u0aae\u0abf\u0aa8\u0abf\u0a9f",mm:"%d \u0aae\u0abf\u0aa8\u0abf\u0a9f",h:"\u0a8f\u0a95 \u0a95\u0ab2\u0abe\u0a95",hh:"%d \u0a95\u0ab2\u0abe\u0a95",d:"\u0a8f\u0a95 \u0aa6\u0abf\u0ab5\u0ab8",dd:"%d \u0aa6\u0abf\u0ab5\u0ab8",M:"\u0a8f\u0a95 \u0aae\u0ab9\u0abf\u0aa8\u0acb",MM:"%d \u0aae\u0ab9\u0abf\u0aa8\u0acb",y:"\u0a8f\u0a95 \u0ab5\u0ab0\u0acd\u0ab7",yy:"%d \u0ab5\u0ab0\u0acd\u0ab7"},preparse:function(e){return e.replace(/[\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0ae6]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},meridiemParse:/\u0ab0\u0abe\u0aa4|\u0aac\u0aaa\u0acb\u0ab0|\u0ab8\u0ab5\u0abe\u0ab0|\u0ab8\u0abe\u0a82\u0a9c/,meridiemHour:function(e,p){return 12===e&&(e=0),"\u0ab0\u0abe\u0aa4"===p?e<4?e:e+12:"\u0ab8\u0ab5\u0abe\u0ab0"===p?e:"\u0aac\u0aaa\u0acb\u0ab0"===p?e>=10?e:e+12:"\u0ab8\u0abe\u0a82\u0a9c"===p?e+12:void 0},meridiem:function(e,p,g){return e<4?"\u0ab0\u0abe\u0aa4":e<10?"\u0ab8\u0ab5\u0abe\u0ab0":e<17?"\u0aac\u0aaa\u0acb\u0ab0":e<20?"\u0ab8\u0abe\u0a82\u0a9c":"\u0ab0\u0abe\u0aa4"},week:{dow:0,doy:6}})}(i(16738))},1222:function(v,b,i){!function(r){"use strict";r.defineLocale("he",{months:"\u05d9\u05e0\u05d5\u05d0\u05e8_\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05d9\u05dc_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8_\u05e1\u05e4\u05d8\u05de\u05d1\u05e8_\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8_\u05e0\u05d5\u05d1\u05de\u05d1\u05e8_\u05d3\u05e6\u05de\u05d1\u05e8".split("_"),monthsShort:"\u05d9\u05e0\u05d5\u05f3_\u05e4\u05d1\u05e8\u05f3_\u05de\u05e8\u05e5_\u05d0\u05e4\u05e8\u05f3_\u05de\u05d0\u05d9_\u05d9\u05d5\u05e0\u05d9_\u05d9\u05d5\u05dc\u05d9_\u05d0\u05d5\u05d2\u05f3_\u05e1\u05e4\u05d8\u05f3_\u05d0\u05d5\u05e7\u05f3_\u05e0\u05d5\u05d1\u05f3_\u05d3\u05e6\u05de\u05f3".split("_"),weekdays:"\u05e8\u05d0\u05e9\u05d5\u05df_\u05e9\u05e0\u05d9_\u05e9\u05dc\u05d9\u05e9\u05d9_\u05e8\u05d1\u05d9\u05e2\u05d9_\u05d7\u05de\u05d9\u05e9\u05d9_\u05e9\u05d9\u05e9\u05d9_\u05e9\u05d1\u05ea".split("_"),weekdaysShort:"\u05d0\u05f3_\u05d1\u05f3_\u05d2\u05f3_\u05d3\u05f3_\u05d4\u05f3_\u05d5\u05f3_\u05e9\u05f3".split("_"),weekdaysMin:"\u05d0_\u05d1_\u05d2_\u05d3_\u05d4_\u05d5_\u05e9".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [\u05d1]MMMM YYYY",LLL:"D [\u05d1]MMMM YYYY HH:mm",LLLL:"dddd, D [\u05d1]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[\u05d4\u05d9\u05d5\u05dd \u05d1\u05be]LT",nextDay:"[\u05de\u05d7\u05e8 \u05d1\u05be]LT",nextWeek:"dddd [\u05d1\u05e9\u05e2\u05d4] LT",lastDay:"[\u05d0\u05ea\u05de\u05d5\u05dc \u05d1\u05be]LT",lastWeek:"[\u05d1\u05d9\u05d5\u05dd] dddd [\u05d4\u05d0\u05d7\u05e8\u05d5\u05df \u05d1\u05e9\u05e2\u05d4] LT",sameElse:"L"},relativeTime:{future:"\u05d1\u05e2\u05d5\u05d3 %s",past:"\u05dc\u05e4\u05e0\u05d9 %s",s:"\u05de\u05e1\u05e4\u05e8 \u05e9\u05e0\u05d9\u05d5\u05ea",ss:"%d \u05e9\u05e0\u05d9\u05d5\u05ea",m:"\u05d3\u05e7\u05d4",mm:"%d \u05d3\u05e7\u05d5\u05ea",h:"\u05e9\u05e2\u05d4",hh:function(f){return 2===f?"\u05e9\u05e2\u05ea\u05d9\u05d9\u05dd":f+" \u05e9\u05e2\u05d5\u05ea"},d:"\u05d9\u05d5\u05dd",dd:function(f){return 2===f?"\u05d9\u05d5\u05de\u05d9\u05d9\u05dd":f+" \u05d9\u05de\u05d9\u05dd"},M:"\u05d7\u05d5\u05d3\u05e9",MM:function(f){return 2===f?"\u05d7\u05d5\u05d3\u05e9\u05d9\u05d9\u05dd":f+" \u05d7\u05d5\u05d3\u05e9\u05d9\u05dd"},y:"\u05e9\u05e0\u05d4",yy:function(f){return 2===f?"\u05e9\u05e0\u05ea\u05d9\u05d9\u05dd":f%10==0&&10!==f?f+" \u05e9\u05e0\u05d4":f+" \u05e9\u05e0\u05d9\u05dd"}},meridiemParse:/\u05d0\u05d7\u05d4"\u05e6|\u05dc\u05e4\u05e0\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8|\u05d1\u05d1\u05d5\u05e7\u05e8|\u05d1\u05e2\u05e8\u05d1/i,isPM:function(f){return/^(\u05d0\u05d7\u05d4"\u05e6|\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd|\u05d1\u05e2\u05e8\u05d1)$/.test(f)},meridiem:function(f,u,e){return f<5?"\u05dc\u05e4\u05e0\u05d5\u05ea \u05d1\u05d5\u05e7\u05e8":f<10?"\u05d1\u05d1\u05d5\u05e7\u05e8":f<12?e?'\u05dc\u05e4\u05e0\u05d4"\u05e6':"\u05dc\u05e4\u05e0\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":f<18?e?'\u05d0\u05d7\u05d4"\u05e6':"\u05d0\u05d7\u05e8\u05d9 \u05d4\u05e6\u05d4\u05e8\u05d9\u05d9\u05dd":"\u05d1\u05e2\u05e8\u05d1"}})}(i(16738))},74235:function(v,b,i){!function(r){"use strict";var a={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},f={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"},u=[/^\u091c\u0928/i,/^\u092b\u093c\u0930|\u092b\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924\u0902|\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935|\u0928\u0935\u0902/i,/^\u0926\u093f\u0938\u0902|\u0926\u093f\u0938/i];r.defineLocale("hi",{months:{format:"\u091c\u0928\u0935\u0930\u0940_\u092b\u093c\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u092e\u094d\u092c\u0930_\u0926\u093f\u0938\u092e\u094d\u092c\u0930".split("_"),standalone:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0930\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948\u0932_\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0938\u094d\u0924_\u0938\u093f\u0924\u0902\u092c\u0930_\u0905\u0915\u094d\u091f\u0942\u092c\u0930_\u0928\u0935\u0902\u092c\u0930_\u0926\u093f\u0938\u0902\u092c\u0930".split("_")},monthsShort:"\u091c\u0928._\u092b\u093c\u0930._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u0948._\u092e\u0908_\u091c\u0942\u0928_\u091c\u0941\u0932._\u0905\u0917._\u0938\u093f\u0924._\u0905\u0915\u094d\u091f\u0942._\u0928\u0935._\u0926\u093f\u0938.".split("_"),weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0932\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0932_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u092c\u091c\u0947",LTS:"A h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A h:mm \u092c\u091c\u0947"},monthsParse:u,longMonthsParse:u,shortMonthsParse:[/^\u091c\u0928/i,/^\u092b\u093c\u0930/i,/^\u092e\u093e\u0930\u094d\u091a/i,/^\u0905\u092a\u094d\u0930\u0948/i,/^\u092e\u0908/i,/^\u091c\u0942\u0928/i,/^\u091c\u0941\u0932/i,/^\u0905\u0917/i,/^\u0938\u093f\u0924/i,/^\u0905\u0915\u094d\u091f\u0942/i,/^\u0928\u0935/i,/^\u0926\u093f\u0938/i],monthsRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsShortRegex:/^(\u091c\u0928\u0935\u0930\u0940|\u091c\u0928\.?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908|\u091c\u0941\u0932\.?|\u0905\u0917\u0938\u094d\u0924|\u0905\u0917\.?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930|\u0928\u0935\.?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930|\u0926\u093f\u0938\.?)/i,monthsStrictRegex:/^(\u091c\u0928\u0935\u0930\u0940?|\u092b\u093c\u0930\u0935\u0930\u0940|\u092b\u0930\u0935\u0930\u0940?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\u0932?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\u093e\u0908?|\u0905\u0917\u0938\u094d\u0924?|\u0938\u093f\u0924\u092e\u094d\u092c\u0930|\u0938\u093f\u0924\u0902\u092c\u0930|\u0938\u093f\u0924?\.?|\u0905\u0915\u094d\u091f\u0942\u092c\u0930|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\u092e\u094d\u092c\u0930|\u0928\u0935\u0902\u092c\u0930?|\u0926\u093f\u0938\u092e\u094d\u092c\u0930|\u0926\u093f\u0938\u0902\u092c\u0930?)/i,monthsShortStrictRegex:/^(\u091c\u0928\.?|\u092b\u093c\u0930\.?|\u092e\u093e\u0930\u094d\u091a?|\u0905\u092a\u094d\u0930\u0948\.?|\u092e\u0908?|\u091c\u0942\u0928?|\u091c\u0941\u0932\.?|\u0905\u0917\.?|\u0938\u093f\u0924\.?|\u0905\u0915\u094d\u091f\u0942\.?|\u0928\u0935\.?|\u0926\u093f\u0938\.?)/i,calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0915\u0932] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u0932] LT",lastWeek:"[\u092a\u093f\u091b\u0932\u0947] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u092e\u0947\u0902",past:"%s \u092a\u0939\u0932\u0947",s:"\u0915\u0941\u091b \u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0902\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u091f",mm:"%d \u092e\u093f\u0928\u091f",h:"\u090f\u0915 \u0918\u0902\u091f\u093e",hh:"%d \u0918\u0902\u091f\u0947",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u0940\u0928\u0947",MM:"%d \u092e\u0939\u0940\u0928\u0947",y:"\u090f\u0915 \u0935\u0930\u094d\u0937",yy:"%d \u0935\u0930\u094d\u0937"},preparse:function(g){return g.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(S){return f[S]})},postformat:function(g){return g.replace(/\d/g,function(S){return a[S]})},meridiemParse:/\u0930\u093e\u0924|\u0938\u0941\u092c\u0939|\u0926\u094b\u092a\u0939\u0930|\u0936\u093e\u092e/,meridiemHour:function(g,S){return 12===g&&(g=0),"\u0930\u093e\u0924"===S?g<4?g:g+12:"\u0938\u0941\u092c\u0939"===S?g:"\u0926\u094b\u092a\u0939\u0930"===S?g>=10?g:g+12:"\u0936\u093e\u092e"===S?g+12:void 0},meridiem:function(g,S,M){return g<4?"\u0930\u093e\u0924":g<10?"\u0938\u0941\u092c\u0939":g<17?"\u0926\u094b\u092a\u0939\u0930":g<20?"\u0936\u093e\u092e":"\u0930\u093e\u0924"},week:{dow:0,doy:6}})}(i(16738))},622:function(v,b,i){!function(r){"use strict";function a(u,e,p){var g=u+" ";switch(p){case"ss":return g+(1===u?"sekunda":2===u||3===u||4===u?"sekunde":"sekundi");case"m":return e?"jedna minuta":"jedne minute";case"mm":return g+(1===u?"minuta":2===u||3===u||4===u?"minute":"minuta");case"h":return e?"jedan sat":"jednog sata";case"hh":return g+(1===u?"sat":2===u||3===u||4===u?"sata":"sati");case"dd":return g+(1===u?"dan":"dana");case"MM":return g+(1===u?"mjesec":2===u||3===u||4===u?"mjeseca":"mjeseci");case"yy":return g+(1===u?"godina":2===u||3===u||4===u?"godine":"godina")}}r.defineLocale("hr",{months:{format:"sije\u010dnja_velja\u010de_o\u017eujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"sije\u010danj_velja\u010da_o\u017eujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._o\u017eu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010der u] LT",lastWeek:function(){switch(this.day()){case 0:return"[pro\u0161lu] [nedjelju] [u] LT";case 3:return"[pro\u0161lu] [srijedu] [u] LT";case 6:return"[pro\u0161le] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[pro\u0161li] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:a,m:a,mm:a,h:a,hh:a,d:"dan",dd:a,M:"mjesec",MM:a,y:"godinu",yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(i(16738))},37735:function(v,b,i){!function(r){"use strict";var a="vas\xe1rnap h\xe9tf\u0151n kedden szerd\xe1n cs\xfct\xf6rt\xf6k\xf6n p\xe9nteken szombaton".split(" ");function f(p,g,S,M){var w=p;switch(S){case"s":return M||g?"n\xe9h\xe1ny m\xe1sodperc":"n\xe9h\xe1ny m\xe1sodperce";case"ss":return w+(M||g)?" m\xe1sodperc":" m\xe1sodperce";case"m":return"egy"+(M||g?" perc":" perce");case"mm":return w+(M||g?" perc":" perce");case"h":return"egy"+(M||g?" \xf3ra":" \xf3r\xe1ja");case"hh":return w+(M||g?" \xf3ra":" \xf3r\xe1ja");case"d":return"egy"+(M||g?" nap":" napja");case"dd":return w+(M||g?" nap":" napja");case"M":return"egy"+(M||g?" h\xf3nap":" h\xf3napja");case"MM":return w+(M||g?" h\xf3nap":" h\xf3napja");case"y":return"egy"+(M||g?" \xe9v":" \xe9ve");case"yy":return w+(M||g?" \xe9v":" \xe9ve")}return""}function u(p){return(p?"":"[m\xfalt] ")+"["+a[this.day()]+"] LT[-kor]"}r.defineLocale("hu",{months:"janu\xe1r_febru\xe1r_m\xe1rcius_\xe1prilis_m\xe1jus_j\xfanius_j\xfalius_augusztus_szeptember_okt\xf3ber_november_december".split("_"),monthsShort:"jan._feb._m\xe1rc._\xe1pr._m\xe1j._j\xfan._j\xfal._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vas\xe1rnap_h\xe9tf\u0151_kedd_szerda_cs\xfct\xf6rt\xf6k_p\xe9ntek_szombat".split("_"),weekdaysShort:"vas_h\xe9t_kedd_sze_cs\xfct_p\xe9n_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(p){return"u"===p.charAt(1).toLowerCase()},meridiem:function(p,g,S){return p<12?!0===S?"de":"DE":!0===S?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return u.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return u.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s m\xfalva",past:"%s",s:f,ss:f,m:f,mm:f,h:f,hh:f,d:f,dd:f,M:f,MM:f,y:f,yy:f},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},90402:function(v,b,i){!function(r){"use strict";r.defineLocale("hy-am",{months:{format:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580\u056b_\u0583\u0565\u057f\u0580\u057e\u0561\u0580\u056b_\u0574\u0561\u0580\u057f\u056b_\u0561\u057a\u0580\u056b\u056c\u056b_\u0574\u0561\u0575\u056b\u057d\u056b_\u0570\u0578\u0582\u0576\u056b\u057d\u056b_\u0570\u0578\u0582\u056c\u056b\u057d\u056b_\u0585\u0563\u0578\u057d\u057f\u0578\u057d\u056b_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580\u056b_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580\u056b".split("_"),standalone:"\u0570\u0578\u0582\u0576\u057e\u0561\u0580_\u0583\u0565\u057f\u0580\u057e\u0561\u0580_\u0574\u0561\u0580\u057f_\u0561\u057a\u0580\u056b\u056c_\u0574\u0561\u0575\u056b\u057d_\u0570\u0578\u0582\u0576\u056b\u057d_\u0570\u0578\u0582\u056c\u056b\u057d_\u0585\u0563\u0578\u057d\u057f\u0578\u057d_\u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580_\u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580_\u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580_\u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580".split("_")},monthsShort:"\u0570\u0576\u057e_\u0583\u057f\u0580_\u0574\u0580\u057f_\u0561\u057a\u0580_\u0574\u0575\u057d_\u0570\u0576\u057d_\u0570\u056c\u057d_\u0585\u0563\u057d_\u057d\u057a\u057f_\u0570\u056f\u057f_\u0576\u0574\u0562_\u0564\u056f\u057f".split("_"),weekdays:"\u056f\u056b\u0580\u0561\u056f\u056b_\u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b_\u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b_\u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b_\u0578\u0582\u0580\u0562\u0561\u0569_\u0577\u0561\u0562\u0561\u0569".split("_"),weekdaysShort:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),weekdaysMin:"\u056f\u0580\u056f_\u0565\u0580\u056f_\u0565\u0580\u0584_\u0579\u0580\u0584_\u0570\u0576\u0563_\u0578\u0582\u0580\u0562_\u0577\u0562\u0569".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0569.",LLL:"D MMMM YYYY \u0569., HH:mm",LLLL:"dddd, D MMMM YYYY \u0569., HH:mm"},calendar:{sameDay:"[\u0561\u0575\u057d\u0585\u0580] LT",nextDay:"[\u057e\u0561\u0572\u0568] LT",lastDay:"[\u0565\u0580\u0565\u056f] LT",nextWeek:function(){return"dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},lastWeek:function(){return"[\u0561\u0576\u0581\u0561\u056e] dddd [\u0585\u0580\u0568 \u056a\u0561\u0574\u0568] LT"},sameElse:"L"},relativeTime:{future:"%s \u0570\u0565\u057f\u0578",past:"%s \u0561\u057c\u0561\u057b",s:"\u0574\u056b \u0584\u0561\u0576\u056b \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",ss:"%d \u057e\u0561\u0575\u0580\u056f\u0575\u0561\u0576",m:"\u0580\u0578\u057a\u0565",mm:"%d \u0580\u0578\u057a\u0565",h:"\u056a\u0561\u0574",hh:"%d \u056a\u0561\u0574",d:"\u0585\u0580",dd:"%d \u0585\u0580",M:"\u0561\u0574\u056b\u057d",MM:"%d \u0561\u0574\u056b\u057d",y:"\u057f\u0561\u0580\u056b",yy:"%d \u057f\u0561\u0580\u056b"},meridiemParse:/\u0563\u056b\u0577\u0565\u0580\u057e\u0561|\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561|\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576/,isPM:function(f){return/^(\u0581\u0565\u0580\u0565\u056f\u057e\u0561|\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576)$/.test(f)},meridiem:function(f){return f<4?"\u0563\u056b\u0577\u0565\u0580\u057e\u0561":f<12?"\u0561\u057c\u0561\u057e\u0578\u057f\u057e\u0561":f<17?"\u0581\u0565\u0580\u0565\u056f\u057e\u0561":"\u0565\u0580\u0565\u056f\u0578\u0575\u0561\u0576"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(\u056b\u0576|\u0580\u0564)/,ordinal:function(f,u){switch(u){case"DDD":case"w":case"W":case"DDDo":return 1===f?f+"-\u056b\u0576":f+"-\u0580\u0564";default:return f}},week:{dow:1,doy:7}})}(i(16738))},59187:function(v,b,i){!function(r){"use strict";r.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(f,u){return 12===f&&(f=0),"pagi"===u?f:"siang"===u?f>=11?f:f+12:"sore"===u||"malam"===u?f+12:void 0},meridiem:function(f,u,e){return f<11?"pagi":f<15?"siang":f<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}})}(i(16738))},30536:function(v,b,i){!function(r){"use strict";function a(e){return e%100==11||e%10!=1}function f(e,p,g,S){var M=e+" ";switch(g){case"s":return p||S?"nokkrar sek\xfandur":"nokkrum sek\xfandum";case"ss":return a(e)?M+(p||S?"sek\xfandur":"sek\xfandum"):M+"sek\xfanda";case"m":return p?"m\xedn\xfata":"m\xedn\xfatu";case"mm":return a(e)?M+(p||S?"m\xedn\xfatur":"m\xedn\xfatum"):p?M+"m\xedn\xfata":M+"m\xedn\xfatu";case"hh":return a(e)?M+(p||S?"klukkustundir":"klukkustundum"):M+"klukkustund";case"d":return p?"dagur":S?"dag":"degi";case"dd":return a(e)?p?M+"dagar":M+(S?"daga":"d\xf6gum"):p?M+"dagur":M+(S?"dag":"degi");case"M":return p?"m\xe1nu\xf0ur":S?"m\xe1nu\xf0":"m\xe1nu\xf0i";case"MM":return a(e)?p?M+"m\xe1nu\xf0ir":M+(S?"m\xe1nu\xf0i":"m\xe1nu\xf0um"):p?M+"m\xe1nu\xf0ur":M+(S?"m\xe1nu\xf0":"m\xe1nu\xf0i");case"y":return p||S?"\xe1r":"\xe1ri";case"yy":return a(e)?M+(p||S?"\xe1r":"\xe1rum"):M+(p||S?"\xe1r":"\xe1ri")}}r.defineLocale("is",{months:"jan\xfaar_febr\xfaar_mars_apr\xedl_ma\xed_j\xfan\xed_j\xfal\xed_\xe1g\xfast_september_okt\xf3ber_n\xf3vember_desember".split("_"),monthsShort:"jan_feb_mar_apr_ma\xed_j\xfan_j\xfal_\xe1g\xfa_sep_okt_n\xf3v_des".split("_"),weekdays:"sunnudagur_m\xe1nudagur_\xferi\xf0judagur_mi\xf0vikudagur_fimmtudagur_f\xf6studagur_laugardagur".split("_"),weekdaysShort:"sun_m\xe1n_\xferi_mi\xf0_fim_f\xf6s_lau".split("_"),weekdaysMin:"Su_M\xe1_\xder_Mi_Fi_F\xf6_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[\xed dag kl.] LT",nextDay:"[\xe1 morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[\xed g\xe6r kl.] LT",lastWeek:"[s\xed\xf0asta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s s\xed\xf0an",s:f,ss:f,m:f,mm:f,h:"klukkustund",hh:f,d:f,dd:f,M:f,MM:f,y:f,yy:f},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},94667:function(v,b,i){!function(r){"use strict";r.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){return 0===this.day()?"[la scorsa] dddd [alle] LT":"[lo scorso] dddd [alle] LT"},sameElse:"L"},relativeTime:{future:function(f){return(/^[0-9].+$/.test(f)?"tra":"in")+" "+f},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(i(16738))},35007:function(v,b,i){!function(r){"use strict";r.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_luned\xec_marted\xec_mercoled\xec_gioved\xec_venerd\xec_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){return 0===this.day()?"[La scorsa] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT":"[Lo scorso] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(i(16738))},62093:function(v,b,i){!function(r){"use strict";r.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"\u4ee4\u548c",narrow:"\u32ff",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"\u5e73\u6210",narrow:"\u337b",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"\u662d\u548c",narrow:"\u337c",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"\u5927\u6b63",narrow:"\u337d",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"\u660e\u6cbb",narrow:"\u337e",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"\u897f\u66a6",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"\u7d00\u5143\u524d",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(\u5143|\d+)\u5e74/,eraYearOrdinalParse:function(f,u){return"\u5143"===u[1]?1:parseInt(u[1]||f,10)},months:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u65e5\u66dc\u65e5_\u6708\u66dc\u65e5_\u706b\u66dc\u65e5_\u6c34\u66dc\u65e5_\u6728\u66dc\u65e5_\u91d1\u66dc\u65e5_\u571f\u66dc\u65e5".split("_"),weekdaysShort:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),weekdaysMin:"\u65e5_\u6708_\u706b_\u6c34_\u6728_\u91d1_\u571f".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5(ddd) HH:mm"},meridiemParse:/\u5348\u524d|\u5348\u5f8c/i,isPM:function(f){return"\u5348\u5f8c"===f},meridiem:function(f,u,e){return f<12?"\u5348\u524d":"\u5348\u5f8c"},calendar:{sameDay:"[\u4eca\u65e5] LT",nextDay:"[\u660e\u65e5] LT",nextWeek:function(f){return f.week()!==this.week()?"[\u6765\u9031]dddd LT":"dddd LT"},lastDay:"[\u6628\u65e5] LT",lastWeek:function(f){return this.week()!==f.week()?"[\u5148\u9031]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}\u65e5/,ordinal:function(f,u){switch(u){case"y":return 1===f?"\u5143\u5e74":f+"\u5e74";case"d":case"D":case"DDD":return f+"\u65e5";default:return f}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u6570\u79d2",ss:"%d\u79d2",m:"1\u5206",mm:"%d\u5206",h:"1\u6642\u9593",hh:"%d\u6642\u9593",d:"1\u65e5",dd:"%d\u65e5",M:"1\u30f6\u6708",MM:"%d\u30f6\u6708",y:"1\u5e74",yy:"%d\u5e74"}})}(i(16738))},80059:function(v,b,i){!function(r){"use strict";r.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(f,u){return 12===f&&(f=0),"enjing"===u?f:"siyang"===u?f>=11?f:f+12:"sonten"===u||"ndalu"===u?f+12:void 0},meridiem:function(f,u,e){return f<11?"enjing":f<15?"siyang":f<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(i(16738))},66870:function(v,b,i){!function(r){"use strict";r.defineLocale("ka",{months:"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8_\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8_\u10db\u10d0\u10e0\u10e2\u10d8_\u10d0\u10de\u10e0\u10d8\u10da\u10d8_\u10db\u10d0\u10d8\u10e1\u10d8_\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8_\u10d8\u10d5\u10da\u10d8\u10e1\u10d8_\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd_\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8_\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8_\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8".split("_"),monthsShort:"\u10d8\u10d0\u10dc_\u10d7\u10d4\u10d1_\u10db\u10d0\u10e0_\u10d0\u10de\u10e0_\u10db\u10d0\u10d8_\u10d8\u10d5\u10dc_\u10d8\u10d5\u10da_\u10d0\u10d2\u10d5_\u10e1\u10d4\u10e5_\u10dd\u10e5\u10e2_\u10dc\u10dd\u10d4_\u10d3\u10d4\u10d9".split("_"),weekdays:{standalone:"\u10d9\u10d5\u10d8\u10e0\u10d0_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8_\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8".split("_"),format:"\u10d9\u10d5\u10d8\u10e0\u10d0\u10e1_\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1_\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10e1_\u10e8\u10d0\u10d1\u10d0\u10d7\u10e1".split("_"),isFormat:/(\u10ec\u10d8\u10dc\u10d0|\u10e8\u10d4\u10db\u10d3\u10d4\u10d2)/},weekdaysShort:"\u10d9\u10d5\u10d8_\u10dd\u10e0\u10e8_\u10e1\u10d0\u10db_\u10dd\u10d7\u10ee_\u10ee\u10e3\u10d7_\u10de\u10d0\u10e0_\u10e8\u10d0\u10d1".split("_"),weekdaysMin:"\u10d9\u10d5_\u10dd\u10e0_\u10e1\u10d0_\u10dd\u10d7_\u10ee\u10e3_\u10de\u10d0_\u10e8\u10d0".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u10d3\u10e6\u10d4\u10e1] LT[-\u10d6\u10d4]",nextDay:"[\u10ee\u10d5\u10d0\u10da] LT[-\u10d6\u10d4]",lastDay:"[\u10d2\u10e3\u10e8\u10d8\u10dc] LT[-\u10d6\u10d4]",nextWeek:"[\u10e8\u10d4\u10db\u10d3\u10d4\u10d2] dddd LT[-\u10d6\u10d4]",lastWeek:"[\u10ec\u10d8\u10dc\u10d0] dddd LT-\u10d6\u10d4",sameElse:"L"},relativeTime:{future:function(f){return f.replace(/(\u10ec\u10d0\u10db|\u10ec\u10e3\u10d7|\u10e1\u10d0\u10d0\u10d7|\u10ec\u10d4\u10da|\u10d3\u10e6|\u10d7\u10d5)(\u10d8|\u10d4)/,function(u,e,p){return"\u10d8"===p?e+"\u10e8\u10d8":e+p+"\u10e8\u10d8"})},past:function(f){return/(\u10ec\u10d0\u10db\u10d8|\u10ec\u10e3\u10d7\u10d8|\u10e1\u10d0\u10d0\u10d7\u10d8|\u10d3\u10e6\u10d4|\u10d7\u10d5\u10d4)/.test(f)?f.replace(/(\u10d8|\u10d4)$/,"\u10d8\u10e1 \u10ec\u10d8\u10dc"):/\u10ec\u10d4\u10da\u10d8/.test(f)?f.replace(/\u10ec\u10d4\u10da\u10d8$/,"\u10ec\u10da\u10d8\u10e1 \u10ec\u10d8\u10dc"):f},s:"\u10e0\u10d0\u10db\u10d3\u10d4\u10dc\u10d8\u10db\u10d4 \u10ec\u10d0\u10db\u10d8",ss:"%d \u10ec\u10d0\u10db\u10d8",m:"\u10ec\u10e3\u10d7\u10d8",mm:"%d \u10ec\u10e3\u10d7\u10d8",h:"\u10e1\u10d0\u10d0\u10d7\u10d8",hh:"%d \u10e1\u10d0\u10d0\u10d7\u10d8",d:"\u10d3\u10e6\u10d4",dd:"%d \u10d3\u10e6\u10d4",M:"\u10d7\u10d5\u10d4",MM:"%d \u10d7\u10d5\u10d4",y:"\u10ec\u10d4\u10da\u10d8",yy:"%d \u10ec\u10d4\u10da\u10d8"},dayOfMonthOrdinalParse:/0|1-\u10da\u10d8|\u10db\u10d4-\d{1,2}|\d{1,2}-\u10d4/,ordinal:function(f){return 0===f?f:1===f?f+"-\u10da\u10d8":f<20||f<=100&&f%20==0||f%100==0?"\u10db\u10d4-"+f:f+"-\u10d4"},week:{dow:1,doy:7}})}(i(16738))},80880:function(v,b,i){!function(r){"use strict";var a={0:"-\u0448\u0456",1:"-\u0448\u0456",2:"-\u0448\u0456",3:"-\u0448\u0456",4:"-\u0448\u0456",5:"-\u0448\u0456",6:"-\u0448\u044b",7:"-\u0448\u0456",8:"-\u0448\u0456",9:"-\u0448\u044b",10:"-\u0448\u044b",20:"-\u0448\u044b",30:"-\u0448\u044b",40:"-\u0448\u044b",50:"-\u0448\u0456",60:"-\u0448\u044b",70:"-\u0448\u0456",80:"-\u0448\u0456",90:"-\u0448\u044b",100:"-\u0448\u0456"};r.defineLocale("kk",{months:"\u049b\u0430\u04a3\u0442\u0430\u0440_\u0430\u049b\u043f\u0430\u043d_\u043d\u0430\u0443\u0440\u044b\u0437_\u0441\u04d9\u0443\u0456\u0440_\u043c\u0430\u043c\u044b\u0440_\u043c\u0430\u0443\u0441\u044b\u043c_\u0448\u0456\u043b\u0434\u0435_\u0442\u0430\u043c\u044b\u0437_\u049b\u044b\u0440\u043a\u04af\u0439\u0435\u043a_\u049b\u0430\u0437\u0430\u043d_\u049b\u0430\u0440\u0430\u0448\u0430_\u0436\u0435\u043b\u0442\u043e\u049b\u0441\u0430\u043d".split("_"),monthsShort:"\u049b\u0430\u04a3_\u0430\u049b\u043f_\u043d\u0430\u0443_\u0441\u04d9\u0443_\u043c\u0430\u043c_\u043c\u0430\u0443_\u0448\u0456\u043b_\u0442\u0430\u043c_\u049b\u044b\u0440_\u049b\u0430\u0437_\u049b\u0430\u0440_\u0436\u0435\u043b".split("_"),weekdays:"\u0436\u0435\u043a\u0441\u0435\u043d\u0431\u0456_\u0434\u04af\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0441\u04d9\u0440\u0441\u0435\u043d\u0431\u0456_\u0431\u0435\u0439\u0441\u0435\u043d\u0431\u0456_\u0436\u04b1\u043c\u0430_\u0441\u0435\u043d\u0431\u0456".split("_"),weekdaysShort:"\u0436\u0435\u043a_\u0434\u04af\u0439_\u0441\u0435\u0439_\u0441\u04d9\u0440_\u0431\u0435\u0439_\u0436\u04b1\u043c_\u0441\u0435\u043d".split("_"),weekdaysMin:"\u0436\u043a_\u0434\u0439_\u0441\u0439_\u0441\u0440_\u0431\u0439_\u0436\u043c_\u0441\u043d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u0456\u043d \u0441\u0430\u0493\u0430\u0442] LT",nextDay:"[\u0415\u0440\u0442\u0435\u04a3 \u0441\u0430\u0493\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0493\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0448\u0435 \u0441\u0430\u0493\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u0435\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u04a3] dddd [\u0441\u0430\u0493\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0456\u0448\u0456\u043d\u0434\u0435",past:"%s \u0431\u04b1\u0440\u044b\u043d",s:"\u0431\u0456\u0440\u043d\u0435\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0456\u0440 \u043c\u0438\u043d\u0443\u0442",mm:"%d \u043c\u0438\u043d\u0443\u0442",h:"\u0431\u0456\u0440 \u0441\u0430\u0493\u0430\u0442",hh:"%d \u0441\u0430\u0493\u0430\u0442",d:"\u0431\u0456\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0456\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0456\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0448\u0456|\u0448\u044b)/,ordinal:function(u){return u+(a[u]||a[u%10]||a[u>=100?100:null])},week:{dow:1,doy:7}})}(i(16738))},1083:function(v,b,i){!function(r){"use strict";var a={1:"\u17e1",2:"\u17e2",3:"\u17e3",4:"\u17e4",5:"\u17e5",6:"\u17e6",7:"\u17e7",8:"\u17e8",9:"\u17e9",0:"\u17e0"},f={"\u17e1":"1","\u17e2":"2","\u17e3":"3","\u17e4":"4","\u17e5":"5","\u17e6":"6","\u17e7":"7","\u17e8":"8","\u17e9":"9","\u17e0":"0"};r.defineLocale("km",{months:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),monthsShort:"\u1798\u1780\u179a\u17b6_\u1780\u17bb\u1798\u17d2\u1797\u17c8_\u1798\u17b8\u1793\u17b6_\u1798\u17c1\u179f\u17b6_\u17a7\u179f\u1797\u17b6_\u1798\u17b7\u1790\u17bb\u1793\u17b6_\u1780\u1780\u17d2\u1780\u178a\u17b6_\u179f\u17b8\u17a0\u17b6_\u1780\u1789\u17d2\u1789\u17b6_\u178f\u17bb\u179b\u17b6_\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6_\u1792\u17d2\u1793\u17bc".split("_"),weekdays:"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799_\u1785\u17d0\u1793\u17d2\u1791_\u17a2\u1784\u17d2\u1782\u17b6\u179a_\u1796\u17bb\u1792_\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd_\u179f\u17bb\u1780\u17d2\u179a_\u179f\u17c5\u179a\u17cd".split("_"),weekdaysShort:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysMin:"\u17a2\u17b6_\u1785_\u17a2_\u1796_\u1796\u17d2\u179a_\u179f\u17bb_\u179f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u1796\u17d2\u179a\u17b9\u1780|\u179b\u17d2\u1784\u17b6\u1785/,isPM:function(e){return"\u179b\u17d2\u1784\u17b6\u1785"===e},meridiem:function(e,p,g){return e<12?"\u1796\u17d2\u179a\u17b9\u1780":"\u179b\u17d2\u1784\u17b6\u1785"},calendar:{sameDay:"[\u1790\u17d2\u1784\u17c3\u1793\u17c1\u17c7 \u1798\u17c9\u17c4\u1784] LT",nextDay:"[\u179f\u17d2\u17a2\u17c2\u1780 \u1798\u17c9\u17c4\u1784] LT",nextWeek:"dddd [\u1798\u17c9\u17c4\u1784] LT",lastDay:"[\u1798\u17d2\u179f\u17b7\u179b\u1798\u17b7\u1789 \u1798\u17c9\u17c4\u1784] LT",lastWeek:"dddd [\u179f\u1794\u17d2\u178f\u17b6\u17a0\u17cd\u1798\u17bb\u1793] [\u1798\u17c9\u17c4\u1784] LT",sameElse:"L"},relativeTime:{future:"%s\u1791\u17c0\u178f",past:"%s\u1798\u17bb\u1793",s:"\u1794\u17c9\u17bb\u1793\u17d2\u1798\u17b6\u1793\u179c\u17b7\u1793\u17b6\u1791\u17b8",ss:"%d \u179c\u17b7\u1793\u17b6\u1791\u17b8",m:"\u1798\u17bd\u1799\u1793\u17b6\u1791\u17b8",mm:"%d \u1793\u17b6\u1791\u17b8",h:"\u1798\u17bd\u1799\u1798\u17c9\u17c4\u1784",hh:"%d \u1798\u17c9\u17c4\u1784",d:"\u1798\u17bd\u1799\u1790\u17d2\u1784\u17c3",dd:"%d \u1790\u17d2\u1784\u17c3",M:"\u1798\u17bd\u1799\u1781\u17c2",MM:"%d \u1781\u17c2",y:"\u1798\u17bd\u1799\u1786\u17d2\u1793\u17b6\u17c6",yy:"%d \u1786\u17d2\u1793\u17b6\u17c6"},dayOfMonthOrdinalParse:/\u1791\u17b8\d{1,2}/,ordinal:"\u1791\u17b8%d",preparse:function(e){return e.replace(/[\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u17e0]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},week:{dow:1,doy:4}})}(i(16738))},68785:function(v,b,i){!function(r){"use strict";var a={1:"\u0ce7",2:"\u0ce8",3:"\u0ce9",4:"\u0cea",5:"\u0ceb",6:"\u0cec",7:"\u0ced",8:"\u0cee",9:"\u0cef",0:"\u0ce6"},f={"\u0ce7":"1","\u0ce8":"2","\u0ce9":"3","\u0cea":"4","\u0ceb":"5","\u0cec":"6","\u0ced":"7","\u0cee":"8","\u0cef":"9","\u0ce6":"0"};r.defineLocale("kn",{months:"\u0c9c\u0ca8\u0cb5\u0cb0\u0cbf_\u0cab\u0cc6\u0cac\u0ccd\u0cb0\u0cb5\u0cb0\u0cbf_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5\u0cac\u0cb0\u0ccd_\u0ca8\u0cb5\u0cc6\u0c82\u0cac\u0cb0\u0ccd_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82\u0cac\u0cb0\u0ccd".split("_"),monthsShort:"\u0c9c\u0ca8_\u0cab\u0cc6\u0cac\u0ccd\u0cb0_\u0cae\u0cbe\u0cb0\u0ccd\u0c9a\u0ccd_\u0c8f\u0caa\u0ccd\u0cb0\u0cbf\u0cb2\u0ccd_\u0cae\u0cc6\u0cd5_\u0c9c\u0cc2\u0ca8\u0ccd_\u0c9c\u0cc1\u0cb2\u0cc6\u0cd6_\u0c86\u0c97\u0cb8\u0ccd\u0c9f\u0ccd_\u0cb8\u0cc6\u0caa\u0ccd\u0c9f\u0cc6\u0c82_\u0c85\u0c95\u0ccd\u0c9f\u0cc6\u0cc2\u0cd5_\u0ca8\u0cb5\u0cc6\u0c82_\u0ca1\u0cbf\u0cb8\u0cc6\u0c82".split("_"),monthsParseExact:!0,weekdays:"\u0cad\u0cbe\u0ca8\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae\u0cb5\u0cbe\u0cb0_\u0cae\u0c82\u0c97\u0cb3\u0cb5\u0cbe\u0cb0_\u0cac\u0cc1\u0ca7\u0cb5\u0cbe\u0cb0_\u0c97\u0cc1\u0cb0\u0cc1\u0cb5\u0cbe\u0cb0_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0\u0cb5\u0cbe\u0cb0_\u0cb6\u0ca8\u0cbf\u0cb5\u0cbe\u0cb0".split("_"),weekdaysShort:"\u0cad\u0cbe\u0ca8\u0cc1_\u0cb8\u0cc6\u0cc2\u0cd5\u0cae_\u0cae\u0c82\u0c97\u0cb3_\u0cac\u0cc1\u0ca7_\u0c97\u0cc1\u0cb0\u0cc1_\u0cb6\u0cc1\u0c95\u0ccd\u0cb0_\u0cb6\u0ca8\u0cbf".split("_"),weekdaysMin:"\u0cad\u0cbe_\u0cb8\u0cc6\u0cc2\u0cd5_\u0cae\u0c82_\u0cac\u0cc1_\u0c97\u0cc1_\u0cb6\u0cc1_\u0cb6".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c87\u0c82\u0ca6\u0cc1] LT",nextDay:"[\u0ca8\u0cbe\u0cb3\u0cc6] LT",nextWeek:"dddd, LT",lastDay:"[\u0ca8\u0cbf\u0ca8\u0ccd\u0ca8\u0cc6] LT",lastWeek:"[\u0c95\u0cc6\u0cc2\u0ca8\u0cc6\u0caf] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0ca8\u0c82\u0ca4\u0cb0",past:"%s \u0cb9\u0cbf\u0c82\u0ca6\u0cc6",s:"\u0c95\u0cc6\u0cb2\u0cb5\u0cc1 \u0c95\u0ccd\u0cb7\u0ca3\u0c97\u0cb3\u0cc1",ss:"%d \u0cb8\u0cc6\u0c95\u0cc6\u0c82\u0ca1\u0cc1\u0c97\u0cb3\u0cc1",m:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",mm:"%d \u0ca8\u0cbf\u0cae\u0cbf\u0cb7",h:"\u0c92\u0c82\u0ca6\u0cc1 \u0c97\u0c82\u0c9f\u0cc6",hh:"%d \u0c97\u0c82\u0c9f\u0cc6",d:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca6\u0cbf\u0ca8",dd:"%d \u0ca6\u0cbf\u0ca8",M:"\u0c92\u0c82\u0ca6\u0cc1 \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",MM:"%d \u0ca4\u0cbf\u0c82\u0c97\u0cb3\u0cc1",y:"\u0c92\u0c82\u0ca6\u0cc1 \u0cb5\u0cb0\u0ccd\u0cb7",yy:"%d \u0cb5\u0cb0\u0ccd\u0cb7"},preparse:function(e){return e.replace(/[\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0ce6]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},meridiemParse:/\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf|\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6|\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8|\u0cb8\u0c82\u0c9c\u0cc6/,meridiemHour:function(e,p){return 12===e&&(e=0),"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"===p?e<4?e:e+12:"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6"===p?e:"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8"===p?e>=10?e:e+12:"\u0cb8\u0c82\u0c9c\u0cc6"===p?e+12:void 0},meridiem:function(e,p,g){return e<4?"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf":e<10?"\u0cac\u0cc6\u0cb3\u0cbf\u0c97\u0ccd\u0c97\u0cc6":e<17?"\u0cae\u0ca7\u0ccd\u0caf\u0cbe\u0cb9\u0ccd\u0ca8":e<20?"\u0cb8\u0c82\u0c9c\u0cc6":"\u0cb0\u0cbe\u0ca4\u0ccd\u0cb0\u0cbf"},dayOfMonthOrdinalParse:/\d{1,2}(\u0ca8\u0cc6\u0cd5)/,ordinal:function(e){return e+"\u0ca8\u0cc6\u0cd5"},week:{dow:0,doy:6}})}(i(16738))},21721:function(v,b,i){!function(r){"use strict";r.defineLocale("ko",{months:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),monthsShort:"1\uc6d4_2\uc6d4_3\uc6d4_4\uc6d4_5\uc6d4_6\uc6d4_7\uc6d4_8\uc6d4_9\uc6d4_10\uc6d4_11\uc6d4_12\uc6d4".split("_"),weekdays:"\uc77c\uc694\uc77c_\uc6d4\uc694\uc77c_\ud654\uc694\uc77c_\uc218\uc694\uc77c_\ubaa9\uc694\uc77c_\uae08\uc694\uc77c_\ud1a0\uc694\uc77c".split("_"),weekdaysShort:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),weekdaysMin:"\uc77c_\uc6d4_\ud654_\uc218_\ubaa9_\uae08_\ud1a0".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY\ub144 MMMM D\uc77c",LLL:"YYYY\ub144 MMMM D\uc77c A h:mm",LLLL:"YYYY\ub144 MMMM D\uc77c dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY\ub144 MMMM D\uc77c",lll:"YYYY\ub144 MMMM D\uc77c A h:mm",llll:"YYYY\ub144 MMMM D\uc77c dddd A h:mm"},calendar:{sameDay:"\uc624\ub298 LT",nextDay:"\ub0b4\uc77c LT",nextWeek:"dddd LT",lastDay:"\uc5b4\uc81c LT",lastWeek:"\uc9c0\ub09c\uc8fc dddd LT",sameElse:"L"},relativeTime:{future:"%s \ud6c4",past:"%s \uc804",s:"\uba87 \ucd08",ss:"%d\ucd08",m:"1\ubd84",mm:"%d\ubd84",h:"\ud55c \uc2dc\uac04",hh:"%d\uc2dc\uac04",d:"\ud558\ub8e8",dd:"%d\uc77c",M:"\ud55c \ub2ec",MM:"%d\ub2ec",y:"\uc77c \ub144",yy:"%d\ub144"},dayOfMonthOrdinalParse:/\d{1,2}(\uc77c|\uc6d4|\uc8fc)/,ordinal:function(f,u){switch(u){case"d":case"D":case"DDD":return f+"\uc77c";case"M":return f+"\uc6d4";case"w":case"W":return f+"\uc8fc";default:return f}},meridiemParse:/\uc624\uc804|\uc624\ud6c4/,isPM:function(f){return"\uc624\ud6c4"===f},meridiem:function(f,u,e){return f<12?"\uc624\uc804":"\uc624\ud6c4"}})}(i(16738))},37851:function(v,b,i){!function(r){"use strict";var a={1:"\u0661",2:"\u0662",3:"\u0663",4:"\u0664",5:"\u0665",6:"\u0666",7:"\u0667",8:"\u0668",9:"\u0669",0:"\u0660"},f={"\u0661":"1","\u0662":"2","\u0663":"3","\u0664":"4","\u0665":"5","\u0666":"6","\u0667":"7","\u0668":"8","\u0669":"9","\u0660":"0"},u=["\u06a9\u0627\u0646\u0648\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0634\u0648\u0628\u0627\u062a","\u0626\u0627\u0632\u0627\u0631","\u0646\u06cc\u0633\u0627\u0646","\u0626\u0627\u06cc\u0627\u0631","\u062d\u0648\u0632\u06d5\u06cc\u0631\u0627\u0646","\u062a\u06d5\u0645\u0645\u0648\u0632","\u0626\u0627\u0628","\u0626\u06d5\u06cc\u0644\u0648\u0648\u0644","\u062a\u0634\u0631\u06cc\u0646\u06cc \u06cc\u06d5\u0643\u06d5\u0645","\u062a\u0634\u0631\u06cc\u0646\u06cc \u062f\u0648\u0648\u06d5\u0645","\u0643\u0627\u0646\u0648\u0646\u06cc \u06cc\u06d5\u06a9\u06d5\u0645"];r.defineLocale("ku",{months:u,monthsShort:u,weekdays:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u062f\u0648\u0648\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0633\u06ce\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645\u0645\u0647\u200c_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysShort:"\u06cc\u0647\u200c\u0643\u0634\u0647\u200c\u0645_\u062f\u0648\u0648\u0634\u0647\u200c\u0645_\u0633\u06ce\u0634\u0647\u200c\u0645_\u0686\u0648\u0627\u0631\u0634\u0647\u200c\u0645_\u067e\u06ce\u0646\u062c\u0634\u0647\u200c\u0645_\u0647\u0647\u200c\u06cc\u0646\u06cc_\u0634\u0647\u200c\u0645\u0645\u0647\u200c".split("_"),weekdaysMin:"\u06cc_\u062f_\u0633_\u0686_\u067e_\u0647_\u0634".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c|\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc/,isPM:function(p){return/\u0626\u06ce\u0648\u0627\u0631\u0647\u200c/.test(p)},meridiem:function(p,g,S){return p<12?"\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc":"\u0626\u06ce\u0648\u0627\u0631\u0647\u200c"},calendar:{sameDay:"[\u0626\u0647\u200c\u0645\u0631\u06c6 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextDay:"[\u0628\u0647\u200c\u06cc\u0627\u0646\u06cc \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",nextWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastDay:"[\u062f\u0648\u06ce\u0646\u06ce \u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",lastWeek:"dddd [\u0643\u0627\u062a\u0698\u0645\u06ce\u0631] LT",sameElse:"L"},relativeTime:{future:"\u0644\u0647\u200c %s",past:"%s",s:"\u0686\u0647\u200c\u0646\u062f \u0686\u0631\u0643\u0647\u200c\u06cc\u0647\u200c\u0643",ss:"\u0686\u0631\u0643\u0647\u200c %d",m:"\u06cc\u0647\u200c\u0643 \u062e\u0648\u0644\u0647\u200c\u0643",mm:"%d \u062e\u0648\u0644\u0647\u200c\u0643",h:"\u06cc\u0647\u200c\u0643 \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",hh:"%d \u0643\u0627\u062a\u0698\u0645\u06ce\u0631",d:"\u06cc\u0647\u200c\u0643 \u0695\u06c6\u0698",dd:"%d \u0695\u06c6\u0698",M:"\u06cc\u0647\u200c\u0643 \u0645\u0627\u0646\u06af",MM:"%d \u0645\u0627\u0646\u06af",y:"\u06cc\u0647\u200c\u0643 \u0633\u0627\u06b5",yy:"%d \u0633\u0627\u06b5"},preparse:function(p){return p.replace(/[\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u0660]/g,function(g){return f[g]}).replace(/\u060c/g,",")},postformat:function(p){return p.replace(/\d/g,function(g){return a[g]}).replace(/,/g,"\u060c")},week:{dow:6,doy:12}})}(i(16738))},1727:function(v,b,i){!function(r){"use strict";var a={0:"-\u0447\u04af",1:"-\u0447\u0438",2:"-\u0447\u0438",3:"-\u0447\u04af",4:"-\u0447\u04af",5:"-\u0447\u0438",6:"-\u0447\u044b",7:"-\u0447\u0438",8:"-\u0447\u0438",9:"-\u0447\u0443",10:"-\u0447\u0443",20:"-\u0447\u044b",30:"-\u0447\u0443",40:"-\u0447\u044b",50:"-\u0447\u04af",60:"-\u0447\u044b",70:"-\u0447\u0438",80:"-\u0447\u0438",90:"-\u0447\u0443",100:"-\u0447\u04af"};r.defineLocale("ky",{months:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u0416\u0435\u043a\u0448\u0435\u043c\u0431\u0438_\u0414\u04af\u0439\u0448\u04e9\u043c\u0431\u04af_\u0428\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0428\u0430\u0440\u0448\u0435\u043c\u0431\u0438_\u0411\u0435\u0439\u0448\u0435\u043c\u0431\u0438_\u0416\u0443\u043c\u0430_\u0418\u0448\u0435\u043c\u0431\u0438".split("_"),weekdaysShort:"\u0416\u0435\u043a_\u0414\u04af\u0439_\u0428\u0435\u0439_\u0428\u0430\u0440_\u0411\u0435\u0439_\u0416\u0443\u043c_\u0418\u0448\u0435".split("_"),weekdaysMin:"\u0416\u043a_\u0414\u0439_\u0428\u0439_\u0428\u0440_\u0411\u0439_\u0416\u043c_\u0418\u0448".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0411\u04af\u0433\u04af\u043d \u0441\u0430\u0430\u0442] LT",nextDay:"[\u042d\u0440\u0442\u0435\u04a3 \u0441\u0430\u0430\u0442] LT",nextWeek:"dddd [\u0441\u0430\u0430\u0442] LT",lastDay:"[\u041a\u0435\u0447\u044d\u044d \u0441\u0430\u0430\u0442] LT",lastWeek:"[\u04e8\u0442\u043a\u04e9\u043d \u0430\u043f\u0442\u0430\u043d\u044b\u043d] dddd [\u043a\u04af\u043d\u04af] [\u0441\u0430\u0430\u0442] LT",sameElse:"L"},relativeTime:{future:"%s \u0438\u0447\u0438\u043d\u0434\u0435",past:"%s \u043c\u0443\u0440\u0443\u043d",s:"\u0431\u0438\u0440\u043d\u0435\u0447\u0435 \u0441\u0435\u043a\u0443\u043d\u0434",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434",m:"\u0431\u0438\u0440 \u043c\u04af\u043d\u04e9\u0442",mm:"%d \u043c\u04af\u043d\u04e9\u0442",h:"\u0431\u0438\u0440 \u0441\u0430\u0430\u0442",hh:"%d \u0441\u0430\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u04af\u043d",dd:"%d \u043a\u04af\u043d",M:"\u0431\u0438\u0440 \u0430\u0439",MM:"%d \u0430\u0439",y:"\u0431\u0438\u0440 \u0436\u044b\u043b",yy:"%d \u0436\u044b\u043b"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0447\u0438|\u0447\u044b|\u0447\u04af|\u0447\u0443)/,ordinal:function(u){return u+(a[u]||a[u%10]||a[u>=100?100:null])},week:{dow:1,doy:7}})}(i(16738))},40346:function(v,b,i){!function(r){"use strict";function a(g,S,M,w){var x={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return S?x[M][0]:x[M][1]}function e(g){if(g=parseInt(g,10),isNaN(g))return!1;if(g<0)return!0;if(g<10)return 4<=g&&g<=7;if(g<100){var S=g%10;return e(0===S?g/10:S)}if(g<1e4){for(;g>=10;)g/=10;return e(g)}return e(g/=1e3)}r.defineLocale("lb",{months:"Januar_Februar_M\xe4erz_Abr\xebll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_M\xe9indeg_D\xebnschdeg_M\xebttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._M\xe9._D\xeb._M\xeb._Do._Fr._Sa.".split("_"),weekdaysMin:"So_M\xe9_D\xeb_M\xeb_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[G\xebschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function f(g){return e(g.substr(0,g.indexOf(" ")))?"a "+g:"an "+g},past:function u(g){return e(g.substr(0,g.indexOf(" ")))?"viru "+g:"virun "+g},s:"e puer Sekonnen",ss:"%d Sekonnen",m:a,mm:"%d Minutten",h:a,hh:"%d Stonnen",d:a,dd:"%d Deeg",M:a,MM:"%d M\xe9int",y:a,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},93002:function(v,b,i){!function(r){"use strict";r.defineLocale("lo",{months:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),monthsShort:"\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99_\u0e81\u0eb8\u0ea1\u0e9e\u0eb2_\u0ea1\u0eb5\u0e99\u0eb2_\u0ec0\u0ea1\u0eaa\u0eb2_\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2_\u0ea1\u0eb4\u0e96\u0eb8\u0e99\u0eb2_\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94_\u0eaa\u0eb4\u0e87\u0eab\u0eb2_\u0e81\u0eb1\u0e99\u0e8d\u0eb2_\u0e95\u0eb8\u0ea5\u0eb2_\u0e9e\u0eb0\u0e88\u0eb4\u0e81_\u0e97\u0eb1\u0e99\u0ea7\u0eb2".split("_"),weekdays:"\u0ead\u0eb2\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysShort:"\u0e97\u0eb4\u0e94_\u0e88\u0eb1\u0e99_\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99_\u0e9e\u0eb8\u0e94_\u0e9e\u0eb0\u0eab\u0eb1\u0e94_\u0eaa\u0eb8\u0e81_\u0ec0\u0eaa\u0ebb\u0eb2".split("_"),weekdaysMin:"\u0e97_\u0e88_\u0ead\u0e84_\u0e9e_\u0e9e\u0eab_\u0eaa\u0e81_\u0eaa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"\u0ea7\u0eb1\u0e99dddd D MMMM YYYY HH:mm"},meridiemParse:/\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2|\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87/,isPM:function(f){return"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"===f},meridiem:function(f,u,e){return f<12?"\u0e95\u0ead\u0e99\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2":"\u0e95\u0ead\u0e99\u0ec1\u0ea5\u0e87"},calendar:{sameDay:"[\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextDay:"[\u0ea1\u0eb7\u0ec9\u0ead\u0eb7\u0ec8\u0e99\u0ec0\u0ea7\u0ea5\u0eb2] LT",nextWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0edc\u0ec9\u0eb2\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastDay:"[\u0ea1\u0eb7\u0ec9\u0ea7\u0eb2\u0e99\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",lastWeek:"[\u0ea7\u0eb1\u0e99]dddd[\u0ec1\u0ea5\u0ec9\u0ea7\u0e99\u0eb5\u0ec9\u0ec0\u0ea7\u0ea5\u0eb2] LT",sameElse:"L"},relativeTime:{future:"\u0ead\u0eb5\u0e81 %s",past:"%s\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2",s:"\u0e9a\u0ecd\u0ec8\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0ec3\u0e94\u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",ss:"%d \u0ea7\u0eb4\u0e99\u0eb2\u0e97\u0eb5",m:"1 \u0e99\u0eb2\u0e97\u0eb5",mm:"%d \u0e99\u0eb2\u0e97\u0eb5",h:"1 \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",hh:"%d \u0e8a\u0ebb\u0ec8\u0ea7\u0ec2\u0ea1\u0e87",d:"1 \u0ea1\u0eb7\u0ec9",dd:"%d \u0ea1\u0eb7\u0ec9",M:"1 \u0ec0\u0e94\u0eb7\u0ead\u0e99",MM:"%d \u0ec0\u0e94\u0eb7\u0ead\u0e99",y:"1 \u0e9b\u0eb5",yy:"%d \u0e9b\u0eb5"},dayOfMonthOrdinalParse:/(\u0e97\u0eb5\u0ec8)\d{1,2}/,ordinal:function(f){return"\u0e97\u0eb5\u0ec8"+f}})}(i(16738))},64035:function(v,b,i){!function(r){"use strict";var a={ss:"sekund\u0117_sekund\u017ei\u0173_sekundes",m:"minut\u0117_minut\u0117s_minut\u0119",mm:"minut\u0117s_minu\u010di\u0173_minutes",h:"valanda_valandos_valand\u0105",hh:"valandos_valand\u0173_valandas",d:"diena_dienos_dien\u0105",dd:"dienos_dien\u0173_dienas",M:"m\u0117nuo_m\u0117nesio_m\u0117nes\u012f",MM:"m\u0117nesiai_m\u0117nesi\u0173_m\u0117nesius",y:"metai_met\u0173_metus",yy:"metai_met\u0173_metus"};function u(M,w,x,B){return w?p(x)[0]:B?p(x)[1]:p(x)[2]}function e(M){return M%10==0||M>10&&M<20}function p(M){return a[M].split("_")}function g(M,w,x,B){var W=M+" ";return 1===M?W+u(0,w,x[0],B):w?W+(e(M)?p(x)[1]:p(x)[0]):B?W+p(x)[1]:W+(e(M)?p(x)[1]:p(x)[2])}r.defineLocale("lt",{months:{format:"sausio_vasario_kovo_baland\u017eio_gegu\u017e\u0117s_bir\u017eelio_liepos_rugpj\u016b\u010dio_rugs\u0117jo_spalio_lapkri\u010dio_gruod\u017eio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegu\u017e\u0117_bir\u017eelis_liepa_rugpj\u016btis_rugs\u0117jis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadien\u012f_pirmadien\u012f_antradien\u012f_tre\u010diadien\u012f_ketvirtadien\u012f_penktadien\u012f_\u0161e\u0161tadien\u012f".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_tre\u010diadienis_ketvirtadienis_penktadienis_\u0161e\u0161tadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_\u0160e\u0161".split("_"),weekdaysMin:"S_P_A_T_K_Pn_\u0160".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[\u0160iandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Pra\u0117jus\u012f] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prie\u0161 %s",s:function f(M,w,x,B){return w?"kelios sekund\u0117s":B?"keli\u0173 sekund\u017ei\u0173":"kelias sekundes"},ss:g,m:u,mm:g,h:u,hh:g,d:u,dd:g,M:u,MM:g,y:u,yy:g},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(M){return M+"-oji"},week:{dow:1,doy:4}})}(i(16738))},56927:function(v,b,i){!function(r){"use strict";var a={ss:"sekundes_sekund\u0113m_sekunde_sekundes".split("_"),m:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),mm:"min\u016btes_min\u016bt\u0113m_min\u016bte_min\u016btes".split("_"),h:"stundas_stund\u0101m_stunda_stundas".split("_"),hh:"stundas_stund\u0101m_stunda_stundas".split("_"),d:"dienas_dien\u0101m_diena_dienas".split("_"),dd:"dienas_dien\u0101m_diena_dienas".split("_"),M:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),MM:"m\u0113ne\u0161a_m\u0113ne\u0161iem_m\u0113nesis_m\u0113ne\u0161i".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function f(S,M,w){return w?M%10==1&&M%100!=11?S[2]:S[3]:M%10==1&&M%100!=11?S[0]:S[1]}function u(S,M,w){return S+" "+f(a[w],S,M)}function e(S,M,w){return f(a[w],S,M)}r.defineLocale("lv",{months:"janv\u0101ris_febru\u0101ris_marts_apr\u012blis_maijs_j\u016bnijs_j\u016blijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_j\u016bn_j\u016bl_aug_sep_okt_nov_dec".split("_"),weekdays:"sv\u0113tdiena_pirmdiena_otrdiena_tre\u0161diena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[\u0160odien pulksten] LT",nextDay:"[R\u012bt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pag\u0101ju\u0161\u0101] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"p\u0113c %s",past:"pirms %s",s:function p(S,M){return M?"da\u017eas sekundes":"da\u017e\u0101m sekund\u0113m"},ss:u,m:e,mm:u,h:e,hh:u,d:e,dd:u,M:e,MM:u,y:e,yy:u},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},5634:function(v,b,i){!function(r){"use strict";var a={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(u,e){return 1===u?e[0]:u>=2&&u<=4?e[1]:e[2]},translate:function(u,e,p){var g=a.words[p];return 1===p.length?e?g[0]:g[1]:u+" "+a.correctGrammaticalCase(u,g)}};r.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedjelje] [u] LT","[pro\u0161log] [ponedjeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srijede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:"dan",dd:a.translate,M:"mjesec",MM:a.translate,y:"godinu",yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(i(16738))},94173:function(v,b,i){!function(r){"use strict";r.defineLocale("mi",{months:"Kohi-t\u0101te_Hui-tanguru_Pout\u016b-te-rangi_Paenga-wh\u0101wh\u0101_Haratua_Pipiri_H\u014dngoingoi_Here-turi-k\u014dk\u0101_Mahuru_Whiringa-\u0101-nuku_Whiringa-\u0101-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_H\u014dngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"R\u0101tapu_Mane_T\u016brei_Wenerei_T\u0101ite_Paraire_H\u0101tarei".split("_"),weekdaysShort:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),weekdaysMin:"Ta_Ma_T\u016b_We_T\u0101i_Pa_H\u0101".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te h\u0113kona ruarua",ss:"%d h\u0113kona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(i(16738))},86320:function(v,b,i){!function(r){"use strict";r.defineLocale("mk",{months:"\u0458\u0430\u043d\u0443\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d\u0438_\u0458\u0443\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438_\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438_\u043d\u043e\u0435\u043c\u0432\u0440\u0438_\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438".split("_"),monthsShort:"\u0458\u0430\u043d_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433_\u0441\u0435\u043f_\u043e\u043a\u0442_\u043d\u043e\u0435_\u0434\u0435\u043a".split("_"),weekdays:"\u043d\u0435\u0434\u0435\u043b\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u043e\u043a_\u043f\u0435\u0442\u043e\u043a_\u0441\u0430\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434_\u043f\u043e\u043d_\u0432\u0442\u043e_\u0441\u0440\u0435_\u0447\u0435\u0442_\u043f\u0435\u0442_\u0441\u0430\u0431".split("_"),weekdaysMin:"\u043de_\u043fo_\u0432\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441a".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[\u0414\u0435\u043d\u0435\u0441 \u0432\u043e] LT",nextDay:"[\u0423\u0442\u0440\u0435 \u0432\u043e] LT",nextWeek:"[\u0412\u043e] dddd [\u0432\u043e] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430 \u0432\u043e] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0430\u0442\u0430] dddd [\u0432\u043e] LT";case 1:case 2:case 4:case 5:return"[\u0418\u0437\u043c\u0438\u043d\u0430\u0442\u0438\u043e\u0442] dddd [\u0432\u043e] LT"}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435\u0434 %s",s:"\u043d\u0435\u043a\u043e\u043b\u043a\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:"%d \u0441\u0435\u043a\u0443\u043d\u0434\u0438",m:"\u0435\u0434\u043d\u0430 \u043c\u0438\u043d\u0443\u0442\u0430",mm:"%d \u043c\u0438\u043d\u0443\u0442\u0438",h:"\u0435\u0434\u0435\u043d \u0447\u0430\u0441",hh:"%d \u0447\u0430\u0441\u0430",d:"\u0435\u0434\u0435\u043d \u0434\u0435\u043d",dd:"%d \u0434\u0435\u043d\u0430",M:"\u0435\u0434\u0435\u043d \u043c\u0435\u0441\u0435\u0446",MM:"%d \u043c\u0435\u0441\u0435\u0446\u0438",y:"\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430",yy:"%d \u0433\u043e\u0434\u0438\u043d\u0438"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0435\u0432|\u0435\u043d|\u0442\u0438|\u0432\u0438|\u0440\u0438|\u043c\u0438)/,ordinal:function(f){var u=f%10,e=f%100;return 0===f?f+"-\u0435\u0432":0===e?f+"-\u0435\u043d":e>10&&e<20?f+"-\u0442\u0438":1===u?f+"-\u0432\u0438":2===u?f+"-\u0440\u0438":7===u||8===u?f+"-\u043c\u0438":f+"-\u0442\u0438"},week:{dow:1,doy:7}})}(i(16738))},11705:function(v,b,i){!function(r){"use strict";r.defineLocale("ml",{months:"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f_\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f_\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d_\u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d7d_\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48_\u0d13\u0d17\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d_\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31\u0d02\u0d2c\u0d7c_\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c_\u0d28\u0d35\u0d02\u0d2c\u0d7c_\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c".split("_"),monthsShort:"\u0d1c\u0d28\u0d41._\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41._\u0d2e\u0d3e\u0d7c._\u0d0f\u0d2a\u0d4d\u0d30\u0d3f._\u0d2e\u0d47\u0d2f\u0d4d_\u0d1c\u0d42\u0d7a_\u0d1c\u0d42\u0d32\u0d48._\u0d13\u0d17._\u0d38\u0d46\u0d2a\u0d4d\u0d31\u0d4d\u0d31._\u0d12\u0d15\u0d4d\u0d1f\u0d4b._\u0d28\u0d35\u0d02._\u0d21\u0d3f\u0d38\u0d02.".split("_"),monthsParseExact:!0,weekdays:"\u0d1e\u0d3e\u0d2f\u0d31\u0d3e\u0d34\u0d4d\u0d1a_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d3e\u0d34\u0d4d\u0d1a_\u0d1a\u0d4a\u0d35\u0d4d\u0d35\u0d3e\u0d34\u0d4d\u0d1a_\u0d2c\u0d41\u0d27\u0d28\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d3e\u0d34\u0d4d\u0d1a_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a_\u0d36\u0d28\u0d3f\u0d2f\u0d3e\u0d34\u0d4d\u0d1a".split("_"),weekdaysShort:"\u0d1e\u0d3e\u0d2f\u0d7c_\u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d7e_\u0d1a\u0d4a\u0d35\u0d4d\u0d35_\u0d2c\u0d41\u0d27\u0d7b_\u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02_\u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f_\u0d36\u0d28\u0d3f".split("_"),weekdaysMin:"\u0d1e\u0d3e_\u0d24\u0d3f_\u0d1a\u0d4a_\u0d2c\u0d41_\u0d35\u0d4d\u0d2f\u0d3e_\u0d35\u0d46_\u0d36".split("_"),longDateFormat:{LT:"A h:mm -\u0d28\u0d41",LTS:"A h:mm:ss -\u0d28\u0d41",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -\u0d28\u0d41",LLLL:"dddd, D MMMM YYYY, A h:mm -\u0d28\u0d41"},calendar:{sameDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d4d] LT",nextDay:"[\u0d28\u0d3e\u0d33\u0d46] LT",nextWeek:"dddd, LT",lastDay:"[\u0d07\u0d28\u0d4d\u0d28\u0d32\u0d46] LT",lastWeek:"[\u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d",past:"%s \u0d2e\u0d41\u0d7b\u0d2a\u0d4d",s:"\u0d05\u0d7d\u0d2a \u0d28\u0d3f\u0d2e\u0d3f\u0d37\u0d19\u0d4d\u0d19\u0d7e",ss:"%d \u0d38\u0d46\u0d15\u0d4d\u0d15\u0d7b\u0d21\u0d4d",m:"\u0d12\u0d30\u0d41 \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",mm:"%d \u0d2e\u0d3f\u0d28\u0d3f\u0d31\u0d4d\u0d31\u0d4d",h:"\u0d12\u0d30\u0d41 \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",hh:"%d \u0d2e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42\u0d7c",d:"\u0d12\u0d30\u0d41 \u0d26\u0d3f\u0d35\u0d38\u0d02",dd:"%d \u0d26\u0d3f\u0d35\u0d38\u0d02",M:"\u0d12\u0d30\u0d41 \u0d2e\u0d3e\u0d38\u0d02",MM:"%d \u0d2e\u0d3e\u0d38\u0d02",y:"\u0d12\u0d30\u0d41 \u0d35\u0d7c\u0d37\u0d02",yy:"%d \u0d35\u0d7c\u0d37\u0d02"},meridiemParse:/\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f|\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46|\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d|\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02|\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f/i,meridiemHour:function(f,u){return 12===f&&(f=0),"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"===u&&f>=4||"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d"===u||"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02"===u?f+12:f},meridiem:function(f,u,e){return f<4?"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f":f<12?"\u0d30\u0d3e\u0d35\u0d3f\u0d32\u0d46":f<17?"\u0d09\u0d1a\u0d4d\u0d1a \u0d15\u0d34\u0d3f\u0d1e\u0d4d\u0d1e\u0d4d":f<20?"\u0d35\u0d48\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d47\u0d30\u0d02":"\u0d30\u0d3e\u0d24\u0d4d\u0d30\u0d3f"}})}(i(16738))},31062:function(v,b,i){!function(r){"use strict";function a(u,e,p,g){switch(p){case"s":return e?"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434":"\u0445\u044d\u0434\u0445\u044d\u043d \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d";case"ss":return u+(e?" \u0441\u0435\u043a\u0443\u043d\u0434":" \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u043d");case"m":case"mm":return u+(e?" \u043c\u0438\u043d\u0443\u0442":" \u043c\u0438\u043d\u0443\u0442\u044b\u043d");case"h":case"hh":return u+(e?" \u0446\u0430\u0433":" \u0446\u0430\u0433\u0438\u0439\u043d");case"d":case"dd":return u+(e?" \u04e9\u0434\u04e9\u0440":" \u04e9\u0434\u0440\u0438\u0439\u043d");case"M":case"MM":return u+(e?" \u0441\u0430\u0440":" \u0441\u0430\u0440\u044b\u043d");case"y":case"yy":return u+(e?" \u0436\u0438\u043b":" \u0436\u0438\u043b\u0438\u0439\u043d");default:return u}}r.defineLocale("mn",{months:"\u041d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0425\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0413\u0443\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u04e9\u0440\u04e9\u0432\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0422\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0417\u0443\u0440\u0433\u0430\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0414\u043e\u043b\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u041d\u0430\u0439\u043c\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0415\u0441\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0430\u0432\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u043d\u044d\u0433\u0434\u04af\u0433\u044d\u044d\u0440 \u0441\u0430\u0440_\u0410\u0440\u0432\u0430\u043d \u0445\u043e\u0451\u0440\u0434\u0443\u0433\u0430\u0430\u0440 \u0441\u0430\u0440".split("_"),monthsShort:"1 \u0441\u0430\u0440_2 \u0441\u0430\u0440_3 \u0441\u0430\u0440_4 \u0441\u0430\u0440_5 \u0441\u0430\u0440_6 \u0441\u0430\u0440_7 \u0441\u0430\u0440_8 \u0441\u0430\u0440_9 \u0441\u0430\u0440_10 \u0441\u0430\u0440_11 \u0441\u0430\u0440_12 \u0441\u0430\u0440".split("_"),monthsParseExact:!0,weekdays:"\u041d\u044f\u043c_\u0414\u0430\u0432\u0430\u0430_\u041c\u044f\u0433\u043c\u0430\u0440_\u041b\u0445\u0430\u0433\u0432\u0430_\u041f\u04af\u0440\u044d\u0432_\u0411\u0430\u0430\u0441\u0430\u043d_\u0411\u044f\u043c\u0431\u0430".split("_"),weekdaysShort:"\u041d\u044f\u043c_\u0414\u0430\u0432_\u041c\u044f\u0433_\u041b\u0445\u0430_\u041f\u04af\u0440_\u0411\u0430\u0430_\u0411\u044f\u043c".split("_"),weekdaysMin:"\u041d\u044f_\u0414\u0430_\u041c\u044f_\u041b\u0445_\u041f\u04af_\u0411\u0430_\u0411\u044f".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D",LLL:"YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm",LLLL:"dddd, YYYY \u043e\u043d\u044b MMMM\u044b\u043d D HH:mm"},meridiemParse:/\u04ae\u04e8|\u04ae\u0425/i,isPM:function(u){return"\u04ae\u0425"===u},meridiem:function(u,e,p){return u<12?"\u04ae\u04e8":"\u04ae\u0425"},calendar:{sameDay:"[\u04e8\u043d\u04e9\u04e9\u0434\u04e9\u0440] LT",nextDay:"[\u041c\u0430\u0440\u0433\u0430\u0430\u0448] LT",nextWeek:"[\u0418\u0440\u044d\u0445] dddd LT",lastDay:"[\u04e8\u0447\u0438\u0433\u0434\u04e9\u0440] LT",lastWeek:"[\u04e8\u043d\u0433\u04e9\u0440\u0441\u04e9\u043d] dddd LT",sameElse:"L"},relativeTime:{future:"%s \u0434\u0430\u0440\u0430\u0430",past:"%s \u04e9\u043c\u043d\u04e9",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2} \u04e9\u0434\u04e9\u0440/,ordinal:function(u,e){switch(e){case"d":case"D":case"DDD":return u+" \u04e9\u0434\u04e9\u0440";default:return u}}})}(i(16738))},92805:function(v,b,i){!function(r){"use strict";var a={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},f={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};function u(p,g,S,M){var w="";if(g)switch(S){case"s":w="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926";break;case"ss":w="%d \u0938\u0947\u0915\u0902\u0926";break;case"m":w="\u090f\u0915 \u092e\u093f\u0928\u093f\u091f";break;case"mm":w="%d \u092e\u093f\u0928\u093f\u091f\u0947";break;case"h":w="\u090f\u0915 \u0924\u093e\u0938";break;case"hh":w="%d \u0924\u093e\u0938";break;case"d":w="\u090f\u0915 \u0926\u093f\u0935\u0938";break;case"dd":w="%d \u0926\u093f\u0935\u0938";break;case"M":w="\u090f\u0915 \u092e\u0939\u093f\u0928\u093e";break;case"MM":w="%d \u092e\u0939\u093f\u0928\u0947";break;case"y":w="\u090f\u0915 \u0935\u0930\u094d\u0937";break;case"yy":w="%d \u0935\u0930\u094d\u0937\u0947"}else switch(S){case"s":w="\u0915\u093e\u0939\u0940 \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"ss":w="%d \u0938\u0947\u0915\u0902\u0926\u093e\u0902";break;case"m":w="\u090f\u0915\u093e \u092e\u093f\u0928\u093f\u091f\u093e";break;case"mm":w="%d \u092e\u093f\u0928\u093f\u091f\u093e\u0902";break;case"h":w="\u090f\u0915\u093e \u0924\u093e\u0938\u093e";break;case"hh":w="%d \u0924\u093e\u0938\u093e\u0902";break;case"d":w="\u090f\u0915\u093e \u0926\u093f\u0935\u0938\u093e";break;case"dd":w="%d \u0926\u093f\u0935\u0938\u093e\u0902";break;case"M":w="\u090f\u0915\u093e \u092e\u0939\u093f\u0928\u094d\u092f\u093e";break;case"MM":w="%d \u092e\u0939\u093f\u0928\u094d\u092f\u093e\u0902";break;case"y":w="\u090f\u0915\u093e \u0935\u0930\u094d\u0937\u093e";break;case"yy":w="%d \u0935\u0930\u094d\u0937\u093e\u0902"}return w.replace(/%d/i,p)}r.defineLocale("mr",{months:"\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u090f\u092a\u094d\u0930\u093f\u0932_\u092e\u0947_\u091c\u0942\u0928_\u091c\u0941\u0932\u0948_\u0911\u0917\u0938\u094d\u091f_\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930_\u0911\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930_\u0921\u093f\u0938\u0947\u0902\u092c\u0930".split("_"),monthsShort:"\u091c\u093e\u0928\u0947._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a._\u090f\u092a\u094d\u0930\u093f._\u092e\u0947._\u091c\u0942\u0928._\u091c\u0941\u0932\u0948._\u0911\u0917._\u0938\u092a\u094d\u091f\u0947\u0902._\u0911\u0915\u094d\u091f\u094b._\u0928\u094b\u0935\u094d\u0939\u0947\u0902._\u0921\u093f\u0938\u0947\u0902.".split("_"),monthsParseExact:!0,weekdays:"\u0930\u0935\u093f\u0935\u093e\u0930_\u0938\u094b\u092e\u0935\u093e\u0930_\u092e\u0902\u0917\u0933\u0935\u093e\u0930_\u092c\u0941\u0927\u0935\u093e\u0930_\u0917\u0941\u0930\u0942\u0935\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u0935\u093e\u0930_\u0936\u0928\u093f\u0935\u093e\u0930".split("_"),weekdaysShort:"\u0930\u0935\u093f_\u0938\u094b\u092e_\u092e\u0902\u0917\u0933_\u092c\u0941\u0927_\u0917\u0941\u0930\u0942_\u0936\u0941\u0915\u094d\u0930_\u0936\u0928\u093f".split("_"),weekdaysMin:"\u0930_\u0938\u094b_\u092e\u0902_\u092c\u0941_\u0917\u0941_\u0936\u0941_\u0936".split("_"),longDateFormat:{LT:"A h:mm \u0935\u093e\u091c\u0924\u093e",LTS:"A h:mm:ss \u0935\u093e\u091c\u0924\u093e",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e",LLLL:"dddd, D MMMM YYYY, A h:mm \u0935\u093e\u091c\u0924\u093e"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u0909\u0926\u094d\u092f\u093e] LT",nextWeek:"dddd, LT",lastDay:"[\u0915\u093e\u0932] LT",lastWeek:"[\u092e\u093e\u0917\u0940\u0932] dddd, LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u0927\u094d\u092f\u0947",past:"%s\u092a\u0942\u0930\u094d\u0935\u0940",s:u,ss:u,m:u,mm:u,h:u,hh:u,d:u,dd:u,M:u,MM:u,y:u,yy:u},preparse:function(p){return p.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(g){return f[g]})},postformat:function(p){return p.replace(/\d/g,function(g){return a[g]})},meridiemParse:/\u092a\u0939\u093e\u091f\u0947|\u0938\u0915\u093e\u0933\u0940|\u0926\u0941\u092a\u093e\u0930\u0940|\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940|\u0930\u093e\u0924\u094d\u0930\u0940/,meridiemHour:function(p,g){return 12===p&&(p=0),"\u092a\u0939\u093e\u091f\u0947"===g||"\u0938\u0915\u093e\u0933\u0940"===g?p:"\u0926\u0941\u092a\u093e\u0930\u0940"===g||"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940"===g||"\u0930\u093e\u0924\u094d\u0930\u0940"===g?p>=12?p:p+12:void 0},meridiem:function(p,g,S){return p>=0&&p<6?"\u092a\u0939\u093e\u091f\u0947":p<12?"\u0938\u0915\u093e\u0933\u0940":p<17?"\u0926\u0941\u092a\u093e\u0930\u0940":p<20?"\u0938\u093e\u092f\u0902\u0915\u093e\u0933\u0940":"\u0930\u093e\u0924\u094d\u0930\u0940"},week:{dow:0,doy:6}})}(i(16738))},59900:function(v,b,i){!function(r){"use strict";r.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(f,u){return 12===f&&(f=0),"pagi"===u?f:"tengahari"===u?f>=11?f:f+12:"petang"===u||"malam"===u?f+12:void 0},meridiem:function(f,u,e){return f<11?"pagi":f<15?"tengahari":f<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(i(16738))},11341:function(v,b,i){!function(r){"use strict";r.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(f,u){return 12===f&&(f=0),"pagi"===u?f:"tengahari"===u?f>=11?f:f+12:"petang"===u||"malam"===u?f+12:void 0},meridiem:function(f,u,e){return f<11?"pagi":f<15?"tengahari":f<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(i(16738))},37734:function(v,b,i){!function(r){"use strict";r.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_\u0120unju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Di\u010bembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_\u0120un_Lul_Aww_Set_Ott_Nov_Di\u010b".split("_"),weekdays:"Il-\u0126add_It-Tnejn_It-Tlieta_L-Erbg\u0127a_Il-\u0126amis_Il-\u0120img\u0127a_Is-Sibt".split("_"),weekdaysShort:"\u0126ad_Tne_Tli_Erb_\u0126am_\u0120im_Sib".split("_"),weekdaysMin:"\u0126a_Tn_Tl_Er_\u0126a_\u0120i_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[G\u0127ada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-biera\u0127 fil-]LT",lastWeek:"dddd [li g\u0127adda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f\u2019 %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"sieg\u0127a",hh:"%d sieg\u0127at",d:"\u0121urnata",dd:"%d \u0121ranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(i(16738))},19034:function(v,b,i){!function(r){"use strict";var a={1:"\u1041",2:"\u1042",3:"\u1043",4:"\u1044",5:"\u1045",6:"\u1046",7:"\u1047",8:"\u1048",9:"\u1049",0:"\u1040"},f={"\u1041":"1","\u1042":"2","\u1043":"3","\u1044":"4","\u1045":"5","\u1046":"6","\u1047":"7","\u1048":"8","\u1049":"9","\u1040":"0"};r.defineLocale("my",{months:"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e_\u1016\u1031\u1016\u1031\u102c\u103a\u101d\u102b\u101b\u102e_\u1019\u1010\u103a_\u1027\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u1007\u1030\u101c\u102d\u102f\u1004\u103a_\u101e\u103c\u1002\u102f\u1010\u103a_\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c_\u1021\u1031\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c_\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c_\u1012\u102e\u1007\u1004\u103a\u1018\u102c".split("_"),monthsShort:"\u1007\u1014\u103a_\u1016\u1031_\u1019\u1010\u103a_\u1015\u103c\u102e_\u1019\u1031_\u1007\u103d\u1014\u103a_\u101c\u102d\u102f\u1004\u103a_\u101e\u103c_\u1005\u1000\u103a_\u1021\u1031\u102c\u1000\u103a_\u1014\u102d\u102f_\u1012\u102e".split("_"),weekdays:"\u1010\u1014\u1004\u103a\u1039\u1002\u1014\u103d\u1031_\u1010\u1014\u1004\u103a\u1039\u101c\u102c_\u1021\u1004\u103a\u1039\u1002\u102b_\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038_\u1000\u103c\u102c\u101e\u1015\u1010\u1031\u1038_\u101e\u1031\u102c\u1000\u103c\u102c_\u1005\u1014\u1031".split("_"),weekdaysShort:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),weekdaysMin:"\u1014\u103d\u1031_\u101c\u102c_\u1002\u102b_\u101f\u1030\u1038_\u1000\u103c\u102c_\u101e\u1031\u102c_\u1014\u1031".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u101a\u1014\u1031.] LT [\u1019\u103e\u102c]",nextDay:"[\u1019\u1014\u1000\u103a\u1016\u103c\u1014\u103a] LT [\u1019\u103e\u102c]",nextWeek:"dddd LT [\u1019\u103e\u102c]",lastDay:"[\u1019\u1014\u1031.\u1000] LT [\u1019\u103e\u102c]",lastWeek:"[\u1015\u103c\u102e\u1038\u1001\u1032\u1037\u101e\u1031\u102c] dddd LT [\u1019\u103e\u102c]",sameElse:"L"},relativeTime:{future:"\u101c\u102c\u1019\u100a\u103a\u1037 %s \u1019\u103e\u102c",past:"\u101c\u103d\u1014\u103a\u1001\u1032\u1037\u101e\u1031\u102c %s \u1000",s:"\u1005\u1000\u1039\u1000\u1014\u103a.\u1021\u1014\u100a\u103a\u1038\u1004\u101a\u103a",ss:"%d \u1005\u1000\u1039\u1000\u1014\u1037\u103a",m:"\u1010\u1005\u103a\u1019\u102d\u1014\u1005\u103a",mm:"%d \u1019\u102d\u1014\u1005\u103a",h:"\u1010\u1005\u103a\u1014\u102c\u101b\u102e",hh:"%d \u1014\u102c\u101b\u102e",d:"\u1010\u1005\u103a\u101b\u1000\u103a",dd:"%d \u101b\u1000\u103a",M:"\u1010\u1005\u103a\u101c",MM:"%d \u101c",y:"\u1010\u1005\u103a\u1014\u103e\u1005\u103a",yy:"%d \u1014\u103e\u1005\u103a"},preparse:function(e){return e.replace(/[\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1040]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},week:{dow:1,doy:4}})}(i(16738))},9324:function(v,b,i){!function(r){"use strict";r.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"s\xf8ndag_mandag_tirsdag_onsdag_torsdag_fredag_l\xf8rdag".split("_"),weekdaysShort:"s\xf8._ma._ti._on._to._fr._l\xf8.".split("_"),weekdaysMin:"s\xf8_ma_ti_on_to_fr_l\xf8".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i g\xe5r kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",w:"en uke",ww:"%d uker",M:"en m\xe5ned",MM:"%d m\xe5neder",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},46495:function(v,b,i){!function(r){"use strict";var a={1:"\u0967",2:"\u0968",3:"\u0969",4:"\u096a",5:"\u096b",6:"\u096c",7:"\u096d",8:"\u096e",9:"\u096f",0:"\u0966"},f={"\u0967":"1","\u0968":"2","\u0969":"3","\u096a":"4","\u096b":"5","\u096c":"6","\u096d":"7","\u096e":"8","\u096f":"9","\u0966":"0"};r.defineLocale("ne",{months:"\u091c\u0928\u0935\u0930\u0940_\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u0930\u0940_\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f\u0932_\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908_\u0905\u0917\u0937\u094d\u091f_\u0938\u0947\u092a\u094d\u091f\u0947\u092e\u094d\u092c\u0930_\u0905\u0915\u094d\u091f\u094b\u092c\u0930_\u0928\u094b\u092d\u0947\u092e\u094d\u092c\u0930_\u0921\u093f\u0938\u0947\u092e\u094d\u092c\u0930".split("_"),monthsShort:"\u091c\u0928._\u092b\u0947\u092c\u094d\u0930\u0941._\u092e\u093e\u0930\u094d\u091a_\u0905\u092a\u094d\u0930\u093f._\u092e\u0908_\u091c\u0941\u0928_\u091c\u0941\u0932\u093e\u0908._\u0905\u0917._\u0938\u0947\u092a\u094d\u091f._\u0905\u0915\u094d\u091f\u094b._\u0928\u094b\u092d\u0947._\u0921\u093f\u0938\u0947.".split("_"),monthsParseExact:!0,weekdays:"\u0906\u0907\u0924\u092c\u093e\u0930_\u0938\u094b\u092e\u092c\u093e\u0930_\u092e\u0919\u094d\u0917\u0932\u092c\u093e\u0930_\u092c\u0941\u0927\u092c\u093e\u0930_\u092c\u093f\u0939\u093f\u092c\u093e\u0930_\u0936\u0941\u0915\u094d\u0930\u092c\u093e\u0930_\u0936\u0928\u093f\u092c\u093e\u0930".split("_"),weekdaysShort:"\u0906\u0907\u0924._\u0938\u094b\u092e._\u092e\u0919\u094d\u0917\u0932._\u092c\u0941\u0927._\u092c\u093f\u0939\u093f._\u0936\u0941\u0915\u094d\u0930._\u0936\u0928\u093f.".split("_"),weekdaysMin:"\u0906._\u0938\u094b._\u092e\u0902._\u092c\u0941._\u092c\u093f._\u0936\u0941._\u0936.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A\u0915\u094b h:mm \u092c\u091c\u0947",LTS:"A\u0915\u094b h:mm:ss \u092c\u091c\u0947",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947",LLLL:"dddd, D MMMM YYYY, A\u0915\u094b h:mm \u092c\u091c\u0947"},preparse:function(e){return e.replace(/[\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0966]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},meridiemParse:/\u0930\u093e\u0924\u093f|\u092c\u093f\u0939\u093e\u0928|\u0926\u093f\u0909\u0901\u0938\u094b|\u0938\u093e\u0901\u091d/,meridiemHour:function(e,p){return 12===e&&(e=0),"\u0930\u093e\u0924\u093f"===p?e<4?e:e+12:"\u092c\u093f\u0939\u093e\u0928"===p?e:"\u0926\u093f\u0909\u0901\u0938\u094b"===p?e>=10?e:e+12:"\u0938\u093e\u0901\u091d"===p?e+12:void 0},meridiem:function(e,p,g){return e<3?"\u0930\u093e\u0924\u093f":e<12?"\u092c\u093f\u0939\u093e\u0928":e<16?"\u0926\u093f\u0909\u0901\u0938\u094b":e<20?"\u0938\u093e\u0901\u091d":"\u0930\u093e\u0924\u093f"},calendar:{sameDay:"[\u0906\u091c] LT",nextDay:"[\u092d\u094b\u0932\u093f] LT",nextWeek:"[\u0906\u0909\u0901\u0926\u094b] dddd[,] LT",lastDay:"[\u0939\u093f\u091c\u094b] LT",lastWeek:"[\u0917\u090f\u0915\u094b] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s\u092e\u093e",past:"%s \u0905\u0917\u093e\u0921\u093f",s:"\u0915\u0947\u0939\u0940 \u0915\u094d\u0937\u0923",ss:"%d \u0938\u0947\u0915\u0947\u0923\u094d\u0921",m:"\u090f\u0915 \u092e\u093f\u0928\u0947\u091f",mm:"%d \u092e\u093f\u0928\u0947\u091f",h:"\u090f\u0915 \u0918\u0923\u094d\u091f\u093e",hh:"%d \u0918\u0923\u094d\u091f\u093e",d:"\u090f\u0915 \u0926\u093f\u0928",dd:"%d \u0926\u093f\u0928",M:"\u090f\u0915 \u092e\u0939\u093f\u0928\u093e",MM:"%d \u092e\u0939\u093f\u0928\u093e",y:"\u090f\u0915 \u092c\u0930\u094d\u0937",yy:"%d \u092c\u0930\u094d\u0937"},week:{dow:0,doy:6}})}(i(16738))},76272:function(v,b,i){!function(r){"use strict";var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),f="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),u=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],e=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;r.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(g,S){return g?/-MMM-/.test(S)?f[g.month()]:a[g.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(g){return g+(1===g||8===g||g>=20?"ste":"de")},week:{dow:1,doy:4}})}(i(16738))},70673:function(v,b,i){!function(r){"use strict";var a="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),f="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),u=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],e=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;r.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(g,S){return g?/-MMM-/.test(S)?f[g.month()]:a[g.month()]:a},monthsRegex:e,monthsShortRegex:e,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"\xe9\xe9n minuut",mm:"%d minuten",h:"\xe9\xe9n uur",hh:"%d uur",d:"\xe9\xe9n dag",dd:"%d dagen",w:"\xe9\xe9n week",ww:"%d weken",M:"\xe9\xe9n maand",MM:"%d maanden",y:"\xe9\xe9n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(g){return g+(1===g||8===g||g>=20?"ste":"de")},week:{dow:1,doy:4}})}(i(16738))},72486:function(v,b,i){!function(r){"use strict";r.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_m\xe5ndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._m\xe5._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_m\xe5_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I g\xe5r klokka] LT",lastWeek:"[F\xf8reg\xe5ande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein m\xe5nad",MM:"%d m\xe5nader",y:"eit \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},46219:function(v,b,i){!function(r){"use strict";r.defineLocale("oc-lnc",{months:{standalone:"geni\xe8r_febri\xe8r_mar\xe7_abril_mai_junh_julhet_agost_setembre_oct\xf2bre_novembre_decembre".split("_"),format:"de geni\xe8r_de febri\xe8r_de mar\xe7_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'oct\xf2bre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._mar\xe7_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dim\xe8cres_dij\xf2us_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[u\xe8i a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[i\xe8r a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aqu\xed %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|\xe8|a)/,ordinal:function(f,u){var e=1===f?"r":2===f?"n":3===f?"r":4===f?"t":"\xe8";return("w"===u||"W"===u)&&(e="a"),f+e},week:{dow:1,doy:4}})}(i(16738))},2829:function(v,b,i){!function(r){"use strict";var a={1:"\u0a67",2:"\u0a68",3:"\u0a69",4:"\u0a6a",5:"\u0a6b",6:"\u0a6c",7:"\u0a6d",8:"\u0a6e",9:"\u0a6f",0:"\u0a66"},f={"\u0a67":"1","\u0a68":"2","\u0a69":"3","\u0a6a":"4","\u0a6b":"5","\u0a6c":"6","\u0a6d":"7","\u0a6e":"8","\u0a6f":"9","\u0a66":"0"};r.defineLocale("pa-in",{months:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),monthsShort:"\u0a1c\u0a28\u0a35\u0a30\u0a40_\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40_\u0a2e\u0a3e\u0a30\u0a1a_\u0a05\u0a2a\u0a4d\u0a30\u0a48\u0a32_\u0a2e\u0a08_\u0a1c\u0a42\u0a28_\u0a1c\u0a41\u0a32\u0a3e\u0a08_\u0a05\u0a17\u0a38\u0a24_\u0a38\u0a24\u0a70\u0a2c\u0a30_\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30_\u0a28\u0a35\u0a70\u0a2c\u0a30_\u0a26\u0a38\u0a70\u0a2c\u0a30".split("_"),weekdays:"\u0a10\u0a24\u0a35\u0a3e\u0a30_\u0a38\u0a4b\u0a2e\u0a35\u0a3e\u0a30_\u0a2e\u0a70\u0a17\u0a32\u0a35\u0a3e\u0a30_\u0a2c\u0a41\u0a27\u0a35\u0a3e\u0a30_\u0a35\u0a40\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a41\u0a71\u0a15\u0a30\u0a35\u0a3e\u0a30_\u0a38\u0a3c\u0a28\u0a40\u0a1a\u0a30\u0a35\u0a3e\u0a30".split("_"),weekdaysShort:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),weekdaysMin:"\u0a10\u0a24_\u0a38\u0a4b\u0a2e_\u0a2e\u0a70\u0a17\u0a32_\u0a2c\u0a41\u0a27_\u0a35\u0a40\u0a30_\u0a38\u0a3c\u0a41\u0a15\u0a30_\u0a38\u0a3c\u0a28\u0a40".split("_"),longDateFormat:{LT:"A h:mm \u0a35\u0a1c\u0a47",LTS:"A h:mm:ss \u0a35\u0a1c\u0a47",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47",LLLL:"dddd, D MMMM YYYY, A h:mm \u0a35\u0a1c\u0a47"},calendar:{sameDay:"[\u0a05\u0a1c] LT",nextDay:"[\u0a15\u0a32] LT",nextWeek:"[\u0a05\u0a17\u0a32\u0a3e] dddd, LT",lastDay:"[\u0a15\u0a32] LT",lastWeek:"[\u0a2a\u0a3f\u0a1b\u0a32\u0a47] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0a35\u0a3f\u0a71\u0a1a",past:"%s \u0a2a\u0a3f\u0a1b\u0a32\u0a47",s:"\u0a15\u0a41\u0a1d \u0a38\u0a15\u0a3f\u0a70\u0a1f",ss:"%d \u0a38\u0a15\u0a3f\u0a70\u0a1f",m:"\u0a07\u0a15 \u0a2e\u0a3f\u0a70\u0a1f",mm:"%d \u0a2e\u0a3f\u0a70\u0a1f",h:"\u0a07\u0a71\u0a15 \u0a18\u0a70\u0a1f\u0a3e",hh:"%d \u0a18\u0a70\u0a1f\u0a47",d:"\u0a07\u0a71\u0a15 \u0a26\u0a3f\u0a28",dd:"%d \u0a26\u0a3f\u0a28",M:"\u0a07\u0a71\u0a15 \u0a2e\u0a39\u0a40\u0a28\u0a3e",MM:"%d \u0a2e\u0a39\u0a40\u0a28\u0a47",y:"\u0a07\u0a71\u0a15 \u0a38\u0a3e\u0a32",yy:"%d \u0a38\u0a3e\u0a32"},preparse:function(e){return e.replace(/[\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a66]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},meridiemParse:/\u0a30\u0a3e\u0a24|\u0a38\u0a35\u0a47\u0a30|\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30|\u0a38\u0a3c\u0a3e\u0a2e/,meridiemHour:function(e,p){return 12===e&&(e=0),"\u0a30\u0a3e\u0a24"===p?e<4?e:e+12:"\u0a38\u0a35\u0a47\u0a30"===p?e:"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30"===p?e>=10?e:e+12:"\u0a38\u0a3c\u0a3e\u0a2e"===p?e+12:void 0},meridiem:function(e,p,g){return e<4?"\u0a30\u0a3e\u0a24":e<10?"\u0a38\u0a35\u0a47\u0a30":e<17?"\u0a26\u0a41\u0a2a\u0a39\u0a3f\u0a30":e<20?"\u0a38\u0a3c\u0a3e\u0a2e":"\u0a30\u0a3e\u0a24"},week:{dow:0,doy:6}})}(i(16738))},78444:function(v,b,i){!function(r){"use strict";var a="stycze\u0144_luty_marzec_kwiecie\u0144_maj_czerwiec_lipiec_sierpie\u0144_wrzesie\u0144_pa\u017adziernik_listopad_grudzie\u0144".split("_"),f="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrze\u015bnia_pa\u017adziernika_listopada_grudnia".split("_"),u=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^pa\u017a/i,/^lis/i,/^gru/i];function e(S){return S%10<5&&S%10>1&&~~(S/10)%10!=1}function p(S,M,w){var x=S+" ";switch(w){case"ss":return x+(e(S)?"sekundy":"sekund");case"m":return M?"minuta":"minut\u0119";case"mm":return x+(e(S)?"minuty":"minut");case"h":return M?"godzina":"godzin\u0119";case"hh":return x+(e(S)?"godziny":"godzin");case"ww":return x+(e(S)?"tygodnie":"tygodni");case"MM":return x+(e(S)?"miesi\u0105ce":"miesi\u0119cy");case"yy":return x+(e(S)?"lata":"lat")}}r.defineLocale("pl",{months:function(S,M){return S?/D MMMM/.test(M)?f[S.month()]:a[S.month()]:a},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_pa\u017a_lis_gru".split("_"),monthsParse:u,longMonthsParse:u,shortMonthsParse:u,weekdays:"niedziela_poniedzia\u0142ek_wtorek_\u015broda_czwartek_pi\u0105tek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_\u015br_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_\u015ar_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dzi\u015b o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedziel\u0119 o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W \u015brod\u0119 o] LT";case 6:return"[W sobot\u0119 o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zesz\u0142\u0105 niedziel\u0119 o] LT";case 3:return"[W zesz\u0142\u0105 \u015brod\u0119 o] LT";case 6:return"[W zesz\u0142\u0105 sobot\u0119 o] LT";default:return"[W zesz\u0142y] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:p,m:p,mm:p,h:p,hh:p,d:"1 dzie\u0144",dd:"%d dni",w:"tydzie\u0144",ww:p,M:"miesi\u0105c",MM:p,y:"rok",yy:p},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},66117:function(v,b,i){!function(r){"use strict";r.defineLocale("pt-br",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_ter\xe7a-feira_quarta-feira_quinta-feira_sexta-feira_s\xe1bado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_s\xe1b".split("_"),weekdaysMin:"do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_s\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [\xe0s] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [\xe0s] HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",invalidDate:"Data inv\xe1lida"})}(i(16738))},53170:function(v,b,i){!function(r){"use strict";r.defineLocale("pt",{months:"janeiro_fevereiro_mar\xe7o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Ter\xe7a-feira_Quarta-feira_Quinta-feira_Sexta-feira_S\xe1bado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_S\xe1b".split("_"),weekdaysMin:"Do_2\xaa_3\xaa_4\xaa_5\xaa_6\xaa_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje \xe0s] LT",nextDay:"[Amanh\xe3 \xe0s] LT",nextWeek:"dddd [\xe0s] LT",lastDay:"[Ontem \xe0s] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[\xdaltimo] dddd [\xe0s] LT":"[\xdaltima] dddd [\xe0s] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"h\xe1 %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um m\xeas",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}\xba/,ordinal:"%d\xba",week:{dow:1,doy:4}})}(i(16738))},96587:function(v,b,i){!function(r){"use strict";function a(u,e,p){var S=" ";return(u%100>=20||u>=100&&u%100==0)&&(S=" de "),u+S+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"s\u0103pt\u0103m\xe2ni",MM:"luni",yy:"ani"}[p]}r.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminic\u0103_luni_mar\u021bi_miercuri_joi_vineri_s\xe2mb\u0103t\u0103".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_S\xe2m".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_S\xe2".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[m\xe2ine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s \xeen urm\u0103",s:"c\xe2teva secunde",ss:a,m:"un minut",mm:a,h:"o or\u0103",hh:a,d:"o zi",dd:a,w:"o s\u0103pt\u0103m\xe2n\u0103",ww:a,M:"o lun\u0103",MM:a,y:"un an",yy:a},week:{dow:1,doy:7}})}(i(16738))},39264:function(v,b,i){!function(r){"use strict";function f(p,g,S){return"m"===S?g?"\u043c\u0438\u043d\u0443\u0442\u0430":"\u043c\u0438\u043d\u0443\u0442\u0443":p+" "+function a(p,g){var S=p.split("_");return g%10==1&&g%100!=11?S[0]:g%10>=2&&g%10<=4&&(g%100<10||g%100>=20)?S[1]:S[2]}({ss:g?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u044b_\u0441\u0435\u043a\u0443\u043d\u0434",mm:g?"\u043c\u0438\u043d\u0443\u0442\u0430_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442":"\u043c\u0438\u043d\u0443\u0442\u0443_\u043c\u0438\u043d\u0443\u0442\u044b_\u043c\u0438\u043d\u0443\u0442",hh:"\u0447\u0430\u0441_\u0447\u0430\u0441\u0430_\u0447\u0430\u0441\u043e\u0432",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u044f_\u0434\u043d\u0435\u0439",ww:"\u043d\u0435\u0434\u0435\u043b\u044f_\u043d\u0435\u0434\u0435\u043b\u0438_\u043d\u0435\u0434\u0435\u043b\u044c",MM:"\u043c\u0435\u0441\u044f\u0446_\u043c\u0435\u0441\u044f\u0446\u0430_\u043c\u0435\u0441\u044f\u0446\u0435\u0432",yy:"\u0433\u043e\u0434_\u0433\u043e\u0434\u0430_\u043b\u0435\u0442"}[S],+p)}var u=[/^\u044f\u043d\u0432/i,/^\u0444\u0435\u0432/i,/^\u043c\u0430\u0440/i,/^\u0430\u043f\u0440/i,/^\u043c\u0430[\u0439\u044f]/i,/^\u0438\u044e\u043d/i,/^\u0438\u044e\u043b/i,/^\u0430\u0432\u0433/i,/^\u0441\u0435\u043d/i,/^\u043e\u043a\u0442/i,/^\u043d\u043e\u044f/i,/^\u0434\u0435\u043a/i];r.defineLocale("ru",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u044f_\u0444\u0435\u0432\u0440\u0430\u043b\u044f_\u043c\u0430\u0440\u0442\u0430_\u0430\u043f\u0440\u0435\u043b\u044f_\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433\u0443\u0441\u0442\u0430_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f_\u043e\u043a\u0442\u044f\u0431\u0440\u044f_\u043d\u043e\u044f\u0431\u0440\u044f_\u0434\u0435\u043a\u0430\u0431\u0440\u044f".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440\u044c_\u0444\u0435\u0432\u0440\u0430\u043b\u044c_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b\u044c_\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c_\u043e\u043a\u0442\u044f\u0431\u0440\u044c_\u043d\u043e\u044f\u0431\u0440\u044c_\u0434\u0435\u043a\u0430\u0431\u0440\u044c".split("_")},monthsShort:{format:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u044f_\u0438\u044e\u043d\u044f_\u0438\u044e\u043b\u044f_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_"),standalone:"\u044f\u043d\u0432._\u0444\u0435\u0432\u0440._\u043c\u0430\u0440\u0442_\u0430\u043f\u0440._\u043c\u0430\u0439_\u0438\u044e\u043d\u044c_\u0438\u044e\u043b\u044c_\u0430\u0432\u0433._\u0441\u0435\u043d\u0442._\u043e\u043a\u0442._\u043d\u043e\u044f\u0431._\u0434\u0435\u043a.".split("_")},weekdays:{standalone:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0430_\u0441\u0443\u0431\u0431\u043e\u0442\u0430".split("_"),format:"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435_\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a_\u0432\u0442\u043e\u0440\u043d\u0438\u043a_\u0441\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440\u0433_\u043f\u044f\u0442\u043d\u0438\u0446\u0443_\u0441\u0443\u0431\u0431\u043e\u0442\u0443".split("_"),isFormat:/\[ ?[\u0412\u0432] ?(?:\u043f\u0440\u043e\u0448\u043b\u0443\u044e|\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e|\u044d\u0442\u0443)? ?] ?dddd/},weekdaysShort:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u0432\u0441_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),monthsParse:u,longMonthsParse:u,shortMonthsParse:u,monthsRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsShortRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044c\u044f]|\u044f\u043d\u0432\.?|\u0444\u0435\u0432\u0440\u0430\u043b[\u044c\u044f]|\u0444\u0435\u0432\u0440?\.?|\u043c\u0430\u0440\u0442\u0430?|\u043c\u0430\u0440\.?|\u0430\u043f\u0440\u0435\u043b[\u044c\u044f]|\u0430\u043f\u0440\.?|\u043c\u0430[\u0439\u044f]|\u0438\u044e\u043d[\u044c\u044f]|\u0438\u044e\u043d\.?|\u0438\u044e\u043b[\u044c\u044f]|\u0438\u044e\u043b\.?|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0430\u0432\u0433\.?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044c\u044f]|\u0441\u0435\u043d\u0442?\.?|\u043e\u043a\u0442\u044f\u0431\u0440[\u044c\u044f]|\u043e\u043a\u0442\.?|\u043d\u043e\u044f\u0431\u0440[\u044c\u044f]|\u043d\u043e\u044f\u0431?\.?|\u0434\u0435\u043a\u0430\u0431\u0440[\u044c\u044f]|\u0434\u0435\u043a\.?)/i,monthsStrictRegex:/^(\u044f\u043d\u0432\u0430\u0440[\u044f\u044c]|\u0444\u0435\u0432\u0440\u0430\u043b[\u044f\u044c]|\u043c\u0430\u0440\u0442\u0430?|\u0430\u043f\u0440\u0435\u043b[\u044f\u044c]|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044f\u044c]|\u0438\u044e\u043b[\u044f\u044c]|\u0430\u0432\u0433\u0443\u0441\u0442\u0430?|\u0441\u0435\u043d\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043e\u043a\u0442\u044f\u0431\u0440[\u044f\u044c]|\u043d\u043e\u044f\u0431\u0440[\u044f\u044c]|\u0434\u0435\u043a\u0430\u0431\u0440[\u044f\u044c])/i,monthsShortStrictRegex:/^(\u044f\u043d\u0432\.|\u0444\u0435\u0432\u0440?\.|\u043c\u0430\u0440[\u0442.]|\u0430\u043f\u0440\.|\u043c\u0430[\u044f\u0439]|\u0438\u044e\u043d[\u044c\u044f.]|\u0438\u044e\u043b[\u044c\u044f.]|\u0430\u0432\u0433\.|\u0441\u0435\u043d\u0442?\.|\u043e\u043a\u0442\.|\u043d\u043e\u044f\u0431?\.|\u0434\u0435\u043a\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0433.",LLL:"D MMMM YYYY \u0433., H:mm",LLLL:"dddd, D MMMM YYYY \u0433., H:mm"},calendar:{sameDay:"[\u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432] LT",nextDay:"[\u0417\u0430\u0432\u0442\u0440\u0430, \u0432] LT",lastDay:"[\u0412\u0447\u0435\u0440\u0430, \u0432] LT",nextWeek:function(p){if(p.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e] dddd, [\u0432] LT"}},lastWeek:function(p){if(p.week()===this.week())return 2===this.day()?"[\u0412\u043e] dddd, [\u0432] LT":"[\u0412] dddd, [\u0432] LT";switch(this.day()){case 0:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u0435] dddd, [\u0432] LT";case 1:case 2:case 4:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439] dddd, [\u0432] LT";case 3:case 5:case 6:return"[\u0412 \u043f\u0440\u043e\u0448\u043b\u0443\u044e] dddd, [\u0432] LT"}},sameElse:"L"},relativeTime:{future:"\u0447\u0435\u0440\u0435\u0437 %s",past:"%s \u043d\u0430\u0437\u0430\u0434",s:"\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434",ss:f,m:f,mm:f,h:"\u0447\u0430\u0441",hh:f,d:"\u0434\u0435\u043d\u044c",dd:f,w:"\u043d\u0435\u0434\u0435\u043b\u044f",ww:f,M:"\u043c\u0435\u0441\u044f\u0446",MM:f,y:"\u0433\u043e\u0434",yy:f},meridiemParse:/\u043d\u043e\u0447\u0438|\u0443\u0442\u0440\u0430|\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430/i,isPM:function(p){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u0435\u0440\u0430)$/.test(p)},meridiem:function(p,g,S){return p<4?"\u043d\u043e\u0447\u0438":p<12?"\u0443\u0442\u0440\u0430":p<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u0435\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e|\u044f)/,ordinal:function(p,g){switch(g){case"M":case"d":case"DDD":return p+"-\u0439";case"D":return p+"-\u0433\u043e";case"w":case"W":return p+"-\u044f";default:return p}},week:{dow:1,doy:4}})}(i(16738))},42135:function(v,b,i){!function(r){"use strict";var a=["\u062c\u0646\u0648\u0631\u064a","\u0641\u064a\u0628\u0631\u0648\u0631\u064a","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u064a\u0644","\u0645\u0626\u064a","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0621\u0650","\u0622\u06af\u0633\u067d","\u0633\u064a\u067e\u067d\u0645\u0628\u0631","\u0622\u06aa\u067d\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u068a\u0633\u0645\u0628\u0631"],f=["\u0622\u0686\u0631","\u0633\u0648\u0645\u0631","\u0627\u06b1\u0627\u0631\u0648","\u0627\u0631\u0628\u0639","\u062e\u0645\u064a\u0633","\u062c\u0645\u0639","\u0687\u0646\u0687\u0631"];r.defineLocale("sd",{months:a,monthsShort:a,weekdays:f,weekdaysShort:f,weekdaysMin:f,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,p,g){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0627\u0684] LT",nextDay:"[\u0633\u0680\u0627\u06bb\u064a] LT",nextWeek:"dddd [\u0627\u06b3\u064a\u0646 \u0647\u0641\u062a\u064a \u062a\u064a] LT",lastDay:"[\u06aa\u0627\u0644\u0647\u0647] LT",lastWeek:"[\u06af\u0632\u0631\u064a\u0644 \u0647\u0641\u062a\u064a] dddd [\u062a\u064a] LT",sameElse:"L"},relativeTime:{future:"%s \u067e\u0648\u0621",past:"%s \u0627\u06b3",s:"\u0686\u0646\u062f \u0633\u064a\u06aa\u0646\u068a",ss:"%d \u0633\u064a\u06aa\u0646\u068a",m:"\u0647\u06aa \u0645\u0646\u067d",mm:"%d \u0645\u0646\u067d",h:"\u0647\u06aa \u06aa\u0644\u0627\u06aa",hh:"%d \u06aa\u0644\u0627\u06aa",d:"\u0647\u06aa \u068f\u064a\u0646\u0647\u0646",dd:"%d \u068f\u064a\u0646\u0647\u0646",M:"\u0647\u06aa \u0645\u0647\u064a\u0646\u0648",MM:"%d \u0645\u0647\u064a\u0646\u0627",y:"\u0647\u06aa \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}})}(i(16738))},95366:function(v,b,i){!function(r){"use strict";r.defineLocale("se",{months:"o\u0111\u0111ajagem\xe1nnu_guovvam\xe1nnu_njuk\u010dam\xe1nnu_cuo\u014bom\xe1nnu_miessem\xe1nnu_geassem\xe1nnu_suoidnem\xe1nnu_borgem\xe1nnu_\u010dak\u010dam\xe1nnu_golggotm\xe1nnu_sk\xe1bmam\xe1nnu_juovlam\xe1nnu".split("_"),monthsShort:"o\u0111\u0111j_guov_njuk_cuo_mies_geas_suoi_borg_\u010dak\u010d_golg_sk\xe1b_juov".split("_"),weekdays:"sotnabeaivi_vuoss\xe1rga_ma\u014b\u014beb\xe1rga_gaskavahkku_duorastat_bearjadat_l\xe1vvardat".split("_"),weekdaysShort:"sotn_vuos_ma\u014b_gask_duor_bear_l\xe1v".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s gea\u017ees",past:"ma\u014bit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta m\xe1nnu",MM:"%d m\xe1nut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},93379:function(v,b,i){!function(r){"use strict";r.defineLocale("si",{months:"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2_\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2_\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4_\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4_\u0dc3\u0dd0\u0db4\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca_\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca_\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca".split("_"),monthsShort:"\u0da2\u0db1_\u0db4\u0dd9\u0db6_\u0db8\u0dcf\u0dbb\u0dca_\u0d85\u0db4\u0dca_\u0db8\u0dd0\u0dba\u0dd2_\u0da2\u0dd6\u0db1\u0dd2_\u0da2\u0dd6\u0dbd\u0dd2_\u0d85\u0d9c\u0ddd_\u0dc3\u0dd0\u0db4\u0dca_\u0d94\u0d9a\u0dca_\u0db1\u0ddc\u0dc0\u0dd0_\u0daf\u0dd9\u0dc3\u0dd0".split("_"),weekdays:"\u0d89\u0dbb\u0dd2\u0daf\u0dcf_\u0dc3\u0db3\u0dd4\u0daf\u0dcf_\u0d85\u0d9f\u0dc4\u0dbb\u0dd4\u0dc0\u0dcf\u0daf\u0dcf_\u0db6\u0daf\u0dcf\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf_\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf_\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf".split("_"),weekdaysShort:"\u0d89\u0dbb\u0dd2_\u0dc3\u0db3\u0dd4_\u0d85\u0d9f_\u0db6\u0daf\u0dcf_\u0db6\u0dca\u200d\u0dbb\u0dc4_\u0dc3\u0dd2\u0d9a\u0dd4_\u0dc3\u0dd9\u0db1".split("_"),weekdaysMin:"\u0d89_\u0dc3_\u0d85_\u0db6_\u0db6\u0dca\u200d\u0dbb_\u0dc3\u0dd2_\u0dc3\u0dd9".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [\u0dc0\u0dd0\u0db1\u0dd2] dddd, a h:mm:ss"},calendar:{sameDay:"[\u0d85\u0daf] LT[\u0da7]",nextDay:"[\u0dc4\u0dd9\u0da7] LT[\u0da7]",nextWeek:"dddd LT[\u0da7]",lastDay:"[\u0d8a\u0dba\u0dda] LT[\u0da7]",lastWeek:"[\u0db4\u0dc3\u0dd4\u0d9c\u0dd2\u0dba] dddd LT[\u0da7]",sameElse:"L"},relativeTime:{future:"%s\u0d9a\u0dd2\u0db1\u0dca",past:"%s\u0d9a\u0da7 \u0db4\u0dd9\u0dbb",s:"\u0dad\u0dad\u0dca\u0db4\u0dbb \u0d9a\u0dd2\u0dc4\u0dd2\u0db4\u0dba",ss:"\u0dad\u0dad\u0dca\u0db4\u0dbb %d",m:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4\u0dc0",mm:"\u0db8\u0dd2\u0db1\u0dd2\u0dad\u0dca\u0dad\u0dd4 %d",h:"\u0db4\u0dd0\u0dba",hh:"\u0db4\u0dd0\u0dba %d",d:"\u0daf\u0dd2\u0db1\u0dba",dd:"\u0daf\u0dd2\u0db1 %d",M:"\u0db8\u0dcf\u0dc3\u0dba",MM:"\u0db8\u0dcf\u0dc3 %d",y:"\u0dc0\u0dc3\u0dbb",yy:"\u0dc0\u0dc3\u0dbb %d"},dayOfMonthOrdinalParse:/\d{1,2} \u0dc0\u0dd0\u0db1\u0dd2/,ordinal:function(f){return f+" \u0dc0\u0dd0\u0db1\u0dd2"},meridiemParse:/\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4|\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4|\u0db4\u0dd9.\u0dc0|\u0db4.\u0dc0./,isPM:function(f){return"\u0db4.\u0dc0."===f||"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4"===f},meridiem:function(f,u,e){return f>11?e?"\u0db4.\u0dc0.":"\u0db4\u0dc3\u0dca \u0dc0\u0dbb\u0dd4":e?"\u0db4\u0dd9.\u0dc0.":"\u0db4\u0dd9\u0dbb \u0dc0\u0dbb\u0dd4"}})}(i(16738))},46143:function(v,b,i){!function(r){"use strict";var a="janu\xe1r_febru\xe1r_marec_apr\xedl_m\xe1j_j\xfan_j\xfal_august_september_okt\xf3ber_november_december".split("_"),f="jan_feb_mar_apr_m\xe1j_j\xfan_j\xfal_aug_sep_okt_nov_dec".split("_");function u(g){return g>1&&g<5}function e(g,S,M,w){var x=g+" ";switch(M){case"s":return S||w?"p\xe1r sek\xfand":"p\xe1r sekundami";case"ss":return S||w?x+(u(g)?"sekundy":"sek\xfand"):x+"sekundami";case"m":return S?"min\xfata":w?"min\xfatu":"min\xfatou";case"mm":return S||w?x+(u(g)?"min\xfaty":"min\xfat"):x+"min\xfatami";case"h":return S?"hodina":w?"hodinu":"hodinou";case"hh":return S||w?x+(u(g)?"hodiny":"hod\xedn"):x+"hodinami";case"d":return S||w?"de\u0148":"d\u0148om";case"dd":return S||w?x+(u(g)?"dni":"dn\xed"):x+"d\u0148ami";case"M":return S||w?"mesiac":"mesiacom";case"MM":return S||w?x+(u(g)?"mesiace":"mesiacov"):x+"mesiacmi";case"y":return S||w?"rok":"rokom";case"yy":return S||w?x+(u(g)?"roky":"rokov"):x+"rokmi"}}r.defineLocale("sk",{months:a,monthsShort:f,weekdays:"nede\u013ea_pondelok_utorok_streda_\u0161tvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_\u0161t_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_\u0161t_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nede\u013eu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo \u0161tvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[v\u010dera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minul\xfa nede\u013eu o] LT";case 1:case 2:case 4:case 5:return"[minul\xfd] dddd [o] LT";case 3:return"[minul\xfa stredu o] LT";case 6:return"[minul\xfa sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},196:function(v,b,i){!function(r){"use strict";function a(u,e,p,g){var S=u+" ";switch(p){case"s":return e||g?"nekaj sekund":"nekaj sekundami";case"ss":return S+(1===u?e?"sekundo":"sekundi":2===u?e||g?"sekundi":"sekundah":u<5?e||g?"sekunde":"sekundah":"sekund");case"m":return e?"ena minuta":"eno minuto";case"mm":return S+(1===u?e?"minuta":"minuto":2===u?e||g?"minuti":"minutama":u<5?e||g?"minute":"minutami":e||g?"minut":"minutami");case"h":return e?"ena ura":"eno uro";case"hh":return S+(1===u?e?"ura":"uro":2===u?e||g?"uri":"urama":u<5?e||g?"ure":"urami":e||g?"ur":"urami");case"d":return e||g?"en dan":"enim dnem";case"dd":return S+(1===u?e||g?"dan":"dnem":2===u?e||g?"dni":"dnevoma":e||g?"dni":"dnevi");case"M":return e||g?"en mesec":"enim mesecem";case"MM":return S+(1===u?e||g?"mesec":"mesecem":2===u?e||g?"meseca":"mesecema":u<5?e||g?"mesece":"meseci":e||g?"mesecev":"meseci");case"y":return e||g?"eno leto":"enim letom";case"yy":return S+(1===u?e||g?"leto":"letom":2===u?e||g?"leti":"letoma":u<5?e||g?"leta":"leti":e||g?"let":"leti")}}r.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_\u010detrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._\u010det._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_\u010de_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[v\u010deraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prej\u0161njo] [nedeljo] [ob] LT";case 3:return"[prej\u0161njo] [sredo] [ob] LT";case 6:return"[prej\u0161njo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prej\u0161nji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"\u010dez %s",past:"pred %s",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(i(16738))},21082:function(v,b,i){!function(r){"use strict";r.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_N\xebntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_N\xebn_Dhj".split("_"),weekdays:"E Diel_E H\xebn\xeb_E Mart\xeb_E M\xebrkur\xeb_E Enjte_E Premte_E Shtun\xeb".split("_"),weekdaysShort:"Die_H\xebn_Mar_M\xebr_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_M\xeb_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(f){return"M"===f.charAt(0)},meridiem:function(f,u,e){return f<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot n\xeb] LT",nextDay:"[Nes\xebr n\xeb] LT",nextWeek:"dddd [n\xeb] LT",lastDay:"[Dje n\xeb] LT",lastWeek:"dddd [e kaluar n\xeb] LT",sameElse:"L"},relativeTime:{future:"n\xeb %s",past:"%s m\xeb par\xeb",s:"disa sekonda",ss:"%d sekonda",m:"nj\xeb minut\xeb",mm:"%d minuta",h:"nj\xeb or\xeb",hh:"%d or\xeb",d:"nj\xeb dit\xeb",dd:"%d dit\xeb",M:"nj\xeb muaj",MM:"%d muaj",y:"nj\xeb vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},98963:function(v,b,i){!function(r){"use strict";var a={words:{ss:["\u0441\u0435\u043a\u0443\u043d\u0434\u0430","\u0441\u0435\u043a\u0443\u043d\u0434\u0435","\u0441\u0435\u043a\u0443\u043d\u0434\u0438"],m:["\u0458\u0435\u0434\u0430\u043d \u043c\u0438\u043d\u0443\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0438\u043d\u0443\u0442\u0430"],mm:["\u043c\u0438\u043d\u0443\u0442","\u043c\u0438\u043d\u0443\u0442\u0430","\u043c\u0438\u043d\u0443\u0442\u0430"],h:["\u0458\u0435\u0434\u0430\u043d \u0441\u0430\u0442","\u0458\u0435\u0434\u043d\u043e\u0433 \u0441\u0430\u0442\u0430"],hh:["\u0441\u0430\u0442","\u0441\u0430\u0442\u0430","\u0441\u0430\u0442\u0438"],d:["\u0458\u0435\u0434\u0430\u043d \u0434\u0430\u043d","\u0458\u0435\u0434\u043d\u043e\u0433 \u0434\u0430\u043d\u0430"],dd:["\u0434\u0430\u043d","\u0434\u0430\u043d\u0430","\u0434\u0430\u043d\u0430"],M:["\u0458\u0435\u0434\u0430\u043d \u043c\u0435\u0441\u0435\u0446","\u0458\u0435\u0434\u043d\u043e\u0433 \u043c\u0435\u0441\u0435\u0446\u0430"],MM:["\u043c\u0435\u0441\u0435\u0446","\u043c\u0435\u0441\u0435\u0446\u0430","\u043c\u0435\u0441\u0435\u0446\u0438"],y:["\u0458\u0435\u0434\u043d\u0443 \u0433\u043e\u0434\u0438\u043d\u0443","\u0458\u0435\u0434\u043d\u0435 \u0433\u043e\u0434\u0438\u043d\u0435"],yy:["\u0433\u043e\u0434\u0438\u043d\u0443","\u0433\u043e\u0434\u0438\u043d\u0435","\u0433\u043e\u0434\u0438\u043d\u0430"]},correctGrammaticalCase:function(u,e){return u%10>=1&&u%10<=4&&(u%100<10||u%100>=20)?u%10==1?e[0]:e[1]:e[2]},translate:function(u,e,p,g){var M,S=a.words[p];return 1===p.length?"y"===p&&e?"\u0458\u0435\u0434\u043d\u0430 \u0433\u043e\u0434\u0438\u043d\u0430":g||e?S[0]:S[1]:(M=a.correctGrammaticalCase(u,S),"yy"===p&&e&&"\u0433\u043e\u0434\u0438\u043d\u0443"===M?u+" \u0433\u043e\u0434\u0438\u043d\u0430":u+" "+M)}};r.defineLocale("sr-cyrl",{months:"\u0458\u0430\u043d\u0443\u0430\u0440_\u0444\u0435\u0431\u0440\u0443\u0430\u0440_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0438\u043b_\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043f\u0442\u0435\u043c\u0431\u0430\u0440_\u043e\u043a\u0442\u043e\u0431\u0430\u0440_\u043d\u043e\u0432\u0435\u043c\u0431\u0430\u0440_\u0434\u0435\u0446\u0435\u043c\u0431\u0430\u0440".split("_"),monthsShort:"\u0458\u0430\u043d._\u0444\u0435\u0431._\u043c\u0430\u0440._\u0430\u043f\u0440._\u043c\u0430\u0458_\u0458\u0443\u043d_\u0458\u0443\u043b_\u0430\u0432\u0433._\u0441\u0435\u043f._\u043e\u043a\u0442._\u043d\u043e\u0432._\u0434\u0435\u0446.".split("_"),monthsParseExact:!0,weekdays:"\u043d\u0435\u0434\u0435\u0459\u0430_\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u0430\u043a_\u0443\u0442\u043e\u0440\u0430\u043a_\u0441\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043a_\u043f\u0435\u0442\u0430\u043a_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),weekdaysShort:"\u043d\u0435\u0434._\u043f\u043e\u043d._\u0443\u0442\u043e._\u0441\u0440\u0435._\u0447\u0435\u0442._\u043f\u0435\u0442._\u0441\u0443\u0431.".split("_"),weekdaysMin:"\u043d\u0435_\u043f\u043e_\u0443\u0442_\u0441\u0440_\u0447\u0435_\u043f\u0435_\u0441\u0443".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[\u0434\u0430\u043d\u0430\u0441 \u0443] LT",nextDay:"[\u0441\u0443\u0442\u0440\u0430 \u0443] LT",nextWeek:function(){switch(this.day()){case 0:return"[\u0443] [\u043d\u0435\u0434\u0435\u0459\u0443] [\u0443] LT";case 3:return"[\u0443] [\u0441\u0440\u0435\u0434\u0443] [\u0443] LT";case 6:return"[\u0443] [\u0441\u0443\u0431\u043e\u0442\u0443] [\u0443] LT";case 1:case 2:case 4:case 5:return"[\u0443] dddd [\u0443] LT"}},lastDay:"[\u0458\u0443\u0447\u0435 \u0443] LT",lastWeek:function(){return["[\u043f\u0440\u043e\u0448\u043b\u0435] [\u043d\u0435\u0434\u0435\u0459\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u043e\u043d\u0435\u0434\u0435\u0459\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0443\u0442\u043e\u0440\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0440\u0435\u0434\u0435] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u0447\u0435\u0442\u0432\u0440\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u043e\u0433] [\u043f\u0435\u0442\u043a\u0430] [\u0443] LT","[\u043f\u0440\u043e\u0448\u043b\u0435] [\u0441\u0443\u0431\u043e\u0442\u0435] [\u0443] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"\u043f\u0440\u0435 %s",s:"\u043d\u0435\u043a\u043e\u043b\u0438\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u0438",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:a.translate,dd:a.translate,M:a.translate,MM:a.translate,y:a.translate,yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(i(16738))},91621:function(v,b,i){!function(r){"use strict";var a={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],d:["jedan dan","jednog dana"],dd:["dan","dana","dana"],M:["jedan mesec","jednog meseca"],MM:["mesec","meseca","meseci"],y:["jednu godinu","jedne godine"],yy:["godinu","godine","godina"]},correctGrammaticalCase:function(u,e){return u%10>=1&&u%10<=4&&(u%100<10||u%100>=20)?u%10==1?e[0]:e[1]:e[2]},translate:function(u,e,p,g){var M,S=a.words[p];return 1===p.length?"y"===p&&e?"jedna godina":g||e?S[0]:S[1]:(M=a.correctGrammaticalCase(u,S),"yy"===p&&e&&"godinu"===M?u+" godina":u+" "+M)}};r.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_\u010detvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._\u010det._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_\u010de_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[ju\u010de u] LT",lastWeek:function(){return["[pro\u0161le] [nedelje] [u] LT","[pro\u0161log] [ponedeljka] [u] LT","[pro\u0161log] [utorka] [u] LT","[pro\u0161le] [srede] [u] LT","[pro\u0161log] [\u010detvrtka] [u] LT","[pro\u0161log] [petka] [u] LT","[pro\u0161le] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:a.translate,dd:a.translate,M:a.translate,MM:a.translate,y:a.translate,yy:a.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(i(16738))},41404:function(v,b,i){!function(r){"use strict";r.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(f,u,e){return f<11?"ekuseni":f<15?"emini":f<19?"entsambama":"ebusuku"},meridiemHour:function(f,u){return 12===f&&(f=0),"ekuseni"===u?f:"emini"===u?f>=11?f:f+12:"entsambama"===u||"ebusuku"===u?0===f?0:f+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(i(16738))},55685:function(v,b,i){!function(r){"use strict";r.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"s\xf6ndag_m\xe5ndag_tisdag_onsdag_torsdag_fredag_l\xf6rdag".split("_"),weekdaysShort:"s\xf6n_m\xe5n_tis_ons_tor_fre_l\xf6r".split("_"),weekdaysMin:"s\xf6_m\xe5_ti_on_to_fr_l\xf6".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Ig\xe5r] LT",nextWeek:"[P\xe5] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"f\xf6r %s sedan",s:"n\xe5gra sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en m\xe5nad",MM:"%d m\xe5nader",y:"ett \xe5r",yy:"%d \xe5r"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?":e":1===u||2===u?":a":":e")},week:{dow:1,doy:4}})}(i(16738))},3872:function(v,b,i){!function(r){"use strict";r.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(i(16738))},54106:function(v,b,i){!function(r){"use strict";var a={1:"\u0be7",2:"\u0be8",3:"\u0be9",4:"\u0bea",5:"\u0beb",6:"\u0bec",7:"\u0bed",8:"\u0bee",9:"\u0bef",0:"\u0be6"},f={"\u0be7":"1","\u0be8":"2","\u0be9":"3","\u0bea":"4","\u0beb":"5","\u0bec":"6","\u0bed":"7","\u0bee":"8","\u0bef":"9","\u0be6":"0"};r.defineLocale("ta",{months:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),monthsShort:"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf_\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf_\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd_\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd_\u0bae\u0bc7_\u0b9c\u0bc2\u0ba9\u0bcd_\u0b9c\u0bc2\u0bb2\u0bc8_\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd_\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bc6\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b85\u0b95\u0bcd\u0b9f\u0bc7\u0bbe\u0baa\u0bb0\u0bcd_\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd_\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd".split("_"),weekdays:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8_\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8".split("_"),weekdaysShort:"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bc1_\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0bb3\u0bcd_\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd_\u0baa\u0bc1\u0ba4\u0ba9\u0bcd_\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0ba9\u0bcd_\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf_\u0b9a\u0ba9\u0bbf".split("_"),weekdaysMin:"\u0b9e\u0bbe_\u0ba4\u0bbf_\u0b9a\u0bc6_\u0baa\u0bc1_\u0bb5\u0bbf_\u0bb5\u0bc6_\u0b9a".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[\u0b87\u0ba9\u0bcd\u0bb1\u0bc1] LT",nextDay:"[\u0ba8\u0bbe\u0bb3\u0bc8] LT",nextWeek:"dddd, LT",lastDay:"[\u0ba8\u0bc7\u0bb1\u0bcd\u0bb1\u0bc1] LT",lastWeek:"[\u0b95\u0b9f\u0ba8\u0bcd\u0ba4 \u0bb5\u0bbe\u0bb0\u0bae\u0bcd] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0b87\u0bb2\u0bcd",past:"%s \u0bae\u0bc1\u0ba9\u0bcd",s:"\u0b92\u0bb0\u0bc1 \u0b9a\u0bbf\u0bb2 \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",ss:"%d \u0bb5\u0bbf\u0ba8\u0bbe\u0b9f\u0bbf\u0b95\u0bb3\u0bcd",m:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0bae\u0bcd",mm:"%d \u0ba8\u0bbf\u0bae\u0bbf\u0b9f\u0b99\u0bcd\u0b95\u0bb3\u0bcd",h:"\u0b92\u0bb0\u0bc1 \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",hh:"%d \u0bae\u0ba3\u0bbf \u0ba8\u0bc7\u0bb0\u0bae\u0bcd",d:"\u0b92\u0bb0\u0bc1 \u0ba8\u0bbe\u0bb3\u0bcd",dd:"%d \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd",M:"\u0b92\u0bb0\u0bc1 \u0bae\u0bbe\u0ba4\u0bae\u0bcd",MM:"%d \u0bae\u0bbe\u0ba4\u0b99\u0bcd\u0b95\u0bb3\u0bcd",y:"\u0b92\u0bb0\u0bc1 \u0bb5\u0bb0\u0bc1\u0b9f\u0bae\u0bcd",yy:"%d \u0b86\u0ba3\u0bcd\u0b9f\u0bc1\u0b95\u0bb3\u0bcd"},dayOfMonthOrdinalParse:/\d{1,2}\u0bb5\u0ba4\u0bc1/,ordinal:function(e){return e+"\u0bb5\u0ba4\u0bc1"},preparse:function(e){return e.replace(/[\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0be6]/g,function(p){return f[p]})},postformat:function(e){return e.replace(/\d/g,function(p){return a[p]})},meridiemParse:/\u0baf\u0bbe\u0bae\u0bae\u0bcd|\u0bb5\u0bc8\u0b95\u0bb1\u0bc8|\u0b95\u0bbe\u0bb2\u0bc8|\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd|\u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1|\u0bae\u0bbe\u0bb2\u0bc8/,meridiem:function(e,p,g){return e<2?" \u0baf\u0bbe\u0bae\u0bae\u0bcd":e<6?" \u0bb5\u0bc8\u0b95\u0bb1\u0bc8":e<10?" \u0b95\u0bbe\u0bb2\u0bc8":e<14?" \u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd":e<18?" \u0b8e\u0bb1\u0bcd\u0baa\u0bbe\u0b9f\u0bc1":e<22?" \u0bae\u0bbe\u0bb2\u0bc8":" \u0baf\u0bbe\u0bae\u0bae\u0bcd"},meridiemHour:function(e,p){return 12===e&&(e=0),"\u0baf\u0bbe\u0bae\u0bae\u0bcd"===p?e<2?e:e+12:"\u0bb5\u0bc8\u0b95\u0bb1\u0bc8"===p||"\u0b95\u0bbe\u0bb2\u0bc8"===p||"\u0ba8\u0ba3\u0bcd\u0baa\u0b95\u0bb2\u0bcd"===p&&e>=10?e:e+12},week:{dow:0,doy:6}})}(i(16738))},39204:function(v,b,i){!function(r){"use strict";r.defineLocale("te",{months:"\u0c1c\u0c28\u0c35\u0c30\u0c3f_\u0c2b\u0c3f\u0c2c\u0c4d\u0c30\u0c35\u0c30\u0c3f_\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f\u0c32\u0c4d_\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17\u0c38\u0c4d\u0c1f\u0c41_\u0c38\u0c46\u0c2a\u0c4d\u0c1f\u0c46\u0c02\u0c2c\u0c30\u0c4d_\u0c05\u0c15\u0c4d\u0c1f\u0c4b\u0c2c\u0c30\u0c4d_\u0c28\u0c35\u0c02\u0c2c\u0c30\u0c4d_\u0c21\u0c3f\u0c38\u0c46\u0c02\u0c2c\u0c30\u0c4d".split("_"),monthsShort:"\u0c1c\u0c28._\u0c2b\u0c3f\u0c2c\u0c4d\u0c30._\u0c2e\u0c3e\u0c30\u0c4d\u0c1a\u0c3f_\u0c0f\u0c2a\u0c4d\u0c30\u0c3f._\u0c2e\u0c47_\u0c1c\u0c42\u0c28\u0c4d_\u0c1c\u0c41\u0c32\u0c48_\u0c06\u0c17._\u0c38\u0c46\u0c2a\u0c4d._\u0c05\u0c15\u0c4d\u0c1f\u0c4b._\u0c28\u0c35._\u0c21\u0c3f\u0c38\u0c46.".split("_"),monthsParseExact:!0,weekdays:"\u0c06\u0c26\u0c3f\u0c35\u0c3e\u0c30\u0c02_\u0c38\u0c4b\u0c2e\u0c35\u0c3e\u0c30\u0c02_\u0c2e\u0c02\u0c17\u0c33\u0c35\u0c3e\u0c30\u0c02_\u0c2c\u0c41\u0c27\u0c35\u0c3e\u0c30\u0c02_\u0c17\u0c41\u0c30\u0c41\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c41\u0c15\u0c4d\u0c30\u0c35\u0c3e\u0c30\u0c02_\u0c36\u0c28\u0c3f\u0c35\u0c3e\u0c30\u0c02".split("_"),weekdaysShort:"\u0c06\u0c26\u0c3f_\u0c38\u0c4b\u0c2e_\u0c2e\u0c02\u0c17\u0c33_\u0c2c\u0c41\u0c27_\u0c17\u0c41\u0c30\u0c41_\u0c36\u0c41\u0c15\u0c4d\u0c30_\u0c36\u0c28\u0c3f".split("_"),weekdaysMin:"\u0c06_\u0c38\u0c4b_\u0c2e\u0c02_\u0c2c\u0c41_\u0c17\u0c41_\u0c36\u0c41_\u0c36".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[\u0c28\u0c47\u0c21\u0c41] LT",nextDay:"[\u0c30\u0c47\u0c2a\u0c41] LT",nextWeek:"dddd, LT",lastDay:"[\u0c28\u0c3f\u0c28\u0c4d\u0c28] LT",lastWeek:"[\u0c17\u0c24] dddd, LT",sameElse:"L"},relativeTime:{future:"%s \u0c32\u0c4b",past:"%s \u0c15\u0c4d\u0c30\u0c3f\u0c24\u0c02",s:"\u0c15\u0c4a\u0c28\u0c4d\u0c28\u0c3f \u0c15\u0c4d\u0c37\u0c23\u0c3e\u0c32\u0c41",ss:"%d \u0c38\u0c46\u0c15\u0c28\u0c4d\u0c32\u0c41",m:"\u0c12\u0c15 \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c02",mm:"%d \u0c28\u0c3f\u0c2e\u0c3f\u0c37\u0c3e\u0c32\u0c41",h:"\u0c12\u0c15 \u0c17\u0c02\u0c1f",hh:"%d \u0c17\u0c02\u0c1f\u0c32\u0c41",d:"\u0c12\u0c15 \u0c30\u0c4b\u0c1c\u0c41",dd:"%d \u0c30\u0c4b\u0c1c\u0c41\u0c32\u0c41",M:"\u0c12\u0c15 \u0c28\u0c46\u0c32",MM:"%d \u0c28\u0c46\u0c32\u0c32\u0c41",y:"\u0c12\u0c15 \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c02",yy:"%d \u0c38\u0c02\u0c35\u0c24\u0c4d\u0c38\u0c30\u0c3e\u0c32\u0c41"},dayOfMonthOrdinalParse:/\d{1,2}\u0c35/,ordinal:"%d\u0c35",meridiemParse:/\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f|\u0c09\u0c26\u0c2f\u0c02|\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02|\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02/,meridiemHour:function(f,u){return 12===f&&(f=0),"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"===u?f<4?f:f+12:"\u0c09\u0c26\u0c2f\u0c02"===u?f:"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02"===u?f>=10?f:f+12:"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02"===u?f+12:void 0},meridiem:function(f,u,e){return f<4?"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f":f<10?"\u0c09\u0c26\u0c2f\u0c02":f<17?"\u0c2e\u0c27\u0c4d\u0c2f\u0c3e\u0c39\u0c4d\u0c28\u0c02":f<20?"\u0c38\u0c3e\u0c2f\u0c02\u0c24\u0c4d\u0c30\u0c02":"\u0c30\u0c3e\u0c24\u0c4d\u0c30\u0c3f"},week:{dow:0,doy:6}})}(i(16738))},83692:function(v,b,i){!function(r){"use strict";r.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Ju\xf1u_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(i(16738))},86361:function(v,b,i){!function(r){"use strict";var a={0:"-\u0443\u043c",1:"-\u0443\u043c",2:"-\u044e\u043c",3:"-\u044e\u043c",4:"-\u0443\u043c",5:"-\u0443\u043c",6:"-\u0443\u043c",7:"-\u0443\u043c",8:"-\u0443\u043c",9:"-\u0443\u043c",10:"-\u0443\u043c",12:"-\u0443\u043c",13:"-\u0443\u043c",20:"-\u0443\u043c",30:"-\u044e\u043c",40:"-\u0443\u043c",50:"-\u0443\u043c",60:"-\u0443\u043c",70:"-\u0443\u043c",80:"-\u0443\u043c",90:"-\u0443\u043c",100:"-\u0443\u043c"};r.defineLocale("tg",{months:{format:"\u044f\u043d\u0432\u0430\u0440\u0438_\u0444\u0435\u0432\u0440\u0430\u043b\u0438_\u043c\u0430\u0440\u0442\u0438_\u0430\u043f\u0440\u0435\u043b\u0438_\u043c\u0430\u0439\u0438_\u0438\u044e\u043d\u0438_\u0438\u044e\u043b\u0438_\u0430\u0432\u0433\u0443\u0441\u0442\u0438_\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0438_\u043e\u043a\u0442\u044f\u0431\u0440\u0438_\u043d\u043e\u044f\u0431\u0440\u0438_\u0434\u0435\u043a\u0430\u0431\u0440\u0438".split("_"),standalone:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_")},monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u044f\u043a\u0448\u0430\u043d\u0431\u0435_\u0434\u0443\u0448\u0430\u043d\u0431\u0435_\u0441\u0435\u0448\u0430\u043d\u0431\u0435_\u0447\u043e\u0440\u0448\u0430\u043d\u0431\u0435_\u043f\u0430\u043d\u04b7\u0448\u0430\u043d\u0431\u0435_\u04b7\u0443\u043c\u044a\u0430_\u0448\u0430\u043d\u0431\u0435".split("_"),weekdaysShort:"\u044f\u0448\u0431_\u0434\u0448\u0431_\u0441\u0448\u0431_\u0447\u0448\u0431_\u043f\u0448\u0431_\u04b7\u0443\u043c_\u0448\u043d\u0431".split("_"),weekdaysMin:"\u044f\u0448_\u0434\u0448_\u0441\u0448_\u0447\u0448_\u043f\u0448_\u04b7\u043c_\u0448\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u0418\u043c\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextDay:"[\u0424\u0430\u0440\u0434\u043e \u0441\u043e\u0430\u0442\u0438] LT",lastDay:"[\u0414\u0438\u0440\u04ef\u0437 \u0441\u043e\u0430\u0442\u0438] LT",nextWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u043e\u044f\u043d\u0434\u0430 \u0441\u043e\u0430\u0442\u0438] LT",lastWeek:"dddd[\u0438] [\u04b3\u0430\u0444\u0442\u0430\u0438 \u0433\u0443\u0437\u0430\u0448\u0442\u0430 \u0441\u043e\u0430\u0442\u0438] LT",sameElse:"L"},relativeTime:{future:"\u0431\u0430\u044a\u0434\u0438 %s",past:"%s \u043f\u0435\u0448",s:"\u044f\u043a\u0447\u0430\u043d\u0434 \u0441\u043e\u043d\u0438\u044f",m:"\u044f\u043a \u0434\u0430\u049b\u0438\u049b\u0430",mm:"%d \u0434\u0430\u049b\u0438\u049b\u0430",h:"\u044f\u043a \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u044f\u043a \u0440\u04ef\u0437",dd:"%d \u0440\u04ef\u0437",M:"\u044f\u043a \u043c\u043e\u04b3",MM:"%d \u043c\u043e\u04b3",y:"\u044f\u043a \u0441\u043e\u043b",yy:"%d \u0441\u043e\u043b"},meridiemParse:/\u0448\u0430\u0431|\u0441\u0443\u0431\u04b3|\u0440\u04ef\u0437|\u0431\u0435\u0433\u043e\u04b3/,meridiemHour:function(u,e){return 12===u&&(u=0),"\u0448\u0430\u0431"===e?u<4?u:u+12:"\u0441\u0443\u0431\u04b3"===e?u:"\u0440\u04ef\u0437"===e?u>=11?u:u+12:"\u0431\u0435\u0433\u043e\u04b3"===e?u+12:void 0},meridiem:function(u,e,p){return u<4?"\u0448\u0430\u0431":u<11?"\u0441\u0443\u0431\u04b3":u<16?"\u0440\u04ef\u0437":u<19?"\u0431\u0435\u0433\u043e\u04b3":"\u0448\u0430\u0431"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0443\u043c|\u044e\u043c)/,ordinal:function(u){return u+(a[u]||a[u%10]||a[u>=100?100:null])},week:{dow:1,doy:7}})}(i(16738))},31735:function(v,b,i){!function(r){"use strict";r.defineLocale("th",{months:"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21_\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c_\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21_\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19_\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21_\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19_\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21_\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21_\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19_\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21_\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19_\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21".split("_"),monthsShort:"\u0e21.\u0e04._\u0e01.\u0e1e._\u0e21\u0e35.\u0e04._\u0e40\u0e21.\u0e22._\u0e1e.\u0e04._\u0e21\u0e34.\u0e22._\u0e01.\u0e04._\u0e2a.\u0e04._\u0e01.\u0e22._\u0e15.\u0e04._\u0e1e.\u0e22._\u0e18.\u0e04.".split("_"),monthsParseExact:!0,weekdays:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysShort:"\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c_\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c_\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23_\u0e1e\u0e38\u0e18_\u0e1e\u0e24\u0e2b\u0e31\u0e2a_\u0e28\u0e38\u0e01\u0e23\u0e4c_\u0e40\u0e2a\u0e32\u0e23\u0e4c".split("_"),weekdaysMin:"\u0e2d\u0e32._\u0e08._\u0e2d._\u0e1e._\u0e1e\u0e24._\u0e28._\u0e2a.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm",LLLL:"\u0e27\u0e31\u0e19dddd\u0e17\u0e35\u0e48 D MMMM YYYY \u0e40\u0e27\u0e25\u0e32 H:mm"},meridiemParse:/\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07|\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07/,isPM:function(f){return"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"===f},meridiem:function(f,u,e){return f<12?"\u0e01\u0e48\u0e2d\u0e19\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07":"\u0e2b\u0e25\u0e31\u0e07\u0e40\u0e17\u0e35\u0e48\u0e22\u0e07"},calendar:{sameDay:"[\u0e27\u0e31\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextDay:"[\u0e1e\u0e23\u0e38\u0e48\u0e07\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",nextWeek:"dddd[\u0e2b\u0e19\u0e49\u0e32 \u0e40\u0e27\u0e25\u0e32] LT",lastDay:"[\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e27\u0e32\u0e19\u0e19\u0e35\u0e49 \u0e40\u0e27\u0e25\u0e32] LT",lastWeek:"[\u0e27\u0e31\u0e19]dddd[\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27 \u0e40\u0e27\u0e25\u0e32] LT",sameElse:"L"},relativeTime:{future:"\u0e2d\u0e35\u0e01 %s",past:"%s\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27",s:"\u0e44\u0e21\u0e48\u0e01\u0e35\u0e48\u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",ss:"%d \u0e27\u0e34\u0e19\u0e32\u0e17\u0e35",m:"1 \u0e19\u0e32\u0e17\u0e35",mm:"%d \u0e19\u0e32\u0e17\u0e35",h:"1 \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",hh:"%d \u0e0a\u0e31\u0e48\u0e27\u0e42\u0e21\u0e07",d:"1 \u0e27\u0e31\u0e19",dd:"%d \u0e27\u0e31\u0e19",w:"1 \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",ww:"%d \u0e2a\u0e31\u0e1b\u0e14\u0e32\u0e2b\u0e4c",M:"1 \u0e40\u0e14\u0e37\u0e2d\u0e19",MM:"%d \u0e40\u0e14\u0e37\u0e2d\u0e19",y:"1 \u0e1b\u0e35",yy:"%d \u0e1b\u0e35"}})}(i(16738))},1568:function(v,b,i){!function(r){"use strict";var a={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'\xfcnji",4:"'\xfcnji",100:"'\xfcnji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};r.defineLocale("tk",{months:"\xddanwar_Fewral_Mart_Aprel_Ma\xfd_I\xfdun_I\xfdul_Awgust_Sent\xfdabr_Okt\xfdabr_No\xfdabr_Dekabr".split("_"),monthsShort:"\xddan_Few_Mar_Apr_Ma\xfd_I\xfdn_I\xfdl_Awg_Sen_Okt_No\xfd_Dek".split("_"),weekdays:"\xddek\u015fenbe_Du\u015fenbe_Si\u015fenbe_\xc7ar\u015fenbe_Pen\u015fenbe_Anna_\u015eenbe".split("_"),weekdaysShort:"\xddek_Du\u015f_Si\u015f_\xc7ar_Pen_Ann_\u015een".split("_"),weekdaysMin:"\xddk_D\u015f_S\u015f_\xc7r_Pn_An_\u015en".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[d\xfc\xfdn] LT",lastWeek:"[ge\xe7en] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s so\u0148",past:"%s \xf6\u0148",s:"birn\xe4\xe7e sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir g\xfcn",dd:"%d g\xfcn",M:"bir a\xfd",MM:"%d a\xfd",y:"bir \xfdyl",yy:"%d \xfdyl"},ordinal:function(u,e){switch(e){case"d":case"D":case"Do":case"DD":return u;default:if(0===u)return u+"'unjy";var p=u%10;return u+(a[p]||a[u%100-p]||a[u>=100?100:null])}},week:{dow:1,doy:7}})}(i(16738))},96129:function(v,b,i){!function(r){"use strict";r.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(f){return f},week:{dow:1,doy:4}})}(i(16738))},13759:function(v,b,i){!function(r){"use strict";var a="pagh_wa\u2019_cha\u2019_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function e(S,M,w,x){var B=function p(S){var M=Math.floor(S%1e3/100),w=Math.floor(S%100/10),x=S%10,B="";return M>0&&(B+=a[M]+"vatlh"),w>0&&(B+=(""!==B?" ":"")+a[w]+"maH"),x>0&&(B+=(""!==B?" ":"")+a[x]),""===B?"pagh":B}(S);switch(w){case"ss":return B+" lup";case"mm":return B+" tup";case"hh":return B+" rep";case"dd":return B+" jaj";case"MM":return B+" jar";case"yy":return B+" DIS"}}r.defineLocale("tlh",{months:"tera\u2019 jar wa\u2019_tera\u2019 jar cha\u2019_tera\u2019 jar wej_tera\u2019 jar loS_tera\u2019 jar vagh_tera\u2019 jar jav_tera\u2019 jar Soch_tera\u2019 jar chorgh_tera\u2019 jar Hut_tera\u2019 jar wa\u2019maH_tera\u2019 jar wa\u2019maH wa\u2019_tera\u2019 jar wa\u2019maH cha\u2019".split("_"),monthsShort:"jar wa\u2019_jar cha\u2019_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa\u2019maH_jar wa\u2019maH wa\u2019_jar wa\u2019maH cha\u2019".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa\u2019leS] LT",nextWeek:"LLL",lastDay:"[wa\u2019Hu\u2019] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function f(S){var M=S;return-1!==S.indexOf("jaj")?M.slice(0,-3)+"leS":-1!==S.indexOf("jar")?M.slice(0,-3)+"waQ":-1!==S.indexOf("DIS")?M.slice(0,-3)+"nem":M+" pIq"},past:function u(S){var M=S;return-1!==S.indexOf("jaj")?M.slice(0,-3)+"Hu\u2019":-1!==S.indexOf("jar")?M.slice(0,-3)+"wen":-1!==S.indexOf("DIS")?M.slice(0,-3)+"ben":M+" ret"},s:"puS lup",ss:e,m:"wa\u2019 tup",mm:e,h:"wa\u2019 rep",hh:e,d:"wa\u2019 jaj",dd:e,M:"wa\u2019 jar",MM:e,y:"wa\u2019 DIS",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},81644:function(v,b,i){!function(r){"use strict";var a={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'\xfcnc\xfc",4:"'\xfcnc\xfc",100:"'\xfcnc\xfc",6:"'nc\u0131",9:"'uncu",10:"'uncu",30:"'uncu",60:"'\u0131nc\u0131",90:"'\u0131nc\u0131"};r.defineLocale("tr",{months:"Ocak_\u015eubat_Mart_Nisan_May\u0131s_Haziran_Temmuz_A\u011fustos_Eyl\xfcl_Ekim_Kas\u0131m_Aral\u0131k".split("_"),monthsShort:"Oca_\u015eub_Mar_Nis_May_Haz_Tem_A\u011fu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Sal\u0131_\xc7ar\u015famba_Per\u015fembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pzt_Sal_\xc7ar_Per_Cum_Cmt".split("_"),weekdaysMin:"Pz_Pt_Sa_\xc7a_Pe_Cu_Ct".split("_"),meridiem:function(u,e,p){return u<12?p?"\xf6\xf6":"\xd6\xd6":p?"\xf6s":"\xd6S"},meridiemParse:/\xf6\xf6|\xd6\xd6|\xf6s|\xd6S/,isPM:function(u){return"\xf6s"===u||"\xd6S"===u},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bug\xfcn saat] LT",nextDay:"[yar\u0131n saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[d\xfcn] LT",lastWeek:"[ge\xe7en] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s \xf6nce",s:"birka\xe7 saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir g\xfcn",dd:"%d g\xfcn",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir y\u0131l",yy:"%d y\u0131l"},ordinal:function(u,e){switch(e){case"d":case"D":case"Do":case"DD":return u;default:if(0===u)return u+"'\u0131nc\u0131";var p=u%10;return u+(a[p]||a[u%100-p]||a[u>=100?100:null])}},week:{dow:1,doy:7}})}(i(16738))},90875:function(v,b,i){!function(r){"use strict";function f(u,e,p,g){var S={s:["viensas secunds","'iensas secunds"],ss:[u+" secunds",u+" secunds"],m:["'n m\xedut","'iens m\xedut"],mm:[u+" m\xeduts",u+" m\xeduts"],h:["'n \xfeora","'iensa \xfeora"],hh:[u+" \xfeoras",u+" \xfeoras"],d:["'n ziua","'iensa ziua"],dd:[u+" ziuas",u+" ziuas"],M:["'n mes","'iens mes"],MM:[u+" mesen",u+" mesen"],y:["'n ar","'iens ar"],yy:[u+" ars",u+" ars"]};return g||e?S[p][0]:S[p][1]}r.defineLocale("tzl",{months:"Januar_Fevraglh_Mar\xe7_Avr\xefu_Mai_G\xfcn_Julia_Guscht_Setemvar_Listop\xe4ts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_G\xfcn_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"S\xfaladi_L\xfane\xe7i_Maitzi_M\xe1rcuri_Xh\xfaadi_Vi\xe9ner\xe7i_S\xe1turi".split("_"),weekdaysShort:"S\xfal_L\xfan_Mai_M\xe1r_Xh\xfa_Vi\xe9_S\xe1t".split("_"),weekdaysMin:"S\xfa_L\xfa_Ma_M\xe1_Xh_Vi_S\xe1".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(u){return"d'o"===u.toLowerCase()},meridiem:function(u,e,p){return u>11?p?"d'o":"D'O":p?"d'a":"D'A"},calendar:{sameDay:"[oxhi \xe0] LT",nextDay:"[dem\xe0 \xe0] LT",nextWeek:"dddd [\xe0] LT",lastDay:"[ieiri \xe0] LT",lastWeek:"[s\xfcr el] dddd [lasteu \xe0] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:f,ss:f,m:f,mm:f,h:f,hh:f,d:f,dd:f,M:f,MM:f,y:f,yy:f},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(i(16738))},11041:function(v,b,i){!function(r){"use strict";r.defineLocale("tzm-latn",{months:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_br\u02e4ayr\u02e4_mar\u02e4s\u02e4_ibrir_mayyw_ywnyw_ywlywz_\u0263w\u0161t_\u0161wtanbir_kt\u02e4wbr\u02e4_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asi\u1e0dyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minu\u1e0d",mm:"%d minu\u1e0d",h:"sa\u025ba",hh:"%d tassa\u025bin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(i(16738))},16878:function(v,b,i){!function(r){"use strict";r.defineLocale("tzm",{months:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),monthsShort:"\u2d49\u2d4f\u2d4f\u2d30\u2d62\u2d54_\u2d31\u2d55\u2d30\u2d62\u2d55_\u2d4e\u2d30\u2d55\u2d5a_\u2d49\u2d31\u2d54\u2d49\u2d54_\u2d4e\u2d30\u2d62\u2d62\u2d53_\u2d62\u2d53\u2d4f\u2d62\u2d53_\u2d62\u2d53\u2d4d\u2d62\u2d53\u2d63_\u2d56\u2d53\u2d5b\u2d5c_\u2d5b\u2d53\u2d5c\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d3d\u2d5f\u2d53\u2d31\u2d55_\u2d4f\u2d53\u2d61\u2d30\u2d4f\u2d31\u2d49\u2d54_\u2d37\u2d53\u2d4a\u2d4f\u2d31\u2d49\u2d54".split("_"),weekdays:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysShort:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),weekdaysMin:"\u2d30\u2d59\u2d30\u2d4e\u2d30\u2d59_\u2d30\u2d62\u2d4f\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4f\u2d30\u2d59_\u2d30\u2d3d\u2d54\u2d30\u2d59_\u2d30\u2d3d\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d4e\u2d61\u2d30\u2d59_\u2d30\u2d59\u2d49\u2d39\u2d62\u2d30\u2d59".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[\u2d30\u2d59\u2d37\u2d45 \u2d34] LT",nextDay:"[\u2d30\u2d59\u2d3d\u2d30 \u2d34] LT",nextWeek:"dddd [\u2d34] LT",lastDay:"[\u2d30\u2d5a\u2d30\u2d4f\u2d5c \u2d34] LT",lastWeek:"dddd [\u2d34] LT",sameElse:"L"},relativeTime:{future:"\u2d37\u2d30\u2d37\u2d45 \u2d59 \u2d62\u2d30\u2d4f %s",past:"\u2d62\u2d30\u2d4f %s",s:"\u2d49\u2d4e\u2d49\u2d3d",ss:"%d \u2d49\u2d4e\u2d49\u2d3d",m:"\u2d4e\u2d49\u2d4f\u2d53\u2d3a",mm:"%d \u2d4e\u2d49\u2d4f\u2d53\u2d3a",h:"\u2d59\u2d30\u2d44\u2d30",hh:"%d \u2d5c\u2d30\u2d59\u2d59\u2d30\u2d44\u2d49\u2d4f",d:"\u2d30\u2d59\u2d59",dd:"%d o\u2d59\u2d59\u2d30\u2d4f",M:"\u2d30\u2d62o\u2d53\u2d54",MM:"%d \u2d49\u2d62\u2d62\u2d49\u2d54\u2d4f",y:"\u2d30\u2d59\u2d33\u2d30\u2d59",yy:"%d \u2d49\u2d59\u2d33\u2d30\u2d59\u2d4f"},week:{dow:6,doy:12}})}(i(16738))},74357:function(v,b,i){!function(r){"use strict";r.defineLocale("ug-cn",{months:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),monthsShort:"\u064a\u0627\u0646\u06cb\u0627\u0631_\u0641\u06d0\u06cb\u0631\u0627\u0644_\u0645\u0627\u0631\u062a_\u0626\u0627\u067e\u0631\u06d0\u0644_\u0645\u0627\u064a_\u0626\u0649\u064a\u06c7\u0646_\u0626\u0649\u064a\u06c7\u0644_\u0626\u0627\u06cb\u063a\u06c7\u0633\u062a_\u0633\u06d0\u0646\u062a\u06d5\u0628\u0649\u0631_\u0626\u06c6\u0643\u062a\u06d5\u0628\u0649\u0631_\u0646\u0648\u064a\u0627\u0628\u0649\u0631_\u062f\u06d0\u0643\u0627\u0628\u0649\u0631".split("_"),weekdays:"\u064a\u06d5\u0643\u0634\u06d5\u0646\u0628\u06d5_\u062f\u06c8\u0634\u06d5\u0646\u0628\u06d5_\u0633\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u0686\u0627\u0631\u0634\u06d5\u0646\u0628\u06d5_\u067e\u06d5\u064a\u0634\u06d5\u0646\u0628\u06d5_\u062c\u06c8\u0645\u06d5_\u0634\u06d5\u0646\u0628\u06d5".split("_"),weekdaysShort:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),weekdaysMin:"\u064a\u06d5_\u062f\u06c8_\u0633\u06d5_\u0686\u0627_\u067e\u06d5_\u062c\u06c8_\u0634\u06d5".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649",LLL:"YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm",LLLL:"dddd\u060c YYYY-\u064a\u0649\u0644\u0649M-\u0626\u0627\u064a\u0646\u0649\u06adD-\u0643\u06c8\u0646\u0649\u060c HH:mm"},meridiemParse:/\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5|\u0633\u06d5\u06be\u06d5\u0631|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646|\u0686\u06c8\u0634|\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646|\u0643\u06d5\u0686/,meridiemHour:function(f,u){return 12===f&&(f=0),"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5"===u||"\u0633\u06d5\u06be\u06d5\u0631"===u||"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646"===u?f:"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646"===u||"\u0643\u06d5\u0686"===u?f+12:f>=11?f:f+12},meridiem:function(f,u,e){var p=100*f+u;return p<600?"\u064a\u06d0\u0631\u0649\u0645 \u0643\u06d0\u0686\u06d5":p<900?"\u0633\u06d5\u06be\u06d5\u0631":p<1130?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0628\u06c7\u0631\u06c7\u0646":p<1230?"\u0686\u06c8\u0634":p<1800?"\u0686\u06c8\u0634\u062a\u0649\u0646 \u0643\u06d0\u064a\u0649\u0646":"\u0643\u06d5\u0686"},calendar:{sameDay:"[\u0628\u06c8\u06af\u06c8\u0646 \u0633\u0627\u0626\u06d5\u062a] LT",nextDay:"[\u0626\u06d5\u062a\u06d5 \u0633\u0627\u0626\u06d5\u062a] LT",nextWeek:"[\u0643\u06d0\u0644\u06d5\u0631\u0643\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",lastDay:"[\u062a\u06c6\u0646\u06c8\u06af\u06c8\u0646] LT",lastWeek:"[\u0626\u0627\u0644\u062f\u0649\u0646\u0642\u0649] dddd [\u0633\u0627\u0626\u06d5\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0643\u06d0\u064a\u0649\u0646",past:"%s \u0628\u06c7\u0631\u06c7\u0646",s:"\u0646\u06d5\u0686\u0686\u06d5 \u0633\u06d0\u0643\u0648\u0646\u062a",ss:"%d \u0633\u06d0\u0643\u0648\u0646\u062a",m:"\u0628\u0649\u0631 \u0645\u0649\u0646\u06c7\u062a",mm:"%d \u0645\u0649\u0646\u06c7\u062a",h:"\u0628\u0649\u0631 \u0633\u0627\u0626\u06d5\u062a",hh:"%d \u0633\u0627\u0626\u06d5\u062a",d:"\u0628\u0649\u0631 \u0643\u06c8\u0646",dd:"%d \u0643\u06c8\u0646",M:"\u0628\u0649\u0631 \u0626\u0627\u064a",MM:"%d \u0626\u0627\u064a",y:"\u0628\u0649\u0631 \u064a\u0649\u0644",yy:"%d \u064a\u0649\u0644"},dayOfMonthOrdinalParse:/\d{1,2}(-\u0643\u06c8\u0646\u0649|-\u0626\u0627\u064a|-\u06be\u06d5\u067e\u062a\u06d5)/,ordinal:function(f,u){switch(u){case"d":case"D":case"DDD":return f+"-\u0643\u06c8\u0646\u0649";case"w":case"W":return f+"-\u06be\u06d5\u067e\u062a\u06d5";default:return f}},preparse:function(f){return f.replace(/\u060c/g,",")},postformat:function(f){return f.replace(/,/g,"\u060c")},week:{dow:1,doy:7}})}(i(16738))},74810:function(v,b,i){!function(r){"use strict";function f(g,S,M){return"m"===M?S?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443":"h"===M?S?"\u0433\u043e\u0434\u0438\u043d\u0430":"\u0433\u043e\u0434\u0438\u043d\u0443":g+" "+function a(g,S){var M=g.split("_");return S%10==1&&S%100!=11?M[0]:S%10>=2&&S%10<=4&&(S%100<10||S%100>=20)?M[1]:M[2]}({ss:S?"\u0441\u0435\u043a\u0443\u043d\u0434\u0430_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434":"\u0441\u0435\u043a\u0443\u043d\u0434\u0443_\u0441\u0435\u043a\u0443\u043d\u0434\u0438_\u0441\u0435\u043a\u0443\u043d\u0434",mm:S?"\u0445\u0432\u0438\u043b\u0438\u043d\u0430_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d":"\u0445\u0432\u0438\u043b\u0438\u043d\u0443_\u0445\u0432\u0438\u043b\u0438\u043d\u0438_\u0445\u0432\u0438\u043b\u0438\u043d",hh:S?"\u0433\u043e\u0434\u0438\u043d\u0430_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d":"\u0433\u043e\u0434\u0438\u043d\u0443_\u0433\u043e\u0434\u0438\u043d\u0438_\u0433\u043e\u0434\u0438\u043d",dd:"\u0434\u0435\u043d\u044c_\u0434\u043d\u0456_\u0434\u043d\u0456\u0432",MM:"\u043c\u0456\u0441\u044f\u0446\u044c_\u043c\u0456\u0441\u044f\u0446\u0456_\u043c\u0456\u0441\u044f\u0446\u0456\u0432",yy:"\u0440\u0456\u043a_\u0440\u043e\u043a\u0438_\u0440\u043e\u043a\u0456\u0432"}[M],+g)}function e(g){return function(){return g+"\u043e"+(11===this.hours()?"\u0431":"")+"] LT"}}r.defineLocale("uk",{months:{format:"\u0441\u0456\u0447\u043d\u044f_\u043b\u044e\u0442\u043e\u0433\u043e_\u0431\u0435\u0440\u0435\u0437\u043d\u044f_\u043a\u0432\u0456\u0442\u043d\u044f_\u0442\u0440\u0430\u0432\u043d\u044f_\u0447\u0435\u0440\u0432\u043d\u044f_\u043b\u0438\u043f\u043d\u044f_\u0441\u0435\u0440\u043f\u043d\u044f_\u0432\u0435\u0440\u0435\u0441\u043d\u044f_\u0436\u043e\u0432\u0442\u043d\u044f_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434\u0430_\u0433\u0440\u0443\u0434\u043d\u044f".split("_"),standalone:"\u0441\u0456\u0447\u0435\u043d\u044c_\u043b\u044e\u0442\u0438\u0439_\u0431\u0435\u0440\u0435\u0437\u0435\u043d\u044c_\u043a\u0432\u0456\u0442\u0435\u043d\u044c_\u0442\u0440\u0430\u0432\u0435\u043d\u044c_\u0447\u0435\u0440\u0432\u0435\u043d\u044c_\u043b\u0438\u043f\u0435\u043d\u044c_\u0441\u0435\u0440\u043f\u0435\u043d\u044c_\u0432\u0435\u0440\u0435\u0441\u0435\u043d\u044c_\u0436\u043e\u0432\u0442\u0435\u043d\u044c_\u043b\u0438\u0441\u0442\u043e\u043f\u0430\u0434_\u0433\u0440\u0443\u0434\u0435\u043d\u044c".split("_")},monthsShort:"\u0441\u0456\u0447_\u043b\u044e\u0442_\u0431\u0435\u0440_\u043a\u0432\u0456\u0442_\u0442\u0440\u0430\u0432_\u0447\u0435\u0440\u0432_\u043b\u0438\u043f_\u0441\u0435\u0440\u043f_\u0432\u0435\u0440_\u0436\u043e\u0432\u0442_\u043b\u0438\u0441\u0442_\u0433\u0440\u0443\u0434".split("_"),weekdays:function u(g,S){var M={nominative:"\u043d\u0435\u0434\u0456\u043b\u044f_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0430_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044f_\u0441\u0443\u0431\u043e\u0442\u0430".split("_"),accusative:"\u043d\u0435\u0434\u0456\u043b\u044e_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a_\u0432\u0456\u0432\u0442\u043e\u0440\u043e\u043a_\u0441\u0435\u0440\u0435\u0434\u0443_\u0447\u0435\u0442\u0432\u0435\u0440_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u044e_\u0441\u0443\u0431\u043e\u0442\u0443".split("_"),genitive:"\u043d\u0435\u0434\u0456\u043b\u0456_\u043f\u043e\u043d\u0435\u0434\u0456\u043b\u043a\u0430_\u0432\u0456\u0432\u0442\u043e\u0440\u043a\u0430_\u0441\u0435\u0440\u0435\u0434\u0438_\u0447\u0435\u0442\u0432\u0435\u0440\u0433\u0430_\u043f\u2019\u044f\u0442\u043d\u0438\u0446\u0456_\u0441\u0443\u0431\u043e\u0442\u0438".split("_")};return!0===g?M.nominative.slice(1,7).concat(M.nominative.slice(0,1)):g?M[/(\[[\u0412\u0432\u0423\u0443]\]) ?dddd/.test(S)?"accusative":/\[?(?:\u043c\u0438\u043d\u0443\u043b\u043e\u0457|\u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457)? ?\] ?dddd/.test(S)?"genitive":"nominative"][g.day()]:M.nominative},weekdaysShort:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),weekdaysMin:"\u043d\u0434_\u043f\u043d_\u0432\u0442_\u0441\u0440_\u0447\u0442_\u043f\u0442_\u0441\u0431".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY \u0440.",LLL:"D MMMM YYYY \u0440., HH:mm",LLLL:"dddd, D MMMM YYYY \u0440., HH:mm"},calendar:{sameDay:e("[\u0421\u044c\u043e\u0433\u043e\u0434\u043d\u0456 "),nextDay:e("[\u0417\u0430\u0432\u0442\u0440\u0430 "),lastDay:e("[\u0412\u0447\u043e\u0440\u0430 "),nextWeek:e("[\u0423] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return e("[\u041c\u0438\u043d\u0443\u043b\u043e\u0457] dddd [").call(this);case 1:case 2:case 4:return e("[\u041c\u0438\u043d\u0443\u043b\u043e\u0433\u043e] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"\u0437\u0430 %s",past:"%s \u0442\u043e\u043c\u0443",s:"\u0434\u0435\u043a\u0456\u043b\u044c\u043a\u0430 \u0441\u0435\u043a\u0443\u043d\u0434",ss:f,m:f,mm:f,h:"\u0433\u043e\u0434\u0438\u043d\u0443",hh:f,d:"\u0434\u0435\u043d\u044c",dd:f,M:"\u043c\u0456\u0441\u044f\u0446\u044c",MM:f,y:"\u0440\u0456\u043a",yy:f},meridiemParse:/\u043d\u043e\u0447\u0456|\u0440\u0430\u043d\u043a\u0443|\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430/,isPM:function(g){return/^(\u0434\u043d\u044f|\u0432\u0435\u0447\u043e\u0440\u0430)$/.test(g)},meridiem:function(g,S,M){return g<4?"\u043d\u043e\u0447\u0456":g<12?"\u0440\u0430\u043d\u043a\u0443":g<17?"\u0434\u043d\u044f":"\u0432\u0435\u0447\u043e\u0440\u0430"},dayOfMonthOrdinalParse:/\d{1,2}-(\u0439|\u0433\u043e)/,ordinal:function(g,S){switch(S){case"M":case"d":case"DDD":case"w":case"W":return g+"-\u0439";case"D":return g+"-\u0433\u043e";default:return g}},week:{dow:1,doy:7}})}(i(16738))},86794:function(v,b,i){!function(r){"use strict";var a=["\u062c\u0646\u0648\u0631\u06cc","\u0641\u0631\u0648\u0631\u06cc","\u0645\u0627\u0631\u0686","\u0627\u067e\u0631\u06cc\u0644","\u0645\u0626\u06cc","\u062c\u0648\u0646","\u062c\u0648\u0644\u0627\u0626\u06cc","\u0627\u06af\u0633\u062a","\u0633\u062a\u0645\u0628\u0631","\u0627\u06a9\u062a\u0648\u0628\u0631","\u0646\u0648\u0645\u0628\u0631","\u062f\u0633\u0645\u0628\u0631"],f=["\u0627\u062a\u0648\u0627\u0631","\u067e\u06cc\u0631","\u0645\u0646\u06af\u0644","\u0628\u062f\u06be","\u062c\u0645\u0639\u0631\u0627\u062a","\u062c\u0645\u0639\u06c1","\u06c1\u0641\u062a\u06c1"];r.defineLocale("ur",{months:a,monthsShort:a,weekdays:f,weekdaysShort:f,weekdaysMin:f,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd\u060c D MMMM YYYY HH:mm"},meridiemParse:/\u0635\u0628\u062d|\u0634\u0627\u0645/,isPM:function(e){return"\u0634\u0627\u0645"===e},meridiem:function(e,p,g){return e<12?"\u0635\u0628\u062d":"\u0634\u0627\u0645"},calendar:{sameDay:"[\u0622\u062c \u0628\u0648\u0642\u062a] LT",nextDay:"[\u06a9\u0644 \u0628\u0648\u0642\u062a] LT",nextWeek:"dddd [\u0628\u0648\u0642\u062a] LT",lastDay:"[\u06af\u0630\u0634\u062a\u06c1 \u0631\u0648\u0632 \u0628\u0648\u0642\u062a] LT",lastWeek:"[\u06af\u0630\u0634\u062a\u06c1] dddd [\u0628\u0648\u0642\u062a] LT",sameElse:"L"},relativeTime:{future:"%s \u0628\u0639\u062f",past:"%s \u0642\u0628\u0644",s:"\u0686\u0646\u062f \u0633\u06cc\u06a9\u0646\u0688",ss:"%d \u0633\u06cc\u06a9\u0646\u0688",m:"\u0627\u06cc\u06a9 \u0645\u0646\u0679",mm:"%d \u0645\u0646\u0679",h:"\u0627\u06cc\u06a9 \u06af\u06be\u0646\u0679\u06c1",hh:"%d \u06af\u06be\u0646\u0679\u06d2",d:"\u0627\u06cc\u06a9 \u062f\u0646",dd:"%d \u062f\u0646",M:"\u0627\u06cc\u06a9 \u0645\u0627\u06c1",MM:"%d \u0645\u0627\u06c1",y:"\u0627\u06cc\u06a9 \u0633\u0627\u0644",yy:"%d \u0633\u0627\u0644"},preparse:function(e){return e.replace(/\u060c/g,",")},postformat:function(e){return e.replace(/,/g,"\u060c")},week:{dow:1,doy:4}})}(i(16738))},77959:function(v,b,i){!function(r){"use strict";r.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(i(16738))},28966:function(v,b,i){!function(r){"use strict";r.defineLocale("uz",{months:"\u044f\u043d\u0432\u0430\u0440_\u0444\u0435\u0432\u0440\u0430\u043b_\u043c\u0430\u0440\u0442_\u0430\u043f\u0440\u0435\u043b_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433\u0443\u0441\u0442_\u0441\u0435\u043d\u0442\u044f\u0431\u0440_\u043e\u043a\u0442\u044f\u0431\u0440_\u043d\u043e\u044f\u0431\u0440_\u0434\u0435\u043a\u0430\u0431\u0440".split("_"),monthsShort:"\u044f\u043d\u0432_\u0444\u0435\u0432_\u043c\u0430\u0440_\u0430\u043f\u0440_\u043c\u0430\u0439_\u0438\u044e\u043d_\u0438\u044e\u043b_\u0430\u0432\u0433_\u0441\u0435\u043d_\u043e\u043a\u0442_\u043d\u043e\u044f_\u0434\u0435\u043a".split("_"),weekdays:"\u042f\u043a\u0448\u0430\u043d\u0431\u0430_\u0414\u0443\u0448\u0430\u043d\u0431\u0430_\u0421\u0435\u0448\u0430\u043d\u0431\u0430_\u0427\u043e\u0440\u0448\u0430\u043d\u0431\u0430_\u041f\u0430\u0439\u0448\u0430\u043d\u0431\u0430_\u0416\u0443\u043c\u0430_\u0428\u0430\u043d\u0431\u0430".split("_"),weekdaysShort:"\u042f\u043a\u0448_\u0414\u0443\u0448_\u0421\u0435\u0448_\u0427\u043e\u0440_\u041f\u0430\u0439_\u0416\u0443\u043c_\u0428\u0430\u043d".split("_"),weekdaysMin:"\u042f\u043a_\u0414\u0443_\u0421\u0435_\u0427\u043e_\u041f\u0430_\u0416\u0443_\u0428\u0430".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[\u0411\u0443\u0433\u0443\u043d \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",nextDay:"[\u042d\u0440\u0442\u0430\u0433\u0430] LT [\u0434\u0430]",nextWeek:"dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastDay:"[\u041a\u0435\u0447\u0430 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",lastWeek:"[\u0423\u0442\u0433\u0430\u043d] dddd [\u043a\u0443\u043d\u0438 \u0441\u043e\u0430\u0442] LT [\u0434\u0430]",sameElse:"L"},relativeTime:{future:"\u042f\u043a\u0438\u043d %s \u0438\u0447\u0438\u0434\u0430",past:"\u0411\u0438\u0440 \u043d\u0435\u0447\u0430 %s \u043e\u043b\u0434\u0438\u043d",s:"\u0444\u0443\u0440\u0441\u0430\u0442",ss:"%d \u0444\u0443\u0440\u0441\u0430\u0442",m:"\u0431\u0438\u0440 \u0434\u0430\u043a\u0438\u043a\u0430",mm:"%d \u0434\u0430\u043a\u0438\u043a\u0430",h:"\u0431\u0438\u0440 \u0441\u043e\u0430\u0442",hh:"%d \u0441\u043e\u0430\u0442",d:"\u0431\u0438\u0440 \u043a\u0443\u043d",dd:"%d \u043a\u0443\u043d",M:"\u0431\u0438\u0440 \u043e\u0439",MM:"%d \u043e\u0439",y:"\u0431\u0438\u0440 \u0439\u0438\u043b",yy:"%d \u0439\u0438\u043b"},week:{dow:1,doy:7}})}(i(16738))},35386:function(v,b,i){!function(r){"use strict";r.defineLocale("vi",{months:"th\xe1ng 1_th\xe1ng 2_th\xe1ng 3_th\xe1ng 4_th\xe1ng 5_th\xe1ng 6_th\xe1ng 7_th\xe1ng 8_th\xe1ng 9_th\xe1ng 10_th\xe1ng 11_th\xe1ng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"ch\u1ee7 nh\u1eadt_th\u1ee9 hai_th\u1ee9 ba_th\u1ee9 t\u01b0_th\u1ee9 n\u0103m_th\u1ee9 s\xe1u_th\u1ee9 b\u1ea3y".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(f){return/^ch$/i.test(f)},meridiem:function(f,u,e){return f<12?e?"sa":"SA":e?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [n\u0103m] YYYY",LLL:"D MMMM [n\u0103m] YYYY HH:mm",LLLL:"dddd, D MMMM [n\u0103m] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[H\xf4m nay l\xfac] LT",nextDay:"[Ng\xe0y mai l\xfac] LT",nextWeek:"dddd [tu\u1ea7n t\u1edbi l\xfac] LT",lastDay:"[H\xf4m qua l\xfac] LT",lastWeek:"dddd [tu\u1ea7n tr\u01b0\u1edbc l\xfac] LT",sameElse:"L"},relativeTime:{future:"%s t\u1edbi",past:"%s tr\u01b0\u1edbc",s:"v\xe0i gi\xe2y",ss:"%d gi\xe2y",m:"m\u1ed9t ph\xfat",mm:"%d ph\xfat",h:"m\u1ed9t gi\u1edd",hh:"%d gi\u1edd",d:"m\u1ed9t ng\xe0y",dd:"%d ng\xe0y",w:"m\u1ed9t tu\u1ea7n",ww:"%d tu\u1ea7n",M:"m\u1ed9t th\xe1ng",MM:"%d th\xe1ng",y:"m\u1ed9t n\u0103m",yy:"%d n\u0103m"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(f){return f},week:{dow:1,doy:4}})}(i(16738))},23156:function(v,b,i){!function(r){"use strict";r.defineLocale("x-pseudo",{months:"J~\xe1\xf1\xfa\xe1~r\xfd_F~\xe9br\xfa~\xe1r\xfd_~M\xe1rc~h_\xc1p~r\xedl_~M\xe1\xfd_~J\xfa\xf1\xe9~_J\xfal~\xfd_\xc1\xfa~g\xfast~_S\xe9p~t\xe9mb~\xe9r_\xd3~ct\xf3b~\xe9r_\xd1~\xf3v\xe9m~b\xe9r_~D\xe9c\xe9~mb\xe9r".split("_"),monthsShort:"J~\xe1\xf1_~F\xe9b_~M\xe1r_~\xc1pr_~M\xe1\xfd_~J\xfa\xf1_~J\xfal_~\xc1\xfag_~S\xe9p_~\xd3ct_~\xd1\xf3v_~D\xe9c".split("_"),monthsParseExact:!0,weekdays:"S~\xfa\xf1d\xe1~\xfd_M\xf3~\xf1d\xe1\xfd~_T\xfa\xe9~sd\xe1\xfd~_W\xe9d~\xf1\xe9sd~\xe1\xfd_T~h\xfars~d\xe1\xfd_~Fr\xedd~\xe1\xfd_S~\xe1t\xfar~d\xe1\xfd".split("_"),weekdaysShort:"S~\xfa\xf1_~M\xf3\xf1_~T\xfa\xe9_~W\xe9d_~Th\xfa_~Fr\xed_~S\xe1t".split("_"),weekdaysMin:"S~\xfa_M\xf3~_T\xfa_~W\xe9_T~h_Fr~_S\xe1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~\xf3d\xe1~\xfd \xe1t] LT",nextDay:"[T~\xf3m\xf3~rr\xf3~w \xe1t] LT",nextWeek:"dddd [\xe1t] LT",lastDay:"[\xdd~\xe9st~\xe9rd\xe1~\xfd \xe1t] LT",lastWeek:"[L~\xe1st] dddd [\xe1t] LT",sameElse:"L"},relativeTime:{future:"\xed~\xf1 %s",past:"%s \xe1~g\xf3",s:"\xe1 ~f\xe9w ~s\xe9c\xf3~\xf1ds",ss:"%d s~\xe9c\xf3\xf1~ds",m:"\xe1 ~m\xed\xf1~\xfat\xe9",mm:"%d m~\xed\xf1\xfa~t\xe9s",h:"\xe1~\xf1 h\xf3~\xfar",hh:"%d h~\xf3\xfars",d:"\xe1 ~d\xe1\xfd",dd:"%d d~\xe1\xfds",M:"\xe1 ~m\xf3\xf1~th",MM:"%d m~\xf3\xf1t~hs",y:"\xe1 ~\xfd\xe9\xe1r",yy:"%d \xfd~\xe9\xe1rs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(f){var u=f%10;return f+(1==~~(f%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")},week:{dow:1,doy:4}})}(i(16738))},68028:function(v,b,i){!function(r){"use strict";r.defineLocale("yo",{months:"S\u1eb9\u0301r\u1eb9\u0301_E\u0300re\u0300le\u0300_\u1eb8r\u1eb9\u0300na\u0300_I\u0300gbe\u0301_E\u0300bibi_O\u0300ku\u0300du_Ag\u1eb9mo_O\u0300gu\u0301n_Owewe_\u1ecc\u0300wa\u0300ra\u0300_Be\u0301lu\u0301_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),monthsShort:"S\u1eb9\u0301r_E\u0300rl_\u1eb8rn_I\u0300gb_E\u0300bi_O\u0300ku\u0300_Ag\u1eb9_O\u0300gu\u0301_Owe_\u1ecc\u0300wa\u0300_Be\u0301l_\u1ecc\u0300p\u1eb9\u0300\u0300".split("_"),weekdays:"A\u0300i\u0300ku\u0301_Aje\u0301_I\u0300s\u1eb9\u0301gun_\u1eccj\u1ecd\u0301ru\u0301_\u1eccj\u1ecd\u0301b\u1ecd_\u1eb8ti\u0300_A\u0300ba\u0301m\u1eb9\u0301ta".split("_"),weekdaysShort:"A\u0300i\u0300k_Aje\u0301_I\u0300s\u1eb9\u0301_\u1eccjr_\u1eccjb_\u1eb8ti\u0300_A\u0300ba\u0301".split("_"),weekdaysMin:"A\u0300i\u0300_Aj_I\u0300s_\u1eccr_\u1eccb_\u1eb8t_A\u0300b".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[O\u0300ni\u0300 ni] LT",nextDay:"[\u1ecc\u0300la ni] LT",nextWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301n'b\u1ecd] [ni] LT",lastDay:"[A\u0300na ni] LT",lastWeek:"dddd [\u1eccs\u1eb9\u0300 to\u0301l\u1ecd\u0301] [ni] LT",sameElse:"L"},relativeTime:{future:"ni\u0301 %s",past:"%s k\u1ecdja\u0301",s:"i\u0300s\u1eb9ju\u0301 aaya\u0301 die",ss:"aaya\u0301 %d",m:"i\u0300s\u1eb9ju\u0301 kan",mm:"i\u0300s\u1eb9ju\u0301 %d",h:"wa\u0301kati kan",hh:"wa\u0301kati %d",d:"\u1ecdj\u1ecd\u0301 kan",dd:"\u1ecdj\u1ecd\u0301 %d",M:"osu\u0300 kan",MM:"osu\u0300 %d",y:"\u1ecddu\u0301n kan",yy:"\u1ecddu\u0301n %d"},dayOfMonthOrdinalParse:/\u1ecdj\u1ecd\u0301\s\d{1,2}/,ordinal:"\u1ecdj\u1ecd\u0301 %d",week:{dow:1,doy:4}})}(i(16738))},9330:function(v,b,i){!function(r){"use strict";r.defineLocale("zh-cn",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u5468\u65e5_\u5468\u4e00_\u5468\u4e8c_\u5468\u4e09_\u5468\u56db_\u5468\u4e94_\u5468\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5Ah\u70b9mm\u5206",LLLL:"YYYY\u5e74M\u6708D\u65e5ddddAh\u70b9mm\u5206",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(f,u){return 12===f&&(f=0),"\u51cc\u6668"===u||"\u65e9\u4e0a"===u||"\u4e0a\u5348"===u?f:"\u4e0b\u5348"===u||"\u665a\u4e0a"===u?f+12:f>=11?f:f+12},meridiem:function(f,u,e){var p=100*f+u;return p<600?"\u51cc\u6668":p<900?"\u65e9\u4e0a":p<1130?"\u4e0a\u5348":p<1230?"\u4e2d\u5348":p<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:function(f){return f.week()!==this.week()?"[\u4e0b]dddLT":"[\u672c]dddLT"},lastDay:"[\u6628\u5929]LT",lastWeek:function(f){return this.week()!==f.week()?"[\u4e0a]dddLT":"[\u672c]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u5468)/,ordinal:function(f,u){switch(u){case"d":case"D":case"DDD":return f+"\u65e5";case"M":return f+"\u6708";case"w":case"W":return f+"\u5468";default:return f}},relativeTime:{future:"%s\u540e",past:"%s\u524d",s:"\u51e0\u79d2",ss:"%d \u79d2",m:"1 \u5206\u949f",mm:"%d \u5206\u949f",h:"1 \u5c0f\u65f6",hh:"%d \u5c0f\u65f6",d:"1 \u5929",dd:"%d \u5929",w:"1 \u5468",ww:"%d \u5468",M:"1 \u4e2a\u6708",MM:"%d \u4e2a\u6708",y:"1 \u5e74",yy:"%d \u5e74"},week:{dow:1,doy:4}})}(i(16738))},89380:function(v,b,i){!function(r){"use strict";r.defineLocale("zh-hk",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(f,u){return 12===f&&(f=0),"\u51cc\u6668"===u||"\u65e9\u4e0a"===u||"\u4e0a\u5348"===u?f:"\u4e2d\u5348"===u?f>=11?f:f+12:"\u4e0b\u5348"===u||"\u665a\u4e0a"===u?f+12:void 0},meridiem:function(f,u,e){var p=100*f+u;return p<600?"\u51cc\u6668":p<900?"\u65e9\u4e0a":p<1200?"\u4e0a\u5348":1200===p?"\u4e2d\u5348":p<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929]LT",nextDay:"[\u660e\u5929]LT",nextWeek:"[\u4e0b]ddddLT",lastDay:"[\u6628\u5929]LT",lastWeek:"[\u4e0a]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(f,u){switch(u){case"d":case"D":case"DDD":return f+"\u65e5";case"M":return f+"\u6708";case"w":case"W":return f+"\u9031";default:return f}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(i(16738))},60874:function(v,b,i){!function(r){"use strict";r.defineLocale("zh-mo",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"D/M/YYYY",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(f,u){return 12===f&&(f=0),"\u51cc\u6668"===u||"\u65e9\u4e0a"===u||"\u4e0a\u5348"===u?f:"\u4e2d\u5348"===u?f>=11?f:f+12:"\u4e0b\u5348"===u||"\u665a\u4e0a"===u?f+12:void 0},meridiem:function(f,u,e){var p=100*f+u;return p<600?"\u51cc\u6668":p<900?"\u65e9\u4e0a":p<1130?"\u4e0a\u5348":p<1230?"\u4e2d\u5348":p<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(f,u){switch(u){case"d":case"D":case"DDD":return f+"\u65e5";case"M":return f+"\u6708";case"w":case"W":return f+"\u9031";default:return f}},relativeTime:{future:"%s\u5167",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(i(16738))},96508:function(v,b,i){!function(r){"use strict";r.defineLocale("zh-tw",{months:"\u4e00\u6708_\u4e8c\u6708_\u4e09\u6708_\u56db\u6708_\u4e94\u6708_\u516d\u6708_\u4e03\u6708_\u516b\u6708_\u4e5d\u6708_\u5341\u6708_\u5341\u4e00\u6708_\u5341\u4e8c\u6708".split("_"),monthsShort:"1\u6708_2\u6708_3\u6708_4\u6708_5\u6708_6\u6708_7\u6708_8\u6708_9\u6708_10\u6708_11\u6708_12\u6708".split("_"),weekdays:"\u661f\u671f\u65e5_\u661f\u671f\u4e00_\u661f\u671f\u4e8c_\u661f\u671f\u4e09_\u661f\u671f\u56db_\u661f\u671f\u4e94_\u661f\u671f\u516d".split("_"),weekdaysShort:"\u9031\u65e5_\u9031\u4e00_\u9031\u4e8c_\u9031\u4e09_\u9031\u56db_\u9031\u4e94_\u9031\u516d".split("_"),weekdaysMin:"\u65e5_\u4e00_\u4e8c_\u4e09_\u56db_\u4e94_\u516d".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY\u5e74M\u6708D\u65e5",LLL:"YYYY\u5e74M\u6708D\u65e5 HH:mm",LLLL:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm",l:"YYYY/M/D",ll:"YYYY\u5e74M\u6708D\u65e5",lll:"YYYY\u5e74M\u6708D\u65e5 HH:mm",llll:"YYYY\u5e74M\u6708D\u65e5dddd HH:mm"},meridiemParse:/\u51cc\u6668|\u65e9\u4e0a|\u4e0a\u5348|\u4e2d\u5348|\u4e0b\u5348|\u665a\u4e0a/,meridiemHour:function(f,u){return 12===f&&(f=0),"\u51cc\u6668"===u||"\u65e9\u4e0a"===u||"\u4e0a\u5348"===u?f:"\u4e2d\u5348"===u?f>=11?f:f+12:"\u4e0b\u5348"===u||"\u665a\u4e0a"===u?f+12:void 0},meridiem:function(f,u,e){var p=100*f+u;return p<600?"\u51cc\u6668":p<900?"\u65e9\u4e0a":p<1130?"\u4e0a\u5348":p<1230?"\u4e2d\u5348":p<1800?"\u4e0b\u5348":"\u665a\u4e0a"},calendar:{sameDay:"[\u4eca\u5929] LT",nextDay:"[\u660e\u5929] LT",nextWeek:"[\u4e0b]dddd LT",lastDay:"[\u6628\u5929] LT",lastWeek:"[\u4e0a]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(\u65e5|\u6708|\u9031)/,ordinal:function(f,u){switch(u){case"d":case"D":case"DDD":return f+"\u65e5";case"M":return f+"\u6708";case"w":case"W":return f+"\u9031";default:return f}},relativeTime:{future:"%s\u5f8c",past:"%s\u524d",s:"\u5e7e\u79d2",ss:"%d \u79d2",m:"1 \u5206\u9418",mm:"%d \u5206\u9418",h:"1 \u5c0f\u6642",hh:"%d \u5c0f\u6642",d:"1 \u5929",dd:"%d \u5929",M:"1 \u500b\u6708",MM:"%d \u500b\u6708",y:"1 \u5e74",yy:"%d \u5e74"}})}(i(16738))},16738:function(v,b,i){(v=i.nmd(v)).exports=function(){"use strict";var r,ue;function a(){return r.apply(null,arguments)}function u(K){return K instanceof Array||"[object Array]"===Object.prototype.toString.call(K)}function e(K){return null!=K&&"[object Object]"===Object.prototype.toString.call(K)}function p(K,be){return Object.prototype.hasOwnProperty.call(K,be)}function g(K){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(K).length;var be;for(be in K)if(p(K,be))return!1;return!0}function S(K){return void 0===K}function M(K){return"number"==typeof K||"[object Number]"===Object.prototype.toString.call(K)}function w(K){return K instanceof Date||"[object Date]"===Object.prototype.toString.call(K)}function x(K,be){var wt,lt=[],ln=K.length;for(wt=0;wt<ln;++wt)lt.push(be(K[wt],wt));return lt}function B(K,be){for(var lt in be)p(be,lt)&&(K[lt]=be[lt]);return p(be,"toString")&&(K.toString=be.toString),p(be,"valueOf")&&(K.valueOf=be.valueOf),K}function W(K,be,lt,wt){return iu(K,be,lt,wt,!0).utc()}function q(K){return null==K._pf&&(K._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),K._pf}function re(K){if(null==K._isValid){var be=q(K),lt=ue.call(be.parsedDateParts,function(ln){return null!=ln}),wt=!isNaN(K._d.getTime())&&be.overflow<0&&!be.empty&&!be.invalidEra&&!be.invalidMonth&&!be.invalidWeekday&&!be.weekdayMismatch&&!be.nullInput&&!be.invalidFormat&&!be.userInvalidated&&(!be.meridiem||be.meridiem&&lt);if(K._strict&&(wt=wt&&0===be.charsLeftOver&&0===be.unusedTokens.length&&void 0===be.bigHour),null!=Object.isFrozen&&Object.isFrozen(K))return wt;K._isValid=wt}return K._isValid}function H(K){var be=W(NaN);return null!=K?B(q(be),K):q(be).userInvalidated=!0,be}ue=Array.prototype.some?Array.prototype.some:function(K){var wt,be=Object(this),lt=be.length>>>0;for(wt=0;wt<lt;wt++)if(wt in be&&K.call(this,be[wt],wt,be))return!0;return!1};var se=a.momentProperties=[],ae=!1;function ie(K,be){var lt,wt,ln,Dr=se.length;if(S(be._isAMomentObject)||(K._isAMomentObject=be._isAMomentObject),S(be._i)||(K._i=be._i),S(be._f)||(K._f=be._f),S(be._l)||(K._l=be._l),S(be._strict)||(K._strict=be._strict),S(be._tzm)||(K._tzm=be._tzm),S(be._isUTC)||(K._isUTC=be._isUTC),S(be._offset)||(K._offset=be._offset),S(be._pf)||(K._pf=q(be)),S(be._locale)||(K._locale=be._locale),Dr>0)for(lt=0;lt<Dr;lt++)S(ln=be[wt=se[lt]])||(K[wt]=ln);return K}function fe(K){ie(this,K),this._d=new Date(null!=K._d?K._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===ae&&(ae=!0,a.updateOffset(this),ae=!1)}function he(K){return K instanceof fe||null!=K&&null!=K._isAMomentObject}function Ce(K){!1===a.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+K)}function ce(K,be){var lt=!0;return B(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,K),lt){var ln,Dr,Ai,wt=[],gs=arguments.length;for(Dr=0;Dr<gs;Dr++){if(ln="","object"==typeof arguments[Dr]){for(Ai in ln+="\n["+Dr+"] ",arguments[0])p(arguments[0],Ai)&&(ln+=Ai+": "+arguments[0][Ai]+", ");ln=ln.slice(0,-2)}else ln=arguments[Dr];wt.push(ln)}Ce(K+"\nArguments: "+Array.prototype.slice.call(wt).join("")+"\n"+(new Error).stack),lt=!1}return be.apply(this,arguments)},be)}var Oe,Be={};function Ve(K,be){null!=a.deprecationHandler&&a.deprecationHandler(K,be),Be[K]||(Ce(be),Be[K]=!0)}function Xe(K){return"undefined"!=typeof Function&&K instanceof Function||"[object Function]"===Object.prototype.toString.call(K)}function Pe(K,be){var wt,lt=B({},K);for(wt in be)p(be,wt)&&(e(K[wt])&&e(be[wt])?(lt[wt]={},B(lt[wt],K[wt]),B(lt[wt],be[wt])):null!=be[wt]?lt[wt]=be[wt]:delete lt[wt]);for(wt in K)p(K,wt)&&!p(be,wt)&&e(K[wt])&&(lt[wt]=B({},lt[wt]));return lt}function Ge(K){null!=K&&this.set(K)}a.suppressDeprecationWarnings=!1,a.deprecationHandler=null,Oe=Object.keys?Object.keys:function(K){var be,lt=[];for(be in K)p(K,be)&&lt.push(be);return lt};function Qt(K,be,lt){var wt=""+Math.abs(K);return(K>=0?lt?"+":"":"-")+Math.pow(10,Math.max(0,be-wt.length)).toString().substr(1)+wt}var Nt=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Yt=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,dn={},rn={};function vt(K,be,lt,wt){var ln=wt;"string"==typeof wt&&(ln=function(){return this[wt]()}),K&&(rn[K]=ln),be&&(rn[be[0]]=function(){return Qt(ln.apply(this,arguments),be[1],be[2])}),lt&&(rn[lt]=function(){return this.localeData().ordinal(ln.apply(this,arguments),K)})}function xt(K){return K.match(/\[[\s\S]/)?K.replace(/^\[|\]$/g,""):K.replace(/\\/g,"")}function Gt(K,be){return K.isValid()?(be=Fn(be,K.localeData()),dn[be]=dn[be]||function Ct(K){var lt,wt,be=K.match(Nt);for(lt=0,wt=be.length;lt<wt;lt++)be[lt]=rn[be[lt]]?rn[be[lt]]:xt(be[lt]);return function(ln){var Ai,Dr="";for(Ai=0;Ai<wt;Ai++)Dr+=Xe(be[Ai])?be[Ai].call(ln,K):be[Ai];return Dr}}(be),dn[be](K)):K.localeData().invalidDate()}function Fn(K,be){var lt=5;function wt(ln){return be.longDateFormat(ln)||ln}for(Yt.lastIndex=0;lt>=0&&Yt.test(K);)K=K.replace(Yt,wt),Yt.lastIndex=0,lt-=1;return K}var bi={};function fi(K,be){var lt=K.toLowerCase();bi[lt]=bi[lt+"s"]=bi[be]=K}function no(K){return"string"==typeof K?bi[K]||bi[K.toLowerCase()]:void 0}function xo(K){var lt,wt,be={};for(wt in K)p(K,wt)&&(lt=no(wt))&&(be[lt]=K[wt]);return be}var Er={};function an(K,be){Er[K]=be}function Zn(K){return K%4==0&&K%100!=0||K%400==0}function Xn(K){return K<0?Math.ceil(K)||0:Math.floor(K)}function zn(K){var be=+K,lt=0;return 0!==be&&isFinite(be)&&(lt=Xn(be)),lt}function ri(K,be){return function(lt){return null!=lt?(ui(this,K,lt),a.updateOffset(this,be),this):Gi(this,K)}}function Gi(K,be){return K.isValid()?K._d["get"+(K._isUTC?"UTC":"")+be]():NaN}function ui(K,be,lt){K.isValid()&&!isNaN(lt)&&("FullYear"===be&&Zn(K.year())&&1===K.month()&&29===K.date()?(lt=zn(lt),K._d["set"+(K._isUTC?"UTC":"")+be](lt,K.month(),Eo(lt,K.month()))):K._d["set"+(K._isUTC?"UTC":"")+be](lt))}var _t,mn=/\d/,Rn=/\d\d/,Wn=/\d{3}/,et=/\d{4}/,Le=/[+-]?\d{6}/,Re=/\d\d?/,Se=/\d\d\d\d?/,dt=/\d\d\d\d\d\d?/,st=/\d{1,3}/,nn=/\d{1,4}/,Fe=/[+-]?\d{1,6}/,Lr=/\d+/,ti=/[+-]?\d+/,Ut=/Z|[+-]\d\d:?\d\d/gi,Dn=/Z|[+-]\d\d(?::?\d\d)?/gi,$t=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function yt(K,be,lt){_t[K]=Xe(be)?be:function(wt,ln){return wt&&lt?lt:be}}function Vt(K,be){return p(_t,K)?_t[K](be._strict,be._locale):new RegExp(function yn(K){return Cr(K.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(be,lt,wt,ln,Dr){return lt||wt||ln||Dr}))}(K))}function Cr(K){return K.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}_t={};var xi={};function yi(K,be){var lt,ln,wt=be;for("string"==typeof K&&(K=[K]),M(be)&&(wt=function(Dr,Ai){Ai[be]=zn(Dr)}),ln=K.length,lt=0;lt<ln;lt++)xi[K[lt]]=wt}function Yo(K,be){yi(K,function(lt,wt,ln,Dr){ln._w=ln._w||{},be(lt,ln._w,ln,Dr)})}function Qo(K,be,lt){null!=be&&p(xi,K)&&xi[K](be,lt._a,lt,K)}var $i;function Eo(K,be){if(isNaN(K)||isNaN(be))return NaN;var lt=function ao(K,be){return(K%be+be)%be}(be,12);return K+=(be-lt)/12,1===lt?Zn(K)?29:28:31-lt%7%2}$i=Array.prototype.indexOf?Array.prototype.indexOf:function(K){var be;for(be=0;be<this.length;++be)if(this[be]===K)return be;return-1},vt("M",["MM",2],"Mo",function(){return this.month()+1}),vt("MMM",0,0,function(K){return this.localeData().monthsShort(this,K)}),vt("MMMM",0,0,function(K){return this.localeData().months(this,K)}),fi("month","M"),an("month",8),yt("M",Re),yt("MM",Re,Rn),yt("MMM",function(K,be){return be.monthsShortRegex(K)}),yt("MMMM",function(K,be){return be.monthsRegex(K)}),yi(["M","MM"],function(K,be){be[1]=zn(K)-1}),yi(["MMM","MMMM"],function(K,be,lt,wt){var ln=lt._locale.monthsParse(K,wt,lt._strict);null!=ln?be[1]=ln:q(lt).invalidMonth=K});var mo="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Go="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),ua=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,or=$t,Mr=$t;function pi(K,be,lt){var wt,ln,Dr,Ai=K.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],wt=0;wt<12;++wt)Dr=W([2e3,wt]),this._shortMonthsParse[wt]=this.monthsShort(Dr,"").toLocaleLowerCase(),this._longMonthsParse[wt]=this.months(Dr,"").toLocaleLowerCase();return lt?"MMM"===be?-1!==(ln=$i.call(this._shortMonthsParse,Ai))?ln:null:-1!==(ln=$i.call(this._longMonthsParse,Ai))?ln:null:"MMM"===be?-1!==(ln=$i.call(this._shortMonthsParse,Ai))||-1!==(ln=$i.call(this._longMonthsParse,Ai))?ln:null:-1!==(ln=$i.call(this._longMonthsParse,Ai))||-1!==(ln=$i.call(this._shortMonthsParse,Ai))?ln:null}function $n(K,be){var lt;if(!K.isValid())return K;if("string"==typeof be)if(/^\d+$/.test(be))be=zn(be);else if(!M(be=K.localeData().monthsParse(be)))return K;return lt=Math.min(K.date(),Eo(K.year(),be)),K._d["set"+(K._isUTC?"UTC":"")+"Month"](be,lt),K}function Jr(K){return null!=K?($n(this,K),a.updateOffset(this,!0),this):Gi(this,"Month")}function Ys(){function K(Ai,gs){return gs.length-Ai.length}var ln,Dr,be=[],lt=[],wt=[];for(ln=0;ln<12;ln++)Dr=W([2e3,ln]),be.push(this.monthsShort(Dr,"")),lt.push(this.months(Dr,"")),wt.push(this.months(Dr,"")),wt.push(this.monthsShort(Dr,""));for(be.sort(K),lt.sort(K),wt.sort(K),ln=0;ln<12;ln++)be[ln]=Cr(be[ln]),lt[ln]=Cr(lt[ln]);for(ln=0;ln<24;ln++)wt[ln]=Cr(wt[ln]);this._monthsRegex=new RegExp("^("+wt.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+lt.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+be.join("|")+")","i")}function ds(K){return Zn(K)?366:365}vt("Y",0,0,function(){var K=this.year();return K<=9999?Qt(K,4):"+"+K}),vt(0,["YY",2],0,function(){return this.year()%100}),vt(0,["YYYY",4],0,"year"),vt(0,["YYYYY",5],0,"year"),vt(0,["YYYYYY",6,!0],0,"year"),fi("year","y"),an("year",1),yt("Y",ti),yt("YY",Re,Rn),yt("YYYY",nn,et),yt("YYYYY",Fe,Le),yt("YYYYYY",Fe,Le),yi(["YYYYY","YYYYYY"],0),yi("YYYY",function(K,be){be[0]=2===K.length?a.parseTwoDigitYear(K):zn(K)}),yi("YY",function(K,be){be[0]=a.parseTwoDigitYear(K)}),yi("Y",function(K,be){be[0]=parseInt(K,10)}),a.parseTwoDigitYear=function(K){return zn(K)+(zn(K)>68?1900:2e3)};var es=ri("FullYear",!0);function Ea(K,be,lt,wt,ln,Dr,Ai){var gs;return K<100&&K>=0?(gs=new Date(K+400,be,lt,wt,ln,Dr,Ai),isFinite(gs.getFullYear())&&gs.setFullYear(K)):gs=new Date(K,be,lt,wt,ln,Dr,Ai),gs}function fa(K){var be,lt;return K<100&&K>=0?((lt=Array.prototype.slice.call(arguments))[0]=K+400,be=new Date(Date.UTC.apply(null,lt)),isFinite(be.getUTCFullYear())&&be.setUTCFullYear(K)):be=new Date(Date.UTC.apply(null,arguments)),be}function sa(K,be,lt){var wt=7+be-lt;return-(7+fa(K,0,wt).getUTCDay()-be)%7+wt-1}function Ra(K,be,lt,wt,ln){var Da,ca,gs=1+7*(be-1)+(7+lt-wt)%7+sa(K,wt,ln);return gs<=0?ca=ds(Da=K-1)+gs:gs>ds(K)?(Da=K+1,ca=gs-ds(K)):(Da=K,ca=gs),{year:Da,dayOfYear:ca}}function pl(K,be,lt){var Dr,Ai,wt=sa(K.year(),be,lt),ln=Math.floor((K.dayOfYear()-wt-1)/7)+1;return ln<1?Dr=ln+Co(Ai=K.year()-1,be,lt):ln>Co(K.year(),be,lt)?(Dr=ln-Co(K.year(),be,lt),Ai=K.year()+1):(Ai=K.year(),Dr=ln),{week:Dr,year:Ai}}function Co(K,be,lt){var wt=sa(K,be,lt),ln=sa(K+1,be,lt);return(ds(K)-wt+ln)/7}vt("w",["ww",2],"wo","week"),vt("W",["WW",2],"Wo","isoWeek"),fi("week","w"),fi("isoWeek","W"),an("week",5),an("isoWeek",5),yt("w",Re),yt("ww",Re,Rn),yt("W",Re),yt("WW",Re,Rn),Yo(["w","ww","W","WW"],function(K,be,lt,wt){be[wt.substr(0,1)]=zn(K)});function To(K,be){return K.slice(be,7).concat(K.slice(0,be))}vt("d",0,"do","day"),vt("dd",0,0,function(K){return this.localeData().weekdaysMin(this,K)}),vt("ddd",0,0,function(K){return this.localeData().weekdaysShort(this,K)}),vt("dddd",0,0,function(K){return this.localeData().weekdays(this,K)}),vt("e",0,0,"weekday"),vt("E",0,0,"isoWeekday"),fi("day","d"),fi("weekday","e"),fi("isoWeekday","E"),an("day",11),an("weekday",11),an("isoWeekday",11),yt("d",Re),yt("e",Re),yt("E",Re),yt("dd",function(K,be){return be.weekdaysMinRegex(K)}),yt("ddd",function(K,be){return be.weekdaysShortRegex(K)}),yt("dddd",function(K,be){return be.weekdaysRegex(K)}),Yo(["dd","ddd","dddd"],function(K,be,lt,wt){var ln=lt._locale.weekdaysParse(K,wt,lt._strict);null!=ln?be.d=ln:q(lt).invalidWeekday=K}),Yo(["d","e","E"],function(K,be,lt,wt){be[wt]=zn(K)});var Ns="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),hs="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Oo="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),kr=$t,Ki=$t,ut=$t;function jt(K,be,lt){var wt,ln,Dr,Ai=K.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],wt=0;wt<7;++wt)Dr=W([2e3,1]).day(wt),this._minWeekdaysParse[wt]=this.weekdaysMin(Dr,"").toLocaleLowerCase(),this._shortWeekdaysParse[wt]=this.weekdaysShort(Dr,"").toLocaleLowerCase(),this._weekdaysParse[wt]=this.weekdays(Dr,"").toLocaleLowerCase();return lt?"dddd"===be?-1!==(ln=$i.call(this._weekdaysParse,Ai))?ln:null:"ddd"===be?-1!==(ln=$i.call(this._shortWeekdaysParse,Ai))?ln:null:-1!==(ln=$i.call(this._minWeekdaysParse,Ai))?ln:null:"dddd"===be?-1!==(ln=$i.call(this._weekdaysParse,Ai))||-1!==(ln=$i.call(this._shortWeekdaysParse,Ai))||-1!==(ln=$i.call(this._minWeekdaysParse,Ai))?ln:null:"ddd"===be?-1!==(ln=$i.call(this._shortWeekdaysParse,Ai))||-1!==(ln=$i.call(this._weekdaysParse,Ai))||-1!==(ln=$i.call(this._minWeekdaysParse,Ai))?ln:null:-1!==(ln=$i.call(this._minWeekdaysParse,Ai))||-1!==(ln=$i.call(this._weekdaysParse,Ai))||-1!==(ln=$i.call(this._shortWeekdaysParse,Ai))?ln:null}function Ks(){function K(Dl,Yl){return Yl.length-Dl.length}var Dr,Ai,gs,Da,ca,be=[],lt=[],wt=[],ln=[];for(Dr=0;Dr<7;Dr++)Ai=W([2e3,1]).day(Dr),gs=Cr(this.weekdaysMin(Ai,"")),Da=Cr(this.weekdaysShort(Ai,"")),ca=Cr(this.weekdays(Ai,"")),be.push(gs),lt.push(Da),wt.push(ca),ln.push(gs),ln.push(Da),ln.push(ca);be.sort(K),lt.sort(K),wt.sort(K),ln.sort(K),this._weekdaysRegex=new RegExp("^("+ln.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+wt.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+lt.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+be.join("|")+")","i")}function hl(){return this.hours()%12||12}function Jl(K,be){vt(K,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),be)})}function Qu(K,be){return be._meridiemParse}vt("H",["HH",2],0,"hour"),vt("h",["hh",2],0,hl),vt("k",["kk",2],0,function sl(){return this.hours()||24}),vt("hmm",0,0,function(){return""+hl.apply(this)+Qt(this.minutes(),2)}),vt("hmmss",0,0,function(){return""+hl.apply(this)+Qt(this.minutes(),2)+Qt(this.seconds(),2)}),vt("Hmm",0,0,function(){return""+this.hours()+Qt(this.minutes(),2)}),vt("Hmmss",0,0,function(){return""+this.hours()+Qt(this.minutes(),2)+Qt(this.seconds(),2)}),Jl("a",!0),Jl("A",!1),fi("hour","h"),an("hour",13),yt("a",Qu),yt("A",Qu),yt("H",Re),yt("h",Re),yt("k",Re),yt("HH",Re,Rn),yt("hh",Re,Rn),yt("kk",Re,Rn),yt("hmm",Se),yt("hmmss",dt),yt("Hmm",Se),yt("Hmmss",dt),yi(["H","HH"],3),yi(["k","kk"],function(K,be,lt){var wt=zn(K);be[3]=24===wt?0:wt}),yi(["a","A"],function(K,be,lt){lt._isPm=lt._locale.isPM(K),lt._meridiem=K}),yi(["h","hh"],function(K,be,lt){be[3]=zn(K),q(lt).bigHour=!0}),yi("hmm",function(K,be,lt){var wt=K.length-2;be[3]=zn(K.substr(0,wt)),be[4]=zn(K.substr(wt)),q(lt).bigHour=!0}),yi("hmmss",function(K,be,lt){var wt=K.length-4,ln=K.length-2;be[3]=zn(K.substr(0,wt)),be[4]=zn(K.substr(wt,2)),be[5]=zn(K.substr(ln)),q(lt).bigHour=!0}),yi("Hmm",function(K,be,lt){var wt=K.length-2;be[3]=zn(K.substr(0,wt)),be[4]=zn(K.substr(wt))}),yi("Hmmss",function(K,be,lt){var wt=K.length-4,ln=K.length-2;be[3]=zn(K.substr(0,wt)),be[4]=zn(K.substr(wt,2)),be[5]=zn(K.substr(ln))});var mc=ri("Hours",!0);var ru,Xu={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:mo,monthsShort:Go,week:{dow:0,doy:6},weekdays:Ns,weekdaysMin:Oo,weekdaysShort:hs,meridiemParse:/[ap]\.?m?\.?/i},Xa={},Mc={};function Ja(K,be){var lt,wt=Math.min(K.length,be.length);for(lt=0;lt<wt;lt+=1)if(K[lt]!==be[lt])return lt;return wt}function Ol(K){return K&&K.toLowerCase().replace("_","-")}function rt(K){var be=null;if(void 0===Xa[K]&&v&&v.exports&&function Ya(K){return null!=K.match("^[^/\\\\]*$")}(K))try{be=ru._abbr,i(46700)("./"+K),qt(be)}catch(wt){Xa[K]=null}return Xa[K]}function qt(K,be){var lt;return K&&((lt=S(be)?Kn(K):pt(K,be))?ru=lt:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+K+" not found. Did you forget to load it?")),ru._abbr}function pt(K,be){if(null!==be){var lt,wt=Xu;if(be.abbr=K,null!=Xa[K])Ve("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),wt=Xa[K]._config;else if(null!=be.parentLocale)if(null!=Xa[be.parentLocale])wt=Xa[be.parentLocale]._config;else{if(null==(lt=rt(be.parentLocale)))return Mc[be.parentLocale]||(Mc[be.parentLocale]=[]),Mc[be.parentLocale].push({name:K,config:be}),null;wt=lt._config}return Xa[K]=new Ge(Pe(wt,be)),Mc[K]&&Mc[K].forEach(function(ln){pt(ln.name,ln.config)}),qt(K),Xa[K]}return delete Xa[K],null}function Kn(K){var be;if(K&&K._locale&&K._locale._abbr&&(K=K._locale._abbr),!K)return ru;if(!u(K)){if(be=rt(K))return be;K=[K]}return function Bl(K){for(var lt,wt,ln,Dr,be=0;be<K.length;){for(lt=(Dr=Ol(K[be]).split("-")).length,wt=(wt=Ol(K[be+1]))?wt.split("-"):null;lt>0;){if(ln=rt(Dr.slice(0,lt).join("-")))return ln;if(wt&&wt.length>=lt&&Ja(Dr,wt)>=lt-1)break;lt--}be++}return ru}(K)}function wi(K){var be,lt=K._a;return lt&&-2===q(K).overflow&&(be=lt[1]<0||lt[1]>11?1:lt[2]<1||lt[2]>Eo(lt[0],lt[1])?2:lt[3]<0||lt[3]>24||24===lt[3]&&(0!==lt[4]||0!==lt[5]||0!==lt[6])?3:lt[4]<0||lt[4]>59?4:lt[5]<0||lt[5]>59?5:lt[6]<0||lt[6]>999?6:-1,q(K)._overflowDayOfYear&&(be<0||be>2)&&(be=2),q(K)._overflowWeeks&&-1===be&&(be=7),q(K)._overflowWeekday&&-1===be&&(be=8),q(K).overflow=be),K}var as=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Gs=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Os=/Z|[+-]\d\d(?::?\d\d)?/,ws=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Fo=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ka=/^\/?Date\((-?\d+)/i,al=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Bs={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function mt(K){var be,lt,Dr,Ai,gs,Da,wt=K._i,ln=as.exec(wt)||Gs.exec(wt),ca=ws.length,Dl=Fo.length;if(ln){for(q(K).iso=!0,be=0,lt=ca;be<lt;be++)if(ws[be][1].exec(ln[1])){Ai=ws[be][0],Dr=!1!==ws[be][2];break}if(null==Ai)return void(K._isValid=!1);if(ln[3]){for(be=0,lt=Dl;be<lt;be++)if(Fo[be][1].exec(ln[3])){gs=(ln[2]||" ")+Fo[be][0];break}if(null==gs)return void(K._isValid=!1)}if(!Dr&&null!=gs)return void(K._isValid=!1);if(ln[4]){if(!Os.exec(ln[4]))return void(K._isValid=!1);Da="Z"}K._f=Ai+(gs||"")+(Da||""),aa(K)}else K._isValid=!1}function je(K){var be=parseInt(K,10);return be<=49?2e3+be:be<=999?1900+be:be}function ja(K){var lt,be=al.exec(function Xt(K){return K.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}(K._i));if(be){if(lt=function ot(K,be,lt,wt,ln,Dr){var Ai=[je(K),Go.indexOf(be),parseInt(lt,10),parseInt(wt,10),parseInt(ln,10)];return Dr&&Ai.push(parseInt(Dr,10)),Ai}(be[4],be[3],be[2],be[5],be[6],be[7]),!function Si(K,be,lt){return!K||hs.indexOf(K)===new Date(be[0],be[1],be[2]).getDay()||(q(lt).weekdayMismatch=!0,lt._isValid=!1,!1)}(be[1],lt,K))return;K._a=lt,K._tzm=function Jo(K,be,lt){if(K)return Bs[K];if(be)return 0;var wt=parseInt(lt,10),ln=wt%100;return(wt-ln)/100*60+ln}(be[8],be[9],be[10]),K._d=fa.apply(null,K._a),K._d.setUTCMinutes(K._d.getUTCMinutes()-K._tzm),q(K).rfc2822=!0}else K._isValid=!1}function Ku(K,be,lt){return null!=K?K:null!=be?be:lt}function hd(K){var be,lt,ln,Dr,Ai,wt=[];if(!K._d){for(ln=function Nc(K){var be=new Date(a.now());return K._useUTC?[be.getUTCFullYear(),be.getUTCMonth(),be.getUTCDate()]:[be.getFullYear(),be.getMonth(),be.getDate()]}(K),K._w&&null==K._a[2]&&null==K._a[1]&&function Yi(K){var be,lt,wt,ln,Dr,Ai,gs,Da,ca;null!=(be=K._w).GG||null!=be.W||null!=be.E?(Dr=1,Ai=4,lt=Ku(be.GG,K._a[0],pl(ra(),1,4).year),wt=Ku(be.W,1),((ln=Ku(be.E,1))<1||ln>7)&&(Da=!0)):(Dr=K._locale._week.dow,Ai=K._locale._week.doy,ca=pl(ra(),Dr,Ai),lt=Ku(be.gg,K._a[0],ca.year),wt=Ku(be.w,ca.week),null!=be.d?((ln=be.d)<0||ln>6)&&(Da=!0):null!=be.e?(ln=be.e+Dr,(be.e<0||be.e>6)&&(Da=!0)):ln=Dr),wt<1||wt>Co(lt,Dr,Ai)?q(K)._overflowWeeks=!0:null!=Da?q(K)._overflowWeekday=!0:(gs=Ra(lt,wt,ln,Dr,Ai),K._a[0]=gs.year,K._dayOfYear=gs.dayOfYear)}(K),null!=K._dayOfYear&&(Ai=Ku(K._a[0],ln[0]),(K._dayOfYear>ds(Ai)||0===K._dayOfYear)&&(q(K)._overflowDayOfYear=!0),lt=fa(Ai,0,K._dayOfYear),K._a[1]=lt.getUTCMonth(),K._a[2]=lt.getUTCDate()),be=0;be<3&&null==K._a[be];++be)K._a[be]=wt[be]=ln[be];for(;be<7;be++)K._a[be]=wt[be]=null==K._a[be]?2===be?1:0:K._a[be];24===K._a[3]&&0===K._a[4]&&0===K._a[5]&&0===K._a[6]&&(K._nextDay=!0,K._a[3]=0),K._d=(K._useUTC?fa:Ea).apply(null,wt),Dr=K._useUTC?K._d.getUTCDay():K._d.getDay(),null!=K._tzm&&K._d.setUTCMinutes(K._d.getUTCMinutes()-K._tzm),K._nextDay&&(K._a[3]=24),K._w&&void 0!==K._w.d&&K._w.d!==Dr&&(q(K).weekdayMismatch=!0)}}function aa(K){if(K._f!==a.ISO_8601)if(K._f!==a.RFC_2822){K._a=[],q(K).empty=!0;var lt,wt,ln,Dr,Ai,ca,Dl,be=""+K._i,gs=be.length,Da=0;for(Dl=(ln=Fn(K._f,K._locale).match(Nt)||[]).length,lt=0;lt<Dl;lt++)(wt=(be.match(Vt(Dr=ln[lt],K))||[])[0])&&((Ai=be.substr(0,be.indexOf(wt))).length>0&&q(K).unusedInput.push(Ai),be=be.slice(be.indexOf(wt)+wt.length),Da+=wt.length),rn[Dr]?(wt?q(K).empty=!1:q(K).unusedTokens.push(Dr),Qo(Dr,wt,K)):K._strict&&!wt&&q(K).unusedTokens.push(Dr);q(K).charsLeftOver=gs-Da,be.length>0&&q(K).unusedInput.push(be),K._a[3]<=12&&!0===q(K).bigHour&&K._a[3]>0&&(q(K).bigHour=void 0),q(K).parsedDateParts=K._a.slice(0),q(K).meridiem=K._meridiem,K._a[3]=function Fa(K,be,lt){var wt;return null==lt?be:null!=K.meridiemHour?K.meridiemHour(be,lt):(null!=K.isPM&&((wt=K.isPM(lt))&&be<12&&(be+=12),!wt&&12===be&&(be=0)),be)}(K._locale,K._a[3],K._meridiem),null!==(ca=q(K).era)&&(K._a[0]=K._locale.erasConvertYear(ca,K._a[0])),hd(K),wi(K)}else ja(K);else mt(K)}function lu(K){var be=K._i,lt=K._f;return K._locale=K._locale||Kn(K._l),null===be||void 0===lt&&""===be?H({nullInput:!0}):("string"==typeof be&&(K._i=be=K._locale.preparse(be)),he(be)?new fe(wi(be)):(w(be)?K._d=be:u(lt)?function Es(K){var be,lt,wt,ln,Dr,Ai,gs=!1,Da=K._f.length;if(0===Da)return q(K).invalidFormat=!0,void(K._d=new Date(NaN));for(ln=0;ln<Da;ln++)Dr=0,Ai=!1,be=ie({},K),null!=K._useUTC&&(be._useUTC=K._useUTC),be._f=K._f[ln],aa(be),re(be)&&(Ai=!0),Dr+=q(be).charsLeftOver,Dr+=10*q(be).unusedTokens.length,q(be).score=Dr,gs?Dr<wt&&(wt=Dr,lt=be):(null==wt||Dr<wt||Ai)&&(wt=Dr,lt=be,Ai&&(gs=!0));B(K,lt||be)}(K):lt?aa(K):function Eu(K){var be=K._i;S(be)?K._d=new Date(a.now()):w(be)?K._d=new Date(be.valueOf()):"string"==typeof be?function El(K){var be=Ka.exec(K._i);null===be?(mt(K),!1===K._isValid&&(delete K._isValid,ja(K),!1===K._isValid&&(delete K._isValid,K._strict?K._isValid=!1:a.createFromInputFallback(K)))):K._d=new Date(+be[1])}(K):u(be)?(K._a=x(be.slice(0),function(lt){return parseInt(lt,10)}),hd(K)):e(be)?function qu(K){if(!K._d){var be=xo(K._i);K._a=x([be.year,be.month,void 0===be.day?be.date:be.day,be.hour,be.minute,be.second,be.millisecond],function(wt){return wt&&parseInt(wt,10)}),hd(K)}}(K):M(be)?K._d=new Date(be):a.createFromInputFallback(K)}(K),re(K)||(K._d=null),K))}function iu(K,be,lt,wt,ln){var Dr={};return(!0===be||!1===be)&&(wt=be,be=void 0),(!0===lt||!1===lt)&&(wt=lt,lt=void 0),(e(K)&&g(K)||u(K)&&0===K.length)&&(K=void 0),Dr._isAMomentObject=!0,Dr._useUTC=Dr._isUTC=ln,Dr._l=lt,Dr._i=K,Dr._f=be,Dr._strict=wt,function Sl(K){var be=new fe(wi(lu(K)));return be._nextDay&&(be.add(1,"d"),be._nextDay=void 0),be}(Dr)}function ra(K,be,lt,wt){return iu(K,be,lt,wt,!1)}a.createFromInputFallback=ce("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(K){K._d=new Date(K._i+(K._useUTC?" UTC":""))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var bu=ce("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var K=ra.apply(null,arguments);return this.isValid()&&K.isValid()?K<this?this:K:H()}),td=ce("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var K=ra.apply(null,arguments);return this.isValid()&&K.isValid()?K>this?this:K:H()});function ec(K,be){var lt,wt;if(1===be.length&&u(be[0])&&(be=be[0]),!be.length)return ra();for(lt=be[0],wt=1;wt<be.length;++wt)(!be[wt].isValid()||be[wt][K](lt))&&(lt=be[wt]);return lt}var Uu=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Io(K){var be=xo(K),lt=be.year||0,wt=be.quarter||0,ln=be.month||0,Dr=be.week||be.isoWeek||0,Ai=be.day||0,gs=be.hour||0,Da=be.minute||0,ca=be.second||0,Dl=be.millisecond||0;this._isValid=function Yu(K){var be,wt,lt=!1,ln=Uu.length;for(be in K)if(p(K,be)&&(-1===$i.call(Uu,be)||null!=K[be]&&isNaN(K[be])))return!1;for(wt=0;wt<ln;++wt)if(K[Uu[wt]]){if(lt)return!1;parseFloat(K[Uu[wt]])!==zn(K[Uu[wt]])&&(lt=!0)}return!0}(be),this._milliseconds=+Dl+1e3*ca+6e4*Da+1e3*gs*60*60,this._days=+Ai+7*Dr,this._months=+ln+3*wt+12*lt,this._data={},this._locale=Kn(),this._bubble()}function fu(K){return K instanceof Io}function Sr(K){return K<0?-1*Math.round(-1*K):Math.round(K)}function De(K,be){vt(K,0,0,function(){var lt=this.utcOffset(),wt="+";return lt<0&&(lt=-lt,wt="-"),wt+Qt(~~(lt/60),2)+be+Qt(~~lt%60,2)})}De("Z",":"),De("ZZ",""),yt("Z",Dn),yt("ZZ",Dn),yi(["Z","ZZ"],function(K,be,lt){lt._useUTC=!0,lt._tzm=It(Dn,K)});var ct=/([\+\-]|\d\d)/gi;function It(K,be){var ln,Dr,lt=(be||"").match(K);return null===lt?null:0===(Dr=60*(ln=((lt[lt.length-1]||[])+"").match(ct)||["-",0,0])[1]+zn(ln[2]))?0:"+"===ln[0]?Dr:-Dr}function Ht(K,be){var lt,wt;return be._isUTC?(lt=be.clone(),wt=(he(K)||w(K)?K.valueOf():ra(K).valueOf())-lt.valueOf(),lt._d.setTime(lt._d.valueOf()+wt),a.updateOffset(lt,!1),lt):ra(K).local()}function _n(K){return-Math.round(K._d.getTimezoneOffset())}function fo(){return!!this.isValid()&&this._isUTC&&0===this._offset}a.updateOffset=function(){};var $s=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,ls=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function _l(K,be){var ln,Dr,Ai,lt=K,wt=null;return fu(K)?lt={ms:K._milliseconds,d:K._days,M:K._months}:M(K)||!isNaN(+K)?(lt={},be?lt[be]=+K:lt.milliseconds=+K):(wt=$s.exec(K))?(ln="-"===wt[1]?-1:1,lt={y:0,d:zn(wt[2])*ln,h:zn(wt[3])*ln,m:zn(wt[4])*ln,s:zn(wt[5])*ln,ms:zn(Sr(1e3*wt[6]))*ln}):(wt=ls.exec(K))?lt={y:Us(wt[2],ln="-"===wt[1]?-1:1),M:Us(wt[3],ln),w:Us(wt[4],ln),d:Us(wt[5],ln),h:Us(wt[6],ln),m:Us(wt[7],ln),s:Us(wt[8],ln)}:null==lt?lt={}:"object"==typeof lt&&("from"in lt||"to"in lt)&&(Ai=function Ic(K,be){var lt;return K.isValid()&&be.isValid()?(be=Ht(be,K),K.isBefore(be)?lt=zc(K,be):((lt=zc(be,K)).milliseconds=-lt.milliseconds,lt.months=-lt.months),lt):{milliseconds:0,months:0}}(ra(lt.from),ra(lt.to)),(lt={}).ms=Ai.milliseconds,lt.M=Ai.months),Dr=new Io(lt),fu(K)&&p(K,"_locale")&&(Dr._locale=K._locale),fu(K)&&p(K,"_isValid")&&(Dr._isValid=K._isValid),Dr}function Us(K,be){var lt=K&&parseFloat(K.replace(",","."));return(isNaN(lt)?0:lt)*be}function zc(K,be){var lt={};return lt.months=be.month()-K.month()+12*(be.year()-K.year()),K.clone().add(lt.months,"M").isAfter(be)&&--lt.months,lt.milliseconds=+be-+K.clone().add(lt.months,"M"),lt}function Pu(K,be){return function(lt,wt){var Dr;return null!==wt&&!isNaN(+wt)&&(Ve(be,"moment()."+be+"(period, number) is deprecated. Please use moment()."+be+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),Dr=lt,lt=wt,wt=Dr),Su(this,_l(lt,wt),K),this}}function Su(K,be,lt,wt){var ln=be._milliseconds,Dr=Sr(be._days),Ai=Sr(be._months);!K.isValid()||(wt=null==wt||wt,Ai&&$n(K,Gi(K,"Month")+Ai*lt),Dr&&ui(K,"Date",Gi(K,"Date")+Dr*lt),ln&&K._d.setTime(K._d.valueOf()+ln*lt),wt&&a.updateOffset(K,Dr||Ai))}_l.fn=Io.prototype,_l.invalid=function Ld(){return _l(NaN)};var Zd=Pu(1,"add"),_d=Pu(-1,"subtract");function md(K){return"string"==typeof K||K instanceof String}function Hc(K){return he(K)||w(K)||md(K)||M(K)||function kd(K){var be=u(K),lt=!1;return be&&(lt=0===K.filter(function(wt){return!M(wt)&&md(K)}).length),be&&lt}(K)||function La(K){var ln,be=e(K)&&!g(K),lt=!1,wt=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],Ai=wt.length;for(ln=0;ln<Ai;ln+=1)lt=lt||p(K,wt[ln]);return be&&lt}(K)||null==K}function Oc(K){var ln,be=e(K)&&!g(K),lt=!1,wt=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(ln=0;ln<wt.length;ln+=1)lt=lt||p(K,wt[ln]);return be&&lt}function Ze(K,be){if(K.date()<be.date())return-Ze(be,K);var lt=12*(be.year()-K.year())+(be.month()-K.month()),wt=K.clone().add(lt,"months");return-(lt+(be-wt<0?(be-wt)/(wt-K.clone().add(lt-1,"months")):(be-wt)/(K.clone().add(lt+1,"months")-wt)))||0}function Lo(K){var be;return void 0===K?this._locale._abbr:(null!=(be=Kn(K))&&(this._locale=be),this)}a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ca=ce("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(K){return void 0===K?this.localeData():this.locale(K)});function ms(){return this._locale}var Ma=6e4,Nu=60*Ma,cc=3506328*Nu;function ka(K,be){return(K%be+be)%be}function rl(K,be,lt){return K<100&&K>=0?new Date(K+400,be,lt)-cc:new Date(K,be,lt).valueOf()}function vc(K,be,lt){return K<100&&K>=0?Date.UTC(K+400,be,lt)-cc:Date.UTC(K,be,lt)}function qa(K,be){return be.erasAbbrRegex(K)}function vd(){var ln,Dr,K=[],be=[],lt=[],wt=[],Ai=this.eras();for(ln=0,Dr=Ai.length;ln<Dr;++ln)be.push(Cr(Ai[ln].name)),K.push(Cr(Ai[ln].abbr)),lt.push(Cr(Ai[ln].narrow)),wt.push(Cr(Ai[ln].name)),wt.push(Cr(Ai[ln].abbr)),wt.push(Cr(Ai[ln].narrow));this._erasRegex=new RegExp("^("+wt.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+be.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+K.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+lt.join("|")+")","i")}function dc(K,be){vt(0,[K,K.length],0,be)}function Wd(K,be,lt,wt,ln){var Dr;return null==K?pl(this,wt,ln).year:(be>(Dr=Co(K,wt,ln))&&(be=Dr),Rf.call(this,K,be,lt,wt,ln))}function Rf(K,be,lt,wt,ln){var Dr=Ra(K,be,lt,wt,ln),Ai=fa(Dr.year,0,Dr.dayOfYear);return this.year(Ai.getUTCFullYear()),this.month(Ai.getUTCMonth()),this.date(Ai.getUTCDate()),this}vt("N",0,0,"eraAbbr"),vt("NN",0,0,"eraAbbr"),vt("NNN",0,0,"eraAbbr"),vt("NNNN",0,0,"eraName"),vt("NNNNN",0,0,"eraNarrow"),vt("y",["y",1],"yo","eraYear"),vt("y",["yy",2],0,"eraYear"),vt("y",["yyy",3],0,"eraYear"),vt("y",["yyyy",4],0,"eraYear"),yt("N",qa),yt("NN",qa),yt("NNN",qa),yt("NNNN",function cl(K,be){return be.erasNameRegex(K)}),yt("NNNNN",function xf(K,be){return be.erasNarrowRegex(K)}),yi(["N","NN","NNN","NNNN","NNNNN"],function(K,be,lt,wt){var ln=lt._locale.erasParse(K,wt,lt._strict);ln?q(lt).era=ln:q(lt).invalidEra=K}),yt("y",Lr),yt("yy",Lr),yt("yyy",Lr),yt("yyyy",Lr),yt("yo",function Bc(K,be){return be._eraYearOrdinalRegex||Lr}),yi(["y","yy","yyy","yyyy"],0),yi(["yo"],function(K,be,lt,wt){var ln;lt._locale._eraYearOrdinalRegex&&(ln=K.match(lt._locale._eraYearOrdinalRegex)),be[0]=lt._locale.eraYearOrdinalParse?lt._locale.eraYearOrdinalParse(K,ln):parseInt(K,10)}),vt(0,["gg",2],0,function(){return this.weekYear()%100}),vt(0,["GG",2],0,function(){return this.isoWeekYear()%100}),dc("gggg","weekYear"),dc("ggggg","weekYear"),dc("GGGG","isoWeekYear"),dc("GGGGG","isoWeekYear"),fi("weekYear","gg"),fi("isoWeekYear","GG"),an("weekYear",1),an("isoWeekYear",1),yt("G",ti),yt("g",ti),yt("GG",Re,Rn),yt("gg",Re,Rn),yt("GGGG",nn,et),yt("gggg",nn,et),yt("GGGGG",Fe,Le),yt("ggggg",Fe,Le),Yo(["gggg","ggggg","GGGG","GGGGG"],function(K,be,lt,wt){be[wt.substr(0,2)]=zn(K)}),Yo(["gg","GG"],function(K,be,lt,wt){be[wt]=a.parseTwoDigitYear(K)}),vt("Q",0,"Qo","quarter"),fi("quarter","Q"),an("quarter",7),yt("Q",mn),yi("Q",function(K,be){be[1]=3*(zn(K)-1)}),vt("D",["DD",2],"Do","date"),fi("date","D"),an("date",9),yt("D",Re),yt("DD",Re,Rn),yt("Do",function(K,be){return K?be._dayOfMonthOrdinalParse||be._ordinalParse:be._dayOfMonthOrdinalParseLenient}),yi(["D","DD"],2),yi("Do",function(K,be){be[2]=zn(K.match(Re)[0])});var Lc=ri("Date",!0);vt("DDD",["DDDD",3],"DDDo","dayOfYear"),fi("dayOfYear","DDD"),an("dayOfYear",4),yt("DDD",st),yt("DDDD",Wn),yi(["DDD","DDDD"],function(K,be,lt){lt._dayOfYear=zn(K)}),vt("m",["mm",2],0,"minute"),fi("minute","m"),an("minute",14),yt("m",Re),yt("mm",Re,Rn),yi(["m","mm"],4);var od=ri("Minutes",!1);vt("s",["ss",2],0,"second"),fi("second","s"),an("second",15),yt("s",Re),yt("ss",Re,Rn),yi(["s","ss"],5);var Aa,Wc,nc=ri("Seconds",!1);for(vt("S",0,0,function(){return~~(this.millisecond()/100)}),vt(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),vt(0,["SSS",3],0,"millisecond"),vt(0,["SSSS",4],0,function(){return 10*this.millisecond()}),vt(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),vt(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),vt(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),vt(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),vt(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),fi("millisecond","ms"),an("millisecond",16),yt("S",st,mn),yt("SS",st,Rn),yt("SSS",st,Wn),Aa="SSSS";Aa.length<=9;Aa+="S")yt(Aa,Lr);function sd(K,be){be[6]=zn(1e3*("0."+K))}for(Aa="S";Aa.length<=9;Aa+="S")yi(Aa,sd);Wc=ri("Milliseconds",!1),vt("z",0,0,"zoneAbbr"),vt("zz",0,0,"zoneName");var vo=fe.prototype;function Ac(K){return K}vo.add=Zd,vo.calendar=function wo(K,be){1===arguments.length&&(arguments[0]?Hc(arguments[0])?(K=arguments[0],be=void 0):Oc(arguments[0])&&(be=arguments[0],K=void 0):(K=void 0,be=void 0));var lt=K||ra(),wt=Ht(lt,this).startOf("day"),ln=a.calendarFormat(this,wt)||"sameElse",Dr=be&&(Xe(be[ln])?be[ln].call(this,lt):be[ln]);return this.format(Dr||this.localeData().calendar(ln,this,ra(lt)))},vo.clone=function Ta(){return new fe(this)},vo.diff=function rd(K,be,lt){var wt,ln,Dr;if(!this.isValid())return NaN;if(!(wt=Ht(K,this)).isValid())return NaN;switch(ln=6e4*(wt.utcOffset()-this.utcOffset()),be=no(be)){case"year":Dr=Ze(this,wt)/12;break;case"month":Dr=Ze(this,wt);break;case"quarter":Dr=Ze(this,wt)/3;break;case"second":Dr=(this-wt)/1e3;break;case"minute":Dr=(this-wt)/6e4;break;case"hour":Dr=(this-wt)/36e5;break;case"day":Dr=(this-wt-ln)/864e5;break;case"week":Dr=(this-wt-ln)/6048e5;break;default:Dr=this-wt}return lt?Dr:Xn(Dr)},vo.endOf=function ju(K){var be,lt;if(void 0===(K=no(K))||"millisecond"===K||!this.isValid())return this;switch(lt=this._isUTC?vc:rl,K){case"year":be=lt(this.year()+1,0,1)-1;break;case"quarter":be=lt(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":be=lt(this.year(),this.month()+1,1)-1;break;case"week":be=lt(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":be=lt(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":be=lt(this.year(),this.month(),this.date()+1)-1;break;case"hour":be=this._d.valueOf(),be+=Nu-ka(be+(this._isUTC?0:this.utcOffset()*Ma),Nu)-1;break;case"minute":be=this._d.valueOf(),be+=Ma-ka(be,Ma)-1;break;case"second":be=this._d.valueOf(),be+=1e3-ka(be,1e3)-1}return this._d.setTime(be),a.updateOffset(this,!0),this},vo.format=function Ot(K){K||(K=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var be=Gt(this,K);return this.localeData().postformat(be)},vo.from=function sn(K,be){return this.isValid()&&(he(K)&&K.isValid()||ra(K).isValid())?_l({to:this,from:K}).locale(this.locale()).humanize(!be):this.localeData().invalidDate()},vo.fromNow=function Un(K){return this.from(ra(),K)},vo.to=function gr(K,be){return this.isValid()&&(he(K)&&K.isValid()||ra(K).isValid())?_l({from:this,to:K}).locale(this.locale()).humanize(!be):this.localeData().invalidDate()},vo.toNow=function gi(K){return this.to(ra(),K)},vo.get=function vr(K){return Xe(this[K=no(K)])?this[K]():this},vo.invalidAt=function Ml(){return q(this).overflow},vo.isAfter=function Tl(K,be){var lt=he(K)?K:ra(K);return!(!this.isValid()||!lt.isValid())&&("millisecond"===(be=no(be)||"millisecond")?this.valueOf()>lt.valueOf():lt.valueOf()<this.clone().startOf(be).valueOf())},vo.isBefore=function ou(K,be){var lt=he(K)?K:ra(K);return!(!this.isValid()||!lt.isValid())&&("millisecond"===(be=no(be)||"millisecond")?this.valueOf()<lt.valueOf():this.clone().endOf(be).valueOf()<lt.valueOf())},vo.isBetween=function Tu(K,be,lt,wt){var ln=he(K)?K:ra(K),Dr=he(be)?be:ra(be);return!!(this.isValid()&&ln.isValid()&&Dr.isValid())&&("("===(wt=wt||"()")[0]?this.isAfter(ln,lt):!this.isBefore(ln,lt))&&(")"===wt[1]?this.isBefore(Dr,lt):!this.isAfter(Dr,lt))},vo.isSame=function gc(K,be){var wt,lt=he(K)?K:ra(K);return!(!this.isValid()||!lt.isValid())&&("millisecond"===(be=no(be)||"millisecond")?this.valueOf()===lt.valueOf():(wt=lt.valueOf(),this.clone().startOf(be).valueOf()<=wt&&wt<=this.clone().endOf(be).valueOf()))},vo.isSameOrAfter=function En(K,be){return this.isSame(K,be)||this.isAfter(K,be)},vo.isSameOrBefore=function pa(K,be){return this.isSame(K,be)||this.isBefore(K,be)},vo.isValid=function ll(){return re(this)},vo.lang=Ca,vo.locale=Lo,vo.localeData=ms,vo.max=td,vo.min=bu,vo.parsingFlags=function Ll(){return B({},q(this))},vo.set=function Ji(K,be){if("object"==typeof K){var wt,lt=function vn(K){var lt,be=[];for(lt in K)p(K,lt)&&be.push({unit:lt,priority:Er[lt]});return be.sort(function(wt,ln){return wt.priority-ln.priority}),be}(K=xo(K)),ln=lt.length;for(wt=0;wt<ln;wt++)this[lt[wt].unit](K[lt[wt].unit])}else if(Xe(this[K=no(K)]))return this[K](be);return this},vo.startOf=function yc(K){var be,lt;if(void 0===(K=no(K))||"millisecond"===K||!this.isValid())return this;switch(lt=this._isUTC?vc:rl,K){case"year":be=lt(this.year(),0,1);break;case"quarter":be=lt(this.year(),this.month()-this.month()%3,1);break;case"month":be=lt(this.year(),this.month(),1);break;case"week":be=lt(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":be=lt(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":be=lt(this.year(),this.month(),this.date());break;case"hour":be=this._d.valueOf(),be-=ka(be+(this._isUTC?0:this.utcOffset()*Ma),Nu);break;case"minute":be=this._d.valueOf(),be-=ka(be,Ma);break;case"second":be=this._d.valueOf(),be-=ka(be,1e3)}return this._d.setTime(be),a.updateOffset(this,!0),this},vo.subtract=_d,vo.toArray=function Fc(){var K=this;return[K.year(),K.month(),K.date(),K.hour(),K.minute(),K.second(),K.millisecond()]},vo.toObject=function cu(){var K=this;return{years:K.year(),months:K.month(),date:K.date(),hours:K.hours(),minutes:K.minutes(),seconds:K.seconds(),milliseconds:K.milliseconds()}},vo.toDate=function gd(){return new Date(this.valueOf())},vo.toISOString=function ge(K){if(!this.isValid())return null;var be=!0!==K,lt=be?this.clone().utc():this;return lt.year()<0||lt.year()>9999?Gt(lt,be?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):Xe(Date.prototype.toISOString)?be?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",Gt(lt,"Z")):Gt(lt,be?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},vo.inspect=function ht(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var lt,wt,K="moment",be="";return this.isLocal()||(K=0===this.utcOffset()?"moment.utc":"moment.parseZone",be="Z"),lt="["+K+'("]',wt=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",this.format(lt+wt+"-MM-DD[T]HH:mm:ss.SSS"+be+'[")]')},"undefined"!=typeof Symbol&&null!=Symbol.for&&(vo[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),vo.toJSON=function Oa(){return this.isValid()?this.toISOString():null},vo.toString=function Ae(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},vo.unix=function tc(){return Math.floor(this.valueOf()/1e3)},vo.valueOf=function Ul(){return this._d.valueOf()-6e4*(this._offset||0)},vo.creationData=function gf(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},vo.eraName=function kl(){var K,be,lt,wt=this.localeData().eras();for(K=0,be=wt.length;K<be;++K)if(lt=this.clone().startOf("day").valueOf(),wt[K].since<=lt&&lt<=wt[K].until||wt[K].until<=lt&&lt<=wt[K].since)return wt[K].name;return""},vo.eraNarrow=function Gu(){var K,be,lt,wt=this.localeData().eras();for(K=0,be=wt.length;K<be;++K)if(lt=this.clone().startOf("day").valueOf(),wt[K].since<=lt&&lt<=wt[K].until||wt[K].until<=lt&&lt<=wt[K].since)return wt[K].narrow;return""},vo.eraAbbr=function ul(){var K,be,lt,wt=this.localeData().eras();for(K=0,be=wt.length;K<be;++K)if(lt=this.clone().startOf("day").valueOf(),wt[K].since<=lt&&lt<=wt[K].until||wt[K].until<=lt&&lt<=wt[K].since)return wt[K].abbr;return""},vo.eraYear=function Cu(){var K,be,lt,wt,ln=this.localeData().eras();for(K=0,be=ln.length;K<be;++K)if(lt=ln[K].since<=ln[K].until?1:-1,wt=this.clone().startOf("day").valueOf(),ln[K].since<=wt&&wt<=ln[K].until||ln[K].until<=wt&&wt<=ln[K].since)return(this.year()-a(ln[K].since).year())*lt+ln[K].offset;return this.year()},vo.year=es,vo.isLeapYear=function ma(){return Zn(this.year())},vo.weekYear=function yd(K){return Wd.call(this,K,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},vo.isoWeekYear=function $p(K){return Wd.call(this,K,this.isoWeek(),this.isoWeekday(),1,4)},vo.quarter=vo.quarters=function yp(K){return null==K?Math.ceil((this.month()+1)/3):this.month(3*(K-1)+this.month()%3)},vo.month=Jr,vo.daysInMonth=function ro(){return Eo(this.year(),this.month())},vo.week=vo.weeks=function Is(K){var be=this.localeData().week(this);return null==K?be:this.add(7*(K-be),"d")},vo.isoWeek=vo.isoWeeks=function nl(K){var be=pl(this,1,4).week;return null==K?be:this.add(7*(K-be),"d")},vo.weeksInYear=function Vu(){var K=this.localeData()._week;return Co(this.year(),K.dow,K.doy)},vo.weeksInWeekYear=function fc(){var K=this.localeData()._week;return Co(this.weekYear(),K.dow,K.doy)},vo.isoWeeksInYear=function vf(){return Co(this.year(),1,4)},vo.isoWeeksInISOWeekYear=function ap(){return Co(this.isoWeekYear(),1,4)},vo.date=Lc,vo.day=vo.days=function ii(K){if(!this.isValid())return null!=K?this:NaN;var be=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=K?(K=function js(K,be){return"string"!=typeof K?K:isNaN(K)?"number"==typeof(K=be.weekdaysParse(K))?K:null:parseInt(K,10)}(K,this.localeData()),this.add(K-be,"d")):be},vo.weekday=function Oi(K){if(!this.isValid())return null!=K?this:NaN;var be=(this.day()+7-this.localeData()._week.dow)%7;return null==K?be:this.add(K-be,"d")},vo.isoWeekday=function ki(K){if(!this.isValid())return null!=K?this:NaN;if(null!=K){var be=function $o(K,be){return"string"==typeof K?be.weekdaysParse(K)%7||7:isNaN(K)?null:K}(K,this.localeData());return this.day(this.day()%7?be:be-7)}return this.day()||7},vo.dayOfYear=function Fu(K){var be=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==K?be:this.add(K-be,"d")},vo.hour=vo.hours=mc,vo.minute=vo.minutes=od,vo.second=vo.seconds=nc,vo.millisecond=vo.milliseconds=Wc,vo.utcOffset=function Pn(K,be,lt){var ln,wt=this._offset||0;if(!this.isValid())return null!=K?this:NaN;if(null!=K){if("string"==typeof K){if(null===(K=It(Dn,K)))return this}else Math.abs(K)<16&&!lt&&(K*=60);return!this._isUTC&&be&&(ln=_n(this)),this._offset=K,this._isUTC=!0,null!=ln&&this.add(ln,"m"),wt!==K&&(!be||this._changeInProgress?Su(this,_l(K-wt,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?wt:_n(this)},vo.utc=function ai(K){return this.utcOffset(0,K)},vo.local=function Ei(K){return this._isUTC&&(this.utcOffset(0,K),this._isUTC=!1,K&&this.subtract(_n(this),"m")),this},vo.parseZone=function Ci(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var K=It(Ut,this._i);null!=K?this.utcOffset(K):this.utcOffset(0,!0)}return this},vo.hasAlignedHourOffset=function Vi(K){return!!this.isValid()&&(K=K?ra(K).utcOffset():0,(this.utcOffset()-K)%60==0)},vo.isDST=function Pr(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},vo.isLocal=function Rr(){return!!this.isValid()&&!this._isUTC},vo.isUtcOffset=function br(){return!!this.isValid()&&this._isUTC},vo.isUtc=fo,vo.isUTC=fo,vo.zoneAbbr=function lp(){return this._isUTC?"UTC":""},vo.zoneName=function $d(){return this._isUTC?"Coordinated Universal Time":""},vo.dates=ce("dates accessor is deprecated. Use date instead.",Lc),vo.months=ce("months accessor is deprecated. Use month instead",Jr),vo.years=ce("years accessor is deprecated. Use year instead",es),vo.zone=ce("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function Tr(K,be){return null!=K?("string"!=typeof K&&(K=-K),this.utcOffset(K,be),this):-this.utcOffset()}),vo.isDSTShifted=ce("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function Yn(){if(!S(this._isDSTShifted))return this._isDSTShifted;var be,K={};return ie(K,this),(K=lu(K))._a?(be=K._isUTC?W(K._a):ra(K._a),this._isDSTShifted=this.isValid()&&function Z(K,be,lt){var Ai,wt=Math.min(K.length,be.length),ln=Math.abs(K.length-be.length),Dr=0;for(Ai=0;Ai<wt;Ai++)(lt&&K[Ai]!==be[Ai]||!lt&&zn(K[Ai])!==zn(be[Ai]))&&Dr++;return Dr+ln}(K._a,be.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted});var ga=Ge.prototype;function Dc(K,be,lt,wt){var ln=Kn(),Dr=W().set(wt,be);return ln[lt](Dr,K)}function Lu(K,be,lt){if(M(K)&&(be=K,K=void 0),K=K||"",null!=be)return Dc(K,be,lt,"month");var wt,ln=[];for(wt=0;wt<12;wt++)ln[wt]=Dc(K,wt,lt,"month");return ln}function bc(K,be,lt,wt){"boolean"==typeof K?(M(be)&&(lt=be,be=void 0),be=be||""):(lt=be=K,K=!1,M(be)&&(lt=be,be=void 0),be=be||"");var Ai,ln=Kn(),Dr=K?ln._week.dow:0,gs=[];if(null!=lt)return Dc(be,(lt+Dr)%7,wt,"day");for(Ai=0;Ai<7;Ai++)gs[Ai]=Dc(be,(Ai+Dr)%7,wt,"day");return gs}ga.calendar=function We(K,be,lt){var wt=this._calendar[K]||this._calendar.sameElse;return Xe(wt)?wt.call(be,lt):wt},ga.longDateFormat=function mi(K){var be=this._longDateFormat[K],lt=this._longDateFormat[K.toUpperCase()];return be||!lt?be:(this._longDateFormat[K]=lt.match(Nt).map(function(wt){return"MMMM"===wt||"MM"===wt||"DD"===wt||"dddd"===wt?wt.slice(1):wt}).join(""),this._longDateFormat[K])},ga.invalidDate=function hr(){return this._invalidDate},ga.ordinal=function Hn(K){return this._ordinal.replace("%d",K)},ga.preparse=Ac,ga.postformat=Ac,ga.relativeTime=function _r(K,be,lt,wt){var ln=this._relativeTime[lt];return Xe(ln)?ln(K,be,lt,wt):ln.replace(/%d/i,K)},ga.pastFuture=function ei(K,be){var lt=this._relativeTime[K>0?"future":"past"];return Xe(lt)?lt(be):lt.replace(/%s/i,be)},ga.set=function He(K){var be,lt;for(lt in K)p(K,lt)&&(Xe(be=K[lt])?this[lt]=be:this["_"+lt]=be);this._config=K,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},ga.eras=function zd(K,be){var lt,wt,ln,Dr=this._eras||Kn("en")._eras;for(lt=0,wt=Dr.length;lt<wt;++lt)switch("string"==typeof Dr[lt].since&&(ln=a(Dr[lt].since).startOf("day"),Dr[lt].since=ln.valueOf()),typeof Dr[lt].until){case"undefined":Dr[lt].until=1/0;break;case"string":ln=a(Dr[lt].until).startOf("day").valueOf(),Dr[lt].until=ln.valueOf()}return Dr},ga.erasParse=function id(K,be,lt){var wt,ln,Ai,gs,Da,Dr=this.eras();for(K=K.toUpperCase(),wt=0,ln=Dr.length;wt<ln;++wt)if(Ai=Dr[wt].name.toUpperCase(),gs=Dr[wt].abbr.toUpperCase(),Da=Dr[wt].narrow.toUpperCase(),lt)switch(be){case"N":case"NN":case"NNN":if(gs===K)return Dr[wt];break;case"NNNN":if(Ai===K)return Dr[wt];break;case"NNNNN":if(Da===K)return Dr[wt]}else if([Ai,gs,Da].indexOf(K)>=0)return Dr[wt]},ga.erasConvertYear=function Al(K,be){var lt=K.since<=K.until?1:-1;return void 0===be?a(K.since).year():a(K.since).year()+(be-K.offset)*lt},ga.erasAbbrRegex=function Ec(K){return p(this,"_erasAbbrRegex")||vd.call(this),K?this._erasAbbrRegex:this._erasRegex},ga.erasNameRegex=function cn(K){return p(this,"_erasNameRegex")||vd.call(this),K?this._erasNameRegex:this._erasRegex},ga.erasNarrowRegex=function Iu(K){return p(this,"_erasNarrowRegex")||vd.call(this),K?this._erasNarrowRegex:this._erasRegex},ga.months=function Ar(K,be){return K?u(this._months)?this._months[K.month()]:this._months[(this._months.isFormat||ua).test(be)?"format":"standalone"][K.month()]:u(this._months)?this._months:this._months.standalone},ga.monthsShort=function cr(K,be){return K?u(this._monthsShort)?this._monthsShort[K.month()]:this._monthsShort[ua.test(be)?"format":"standalone"][K.month()]:u(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},ga.monthsParse=function Sn(K,be,lt){var wt,ln,Dr;if(this._monthsParseExact)return pi.call(this,K,be,lt);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),wt=0;wt<12;wt++){if(ln=W([2e3,wt]),lt&&!this._longMonthsParse[wt]&&(this._longMonthsParse[wt]=new RegExp("^"+this.months(ln,"").replace(".","")+"$","i"),this._shortMonthsParse[wt]=new RegExp("^"+this.monthsShort(ln,"").replace(".","")+"$","i")),!lt&&!this._monthsParse[wt]&&(Dr="^"+this.months(ln,"")+"|^"+this.monthsShort(ln,""),this._monthsParse[wt]=new RegExp(Dr.replace(".",""),"i")),lt&&"MMMM"===be&&this._longMonthsParse[wt].test(K))return wt;if(lt&&"MMM"===be&&this._shortMonthsParse[wt].test(K))return wt;if(!lt&&this._monthsParse[wt].test(K))return wt}},ga.monthsRegex=function Ro(K){return this._monthsParseExact?(p(this,"_monthsRegex")||Ys.call(this),K?this._monthsStrictRegex:this._monthsRegex):(p(this,"_monthsRegex")||(this._monthsRegex=Mr),this._monthsStrictRegex&&K?this._monthsStrictRegex:this._monthsRegex)},ga.monthsShortRegex=function go(K){return this._monthsParseExact?(p(this,"_monthsRegex")||Ys.call(this),K?this._monthsShortStrictRegex:this._monthsShortRegex):(p(this,"_monthsShortRegex")||(this._monthsShortRegex=or),this._monthsShortStrictRegex&&K?this._monthsShortStrictRegex:this._monthsShortRegex)},ga.week=function yl(K){return pl(K,this._week.dow,this._week.doy).week},ga.firstDayOfYear=function Wa(){return this._week.doy},ga.firstDayOfWeek=function ys(){return this._week.dow},ga.weekdays=function pn(K,be){var lt=u(this._weekdays)?this._weekdays:this._weekdays[K&&!0!==K&&this._weekdays.isFormat.test(be)?"format":"standalone"];return!0===K?To(lt,this._week.dow):K?lt[K.day()]:lt},ga.weekdaysMin=function Ue(K){return!0===K?To(this._weekdaysMin,this._week.dow):K?this._weekdaysMin[K.day()]:this._weekdaysMin},ga.weekdaysShort=function te(K){return!0===K?To(this._weekdaysShort,this._week.dow):K?this._weekdaysShort[K.day()]:this._weekdaysShort},ga.weekdaysParse=function hn(K,be,lt){var wt,ln,Dr;if(this._weekdaysParseExact)return jt.call(this,K,be,lt);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),wt=0;wt<7;wt++){if(ln=W([2e3,1]).day(wt),lt&&!this._fullWeekdaysParse[wt]&&(this._fullWeekdaysParse[wt]=new RegExp("^"+this.weekdays(ln,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[wt]=new RegExp("^"+this.weekdaysShort(ln,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[wt]=new RegExp("^"+this.weekdaysMin(ln,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[wt]||(Dr="^"+this.weekdays(ln,"")+"|^"+this.weekdaysShort(ln,"")+"|^"+this.weekdaysMin(ln,""),this._weekdaysParse[wt]=new RegExp(Dr.replace(".",""),"i")),lt&&"dddd"===be&&this._fullWeekdaysParse[wt].test(K))return wt;if(lt&&"ddd"===be&&this._shortWeekdaysParse[wt].test(K))return wt;if(lt&&"dd"===be&&this._minWeekdaysParse[wt].test(K))return wt;if(!lt&&this._weekdaysParse[wt].test(K))return wt}},ga.weekdaysRegex=function _s(K){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||Ks.call(this),K?this._weekdaysStrictRegex:this._weekdaysRegex):(p(this,"_weekdaysRegex")||(this._weekdaysRegex=kr),this._weekdaysStrictRegex&&K?this._weekdaysStrictRegex:this._weekdaysRegex)},ga.weekdaysShortRegex=function Vo(K){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||Ks.call(this),K?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(p(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Ki),this._weekdaysShortStrictRegex&&K?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},ga.weekdaysMinRegex=function Fs(K){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||Ks.call(this),K?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(p(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=ut),this._weekdaysMinStrictRegex&&K?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},ga.isPM=function _c(K){return"p"===(K+"").toLowerCase().charAt(0)},ga.meridiem=function Fl(K,be,lt){return K>11?lt?"pm":"PM":lt?"am":"AM"},qt("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(K){var be=K%10;return K+(1===zn(K%100/10)?"th":1===be?"st":2===be?"nd":3===be?"rd":"th")}}),a.lang=ce("moment.lang is deprecated. Use moment.locale instead.",qt),a.langData=ce("moment.langData is deprecated. Use moment.localeData instead.",Kn);var hu=Math.abs;function pc(K,be,lt,wt){var ln=_l(be,lt);return K._milliseconds+=wt*ln._milliseconds,K._days+=wt*ln._days,K._months+=wt*ln._months,K._bubble()}function Nl(K){return K<0?Math.floor(K):Math.ceil(K)}function ic(K){return 4800*K/146097}function h(K){return 146097*K/4800}function L(K){return function(){return this.as(K)}}var X=L("ms"),de=L("s"),ve=L("m"),Ye=L("h"),xe=L("d"),nt=L("w"),St=L("M"),Mt=L("Q"),fn=L("y");function fr(K){return function(){return this.isValid()?this._data[K]:NaN}}var $r=fr("milliseconds"),Ui=fr("seconds"),is=fr("minutes"),yo=fr("hours"),Vs=fr("days"),qs=fr("months"),el=fr("years");var Ga=Math.round,wa={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function Gl(K,be,lt,wt,ln){return ln.relativeTime(be||1,!!lt,K,wt)}var xc=Math.abs;function Ou(K){return(K>0)-(K<0)||+K}function Qd(){if(!this.isValid())return this.localeData().invalidDate();var wt,ln,Dr,Ai,Da,ca,Dl,Yl,K=xc(this._milliseconds)/1e3,be=xc(this._days),lt=xc(this._months),gs=this.asSeconds();return gs?(wt=Xn(K/60),ln=Xn(wt/60),K%=60,wt%=60,Dr=Xn(lt/12),lt%=12,Ai=K?K.toFixed(3).replace(/\.?0+$/,""):"",Da=gs<0?"-":"",ca=Ou(this._months)!==Ou(gs)?"-":"",Dl=Ou(this._days)!==Ou(gs)?"-":"",Yl=Ou(this._milliseconds)!==Ou(gs)?"-":"",Da+"P"+(Dr?ca+Dr+"Y":"")+(lt?ca+lt+"M":"")+(be?Dl+be+"D":"")+(ln||wt||K?"T":"")+(ln?Yl+ln+"H":"")+(wt?Yl+wt+"M":"")+(K?Yl+Ai+"S":"")):"P0D"}var il=Io.prototype;return il.isValid=function wu(){return this._isValid},il.abs=function Uc(){var K=this._data;return this._milliseconds=hu(this._milliseconds),this._days=hu(this._days),this._months=hu(this._months),K.milliseconds=hu(K.milliseconds),K.seconds=hu(K.seconds),K.minutes=hu(K.minutes),K.hours=hu(K.hours),K.months=hu(K.months),K.years=hu(K.years),this},il.add=function Jd(K,be){return pc(this,K,be,1)},il.subtract=function Jc(K,be){return pc(this,K,be,-1)},il.as=function E(K){if(!this.isValid())return NaN;var be,lt,wt=this._milliseconds;if("month"===(K=no(K))||"quarter"===K||"year"===K)switch(be=this._days+wt/864e5,lt=this._months+ic(be),K){case"month":return lt;case"quarter":return lt/3;case"year":return lt/12}else switch(be=this._days+Math.round(h(this._months)),K){case"week":return be/7+wt/6048e5;case"day":return be+wt/864e5;case"hour":return 24*be+wt/36e5;case"minute":return 1440*be+wt/6e4;case"second":return 86400*be+wt/1e3;case"millisecond":return Math.floor(864e5*be)+wt;default:throw new Error("Unknown unit "+K)}},il.asMilliseconds=X,il.asSeconds=de,il.asMinutes=ve,il.asHours=Ye,il.asDays=xe,il.asWeeks=nt,il.asMonths=St,il.asQuarters=Mt,il.asYears=fn,il.valueOf=function P(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*zn(this._months/12):NaN},il._bubble=function Yc(){var ln,Dr,Ai,gs,Da,K=this._milliseconds,be=this._days,lt=this._months,wt=this._data;return K>=0&&be>=0&&lt>=0||K<=0&&be<=0&&lt<=0||(K+=864e5*Nl(h(lt)+be),be=0,lt=0),wt.milliseconds=K%1e3,ln=Xn(K/1e3),wt.seconds=ln%60,Dr=Xn(ln/60),wt.minutes=Dr%60,Ai=Xn(Dr/60),wt.hours=Ai%24,be+=Xn(Ai/24),lt+=Da=Xn(ic(be)),be-=Nl(h(Da)),gs=Xn(lt/12),lt%=12,wt.days=be,wt.months=lt,wt.years=gs,this},il.clone=function jn(){return _l(this)},il.get=function Vn(K){return K=no(K),this.isValid()?this[K+"s"]():NaN},il.milliseconds=$r,il.seconds=Ui,il.minutes=is,il.hours=yo,il.days=Vs,il.weeks=function $a(){return Xn(this.days()/7)},il.months=qs,il.years=el,il.humanize=function ku(K,be){if(!this.isValid())return this.localeData().invalidDate();var ln,Dr,lt=!1,wt=wa;return"object"==typeof K&&(be=K,K=!1),"boolean"==typeof K&&(lt=K),"object"==typeof be&&(wt=Object.assign({},wa,be),null!=be.s&&null==be.ss&&(wt.ss=be.s-1)),Dr=function _u(K,be,lt,wt){var ln=_l(K).abs(),Dr=Ga(ln.as("s")),Ai=Ga(ln.as("m")),gs=Ga(ln.as("h")),Da=Ga(ln.as("d")),ca=Ga(ln.as("M")),Dl=Ga(ln.as("w")),Yl=Ga(ln.as("y")),jc=Dr<=lt.ss&&["s",Dr]||Dr<lt.s&&["ss",Dr]||Ai<=1&&["m"]||Ai<lt.m&&["mm",Ai]||gs<=1&&["h"]||gs<lt.h&&["hh",gs]||Da<=1&&["d"]||Da<lt.d&&["dd",Da];return null!=lt.w&&(jc=jc||Dl<=1&&["w"]||Dl<lt.w&&["ww",Dl]),(jc=jc||ca<=1&&["M"]||ca<lt.M&&["MM",ca]||Yl<=1&&["y"]||["yy",Yl])[2]=be,jc[3]=+K>0,jc[4]=wt,Gl.apply(null,jc)}(this,!lt,wt,ln=this.localeData()),lt&&(Dr=ln.pastFuture(+this,Dr)),ln.postformat(Dr)},il.toISOString=Qd,il.toString=Qd,il.toJSON=Qd,il.locale=Lo,il.localeData=ms,il.toIsoString=ce("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Qd),il.lang=Ca,vt("X",0,0,"unix"),vt("x",0,0,"valueOf"),yt("x",ti),yt("X",/[+-]?\d+(\.\d{1,3})?/),yi("X",function(K,be,lt){lt._d=new Date(1e3*parseFloat(K))}),yi("x",function(K,be,lt){lt._d=new Date(zn(K))}),a.version="2.29.4",function f(K){r=K}(ra),a.fn=vo,a.min=function uu(){return ec("isBefore",[].slice.call(arguments,0))},a.max=function du(){return ec("isAfter",[].slice.call(arguments,0))},a.now=function(){return Date.now?Date.now():+new Date},a.utc=W,a.unix=function pu(K){return ra(1e3*K)},a.months=function rc(K,be){return Lu(K,be,"months")},a.isDate=w,a.locale=qt,a.invalid=H,a.duration=_l,a.isMoment=he,a.weekdays=function Sc(K,be,lt){return bc(K,be,lt,"weekdays")},a.parseZone=function $l(){return ra.apply(null,arguments).parseZone()},a.localeData=Kn,a.isDuration=fu,a.monthsShort=function Ql(K,be){return Lu(K,be,"monthsShort")},a.weekdaysMin=function Zu(K,be,lt){return bc(K,be,lt,"weekdaysMin")},a.defineLocale=pt,a.updateLocale=function Kt(K,be){if(null!=be){var lt,wt,ln=Xu;null!=Xa[K]&&null!=Xa[K].parentLocale?Xa[K].set(Pe(Xa[K]._config,be)):(null!=(wt=rt(K))&&(ln=wt._config),be=Pe(ln,be),null==wt&&(be.abbr=K),(lt=new Ge(be)).parentLocale=Xa[K],Xa[K]=lt),qt(K)}else null!=Xa[K]&&(null!=Xa[K].parentLocale?(Xa[K]=Xa[K].parentLocale,K===qt()&&qt(K)):null!=Xa[K]&&delete Xa[K]);return Xa[K]},a.locales=function oi(){return Oe(Xa)},a.weekdaysShort=function Tc(K,be,lt){return bc(K,be,lt,"weekdaysShort")},a.normalizeUnits=no,a.relativeTimeRounding=function Va(K){return void 0===K?Ga:"function"==typeof K&&(Ga=K,!0)},a.relativeTimeThreshold=function Mu(K,be){return void 0!==wa[K]&&(void 0===be?wa[K]:(wa[K]=be,"s"===K&&(wa.ss=be-1),!0))},a.calendarFormat=function Mo(K,be){var lt=K.diff(be,"days",!0);return lt<-6?"sameElse":lt<-1?"lastWeek":lt<0?"lastDay":lt<1?"sameDay":lt<2?"nextDay":lt<7?"nextWeek":"sameElse"},a.prototype=vo,a.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},a}()},90504:(v,b,i)=>{"use strict";i.d(b,{_:()=>p,w:()=>S});var r=i(89724),a=i(11048),f=function(M,w,x,B){var q,W=arguments.length,j=W<3?w:null===B?B=Object.getOwnPropertyDescriptor(w,x):B;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)j=Reflect.decorate(M,w,x,B);else for(var ue=M.length-1;ue>=0;ue--)(q=M[ue])&&(j=(W<3?q(j):W>3?q(w,x,j):q(w,x))||j);return W>3&&j&&Object.defineProperty(w,x,j),j},u=function(M,w){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(M,w)},e=function(M,w){return function(x,B){w(x,B,M)}},p=function(){function M(w,x,B){this._el=w,this._ngZone=x,this.platformId=B,this.clickOutsideEnabled=!0,this.attachOutsideOnClick=!1,this.delayClickOutsideInit=!1,this.emitOnBlur=!1,this.exclude="",this.excludeBeforeClick=!1,this.clickOutsideEvents="",this.clickOutside=new r.vpe,this._nodesExcluded=[],this._events=["click"],this._initOnClickBody=this._initOnClickBody.bind(this),this._onClickBody=this._onClickBody.bind(this),this._onWindowBlur=this._onWindowBlur.bind(this)}return M.prototype.ngOnInit=function(){!(0,a.NF)(this.platformId)||this._init()},M.prototype.ngOnDestroy=function(){!(0,a.NF)(this.platformId)||(this._removeClickOutsideListener(),this._removeAttachOutsideOnClickListener(),this._removeWindowBlurListener())},M.prototype.ngOnChanges=function(w){!(0,a.NF)(this.platformId)||(w.attachOutsideOnClick||w.exclude||w.emitOnBlur)&&this._init()},M.prototype._init=function(){""!==this.clickOutsideEvents&&(this._events=this.clickOutsideEvents.split(",").map(function(w){return w.trim()})),this._excludeCheck(),this.attachOutsideOnClick?this._initAttachOutsideOnClickListener():this._initOnClickBody(),this.emitOnBlur&&this._initWindowBlurListener()},M.prototype._initOnClickBody=function(){this.delayClickOutsideInit?setTimeout(this._initClickOutsideListener.bind(this)):this._initClickOutsideListener()},M.prototype._excludeCheck=function(){if(this.exclude)try{var w=Array.from(document.querySelectorAll(this.exclude));w&&(this._nodesExcluded=w)}catch(x){console.error("[ng-click-outside] Check your exclude selector syntax.",x)}},M.prototype._onClickBody=function(w){!this.clickOutsideEnabled||(this.excludeBeforeClick&&this._excludeCheck(),!this._el.nativeElement.contains(w.target)&&!this._shouldExclude(w.target)&&(this._emit(w),this.attachOutsideOnClick&&this._removeClickOutsideListener()))},M.prototype._onWindowBlur=function(w){var x=this;setTimeout(function(){document.hidden||x._emit(w)})},M.prototype._emit=function(w){var x=this;!this.clickOutsideEnabled||this._ngZone.run(function(){return x.clickOutside.emit(w)})},M.prototype._shouldExclude=function(w){for(var x=0,B=this._nodesExcluded;x<B.length;x++)if(B[x].contains(w))return!0;return!1},M.prototype._initClickOutsideListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){w._events.forEach(function(x){return document.addEventListener(x,w._onClickBody)})})},M.prototype._removeClickOutsideListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){w._events.forEach(function(x){return document.removeEventListener(x,w._onClickBody)})})},M.prototype._initAttachOutsideOnClickListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){w._events.forEach(function(x){return w._el.nativeElement.addEventListener(x,w._initOnClickBody)})})},M.prototype._removeAttachOutsideOnClickListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){w._events.forEach(function(x){return w._el.nativeElement.removeEventListener(x,w._initOnClickBody)})})},M.prototype._initWindowBlurListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){window.addEventListener("blur",w._onWindowBlur)})},M.prototype._removeWindowBlurListener=function(){var w=this;this._ngZone.runOutsideAngular(function(){window.removeEventListener("blur",w._onWindowBlur)})},f([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"clickOutsideEnabled",void 0),f([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"attachOutsideOnClick",void 0),f([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"delayClickOutsideInit",void 0),f([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"emitOnBlur",void 0),f([(0,r.IIB)(),u("design:type",String)],M.prototype,"exclude",void 0),f([(0,r.IIB)(),u("design:type",Boolean)],M.prototype,"excludeBeforeClick",void 0),f([(0,r.IIB)(),u("design:type",String)],M.prototype,"clickOutsideEvents",void 0),f([(0,r.r_U)(),u("design:type",r.vpe)],M.prototype,"clickOutside",void 0),(M=f([e(2,(0,r.tBr)(r.Lbi)),u("design:paramtypes",[r.SBq,r.R0b,Object])],M)).\u0275fac=function(x){return new(x||M)(r.Y36(r.SBq),r.Y36(r.R0b),r.Y36(r.Lbi))},M.\u0275dir=r.lG2({type:M,selectors:[["","clickOutside",""]],inputs:{clickOutsideEnabled:"clickOutsideEnabled",attachOutsideOnClick:"attachOutsideOnClick",delayClickOutsideInit:"delayClickOutsideInit",emitOnBlur:"emitOnBlur",exclude:"exclude",excludeBeforeClick:"excludeBeforeClick",clickOutsideEvents:"clickOutsideEvents"},outputs:{clickOutside:"clickOutside"},features:[r.TTD]}),M.\u0275prov=r.Yz7({token:M,factory:function(w){return M.\u0275fac(w)}}),M}(),S=function(){function M(){}return M.\u0275fac=function(x){return new(x||M)},M.\u0275mod=r.oAB({type:M}),M.\u0275inj=r.cJS({}),M}()},72621:(v,b,i)=>{"use strict";i.d(b,{jh:()=>he,m9:()=>Ce});var r=i(89724),a=i(26215),f=i(65252);var S=i(6823);const M=[[255,99,132],[54,162,235],[255,206,86],[231,233,237],[75,192,192],[151,187,205],[220,220,220],[247,70,74],[70,191,189],[253,180,92],[148,159,177],[77,83,96]];function x(He,Pe){return"rgba("+He.concat(Pe).join(",")+")"}function B(He,Pe){return Math.floor(Math.random()*(Pe-He+1))+He}function q(He){return{backgroundColor:He.map(Pe=>x(Pe,.6)),borderColor:He.map(()=>"#fff"),pointBackgroundColor:He.map(Pe=>x(Pe,1)),pointBorderColor:He.map(()=>"#fff"),pointHoverBackgroundColor:He.map(Pe=>x(Pe,1)),pointHoverBorderColor:He.map(Pe=>x(Pe,1))}}function re(){return[B(0,255),B(0,255),B(0,255)]}function H(He){return M[He]||re()}function se(He){const Pe=new Array(He);for(let Ge=0;Ge<He;Ge++)Pe[Ge]=M[Ge]||re();return Pe}let ae=(()=>{class He{constructor(){this.pColorschemesOptions={},this.colorschemesOptions=new a.X({})}setColorschemesOptions(Ge){this.pColorschemesOptions=Ge,this.colorschemesOptions.next(Ge)}getColorschemesOptions(){return this.pColorschemesOptions}}return He.\u0275fac=function(Ge){return new(Ge||He)},He.\u0275prov=(0,r.Yz7)({factory:function(){return new He},token:He,providedIn:"root"}),He})();const fe={Default:0,Update:1,Refresh:2};fe[fe.Default]="Default",fe[fe.Update]="Update",fe[fe.Refresh]="Refresh";let he=(()=>{class He{constructor(Ge,Oe){this.element=Ge,this.themeService=Oe,this.options={},this.chartClick=new r.vpe,this.chartHover=new r.vpe,this.old={dataExists:!1,dataLength:0,datasetsExists:!1,datasetsLength:0,datasetsDataObjects:[],datasetsDataLengths:[],colorsExists:!1,colors:[],labelsExist:!1,labels:[],legendExists:!1,legend:{}},this.subs=[]}static registerPlugin(Ge){S.pluginService.register(Ge)}static unregisterPlugin(Ge){S.pluginService.unregister(Ge)}ngOnInit(){this.ctx=this.element.nativeElement.getContext("2d"),this.refresh(),this.subs.push(this.themeService.colorschemesOptions.subscribe(Ge=>this.themeChanged(Ge)))}themeChanged(Ge){this.refresh()}ngDoCheck(){if(!this.chart)return;let Ge=fe.Default;const Oe=Tt=>{Ge=Tt>Ge?Tt:Ge};switch(!!this.data!==this.old.dataExists&&(this.propagateDataToDatasets(this.data),this.old.dataExists=!!this.data,Oe(fe.Update)),this.data&&this.data.length!==this.old.dataLength&&(this.old.dataLength=this.data&&this.data.length||0,Oe(fe.Update)),!!this.datasets!==this.old.datasetsExists&&(this.old.datasetsExists=!!this.datasets,Oe(fe.Update)),this.datasets&&this.datasets.length!==this.old.datasetsLength&&(this.old.datasetsLength=this.datasets&&this.datasets.length||0,Oe(fe.Update)),this.datasets&&this.datasets.filter((Tt,We)=>Tt.data!==this.old.datasetsDataObjects[We]).length&&(this.old.datasetsDataObjects=this.datasets.map(Tt=>Tt.data),Oe(fe.Update)),this.datasets&&this.datasets.filter((Tt,We)=>Tt.data.length!==this.old.datasetsDataLengths[We]).length&&(this.old.datasetsDataLengths=this.datasets.map(Tt=>Tt.data.length),Oe(fe.Update)),!!this.colors!==this.old.colorsExists&&(this.old.colorsExists=!!this.colors,this.updateColors(),Oe(fe.Update)),this.colors&&this.colors.filter((Tt,We)=>!this.colorsEqual(Tt,this.old.colors[We])).length&&(this.old.colors=this.colors.map(Tt=>this.copyColor(Tt)),this.updateColors(),Oe(fe.Update)),!!this.labels!==this.old.labelsExist&&(this.old.labelsExist=!!this.labels,Oe(fe.Update)),this.labels&&this.labels.filter((Tt,We)=>!this.labelsEqual(Tt,this.old.labels[We])).length&&(this.old.labels=this.labels.map(Tt=>this.copyLabel(Tt)),Oe(fe.Update)),!!this.options.legend!==this.old.legendExists&&(this.old.legendExists=!!this.options.legend,Oe(fe.Refresh)),this.options.legend&&this.options.legend.position!==this.old.legend.position&&(this.old.legend.position=this.options.legend.position,Oe(fe.Refresh)),Ge){case fe.Default:break;case fe.Update:this.update();break;case fe.Refresh:this.refresh()}}copyLabel(Ge){return Array.isArray(Ge)?[...Ge]:Ge}labelsEqual(Ge,Oe){return Array.isArray(Ge)===Array.isArray(Oe)&&(Array.isArray(Ge)||Ge===Oe)&&(!Array.isArray(Ge)||Ge.length===Oe.length)&&(!Array.isArray(Ge)||0===Ge.filter((Tt,We)=>Tt!==Oe[We]).length)}copyColor(Ge){return{backgroundColor:Ge.backgroundColor,borderWidth:Ge.borderWidth,borderColor:Ge.borderColor,borderCapStyle:Ge.borderCapStyle,borderDash:Ge.borderDash,borderDashOffset:Ge.borderDashOffset,borderJoinStyle:Ge.borderJoinStyle,pointBorderColor:Ge.pointBorderColor,pointBackgroundColor:Ge.pointBackgroundColor,pointBorderWidth:Ge.pointBorderWidth,pointRadius:Ge.pointRadius,pointHoverRadius:Ge.pointHoverRadius,pointHitRadius:Ge.pointHitRadius,pointHoverBackgroundColor:Ge.pointHoverBackgroundColor,pointHoverBorderColor:Ge.pointHoverBorderColor,pointHoverBorderWidth:Ge.pointHoverBorderWidth,pointStyle:Ge.pointStyle,hoverBackgroundColor:Ge.hoverBackgroundColor,hoverBorderColor:Ge.hoverBorderColor,hoverBorderWidth:Ge.hoverBorderWidth}}colorsEqual(Ge,Oe){return!Ge==!Oe&&(!Ge||Ge.backgroundColor===Oe.backgroundColor&&Ge.borderWidth===Oe.borderWidth&&Ge.borderColor===Oe.borderColor&&Ge.borderCapStyle===Oe.borderCapStyle&&Ge.borderDash===Oe.borderDash&&Ge.borderDashOffset===Oe.borderDashOffset&&Ge.borderJoinStyle===Oe.borderJoinStyle&&Ge.pointBorderColor===Oe.pointBorderColor&&Ge.pointBackgroundColor===Oe.pointBackgroundColor&&Ge.pointBorderWidth===Oe.pointBorderWidth&&Ge.pointRadius===Oe.pointRadius&&Ge.pointHoverRadius===Oe.pointHoverRadius&&Ge.pointHitRadius===Oe.pointHitRadius&&Ge.pointHoverBackgroundColor===Oe.pointHoverBackgroundColor&&Ge.pointHoverBorderColor===Oe.pointHoverBorderColor&&Ge.pointHoverBorderWidth===Oe.pointHoverBorderWidth&&Ge.pointStyle===Oe.pointStyle&&Ge.hoverBackgroundColor===Oe.hoverBackgroundColor&&Ge.hoverBorderColor===Oe.hoverBorderColor&&Ge.hoverBorderWidth===Oe.hoverBorderWidth)}updateColors(){this.datasets.forEach((Ge,Oe)=>{this.colors&&this.colors[Oe]?Object.assign(Ge,this.colors[Oe]):Object.assign(Ge,function w(He,Pe,Ge){if("pie"===He||"doughnut"===He)return q(se(Ge));if("polarArea"===He)return function ue(He){return{backgroundColor:He.map(Pe=>x(Pe,.6)),borderColor:He.map(Pe=>x(Pe,1)),hoverBackgroundColor:He.map(Pe=>x(Pe,.8)),hoverBorderColor:He.map(Pe=>x(Pe,1))}}(se(Ge));if("line"===He||"radar"===He)return function W(He){return{backgroundColor:x(He,.4),borderColor:x(He,1),pointBackgroundColor:x(He,1),pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:x(He,.8)}}(H(Pe));if("bar"===He||"horizontalBar"===He)return function j(He){return{backgroundColor:x(He,.6),borderColor:x(He,1),hoverBackgroundColor:x(He,.8),hoverBorderColor:x(He,1)}}(H(Pe));if("bubble"===He||"scatter"===He)return q(se(Ge));throw new Error(`getColors - Unsupported chart type ${He}`)}(this.chartType,Oe,Ge.data.length),Object.assign({},Ge))})}ngOnChanges(Ge){let Oe=fe.Default;const Tt=We=>{Oe=We>Oe?We:Oe};switch(Ge.hasOwnProperty("data")&&Ge.data.currentValue&&(this.propagateDataToDatasets(Ge.data.currentValue),Tt(fe.Update)),Ge.hasOwnProperty("datasets")&&Ge.datasets.currentValue&&(this.propagateDatasetsToData(Ge.datasets.currentValue),Tt(fe.Update)),Ge.hasOwnProperty("labels")&&(this.chart&&(this.chart.data.labels=Ge.labels.currentValue),Tt(fe.Update)),Ge.hasOwnProperty("legend")&&(this.chart&&(this.chart.config.options.legend.display=Ge.legend.currentValue,this.chart.generateLegend()),Tt(fe.Update)),Ge.hasOwnProperty("options")&&Tt(fe.Refresh),Oe){case fe.Update:this.update();break;case fe.Refresh:case fe.Default:this.refresh()}}ngOnDestroy(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.subs.forEach(Ge=>Ge.unsubscribe())}update(Ge){if(this.chart)return this.chart.update(Ge)}hideDataset(Ge,Oe){this.chart.getDatasetMeta(Ge).hidden=Oe,this.chart.update()}isDatasetHidden(Ge){return this.chart.getDatasetMeta(Ge).hidden}toBase64Image(){return this.chart.toBase64Image()}getChartConfiguration(){const Ge=this.getDatasets(),Oe=Object.assign({},this.options);!1===this.legend&&(Oe.legend={display:!1}),Oe.hover=Oe.hover||{},Oe.hover.onHover||(Oe.hover.onHover=(We,Qt)=>{Qt&&!Qt.length||this.chartHover.emit({event:We,active:Qt})}),Oe.onClick||(Oe.onClick=(We,Qt)=>{this.chartClick.emit({event:We,active:Qt})});const Tt=this.smartMerge(Oe,this.themeService.getColorschemesOptions());return{type:this.chartType,data:{labels:this.labels||[],datasets:Ge},plugins:this.plugins,options:Tt}}getChartBuilder(Ge){const Oe=this.getChartConfiguration();return new S.Chart(Ge,Oe)}smartMerge(Ge,Oe,Tt=0){if(0===Tt&&(Ge=function p(He){return(0,f.Z)(He,5)}(Ge)),Object.keys(Oe).forEach(Qt=>{if(Array.isArray(Oe[Qt])){const Nt=Ge[Qt];Nt&&Nt.forEach(Yt=>{this.smartMerge(Yt,Oe[Qt][0],Tt+1)})}else"object"==typeof Oe[Qt]?(Qt in Ge||(Ge[Qt]={}),this.smartMerge(Ge[Qt],Oe[Qt],Tt+1)):Ge[Qt]=Oe[Qt]}),0===Tt)return Ge}isMultiLineLabel(Ge){return Array.isArray(Ge)}joinLabel(Ge){return Ge?this.isMultiLineLabel(Ge)?Ge.join(" "):Ge:null}propagateDatasetsToData(Ge){this.data=this.datasets.map(Oe=>Oe.data),this.chart&&(this.chart.data.datasets=Ge),this.updateColors()}propagateDataToDatasets(Ge){this.isMultiDataSet(Ge)?this.datasets&&Ge.length===this.datasets.length?this.datasets.forEach((Oe,Tt)=>{Oe.data=Ge[Tt]}):(this.datasets=Ge.map((Oe,Tt)=>({data:Oe,label:this.joinLabel(this.labels[Tt])||`Label ${Tt}`})),this.chart&&(this.chart.data.datasets=this.datasets)):this.datasets?(this.datasets[0]||(this.datasets[0]={}),this.datasets[0].data=Ge,this.datasets.splice(1)):(this.datasets=[{data:Ge}],this.chart&&(this.chart.data.datasets=this.datasets)),this.updateColors()}isMultiDataSet(Ge){return Array.isArray(Ge[0])}getDatasets(){if(!this.datasets&&!this.data)throw new Error(`ng-charts configuration error, data or datasets field are required to render chart ${this.chartType}`);return this.datasets?(this.propagateDatasetsToData(this.datasets),this.datasets):this.data?(this.propagateDataToDatasets(this.data),this.datasets):void 0}refresh(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.ctx&&(this.chart=this.getChartBuilder(this.ctx))}}return He.\u0275fac=function(Ge){return new(Ge||He)(r.Y36(r.SBq),r.Y36(ae))},He.\u0275dir=r.lG2({type:He,selectors:[["canvas","baseChart",""]],inputs:{options:"options",data:"data",datasets:"datasets",labels:"labels",chartType:"chartType",colors:"colors",legend:"legend",plugins:"plugins"},outputs:{chartClick:"chartClick",chartHover:"chartHover"},exportAs:["base-chart"],features:[r.TTD]}),He})(),Ce=(()=>{class He{}return He.\u0275fac=function(Ge){return new(Ge||He)},He.\u0275mod=r.oAB({type:He}),He.\u0275inj=r.cJS({imports:[[]]}),He})()},37496:(v,b,i)=>{"use strict";i.d(b,{b:()=>f,i:()=>a});var r=i(89724);let a=(()=>{class u{transform(p,g,S){return S?g.call(S,p):g(p)}}return u.\u0275fac=function(p){return new(p||u)},u.\u0275pipe=r.Yjl({name:"pipeFunction",type:u,pure:!0}),u})(),f=(()=>{class u{}return u.\u0275fac=function(p){return new(p||u)},u.\u0275mod=r.oAB({type:u}),u.\u0275inj=r.cJS({}),u})()},18228:v=>{"use strict";var b=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function a(u){if(null==u)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(u)}v.exports=function f(){try{if(!Object.assign)return!1;var u=new String("abc");if(u[5]="de","5"===Object.getOwnPropertyNames(u)[0])return!1;for(var e={},p=0;p<10;p++)e["_"+String.fromCharCode(p)]=p;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(M){return e[M]}).join(""))return!1;var S={};return"abcdefghijklmnopqrst".split("").forEach(function(M){S[M]=M}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},S)).join("")}catch(M){return!1}}()?Object.assign:function(u,e){for(var p,S,g=a(u),M=1;M<arguments.length;M++){for(var w in p=Object(arguments[M]))i.call(p,w)&&(g[w]=p[w]);if(b){S=b(p);for(var x=0;x<S.length;x++)r.call(p,S[x])&&(g[S[x]]=p[S[x]])}}return g}},81380:(v,b,i)=>{var r="function"==typeof Map&&Map.prototype,a=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,f=r&&a&&"function"==typeof a.get?a.get:null,u=r&&Map.prototype.forEach,e="function"==typeof Set&&Set.prototype,p=Object.getOwnPropertyDescriptor&&e?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,g=e&&p&&"function"==typeof p.get?p.get:null,S=e&&Set.prototype.forEach,w="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,B="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,j="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,q=Boolean.prototype.valueOf,ue=Object.prototype.toString,re=Function.prototype.toString,H=String.prototype.match,se=String.prototype.slice,ae=String.prototype.replace,ie=String.prototype.toUpperCase,fe=String.prototype.toLowerCase,he=RegExp.prototype.test,Ce=Array.prototype.concat,ce=Array.prototype.join,Be=Array.prototype.slice,Ve=Math.floor,Xe="function"==typeof BigInt?BigInt.prototype.valueOf:null,He=Object.getOwnPropertySymbols,Pe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Ge="function"==typeof Symbol&&"object"==typeof Symbol.iterator,Oe="function"==typeof Symbol&&Symbol.toStringTag&&(Symbol,1)?Symbol.toStringTag:null,Tt=Object.prototype.propertyIsEnumerable,We=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(mn){return mn.__proto__}:null);function Qt(mn,Rn){if(mn===1/0||mn===-1/0||mn!=mn||mn&&mn>-1e3&&mn<1e3||he.call(/e/,Rn))return Rn;var Wn=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof mn){var et=mn<0?-Ve(-mn):Ve(mn);if(et!==mn){var Le=String(et),Re=se.call(Rn,Le.length+1);return ae.call(Le,Wn,"$&_")+"."+ae.call(ae.call(Re,/([0-9]{3})/g,"$&_"),/_$/,"")}}return ae.call(Rn,Wn,"$&_")}var Nt=i(24654),Yt=Nt.custom,dn=hr(Yt)?Yt:null;function rn(mn,Rn,Wn){var et="double"===(Wn.quoteStyle||Rn)?'"':"'";return et+mn+et}function vt(mn){return ae.call(String(mn),/"/g,"&quot;")}function xt(mn){return!("[object Array]"!==er(mn)||Oe&&"object"==typeof mn&&Oe in mn)}function Gt(mn){return!("[object RegExp]"!==er(mn)||Oe&&"object"==typeof mn&&Oe in mn)}function hr(mn){if(Ge)return mn&&"object"==typeof mn&&mn instanceof Symbol;if("symbol"==typeof mn)return!0;if(!mn||"object"!=typeof mn||!Pe)return!1;try{return Pe.call(mn),!0}catch(Rn){}return!1}v.exports=function mn(Rn,Wn,et,Le){var Re=Wn||{};if(Hn(Re,"quoteStyle")&&"single"!==Re.quoteStyle&&"double"!==Re.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(Hn(Re,"maxStringLength")&&("number"==typeof Re.maxStringLength?Re.maxStringLength<0&&Re.maxStringLength!==1/0:null!==Re.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var Se=!Hn(Re,"customInspect")||Re.customInspect;if("boolean"!=typeof Se&&"symbol"!==Se)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(Hn(Re,"indent")&&null!==Re.indent&&"\t"!==Re.indent&&!(parseInt(Re.indent,10)===Re.indent&&Re.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(Hn(Re,"numericSeparator")&&"boolean"!=typeof Re.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var dt=Re.numericSeparator;if(void 0===Rn)return"undefined";if(null===Rn)return"null";if("boolean"==typeof Rn)return Rn?"true":"false";if("string"==typeof Rn)return vn(Rn,Re);if("number"==typeof Rn){if(0===Rn)return 1/0/Rn>0?"0":"-0";var st=String(Rn);return dt?Qt(Rn,st):st}if("bigint"==typeof Rn){var nn=String(Rn)+"n";return dt?Qt(Rn,nn):nn}var Fe=void 0===Re.depth?5:Re.depth;if(void 0===et&&(et=0),et>=Fe&&Fe>0&&"object"==typeof Rn)return xt(Rn)?"[Array]":"[Object]";var Lr=function ui(mn,Rn){var Wn;if("\t"===mn.indent)Wn="\t";else{if(!("number"==typeof mn.indent&&mn.indent>0))return null;Wn=ce.call(Array(mn.indent+1)," ")}return{base:Wn,prev:ce.call(Array(Rn+1),Wn)}}(Re,et);if(void 0===Le)Le=[];else if(ei(Le,Rn)>=0)return"[Circular]";function ti(Xo,ir,si){if(ir&&(Le=Be.call(Le)).push(ir),si){var kn={depth:Re.depth};return Hn(Re,"quoteStyle")&&(kn.quoteStyle=Re.quoteStyle),mn(Xo,kn,et+1,Le)}return mn(Xo,Re,et+1,Le)}if("function"==typeof Rn&&!Gt(Rn)){var Ut=function _r(mn){if(mn.name)return mn.name;var Rn=H.call(re.call(mn),/^function\s*([\w$]+)/);return Rn?Rn[1]:null}(Rn),Dn=Ji(Rn,ti);return"[Function"+(Ut?": "+Ut:" (anonymous)")+"]"+(Dn.length>0?" { "+ce.call(Dn,", ")+" }":"")}if(hr(Rn)){var Et=Ge?ae.call(String(Rn),/^(Symbol\(.*\))_[^)]*$/,"$1"):Pe.call(Rn);return"object"!=typeof Rn||Ge?Et:Xn(Et)}if(function an(mn){return!(!mn||"object"!=typeof mn)&&("undefined"!=typeof HTMLElement&&mn instanceof HTMLElement||"string"==typeof mn.nodeName&&"function"==typeof mn.getAttribute)}(Rn)){for(var $t="<"+fe.call(String(Rn.nodeName)),_t=Rn.attributes||[],yt=0;yt<_t.length;yt++)$t+=" "+_t[yt].name+"="+rn(vt(_t[yt].value),"double",Re);return $t+=">",Rn.childNodes&&Rn.childNodes.length&&($t+="..."),$t+"</"+fe.call(String(Rn.nodeName))+">"}if(xt(Rn)){if(0===Rn.length)return"[]";var Vt=Ji(Rn,ti);return Lr&&!function Gi(mn){for(var Rn=0;Rn<mn.length;Rn++)if(ei(mn[Rn],"\n")>=0)return!1;return!0}(Vt)?"["+vr(Vt,Lr)+"]":"[ "+ce.call(Vt,", ")+" ]"}if(function Fn(mn){return!("[object Error]"!==er(mn)||Oe&&"object"==typeof mn&&Oe in mn)}(Rn)){var yn=Ji(Rn,ti);return"cause"in Error.prototype||!("cause"in Rn)||Tt.call(Rn,"cause")?0===yn.length?"["+String(Rn)+"]":"{ ["+String(Rn)+"] "+ce.call(yn,", ")+" }":"{ ["+String(Rn)+"] "+ce.call(Ce.call("[cause]: "+ti(Rn.cause),yn),", ")+" }"}if("object"==typeof Rn&&Se){if(dn&&"function"==typeof Rn[dn]&&Nt)return Nt(Rn,{depth:Fe-et});if("symbol"!==Se&&"function"==typeof Rn.inspect)return Rn.inspect()}if(function bi(mn){if(!f||!mn||"object"!=typeof mn)return!1;try{f.call(mn);try{g.call(mn)}catch(Rn){return!0}return mn instanceof Map}catch(Rn){}return!1}(Rn)){var Cr=[];return u&&u.call(Rn,function(Xo,ir){Cr.push(ti(ir,Rn,!0)+" => "+ti(Xo,Rn))}),ri("Map",f.call(Rn),Cr,Lr)}if(function xo(mn){if(!g||!mn||"object"!=typeof mn)return!1;try{g.call(mn);try{f.call(mn)}catch(Rn){return!0}return mn instanceof Set}catch(Rn){}return!1}(Rn)){var xi=[];return S&&S.call(Rn,function(Xo){xi.push(ti(Xo,Rn))}),ri("Set",g.call(Rn),xi,Lr)}if(function fi(mn){if(!w||!mn||"object"!=typeof mn)return!1;try{w.call(mn,w);try{B.call(mn,B)}catch(Rn){return!0}return mn instanceof WeakMap}catch(Rn){}return!1}(Rn))return zn("WeakMap");if(function Er(mn){if(!B||!mn||"object"!=typeof mn)return!1;try{B.call(mn,B);try{w.call(mn,w)}catch(Rn){return!0}return mn instanceof WeakSet}catch(Rn){}return!1}(Rn))return zn("WeakSet");if(function no(mn){if(!j||!mn||"object"!=typeof mn)return!1;try{return j.call(mn),!0}catch(Rn){}return!1}(Rn))return zn("WeakRef");if(function mi(mn){return!("[object Number]"!==er(mn)||Oe&&"object"==typeof mn&&Oe in mn)}(Rn))return Xn(ti(Number(Rn)));if(function Br(mn){if(!mn||"object"!=typeof mn||!Xe)return!1;try{return Xe.call(mn),!0}catch(Rn){}return!1}(Rn))return Xn(ti(Xe.call(Rn)));if(function ci(mn){return!("[object Boolean]"!==er(mn)||Oe&&"object"==typeof mn&&Oe in mn)}(Rn))return Xn(q.call(Rn));if(function pr(mn){return!("[object String]"!==er(mn)||Oe&&"object"==typeof mn&&Oe in mn)}(Rn))return Xn(ti(String(Rn)));if(!function Ct(mn){return!("[object Date]"!==er(mn)||Oe&&"object"==typeof mn&&Oe in mn)}(Rn)&&!Gt(Rn)){var yi=Ji(Rn,ti),Yo=We?We(Rn)===Object.prototype:Rn instanceof Object||Rn.constructor===Object,Qo=Rn instanceof Object?"":"null prototype",lo=!Yo&&Oe&&Object(Rn)===Rn&&Oe in Rn?se.call(er(Rn),8,-1):Qo?"Object":"",ko=(Yo||"function"!=typeof Rn.constructor?"":Rn.constructor.name?Rn.constructor.name+" ":"")+(lo||Qo?"["+ce.call(Ce.call([],lo||[],Qo||[]),": ")+"] ":"");return 0===yi.length?ko+"{}":Lr?ko+"{"+vr(yi,Lr)+"}":ko+"{ "+ce.call(yi,", ")+" }"}return String(Rn)};var Ur=Object.prototype.hasOwnProperty||function(mn){return mn in this};function Hn(mn,Rn){return Ur.call(mn,Rn)}function er(mn){return ue.call(mn)}function ei(mn,Rn){if(mn.indexOf)return mn.indexOf(Rn);for(var Wn=0,et=mn.length;Wn<et;Wn++)if(mn[Wn]===Rn)return Wn;return-1}function vn(mn,Rn){if(mn.length>Rn.maxStringLength){var Wn=mn.length-Rn.maxStringLength,et="... "+Wn+" more character"+(Wn>1?"s":"");return vn(se.call(mn,0,Rn.maxStringLength),Rn)+et}return rn(ae.call(ae.call(mn,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Zn),"single",Rn)}function Zn(mn){var Rn=mn.charCodeAt(0),Wn={8:"b",9:"t",10:"n",12:"f",13:"r"}[Rn];return Wn?"\\"+Wn:"\\x"+(Rn<16?"0":"")+ie.call(Rn.toString(16))}function Xn(mn){return"Object("+mn+")"}function zn(mn){return mn+" { ? }"}function ri(mn,Rn,Wn,et){return mn+" ("+Rn+") {"+(et?vr(Wn,et):ce.call(Wn,", "))+"}"}function vr(mn,Rn){if(0===mn.length)return"";var Wn="\n"+Rn.prev+Rn.base;return Wn+ce.call(mn,","+Wn)+"\n"+Rn.prev}function Ji(mn,Rn){var Wn=xt(mn),et=[];if(Wn){et.length=mn.length;for(var Le=0;Le<mn.length;Le++)et[Le]=Hn(mn,Le)?Rn(mn[Le],mn):""}var Se,Re="function"==typeof He?He(mn):[];if(Ge){Se={};for(var dt=0;dt<Re.length;dt++)Se["$"+Re[dt]]=Re[dt]}for(var st in mn)!Hn(mn,st)||Wn&&String(Number(st))===st&&st<mn.length||Ge&&Se["$"+st]instanceof Symbol||(he.call(/[^\w$]/,st)?et.push(Rn(st,mn)+": "+Rn(mn[st],mn)):et.push(st+": "+Rn(mn[st],mn)));if("function"==typeof He)for(var nn=0;nn<Re.length;nn++)Tt.call(mn,Re[nn])&&et.push("["+Rn(Re[nn])+"]: "+Rn(mn[Re[nn]],mn));return et}},25119:(v,b,i)=>{"use strict";var r=i(88411);function a(){}function f(){}f.resetWarningCache=a,v.exports=function(){function u(g,S,M,w,x,B){if(B!==r){var W=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw W.name="Invariant Violation",W}}function e(){return u}u.isRequired=u;var p={array:u,bigint:u,bool:u,func:u,number:u,object:u,string:u,symbol:u,any:u,arrayOf:e,element:u,elementType:u,instanceOf:e,node:u,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:f,resetWarningCache:a};return p.PropTypes=p,p}},76874:(v,b,i)=>{v.exports=i(25119)()},88411:v=>{"use strict";v.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},87504:function(v,b,i){var r;v=i.nmd(v),function(a){"object"==typeof global&&global;var p,g=2147483647,S=36,ue=/^xn--/,re=/[^\x20-\x7E]/,H=/[\x2E\u3002\uFF0E\uFF61]/g,se={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},ie=Math.floor,fe=String.fromCharCode;function Ce(Nt){throw RangeError(se[Nt])}function ce(Nt,Yt){for(var dn=Nt.length,rn=[];dn--;)rn[dn]=Yt(Nt[dn]);return rn}function Be(Nt,Yt){var dn=Nt.split("@"),rn="";return dn.length>1&&(rn=dn[0]+"@",Nt=dn[1]),rn+ce((Nt=Nt.replace(H,".")).split("."),Yt).join(".")}function Ve(Nt){for(var vt,xt,Yt=[],dn=0,rn=Nt.length;dn<rn;)(vt=Nt.charCodeAt(dn++))>=55296&&vt<=56319&&dn<rn?56320==(64512&(xt=Nt.charCodeAt(dn++)))?Yt.push(((1023&vt)<<10)+(1023&xt)+65536):(Yt.push(vt),dn--):Yt.push(vt);return Yt}function Xe(Nt){return ce(Nt,function(Yt){var dn="";return Yt>65535&&(dn+=fe((Yt-=65536)>>>10&1023|55296),Yt=56320|1023&Yt),dn+fe(Yt)}).join("")}function He(Nt){return Nt-48<10?Nt-22:Nt-65<26?Nt-65:Nt-97<26?Nt-97:S}function Pe(Nt,Yt){return Nt+22+75*(Nt<26)-((0!=Yt)<<5)}function Ge(Nt,Yt,dn){var rn=0;for(Nt=dn?ie(Nt/700):Nt>>1,Nt+=ie(Nt/Yt);Nt>455;rn+=S)Nt=ie(Nt/35);return ie(rn+36*Nt/(Nt+38))}function Oe(Nt){var rn,Gt,Fn,pr,mi,ci,hr,Br,Ur,Hn,Yt=[],dn=Nt.length,vt=0,xt=128,Ct=72;for((Gt=Nt.lastIndexOf("-"))<0&&(Gt=0),Fn=0;Fn<Gt;++Fn)Nt.charCodeAt(Fn)>=128&&Ce("not-basic"),Yt.push(Nt.charCodeAt(Fn));for(pr=Gt>0?Gt+1:0;pr<dn;){for(mi=vt,ci=1,hr=S;pr>=dn&&Ce("invalid-input"),((Br=He(Nt.charCodeAt(pr++)))>=S||Br>ie((g-vt)/ci))&&Ce("overflow"),vt+=Br*ci,!(Br<(Ur=hr<=Ct?1:hr>=Ct+26?26:hr-Ct));hr+=S)ci>ie(g/(Hn=S-Ur))&&Ce("overflow"),ci*=Hn;Ct=Ge(vt-mi,rn=Yt.length+1,0==mi),ie(vt/rn)>g-xt&&Ce("overflow"),xt+=ie(vt/rn),vt%=rn,Yt.splice(vt++,0,xt)}return Xe(Yt)}function Tt(Nt){var Yt,dn,rn,vt,xt,Ct,Gt,Fn,pr,mi,ci,Br,Ur,Hn,er,hr=[];for(Br=(Nt=Ve(Nt)).length,Yt=128,dn=0,xt=72,Ct=0;Ct<Br;++Ct)(ci=Nt[Ct])<128&&hr.push(fe(ci));for(rn=vt=hr.length,vt&&hr.push("-");rn<Br;){for(Gt=g,Ct=0;Ct<Br;++Ct)(ci=Nt[Ct])>=Yt&&ci<Gt&&(Gt=ci);for(Gt-Yt>ie((g-dn)/(Ur=rn+1))&&Ce("overflow"),dn+=(Gt-Yt)*Ur,Yt=Gt,Ct=0;Ct<Br;++Ct)if((ci=Nt[Ct])<Yt&&++dn>g&&Ce("overflow"),ci==Yt){for(Fn=dn,pr=S;!(Fn<(mi=pr<=xt?1:pr>=xt+26?26:pr-xt));pr+=S)hr.push(fe(Pe(mi+(er=Fn-mi)%(Hn=S-mi),0))),Fn=ie(er/Hn);hr.push(fe(Pe(Fn,0))),xt=Ge(dn,Ur,rn==vt),dn=0,++rn}++dn,++Yt}return hr.join("")}p={version:"1.3.2",ucs2:{decode:Ve,encode:Xe},decode:Oe,encode:Tt,toASCII:function Qt(Nt){return Be(Nt,function(Yt){return re.test(Yt)?"xn--"+Tt(Yt):Yt})},toUnicode:function We(Nt){return Be(Nt,function(Yt){return ue.test(Yt)?Oe(Yt.slice(4).toLowerCase()):Yt})}},void 0!==(r=function(){return p}.call(b,i,b,v))&&(v.exports=r)}()},8157:v=>{"use strict";var b=String.prototype.replace,i=/%20/g;v.exports={default:"RFC3986",formatters:{RFC1738:function(a){return b.call(a,i,"+")},RFC3986:function(a){return String(a)}},RFC1738:"RFC1738",RFC3986:"RFC3986"}},59009:(v,b,i)=>{"use strict";var r=i(75672),a=i(19913),f=i(8157);v.exports={formats:f,parse:a,stringify:r}},19913:(v,b,i)=>{"use strict";var r=i(16835),a=Object.prototype.hasOwnProperty,f=Array.isArray,u={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},p=function(W,j){return W&&"string"==typeof W&&j.comma&&W.indexOf(",")>-1?W.split(","):W},x=function(j,q,ue,re){if(j){var H=ue.allowDots?j.replace(/\.([^.[]+)/g,"[$1]"):j,ae=/(\[[^[\]]*])/g,ie=ue.depth>0&&/(\[[^[\]]*])/.exec(H),fe=ie?H.slice(0,ie.index):H,he=[];if(fe){if(!ue.plainObjects&&a.call(Object.prototype,fe)&&!ue.allowPrototypes)return;he.push(fe)}for(var Ce=0;ue.depth>0&&null!==(ie=ae.exec(H))&&Ce<ue.depth;){if(Ce+=1,!ue.plainObjects&&a.call(Object.prototype,ie[1].slice(1,-1))&&!ue.allowPrototypes)return;he.push(ie[1])}return ie&&he.push("["+H.slice(ie.index)+"]"),function(W,j,q,ue){for(var re=ue?j:p(j,q),H=W.length-1;H>=0;--H){var se,ae=W[H];if("[]"===ae&&q.parseArrays)se=[].concat(re);else{se=q.plainObjects?Object.create(null):{};var ie="["===ae.charAt(0)&&"]"===ae.charAt(ae.length-1)?ae.slice(1,-1):ae,fe=parseInt(ie,10);q.parseArrays||""!==ie?!isNaN(fe)&&ae!==ie&&String(fe)===ie&&fe>=0&&q.parseArrays&&fe<=q.arrayLimit?(se=[])[fe]=re:"__proto__"!==ie&&(se[ie]=re):se={0:re}}re=se}return re}(he,q,ue,re)}};v.exports=function(W,j){var q=function(j){if(!j)return u;if(null!=j.decoder&&"function"!=typeof j.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==j.charset&&"utf-8"!==j.charset&&"iso-8859-1"!==j.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");return{allowDots:void 0===j.allowDots?u.allowDots:!!j.allowDots,allowPrototypes:"boolean"==typeof j.allowPrototypes?j.allowPrototypes:u.allowPrototypes,allowSparse:"boolean"==typeof j.allowSparse?j.allowSparse:u.allowSparse,arrayLimit:"number"==typeof j.arrayLimit?j.arrayLimit:u.arrayLimit,charset:void 0===j.charset?u.charset:j.charset,charsetSentinel:"boolean"==typeof j.charsetSentinel?j.charsetSentinel:u.charsetSentinel,comma:"boolean"==typeof j.comma?j.comma:u.comma,decoder:"function"==typeof j.decoder?j.decoder:u.decoder,delimiter:"string"==typeof j.delimiter||r.isRegExp(j.delimiter)?j.delimiter:u.delimiter,depth:"number"==typeof j.depth||!1===j.depth?+j.depth:u.depth,ignoreQueryPrefix:!0===j.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof j.interpretNumericEntities?j.interpretNumericEntities:u.interpretNumericEntities,parameterLimit:"number"==typeof j.parameterLimit?j.parameterLimit:u.parameterLimit,parseArrays:!1!==j.parseArrays,plainObjects:"boolean"==typeof j.plainObjects?j.plainObjects:u.plainObjects,strictNullHandling:"boolean"==typeof j.strictNullHandling?j.strictNullHandling:u.strictNullHandling}}(j);if(""===W||null==W)return q.plainObjects?Object.create(null):{};for(var ue="string"==typeof W?function(j,q){var ie,ue={__proto__:null},se=(q.ignoreQueryPrefix?j.replace(/^\?/,""):j).split(q.delimiter,q.parameterLimit===1/0?void 0:q.parameterLimit),ae=-1,fe=q.charset;if(q.charsetSentinel)for(ie=0;ie<se.length;++ie)0===se[ie].indexOf("utf8=")&&("utf8=%E2%9C%93"===se[ie]?fe="utf-8":"utf8=%26%2310003%3B"===se[ie]&&(fe="iso-8859-1"),ae=ie,ie=se.length);for(ie=0;ie<se.length;++ie)if(ie!==ae){var Be,Ve,he=se[ie],Ce=he.indexOf("]="),ce=-1===Ce?he.indexOf("="):Ce+1;-1===ce?(Be=q.decoder(he,u.decoder,fe,"key"),Ve=q.strictNullHandling?null:""):(Be=q.decoder(he.slice(0,ce),u.decoder,fe,"key"),Ve=r.maybeMap(p(he.slice(ce+1),q),function(Xe){return q.decoder(Xe,u.decoder,fe,"value")})),Ve&&q.interpretNumericEntities&&"iso-8859-1"===fe&&(Ve=Ve.replace(/&#(\d+);/g,function(j,q){return String.fromCharCode(parseInt(q,10))})),he.indexOf("[]=")>-1&&(Ve=f(Ve)?[Ve]:Ve),ue[Be]=a.call(ue,Be)?r.combine(ue[Be],Ve):Ve}return ue}(W,q):W,re=q.plainObjects?Object.create(null):{},H=Object.keys(ue),se=0;se<H.length;++se){var ae=H[se],ie=x(ae,ue[ae],q,"string"==typeof W);re=r.merge(re,ie,q)}return!0===q.allowSparse?re:r.compact(re)}},75672:(v,b,i)=>{"use strict";var r=i(11144),a=i(16835),f=i(8157),u=Object.prototype.hasOwnProperty,e={brackets:function(re){return re+"[]"},comma:"comma",indices:function(re,H){return re+"["+H+"]"},repeat:function(re){return re}},p=Array.isArray,g=Array.prototype.push,S=function(ue,re){g.apply(ue,p(re)?re:[re])},M=Date.prototype.toISOString,w=f.default,x={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:a.encode,encodeValuesOnly:!1,format:w,formatter:f.formatters[w],indices:!1,serializeDate:function(re){return M.call(re)},skipNulls:!1,strictNullHandling:!1},W={},j=function ue(re,H,se,ae,ie,fe,he,Ce,ce,Be,Ve,Xe,He,Pe,Ge,Oe){for(var Tt=re,We=Oe,Qt=0,Nt=!1;void 0!==(We=We.get(W))&&!Nt;){var Yt=We.get(re);if(Qt+=1,void 0!==Yt){if(Yt===Qt)throw new RangeError("Cyclic object value");Nt=!0}void 0===We.get(W)&&(Qt=0)}if("function"==typeof Ce?Tt=Ce(H,Tt):Tt instanceof Date?Tt=Ve(Tt):"comma"===se&&p(Tt)&&(Tt=a.maybeMap(Tt,function(hr){return hr instanceof Date?Ve(hr):hr})),null===Tt){if(ie)return he&&!Pe?he(H,x.encoder,Ge,"key",Xe):H;Tt=""}if(function(re){return"string"==typeof re||"number"==typeof re||"boolean"==typeof re||"symbol"==typeof re||"bigint"==typeof re}(Tt)||a.isBuffer(Tt))return he?[He(Pe?H:he(H,x.encoder,Ge,"key",Xe))+"="+He(he(Tt,x.encoder,Ge,"value",Xe))]:[He(H)+"="+He(String(Tt))];var vt,rn=[];if(void 0===Tt)return rn;if("comma"===se&&p(Tt))Pe&&he&&(Tt=a.maybeMap(Tt,he)),vt=[{value:Tt.length>0?Tt.join(",")||null:void 0}];else if(p(Ce))vt=Ce;else{var xt=Object.keys(Tt);vt=ce?xt.sort(ce):xt}for(var Ct=ae&&p(Tt)&&1===Tt.length?H+"[]":H,Gt=0;Gt<vt.length;++Gt){var Fn=vt[Gt],pr="object"==typeof Fn&&void 0!==Fn.value?Fn.value:Tt[Fn];if(!fe||null!==pr){var mi=p(Tt)?"function"==typeof se?se(Ct,Fn):Ct:Ct+(Be?"."+Fn:"["+Fn+"]");Oe.set(re,Qt);var ci=r();ci.set(W,Oe),S(rn,ue(pr,mi,se,ae,ie,fe,"comma"===se&&Pe&&p(Tt)?null:he,Ce,ce,Be,Ve,Xe,He,Pe,Ge,ci))}}return rn};v.exports=function(ue,re){var ae,H=ue,se=function(re){if(!re)return x;if(null!=re.encoder&&"function"!=typeof re.encoder)throw new TypeError("Encoder has to be a function.");var H=re.charset||x.charset;if(void 0!==re.charset&&"utf-8"!==re.charset&&"iso-8859-1"!==re.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var se=f.default;if(void 0!==re.format){if(!u.call(f.formatters,re.format))throw new TypeError("Unknown format option provided.");se=re.format}var ae=f.formatters[se],ie=x.filter;return("function"==typeof re.filter||p(re.filter))&&(ie=re.filter),{addQueryPrefix:"boolean"==typeof re.addQueryPrefix?re.addQueryPrefix:x.addQueryPrefix,allowDots:void 0===re.allowDots?x.allowDots:!!re.allowDots,charset:H,charsetSentinel:"boolean"==typeof re.charsetSentinel?re.charsetSentinel:x.charsetSentinel,delimiter:void 0===re.delimiter?x.delimiter:re.delimiter,encode:"boolean"==typeof re.encode?re.encode:x.encode,encoder:"function"==typeof re.encoder?re.encoder:x.encoder,encodeValuesOnly:"boolean"==typeof re.encodeValuesOnly?re.encodeValuesOnly:x.encodeValuesOnly,filter:ie,format:se,formatter:ae,serializeDate:"function"==typeof re.serializeDate?re.serializeDate:x.serializeDate,skipNulls:"boolean"==typeof re.skipNulls?re.skipNulls:x.skipNulls,sort:"function"==typeof re.sort?re.sort:null,strictNullHandling:"boolean"==typeof re.strictNullHandling?re.strictNullHandling:x.strictNullHandling}}(re);"function"==typeof se.filter?H=(0,se.filter)("",H):p(se.filter)&&(ae=se.filter);var fe=[];if("object"!=typeof H||null===H)return"";var Ce=e[re&&re.arrayFormat in e?re.arrayFormat:re&&"indices"in re?re.indices?"indices":"repeat":"indices"];if(re&&"commaRoundTrip"in re&&"boolean"!=typeof re.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var ce="comma"===Ce&&re&&re.commaRoundTrip;ae||(ae=Object.keys(H)),se.sort&&ae.sort(se.sort);for(var Be=r(),Ve=0;Ve<ae.length;++Ve){var Xe=ae[Ve];se.skipNulls&&null===H[Xe]||S(fe,j(H[Xe],Xe,Ce,ce,se.strictNullHandling,se.skipNulls,se.encode?se.encoder:null,se.filter,se.sort,se.allowDots,se.serializeDate,se.format,se.formatter,se.encodeValuesOnly,se.charset,Be))}var He=fe.join(se.delimiter),Pe=!0===se.addQueryPrefix?"?":"";return se.charsetSentinel&&(Pe+="iso-8859-1"===se.charset?"utf8=%26%2310003%3B&":"utf8=%E2%9C%93&"),He.length>0?Pe+He:""}},16835:(v,b,i)=>{"use strict";var r=i(8157),a=Object.prototype.hasOwnProperty,f=Array.isArray,u=function(){for(var ue=[],re=0;re<256;++re)ue.push("%"+((re<16?"0":"")+re.toString(16)).toUpperCase());return ue}(),p=function(re,H){for(var se=H&&H.plainObjects?Object.create(null):{},ae=0;ae<re.length;++ae)void 0!==re[ae]&&(se[ae]=re[ae]);return se};v.exports={arrayToObject:p,assign:function(re,H){return Object.keys(H).reduce(function(se,ae){return se[ae]=H[ae],se},re)},combine:function(re,H){return[].concat(re,H)},compact:function(re){for(var H=[{obj:{o:re},prop:"o"}],se=[],ae=0;ae<H.length;++ae)for(var ie=H[ae],fe=ie.obj[ie.prop],he=Object.keys(fe),Ce=0;Ce<he.length;++Ce){var ce=he[Ce],Be=fe[ce];"object"==typeof Be&&null!==Be&&-1===se.indexOf(Be)&&(H.push({obj:fe,prop:ce}),se.push(Be))}return function(re){for(;re.length>1;){var H=re.pop(),se=H.obj[H.prop];if(f(se)){for(var ae=[],ie=0;ie<se.length;++ie)void 0!==se[ie]&&ae.push(se[ie]);H.obj[H.prop]=ae}}}(H),re},decode:function(ue,re,H){var se=ue.replace(/\+/g," ");if("iso-8859-1"===H)return se.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(se)}catch(ae){return se}},encode:function(re,H,se,ae,ie){if(0===re.length)return re;var fe=re;if("symbol"==typeof re?fe=Symbol.prototype.toString.call(re):"string"!=typeof re&&(fe=String(re)),"iso-8859-1"===se)return escape(fe).replace(/%u[0-9a-f]{4}/gi,function(Be){return"%26%23"+parseInt(Be.slice(2),16)+"%3B"});for(var he="",Ce=0;Ce<fe.length;++Ce){var ce=fe.charCodeAt(Ce);45===ce||46===ce||95===ce||126===ce||ce>=48&&ce<=57||ce>=65&&ce<=90||ce>=97&&ce<=122||ie===r.RFC1738&&(40===ce||41===ce)?he+=fe.charAt(Ce):ce<128?he+=u[ce]:ce<2048?he+=u[192|ce>>6]+u[128|63&ce]:ce<55296||ce>=57344?he+=u[224|ce>>12]+u[128|ce>>6&63]+u[128|63&ce]:(ce=65536+((1023&ce)<<10|1023&fe.charCodeAt(Ce+=1)),he+=u[240|ce>>18]+u[128|ce>>12&63]+u[128|ce>>6&63]+u[128|63&ce])}return he},isBuffer:function(re){return!(!re||"object"!=typeof re||!(re.constructor&&re.constructor.isBuffer&&re.constructor.isBuffer(re)))},isRegExp:function(re){return"[object RegExp]"===Object.prototype.toString.call(re)},maybeMap:function(re,H){if(f(re)){for(var se=[],ae=0;ae<re.length;ae+=1)se.push(H(re[ae]));return se}return H(re)},merge:function ue(re,H,se){if(!H)return re;if("object"!=typeof H){if(f(re))re.push(H);else{if(!re||"object"!=typeof re)return[re,H];(se&&(se.plainObjects||se.allowPrototypes)||!a.call(Object.prototype,H))&&(re[H]=!0)}return re}if(!re||"object"!=typeof re)return[re].concat(H);var ae=re;return f(re)&&!f(H)&&(ae=p(re,se)),f(re)&&f(H)?(H.forEach(function(ie,fe){if(a.call(re,fe)){var he=re[fe];he&&"object"==typeof he&&ie&&"object"==typeof ie?re[fe]=ue(he,ie,se):re.push(ie)}else re[fe]=ie}),re):Object.keys(H).reduce(function(ie,fe){var he=H[fe];return ie[fe]=a.call(ie,fe)?ue(ie[fe],he,se):he,ie},ae)}}},98216:v=>{"use strict";function b(i,r){return Object.prototype.hasOwnProperty.call(i,r)}v.exports=function(i,r,a,f){a=a||"=";var u={};if("string"!=typeof i||0===i.length)return u;var e=/\+/g;i=i.split(r=r||"&");var p=1e3;f&&"number"==typeof f.maxKeys&&(p=f.maxKeys);var g=i.length;p>0&&g>p&&(g=p);for(var S=0;S<g;++S){var x,B,W,j,M=i[S].replace(e,"%20"),w=M.indexOf(a);w>=0?(x=M.substr(0,w),B=M.substr(w+1)):(x=M,B=""),W=decodeURIComponent(x),j=decodeURIComponent(B),b(u,W)?Array.isArray(u[W])?u[W].push(j):u[W]=[u[W],j]:u[W]=j}return u}},36173:v=>{"use strict";var b=function(i){switch(typeof i){case"string":return i;case"boolean":return i?"true":"false";case"number":return isFinite(i)?i:"";default:return""}};v.exports=function(i,r,a,f){return r=r||"&",a=a||"=",null===i&&(i=void 0),"object"==typeof i?Object.keys(i).map(function(u){var e=encodeURIComponent(b(u))+a;return Array.isArray(i[u])?i[u].map(function(p){return e+encodeURIComponent(b(p))}).join(r):e+encodeURIComponent(b(i[u]))}).join(r):f?encodeURIComponent(b(f))+a+encodeURIComponent(b(i)):""}},36284:(v,b,i)=>{"use strict";b.decode=b.parse=i(98216),b.encode=b.stringify=i(36173)},76959:(v,b)=>{"use strict";var i=Object.prototype.hasOwnProperty;function a(p){try{return decodeURIComponent(p.replace(/\+/g," "))}catch(g){return null}}function f(p){try{return encodeURIComponent(p)}catch(g){return null}}b.stringify=function e(p,g){g=g||"";var M,w,S=[];for(w in"string"!=typeof g&&(g="?"),p)if(i.call(p,w)){if(!(M=p[w])&&(null==M||isNaN(M))&&(M=""),w=f(w),M=f(M),null===w||null===M)continue;S.push(w+"="+M)}return S.length?g+S.join("&"):""},b.parse=function u(p){for(var M,g=/([^=?#&]+)=?([^&]*)/g,S={};M=g.exec(p);){var w=a(M[1]),x=a(M[2]);null===w||null===x||w in S||(S[w]=x)}return S}},17346:(v,b,i)=>{const r=i(66952),a=i(32582),f=r.types;v.exports=class HE{constructor(e,p){if(this._setDefaults(e),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,e=e.source;else{if("string"!=typeof e)throw new Error("Expected a regexp or string");this.ignoreCase=p&&-1!==p.indexOf("i"),this.multiline=p&&-1!==p.indexOf("m")}this.tokens=r(e)}_setDefaults(e){this.max=null!=e.max?e.max:null!=HE.prototype.max?HE.prototype.max:100,this.defaultRange=e.defaultRange?e.defaultRange:this.defaultRange.clone(),e.randInt&&(this.randInt=e.randInt)}gen(){return this._gen(this.tokens,[])}_gen(e,p){var g,S,M,w,x;switch(e.type){case f.ROOT:case f.GROUP:if(e.followedBy||e.notFollowedBy)return"";for(e.remember&&void 0===e.groupNumber&&(e.groupNumber=p.push(null)-1),S="",w=0,x=(g=e.options?this._randSelect(e.options):e.stack).length;w<x;w++)S+=this._gen(g[w],p);return e.remember&&(p[e.groupNumber]=S),S;case f.POSITION:return"";case f.SET:var B=this._expand(e);return B.length?String.fromCharCode(this._randSelect(B)):"";case f.REPETITION:for(M=this.randInt(e.min,e.max===1/0?e.min+this.max:e.max),S="",w=0;w<M;w++)S+=this._gen(e.value,p);return S;case f.REFERENCE:return p[e.value-1]||"";case f.CHAR:var W=this.ignoreCase&&this._randBool()?this._toOtherCase(e.value):e.value;return String.fromCharCode(W)}}_toOtherCase(e){return e+(97<=e&&e<=122?-32:65<=e&&e<=90?32:0)}_randBool(){return!this.randInt(0,1)}_randSelect(e){return e instanceof a?e.index(this.randInt(0,e.length-1)):e[this.randInt(0,e.length-1)]}_expand(e){if(e.type===r.types.CHAR)return new a(e.value);if(e.type===r.types.RANGE)return new a(e.from,e.to);{let p=new a;for(let g=0;g<e.set.length;g++){let S=this._expand(e.set[g]);if(p.add(S),this.ignoreCase)for(let M=0;M<S.length;M++){let w=S.index(M),x=this._toOtherCase(w);w!==x&&p.add(x)}}return e.not?this.defaultRange.clone().subtract(p):this.defaultRange.clone().intersect(p)}}randInt(e,p){return e+Math.floor(Math.random()*(1+p-e))}get defaultRange(){return this._range=this._range||new a(32,126)}set defaultRange(e){this._range=e}static randexp(e,p){var g;return"string"==typeof e&&(e=new RegExp(e,p)),void 0===e._randexp?(g=new HE(e,p),e._randexp=g):(g=e._randexp)._setDefaults(e),g.gen()}static sugar(){RegExp.prototype.gen=function(){return HE.randexp(this)}}}},57021:(v,b,i)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.CopyToClipboard=void 0;var r=f(i(78139)),a=f(i(96967));function f(se){return se&&se.__esModule?se:{default:se}}function u(se){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(ie){return typeof ie}:function(ie){return ie&&"function"==typeof Symbol&&ie.constructor===Symbol&&ie!==Symbol.prototype?"symbol":typeof ie})(se)}function e(se,ae){var ie=Object.keys(se);if(Object.getOwnPropertySymbols){var fe=Object.getOwnPropertySymbols(se);ae&&(fe=fe.filter(function(he){return Object.getOwnPropertyDescriptor(se,he).enumerable})),ie.push.apply(ie,fe)}return ie}function M(se,ae){if(!(se instanceof ae))throw new TypeError("Cannot call a class as a function")}function w(se,ae){for(var ie=0;ie<ae.length;ie++){var fe=ae[ie];fe.enumerable=fe.enumerable||!1,fe.configurable=!0,"value"in fe&&(fe.writable=!0),Object.defineProperty(se,fe.key,fe)}}function B(se,ae){return!ae||"object"!==u(ae)&&"function"!=typeof ae?j(se):ae}function W(se){return(W=Object.setPrototypeOf?Object.getPrototypeOf:function(ie){return ie.__proto__||Object.getPrototypeOf(ie)})(se)}function j(se){if(void 0===se)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return se}function ue(se,ae){return(ue=Object.setPrototypeOf||function(fe,he){return fe.__proto__=he,fe})(se,ae)}function re(se,ae,ie){return ae in se?Object.defineProperty(se,ae,{value:ie,enumerable:!0,configurable:!0,writable:!0}):se[ae]=ie,se}var H=function(se){function ae(){var ie,fe;M(this,ae);for(var he=arguments.length,Ce=new Array(he),ce=0;ce<he;ce++)Ce[ce]=arguments[ce];return re(j(fe=B(this,(ie=W(ae)).call.apply(ie,[this].concat(Ce)))),"onClick",function(Be){var Ve=fe.props,Xe=Ve.text,He=Ve.onCopy,Ge=Ve.options,Oe=r.default.Children.only(Ve.children),Tt=(0,a.default)(Xe,Ge);He&&He(Xe,Tt),Oe&&Oe.props&&"function"==typeof Oe.props.onClick&&Oe.props.onClick(Be)}),fe}return function q(se,ae){if("function"!=typeof ae&&null!==ae)throw new TypeError("Super expression must either be null or a function");se.prototype=Object.create(ae&&ae.prototype,{constructor:{value:se,writable:!0,configurable:!0}}),ae&&ue(se,ae)}(ae,se),function x(se,ae,ie){ae&&w(se.prototype,ae),ie&&w(se,ie)}(ae,[{key:"render",value:function(){var fe=this.props,Be=fe.children,Ve=function g(se,ae){if(null==se)return{};var fe,he,ie=function S(se,ae){if(null==se)return{};var he,Ce,ie={},fe=Object.keys(se);for(Ce=0;Ce<fe.length;Ce++)!(ae.indexOf(he=fe[Ce])>=0)&&(ie[he]=se[he]);return ie}(se,ae);if(Object.getOwnPropertySymbols){var Ce=Object.getOwnPropertySymbols(se);for(he=0;he<Ce.length;he++)!(ae.indexOf(fe=Ce[he])>=0)&&(!Object.prototype.propertyIsEnumerable.call(se,fe)||(ie[fe]=se[fe]))}return ie}(fe,["text","onCopy","options","children"]),Xe=r.default.Children.only(Be);return r.default.cloneElement(Xe,function p(se){for(var ae=1;ae<arguments.length;ae++){var ie=null!=arguments[ae]?arguments[ae]:{};ae%2?e(ie,!0).forEach(function(fe){re(se,fe,ie[fe])}):Object.getOwnPropertyDescriptors?Object.defineProperties(se,Object.getOwnPropertyDescriptors(ie)):e(ie).forEach(function(fe){Object.defineProperty(se,fe,Object.getOwnPropertyDescriptor(ie,fe))})}return se}({},Ve,{onClick:this.onClick}))}}]),ae}(r.default.PureComponent);b.CopyToClipboard=H,re(H,"defaultProps",{onCopy:void 0,options:void 0})},43409:(v,b,i)=>{"use strict";var a=i(57021).CopyToClipboard;a.CopyToClipboard=a,v.exports=a},16709:(v,b,i)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.DebounceInput=void 0;var r=f(i(78139)),a=f(i(86906));function f(ie){return ie&&ie.__esModule?ie:{default:ie}}function u(ie){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(he){return typeof he}:function(he){return he&&"function"==typeof Symbol&&he.constructor===Symbol&&he!==Symbol.prototype?"symbol":typeof he})(ie)}function g(ie,fe){var he=Object.keys(ie);if(Object.getOwnPropertySymbols){var Ce=Object.getOwnPropertySymbols(ie);fe&&(Ce=Ce.filter(function(ce){return Object.getOwnPropertyDescriptor(ie,ce).enumerable})),he.push.apply(he,Ce)}return he}function S(ie){for(var fe=1;fe<arguments.length;fe++){var he=null!=arguments[fe]?arguments[fe]:{};fe%2?g(Object(he),!0).forEach(function(Ce){se(ie,Ce,he[Ce])}):Object.getOwnPropertyDescriptors?Object.defineProperties(ie,Object.getOwnPropertyDescriptors(he)):g(Object(he)).forEach(function(Ce){Object.defineProperty(ie,Ce,Object.getOwnPropertyDescriptor(he,Ce))})}return ie}function w(ie,fe){for(var he=0;he<fe.length;he++){var Ce=fe[he];Ce.enumerable=Ce.enumerable||!1,Ce.configurable=!0,"value"in Ce&&(Ce.writable=!0),Object.defineProperty(ie,Ce.key,Ce)}}function W(ie,fe){return(W=Object.setPrototypeOf||function(Ce,ce){return Ce.__proto__=ce,Ce})(ie,fe)}function q(ie,fe){return!fe||"object"!==u(fe)&&"function"!=typeof fe?ue(ie):fe}function ue(ie){if(void 0===ie)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return ie}function H(ie){return(H=Object.setPrototypeOf?Object.getPrototypeOf:function(he){return he.__proto__||Object.getPrototypeOf(he)})(ie)}function se(ie,fe,he){return fe in ie?Object.defineProperty(ie,fe,{value:he,enumerable:!0,configurable:!0,writable:!0}):ie[fe]=he,ie}var ae=function(ie){!function B(ie,fe){if("function"!=typeof fe&&null!==fe)throw new TypeError("Super expression must either be null or a function");ie.prototype=Object.create(fe&&fe.prototype,{constructor:{value:ie,writable:!0,configurable:!0}}),fe&&W(ie,fe)}(he,ie);var fe=function j(ie){var fe=function re(){if("undefined"==typeof Reflect||!Reflect.construct||Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(ie){return!1}}();return function(){var ce,Ce=H(ie);if(fe){var Be=H(this).constructor;ce=Reflect.construct(Ce,arguments,Be)}else ce=Ce.apply(this,arguments);return q(this,ce)}}(he);function he(Ce){var ce;return function M(ie,fe){if(!(ie instanceof fe))throw new TypeError("Cannot call a class as a function")}(this,he),se(ue(ce=fe.call(this,Ce)),"onChange",function(Ve){Ve.persist();var Xe=ce.state.value,He=ce.props.minLength;ce.setState({value:Ve.target.value},function(){var Pe=ce.state.value;Pe.length>=He?ce.notify(Ve):Xe.length>Pe.length&&ce.notify(S(S({},Ve),{},{target:S(S({},Ve.target),{},{value:""})}))})}),se(ue(ce),"onKeyDown",function(Ve){"Enter"===Ve.key&&ce.forceNotify(Ve);var Xe=ce.props.onKeyDown;Xe&&(Ve.persist(),Xe(Ve))}),se(ue(ce),"onBlur",function(Ve){ce.forceNotify(Ve);var Xe=ce.props.onBlur;Xe&&(Ve.persist(),Xe(Ve))}),se(ue(ce),"createNotifier",function(Ve){if(Ve<0)ce.notify=function(){return null};else if(0===Ve)ce.notify=ce.doNotify;else{var Xe=(0,a.default)(function(He){ce.isDebouncing=!1,ce.doNotify(He)},Ve);ce.notify=function(He){ce.isDebouncing=!0,Xe(He)},ce.flush=function(){return Xe.flush()},ce.cancel=function(){ce.isDebouncing=!1,Xe.cancel()}}}),se(ue(ce),"doNotify",function(){var Ve=ce.props.onChange;Ve.apply(void 0,arguments)}),se(ue(ce),"forceNotify",function(Ve){if(ce.isDebouncing||!(ce.props.debounceTimeout>0)){ce.cancel&&ce.cancel();var He=ce.state.value;ce.doNotify(He.length>=ce.props.minLength?Ve:S(S({},Ve),{},{target:S(S({},Ve.target),{},{value:He})}))}}),ce.isDebouncing=!1,ce.state={value:null==Ce.value?"":Ce.value},ce.createNotifier(ce.props.debounceTimeout),ce}return function x(ie,fe,he){fe&&w(ie.prototype,fe),he&&w(ie,he)}(he,[{key:"componentDidUpdate",value:function(ce){if(!this.isDebouncing){var Be=this.props,Ve=Be.value,Xe=Be.debounceTimeout,He=ce.debounceTimeout;void 0!==Ve&&ce.value!==Ve&&this.state.value!==Ve&&this.setState({value:Ve}),Xe!==He&&this.createNotifier(Xe)}}},{key:"componentWillUnmount",value:function(){this.flush&&this.flush()}},{key:"render",value:function(){var dn,rn,ce=this.props,Be=ce.element,Ge=ce.forceNotifyByEnter,Oe=ce.forceNotifyOnBlur,Tt=ce.onKeyDown,We=ce.onBlur,Qt=ce.inputRef,Nt=function e(ie,fe){if(null==ie)return{};var Ce,ce,he=function p(ie,fe){if(null==ie)return{};var ce,Be,he={},Ce=Object.keys(ie);for(Be=0;Be<Ce.length;Be++)!(fe.indexOf(ce=Ce[Be])>=0)&&(he[ce]=ie[ce]);return he}(ie,fe);if(Object.getOwnPropertySymbols){var Be=Object.getOwnPropertySymbols(ie);for(ce=0;ce<Be.length;ce++)!(fe.indexOf(Ce=Be[ce])>=0)&&(!Object.prototype.propertyIsEnumerable.call(ie,Ce)||(he[Ce]=ie[Ce]))}return he}(ce,["element","onChange","value","minLength","debounceTimeout","forceNotifyByEnter","forceNotifyOnBlur","onKeyDown","onBlur","inputRef"]),Yt=this.state.value;dn=Ge?{onKeyDown:this.onKeyDown}:Tt?{onKeyDown:Tt}:{},rn=Oe?{onBlur:this.onBlur}:We?{onBlur:We}:{};var vt=Qt?{ref:Qt}:{};return r.default.createElement(Be,S(S(S(S({},Nt),{},{onChange:this.onChange,value:Yt},dn),rn),vt))}}]),he}(r.default.PureComponent);b.DebounceInput=ae,se(ae,"defaultProps",{element:"input",type:"text",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},41205:(v,b,i)=>{"use strict";var a=i(16709).DebounceInput;a.DebounceInput=a,v.exports=a},85503:(v,b,i)=>{"use strict";var r=i(78139),a=i(18228),f=i(88712);function u(y){for(var D="https://reactjs.org/docs/error-decoder.html?invariant="+y,Y=1;Y<arguments.length;Y++)D+="&args[]="+encodeURIComponent(arguments[Y]);return"Minified React error #"+y+"; visit "+D+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(u(227));var e=new Set,p={};function g(y,D){S(y,D),S(y+"Capture",D)}function S(y,D){for(p[y]=D,y=0;y<D.length;y++)e.add(D[y])}var M=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),w=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,x=Object.prototype.hasOwnProperty,B={},W={};function re(y,D,Y,Ee,ze,At,tn){this.acceptsBooleans=2===D||3===D||4===D,this.attributeName=Ee,this.attributeNamespace=ze,this.mustUseProperty=Y,this.propertyName=y,this.type=D,this.sanitizeURL=At,this.removeEmptyString=tn}var H={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(y){H[y]=new re(y,0,!1,y,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(y){var D=y[0];H[D]=new re(D,1,!1,y[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(y){H[y]=new re(y,2,!1,y.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(y){H[y]=new re(y,2,!1,y,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(y){H[y]=new re(y,3,!1,y.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(y){H[y]=new re(y,3,!0,y,null,!1,!1)}),["capture","download"].forEach(function(y){H[y]=new re(y,4,!1,y,null,!1,!1)}),["cols","rows","size","span"].forEach(function(y){H[y]=new re(y,6,!1,y,null,!1,!1)}),["rowSpan","start"].forEach(function(y){H[y]=new re(y,5,!1,y.toLowerCase(),null,!1,!1)});var se=/[\-:]([a-z])/g;function ae(y){return y[1].toUpperCase()}function ie(y,D,Y,Ee){var ze=H.hasOwnProperty(D)?H[D]:null;(null!==ze?0===ze.type:!Ee&&2<D.length&&("o"===D[0]||"O"===D[0])&&("n"===D[1]||"N"===D[1]))||(function ue(y,D,Y,Ee){if(null==D||function q(y,D,Y,Ee){if(null!==Y&&0===Y.type)return!1;switch(typeof D){case"function":case"symbol":return!0;case"boolean":return!Ee&&(null!==Y?!Y.acceptsBooleans:"data-"!==(y=y.toLowerCase().slice(0,5))&&"aria-"!==y);default:return!1}}(y,D,Y,Ee))return!0;if(Ee)return!1;if(null!==Y)switch(Y.type){case 3:return!D;case 4:return!1===D;case 5:return isNaN(D);case 6:return isNaN(D)||1>D}return!1}(D,Y,ze,Ee)&&(Y=null),Ee||null===ze?function j(y){return!!x.call(W,y)||!x.call(B,y)&&(w.test(y)?W[y]=!0:(B[y]=!0,!1))}(D)&&(null===Y?y.removeAttribute(D):y.setAttribute(D,""+Y)):ze.mustUseProperty?y[ze.propertyName]=null===Y?3!==ze.type&&"":Y:(D=ze.attributeName,Ee=ze.attributeNamespace,null===Y?y.removeAttribute(D):(Y=3===(ze=ze.type)||4===ze&&!0===Y?"":""+Y,Ee?y.setAttributeNS(Ee,D,Y):y.setAttribute(D,Y))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(y){var D=y.replace(se,ae);H[D]=new re(D,1,!1,y,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(y){var D=y.replace(se,ae);H[D]=new re(D,1,!1,y,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(y){var D=y.replace(se,ae);H[D]=new re(D,1,!1,y,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(y){H[y]=new re(y,1,!1,y.toLowerCase(),null,!1,!1)}),H.xlinkHref=new re("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(y){H[y]=new re(y,1,!1,y.toLowerCase(),null,!0,!0)});var fe=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,he=60103,Ce=60106,ce=60107,Be=60108,Ve=60114,Xe=60109,He=60110,Pe=60112,Ge=60113,Oe=60120,Tt=60115,We=60116,Qt=60121,Nt=60128,Yt=60129,dn=60130,rn=60131;if("function"==typeof Symbol&&Symbol.for){var vt=Symbol.for;he=vt("react.element"),Ce=vt("react.portal"),ce=vt("react.fragment"),Be=vt("react.strict_mode"),Ve=vt("react.profiler"),Xe=vt("react.provider"),He=vt("react.context"),Pe=vt("react.forward_ref"),Ge=vt("react.suspense"),Oe=vt("react.suspense_list"),Tt=vt("react.memo"),We=vt("react.lazy"),Qt=vt("react.block"),vt("react.scope"),Nt=vt("react.opaque.id"),Yt=vt("react.debug_trace_mode"),dn=vt("react.offscreen"),rn=vt("react.legacy_hidden")}var Gt,xt="function"==typeof Symbol&&Symbol.iterator;function Ct(y){return null===y||"object"!=typeof y?null:"function"==typeof(y=xt&&y[xt]||y["@@iterator"])?y:null}function Fn(y){if(void 0===Gt)try{throw Error()}catch(Y){var D=Y.stack.trim().match(/\n( *(at )?)/);Gt=D&&D[1]||""}return"\n"+Gt+y}var pr=!1;function mi(y,D){if(!y||pr)return"";pr=!0;var Y=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(D)if(D=function(){throw Error()},Object.defineProperty(D.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(D,[])}catch(ar){var Ee=ar}Reflect.construct(y,[],D)}else{try{D.call()}catch(ar){Ee=ar}y.call(D.prototype)}else{try{throw Error()}catch(ar){Ee=ar}y()}}catch(ar){if(ar&&Ee&&"string"==typeof ar.stack){for(var ze=ar.stack.split("\n"),At=Ee.stack.split("\n"),tn=ze.length-1,Tn=At.length-1;1<=tn&&0<=Tn&&ze[tn]!==At[Tn];)Tn--;for(;1<=tn&&0<=Tn;tn--,Tn--)if(ze[tn]!==At[Tn]){if(1!==tn||1!==Tn)do{if(tn--,0>--Tn||ze[tn]!==At[Tn])return"\n"+ze[tn].replace(" at new "," at ")}while(1<=tn&&0<=Tn);break}}}finally{pr=!1,Error.prepareStackTrace=Y}return(y=y?y.displayName||y.name:"")?Fn(y):""}function ci(y){switch(y.tag){case 5:return Fn(y.type);case 16:return Fn("Lazy");case 13:return Fn("Suspense");case 19:return Fn("SuspenseList");case 0:case 2:case 15:return mi(y.type,!1);case 11:return mi(y.type.render,!1);case 22:return mi(y.type._render,!1);case 1:return mi(y.type,!0);default:return""}}function hr(y){if(null==y)return null;if("function"==typeof y)return y.displayName||y.name||null;if("string"==typeof y)return y;switch(y){case ce:return"Fragment";case Ce:return"Portal";case Ve:return"Profiler";case Be:return"StrictMode";case Ge:return"Suspense";case Oe:return"SuspenseList"}if("object"==typeof y)switch(y.$$typeof){case He:return(y.displayName||"Context")+".Consumer";case Xe:return(y._context.displayName||"Context")+".Provider";case Pe:var D=y.render;return D=D.displayName||D.name||"",y.displayName||(""!==D?"ForwardRef("+D+")":"ForwardRef");case Tt:return hr(y.type);case Qt:return hr(y._render);case We:D=y._payload,y=y._init;try{return hr(y(D))}catch(Y){}}return null}function Br(y){switch(typeof y){case"boolean":case"number":case"object":case"string":case"undefined":return y;default:return""}}function Ur(y){var D=y.type;return(y=y.nodeName)&&"input"===y.toLowerCase()&&("checkbox"===D||"radio"===D)}function er(y){y._valueTracker||(y._valueTracker=function Hn(y){var D=Ur(y)?"checked":"value",Y=Object.getOwnPropertyDescriptor(y.constructor.prototype,D),Ee=""+y[D];if(!y.hasOwnProperty(D)&&void 0!==Y&&"function"==typeof Y.get&&"function"==typeof Y.set){var ze=Y.get,At=Y.set;return Object.defineProperty(y,D,{configurable:!0,get:function(){return ze.call(this)},set:function(tn){Ee=""+tn,At.call(this,tn)}}),Object.defineProperty(y,D,{enumerable:Y.enumerable}),{getValue:function(){return Ee},setValue:function(tn){Ee=""+tn},stopTracking:function(){y._valueTracker=null,delete y[D]}}}}(y))}function _r(y){if(!y)return!1;var D=y._valueTracker;if(!D)return!0;var Y=D.getValue(),Ee="";return y&&(Ee=Ur(y)?y.checked?"true":"false":y.value),(y=Ee)!==Y&&(D.setValue(y),!0)}function ei(y){if(void 0===(y=y||("undefined"!=typeof document?document:void 0)))return null;try{return y.activeElement||y.body}catch(D){return y.body}}function bi(y,D){var Y=D.checked;return a({},D,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=Y?Y:y._wrapperState.initialChecked})}function fi(y,D){var Y=null==D.defaultValue?"":D.defaultValue,Ee=null!=D.checked?D.checked:D.defaultChecked;Y=Br(null!=D.value?D.value:Y),y._wrapperState={initialChecked:Ee,initialValue:Y,controlled:"checkbox"===D.type||"radio"===D.type?null!=D.checked:null!=D.value}}function no(y,D){null!=(D=D.checked)&&ie(y,"checked",D,!1)}function xo(y,D){no(y,D);var Y=Br(D.value),Ee=D.type;if(null!=Y)"number"===Ee?(0===Y&&""===y.value||y.value!=Y)&&(y.value=""+Y):y.value!==""+Y&&(y.value=""+Y);else if("submit"===Ee||"reset"===Ee)return void y.removeAttribute("value");D.hasOwnProperty("value")?an(y,D.type,Y):D.hasOwnProperty("defaultValue")&&an(y,D.type,Br(D.defaultValue)),null==D.checked&&null!=D.defaultChecked&&(y.defaultChecked=!!D.defaultChecked)}function Er(y,D,Y){if(D.hasOwnProperty("value")||D.hasOwnProperty("defaultValue")){var Ee=D.type;if(("submit"===Ee||"reset"===Ee)&&null==D.value)return;D=""+y._wrapperState.initialValue,Y||D===y.value||(y.value=D),y.defaultValue=D}""!==(Y=y.name)&&(y.name=""),y.defaultChecked=!!y._wrapperState.initialChecked,""!==Y&&(y.name=Y)}function an(y,D,Y){("number"!==D||ei(y.ownerDocument)!==y)&&(null==Y?y.defaultValue=""+y._wrapperState.initialValue:y.defaultValue!==""+Y&&(y.defaultValue=""+Y))}function Zn(y,D){return y=a({children:void 0},D),(D=function vn(y){var D="";return r.Children.forEach(y,function(Y){null!=Y&&(D+=Y)}),D}(D.children))&&(y.children=D),y}function Xn(y,D,Y,Ee){if(y=y.options,D){D={};for(var ze=0;ze<Y.length;ze++)D["$"+Y[ze]]=!0;for(Y=0;Y<y.length;Y++)ze=D.hasOwnProperty("$"+y[Y].value),y[Y].selected!==ze&&(y[Y].selected=ze),ze&&Ee&&(y[Y].defaultSelected=!0)}else{for(Y=""+Br(Y),D=null,ze=0;ze<y.length;ze++){if(y[ze].value===Y)return y[ze].selected=!0,void(Ee&&(y[ze].defaultSelected=!0));null!==D||y[ze].disabled||(D=y[ze])}null!==D&&(D.selected=!0)}}function zn(y,D){if(null!=D.dangerouslySetInnerHTML)throw Error(u(91));return a({},D,{value:void 0,defaultValue:void 0,children:""+y._wrapperState.initialValue})}function ri(y,D){var Y=D.value;if(null==Y){if(Y=D.children,D=D.defaultValue,null!=Y){if(null!=D)throw Error(u(92));if(Array.isArray(Y)){if(!(1>=Y.length))throw Error(u(93));Y=Y[0]}D=Y}null==D&&(D=""),Y=D}y._wrapperState={initialValue:Br(Y)}}function Gi(y,D){var Y=Br(D.value),Ee=Br(D.defaultValue);null!=Y&&((Y=""+Y)!==y.value&&(y.value=Y),null==D.defaultValue&&y.defaultValue!==Y&&(y.defaultValue=Y)),null!=Ee&&(y.defaultValue=""+Ee)}function ui(y){var D=y.textContent;D===y._wrapperState.initialValue&&""!==D&&null!==D&&(y.value=D)}var vr_html="http://www.w3.org/1999/xhtml";function Ji(y){switch(y){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function mn(y,D){return null==y||"http://www.w3.org/1999/xhtml"===y?Ji(D):"http://www.w3.org/2000/svg"===y&&"foreignObject"===D?"http://www.w3.org/1999/xhtml":y}var Rn,y,Wn=(y=function(y,D){if("http://www.w3.org/2000/svg"!==y.namespaceURI||"innerHTML"in y)y.innerHTML=D;else{for((Rn=Rn||document.createElement("div")).innerHTML="<svg>"+D.valueOf().toString()+"</svg>",D=Rn.firstChild;y.firstChild;)y.removeChild(y.firstChild);for(;D.firstChild;)y.appendChild(D.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(D,Y,Ee,ze){MSApp.execUnsafeLocalFunction(function(){return y(D,Y)})}:y);function et(y,D){if(D){var Y=y.firstChild;if(Y&&Y===y.lastChild&&3===Y.nodeType)return void(Y.nodeValue=D)}y.textContent=D}var Le={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Re=["Webkit","ms","Moz","O"];function Se(y,D,Y){return null==D||"boolean"==typeof D||""===D?"":Y||"number"!=typeof D||0===D||Le.hasOwnProperty(y)&&Le[y]?(""+D).trim():D+"px"}function dt(y,D){for(var Y in y=y.style,D)if(D.hasOwnProperty(Y)){var Ee=0===Y.indexOf("--"),ze=Se(Y,D[Y],Ee);"float"===Y&&(Y="cssFloat"),Ee?y.setProperty(Y,ze):y[Y]=ze}}Object.keys(Le).forEach(function(y){Re.forEach(function(D){D=D+y.charAt(0).toUpperCase()+y.substring(1),Le[D]=Le[y]})});var st=a({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function nn(y,D){if(D){if(st[y]&&(null!=D.children||null!=D.dangerouslySetInnerHTML))throw Error(u(137,y));if(null!=D.dangerouslySetInnerHTML){if(null!=D.children)throw Error(u(60));if("object"!=typeof D.dangerouslySetInnerHTML||!("__html"in D.dangerouslySetInnerHTML))throw Error(u(61))}if(null!=D.style&&"object"!=typeof D.style)throw Error(u(62))}}function Fe(y,D){if(-1===y.indexOf("-"))return"string"==typeof D.is;switch(y){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Lr(y){return(y=y.target||y.srcElement||window).correspondingUseElement&&(y=y.correspondingUseElement),3===y.nodeType?y.parentNode:y}var ti=null,Ut=null,Dn=null;function Et(y){if(y=Oa(y)){if("function"!=typeof ti)throw Error(u(280));var D=y.stateNode;D&&(D=Ll(D),ti(y.stateNode,y.type,D))}}function $t(y){Ut?Dn?Dn.push(y):Dn=[y]:Ut=y}function _t(){if(Ut){var y=Ut,D=Dn;if(Dn=Ut=null,Et(y),D)for(y=0;y<D.length;y++)Et(D[y])}}function yt(y,D){return y(D)}function Vt(y,D,Y,Ee,ze){return y(D,Y,Ee,ze)}function yn(){}var Cr=yt,xi=!1,yi=!1;function Yo(){(null!==Ut||null!==Dn)&&(yn(),_t())}function lo(y,D){var Y=y.stateNode;if(null===Y)return null;var Ee=Ll(Y);if(null===Ee)return null;Y=Ee[D];e:switch(D){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(Ee=!Ee.disabled)||(Ee=!("button"===(y=y.type)||"input"===y||"select"===y||"textarea"===y)),y=!Ee;break e;default:y=!1}if(y)return null;if(Y&&"function"!=typeof Y)throw Error(u(231,D,typeof Y));return Y}var Ri=!1;if(M)try{var ko={};Object.defineProperty(ko,"passive",{get:function(){Ri=!0}}),window.addEventListener("test",ko,ko),window.removeEventListener("test",ko,ko)}catch(y){Ri=!1}function Xo(y,D,Y,Ee,ze,At,tn,Tn,ar){var li=Array.prototype.slice.call(arguments,3);try{D.apply(Y,li)}catch(Ho){this.onError(Ho)}}var ir=!1,si=null,kn=!1,nr=null,jr={onError:function(y){ir=!0,si=y}};function ao(y,D,Y,Ee,ze,At,tn,Tn,ar){ir=!1,si=null,Xo.apply(jr,arguments)}function Eo(y){var D=y,Y=y;if(y.alternate)for(;D.return;)D=D.return;else{y=D;do{0!=(1026&(D=y).flags)&&(Y=D.return),y=D.return}while(y)}return 3===D.tag?Y:null}function mo(y){if(13===y.tag){var D=y.memoizedState;if(null===D&&null!==(y=y.alternate)&&(D=y.memoizedState),null!==D)return D.dehydrated}return null}function Go(y){if(Eo(y)!==y)throw Error(u(188))}function or(y){if(y=function ua(y){var D=y.alternate;if(!D){if(null===(D=Eo(y)))throw Error(u(188));return D!==y?null:y}for(var Y=y,Ee=D;;){var ze=Y.return;if(null===ze)break;var At=ze.alternate;if(null===At){if(null!==(Ee=ze.return)){Y=Ee;continue}break}if(ze.child===At.child){for(At=ze.child;At;){if(At===Y)return Go(ze),y;if(At===Ee)return Go(ze),D;At=At.sibling}throw Error(u(188))}if(Y.return!==Ee.return)Y=ze,Ee=At;else{for(var tn=!1,Tn=ze.child;Tn;){if(Tn===Y){tn=!0,Y=ze,Ee=At;break}if(Tn===Ee){tn=!0,Ee=ze,Y=At;break}Tn=Tn.sibling}if(!tn){for(Tn=At.child;Tn;){if(Tn===Y){tn=!0,Y=At,Ee=ze;break}if(Tn===Ee){tn=!0,Ee=At,Y=ze;break}Tn=Tn.sibling}if(!tn)throw Error(u(189))}}if(Y.alternate!==Ee)throw Error(u(190))}if(3!==Y.tag)throw Error(u(188));return Y.stateNode.current===Y?y:D}(y),!y)return null;for(var D=y;;){if(5===D.tag||6===D.tag)return D;if(D.child)D.child.return=D,D=D.child;else{if(D===y)break;for(;!D.sibling;){if(!D.return||D.return===y)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}}return null}function Mr(y,D){for(var Y=y.alternate;null!==D;){if(D===y||D===Y)return!0;D=D.return}return!1}var Ar,cr,pi,Sn,$n=!1,Jr=[],ro=null,go=null,Ro=null,Ys=new Map,ds=new Map,es=[],ma="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Ea(y,D,Y,Ee,ze){return{blockedOn:y,domEventName:D,eventSystemFlags:16|Y,nativeEvent:ze,targetContainers:[Ee]}}function fa(y,D){switch(y){case"focusin":case"focusout":ro=null;break;case"dragenter":case"dragleave":go=null;break;case"mouseover":case"mouseout":Ro=null;break;case"pointerover":case"pointerout":Ys.delete(D.pointerId);break;case"gotpointercapture":case"lostpointercapture":ds.delete(D.pointerId)}}function sa(y,D,Y,Ee,ze,At){return null===y||y.nativeEvent!==At?(y=Ea(D,Y,Ee,ze,At),null!==D&&null!==(D=Oa(D))&&cr(D),y):(y.eventSystemFlags|=Ee,D=y.targetContainers,null!==ze&&-1===D.indexOf(ze)&&D.push(ze),y)}function pl(y){var D=cu(y.target);if(null!==D){var Y=Eo(D);if(null!==Y)if(13===(D=Y.tag)){if(null!==(D=mo(Y)))return y.blockedOn=D,void Sn(y.lanePriority,function(){f.unstable_runWithPriority(y.priority,function(){pi(Y)})})}else if(3===D&&Y.stateNode.hydrate)return void(y.blockedOn=3===Y.tag?Y.stateNode.containerInfo:null)}y.blockedOn=null}function Co(y){if(null!==y.blockedOn)return!1;for(var D=y.targetContainers;0<D.length;){var Y=ru(y.domEventName,y.eventSystemFlags,D[0],y.nativeEvent);if(null!==Y)return null!==(D=Oa(Y))&&cr(D),y.blockedOn=Y,!1;D.shift()}return!0}function yl(y,D,Y){Co(y)&&Y.delete(D)}function Wo(){for($n=!1;0<Jr.length;){var y=Jr[0];if(null!==y.blockedOn){null!==(y=Oa(y.blockedOn))&&Ar(y);break}for(var D=y.targetContainers;0<D.length;){var Y=ru(y.domEventName,y.eventSystemFlags,D[0],y.nativeEvent);if(null!==Y){y.blockedOn=Y;break}D.shift()}null===y.blockedOn&&Jr.shift()}null!==ro&&Co(ro)&&(ro=null),null!==go&&Co(go)&&(go=null),null!==Ro&&Co(Ro)&&(Ro=null),Ys.forEach(yl),ds.forEach(yl)}function ys(y,D){y.blockedOn===D&&(y.blockedOn=null,$n||($n=!0,f.unstable_scheduleCallback(f.unstable_NormalPriority,Wo)))}function Wa(y){function D(ze){return ys(ze,y)}if(0<Jr.length){ys(Jr[0],y);for(var Y=1;Y<Jr.length;Y++){var Ee=Jr[Y];Ee.blockedOn===y&&(Ee.blockedOn=null)}}for(null!==ro&&ys(ro,y),null!==go&&ys(go,y),null!==Ro&&ys(Ro,y),Ys.forEach(D),ds.forEach(D),Y=0;Y<es.length;Y++)(Ee=es[Y]).blockedOn===y&&(Ee.blockedOn=null);for(;0<es.length&&null===(Y=es[0]).blockedOn;)pl(Y),null===Y.blockedOn&&es.shift()}function Is(y,D){var Y={};return Y[y.toLowerCase()]=D.toLowerCase(),Y["Webkit"+y]="webkit"+D,Y["Moz"+y]="moz"+D,Y}var nl={animationend:Is("Animation","AnimationEnd"),animationiteration:Is("Animation","AnimationIteration"),animationstart:Is("Animation","AnimationStart"),transitionend:Is("Transition","TransitionEnd")},js={},$o={};function To(y){if(js[y])return js[y];if(!nl[y])return y;var Y,D=nl[y];for(Y in D)if(D.hasOwnProperty(Y)&&Y in $o)return js[y]=D[Y];return y}M&&($o=document.createElement("div").style,"AnimationEvent"in window||(delete nl.animationend.animation,delete nl.animationiteration.animation,delete nl.animationstart.animation),"TransitionEvent"in window||delete nl.transitionend.transition);var Ns=To("animationend"),hs=To("animationiteration"),Oo=To("animationstart"),kr=To("transitionend"),Ki=new Map,ut=new Map,pn=["abort","abort",Ns,"animationEnd",hs,"animationIteration",Oo,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",kr,"transitionEnd","waiting","waiting"];function te(y,D){for(var Y=0;Y<y.length;Y+=2){var Ee=y[Y],ze=y[Y+1];ze="on"+(ze[0].toUpperCase()+ze.slice(1)),ut.set(Ee,D),Ki.set(Ee,ze),g(ze,[Ee])}}(0,f.unstable_now)();var jt=8;function hn(y){if(0!=(1&y))return jt=15,1;if(0!=(2&y))return jt=14,2;if(0!=(4&y))return jt=13,4;var D=24&y;return 0!==D?(jt=12,D):0!=(32&y)?(jt=11,32):0!=(D=192&y)?(jt=10,D):0!=(256&y)?(jt=9,256):0!=(D=3584&y)?(jt=8,D):0!=(4096&y)?(jt=7,4096):0!=(D=4186112&y)?(jt=6,D):0!=(D=62914560&y)?(jt=5,D):67108864&y?(jt=4,67108864):0!=(134217728&y)?(jt=3,134217728):0!=(D=805306368&y)?(jt=2,D):0!=(1073741824&y)?(jt=1,1073741824):(jt=8,y)}function ki(y,D){var Y=y.pendingLanes;if(0===Y)return jt=0;var Ee=0,ze=0,At=y.expiredLanes,tn=y.suspendedLanes,Tn=y.pingedLanes;if(0!==At)Ee=At,ze=jt=15;else if(0!=(At=134217727&Y)){var ar=At&~tn;0!==ar?(Ee=hn(ar),ze=jt):0!=(Tn&=At)&&(Ee=hn(Tn),ze=jt)}else 0!=(At=Y&~tn)?(Ee=hn(At),ze=jt):0!==Tn&&(Ee=hn(Tn),ze=jt);if(0===Ee)return 0;if(Ee=Y&((0>(Ee=31-sl(Ee))?0:1<<Ee)<<1)-1,0!==D&&D!==Ee&&0==(D&tn)){if(hn(D),ze<=jt)return D;jt=ze}if(0!==(D=y.entangledLanes))for(y=y.entanglements,D&=Ee;0<D;)Ee|=y[Y=31-sl(D)],D&=~(ze=1<<Y);return Ee}function _s(y){return 0!=(y=-1073741825&y.pendingLanes)?y:1073741824&y?1073741824:0}function Vo(y,D){switch(y){case 15:return 1;case 14:return 2;case 12:return 0===(y=Fs(24&~D))?Vo(10,D):y;case 10:return 0===(y=Fs(192&~D))?Vo(8,D):y;case 8:return 0===(y=Fs(3584&~D))&&0===(y=Fs(4186112&~D))&&(y=512),y;case 2:return 0===(D=Fs(805306368&~D))&&(D=268435456),D}throw Error(u(358,y))}function Fs(y){return y&-y}function Ks(y){for(var D=[],Y=0;31>Y;Y++)D.push(y);return D}function hl(y,D,Y){y.pendingLanes|=D;var Ee=D-1;y.suspendedLanes&=Ee,y.pingedLanes&=Ee,(y=y.eventTimes)[D=31-sl(D)]=Y}var sl=Math.clz32?Math.clz32:function _c(y){return 0===y?32:31-(Jl(y)/Qu|0)|0},Jl=Math.log,Qu=Math.LN2,Cl=f.unstable_UserBlockingPriority,mc=f.unstable_runWithPriority,Fl=!0;function Xu(y,D,Y,Ee){xi||yn();var ze=Mc,At=xi;xi=!0;try{Vt(ze,y,D,Y,Ee)}finally{(xi=At)||Yo()}}function Xa(y,D,Y,Ee){mc(Cl,Mc.bind(null,y,D,Y,Ee))}function Mc(y,D,Y,Ee){var ze;if(Fl)if((ze=0==(4&D))&&0<Jr.length&&-1<ma.indexOf(y))y=Ea(null,y,D,Y,Ee),Jr.push(y);else{var At=ru(y,D,Y,Ee);if(null===At)ze&&fa(y,Ee);else{if(ze){if(-1<ma.indexOf(y))return y=Ea(At,y,D,Y,Ee),void Jr.push(y);if(function Ra(y,D,Y,Ee,ze){switch(D){case"focusin":return ro=sa(ro,y,D,Y,Ee,ze),!0;case"dragenter":return go=sa(go,y,D,Y,Ee,ze),!0;case"mouseover":return Ro=sa(Ro,y,D,Y,Ee,ze),!0;case"pointerover":var At=ze.pointerId;return Ys.set(At,sa(Ys.get(At)||null,y,D,Y,Ee,ze)),!0;case"gotpointercapture":return ds.set(At=ze.pointerId,sa(ds.get(At)||null,y,D,Y,Ee,ze)),!0}return!1}(At,y,D,Y,Ee))return;fa(y,Ee)}ht(y,D,Ee,null,Y)}}}function ru(y,D,Y,Ee){var ze=Lr(Ee);if(null!==(ze=cu(ze))){var At=Eo(ze);if(null===At)ze=null;else{var tn=At.tag;if(13===tn){if(null!==(ze=mo(At)))return ze;ze=null}else if(3===tn){if(At.stateNode.hydrate)return 3===At.tag?At.stateNode.containerInfo:null;ze=null}else At!==ze&&(ze=null)}}return ht(y,D,Ee,ze,Y),null}var Ja=null,Ol=null,Bl=null;function Ya(){if(Bl)return Bl;var y,Ee,D=Ol,Y=D.length,ze="value"in Ja?Ja.value:Ja.textContent,At=ze.length;for(y=0;y<Y&&D[y]===ze[y];y++);var tn=Y-y;for(Ee=1;Ee<=tn&&D[Y-Ee]===ze[At-Ee];Ee++);return Bl=ze.slice(y,1<Ee?1-Ee:void 0)}function rt(y){var D=y.keyCode;return"charCode"in y?0===(y=y.charCode)&&13===D&&(y=13):y=D,10===y&&(y=13),32<=y||13===y?y:0}function qt(){return!0}function pt(){return!1}function Kt(y){function D(Y,Ee,ze,At,tn){for(var Tn in this._reactName=Y,this._targetInst=ze,this.type=Ee,this.nativeEvent=At,this.target=tn,this.currentTarget=null,y)y.hasOwnProperty(Tn)&&(this[Tn]=(Y=y[Tn])?Y(At):At[Tn]);return this.isDefaultPrevented=(null!=At.defaultPrevented?At.defaultPrevented:!1===At.returnValue)?qt:pt,this.isPropagationStopped=pt,this}return a(D.prototype,{preventDefault:function(){this.defaultPrevented=!0;var Y=this.nativeEvent;Y&&(Y.preventDefault?Y.preventDefault():"unknown"!=typeof Y.returnValue&&(Y.returnValue=!1),this.isDefaultPrevented=qt)},stopPropagation:function(){var Y=this.nativeEvent;Y&&(Y.stopPropagation?Y.stopPropagation():"unknown"!=typeof Y.cancelBubble&&(Y.cancelBubble=!0),this.isPropagationStopped=qt)},persist:function(){},isPersistent:qt}),D}var Gs,Os,ws,Kn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(y){return y.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},oi=Kt(Kn),wi=a({},Kn,{view:0,detail:0}),as=Kt(wi),Fo=a({},wi,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:aa,button:0,buttons:0,relatedTarget:function(y){return void 0===y.relatedTarget?y.fromElement===y.srcElement?y.toElement:y.fromElement:y.relatedTarget},movementX:function(y){return"movementX"in y?y.movementX:(y!==ws&&(ws&&"mousemove"===y.type?(Gs=y.screenX-ws.screenX,Os=y.screenY-ws.screenY):Os=Gs=0,ws=y),Gs)},movementY:function(y){return"movementY"in y?y.movementY:Os}}),Ka=Kt(Fo),Bs=Kt(a({},Fo,{dataTransfer:0})),ot=Kt(a({},wi,{relatedTarget:0})),Xt=Kt(a({},Kn,{animationName:0,elapsedTime:0,pseudoElement:0})),Si=a({},Kn,{clipboardData:function(y){return"clipboardData"in y?y.clipboardData:window.clipboardData}}),Jo=Kt(Si),El=Kt(a({},Kn,{data:0})),Ku={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Nc={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},hd={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Yi(y){var D=this.nativeEvent;return D.getModifierState?D.getModifierState(y):!!(y=hd[y])&&!!D[y]}function aa(){return Yi}var Fa=a({},wi,{key:function(y){if(y.key){var D=Ku[y.key]||y.key;if("Unidentified"!==D)return D}return"keypress"===y.type?13===(y=rt(y))?"Enter":String.fromCharCode(y):"keydown"===y.type||"keyup"===y.type?Nc[y.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:aa,charCode:function(y){return"keypress"===y.type?rt(y):0},keyCode:function(y){return"keydown"===y.type||"keyup"===y.type?y.keyCode:0},which:function(y){return"keypress"===y.type?rt(y):"keydown"===y.type||"keyup"===y.type?y.keyCode:0}}),Es=Kt(Fa),Sl=Kt(a({},Fo,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Eu=Kt(a({},wi,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:aa})),ra=Kt(a({},Kn,{propertyName:0,elapsedTime:0,pseudoElement:0})),bu=a({},Fo,{deltaX:function(y){return"deltaX"in y?y.deltaX:"wheelDeltaX"in y?-y.wheelDeltaX:0},deltaY:function(y){return"deltaY"in y?y.deltaY:"wheelDeltaY"in y?-y.wheelDeltaY:"wheelDelta"in y?-y.wheelDelta:0},deltaZ:0,deltaMode:0}),td=Kt(bu),ec=[9,13,27,32],uu=M&&"CompositionEvent"in window,du=null;M&&"documentMode"in document&&(du=document.documentMode);var nd=M&&"TextEvent"in window&&!du,Uu=M&&(!uu||du&&8<du&&11>=du),Yu=String.fromCharCode(32),wu=!1;function Ld(y,D){switch(y){case"keyup":return-1!==ec.indexOf(D.keyCode);case"keydown":return 229!==D.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Io(y){return"object"==typeof(y=y.detail)&&"data"in y?y.data:null}var fu=!1,De={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function ct(y){var D=y&&y.nodeName&&y.nodeName.toLowerCase();return"input"===D?!!De[y.type]:"textarea"===D}function It(y,D,Y,Ee){$t(Ee),0<(D=sn(D,"onChange")).length&&(Y=new oi("onChange","change",null,Y,Ee),y.push({event:Y,listeners:D}))}var Ht=null,_n=null;function Pn(y){En(y,0)}function Tr(y){if(_r(ll(y)))return y}function ai(y,D){if("change"===y)return D}var Ei=!1;if(M){var Ci;if(M){var Vi="oninput"in document;if(!Vi){var Pr=document.createElement("div");Pr.setAttribute("oninput","return;"),Vi="function"==typeof Pr.oninput}Ci=Vi}else Ci=!1;Ei=Ci&&(!document.documentMode||9<document.documentMode)}function Yn(){Ht&&(Ht.detachEvent("onpropertychange",Rr),_n=Ht=null)}function Rr(y){if("value"===y.propertyName&&Tr(_n)){var D=[];if(It(D,_n,y,Lr(y)),y=Pn,xi)y(D);else{xi=!0;try{yt(y,D)}finally{xi=!1,Yo()}}}}function br(y,D,Y){"focusin"===y?(Yn(),_n=Y,(Ht=D).attachEvent("onpropertychange",Rr)):"focusout"===y&&Yn()}function fo(y){if("selectionchange"===y||"keyup"===y||"keydown"===y)return Tr(_n)}function $s(y,D){if("click"===y)return Tr(D)}function ls(y,D){if("input"===y||"change"===y)return Tr(D)}var Us="function"==typeof Object.is?Object.is:function _l(y,D){return y===D&&(0!==y||1/y==1/D)||y!=y&&D!=D},zc=Object.prototype.hasOwnProperty;function Ic(y,D){if(Us(y,D))return!0;if("object"!=typeof y||null===y||"object"!=typeof D||null===D)return!1;var Y=Object.keys(y),Ee=Object.keys(D);if(Y.length!==Ee.length)return!1;for(Ee=0;Ee<Y.length;Ee++)if(!zc.call(D,Y[Ee])||!Us(y[Y[Ee]],D[Y[Ee]]))return!1;return!0}function Pu(y){for(;y&&y.firstChild;)y=y.firstChild;return y}function Su(y,D){var Ee,Y=Pu(y);for(y=0;Y;){if(3===Y.nodeType){if(Ee=y+Y.textContent.length,y<=D&&Ee>=D)return{node:Y,offset:D-y};y=Ee}e:{for(;Y;){if(Y.nextSibling){Y=Y.nextSibling;break e}Y=Y.parentNode}Y=void 0}Y=Pu(Y)}}function Zd(y,D){return!(!y||!D)&&(y===D||(!y||3!==y.nodeType)&&(D&&3===D.nodeType?Zd(y,D.parentNode):"contains"in y?y.contains(D):!!y.compareDocumentPosition&&!!(16&y.compareDocumentPosition(D))))}function _d(){for(var y=window,D=ei();D instanceof y.HTMLIFrameElement;){try{var Y="string"==typeof D.contentWindow.location.href}catch(Ee){Y=!1}if(!Y)break;D=ei((y=D.contentWindow).document)}return D}function md(y){var D=y&&y.nodeName&&y.nodeName.toLowerCase();return D&&("input"===D&&("text"===y.type||"search"===y.type||"tel"===y.type||"url"===y.type||"password"===y.type)||"textarea"===D||"true"===y.contentEditable)}var Hc=M&&"documentMode"in document&&11>=document.documentMode,La=null,kd=null,Oc=null,Mo=!1;function wo(y,D,Y){var Ee=Y.window===Y?Y.document:9===Y.nodeType?Y:Y.ownerDocument;Mo||null==La||La!==ei(Ee)||(Ee="selectionStart"in(Ee=La)&&md(Ee)?{start:Ee.selectionStart,end:Ee.selectionEnd}:{anchorNode:(Ee=(Ee.ownerDocument&&Ee.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:Ee.anchorOffset,focusNode:Ee.focusNode,focusOffset:Ee.focusOffset},Oc&&Ic(Oc,Ee)||(Oc=Ee,0<(Ee=sn(kd,"onSelect")).length&&(D=new oi("onSelect","select",null,D,Y),y.push({event:D,listeners:Ee}),D.target=La)))}te("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),te("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),te(pn,2);for(var Ta="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Tl=0;Tl<Ta.length;Tl++)ut.set(Ta[Tl],0);S("onMouseEnter",["mouseout","mouseover"]),S("onMouseLeave",["mouseout","mouseover"]),S("onPointerEnter",["pointerout","pointerover"]),S("onPointerLeave",["pointerout","pointerover"]),g("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),g("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),g("onBeforeInput",["compositionend","keypress","textInput","paste"]),g("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),g("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),g("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var ou="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Tu=new Set("cancel close invalid load scroll toggle".split(" ").concat(ou));function gc(y,D,Y){var Ee=y.type||"unknown-event";y.currentTarget=Y,function $i(y,D,Y,Ee,ze,At,tn,Tn,ar){if(ao.apply(this,arguments),ir){if(!ir)throw Error(u(198));var li=si;ir=!1,si=null,kn||(kn=!0,nr=li)}}(Ee,D,void 0,y),y.currentTarget=null}function En(y,D){D=0!=(4&D);for(var Y=0;Y<y.length;Y++){var Ee=y[Y],ze=Ee.event;Ee=Ee.listeners;e:{var At=void 0;if(D)for(var tn=Ee.length-1;0<=tn;tn--){var Tn=Ee[tn],ar=Tn.instance,li=Tn.currentTarget;if(Tn=Tn.listener,ar!==At&&ze.isPropagationStopped())break e;gc(ze,Tn,li),At=ar}else for(tn=0;tn<Ee.length;tn++){if(ar=(Tn=Ee[tn]).instance,li=Tn.currentTarget,Tn=Tn.listener,ar!==At&&ze.isPropagationStopped())break e;gc(ze,Tn,li),At=ar}}}if(kn)throw y=nr,kn=!1,nr=null,y}function pa(y,D){var Y=Ml(D),Ee=y+"__bubble";Y.has(Ee)||(ge(D,y,2,!1),Y.add(Ee))}var rd="_reactListening"+Math.random().toString(36).slice(2);function Ze(y){y[rd]||(y[rd]=!0,e.forEach(function(D){Tu.has(D)||Ae(D,!1,y,null),Ae(D,!0,y,null)}))}function Ae(y,D,Y,Ee){var ze=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,At=Y;if("selectionchange"===y&&9!==Y.nodeType&&(At=Y.ownerDocument),null!==Ee&&!D&&Tu.has(y)){if("scroll"!==y)return;ze|=2,At=Ee}var tn=Ml(At),Tn=y+"__"+(D?"capture":"bubble");tn.has(Tn)||(D&&(ze|=4),ge(At,y,ze,D),tn.add(Tn))}function ge(y,D,Y,Ee){var ze=ut.get(D);switch(void 0===ze?2:ze){case 0:ze=Xu;break;case 1:ze=Xa;break;default:ze=Mc}Y=ze.bind(null,D,Y,y),ze=void 0,!Ri||"touchstart"!==D&&"touchmove"!==D&&"wheel"!==D||(ze=!0),y.addEventListener(D,Y,Ee?void 0===ze||{capture:!0,passive:ze}:void 0!==ze&&{passive:ze})}function ht(y,D,Y,Ee,ze){var At=Ee;if(0==(1&D)&&0==(2&D)&&null!==Ee)e:for(;;){if(null===Ee)return;var tn=Ee.tag;if(3===tn||4===tn){var Tn=Ee.stateNode.containerInfo;if(Tn===ze||8===Tn.nodeType&&Tn.parentNode===ze)break;if(4===tn)for(tn=Ee.return;null!==tn;){var ar=tn.tag;if((3===ar||4===ar)&&((ar=tn.stateNode.containerInfo)===ze||8===ar.nodeType&&ar.parentNode===ze))return;tn=tn.return}for(;null!==Tn;){if(null===(tn=cu(Tn)))return;if(5===(ar=tn.tag)||6===ar){Ee=At=tn;continue e}Tn=Tn.parentNode}}Ee=Ee.return}!function Qo(y,D,Y){if(yi)return y(D,Y);yi=!0;try{Cr(y,D,Y)}finally{yi=!1,Yo()}}(function(){var li=At,Ho=Lr(Y),Hs=[];e:{var po=Ki.get(y);if(void 0!==po){var fs=oi,oa=y;switch(y){case"keypress":if(0===rt(Y))break e;case"keydown":case"keyup":fs=Es;break;case"focusin":oa="focus",fs=ot;break;case"focusout":oa="blur",fs=ot;break;case"beforeblur":case"afterblur":fs=ot;break;case"click":if(2===Y.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":fs=Ka;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":fs=Bs;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":fs=Eu;break;case Ns:case hs:case Oo:fs=Xt;break;case kr:fs=ra;break;case"scroll":fs=as;break;case"wheel":fs=td;break;case"copy":case"cut":case"paste":fs=Jo;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":fs=Sl}var Xs=0!=(4&D),Qr=!Xs&&"scroll"===y,Fr=Xs?null!==po?po+"Capture":null:po;Xs=[];for(var Hi,Zr=li;null!==Zr;){var io=(Hi=Zr).stateNode;if(5===Hi.tag&&null!==io&&(Hi=io,null!==Fr&&null!=(io=lo(Zr,Fr))&&Xs.push(Ot(Zr,io,Hi))),Qr)break;Zr=Zr.return}0<Xs.length&&(po=new fs(po,oa,null,Y,Ho),Hs.push({event:po,listeners:Xs}))}}if(0==(7&D)){if(fs="mouseout"===y||"pointerout"===y,(!(po="mouseover"===y||"pointerover"===y)||0!=(16&D)||!(oa=Y.relatedTarget||Y.fromElement)||!cu(oa)&&!oa[gd])&&(fs||po)&&(po=Ho.window===Ho?Ho:(po=Ho.ownerDocument)?po.defaultView||po.parentWindow:window,fs?(fs=li,null!==(oa=(oa=Y.relatedTarget||Y.toElement)?cu(oa):null)&&(oa!==(Qr=Eo(oa))||5!==oa.tag&&6!==oa.tag)&&(oa=null)):(fs=null,oa=li),fs!==oa)){if(Xs=Ka,io="onMouseLeave",Fr="onMouseEnter",Zr="mouse",("pointerout"===y||"pointerover"===y)&&(Xs=Sl,io="onPointerLeave",Fr="onPointerEnter",Zr="pointer"),Qr=null==fs?po:ll(fs),Hi=null==oa?po:ll(oa),(po=new Xs(io,Zr+"leave",fs,Y,Ho)).target=Qr,po.relatedTarget=Hi,io=null,cu(Ho)===li&&((Xs=new Xs(Fr,Zr+"enter",oa,Y,Ho)).target=Hi,Xs.relatedTarget=Qr,io=Xs),Qr=io,fs&&oa)t:{for(Fr=oa,Zr=0,Hi=Xs=fs;Hi;Hi=Un(Hi))Zr++;for(Hi=0,io=Fr;io;io=Un(io))Hi++;for(;0<Zr-Hi;)Xs=Un(Xs),Zr--;for(;0<Hi-Zr;)Fr=Un(Fr),Hi--;for(;Zr--;){if(Xs===Fr||null!==Fr&&Xs===Fr.alternate)break t;Xs=Un(Xs),Fr=Un(Fr)}Xs=null}else Xs=null;null!==fs&&gr(Hs,po,fs,Xs,!1),null!==oa&&null!==Qr&&gr(Hs,Qr,oa,Xs,!0)}if("select"===(fs=(po=li?ll(li):window).nodeName&&po.nodeName.toLowerCase())||"input"===fs&&"file"===po.type)var Ha=ai;else if(ct(po))if(Ei)Ha=ls;else{Ha=fo;var vs=br}else(fs=po.nodeName)&&"input"===fs.toLowerCase()&&("checkbox"===po.type||"radio"===po.type)&&(Ha=$s);switch(Ha&&(Ha=Ha(y,li))?It(Hs,Ha,Y,Ho):(vs&&vs(y,po,li),"focusout"===y&&(vs=po._wrapperState)&&vs.controlled&&"number"===po.type&&an(po,"number",po.value)),vs=li?ll(li):window,y){case"focusin":(ct(vs)||"true"===vs.contentEditable)&&(La=vs,kd=li,Oc=null);break;case"focusout":Oc=kd=La=null;break;case"mousedown":Mo=!0;break;case"contextmenu":case"mouseup":case"dragend":Mo=!1,wo(Hs,Y,Ho);break;case"selectionchange":if(Hc)break;case"keydown":case"keyup":wo(Hs,Y,Ho)}var Pa;if(uu)e:{switch(y){case"compositionstart":var Za="onCompositionStart";break e;case"compositionend":Za="onCompositionEnd";break e;case"compositionupdate":Za="onCompositionUpdate";break e}Za=void 0}else fu?Ld(y,Y)&&(Za="onCompositionEnd"):"keydown"===y&&229===Y.keyCode&&(Za="onCompositionStart");Za&&(Uu&&"ko"!==Y.locale&&(fu||"onCompositionStart"!==Za?"onCompositionEnd"===Za&&fu&&(Pa=Ya()):(Ol="value"in(Ja=Ho)?Ja.value:Ja.textContent,fu=!0)),0<(vs=sn(li,Za)).length&&(Za=new El(Za,y,null,Y,Ho),Hs.push({event:Za,listeners:vs}),(Pa||null!==(Pa=Io(Y)))&&(Za.data=Pa))),(Pa=nd?function Sr(y,D){switch(y){case"compositionend":return Io(D);case"keypress":return 32!==D.which?null:(wu=!0,Yu);case"textInput":return(y=D.data)===Yu&&wu?null:y;default:return null}}(y,Y):function Z(y,D){if(fu)return"compositionend"===y||!uu&&Ld(y,D)?(y=Ya(),Bl=Ol=Ja=null,fu=!1,y):null;switch(y){case"paste":default:return null;case"keypress":if(!(D.ctrlKey||D.altKey||D.metaKey)||D.ctrlKey&&D.altKey){if(D.char&&1<D.char.length)return D.char;if(D.which)return String.fromCharCode(D.which)}return null;case"compositionend":return Uu&&"ko"!==D.locale?null:D.data}}(y,Y))&&0<(li=sn(li,"onBeforeInput")).length&&(Ho=new El("onBeforeInput","beforeinput",null,Y,Ho),Hs.push({event:Ho,listeners:li}),Ho.data=Pa)}En(Hs,D)})}function Ot(y,D,Y){return{instance:y,listener:D,currentTarget:Y}}function sn(y,D){for(var Y=D+"Capture",Ee=[];null!==y;){var ze=y,At=ze.stateNode;5===ze.tag&&null!==At&&(ze=At,null!=(At=lo(y,Y))&&Ee.unshift(Ot(y,At,ze)),null!=(At=lo(y,D))&&Ee.push(Ot(y,At,ze))),y=y.return}return Ee}function Un(y){if(null===y)return null;do{y=y.return}while(y&&5!==y.tag);return y||null}function gr(y,D,Y,Ee,ze){for(var At=D._reactName,tn=[];null!==Y&&Y!==Ee;){var Tn=Y,ar=Tn.alternate,li=Tn.stateNode;if(null!==ar&&ar===Ee)break;5===Tn.tag&&null!==li&&(Tn=li,ze?null!=(ar=lo(Y,At))&&tn.unshift(Ot(Y,ar,Tn)):ze||null!=(ar=lo(Y,At))&&tn.push(Ot(Y,ar,Tn))),Y=Y.return}0!==tn.length&&y.push({event:D,listeners:tn})}function gi(){}var Lo=null,Ca=null;function ms(y,D){switch(y){case"button":case"input":case"select":case"textarea":return!!D.autoFocus}return!1}function ha(y,D){return"textarea"===y||"option"===y||"noscript"===y||"string"==typeof D.children||"number"==typeof D.children||"object"==typeof D.dangerouslySetInnerHTML&&null!==D.dangerouslySetInnerHTML&&null!=D.dangerouslySetInnerHTML.__html}var Ma="function"==typeof setTimeout?setTimeout:void 0,Nu="function"==typeof clearTimeout?clearTimeout:void 0;function cc(y){(1===y.nodeType||9===y.nodeType&&null!=(y=y.body))&&(y.textContent="")}function ka(y){for(;null!=y;y=y.nextSibling){var D=y.nodeType;if(1===D||3===D)break}return y}function rl(y){y=y.previousSibling;for(var D=0;y;){if(8===y.nodeType){var Y=y.data;if("$"===Y||"$!"===Y||"$?"===Y){if(0===D)return y;D--}else"/$"===Y&&D++}y=y.previousSibling}return null}var vc=0,ju=Math.random().toString(36).slice(2),Ul="__reactFiber$"+ju,tc="__reactProps$"+ju,gd="__reactContainer$"+ju,Fc="__reactEvents$"+ju;function cu(y){var D=y[Ul];if(D)return D;for(var Y=y.parentNode;Y;){if(D=Y[gd]||Y[Ul]){if(Y=D.alternate,null!==D.child||null!==Y&&null!==Y.child)for(y=rl(y);null!==y;){if(Y=y[Ul])return Y;y=rl(y)}return D}Y=(y=Y).parentNode}return null}function Oa(y){return!(y=y[Ul]||y[gd])||5!==y.tag&&6!==y.tag&&13!==y.tag&&3!==y.tag?null:y}function ll(y){if(5===y.tag||6===y.tag)return y.stateNode;throw Error(u(33))}function Ll(y){return y[tc]||null}function Ml(y){var D=y[Fc];return void 0===D&&(D=y[Fc]=new Set),D}var gf=[],zd=-1;function id(y){return{current:y}}function Al(y){0>zd||(y.current=gf[zd],gf[zd]=null,zd--)}function kl(y,D){zd++,gf[zd]=y.current,y.current=D}var Gu={},ul=id(Gu),Cu=id(!1),cn=Gu;function Ec(y,D){var Y=y.type.contextTypes;if(!Y)return Gu;var Ee=y.stateNode;if(Ee&&Ee.__reactInternalMemoizedUnmaskedChildContext===D)return Ee.__reactInternalMemoizedMaskedChildContext;var At,ze={};for(At in Y)ze[At]=D[At];return Ee&&((y=y.stateNode).__reactInternalMemoizedUnmaskedChildContext=D,y.__reactInternalMemoizedMaskedChildContext=ze),ze}function Iu(y){return null!=y.childContextTypes}function qa(){Al(Cu),Al(ul)}function cl(y,D,Y){if(ul.current!==Gu)throw Error(u(168));kl(ul,D),kl(Cu,Y)}function xf(y,D,Y){var Ee=y.stateNode;if(y=D.childContextTypes,"function"!=typeof Ee.getChildContext)return Y;for(var ze in Ee=Ee.getChildContext())if(!(ze in y))throw Error(u(108,hr(D)||"Unknown",ze));return a({},Y,Ee)}function Bc(y){return y=(y=y.stateNode)&&y.__reactInternalMemoizedMergedChildContext||Gu,cn=ul.current,kl(ul,y),kl(Cu,Cu.current),!0}function vd(y,D,Y){var Ee=y.stateNode;if(!Ee)throw Error(u(169));Y?(y=xf(y,D,cn),Ee.__reactInternalMemoizedMergedChildContext=y,Al(Cu),Al(ul),kl(ul,y)):Al(Cu),kl(Cu,Y)}var dc=null,yd=null,$p=f.unstable_runWithPriority,vf=f.unstable_scheduleCallback,ap=f.unstable_cancelCallback,Vu=f.unstable_shouldYield,fc=f.unstable_requestPaint,Wd=f.unstable_now,Rf=f.unstable_getCurrentPriorityLevel,yp=f.unstable_ImmediatePriority,Lc=f.unstable_UserBlockingPriority,Fu=f.unstable_NormalPriority,od=f.unstable_LowPriority,nc=f.unstable_IdlePriority,Aa={},Wc=void 0!==fc?fc:function(){},sd=null,lp=null,$d=!1,vo=Wd(),pu=1e4>vo?Wd:function(){return Wd()-vo};function $l(){switch(Rf()){case yp:return 99;case Lc:return 98;case Fu:return 97;case od:return 96;case nc:return 95;default:throw Error(u(332))}}function Ac(y){switch(y){case 99:return yp;case 98:return Lc;case 97:return Fu;case 96:return od;case 95:return nc;default:throw Error(u(332))}}function ga(y,D){return y=Ac(y),$p(y,D)}function Dc(y,D,Y){return y=Ac(y),vf(y,D,Y)}function Lu(){if(null!==lp){var y=lp;lp=null,ap(y)}bc()}function bc(){if(!$d&&null!==sd){$d=!0;var y=0;try{var D=sd;ga(99,function(){for(;y<D.length;y++){var Y=D[y];do{Y=Y(!0)}while(null!==Y)}}),sd=null}catch(Y){throw null!==sd&&(sd=sd.slice(y+1)),vf(yp,Lu),Y}finally{$d=!1}}}var rc=fe.ReactCurrentBatchConfig;function Ql(y,D){if(y&&y.defaultProps){for(var Y in D=a({},D),y=y.defaultProps)void 0===D[Y]&&(D[Y]=y[Y]);return D}return D}var Sc=id(null),Tc=null,Zu=null,hu=null;function Uc(){hu=Zu=Tc=null}function pc(y){var D=Sc.current;Al(Sc),y.type._context._currentValue=D}function Jd(y,D){for(;null!==y;){var Y=y.alternate;if((y.childLanes&D)===D){if(null===Y||(Y.childLanes&D)===D)break;Y.childLanes|=D}else y.childLanes|=D,null!==Y&&(Y.childLanes|=D);y=y.return}}function Jc(y,D){Tc=y,hu=Zu=null,null!==(y=y.dependencies)&&null!==y.firstContext&&(0!=(y.lanes&D)&&(Tf=!0),y.firstContext=null)}function Nl(y,D){if(hu!==y&&!1!==D&&0!==D)if(("number"!=typeof D||1073741823===D)&&(hu=y,D=1073741823),D={context:y,observedBits:D,next:null},null===Zu){if(null===Tc)throw Error(u(308));Zu=D,Tc.dependencies={lanes:0,firstContext:D,responders:null}}else Zu=Zu.next=D;return y._currentValue}var Yc=!1;function ic(y){y.updateQueue={baseState:y.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function h(y,D){D.updateQueue===(y=y.updateQueue)&&(D.updateQueue={baseState:y.baseState,firstBaseUpdate:y.firstBaseUpdate,lastBaseUpdate:y.lastBaseUpdate,shared:y.shared,effects:y.effects})}function E(y,D){return{eventTime:y,lane:D,tag:0,payload:null,callback:null,next:null}}function P(y,D){if(null!==(y=y.updateQueue)){var Y=(y=y.shared).pending;null===Y?D.next=D:(D.next=Y.next,Y.next=D),y.pending=D}}function L(y,D){var Y=y.updateQueue,Ee=y.alternate;if(null===Ee||Y!==(Ee=Ee.updateQueue))null===(y=Y.lastBaseUpdate)?Y.firstBaseUpdate=D:y.next=D,Y.lastBaseUpdate=D;else{var ze=null,At=null;if(null!==(Y=Y.firstBaseUpdate)){do{var tn={eventTime:Y.eventTime,lane:Y.lane,tag:Y.tag,payload:Y.payload,callback:Y.callback,next:null};null===At?ze=At=tn:At=At.next=tn,Y=Y.next}while(null!==Y);null===At?ze=At=D:At=At.next=D}else ze=At=D;y.updateQueue=Y={baseState:Ee.baseState,firstBaseUpdate:ze,lastBaseUpdate:At,shared:Ee.shared,effects:Ee.effects}}}function X(y,D,Y,Ee){var ze=y.updateQueue;Yc=!1;var At=ze.firstBaseUpdate,tn=ze.lastBaseUpdate,Tn=ze.shared.pending;if(null!==Tn){ze.shared.pending=null;var ar=Tn,li=ar.next;ar.next=null,null===tn?At=li:tn.next=li,tn=ar;var Ho=y.alternate;if(null!==Ho){var Hs=(Ho=Ho.updateQueue).lastBaseUpdate;Hs!==tn&&(null===Hs?Ho.firstBaseUpdate=li:Hs.next=li,Ho.lastBaseUpdate=ar)}}if(null!==At){for(Hs=ze.baseState,tn=0,Ho=li=ar=null;;){var po=At.eventTime;if((Ee&(Tn=At.lane))===Tn){null!==Ho&&(Ho=Ho.next={eventTime:po,lane:0,tag:At.tag,payload:At.payload,callback:At.callback,next:null});e:{var fs=y,oa=At;switch(Tn=D,po=Y,oa.tag){case 1:if("function"==typeof(fs=oa.payload)){Hs=fs.call(po,Hs,Tn);break e}Hs=fs;break e;case 3:fs.flags=-4097&fs.flags|64;case 0:if(null==(Tn="function"==typeof(fs=oa.payload)?fs.call(po,Hs,Tn):fs))break e;Hs=a({},Hs,Tn);break e;case 2:Yc=!0}}null!==At.callback&&(y.flags|=32,null===(Tn=ze.effects)?ze.effects=[At]:Tn.push(At))}else po={eventTime:po,lane:Tn,tag:At.tag,payload:At.payload,callback:At.callback,next:null},null===Ho?(li=Ho=po,ar=Hs):Ho=Ho.next=po,tn|=Tn;if(null===(At=At.next)){if(null===(Tn=ze.shared.pending))break;At=Tn.next,Tn.next=null,ze.lastBaseUpdate=Tn,ze.shared.pending=null}}null===Ho&&(ar=Hs),ze.baseState=ar,ze.firstBaseUpdate=li,ze.lastBaseUpdate=Ho,Mp|=tn,y.lanes=tn,y.memoizedState=Hs}}function de(y,D,Y){if(y=D.effects,D.effects=null,null!==y)for(D=0;D<y.length;D++){var Ee=y[D],ze=Ee.callback;if(null!==ze){if(Ee.callback=null,Ee=Y,"function"!=typeof ze)throw Error(u(191,ze));ze.call(Ee)}}}var ve=(new r.Component).refs;function Ye(y,D,Y,Ee){Y=null==(Y=Y(Ee,D=y.memoizedState))?D:a({},D,Y),y.memoizedState=Y,0===y.lanes&&(y.updateQueue.baseState=Y)}var xe={isMounted:function(y){return!!(y=y._reactInternals)&&Eo(y)===y},enqueueSetState:function(y,D,Y){y=y._reactInternals;var Ee=Gc(),ze=Xf(y),At=E(Ee,ze);At.payload=D,null!=Y&&(At.callback=Y),P(y,At),pp(y,ze,Ee)},enqueueReplaceState:function(y,D,Y){y=y._reactInternals;var Ee=Gc(),ze=Xf(y),At=E(Ee,ze);At.tag=1,At.payload=D,null!=Y&&(At.callback=Y),P(y,At),pp(y,ze,Ee)},enqueueForceUpdate:function(y,D){y=y._reactInternals;var Y=Gc(),Ee=Xf(y),ze=E(Y,Ee);ze.tag=2,null!=D&&(ze.callback=D),P(y,ze),pp(y,Ee,Y)}};function nt(y,D,Y,Ee,ze,At,tn){return"function"==typeof(y=y.stateNode).shouldComponentUpdate?y.shouldComponentUpdate(Ee,At,tn):!(D.prototype&&D.prototype.isPureReactComponent&&Ic(Y,Ee)&&Ic(ze,At))}function St(y,D,Y){var Ee=!1,ze=Gu,At=D.contextType;return"object"==typeof At&&null!==At?At=Nl(At):(ze=Iu(D)?cn:ul.current,At=(Ee=null!=(Ee=D.contextTypes))?Ec(y,ze):Gu),D=new D(Y,At),y.memoizedState=null!=D.state?D.state:null,D.updater=xe,y.stateNode=D,D._reactInternals=y,Ee&&((y=y.stateNode).__reactInternalMemoizedUnmaskedChildContext=ze,y.__reactInternalMemoizedMaskedChildContext=At),D}function Mt(y,D,Y,Ee){y=D.state,"function"==typeof D.componentWillReceiveProps&&D.componentWillReceiveProps(Y,Ee),"function"==typeof D.UNSAFE_componentWillReceiveProps&&D.UNSAFE_componentWillReceiveProps(Y,Ee),D.state!==y&&xe.enqueueReplaceState(D,D.state,null)}function fn(y,D,Y,Ee){var ze=y.stateNode;ze.props=Y,ze.state=y.memoizedState,ze.refs=ve,ic(y);var At=D.contextType;"object"==typeof At&&null!==At?ze.context=Nl(At):(At=Iu(D)?cn:ul.current,ze.context=Ec(y,At)),X(y,Y,ze,Ee),ze.state=y.memoizedState,"function"==typeof(At=D.getDerivedStateFromProps)&&(Ye(y,D,At,Y),ze.state=y.memoizedState),"function"==typeof D.getDerivedStateFromProps||"function"==typeof ze.getSnapshotBeforeUpdate||"function"!=typeof ze.UNSAFE_componentWillMount&&"function"!=typeof ze.componentWillMount||(D=ze.state,"function"==typeof ze.componentWillMount&&ze.componentWillMount(),"function"==typeof ze.UNSAFE_componentWillMount&&ze.UNSAFE_componentWillMount(),D!==ze.state&&xe.enqueueReplaceState(ze,ze.state,null),X(y,Y,ze,Ee),ze.state=y.memoizedState),"function"==typeof ze.componentDidMount&&(y.flags|=4)}var jn=Array.isArray;function Vn(y,D,Y){if(null!==(y=Y.ref)&&"function"!=typeof y&&"object"!=typeof y){if(Y._owner){if(Y=Y._owner){if(1!==Y.tag)throw Error(u(309));var Ee=Y.stateNode}if(!Ee)throw Error(u(147,y));var ze=""+y;return null!==D&&null!==D.ref&&"function"==typeof D.ref&&D.ref._stringRef===ze?D.ref:((D=function(At){var tn=Ee.refs;tn===ve&&(tn=Ee.refs={}),null===At?delete tn[ze]:tn[ze]=At})._stringRef=ze,D)}if("string"!=typeof y)throw Error(u(284));if(!Y._owner)throw Error(u(290,y))}return y}function fr(y,D){if("textarea"!==y.type)throw Error(u(31,"[object Object]"===Object.prototype.toString.call(D)?"object with keys {"+Object.keys(D).join(", ")+"}":D))}function $r(y){function D(Qr,Fr){if(y){var Zr=Qr.lastEffect;null!==Zr?(Zr.nextEffect=Fr,Qr.lastEffect=Fr):Qr.firstEffect=Qr.lastEffect=Fr,Fr.nextEffect=null,Fr.flags=8}}function Y(Qr,Fr){if(!y)return null;for(;null!==Fr;)D(Qr,Fr),Fr=Fr.sibling;return null}function Ee(Qr,Fr){for(Qr=new Map;null!==Fr;)Qr.set(null!==Fr.key?Fr.key:Fr.index,Fr),Fr=Fr.sibling;return Qr}function ze(Qr,Fr){return(Qr=hp(Qr,Fr)).index=0,Qr.sibling=null,Qr}function At(Qr,Fr,Zr){return Qr.index=Zr,y?null!==(Zr=Qr.alternate)?(Zr=Zr.index)<Fr?(Qr.flags=2,Fr):Zr:(Qr.flags=2,Fr):Fr}function tn(Qr){return y&&null===Qr.alternate&&(Qr.flags=2),Qr}function Tn(Qr,Fr,Zr,Hi){return null===Fr||6!==Fr.tag?((Fr=T_(Zr,Qr.mode,Hi)).return=Qr,Fr):((Fr=ze(Fr,Zr)).return=Qr,Fr)}function ar(Qr,Fr,Zr,Hi){return null!==Fr&&Fr.elementType===Zr.type?((Hi=ze(Fr,Zr.props)).ref=Vn(Qr,Fr,Zr),Hi.return=Qr,Hi):((Hi=Dh(Zr.type,Zr.key,Zr.props,null,Qr.mode,Hi)).ref=Vn(Qr,Fr,Zr),Hi.return=Qr,Hi)}function li(Qr,Fr,Zr,Hi){return null===Fr||4!==Fr.tag||Fr.stateNode.containerInfo!==Zr.containerInfo||Fr.stateNode.implementation!==Zr.implementation?((Fr=xh(Zr,Qr.mode,Hi)).return=Qr,Fr):((Fr=ze(Fr,Zr.children||[])).return=Qr,Fr)}function Ho(Qr,Fr,Zr,Hi,io){return null===Fr||7!==Fr.tag?((Fr=Vc(Zr,Qr.mode,Hi,io)).return=Qr,Fr):((Fr=ze(Fr,Zr)).return=Qr,Fr)}function Hs(Qr,Fr,Zr){if("string"==typeof Fr||"number"==typeof Fr)return(Fr=T_(""+Fr,Qr.mode,Zr)).return=Qr,Fr;if("object"==typeof Fr&&null!==Fr){switch(Fr.$$typeof){case he:return(Zr=Dh(Fr.type,Fr.key,Fr.props,null,Qr.mode,Zr)).ref=Vn(Qr,null,Fr),Zr.return=Qr,Zr;case Ce:return(Fr=xh(Fr,Qr.mode,Zr)).return=Qr,Fr}if(jn(Fr)||Ct(Fr))return(Fr=Vc(Fr,Qr.mode,Zr,null)).return=Qr,Fr;fr(Qr,Fr)}return null}function po(Qr,Fr,Zr,Hi){var io=null!==Fr?Fr.key:null;if("string"==typeof Zr||"number"==typeof Zr)return null!==io?null:Tn(Qr,Fr,""+Zr,Hi);if("object"==typeof Zr&&null!==Zr){switch(Zr.$$typeof){case he:return Zr.key===io?Zr.type===ce?Ho(Qr,Fr,Zr.props.children,Hi,io):ar(Qr,Fr,Zr,Hi):null;case Ce:return Zr.key===io?li(Qr,Fr,Zr,Hi):null}if(jn(Zr)||Ct(Zr))return null!==io?null:Ho(Qr,Fr,Zr,Hi,null);fr(Qr,Zr)}return null}function fs(Qr,Fr,Zr,Hi,io){if("string"==typeof Hi||"number"==typeof Hi)return Tn(Fr,Qr=Qr.get(Zr)||null,""+Hi,io);if("object"==typeof Hi&&null!==Hi){switch(Hi.$$typeof){case he:return Qr=Qr.get(null===Hi.key?Zr:Hi.key)||null,Hi.type===ce?Ho(Fr,Qr,Hi.props.children,io,Hi.key):ar(Fr,Qr,Hi,io);case Ce:return li(Fr,Qr=Qr.get(null===Hi.key?Zr:Hi.key)||null,Hi,io)}if(jn(Hi)||Ct(Hi))return Ho(Fr,Qr=Qr.get(Zr)||null,Hi,io,null);fr(Fr,Hi)}return null}return function(Qr,Fr,Zr,Hi){var io="object"==typeof Zr&&null!==Zr&&Zr.type===ce&&null===Zr.key;io&&(Zr=Zr.props.children);var Ha="object"==typeof Zr&&null!==Zr;if(Ha)switch(Zr.$$typeof){case he:e:{for(Ha=Zr.key,io=Fr;null!==io;){if(io.key===Ha){if(7===io.tag){if(Zr.type===ce){Y(Qr,io.sibling),(Fr=ze(io,Zr.props.children)).return=Qr,Qr=Fr;break e}}else if(io.elementType===Zr.type){Y(Qr,io.sibling),(Fr=ze(io,Zr.props)).ref=Vn(Qr,io,Zr),Fr.return=Qr,Qr=Fr;break e}Y(Qr,io);break}D(Qr,io),io=io.sibling}Zr.type===ce?((Fr=Vc(Zr.props.children,Qr.mode,Hi,Zr.key)).return=Qr,Qr=Fr):((Hi=Dh(Zr.type,Zr.key,Zr.props,null,Qr.mode,Hi)).ref=Vn(Qr,Fr,Zr),Hi.return=Qr,Qr=Hi)}return tn(Qr);case Ce:e:{for(io=Zr.key;null!==Fr;){if(Fr.key===io){if(4===Fr.tag&&Fr.stateNode.containerInfo===Zr.containerInfo&&Fr.stateNode.implementation===Zr.implementation){Y(Qr,Fr.sibling),(Fr=ze(Fr,Zr.children||[])).return=Qr,Qr=Fr;break e}Y(Qr,Fr);break}D(Qr,Fr),Fr=Fr.sibling}(Fr=xh(Zr,Qr.mode,Hi)).return=Qr,Qr=Fr}return tn(Qr)}if("string"==typeof Zr||"number"==typeof Zr)return Zr=""+Zr,null!==Fr&&6===Fr.tag?(Y(Qr,Fr.sibling),(Fr=ze(Fr,Zr)).return=Qr,Qr=Fr):(Y(Qr,Fr),(Fr=T_(Zr,Qr.mode,Hi)).return=Qr,Qr=Fr),tn(Qr);if(jn(Zr))return function oa(Qr,Fr,Zr,Hi){for(var io=null,Ha=null,vs=Fr,Pa=Fr=0,Za=null;null!==vs&&Pa<Zr.length;Pa++){vs.index>Pa?(Za=vs,vs=null):Za=vs.sibling;var va=po(Qr,vs,Zr[Pa],Hi);if(null===va){null===vs&&(vs=Za);break}y&&vs&&null===va.alternate&&D(Qr,vs),Fr=At(va,Fr,Pa),null===Ha?io=va:Ha.sibling=va,Ha=va,vs=Za}if(Pa===Zr.length)return Y(Qr,vs),io;if(null===vs){for(;Pa<Zr.length;Pa++)null!==(vs=Hs(Qr,Zr[Pa],Hi))&&(Fr=At(vs,Fr,Pa),null===Ha?io=vs:Ha.sibling=vs,Ha=vs);return io}for(vs=Ee(Qr,vs);Pa<Zr.length;Pa++)null!==(Za=fs(vs,Qr,Pa,Zr[Pa],Hi))&&(y&&null!==Za.alternate&&vs.delete(null===Za.key?Pa:Za.key),Fr=At(Za,Fr,Pa),null===Ha?io=Za:Ha.sibling=Za,Ha=Za);return y&&vs.forEach(function(Hf){return D(Qr,Hf)}),io}(Qr,Fr,Zr,Hi);if(Ct(Zr))return function Xs(Qr,Fr,Zr,Hi){var io=Ct(Zr);if("function"!=typeof io)throw Error(u(150));if(null==(Zr=io.call(Zr)))throw Error(u(151));for(var Ha=io=null,vs=Fr,Pa=Fr=0,Za=null,va=Zr.next();null!==vs&&!va.done;Pa++,va=Zr.next()){vs.index>Pa?(Za=vs,vs=null):Za=vs.sibling;var Hf=po(Qr,vs,va.value,Hi);if(null===Hf){null===vs&&(vs=Za);break}y&&vs&&null===Hf.alternate&&D(Qr,vs),Fr=At(Hf,Fr,Pa),null===Ha?io=Hf:Ha.sibling=Hf,Ha=Hf,vs=Za}if(va.done)return Y(Qr,vs),io;if(null===vs){for(;!va.done;Pa++,va=Zr.next())null!==(va=Hs(Qr,va.value,Hi))&&(Fr=At(va,Fr,Pa),null===Ha?io=va:Ha.sibling=va,Ha=va);return io}for(vs=Ee(Qr,vs);!va.done;Pa++,va=Zr.next())null!==(va=fs(vs,Qr,Pa,va.value,Hi))&&(y&&null!==va.alternate&&vs.delete(null===va.key?Pa:va.key),Fr=At(va,Fr,Pa),null===Ha?io=va:Ha.sibling=va,Ha=va);return y&&vs.forEach(function(im){return D(Qr,im)}),io}(Qr,Fr,Zr,Hi);if(Ha&&fr(Qr,Zr),void 0===Zr&&!io)switch(Qr.tag){case 1:case 22:case 0:case 11:case 15:throw Error(u(152,hr(Qr.type)||"Component"))}return Y(Qr,Fr)}}var Ui=$r(!0),is=$r(!1),yo={},Vs=id(yo),qs=id(yo),el=id(yo);function $a(y){if(y===yo)throw Error(u(174));return y}function Ga(y,D){switch(kl(el,D),kl(qs,y),kl(Vs,yo),y=D.nodeType){case 9:case 11:D=(D=D.documentElement)?D.namespaceURI:mn(null,"");break;default:D=mn(D=(y=8===y?D.parentNode:D).namespaceURI||null,y=y.tagName)}Al(Vs),kl(Vs,D)}function wa(){Al(Vs),Al(qs),Al(el)}function Gl(y){$a(el.current);var D=$a(Vs.current),Y=mn(D,y.type);D!==Y&&(kl(qs,y),kl(Vs,Y))}function _u(y){qs.current===y&&(Al(Vs),Al(qs))}var Va=id(0);function Mu(y){for(var D=y;null!==D;){if(13===D.tag){var Y=D.memoizedState;if(null!==Y&&(null===(Y=Y.dehydrated)||"$?"===Y.data||"$!"===Y.data))return D}else if(19===D.tag&&void 0!==D.memoizedProps.revealOrder){if(0!=(64&D.flags))return D}else if(null!==D.child){D.child.return=D,D=D.child;continue}if(D===y)break;for(;null===D.sibling;){if(null===D.return||D.return===y)return null;D=D.return}D.sibling.return=D.return,D=D.sibling}return null}var ku=null,xc=null,Ou=!1;function Qd(y,D){var Y=Ad(5,null,null,0);Y.elementType="DELETED",Y.type="DELETED",Y.stateNode=D,Y.return=y,Y.flags=8,null!==y.lastEffect?(y.lastEffect.nextEffect=Y,y.lastEffect=Y):y.firstEffect=y.lastEffect=Y}function il(y,D){switch(y.tag){case 5:return null!==(D=1!==D.nodeType||y.type.toLowerCase()!==D.nodeName.toLowerCase()?null:D)&&(y.stateNode=D,!0);case 6:return null!==(D=""===y.pendingProps||3!==D.nodeType?null:D)&&(y.stateNode=D,!0);default:return!1}}function K(y){if(Ou){var D=xc;if(D){var Y=D;if(!il(y,D)){if(!(D=ka(Y.nextSibling))||!il(y,D))return y.flags=-1025&y.flags|2,Ou=!1,void(ku=y);Qd(ku,Y)}ku=y,xc=ka(D.firstChild)}else y.flags=-1025&y.flags|2,Ou=!1,ku=y}}function be(y){for(y=y.return;null!==y&&5!==y.tag&&3!==y.tag&&13!==y.tag;)y=y.return;ku=y}function lt(y){if(y!==ku)return!1;if(!Ou)return be(y),Ou=!0,!1;var D=y.type;if(5!==y.tag||"head"!==D&&"body"!==D&&!ha(D,y.memoizedProps))for(D=xc;D;)Qd(y,D),D=ka(D.nextSibling);if(be(y),13===y.tag){if(!(y=null!==(y=y.memoizedState)?y.dehydrated:null))throw Error(u(317));e:{for(y=y.nextSibling,D=0;y;){if(8===y.nodeType){var Y=y.data;if("/$"===Y){if(0===D){xc=ka(y.nextSibling);break e}D--}else"$"!==Y&&"$!"!==Y&&"$?"!==Y||D++}y=y.nextSibling}xc=null}}else xc=ku?ka(y.stateNode.nextSibling):null;return!0}function wt(){xc=ku=null,Ou=!1}var ln=[];function Dr(){for(var y=0;y<ln.length;y++)ln[y]._workInProgressVersionPrimary=null;ln.length=0}var Ai=fe.ReactCurrentDispatcher,gs=fe.ReactCurrentBatchConfig,Da=0,ca=null,Dl=null,Yl=null,jc=!1,yf=!1;function Hd(){throw Error(u(321))}function d_(y,D){if(null===D)return!1;for(var Y=0;Y<D.length&&Y<y.length;Y++)if(!Us(y[Y],D[Y]))return!1;return!0}function ah(y,D,Y,Ee,ze,At){if(Da=At,ca=D,D.memoizedState=null,D.updateQueue=null,D.lanes=0,Ai.current=null===y||null===y.memoizedState?bf:Sf,y=Y(Ee,ze),yf){At=0;do{if(yf=!1,!(25>At))throw Error(u(301));At+=1,Yl=Dl=null,D.updateQueue=null,Ai.current=Zf,y=Y(Ee,ze)}while(yf)}if(Ai.current=fh,D=null!==Dl&&null!==Dl.next,Da=0,Yl=Dl=ca=null,jc=!1,D)throw Error(u(300));return y}function Rc(){var y={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Yl?ca.memoizedState=Yl=y:Yl=Yl.next=y,Yl}function Xd(){if(null===Dl){var y=ca.alternate;y=null!==y?y.memoizedState:null}else y=Dl.next;var D=null===Yl?ca.memoizedState:Yl.next;if(null!==D)Yl=D,Dl=y;else{if(null===y)throw Error(u(310));y={memoizedState:(Dl=y).memoizedState,baseState:Dl.baseState,baseQueue:Dl.baseQueue,queue:Dl.queue,next:null},null===Yl?ca.memoizedState=Yl=y:Yl=Yl.next=y}return Yl}function Bd(y,D){return"function"==typeof D?D(y):D}function lh(y){var D=Xd(),Y=D.queue;if(null===Y)throw Error(u(311));Y.lastRenderedReducer=y;var Ee=Dl,ze=Ee.baseQueue,At=Y.pending;if(null!==At){if(null!==ze){var tn=ze.next;ze.next=At.next,At.next=tn}Ee.baseQueue=ze=At,Y.pending=null}if(null!==ze){Ee=Ee.baseState;var Tn=tn=At=null,ar=ze=ze.next;do{var li=ar.lane;if((Da&li)===li)null!==Tn&&(Tn=Tn.next={lane:0,action:ar.action,eagerReducer:ar.eagerReducer,eagerState:ar.eagerState,next:null}),Ee=ar.eagerReducer===y?ar.eagerState:y(Ee,ar.action);else{var Ho={lane:li,action:ar.action,eagerReducer:ar.eagerReducer,eagerState:ar.eagerState,next:null};null===Tn?(tn=Tn=Ho,At=Ee):Tn=Tn.next=Ho,ca.lanes|=li,Mp|=li}ar=ar.next}while(null!==ar&&ar!==ze);null===Tn?At=Ee:Tn.next=tn,Us(Ee,D.memoizedState)||(Tf=!0),D.memoizedState=Ee,D.baseState=At,D.baseQueue=Tn,Y.lastRenderedState=Ee}return[D.memoizedState,Y.dispatch]}function Hp(y){var D=Xd(),Y=D.queue;if(null===Y)throw Error(u(311));Y.lastRenderedReducer=y;var Ee=Y.dispatch,ze=Y.pending,At=D.memoizedState;if(null!==ze){Y.pending=null;var tn=ze=ze.next;do{At=y(At,tn.action),tn=tn.next}while(tn!==ze);Us(At,D.memoizedState)||(Tf=!0),D.memoizedState=At,null===D.baseQueue&&(D.baseState=At),Y.lastRenderedState=At}return[At,Ee]}function dl(y,D,Y){var Ee=D._getVersion;Ee=Ee(D._source);var ze=D._workInProgressVersionPrimary;if(null!==ze?y=ze===Ee:(y=(Da&(y=y.mutableReadLanes))===y)&&(D._workInProgressVersionPrimary=Ee,ln.push(D)),y)return Y(D._source);throw ln.push(D),Error(u(350))}function Bh(y,D,Y,Ee){var ze=wc;if(null===ze)throw Error(u(349));var At=D._getVersion,tn=At(D._source),Tn=Ai.current,ar=Tn.useState(function(){return dl(ze,D,Y)}),li=ar[1],Ho=ar[0];ar=Yl;var Hs=y.memoizedState,po=Hs.refs,fs=po.getSnapshot,oa=Hs.source;Hs=Hs.subscribe;var Xs=ca;return y.memoizedState={refs:po,source:D,subscribe:Ee},Tn.useEffect(function(){po.getSnapshot=Y,po.setSnapshot=li;var Qr=At(D._source);if(!Us(tn,Qr)){Qr=Y(D._source),Us(Ho,Qr)||(li(Qr),Qr=Xf(Xs),ze.mutableReadLanes|=Qr&ze.pendingLanes),ze.entangledLanes|=Qr=ze.mutableReadLanes;for(var Fr=ze.entanglements,Zr=Qr;0<Zr;){var Hi=31-sl(Zr),io=1<<Hi;Fr[Hi]|=Qr,Zr&=~io}}},[Y,D,Ee]),Tn.useEffect(function(){return Ee(D._source,function(){var Qr=po.getSnapshot,Fr=po.setSnapshot;try{Fr(Qr(D._source));var Zr=Xf(Xs);ze.mutableReadLanes|=Zr&ze.pendingLanes}catch(Hi){Fr(function(){throw Hi})}})},[D,Ee]),Us(fs,Y)&&Us(oa,D)&&Us(Hs,Ee)||((y={pending:null,dispatch:null,lastRenderedReducer:Bd,lastRenderedState:Ho}).dispatch=li=f_.bind(null,ca,y),ar.queue=y,ar.baseQueue=null,Ho=dl(ze,D,Y),ar.memoizedState=ar.baseState=Ho),Ho}function wf(y,D,Y){return Bh(Xd(),y,D,Y)}function Ed(y){var D=Rc();return"function"==typeof y&&(y=y()),D.memoizedState=D.baseState=y,y=(y=D.queue={pending:null,dispatch:null,lastRenderedReducer:Bd,lastRenderedState:y}).dispatch=f_.bind(null,ca,y),[D.memoizedState,y]}function ad(y,D,Y,Ee){return y={tag:y,create:D,destroy:Y,deps:Ee,next:null},null===(D=ca.updateQueue)?(ca.updateQueue=D={lastEffect:null},D.lastEffect=y.next=y):null===(Y=D.lastEffect)?D.lastEffect=y.next=y:(Ee=Y.next,Y.next=y,y.next=Ee,D.lastEffect=y),y}function Kl(y){return Rc().memoizedState={current:y}}function up(){return Xd().memoizedState}function ld(y,D,Y,Ee){var ze=Rc();ca.flags|=y,ze.memoizedState=ad(1|D,Y,void 0,void 0===Ee?null:Ee)}function Uh(y,D,Y,Ee){var ze=Xd();Ee=void 0===Ee?null:Ee;var At=void 0;if(null!==Dl){var tn=Dl.memoizedState;if(At=tn.destroy,null!==Ee&&d_(Ee,tn.deps))return void ad(D,Y,At,Ee)}ca.flags|=y,ze.memoizedState=ad(1|D,Y,At,Ee)}function uh(y,D){return ld(516,4,y,D)}function Pf(y,D){return Uh(516,4,y,D)}function Bp(y,D){return Uh(4,2,y,D)}function Ef(y,D){return"function"==typeof D?(y=y(),D(y),function(){D(null)}):null!=D?(y=y(),D.current=y,function(){D.current=null}):void 0}function oc(y,D,Y){return Y=null!=Y?Y.concat([y]):null,Uh(4,2,Ef.bind(null,D,y),Y)}function bd(){}function Up(y,D){var Y=Xd();D=void 0===D?null:D;var Ee=Y.memoizedState;return null!==Ee&&null!==D&&d_(D,Ee[1])?Ee[0]:(Y.memoizedState=[y,D],y)}function ch(y,D){var Y=Xd();D=void 0===D?null:D;var Ee=Y.memoizedState;return null!==Ee&&null!==D&&d_(D,Ee[1])?Ee[0]:(y=y(),Y.memoizedState=[y,D],y)}function dh(y,D){var Y=$l();ga(98>Y?98:Y,function(){y(!0)}),ga(97<Y?97:Y,function(){var Ee=gs.transition;gs.transition=1;try{y(!1),D()}finally{gs.transition=Ee}})}function f_(y,D,Y){var Ee=Gc(),ze=Xf(y),At={lane:ze,action:Y,eagerReducer:null,eagerState:null,next:null},tn=D.pending;if(null===tn?At.next=At:(At.next=tn.next,tn.next=At),D.pending=At,tn=y.alternate,y===ca||null!==tn&&tn===ca)yf=jc=!0;else{if(0===y.lanes&&(null===tn||0===tn.lanes)&&null!==(tn=D.lastRenderedReducer))try{var Tn=D.lastRenderedState,ar=tn(Tn,Y);if(At.eagerReducer=tn,At.eagerState=ar,Us(ar,Tn))return}catch(li){}pp(y,ze,Ee)}}var fh={readContext:Nl,useCallback:Hd,useContext:Hd,useEffect:Hd,useImperativeHandle:Hd,useLayoutEffect:Hd,useMemo:Hd,useReducer:Hd,useRef:Hd,useState:Hd,useDebugValue:Hd,useDeferredValue:Hd,useTransition:Hd,useMutableSource:Hd,useOpaqueIdentifier:Hd,unstable_isNewReconciler:!1},bf={readContext:Nl,useCallback:function(y,D){return Rc().memoizedState=[y,void 0===D?null:D],y},useContext:Nl,useEffect:uh,useImperativeHandle:function(y,D,Y){return Y=null!=Y?Y.concat([y]):null,ld(4,2,Ef.bind(null,D,y),Y)},useLayoutEffect:function(y,D){return ld(4,2,y,D)},useMemo:function(y,D){var Y=Rc();return D=void 0===D?null:D,y=y(),Y.memoizedState=[y,D],y},useReducer:function(y,D,Y){var Ee=Rc();return D=void 0!==Y?Y(D):D,Ee.memoizedState=Ee.baseState=D,y=(y=Ee.queue={pending:null,dispatch:null,lastRenderedReducer:y,lastRenderedState:D}).dispatch=f_.bind(null,ca,y),[Ee.memoizedState,y]},useRef:Kl,useState:Ed,useDebugValue:bd,useDeferredValue:function(y){var D=Ed(y),Y=D[0],Ee=D[1];return uh(function(){var ze=gs.transition;gs.transition=1;try{Ee(y)}finally{gs.transition=ze}},[y]),Y},useTransition:function(){var y=Ed(!1),D=y[0];return Kl(y=dh.bind(null,y[1])),[y,D]},useMutableSource:function(y,D,Y){var Ee=Rc();return Ee.memoizedState={refs:{getSnapshot:D,setSnapshot:null},source:y,subscribe:Y},Bh(Ee,y,D,Y)},useOpaqueIdentifier:function(){if(Ou){var y=!1,D=function yc(y){return{$$typeof:Nt,toString:y,valueOf:y}}(function(){throw y||(y=!0,Y("r:"+(vc++).toString(36))),Error(u(355))}),Y=Ed(D)[1];return 0==(2&ca.mode)&&(ca.flags|=516,ad(5,function(){Y("r:"+(vc++).toString(36))},void 0,null)),D}return Ed(D="r:"+(vc++).toString(36)),D},unstable_isNewReconciler:!1},Sf={readContext:Nl,useCallback:Up,useContext:Nl,useEffect:Pf,useImperativeHandle:oc,useLayoutEffect:Bp,useMemo:ch,useReducer:lh,useRef:up,useState:function(){return lh(Bd)},useDebugValue:bd,useDeferredValue:function(y){var D=lh(Bd),Y=D[0],Ee=D[1];return Pf(function(){var ze=gs.transition;gs.transition=1;try{Ee(y)}finally{gs.transition=ze}},[y]),Y},useTransition:function(){var y=lh(Bd)[0];return[up().current,y]},useMutableSource:wf,useOpaqueIdentifier:function(){return lh(Bd)[0]},unstable_isNewReconciler:!1},Zf={readContext:Nl,useCallback:Up,useContext:Nl,useEffect:Pf,useImperativeHandle:oc,useLayoutEffect:Bp,useMemo:ch,useReducer:Hp,useRef:up,useState:function(){return Hp(Bd)},useDebugValue:bd,useDeferredValue:function(y){var D=Hp(Bd),Y=D[0],Ee=D[1];return Pf(function(){var ze=gs.transition;gs.transition=1;try{Ee(y)}finally{gs.transition=ze}},[y]),Y},useTransition:function(){var y=Hp(Bd)[0];return[up().current,y]},useMutableSource:wf,useOpaqueIdentifier:function(){return Hp(Bd)[0]},unstable_isNewReconciler:!1},Nf=fe.ReactCurrentOwner,Tf=!1;function Au(y,D,Y,Ee){D.child=null===y?is(D,null,Y,Ee):Ui(D,y.child,Y,Ee)}function If(y,D,Y,Ee,ze){Y=Y.render;var At=D.ref;return Jc(D,ze),Ee=ah(y,D,Y,Ee,At,ze),null===y||Tf?(D.flags|=1,Au(y,D,Ee,ze),D.child):(D.updateQueue=y.updateQueue,D.flags&=-517,y.lanes&=~ze,Td(y,D,ze))}function Yh(y,D,Y,Ee,ze,At){if(null===y){var tn=Y.type;return"function"!=typeof tn||B_(tn)||void 0!==tn.defaultProps||null!==Y.compare||void 0!==Y.defaultProps?((y=Dh(Y.type,null,Ee,D,D.mode,At)).ref=D.ref,y.return=D,D.child=y):(D.tag=15,D.type=tn,jh(y,D,tn,Ee,ze,At))}return tn=y.child,0==(ze&At)&&(Y=null!==(Y=Y.compare)?Y:Ic)(ze=tn.memoizedProps,Ee)&&y.ref===D.ref?Td(y,D,At):(D.flags|=1,(y=hp(tn,Ee)).ref=D.ref,y.return=D,D.child=y)}function jh(y,D,Y,Ee,ze,At){if(null!==y&&Ic(y.memoizedProps,Ee)&&y.ref===D.ref){if(Tf=!1,0==(At&ze))return D.lanes=y.lanes,Td(y,D,At);0!=(16384&y.flags)&&(Tf=!0)}return Yp(y,D,Y,Ee,At)}function p_(y,D,Y){var Ee=D.pendingProps,ze=Ee.children,At=null!==y?y.memoizedState:null;if("hidden"===Ee.mode||"unstable-defer-without-hiding"===Ee.mode)if(0==(4&D.mode))D.memoizedState={baseLanes:0},sf(0,Y);else{if(0==(1073741824&Y))return y=null!==At?At.baseLanes|Y:Y,D.lanes=D.childLanes=1073741824,D.memoizedState={baseLanes:y},sf(0,y),null;D.memoizedState={baseLanes:0},sf(0,null!==At?At.baseLanes:Y)}else null!==At?(Ee=At.baseLanes|Y,D.memoizedState=null):Ee=Y,sf(0,Ee);return Au(y,D,ze,Y),D.child}function ph(y,D){var Y=D.ref;(null===y&&null!==Y||null!==y&&y.ref!==Y)&&(D.flags|=128)}function Yp(y,D,Y,Ee,ze){var At=Iu(Y)?cn:ul.current;return At=Ec(D,At),Jc(D,ze),Y=ah(y,D,Y,Ee,At,ze),null===y||Tf?(D.flags|=1,Au(y,D,Y,ze),D.child):(D.updateQueue=y.updateQueue,D.flags&=-517,y.lanes&=~ze,Td(y,D,ze))}function Gh(y,D,Y,Ee,ze){if(Iu(Y)){var At=!0;Bc(D)}else At=!1;if(Jc(D,ze),null===D.stateNode)null!==y&&(y.alternate=null,D.alternate=null,D.flags|=2),St(D,Y,Ee),fn(D,Y,Ee,ze),Ee=!0;else if(null===y){var tn=D.stateNode,Tn=D.memoizedProps;tn.props=Tn;var ar=tn.context,li=Y.contextType;li="object"==typeof li&&null!==li?Nl(li):Ec(D,li=Iu(Y)?cn:ul.current);var Ho=Y.getDerivedStateFromProps,Hs="function"==typeof Ho||"function"==typeof tn.getSnapshotBeforeUpdate;Hs||"function"!=typeof tn.UNSAFE_componentWillReceiveProps&&"function"!=typeof tn.componentWillReceiveProps||(Tn!==Ee||ar!==li)&&Mt(D,tn,Ee,li),Yc=!1;var po=D.memoizedState;tn.state=po,X(D,Ee,tn,ze),ar=D.memoizedState,Tn!==Ee||po!==ar||Cu.current||Yc?("function"==typeof Ho&&(Ye(D,Y,Ho,Ee),ar=D.memoizedState),(Tn=Yc||nt(D,Y,Tn,Ee,po,ar,li))?(Hs||"function"!=typeof tn.UNSAFE_componentWillMount&&"function"!=typeof tn.componentWillMount||("function"==typeof tn.componentWillMount&&tn.componentWillMount(),"function"==typeof tn.UNSAFE_componentWillMount&&tn.UNSAFE_componentWillMount()),"function"==typeof tn.componentDidMount&&(D.flags|=4)):("function"==typeof tn.componentDidMount&&(D.flags|=4),D.memoizedProps=Ee,D.memoizedState=ar),tn.props=Ee,tn.state=ar,tn.context=li,Ee=Tn):("function"==typeof tn.componentDidMount&&(D.flags|=4),Ee=!1)}else{tn=D.stateNode,h(y,D),Tn=D.memoizedProps,li=D.type===D.elementType?Tn:Ql(D.type,Tn),tn.props=li,Hs=D.pendingProps,po=tn.context,ar="object"==typeof(ar=Y.contextType)&&null!==ar?Nl(ar):Ec(D,ar=Iu(Y)?cn:ul.current);var fs=Y.getDerivedStateFromProps;(Ho="function"==typeof fs||"function"==typeof tn.getSnapshotBeforeUpdate)||"function"!=typeof tn.UNSAFE_componentWillReceiveProps&&"function"!=typeof tn.componentWillReceiveProps||(Tn!==Hs||po!==ar)&&Mt(D,tn,Ee,ar),Yc=!1,tn.state=po=D.memoizedState,X(D,Ee,tn,ze);var oa=D.memoizedState;Tn!==Hs||po!==oa||Cu.current||Yc?("function"==typeof fs&&(Ye(D,Y,fs,Ee),oa=D.memoizedState),(li=Yc||nt(D,Y,li,Ee,po,oa,ar))?(Ho||"function"!=typeof tn.UNSAFE_componentWillUpdate&&"function"!=typeof tn.componentWillUpdate||("function"==typeof tn.componentWillUpdate&&tn.componentWillUpdate(Ee,oa,ar),"function"==typeof tn.UNSAFE_componentWillUpdate&&tn.UNSAFE_componentWillUpdate(Ee,oa,ar)),"function"==typeof tn.componentDidUpdate&&(D.flags|=4),"function"==typeof tn.getSnapshotBeforeUpdate&&(D.flags|=256)):("function"!=typeof tn.componentDidUpdate||Tn===y.memoizedProps&&po===y.memoizedState||(D.flags|=4),"function"!=typeof tn.getSnapshotBeforeUpdate||Tn===y.memoizedProps&&po===y.memoizedState||(D.flags|=256),D.memoizedProps=Ee,D.memoizedState=oa),tn.props=Ee,tn.state=oa,tn.context=ar,Ee=li):("function"!=typeof tn.componentDidUpdate||Tn===y.memoizedProps&&po===y.memoizedState||(D.flags|=4),"function"!=typeof tn.getSnapshotBeforeUpdate||Tn===y.memoizedProps&&po===y.memoizedState||(D.flags|=256),Ee=!1)}return hh(y,D,Y,Ee,At,ze)}function hh(y,D,Y,Ee,ze,At){ph(y,D);var tn=0!=(64&D.flags);if(!Ee&&!tn)return ze&&vd(D,Y,!1),Td(y,D,At);Ee=D.stateNode,Nf.current=D;var Tn=tn&&"function"!=typeof Y.getDerivedStateFromError?null:Ee.render();return D.flags|=1,null!==y&&tn?(D.child=Ui(D,y.child,null,At),D.child=Ui(D,null,Tn,At)):Au(y,D,Tn,At),D.memoizedState=Ee.state,ze&&vd(D,Y,!0),D.child}function em(y){var D=y.stateNode;D.pendingContext?cl(0,D.pendingContext,D.pendingContext!==D.context):D.context&&cl(0,D.context,!1),Ga(y,D.containerInfo)}var __,zh,Cd,Du={dehydrated:null,retryLane:0};function Vh(y,D,Y){var tn,Ee=D.pendingProps,ze=Va.current,At=!1;return(tn=0!=(64&D.flags))||(tn=(null===y||null!==y.memoizedState)&&0!=(2&ze)),tn?(At=!0,D.flags&=-65):null!==y&&null===y.memoizedState||void 0===Ee.fallback||!0===Ee.unstable_avoidThisFallback||(ze|=1),kl(Va,1&ze),null===y?(void 0!==Ee.fallback&&K(D),y=Ee.children,ze=Ee.fallback,At?(y=Sd(D,y,ze,Y),D.child.memoizedState={baseLanes:Y},D.memoizedState=Du,y):"number"==typeof Ee.unstable_expectedLoadTime?(y=Sd(D,y,ze,Y),D.child.memoizedState={baseLanes:Y},D.memoizedState=Du,D.lanes=33554432,y):((Y=rm({mode:"visible",children:y},D.mode,Y,null)).return=D,D.child=Y)):At?(Ee=function h_(y,D,Y,Ee,ze){var At=D.mode,tn=y.child;y=tn.sibling;var Tn={mode:"hidden",children:Y};return 0==(2&At)&&D.child!==tn?((Y=D.child).childLanes=0,Y.pendingProps=Tn,null!==(tn=Y.lastEffect)?(D.firstEffect=Y.firstEffect,D.lastEffect=tn,tn.nextEffect=null):D.firstEffect=D.lastEffect=null):Y=hp(tn,Tn),null!==y?Ee=hp(y,Ee):(Ee=Vc(Ee,At,ze,null)).flags|=2,Ee.return=D,Y.return=D,Y.sibling=Ee,D.child=Y,Ee}(y,D,Ee.children,Ee.fallback,Y),(At=D.child).memoizedState=null===(ze=y.child.memoizedState)?{baseLanes:Y}:{baseLanes:ze.baseLanes|Y},At.childLanes=y.childLanes&~Y,D.memoizedState=Du,Ee):(Y=function Kd(y,D,Y,Ee){var ze=y.child;return y=ze.sibling,Y=hp(ze,{mode:"visible",children:Y}),0==(2&D.mode)&&(Y.lanes=Ee),Y.return=D,Y.sibling=null,null!==y&&(y.nextEffect=null,y.flags=8,D.firstEffect=D.lastEffect=y),D.child=Y}(y,D,Ee.children,Y),D.memoizedState=null,Y)}function Sd(y,D,Y,Ee){var ze=y.mode,At=y.child;return D={mode:"hidden",children:D},0==(2&ze)&&null!==At?(At.childLanes=0,At.pendingProps=D):At=rm(D,ze,0,null),Y=Vc(Y,ze,Ee,null),At.return=y,Y.return=y,At.sibling=Y,y.child=At,Y}function tm(y,D){y.lanes|=D;var Y=y.alternate;null!==Y&&(Y.lanes|=D),Jd(y.return,D)}function _h(y,D,Y,Ee,ze,At){var tn=y.memoizedState;null===tn?y.memoizedState={isBackwards:D,rendering:null,renderingStartTime:0,last:Ee,tail:Y,tailMode:ze,lastEffect:At}:(tn.isBackwards=D,tn.rendering=null,tn.renderingStartTime=0,tn.last=Ee,tn.tail=Y,tn.tailMode=ze,tn.lastEffect=At)}function Ep(y,D,Y){var Ee=D.pendingProps,ze=Ee.revealOrder,At=Ee.tail;if(Au(y,D,Ee.children,Y),0!=(2&(Ee=Va.current)))Ee=1&Ee|2,D.flags|=64;else{if(null!==y&&0!=(64&y.flags))e:for(y=D.child;null!==y;){if(13===y.tag)null!==y.memoizedState&&tm(y,Y);else if(19===y.tag)tm(y,Y);else if(null!==y.child){y.child.return=y,y=y.child;continue}if(y===D)break e;for(;null===y.sibling;){if(null===y.return||y.return===D)break e;y=y.return}y.sibling.return=y.return,y=y.sibling}Ee&=1}if(kl(Va,Ee),0==(2&D.mode))D.memoizedState=null;else switch(ze){case"forwards":for(Y=D.child,ze=null;null!==Y;)null!==(y=Y.alternate)&&null===Mu(y)&&(ze=Y),Y=Y.sibling;null===(Y=ze)?(ze=D.child,D.child=null):(ze=Y.sibling,Y.sibling=null),_h(D,!1,ze,Y,At,D.lastEffect);break;case"backwards":for(Y=null,ze=D.child,D.child=null;null!==ze;){if(null!==(y=ze.alternate)&&null===Mu(y)){D.child=ze;break}y=ze.sibling,ze.sibling=Y,Y=ze,ze=y}_h(D,!0,Y,null,At,D.lastEffect);break;case"together":_h(D,!1,null,null,void 0,D.lastEffect);break;default:D.memoizedState=null}return D.child}function Td(y,D,Y){if(null!==y&&(D.dependencies=y.dependencies),Mp|=D.lanes,0!=(Y&D.childLanes)){if(null!==y&&D.child!==y.child)throw Error(u(153));if(null!==D.child){for(Y=hp(y=D.child,y.pendingProps),D.child=Y,Y.return=D;null!==y.sibling;)(Y=Y.sibling=hp(y=y.sibling,y.pendingProps)).return=D;Y.sibling=null}return D.child}return null}function mu(y,D){if(!Ou)switch(y.tailMode){case"hidden":D=y.tail;for(var Y=null;null!==D;)null!==D.alternate&&(Y=D),D=D.sibling;null===Y?y.tail=null:Y.sibling=null;break;case"collapsed":Y=y.tail;for(var Ee=null;null!==Y;)null!==Y.alternate&&(Ee=Y),Y=Y.sibling;null===Ee?D||null===y.tail?y.tail=null:y.tail.sibling=null:Ee.sibling=null}}function Wh(y,D,Y){var Ee=D.pendingProps;switch(D.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return Iu(D.type)&&qa(),null;case 3:return wa(),Al(Cu),Al(ul),Dr(),(Ee=D.stateNode).pendingContext&&(Ee.context=Ee.pendingContext,Ee.pendingContext=null),(null===y||null===y.child)&&(lt(D)?D.flags|=4:Ee.hydrate||(D.flags|=256)),null;case 5:_u(D);var ze=$a(el.current);if(Y=D.type,null!==y&&null!=D.stateNode)zh(y,D,Y,Ee),y.ref!==D.ref&&(D.flags|=128);else{if(!Ee){if(null===D.stateNode)throw Error(u(166));return null}if(y=$a(Vs.current),lt(D)){Y=D.type;var At=D.memoizedProps;switch((Ee=D.stateNode)[Ul]=D,Ee[tc]=At,Y){case"dialog":pa("cancel",Ee),pa("close",Ee);break;case"iframe":case"object":case"embed":pa("load",Ee);break;case"video":case"audio":for(y=0;y<ou.length;y++)pa(ou[y],Ee);break;case"source":pa("error",Ee);break;case"img":case"image":case"link":pa("error",Ee),pa("load",Ee);break;case"details":pa("toggle",Ee);break;case"input":fi(Ee,At),pa("invalid",Ee);break;case"select":Ee._wrapperState={wasMultiple:!!At.multiple},pa("invalid",Ee);break;case"textarea":ri(Ee,At),pa("invalid",Ee)}for(var tn in nn(Y,At),y=null,At)At.hasOwnProperty(tn)&&(ze=At[tn],"children"===tn?"string"==typeof ze?Ee.textContent!==ze&&(y=["children",ze]):"number"==typeof ze&&Ee.textContent!==""+ze&&(y=["children",""+ze]):p.hasOwnProperty(tn)&&null!=ze&&"onScroll"===tn&&pa("scroll",Ee));switch(Y){case"input":er(Ee),Er(Ee,At,!0);break;case"textarea":er(Ee),ui(Ee);break;case"select":case"option":break;default:"function"==typeof At.onClick&&(Ee.onclick=gi)}D.updateQueue=Ee=y,null!==Ee&&(D.flags|=4)}else{switch(tn=9===ze.nodeType?ze:ze.ownerDocument,y===vr_html&&(y=Ji(Y)),y===vr_html?"script"===Y?((y=tn.createElement("div")).innerHTML="<script><\/script>",y=y.removeChild(y.firstChild)):"string"==typeof Ee.is?y=tn.createElement(Y,{is:Ee.is}):(y=tn.createElement(Y),"select"===Y&&(tn=y,Ee.multiple?tn.multiple=!0:Ee.size&&(tn.size=Ee.size))):y=tn.createElementNS(y,Y),y[Ul]=D,y[tc]=Ee,__(y,D),D.stateNode=y,tn=Fe(Y,Ee),Y){case"dialog":pa("cancel",y),pa("close",y),ze=Ee;break;case"iframe":case"object":case"embed":pa("load",y),ze=Ee;break;case"video":case"audio":for(ze=0;ze<ou.length;ze++)pa(ou[ze],y);ze=Ee;break;case"source":pa("error",y),ze=Ee;break;case"img":case"image":case"link":pa("error",y),pa("load",y),ze=Ee;break;case"details":pa("toggle",y),ze=Ee;break;case"input":fi(y,Ee),ze=bi(y,Ee),pa("invalid",y);break;case"option":ze=Zn(y,Ee);break;case"select":y._wrapperState={wasMultiple:!!Ee.multiple},ze=a({},Ee,{value:void 0}),pa("invalid",y);break;case"textarea":ri(y,Ee),ze=zn(y,Ee),pa("invalid",y);break;default:ze=Ee}nn(Y,ze);var Tn=ze;for(At in Tn)if(Tn.hasOwnProperty(At)){var ar=Tn[At];"style"===At?dt(y,ar):"dangerouslySetInnerHTML"===At?null!=(ar=ar?ar.__html:void 0)&&Wn(y,ar):"children"===At?"string"==typeof ar?("textarea"!==Y||""!==ar)&&et(y,ar):"number"==typeof ar&&et(y,""+ar):"suppressContentEditableWarning"!==At&&"suppressHydrationWarning"!==At&&"autoFocus"!==At&&(p.hasOwnProperty(At)?null!=ar&&"onScroll"===At&&pa("scroll",y):null!=ar&&ie(y,At,ar,tn))}switch(Y){case"input":er(y),Er(y,Ee,!1);break;case"textarea":er(y),ui(y);break;case"option":null!=Ee.value&&y.setAttribute("value",""+Br(Ee.value));break;case"select":y.multiple=!!Ee.multiple,null!=(At=Ee.value)?Xn(y,!!Ee.multiple,At,!1):null!=Ee.defaultValue&&Xn(y,!!Ee.multiple,Ee.defaultValue,!0);break;default:"function"==typeof ze.onClick&&(y.onclick=gi)}ms(Y,Ee)&&(D.flags|=4)}null!==D.ref&&(D.flags|=128)}return null;case 6:if(y&&null!=D.stateNode)Cd(0,D,y.memoizedProps,Ee);else{if("string"!=typeof Ee&&null===D.stateNode)throw Error(u(166));Y=$a(el.current),$a(Vs.current),lt(D)?(Y=D.memoizedProps,(Ee=D.stateNode)[Ul]=D,Ee.nodeValue!==Y&&(D.flags|=4)):((Ee=(9===Y.nodeType?Y:Y.ownerDocument).createTextNode(Ee))[Ul]=D,D.stateNode=Ee)}return null;case 13:return Al(Va),Ee=D.memoizedState,0!=(64&D.flags)?(D.lanes=Y,D):(Ee=null!==Ee,Y=!1,null===y?void 0!==D.memoizedProps.fallback&&lt(D):Y=null!==y.memoizedState,Ee&&!Y&&0!=(2&D.mode)&&(null===y&&!0!==D.memoizedProps.unstable_avoidThisFallback||0!=(1&Va.current)?0===Hu&&(Hu=3):((0===Hu||3===Hu)&&(Hu=4),null===wc||0==(134217727&Mp)&&0==(134217727&zu)||Kf(wc,Ts))),(Ee||Y)&&(D.flags|=4),null);case 4:return wa(),null===y&&Ze(D.stateNode.containerInfo),null;case 10:return pc(D),null;case 19:if(Al(Va),null===(Ee=D.memoizedState))return null;if(At=0!=(64&D.flags),null===(tn=Ee.rendering))if(At)mu(Ee,!1);else{if(0!==Hu||null!==y&&0!=(64&y.flags))for(y=D.child;null!==y;){if(null!==(tn=Mu(y))){for(D.flags|=64,mu(Ee,!1),null!==(At=tn.updateQueue)&&(D.updateQueue=At,D.flags|=4),null===Ee.lastEffect&&(D.firstEffect=null),D.lastEffect=Ee.lastEffect,Ee=Y,Y=D.child;null!==Y;)y=Ee,(At=Y).flags&=2,At.nextEffect=null,At.firstEffect=null,At.lastEffect=null,null===(tn=At.alternate)?(At.childLanes=0,At.lanes=y,At.child=null,At.memoizedProps=null,At.memoizedState=null,At.updateQueue=null,At.dependencies=null,At.stateNode=null):(At.childLanes=tn.childLanes,At.lanes=tn.lanes,At.child=tn.child,At.memoizedProps=tn.memoizedProps,At.memoizedState=tn.memoizedState,At.updateQueue=tn.updateQueue,At.type=tn.type,At.dependencies=null===(y=tn.dependencies)?null:{lanes:y.lanes,firstContext:y.firstContext}),Y=Y.sibling;return kl(Va,1&Va.current|2),D.child}y=y.sibling}null!==Ee.tail&&pu()>Th&&(D.flags|=64,At=!0,mu(Ee,!1),D.lanes=33554432)}else{if(!At)if(null!==(y=Mu(tn))){if(D.flags|=64,At=!0,null!==(Y=y.updateQueue)&&(D.updateQueue=Y,D.flags|=4),mu(Ee,!0),null===Ee.tail&&"hidden"===Ee.tailMode&&!tn.alternate&&!Ou)return null!==(D=D.lastEffect=Ee.lastEffect)&&(D.nextEffect=null),null}else 2*pu()-Ee.renderingStartTime>Th&&1073741824!==Y&&(D.flags|=64,At=!0,mu(Ee,!1),D.lanes=33554432);Ee.isBackwards?(tn.sibling=D.child,D.child=tn):(null!==(Y=Ee.last)?Y.sibling=tn:D.child=tn,Ee.last=tn)}return null!==Ee.tail?(Ee.rendering=Y=Ee.tail,Ee.tail=Y.sibling,Ee.lastEffect=D.lastEffect,Ee.renderingStartTime=pu(),Y.sibling=null,D=Va.current,kl(Va,At?1&D|2:1&D),Y):null;case 23:case 24:return qf(),null!==y&&null!==y.memoizedState!=(null!==D.memoizedState)&&"unstable-defer-without-hiding"!==Ee.mode&&(D.flags|=4),null}throw Error(u(156,D.tag))}function bp(y){switch(y.tag){case 1:Iu(y.type)&&qa();var D=y.flags;return 4096&D?(y.flags=-4097&D|64,y):null;case 3:if(wa(),Al(Cu),Al(ul),Dr(),0!=(64&(D=y.flags)))throw Error(u(285));return y.flags=-4097&D|64,y;case 5:return _u(y),null;case 13:return Al(Va),4096&(D=y.flags)?(y.flags=-4097&D|64,y):null;case 19:return Al(Va),null;case 4:return wa(),null;case 10:return pc(y),null;case 23:case 24:return qf(),null;default:return null}}function Jh(y,D){try{var Y="",Ee=D;do{Y+=ci(Ee),Ee=Ee.return}while(Ee);var ze=Y}catch(At){ze="\nError generating stack: "+At.message+"\n"+At.stack}return{value:y,source:D,stack:ze}}function sc(y,D){try{console.error(D.value)}catch(Y){setTimeout(function(){throw Y})}}__=function(y,D){for(var Y=D.child;null!==Y;){if(5===Y.tag||6===Y.tag)y.appendChild(Y.stateNode);else if(4!==Y.tag&&null!==Y.child){Y.child.return=Y,Y=Y.child;continue}if(Y===D)break;for(;null===Y.sibling;){if(null===Y.return||Y.return===D)return;Y=Y.return}Y.sibling.return=Y.return,Y=Y.sibling}},zh=function(y,D,Y,Ee){var ze=y.memoizedProps;if(ze!==Ee){y=D.stateNode,$a(Vs.current);var tn,At=null;switch(Y){case"input":ze=bi(y,ze),Ee=bi(y,Ee),At=[];break;case"option":ze=Zn(y,ze),Ee=Zn(y,Ee),At=[];break;case"select":ze=a({},ze,{value:void 0}),Ee=a({},Ee,{value:void 0}),At=[];break;case"textarea":ze=zn(y,ze),Ee=zn(y,Ee),At=[];break;default:"function"!=typeof ze.onClick&&"function"==typeof Ee.onClick&&(y.onclick=gi)}for(li in nn(Y,Ee),Y=null,ze)if(!Ee.hasOwnProperty(li)&&ze.hasOwnProperty(li)&&null!=ze[li])if("style"===li){var Tn=ze[li];for(tn in Tn)Tn.hasOwnProperty(tn)&&(Y||(Y={}),Y[tn]="")}else"dangerouslySetInnerHTML"!==li&&"children"!==li&&"suppressContentEditableWarning"!==li&&"suppressHydrationWarning"!==li&&"autoFocus"!==li&&(p.hasOwnProperty(li)?At||(At=[]):(At=At||[]).push(li,null));for(li in Ee){var ar=Ee[li];if(Tn=null!=ze?ze[li]:void 0,Ee.hasOwnProperty(li)&&ar!==Tn&&(null!=ar||null!=Tn))if("style"===li)if(Tn){for(tn in Tn)!Tn.hasOwnProperty(tn)||ar&&ar.hasOwnProperty(tn)||(Y||(Y={}),Y[tn]="");for(tn in ar)ar.hasOwnProperty(tn)&&Tn[tn]!==ar[tn]&&(Y||(Y={}),Y[tn]=ar[tn])}else Y||(At||(At=[]),At.push(li,Y)),Y=ar;else"dangerouslySetInnerHTML"===li?(Tn=Tn?Tn.__html:void 0,null!=(ar=ar?ar.__html:void 0)&&Tn!==ar&&(At=At||[]).push(li,ar)):"children"===li?"string"!=typeof ar&&"number"!=typeof ar||(At=At||[]).push(li,""+ar):"suppressContentEditableWarning"!==li&&"suppressHydrationWarning"!==li&&(p.hasOwnProperty(li)?(null!=ar&&"onScroll"===li&&pa("scroll",y),At||Tn===ar||(At=[])):"object"==typeof ar&&null!==ar&&ar.$$typeof===Nt?ar.toString():(At=At||[]).push(li,ar))}Y&&(At=At||[]).push("style",Y);var li=At;(D.updateQueue=li)&&(D.flags|=4)}},Cd=function(y,D,Y,Ee){Y!==Ee&&(D.flags|=4)};var qd="function"==typeof WeakMap?WeakMap:Map;function zf(y,D,Y){(Y=E(-1,Y)).tag=3,Y.payload={element:null};var Ee=D.value;return Y.callback=function(){Md||(Md=!0,dp=Ee),sc(0,D)},Y}function Qh(y,D,Y){(Y=E(-1,Y)).tag=3;var Ee=y.type.getDerivedStateFromError;if("function"==typeof Ee){var ze=D.value;Y.payload=function(){return sc(0,D),Ee(ze)}}var At=y.stateNode;return null!==At&&"function"==typeof At.componentDidCatch&&(Y.callback=function(){"function"!=typeof Ee&&(null===Bu?Bu=new Set([this]):Bu.add(this),sc(0,D));var tn=D.stack;this.componentDidCatch(D.value,{componentStack:null!==tn?tn:""})}),Y}var Sp="function"==typeof WeakSet?WeakSet:Set;function m_(y){var D=y.ref;if(null!==D)if("function"==typeof D)try{D(null)}catch(Y){Ud(y,Y)}else D.current=null}function Tp(y,D){switch(D.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&D.flags&&null!==y){var Y=y.memoizedProps,Ee=y.memoizedState;D=(y=D.stateNode).getSnapshotBeforeUpdate(D.elementType===D.type?Y:Ql(D.type,Y),Ee),y.__reactInternalSnapshotBeforeUpdate=D}return;case 3:return void(256&D.flags&&cc(D.stateNode.containerInfo))}throw Error(u(163))}function mh(y,D,Y){switch(Y.tag){case 0:case 11:case 15:case 22:if(null!==(D=null!==(D=Y.updateQueue)?D.lastEffect:null)){y=D=D.next;do{if(3==(3&y.tag)){var Ee=y.create;y.destroy=Ee()}y=y.next}while(y!==D)}if(null!==(D=null!==(D=Y.updateQueue)?D.lastEffect:null)){y=D=D.next;do{var ze=y;Ee=ze.next,0!=(4&(ze=ze.tag))&&0!=(1&ze)&&(tp(Y,y),H_(Y,y)),y=Ee}while(y!==D)}return;case 1:return y=Y.stateNode,4&Y.flags&&(null===D?y.componentDidMount():(Ee=Y.elementType===Y.type?D.memoizedProps:Ql(Y.type,D.memoizedProps),y.componentDidUpdate(Ee,D.memoizedState,y.__reactInternalSnapshotBeforeUpdate))),void(null!==(D=Y.updateQueue)&&de(Y,D,y));case 3:if(null!==(D=Y.updateQueue)){if(y=null,null!==Y.child)switch(Y.child.tag){case 5:case 1:y=Y.child.stateNode}de(Y,D,y)}return;case 5:return y=Y.stateNode,void(null===D&&4&Y.flags&&ms(Y.type,Y.memoizedProps)&&y.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===Y.memoizedState&&(Y=Y.alternate,null!==Y&&(Y=Y.memoizedState,null!==Y&&(Y=Y.dehydrated,null!==Y&&Wa(Y)))))}throw Error(u(163))}function g_(y,D){for(var Y=y;;){if(5===Y.tag){var Ee=Y.stateNode;if(D)"function"==typeof(Ee=Ee.style).setProperty?Ee.setProperty("display","none","important"):Ee.display="none";else{Ee=Y.stateNode;var ze=Y.memoizedProps.style;ze=null!=ze&&ze.hasOwnProperty("display")?ze.display:null,Ee.style.display=Se("display",ze)}}else if(6===Y.tag)Y.stateNode.nodeValue=D?"":Y.memoizedProps;else if((23!==Y.tag&&24!==Y.tag||null===Y.memoizedState||Y===y)&&null!==Y.child){Y.child.return=Y,Y=Y.child;continue}if(Y===y)break;for(;null===Y.sibling;){if(null===Y.return||Y.return===y)return;Y=Y.return}Y.sibling.return=Y.return,Y=Y.sibling}}function gh(y,D){if(yd&&"function"==typeof yd.onCommitFiberUnmount)try{yd.onCommitFiberUnmount(dc,D)}catch(At){}switch(D.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(y=D.updateQueue)&&null!==(y=y.lastEffect)){var Y=y=y.next;do{var Ee=Y,ze=Ee.destroy;if(Ee=Ee.tag,void 0!==ze)if(0!=(4&Ee))tp(D,Y);else{Ee=D;try{ze()}catch(At){Ud(Ee,At)}}Y=Y.next}while(Y!==y)}break;case 1:if(m_(D),"function"==typeof(y=D.stateNode).componentWillUnmount)try{y.props=D.memoizedProps,y.state=D.memoizedState,y.componentWillUnmount()}catch(At){Ud(D,At)}break;case 5:m_(D);break;case 4:qh(y,D)}}function L_(y){y.alternate=null,y.child=null,y.dependencies=null,y.firstEffect=null,y.lastEffect=null,y.memoizedProps=null,y.memoizedState=null,y.pendingProps=null,y.return=null,y.updateQueue=null}function Xh(y){return 5===y.tag||3===y.tag||4===y.tag}function ef(y){e:{for(var D=y.return;null!==D;){if(Xh(D))break e;D=D.return}throw Error(u(160))}var Y=D;switch(D=Y.stateNode,Y.tag){case 5:var Ee=!1;break;case 3:case 4:D=D.containerInfo,Ee=!0;break;default:throw Error(u(161))}16&Y.flags&&(et(D,""),Y.flags&=-17);e:t:for(Y=y;;){for(;null===Y.sibling;){if(null===Y.return||Xh(Y.return)){Y=null;break e}Y=Y.return}for(Y.sibling.return=Y.return,Y=Y.sibling;5!==Y.tag&&6!==Y.tag&&18!==Y.tag;){if(2&Y.flags||null===Y.child||4===Y.tag)continue t;Y.child.return=Y,Y=Y.child}if(!(2&Y.flags)){Y=Y.stateNode;break e}}Ee?Kh(y,Y,D):vh(y,Y,D)}function Kh(y,D,Y){var Ee=y.tag,ze=5===Ee||6===Ee;if(ze)y=ze?y.stateNode:y.stateNode.instance,D?8===Y.nodeType?Y.parentNode.insertBefore(y,D):Y.insertBefore(y,D):(8===Y.nodeType?(D=Y.parentNode).insertBefore(y,Y):(D=Y).appendChild(y),null!=(Y=Y._reactRootContainer)||null!==D.onclick||(D.onclick=gi));else if(4!==Ee&&null!==(y=y.child))for(Kh(y,D,Y),y=y.sibling;null!==y;)Kh(y,D,Y),y=y.sibling}function vh(y,D,Y){var Ee=y.tag,ze=5===Ee||6===Ee;if(ze)y=ze?y.stateNode:y.stateNode.instance,D?Y.insertBefore(y,D):Y.appendChild(y);else if(4!==Ee&&null!==(y=y.child))for(vh(y,D,Y),y=y.sibling;null!==y;)vh(y,D,Y),y=y.sibling}function qh(y,D){for(var ze,At,Y=D,Ee=!1;;){if(!Ee){Ee=Y.return;e:for(;;){if(null===Ee)throw Error(u(160));switch(ze=Ee.stateNode,Ee.tag){case 5:At=!1;break e;case 3:case 4:ze=ze.containerInfo,At=!0;break e}Ee=Ee.return}Ee=!0}if(5===Y.tag||6===Y.tag){e:for(var tn=y,Tn=Y,ar=Tn;;)if(gh(tn,ar),null!==ar.child&&4!==ar.tag)ar.child.return=ar,ar=ar.child;else{if(ar===Tn)break e;for(;null===ar.sibling;){if(null===ar.return||ar.return===Tn)break e;ar=ar.return}ar.sibling.return=ar.return,ar=ar.sibling}At?(Tn=Y.stateNode,8===(tn=ze).nodeType?tn.parentNode.removeChild(Tn):tn.removeChild(Tn)):ze.removeChild(Y.stateNode)}else if(4===Y.tag){if(null!==Y.child){ze=Y.stateNode.containerInfo,At=!0,Y.child.return=Y,Y=Y.child;continue}}else if(gh(y,Y),null!==Y.child){Y.child.return=Y,Y=Y.child;continue}if(Y===D)break;for(;null===Y.sibling;){if(null===Y.return||Y.return===D)return;4===(Y=Y.return).tag&&(Ee=!1)}Y.sibling.return=Y.return,Y=Y.sibling}}function Wf(y,D){switch(D.tag){case 0:case 11:case 14:case 15:case 22:var Y=D.updateQueue;if(null!==(Y=null!==Y?Y.lastEffect:null)){var Ee=Y=Y.next;do{3==(3&Ee.tag)&&(y=Ee.destroy,Ee.destroy=void 0,void 0!==y&&y()),Ee=Ee.next}while(Ee!==Y)}return;case 1:case 12:case 17:return;case 5:if(null!=(Y=D.stateNode)){Ee=D.memoizedProps;var ze=null!==y?y.memoizedProps:Ee;y=D.type;var At=D.updateQueue;if(D.updateQueue=null,null!==At){for(Y[tc]=Ee,"input"===y&&"radio"===Ee.type&&null!=Ee.name&&no(Y,Ee),Fe(y,ze),D=Fe(y,Ee),ze=0;ze<At.length;ze+=2){var tn=At[ze],Tn=At[ze+1];"style"===tn?dt(Y,Tn):"dangerouslySetInnerHTML"===tn?Wn(Y,Tn):"children"===tn?et(Y,Tn):ie(Y,tn,Tn,D)}switch(y){case"input":xo(Y,Ee);break;case"textarea":Gi(Y,Ee);break;case"select":y=Y._wrapperState.wasMultiple,Y._wrapperState.wasMultiple=!!Ee.multiple,null!=(At=Ee.value)?Xn(Y,!!Ee.multiple,At,!1):y!==!!Ee.multiple&&(null!=Ee.defaultValue?Xn(Y,!!Ee.multiple,Ee.defaultValue,!0):Xn(Y,!!Ee.multiple,Ee.multiple?[]:"",!1))}}}return;case 6:if(null===D.stateNode)throw Error(u(162));return void(D.stateNode.nodeValue=D.memoizedProps);case 3:return void((Y=D.stateNode).hydrate&&(Y.hydrate=!1,Wa(Y.containerInfo)));case 13:return null!==D.memoizedState&&(k_=pu(),g_(D.child,!0)),void yh(D);case 19:return void yh(D);case 23:case 24:return void g_(D,null!==D.memoizedState)}throw Error(u(163))}function yh(y){var D=y.updateQueue;if(null!==D){y.updateQueue=null;var Y=y.stateNode;null===Y&&(Y=y.stateNode=new Sp),D.forEach(function(Ee){var ze=i_.bind(null,y,Ee);Y.has(Ee)||(Y.add(Ee),Ee.then(ze,ze))})}}function Cp(y,D){return null!==y&&(null===(y=y.memoizedState)||null!==y.dehydrated)&&null!==(D=D.memoizedState)&&null===D.dehydrated}var Cf=Math.ceil,Eh=fe.ReactCurrentDispatcher,bh=fe.ReactCurrentOwner,da=0,wc=null,$u=null,Ts=0,Ff=0,jp=id(0),Hu=0,Sh=null,Lf=0,Mp=0,zu=0,Jf=0,tf=null,k_=0,Th=1/0;function cp(){Th=pu()+500}var Jp,Ps=null,Md=!1,dp=null,Bu=null,jl=!1,Qf=null,kf=90,Gp=[],e_=[],nf=null,rf=0,Ch=null,t_=-1,ud=0,Mh=0,fp=null,Oh=!1;function Gc(){return 0!=(48&da)?pu():-1!==t_?t_:t_=pu()}function Xf(y){if(0==(2&(y=y.mode)))return 1;if(0==(4&y))return 99===$l()?1:2;if(0===ud&&(ud=Lf),0!==rc.transition){0!==Mh&&(Mh=null!==tf?tf.pendingLanes:0),y=ud;var D=4186112&~Mh;return 0==(D&=-D)&&0==(D=(y=4186112&~y)&-y)&&(D=8192),D}return y=$l(),y=Vo(0!=(4&da)&&98===y?12:y=function ii(y){switch(y){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(y),ud)}function pp(y,D,Y){if(50<rf)throw rf=0,Ch=null,Error(u(185));if(null===(y=Op(y,D)))return null;hl(y,D,Y),y===wc&&(zu|=D,4===Hu&&Kf(y,Ts));var Ee=$l();1===D?0!=(8&da)&&0==(48&da)?n_(y):(Od(y,Y),0===da&&(cp(),Lu())):(0==(4&da)||98!==Ee&&99!==Ee||(null===nf?nf=new Set([y]):nf.add(y)),Od(y,Y)),tf=y}function Op(y,D){y.lanes|=D;var Y=y.alternate;for(null!==Y&&(Y.lanes|=D),Y=y,y=y.return;null!==y;)y.childLanes|=D,null!==(Y=y.alternate)&&(Y.childLanes|=D),Y=y,y=y.return;return 3===Y.tag?Y.stateNode:null}function Od(y,D){for(var Y=y.callbackNode,Ee=y.suspendedLanes,ze=y.pingedLanes,At=y.expirationTimes,tn=y.pendingLanes;0<tn;){var Tn=31-sl(tn),ar=1<<Tn,li=At[Tn];-1===li?0!=(ar&Ee)&&0==(ar&ze)||(li=D,hn(ar),At[Tn]=10<=jt?li+250:6<=jt?li+5e3:-1):li<=D&&(y.expiredLanes|=ar),tn&=~ar}if(Ee=ki(y,y===wc?Ts:0),D=jt,0===Ee)null!==Y&&(Y!==Aa&&ap(Y),y.callbackNode=null,y.callbackPriority=0);else{if(null!==Y){if(y.callbackPriority===D)return;Y!==Aa&&ap(Y)}15===D?(Y=n_.bind(null,y),null===sd?(sd=[Y],lp=vf(yp,bc)):sd.push(Y),Y=Aa):14===D?Y=Dc(99,n_.bind(null,y)):(Y=function Oi(y){switch(y){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(u(358,y))}}(D),Y=Dc(Y,Vp.bind(null,y))),y.callbackPriority=D,y.callbackNode=Y}}function Vp(y){if(t_=-1,Mh=ud=0,0!=(48&da))throw Error(u(327));var D=y.callbackNode;if(Mf()&&y.callbackNode!==D)return null;var Y=ki(y,y===wc?Ts:0);if(0===Y)return null;var Ee=Y,ze=da;da|=16;var At=ep();for((wc!==y||Ts!==Ee)&&(cp(),zp(y,Ee));;)try{nm();break}catch(Tn){v_(y,Tn)}if(Uc(),Eh.current=At,da=ze,null!==$u?Ee=0:(wc=null,Ts=0,Ee=Hu),0!=(Lf&zu))zp(y,0);else if(0!==Ee){if(2===Ee&&(da|=64,y.hydrate&&(y.hydrate=!1,cc(y.containerInfo)),0!==(Y=_s(y))&&(Ee=Wp(y,Y))),1===Ee)throw D=Sh,zp(y,0),Kf(y,Y),Od(y,pu()),D;switch(y.finishedWork=y.current.alternate,y.finishedLanes=Y,Ee){case 0:case 1:throw Error(u(345));case 2:case 5:$f(y);break;case 3:if(Kf(y,Y),(62914560&Y)===Y&&10<(Ee=k_+500-pu())){if(0!==ki(y,0))break;if(((ze=y.suspendedLanes)&Y)!==Y){Gc(),y.pingedLanes|=y.suspendedLanes&ze;break}y.timeoutHandle=Ma($f.bind(null,y),Ee);break}$f(y);break;case 4:if(Kf(y,Y),(4186112&Y)===Y)break;for(Ee=y.eventTimes,ze=-1;0<Y;){var tn=31-sl(Y);At=1<<tn,(tn=Ee[tn])>ze&&(ze=tn),Y&=~At}if(Y=ze,10<(Y=(120>(Y=pu()-Y)?120:480>Y?480:1080>Y?1080:1920>Y?1920:3e3>Y?3e3:4320>Y?4320:1960*Cf(Y/1960))-Y)){y.timeoutHandle=Ma($f.bind(null,y),Y);break}$f(y);break;default:throw Error(u(329))}}return Od(y,pu()),y.callbackNode===D?Vp.bind(null,y):null}function Kf(y,D){for(D&=~Jf,y.suspendedLanes|=D&=~zu,y.pingedLanes&=~D,y=y.expirationTimes;0<D;){var Y=31-sl(D),Ee=1<<Y;y[Y]=-1,D&=~Ee}}function n_(y){if(0!=(48&da))throw Error(u(327));if(Mf(),y===wc&&0!=(y.expiredLanes&Ts)){var D=Ts,Y=Wp(y,D);0!=(Lf&zu)&&(Y=Wp(y,D=ki(y,D)))}else Y=Wp(y,D=ki(y,0));if(0!==y.tag&&2===Y&&(da|=64,y.hydrate&&(y.hydrate=!1,cc(y.containerInfo)),0!==(D=_s(y))&&(Y=Wp(y,D))),1===Y)throw Y=Sh,zp(y,0),Kf(y,D),Od(y,pu()),Y;return y.finishedWork=y.current.alternate,y.finishedLanes=D,$f(y),Od(y,pu()),null}function Ap(y,D){var Y=da;da|=1;try{return y(D)}finally{0===(da=Y)&&(cp(),Lu())}}function Zp(y,D){var Y=da;da&=-2,da|=8;try{return y(D)}finally{0===(da=Y)&&(cp(),Lu())}}function sf(y,D){kl(jp,Ff),Ff|=D,Lf|=D}function qf(){Ff=jp.current,Al(jp)}function zp(y,D){y.finishedWork=null,y.finishedLanes=0;var Y=y.timeoutHandle;if(-1!==Y&&(y.timeoutHandle=-1,Nu(Y)),null!==$u)for(Y=$u.return;null!==Y;){var Ee=Y;switch(Ee.tag){case 1:null!=(Ee=Ee.type.childContextTypes)&&qa();break;case 3:wa(),Al(Cu),Al(ul),Dr();break;case 5:_u(Ee);break;case 4:wa();break;case 13:case 19:Al(Va);break;case 10:pc(Ee);break;case 23:case 24:qf()}Y=Y.return}wc=y,$u=hp(y.current,null),Ts=Ff=Lf=D,Hu=0,Sh=null,Jf=zu=Mp=0}function v_(y,D){for(;;){var Y=$u;try{if(Uc(),Ai.current=fh,jc){for(var Ee=ca.memoizedState;null!==Ee;){var ze=Ee.queue;null!==ze&&(ze.pending=null),Ee=Ee.next}jc=!1}if(Da=0,Yl=Dl=ca=null,yf=!1,bh.current=null,null===Y||null===Y.return){Hu=1,Sh=D,$u=null;break}e:{var At=y,tn=Y.return,Tn=Y,ar=D;if(D=Ts,Tn.flags|=2048,Tn.firstEffect=Tn.lastEffect=null,null!==ar&&"object"==typeof ar&&"function"==typeof ar.then){var li=ar;if(0==(2&Tn.mode)){var Ho=Tn.alternate;Ho?(Tn.updateQueue=Ho.updateQueue,Tn.memoizedState=Ho.memoizedState,Tn.lanes=Ho.lanes):(Tn.updateQueue=null,Tn.memoizedState=null)}var Hs=0!=(1&Va.current),po=tn;do{var fs;if(fs=13===po.tag){var oa=po.memoizedState;if(null!==oa)fs=null!==oa.dehydrated;else{var Xs=po.memoizedProps;fs=void 0!==Xs.fallback&&(!0!==Xs.unstable_avoidThisFallback||!Hs)}}if(fs){var Qr=po.updateQueue;if(null===Qr){var Fr=new Set;Fr.add(li),po.updateQueue=Fr}else Qr.add(li);if(0==(2&po.mode)){if(po.flags|=64,Tn.flags|=16384,Tn.flags&=-2981,1===Tn.tag)if(null===Tn.alternate)Tn.tag=17;else{var Zr=E(-1,1);Zr.tag=2,P(Tn,Zr)}Tn.lanes|=1;break e}ar=void 0,Tn=D;var Hi=At.pingCache;if(null===Hi?(Hi=At.pingCache=new qd).set(li,ar=new Set):void 0===(ar=Hi.get(li))&&Hi.set(li,ar=new Set),!ar.has(Tn)){ar.add(Tn);var io=Rp.bind(null,At,li,Tn);li.then(io,io)}po.flags|=4096,po.lanes=D;break e}po=po.return}while(null!==po);ar=Error((hr(Tn.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Hu&&(Hu=2),ar=Jh(ar,Tn),po=tn;do{switch(po.tag){case 3:At=ar,po.flags|=4096,po.lanes|=D&=-D,L(po,zf(0,At,D));break e;case 1:At=ar;var Pa=po.stateNode;if(0==(64&po.flags)&&("function"==typeof po.type.getDerivedStateFromError||null!==Pa&&"function"==typeof Pa.componentDidCatch&&(null===Bu||!Bu.has(Pa)))){po.flags|=4096,po.lanes|=D&=-D,L(po,Qh(po,At,D));break e}}po=po.return}while(null!==po)}E_(Y)}catch(va){D=va,$u===Y&&null!==Y&&($u=Y=Y.return);continue}break}}function ep(){var y=Eh.current;return Eh.current=fh,null===y?fh:y}function Wp(y,D){var Y=da;da|=16;var Ee=ep();for(wc===y&&Ts===D||zp(y,D);;)try{y_();break}catch(ze){v_(y,ze)}if(Uc(),da=Y,Eh.current=Ee,null!==$u)throw Error(u(261));return wc=null,Ts=0,Hu}function y_(){for(;null!==$u;)Ah($u)}function nm(){for(;null!==$u&&!Vu();)Ah($u)}function Ah(y){var D=Jp(y.alternate,y,Ff);y.memoizedProps=y.pendingProps,null===D?E_(y):$u=D,bh.current=null}function E_(y){var D=y;do{var Y=D.alternate;if(y=D.return,0==(2048&D.flags)){if(null!==(Y=Wh(Y,D,Ff)))return void($u=Y);if(24!==(Y=D).tag&&23!==Y.tag||null===Y.memoizedState||0!=(1073741824&Ff)||0==(4&Y.mode)){for(var Ee=0,ze=Y.child;null!==ze;)Ee|=ze.lanes|ze.childLanes,ze=ze.sibling;Y.childLanes=Ee}null!==y&&0==(2048&y.flags)&&(null===y.firstEffect&&(y.firstEffect=D.firstEffect),null!==D.lastEffect&&(null!==y.lastEffect&&(y.lastEffect.nextEffect=D.firstEffect),y.lastEffect=D.lastEffect),1<D.flags&&(null!==y.lastEffect?y.lastEffect.nextEffect=D:y.firstEffect=D,y.lastEffect=D))}else{if(null!==(Y=bp(D)))return Y.flags&=2047,void($u=Y);null!==y&&(y.firstEffect=y.lastEffect=null,y.flags|=2048)}if(null!==(D=D.sibling))return void($u=D);$u=D=y}while(null!==D);0===Hu&&(Hu=5)}function $f(y){var D=$l();return ga(99,$_.bind(null,y,D)),null}function $_(y,D){do{Mf()}while(null!==Qf);if(0!=(48&da))throw Error(u(327));var Y=y.finishedWork;if(null===Y)return null;if(y.finishedWork=null,y.finishedLanes=0,Y===y.current)throw Error(u(177));y.callbackNode=null;var Ee=Y.lanes|Y.childLanes,ze=Ee,At=y.pendingLanes&~ze;y.pendingLanes=ze,y.suspendedLanes=0,y.pingedLanes=0,y.expiredLanes&=ze,y.mutableReadLanes&=ze,y.entangledLanes&=ze,ze=y.entanglements;for(var tn=y.eventTimes,Tn=y.expirationTimes;0<At;){var ar=31-sl(At),li=1<<ar;ze[ar]=0,tn[ar]=-1,Tn[ar]=-1,At&=~li}if(null!==nf&&0==(24&Ee)&&nf.has(y)&&nf.delete(y),y===wc&&($u=wc=null,Ts=0),1<Y.flags?null!==Y.lastEffect?(Y.lastEffect.nextEffect=Y,Ee=Y.firstEffect):Ee=Y:Ee=Y.firstEffect,null!==Ee){if(ze=da,da|=32,bh.current=null,Lo=Fl,md(tn=_d())){if("selectionStart"in tn)Tn={start:tn.selectionStart,end:tn.selectionEnd};else if((li=(Tn=(Tn=tn.ownerDocument)&&Tn.defaultView||window).getSelection&&Tn.getSelection())&&0!==li.rangeCount){Tn=li.anchorNode,At=li.anchorOffset,ar=li.focusNode,li=li.focusOffset;var Ho=0,Hs=-1,po=-1,fs=0,oa=0,Xs=tn,Qr=null;t:for(;;){for(var Fr;Xs!==Tn||0!==At&&3!==Xs.nodeType||(Hs=Ho+At),Xs!==ar||0!==li&&3!==Xs.nodeType||(po=Ho+li),3===Xs.nodeType&&(Ho+=Xs.nodeValue.length),null!==(Fr=Xs.firstChild);)Qr=Xs,Xs=Fr;for(;;){if(Xs===tn)break t;if(Qr===Tn&&++fs===At&&(Hs=Ho),Qr===ar&&++oa===li&&(po=Ho),null!==(Fr=Xs.nextSibling))break;Qr=(Xs=Qr).parentNode}Xs=Fr}Tn=-1===Hs||-1===po?null:{start:Hs,end:po}}else Tn=null;Tn=Tn||{start:0,end:0}}else Tn=null;Ca={focusedElem:tn,selectionRange:Tn},Fl=!1,fp=null,Oh=!1,Ps=Ee;do{try{b_()}catch(va){if(null===Ps)throw Error(u(330));Ud(Ps,va),Ps=Ps.nextEffect}}while(null!==Ps);fp=null,Ps=Ee;do{try{for(tn=y;null!==Ps;){var Zr=Ps.flags;if(16&Zr&&et(Ps.stateNode,""),128&Zr){var Hi=Ps.alternate;if(null!==Hi){var io=Hi.ref;null!==io&&("function"==typeof io?io(null):io.current=null)}}switch(1038&Zr){case 2:ef(Ps),Ps.flags&=-3;break;case 6:ef(Ps),Ps.flags&=-3,Wf(Ps.alternate,Ps);break;case 1024:Ps.flags&=-1025;break;case 1028:Ps.flags&=-1025,Wf(Ps.alternate,Ps);break;case 4:Wf(Ps.alternate,Ps);break;case 8:qh(tn,Tn=Ps);var Ha=Tn.alternate;L_(Tn),null!==Ha&&L_(Ha)}Ps=Ps.nextEffect}}catch(va){if(null===Ps)throw Error(u(330));Ud(Ps,va),Ps=Ps.nextEffect}}while(null!==Ps);if(io=Ca,Hi=_d(),tn=io.selectionRange,Hi!==(Zr=io.focusedElem)&&Zr&&Zr.ownerDocument&&Zd(Zr.ownerDocument.documentElement,Zr)){for((null!==tn&&md(Zr)&&(Hi=tn.start,void 0===(io=tn.end)&&(io=Hi),"selectionStart"in Zr?(Zr.selectionStart=Hi,Zr.selectionEnd=Math.min(io,Zr.value.length)):(io=(Hi=Zr.ownerDocument||document)&&Hi.defaultView||window).getSelection&&(io=io.getSelection(),Tn=Zr.textContent.length,Ha=Math.min(tn.start,Tn),tn=void 0===tn.end?Ha:Math.min(tn.end,Tn),!io.extend&&Ha>tn&&(Tn=tn,tn=Ha,Ha=Tn),Tn=Su(Zr,Ha),At=Su(Zr,tn),Tn&&At&&(1!==io.rangeCount||io.anchorNode!==Tn.node||io.anchorOffset!==Tn.offset||io.focusNode!==At.node||io.focusOffset!==At.offset)&&((Hi=Hi.createRange()).setStart(Tn.node,Tn.offset),io.removeAllRanges(),Ha>tn?(io.addRange(Hi),io.extend(At.node,At.offset)):(Hi.setEnd(At.node,At.offset),io.addRange(Hi))))),Hi=[],io=Zr);io=io.parentNode;)1===io.nodeType&&Hi.push({element:io,left:io.scrollLeft,top:io.scrollTop});for("function"==typeof Zr.focus&&Zr.focus(),Zr=0;Zr<Hi.length;Zr++)(io=Hi[Zr]).element.scrollLeft=io.left,io.element.scrollTop=io.top}Fl=!!Lo,Ca=Lo=null,y.current=Y,Ps=Ee;do{try{for(Zr=y;null!==Ps;){var vs=Ps.flags;if(36&vs&&mh(Zr,Ps.alternate,Ps),128&vs){Hi=void 0;var Pa=Ps.ref;if(null!==Pa)Hi=Ps.stateNode,"function"==typeof Pa?Pa(Hi):Pa.current=Hi}Ps=Ps.nextEffect}}catch(va){if(null===Ps)throw Error(u(330));Ud(Ps,va),Ps=Ps.nextEffect}}while(null!==Ps);Ps=null,Wc(),da=ze}else y.current=Y;if(jl)jl=!1,Qf=y,kf=D;else for(Ps=Ee;null!==Ps;)D=Ps.nextEffect,Ps.nextEffect=null,8&Ps.flags&&((vs=Ps).sibling=null,vs.stateNode=null),Ps=D;if(0===(Ee=y.pendingLanes)&&(Bu=null),1===Ee?y===Ch?rf++:(rf=0,Ch=y):rf=0,Y=Y.stateNode,yd&&"function"==typeof yd.onCommitFiberRoot)try{yd.onCommitFiberRoot(dc,Y,void 0,64==(64&Y.current.flags))}catch(va){}if(Od(y,pu()),Md)throw Md=!1,y=dp,dp=null,y;return 0!=(8&da)||Lu(),null}function b_(){for(;null!==Ps;){var y=Ps.alternate;Oh||null===fp||(0!=(8&Ps.flags)?Mr(Ps,fp)&&(Oh=!0):13===Ps.tag&&Cp(y,Ps)&&Mr(Ps,fp)&&(Oh=!0));var D=Ps.flags;0!=(256&D)&&Tp(y,Ps),0==(512&D)||jl||(jl=!0,Dc(97,function(){return Mf(),null})),Ps=Ps.nextEffect}}function Mf(){if(90!==kf){var y=97<kf?97:kf;return kf=90,ga(y,Dp)}return!1}function H_(y,D){Gp.push(D,y),jl||(jl=!0,Dc(97,function(){return Mf(),null}))}function tp(y,D){e_.push(D,y),jl||(jl=!0,Dc(97,function(){return Mf(),null}))}function Dp(){if(null===Qf)return!1;var y=Qf;if(Qf=null,0!=(48&da))throw Error(u(331));var D=da;da|=32;var Y=e_;e_=[];for(var Ee=0;Ee<Y.length;Ee+=2){var ze=Y[Ee],At=Y[Ee+1],tn=ze.destroy;if(ze.destroy=void 0,"function"==typeof tn)try{tn()}catch(ar){if(null===At)throw Error(u(330));Ud(At,ar)}}for(Y=Gp,Gp=[],Ee=0;Ee<Y.length;Ee+=2){ze=Y[Ee],At=Y[Ee+1];try{var Tn=ze.create;ze.destroy=Tn()}catch(ar){if(null===At)throw Error(u(330));Ud(At,ar)}}for(Tn=y.current.firstEffect;null!==Tn;)y=Tn.nextEffect,Tn.nextEffect=null,8&Tn.flags&&(Tn.sibling=null,Tn.stateNode=null),Tn=y;return da=D,Lu(),!0}function xp(y,D,Y){P(y,D=zf(0,D=Jh(Y,D),1)),D=Gc(),null!==(y=Op(y,1))&&(hl(y,1,D),Od(y,D))}function Ud(y,D){if(3===y.tag)xp(y,y,D);else for(var Y=y.return;null!==Y;){if(3===Y.tag){xp(Y,y,D);break}if(1===Y.tag){var Ee=Y.stateNode;if("function"==typeof Y.type.getDerivedStateFromError||"function"==typeof Ee.componentDidCatch&&(null===Bu||!Bu.has(Ee))){var ze=Qh(Y,y=Jh(D,y),1);if(P(Y,ze),ze=Gc(),null!==(Y=Op(Y,1)))hl(Y,1,ze),Od(Y,ze);else if("function"==typeof Ee.componentDidCatch&&(null===Bu||!Bu.has(Ee)))try{Ee.componentDidCatch(D,y)}catch(At){}break}}Y=Y.return}}function Rp(y,D,Y){var Ee=y.pingCache;null!==Ee&&Ee.delete(D),D=Gc(),y.pingedLanes|=y.suspendedLanes&Y,wc===y&&(Ts&Y)===Y&&(4===Hu||3===Hu&&(62914560&Ts)===Ts&&500>pu()-k_?zp(y,0):Jf|=Y),Od(y,D)}function i_(y,D){var Y=y.stateNode;null!==Y&&Y.delete(D),0==(D=0)&&(0==(2&(D=y.mode))?D=1:0==(4&D)?D=99===$l()?1:2:(0===ud&&(ud=Lf),0===(D=Fs(62914560&~ud))&&(D=4194304))),Y=Gc(),null!==(y=Op(y,D))&&(hl(y,D,Y),Od(y,Y))}function S_(y,D,Y,Ee){this.tag=y,this.key=Y,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=D,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=Ee,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Ad(y,D,Y,Ee){return new S_(y,D,Y,Ee)}function B_(y){return!(!(y=y.prototype)||!y.isReactComponent)}function hp(y,D){var Y=y.alternate;return null===Y?((Y=Ad(y.tag,D,y.key,y.mode)).elementType=y.elementType,Y.type=y.type,Y.stateNode=y.stateNode,Y.alternate=y,y.alternate=Y):(Y.pendingProps=D,Y.type=y.type,Y.flags=0,Y.nextEffect=null,Y.firstEffect=null,Y.lastEffect=null),Y.childLanes=y.childLanes,Y.lanes=y.lanes,Y.child=y.child,Y.memoizedProps=y.memoizedProps,Y.memoizedState=y.memoizedState,Y.updateQueue=y.updateQueue,Y.dependencies=null===(D=y.dependencies)?null:{lanes:D.lanes,firstContext:D.firstContext},Y.sibling=y.sibling,Y.index=y.index,Y.ref=y.ref,Y}function Dh(y,D,Y,Ee,ze,At){var tn=2;if(Ee=y,"function"==typeof y)B_(y)&&(tn=1);else if("string"==typeof y)tn=5;else e:switch(y){case ce:return Vc(Y.children,ze,At,D);case Yt:tn=8,ze|=16;break;case Be:tn=8,ze|=1;break;case Ve:return(y=Ad(12,Y,D,8|ze)).elementType=Ve,y.type=Ve,y.lanes=At,y;case Ge:return(y=Ad(13,Y,D,ze)).type=Ge,y.elementType=Ge,y.lanes=At,y;case Oe:return(y=Ad(19,Y,D,ze)).elementType=Oe,y.lanes=At,y;case dn:return rm(Y,ze,At,D);case rn:return(y=Ad(24,Y,D,ze)).elementType=rn,y.lanes=At,y;default:if("object"==typeof y&&null!==y)switch(y.$$typeof){case Xe:tn=10;break e;case He:tn=9;break e;case Pe:tn=11;break e;case Tt:tn=14;break e;case We:tn=16,Ee=null;break e;case Qt:tn=22;break e}throw Error(u(130,null==y?y:typeof y,""))}return(D=Ad(tn,Y,D,ze)).elementType=y,D.type=Ee,D.lanes=At,D}function Vc(y,D,Y,Ee){return(y=Ad(7,y,Ee,D)).lanes=Y,y}function rm(y,D,Y,Ee){return(y=Ad(23,y,Ee,D)).elementType=dn,y.lanes=Y,y}function T_(y,D,Y){return(y=Ad(6,y,null,D)).lanes=Y,y}function xh(y,D,Y){return(D=Ad(4,null!==y.children?y.children:[],y.key,D)).lanes=Y,D.stateNode={containerInfo:y.containerInfo,pendingChildren:null,implementation:y.implementation},D}function I(y,D,Y){this.tag=D,this.containerInfo=y,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=Y,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ks(0),this.expirationTimes=Ks(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ks(0),this.mutableSourceEagerHydrationData=null}function ne(y,D,Y){var Ee=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:Ce,key:null==Ee?null:""+Ee,children:y,containerInfo:D,implementation:Y}}function T(y,D,Y,Ee){var ze=D.current,At=Gc(),tn=Xf(ze);e:if(Y){t:{if(Eo(Y=Y._reactInternals)!==Y||1!==Y.tag)throw Error(u(170));var Tn=Y;do{switch(Tn.tag){case 3:Tn=Tn.stateNode.context;break t;case 1:if(Iu(Tn.type)){Tn=Tn.stateNode.__reactInternalMemoizedMergedChildContext;break t}}Tn=Tn.return}while(null!==Tn);throw Error(u(171))}if(1===Y.tag){var ar=Y.type;if(Iu(ar)){Y=xf(Y,ar,Tn);break e}}Y=Tn}else Y=Gu;return null===D.context?D.context=Y:D.pendingContext=Y,(D=E(At,tn)).payload={element:y},null!==(Ee=void 0===Ee?null:Ee)&&(D.callback=Ee),P(ze,D),pp(ze,tn,At),tn}function z(y){return(y=y.current).child?y.child.stateNode:null}function Me(y,D){if(null!==(y=y.memoizedState)&&null!==y.dehydrated){var Y=y.retryLane;y.retryLane=0!==Y&&Y<D?Y:D}}function Ke(y,D){Me(y,D),(y=y.alternate)&&Me(y,D)}function yr(y,D,Y){var Ee=null!=Y&&null!=Y.hydrationOptions&&Y.hydrationOptions.mutableSources||null;if(Y=new I(y,D,null!=Y&&!0===Y.hydrate),D=Ad(3,null,null,2===D?7:1===D?3:0),Y.current=D,D.stateNode=Y,ic(D),y[gd]=Y.current,Ze(8===y.nodeType?y.parentNode:y),Ee)for(y=0;y<Ee.length;y++){var ze=(D=Ee[y])._getVersion;ze=ze(D._source),null==Y.mutableSourceEagerHydrationData?Y.mutableSourceEagerHydrationData=[D,ze]:Y.mutableSourceEagerHydrationData.push(D,ze)}this._internalRoot=Y}function Nr(y){return!(!y||1!==y.nodeType&&9!==y.nodeType&&11!==y.nodeType&&(8!==y.nodeType||" react-mount-point-unstable "!==y.nodeValue))}function di(y,D,Y,Ee,ze){var At=Y._reactRootContainer;if(At){var tn=At._internalRoot;if("function"==typeof ze){var Tn=ze;ze=function(){var li=z(tn);Tn.call(li)}}T(D,tn,y,ze)}else{if(At=Y._reactRootContainer=function vi(y,D){if(D||(D=!(!(D=y?9===y.nodeType?y.documentElement:y.firstChild:null)||1!==D.nodeType||!D.hasAttribute("data-reactroot"))),!D)for(var Y;Y=y.lastChild;)y.removeChild(Y);return new yr(y,0,D?{hydrate:!0}:void 0)}(Y,Ee),tn=At._internalRoot,"function"==typeof ze){var ar=ze;ze=function(){var li=z(tn);ar.call(li)}}Zp(function(){T(D,tn,y,ze)})}return z(tn)}function ts(y,D){var Y=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Nr(D))throw Error(u(200));return ne(y,D,null,Y)}Jp=function(y,D,Y){var Ee=D.lanes;if(null!==y)if(y.memoizedProps!==D.pendingProps||Cu.current)Tf=!0;else{if(0==(Y&Ee)){switch(Tf=!1,D.tag){case 3:em(D),wt();break;case 5:Gl(D);break;case 1:Iu(D.type)&&Bc(D);break;case 4:Ga(D,D.stateNode.containerInfo);break;case 10:Ee=D.memoizedProps.value;var ze=D.type._context;kl(Sc,ze._currentValue),ze._currentValue=Ee;break;case 13:if(null!==D.memoizedState)return 0!=(Y&D.child.childLanes)?Vh(y,D,Y):(kl(Va,1&Va.current),null!==(D=Td(y,D,Y))?D.sibling:null);kl(Va,1&Va.current);break;case 19:if(Ee=0!=(Y&D.childLanes),0!=(64&y.flags)){if(Ee)return Ep(y,D,Y);D.flags|=64}if(null!==(ze=D.memoizedState)&&(ze.rendering=null,ze.tail=null,ze.lastEffect=null),kl(Va,Va.current),Ee)break;return null;case 23:case 24:return D.lanes=0,p_(y,D,Y)}return Td(y,D,Y)}Tf=0!=(16384&y.flags)}else Tf=!1;switch(D.lanes=0,D.tag){case 2:if(Ee=D.type,null!==y&&(y.alternate=null,D.alternate=null,D.flags|=2),y=D.pendingProps,ze=Ec(D,ul.current),Jc(D,Y),ze=ah(null,D,Ee,y,ze,Y),D.flags|=1,"object"==typeof ze&&null!==ze&&"function"==typeof ze.render&&void 0===ze.$$typeof){if(D.tag=1,D.memoizedState=null,D.updateQueue=null,Iu(Ee)){var At=!0;Bc(D)}else At=!1;D.memoizedState=null!=ze.state?ze.state:null,ic(D);var tn=Ee.getDerivedStateFromProps;"function"==typeof tn&&Ye(D,Ee,tn,y),ze.updater=xe,D.stateNode=ze,ze._reactInternals=D,fn(D,Ee,y,Y),D=hh(null,D,Ee,!0,At,Y)}else D.tag=0,Au(null,D,ze,Y),D=D.child;return D;case 16:ze=D.elementType;e:{switch(null!==y&&(y.alternate=null,D.alternate=null,D.flags|=2),y=D.pendingProps,ze=(At=ze._init)(ze._payload),D.type=ze,At=D.tag=function Sm(y){if("function"==typeof y)return B_(y)?1:0;if(null!=y){if((y=y.$$typeof)===Pe)return 11;if(y===Tt)return 14}return 2}(ze),y=Ql(ze,y),At){case 0:D=Yp(null,D,ze,y,Y);break e;case 1:D=Gh(null,D,ze,y,Y);break e;case 11:D=If(null,D,ze,y,Y);break e;case 14:D=Yh(null,D,ze,Ql(ze.type,y),Ee,Y);break e}throw Error(u(306,ze,""))}return D;case 0:return ze=D.pendingProps,Yp(y,D,Ee=D.type,ze=D.elementType===Ee?ze:Ql(Ee,ze),Y);case 1:return ze=D.pendingProps,Gh(y,D,Ee=D.type,ze=D.elementType===Ee?ze:Ql(Ee,ze),Y);case 3:if(em(D),Ee=D.updateQueue,null===y||null===Ee)throw Error(u(282));if(Ee=D.pendingProps,ze=null!==(ze=D.memoizedState)?ze.element:null,h(y,D),X(D,Ee,null,Y),(Ee=D.memoizedState.element)===ze)wt(),D=Td(y,D,Y);else{if((At=(ze=D.stateNode).hydrate)&&(xc=ka(D.stateNode.containerInfo.firstChild),ku=D,At=Ou=!0),At){if(null!=(y=ze.mutableSourceEagerHydrationData))for(ze=0;ze<y.length;ze+=2)(At=y[ze])._workInProgressVersionPrimary=y[ze+1],ln.push(At);for(Y=is(D,null,Ee,Y),D.child=Y;Y;)Y.flags=-3&Y.flags|1024,Y=Y.sibling}else Au(y,D,Ee,Y),wt();D=D.child}return D;case 5:return Gl(D),null===y&&K(D),At=null!==y?y.memoizedProps:null,tn=(ze=D.pendingProps).children,ha(Ee=D.type,ze)?tn=null:null!==At&&ha(Ee,At)&&(D.flags|=16),ph(y,D),Au(y,D,tn,Y),D.child;case 6:return null===y&&K(D),null;case 13:return Vh(y,D,Y);case 4:return Ga(D,D.stateNode.containerInfo),Ee=D.pendingProps,null===y?D.child=Ui(D,null,Ee,Y):Au(y,D,Ee,Y),D.child;case 11:return ze=D.pendingProps,If(y,D,Ee=D.type,ze=D.elementType===Ee?ze:Ql(Ee,ze),Y);case 7:return Au(y,D,D.pendingProps,Y),D.child;case 8:case 12:return Au(y,D,D.pendingProps.children,Y),D.child;case 10:e:{Ee=D.type._context,tn=D.memoizedProps,At=(ze=D.pendingProps).value;var Tn=D.type._context;if(kl(Sc,Tn._currentValue),Tn._currentValue=At,null!==tn)if(0==(At=Us(Tn=tn.value,At)?0:0|("function"==typeof Ee._calculateChangedBits?Ee._calculateChangedBits(Tn,At):1073741823))){if(tn.children===ze.children&&!Cu.current){D=Td(y,D,Y);break e}}else for(null!==(Tn=D.child)&&(Tn.return=D);null!==Tn;){var ar=Tn.dependencies;if(null!==ar){tn=Tn.child;for(var li=ar.firstContext;null!==li;){if(li.context===Ee&&0!=(li.observedBits&At)){1===Tn.tag&&((li=E(-1,Y&-Y)).tag=2,P(Tn,li)),Tn.lanes|=Y,null!==(li=Tn.alternate)&&(li.lanes|=Y),Jd(Tn.return,Y),ar.lanes|=Y;break}li=li.next}}else tn=10===Tn.tag&&Tn.type===D.type?null:Tn.child;if(null!==tn)tn.return=Tn;else for(tn=Tn;null!==tn;){if(tn===D){tn=null;break}if(null!==(Tn=tn.sibling)){Tn.return=tn.return,tn=Tn;break}tn=tn.return}Tn=tn}Au(y,D,ze.children,Y),D=D.child}return D;case 9:return ze=D.type,Ee=(At=D.pendingProps).children,Jc(D,Y),Ee=Ee(ze=Nl(ze,At.unstable_observedBits)),D.flags|=1,Au(y,D,Ee,Y),D.child;case 14:return At=Ql(ze=D.type,D.pendingProps),Yh(y,D,ze,At=Ql(ze.type,At),Ee,Y);case 15:return jh(y,D,D.type,D.pendingProps,Ee,Y);case 17:return ze=D.pendingProps,ze=D.elementType===(Ee=D.type)?ze:Ql(Ee,ze),null!==y&&(y.alternate=null,D.alternate=null,D.flags|=2),D.tag=1,Iu(Ee)?(y=!0,Bc(D)):y=!1,Jc(D,Y),St(D,Ee,ze),fn(D,Ee,ze,Y),hh(null,D,Ee,!0,y,Y);case 19:return Ep(y,D,Y);case 23:case 24:return p_(y,D,Y)}throw Error(u(156,D.tag))},yr.prototype.render=function(y){T(y,this._internalRoot,null,null)},yr.prototype.unmount=function(){var y=this._internalRoot,D=y.containerInfo;T(null,y,null,function(){D[gd]=null})},Ar=function(y){13===y.tag&&(pp(y,4,Gc()),Ke(y,4))},cr=function(y){13===y.tag&&(pp(y,67108864,Gc()),Ke(y,67108864))},pi=function(y){if(13===y.tag){var D=Gc(),Y=Xf(y);pp(y,Y,D),Ke(y,Y)}},Sn=function(y,D){return D()},ti=function(y,D,Y){switch(D){case"input":if(xo(y,Y),D=Y.name,"radio"===Y.type&&null!=D){for(Y=y;Y.parentNode;)Y=Y.parentNode;for(Y=Y.querySelectorAll("input[name="+JSON.stringify(""+D)+'][type="radio"]'),D=0;D<Y.length;D++){var Ee=Y[D];if(Ee!==y&&Ee.form===y.form){var ze=Ll(Ee);if(!ze)throw Error(u(90));_r(Ee),xo(Ee,ze)}}}break;case"textarea":Gi(y,Y);break;case"select":null!=(D=Y.value)&&Xn(y,!!Y.multiple,D,!1)}},yt=Ap,Vt=function(y,D,Y,Ee,ze){var At=da;da|=4;try{return ga(98,y.bind(null,D,Y,Ee,ze))}finally{0===(da=At)&&(cp(),Lu())}},yn=function(){0==(49&da)&&(function r_(){if(null!==nf){var y=nf;nf=null,y.forEach(function(D){D.expiredLanes|=24&D.pendingLanes,Od(D,pu())})}Lu()}(),Mf())},Cr=function(y,D){var Y=da;da|=2;try{return y(D)}finally{0===(da=Y)&&(cp(),Lu())}};var Do={Events:[Oa,ll,Ll,$t,_t,Mf,{current:!1}]},Ss={findFiberByHostInstance:cu,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},jo={bundleType:Ss.bundleType,version:Ss.version,rendererPackageName:Ss.rendererPackageName,rendererConfig:Ss.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:fe.ReactCurrentDispatcher,findHostInstanceByFiber:function(y){return null===(y=or(y))?null:y.stateNode},findFiberByHostInstance:Ss.findFiberByHostInstance||function gn(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ia=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ia.isDisabled&&ia.supportsFiber)try{dc=ia.inject(jo),yd=ia}catch(y){}}b.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Do,b.createPortal=ts,b.findDOMNode=function(y){if(null==y)return null;if(1===y.nodeType)return y;var D=y._reactInternals;if(void 0===D)throw"function"==typeof y.render?Error(u(188)):Error(u(268,Object.keys(y)));return null===(y=or(D))?null:y.stateNode},b.flushSync=function(y,D){var Y=da;if(0!=(48&Y))return y(D);da|=1;try{if(y)return ga(99,y.bind(null,D))}finally{da=Y,Lu()}},b.hydrate=function(y,D,Y){if(!Nr(D))throw Error(u(200));return di(null,y,D,!0,Y)},b.render=function(y,D,Y){if(!Nr(D))throw Error(u(200));return di(null,y,D,!1,Y)},b.unmountComponentAtNode=function(y){if(!Nr(y))throw Error(u(40));return!!y._reactRootContainer&&(Zp(function(){di(null,null,y,!1,function(){y._reactRootContainer=null,y[gd]=null})}),!0)},b.unstable_batchedUpdates=Ap,b.unstable_createPortal=function(y,D){return ts(y,D,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},b.unstable_renderSubtreeIntoContainer=function(y,D,Y,Ee){if(!Nr(Y))throw Error(u(200));if(null==y||void 0===y._reactInternals)throw Error(u(38));return di(y,D,Y,!1,Ee)},b.version="17.0.2"},88768:(v,b,i)=>{"use strict";(function r(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(r)}catch(a){console.error(a)}})(),v.exports=i(85503)},14395:(v,b,i)=>{"use strict";var f,r=i(16482),a="<<anonymous>>",u=function(){invariant(!1,"ImmutablePropTypes type checking code is stripped in production.")};u.isRequired=u;var e=function(){return u};function M(ce,Be){return function S(ce,Be){return function g(ce){function Be(Xe,He,Pe,Ge,Oe,Tt){for(var We=arguments.length,Qt=Array(We>6?We-6:0),Nt=6;Nt<We;Nt++)Qt[Nt-6]=arguments[Nt];return Tt=Tt||Pe,Ge=Ge||a,null!=He[Pe]?ce.apply(void 0,[He,Pe,Ge,Oe,Tt].concat(Qt)):Xe?new Error("Required "+Oe+" `"+Tt+"` was not specified in `"+Ge+"`."):void 0}var Ve=Be.bind(null,!1);return Ve.isRequired=Be.bind(null,!0),Ve}(function Ve(Xe,He,Pe,Ge,Oe){var Tt=Xe[He];if(!Be(Tt)){var We=function p(ce){var Be=typeof ce;return Array.isArray(ce)?"array":ce instanceof RegExp?"object":ce instanceof r.Iterable?"Immutable."+ce.toSource().split(" ")[0]:Be}(Tt);return new Error("Invalid "+Ge+" `"+Oe+"` of type `"+We+"` supplied to `"+Pe+"`, expected `"+ce+"`.")}return null})}("Iterable."+ce,function(Ve){return r.Iterable.isIterable(Ve)&&Be(Ve)})}(f={listOf:e,mapOf:e,orderedMapOf:e,setOf:e,orderedSetOf:e,stackOf:e,iterableOf:e,recordOf:e,shape:e,contains:e,mapContains:e,orderedMapContains:e,list:u,map:u,orderedMap:u,set:u,orderedSet:u,stack:u,seq:u,record:u,iterable:u}).iterable.indexed=M("Indexed",r.Iterable.isIndexed),f.iterable.keyed=M("Keyed",r.Iterable.isKeyed),v.exports=f},6249:(v,b)=>{"use strict";var i="function"==typeof Symbol&&Symbol.for,r=i?Symbol.for("react.element"):60103,a=i?Symbol.for("react.portal"):60106,f=i?Symbol.for("react.fragment"):60107,u=i?Symbol.for("react.strict_mode"):60108,e=i?Symbol.for("react.profiler"):60114,p=i?Symbol.for("react.provider"):60109,g=i?Symbol.for("react.context"):60110,S=i?Symbol.for("react.async_mode"):60111,M=i?Symbol.for("react.concurrent_mode"):60111,w=i?Symbol.for("react.forward_ref"):60112,x=i?Symbol.for("react.suspense"):60113,B=i?Symbol.for("react.suspense_list"):60120,W=i?Symbol.for("react.memo"):60115,j=i?Symbol.for("react.lazy"):60116,q=i?Symbol.for("react.block"):60121,ue=i?Symbol.for("react.fundamental"):60117,re=i?Symbol.for("react.responder"):60118,H=i?Symbol.for("react.scope"):60119;function se(ie){if("object"==typeof ie&&null!==ie){var fe=ie.$$typeof;switch(fe){case r:switch(ie=ie.type){case S:case M:case f:case e:case u:case x:return ie;default:switch(ie=ie&&ie.$$typeof){case g:case w:case j:case W:case p:return ie;default:return fe}}case a:return fe}}}function ae(ie){return se(ie)===M}b.AsyncMode=S,b.ConcurrentMode=M,b.ContextConsumer=g,b.ContextProvider=p,b.Element=r,b.ForwardRef=w,b.Fragment=f,b.Lazy=j,b.Memo=W,b.Portal=a,b.Profiler=e,b.StrictMode=u,b.Suspense=x,b.isAsyncMode=function(ie){return ae(ie)||se(ie)===S},b.isConcurrentMode=ae,b.isContextConsumer=function(ie){return se(ie)===g},b.isContextProvider=function(ie){return se(ie)===p},b.isElement=function(ie){return"object"==typeof ie&&null!==ie&&ie.$$typeof===r},b.isForwardRef=function(ie){return se(ie)===w},b.isFragment=function(ie){return se(ie)===f},b.isLazy=function(ie){return se(ie)===j},b.isMemo=function(ie){return se(ie)===W},b.isPortal=function(ie){return se(ie)===a},b.isProfiler=function(ie){return se(ie)===e},b.isStrictMode=function(ie){return se(ie)===u},b.isSuspense=function(ie){return se(ie)===x},b.isValidElementType=function(ie){return"string"==typeof ie||"function"==typeof ie||ie===f||ie===M||ie===e||ie===u||ie===x||ie===B||"object"==typeof ie&&null!==ie&&(ie.$$typeof===j||ie.$$typeof===W||ie.$$typeof===p||ie.$$typeof===g||ie.$$typeof===w||ie.$$typeof===ue||ie.$$typeof===re||ie.$$typeof===H||ie.$$typeof===q)},b.typeOf=se},38308:(v,b,i)=>{"use strict";v.exports=i(6249)},1422:(v,b)=>{"use strict";var r=60103,a=60106,f=60107,u=60108,e=60114,p=60109,g=60110,S=60112,M=60113,w=60120,x=60115,B=60116;if("function"==typeof Symbol&&Symbol.for){var H=Symbol.for;r=H("react.element"),a=H("react.portal"),f=H("react.fragment"),u=H("react.strict_mode"),e=H("react.profiler"),p=H("react.provider"),g=H("react.context"),S=H("react.forward_ref"),M=H("react.suspense"),w=H("react.suspense_list"),x=H("react.memo"),B=H("react.lazy"),H("react.block"),H("react.server.block"),H("react.fundamental"),H("react.debug_trace_mode"),H("react.legacy_hidden")}b.isContextConsumer=function(Pe){return function se(Pe){if("object"==typeof Pe&&null!==Pe){var Ge=Pe.$$typeof;switch(Ge){case r:switch(Pe=Pe.type){case f:case e:case u:case M:case w:return Pe;default:switch(Pe=Pe&&Pe.$$typeof){case g:case S:case B:case x:case p:return Pe;default:return Ge}}case a:return Ge}}}(Pe)===g}},56261:(v,b,i)=>{"use strict";v.exports=i(1422)},55429:(v,b,i)=>{"use strict";var r=i(18228),a=60103,f=60106;b.Fragment=60107,b.StrictMode=60108,b.Profiler=60114;var u=60109,e=60110,p=60112;b.Suspense=60113;var g=60115,S=60116;if("function"==typeof Symbol&&Symbol.for){var M=Symbol.for;a=M("react.element"),f=M("react.portal"),b.Fragment=M("react.fragment"),b.StrictMode=M("react.strict_mode"),b.Profiler=M("react.profiler"),u=M("react.provider"),e=M("react.context"),p=M("react.forward_ref"),b.Suspense=M("react.suspense"),g=M("react.memo"),S=M("react.lazy")}var w="function"==typeof Symbol&&Symbol.iterator;function B(We){for(var Qt="https://reactjs.org/docs/error-decoder.html?invariant="+We,Nt=1;Nt<arguments.length;Nt++)Qt+="&args[]="+encodeURIComponent(arguments[Nt]);return"Minified React error #"+We+"; visit "+Qt+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var W={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},j={};function q(We,Qt,Nt){this.props=We,this.context=Qt,this.refs=j,this.updater=Nt||W}function ue(){}function re(We,Qt,Nt){this.props=We,this.context=Qt,this.refs=j,this.updater=Nt||W}q.prototype.isReactComponent={},q.prototype.setState=function(We,Qt){if("object"!=typeof We&&"function"!=typeof We&&null!=We)throw Error(B(85));this.updater.enqueueSetState(this,We,Qt,"setState")},q.prototype.forceUpdate=function(We){this.updater.enqueueForceUpdate(this,We,"forceUpdate")},ue.prototype=q.prototype;var H=re.prototype=new ue;H.constructor=re,r(H,q.prototype),H.isPureReactComponent=!0;var se={current:null},ae=Object.prototype.hasOwnProperty,ie={key:!0,ref:!0,__self:!0,__source:!0};function fe(We,Qt,Nt){var Yt,dn={},rn=null,vt=null;if(null!=Qt)for(Yt in void 0!==Qt.ref&&(vt=Qt.ref),void 0!==Qt.key&&(rn=""+Qt.key),Qt)ae.call(Qt,Yt)&&!ie.hasOwnProperty(Yt)&&(dn[Yt]=Qt[Yt]);var xt=arguments.length-2;if(1===xt)dn.children=Nt;else if(1<xt){for(var Ct=Array(xt),Gt=0;Gt<xt;Gt++)Ct[Gt]=arguments[Gt+2];dn.children=Ct}if(We&&We.defaultProps)for(Yt in xt=We.defaultProps)void 0===dn[Yt]&&(dn[Yt]=xt[Yt]);return{$$typeof:a,type:We,key:rn,ref:vt,props:dn,_owner:se.current}}function Ce(We){return"object"==typeof We&&null!==We&&We.$$typeof===a}var Be=/\/+/g;function Ve(We,Qt){return"object"==typeof We&&null!==We&&null!=We.key?function ce(We){var Qt={"=":"=0",":":"=2"};return"$"+We.replace(/[=:]/g,function(Nt){return Qt[Nt]})}(""+We.key):Qt.toString(36)}function Xe(We,Qt,Nt,Yt,dn){var rn=typeof We;("undefined"===rn||"boolean"===rn)&&(We=null);var vt=!1;if(null===We)vt=!0;else switch(rn){case"string":case"number":vt=!0;break;case"object":switch(We.$$typeof){case a:case f:vt=!0}}if(vt)return dn=dn(vt=We),We=""===Yt?"."+Ve(vt,0):Yt,Array.isArray(dn)?(Nt="",null!=We&&(Nt=We.replace(Be,"$&/")+"/"),Xe(dn,Qt,Nt,"",function(Gt){return Gt})):null!=dn&&(Ce(dn)&&(dn=function he(We,Qt){return{$$typeof:a,type:We.type,key:Qt,ref:We.ref,props:We.props,_owner:We._owner}}(dn,Nt+(!dn.key||vt&&vt.key===dn.key?"":(""+dn.key).replace(Be,"$&/")+"/")+We)),Qt.push(dn)),1;if(vt=0,Yt=""===Yt?".":Yt+":",Array.isArray(We))for(var xt=0;xt<We.length;xt++){var Ct=Yt+Ve(rn=We[xt],xt);vt+=Xe(rn,Qt,Nt,Ct,dn)}else if(Ct=function x(We){return null===We||"object"!=typeof We?null:"function"==typeof(We=w&&We[w]||We["@@iterator"])?We:null}(We),"function"==typeof Ct)for(We=Ct.call(We),xt=0;!(rn=We.next()).done;)vt+=Xe(rn=rn.value,Qt,Nt,Ct=Yt+Ve(rn,xt++),dn);else if("object"===rn)throw Qt=""+We,Error(B(31,"[object Object]"===Qt?"object with keys {"+Object.keys(We).join(", ")+"}":Qt));return vt}function He(We,Qt,Nt){if(null==We)return We;var Yt=[],dn=0;return Xe(We,Yt,"","",function(rn){return Qt.call(Nt,rn,dn++)}),Yt}function Pe(We){if(-1===We._status){var Qt=We._result;Qt=Qt(),We._status=0,We._result=Qt,Qt.then(function(Nt){0===We._status&&(Nt=Nt.default,We._status=1,We._result=Nt)},function(Nt){0===We._status&&(We._status=2,We._result=Nt)})}if(1===We._status)return We._result;throw We._result}var Ge={current:null};function Oe(){var We=Ge.current;if(null===We)throw Error(B(321));return We}var Tt={ReactCurrentDispatcher:Ge,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:se,IsSomeRendererActing:{current:!1},assign:r};b.Children={map:He,forEach:function(We,Qt,Nt){He(We,function(){Qt.apply(this,arguments)},Nt)},count:function(We){var Qt=0;return He(We,function(){Qt++}),Qt},toArray:function(We){return He(We,function(Qt){return Qt})||[]},only:function(We){if(!Ce(We))throw Error(B(143));return We}},b.Component=q,b.PureComponent=re,b.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Tt,b.cloneElement=function(We,Qt,Nt){if(null==We)throw Error(B(267,We));var Yt=r({},We.props),dn=We.key,rn=We.ref,vt=We._owner;if(null!=Qt){if(void 0!==Qt.ref&&(rn=Qt.ref,vt=se.current),void 0!==Qt.key&&(dn=""+Qt.key),We.type&&We.type.defaultProps)var xt=We.type.defaultProps;for(Ct in Qt)ae.call(Qt,Ct)&&!ie.hasOwnProperty(Ct)&&(Yt[Ct]=void 0===Qt[Ct]&&void 0!==xt?xt[Ct]:Qt[Ct])}var Ct=arguments.length-2;if(1===Ct)Yt.children=Nt;else if(1<Ct){xt=Array(Ct);for(var Gt=0;Gt<Ct;Gt++)xt[Gt]=arguments[Gt+2];Yt.children=xt}return{$$typeof:a,type:We.type,key:dn,ref:rn,props:Yt,_owner:vt}},b.createContext=function(We,Qt){return void 0===Qt&&(Qt=null),(We={$$typeof:e,_calculateChangedBits:Qt,_currentValue:We,_currentValue2:We,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:We},We.Consumer=We},b.createElement=fe,b.createFactory=function(We){var Qt=fe.bind(null,We);return Qt.type=We,Qt},b.createRef=function(){return{current:null}},b.forwardRef=function(We){return{$$typeof:p,render:We}},b.isValidElement=Ce,b.lazy=function(We){return{$$typeof:S,_payload:{_status:-1,_result:We},_init:Pe}},b.memo=function(We,Qt){return{$$typeof:g,type:We,compare:void 0===Qt?null:Qt}},b.useCallback=function(We,Qt){return Oe().useCallback(We,Qt)},b.useContext=function(We,Qt){return Oe().useContext(We,Qt)},b.useDebugValue=function(){},b.useEffect=function(We,Qt){return Oe().useEffect(We,Qt)},b.useImperativeHandle=function(We,Qt,Nt){return Oe().useImperativeHandle(We,Qt,Nt)},b.useLayoutEffect=function(We,Qt){return Oe().useLayoutEffect(We,Qt)},b.useMemo=function(We,Qt){return Oe().useMemo(We,Qt)},b.useReducer=function(We,Qt,Nt){return Oe().useReducer(We,Qt,Nt)},b.useRef=function(We){return Oe().useRef(We)},b.useState=function(We){return Oe().useState(We)},b.version="17.0.2"},78139:(v,b,i)=>{"use strict";v.exports=i(55429)},59882:(v,b,i)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var a=function u(e){return e&&e.__esModule?e:{default:e}}(i(16482)),f=i(11715);b.default=function(e){var p=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.default.Map,g=Object.keys(e);return function(){var S=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p(),M=arguments[1];return S.withMutations(function(x){g.forEach(function(B){var q=(0,e[B])(x.get(B),M);(0,f.validateNextState)(q,B,M),x.set(B,q)})})}},v.exports=b.default},31208:(v,b,i)=>{"use strict";b.U=void 0;var f=function u(e){return e&&e.__esModule?e:{default:e}}(i(59882));b.U=f.default},46944:(v,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.default=function(i){return i&&"@@redux/INIT"===i.type?"initialState argument passed to createStore":"previous state received by the reducer"},v.exports=b.default},99319:(v,b,i)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var a=e(i(16482)),u=e(i(46944));function e(p){return p&&p.__esModule?p:{default:p}}b.default=function(p,g,S){var M=Object.keys(g);if(!M.length)return"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.";var w=(0,u.default)(S);if(a.default.isImmutable?!a.default.isImmutable(p):!a.default.Iterable.isIterable(p))return"The "+w+' is of unexpected type. Expected argument to be an instance of Immutable.Collection or Immutable.Record with the following properties: "'+M.join('", "')+'".';var x=p.toSeq().keySeq().toArray().filter(function(B){return!g.hasOwnProperty(B)});return x.length>0?"Unexpected "+(1===x.length?"property":"properties")+' "'+x.join('", "')+'" found in '+w+'. Expected to find one of the known reducer property names instead: "'+M.join('", "')+'". Unexpected properties will be ignored.':null},v.exports=b.default},11715:(v,b,i)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.validateNextState=b.getUnexpectedInvocationParameterMessage=b.getStateName=void 0;var a=g(i(46944)),u=g(i(99319)),p=g(i(95159));function g(S){return S&&S.__esModule?S:{default:S}}b.getStateName=a.default,b.getUnexpectedInvocationParameterMessage=u.default,b.validateNextState=p.default},95159:(v,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),b.default=function(i,r,a){if(void 0===i)throw new Error('Reducer "'+r+'" returned undefined when handling "'+a.type+'" action. To ignore an action, you must explicitly return the previous state.')},v.exports=b.default},88280:v=>{"use strict";var i,b="";v.exports=function r(a,f){if("string"!=typeof a)throw new TypeError("expected a string");if(1===f)return a;if(2===f)return a+a;var u=a.length*f;if(i!==a||void 0===i)i=a,b="";else if(b.length>=u)return b.substr(0,u);for(;u>b.length&&f>1;)1&f&&(b+=a),f>>=1,a+=a;return b=(b+=a).substr(0,u)}},90465:v=>{"use strict";v.exports=function(i,r){if(r=r.split(":")[0],!(i=+i))return!1;switch(r){case"http":case"ws":return 80!==i;case"https":case"wss":return 443!==i;case"ftp":return 21!==i;case"gopher":return 70!==i;case"file":return!1}return 0!==i}},66952:(v,b,i)=>{const r=i(18514),a=i(29394),f=i(87931),u=i(45899);v.exports=e=>{var g,S,p=0,M={type:a.ROOT,stack:[]},w=M,x=M.stack,B=[],W=fe=>{r.error(e,"Nothing to repeat at column "+(fe-1))},j=r.strToChars(e);for(g=j.length;p<g;)switch(S=j[p++],S){case"\\":switch(S=j[p++]){case"b":x.push(u.wordBoundary());break;case"B":x.push(u.nonWordBoundary());break;case"w":x.push(f.words());break;case"W":x.push(f.notWords());break;case"d":x.push(f.ints());break;case"D":x.push(f.notInts());break;case"s":x.push(f.whitespace());break;case"S":x.push(f.notWhitespace());break;default:/\d/.test(S)?x.push({type:a.REFERENCE,value:parseInt(S,10)}):x.push({type:a.CHAR,value:S.charCodeAt(0)})}break;case"^":x.push(u.begin());break;case"$":x.push(u.end());break;case"[":var q;"^"===j[p]?(q=!0,p++):q=!1;var ue=r.tokenizeClass(j.slice(p),e);p+=ue[1],x.push({type:a.SET,set:ue[0],not:q});break;case".":x.push(f.anyChar());break;case"(":var re={type:a.GROUP,stack:[],remember:!0};"?"===(S=j[p])&&(S=j[p+1],p+=2,"="===S?re.followedBy=!0:"!"===S?re.notFollowedBy=!0:":"!==S&&r.error(e,`Invalid group, character '${S}' after '?' at column ${p-1}`),re.remember=!1),x.push(re),B.push(w),w=re,x=re.stack;break;case")":0===B.length&&r.error(e,"Unmatched ) at column "+(p-1)),x=(w=B.pop()).options?w.options[w.options.length-1]:w.stack;break;case"|":w.options||(w.options=[w.stack],delete w.stack);var H=[];w.options.push(H),x=H;break;case"{":var ae,ie,se=/^(\d+)(,(\d+)?)?\}/.exec(j.slice(p));null!==se?(0===x.length&&W(p),ae=parseInt(se[1],10),ie=se[2]?se[3]?parseInt(se[3],10):1/0:ae,p+=se[0].length,x.push({type:a.REPETITION,min:ae,max:ie,value:x.pop()})):x.push({type:a.CHAR,value:123});break;case"?":0===x.length&&W(p),x.push({type:a.REPETITION,min:0,max:1,value:x.pop()});break;case"+":0===x.length&&W(p),x.push({type:a.REPETITION,min:1,max:1/0,value:x.pop()});break;case"*":0===x.length&&W(p),x.push({type:a.REPETITION,min:0,max:1/0,value:x.pop()});break;default:x.push({type:a.CHAR,value:S.charCodeAt(0)})}return 0!==B.length&&r.error(e,"Unterminated group"),M},v.exports.types=a},45899:(v,b,i)=>{const r=i(29394);b.wordBoundary=()=>({type:r.POSITION,value:"b"}),b.nonWordBoundary=()=>({type:r.POSITION,value:"B"}),b.begin=()=>({type:r.POSITION,value:"^"}),b.end=()=>({type:r.POSITION,value:"$"})},87931:(v,b,i)=>{const r=i(29394),a=()=>[{type:r.RANGE,from:48,to:57}],f=()=>[{type:r.CHAR,value:95},{type:r.RANGE,from:97,to:122},{type:r.RANGE,from:65,to:90}].concat(a()),u=()=>[{type:r.CHAR,value:9},{type:r.CHAR,value:10},{type:r.CHAR,value:11},{type:r.CHAR,value:12},{type:r.CHAR,value:13},{type:r.CHAR,value:32},{type:r.CHAR,value:160},{type:r.CHAR,value:5760},{type:r.RANGE,from:8192,to:8202},{type:r.CHAR,value:8232},{type:r.CHAR,value:8233},{type:r.CHAR,value:8239},{type:r.CHAR,value:8287},{type:r.CHAR,value:12288},{type:r.CHAR,value:65279}];b.words=()=>({type:r.SET,set:f(),not:!1}),b.notWords=()=>({type:r.SET,set:f(),not:!0}),b.ints=()=>({type:r.SET,set:a(),not:!1}),b.notInts=()=>({type:r.SET,set:a(),not:!0}),b.whitespace=()=>({type:r.SET,set:u(),not:!1}),b.notWhitespace=()=>({type:r.SET,set:u(),not:!0}),b.anyChar=()=>({type:r.SET,set:[{type:r.CHAR,value:10},{type:r.CHAR,value:13},{type:r.CHAR,value:8232},{type:r.CHAR,value:8233}],not:!0})},29394:v=>{v.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},18514:(v,b,i)=>{const r=i(29394),a=i(87931),u={0:0,t:9,n:10,v:11,f:12,r:13};b.strToChars=function(e){return e.replace(/(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\]^?])|([0tnvfr]))/g,function(g,S,M,w,x,B,W,j){if(M)return g;var q=S?8:w?parseInt(w,16):x?parseInt(x,16):B?parseInt(B,8):W?"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?".indexOf(W):u[j],ue=String.fromCharCode(q);return/[[\]{}^$.|?*+()]/.test(ue)&&(ue="\\"+ue),ue})},b.tokenizeClass=(e,p)=>{for(var M,w,g=[],S=/\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?([^])/g;null!=(M=S.exec(e));)if(M[1])g.push(a.words());else if(M[2])g.push(a.ints());else if(M[3])g.push(a.whitespace());else if(M[4])g.push(a.notWords());else if(M[5])g.push(a.notInts());else if(M[6])g.push(a.notWhitespace());else if(M[7])g.push({type:r.RANGE,from:(M[8]||M[9]).charCodeAt(0),to:M[10].charCodeAt(0)});else{if(!(w=M[12]))return[g,S.lastIndex];g.push({type:r.CHAR,value:w.charCodeAt(0)})}b.error(p,"Unterminated character class")},b.error=(e,p)=>{throw new SyntaxError("Invalid regular expression: /"+e+"/: "+p)}},26215:(v,b,i)=>{"use strict";i.d(b,{X:()=>f});var r=i(79765),a=i(77971);class f extends r.xQ{constructor(e){super(),this._value=e}get value(){return this.getValue()}_subscribe(e){const p=super._subscribe(e);return p&&!p.closed&&e.next(this._value),p}getValue(){if(this.hasError)throw this.thrownError;if(this.closed)throw new a.N;return this._value}next(e){super.next(this._value=e)}}},23098:(v,b,i)=>{"use strict";i.d(b,{P:()=>e});var r=i(59193),a=i(25917),f=i(40205);class e{constructor(g,S,M){this.kind=g,this.value=S,this.error=M,this.hasValue="N"===g}observe(g){switch(this.kind){case"N":return g.next&&g.next(this.value);case"E":return g.error&&g.error(this.error);case"C":return g.complete&&g.complete()}}do(g,S,M){switch(this.kind){case"N":return g&&g(this.value);case"E":return S&&S(this.error);case"C":return M&&M()}}accept(g,S,M){return g&&"function"==typeof g.next?this.observe(g):this.do(g,S,M)}toObservable(){switch(this.kind){case"N":return(0,a.of)(this.value);case"E":return(0,f._)(this.error);case"C":return(0,r.c)()}throw new Error("unexpected notification kind value")}static createNext(g){return void 0!==g?new e("N",g):e.undefinedValueNotification}static createError(g){return new e("E",void 0,g)}static createComplete(){return e.completeNotification}}e.completeNotification=new e("C"),e.undefinedValueNotification=new e("N",void 0)},70882:(v,b,i)=>{"use strict";i.d(b,{y:()=>M});var r=i(77393),f=i(29181),u=i(46490),p=i(16554),g=i(34022),S=i(82494);let M=(()=>{class x{constructor(W){this._isScalar=!1,W&&(this._subscribe=W)}lift(W){const j=new x;return j.source=this,j.operator=W,j}subscribe(W,j,q){const{operator:ue}=this,re=function e(x,B,W){if(x){if(x instanceof r.L)return x;if(x[f.b])return x[f.b]()}return x||B||W?new r.L(x,B,W):new r.L(u.c)}(W,j,q);if(re.add(ue?ue.call(re,this.source):this.source||S.v.useDeprecatedSynchronousErrorHandling&&!re.syncErrorThrowable?this._subscribe(re):this._trySubscribe(re)),S.v.useDeprecatedSynchronousErrorHandling&&re.syncErrorThrowable&&(re.syncErrorThrowable=!1,re.syncErrorThrown))throw re.syncErrorValue;return re}_trySubscribe(W){try{return this._subscribe(W)}catch(j){S.v.useDeprecatedSynchronousErrorHandling&&(W.syncErrorThrown=!0,W.syncErrorValue=j),function a(x){for(;x;){const{closed:B,destination:W,isStopped:j}=x;if(B||j)return!1;x=W&&W instanceof r.L?W:null}return!0}(W)?W.error(j):console.warn(j)}}forEach(W,j){return new(j=w(j))((q,ue)=>{let re;re=this.subscribe(H=>{try{W(H)}catch(se){ue(se),re&&re.unsubscribe()}},ue,q)})}_subscribe(W){const{source:j}=this;return j&&j.subscribe(W)}[p.L](){return this}pipe(...W){return 0===W.length?this:(0,g.U)(W)(this)}toPromise(W){return new(W=w(W))((j,q)=>{let ue;this.subscribe(re=>ue=re,re=>q(re),()=>j(ue))})}}return x.create=B=>new x(B),x})();function w(x){if(x||(x=S.v.Promise||Promise),!x)throw new Error("no Promise impl found");return x}},46490:(v,b,i)=>{"use strict";i.d(b,{c:()=>f});var r=i(82494),a=i(54449);const f={closed:!0,next(u){},error(u){if(r.v.useDeprecatedSynchronousErrorHandling)throw u;(0,a.z)(u)},complete(){}}},55197:(v,b,i)=>{"use strict";i.d(b,{L:()=>a});var r=i(77393);class a extends r.L{notifyNext(u,e,p,g,S){this.destination.next(e)}notifyError(u,e){this.destination.error(u)}notifyComplete(u){this.destination.complete()}}},7357:(v,b,i)=>{"use strict";i.d(b,{t:()=>B});var r=i(79765),a=i(23989),u=i(46493);const g=new class e extends u.v{}(class f extends a.o{constructor(q,ue){super(q,ue),this.scheduler=q,this.work=ue}schedule(q,ue=0){return ue>0?super.schedule(q,ue):(this.delay=ue,this.state=q,this.scheduler.flush(this),this)}execute(q,ue){return ue>0||this.closed?super.execute(q,ue):this._execute(q,ue)}requestAsyncId(q,ue,re=0){return null!==re&&re>0||null===re&&this.delay>0?super.requestAsyncId(q,ue,re):q.flush(this)}});var S=i(13464),M=i(59746),w=i(77971),x=i(78858);class B extends r.xQ{constructor(q=Number.POSITIVE_INFINITY,ue=Number.POSITIVE_INFINITY,re){super(),this.scheduler=re,this._events=[],this._infiniteTimeWindow=!1,this._bufferSize=q<1?1:q,this._windowTime=ue<1?1:ue,ue===Number.POSITIVE_INFINITY?(this._infiniteTimeWindow=!0,this.next=this.nextInfiniteTimeWindow):this.next=this.nextTimeWindow}nextInfiniteTimeWindow(q){if(!this.isStopped){const ue=this._events;ue.push(q),ue.length>this._bufferSize&&ue.shift()}super.next(q)}nextTimeWindow(q){this.isStopped||(this._events.push(new W(this._getNow(),q)),this._trimBufferThenGetEvents()),super.next(q)}_subscribe(q){const ue=this._infiniteTimeWindow,re=ue?this._events:this._trimBufferThenGetEvents(),H=this.scheduler,se=re.length;let ae;if(this.closed)throw new w.N;if(this.isStopped||this.hasError?ae=S.w.EMPTY:(this.observers.push(q),ae=new x.W(this,q)),H&&q.add(q=new M.ht(q,H)),ue)for(let ie=0;ie<se&&!q.closed;ie++)q.next(re[ie]);else for(let ie=0;ie<se&&!q.closed;ie++)q.next(re[ie].value);return this.hasError?q.error(this.thrownError):this.isStopped&&q.complete(),ae}_getNow(){return(this.scheduler||g).now()}_trimBufferThenGetEvents(){const q=this._getNow(),ue=this._bufferSize,re=this._windowTime,H=this._events,se=H.length;let ae=0;for(;ae<se&&!(q-H[ae].time<re);)ae++;return se>ue&&(ae=Math.max(ae,se-ue)),ae>0&&H.splice(0,ae),H}}class W{constructor(q,ue){this.time=q,this.value=ue}}},79765:(v,b,i)=>{"use strict";i.d(b,{Yc:()=>g,xQ:()=>S});var r=i(70882),a=i(77393),f=i(13464),u=i(77971),e=i(78858),p=i(29181);class g extends a.L{constructor(x){super(x),this.destination=x}}let S=(()=>{class w extends r.y{constructor(){super(),this.observers=[],this.closed=!1,this.isStopped=!1,this.hasError=!1,this.thrownError=null}[p.b](){return new g(this)}lift(B){const W=new M(this,this);return W.operator=B,W}next(B){if(this.closed)throw new u.N;if(!this.isStopped){const{observers:W}=this,j=W.length,q=W.slice();for(let ue=0;ue<j;ue++)q[ue].next(B)}}error(B){if(this.closed)throw new u.N;this.hasError=!0,this.thrownError=B,this.isStopped=!0;const{observers:W}=this,j=W.length,q=W.slice();for(let ue=0;ue<j;ue++)q[ue].error(B);this.observers.length=0}complete(){if(this.closed)throw new u.N;this.isStopped=!0;const{observers:B}=this,W=B.length,j=B.slice();for(let q=0;q<W;q++)j[q].complete();this.observers.length=0}unsubscribe(){this.isStopped=!0,this.closed=!0,this.observers=null}_trySubscribe(B){if(this.closed)throw new u.N;return super._trySubscribe(B)}_subscribe(B){if(this.closed)throw new u.N;return this.hasError?(B.error(this.thrownError),f.w.EMPTY):this.isStopped?(B.complete(),f.w.EMPTY):(this.observers.push(B),new e.W(this,B))}asObservable(){const B=new r.y;return B.source=this,B}}return w.create=(x,B)=>new M(x,B),w})();class M extends S{constructor(x,B){super(),this.destination=x,this.source=B}next(x){const{destination:B}=this;B&&B.next&&B.next(x)}error(x){const{destination:B}=this;B&&B.error&&this.destination.error(x)}complete(){const{destination:x}=this;x&&x.complete&&this.destination.complete()}_subscribe(x){const{source:B}=this;return B?this.source.subscribe(x):f.w.EMPTY}}},78858:(v,b,i)=>{"use strict";i.d(b,{W:()=>a});var r=i(13464);class a extends r.w{constructor(u,e){super(),this.subject=u,this.subscriber=e,this.closed=!1}unsubscribe(){if(this.closed)return;this.closed=!0;const u=this.subject,e=u.observers;if(this.subject=null,!e||0===e.length||u.isStopped||u.closed)return;const p=e.indexOf(this.subscriber);-1!==p&&e.splice(p,1)}}},77393:(v,b,i)=>{"use strict";i.d(b,{L:()=>g});var r=i(69105),a=i(46490),f=i(13464),u=i(29181),e=i(82494),p=i(54449);class g extends f.w{constructor(w,x,B){switch(super(),this.syncErrorValue=null,this.syncErrorThrown=!1,this.syncErrorThrowable=!1,this.isStopped=!1,arguments.length){case 0:this.destination=a.c;break;case 1:if(!w){this.destination=a.c;break}if("object"==typeof w){w instanceof g?(this.syncErrorThrowable=w.syncErrorThrowable,this.destination=w,w.add(this)):(this.syncErrorThrowable=!0,this.destination=new S(this,w));break}default:this.syncErrorThrowable=!0,this.destination=new S(this,w,x,B)}}[u.b](){return this}static create(w,x,B){const W=new g(w,x,B);return W.syncErrorThrowable=!1,W}next(w){this.isStopped||this._next(w)}error(w){this.isStopped||(this.isStopped=!0,this._error(w))}complete(){this.isStopped||(this.isStopped=!0,this._complete())}unsubscribe(){this.closed||(this.isStopped=!0,super.unsubscribe())}_next(w){this.destination.next(w)}_error(w){this.destination.error(w),this.unsubscribe()}_complete(){this.destination.complete(),this.unsubscribe()}_unsubscribeAndRecycle(){const{_parentOrParents:w}=this;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=w,this}}class S extends g{constructor(w,x,B,W){super(),this._parentSubscriber=w;let j,q=this;(0,r.m)(x)?j=x:x&&(j=x.next,B=x.error,W=x.complete,x!==a.c&&(q=Object.create(x),(0,r.m)(q.unsubscribe)&&this.add(q.unsubscribe.bind(q)),q.unsubscribe=this.unsubscribe.bind(this))),this._context=q,this._next=j,this._error=B,this._complete=W}next(w){if(!this.isStopped&&this._next){const{_parentSubscriber:x}=this;e.v.useDeprecatedSynchronousErrorHandling&&x.syncErrorThrowable?this.__tryOrSetError(x,this._next,w)&&this.unsubscribe():this.__tryOrUnsub(this._next,w)}}error(w){if(!this.isStopped){const{_parentSubscriber:x}=this,{useDeprecatedSynchronousErrorHandling:B}=e.v;if(this._error)B&&x.syncErrorThrowable?(this.__tryOrSetError(x,this._error,w),this.unsubscribe()):(this.__tryOrUnsub(this._error,w),this.unsubscribe());else if(x.syncErrorThrowable)B?(x.syncErrorValue=w,x.syncErrorThrown=!0):(0,p.z)(w),this.unsubscribe();else{if(this.unsubscribe(),B)throw w;(0,p.z)(w)}}}complete(){if(!this.isStopped){const{_parentSubscriber:w}=this;if(this._complete){const x=()=>this._complete.call(this._context);e.v.useDeprecatedSynchronousErrorHandling&&w.syncErrorThrowable?(this.__tryOrSetError(w,x),this.unsubscribe()):(this.__tryOrUnsub(x),this.unsubscribe())}else this.unsubscribe()}}__tryOrUnsub(w,x){try{w.call(this._context,x)}catch(B){if(this.unsubscribe(),e.v.useDeprecatedSynchronousErrorHandling)throw B;(0,p.z)(B)}}__tryOrSetError(w,x,B){if(!e.v.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{x.call(this._context,B)}catch(W){return e.v.useDeprecatedSynchronousErrorHandling?(w.syncErrorValue=W,w.syncErrorThrown=!0,!0):((0,p.z)(W),!0)}return!1}_unsubscribe(){const{_parentSubscriber:w}=this;this._context=null,this._parentSubscriber=null,w.unsubscribe()}}},13464:(v,b,i)=>{"use strict";i.d(b,{w:()=>p});var r=i(59796),a=i(81555),f=i(69105);const e=(()=>{function S(M){return Error.call(this),this.message=M?`${M.length} errors occurred during unsubscription:\n${M.map((w,x)=>`${x+1}) ${w.toString()}`).join("\n  ")}`:"",this.name="UnsubscriptionError",this.errors=M,this}return S.prototype=Object.create(Error.prototype),S})();class p{constructor(M){this.closed=!1,this._parentOrParents=null,this._subscriptions=null,M&&(this._ctorUnsubscribe=!0,this._unsubscribe=M)}unsubscribe(){let M;if(this.closed)return;let{_parentOrParents:w,_ctorUnsubscribe:x,_unsubscribe:B,_subscriptions:W}=this;if(this.closed=!0,this._parentOrParents=null,this._subscriptions=null,w instanceof p)w.remove(this);else if(null!==w)for(let j=0;j<w.length;++j)w[j].remove(this);if((0,f.m)(B)){x&&(this._unsubscribe=void 0);try{B.call(this)}catch(j){M=j instanceof e?g(j.errors):[j]}}if((0,r.k)(W)){let j=-1,q=W.length;for(;++j<q;){const ue=W[j];if((0,a.K)(ue))try{ue.unsubscribe()}catch(re){M=M||[],re instanceof e?M=M.concat(g(re.errors)):M.push(re)}}}if(M)throw new e(M)}add(M){let w=M;if(!M)return p.EMPTY;switch(typeof M){case"function":w=new p(M);case"object":if(w===this||w.closed||"function"!=typeof w.unsubscribe)return w;if(this.closed)return w.unsubscribe(),w;if(!(w instanceof p)){const W=w;w=new p,w._subscriptions=[W]}break;default:throw new Error("unrecognized teardown "+M+" added to Subscription.")}let{_parentOrParents:x}=w;if(null===x)w._parentOrParents=this;else if(x instanceof p){if(x===this)return w;w._parentOrParents=[x,this]}else{if(-1!==x.indexOf(this))return w;x.push(this)}const B=this._subscriptions;return null===B?this._subscriptions=[w]:B.push(w),w}remove(M){const w=this._subscriptions;if(w){const x=w.indexOf(M);-1!==x&&w.splice(x,1)}}}var S;function g(S){return S.reduce((M,w)=>M.concat(w instanceof e?w.errors:w),[])}p.EMPTY=((S=new p).closed=!0,S)},82494:(v,b,i)=>{"use strict";i.d(b,{v:()=>a});let r=!1;const a={Promise:void 0,set useDeprecatedSynchronousErrorHandling(f){if(f){const u=new Error;console.warn("DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n"+u.stack)}else r&&console.log("RxJS: Back to a better error behavior. Thank you. <3");r=f},get useDeprecatedSynchronousErrorHandling(){return r}}},85345:(v,b,i)=>{"use strict";i.d(b,{Ds:()=>p,IY:()=>u,ft:()=>S});var r=i(77393),a=i(70882),f=i(19846);class u extends r.L{constructor(w){super(),this.parent=w}_next(w){this.parent.notifyNext(w)}_error(w){this.parent.notifyError(w),this.unsubscribe()}_complete(){this.parent.notifyComplete(),this.unsubscribe()}}class p extends r.L{notifyNext(w){this.destination.next(w)}notifyError(w){this.destination.error(w)}notifyComplete(){this.destination.complete()}}function S(M,w){if(!w.closed)return M instanceof a.y?M.subscribe(w):(0,f.s)(M)(w)}},52441:(v,b,i)=>{"use strict";i.d(b,{N:()=>p,c:()=>e});var r=i(79765),a=i(70882),f=i(13464),u=i(51307);class e extends a.y{constructor(x,B){super(),this.source=x,this.subjectFactory=B,this._refCount=0,this._isComplete=!1}_subscribe(x){return this.getSubject().subscribe(x)}getSubject(){const x=this._subject;return(!x||x.isStopped)&&(this._subject=this.subjectFactory()),this._subject}connect(){let x=this._connection;return x||(this._isComplete=!1,x=this._connection=new f.w,x.add(this.source.subscribe(new g(this.getSubject(),this))),x.closed&&(this._connection=null,x=f.w.EMPTY)),x}refCount(){return(0,u.x)()(this)}}const p=(()=>{const w=e.prototype;return{operator:{value:null},_refCount:{value:0,writable:!0},_subject:{value:null,writable:!0},_connection:{value:null,writable:!0},_subscribe:{value:w._subscribe},_isComplete:{value:w._isComplete,writable:!0},getSubject:{value:w.getSubject},connect:{value:w.connect},refCount:{value:w.refCount}}})();class g extends r.Yc{constructor(x,B){super(x),this.connectable=B}_error(x){this._unsubscribe(),super._error(x)}_complete(){this.connectable._isComplete=!0,this._unsubscribe(),super._complete()}_unsubscribe(){const x=this.connectable;if(x){this.connectable=null;const B=x._connection;x._refCount=0,x._subject=null,x._connection=null,B&&B.unsubscribe()}}}},9112:(v,b,i)=>{"use strict";i.d(b,{aj:()=>g});var r=i(54869),a=i(59796),f=i(55197),u=i(53960),e=i(56693);const p={};function g(...w){let x,B;return(0,r.K)(w[w.length-1])&&(B=w.pop()),"function"==typeof w[w.length-1]&&(x=w.pop()),1===w.length&&(0,a.k)(w[0])&&(w=w[0]),(0,e.n)(w,B).lift(new S(x))}class S{constructor(x){this.resultSelector=x}call(x,B){return B.subscribe(new M(x,this.resultSelector))}}class M extends f.L{constructor(x,B){super(x),this.resultSelector=B,this.active=0,this.values=[],this.observables=[]}_next(x){this.values.push(p),this.observables.push(x)}_complete(){const x=this.observables,B=x.length;if(0===B)this.destination.complete();else{this.active=B,this.toRespond=B;for(let W=0;W<B;W++)this.add((0,u.D)(this,x[W],void 0,W))}}notifyComplete(x){0==(this.active-=1)&&this.destination.complete()}notifyNext(x,B,W){const j=this.values,ue=this.toRespond?j[W]===p?--this.toRespond:this.toRespond:0;j[W]=B,0===ue&&(this.resultSelector?this._tryResultSelector(j):this.destination.next(j.slice()))}_tryResultSelector(x){let B;try{B=this.resultSelector.apply(this,x)}catch(W){return void this.destination.error(W)}this.destination.next(B)}}},6481:(v,b,i)=>{"use strict";i.d(b,{z:()=>u});var r=i(25917),a=i(63282);function u(...e){return function f(){return(0,a.J)(1)}()((0,r.of)(...e))}},59193:(v,b,i)=>{"use strict";i.d(b,{E:()=>a,c:()=>f});var r=i(70882);const a=new r.y(e=>e.complete());function f(e){return e?function u(e){return new r.y(p=>e.schedule(()=>p.complete()))}(e):a}},35758:(v,b,i)=>{"use strict";i.d(b,{D:()=>p});var r=i(70882),a=i(59796),f=i(88002),u=i(81555),e=i(76666);function p(...S){if(1===S.length){const M=S[0];if((0,a.k)(M))return g(M,null);if((0,u.K)(M)&&Object.getPrototypeOf(M)===Object.prototype){const w=Object.keys(M);return g(w.map(x=>M[x]),w)}}if("function"==typeof S[S.length-1]){const M=S.pop();return g(S=1===S.length&&(0,a.k)(S[0])?S[0]:S,null).pipe((0,f.U)(w=>M(...w)))}return g(S,null)}function g(S,M){return new r.y(w=>{const x=S.length;if(0===x)return void w.complete();const B=new Array(x);let W=0,j=0;for(let q=0;q<x;q++){const ue=(0,e.D)(S[q]);let re=!1;w.add(ue.subscribe({next:H=>{re||(re=!0,j++),B[q]=H},error:H=>w.error(H),complete:()=>{W++,(W===x||!re)&&(j===x&&w.next(M?M.reduce((H,se,ae)=>(H[se]=B[ae],H),{}):B),w.complete())}}))}})}},76666:(v,b,i)=>{"use strict";i.d(b,{D:()=>q});var r=i(70882),a=i(19846),f=i(13464),u=i(16554),g=i(94087),S=i(20377),x=i(44072),B=i(69489);function q(ue,re){return re?function j(ue,re){if(null!=ue){if(function w(ue){return ue&&"function"==typeof ue[u.L]}(ue))return function e(ue,re){return new r.y(H=>{const se=new f.w;return se.add(re.schedule(()=>{const ae=ue[u.L]();se.add(ae.subscribe({next(ie){se.add(re.schedule(()=>H.next(ie)))},error(ie){se.add(re.schedule(()=>H.error(ie)))},complete(){se.add(re.schedule(()=>H.complete()))}}))})),se})}(ue,re);if((0,x.t)(ue))return function p(ue,re){return new r.y(H=>{const se=new f.w;return se.add(re.schedule(()=>ue.then(ae=>{se.add(re.schedule(()=>{H.next(ae),se.add(re.schedule(()=>H.complete()))}))},ae=>{se.add(re.schedule(()=>H.error(ae)))}))),se})}(ue,re);if((0,B.z)(ue))return(0,g.r)(ue,re);if(function W(ue){return ue&&"function"==typeof ue[S.hZ]}(ue)||"string"==typeof ue)return function M(ue,re){if(!ue)throw new Error("Iterable cannot be null");return new r.y(H=>{const se=new f.w;let ae;return se.add(()=>{ae&&"function"==typeof ae.return&&ae.return()}),se.add(re.schedule(()=>{ae=ue[S.hZ](),se.add(re.schedule(function(){if(H.closed)return;let ie,fe;try{const he=ae.next();ie=he.value,fe=he.done}catch(he){return void H.error(he)}fe?H.complete():(H.next(ie),this.schedule())}))})),se})}(ue,re)}throw new TypeError((null!==ue&&typeof ue||ue)+" is not observable")}(ue,re):ue instanceof r.y?ue:new r.y((0,a.s)(ue))}},56693:(v,b,i)=>{"use strict";i.d(b,{n:()=>u});var r=i(70882),a=i(55015),f=i(94087);function u(e,p){return p?(0,f.r)(e,p):new r.y((0,a.V)(e))}},22759:(v,b,i)=>{"use strict";i.d(b,{R:()=>p});var r=i(70882),a=i(59796),f=i(69105),u=i(88002);function p(x,B,W,j){return(0,f.m)(W)&&(j=W,W=void 0),j?p(x,B,W).pipe((0,u.U)(q=>(0,a.k)(q)?j(...q):j(q))):new r.y(q=>{g(x,B,function ue(re){q.next(arguments.length>1?Array.prototype.slice.call(arguments):re)},q,W)})}function g(x,B,W,j,q){let ue;if(function w(x){return x&&"function"==typeof x.addEventListener&&"function"==typeof x.removeEventListener}(x)){const re=x;x.addEventListener(B,W,q),ue=()=>re.removeEventListener(B,W,q)}else if(function M(x){return x&&"function"==typeof x.on&&"function"==typeof x.off}(x)){const re=x;x.on(B,W),ue=()=>re.off(B,W)}else if(function S(x){return x&&"function"==typeof x.addListener&&"function"==typeof x.removeListener}(x)){const re=x;x.addListener(B,W),ue=()=>re.removeListener(B,W)}else{if(!x||!x.length)throw new TypeError("Invalid event target");for(let re=0,H=x.length;re<H;re++)g(x[re],B,W,j,q)}j.add(ue)}},66682:(v,b,i)=>{"use strict";i.d(b,{T:()=>e});var r=i(70882),a=i(54869),f=i(63282),u=i(56693);function e(...p){let g=Number.POSITIVE_INFINITY,S=null,M=p[p.length-1];return(0,a.K)(M)?(S=p.pop(),p.length>1&&"number"==typeof p[p.length-1]&&(g=p.pop())):"number"==typeof M&&(g=p.pop()),null===S&&1===p.length&&p[0]instanceof r.y?p[0]:(0,f.J)(g)((0,u.n)(p,S))}},17757:(v,b,i)=>{"use strict";i.d(b,{C:()=>f});var r=i(70882),a=i(98640);const f=new r.y(a.Z)},25917:(v,b,i)=>{"use strict";i.d(b,{of:()=>u});var r=i(54869),a=i(56693),f=i(94087);function u(...e){let p=e[e.length-1];return(0,r.K)(p)?(e.pop(),(0,f.r)(e,p)):(0,a.n)(e)}},40205:(v,b,i)=>{"use strict";i.d(b,{_:()=>a});var r=i(70882);function a(u,e){return new r.y(e?p=>e.schedule(f,0,{error:u,subscriber:p}):p=>p.error(u))}function f({error:u,subscriber:e}){e.error(u)}},46797:(v,b,i)=>{"use strict";i.d(b,{H:()=>e});var r=i(70882),a=i(33637),f=i(26561),u=i(54869);function e(g=0,S,M){let w=-1;return(0,f.k)(S)?w=Number(S)<1?1:Number(S):(0,u.K)(S)&&(M=S),(0,u.K)(M)||(M=a.P),new r.y(x=>{const B=(0,f.k)(g)?g:+g-M.now();return M.schedule(p,B,{index:0,period:w,subscriber:x})})}function p(g){const{index:S,period:M,subscriber:w}=g;if(w.next(S),!w.closed){if(-1===M)return w.complete();g.index=S+1,this.schedule(g,M)}}},5304:(v,b,i)=>{"use strict";i.d(b,{K:()=>a});var r=i(85345);function a(e){return function(g){const S=new f(e),M=g.lift(S);return S.caught=M}}class f{constructor(p){this.selector=p}call(p,g){return g.subscribe(new u(p,this.selector,this.caught))}}class u extends r.Ds{constructor(p,g,S){super(p),this.selector=g,this.caught=S}error(p){if(!this.isStopped){let g;try{g=this.selector(p,this.caught)}catch(w){return void super.error(w)}this._unsubscribeAndRecycle();const S=new r.IY(this);this.add(S);const M=(0,r.ft)(g,S);M!==S&&this.add(M)}}}},94612:(v,b,i)=>{"use strict";i.d(b,{b:()=>a});var r=i(19773);function a(f,u){return(0,r.zg)(f,u,1)}},54395:(v,b,i)=>{"use strict";i.d(b,{b:()=>f});var r=i(77393),a=i(33637);function f(g,S=a.P){return M=>M.lift(new u(g,S))}class u{constructor(S,M){this.dueTime=S,this.scheduler=M}call(S,M){return M.subscribe(new e(S,this.dueTime,this.scheduler))}}class e extends r.L{constructor(S,M,w){super(S),this.dueTime=M,this.scheduler=w,this.debouncedSubscription=null,this.lastValue=null,this.hasValue=!1}_next(S){this.clearDebounce(),this.lastValue=S,this.hasValue=!0,this.add(this.debouncedSubscription=this.scheduler.schedule(p,this.dueTime,this))}_complete(){this.debouncedNext(),this.destination.complete()}debouncedNext(){if(this.clearDebounce(),this.hasValue){const{lastValue:S}=this;this.lastValue=null,this.hasValue=!1,this.destination.next(S)}}clearDebounce(){const S=this.debouncedSubscription;null!==S&&(this.remove(S),S.unsubscribe(),this.debouncedSubscription=null)}}function p(g){g.debouncedNext()}},95242:(v,b,i)=>{"use strict";i.d(b,{d:()=>a});var r=i(77393);function a(e=null){return p=>p.lift(new f(e))}class f{constructor(p){this.defaultValue=p}call(p,g){return g.subscribe(new u(p,this.defaultValue))}}class u extends r.L{constructor(p,g){super(p),this.defaultValue=g,this.isEmpty=!0}_next(p){this.isEmpty=!1,this.destination.next(p)}_complete(){this.isEmpty&&this.destination.next(this.defaultValue),this.destination.complete()}}},67460:(v,b,i)=>{"use strict";i.d(b,{g:()=>e});var r=i(33637),f=i(77393),u=i(23098);function e(M,w=r.P){const B=function a(M){return M instanceof Date&&!isNaN(+M)}(M)?+M-w.now():Math.abs(M);return W=>W.lift(new p(B,w))}class p{constructor(w,x){this.delay=w,this.scheduler=x}call(w,x){return x.subscribe(new g(w,this.delay,this.scheduler))}}class g extends f.L{constructor(w,x,B){super(w),this.delay=x,this.scheduler=B,this.queue=[],this.active=!1,this.errored=!1}static dispatch(w){const x=w.source,B=x.queue,W=w.scheduler,j=w.destination;for(;B.length>0&&B[0].time-W.now()<=0;)B.shift().notification.observe(j);if(B.length>0){const q=Math.max(0,B[0].time-W.now());this.schedule(w,q)}else this.unsubscribe(),x.active=!1}_schedule(w){this.active=!0,this.destination.add(w.schedule(g.dispatch,this.delay,{source:this,destination:this.destination,scheduler:w}))}scheduleNotification(w){if(!0===this.errored)return;const x=this.scheduler,B=new S(x.now()+this.delay,w);this.queue.push(B),!1===this.active&&this._schedule(x)}_next(w){this.scheduleNotification(u.P.createNext(w))}_error(w){this.errored=!0,this.queue=[],this.destination.error(w),this.unsubscribe()}_complete(){this.scheduleNotification(u.P.createComplete()),this.unsubscribe()}}class S{constructor(w,x){this.time=w,this.notification=x}}},87519:(v,b,i)=>{"use strict";i.d(b,{x:()=>a});var r=i(77393);function a(e,p){return g=>g.lift(new f(e,p))}class f{constructor(p,g){this.compare=p,this.keySelector=g}call(p,g){return g.subscribe(new u(p,this.compare,this.keySelector))}}class u extends r.L{constructor(p,g,S){super(p),this.keySelector=S,this.hasKey=!1,"function"==typeof g&&(this.compare=g)}compare(p,g){return p===g}_next(p){let g;try{const{keySelector:M}=this;g=M?M(p):p}catch(M){return this.destination.error(M)}let S=!1;if(this.hasKey)try{const{compare:M}=this;S=M(this.key,g)}catch(M){return this.destination.error(M)}else this.hasKey=!0;S||(this.key=g,this.destination.next(p))}}},45435:(v,b,i)=>{"use strict";i.d(b,{h:()=>a});var r=i(77393);function a(e,p){return function(S){return S.lift(new f(e,p))}}class f{constructor(p,g){this.predicate=p,this.thisArg=g}call(p,g){return g.subscribe(new u(p,this.predicate,this.thisArg))}}class u extends r.L{constructor(p,g,S){super(p),this.predicate=g,this.thisArg=S,this.count=0}_next(p){let g;try{g=this.predicate.call(this.thisArg,p,this.count++)}catch(S){return void this.destination.error(S)}g&&this.destination.next(p)}}},68939:(v,b,i)=>{"use strict";i.d(b,{x:()=>f});var r=i(77393),a=i(13464);function f(p){return g=>g.lift(new u(p))}class u{constructor(g){this.callback=g}call(g,S){return S.subscribe(new e(g,this.callback))}}class e extends r.L{constructor(g,S){super(g),this.add(new a.w(S))}}},28049:(v,b,i)=>{"use strict";i.d(b,{P:()=>g});var r=i(13410),a=i(45435),f=i(15257),u=i(95242),e=i(44635),p=i(54487);function g(S,M){const w=arguments.length>=2;return x=>x.pipe(S?(0,a.h)((B,W)=>S(B,W,x)):p.y,(0,f.q)(1),w?(0,u.d)(M):(0,e.T)(()=>new r.K))}},12627:(v,b,i)=>{"use strict";i.d(b,{Z:()=>g});var r=i(13410),a=i(45435),f=i(548),u=i(44635),e=i(95242),p=i(54487);function g(S,M){const w=arguments.length>=2;return x=>x.pipe(S?(0,a.h)((B,W)=>S(B,W,x)):p.y,(0,f.h)(1),w?(0,e.d)(M):(0,u.T)(()=>new r.K))}},88002:(v,b,i)=>{"use strict";i.d(b,{U:()=>a});var r=i(77393);function a(e,p){return function(S){if("function"!=typeof e)throw new TypeError("argument is not a function. Are you looking for `mapTo()`?");return S.lift(new f(e,p))}}class f{constructor(p,g){this.project=p,this.thisArg=g}call(p,g){return g.subscribe(new u(p,this.project,this.thisArg))}}class u extends r.L{constructor(p,g,S){super(p),this.project=g,this.count=0,this.thisArg=S||this}_next(p){let g;try{g=this.project.call(this.thisArg,p,this.count++)}catch(S){return void this.destination.error(S)}this.destination.next(g)}}},96736:(v,b,i)=>{"use strict";i.d(b,{h:()=>a});var r=i(77393);function a(e){return p=>p.lift(new f(e))}class f{constructor(p){this.value=p}call(p,g){return g.subscribe(new u(p,this.value))}}class u extends r.L{constructor(p,g){super(p),this.value=g}_next(p){this.destination.next(this.value)}}},63282:(v,b,i)=>{"use strict";i.d(b,{J:()=>f});var r=i(19773),a=i(54487);function f(u=Number.POSITIVE_INFINITY){return(0,r.zg)(a.y,u)}},19773:(v,b,i)=>{"use strict";i.d(b,{zg:()=>u});var r=i(88002),a=i(76666),f=i(85345);function u(S,M,w=Number.POSITIVE_INFINITY){return"function"==typeof M?x=>x.pipe(u((B,W)=>(0,a.D)(S(B,W)).pipe((0,r.U)((j,q)=>M(B,j,W,q))),w)):("number"==typeof M&&(w=M),x=>x.lift(new e(S,w)))}class e{constructor(M,w=Number.POSITIVE_INFINITY){this.project=M,this.concurrent=w}call(M,w){return w.subscribe(new p(M,this.project,this.concurrent))}}class p extends f.Ds{constructor(M,w,x=Number.POSITIVE_INFINITY){super(M),this.project=w,this.concurrent=x,this.hasCompleted=!1,this.buffer=[],this.active=0,this.index=0}_next(M){this.active<this.concurrent?this._tryNext(M):this.buffer.push(M)}_tryNext(M){let w;const x=this.index++;try{w=this.project(M,x)}catch(B){return void this.destination.error(B)}this.active++,this._innerSub(w)}_innerSub(M){const w=new f.IY(this),x=this.destination;x.add(w);const B=(0,f.ft)(M,w);B!==w&&x.add(B)}_complete(){this.hasCompleted=!0,0===this.active&&0===this.buffer.length&&this.destination.complete(),this.unsubscribe()}notifyNext(M){this.destination.next(M)}notifyComplete(){const M=this.buffer;this.active--,M.length>0?this._next(M.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()}}},59746:(v,b,i)=>{"use strict";i.d(b,{QV:()=>f,ht:()=>e});var r=i(77393),a=i(23098);function f(g,S=0){return function(w){return w.lift(new u(g,S))}}class u{constructor(S,M=0){this.scheduler=S,this.delay=M}call(S,M){return M.subscribe(new e(S,this.scheduler,this.delay))}}class e extends r.L{constructor(S,M,w=0){super(S),this.scheduler=M,this.delay=w}static dispatch(S){const{notification:M,destination:w}=S;M.observe(w),this.unsubscribe()}scheduleMessage(S){this.destination.add(this.scheduler.schedule(e.dispatch,this.delay,new p(S,this.destination)))}_next(S){this.scheduleMessage(a.P.createNext(S))}_error(S){this.scheduleMessage(a.P.createError(S)),this.unsubscribe()}_complete(){this.scheduleMessage(a.P.createComplete()),this.unsubscribe()}}class p{constructor(S,M){this.notification=S,this.destination=M}}},51307:(v,b,i)=>{"use strict";i.d(b,{x:()=>a});var r=i(77393);function a(){return function(p){return p.lift(new f(p))}}class f{constructor(p){this.connectable=p}call(p,g){const{connectable:S}=this;S._refCount++;const M=new u(p,S),w=g.subscribe(M);return M.closed||(M.connection=S.connect()),w}}class u extends r.L{constructor(p,g){super(p),this.connectable=g}_unsubscribe(){const{connectable:p}=this;if(!p)return void(this.connection=null);this.connectable=null;const g=p._refCount;if(g<=0)return void(this.connection=null);if(p._refCount=g-1,g>1)return void(this.connection=null);const{connection:S}=this,M=p._connection;this.connection=null,M&&(!S||M===S)&&M.unsubscribe()}}},42145:(v,b,i)=>{"use strict";i.d(b,{R:()=>a});var r=i(77393);function a(e,p){let g=!1;return arguments.length>=2&&(g=!0),function(M){return M.lift(new f(e,p,g))}}class f{constructor(p,g,S=!1){this.accumulator=p,this.seed=g,this.hasSeed=S}call(p,g){return g.subscribe(new u(p,this.accumulator,this.seed,this.hasSeed))}}class u extends r.L{constructor(p,g,S,M){super(p),this.accumulator=g,this._seed=S,this.hasSeed=M,this.index=0}get seed(){return this._seed}set seed(p){this.hasSeed=!0,this._seed=p}_next(p){if(this.hasSeed)return this._tryNext(p);this.seed=p,this.destination.next(p)}_tryNext(p){const g=this.index++;let S;try{S=this.accumulator(this.seed,p,g)}catch(M){this.destination.error(M)}this.seed=S,this.destination.next(S)}}},4121:(v,b,i)=>{"use strict";i.d(b,{B:()=>g});var r=i(52441);class f{constructor(M,w){this.subjectFactory=M,this.selector=w}call(M,w){const{selector:x}=this,B=this.subjectFactory(),W=x(B).subscribe(M);return W.add(w.subscribe(B)),W}}var u=i(51307),e=i(79765);function p(){return new e.xQ}function g(){return S=>(0,u.x)()(function a(S,M){return function(x){let B;if(B="function"==typeof S?S:function(){return S},"function"==typeof M)return x.lift(new f(B,M));const W=Object.create(x,r.N);return W.source=x,W.subjectFactory=B,W}}(p)(S))}},47349:(v,b,i)=>{"use strict";i.d(b,{d:()=>a});var r=i(7357);function a(u,e,p){let g;return g=u&&"object"==typeof u?u:{bufferSize:u,windowTime:e,refCount:!1,scheduler:p},S=>S.lift(function f({bufferSize:u=Number.POSITIVE_INFINITY,windowTime:e=Number.POSITIVE_INFINITY,refCount:p,scheduler:g}){let S,w,M=0,x=!1,B=!1;return function(j){let q;M++,!S||x?(x=!1,S=new r.t(u,e,g),q=S.subscribe(this),w=j.subscribe({next(ue){S.next(ue)},error(ue){x=!0,S.error(ue)},complete(){B=!0,w=void 0,S.complete()}})):q=S.subscribe(this),this.add(()=>{M--,q.unsubscribe(),w&&!B&&p&&0===M&&(w.unsubscribe(),w=void 0,S=void 0)})}}(g))}},39761:(v,b,i)=>{"use strict";i.d(b,{O:()=>f});var r=i(6481),a=i(54869);function f(...u){const e=u[u.length-1];return(0,a.K)(e)?(u.pop(),p=>(0,r.z)(u,p,e)):p=>(0,r.z)(u,p)}},43190:(v,b,i)=>{"use strict";i.d(b,{w:()=>u});var r=i(88002),a=i(76666),f=i(85345);function u(g,S){return"function"==typeof S?M=>M.pipe(u((w,x)=>(0,a.D)(g(w,x)).pipe((0,r.U)((B,W)=>S(w,B,x,W))))):M=>M.lift(new e(g))}class e{constructor(S){this.project=S}call(S,M){return M.subscribe(new p(S,this.project))}}class p extends f.Ds{constructor(S,M){super(S),this.project=M,this.index=0}_next(S){let M;const w=this.index++;try{M=this.project(S,w)}catch(x){return void this.destination.error(x)}this._innerSub(M)}_innerSub(S){const M=this.innerSubscription;M&&M.unsubscribe();const w=new f.IY(this),x=this.destination;x.add(w),this.innerSubscription=(0,f.ft)(S,w),this.innerSubscription!==w&&x.add(this.innerSubscription)}_complete(){const{innerSubscription:S}=this;(!S||S.closed)&&super._complete(),this.unsubscribe()}_unsubscribe(){this.innerSubscription=void 0}notifyComplete(){this.innerSubscription=void 0,this.isStopped&&super._complete()}notifyNext(S){this.destination.next(S)}}},15257:(v,b,i)=>{"use strict";i.d(b,{q:()=>u});var r=i(77393),a=i(7108),f=i(59193);function u(g){return S=>0===g?(0,f.c)():S.lift(new e(g))}class e{constructor(S){if(this.total=S,this.total<0)throw new a.W}call(S,M){return M.subscribe(new p(S,this.total))}}class p extends r.L{constructor(S,M){super(S),this.total=M,this.count=0}_next(S){const M=this.total,w=++this.count;w<=M&&(this.destination.next(S),w===M&&(this.destination.complete(),this.unsubscribe()))}}},548:(v,b,i)=>{"use strict";i.d(b,{h:()=>u});var r=i(77393),a=i(7108),f=i(59193);function u(g){return function(M){return 0===g?(0,f.c)():M.lift(new e(g))}}class e{constructor(S){if(this.total=S,this.total<0)throw new a.W}call(S,M){return M.subscribe(new p(S,this.total))}}class p extends r.L{constructor(S,M){super(S),this.total=M,this.ring=new Array,this.count=0}_next(S){const M=this.ring,w=this.total,x=this.count++;M.length<w?M.push(S):M[x%w]=S}_complete(){const S=this.destination;let M=this.count;if(M>0){const w=this.count>=this.total?this.total:this.count,x=this.ring;for(let B=0;B<w;B++){const W=M++%w;S.next(x[W])}}S.complete()}}},46782:(v,b,i)=>{"use strict";i.d(b,{R:()=>a});var r=i(85345);function a(e){return p=>p.lift(new f(e))}class f{constructor(p){this.notifier=p}call(p,g){const S=new u(p),M=(0,r.ft)(this.notifier,new r.IY(S));return M&&!S.seenValue?(S.add(M),g.subscribe(S)):S}}class u extends r.Ds{constructor(p){super(p),this.seenValue=!1}notifyNext(){this.seenValue=!0,this.complete()}notifyComplete(){}}},68307:(v,b,i)=>{"use strict";i.d(b,{b:()=>u});var r=i(77393),a=i(98640),f=i(69105);function u(g,S,M){return function(x){return x.lift(new e(g,S,M))}}class e{constructor(S,M,w){this.nextOrObserver=S,this.error=M,this.complete=w}call(S,M){return M.subscribe(new p(S,this.nextOrObserver,this.error,this.complete))}}class p extends r.L{constructor(S,M,w,x){super(S),this._tapNext=a.Z,this._tapError=a.Z,this._tapComplete=a.Z,this._tapError=w||a.Z,this._tapComplete=x||a.Z,(0,f.m)(M)?(this._context=this,this._tapNext=M):M&&(this._context=M,this._tapNext=M.next||a.Z,this._tapError=M.error||a.Z,this._tapComplete=M.complete||a.Z)}_next(S){try{this._tapNext.call(this._context,S)}catch(M){return void this.destination.error(M)}this.destination.next(S)}_error(S){try{this._tapError.call(this._context,S)}catch(M){return void this.destination.error(M)}this.destination.error(S)}_complete(){try{this._tapComplete.call(this._context)}catch(S){return void this.destination.error(S)}return this.destination.complete()}}},44635:(v,b,i)=>{"use strict";i.d(b,{T:()=>f});var r=i(13410),a=i(77393);function f(g=p){return S=>S.lift(new u(g))}class u{constructor(S){this.errorFactory=S}call(S,M){return M.subscribe(new e(S,this.errorFactory))}}class e extends a.L{constructor(S,M){super(S),this.errorFactory=M,this.hasValue=!1}_next(S){this.hasValue=!0,this.destination.next(S)}_complete(){if(this.hasValue)return this.destination.complete();{let S;try{S=this.errorFactory()}catch(M){S=M}this.destination.error(S)}}}function p(){return new r.K}},94087:(v,b,i)=>{"use strict";i.d(b,{r:()=>f});var r=i(70882),a=i(13464);function f(u,e){return new r.y(p=>{const g=new a.w;let S=0;return g.add(e.schedule(function(){S!==u.length?(p.next(u[S++]),p.closed||g.add(this.schedule())):p.complete()})),g})}},23989:(v,b,i)=>{"use strict";i.d(b,{o:()=>f});var r=i(13464);class a extends r.w{constructor(e,p){super()}schedule(e,p=0){return this}}class f extends a{constructor(e,p){super(e,p),this.scheduler=e,this.work=p,this.pending=!1}schedule(e,p=0){if(this.closed)return this;this.state=e;const g=this.id,S=this.scheduler;return null!=g&&(this.id=this.recycleAsyncId(S,g,p)),this.pending=!0,this.delay=p,this.id=this.id||this.requestAsyncId(S,this.id,p),this}requestAsyncId(e,p,g=0){return setInterval(e.flush.bind(e,this),g)}recycleAsyncId(e,p,g=0){if(null!==g&&this.delay===g&&!1===this.pending)return p;clearInterval(p)}execute(e,p){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;const g=this._execute(e,p);if(g)return g;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))}_execute(e,p){let S,g=!1;try{this.work(e)}catch(M){g=!0,S=!!M&&M||new Error(M)}if(g)return this.unsubscribe(),S}_unsubscribe(){const e=this.id,p=this.scheduler,g=p.actions,S=g.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==S&&g.splice(S,1),null!=e&&(this.id=this.recycleAsyncId(p,e,null)),this.delay=null}}},46493:(v,b,i)=>{"use strict";i.d(b,{v:()=>a});let r=(()=>{class f{constructor(e,p=f.now){this.SchedulerAction=e,this.now=p}schedule(e,p=0,g){return new this.SchedulerAction(this,e).schedule(g,p)}}return f.now=()=>Date.now(),f})();class a extends r{constructor(u,e=r.now){super(u,()=>a.delegate&&a.delegate!==this?a.delegate.now():e()),this.actions=[],this.active=!1,this.scheduled=void 0}schedule(u,e=0,p){return a.delegate&&a.delegate!==this?a.delegate.schedule(u,e,p):super.schedule(u,e,p)}flush(u){const{actions:e}=this;if(this.active)return void e.push(u);let p;this.active=!0;do{if(p=u.execute(u.state,u.delay))break}while(u=e.shift());if(this.active=!1,p){for(;u=e.shift();)u.unsubscribe();throw p}}}},33637:(v,b,i)=>{"use strict";i.d(b,{P:()=>u,z:()=>f});var r=i(23989);const f=new(i(46493).v)(r.o),u=f},20377:(v,b,i)=>{"use strict";i.d(b,{hZ:()=>a});const a=function r(){return"function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"}()},16554:(v,b,i)=>{"use strict";i.d(b,{L:()=>r});const r="function"==typeof Symbol&&Symbol.observable||"@@observable"},29181:(v,b,i)=>{"use strict";i.d(b,{b:()=>r});const r="function"==typeof Symbol?Symbol("rxSubscriber"):"@@rxSubscriber_"+Math.random()},7108:(v,b,i)=>{"use strict";i.d(b,{W:()=>a});const a=(()=>{function f(){return Error.call(this),this.message="argument out of range",this.name="ArgumentOutOfRangeError",this}return f.prototype=Object.create(Error.prototype),f})()},13410:(v,b,i)=>{"use strict";i.d(b,{K:()=>a});const a=(()=>{function f(){return Error.call(this),this.message="no elements in sequence",this.name="EmptyError",this}return f.prototype=Object.create(Error.prototype),f})()},77971:(v,b,i)=>{"use strict";i.d(b,{N:()=>a});const a=(()=>{function f(){return Error.call(this),this.message="object unsubscribed",this.name="ObjectUnsubscribedError",this}return f.prototype=Object.create(Error.prototype),f})()},54449:(v,b,i)=>{"use strict";function r(a){setTimeout(()=>{throw a},0)}i.d(b,{z:()=>r})},54487:(v,b,i)=>{"use strict";function r(a){return a}i.d(b,{y:()=>r})},59796:(v,b,i)=>{"use strict";i.d(b,{k:()=>r});const r=Array.isArray||(a=>a&&"number"==typeof a.length)},69489:(v,b,i)=>{"use strict";i.d(b,{z:()=>r});const r=a=>a&&"number"==typeof a.length&&"function"!=typeof a},69105:(v,b,i)=>{"use strict";function r(a){return"function"==typeof a}i.d(b,{m:()=>r})},26561:(v,b,i)=>{"use strict";i.d(b,{k:()=>a});var r=i(59796);function a(f){return!(0,r.k)(f)&&f-parseFloat(f)+1>=0}},81555:(v,b,i)=>{"use strict";function r(a){return null!==a&&"object"==typeof a}i.d(b,{K:()=>r})},44072:(v,b,i)=>{"use strict";function r(a){return!!a&&"function"!=typeof a.subscribe&&"function"==typeof a.then}i.d(b,{t:()=>r})},54869:(v,b,i)=>{"use strict";function r(a){return a&&"function"==typeof a.schedule}i.d(b,{K:()=>r})},98640:(v,b,i)=>{"use strict";function r(){}i.d(b,{Z:()=>r})},34022:(v,b,i)=>{"use strict";i.d(b,{U:()=>f,z:()=>a});var r=i(54487);function a(...u){return f(u)}function f(u){return 0===u.length?r.y:1===u.length?u[0]:function(p){return u.reduce((g,S)=>S(g),p)}}},19846:(v,b,i)=>{"use strict";i.d(b,{s:()=>x});var r=i(55015),a=i(54449),u=i(20377),p=i(16554),S=i(69489),M=i(44072),w=i(81555);const x=B=>{if(B&&"function"==typeof B[p.L])return(B=>W=>{const j=B[p.L]();if("function"!=typeof j.subscribe)throw new TypeError("Provided object does not correctly implement Symbol.observable");return j.subscribe(W)})(B);if((0,S.z)(B))return(0,r.V)(B);if((0,M.t)(B))return(B=>W=>(B.then(j=>{W.closed||(W.next(j),W.complete())},j=>W.error(j)).then(null,a.z),W))(B);if(B&&"function"==typeof B[u.hZ])return(B=>W=>{const j=B[u.hZ]();for(;;){let q;try{q=j.next()}catch(ue){return W.error(ue),W}if(q.done){W.complete();break}if(W.next(q.value),W.closed)break}return"function"==typeof j.return&&W.add(()=>{j.return&&j.return()}),W})(B);{const j=`You provided ${(0,w.K)(B)?"an invalid object":`'${B}'`} where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.`;throw new TypeError(j)}}},55015:(v,b,i)=>{"use strict";i.d(b,{V:()=>r});const r=a=>f=>{for(let u=0,e=a.length;u<e&&!f.closed;u++)f.next(a[u]);f.complete()}},53960:(v,b,i)=>{"use strict";i.d(b,{D:()=>e});var r=i(77393);class a extends r.L{constructor(g,S,M){super(),this.parent=g,this.outerValue=S,this.outerIndex=M,this.index=0}_next(g){this.parent.notifyNext(this.outerValue,g,this.outerIndex,this.index++,this)}_error(g){this.parent.notifyError(g,this),this.unsubscribe()}_complete(){this.parent.notifyComplete(this),this.unsubscribe()}}var f=i(19846),u=i(70882);function e(p,g,S,M,w=new a(p,S,M)){if(!w.closed)return g instanceof u.y?g.subscribe(w):(0,f.s)(g)(w)}},59771:(v,b)=>{"use strict";var i,r,a,f;if("object"==typeof performance&&"function"==typeof performance.now){var u=performance;b.unstable_now=function(){return u.now()}}else{var e=Date,p=e.now();b.unstable_now=function(){return e.now()-p}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var g=null,S=null,M=function(){if(null!==g)try{var Nt=b.unstable_now();g(!0,Nt),g=null}catch(Yt){throw setTimeout(M,0),Yt}};i=function(Nt){null!==g?setTimeout(i,0,Nt):(g=Nt,setTimeout(M,0))},r=function(Nt,Yt){S=setTimeout(Nt,Yt)},a=function(){clearTimeout(S)},b.unstable_shouldYield=function(){return!1},f=b.unstable_forceFrameRate=function(){}}else{var w=window.setTimeout,x=window.clearTimeout;if("undefined"!=typeof console){var B=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof B&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var W=!1,j=null,q=-1,ue=5,re=0;b.unstable_shouldYield=function(){return b.unstable_now()>=re},f=function(){},b.unstable_forceFrameRate=function(Nt){0>Nt||125<Nt?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):ue=0<Nt?Math.floor(1e3/Nt):5};var H=new MessageChannel,se=H.port2;H.port1.onmessage=function(){if(null!==j){var Nt=b.unstable_now();re=Nt+ue;try{j(!0,Nt)?se.postMessage(null):(W=!1,j=null)}catch(Yt){throw se.postMessage(null),Yt}}else W=!1},i=function(Nt){j=Nt,W||(W=!0,se.postMessage(null))},r=function(Nt,Yt){q=w(function(){Nt(b.unstable_now())},Yt)},a=function(){x(q),q=-1}}function ae(Nt,Yt){var dn=Nt.length;Nt.push(Yt);e:for(;;){var rn=dn-1>>>1,vt=Nt[rn];if(!(void 0!==vt&&0<he(vt,Yt)))break e;Nt[rn]=Yt,Nt[dn]=vt,dn=rn}}function ie(Nt){return void 0===(Nt=Nt[0])?null:Nt}function fe(Nt){var Yt=Nt[0];if(void 0!==Yt){var dn=Nt.pop();if(dn!==Yt){Nt[0]=dn;e:for(var rn=0,vt=Nt.length;rn<vt;){var xt=2*(rn+1)-1,Ct=Nt[xt],Gt=xt+1,Fn=Nt[Gt];if(void 0!==Ct&&0>he(Ct,dn))void 0!==Fn&&0>he(Fn,Ct)?(Nt[rn]=Fn,Nt[Gt]=dn,rn=Gt):(Nt[rn]=Ct,Nt[xt]=dn,rn=xt);else{if(!(void 0!==Fn&&0>he(Fn,dn)))break e;Nt[rn]=Fn,Nt[Gt]=dn,rn=Gt}}}return Yt}return null}function he(Nt,Yt){var dn=Nt.sortIndex-Yt.sortIndex;return 0!==dn?dn:Nt.id-Yt.id}var Ce=[],ce=[],Be=1,Ve=null,Xe=3,He=!1,Pe=!1,Ge=!1;function Oe(Nt){for(var Yt=ie(ce);null!==Yt;){if(null===Yt.callback)fe(ce);else{if(!(Yt.startTime<=Nt))break;fe(ce),Yt.sortIndex=Yt.expirationTime,ae(Ce,Yt)}Yt=ie(ce)}}function Tt(Nt){if(Ge=!1,Oe(Nt),!Pe)if(null!==ie(Ce))Pe=!0,i(We);else{var Yt=ie(ce);null!==Yt&&r(Tt,Yt.startTime-Nt)}}function We(Nt,Yt){Pe=!1,Ge&&(Ge=!1,a()),He=!0;var dn=Xe;try{for(Oe(Yt),Ve=ie(Ce);null!==Ve&&(!(Ve.expirationTime>Yt)||Nt&&!b.unstable_shouldYield());){var rn=Ve.callback;if("function"==typeof rn){Ve.callback=null,Xe=Ve.priorityLevel;var vt=rn(Ve.expirationTime<=Yt);Yt=b.unstable_now(),"function"==typeof vt?Ve.callback=vt:Ve===ie(Ce)&&fe(Ce),Oe(Yt)}else fe(Ce);Ve=ie(Ce)}if(null!==Ve)var xt=!0;else{var Ct=ie(ce);null!==Ct&&r(Tt,Ct.startTime-Yt),xt=!1}return xt}finally{Ve=null,Xe=dn,He=!1}}var Qt=f;b.unstable_IdlePriority=5,b.unstable_ImmediatePriority=1,b.unstable_LowPriority=4,b.unstable_NormalPriority=3,b.unstable_Profiling=null,b.unstable_UserBlockingPriority=2,b.unstable_cancelCallback=function(Nt){Nt.callback=null},b.unstable_continueExecution=function(){Pe||He||(Pe=!0,i(We))},b.unstable_getCurrentPriorityLevel=function(){return Xe},b.unstable_getFirstCallbackNode=function(){return ie(Ce)},b.unstable_next=function(Nt){switch(Xe){case 1:case 2:case 3:var Yt=3;break;default:Yt=Xe}var dn=Xe;Xe=Yt;try{return Nt()}finally{Xe=dn}},b.unstable_pauseExecution=function(){},b.unstable_requestPaint=Qt,b.unstable_runWithPriority=function(Nt,Yt){switch(Nt){case 1:case 2:case 3:case 4:case 5:break;default:Nt=3}var dn=Xe;Xe=Nt;try{return Yt()}finally{Xe=dn}},b.unstable_scheduleCallback=function(Nt,Yt,dn){var rn=b.unstable_now();switch(dn="object"==typeof dn&&null!==dn&&"number"==typeof(dn=dn.delay)&&0<dn?rn+dn:rn,Nt){case 1:var vt=-1;break;case 2:vt=250;break;case 5:vt=1073741823;break;case 4:vt=1e4;break;default:vt=5e3}return Nt={id:Be++,callback:Yt,priorityLevel:Nt,startTime:dn,expirationTime:vt=dn+vt,sortIndex:-1},dn>rn?(Nt.sortIndex=dn,ae(ce,Nt),null===ie(Ce)&&Nt===ie(ce)&&(Ge?a():Ge=!0,r(Tt,dn-rn))):(Nt.sortIndex=vt,ae(Ce,Nt),Pe||He||(Pe=!0,i(We))),Nt},b.unstable_wrapCallback=function(Nt){var Yt=Xe;return function(){var dn=Xe;Xe=Yt;try{return Nt.apply(this,arguments)}finally{Xe=dn}}}},88712:(v,b,i)=>{"use strict";v.exports=i(59771)},4043:v=>{"use strict";class b extends Error{constructor(g){super(b._prepareSuperMessage(g)),Object.defineProperty(this,"name",{value:"NonError",configurable:!0,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(this,b)}static _prepareSuperMessage(g){try{return JSON.stringify(g)}catch(S){return String(g)}}}const i=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0}],r=Symbol(".toJSON called"),f=({from:p,seen:g,to_:S,forceEnumerable:M,maxDepth:w,depth:x})=>{const B=S||(Array.isArray(p)?[]:{});if(g.push(p),x>=w)return B;if("function"==typeof p.toJSON&&!0!==p[r])return(p=>{p[r]=!0;const g=p.toJSON();return delete p[r],g})(p);for(const[W,j]of Object.entries(p))if("function"==typeof Buffer&&Buffer.isBuffer(j))B[W]="[object Buffer]";else if("function"!=typeof j){if(!j||"object"!=typeof j){B[W]=j;continue}if(!g.includes(p[W])){x++,B[W]=f({from:p[W],seen:g.slice(),forceEnumerable:M,maxDepth:w,depth:x});continue}B[W]="[Circular]"}for(const{property:W,enumerable:j}of i)"string"==typeof p[W]&&Object.defineProperty(B,W,{value:p[W],enumerable:!!M||j,configurable:!0,writable:!0});return B};v.exports={serializeError:(p,g={})=>{const{maxDepth:S=Number.POSITIVE_INFINITY}=g;return"object"==typeof p&&null!==p?f({from:p,seen:[],forceEnumerable:!0,maxDepth:S,depth:0}):"function"==typeof p?`[Function: ${p.name||"anonymous"}]`:p},deserializeError:(p,g={})=>{const{maxDepth:S=Number.POSITIVE_INFINITY}=g;if(p instanceof Error)return p;if("object"==typeof p&&null!==p&&!Array.isArray(p)){const M=new Error;return f({from:p,seen:[],to_:M,maxDepth:S,depth:0}),M}return new b(p)}}},11144:(v,b,i)=>{"use strict";var r=i(18540),a=i(19568),f=i(81380),u=r("%TypeError%"),e=r("%WeakMap%",!0),p=r("%Map%",!0),g=a("WeakMap.prototype.get",!0),S=a("WeakMap.prototype.set",!0),M=a("WeakMap.prototype.has",!0),w=a("Map.prototype.get",!0),x=a("Map.prototype.set",!0),B=a("Map.prototype.has",!0),W=function(re,H){for(var ae,se=re;null!==(ae=se.next);se=ae)if(ae.key===H)return se.next=ae.next,ae.next=re.next,re.next=ae,ae};v.exports=function(){var H,se,ae,ie={assert:function(fe){if(!ie.has(fe))throw new u("Side channel does not contain "+f(fe))},get:function(fe){if(e&&fe&&("object"==typeof fe||"function"==typeof fe)){if(H)return g(H,fe)}else if(p){if(se)return w(se,fe)}else if(ae)return function(re,H){var se=W(re,H);return se&&se.value}(ae,fe)},has:function(fe){if(e&&fe&&("object"==typeof fe||"function"==typeof fe)){if(H)return M(H,fe)}else if(p){if(se)return B(se,fe)}else if(ae)return function(re,H){return!!W(re,H)}(ae,fe);return!1},set:function(fe,he){e&&fe&&("object"==typeof fe||"function"==typeof fe)?(H||(H=new e),S(H,fe,he)):p?(se||(se=new p),x(se,fe,he)):(ae||(ae={key:{},next:null}),function(re,H,se){var ae=W(re,H);ae?ae.value=se:re.next={key:H,next:re.next,value:se}}(ae,fe,he))}};return ie}},85770:(v,b,i)=>{"use strict";i.d(b,{M:()=>Lr,t:()=>ti}),i(21581),i(8868),i(85443),i(35704),i(66837),i(13744),i(63438),i(22603);var Gt,M=i(6123),w=i.n(M),x=i(86906),B=i.n(x),W=i(66941),j=i.n(W),q=[],H="ResizeObserver loop completed with undelivered notifications.",ae=(()=>{return(Ut=ae||(ae={})).BORDER_BOX="border-box",Ut.CONTENT_BOX="content-box",Ut.DEVICE_PIXEL_CONTENT_BOX="device-pixel-content-box",ae;var Ut})(),ie=function(Ut){return Object.freeze(Ut)},fe=function Ut(Dn,Et){this.inlineSize=Dn,this.blockSize=Et,ie(this)},he=function(){function Ut(Dn,Et,$t,_t){return this.x=Dn,this.y=Et,this.width=$t,this.height=_t,this.top=this.y,this.left=this.x,this.bottom=this.top+this.height,this.right=this.left+this.width,ie(this)}return Ut.prototype.toJSON=function(){var Dn=this;return{x:Dn.x,y:Dn.y,top:Dn.top,right:Dn.right,bottom:Dn.bottom,left:Dn.left,width:Dn.width,height:Dn.height}},Ut.fromRect=function(Dn){return new Ut(Dn.x,Dn.y,Dn.width,Dn.height)},Ut}(),Ce=function(Ut){return Ut instanceof SVGElement&&"getBBox"in Ut},ce=function(Ut){if(Ce(Ut)){var Dn=Ut.getBBox();return!Dn.width&&!Dn.height}return!(Ut.offsetWidth||Ut.offsetHeight||Ut.getClientRects().length)},Be=function(Ut){var Dn;if(Ut instanceof Element)return!0;var Et=null===(Dn=null==Ut?void 0:Ut.ownerDocument)||void 0===Dn?void 0:Dn.defaultView;return!!(Et&&Ut instanceof Et.Element)},Xe="undefined"!=typeof window?window:{},He=new WeakMap,Pe=/auto|scroll/,Ge=/^tb|vertical/,Oe=/msie|trident/i.test(Xe.navigator&&Xe.navigator.userAgent),Tt=function(Ut){return parseFloat(Ut||"0")},We=function(Ut,Dn,Et){return void 0===Ut&&(Ut=0),void 0===Dn&&(Dn=0),void 0===Et&&(Et=!1),new fe((Et?Dn:Ut)||0,(Et?Ut:Dn)||0)},Qt=ie({devicePixelContentBoxSize:We(),borderBoxSize:We(),contentBoxSize:We(),contentRect:new he(0,0,0,0)}),Nt=function(Ut,Dn){if(void 0===Dn&&(Dn=!1),He.has(Ut)&&!Dn)return He.get(Ut);if(ce(Ut))return He.set(Ut,Qt),Qt;var Et=getComputedStyle(Ut),$t=Ce(Ut)&&Ut.ownerSVGElement&&Ut.getBBox(),_t=!Oe&&"border-box"===Et.boxSizing,yt=Ge.test(Et.writingMode||""),Vt=!$t&&Pe.test(Et.overflowY||""),yn=!$t&&Pe.test(Et.overflowX||""),Cr=$t?0:Tt(Et.paddingTop),xi=$t?0:Tt(Et.paddingRight),yi=$t?0:Tt(Et.paddingBottom),Yo=$t?0:Tt(Et.paddingLeft),Qo=$t?0:Tt(Et.borderTopWidth),lo=$t?0:Tt(Et.borderRightWidth),Ri=$t?0:Tt(Et.borderBottomWidth),Xo=Yo+xi,ir=Cr+yi,si=($t?0:Tt(Et.borderLeftWidth))+lo,kn=Qo+Ri,nr=yn?Ut.offsetHeight-kn-Ut.clientHeight:0,jr=Vt?Ut.offsetWidth-si-Ut.clientWidth:0,ao=_t?Xo+si:0,$i=_t?ir+kn:0,Eo=$t?$t.width:Tt(Et.width)-ao-jr,mo=$t?$t.height:Tt(Et.height)-$i-nr,Go=Eo+Xo+jr+si,ua=mo+ir+nr+kn,or=ie({devicePixelContentBoxSize:We(Math.round(Eo*devicePixelRatio),Math.round(mo*devicePixelRatio),yt),borderBoxSize:We(Go,ua,yt),contentBoxSize:We(Eo,mo,yt),contentRect:new he(Yo,Cr,Eo,mo)});return He.set(Ut,or),or},Yt=function(Ut,Dn,Et){var $t=Nt(Ut,Et),_t=$t.borderBoxSize,yt=$t.contentBoxSize,Vt=$t.devicePixelContentBoxSize;switch(Dn){case ae.DEVICE_PIXEL_CONTENT_BOX:return Vt;case ae.BORDER_BOX:return _t;default:return yt}},dn=function Ut(Dn){var Et=Nt(Dn);this.target=Dn,this.contentRect=Et.contentRect,this.borderBoxSize=ie([Et.borderBoxSize]),this.contentBoxSize=ie([Et.contentBoxSize]),this.devicePixelContentBoxSize=ie([Et.devicePixelContentBoxSize])},rn=function(Ut){if(ce(Ut))return 1/0;for(var Dn=0,Et=Ut.parentNode;Et;)Dn+=1,Et=Et.parentNode;return Dn},vt=function(){var Ut=1/0,Dn=[];q.forEach(function(Vt){if(0!==Vt.activeTargets.length){var yn=[];Vt.activeTargets.forEach(function(xi){var yi=new dn(xi.target),Yo=rn(xi.target);yn.push(yi),xi.lastReportedSize=Yt(xi.target,xi.observedBox),Yo<Ut&&(Ut=Yo)}),Dn.push(function(){Vt.callback.call(Vt.observer,yn,Vt.observer)}),Vt.activeTargets.splice(0,Vt.activeTargets.length)}});for(var Et=0,$t=Dn;Et<$t.length;Et++)(0,$t[Et])();return Ut},xt=function(Ut){q.forEach(function(Et){Et.activeTargets.splice(0,Et.activeTargets.length),Et.skippedTargets.splice(0,Et.skippedTargets.length),Et.observationTargets.forEach(function(_t){_t.isActive()&&(rn(_t.target)>Ut?Et.activeTargets.push(_t):Et.skippedTargets.push(_t))})})},Fn=[],hr=0,Hn={attributes:!0,characterData:!0,childList:!0,subtree:!0},er=["resize","load","transitionend","animationend","animationstart","animationiteration","keyup","keydown","mouseup","mousedown","mouseover","mouseout","blur","focus"],_r=function(Ut){return void 0===Ut&&(Ut=0),Date.now()+Ut},ei=!1,fi=new(function(){function Ut(){var Dn=this;this.stopped=!0,this.listener=function(){return Dn.schedule()}}return Ut.prototype.run=function(Dn){var Et=this;if(void 0===Dn&&(Dn=250),!ei){ei=!0;var $t=_r(Dn);!function(Ut){!function(Ut){if(!Gt){var Dn=0,Et=document.createTextNode("");new MutationObserver(function(){return Fn.splice(0).forEach(function(Ut){return Ut()})}).observe(Et,{characterData:!0}),Gt=function(){Et.textContent="".concat(Dn?Dn--:Dn++)}}Fn.push(Ut),Gt()}(function(){requestAnimationFrame(Ut)})}(function(){var _t=!1;try{_t=function(){var Ut=0;for(xt(Ut);q.some(function(Ut){return Ut.activeTargets.length>0});)Ut=vt(),xt(Ut);return q.some(function(Ut){return Ut.skippedTargets.length>0})&&function(){var Ut;"function"==typeof ErrorEvent?Ut=new ErrorEvent("error",{message:H}):((Ut=document.createEvent("Event")).initEvent("error",!1,!1),Ut.message=H),window.dispatchEvent(Ut)}(),Ut>0}()}finally{if(ei=!1,Dn=$t-_r(),!hr)return;_t?Et.run(1e3):Dn>0?Et.run(Dn):Et.start()}})}},Ut.prototype.schedule=function(){this.stop(),this.run()},Ut.prototype.observe=function(){var Dn=this,Et=function(){return Dn.observer&&Dn.observer.observe(document.body,Hn)};document.body?Et():Xe.addEventListener("DOMContentLoaded",Et)},Ut.prototype.start=function(){var Dn=this;this.stopped&&(this.stopped=!1,this.observer=new MutationObserver(this.listener),this.observe(),er.forEach(function(Et){return Xe.addEventListener(Et,Dn.listener,!0)}))},Ut.prototype.stop=function(){var Dn=this;this.stopped||(this.observer&&this.observer.disconnect(),er.forEach(function(Et){return Xe.removeEventListener(Et,Dn.listener,!0)}),this.stopped=!0)},Ut}()),no=function(Ut){!hr&&Ut>0&&fi.start(),!(hr+=Ut)&&fi.stop()},Er=function(){function Ut(Dn,Et){this.target=Dn,this.observedBox=Et||ae.CONTENT_BOX,this.lastReportedSize={inlineSize:0,blockSize:0}}return Ut.prototype.isActive=function(){var Dn=Yt(this.target,this.observedBox,!0);return function(Ut){return!Ce(Ut)&&!function(Ut){switch(Ut.tagName){case"INPUT":if("image"!==Ut.type)break;case"VIDEO":case"AUDIO":case"EMBED":case"OBJECT":case"CANVAS":case"IFRAME":case"IMG":return!0}return!1}(Ut)&&"inline"===getComputedStyle(Ut).display}(this.target)&&(this.lastReportedSize=Dn),this.lastReportedSize.inlineSize!==Dn.inlineSize||this.lastReportedSize.blockSize!==Dn.blockSize},Ut}(),an=function Ut(Dn,Et){this.activeTargets=[],this.skippedTargets=[],this.observationTargets=[],this.observer=Dn,this.callback=Et},vn=new WeakMap,Zn=function(Ut,Dn){for(var Et=0;Et<Ut.length;Et+=1)if(Ut[Et].target===Dn)return Et;return-1},Xn=function(){function Ut(){}return Ut.connect=function(Dn,Et){var $t=new an(Dn,Et);vn.set(Dn,$t)},Ut.observe=function(Dn,Et,$t){var _t=vn.get(Dn),yt=0===_t.observationTargets.length;Zn(_t.observationTargets,Et)<0&&(yt&&q.push(_t),_t.observationTargets.push(new Er(Et,$t&&$t.box)),no(1),fi.schedule())},Ut.unobserve=function(Dn,Et){var $t=vn.get(Dn),_t=Zn($t.observationTargets,Et);_t>=0&&(1===$t.observationTargets.length&&q.splice(q.indexOf($t),1),$t.observationTargets.splice(_t,1),no(-1))},Ut.disconnect=function(Dn){var Et=this,$t=vn.get(Dn);$t.observationTargets.slice().forEach(function(_t){return Et.unobserve(Dn,_t.target)}),$t.activeTargets.splice(0,$t.activeTargets.length)},Ut}(),zn=function(){function Ut(Dn){if(0===arguments.length)throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");if("function"!=typeof Dn)throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");Xn.connect(this,Dn)}return Ut.prototype.observe=function(Dn,Et){if(0===arguments.length)throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Be(Dn))throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");Xn.observe(this,Dn,Et)},Ut.prototype.unobserve=function(Dn){if(0===arguments.length)throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");if(!Be(Dn))throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");Xn.unobserve(this,Dn)},Ut.prototype.disconnect=function(){Xn.disconnect(this)},Ut.toString=function(){return"function ResizeObserver () { [polyfill code] }"},Ut}(),ri=i(72318),Gi=i.n(ri);function Wn(Ut){return Ut&&Ut.ownerDocument&&Ut.ownerDocument.defaultView?Ut.ownerDocument.defaultView:window}function et(Ut){return Ut&&Ut.ownerDocument?Ut.ownerDocument:document}i(35319),i(69665),i(26954),i(80477),i(66262);var Le=null,Re=null;function Se(Ut){if(null===Le){var Dn=et(Ut);if(void 0===Dn)return Le=0;var Et=Dn.body,$t=Dn.createElement("div");$t.classList.add("simplebar-hide-scrollbar"),Et.appendChild($t);var _t=$t.getBoundingClientRect().right;Et.removeChild($t),Le=_t}return Le}Gi()&&window.addEventListener("resize",function(){Re!==window.devicePixelRatio&&(Re=window.devicePixelRatio,Le=null)});var dt=function(){function Ut(Et,$t){var _t=this;this.onScroll=function(){var yt=Wn(_t.el);_t.scrollXTicking||(yt.requestAnimationFrame(_t.scrollX),_t.scrollXTicking=!0),_t.scrollYTicking||(yt.requestAnimationFrame(_t.scrollY),_t.scrollYTicking=!0)},this.scrollX=function(){_t.axis.x.isOverflowing&&(_t.showScrollbar("x"),_t.positionScrollbar("x")),_t.scrollXTicking=!1},this.scrollY=function(){_t.axis.y.isOverflowing&&(_t.showScrollbar("y"),_t.positionScrollbar("y")),_t.scrollYTicking=!1},this.onMouseEnter=function(){_t.showScrollbar("x"),_t.showScrollbar("y")},this.onMouseMove=function(yt){_t.mouseX=yt.clientX,_t.mouseY=yt.clientY,(_t.axis.x.isOverflowing||_t.axis.x.forceVisible)&&_t.onMouseMoveForAxis("x"),(_t.axis.y.isOverflowing||_t.axis.y.forceVisible)&&_t.onMouseMoveForAxis("y")},this.onMouseLeave=function(){_t.onMouseMove.cancel(),(_t.axis.x.isOverflowing||_t.axis.x.forceVisible)&&_t.onMouseLeaveForAxis("x"),(_t.axis.y.isOverflowing||_t.axis.y.forceVisible)&&_t.onMouseLeaveForAxis("y"),_t.mouseX=-1,_t.mouseY=-1},this.onWindowResize=function(){_t.scrollbarWidth=_t.getScrollbarWidth(),_t.hideNativeScrollbar()},this.hideScrollbars=function(){_t.axis.x.track.rect=_t.axis.x.track.el.getBoundingClientRect(),_t.axis.y.track.rect=_t.axis.y.track.el.getBoundingClientRect(),_t.isWithinBounds(_t.axis.y.track.rect)||(_t.axis.y.scrollbar.el.classList.remove(_t.classNames.visible),_t.axis.y.isVisible=!1),_t.isWithinBounds(_t.axis.x.track.rect)||(_t.axis.x.scrollbar.el.classList.remove(_t.classNames.visible),_t.axis.x.isVisible=!1)},this.onPointerEvent=function(yt){var Vt,yn;_t.axis.x.track.rect=_t.axis.x.track.el.getBoundingClientRect(),_t.axis.y.track.rect=_t.axis.y.track.el.getBoundingClientRect(),(_t.axis.x.isOverflowing||_t.axis.x.forceVisible)&&(Vt=_t.isWithinBounds(_t.axis.x.track.rect)),(_t.axis.y.isOverflowing||_t.axis.y.forceVisible)&&(yn=_t.isWithinBounds(_t.axis.y.track.rect)),(Vt||yn)&&(yt.preventDefault(),yt.stopPropagation(),"mousedown"===yt.type&&(Vt&&(_t.axis.x.scrollbar.rect=_t.axis.x.scrollbar.el.getBoundingClientRect(),_t.isWithinBounds(_t.axis.x.scrollbar.rect)?_t.onDragStart(yt,"x"):_t.onTrackClick(yt,"x")),yn&&(_t.axis.y.scrollbar.rect=_t.axis.y.scrollbar.el.getBoundingClientRect(),_t.isWithinBounds(_t.axis.y.scrollbar.rect)?_t.onDragStart(yt,"y"):_t.onTrackClick(yt,"y"))))},this.drag=function(yt){var yn=_t.axis[_t.draggedAxis].track,Cr=yn.rect[_t.axis[_t.draggedAxis].sizeAttr],xi=_t.axis[_t.draggedAxis].scrollbar,yi=_t.contentWrapperEl[_t.axis[_t.draggedAxis].scrollSizeAttr],Yo=parseInt(_t.elStyles[_t.axis[_t.draggedAxis].sizeAttr],10);yt.preventDefault(),yt.stopPropagation();var Ri=(("y"===_t.draggedAxis?yt.pageY:yt.pageX)-yn.rect[_t.axis[_t.draggedAxis].offsetAttr]-_t.axis[_t.draggedAxis].dragOffset)/(Cr-xi.size)*(yi-Yo);"x"===_t.draggedAxis&&(Ri=_t.isRtl&&Ut.getRtlHelpers().isRtlScrollbarInverted?Ri-(Cr+xi.size):Ri,Ri=_t.isRtl&&Ut.getRtlHelpers().isRtlScrollingInverted?-Ri:Ri),_t.contentWrapperEl[_t.axis[_t.draggedAxis].scrollOffsetAttr]=Ri},this.onEndDrag=function(yt){var Vt=et(_t.el),yn=Wn(_t.el);yt.preventDefault(),yt.stopPropagation(),_t.el.classList.remove(_t.classNames.dragging),Vt.removeEventListener("mousemove",_t.drag,!0),Vt.removeEventListener("mouseup",_t.onEndDrag,!0),_t.removePreventClickId=yn.setTimeout(function(){Vt.removeEventListener("click",_t.preventClick,!0),Vt.removeEventListener("dblclick",_t.preventClick,!0),_t.removePreventClickId=null})},this.preventClick=function(yt){yt.preventDefault(),yt.stopPropagation()},this.el=Et,this.minScrollbarWidth=20,this.options=Object.assign({},Ut.defaultOptions,$t),this.classNames=Object.assign({},Ut.defaultOptions.classNames,this.options.classNames),this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetSizeAttr:"offsetWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetSizeAttr:"offsetHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.removePreventClickId=null,!Ut.instances.has(this.el)&&(this.recalculate=w()(this.recalculate.bind(this),64),this.onMouseMove=w()(this.onMouseMove.bind(this),64),this.hideScrollbars=B()(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=B()(this.onWindowResize.bind(this),64,{leading:!0}),Ut.getRtlHelpers=j()(Ut.getRtlHelpers),this.init())}Ut.getRtlHelpers=function(){var $t=document.createElement("div");$t.innerHTML='<div class="hs-dummy-scrollbar-size"><div style="height: 200%; width: 200%; margin: 10px 0;"></div></div>';var _t=$t.firstElementChild;document.body.appendChild(_t);var yt=_t.firstElementChild;_t.scrollLeft=0;var Vt=Ut.getOffset(_t),yn=Ut.getOffset(yt);_t.scrollLeft=999;var Cr=Ut.getOffset(yt);return{isRtlScrollingInverted:Vt.left!==yn.left&&yn.left-Cr.left!=0,isRtlScrollbarInverted:Vt.left!==yn.left}},Ut.getOffset=function($t){var _t=$t.getBoundingClientRect(),yt=et($t),Vt=Wn($t);return{top:_t.top+(Vt.pageYOffset||yt.documentElement.scrollTop),left:_t.left+(Vt.pageXOffset||yt.documentElement.scrollLeft)}};var Dn=Ut.prototype;return Dn.init=function(){Ut.instances.set(this.el,this),Gi()&&(this.initDOM(),this.setAccessibilityAttributes(),this.scrollbarWidth=this.getScrollbarWidth(),this.recalculate(),this.initListeners())},Dn.initDOM=function(){var $t=this;if(Array.prototype.filter.call(this.el.children,function(Vt){return Vt.classList.contains($t.classNames.wrapper)}).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.options.scrollableNode||this.el.querySelector("."+this.classNames.contentWrapper),this.contentEl=this.options.contentNode||this.el.querySelector("."+this.classNames.contentEl),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.placeholderEl=this.findChild(this.wrapperEl,"."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.findChild(this.el,"."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var _t=document.createElement("div"),yt=document.createElement("div");_t.classList.add(this.classNames.track),yt.classList.add(this.classNames.scrollbar),_t.appendChild(yt),this.axis.x.track.el=_t.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=_t.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},Dn.setAccessibilityAttributes=function(){var $t=this.options.ariaLabel||"scrollable content";this.contentWrapperEl.setAttribute("tabindex","0"),this.contentWrapperEl.setAttribute("role","region"),this.contentWrapperEl.setAttribute("aria-label",$t)},Dn.initListeners=function(){var $t=this,_t=Wn(this.el);this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach(function(Cr){$t.el.addEventListener(Cr,$t.onPointerEvent,!0)}),["touchstart","touchend","touchmove"].forEach(function(Cr){$t.el.addEventListener(Cr,$t.onPointerEvent,{capture:!0,passive:!0})}),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),_t.addEventListener("resize",this.onWindowResize);var yt=!1,Vt=null;this.resizeObserver=new(_t.ResizeObserver||zn)(function(){!yt||null!==Vt||(Vt=_t.requestAnimationFrame(function(){$t.recalculate(),Vt=null}))}),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl),_t.requestAnimationFrame(function(){yt=!0}),this.mutationObserver=new _t.MutationObserver(this.recalculate),this.mutationObserver.observe(this.contentEl,{childList:!0,subtree:!0,characterData:!0})},Dn.recalculate=function(){var $t=Wn(this.el);this.elStyles=$t.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction;var _t=this.heightAutoObserverEl.offsetHeight<=1,yt=this.heightAutoObserverEl.offsetWidth<=1,Vt=this.contentEl.offsetWidth,yn=this.contentWrapperEl.offsetWidth,Cr=this.elStyles.overflowX,xi=this.elStyles.overflowY;this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft;var yi=this.contentEl.scrollHeight,Yo=this.contentEl.scrollWidth;this.contentWrapperEl.style.height=_t?"auto":"100%",this.placeholderEl.style.width=yt?Vt+"px":"auto",this.placeholderEl.style.height=yi+"px";var Qo=this.contentWrapperEl.offsetHeight;this.axis.x.isOverflowing=Yo>Vt,this.axis.y.isOverflowing=yi>Qo,this.axis.x.isOverflowing="hidden"!==Cr&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==xi&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar();var lo=this.axis.x.isOverflowing?this.scrollbarWidth:0;this.axis.x.isOverflowing=this.axis.x.isOverflowing&&Yo>yn-(this.axis.y.isOverflowing?this.scrollbarWidth:0),this.axis.y.isOverflowing=this.axis.y.isOverflowing&&yi>Qo-lo,this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},Dn.getScrollbarSize=function($t){if(void 0===$t&&($t="y"),!this.axis[$t].isOverflowing)return 0;var Vt,yt=this.axis[$t].track.el[this.axis[$t].offsetSizeAttr];return Vt=Math.max(~~(yt/this.contentEl[this.axis[$t].scrollSizeAttr]*yt),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(Vt=Math.min(Vt,this.options.scrollbarMaxSize)),Vt},Dn.positionScrollbar=function($t){if(void 0===$t&&($t="y"),this.axis[$t].isOverflowing){var _t=this.contentWrapperEl[this.axis[$t].scrollSizeAttr],yt=this.axis[$t].track.el[this.axis[$t].offsetSizeAttr],Vt=parseInt(this.elStyles[this.axis[$t].sizeAttr],10),yn=this.axis[$t].scrollbar,Cr=this.contentWrapperEl[this.axis[$t].scrollOffsetAttr],yi=~~((Cr="x"===$t&&this.isRtl&&Ut.getRtlHelpers().isRtlScrollingInverted?-Cr:Cr)/(_t-Vt)*(yt-yn.size));yi="x"===$t&&this.isRtl&&Ut.getRtlHelpers().isRtlScrollbarInverted?yi+(yt-yn.size):yi,yn.el.style.transform="x"===$t?"translate3d("+yi+"px, 0, 0)":"translate3d(0, "+yi+"px, 0)"}},Dn.toggleTrackVisibility=function($t){void 0===$t&&($t="y");var _t=this.axis[$t].track.el,yt=this.axis[$t].scrollbar.el;this.axis[$t].isOverflowing||this.axis[$t].forceVisible?(_t.style.visibility="visible",this.contentWrapperEl.style[this.axis[$t].overflowAttr]="scroll"):(_t.style.visibility="hidden",this.contentWrapperEl.style[this.axis[$t].overflowAttr]="hidden"),yt.style.display=this.axis[$t].isOverflowing?"block":"none"},Dn.hideNativeScrollbar=function(){this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+this.scrollbarWidth+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+this.scrollbarWidth+"px":0},Dn.onMouseMoveForAxis=function($t){void 0===$t&&($t="y"),this.axis[$t].track.rect=this.axis[$t].track.el.getBoundingClientRect(),this.axis[$t].scrollbar.rect=this.axis[$t].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[$t].scrollbar.rect)?this.axis[$t].scrollbar.el.classList.add(this.classNames.hover):this.axis[$t].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[$t].track.rect)?(this.showScrollbar($t),this.axis[$t].track.el.classList.add(this.classNames.hover)):this.axis[$t].track.el.classList.remove(this.classNames.hover)},Dn.onMouseLeaveForAxis=function($t){void 0===$t&&($t="y"),this.axis[$t].track.el.classList.remove(this.classNames.hover),this.axis[$t].scrollbar.el.classList.remove(this.classNames.hover)},Dn.showScrollbar=function($t){void 0===$t&&($t="y"),this.axis[$t].isVisible||(this.axis[$t].scrollbar.el.classList.add(this.classNames.visible),this.axis[$t].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},Dn.onDragStart=function($t,_t){void 0===_t&&(_t="y");var yt=et(this.el),Vt=Wn(this.el);this.axis[_t].dragOffset=("y"===_t?$t.pageY:$t.pageX)-this.axis[_t].scrollbar.rect[this.axis[_t].offsetAttr],this.draggedAxis=_t,this.el.classList.add(this.classNames.dragging),yt.addEventListener("mousemove",this.drag,!0),yt.addEventListener("mouseup",this.onEndDrag,!0),null===this.removePreventClickId?(yt.addEventListener("click",this.preventClick,!0),yt.addEventListener("dblclick",this.preventClick,!0)):(Vt.clearTimeout(this.removePreventClickId),this.removePreventClickId=null)},Dn.onTrackClick=function($t,_t){var yt=this;if(void 0===_t&&(_t="y"),this.options.clickOnTrack){var Vt=Wn(this.el);this.axis[_t].scrollbar.rect=this.axis[_t].scrollbar.el.getBoundingClientRect();var Cr=this.axis[_t].scrollbar.rect[this.axis[_t].offsetAttr],xi=parseInt(this.elStyles[this.axis[_t].sizeAttr],10),yi=this.contentWrapperEl[this.axis[_t].scrollOffsetAttr],Qo=("y"===_t?this.mouseY-Cr:this.mouseX-Cr)<0?-1:1,lo=-1===Qo?yi-xi:yi+xi;!function ko(){var Xo;if(-1===Qo)yi>lo&&(yt.contentWrapperEl.scrollTo(((Xo={})[yt.axis[_t].offsetAttr]=yi-=yt.options.clickOnTrackSpeed,Xo)),Vt.requestAnimationFrame(ko));else if(yi<lo){var ir;yt.contentWrapperEl.scrollTo(((ir={})[yt.axis[_t].offsetAttr]=yi+=yt.options.clickOnTrackSpeed,ir)),Vt.requestAnimationFrame(ko)}}()}},Dn.getContentElement=function(){return this.contentEl},Dn.getScrollElement=function(){return this.contentWrapperEl},Dn.getScrollbarWidth=function(){try{return"none"===getComputedStyle(this.contentWrapperEl,"::-webkit-scrollbar").display||"scrollbarWidth"in document.documentElement.style||"-ms-overflow-style"in document.documentElement.style?0:Se(this.el)}catch($t){return Se(this.el)}},Dn.removeListeners=function(){var $t=this,_t=Wn(this.el);this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick"].forEach(function(yt){$t.el.removeEventListener(yt,$t.onPointerEvent,!0)}),["touchstart","touchend","touchmove"].forEach(function(yt){$t.el.removeEventListener(yt,$t.onPointerEvent,{capture:!0,passive:!0})}),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl&&this.contentWrapperEl.removeEventListener("scroll",this.onScroll),_t.removeEventListener("resize",this.onWindowResize),this.mutationObserver&&this.mutationObserver.disconnect(),this.resizeObserver&&this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},Dn.unMount=function(){this.removeListeners(),Ut.instances.delete(this.el)},Dn.isWithinBounds=function($t){return this.mouseX>=$t.left&&this.mouseX<=$t.left+$t.width&&this.mouseY>=$t.top&&this.mouseY<=$t.top+$t.height},Dn.findChild=function($t,_t){var yt=$t.matches||$t.webkitMatchesSelector||$t.mozMatchesSelector||$t.msMatchesSelector;return Array.prototype.filter.call($t.children,function(Vt){return yt.call(Vt,_t)})[0]},Ut}();dt.defaultOptions={autoHide:!0,forceVisible:!1,clickOnTrack:!0,clickOnTrackSpeed:40,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},dt.instances=new WeakMap;const st=dt;var nn=i(89724);const Fe=["*"];let Lr=(()=>{class Ut{constructor(Et){this.elRef=Et}ngOnInit(){}ngAfterViewInit(){this.SimpleBar=new st(this.elRef.nativeElement,this.options||{})}ngOnDestroy(){this.SimpleBar.unMount(),this.SimpleBar=null}}return Ut.\u0275fac=function(Et){return new(Et||Ut)(nn.Y36(nn.SBq))},Ut.\u0275cmp=nn.Xpm({type:Ut,selectors:[["ngx-simplebar"]],hostAttrs:["data-simplebar","init"],inputs:{options:"options"},ngContentSelectors:Fe,decls:13,vars:0,consts:[[1,"simplebar-wrapper"],[1,"simplebar-height-auto-observer-wrapper"],[1,"simplebar-height-auto-observer"],[1,"simplebar-mask"],[1,"simplebar-offset"],[1,"simplebar-content-wrapper"],[1,"simplebar-content"],[1,"simplebar-placeholder"],[1,"simplebar-track","simplebar-horizontal"],[1,"simplebar-scrollbar"],[1,"simplebar-track","simplebar-vertical"]],template:function(Et,$t){1&Et&&(nn.F$t(),nn.TgZ(0,"div",0)(1,"div",1),nn._UZ(2,"div",2),nn.qZA(),nn.TgZ(3,"div",3)(4,"div",4)(5,"div",5)(6,"div",6),nn.Hsn(7),nn.qZA()()()(),nn._UZ(8,"div",7),nn.qZA(),nn.TgZ(9,"div",8),nn._UZ(10,"div",9),nn.qZA(),nn.TgZ(11,"div",10),nn._UZ(12,"div",9),nn.qZA())},styles:["[data-simplebar]{position:relative;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;flex-wrap:wrap;-webkit-box-pack:start;justify-content:flex-start;align-content:flex-start;-webkit-box-align:start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;max-width:100%;max-height:100%;scrollbar-width:none;-ms-overflow-style:none}.simplebar-content-wrapper::-webkit-scrollbar,.simplebar-hide-scrollbar::-webkit-scrollbar{width:0;height:0}.simplebar-content:after,.simplebar-content:before{content:' ';display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:100%;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;-webkit-box-flex:inherit;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-content{pointer-events:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;left:0;right:0;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:'';background:#000;border-radius:7px;left:2px;right:2px;opacity:0;-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.simplebar-scrollbar.simplebar-visible:before{opacity:.5;-webkit-transition:opacity linear;transition:opacity linear}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll}.simplebar-hide-scrollbar{position:fixed;left:0;visibility:hidden;overflow-y:scroll;scrollbar-width:none;-ms-overflow-style:none}","ngx-simplebar{display:block}"],encapsulation:2}),Ut})(),ti=(()=>{class Ut{}return Ut.\u0275fac=function(Et){return new(Et||Ut)},Ut.\u0275mod=nn.oAB({type:Ut}),Ut.\u0275inj=nn.cJS({imports:[[]]}),Ut})()},35311:v=>{v.exports=function(){var b=document.getSelection();if(!b.rangeCount)return function(){};for(var i=document.activeElement,r=[],a=0;a<b.rangeCount;a++)r.push(b.getRangeAt(a));switch(i.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":i.blur();break;default:i=null}return b.removeAllRanges(),function(){"Caret"===b.type&&b.removeAllRanges(),b.rangeCount||r.forEach(function(f){b.addRange(f)}),i&&i.focus()}}},18807:v=>{"use strict";function b(j){return Object.prototype.toString.call(j)}var p=Array.isArray||function(q){return"[object Array]"===Object.prototype.toString.call(q)};function g(j,q){if(j.forEach)return j.forEach(q);for(var ue=0;ue<j.length;ue++)q(j[ue],ue,j)}var S=Object.keys||function(q){var ue=[];for(var re in q)ue.push(re);return ue},M=Object.prototype.hasOwnProperty||function(j,q){return q in j};function w(j){if("object"==typeof j&&null!==j){var q;if(p(j))q=[];else if(function i(j){return"[object Date]"===b(j)}(j))q=new Date(j.getTime?j.getTime():j);else if(function r(j){return"[object RegExp]"===b(j)}(j))q=new RegExp(j);else if(function a(j){return"[object Error]"===b(j)}(j))q={message:j.message};else if(function f(j){return"[object Boolean]"===b(j)}(j)||function u(j){return"[object Number]"===b(j)}(j)||function e(j){return"[object String]"===b(j)}(j))q=Object(j);else if(Object.create&&Object.getPrototypeOf)q=Object.create(Object.getPrototypeOf(j));else if(j.constructor===Object)q={};else{var re=function(){};re.prototype=j.constructor&&j.constructor.prototype||j.__proto__||{},q=new re}return g(S(j),function(H){q[H]=j[H]}),q}return j}function x(j,q,ue){var re=[],H=[],se=!0;return function ae(ie){var fe=ue?w(ie):ie,he={},Ce=!0,ce={node:fe,node_:ie,path:[].concat(re),parent:H[H.length-1],parents:H,key:re[re.length-1],isRoot:0===re.length,level:re.length,circular:null,update:function(Xe,He){ce.isRoot||(ce.parent.node[ce.key]=Xe),ce.node=Xe,He&&(Ce=!1)},delete:function(Xe){delete ce.parent.node[ce.key],Xe&&(Ce=!1)},remove:function(Xe){p(ce.parent.node)?ce.parent.node.splice(ce.key,1):delete ce.parent.node[ce.key],Xe&&(Ce=!1)},keys:null,before:function(Xe){he.before=Xe},after:function(Xe){he.after=Xe},pre:function(Xe){he.pre=Xe},post:function(Xe){he.post=Xe},stop:function(){se=!1},block:function(){Ce=!1}};if(!se)return ce;function Be(){if("object"==typeof ce.node&&null!==ce.node){(!ce.keys||ce.node_!==ce.node)&&(ce.keys=S(ce.node)),ce.isLeaf=0===ce.keys.length;for(var Xe=0;Xe<H.length;Xe++)if(H[Xe].node_===ie){ce.circular=H[Xe];break}}else ce.isLeaf=!0,ce.keys=null;ce.notLeaf=!ce.isLeaf,ce.notRoot=!ce.isRoot}Be();var Ve=q.call(ce,ce.node);return void 0!==Ve&&ce.update&&ce.update(Ve),he.before&&he.before.call(ce,ce.node),Ce&&("object"==typeof ce.node&&null!==ce.node&&!ce.circular&&(H.push(ce),Be(),g(ce.keys,function(Xe,He){re.push(Xe),he.pre&&he.pre.call(ce,ce.node[Xe],Xe);var Pe=ae(ce.node[Xe]);ue&&M.call(ce.node,Xe)&&(ce.node[Xe]=Pe.node),Pe.isLast=He===ce.keys.length-1,Pe.isFirst=0===He,he.post&&he.post.call(ce,Pe),re.pop()}),H.pop()),he.after&&he.after.call(ce,ce.node)),ce}(j).node}function B(j){this.value=j}function W(j){return new B(j)}B.prototype.get=function(j){for(var q=this.value,ue=0;ue<j.length;ue++){var re=j[ue];if(!q||!M.call(q,re))return;q=q[re]}return q},B.prototype.has=function(j){for(var q=this.value,ue=0;ue<j.length;ue++){var re=j[ue];if(!q||!M.call(q,re))return!1;q=q[re]}return!0},B.prototype.set=function(j,q){for(var ue=this.value,re=0;re<j.length-1;re++){var H=j[re];M.call(ue,H)||(ue[H]={}),ue=ue[H]}return ue[j[re]]=q,q},B.prototype.map=function(j){return x(this.value,j,!0)},B.prototype.forEach=function(j){return this.value=x(this.value,j,!1),this.value},B.prototype.reduce=function(j,q){var ue=1===arguments.length,re=ue?this.value:q;return this.forEach(function(H){(!this.isRoot||!ue)&&(re=j.call(this,re,H))}),re},B.prototype.paths=function(){var j=[];return this.forEach(function(){j.push(this.path)}),j},B.prototype.nodes=function(){var j=[];return this.forEach(function(){j.push(this.node)}),j},B.prototype.clone=function(){var j=[],q=[];return function ue(re){for(var H=0;H<j.length;H++)if(j[H]===re)return q[H];if("object"==typeof re&&null!==re){var se=w(re);return j.push(re),q.push(se),g(S(re),function(ae){se[ae]=ue(re[ae])}),j.pop(),q.pop(),se}return re}(this.value)},g(S(B.prototype),function(j){W[j]=function(q){var ue=[].slice.call(arguments,1),re=new B(q);return re[j].apply(re,ue)}}),v.exports=W},2135:(v,b,i)=>{"use strict";var r=i(90465),a=i(76959),f=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,u=/[\n\r\t]/g,e=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,p=/:\d+$/,g=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,S=/^[a-zA-Z]:/;function M(se){return(se||"").toString().replace(f,"")}var w=[["#","hash"],["?","query"],function(ae,ie){return W(ie.protocol)?ae.replace(/\\/g,"/"):ae},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],x={hash:1,query:1};function B(se){var ae;ae="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var Ce,fe={},he=typeof(se=se||ae.location||{});if("blob:"===se.protocol)fe=new ue(unescape(se.pathname),{});else if("string"===he)for(Ce in fe=new ue(se,{}),x)delete fe[Ce];else if("object"===he){for(Ce in se)Ce in x||(fe[Ce]=se[Ce]);void 0===fe.slashes&&(fe.slashes=e.test(se.href))}return fe}function W(se){return"file:"===se||"ftp:"===se||"http:"===se||"https:"===se||"ws:"===se||"wss:"===se}function j(se,ae){se=(se=M(se)).replace(u,""),ae=ae||{};var Be,ie=g.exec(se),fe=ie[1]?ie[1].toLowerCase():"",he=!!ie[2],Ce=!!ie[3],ce=0;return he?Ce?(Be=ie[2]+ie[3]+ie[4],ce=ie[2].length+ie[3].length):(Be=ie[2]+ie[4],ce=ie[2].length):Ce?(Be=ie[3]+ie[4],ce=ie[3].length):Be=ie[4],"file:"===fe?ce>=2&&(Be=Be.slice(2)):W(fe)?Be=ie[4]:fe?he&&(Be=Be.slice(2)):ce>=2&&W(ae.protocol)&&(Be=ie[4]),{protocol:fe,slashes:he||W(fe),slashesCount:ce,rest:Be}}function ue(se,ae,ie){if(se=(se=M(se)).replace(u,""),!(this instanceof ue))return new ue(se,ae,ie);var fe,he,Ce,ce,Be,Ve,Xe=w.slice(),He=typeof ae,Pe=this,Ge=0;for("object"!==He&&"string"!==He&&(ie=ae,ae=null),ie&&"function"!=typeof ie&&(ie=a.parse),fe=!(he=j(se||"",ae=B(ae))).protocol&&!he.slashes,Pe.slashes=he.slashes||fe&&ae.slashes,Pe.protocol=he.protocol||ae.protocol||"",se=he.rest,("file:"===he.protocol&&(2!==he.slashesCount||S.test(se))||!he.slashes&&(he.protocol||he.slashesCount<2||!W(Pe.protocol)))&&(Xe[3]=[/(.*)/,"pathname"]);Ge<Xe.length;Ge++)"function"!=typeof(ce=Xe[Ge])?(Ve=ce[1],(Ce=ce[0])!=Ce?Pe[Ve]=se:"string"==typeof Ce?~(Be="@"===Ce?se.lastIndexOf(Ce):se.indexOf(Ce))&&("number"==typeof ce[2]?(Pe[Ve]=se.slice(0,Be),se=se.slice(Be+ce[2])):(Pe[Ve]=se.slice(Be),se=se.slice(0,Be))):(Be=Ce.exec(se))&&(Pe[Ve]=Be[1],se=se.slice(0,Be.index)),Pe[Ve]=Pe[Ve]||fe&&ce[3]&&ae[Ve]||"",ce[4]&&(Pe[Ve]=Pe[Ve].toLowerCase())):se=ce(se,Pe);ie&&(Pe.query=ie(Pe.query)),fe&&ae.slashes&&"/"!==Pe.pathname.charAt(0)&&(""!==Pe.pathname||""!==ae.pathname)&&(Pe.pathname=function q(se,ae){if(""===se)return ae;for(var ie=(ae||"/").split("/").slice(0,-1).concat(se.split("/")),fe=ie.length,he=ie[fe-1],Ce=!1,ce=0;fe--;)"."===ie[fe]?ie.splice(fe,1):".."===ie[fe]?(ie.splice(fe,1),ce++):ce&&(0===fe&&(Ce=!0),ie.splice(fe,1),ce--);return Ce&&ie.unshift(""),("."===he||".."===he)&&ie.push(""),ie.join("/")}(Pe.pathname,ae.pathname)),"/"!==Pe.pathname.charAt(0)&&W(Pe.protocol)&&(Pe.pathname="/"+Pe.pathname),r(Pe.port,Pe.protocol)||(Pe.host=Pe.hostname,Pe.port=""),Pe.username=Pe.password="",Pe.auth&&(~(Be=Pe.auth.indexOf(":"))?(Pe.username=Pe.auth.slice(0,Be),Pe.username=encodeURIComponent(decodeURIComponent(Pe.username)),Pe.password=Pe.auth.slice(Be+1),Pe.password=encodeURIComponent(decodeURIComponent(Pe.password))):Pe.username=encodeURIComponent(decodeURIComponent(Pe.auth)),Pe.auth=Pe.password?Pe.username+":"+Pe.password:Pe.username),Pe.origin="file:"!==Pe.protocol&&W(Pe.protocol)&&Pe.host?Pe.protocol+"//"+Pe.host:"null",Pe.href=Pe.toString()}ue.prototype={set:function re(se,ae,ie){var fe=this;switch(se){case"query":"string"==typeof ae&&ae.length&&(ae=(ie||a.parse)(ae)),fe[se]=ae;break;case"port":fe[se]=ae,r(ae,fe.protocol)?ae&&(fe.host=fe.hostname+":"+ae):(fe.host=fe.hostname,fe[se]="");break;case"hostname":fe[se]=ae,fe.port&&(ae+=":"+fe.port),fe.host=ae;break;case"host":fe[se]=ae,p.test(ae)?(ae=ae.split(":"),fe.port=ae.pop(),fe.hostname=ae.join(":")):(fe.hostname=ae,fe.port="");break;case"protocol":fe.protocol=ae.toLowerCase(),fe.slashes=!ie;break;case"pathname":case"hash":if(ae){var he="pathname"===se?"/":"#";fe[se]=ae.charAt(0)!==he?he+ae:ae}else fe[se]=ae;break;case"username":case"password":fe[se]=encodeURIComponent(ae);break;case"auth":var Ce=ae.indexOf(":");~Ce?(fe.username=ae.slice(0,Ce),fe.username=encodeURIComponent(decodeURIComponent(fe.username)),fe.password=ae.slice(Ce+1),fe.password=encodeURIComponent(decodeURIComponent(fe.password))):fe.username=encodeURIComponent(decodeURIComponent(ae))}for(var ce=0;ce<w.length;ce++){var Be=w[ce];Be[4]&&(fe[Be[1]]=fe[Be[1]].toLowerCase())}return fe.auth=fe.password?fe.username+":"+fe.password:fe.username,fe.origin="file:"!==fe.protocol&&W(fe.protocol)&&fe.host?fe.protocol+"//"+fe.host:"null",fe.href=fe.toString(),fe},toString:function H(se){(!se||"function"!=typeof se)&&(se=a.stringify);var ae,ie=this,fe=ie.host,he=ie.protocol;he&&":"!==he.charAt(he.length-1)&&(he+=":");var Ce=he+(ie.protocol&&ie.slashes||W(ie.protocol)?"//":"");return ie.username?(Ce+=ie.username,ie.password&&(Ce+=":"+ie.password),Ce+="@"):ie.password?(Ce+=":"+ie.password,Ce+="@"):"file:"!==ie.protocol&&W(ie.protocol)&&!fe&&"/"!==ie.pathname&&(Ce+="@"),(":"===fe[fe.length-1]||p.test(ie.hostname)&&!ie.port)&&(fe+=":"),Ce+=fe+ie.pathname,(ae="object"==typeof ie.query?se(ie.query):ie.query)&&(Ce+="?"!==ae.charAt(0)?"?"+ae:ae),ie.hash&&(Ce+=ie.hash),Ce}},ue.extractProtocol=j,ue.location=B,ue.trimLeft=M,ue.qs=a,v.exports=ue},38505:(v,b,i)=>{"use strict";var r=i(87504),a=i(43745);function f(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}b.parse=se,b.resolve=function ie(he,Ce){return se(he,!1,!0).resolve(Ce)},b.resolveObject=function fe(he,Ce){return he?se(he,!1,!0).resolveObject(Ce):Ce},b.format=function ae(he){return a.isString(he)&&(he=se(he)),he instanceof f?he.format():f.prototype.format.call(he)},b.Url=f;var u=/^([a-z0-9.+-]+:)/i,e=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,S=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),M=["'"].concat(S),w=["%","/","?",";","#"].concat(M),x=["/","?","#"],W=/^[+a-z0-9A-Z_-]{0,63}$/,j=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,q={javascript:!0,"javascript:":!0},ue={javascript:!0,"javascript:":!0},re={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},H=i(36284);function se(he,Ce,ce){if(he&&a.isObject(he)&&he instanceof f)return he;var Be=new f;return Be.parse(he,Ce,ce),Be}f.prototype.parse=function(he,Ce,ce){if(!a.isString(he))throw new TypeError("Parameter 'url' must be a string, not "+typeof he);var Be=he.indexOf("?"),Ve=-1!==Be&&Be<he.indexOf("#")?"?":"#",Xe=he.split(Ve);Xe[0]=Xe[0].replace(/\\/g,"/");var Pe=he=Xe.join(Ve);if(Pe=Pe.trim(),!ce&&1===he.split("#").length){var Ge=p.exec(Pe);if(Ge)return this.path=Pe,this.href=Pe,this.pathname=Ge[1],Ge[2]?(this.search=Ge[2],this.query=Ce?H.parse(this.search.substr(1)):this.search.substr(1)):Ce&&(this.search="",this.query={}),this}var Oe=u.exec(Pe);if(Oe){var Tt=(Oe=Oe[0]).toLowerCase();this.protocol=Tt,Pe=Pe.substr(Oe.length)}if(ce||Oe||Pe.match(/^\/\/[^@\/]+@[^@\/]+/)){var We="//"===Pe.substr(0,2);We&&(!Oe||!ue[Oe])&&(Pe=Pe.substr(2),this.slashes=!0)}if(!ue[Oe]&&(We||Oe&&!re[Oe])){for(var Qt=-1,Nt=0;Nt<x.length;Nt++)-1!==(Yt=Pe.indexOf(x[Nt]))&&(-1===Qt||Yt<Qt)&&(Qt=Yt);var dn,rn;for(-1!==(rn=-1===Qt?Pe.lastIndexOf("@"):Pe.lastIndexOf("@",Qt))&&(dn=Pe.slice(0,rn),Pe=Pe.slice(rn+1),this.auth=decodeURIComponent(dn)),Qt=-1,Nt=0;Nt<w.length;Nt++){var Yt;-1!==(Yt=Pe.indexOf(w[Nt]))&&(-1===Qt||Yt<Qt)&&(Qt=Yt)}-1===Qt&&(Qt=Pe.length),this.host=Pe.slice(0,Qt),Pe=Pe.slice(Qt),this.parseHost(),this.hostname=this.hostname||"";var vt="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!vt)for(var xt=this.hostname.split(/\./),Ct=(Nt=0,xt.length);Nt<Ct;Nt++){var Gt=xt[Nt];if(Gt&&!Gt.match(W)){for(var Fn="",pr=0,mi=Gt.length;pr<mi;pr++)Gt.charCodeAt(pr)>127?Fn+="x":Fn+=Gt[pr];if(!Fn.match(W)){var ci=xt.slice(0,Nt),hr=xt.slice(Nt+1),Br=Gt.match(j);Br&&(ci.push(Br[1]),hr.unshift(Br[2])),hr.length&&(Pe="/"+hr.join(".")+Pe),this.hostname=ci.join(".");break}}}this.hostname=this.hostname.length>255?"":this.hostname.toLowerCase(),vt||(this.hostname=r.toASCII(this.hostname)),this.host=(this.hostname||"")+(this.port?":"+this.port:""),this.href+=this.host,vt&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==Pe[0]&&(Pe="/"+Pe))}if(!q[Tt])for(Nt=0,Ct=M.length;Nt<Ct;Nt++){var er=M[Nt];if(-1!==Pe.indexOf(er)){var _r=encodeURIComponent(er);_r===er&&(_r=escape(er)),Pe=Pe.split(er).join(_r)}}var ei=Pe.indexOf("#");-1!==ei&&(this.hash=Pe.substr(ei),Pe=Pe.slice(0,ei));var bi=Pe.indexOf("?");return-1!==bi?(this.search=Pe.substr(bi),this.query=Pe.substr(bi+1),Ce&&(this.query=H.parse(this.query)),Pe=Pe.slice(0,bi)):Ce&&(this.search="",this.query={}),Pe&&(this.pathname=Pe),re[Tt]&&this.hostname&&!this.pathname&&(this.pathname="/"),(this.pathname||this.search)&&(this.path=(this.pathname||"")+(this.search||"")),this.href=this.format(),this},f.prototype.format=function(){var he=this.auth||"";he&&(he=(he=encodeURIComponent(he)).replace(/%3A/i,":"),he+="@");var Ce=this.protocol||"",ce=this.pathname||"",Be=this.hash||"",Ve=!1,Xe="";this.host?Ve=he+this.host:this.hostname&&(Ve=he+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(Ve+=":"+this.port)),this.query&&a.isObject(this.query)&&Object.keys(this.query).length&&(Xe=H.stringify(this.query));var He=this.search||Xe&&"?"+Xe||"";return Ce&&":"!==Ce.substr(-1)&&(Ce+=":"),this.slashes||(!Ce||re[Ce])&&!1!==Ve?(Ve="//"+(Ve||""),ce&&"/"!==ce.charAt(0)&&(ce="/"+ce)):Ve||(Ve=""),Be&&"#"!==Be.charAt(0)&&(Be="#"+Be),He&&"?"!==He.charAt(0)&&(He="?"+He),Ce+Ve+(ce=ce.replace(/[?#]/g,function(Pe){return encodeURIComponent(Pe)}))+(He=He.replace("#","%23"))+Be},f.prototype.resolve=function(he){return this.resolveObject(se(he,!1,!0)).format()},f.prototype.resolveObject=function(he){if(a.isString(he)){var Ce=new f;Ce.parse(he,!1,!0),he=Ce}for(var ce=new f,Be=Object.keys(this),Ve=0;Ve<Be.length;Ve++){var Xe=Be[Ve];ce[Xe]=this[Xe]}if(ce.hash=he.hash,""===he.href)return ce.href=ce.format(),ce;if(he.slashes&&!he.protocol){for(var He=Object.keys(he),Pe=0;Pe<He.length;Pe++){var Ge=He[Pe];"protocol"!==Ge&&(ce[Ge]=he[Ge])}return re[ce.protocol]&&ce.hostname&&!ce.pathname&&(ce.path=ce.pathname="/"),ce.href=ce.format(),ce}if(he.protocol&&he.protocol!==ce.protocol){if(!re[he.protocol]){for(var Oe=Object.keys(he),Tt=0;Tt<Oe.length;Tt++){var We=Oe[Tt];ce[We]=he[We]}return ce.href=ce.format(),ce}if(ce.protocol=he.protocol,he.host||ue[he.protocol])ce.pathname=he.pathname;else{for(var Ct=(he.pathname||"").split("/");Ct.length&&!(he.host=Ct.shift()););he.host||(he.host=""),he.hostname||(he.hostname=""),""!==Ct[0]&&Ct.unshift(""),Ct.length<2&&Ct.unshift(""),ce.pathname=Ct.join("/")}return ce.search=he.search,ce.query=he.query,ce.host=he.host||"",ce.auth=he.auth,ce.hostname=he.hostname||he.host,ce.port=he.port,(ce.pathname||ce.search)&&(ce.path=(ce.pathname||"")+(ce.search||"")),ce.slashes=ce.slashes||he.slashes,ce.href=ce.format(),ce}var Yt=ce.pathname&&"/"===ce.pathname.charAt(0),dn=he.host||he.pathname&&"/"===he.pathname.charAt(0),rn=dn||Yt||ce.host&&he.pathname,vt=rn,xt=ce.pathname&&ce.pathname.split("/")||[],Gt=(Ct=he.pathname&&he.pathname.split("/")||[],ce.protocol&&!re[ce.protocol]);if(Gt&&(ce.hostname="",ce.port=null,ce.host&&(""===xt[0]?xt[0]=ce.host:xt.unshift(ce.host)),ce.host="",he.protocol&&(he.hostname=null,he.port=null,he.host&&(""===Ct[0]?Ct[0]=he.host:Ct.unshift(he.host)),he.host=null),rn=rn&&(""===Ct[0]||""===xt[0])),dn)ce.host=he.host||""===he.host?he.host:ce.host,ce.hostname=he.hostname||""===he.hostname?he.hostname:ce.hostname,ce.search=he.search,ce.query=he.query,xt=Ct;else if(Ct.length)xt||(xt=[]),xt.pop(),xt=xt.concat(Ct),ce.search=he.search,ce.query=he.query;else if(!a.isNullOrUndefined(he.search))return Gt&&(ce.hostname=ce.host=xt.shift(),(Fn=!!(ce.host&&ce.host.indexOf("@")>0)&&ce.host.split("@"))&&(ce.auth=Fn.shift(),ce.host=ce.hostname=Fn.shift())),ce.search=he.search,ce.query=he.query,(!a.isNull(ce.pathname)||!a.isNull(ce.search))&&(ce.path=(ce.pathname?ce.pathname:"")+(ce.search?ce.search:"")),ce.href=ce.format(),ce;if(!xt.length)return ce.pathname=null,ce.path=ce.search?"/"+ce.search:null,ce.href=ce.format(),ce;for(var pr=xt.slice(-1)[0],mi=(ce.host||he.host||xt.length>1)&&("."===pr||".."===pr)||""===pr,ci=0,hr=xt.length;hr>=0;hr--)"."===(pr=xt[hr])?xt.splice(hr,1):".."===pr?(xt.splice(hr,1),ci++):ci&&(xt.splice(hr,1),ci--);if(!rn&&!vt)for(;ci--;ci)xt.unshift("..");rn&&""!==xt[0]&&(!xt[0]||"/"!==xt[0].charAt(0))&&xt.unshift(""),mi&&"/"!==xt.join("/").substr(-1)&&xt.push("");var Fn,Br=""===xt[0]||xt[0]&&"/"===xt[0].charAt(0);return Gt&&(ce.hostname=ce.host=Br?"":xt.length?xt.shift():"",(Fn=!!(ce.host&&ce.host.indexOf("@")>0)&&ce.host.split("@"))&&(ce.auth=Fn.shift(),ce.host=ce.hostname=Fn.shift())),(rn=rn||ce.host&&xt.length)&&!Br&&xt.unshift(""),xt.length?ce.pathname=xt.join("/"):(ce.pathname=null,ce.path=null),(!a.isNull(ce.pathname)||!a.isNull(ce.search))&&(ce.path=(ce.pathname?ce.pathname:"")+(ce.search?ce.search:"")),ce.auth=he.auth||ce.auth,ce.slashes=ce.slashes||he.slashes,ce.href=ce.format(),ce},f.prototype.parseHost=function(){var he=this.host,Ce=e.exec(he);Ce&&(":"!==(Ce=Ce[0])&&(this.port=Ce.substr(1)),he=he.substr(0,he.length-Ce.length)),he&&(this.hostname=he)}},43745:v=>{"use strict";v.exports={isString:function(b){return"string"==typeof b},isObject:function(b){return"object"==typeof b&&null!==b},isNull:function(b){return null===b},isNullOrUndefined:function(b){return null==b}}},58734:(v,b,i)=>{"use strict";var r=i(88280),u=function(w){return/<\/+[^>]+>/.test(w)},e=function(w){return/<[^>]+\/>/.test(w)};function g(M){return(w=M,w.split(/(<\/?[^>]+>)/g).filter(function(x){return""!==x.trim()})).map(function(x){return{value:x,type:S(x)}});var w}function S(M){return u(M)?"ClosingTag":!function(w){return/<[^>!]+>/.test(w)}(w=M)||u(w)||e(w)?e(M)?"SelfClosingTag":"Text":"OpeningTag";var w}v.exports=function(M){var w=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},x=w.indentor,B=w.textNodesOnSameLine,W=0,j=[];x=x||"    ";var q=g(M).map(function(ue,re,H){var se=ue.value,ae=ue.type;"ClosingTag"===ae&&W--;var ie=r(x,W),fe=ie+se;if("OpeningTag"===ae&&W++,B){var he=H[re-1],Ce=H[re-2];"ClosingTag"===ae&&"Text"===he.type&&"OpeningTag"===Ce.type&&(fe=""+ie+Ce.value+he.value+se,j.push(re-2,re-1))}return fe});return j.forEach(function(ue){return q[ue]=null}),q.filter(function(ue){return!!ue}).join("\n")}},1653:function(v,b){var i,r,a;r=[],void 0!==(a="function"==typeof(i=function(){"use strict";var f=function(x){return x&&"getComputedStyle"in window&&"smooth"===window.getComputedStyle(x)["scroll-behavior"]};if("undefined"==typeof window||!("document"in window))return{};var u=function(x,B,W){B=B||999,!W&&0!==W&&(W=9);var j,q=function(he){j=he},ue=function(){clearTimeout(j),q(0)},re=function(he){return Math.max(0,x.getTopOf(he)-W)},H=function(he,Ce,ce){if(ue(),0===Ce||Ce&&Ce<0||f(x.body))x.toY(he),ce&&ce();else{var Be=x.getY(),Ve=Math.max(0,he)-Be,Xe=(new Date).getTime();Ce=Ce||Math.min(Math.abs(Ve),B),function He(){q(setTimeout(function(){var Pe=Math.min(1,((new Date).getTime()-Xe)/Ce),Ge=Math.max(0,Math.floor(Be+Ve*(Pe<.5?2*Pe*Pe:Pe*(4-2*Pe)-1)));x.toY(Ge),Pe<1&&x.getHeight()+Ge<x.body.scrollHeight?He():(setTimeout(ue,99),ce&&ce())},9))}()}},se=function(he,Ce,ce){H(re(he),Ce,ce)};return{setup:function(he,Ce){return(0===he||he)&&(B=he),(0===Ce||Ce)&&(W=Ce),{defaultDuration:B,edgeOffset:W}},to:se,toY:H,intoView:function(he,Ce,ce){var Be=he.getBoundingClientRect().height,Ve=x.getTopOf(he)+Be,Xe=x.getHeight(),He=x.getY(),Pe=He+Xe;re(he)<He||Be+W>Xe?se(he,Ce,ce):Ve+W>Pe?H(Ve-Xe+W,Ce,ce):ce&&ce()},center:function(he,Ce,ce,Be){H(Math.max(0,x.getTopOf(he)-x.getHeight()/2+(ce||he.getBoundingClientRect().height/2)),Ce,Be)},stop:ue,moving:function(){return!!j},getY:x.getY,getTopOf:x.getTopOf}},e=document.documentElement,p=function(){return window.scrollY||e.scrollTop},g=u({body:document.scrollingElement||document.body,toY:function(x){window.scrollTo(0,x)},getY:p,getHeight:function(){return window.innerHeight||e.clientHeight},getTopOf:function(x){return x.getBoundingClientRect().top+p()-e.offsetTop}});if(g.createScroller=function(x,B,W){return u({body:x,toY:function(j){x.scrollTop=j},getY:function(){return x.scrollTop},getHeight:function(){return Math.min(x.clientHeight,window.innerHeight||e.clientHeight)},getTopOf:function(j){return j.offsetTop}},B,W)},"addEventListener"in window&&!window.noZensmooth&&!f(document.body)){var S="history"in window&&"pushState"in history,M=S&&"scrollRestoration"in history;M&&(history.scrollRestoration="auto"),window.addEventListener("load",function(){M&&(setTimeout(function(){history.scrollRestoration="manual"},9),window.addEventListener("popstate",function(x){x.state&&"zenscrollY"in x.state&&g.toY(x.state.zenscrollY)},!1)),window.location.hash&&setTimeout(function(){var x=g.setup().edgeOffset;if(x){var B=document.getElementById(window.location.href.split("#")[1]);if(B){var W=Math.max(0,g.getTopOf(B)-x),j=g.getY()-W;0<=j&&j<9&&window.scrollTo(0,W)}}},9)},!1);var w=new RegExp("(^|\\s)noZensmooth(\\s|$)");window.addEventListener("click",function(x){for(var B=x.target;B&&"A"!==B.tagName;)B=B.parentNode;if(!(!B||1!==x.which||x.shiftKey||x.metaKey||x.ctrlKey||x.altKey)){if(M){var W=history.state&&"object"==typeof history.state?history.state:{};W.zenscrollY=g.getY();try{history.replaceState(W,"")}catch(se){}}var j=B.getAttribute("href")||"";if(0===j.indexOf("#")&&!w.test(B.className)){var q=0,ue=document.getElementById(j.substring(1));if("#"!==j){if(!ue)return;q=g.getTopOf(ue)}x.preventDefault();var re=function(){window.location=j},H=g.setup().edgeOffset;H&&(q=Math.max(0,q-H),S&&(re=function(){history.pushState({},"",j)})),g.toY(q,null,re)}}},!1)}return g}())?i.apply(b,r):i)&&(v.exports=a)},66265:(v,b,i)=>{"use strict";i.d(b,{B:()=>e});var r=i(11048),a=i(55860),f=i(44466),u=i(89724);let e=(()=>{class p{}return p.\u0275fac=function(S){return new(S||p)},p.\u0275mod=u.oAB({type:p}),p.\u0275inj=u.cJS({imports:[[r.ez,f.m,a.Bz]]}),p})()},60351:(v,b,i)=>{"use strict";i.d(b,{p:()=>ue});var r=i(64762),a=i(19725),f=i(25917),u=i(19773),e=i(93523),p=i(89724);let g=class{constructor(H){this.http=H,this.url="api/perf_counters"}list(){return this.http.get(this.url)}get(H,se){return this.http.get(`${this.url}/${H}/${se}`).pipe((0,u.zg)(ae=>(0,f.of)(ae.counters)))}};g.\u0275fac=function(H){return new(H||g)(p.LFG(a.eN))},g.\u0275prov=p.Yz7({token:g,factory:g.\u0275fac,providedIn:"root"}),g=(0,r.gn)([e.o,(0,r.w6)("design:paramtypes",[a.eN])],g);var S=i(11048),M=i(83697),w=i(34501),x=i(66369);const B=["valueTpl"];function W(re,H){if(1&re&&(p._uU(0),p.ALo(1,"dimless")),2&re){const se=H.row;p.AsE(" ",p.lcZ(1,2,se.value)," ",se.unit," ")}}function j(re,H){if(1&re){const se=p.EpF();p.TgZ(0,"cd-table",2),p.NdJ("fetchData",function(ie){return p.CHM(se),p.oxw().getCounters(ie)}),p.YNc(1,W,2,4,"ng-template",null,3,p.W1O),p.qZA()}if(2&re){const se=p.oxw();p.Q6J("data",se.counters)("columns",se.columns)("autoSave",!1)}}function q(re,H){1&re&&(p.TgZ(0,"cd-alert-panel",4),p.SDv(1,5),p.qZA())}let ue=(()=>{class re{constructor(se){this.performanceCounterService=se,this.columns=[],this.counters=[]}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:1},{name:"Description",prop:"description",flexGrow:1},{name:"Value",prop:"value",cellTemplate:this.valueTpl,flexGrow:1}]}getCounters(se){this.performanceCounterService.get(this.serviceType,this.serviceId).subscribe(ae=>{this.counters=ae},ae=>{404===ae.status?(ae.preventDefault(),this.counters=null):se.error()})}}return re.\u0275fac=function(se){return new(se||re)(p.Y36(g))},re.\u0275cmp=p.Xpm({type:re,selectors:[["cd-table-performance-counter"]],viewQuery:function(se,ae){if(1&se&&p.Gf(B,5),2&se){let ie;p.iGM(ie=p.CRH())&&(ae.valueTpl=ie.first)}},inputs:{serviceType:"serviceType",serviceId:"serviceId"},decls:3,vars:2,consts:function(){let H;return H="Performance counters not available",[["columnMode","flex",3,"data","columns","autoSave","fetchData",4,"ngIf","ngIfElse"],["warning",""],["columnMode","flex",3,"data","columns","autoSave","fetchData"],["valueTpl",""],["type","warning"],H]},template:function(se,ae){if(1&se&&(p.YNc(0,j,3,3,"cd-table",0),p.YNc(1,q,2,0,"ng-template",null,1,p.W1O)),2&se){const ie=p.MAs(2);p.Q6J("ngIf",ae.counters)("ngIfElse",ie)}},directives:[S.O5,M.a,w.G],pipes:[x.n],styles:[""]}),re})()},370:(v,b,i)=>{"use strict";i.d(b,{t:()=>g});var r=i(11048),a=i(71334),f=i(37496),u=i(40267),e=i(44466),p=i(89724);let g=(()=>{class S{}return S.\u0275fac=function(w){return new(w||S)},S.\u0275mod=p.oAB({type:S}),S.\u0275inj=p.cJS({imports:[[r.ez,u.t,e.m,a.Oz,f.b]]}),S})()},20687:(v,b,i)=>{"use strict";i.d(b,{j:()=>p});var r=i(23815),a=i.n(r),f=i(370);class u{constructor(S){if(this.type=S,!this.isValidType())throw new Error("Wrong placement group category type");this.setTypeStates()}isValidType(){return u.VALID_CATEGORIES.includes(this.type)}setTypeStates(){switch(this.type){case u.CATEGORY_CLEAN:this.states=["active","clean"];break;case u.CATEGORY_WORKING:this.states=["activating","backfill_wait","backfilling","creating","deep","degraded","forced_backfill","forced_recovery","peering","peered","recovering","recovery_wait","repair","scrubbing","snaptrim","snaptrim_wait"];break;case u.CATEGORY_WARNING:this.states=["backfill_toofull","backfill_unfound","down","incomplete","inconsistent","recovery_toofull","recovery_unfound","remapped","snaptrim_error","stale","undersized"];break;default:this.states=[]}}}u.CATEGORY_CLEAN="clean",u.CATEGORY_WORKING="working",u.CATEGORY_WARNING="warning",u.CATEGORY_UNKNOWN="unknown",u.VALID_CATEGORIES=[u.CATEGORY_CLEAN,u.CATEGORY_WORKING,u.CATEGORY_WARNING,u.CATEGORY_UNKNOWN];var e=i(89724);let p=(()=>{class g{constructor(){this.categories=this.createCategories()}getAllTypes(){return u.VALID_CATEGORIES}getTypeByStates(M){const w=this.getPgStatesFromText(M);if(0===w.length)return u.CATEGORY_UNKNOWN;const x=a().zipObject(u.VALID_CATEGORIES,u.VALID_CATEGORIES.map(W=>a().intersection(this.categories[W].states,w).length));if(x[u.CATEGORY_WARNING]>0)return u.CATEGORY_WARNING;const B=x[u.CATEGORY_WORKING];return w.length>x[u.CATEGORY_CLEAN]+B?u.CATEGORY_UNKNOWN:B?u.CATEGORY_WORKING:u.CATEGORY_CLEAN}createCategories(){return a().zipObject(u.VALID_CATEGORIES,u.VALID_CATEGORIES.map(M=>new u(M)))}getPgStatesFromText(M){const w=M.replace(/[^a-z_]+/g," ").trim().split(" ");return a().uniq(w)}}return g.\u0275fac=function(M){return new(M||g)},g.\u0275prov=e.Yz7({token:g,factory:g.\u0275fac,providedIn:f.t}),g})()},13140:(v,b,i)=>{"use strict";i.r(b),i.d(b,{AuthModule:()=>or,RoutedAuthModule:()=>Ar});var r=i(11048),a=i(1659),f=i(55860),u=i(71334),e=i(37496),p=i(79512),g=i(44466),S=i(23815),M=i.n(S),w=i(35758),x=i(18001),B=i(93614),W=i(95463),j=i(90070),q=i(97161),ue=(()=>((ue||(ue={})).editing="editing",ue))();class re{}var H=i(89724),se=i(25917),ae=i(19773),ie=i(19725);let fe=(()=>{class cr{constructor(Sn){this.http=Sn}list(){return this.http.get("api/role")}delete(Sn){return this.http.delete(`api/role/${Sn}`)}get(Sn){return this.http.get(`api/role/${Sn}`)}create(Sn){return this.http.post("api/role",Sn)}clone(Sn,$n){return this.http.post(`api/role/${Sn}/clone`,{new_name:$n})}update(Sn){return this.http.put(`api/role/${Sn.name}`,Sn)}exists(Sn){return this.list().pipe((0,ae.zg)($n=>{const Jr=$n.some(ro=>ro.name===Sn);return(0,se.of)(Jr)}))}}return cr.\u0275fac=function(Sn){return new(Sn||cr)(H.LFG(ie.eN))},cr.\u0275prov=H.Yz7({token:cr,factory:cr.\u0275fac,providedIn:"root"}),cr})(),he=(()=>{class cr{constructor(Sn){this.http=Sn}list(){return this.http.get("ui-api/scope")}}return cr.\u0275fac=function(Sn){return new(Sn||cr)(H.LFG(ie.eN))},cr.\u0275prov=H.Yz7({token:cr,factory:cr.\u0275fac,providedIn:"root"}),cr})();var Ce=i(63622),ce=i(41582),Be=i(56310),Ve=i(87925),Xe=i(94276),He=i(82945),Pe=i(83697),Ge=i(30839),Oe=i(10545);const Tt=["headerPermissionCheckboxTpl"],We=["cellScopeCheckboxTpl"],Qt=["cellPermissionCheckboxTpl"];function Nt(cr,pi){1&cr&&(H.TgZ(0,"span",25),H.SDv(1,26),H.qZA())}function Yt(cr,pi){1&cr&&(H.TgZ(0,"span",25),H.SDv(1,27),H.qZA())}const dn=function(cr){return{required:cr}};function rn(cr,pi){if(1&cr){const Sn=H.EpF();H.TgZ(0,"div",4)(1,"form",5,6)(3,"div",7)(4,"div",8),H.SDv(5,9),H.ALo(6,"titlecase"),H.ALo(7,"upperFirst"),H.qZA(),H.TgZ(8,"div",10)(9,"div",11)(10,"label",12),H.SDv(11,13),H.qZA(),H.TgZ(12,"div",14),H._UZ(13,"input",15),H.YNc(14,Nt,2,0,"span",16),H.YNc(15,Yt,2,0,"span",16),H.qZA()(),H.TgZ(16,"div",11)(17,"label",17),H.SDv(18,18),H.qZA(),H.TgZ(19,"div",14),H._UZ(20,"input",19),H.qZA()(),H.TgZ(21,"div",11)(22,"label",20),H.SDv(23,21),H.qZA(),H.TgZ(24,"div",14),H._UZ(25,"cd-table",22),H.qZA()()(),H.TgZ(26,"div",23)(27,"cd-form-button-panel",24),H.NdJ("submitActionEvent",function(){return H.CHM(Sn),H.oxw().submit()}),H.ALo(28,"titlecase"),H.ALo(29,"upperFirst"),H.qZA()()()()()}if(2&cr){const Sn=H.MAs(2),$n=H.oxw();H.xp6(1),H.Q6J("formGroup",$n.roleForm),H.xp6(6),H.pQV(H.lcZ(6,15,$n.action))(H.lcZ(7,17,$n.resource)),H.QtT(5),H.xp6(3),H.Q6J("ngClass",H.VKq(23,dn,$n.mode!==$n.roleFormMode.editing)),H.xp6(4),H.Q6J("ngIf",$n.roleForm.showError("name",Sn,"required")),H.xp6(1),H.Q6J("ngIf",$n.roleForm.showError("name",Sn,"notUnique")),H.xp6(10),H.Q6J("data",$n.scopes_permissions)("columns",$n.columns)("toolHeader",!1)("autoReload",!1)("autoSave",!1)("footer",!1)("limit",0),H.xp6(2),H.Q6J("form",$n.roleForm)("submitText",H.lcZ(28,19,$n.action)+" "+H.lcZ(29,21,$n.resource))}}function vt(cr,pi){if(1&cr){const Sn=H.EpF();H.TgZ(0,"div",28)(1,"input",29),H.NdJ("change",function(Jr){const ro=H.CHM(Sn),go=ro.row,Ro=ro.column;return H.oxw().onClickCellCheckbox(go.scope,Ro.prop,Jr)}),H.qZA(),H.TgZ(2,"label",30),H._uU(3),H.qZA()()}if(2&cr){const Sn=pi.row,$n=pi.value,Jr=H.oxw();H.xp6(1),H.MGl("id","scope_",Sn.scope,""),H.Q6J("checked",Jr.isRowChecked(Sn.scope)),H.xp6(1),H.MGl("for","scope_",Sn.scope,""),H.xp6(1),H.Oqu($n)}}function xt(cr,pi){if(1&cr){const Sn=H.EpF();H.TgZ(0,"div",28)(1,"input",31),H.NdJ("change",function(Jr){const ro=H.CHM(Sn),go=ro.row,Ro=ro.column;return H.oxw().onClickCellCheckbox(go.scope,Ro.prop,Jr)}),H.qZA(),H._UZ(2,"label",32),H.qZA()}if(2&cr){const Sn=pi.column,$n=pi.row,Jr=pi.value;H.xp6(1),H.Q6J("checked",Jr)("id",$n.scope+"-"+Sn.prop),H.xp6(1),H.Q6J("for",$n.scope+"-"+Sn.prop)}}function Ct(cr,pi){if(1&cr){const Sn=H.EpF();H.TgZ(0,"div",28)(1,"input",29),H.NdJ("change",function(Jr){const go=H.CHM(Sn).column;return H.oxw().onClickHeaderCheckbox(go.prop,Jr)}),H.qZA(),H.TgZ(2,"label",33),H._uU(3),H.qZA()()}if(2&cr){const Sn=pi.column,$n=H.oxw();H.xp6(1),H.MGl("id","header_",Sn.prop,""),H.Q6J("checked",$n.isHeaderChecked(Sn.prop)),H.xp6(1),H.MGl("for","header_",Sn.prop,""),H.xp6(1),H.Oqu(Sn.name)}}let Gt=(()=>{class cr extends B.E{constructor(Sn,$n,Jr,ro,go,Ro){super(),this.route=Sn,this.router=$n,this.roleService=Jr,this.scopeService=ro,this.notificationService=go,this.actionLabels=Ro,this.scopes=[],this.scopes_permissions=[],this.roleFormMode=ue,this.resource="role",this.createForm(),this.listenToChanges()}createForm(){this.roleForm=new W.d({name:new a.NI("",{validators:[a.kI.required],asyncValidators:[j.h.unique(this.roleService.exists,this.roleService)]}),description:new a.NI(""),scopes_permissions:new a.NI({})})}ngOnInit(){this.columns=[{prop:"scope",name:"All",flexGrow:2,cellTemplate:this.cellScopeCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"read",name:"Read",flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"create",name:"Create",flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"update",name:"Update",flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl},{prop:"delete",name:"Delete",flexGrow:1,cellClass:"text-center",cellTemplate:this.cellPermissionCheckboxTpl,headerTemplate:this.headerPermissionCheckboxTpl}],this.router.url.startsWith("/user-management/roles/edit")?(this.mode=this.roleFormMode.editing,this.action=this.actionLabels.EDIT):this.action=this.actionLabels.CREATE,this.mode===this.roleFormMode.editing?this.initEdit():this.initCreate()}initCreate(){this.scopeService.list().subscribe(Sn=>{this.scopes=Sn,this.roleForm.get("scopes_permissions").setValue({}),this.loadingReady()})}initEdit(){this.roleForm.get("name").disable(),this.route.params.subscribe(Sn=>{const $n=[];$n.push(this.scopeService.list()),$n.push(this.roleService.get(Sn.name)),(0,w.D)($n).subscribe(Jr=>{this.scopes=Jr[0],["name","description","scopes_permissions"].forEach(ro=>this.roleForm.get(ro).setValue(Jr[1][ro])),this.loadingReady()})})}listenToChanges(){this.roleForm.get("scopes_permissions").valueChanges.subscribe(Sn=>{const $n=[];M().each(this.scopes,Jr=>{const ro={read:!1,create:!1,update:!1,delete:!1};ro.scope=Jr,Jr in Sn&&M().each(Sn[Jr],go=>{ro[go]=!0}),$n.push(ro)}),this.scopes_permissions=$n})}isRowChecked(Sn){const $n=M().find(this.scopes_permissions,Jr=>Jr.scope===Sn);return!M().isUndefined($n)&&$n.read&&$n.create&&$n.update&&$n.delete}isHeaderChecked(Sn){let $n=[Sn];return"scope"===Sn&&($n=["read","create","update","delete"]),$n.every(Jr=>this.scopes_permissions.every(ro=>ro[Jr]))}onClickCellCheckbox(Sn,$n,Jr=null){const ro=M().cloneDeep(this.roleForm.getValue("scopes_permissions"));let go=[$n];"scope"===$n&&(go=["read","create","update","delete"]),Sn in ro||(ro[Sn]=[]),Jr&&Jr.target.checked||!M().isEqual(go.sort(),M().intersection(ro[Sn],go).sort())?ro[Sn]=M().union(ro[Sn],go):(ro[Sn]=M().difference(ro[Sn],go),M().isEmpty(ro[Sn])&&M().unset(ro,Sn)),this.roleForm.get("scopes_permissions").setValue(ro)}onClickHeaderCheckbox(Sn,$n){const Jr=M().cloneDeep(this.roleForm.getValue("scopes_permissions"));let ro=[Sn];"scope"===Sn&&(ro=["read","create","update","delete"]),M().each(ro,go=>{M().each(this.scopes,Ro=>{$n.target.checked?Jr[Ro]=M().union(Jr[Ro],[go]):(Jr[Ro]=M().difference(Jr[Ro],[go]),M().isEmpty(Jr[Ro])&&M().unset(Jr,Ro))})}),this.roleForm.get("scopes_permissions").setValue(Jr)}getRequest(){const Sn=new re;return["name","description","scopes_permissions"].forEach($n=>Sn[$n]=this.roleForm.get($n).value),Sn}createAction(){const Sn=this.getRequest();this.roleService.create(Sn).subscribe(()=>{this.notificationService.show(x.k.success,"Created role '" + Sn.name + "'"),this.router.navigate(["/user-management/roles"])},()=>{this.roleForm.setErrors({cdSubmitButton:!0})})}editAction(){const Sn=this.getRequest();this.roleService.update(Sn).subscribe(()=>{this.notificationService.show(x.k.success,"Updated role '" + Sn.name + "'"),this.router.navigate(["/user-management/roles"])},()=>{this.roleForm.setErrors({cdSubmitButton:!0})})}submit(){this.mode===this.roleFormMode.editing?this.editAction():this.createAction()}}return cr.\u0275fac=function(Sn){return new(Sn||cr)(H.Y36(f.gz),H.Y36(f.F0),H.Y36(fe),H.Y36(he),H.Y36(q.g),H.Y36(p.p4))},cr.\u0275cmp=H.Xpm({type:cr,selectors:[["cd-role-form"]],viewQuery:function(Sn,$n){if(1&Sn&&(H.Gf(Tt,7),H.Gf(We,7),H.Gf(Qt,7)),2&Sn){let Jr;H.iGM(Jr=H.CRH())&&($n.headerPermissionCheckboxTpl=Jr.first),H.iGM(Jr=H.CRH())&&($n.cellScopeCheckboxTpl=Jr.first),H.iGM(Jr=H.CRH())&&($n.cellPermissionCheckboxTpl=Jr.first)}},features:[H.qOj],decls:7,vars:1,consts:function(){let pi,Sn,$n,Jr,ro,go,Ro,Ys;return pi="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",Sn="Name",$n="Name...",Jr="Description",ro="Description...",go="Permissions",Ro="This field is required.",Ys="The chosen name is already in use.",[["class","cd-col-form",4,"cdFormLoading"],["cellScopeCheckboxTpl",""],["cellPermissionCheckboxTpl",""],["headerPermissionCheckboxTpl",""],[1,"cd-col-form"],["name","roleForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],pi,[1,"card-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label",3,"ngClass"],Sn,[1,"cd-col-form-input"],["type","text","placeholder",$n,"id","name","name","name","formControlName","name","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","description",1,"cd-col-form-label"],Jr,["type","text","placeholder",ro,"id","description","name","description","formControlName","description",1,"form-control"],[1,"cd-col-form-label"],go,["columnMode","flex",3,"data","columns","toolHeader","autoReload","autoSave","footer","limit"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],Ro,Ys,[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","checked","change"],[1,"datatable-permissions-scope-cell-label","custom-control-label",3,"for"],["type","checkbox",1,"custom-control-input",3,"checked","id","change"],[1,"custom-control-label",3,"for"],[1,"datatable-permissions-header-cell-label","custom-control-label",3,"for"]]},template:function(Sn,$n){1&Sn&&(H.YNc(0,rn,30,25,"div",0),H.YNc(1,vt,4,4,"ng-template",null,1,H.W1O),H.YNc(3,xt,3,3,"ng-template",null,2,H.W1O),H.YNc(5,Ct,4,4,"ng-template",null,3,H.W1O)),2&Sn&&H.Q6J("cdFormLoading",$n.loading)},directives:[Ce.y,a._Y,a.JL,a.sg,ce.V,Be.P,r.mk,Ve.o,a.Fj,Xe.b,a.JJ,a.u,He.U,r.O5,Pe.a,Ge.p],pipes:[r.rS,Oe.m],styles:[".datatable-permissions-header-cell-label[_ngcontent-%COMP%], .datatable-permissions-scope-cell-label[_ngcontent-%COMP%]{font-weight:700}"]}),cr})();var Fn=i(68136),pr=i(30982),mi=i(65683),ci=i(99466),hr=i(65862),Br=i(68774),Ur=i(41039),Hn=i(51847),er=i(47640),_r=i(63285);const ei=function(){return{exact:!0}};let bi=(()=>{class cr{constructor(Sn){this.router=Sn}}return cr.\u0275fac=function(Sn){return new(Sn||cr)(H.Y36(f.F0))},cr.\u0275cmp=H.Xpm({type:cr,selectors:[["cd-user-tabs"]],decls:7,vars:4,consts:function(){let pi,Sn;return pi="Users",Sn="Roles",[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/user-management/users","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],pi,["routerLink","/user-management/roles","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],Sn]},template:function(Sn,$n){1&Sn&&(H.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),H.SDv(3,3),H.qZA()(),H.TgZ(4,"li",1)(5,"a",4),H.SDv(6,5),H.qZA()()()),2&Sn&&(H.xp6(2),H.Q6J("routerLinkActiveOptions",H.DdM(2,ei)),H.xp6(3),H.Q6J("routerLinkActiveOptions",H.DdM(3,ei)))},directives:[f.yS,f.Od],styles:[""]}),cr})();var fi=i(94928);function no(cr,pi){if(1&cr&&(H.ynx(0),H._UZ(1,"cd-table",1),H.BQk()),2&cr){const Sn=H.oxw();H.xp6(1),H.Q6J("data",Sn.scopes_permissions)("columns",Sn.columns)("toolHeader",!1)("autoReload",!1)("autoSave",!1)("footer",!1)("limit",0)}}let xo=(()=>{class cr{constructor(){this.scopes_permissions=[]}ngOnInit(){this.columns=[{prop:"scope",name:"Scope",flexGrow:2},{prop:"read",name:"Read",flexGrow:1,cellClass:"text-center",cellTransformation:ci.e.checkIcon},{prop:"create",name:"Create",flexGrow:1,cellClass:"text-center",cellTransformation:ci.e.checkIcon},{prop:"update",name:"Update",flexGrow:1,cellClass:"text-center",cellTransformation:ci.e.checkIcon},{prop:"delete",name:"Delete",flexGrow:1,cellClass:"text-center",cellTransformation:ci.e.checkIcon}]}ngOnChanges(){if(this.selection){this.selectedItem=this.selection;const Sn=[];M().each(this.scopes,$n=>{const Jr={read:!1,create:!1,update:!1,delete:!1};Jr.scope=$n,$n in this.selectedItem.scopes_permissions&&M().each(this.selectedItem.scopes_permissions[$n],ro=>{Jr[ro]=!0}),Sn.push(Jr)}),this.scopes_permissions=Sn}}}return cr.\u0275fac=function(Sn){return new(Sn||cr)},cr.\u0275cmp=H.Xpm({type:cr,selectors:[["cd-role-details"]],inputs:{selection:"selection",scopes:"scopes"},features:[H.TTD],decls:1,vars:1,consts:[[4,"ngIf"],["columnMode","flex",3,"data","columns","toolHeader","autoReload","autoSave","footer","limit"]],template:function(Sn,$n){1&Sn&&H.YNc(0,no,2,7,"ng-container",0),2&Sn&&H.Q6J("ngIf",$n.selection)},directives:[r.O5,Pe.a],styles:[".fa[_ngcontent-%COMP%]{font-size:large}.fa.fa-square-o[_ngcontent-%COMP%]{color:#ced4da}"]}),cr})(),an=(()=>{class cr extends Fn.o{constructor(Sn,$n,Jr,ro,go,Ro,Ys,ds){super(),this.roleService=Sn,this.scopeService=$n,this.emptyPipe=Jr,this.authStorageService=ro,this.modalService=go,this.notificationService=Ro,this.urlBuilder=Ys,this.actionLabels=ds,this.selection=new Br.r,this.permission=this.authStorageService.getPermissions().user,this.tableActions=[{permission:"create",icon:hr.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"create",icon:hr.P.clone,name:this.actionLabels.CLONE,disable:()=>!this.selection.hasSingleSelection,click:()=>this.cloneRole()},{permission:"update",icon:hr.P.edit,disable:()=>!this.selection.hasSingleSelection||this.selection.first().system,routerLink:()=>this.selection.first()&&this.urlBuilder.getEdit(this.selection.first().name),name:this.actionLabels.EDIT},{permission:"delete",icon:hr.P.destroy,disable:()=>!this.selection.hasSingleSelection||this.selection.first().system,click:()=>this.deleteRoleModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"Name",prop:"name",flexGrow:3},{name:"Description",prop:"description",flexGrow:5,pipe:this.emptyPipe},{name:"System Role",prop:"system",cellClass:"text-center",flexGrow:1,cellTransformation:ci.e.checkIcon}]}getRoles(){(0,w.D)([this.roleService.list(),this.scopeService.list()]).subscribe(Sn=>{this.roles=Sn[0],this.scopes=Sn[1]})}updateSelection(Sn){this.selection=Sn}deleteRole(Sn){this.roleService.delete(Sn).subscribe(()=>{this.getRoles(),this.modalRef.close(),this.notificationService.show(x.k.success,"Deleted role '" + Sn + "'")},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}deleteRoleModal(){const Sn=this.selection.first().name;this.modalRef=this.modalService.show(pr.M,{itemDescription:"Role",itemNames:[Sn],submitAction:()=>this.deleteRole(Sn)})}cloneRole(){const Sn=this.selection.first().name;this.modalRef=this.modalService.show(mi.X,{fields:[{type:"text",name:"newName",value:`${Sn}_clone`,label:"New name",required:!0}],titleText:"Clone Role",submitButtonText:"Clone Role",onSubmit:$n=>{this.roleService.clone(Sn,$n.newName).subscribe(()=>{this.getRoles(),this.notificationService.show(x.k.success,"Cloned role '" + $n.newName + "' from '" + Sn + "'")})}})}}return cr.\u0275fac=function(Sn){return new(Sn||cr)(H.Y36(fe),H.Y36(he),H.Y36(Ur.W),H.Y36(er.j),H.Y36(_r.Z),H.Y36(q.g),H.Y36(Hn.F),H.Y36(p.p4))},cr.\u0275cmp=H.Xpm({type:cr,selectors:[["cd-role-list"]],features:[H._Bn([{provide:Hn.F,useValue:new Hn.F("user-management/roles")}]),H.qOj],decls:4,vars:8,consts:[["columnMode","flex","identifier","name","selectionType","single",3,"data","columns","hasDetails","setExpandedRow","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection","scopes"]],template:function(Sn,$n){1&Sn&&(H._UZ(0,"cd-user-tabs"),H.TgZ(1,"cd-table",0),H.NdJ("setExpandedRow",function(ro){return $n.setExpandedRow(ro)})("fetchData",function(){return $n.getRoles()})("updateSelection",function(ro){return $n.updateSelection(ro)}),H._UZ(2,"cd-table-actions",1)(3,"cd-role-details",2),H.qZA()),2&Sn&&(H.xp6(1),H.Q6J("data",$n.roles)("columns",$n.columns)("hasDetails",!0),H.xp6(1),H.Q6J("permission",$n.permission)("selection",$n.selection)("tableActions",$n.tableActions),H.xp6(1),H.Q6J("selection",$n.expandedRow)("scopes",$n.scopes))},directives:[bi,Pe.a,fi.K,xo],styles:[""]}),cr})();var vn=i(16738),Zn=i.n(vn),Xn=i(39219),zn=i(9837),ri=i(36169),Gi=i(7022),ui=i(51907),vr=i(81354),Ji=(()=>((Ji||(Ji={})).editing="editing",Ji))();class mn{}var Rn=i(32057),Wn=i(62862),et=i(18372),Le=i(4416),Re=i(60192),Se=i(52266);const dt=["removeSelfUserReadUpdatePermissionTpl"];function st(cr,pi){1&cr&&(H.TgZ(0,"span",28),H.SDv(1,29),H.qZA())}function nn(cr,pi){1&cr&&(H.TgZ(0,"span",28),H.SDv(1,30),H.qZA())}function Fe(cr,pi){if(1&cr&&H._UZ(0,"cd-helper",39),2&cr){const Sn=H.oxw(3);H.s9C("html",Sn.passwordPolicyHelpText)}}function Lr(cr,pi){1&cr&&(H.TgZ(0,"span",28),H.SDv(1,40),H.qZA())}function ti(cr,pi){if(1&cr&&(H.TgZ(0,"span",28),H._uU(1),H.qZA()),2&cr){const Sn=H.oxw(3);H.xp6(1),H.hij(" ",Sn.passwordValuation," ")}}function Ut(cr,pi){if(1&cr&&(H.TgZ(0,"div",10)(1,"label",31),H.ynx(2),H.SDv(3,32),H.BQk(),H.YNc(4,Fe,1,1,"cd-helper",33),H.qZA(),H.TgZ(5,"div",13)(6,"div",34),H._UZ(7,"input",35)(8,"button",36),H.qZA(),H.TgZ(9,"div",37),H._UZ(10,"div",38),H.qZA(),H.YNc(11,Lr,2,0,"span",15),H.YNc(12,ti,2,1,"span",15),H.qZA()()),2&cr){H.oxw();const Sn=H.MAs(2),$n=H.oxw();H.xp6(4),H.Q6J("ngIf",$n.passwordPolicyHelpText.length>0),H.xp6(6),H.Tol($n.passwordStrengthLevelClass),H.s9C("title",$n.passwordValuation),H.xp6(1),H.Q6J("ngIf",$n.userForm.showError("password",Sn,"required")),H.xp6(1),H.Q6J("ngIf",$n.userForm.showError("password",Sn,"passwordPolicy"))}}function Dn(cr,pi){1&cr&&(H.TgZ(0,"span",28),H.SDv(1,45),H.qZA())}function Et(cr,pi){1&cr&&(H.TgZ(0,"span",28),H.SDv(1,46),H.qZA())}function $t(cr,pi){if(1&cr&&(H.TgZ(0,"div",10)(1,"label",41),H.SDv(2,42),H.qZA(),H.TgZ(3,"div",13)(4,"div",34),H._UZ(5,"input",43)(6,"button",44),H.YNc(7,Dn,2,0,"span",15),H.qZA(),H.YNc(8,Et,2,0,"span",15),H.qZA()()),2&cr){H.oxw();const Sn=H.MAs(2),$n=H.oxw();H.xp6(7),H.Q6J("ngIf",$n.userForm.showError("confirmpassword",Sn,"match")),H.xp6(1),H.Q6J("ngIf",$n.userForm.showError("confirmpassword",Sn,"required"))}}function _t(cr,pi){1&cr&&(H.TgZ(0,"cd-helper",53)(1,"p"),H._uU(2," The Dashboard setting defining the expiration interval of passwords is currently set to "),H.TgZ(3,"strong"),H._uU(4,"0"),H.qZA(),H._uU(5,". This means if a date is set, the user password will only expire once. "),H.qZA(),H.TgZ(6,"p"),H._uU(7," Consider configuring the Dashboard setting "),H.TgZ(8,"a",54),H._uU(9,"USER_PWD_EXPIRATION_SPAN"),H.qZA(),H._uU(10," in order to let passwords expire periodically. "),H.qZA()())}function yt(cr,pi){1&cr&&(H.TgZ(0,"span",28),H.SDv(1,55),H.qZA())}const Vt=function(cr){return{required:cr}};function yn(cr,pi){if(1&cr){const Sn=H.EpF();H.TgZ(0,"div",10)(1,"label",47),H.ynx(2),H.SDv(3,48),H.BQk(),H.YNc(4,_t,11,0,"cd-helper",49),H.qZA(),H.TgZ(5,"div",13)(6,"div",34)(7,"input",50,51),H.NdJ("click",function(){return H.CHM(Sn),H.MAs(8).open()})("keypress",function(){return H.CHM(Sn),H.MAs(8).close()}),H.qZA(),H.TgZ(9,"button",52),H.NdJ("click",function(){return H.CHM(Sn),H.oxw(2).clearExpirationDate()}),H._UZ(10,"i"),H.qZA(),H.YNc(11,yt,2,0,"span",15),H.qZA()()()}if(2&cr){H.oxw();const Sn=H.MAs(2),$n=H.oxw(),Jr=H.MAs(4);H.xp6(1),H.Q6J("ngClass",H.VKq(7,Vt,$n.pwdExpirationSettings.pwdExpirationSpan>0)),H.xp6(3),H.Q6J("ngIf",0==$n.pwdExpirationSettings.pwdExpirationSpan),H.xp6(3),H.Q6J("ngbPopover",Jr),H.xp6(3),H.Gre("icon-prepend ",$n.icons.destroy,""),H.xp6(1),H.Q6J("ngIf",$n.userForm.showError("pwdExpirationDate",Sn,"required"))}}function Cr(cr,pi){1&cr&&(H.TgZ(0,"span",28),H.SDv(1,56),H.qZA())}function xi(cr,pi){if(1&cr&&(H.TgZ(0,"span",57),H._UZ(1,"cd-select-badges",58),H.qZA()),2&cr){const Sn=H.oxw(2);H.xp6(1),H.Q6J("data",Sn.userForm.controls.roles.value)("options",Sn.allRoles)("messages",Sn.messages)}}function yi(cr,pi){1&cr&&(H.TgZ(0,"div",10)(1,"div",59)(2,"div",60),H._UZ(3,"input",61),H.TgZ(4,"label",62),H.SDv(5,63),H.qZA()()()())}function Yo(cr,pi){1&cr&&(H.TgZ(0,"div",10)(1,"div",59)(2,"div",60),H._UZ(3,"input",64),H.TgZ(4,"label",65),H.SDv(5,66),H.qZA()()()())}function Qo(cr,pi){if(1&cr){const Sn=H.EpF();H.TgZ(0,"div",3)(1,"form",4,5)(3,"div",6)(4,"div",7),H.SDv(5,8),H.ALo(6,"titlecase"),H.ALo(7,"upperFirst"),H.qZA(),H.TgZ(8,"div",9)(9,"div",10)(10,"label",11),H.SDv(11,12),H.qZA(),H.TgZ(12,"div",13),H._UZ(13,"input",14),H.YNc(14,st,2,0,"span",15),H.YNc(15,nn,2,0,"span",15),H.qZA()(),H.YNc(16,Ut,13,7,"div",16),H.YNc(17,$t,9,2,"div",16),H.YNc(18,yn,12,9,"div",16),H.TgZ(19,"div",10)(20,"label",17),H.SDv(21,18),H.qZA(),H.TgZ(22,"div",13),H._UZ(23,"input",19),H.qZA()(),H.TgZ(24,"div",10)(25,"label",20),H.SDv(26,21),H.qZA(),H.TgZ(27,"div",13),H._UZ(28,"input",22),H.YNc(29,Cr,2,0,"span",15),H.qZA()(),H.TgZ(30,"div",10)(31,"label",23),H.SDv(32,24),H.qZA(),H.TgZ(33,"div",13),H.YNc(34,xi,2,3,"span",25),H.qZA()(),H.YNc(35,yi,6,0,"div",16),H.YNc(36,Yo,6,0,"div",16),H.qZA(),H.TgZ(37,"div",26)(38,"cd-form-button-panel",27),H.NdJ("submitActionEvent",function(){return H.CHM(Sn),H.oxw().submit()}),H.ALo(39,"titlecase"),H.ALo(40,"upperFirst"),H.qZA()()()()()}if(2&cr){const Sn=H.MAs(2),$n=H.oxw();H.xp6(1),H.Q6J("formGroup",$n.userForm),H.xp6(6),H.pQV(H.lcZ(6,15,$n.action))(H.lcZ(7,17,$n.resource)),H.QtT(5),H.xp6(3),H.Q6J("ngClass",H.VKq(23,Vt,$n.mode!==$n.userFormMode.editing)),H.xp6(4),H.Q6J("ngIf",$n.userForm.showError("username",Sn,"required")),H.xp6(1),H.Q6J("ngIf",$n.userForm.showError("username",Sn,"notUnique")),H.xp6(1),H.Q6J("ngIf",!$n.authStorageService.isSSO()),H.xp6(1),H.Q6J("ngIf",!$n.authStorageService.isSSO()),H.xp6(1),H.Q6J("ngIf",!$n.authStorageService.isSSO()),H.xp6(11),H.Q6J("ngIf",$n.userForm.showError("email",Sn,"email")),H.xp6(5),H.Q6J("ngIf",$n.allRoles),H.xp6(1),H.Q6J("ngIf",!$n.isCurrentUser()),H.xp6(1),H.Q6J("ngIf",!$n.isCurrentUser()&&!$n.authStorageService.isSSO()),H.xp6(2),H.Q6J("form",$n.userForm)("submitText",H.lcZ(39,19,$n.action)+" "+H.lcZ(40,21,$n.resource))}}function lo(cr,pi){1&cr&&(H.TgZ(0,"p")(1,"strong"),H.SDv(2,67),H.qZA()(),H._UZ(3,"br"),H.TgZ(4,"p"),H.SDv(5,68),H.qZA(),H.ynx(6),H.SDv(7,69),H.BQk())}function Ri(cr,pi){if(1&cr&&H._UZ(0,"cd-date-time-picker",70),2&cr){const Sn=H.oxw();H.Q6J("control",Sn.userForm.get("pwdExpirationDate"))("hasTime",!1)}}let ko=(()=>{class cr extends B.E{constructor(Sn,$n,Jr,ro,go,Ro,Ys,ds,es,ma,Ea,fa){super(),this.authService=Sn,this.authStorageService=$n,this.route=Jr,this.router=ro,this.modalService=go,this.roleService=Ro,this.userService=Ys,this.notificationService=ds,this.actionLabels=es,this.passwordPolicyService=ma,this.formBuilder=Ea,this.settingsService=fa,this.userFormMode=Ji,this.messages=new Gi.a({empty:"There are no roles."}),this.passwordPolicyHelpText="",this.icons=hr.P,this.pwdExpirationFormat="YYYY-MM-DD",this.resource="user",this.createForm(),this.messages=new Gi.a({empty:"There are no roles."})}createForm(){this.passwordPolicyService.getHelpText().subscribe(Sn=>{this.passwordPolicyHelpText=Sn}),this.userForm=this.formBuilder.group({username:["",[a.kI.required],[j.h.unique(this.userService.validateUserName,this.userService)]],name:[""],password:["",[],[j.h.passwordPolicy(this.userService,()=>this.userForm.getValue("username"),(Sn,$n,Jr)=>{this.passwordStrengthLevelClass=this.passwordPolicyService.mapCreditsToCssClass($n),this.passwordValuation=M().defaultTo(Jr,"")})]],confirmpassword:[""],pwdExpirationDate:[void 0],email:["",[j.h.email]],roles:[[]],enabled:[!0,[a.kI.required]],pwdUpdateRequired:[!0]},{validators:[j.h.match("password","confirmpassword")]})}ngOnInit(){this.router.url.startsWith("/user-management/users/edit")?(this.mode=this.userFormMode.editing,this.action=this.actionLabels.EDIT):this.action=this.actionLabels.CREATE;const Sn=[this.roleService.list(),this.settingsService.getStandardSettings()];(0,w.D)(Sn).subscribe($n=>{if(this.allRoles=M().map($n[0],Jr=>(Jr.enabled=!0,Jr)),this.pwdExpirationSettings=new ui.G($n[1]),this.mode===this.userFormMode.editing)this.initEdit();else{if(this.pwdExpirationSettings.pwdExpirationSpan>0){const Jr=this.userForm.get("pwdExpirationDate"),ro=Zn()();ro.add(this.pwdExpirationSettings.pwdExpirationSpan,"day"),Jr.setValue(ro.format(this.pwdExpirationFormat)),Jr.setValidators([a.kI.required])}this.loadingReady()}})}initEdit(){this.disableForEdit(),this.route.params.subscribe(Sn=>{this.userService.get(Sn.username).subscribe(Jr=>{this.response=M().cloneDeep(Jr),this.setResponse(Jr),this.loadingReady()})})}disableForEdit(){this.userForm.get("username").disable()}setResponse(Sn){["username","name","email","roles","enabled","pwdUpdateRequired"].forEach(Jr=>this.userForm.get(Jr).setValue(Sn[Jr]));const $n=Sn.pwdExpirationDate;$n&&this.userForm.get("pwdExpirationDate").setValue(Zn()(1e3*$n).format(this.pwdExpirationFormat))}getRequest(){const Sn=new mn;["username","password","name","email","roles","enabled","pwdUpdateRequired"].forEach(Jr=>Sn[Jr]=this.userForm.get(Jr).value);const $n=this.userForm.get("pwdExpirationDate").value;if($n){const Jr=Zn()($n,this.pwdExpirationFormat);(this.mode!==this.userFormMode.editing||this.response.pwdExpirationDate!==Jr.unix())&&Jr.set({hour:23,minute:59,second:59}),Sn.pwdExpirationDate=Jr.unix()}return Sn}createAction(){const Sn=this.getRequest();this.userService.create(Sn).subscribe(()=>{this.notificationService.show(x.k.success,"Created user '" + Sn.username + "'"),this.router.navigate(["/user-management/users"])},()=>{this.userForm.setErrors({cdSubmitButton:!0})})}editAction(){if(this.isUserRemovingNeededRolePermissions()){const Sn={titleText:"Update user",buttonText:"Continue",bodyTpl:this.removeSelfUserReadUpdatePermissionTpl,onSubmit:()=>{this.modalRef.close(),this.doEditAction()},onCancel:()=>{this.userForm.setErrors({cdSubmitButton:!0}),this.userForm.get("roles").reset(this.userForm.get("roles").value)}};this.modalRef=this.modalService.show(ri.Y,Sn)}else this.doEditAction()}isCurrentUser(){return this.authStorageService.getUsername()===this.userForm.getValue("username")}isUserChangingRoles(){return this.isCurrentUser()&&this.response&&!M().isEqual(this.response.roles,this.userForm.getValue("roles"))}isUserRemovingNeededRolePermissions(){return this.isCurrentUser()&&!this.hasUserReadUpdatePermissions(this.userForm.getValue("roles"))}hasUserReadUpdatePermissions(Sn=[]){for(const $n of this.allRoles)if(-1!==Sn.indexOf($n.name)&&$n.scopes_permissions.user){const Jr=$n.scopes_permissions.user;return["read","update"].every(ro=>-1!==Jr.indexOf(ro))}return!1}doEditAction(){const Sn=this.getRequest();this.userService.update(Sn).subscribe(()=>{this.isUserChangingRoles()?this.authService.logout(()=>{this.notificationService.show(x.k.info,"You were automatically logged out because your roles have been changed.")}):(this.notificationService.show(x.k.success,"Updated user '" + Sn.username + "'"),this.router.navigate(["/user-management/users"]))},()=>{this.userForm.setErrors({cdSubmitButton:!0})})}clearExpirationDate(){this.userForm.get("pwdExpirationDate").setValue(void 0)}submit(){this.mode===this.userFormMode.editing?this.editAction():this.createAction()}}return cr.\u0275fac=function(Sn){return new(Sn||cr)(H.Y36(Xn.e),H.Y36(er.j),H.Y36(f.gz),H.Y36(f.F0),H.Y36(_r.Z),H.Y36(fe),H.Y36(Rn.K),H.Y36(q.g),H.Y36(p.p4),H.Y36(vr.q),H.Y36(Wn.O),H.Y36(zn.g))},cr.\u0275cmp=H.Xpm({type:cr,selectors:[["cd-user-form"]],viewQuery:function(Sn,$n){if(1&Sn&&H.Gf(dt,7),2&Sn){let Jr;H.iGM(Jr=H.CRH())&&($n.removeSelfUserReadUpdatePermissionTpl=Jr.first)}},features:[H.qOj],decls:5,vars:1,consts:function(){let pi,Sn,$n,Jr,ro,go,Ro,Ys,ds,es,ma,Ea,fa,sa,Ra,pl,Co,yl,Wo,ys,Wa;return pi="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",Sn="Username",$n="Full name",Jr="Email",ro="Roles",go="This field is required.",Ro="The username already exists.",Ys="Password",ds="This field is required.",es="Confirm password",ma="Password confirmation doesn't match the password.",Ea="This field is required.",fa="Password expiration date",sa="Password expiration date...",Ra="This field is required.",pl="Invalid email.",Co="Enabled",yl="User must change password at next logon",Wo="You are about to remove \"user read / update\" permissions from your own user.",ys="If you continue, you will no longer be able to add or remove roles from any user.",Wa="Are you sure you want to continue?",[["class","cd-col-form",4,"cdFormLoading"],["removeSelfUserReadUpdatePermissionTpl",""],["popContent",""],[1,"cd-col-form"],["name","userForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],pi,[1,"card-body"],[1,"form-group","row"],["for","username",1,"cd-col-form-label",3,"ngClass"],Sn,[1,"cd-col-form-input"],["type","text","placeholder","Username...","id","username","name","username","formControlName","username","autocomplete","off","autofocus","",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],["for","name",1,"cd-col-form-label"],$n,["type","text","placeholder","Full name...","id","name","name","name","formControlName","name",1,"form-control"],["for","email",1,"cd-col-form-label"],Jr,["type","email","placeholder","Email...","id","email","name","email","formControlName","email",1,"form-control"],[1,"cd-col-form-label"],ro,["class","no-border full-height",4,"ngIf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],go,Ro,["for","password",1,"cd-col-form-label"],Ys,["class","text-pre-wrap",3,"html",4,"ngIf"],[1,"input-group"],["type","password","placeholder","Password...","id","password","name","password","autocomplete","new-password","formControlName","password",1,"form-control"],["type","button","cdPasswordButton","password",1,"btn","btn-light"],[1,"password-strength-level"],["data-toggle","tooltip",3,"title"],[1,"text-pre-wrap",3,"html"],ds,["for","confirmpassword",1,"cd-col-form-label"],es,["type","password","placeholder","Confirm password...","id","confirmpassword","name","confirmpassword","autocomplete","new-password","formControlName","confirmpassword",1,"form-control"],["type","button","cdPasswordButton","confirmpassword",1,"btn","btn-light"],ma,Ea,["for","pwdExpirationDate",1,"cd-col-form-label",3,"ngClass"],fa,["class","text-pre-wrap",4,"ngIf"],["placeholder",sa,"id","pwdExpirationDate","name","pwdExpirationDate","formControlName","pwdExpirationDate","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["p","ngbPopover"],["type","button",1,"btn","btn-light",3,"click"],[1,"text-pre-wrap"],["routerLink","/mgr-modules/edit/dashboard",1,"alert-link"],Ra,pl,[1,"no-border","full-height"],[3,"data","options","messages"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","enabled","name","enabled","formControlName","enabled",1,"custom-control-input"],["for","enabled",1,"custom-control-label"],Co,["type","checkbox","id","pwdUpdateRequired","name","pwdUpdateRequired","formControlName","pwdUpdateRequired",1,"custom-control-input"],["for","pwdUpdateRequired",1,"custom-control-label"],yl,Wo,ys,Wa,[3,"control","hasTime"]]},template:function(Sn,$n){1&Sn&&(H.YNc(0,Qo,41,25,"div",0),H.YNc(1,lo,8,0,"ng-template",null,1,H.W1O),H.YNc(3,Ri,1,2,"ng-template",null,2,H.W1O)),2&Sn&&H.Q6J("cdFormLoading",$n.loading)},directives:[Ce.y,a._Y,a.JL,a.sg,ce.V,Be.P,r.mk,Ve.o,a.Fj,Xe.b,a.JJ,a.u,He.U,r.O5,et.S,Le.C,f.yS,u.o8,Re.m,a.Wl,Ge.p,Se.J],pipes:[r.rS,Oe.m],styles:[""]}),cr})();var Xo=i(96102),ir=i(94088);const si=["userRolesTpl"],kn=["warningTpl"],nr=["durationTpl"];function jr(cr,pi){if(1&cr&&(H.TgZ(0,"span"),H._uU(1),H.qZA()),2&cr){const Sn=pi.$implicit,$n=pi.last;H.xp6(1),H.AsE(" ",Sn,"",$n?"":", "," ")}}function ao(cr,pi){1&cr&&H.YNc(0,jr,2,2,"span",5),2&cr&&H.Q6J("ngForOf",pi.value)}function $i(cr,pi){if(1&cr&&(H.TgZ(0,"div",6)(1,"div",7),H._uU(2),H.qZA()()),2&cr){const Sn=pi.value,$n=pi.row,Jr=H.oxw();H.ekj("border-danger",$n.remainingDays<Jr.expirationDangerAlert)("border-warning",$n.remainingDays<Jr.expirationWarningAlert&&$n.remainingDays>=Jr.expirationDangerAlert),H.xp6(2),H.hij(" ",Sn," ")}}function Eo(cr,pi){if(1&cr&&H._UZ(0,"i",10),2&cr){const Sn=H.oxw().row,$n=H.oxw();H.Tol($n.icons.warning),H.ekj("icon-danger-color",Sn.remainingDays<$n.expirationDangerAlert)("icon-warning-color",Sn.remainingDays<$n.expirationWarningAlert&&Sn.remainingDays>=$n.expirationDangerAlert)}}function mo(cr,pi){if(1&cr&&(H.YNc(0,Eo,1,7,"i",8),H.TgZ(1,"span",9),H.ALo(2,"cdDate"),H._uU(3),H.ALo(4,"duration"),H.qZA()),2&cr){const Sn=pi.value,$n=pi.row,Jr=H.oxw();H.Q6J("ngIf",$n.remainingDays<Jr.expirationWarningAlert),H.xp6(1),H.s9C("title",H.lcZ(2,3,Sn)),H.xp6(2),H.Oqu(H.lcZ(4,5,$n.remainingTimeWithoutSeconds/1e3))}}let ua=(()=>{class cr{constructor(Sn,$n,Jr,ro,go,Ro,Ys,ds){this.userService=Sn,this.emptyPipe=$n,this.modalService=Jr,this.notificationService=ro,this.authStorageService=go,this.urlBuilder=Ro,this.settingsService=Ys,this.actionLabels=ds,this.selection=new Br.r,this.icons=hr.P,this.permission=this.authStorageService.getPermissions().user,this.tableActions=[{permission:"create",icon:hr.P.add,routerLink:()=>this.urlBuilder.getCreate(),name:this.actionLabels.CREATE},{permission:"update",icon:hr.P.edit,routerLink:()=>this.selection.first()&&this.urlBuilder.getEdit(this.selection.first().username),name:this.actionLabels.EDIT},{permission:"delete",icon:hr.P.destroy,click:()=>this.deleteUserModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"Username",prop:"username",flexGrow:1,cellTemplate:this.warningTpl},{name:"Name",prop:"name",flexGrow:1,pipe:this.emptyPipe},{name:"Email",prop:"email",flexGrow:1,pipe:this.emptyPipe},{name:"Roles",prop:"roles",flexGrow:1,cellTemplate:this.userRolesTpl},{name:"Enabled",prop:"enabled",flexGrow:1,cellTransformation:ci.e.checkIcon},{name:"Password expires",prop:"pwdExpirationDate",flexGrow:1,cellTemplate:this.durationTpl}],this.settingsService.getValues(["USER_PWD_EXPIRATION_WARNING_1","USER_PWD_EXPIRATION_WARNING_2"]).subscribe($n=>{this.expirationWarningAlert=$n.USER_PWD_EXPIRATION_WARNING_1,this.expirationDangerAlert=$n.USER_PWD_EXPIRATION_WARNING_2})}getUsers(){this.userService.list().subscribe(Sn=>{Sn.forEach($n=>{$n.remainingTimeWithoutSeconds=0,$n.pwdExpirationDate&&$n.pwdExpirationDate>0&&($n.pwdExpirationDate=1e3*$n.pwdExpirationDate,$n.remainingTimeWithoutSeconds=this.getRemainingTimeWithoutSeconds($n.pwdExpirationDate),$n.remainingDays=this.getRemainingDays($n.pwdExpirationDate))}),this.users=Sn})}updateSelection(Sn){this.selection=Sn}deleteUser(Sn){this.userService.delete(Sn).subscribe(()=>{this.getUsers(),this.modalRef.close(),this.notificationService.show(x.k.success,"Deleted user '" + Sn + "'")},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}deleteUserModal(){const Sn=this.authStorageService.getUsername(),$n=this.selection.first().username;Sn!==$n?this.modalRef=this.modalService.show(pr.M,{itemDescription:"User",itemNames:[$n],submitAction:()=>this.deleteUser($n)}):this.notificationService.show(x.k.error,"Failed to delete user '" + $n + "'","You are currently logged in as '" + $n + "'.")}getWarningIconClass(Sn){return null===Sn||this.expirationWarningAlert>10?"":this.getRemainingDays(Sn)<=this.expirationDangerAlert?"icon-danger-color":"icon-warning-color"}getWarningClass(Sn){return null===Sn||this.expirationWarningAlert>10?"":this.getRemainingDays(Sn)<=this.expirationDangerAlert?"border-danger":"border-warning"}getRemainingDays(Sn){if(void 0!==Sn&&null!=Sn)return Sn<0?0:Math.max(0,Math.floor(this.getRemainingTime(Sn)/864e5))}getRemainingTimeWithoutSeconds(Sn){const $n=this.getRemainingTime(Sn);return 60*Math.floor($n/6e4)*1e3}getRemainingTime(Sn){return Sn-Date.now()}}return cr.\u0275fac=function(Sn){return new(Sn||cr)(H.Y36(Rn.K),H.Y36(Ur.W),H.Y36(_r.Z),H.Y36(q.g),H.Y36(er.j),H.Y36(Hn.F),H.Y36(zn.g),H.Y36(p.p4))},cr.\u0275cmp=H.Xpm({type:cr,selectors:[["cd-user-list"]],viewQuery:function(Sn,$n){if(1&Sn&&(H.Gf(si,7),H.Gf(kn,7),H.Gf(nr,7)),2&Sn){let Jr;H.iGM(Jr=H.CRH())&&($n.userRolesTpl=Jr.first),H.iGM(Jr=H.CRH())&&($n.warningTpl=Jr.first),H.iGM(Jr=H.CRH())&&($n.durationTpl=Jr.first)}},features:[H._Bn([{provide:Hn.F,useValue:new Hn.F("user-management/users")}])],decls:9,vars:5,consts:function(){let pi;return pi="User's password is about to expire",[["columnMode","flex","identifier","username","selectionType","single",3,"data","columns","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["userRolesTpl",""],["warningTpl",""],["durationTpl",""],[4,"ngFor","ngForOf"],[1,"border-margin"],[1,"warning-content"],["title",pi,3,"icon-danger-color","icon-warning-color","class",4,"ngIf"],[3,"title"],["title",pi]]},template:function(Sn,$n){1&Sn&&(H._UZ(0,"cd-user-tabs"),H.TgZ(1,"cd-table",0),H.NdJ("fetchData",function(){return $n.getUsers()})("updateSelection",function(ro){return $n.updateSelection(ro)}),H._UZ(2,"cd-table-actions",1),H.qZA(),H.YNc(3,ao,1,1,"ng-template",null,2,H.W1O),H.YNc(5,$i,3,5,"ng-template",null,3,H.W1O),H.YNc(7,mo,5,7,"ng-template",null,4,H.W1O)),2&Sn&&(H.xp6(1),H.Q6J("data",$n.users)("columns",$n.columns),H.xp6(1),H.Q6J("permission",$n.permission)("selection",$n.selection)("tableActions",$n.tableActions))},directives:[bi,Pe.a,fi.K,r.sg,r.O5],pipes:[Xo.N,ir.u],styles:[".border-margin[_ngcontent-%COMP%]{border-left:3px solid transparent;height:calc(100% + 10px);margin-bottom:-5px;margin-left:-5px;margin-top:-5px}.warning-content[_ngcontent-%COMP%]{height:100%;padding-bottom:5px;padding-left:5px;padding-top:5px}"]}),cr})(),or=(()=>{class cr{}return cr.\u0275fac=function(Sn){return new(Sn||cr)},cr.\u0275mod=H.oAB({type:cr}),cr.\u0275inj=H.cJS({imports:[[r.ez,a.u5,a.UX,g.m,u.Oz,u.dT,e.b,f.Bz]]}),cr})();const Mr=[{path:"",redirectTo:"users",pathMatch:"full"},{path:"users",data:{breadcrumbs:"Users"},children:[{path:"",component:ua},{path:p.MQ.CREATE,component:ko,data:{breadcrumbs:p.Qn.CREATE}},{path:`${p.MQ.EDIT}/:username`,component:ko,data:{breadcrumbs:p.Qn.EDIT}}]},{path:"roles",data:{breadcrumbs:"Roles"},children:[{path:"",component:an},{path:p.MQ.CREATE,component:Gt,data:{breadcrumbs:p.Qn.CREATE}},{path:`${p.MQ.EDIT}/:name`,component:Gt,data:{breadcrumbs:p.Qn.EDIT}}]}];let Ar=(()=>{class cr{}return cr.\u0275fac=function(Sn){return new(Sn||cr)},cr.\u0275mod=H.oAB({type:cr}),cr.\u0275inj=H.cJS({imports:[[or,f.Bz.forChild(Mr)]]}),cr})()},26504:(v,b,i)=>{"use strict";i.d(b,{_2:()=>f,mM:()=>e,s9:()=>a});var r=i(65862);class a extends Error{}class f extends a{constructor(){super(...arguments),this.header="Page Not Found",this.message="Sorry, we couldn\u2019t find what you were looking for.\n  The page you requested may have been changed or moved.",this.icon=r.P.warning}}class e extends a{constructor(){super(...arguments),this.header="User Denied",this.message="Sorry, the user does not exist in Ceph.\n  You'll be logged out from the Identity Provider when you retry logging in.",this.icon=r.P.warning}}},76189:(v,b,i)=>{"use strict";i.d(b,{S:()=>r});class r{getVersionHeaderValue(f,u){return`application/vnd.ceph.api.v${f}.${u}+json`}}},39219:(v,b,i)=>{"use strict";i.d(b,{e:()=>S});var r=i(23815),f=i(68307),u=i(89724),e=i(47640),p=i(19725),g=i(55860);let S=(()=>{class M{constructor(x,B,W,j){this.authStorageService=x,this.http=B,this.router=W,this.route=j}check(x){return this.http.post("api/auth/check",{token:x})}login(x){return this.http.post("api/auth",x).pipe((0,f.b)(B=>{this.authStorageService.set(B.username,B.permissions,B.sso,B.pwdExpirationDate,B.pwdUpdateRequired)}))}logout(x=null){return this.http.post("api/auth/logout",null).subscribe(B=>{this.authStorageService.remove();const W=r.get(this.route.snapshot.queryParams,"returnUrl","/login");this.router.navigate([W],{skipLocationChange:!0}),x&&x(),window.location.replace(B.redirect_url)})}}return M.\u0275fac=function(x){return new(x||M)(u.LFG(e.j),u.LFG(p.eN),u.LFG(g.F0),u.LFG(g.gz))},M.\u0275prov=u.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})()},64724:(v,b,i)=>{"use strict";i.d(b,{e:()=>f});var r=i(89724),a=i(19725);let f=(()=>{class u{constructor(p){this.http=p}findValue(p,g){if(p.value)return p.value.find(S=>S.section===g)}getValue(p,g){let S=this.findValue(p,g);if(!S){const M=g.indexOf(".");-1!==M&&(S=this.findValue(p,g.substring(0,M)))}return S||(S=this.findValue(p,"global")),S?S.value:p.default}getConfigData(){return this.http.get("api/cluster_conf/")}get(p){return this.http.get(`api/cluster_conf/${p}`)}filter(p){return this.http.get(`api/cluster_conf/filter?names=${p.join(",")}`)}create(p){return this.http.post("api/cluster_conf/",p)}delete(p,g){return this.http.delete(`api/cluster_conf/${p}?section=${g}`)}bulkCreate(p){return this.http.put("api/cluster_conf/",p)}}return u.\u0275fac=function(p){return new(p||u)(r.LFG(a.eN))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},83608:(v,b,i)=>{"use strict";i.d(b,{H:()=>f});var r=i(89724),a=i(19725);let f=(()=>{class u{constructor(p){this.http=p,this.apiPath="api/crush_rule",this.formTooltips={root:"The name of the node under which data should be placed.",failure_domain:"The type of CRUSH nodes across which we should separate replicas.",device_class:"The device class data should be placed on."}}create(p){return this.http.post(this.apiPath,p,{observe:"response"})}delete(p){return this.http.delete(`${this.apiPath}/${p}`,{observe:"response"})}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}}return u.\u0275fac=function(p){return new(p||u)(r.LFG(a.eN))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},7273:(v,b,i)=>{"use strict";i.d(b,{N:()=>f});var r=i(89724),a=i(19725);let f=(()=>{class u{constructor(p){this.http=p,this.url="api/mgr/module"}list(){return this.http.get(`${this.url}`)}getConfig(p){return this.http.get(`${this.url}/${p}`)}updateConfig(p,g){return this.http.put(`${this.url}/${p}`,{config:g})}enable(p){return this.http.post(`${this.url}/${p}/enable`,null)}disable(p){return this.http.post(`${this.url}/${p}/disable`,null)}getOptions(p){return this.http.get(`${this.url}/${p}/options`)}}return u.\u0275fac=function(p){return new(p||u)(r.LFG(a.eN))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},80842:(v,b,i)=>{"use strict";i.d(b,{q:()=>g});var r=i(64762),a=i(19725),f=i(88002),u=i(93523),e=i(34089),p=i(89724);let g=class{constructor(M,w){this.http=M,this.rbdConfigurationService=w,this.apiPath="api/pool"}create(M){return this.http.post(this.apiPath,M,{observe:"response"})}update(M){let w;return M.hasOwnProperty("srcpool")?(w=M.srcpool,delete M.srcpool):(w=M.pool,delete M.pool),this.http.put(`${this.apiPath}/${encodeURIComponent(w)}`,M,{observe:"response"})}delete(M){return this.http.delete(`${this.apiPath}/${M}`,{observe:"response"})}get(M){return this.http.get(`${this.apiPath}/${M}`)}getList(){return this.http.get(`${this.apiPath}?stats=true`)}getConfiguration(M){return this.http.get(`${this.apiPath}/${M}/configuration`).pipe((0,f.U)(w=>w.map(x=>Object.assign(x,this.rbdConfigurationService.getOptionByName(x.name)))))}getInfo(){return this.http.get(`ui-${this.apiPath}/info`)}list(M=[]){const w=M.join(",");return this.http.get(`${this.apiPath}?attrs=${w}`).toPromise().then(x=>x)}};g.\u0275fac=function(M){return new(M||g)(p.LFG(a.eN),p.LFG(e.n))},g.\u0275prov=p.Yz7({token:g,factory:g.\u0275fac,providedIn:"root"}),g=(0,r.gn)([u.o,(0,r.w6)("design:paramtypes",[a.eN,e.n])],g)},95152:(v,b,i)=>{"use strict";i.d(b,{o:()=>B});var r=i(64762),a=i(19725),f=i(23815),u=i.n(f),e=i(25917),p=i(96736),g=i(5304),S=i(76189),M=i(20523),w=i(93523),x=i(89724);let B=class extends S.S{constructor(j,q){super(),this.http=j,this.rgwDaemonService=q,this.url="api/rgw/bucket"}list(j=!1,q=""){return this.rgwDaemonService.request(ue=>(ue=ue.append("stats",j.toString()),q&&(ue=ue.append("uid",q)),this.http.get(this.url,{headers:{Accept:this.getVersionHeaderValue(1,1)},params:ue})))}get(j){return this.rgwDaemonService.request(q=>this.http.get(`${this.url}/${j}`,{params:q}))}create(j,q,ue,re,H,se,ae,ie,fe,he){return this.rgwDaemonService.request(Ce=>this.http.post(this.url,null,{params:new a.LE({fromObject:{bucket:j,uid:q,zonegroup:ue,placement_target:re,lock_enabled:String(H),lock_mode:se,lock_retention_period_days:ae,encryption_state:String(ie),encryption_type:fe,key_id:he,daemon_name:Ce.get("daemon_name")}})}))}update(j,q,ue,re,H,se,ae,ie,fe,he,Ce,ce){return this.rgwDaemonService.request(Be=>(Be=Be.appendAll({bucket_id:q,uid:ue,versioning_state:re,encryption_state:String(H),encryption_type:se,key_id:ae,mfa_delete:ie,mfa_token_serial:fe,mfa_token_pin:he,lock_mode:Ce,lock_retention_period_days:ce}),this.http.put(`${this.url}/${j}`,null,{params:Be})))}delete(j,q=!0){return this.rgwDaemonService.request(ue=>(ue=ue.append("purge_objects",q?"true":"false"),this.http.delete(`${this.url}/${j}`,{params:ue})))}exists(j){return this.get(j).pipe((0,p.h)(!0),(0,g.K)(q=>(u().isFunction(q.preventDefault)&&q.preventDefault(),(0,e.of)(!1))))}getLockDays(j){return j.lock_retention_period_years>0?Math.floor(365.242*j.lock_retention_period_years):j.lock_retention_period_days||0}setEncryptionConfig(j,q,ue,re,H,se,ae,ie,fe,he,Ce,ce){return this.rgwDaemonService.request(Be=>(Be=Be.appendAll({encryption_type:j,kms_provider:q,auth_method:ue,secret_engine:re,secret_path:H,namespace:se,address:ae,token:ie,owner:fe,ssl_cert:he,client_cert:Ce,client_key:ce}),this.http.put(`${this.url}/setEncryptionConfig`,null,{params:Be})))}getEncryption(j){return this.rgwDaemonService.request(q=>this.http.get(`${this.url}/${j}/getEncryption`,{params:q}))}deleteEncryption(j){return this.rgwDaemonService.request(q=>this.http.get(`${this.url}/${j}/deleteEncryption`,{params:q}))}getEncryptionConfig(){return this.rgwDaemonService.request(j=>this.http.get(`${this.url}/getEncryptionConfig`,{params:j}))}};B.\u0275fac=function(j){return new(j||B)(x.LFG(a.eN),x.LFG(M.b))},B.\u0275prov=x.Yz7({token:B,factory:B.\u0275fac,providedIn:"root"}),B=(0,r.gn)([w.o,(0,r.w6)("design:paramtypes",[a.eN,M.b])],B)},20523:(v,b,i)=>{"use strict";i.d(b,{b:()=>W});var r=i(64762),a=i(19725),f=i(23815),u=i.n(f),e=i(26215),p=i(40205),g=i(25917),S=i(68307),M=i(19773),w=i(15257),x=i(93523),B=i(89724);let W=class{constructor(q){this.http=q,this.url="api/rgw/daemon",this.daemons=new e.X([]),this.daemons$=this.daemons.asObservable(),this.selectedDaemon=new e.X(null),this.selectedDaemon$=this.selectedDaemon.asObservable()}list(){return this.http.get(this.url).pipe((0,S.b)(q=>{this.daemons.next(q);const ue=this.selectedDaemon.getValue();(u().isEmpty(ue)||void 0===u().find(q,{id:ue.id}))&&this.selectDefaultDaemon(q)}))}get(q){return this.http.get(`${this.url}/${q}`)}selectDaemon(q){this.selectedDaemon.next(q)}selectDefaultDaemon(q){if(0===q.length)return null;for(const ue of q)if(ue.default)return this.selectDaemon(ue),ue;return this.selectDaemon(q[0]),q[0]}request(q){return this.selectedDaemon.pipe((0,M.zg)(ue=>u().isEmpty(ue)?this.list().pipe((0,M.zg)(re=>u().isEmpty(re)?(0,p._)("No RGW daemons found!"):this.selectedDaemon$)):(0,g.of)(ue)),(0,w.q)(1),(0,M.zg)(ue=>{let re=new a.LE;return re=re.append("daemon_name",ue.id),q(re)}))}};W.\u0275fac=function(q){return new(q||W)(B.LFG(a.eN))},W.\u0275prov=B.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W=(0,r.gn)([x.o,(0,r.w6)("design:paramtypes",[a.eN])],W)},33394:(v,b,i)=>{"use strict";i.d(b,{I:()=>S});var r=i(64762),a=i(19725),f=i(19773),u=i(88002),e=i(20523),p=i(93523),g=i(89724);let S=class{constructor(w,x){this.http=w,this.rgwDaemonService=x,this.url="api/rgw/site"}get(w){return this.rgwDaemonService.request(x=>(w&&(x=x.append("query",w)),this.http.get(this.url,{params:x})))}isDefaultRealm(){return this.get("default-realm").pipe((0,f.zg)(w=>this.rgwDaemonService.selectedDaemon$.pipe((0,u.U)(x=>x.realm_name===w))))}};S.\u0275fac=function(w){return new(w||S)(g.LFG(a.eN),g.LFG(e.b))},S.\u0275prov=g.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S=(0,r.gn)([p.o,(0,r.w6)("design:paramtypes",[a.eN,e.b])],S)},9837:(v,b,i)=>{"use strict";i.d(b,{g:()=>g});var r=i(23815),a=i.n(r),f=i(88002),u=i(89724),e=i(19725);let g=(()=>{class S{constructor(w){this.http=w,this.settings={}}getValues(w){return a().isArray(w)&&(w=w.join(",")),this.http.get(`api/settings?names=${w}`).pipe((0,f.U)(x=>{const B={};return a().forEach(x,W=>{a().set(B,W.name,W.value)}),B}))}ifSettingConfigured(w,x,B){const W=this.settings[w];void 0===W?this.http.get(w).subscribe(j=>{this.settings[w]=this.getSettingsValue(j),this.ifSettingConfigured(w,x,B)},j=>{401!==j.status&&(this.settings[w]="")}):""!==W?x(W):B&&B()}disableSetting(w){this.settings[w]=""}getSettingsValue(w){return w.value||w.instance||""}validateGrafanaDashboardUrl(w){return this.http.get(`api/grafana/validation/${w}`)}getStandardSettings(){return this.http.get("ui-api/standard_settings")}}return S.\u0275fac=function(w){return new(w||S)(u.LFG(e.eN))},S.\u0275prov=u.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},32057:(v,b,i)=>{"use strict";i.d(b,{K:()=>p});var r=i(25917),a=i(96736),f=i(5304),u=i(89724),e=i(19725);let p=(()=>{class g{constructor(M){this.http=M}list(){return this.http.get("api/user")}delete(M){return this.http.delete(`api/user/${M}`)}get(M){return this.http.get(`api/user/${M}`)}create(M){return this.http.post("api/user",M)}update(M){return this.http.put(`api/user/${M.username}`,M)}changePassword(M,w,x){return this.http.post(`api/user/${M}/change_password`,{old_password:w,new_password:x})}validateUserName(M){return this.get(M).pipe((0,a.h)(!0),(0,f.K)(w=>(w.preventDefault(),(0,r.of)(!1))))}validatePassword(M,w=null,x=null){return this.http.post("api/user/validate_password",{password:M,username:w,old_password:x})}}return g.\u0275fac=function(M){return new(M||g)(u.LFG(e.eN))},g.\u0275prov=u.Yz7({token:g,factory:g.\u0275fac,providedIn:"root"}),g})()},51295:(v,b,i)=>{"use strict";i.d(b,{T:()=>f});var r=i(23815),a=i.n(r);class f{static updateChanged(e,p){let g=!1;return Object.keys(p).forEach(S=>{const M=p[S];a().isEqual(M,e[S])||(e[S]=M,g=!0)}),g}static cdVersionHeader(e,p){return`application/vnd.ceph.api.v${e}.${p}+json`}}},99475:(v,b,i)=>{"use strict";i.d(b,{P:()=>r});class r{propertyValue(f){return getComputedStyle(document.body).getPropertyValue(`--${f}`)}}},68136:(v,b,i)=>{"use strict";i.d(b,{o:()=>a});var r=i(71225);class a{constructor(u){this.ngZone=u}setExpandedRow(u){this.expandedRow=u}setTableRefreshTimeout(){clearTimeout(this.staleTimeout),this.ngZone.runOutsideAngular(()=>{this.staleTimeout=window.setTimeout(()=>{this.ngZone.run(()=>{this.tableStatus=new r.c("warning","The user list data might be stale. If needed, you can manually reload it.")})},1e4)})}}},69158:(v,b,i)=>{"use strict";i.d(b,{E:()=>f});var r=i(91801),a=i(71225);class f extends a.c{constructor(e=r.T.ValueOk,p=""){switch(super(),e){case r.T.ValueOk:this.type="light",this.msg="";break;case r.T.ValueNone:this.type="info",this.msg=(p?"Retrieving data for " + p + ".":"Retrieving data.")+" "+"Please wait...";break;case r.T.ValueStale:this.type="warning",this.msg=p?"Displaying previously cached data for " + p + ".":"Displaying previously cached data.";break;case r.T.ValueException:this.type="danger",this.msg=(p?"Could not load data for " + p + ".":"Could not load data.")+" "+"Please check the cluster health."}}}},71225:(v,b,i)=>{"use strict";i.d(b,{c:()=>r});class r{constructor(f="light",u=""){this.type=f,this.msg=u}}},34501:(v,b,i)=>{"use strict";i.d(b,{G:()=>ue});var r=i(89724),a=i(65862),f=i(71334),u=i(11048);const e=function(re){return[re]};function p(re,H){if(1&re&&(r.TgZ(0,"td",8),r._UZ(1,"i",9),r.qZA()),2&re){const se=r.oxw(2);r.xp6(1),r.MT6("alert-",se.bootstrapClass," ",se.typeIcon,""),r.Q6J("ngClass",r.VKq(5,e,se.icons.large3x))}}function g(re,H){if(1&re&&(r.TgZ(0,"td",10),r._uU(1),r.qZA()),2&re){const se=r.oxw(2);r.xp6(1),r.Oqu(se.title)}}function S(re,H){1&re&&r.GkF(0)}function M(re,H){if(1&re&&(r.ynx(0),r.TgZ(1,"tr"),r.YNc(2,p,2,7,"td",4),r.YNc(3,g,2,1,"td",5),r.qZA(),r.TgZ(4,"tr")(5,"td",6),r.YNc(6,S,1,0,"ng-container",7),r.qZA()(),r.BQk()),2&re){const se=r.oxw(),ae=r.MAs(6);r.xp6(2),r.Q6J("ngIf",se.showIcon),r.xp6(1),r.Q6J("ngIf",se.showTitle),r.xp6(3),r.Q6J("ngTemplateOutlet",ae)}}function w(re,H){if(1&re&&(r.TgZ(0,"td",12),r._UZ(1,"i",13),r.qZA()),2&re){const se=r.oxw(2);r.xp6(1),r.MT6("alert-",se.bootstrapClass," ",se.typeIcon,"")}}function x(re,H){if(1&re&&(r.TgZ(0,"td",10),r._uU(1),r.qZA()),2&re){const se=r.oxw(2);r.xp6(1),r.Oqu(se.title)}}function B(re,H){1&re&&r.GkF(0)}function W(re,H){if(1&re&&(r.TgZ(0,"tr"),r.YNc(1,w,2,4,"td",11),r.YNc(2,x,2,1,"td",5),r.TgZ(3,"td",6),r.YNc(4,B,1,0,"ng-container",7),r.qZA()()),2&re){const se=r.oxw(),ae=r.MAs(6);r.xp6(1),r.Q6J("ngIf",se.showIcon),r.xp6(1),r.Q6J("ngIf",se.showTitle),r.xp6(2),r.Q6J("ngTemplateOutlet",ae)}}function j(re,H){1&re&&r.Hsn(0)}const q=["*"];let ue=(()=>{class re{constructor(){this.title="",this.bootstrapClass="",this.size="normal",this.showIcon=!0,this.showTitle=!0,this.dismissible=!1,this.dismissed=new r.vpe,this.icons=a.P}ngOnInit(){switch(this.type){case"warning":this.title=this.title||"Warning",this.typeIcon=this.typeIcon||a.P.warning,this.bootstrapClass=this.bootstrapClass||"warning";break;case"error":this.title=this.title||"Error",this.typeIcon=this.typeIcon||a.P.destroyCircle,this.bootstrapClass=this.bootstrapClass||"danger";break;case"info":this.title=this.title||"Information",this.typeIcon=this.typeIcon||a.P.infoCircle,this.bootstrapClass=this.bootstrapClass||"info";break;case"success":this.title=this.title||"Success",this.typeIcon=this.typeIcon||a.P.check,this.bootstrapClass=this.bootstrapClass||"success";break;case"danger":this.title=this.title||"Danger",this.typeIcon=this.typeIcon||a.P.warning,this.bootstrapClass=this.bootstrapClass||"danger"}}onClose(){this.dismissed.emit()}}return re.\u0275fac=function(se){return new(se||re)},re.\u0275cmp=r.Xpm({type:re,selectors:[["cd-alert-panel"]],inputs:{title:"title",bootstrapClass:"bootstrapClass",type:"type",typeIcon:"typeIcon",size:"size",showIcon:"showIcon",showTitle:"showTitle",dismissible:"dismissible"},outputs:{dismissed:"dismissed"},ngContentSelectors:q,decls:7,vars:4,consts:[[3,"type","dismissible","closed"],[4,"ngIf","ngIfElse"],["slim",""],["content",""],["rowspan","2","class","alert-panel-icon",4,"ngIf"],["class","alert-panel-title",4,"ngIf"],[1,"alert-panel-text"],[4,"ngTemplateOutlet"],["rowspan","2",1,"alert-panel-icon"],["aria-hidden","true",3,"ngClass"],[1,"alert-panel-title"],["class","alert-panel-icon",4,"ngIf"],[1,"alert-panel-icon"],["aria-hidden","true"]],template:function(se,ae){if(1&se&&(r.F$t(),r.TgZ(0,"ngb-alert",0),r.NdJ("closed",function(){return ae.onClose()}),r.TgZ(1,"table"),r.YNc(2,M,7,3,"ng-container",1),r.YNc(3,W,5,3,"ng-template",null,2,r.W1O),r.qZA()(),r.YNc(5,j,1,0,"ng-template",null,3,r.W1O)),2&se){const ie=r.MAs(4);r.s9C("type",ae.bootstrapClass),r.Q6J("dismissible",ae.dismissible),r.xp6(2),r.Q6J("ngIf","normal"===ae.size)("ngIfElse",ie)}},directives:[f.xm,u.O5,u.mk,u.tP],styles:[".alert-panel-icon[_ngcontent-%COMP%]{padding-right:.5em;vertical-align:top}.alert-panel-title[_ngcontent-%COMP%]{font-weight:700}.alert[_ngcontent-%COMP%]{margin-bottom:0}"]}),re})()},13472:(v,b,i)=>{"use strict";i.d(b,{W:()=>e});var r=i(89724),a=i(79512),f=i(11048),u=i(87925);let e=(()=>{class p{constructor(S,M){this.location=S,this.actionLabels=M,this.backAction=new r.vpe,this.name=this.actionLabels.CANCEL}back(){0===this.backAction.observers.length?this.location.back():this.backAction.emit()}}return p.\u0275fac=function(S){return new(S||p)(r.Y36(f.Ye),r.Y36(a.p4))},p.\u0275cmp=r.Xpm({type:p,selectors:[["cd-back-button"]],inputs:{name:"name"},outputs:{backAction:"backAction"},decls:2,vars:1,consts:[["aria-label","Back","type","button",1,"btn","btn-light","tc_backButton",3,"click"]],template:function(S,M){1&S&&(r.TgZ(0,"button",0),r.NdJ("click",function(){return M.back()}),r._uU(1),r.qZA()),2&S&&(r.xp6(1),r.hij(" ",M.name,"\n"))},directives:[u.o],styles:[""]}),p})()},15626:(v,b,i)=>{"use strict";i.d(b,{K:()=>x});var r=i(11048),a=i(1659),f=i(55860),u=i(71334),e=i(90504),p=i(72621),g=i(85770),S=i(35540),M=i(12455),w=i(89724);let x=(()=>{class B{}return B.\u0275fac=function(j){return new(j||B)},B.\u0275mod=w.oAB({type:B}),B.\u0275inj=w.cJS({providers:[],imports:[[r.ez,a.u5,a.UX,u._A,u.dT,u.ZQ,u.HK,p.m9,a.UX,M.D,S.o,u.XC,e.w,g.t,f.Bz,u.M,u.UL]]}),B})()},36169:(v,b,i)=>{"use strict";i.d(b,{Y:()=>x});var r=i(1659),a=i(89724),f=i(71334),u=i(60312),e=i(11048),p=i(41582),g=i(30839);function S(B,W){1&B&&(a.TgZ(0,"span",11),a._UZ(1,"i",12),a.qZA())}function M(B,W){1&B&&a.GkF(0)}function w(B,W){if(1&B&&(a.TgZ(0,"p"),a._uU(1),a.qZA()),2&B){const j=a.oxw();a.xp6(1),a.hij(" ",j.description," ")}}let x=(()=>{class B{constructor(j){this.activeModal=j,this.warning=!1,this.showSubmit=!0,this.showCancel=!0,this.boundCancel=this.cancel.bind(this),this.canceled=!1,this.confirmationForm=new r.cw({})}ngOnInit(){if(this.bodyContext=this.bodyContext||{},this.bodyContext.$implicit=this.bodyData,!this.onSubmit)throw new Error("No submit action defined");if(!this.buttonText)throw new Error("No action name defined");if(!this.titleText)throw new Error("No title defined");if(!this.bodyTpl&&!this.description)throw new Error("No description defined")}ngOnDestroy(){this.onCancel&&this.canceled&&this.onCancel()}cancel(){this.canceled=!0,this.activeModal.close()}stopLoadingSpinner(){this.confirmationForm.setErrors({cdSubmitButton:!0})}}return B.\u0275fac=function(j){return new(j||B)(a.Y36(f.Kz))},B.\u0275cmp=a.Xpm({type:B,selectors:[["cd-confirmation-modal"]],decls:12,vars:10,consts:[[3,"hide"],[1,"modal-title"],["class","text-warning",4,"ngIf"],[1,"modal-content"],["name","confirmationForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","showCancel","showSubmit","submitActionEvent","backActionEvent"],[1,"text-warning"],[1,"fa","fa-exclamation-triangle","fa-1x"]],template:function(j,q){1&j&&(a.TgZ(0,"cd-modal",0),a.NdJ("hide",function(){return q.cancel()}),a.ynx(1,1),a.YNc(2,S,2,0,"span",2),a._uU(3),a.BQk(),a.ynx(4,3),a.TgZ(5,"form",4,5)(7,"div",6),a.YNc(8,M,1,0,"ng-container",7),a.YNc(9,w,2,1,"p",8),a.qZA(),a.TgZ(10,"div",9)(11,"cd-form-button-panel",10),a.NdJ("submitActionEvent",function(){return q.onSubmit(q.confirmationForm.value)})("backActionEvent",function(){return q.boundCancel()}),a.qZA()()(),a.BQk(),a.qZA()),2&j&&(a.xp6(2),a.Q6J("ngIf",q.warning),a.xp6(1),a.Oqu(q.titleText),a.xp6(2),a.Q6J("formGroup",q.confirmationForm),a.xp6(3),a.Q6J("ngTemplateOutlet",q.bodyTpl)("ngTemplateOutletContext",q.bodyContext),a.xp6(1),a.Q6J("ngIf",q.description),a.xp6(2),a.Q6J("form",q.confirmationForm)("submitText",q.buttonText)("showCancel",q.showCancel)("showSubmit",q.showSubmit))},directives:[u.z,e.O5,r._Y,r.JL,r.sg,p.V,e.tP,g.p],styles:[""]}),B})()},58039:(v,b,i)=>{"use strict";i.d(b,{s:()=>S});var r=i(97057),a=i(65862),f=i(89724),u=i(92870),e=i(87925),p=i(11048);const g=function(M){return[M]};let S=(()=>{class M{constructor(x){this.toastr=x,this.byId=!0,this.icons=a.P}getText(){return document.getElementById(this.source).value}onClick(){try{const x=(0,r.qY)(),B=this.byId?this.getText():this.source,W=()=>{this.toastr.success("Copied text to the clipboard successfully.")};["firefox","ie","ios","safari"].includes(x.name)?navigator.clipboard.writeText(B).then(()=>W()):navigator.permissions.query({name:"clipboard-write"}).then(j=>{("granted"===j.state||"prompt"===j.state)&&navigator.clipboard.writeText(B).then(()=>W())})}catch(x){this.toastr.error("Failed to copy text to the clipboard.")}}}return M.\u0275fac=function(x){return new(x||M)(f.Y36(u._W))},M.\u0275cmp=f.Xpm({type:M,selectors:[["cd-copy-2-clipboard-button"]],hostBindings:function(x,B){1&x&&f.NdJ("click",function(){return B.onClick()})},inputs:{source:"source",byId:"byId"},decls:2,vars:3,consts:function(){let w;return w="Copy to Clipboard",[["type","button","title",w,1,"btn","btn-light",3,"click"],[3,"ngClass"]]},template:function(x,B){1&x&&(f.TgZ(0,"button",0),f.NdJ("click",function(){return B.onClick()}),f._UZ(1,"i",1),f.qZA()),2&x&&(f.xp6(1),f.Q6J("ngClass",f.VKq(1,g,B.icons.clipboard)))},directives:[e.o,p.mk],styles:[""]}),M})()},30982:(v,b,i)=>{"use strict";i.d(b,{M:()=>Ce});var r=i(1659),a=i(95463),f=i(39749),u=i(89724),e=i(71334),p=i(60312),g=i(11048),S=i(41582),M=i(56310),w=i(87925),x=i(94276),B=i(82945),W=i(30839);function j(ce,Be){1&ce&&u.GkF(0)}function q(ce,Be){1&ce&&u.GkF(0)}function ue(ce,Be){if(1&ce&&(u.TgZ(0,"p"),u.tHW(1,21),u.ALo(2,"lowercase"),u._UZ(3,"strong"),u.N_p(),u.qZA()),2&ce){const Ve=u.oxw(2);u.xp6(3),u.pQV(u.lcZ(2,2,Ve.actionDescription))(Ve.itemNames[0]),u.QtT(1)}}function re(ce,Be){if(1&ce&&(u.TgZ(0,"li")(1,"strong"),u._uU(2),u.qZA()()),2&ce){const Ve=Be.$implicit;u.xp6(2),u.Oqu(Ve)}}function H(ce,Be){if(1&ce&&(u.TgZ(0,"p"),u.SDv(1,22),u.ALo(2,"lowercase"),u.qZA(),u.TgZ(3,"ul"),u.YNc(4,re,3,1,"li",23),u.qZA()),2&ce){const Ve=u.oxw(2);u.xp6(2),u.pQV(u.lcZ(2,2,Ve.actionDescription)),u.QtT(1),u.xp6(2),u.Q6J("ngForOf",Ve.itemNames)}}function se(ce,Be){if(1&ce&&(u.TgZ(0,"span"),u.YNc(1,ue,4,4,"p",10),u.YNc(2,H,5,4,"ng-template",null,20,u.W1O),u.qZA()),2&ce){const Ve=u.MAs(3),Xe=u.oxw();u.xp6(1),u.Q6J("ngIf",1===Xe.itemNames.length)("ngIfElse",Ve)}}function ae(ce,Be){if(1&ce&&(u.TgZ(0,"p"),u.SDv(1,24),u.ALo(2,"lowercase"),u.qZA()),2&ce){const Ve=u.oxw();u.xp6(2),u.pQV(u.lcZ(2,2,Ve.actionDescription))(Ve.itemDescription),u.QtT(1)}}function ie(ce,Be){1&ce&&u.GkF(0)}function fe(ce,Be){if(1&ce&&(u._uU(0),u.ALo(1,"titlecase")),2&ce){const Ve=u.oxw();u.AsE(" ",u.lcZ(1,2,Ve.actionDescription)," ",Ve.itemDescription,"\n")}}const he=function(ce){return{form:ce}};let Ce=(()=>{class ce{constructor(Ve){this.activeModal=Ve,this.actionDescription="delete"}ngOnInit(){const Ve={confirmation:new r.NI(!1,[r.kI.requiredTrue])};if(this.childFormGroup&&(Ve.child=this.childFormGroup),this.deletionForm=new a.d(Ve),!this.submitAction&&!this.submitActionObservable)throw new Error("No submit action defined")}callSubmitAction(){this.submitActionObservable?this.submitActionObservable().subscribe({error:this.stopLoadingSpinner.bind(this),complete:this.hideModal.bind(this)}):this.submitAction()}hideModal(){this.activeModal.close()}stopLoadingSpinner(){this.deletionForm.setErrors({cdSubmitButton:!0})}}return ce.\u0275fac=function(Ve){return new(Ve||ce)(u.Y36(e.Kz))},ce.\u0275cmp=u.Xpm({type:ce,selectors:[["cd-deletion-modal"]],viewQuery:function(Ve,Xe){if(1&Ve&&u.Gf(f.w,7),2&Ve){let He;u.iGM(He=u.CRH())&&(Xe.submitButton=He.first)}},decls:24,vars:15,consts:function(){let Be,Ve,Xe,He;return Be="Yes, I am sure.",Ve="Are you sure that you want to " + "\ufffd0\ufffd" + " " + "\ufffd#3\ufffd" + "" + "\ufffd1\ufffd" + "" + "\ufffd/#3\ufffd" + "?",Xe="Are you sure that you want to " + "\ufffd0\ufffd" + " the selected items?",He="Are you sure that you want to " + "\ufffd0\ufffd" + " the selected " + "\ufffd1\ufffd" + "?",[[3,"modalRef"],["modal",""],[1,"modal-title"],[4,"ngTemplateOutlet"],[1,"modal-content"],["name","deletionForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[4,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"question"],[4,"ngIf","ngIfElse"],["noNames",""],[1,"form-group"],[1,"custom-control","custom-checkbox"],["type","checkbox","name","confirmation","id","confirmation","formControlName","confirmation","autofocus","",1,"custom-control-input"],["for","confirmation",1,"custom-control-label"],Be,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],["deletionHeading",""],["manyNames",""],Ve,Xe,[4,"ngFor","ngForOf"],He]},template:function(Ve,Xe){if(1&Ve&&(u.TgZ(0,"cd-modal",0,1),u.ynx(2,2),u.YNc(3,j,1,0,"ng-container",3),u.BQk(),u.ynx(4,4),u.TgZ(5,"form",5,6)(7,"div",7),u.YNc(8,q,1,0,"ng-container",8),u.TgZ(9,"div",9),u.YNc(10,se,4,2,"span",10),u.YNc(11,ae,3,4,"ng-template",null,11,u.W1O),u.YNc(13,ie,1,0,"ng-container",8),u.TgZ(14,"div",12)(15,"div",13),u._UZ(16,"input",14),u.TgZ(17,"label",15),u.SDv(18,16),u.qZA()()()()(),u.TgZ(19,"div",17)(20,"cd-form-button-panel",18),u.NdJ("submitActionEvent",function(){return Xe.callSubmitAction()}),u.ALo(21,"titlecase"),u.qZA()()(),u.BQk(),u.qZA(),u.YNc(22,fe,2,4,"ng-template",null,19,u.W1O)),2&Ve){const He=u.MAs(12),Pe=u.MAs(23);u.Q6J("modalRef",Xe.activeModal),u.xp6(3),u.Q6J("ngTemplateOutlet",Pe),u.xp6(2),u.Q6J("formGroup",Xe.deletionForm),u.xp6(3),u.Q6J("ngTemplateOutlet",Xe.bodyTemplate)("ngTemplateOutletContext",Xe.bodyContext),u.xp6(2),u.Q6J("ngIf",Xe.itemNames)("ngIfElse",He),u.xp6(3),u.Q6J("ngTemplateOutlet",Xe.childFormGroupTemplate)("ngTemplateOutletContext",u.VKq(13,he,Xe.deletionForm)),u.xp6(7),u.Q6J("form",Xe.deletionForm)("submitText",u.lcZ(21,11,Xe.actionDescription)+" "+Xe.itemDescription)}},directives:[p.z,g.tP,r._Y,r.JL,r.sg,S.V,g.O5,g.sg,M.P,w.o,r.Wl,x.b,r.JJ,r.u,B.U,W.p],pipes:[g.i8,g.rS],styles:[".modal-body[_ngcontent-%COMP%]   .question[_ngcontent-%COMP%]{margin-top:1em}.modal-body[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{font-weight:700}.modal-body[_ngcontent-%COMP%]   .question[_ngcontent-%COMP%]   .form-check[_ngcontent-%COMP%]{padding-top:7px}"]}),ce})()},52266:(v,b,i)=>{"use strict";i.d(b,{J:()=>S});var r=i(16738),a=i.n(r),f=i(89724),u=i(71334),e=i(1659),p=i(11048);function g(M,w){if(1&M){const x=f.EpF();f.TgZ(0,"div",0)(1,"ngb-timepicker",4),f.NdJ("ngModelChange",function(W){return f.CHM(x),f.oxw().time=W})("ngModelChange",function(){return f.CHM(x),f.oxw().onModelChange()}),f.qZA()()}if(2&M){const x=f.oxw();f.xp6(1),f.Q6J("seconds",x.hasSeconds)("ngModel",x.time)}}let S=(()=>{class M{constructor(x){this.calendar=x,this.hasSeconds=!0,this.hasTime=!0}ngOnInit(){var x;this.minDate=this.calendar.getToday(),this.format=this.hasTime?this.hasSeconds?"YYYY-MM-DD HH:mm:ss":"YYYY-MM-DD HH:mm":"YYYY-MM-DD";let B=a()(null===(x=this.control)||void 0===x?void 0:x.value,this.format);(!B.isValid()||B.isBefore(a()()))&&(B=a()()),this.date={year:B.year(),month:B.month()+1,day:B.date()},this.time={hour:B.hour(),minute:B.minute(),second:B.second()},this.onModelChange()}onModelChange(){if(this.date){const x=Object.assign({},this.date,this.time);x.month--,setTimeout(()=>{this.control.setValue(a()(x).format(this.format))})}else setTimeout(()=>{this.control.setValue("")})}}return M.\u0275fac=function(x){return new(x||M)(f.Y36(u.vL))},M.\u0275cmp=f.Xpm({type:M,selectors:[["cd-date-time-picker"]],inputs:{control:"control",hasSeconds:"hasSeconds",hasTime:"hasTime"},decls:4,vars:3,consts:[[1,"d-flex","justify-content-center"],[3,"ngModel","minDate","ngModelChange"],["dp",""],["class","d-flex justify-content-center",4,"ngIf"],[3,"seconds","ngModel","ngModelChange"]],template:function(x,B){1&x&&(f.TgZ(0,"div",0)(1,"ngb-datepicker",1,2),f.NdJ("ngModelChange",function(j){return B.date=j})("ngModelChange",function(){return B.onModelChange()}),f.qZA()(),f.YNc(3,g,2,2,"div",3)),2&x&&(f.xp6(1),f.Q6J("ngModel",B.date)("minDate",B.minDate),f.xp6(2),f.Q6J("ngIf",B.hasTime))},directives:[u.VL,e.JJ,e.On,p.O5,u.Pm],styles:[""]}),M})()},30490:(v,b,i)=>{"use strict";i.d(b,{K:()=>f});var r=i(72625),a=i(89724);let f=(()=>{class u{constructor(p){this.docService=p,this.docText="documentation"}ngOnInit(){this.noSubscribe?this.docUrl=this.docService.urlGenerator(this.section):this.docService.subscribeOnce(this.section,p=>{this.docUrl=p})}}return u.\u0275fac=function(p){return new(p||u)(a.Y36(r.R))},u.\u0275cmp=a.Xpm({type:u,selectors:[["cd-doc"]],inputs:{section:"section",docText:"docText",noSubscribe:"noSubscribe"},decls:2,vars:2,consts:[["target","_blank",3,"href"]],template:function(p,g){1&p&&(a.TgZ(0,"a",0),a._uU(1),a.qZA()),2&p&&(a.s9C("href",g.docUrl,a.LSH),a.xp6(1),a.Oqu(g.docText))},styles:[""]}),u})()},30839:(v,b,i)=>{"use strict";i.d(b,{p:()=>M});var r=i(89724),a=i(79512),f=i(39749),u=i(11048),e=i(63285),p=i(13472);function g(w,x){if(1&w){const B=r.EpF();r.TgZ(0,"cd-back-button",2),r.NdJ("backAction",function(){return r.CHM(B),r.oxw().backAction()}),r.qZA()}if(2&w){const B=r.oxw();r.Q6J("name",B.cancelText)}}function S(w,x){if(1&w){const B=r.EpF();r.TgZ(0,"cd-submit-button",3),r.NdJ("submitAction",function(){return r.CHM(B),r.oxw().submitAction()}),r._uU(1),r.qZA()}if(2&w){const B=r.oxw();r.Q6J("disabled",B.disabled)("form",B.form)("ariaLabel",B.submitText),r.xp6(1),r.Oqu(B.submitText)}}let M=(()=>{class w{constructor(B,W,j){this.location=B,this.actionLabels=W,this.modalService=j,this.submitActionEvent=new r.vpe,this.backActionEvent=new r.vpe,this.showSubmit=!0,this.showCancel=!0,this.wrappingClass="",this.btnClass="",this.submitText=this.actionLabels.CREATE,this.cancelText=this.actionLabels.CANCEL,this.disabled=!1}submitAction(){this.submitActionEvent.emit()}backAction(){0===this.backActionEvent.observers.length?this.modalService.hasOpenModals()?this.modalService.dismissAll():this.location.back():this.backActionEvent.emit()}}return w.\u0275fac=function(B){return new(B||w)(r.Y36(u.Ye),r.Y36(a.p4),r.Y36(e.Z))},w.\u0275cmp=r.Xpm({type:w,selectors:[["cd-form-button-panel"]],viewQuery:function(B,W){if(1&B&&r.Gf(f.w,5),2&B){let j;r.iGM(j=r.CRH())&&(W.submitButton=j.first)}},inputs:{form:"form",showSubmit:"showSubmit",showCancel:"showCancel",wrappingClass:"wrappingClass",btnClass:"btnClass",submitText:"submitText",cancelText:"cancelText",disabled:"disabled"},outputs:{submitActionEvent:"submitActionEvent",backActionEvent:"backActionEvent"},decls:3,vars:4,consts:[["class","m-2",3,"name","backAction",4,"ngIf"],["data-cy","submitBtn",3,"disabled","form","ariaLabel","submitAction",4,"ngIf"],[1,"m-2",3,"name","backAction"],["data-cy","submitBtn",3,"disabled","form","ariaLabel","submitAction"]],template:function(B,W){1&B&&(r.TgZ(0,"div"),r.YNc(1,g,1,1,"cd-back-button",0),r.YNc(2,S,2,4,"cd-submit-button",1),r.qZA()),2&B&&(r.Tol(W.wrappingClass),r.xp6(1),r.Q6J("ngIf",W.showCancel),r.xp6(1),r.Q6J("ngIf",W.showSubmit))},directives:[u.O5,p.W,f.w],styles:[""]}),w})()},65683:(v,b,i)=>{"use strict";i.d(b,{X:()=>Ge});var r=i(1659),a=i(23815),f=i.n(a),u=i(47557),e=i(28211),p=i(89724),g=i(71334),S=i(62862),M=i(60312),w=i(11048),x=i(41582),B=i(87925),W=i(94276),j=i(17932),q=i(60192),ue=i(30839);function re(Oe,Tt){if(1&Oe&&(p.ynx(0,10),p._uU(1),p.BQk()),2&Oe){const We=p.oxw();p.xp6(1),p.hij(" ",We.titleText," ")}}function H(Oe,Tt){if(1&Oe&&(p.TgZ(0,"p"),p._uU(1),p.qZA()),2&Oe){const We=p.oxw();p.xp6(1),p.Oqu(We.message)}}const se=function(Oe){return{required:Oe}};function ae(Oe,Tt){if(1&Oe&&(p.TgZ(0,"label",18),p._uU(1),p.qZA()),2&Oe){const We=p.oxw().$implicit;p.Q6J("ngClass",p.VKq(3,se,!0===(null==We?null:We.required)))("for",We.name),p.xp6(1),p.hij(" ",We.label," ")}}function ie(Oe,Tt){if(1&Oe&&p._UZ(0,"input",19),2&Oe){const We=p.oxw().$implicit;p.Q6J("type",We.type)("id",We.name)("name",We.name)("formControlName",We.name)}}function fe(Oe,Tt){if(1&Oe&&p._UZ(0,"input",20),2&Oe){const We=p.oxw().$implicit;p.Q6J("id",We.name)("name",We.name)("formControlName",We.name)}}function he(Oe,Tt){if(1&Oe&&(p.TgZ(0,"option",24),p._uU(1),p.qZA()),2&Oe){const We=p.oxw(2).$implicit;p.Q6J("ngValue",null),p.xp6(1),p.hij(" ",null==We||null==We.typeConfig?null:We.typeConfig.placeholder," ")}}function Ce(Oe,Tt){if(1&Oe&&(p.TgZ(0,"option",25),p._uU(1),p.qZA()),2&Oe){const We=Tt.$implicit;p.Q6J("value",We.value),p.xp6(1),p.hij(" ",We.text," ")}}function ce(Oe,Tt){if(1&Oe&&(p.TgZ(0,"select",21),p.YNc(1,he,2,2,"option",22),p.YNc(2,Ce,2,2,"option",23),p.qZA()),2&Oe){const We=p.oxw().$implicit;p.Q6J("id",We.name)("formControlName",We.name),p.xp6(1),p.Q6J("ngIf",null==We||null==We.typeConfig?null:We.typeConfig.placeholder),p.xp6(1),p.Q6J("ngForOf",null==We||null==We.typeConfig?null:We.typeConfig.options)}}function Be(Oe,Tt){if(1&Oe&&p._UZ(0,"cd-select-badges",26),2&Oe){const We=p.oxw().$implicit;p.Q6J("id",We.name)("data",We.value)("customBadges",null==We||null==We.typeConfig?null:We.typeConfig.customBadges)("options",null==We||null==We.typeConfig?null:We.typeConfig.options)("messages",null==We||null==We.typeConfig?null:We.typeConfig.messages)}}function Ve(Oe,Tt){if(1&Oe&&(p.TgZ(0,"span",27),p._uU(1),p.qZA()),2&Oe){const We=p.oxw().$implicit,Qt=p.oxw();p.xp6(1),p.hij(" ",Qt.getError(We)," ")}}const Xe=function(Oe,Tt){return{"cd-col-form-input":Oe,"col-sm-12":Tt}},He=function(){return["text","number"]};function Pe(Oe,Tt){if(1&Oe&&(p.ynx(0),p.TgZ(1,"div"),p.YNc(2,ae,2,5,"label",11),p.TgZ(3,"div",12),p.YNc(4,ie,1,4,"input",13),p.YNc(5,fe,1,3,"input",14),p.YNc(6,ce,3,4,"select",15),p.YNc(7,Be,1,5,"cd-select-badges",16),p.YNc(8,Ve,2,1,"span",17),p.qZA()(),p.BQk()),2&Oe){const We=Tt.$implicit,Qt=p.oxw(),Nt=p.MAs(4);p.xp6(1),p.Gre("form-group row cd-",We.name,"-form-group"),p.xp6(1),p.Q6J("ngIf",We.label),p.xp6(1),p.Q6J("ngClass",p.WLB(10,Xe,We.label,!We.label)),p.xp6(1),p.Q6J("ngIf",p.DdM(13,He).includes(We.type)),p.xp6(1),p.Q6J("ngIf","binary"===We.type),p.xp6(1),p.Q6J("ngIf","select"===We.type),p.xp6(1),p.Q6J("ngIf","select-badges"===We.type),p.xp6(1),p.Q6J("ngIf",Qt.formGroup.showError(We.name,Nt))}}let Ge=(()=>{class Oe{constructor(We,Qt,Nt,Yt){this.activeModal=We,this.formBuilder=Qt,this.formatter=Nt,this.dimlessBinaryPipe=Yt}ngOnInit(){this.createForm()}createForm(){const We={};this.fields.forEach(Qt=>{We[Qt.name]=this.createFormControl(Qt)}),this.formGroup=this.formBuilder.group(We)}createFormControl(We){let Qt=[];return f().isBoolean(We.required)&&We.required&&Qt.push(r.kI.required),We.validators&&(Qt=Qt.concat(We.validators)),new r.NI(f().defaultTo("binary"===We.type?this.dimlessBinaryPipe.transform(We.value):We.value,null),{validators:Qt})}getError(We){const Qt=this.formGroup.get(We.name).errors;return Object.keys(Qt).map(Yt=>this.getErrorMessage(Yt,Qt[Yt],We.errors)).join("<br>")}getErrorMessage(We,Qt,Nt){if(Nt){const Yt=Nt[We];if(Yt)return Yt}return["binaryMin","binaryMax"].includes(We)?Qt():"required"===We?"This field is required.":"An error occurred."}onSubmitForm(We){this.fields.filter(Nt=>"binary"===Nt.type).map(Nt=>Nt.name).forEach(Nt=>{const Yt=We[Nt];Yt&&(We[Nt]=this.formatter.toBytes(Yt))}),this.activeModal.close(),f().isFunction(this.onSubmit)&&this.onSubmit(We)}}return Oe.\u0275fac=function(We){return new(We||Oe)(p.Y36(g.Kz),p.Y36(S.O),p.Y36(e.H),p.Y36(u.$))},Oe.\u0275cmp=p.Xpm({type:Oe,selectors:[["cd-form-modal"]],decls:10,vars:7,consts:[[3,"modalRef"],["class","modal-title",4,"ngIf"],[1,"modal-content"],["novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[4,"ngIf"],[4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"modal-title"],["class","cd-col-form-label",3,"ngClass","for",4,"ngIf"],[3,"ngClass"],["class","form-control",3,"type","id","name","formControlName",4,"ngIf"],["type","text","class","form-control","cdDimlessBinary","",3,"id","name","formControlName",4,"ngIf"],["class","form-select",3,"id","formControlName",4,"ngIf"],[3,"id","data","customBadges","options","messages",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],[1,"cd-col-form-label",3,"ngClass","for"],[1,"form-control",3,"type","id","name","formControlName"],["type","text","cdDimlessBinary","",1,"form-control",3,"id","name","formControlName"],[1,"form-select",3,"id","formControlName"],[3,"ngValue",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],[3,"ngValue"],[3,"value"],[3,"id","data","customBadges","options","messages"],[1,"invalid-feedback"]],template:function(We,Qt){1&We&&(p.TgZ(0,"cd-modal",0),p.YNc(1,re,2,1,"ng-container",1),p.ynx(2,2),p.TgZ(3,"form",3,4)(5,"div",5),p.YNc(6,H,2,1,"p",6),p.YNc(7,Pe,9,14,"ng-container",7),p.qZA(),p.TgZ(8,"div",8)(9,"cd-form-button-panel",9),p.NdJ("submitActionEvent",function(){return Qt.onSubmitForm(Qt.formGroup.value)}),p.qZA()()(),p.BQk(),p.qZA()),2&We&&(p.Q6J("modalRef",Qt.activeModal),p.xp6(1),p.Q6J("ngIf",Qt.titleText),p.xp6(2),p.Q6J("formGroup",Qt.formGroup),p.xp6(3),p.Q6J("ngIf",Qt.message),p.xp6(1),p.Q6J("ngForOf",Qt.fields),p.xp6(2),p.Q6J("form",Qt.formGroup)("submitText",Qt.submitButtonText))},directives:[M.z,w.O5,r._Y,r.JL,r.sg,x.V,w.sg,w.mk,B.o,r.Fj,W.b,r.JJ,r.u,j.Q,r.EJ,r.YN,r.Kr,q.m,ue.p],styles:[""]}),Oe})()},76317:(v,b,i)=>{"use strict";i.d(b,{F:()=>ae});var r=i(9837),a=i(65862),f=i(89724),u=i(14800),e=i(11048),p=i(8958),g=i(34501),S=i(30490),M=i(87925),w=i(1659);function x(ie,fe){1&ie&&(f.TgZ(0,"cd-loading-panel"),f.SDv(1,2),f.qZA())}function B(ie,fe){1&ie&&(f.TgZ(0,"cd-alert-panel",3),f.tHW(1,4),f._UZ(2,"cd-doc",5),f.N_p(),f.qZA())}function W(ie,fe){1&ie&&(f.TgZ(0,"cd-alert-panel",3),f.tHW(1,6),f._UZ(2,"cd-doc",5),f.N_p(),f.qZA())}function j(ie,fe){if(1&ie&&(f.TgZ(0,"option",25),f._uU(1),f.qZA()),2&ie){const he=fe.$implicit;f.Q6J("ngValue",he.value),f.xp6(1),f.hij("",he.name," ")}}function q(ie,fe){if(1&ie){const he=f.EpF();f.TgZ(0,"cd-alert-panel",28),f.NdJ("dismissed",function(){return f.CHM(he),f.oxw(3).showMessage=!1}),f.tHW(1,29),f._UZ(2,"a",30),f.N_p(),f.qZA()}if(2&ie){const he=f.oxw(3);f.xp6(2),f.Q6J("href",he.grafanaSrc,f.LSH)}}function ue(ie,fe){if(1&ie&&(f.TgZ(0,"div",26),f.YNc(1,q,3,1,"cd-alert-panel",27),f.qZA()),2&ie){const he=f.oxw(2);f.xp6(1),f.Q6J("ngIf",he.showMessage)}}const re=function(ie){return[ie]},H=function(ie,fe){return[ie,fe]};function se(ie,fe){if(1&ie){const he=f.EpF();f.ynx(0),f.TgZ(1,"div",7)(2,"div",8)(3,"div",9)(4,"label",10),f.SDv(5,11),f.qZA()(),f.TgZ(6,"div",12)(7,"select",13),f.NdJ("ngModelChange",function(ce){return f.CHM(he),f.oxw().time=ce})("ngModelChange",function(ce){return f.CHM(he),f.oxw().onTimepickerChange(ce)}),f.YNc(8,j,2,2,"option",14),f.qZA()(),f.TgZ(9,"div",15)(10,"button",16),f.NdJ("click",function(){return f.CHM(he),f.oxw().reset()}),f._UZ(11,"i",17),f.qZA()(),f.TgZ(12,"div",15)(13,"button",18),f.NdJ("click",function(){f.CHM(he);const ce=f.oxw();return ce.showMessage=!ce.showMessage}),f._UZ(14,"i",17),f.qZA()()()(),f.TgZ(15,"div",19),f.YNc(16,ue,2,1,"div",20),f.qZA(),f.TgZ(17,"div",19)(18,"div",21)(19,"div",22),f._UZ(20,"iframe",23,24),f.qZA()()(),f.BQk()}if(2&ie){const he=f.oxw();f.xp6(7),f.Q6J("ngModel",he.time),f.xp6(1),f.Q6J("ngForOf",he.grafanaTimes),f.xp6(3),f.Q6J("ngClass",f.VKq(8,re,he.icons.undo)),f.xp6(3),f.Q6J("ngClass",f.WLB(10,H,he.icons.infoCircle,he.icons.large)),f.xp6(2),f.Q6J("ngIf",he.showMessage),f.xp6(4),f.Q6J("src",he.grafanaSrc,f.uOi)("ngClass",he.panelStyle)("title",he.title)}}let ae=(()=>{class ie{constructor(he,Ce){this.sanitizer=he,this.settingsService=Ce,this.grafanaExist=!1,this.mode="&kiosk",this.loading=!0,this.styles={},this.dashboardExist=!0,this.showMessage=!1,this.icons=a.P,this.DEFAULT_TIME="from=now-1h&to=now",this.grafanaTimes=[{name:"Last 5 minutes",value:"from=now-5m&to=now"},{name:"Last 15 minutes",value:"from=now-15m&to=now"},{name:"Last 30 minutes",value:"from=now-30m&to=now"},{name:"Last 1 hour (Default)",value:"from=now-1h&to=now"},{name:"Last 3 hours",value:"from=now-3h&to=now"},{name:"Last 6 hours",value:"from=now-6h&to=now"},{name:"Last 12 hours",value:"from=now-12h&to=now"},{name:"Last 24 hours",value:"from=now-24h&to=now"},{name:"Yesterday",value:"from=now-1d%2Fd&to=now-1d%2Fd"},{name:"Today so far",value:"from=now%2Fd&to=now"},{name:"Day before yesterday",value:"from=now-2d%2Fd&to=now-2d%2Fd"},{name:"Last 2 days",value:"from=now-2d&to=now"},{name:"This day last week",value:"from=now-7d%2Fd&to=now-7d%2Fd"},{name:"Previous week",value:"from=now-1w%2Fw&to=now-1w%2Fw"},{name:"This week so far",value:"from=now%2Fw&to=now"},{name:"Last 7 days",value:"from=now-7d&to=now"},{name:"Previous month",value:"from=now-1M%2FM&to=now-1M%2FM"},{name:"This month so far",value:"from=now%2FM&to=now"},{name:"Last 30 days",value:"from=now-30d&to=now"},{name:"Last 90 days",value:"from=now-90d&to=now"},{name:"Last 6 months",value:"from=now-6M&to=now"},{name:"Last 1 year",value:"from=now-1y&to=now"},{name:"Previous year",value:"from=now-1y%2Fy&to=now-1y%2Fy"},{name:"This year so far",value:"from=now%2Fy&to=now"},{name:"Last 2 years",value:"from=now-2y&to=now"},{name:"Last 5 years",value:"from=now-5y&to=now"}]}ngOnInit(){this.time=this.DEFAULT_TIME,this.styles={one:"grafana_one",two:"grafana_two",three:"grafana_three",four:"grafana_four"},this.datasource="metrics"===this.type?"Dashboard1":"Loki",this.settingsService.ifSettingConfigured("api/grafana/url",he=>{this.grafanaExist=!0,this.loading=!1,this.baseUrl=he+"/d/",this.getFrame()}),this.panelStyle=this.styles[this.grafanaStyle]}getFrame(){this.settingsService.validateGrafanaDashboardUrl(this.uid).subscribe(he=>this.dashboardExist=200===he),this.url="metrics"===this.type?`${this.baseUrl}${this.uid}/${this.grafanaPath}&refresh=2s&var-datasource=${this.datasource}${this.mode}&${this.time}`:`${this.baseUrl.slice(0,-2)}${this.grafanaPath}orgId=1&left=["now-1h","now","${this.datasource}",{"refId":"A"}]${this.mode}`,this.grafanaSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.url)}onTimepickerChange(){this.grafanaExist&&this.getFrame()}reset(){this.time=this.DEFAULT_TIME,this.grafanaExist&&this.getFrame()}ngOnChanges(){this.grafanaExist&&this.getFrame()}}return ie.\u0275fac=function(he){return new(he||ie)(f.Y36(u.H7),f.Y36(r.g))},ie.\u0275cmp=f.Xpm({type:ie,selectors:[["cd-grafana"]],inputs:{type:"type",grafanaPath:"grafanaPath",grafanaStyle:"grafanaStyle",uid:"uid",title:"title"},features:[f.TTD],decls:4,vars:4,consts:function(){let fe,he,Ce,ce,Be,Ve,Xe;return fe="Loading panel data...",he="Please consult the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " on how to configure and enable the monitoring functionality.",Ce="Grafana Dashboard doesn't exist. Please refer to " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " on how to add dashboards to Grafana.",ce="Grafana Time Picker",Be="Reset Settings",Ve="Show hidden information",Xe="If no embedded Grafana Dashboard appeared below, please follow " + "\ufffd#2\ufffd" + "this link " + "\ufffd/#2\ufffd" + " to check if Grafana is reachable and there are no HTTPS certificate issues. You may need to reload this page after accepting any Browser certificate exceptions",[[4,"ngIf"],["type","info",4,"ngIf"],fe,["type","info"],he,["section","grafana"],Ce,[1,"row","mb-3"],[1,"col-lg-5","d-flex"],[1,"col-md-3","timepicker"],["for","timepicker",1,"mt-2"],ce,[1,"col-sm-4"],["id","timepicker","name","timepicker",1,"form-select",3,"ngModel","ngModelChange"],[3,"ngValue",4,"ngFor","ngForOf"],[1,"col-sm-1"],["title",Be,1,"btn","btn-light","ms-3",3,"click"],[3,"ngClass"],["title",Ve,1,"btn","btn-light","ms-3",3,"click"],[1,"row"],["class","col my-2",4,"ngIf"],[1,"col"],[1,"grafana-container"],["id","iframe","frameborder","0","scrolling","no",1,"grafana",3,"src","ngClass","title"],["iframe",""],[3,"ngValue"],[1,"col","my-2"],["type","info","class","mb-3","dismissible","true",3,"dismissed",4,"ngIf"],["type","info","dismissible","true",1,"mb-3",3,"dismissed"],Xe,["target","_blank","noopener","","noreferrer","",3,"href"]]},template:function(he,Ce){1&he&&(f.YNc(0,x,2,0,"cd-loading-panel",0),f.YNc(1,B,3,0,"cd-alert-panel",1),f.YNc(2,W,3,0,"cd-alert-panel",1),f.YNc(3,se,22,13,"ng-container",0)),2&he&&(f.Q6J("ngIf",Ce.loading&&Ce.grafanaExist),f.xp6(1),f.Q6J("ngIf",!Ce.grafanaExist),f.xp6(1),f.Q6J("ngIf",!Ce.dashboardExist),f.xp6(1),f.Q6J("ngIf",Ce.grafanaExist&&Ce.dashboardExist))},directives:[e.O5,p.b,g.G,S.K,M.o,w.EJ,w.JJ,w.On,e.sg,w.YN,w.Kr,e.mk],styles:[".grafana[_ngcontent-%COMP%]{height:600px;width:100%;z-index:0}.grafana_one[_ngcontent-%COMP%]{height:400px}.grafana_two[_ngcontent-%COMP%]{height:750px}.grafana_three[_ngcontent-%COMP%]{height:900px}.grafana_four[_ngcontent-%COMP%]{height:1160px}.timepicker[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{font-weight:700}.dropdown-menu[_ngcontent-%COMP%]{left:auto;right:20px;top:20px}"]}),ie})()},18372:(v,b,i)=>{"use strict";i.d(b,{S:()=>S});var r=i(65862),a=i(89724),f=i(11048),u=i(71334);function e(M,w){if(1&M&&(a._UZ(0,"div",2),a.Hsn(1)),2&M){const x=a.oxw();a.Tol(x.class),a.Q6J("innerHtml",x.html,a.oJD)}}const p=function(M){return[M]},g=["*"];let S=(()=>{class M{constructor(){this.iconClass="",this.icons=r.P}}return M.\u0275fac=function(x){return new(x||M)},M.\u0275cmp=a.Xpm({type:M,selectors:[["cd-helper"]],inputs:{class:"class",iconClass:"iconClass",html:"html"},ngContentSelectors:g,decls:3,vars:4,consts:[["popoverTpl",""],["aria-hidden","true",3,"ngClass","ngbPopover","click"],[3,"innerHtml"]],template:function(x,B){if(1&x&&(a.F$t(),a.YNc(0,e,2,3,"ng-template",null,0,a.W1O),a.TgZ(2,"i",1),a.NdJ("click",function(j){return j.preventDefault()}),a.qZA()),2&x){const W=a.MAs(1);a.xp6(2),a.Q6J("ngClass",B.iconClass?B.iconClass:a.VKq(2,p,B.icons.questionCircle))("ngbPopover",W)}},directives:[f.mk,u.o8],styles:["i[_ngcontent-%COMP%]{color:#25828e;cursor:pointer;padding-left:4px}"]}),M})()},8958:(v,b,i)=>{"use strict";i.d(b,{b:()=>g});var r=i(65862),a=i(89724),f=i(71334),u=i(11048);const e=function(S,M){return[S,M]},p=["*"];let g=(()=>{class S{constructor(){this.icons=r.P}}return S.\u0275fac=function(w){return new(w||S)},S.\u0275cmp=a.Xpm({type:S,selectors:[["cd-loading-panel"]],ngContentSelectors:p,decls:4,vars:5,consts:[["type","info",3,"dismissible"],["aria-hidden","true",1,"me-2",3,"ngClass"]],template:function(w,x){1&w&&(a.F$t(),a.TgZ(0,"ngb-alert",0)(1,"strong"),a._UZ(2,"i",1),a.qZA(),a.Hsn(3),a.qZA()),2&w&&(a.Q6J("dismissible",!1),a.xp6(2),a.Q6J("ngClass",a.WLB(2,e,x.icons.spinner,x.icons.spin)))},directives:[f.xm,u.mk],styles:[""]}),S})()},60312:(v,b,i)=>{"use strict";i.d(b,{z:()=>g});var r=i(89724),a=i(55860),f=i(11048),u=i(87925);const e=[[["",8,"modal-title"]],[["",8,"modal-content"]]],p=[".modal-title",".modal-content"];let g=(()=>{class S{constructor(w){this.router=w,this.hide=new r.vpe}close(){var w;this.pageURL?this.router.navigate([this.pageURL,{outlets:{modal:null}}]):null===(w=this.modalRef)||void 0===w||w.close(),this.hide.emit()}}return S.\u0275fac=function(w){return new(w||S)(r.Y36(a.F0))},S.\u0275cmp=r.Xpm({type:S,selectors:[["cd-modal"]],inputs:{modalRef:"modalRef",pageURL:"pageURL"},outputs:{hide:"hide"},ngContentSelectors:p,decls:8,vars:2,consts:[[3,"ngClass"],[1,"modal-content"],[1,"modal-header"],[1,"modal-title","float-start"],["type","button","aria-label","Close",1,"btn-close","float-end",3,"click"]],template:function(w,x){1&w&&(r.F$t(e),r.TgZ(0,"div",0)(1,"div",0)(2,"div",1)(3,"div",2)(4,"h4",3),r.Hsn(5),r.qZA(),r.TgZ(6,"button",4),r.NdJ("click",function(){return x.close()}),r.qZA()(),r.Hsn(7,1),r.qZA()()()),2&w&&(r.Q6J("ngClass",x.pageURL?"modal":""),r.xp6(1),r.Q6J("ngClass",x.pageURL?"modal-dialog":""))},directives:[f.mk,u.o],styles:[".modal-header[_ngcontent-%COMP%]{background-color:#e9ecef;border-bottom:1px solid #ced4da;border-radius:5px 5px 0 0}  cd-modal .modal-footer{background-color:#e9ecef;border-bottom:1px solid #ced4da;border-radius:0 0 5px 5px}  cd-modal .modal-body{max-height:70vh;overflow-x:hidden;overflow-y:auto}button.close[_ngcontent-%COMP%]{outline:none}"]}),S})()},60192:(v,b,i)=>{"use strict";i.d(b,{m:()=>M});var r=i(89724),a=i(65862),f=i(7022),u=i(39092),e=i(11048);const p=["cdSelect"],g=function(w){return[w]};function S(w,x){if(1&w){const B=r.EpF();r.TgZ(0,"span")(1,"span",4)(2,"span",5),r._uU(3),r.qZA(),r.TgZ(4,"a",6),r.NdJ("click",function(){const q=r.CHM(B).$implicit;return r.oxw(),r.MAs(1).removeItem(q)}),r._UZ(5,"i",7),r.qZA()()()}if(2&w){const B=x.$implicit,W=r.oxw();r.xp6(3),r.Oqu(B),r.xp6(2),r.Q6J("ngClass",r.VKq(2,g,W.icons.destroy))}}let M=(()=>{class w{constructor(){this.data=[],this.options=[],this.messages=new f.a({}),this.customBadges=!1,this.customBadgeValidators=[],this.selection=new r.vpe,this.icons=a.P}}return w.\u0275fac=function(B){return new(B||w)},w.\u0275cmp=r.Xpm({type:w,selectors:[["cd-select-badges"]],viewQuery:function(B,W){if(1&B&&r.Gf(p,7),2&B){let j;r.iGM(j=r.CRH())&&(W.cdSelect=j.first)}},inputs:{data:"data",options:"options",messages:"messages",selectionLimit:"selectionLimit",customBadges:"customBadges",customBadgeValidators:"customBadgeValidators"},outputs:{selection:"selection"},decls:4,vars:10,consts:[["elemClass","me-2 select-menu-edit",3,"data","options","messages","selectionLimit","customBadges","customBadgeValidators","selection"],["cdSelect",""],[3,"ngClass"],[4,"ngFor","ngForOf"],[1,"badge","badge-dark","me-2"],[1,"me-2"],[1,"badge-remove",3,"click"],["aria-hidden","true",3,"ngClass"]],template:function(B,W){1&B&&(r.TgZ(0,"cd-select",0,1),r.NdJ("selection",function(q){return W.selection.emit(q)}),r._UZ(2,"i",2),r.qZA(),r.YNc(3,S,6,4,"span",3)),2&B&&(r.Q6J("data",W.data)("options",W.options)("messages",W.messages)("selectionLimit",W.selectionLimit)("customBadges",W.customBadges)("customBadgeValidators",W.customBadgeValidators),r.xp6(2),r.Q6J("ngClass",r.VKq(8,g,W.icons.edit)),r.xp6(1),r.Q6J("ngForOf",W.data))},directives:[u.H,e.mk,e.sg],styles:[".badge-remove[_ngcontent-%COMP%]{color:#fff}i.fa-pencil[_ngcontent-%COMP%]{font-size:1.1rem}"]}),w})()},7022:(v,b,i)=>{"use strict";i.d(b,{a:()=>f});var r=i(23815),a=i.n(r);class f{constructor(e){this.customValidations={},this.empty="No items selected.",this.selectionLimit={tooltip:"Deselect item to select again",text:"Selection limit reached"},this.filter="Filter tags",this.add="Add badge",this.noOptions="There are no items available.",a().merge(this,e)}}},14745:(v,b,i)=>{"use strict";i.d(b,{$:()=>r});class r{constructor(f,u,e,p=!0){this.selected=f,this.name=u,this.description=e,this.enabled=p}}},39092:(v,b,i)=>{"use strict";i.d(b,{H:()=>He});var r=i(89724),a=i(1659),f=i(23815),u=i.n(f),e=i(65862),p=i(95463),g=i(7022),S=i(14745),M=i(41582),w=i(87925),x=i(94276),B=i(11048),W=i(71334);function j(Pe,Ge){if(1&Pe&&(r.TgZ(0,"span",12),r._uU(1),r.qZA()),2&Pe){const Oe=r.oxw().$implicit,Tt=r.oxw(2);r.xp6(1),r.hij(" ",Tt.messages.customValidations[Oe]," ")}}function q(Pe,Ge){if(1&Pe&&(r.ynx(0),r.YNc(1,j,2,1,"span",11),r.BQk()),2&Pe){const Oe=Ge.$implicit;r.oxw();const Tt=r.MAs(1),We=r.oxw();r.xp6(1),r.Q6J("ngIf",We.form.showError("filter",Tt)&&We.filter.hasError(Oe))}}const ue=function(Pe){return[Pe]};function re(Pe,Ge){if(1&Pe&&r._UZ(0,"i",18),2&Pe){const Oe=r.oxw(3);r.Q6J("ngClass",r.VKq(1,ue,Oe.icons.check))}}function H(Pe,Ge){if(1&Pe&&(r.ynx(0),r._UZ(1,"br"),r.TgZ(2,"small",19),r._uU(3),r.qZA(),r.BQk()),2&Pe){const Oe=r.oxw().$implicit;r.xp6(3),r.hij(" ",Oe.description,"\xa0 ")}}const se=function(Pe){return{"help-block disabled":Pe}};function ae(Pe,Ge){if(1&Pe){const Oe=r.EpF();r.TgZ(0,"div",13),r.NdJ("click",function(){const Qt=r.CHM(Oe).$implicit;return r.oxw(2).triggerSelection(Qt)}),r.TgZ(1,"div",14),r.YNc(2,re,1,3,"i",15),r._uU(3," \xa0 "),r.qZA(),r.TgZ(4,"div",16),r._uU(5),r.YNc(6,H,4,1,"ng-container",17),r.qZA()()}if(2&Pe){const Oe=Ge.$implicit,Tt=r.oxw(2);r.Q6J("ngClass",r.VKq(4,se,!(Tt.data.length!==Tt.selectionLimit&&Oe.enabled||Oe.selected))),r.xp6(2),r.Q6J("ngIf",Oe.selected),r.xp6(3),r.hij(" ",Oe.name," "),r.xp6(1),r.Q6J("ngIf",Oe.description)}}function ie(Pe,Ge){if(1&Pe){const Oe=r.EpF();r.TgZ(0,"div",20),r.NdJ("click",function(){return r.CHM(Oe),r.oxw(2).addCustomOption()}),r.TgZ(1,"div",14),r._UZ(2,"i",18),r._uU(3," \xa0 "),r.qZA(),r.TgZ(4,"div",16),r._uU(5),r.qZA()()}if(2&Pe){const Oe=r.oxw(2);r.xp6(2),r.Q6J("ngClass",r.VKq(3,ue,Oe.icons.tag)),r.xp6(3),r.AsE(" ",Oe.messages.add," '",Oe.filter.value,"' ")}}function fe(Pe,Ge){if(1&Pe&&(r.TgZ(0,"span",23),r._uU(1),r.qZA()),2&Pe){const Oe=r.oxw(3);r.Q6J("ngbTooltip",Oe.messages.selectionLimit.tooltip),r.xp6(1),r.hij(" ",Oe.messages.selectionLimit.text," ")}}function he(Pe,Ge){if(1&Pe&&(r.TgZ(0,"div",21),r.YNc(1,fe,2,2,"span",22),r.qZA()),2&Pe){const Oe=r.oxw(2);r.xp6(1),r.Q6J("ngIf",Oe.data.length===Oe.selectionLimit)}}function Ce(Pe,Ge){if(1&Pe){const Oe=r.EpF();r.TgZ(0,"form",4,5)(2,"div")(3,"input",6),r.NdJ("keyup",function(We){r.CHM(Oe);const Qt=r.oxw();return 13===We.keyCode?Qt.selectOption():Qt.updateFilter()}),r.qZA(),r.YNc(4,q,2,1,"ng-container",7),r.qZA()(),r.YNc(5,ae,7,6,"div",8),r.YNc(6,ie,6,5,"div",9),r.YNc(7,he,2,1,"div",10)}if(2&Pe){const Oe=r.oxw();r.Q6J("formGroup",Oe.form),r.xp6(3),r.Q6J("placeholder",Oe.messages.filter),r.xp6(1),r.Q6J("ngForOf",Oe.Object.keys(Oe.messages.customValidations)),r.xp6(1),r.Q6J("ngForOf",Oe.filteredOptions),r.xp6(1),r.Q6J("ngIf",Oe.isCreatable()),r.xp6(1),r.Q6J("ngIf",Oe.data.length===Oe.selectionLimit)}}function ce(Pe,Ge){if(1&Pe&&(r.TgZ(0,"a",24),r.Hsn(1),r.qZA()),2&Pe){const Oe=r.oxw(),Tt=r.MAs(1);r.Q6J("ngClass",Oe.elemClass)("ngbPopover",Tt)}}function Be(Pe,Ge){if(1&Pe&&(r.TgZ(0,"span",25),r._uU(1),r.qZA()),2&Pe){const Oe=r.oxw();r.xp6(1),r.hij(" ",Oe.messages.empty,"\n")}}function Ve(Pe,Ge){if(1&Pe&&(r.TgZ(0,"span",25),r._uU(1),r.qZA()),2&Pe){const Oe=r.oxw();r.xp6(1),r.hij(" ",Oe.messages.noOptions,"\n")}}const Xe=["*"];let He=(()=>{class Pe{constructor(){this.data=[],this.options=[],this.messages=new g.a({}),this.customBadges=!1,this.customBadgeValidators=[],this.selection=new r.vpe,this.Object=Object,this.filteredOptions=[],this.icons=e.P}ngOnInit(){this.initFilter(),this.data.length>0&&this.initMissingOptions(),this.options=u().sortBy(this.options,["name"]),this.updateOptions()}initFilter(){this.filter=new a.NI("",{validators:this.customBadgeValidators}),this.form=new p.d({filter:this.filter}),this.filteredOptions=[...this.options||[]]}initMissingOptions(){const Oe=this.options.map(We=>We.name);this.data.filter(We=>-1===Oe.indexOf(We)).forEach(We=>this.addOption(We)),this.forceOptionsToReflectData()}addOption(Oe){this.options.push(new S.$(!1,Oe,"")),this.options=u().sortBy(this.options,["name"]),this.triggerSelection(this.options.find(Tt=>Tt.name===Oe))}triggerSelection(Oe){!Oe||this.selectionLimit&&!Oe.selected&&this.data.length>=this.selectionLimit||(Oe.selected=!Oe.selected,this.updateOptions(),this.selection.emit({option:Oe}))}updateOptions(){this.data.splice(0,this.data.length),this.options.forEach(Oe=>{Oe.selected&&this.data.push(Oe.name)}),this.updateFilter()}updateFilter(){this.filteredOptions=this.options.filter(Oe=>Oe.name.includes(this.filter.value))}forceOptionsToReflectData(){this.options.forEach(Oe=>{-1!==this.data.indexOf(Oe.name)&&(Oe.selected=!0)})}ngOnChanges(){this.filter&&this.updateFilter(),this.options&&this.data&&0!==this.data.length&&this.forceOptionsToReflectData()}selectOption(){0===this.filteredOptions.length?this.addCustomOption():(this.triggerSelection(this.filteredOptions[0]),this.resetFilter())}addCustomOption(){!this.isCreatable()||(this.addOption(this.filter.value),this.resetFilter())}isCreatable(){return this.customBadges&&this.filter.valid&&this.filter.value.length>0&&this.filteredOptions.every(Oe=>Oe.name!==this.filter.value)}resetFilter(){this.filter.setValue(""),this.updateFilter()}removeItem(Oe){this.triggerSelection(this.options.find(Tt=>Tt.name===Oe&&Tt.selected))}}return Pe.\u0275fac=function(Oe){return new(Oe||Pe)},Pe.\u0275cmp=r.Xpm({type:Pe,selectors:[["cd-select"]],inputs:{elemClass:"elemClass",data:"data",options:"options",messages:"messages",selectionLimit:"selectionLimit",customBadges:"customBadges",customBadgeValidators:"customBadgeValidators"},outputs:{selection:"selection"},features:[r.TTD],ngContentSelectors:Xe,decls:5,vars:3,consts:[["popTemplate",""],["class","select-menu-edit float-start","data-testid","select-menu-edit",3,"ngClass","ngbPopover",4,"ngIf"],["class","form-text text-muted float-start",4,"ngIf"],["class","form-text text-muted  float-start",4,"ngIf"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],["type","text","formControlName","filter",1,"form-control","text-center",3,"placeholder","keyup"],[4,"ngFor","ngForOf"],["class","select-menu-item",3,"ngClass","click",4,"ngFor","ngForOf"],["class","select-menu-item",3,"click",4,"ngIf"],["class","is-invalid",4,"ngIf"],["class","invalid-feedback text-center d-block",4,"ngIf"],[1,"invalid-feedback","text-center","d-block"],[1,"select-menu-item",3,"ngClass","click"],[1,"select-menu-item-icon"],["aria-hidden","true",3,"ngClass",4,"ngIf"],[1,"select-menu-item-content"],[4,"ngIf"],["aria-hidden","true",3,"ngClass"],[1,"form-text","text-muted"],[1,"select-menu-item",3,"click"],[1,"is-invalid"],["class","form-text text-muted text-center text-warning",3,"ngbTooltip",4,"ngIf"],[1,"form-text","text-muted","text-center","text-warning",3,"ngbTooltip"],["data-testid","select-menu-edit",1,"select-menu-edit","float-start",3,"ngClass","ngbPopover"],[1,"form-text","text-muted","float-start"]],template:function(Oe,Tt){1&Oe&&(r.F$t(),r.YNc(0,Ce,8,6,"ng-template",null,0,r.W1O),r.YNc(2,ce,2,2,"a",1),r.YNc(3,Be,2,1,"span",2),r.YNc(4,Ve,2,1,"span",3)),2&Oe&&(r.xp6(2),r.Q6J("ngIf",Tt.customBadges||Tt.options.length>0),r.xp6(1),r.Q6J("ngIf",0===Tt.data.length&&!(!Tt.customBadges&&0===Tt.options.length)),r.xp6(1),r.Q6J("ngIf",!Tt.customBadges&&0===Tt.options.length))},directives:[a._Y,a.JL,a.sg,M.V,w.o,a.Fj,x.b,a.JJ,a.u,B.sg,B.O5,B.mk,W._L,W.o8],styles:[".select-menu-item[_ngcontent-%COMP%]{border-bottom:1px solid rgba(0,0,0,.09);cursor:pointer;display:block;font-size:1rem}.select-menu-item[_ngcontent-%COMP%]:hover{background-color:#e9ecef}.select-menu-item-icon[_ngcontent-%COMP%]{float:left;padding:.5em;width:3em}.select-menu-item-content[_ngcontent-%COMP%]{padding:.5em}.select-menu-item-content[_ngcontent-%COMP%]   .form-text[_ngcontent-%COMP%]{display:flex}"]}),Pe})()},76446:(v,b,i)=>{"use strict";i.d(b,{l:()=>S});var r=i(87311),a=i(47557),f=i(89724),u=i(11048),e=i(72621);const p=["sparkCanvas"],g=["sparkTooltip"];let S=(()=>{class M{constructor(x){this.dimlessBinaryPipe=x,this.style={height:"30px",width:"100px"},this.colors=[{backgroundColor:"rgba(40,140,234,0.2)",borderColor:"rgba(40,140,234,1)",pointBackgroundColor:"rgba(40,140,234,1)",pointBorderColor:"#fff",pointHoverBackgroundColor:"#fff",pointHoverBorderColor:"rgba(40,140,234,0.8)"}],this.options={animation:{duration:0},responsive:!0,maintainAspectRatio:!1,legend:{display:!1},elements:{line:{borderWidth:1}},tooltips:{enabled:!1,mode:"index",intersect:!1,custom:void 0,callbacks:{label:B=>this.isBinary?this.dimlessBinaryPipe.transform(B.yLabel):B.yLabel,title:()=>""}},scales:{yAxes:[{display:!1}],xAxes:[{display:!1}]}},this.datasets=[{data:[]}],this.labels=[]}ngOnInit(){const W=new r.h(this.chartCanvasRef,this.chartTooltipRef,(j,q)=>q+j.caretX+"px",j=>j.caretY-j.height-j.yPadding-5+"px");W.customColors={backgroundColor:this.colors[0].pointBackgroundColor,borderColor:this.colors[0].pointBorderColor},this.options.tooltips.custom=j=>{W.customTooltips(j)}}ngOnChanges(x){this.datasets[0].data=x.data.currentValue,this.labels=[...Array(x.data.currentValue.length)]}}return M.\u0275fac=function(x){return new(x||M)(f.Y36(a.$))},M.\u0275cmp=f.Xpm({type:M,selectors:[["cd-sparkline"]],viewQuery:function(x,B){if(1&x&&(f.Gf(p,7),f.Gf(g,7)),2&x){let W;f.iGM(W=f.CRH())&&(B.chartCanvasRef=W.first),f.iGM(W=f.CRH())&&(B.chartTooltipRef=W.first)}},inputs:{data:"data",style:"style",isBinary:"isBinary"},features:[f.TTD],decls:6,vars:6,consts:[[1,"chart-container",3,"ngStyle"],["baseChart","",3,"labels","datasets","options","colors","chartType"],["sparkCanvas",""],[1,"chartjs-tooltip"],["sparkTooltip",""]],template:function(x,B){1&x&&(f.TgZ(0,"div",0),f._UZ(1,"canvas",1,2),f.TgZ(3,"div",3,4),f._UZ(5,"table"),f.qZA()()),2&x&&(f.Q6J("ngStyle",B.style),f.xp6(1),f.Q6J("labels",B.labels)("datasets",B.datasets)("options",B.options)("colors",B.colors)("chartType","line"))},directives:[u.PC,e.jh],styles:['.chart-container[_ngcontent-%COMP%]{cursor:pointer;margin:auto;overflow:visible;position:absolute}canvas[_ngcontent-%COMP%]{user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important;opacity:0;pointer-events:none;position:absolute;transform:translate(-50%);transition:all .1s ease}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]:after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]:after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]:after{border-color:#000 transparent transparent transparent;border-style:solid;border-width:5px;content:" ";left:50%;margin-left:-5px;position:absolute;top:100%}  .chartjs-tooltip-key{display:inline-block;height:10px;margin-right:10px;width:10px}.chart-container[_ngcontent-%COMP%]{position:static!important}']}),M})()},39749:(v,b,i)=>{"use strict";i.d(b,{w:()=>x});var r=i(89724),a=i(1659),f=i(23815),u=i.n(f),e=i(65862),p=i(87925),g=i(11048);const S=function(B,W){return[B,W]};function M(B,W){if(1&B&&(r.TgZ(0,"span"),r._UZ(1,"i",2),r.qZA()),2&B){const j=r.oxw();r.xp6(1),r.Q6J("ngClass",r.WLB(1,S,j.icons.spinner,j.icons.spin))}}const w=["*"];let x=(()=>{class B{constructor(j){this.elRef=j,this.type="submit",this.disabled=!1,this.submitAction=new r.vpe,this.loading=!1,this.icons=e.P}ngOnInit(){var j;null===(j=this.form)||void 0===j||j.statusChanges.subscribe(()=>{u().has(this.form.errors,"cdSubmitButton")&&(this.loading=!1,u().unset(this.form.errors,"cdSubmitButton"),this.form instanceof a.TO&&this.form.updateValueAndValidity())})}submit(j){var q;this.focusButton(),this.form instanceof a.sg&&this.form.onSubmit(j),(null===(q=this.form)||void 0===q?void 0:q.invalid)?this.focusInvalid():(this.loading=!0,this.submitAction.emit())}focusButton(){this.elRef.nativeElement.offsetParent.querySelector(`button[type="${this.type}"]`).focus()}focusInvalid(){const j=this.elRef.nativeElement.offsetParent.querySelector("input.ng-invalid, select.ng-invalid");j&&j.focus()}}return B.\u0275fac=function(j){return new(j||B)(r.Y36(r.SBq))},B.\u0275cmp=r.Xpm({type:B,selectors:[["cd-submit-button"]],inputs:{form:"form",type:"type",disabled:"disabled",btnClass:"btnClass",ariaLabel:"ariaLabel"},outputs:{submitAction:"submitAction"},ngContentSelectors:w,decls:3,vars:5,consts:[[1,"btn","btn-accent","tc_submitButton",3,"type","ngClass","disabled","click"],[4,"ngIf"],[3,"ngClass"]],template:function(j,q){1&j&&(r.F$t(),r.TgZ(0,"button",0),r.NdJ("click",function(re){return q.submit(re)}),r.Hsn(1),r.YNc(2,M,2,4,"span",1),r.qZA()),2&j&&(r.Q6J("type",q.type)("ngClass",q.btnClass)("disabled",q.loading||q.disabled),r.uIk("aria-label",q.ariaLabel),r.xp6(2),r.Q6J("ngIf",q.loading))},directives:[p.o,g.mk,g.O5],styles:[""]}),B})()},60251:(v,b,i)=>{"use strict";i.d(b,{O:()=>w});var r=i(89724),a=i(11048),f=i(71334),u=i(47557),e=i(66369);function p(x,B){if(1&x&&(r.TgZ(0,"tr")(1,"td",4),r._uU(2,"Free:\xa0"),r.qZA(),r.TgZ(3,"td",7)(4,"strong"),r._uU(5),r.ALo(6,"dimlessBinary"),r.ALo(7,"dimless"),r.qZA()()()),2&x){const W=r.oxw(2);r.xp6(5),r.Oqu(W.isBinary?r.lcZ(6,1,W.total-W.used):r.lcZ(7,3,W.total-W.used))}}function g(x,B){if(1&x&&(r.TgZ(0,"table")(1,"tr")(2,"td",4),r._uU(3,"Used:\xa0"),r.qZA(),r.TgZ(4,"td",5)(5,"strong"),r._uU(6),r.ALo(7,"dimlessBinary"),r.ALo(8,"dimless"),r.qZA()()(),r.YNc(9,p,8,5,"tr",6),r.qZA()),2&x){const W=r.oxw();r.xp6(6),r.hij(" ",W.isBinary?r.lcZ(7,2,W.used):r.lcZ(8,4,W.used),""),r.xp6(3),r.Q6J("ngIf",W.calculatePerc)}}const S=function(x,B){return{"bg-warning":x,"bg-danger":B}},M=function(x){return{title:x}};let w=(()=>{class x{constructor(){this.isBinary=!0,this.decimals=0,this.calculatePerc=!0,this.title="usage"}ngOnChanges(){this.calculatePerc?(this.usedPercentage=this.total>0?this.used/this.total*100:0,this.freePercentage=100-this.usedPercentage):this.used?(this.used=this.used.slice(0,-1),this.usedPercentage=Number(this.used),this.freePercentage=100-this.usedPercentage):this.usedPercentage=0}}return x.\u0275fac=function(W){return new(W||x)},x.\u0275cmp=r.Xpm({type:x,selectors:[["cd-usage-bar"]],inputs:{total:"total",used:"used",warningThreshold:"warningThreshold",errorThreshold:"errorThreshold",isBinary:"isBinary",decimals:"decimals",calculatePerc:"calculatePerc",title:"title"},features:[r.TTD],decls:8,vars:19,consts:[["usageTooltipTpl",""],["data-placement","left",1,"progress",3,"ngbTooltip"],["role","progressbar",1,"progress-bar","bg-info",3,"ngClass"],["role","progressbar",1,"progress-bar","bg-freespace"],[1,"text-left"],[1,"text-right"],[4,"ngIf"],[1,"'text-right"]],template:function(W,j){if(1&W&&(r.YNc(0,g,10,6,"ng-template",null,0,r.W1O),r.TgZ(2,"div",1)(3,"div",2)(4,"span"),r._uU(5),r.ALo(6,"number"),r.qZA()(),r._UZ(7,"div",3),r.qZA()),2&W){const q=r.MAs(1);r.xp6(2),r.Q6J("ngbTooltip",q),r.xp6(1),r.Udp("width",j.usedPercentage+"%"),r.Q6J("ngClass",r.WLB(12,S,j.usedPercentage/100>=j.warningThreshold,j.usedPercentage/100>=j.errorThreshold)),r.uIk("aria-label",r.VKq(15,M,j.title)),r.xp6(2),r.hij("",r.xi3(6,9,j.usedPercentage,"1.0-"+j.decimals),"%"),r.xp6(2),r.Udp("width",j.freePercentage+"%"),r.uIk("aria-label",r.VKq(17,M,j.title))}},directives:[a.O5,f._L,a.mk],pipes:[u.$,e.n,a.JJ],styles:[".bg-info[_ngcontent-%COMP%]{background-color:#25828e!important}.bg-warning[_ngcontent-%COMP%]{background-color:#d48200!important}.bg-danger[_ngcontent-%COMP%]{background-color:#dc3545!important}.bg-freespace[_ngcontent-%COMP%]{background-color:#ced4da!important}.progress[_ngcontent-%COMP%]{height:20px;margin-bottom:0;position:relative}.progress[_ngcontent-%COMP%]   div.progress-bar[_ngcontent-%COMP%]{position:static}.progress[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{color:#000;display:block;font-weight:400;position:absolute;width:100%}"]}),x})()},79512:(v,b,i)=>{"use strict";i.d(b,{$x:()=>f,MQ:()=>u,Qn:()=>e,aX:()=>g,p4:()=>p});var r=i(92340),a=i(89724);class f{}f.organization="ceph",f.projectName="Ceph Dashboard",f.license="Free software (LGPL 2.1).",f.copyright="Copyright(c) "+r.N.year+" Ceph contributors.",f.cephLogo="assets/Ceph_Logo.svg";var u=(()=>{return(S=u||(u={})).CREATE="create",S.EDIT="edit",S.UPDATE="update",S.REMOVE="remove",S.DELETE="delete",S.ADD="add",S.COPY="copy",S.CLONE="clone",S.RECREATE="recreate",S.EXPIRE="expire",S.RESTART="Restart",u;var S})(),e=(()=>{return(S=e||(e={})).CREATE="Create",S.DELETE="Delete",S.ADD="Add",S.REMOVE="Remove",S.EDIT="Edit",S.CANCEL="Cancel",S.COPY="Copy",S.CLONE="Clone",S.UPDATE="Update",S.EVICT="Evict",S.SHOW="Show",S.RECREATE="Recreate",S.EXPIRE="Expire",S.START="Start",S.STOP="Stop",S.REDEPLOY="Redeploy",S.RESTART="Restart",e;var S})();let p=(()=>{class S{constructor(){this.CREATE="Create",this.DELETE="Delete",this.ADD="Add",this.SET="Set",this.SUBMIT="Submit",this.REMOVE="Remove",this.UNSET="Unset",this.EDIT="Edit",this.UPDATE="Update",this.CANCEL="Cancel",this.PREVIEW="Preview",this.MOVE="Move",this.NEXT="Next",this.BACK="Back",this.CLONE="Clone",this.COPY="Copy",this.DEEP_SCRUB="Deep Scrub",this.DESTROY="Destroy",this.EVICT="Evict",this.FLATTEN="Flatten",this.MARK_DOWN="Mark Down",this.MARK_IN="Mark In",this.MARK_LOST="Mark Lost",this.MARK_OUT="Mark Out",this.PROTECT="Protect",this.PURGE="Purge",this.RENAME="Rename",this.RESTORE="Restore",this.REWEIGHT="Reweight",this.ROLLBACK="Rollback",this.SCRUB="Scrub",this.SHOW="Show",this.TRASH="Move to Trash",this.UNPROTECT="Unprotect",this.CHANGE="Change",this.FLAGS="Flags",this.ENTER_MAINTENANCE="Enter Maintenance",this.EXIT_MAINTENANCE="Exit Maintenance",this.START_DRAIN="Start Drain",this.STOP_DRAIN="Stop Drain",this.RESYNC="Resync",this.RECREATE="Recreate",this.EXPIRE="Expire",this.START="Start",this.STOP="Stop",this.REDEPLOY="Redeploy",this.RESTART="Restart",this.REMOVE_SCHEDULING="Remove Scheduling",this.PROMOTE="Promote",this.DEMOTE="Demote"}}return S.\u0275fac=function(w){return new(w||S)},S.\u0275prov=a.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})(),g=(()=>{class S{constructor(){this.CREATED="Created",this.DELETED="Deleted",this.ADDED="Added",this.REMOVED="Removed",this.EDITED="Edited",this.CANCELED="Canceled",this.PREVIEWED="Previewed",this.MOVED="Moved",this.CLONED="Cloned",this.COPIED="Copied",this.DEEP_SCRUBBED="Deep Scrubbed",this.DESTROYED="Destroyed",this.FLATTENED="Flattened",this.MARKED_DOWN="Marked Down",this.MARKED_IN="Marked In",this.MARKED_LOST="Marked Lost",this.MARKED_OUT="Marked Out",this.PROTECTED="Protected",this.PURGED="Purged",this.RENAMED="Renamed",this.RESTORED="Restored",this.REWEIGHTED="Reweighted",this.ROLLED_BACK="Rolled back",this.SCRUBBED="Scrubbed",this.SHOWED="Showed",this.TRASHED="Moved to Trash",this.UNPROTECTED="Unprotected",this.CHANGE="Change",this.RECREATED="Recreated",this.EXPIRED="Expired",this.START="Start",this.STOP="Stop",this.REDEPLOY="Redeploy",this.RESTART="Restart"}}return S.\u0275fac=function(w){return new(w||S)},S.\u0275prov=a.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},4268:(v,b,i)=>{"use strict";i.d(b,{c:()=>Nt});var r=i(10972),a=i(36169),f=i(68774),u=i(76111),e=i(32337),p=i(30982),g=i(89724),S=i(47640),M=i(36848),w=i(19725);let x=(()=>{class Yt{constructor(rn){this.http=rn}export(rn){return this.http.post("api/cluster/user/export",{entities:rn})}}return Yt.\u0275fac=function(rn){return new(rn||Yt)(g.LFG(w.eN))},Yt.\u0275prov=g.Yz7({token:Yt,factory:Yt.\u0275fac,providedIn:"root"}),Yt})();var B=i(55860),W=i(63285),j=i(11048),q=i(83697),ue=i(94928),re=i(58039),H=i(96102),se=i(94088);const ae=["badgeDictTpl"],ie=["dateTpl"],fe=["durationTpl"],he=["exportDataModalTpl"],Ce=function(){return{exact:!0}};function ce(Yt,dn){if(1&Yt&&(g.TgZ(0,"li",8)(1,"a",9),g.SDv(2,10),g.qZA()()),2&Yt){const rn=dn.$implicit;g.xp6(1),g.Q6J("routerLink",rn.url)("routerLinkActiveOptions",g.DdM(3,Ce)),g.xp6(1),g.pQV(rn.name),g.QtT(2)}}function Be(Yt,dn){if(1&Yt&&(g.TgZ(0,"ul",6),g.YNc(1,ce,3,4,"li",7),g.qZA()),2&Yt){const rn=g.oxw();g.xp6(1),g.Q6J("ngForOf",rn.tabs)}}function Ve(Yt,dn){if(1&Yt&&(g.TgZ(0,"tr")(1,"td",18),g.SDv(2,19),g.qZA(),g.TgZ(3,"td"),g._uU(4),g.qZA()()),2&Yt){const rn=dn.$implicit,vt=g.oxw(3);g.xp6(2),g.pQV(rn),g.QtT(2),g.xp6(2),g.hij(" ",vt.expandedRow[rn]," ")}}function Xe(Yt,dn){if(1&Yt&&(g.ynx(0,15),g.TgZ(1,"table",16)(2,"tbody"),g.YNc(3,Ve,5,2,"tr",17),g.qZA()(),g.BQk()),2&Yt){const rn=g.oxw(2);g.xp6(3),g.Q6J("ngForOf",rn.meta.detail_columns)}}function He(Yt,dn){if(1&Yt){const rn=g.EpF();g.ynx(0),g.TgZ(1,"cd-table",11),g.NdJ("setExpandedRow",function(xt){return g.CHM(rn),g.oxw().setExpandedRow(xt)})("updateSelection",function(xt){return g.CHM(rn),g.oxw().updateSelection(xt)}),g.ALo(2,"async"),g.TgZ(3,"div",12),g._UZ(4,"cd-table-actions",13),g.qZA(),g.YNc(5,Xe,4,1,"ng-container",14),g.qZA(),g.BQk()}if(2&Yt){const rn=g.oxw();g.xp6(1),g.Q6J("data",g.lcZ(2,10,rn.data$))("columns",rn.meta.table.columns)("columnMode",rn.meta.table.columnMode)("hasDetails",rn.meta.detail_columns.length>0)("selectionType",rn.meta.table.selectionType)("toolHeader",rn.meta.table.toolHeader),g.xp6(3),g.Q6J("permission",rn.permission)("selection",rn.selection)("tableActions",rn.meta.actions),g.xp6(1),g.Q6J("ngIf",rn.expandedRow&&rn.meta.detail_columns.length>0)}}function Pe(Yt,dn){1&Yt&&(g.ynx(0),g._uU(1,"\xa0"),g.BQk())}function Ge(Yt,dn){if(1&Yt&&(g.TgZ(0,"span")(1,"span",20),g._uU(2),g.qZA(),g.YNc(3,Pe,2,0,"ng-container",1),g.qZA()),2&Yt){const rn=dn.$implicit,vt=dn.last;g.xp6(2),g.AsE("",rn.key,": ",rn.value,""),g.xp6(1),g.Q6J("ngIf",!vt)}}function Oe(Yt,dn){1&Yt&&(g.YNc(0,Ge,4,3,"span",17),g.ALo(1,"keyvalue")),2&Yt&&g.Q6J("ngForOf",g.lcZ(1,1,dn.value))}function Tt(Yt,dn){if(1&Yt&&(g.TgZ(0,"span"),g._uU(1),g.ALo(2,"cdDate"),g.qZA()),2&Yt){const rn=dn.value;g.xp6(1),g.Oqu(g.lcZ(2,1,rn))}}function We(Yt,dn){if(1&Yt&&(g.TgZ(0,"span"),g._uU(1),g.ALo(2,"duration"),g.qZA()),2&Yt){const rn=dn.value;g.xp6(1),g.Oqu(g.lcZ(2,1,rn))}}function Qt(Yt,dn){if(1&Yt&&(g.TgZ(0,"div",21)(1,"textarea",22),g._uU(2),g.qZA(),g._UZ(3,"cd-copy-2-clipboard-button",23),g.qZA()),2&Yt){const rn=g.oxw();g.xp6(2),g.Oqu(rn.modalState.authExportData)}}let Nt=(()=>{class Yt{constructor(rn,vt,xt,Ct,Gt,Fn,pr,mi){this.authStorageService=rn,this.timerService=vt,this.dataGatewayService=xt,this.taskWrapper=Ct,this.cephUserService=Gt,this.activatedRoute=Fn,this.modalService=pr,this.router=mi,this.selection=new f.r,this.expandedRow=null,this.tabs={},this.modalState={},this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.activatedRoute.data.subscribe(rn=>{const vt=rn.resource;this.tabs=rn.tabs,this.dataGatewayService.list(`ui-${vt}`).subscribe(xt=>this.processMeta(xt)),this.data$=this.timerService.get(()=>this.dataGatewayService.list(vt))}),this.activatedRoute.data.subscribe(rn=>{this.resource=rn.resource})}processMeta(rn){var Ct;this.permission=this.permissions[(Ct=rn.permissions[0],Ct.split("-").reduce((Gt,Fn,pr)=>0===pr?Fn.toLowerCase():`${Gt}${Fn.charAt(0).toUpperCase()}${Fn.substr(1).toLowerCase()}`,""))];const xt={badgeDict:this.badgeDictTpl,date:this.dateTpl,duration:this.durationTpl};rn.table.columns.forEach((Ct,Gt)=>{void 0!==Ct.cellTemplate&&(rn.table.columns[Gt].cellTemplate=xt[Ct.cellTemplate])}),rn.table.columns=rn.table.columns.filter(Ct=>!Ct.isHidden),this.meta=rn;for(let Ct=0;Ct<this.meta.actions.length;Ct++){let Gt=this.meta.actions[Ct];Gt.disable&&(Gt.disable=Fn=>!Fn.hasSelection),""!==Gt.click.toString()&&(Gt.click=this[this.meta.actions[Ct].click.toString()].bind(this))}}delete(){const rn=this.selection.first()[this.meta.columnKey];this.modalRef=this.modalService.show(p.M,{itemDescription:"" + this.meta.columnKey + "",itemNames:[rn],submitAction:()=>{this.taskWrapper.wrapTaskAroundCall({task:new u.R("crud-component/id",rn),call:this.dataGatewayService.delete(this.resource,rn)}).subscribe({error:()=>{this.modalRef.close()},complete:()=>{this.modalRef.close()}})}})}updateSelection(rn){this.selection=rn}setExpandedRow(rn){this.expandedRow=rn}edit(){let rn="";this.selection.hasSelection&&(rn=this.selection.first()[this.meta.columnKey]),this.router.navigate(["/cluster/user/edit"],{queryParams:{key:rn}})}authExport(){let rn=[];this.selection.selected.forEach(vt=>rn.push(vt.entity)),this.cephUserService.export(rn).subscribe(vt=>{const xt={titleText:"Ceph user export data",buttonText:"Close",bodyTpl:this.authxEportTpl,showSubmit:!0,showCancel:!1,onSubmit:()=>{this.modalRef.close()}};this.modalState.authExportData=vt.trim(),this.modalRef=this.modalService.show(a.Y,xt)})}}return Yt.\u0275fac=function(rn){return new(rn||Yt)(g.Y36(S.j),g.Y36(M.f),g.Y36(r.n),g.Y36(e.P),g.Y36(x),g.Y36(B.gz),g.Y36(W.Z),g.Y36(B.F0))},Yt.\u0275cmp=g.Xpm({type:Yt,selectors:[["cd-crud-table"]],viewQuery:function(rn,vt){if(1&rn&&(g.Gf(ae,5),g.Gf(ie,5),g.Gf(fe,5),g.Gf(he,5)),2&rn){let xt;g.iGM(xt=g.CRH())&&(vt.badgeDictTpl=xt.first),g.iGM(xt=g.CRH())&&(vt.dateTpl=xt.first),g.iGM(xt=g.CRH())&&(vt.durationTpl=xt.first),g.iGM(xt=g.CRH())&&(vt.authxEportTpl=xt.first)}},decls:10,vars:2,consts:function(){let dn,rn;return dn="" + "\ufffd0\ufffd" + "",rn="" + "\ufffd0\ufffd" + "",[["class","nav nav-tabs",4,"ngIf"],[4,"ngIf"],["badgeDictTpl",""],["dateTpl",""],["durationTpl",""],["exportDataModalTpl",""],[1,"nav","nav-tabs"],["class","nav-item",4,"ngFor","ngForKeyvalue","ngForOf"],[1,"nav-item"],["routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLink","routerLinkActiveOptions"],dn,[3,"data","columns","columnMode","hasDetails","selectionType","toolHeader","setExpandedRow","updateSelection"],[1,"table-actions","btn-toolbar"],["id","crud-table-actions",1,"btn-group",3,"permission","selection","tableActions"],["cdTableDetail","",4,"ngIf"],["cdTableDetail",""],[1,"table","table-striped","table-bordered"],[4,"ngFor","ngForOf"],[1,"bold"],rn,[1,"badge","badge-background-primary"],[1,"d-flex","flex-column","align-items-center","w-100","gap-3"],["readonly","","id","authExportArea",1,"form-control","w-100","bg-light","height-400"],["source","authExportArea",1,"align-self-end"]]},template:function(rn,vt){1&rn&&(g.YNc(0,Be,2,1,"ul",0),g.YNc(1,He,6,12,"ng-container",1),g.YNc(2,Oe,2,3,"ng-template",null,2,g.W1O),g.YNc(4,Tt,3,3,"ng-template",null,3,g.W1O),g.YNc(6,We,3,3,"ng-template",null,4,g.W1O),g.YNc(8,Qt,4,1,"ng-template",null,5,g.W1O)),2&rn&&(g.Q6J("ngIf",vt.tabs),g.xp6(1),g.Q6J("ngIf",vt.meta))},directives:[j.O5,j.sg,B.yS,B.Od,q.a,ue.K,re.s],pipes:[j.Ov,j.Nd,H.N,se.u],styles:[".height-400[_ngcontent-%COMP%]{height:400px}"]}),Yt})()},40267:(v,b,i)=>{"use strict";i.d(b,{t:()=>Ge});var r=i(11048),a=i(55860),f=i(71334),u=i(84051),e=i(37496),p=i(1659),g=i(90645),S=i(1851),M=i(15626),w=i(12455),x=i(67464),B=i(39054),W=i(39017),j=i(89724),q=i(94276);const ue=["textArea"];let re=(()=>{class Oe extends g.fS{onChange(){const We=this.textArea.nativeElement.value;try{const Qt=JSON.stringify(JSON.parse(We),null,2);this.textArea.nativeElement.value=Qt,this.textArea.nativeElement.style.height="auto";const dn=25*Qt.split("\n").length;this.textArea.nativeElement.style.height=dn+"px"}catch(Qt){}}}return Oe.\u0275fac=function(){let Tt;return function(Qt){return(Tt||(Tt=j.n5z(Oe)))(Qt||Oe)}}(),Oe.\u0275cmp=j.Xpm({type:Oe,selectors:[["cd-formly-textarea-type"]],viewQuery:function(We,Qt){if(1&We&&j.Gf(ue,5),2&We){let Nt;j.iGM(Nt=j.CRH())&&(Qt.textArea=Nt.first)}},features:[j.qOj],decls:2,vars:6,consts:[[1,"form-control",3,"formControl","cols","rows","formlyAttributes","change"],["textArea",""]],template:function(We,Qt){1&We&&(j.TgZ(0,"textarea",0,1),j.NdJ("change",function(){return Qt.onChange()}),j.qZA()),2&We&&(j.ekj("is-invalid",Qt.showError),j.Q6J("formControl",Qt.formControl)("cols",Qt.props.cols)("rows",Qt.props.rows)("formlyAttributes",Qt.field))},directives:[p.Fj,q.b,p.JJ,p.oH,g.JD],styles:[""]}),Oe})();var H=i(62351),se=i(18372);function ae(Oe,Tt){1&Oe&&(j.TgZ(0,"span",10),j._uU(1,"*"),j.qZA())}function ie(Oe,Tt){if(1&Oe&&(j.TgZ(0,"cd-helper"),j._UZ(1,"span",11),j.qZA()),2&Oe){const We=j.oxw(3);j.xp6(1),j.Q6J("innerHTML",We.helper,j.oJD)}}function fe(Oe,Tt){if(1&Oe&&(j.TgZ(0,"label",8),j._uU(1),j.YNc(2,ae,2,0,"span",9),j.YNc(3,ie,2,1,"cd-helper",2),j.qZA()),2&Oe){const We=j.oxw(2);j.uIk("for",We.id),j.xp6(1),j.hij(" ",We.props.label," "),j.xp6(1),j.Q6J("ngIf",We.props.required&&!0!==We.props.hideRequiredMarker),j.xp6(1),j.Q6J("ngIf",We.helper)}}function he(Oe,Tt){if(1&Oe&&(j.TgZ(0,"div",6),j.YNc(1,fe,4,4,"label",7),j.qZA()),2&Oe){const We=j.oxw();j.xp6(1),j.Q6J("ngIf",We.props.label&&!0!==We.props.hideLabel)}}function Ce(Oe,Tt){if(1&Oe&&(j.ynx(0),j.GkF(1,12),j.BQk()),2&Oe){j.oxw();const We=j.MAs(1);j.xp6(1),j.Q6J("ngTemplateOutlet",We)}}function ce(Oe,Tt){if(1&Oe&&(j.ynx(0),j.GkF(1,12),j.BQk()),2&Oe){j.oxw();const We=j.MAs(1);j.xp6(1),j.Q6J("ngTemplateOutlet",We)}}function Be(Oe,Tt){if(1&Oe&&(j.TgZ(0,"div",13),j._UZ(1,"formly-validation-message",14),j.qZA()),2&Oe){const We=j.oxw();j.Udp("display","block"),j.xp6(1),j.Q6J("field",We.field)}}function Ve(Oe,Tt){if(1&Oe&&(j.TgZ(0,"small",15),j._uU(1),j.qZA()),2&Oe){const We=j.oxw();j.xp6(1),j.Oqu(We.props.description)}}let Xe=(()=>{class Oe extends g.n2{get helper(){const We=(0,H.M)(this.field);return(null==We?void 0:We.help)||""}}return Oe.\u0275fac=function(){let Tt;return function(Qt){return(Tt||(Tt=j.n5z(Oe)))(Qt||Oe)}}(),Oe.\u0275cmp=j.Xpm({type:Oe,selectors:[["cd-formly-input-wrapper"]],features:[j.qOj],decls:9,vars:8,consts:[["labelTemplate",""],[1,"mb-3"],[4,"ngIf"],["fieldComponent",""],["class","invalid-feedback",3,"display",4,"ngIf"],["class","form-text text-muted",4,"ngIf"],[1,"d-flex","align-items-center"],["class","form-label",4,"ngIf"],[1,"form-label"],["aria-hidden","true",4,"ngIf"],["aria-hidden","true"],[3,"innerHTML"],[3,"ngTemplateOutlet"],[1,"invalid-feedback"],[3,"field"],[1,"form-text","text-muted"]],template:function(We,Qt){1&We&&(j.YNc(0,he,2,1,"ng-template",null,0,j.W1O),j.TgZ(2,"div",1),j.YNc(3,Ce,2,1,"ng-container",2),j.GkF(4,null,3),j.YNc(6,ce,2,1,"ng-container",2),j.YNc(7,Be,2,3,"div",4),j.YNc(8,Ve,2,1,"small",5),j.qZA()),2&We&&(j.xp6(2),j.ekj("form-floating","floating"===Qt.props.labelPosition)("has-error",Qt.showError),j.xp6(1),j.Q6J("ngIf","floating"!==Qt.props.labelPosition),j.xp6(3),j.Q6J("ngIf","floating"===Qt.props.labelPosition),j.xp6(1),j.Q6J("ngIf",Qt.showError),j.xp6(1),j.Q6J("ngIf",Qt.props.description))},directives:[r.O5,se.S,r.tP,g.M2],styles:[""]}),Oe})(),He=(()=>{class Oe{constructor(){this.onChange=We=>{},this.onTouched=()=>{}}writeValue(We){}registerOnChange(We){this.onChange=We}registerOnTouched(We){this.onTouched=We}}return Oe.\u0275fac=function(We){return new(We||Oe)},Oe.\u0275dir=j.lG2({type:Oe,selectors:[["input","type","file"]],hostBindings:function(We,Qt){1&We&&j.NdJ("change",function(Yt){return Qt.onChange(Yt.target.files)})("input",function(Yt){return Qt.onChange(Yt.target.files)})("blur",function(){return Qt.onTouched()})},features:[j._Bn([{provide:p.JU,useExisting:Oe,multi:!0}])]}),Oe})(),Pe=(()=>{class Oe extends g.fS{}return Oe.\u0275fac=function(){let Tt;return function(Qt){return(Tt||(Tt=j.n5z(Oe)))(Qt||Oe)}}(),Oe.\u0275cmp=j.Xpm({type:Oe,selectors:[["cd-formly-file-type"]],features:[j.qOj],decls:1,vars:2,consts:[["type","file",3,"formControl","formlyAttributes"]],template:function(We,Qt){1&We&&j._UZ(0,"input",0),2&We&&j.Q6J("formControl",Qt.formControl)("formlyAttributes",Qt.field)},directives:[He,p.Fj,p.JJ,p.oH,g.JD],styles:[""]}),Oe})(),Ge=(()=>{class Oe{}return Oe.\u0275fac=function(We){return new(We||Oe)},Oe.\u0275mod=j.oAB({type:Oe}),Oe.\u0275inj=j.cJS({imports:[[r.ez,u.xD,e.b,p.u5,f.XC,f.HK,w.D,M.K,a.Bz,p.UX,g.X0.forRoot({types:[{name:"array",component:x.l},{name:"object",component:W.o},{name:"input",component:B.v,wrappers:["input-wrapper"]},{name:"textarea",component:re,wrappers:["input-wrapper"]},{name:"file",component:Pe,wrappers:["input-wrapper"]}],validationMessages:[{name:"required",message:"This field is required"},{name:"json",message:"This field is not a valid json document"},{name:"rgwRoleName",message:'Role name must contain letters, numbers or the following valid special characters "_+=,.@-]+" (pattern: [0-9a-zA-Z_+=,.@-]+)'},{name:"rgwRolePath",message:'Role path must start and finish with a slash "/". (pattern: (/)|(/[!-~]+/))'},{name:"file_size",message:"File size must not exceed 4KiB"}],wrappers:[{name:"input-wrapper",component:Xe}]}),S.z],u.xD]}),Oe})()},94928:(v,b,i)=>{"use strict";i.d(b,{K:()=>ue});var r=i(23815),a=i.n(r),f=i(65862),u=i(89724),e=i(11048),p=i(55860),g=i(71334);const S=function(re){return{disabled:re}},M=function(re){return[re]};function w(re,H){if(1&re){const se=u.EpF();u.ynx(0),u.TgZ(1,"button",3),u.NdJ("click",function(){u.CHM(se);const ie=u.oxw();return ie.useClickAction(ie.currentAction)}),u._UZ(2,"i",4),u.TgZ(3,"span",5),u._uU(4),u.qZA()(),u.BQk()}if(2&re){const se=u.oxw();u.xp6(1),u.Gre("btn btn-",se.btnColor,""),u.s9C("title",se.useDisableDesc(se.currentAction)),u.Q6J("ngClass",u.VKq(11,S,se.disableSelectionAction(se.currentAction)))("disabled",se.disableSelectionAction(se.currentAction))("routerLink",se.useRouterLink(se.currentAction))("preserveFragment",se.currentAction.preserveFragment?"":null),u.uIk("aria-label",se.currentAction.name),u.xp6(1),u.Q6J("ngClass",u.VKq(13,M,se.currentAction.icon)),u.xp6(2),u.Oqu(se.currentAction.name)}}function x(re,H){if(1&re&&(u.ynx(0),u._uU(1),u.BQk()),2&re){const se=u.oxw(2);u.xp6(1),u.hij("",se.dropDownOnly," ")}}function B(re,H){1&re&&u._UZ(0,"span",11)}const W=function(re){return[re,"action-icon"]};function j(re,H){if(1&re){const se=u.EpF();u.ynx(0),u.TgZ(1,"button",12),u.NdJ("click",function(){const fe=u.CHM(se).$implicit;return u.oxw(2).useClickAction(fe)}),u._UZ(2,"i",4),u.TgZ(3,"span"),u._uU(4),u.qZA()(),u.BQk()}if(2&re){const se=H.$implicit,ae=u.oxw(2);u.xp6(1),u.Tol(ae.toClassName(se)),u.s9C("title",ae.useDisableDesc(se)),u.Q6J("routerLink",ae.useRouterLink(se))("preserveFragment",se.preserveFragment?"":null)("disabled",ae.disableSelectionAction(se)),u.uIk("aria-label",se.name),u.xp6(1),u.Q6J("ngClass",u.VKq(10,W,se.icon)),u.xp6(2),u.Oqu(se.name)}}function q(re,H){if(1&re&&(u.TgZ(0,"div",6)(1,"button",7),u.YNc(2,x,2,1,"ng-container",1),u.YNc(3,B,1,0,"span",8),u.qZA(),u.TgZ(4,"div",9),u.YNc(5,j,5,12,"ng-container",10),u.qZA()()),2&re){const se=u.oxw();u.xp6(1),u.Gre("btn btn-",se.btnColor," dropdown-toggle-split"),u.xp6(1),u.Q6J("ngIf",se.dropDownOnly),u.xp6(1),u.Q6J("ngIf",!se.dropDownOnly),u.xp6(2),u.Q6J("ngForOf",se.dropDownActions)}}let ue=(()=>{class re{constructor(){this.btnColor="accent",this.dropDownActions=[],this.icons=f.P}ngOnInit(){this.removeActionsWithNoPermissions(),this.onSelectionChange()}ngOnChanges(se){se.selection&&this.onSelectionChange()}onSelectionChange(){this.updateDropDownActions(),this.updateCurrentAction()}toClassName(se){return se.name.replace(/ /g,"-").replace(/[^a-z-]/gi,"").toLowerCase()}removeActionsWithNoPermissions(){if(!this.permission)return void(this.tableActions=[]);const se=Object.keys(this.permission).filter(ae=>this.permission[ae]);this.tableActions=this.tableActions.filter(ae=>se.includes(ae.permission))}updateDropDownActions(){this.dropDownActions=this.tableActions.filter(se=>se.visible?se.visible(this.selection):se)}updateCurrentAction(){if(this.dropDownOnly)return void(this.currentAction=void 0);let se=this.dropDownActions.find(ae=>this.showableAction(ae));!se&&this.dropDownActions.length>0&&(se=this.dropDownActions[0]),this.currentAction=se}showableAction(se){const ae=se.canBePrimary,ie=this.selection.hasSingleSelection,fe="create"===se.permission?!ie:ie;return ae&&ae(this.selection)||!ae&&fe}useRouterLink(se){if(se.routerLink&&!this.disableSelectionAction(se))return a().isString(se.routerLink)?se.routerLink:se.routerLink()}disableSelectionAction(se){const ae=se.disable;if(ae)return Boolean(ae(this.selection));const ie=se.permission,fe=this.selection.hasSingleSelection&&this.selection.first();return Boolean(["update","delete"].includes(ie)&&(!fe||fe.cdExecuting))}useClickAction(se){return!this.disableSelectionAction(se)&&se.click&&se.click()}useDisableDesc(se){if(se.disable){const ae=se.disable(this.selection);return a().isString(ae)?ae:void 0}}}return re.\u0275fac=function(se){return new(se||re)},re.\u0275cmp=u.Xpm({type:re,selectors:[["cd-table-actions"]],inputs:{permission:"permission",selection:"selection",tableActions:"tableActions",btnColor:"btnColor",dropDownOnly:"dropDownOnly"},features:[u.TTD],decls:3,vars:2,consts:[[1,"btn-group"],[4,"ngIf"],["class","btn-group","ngbDropdown","","role","group","aria-label","Button group with nested dropdown",4,"ngIf"],["type","button",3,"title","ngClass","disabled","routerLink","preserveFragment","click"],[3,"ngClass"],[1,"action-label"],["ngbDropdown","","role","group","aria-label","Button group with nested dropdown",1,"btn-group"],["aria-label","dropdown-menu-toggle","ngbDropdownToggle",""],["class","sr-only",4,"ngIf"],["ngbDropdownMenu","",1,"dropdown-menu"],[4,"ngFor","ngForOf"],[1,"sr-only"],["ngbDropdownItem","",3,"title","routerLink","preserveFragment","disabled","click"]],template:function(se,ae){1&se&&(u.TgZ(0,"div",0),u.YNc(1,w,5,15,"ng-container",1),u.YNc(2,q,6,6,"div",2),u.qZA()),2&se&&(u.xp6(1),u.Q6J("ngIf",ae.currentAction),u.xp6(1),u.Q6J("ngIf",ae.dropDownActions.length>1))},directives:[e.O5,e.mk,p.rH,g.jt,g.iD,g.Vi,e.sg,g.TH],styles:["button.disabled[_ngcontent-%COMP%]{color:#adb5bd;cursor:default!important;pointer-events:auto}button.dropdown-item[_ngcontent-%COMP%]:hover{background-color:#dee2e6}.action-icon[_ngcontent-%COMP%]{padding-right:1.5rem}.action-label[_ngcontent-%COMP%]{font-weight:700}"]}),re})()},61350:(v,b,i)=>{"use strict";i.d(b,{b:()=>g});var r=i(89724),a=i(23815),f=i.n(a),u=i(99466),e=i(83697),p=i(96102);let g=(()=>{class S{constructor(w){this.datePipe=w,this.autoReload=5e3,this.renderObjects=!1,this.appendParentKey=!0,this.hideEmpty=!1,this.hideKeys=[],this.columns=[],this.fetchData=new r.vpe}ngOnInit(){this.columns=[{prop:"key",flexGrow:1,cellTransformation:u.e.bold},{prop:"value",flexGrow:3}],this.customCss&&(this.columns[1].cellTransformation=u.e.classAdding),this.fetchData.observers.length>0&&this.table.fetchData.subscribe(()=>{this.fetchData.emit()}),this.useData()}ngOnChanges(){this.useData()}useData(){if(!this.data)return;let w=this.makePairs(this.data);this.hideKeys&&(w=w.filter(x=>!this.hideKeys.includes(x.key))),this.tableData=w}makePairs(w){let x=[];if(w){if(f().isArray(w))x=this.makePairsFromArray(w);else{if(!f().isObject(w))throw new Error("Wrong data format");x=this.makePairsFromObject(w)}return x=x.map(B=>(B.value=this.convertValue(B.value),B)).filter(B=>null!==B.value),f().sortBy(this.renderObjects?this.insertFlattenObjects(x):x,"key")}}makePairsFromArray(w){let x=[];const B=w[0];if(f().isArray(B)){if(2!==B.length)throw new Error(`Array contains too many elements (${B.length}). Needs to be of type [string, any][]`);x=w.map(W=>({key:W[0],value:W[1]}))}else f().isObject(B)&&(x=f().has(B,"key")&&f().has(B,"value")?[...w]:w.reduce((W,j)=>W.concat(this.makePairsFromObject(j)),x));return x}makePairsFromObject(w){return Object.keys(w).map(x=>({key:x,value:w[x]}))}insertFlattenObjects(w){return f().flattenDeep(w.map(x=>{const B=x.value,W=f().isObject(B);return!W||f().isEmpty(B)?(W&&(x.value=""),x):this.splitItemIntoItems(x)}))}splitItemIntoItems(w){return this.makePairs(w.value).map(x=>(this.appendParentKey&&(x.key=w.key+" "+x.key),x))}convertValue(w){if(f().isArray(w)){if(f().isEmpty(w)&&this.hideEmpty)return null;w=w.map(x=>f().isObject(x)?JSON.stringify(x):x).join(", ")}else if(f().isObject(w)){if(this.hideEmpty&&f().isEmpty(w)||!this.renderObjects)return null}else if(f().isString(w)){if(""===w&&this.hideEmpty)return null;this.isDate(w)&&(w=this.datePipe.transform(w)||w)}return w}isDate(w){const x="[ -:.TZ]",B="\\d{2}"+x;return w.match(new RegExp("^\\d{4}"+x+B+B+B+B+B+"\\d*Z?$"))}}return S.\u0275fac=function(w){return new(w||S)(r.Y36(p.N))},S.\u0275cmp=r.Xpm({type:S,selectors:[["cd-table-key-value"]],viewQuery:function(w,x){if(1&w&&r.Gf(e.a,7),2&w){let B;r.iGM(B=r.CRH())&&(x.table=B.first)}},inputs:{data:"data",autoReload:"autoReload",renderObjects:"renderObjects",appendParentKey:"appendParentKey",hideEmpty:"hideEmpty",hideKeys:"hideKeys",customCss:"customCss"},outputs:{fetchData:"fetchData"},features:[r.TTD],decls:3,vars:9,consts:[[1,"table-scroller"],["columnMode","flex",3,"data","columns","toolHeader","autoReload","customCss","autoSave","header","footer","limit"],["table",""]],template:function(w,x){1&w&&(r.TgZ(0,"div",0),r._UZ(1,"cd-table",1,2),r.qZA()),2&w&&(r.xp6(1),r.Q6J("data",x.tableData)("columns",x.columns)("toolHeader",!1)("autoReload",x.autoReload)("customCss",x.customCss)("autoSave",!1)("header",!1)("footer",!1)("limit",0))},directives:[e.a],styles:[".table-scroller[_ngcontent-%COMP%]{height:100%;max-height:40vh;overflow:auto}"]}),S})()},83697:(v,b,i)=>{"use strict";i.d(b,{a:()=>ti});var r=i(89724),a=i(84051),f=i(23815),u=i.n(f),e=i(25917),p=i(70882),g=i(71225),S=i(99466),M=i(65862),w=i(48168),x=i(68774),B=i(36848),W=i(11048),j=i(71334),q=i(1659);let ue=(()=>{class Ut{constructor(){this._size=0,this._count=0,this._page=1,this.pageChange=new r.vpe}set size(Et){this._size=Et,this.pages=this.calcPages()}get size(){return this._size}set page(Et){this._page=Et}get page(){return this._page}set count(Et){this._count=Et}get count(){return this._count}get totalPages(){const Et=this.size<1?1:Math.ceil(this._count/this._size);return Math.max(Et||0,1)}canPrevious(){return this._page>1}canNext(){return this._page<this.totalPages}prevPage(){this.selectPage(this._page-1)}nextPage(){this.selectPage(this._page+1)}selectPage(Et){Et>0&&Et<=this.totalPages&&Et!==this.page?(this._page=Et,this.pageChange.emit({page:Et})):Et>0&&Et>=this.totalPages&&(this._page=this.totalPages,this.pageChange.emit({page:this.totalPages}))}calcPages(Et){const $t=[];let _t=1,yt=this.totalPages;Et=Et||this.page,5<this.totalPages&&(_t=Et-Math.floor(2.5),yt=Et+Math.floor(2.5),_t<1?(_t=1,yt=Math.min(_t+5-1,this.totalPages)):yt>this.totalPages&&(_t=Math.max(this.totalPages-5+1,1),yt=this.totalPages));for(let Cr=_t;Cr<=yt;Cr++)$t.push({number:Cr,text:Cr});return $t}}return Ut.\u0275fac=function(Et){return new(Et||Ut)},Ut.\u0275cmp=r.Xpm({type:Ut,selectors:[["cd-table-pagination"]],inputs:{size:"size",page:"page",count:"count"},outputs:{pageChange:"pageChange"},decls:14,vars:7,consts:function(){let Dn,Et,$t,_t,yt,Vt;return Dn="Pagination",Et="Go to first page",$t="Go to previous page",_t="Current page",yt="Go to next page",Vt="Go to last page",[["aria-label",Dn,1,"pagination"],["aria-label",Et,1,"pagination__btn","pagination__btn_first",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-angle-double-left"],["aria-label",$t,1,"pagination__btn","pagination__btn_prev",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-angle-left"],[1,"pagination__pages"],["aria-label",_t,"type","number","min","1",1,"pagination__page_input",3,"max","value","input"],["pageNumber",""],["aria-hidden","true"],["aria-label",yt,1,"pagination__btn","pagination__btn_next",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-angle-right"],["aria-label",Vt,1,"pagination__btn","pagination__btn_last",3,"disabled","click"],["aria-hidden","true",1,"fa","fa-angle-double-right"]]},template:function(Et,$t){if(1&Et){const _t=r.EpF();r.TgZ(0,"nav",0)(1,"button",1),r.NdJ("click",function(){return $t.selectPage(1)}),r._UZ(2,"i",2),r.qZA(),r.TgZ(3,"button",3),r.NdJ("click",function(){return $t.prevPage()}),r._UZ(4,"i",4),r.qZA(),r.TgZ(5,"div",5)(6,"input",6,7),r.NdJ("input",function(){r.CHM(_t);const Vt=r.MAs(7);return $t.selectPage(Vt.valueAsNumber)}),r.qZA(),r.TgZ(8,"span",8),r._uU(9),r.qZA()(),r.TgZ(10,"button",9),r.NdJ("click",function(){return $t.nextPage()}),r._UZ(11,"i",10),r.qZA(),r.TgZ(12,"button",11),r.NdJ("click",function(){return $t.selectPage($t.totalPages)}),r._UZ(13,"i",12),r.qZA()()}2&Et&&(r.xp6(1),r.Q6J("disabled",!$t.canPrevious()),r.xp6(2),r.Q6J("disabled",!$t.canPrevious()),r.xp6(3),r.Q6J("max",$t.totalPages)("value",$t.page),r.xp6(3),r.hij(" of ",$t.totalPages," "),r.xp6(1),r.Q6J("disabled",!$t.canNext()),r.xp6(2),r.Q6J("disabled",!$t.canNext()))},styles:[".pagination[_ngcontent-%COMP%]{align-items:center;display:flex}.pagination__btn[_ngcontent-%COMP%]{background:none;border:0}.pagination__btn[_ngcontent-%COMP%]:disabled{color:#adb5bd}.pagination__page_input[_ngcontent-%COMP%]{border:1px solid #adb5bd;border-radius:.25rem;padding-left:.25rem}"]}),Ut})();var re=i(76446),H=i(55860),se=i(70442),ae=i(66369),ie=i(37496),fe=i(47187),he=i(78877),Ce=i(52821),ce=i(96102),Be=i(90068);const Ve=["tableCellBoldTpl"],Xe=["sparklineTpl"],He=["routerLinkTpl"],Pe=["checkIconTpl"],Ge=["perSecondTpl"],Oe=["executingTpl"],Tt=["classAddingTpl"],We=["badgeTpl"],Qt=["mapTpl"],Nt=["truncateTpl"],Yt=["timeAgoTpl"],dn=["rowDetailsTpl"],rn=["rowSelectionTpl"];function vt(Ut,Dn){1&Ut&&(r.TgZ(0,"div",22)(1,"div",23),r.Hsn(2),r.qZA()())}function xt(Ut,Dn){if(1&Ut){const Et=r.EpF();r.ynx(0),r.TgZ(1,"button",39),r.NdJ("click",function(){const yt=r.CHM(Et).$implicit;return r.oxw(3).onSelectFilter(yt),!1}),r._uU(2),r.qZA(),r.BQk()}if(2&Ut){const Et=Dn.$implicit;r.xp6(2),r.Oqu(Et.column.name)}}const Ct=function(Ut){return[Ut]};function Gt(Ut,Dn){if(1&Ut&&r._UZ(0,"i",30),2&Ut){const Et=r.oxw(4);r.Q6J("ngClass",r.VKq(1,Ct,Et.icons.check))}}function Fn(Ut,Dn){if(1&Ut){const Et=r.EpF();r.ynx(0),r.TgZ(1,"button",39),r.NdJ("click",function(){const yt=r.CHM(Et).$implicit,Vt=r.oxw(3);return Vt.onChangeFilter(Vt.selectedFilter,yt),!1}),r._uU(2),r.YNc(3,Gt,1,3,"i",40),r.qZA(),r.BQk()}if(2&Ut){const Et=Dn.$implicit,$t=r.oxw(3);r.xp6(2),r.hij(" ",Et.formatted," "),r.xp6(1),r.Q6J("ngIf",void 0!==$t.selectedFilter.value&&$t.selectedFilter.value.raw===Et.raw)}}const pr=function(Ut,Dn){return[Ut,Dn]};function mi(Ut,Dn){if(1&Ut&&(r.TgZ(0,"div",34)(1,"div",35)(2,"button",36),r._UZ(3,"i",30),r._uU(4),r.qZA(),r.TgZ(5,"div",31),r.YNc(6,xt,3,1,"ng-container",32),r.qZA()(),r.TgZ(7,"div",37)(8,"button",38),r._uU(9),r.qZA(),r.TgZ(10,"div",31),r.YNc(11,Fn,4,2,"ng-container",32),r.qZA()()()),2&Ut){const Et=r.oxw(2);r.xp6(3),r.Q6J("ngClass",r.WLB(7,pr,Et.icons.large,Et.icons.filter)),r.xp6(1),r.hij(" ",Et.selectedFilter.column.name," "),r.xp6(2),r.Q6J("ngForOf",Et.columnFilters),r.xp6(2),r.ekj("disabled",0===Et.selectedFilter.options.length),r.xp6(1),r.hij(" ",Et.selectedFilter.value?Et.selectedFilter.value.formatted:"Any"," "),r.xp6(2),r.Q6J("ngForOf",Et.selectedFilter.options)}}function ci(Ut,Dn){if(1&Ut){const Et=r.EpF();r.TgZ(0,"div",41)(1,"span",42),r._UZ(2,"i",30),r.qZA(),r.TgZ(3,"input",43),r.NdJ("ngModelChange",function(_t){return r.CHM(Et),r.oxw(2).search=_t})("keyup",function(){return r.CHM(Et),r.oxw(2).updateFilter()}),r.qZA(),r.TgZ(4,"button",44),r.NdJ("click",function(){return r.CHM(Et),r.oxw(2).onClearSearch()}),r._UZ(5,"i"),r.qZA()()}if(2&Ut){const Et=r.oxw(2);r.xp6(2),r.Q6J("ngClass",r.VKq(5,Ct,Et.icons.search)),r.xp6(1),r.Q6J("ngModel",Et.search),r.xp6(2),r.Gre("icon-prepend ",Et.icons.destroy,"")}}function hr(Ut,Dn){if(1&Ut){const Et=r.EpF();r.TgZ(0,"div",45)(1,"input",46),r.NdJ("click",function(_t){return r.CHM(Et),r.oxw(2).setLimit(_t)})("keyup",function(_t){return r.CHM(Et),r.oxw(2).setLimit(_t)})("blur",function(_t){return r.CHM(Et),r.oxw(2).setLimit(_t)}),r.qZA()()}if(2&Ut){const Et=r.oxw(2);r.xp6(1),r.Q6J("value",Et.userConfig.limit)}}function Br(Ut,Dn){if(1&Ut){const Et=r.EpF();r.TgZ(0,"button",39),r.NdJ("click",function(){r.CHM(Et);const _t=r.oxw().$implicit;return r.oxw(2).toggleColumn(_t),!1}),r.TgZ(1,"div",48),r._UZ(2,"input",49),r.TgZ(3,"label",50),r._uU(4),r.qZA()()()}if(2&Ut){const Et=r.oxw().$implicit,$t=r.oxw(2);r.xp6(2),r.hYB("id","",Et.prop,"",$t.tableName,""),r.Q6J("name",Et.prop)("checked",!Et.isHidden),r.xp6(1),r.hYB("for","",Et.prop,"",$t.tableName,""),r.xp6(1),r.Oqu(Et.name)}}function Ur(Ut,Dn){if(1&Ut&&(r.ynx(0),r.YNc(1,Br,5,7,"button",47),r.BQk()),2&Ut){const Et=Dn.$implicit;r.xp6(1),r.Q6J("ngIf",""!==Et.name)}}function Hn(Ut,Dn){if(1&Ut){const Et=r.EpF();r.TgZ(0,"div",51)(1,"button",52),r.NdJ("click",function(){return r.CHM(Et),r.oxw(2).refreshBtn()}),r._UZ(2,"i",30),r.qZA()()}if(2&Ut){const Et=r.oxw(2);r.xp6(1),r.Tol("btn btn-"+Et.status.type),r.Q6J("ngbTooltip",Et.status.msg),r.xp6(1),r.ekj("fa-spin",Et.updating||Et.loadingIndicator),r.Q6J("ngClass",r.WLB(6,pr,Et.icons.large,Et.icons.refresh))}}function er(Ut,Dn){if(1&Ut&&(r.TgZ(0,"div",22)(1,"div",23),r.Hsn(2,1),r.qZA(),r.YNc(3,mi,12,10,"div",24),r.YNc(4,ci,6,7,"div",25),r.YNc(5,hr,2,1,"div",26),r.TgZ(6,"div",27)(7,"div",28)(8,"button",29),r._UZ(9,"i",30),r.qZA(),r.TgZ(10,"div",31),r.YNc(11,Ur,2,1,"ng-container",32),r.qZA()()(),r.YNc(12,Hn,3,9,"div",33),r.qZA()),2&Ut){const Et=r.oxw();r.xp6(3),r.Q6J("ngIf",0!==Et.columnFilters.length),r.xp6(1),r.Q6J("ngIf",Et.searchField),r.xp6(1),r.Q6J("ngIf",Et.limit),r.xp6(4),r.Q6J("ngClass",r.WLB(6,pr,Et.icons.large,Et.icons.table)),r.xp6(2),r.Q6J("ngForOf",Et.columns),r.xp6(1),r.Q6J("ngIf",Et.fetchData.observers.length>0)}}function _r(Ut,Dn){if(1&Ut){const Et=r.EpF();r.TgZ(0,"span",57)(1,"span",58),r._uU(2),r.qZA(),r.TgZ(3,"a",59),r.NdJ("click",function(){r.CHM(Et);const _t=r.oxw().$implicit;return r.oxw(2).onChangeFilter(_t),!1}),r._UZ(4,"i",60),r.qZA()()}if(2&Ut){const Et=r.oxw().$implicit,$t=r.oxw(2);r.xp6(2),r.AsE("",Et.column.name,": ",Et.value.formatted,""),r.xp6(2),r.Q6J("ngClass",r.VKq(3,Ct,$t.icons.destroy))}}function ei(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span"),r.YNc(1,_r,5,5,"span",56),r.qZA()),2&Ut){const Et=Dn.$implicit;r.xp6(1),r.Q6J("ngIf",Et.value)}}function bi(Ut,Dn){if(1&Ut){const Et=r.EpF();r.TgZ(0,"div",22)(1,"div",53),r.YNc(2,ei,2,1,"span",32),r.TgZ(3,"a",54),r.NdJ("click",function(){return r.CHM(Et),r.oxw().onClearFilters(),!1}),r.ynx(4),r.SDv(5,55),r.BQk(),r.qZA()()()}if(2&Ut){const Et=r.oxw();r.xp6(2),r.Q6J("ngForOf",Et.columnFilters)}}function fi(Ut,Dn){if(1&Ut&&r._UZ(0,"input",61),2&Ut){const Et=Dn.isSelected;r.Q6J("checked",Et),r.uIk("aria-label",Et?"selected":"select")}}function no(Ut,Dn){1&Ut&&r.Hsn(0,2)}function xo(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span"),r._uU(1),r.ynx(2),r.SDv(3,67),r.BQk(),r._uU(4," / "),r.qZA()),2&Ut){const Et=r.oxw().selectedCount;r.xp6(1),r.hij(" ",Et," ")}}function Er(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span"),r._uU(1),r.ynx(2),r.SDv(3,69),r.BQk(),r._uU(4," / "),r.qZA()),2&Ut){const Et=r.oxw(2).rowCount;r.xp6(1),r.hij(" ",Et," ")}}function an(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span"),r.YNc(1,Er,5,1,"span",63),r._uU(2),r.ynx(3),r.SDv(4,68),r.BQk(),r.qZA()),2&Ut){const Et=r.oxw().rowCount,$t=r.oxw();r.xp6(1),r.Q6J("ngIf",Et!=(null==$t.data?null:$t.data.length)),r.xp6(1),r.hij(" ",(null==$t.data?null:$t.data.length)||0," ")}}function vn(Ut,Dn){if(1&Ut&&(r._uU(0),r.ynx(1),r.SDv(2,70),r.BQk(),r._uU(3),r.ynx(4),r.SDv(5,71),r.BQk()),2&Ut){const Et=r.oxw().rowCount,$t=r.oxw();r.hij(" ",(null==$t.data?null:$t.data.length)||0," "),r.xp6(3),r.hij(" / ",Et," ")}}function Zn(Ut,Dn){if(1&Ut){const Et=r.EpF();r.TgZ(0,"div",62),r.YNc(1,xo,5,1,"span",63),r.YNc(2,an,5,2,"span",64),r.YNc(3,vn,6,2,"ng-template",null,65,r.W1O),r.qZA(),r.TgZ(5,"cd-table-pagination",66),r.NdJ("pageChange",function(_t){return r.CHM(Et),r.oxw(),r.MAs(5).onFooterPage(_t)}),r.qZA()}if(2&Ut){const Et=Dn.rowCount,$t=Dn.pageSize,_t=Dn.curPage,yt=r.MAs(4),Vt=r.oxw();r.xp6(1),r.Q6J("ngIf",Vt.selectionType),r.xp6(1),r.Q6J("ngIf",!Vt.serverSide)("ngIfElse",yt),r.xp6(3),r.Q6J("page",_t)("size",$t)("count",Et)("hidden",!(Et/$t>1))}}function Xn(Ut,Dn){if(1&Ut&&(r.TgZ(0,"strong"),r._uU(1),r.qZA()),2&Ut){const Et=Dn.value;r.xp6(1),r.Oqu(Et)}}function zn(Ut,Dn){if(1&Ut&&r._UZ(0,"cd-sparkline",72),2&Ut){const Et=Dn.row;r.Q6J("data",Dn.value)("isBinary",Et.cdIsBinary)}}function ri(Ut,Dn){if(1&Ut&&(r.TgZ(0,"a",73),r._uU(1),r.qZA()),2&Ut){const Et=Dn.row,$t=Dn.value;r.Q6J("routerLink",r.VKq(3,Ct,Et.cdLink))("queryParams",Et.cdParams),r.xp6(1),r.Oqu($t)}}function Gi(Ut,Dn){if(1&Ut&&(r._UZ(0,"i",74),r.ALo(1,"boolean")),2&Ut){const Et=Dn.value,$t=r.oxw();r.Q6J("ngClass",r.VKq(4,Ct,$t.icons.check))("hidden",!r.lcZ(1,2,Et))}}function ui(Ut,Dn){1&Ut&&(r._uU(0),r.ALo(1,"dimless")),2&Ut&&r.hij(" ",r.lcZ(1,1,Dn.value)," /s\n")}function vr(Ut,Dn){if(1&Ut&&r._UZ(0,"i",30),2&Ut){const Et=r.oxw(2);r.Q6J("ngClass",r.WLB(1,pr,Et.icons.spinner,Et.icons.spin))}}function Ji(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span",30),r._uU(1),r.qZA()),2&Ut){const Et=r.oxw(),$t=Et.column,_t=Et.row;r.Q6J("ngClass",null!=$t&&null!=$t.customTemplateConfig&&$t.customTemplateConfig.executingClass?$t.customTemplateConfig.executingClass:"text-muted italic"),r.xp6(1),r.hij("(",_t.cdExecuting,")")}}function mn(Ut,Dn){if(1&Ut&&(r.YNc(0,vr,1,4,"i",40),r.TgZ(1,"span",30),r._uU(2),r.qZA(),r.YNc(3,Ji,2,2,"span",40)),2&Ut){const Et=Dn.column,$t=Dn.row,_t=Dn.value;r.Q6J("ngIf",$t.cdExecuting),r.xp6(1),r.Q6J("ngClass",null==Et||null==Et.customTemplateConfig?null:Et.customTemplateConfig.valueClass),r.xp6(1),r.hij(" ",_t," "),r.xp6(1),r.Q6J("ngIf",$t.cdExecuting)}}function Rn(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span"),r.ALo(1,"pipeFunction"),r._uU(2),r.qZA()),2&Ut){const Et=Dn.value,$t=r.oxw();r.Tol(r.Dn7(1,4,Et,$t.useCustomClass,$t)),r.xp6(2),r.Oqu(Et)}}function Wn(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span",76),r._uU(1),r.qZA()),2&Ut){const Et=r.oxw().$implicit,$t=r.oxw().column;r.Q6J("ngClass",null!=$t&&null!=$t.customTemplateConfig&&$t.customTemplateConfig.map&&null!=$t&&null!=$t.customTemplateConfig&&null!=$t.customTemplateConfig.map[Et]&&$t.customTemplateConfig.map[Et].class?$t.customTemplateConfig.map[Et].class:null!=$t&&null!=$t.customTemplateConfig&&$t.customTemplateConfig.class?$t.customTemplateConfig.class:"badge-primary"),r.xp6(1),r.hij(" ",null!=$t&&null!=$t.customTemplateConfig&&$t.customTemplateConfig.map&&null!=$t&&null!=$t.customTemplateConfig&&null!=$t.customTemplateConfig.map[Et]&&$t.customTemplateConfig.map[Et].value?$t.customTemplateConfig.map[Et].value:null!=$t&&null!=$t.customTemplateConfig&&$t.customTemplateConfig.prefix?$t.customTemplateConfig.prefix+Et:Et," ")}}function et(Ut,Dn){1&Ut&&(r.TgZ(0,"span"),r._uU(1,"\xa0"),r.qZA())}function Le(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span"),r.YNc(1,Wn,2,2,"span",75),r.YNc(2,et,2,0,"span",63),r.qZA()),2&Ut){const Et=Dn.$implicit,$t=Dn.last,_t=r.oxw().column;r.xp6(1),r.Q6J("ngIf",null!=_t&&null!=_t.customTemplateConfig&&_t.customTemplateConfig.map&&null!=_t&&null!=_t.customTemplateConfig&&null!=_t.customTemplateConfig.map[Et]&&_t.customTemplateConfig.map[Et].value?_t.customTemplateConfig.map[Et].value:null!=_t&&null!=_t.customTemplateConfig&&_t.customTemplateConfig.prefix?_t.customTemplateConfig.prefix+Et:Et),r.xp6(1),r.Q6J("ngIf",!$t)}}function Re(Ut,Dn){1&Ut&&(r.YNc(0,Le,3,2,"span",32),r.ALo(1,"array")),2&Ut&&r.Q6J("ngForOf",r.lcZ(1,1,Dn.value))}function Se(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span"),r._uU(1),r.ALo(2,"map"),r.qZA()),2&Ut){const Et=Dn.column,$t=Dn.value;r.xp6(1),r.Oqu(r.xi3(2,1,$t,null==Et?null:Et.customTemplateConfig))}}function dt(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span",77),r._uU(1),r.ALo(2,"truncate"),r.qZA()),2&Ut){const Et=Dn.column,$t=Dn.value;r.Q6J("title",$t),r.xp6(1),r.Oqu(r.Dn7(2,2,$t,null==Et||null==Et.customTemplateConfig?null:Et.customTemplateConfig.length,null==Et||null==Et.customTemplateConfig?null:Et.customTemplateConfig.omission))}}function st(Ut,Dn){if(1&Ut){const Et=r.EpF();r.TgZ(0,"a",78),r.NdJ("click",function(_t){const yt=r.CHM(Et),Vt=yt.row,yn=yt.expanded;return r.oxw().toggleExpandRow(Vt,yn,_t)}),r.qZA()}if(2&Ut){const Et=Dn.expanded;r.ekj("expand-collapse-icon-right",!Et)("expand-collapse-icon-down",Et)}}function nn(Ut,Dn){if(1&Ut&&(r.TgZ(0,"span",77),r.ALo(1,"cdDate"),r._uU(2),r.ALo(3,"relativeDate"),r.qZA()),2&Ut){const Et=Dn.value;r.Q6J("title",r.lcZ(1,2,Et)),r.xp6(2),r.Oqu(r.lcZ(3,4,Et))}}const Fe=[[["",8,"only-table-actions"]],[["",8,"table-actions"]],[["","cdTableDetail",""]]],Lr=[".only-table-actions",".table-actions","[cdTableDetail]"];let ti=(()=>{class Ut{constructor(Et,$t){this.cdRef=Et,this.timerService=$t,this.columnMode="flex",this.onlyActionHeader=!1,this.toolHeader=!0,this.searchField=!0,this.header=!0,this.footer=!0,this.limit=10,this.maxLimit=9999,this.hasDetails=!1,this.autoReload=5e3,this.identifier="id",this.forceIdentifier=!1,this.selectionType=void 0,this.updateSelectionOnRefresh="onChange",this.updateExpandedOnRefresh="onChange",this.autoSave=!0,this.searchableObjects=!1,this.extraFilterableColumns=[],this.status=new g.c,this.serverSide=!1,this.count=0,this.fetchData=new r.vpe,this.updateSelection=new r.vpe,this.setExpandedRow=new r.vpe,this.columnFiltersChanged=new r.vpe,this.selection=new x.r,this.expanded=void 0,this.icons=M.P,this.cellTemplates={},this.search="",this.rows=[],this.loadingIndicator=!0,this.paginationClasses={pagerLeftArrow:M.P.leftArrowDouble,pagerRightArrow:M.P.rightArrowDouble,pagerPrevious:M.P.leftArrow,pagerNext:M.P.rightArrow},this.userConfig={},this.localStorage=window.localStorage,this.updating=!1,this.columnFilters=[]}get columnFiltered(){return u().some(this.columnFilters,Et=>void 0!==Et.value)}static prepareSearch(Et){return(Et=Et.toLowerCase().replace(/,/g,"")).match(/['"][^'"]+['"]/)&&(Et=Et.replace(/['"][^'"]+['"]/g,$t=>$t.replace(/(['"])([^'"]+)(['"])/g,"$2").replace(/ /g,"+"))),Et.split(" ").filter($t=>$t)}ngOnInit(){if(this.localColumns=u().clone(this.columns),this.serverSide&&(this.reloadData=u().debounce(this.reloadData,1e3)),this.table.element.addEventListener("mouseenter",Et=>Et.stopPropagation()),this._addTemplates(),!this.sorts){const Et=-1!==u().findIndex(this.localColumns,["prop",this.identifier]);this.sorts=this.createSortingDefinition(Et?this.identifier:this.localColumns[0].prop+""),!Et&&!this.forceIdentifier&&(this.identifier=this.localColumns[0].prop+"")}this.initUserConfig(),this.localColumns.forEach(Et=>{Et.cellTransformation&&(Et.cellTemplate=this.cellTemplates[Et.cellTransformation]),Et.flexGrow||(Et.flexGrow=Et.prop+""===this.identifier?1:2),Et.resizeable||(Et.resizeable=!1)}),this.initExpandCollapseColumn(),this.initCheckboxColumn(),this.filterHiddenColumns(),this.initColumnFilters(),this.updateColumnFilterOptions(),this.updateSelection.emit(new x.r),this.fetchData.observers.length>0&&(this.loadingIndicator=!0),u().isInteger(this.autoReload)&&this.autoReload>0?this.reloadSubscriber=this.timerService.get(()=>(0,e.of)(0),this.autoReload).subscribe(()=>{this.reloadData()}):this.autoReload?this.useData():this.reloadData()}initUserConfig(){this.autoSave&&(this.tableName=this._calculateUniqueTableName(this.localColumns),this._loadUserConfig(),this._initUserConfigAutoSave()),this.userConfig.limit||(this.userConfig.limit=this.limit),this.userConfig.offset>=0||(this.userConfig.offset=this.table.offset),this.userConfig.search||(this.userConfig.search=this.search),this.userConfig.sorts||(this.userConfig.sorts=this.sorts),this.userConfig.columns?this.userConfig.columns.forEach(Et=>{for(let $t=0;$t<this.localColumns.length;$t++)this.localColumns[$t].prop===Et.prop&&(this.localColumns[$t].isHidden=Et.isHidden)}):this.updateUserColumns()}_calculateUniqueTableName(Et){const $t=_t=>{if(!u().isString(_t))return 0;let yt=0;for(let Vt=0;Vt<_t.length;Vt++)yt+=_t.charCodeAt(Vt)*Vt;return yt};return Et.reduce((_t,yt,Vt)=>($t(yt.prop)+$t(yt.name))*(Vt+1)+_t,0).toString()}_loadUserConfig(){const Et=this.localStorage.getItem(this.tableName);Et&&(this.userConfig=JSON.parse(Et))}_initUserConfigAutoSave(){const Et=new p.y(this._initUserConfigProxy.bind(this));this.saveSubscriber=Et.subscribe(this._saveUserConfig.bind(this))}_initUserConfigProxy(Et){this.userConfig=new Proxy(this.userConfig,{set:($t,_t,yt)=>($t[_t]=yt,Et.next($t),!0)})}_saveUserConfig(Et){this.localStorage.setItem(this.tableName,JSON.stringify(Et))}updateUserColumns(){this.userConfig.columns=this.localColumns.map(Et=>({prop:Et.prop,name:Et.name,isHidden:!!Et.isHidden}))}initCheckboxColumn(){"multiClick"===this.selectionType&&this.localColumns.unshift({prop:void 0,resizeable:!1,sortable:!1,draggable:!1,checkboxable:!1,canAutoResize:!1,cellClass:"cd-datatable-checkbox",cellTemplate:this.rowSelectionTpl,width:30})}initExpandCollapseColumn(){this.hasDetails&&this.localColumns.unshift({prop:void 0,resizeable:!1,sortable:!1,draggable:!1,isHidden:!1,canAutoResize:!1,cellClass:"cd-datatable-expand-collapse",width:40,cellTemplate:this.rowDetailsTpl})}filterHiddenColumns(){this.tableColumns=this.localColumns.filter(Et=>!Et.isHidden)}initColumnFilters(){let Et=u().filter(this.localColumns,{filterable:!0});Et=[...Et,...this.extraFilterableColumns],this.columnFilters=Et.map($t=>({column:$t,options:[],value:$t.filterInitValue?this.createColumnFilterOption($t.filterInitValue,$t.pipe):void 0})),this.selectedFilter=u().first(this.columnFilters)}createColumnFilterOption(Et,$t){return{raw:u().toString(Et),formatted:$t?$t.transform(Et):u().toString(Et)}}updateColumnFilterOptions(){this.columnFilters.forEach(Et=>{let $t=[];if(u().isUndefined(Et.column.filterOptions)){const yt=u().filter(u().map(this.data,Et.column.prop),Vt=>u().isString(Vt)&&""!==Vt||u().isBoolean(Vt)||u().isFinite(Vt)||u().isDate(Vt));$t=u().sortedUniq(yt.sort())}else $t=Et.column.filterOptions;const _t=$t.map(yt=>this.createColumnFilterOption(yt,Et.column.pipe));Et.value&&u().isUndefined(u().find(_t,{raw:Et.value.raw}))&&(Et.value=void 0),Et.options=_t})}onSelectFilter(Et){this.selectedFilter=Et}onChangeFilter(Et,$t){Et.value=u().isEqual(Et.value,$t)?void 0:$t,this.updateFilter()}doColumnFiltering(){const Et=[];let $t=[...this.data],_t=[];return this.columnFilters.forEach(yt=>{if(void 0===yt.value)return;Et.push({name:yt.column.name,prop:yt.column.prop,value:yt.value});const Vt=u().partition($t,yn=>{const xi=(0,a.Hg)(yt.column.prop)(yn,yt.column.prop);return u().isUndefined(yt.column.filterPredicate)?`${xi}`===yt.value.raw:yt.column.filterPredicate(yn,yt.value.raw)});$t=Vt[0],_t=[..._t,...Vt[1]]}),this.columnFiltersChanged.emit({filters:Et,data:$t,dataOut:_t}),u().forEach(this.selection.selected,yt=>{void 0===u().find($t,{[this.identifier]:yt[this.identifier]})&&(this.selection=new x.r,this.onSelect(this.selection))}),$t}ngOnDestroy(){this.reloadSubscriber&&this.reloadSubscriber.unsubscribe(),this.saveSubscriber&&this.saveSubscriber.unsubscribe()}ngAfterContentChecked(){this.table&&this.table.element.clientWidth!==this.currentWidth&&(this.currentWidth=this.table.element.clientWidth,this.table.recalculate(),u().get(this.table,"cd").markForCheck())}_addTemplates(){this.cellTemplates.bold=this.tableCellBoldTpl,this.cellTemplates.checkIcon=this.checkIconTpl,this.cellTemplates.sparkline=this.sparklineTpl,this.cellTemplates.routerLink=this.routerLinkTpl,this.cellTemplates.perSecond=this.perSecondTpl,this.cellTemplates.executing=this.executingTpl,this.cellTemplates.classAdding=this.classAddingTpl,this.cellTemplates.badge=this.badgeTpl,this.cellTemplates.map=this.mapTpl,this.cellTemplates.truncate=this.truncateTpl,this.cellTemplates.timeAgo=this.timeAgoTpl}useCustomClass(Et){if(!this.customCss)throw new Error("Custom classes are not set!");const $t=Object.keys(this.customCss),_t=Object.values(this.customCss).map((yt,Vt)=>(u().isFunction(yt)&&yt(Et)||yt===Et)&&$t[Vt]).filter(yt=>yt).join(" ");return u().isEmpty(_t)?void 0:_t}ngOnChanges(Et){Et.data&&Et.data.currentValue&&this.useData()}setLimit(Et){const $t=Number(Et.target.value);$t>0&&(this.maxLimit&&$t>this.maxLimit?(this.userConfig.limit=this.maxLimit,Et.srcElement.value=this.maxLimit):this.userConfig.limit=$t),this.serverSide&&this.reloadData()}reloadData(){var Et;if(!this.updating){this.status=new g.c;const $t=new w.E(()=>{$t.errorConfig.displayError&&(this.status=new g.c("danger","Failed to load data.")),$t.errorConfig.resetData&&(this.data=[]),this.useData()});if($t.pageInfo.offset=this.userConfig.offset,$t.pageInfo.limit=this.userConfig.limit,$t.search=this.userConfig.search,null===(Et=this.userConfig.sorts)||void 0===Et?void 0:Et.length){const _t=this.userConfig.sorts[0];$t.sort=`${"desc"===_t.dir?"-":"+"}${_t.prop}`}this.fetchData.emit($t),this.updating=!0}}refreshBtn(){this.loadingIndicator=!0,this.reloadData()}changePage(Et){this.userConfig.offset=Et.offset,this.userConfig.limit=Et.limit,this.serverSide&&this.reloadData()}rowIdentity(){return Et=>{const $t=Et[this.identifier];if(u().isUndefined($t))throw new Error(`Wrong identifier "${this.identifier}" -> "${$t}"`);return $t}}useData(){!this.data||(this.updateColumnFilterOptions(),this.updateFilter(),this.reset(),this.updateSelected(),this.updateExpanded())}reset(){this.loadingIndicator=!1,this.updating=!1}updateSelected(){if("never"===this.updateSelectionOnRefresh)return;const Et=new Set;this.selection.selected.forEach(_t=>{for(const yt of this.data)_t[this.identifier]===yt[this.identifier]&&Et.add(yt)});const $t=Array.from(Et.values());"onChange"===this.updateSelectionOnRefresh&&u().isEqual(this.selection.selected,$t)||(this.selection.selected=$t,this.onSelect(this.selection))}updateExpanded(){if(u().isUndefined(this.expanded)||"never"===this.updateExpandedOnRefresh)return;const Et=this.expanded[this.identifier],$t=u().find(this.data,_t=>Et===_t[this.identifier]);"onChange"===this.updateExpandedOnRefresh&&u().isEqual(this.expanded,$t)||(this.expanded=$t,this.setExpandedRow.emit($t))}onSelect(Et){u().has(Et,"selected")&&(this.selection.selected=Et.selected),this.updateSelection.emit(u().clone(this.selection))}toggleColumn(Et){const $t=Et.prop,_t=!Et.isHidden;_t&&1===this.tableColumns.length?Et.isHidden=!0:(u().find(this.localColumns,yt=>yt.prop===$t).isHidden=_t,this.updateColumns())}updateColumns(){this.updateUserColumns(),this.filterHiddenColumns();const Et=this.userConfig.sorts[0].prop;u().find(this.tableColumns,$t=>$t.prop===Et)||(this.userConfig.sorts=this.createSortingDefinition(this.tableColumns[0].prop)),this.table.recalculate(),this.cdRef.detectChanges()}createSortingDefinition(Et){return[{prop:Et,dir:a.Sr.asc}]}changeSorting({sorts:Et}){this.userConfig.sorts=Et,this.serverSide&&(this.userConfig.offset=0,this.reloadData())}onClearSearch(){this.search="",this.updateFilter()}onClearFilters(){this.columnFilters.forEach(Et=>{Et.value=void 0}),this.selectedFilter=u().first(this.columnFilters),this.updateFilter()}updateFilter(){if(this.serverSide)this.userConfig.search!==this.search&&(this.userConfig.offset=0,this.userConfig.limit=this.limit,this.userConfig.search=this.search,this.updating=!1,this.reloadData()),this.rows=this.data;else{let Et=0!==this.columnFilters.length?this.doColumnFiltering():this.data;if(this.search.length>0&&Et){const $t=this.localColumns.filter(_t=>_t.cellTransformation!==S.e.sparkline);Et=this.subSearch(Et,Ut.prepareSearch(this.search),$t),this.table.offset=0}this.rows=Et}}subSearch(Et,$t,_t){if(0===$t.length||0===Et.length)return Et;const yt=$t.pop().replace(/\+/g," ").split(":"),Vt=[..._t];return 2===yt.length&&(_t=Vt.filter(yn=>-1!==yn.name.toLowerCase().indexOf(yt[0]))),Et=this.basicDataSearch(u().last(yt),Et,_t),this.subSearch(Et,$t,Vt)}basicDataSearch(Et,$t,_t){return 0===Et.length?$t:$t.filter(yt=>_t.filter(Vt=>{let yn=u().get(yt,Vt.prop);if(u().isUndefined(Vt.pipe)||(yn=Vt.pipe.transform(yn)),u().isUndefined(yn)||u().isNull(yn))return!1;if(u().isObjectLike(yn)){if(!this.searchableObjects)return!1;yn=JSON.stringify(yn)}return u().isArray(yn)?yn=yn.join(" "):(u().isNumber(yn)||u().isBoolean(yn))&&(yn=yn.toString()),-1!==yn.toLowerCase().indexOf(Et)}).length>0)}getRowClass(){return()=>({clickable:!u().isUndefined(this.selectionType)})}toggleExpandRow(Et,$t,_t){_t.stopPropagation(),$t?(this.expanded=void 0,this.setExpandedRow.emit(void 0)):(this.expanded=Et,this.table.rowDetail.collapseAllRows(),this.setExpandedRow.emit(Et)),this.table.rowDetail.toggleExpandRow(Et)}}return Ut.\u0275fac=function(Et){return new(Et||Ut)(r.Y36(r.sBO),r.Y36(B.f))},Ut.\u0275cmp=r.Xpm({type:Ut,selectors:[["cd-table"]],viewQuery:function(Et,$t){if(1&Et&&(r.Gf(a.nE,7),r.Gf(Ve,7),r.Gf(Xe,7),r.Gf(He,7),r.Gf(Pe,7),r.Gf(Ge,7),r.Gf(Oe,7),r.Gf(Tt,7),r.Gf(We,7),r.Gf(Qt,7),r.Gf(Nt,7),r.Gf(Yt,7),r.Gf(dn,7),r.Gf(rn,7)),2&Et){let _t;r.iGM(_t=r.CRH())&&($t.table=_t.first),r.iGM(_t=r.CRH())&&($t.tableCellBoldTpl=_t.first),r.iGM(_t=r.CRH())&&($t.sparklineTpl=_t.first),r.iGM(_t=r.CRH())&&($t.routerLinkTpl=_t.first),r.iGM(_t=r.CRH())&&($t.checkIconTpl=_t.first),r.iGM(_t=r.CRH())&&($t.perSecondTpl=_t.first),r.iGM(_t=r.CRH())&&($t.executingTpl=_t.first),r.iGM(_t=r.CRH())&&($t.classAddingTpl=_t.first),r.iGM(_t=r.CRH())&&($t.badgeTpl=_t.first),r.iGM(_t=r.CRH())&&($t.mapTpl=_t.first),r.iGM(_t=r.CRH())&&($t.truncateTpl=_t.first),r.iGM(_t=r.CRH())&&($t.timeAgoTpl=_t.first),r.iGM(_t=r.CRH())&&($t.rowDetailsTpl=_t.first),r.iGM(_t=r.CRH())&&($t.rowSelectionTpl=_t.first)}},inputs:{data:"data",columns:"columns",sorts:"sorts",columnMode:"columnMode",onlyActionHeader:"onlyActionHeader",toolHeader:"toolHeader",searchField:"searchField",header:"header",footer:"footer",limit:"limit",maxLimit:"maxLimit",hasDetails:"hasDetails",autoReload:"autoReload",identifier:"identifier",forceIdentifier:"forceIdentifier",selectionType:"selectionType",updateSelectionOnRefresh:"updateSelectionOnRefresh",updateExpandedOnRefresh:"updateExpandedOnRefresh",autoSave:"autoSave",searchableObjects:"searchableObjects",customCss:"customCss",extraFilterableColumns:"extraFilterableColumns",status:"status",serverSide:"serverSide",count:"count"},outputs:{fetchData:"fetchData",updateSelection:"updateSelection",setExpandedRow:"setExpandedRow",columnFiltersChanged:"columnFiltersChanged"},features:[r.TTD],ngContentSelectors:Lr,decls:37,vars:21,consts:function(){let Dn,Et,$t,_t,yt,Vt,yn;return Dn="Clear filters",Et="selected",$t="total",_t="found",yt="found",Vt="total",yn="Expand/Collapse Row",[[1,"dataTables_wrapper"],["class","dataTables_header clearfix",4,"ngIf"],[1,"bootstrap","cd-datatable",3,"cssClasses","selectionType","selected","sorts","columns","columnMode","rows","rowClass","headerHeight","footerHeight","count","externalPaging","externalSorting","limit","offset","loadingIndicator","rowIdentity","rowHeight","select","sort","page"],["table",""],["ngx-datatable-cell-template",""],["rowSelectionTpl",""],["rowHeight","auto"],["detailRow",""],["ngx-datatable-row-detail-template",""],["ngx-datatable-footer-template",""],["tableCellBoldTpl",""],["sparklineTpl",""],["routerLinkTpl",""],["checkIconTpl",""],["perSecondTpl",""],["executingTpl",""],["classAddingTpl",""],["badgeTpl",""],["mapTpl",""],["truncateTpl",""],["rowDetailsTpl",""],["timeAgoTpl",""],[1,"dataTables_header","clearfix"],[1,"cd-datatable-actions"],["class","btn-group widget-toolbar",4,"ngIf"],["class","input-group search",4,"ngIf"],["class","input-group dataTables_paginate",4,"ngIf"],[1,"widget-toolbar"],["ngbDropdown","","autoClose","outside",1,"tc_menuitem"],["ngbDropdownToggle","","title","toggle columns",1,"btn","btn-light","tc_columnBtn"],[3,"ngClass"],["ngbDropdownMenu",""],[4,"ngFor","ngForOf"],["class","widget-toolbar tc_refreshBtn",4,"ngIf"],[1,"btn-group","widget-toolbar"],["ngbDropdown","","placement","bottom-right",1,"tc_filter_name"],["ngbDropdownToggle","","title","Filter",1,"btn","btn-light"],["ngbDropdown","","placement","bottom-right",1,"tc_filter_option"],["ngbDropdownToggle","",1,"btn","btn-light"],["ngbDropdownItem","",3,"click"],[3,"ngClass",4,"ngIf"],[1,"input-group","search"],[1,"input-group-text"],["aria-label","search","type","text",1,"form-control",3,"ngModel","ngModelChange","keyup"],["type","button","title","Clear",1,"btn","btn-light",3,"click"],[1,"input-group","dataTables_paginate"],["aria-label","table pagination","type","number","min","1","max","9999",1,"form-control",3,"value","click","keyup","blur"],["ngbDropdownItem","",3,"click",4,"ngIf"],[1,"custom-control","custom-checkbox","py-0"],["type","checkbox",1,"custom-control-input",3,"name","id","checked"],[1,"custom-control-label",3,"for"],[1,"widget-toolbar","tc_refreshBtn"],["type","button","title","Refresh",3,"ngbTooltip","click"],[1,"filter-chips"],["href","",1,"tc_clearSelections",3,"click"],Dn,["class","badge badge-info me-2",4,"ngIf"],[1,"badge","badge-info","me-2"],[1,"me-2"],[1,"badge-remove",3,"click"],["aria-hidden","true",3,"ngClass"],["type","checkbox",1,"cd-datatable-checkbox",3,"checked"],[1,"page-count"],[4,"ngIf"],[4,"ngIf","ngIfElse"],["serverSideTpl",""],[3,"page","size","count","hidden","pageChange"],Et,$t,_t,yt,Vt,[3,"data","isBinary"],[3,"routerLink","queryParams"],[3,"ngClass","hidden"],["class","badge",3,"ngClass",4,"ngIf"],[1,"badge",3,"ngClass"],["data-toggle","tooltip",3,"title"],["href","javascript:void(0)","title",yn,1,"expand-collapse-icon","tc_expand-collapse",3,"click"]]},template:function(Et,$t){1&Et&&(r.F$t(Fe),r.TgZ(0,"div",0),r.YNc(1,vt,3,0,"div",1),r.YNc(2,er,13,9,"div",1),r.YNc(3,bi,6,1,"div",1),r.TgZ(4,"ngx-datatable",2,3),r.NdJ("select",function(yt){return $t.onSelect(yt)})("sort",function(yt){return $t.changeSorting(yt)})("page",function(yt){return $t.changePage(yt)}),r.YNc(6,fi,1,2,"ng-template",4,5,r.W1O),r.TgZ(8,"ngx-datatable-row-detail",6,7),r.YNc(10,no,1,0,"ng-template",8),r.qZA(),r.TgZ(11,"ngx-datatable-footer"),r.YNc(12,Zn,6,7,"ng-template",9),r.qZA()()(),r.YNc(13,Xn,2,1,"ng-template",null,10,r.W1O),r.YNc(15,zn,1,2,"ng-template",null,11,r.W1O),r.YNc(17,ri,2,5,"ng-template",null,12,r.W1O),r.YNc(19,Gi,2,6,"ng-template",null,13,r.W1O),r.YNc(21,ui,2,3,"ng-template",null,14,r.W1O),r.YNc(23,mn,4,4,"ng-template",null,15,r.W1O),r.YNc(25,Rn,3,8,"ng-template",null,16,r.W1O),r.YNc(27,Re,2,3,"ng-template",null,17,r.W1O),r.YNc(29,Se,3,4,"ng-template",null,18,r.W1O),r.YNc(31,dt,3,6,"ng-template",null,19,r.W1O),r.YNc(33,st,1,4,"ng-template",4,20,r.W1O),r.YNc(35,nn,4,6,"ng-template",null,21,r.W1O)),2&Et&&(r.xp6(1),r.Q6J("ngIf",$t.onlyActionHeader),r.xp6(1),r.Q6J("ngIf",$t.toolHeader),r.xp6(1),r.Q6J("ngIf",$t.toolHeader&&$t.columnFiltered),r.xp6(1),r.Q6J("cssClasses",$t.paginationClasses)("selectionType",$t.selectionType)("selected",$t.selection.selected)("sorts",$t.userConfig.sorts)("columns",$t.tableColumns)("columnMode",$t.columnMode)("rows",$t.rows)("rowClass",$t.getRowClass())("headerHeight",$t.header?"auto":0)("footerHeight",$t.footer?"auto":0)("count",$t.count)("externalPaging",$t.serverSide)("externalSorting",$t.serverSide)("limit",$t.userConfig.limit>0?$t.userConfig.limit:void 0)("offset",$t.userConfig.offset>=0?$t.userConfig.offset:0)("loadingIndicator",$t.loadingIndicator)("rowIdentity",$t.rowIdentity())("rowHeight","auto"))},directives:[W.O5,j.jt,j.iD,W.mk,j.Vi,W.sg,j.TH,q.Fj,q.JJ,q.On,j._L,a.nE,a.vq,a.$7,a.AR,a.dX,a.ii,ue,re.l,H.yS],pipes:[se.i,ae.n,ie.i,fe.I,he.b,Ce.W,ce.N,Be.h],styles:['.dataTables_wrapper[_ngcontent-%COMP%]{margin-bottom:25px;max-width:99.9%}.dataTables_wrapper[_ngcontent-%COMP%]   .separator[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.09);display:inline-block;height:30px;margin-left:5px;padding-left:5px;vertical-align:middle}.dataTables_wrapper[_ngcontent-%COMP%]   .widget-toolbar[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.09);float:right;padding:0 8px}.dataTables_wrapper[_ngcontent-%COMP%]   .widget-toolbar[_ngcontent-%COMP%]   .form-check[_ngcontent-%COMP%]{padding-left:0}.dataTables_wrapper[_ngcontent-%COMP%]   .dataTables_length[_ngcontent-%COMP%] > input[_ngcontent-%COMP%]{line-height:25px;text-align:right}.dataTables_header[_ngcontent-%COMP%]{background-color:#f8f9fa;border:1px solid #ced4da;border-bottom:0;padding:5px;position:relative}.dataTables_header[_ngcontent-%COMP%]   .cd-datatable-actions[_ngcontent-%COMP%]{float:left}.dataTables_header[_ngcontent-%COMP%]   .form-group[_ngcontent-%COMP%]{padding-left:8px}.dataTables_header[_ngcontent-%COMP%]   .input-group[_ngcontent-%COMP%]{border-left:1px solid rgba(0,0,0,.09);float:right;max-width:250px;padding-left:8px;padding-right:8px;width:40%}.dataTables_header[_ngcontent-%COMP%]   .input-group[_ngcontent-%COMP%]   .form-control[_ngcontent-%COMP%]{height:30px}.dataTables_header[_ngcontent-%COMP%]   .input-group.dataTables_paginate[_ngcontent-%COMP%]{min-width:85px;padding-right:8px;width:8%}.dataTables_header[_ngcontent-%COMP%]   .filter-chips[_ngcontent-%COMP%]{float:right;padding:0 8px}.dataTables_header[_ngcontent-%COMP%]   .filter-chips[_ngcontent-%COMP%]   .badge-remove[_ngcontent-%COMP%]{color:#fff}  cd-table .cd-datatable{border:1px solid #ced4da;margin-bottom:0;max-width:none!important}  cd-table .cd-datatable .progress-linear{display:block;height:5px;margin:0;padding:0;position:relative;width:100%}  cd-table .cd-datatable .progress-linear .container{background-color:#25828e}  cd-table .cd-datatable .progress-linear .container .bar{background-color:#25828e;height:100%;left:0;overflow:hidden;position:absolute;width:100%}  cd-table .cd-datatable .progress-linear .container .bar:before{animation:progress-loading 3s linear infinite;background-color:#25828e;content:"";display:block;height:100%;left:-200px;position:absolute;width:200px}  cd-table .cd-datatable .datatable-header{background-clip:padding-box;background-color:#f8f9fa;background-image:linear-gradient(to bottom,#f8f9fa 0,#e9ecef 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#fffafafa",endColorstr="#ffededed",GradientType=0)}  cd-table .cd-datatable .datatable-header .sort-asc,   cd-table .cd-datatable .datatable-header .sort-desc{color:#25828e}  cd-table .cd-datatable .datatable-header .datatable-header-cell{border:0;border-bottom:1px solid #ced4da;border-left:1px solid #ced4da;padding:5px;font-weight:700;text-align:left}  cd-table .cd-datatable .datatable-header .datatable-header-cell .datatable-header-cell-label:after{font-family:ForkAwesome;font-weight:400;height:9px;left:10px;line-height:12px;position:relative;vertical-align:baseline;width:12px}  cd-table .cd-datatable .datatable-header .datatable-header-cell.sortable .datatable-header-cell-label:after{content:" \\f0dc"}  cd-table .cd-datatable .datatable-header .datatable-header-cell.sortable.sort-active.sort-asc .datatable-header-cell-label:after{content:" \\f160"}  cd-table .cd-datatable .datatable-header .datatable-header-cell.sortable.sort-active.sort-desc .datatable-header-cell-label:after{content:" \\f161"}  cd-table .cd-datatable .datatable-header .datatable-header-cell:first-child{border-left:0}  cd-table .cd-datatable .datatable-body{margin-bottom:-6px}  cd-table .cd-datatable .datatable-body .empty-row{background-color:#aee3ea;font-style:italic;font-weight:700;padding-bottom:5px;padding-top:5px;text-align:center}  cd-table .cd-datatable .datatable-body .datatable-body-row.clickable:hover .datatable-row-group{background-color:#aee3ea;transition-duration:.3s;transition-property:background;transition-timing-function:linear}  cd-table .cd-datatable .datatable-body .datatable-body-row.datatable-row-even{background-color:#fff}  cd-table .cd-datatable .datatable-body .datatable-body-row.datatable-row-odd{background-color:#fff}  cd-table .cd-datatable .datatable-body .datatable-body-row.active,   cd-table .cd-datatable .datatable-body .datatable-body-row.active:hover{background-color:#86d5df}  cd-table .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell{border:0;border-bottom:1px solid #ced4da;border-left:1px solid #ced4da;padding:5px}  cd-table .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell:first-child{border-left:0}  cd-table .cd-datatable .datatable-body .datatable-body-row .datatable-body-cell .datatable-body-cell-label{display:block;height:100%}  cd-table .cd-datatable .datatable-body .datatable-row-detail{border-bottom:2px solid #ced4da;overflow-y:visible!important;padding:20px}  cd-table .cd-datatable .datatable-body .expand-collapse-icon{display:block;height:100%;text-align:center}  cd-table .cd-datatable .datatable-body .expand-collapse-icon:hover{text-decoration:none}  cd-table .cd-datatable .datatable-body .expand-collapse-icon-right:before{color:#212529;font-family:ForkAwesome,sans-serif;font-size:1rem;line-height:1;content:"\\f105"}  cd-table .cd-datatable .datatable-body .expand-collapse-icon-down:before{color:#212529;font-family:ForkAwesome,sans-serif;font-size:1rem;line-height:1;content:"\\f107"}  cd-table .cd-datatable .datatable-footer .selected-count,   cd-table .cd-datatable .datatable-footer .page-count{font-style:italic;min-height:2rem;padding-left:.3rem;padding-top:.3rem}  cd-table .cd-datatable .cd-datatable-checkbox{text-align:center}  cd-table .cd-datatable .cd-datatable-checkbox:checked{accent-color:#25828e}@keyframes progress-loading{0%{left:-200px;width:15%}50%{width:30%}70%{width:70%}80%{left:50%}95%{left:120%}to{left:100%}}'],changeDetection:0}),Ut})()},93523:(v,b,i)=>{"use strict";i.d(b,{G:()=>u,o:()=>f});var r=i(23815),a=i.n(r);function f(...g){switch(g.length){case 1:return e.apply(void 0,g);case 3:return p.apply(void 0,g);default:throw new Error}}function u(g,S,M){const w=`__ignore_${S}`;Array.isArray(g[w])?g[w].push(M):g[w]=[M]}function e(g){for(const S of Object.getOwnPropertyNames(g.prototype)){const M=Object.getOwnPropertyDescriptor(g.prototype,S);!(M.value instanceof Function)||"constructor"===S||(p(g.prototype,S,M),Object.defineProperty(g.prototype,S,M))}}function p(g,S,M){void 0===M&&(M=Object.getOwnPropertyDescriptor(g,S));const w=M.value;M.value=function(){const x=`__ignore_${S}`,B=g[x]||[],W=[];for(let q=0;q<arguments.length;q++)W[q]=a().isString(arguments[q])&&-1===B.indexOf(q)?encodeURIComponent(arguments[q]):arguments[q];return w.apply(this,W)}}},82945:(v,b,i)=>{"use strict";i.d(b,{U:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{constructor(g){this.elementRef=g,this.focus=!0}ngAfterViewInit(){const g=this.elementRef.nativeElement;this.focus&&a().isFunction(g.focus)&&g.focus()}set autofocus(g){a().isBoolean(g)?this.focus=g:a().isFunction(g)&&(this.focus=g())}}return e.\u0275fac=function(g){return new(g||e)(f.Y36(f.SBq))},e.\u0275dir=f.lG2({type:e,selectors:[["","autofocus",""]],inputs:{autofocus:"autofocus"}}),e})()},17932:(v,b,i)=>{"use strict";i.d(b,{Q:()=>g});var r=i(89724),a=i(23815),f=i.n(a),u=i(47557),e=i(28211),p=i(1659);let g=(()=>{class S{constructor(w,x,B,W){this.elementRef=w,this.control=x,this.dimlessBinaryPipe=B,this.formatter=W,this.ngModelChange=new r.vpe,this.el=this.elementRef.nativeElement}ngOnInit(){this.setValue(this.el.value)}setValue(w){/^[\d.]+$/.test(w)&&(w+=this.defaultUnit||"m");const x=this.formatter.toBytes(w),B=this.round(x);this.el.value=this.dimlessBinaryPipe.transform(B),null!==x?(this.ngModelChange.emit(this.el.value),this.control.control.setValue(this.el.value)):(this.ngModelChange.emit(null),this.control.control.setValue(null))}round(w){if(null!==w&&0!==w){if(!f().isUndefined(this.minBytes)&&w<this.minBytes)return this.minBytes;if(!f().isUndefined(this.maxBytes)&&w>this.maxBytes)return this.maxBytes;if(!f().isUndefined(this.roundPower)){const x=Math.round(Math.log(w)/Math.log(this.roundPower));return Math.pow(this.roundPower,x)}}return w}onBlur(w){this.setValue(w)}}return S.\u0275fac=function(w){return new(w||S)(r.Y36(r.SBq),r.Y36(p.a5),r.Y36(u.$),r.Y36(e.H))},S.\u0275dir=r.lG2({type:S,selectors:[["","cdDimlessBinary",""]],hostBindings:function(w,x){1&w&&r.NdJ("blur",function(W){return x.onBlur(W.target.value)})},inputs:{minBytes:"minBytes",maxBytes:"maxBytes",roundPower:"roundPower",defaultUnit:"defaultUnit"},outputs:{ngModelChange:"ngModelChange"}}),S})()},35540:(v,b,i)=>{"use strict";i.d(b,{o:()=>a});var r=i(89724);let a=(()=>{class f{}return f.\u0275fac=function(e){return new(e||f)},f.\u0275mod=r.oAB({type:f}),f.\u0275inj=r.cJS({imports:[[]]}),f})()},87925:(v,b,i)=>{"use strict";i.d(b,{o:()=>u});var r=i(89724),a=i(84333),f=i(47640);let u=(()=>{class e{constructor(g,S,M){this.formScope=g,this.authStorageService=S,this.elementRef=M}ngAfterViewInit(){var g,S,M;this.permissions=this.authStorageService.getPermissions();const w=null===(g=this.formScope)||void 0===g?void 0:g.cdFormScope;w&&!(null===(M=null===(S=this.permissions)||void 0===S?void 0:S[w])||void 0===M?void 0:M.update)&&(this.elementRef.nativeElement.disabled=!0)}}return e.\u0275fac=function(g){return new(g||e)(r.Y36(a.T,8),r.Y36(f.j),r.Y36(r.SBq))},e.\u0275dir=r.lG2({type:e,selectors:[["input",3,"cdNoFormInputDisable",""],["select",3,"cdNoFormInputDisable",""],["button",3,"cdNoFormInputDisable",""],["","cdFormInputDisable",""]]}),e})()},63622:(v,b,i)=>{"use strict";i.d(b,{y:()=>e});var r=i(34501),a=i(8958),f=i(93614),u=i(89724);let e=(()=>{class p{constructor(S,M){this.templateRef=S,this.viewContainer=M}set cdFormLoading(S){let M;switch(this.viewContainer.clear(),S){case f.Q.Loading:M=this.resolveNgContent("Loading form data..."),this.viewContainer.createComponent(a.b,{projectableNodes:M});break;case f.Q.Ready:this.viewContainer.createEmbeddedView(this.templateRef);break;case f.Q.Error:M=this.resolveNgContent("Form data could not be loaded."),this.viewContainer.createComponent(r.G,{projectableNodes:M}).instance.type="error"}}resolveNgContent(S){return[[document.createTextNode(S)]]}}return p.\u0275fac=function(S){return new(S||p)(u.Y36(u.Rgc),u.Y36(u.s_b))},p.\u0275dir=u.lG2({type:p,selectors:[["","cdFormLoading",""]],inputs:{cdFormLoading:"cdFormLoading"}}),p})()},84333:(v,b,i)=>{"use strict";i.d(b,{T:()=>a});var r=i(89724);let a=(()=>{class f{}return f.\u0275fac=function(e){return new(e||f)},f.\u0275dir=r.lG2({type:f,selectors:[["","cdFormScope",""]],inputs:{cdFormScope:"cdFormScope"}}),f})()},94276:(v,b,i)=>{"use strict";i.d(b,{b:()=>u});var r=i(89724),a=i(1659);let u=(()=>{class e{constructor(g){this.parent=g}get validClass(){return!!this.control&&this.control.valid&&(this.control.touched||this.control.dirty)}get invalidClass(){return!!this.control&&this.control.invalid&&this.control.touched&&this.control.dirty}get path(){return function f(e,p){return[...p.path,e]}(this.formControlName,this.parent)}get control(){return this.formDirective&&this.formDirective.getControl(this)}get formDirective(){return this.parent?this.parent.formDirective:null}}return e.\u0275fac=function(g){return new(g||e)(r.Y36(a.gN,13))},e.\u0275dir=r.lG2({type:e,selectors:[["",8,"form-control"],["",8,"form-check-input"],["",8,"custom-control-input"]],hostVars:4,hostBindings:function(g,S){2&g&&r.ekj("is-valid",S.validClass)("is-invalid",S.invalidClass)},inputs:{formControlName:"formControlName",formControl:"formControl"}}),e})()},56310:(v,b,i)=>{"use strict";i.d(b,{P:()=>f});var r=i(1659),a=i(89724);let f=(()=>{class u{constructor(p){this.elRef=p,this.validationDisabled=!1}get hasErrors(){return this.formControlNames.some(p=>!p.valid&&p.dirty&&p.touched)&&!this.validationDisabled}get hasSuccess(){return!this.formControlNames.some(p=>!p.valid)&&this.formControlNames.some(p=>p.dirty&&p.touched)&&!this.validationDisabled}get label(){const p=this.elRef.nativeElement.querySelector("label");return p&&p.textContent?p.textContent.trim():"This field"}get isDirtyAndTouched(){return this.formControlNames.some(p=>p.dirty&&p.touched)}}return u.\u0275fac=function(p){return new(p||u)(a.Y36(a.SBq))},u.\u0275dir=a.lG2({type:u,selectors:[["",8,"form-group"]],contentQueries:function(p,g,S){if(1&p&&a.Suo(S,r.u,4),2&p){let M;a.iGM(M=a.CRH())&&(g.formControlNames=M)}},hostVars:4,hostBindings:function(p,g){2&p&&a.ekj("has-error",g.hasErrors)("has-success",g.hasSuccess)},inputs:{validationDisabled:"validationDisabled"}}),u})()},41582:(v,b,i)=>{"use strict";i.d(b,{V:()=>f});var r=i(89724),a=i(1659);let f=(()=>{class u{constructor(){this.validSubmit=new r.vpe}onSubmit(){this.markAsTouchedAndDirty(this.formGroup),this.formGroup.valid&&this.validSubmit.emit(this.formGroup.value)}markAsTouchedAndDirty(p){p instanceof a.cw?Object.keys(p.controls).forEach(g=>this.markAsTouchedAndDirty(p.controls[g])):p instanceof a.Oe?p.controls.forEach(g=>this.markAsTouchedAndDirty(g)):p instanceof a.NI&&p.enabled&&(p.markAsDirty(),p.markAsTouched(),p.updateValueAndValidity())}}return u.\u0275fac=function(p){return new(p||u)},u.\u0275dir=r.lG2({type:u,selectors:[["","formGroup",""]],hostBindings:function(p,g){1&p&&r.NdJ("submit",function(){return g.onSubmit()})},inputs:{formGroup:"formGroup"},outputs:{validSubmit:"validSubmit"}}),u})()},4416:(v,b,i)=>{"use strict";i.d(b,{C:()=>a});var r=i(89724);let a=(()=>{class f{constructor(e,p){this.elementRef=e,this.renderer=p}ngOnInit(){this.renderer.setAttribute(this.elementRef.nativeElement,"tabindex","-1"),this.iElement=this.renderer.createElement("i"),this.renderer.addClass(this.iElement,"fa"),this.renderer.appendChild(this.elementRef.nativeElement,this.iElement),this.update()}getInputElement(){return document.getElementById(this.cdPasswordButton)}update(){const e=this.getInputElement();e&&"text"===e.type?(this.renderer.removeClass(this.iElement,"fa-eye"),this.renderer.addClass(this.iElement,"fa-eye-slash")):(this.renderer.removeClass(this.iElement,"fa-eye-slash"),this.renderer.addClass(this.iElement,"fa-eye"))}onClick(){const e=this.getInputElement();e.type="password"===e.type?"text":"password",this.update()}}return f.\u0275fac=function(e){return new(e||f)(r.Y36(r.SBq),r.Y36(r.Qsj))},f.\u0275dir=r.lG2({type:f,selectors:[["","cdPasswordButton",""]],hostBindings:function(e,p){1&e&&r.NdJ("click",function(){return p.onClick()})},inputs:{cdPasswordButton:"cdPasswordButton"}}),f})()},59376:(v,b,i)=>{"use strict";i.d(b,{m:()=>f});var r=i(89724),a=i(71334);let f=(()=>{class u{constructor(p){this.nav=p,this.localStorage=window.localStorage}ngOnInit(){const p=this.localStorage.getItem(`tabset_${this.cdStatefulTab}`);p&&this.nav.select(p)}onNavChange(p){this.cdStatefulTab&&p.nextId&&this.localStorage.setItem(`tabset_${this.cdStatefulTab}`,p.nextId)}}return u.\u0275fac=function(p){return new(p||u)(r.Y36(a.Pz,9))},u.\u0275dir=r.lG2({type:u,selectors:[["","cdStatefulTab",""]],hostBindings:function(p,g){1&p&&r.NdJ("navChange",function(M){return g.onNavChange(M)})},inputs:{cdStatefulTab:"cdStatefulTab"}}),u})()},99466:(v,b,i)=>{"use strict";i.d(b,{e:()=>r});var r=(()=>{return(a=r||(r={})).bold="bold",a.sparkline="sparkline",a.perSecond="perSecond",a.checkIcon="checkIcon",a.routerLink="routerLink",a.executing="executing",a.classAdding="classAdding",a.badge="badge",a.map="map",a.truncate="truncate",a.timeAgo="timeAgo",r;var a})()},65862:(v,b,i)=>{"use strict";i.d(b,{P:()=>r});var r=(()=>{return(a=r||(r={})).add="fa fa-plus",a.addCircle="fa fa-plus-circle",a.minusCircle="fa fa-minus-circle",a.edit="fa fa-pencil",a.destroy="fa fa-times",a.destroyCircle="fa fa-times-circle",a.exchange="fa fa-exchange",a.copy="fa fa-copy",a.clipboard="fa fa-clipboard",a.flatten="fa fa-chain-broken",a.trash="fa fa-trash-o",a.lock="fa fa-lock",a.unlock="fa fa-unlock",a.clone="fa fa-clone",a.undo="fa fa-undo",a.search="fa fa-search",a.start="fa fa-play",a.stop="fa fa-stop",a.analyse="fa fa-stethoscope",a.deepCheck="fa fa-cog",a.reweight="fa fa-balance-scale",a.up="fa fa-arrow-up",a.left="fa fa-arrow-left",a.right="fa fa-arrow-right",a.down="fa fa-arrow-down",a.erase="fa fa-eraser",a.user="fa fa-user",a.users="fa fa-users",a.share="fa fa-share-alt",a.key="fa fa-key-modern",a.warning="fa fa-exclamation-triangle",a.info="fa fa-info",a.infoCircle="fa fa-info-circle",a.questionCircle="fa fa-question-circle-o",a.danger="fa fa-exclamation-circle",a.success="fa fa-check-circle",a.check="fa fa-check",a.show="fa fa-eye",a.paragraph="fa fa-paragraph",a.terminal="fa fa-terminal",a.magic="fa fa-magic",a.hourglass="fa fa-hourglass-o",a.filledHourglass="fa fa-hourglass",a.table="fa fa-table",a.spinner="fa fa-spinner",a.refresh="fa fa-refresh",a.bullseye="fa fa-bullseye",a.disk="fa fa-hdd-o",a.server="fa fa-server",a.filter="fa fa-filter",a.lineChart="fa fa-line-chart",a.signOut="fa fa-sign-out",a.health="fa fa-heartbeat",a.circle="fa fa-circle",a.bell="fa fa-bell",a.mute="fa fa-bell-slash",a.tag="fa fa-tag",a.leftArrow="fa fa-angle-left",a.rightArrow="fa fa-angle-right",a.leftArrowDouble="fa fa-angle-double-left",a.rightArrowDouble="fa fa-angle-double-right",a.flag="fa fa-flag",a.clearFilters="fa fa-window-close",a.download="fa fa-download",a.upload="fa fa-upload",a.close="fa fa-times",a.json="fa fa-file-code-o",a.text="fa fa-file-text",a.wrench="fa fa-wrench",a.enter="fa fa-sign-in",a.exit="fa fa-sign-out",a.restart="fa fa-history",a.deploy="fa fa-cube",a.large="fa fa-lg",a.large2x="fa fa-2x",a.large3x="fa fa-3x",a.stack="fa fa-stack",a.stack1x="fa fa-stack-1x",a.stack2x="fa fa-stack-2x",a.pulse="fa fa-pulse",a.spin="fa fa-spin",a.inverse="fa fa-inverse",r;var a})()},18001:(v,b,i)=>{"use strict";i.d(b,{k:()=>r});var r=(()=>{return(a=r||(r={}))[a.error=0]="error",a[a.info=1]="info",a[a.success=2]="success",r;var a})()},91801:(v,b,i)=>{"use strict";i.d(b,{T:()=>r});var r=(()=>{return(a=r||(r={}))[a.ValueOk=0]="ValueOk",a[a.ValueStale=1]="ValueStale",a[a.ValueNone=2]="ValueNone",a[a.ValueException=3]="ValueException",r;var a})()},62862:(v,b,i)=>{"use strict";i.d(b,{O:()=>u});var r=i(1659),a=i(95463),f=i(89724);let u=(()=>{class e extends r.qu{group(g,S=null){const M=super.group(g,S);return new a.d(M.controls,M.validator,M.asyncValidator)}}return e.\u0275fac=function(){let p;return function(S){return(p||(p=f.n5z(e)))(S||e)}}(),e.\u0275prov=f.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},95463:(v,b,i)=>{"use strict";i.d(b,{d:()=>a});var r=i(1659);class a extends r.cw{constructor(u,e,p){super(u,e,p),this.controls=u}get(u){const e=this._get(u);if(!e)throw new Error(`Control '${u}' could not be found!`);return e}_get(u){return super.get(u)||Object.values(this.controls).filter(e=>e.get).map(e=>e instanceof a?e._get(u):e.get(u)).find(e=>Boolean(e))}getValue(u){return this.get(u).value}silentSet(u,e){this.get(u).setValue(e,{emitEvent:!1})}showError(u,e,p){const g=this.get(u);return(e.submitted||g.dirty)&&(p?g.hasError(p):g.invalid)}}},93614:(v,b,i)=>{"use strict";i.d(b,{E:()=>a,Q:()=>r});var r=(()=>{return(f=r||(r={}))[f.Loading=0]="Loading",f[f.Ready=1]="Ready",f[f.Error=2]="Error",f[f.None=3]="None",r;var f})();class a{constructor(){this.loading=r.Loading}loadingStart(){this.loading=r.Loading}loadingReady(){this.loading=r.Ready}loadingError(){this.loading=r.Error}loadingNone(){this.loading=r.None}}},90070:(v,b,i)=>{"use strict";i.d(b,{h:()=>W,P:()=>B});var r=i(1659),a=i(23815),f=i.n(a),u=i(25917),e=i(46797),p=i(43190);function g(j,q){return q?(0,p.w)(()=>j,q):(0,p.w)(()=>j)}var S=i(88002),M=i(15257),w=i(47557),x=i(28211);function B(j){return null==j||0===j.length}class W{static email(q){return B(q.value)?null:r.kI.email(q)}static ip(q=0){const ue=/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i,re=/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i;return r.kI.pattern(4===q?ue:6===q?re:new RegExp(ue.source+"|"+re.source))}static number(q=!0){return r.kI.pattern(q?/^-?[0-9]+$/i:/^[0-9]+$/i)}static decimalNumber(q=!0){return r.kI.pattern(q?/^-?[0-9]+(.[0-9]+)?$/i:/^[0-9]+(.[0-9]+)?$/i)}static sslCert(){return r.kI.pattern(/^-----BEGIN CERTIFICATE-----(\n|\r|\f)((.+)?((\n|\r|\f).+)*)(\n|\r|\f)-----END CERTIFICATE-----[\n\r\f]*$/)}static sslPrivKey(){return r.kI.pattern(/^-----BEGIN RSA PRIVATE KEY-----(\n|\r|\f)((.+)?((\n|\r|\f).+)*)(\n|\r|\f)-----END RSA PRIVATE KEY-----[\n\r\f]*$/)}static pemCert(){return r.kI.pattern(/^-----BEGIN .+-----$.+^-----END .+-----$/ms)}static requiredIf(q,ue){let re=!1;return H=>(!re&&H.parent&&(Object.keys(q).forEach(ae=>{H.parent.get(ae).valueChanges.subscribe(()=>{H.updateValueAndValidity({emitEvent:!1})})}),re=!0),Object.keys(q).every(ae=>{if(!H.parent)return!1;const ie=H.parent.get(ae).value,fe=q[ae];if(f().isObjectLike(fe)){let he=!1;switch(fe.op){case"empty":he=f().isEmpty(ie);break;case"!empty":he=!f().isEmpty(ie);break;case"equal":he=ie===fe.arg1;break;case"!equal":he=ie!==fe.arg1;break;case"minLength":f().isString(ie)&&(he=ie.length>=fe.arg1)}return he}return ie===fe})&&(f().isFunction(ue)?ue.call(ue,H.value):B(H.value))?{required:!0}:null)}static composeIf(q,ue){let re=!1;return H=>(!re&&H.parent&&(Object.keys(q).forEach(se=>{H.parent.get(se).valueChanges.subscribe(()=>{H.updateValueAndValidity({emitEvent:!1})})}),re=!0),Object.keys(q).every(se=>H.parent&&H.parent.get(se).value===q[se])?r.kI.compose(ue)(H):null)}static custom(q,ue){return re=>{const H=ue.call(this,re.value);return H?{[q]:H}:null}}static validateIf(q,ue,re,H=[],se=[]){re=re.concat(H),q.setValidators(ae=>ue.call(this)?r.kI.compose(re)(ae):H.length>0?r.kI.compose(H)(ae):null),se.forEach(ae=>{ae.valueChanges.subscribe(()=>{q.updateValueAndValidity({emitEvent:!1})})})}static match(q,ue){return re=>{const H=re.get(q),se=re.get(ue);if(!H||!se)return null;if(H.value!==se.value)se.setErrors({match:!0});else if(se.hasError("match")){const ie=se.errors;f().unset(ie,"match"),se.setErrors(f().isEmpty(f().keys(ie))?null:ie)}return null}}static unique(q,ue=null,re,H=!1){let se;return ae=>ae.pristine||B(ae.value)?(0,u.of)(null):(se=ae.value,f().isFunction(re)&&null!==re()&&""!==re()&&(se=H?`${ae.value}$${re()}`:`${re()}$${ae.value}`),(0,e.H)().pipe(g(q.call(ue,se)),(0,S.U)(ie=>ie?{notUnique:!0}:null),(0,M.q)(1)))}static uuid(q=!1){const ue=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;return re=>re.pristine&&re.untouched||!q&&!re.value||ue.test(re.value)?null:{invalidUuid:"This is not a valid UUID"}}static binaryMin(q){return ue=>{const re=new x.H,H=(new x.H).toBytes(ue.value);if(q<=H)return null;const se=new w.$(re).transform(q);return{binaryMin:()=>"Size has to be at least " + se + " or more"}}}static binaryMax(q){return ue=>{const re=new x.H,H=re.toBytes(ue.value);if(q>=H)return null;const se=new w.$(re).transform(q);return{binaryMax:()=>"Size has to be at most " + se + " or less"}}}static passwordPolicy(q,ue,re){return H=>{if(H.pristine||""===H.value)return f().isFunction(re)&&re(!0,0),(0,u.of)(null);let se;return f().isFunction(ue)&&(se=ue()),(0,e.H)(500).pipe(g(f().invoke(q,"validatePassword",H.value,se)),(0,S.U)(ae=>(f().isFunction(re)&&re(ae.valid,ae.credits,ae.valuation),ae.valid?null:{passwordPolicy:!0})),(0,M.q)(1))}}static bucketName(){return q=>{if(q.pristine||!q.value)return(0,u.of)({required:!0});const ue=[];let re;return ue.push(()=>{const ae=q.value;let ie=!0;return(/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i.test(ae)||/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i.test(ae))&&(re="ipAddress",ie=!1),ie}),ue.push(H=>f().inRange(H.length,3,64)?!!/^[0-9a-z.-]+$/.test(q.value)||(re="bucketNameInvalid",!1):(re="shouldBeInRange",!1)),ue.push(H=>{const se=f().split(H,".");return f().every(se,ae=>ae!==f().toLower(ae)||ae.includes("_")?(re="containsUpperCase",!1):/^[0-9a-z-]+$/.test(ae)?f().every([0,ae.length-1],ie=>(re="lowerCaseOrNumber",/[a-z]/.test(ae[ie])||f().isInteger(f().parseInt(ae[ie])))):(re="onlyLowerCaseAndNumbers",!1))}),f().every(ue,H=>H(q.value))?(0,u.of)(null):(0,u.of)((()=>{switch(re){case"onlyLowerCaseAndNumbers":return{onlyLowerCaseAndNumbers:!0};case"shouldBeInRange":return{shouldBeInRange:!0};case"ipAddress":return{ipAddress:!0};case"containsUpperCase":return{containsUpperCase:!0};case"lowerCaseOrNumber":return{lowerCaseOrNumber:!0};default:return{bucketNameInvalid:!0}}})())}}static bucketExistence(q,ue){return re=>re.pristine||!re.value?(0,u.of)({required:!0}):ue.exists(re.value).pipe((0,S.U)(H=>H===q?null:{bucketNameNotAllowed:!0}))}}},83357:(v,b,i)=>{"use strict";i.d(b,{U:()=>re});var r=i(64762),a=i(10972),f=i(32337),u=i(76111),e=i(1659),p=i(19773),g=i(23815),S=i.n(g),M=i(89724),w=i(55860),x=i(11048),B=i(90645),W=i(30839);const j=function(H){return{formState:H}};function q(H,se){if(1&H){const ae=M.EpF();M.TgZ(0,"form",6),M.NdJ("ngSubmit",function(){M.CHM(ae);const fe=M.oxw().ngIf,he=M.oxw();return he.submit(he.model,fe.taskInfo)}),M.TgZ(1,"div",7),M._UZ(2,"formly-form",8),M.qZA(),M.TgZ(3,"div",9)(4,"cd-form-button-panel",10),M.NdJ("submitActionEvent",function(){M.CHM(ae);const fe=M.oxw().ngIf,he=M.oxw();return he.submit(he.model,fe.taskInfo)}),M.qZA()()()}if(2&H){const ae=M.oxw().ngIf,ie=M.oxw();M.Q6J("formGroup",ie.form),M.xp6(2),M.Q6J("form",ie.form)("fields",ae.controlSchema)("model",ie.model)("options",M.VKq(8,j,ae.uiSchema)),M.xp6(2),M.Q6J("form",ie.formDir)("submitText",ae.title)("disabled",!ie.form.valid)}}function ue(H,se){if(1&H&&(M.TgZ(0,"div",2)(1,"div",3),M.SDv(2,4),M.qZA(),M.YNc(3,q,5,10,"form",5),M.qZA()),2&H){const ae=se.ngIf;M.xp6(2),M.pQV(ae.title),M.QtT(2),M.xp6(1),M.Q6J("ngIf",ae.uiSchema)}}let re=(()=>{class H{constructor(ae,ie,fe,he,Ce){this.dataGatewayService=ae,this.activatedRoute=ie,this.taskWrapper=fe,this.location=he,this.router=Ce,this.model={},this.task={message:"",id:""},this.form=new e.cw({}),this.key=""}ngOnInit(){this.activatedRoute.queryParamMap.subscribe(ae=>{this.formUISchema$=this.activatedRoute.data.pipe((0,p.zg)(fe=>{this.resource=fe.resource||this.resource;const he="/"+this.activatedRoute.snapshot.url.join("/"),Ce=ae.get("key")||"";return this.dataGatewayService.form(`ui-${this.resource}`,he,Ce)})),this.formUISchema$.subscribe(fe=>{this.methodType=fe.methodType,this.model=fe.model}),this.urlFormName=this.router.url.split("/").pop();const ie=this.urlFormName.indexOf("?");ie>0&&(this.urlFormName=this.urlFormName.substring(0,ie))})}readFileAsText(ae){return(0,r.mG)(this,void 0,void 0,function*(){let ie=new FileReader,fe="";return yield new Promise(he=>{ie.onload=Ce=>{fe=ie.result.toString(),he(!0)},ie.readAsText(ae)}),fe})}preSubmit(ae){return(0,r.mG)(this,void 0,void 0,function*(){for(const[ie,fe]of Object.entries(ae))if(fe instanceof FileList){let he=fe[0],Ce=yield this.readFileAsText(he);ae[ie]=Ce}})}submit(ae,ie){return(0,r.mG)(this,void 0,void 0,function*(){if(ae){let fe={};S().forEach(ie.metadataFields,he=>{fe[he]=ae[he]}),fe.__message=ie.message,yield this.preSubmit(ae),this.taskWrapper.wrapTaskAroundCall({task:new u.R(`crud-component/${this.urlFormName}`,fe),call:this.dataGatewayService.submit(this.resource,ae,this.methodType)}).subscribe({complete:()=>{this.location.back()}})}})}}return H.\u0275fac=function(ae){return new(ae||H)(M.Y36(a.n),M.Y36(w.gz),M.Y36(f.P),M.Y36(x.Ye),M.Y36(w.F0))},H.\u0275cmp=M.Xpm({type:H,selectors:[["cd-crud-form"]],decls:3,vars:3,consts:function(){let se;return se="" + "\ufffd0\ufffd" + "",[[1,"cd-col-form"],["class","card pb-0",4,"ngIf"],[1,"card","pb-0"],[1,"card-header"],se,[3,"formGroup","ngSubmit",4,"ngIf"],[3,"formGroup","ngSubmit"],[1,"card-body","position-relative"],[3,"form","fields","model","options"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","disabled","submitActionEvent"]]},template:function(ae,ie){1&ae&&(M.TgZ(0,"div",0),M.YNc(1,ue,4,2,"div",1),M.ALo(2,"async"),M.qZA()),2&ae&&(M.xp6(1),M.Q6J("ngIf",M.lcZ(2,1,ie.formUISchema$)))},directives:[x.O5,e._Y,e.JL,e.sg,B.T7,W.p],pipes:[x.Ov],styles:["json-schema-form label.control-label.hidden{display:none}  json-schema-form .form-group.schema-form-submit p{display:none}  json-schema-form legend{font-weight:100!important}  json-schema-form .card-footer{border:1px solid rgba(0,0,0,.125);left:-1px;width:-webkit-fill-available;width:-moz-available}"]}),H})()},67464:(v,b,i)=>{"use strict";i.d(b,{l:()=>W});var r=i(90645),a=i(23815),u=i(65862),e=i(89724),p=i(11048);function g(j,q){if(1&j&&(e.TgZ(0,"legend",6),e.SDv(1,7),e.qZA()),2&j){const ue=e.oxw();e.xp6(1),e.pQV(ue.props.label),e.QtT(1)}}function S(j,q){if(1&j&&(e.TgZ(0,"p"),e.SDv(1,8),e.qZA()),2&j){const ue=e.oxw();e.xp6(1),e.pQV(ue.props.description),e.QtT(1)}}function M(j,q){if(1&j){const ue=e.EpF();e.TgZ(0,"button",12),e.NdJ("click",function(){e.CHM(ue);const H=e.oxw().index;return e.oxw().remove(H)}),e._UZ(1,"i",13),e.qZA()}if(2&j){const ue=e.oxw(2);e.xp6(1),e.Q6J("ngClass",ue.icons.trash)}}function w(j,q){if(1&j){const ue=e.EpF();e.TgZ(0,"div",9),e._UZ(1,"formly-field",10),e.TgZ(2,"div",11)(3,"button",12),e.NdJ("click",function(){return e.CHM(ue),e.oxw().addWrapper()}),e._UZ(4,"i",13),e.qZA(),e.YNc(5,M,2,1,"button",14),e.qZA()()}if(2&j){const ue=q.$implicit,re=e.oxw();e.xp6(1),e.Q6J("field",ue),e.xp6(3),e.Q6J("ngClass",re.icons.add),e.xp6(1),e.Q6J("ngIf",!1!==ue.props.removable)}}function x(j,q){if(1&j){const ue=e.EpF();e.TgZ(0,"div",15)(1,"button",16),e.NdJ("click",function(){return e.CHM(ue),e.oxw().addWrapper()}),e.tHW(2,17),e._UZ(3,"i",13),e.N_p(),e.qZA()()}if(2&j){const ue=e.oxw();e.xp6(3),e.Q6J("ngClass",ue.icons.add),e.pQV(ue.props.label),e.QtT(2)}}function B(j,q){if(1&j&&(e.TgZ(0,"span",18),e._UZ(1,"formly-validation-message",19),e.qZA()),2&j){const ue=e.oxw();e.xp6(1),e.Q6J("field",ue.field)}}let W=(()=>{class j extends r.hv{constructor(){super(...arguments),this.icons=u.P}ngOnInit(){this.propagateTemplateOptions()}addWrapper(){this.add(),this.propagateTemplateOptions()}propagateTemplateOptions(){(0,a.forEach)(this.field.fieldGroup,ue=>{"object"==ue.type&&(ue.props.templateOptions=this.props.templateOptions.objectTemplateOptions)})}}return j.\u0275fac=function(){let q;return function(re){return(q||(q=e.n5z(j)))(re||j)}}(),j.\u0275cmp=e.Xpm({type:j,selectors:[["cd-formly-array-type"]],features:[e.qOj],decls:6,vars:5,consts:function(){let q,ue,re;return q="" + "\ufffd0\ufffd" + "",ue="" + "\ufffd0\ufffd" + "",re="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " Add " + "\ufffd0\ufffd" + " ",[[1,"mb-3"],["class","cd-header mt-1",4,"ngIf"],[4,"ngIf"],["class","d-flex",4,"ngFor","ngForOf"],["class","text-right",4,"ngIf"],["class","invalid-feedback","role","alert",4,"ngIf"],[1,"cd-header","mt-1"],q,ue,[1,"d-flex"],[1,"col",3,"field"],[1,"action-btn"],["type","button",1,"btn","btn-light","ms-1",3,"click"],[3,"ngClass"],["class","btn btn-light ms-1","type","button",3,"click",4,"ngIf"],[1,"text-right"],["type","button",1,"btn","btn-light",3,"click"],re,["role","alert",1,"invalid-feedback"],[3,"field"]]},template:function(ue,re){1&ue&&(e.TgZ(0,"div",0),e.YNc(1,g,2,1,"legend",1),e.YNc(2,S,2,1,"p",2),e.YNc(3,w,6,3,"div",3),e.YNc(4,x,4,2,"div",4),e.YNc(5,B,2,1,"span",5),e.qZA()),2&ue&&(e.xp6(1),e.Q6J("ngIf",re.props.label),e.xp6(1),e.Q6J("ngIf",re.props.description),e.xp6(1),e.Q6J("ngForOf",re.field.fieldGroup),e.xp6(1),e.Q6J("ngIf",0===re.field.fieldGroup.length),e.xp6(1),e.Q6J("ngIf",re.showError&&re.formControl.errors))},directives:[p.O5,p.sg,r.cw,p.mk,r.M2],styles:[".action-btn[_ngcontent-%COMP%]{margin-top:2.4rem}"]}),j})()},39054:(v,b,i)=>{"use strict";i.d(b,{v:()=>u});var r=i(90645),a=i(89724),f=i(1659);let u=(()=>{class e extends r.fS{}return e.\u0275fac=function(){let p;return function(S){return(p||(p=a.n5z(e)))(S||e)}}(),e.\u0275cmp=a.Xpm({type:e,selectors:[["cd-formly-input-type"]],features:[a.qOj],decls:1,vars:2,consts:[[1,"form-control","col-form-input",3,"formControl","formlyAttributes"]],template:function(g,S){1&g&&a._UZ(0,"input",0),2&g&&a.Q6J("formControl",S.formControl)("formlyAttributes",S.field)},directives:[f.Fj,f.JJ,f.oH,r.JD],styles:[""]}),e})()},39017:(v,b,i)=>{"use strict";i.d(b,{o:()=>S});var r=i(90645),a=i(89724),f=i(11048);function u(M,w){if(1&M&&(a.TgZ(0,"legend",6),a.SDv(1,7),a.qZA()),2&M){const x=a.oxw();a.xp6(1),a.pQV(x.props.label),a.QtT(1)}}function e(M,w){if(1&M&&(a.TgZ(0,"p"),a.SDv(1,8),a.qZA()),2&M){const x=a.oxw();a.xp6(1),a.pQV(x.props.description),a.QtT(1)}}function p(M,w){if(1&M&&(a.TgZ(0,"div",9),a._UZ(1,"formly-validation-message",10),a.qZA()),2&M){const x=a.oxw();a.xp6(1),a.Q6J("field",x.field)}}function g(M,w){1&M&&a._UZ(0,"formly-field",11),2&M&&a.Q6J("field",w.$implicit)}let S=(()=>{class M extends r.fS{get inputClass(){var x;const W="d-flex justify-content-center align-content-stretch gap-3";return"row"==(null===(x=this.props.templateOptions)||void 0===x?void 0:x.layoutType)?W+" flex-row":W+" flex-column"}}return M.\u0275fac=function(){let w;return function(B){return(w||(w=a.n5z(M)))(B||M)}}(),M.\u0275cmp=a.Xpm({type:M,selectors:[["cd-formly-object-type"]],features:[a.qOj],decls:6,vars:5,consts:function(){let w,x;return w="" + "\ufffd0\ufffd" + "",x="" + "\ufffd0\ufffd" + "",[[1,"mb-3"],["class","cd-col-form-label",4,"ngIf"],[4,"ngIf"],["class","alert alert-danger","role","alert",4,"ngIf"],[3,"ngClass"],["class","flex-grow-1",3,"field",4,"ngFor","ngForOf"],[1,"cd-col-form-label"],w,x,["role","alert",1,"alert","alert-danger"],[3,"field"],[1,"flex-grow-1",3,"field"]]},template:function(x,B){1&x&&(a.TgZ(0,"div",0),a.YNc(1,u,2,1,"legend",1),a.YNc(2,e,2,1,"p",2),a.YNc(3,p,2,1,"div",3),a.TgZ(4,"div",4),a.YNc(5,g,1,1,"formly-field",5),a.qZA()()),2&x&&(a.xp6(1),a.Q6J("ngIf",B.props.label),a.xp6(1),a.Q6J("ngIf",B.props.description),a.xp6(1),a.Q6J("ngIf",B.showError&&B.formControl.errors),a.xp6(1),a.Q6J("ngClass",B.inputClass),a.xp6(1),a.Q6J("ngForOf",B.field.fieldGroup))},directives:[f.O5,r.M2,f.mk,f.sg,r.cw],styles:[""]}),M})()},62351:(v,b,i)=>{"use strict";i.d(b,{M:()=>p,w:()=>g});var r=i(23815);function a(S){return new Promise((M,w)=>{S.value instanceof FileList&&(S.value[0].size>4096&&M({file_size:!0}),M(null)),M({not_a_file:!0})})}function f(S){return new Promise((M,w)=>{try{JSON.parse(S.value),M(null)}catch(x){M({json:!0})}})}function u(S){return new Promise((M,w)=>{S.value.match("^((/)|(/[!-~]+/))$")&&M(null),M({rgwRolePath:!0})})}function e(S){return new Promise((M,w)=>{S.value.match("^[0-9a-zA-Z_+=,.@-]+$")&&M(null),M({rgwRoleName:!0})})}function p(S,M){var w;const x=M||(null===(w=S.options)||void 0===w?void 0:w.formState);return x?x.find(B=>B.key==S.key):{}}function g(S,M){const w=p(S,M);let x=[];(0,r.forEach)(w.validators,B=>{switch(B){case"json":x.push(f);break;case"rgwRoleName":x.push(e);break;case"rgwRolePath":x.push(u);break;case"file":x.push(a)}}),S.asyncValidators={validation:x}}},61355:(v,b,i)=>{"use strict";i.d(b,{T:()=>f,e:()=>u});var r=i(65862),a=i(18001);class f{constructor(p=a.k.info,g,S,M,w="Ceph"){this.type=p,this.title=g,this.message=S,this.options=M,this.application=w,this.isFinishedTask=!1,this.classes={Ceph:"ceph-icon",Prometheus:"prometheus-icon"},this.applicationClass=this.classes[this.application]}}class u extends f{constructor(p=new f){super(p.type,p.title,p.message,p.options,p.application),this.config=p,this.alertSilenced=!1,this.textClasses=["text-danger","text-info","text-success"],this.iconClasses=[r.P.warning,r.P.info,r.P.check],this.borderClasses=["border-danger","border-info","border-success"],delete this.config,this.timestamp=(new Date).toJSON(),this.iconClass=this.iconClasses[this.type],this.textClass=this.textClasses[this.type],this.borderClass=this.borderClasses[this.type],this.isFinishedTask=p.isFinishedTask}}},51907:(v,b,i)=>{"use strict";i.d(b,{G:()=>r});class r{constructor(f){this.pwdExpirationSpan=0,this.pwdExpirationSpan=f.user_pwd_expiration_span,this.pwdExpirationWarning1=f.user_pwd_expiration_warning_1,this.pwdExpirationWarning2=f.user_pwd_expiration_warning_2}}},48168:(v,b,i)=>{"use strict";i.d(b,{E:()=>u});var r=i(19725);class f{constructor(){this.offset=0,this.limit=10,this.pageSize=10}}class u{constructor(p){this.errorConfig={resetData:!0,displayError:!0},this.pageInfo=new f,this.search="",this.sort="+name",this.error=p}toParams(){return Number.isNaN(this.pageInfo.offset)&&(this.pageInfo.offset=0),null===this.pageInfo.limit&&(this.pageInfo.limit=0),this.search||(this.search=""),(!this.sort||this.sort.length<2)&&(this.sort="+name"),new r.LE({fromObject:{offset:String(this.pageInfo.offset*this.pageInfo.limit),limit:String(this.pageInfo.limit),search:this.search,sort:this.sort}})}}},68774:(v,b,i)=>{"use strict";i.d(b,{r:()=>r});class r{constructor(f){this._selected=[],f&&(this._selected=f),this.update()}update(){this.hasSelection=this._selected.length>0,this.hasSingleSelection=1===this._selected.length,this.hasMultiSelection=this._selected.length>1}set selected(f){this._selected=f,this.update()}get selected(){return this._selected}add(f){this._selected.push(f),this.update()}first(){return this.hasSelection?this._selected[0]:null}}},87311:(v,b,i)=>{"use strict";i.d(b,{h:()=>r});class r{constructor(f,u,e,p){this.customColors={backgroundColor:void 0,borderColor:void 0},this.checkOffset=!1,this.chartEl=f.nativeElement,this.getStyleLeft=e,this.getStyleTop=p,this.tooltipEl=u.nativeElement}customTooltips(f){if(0===f.opacity)return void(this.tooltipEl.style.opacity=0);if(this.tooltipEl.classList.remove("above","below","no-transform"),this.tooltipEl.classList.add(f.yAlign?f.yAlign:"no-transform"),f.body){const p=f.title||[],g=f.body.map(w=>w.lines);let S="<thead>";p.forEach(w=>{S+="<tr><th>"+this.getTitle(w)+"</th></tr>"}),S+="</thead><tbody>",g.forEach((w,x)=>{const B=f.labelColors[x];let W="background:"+(this.customColors.backgroundColor||B.backgroundColor);W+="; border-color:"+(this.customColors.borderColor||B.borderColor),W+="; border-width: 2px",S+='<tr><td nowrap><span class="chartjs-tooltip-key" style="'+W+'"></span>'+this.getBody(w)+"</td></tr>"}),S+="</tbody>",this.tooltipEl.querySelector("table").innerHTML=S}const u=this.chartEl.offsetTop,e=this.chartEl.offsetLeft;if(this.checkOffset){const p=f.width/2;this.tooltipEl.classList.remove("transform-left"),this.tooltipEl.classList.remove("transform-right"),f.caretX-p<0?this.tooltipEl.classList.add("transform-left"):f.caretX+p>this.chartEl.width&&this.tooltipEl.classList.add("transform-right")}this.tooltipEl.style.left=this.getStyleLeft(f,e),this.tooltipEl.style.top=this.getStyleTop(f,u),this.tooltipEl.style.opacity=1,this.tooltipEl.style.fontFamily=f._fontFamily,this.tooltipEl.style.fontSize=f.fontSize,this.tooltipEl.style.fontStyle=f._fontStyle,this.tooltipEl.style.padding=f.yPadding+"px "+f.xPadding+"px"}getBody(f){return f}getTitle(f){return f}}},30633:(v,b,i)=>{"use strict";i.d(b,{h:()=>r,r:()=>a});var r=(()=>{return(f=r||(r={}))[f.global=0]="global",f[f.pool=1]="pool",f[f.image=2]="image",r;var f})(),a=(()=>{return(f=a||(a={}))[f.bps=0]="bps",f[f.iops=1]="iops",f[f.milliseconds=2]="milliseconds",a;var f})()},60737:(v,b,i)=>{"use strict";i.d(b,{o:()=>a});var r=i(29075);class a extends r.i{}},76111:(v,b,i)=>{"use strict";i.d(b,{R:()=>a});var r=i(29075);class a extends r.i{}},19358:(v,b,i)=>{"use strict";i.d(b,{N:()=>r});class r{constructor(f,u,e){this.poolName=f,this.namespace=u,this.imageName=e}static fromString(f){const u=f.split("/");return new this(u[0],u.length>=3?u[1]:null,u.length>=3?u[2]:u[1])}getNameSpace(){return this.namespace?`${this.namespace}/`:""}toString(){return`${this.poolName}/${this.getNameSpace()}${this.imageName}`}toStringEncoded(){return encodeURIComponent(`${this.poolName}/${this.getNameSpace()}${this.imageName}`)}}},29075:(v,b,i)=>{"use strict";i.d(b,{i:()=>r});class r{constructor(f,u){this.name=f,this.metadata=u}}},47187:(v,b,i)=>{"use strict";i.d(b,{I:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g,S=!1){let M=g;return(!a().isArray(g)||a().isArray(g)&&S)&&(M=[g]),M}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"array",type:e,pure:!0}),e})()},68962:(v,b,i)=>{"use strict";i.d(b,{T:()=>a});var r=i(89724);let a=(()=>{class f{transform(e,p="Yes",g="No"){return Boolean(e)?p:g}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"booleanText",type:f,pure:!0}),f})()},70442:(v,b,i)=>{"use strict";i.d(b,{i:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){let p=!1;switch(e){case!0:case 1:case"y":case"yes":case"t":case"true":case"on":case"1":p=!0}return p}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"boolean",type:f,pure:!0}),f})()},96102:(v,b,i)=>{"use strict";i.d(b,{N:()=>f});var r=i(89724),a=i(11048);let f=(()=>{class u{constructor(p){this.datePipe=p}transform(p){return null===p||""===p?"":this.datePipe.transform(p,"shortDate")+" "+this.datePipe.transform(p,"mediumTime")}}return u.\u0275fac=function(p){return new(p||u)(r.Y36(a.uU,16))},u.\u0275pipe=r.Yjl({name:"cdDate",type:u,pure:!0}),u})()},24310:(v,b,i)=>{"use strict";i.d(b,{t:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){const p=/ceph version\s+[^ ]+\s+\(.+\)\s+(.+)\s+\((.+)\)/.exec(e);return p?"dev"===p[2]?"main":p[1]:e}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"cephReleaseName",type:f,pure:!0}),f})()},58111:(v,b,i)=>{"use strict";i.d(b,{F:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){const p=/ceph version\s+([^ ]+)\s+\(.+\)/.exec(e);return p?p[1]:e}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"cephShortVersion",type:f,pure:!0}),f})()},20044:(v,b,i)=>{"use strict";i.d(b,{O:()=>f});var r=i(28211),a=i(89724);let f=(()=>{class u{constructor(p){this.formatter=p}transform(p){return this.formatter.format_number(p,1024,["B/s","KiB/s","MiB/s","GiB/s","TiB/s","PiB/s","EiB/s","ZiB/s","YiB/s"])}}return u.\u0275fac=function(p){return new(p||u)(a.Y36(r.H,16))},u.\u0275pipe=a.Yjl({name:"dimlessBinaryPerSecond",type:u,pure:!0}),u})()},47557:(v,b,i)=>{"use strict";i.d(b,{$:()=>f});var r=i(28211),a=i(89724);let f=(()=>{class u{constructor(p){this.formatter=p}transform(p){return this.formatter.format_number(p,1024,["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"])}}return u.\u0275fac=function(p){return new(p||u)(a.Y36(r.H,16))},u.\u0275pipe=a.Yjl({name:"dimlessBinary",type:u,pure:!0}),u})()},66369:(v,b,i)=>{"use strict";i.d(b,{n:()=>f});var r=i(28211),a=i(89724);let f=(()=>{class u{constructor(p){this.formatter=p}transform(p){return this.formatter.format_number(p,1e3,["","k","M","G","T","P","E","Z","Y"])}}return u.\u0275fac=function(p){return new(p||u)(a.Y36(r.H,16))},u.\u0275pipe=a.Yjl({name:"dimless",type:u,pure:!0}),u})()},94088:(v,b,i)=>{"use strict";i.d(b,{u:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){if(null===e||e<=0)return"";const p=[[`${Math.floor(e/31536e3)}`,"years"],[`${Math.floor(e%31536e3/86400)}`,"days"],[`${Math.floor(e%86400/3600)}`,"hours"],[`${Math.floor(e%3600/60)}`,"minutes"],[`${Math.floor(e%60)}`,"seconds"]];let g="";for(let S=0,M=p.length;S<M;S++)"0"!==p[S][0]&&(g+=" "+p[S][0]+" "+("1"===p[S][0]?p[S][1].substr(0,p[S][1].length-1):p[S][1]));return g.trim()||"1 second"}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"duration",type:f,pure:!1}),f})()},41039:(v,b,i)=>{"use strict";i.d(b,{W:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g){return a().isUndefined(g)||a().isNull(g)?"-":a().isNaN(g)?"N/A":g}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"empty",type:e,pure:!0}),e})()},45246:(v,b,i)=>{"use strict";i.d(b,{v:()=>f});var r=(()=>{return(u=r||(r={})).HEALTH_ERR="fa fa-exclamation-circle",u.HEALTH_WARN="fa fa-exclamation-triangle",u.HEALTH_OK="fa fa-check-circle",r;var u})(),a=i(89724);let f=(()=>{class u{transform(p){return Object.keys(r).includes(p)?r[p]:""}}return u.\u0275fac=function(p){return new(p||u)},u.\u0275pipe=a.Yjl({name:"healthIcon",type:u,pure:!0}),u})()},21766:(v,b,i)=>{"use strict";i.d(b,{A:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){return`${e} IOPS`}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"iops",type:f,pure:!0}),f})()},88820:(v,b,i)=>{"use strict";i.d(b,{V:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){return"user:rbd"===e?"user:rbd (tcmu-runner)":e}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"iscsiBackstore",type:f,pure:!0}),f})()},86969:(v,b,i)=>{"use strict";i.d(b,{A:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){return e.join(", ")}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"join",type:f,pure:!0}),f})()},42746:(v,b,i)=>{"use strict";i.d(b,{e:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){return"[DBG]"===e?"debug":"[INF]"===e?"info":"[WRN]"===e?"warn":"[ERR]"===e?"err":""}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"logPriority",type:f,pure:!0}),f})()},78877:(v,b,i)=>{"use strict";i.d(b,{b:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g,S){return a().isPlainObject(S)?a().get(S,g,g):g}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"map",type:e,pure:!0}),e})()},8074:(v,b,i)=>{"use strict";i.d(b,{F:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g){if(!g)return{success:0,info:0,total:0};let S=0,M=0,w=0,x=0,B=0;return a().each(g.standbys,()=>{w+=1}),g.standbys&&!g.filesystems?(M=w,S=0):0===g.filesystems.length?S=0:(a().each(g.filesystems,q=>{a().each(q.mdsmap.info,ue=>{"up:standby-replay"===ue.state?B+=1:x+=1})}),S=x,M=w+B),{success:S,info:M,total:S+M}}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"mdsSummary",type:e,pure:!0}),e})()},40473:(v,b,i)=>{"use strict";i.d(b,{c:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g){if(!g)return{success:0,info:0,total:0};let S;(a().isUndefined(g.active_name)?"":`${"active daemon"}: ${g.active_name}`).length>0&&(S=1);const w=g.standbys.length;return{success:S,info:w,total:S+w}}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"mgrSummary",type:e,pure:!0}),e})()},48537:(v,b,i)=>{"use strict";i.d(b,{J:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){return`${e} ms`}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"milliseconds",type:f,pure:!0}),f})()},55657:(v,b,i)=>{"use strict";i.d(b,{g:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g,S){return""===g?a().defaultTo(S,"n/a"):g}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"notAvailable",type:e,pure:!0}),e})()},36569:(v,b,i)=>{"use strict";i.d(b,{f:()=>a});var r=i(89724);let a=(()=>{class f{transform(e){const p=parseInt(e,10);return isNaN(p)?e:e+(1===Math.floor(p/10)?"th":p%10==1?"st":p%10==2?"nd":p%10==3?"rd":"th")}}return f.\u0275fac=function(e){return new(e||f)},f.\u0275pipe=r.Yjl({name:"ordinal",type:f,pure:!0}),f})()},67891:(v,b,i)=>{"use strict";i.d(b,{H:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g){if(!g)return"";let S=0,M=0,w=0,x=0;return a().each(g.osds,q=>{q.in&&S++,q.up&&M++,q.state.includes("nearfull")&&w++,q.state.includes("full")&&x++}),{total:g.osds.length,down:g.osds.length-M,out:g.osds.length-S,up:M,in:S,nearfull:w,full:x}}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"osdSummary",type:e,pure:!0}),e})()},12455:(v,b,i)=>{"use strict";i.d(b,{D:()=>Ge});var r=i(11048),a=i(47187),f=i(68962),u=i(70442),e=i(96102),p=i(24310),g=i(58111),S=i(20044),M=i(47557),w=i(66369),x=i(94088),B=i(41039),W=i(89724);let j=(()=>{class Oe{transform(We){return encodeURIComponent(We)}}return Oe.\u0275fac=function(We){return new(We||Oe)},Oe.\u0275pipe=W.Yjl({name:"encodeUri",type:Oe,pure:!0}),Oe})();var q=i(45246),ue=i(21766),re=i(88820),H=i(86969),se=i(42746),ae=i(78877),ie=i(8074),fe=i(40473),he=i(48537),Ce=i(55657),ce=i(36569),Be=i(67891),Ve=i(90068),Xe=i(60793),He=i(52821),Pe=i(10545);let Ge=(()=>{class Oe{}return Oe.\u0275fac=function(We){return new(We||Oe)},Oe.\u0275mod=W.oAB({type:Oe}),Oe.\u0275inj=W.cJS({providers:[a.I,u.i,f.T,r.uU,g.F,p.t,M.$,S.O,w.n,Ve.h,re.V,H.A,se.e,e.N,B.W,j,ce.f,ue.A,he.J,Ce.g,Pe.m,x.u,ae.b,He.W,Xe.A,q.v,fe.c,ie.F,Be.H],imports:[[r.ez]]}),Oe})()},90068:(v,b,i)=>{"use strict";i.d(b,{h:()=>p});var r=i(23815),a=i.n(r),f=i(16738),u=i.n(f),e=i(89724);u().updateLocale("en",{relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}});let p=(()=>{class g{transform(M,w=!0){let x;if(x=a().isNumber(M)?u().unix(M):u()(M),!x.isValid())return"";let B=x.fromNow();return w&&(B=a().upperFirst(B)),B}}return g.\u0275fac=function(M){return new(M||g)},g.\u0275pipe=e.Yjl({name:"relativeDate",type:g,pure:!1}),g})()},60793:(v,b,i)=>{"use strict";i.d(b,{A:()=>f});var r=i(89724),a=i(14800);let f=(()=>{class u{constructor(p){this.domSanitizer=p}transform(p){return this.domSanitizer.sanitize(r.q3G.HTML,p)}}return u.\u0275fac=function(p){return new(p||u)(r.Y36(a.H7,16))},u.\u0275pipe=r.Yjl({name:"sanitizeHtml",type:u,pure:!0}),u})()},52821:(v,b,i)=>{"use strict";i.d(b,{W:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g,S,M){return a().isString(g)?(M=a().defaultTo(M,""),a().truncate(g,{length:S,omission:M})):g}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"truncate",type:e,pure:!0}),e})()},10545:(v,b,i)=>{"use strict";i.d(b,{m:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{transform(g){return a().upperFirst(g)}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275pipe=f.Yjl({name:"upperFirst",type:e,pure:!0}),e})()},2817:(v,b,i)=>{"use strict";i.d(b,{r:()=>j});var r=i(22759);function a(q,ue){function re(){return!re.pred.apply(re.thisArg,arguments)}return re.pred=q,re.thisArg=ue,re}var f=i(19846),u=i(45435),e=i(70882),g=i(47349),S=i(46782),M=i(79765),w=i(85345);class B{constructor(ue){this.notifier=ue}call(ue,re){return re.subscribe(new W(ue,this.notifier,re))}}class W extends w.Ds{constructor(ue,re,H){super(ue),this.notifier=re,this.source=H,this.sourceIsBeingSubscribedTo=!0}notifyNext(){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)}notifyComplete(){if(!1===this.sourceIsBeingSubscribedTo)return super.complete()}complete(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return super.complete();this._unsubscribeAndRecycle(),this.notifications.next(void 0)}}_unsubscribe(){const{notifications:ue,retriesSubscription:re}=this;ue&&(ue.unsubscribe(),this.notifications=void 0),re&&(re.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0}_unsubscribeAndRecycle(){const{_unsubscribe:ue}=this;return this._unsubscribe=null,super._unsubscribeAndRecycle(),this._unsubscribe=ue,this}subscribeToRetries(){let ue;this.notifications=new M.xQ;try{const{notifier:re}=this;ue=re(this.notifications)}catch(re){return super.complete()}this.retries=ue,this.retriesSubscription=(0,w.ft)(ue,new w.IY(this))}}function j(){const q=(0,r.R)(document,"visibilitychange").pipe((0,g.d)({refCount:!0,bufferSize:1})),[ue,re]=function p(q,ue,re){return[(0,u.h)(ue,re)(new e.y((0,f.s)(q))),(0,u.h)(a(ue,re))(new e.y((0,f.s)(q)))]}(q,()=>"visible"===document.visibilityState);return function(H){return H.pipe((0,S.R)(re),function x(q){return ue=>ue.lift(new B(q))}(()=>ue))}}},45510:(v,b,i)=>{"use strict";i.d(b,{P:()=>u});var r=i(89724),a=i(55860),f=i(47640);let u=(()=>{class e{constructor(g,S){this.router=g,this.authStorageService=S}canActivate(g,S){return!!this.authStorageService.isLoggedIn()||(this.router.navigate(["/login"],{queryParams:{returnUrl:S.url}}),!1)}canActivateChild(g,S){return this.canActivate(g,S)}}return e.\u0275fac=function(g){return new(g||e)(r.LFG(a.F0),r.LFG(f.j))},e.\u0275prov=r.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},47640:(v,b,i)=>{"use strict";i.d(b,{j:()=>e});var r=i(26215);class a{constructor(g=[]){["read","create","update","delete"].forEach(S=>this[S]=g.includes(S))}}class f{constructor(g){this.hosts=new a(g.hosts),this.configOpt=new a(g["config-opt"]),this.pool=new a(g.pool),this.osd=new a(g.osd),this.monitor=new a(g.monitor),this.rbdImage=new a(g["rbd-image"]),this.iscsi=new a(g.iscsi),this.rbdMirroring=new a(g["rbd-mirroring"]),this.rgw=new a(g.rgw),this.cephfs=new a(g.cephfs),this.manager=new a(g.manager),this.log=new a(g.log),this.user=new a(g.user),this.grafana=new a(g.grafana),this.prometheus=new a(g.prometheus),this.nfs=new a(g["nfs-ganesha"])}}var u=i(89724);let e=(()=>{class p{constructor(){this.isPwdDisplayedSource=new r.X(!1),this.isPwdDisplayed$=this.isPwdDisplayedSource.asObservable()}set(S,M={},w=!1,x=null,B=!1){localStorage.setItem("dashboard_username",S),localStorage.setItem("dashboard_permissions",JSON.stringify(new f(M))),localStorage.setItem("user_pwd_expiration_date",String(x)),localStorage.setItem("user_pwd_update_required",String(B)),localStorage.setItem("sso",String(w))}remove(){localStorage.removeItem("dashboard_username"),localStorage.removeItem("user_pwd_expiration_data"),localStorage.removeItem("user_pwd_update_required")}isLoggedIn(){return null!==localStorage.getItem("dashboard_username")}getUsername(){return localStorage.getItem("dashboard_username")}getPermissions(){return JSON.parse(localStorage.getItem("dashboard_permissions")||JSON.stringify(new f({})))}getPwdExpirationDate(){return Number(localStorage.getItem("user_pwd_expiration_date"))}getPwdUpdateRequired(){return"true"===localStorage.getItem("user_pwd_update_required")}isSSO(){return"true"===localStorage.getItem("sso")}}return p.\u0275fac=function(S){return new(S||p)},p.\u0275prov=u.Yz7({token:p,factory:p.\u0275fac,providedIn:"root"}),p})()},10972:(v,b,i)=>{"use strict";i.d(b,{n:()=>re});var r=i(88002),a=i(62351),f=i(89724),u=i(64762),e=i(1659),p=i(90645),g=i(68307);function M(H){return""===H||null==H}function w(H){return null!=H&&"object"==typeof H&&!Array.isArray(H)}function x(H){return Number.isInteger?Number.isInteger(H):"number"==typeof H&&Math.floor(H)===H}function B(H){return"object"==typeof H&&(H.hasOwnProperty("const")||H.enum&&1===H.enum.length)}function W(H){if(!H.fieldGroup)return(0,p._S)(H)&&void 0!==(0,p.Hl)(H)?1:0;const se=H.fieldGroup.reduce((ae,ie)=>W(ie)+ae,0);if(0===se&&(0,p._S)(H)){const ae=(0,p.Hl)(H);if(null===ae||void 0!==ae&&(H.fieldArray&&Array.isArray(ae)||!H.fieldArray&&w(ae)))return 1}return se}let j=(()=>{class H{toFieldConfig(ae,ie){return this._toFieldConfig(ae,Object.assign({schema:ae},ie||{}))}_toFieldConfig(ae,ie){var fe,{key:he}=ie,Ce=(0,u._T)(ie,["key"]);ae=this.resolveSchema(ae,Ce);const ce=this.guessSchemaType(ae);let Be={type:ce[0],defaultValue:ae.default,props:{label:ae.title,readonly:ae.readOnly,description:ae.description}};switch(null!=he&&(Be.key=he),!Ce.ignoreDefault&&(ae.readOnly||Ce.readOnly)&&(Be.props.disabled=!0,Ce=Object.assign(Object.assign({},Ce),{readOnly:!0})),Ce.resetOnHide&&(Be.resetOnHide=!0),he&&Ce.strict&&this.addValidator(Be,"type",(Ve,Xe)=>{const He=(0,p.Hl)(Xe);if(null!=He)switch(Be.type){case"string":return"string"==typeof He;case"integer":return x(He);case"number":return"number"==typeof He;case"object":return w(He);case"array":return Array.isArray(He)}return!0}),!1===Ce.shareFormControl&&(Be.shareFormControl=!1),Ce.ignoreDefault&&delete Be.defaultValue,this.addValidator(Be,"type",{schemaType:ce,expression:({value:Ve})=>{if(void 0===Ve||null===Ve&&-1!==ce.indexOf("null"))return!0;switch(ce[0]){case"null":return null===typeof Ve;case"string":return"string"==typeof Ve;case"integer":return x(Ve);case"number":return"number"==typeof Ve;case"object":return w(Ve);case"array":return Array.isArray(Ve)}return!0}}),Be.type){case"number":case"integer":Be.parsers=[Ve=>M(Ve)?void 0:Number(Ve)],ae.hasOwnProperty("minimum")&&(Be.props.min=ae.minimum),ae.hasOwnProperty("maximum")&&(Be.props.max=ae.maximum),ae.hasOwnProperty("exclusiveMinimum")&&(Be.props.exclusiveMinimum=ae.exclusiveMinimum,this.addValidator(Be,"exclusiveMinimum",({value:Ve})=>M(Ve)||Ve>ae.exclusiveMinimum)),ae.hasOwnProperty("exclusiveMaximum")&&(Be.props.exclusiveMaximum=ae.exclusiveMaximum,this.addValidator(Be,"exclusiveMaximum",({value:Ve})=>M(Ve)||Ve<ae.exclusiveMaximum)),ae.hasOwnProperty("multipleOf")&&(Be.props.step=ae.multipleOf,this.addValidator(Be,"multipleOf",({value:Ve})=>{if(M(Ve)||"number"!=typeof Ve||0===Ve||ae.multipleOf<=0)return!0;const Xe=Math.pow(10,function S(H){if(!isFinite(H))return 0;let se=1,ae=0;for(;Math.round(H*se)/se!==H;)se*=10,ae++;return ae}(ae.multipleOf));return Math.round(Ve*Xe)%Math.round(ae.multipleOf*Xe)==0}));break;case"string":Be.parsers=[Ve=>(-1!==ce.indexOf("null")?Ve=M(Ve)?null:Ve:Be.props.required||(Ve=""===Ve?void 0:Ve),Ve)],["minLength","maxLength","pattern"].forEach(Ve=>{ae.hasOwnProperty(Ve)&&(Be.props[Ve]=ae[Ve])});break;case"object":{Be.fieldGroup||(Be.fieldGroup=[]);const{propDeps:Ve,schemaDeps:Xe}=this.resolveDependencies(ae);Object.keys(ae.properties||{}).forEach(He=>{const Pe=Array.isArray(ae.required)&&-1!==ae.required.indexOf(He),Ge=this._toFieldConfig(ae.properties[He],Object.assign(Object.assign({},Ce),{key:He,isOptional:Ce.isOptional||!Pe}));if(Be.fieldGroup.push(Ge),(Pe||Ve[He])&&(Ge.expressions=Object.assign(Object.assign({},Ge.expressions||{}),{"props.required":Oe=>{let Tt=Oe.parent;const We=Oe.fieldGroup&&null!=Oe.key?Tt.model:Oe.model;for(;null==Tt.key&&Tt.parent;)Tt=Tt.parent;return!!(We||Tt&&Tt.props&&Tt.props.required)&&(!(!Array.isArray(ae.required)||-1===ae.required.indexOf(He))||Ve[He]&&Oe.model&&Ve[He].some(Nt=>!M(Oe.model[Nt])))}})),Xe[He]){const Oe=We=>We.hasOwnProperty("const")?We.const:We.enum[0],Tt=Xe[He].oneOf;Tt&&Tt.every(We=>We.properties&&We.properties[He]&&B(We.properties[He]))?Tt.forEach(We=>{const Qt=We.properties,Yt=Qt[He],dn=(0,u._T)(Qt,["symbol"==typeof He?He:He+""]);Be.fieldGroup.push(Object.assign(Object.assign({},this._toFieldConfig(Object.assign(Object.assign({},We),{properties:dn}),Object.assign(Object.assign({},Ce),{resetOnHide:!0}))),{expressions:{hide:rn=>!rn.model||Oe(Yt)!==rn.model[He]}}))}):Be.fieldGroup.push(Object.assign(Object.assign({},this._toFieldConfig(Xe[He],Ce)),{expressions:{hide:We=>!We.model||M(We.model[He])}}))}}),ae.oneOf&&Be.fieldGroup.push(this.resolveMultiSchema("oneOf",ae.oneOf,Object.assign(Object.assign({},Ce),{shareFormControl:!1}))),ae.anyOf&&Be.fieldGroup.push(this.resolveMultiSchema("anyOf",ae.anyOf,Ce));break}case"array":ae.hasOwnProperty("minItems")&&(Be.props.minItems=ae.minItems,this.addValidator(Be,"minItems",(Ve,Xe)=>{const He=(0,p.Hl)(Xe);return M(He)||He.length>=ae.minItems}),!Ce.isOptional&&ae.minItems>0&&void 0===Be.defaultValue&&(Be.defaultValue=Array.from(new Array(ae.minItems)))),ae.hasOwnProperty("maxItems")&&(Be.props.maxItems=ae.maxItems,this.addValidator(Be,"maxItems",(Ve,Xe)=>{const He=(0,p.Hl)(Xe);return M(He)||He.length<=ae.maxItems})),ae.hasOwnProperty("uniqueItems")&&(Be.props.uniqueItems=ae.uniqueItems,this.addValidator(Be,"uniqueItems",(Ve,Xe)=>{const He=(0,p.Hl)(Xe);return!(!M(He)&&ae.uniqueItems)||Array.from(new Set(He.map(Ge=>JSON.stringify(Ge)))).length===He.length})),ae.items&&!Array.isArray(ae.items)&&(ae.items=this.resolveSchema(ae.items,Ce)),this.isEnum(ae)||(Be.fieldArray=Ve=>{if(!Array.isArray(ae.items)){const Ge=ae.items?this._toFieldConfig(ae.items,Ce):{};return Ge.props&&(Ge.props.required=!0),Ge}const Xe=Ve.fieldGroup?Ve.fieldGroup.length:0,He=ae.items[Xe]?ae.items[Xe]:ae.additionalItems,Pe=He?this._toFieldConfig(He,Ce):{};return Pe.props&&(Pe.props.required=!0),ae.items[Xe]&&(Pe.props.removable=!1),Pe})}return ae.hasOwnProperty("const")&&(Be.props.const=ae.const,this.addValidator(Be,"const",({value:Ve})=>Ve===ae.const),Be.type||(Be.defaultValue=ae.const)),this.isEnum(ae)&&(Be.props.multiple="array"===Be.type,Be.type="enum",Be.props.options=this.toEnumOptions(ae)),ae.oneOf&&!Be.type&&(delete Be.key,Be.fieldGroup=[this.resolveMultiSchema("oneOf",ae.oneOf,Object.assign(Object.assign({},Ce),{key:he,shareFormControl:!1}))]),ae.oneOf&&!Be.type&&(delete Be.key,Be.fieldGroup=[this.resolveMultiSchema("oneOf",ae.oneOf,Object.assign(Object.assign({},Ce),{key:he,shareFormControl:!1}))]),(null===(fe=ae.widget)||void 0===fe?void 0:fe.formlyConfig)&&(Be=this.mergeFields(Be,ae.widget.formlyConfig)),Be.templateOptions=Be.props,Ce.map?Ce.map(Be,ae):Be}resolveSchema(ae,ie){return ae&&ae.$ref&&(ae=this.resolveDefinition(ae,ie)),ae&&ae.allOf&&(ae=this.resolveAllOf(ae,ie)),ae}resolveAllOf(ae,ie){var{allOf:fe}=ae,he=(0,u._T)(ae,["allOf"]);if(!fe.length)throw Error(`allOf array can not be empty ${fe}.`);return fe.reduce((Ce,ce)=>(ce=this.resolveSchema(ce,ie),Ce.required&&ce.required&&(Ce.required=[...Ce.required,...ce.required]),ce.uniqueItems&&(Ce.uniqueItems=ce.uniqueItems),["maxLength","maximum","exclusiveMaximum","maxItems","maxProperties"].forEach(Be=>{!M(Ce[Be])&&!M(ce[Be])&&(Ce[Be]=Ce[Be]<ce[Be]?Ce[Be]:ce[Be])}),["minLength","minimum","exclusiveMinimum","minItems","minProperties"].forEach(Be=>{!M(Ce[Be])&&!M(ce[Be])&&(Ce[Be]=Ce[Be]>ce[Be]?Ce[Be]:ce[Be])}),(0,p.Du)(Ce,ce)),he)}resolveMultiSchema(ae,ie,fe){return{type:"multischema",fieldGroup:[{type:"enum",defaultValue:-1,props:{multiple:"anyOf"===ae,options:ie.map((he,Ce)=>({label:he.title,value:Ce,disabled:he.readOnly}))},hooks:{onInit:he=>he.formControl.valueChanges.pipe((0,g.b)(()=>he.options.detectChanges(he.parent)))}},{fieldGroup:ie.map((he,Ce)=>Object.assign(Object.assign({},this._toFieldConfig(he,Object.assign(Object.assign({},fe),{resetOnHide:!0}))),{expressions:{hide:(ce,Be)=>{const Ve=ce.parent.parent.fieldGroup[0].formControl;if(-1===Ve.value||Be){let Xe=ce.parent.fieldGroup.map((He,Pe)=>[He,Pe,this.isFieldValid(He,Pe,ie,fe)]).sort(([He,,Pe],[Ge,,Oe])=>{if(Pe!==Oe)return Oe?1:-1;const Tt=W(He),We=W(Ge);return Tt===We&&He.props.disabled===Ge.props.disabled?0:We>Tt?1:-1}).map(([,He])=>He);if("anyOf"===ae){const He=Xe.filter(Pe=>W(ce.parent.fieldGroup[Pe]));Xe=He.length>0?He:[Xe[0]||0]}Xe=Xe.length>0?Xe:[0],Ve.setValue("anyOf"===ae?Xe:Xe[0])}return Array.isArray(Ve.value)?-1===Ve.value.indexOf(Ce):Ve.value!==Ce}}}))}]}}resolveDefinition(ae,ie){const[fe,he]=ae.$ref.split("#/");if(fe)throw Error(`Remote schemas for ${ae.$ref} not supported yet.`);const Ce=he?he.split("/").reduce((ce,Be)=>(null==ce?void 0:ce.hasOwnProperty(Be))?ce[Be]:null,ie.schema):null;if(!Ce)throw Error(`Cannot find a definition for ${ae.$ref}.`);return Ce.$ref?this.resolveDefinition(Ce,ie):Object.assign(Object.assign({},Ce),["title","description","default","widget"].reduce((ce,Be)=>(ae.hasOwnProperty(Be)&&(ce[Be]=ae[Be]),ce),{}))}resolveDependencies(ae){const ie={},fe={};return Object.keys(ae.dependencies||{}).forEach(he=>{const Ce=ae.dependencies[he];Array.isArray(Ce)?Ce.forEach(ce=>{ie[ce]?ie[ce].push(he):ie[ce]=[he]}):fe[he]=Ce}),{propDeps:ie,schemaDeps:fe}}guessSchemaType(ae){const ie=null==ae?void 0:ae.type;return!ie&&(null==ae?void 0:ae.properties)?["object"]:Array.isArray(ie)?1===ie.length?ie:2===ie.length&&-1!==ie.indexOf("null")?ie.sort(fe=>"null"==fe?1:-1):ie:ie?[ie]:[]}addValidator(ae,ie,fe){ae.validators=ae.validators||{},ae.validators[ie]=fe}isEnum(ae){return!!ae.enum||ae.anyOf&&ae.anyOf.every(B)||ae.oneOf&&ae.oneOf.every(B)||ae.uniqueItems&&ae.items&&!Array.isArray(ae.items)&&this.isEnum(ae.items)}toEnumOptions(ae){if(ae.enum)return ae.enum.map(fe=>({value:fe,label:fe}));const ie=fe=>{const he=fe.hasOwnProperty("const")?fe.const:fe.enum[0],Ce={value:he,label:fe.title||he};return fe.readOnly&&(Ce.disabled=!0),Ce};return ae.anyOf?ae.anyOf.map(ie):ae.oneOf?ae.oneOf.map(ie):this.toEnumOptions(ae.items)}isFieldValid(ae,ie,fe,he){ae._schemasFields||(Object.defineProperty(ae,"_schemasFields",{enumerable:!1,writable:!0,configurable:!0}),ae._schemasFields={});let Ce=ae._schemasFields[ie];const ce=ae.model?(0,p.kg)(ae.model):ae.fieldArray?[]:{};return Ce?(Ce.model=ce,ae.options.build(Ce)):Ce=ae._schemasFields[ie]=ae.options.build({form:Array.isArray(ce)?new e.Oe([]):new e.cw({}),fieldGroup:[this._toFieldConfig(fe[ie],Object.assign(Object.assign({},he),{resetOnHide:!0,ignoreDefault:!0,map:null,strict:!0}))],model:ce,options:{}}),Ce.form.valid}mergeFields(ae,ie){for(let fe in ie){const he="templateOptions"===fe?"props":fe;w(ae[he])&&w(ie[fe])?ae[he]=this.mergeFields(ae[he],ie[fe]):null!=ie[fe]&&(ae[he]=ie[fe])}return ae}}return H.\u0275fac=function(ae){return new(ae||H)},H.\u0275prov=f.Yz7({token:H,factory:H.\u0275fac,providedIn:"root"}),H})(),q=(()=>{class H{constructor(ae){this.formlyJsonschema=ae}processJsonSchemaForm(ae,ie){let fe=0;for(;fe<ae.forms.length&&ae.forms[fe].path!=ie;)fe++;fe%=ae.forms.length;const he=ae.forms[fe].control_schema.title,Ce=ae.forms[fe].ui_schema;let Be=this.formlyJsonschema.toFieldConfig(ae.forms[fe].control_schema).fieldGroup;for(let Pe=0;Pe<Be.length;Pe++)for(let Ge=0;Ge<Ce.length;Ge++)Be[Pe].key==Ce[Ge].key&&(Be[Pe].props.templateOptions=Ce[Ge].templateOptions,Be[Pe].props.readonly=Ce[Ge].readonly,(0,a.w)(Be[Pe],Ce));return{title:he,uiSchema:Ce,controlSchema:Be,taskInfo:{metadataFields:ae.forms[fe].task_info.metadataFields,message:ae.forms[fe].task_info.message},methodType:ae.forms[fe].method_type,model:ae.forms[fe].model||{}}}}return H.\u0275fac=function(ae){return new(ae||H)(f.LFG(j))},H.\u0275prov=f.Yz7({token:H,factory:H.\u0275fac,providedIn:"root"}),H})();var ue=i(19725);let re=(()=>{class H{constructor(ae,ie){this.http=ae,this.crudFormAdapater=ie,this.cache={}}list(ae){const ie=this.getCacheable(ae,"get");if(void 0===this.cache[ie]){const{url:fe,version:he}=this.getUrlAndVersion(ae);this.cache[ie]=this.http.get(fe,{headers:{Accept:`application/vnd.ceph.api.v${he}+json`}})}return this.cache[ie]}submit(ae,ie,fe){const{url:he,version:Ce}=this.getUrlAndVersion(ae);return this.http[fe](he,ie,{headers:{Accept:`application/vnd.ceph.api.v${Ce}+json`}})}delete(ae,ie){const{url:fe,version:he}=this.getUrlAndVersion(ae);return this.http.delete(`${fe}/${ie}`,{headers:{Accept:`application/vnd.ceph.api.v${he}+json`},observe:"response"})}form(ae,ie,fe=""){const he=this.getCacheable(ae,"get",fe),Ce={model_key:fe};if(void 0===this.cache[he]){const{url:ce,version:Be}=this.getUrlAndVersion(ae);this.cache[he]=this.http.get(ce,{headers:{Accept:`application/vnd.ceph.api.v${Be}+json`},params:Ce})}return this.cache[he].pipe((0,r.U)(ce=>this.crudFormAdapater.processJsonSchemaForm(ce,ie)))}model(ae,ie){const fe=this.getCacheable(ae,"get");if(void 0===this.cache[fe]){const{url:he,version:Ce}=this.getUrlAndVersion(ae);this.cache[fe]=this.http.get(`${he}/model`,{headers:{Accept:`application/vnd.ceph.api.v${Ce}+json`},params:ie})}return this.cache[fe]}getCacheable(ae,ie,fe=""){return ae+ie+fe}getUrlAndVersion(ae){const ie=ae.match(/(?<url>[^@]+)(?:@(?<version>.+))?/);return{url:ie.groups.url.split(".").join("/"),version:ie.groups.version||"1.0"}}}return H.\u0275fac=function(ae){return new(ae||H)(f.LFG(ue.eN),f.LFG(q))},H.\u0275prov=f.Yz7({token:H,factory:H.\u0275fac,providedIn:"root"}),H})()},72625:(v,b,i)=>{"use strict";i.d(b,{R:()=>S});var r=i(26215),a=i(45435),f=i(88002),u=i(28049),e=i(74255),p=i(89724),g=i(24310);let S=(()=>{class M{constructor(x,B){this.summaryservice=x,this.cephReleaseNamePipe=B,this.releaseDataSource=new r.X(null),this.releaseData$=this.releaseDataSource.asObservable(),this.summaryservice.subscribeOnce(W=>{const j=this.cephReleaseNamePipe.transform(W.version);this.releaseDataSource.next(j)})}urlGenerator(x,B="main"){const j=`https://docs.ceph.com/en/${"main"===B?"latest":B}/`,q="https://ceph.io";return{iscsi:`${j}mgr/dashboard/#enabling-iscsi-management`,prometheus:`${j}mgr/dashboard/#enabling-prometheus-alerting`,"nfs-ganesha":`${j}mgr/dashboard/#configuring-nfs-ganesha-in-the-dashboard`,"rgw-nfs":`${j}radosgw/nfs`,rgw:`${j}mgr/dashboard/#enabling-the-object-gateway-management-frontend`,dashboard:`${j}mgr/dashboard`,grafana:`${j}mgr/dashboard/#enabling-the-embedding-of-grafana-dashboards`,orch:`${j}mgr/orchestrator`,pgs:"https://old.ceph.com/pgcalc",help:`${q}/en/users/`,security:`${q}/en/security/`,trademarks:`${q}/en/trademarks/`,"dashboard-landing-page-status":`${j}mgr/dashboard/#dashboard-landing-page-status`,"dashboard-landing-page-performance":`${j}mgr/dashboard/#dashboard-landing-page-performance`,"dashboard-landing-page-capacity":`${j}mgr/dashboard/#dashboard-landing-page-capacity`}[x]}subscribeOnce(x,B,W){return this.releaseData$.pipe((0,a.h)(j=>!!j),(0,f.U)(j=>this.urlGenerator(x,j)),(0,u.P)()).subscribe(B,W)}}return M.\u0275fac=function(x){return new(x||M)(p.LFG(e.J),p.LFG(g.t))},M.\u0275prov=p.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})()},4222:(v,b,i)=>{"use strict";i.d(b,{T:()=>e});var r=i(88002),a=i(26504),f=i(89724),u=i(89154);let e=(()=>{class p{constructor(S){this.featureToggles=S}canActivate(S){return this.featureToggles.get().pipe((0,r.U)(M=>{if(!1===M[S.routeConfig.path])throw new a._2;return!0}))}canActivateChild(S){return this.canActivate(S.parent)}}return p.\u0275fac=function(S){return new(S||p)(f.LFG(u.l))},p.\u0275prov=f.Yz7({token:p,factory:p.\u0275fac,providedIn:"root"}),p})()},89154:(v,b,i)=>{"use strict";i.d(b,{l:()=>e});var r=i(89724),a=i(19725),f=i(36848);let e=(()=>{class p{constructor(S,M){this.http=S,this.timerService=M,this.API_URL="api/feature_toggles",this.REFRESH_INTERVAL=3e4,this.featureToggleMap$=this.timerService.get(()=>this.http.get(this.API_URL),this.REFRESH_INTERVAL)}get(){return this.featureToggleMap$}}return p.\u0275fac=function(S){return new(S||p)(r.LFG(a.eN),r.LFG(f.f))},p.\u0275prov=r.Yz7({token:p,factory:p.\u0275fac,providedIn:"root"}),p})()},28211:(v,b,i)=>{"use strict";i.d(b,{H:()=>u});var r=i(23815),a=i.n(r),f=i(89724);let u=(()=>{class e{format_number(g,S,M,w=1){if(a().isString(g)&&(g=Number(g)),!a().isNumber(g))return"-";if(a().isNaN(g))return"N/A";let x=g<1?0:Math.floor(Math.log(g)/Math.log(S));x=x>=M.length?M.length-1:x;let B=a().round(g/Math.pow(S,x),w).toString();return""===B?"-":(""!==M[x]&&(B=`${B} ${M[x]}`),B)}formatNumberFromTo(g,S,M,w,x,B=1){if(a().isString(g)&&(g=Number(g)),!a().isNumber(g))return"-";const W=x.map(re=>re.toLowerCase());if(!W.includes(S.toLowerCase())||!W.includes(M.toLowerCase()))return`${g} ${S}`;const j=W.indexOf(S.toLowerCase())-W.indexOf(M.toLocaleLowerCase()),q=j>0?g*Math.pow(w,j):g/Math.pow(w,Math.abs(j));let ue=a().round(q,B).toString();return ue=`${ue} ${M}`,ue}toBytes(g,S=null){const w=["b","k","m","g","t","p","e","z","y"],x=RegExp("^(\\d+(.\\d+)?) ?(["+w.join("")+"]?(b|ib|B/s)?)?$","i").exec(g);if(null===x)return S;let B=parseFloat(x[1]);return a().isString(x[3])&&(B*=Math.pow(1024,w.indexOf(x[3].toLowerCase()[0]))),Math.round(B)}toMilliseconds(g){const M=/^\s*(\d+)\s*(ms)?\s*$/i.exec(g);return null!==M?+M[1]:0}toIops(g){const M=/^\s*(\d+)\s*(IOPS)?\s*$/i.exec(g);return null!==M?+M[1]:0}}return e.\u0275fac=function(g){return new(g||e)},e.\u0275prov=f.Yz7({token:e,factory:e.\u0275fac,providedIn:"root"}),e})()},63285:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});var r=i(89724),a=i(71334);let f=(()=>{class u{constructor(p){this.modal=p}show(p,g,S){const M=this.modal.open(p,S);return g&&Object.assign(M.componentInstance,g),M}dismissAll(){this.modal.dismissAll()}hasOpenModals(){return this.modal.hasOpenModals()}}return u.\u0275fac=function(p){return new(p||u)(r.LFG(a.FF))},u.\u0275prov=r.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},54462:(v,b,i)=>{"use strict";i.d(b,{P:()=>M});var r=i(25917),a=i(88002),f=i(5304),u=i(65862),e=i(89724),p=i(19725),g=i(55860),S=i(7273);let M=(()=>{class w{constructor(B,W,j){this.http=B,this.router=W,this.mgrModuleService=j}canActivate(B){return this.doCheck(B)}canActivateChild(B){return this.doCheck(B)}doCheck(B){if(B.url.length>0&&w.ALLOWLIST.includes(B.url[0].path))return(0,r.of)(!0);const W=B.data.moduleStatusGuardConfig;let j=!1;return W.backend&&this.mgrModuleService.getConfig("orchestrator").subscribe(q=>{j=W.backend===q.orchestrator},()=>(this.router.navigate([W.redirectTo]),(0,r.of)(!1))),this.http.get(`ui-api/${W.uiApiPath}/status`).pipe((0,a.U)(q=>(!q.available&&!j&&this.router.navigate([W.redirectTo||""],{state:{header:W.header,message:q.message,section:W.section,section_info:W.section_info,button_name:W.button_name,button_route:W.button_route,button_title:W.button_title,uiConfig:W.uiConfig,uiApiPath:W.uiApiPath,icon:u.P.wrench,component:W.component}}),q.available)),(0,f.K)(()=>(this.router.navigate([W.redirectTo]),(0,r.of)(!1))))}}return w.ALLOWLIST=["501"],w.\u0275fac=function(B){return new(B||w)(e.LFG(p.eN),e.LFG(g.F0),e.LFG(S.N))},w.\u0275prov=e.Yz7({token:w,factory:w.\u0275fac,providedIn:"root"}),w})()},97161:(v,b,i)=>{"use strict";i.d(b,{g:()=>x});var r=i(23815),a=i.n(r),f=i(26215),u=i(79765),e=i(18001),p=i(61355),g=i(57924),S=i(89724),M=i(92870),w=i(96102);let x=(()=>{class B{constructor(j,q,ue){this.toastr=j,this.taskMessageService=q,this.cdDatePipe=ue,this.hideToasties=!1,this.dataSource=new f.X([]),this.data$=this.dataSource.asObservable(),this.sidebarSubject=new u.xQ,this.queued=[],this.KEY="cdNotifications";const re=localStorage.getItem(this.KEY);let H=[];a().isString(re)&&(H=JSON.parse(re,(se,ae)=>a().isPlainObject(ae)?a().assign(new p.e,ae):ae)),this.dataSource.next(H)}removeAll(){localStorage.removeItem(this.KEY),this.dataSource.next([])}remove(j){const q=this.dataSource.getValue();q.splice(j,1),this.dataSource.next(q),localStorage.setItem(this.KEY,JSON.stringify(q))}save(j){const q=this.dataSource.getValue();for(q.push(j),q.sort((ue,re)=>ue.timestamp>re.timestamp?-1:1);q.length>10;)q.pop();this.dataSource.next(q),localStorage.setItem(this.KEY,JSON.stringify(q))}show(j,q,ue,re,H){return window.setTimeout(()=>{let se;se=a().isFunction(j)?j():a().isObject(j)?j:new p.T(j,q,ue,re,H),this.queueToShow(se)},10)}queueToShow(j){this.cancel(this.queuedTimeoutId),this.queued.find(q=>a().isEqual(q,j))||this.queued.push(j),this.queuedTimeoutId=window.setTimeout(()=>{this.showQueued()},500)}showQueued(){this.getUnifiedTitleQueue().forEach(j=>{const q=new p.e(j);q.isFinishedTask||this.save(q),this.showToasty(q)})}getUnifiedTitleQueue(){return Object.values(this.queueShiftByTitle()).map(j=>{const q=j[0];return j.length>1&&(q.message="<ul>"+j.map(ue=>`<li>${ue.message}</li>`).join("")+"</ul>"),q})}queueShiftByTitle(){const j={};let q;for(;q=this.queued.shift();)j[q.title]||(j[q.title]=[]),j[q.title].push(q);return j}showToasty(j){this.hideToasties||this.toastr[["error","info","success"][j.type]]((j.message?j.message+"<br>":"")+this.renderTimeAndApplicationHtml(j),j.title,j.options)}renderTimeAndApplicationHtml(j){return`<small class="date">${this.cdDatePipe.transform(j.timestamp)}</small><i class="float-end custom-icon ${j.applicationClass}" title="${j.application}"></i>`}notifyTask(j,q=!0){const ue=this.finishedTaskToNotification(j,q);return ue.isFinishedTask=!0,this.show(ue)}finishedTaskToNotification(j,q=!0){let ue;return ue=j.success&&q?new p.T(e.k.success,this.taskMessageService.getSuccessTitle(j)):new p.T(e.k.error,this.taskMessageService.getErrorTitle(j),this.taskMessageService.getErrorMessage(j)),ue.isFinishedTask=!0,ue}cancel(j){window.clearTimeout(j)}suspendToasties(j){this.hideToasties=j}toggleSidebar(j=!1){this.sidebarSubject.next(j)}}return B.\u0275fac=function(j){return new(j||B)(S.LFG(M._W),S.LFG(g.p),S.LFG(w.N))},B.\u0275prov=S.Yz7({token:B,factory:B.\u0275fac,providedIn:"root"}),B})()},81354:(v,b,i)=>{"use strict";i.d(b,{q:()=>g});var r=i(23815),a=i.n(r),f=i(88002),u=i(9837);class e{constructor(M){this.pwdPolicyEnabled=M.pwd_policy_enabled,this.pwdPolicyMinLength=M.pwd_policy_min_length,this.pwdPolicyCheckLengthEnabled=M.pwd_policy_check_length_enabled,this.pwdPolicyCheckOldpwdEnabled=M.pwd_policy_check_oldpwd_enabled,this.pwdPolicyCheckUsernameEnabled=M.pwd_policy_check_username_enabled,this.pwdPolicyCheckExclusionListEnabled=M.pwd_policy_check_exclusion_list_enabled,this.pwdPolicyCheckRepetitiveCharsEnabled=M.pwd_policy_check_repetitive_chars_enabled,this.pwdPolicyCheckSequentialCharsEnabled=M.pwd_policy_check_sequential_chars_enabled,this.pwdPolicyCheckComplexityEnabled=M.pwd_policy_check_complexity_enabled}}var p=i(89724);let g=(()=>{class S{constructor(w){this.settingsService=w}getHelpText(){return this.settingsService.getStandardSettings().pipe((0,f.U)(w=>{const x=new e(w);let B=[];if(x.pwdPolicyEnabled){B.push("Required rules for passwords:");const W={pwdPolicyCheckLengthEnabled:"Must contain at least " + x.pwdPolicyMinLength + " characters",pwdPolicyCheckOldpwdEnabled:"Must not be the same as the previous one",pwdPolicyCheckUsernameEnabled:"Cannot contain the username",pwdPolicyCheckExclusionListEnabled:"Cannot contain any configured keyword",pwdPolicyCheckRepetitiveCharsEnabled:"Cannot contain any repetitive characters e.g. \"aaa\"",pwdPolicyCheckSequentialCharsEnabled:"Cannot contain any sequential characters e.g. \"abc\"",pwdPolicyCheckComplexityEnabled:"Must consist of characters from the following groups:\n  * Alphabetic a-z, A-Z\n  * Numbers 0-9\n  * Special chars: !\"#$%& '()*+,-./:;<=>?@[\\]^_`{{|}}~\n  * Any other characters (signs)"};B=B.concat(a().keys(W).filter(j=>a().get(x,j)).map(j=>"- "+a().get(W,j)))}return B.join("\n")}))}mapCreditsToCssClass(w){let x="very-strong";return w<10?x="too-weak":w<15?x="weak":w<20?x="ok":w<25&&(x="strong"),x}}return S.\u0275fac=function(w){return new(w||S)(p.LFG(u.g))},S.\u0275prov=p.Yz7({token:S,factory:S.\u0275fac,providedIn:"root"}),S})()},34089:(v,b,i)=>{"use strict";i.d(b,{n:()=>f});var r=i(30633),a=i(89724);let f=(()=>{class u{constructor(){this.sections=[{heading:"Quality of Service",class:"quality-of-service",options:[{name:"rbd_qos_bps_limit",displayName:"BPS Limit",description:"The desired limit of IO bytes per second.",type:r.r.bps},{name:"rbd_qos_iops_limit",displayName:"IOPS Limit",description:"The desired limit of IO operations per second.",type:r.r.iops},{name:"rbd_qos_read_bps_limit",displayName:"Read BPS Limit",description:"The desired limit of read bytes per second.",type:r.r.bps},{name:"rbd_qos_read_iops_limit",displayName:"Read IOPS Limit",description:"The desired limit of read operations per second.",type:r.r.iops},{name:"rbd_qos_write_bps_limit",displayName:"Write BPS Limit",description:"The desired limit of write bytes per second.",type:r.r.bps},{name:"rbd_qos_write_iops_limit",displayName:"Write IOPS Limit",description:"The desired limit of write operations per second.",type:r.r.iops},{name:"rbd_qos_bps_burst",displayName:"BPS Burst",description:"The desired burst limit of IO bytes.",type:r.r.bps},{name:"rbd_qos_iops_burst",displayName:"IOPS Burst",description:"The desired burst limit of IO operations.",type:r.r.iops},{name:"rbd_qos_read_bps_burst",displayName:"Read BPS Burst",description:"The desired burst limit of read bytes.",type:r.r.bps},{name:"rbd_qos_read_iops_burst",displayName:"Read IOPS Burst",description:"The desired burst limit of read operations.",type:r.r.iops},{name:"rbd_qos_write_bps_burst",displayName:"Write BPS Burst",description:"The desired burst limit of write bytes.",type:r.r.bps},{name:"rbd_qos_write_iops_burst",displayName:"Write IOPS Burst",description:"The desired burst limit of write operations.",type:r.r.iops}]}]}static getOptionsFromSections(p){return p.map(g=>g.options).reduce((g,S)=>g.concat(S))}filterConfigOptionsByName(p){return u.getOptionsFromSections(this.sections).filter(g=>g.name===p)}getOptionValueByName(p,g,S=""){const M=this.filterConfigOptionsByName(p);return 1===M.length?M.pop()[g]:S}getWritableSections(){return this.sections.map(p=>(p.options=p.options.filter(g=>!g.readOnly),p))}getOptionFields(){return u.getOptionsFromSections(this.sections)}getWritableOptionFields(){return u.getOptionsFromSections(this.getWritableSections())}getOptionByName(p){return this.filterConfigOptionsByName(p).pop()}getDisplayName(p){return this.getOptionValueByName(p,"displayName")}getDescription(p){return this.getOptionValueByName(p,"description")}}return u.\u0275fac=function(p){return new(p||u)},u.\u0275prov=a.Yz7({token:u,factory:u.\u0275fac,providedIn:"root"}),u})()},74255:(v,b,i)=>{"use strict";i.d(b,{J:()=>M});var r=i(23815),a=i.n(r),f=i(26215),u=i(45435),e=i(28049),p=i(89724),g=i(19725),S=i(36848);let M=(()=>{class w{constructor(B,W){this.http=B,this.timerService=W,this.REFRESH_INTERVAL=5e3,this.summaryDataSource=new f.X(null),this.summaryData$=this.summaryDataSource.asObservable()}startPolling(){return this.timerService.get(()=>this.retrieveSummaryObservable(),this.REFRESH_INTERVAL).subscribe(this.retrieveSummaryObserver())}refresh(){return this.retrieveSummaryObservable().subscribe(this.retrieveSummaryObserver())}retrieveSummaryObservable(){return this.http.get("api/summary")}retrieveSummaryObserver(){return B=>{this.summaryDataSource.next(B)}}subscribeOnce(B,W){return this.summaryData$.pipe((0,u.h)(j=>!!j),(0,e.P)()).subscribe(B,W)}subscribe(B,W){return this.summaryData$.pipe((0,u.h)(j=>!!j)).subscribe(B,W)}addRunningTask(B){const W=this.summaryDataSource.getValue();!W||(a().isArray(W.executing_tasks)?W.executing_tasks.find(q=>q.name===B.name&&a().isEqual(q.metadata,B.metadata))||W.executing_tasks.push(B):W.executing_tasks=[B],this.summaryDataSource.next(W))}}return w.\u0275fac=function(B){return new(B||w)(p.LFG(g.eN),p.LFG(S.f))},w.\u0275prov=p.Yz7({token:w,factory:w.\u0275fac,providedIn:"root"}),w})()},38047:(v,b,i)=>{"use strict";i.d(b,{j:()=>u});var r=i(74255),a=i(57924),f=i(89724);let u=(()=>{class e{constructor(g,S){this.taskMessageService=g,this.summaryService=S}init(g,S,M,w,x,B,W){this.getUpdate=g,this.preProcessing=S,this.setList=M,this.onFetchError=w,this.taskFilter=x,this.itemFilter=B,this.builders=W||{},this.summaryDataSubscription=this.summaryService.subscribe(j=>{this.summary=j,this.fetch()},this.onFetchError)}fetch(g=null){this.getUpdate(g).subscribe(S=>{var M;this.updateData(S,null===(M=this.summary)||void 0===M?void 0:M.executing_tasks.filter(this.taskFilter))},this.onFetchError)}updateData(g,S){const M=this.preProcessing?this.preProcessing(g):g;this.addMissing(M,S),M.forEach(w=>{const x=S.filter(B=>this.itemFilter(w,B));w.cdExecuting=this.getTaskAction(x)}),this.setList(M)}addMissing(g,S){const M=this.builders.default;null==S||S.forEach(w=>{const x=g.find(W=>this.itemFilter(W,w)),B=this.builders[w.name];!x&&(B||M)&&g.push(B?B(w.metadata):M(w.metadata))})}getTaskAction(g){if(0!==g.length)return g.map(S=>{const M=S.progress?` ${S.progress}%`:"";return this.taskMessageService.getRunningText(S)+"..."+M}).join(", ")}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}}return e.\u0275fac=function(g){return new(g||e)(f.LFG(a.p),f.LFG(r.J))},e.\u0275prov=f.Yz7({token:e,factory:e.\u0275fac}),e})()},71099:(v,b,i)=>{"use strict";i.d(b,{k:()=>e});var r=i(23815),a=i.n(r),f=i(89724);class u{constructor(g,S,M){this.name=g,this.metadata=S,this.onTaskFinished=M}}let e=(()=>{class p{constructor(){this.subscriptions=[]}init(S){return S.subscribe(M=>{const w=M.executing_tasks,x=M.finished_tasks,B=[];for(const W of this.subscriptions){const j=this._getTask(W,x),q=this._getTask(W,w);null!==j&&null===q&&W.onTaskFinished(j),null!==q&&B.push(W),this.subscriptions=B}})}subscribe(S,M,w){this.subscriptions.push(new u(S,M,w))}_getTask(S,M){for(const w of M)if(w.name===S.name&&a().isEqual(w.metadata,S.metadata))return w;return null}}return p.\u0275fac=function(S){return new(S||p)},p.\u0275prov=f.Yz7({token:p,factory:p.\u0275fac,providedIn:"root"}),p})()},57924:(v,b,i)=>{"use strict";i.d(b,{p:()=>S});var r=i(23815),a=i.n(r),f=(()=>{return(M=f||(f={})).auth="Login",M.cephfs="CephFS",M.rbd="RBD",M.pool="Pool",M.osd="OSD",M.role="Role",M.user="User",f;var M})(),u=i(19358),e=i(89724);class p{constructor(w,x,B){this.running=w,this.failure=x,this.success=B}}class g{constructor(w,x,B){this.operation=w,this.involves=x,this.errors=B||(()=>({}))}failure(w){return "Failed to " + this.operation.failure + " " + this.involves(w) + ""}running(w){return`${this.operation.running} ${this.involves(w)}`}success(w){return`${this.operation.success} ${this.involves(w)}`}}let S=(()=>{class M{constructor(){this.defaultMessage=this.newTaskMessage(new p("Executing","execute","Executed"),x=>x&&(f[x.component]||x.component)||"unknown task",()=>({})),this.commonOperations={create:new p("Creating","create","Created"),update:new p("Updating","update","Updated"),delete:new p("Deleting","delete","Deleted"),add:new p("Adding","add","Added"),remove:new p("Removing","remove","Removed"),import:new p("Importing","import","Imported")},this.rbd={default:x=>"RBD '" + x.image_spec + "'",create:x=>{const B=new u.N(x.pool_name,x.namespace,x.image_name).toString();return "RBD '" + B + "'"},child:x=>{const B=new u.N(x.child_pool_name,x.child_namespace,x.child_image_name).toString();return "RBD '" + B + "'"},destination:x=>{const B=new u.N(x.dest_pool_name,x.dest_namespace,x.dest_image_name).toString();return "RBD '" + B + "'"},snapshot:x=>"RBD snapshot '" + x.image_spec + "@" + x.snapshot_name + "'"},this.rbd_mirroring={site_name:()=>"mirroring site name",bootstrap:()=>"bootstrap token",pool:x=>"mirror mode for pool '" + x.pool_name + "'",pool_peer:x=>"mirror peer for pool '" + x.pool_name + "'"},this.grafana={update_dashboards:()=>"all dashboards"},this.messages={"host/add":this.newTaskMessage(this.commonOperations.add,x=>this.host(x)),"host/remove":this.newTaskMessage(this.commonOperations.remove,x=>this.host(x)),"host/identify_device":this.newTaskMessage(new p("Identifying","identify","Identified"),x=>"device '" + x.device + "' on host '" + x.hostname + "'"),"osd/create":this.newTaskMessage(this.commonOperations.create,x=>"OSDs (DriveGroups: " + x.tracking_id + ")"),"osd/delete":this.newTaskMessage(this.commonOperations.delete,x=>this.osd(x)),"pool/create":this.newTaskMessage(this.commonOperations.create,x=>this.pool(x),x=>({17:"Name is already used by " + this.pool(x) + "."})),"pool/edit":this.newTaskMessage(this.commonOperations.update,x=>this.pool(x),x=>({17:"Name is already used by " + this.pool(x) + "."})),"pool/delete":this.newTaskMessage(this.commonOperations.delete,x=>this.pool(x)),"ecp/create":this.newTaskMessage(this.commonOperations.create,x=>this.ecp(x),x=>({17:"Name is already used by " + this.ecp(x) + "."})),"ecp/delete":this.newTaskMessage(this.commonOperations.delete,x=>this.ecp(x)),"crushRule/create":this.newTaskMessage(this.commonOperations.create,x=>this.crushRule(x),x=>({17:"Name is already used by " + this.crushRule(x) + "."})),"crushRule/delete":this.newTaskMessage(this.commonOperations.delete,x=>this.crushRule(x)),"rbd/create":this.newTaskMessage(this.commonOperations.create,this.rbd.create,x=>({17:"Name is already used by " + this.rbd.create(x) + "."})),"rbd/edit":this.newTaskMessage(this.commonOperations.update,this.rbd.default,x=>({17:"Name is already used by " + this.rbd.default(x) + "."})),"rbd/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd.default,x=>({16:"" + this.rbd.default(x) + " is busy.",39:"" + this.rbd.default(x) + " contains snapshots."})),"rbd/clone":this.newTaskMessage(new p("Cloning","clone","Cloned"),this.rbd.child,x=>({17:"Name is already used by " + this.rbd.child(x) + ".",22:"Snapshot of " + this.rbd.child(x) + " must be protected."})),"rbd/copy":this.newTaskMessage(new p("Copying","copy","Copied"),this.rbd.destination,x=>({17:"Name is already used by " + this.rbd.destination(x) + "."})),"rbd/flatten":this.newTaskMessage(new p("Flattening","flatten","Flattened"),this.rbd.default),"rbd/snap/create":this.newTaskMessage(this.commonOperations.create,this.rbd.snapshot,x=>({17:"Name is already used by " + this.rbd.snapshot(x) + "."})),"rbd/snap/edit":this.newTaskMessage(this.commonOperations.update,this.rbd.snapshot,x=>({16:"Cannot unprotect " + this.rbd.snapshot(x) + " because it contains child images."})),"rbd/snap/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd.snapshot,x=>({16:"Cannot delete " + this.rbd.snapshot(x) + " because it's protected."})),"rbd/snap/rollback":this.newTaskMessage(new p("Rolling back","rollback","Rolled back"),this.rbd.snapshot),"rbd/trash/move":this.newTaskMessage(new p("Moving","move","Moved"),x=>"image '" + x.image_spec + "' to trash",()=>({2:"Could not find image."})),"rbd/trash/restore":this.newTaskMessage(new p("Restoring","restore","Restored"),x=>"image '" + x.image_id_spec + "' into '" + x.new_image_name + "'",x=>({17:"Image name '" + x.new_image_name + "' is already in use."})),"rbd/trash/remove":this.newTaskMessage(new p("Deleting","delete","Deleted"),x=>"image '" + x.image_id_spec + "'"),"rbd/trash/purge":this.newTaskMessage(new p("Purging","purge","Purged"),x=>{let B="all pools";return x.pool_name&&(B=`'${x.pool_name}'`),"images from " + B + ""}),"rbd/mirroring/site_name/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.site_name,()=>({})),"rbd/mirroring/bootstrap/create":this.newTaskMessage(this.commonOperations.create,this.rbd_mirroring.bootstrap,()=>({})),"rbd/mirroring/bootstrap/import":this.newTaskMessage(this.commonOperations.import,this.rbd_mirroring.bootstrap,()=>({})),"rbd/mirroring/pool/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.pool,()=>({16:"Cannot disable mirroring because it contains a peer."})),"rbd/mirroring/peer/add":this.newTaskMessage(this.commonOperations.create,this.rbd_mirroring.pool_peer,()=>({})),"rbd/mirroring/peer/edit":this.newTaskMessage(this.commonOperations.update,this.rbd_mirroring.pool_peer,()=>({})),"rbd/mirroring/peer/delete":this.newTaskMessage(this.commonOperations.delete,this.rbd_mirroring.pool_peer,()=>({})),"iscsi/target/create":this.newTaskMessage(this.commonOperations.create,x=>this.iscsiTarget(x)),"iscsi/target/edit":this.newTaskMessage(this.commonOperations.update,x=>this.iscsiTarget(x)),"iscsi/target/delete":this.newTaskMessage(this.commonOperations.delete,x=>this.iscsiTarget(x)),"nfs/create":this.newTaskMessage(this.commonOperations.create,x=>this.nfs(x)),"nfs/edit":this.newTaskMessage(this.commonOperations.update,x=>this.nfs(x)),"nfs/delete":this.newTaskMessage(this.commonOperations.delete,x=>this.nfs(x)),"grafana/dashboards/update":this.newTaskMessage(this.commonOperations.update,this.grafana.update_dashboards,()=>({})),"service/create":this.newTaskMessage(this.commonOperations.create,x=>this.service(x)),"service/edit":this.newTaskMessage(this.commonOperations.update,x=>this.service(x)),"service/delete":this.newTaskMessage(this.commonOperations.delete,x=>this.service(x)),"crud-component/create":this.newTaskMessage(this.commonOperations.create,x=>this.crudMessage(x)),"crud-component/edit":this.newTaskMessage(this.commonOperations.update,x=>this.crudMessage(x)),"crud-component/import":this.newTaskMessage(this.commonOperations.import,x=>this.crudMessage(x)),"crud-component/id":this.newTaskMessage(this.commonOperations.delete,x=>this.crudMessageId(x))}}newTaskMessage(x,B,W){return new g(x,B,W)}host(x){return "host '" + x.hostname + "'"}osd(x){return "OSD '" + x.svc_id + "'"}pool(x){return "pool '" + x.pool_name + "'"}ecp(x){return "erasure code profile '" + x.name + "'"}crushRule(x){return "crush rule '" + x.name + "'"}iscsiTarget(x){return "target '" + x.target_iqn + "'"}nfs(x){return "NFS '" + x.cluster_id + ":" + (x.export_id ? x.export_id : x.path) + "'"}service(x){return "Service '" + x.service_name + "'"}crudMessage(x){let B=x.__message;return a().forEach(x,(W,j)=>{"__message"!=j&&(B=B.replace("{"+j+"}",W))}),"" + B + ""}crudMessageId(x){return "" + x + ""}_getTaskTitle(x){return x.name&&x.name.startsWith("progress/")?this.newTaskMessage(new p(x.name.replace("progress/",""),"",x.name.replace("progress/","")),B=>""):this.messages[x.name]||this.defaultMessage}getSuccessTitle(x){return this._getTaskTitle(x).success(x.metadata)}getErrorMessage(x){return this._getTaskTitle(x).errors(x.metadata)[x.exception.code]||x.exception.detail}getErrorTitle(x){return this._getTaskTitle(x).failure(x.metadata)}getRunningTitle(x){return this._getTaskTitle(x).running(x.metadata)}getRunningText(x){return this._getTaskTitle(x).operation.running}}return M.\u0275fac=function(x){return new(x||M)},M.\u0275prov=e.Yz7({token:M,factory:M.\u0275fac,providedIn:"root"}),M})()},32337:(v,b,i)=>{"use strict";i.d(b,{P:()=>w});var r=i(70882),a=i(18001),f=i(61355),u=i(60737),e=i(97161),p=i(74255),g=i(71099),S=i(57924),M=i(89724);let w=(()=>{class x{constructor(W,j,q,ue){this.notificationService=W,this.summaryService=j,this.taskMessageService=q,this.taskManagerService=ue}wrapTaskAroundCall({task:W,call:j}){return new r.y(q=>{j.subscribe(ue=>{202===ue.status?this._handleExecutingTasks(W):(this.summaryService.refresh(),W.success=!0,this.notificationService.notifyTask(W))},ue=>{W.success=!1,W.exception=ue.error,q.error(ue)},()=>{q.complete()})})}_handleExecutingTasks(W){const j=new f.T(a.k.info,this.taskMessageService.getRunningTitle(W));j.isFinishedTask=!0,this.notificationService.show(j);const q=new u.o(W.name,W.metadata);this.summaryService.addRunningTask(q),this.taskManagerService.subscribe(q.name,q.metadata,ue=>{this.notificationService.notifyTask(ue)})}}return x.\u0275fac=function(W){return new(W||x)(M.LFG(e.g),M.LFG(p.J),M.LFG(S.p),M.LFG(g.k))},x.\u0275prov=M.Yz7({token:x,factory:x.\u0275fac,providedIn:"root"}),x})()},36848:(v,b,i)=>{"use strict";i.d(b,{f:()=>B});var r=i(46797),a=i(59746),f=i(43190),u=i(47349),e=i(2817),p=i(89724),g=i(33637);class S{constructor(j){this.zone=j,this.scheduler=g.z}now(){return this.scheduler.now()}}let M=(()=>{class W extends S{constructor(q){super(q)}schedule(...q){return this.zone.runOutsideAngular(()=>this.scheduler.schedule.apply(this.scheduler,q))}}return W.\u0275fac=function(q){return new(q||W)(p.LFG(p.R0b))},W.\u0275prov=p.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})(),w=(()=>{class W extends S{constructor(q){super(q)}schedule(...q){return this.zone.run(()=>this.scheduler.schedule.apply(this.scheduler,q))}}return W.\u0275fac=function(q){return new(q||W)(p.LFG(p.R0b))},W.\u0275prov=p.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})(),x=(()=>{class W{constructor(q,ue){this.leave=q,this.enter=ue}}return W.\u0275fac=function(q){return new(q||W)(p.LFG(M),p.LFG(w))},W.\u0275prov=p.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})(),B=(()=>{class W{constructor(q){this.ngZone=q,this.DEFAULT_REFRESH_INTERVAL=5e3,this.DEFAULT_DUE_TIME=0}get(q,ue=this.DEFAULT_REFRESH_INTERVAL,re=this.DEFAULT_DUE_TIME){return(0,r.H)(re,ue,this.ngZone.leave).pipe((0,a.QV)(this.ngZone.enter),(0,f.w)(q),(0,u.d)({refCount:!0,bufferSize:1}),(0,e.r)())}}return W.\u0275fac=function(q){return new(q||W)(p.LFG(x))},W.\u0275prov=p.Yz7({token:W,factory:W.\u0275fac,providedIn:"root"}),W})()},51847:(v,b,i)=>{"use strict";i.d(b,{F:()=>f});var r=i(11048),a=i(79512);class f{constructor(e){this.base=e}static concatURLSegments(e){return e.reduce(r.Ye.joinWithSlash)}static buildURL(e,...p){return f.concatURLSegments([...e?["/"]:[],...p])}getURL(e,p=!0,...g){return f.buildURL(p,this.base,e,...g)}getCreate(e=!0){return this.getURL(a.MQ.CREATE,e)}getCreateFrom(e,p=!0){return this.getURL(a.MQ.CREATE,p,e)}getDelete(e=!0){return this.getURL(a.MQ.DELETE,e)}getEdit(e,p=!0){return this.getURL(a.MQ.EDIT,p,e)}getUpdate(e,p=!0){return this.getURL(a.MQ.UPDATE,p,e)}getAdd(e=!0){return this.getURL(a.MQ.ADD,e)}getRemove(e=!0){return this.getURL(a.MQ.REMOVE,e)}getRecreate(e,p=!0){return this.getURL(a.MQ.RECREATE,p,e)}}},44466:(v,b,i)=>{"use strict";i.d(b,{m:()=>re});var r=i(11048),a=i(1659),f=i(90645),u=i(1851),e=i(99475),p=i(15626),g=i(40267),S=i(35540),M=i(12455),w=i(45510),x=i(47640),B=i(28211),W=i(67464),j=i(39017),q=i(39054),ue=i(89724);let re=(()=>{class H{}return H.\u0275fac=function(ae){return new(ae||H)},H.\u0275mod=ue.oAB({type:H}),H.\u0275inj=ue.cJS({providers:[x.j,w.P,B.H,e.P],imports:[[r.ez,M.D,p.K,g.t,S.o,a.UX,f.X0.forRoot({types:[{name:"array",component:W.l},{name:"object",component:j.o},{name:"input",component:q.v}],validationMessages:[{name:"required",message:"This field is required"}]}),u.z],p.K,M.D,g.t,S.o]}),H})()},92340:(v,b,i)=>{"use strict";i.d(b,{N:()=>r});const r={default_lang:"en-US",production:!0,year:"2023"}},87830:(v,b,i)=>{"use strict";var r={};i.r(r),i.d(r,{JsonPatchError:()=>df,_areEquals:()=>DE,applyOperation:()=>jv,applyPatch:()=>Xg,applyReducer:()=>gI,deepClone:()=>_I,getValueByPointer:()=>AE,validate:()=>aw,validator:()=>eC});var a={};i.r(a),i.d(a,{compare:()=>MI,generate:()=>TA,observe:()=>CI,unobserve:()=>TI});var f={};i.r(f),i.d(f,{cookie:()=>w4,header:()=>R4,path:()=>A4,query:()=>D4});var u=i(14800),e=i(89724),p=i(11048),g=i(19725),S=i(32019);const M=!1;function x(n){return new e.vHH(3e3,M)}function ci(){return"undefined"!=typeof window&&void 0!==window.document}function hr(){return"undefined"!=typeof process&&"[object process]"==={}.toString.call(process)}function Br(n){switch(n.length){case 0:return new S.ZN;case 1:return n[0];default:return new S.ZE(n)}}function Ur(n,s,t,o,l={},_={}){const C=[],R=[];let N=-1,V=null;if(o.forEach(Q=>{const oe=Q.offset,le=oe==N,_e=le&&V||{};Object.keys(Q).forEach(ye=>{let $e=ye,Ie=Q[ye];if("offset"!==ye)switch($e=s.normalizePropertyName($e,C),Ie){case S.k1:Ie=l[ye];break;case S.l3:Ie=_[ye];break;default:Ie=s.normalizeStyleValue(ye,$e,Ie,C)}_e[$e]=Ie}),le||R.push(_e),V=_e,N=oe}),C.length)throw function Qt(n){return new e.vHH(3502,M)}();return R}function Hn(n,s,t,o){switch(s){case"start":n.onStart(()=>o(t&&er(t,"start",n)));break;case"done":n.onDone(()=>o(t&&er(t,"done",n)));break;case"destroy":n.onDestroy(()=>o(t&&er(t,"destroy",n)))}}function er(n,s,t){const o=t.totalTime,_=_r(n.element,n.triggerName,n.fromState,n.toState,s||n.phaseName,null==o?n.totalTime:o,!!t.disabled),C=n._data;return null!=C&&(_._data=C),_}function _r(n,s,t,o,l="",_=0,C){return{element:n,triggerName:s,fromState:t,toState:o,phaseName:l,totalTime:_,disabled:!!C}}function ei(n,s,t){let o;return n instanceof Map?(o=n.get(s),o||n.set(s,o=t)):(o=n[s],o||(o=n[s]=t)),o}function bi(n){const s=n.indexOf(":");return[n.substring(1,s),n.substr(s+1)]}let fi=(n,s)=>!1,no=(n,s,t)=>[],xo=null;function Er(n){const s=n.parentNode||n.host;return s===xo?null:s}(hr()||"undefined"!=typeof Element)&&(ci()?(xo=(()=>document.documentElement)(),fi=(n,s)=>{for(;s;){if(s===n)return!0;s=Er(s)}return!1}):fi=(n,s)=>n.contains(s),no=(n,s,t)=>{if(t)return Array.from(n.querySelectorAll(s));const o=n.querySelector(s);return o?[o]:[]});let Zn=null,Xn=!1;function zn(n){Zn||(Zn=function ri(){return"undefined"!=typeof document?document.body:null}()||{},Xn=!!Zn.style&&"WebkitAppearance"in Zn.style);let s=!0;return Zn.style&&!function vn(n){return"ebkit"==n.substring(1,6)}(n)&&(s=n in Zn.style,!s&&Xn&&(s="Webkit"+n.charAt(0).toUpperCase()+n.substr(1)in Zn.style)),s}const Gi=fi,ui=no;let Ji=(()=>{class n{validateStyleProperty(t){return zn(t)}matchesElement(t,o){return!1}containsElement(t,o){return Gi(t,o)}getParentElement(t){return Er(t)}query(t,o,l){return ui(t,o,l)}computeStyle(t,o,l){return l||""}animate(t,o,l,_,C,R=[],N){return new S.ZN(l,_)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac}),n})(),mn=(()=>{class n{}return n.NOOP=new Ji,n})();const Le="ng-enter",Re="ng-leave",Se="ng-trigger",dt=".ng-trigger",st="ng-animating",nn=".ng-animating";function Fe(n){if("number"==typeof n)return n;const s=n.match(/^(-?[\.\d]+)(m?s)/);return!s||s.length<2?0:Lr(parseFloat(s[1]),s[2])}function Lr(n,s){return"s"===s?1e3*n:n}function ti(n,s,t){return n.hasOwnProperty("duration")?n:function Ut(n,s,t){let l,_=0,C="";if("string"==typeof n){const R=n.match(/^(-?[\.\d]+)(m?s)(?:\s+(-?[\.\d]+)(m?s))?(?:\s+([-a-z]+(?:\(.+?\))?))?$/i);if(null===R)return s.push(x()),{duration:0,delay:0,easing:""};l=Lr(parseFloat(R[1]),R[2]);const N=R[3];null!=N&&(_=Lr(parseFloat(N),R[4]));const V=R[5];V&&(C=V)}else l=n;if(!t){let R=!1,N=s.length;l<0&&(s.push(function B(){return new e.vHH(3100,M)}()),R=!0),_<0&&(s.push(function W(){return new e.vHH(3101,M)}()),R=!0),R&&s.splice(N,0,x())}return{duration:l,delay:_,easing:C}}(n,s,t)}function Dn(n,s={}){return Object.keys(n).forEach(t=>{s[t]=n[t]}),s}function $t(n,s,t={}){if(s)for(let o in n)t[o]=n[o];else Dn(n,t);return t}function _t(n,s,t){return t?s+":"+t+";":""}function yt(n){let s="";for(let t=0;t<n.style.length;t++){const o=n.style.item(t);s+=_t(0,o,n.style.getPropertyValue(o))}for(const t in n.style)n.style.hasOwnProperty(t)&&!t.startsWith("_")&&(s+=_t(0,Xo(t),n.style[t]));n.setAttribute("style",s)}function Vt(n,s,t){n.style&&(Object.keys(s).forEach(o=>{const l=ko(o);t&&!t.hasOwnProperty(o)&&(t[o]=n.style[l]),n.style[l]=s[o]}),hr()&&yt(n))}function yn(n,s){n.style&&(Object.keys(s).forEach(t=>{const o=ko(t);n.style[o]=""}),hr()&&yt(n))}function Cr(n){return Array.isArray(n)?1==n.length?n[0]:(0,S.vP)(n):n}const yi=new RegExp("{{\\s*(.+?)\\s*}}","g");function Yo(n){let s=[];if("string"==typeof n){let t;for(;t=yi.exec(n);)s.push(t[1]);yi.lastIndex=0}return s}function Qo(n,s,t){const o=n.toString(),l=o.replace(yi,(_,C)=>{let R=s[C];return s.hasOwnProperty(C)||(t.push(function q(n){return new e.vHH(3003,M)}()),R=""),R.toString()});return l==o?n:l}function lo(n){const s=[];let t=n.next();for(;!t.done;)s.push(t.value),t=n.next();return s}const Ri=/-+([a-z0-9])/g;function ko(n){return n.replace(Ri,(...s)=>s[1].toUpperCase())}function Xo(n){return n.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function kn(n,s,t){switch(s.type){case 7:return n.visitTrigger(s,t);case 0:return n.visitState(s,t);case 1:return n.visitTransition(s,t);case 2:return n.visitSequence(s,t);case 3:return n.visitGroup(s,t);case 4:return n.visitAnimate(s,t);case 5:return n.visitKeyframes(s,t);case 6:return n.visitStyle(s,t);case 8:return n.visitReference(s,t);case 9:return n.visitAnimateChild(s,t);case 10:return n.visitAnimateRef(s,t);case 11:return n.visitQuery(s,t);case 12:return n.visitStagger(s,t);default:throw function ue(n){return new e.vHH(3004,M)}()}}function nr(n,s){return window.getComputedStyle(n)[s]}function Mr(n,s){const t=[];return"string"==typeof n?n.split(/\s*,\s*/).forEach(o=>function Ar(n,s,t){if(":"==n[0]){const N=function cr(n,s){switch(n){case":enter":return"void => *";case":leave":return"* => void";case":increment":return(t,o)=>parseFloat(o)>parseFloat(t);case":decrement":return(t,o)=>parseFloat(o)<parseFloat(t);default:return s.push(function Ge(n){return new e.vHH(3016,M)}()),"* => *"}}(n,t);if("function"==typeof N)return void s.push(N);n=N}const o=n.match(/^(\*|[-\w]+)\s*(<?[=-]>)\s*(\*|[-\w]+)$/);if(null==o||o.length<4)return t.push(function Pe(n){return new e.vHH(3015,M)}()),s;const l=o[1],_=o[2],C=o[3];s.push($n(l,C));"<"==_[0]&&!("*"==l&&"*"==C)&&s.push($n(C,l))}(o,t,s)):t.push(n),t}const pi=new Set(["true","1"]),Sn=new Set(["false","0"]);function $n(n,s){const t=pi.has(n)||Sn.has(n),o=pi.has(s)||Sn.has(s);return(l,_)=>{let C="*"==n||n==l,R="*"==s||s==_;return!C&&t&&"boolean"==typeof l&&(C=l?pi.has(n):Sn.has(n)),!R&&o&&"boolean"==typeof _&&(R=_?pi.has(s):Sn.has(s)),C&&R}}const ro=new RegExp("s*:selfs*,?","g");function go(n,s,t,o){return new Ys(n).build(s,t,o)}class Ys{constructor(s){this._driver=s}build(s,t,o){const l=new ma(t);this._resetContextStyleTimingState(l);const _=kn(this,Cr(s),l);return l.unsupportedCSSPropertiesFound.size&&l.unsupportedCSSPropertiesFound.keys(),_}_resetContextStyleTimingState(s){s.currentQuerySelector="",s.collectedStyles={},s.collectedStyles[""]={},s.currentTime=0}visitTrigger(s,t){let o=t.queryCount=0,l=t.depCount=0;const _=[],C=[];return"@"==s.name.charAt(0)&&t.errors.push(function H(){return new e.vHH(3006,M)}()),s.definitions.forEach(R=>{if(this._resetContextStyleTimingState(t),0==R.type){const N=R,V=N.name;V.toString().split(/\s*,\s*/).forEach(Q=>{N.name=Q,_.push(this.visitState(N,t))}),N.name=V}else if(1==R.type){const N=this.visitTransition(R,t);o+=N.queryCount,l+=N.depCount,C.push(N)}else t.errors.push(function se(){return new e.vHH(3007,M)}())}),{type:7,name:s.name,states:_,transitions:C,queryCount:o,depCount:l,options:null}}visitState(s,t){const o=this.visitStyle(s.styles,t),l=s.options&&s.options.params||null;if(o.containsDynamicStyles){const _=new Set,C=l||{};o.styles.forEach(R=>{if(fa(R)){const N=R;Object.keys(N).forEach(V=>{Yo(N[V]).forEach(Q=>{C.hasOwnProperty(Q)||_.add(Q)})})}}),_.size&&(lo(_.values()),t.errors.push(function ae(n,s){return new e.vHH(3008,M)}()))}return{type:0,name:s.name,style:o,options:l?{params:l}:null}}visitTransition(s,t){t.queryCount=0,t.depCount=0;const o=kn(this,Cr(s.animation),t);return{type:1,matchers:Mr(s.expr,t.errors),animation:o,queryCount:t.queryCount,depCount:t.depCount,options:Ra(s.options)}}visitSequence(s,t){return{type:2,steps:s.steps.map(o=>kn(this,o,t)),options:Ra(s.options)}}visitGroup(s,t){const o=t.currentTime;let l=0;const _=s.steps.map(C=>{t.currentTime=o;const R=kn(this,C,t);return l=Math.max(l,t.currentTime),R});return t.currentTime=l,{type:3,steps:_,options:Ra(s.options)}}visitAnimate(s,t){const o=function sa(n,s){if(n.hasOwnProperty("duration"))return n;if("number"==typeof n)return pl(ti(n,s).duration,0,"");const t=n;if(t.split(/\s+/).some(_=>"{"==_.charAt(0)&&"{"==_.charAt(1))){const _=pl(0,0,"");return _.dynamic=!0,_.strValue=t,_}const l=ti(t,s);return pl(l.duration,l.delay,l.easing)}(s.timings,t.errors);t.currentAnimateTimings=o;let l,_=s.styles?s.styles:(0,S.oB)({});if(5==_.type)l=this.visitKeyframes(_,t);else{let C=s.styles,R=!1;if(!C){R=!0;const V={};o.easing&&(V.easing=o.easing),C=(0,S.oB)(V)}t.currentTime+=o.duration+o.delay;const N=this.visitStyle(C,t);N.isEmptyStep=R,l=N}return t.currentAnimateTimings=null,{type:4,timings:o,style:l,options:null}}visitStyle(s,t){const o=this._makeStyleAst(s,t);return this._validateStyleAst(o,t),o}_makeStyleAst(s,t){const o=[];Array.isArray(s.styles)?s.styles.forEach(C=>{"string"==typeof C?C==S.l3?o.push(C):t.errors.push(function ie(n){return new e.vHH(3002,M)}()):o.push(C)}):o.push(s.styles);let l=!1,_=null;return o.forEach(C=>{if(fa(C)){const R=C,N=R.easing;if(N&&(_=N,delete R.easing),!l)for(let V in R)if(R[V].toString().indexOf("{{")>=0){l=!0;break}}}),{type:6,styles:o,easing:_,offset:s.offset,containsDynamicStyles:l,options:null}}_validateStyleAst(s,t){const o=t.currentAnimateTimings;let l=t.currentTime,_=t.currentTime;o&&_>0&&(_-=o.duration+o.delay),s.styles.forEach(C=>{"string"!=typeof C&&Object.keys(C).forEach(R=>{if(!this._driver.validateStyleProperty(R))return delete C[R],void t.unsupportedCSSPropertiesFound.add(R);const N=t.collectedStyles[t.currentQuerySelector],V=N[R];let Q=!0;V&&(_!=l&&_>=V.startTime&&l<=V.endTime&&(t.errors.push(function he(n,s,t,o,l){return new e.vHH(3010,M)}()),Q=!1),_=V.startTime),Q&&(N[R]={startTime:_,endTime:l}),t.options&&function xi(n,s,t){const o=s.params||{},l=Yo(n);l.length&&l.forEach(_=>{o.hasOwnProperty(_)||t.push(function j(n){return new e.vHH(3001,M)}())})}(C[R],t.options,t.errors)})})}visitKeyframes(s,t){const o={type:5,styles:[],options:null};if(!t.currentAnimateTimings)return t.errors.push(function Ce(){return new e.vHH(3011,M)}()),o;let _=0;const C=[];let R=!1,N=!1,V=0;const Q=s.steps.map(ke=>{const we=this._makeStyleAst(ke,t);let G=null!=we.offset?we.offset:function Ea(n){if("string"==typeof n)return null;let s=null;if(Array.isArray(n))n.forEach(t=>{if(fa(t)&&t.hasOwnProperty("offset")){const o=t;s=parseFloat(o.offset),delete o.offset}});else if(fa(n)&&n.hasOwnProperty("offset")){const t=n;s=parseFloat(t.offset),delete t.offset}return s}(we.styles),Dt=0;return null!=G&&(_++,Dt=we.offset=G),N=N||Dt<0||Dt>1,R=R||Dt<V,V=Dt,C.push(Dt),we});N&&t.errors.push(function ce(){return new e.vHH(3012,M)}()),R&&t.errors.push(function Be(){return new e.vHH(3200,M)}());const oe=s.steps.length;let le=0;_>0&&_<oe?t.errors.push(function Ve(){return new e.vHH(3202,M)}()):0==_&&(le=1/(oe-1));const _e=oe-1,ye=t.currentTime,$e=t.currentAnimateTimings,Ie=$e.duration;return Q.forEach((ke,we)=>{const G=le>0?we==_e?1:le*we:C[we],Dt=G*Ie;t.currentTime=ye+$e.delay+Dt,$e.duration=Dt,this._validateStyleAst(ke,t),ke.offset=G,o.styles.push(ke)}),o}visitReference(s,t){return{type:8,animation:kn(this,Cr(s.animation),t),options:Ra(s.options)}}visitAnimateChild(s,t){return t.depCount++,{type:9,options:Ra(s.options)}}visitAnimateRef(s,t){return{type:10,animation:this.visitReference(s.animation,t),options:Ra(s.options)}}visitQuery(s,t){const o=t.currentQuerySelector,l=s.options||{};t.queryCount++,t.currentQuery=s;const[_,C]=function ds(n){const s=!!n.split(/\s*,\s*/).find(t=>":self"==t);return s&&(n=n.replace(ro,"")),n=n.replace(/@\*/g,dt).replace(/@\w+/g,t=>dt+"-"+t.substr(1)).replace(/:animating/g,nn),[n,s]}(s.selector);t.currentQuerySelector=o.length?o+" "+_:_,ei(t.collectedStyles,t.currentQuerySelector,{});const R=kn(this,Cr(s.animation),t);return t.currentQuery=null,t.currentQuerySelector=o,{type:11,selector:_,limit:l.limit||0,optional:!!l.optional,includeSelf:C,animation:R,originalSelector:s.selector,options:Ra(s.options)}}visitStagger(s,t){t.currentQuery||t.errors.push(function Xe(){return new e.vHH(3013,M)}());const o="full"===s.timings?{duration:0,delay:0,easing:"full"}:ti(s.timings,t.errors,!0);return{type:12,animation:kn(this,Cr(s.animation),t),timings:o,options:null}}}class ma{constructor(s){this.errors=s,this.queryCount=0,this.depCount=0,this.currentTransition=null,this.currentQuery=null,this.currentQuerySelector=null,this.currentAnimateTimings=null,this.currentTime=0,this.collectedStyles={},this.options=null,this.unsupportedCSSPropertiesFound=new Set}}function fa(n){return!Array.isArray(n)&&"object"==typeof n}function Ra(n){return n?(n=Dn(n)).params&&(n.params=function es(n){return n?Dn(n):null}(n.params)):n={},n}function pl(n,s,t){return{duration:n,delay:s,easing:t}}function Co(n,s,t,o,l,_,C=null,R=!1){return{type:1,element:n,keyframes:s,preStyleProps:t,postStyleProps:o,duration:l,delay:_,totalTime:l+_,easing:C,subTimeline:R}}class yl{constructor(){this._map=new Map}get(s){return this._map.get(s)||[]}append(s,t){let o=this._map.get(s);o||this._map.set(s,o=[]),o.push(...t)}has(s){return this._map.has(s)}clear(){this._map.clear()}}const Wa=new RegExp(":enter","g"),nl=new RegExp(":leave","g");function js(n,s,t,o,l,_={},C={},R,N,V=[]){return(new $o).buildKeyframes(n,s,t,o,l,_,C,R,N,V)}class $o{buildKeyframes(s,t,o,l,_,C,R,N,V,Q=[]){V=V||new yl;const oe=new Ns(s,t,V,l,_,Q,[]);oe.options=N,oe.currentTimeline.setStyles([C],null,oe.errors,N),kn(this,o,oe);const le=oe.timelines.filter(_e=>_e.containsAnimation());if(Object.keys(R).length){let _e;for(let ye=le.length-1;ye>=0;ye--){const $e=le[ye];if($e.element===t){_e=$e;break}}_e&&!_e.allowOnlyTimelineStyles()&&_e.setStyles([R],null,oe.errors,N)}return le.length?le.map(_e=>_e.buildKeyframes()):[Co(t,[],[],[],0,0,"",!1)]}visitTrigger(s,t){}visitState(s,t){}visitTransition(s,t){}visitAnimateChild(s,t){const o=t.subInstructions.get(t.element);if(o){const l=t.createSubContext(s.options),_=t.currentTimeline.currentTime,C=this._visitSubInstructions(o,l,l.options);_!=C&&t.transformIntoNewTimeline(C)}t.previousNode=s}visitAnimateRef(s,t){const o=t.createSubContext(s.options);o.transformIntoNewTimeline(),this.visitReference(s.animation,o),t.transformIntoNewTimeline(o.currentTimeline.currentTime),t.previousNode=s}_visitSubInstructions(s,t,o){let _=t.currentTimeline.currentTime;const C=null!=o.duration?Fe(o.duration):null,R=null!=o.delay?Fe(o.delay):null;return 0!==C&&s.forEach(N=>{const V=t.appendInstructionToTimeline(N,C,R);_=Math.max(_,V.duration+V.delay)}),_}visitReference(s,t){t.updateOptions(s.options,!0),kn(this,s.animation,t),t.previousNode=s}visitSequence(s,t){const o=t.subContextCount;let l=t;const _=s.options;if(_&&(_.params||_.delay)&&(l=t.createSubContext(_),l.transformIntoNewTimeline(),null!=_.delay)){6==l.previousNode.type&&(l.currentTimeline.snapshotCurrentStyles(),l.previousNode=To);const C=Fe(_.delay);l.delayNextStep(C)}s.steps.length&&(s.steps.forEach(C=>kn(this,C,l)),l.currentTimeline.applyStylesToKeyframe(),l.subContextCount>o&&l.transformIntoNewTimeline()),t.previousNode=s}visitGroup(s,t){const o=[];let l=t.currentTimeline.currentTime;const _=s.options&&s.options.delay?Fe(s.options.delay):0;s.steps.forEach(C=>{const R=t.createSubContext(s.options);_&&R.delayNextStep(_),kn(this,C,R),l=Math.max(l,R.currentTimeline.currentTime),o.push(R.currentTimeline)}),o.forEach(C=>t.currentTimeline.mergeTimelineCollectedStyles(C)),t.transformIntoNewTimeline(l),t.previousNode=s}_visitTiming(s,t){if(s.dynamic){const o=s.strValue;return ti(t.params?Qo(o,t.params,t.errors):o,t.errors)}return{duration:s.duration,delay:s.delay,easing:s.easing}}visitAnimate(s,t){const o=t.currentAnimateTimings=this._visitTiming(s.timings,t),l=t.currentTimeline;o.delay&&(t.incrementTime(o.delay),l.snapshotCurrentStyles());const _=s.style;5==_.type?this.visitKeyframes(_,t):(t.incrementTime(o.duration),this.visitStyle(_,t),l.applyStylesToKeyframe()),t.currentAnimateTimings=null,t.previousNode=s}visitStyle(s,t){const o=t.currentTimeline,l=t.currentAnimateTimings;!l&&o.getCurrentStyleProperties().length&&o.forwardFrame();const _=l&&l.easing||s.easing;s.isEmptyStep?o.applyEmptyStep(_):o.setStyles(s.styles,_,t.errors,t.options),t.previousNode=s}visitKeyframes(s,t){const o=t.currentAnimateTimings,l=t.currentTimeline.duration,_=o.duration,R=t.createSubContext().currentTimeline;R.easing=o.easing,s.styles.forEach(N=>{R.forwardTime((N.offset||0)*_),R.setStyles(N.styles,N.easing,t.errors,t.options),R.applyStylesToKeyframe()}),t.currentTimeline.mergeTimelineCollectedStyles(R),t.transformIntoNewTimeline(l+_),t.previousNode=s}visitQuery(s,t){const o=t.currentTimeline.currentTime,l=s.options||{},_=l.delay?Fe(l.delay):0;_&&(6===t.previousNode.type||0==o&&t.currentTimeline.getCurrentStyleProperties().length)&&(t.currentTimeline.snapshotCurrentStyles(),t.previousNode=To);let C=o;const R=t.invokeQuery(s.selector,s.originalSelector,s.limit,s.includeSelf,!!l.optional,t.errors);t.currentQueryTotal=R.length;let N=null;R.forEach((V,Q)=>{t.currentQueryIndex=Q;const oe=t.createSubContext(s.options,V);_&&oe.delayNextStep(_),V===t.element&&(N=oe.currentTimeline),kn(this,s.animation,oe),oe.currentTimeline.applyStylesToKeyframe(),C=Math.max(C,oe.currentTimeline.currentTime)}),t.currentQueryIndex=0,t.currentQueryTotal=0,t.transformIntoNewTimeline(C),N&&(t.currentTimeline.mergeTimelineCollectedStyles(N),t.currentTimeline.snapshotCurrentStyles()),t.previousNode=s}visitStagger(s,t){const o=t.parentContext,l=t.currentTimeline,_=s.timings,C=Math.abs(_.duration),R=C*(t.currentQueryTotal-1);let N=C*t.currentQueryIndex;switch(_.duration<0?"reverse":_.easing){case"reverse":N=R-N;break;case"full":N=o.currentStaggerTime}const Q=t.currentTimeline;N&&Q.delayNextStep(N);const oe=Q.currentTime;kn(this,s.animation,t),t.previousNode=s,o.currentStaggerTime=l.currentTime-oe+(l.startTime-o.currentTimeline.startTime)}}const To={};class Ns{constructor(s,t,o,l,_,C,R,N){this._driver=s,this.element=t,this.subInstructions=o,this._enterClassName=l,this._leaveClassName=_,this.errors=C,this.timelines=R,this.parentContext=null,this.currentAnimateTimings=null,this.previousNode=To,this.subContextCount=0,this.options={},this.currentQueryIndex=0,this.currentQueryTotal=0,this.currentStaggerTime=0,this.currentTimeline=N||new hs(this._driver,t,0),R.push(this.currentTimeline)}get params(){return this.options.params}updateOptions(s,t){if(!s)return;const o=s;let l=this.options;null!=o.duration&&(l.duration=Fe(o.duration)),null!=o.delay&&(l.delay=Fe(o.delay));const _=o.params;if(_){let C=l.params;C||(C=this.options.params={}),Object.keys(_).forEach(R=>{(!t||!C.hasOwnProperty(R))&&(C[R]=Qo(_[R],C,this.errors))})}}_copyOptions(){const s={};if(this.options){const t=this.options.params;if(t){const o=s.params={};Object.keys(t).forEach(l=>{o[l]=t[l]})}}return s}createSubContext(s=null,t,o){const l=t||this.element,_=new Ns(this._driver,l,this.subInstructions,this._enterClassName,this._leaveClassName,this.errors,this.timelines,this.currentTimeline.fork(l,o||0));return _.previousNode=this.previousNode,_.currentAnimateTimings=this.currentAnimateTimings,_.options=this._copyOptions(),_.updateOptions(s),_.currentQueryIndex=this.currentQueryIndex,_.currentQueryTotal=this.currentQueryTotal,_.parentContext=this,this.subContextCount++,_}transformIntoNewTimeline(s){return this.previousNode=To,this.currentTimeline=this.currentTimeline.fork(this.element,s),this.timelines.push(this.currentTimeline),this.currentTimeline}appendInstructionToTimeline(s,t,o){const l={duration:null!=t?t:s.duration,delay:this.currentTimeline.currentTime+(null!=o?o:0)+s.delay,easing:""},_=new Oo(this._driver,s.element,s.keyframes,s.preStyleProps,s.postStyleProps,l,s.stretchStartingKeyframe);return this.timelines.push(_),l}incrementTime(s){this.currentTimeline.forwardTime(this.currentTimeline.duration+s)}delayNextStep(s){s>0&&this.currentTimeline.delayNextStep(s)}invokeQuery(s,t,o,l,_,C){let R=[];if(l&&R.push(this.element),s.length>0){s=(s=s.replace(Wa,"."+this._enterClassName)).replace(nl,"."+this._leaveClassName);let V=this._driver.query(this.element,s,1!=o);0!==o&&(V=o<0?V.slice(V.length+o,V.length):V.slice(0,o)),R.push(...V)}return!_&&0==R.length&&C.push(function He(n){return new e.vHH(3014,M)}()),R}}class hs{constructor(s,t,o,l){this._driver=s,this.element=t,this.startTime=o,this._elementTimelineStylesLookup=l,this.duration=0,this._previousKeyframe={},this._currentKeyframe={},this._keyframes=new Map,this._styleSummary={},this._pendingStyles={},this._backFill={},this._currentEmptyStepKeyframe=null,this._elementTimelineStylesLookup||(this._elementTimelineStylesLookup=new Map),this._localTimelineStyles=Object.create(this._backFill,{}),this._globalTimelineStyles=this._elementTimelineStylesLookup.get(t),this._globalTimelineStyles||(this._globalTimelineStyles=this._localTimelineStyles,this._elementTimelineStylesLookup.set(t,this._localTimelineStyles)),this._loadKeyframe()}containsAnimation(){switch(this._keyframes.size){case 0:return!1;case 1:return this.getCurrentStyleProperties().length>0;default:return!0}}getCurrentStyleProperties(){return Object.keys(this._currentKeyframe)}get currentTime(){return this.startTime+this.duration}delayNextStep(s){const t=1==this._keyframes.size&&Object.keys(this._pendingStyles).length;this.duration||t?(this.forwardTime(this.currentTime+s),t&&this.snapshotCurrentStyles()):this.startTime+=s}fork(s,t){return this.applyStylesToKeyframe(),new hs(this._driver,s,t||this.currentTime,this._elementTimelineStylesLookup)}_loadKeyframe(){this._currentKeyframe&&(this._previousKeyframe=this._currentKeyframe),this._currentKeyframe=this._keyframes.get(this.duration),this._currentKeyframe||(this._currentKeyframe=Object.create(this._backFill,{}),this._keyframes.set(this.duration,this._currentKeyframe))}forwardFrame(){this.duration+=1,this._loadKeyframe()}forwardTime(s){this.applyStylesToKeyframe(),this.duration=s,this._loadKeyframe()}_updateStyle(s,t){this._localTimelineStyles[s]=t,this._globalTimelineStyles[s]=t,this._styleSummary[s]={time:this.currentTime,value:t}}allowOnlyTimelineStyles(){return this._currentEmptyStepKeyframe!==this._currentKeyframe}applyEmptyStep(s){s&&(this._previousKeyframe.easing=s),Object.keys(this._globalTimelineStyles).forEach(t=>{this._backFill[t]=this._globalTimelineStyles[t]||S.l3,this._currentKeyframe[t]=S.l3}),this._currentEmptyStepKeyframe=this._currentKeyframe}setStyles(s,t,o,l){t&&(this._previousKeyframe.easing=t);const _=l&&l.params||{},C=function Ki(n,s){const t={};let o;return n.forEach(l=>{"*"===l?(o=o||Object.keys(s),o.forEach(_=>{t[_]=S.l3})):$t(l,!1,t)}),t}(s,this._globalTimelineStyles);Object.keys(C).forEach(R=>{const N=Qo(C[R],_,o);this._pendingStyles[R]=N,this._localTimelineStyles.hasOwnProperty(R)||(this._backFill[R]=this._globalTimelineStyles.hasOwnProperty(R)?this._globalTimelineStyles[R]:S.l3),this._updateStyle(R,N)})}applyStylesToKeyframe(){const s=this._pendingStyles,t=Object.keys(s);0!=t.length&&(this._pendingStyles={},t.forEach(o=>{this._currentKeyframe[o]=s[o]}),Object.keys(this._localTimelineStyles).forEach(o=>{this._currentKeyframe.hasOwnProperty(o)||(this._currentKeyframe[o]=this._localTimelineStyles[o])}))}snapshotCurrentStyles(){Object.keys(this._localTimelineStyles).forEach(s=>{const t=this._localTimelineStyles[s];this._pendingStyles[s]=t,this._updateStyle(s,t)})}getFinalKeyframe(){return this._keyframes.get(this.duration)}get properties(){const s=[];for(let t in this._currentKeyframe)s.push(t);return s}mergeTimelineCollectedStyles(s){Object.keys(s._styleSummary).forEach(t=>{const o=this._styleSummary[t],l=s._styleSummary[t];(!o||l.time>o.time)&&this._updateStyle(t,l.value)})}buildKeyframes(){this.applyStylesToKeyframe();const s=new Set,t=new Set,o=1===this._keyframes.size&&0===this.duration;let l=[];this._keyframes.forEach((R,N)=>{const V=$t(R,!0);Object.keys(V).forEach(Q=>{const oe=V[Q];oe==S.k1?s.add(Q):oe==S.l3&&t.add(Q)}),o||(V.offset=N/this.duration),l.push(V)});const _=s.size?lo(s.values()):[],C=t.size?lo(t.values()):[];if(o){const R=l[0],N=Dn(R);R.offset=0,N.offset=1,l=[R,N]}return Co(this.element,l,_,C,this.duration,this.startTime,this.easing,!1)}}class Oo extends hs{constructor(s,t,o,l,_,C,R=!1){super(s,t,C.delay),this.keyframes=o,this.preStyleProps=l,this.postStyleProps=_,this._stretchStartingKeyframe=R,this.timings={duration:C.duration,delay:C.delay,easing:C.easing}}containsAnimation(){return this.keyframes.length>1}buildKeyframes(){let s=this.keyframes,{delay:t,duration:o,easing:l}=this.timings;if(this._stretchStartingKeyframe&&t){const _=[],C=o+t,R=t/C,N=$t(s[0],!1);N.offset=0,_.push(N);const V=$t(s[0],!1);V.offset=kr(R),_.push(V);const Q=s.length-1;for(let oe=1;oe<=Q;oe++){let le=$t(s[oe],!1);le.offset=kr((t+le.offset*o)/C),_.push(le)}o=C,t=0,l="",s=_}return Co(this.element,s,this.preStyleProps,this.postStyleProps,o,t,l,!0)}}function kr(n,s=3){const t=Math.pow(10,s-1);return Math.round(n*t)/t}class pn{}class Ue extends pn{normalizePropertyName(s,t){return ko(s)}normalizeStyleValue(s,t,o,l){let _="";const C=o.toString().trim();if(jt[t]&&0!==o&&"0"!==o)if("number"==typeof o)_="px";else{const R=o.match(/^[+-]?[\d\.]+([a-z]*)$/);R&&0==R[1].length&&l.push(function re(n,s){return new e.vHH(3005,M)}())}return C+_}}const jt=(()=>function hn(n){const s={};return n.forEach(t=>s[t]=!0),s}("width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective".split(",")))();function ii(n,s,t,o,l,_,C,R,N,V,Q,oe,le){return{type:0,element:n,triggerName:s,isRemovalTransition:l,fromState:t,fromStyles:_,toState:o,toStyles:C,timelines:R,queriedElements:N,preStyleProps:V,postStyleProps:Q,totalTime:oe,errors:le}}const Oi={};class ki{constructor(s,t,o){this._triggerName=s,this.ast=t,this._stateStyles=o}match(s,t,o,l){return function _s(n,s,t,o,l){return n.some(_=>_(s,t,o,l))}(this.ast.matchers,s,t,o,l)}buildStyles(s,t,o){const l=this._stateStyles["*"],_=this._stateStyles[s],C=l?l.buildStyles(t,o):{};return _?_.buildStyles(t,o):C}build(s,t,o,l,_,C,R,N,V,Q){const oe=[],le=this.ast.options&&this.ast.options.params||Oi,ye=this.buildStyles(o,R&&R.params||Oi,oe),$e=N&&N.params||Oi,Ie=this.buildStyles(l,$e,oe),ke=new Set,we=new Map,G=new Map,Dt="void"===l,bt={params:Object.assign(Object.assign({},le),$e)},Bt=Q?[]:js(s,t,this.ast.animation,_,C,ye,Ie,bt,V,oe);let Jt=0;if(Bt.forEach(zt=>{Jt=Math.max(zt.duration+zt.delay,Jt)}),oe.length)return ii(t,this._triggerName,o,l,Dt,ye,Ie,[],[],we,G,Jt,oe);Bt.forEach(zt=>{const xn=zt.element,Nn=ei(we,xn,{});zt.preStyleProps.forEach(Hr=>Nn[Hr]=!0);const zr=ei(G,xn,{});zt.postStyleProps.forEach(Hr=>zr[Hr]=!0),xn!==t&&ke.add(xn)});const Mn=lo(ke.values());return ii(t,this._triggerName,o,l,Dt,ye,Ie,Bt,Mn,we,G,Jt)}}class Vo{constructor(s,t,o){this.styles=s,this.defaultParams=t,this.normalizer=o}buildStyles(s,t){const o={},l=Dn(this.defaultParams);return Object.keys(s).forEach(_=>{const C=s[_];null!=C&&(l[_]=C)}),this.styles.styles.forEach(_=>{if("string"!=typeof _){const C=_;Object.keys(C).forEach(R=>{let N=C[R];N.length>1&&(N=Qo(N,l,t));const V=this.normalizer.normalizePropertyName(R,t);N=this.normalizer.normalizeStyleValue(R,V,N,t),o[V]=N})}}),o}}class Ks{constructor(s,t,o){this.name=s,this.ast=t,this._normalizer=o,this.transitionFactories=[],this.states={},t.states.forEach(l=>{this.states[l.name]=new Vo(l.style,l.options&&l.options.params||{},o)}),sl(this.states,"true","1"),sl(this.states,"false","0"),t.transitions.forEach(l=>{this.transitionFactories.push(new ki(s,l,this.states))}),this.fallbackTransition=function hl(n,s,t){return new ki(n,{type:1,animation:{type:2,steps:[],options:null},matchers:[(C,R)=>!0],options:null,queryCount:0,depCount:0},s)}(s,this.states)}get containsQueries(){return this.ast.queryCount>0}matchTransition(s,t,o,l){return this.transitionFactories.find(C=>C.match(s,t,o,l))||null}matchStyles(s,t,o){return this.fallbackTransition.buildStyles(s,t,o)}}function sl(n,s,t){n.hasOwnProperty(s)?n.hasOwnProperty(t)||(n[t]=n[s]):n.hasOwnProperty(t)&&(n[s]=n[t])}const Jl=new yl;class Qu{constructor(s,t,o){this.bodyNode=s,this._driver=t,this._normalizer=o,this._animations={},this._playersById={},this.players=[]}register(s,t){const o=[],_=go(this._driver,t,o,[]);if(o.length)throw function Nt(n){return new e.vHH(3503,M)}();this._animations[s]=_}_buildPlayer(s,t,o){const l=s.element,_=Ur(0,this._normalizer,0,s.keyframes,t,o);return this._driver.animate(l,_,s.duration,s.delay,s.easing,[],!0)}create(s,t,o={}){const l=[],_=this._animations[s];let C;const R=new Map;if(_?(C=js(this._driver,t,_,Le,Re,{},{},o,Jl,l),C.forEach(Q=>{const oe=ei(R,Q.element,{});Q.postStyleProps.forEach(le=>oe[le]=null)})):(l.push(function Yt(){return new e.vHH(3300,M)}()),C=[]),l.length)throw function dn(n){return new e.vHH(3504,M)}();R.forEach((Q,oe)=>{Object.keys(Q).forEach(le=>{Q[le]=this._driver.computeStyle(oe,le,S.l3)})});const V=Br(C.map(Q=>{const oe=R.get(Q.element);return this._buildPlayer(Q,{},oe)}));return this._playersById[s]=V,V.onDestroy(()=>this.destroy(s)),this.players.push(V),V}destroy(s){const t=this._getPlayer(s);t.destroy(),delete this._playersById[s];const o=this.players.indexOf(t);o>=0&&this.players.splice(o,1)}_getPlayer(s){const t=this._playersById[s];if(!t)throw function rn(n){return new e.vHH(3301,M)}();return t}listen(s,t,o,l){const _=_r(t,"","","");return Hn(this._getPlayer(s),o,_,l),()=>{}}command(s,t,o,l){if("register"==o)return void this.register(s,l[0]);if("create"==o)return void this.create(s,t,l[0]||{});const _=this._getPlayer(s);switch(o){case"play":_.play();break;case"pause":_.pause();break;case"reset":_.reset();break;case"restart":_.restart();break;case"finish":_.finish();break;case"init":_.init();break;case"setPosition":_.setPosition(parseFloat(l[0]));break;case"destroy":this.destroy(s)}}}const _c="ng-animate-queued",mc="ng-animate-disabled",Mc=[],ru={namespaceId:"",setForRemoval:!1,setForMove:!1,hasAnimation:!1,removedBeforeQueried:!1},Ja={namespaceId:"",setForMove:!1,setForRemoval:!1,hasAnimation:!1,removedBeforeQueried:!0},Ol="__ng_removed";class Bl{constructor(s,t=""){this.namespaceId=t;const o=s&&s.hasOwnProperty("value");if(this.value=function oi(n){return null!=n?n:null}(o?s.value:s),o){const _=Dn(s);delete _.value,this.options=_}else this.options={};this.options.params||(this.options.params={})}get params(){return this.options.params}absorbOptions(s){const t=s.params;if(t){const o=this.options.params;Object.keys(t).forEach(l=>{null==o[l]&&(o[l]=t[l])})}}}const Ya="void",rt=new Bl(Ya);class qt{constructor(s,t,o){this.id=s,this.hostElement=t,this._engine=o,this.players=[],this._triggers={},this._queue=[],this._elementListeners=new Map,this._hostClassName="ng-tns-"+s,Fo(t,this._hostClassName)}listen(s,t,o,l){if(!this._triggers.hasOwnProperty(t))throw function vt(n,s){return new e.vHH(3302,M)}();if(null==o||0==o.length)throw function xt(n){return new e.vHH(3303,M)}();if(!function as(n){return"start"==n||"done"==n}(o))throw function Ct(n,s){return new e.vHH(3400,M)}();const _=ei(this._elementListeners,s,[]),C={name:t,phase:o,callback:l};_.push(C);const R=ei(this._engine.statesByElement,s,{});return R.hasOwnProperty(t)||(Fo(s,Se),Fo(s,Se+"-"+t),R[t]=rt),()=>{this._engine.afterFlush(()=>{const N=_.indexOf(C);N>=0&&_.splice(N,1),this._triggers[t]||delete R[t]})}}register(s,t){return!this._triggers[s]&&(this._triggers[s]=t,!0)}_getTrigger(s){const t=this._triggers[s];if(!t)throw function Gt(n){return new e.vHH(3401,M)}();return t}trigger(s,t,o,l=!0){const _=this._getTrigger(t),C=new Kt(this.id,t,s);let R=this._engine.statesByElement.get(s);R||(Fo(s,Se),Fo(s,Se+"-"+t),this._engine.statesByElement.set(s,R={}));let N=R[t];const V=new Bl(o,this.id);if(!(o&&o.hasOwnProperty("value"))&&N&&V.absorbOptions(N.options),R[t]=V,N||(N=rt),V.value!==Ya&&N.value===V.value){if(!function ot(n,s){const t=Object.keys(n),o=Object.keys(s);if(t.length!=o.length)return!1;for(let l=0;l<t.length;l++){const _=t[l];if(!s.hasOwnProperty(_)||n[_]!==s[_])return!1}return!0}(N.params,V.params)){const $e=[],Ie=_.matchStyles(N.value,N.params,$e),ke=_.matchStyles(V.value,V.params,$e);$e.length?this._engine.reportError($e):this._engine.afterFlush(()=>{yn(s,Ie),Vt(s,ke)})}return}const le=ei(this._engine.playersByElement,s,[]);le.forEach($e=>{$e.namespaceId==this.id&&$e.triggerName==t&&$e.queued&&$e.destroy()});let _e=_.matchTransition(N.value,V.value,s,V.params),ye=!1;if(!_e){if(!l)return;_e=_.fallbackTransition,ye=!0}return this._engine.totalQueuedPlayers++,this._queue.push({element:s,triggerName:t,transition:_e,fromState:N,toState:V,player:C,isFallbackTransition:ye}),ye||(Fo(s,_c),C.onStart(()=>{Ka(s,_c)})),C.onDone(()=>{let $e=this.players.indexOf(C);$e>=0&&this.players.splice($e,1);const Ie=this._engine.playersByElement.get(s);if(Ie){let ke=Ie.indexOf(C);ke>=0&&Ie.splice(ke,1)}}),this.players.push(C),le.push(C),C}deregister(s){delete this._triggers[s],this._engine.statesByElement.forEach((t,o)=>{delete t[s]}),this._elementListeners.forEach((t,o)=>{this._elementListeners.set(o,t.filter(l=>l.name!=s))})}clearElementCache(s){this._engine.statesByElement.delete(s),this._elementListeners.delete(s);const t=this._engine.playersByElement.get(s);t&&(t.forEach(o=>o.destroy()),this._engine.playersByElement.delete(s))}_signalRemovalForInnerTriggers(s,t){const o=this._engine.driver.query(s,dt,!0);o.forEach(l=>{if(l[Ol])return;const _=this._engine.fetchNamespacesByElement(l);_.size?_.forEach(C=>C.triggerLeaveAnimation(l,t,!1,!0)):this.clearElementCache(l)}),this._engine.afterFlushAnimationsDone(()=>o.forEach(l=>this.clearElementCache(l)))}triggerLeaveAnimation(s,t,o,l){const _=this._engine.statesByElement.get(s),C=new Map;if(_){const R=[];if(Object.keys(_).forEach(N=>{if(C.set(N,_[N].value),this._triggers[N]){const V=this.trigger(s,N,Ya,l);V&&R.push(V)}}),R.length)return this._engine.markElementAsRemoved(this.id,s,!0,t,C),o&&Br(R).onDone(()=>this._engine.processLeaveNode(s)),!0}return!1}prepareLeaveAnimationListeners(s){const t=this._elementListeners.get(s),o=this._engine.statesByElement.get(s);if(t&&o){const l=new Set;t.forEach(_=>{const C=_.name;if(l.has(C))return;l.add(C);const N=this._triggers[C].fallbackTransition,V=o[C]||rt,Q=new Bl(Ya),oe=new Kt(this.id,C,s);this._engine.totalQueuedPlayers++,this._queue.push({element:s,triggerName:C,transition:N,fromState:V,toState:Q,player:oe,isFallbackTransition:!0})})}}removeNode(s,t){const o=this._engine;if(s.childElementCount&&this._signalRemovalForInnerTriggers(s,t),this.triggerLeaveAnimation(s,t,!0))return;let l=!1;if(o.totalAnimations){const _=o.players.length?o.playersByQueriedElement.get(s):[];if(_&&_.length)l=!0;else{let C=s;for(;C=C.parentNode;)if(o.statesByElement.get(C)){l=!0;break}}}if(this.prepareLeaveAnimationListeners(s),l)o.markElementAsRemoved(this.id,s,!1,t);else{const _=s[Ol];(!_||_===ru)&&(o.afterFlush(()=>this.clearElementCache(s)),o.destroyInnerAnimations(s),o._onRemovalComplete(s,t))}}insertNode(s,t){Fo(s,this._hostClassName)}drainQueuedTransitions(s){const t=[];return this._queue.forEach(o=>{const l=o.player;if(l.destroyed)return;const _=o.element,C=this._elementListeners.get(_);C&&C.forEach(R=>{if(R.name==o.triggerName){const N=_r(_,o.triggerName,o.fromState.value,o.toState.value);N._data=s,Hn(o.player,R.phase,N,R.callback)}}),l.markedForDestroy?this._engine.afterFlush(()=>{l.destroy()}):t.push(o)}),this._queue=[],t.sort((o,l)=>{const _=o.transition.ast.depCount,C=l.transition.ast.depCount;return 0==_||0==C?_-C:this._engine.driver.containsElement(o.element,l.element)?1:-1})}destroy(s){this.players.forEach(t=>t.destroy()),this._signalRemovalForInnerTriggers(this.hostElement,s)}elementContainsData(s){let t=!1;return this._elementListeners.has(s)&&(t=!0),t=!!this._queue.find(o=>o.element===s)||t,t}}class pt{constructor(s,t,o){this.bodyNode=s,this.driver=t,this._normalizer=o,this.players=[],this.newHostElements=new Map,this.playersByElement=new Map,this.playersByQueriedElement=new Map,this.statesByElement=new Map,this.disabledNodes=new Set,this.totalAnimations=0,this.totalQueuedPlayers=0,this._namespaceLookup={},this._namespaceList=[],this._flushFns=[],this._whenQuietFns=[],this.namespacesByHostElement=new Map,this.collectedEnterElements=[],this.collectedLeaveElements=[],this.onRemovalComplete=(l,_)=>{}}_onRemovalComplete(s,t){this.onRemovalComplete(s,t)}get queuedPlayers(){const s=[];return this._namespaceList.forEach(t=>{t.players.forEach(o=>{o.queued&&s.push(o)})}),s}createNamespace(s,t){const o=new qt(s,t,this);return this.bodyNode&&this.driver.containsElement(this.bodyNode,t)?this._balanceNamespaceList(o,t):(this.newHostElements.set(t,o),this.collectEnterElement(t)),this._namespaceLookup[s]=o}_balanceNamespaceList(s,t){const o=this._namespaceList,l=this.namespacesByHostElement,_=o.length-1;if(_>=0){let C=!1;if(void 0!==this.driver.getParentElement){let R=this.driver.getParentElement(t);for(;R;){const N=l.get(R);if(N){const V=o.indexOf(N);o.splice(V+1,0,s),C=!0;break}R=this.driver.getParentElement(R)}}else for(let R=_;R>=0;R--)if(this.driver.containsElement(o[R].hostElement,t)){o.splice(R+1,0,s),C=!0;break}C||o.unshift(s)}else o.push(s);return l.set(t,s),s}register(s,t){let o=this._namespaceLookup[s];return o||(o=this.createNamespace(s,t)),o}registerTrigger(s,t,o){let l=this._namespaceLookup[s];l&&l.register(t,o)&&this.totalAnimations++}destroy(s,t){if(!s)return;const o=this._fetchNamespace(s);this.afterFlush(()=>{this.namespacesByHostElement.delete(o.hostElement),delete this._namespaceLookup[s];const l=this._namespaceList.indexOf(o);l>=0&&this._namespaceList.splice(l,1)}),this.afterFlushAnimationsDone(()=>o.destroy(t))}_fetchNamespace(s){return this._namespaceLookup[s]}fetchNamespacesByElement(s){const t=new Set,o=this.statesByElement.get(s);if(o){const l=Object.keys(o);for(let _=0;_<l.length;_++){const C=o[l[_]].namespaceId;if(C){const R=this._fetchNamespace(C);R&&t.add(R)}}}return t}trigger(s,t,o,l){if(wi(t)){const _=this._fetchNamespace(s);if(_)return _.trigger(t,o,l),!0}return!1}insertNode(s,t,o,l){if(!wi(t))return;const _=t[Ol];if(_&&_.setForRemoval){_.setForRemoval=!1,_.setForMove=!0;const C=this.collectedLeaveElements.indexOf(t);C>=0&&this.collectedLeaveElements.splice(C,1)}if(s){const C=this._fetchNamespace(s);C&&C.insertNode(t,o)}l&&this.collectEnterElement(t)}collectEnterElement(s){this.collectedEnterElements.push(s)}markElementAsDisabled(s,t){t?this.disabledNodes.has(s)||(this.disabledNodes.add(s),Fo(s,mc)):this.disabledNodes.has(s)&&(this.disabledNodes.delete(s),Ka(s,mc))}removeNode(s,t,o,l){if(wi(t)){const _=s?this._fetchNamespace(s):null;if(_?_.removeNode(t,l):this.markElementAsRemoved(s,t,!1,l),o){const C=this.namespacesByHostElement.get(t);C&&C.id!==s&&C.removeNode(t,l)}}else this._onRemovalComplete(t,l)}markElementAsRemoved(s,t,o,l,_){this.collectedLeaveElements.push(t),t[Ol]={namespaceId:s,setForRemoval:l,hasAnimation:o,removedBeforeQueried:!1,previousTriggersValues:_}}listen(s,t,o,l,_){return wi(t)?this._fetchNamespace(s).listen(t,o,l,_):()=>{}}_buildInstruction(s,t,o,l,_){return s.transition.build(this.driver,s.element,s.fromState.value,s.toState.value,o,l,s.fromState.options,s.toState.options,t,_)}destroyInnerAnimations(s){let t=this.driver.query(s,dt,!0);t.forEach(o=>this.destroyActiveAnimationsForElement(o)),0!=this.playersByQueriedElement.size&&(t=this.driver.query(s,nn,!0),t.forEach(o=>this.finishActiveQueriedAnimationOnElement(o)))}destroyActiveAnimationsForElement(s){const t=this.playersByElement.get(s);t&&t.forEach(o=>{o.queued?o.markedForDestroy=!0:o.destroy()})}finishActiveQueriedAnimationOnElement(s){const t=this.playersByQueriedElement.get(s);t&&t.forEach(o=>o.finish())}whenRenderingDone(){return new Promise(s=>{if(this.players.length)return Br(this.players).onDone(()=>s());s()})}processLeaveNode(s){var t;const o=s[Ol];if(o&&o.setForRemoval){if(s[Ol]=ru,o.namespaceId){this.destroyInnerAnimations(s);const l=this._fetchNamespace(o.namespaceId);l&&l.clearElementCache(s)}this._onRemovalComplete(s,o.setForRemoval)}(null===(t=s.classList)||void 0===t?void 0:t.contains(mc))&&this.markElementAsDisabled(s,!1),this.driver.query(s,".ng-animate-disabled",!0).forEach(l=>{this.markElementAsDisabled(l,!1)})}flush(s=-1){let t=[];if(this.newHostElements.size&&(this.newHostElements.forEach((o,l)=>this._balanceNamespaceList(o,l)),this.newHostElements.clear()),this.totalAnimations&&this.collectedEnterElements.length)for(let o=0;o<this.collectedEnterElements.length;o++)Fo(this.collectedEnterElements[o],"ng-star-inserted");if(this._namespaceList.length&&(this.totalQueuedPlayers||this.collectedLeaveElements.length)){const o=[];try{t=this._flushAnimations(o,s)}finally{for(let l=0;l<o.length;l++)o[l]()}}else for(let o=0;o<this.collectedLeaveElements.length;o++)this.processLeaveNode(this.collectedLeaveElements[o]);if(this.totalQueuedPlayers=0,this.collectedEnterElements.length=0,this.collectedLeaveElements.length=0,this._flushFns.forEach(o=>o()),this._flushFns=[],this._whenQuietFns.length){const o=this._whenQuietFns;this._whenQuietFns=[],t.length?Br(t).onDone(()=>{o.forEach(l=>l())}):o.forEach(l=>l())}}reportError(s){throw function Fn(n){return new e.vHH(3402,M)}()}_flushAnimations(s,t){const o=new yl,l=[],_=new Map,C=[],R=new Map,N=new Map,V=new Map,Q=new Set;this.disabledNodes.forEach(On=>{Q.add(On);const Jn=this.driver.query(On,".ng-animate-queued",!0);for(let Qn=0;Qn<Jn.length;Qn++)Q.add(Jn[Qn])});const oe=this.bodyNode,le=Array.from(this.statesByElement.keys()),_e=ws(le,this.collectedEnterElements),ye=new Map;let $e=0;_e.forEach((On,Jn)=>{const Qn=Le+$e++;ye.set(Jn,Qn),On.forEach(ur=>Fo(ur,Qn))});const Ie=[],ke=new Set,we=new Set;for(let On=0;On<this.collectedLeaveElements.length;On++){const Jn=this.collectedLeaveElements[On],Qn=Jn[Ol];Qn&&Qn.setForRemoval&&(Ie.push(Jn),ke.add(Jn),Qn.hasAnimation?this.driver.query(Jn,".ng-star-inserted",!0).forEach(ur=>ke.add(ur)):we.add(Jn))}const G=new Map,Dt=ws(le,Array.from(ke));Dt.forEach((On,Jn)=>{const Qn=Re+$e++;G.set(Jn,Qn),On.forEach(ur=>Fo(ur,Qn))}),s.push(()=>{_e.forEach((On,Jn)=>{const Qn=ye.get(Jn);On.forEach(ur=>Ka(ur,Qn))}),Dt.forEach((On,Jn)=>{const Qn=G.get(Jn);On.forEach(ur=>Ka(ur,Qn))}),Ie.forEach(On=>{this.processLeaveNode(On)})});const bt=[],Bt=[];for(let On=this._namespaceList.length-1;On>=0;On--)this._namespaceList[On].drainQueuedTransitions(t).forEach(Qn=>{const ur=Qn.player,In=Qn.element;if(bt.push(ur),this.collectedEnterElements.length){const bn=In[Ol];if(bn&&bn.setForMove){if(bn.previousTriggersValues&&bn.previousTriggersValues.has(Qn.triggerName)){const Xr=bn.previousTriggersValues.get(Qn.triggerName),Ni=this.statesByElement.get(Qn.element);Ni&&Ni[Qn.triggerName]&&(Ni[Qn.triggerName].value=Xr)}return void ur.destroy()}}const Yr=!oe||!this.driver.containsElement(oe,In),Qi=G.get(In),Di=ye.get(In),ji=this._buildInstruction(Qn,o,Di,Qi,Yr);if(ji.errors&&ji.errors.length)return void Bt.push(ji);if(Yr)return ur.onStart(()=>yn(In,ji.fromStyles)),ur.onDestroy(()=>Vt(In,ji.toStyles)),void l.push(ur);if(Qn.isFallbackTransition)return ur.onStart(()=>yn(In,ji.fromStyles)),ur.onDestroy(()=>Vt(In,ji.toStyles)),void l.push(ur);const Wr=[];ji.timelines.forEach(bn=>{bn.stretchStartingKeyframe=!0,this.disabledNodes.has(bn.element)||Wr.push(bn)}),ji.timelines=Wr,o.append(In,ji.timelines),C.push({instruction:ji,player:ur,element:In}),ji.queriedElements.forEach(bn=>ei(R,bn,[]).push(ur)),ji.preStyleProps.forEach((bn,Xr)=>{const Ni=Object.keys(bn);if(Ni.length){let Xi=N.get(Xr);Xi||N.set(Xr,Xi=new Set),Ni.forEach(Bo=>Xi.add(Bo))}}),ji.postStyleProps.forEach((bn,Xr)=>{const Ni=Object.keys(bn);let Xi=V.get(Xr);Xi||V.set(Xr,Xi=new Set),Ni.forEach(Bo=>Xi.add(Bo))})});if(Bt.length){const On=[];Bt.forEach(Jn=>{On.push(function mi(n,s){return new e.vHH(3505,M)}())}),bt.forEach(Jn=>Jn.destroy()),this.reportError(On)}const Jt=new Map,Mn=new Map;C.forEach(On=>{const Jn=On.element;o.has(Jn)&&(Mn.set(Jn,Jn),this._beforeAnimationBuild(On.player.namespaceId,On.instruction,Jt))}),l.forEach(On=>{const Jn=On.element;this._getPreviousPlayers(Jn,!1,On.namespaceId,On.triggerName,null).forEach(ur=>{ei(Jt,Jn,[]).push(ur),ur.destroy()})});const zt=Ie.filter(On=>je(On,N,V)),xn=new Map;Os(xn,this.driver,we,V,S.l3).forEach(On=>{je(On,N,V)&&zt.push(On)});const zr=new Map;_e.forEach((On,Jn)=>{Os(zr,this.driver,new Set(On),N,S.k1)}),zt.forEach(On=>{const Jn=xn.get(On),Qn=zr.get(On);xn.set(On,Object.assign(Object.assign({},Jn),Qn))});const Hr=[],Vr=[],qr={};C.forEach(On=>{const{element:Jn,player:Qn,instruction:ur}=On;if(o.has(Jn)){if(Q.has(Jn))return Qn.onDestroy(()=>Vt(Jn,ur.toStyles)),Qn.disabled=!0,Qn.overrideTotalTime(ur.totalTime),void l.push(Qn);let In=qr;if(Mn.size>1){let Qi=Jn;const Di=[];for(;Qi=Qi.parentNode;){const ji=Mn.get(Qi);if(ji){In=ji;break}Di.push(Qi)}Di.forEach(ji=>Mn.set(ji,In))}const Yr=this._buildAnimation(Qn.namespaceId,ur,Jt,_,zr,xn);if(Qn.setRealPlayer(Yr),In===qr)Hr.push(Qn);else{const Qi=this.playersByElement.get(In);Qi&&Qi.length&&(Qn.parentPlayer=Br(Qi)),l.push(Qn)}}else yn(Jn,ur.fromStyles),Qn.onDestroy(()=>Vt(Jn,ur.toStyles)),Vr.push(Qn),Q.has(Jn)&&l.push(Qn)}),Vr.forEach(On=>{const Jn=_.get(On.element);if(Jn&&Jn.length){const Qn=Br(Jn);On.setRealPlayer(Qn)}}),l.forEach(On=>{On.parentPlayer?On.syncPlayerEvents(On.parentPlayer):On.destroy()});for(let On=0;On<Ie.length;On++){const Jn=Ie[On],Qn=Jn[Ol];if(Ka(Jn,Re),Qn&&Qn.hasAnimation)continue;let ur=[];if(R.size){let Yr=R.get(Jn);Yr&&Yr.length&&ur.push(...Yr);let Qi=this.driver.query(Jn,nn,!0);for(let Di=0;Di<Qi.length;Di++){let ji=R.get(Qi[Di]);ji&&ji.length&&ur.push(...ji)}}const In=ur.filter(Yr=>!Yr.destroyed);In.length?al(this,Jn,In):this.processLeaveNode(Jn)}return Ie.length=0,Hr.forEach(On=>{this.players.push(On),On.onDone(()=>{On.destroy();const Jn=this.players.indexOf(On);this.players.splice(Jn,1)}),On.play()}),Hr}elementContainsData(s,t){let o=!1;const l=t[Ol];return l&&l.setForRemoval&&(o=!0),this.playersByElement.has(t)&&(o=!0),this.playersByQueriedElement.has(t)&&(o=!0),this.statesByElement.has(t)&&(o=!0),this._fetchNamespace(s).elementContainsData(t)||o}afterFlush(s){this._flushFns.push(s)}afterFlushAnimationsDone(s){this._whenQuietFns.push(s)}_getPreviousPlayers(s,t,o,l,_){let C=[];if(t){const R=this.playersByQueriedElement.get(s);R&&(C=R)}else{const R=this.playersByElement.get(s);if(R){const N=!_||_==Ya;R.forEach(V=>{V.queued||!N&&V.triggerName!=l||C.push(V)})}}return(o||l)&&(C=C.filter(R=>!(o&&o!=R.namespaceId||l&&l!=R.triggerName))),C}_beforeAnimationBuild(s,t,o){const _=t.element,C=t.isRemovalTransition?void 0:s,R=t.isRemovalTransition?void 0:t.triggerName;for(const N of t.timelines){const V=N.element,Q=V!==_,oe=ei(o,V,[]);this._getPreviousPlayers(V,Q,C,R,t.toState).forEach(_e=>{const ye=_e.getRealPlayer();ye.beforeDestroy&&ye.beforeDestroy(),_e.destroy(),oe.push(_e)})}yn(_,t.fromStyles)}_buildAnimation(s,t,o,l,_,C){const R=t.triggerName,N=t.element,V=[],Q=new Set,oe=new Set,le=t.timelines.map(ye=>{const $e=ye.element;Q.add($e);const Ie=$e[Ol];if(Ie&&Ie.removedBeforeQueried)return new S.ZN(ye.duration,ye.delay);const ke=$e!==N,we=function Bs(n){const s=[];return mt(n,s),s}((o.get($e)||Mc).map(Jt=>Jt.getRealPlayer())).filter(Jt=>!!Jt.element&&Jt.element===$e),G=_.get($e),Dt=C.get($e),bt=Ur(0,this._normalizer,0,ye.keyframes,G,Dt),Bt=this._buildPlayer(ye,bt,we);if(ye.subTimeline&&l&&oe.add($e),ke){const Jt=new Kt(s,R,$e);Jt.setRealPlayer(Bt),V.push(Jt)}return Bt});V.forEach(ye=>{ei(this.playersByQueriedElement,ye.element,[]).push(ye),ye.onDone(()=>function Kn(n,s,t){let o;if(n instanceof Map){if(o=n.get(s),o){if(o.length){const l=o.indexOf(t);o.splice(l,1)}0==o.length&&n.delete(s)}}else if(o=n[s],o){if(o.length){const l=o.indexOf(t);o.splice(l,1)}0==o.length&&delete n[s]}return o}(this.playersByQueriedElement,ye.element,ye))}),Q.forEach(ye=>Fo(ye,st));const _e=Br(le);return _e.onDestroy(()=>{Q.forEach(ye=>Ka(ye,st)),Vt(N,t.toStyles)}),oe.forEach(ye=>{ei(l,ye,[]).push(_e)}),_e}_buildPlayer(s,t,o){return t.length>0?this.driver.animate(s.element,t,s.duration,s.delay,s.easing,o):new S.ZN(s.duration,s.delay)}}class Kt{constructor(s,t,o){this.namespaceId=s,this.triggerName=t,this.element=o,this._player=new S.ZN,this._containsRealPlayer=!1,this._queuedCallbacks={},this.destroyed=!1,this.markedForDestroy=!1,this.disabled=!1,this.queued=!0,this.totalTime=0}setRealPlayer(s){this._containsRealPlayer||(this._player=s,Object.keys(this._queuedCallbacks).forEach(t=>{this._queuedCallbacks[t].forEach(o=>Hn(s,t,void 0,o))}),this._queuedCallbacks={},this._containsRealPlayer=!0,this.overrideTotalTime(s.totalTime),this.queued=!1)}getRealPlayer(){return this._player}overrideTotalTime(s){this.totalTime=s}syncPlayerEvents(s){const t=this._player;t.triggerCallback&&s.onStart(()=>t.triggerCallback("start")),s.onDone(()=>this.finish()),s.onDestroy(()=>this.destroy())}_queueEvent(s,t){ei(this._queuedCallbacks,s,[]).push(t)}onDone(s){this.queued&&this._queueEvent("done",s),this._player.onDone(s)}onStart(s){this.queued&&this._queueEvent("start",s),this._player.onStart(s)}onDestroy(s){this.queued&&this._queueEvent("destroy",s),this._player.onDestroy(s)}init(){this._player.init()}hasStarted(){return!this.queued&&this._player.hasStarted()}play(){!this.queued&&this._player.play()}pause(){!this.queued&&this._player.pause()}restart(){!this.queued&&this._player.restart()}finish(){this._player.finish()}destroy(){this.destroyed=!0,this._player.destroy()}reset(){!this.queued&&this._player.reset()}setPosition(s){this.queued||this._player.setPosition(s)}getPosition(){return this.queued?0:this._player.getPosition()}triggerCallback(s){const t=this._player;t.triggerCallback&&t.triggerCallback(s)}}function wi(n){return n&&1===n.nodeType}function Gs(n,s){const t=n.style.display;return n.style.display=null!=s?s:"none",t}function Os(n,s,t,o,l){const _=[];t.forEach(N=>_.push(Gs(N)));const C=[];o.forEach((N,V)=>{const Q={};N.forEach(oe=>{const le=Q[oe]=s.computeStyle(V,oe,l);(!le||0==le.length)&&(V[Ol]=Ja,C.push(V))}),n.set(V,Q)});let R=0;return t.forEach(N=>Gs(N,_[R++])),C}function ws(n,s){const t=new Map;if(n.forEach(R=>t.set(R,[])),0==s.length)return t;const l=new Set(s),_=new Map;function C(R){if(!R)return 1;let N=_.get(R);if(N)return N;const V=R.parentNode;return N=t.has(V)?V:l.has(V)?1:C(V),_.set(R,N),N}return s.forEach(R=>{const N=C(R);1!==N&&t.get(N).push(R)}),t}function Fo(n,s){var t;null===(t=n.classList)||void 0===t||t.add(s)}function Ka(n,s){var t;null===(t=n.classList)||void 0===t||t.remove(s)}function al(n,s,t){Br(t).onDone(()=>n.processLeaveNode(s))}function mt(n,s){for(let t=0;t<n.length;t++){const o=n[t];o instanceof S.ZE?mt(o.players,s):s.push(o)}}function je(n,s,t){const o=t.get(n);if(!o)return!1;let l=s.get(n);return l?o.forEach(_=>l.add(_)):s.set(n,o),t.delete(n),!0}class Xt{constructor(s,t,o){this.bodyNode=s,this._driver=t,this._normalizer=o,this._triggerCache={},this.onRemovalComplete=(l,_)=>{},this._transitionEngine=new pt(s,t,o),this._timelineEngine=new Qu(s,t,o),this._transitionEngine.onRemovalComplete=(l,_)=>this.onRemovalComplete(l,_)}registerTrigger(s,t,o,l,_){const C=s+"-"+l;let R=this._triggerCache[C];if(!R){const N=[],Q=go(this._driver,_,N,[]);if(N.length)throw function We(n,s){return new e.vHH(3404,M)}();R=function Fs(n,s,t){return new Ks(n,s,t)}(l,Q,this._normalizer),this._triggerCache[C]=R}this._transitionEngine.registerTrigger(t,l,R)}register(s,t){this._transitionEngine.register(s,t)}destroy(s,t){this._transitionEngine.destroy(s,t)}onInsert(s,t,o,l){this._transitionEngine.insertNode(s,t,o,l)}onRemove(s,t,o,l){this._transitionEngine.removeNode(s,t,l||!1,o)}disableAnimations(s,t){this._transitionEngine.markElementAsDisabled(s,t)}process(s,t,o,l){if("@"==o.charAt(0)){const[_,C]=bi(o);this._timelineEngine.command(_,t,C,l)}else this._transitionEngine.trigger(s,t,o,l)}listen(s,t,o,l,_){if("@"==o.charAt(0)){const[C,R]=bi(o);return this._timelineEngine.listen(C,t,R,_)}return this._transitionEngine.listen(s,t,o,l,_)}flush(s=-1){this._transitionEngine.flush(s)}get players(){return this._transitionEngine.players.concat(this._timelineEngine.players)}whenRenderingDone(){return this._transitionEngine.whenRenderingDone()}}let Jo=(()=>{class n{constructor(t,o,l){this._element=t,this._startStyles=o,this._endStyles=l,this._state=0;let _=n.initialStylesByElement.get(t);_||n.initialStylesByElement.set(t,_={}),this._initialStyles=_}start(){this._state<1&&(this._startStyles&&Vt(this._element,this._startStyles,this._initialStyles),this._state=1)}finish(){this.start(),this._state<2&&(Vt(this._element,this._initialStyles),this._endStyles&&(Vt(this._element,this._endStyles),this._endStyles=null),this._state=1)}destroy(){this.finish(),this._state<3&&(n.initialStylesByElement.delete(this._element),this._startStyles&&(yn(this._element,this._startStyles),this._endStyles=null),this._endStyles&&(yn(this._element,this._endStyles),this._endStyles=null),Vt(this._element,this._initialStyles),this._state=3)}}return n.initialStylesByElement=new WeakMap,n})();function ja(n){let s=null;const t=Object.keys(n);for(let o=0;o<t.length;o++){const l=t[o];El(l)&&(s=s||{},s[l]=n[l])}return s}function El(n){return"display"===n||"position"===n}class Ku{constructor(s,t,o,l){this.element=s,this.keyframes=t,this.options=o,this._specialStyles=l,this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._initialized=!1,this._finished=!1,this._started=!1,this._destroyed=!1,this.time=0,this.parentPlayer=null,this.currentSnapshot={},this._duration=o.duration,this._delay=o.delay||0,this.time=this._duration+this._delay}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(s=>s()),this._onDoneFns=[])}init(){this._buildPlayer(),this._preparePlayerBeforeStart()}_buildPlayer(){if(this._initialized)return;this._initialized=!0;const s=this.keyframes;this.domPlayer=this._triggerWebAnimation(this.element,s,this.options),this._finalKeyframe=s.length?s[s.length-1]:{},this.domPlayer.addEventListener("finish",()=>this._onFinish())}_preparePlayerBeforeStart(){this._delay?this._resetDomPlayerState():this.domPlayer.pause()}_triggerWebAnimation(s,t,o){return s.animate(t,o)}onStart(s){this._onStartFns.push(s)}onDone(s){this._onDoneFns.push(s)}onDestroy(s){this._onDestroyFns.push(s)}play(){this._buildPlayer(),this.hasStarted()||(this._onStartFns.forEach(s=>s()),this._onStartFns=[],this._started=!0,this._specialStyles&&this._specialStyles.start()),this.domPlayer.play()}pause(){this.init(),this.domPlayer.pause()}finish(){this.init(),this._specialStyles&&this._specialStyles.finish(),this._onFinish(),this.domPlayer.finish()}reset(){this._resetDomPlayerState(),this._destroyed=!1,this._finished=!1,this._started=!1}_resetDomPlayerState(){this.domPlayer&&this.domPlayer.cancel()}restart(){this.reset(),this.play()}hasStarted(){return this._started}destroy(){this._destroyed||(this._destroyed=!0,this._resetDomPlayerState(),this._onFinish(),this._specialStyles&&this._specialStyles.destroy(),this._onDestroyFns.forEach(s=>s()),this._onDestroyFns=[])}setPosition(s){void 0===this.domPlayer&&this.init(),this.domPlayer.currentTime=s*this.time}getPosition(){return this.domPlayer.currentTime/this.time}get totalTime(){return this._delay+this._duration}beforeDestroy(){const s={};if(this.hasStarted()){const t=this._finalKeyframe;Object.keys(t).forEach(o=>{"offset"!=o&&(s[o]=this._finished?t[o]:nr(this.element,o))})}this.currentSnapshot=s}triggerCallback(s){const t="start"==s?this._onStartFns:this._onDoneFns;t.forEach(o=>o()),t.length=0}}class Nc{validateStyleProperty(s){return zn(s)}matchesElement(s,t){return!1}containsElement(s,t){return Gi(s,t)}getParentElement(s){return Er(s)}query(s,t,o){return ui(s,t,o)}computeStyle(s,t,o){return window.getComputedStyle(s)[t]}animate(s,t,o,l,_,C=[]){const N={duration:o,delay:l,fill:0==l?"both":"forwards"};_&&(N.easing=_);const V={},Q=C.filter(le=>le instanceof Ku);(function ir(n,s){return 0===n||0===s})(o,l)&&Q.forEach(le=>{let _e=le.currentSnapshot;Object.keys(_e).forEach(ye=>V[ye]=_e[ye])}),t=function si(n,s,t){const o=Object.keys(t);if(o.length&&s.length){let _=s[0],C=[];if(o.forEach(R=>{_.hasOwnProperty(R)||C.push(R),_[R]=t[R]}),C.length)for(var l=1;l<s.length;l++){let R=s[l];C.forEach(function(N){R[N]=nr(n,N)})}}return s}(s,t=t.map(le=>$t(le,!1)),V);const oe=function Si(n,s){let t=null,o=null;return Array.isArray(s)&&s.length?(t=ja(s[0]),s.length>1&&(o=ja(s[s.length-1]))):s&&(t=ja(s)),t||o?new Jo(n,t,o):null}(s,t);return new Ku(s,t,N,oe)}}let hd=(()=>{class n extends S._j{constructor(t,o){super(),this._nextAnimationId=0,this._renderer=t.createRenderer(o.body,{id:"0",encapsulation:e.ifc.None,styles:[],data:{animation:[]}})}build(t){const o=this._nextAnimationId.toString();this._nextAnimationId++;const l=Array.isArray(t)?(0,S.vP)(t):t;return Fa(this._renderer,null,o,"register",[l]),new Yi(o,this._renderer)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(e.FYo),e.LFG(p.K0))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac}),n})();class Yi extends S.LC{constructor(s,t){super(),this._id=s,this._renderer=t}create(s,t){return new aa(this._id,s,t||{},this._renderer)}}class aa{constructor(s,t,o,l){this.id=s,this.element=t,this._renderer=l,this.parentPlayer=null,this._started=!1,this.totalTime=0,this._command("create",o)}_listen(s,t){return this._renderer.listen(this.element,`@@${this.id}:${s}`,t)}_command(s,...t){return Fa(this._renderer,this.element,this.id,s,t)}onDone(s){this._listen("done",s)}onStart(s){this._listen("start",s)}onDestroy(s){this._listen("destroy",s)}init(){this._command("init")}hasStarted(){return this._started}play(){this._command("play"),this._started=!0}pause(){this._command("pause")}restart(){this._command("restart")}finish(){this._command("finish")}destroy(){this._command("destroy")}reset(){this._command("reset"),this._started=!1}setPosition(s){this._command("setPosition",s)}getPosition(){var s,t;return null!==(t=null===(s=this._renderer.engine.players[+this.id])||void 0===s?void 0:s.getPosition())&&void 0!==t?t:0}}function Fa(n,s,t,o,l){return n.setProperty(s,`@@${t}:${o}`,l)}const qu="@.disabled";let Sl=(()=>{class n{constructor(t,o,l){this.delegate=t,this.engine=o,this._zone=l,this._currentId=0,this._microtaskId=1,this._animationCallbacksBuffer=[],this._rendererCache=new Map,this._cdRecurDepth=0,this.promise=Promise.resolve(0),o.onRemovalComplete=(_,C)=>{const R=null==C?void 0:C.parentNode(_);R&&C.removeChild(R,_)}}createRenderer(t,o){const _=this.delegate.createRenderer(t,o);if(!(t&&o&&o.data&&o.data.animation)){let Q=this._rendererCache.get(_);return Q||(Q=new lu("",_,this.engine),this._rendererCache.set(_,Q)),Q}const C=o.id,R=o.id+"-"+this._currentId;this._currentId++,this.engine.register(R,t);const N=Q=>{Array.isArray(Q)?Q.forEach(N):this.engine.registerTrigger(C,R,t,Q.name,Q)};return o.data.animation.forEach(N),new Eu(this,R,_,this.engine)}begin(){this._cdRecurDepth++,this.delegate.begin&&this.delegate.begin()}_scheduleCountTask(){this.promise.then(()=>{this._microtaskId++})}scheduleListenerCallback(t,o,l){t>=0&&t<this._microtaskId?this._zone.run(()=>o(l)):(0==this._animationCallbacksBuffer.length&&Promise.resolve(null).then(()=>{this._zone.run(()=>{this._animationCallbacksBuffer.forEach(_=>{const[C,R]=_;C(R)}),this._animationCallbacksBuffer=[]})}),this._animationCallbacksBuffer.push([o,l]))}end(){this._cdRecurDepth--,0==this._cdRecurDepth&&this._zone.runOutsideAngular(()=>{this._scheduleCountTask(),this.engine.flush(this._microtaskId)}),this.delegate.end&&this.delegate.end()}whenRenderingDone(){return this.engine.whenRenderingDone()}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(e.FYo),e.LFG(Xt),e.LFG(e.R0b))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac}),n})();class lu{constructor(s,t,o){this.namespaceId=s,this.delegate=t,this.engine=o,this.destroyNode=this.delegate.destroyNode?l=>t.destroyNode(l):null}get data(){return this.delegate.data}destroy(){this.engine.destroy(this.namespaceId,this.delegate),this.delegate.destroy()}createElement(s,t){return this.delegate.createElement(s,t)}createComment(s){return this.delegate.createComment(s)}createText(s){return this.delegate.createText(s)}appendChild(s,t){this.delegate.appendChild(s,t),this.engine.onInsert(this.namespaceId,t,s,!1)}insertBefore(s,t,o,l=!0){this.delegate.insertBefore(s,t,o),this.engine.onInsert(this.namespaceId,t,s,l)}removeChild(s,t,o){this.engine.onRemove(this.namespaceId,t,this.delegate,o)}selectRootElement(s,t){return this.delegate.selectRootElement(s,t)}parentNode(s){return this.delegate.parentNode(s)}nextSibling(s){return this.delegate.nextSibling(s)}setAttribute(s,t,o,l){this.delegate.setAttribute(s,t,o,l)}removeAttribute(s,t,o){this.delegate.removeAttribute(s,t,o)}addClass(s,t){this.delegate.addClass(s,t)}removeClass(s,t){this.delegate.removeClass(s,t)}setStyle(s,t,o,l){this.delegate.setStyle(s,t,o,l)}removeStyle(s,t,o){this.delegate.removeStyle(s,t,o)}setProperty(s,t,o){"@"==t.charAt(0)&&t==qu?this.disableAnimations(s,!!o):this.delegate.setProperty(s,t,o)}setValue(s,t){this.delegate.setValue(s,t)}listen(s,t,o){return this.delegate.listen(s,t,o)}disableAnimations(s,t){this.engine.disableAnimations(s,t)}}class Eu extends lu{constructor(s,t,o,l){super(t,o,l),this.factory=s,this.namespaceId=t}setProperty(s,t,o){"@"==t.charAt(0)?"."==t.charAt(1)&&t==qu?this.disableAnimations(s,o=void 0===o||!!o):this.engine.process(this.namespaceId,s,t.substr(1),o):this.delegate.setProperty(s,t,o)}listen(s,t,o){if("@"==t.charAt(0)){const l=function iu(n){switch(n){case"body":return document.body;case"document":return document;case"window":return window;default:return n}}(s);let _=t.substr(1),C="";return"@"!=_.charAt(0)&&([_,C]=function ra(n){const s=n.indexOf(".");return[n.substring(0,s),n.substr(s+1)]}(_)),this.engine.listen(this.namespaceId,l,_,C,R=>{this.factory.scheduleListenerCallback(R._data||-1,o,R)})}return this.delegate.listen(s,t,o)}}let bu=(()=>{class n extends Xt{constructor(t,o,l){super(t.body,o,l)}ngOnDestroy(){this.flush()}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(p.K0),e.LFG(mn),e.LFG(pn))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac}),n})();const uu=new e.OlP("AnimationModuleType"),du=[{provide:S._j,useClass:hd},{provide:pn,useFactory:function td(){return new Ue}},{provide:Xt,useClass:bu},{provide:e.FYo,useFactory:function ec(n,s,t){return new Sl(n,s,t)},deps:[u.se,Xt,e.R0b]}],nd=[{provide:mn,useFactory:()=>new Nc},{provide:uu,useValue:"BrowserAnimations"},...du],Uu=[{provide:mn,useClass:Ji},{provide:uu,useValue:"NoopAnimations"},...du];let Yu=(()=>{class n{static withConfig(t){return{ngModule:n,providers:t.disableAnimations?Uu:nd}}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({providers:nd,imports:[u.b2]}),n})();var Ld=i(92870),Io=i(55860),fu=i(23815),Sr=i.n(fu),Z=i(64762),De=i(93523);let ct=class{constructor(s){this.http=s,this.baseURL="api/cephfs",this.baseUiURL="ui-api/cephfs"}list(){return this.http.get(`${this.baseURL}`)}lsDir(s,t){let o=`${this.baseUiURL}/${s}/ls_dir?depth=2`;return t&&(o+=`&path=${encodeURIComponent(t)}`),this.http.get(o)}getCephfs(s){return this.http.get(`${this.baseURL}/${s}`)}getTabs(s){return this.http.get(`ui-api/cephfs/${s}/tabs`)}getClients(s){return this.http.get(`${this.baseURL}/${s}/clients`)}evictClient(s,t){return this.http.delete(`${this.baseURL}/${s}/client/${t}`)}getMdsCounters(s){return this.http.get(`${this.baseURL}/${s}/mds_counters`)}mkSnapshot(s,t,o){let l=new g.LE;return l=l.append("path",t),Sr().isUndefined(o)||(l=l.append("name",o)),this.http.post(`${this.baseURL}/${s}/snapshot`,null,{params:l})}rmSnapshot(s,t,o){let l=new g.LE;return l=l.append("path",t),l=l.append("name",o),this.http.delete(`${this.baseURL}/${s}/snapshot`,{params:l})}quota(s,t,o){let l=new g.LE;return l=l.append("path",t),this.http.put(`${this.baseURL}/${s}/quota`,o,{observe:"response",params:l})}};ct.\u0275fac=function(s){return new(s||ct)(e.LFG(g.eN))},ct.\u0275prov=e.Yz7({token:ct,factory:ct.\u0275fac,providedIn:"root"}),ct=(0,Z.gn)([De.o,(0,Z.w6)("design:paramtypes",[g.eN])],ct);var It=i(68136),Ht=i(99466),_n=i(68774),Pn=i(96102),Tr=i(83697),ai=i(46797),Ei=i(69158),Ci=i(91801),Vi=i(47640),Pr=i(71334),Yn=i(59376),Rr=i(47557),br=i(66369),fo=i(61350),$s=i(16738),ls=i.n($s),_l=i(87311),Us=i(72621);const zc=["chartCanvas"],Ic=["chartTooltip"];let Pu=(()=>{class n{constructor(){this.lhsCounter="mds_mem.ino",this.rhsCounter="mds_server.handle_client_request",this.chart={datasets:[{label:this.lhsCounter,yAxisID:"LHS",data:[],lineTension:.1},{label:this.rhsCounter,yAxisID:"RHS",data:[],lineTension:.1}],options:{title:{text:"",display:!0},responsive:!0,maintainAspectRatio:!1,legend:{position:"top"},scales:{xAxes:[{position:"top",type:"time",time:{displayFormats:{quarter:"MMM YYYY"}},ticks:{maxRotation:0}}],yAxes:[{id:"LHS",type:"linear",position:"left"},{id:"RHS",type:"linear",position:"right"}]},tooltips:{enabled:!1,mode:"index",intersect:!1,position:"nearest",callbacks:{title:(t,o)=>{let l=0;if(t.length>0){const _=t[0];l=o.datasets[_.datasetIndex].data[_.index].x}return l.toString()}}}},chartType:"line"}}ngOnInit(){Sr().isUndefined(this.mdsCounter)||(this.setChartTooltip(),this.updateChart())}ngOnChanges(){Sr().isUndefined(this.mdsCounter)||this.updateChart()}setChartTooltip(){const t=new _l.h(this.chartCanvas,this.chartTooltip,l=>l.caretX+"px",l=>l.caretY-l.height-23+"px");t.getTitle=l=>ls()(l,"x").format("LTS"),t.checkOffset=!0;const o={title:{text:this.mdsCounter.name},tooltips:{custom:l=>t.customTooltips(l)}};Sr().merge(this.chart,{options:o})}updateChart(){const t=[{data:this.convertTimeSeries(this.mdsCounter[this.lhsCounter])},{data:this.deltaTimeSeries(this.mdsCounter[this.rhsCounter])}];Sr().merge(this.chart,{datasets:t}),this.chart.datasets=[...this.chart.datasets]}convertTimeSeries(t){const o=[];return Sr().each(t,l=>{o.push({x:1e3*l[0],y:l[1]})}),o.shift(),o}deltaTimeSeries(t){let o,l=t[0];const _=[];for(o=1;o<t.length;o++){const C=t[o];_.push({x:1e3*C[0],y:C[1]-l[1]}),l=C}return _}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-cephfs-chart"]],viewQuery:function(t,o){if(1&t&&(e.Gf(zc,7),e.Gf(Ic,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.chartCanvas=l.first),e.iGM(l=e.CRH())&&(o.chartTooltip=l.first)}},inputs:{mdsCounter:"mdsCounter"},features:[e.TTD],decls:6,vars:3,consts:[[1,"chart-container"],["baseChart","",3,"datasets","options","chartType"],["chartCanvas",""],[1,"chartjs-tooltip"],["chartTooltip",""]],template:function(t,o){1&t&&(e.TgZ(0,"div",0),e._UZ(1,"canvas",1,2),e.TgZ(3,"div",3,4),e._UZ(5,"table"),e.qZA()()),2&t&&(e.xp6(1),e.Q6J("datasets",o.chart.datasets)("options",o.chart.options)("chartType",o.chart.chartType))},directives:[Us.jh],styles:['.chart-container[_ngcontent-%COMP%]{cursor:pointer;margin:auto;overflow:visible;position:absolute}canvas[_ngcontent-%COMP%]{user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important;opacity:0;pointer-events:none;position:absolute;transform:translate(-50%);transition:all .1s ease}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]:after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]:after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]:after{border-color:#000 transparent transparent transparent;border-style:solid;border-width:5px;content:" ";left:50%;margin-left:-5px;position:absolute;top:100%}  .chartjs-tooltip-key{display:inline-block;height:10px;margin-right:10px;width:10px}.chart-container[_ngcontent-%COMP%]{height:500px;margin-bottom:20px;position:relative;width:100%}']}),n})();var Su=i(60251);const Zd=["poolUsageTpl"],_d=["activityTmpl"];function md(n,s){if(1&n&&(e.TgZ(0,"div",0)(1,"div",11),e._UZ(2,"cd-cephfs-chart",12),e.qZA()()),2&n){const t=s.$implicit;e.xp6(2),e.Q6J("mdsCounter",t)}}function Hc(n,s){if(1&n&&e._UZ(0,"cd-usage-bar",13),2&n){const t=s.row;e.Q6J("total",t.size)("used",t.used)("title",t.pool_name)}}function La(n,s){1&n&&(e._uU(0),e.ALo(1,"dimless")),2&n&&e.AsE(" ","standby-replay"===s.row.state?"Evts":"Reqs",": ",e.lcZ(1,2,s.value)," /s\n")}let kd=(()=>{class n{constructor(t,o){this.dimlessBinary=t,this.dimless=o,this.standbys=[],this.objectValues=Object.values}ngOnChanges(){this.setStandbys()}setStandbys(){this.standbys=[{key:"Standby daemons",value:this.data.standbys}]}ngOnInit(){this.columns={ranks:[{prop:"rank",name:"Rank"},{prop:"state",name:"State"},{prop:"mds",name:"Daemon"},{prop:"activity",name:"Activity",cellTemplate:this.activityTmpl},{prop:"dns",name:"Dentries",pipe:this.dimless},{prop:"inos",name:"Inodes",pipe:this.dimless},{prop:"dirs",name:"Dirs",pipe:this.dimless},{prop:"caps",name:"Caps",pipe:this.dimless}],pools:[{prop:"pool",name:"Pool"},{prop:"type",name:"Type"},{prop:"size",name:"Size",pipe:this.dimlessBinary},{name:"Usage",cellTemplate:this.poolUsageTpl,comparator:(t,o,l,_)=>{const C=l.used/l.avail,R=_.used/_.avail;return C===R?0:C>R?1:-1}}]}}trackByFn(t,o){return o.name}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Rr.$),e.Y36(br.n))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-cephfs-detail"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Zd,7),e.Gf(_d,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.poolUsageTpl=l.first),e.iGM(l=e.CRH())&&(o.activityTmpl=l.first)}},inputs:{data:"data"},features:[e.TTD],decls:19,vars:9,consts:function(){let s,t,o,l;return s="Ranks",t="Standbys",o="Pools",l="MDS performance counters",[[1,"row"],[1,"col-sm-6"],s,[3,"data","columns","toolHeader"],t,[3,"data"],o,l,["class","row",4,"ngFor","ngForOf","ngForTrackBy"],["poolUsageTpl",""],["activityTmpl",""],[1,"col-md-12"],[3,"mdsCounter"],[3,"total","used","title"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"legend"),e.SDv(3,2),e.qZA(),e._UZ(4,"cd-table",3),e.TgZ(5,"legend"),e.SDv(6,4),e.qZA(),e._UZ(7,"cd-table-key-value",5),e.qZA(),e.TgZ(8,"div",1)(9,"legend"),e.SDv(10,6),e.qZA(),e._UZ(11,"cd-table",3),e.qZA()(),e.TgZ(12,"legend"),e.SDv(13,7),e.qZA(),e.YNc(14,md,3,1,"div",8),e.YNc(15,Hc,1,3,"ng-template",null,9,e.W1O),e.YNc(17,La,2,4,"ng-template",null,10,e.W1O)),2&t&&(e.xp6(4),e.Q6J("data",o.data.ranks)("columns",o.columns.ranks)("toolHeader",!1),e.xp6(3),e.Q6J("data",o.standbys),e.xp6(4),e.Q6J("data",o.data.pools)("columns",o.columns.pools)("toolHeader",!1),e.xp6(3),e.Q6J("ngForOf",o.objectValues(o.data.mdsCounters))("ngForTrackBy",o.trackByFn))},directives:[Tr.a,fo.b,p.sg,Pu,Su.O],pipes:[br.n],styles:[".progress[_ngcontent-%COMP%]{margin-bottom:0}"]}),n})();var Oc=i(30982),Mo=i(79512),wo=i(65862),Ta=i(18001),Tl=i(97161),ou=i(63285),Tu=i(94928);let gc=(()=>{class n{constructor(t,o,l,_,C){this.cephfsService=t,this.modalService=o,this.notificationService=l,this.authStorageService=_,this.actionLabels=C,this.triggerApiUpdate=new e.vpe,this.selection=new _n.r,this.permission=this.authStorageService.getPermissions().cephfs,this.tableActions=[{permission:"update",icon:wo.P.signOut,click:()=>this.evictClientModal(),name:this.actionLabels.EVICT}]}ngOnInit(){this.columns=[{prop:"id",name:"id"},{prop:"type",name:"type"},{prop:"state",name:"state"},{prop:"version",name:"version"},{prop:"hostname",name:"Host"},{prop:"root",name:"root"}]}updateSelection(t){this.selection=t}evictClient(t){this.cephfsService.evictClient(this.id,t).subscribe(()=>{this.triggerApiUpdate.emit(),this.modalRef.close(),this.notificationService.show(Ta.k.success,"Evicted client '" + t + "'")},()=>{this.modalRef.componentInstance.stopLoadingSpinner()})}evictClientModal(){const t=this.selection.first().id;this.modalRef=this.modalService.show(Oc.M,{itemDescription:"client",itemNames:[t],actionDescription:"evict",submitAction:()=>this.evictClient(t)})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(ct),e.Y36(ou.Z),e.Y36(Tl.g),e.Y36(Vi.j),e.Y36(Mo.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-cephfs-clients"]],inputs:{id:"id",clients:"clients"},outputs:{triggerApiUpdate:"triggerApiUpdate"},decls:2,vars:7,consts:[["selectionType","single",3,"data","columns","status","autoReload","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"]],template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.triggerApiUpdate.emit()})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1),e.qZA()),2&t&&(e.Q6J("data",o.clients.data)("columns",o.columns)("status",o.clients.status)("autoReload",-1),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[Tr.a,Tu.K],styles:[""]}),n})();var En=i(1659),pa=i(62946),rd=i(36169),Ze=i(65683),Ae=i(90070),ge=i(87925);const ht=["origin"],Ot=function(n,s){return[n,s]};function sn(n,s){if(1&n&&e._UZ(0,"i",5),2&n){const t=e.oxw(2);e.Q6J("ngClass",e.WLB(1,Ot,t.icons.spinner,t.icons.spin))}}function Un(n,s){if(1&n&&(e.TgZ(0,"tree-root",10),e.YNc(1,sn,1,4,"ng-template",null,11,e.W1O),e.qZA()),2&n){const t=e.oxw();e.Q6J("nodes",t.nodes)("options",t.treeOptions)}}function gr(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"legend"),e.SDv(2,17),e.qZA(),e.TgZ(3,"cd-table",18),e.NdJ("updateSelection",function(l){return e.CHM(t),e.oxw(2).quota.updateSelection(l)}),e._UZ(4,"cd-table-actions",19),e.qZA(),e.BQk()}if(2&n){const t=e.oxw(2);e.xp6(3),e.Q6J("data",t.settings)("columns",t.quota.columns)("limit",0)("footer",!1)("onlyActionHeader",!0)("forceIdentifier",!0)("toolHeader",!1),e.xp6(1),e.Q6J("permission",t.permission)("selection",t.quota.selection)("tableActions",t.quota.tableActions)}}function gi(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",12)(1,"div",2)(2,"div",3),e._uU(3),e.qZA(),e.TgZ(4,"div",6),e.YNc(5,gr,5,10,"ng-container",13),e.TgZ(6,"legend"),e.SDv(7,14),e.qZA(),e.TgZ(8,"cd-table",15),e.NdJ("updateSelection",function(l){return e.CHM(t),e.oxw().snapshot.updateSelection(l)}),e._UZ(9,"cd-table-actions",16),e.qZA()()()()}if(2&n){const t=e.oxw();e.xp6(3),e.hij(" ",t.selectedDir.path," "),e.xp6(2),e.Q6J("ngIf","/"!==t.selectedDir.path),e.xp6(3),e.Q6J("data",t.selectedDir.snapshots)("columns",t.snapshot.columns),e.xp6(1),e.Q6J("permission",t.permission)("selection",t.snapshot.selection)("tableActions",t.snapshot.tableActions)}}function Lo(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"span",20),e.NdJ("click",function(){const _=e.CHM(t).value;return e.oxw().selectOrigin(_)}),e._uU(1),e.qZA()}if(2&n){const t=s.value;e.xp6(1),e.Oqu(t)}}let ms=(()=>{class n{constructor(t,o,l,_,C,R,N){this.authStorageService=t,this.modalService=o,this.cephfsService=l,this.cdDatePipe=_,this.actionLabels=C,this.notificationService=R,this.dimlessBinaryPipe=N,this.icons=wo.P,this.loadingIndicator=!1,this.loading={},this.treeOptions={useVirtualScroll:!0,getChildren:V=>this.updateDirectory(V.id),actionMapping:{mouse:{click:this.selectAndShowNode.bind(this),expanderClick:this.selectAndShowNode.bind(this)}}}}selectAndShowNode(t,o,l){pa.iM.TOGGLE_EXPANDED(t,o,l),this.selectNode(o)}selectNode(t){pa.iM.TOGGLE_ACTIVE(void 0,t,void 0),this.selectedDir=this.getDirectory(t),"/"!==t.id&&this.setSettings(t)}ngOnInit(){this.permission=this.authStorageService.getPermissions().cephfs,this.setUpQuotaTable(),this.setUpSnapshotTable()}setUpQuotaTable(){this.quota={columns:[{prop:"row.name",name:"Name",flexGrow:1},{prop:"row.value",name:"Value",sortable:!1,flexGrow:1},{prop:"row.originPath",name:"Origin",sortable:!1,cellTemplate:this.originTmpl,flexGrow:1}],selection:new _n.r,updateSelection:t=>{this.quota.selection=t},tableActions:[{name:this.actionLabels.SET,icon:wo.P.edit,permission:"update",visible:t=>!t.hasSelection||t.first()&&0===t.first().dirValue,click:()=>this.updateQuotaModal()},{name:this.actionLabels.UPDATE,icon:wo.P.edit,permission:"update",visible:t=>t.first()&&t.first().dirValue>0,click:()=>this.updateQuotaModal()},{name:this.actionLabels.UNSET,icon:wo.P.destroy,permission:"update",disable:t=>!t.hasSelection||t.first()&&0===t.first().dirValue,click:()=>this.unsetQuotaModal()}]}}setUpSnapshotTable(){this.snapshot={columns:[{prop:"name",name:"Name",flexGrow:1},{prop:"path",name:"Path",isHidden:!0,flexGrow:2},{prop:"created",name:"Created",flexGrow:1,pipe:this.cdDatePipe}],selection:new _n.r,updateSelection:t=>{this.snapshot.selection=t},tableActions:[{name:this.actionLabels.CREATE,icon:wo.P.add,permission:"create",canBePrimary:t=>!t.hasSelection,click:()=>this.createSnapshot(),disable:()=>this.disableCreateSnapshot()},{name:this.actionLabels.DELETE,icon:wo.P.destroy,permission:"delete",click:()=>this.deleteSnapshotModal(),canBePrimary:t=>t.hasSelection,disable:t=>!t.hasSelection}]}}disableCreateSnapshot(){const t=this.selectedDir.path.split("/").slice(1);return t.length>=4&&"volumes"===t[0]&&"Cannot create snapshots for files/folders in the subvolume " + t[2] + ""}ngOnChanges(){this.selectedDir=void 0,this.dirs=[],this.requestedPaths=[],this.nodeIds={},this.id&&(this.setRootNode(),this.firstCall())}setRootNode(){this.nodes=[{name:"/",id:"/",isExpanded:!0}]}firstCall(){setTimeout(()=>{this.getNode("/").loadNodeChildren()},10)}updateDirectory(t){if(this.unsetLoadingIndicator(),this.requestedPaths.includes(t)){if(!0===this.loading[t])return}else this.requestedPaths.push(t);return new Promise(o=>{this.setLoadingIndicator(t,!0),this.cephfsService.lsDir(this.id,t).subscribe(l=>{this.updateTreeStructure(l),this.updateQuotaTable(),this.updateTree(),o(this.getChildren(t)),this.setLoadingIndicator(t,!1)})})}setLoadingIndicator(t,o){this.loading[t]=o,this.unsetLoadingIndicator()}getSubDirectories(t,o=this.dirs){return o.filter(l=>l.parent===t)}getChildren(t){const o=this.getSubTree(t);return Sr().sortBy(this.getSubDirectories(t),"path").map(l=>this.createNode(l,o))}createNode(t,o){return this.nodeIds[t.path]=t,o||this.getSubTree(t.parent),{name:t.name,id:t.path,hasChildren:this.getSubDirectories(t.path,o).length>0}}getSubTree(t){return this.dirs.filter(o=>o.parent&&o.parent.startsWith(t))}setSettings(t){const o=(l,_)=>l?_?_(l):l:"";this.settings=[this.getQuota(t,"max_files",o),this.getQuota(t,"max_bytes",l=>o(l,_=>this.dimlessBinaryPipe.transform(_)))]}getQuota(t,o,l){const _=t.id;t=this.getOrigin(t,o);const C=this.getDirectory(t),R=C.quotas[o];let N=R,V=C.path;if(t.id===_)if("/"===t.parent.id)N=0;else{const Q=this.getDirectory(this.getOrigin(t.parent,o));N=Q.quotas[o],V=Q.path}return{row:{name:"max_bytes"===o?"Max size":"Max files",value:l(R),originPath:R?C.path:""},quotaKey:o,dirValue:this.nodeIds[_].quotas[o],nextTreeMaximum:{value:N,path:N?V:""}}}getOrigin(t,o){if(t.parent&&"/"!==t.parent.id){const l=this.getQuotaFromTree(t,o),_=this.getOrigin(t.parent,o),C=this.getQuotaFromTree(_,o);return 0===l||0!==C&&C<l?_:t}return t}getQuotaFromTree(t,o){return this.getDirectory(t).quotas[o]}getDirectory(t){return this.nodeIds[t.id]}selectOrigin(t){this.selectNode(this.getNode(t))}getNode(t){return this.treeComponent.treeModel.getNodeById(t)}updateQuotaModal(){const t=this.selectedDir.path,o=this.quota.selection.first(),l=o.nextTreeMaximum,_=o.quotaKey,C=o.dirValue;this.modalService.show(Ze.X,{titleText:this.getModalQuotaTitle(0===C?this.actionLabels.SET:this.actionLabels.UPDATE,t),message:l.value?"The inherited " + this.getQuotaValueFromPathMsg(l.value, l.path) + " is the maximum value to be used.":void 0,fields:[this.getQuotaFormField(o.row.name,_,C,l.value)],submitButtonText:"Save",onSubmit:R=>this.updateQuota(R)})}getModalQuotaTitle(t,o){return "" + t + " CephFS " + this.getQuotaName() + " quota for '" + o + "'"}getQuotaName(){return this.isBytesQuotaSelected()?"size":"files"}isBytesQuotaSelected(){return"max_bytes"===this.quota.selection.first().quotaKey}getQuotaValueFromPathMsg(t,o){return t=this.isBytesQuotaSelected()?this.dimlessBinaryPipe.transform(t):t,"" + this.getQuotaName() + " quota " + t + " from '" + o + "'"}getQuotaFormField(t,o,l,_){const C="max_bytes"===o,R=[C?Ae.h.binaryMin(0):En.kI.min(0)];_&&R.push(C?Ae.h.binaryMax(_):En.kI.max(_));const N={type:C?"binary":"number",label:t,name:o,value:l,validators:R,required:!0};return C||(N.errors={min:"Value has to be at least 0 or more",max:"Value has to be at most " + _ + " or less"}),N}updateQuota(t,o){const l=this.selectedDir.path,_=this.quota.selection.first().quotaKey,C=0===this.selectedDir.quotas[_]?this.actionLabels.SET:0===t[_]?this.actionLabels.UNSET:"Updated";this.cephfsService.quota(this.id,l,t).subscribe(()=>{o&&o(),this.notificationService.show(Ta.k.success,this.getModalQuotaTitle(C,l)),this.forceDirRefresh()})}unsetQuotaModal(){const t=this.selectedDir.path,o=this.quota.selection.first(),l=o.quotaKey,_=o.nextTreeMaximum,C=o.dirValue,R=this.getQuotaValueFromPathMsg(_.value,_.path),N=_.value>0?_.value>C?"in order to inherit " + R + "":"which isn't used because of the inheritance of " + R + "":"in order to have no quota on the directory";this.modalRef=this.modalService.show(rd.Y,{titleText:this.getModalQuotaTitle(this.actionLabels.UNSET,t),buttonText:this.actionLabels.UNSET,description:"" + this.actionLabels.UNSET + " " + this.getQuotaValueFromPathMsg(C, t) + " " + N + ".",onSubmit:()=>this.updateQuota({[l]:0},()=>this.modalRef.close())})}createSnapshot(){const t=this.selectedDir.path;this.modalService.show(Ze.X,{titleText:"Create Snapshot",message:"Please enter the name of the snapshot.",fields:[{type:"text",name:"name",value:`${ls()().toISOString(!0)}`,required:!0,validators:[this.validateValue.bind(this)]}],submitButtonText:"Create Snapshot",onSubmit:o=>{this.alreadyExists?this.notificationService.show(Ta.k.error,"Snapshot name '" + o.name + "' is already in use. Please use another name."):this.cephfsService.mkSnapshot(this.id,t,o.name).subscribe(l=>{this.notificationService.show(Ta.k.success,"Created snapshot '" + l + "' for '" + t + "'"),this.forceDirRefresh()})}})}validateValue(t){this.alreadyExists=this.selectedDir.snapshots.some(o=>o.name===t.value)}forceDirRefresh(t){if(!t){const l=this.selectedDir;if(!l)throw new Error("This function can only be called without path if an selection was made");t=l.parent?l.parent:l.path}this.getNode(t).loadNodeChildren()}updateTreeStructure(t){const o=(_,C)=>{const R=_.filter(V=>V.parent===C),N=R.map(V=>V.path);return{children:R,paths:N}};Sr().uniq(t.map(_=>_.parent).sort()).forEach(_=>{const C=o(t,_),R=o(this.dirs,_);R.children.forEach(N=>{C.paths.includes(N.path)||this.removeOldDirectory(N)}),C.children.forEach(N=>{R.paths.includes(N.path)?this.updateExistingDirectory(R.children,N):this.addNewDirectory(N)})})}removeOldDirectory(t){const o=t.path;Sr().remove(this.dirs,l=>l.path===o),delete this.nodeIds[o],this.updateDirectoriesParentNode(t)}updateDirectoriesParentNode(t){const o=t.parent;if(!o)return;const l=this.getNode(o);if(!l)return;const _=this.getChildren(o);l.data.children=_,l.data.hasChildren=_.length>0,this.treeComponent.treeModel.update()}addNewDirectory(t){this.dirs.push(t),this.nodeIds[t.path]=t,this.updateDirectoriesParentNode(t)}updateExistingDirectory(t,o){const l=t.find(_=>_.path===o.path);Object.assign(l,o)}updateQuotaTable(){const t=this.selectedDir?this.getNode(this.selectedDir.path):void 0;t&&"/"!==t.id&&this.setSettings(t)}updateTree(t=!1){this.loadingIndicator&&!t||(this.treeComponent.treeModel.update(),this.nodes=[...this.nodes],this.treeComponent.sizeChanged())}deleteSnapshotModal(){this.modalRef=this.modalService.show(Oc.M,{itemDescription:"CephFs Snapshot",itemNames:this.snapshot.selection.selected.map(t=>t.name),submitAction:()=>this.deleteSnapshot()})}deleteSnapshot(){const t=this.selectedDir.path;this.snapshot.selection.selected.forEach(o=>{const l=o.name;this.cephfsService.rmSnapshot(this.id,t,l).subscribe(()=>{this.notificationService.show(Ta.k.success,"Deleted snapshot '" + l + "' for '" + t + "'")})}),this.modalRef.close(),this.forceDirRefresh()}refreshAllDirectories(){this.loadingIndicator=!0,this.requestedPaths.map(o=>this.forceDirRefresh(o));const t=setInterval(()=>{this.updateTree(!0),this.loadingIndicator||clearInterval(t)},3e3)}unsetLoadingIndicator(){!this.loadingIndicator||(clearTimeout(this.loadingTimeout),this.loadingTimeout=setTimeout(()=>{if(Object.values(this.loading).some(o=>o))return this.unsetLoadingIndicator();this.loadingIndicator=!1,this.updateTree()},3e3))}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(ou.Z),e.Y36(ct),e.Y36(Pn.N),e.Y36(Mo.p4),e.Y36(Tl.g),e.Y36(Rr.$))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-cephfs-directories"]],viewQuery:function(t,o){if(1&t&&(e.Gf(pa.qr,5),e.Gf(ht,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.treeComponent=l.first),e.iGM(l=e.CRH())&&(o.originTmpl=l.first)}},inputs:{id:"id"},features:[e.TTD],decls:11,vars:10,consts:function(){let s,t;return s="Snapshots",t="Quotas",[[1,"row"],[1,"col-sm-4","pe-0"],[1,"card"],[1,"card-header"],["type","button",1,"btn","btn-light","pull-right",3,"click"],[3,"ngClass"],[1,"card-body"],[3,"nodes","options",4,"ngIf"],["class","col-sm-8 metadata",4,"ngIf"],["origin",""],[3,"nodes","options"],["loadingTemplate",""],[1,"col-sm-8","metadata"],[4,"ngIf"],s,["identifier","name","forceIdentifier","true","selectionType","multiClick",3,"data","columns","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],t,["selectionType","single","identifier","quotaKey",3,"data","columns","limit","footer","onlyActionHeader","forceIdentifier","toolHeader","updateSelection"],[1,"only-table-actions",3,"permission","selection","tableActions"],[1,"quota-origin",3,"click"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3)(4,"button",4),e.NdJ("click",function(){return o.refreshAllDirectories()}),e._UZ(5,"i",5),e.qZA()(),e.TgZ(6,"div",6),e.YNc(7,Un,3,2,"tree-root",7),e.qZA()()(),e.YNc(8,gi,10,7,"div",8),e.qZA(),e.YNc(9,Lo,2,1,"ng-template",null,9,e.W1O)),2&t&&(e.xp6(4),e.ekj("disabled",o.loadingIndicator),e.xp6(1),e.ekj("fa-spin",o.loadingIndicator),e.Q6J("ngClass",e.WLB(7,Ot,o.icons.large,o.icons.refresh)),e.xp6(2),e.Q6J("ngIf",o.nodes),e.xp6(1),e.Q6J("ngIf",o.selectedDir))},directives:[ge.o,p.mk,p.O5,pa.qr,Tr.a,Tu.K],styles:["cd-cephfs-directories tree-root .tree-children{overflow:inherit}.quota-origin[_ngcontent-%COMP%]{color:#25828e;cursor:pointer}.quota-origin[_ngcontent-%COMP%]:hover{color:#212529}"]}),n})();var ha=i(76317);function Ma(n,s){if(1&n&&e._UZ(0,"cd-cephfs-detail",15),2&n){const t=e.oxw(2);e.Q6J("data",t.details)}}function Nu(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-cephfs-clients",16),e.NdJ("triggerApiUpdate",function(){return e.CHM(t),e.oxw(2).refresh()}),e.qZA()}if(2&n){const t=e.oxw(2);e.Q6J("id",t.id)("clients",t.clients)}}function cc(n,s){if(1&n&&e._UZ(0,"cd-cephfs-directories",17),2&n){const t=e.oxw(2);e.Q6J("id",t.id)}}function ka(n,s){if(1&n&&e._UZ(0,"cd-grafana",18),2&n){const t=e.oxw(2);e.Q6J("grafanaPath","mds-performance?var-mds_servers=mds."+t.grafanaId)("type","metrics")}}function rl(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"nav",1,2),e.NdJ("navChange",function(){return e.CHM(t),e.oxw().softRefresh()}),e.ynx(3,3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,Ma,1,1,"ng-template",6),e.BQk(),e.ynx(7,7),e.TgZ(8,"a",4),e.ynx(9),e.SDv(10,8),e.BQk(),e.TgZ(11,"span",9),e._uU(12),e.qZA()(),e.YNc(13,Nu,1,2,"ng-template",6),e.BQk(),e.ynx(14,10),e.TgZ(15,"a",4),e.SDv(16,11),e.qZA(),e.YNc(17,cc,1,1,"ng-template",6),e.BQk(),e.ynx(18,12),e.TgZ(19,"a",4),e.SDv(20,13),e.qZA(),e.YNc(21,ka,1,2,"ng-template",6),e.BQk(),e.qZA(),e._UZ(22,"div",14),e.BQk()}if(2&n){const t=e.MAs(2),o=e.oxw();e.xp6(12),e.Oqu(o.clients.data.length),e.xp6(10),e.Q6J("ngbNavOutlet",t)}}let vc=(()=>{class n{constructor(t,o,l){this.ngZone=t,this.authStorageService=o,this.cephfsService=l,this.clients={data:[],status:new Ei.E(Ci.T.ValueNone)},this.details={standbys:"",pools:[],ranks:[],mdsCounters:{},name:""},this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){this.selection?this.selection.id!==this.id&&this.setupSelected(this.selection.id,this.selection.mdsmap.info):this.unsubscribeInterval()}setupSelected(t,o){this.id=t;const l=Sr().first(Object.values(o));this.grafanaId=l&&l.name,this.details={standbys:"",pools:[],ranks:[],mdsCounters:{},name:""},this.clients={data:[],status:new Ei.E(Ci.T.ValueNone)},this.updateInterval()}updateInterval(){this.unsubscribeInterval(),this.subscribeInterval()}unsubscribeInterval(){this.reloadSubscriber&&this.reloadSubscriber.unsubscribe()}subscribeInterval(){this.ngZone.runOutsideAngular(()=>this.reloadSubscriber=(0,ai.H)(0,5e3).subscribe(()=>this.ngZone.run(()=>this.refresh())))}refresh(){this.cephfsService.getTabs(this.id).subscribe(t=>{this.data=t,this.softRefresh()},()=>{this.clients.status=new Ei.E(Ci.T.ValueException)})}softRefresh(){const t=Sr().cloneDeep(this.data);this.clients=t.clients,this.clients.status=new Ei.E(this.clients.status),this.details={standbys:t.standbys,pools:t.pools,ranks:t.ranks,mdsCounters:t.mds_counters,name:t.name}}ngOnDestroy(){this.unsubscribeInterval()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(e.R0b),e.Y36(Vi.j),e.Y36(ct))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-cephfs-tabs"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let s,t,o,l,_;return s="Details",t="Clients",o="Directories",l="Performance Details",_="CephFS MDS performance",[[4,"ngIf"],["ngbNav","","cdStatefulTab","cephfs-tabs",1,"nav-tabs",3,"navChange"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","clients"],t,[1,"badge","badge-pill","badge-tab","ms-1"],["ngbNavItem","directories"],o,["ngbNavItem","performance-details"],l,[3,"ngbNavOutlet"],[3,"data"],[3,"id","clients","triggerApiUpdate"],[3,"id"],["title",_,"uid","tbO9LAiZz","grafanaStyle","one",3,"grafanaPath","type"]]},template:function(t,o){1&t&&e.YNc(0,rl,23,2,"ng-container",0),2&t&&e.Q6J("ngIf",o.selection)},directives:[p.O5,Pr.Pz,Yn.m,Pr.nv,Pr.Vx,Pr.uN,kd,gc,ms,ha.F,Pr.tO],styles:[""]}),n})(),yc=(()=>{class n extends It.o{constructor(t,o){super(),this.cephfsService=t,this.cdDatePipe=o,this.filesystems=[],this.selection=new _n.r}ngOnInit(){this.columns=[{name:"Name",prop:"mdsmap.fs_name",flexGrow:2},{name:"Created",prop:"mdsmap.created",flexGrow:2,pipe:this.cdDatePipe},{name:"Enabled",prop:"mdsmap.enabled",flexGrow:1,cellTransformation:Ht.e.checkIcon}]}loadFilesystems(t){this.cephfsService.list().subscribe(o=>{this.filesystems=o},()=>{t.error()})}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(ct),e.Y36(Pn.N))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-cephfs-list"]],features:[e.qOj],decls:2,vars:4,consts:[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","fetchData","setExpandedRow","updateSelection"],["cdTableDetail","",3,"selection"]],template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(_){return o.loadFilesystems(_)})("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-cephfs-tabs",1),e.qZA()),2&t&&(e.Q6J("data",o.filesystems)("columns",o.columns)("hasDetails",!0),e.xp6(1),e.Q6J("selection",o.expandedRow))},directives:[Tr.a,vc],styles:[""]}),n})(),ju=(()=>{class n{static getType(t){const o=Sr().find(this.knownTypes,l=>l.name===t);if(void 0!==o)return o;throw new Error('Found unknown type "'+t+'" for config option.')}static getTypeValidators(t){const o=n.getType(t.type);if("bool"===o.name||"str"===o.name)return;const l={validators:[],patternHelpText:o.patternHelpText};return o.isNumberType?(t.max&&""!==t.max&&(l.max=t.max,l.validators.push(En.kI.max(t.max))),t.min&&""!==t.min?(l.min=t.min,l.validators.push(En.kI.min(t.min))):"defaultMin"in o&&(l.min=o.defaultMin,l.validators.push(En.kI.min(o.defaultMin))),l.validators.push("float"===t.type?Ae.h.decimalNumber():Ae.h.number(o.allowsNegative))):"addr"===t.type?l.validators=[Ae.h.ip()]:"uuid"===t.type&&(l.validators=[Ae.h.uuid()]),l}static getTypeStep(t,o){if(["uint","int","size","secs"].includes(t))return 1;if("float"===t){if(null!==o&&-1!==o.toString().indexOf(".")){const C=o.toString().split(".");return Math.pow(10,-C[1].length)}return.1}}}return n.knownTypes=[{name:"uint",inputType:"number",humanReadable:"Unsigned integer value",defaultMin:0,patternHelpText:"The entered value needs to be an unsigned number.",isNumberType:!0,allowsNegative:!1},{name:"int",inputType:"number",humanReadable:"Integer value",patternHelpText:"The entered value needs to be a number.",isNumberType:!0,allowsNegative:!0},{name:"size",inputType:"number",humanReadable:"Unsigned integer value (>=16bit)",defaultMin:0,patternHelpText:"The entered value needs to be a unsigned number.",isNumberType:!0,allowsNegative:!1},{name:"secs",inputType:"number",humanReadable:"Number of seconds",defaultMin:1,patternHelpText:"The entered value needs to be a number >= 1.",isNumberType:!0,allowsNegative:!1},{name:"float",inputType:"number",humanReadable:"Double value",patternHelpText:"The entered value needs to be a number or decimal.",isNumberType:!0,allowsNegative:!0},{name:"str",inputType:"text",humanReadable:"Text",isNumberType:!1},{name:"addr",inputType:"text",humanReadable:"IPv4 or IPv6 address",patternHelpText:"The entered value needs to be a valid IP address.",isNumberType:!1},{name:"uuid",inputType:"text",humanReadable:"UUID",patternHelpText:"The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8",isNumberType:!1},{name:"bool",inputType:"checkbox",humanReadable:"Boolean value",isNumberType:!1}],n})();var Ul=i(93614),tc=i(95463);class gd{constructor(){this.value=[]}}var Fc=i(64724),cu=i(63622),Oa=i(41582),ll=i(56310),Ll=i(94276),Ml=i(30839);function gf(n,s){1&n&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,20),e.qZA(),e.TgZ(3,"div",11)(4,"textarea",21),e._uU(5,"            "),e.qZA()()())}function zd(n,s){1&n&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,22),e.qZA(),e.TgZ(3,"div",11)(4,"textarea",23),e._uU(5,"            "),e.qZA()()())}function id(n,s){1&n&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,24),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",25),e.qZA()())}function Al(n,s){1&n&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,26),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",27),e.qZA()())}function kl(n,s){if(1&n&&(e.TgZ(0,"span",30)(1,"span",31),e._uU(2),e.qZA()()),2&n){const t=s.$implicit;e.xp6(2),e.Oqu(t)}}function Gu(n,s){if(1&n&&(e.TgZ(0,"div",8)(1,"label",9),e.SDv(2,28),e.qZA(),e.TgZ(3,"div",11),e.YNc(4,kl,3,1,"span",29),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngForOf",t.configForm.getValue("services"))}}function ul(n,s){if(1&n&&(e.TgZ(0,"div",8)(1,"label",32),e._uU(2),e.qZA(),e.TgZ(3,"div",11)(4,"select",33)(5,"option",34),e.SDv(6,35),e.qZA(),e.TgZ(7,"option",34),e.SDv(8,36),e.qZA(),e.TgZ(9,"option",34),e.SDv(10,37),e.qZA()()()()),2&n){const t=e.oxw().$implicit;e.xp6(1),e.Q6J("for",t),e.xp6(1),e.hij("",t," "),e.xp6(2),e.Q6J("formControlName",t),e.xp6(1),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngValue",!0),e.xp6(2),e.Q6J("ngValue",!1)}}function Cu(n,s){if(1&n&&(e.TgZ(0,"span",40),e._uU(1),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.hij(" ",t.patternHelpText," ")}}function cn(n,s){if(1&n&&(e.TgZ(0,"span",40),e._uU(1),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.hij(" ",t.patternHelpText," ")}}function Ec(n,s){if(1&n&&(e.TgZ(0,"span",40),e.SDv(1,41),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.pQV(t.maxValue),e.QtT(1)}}function Iu(n,s){if(1&n&&(e.TgZ(0,"span",40),e.SDv(1,42),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.pQV(t.minValue),e.QtT(1)}}function qa(n,s){if(1&n&&(e.TgZ(0,"div",8)(1,"label",32),e._uU(2),e.qZA(),e.TgZ(3,"div",11),e._UZ(4,"input",38),e.YNc(5,Cu,2,1,"span",39),e.YNc(6,cn,2,1,"span",39),e.YNc(7,Ec,2,1,"span",39),e.YNc(8,Iu,2,1,"span",39),e.qZA()()),2&n){const t=e.oxw().$implicit;e.oxw();const o=e.MAs(2),l=e.oxw();e.xp6(1),e.Q6J("for",t),e.xp6(1),e.hij("",t," "),e.xp6(2),e.Q6J("type",l.inputType)("id",t)("placeholder",l.humanReadableType)("formControlName",t)("step",l.getStep(l.type,l.configForm.getValue(t))),e.xp6(1),e.Q6J("ngIf",l.configForm.showError(t,o,"pattern")),e.xp6(1),e.Q6J("ngIf",l.configForm.showError(t,o,"invalidUuid")),e.xp6(1),e.Q6J("ngIf",l.configForm.showError(t,o,"max")),e.xp6(1),e.Q6J("ngIf",l.configForm.showError(t,o,"min"))}}function cl(n,s){if(1&n&&(e.ynx(0),e.YNc(1,ul,11,6,"div",13),e.YNc(2,qa,9,11,"div",13),e.BQk()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf","bool"===t.type),e.xp6(1),e.Q6J("ngIf","bool"!==t.type)}}function xf(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.ynx(5,6),e._uU(6,"Edit"),e.BQk(),e._uU(7),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9),e.SDv(11,10),e.qZA(),e.TgZ(12,"div",11),e._UZ(13,"input",12),e.qZA()(),e.YNc(14,gf,6,0,"div",13),e.YNc(15,zd,6,0,"div",13),e.YNc(16,id,5,0,"div",13),e.YNc(17,Al,5,0,"div",13),e.YNc(18,Gu,5,1,"div",13),e.TgZ(19,"div",14)(20,"h3",15),e.SDv(21,16),e.qZA(),e.YNc(22,cl,3,2,"ng-container",17),e.qZA()(),e.TgZ(23,"div",18)(24,"cd-form-button-panel",19),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw().submit()}),e.qZA()()()()()}if(2&n){const t=e.oxw();e.xp6(1),e.Q6J("formGroup",t.configForm),e.xp6(6),e.hij(" ",t.configForm.getValue("name")," "),e.xp6(7),e.Q6J("ngIf",t.configForm.getValue("desc")),e.xp6(1),e.Q6J("ngIf",t.configForm.getValue("long_desc")),e.xp6(1),e.Q6J("ngIf",""!==t.configForm.getValue("default")),e.xp6(1),e.Q6J("ngIf",""!==t.configForm.getValue("daemon_default")),e.xp6(1),e.Q6J("ngIf",t.configForm.getValue("services").length>0),e.xp6(4),e.Q6J("ngForOf",t.availSections),e.xp6(2),e.Q6J("form",t.configForm)("submitText",t.actionLabels.UPDATE)}}let Bc=(()=>{class n extends Ul.E{constructor(t,o,l,_,C){super(),this.actionLabels=t,this.route=o,this.router=l,this.configService=_,this.notificationService=C,this.availSections=["global","mon","mgr","osd","mds","client"],this.createForm()}createForm(){const t={name:new En.NI({value:null}),desc:new En.NI({value:null}),long_desc:new En.NI({value:null}),values:new En.cw({}),default:new En.NI({value:null}),daemon_default:new En.NI({value:null}),services:new En.NI([])};this.availSections.forEach(o=>{t.values.addControl(o,new En.NI(null))}),this.configForm=new tc.d(t)}ngOnInit(){this.route.params.subscribe(t=>{this.configService.get(t.name).subscribe(l=>{this.setResponse(l),this.loadingReady()})})}getValidators(t){const o=ju.getTypeValidators(t);if(o)return this.patternHelpText=o.patternHelpText,"max"in o&&""!==o.max&&(this.maxValue=o.max),"min"in o&&""!==o.min&&(this.minValue=o.min),o.validators}getStep(t,o){return ju.getTypeStep(t,o)}setResponse(t){this.response=t;const o=this.getValidators(t);this.configForm.get("name").setValue(t.name),this.configForm.get("desc").setValue(t.desc),this.configForm.get("long_desc").setValue(t.long_desc),this.configForm.get("default").setValue(t.default),this.configForm.get("daemon_default").setValue(t.daemon_default),this.configForm.get("services").setValue(t.services),this.response.value&&this.response.value.forEach(_=>{let C=null;C="true"===_.value||"false"!==_.value&&_.value,this.configForm.get("values").get(_.section).setValue(C)}),this.availSections.forEach(_=>{this.configForm.get("values").get(_).setValidators(o)});const l=ju.getType(t.type);this.type=l.name,this.inputType=l.inputType,this.humanReadableType=l.humanReadable}createRequest(){const t=[];if(this.availSections.forEach(o=>{const l=this.configForm.getValue(o);null!==l&&""!==l&&t.push({section:o,value:l})}),!Sr().isEqual(this.response.value,t)){const o=new gd;return o.name=this.configForm.getValue("name"),o.value=t,o}return null}submit(){const t=this.createRequest();t&&this.configService.create(t).subscribe(()=>{this.notificationService.show(Ta.k.success,"Updated config option " + t.name + ""),this.router.navigate(["/configuration"])},()=>{this.configForm.setErrors({cdSubmitButton:!0})}),this.router.navigate(["/configuration"])}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(Io.gz),e.Y36(Io.F0),e.Y36(Fc.e),e.Y36(Tl.g))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-configuration-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le;return s="Name",t="Values",o="Description",l="Long description",_="Default",C="Daemon default",R="Services",N="-- Default --",V="true",Q="false",oe="The entered value is too high! It must not be greater than " + "\ufffd0\ufffd" + ".",le="The entered value is too low! It must not be lower than " + "\ufffd0\ufffd" + ".",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","configForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],["i18",""],[1,"card-body"],[1,"form-group","row"],[1,"cd-col-form-label"],s,[1,"cd-col-form-input"],["type","text","id","name","formControlName","name","readonly","",1,"form-control"],["class","form-group row",4,"ngIf"],["formGroupName","values"],[1,"cd-header"],t,[4,"ngFor","ngForOf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],o,["id","desc","formControlName","desc","readonly","",1,"form-control","resize-vertical"],l,["id","long_desc","formControlName","long_desc","readonly","",1,"form-control","resize-vertical"],_,["type","text","id","default","formControlName","default","readonly","",1,"form-control"],C,["type","text","id","daemon_default","formControlName","daemon_default","readonly","",1,"form-control"],R,["class","form-component-badge",4,"ngFor","ngForOf"],[1,"form-component-badge"],[1,"badge","badge-dark"],[1,"cd-col-form-label",3,"for"],["id","pool","name","pool",1,"form-select",3,"formControlName"],[3,"ngValue"],N,V,Q,[1,"form-control",3,"type","id","placeholder","formControlName","step"],["class","invalid-feedback",4,"ngIf"],[1,"invalid-feedback"],oe,le]},template:function(t,o){1&t&&e.YNc(0,xf,25,10,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},directives:[cu.y,En._Y,En.JL,Oa.V,En.sg,ll.P,ge.o,En.Fj,Ll.b,En.JJ,En.u,p.O5,p.sg,En.x0,En.EJ,En.YN,En.Kr,Ml.p],styles:[".form-component-badge[_ngcontent-%COMP%]{display:block;height:34px}.form-component-badge[_ngcontent-%COMP%]   span[_ngcontent-%COMP%]{margin-top:7px}.resize-vertical[_ngcontent-%COMP%]{resize:vertical}"]}),n})();var vd=i(68962);function dc(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e._UZ(2,"br"),e.qZA()),2&n){const t=s.$implicit,o=s.last;e.xp6(1),e.lnq(" ",t.section,": ",t.value,"",o?"":",","")}}function yd(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",23)(2,"span",24),e._uU(3),e.ALo(4,"uppercase"),e.qZA()()()),2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(1),e.s9C("title",o.flags[t]),e.xp6(2),e.Oqu(e.lcZ(4,2,t))}}function $p(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",24),e._uU(2),e.qZA()()),2&n){const t=s.$implicit;e.xp6(2),e.Oqu(t)}}function vf(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"table",1)(2,"tbody")(3,"tr")(4,"td",2),e.SDv(5,3),e.qZA(),e.TgZ(6,"td",4),e._uU(7),e.qZA()(),e.TgZ(8,"tr")(9,"td",5),e.SDv(10,6),e.qZA(),e.TgZ(11,"td"),e._uU(12),e.qZA()(),e.TgZ(13,"tr")(14,"td",5),e.SDv(15,7),e.qZA(),e.TgZ(16,"td"),e._uU(17),e.qZA()(),e.TgZ(18,"tr")(19,"td",5),e.SDv(20,8),e.qZA(),e.TgZ(21,"td"),e.YNc(22,dc,3,3,"span",9),e.qZA()(),e.TgZ(23,"tr")(24,"td",5),e.SDv(25,10),e.qZA(),e.TgZ(26,"td"),e._uU(27),e.qZA()(),e.TgZ(28,"tr")(29,"td",5),e.SDv(30,11),e.qZA(),e.TgZ(31,"td"),e._uU(32),e.qZA()(),e.TgZ(33,"tr")(34,"td",5),e.SDv(35,12),e.qZA(),e.TgZ(36,"td"),e._uU(37),e.qZA()(),e.TgZ(38,"tr")(39,"td",5),e.SDv(40,13),e.qZA(),e.TgZ(41,"td"),e._uU(42),e.qZA()(),e.TgZ(43,"tr")(44,"td",5),e.SDv(45,14),e.qZA(),e.TgZ(46,"td"),e._uU(47),e.qZA()(),e.TgZ(48,"tr")(49,"td",5),e.SDv(50,15),e.qZA(),e.TgZ(51,"td"),e.YNc(52,yd,5,4,"span",9),e.qZA()(),e.TgZ(53,"tr")(54,"td",5),e.SDv(55,16),e.qZA(),e.TgZ(56,"td"),e.YNc(57,$p,3,1,"span",9),e.qZA()(),e.TgZ(58,"tr")(59,"td",5),e.SDv(60,17),e.qZA(),e.TgZ(61,"td"),e._uU(62),e.qZA()(),e.TgZ(63,"tr")(64,"td",5),e.SDv(65,18),e.qZA(),e.TgZ(66,"td"),e._uU(67),e.qZA()(),e.TgZ(68,"tr")(69,"td",5),e.SDv(70,19),e.qZA(),e.TgZ(71,"td"),e._uU(72),e.ALo(73,"booleanText"),e.qZA()(),e.TgZ(74,"tr")(75,"td",5),e.SDv(76,20),e.qZA(),e.TgZ(77,"td"),e._uU(78),e.qZA()(),e.TgZ(79,"tr")(80,"td",5),e.SDv(81,21),e.qZA(),e.TgZ(82,"td"),e._uU(83),e.qZA()(),e.TgZ(84,"tr")(85,"td",5),e.SDv(86,22),e.qZA(),e.TgZ(87,"td"),e._uU(88),e.qZA()()()(),e.BQk()),2&n){const t=e.oxw();e.xp6(7),e.Oqu(t.selection.name),e.xp6(5),e.Oqu(t.selection.desc),e.xp6(5),e.Oqu(t.selection.long_desc),e.xp6(5),e.Q6J("ngForOf",t.selection.value),e.xp6(5),e.Oqu(t.selection.default),e.xp6(5),e.Oqu(t.selection.daemon_default),e.xp6(5),e.Oqu(t.selection.type),e.xp6(5),e.Oqu(t.selection.min),e.xp6(5),e.Oqu(t.selection.max),e.xp6(5),e.Q6J("ngForOf",t.selection.flags),e.xp6(5),e.Q6J("ngForOf",t.selection.services),e.xp6(5),e.Oqu(t.selection.source),e.xp6(5),e.Oqu(t.selection.level),e.xp6(5),e.Oqu(e.lcZ(73,17,t.selection.can_update_at_runtime)),e.xp6(6),e.Oqu(t.selection.tags),e.xp6(5),e.Oqu(t.selection.enum_values),e.xp6(5),e.Oqu(t.selection.see_also)}}let ap=(()=>{class n{constructor(){this.flags={runtime:"The value can be updated at runtime.",no_mon_update:"Daemons/clients do not pull this value from the\n      monitor config database. We disallow setting this option via 'ceph config\n      set ...'. This option should be configured via ceph.conf or via the\n      command line.",startup:"Option takes effect only during daemon startup.",cluster_create:"Option only affects cluster creation.",create:"Option only affects daemon creation."}}ngOnChanges(){this.selection&&(this.selection.services=Sr().split(this.selection.services,","))}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-configuration-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke;return s="Name",t="Description",o="Long description",l="Current values",_="Default",C="Daemon default",R="Type",N="Min",V="Max",Q="Flags",oe="Services",le="Source",_e="Level",ye="Can be updated at runtime (editable)",$e="Tags",Ie="Enum values",ke="See also",[[4,"ngIf"],[1,"table","table-striped","table-bordered"],[1,"bold","w-25"],s,[1,"w-75"],[1,"bold"],t,o,l,[4,"ngFor","ngForOf"],_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke,[3,"title"],[1,"badge","badge-dark","me-2"]]},template:function(t,o){1&t&&e.YNc(0,vf,89,19,"ng-container",0),2&t&&e.Q6J("ngIf",o.selection)},directives:[p.O5,p.sg],pipes:[p.gd,vd.T],styles:[""]}),n})();const Vu=["confValTpl"],fc=["confFlagTpl"];function Wd(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e._UZ(2,"br"),e.qZA()),2&n){const t=s.$implicit,o=s.last;e.xp6(1),e.lnq(" ",t.section,": ",t.value,"",o?"":",","")}}function Rf(n,s){if(1&n&&(e.TgZ(0,"span"),e.YNc(1,Wd,3,3,"span",5),e.qZA()),2&n){const t=e.oxw().value;e.xp6(1),e.Q6J("ngForOf",t)}}function yp(n,s){1&n&&e.YNc(0,Rf,2,1,"span",4),2&n&&e.Q6J("ngIf",s.value)}let Lc=(()=>{class n extends It.o{constructor(t,o,l){super(),this.authStorageService=t,this.configurationService=o,this.actionLabels=l,this.data=[],this.icons=wo.P,this.selection=new _n.r,this.filters=[{name:"Level",prop:"level",filterOptions:["basic","advanced","dev"],filterInitValue:"basic",filterPredicate:(R,N)=>{let V;var oe;return(oe=V||(V={}))[oe.basic=0]="basic",oe[oe.advanced=1]="advanced",oe[oe.dev=2]="dev",V[R.level]<=V[N]}},{name:"Service",prop:"services",filterOptions:["mon","mgr","osd","mds","common","mds_client","rgw"],filterPredicate:(R,N)=>R.services.includes(N)},{name:"Source",prop:"source",filterOptions:["mon"],filterPredicate:(R,N)=>!!R.hasOwnProperty("source")&&R.source.includes(N)},{name:"Modified",prop:"modified",filterOptions:["yes","no"],filterPredicate:(R,N)=>!!("yes"===N&&R.hasOwnProperty("value")||"no"===N&&!R.hasOwnProperty("value"))}],this.permission=this.authStorageService.getPermissions().configOpt;const _=()=>this.selection.first()&&`${encodeURIComponent(this.selection.first().name)}`;this.tableActions=[{permission:"update",icon:wo.P.edit,routerLink:()=>`/configuration/edit/${_()}`,name:this.actionLabels.EDIT,disable:()=>!this.isEditable(this.selection)}]}ngOnInit(){this.columns=[{canAutoResize:!0,prop:"name",name:"Name"},{prop:"desc",name:"Description",cellClass:"wrap"},{prop:"value",name:"Current value",cellClass:"wrap",cellTemplate:this.confValTpl},{prop:"default",name:"Default",cellClass:"wrap"},{prop:"can_update_at_runtime",name:"Editable",cellTransformation:Ht.e.checkIcon,flexGrow:.4,cellClass:"text-center"}]}updateSelection(t){this.selection=t}getConfigurationList(t){this.configurationService.getConfigData().subscribe(o=>{this.data=o},()=>{t.error()})}isEditable(t){return 1===t.selected.length&&t.selected[0].can_update_at_runtime}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(Fc.e),e.Y36(Mo.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-configuration"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Vu,7),e.Gf(fc,5)),2&t){let l;e.iGM(l=e.CRH())&&(o.confValTpl=l.first),e.iGM(l=e.CRH())&&(o.confFlagTpl=l.first)}},features:[e.qOj],decls:5,vars:8,consts:[["selectionType","single",3,"data","columns","extraFilterableColumns","hasDetails","fetchData","setExpandedRow","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["confValTpl",""],[4,"ngIf"],[4,"ngFor","ngForOf"]],template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(_){return o.getConfigurationList(_)})("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e._UZ(1,"cd-table-actions",1)(2,"cd-configuration-details",2),e.qZA(),e.YNc(3,yp,1,1,"ng-template",null,3,e.W1O)),2&t&&(e.Q6J("data",o.data)("columns",o.columns)("extraFilterableColumns",o.filters)("hasDetails",!0),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},directives:[Tr.a,Tu.K,ap,p.O5,p.sg],styles:[".filter[_ngcontent-%COMP%]{padding-right:8px}.fa-stack[_ngcontent-%COMP%]{font-size:.79rem}.fa-stack[_ngcontent-%COMP%]   .fa-stack-1x[_ngcontent-%COMP%]{margin-left:8px;margin-top:5px}  cd-configuration datatable-body-cell.wrap{word-break:break-all}"]}),n})();var Fu=i(35758),od=i(68939),nc=i(25917),Aa=i(88002),Wc=i(42145),sd=i(548),lp=i(95242),$d=i(34022);function pu(n,s,t){return 0===t?[s]:(n.push(s),n)}function $l(){return function vo(n,s){return arguments.length>=2?function(o){return(0,$d.z)((0,Wc.R)(n,s),(0,sd.h)(1),(0,lp.d)(s))(o)}:function(o){return(0,$d.z)((0,Wc.R)((l,_,C)=>n(l,_,C+1)),(0,sd.h)(1))(o)}}(pu,[])}var Ac=i(19773),ga=i(76189),Dc=i(51295);let Lu=(()=>{class n{calculateAdditionalData(t){if(!t.life_expectancy_min||!t.life_expectancy_max)return t.state="unknown",t;const o=N=>!!Number.parseFloat(N),l=(N,V)=>N&&V&&o(N)&&o(V)?ls().duration(ls()(N).diff(ls()(V))).asWeeks():null,_=ls().duration(ls()(ls().now()).diff(ls()(t.life_expectancy_stamp))).asWeeks(),C=l(t.life_expectancy_max,t.life_expectancy_stamp),R=l(t.life_expectancy_min,t.life_expectancy_stamp);return t.state=_>1?"stale":null!==C&&C<=2?"bad":null!==R&&R<=4?"warning":"good",t.life_expectancy_weeks={max:null!==C?Math.round(C):null,min:null!==R?Math.round(R):null},t}readable(t){return t.readableDaemons=t.daemons.join(" "),t}prepareDevice(t){return this.readable(this.calculateAdditionalData(t))}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),bc=(()=>{class n extends ga.S{constructor(t,o){super(),this.http=t,this.deviceService=o,this.baseURL="api/host",this.baseUIURL="ui-api/host",this.predefinedLabels=["mon","mgr","osd","mds","rgw","nfs","iscsi","rbd","grafana"]}list(t){return this.http.get(this.baseURL,{headers:{Accept:this.getVersionHeaderValue(1,2)},params:{facts:t}})}create(t,o,l,_){return this.http.post(this.baseURL,{hostname:t,addr:o,labels:l,status:_},{observe:"response",headers:{Accept:Dc.T.cdVersionHeader("0","1")}})}delete(t){return this.http.delete(`${this.baseURL}/${t}`,{observe:"response"})}getDevices(t){return this.http.get(`${this.baseURL}/${t}/devices`).pipe((0,Aa.U)(o=>o.map(l=>this.deviceService.prepareDevice(l))))}getSmartData(t){return this.http.get(`${this.baseURL}/${t}/smart`)}getDaemons(t){return this.http.get(`${this.baseURL}/${t}/daemons`)}getLabels(){return this.http.get(`${this.baseUIURL}/labels`)}update(t,o=!1,l=[],_=!1,C=!1,R=!1){return this.http.put(`${this.baseURL}/${t}`,{update_labels:o,labels:l,maintenance:_,force:C,drain:R},{headers:{Accept:this.getVersionHeaderValue(0,1)}})}identifyDevice(t,o,l){return this.http.post(`${this.baseURL}/${t}/identify_device`,{device:o,duration:l})}getInventoryParams(t){let o=new g.LE;return t&&(o=o.append("refresh",Sr().toString(t))),o}getInventory(t,o){const l=this.getInventoryParams(o);return this.http.get(`${this.baseURL}/${t}/inventory`,{params:l})}inventoryList(t){const o=this.getInventoryParams(t);return this.http.get(`${this.baseUIURL}/inventory`,{params:o})}inventoryDeviceList(t,o){let l;return l=t?this.getInventory(t,o).pipe($l()):this.inventoryList(o),l.pipe((0,Ac.zg)(_=>{const C=Sr().flatMap(_,R=>R.devices.map(N=>(N.hostname=R.name,N.uid=N.device_id?`${N.device_id}-${N.hostname}-${N.path}`:`${N.hostname}-${N.path}`,N)));return(0,nc.of)(C)}))}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN),e.LFG(Lu))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),rc=(()=>{class n{constructor(t,o){this.http=t,this.deviceService=o,this.path="api/osd",this.uiPath="ui-api/osd",this.osdDevices=[],this.osdRecvSpeedModalPriorities={KNOWN_PRIORITIES:[{name:null,text:"-- Select the priority --",values:{osd_max_backfills:null,osd_recovery_max_active:null,osd_recovery_max_single_start:null,osd_recovery_sleep:null}},{name:"low",text:"Low",values:{osd_max_backfills:1,osd_recovery_max_active:1,osd_recovery_max_single_start:1,osd_recovery_sleep:.5}},{name:"default",text:"Default",values:{osd_max_backfills:1,osd_recovery_max_active:3,osd_recovery_max_single_start:1,osd_recovery_sleep:0}},{name:"high",text:"High",values:{osd_max_backfills:4,osd_recovery_max_active:4,osd_recovery_max_single_start:4,osd_recovery_sleep:0}}]}}create(t,o,l="drive_groups"){return this.http.post(this.path,{method:l,data:t,tracking_id:o},{observe:"response"})}getList(){return this.http.get(`${this.path}`)}getOsdSettings(){return this.http.get(`${this.path}/settings`,{headers:{Accept:"application/vnd.ceph.api.v0.1+json"}})}getDetails(t){return this.http.get(`${this.path}/${t}`)}getSmartData(t){return this.http.get(`${this.path}/${t}/smart`)}scrub(t,o){return this.http.post(`${this.path}/${t}/scrub?deep=${o}`,null)}getDeploymentOptions(){return this.http.get(`${this.uiPath}/deployment_options`)}getFlags(){return this.http.get(`${this.path}/flags`)}updateFlags(t){return this.http.put(`${this.path}/flags`,{flags:t})}updateIndividualFlags(t,o){return this.http.put(`${this.path}/flags/individual`,{flags:t,ids:o})}markOut(t){return this.http.put(`${this.path}/${t}/mark`,{action:"out"})}markIn(t){return this.http.put(`${this.path}/${t}/mark`,{action:"in"})}markDown(t){return this.http.put(`${this.path}/${t}/mark`,{action:"down"})}reweight(t,o){return this.http.post(`${this.path}/${t}/reweight`,{weight:o})}update(t,o){return this.http.put(`${this.path}/${t}`,{device_class:o})}markLost(t){return this.http.put(`${this.path}/${t}/mark`,{action:"lost"})}purge(t){return this.http.post(`${this.path}/${t}/purge`,null)}destroy(t){return this.http.post(`${this.path}/${t}/destroy`,null)}delete(t,o,l){return this.http.delete(`${this.path}/${t}`,{observe:"response",params:{preserve_id:o?"true":"false",force:l?"true":"false"}})}safeToDestroy(t){return this.http.get(`${this.path}/safe_to_destroy?ids=${t}`)}safeToDelete(t){return this.http.get(`${this.path}/safe_to_delete?svc_ids=${t}`)}getDevices(t){return this.http.get(`${this.path}/${t}/devices`).pipe((0,Aa.U)(o=>o.map(l=>this.deviceService.prepareDevice(l))))}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN),e.LFG(Lu))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var Ql=i(76111),Sc=i(32337),Tc=i(26215);const Zu=[{stepIndex:1,isComplete:!1}];let hu=(()=>{class n{constructor(){this.currentStep$=new Tc.X(null),this.steps$=new Tc.X(Zu),this.currentStep$.next(this.steps$.value[0])}setTotalSteps(t){const o=[];for(let l=1;l<=t;l++)o.push({stepIndex:l,isComplete:!1});this.steps$=new Tc.X(o)}setCurrentStep(t){this.currentStep$.next(t)}getCurrentStep(){return this.currentStep$.asObservable()}getSteps(){return this.steps$.asObservable()}moveToNextStep(){this.currentStep$.next(this.steps$.value[this.currentStep$.value.stepIndex])}moveToPreviousStep(){this.currentStep$.next(this.steps$.value[this.currentStep$.value.stepIndex-1-1])}isLastStep(){return this.currentStep$.value.stepIndex===this.steps$.value.length}isFirstStep(){var t;return(null===(t=this.currentStep$.value)||void 0===t?void 0:t.stepIndex)-1==0}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var Uc=i(28211);class pc{constructor(){this.reset(),this.formatterService=new Uc.H,this.deviceSelectionAttrs={"sys_api.vendor":{name:"vendor"},"sys_api.model":{name:"model"},device_id:{name:"device_id"},human_readable_type:{name:"rotational",formatter:s=>"hdd"===s.toLowerCase()},"sys_api.size":{name:"size",formatter:s=>this.formatterService.format_number(s,1024,["B","KB","MB","GB","TB","PB"]).replace(" ","")}}}reset(){this.spec={service_type:"osd",service_id:`dashboard-${Sr().now()}`}}setName(s){this.spec.service_id=s}setHostPattern(s){this.spec.host_pattern=s}setDeviceSelection(s,t){const o=`${s}_devices`;this.spec[o]={},t.forEach(l=>{const _=this.deviceSelectionAttrs[l.prop];_&&(this.spec[o][_.name]=_.formatter?_.formatter(l.value.raw):l.value.raw)})}clearDeviceSelection(s){delete this.spec[`${s}_devices`]}setSlots(s,t){const o=`${s}_slots`;0===t?delete this.spec[o]:this.spec[o]=t}setFeature(s,t){t?this.spec[s]=!0:delete this.spec[s]}}let Jd=(()=>{class n{constructor(t){this.http=t,this.baseURL="api/cluster"}getStatus(){return this.http.get(`${this.baseURL}`,{headers:{Accept:"application/vnd.ceph.api.v0.1+json"}})}updateStatus(t){return this.http.put(`${this.baseURL}`,{status:t},{headers:{Accept:"application/vnd.ceph.api.v0.1+json"}})}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();const Jc=function(n){return{active:n}};function Nl(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"ul",4)(1,"li",5)(2,"a",6),e.NdJ("click",function(){const _=e.CHM(t).$implicit;return e.oxw().onStepClick(_)}),e.TgZ(3,"span",7),e.SDv(4,8),e.qZA(),e.TgZ(5,"span"),e.SDv(6,9),e.qZA()()()()}if(2&n){const t=s.$implicit,o=s.index,l=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(4,Jc,l.currentStep.stepIndex===t.stepIndex)),e.xp6(1),e.Q6J("ngClass",e.VKq(6,Jc,l.currentStep.stepIndex===t.stepIndex)),e.xp6(1),e.pQV(t.stepIndex),e.QtT(4),e.xp6(2),e.pQV(l.stepsTitle[o]),e.QtT(6)}}let Yc=(()=>{class n{constructor(t){this.stepsService=t}ngOnInit(){this.stepsService.setTotalSteps(this.stepsTitle.length),this.steps=this.stepsService.getSteps(),this.currentStepSub=this.stepsService.getCurrentStep().subscribe(t=>{this.currentStep=t})}onStepClick(t){this.stepsService.setCurrentStep(t)}ngOnDestroy(){this.currentStepSub.unsubscribe()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(hu))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-wizard"]],inputs:{stepsTitle:"stepsTitle"},decls:5,vars:3,consts:function(){let s,t;return s="" + "\ufffd0\ufffd" + "",t="" + "\ufffd0\ufffd" + "",[[1,"card-body"],[1,"row","m-7"],[1,"col"],["class","nav nav-pills flex-column",4,"ngFor","ngForOf"],[1,"nav","nav-pills","flex-column"],[1,"nav-item"],[1,"nav-link",3,"ngClass","click"],[1,"circle-step",3,"ngClass"],s,t]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"nav",2),e.YNc(3,Nl,7,8,"ul",3),e.ALo(4,"async"),e.qZA()()()),2&t&&(e.xp6(3),e.Q6J("ngForOf",e.lcZ(4,1,o.steps)))},directives:[p.sg,p.mk],pipes:[p.Ov],styles:["cd-wizard{width:15%}.card-body[_ngcontent-%COMP%]{padding-left:0}span.circle-step[_ngcontent-%COMP%]{background:#adb5bd;border-radius:.8em;color:#fff;display:inline-block;font-weight:700;line-height:1.6em;margin-right:5px;text-align:center;width:1.6em}span.circle-step.active[_ngcontent-%COMP%]{background-color:#25828e}.nav-pills[_ngcontent-%COMP%]   .nav-link[_ngcontent-%COMP%]{background-color:#fff;color:#343a40}.nav-pills[_ngcontent-%COMP%]   .nav-link.active[_ngcontent-%COMP%]{color:#25828e}"]}),n})();var ic=i(13464);let h=(()=>{class n{constructor(t){this.http=t,this.url="ui-api/orchestrator",this.disableMessages={noOrchestrator:"The feature is disabled because Orchestrator is not available.",missingFeature:"The Orchestrator backend doesn't support this feature."}}status(){return this.http.get(`${this.url}/status`)}hasFeature(t,o){return Sr().every(o,l=>Sr().get(t.features,`${l}.available`))}getTableActionDisableDesc(t,o){return!!t&&(t.available?!this.hasFeature(t,o)&&this.disableMessages.missingFeature:this.disableMessages.noOrchestrator)}getName(){return this.http.get(`${this.url}/get_name`)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var E=i(7022),P=(()=>{return(n=P||(P={})).HOST_LIST="get_hosts",n.HOST_ADD="add_host",n.HOST_REMOVE="remove_host",n.HOST_LABEL_ADD="add_host_label",n.HOST_LABEL_REMOVE="remove_host_label",n.HOST_MAINTENANCE_ENTER="enter_host_maintenance",n.HOST_MAINTENANCE_EXIT="exit_host_maintenance",n.HOST_FACTS="get_facts",n.HOST_DRAIN="drain_host",n.SERVICE_LIST="describe_service",n.SERVICE_CREATE="apply",n.SERVICE_EDIT="apply",n.SERVICE_DELETE="remove_service",n.SERVICE_RELOAD="service_action",n.DAEMON_LIST="list_daemons",n.OSD_GET_REMOVE_STATUS="remove_osds_status",n.OSD_CREATE="apply_drivegroups",n.OSD_DELETE="remove_osds",n.DEVICE_LIST="get_inventory",n.DEVICE_BLINK_LIGHT="blink_device_light",P;var n})(),L=i(41039),X=i(51847),de=i(33512),ve=i.n(de),Ye=i(60312),xe=i(18372),nt=i(82945),St=i(60192),Mt=i(10545);function fn(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,25),e.qZA())}function jn(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,26),e.qZA())}function Vn(n,s){1&n&&(e.TgZ(0,"span",24),e.SDv(1,30),e.qZA())}function fr(n,s){if(1&n&&(e.TgZ(0,"div",8)(1,"label",27),e.SDv(2,28),e.qZA(),e.TgZ(3,"div",15),e._UZ(4,"input",29),e.YNc(5,Vn,2,0,"span",17),e.qZA()()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",o.hostForm.showError("addr",t,"pattern"))}}function $r(n,s){1&n&&(e.TgZ(0,"div",8)(1,"div",31)(2,"div",32),e._UZ(3,"input",33),e.TgZ(4,"label",34),e.SDv(5,35),e.qZA()()()())}function Ui(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div")(1,"form",5,6)(3,"div",7)(4,"div",8)(5,"label",9),e.ynx(6),e.SDv(7,10),e.BQk(),e.TgZ(8,"cd-helper")(9,"p"),e.SDv(10,11),e.qZA(),e.TgZ(11,"ul")(12,"li"),e.tHW(13,12),e._UZ(14,"samp"),e.N_p(),e.qZA(),e.TgZ(15,"li"),e.tHW(16,13),e._UZ(17,"samp"),e.N_p(),e.qZA(),e.TgZ(18,"li"),e.tHW(19,14),e._UZ(20,"samp"),e.N_p(),e.qZA()()()(),e.TgZ(21,"div",15)(22,"input",16),e.NdJ("keyup",function(){return e.CHM(t),e.oxw().checkHostNameValue()}),e.qZA(),e.YNc(23,fn,2,0,"span",17),e.YNc(24,jn,2,0,"span",17),e.qZA()(),e.YNc(25,fr,6,1,"div",18),e.TgZ(26,"div",8)(27,"label",19),e.SDv(28,20),e.qZA(),e.TgZ(29,"div",15),e._UZ(30,"cd-select-badges",21),e.qZA()(),e.YNc(31,$r,6,0,"div",18),e.qZA(),e.TgZ(32,"div",22)(33,"cd-form-button-panel",23),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw().submit()}),e.ALo(34,"titlecase"),e.ALo(35,"upperFirst"),e.qZA()()()()}if(2&n){const t=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("formGroup",o.hostForm),e.xp6(22),e.Q6J("ngIf",o.hostForm.showError("hostname",t,"required")),e.xp6(1),e.Q6J("ngIf",o.hostForm.showError("hostname",t,"uniqueName")),e.xp6(1),e.Q6J("ngIf",!o.hostPattern),e.xp6(5),e.Q6J("data",o.hostForm.controls.labels.value)("options",o.labelsOption)("customBadges",!0)("messages",o.messages),e.xp6(1),e.Q6J("ngIf",!o.hideMaintenance),e.xp6(2),e.Q6J("form",o.hostForm)("submitText",e.lcZ(34,11,o.action)+" "+e.lcZ(35,13,o.resource))}}let is=(()=>{class n extends Ul.E{constructor(t,o,l,_,C){super(),this.router=t,this.actionLabels=o,this.hostService=l,this.taskWrapper=_,this.activeModal=C,this.hostnameArray=[],this.hostPattern=!1,this.labelsOption=[],this.messages=new E.a({empty:"There are no labels.",filter:"Filter or add labels",add:"Add label"}),this.resource="host",this.action=this.actionLabels.ADD}ngOnInit(){this.router.url.includes("hosts")&&(this.pageURL="hosts"),this.createForm(),this.hostService.list("false").subscribe(t=>{this.hostnames=t.map(o=>o.hostname),this.loadingReady()}),this.hostService.getLabels().subscribe(t=>{const o=new Set(t.concat(this.hostService.predefinedLabels));this.labelsOption=Array.from(o).map(l=>({enabled:!0,name:l,selected:!1,description:null}))})}checkHostNameValue(){this.hostPattern=!!this.hostForm.get("hostname").value.match(/[()\[\]{},]/g)}createForm(){this.hostForm=new tc.d({hostname:new En.NI("",{validators:[En.kI.required,Ae.h.custom("uniqueName",t=>this.hostnames&&-1!==this.hostnames.indexOf(t))]}),addr:new En.NI("",{validators:[Ae.h.ip()]}),labels:new En.NI([]),maintenance:new En.NI(!1)})}isCommaSeparatedPattern(t){return t.includes(",")}isRangeTypePattern(t){return t.includes("[")&&t.includes("]")&&!t.match(/(?![^(]*\)),/g)}replaceBraces(t){return t.replace(/(\d)\s*-\s*(\d)/g,"$1..$2").replace(/\(/g,"{").replace(/\)/g,"}").replace(/\[/g,"{").replace(/]/g,"}")}checkHostNamePattern(t){if(this.isRangeTypePattern(t)){const o=this.replaceBraces(t);this.hostnameArray=ve()(o)}else if(this.isCommaSeparatedPattern(t)){let o=[];o=t.split(","),o.forEach(l=>{if(this.isRangeTypePattern(l)){const _=this.replaceBraces(l);this.hostnameArray=this.hostnameArray.concat(ve()(_))}else this.hostnameArray.push(l)})}else this.hostnameArray.push(t)}submit(){const t=this.hostForm.get("hostname").value;this.checkHostNamePattern(t),this.addr=this.hostForm.get("addr").value,this.status=this.hostForm.get("maintenance").value?"maintenance":"",this.allLabels=this.hostForm.get("labels").value,"hosts"!==this.pageURL&&!this.allLabels.includes("_no_schedule")&&this.allLabels.push("_no_schedule"),this.hostnameArray.forEach(o=>{this.taskWrapper.wrapTaskAroundCall({task:new Ql.R("host/"+Mo.MQ.ADD,{hostname:o}),call:this.hostService.create(o,this.addr,this.allLabels,this.status)}).subscribe({error:()=>{this.hostForm.setErrors({cdSubmitButton:!0})},complete:()=>{"hosts"===this.pageURL?this.router.navigate([this.pageURL,{outlets:{modal:null}}]):this.activeModal.close()}})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Io.F0),e.Y36(Mo.p4),e.Y36(bc),e.Y36(Sc.P),e.Y36(Pr.Kz))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-host-form"]],features:[e.qOj],decls:7,vars:9,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Hostname",o="To add multiple hosts at once, you can enter:",l="a comma-separated list of hostnames " + "\ufffd#14\ufffd" + "(e.g.: example-01,example-02,example-03)" + "\ufffd/#14\ufffd" + ",",_="a range expression " + "\ufffd#17\ufffd" + "(e.g.: example-[01-03].ceph)" + "\ufffd/#17\ufffd" + ",",C="a comma separated range expression " + "\ufffd#20\ufffd" + "(e.g.: example-[01-05].lab.com,example2-[1-4].lab.com,example3-[001-006].lab.com)" + "\ufffd/#20\ufffd" + "",R="Labels",N="This field is required.",V="The chosen hostname is already in use.",Q="Network address",oe="The value is not a valid IP address.",le="Maintenance Mode",[[3,"pageURL","modalRef"],[1,"modal-title"],s,[1,"modal-content"],[4,"cdFormLoading"],["name","hostForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","hostname",1,"cd-col-form-label","required"],t,o,l,_,C,[1,"cd-col-form-input"],["type","text","placeholder","mon-123","id","hostname","name","hostname","formControlName","hostname","autofocus","",1,"form-control",3,"keyup"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],["for","labels",1,"cd-col-form-label"],R,["id","labels",3,"data","options","customBadges","messages"],[1,"modal-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],N,V,["for","addr",1,"cd-col-form-label"],Q,["type","text","placeholder","192.168.0.1","id","addr","name","addr","formControlName","addr",1,"form-control"],oe,[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","maintenance","type","checkbox","formControlName","maintenance",1,"custom-control-input"],["for","maintenance",1,"custom-control-label"],le]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.qZA(),e.ynx(5,3),e.YNc(6,Ui,36,15,"div",4),e.BQk(),e.qZA()),2&t&&(e.Q6J("pageURL",o.pageURL)("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,5,o.action))(e.lcZ(4,7,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("cdFormLoading",o.loading))},directives:[Ye.z,cu.y,En._Y,En.JL,Oa.V,En.sg,ll.P,xe.S,ge.o,En.Fj,Ll.b,En.JJ,En.u,nt.U,p.O5,St.m,En.Wl,Ml.p],pipes:[p.rS,Mt.m],styles:[""]}),n})();var yo=i(34501);let Vs=(()=>{class n{constructor(){this.cssClasses=["badge-cd-label-green","badge-cd-label-cyan","badge-cd-label-purple","badge-cd-label-light-blue","badge-cd-label-gold","badge-cd-label-light-green"]}transform(t){let o=0,l=0;if(t)for(let _=0;_<t.length;_++)l=t.charCodeAt(_),o=Math.abs((o<<5)-o+l);return this.cssClasses[o%this.cssClasses.length]}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"colorClassFromText",type:n,pure:!0}),n})();function qs(n,s){if(1&n&&(e.TgZ(0,"span",2),e.ALo(1,"colorClassFromText"),e._uU(2),e.qZA()),2&n){const t=e.oxw();e.Gre("badge badge-",t.value,""),e.s9C("ngClass",e.lcZ(1,5,t.value)),e.xp6(2),e.hij(" ",t.value,"\n")}}function el(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw();e.MT6("badge badge-background-primary badge-",t.key,"-",t.value,""),e.xp6(1),e.AsE(" ",t.key,": ",t.value," ")}}let $a=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-label"]],inputs:{key:"key",value:"value"},decls:3,vars:2,consts:[[3,"class","ngClass",4,"ngIf","ngIfElse"],["key_value",""],[3,"ngClass"]],template:function(t,o){if(1&t&&(e.YNc(0,qs,3,7,"span",0),e.YNc(1,el,2,6,"ng-template",null,1,e.W1O)),2&t){const l=e.MAs(2);e.Q6J("ngIf",!o.key)("ngIfElse",l)}},directives:[p.O5,p.mk],pipes:[Vs],styles:[""]}),n})();var Ga=i(55657);const wa=["deviceLocation"],Gl=["daemonName"],_u=["lifeExpectancy"],Va=["lifeExpectancyTimestamp"];function Mu(n,s){if(1&n&&e._UZ(0,"cd-table",8),2&n){const t=e.oxw();e.Q6J("data",t.devices)("columns",t.columns)}}function ku(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",9),e.SDv(1,10),e.qZA())}function xc(n,s){if(1&n&&e._UZ(0,"cd-label",13),2&n){const t=e.oxw().$implicit;e.Q6J("value",t.dev)}}function Ou(n,s){if(1&n&&(e.ynx(0),e.YNc(1,xc,1,1,"cd-label",12),e.BQk()),2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.host===o.hostname)}}function Qd(n,s){1&n&&e.YNc(0,Ou,2,1,"ng-container",11),2&n&&e.Q6J("ngForOf",s.value)}const il=function(n){return{daemons:n}};function K(n,s){if(1&n&&e.GkF(0,14),2&n){const t=s.value,o=e.oxw(),l=e.MAs(7),_=e.MAs(9);e.Q6J("ngTemplateOutlet",null!==o.osdId?l:_)("ngTemplateOutletContext",e.VKq(2,il,t))}}function be(n,s){if(1&n&&e._UZ(0,"cd-label",13),2&n){const t=e.oxw().$implicit;e.Q6J("value",t)}}function lt(n,s){if(1&n&&(e.ynx(0),e.YNc(1,be,1,1,"cd-label",12),e.BQk()),2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.includes(o.osdId))}}function wt(n,s){1&n&&e.YNc(0,lt,2,1,"ng-container",11),2&n&&e.Q6J("ngForOf",s.daemons)}function ln(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"cd-label",15),e.BQk()),2&n){const t=s.$implicit;e.xp6(1),e.Q6J("value",t)}}function Dr(n,s){1&n&&e.YNc(0,ln,2,1,"ng-container",11),2&n&&e.Q6J("ngForOf",s.daemons)}function Ai(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,17),e.ALo(2,"notAvailable"),e.qZA()),2&n&&(e.xp6(2),e.pQV(e.lcZ(2,1,"")),e.QtT(1))}function gs(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"i18nPlural"),e.qZA()),2&n){const t=e.oxw().value,o=e.oxw();e.xp6(1),e.hij("> ",e.xi3(2,1,t.min,o.translationMapping),"")}}function Da(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"i18nPlural"),e.qZA()),2&n){const t=e.oxw().value,o=e.oxw();e.xp6(1),e.hij("< ",e.xi3(2,1,t.max,o.translationMapping),"")}}function ca(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.ALo(2,"i18nPlural"),e.qZA()),2&n){const t=e.oxw().value,o=e.oxw();e.xp6(1),e.AsE("",t.min," to ",e.xi3(2,2,t.max,o.translationMapping),"")}}function Dl(n,s){if(1&n&&(e.YNc(0,Ai,3,3,"span",16),e.YNc(1,gs,3,4,"span",16),e.YNc(2,Da,3,4,"span",16),e.YNc(3,ca,3,5,"span",16)),2&n){const t=s.value;e.Q6J("ngIf",!t.life_expectancy_enabled),e.xp6(1),e.Q6J("ngIf",t.min&&!t.max),e.xp6(1),e.Q6J("ngIf",t.max&&!t.min),e.xp6(1),e.Q6J("ngIf",t.max&&t.min)}}function Yl(n,s){1&n&&e._uU(0),2&n&&e.hij(" ",s.value,"\n")}let jc=(()=>{class n{constructor(t,o,l){this.hostService=t,this.datePipe=o,this.osdService=l,this.hostname="",this.osdId=null,this.osdList=!1,this.devices=null,this.columns=[],this.translationMapping={"=1":"# week",other:"# weeks"}}ngOnInit(){this.columns=[{prop:"devid",name:"Device ID",minWidth:200},{prop:"state",name:"State of Health",flexGrow:1,cellTransformation:Ht.e.badge,customTemplateConfig:{map:{good:{value:"Good",class:"badge-success"},warning:{value:"Warning",class:"badge-warning"},bad:{value:"Bad",class:"badge-danger"},stale:{value:"Stale",class:"badge-info"},unknown:{value:"Unknown",class:"badge-dark"}}}},{prop:"life_expectancy_weeks",name:"Life Expectancy",cellTemplate:this.lifeExpectancyTemplate},{prop:"life_expectancy_stamp",name:"Prediction Creation Date",cellTemplate:this.lifeExpectancyTimestampTemplate,pipe:this.datePipe,isHidden:!0},{prop:"location",name:"Device Name",cellTemplate:this.locationTemplate},{prop:"daemons",name:"Daemons",cellTemplate:this.daemonNameTemplate}]}ngOnChanges(){const t=o=>this.devices=o;this.osdList&&null!==this.osdId?this.osdService.getDevices(this.osdId).subscribe(t):this.hostname&&this.hostService.getDevices(this.hostname).subscribe(t)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(bc),e.Y36(p.uU),e.Y36(rc))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-device-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(wa,7),e.Gf(Gl,7),e.Gf(_u,7),e.Gf(Va,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.locationTemplate=l.first),e.iGM(l=e.CRH())&&(o.daemonNameTemplate=l.first),e.iGM(l=e.CRH())&&(o.lifeExpectancyTemplate=l.first),e.iGM(l=e.CRH())&&(o.lifeExpectancyTimestampTemplate=l.first)}},inputs:{hostname:"hostname",osdId:"osdId",osdList:"osdList"},features:[e.TTD],decls:14,vars:2,consts:function(){let s,t;return s="Neither hostname nor OSD ID given",t="" + "\ufffd0\ufffd" + "",[[3,"data","columns",4,"ngIf"],["type","warning",4,"ngIf"],["deviceLocation",""],["daemonName",""],["osdIdDaemon",""],["readableDaemons",""],["lifeExpectancy",""],["lifeExpectancyTimestamp",""],[3,"data","columns"],["type","warning"],s,[4,"ngFor","ngForOf"],[3,"value",4,"ngIf"],[3,"value"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"me-1",3,"value"],[4,"ngIf"],t]},template:function(t,o){1&t&&(e.YNc(0,Mu,1,2,"cd-table",0),e.YNc(1,ku,2,0,"cd-alert-panel",1),e.YNc(2,Qd,1,1,"ng-template",null,2,e.W1O),e.YNc(4,K,1,4,"ng-template",null,3,e.W1O),e.YNc(6,wt,1,1,"ng-template",null,4,e.W1O),e.YNc(8,Dr,1,1,"ng-template",null,5,e.W1O),e.YNc(10,Dl,4,4,"ng-template",null,6,e.W1O),e.YNc(12,Yl,1,1,"ng-template",null,7,e.W1O)),2&t&&(e.Q6J("ngIf",o.hostname||null!==o.osdId),e.xp6(1),e.Q6J("ngIf",""===o.hostname&&null===o.osdId))},directives:[p.O5,Tr.a,yo.G,p.sg,$a,p.tP],pipes:[Ga.g,p.Gx],styles:[""]}),n})();var yf=i(30490);function Hd(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",2),e.SDv(1,3),e.qZA())}function d_(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",2),e.tHW(1,4),e._UZ(2,"cd-doc",5),e.N_p(),e.qZA())}let ah=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-orchestrator-doc-panel"]],inputs:{missingFeatures:"missingFeatures"},decls:3,vars:2,consts:function(){let s,t;return s="The feature is not supported in the current Orchestrator.",t="Orchestrator is not available. Please consult the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " on how to configure and enable the functionality.",[["type","info",4,"ngIf","ngIfElse"],["elseBlock",""],["type","info"],s,t,["section","orch"]]},template:function(t,o){if(1&t&&(e.YNc(0,Hd,2,0,"cd-alert-panel",0),e.YNc(1,d_,3,0,"ng-template",null,1,e.W1O)),2&t){const l=e.MAs(2);e.Q6J("ngIf",o.missingFeatures)("ngIfElse",l)}},directives:[p.O5,yo.G,yf.K],styles:[""]}),n})(),Rc=(()=>{class n{constructor(t,o,l,_,C,R){this.authStorageService=t,this.dimlessBinary=o,this.modalService=l,this.notificationService=_,this.orchService=C,this.hostService=R,this.devices=[],this.showAvailDeviceOnly=!1,this.hiddenColumns=[],this.hostname="",this.diskType="",this.filterColumns=["hostname","human_readable_type","available","sys_api.vendor","sys_api.model","sys_api.size"],this.selectionType=void 0,this.filterChange=new e.vpe,this.fetchInventory=new e.vpe,this.icons=wo.P,this.columns=[],this.selection=new _n.r,this.orchStatus=void 0,this.actionOrchFeatures={identify:[P.DEVICE_BLINK_LIGHT]}}ngOnInit(){this.permission=this.authStorageService.getPermissions().osd,this.tableActions=[{permission:"update",icon:wo.P.show,click:()=>this.identifyDevice(),name:"Identify",disable:o=>this.getDisable("identify",o),canBePrimary:o=>!o.hasSingleSelection,visible:()=>Sr().isString(this.selectionType)}];const t=[{name:"Hostname",prop:"hostname",flexGrow:1},{name:"Device path",prop:"path",flexGrow:1},{name:"Type",prop:"human_readable_type",flexGrow:1,cellTransformation:Ht.e.badge,customTemplateConfig:{map:{hdd:{value:"HDD",class:"badge-hdd"},ssd:{value:"SSD",class:"badge-ssd"}}}},{name:"Available",prop:"available",flexGrow:1,cellClass:"text-center",cellTransformation:Ht.e.checkIcon},{name:"Vendor",prop:"sys_api.vendor",flexGrow:1},{name:"Model",prop:"sys_api.model",flexGrow:1},{name:"Size",prop:"sys_api.size",flexGrow:1,pipe:this.dimlessBinary},{name:"OSDs",prop:"osd_ids",flexGrow:1,cellTransformation:Ht.e.badge,customTemplateConfig:{class:"badge-dark",prefix:"osd."}}];this.columns=t.filter(o=>!this.hiddenColumns.includes(o.prop)),Sr().forEach(this.filterColumns,o=>{const l=Sr().find(this.columns,{prop:o});l&&(l.filterable=!0),"human_readable_type"===(null==l?void 0:l.prop)&&"ssd"===this.diskType&&(l.filterInitValue=this.diskType),"hostname"===(null==l?void 0:l.prop)&&this.hostname&&(l.filterInitValue=this.hostname)}),this.fetchInventory.observers.length>0&&(this.fetchInventorySub=this.table.fetchData.subscribe(()=>{this.fetchInventory.emit()}))}getDevices(){this.showAvailDeviceOnly?this.hostService.inventoryDeviceList().subscribe(t=>{this.devices=Sr().filter(t,"available"),this.devices=[...this.devices]},()=>{this.devices=[]}):this.devices=[...this.devices]}ngOnDestroy(){this.fetchInventorySub&&this.fetchInventorySub.unsubscribe()}onColumnFiltersChanged(t){this.filterChange.emit(t)}getDisable(t,o){return!o.hasSingleSelection||this.orchService.getTableActionDisableDesc(this.orchStatus,this.actionOrchFeatures[t])}updateSelection(t){this.selection=t}identifyDevice(){const t=this.selection.first(),o=t.hostname,l=t.path||t.device_id;this.modalService.show(Ze.X,{titleText:"Identify device " + l + "",message:"Please enter the duration how long to blink the LED.",fields:[{type:"select",name:"duration",value:300,required:!0,typeConfig:{options:[{text:"1 minute",value:60},{text:"2 minutes",value:120},{text:"5 minutes",value:300},{text:"10 minutes",value:600},{text:"15 minutes",value:900}]}}],submitButtonText:"Execute",onSubmit:_=>{this.hostService.identifyDevice(o,l,_.duration).subscribe(()=>{this.notificationService.show(Ta.k.success,"Identifying '" + l + "' started on host '" + o + "'")})}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(Rr.$),e.Y36(ou.Z),e.Y36(Tl.g),e.Y36(h),e.Y36(bc))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-inventory-devices"]],viewQuery:function(t,o){if(1&t&&e.Gf(Tr.a,7),2&t){let l;e.iGM(l=e.CRH())&&(o.table=l.first)}},inputs:{devices:"devices",showAvailDeviceOnly:"showAvailDeviceOnly",hiddenColumns:"hiddenColumns",hostname:"hostname",diskType:"diskType",filterColumns:"filterColumns",selectionType:"selectionType",orchStatus:"orchStatus"},outputs:{filterChange:"filterChange",fetchInventory:"fetchInventory"},decls:2,vars:8,consts:[["identifier","uid","columnMode","flex",3,"data","columns","forceIdentifier","selectionType","searchField","fetchData","updateSelection","columnFiltersChanged"],[1,"table-actions",3,"permission","selection","tableActions"]],template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0),e.NdJ("fetchData",function(){return o.getDevices()})("updateSelection",function(_){return o.updateSelection(_)})("columnFiltersChanged",function(_){return o.onColumnFiltersChanged(_)}),e._UZ(1,"cd-table-actions",1),e.qZA()),2&t&&(e.Q6J("data",o.devices)("columns",o.columns)("forceIdentifier",!0)("selectionType",o.selectionType)("searchField",!1),e.xp6(1),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions))},directives:[Tr.a,Tu.K],styles:[".filter[_ngcontent-%COMP%]{padding-right:8px}.fa-stack[_ngcontent-%COMP%]{font-size:.79rem}.fa-stack[_ngcontent-%COMP%]   .fa-stack-1x[_ngcontent-%COMP%]{margin-left:8px;margin-top:5px}"]}),n})();function Xd(n,s){1&n&&e._UZ(0,"cd-orchestrator-doc-panel")}const Bd=function(){return[]},lh=function(){return["hostname"]};function Hp(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"legend"),e.SDv(2,1),e.qZA(),e.TgZ(3,"div",2)(4,"div",3)(5,"cd-inventory-devices",4),e.NdJ("fetchInventory",function(){return e.CHM(t),e.oxw().refresh()}),e.qZA()()(),e.BQk()}if(2&n){const t=e.oxw();e.xp6(5),e.Q6J("devices",t.devices)("hiddenColumns",void 0===t.hostname?e.DdM(3,Bd):e.DdM(4,lh))("orchStatus",t.orchStatus)}}let dl=(()=>{class n{constructor(t,o,l){this.orchService=t,this.hostService=o,this.ngZone=l,this.reloadInterval=5e3,this.firstRefresh=!0,this.icons=wo.P,this.showDocPanel=!1,this.devices=[]}ngOnInit(){this.orchService.status().subscribe(t=>{this.orchStatus=t,this.showDocPanel=!t.available,t.available&&this.ngZone.runOutsideAngular(()=>{this.reloadSubscriber=(0,ai.H)(this.reloadInterval,this.reloadInterval).subscribe(()=>{this.ngZone.run(()=>{this.getInventory(!1)})})})})}ngOnDestroy(){var t;null===(t=this.reloadSubscriber)||void 0===t||t.unsubscribe()}ngOnChanges(){var t;(null===(t=this.orchStatus)||void 0===t?void 0:t.available)&&(this.devices=[],this.getInventory(!1))}getInventory(t){""!==this.hostname&&this.hostService.inventoryDeviceList(this.hostname,t).subscribe(o=>{this.devices=o},()=>{this.devices=[]})}refresh(){this.getInventory(!this.firstRefresh),this.firstRefresh=!1}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(h),e.Y36(bc),e.Y36(e.R0b))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-inventory"]],inputs:{hostname:"hostname"},features:[e.TTD],decls:2,vars:2,consts:function(){let s;return s="Physical Disks",[[4,"ngIf"],s,[1,"row"],[1,"col-md-12"],["selectionType","single",3,"devices","hiddenColumns","orchStatus","fetchInventory"]]},template:function(t,o){1&t&&(e.YNc(0,Xd,1,0,"cd-orchestrator-doc-panel",0),e.YNc(1,Hp,6,5,"ng-container",0)),2&t&&(e.Q6J("ngIf",o.showDocPanel),e.xp6(1),e.Q6J("ngIf",null==o.orchStatus?null:o.orchStatus.available))},directives:[p.O5,ah,Rc],styles:[""]}),n})();var Bh=i(15257);let wf=class{constructor(s){this.http=s,this.url="api/daemon"}action(s,t){return this.http.put(`${this.url}/${s}`,{action:t,container_image:null},{headers:{Accept:"application/vnd.ceph.api.v0.1+json"},observe:"response"})}};wf.\u0275fac=function(s){return new(s||wf)(e.LFG(g.eN))},wf.\u0275prov=e.Yz7({token:wf,factory:wf.\u0275fac,providedIn:"root"}),wf=(0,Z.gn)([De.o,(0,Z.w6)("design:paramtypes",[g.eN])],wf);var Ed=i(90068);class ad{constructor(s){this.observable=s.pipe((0,Aa.U)(t=>{var o;return this.count=Number(null===(o=t.headers)||void 0===o?void 0:o.get("X-Total-Count")),t.body}))}}let Kl=(()=>{class n extends ga.S{constructor(t){super(),this.http=t,this.url="api/service"}list(t,o){const l={headers:{Accept:this.getVersionHeaderValue(2,0)},params:t,observe:"response"};return o&&(l.params=l.params.append("service_name",o)),new ad(this.http.get(this.url,l))}getDaemons(t){return this.http.get(`${this.url}/${t}/daemons`)}create(t){return this.http.post(this.url,{service_name:t.service_id?`${t.service_type}.${t.service_id}`:t.service_type,service_spec:t},{observe:"response"})}update(t){const o=t.service_id?`${t.service_type}.${t.service_id}`:t.service_type;return this.http.put(`${this.url}/${o}`,{service_name:o,service_spec:t},{observe:"response"})}delete(t){return this.http.delete(`${this.url}/${t}`,{observe:"response"})}getKnownTypes(){return this.http.get(`${this.url}/known_types`)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var up=i(37496);const ld=["statusTpl"],Uh=["listTpl"],uh=["cpuTpl"],Pf=["daemonsTable"];function Bp(n,s){1&n&&e._UZ(0,"cd-orchestrator-doc-panel")}function Ef(n,s){1&n&&e.GkF(0)}function oc(n,s){if(1&n&&(e.TgZ(0,"div"),e.YNc(1,Ef,1,0,"ng-container",7),e.qZA()),2&n){e.oxw();const t=e.MAs(9);e.xp6(1),e.Q6J("ngTemplateOutlet",t)}}function bd(n,s){1&n&&e.GkF(0)}function Up(n,s){if(1&n&&e.YNc(0,bd,1,0,"ng-container",7),2&n){e.oxw(2);const t=e.MAs(9);e.Q6J("ngTemplateOutlet",t)}}function ch(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",18,19),e.NdJ("fetchData",function(l){return e.CHM(t),e.oxw(3).getServices(l)}),e.qZA()}if(2&n){const t=e.oxw(3);e.Q6J("data",t.services)("columns",t.serviceColumns)}}function dh(n,s){if(1&n&&e.YNc(0,ch,2,2,"cd-table",17),2&n){const t=e.oxw(2);e.Q6J("ngIf",t.hasOrchestrator)}}function f_(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"nav",8,9),e.ynx(3,10),e.TgZ(4,"a",11),e.SDv(5,12),e.qZA(),e.YNc(6,Up,1,1,"ng-template",13),e.BQk(),e.ynx(7,14),e.TgZ(8,"a",11),e.SDv(9,15),e.qZA(),e.YNc(10,dh,1,1,"ng-template",13),e.BQk(),e.qZA(),e._UZ(11,"div",16),e.BQk()),2&n){const t=e.MAs(2);e.xp6(11),e.Q6J("ngbNavOutlet",t)}}function fh(n,s){if(1&n&&(e.TgZ(0,"span",20),e.ALo(1,"pipeFunction"),e._uU(2),e.qZA()),2&n){const t=s.row,o=e.oxw();e.Q6J("ngClass",e.xi3(1,2,t,o.getStatusClass)),e.xp6(2),e.hij(" ",t.status_desc," ")}}const bf=function(n){return[n]};function Sf(n,s){if(1&n&&(e.TgZ(0,"span"),e._UZ(1,"i",27),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,bf,t.icons.infoCircle))}}function Zf(n,s){if(1&n&&(e.TgZ(0,"span"),e._UZ(1,"i",27),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,bf,t.icons.warning))}}function Nf(n,s){if(1&n&&(e.TgZ(0,"li",25)(1,"b"),e._uU(2),e.ALo(3,"relativeDate"),e.qZA(),e.TgZ(4,"span",26),e._uU(5),e.qZA(),e._UZ(6,"br"),e.YNc(7,Sf,2,3,"span",0),e.YNc(8,Zf,2,3,"span",0),e._uU(9),e.qZA()),2&n){const t=s.$implicit;e.xp6(2),e.hij("",e.lcZ(3,5,t.created)," - "),e.xp6(3),e.Oqu(t.subject),e.xp6(2),e.Q6J("ngIf","INFO"===t.level),e.xp6(1),e.Q6J("ngIf","ERROR"===t.level),e.xp6(1),e.hij(" ",t.message," ")}}function Tf(n,s){if(1&n&&(e.TgZ(0,"ul",23),e.YNc(1,Nf,10,7,"li",24),e.qZA()),2&n){const t=e.oxw().value,o=e.oxw();e.xp6(1),e.Q6J("ngForOf",t)("ngForTrackBy",o.trackByFn)}}function Au(n,s){1&n&&(e.TgZ(0,"div",25)(1,"span"),e._uU(2,"No data available"),e.qZA()())}function If(n,s){if(1&n&&e.YNc(0,Au,3,0,"div",28),2&n){const t=e.oxw().value;e.Q6J("ngIf",0===(null==t?null:t.length))}}function Yh(n,s){if(1&n&&(e.YNc(0,Tf,2,2,"ul",21),e.YNc(1,If,1,1,"ng-template",null,22,e.W1O)),2&n){const t=s.value,o=e.MAs(2);e.Q6J("ngIf",null==t?null:t.length)("ngIfElse",o)}}function jh(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",30,31),e.NdJ("fetchData",function(l){return e.CHM(t),e.oxw(2).getDaemons(l)})("updateSelection",function(l){return e.CHM(t),e.oxw(2).updateSelection(l)}),e._UZ(2,"cd-table-actions",32),e.qZA()}if(2&n){const t=e.oxw(2);e.Q6J("data",t.daemons)("columns",t.columns),e.xp6(2),e.Q6J("selection",t.selection)("permission",t.permissions.hosts)("tableActions",t.tableActions)}}function p_(n,s){if(1&n&&e.YNc(0,jh,3,5,"cd-table",29),2&n){const t=e.oxw();e.Q6J("ngIf",t.hasOrchestrator)}}function ph(n,s){if(1&n&&e._UZ(0,"cd-usage-bar",33),2&n){const t=s.row,o=e.oxw();e.Q6J("total",o.total)("calculatePerc",!1)("used",t.cpu_percentage)("isBinary",!1)("warningThreshold",o.warningThreshold)("errorThreshold",o.errorThreshold)}}let Yp=(()=>{class n{constructor(t,o,l,_,C,R,N,V,Q,oe){this.hostService=t,this.cephServiceService=o,this.orchService=l,this.relativeDatePipe=_,this.dimlessBinary=C,this.actionLabels=R,this.authStorageService=N,this.daemonService=V,this.notificationService=Q,this.cdRef=oe,this.hiddenColumns=[],this.total=100,this.warningThreshold=.8,this.errorThreshold=.9,this.icons=wo.P,this.daemons=[],this.services=[],this.columns=[],this.serviceColumns=[],this.selection=new _n.r,this.hasOrchestrator=!1,this.showDocPanel=!1}ngOnInit(){this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"update",icon:wo.P.start,click:()=>this.daemonAction("start"),name:this.actionLabels.START,disable:()=>this.actionDisabled("start")},{permission:"update",icon:wo.P.stop,click:()=>this.daemonAction("stop"),name:this.actionLabels.STOP,disable:()=>this.actionDisabled("stop")},{permission:"update",icon:wo.P.restart,click:()=>this.daemonAction("restart"),name:this.actionLabels.RESTART,disable:()=>this.actionDisabled("restart")},{permission:"update",icon:wo.P.deploy,click:()=>this.daemonAction("redeploy"),name:this.actionLabels.REDEPLOY,disable:()=>this.actionDisabled("redeploy")}],this.columns=[{name:"Hostname",prop:"hostname",flexGrow:2,filterable:!0},{name:"Daemon name",prop:"daemon_name",flexGrow:1,filterable:!0},{name:"Version",prop:"version",flexGrow:1,filterable:!0},{name:"Status",prop:"status_desc",flexGrow:1,filterable:!0,cellTemplate:this.statusTpl},{name:"Last Refreshed",prop:"last_refresh",pipe:this.relativeDatePipe,flexGrow:1},{name:"CPU Usage",prop:"cpu_percentage",flexGrow:1,cellTemplate:this.cpuTpl},{name:"Memory Usage",prop:"memory_usage",flexGrow:1,pipe:this.dimlessBinary,cellClass:"text-right"},{name:"Daemon Events",prop:"events",flexGrow:2,cellTemplate:this.listTpl}],this.serviceColumns=[{name:"Service Name",prop:"service_name",flexGrow:2,filterable:!0},{name:"Service Type",prop:"service_type",flexGrow:1,filterable:!0},{name:"Service Events",prop:"events",flexGrow:5,cellTemplate:this.listTpl}],this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available,this.showDocPanel=!t.available}),this.columns=this.columns.filter(t=>!this.hiddenColumns.includes(t.prop)),setTimeout(()=>{this.cdRef.detectChanges()},1e3)}ngOnChanges(){Sr().isUndefined(this.daemonsTable)||this.daemonsTable.reloadData()}ngAfterViewInit(){this.daemonsTableTplsSub=this.daemonsTableTpls.changes.subscribe(t=>{this.daemonsTable=t.first})}ngOnDestroy(){this.daemonsTableTplsSub&&this.daemonsTableTplsSub.unsubscribe(),this.serviceSub&&this.serviceSub.unsubscribe()}getStatusClass(t){return Sr().get({"-1":"badge-danger",0:"badge-warning",1:"badge-success"},t.status,"badge-dark")}getDaemons(t){let o;if(this.hostname)o=this.hostService.getDaemons(this.hostname);else{if(!this.serviceName)return void(this.daemons=[]);o=this.cephServiceService.getDaemons(this.serviceName)}o.subscribe(l=>{this.daemons=l,this.sortDaemonEvents()},()=>{this.daemons=[],t.error()})}sortDaemonEvents(){this.daemons.forEach(t=>{var o;null===(o=t.events)||void 0===o||o.sort((l,_)=>new Date(_.created).getTime()-new Date(l.created).getTime())})}getServices(t){this.serviceSub=this.cephServiceService.list(new g.LE({fromObject:{limit:-1,offset:0}}),this.serviceName).observable.subscribe(o=>{this.services=o},()=>{this.services=[],t.error()})}trackByFn(t,o){return o.created}updateSelection(t){this.selection=t}daemonAction(t){var o;this.daemonService.action(null===(o=this.selection.first())||void 0===o?void 0:o.daemon_name,t).pipe((0,Bh.q)(1)).subscribe({next:l=>{this.notificationService.show(Ta.k.success,`Daemon ${t} scheduled`,l.body.toString())},error:l=>{this.notificationService.show(Ta.k.error,"Daemon action failed",l.body.toString())}})}actionDisabled(t){var o;if(null===(o=this.selection)||void 0===o?void 0:o.hasSelection){const l=this.selection.selected[0];if("mon"===l.daemon_type||"mgr"===l.daemon_type)return!0;switch(t){case"start":if("running"===l.status_desc)return!0;break;case"stop":if("stopped"===l.status_desc)return!0}return!1}return!0}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(bc),e.Y36(Kl),e.Y36(h),e.Y36(Ed.h),e.Y36(Rr.$),e.Y36(Mo.p4),e.Y36(Vi.j),e.Y36(wf),e.Y36(Tl.g),e.Y36(e.sBO))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-service-daemon-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(ld,7),e.Gf(Uh,7),e.Gf(uh,7),e.Gf(Pf,5)),2&t){let l;e.iGM(l=e.CRH())&&(o.statusTpl=l.first),e.iGM(l=e.CRH())&&(o.listTpl=l.first),e.iGM(l=e.CRH())&&(o.cpuTpl=l.first),e.iGM(l=e.CRH())&&(o.daemonsTableTpls=l)}},inputs:{serviceName:"serviceName",hostname:"hostname",hiddenColumns:"hiddenColumns",flag:"flag"},features:[e.TTD],decls:12,vars:3,consts:function(){let s,t;return s="Daemons",t="Service Events",[[4,"ngIf"],[4,"ngIf","ngIfElse"],["serviceDetailsTpl",""],["statusTpl",""],["listTpl",""],["serviceDaemonDetailsTpl",""],["cpuTpl",""],[4,"ngTemplateOutlet"],["ngbNav","","cdStatefulTab","service-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","service_events"],t,[3,"ngbNavOutlet"],["columnMode","flex",3,"data","columns","fetchData",4,"ngIf"],["columnMode","flex",3,"data","columns","fetchData"],["serviceTable",""],[1,"badge",3,"ngClass"],["class","list-group list-group-flush",4,"ngIf","ngIfElse"],["noEventsAvailable",""],[1,"list-group","list-group-flush"],["class","list-group-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"list-group-item"],[1,"badge","badge-info"],["aria-hidden","true",3,"ngClass"],["class","list-group-item",4,"ngIf"],["selectionType","single","columnMode","flex","identifier","daemon_name",3,"data","columns","fetchData","updateSelection",4,"ngIf"],["selectionType","single","columnMode","flex","identifier","daemon_name",3,"data","columns","fetchData","updateSelection"],["daemonsTable",""],["id","service-daemon-list-actions",1,"table-actions",3,"selection","permission","tableActions"],[3,"total","calculatePerc","used","isBinary","warningThreshold","errorThreshold"]]},template:function(t,o){if(1&t&&(e.YNc(0,Bp,1,0,"cd-orchestrator-doc-panel",0),e.YNc(1,oc,2,1,"div",1),e.YNc(2,f_,12,1,"ng-template",null,2,e.W1O),e.YNc(4,fh,3,5,"ng-template",null,3,e.W1O),e.YNc(6,Yh,3,2,"ng-template",null,4,e.W1O),e.YNc(8,p_,1,1,"ng-template",null,5,e.W1O),e.YNc(10,ph,1,6,"ng-template",null,6,e.W1O)),2&t){const l=e.MAs(3);e.Q6J("ngIf",o.showDocPanel),e.xp6(1),e.Q6J("ngIf","hostDetails"===o.flag)("ngIfElse",l)}},directives:[p.O5,ah,p.tP,Pr.Pz,Yn.m,Pr.nv,Pr.Vx,Pr.uN,Tr.a,Pr.tO,p.mk,p.sg,Tu.K,Su.O],pipes:[up.i,Ed.h],styles:[".fa-info-circle[_ngcontent-%COMP%]{color:#25828e}.fa-exclamation-triangle[_ngcontent-%COMP%]{color:#dc3545}.list-group-item[_ngcontent-%COMP%]{background-color:transparent;border-width:0}"]}),n})();var Gh=i(8958);const hh=["innerNav"];function em(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",5),e.SDv(1,6),e.qZA())}function Du(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",7),e.SDv(1,8),e.qZA())}function Vh(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",10),e.SDv(1,11),e.qZA())}function Sd(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"cd-alert-panel",20),e._uU(2),e.qZA(),e.BQk()),2&n){const t=e.oxw(2).$implicit;e.xp6(2),e.Oqu(t.value.userMessage)}}function Kd(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",23),e.SDv(1,24),e.qZA())}function h_(n,s){1&n&&(e.ynx(0),e.TgZ(1,"cd-alert-panel",26),e.SDv(2,27),e.qZA(),e.BQk())}function tm(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",28),e.SDv(1,29),e.qZA())}function _h(n,s){if(1&n&&(e.YNc(0,h_,3,0,"ng-container",0),e.YNc(1,tm,2,0,"ng-template",null,25,e.W1O)),2&n){const t=e.MAs(2),o=e.oxw(3).$implicit;e.Q6J("ngIf",o.value.info.smart_status.passed)("ngIfElse",t)}}function Ep(n,s){if(1&n&&(e.YNc(0,Kd,2,0,"cd-alert-panel",21),e.ALo(1,"pipeFunction"),e.YNc(2,_h,3,2,"ng-template",null,22,e.W1O)),2&n){const t=e.MAs(3),o=e.oxw(2).$implicit,l=e.oxw(4);e.Q6J("ngIf",e.xi3(1,2,null==o.value.info?null:o.value.info.smart_status,l.isEmpty))("ngIfElse",t)}}function Td(n,s){if(1&n&&e._UZ(0,"cd-table-key-value",36),2&n){const t=e.oxw(4).$implicit;e.Q6J("renderObjects",!0)("data",t.value.info)}}function __(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",37),e.SDv(1,38),e.qZA())}function Zh(n,s){if(1&n&&(e.YNc(0,Td,1,2,"cd-table-key-value",34),e.ALo(1,"pipeFunction"),e.YNc(2,__,2,0,"cd-alert-panel",35),e.ALo(3,"pipeFunction")),2&n){const t=e.oxw(3).$implicit,o=e.oxw(4);e.Q6J("ngIf",!e.xi3(1,2,t.value.info,o.isEmpty)),e.xp6(2),e.Q6J("ngIf",e.xi3(3,5,t.value.info,o.isEmpty))}}function zh(n,s){if(1&n&&e._UZ(0,"cd-table",42),2&n){const t=e.oxw(4).$implicit,o=e.oxw(4);e.Q6J("data",t.value.smart.attributes.table)("columns",o.smartDataColumns)}}function Cd(n,s){if(1&n&&e._UZ(0,"cd-table-key-value",43),2&n){const t=e.oxw(4).$implicit;e.Q6J("renderObjects",!0)("data",t.value.smart)}}function mu(n,s){if(1&n&&e._UZ(0,"cd-table-key-value",43),2&n){const t=e.oxw(4).$implicit;e.Q6J("renderObjects",!0)("data",t.value.smart.nvmeData)}}function Wh(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",44),e.SDv(1,45),e.qZA())}function bp(n,s){if(1&n&&(e.YNc(0,zh,1,2,"cd-table",39),e.YNc(1,Cd,1,2,"cd-table-key-value",40),e.YNc(2,mu,1,2,"cd-table-key-value",40),e.YNc(3,Wh,2,0,"cd-alert-panel",41)),2&n){const t=e.oxw(3).$implicit;e.Q6J("ngIf",null==t.value.smart?null:t.value.smart.attributes),e.xp6(1),e.Q6J("ngIf",null==t.value.smart?null:t.value.smart.scsi_error_counter_log),e.xp6(1),e.Q6J("ngIf",null==t.value.smart?null:t.value.smart.nvmeData),e.xp6(1),e.Q6J("ngIf",!(null!=t.value.smart&&t.value.smart.attributes||null!=t.value.smart&&t.value.smart.nvmeData||null!=t.value.smart&&t.value.smart.scsi_error_counter_log))}}function Jh(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"nav",12,30)(3,"li",31)(4,"a",17),e.SDv(5,32),e.qZA(),e.YNc(6,Zh,4,8,"ng-template",18),e.qZA(),e.TgZ(7,"li",31)(8,"a",17),e.SDv(9,33),e.qZA(),e.YNc(10,bp,4,4,"ng-template",18),e.qZA()(),e._UZ(11,"div",15),e.BQk()),2&n){const t=e.MAs(2);e.xp6(3),e.Q6J("ngbNavItem",1),e.xp6(4),e.Q6J("ngbNavItem",2),e.xp6(4),e.Q6J("ngbNavOutlet",t)}}function sc(n,s){if(1&n&&(e.YNc(0,Sd,3,1,"ng-container",0),e.YNc(1,Ep,4,5,"ng-template",null,19,e.W1O),e.YNc(3,Jh,12,3,"ng-container",4),e.ALo(4,"pipeFunction"),e.ALo(5,"pipeFunction")),2&n){const t=e.MAs(2),o=e.oxw().$implicit,l=e.oxw(4);e.Q6J("ngIf",o.value.error)("ngIfElse",t),e.xp6(3),e.Q6J("ngIf",!e.xi3(4,3,o.value.info,l.isEmpty)||!e.xi3(5,6,o.value.smart,l.isEmpty))}}function qd(n,s){if(1&n&&(e.ynx(0,16),e.TgZ(1,"a",17),e._uU(2),e.qZA(),e.YNc(3,sc,6,9,"ng-template",18),e.BQk()),2&n){const t=s.$implicit;e.xp6(2),e.AsE("",t.value.device," (",t.value.identifier,")")}}function zf(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"nav",12,13),e.YNc(3,qd,4,2,"ng-container",14),e.ALo(4,"keyvalue"),e.qZA(),e._UZ(5,"div",15),e.BQk()),2&n){const t=e.MAs(2),o=e.oxw(3);e.xp6(3),e.Q6J("ngForOf",e.lcZ(4,2,o.data)),e.xp6(2),e.Q6J("ngbNavOutlet",t)}}function Qh(n,s){if(1&n&&(e.ynx(0),e.YNc(1,Vh,2,0,"cd-alert-panel",9),e.ALo(2,"pipeFunction"),e.YNc(3,zf,6,4,"ng-container",4),e.ALo(4,"pipeFunction"),e.BQk()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",e.xi3(2,2,t.data,t.isEmpty)),e.xp6(2),e.Q6J("ngIf",!e.xi3(4,5,t.data,t.isEmpty))}}function Sp(n,s){if(1&n&&(e.ynx(0),e.YNc(1,em,2,0,"cd-alert-panel",2),e.YNc(2,Du,2,0,"cd-alert-panel",3),e.YNc(3,Qh,5,8,"ng-container",4),e.BQk()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",t.error),e.xp6(1),e.Q6J("ngIf",t.incompatible),e.xp6(1),e.Q6J("ngIf",!t.error&&!t.incompatible)}}function m_(n,s){1&n&&(e.TgZ(0,"cd-loading-panel"),e.SDv(1,46),e.qZA())}let Tp=(()=>{class n{constructor(t,o){this.osdService=t,this.hostService=o,this.osdId=null,this.hostname=null,this.loading=!1,this.incompatible=!1,this.error=!1,this.data={},this.isEmpty=Sr().isEmpty}isSmartError(t){return void 0!==Sr().get(t,"error")}isNvmeSmartData(t){return"nvme"===Sr().get(t,"device.protocol","").toLowerCase()}isAtaSmartData(t){return"ata"===Sr().get(t,"device.protocol","").toLowerCase()}isIscsiSmartData(t){return"scsi"===Sr().get(t,"device.protocol","").toLowerCase()}fetchData(t){const o={};Sr().each(t,(l,_)=>{if(this.isSmartError(l)){let C="";C=-22===l.smartctl_error_code?"Smartctl has received an unknown argument (error code " + l.smartctl_error_code + "). You may be using an incompatible version of smartmontools. Version >= 7.0 of smartmontools is required to successfully retrieve data.":"An error with error code " + l.smartctl_error_code + " occurred.",o[_]={error:l.error,smartctl_error_code:l.smartctl_error_code,smartctl_output:l.smartctl_output,userMessage:C,device:l.dev,identifier:l.nvme_vendor}}else 1!==l.json_format_version[0]?this.incompatible=!0:this.isAtaSmartData(l)?o[_]=this.extractAtaData(l):this.isIscsiSmartData(l)?o[_]=this.extractIscsiData(l):this.isNvmeSmartData(l)&&(o[_]=this.extractNvmeData(l))}),this.data=o,this.loading=!1}extractNvmeData(t){return{info:Sr().omitBy(t,(l,_)=>["nvme_smart_health_information_log"].includes(_)),smart:{nvmeData:t.nvme_smart_health_information_log},device:t.device.name,identifier:t.serial_number}}extractIscsiData(t){const o=Sr().omitBy(t,(l,_)=>["scsi_error_counter_log","scsi_grown_defect_list"].includes(_));return{info:o,smart:{scsi_error_counter_log:t.scsi_error_counter_log,scsi_grown_defect_list:t.scsi_grown_defect_list},device:o.device.name,identifier:o.serial_number}}extractAtaData(t){const o=Sr().omitBy(t,(l,_)=>["ata_smart_attributes","ata_smart_selective_self_test_log","ata_smart_data"].includes(_));return{info:o,smart:{attributes:t.ata_smart_attributes,data:t.ata_smart_data},device:o.device.name,identifier:o.serial_number}}updateData(){this.loading=!0,null!==this.osdId?this.osdService.getSmartData(this.osdId).subscribe({next:this.fetchData.bind(this),error:t=>{t.preventDefault(),this.error=t,this.loading=!1}}):null!==this.hostname&&this.hostService.getSmartData(this.hostname).subscribe({next:this.fetchData.bind(this),error:t=>{t.preventDefault(),this.error=t,this.loading=!1}})}ngOnInit(){this.smartDataColumns=[{prop:"id",name:"ID"},{prop:"name",name:"Name"},{prop:"raw.value",name:"Raw"},{prop:"thresh",name:"Threshold"},{prop:"value",name:"Value"},{prop:"when_failed",name:"When Failed"},{prop:"worst",name:"Worst"}],this.scsiSmartDataColumns=[{prop:"correction_algorithm_invocations",name:"Correction Algorithm Invocations"},{prop:"errors_corrected_by_eccdelayed",name:"Errors Corrected by ECC (Delayed)"},{prop:"errors_corrected_by_eccfast",name:"Errors Corrected by ECC (Fast)"},{prop:"errors_corrected_by_rereads_rewrites",name:"Errors Corrected by Rereads/Rewrites"},{prop:"gigabytes_processed",name:"Gigabyes Processed"},{prop:"total_errors_corrected",name:"Total Errors Corrected"},{prop:"total_uncorrected_errors",name:"Total Errors Uncorrected"}]}ngOnChanges(t){this.data={},t.osdId?this.osdId=t.osdId.currentValue:t.hostname&&(this.hostname=t.hostname.currentValue),this.updateData()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(rc),e.Y36(bc))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-smart-list"]],viewQuery:function(t,o){if(1&t&&e.Gf(hh,5),2&t){let l;e.iGM(l=e.CRH())&&(o.nav=l.first)}},inputs:{osdId:"osdId",hostname:"hostname"},features:[e.TTD],decls:3,vars:2,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye;return s="Failed to retrieve SMART data.",t="The data received has the JSON format version 2.x and is currently incompatible with the dashboard.",o="No SMART data available.",l="SMART overall-health self-assessment test result",_="unknown",C="SMART overall-health self-assessment test result",R="passed",N="SMART overall-health self-assessment test result",V="failed",Q="Device Information",oe="SMART",le="No device information available for this device.",_e="No SMART data available for this device.",ye="SMART data is loading.",[[4,"ngIf","ngIfElse"],["isLoading",""],["type","error",4,"ngIf"],["type","warning",4,"ngIf"],[4,"ngIf"],["type","error"],s,["type","warning"],t,["type","info",4,"ngIf"],["type","info"],o,["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","",4,"ngFor","ngForOf"],[3,"ngbNavOutlet"],["ngbNavItem",""],["ngbNavLink",""],["ngbNavContent",""],["noError",""],["id","alert-error","type","warning"],["id","alert-self-test-unknown","size","slim","type","warning","title",l,4,"ngIf","ngIfElse"],["hasSmartStatus",""],["id","alert-self-test-unknown","size","slim","type","warning","title",l],_,["selfTestFailed",""],["id","alert-self-test-passed","size","slim","type","info","title",C],R,["id","alert-self-test-failed","size","slim","type","warning","title",N],V,["innerNav","ngbNav"],[3,"ngbNavItem"],Q,oe,[3,"renderObjects","data",4,"ngIf"],["id","alert-device-info-unavailable","type","info",4,"ngIf"],[3,"renderObjects","data"],["id","alert-device-info-unavailable","type","info"],le,["updateSelectionOnRefresh","never",3,"data","columns",4,"ngIf"],["updateSelectionOnRefresh","never",3,"renderObjects","data",4,"ngIf"],["id","alert-device-smart-data-unavailable","type","info",4,"ngIf"],["updateSelectionOnRefresh","never",3,"data","columns"],["updateSelectionOnRefresh","never",3,"renderObjects","data"],["id","alert-device-smart-data-unavailable","type","info"],_e,ye]},template:function(t,o){if(1&t&&(e.YNc(0,Sp,4,3,"ng-container",0),e.YNc(1,m_,2,0,"ng-template",null,1,e.W1O)),2&t){const l=e.MAs(2);e.Q6J("ngIf",!o.loading)("ngIfElse",l)}},directives:[p.O5,yo.G,Pr.Pz,p.sg,Pr.nv,Pr.Vx,Pr.uN,fo.b,Tr.a,Pr.tO,Gh.b],pipes:[up.i,p.Nd],styles:[""]}),n})();function mh(n,s){if(1&n&&e._UZ(0,"cd-device-list",14),2&n){const t=e.oxw(2);e.Q6J("hostname",t.selection.hostname)}}function g_(n,s){if(1&n&&e._UZ(0,"cd-inventory",14),2&n){const t=e.oxw(3);e.Q6J("hostname",t.selectedHostname)}}function gh(n,s){1&n&&(e.ynx(0,15),e.TgZ(1,"a",5),e.SDv(2,16),e.qZA(),e.YNc(3,g_,1,1,"ng-template",7),e.BQk())}const L_=function(){return["hostname"]};function Xh(n,s){if(1&n&&e._UZ(0,"cd-service-daemon-list",19),2&n){const t=e.oxw(3);e.Q6J("hostname",t.selectedHostname)("hiddenColumns",e.DdM(2,L_))}}function ef(n,s){1&n&&(e.ynx(0,17),e.TgZ(1,"a",5),e.SDv(2,18),e.qZA(),e.YNc(3,Xh,1,3,"ng-template",7),e.BQk())}function Kh(n,s){if(1&n&&e._UZ(0,"cd-grafana",22),2&n){const t=e.oxw(3);e.Q6J("grafanaPath","host-details?var-ceph_hosts="+t.selectedHostname)("type","metrics")}}function vh(n,s){1&n&&(e.ynx(0,20),e.TgZ(1,"a",5),e.SDv(2,21),e.qZA(),e.YNc(3,Kh,1,2,"ng-template",7),e.BQk())}function qh(n,s){if(1&n&&e._UZ(0,"cd-smart-list",14),2&n){const t=e.oxw(3);e.Q6J("hostname",t.selectedHostname)}}function Wf(n,s){if(1&n&&e.YNc(0,qh,1,1,"cd-smart-list",23),2&n){const t=e.oxw(2),o=e.MAs(2);e.Q6J("ngIf",t.selectedHostname)("ngIfElse",o)}}function yh(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"nav",2,3),e.ynx(3,4),e.TgZ(4,"a",5),e.SDv(5,6),e.qZA(),e.YNc(6,mh,1,1,"ng-template",7),e.BQk(),e.YNc(7,gh,4,0,"ng-container",8),e.YNc(8,ef,4,0,"ng-container",9),e.YNc(9,vh,4,0,"ng-container",10),e.ynx(10,11),e.TgZ(11,"a",5),e.SDv(12,12),e.qZA(),e.YNc(13,Wf,1,2,"ng-template",7),e.BQk(),e.qZA(),e._UZ(14,"div",13),e.BQk()),2&n){const t=e.MAs(2),o=e.oxw();e.xp6(7),e.Q6J("ngIf",o.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",o.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(5),e.Q6J("ngbNavOutlet",t)}}function Cp(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",24),e.SDv(1,25),e.qZA())}let Cf=(()=>{class n{get selectedHostname(){return void 0!==this.selection?this.selection.hostname:null}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-host-details"]],inputs:{permissions:"permissions",selection:"selection"},decls:3,vars:1,consts:function(){let s,t,o,l,_,C,R;return s="Devices",t="Device health",o="Physical Disks",l="Daemons",_="Performance Details",C="Host details",R="No hostname found.",[[4,"ngIf"],["noHostname",""],["ngbNav","","cdStatefulTab","host-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","devices"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","inventory",4,"ngIf"],["ngbNavItem","daemons",4,"ngIf"],["ngbNavItem","performance-details",4,"ngIf"],["ngbNavItem","device-health"],t,[3,"ngbNavOutlet"],[3,"hostname"],["ngbNavItem","inventory"],o,["ngbNavItem","daemons"],l,["flag","hostDetails",3,"hostname","hiddenColumns"],["ngbNavItem","performance-details"],_,["title",C,"uid","rtOg0AiWz","grafanaStyle","four",3,"grafanaPath","type"],[3,"hostname",4,"ngIf","ngIfElse"],["type","error"],R]},template:function(t,o){1&t&&(e.YNc(0,yh,15,4,"ng-container",0),e.YNc(1,Cp,2,0,"ng-template",null,1,e.W1O)),2&t&&e.Q6J("ngIf",o.selection)},directives:[p.O5,Pr.Pz,Yn.m,Pr.nv,Pr.Vx,Pr.uN,jc,dl,Yp,ha.F,Tp,Pr.tO,yo.G],styles:[""]}),n})();const Eh=["servicesTpl"],bh=["maintenanceConfirmTpl"],da=["orchTmpl"],wc=["flashTmpl"],$u=["hostNameTpl"];function Ts(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",14,15),e.NdJ("fetchData",function(l){return e.CHM(t),e.oxw().getHosts(l)})("setExpandedRow",function(l){return e.CHM(t),e.oxw().setExpandedRow(l)})("updateSelection",function(l){return e.CHM(t),e.oxw().updateSelection(l)}),e.TgZ(2,"div",16),e._UZ(3,"cd-table-actions",17),e.qZA(),e._UZ(4,"cd-host-details",18),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.hosts)("columns",t.columns)("searchableObjects",!0)("hasDetails",t.hasTableDetails)("toolHeader",!t.hideToolHeader),e.xp6(3),e.Q6J("permission",t.permissions.hosts)("selection",t.selection)("tableActions",t.tableActions),e.xp6(1),e.Q6J("permissions",t.permissions)("selection",t.expandedRow)}}function Ff(n,s){1&n&&e.GkF(0,2)}function jp(n,s){1&n&&e._UZ(0,"cd-grafana",20),2&n&&e.Q6J("grafanaPath","host-overview?")("type","metrics")}function Hu(n,s){1&n&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,19),e.qZA(),e.YNc(3,jp,1,2,"ng-template",5),e.BQk())}function Sh(n,s){if(1&n&&(e.TgZ(0,"span"),e._UZ(1,"cd-label",22),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.Q6J("key",t.type)("value",t.count)}}function Lf(n,s){1&n&&e.YNc(0,Sh,2,2,"span",21),2&n&&e.Q6J("ngForOf",s.value)}function Mp(n,s){if(1&n&&(e.TgZ(0,"span",25),e._uU(1),e.qZA()),2&n){const t=e.oxw().row;e.xp6(1),e.hij(" (",t.addr,") ")}}function zu(n,s){if(1&n&&(e.TgZ(0,"span",23),e._uU(1),e.qZA(),e._UZ(2,"br"),e.YNc(3,Mp,2,1,"span",24)),2&n){const t=s.row;e.Q6J("ngClass",t),e.xp6(1),e.hij(" ",t.hostname," "),e.xp6(2),e.Q6J("ngIf",t.addr)}}function Jf(n,s){if(1&n&&(e.TgZ(0,"ul")(1,"li"),e.SDv(2,27),e.qZA()()),2&n){const t=e.oxw().$implicit;e.xp6(2),e.pQV(t),e.QtT(2)}}function tf(n,s){if(1&n&&(e.TgZ(0,"div"),e.YNc(1,Jf,3,1,"ul",26),e.qZA()),2&n){const t=s.last,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",!t||"1"===o.errorMessage.length)}}function k_(n,s){1&n&&(e.ynx(0),e.SDv(1,28),e.BQk())}function Th(n,s){if(1&n&&(e.YNc(0,tf,2,1,"div",21),e.YNc(1,k_,2,0,"ng-container",26)),2&n){const t=e.oxw();e.Q6J("ngForOf",t.errorMessage),e.xp6(1),e.Q6J("ngIf",t.showSubmit)}}function cp(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function Ps(n,s){1&n&&(e.TgZ(0,"span",31),e.SDv(1,32),e.qZA())}let dp=(()=>{class n extends It.o{constructor(t,o,l,_,C,R,N,V,Q,oe){super(),this.authStorageService=t,this.dimlessBinary=o,this.emptyPipe=l,this.hostService=_,this.actionLabels=C,this.modalService=R,this.taskWrapper=N,this.router=V,this.notificationService=Q,this.orchService=oe,this.sub=new ic.w,this.hiddenColumns=[],this.hideMaintenance=!1,this.hasTableDetails=!0,this.hideToolHeader=!1,this.showGeneralActionsOnly=!1,this.columns=[],this.hosts=[],this.isLoadingHosts=!1,this.cdParams={fromLink:"/hosts"},this.selection=new _n.r,this.isExecuting=!1,this.icons=wo.P,this.messages={nonOrchHost:"The feature is disabled because the selected host is not managed by Orchestrator."},this.actionOrchFeatures={add:[P.HOST_ADD],edit:[P.HOST_LABEL_ADD,P.HOST_LABEL_REMOVE],remove:[P.HOST_REMOVE],maintenance:[P.HOST_MAINTENANCE_ENTER,P.HOST_MAINTENANCE_EXIT],drain:[P.HOST_DRAIN]},this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{name:this.actionLabels.ADD,permission:"create",icon:wo.P.add,click:()=>this.router.url.includes("/hosts")?this.router.navigate(["hosts",{outlets:{modal:[Mo.MQ.ADD]}}]):this.bsModalRef=this.modalService.show(is,{hideMaintenance:this.hideMaintenance}),disable:le=>this.getDisable("add",le)},{name:this.actionLabels.EDIT,permission:"update",icon:wo.P.edit,click:()=>this.editAction(),disable:le=>this.getDisable("edit",le)},{name:this.actionLabels.START_DRAIN,permission:"update",icon:wo.P.exit,click:()=>this.hostDrain(),disable:le=>this.getDisable("drain",le)||!this.enableDrainBtn,visible:()=>!this.showGeneralActionsOnly&&this.enableDrainBtn},{name:this.actionLabels.STOP_DRAIN,permission:"update",icon:wo.P.exit,click:()=>this.hostDrain(!0),disable:le=>this.getDisable("drain",le)||this.enableDrainBtn,visible:()=>!this.showGeneralActionsOnly&&!this.enableDrainBtn},{name:this.actionLabels.REMOVE,permission:"delete",icon:wo.P.destroy,click:()=>this.deleteAction(),disable:le=>this.getDisable("remove",le)},{name:this.actionLabels.ENTER_MAINTENANCE,permission:"update",icon:wo.P.enter,click:()=>this.hostMaintenance(),disable:le=>this.getDisable("maintenance",le)||this.isExecuting||this.enableMaintenanceBtn,visible:()=>!this.showGeneralActionsOnly&&!this.enableMaintenanceBtn},{name:this.actionLabels.EXIT_MAINTENANCE,permission:"update",icon:wo.P.exit,click:()=>this.hostMaintenance(),disable:le=>this.getDisable("maintenance",le)||this.isExecuting||!this.enableMaintenanceBtn,visible:()=>!this.showGeneralActionsOnly&&this.enableMaintenanceBtn}]}ngOnInit(){this.columns=[{name:"Hostname",prop:"hostname",flexGrow:1,cellTemplate:this.hostNameTpl},{name:"Service Instances",prop:"service_instances",flexGrow:1.5,cellTemplate:this.servicesTpl},{name:"Labels",prop:"labels",flexGrow:1,cellTransformation:Ht.e.badge,customTemplateConfig:{class:"badge-dark"}},{name:"Status",prop:"status",flexGrow:.8,cellTransformation:Ht.e.badge,customTemplateConfig:{map:{maintenance:{class:"badge-warning"},available:{class:"badge-success"}}}},{name:"Model",prop:"model",flexGrow:1},{name:"CPUs",prop:"cpu_count",flexGrow:.3},{name:"Cores",prop:"cpu_cores",flexGrow:.3},{name:"Total Memory",prop:"memory_total_bytes",pipe:this.dimlessBinary,flexGrow:.4},{name:"Raw Capacity",prop:"raw_capacity",pipe:this.dimlessBinary,flexGrow:.5},{name:"HDDs",prop:"hdd_count",flexGrow:.3},{name:"Flash",prop:"flash_count",headerTemplate:this.flashTmpl,flexGrow:.3},{name:"NICs",prop:"nic_count",flexGrow:.3}],this.columns=this.columns.filter(t=>!this.hiddenColumns.includes(t.prop))}ngOnDestroy(){this.sub.unsubscribe()}updateSelection(t){this.selection=t,this.enableMaintenanceBtn=!1,this.enableDrainBtn=!1,this.selection.hasSelection&&("maintenance"===this.selection.first().status&&(this.enableMaintenanceBtn=!0),this.selection.first().labels.includes("_no_schedule")||(this.enableDrainBtn=!0))}editAction(){this.hostService.getLabels().subscribe(t=>{const o=this.selection.first(),l=new Set(t.concat(this.hostService.predefinedLabels)),_=Array.from(l).map(C=>({enabled:!0,name:C}));this.modalService.show(Ze.X,{titleText:"Edit Host: " + o.hostname + "",fields:[{type:"select-badges",name:"labels",value:o.labels,label:"Labels",typeConfig:{customBadges:!0,options:_,messages:new E.a({empty:"There are no labels.",filter:"Filter or add labels",add:"Add label"})}}],submitButtonText:"Edit Host",onSubmit:C=>{this.hostService.update(o.hostname,!0,C.labels).subscribe(()=>{this.notificationService.show(Ta.k.success,"Updated Host \"" + o.hostname + "\""),this.table.refreshBtn()})}})})}hostMaintenance(){this.isExecuting=!0;const t=this.selection.first();"maintenance"!==t.status?this.hostService.update(t.hostname,!1,[],!0).subscribe(()=>{this.isExecuting=!1,this.notificationService.show(Ta.k.success,"\"" + t.hostname + "\" moved to maintenance"),this.table.refreshBtn()},o=>{if(this.isExecuting=!1,this.errorMessage=o.error.detail.split(/\n/),o.preventDefault(),!o.error.detail.includes("WARNING")||o.error.detail.includes("It is NOT safe to stop")||o.error.detail.includes("ALERT")||o.error.detail.includes("unsafe to stop"))this.notificationService.show(Ta.k.error,"\"" + t.hostname + "\" cannot be put into maintenance","" + o.error.detail + "");else{const l={titleText:"Warning",buttonText:"Continue",warning:!0,bodyTpl:this.maintenanceConfirmTpl,showSubmit:!0,onSubmit:()=>{this.hostService.update(t.hostname,!1,[],!0,!0).subscribe(()=>{this.modalRef.close()},()=>this.modalRef.close())}};this.modalRef=this.modalService.show(rd.Y,l)}}):this.hostService.update(t.hostname,!1,[],!0).subscribe(()=>{this.isExecuting=!1,this.notificationService.show(Ta.k.success,"\"" + t.hostname + "\" has exited maintenance"),this.table.refreshBtn()})}hostDrain(t=!1){const o=this.selection.first();if(t){const l=o.labels.indexOf("_no_schedule",0);o.labels.splice(l,1),this.hostService.update(o.hostname,!0,o.labels).subscribe(()=>{this.notificationService.show(Ta.k.info,"\"" + o.hostname + "\" stopped draining"),this.table.refreshBtn()})}else this.hostService.update(o.hostname,!1,[],!1,!1,!0).subscribe(()=>{this.notificationService.show(Ta.k.info,"\"" + o.hostname + "\" started draining"),this.table.refreshBtn()})}getDisable(t,o){if("remove"===t||"edit"===t||"maintenance"===t||"drain"===t){if(!(null==o?void 0:o.hasSingleSelection))return!0;if(!Sr().every(o.selected,"sources.orchestrator"))return this.messages.nonOrchHost}return this.orchService.getTableActionDisableDesc(this.orchStatus,this.actionOrchFeatures[t])}deleteAction(){const t=this.selection.first().hostname;this.modalRef=this.modalService.show(Oc.M,{itemDescription:"Host",itemNames:[t],actionDescription:"remove",submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new Ql.R("host/remove",{hostname:t}),call:this.hostService.delete(t)})})}checkHostsFactsAvailable(){const t=this.orchStatus.features;return!Sr().isEmpty(t)&&!!t.get_facts.available}transformHostsData(){if(this.checkHostsFactsAvailable())Sr().forEach(this.hosts,t=>{t.memory_total_bytes=this.emptyPipe.transform(1024*t.memory_total_kb),t.raw_capacity=this.emptyPipe.transform(t.hdd_capacity_bytes+t.flash_capacity_bytes)});else for(let t=4;t<this.columns.length;t++)this.columns[t].cellTemplate=this.orchTmpl}getHosts(t){this.isLoadingHosts||(this.isLoadingHosts=!0,this.sub=this.orchService.status().pipe((0,Ac.zg)(o=>{this.orchStatus=o;const l=this.checkHostsFactsAvailable();return this.hostService.list(`${l}`)})).subscribe(o=>{this.hosts=o,this.hosts.forEach(l=>{""===l.status&&(l.status="available")}),this.transformHostsData(),this.isLoadingHosts=!1},()=>{this.isLoadingHosts=!1,t.error()}))}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(Rr.$),e.Y36(L.W),e.Y36(bc),e.Y36(Mo.p4),e.Y36(ou.Z),e.Y36(Sc.P),e.Y36(Io.F0),e.Y36(Tl.g),e.Y36(h))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-hosts"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Tr.a,5),e.Gf(Eh,7),e.Gf(bh,7),e.Gf(da,7),e.Gf(wc,7),e.Gf($u,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.table=l.first),e.iGM(l=e.CRH())&&(o.servicesTpl=l.first),e.iGM(l=e.CRH())&&(o.maintenanceConfirmTpl=l.first),e.iGM(l=e.CRH())&&(o.orchTmpl=l.first),e.iGM(l=e.CRH())&&(o.flashTmpl=l.first),e.iGM(l=e.CRH())&&(o.hostNameTpl=l.first)}},inputs:{hiddenColumns:"hiddenColumns",hideMaintenance:"hideMaintenance",hasTableDetails:"hasTableDetails",hideToolHeader:"hideToolHeader",showGeneralActionsOnly:"showGeneralActionsOnly"},features:[e._Bn([{provide:X.F,useValue:new X.F("hosts")}]),e.qOj],decls:20,vars:3,consts:function(){let s,t,o,l,_,C,R,N,V;return s="Hosts List",t="Overall Performance",o="Host overview",l="" + "\ufffd0\ufffd" + "",_="Are you sure you want to continue?",C="Data will be available only if Orchestrator is available.",R="N/A",N="SSD, NVMEs",V="Flash",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","",4,"ngIf"],[3,"ngbNavOutlet"],["servicesTpl",""],["hostNameTpl",""],["maintenanceConfirmTpl",""],["orchTmpl",""],["flashTmpl",""],["name","modal"],["columnMode","flex","selectionType","single",3,"data","columns","searchableObjects","hasDetails","toolHeader","fetchData","setExpandedRow","updateSelection"],["table",""],[1,"table-actions","btn-toolbar"],["id","host-actions",1,"btn-group",3,"permission","selection","tableActions"],["cdTableDetail","",3,"permissions","selection"],t,["title",o,"uid","y0KGL0iZz","grafanaStyle","two",3,"grafanaPath","type"],[4,"ngFor","ngForOf"],[1,"me-1",3,"key","value"],[3,"ngClass"],["class","text-muted fst-italic",4,"ngIf"],[1,"text-muted","fst-italic"],[4,"ngIf"],l,_,["ngbTooltip",C],R,["ngbTooltip",N],V]},template:function(t,o){if(1&t&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,Ts,5,10,"ng-template",5),e.BQk(),e.YNc(6,Ff,1,0,"ng-container",6),e.YNc(7,Hu,4,0,"ng-container",6),e.qZA(),e._UZ(8,"div",7),e.YNc(9,Lf,1,1,"ng-template",null,8,e.W1O),e.YNc(11,zu,4,3,"ng-template",null,9,e.W1O),e.YNc(13,Th,2,2,"ng-template",null,10,e.W1O),e.YNc(15,cp,2,0,"ng-template",null,11,e.W1O),e.YNc(17,Ps,2,0,"ng-template",null,12,e.W1O),e._UZ(19,"router-outlet",13)),2&t){const l=e.MAs(1);e.xp6(6),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngbNavOutlet",l)}},directives:[Pr.Pz,Pr.nv,Pr.Vx,Pr.uN,Tr.a,Tu.K,Cf,p.O5,ha.F,Pr.tO,p.sg,$a,p.mk,Pr._L,Io.lC],styles:[""]}),n})();var Bu=(()=>{return(n=Bu||(Bu={})).COST_CAPACITY="cost_capacity",n.THROUGHPUT="throughput_optimized",n.IOPS="iops_optimized",Bu;var n})(),jl=i(62862);let Qf=(()=>{class n{constructor(t,o,l,_,C){this.activeModal=t,this.actionLabels=o,this.formBuilder=l,this.osdService=_,this.taskWrapper=C,this.driveGroups=[],this.submitAction=new e.vpe,this.action=o.CREATE,this.createForm()}createForm(){this.formGroup=this.formBuilder.group({})}onSubmit(){const t=Sr().join(Sr().map(this.driveGroups,"service_id"),", ");this.taskWrapper.wrapTaskAroundCall({task:new Ql.R("osd/"+Mo.MQ.CREATE,{tracking_id:t}),call:this.osdService.create(this.driveGroups,t)}).subscribe({error:()=>{this.formGroup.setErrors({cdSubmitButton:!0})},complete:()=>{this.submitAction.emit(),this.activeModal.close()}})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Pr.Kz),e.Y36(Mo.p4),e.Y36(jl.O),e.Y36(rc),e.Y36(Sc.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-creation-preview-modal"]],inputs:{driveGroups:"driveGroups"},outputs:{submitAction:"submitAction"},decls:15,vars:9,consts:function(){let s,t;return s="OSD creation preview",t="DriveGroups",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],t,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"h4"),e.SDv(8,7),e.qZA(),e.TgZ(9,"pre"),e._uU(10),e.ALo(11,"json"),e.qZA()(),e.TgZ(12,"div",8)(13,"cd-form-button-panel",9),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(14,"titlecase"),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.formGroup),e.xp6(6),e.Oqu(e.lcZ(11,5,o.driveGroups)),e.xp6(3),e.Q6J("form",o.formGroup)("submitText",e.lcZ(14,7,o.action)))},directives:[Ye.z,En._Y,En.JL,Oa.V,En.sg,Ml.p],pipes:[p.Ts,p.rS],styles:[""]}),n})();const kf=["inventoryDevices"];function Gp(n,s){if(1&n&&(e.TgZ(0,"span",16),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.hij(" ",t," ")}}function e_(n,s){if(1&n&&(e.TgZ(0,"cd-alert-panel",13),e.ynx(1),e.SDv(2,14),e.BQk(),e.YNc(3,Gp,2,1,"span",15),e.qZA()),2&n){const t=e.oxw();e.Q6J("showTitle",!1),e.xp6(3),e.Q6J("ngForOf",t.requiredFilters)}}function nf(n,s){if(1&n&&(e.TgZ(0,"div")(1,"p",17)(2,"span"),e.SDv(3,18),e.ALo(4,"dimlessBinary"),e.qZA()()()),2&n){const t=e.oxw();e.xp6(4),e.pQV(t.filteredDevices.length)(e.lcZ(4,2,t.capacity)),e.QtT(3)}}const rf=function(){return["available","osd_ids"]};let Ch=(()=>{class n{constructor(t,o,l,_,C){this.formBuilder=t,this.cdRef=o,this.activeModal=l,this.actionLabels=_,this.wizardStepService=C,this.submitAction=new e.vpe,this.icons=wo.P,this.filterColumns=[],this.devices=[],this.filteredDevices=[],this.capacity=0,this.canSubmit=!1,this.requiredFilters=[],this.action=_.ADD,this.createForm()}ngAfterViewInit(){const t=Sr().filter(this.inventoryDevices.columns,o=>this.filterColumns.includes(o.prop)&&"hostname"!==o.prop);setTimeout(()=>{this.requiredFilters=Sr().map(t,"name")},0)}createForm(){this.formGroup=this.formBuilder.group({})}onFilterChange(t){if(this.capacity=0,this.canSubmit=!1,Sr().isEmpty(t.filters))this.filteredDevices=[],this.event=void 0;else{const o=t.filters.filter(l=>"hostname"!==l.prop);this.canSubmit=!Sr().isEmpty(o),this.filteredDevices=t.data,this.capacity=Sr().sumBy(this.filteredDevices,"sys_api.size"),this.event=t}this.cdRef.detectChanges()}onSubmit(){this.submitAction.emit(this.event),this.activeModal.close()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(jl.O),e.Y36(e.sBO),e.Y36(Pr.Kz),e.Y36(Mo.p4),e.Y36(hu))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-devices-selection-modal"]],viewQuery:function(t,o){if(1&t&&e.Gf(kf,5),2&t){let l;e.iGM(l=e.CRH())&&(o.inventoryDevices=l.first)}},outputs:{submitAction:"submitAction"},decls:14,vars:16,consts:function(){let s,t,o;return s="" + "\ufffd0\ufffd" + " devices",t="At least one of these filters must be applied in order to proceed:",o="Number of devices: " + "\ufffd0\ufffd" + ". Raw capacity: " + "\ufffd1\ufffd" + ".",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],["type","warning","size","slim",3,"showTitle",4,"ngIf"],[3,"devices","filterColumns","hostname","diskType","hiddenColumns","filterChange"],["inventoryDevices",""],[4,"ngIf"],[1,"modal-footer"],[3,"form","disabled","submitText","submitActionEvent"],["type","warning","size","slim",3,"showTitle"],t,["class","badge badge-dark ms-2",4,"ngFor","ngForOf"],[1,"badge","badge-dark","ms-2"],[1,"text-center"],o]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6),e.YNc(7,e_,4,2,"cd-alert-panel",7),e.TgZ(8,"cd-inventory-devices",8,9),e.NdJ("filterChange",function(_){return o.onFilterChange(_)}),e.qZA(),e.YNc(10,nf,5,4,"div",10),e.qZA(),e.TgZ(11,"div",11)(12,"cd-form-button-panel",12),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(13,"titlecase"),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.deviceType),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.formGroup),e.xp6(3),e.Q6J("ngIf",!o.canSubmit),e.xp6(1),e.Q6J("devices",o.devices)("filterColumns",o.filterColumns)("hostname",o.hostname)("diskType",o.diskType)("hiddenColumns",e.DdM(15,rf)),e.xp6(2),e.Q6J("ngIf",o.canSubmit),e.xp6(2),e.Q6J("form",o.formGroup)("disabled",!o.canSubmit||0===o.filteredDevices.length)("submitText",e.lcZ(13,13,o.action)))},directives:[Ye.z,En._Y,En.JL,Oa.V,En.sg,p.O5,yo.G,p.sg,Rc,Ml.p],pipes:[Rr.$,p.rS],styles:[""]}),n})();function t_(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,7),e.qZA())}function ud(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,8),e.qZA())}function Mh(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,9),e.qZA())}const fp=function(n){return[n]};function Oh(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"button",10),e.NdJ("click",function(){return e.CHM(t),e.oxw().showSelectionModal()}),e._UZ(2,"i",11),e.ynx(3),e.SDv(4,12),e.BQk(),e.qZA(),e.BQk()}if(2&n){const t=e.oxw();e.xp6(1),e.Q6J("title",t.addButtonTooltip)("disabled",0===t.availDevices.length||!t.canSelect||t.expansionCanSelect),e.xp6(1),e.Q6J("ngClass",e.VKq(3,fp,t.icons.add))}}function Gc(n,s){if(1&n&&(e.TgZ(0,"span")(1,"span",19),e._uU(2),e.qZA()()),2&n){const t=s.$implicit;e.xp6(2),e.AsE("",t.name,": ",t.value.formatted,"")}}function Xf(n,s){if(1&n&&(e.TgZ(0,"div",20)(1,"span"),e.SDv(2,21),e.ALo(3,"dimlessBinary"),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(3),e.pQV(e.lcZ(3,1,t.capacity)),e.QtT(2)}}const pp=function(){return["available","osd_ids"]},Op=function(){return[]};function Od(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",13),e.YNc(1,Gc,3,2,"span",14),e.TgZ(2,"a",15),e.NdJ("click",function(){return e.CHM(t),e.oxw().clearDevices(),!1}),e._UZ(3,"i",11),e.ynx(4),e.SDv(5,16),e.BQk(),e.qZA()(),e.TgZ(6,"div"),e._UZ(7,"cd-inventory-devices",17),e.qZA(),e.YNc(8,Xf,4,3,"div",18)}if(2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngForOf",t.appliedFilters),e.xp6(2),e.Q6J("ngClass",e.VKq(6,fp,t.icons.clearFilters)),e.xp6(4),e.Q6J("devices",t.devices)("hiddenColumns",e.DdM(8,pp))("filterColumns",e.DdM(9,Op)),e.xp6(1),e.Q6J("ngIf","data"===t.type)}}let Vp=(()=>{class n{constructor(t,o,l){this.modalService=t,this.osdService=o,this.router=l,this.selected=new e.vpe,this.cleared=new e.vpe,this.icons=wo.P,this.devices=[],this.capacity=0,this.appliedFilters=new Array,this.expansionCanSelect=!1,this.tooltips={noAvailDevices:"No available devices",addPrimaryFirst:"Please add primary devices first",addByFilters:"Add devices by using filters"},this.isOsdPage=this.router.url.includes("/osd")}ngOnInit(){var t,o,l;this.isOsdPage||(this.devices=(null===(t=this.osdService)||void 0===t?void 0:t.osdDevices[this.type])?this.osdService.osdDevices[this.type]:[],this.capacity=Sr().sumBy(this.devices,"sys_api.size"),this.expansionCanSelect=!!(null===(o=this.osdService)||void 0===o?void 0:o.osdDevices)&&(null===(l=this.osdService)||void 0===l?void 0:l.osdDevices.disableSelect)),this.updateAddButtonTooltip()}ngOnChanges(){this.updateAddButtonTooltip()}showSelectionModal(){this.modalService.show(Ch,{hostname:this.hostname,deviceType:this.name,diskType:"Primary"===this.name?"hdd":"ssd",devices:this.availDevices,filterColumns:["hostname","human_readable_type","sys_api.vendor","sys_api.model","sys_api.size"]},{size:"xl"}).componentInstance.submitAction.subscribe(C=>{this.devices=C.data,this.capacity=Sr().sumBy(this.devices,"sys_api.size"),this.appliedFilters=C.filters;const R=Sr().assign({type:this.type},C);this.isOsdPage||(this.osdService.osdDevices[this.type]=this.devices,this.osdService.osdDevices.disableSelect=this.canSelect||this.devices.length===this.availDevices.length,this.osdService.osdDevices[this.type].capacity=this.capacity),this.selected.emit(R)})}updateAddButtonTooltip(){this.addButtonTooltip="data"===this.type&&0===this.availDevices.length?this.tooltips.noAvailDevices:this.canSelect?0===this.availDevices.length?this.tooltips.noAvailDevices:this.tooltips.addByFilters:this.tooltips.addPrimaryFirst}clearDevices(){this.isOsdPage||(this.expansionCanSelect=!1,this.osdService.osdDevices.disableSelect=!1,this.osdService.osdDevices=[]);const t={type:this.type,clearedDevices:[...this.devices]};this.devices=[],this.cleared.emit(t)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(ou.Z),e.Y36(rc),e.Y36(Io.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-devices-selection-groups"]],inputs:{type:"type",name:"name",hostname:"hostname",availDevices:"availDevices",canSelect:"canSelect"},outputs:{selected:"selected",cleared:"cleared"},features:[e.TTD],decls:12,vars:6,consts:function(){let s,t,o,l,_,C,R;return s="" + "\ufffd0\ufffd" + " devices",t="The primary storage devices. These devices contain all OSD data.",o="Write-Ahead-Log devices. These devices are used for BlueStore\u2019s internal journal. It is only useful to use a WAL device if the device is faster than the primary device (e.g. NVME devices or SSDs). If there is only a small amount of fast storage available (e.g., less than a gigabyte), we recommend using it as a WAL device.",l="DB devices can be used for storing BlueStore\u2019s internal metadata. It is only helpful to provision a DB device if it is faster than the primary device (e.g. NVME devices or SSD).",_="Add",C="Clear",R="Raw capacity: " + "\ufffd0\ufffd" + "",[[1,"form-group","row"],["for","createDeleteButton",1,"cd-col-form-label"],s,[4,"ngIf"],[1,"cd-col-form-input"],[4,"ngIf","ngIfElse"],["blockClearDevices",""],t,o,l,["type","button","data-toggle","tooltip",1,"btn","btn-light",3,"title","disabled","click"],[3,"ngClass"],_,[1,"pb-2","my-2","border-bottom"],[4,"ngFor","ngForOf"],["href","",1,"tc_clearSelections",3,"click"],C,[3,"devices","hiddenColumns","filterColumns"],["class","float-end",4,"ngIf"],[1,"badge","badge-dark","me-2"],[1,"float-end"],R]},template:function(t,o){if(1&t&&(e.TgZ(0,"div",0)(1,"label",1),e.ynx(2),e.SDv(3,2),e.BQk(),e.TgZ(4,"cd-helper"),e.YNc(5,t_,2,0,"span",3),e.YNc(6,ud,2,0,"span",3),e.YNc(7,Mh,2,0,"span",3),e.qZA()(),e.TgZ(8,"div",4),e.YNc(9,Oh,5,5,"ng-container",5),e.YNc(10,Od,9,10,"ng-template",null,6,e.W1O),e.qZA()()),2&t){const l=e.MAs(11);e.xp6(3),e.pQV(o.name),e.QtT(3),e.xp6(2),e.Q6J("ngIf","data"===o.type),e.xp6(1),e.Q6J("ngIf","wal"===o.type),e.xp6(1),e.Q6J("ngIf","db"===o.type),e.xp6(2),e.Q6J("ngIf",0===o.devices.length)("ngIfElse",l)}},directives:[ll.P,xe.S,p.O5,ge.o,p.mk,p.sg,Rc],pipes:[Rr.$],styles:[".tc_clearSelections[_ngcontent-%COMP%]{text-decoration:none}"]}),n})();const Kf=["dataDeviceSelectionGroups"],n_=["walDeviceSelectionGroups"],r_=["dbDeviceSelectionGroups"],Ap=["previewButtonPanel"];function Zp(n,s){1&n&&e._UZ(0,"cd-orchestrator-doc-panel")}function sf(n,s){if(1&n&&(e.TgZ(0,"div",33),e.SDv(1,34),e.ALo(2,"titlecase"),e.ALo(3,"upperFirst"),e.qZA()),2&n){const t=e.oxw(2);e.xp6(3),e.pQV(e.lcZ(2,2,t.action))(e.lcZ(3,4,t.resource)),e.QtT(1)}}function qf(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",35),e.SDv(1,36),e.qZA())}function zp(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",37)(1,"div",38)(2,"input",39),e.NdJ("change",function(){return e.CHM(t),e.oxw(2).emitDeploymentSelection()}),e.qZA(),e.TgZ(3,"label",40),e.tHW(4,41),e.TgZ(5,"cd-helper"),e._UZ(6,"span"),e.qZA(),e.N_p(),e.qZA()()()}if(2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(2),e.Q6J("id",t)("value",t),e.uIk("disabled",null==o.deploymentOptions||!o.deploymentOptions.options[t].available||null),e.xp6(1),e.Q6J("id","label_"+t)("for",t),e.xp6(3),e.pQV(null==o.deploymentOptions?null:o.deploymentOptions.options[t].title)((null==o.deploymentOptions?null:o.deploymentOptions.recommended_option)===t?"(Recommended)":"")(null==o.deploymentOptions?null:o.deploymentOptions.options[t].desc),e.QtT(4)}}function v_(n,s){1&n&&(e.TgZ(0,"span",50),e.SDv(1,51),e.qZA())}function ep(n,s){if(1&n&&(e.TgZ(0,"div",42)(1,"label",43),e.ynx(2),e.SDv(3,44),e.BQk(),e.TgZ(4,"cd-helper")(5,"span"),e.SDv(6,45),e.qZA(),e._UZ(7,"br"),e.TgZ(8,"span"),e.SDv(9,46),e.qZA()()(),e.TgZ(10,"div",47),e._UZ(11,"input",48),e.YNc(12,v_,2,0,"span",49),e.qZA()()),2&n){e.oxw();const t=e.MAs(4),o=e.oxw();e.xp6(12),e.Q6J("ngIf",o.form.showError("walSlots",t,"min"))}}function Wp(n,s){1&n&&(e.TgZ(0,"span",50),e.SDv(1,57),e.qZA())}function y_(n,s){if(1&n&&(e.TgZ(0,"div",42)(1,"label",52),e.ynx(2),e.SDv(3,53),e.BQk(),e.TgZ(4,"cd-helper")(5,"span"),e.SDv(6,54),e.qZA(),e._UZ(7,"br"),e.TgZ(8,"span"),e.SDv(9,55),e.qZA()()(),e.TgZ(10,"div",47),e._UZ(11,"input",56),e.YNc(12,Wp,2,0,"span",49),e.qZA()()),2&n){e.oxw();const t=e.MAs(4),o=e.oxw();e.xp6(12),e.Q6J("ngIf",o.form.showError("dbSlots",t,"min"))}}function nm(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",58)(1,"input",59),e.NdJ("change",function(){return e.CHM(t),e.oxw(2).emitDeploymentSelection()}),e.qZA(),e.TgZ(2,"label",60),e._uU(3),e.qZA()()}if(2&n){const t=s.$implicit;e.xp6(1),e.s9C("id",t.key),e.s9C("name",t.key),e.s9C("formControlName",t.key),e.xp6(1),e.s9C("for",t.key),e.xp6(1),e.Oqu(t.desc)}}function Ah(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",61)(1,"cd-form-button-panel",62,63),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw(2).submit()}),e.qZA()()}if(2&n){e.oxw();const t=e.MAs(23),o=e.oxw();e.xp6(1),e.Q6J("form",o.form)("disabled",0===t.devices.length&&!o.simpleDeployment)("submitText",o.simpleDeployment?"Create OSDs":o.actionLabels.PREVIEW)}}const E_=function(n){return{collapsed:n}},$f=function(n){return{show:n}};function $_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",2),e.YNc(1,sf,4,6,"div",3),e.TgZ(2,"div",4)(3,"form",5,6),e.YNc(5,qf,2,0,"cd-alert-panel",7),e.TgZ(6,"div",8)(7,"div",9)(8,"h2",10)(9,"button",11),e.NdJ("click",function(){return e.CHM(t),e.oxw().emitDeploymentMode()}),e.SDv(10,12),e.qZA()()(),e.TgZ(11,"div",13)(12,"div",14),e.YNc(13,zp,7,8,"div",15),e.qZA()(),e.TgZ(14,"div",9)(15,"h2",10)(16,"button",16),e.NdJ("click",function(){return e.CHM(t),e.oxw().emitDeploymentMode()}),e.SDv(17,17),e.qZA()()(),e.TgZ(18,"div",13)(19,"div",14)(20,"div",18)(21,"fieldset")(22,"cd-osd-devices-selection-groups",19,20),e.NdJ("selected",function(l){return e.CHM(t),e.oxw().onDevicesSelected(l)})("cleared",function(l){return e.CHM(t),e.oxw().onDevicesCleared(l)}),e.qZA()(),e.TgZ(24,"fieldset")(25,"legend"),e.SDv(26,21),e.qZA(),e.TgZ(27,"cd-osd-devices-selection-groups",22,23),e.NdJ("selected",function(l){return e.CHM(t),e.oxw().onDevicesSelected(l)})("cleared",function(l){return e.CHM(t),e.oxw().onDevicesCleared(l)}),e.qZA(),e.YNc(29,ep,13,1,"div",24),e.TgZ(30,"cd-osd-devices-selection-groups",25,26),e.NdJ("selected",function(l){return e.CHM(t),e.oxw().onDevicesSelected(l)})("cleared",function(l){return e.CHM(t),e.oxw().onDevicesCleared(l)}),e.qZA(),e.YNc(32,y_,13,1,"div",24),e.qZA()()()(),e.TgZ(33,"div",9)(34,"h2",10)(35,"button",27),e.SDv(36,28),e.qZA()()(),e.TgZ(37,"div",29)(38,"div",14)(39,"div",30),e.YNc(40,nm,4,5,"div",31),e.qZA()()()()()(),e.YNc(41,Ah,3,3,"div",32),e.qZA()}if(2&n){const t=e.MAs(23),o=e.MAs(28),l=e.MAs(31),_=e.oxw();e.xp6(1),e.Q6J("ngIf",!_.hideTitle),e.xp6(2),e.Q6J("formGroup",_.form),e.xp6(2),e.Q6J("ngIf",!(null!=_.deploymentOptions&&_.deploymentOptions.recommended_option)),e.xp6(4),e.Q6J("ngClass",e.VKq(20,E_,!_.simpleDeployment)),e.xp6(2),e.Q6J("ngClass",e.VKq(22,$f,_.simpleDeployment)),e.xp6(2),e.Q6J("ngForOf",_.optionNames),e.xp6(3),e.Q6J("ngClass",e.VKq(24,E_,_.simpleDeployment)),e.xp6(2),e.Q6J("ngClass",e.VKq(26,$f,!_.simpleDeployment)),e.xp6(4),e.Q6J("availDevices",_.availDevices)("canSelect",0!==_.availDevices.length),e.xp6(5),e.Q6J("availDevices",_.availDevices)("canSelect",0!==t.devices.length)("hostname",_.hostname),e.xp6(2),e.Q6J("ngIf",0!==o.devices.length),e.xp6(1),e.Q6J("availDevices",_.availDevices)("canSelect",0!==t.devices.length)("hostname",_.hostname),e.xp6(2),e.Q6J("ngIf",0!==l.devices.length),e.xp6(8),e.Q6J("ngForOf",_.featureList),e.xp6(1),e.Q6J("ngIf",!_.hideSubmitBtn)}}let b_=(()=>{class n extends Ul.E{constructor(t,o,l,_,C,R,N,V){super(),this.actionLabels=t,this.authStorageService=o,this.orchService=l,this.hostService=_,this.router=C,this.modalService=R,this.osdService=N,this.taskWrapper=V,this.hideTitle=!1,this.hideSubmitBtn=!1,this.emitDriveGroup=new e.vpe,this.emitDeploymentOption=new e.vpe,this.emitMode=new e.vpe,this.icons=wo.P,this.columns=[],this.allDevices=[],this.availDevices=[],this.dataDeviceFilters=[],this.dbDeviceFilters=[],this.walDeviceFilters=[],this.hostname="",this.driveGroup=new pc,this.featureList=[],this.hasOrchestrator=!0,this.simpleDeployment=!0,this.optionNames=Object.values(Bu),this.resource="OSDs",this.action=this.actionLabels.CREATE,this.features={encrypted:{key:"encrypted",desc:"Encryption"}},this.featureList=Sr().map(this.features,(Q,oe)=>Object.assign(Q,{key:oe})),this.createForm()}ngOnInit(){this.orchService.status().subscribe(t=>{this.hasOrchestrator=t.available,t.available?this.getDataDevices():this.loadingNone()}),this.osdService.getDeploymentOptions().subscribe(t=>{var o,l;this.deploymentOptions=t,this.form.get("deploymentOption").setValue(null===(o=this.deploymentOptions)||void 0===o?void 0:o.recommended_option),(null===(l=this.deploymentOptions)||void 0===l?void 0:l.recommended_option)&&this.enableFeatures()}),this.form.get("walSlots").valueChanges.subscribe(t=>this.setSlots("wal",t)),this.form.get("dbSlots").valueChanges.subscribe(t=>this.setSlots("db",t)),Sr().each(this.features,t=>{this.form.get("features").get(t.key).valueChanges.subscribe(o=>this.featureFormUpdate(t.key,o))})}createForm(){this.form=new tc.d({walSlots:new En.NI(0),dbSlots:new En.NI(0),features:new tc.d(this.featureList.reduce((t,o)=>(t[o.key]=new En.NI({value:!1,disabled:!0}),t),{})),deploymentOption:new En.NI(0)})}getDataDevices(){this.hostService.inventoryDeviceList().subscribe(t=>{this.allDevices=Sr().filter(t,"available"),this.availDevices=[...this.allDevices],this.loadingReady()},()=>{this.allDevices=[],this.availDevices=[],this.loadingError()})}setSlots(t,o){"number"==typeof o&&o>=0&&this.driveGroup.setSlots(t,o)}featureFormUpdate(t,o){this.driveGroup.setFeature(t,o)}enableFeatures(){this.featureList.forEach(t=>{this.form.get(t.key).enable({emitEvent:!1})})}disableFeatures(){this.featureList.forEach(t=>{const o=this.form.get(t.key);o.disable({emitEvent:!1}),o.setValue(!1,{emitEvent:!1})})}onDevicesSelected(t){if(this.availDevices=t.dataOut,"data"===t.type){const o=Sr().find(t.filters,{prop:"hostname"});o?(this.hostname=o.value.raw,this.availDevices=t.dataOut.filter(l=>l.hostname===this.hostname),this.driveGroup.setHostPattern(this.hostname)):this.driveGroup.setHostPattern("*"),this.enableFeatures()}this.driveGroup.setDeviceSelection(t.type,t.filters),this.emitDriveGroup.emit(this.driveGroup)}onDevicesCleared(t){"data"===t.type?(this.hostname="",this.availDevices=[...this.allDevices],this.walDeviceSelectionGroups.devices=[],this.dbDeviceSelectionGroups.devices=[],this.disableFeatures(),this.driveGroup.reset(),this.form.get("walSlots").setValue(0,{emitEvent:!1}),this.form.get("dbSlots").setValue(0,{emitEvent:!1})):(this.availDevices=[...this.availDevices,...t.clearedDevices],this.driveGroup.clearDeviceSelection(t.type),this.form.get(`${t.type}Slots`).setValue(0,{emitEvent:!1}))}emitDeploymentSelection(){const t=this.form.get("deploymentOption").value,o=this.form.get("encrypted").value;this.emitDeploymentOption.emit({option:t,encrypted:o})}emitDeploymentMode(){this.simpleDeployment=!this.simpleDeployment,this.simpleDeployment||0!==this.dataDeviceSelectionGroups.devices.length?this.enableFeatures():this.disableFeatures(),this.emitMode.emit(this.simpleDeployment)}submit(){if(this.simpleDeployment){const l={option:this.form.get("deploymentOption").value,encrypted:this.form.get("encrypted").value},C=`${this.deploymentOptions.options[l.option].title} deployment`;this.taskWrapper.wrapTaskAroundCall({task:new Ql.R("osd/"+Mo.MQ.CREATE,{tracking_id:C}),call:this.osdService.create([l],C,"predefined")}).subscribe({complete:()=>{this.router.navigate(["/osd"])}})}else{const t=this.authStorageService.getUsername();this.driveGroup.setName(`dashboard-${t}-${Sr().now()}`),this.modalService.show(Qf,{driveGroups:[this.driveGroup.spec]}).componentInstance.submitAction.subscribe(()=>{this.router.navigate(["/osd"])}),this.previewButtonPanel.submitButton.loading=!1}}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(Vi.j),e.Y36(h),e.Y36(bc),e.Y36(Io.F0),e.Y36(ou.Z),e.Y36(rc),e.Y36(Sc.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-form"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Kf,5),e.Gf(n_,5),e.Gf(r_,5),e.Gf(Ap,5)),2&t){let l;e.iGM(l=e.CRH())&&(o.dataDeviceSelectionGroups=l.first),e.iGM(l=e.CRH())&&(o.walDeviceSelectionGroups=l.first),e.iGM(l=e.CRH())&&(o.dbDeviceSelectionGroups=l.first),e.iGM(l=e.CRH())&&(o.previewButtonPanel=l.first)}},inputs:{hideTitle:"hideTitle",hideSubmitBtn:"hideSubmitBtn"},outputs:{emitDriveGroup:"emitDriveGroup",emitDeploymentOption:"emitDeploymentOption",emitMode:"emitMode"},features:[e.qOj],decls:2,vars:2,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e;return s="Deployment Options",t="Advanced Mode",o="Shared devices",l="Features",_="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",C=" No devices(HDD, SSD or NVME) were found. Creation of OSDs will remain disabled until devices are added. ",R="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + " " + "\ufffd#5\ufffd" + "" + "\ufffd#6\ufffd" + "" + "\ufffd2\ufffd" + "" + "\ufffd/#6\ufffd" + "" + "\ufffd/#5\ufffd" + "",N="WAL slots",V="How many OSDs per WAL device.",Q="Specify 0 to let Orchestrator backend decide it.",oe="Value should be greater than or equal to 0",le="DB slots",_e="How many OSDs per DB device.",ye="Specify 0 to let Orchestrator backend decide it.",$e="Value should be greater than or equal to 0",[[4,"ngIf"],["class","card",4,"cdFormLoading"],[1,"card"],["class","card-header",4,"ngIf"],[1,"card-body","ms-2"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],["type","warning","class","mx-3",4,"ngIf"],[1,"accordion"],[1,"accordion-item"],[1,"accordion-header"],["type","button","data-toggle","collapse","aria-label","toggle deployment options",1,"accordion-button",3,"ngClass","click"],s,[1,"accordion-collapse","collapse",3,"ngClass"],[1,"accordion-body"],["class","pt-3 pb-3",4,"ngFor","ngForOf"],["type","button","aria-label","toggle advanced mode",1,"accordion-button",3,"ngClass","click"],t,[1,"card-body"],["name","Primary","type","data",3,"availDevices","canSelect","selected","cleared"],["dataDeviceSelectionGroups",""],o,["name","WAL","type","wal",3,"availDevices","canSelect","hostname","selected","cleared"],["walDeviceSelectionGroups",""],["class","form-group row",4,"ngIf"],["name","DB","type","db",3,"availDevices","canSelect","hostname","selected","cleared"],["dbDeviceSelectionGroups",""],["type","button","data-toggle","collapse","aria-label","features","aria-expanded","true",1,"accordion-button"],l,[1,"accordion-collapse","collapse","show"],["formGroupName","features",1,"pt-3","pb-3"],["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],["class","card-footer",4,"ngIf"],[1,"card-header"],_,["type","warning",1,"mx-3"],C,[1,"pt-3","pb-3"],[1,"custom-control","form-check","custom-control-inline"],["type","radio","name","deploymentOption","formControlName","deploymentOption",1,"form-check-input",3,"id","value","change"],[1,"form-check-label",3,"id","for"],R,[1,"form-group","row"],["for","walSlots",1,"cd-col-form-label"],N,V,Q,[1,"cd-col-form-input"],["id","walSlots","name","walSlots","type","number","min","0","formControlName","walSlots",1,"form-control"],["class","invalid-feedback",4,"ngIf"],[1,"invalid-feedback"],oe,["for","dbSlots",1,"cd-col-form-label"],le,_e,ye,["id","dbSlots","name","dbSlots","type","number","min","0","formControlName","dbSlots",1,"form-control"],$e,[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","name","formControlName","change"],[1,"custom-control-label",3,"for"],[1,"card-footer"],["wrappingClass","text-right",3,"form","disabled","submitText","submitActionEvent"],["previewButtonPanel",""]]},template:function(t,o){1&t&&(e.YNc(0,Zp,1,0,"cd-orchestrator-doc-panel",0),e.YNc(1,$_,42,28,"div",1)),2&t&&(e.Q6J("ngIf",!o.hasOrchestrator),e.xp6(1),e.Q6J("cdFormLoading",o.loading))},directives:[p.O5,ah,cu.y,En._Y,En.JL,Oa.V,En.sg,yo.G,ge.o,p.mk,p.sg,En._,En.Fj,Ll.b,En.JJ,En.u,xe.S,Vp,ll.P,En.qQ,En.wV,En.x0,En.Wl,Ml.p],pipes:[p.rS,Mt.m],styles:[""]}),n})();var Mf=i(67460);let H_=(()=>{class n{transform(t){if(Sr().isUndefined(t))return "no spec";if(Sr().get(t,"unmanaged",!1))return "unmanaged";const o=[],l=Sr().get(t,"placement.hosts"),_=Sr().get(t,"placement.count"),C=Sr().get(t,"placement.label"),R=Sr().get(t,"placement.host_pattern");return Sr().isArray(l)&&o.push(...l),Sr().isNumber(_)&&o.push("count:" + _ + ""),Sr().isString(C)&&o.push("label:" + C + ""),Sr().isString(R)&&o.push(R),o.join(";")}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"placement",type:n,pure:!0}),n})();var tp=i(79765),Dp=i(66682),xp=i(54395),Ud=i(87519),Rp=i(45435),i_=i(80842),Jp=i(14745),S_=i(4416),Ad=i(58039);function B_(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.hij(" ",t," ")}}function Sm(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,29),e.qZA())}function hp(n,s){1&n&&(e.TgZ(0,"option",12),e.SDv(1,34),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Dh(n,s){1&n&&(e.TgZ(0,"option",12),e.SDv(1,35),e.qZA()),2&n&&e.Q6J("ngValue",null)}function Vc(n,s){1&n&&(e.TgZ(0,"option",12),e.SDv(1,36),e.qZA()),2&n&&e.Q6J("ngValue",null)}function rm(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.service_name),e.xp6(1),e.Oqu(t.service_name)}}function T_(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,37),e.qZA())}const xh=function(){return["ingress"]},I=function(n){return{required:n}};function ne(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",7)(1,"label",30),e.SDv(2,31),e.qZA(),e.TgZ(3,"div",10)(4,"select",32),e.NdJ("change",function(){return e.CHM(t),e.oxw().prePopulateId()}),e.YNc(5,hp,2,1,"option",33),e.YNc(6,Dh,2,1,"option",33),e.YNc(7,Vc,2,1,"option",33),e.YNc(8,rm,2,2,"option",14),e.qZA(),e.YNc(9,T_,2,0,"span",15),e.qZA()()}if(2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(7,I,e.DdM(6,xh).includes(t.serviceForm.controls.service_type.value))),e.xp6(4),e.Q6J("ngIf",null===t.services),e.xp6(1),e.Q6J("ngIf",null!==t.services&&0===t.services.length),e.xp6(1),e.Q6J("ngIf",null!==t.services&&t.services.length>0),e.xp6(1),e.Q6J("ngForOf",t.services),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("backend_service",o,"required"))}}function T(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,42),e.qZA())}function z(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,43),e.qZA())}function Me(n,s){1&n&&(e.TgZ(0,"span",28),e.tHW(1,44),e._UZ(2,"strong"),e.N_p(),e.qZA())}function Ke(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,45),e.qZA())}const gn=function(){return["mds","rgw","nfs","iscsi","ingress"]};function yr(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",38)(2,"span"),e.SDv(3,39),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,40),e.qZA()(),e.TgZ(6,"div",10),e._UZ(7,"input",41),e.YNc(8,T,2,0,"span",15),e.YNc(9,z,2,0,"span",15),e.YNc(10,Me,3,0,"span",15),e.YNc(11,Ke,2,0,"span",15),e.qZA()()),2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(1),e.Q6J("ngClass",e.VKq(6,I,e.DdM(5,gn).includes(t.serviceForm.controls.service_type.value))),e.xp6(7),e.Q6J("ngIf",t.serviceForm.showError("service_id",o,"required")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("service_id",o,"uniqueName")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("service_id",o,"rgwPattern")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("service_id",o,"mdsPattern"))}}function Nr(n,s){1&n&&(e.TgZ(0,"div",7)(1,"label",46),e.SDv(2,47),e.qZA(),e.TgZ(3,"div",10)(4,"select",48)(5,"option",49),e.SDv(6,50),e.qZA(),e.TgZ(7,"option",51),e.SDv(8,52),e.qZA()()()())}function vi(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,56),e.qZA())}function di(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",7)(1,"label",53),e.SDv(2,54),e.qZA(),e.TgZ(3,"div",10)(4,"input",55),e.NdJ("focus",function(l){return e.CHM(t),e.oxw().labelFocus.next(l.target.value)})("click",function(l){return e.CHM(t),e.oxw().labelClick.next(l.target.value)}),e.qZA(),e.YNc(5,vi,2,0,"span",15),e.qZA()()}if(2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(4),e.Q6J("ngbTypeahead",t.searchLabels),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("label",o,"required"))}}function ts(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",57),e.SDv(2,58),e.qZA(),e.TgZ(3,"div",10),e._UZ(4,"cd-select-badges",59),e.qZA()()),2&n){const t=e.oxw();e.xp6(4),e.Q6J("data",t.serviceForm.controls.hosts.value)("options",t.hosts.options)("messages",t.hosts.messages)}}function Do(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,64),e.qZA())}function Ss(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,65),e.qZA())}function jo(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",60)(2,"span"),e.SDv(3,61),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,62),e.qZA()(),e.TgZ(6,"div",10),e._UZ(7,"input",63),e.YNc(8,Do,2,0,"span",15),e.YNc(9,Ss,2,0,"span",15),e.qZA()()),2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(8),e.Q6J("ngIf",t.serviceForm.showError("count",o,"min")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("count",o,"pattern"))}}function ia(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,69),e.qZA())}function y(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,70),e.qZA())}function D(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,71),e.qZA())}function Y(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"div",7)(2,"label",66),e.SDv(3,67),e.qZA(),e.TgZ(4,"div",10),e._UZ(5,"input",68),e.YNc(6,ia,2,0,"span",15),e.YNc(7,y,2,0,"span",15),e.YNc(8,D,2,0,"span",15),e.qZA()(),e.BQk()),2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",t.serviceForm.showError("rgw_frontend_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("rgw_frontend_port",o,"min")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("rgw_frontend_port",o,"max"))}}function Ee(n,s){1&n&&(e.TgZ(0,"option",12),e.SDv(1,75),e.qZA()),2&n&&e.Q6J("ngValue",null)}function ze(n,s){1&n&&(e.TgZ(0,"option",12),e.SDv(1,76),e.qZA()),2&n&&e.Q6J("ngValue",null)}function At(n,s){1&n&&(e.TgZ(0,"option",12),e.SDv(1,77),e.qZA()),2&n&&e.Q6J("ngValue",null)}function tn(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.pool_name),e.xp6(1),e.Oqu(t.pool_name)}}function Tn(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,78),e.qZA())}function ar(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",72),e.SDv(2,73),e.qZA(),e.TgZ(3,"div",10)(4,"select",74),e.YNc(5,Ee,2,1,"option",33),e.YNc(6,ze,2,1,"option",33),e.YNc(7,At,2,1,"option",33),e.YNc(8,tn,2,2,"option",14),e.qZA(),e.YNc(9,Tn,2,0,"span",15),e.qZA()()),2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(5),e.Q6J("ngIf",null===t.pools),e.xp6(1),e.Q6J("ngIf",t.pools&&0===t.pools.length),e.xp6(1),e.Q6J("ngIf",t.pools&&t.pools.length>0),e.xp6(1),e.Q6J("ngForOf",t.pools),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("pool",o,"required"))}}function li(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,96),e.qZA())}function Ho(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,97),e.qZA())}function Hs(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,98),e.qZA())}function po(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,99),e.qZA())}function fs(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,100),e.qZA())}const oa=function(){return["iscsi"]};function Xs(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"div",7)(2,"label",79)(3,"span"),e.SDv(4,80),e.qZA(),e.TgZ(5,"cd-helper")(6,"span"),e.SDv(7,81),e.qZA(),e._UZ(8,"br"),e.TgZ(9,"span"),e.tHW(10,82),e._UZ(11,"b"),e.N_p(),e.qZA()()(),e.TgZ(12,"div",10),e._UZ(13,"input",83),e.qZA()(),e.TgZ(14,"div",7)(15,"label",84),e.SDv(16,85),e.qZA(),e.TgZ(17,"div",10),e._UZ(18,"input",86),e.YNc(19,li,2,0,"span",15),e.YNc(20,Ho,2,0,"span",15),e.YNc(21,Hs,2,0,"span",15),e.qZA()(),e.TgZ(22,"div",7)(23,"label",87),e.SDv(24,88),e.qZA(),e.TgZ(25,"div",10),e._UZ(26,"input",89),e.YNc(27,po,2,0,"span",15),e.qZA()(),e.TgZ(28,"div",7)(29,"label",90),e.SDv(30,91),e.qZA(),e.TgZ(31,"div",10)(32,"div",92),e._UZ(33,"input",93)(34,"button",94)(35,"cd-copy-2-clipboard-button",95),e.YNc(36,fs,2,0,"span",15),e.qZA()()(),e.BQk()),2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(19),e.Q6J("ngIf",t.serviceForm.showError("api_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("api_port",o,"min")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("api_port",o,"max")),e.xp6(2),e.Q6J("ngClass",e.VKq(8,I,e.DdM(7,oa).includes(t.serviceForm.controls.service_type.value))),e.xp6(4),e.Q6J("ngIf",t.serviceForm.showError("api_user",o,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(11,I,e.DdM(10,oa).includes(t.serviceForm.controls.service_type.value))),e.xp6(7),e.Q6J("ngIf",t.serviceForm.showError("api_password",o,"required"))}}function Qr(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,113),e.qZA())}function Fr(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,114),e.qZA())}function Zr(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,115),e.qZA())}function Hi(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,116),e.qZA())}function io(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,117),e.qZA())}function Ha(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,118),e.qZA())}function vs(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,119),e.qZA())}function Pa(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,120),e.qZA())}function Za(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,121),e.qZA())}function va(n,s){1&n&&(e.TgZ(0,"div",7)(1,"label",122)(2,"span"),e.SDv(3,123),e.qZA(),e.TgZ(4,"cd-helper")(5,"span"),e.SDv(6,124),e.qZA()()(),e.TgZ(7,"div",10),e._UZ(8,"input",125),e.qZA()())}function Hf(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"div",7)(2,"label",101)(3,"span"),e.SDv(4,102),e.qZA(),e.TgZ(5,"cd-helper")(6,"span"),e.SDv(7,103),e.qZA()()(),e.TgZ(8,"div",10),e._UZ(9,"input",104),e.YNc(10,Qr,2,0,"span",15),e.qZA()(),e.TgZ(11,"div",7)(12,"label",105)(13,"span"),e.SDv(14,106),e.qZA(),e.TgZ(15,"cd-helper")(16,"span"),e.SDv(17,107),e.qZA()()(),e.TgZ(18,"div",10),e._UZ(19,"input",108),e.YNc(20,Fr,2,0,"span",15),e.YNc(21,Zr,2,0,"span",15),e.YNc(22,Hi,2,0,"span",15),e.YNc(23,io,2,0,"span",15),e.qZA()(),e.TgZ(24,"div",7)(25,"label",109)(26,"span"),e.SDv(27,110),e.qZA(),e.TgZ(28,"cd-helper")(29,"span"),e.SDv(30,111),e.qZA()()(),e.TgZ(31,"div",10),e._UZ(32,"input",112),e.YNc(33,Ha,2,0,"span",15),e.YNc(34,vs,2,0,"span",15),e.YNc(35,Pa,2,0,"span",15),e.YNc(36,Za,2,0,"span",15),e.qZA()(),e.YNc(37,va,9,0,"div",16),e.BQk()),2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(2),e.Q6J("ngClass",e.VKq(14,I,e.DdM(13,xh).includes(t.serviceForm.controls.service_type.value))),e.xp6(8),e.Q6J("ngIf",t.serviceForm.showError("virtual_ip",o,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(17,I,e.DdM(16,xh).includes(t.serviceForm.controls.service_type.value))),e.xp6(8),e.Q6J("ngIf",t.serviceForm.showError("frontend_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("frontend_port",o,"min")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("frontend_port",o,"max")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("frontend_port",o,"required")),e.xp6(2),e.Q6J("ngClass",e.VKq(20,I,e.DdM(19,xh).includes(t.serviceForm.controls.service_type.value))),e.xp6(8),e.Q6J("ngIf",t.serviceForm.showError("monitor_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("monitor_port",o,"min")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("monitor_port",o,"max")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("monitor_port",o,"required")),e.xp6(1),e.Q6J("ngIf",!t.serviceForm.controls.unmanaged.value)}}function im(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function o_(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,135),e.qZA())}function om(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,136),e.qZA())}function Qm(n,s){1&n&&(e.TgZ(0,"span",28),e.tHW(1,137),e._UZ(2,"strong"),e.N_p(),e.qZA())}function sm(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,142),e.qZA())}function bg(n,s){1&n&&(e.TgZ(0,"span",28),e.tHW(1,143),e._UZ(2,"strong"),e.N_p(),e.qZA())}function Sg(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",138)(2,"span"),e.SDv(3,139),e.qZA(),e.TgZ(4,"cd-helper")(5,"span"),e.SDv(6,140),e.qZA()()(),e.TgZ(7,"div",10),e._UZ(8,"input",141),e.YNc(9,sm,2,0,"span",15),e.YNc(10,bg,3,0,"span",15),e.qZA()()),2&n){const t=e.oxw(2),o=e.MAs(7);e.xp6(9),e.Q6J("ngIf",t.serviceForm.showError("engine_id",o,"required")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("engine_id",o,"snmpEngineIdPattern"))}}function rv(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.hij(" ",t," ")}}function iv(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,148),e.qZA())}const Tm=function(){return["SHA","MD5"]};function Of(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",144),e.SDv(2,145),e.qZA(),e.TgZ(3,"div",10)(4,"select",146)(5,"option",12),e.SDv(6,147),e.qZA(),e.YNc(7,rv,2,2,"option",14),e.qZA(),e.YNc(8,iv,2,0,"span",15),e.qZA()()),2&n){const t=e.oxw(2),o=e.MAs(7);e.xp6(5),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(3,Tm)),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("auth_protocol",o,"required"))}}function Xm(n,s){if(1&n&&(e.TgZ(0,"option",27),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.hij(" ",t," ")}}const Km=function(){return["DES","AES"]};function Tg(n,s){1&n&&(e.TgZ(0,"div",7)(1,"label",149),e.SDv(2,150),e.qZA(),e.TgZ(3,"div",10)(4,"select",151)(5,"option",12),e.SDv(6,152),e.qZA(),e.YNc(7,Xm,2,2,"option",14),e.qZA()()()),2&n&&(e.xp6(5),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(2,Km)))}function Qc(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,156),e.qZA())}function Pc(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",153)(2,"span"),e.SDv(3,154),e.qZA()(),e.TgZ(4,"div",10),e._UZ(5,"input",155),e.YNc(6,Qc,2,0,"span",15),e.qZA()()),2&n){const t=e.oxw(2),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",t.serviceForm.showError("snmp_community",o,"required"))}}function su(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,160),e.qZA())}function Cg(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",157)(2,"span"),e.SDv(3,158),e.qZA()(),e.TgZ(4,"div",10),e._UZ(5,"input",159),e.YNc(6,su,2,0,"span",15),e.qZA()()),2&n){const t=e.oxw(2),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",t.serviceForm.showError("snmp_v3_auth_username",o,"required"))}}function am(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,164),e.qZA())}function Vl(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",161)(2,"span"),e.SDv(3,162),e.qZA()(),e.TgZ(4,"div",10),e._UZ(5,"input",163),e.YNc(6,am,2,0,"span",15),e.qZA()()),2&n){const t=e.oxw(2),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",t.serviceForm.showError("snmp_v3_auth_password",o,"required"))}}function Ko(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,168),e.qZA())}function Il(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",165)(2,"span"),e.SDv(3,166),e.qZA()(),e.TgZ(4,"div",10),e._UZ(5,"input",167),e.YNc(6,Ko,2,0,"span",15),e.qZA()()),2&n){const t=e.oxw(2),o=e.MAs(7);e.xp6(6),e.Q6J("ngIf",t.serviceForm.showError("snmp_v3_priv_password",o,"required"))}}const qm=function(){return["V2c","V3"]};function af(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"div",7)(2,"label",126),e.SDv(3,127),e.qZA(),e.TgZ(4,"div",10)(5,"select",128),e.NdJ("change",function(){return e.CHM(t),e.oxw().clearValidations()}),e.TgZ(6,"option",12),e.SDv(7,129),e.qZA(),e.YNc(8,im,2,2,"option",14),e.qZA(),e.YNc(9,o_,2,0,"span",15),e.qZA()(),e.TgZ(10,"div",7)(11,"label",130)(12,"span"),e.SDv(13,131),e.qZA(),e.TgZ(14,"cd-helper")(15,"span"),e.SDv(16,132),e.qZA()()(),e.TgZ(17,"div",10),e._UZ(18,"input",133),e.YNc(19,om,2,0,"span",15),e.YNc(20,Qm,3,0,"span",15),e.qZA()(),e.YNc(21,Sg,11,2,"div",16),e.YNc(22,Of,9,4,"div",16),e.YNc(23,Tg,8,3,"div",16),e.TgZ(24,"fieldset")(25,"legend"),e.SDv(26,134),e.qZA(),e.YNc(27,Pc,7,1,"div",16),e.YNc(28,Cg,7,1,"div",16),e.YNc(29,Vl,7,1,"div",16),e.YNc(30,Il,7,1,"div",16),e.qZA(),e.BQk()}if(2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(6),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",e.DdM(12,qm)),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("snmp_version",o,"required")),e.xp6(10),e.Q6J("ngIf",t.serviceForm.showError("snmp_destination",o,"required")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("snmp_destination",o,"snmpDestinationPattern")),e.xp6(1),e.Q6J("ngIf","V3"===t.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===t.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===t.serviceForm.controls.snmp_version.value),e.xp6(4),e.Q6J("ngIf","V2c"===t.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===t.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===t.serviceForm.controls.snmp_version.value),e.xp6(1),e.Q6J("ngIf","V3"===t.serviceForm.controls.snmp_version.value&&null!=t.serviceForm.controls.privacy_protocol.value)}}function Xc(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,177),e.qZA())}function eg(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,178),e.qZA())}function U_(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",7)(1,"label",172)(2,"span"),e.SDv(3,173),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,174),e.qZA()(),e.TgZ(6,"div",10)(7,"textarea",175),e._uU(8,"              "),e.qZA(),e.TgZ(9,"input",176),e.NdJ("change",function(l){return e.CHM(t),e.oxw(2).fileUpload(l.target.files,"ssl_cert")}),e.qZA(),e.YNc(10,Xc,2,0,"span",15),e.YNc(11,eg,2,0,"span",15),e.qZA()()}if(2&n){const t=e.oxw(2),o=e.MAs(7);e.xp6(10),e.Q6J("ngIf",t.serviceForm.showError("ssl_cert",o,"required")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("ssl_cert",o,"pattern"))}}function wp(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,183),e.qZA())}function tg(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,184),e.qZA())}function ov(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",7)(1,"label",179)(2,"span"),e.SDv(3,180),e.qZA(),e.TgZ(4,"cd-helper"),e.SDv(5,181),e.qZA()(),e.TgZ(6,"div",10)(7,"textarea",182),e._uU(8,"              "),e.qZA(),e.TgZ(9,"input",176),e.NdJ("change",function(l){return e.CHM(t),e.oxw(2).fileUpload(l.target.files,"ssl_key")}),e.qZA(),e.YNc(10,wp,2,0,"span",15),e.YNc(11,tg,2,0,"span",15),e.qZA()()}if(2&n){const t=e.oxw(2),o=e.MAs(7);e.xp6(10),e.Q6J("ngIf",t.serviceForm.showError("ssl_key",o,"required")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("ssl_key",o,"pattern"))}}const Cm=function(){return["rgw","ingress"]};function lm(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"div",7)(2,"div",17)(3,"div",18),e._UZ(4,"input",169),e.TgZ(5,"label",170),e.SDv(6,171),e.qZA()()()(),e.YNc(7,U_,12,2,"div",16),e.YNc(8,ov,12,2,"div",16),e.BQk()),2&n){const t=e.oxw();e.xp6(7),e.Q6J("ngIf",t.serviceForm.controls.ssl.value),e.xp6(1),e.Q6J("ngIf",t.serviceForm.controls.ssl.value&&!e.DdM(2,Cm).includes(t.serviceForm.controls.service_type.value))}}function C_(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,195),e.qZA())}function Mm(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,196),e.qZA())}function Rh(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,197),e.qZA())}function Y_(n,s){1&n&&(e.TgZ(0,"span",28),e.SDv(1,198),e.qZA())}function M_(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"div",7)(2,"label",185)(3,"span"),e.SDv(4,186),e.qZA(),e.TgZ(5,"cd-helper")(6,"span"),e.SDv(7,187),e.qZA()()(),e.TgZ(8,"div",10),e._UZ(9,"input",188),e.YNc(10,C_,2,0,"span",15),e.YNc(11,Mm,2,0,"span",15),e.YNc(12,Rh,2,0,"span",15),e.YNc(13,Y_,2,0,"span",15),e.qZA()(),e.TgZ(14,"div",7)(15,"label",189),e.tHW(16,190),e._UZ(17,"span")(18,"cd-helper"),e.N_p(),e.qZA(),e.TgZ(19,"div",10)(20,"div",92),e._UZ(21,"input",191),e.TgZ(22,"span",192),e._UZ(23,"button",193)(24,"cd-copy-2-clipboard-button",194),e.qZA()()()(),e.BQk()),2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(10),e.Q6J("ngIf",t.serviceForm.showError("grafana_port",o,"pattern")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("grafana_port",o,"min")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("grafana_port",o,"max")),e.xp6(1),e.Q6J("ngIf",t.serviceForm.showError("grafana_port",o,"required")),e.xp6(8),e.uIk("disabled",!!t.editing||null)}}const Mg=function(){return["rgw","iscsi","ingress"]};let um=(()=>{class n extends Ul.E{constructor(t,o,l,_,C,R,N,V,Q){super(),this.actionLabels=t,this.cephServiceService=o,this.formBuilder=l,this.hostService=_,this.poolService=C,this.router=R,this.taskWrapperService=N,this.route=V,this.activeModal=Q,this.RGW_SVC_ID_PATTERN=/^([^.]+)(\.([^.]+)\.([^.]+))?$/,this.MDS_SVC_ID_PATTERN=/^[a-zA-Z_.-][a-zA-Z0-9_.-]*$/,this.SNMP_DESTINATION_PATTERN=/^[^\:]+:[0-9]/,this.SNMP_ENGINE_ID_PATTERN=/^[0-9A-Fa-f]{10,64}/g,this.INGRESS_SUPPORTED_SERVICE_TYPES=["rgw","nfs"],this.hiddenServices=[],this.editing=!1,this.serviceTypes=[],this.serviceIds=[],this.labelClick=new tp.xQ,this.labelFocus=new tp.xQ,this.services=[],this.searchLabels=oe=>(0,Dp.T)(oe.pipe((0,xp.b)(200),(0,Ud.x)()),this.labelFocus,this.labelClick.pipe((0,Rp.h)(()=>!this.typeahead.isPopupOpen()))).pipe((0,Aa.U)(le=>this.labels.filter(_e=>_e.toLowerCase().indexOf(le.toLowerCase())>-1).slice(0,10))),this.resource="service",this.hosts={options:[],messages:new E.a({empty:"There are no hosts.",filter:"Filter hosts"})},this.createForm()}createForm(){this.serviceForm=this.formBuilder.group({service_type:[null,[En.kI.required]],service_id:[null,[Ae.h.composeIf({service_type:"mds"},[En.kI.required,Ae.h.custom("mdsPattern",t=>!Sr().isEmpty(t)&&!this.MDS_SVC_ID_PATTERN.test(t))]),Ae.h.requiredIf({service_type:"nfs"}),Ae.h.requiredIf({service_type:"iscsi"}),Ae.h.requiredIf({service_type:"ingress"}),Ae.h.composeIf({service_type:"rgw"},[En.kI.required,Ae.h.custom("rgwPattern",t=>!Sr().isEmpty(t)&&!this.RGW_SVC_ID_PATTERN.test(t))]),Ae.h.custom("uniqueName",t=>this.serviceIds&&this.serviceIds.includes(t))]],placement:["hosts"],label:[null,[Ae.h.requiredIf({placement:"label",unmanaged:!1})]],hosts:[[]],count:[null,[Ae.h.number(!1)]],unmanaged:[!1],pool:[null,[Ae.h.requiredIf({service_type:"iscsi"})]],rgw_frontend_port:[null,[Ae.h.number(!1)]],trusted_ip_list:[null],api_port:[null,[Ae.h.number(!1)]],api_user:[null,[Ae.h.requiredIf({service_type:"iscsi",unmanaged:!1})]],api_password:[null,[Ae.h.requiredIf({service_type:"iscsi",unmanaged:!1})]],backend_service:[null,[Ae.h.requiredIf({service_type:"ingress"})]],virtual_ip:[null,[Ae.h.requiredIf({service_type:"ingress"})]],frontend_port:[null,[Ae.h.number(!1),Ae.h.requiredIf({service_type:"ingress"})]],monitor_port:[null,[Ae.h.number(!1),Ae.h.requiredIf({service_type:"ingress"})]],virtual_interface_networks:[null],ssl:[!1],ssl_cert:["",[Ae.h.composeIf({service_type:"rgw",unmanaged:!1,ssl:!0},[En.kI.required,Ae.h.pemCert()]),Ae.h.composeIf({service_type:"iscsi",unmanaged:!1,ssl:!0},[En.kI.required,Ae.h.sslCert()]),Ae.h.composeIf({service_type:"ingress",unmanaged:!1,ssl:!0},[En.kI.required,Ae.h.pemCert()])]],ssl_key:["",[Ae.h.composeIf({service_type:"iscsi",unmanaged:!1,ssl:!0},[En.kI.required,Ae.h.sslPrivKey()])]],snmp_version:[null,[Ae.h.requiredIf({service_type:"snmp-gateway"})]],snmp_destination:[null,{validators:[Ae.h.requiredIf({service_type:"snmp-gateway"}),Ae.h.custom("snmpDestinationPattern",t=>!Sr().isEmpty(t)&&!this.SNMP_DESTINATION_PATTERN.test(t))]}],engine_id:[null,[Ae.h.requiredIf({service_type:"snmp-gateway"}),Ae.h.custom("snmpEngineIdPattern",t=>!Sr().isEmpty(t)&&!this.SNMP_ENGINE_ID_PATTERN.test(t))]],auth_protocol:["SHA",[Ae.h.requiredIf({service_type:"snmp-gateway"})]],privacy_protocol:[null],snmp_community:[null,[Ae.h.requiredIf({snmp_version:"V2c"})]],snmp_v3_auth_username:[null,[Ae.h.requiredIf({service_type:"snmp-gateway"})]],snmp_v3_auth_password:[null,[Ae.h.requiredIf({service_type:"snmp-gateway"})]],snmp_v3_priv_password:[null,[Ae.h.requiredIf({privacy_protocol:{op:"!empty"}})]],grafana_port:[null,[Ae.h.number(!1)]],grafana_admin_password:[null]})}ngOnInit(){this.action=this.actionLabels.CREATE,this.router.url.includes("services/(modal:create")?this.pageURL="services":this.router.url.includes("services/(modal:edit")&&(this.editing=!0,this.pageURL="services",this.route.params.subscribe(t=>{this.serviceName=t.name,this.serviceType=t.type})),this.cephServiceService.list(new g.LE({fromObject:{limit:-1,offset:0}})).observable.subscribe(t=>{this.serviceList=t,this.services=t.filter(o=>this.INGRESS_SUPPORTED_SERVICE_TYPES.includes(o.service_type))}),this.cephServiceService.getKnownTypes().subscribe(t=>{this.hiddenServices.push("osd","container"),this.serviceTypes=Sr().difference(t,this.hiddenServices).sort()}),this.hostService.list("false").subscribe(t=>{const o=[];Sr().forEach(t,l=>{if(Sr().get(l,"sources.orchestrator",!1)){const _=new Jp.$(!1,Sr().get(l,"hostname"),"");o.push(_)}}),this.hosts.options=[...o]}),this.hostService.getLabels().subscribe(t=>{this.labels=t}),this.poolService.getList().subscribe(t=>{this.pools=t}),this.editing&&(this.action=this.actionLabels.EDIT,this.disableForEditing(this.serviceType),this.cephServiceService.list(new g.LE({fromObject:{limit:-1,offset:0}}),this.serviceName).observable.subscribe(t=>{var o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e;if(["service_type","service_id","unmanaged"].forEach(ke=>{this.serviceForm.get(ke).setValue(t[0][ke])}),!t[0].unmanaged){const ke=Object.keys(t[0].placement)[0];let we;we=["hosts","label"].indexOf(ke)>=0?ke:"hosts",this.serviceForm.get("placement").setValue(we),this.serviceForm.get("count").setValue(t[0].placement.count),(null===(o=t[0])||void 0===o?void 0:o.placement[we])&&this.serviceForm.get(we).setValue(null===(l=t[0])||void 0===l?void 0:l.placement[we])}switch(this.serviceType){case"iscsi":["pool","api_password","api_user","trusted_ip_list","api_port"].forEach(Dt=>{this.serviceForm.get(Dt).setValue(t[0].spec[Dt])}),this.serviceForm.get("ssl").setValue(null===(_=t[0].spec)||void 0===_?void 0:_.api_secure),(null===(C=t[0].spec)||void 0===C?void 0:C.api_secure)&&(this.serviceForm.get("ssl_cert").setValue(null===(R=t[0].spec)||void 0===R?void 0:R.ssl_cert),this.serviceForm.get("ssl_key").setValue(null===(N=t[0].spec)||void 0===N?void 0:N.ssl_key));break;case"rgw":this.serviceForm.get("rgw_frontend_port").setValue(null===(V=t[0].spec)||void 0===V?void 0:V.rgw_frontend_port),this.serviceForm.get("ssl").setValue(null===(Q=t[0].spec)||void 0===Q?void 0:Q.ssl),(null===(oe=t[0].spec)||void 0===oe?void 0:oe.ssl)&&this.serviceForm.get("ssl_cert").setValue(null===(le=t[0].spec)||void 0===le?void 0:le.rgw_frontend_ssl_certificate);break;case"ingress":["backend_service","virtual_ip","frontend_port","monitor_port","virtual_interface_networks","ssl"].forEach(Dt=>{this.serviceForm.get(Dt).setValue(t[0].spec[Dt])}),(null===(_e=t[0].spec)||void 0===_e?void 0:_e.ssl)&&(this.serviceForm.get("ssl_cert").setValue(null===(ye=t[0].spec)||void 0===ye?void 0:ye.ssl_cert),this.serviceForm.get("ssl_key").setValue(null===($e=t[0].spec)||void 0===$e?void 0:$e.ssl_key));break;case"snmp-gateway":["snmp_version","snmp_destination"].forEach(Dt=>{this.serviceForm.get(Dt).setValue(t[0].spec[Dt])}),"V3"===this.serviceForm.getValue("snmp_version")?["engine_id","auth_protocol","privacy_protocol","snmp_v3_auth_username","snmp_v3_auth_password","snmp_v3_priv_password"].forEach(bt=>{null!==bt&&("snmp_v3_auth_username"===bt||"snmp_v3_auth_password"===bt||"snmp_v3_priv_password"===bt?this.serviceForm.get(bt).setValue(t[0].spec.credentials[bt]):this.serviceForm.get(bt).setValue(t[0].spec[bt]))}):this.serviceForm.get("snmp_community").setValue(t[0].spec.credentials.snmp_community);break;case"grafana":this.serviceForm.get("grafana_port").setValue(t[0].spec.port),this.serviceForm.get("grafana_admin_password").setValue(t[0].spec.initial_admin_password)}}))}getServiceIds(t){var o;this.serviceIds=null===(o=this.serviceList)||void 0===o?void 0:o.filter(l=>l.service_type===t).map(l=>l.service_id)}disableForEditing(t){"ingress"===(["service_type","service_id"].forEach(l=>{this.serviceForm.get(l).disable()}),t)&&this.serviceForm.get("backend_service").disable()}fileUpload(t,o){const l=t[0],_=new FileReader;_.addEventListener("load",C=>{const R=this.serviceForm.get(o);R.setValue(C.target.result),R.markAsDirty(),R.markAsTouched(),R.updateValueAndValidity()}),_.readAsText(l,"utf8")}prePopulateId(){const t=this.serviceForm.get("service_id"),o=this.serviceForm.getValue("backend_service");t.reset({value:o,disabled:!0})}onSubmit(){var t,o,l,_,C;const R=this,N=this.serviceForm.getRawValue(),V=N.service_type;let Q=`service/${Mo.MQ.CREATE}`;this.editing&&(Q=`service/${Mo.MQ.EDIT}`);const oe={service_type:V,placement:{},unmanaged:N.unmanaged};let le;if("rgw"===V){const $e=N.service_id.match(this.RGW_SVC_ID_PATTERN);le=$e[1],$e[3]&&(oe.rgw_realm=$e[3],oe.rgw_zone=$e[4])}else le=N.service_id;const _e=le;let ye=V;switch(Sr().isString(_e)&&!Sr().isEmpty(_e)&&(ye=`${V}.${_e}`,oe.service_id=_e),V){case"ingress":oe.backend_service=N.backend_service,oe.service_id=N.backend_service,Sr().isNumber(N.frontend_port)&&N.frontend_port>0&&(oe.frontend_port=N.frontend_port),Sr().isString(N.virtual_ip)&&!Sr().isEmpty(N.virtual_ip)&&(oe.virtual_ip=N.virtual_ip.trim()),Sr().isNumber(N.monitor_port)&&N.monitor_port>0&&(oe.monitor_port=N.monitor_port);break;case"iscsi":oe.pool=N.pool;break;case"snmp-gateway":oe.credentials={},oe.snmp_version=N.snmp_version,oe.snmp_destination=N.snmp_destination,"V3"===N.snmp_version?(oe.engine_id=N.engine_id,oe.auth_protocol=N.auth_protocol,oe.credentials.snmp_v3_auth_username=N.snmp_v3_auth_username,oe.credentials.snmp_v3_auth_password=N.snmp_v3_auth_password,null!==N.privacy_protocol&&(oe.privacy_protocol=N.privacy_protocol,oe.credentials.snmp_v3_priv_password=N.snmp_v3_priv_password)):oe.credentials.snmp_community=N.snmp_community}if(!N.unmanaged){switch(N.placement){case"hosts":N.hosts.length>0&&(oe.placement.hosts=N.hosts);break;case"label":oe.placement.label=N.label}switch(Sr().isNumber(N.count)&&N.count>0&&(oe.placement.count=N.count),V){case"rgw":Sr().isNumber(N.rgw_frontend_port)&&N.rgw_frontend_port>0&&(oe.rgw_frontend_port=N.rgw_frontend_port),oe.ssl=N.ssl,N.ssl&&(oe.rgw_frontend_ssl_certificate=null===(t=N.ssl_cert)||void 0===t?void 0:t.trim());break;case"iscsi":Sr().isString(N.trusted_ip_list)&&!Sr().isEmpty(N.trusted_ip_list)&&(oe.trusted_ip_list=N.trusted_ip_list.trim()),Sr().isNumber(N.api_port)&&N.api_port>0&&(oe.api_port=N.api_port),oe.api_user=N.api_user,oe.api_password=N.api_password,oe.api_secure=N.ssl,N.ssl&&(oe.ssl_cert=null===(o=N.ssl_cert)||void 0===o?void 0:o.trim(),oe.ssl_key=null===(l=N.ssl_key)||void 0===l?void 0:l.trim());break;case"ingress":oe.ssl=N.ssl,N.ssl&&(oe.ssl_cert=null===(_=N.ssl_cert)||void 0===_?void 0:_.trim(),oe.ssl_key=null===(C=N.ssl_key)||void 0===C?void 0:C.trim()),oe.virtual_interface_networks=N.virtual_interface_networks;break;case"grafana":oe.port=N.grafana_port,oe.initial_admin_password=N.grafana_admin_password}}this.taskWrapperService.wrapTaskAroundCall({task:new Ql.R(Q,{service_name:ye}),call:this.editing?this.cephServiceService.update(oe):this.cephServiceService.create(oe)}).subscribe({error(){R.serviceForm.setErrors({cdSubmitButton:!0})},complete:()=>{"services"===this.pageURL?this.router.navigate([this.pageURL,{outlets:{modal:null}}]):this.activeModal.close()}})}clearValidations(){const t=this.serviceForm.getValue("snmp_version"),o=this.serviceForm.getValue("privacy_protocol");"V3"===t?this.serviceForm.get("snmp_community").clearValidators():(this.serviceForm.get("engine_id").clearValidators(),this.serviceForm.get("auth_protocol").clearValidators(),this.serviceForm.get("privacy_protocol").clearValidators(),this.serviceForm.get("snmp_v3_auth_username").clearValidators(),this.serviceForm.get("snmp_v3_auth_password").clearValidators()),null===o&&this.serviceForm.get("snmp_v3_priv_password").clearValidators()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(Kl),e.Y36(jl.O),e.Y36(bc),e.Y36(i_.q),e.Y36(Io.F0),e.Y36(Sc.P),e.Y36(Io.gz),e.Y36(Pr.Kz))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-service-form"]],viewQuery:function(t,o){if(1&t&&e.Gf(Pr.dR,5),2&t){let l;e.iGM(l=e.CRH())&&(o.typeahead=l.first)}},inputs:{hiddenServices:"hiddenServices",editing:"editing",serviceName:"serviceName",serviceType:"serviceType"},features:[e.qOj],decls:44,vars:32,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke,we,G,Dt,bt,Bt,Jt,Mn,zt,xn,Nn,zr,Hr,Vr,qr,On,Jn,Qn,ur,In,Yr,Qi,Di,ji,Wr,Bn,bn,Xr,Ni,Xi,Bo,Ao,zs,Qs,Ii,uo,bo,Qe,Pt,Rt,qn,wr,Gr,Fi,Ws,Zo,ol,gl,Zl,Ju,Gf,wl,Zc,gp,Fh,oh,Lh,zl,$c,Fp,Zi,mr,Mi,eo,No,qo,os,ps,_a,tl,vu,sr,Bi,cs,zi,Ds,ss,tu,bl,fl,Ba,xa,yu,nu,jd,op,Pl,ff,kh;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Type",o="-- Select a service type --",l="Unmanaged",_="If set to true, the orchestrator will not start nor stop any daemon associated with this service. Placement and all other properties will be ignored.",C="This field is required.",R="Backend Service",N="Loading...",V="-- No service available --",Q="-- Select an existing service --",oe="This field is required.",le="Id",_e="Used in the service name which is <service_type.service_id>",ye="This field is required.",$e="This service id is already in use.",Ie="The value does not match the pattern " + "\ufffd#2\ufffd" + "<service_id>[.<realm_name>.<zone_name>]" + "\ufffd/#2\ufffd" + ".",ke="MDS service id must start with a letter and contain alphanumeric characters or '.', '-', and '_'",we="Placement",G="Hosts",Dt="Label",bt="Label",Bt="This field is required.",Jt="Hosts",Mn="Count",zt="Only that number of daemons will be created.",xn="The value must be at least 1.",Nn="The entered value needs to be a number.",zr="Port",Hr="The entered value needs to be a number.",Vr="The value must be at least 1.",qr="The value cannot exceed 65535.",On="Pool",Jn="Loading...",Qn="-- No pools available --",ur="-- Select a pool --",In="This field is required.",Yr="Trusted IPs",Qi="Comma separated list of IP addresses.",Di="Please add the " + "\ufffd#11\ufffd" + "Ceph Manager" + "\ufffd/#11\ufffd" + " IP addresses here, otherwise the iSCSI gateways can't be reached.",ji="Port",Wr="User",Bn="Password",bn="The entered value needs to be a number.",Xr="The value must be at least 1.",Ni="The value cannot exceed 65535.",Xi="This field is required.",Bo="This field is required.",Ao="Virtual IP",zs="The virtual IP address and subnet (in CIDR notation) where the ingress service will be available.",Qs="Frontend Port",Ii="The port used to access the ingress service.",uo="Monitor Port",bo="The port used by haproxy for load balancer status.",Qe="This field is required.",Pt="The entered value needs to be a number.",Rt="The value must be at least 1.",qn="The value cannot exceed 65535.",wr="This field is required.",Gr="The entered value needs to be a number.",Fi="The value must be at least 1.",Ws="The value cannot exceed 65535.",Zo="This field is required.",ol="CIDR Networks",gl="A list of networks to identify which network interface to use for the virtual IP address.",Zl="Version",Ju="-- Select SNMP version --",Gf="Destination",wl="Must be of the format hostname:port.",Zc="Credentials",gp="This field is required.",Fh="This field is required.",oh="The value does not match the pattern: " + "\ufffd#2\ufffd" + "hostname:port" + "\ufffd/#2\ufffd" + "",Lh="Engine Id",zl="Unique identifier for the device (in hex).",$c="This field is required.",Fp="The value does not match the pattern: " + "\ufffd#2\ufffd" + "Must be in hexadecimal and length must be multiple of 2 with min value = 10 amd max value = 64." + "\ufffd/#2\ufffd" + "",Zi="Auth Protocol",mr="-- Select auth protocol --",Mi="This field is required.",eo="Privacy Protocol",No="-- Select privacy protocol --",qo="SNMP Community",os="This field is required.",ps="Username",_a="This field is required.",tl="Password",vu="This field is required.",sr="Encryption",Bi="This field is required.",cs="SSL",zi="Certificate",Ds="The SSL certificate in PEM format.",ss="This field is required.",tu="Invalid SSL certificate.",bl="Private key",fl="The SSL private key in PEM format.",Ba="This field is required.",xa="Invalid SSL private key.",yu="Grafana Port",nu="The default port used by grafana.",jd="" + "\ufffd#17\ufffd" + "Grafana Password" + "\ufffd/#17\ufffd" + "" + "\ufffd#18\ufffd" + "The password of the default Grafana Admin. Set once on first-run." + "\ufffd/#18\ufffd" + "",op="The entered value needs to be a number.",Pl="The value must be at least 1.",ff="The value cannot exceed 65535.",kh="This field is required.",[[3,"pageURL","modalRef"],[1,"modal-title"],s,[1,"modal-content"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","service_type",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["id","service_type","name","service_type","formControlName","service_type",1,"form-select",3,"change"],[3,"ngValue"],o,[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],["class","form-group row",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["id","unmanaged","type","checkbox","formControlName","unmanaged",1,"custom-control-input"],["for","unmanaged",1,"custom-control-label"],l,_,[4,"ngIf"],[1,"modal-footer"],[1,"text-right"],[3,"form","submitText","submitActionEvent"],[3,"value"],[1,"invalid-feedback"],C,["for","backend_service",1,"cd-col-form-label",3,"ngClass"],R,["id","backend_service","name","backend_service","formControlName","backend_service",1,"form-select",3,"change"],[3,"ngValue",4,"ngIf"],N,V,Q,oe,["for","service_id",1,"cd-col-form-label",3,"ngClass"],le,_e,["id","service_id","type","text","formControlName","service_id",1,"form-control"],ye,$e,Ie,ke,["for","placement",1,"cd-col-form-label"],we,["id","placement","formControlName","placement",1,"form-select"],["value","hosts"],G,["value","label"],Dt,["for","label",1,"cd-col-form-label"],bt,["id","label","type","text","formControlName","label",1,"form-control",3,"ngbTypeahead","focus","click"],Bt,["for","hosts",1,"cd-col-form-label"],Jt,["id","hosts",3,"data","options","messages"],["for","count",1,"cd-col-form-label"],Mn,zt,["id","count","type","number","formControlName","count","min","1",1,"form-control"],xn,Nn,["for","rgw_frontend_port",1,"cd-col-form-label"],zr,["id","rgw_frontend_port","type","number","formControlName","rgw_frontend_port","min","1","max","65535",1,"form-control"],Hr,Vr,qr,["for","pool",1,"cd-col-form-label","required"],On,["id","pool","name","pool","formControlName","pool",1,"form-select"],Jn,Qn,ur,In,["for","trusted_ip_list",1,"cd-col-form-label"],Yr,Qi,Di,["id","trusted_ip_list","type","text","formControlName","trusted_ip_list",1,"form-control"],["for","api_port",1,"cd-col-form-label"],ji,["id","api_port","type","number","formControlName","api_port","min","1","max","65535",1,"form-control"],["for","api_user",1,"cd-col-form-label",3,"ngClass"],Wr,["id","api_user","type","text","formControlName","api_user",1,"form-control"],["for","api_password",1,"cd-col-form-label",3,"ngClass"],Bn,[1,"input-group"],["id","api_password","type","password","autocomplete","new-password","formControlName","api_password",1,"form-control"],["type","button","cdPasswordButton","api_password",1,"btn","btn-light"],["source","api_password"],bn,Xr,Ni,Xi,Bo,["for","virtual_ip",1,"cd-col-form-label",3,"ngClass"],Ao,zs,["id","virtual_ip","type","text","formControlName","virtual_ip",1,"form-control"],["for","frontend_port",1,"cd-col-form-label",3,"ngClass"],Qs,Ii,["id","frontend_port","type","number","formControlName","frontend_port","min","1","max","65535",1,"form-control"],["for","monitor_port",1,"cd-col-form-label",3,"ngClass"],uo,bo,["id","monitor_port","type","number","formControlName","monitor_port","min","1","max","65535",1,"form-control"],Qe,Pt,Rt,qn,wr,Gr,Fi,Ws,Zo,["for","virtual_interface_networks",1,"cd-col-form-label"],ol,gl,["id","virtual_interface_networks","type","text","formControlName","virtual_interface_networks",1,"form-control"],["for","snmp_version",1,"cd-col-form-label","required"],Zl,["id","snmp_version","name","snmp_version","formControlName","snmp_version",1,"form-select",3,"change"],Ju,["for","snmp_destination",1,"cd-col-form-label","required"],Gf,wl,["id","snmp_destination","type","text","formControlName","snmp_destination",1,"form-control"],Zc,gp,Fh,oh,["for","engine_id",1,"cd-col-form-label","required"],Lh,zl,["id","engine_id","type","text","formControlName","engine_id",1,"form-control"],$c,Fp,["for","auth_protocol",1,"cd-col-form-label","required"],Zi,["id","auth_protocol","name","auth_protocol","formControlName","auth_protocol",1,"form-select"],mr,Mi,["for","privacy_protocol",1,"cd-col-form-label"],eo,["id","privacy_protocol","name","privacy_protocol","formControlName","privacy_protocol",1,"form-select"],No,["for","snmp_community",1,"cd-col-form-label","required"],qo,["id","snmp_community","type","text","formControlName","snmp_community",1,"form-control"],os,["for","snmp_v3_auth_username",1,"cd-col-form-label","required"],ps,["id","snmp_v3_auth_username","type","text","formControlName","snmp_v3_auth_username",1,"form-control"],_a,["for","snmp_v3_auth_password",1,"cd-col-form-label","required"],tl,["id","snmp_v3_auth_password","type","password","formControlName","snmp_v3_auth_password",1,"form-control"],vu,["for","snmp_v3_priv_password",1,"cd-col-form-label","required"],sr,["id","snmp_v3_priv_password","type","password","formControlName","snmp_v3_priv_password",1,"form-control"],Bi,["id","ssl","type","checkbox","formControlName","ssl",1,"custom-control-input"],["for","ssl",1,"custom-control-label"],cs,["for","ssl_cert",1,"cd-col-form-label"],zi,Ds,["id","ssl_cert","formControlName","ssl_cert","rows","5",1,"form-control","resize-vertical","text-monospace","text-pre"],["type","file",3,"change"],ss,tu,["for","ssl_key",1,"cd-col-form-label"],bl,fl,["id","ssl_key","formControlName","ssl_key","rows","5",1,"form-control","resize-vertical","text-monospace","text-pre"],Ba,xa,["for","grafana_port",1,"cd-col-form-label"],yu,nu,["id","grafana_port","type","number","formControlName","grafana_port","min","1","max","65535",1,"form-control"],["for","grafana_admin_password",1,"cd-col-form-label"],jd,["id","grafana_admin_password","type","password","autocomplete","new-password","formControlName","grafana_admin_password",1,"form-control"],[1,"input-group-append"],["type","button","cdPasswordButton","grafana_admin_password",1,"btn","btn-light"],["source","grafana_admin_password"],op,Pl,ff,kh]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.qZA(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10)(13,"select",11),e.NdJ("change",function(_){return o.getServiceIds(_.target.value)}),e.TgZ(14,"option",12),e.SDv(15,13),e.qZA(),e.YNc(16,B_,2,2,"option",14),e.qZA(),e.YNc(17,Sm,2,0,"span",15),e.qZA()(),e.YNc(18,ne,10,9,"div",16),e.YNc(19,yr,12,8,"div",16),e.TgZ(20,"div",7)(21,"div",17)(22,"div",18),e._UZ(23,"input",19),e.TgZ(24,"label",20),e.SDv(25,21),e.qZA(),e.TgZ(26,"cd-helper"),e.SDv(27,22),e.qZA()()()(),e.YNc(28,Nr,9,0,"div",16),e.YNc(29,di,6,2,"div",16),e.YNc(30,ts,5,3,"div",16),e.YNc(31,jo,10,2,"div",16),e.YNc(32,Y,9,3,"ng-container",23),e.YNc(33,ar,10,5,"div",16),e.YNc(34,Xs,37,13,"ng-container",23),e.YNc(35,Hf,38,22,"ng-container",23),e.YNc(36,af,31,13,"ng-container",23),e.YNc(37,lm,9,3,"ng-container",23),e.YNc(38,M_,25,5,"ng-container",23),e.qZA(),e.TgZ(39,"div",24)(40,"div",25)(41,"cd-form-button-panel",26),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(42,"titlecase"),e.ALo(43,"upperFirst"),e.qZA()()()(),e.BQk(),e.qZA()),2&t){const l=e.MAs(7);e.Q6J("pageURL",o.pageURL)("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,23,o.action))(e.lcZ(4,25,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.serviceForm),e.xp6(8),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.serviceTypes),e.xp6(1),e.Q6J("ngIf",o.serviceForm.showError("service_type",l,"required")),e.xp6(1),e.Q6J("ngIf","ingress"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","snmp-gateway"!==o.serviceForm.controls.service_type.value),e.xp6(9),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&"label"===o.serviceForm.controls.placement.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&"hosts"===o.serviceForm.controls.placement.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&"rgw"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","iscsi"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&"iscsi"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","ingress"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf","snmp-gateway"===o.serviceForm.controls.service_type.value),e.xp6(1),e.Q6J("ngIf",!o.serviceForm.controls.unmanaged.value&&e.DdM(31,Mg).includes(o.serviceForm.controls.service_type.value)),e.xp6(1),e.Q6J("ngIf","grafana"===o.serviceForm.controls.service_type.value),e.xp6(3),e.Q6J("form",o.serviceForm)("submitText",e.lcZ(42,27,o.action)+" "+e.lcZ(43,29,o.resource))}},directives:[Ye.z,En._Y,En.JL,Oa.V,En.sg,ll.P,ge.o,En.EJ,En.JJ,En.u,En.YN,En.Kr,p.sg,p.O5,p.mk,xe.S,En.Fj,Ll.b,En.Wl,Pr.dR,St.m,En.wV,En.qQ,En.Fd,S_.C,Ad.s,Ml.p],pipes:[p.rS,Mt.m],styles:[""]}),n})();function Og(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"cd-service-daemon-list",1),e.BQk()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("serviceName",t.selection.service_name)}}let ng=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-service-details"]],inputs:{permissions:"permissions",selection:"selection"},decls:1,vars:1,consts:[[4,"ngIf"],[3,"serviceName"]],template:function(t,o){1&t&&e.YNc(0,Og,2,1,"ng-container",0),2&t&&e.Q6J("ngIf",o.selection)},directives:[p.O5,Yp],styles:[""]}),n})();const rg=["runningTpl"];function j_(n,s){1&n&&e._UZ(0,"cd-orchestrator-doc-panel")}function Qp(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"cd-table",3),e.NdJ("fetchData",function(l){return e.CHM(t),e.oxw().getServices(l)})("setExpandedRow",function(l){return e.CHM(t),e.oxw().setExpandedRow(l)})("updateSelection",function(l){return e.CHM(t),e.oxw().updateSelection(l)}),e._UZ(2,"cd-table-actions",4)(3,"cd-service-details",5),e.qZA(),e.BQk()}if(2&n){const t=e.oxw();e.xp6(1),e.Q6J("data",t.services)("columns",t.columns)("autoReload",5e3)("hasDetails",t.hasDetails)("serverSide",!0)("count",t.count),e.xp6(1),e.Q6J("permission",t.permissions.hosts)("selection",t.selection)("tableActions",t.tableActions),e.xp6(1),e.Q6J("permissions",t.permissions)("selection",t.expandedRow)}}const O_=function(n){return[n]};function A_(n,s){if(1&n&&e._UZ(0,"i",8),2&n){const t=e.oxw(2);e.Q6J("ngClass",e.VKq(1,O_,t.icons.warning))}}function Ag(n,s){if(1&n&&(e.TgZ(0,"span",6),e._uU(1),e.qZA(),e.YNc(2,A_,1,3,"i",7)),2&n){const t=s.value;e.xp6(1),e.AsE(" ",t.running," / ",t.size," "),e.xp6(1),e.Q6J("ngIf",0==t.running||0==t.size)}}const cm="services";let Om=(()=>{class n extends It.o{constructor(t,o,l,_,C,R,N,V){super(),this.actionLabels=t,this.authStorageService=o,this.modalService=l,this.orchService=_,this.cephServiceService=C,this.relativeDatePipe=R,this.taskWrapperService=N,this.router=V,this.hiddenColumns=[],this.hiddenServices=[],this.hasDetails=!0,this.routedModal=!0,this.showDocPanel=!1,this.count=0,this.actionOrchFeatures={create:[P.SERVICE_CREATE],update:[P.SERVICE_EDIT],delete:[P.SERVICE_DELETE]},this.columns=[],this.services=[],this.isLoadingServices=!1,this.selection=new _n.r,this.icons=wo.P,this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{permission:"create",icon:wo.P.add,click:()=>this.openModal(),name:this.actionLabels.CREATE,canBePrimary:Q=>!Q.hasSelection,disable:Q=>this.getDisable("create",Q)},{permission:"update",icon:wo.P.edit,click:()=>this.openModal(!0),name:this.actionLabels.EDIT,disable:Q=>this.getDisable("update",Q)},{permission:"delete",icon:wo.P.destroy,click:()=>this.deleteAction(),name:this.actionLabels.DELETE,disable:Q=>this.getDisable("delete",Q)}]}openModal(t=!1){var o,l,_;if(this.routedModal)this.router.navigate(t?[cm,{outlets:{modal:[Mo.MQ.EDIT,this.selection.first().service_type,this.selection.first().service_name]}}]:[cm,{outlets:{modal:[Mo.MQ.CREATE]}}]);else{let C={};C=t?{serviceName:null===(o=this.selection.first())||void 0===o?void 0:o.service_name,serviceType:null===(_=null===(l=this.selection)||void 0===l?void 0:l.first())||void 0===_?void 0:_.service_type,hiddenServices:this.hiddenServices,editing:t}:{hiddenServices:this.hiddenServices,editing:t},this.bsModalRef=this.modalService.show(um,C,{size:"lg"})}}ngOnInit(){const t=[{name:"Service",prop:"service_name",flexGrow:1},{name:"Placement",prop:"",pipe:new H_,flexGrow:2},{name:"Running",prop:"status",flexGrow:1,cellTemplate:this.runningTpl},{name:"Last Refreshed",prop:"status.last_refresh",pipe:this.relativeDatePipe,flexGrow:1}];this.columns=t.filter(o=>!this.hiddenColumns.includes(o.prop)),this.orchService.status().subscribe(o=>{this.orchStatus=o,this.showDocPanel=!o.available})}ngOnChanges(){var t;(null===(t=this.orchStatus)||void 0===t?void 0:t.available)&&(this.services=[],this.table.reloadData())}getDisable(t,o){var l;return"delete"===t&&!(null==o?void 0:o.hasSingleSelection)||"update"===t&&["osd","container"].indexOf(null===(l=this.selection.first())||void 0===l?void 0:l.service_type)>=0||this.orchService.getTableActionDisableDesc(this.orchStatus,this.actionOrchFeatures[t])}getServices(t){if(this.isLoadingServices)return;this.isLoadingServices=!0;const o=this.cephServiceService.list(t.toParams());o.observable.subscribe(l=>{this.services=l,this.count=o.count,this.services=this.services.filter(_=>!this.hiddenServices.includes(_.service_name)),this.isLoadingServices=!1},()=>{this.isLoadingServices=!1,this.services=[],t.error()})}updateSelection(t){this.selection=t}deleteAction(){const t=this.selection.first();this.modalService.show(Oc.M,{itemDescription:"Service",itemNames:[t.service_name],actionDescription:"delete",submitActionObservable:()=>this.taskWrapperService.wrapTaskAroundCall({task:new Ql.R(`service/${Mo.MQ.DELETE}`,{service_name:t.service_name}),call:this.cephServiceService.delete(t.service_name)}).pipe((0,Mf.g)(5e3))})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(Vi.j),e.Y36(ou.Z),e.Y36(h),e.Y36(Kl),e.Y36(Ed.h),e.Y36(Sc.P),e.Y36(Io.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-services"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Tr.a,7),e.Gf(rg,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.table=l.first),e.iGM(l=e.CRH())&&(o.runningTpl=l.first)}},inputs:{hostname:"hostname",hiddenColumns:"hiddenColumns",hiddenServices:"hiddenServices",hasDetails:"hasDetails",routedModal:"routedModal"},features:[e._Bn([{provide:X.F,useValue:new X.F(cm)}]),e.qOj,e.TTD],decls:5,vars:2,consts:[[4,"ngIf"],["name","modal"],["runningTpl",""],["identifier","service_name","forceIdentifier","true","columnMode","flex","selectionType","single",3,"data","columns","autoReload","hasDetails","serverSide","count","fetchData","setExpandedRow","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"permissions","selection"],["ngbTooltip","Service instances running out of the total number of services requested."],["class","icon-warning-color",3,"ngClass",4,"ngIf"],[1,"icon-warning-color",3,"ngClass"]],template:function(t,o){1&t&&(e.YNc(0,j_,1,0,"cd-orchestrator-doc-panel",0),e.YNc(1,Qp,4,11,"ng-container",0),e._UZ(2,"router-outlet",1),e.YNc(3,Ag,3,3,"ng-template",null,2,e.W1O)),2&t&&(e.Q6J("ngIf",o.showDocPanel),e.xp6(1),e.Q6J("ngIf",null==o.orchStatus?null:o.orchStatus.available))},directives:[p.O5,ah,Tr.a,Tu.K,ng,Io.lC,Pr._L,p.mk],styles:[""]}),n})();const Dg=function(){return["services","status"]};let ig=(()=>{class n{constructor(t,o,l,_,C){this.wizardStepsService=t,this.cephServiceService=o,this.dimlessBinary=l,this.hostService=_,this.osdService=C,this.hosts=[],this.totalCapacity=0,this.services=[],this.totalCPUs=0,this.totalMemory=0}ngOnInit(){var t,o,l;let _=0,C=0,R=0,N=0,V=0,Q=0;this.hostService.list("true").subscribe(oe=>{this.hosts=oe,this.hostsCount=this.hosts.length,Sr().forEach(this.hosts,le=>{this.totalCPUs=this.totalCPUs+le.cpu_count,this.totalMemory=this.totalMemory+1024*le.memory_total_kb}),this.totalMemory=this.dimlessBinary.transform(this.totalMemory)}),this.osdService.osdDevices.data&&(_=null===(t=this.osdService.osdDevices.data)||void 0===t?void 0:t.length,C=this.osdService.osdDevices.data.capacity),this.osdService.osdDevices.wal&&(R=null===(o=this.osdService.osdDevices.wal)||void 0===o?void 0:o.length,N=this.osdService.osdDevices.wal.capacity),this.osdService.osdDevices.db&&(V=null===(l=this.osdService.osdDevices.db)||void 0===l?void 0:l.length,Q=this.osdService.osdDevices.db.capacity),this.totalDevices=_+R+V,this.osdService.osdDevices.totalDevices=this.totalDevices,this.totalCapacity=C+N+Q}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(hu),e.Y36(Kl),e.Y36(Rr.$),e.Y36(bc),e.Y36(rc))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-create-cluster-review"]],decls:45,vars:16,consts:function(){let s,t,o,l,_,C,R,N;return s="Cluster Resources",t="Hosts",o="Storage Capacity",l="Number of devices",_="Raw capacity",C="CPUs",R="Memory",N="Host Details",[[1,"row"],[1,"col-lg-3"],[1,"cd-header"],s,[1,"table","table-striped"],[1,"bold"],t,o,l,_,[1,"pt-5"],C,R,[1,"col-lg-9"],N,[3,"hiddenColumns","hideToolHeader","hasTableDetails","showGeneralActionsOnly"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"fieldset")(3,"legend",2),e.SDv(4,3),e.qZA(),e.TgZ(5,"table",4)(6,"tr")(7,"td",5),e.SDv(8,6),e.qZA(),e.TgZ(9,"td"),e._uU(10),e.qZA()(),e.TgZ(11,"tr")(12,"td")(13,"dl")(14,"dt")(15,"p"),e.SDv(16,7),e.qZA()(),e.TgZ(17,"dd")(18,"p"),e.SDv(19,8),e.qZA()(),e.TgZ(20,"dd")(21,"p"),e.SDv(22,9),e.qZA()()()(),e.TgZ(23,"td",10)(24,"p"),e._uU(25),e.qZA(),e.TgZ(26,"p"),e._uU(27),e.ALo(28,"dimlessBinary"),e.qZA()()(),e.TgZ(29,"tr")(30,"td",5),e.SDv(31,11),e.qZA(),e.TgZ(32,"td"),e._uU(33),e.ALo(34,"empty"),e.qZA()(),e.TgZ(35,"tr")(36,"td",5),e.SDv(37,12),e.qZA(),e.TgZ(38,"td"),e._uU(39),e.ALo(40,"empty"),e.qZA()()()()(),e.TgZ(41,"div",13)(42,"legend",2),e.SDv(43,14),e.qZA(),e._UZ(44,"cd-hosts",15),e.qZA()()),2&t&&(e.xp6(10),e.Oqu(o.hostsCount),e.xp6(15),e.Oqu(o.totalDevices),e.xp6(2),e.hij(" ",e.lcZ(28,9,o.totalCapacity),""),e.xp6(6),e.Oqu(e.lcZ(34,11,o.totalCPUs)),e.xp6(6),e.Oqu(e.lcZ(40,13,o.totalMemory)),e.xp6(5),e.Q6J("hiddenColumns",e.DdM(15,Dg))("hideToolHeader",!0)("hasTableDetails",!1)("showGeneralActionsOnly",!0))},directives:[dp],pipes:[Rr.$,L.W],styles:["cd-hosts[_ngcontent-%COMP%]     .nav{display:none}"]}),n})();var qv=i(13472);const sv=["skipConfirmTpl"];function Bf(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",3)(1,"div",4)(2,"div",5),e._UZ(3,"img",6),e.TgZ(4,"h3",7),e.SDv(5,8),e.qZA(),e.TgZ(6,"div",9)(7,"h4",10),e.SDv(8,11),e.qZA(),e.TgZ(9,"div",10)(10,"button",12),e.NdJ("click",function(){return e.CHM(t),e.oxw().createCluster()}),e.SDv(11,13),e.qZA(),e.TgZ(12,"button",14),e.NdJ("click",function(){return e.CHM(t),e.oxw().skipClusterCreation()}),e.SDv(13,15),e.qZA()()()()()()}if(2&n){const t=e.oxw();e.xp6(3),e.Q6J("src",t.projectConstants.cephLogo,e.LSH),e.xp6(2),e.pQV(t.projectConstants.projectName),e.QtT(5)}}const av=function(){return["services"]};function lv(n,s){1&n&&(e.TgZ(0,"div",29)(1,"h4",30),e.SDv(2,31),e.qZA(),e._UZ(3,"br")(4,"cd-hosts",32),e.qZA()),2&n&&(e.xp6(4),e.Q6J("hiddenColumns",e.DdM(4,av))("hideMaintenance",!0)("hasTableDetails",!1)("showGeneralActionsOnly",!0))}function F(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",29)(1,"h4",30),e.SDv(2,33),e.qZA(),e.TgZ(3,"div",34)(4,"cd-osd-form",35),e.NdJ("emitDriveGroup",function(l){return e.CHM(t),e.oxw(2).setDriveGroup(l)})("emitDeploymentOption",function(l){return e.CHM(t),e.oxw(2).setDeploymentOptions(l)})("emitMode",function(l){return e.CHM(t),e.oxw(2).setDeploymentMode(l)}),e.qZA()()()}2&n&&(e.xp6(4),e.Q6J("hideTitle",!0)("hideSubmitBtn",!0))}const J=function(){return["mon","mgr","crash","agent"]},U=function(){return["status.running","status.size","status.last_refresh"]};function Te(n,s){1&n&&(e.TgZ(0,"div",29)(1,"h4",30),e.SDv(2,36),e.qZA(),e._UZ(3,"br")(4,"cd-services",37),e.qZA()),2&n&&(e.xp6(4),e.Q6J("hasDetails",!1)("hiddenServices",e.DdM(4,J))("hiddenColumns",e.DdM(5,U))("routedModal",!1))}function ft(n,s){1&n&&(e.TgZ(0,"div",29),e._UZ(1,"cd-create-cluster-review"),e.qZA())}function Zt(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",38),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).onSkip()}),e.SDv(1,39),e.qZA()}}function rr(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",16)(1,"div",17),e.SDv(2,18),e.qZA(),e.TgZ(3,"div",19),e._UZ(4,"cd-wizard",20),e.TgZ(5,"div",21),e.ynx(6,22),e.YNc(7,lv,5,5,"div",23),e.YNc(8,F,5,2,"div",23),e.YNc(9,Te,5,6,"div",23),e.YNc(10,ft,2,0,"div",23),e.BQk(),e.qZA()(),e.TgZ(11,"div",24)(12,"button",25),e.NdJ("click",function(){return e.CHM(t),e.oxw().onNextStep()}),e.SDv(13,26),e.qZA(),e.TgZ(14,"cd-back-button",27),e.NdJ("backAction",function(){return e.CHM(t),e.oxw().onPreviousStep()}),e.qZA(),e.YNc(15,Zt,2,0,"button",28),e.qZA()()}if(2&n){const t=e.oxw();e.xp6(4),e.Q6J("stepsTitle",t.stepTitles),e.xp6(2),e.Q6J("ngSwitch",null==t.currentStep?null:t.currentStep.stepIndex),e.xp6(1),e.Q6J("ngSwitchCase","1"),e.xp6(1),e.Q6J("ngSwitchCase","2"),e.xp6(1),e.Q6J("ngSwitchCase","3"),e.xp6(1),e.Q6J("ngSwitchCase","4"),e.xp6(3),e.pQV(t.showSubmitButtonLabel()),e.QtT(13),e.xp6(1),e.Q6J("name",t.showCancelButtonLabel()),e.xp6(1),e.Q6J("ngIf","Create OSDs"===t.stepTitles[t.currentStep.stepIndex-1])}}function xr(n,s){1&n&&(e.TgZ(0,"span"),e.tHW(1,40),e._UZ(2,"strong"),e.N_p(),e.qZA(),e.TgZ(3,"div",41),e.SDv(4,42),e.qZA())}let hi=(()=>{class n{constructor(t,o,l,_,C,R,N,V,Q,oe){this.authStorageService=t,this.wizardStepsService=o,this.router=l,this.hostService=_,this.notificationService=C,this.actionLabels=R,this.clusterService=N,this.modalService=V,this.taskWrapper=Q,this.osdService=oe,this.projectConstants=Mo.$x,this.stepTitles=["Add Hosts","Create OSDs","Create Services","Review"],this.startClusterCreation=!1,this.observables=[],this.driveGroup=new pc,this.driveGroups=[],this.selectedOption={},this.simpleDeployment=!0,this.stepsToSkip={},this.submitAction=new e.vpe,this.permissions=this.authStorageService.getPermissions(),this.currentStepSub=this.wizardStepsService.getCurrentStep().subscribe(le=>{this.currentStep=le}),this.currentStep.stepIndex=1}ngOnInit(){this.osdService.getDeploymentOptions().subscribe(t=>{this.deploymentOption=t,this.selectedOption={option:t.recommended_option,encrypted:!1}}),this.stepTitles.forEach(t=>{this.stepsToSkip[t]=!1})}createCluster(){this.startClusterCreation=!0}skipClusterCreation(){const t={titleText:"Warning",buttonText:"Continue",warning:!0,bodyTpl:this.skipConfirmTpl,showSubmit:!0,onSubmit:()=>{this.clusterService.updateStatus("POST_INSTALLED").subscribe({error:()=>this.modalRef.close(),complete:()=>{this.notificationService.show(Ta.k.info,"Cluster expansion skipped by user"),this.router.navigate(["/dashboard"]),this.modalRef.close()}})}};this.modalRef=this.modalService.show(rd.Y,t)}onSubmit(){var t;if(this.stepsToSkip["Add Hosts"]||this.hostService.list("false").subscribe(o=>{o.forEach(l=>{const _=l.labels.indexOf("_no_schedule",0);_>-1&&(l.labels.splice(_,1),this.observables.push(this.hostService.update(l.hostname,!0,l.labels)))}),(0,Fu.D)(this.observables).pipe((0,od.x)(()=>this.clusterService.updateStatus("POST_INSTALLED").subscribe(()=>{this.notificationService.show(Ta.k.success,"Cluster expansion was successful"),this.router.navigate(["/dashboard"])}))).subscribe({error:l=>l.preventDefault()})}),!this.stepsToSkip["Create OSDs"]){if(this.driveGroup){const o=this.authStorageService.getUsername();this.driveGroup.setName(`dashboard-${o}-${Sr().now()}`),this.driveGroups.push(this.driveGroup.spec)}if(this.simpleDeployment){const o=null===(t=this.deploymentOption)||void 0===t?void 0:t.options[this.selectedOption.option].title,l="" + o + " deployment";this.taskWrapper.wrapTaskAroundCall({task:new Ql.R("osd/"+Mo.MQ.CREATE,{tracking_id:l}),call:this.osdService.create([this.selectedOption],l,"predefined")}).subscribe({error:_=>_.preventDefault(),complete:()=>{this.submitAction.emit()}})}else if(this.osdService.osdDevices.totalDevices>0){this.driveGroup.setFeature("encrypted",this.selectedOption.encrypted);const o=Sr().join(Sr().map(this.driveGroups,"service_id"),", ");this.taskWrapper.wrapTaskAroundCall({task:new Ql.R("osd/"+Mo.MQ.CREATE,{tracking_id:o}),call:this.osdService.create(this.driveGroups,o)}).subscribe({error:l=>l.preventDefault(),complete:()=>{this.submitAction.emit(),this.osdService.osdDevices=[]}})}}}setDriveGroup(t){this.driveGroup=t}setDeploymentOptions(t){this.selectedOption=t}setDeploymentMode(t){this.simpleDeployment=t}onNextStep(){this.wizardStepsService.isLastStep()?this.onSubmit():(this.wizardStepsService.getCurrentStep().subscribe(t=>{this.currentStep=t}),this.wizardStepsService.moveToNextStep())}onPreviousStep(){this.wizardStepsService.isFirstStep()?this.router.navigate(["/dashboard"]):this.wizardStepsService.moveToPreviousStep()}onSkip(){this.stepsToSkip[this.stepTitles[this.currentStep.stepIndex-1]]=!0,this.onNextStep()}showSubmitButtonLabel(){return this.wizardStepsService.isLastStep()?"Expand Cluster":this.actionLabels.NEXT}showCancelButtonLabel(){return this.wizardStepsService.isFirstStep()?this.actionLabels.CANCEL:this.actionLabels.BACK}ngOnDestroy(){this.currentStepSub.unsubscribe()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(hu),e.Y36(Io.F0),e.Y36(bc),e.Y36(Tl.g),e.Y36(Mo.p4),e.Y36(Jd),e.Y36(ou.Z),e.Y36(Sc.P),e.Y36(rc))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-create-cluster"]],viewQuery:function(t,o){if(1&t&&e.Gf(sv,7),2&t){let l;e.iGM(l=e.CRH())&&(o.skipConfirmTpl=l.first)}},outputs:{submitAction:"submitAction"},decls:4,vars:2,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le;return s="Welcome to " + "\ufffd0\ufffd" + "",t="Please expand your cluster first",o="Expand Cluster",l="Skip",_="Expand Cluster",C="" + "\ufffd0\ufffd" + "",R="Add Hosts",N="Create OSDs",V="Create Services",Q="Skip",oe="You are about to skip the cluster expansion process. You\u2019ll need to " + "\ufffd#2\ufffd" + "navigate through the menu to add hosts and services." + "\ufffd/#2\ufffd" + "",le="Are you sure you want to continue?",[["class","container h-75",4,"ngIf"],["class","card",4,"ngIf"],["skipConfirmTpl",""],[1,"container","h-75"],[1,"row","h-100","justify-content-center","align-items-center"],[1,"blank-page"],["alt","Ceph",1,"img-fluid","mx-auto","d-block",3,"src"],[1,"text-center","m-2"],s,[1,"m-4"],[1,"text-center"],t,["name","expand-cluster","aria-label","Expand Cluster",1,"btn","btn-accent","m-2",3,"click"],o,["name","skip-cluster-creation","aria-label","Skip",1,"btn","btn-light",3,"click"],l,[1,"card"],[1,"card-header"],_,[1,"container-fluid"],[3,"stepsTitle"],[1,"card-body","vertical-line"],[3,"ngSwitch"],["class","ms-5",4,"ngSwitchCase"],[1,"card-footer"],["aria-label","Next",1,"btn","btn-accent","m-2","float-end",3,"click"],C,["aria-label","Close",1,"m-2","float-end",3,"name","backAction"],["class","btn btn-light m-2 me-4 float-end","id","skipStepBtn","aria-label","Skip this step",3,"click",4,"ngIf"],[1,"ms-5"],[1,"title"],R,[3,"hiddenColumns","hideMaintenance","hasTableDetails","showGeneralActionsOnly"],N,[1,"alignForm"],[3,"hideTitle","hideSubmitBtn","emitDriveGroup","emitDeploymentOption","emitMode"],V,[3,"hasDetails","hiddenServices","hiddenColumns","routedModal"],["id","skipStepBtn","aria-label","Skip this step",1,"btn","btn-light","m-2","me-4","float-end",3,"click"],Q,oe,[1,"mt-4"],le]},template:function(t,o){1&t&&(e.YNc(0,Bf,14,2,"div",0),e.YNc(1,rr,16,9,"div",1),e.YNc(2,xr,5,0,"ng-template",null,2,e.W1O)),2&t&&(e.Q6J("ngIf",!o.startClusterCreation),e.xp6(1),e.Q6J("ngIf",o.startClusterCreation))},directives:[p.O5,ge.o,Yc,p.RF,p.n9,dp,b_,Om,ig,qv.W],styles:[".container-fluid[_ngcontent-%COMP%]{align-items:flex-start;display:flex;padding-left:0;width:100%}cd-hosts[_ngcontent-%COMP%]     .nav{display:none}cd-osd-form[_ngcontent-%COMP%]     .card{border:0}cd-osd-form[_ngcontent-%COMP%]     .accordion{margin-left:-1.5rem}"]}),n})();var ns=i(83608),zo=i(36848);const As=["tree"],ml=function(n,s,t){return[n,s,t]};function au(n,s){if(1&n&&e._UZ(0,"i",12),2&n){const t=e.oxw();e.Q6J("ngClass",e.kEZ(1,ml,t.icons.large,t.icons.spinner,t.icons.spin))}}const Xl=function(){return["in","up"]},xu=function(){return["down","out","destroyed"]},Dd=function(n,s){return{"badge-success":n,"badge-danger":s}};function lf(n,s){if(1&n&&(e.TgZ(0,"span",15),e._uU(1),e.qZA()),2&n){const t=e.oxw().$implicit;e.Q6J("ngClass",e.WLB(4,Dd,e.DdM(2,Xl).includes(t.data.status),e.DdM(3,xu).includes(t.data.status))),e.xp6(1),e.hij(" ",t.data.status," ")}}const cd=function(n){return{"type-osd":n}};function s_(n,s){if(1&n&&(e.YNc(0,lf,2,7,"span",13),e.TgZ(1,"span"),e._uU(2,"\xa0"),e.qZA(),e._UZ(3,"span",14)),2&n){const t=s.$implicit;e.Q6J("ngIf",t.data.status),e.xp6(3),e.Q6J("ngClass",e.VKq(3,cd,"osd"===t.data.type))("innerHTML",t.data.name,e.oJD)}}function G_(n,s){if(1&n&&(e.TgZ(0,"div",16)(1,"legend"),e._uU(2),e.qZA(),e.TgZ(3,"div"),e._UZ(4,"cd-table-key-value",17),e.qZA()()),2&n){const t=e.oxw();e.xp6(2),e.Oqu(t.metadataTitle),e.xp6(2),e.Q6J("data",t.metadata)}}let uf=(()=>{class n{constructor(t,o){this.crushRuleService=t,this.timerService=o,this.sub=new ic.w,this.icons=wo.P,this.loadingIndicator=!0,this.nodes=[],this.treeOptions={useVirtualScroll:!0,nodeHeight:22,actionMapping:{mouse:{click:this.onNodeSelected.bind(this)}}},this.metadataKeyMap={}}ngOnInit(){this.sub=this.timerService.get(()=>this.crushRuleService.getInfo(),5e3).subscribe(t=>{this.loadingIndicator=!1,this.nodes=this.abstractTreeData(t)})}ngOnDestroy(){this.sub.unsubscribe()}abstractTreeData(t){const o=t.nodes||[],l=t.roots||[],_={};if(0===o.length)return[{name:"No nodes!"}];const C=[];return o.reverse().forEach(N=>{l.includes(N.id)&&C.push(N.id),_[N.id]=this.generateTreeLeaf(N,_)}),C.map(N=>_[N])}generateTreeLeaf(t,o){const l=t.id;this.metadataKeyMap[l]=t;const R=[],N={name:t.name+" ("+t.type+")",status:t.status,cdId:l,type:t.type};return t.children&&(t.children.sort().forEach(V=>{R.push(o[V])}),N.children=R),N}onNodeSelected(t,o){if(pa.iM.ACTIVATE(t,o,!0),void 0!==o.data.cdId){const l=this.metadataKeyMap[o.data.cdId],{name:_,type:C}=l,N=(0,Z._T)(l,["name","type","status"]);this.metadata=N,this.metadataTitle=_+" ("+C+")"}else delete this.metadata,delete this.metadataTitle}onUpdateData(){this.tree.treeModel.expandAll()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(ns.H),e.Y36(zo.f))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-crushmap"]],viewQuery:function(t,o){if(1&t&&e.Gf(As,5),2&t){let l;e.iGM(l=e.CRH())&&(o.tree=l.first)}},decls:14,vars:4,consts:function(){let s;return s="CRUSH map viewer",[[1,"row"],[1,"col-sm-12","col-lg-12"],[1,"card"],[1,"card-header"],s,[1,"card-body"],[1,"col-sm-6","col-lg-6","tree-container"],[3,"ngClass",4,"ngIf"],[3,"nodes","options","updateData"],["tree",""],["treeNodeTemplate",""],["class","col-sm-6 col-lg-6 metadata",4,"ngIf"],[3,"ngClass"],["class","badge",3,"ngClass",4,"ngIf"],[1,"node-name",3,"ngClass","innerHTML"],[1,"badge",3,"ngClass"],[1,"col-sm-6","col-lg-6","metadata"],[3,"data"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),e.SDv(4,4),e.qZA(),e.TgZ(5,"div",5)(6,"div",0)(7,"div",6),e.YNc(8,au,1,5,"i",7),e.TgZ(9,"tree-root",8,9),e.NdJ("updateData",function(){return o.onUpdateData()}),e.YNc(11,s_,4,5,"ng-template",null,10,e.W1O),e.qZA()(),e.YNc(13,G_,5,2,"div",11),e.qZA()()()()()),2&t&&(e.xp6(8),e.Q6J("ngIf",o.loadingIndicator),e.xp6(1),e.Q6J("nodes",o.nodes)("options",o.treeOptions),e.xp6(4),e.Q6J("ngIf",o.metadata))},directives:[p.O5,p.mk,pa.qr,fo.b],styles:[".tree-container[_ngcontent-%COMP%]{height:calc(100vh - 200px)}"]}),n})(),dd=(()=>{class n{constructor(t){this.http=t}getLogs(){return this.http.get("api/logs/all")}validateDashboardUrl(t){return this.http.get(`api/grafana/validation/${t}`)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var _p=i(49457);let Wu=(()=>{class n{download(t,o){(0,_p.saveAs)(new Blob([t]),o)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();const hc=function(n){return[n]};function e1(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",5),e.NdJ("click",function(){return e.CHM(t),e.oxw().download("json")}),e._UZ(1,"i",2),e.TgZ(2,"span"),e._uU(3,"JSON"),e.qZA()()}if(2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(1,hc,t.icons.json))}}function uv(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",5),e.NdJ("click",function(){return e.CHM(t),e.oxw().download()}),e._UZ(1,"i",2),e.TgZ(2,"span"),e._uU(3,"Text"),e.qZA()()}if(2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(1,hc,t.icons.text))}}let t1=(()=>{class n{constructor(t){this.textToDownloadService=t,this.title="Download",this.icons=wo.P}download(t){this.fileName=`${this.fileName}_${(new Date).toLocaleDateString()}`,"json"===t?this.textToDownloadService.download(JSON.stringify(this.objectItem,null,2),`${this.fileName}.json`):this.textToDownloadService.download(this.textItem,`${this.fileName}.txt`)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Wu))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-download-button"]],inputs:{objectItem:"objectItem",textItem:"textItem",fileName:"fileName",title:"title"},decls:6,vars:6,consts:[["ngbDropdown","","placement","bottom-right"],["type","button","ngbDropdownToggle","",1,"btn","btn-light","dropdown-toggle-split",3,"title"],[3,"ngClass"],["ngbDropdownMenu",""],["ngbDropdownItem","",3,"click",4,"ngIf"],["ngbDropdownItem","",3,"click"]],template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"button",1),e._UZ(2,"i",2),e.qZA(),e.TgZ(3,"div",3),e.YNc(4,e1,4,3,"button",4),e.YNc(5,uv,4,3,"button",4),e.qZA()()),2&t&&(e.xp6(1),e.Q6J("title",o.title),e.xp6(1),e.Q6J("ngClass",e.VKq(4,hc,o.icons.download)),e.xp6(2),e.Q6J("ngIf",o.objectItem),e.xp6(1),e.Q6J("ngIf",o.textItem))},directives:[Pr.jt,ge.o,Pr.iD,p.mk,Pr.Vi,p.O5,Pr.TH],styles:[""]}),n})();var R0=i(42746);let xg=(()=>{class n{transform(t,o){if(!o)return t;o=this.escapeRegExp(o);const l=new RegExp(o,"gi");return t.match(l)?t.replace(l,"<mark>$&</mark>"):t}escapeRegExp(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"searchHighlight",type:n,pure:!0}),n})();function cv(n,s){1&n&&e.GkF(0)}function w0(n,s){if(1&n&&(e.TgZ(0,"div",22),e._UZ(1,"cd-download-button",23)(2,"cd-copy-2-clipboard-button",24),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.Q6J("objectItem",t.clog)("textItem",t.clogText),e.xp6(1),e.Q6J("source",t.clogText)("byId",!1)}}function Rg(n,s){if(1&n&&(e.TgZ(0,"p")(1,"span",25),e._uU(2),e.ALo(3,"cdDate"),e.qZA(),e.TgZ(4,"span"),e.ALo(5,"logPriority"),e._uU(6),e.qZA(),e._UZ(7,"span",26),e.ALo(8,"searchHighlight"),e.qZA()),2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Oqu(e.lcZ(3,6,t.stamp)),e.xp6(2),e.Gre("priority ",e.lcZ(5,8,t.priority),""),e.xp6(2),e.Oqu(t.priority),e.xp6(1),e.Q6J("innerHTML",e.xi3(8,10,t.message,o.search),e.oJD)}}function dm(n,s){1&n&&e.GkF(0)}function wg(n,s){if(1&n&&(e.TgZ(0,"div",17),e.YNc(1,w0,3,4,"div",18),e.TgZ(2,"div",19),e.YNc(3,Rg,9,13,"p",20),e.YNc(4,dm,1,0,"ng-container",21),e.qZA()()),2&n){const t=e.oxw(3),o=e.MAs(4);e.xp6(1),e.Q6J("ngIf",t.clog.length),e.xp6(2),e.Q6J("ngForOf",t.clog),e.xp6(1),e.Q6J("ngIf",0!==t.clog.length)("ngIfElse",o)}}function BE(n,s){if(1&n&&e.YNc(0,wg,5,4,"div",16),2&n){const t=e.oxw(2);e.Q6J("ngIf",t.clog)}}function P0(n,s){if(1&n&&(e.TgZ(0,"div",22),e._UZ(1,"cd-download-button",27)(2,"cd-copy-2-clipboard-button",24),e.qZA()),2&n){const t=e.oxw(4);e.xp6(1),e.Q6J("objectItem",t.audit_log)("textItem",t.auditLogText),e.xp6(1),e.Q6J("source",t.auditLogText)("byId",!1)}}function Am(n,s){if(1&n&&(e.TgZ(0,"p")(1,"span",25),e._uU(2),e.ALo(3,"cdDate"),e.qZA(),e.TgZ(4,"span"),e.ALo(5,"logPriority"),e._uU(6),e.qZA(),e._UZ(7,"span",26),e.ALo(8,"searchHighlight"),e.qZA()),2&n){const t=s.$implicit,o=e.oxw(4);e.xp6(2),e.Oqu(e.lcZ(3,6,t.stamp)),e.xp6(2),e.Gre("priority ",e.lcZ(5,8,t.priority),""),e.xp6(2),e.Oqu(t.priority),e.xp6(1),e.Q6J("innerHTML",e.xi3(8,10,t.message,o.search),e.oJD)}}function Xp(n,s){1&n&&e.GkF(0)}function Dm(n,s){if(1&n&&(e.TgZ(0,"div",17),e.YNc(1,P0,3,4,"div",18),e.TgZ(2,"div",19),e.YNc(3,Am,9,13,"p",20),e.YNc(4,Xp,1,0,"ng-container",21),e.qZA()()),2&n){const t=e.oxw(3),o=e.MAs(4);e.xp6(1),e.Q6J("ngIf",t.audit_log.length),e.xp6(2),e.Q6J("ngForOf",t.audit_log),e.xp6(1),e.Q6J("ngIf",0!==t.audit_log.length)("ngIfElse",o)}}function n1(n,s){if(1&n&&e.YNc(0,Dm,5,4,"div",16),2&n){const t=e.oxw(2);e.Q6J("ngIf",t.audit_log)}}function r1(n,s){1&n&&(e.TgZ(0,"div"),e._UZ(1,"cd-grafana",28),e.qZA()),2&n&&(e.xp6(1),e.Q6J("grafanaPath","explore?")("type","logs"))}function i1(n,s){if(1&n&&(e.ynx(0),e.YNc(1,r1,2,2,"div",21),e.ALo(2,"async"),e.BQk()),2&n){const t=e.oxw(3),o=e.MAs(6);e.xp6(1),e.Q6J("ngIf",e.lcZ(2,2,t.promtailServiceStatus$))("ngIfElse",o)}}function o1(n,s){if(1&n&&(e.YNc(0,i1,3,4,"ng-container",21),e.ALo(1,"async")),2&n){const t=e.oxw(2),o=e.MAs(6);e.Q6J("ngIf",e.lcZ(1,2,t.lokiServiceStatus$))("ngIfElse",o)}}function s1(n,s){if(1&n&&(e.TgZ(0,"div"),e.YNc(1,cv,1,0,"ng-container",4),e.TgZ(2,"nav",5,6),e.ynx(4,7),e.TgZ(5,"a",8),e.SDv(6,9),e.qZA(),e.YNc(7,BE,1,1,"ng-template",10),e.BQk(),e.ynx(8,11),e.TgZ(9,"a",8),e.SDv(10,12),e.qZA(),e.YNc(11,n1,1,1,"ng-template",10),e.BQk(),e.ynx(12,13),e.TgZ(13,"a",8),e.SDv(14,14),e.qZA(),e.YNc(15,o1,2,4,"ng-template",10),e.BQk(),e.qZA(),e._UZ(16,"div",15),e.qZA()),2&n){const t=e.MAs(3);e.oxw();const o=e.MAs(2);e.xp6(1),e.Q6J("ngTemplateOutlet",o),e.xp6(15),e.Q6J("ngbNavOutlet",t)}}function a_(n,s){if(1&n&&(e.TgZ(0,"option",54),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.value),e.xp6(1),e.Oqu(t.name)}}const Kp=function(n){return[n]};function xl(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",29)(1,"div",30)(2,"div",31)(3,"label",32),e.SDv(4,33),e.qZA(),e.TgZ(5,"select",34),e.NdJ("ngModelChange",function(l){return e.CHM(t),e.oxw().priority=l})("ngModelChange",function(){return e.CHM(t),e.oxw().filterLogs()}),e.YNc(6,a_,2,2,"option",35),e.qZA()(),e.TgZ(7,"div",36)(8,"label",37),e.SDv(9,38),e.qZA(),e.TgZ(10,"div",39)(11,"span",40),e._UZ(12,"i",41),e.qZA(),e.TgZ(13,"input",42),e.NdJ("ngModelChange",function(l){return e.CHM(t),e.oxw().search=l})("keyup",function(){return e.CHM(t),e.oxw().filterLogs()}),e.qZA(),e.TgZ(14,"button",43),e.NdJ("click",function(){return e.CHM(t),e.oxw().clearSearchKey()}),e._UZ(15,"i"),e.qZA()()(),e.TgZ(16,"div",36)(17,"label",44),e.SDv(18,45),e.qZA(),e.TgZ(19,"div",39)(20,"input",46,47),e.NdJ("click",function(){return e.CHM(t),e.MAs(21).open()})("ngModelChange",function(l){return e.CHM(t),e.oxw().selectedDate=l})("ngModelChange",function(){return e.CHM(t),e.oxw().filterLogs()}),e.qZA(),e.TgZ(22,"button",43),e.NdJ("click",function(){return e.CHM(t),e.oxw().clearDate()}),e._UZ(23,"i"),e.qZA()()(),e.TgZ(24,"div",48)(25,"label",49),e.SDv(26,50),e.qZA(),e.TgZ(27,"div",51)(28,"ngb-timepicker",52),e.NdJ("ngModelChange",function(l){return e.CHM(t),e.oxw().startTime=l})("ngModelChange",function(){return e.CHM(t),e.oxw().filterLogs()}),e.qZA(),e.TgZ(29,"span",53),e._uU(30,"\xa0\u2014\xa0"),e.qZA(),e.TgZ(31,"ngb-timepicker",52),e.NdJ("ngModelChange",function(l){return e.CHM(t),e.oxw().endTime=l})("ngModelChange",function(){return e.CHM(t),e.oxw().filterLogs()}),e.qZA()()()()()}if(2&n){const t=e.oxw();e.xp6(5),e.Q6J("ngModel",t.priority),e.xp6(1),e.Q6J("ngForOf",t.priorities),e.xp6(6),e.Q6J("ngClass",e.VKq(16,Kp,t.icons.search)),e.xp6(1),e.Q6J("ngModel",t.search),e.xp6(2),e.Gre("icon-prepend ",t.icons.destroy,""),e.xp6(5),e.Q6J("maxDate",t.maxDate)("ngModel",t.selectedDate),e.xp6(3),e.Gre("icon-prepend ",t.icons.destroy,""),e.xp6(5),e.Q6J("spinners",!1)("ngModel",t.startTime),e.xp6(3),e.Q6J("spinners",!1)("ngModel",t.endTime)}}function a1(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"span"),e.SDv(1,55),e.qZA(),e.TgZ(2,"span"),e._uU(3,"\xa0"),e.qZA(),e.TgZ(4,"a",56),e.NdJ("click",function(){return e.CHM(t),e.oxw().resetFilter()}),e.SDv(5,57),e.qZA()}}function wh(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",58),e.ynx(1),e.SDv(2,59),e.BQk(),e.qZA())}let Pg=(()=>{class n{constructor(t,o,l,_){this.logsService=t,this.cephService=o,this.datePipe=l,this.ngZone=_,this.icons=wo.P,this.priorities=[{name:"Debug",value:"[DBG]"},{name:"Info",value:"[INF]"},{name:"Warning",value:"[WRN]"},{name:"Error",value:"[ERR]"},{name:"All",value:"All"}],this.priority="All",this.search="",this.startTime={hour:0,minute:0},this.endTime={hour:23,minute:59},this.maxDate={year:(new Date).getFullYear(),month:(new Date).getMonth()+1,day:(new Date).getDate()}}ngOnInit(){this.getInfo(),this.ngZone.runOutsideAngular(()=>{this.getDaemonDetails(),this.interval=window.setInterval(()=>{this.ngZone.run(()=>{this.getInfo()})},5e3)})}ngOnDestroy(){clearInterval(this.interval)}getDaemonDetails(){this.lokiServiceStatus$=this.cephService.getDaemons("loki").pipe((0,Aa.U)(t=>t.length>0&&1===t[0].status)),this.promtailServiceStatus$=this.cephService.getDaemons("promtail").pipe((0,Aa.U)(t=>t.length>0&&1===t[0].status))}getInfo(){this.logsService.getLogs().subscribe(t=>{this.contentData=t,this.clogText=this.logToText(this.contentData.clog),this.auditLogText=this.logToText(this.contentData.audit_log),this.filterLogs()})}abstractFilters(){var t,o,l,_,C,R,N,V;const Q=this.priority,oe=this.search.toLowerCase();let le;if(this.selectedDate){const G=this.selectedDate.month,Dt=this.selectedDate.day;le=`${this.selectedDate.year}-${G<=9?`0${G}`:`${G}`}-${Dt<=9?`0${Dt}`:`${Dt}`}`}else le="";return{priority:Q,key:oe,yearMonthDay:le,sTime:60*(null!==(o=null===(t=this.startTime)||void 0===t?void 0:t.hour)&&void 0!==o?o:0)+(null!==(_=null===(l=this.startTime)||void 0===l?void 0:l.minute)&&void 0!==_?_:0),eTime:60*(null!==(R=null===(C=this.endTime)||void 0===C?void 0:C.hour)&&void 0!==R?R:23)+(null!==(V=null===(N=this.endTime)||void 0===N?void 0:N.minute)&&void 0!==V?V:59)}}filterExecutor(t,o){return t.filter(l=>{const _=this.datePipe.transform(l.stamp,"mediumTime"),C=parseInt(_.split(":")[0],10),R=parseInt(_.split(":")[1],10);let N,V,Q;return N="All"===o.priority?l.priority:o.priority,V=o.yearMonthDay?o.yearMonthDay:l.stamp,Q=60*C+R,l.priority===N&&-1!==l.message.toLowerCase().indexOf(o.key)&&-1!==l.stamp.indexOf(V)&&Q>=o.sTime&&Q<=o.eTime})}filterLogs(){const t=this.abstractFilters();this.clog=this.filterExecutor(this.contentData.clog,t),this.audit_log=this.filterExecutor(this.contentData.audit_log,t)}clearSearchKey(){this.search="",this.filterLogs()}clearDate(){this.selectedDate=null,this.filterLogs()}resetFilter(){return this.priority="All",this.search="",this.selectedDate=null,this.startTime={hour:0,minute:0},this.endTime={hour:23,minute:59},this.filterLogs(),!1}logToText(t){let o="";for(const l of Object.keys(t))o=o+this.datePipe.transform(t[l].stamp,"medium")+"\t"+t[l].priority+"\t"+t[l].message+"\n";return o}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(dd),e.Y36(Kl),e.Y36(p.uU),e.Y36(e.R0b))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-logs"]],decls:7,vars:1,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le;return s="Cluster Logs",t="Audit Logs",o="Daemon Logs",l="Daemon logs",_="Priority:",C="Keyword:",R="Date:",N="Time range:",V="No log entries found. Please try to select different filter options.",Q="Reset filter.",oe="Loki/Promtail service not running",le="Please start the loki and promtail service to see these logs.",[[4,"ngIf"],["logFiltersTpl",""],["noEntriesTpl",""],["daemonLogsTpl",""],[4,"ngTemplateOutlet"],["ngbNav","","cdStatefulTab","logs",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","cluster-logs"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","audit-logs"],t,["ngbNavItem","daemon-logs"],o,[3,"ngbNavOutlet"],["class","card bg-light mb-3",4,"ngIf"],[1,"card","bg-light","mb-3"],["class","btn-group","role","group",4,"ngIf"],[1,"card-body"],[4,"ngFor","ngForOf"],[4,"ngIf","ngIfElse"],["role","group",1,"btn-group"],["fileName","cluster_log",3,"objectItem","textItem"],[3,"source","byId"],[1,"timestamp"],[1,"message",3,"innerHTML"],["fileName","audit_log",3,"objectItem","textItem"],["title",l,"uid","CrAHE0iZz","grafanaStyle","two",3,"grafanaPath","type"],[1,"row","mb-3"],[1,"col-lg-10","d-flex"],[1,"col-sm-1","me-3"],["for","logs-priority",1,"fw-bold"],_,["id","logs-priority",1,"form-select",3,"ngModel","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],[1,"col-md-3","me-3"],["for","logs-keyword",1,"fw-bold"],C,[1,"input-group"],[1,"input-group-text"],[3,"ngClass"],["id","logs-keyword","type","text",1,"form-control",3,"ngModel","ngModelChange","keyup"],["type","button","title","Clear",1,"btn","btn-light",3,"click"],["for","logs-date",1,"fw-bold"],R,["id","logs-date","placeholder","YYYY-MM-DD","ngbDatepicker","",1,"form-control",3,"maxDate","ngModel","click","ngModelChange"],["d","ngbDatepicker"],[1,"col-md-5"],[1,"fw-bold"],N,[1,"d-flex"],[3,"spinners","ngModel","ngModelChange"],[1,"mt-2"],[3,"value"],V,["href","#",3,"click"],Q,["type","info","title",oe],le]},template:function(t,o){1&t&&(e.YNc(0,s1,17,2,"div",0),e.YNc(1,xl,32,18,"ng-template",null,1,e.W1O),e.YNc(3,a1,6,0,"ng-template",null,2,e.W1O),e.YNc(5,wh,3,0,"ng-template",null,3,e.W1O)),2&t&&e.Q6J("ngIf",o.contentData)},directives:[p.O5,p.tP,Pr.Pz,Yn.m,Pr.nv,Pr.Vx,Pr.uN,t1,Ad.s,p.sg,ha.F,Pr.tO,ge.o,En.EJ,En.JJ,En.On,En.YN,En.Kr,p.mk,En.Fj,Ll.b,Pr.J4,Pr.Pm,yo.G],pipes:[Pn.N,R0.e,xg,p.Ov],styles:["p[_ngcontent-%COMP%]{font-family:monospace}.card[_ngcontent-%COMP%]   .btn-group[_ngcontent-%COMP%]{margin-top:-45px;position:absolute;right:0}.card[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{display:flex}.card[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]:last-child{margin-bottom:0}.card[_ngcontent-%COMP%]   .timestamp[_ngcontent-%COMP%]{flex-shrink:0;font-weight:700}.card[_ngcontent-%COMP%]   .priority[_ngcontent-%COMP%]{margin-left:.5rem}.card[_ngcontent-%COMP%]   .message[_ngcontent-%COMP%]{margin-left:1rem}.card[_ngcontent-%COMP%]   .err[_ngcontent-%COMP%]{color:#dc3545}.card[_ngcontent-%COMP%]   .warn[_ngcontent-%COMP%]{color:#d48200}.card[_ngcontent-%COMP%]   .info[_ngcontent-%COMP%]{color:#25828e}.card[_ngcontent-%COMP%]   .debug[_ngcontent-%COMP%]{color:#495057}  cd-logs ngb-timepicker input.ngb-tp-input{width:3.5rem!important}"]}),n})();var xm=i(7273);function gu(n,s){if(1&n&&(e.TgZ(0,"cd-helper"),e._uU(1),e.ALo(2,"upperFirst"),e.qZA()),2&n){const t=e.oxw().$implicit;e.xp6(1),e.hij(" ",e.lcZ(2,1,t.value.long_desc||t.value.desc)," ")}}function og(n,s){if(1&n&&(e.TgZ(0,"div",15)(1,"div",16),e._UZ(2,"input",17)(3,"label",18),e.qZA()()),2&n){const t=e.oxw().$implicit;e.xp6(2),e.s9C("id",t.value.name),e.s9C("formControlName",t.value.name),e.xp6(1),e.s9C("for",t.value.name)}}function l1(n,s){if(1&n&&e._UZ(0,"input",22),2&n){const t=e.oxw(2).$implicit;e.s9C("id",t.value.name),e.s9C("formControlName",t.value.name)}}function Rm(n,s){if(1&n&&(e.TgZ(0,"option",25),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("ngValue",t),e.xp6(1),e.hij(" ",t," ")}}function u1(n,s){if(1&n&&(e.TgZ(0,"select",23),e.YNc(1,Rm,2,2,"option",24),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.s9C("id",t.value.name),e.s9C("formControlName",t.value.name),e.xp6(1),e.Q6J("ngForOf",t.value.enum_allowed)}}function c1(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,27),e.qZA())}function d1(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,28),e.qZA())}function N0(n,s){if(1&n&&(e.TgZ(0,"div",15),e.YNc(1,l1,1,2,"input",19),e.YNc(2,u1,2,3,"select",20),e.YNc(3,c1,2,0,"span",21),e.YNc(4,d1,2,0,"span",21),e.qZA()),2&n){const t=e.oxw().$implicit;e.oxw();const o=e.MAs(2),l=e.oxw();e.xp6(1),e.Q6J("ngIf",0===t.value.enum_allowed.length),e.xp6(1),e.Q6J("ngIf",t.value.enum_allowed.length>0),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(t.value.name,o,"invalidUuid")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(t.value.name,o,"pattern"))}}function dv(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,30),e.qZA())}function I0(n,s){if(1&n&&(e.TgZ(0,"span",26),e.SDv(1,31),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.xp6(1),e.pQV(t.value.max),e.QtT(1)}}function F0(n,s){if(1&n&&(e.TgZ(0,"span",26),e.SDv(1,32),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.xp6(1),e.pQV(t.value.min),e.QtT(1)}}function f1(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,33),e.qZA())}function wm(n,s){if(1&n&&(e.TgZ(0,"div",15),e._UZ(1,"input",29),e.YNc(2,dv,2,0,"span",21),e.YNc(3,I0,2,1,"span",21),e.YNc(4,F0,2,1,"span",21),e.YNc(5,f1,2,0,"span",21),e.qZA()),2&n){const t=e.oxw().$implicit;e.oxw();const o=e.MAs(2),l=e.oxw();e.xp6(1),e.s9C("id",t.value.name),e.s9C("formControlName",t.value.name),e.s9C("min",t.value.min),e.s9C("max",t.value.max),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(t.value.name,o,"required")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(t.value.name,o,"max")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(t.value.name,o,"min")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(t.value.name,o,"pattern"))}}function p1(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,35),e.qZA())}function L0(n,s){1&n&&(e.TgZ(0,"span",26),e.SDv(1,36),e.qZA())}function k0(n,s){if(1&n&&(e.TgZ(0,"div",15),e._UZ(1,"input",34),e.YNc(2,p1,2,0,"span",21),e.YNc(3,L0,2,0,"span",21),e.qZA()),2&n){const t=e.oxw().$implicit;e.oxw();const o=e.MAs(2),l=e.oxw();e.xp6(1),e.s9C("id",t.value.name),e.s9C("formControlName",t.value.name),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(t.value.name,o,"required")),e.xp6(1),e.Q6J("ngIf",l.mgrModuleForm.showError(t.value.name,o,"pattern"))}}const Pm=function(){return["addr","str","uuid"]},fv=function(){return["uint","int","size","secs"]};function $0(n,s){if(1&n&&(e.TgZ(0,"div",11)(1,"label",12),e._uU(2),e.YNc(3,gu,3,3,"cd-helper",13),e.qZA(),e.YNc(4,og,4,3,"div",14),e.YNc(5,N0,5,4,"div",14),e.YNc(6,wm,6,8,"div",14),e.YNc(7,k0,4,4,"div",14),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.s9C("for",t.value.name),e.xp6(1),e.hij(" ",t.value.name," "),e.xp6(1),e.Q6J("ngIf",t.value.long_desc||t.value.desc),e.xp6(1),e.Q6J("ngIf","bool"===t.value.type),e.xp6(1),e.Q6J("ngIf",e.DdM(7,Pm).includes(t.value.type)),e.xp6(1),e.Q6J("ngIf",e.DdM(8,fv).includes(t.value.type)),e.xp6(1),e.Q6J("ngIf","float"===t.value.type)}}function pv(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.qZA(),e.TgZ(6,"div",7),e.YNc(7,$0,8,9,"div",8),e.ALo(8,"keyvalue"),e.qZA(),e.TgZ(9,"div",9)(10,"cd-form-button-panel",10),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw().onSubmit()}),e.qZA()()()()()}if(2&n){const t=e.oxw();e.xp6(1),e.Q6J("formGroup",t.mgrModuleForm),e.xp6(6),e.Q6J("ngForOf",e.lcZ(8,4,t.moduleOptions)),e.xp6(3),e.Q6J("form",t.mgrModuleForm)("submitText",t.actionLabels.UPDATE)}}let H0=(()=>{class n extends Ul.E{constructor(t,o,l,_,C,R){super(),this.actionLabels=t,this.route=o,this.router=l,this.formBuilder=_,this.mgrModuleService=C,this.notificationService=R,this.moduleName="",this.moduleOptions=[]}ngOnInit(){this.route.params.subscribe(t=>{this.moduleName=decodeURIComponent(t.name);const o=[this.mgrModuleService.getOptions(this.moduleName),this.mgrModuleService.getConfig(this.moduleName)];(0,Fu.D)(o).subscribe(l=>{this.moduleOptions=l[0],this.createForm(),this.mgrModuleForm.setValue(l[1]),this.loadingReady()},l=>{this.loadingError()})})}getValidators(t){const o=[];switch(t.type){case"addr":o.push(Ae.h.ip());break;case"uint":case"int":case"size":case"secs":o.push(En.kI.required);break;case"str":Sr().isNumber(t.min)&&o.push(En.kI.minLength(t.min)),Sr().isNumber(t.max)&&o.push(En.kI.maxLength(t.max));break;case"float":o.push(En.kI.required),o.push(Ae.h.decimalNumber());break;case"uuid":o.push(Ae.h.uuid())}return o}createForm(){const t={};Sr().forEach(this.moduleOptions,o=>{t[o.name]=[o.default_value,this.getValidators(o)]}),this.mgrModuleForm=this.formBuilder.group(t)}goToListView(){this.router.navigate(["/mgr-modules"])}onSubmit(){if(this.mgrModuleForm.pristine)return void this.goToListView();const t={};Sr().forEach(this.moduleOptions,o=>{const l=this.mgrModuleForm.get(o.name);l.dirty&&l.valid&&(t[o.name]=l.value)}),this.mgrModuleService.updateConfig(this.moduleName,t).subscribe(()=>{this.notificationService.show(Ta.k.success,"Updated options for module '" + this.moduleName + "'."),this.goToListView()},()=>{this.mgrModuleForm.setErrors({cdSubmitButton:!0})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(Io.gz),e.Y36(Io.F0),e.Y36(jl.O),e.Y36(xm.N),e.Y36(Tl.g))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mgr-module-form"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,l,_,C,R,N,V;return s="Edit Manager module",t="The entered value is not a valid UUID, e.g.: 67dcac9f-2c03-4d6c-b7bd-1210b3a259a8",o="The entered value needs to be a valid IP address.",l="This field is required.",_="The entered value is too high! It must be lower or equal to " + "\ufffd0\ufffd" + ".",C="The entered value is too low! It must be greater or equal to " + "\ufffd0\ufffd" + ".",R="The entered value needs to be a number.",N="This field is required.",V="The entered value needs to be a number or decimal.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","mgrModuleForm","novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],["class","form-group row",4,"ngFor","ngForOf"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"form-group","row"],[1,"cd-col-form-label",3,"for"],[4,"ngIf"],["class","cd-col-form-input",4,"ngIf"],[1,"cd-col-form-input"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","formControlName"],[1,"custom-control-label",3,"for"],["class","form-control","type","text",3,"id","formControlName",4,"ngIf"],["class","form-select",3,"id","formControlName",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["type","text",1,"form-control",3,"id","formControlName"],[1,"form-select",3,"id","formControlName"],[3,"ngValue",4,"ngFor","ngForOf"],[3,"ngValue"],[1,"invalid-feedback"],t,o,["type","number",1,"form-control",3,"id","formControlName","min","max"],l,_,C,R,["type","number",1,"form-control",3,"id","formControlName"],N,V]},template:function(t,o){1&t&&e.YNc(0,pv,11,6,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},directives:[cu.y,En._Y,En.JL,En.sg,Oa.V,p.sg,ll.P,p.O5,xe.S,ge.o,En.Wl,Ll.b,En.JJ,En.u,En.Fj,En.EJ,En.YN,En.Kr,En.wV,En.qQ,En.Fd,Ml.p],pipes:[p.Nd,Mt.m],styles:[""]}),n})();function Af(n,s,t,o){var C,l=arguments.length,_=l<3?s:null===o?o=Object.getOwnPropertyDescriptor(s,t):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)_=Reflect.decorate(n,s,t,o);else for(var R=n.length-1;R>=0;R--)(C=n[R])&&(_=(l<3?C(_):l>3?C(s,t,_):C(s,t))||_);return l>3&&_&&Object.defineProperty(s,t,_),_}var WE=i(7357);const v1=["*"],y1=["templateOutlet"];function hv(n,s){if(1&n&&(e.TgZ(0,"div",6),e._uU(1),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.message||t.defaultMessage," ")}}function E1(n,s){if(1&n&&(e.TgZ(0,"div",3),e._UZ(1,"div",4),e.YNc(2,hv,2,1,"div",5),e.qZA()),2&n){const t=e.oxw();e.xp6(2),e.Q6J("ngIf",t.message||t.defaultMessage)}}function JE(n,s){}function b1(n,s){1&n&&e.YNc(0,JE,0,0,"ng-template",null,7,e.W1O)}const _v=function(n){return{active:n}};let fd=(()=>{class n{}return n.START="start",n.STOP="stop",n.UPDATE="update",n.RESET="reset",n.RESET_GLOBAL="reset_global",n.UNSUBSCRIBE="unsubscribe",n})();const fm="block-ui-main";let Nm=(()=>{let n=class{constructor(){this.blockUISettings={},this.blockUIInstances={},this.blockUISubject=new WE.t(1),this.blockUIObservable=this.blockUISubject.asObservable(),this.blockUIObservable.subscribe(this.blockUIMiddleware.bind(this))}getSettings(){return this.blockUISettings}updateSettings(t={}){this.blockUISettings=Object.assign(Object.assign({},this.blockUISettings),t)}decorate(t=fm){const o={name:t,isActive:!1,blockCount:0,start:this.dispatch(this.blockUISubject,fd.START,t),update:this.dispatch(this.blockUISubject,fd.UPDATE,t),stop:this.dispatch(this.blockUISubject,fd.STOP,t),reset:this.dispatch(this.blockUISubject,fd.RESET,t),resetGlobal:this.dispatch(this.blockUISubject,fd.RESET_GLOBAL,t),unsubscribe:this.dispatch(this.blockUISubject,fd.UNSUBSCRIBE,t)};return this.blockUIInstances[t]=this.blockUIInstances[t]||o,o}observe(){return this.blockUIObservable}clearInstance(t){this.dispatch(this.blockUISubject,fd.RESET,t)}blockUIMiddleware({action:t,name:o}){let l=null;switch(t){case fd.START:l=!0;break;case fd.STOP:case fd.RESET:l=!1}null!==l&&(this.blockUIInstances[o].isActive=l)}dispatch(t,o,l=fm){return _=>{t.next({name:l,action:o,message:_})}}};return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:function(s){return n.\u0275fac(s)}}),n})(),V0=(()=>{let n=class{constructor(t){this.blockUI=t}ngOnInit(){this.name=this.name||fm,this.template=this.template||this.blockUI.blockUISettings.template}};return n.\u0275fac=function(t){return new(t||n)(e.Y36(Nm))},n.\u0275cmp=e.Xpm({type:n,selectors:[["block-ui"]],inputs:{name:"name",template:"template",message:"message",delayStart:"delayStart",delayStop:"delayStop"},ngContentSelectors:v1,decls:2,vars:5,consts:[[3,"name","message","template","delayStart","delayStop"]],template:function(t,o){1&t&&(e.F$t(),e.Hsn(0),e._UZ(1,"block-ui-content",0)),2&t&&(e.xp6(1),e.Q6J("name",o.name)("message",o.message)("template",o.template)("delayStart",o.delayStart)("delayStop",o.delayStop))},directives:function(){return[S1]},encapsulation:2}),Af([(0,e.IIB)()],n.prototype,"name",void 0),Af([(0,e.IIB)()],n.prototype,"message",void 0),Af([(0,e.IIB)()],n.prototype,"delayStart",void 0),Af([(0,e.IIB)()],n.prototype,"delayStop",void 0),Af([(0,e.IIB)()],n.prototype,"template",void 0),n})(),S1=(()=>{let n=class{constructor(t,o,l){this.blockUI=t,this.resolver=o,this.changeDetectionRef=l,this.name=fm,this.defaultBlockState={startTimeouts:[],stopTimeouts:[],updateTimeouts:[],blockCount:0,startCallCount:0,stopCallCount:0},this.state=Object.assign({},this.defaultBlockState)}ngOnInit(){this.settings=this.blockUI.getSettings(),this.blockUISubscription=this.subscribeToBlockUI(this.blockUI.observe())}ngAfterViewInit(){try{if(!this.templateCmp)return!1;if(this.templateCmp instanceof e.Rgc)this.templateOutlet.createEmbeddedView(this.templateCmp);else{const t=this.resolver.resolveComponentFactory(this.templateCmp);this.templateCompRef=this.templateOutlet.createComponent(t),this.updateBlockTemplate(this.message)}}catch(t){console.error("ng-block-ui:",t)}}ngAfterViewChecked(){this.detectChanges()}subscribeToBlockUI(t){return t.subscribe(o=>this.onDispatchedEvent(o))}onDispatchedEvent(t){switch(t.action){case fd.START:this.onStart(t);break;case fd.STOP:this.onStop(t);break;case fd.UPDATE:this.onUpdate(t);break;case fd.RESET:this.onReset(t);break;case fd.RESET_GLOBAL:this.resetState();break;case fd.UNSUBSCRIBE:this.onStop(t),this.onUnsubscribe(t.name)}}onStart({name:t,message:o}){if(t===this.name){const l=this.delayStart||this.settings.delayStart||0;this.state.startCallCount+=1;const _=setTimeout(()=>{this.state.blockCount+=1,this.showBlock(o),this.updateInstanceBlockCount()},l);this.state.startTimeouts.push(_)}}onStop({name:t}){if(t===this.name){const o=this.state.stopCallCount+1;if(this.state.startCallCount-o>=0){const l=this.delayStop||this.settings.delayStop||0;this.state.stopCallCount=o;const _=setTimeout(()=>{this.state.blockCount-=1,this.updateInstanceBlockCount(),this.detectChanges()},l);this.state.stopTimeouts.push(_)}}}onUpdate({name:t,message:o}){if(t===this.name){const l=this.delayStart||this.settings.delayStart||0;clearTimeout(this.state.updateTimeouts[0]);const _=setTimeout(()=>{this.updateMessage(o)},l);this.state.updateTimeouts.push(_)}}onReset({name:t}){t===this.name&&this.resetState()}updateMessage(t){this.showBlock(t)}showBlock(t){this.message=t||this.defaultMessage||this.settings.message,this.updateBlockTemplate(this.message),this.detectChanges()}updateBlockTemplate(t){this.templateCompRef&&this.templateCompRef instanceof e.UuU&&(this.templateCompRef.instance.message=t)}resetState(){[...this.state.startTimeouts,...this.state.stopTimeouts,...this.state.updateTimeouts].forEach(clearTimeout),this.state=Object.assign({},this.defaultBlockState),this.updateInstanceBlockCount(),this.detectChanges()}onUnsubscribe(t){this.blockUISubscription&&t===this.name&&this.blockUISubscription.unsubscribe()}updateInstanceBlockCount(){if(this.blockUI.blockUIInstances[this.name]){const{blockCount:t}=this.state;this.blockUI.blockUIInstances[this.name].blockCount=t}}detectChanges(){this.changeDetectionRef.destroyed||this.changeDetectionRef.detectChanges()}ngOnDestroy(){this.resetState(),this.onUnsubscribe(this.name),this.blockUI.clearInstance(this.name)}};return n.\u0275fac=function(t){return new(t||n)(e.Y36(Nm),e.Y36(e._Vd),e.Y36(e.sBO))},n.\u0275cmp=e.Xpm({type:n,selectors:[["block-ui-content"]],viewQuery:function(t,o){if(1&t&&e.Gf(y1,5,e.s_b),2&t){let l;e.iGM(l=e.CRH())&&(o.templateOutlet=l.first)}},inputs:{name:"name",delayStart:"delayStart",delayStop:"delayStop",defaultMessage:["message","defaultMessage"],templateCmp:["template","templateCmp"]},decls:3,vars:9,consts:[[3,"ngClass"],["class","block-ui-spinner",4,"ngIf"],[4,"ngIf"],[1,"block-ui-spinner"],[1,"loader"],["class","message",4,"ngIf"],[1,"message"],["templateOutlet",""]],template:function(t,o){1&t&&(e.TgZ(0,"div",0),e.YNc(1,E1,3,1,"div",1),e.YNc(2,b1,2,0,null,2),e.qZA()),2&t&&(e.MT6("block-ui-wrapper ",o.name," ",o.className,""),e.Q6J("ngClass",e.VKq(7,_v,o.state.blockCount>0)),e.xp6(1),e.Q6J("ngIf",!o.templateCmp),e.xp6(1),e.Q6J("ngIf",o.templateCmp))},directives:[p.mk,p.O5],styles:["\n.block-ui-wrapper {\n  display: none;\n  position: fixed;\n  height: 100%;\n  width: 100%;\n  top: 0;\n  left: 0;\n  background: rgba(0, 0, 0, 0.70);\n  z-index: 30000;\n  cursor: wait;\n}\n\n.block-ui-wrapper.block-ui-wrapper--element {\n  position: absolute;\n}\n\n.block-ui-wrapper.active {\n  display: block;\n}\n\n.block-ui-wrapper.block-ui-main {\n  position: fixed;\n}\n\n.block-ui-spinner,\n.block-ui-template {\n  position: absolute;\n  top: 40%;\n  margin: 0 auto;\n  left: 0;\n  right: 0;\n  transform: translateY(-50%);\n}\n\n.block-ui-spinner > .message {\n  font-size: 1.3em;\n  text-align: center;\n  color: #fff;\n}\n\n.block-ui__element {\n  position: relative;\n}\n\n.loader,\n.loader:after {\n  border-radius: 50%;\n  width: 10em;\n  height: 10em;\n}\n.loader {\n  margin: 7px auto;\n  font-size: 5px;\n  position: relative;\n  text-indent: -9999em;\n  border-top: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-right: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-bottom: 1.1em solid rgba(255, 255, 255, 0.2);\n  border-left: 1.1em solid #ffffff;\n  -webkit-transform: translateZ(0);\n  -ms-transform: translateZ(0);\n  transform: translateZ(0);\n  -webkit-animation: load8 1.1s infinite linear;\n  animation: load8 1.1s infinite linear;\n}\n\n@-webkit-keyframes load8 {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes load8 {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n"],encapsulation:2}),Af([(0,e.IIB)()],n.prototype,"name",void 0),Af([(0,e.IIB)()],n.prototype,"delayStart",void 0),Af([(0,e.IIB)()],n.prototype,"delayStop",void 0),Af([(0,e.IIB)("message")],n.prototype,"defaultMessage",void 0),Af([(0,e.IIB)("template")],n.prototype,"templateCmp",void 0),Af([(0,e.i9L)("templateOutlet",{read:e.s_b})],n.prototype,"templateOutlet",void 0),n})(),T1=(()=>{let n=class{constructor(t){this.blockUIInstance=t,this.globalDispatch=this.blockUIInstance.decorate()}start(t,o){this.dispatch(t,fd.START,o)}stop(t){this.dispatch(t,fd.STOP)}reset(t){this.dispatch(t,fd.RESET)}resetGlobal(){this.globalDispatch.resetGlobal()}update(t,o){this.dispatch(t,fd.UPDATE,o)}unsubscribe(t){this.dispatch(t,fd.UNSUBSCRIBE)}isActive(t=null){const o=t?this.toArray(t):null,l=this.blockUIInstance.blockUIInstances;return Object.keys(l).some(_=>o?o.indexOf(l[_].name)>=0&&l[_].isActive:l[_].isActive)}dispatch(t=[],o,l){this.toArray(t).forEach(C=>this.blockUIInstance.decorate(C)[o](l))}toArray(t=[]){return"string"==typeof t?[t]:t}};return n.\u0275fac=function(t){return new(t||n)(e.LFG(Nm))},n.\u0275prov=e.Yz7({token:n,factory:function(s){return n.\u0275fac(s)}}),n})();var pm;const Fg=new Nm,Im=new e.OlP("BlockUIModuleSettings");function Z0(n){return Fg.updateSettings(n),Fg}let Fm=pm=class{static forRoot(s={}){return{ngModule:pm,providers:[{provide:Im,useValue:s},{provide:Nm,useFactory:Z0,deps:[Im]},T1]}}};Fm.\u0275fac=function(s){return new(s||Fm)},Fm.\u0275mod=e.oAB({type:Fm}),Fm.\u0275inj=e.cJS({imports:[[p.ez]]});let gv=1;function sg(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"cd-table-key-value",1),e.BQk()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("data",t.module_config)}}let Uf=(()=>{class n{constructor(t){this.mgrModuleService=t}ngOnChanges(){this.selection&&this.mgrModuleService.getConfig(this.selection.name).subscribe(t=>{this.module_config=t})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(xm.N))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-mgr-module-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:[[4,"ngIf"],[3,"data"]],template:function(t,o){1&t&&e.YNc(0,sg,2,1,"ng-container",0),2&t&&e.Q6J("ngIf",o.selection)},directives:[p.O5,fo.b],styles:[""]}),n})();class eh extends It.o{constructor(s,t,o){super(),this.authStorageService=s,this.mgrModuleService=t,this.notificationService=o,this.columns=[],this.modules=[],this.selection=new _n.r,this.permission=this.authStorageService.getPermissions().configOpt,this.columns=[{name:"Name",prop:"name",flexGrow:1},{name:"Enabled",prop:"enabled",flexGrow:1,cellClass:"text-center",cellTransformation:Ht.e.checkIcon},{name:"Always-On",prop:"always_on",flexGrow:1,cellClass:"text-center",cellTransformation:Ht.e.checkIcon}];const l=()=>this.selection.first()&&encodeURIComponent(this.selection.first().name);this.tableActions=[{name:"Edit",permission:"update",disable:()=>!this.selection.hasSelection||0===Object.values(this.selection.first().options).length,routerLink:()=>`/mgr-modules/edit/${l()}`,icon:wo.P.edit},{name:"Enable",permission:"update",click:()=>this.updateModuleState(),disable:()=>this.isTableActionDisabled("enabled"),icon:wo.P.start},{name:"Disable",permission:"update",click:()=>this.updateModuleState(),disable:()=>this.getTableActionDisabledDesc(),icon:wo.P.stop}]}getModuleList(s){this.mgrModuleService.list().subscribe(t=>{this.modules=t},()=>{s.error()})}updateSelection(s){this.selection=s}isTableActionDisabled(s){if(!this.selection.hasSelection)return!0;const t=this.selection.first();if("dashboard"===t.name||t.always_on)return!0;switch(s){case"enabled":return t.enabled;case"disabled":return!t.enabled}}getTableActionDisabledDesc(){var s;return(null===(s=this.selection.first())||void 0===s?void 0:s.always_on)?"This Manager module is always on.":this.isTableActionDisabled("disabled")}updateModuleState(){if(!this.selection.hasSelection)return;let s;const t=()=>{(0,ai.H)(2e3).subscribe(()=>{this.mgrModuleService.list().subscribe(()=>{this.notificationService.suspendToasties(!1),this.blockUI.stop(),this.table.refreshBtn()},()=>{t()})})},o=this.selection.first();s=o.enabled?this.mgrModuleService.disable(o.name):this.mgrModuleService.enable(o.name),s.subscribe(()=>{},()=>{this.notificationService.suspendToasties(!0),this.blockUI.start("Reconnecting, please wait ..."),t()})}}eh.\u0275fac=function(s){return new(s||eh)(e.Y36(Vi.j),e.Y36(xm.N),e.Y36(Tl.g))},eh.\u0275cmp=e.Xpm({type:eh,selectors:[["cd-mgr-module-list"]],viewQuery:function(s,t){if(1&s&&e.Gf(Tr.a,7),2&s){let o;e.iGM(o=e.CRH())&&(t.table=o.first)}},features:[e.qOj],decls:4,vars:8,consts:[["columnMode","flex","selectionType","single","identifier","module",3,"autoReload","data","columns","hasDetails","setExpandedRow","updateSelection","fetchData"],["table",""],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"]],template:function(s,t){1&s&&(e.TgZ(0,"cd-table",0,1),e.NdJ("setExpandedRow",function(l){return t.setExpandedRow(l)})("updateSelection",function(l){return t.updateSelection(l)})("fetchData",function(l){return t.getModuleList(l)}),e._UZ(2,"cd-table-actions",2)(3,"cd-mgr-module-details",3),e.qZA()),2&s&&(e.Q6J("autoReload",!1)("data",t.modules)("columns",t.columns)("hasDetails",!0),e.xp6(2),e.Q6J("permission",t.permission)("selection",t.selection)("tableActions",t.tableActions),e.xp6(1),e.Q6J("selection",t.expandedRow))},directives:[Tr.a,Tu.K,Uf],styles:[""]}),(0,Z.gn)([function u_(n,s={}){return s.scopeToInstance?function(t,o){const l=`_${o}-block-ui`;Object.defineProperty(t,o,{get:function(){if(this[l])return this[l];const _=`${n}-${gv++}`;return this[l]=Fg.decorate(_),this[l]},set:function(_){this[l]=_}})}:function(t,o){t[o]=Fg.decorate(n)}}(),(0,Z.w6)("design:type",Object)],eh.prototype,"blockUI",void 0);let Lg=(()=>{class n{constructor(t){this.http=t}getMonitor(){return this.http.get("api/monitor")}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function th(n,s){if(1&n&&(e.TgZ(0,"table",11)(1,"tbody")(2,"tr")(3,"td",12),e.SDv(4,13),e.qZA(),e.TgZ(5,"td"),e._uU(6),e.qZA()(),e.TgZ(7,"tr")(8,"td",12),e.SDv(9,14),e.qZA(),e.TgZ(10,"td"),e._uU(11),e.ALo(12,"relativeDate"),e.qZA()(),e.TgZ(13,"tr")(14,"td",12),e.SDv(15,15),e.qZA(),e.TgZ(16,"td"),e._uU(17),e.qZA()(),e.TgZ(18,"tr")(19,"td",12),e.SDv(20,16),e.qZA(),e.TgZ(21,"td"),e._uU(22),e.qZA()(),e.TgZ(23,"tr")(24,"td",12),e.SDv(25,17),e.qZA(),e.TgZ(26,"td"),e._uU(27),e.qZA()(),e.TgZ(28,"tr")(29,"td",12),e.SDv(30,18),e.qZA(),e.TgZ(31,"td"),e._uU(32),e.qZA()(),e.TgZ(33,"tr")(34,"td",12),e.SDv(35,19),e.qZA(),e.TgZ(36,"td"),e._uU(37),e.qZA()()()()),2&n){const t=e.oxw();e.xp6(6),e.Oqu(t.mon_status.monmap.fsid),e.xp6(5),e.Oqu(e.lcZ(12,7,t.mon_status.monmap.modified)),e.xp6(6),e.Oqu(t.mon_status.monmap.epoch),e.xp6(5),e.Oqu(t.mon_status.features.quorum_con),e.xp6(5),e.Oqu(t.mon_status.features.quorum_mon),e.xp6(5),e.Oqu(t.mon_status.features.required_con),e.xp6(5),e.Oqu(t.mon_status.features.required_mon)}}let vv=(()=>{class n{constructor(t){this.monitorService=t,this.inQuorum={columns:[{prop:"name",name:"Name",cellTransformation:Ht.e.routerLink},{prop:"rank",name:"Rank"},{prop:"public_addr",name:"Public Address"},{prop:"cdOpenSessions",name:"Open Sessions",cellTransformation:Ht.e.sparkline,comparator:(o,l)=>{const _=Sr().last(o),C=Sr().last(l);return _&&C&&_!==C?_>C?1:-1:0}}]},this.notInQuorum={columns:[{prop:"name",name:"Name",cellTransformation:Ht.e.routerLink},{prop:"rank",name:"Rank"},{prop:"public_addr",name:"Public Address"}]}}refresh(){this.monitorService.getMonitor().subscribe(t=>{t.in_quorum.map(o=>(o.cdOpenSessions=o.stats.num_sessions.map(l=>l[1]),o.cdLink="/perf_counters/mon/"+o.name,o.cdParams={fromLink:"/monitor"},o)),t.out_quorum.map(o=>(o.cdLink="/perf_counters/mon/"+o.name,o.cdParams={fromLink:"/monitor"},o)),this.inQuorum.data=[...t.in_quorum],this.notInQuorum.data=[...t.out_quorum],this.mon_status=t.mon_status})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Lg))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-monitor"]],decls:15,vars:5,consts:function(){let s,t,o,l,_,C,R,N,V,Q;return s="Status",t="In Quorum",o="Not In Quorum",l="Cluster ID",_="monmap modified",C="monmap epoch",R="quorum con",N="quorum mon",V="required con",Q="required mon",[[1,"row"],[1,"col-lg-4"],[1,"cd-header"],s,["class","table table-striped",4,"ngIf"],[1,"col-lg-8"],[1,"in-quorum","cd-header"],t,[3,"data","columns"],o,[3,"data","columns","fetchData"],[1,"table","table-striped"],[1,"bold"],l,_,C,R,N,V,Q]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"fieldset")(3,"legend",2),e.SDv(4,3),e.qZA(),e.YNc(5,th,38,9,"table",4),e.qZA()(),e.TgZ(6,"div",5)(7,"legend",6),e.SDv(8,7),e.qZA(),e.TgZ(9,"div"),e._UZ(10,"cd-table",8),e.qZA(),e.TgZ(11,"legend",6),e.SDv(12,9),e.qZA(),e.TgZ(13,"div")(14,"cd-table",10),e.NdJ("fetchData",function(){return o.refresh()}),e.qZA()()()()),2&t&&(e.xp6(5),e.Q6J("ngIf",o.mon_status),e.xp6(5),e.Q6J("data",o.inQuorum.data)("columns",o.inQuorum.columns),e.xp6(4),e.Q6J("data",o.notInQuorum.data)("columns",o.notInQuorum.columns))},directives:[p.O5,Tr.a],pipes:[Ed.h],styles:[""]}),n})();class D_{}function hm(n,s){if(1&n&&(e.TgZ(0,"span",18),e.SDv(1,19),e.qZA()),2&n){const t=e.oxw(2);e.Q6J("ngbTooltip",t.clusterWideTooltip)}}function _m(n,s){1&n&&e._UZ(0,"hr",20)}function Lm(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",12)(1,"input",13),e.NdJ("change",function(){const _=e.CHM(t).$implicit;return e.oxw().changeValue(_)}),e.qZA(),e.TgZ(2,"label",14)(3,"strong"),e._uU(4),e.qZA(),e.YNc(5,hm,2,1,"span",15),e._UZ(6,"br"),e.TgZ(7,"span",16),e._uU(8),e.qZA()(),e.YNc(9,_m,1,0,"hr",17),e.qZA()}if(2&n){const t=s.$implicit,o=s.last;e.xp6(1),e.Q6J("checked",t.value)("indeterminate",t.indeterminate)("name",t.code)("id",t.code),e.xp6(1),e.Q6J("for",t.code),e.xp6(2),e.Oqu(t.name),e.xp6(1),e.Q6J("ngIf",t.clusterWide),e.xp6(3),e.Oqu(t.description),e.xp6(1),e.Q6J("ngIf",!o)}}let km=(()=>{class n{constructor(t,o,l,_,C){this.activeModal=t,this.actionLabels=o,this.authStorageService=l,this.osdService=_,this.notificationService=C,this.initialSelection=[],this.osdFlagsForm=new En.cw({}),this.flags=[{code:"noup",name:"No Up",description:"OSDs are not allowed to start",value:!1,clusterWide:!1,indeterminate:!1},{code:"nodown",name:"No Down",description:"OSD failure reports are being ignored, such that the monitors will not mark OSDs down",value:!1,clusterWide:!1,indeterminate:!1},{code:"noin",name:"No In",description:"OSDs that were previously marked out will not be marked back in when they start",value:!1,clusterWide:!1,indeterminate:!1},{code:"noout",name:"No Out",description:"OSDs will not automatically be marked out after the configured interval",value:!1,clusterWide:!1,indeterminate:!1}],this.clusterWideTooltip="The flag has been enabled for the entire cluster.",this.permissions=this.authStorageService.getPermissions()}ngOnInit(){const t=this.selected.length;this.osdService.getFlags().subscribe(o=>{const l=this.getActivatedIndivFlags();this.flags.forEach(_=>{const C=l[_.code];o.includes(_.code)&&(_.clusterWide=!0),C===t?_.value=!0:C>0&&(_.indeterminate=!0)}),this.initialSelection=Sr().cloneDeep(this.flags)})}getActivatedIndivFlags(){const t={};return this.flags.forEach(o=>{t[o.code]=0}),[].concat(...this.selected.map(o=>o.state)).map(o=>{Object.keys(t).includes(o)&&(t[o]=t[o]+1)}),t}changeValue(t){t.value=!t.value,t.indeterminate=!1}resetSelection(){this.flags=Sr().cloneDeep(this.initialSelection)}submitAction(){const t={};this.flags.forEach(l=>{t[l.code]=l.indeterminate?null:l.value});const o=this.selected.map(l=>l.osd);this.osdService.updateIndividualFlags(t,o).subscribe(()=>{this.notificationService.show(Ta.k.success,"Updated OSD Flags"),this.activeModal.close()},()=>{this.activeModal.close()})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Pr.Kz),e.Y36(Mo.p4),e.Y36(Vi.j),e.Y36(rc),e.Y36(Tl.g))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-flags-indiv-modal"]],decls:12,vars:6,consts:function(){let s,t,o;return s="Individual OSD Flags",t="Restore previous selection",o="Cluster-wide",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","osdFlagsForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body","osd-modal"],["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],[1,"modal-footer"],["type","button",1,"btn","btn-light",3,"click"],t,[3,"form","showSubmit","submitText","submitActionEvent"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"checked","indeterminate","name","id","change"],["ng-class","['tc_' + key]",1,"custom-control-label",3,"for"],["class","badge badge-hdd ms-2",3,"ngbTooltip",4,"ngIf"],[1,"form-text","text-muted"],["class","m-1",4,"ngIf"],[1,"badge","badge-hdd","ms-2",3,"ngbTooltip"],o,[1,"m-1"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6),e.YNc(7,Lm,10,9,"div",7),e.qZA(),e.TgZ(8,"div",8)(9,"button",9),e.NdJ("click",function(){return o.resetSelection()}),e.SDv(10,10),e.qZA(),e.TgZ(11,"cd-form-button-panel",11),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.osdFlagsForm),e.xp6(3),e.Q6J("ngForOf",o.flags),e.xp6(4),e.Q6J("form",o.osdFlagsForm)("showSubmit",o.permissions.osd.update)("submitText",o.actionLabels.UPDATE))},directives:[Ye.z,En._Y,En.JL,Oa.V,En.sg,p.sg,ge.o,Ll.b,p.O5,Pr._L,Ml.p],styles:[""]}),n})();var V_=i(84333);function Z_(n,s){1&n&&e._UZ(0,"hr",15)}function $m(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",10)(1,"input",11),e.NdJ("change",function(){const _=e.CHM(t).$implicit;return _.value=!_.value}),e.qZA(),e.TgZ(2,"label",12)(3,"strong"),e._uU(4),e.qZA(),e._UZ(5,"br"),e.TgZ(6,"span",13),e._uU(7),e.qZA()(),e.YNc(8,Z_,1,0,"hr",14),e.qZA()}if(2&n){const t=s.$implicit,o=s.last;e.xp6(1),e.Q6J("checked",t.value)("name",t.code)("id",t.code)("disabled",t.disabled),e.xp6(1),e.Q6J("for",t.code),e.xp6(2),e.Oqu(t.name),e.xp6(3),e.Oqu(t.description),e.xp6(1),e.Q6J("ngIf",!o)}}let Hm=(()=>{class n{constructor(t,o,l,_,C){this.activeModal=t,this.actionLabels=o,this.authStorageService=l,this.osdService=_,this.notificationService=C,this.osdFlagsForm=new En.cw({}),this.allFlags={noin:{code:"noin",name:"No In",value:!1,description:"OSDs that were previously marked out will not be marked back in when they start"},noout:{code:"noout",name:"No Out",value:!1,description:"OSDs will not automatically be marked out after the configured interval"},noup:{code:"noup",name:"No Up",value:!1,description:"OSDs are not allowed to start"},nodown:{code:"nodown",name:"No Down",value:!1,description:"OSD failure reports are being ignored, such that the monitors will not mark OSDs down"},pause:{code:"pause",name:"Pause",value:!1,description:"Pauses reads and writes"},noscrub:{code:"noscrub",name:"No Scrub",value:!1,description:"Scrubbing is disabled"},"nodeep-scrub":{code:"nodeep-scrub",name:"No Deep Scrub",value:!1,description:"Deep Scrubbing is disabled"},nobackfill:{code:"nobackfill",name:"No Backfill",value:!1,description:"Backfilling of PGs is suspended"},norebalance:{code:"norebalance",name:"No Rebalance",value:!1,description:"OSD will choose not to backfill unless PG is also degraded"},norecover:{code:"norecover",name:"No Recover",value:!1,description:"Recovery of PGs is suspended"},sortbitwise:{code:"sortbitwise",name:"Bitwise Sort",value:!1,description:"Use bitwise sort",disabled:!0},purged_snapdirs:{code:"purged_snapdirs",name:"Purged Snapdirs",value:!1,description:"OSDs have converted snapsets",disabled:!0},recovery_deletes:{code:"recovery_deletes",name:"Recovery Deletes",value:!1,description:"Deletes performed during recovery instead of peering",disabled:!0},pglog_hardlimit:{code:"pglog_hardlimit",name:"PG Log Hard Limit",value:!1,description:"Puts a hard limit on pg log length",disabled:!0}},this.unknownFlags=[],this.permissions=this.authStorageService.getPermissions()}ngOnInit(){this.osdService.getFlags().subscribe(t=>{t.forEach(o=>{this.allFlags[o]?this.allFlags[o].value=!0:this.unknownFlags.push(o)}),this.flags=Sr().toArray(this.allFlags)})}submitAction(){const t=this.flags.filter(o=>o.value).map(o=>o.code).concat(this.unknownFlags);this.osdService.updateFlags(t).subscribe(()=>{this.notificationService.show(Ta.k.success,"Updated OSD Flags"),this.activeModal.close()},()=>{this.activeModal.close()})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Pr.Kz),e.Y36(Mo.p4),e.Y36(Vi.j),e.Y36(rc),e.Y36(Tl.g))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-flags-modal"]],decls:10,vars:6,consts:function(){let s;return s="Cluster-wide OSD Flags",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","osdFlagsForm","novalidate","","cdFormScope","osd",3,"formGroup"],["formDir","ngForm"],[1,"modal-body","osd-modal"],["class","custom-control custom-checkbox",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","showSubmit","submitText","submitActionEvent"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"checked","name","id","disabled","change"],["ng-class","['tc_' + key]",1,"custom-control-label",3,"for"],[1,"form-text","text-muted"],["class","m-1",4,"ngIf"],[1,"m-1"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6),e.YNc(7,$m,9,8,"div",7),e.qZA(),e.TgZ(8,"div",8)(9,"cd-form-button-panel",9),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.osdFlagsForm),e.xp6(3),e.Q6J("ngForOf",o.flags),e.xp6(2),e.Q6J("form",o.osdFlagsForm)("showSubmit",o.permissions.osd.update)("submitText",o.actionLabels.UPDATE))},directives:[Ye.z,En._Y,En.JL,V_.T,Oa.V,En.sg,p.sg,ge.o,Ll.b,p.O5,Ml.p],styles:[""]}),n})();function C1(n,s){if(1&n&&(e.TgZ(0,"cd-helper"),e._uU(1),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.xp6(1),e.hij(" ",t.long_desc,"")}}function np(n,s){if(1&n&&(e.TgZ(0,"div",4)(1,"label",5)(2,"b"),e._uU(3),e.qZA(),e._UZ(4,"br"),e.TgZ(5,"span",6),e._uU(6),e.YNc(7,C1,2,1,"cd-helper",7),e.qZA()(),e.TgZ(8,"div",8)(9,"div",9),e._UZ(10,"input",10)(11,"label",11),e.qZA()()()),2&n){const t=e.oxw().$implicit;e.xp6(1),e.Q6J("for",t.name),e.xp6(2),e.Oqu(t.text),e.xp6(3),e.hij(" ",t.desc," "),e.xp6(1),e.Q6J("ngIf",t.long_desc),e.xp6(3),e.Q6J("id",t.name)("formControlName",t.name),e.xp6(1),e.Q6J("for",t.name)}}function kg(n,s){if(1&n&&(e.TgZ(0,"cd-helper"),e._uU(1),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.xp6(1),e.hij(" ",t.long_desc,"")}}const M1=function(n){return[n]};function O1(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",16),e.NdJ("click",function(){e.CHM(t);const l=e.oxw(2).$implicit;return e.oxw().resetValue(l.name)}),e._UZ(1,"i",17),e.qZA()}if(2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngClass",e.VKq(1,M1,t.icons.erase))}}function A1(n,s){if(1&n&&(e.TgZ(0,"span",18),e._uU(1),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.xp6(1),e.hij(" ",t.additionalTypeInfo.patternHelpText,"")}}function D1(n,s){if(1&n&&(e.TgZ(0,"span",18),e._uU(1),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.xp6(1),e.hij(" ",t.additionalTypeInfo.patternHelpText,"")}}function $g(n,s){if(1&n&&(e.TgZ(0,"span",18),e.SDv(1,19),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.xp6(1),e.pQV(t.maxValue),e.QtT(1)}}function x1(n,s){if(1&n&&(e.TgZ(0,"span",18),e.SDv(1,20),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.xp6(1),e.pQV(t.minValue),e.QtT(1)}}function yv(n,s){if(1&n&&(e.TgZ(0,"div",4)(1,"label",5),e._uU(2),e._UZ(3,"br"),e.TgZ(4,"span",6),e._uU(5),e.YNc(6,kg,2,1,"cd-helper",7),e.qZA()(),e.TgZ(7,"div",8)(8,"div",12),e._UZ(9,"input",13),e.YNc(10,O1,2,3,"button",14),e.qZA(),e.YNc(11,A1,2,1,"span",15),e.YNc(12,D1,2,1,"span",15),e.YNc(13,$g,2,1,"span",15),e.YNc(14,x1,2,1,"span",15),e.qZA()()),2&n){const t=e.oxw().$implicit,o=e.oxw();e.xp6(1),e.Q6J("for",t.name),e.xp6(1),e.hij("",t.text," "),e.xp6(3),e.hij(" ",t.desc," "),e.xp6(1),e.Q6J("ngIf",t.long_desc),e.xp6(3),e.Q6J("type",t.additionalTypeInfo.inputType)("id",t.name)("placeholder",t.additionalTypeInfo.humanReadable)("formControlName",t.name)("step",o.getStep(t.type,o.optionsForm.getValue(t.name))),e.xp6(1),e.Q6J("ngIf",o.optionsFormShowReset),e.xp6(1),e.Q6J("ngIf",o.optionsForm.showError(t.name,o.optionsFormDir,"pattern")),e.xp6(1),e.Q6J("ngIf",o.optionsForm.showError(t.name,o.optionsFormDir,"invalidUuid")),e.xp6(1),e.Q6J("ngIf",o.optionsForm.showError(t.name,o.optionsFormDir,"max")),e.xp6(1),e.Q6J("ngIf",o.optionsForm.showError(t.name,o.optionsFormDir,"min"))}}function R1(n,s){1&n&&e._UZ(0,"hr",21)}function z0(n,s){if(1&n&&(e.TgZ(0,"div"),e.YNc(1,np,12,7,"div",2),e.YNc(2,yv,15,14,"div",2),e.YNc(3,R1,1,0,"hr",3),e.qZA()),2&n){const t=s.$implicit,o=s.last;e.xp6(1),e.Q6J("ngIf","bool"===t.type),e.xp6(1),e.Q6J("ngIf","bool"!==t.type),e.xp6(1),e.Q6J("ngIf",!o)}}let w1=(()=>{class n{constructor(t){this.configService=t,this.optionNames=[],this.optionsForm=new tc.d({}),this.optionsFormDir=new En.F([],[]),this.optionsFormGroupName="",this.optionsFormShowReset=!0,this.icons=wo.P,this.options=[],this.optionsFormGroup=new tc.d({})}static optionNameToText(t){const o=["mon","mgr","osd","mds","client"];return t.split("_").filter((l,_)=>0!==_||!o.includes(l)).map(l=>l.charAt(0).toUpperCase()+l.substring(1)).join(" ")}ngOnInit(){this.createForm(),this.loadStoredData()}createForm(){this.optionsForm.addControl(this.optionsFormGroupName,this.optionsFormGroup),this.optionNames.forEach(t=>{this.optionsFormGroup.addControl(t,new En.NI(null))})}getStep(t,o){return ju.getTypeStep(t,o)}loadStoredData(){this.configService.filter(this.optionNames).subscribe(t=>{this.options=t.map(o=>{const l=this.optionsForm.get(o.name),_=ju.getTypeValidators(o);return o.additionalTypeInfo=ju.getType(o.type),o.text=n.optionNameToText(o.name),o.value=Sr().find(o.value,C=>"osd"===C.section),o.value&&l.setValue("bool"===o.additionalTypeInfo.name?"true"===o.value.value:o.value.value),_&&(o.patternHelpText=_.patternHelpText,"max"in _&&""!==_.max&&(o.maxValue=_.max),"min"in _&&""!==_.min&&(o.minValue=_.min),l.setValidators(_.validators)),o})})}saveValues(){const t={};return this.optionNames.forEach(o=>{const l=this.optionsForm.getValue(o);null!==l&&""!==l&&(t[o]={section:"osd",value:l})}),this.configService.bulkCreate({options:t})}resetValue(t){this.configService.delete(t,"osd").subscribe(()=>{this.optionsForm.get(t).reset()})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Fc.e))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-config-option"]],inputs:{optionNames:"optionNames",optionsForm:"optionsForm",optionsFormDir:"optionsFormDir",optionsFormGroupName:"optionsFormGroupName",optionsFormShowReset:"optionsFormShowReset"},decls:2,vars:2,consts:function(){let s,t,o;return s="Remove the custom configuration value. The default configuration will be inherited and used instead.",t="The entered value is too high! It must not be greater than " + "\ufffd0\ufffd" + ".",o="The entered value is too low! It must not be lower than " + "\ufffd0\ufffd" + ".",[[3,"formGroup"],[4,"ngFor","ngForOf"],["class","form-group row pt-2",4,"ngIf"],["class","my-2",4,"ngIf"],[1,"form-group","row","pt-2"],[1,"cd-col-form-label",3,"for"],[1,"text-muted"],[4,"ngIf"],[1,"cd-col-form-input"],[1,"custom-control","custom-checkbox"],["type","checkbox",1,"custom-control-input",3,"id","formControlName"],[1,"custom-control-label",3,"for"],[1,"input-group"],[1,"form-control",3,"type","id","placeholder","formControlName","step"],["class","btn btn-light","type","button","data-toggle","button","title",s,3,"click",4,"ngIf"],["class","invalid-feedback",4,"ngIf"],["type","button","data-toggle","button","title",s,1,"btn","btn-light",3,"click"],["aria-hidden","true",3,"ngClass"],[1,"invalid-feedback"],t,o,[1,"my-2"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0),e.YNc(1,z0,4,3,"div",1),e.qZA()),2&t&&(e.Q6J("formGroup",o.optionsFormGroup),e.xp6(1),e.Q6J("ngForOf",o.options))},directives:[En.JL,En.sg,Oa.V,p.sg,p.O5,ll.P,xe.S,ge.o,En.Wl,Ll.b,En.JJ,En.u,En.Fj,p.mk],styles:[".custom-checkbox[_ngcontent-%COMP%]   label[_ngcontent-%COMP%], .custom-checkbox[_ngcontent-%COMP%]   input[_ngcontent-%COMP%]{cursor:pointer}.col-form-label[_ngcontent-%COMP%]{text-align:left}"]}),n})(),Ev=(()=>{class n{}return n.basicOptions=["osd_scrub_during_recovery","osd_scrub_begin_hour","osd_scrub_end_hour","osd_scrub_begin_week_day","osd_scrub_end_week_day","osd_scrub_min_interval","osd_scrub_max_interval","osd_deep_scrub_interval","osd_scrub_auto_repair","osd_max_scrubs","osd_scrub_priority","osd_scrub_sleep"],n.advancedOptions=["osd_scrub_auto_repair_num_errors","osd_debug_deep_scrub_sleep","osd_deep_scrub_keys","osd_deep_scrub_large_omap_object_key_threshold","osd_deep_scrub_large_omap_object_value_sum_threshold","osd_deep_scrub_randomize_ratio","osd_deep_scrub_stride","osd_deep_scrub_update_digest_min_age","osd_requested_scrub_priority","osd_scrub_backoff_ratio","osd_scrub_chunk_max","osd_scrub_chunk_min","osd_scrub_cost","osd_scrub_interval_randomize_ratio","osd_scrub_invalid_stats","osd_scrub_load_threshold","osd_scrub_max_preemptions","osd_shallow_scrub_chunk_max","osd_shallow_scrub_chunk_min"],n})();const P1=["basicOptionsValues"],W0=["advancedOptionsValues"];function N1(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"a",15),e.NdJ("click",function(){return e.CHM(t),e.oxw().advancedEnabled=!0}),e.SDv(1,16),e.qZA()}}function J0(n,s){if(1&n&&(e.TgZ(0,"div")(1,"h3",17),e.SDv(2,18),e.qZA(),e._UZ(3,"cd-config-option",7,19),e.qZA()),2&n){const t=e.oxw(),o=e.MAs(7);e.xp6(3),e.Q6J("optionNames",t.advancedOptions)("optionsForm",t.osdPgScrubForm)("optionsFormDir",o)("optionsFormGroupName","advancedFormGroup")}}let Hg=(()=>{class n{constructor(t,o,l,_){this.activeModal=t,this.authStorageService=o,this.notificationService=l,this.actionLabels=_,this.basicOptions=Ev.basicOptions,this.advancedOptions=Ev.advancedOptions,this.advancedEnabled=!1,this.osdPgScrubForm=new tc.d({}),this.resource="PG scrub options",this.action=this.actionLabels.EDIT,this.permissions=this.authStorageService.getPermissions()}submitAction(){const t=[this.basicOptionsValues.saveValues()];this.advancedOptionsValues&&t.push(this.advancedOptionsValues.saveValues()),(0,Fu.D)(t).subscribe(()=>{this.notificationService.show(Ta.k.success,"Updated PG scrub options"),this.activeModal.close()},()=>{this.activeModal.close()})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Pr.Kz),e.Y36(Vi.j),e.Y36(Tl.g),e.Y36(Mo.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-pg-scrub-modal"]],viewQuery:function(t,o){if(1&t&&(e.Gf(P1,7),e.Gf(W0,5)),2&t){let l;e.iGM(l=e.CRH())&&(o.basicOptionsValues=l.first),e.iGM(l=e.CRH())&&(o.advancedOptionsValues=l.first)}},decls:19,vars:21,consts:function(){let s,t,o;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Advanced...",o="Advanced configuration options",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["novalidate","","cdFormScope","osd",3,"formGroup"],["formDir","ngForm"],[1,"modal-body","osd-modal"],[3,"optionNames","optionsForm","optionsFormDir","optionsFormGroupName"],["basicOptionsValues",""],[1,"row"],[1,"col-sm-12"],["class","pull-right margin-right-md",3,"click",4,"ngIf"],[4,"ngIf"],[1,"modal-footer"],[3,"form","showSubmit","submitText","submitActionEvent"],[1,"pull-right","margin-right-md",3,"click"],t,[1,"page-header"],o,["advancedOptionsValues",""]]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.ALo(3,"titlecase"),e.ALo(4,"upperFirst"),e.BQk(),e.ynx(5,3),e.TgZ(6,"form",4,5)(8,"div",6),e._UZ(9,"cd-config-option",7,8),e.TgZ(11,"div",9)(12,"div",10),e.YNc(13,N1,2,0,"a",11),e.qZA()(),e.YNc(14,J0,5,4,"div",12),e.qZA(),e.TgZ(15,"div",13)(16,"cd-form-button-panel",14),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.ALo(17,"titlecase"),e.ALo(18,"upperFirst"),e.qZA()()(),e.BQk(),e.qZA()),2&t){const l=e.MAs(7);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.pQV(e.lcZ(3,13,o.action))(e.lcZ(4,15,o.resource)),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.osdPgScrubForm),e.xp6(3),e.Q6J("optionNames",o.basicOptions)("optionsForm",o.osdPgScrubForm)("optionsFormDir",l)("optionsFormGroupName","basicFormGroup"),e.xp6(4),e.Q6J("ngIf",!o.advancedEnabled),e.xp6(1),e.Q6J("ngIf",o.advancedEnabled),e.xp6(2),e.Q6J("form",o.osdPgScrubForm)("showSubmit",o.permissions.configOpt.update)("submitText",e.lcZ(17,17,o.action)+" "+e.lcZ(18,19,o.resource))}},directives:[Ye.z,En._Y,En.JL,V_.T,Oa.V,En.sg,w1,p.O5,Ml.p],pipes:[p.rS,Mt.m],styles:[""]}),n})();function bv(n,s){if(1&n&&(e.TgZ(0,"option",22),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.name),e.xp6(1),e.hij(" ",t.text," ")}}function Q0(n,s){1&n&&(e.TgZ(0,"span",23),e.SDv(1,24),e.qZA())}function KE(n,s){if(1&n&&(e.TgZ(0,"cd-helper"),e._uU(1),e.qZA()),2&n){const t=e.oxw().$implicit;e.xp6(1),e.Oqu(t.value.desc)}}function X0(n,s){1&n&&(e.TgZ(0,"span",23),e.SDv(1,29),e.qZA())}function Sv(n,s){if(1&n&&(e.TgZ(0,"span",23),e.SDv(1,30),e.qZA()),2&n){const t=e.oxw().$implicit;e.xp6(1),e.pQV(t.value.patternHelpText),e.QtT(1)}}function Tv(n,s){if(1&n&&(e.TgZ(0,"span",23),e.SDv(1,31),e.qZA()),2&n){const t=e.oxw().$implicit;e.xp6(1),e.pQV(t.value.maxValue),e.QtT(1)}}function K0(n,s){if(1&n&&(e.TgZ(0,"span",23),e.SDv(1,32),e.qZA()),2&n){const t=e.oxw().$implicit;e.xp6(1),e.pQV(t.value.minValue),e.QtT(1)}}const qE=function(n){return{required:n}};function eb(n,s){if(1&n&&(e.TgZ(0,"div",7)(1,"label",25)(2,"span",26),e._uU(3),e.qZA(),e.YNc(4,KE,2,1,"cd-helper",27),e.qZA(),e.TgZ(5,"div",10),e._UZ(6,"input",28),e.YNc(7,X0,2,0,"span",13),e.YNc(8,Sv,2,1,"span",13),e.YNc(9,Tv,2,1,"span",13),e.YNc(10,K0,2,1,"span",13),e.qZA()()),2&n){const t=s.$implicit,o=e.oxw(),l=e.MAs(5);e.xp6(1),e.Q6J("for",t.key),e.xp6(1),e.Q6J("ngClass",e.VKq(11,qE,o.osdRecvSpeedForm.getValue("customizePriority"))),e.xp6(1),e.hij(" ",t.value.text," "),e.xp6(1),e.Q6J("ngIf",t.value.desc),e.xp6(2),e.Q6J("id",t.key)("formControlName",t.key)("readonly",!o.osdRecvSpeedForm.getValue("customizePriority")),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.getValue("customizePriority")&&o.osdRecvSpeedForm.showError(t.key,l,"required")),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.getValue("customizePriority")&&o.osdRecvSpeedForm.showError(t.key,l,"pattern")),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.getValue("customizePriority")&&o.osdRecvSpeedForm.showError(t.key,l,"max")),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.getValue("customizePriority")&&o.osdRecvSpeedForm.showError(t.key,l,"min"))}}let tb=(()=>{class n{constructor(t,o,l,_,C,R){this.activeModal=t,this.actionLabels=o,this.authStorageService=l,this.configService=_,this.notificationService=C,this.osdService=R,this.priorities=[],this.priorityAttrs={},this.permissions=this.authStorageService.getPermissions(),this.priorities=this.osdService.osdRecvSpeedModalPriorities.KNOWN_PRIORITIES,this.osdRecvSpeedForm=new tc.d({priority:new En.NI(null,{validators:[En.kI.required]}),customizePriority:new En.NI(!1)}),this.priorityAttrs={osd_max_backfills:{text:"Max Backfills",desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_max_active:{text:"Recovery Max Active",desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_max_single_start:{text:"Recovery Max Single Start",desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0},osd_recovery_sleep:{text:"Recovery Sleep",desc:"",patternHelpText:"",maxValue:void 0,minValue:void 0}},Object.keys(this.priorityAttrs).forEach(N=>{this.osdRecvSpeedForm.addControl(N,new En.NI(null,{validators:[En.kI.required]}))})}ngOnInit(){this.configService.filter(Object.keys(this.priorityAttrs)).subscribe(t=>{const o=this.getCurrentValues(t);this.detectPriority(o.values,l=>{this.setPriority(l)}),this.setDescription(o.configOptions),this.setValidators(o.configOptions)})}detectPriority(t,o){const l=Sr().find(this.priorities,_=>Sr().isEqual(_.values,t));return this.osdRecvSpeedForm.controls.customizePriority.setValue(!1),l?o(l):4===Object.entries(t).length?(this.osdRecvSpeedForm.controls.customizePriority.setValue(!0),o(Object({name:"custom",text:"Custom",values:t}))):o(this.priorities[0])}getCurrentValues(t){const o={values:{},configOptions:[]};return t.forEach(l=>{o.configOptions.push(l),"value"in l?l.value.forEach(_=>{"osd"===_.section&&(o.values[l.name]=Number(_.value))}):"default"in l&&null!==l.default&&(o.values[l.name]=Number(l.default))}),o}setDescription(t){t.forEach(o=>{""!==o.desc&&(this.priorityAttrs[o.name].desc=o.desc)})}setPriority(t){const o=Sr().find(this.priorities,l=>"custom"===l.name);"custom"===t.name?o||this.priorities.push(t):o&&this.priorities.splice(this.priorities.indexOf(o),1),this.osdRecvSpeedForm.controls.priority.setValue(t.name),Object.entries(t.values).forEach(([l,_])=>{this.osdRecvSpeedForm.controls[l].setValue(_)})}setValidators(t){t.forEach(o=>{const l=ju.getTypeValidators(o);l?(l.validators.push(En.kI.required),"max"in l&&""!==l.max&&(this.priorityAttrs[o.name].maxValue=l.max),"min"in l&&""!==l.min&&(this.priorityAttrs[o.name].minValue=l.min),this.priorityAttrs[o.name].patternHelpText=l.patternHelpText,this.osdRecvSpeedForm.controls[o.name].setValidators(l.validators)):this.osdRecvSpeedForm.controls[o.name].setValidators(En.kI.required)})}onCustomizePriorityChange(){const t={};if(Object.keys(this.priorityAttrs).forEach(o=>{t[o]=this.osdRecvSpeedForm.getValue(o)}),this.osdRecvSpeedForm.getValue("customizePriority")){const o={name:"custom",text:"Custom",values:t};this.setPriority(o)}else this.detectPriority(t,o=>{this.setPriority(o)})}onPriorityChange(t){const o=Sr().find(this.priorities,l=>l.name===t)||this.priorities[0];this.osdRecvSpeedForm.get("customizePriority").setValue(!1),this.setPriority(o)}submitAction(){const t={};Object.keys(this.priorityAttrs).forEach(o=>{t[o]={section:"osd",value:this.osdRecvSpeedForm.getValue(o)}}),this.configService.bulkCreate({options:t}).subscribe(()=>{this.notificationService.show(Ta.k.success,"Updated OSD recovery speed priority '" + this.osdRecvSpeedForm.getValue("priority") + "'"),this.activeModal.close()},()=>{this.activeModal.close()})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Pr.Kz),e.Y36(Mo.p4),e.Y36(Vi.j),e.Y36(Fc.e),e.Y36(Tl.g),e.Y36(rc))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-recv-speed-modal"]],decls:24,vars:10,consts:function(){let s,t,o,l,_,C,R,N;return s="OSD Recovery Priority",t="Priority",o="Customize priority values",l="This field is required.",_="This field is required!",C="" + "\ufffd0\ufffd" + "",R="The entered value is too high! It must not be greater than " + "\ufffd0\ufffd" + ".",N="The entered value is too low! It must not be lower than " + "\ufffd0\ufffd" + ".",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["novalidate","","cdFormScope","osd",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","priority",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["formControlName","priority","id","priority",1,"form-select",3,"change"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["formControlName","customizePriority","id","customizePriority","name","customizePriority","type","checkbox",1,"custom-control-input",3,"change"],["for","customizePriority",1,"custom-control-label"],o,["class","form-group row",4,"ngFor","ngForOf"],[1,"modal-footer"],[3,"form","submitText","showSubmit","submitActionEvent"],[3,"value"],[1,"invalid-feedback"],l,[1,"cd-col-form-label",3,"for"],[3,"ngClass"],[4,"ngIf"],["type","number",1,"form-control",3,"id","formControlName","readonly"],_,C,R,N]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10)(11,"select",11),e.NdJ("change",function(_){return o.onPriorityChange(_.target.value)}),e.YNc(12,bv,2,2,"option",12),e.qZA(),e.YNc(13,Q0,2,0,"span",13),e.qZA()(),e.TgZ(14,"div",7)(15,"div",14)(16,"div",15)(17,"input",16),e.NdJ("change",function(){return o.onCustomizePriorityChange()}),e.qZA(),e.TgZ(18,"label",17),e.SDv(19,18),e.qZA()()()(),e.YNc(20,eb,11,13,"div",19),e.ALo(21,"keyvalue"),e.qZA(),e.TgZ(22,"div",20)(23,"cd-form-button-panel",21),e.NdJ("submitActionEvent",function(){return o.submitAction()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const l=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.osdRecvSpeedForm),e.xp6(8),e.Q6J("ngForOf",o.priorities),e.xp6(1),e.Q6J("ngIf",o.osdRecvSpeedForm.showError("priority",l,"required")),e.xp6(7),e.Q6J("ngForOf",e.lcZ(21,8,o.priorityAttrs)),e.xp6(3),e.Q6J("form",o.osdRecvSpeedForm)("submitText",o.actionLabels.UPDATE)("showSubmit",o.permissions.configOpt.update)}},directives:[Ye.z,En._Y,En.JL,V_.T,Oa.V,En.sg,ll.P,ge.o,En.EJ,En.JJ,En.u,p.sg,En.YN,En.Kr,p.O5,En.Wl,Ll.b,p.mk,xe.S,En.wV,En.Fj,Ml.p],pipes:[p.Nd],styles:[""]}),n})();function q0(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,15),e.qZA())}function I1(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,16),e.qZA())}function nb(n,s){if(1&n&&(e.TgZ(0,"span",13),e.YNc(1,q0,2,0,"span",14),e.YNc(2,I1,2,0,"span",14),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",null==t.weight.errors?null:t.weight.errors.required),e.xp6(1),e.Q6J("ngIf",(null==t.weight.errors?null:t.weight.errors.max)||(null==t.weight.errors?null:t.weight.errors.min))}}let ey=(()=>{class n{constructor(t,o,l,_){this.actionLabels=t,this.activeModal=o,this.osdService=l,this.fb=_,this.currentWeight=1}get weight(){return this.reweightForm.get("weight")}ngOnInit(){this.reweightForm=this.fb.group({weight:this.fb.control(this.currentWeight,[En.kI.required])})}reweight(){this.osdService.reweight(this.osdId,this.reweightForm.value.weight).subscribe(()=>this.activeModal.close())}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(Pr.Kz),e.Y36(rc),e.Y36(jl.O))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-reweight-modal"]],decls:14,vars:7,consts:function(){let s,t,o;return s="Reweight OSD: " + "\ufffd0\ufffd" + "",t="This field is required.",o="The value needs to be between 0 and 1.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],[3,"formGroup"],[1,"modal-body"],[1,"row"],["for","weight",1,"cd-col-form-label"],[1,"cd-col-form-input"],["id","weight","type","number","step","0.1","formControlName","weight","min","0","max","1",1,"form-control",3,"value"],["class","invalid-feedback",4,"ngIf"],[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],[4,"ngIf"],t,o]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0),e.ynx(1,1),e.SDv(2,2),e.BQk(),e.ynx(3,3),e.TgZ(4,"form",4)(5,"div",5)(6,"div",6)(7,"label",7),e._uU(8,"Weight"),e.qZA(),e.TgZ(9,"div",8),e._UZ(10,"input",9),e.YNc(11,nb,3,2,"span",10),e.qZA()()(),e.TgZ(12,"div",11)(13,"cd-form-button-panel",12),e.NdJ("submitActionEvent",function(){return o.reweight()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.osdId),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.reweightForm),e.xp6(6),e.Q6J("value",o.currentWeight),e.xp6(1),e.Q6J("ngIf",o.weight.errors),e.xp6(2),e.Q6J("form",o.reweightForm)("submitText",o.actionLabels.REWEIGHT))},directives:[Ye.z,En._Y,En.JL,Oa.V,En.sg,ge.o,En.wV,En.qQ,En.Fd,En.Fj,Ll.b,En.JJ,En.u,p.O5,Ml.p],styles:[""]}),n})();var z_=i(86969);let ty=(()=>{class n{constructor(t,o,l,_,C){this.activeModal=t,this.actionLabels=o,this.osdService=l,this.notificationService=_,this.joinPipe=C,this.selected=[]}ngOnInit(){this.scrubForm=new En.cw({})}scrub(){(0,Fu.D)(this.selected.map(t=>this.osdService.scrub(t,this.deep))).subscribe(()=>{this.notificationService.show(Ta.k.success,"" + (this.deep ? "Deep scrub" : "Scrub") + " was initialized in the following OSD(s): " + this.joinPipe.transform(this.selected) + ""),this.activeModal.close()},()=>this.activeModal.close())}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Pr.Kz),e.Y36(Mo.p4),e.Y36(rc),e.Y36(Tl.g),e.Y36(z_.A))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-scrub-modal"]],decls:13,vars:9,consts:function(){let s,t,o,l;return s="{VAR_SELECT, select, true {Deep } other {}}",s=e.Zx4(s,{VAR_SELECT:"\ufffd0\ufffd"}),t="OSDs " + s + "Scrub",o="{VAR_SELECT, select, true {deep } other {}}",o=e.Zx4(o,{VAR_SELECT:"\ufffd0\ufffd"}),l="You are about to apply a " + o + "scrub to the OSD(s): " + "\ufffd#9\ufffd" + "" + "\ufffd1\ufffd" + "" + "\ufffd/#9\ufffd" + ".",[[3,"modalRef"],[1,"modal-title"],t,[1,"modal-content"],["name","scrubForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],l,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"]]},template:function(t,o){1&t&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.qZA(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"p"),e.tHW(8,7),e._UZ(9,"strong"),e.ALo(10,"join"),e.N_p(),e.qZA()(),e.TgZ(11,"div",8)(12,"cd-form-button-panel",9),e.NdJ("submitActionEvent",function(){return o.scrub()}),e.qZA()()(),e.BQk(),e.qZA()),2&t&&(e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.deep),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.scrubForm),e.xp6(6),e.pQV(o.deep)(e.lcZ(10,7,o.selected)),e.QtT(8),e.xp6(2),e.Q6J("form",o.scrubForm)("submitText",o.actionLabels.UPDATE))},directives:[Ye.z,En._Y,En.JL,Oa.V,En.sg,Ml.p],pipes:[z_.A],styles:[""]}),n})();var Cv=i(60351);function ny(n,s){if(1&n&&e._UZ(0,"cd-device-list",17),2&n){const t=e.oxw(2);e.Q6J("osdId",null==t.osd?null:t.osd.id)("hostname",null==t.selection?null:t.selection.host.name)("osdList",!0)}}function F1(n,s){if(1&n&&e._UZ(0,"cd-table-key-value",18),2&n){const t=e.oxw(2);e.Q6J("data",null==t.osd||null==t.osd.details?null:t.osd.details.osd_map)}}function Bg(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table-key-value",21),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw(3).refresh()}),e.qZA()}if(2&n){const t=e.oxw(3);e.Q6J("data",null==t.osd||null==t.osd.details?null:t.osd.details.osd_metadata)}}function ry(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",22),e.SDv(1,23),e.qZA())}function L1(n,s){if(1&n&&(e.YNc(0,Bg,1,1,"cd-table-key-value",19),e.YNc(1,ry,2,0,"ng-template",null,20,e.W1O)),2&n){const t=e.MAs(2),o=e.oxw(2);e.Q6J("ngIf",null==o.osd||null==o.osd.details?null:o.osd.details.osd_metadata)("ngIfElse",t)}}function O(n,s){if(1&n&&e._UZ(0,"cd-smart-list",24),2&n){const t=e.oxw(2);e.Q6J("osdId",null==t.osd?null:t.osd.id)}}function $(n,s){if(1&n&&e._UZ(0,"cd-table-performance-counter",26),2&n){const t=e.oxw(3);e.Q6J("serviceId",null==t.osd?null:t.osd.id)}}function pe(n,s){if(1&n&&e.YNc(0,$,1,1,"cd-table-performance-counter",25),2&n){const t=e.oxw(2);e.Q6J("ngIf",null==t.osd?null:t.osd.details)}}function it(n,s){if(1&n&&e._UZ(0,"cd-grafana",29),2&n){const t=e.oxw(3);e.Q6J("grafanaPath","osd-device-details?var-osd=osd."+t.osd.id)("type","metrics")}}function Wt(n,s){1&n&&(e.ynx(0,27),e.TgZ(1,"a",4),e.SDv(2,28),e.qZA(),e.YNc(3,it,1,2,"ng-template",6),e.BQk())}function Cn(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"nav",1,2),e.ynx(3,3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,ny,1,3,"ng-template",6),e.BQk(),e.ynx(7,7),e.TgZ(8,"a",4),e.SDv(9,8),e.qZA(),e.YNc(10,F1,1,1,"ng-template",6),e.BQk(),e.ynx(11,9),e.TgZ(12,"a",4),e.SDv(13,10),e.qZA(),e.YNc(14,L1,3,2,"ng-template",6),e.BQk(),e.ynx(15,11),e.TgZ(16,"a",4),e.SDv(17,12),e.qZA(),e.YNc(18,O,1,1,"ng-template",6),e.BQk(),e.ynx(19,13),e.TgZ(20,"a",4),e.SDv(21,14),e.qZA(),e.YNc(22,pe,1,1,"ng-template",6),e.BQk(),e.YNc(23,Wt,4,0,"ng-container",15),e.qZA(),e._UZ(24,"div",16),e.BQk()),2&n){const t=e.MAs(2),o=e.oxw();e.xp6(23),e.Q6J("ngIf",o.grafanaPermission.read),e.xp6(1),e.Q6J("ngbNavOutlet",t)}}let lr=(()=>{class n{constructor(t,o){this.osdService=t,this.authStorageService=o,this.grafanaPermission=this.authStorageService.getPermissions().grafana}ngOnChanges(){var t,o,l;(null===(t=this.osd)||void 0===t?void 0:t.id)!==(null===(o=this.selection)||void 0===o?void 0:o.id)&&(this.osd=this.selection),Sr().isNumber(null===(l=this.osd)||void 0===l?void 0:l.id)&&this.refresh()}refresh(){this.osdService.getDetails(this.osd.id).subscribe(t=>{this.osd.details=t})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(rc),e.Y36(Vi.j))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let s,t,o,l,_,C,R,N;return s="Devices",t="Attributes (OSD map)",o="Metadata",l="Device health",_="Performance counter",C="Metadata not available",R="Performance Details",N="OSD details",[[4,"ngIf"],["ngbNav","","id","tabset-osd-details","cdStatefulTab","osd-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","devices"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","attributes"],t,["ngbNavItem","metadata"],o,["ngbNavItem","device-health"],l,["ngbNavItem","performance-counter"],_,["ngbNavItem","performance-details",4,"ngIf"],[3,"ngbNavOutlet"],[3,"osdId","hostname","osdList"],[3,"data"],[3,"data","fetchData",4,"ngIf","ngIfElse"],["noMetaData",""],[3,"data","fetchData"],["type","warning"],C,[3,"osdId"],["serviceType","osd",3,"serviceId",4,"ngIf"],["serviceType","osd",3,"serviceId"],["ngbNavItem","performance-details"],R,["title",N,"uid","CrAHE0iZz","grafanaStyle","three",3,"grafanaPath","type"]]},template:function(t,o){1&t&&e.YNc(0,Cn,25,2,"ng-container",0),2&t&&e.Q6J("ngIf",o.selection)},directives:[p.O5,Pr.Pz,Yn.m,Pr.nv,Pr.Vx,Pr.uN,jc,fo.b,yo.G,Tp,Cv.p,ha.F,Pr.tO],styles:[""]}),n})();const Ir=["osdUsageTpl"],Kr=["markOsdConfirmationTpl"],oo=["criticalConfirmationTpl"],ho=["reweightBodyTpl"],So=["safeToDestroyBodyTpl"],bs=["deleteOsdExtraTpl"],la=["flagsTpl"],ba=function(){return{read:!0}};function Rl(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",13),e.NdJ("fetchData",function(){return e.CHM(t),e.oxw().getOsdList()})("setExpandedRow",function(l){return e.CHM(t),e.oxw().setExpandedRow(l)})("updateSelection",function(l){return e.CHM(t),e.oxw().updateSelection(l)}),e.TgZ(1,"div",14),e._UZ(2,"cd-table-actions",15)(3,"cd-table-actions",16),e.qZA(),e._UZ(4,"cd-osd-details",17),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.osds)("columns",t.columns)("hasDetails",!0)("updateSelectionOnRefresh","never"),e.xp6(2),e.Q6J("permission",t.permissions.osd)("selection",t.selection)("tableActions",t.tableActions),e.xp6(1),e.Q6J("permission",e.DdM(11,ba))("selection",t.selection)("tableActions",t.clusterWideActions),e.xp6(1),e.Q6J("selection",t.expandedRow)}}function Na(n,s){1&n&&e._UZ(0,"cd-grafana",19),2&n&&e.Q6J("grafanaPath","osd-overview?")("type","metrics")}function Hl(n,s){1&n&&(e.ynx(0,2),e.TgZ(1,"a",3),e.SDv(2,18),e.qZA(),e.YNc(3,Na,1,2,"ng-template",5),e.BQk())}function ql(n,s){if(1&n&&(e.ynx(0),e.tHW(1,20),e._UZ(2,"strong"),e.ALo(3,"join"),e._UZ(4,"strong"),e.N_p(),e.BQk()),2&n){const t=s.markActionDescription,o=s.osdIds;e.xp6(4),e.pQV(e.lcZ(3,2,o))(t),e.QtT(1)}}function Yf(n,s){if(1&n&&(e.TgZ(0,"li"),e.SDv(1,28),e.ALo(2,"join"),e.qZA()),2&n){const t=e.oxw(2).active,o=e.oxw();e.xp6(2),e.pQV(o.selection.hasSingleSelection)(e.lcZ(2,3,t))(1===t.length),e.QtT(1)}}function cf(n,s){if(1&n&&(e.TgZ(0,"li"),e.SDv(1,29),e.ALo(2,"join"),e.qZA()),2&n){const t=e.oxw(2).missingStats,o=e.oxw();e.xp6(2),e.pQV(o.selection.hasSingleSelection)(e.lcZ(2,2,t)),e.QtT(1)}}function rp(n,s){if(1&n&&(e.TgZ(0,"li"),e.SDv(1,30),e.ALo(2,"join"),e.qZA()),2&n){const t=e.oxw(2).storedPgs,o=e.oxw();e.xp6(2),e.pQV(o.selection.hasSingleSelection)(e.lcZ(2,2,t)),e.QtT(1)}}function Rd(n,s){if(1&n&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&n){const t=e.oxw(2).message;e.xp6(1),e.hij(" ",t," ")}}function Ph(n,s){if(1&n&&(e.TgZ(0,"div",23)(1,"cd-alert-panel",24)(2,"span"),e.SDv(3,25),e.qZA(),e._UZ(4,"br"),e.TgZ(5,"ul",26),e.YNc(6,Yf,3,5,"li",27),e.YNc(7,cf,3,4,"li",27),e.YNc(8,rp,3,4,"li",27),e.YNc(9,Rd,2,1,"li",27),e.qZA()()()),2&n){const t=e.oxw(),o=t.actionDescription,l=t.active,_=t.missingStats,C=t.storedPgs,R=t.message,N=e.oxw();e.xp6(3),e.pQV(N.selection.hasSingleSelection)(o),e.QtT(3),e.xp6(3),e.Q6J("ngIf",l.length>0),e.xp6(1),e.Q6J("ngIf",_.length>0),e.xp6(1),e.Q6J("ngIf",C.length>0),e.xp6(1),e.Q6J("ngIf",R)}}function nh(n,s){if(1&n&&(e.TgZ(0,"div",23)(1,"cd-alert-panel",31)(2,"span"),e.SDv(3,32),e.qZA()()()),2&n){const t=e.oxw(2);e.xp6(3),e.pQV(t.selection.hasSingleSelection),e.QtT(3)}}function ag(n,s){if(1&n&&(e.YNc(0,Ph,10,6,"div",21),e.YNc(1,nh,4,1,"div",21),e.ynx(2),e.tHW(3,22),e._UZ(4,"strong"),e.ALo(5,"join"),e._UZ(6,"strong"),e.N_p(),e.BQk()),2&n){const t=s.safeToPerform,o=s.actionDescription,l=s.osdIds;e.Q6J("ngIf",!t),e.xp6(1),e.Q6J("ngIf",t),e.xp6(5),e.pQV(e.lcZ(5,4,l))(o),e.QtT(3)}}function iy(n,s){if(1&n&&(e.TgZ(0,"span",35),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.Oqu(t)}}function rb(n,s){if(1&n&&(e.TgZ(0,"span",36),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.Oqu(t)}}function oy(n,s){if(1&n&&(e.YNc(0,iy,2,1,"span",33),e.YNc(1,rb,2,1,"span",34)),2&n){const t=s.row;e.Q6J("ngForOf",t.cdClusterFlags),e.xp6(1),e.Q6J("ngForOf",t.cdIndivFlags)}}function ib(n,s){if(1&n&&e._UZ(0,"cd-usage-bar",37),2&n){const t=s.row,o=e.oxw();e.Q6J("title","osd "+t.osd)("total",t.stats.stat_bytes)("used",t.stats.stat_bytes_used)("warningThreshold",o.osdSettings.nearfull_ratio)("errorThreshold",o.osdSettings.full_ratio)}}function ob(n,s){1&n&&(e.ynx(0,38)(1,39),e.TgZ(2,"div",40)(3,"div",41),e._UZ(4,"input",42),e.TgZ(5,"label",43),e.SDv(6,44),e.qZA()()(),e.BQk()()),2&n&&e.Q6J("formGroup",s.form)}let sb=(()=>{class n extends It.o{constructor(t,o,l,_,C,R,N,V,Q,oe){super(),this.authStorageService=t,this.osdService=o,this.dimlessBinaryPipe=l,this.modalService=_,this.urlBuilder=C,this.router=R,this.taskWrapper=N,this.actionLabels=V,this.notificationService=Q,this.orchService=oe,this.icons=wo.P,this.osdSettings=new D_,this.selection=new _n.r,this.osds=[],this.disabledFlags=["sortbitwise","purged_snapdirs","recovery_deletes","pglog_hardlimit"],this.indivFlagNames=["noup","nodown","noin","noout"],this.actionOrchFeatures={create:[P.OSD_CREATE],delete:[P.OSD_DELETE]},this.permissions=this.authStorageService.getPermissions(),this.tableActions=[{name:this.actionLabels.CREATE,permission:"create",icon:wo.P.add,click:()=>this.router.navigate([this.urlBuilder.getCreate()]),disable:le=>this.getDisable("create",le),canBePrimary:le=>!le.hasSelection},{name:this.actionLabels.EDIT,permission:"update",icon:wo.P.edit,click:()=>this.editAction()},{name:this.actionLabels.FLAGS,permission:"update",icon:wo.P.flag,click:()=>this.configureFlagsIndivAction(),disable:()=>!this.hasOsdSelected},{name:this.actionLabels.SCRUB,permission:"update",icon:wo.P.analyse,click:()=>this.scrubAction(!1),disable:()=>!this.hasOsdSelected,canBePrimary:le=>le.hasSelection},{name:this.actionLabels.DEEP_SCRUB,permission:"update",icon:wo.P.deepCheck,click:()=>this.scrubAction(!0),disable:()=>!this.hasOsdSelected},{name:this.actionLabels.REWEIGHT,permission:"update",click:()=>this.reweight(),disable:()=>!this.hasOsdSelected||!this.selection.hasSingleSelection,icon:wo.P.reweight},{name:this.actionLabels.MARK_OUT,permission:"update",click:()=>this.showConfirmationModal("out",this.osdService.markOut),disable:()=>this.isNotSelectedOrInState("out"),icon:wo.P.left},{name:this.actionLabels.MARK_IN,permission:"update",click:()=>this.showConfirmationModal("in",this.osdService.markIn),disable:()=>this.isNotSelectedOrInState("in"),icon:wo.P.right},{name:this.actionLabels.MARK_DOWN,permission:"update",click:()=>this.showConfirmationModal("down",this.osdService.markDown),disable:()=>this.isNotSelectedOrInState("down"),icon:wo.P.down},{name:this.actionLabels.MARK_LOST,permission:"delete",click:()=>this.showCriticalConfirmationModal("Mark","OSD lost","marked lost",le=>this.osdService.safeToDestroy(JSON.stringify(le)),"is_safe_to_destroy",this.osdService.markLost),disable:()=>this.isNotSelectedOrInState("up"),icon:wo.P.flatten},{name:this.actionLabels.PURGE,permission:"delete",click:()=>this.showCriticalConfirmationModal("Purge","OSD","purged",le=>this.osdService.safeToDestroy(JSON.stringify(le)),"is_safe_to_destroy",le=>(this.selection=new _n.r,this.osdService.purge(le))),disable:()=>this.isNotSelectedOrInState("up"),icon:wo.P.erase},{name:this.actionLabels.DESTROY,permission:"delete",click:()=>this.showCriticalConfirmationModal("destroy","OSD","destroyed",le=>this.osdService.safeToDestroy(JSON.stringify(le)),"is_safe_to_destroy",le=>(this.selection=new _n.r,this.osdService.destroy(le))),disable:()=>this.isNotSelectedOrInState("up"),icon:wo.P.destroyCircle},{name:this.actionLabels.DELETE,permission:"delete",click:()=>this.delete(),disable:le=>this.getDisable("delete",le),icon:wo.P.destroy}]}static collectStates(t){const o=[t.in?"in":"out"];return t.up?o.push("up"):t.state.includes("destroyed")?o.push("destroyed"):o.push("down"),o}ngOnInit(){this.clusterWideActions=[{name:"Flags",icon:wo.P.flag,click:()=>this.configureFlagsAction(),permission:"read",visible:()=>this.permissions.osd.read},{name:"Recovery Priority",icon:wo.P.deepCheck,click:()=>this.configureQosParamsAction(),permission:"read",visible:()=>this.permissions.configOpt.read},{name:"PG scrub",icon:wo.P.analyse,click:()=>this.configurePgScrubAction(),permission:"read",visible:()=>this.permissions.configOpt.read}],this.columns=[{prop:"id",name:"ID",flexGrow:1,cellTransformation:Ht.e.executing,customTemplateConfig:{valueClass:"bold"}},{prop:"host.name",name:"Host"},{prop:"collectedStates",name:"Status",flexGrow:1,cellTransformation:Ht.e.badge,customTemplateConfig:{map:{in:{class:"badge-success"},up:{class:"badge-success"},down:{class:"badge-danger"},out:{class:"badge-danger"},destroyed:{class:"badge-danger"}}}},{prop:"tree.device_class",name:"Device class",flexGrow:1.2,cellTransformation:Ht.e.badge,customTemplateConfig:{map:{hdd:{class:"badge-hdd"},ssd:{class:"badge-ssd"}}}},{prop:"stats.numpg",name:"PGs",flexGrow:1},{prop:"stats.stat_bytes",name:"Size",flexGrow:1,pipe:this.dimlessBinaryPipe},{prop:"state",name:"Flags",cellTemplate:this.flagsTpl},{prop:"stats.usage",name:"Usage",cellTemplate:this.osdUsageTpl},{prop:"stats_history.out_bytes",name:"Read bytes",cellTransformation:Ht.e.sparkline},{prop:"stats_history.in_bytes",name:"Write bytes",cellTransformation:Ht.e.sparkline},{prop:"stats.op_r",name:"Read ops",cellTransformation:Ht.e.perSecond},{prop:"stats.op_w",name:"Write ops",cellTransformation:Ht.e.perSecond}],this.orchService.status().subscribe(t=>this.orchStatus=t),this.osdService.getOsdSettings().pipe((0,Bh.q)(1)).subscribe(t=>{this.osdSettings=t})}getDisable(t,o){if("delete"===t){if(!o.hasSelection)return!0;if(Sr().some(this.getSelectedOsds(),_=>{const C=Sr().get(_,"operational_status");return"deleting"===C||"unmanaged"===C}))return!0}return this.orchService.getTableActionDisableDesc(this.orchStatus,this.actionOrchFeatures[t])}getSelectedOsdIds(){const t=this.osds.map(o=>o.id);return this.selection.selected.map(o=>o.id).filter(o=>t.includes(o)).sort()}getSelectedOsds(){return this.osds.filter(t=>!Sr().isUndefined(t)&&this.getSelectedOsdIds().includes(t.id))}get hasOsdSelected(){return this.getSelectedOsdIds().length>0}updateSelection(t){this.selection=t}isNotSelectedOrInState(t){const o=this.getSelectedOsds();if(0===o.length)return!0;switch(t){case"in":return o.some(l=>1===l.in);case"out":return o.some(l=>1!==l.in);case"down":return o.some(l=>1!==l.up);case"up":return o.some(l=>1===l.up)}}getOsdList(){const t=[this.osdService.getList(),this.osdService.getFlags()];(0,Fu.D)(t).subscribe(o=>{this.osds=o[0].map(l=>{l.collectedStates=n.collectStates(l),l.stats_history.out_bytes=l.stats_history.op_out_bytes.map(C=>C[1]),l.stats_history.in_bytes=l.stats_history.op_in_bytes.map(C=>C[1]),l.stats.usage=l.stats.stat_bytes_used/l.stats.stat_bytes,l.cdIsBinary=!0,l.cdIndivFlags=l.state.filter(C=>this.indivFlagNames.includes(C)),l.cdClusterFlags=o[1].filter(C=>!this.disabledFlags.includes(C));const _=Sr().get(l,"operational_status","unmanaged");return"unmanaged"!==_&&"working"!==_&&(l.cdExecuting=_),l})})}editAction(){const t=Sr().filter(this.osds,["id",this.selection.first().id]).pop();this.modalService.show(Ze.X,{titleText:"Edit OSD: " + t.id + "",fields:[{type:"text",name:"deviceClass",value:t.tree.device_class,label:"Device class",required:!0}],submitButtonText:"Edit OSD",onSubmit:o=>{this.osdService.update(t.id,o.deviceClass).subscribe(()=>{this.notificationService.show(Ta.k.success,"Updated OSD '" + t.id + "'"),this.getOsdList()})}})}scrubAction(t){if(!this.hasOsdSelected)return;const o={selected:this.getSelectedOsdIds(),deep:t};this.bsModalRef=this.modalService.show(ty,o)}configureFlagsAction(){this.bsModalRef=this.modalService.show(Hm)}configureFlagsIndivAction(){const t={selected:this.getSelectedOsds()};this.bsModalRef=this.modalService.show(km,t)}showConfirmationModal(t,o){const l=this.getSelectedOsdIds();this.bsModalRef=this.modalService.show(rd.Y,{titleText:"Mark OSD " + t + "",buttonText:"Mark " + t + "",bodyTpl:this.markOsdConfirmationTpl,bodyContext:{markActionDescription:t,osdIds:l},onSubmit:()=>{(0,Fu.D)(this.getSelectedOsdIds().map(_=>o.call(this.osdService,_))).subscribe(()=>this.bsModalRef.close())}})}reweight(){const t=this.osds.filter(o=>o.id===this.selection.first().id).pop();this.bsModalRef=this.modalService.show(ey,{currentWeight:t.weight,osdId:t.id})}delete(){const t=new tc.d({preserve:new En.NI(!1)});this.showCriticalConfirmationModal("delete","OSD","deleted",o=>this.osdService.safeToDelete(JSON.stringify(o)),"is_safe_to_delete",o=>(this.selection=new _n.r,this.taskWrapper.wrapTaskAroundCall({task:new Ql.R("osd/"+Mo.MQ.DELETE,{svc_id:o}),call:this.osdService.delete(o,t.value.preserve,!0)})),!0,t,this.deleteOsdExtraTpl)}showCriticalConfirmationModal(t,o,l,_,C,R,N=!1,V,Q){_(this.getSelectedOsdIds()).subscribe(oe=>{const le=this.modalService.show(Oc.M,{actionDescription:t,itemDescription:o,bodyTemplate:this.criticalConfirmationTpl,bodyContext:{safeToPerform:oe[C],message:oe.message,active:oe.active,missingStats:oe.missing_stats,storedPgs:oe.stored_pgs,actionDescription:l,osdIds:this.getSelectedOsdIds()},childFormGroup:V,childFormGroupTemplate:Q,submitAction:()=>{const _e=(0,Fu.D)(this.getSelectedOsdIds().map(ye=>R.call(this.osdService,ye)));N?_e.subscribe({error:()=>{this.getOsdList(),le.close()},complete:()=>le.close()}):_e.subscribe(()=>{this.getOsdList(),le.close()},()=>le.close())}})})}configureQosParamsAction(){this.bsModalRef=this.modalService.show(tb)}configurePgScrubAction(){this.bsModalRef=this.modalService.show(Hg,void 0,{size:"lg"})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(rc),e.Y36(Rr.$),e.Y36(ou.Z),e.Y36(X.F),e.Y36(Io.F0),e.Y36(Sc.P),e.Y36(Mo.p4),e.Y36(Tl.g),e.Y36(h))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-osd-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(Ir,7),e.Gf(Kr,7),e.Gf(oo,7),e.Gf(ho,5),e.Gf(So,5),e.Gf(bs,5),e.Gf(la,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.osdUsageTpl=l.first),e.iGM(l=e.CRH())&&(o.markOsdConfirmationTpl=l.first),e.iGM(l=e.CRH())&&(o.criticalConfirmationTpl=l.first),e.iGM(l=e.CRH())&&(o.reweightBodyTpl=l.first),e.iGM(l=e.CRH())&&(o.safeToDestroyBodyTpl=l.first),e.iGM(l=e.CRH())&&(o.deleteOsdExtraTpl=l.first),e.iGM(l=e.CRH())&&(o.flagsTpl=l.first)}},features:[e._Bn([{provide:X.F,useValue:new X.F("osd")}]),e.qOj],decls:18,vars:2,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke;return s="OSDs List",t="Overall Performance",o="OSD list",l="" + "[\ufffd#2\ufffd|\ufffd#4\ufffd]" + "OSD(s) " + "\ufffd0\ufffd" + "" + "[\ufffd/#2\ufffd|\ufffd/#4\ufffd]" + " will be marked " + "[\ufffd#2\ufffd|\ufffd#4\ufffd]" + "" + "\ufffd1\ufffd" + "" + "[\ufffd/#2\ufffd|\ufffd/#4\ufffd]" + " if you proceed.",l=e.Zx4(l),_="" + "[\ufffd#4\ufffd|\ufffd#6\ufffd]" + "OSD " + "\ufffd0\ufffd" + "" + "[\ufffd/#4\ufffd|\ufffd/#6\ufffd]" + " will be " + "[\ufffd#4\ufffd|\ufffd#6\ufffd]" + "" + "\ufffd1\ufffd" + "" + "[\ufffd/#4\ufffd|\ufffd/#6\ufffd]" + " if you proceed.",_=e.Zx4(_),C="{VAR_SELECT, select, true {OSD is} other {OSDs are}}",C=e.Zx4(C,{VAR_SELECT:"\ufffd0\ufffd"}),R=" The " + C + " not safe to be " + "\ufffd1\ufffd" + "! ",N="{VAR_SELECT, select, true {} other {{INTERPOLATION} : }}",N=e.Zx4(N,{VAR_SELECT:"\ufffd0\ufffd",INTERPOLATION:"\ufffd1\ufffd"}),V="{VAR_SELECT, select, true {it} other {them}}",V=e.Zx4(V,{VAR_SELECT:"\ufffd2\ufffd"}),Q=" " + N + " Some PGs are currently mapped to " + V + ". ",oe="{VAR_SELECT, select, true {} other {{INTERPOLATION} : }}",oe=e.Zx4(oe,{VAR_SELECT:"\ufffd0\ufffd",INTERPOLATION:"\ufffd1\ufffd"}),le=" " + oe + " There are no reported stats and not all PGs are active and clean. ",_e="{VAR_SELECT, select, true {OSD} other {{INTERPOLATION} : OSDs }}",_e=e.Zx4(_e,{VAR_SELECT:"\ufffd0\ufffd",INTERPOLATION:"\ufffd1\ufffd"}),ye=" " + _e + " still store some PG data and not all PGs are active and clean. ",$e="{VAR_SELECT, select, true {OSD is} other {OSDs are}}",$e=e.Zx4($e,{VAR_SELECT:"\ufffd0\ufffd"}),Ie=" The " + $e + " safe to destroy without reducing data durability. ",ke="Preserve OSD ID(s) for replacement.",[["ngbNav","",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem",""],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","",4,"ngIf"],[3,"ngbNavOutlet"],["markOsdConfirmationTpl",""],["criticalConfirmationTpl",""],["flagsTpl",""],["osdUsageTpl",""],["deleteOsdExtraTpl",""],["selectionType","multiClick",3,"data","columns","hasDetails","updateSelectionOnRefresh","fetchData","setExpandedRow","updateSelection"],[1,"table-actions","btn-toolbar"],["id","osd-actions",1,"btn-group",3,"permission","selection","tableActions"],["dropDownOnly","Cluster-wide configuration","btnColor","light","id","cluster-wide-actions",1,"btn-group",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],t,["title",o,"uid","lo02I1Aiz","grafanaStyle","four",3,"grafanaPath","type"],l,["class","danger mb-3",4,"ngIf"],_,[1,"danger","mb-3"],["type","warning"],R,[1,"mb-0","ps-4"],[4,"ngIf"],Q,le,ye,["type","info"],Ie,["class","badge badge-hdd me-1",4,"ngFor","ngForOf"],["class","badge badge-info me-1",4,"ngFor","ngForOf"],[1,"badge","badge-hdd","me-1"],[1,"badge","badge-info","me-1"],[3,"title","total","used","warningThreshold","errorThreshold"],[3,"formGroup"],["formGroupName","child"],[1,"form-group"],[1,"custom-control","custom-checkbox"],["type","checkbox","name","preserve","id","preserve","formControlName","preserve",1,"custom-control-input"],["for","preserve",1,"custom-control-label"],ke]},template:function(t,o){if(1&t&&(e.TgZ(0,"nav",0,1),e.ynx(2,2),e.TgZ(3,"a",3),e.SDv(4,4),e.qZA(),e.YNc(5,Rl,5,12,"ng-template",5),e.BQk(),e.YNc(6,Hl,4,0,"ng-container",6),e.qZA(),e._UZ(7,"div",7),e.YNc(8,ql,5,4,"ng-template",null,8,e.W1O),e.YNc(10,ag,7,6,"ng-template",null,9,e.W1O),e.YNc(12,oy,2,2,"ng-template",null,10,e.W1O),e.YNc(14,ib,1,5,"ng-template",null,11,e.W1O),e.YNc(16,ob,7,1,"ng-template",null,12,e.W1O)),2&t){const l=e.MAs(1);e.xp6(6),e.Q6J("ngIf",o.permissions.grafana.read),e.xp6(1),e.Q6J("ngbNavOutlet",l)}},directives:[Pr.Pz,Pr.nv,Pr.Vx,Pr.uN,Tr.a,Tu.K,lr,p.O5,ha.F,Pr.tO,yo.G,p.sg,Su.O,Oa.V,En.JL,En.sg,En.x0,ll.P,ge.o,En.Wl,Ll.b,En.JJ,En.u],pipes:[z_.A],styles:[""]}),n})(),mm=(()=>{class n{constructor(t){this.http=t,this.baseURL="api/prometheus",this.settingsKey={alertmanager:"ui-api/prometheus/alertmanager-api-host",prometheus:"ui-api/prometheus/prometheus-api-host"},this.settings={}}getPrometheusData(t){return this.http.get(`${this.baseURL}/data`,{params:t})}ifAlertmanagerConfigured(t,o){this.ifSettingConfigured(this.settingsKey.alertmanager,t,o)}disableAlertmanagerConfig(){this.disableSetting(this.settingsKey.alertmanager)}ifPrometheusConfigured(t,o){this.ifSettingConfigured(this.settingsKey.prometheus,t,o)}disablePrometheusConfig(){this.disableSetting(this.settingsKey.prometheus)}getAlerts(t={}){return this.http.get(this.baseURL,{params:t})}getSilences(t={}){return this.http.get(`${this.baseURL}/silences`,{params:t})}getRules(t="all"){return this.http.get(`${this.baseURL}/rules`).pipe((0,Aa.U)(o=>(["alerting","rewrites"].includes(t)&&o.groups.map(l=>{l.rules=l.rules.filter(_=>_.type===t)}),o)))}setSilence(t){return this.http.post(`${this.baseURL}/silence`,t,{observe:"response"})}expireSilence(t){return this.http.delete(`${this.baseURL}/silence/${t}`,{observe:"response"})}getNotifications(t){return this.http.get(`${this.baseURL}/notifications?from=${t&&t.id?t.id:"last"}`)}ifSettingConfigured(t,o,l){const _=this.settings[t];void 0===_?this.http.get(t).subscribe(C=>{this.settings[t]=this.getSettingsValue(C),this.ifSettingConfigured(t,o,l)},C=>{401!==C.status&&(this.settings[t]="")}):""!==_?o(_):l&&l()}disableSetting(t){this.settings[t]=""}getSettingsValue(t){return t.value||t.instance||""}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),Mv=(()=>{class n extends It.o{constructor(t){super(),this.prometheusService=t,this.isPrometheusConfigured=!1,this.isAlertmanagerConfigured=!1}ngOnInit(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.isAlertmanagerConfigured=!0}),this.prometheusService.ifPrometheusConfigured(()=>{this.isPrometheusConfigured=!0})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(mm))},n.\u0275dir=e.lG2({type:n,features:[e.qOj]}),n})();var k1=i(61355);let $1=(()=>{class n{constructor(t){this.notificationService=t}sendNotifications(t){t.forEach(o=>this.notificationService.show(o))}convertToCustomAlerts(t){return Sr().uniqWith(t.map(o=>({status:Sr().isObject(o.status)?o.status.state:this.getPrometheusNotificationStatus(o),name:o.labels.alertname,url:o.generatorURL,description:o.annotations.description,fingerprint:Sr().isObject(o.status)&&o.fingerprint})),Sr().isEqual)}getPrometheusNotificationStatus(t){const o=t.status;return"firing"===o?"active":o}convertAlertToNotification(t){return new k1.T(this.formatType(t.status),`${t.name} (${t.status})`,this.appendSourceLink(t,t.description),void 0,"Prometheus")}formatType(t){return Ta.k[Sr().findKey({error:["firing","active"],info:["suppressed","unprocessed"],success:["resolved"]},l=>l.includes(t))]}appendSourceLink(t,o){return`${o} <a href="${t.url}" target="_blank"><i class="${wo.P.lineChart}"></i></a>`}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(Tl.g))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),lg=(()=>{class n{constructor(t,o){this.alertFormatter=t,this.prometheusService=o,this.canAlertsBeNotified=!1,this.alerts=[],this.rules=[]}getAlerts(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getAlerts().subscribe(t=>this.handleAlerts(t),t=>{[404,504].includes(t.status)&&this.prometheusService.disableAlertmanagerConfig()})})}getRules(){this.prometheusService.ifPrometheusConfigured(()=>{this.prometheusService.getRules("alerting").subscribe(t=>{this.rules=t.groups.reduce((o,l)=>o.concat(l.rules.map(_=>(_.group=l.name,_))),[])})})}refresh(){this.getAlerts(),this.getRules()}handleAlerts(t){this.canAlertsBeNotified&&this.notifyOnAlertChanges(t,this.alerts),this.activeAlerts=Sr().reduce(this.alerts,(o,l)=>"active"===l.status.state?++o:o,0),this.activeCriticalAlerts=Sr().reduce(this.alerts,(o,l)=>"active"===l.status.state&&"critical"===l.labels.severity?++o:o,0),this.activeWarningAlerts=Sr().reduce(this.alerts,(o,l)=>"active"===l.status.state&&"warning"===l.labels.severity?++o:o,0),this.alerts=t,this.canAlertsBeNotified=!0}notifyOnAlertChanges(t,o){const l=this.getChangedAlerts(this.alertFormatter.convertToCustomAlerts(t),this.alertFormatter.convertToCustomAlerts(o)),C=Sr().filter(l,R=>"suppressed"!==R.status).map(R=>this.alertFormatter.convertAlertToNotification(R));this.alertFormatter.sendNotifications(C)}getChangedAlerts(t,o){return Sr().differenceWith(t,o,Sr().isEqual).concat(this.getVanishedAlerts(t,o))}getVanishedAlerts(t,o){return Sr().differenceWith(o,t,(l,_)=>l.fingerprint===_.fingerprint).map(l=>(l.status="resolved",l))}}return n.\u0275fac=function(t){return new(t||n)(e.LFG($1),e.LFG(mm))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function DC(n,s){if(1&n&&(e.tHW(0,3,1),e._UZ(1,"small",10),e.N_p()),2&n){const t=e.oxw();e.xp6(1),e.pQV(t.prometheusAlertService.activeCriticalAlerts),e.QtT(0)}}function ab(n,s){if(1&n&&(e.tHW(0,3,2),e._UZ(1,"small",11),e.N_p()),2&n){const t=e.oxw();e.xp6(1),e.pQV(t.prometheusAlertService.activeWarningAlerts),e.QtT(0)}}const H1=function(){return{exact:!0}};let Ov=(()=>{class n{constructor(t){this.prometheusAlertService=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(lg))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-prometheus-tabs"]],decls:12,vars:8,consts:function(){let s,t,o;return s="Alerts",t="Silences",o="Active Alerts " + "\ufffd*4:1\ufffd\ufffd#1:1\ufffd" + "" + "\ufffd0:1\ufffd" + "" + "[\ufffd/#1:1\ufffd\ufffd/*4:1\ufffd|\ufffd/#1:2\ufffd\ufffd/*5:2\ufffd]" + "" + "\ufffd*5:2\ufffd\ufffd#1:2\ufffd" + "" + "\ufffd0:2\ufffd" + "" + "[\ufffd/#1:1\ufffd\ufffd/*4:1\ufffd|\ufffd/#1:2\ufffd\ufffd/*5:2\ufffd]" + "",o=e.Zx4(o),[[1,"nav","nav-tabs"],[1,"nav-item"],["routerLink","/monitoring/active-alerts","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],o,["class","badge badge-danger ms-1",4,"ngIf"],["class","badge badge-warning ms-1",4,"ngIf"],["routerLink","/monitoring/alerts","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],s,["routerLink","/monitoring/silences","routerLinkActive","active","ariaCurrentWhenActive","page",1,"nav-link",3,"routerLinkActiveOptions"],t,[1,"badge","badge-danger","ms-1"],[1,"badge","badge-warning","ms-1"]]},template:function(t,o){1&t&&(e.TgZ(0,"ul",0)(1,"li",1)(2,"a",2),e.tHW(3,3),e.YNc(4,DC,2,1,"small",4),e.YNc(5,ab,2,1,"small",5),e.N_p(),e.qZA()(),e.TgZ(6,"li",1)(7,"a",6),e.SDv(8,7),e.qZA()(),e.TgZ(9,"li",1)(10,"a",8),e.SDv(11,9),e.qZA()()()),2&t&&(e.xp6(2),e.Q6J("routerLinkActiveOptions",e.DdM(5,H1)),e.xp6(2),e.Q6J("ngIf",o.prometheusAlertService.activeCriticalAlerts>0),e.xp6(1),e.Q6J("ngIf",o.prometheusAlertService.activeWarningAlerts>0),e.xp6(2),e.Q6J("routerLinkActiveOptions",e.DdM(6,H1)),e.xp6(3),e.Q6J("routerLinkActiveOptions",e.DdM(7,H1)))},directives:[Io.yS,Io.Od,p.O5],styles:[""]}),n})();const B1=["externalLinkTpl"];function ay(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",3),e.tHW(1,4),e._UZ(2,"cd-doc",5),e.N_p(),e.qZA())}function lb(n,s){if(1&n&&e._UZ(0,"cd-table-key-value",9),2&n){const t=e.oxw(2);e.Q6J("renderObjects",!0)("hideEmpty",!0)("appendParentKey",!1)("data",t.expandedRow)("customCss",t.customCss)("autoReload",!1)}}function ub(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",6),e.NdJ("setExpandedRow",function(l){return e.CHM(t),e.oxw().setExpandedRow(l)})("updateSelection",function(l){return e.CHM(t),e.oxw().updateSelection(l)}),e._UZ(1,"cd-table-actions",7),e.YNc(2,lb,1,6,"cd-table-key-value",8),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.prometheusAlertService.alerts)("columns",t.columns)("forceIdentifier",!0)("customCss",t.customCss)("hasDetails",!0),e.xp6(1),e.Q6J("permission",t.permission)("selection",t.selection)("tableActions",t.tableActions),e.xp6(1),e.Q6J("ngIf",t.expandedRow)}}const cb=function(n){return[n]};function db(n,s){if(1&n&&(e.TgZ(0,"a",10),e._UZ(1,"i",11),e._uU(2," Source"),e.qZA()),2&n){const t=s.value,o=e.oxw();e.Q6J("href",t,e.LSH),e.xp6(1),e.Q6J("ngClass",e.VKq(2,cb,o.icons.lineChart))}}let pb=(()=>{class n extends Mv{constructor(t,o,l,_){super(_),this.authStorageService=t,this.prometheusAlertService=o,this.urlBuilder=l,this.selection=new _n.r,this.icons=wo.P,this.permission=this.authStorageService.getPermissions().prometheus,this.tableActions=[{permission:"create",canBePrimary:C=>C.hasSingleSelection,disable:C=>!C.hasSingleSelection||C.first().cdExecuting,icon:wo.P.add,routerLink:()=>"/monitoring"+this.urlBuilder.getCreateFrom(this.selection.first().fingerprint),name:"Create Silence"}]}ngOnInit(){super.ngOnInit(),this.columns=[{name:"Name",prop:"labels.alertname",cellClass:"fw-bold",flexGrow:2},{name:"Summary",prop:"annotations.summary",flexGrow:3},{name:"Severity",prop:"labels.severity",flexGrow:1,cellTransformation:Ht.e.badge,customTemplateConfig:{map:{critical:{class:"badge-danger"},warning:{class:"badge-warning"}}}},{name:"State",prop:"status.state",flexGrow:1,cellTransformation:Ht.e.badge,customTemplateConfig:{map:{active:{class:"badge-info"},unprocessed:{class:"badge-warning"},suppressed:{class:"badge-dark"}}}},{name:"Started",prop:"startsAt",cellTransformation:Ht.e.timeAgo,flexGrow:1},{name:"URL",prop:"generatorURL",flexGrow:1,sortable:!1,cellTemplate:this.externalLinkTpl}]}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(lg),e.Y36(X.F),e.Y36(mm))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-active-alert-list"]],viewQuery:function(t,o){if(1&t&&e.Gf(B1,7),2&t){let l;e.iGM(l=e.CRH())&&(o.externalLinkTpl=l.first)}},features:[e._Bn([{provide:X.F,useValue:new X.F("silences")}]),e.qOj],decls:5,vars:2,consts:function(){let s;return s="To see all active Prometheus alerts, please provide the URL to the API of Prometheus' Alertmanager as described in the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + ".",[["type","info",4,"ngIf"],["identifier","fingerprint","selectionType","single",3,"data","columns","forceIdentifier","customCss","hasDetails","setExpandedRow","updateSelection",4,"ngIf"],["externalLinkTpl",""],["type","info"],s,["section","prometheus"],["identifier","fingerprint","selectionType","single",3,"data","columns","forceIdentifier","customCss","hasDetails","setExpandedRow","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"renderObjects","hideEmpty","appendParentKey","data","customCss","autoReload",4,"ngIf"],["cdTableDetail","",3,"renderObjects","hideEmpty","appendParentKey","data","customCss","autoReload"],["target","_blank",3,"href"],[3,"ngClass"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-prometheus-tabs"),e.YNc(1,ay,3,0,"cd-alert-panel",0),e.YNc(2,ub,3,9,"cd-table",1),e.YNc(3,db,3,4,"ng-template",null,2,e.W1O)),2&t&&(e.xp6(1),e.Q6J("ngIf",!o.isAlertmanagerConfigured),e.xp6(1),e.Q6J("ngIf",o.isAlertmanagerConfigured))},directives:[Ov,p.O5,yo.G,yf.K,Tr.a,Tu.K,fo.b,p.mk],styles:[""]}),n})();var ly=i(94088);function mD(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",2),e.tHW(1,3),e._UZ(2,"cd-doc",4),e.N_p(),e.qZA())}function xC(n,s){if(1&n&&e._UZ(0,"cd-table-key-value",7),2&n){const t=e.oxw(2);e.Q6J("data",t.expandedRow)("renderObjects",!0)("hideKeys",t.hideKeys)}}function RC(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",5),e.NdJ("setExpandedRow",function(l){return e.CHM(t),e.oxw().setExpandedRow(l)})("updateSelection",function(l){return e.CHM(t),e.oxw().updateSelection(l)}),e.YNc(1,xC,1,3,"cd-table-key-value",6),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.prometheusAlertService.rules)("columns",t.columns)("selectionType","single")("hasDetails",!0),e.xp6(1),e.Q6J("ngIf",t.expandedRow)}}let hb=(()=>{class n extends Mv{constructor(t,o){super(o),this.prometheusAlertService=t,this.selection=new _n.r,this.hideKeys=["alerts","type"]}ngOnInit(){super.ngOnInit(),this.columns=[{prop:"name",name:"Name",cellClass:"fw-bold",flexGrow:2},{prop:"labels.severity",name:"Severity",flexGrow:1,cellTransformation:Ht.e.badge,customTemplateConfig:{map:{critical:{class:"badge-danger"},warning:{class:"badge-warning"}}}},{prop:"group",name:"Group",flexGrow:1,cellTransformation:Ht.e.badge},{prop:"duration",name:"Duration",pipe:new ly.u,flexGrow:1},{prop:"query",name:"Query",isHidden:!0,flexGrow:1},{prop:"annotations.summary",name:"Summary",flexGrow:3}]}updateSelection(t){this.selection=t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(lg),e.Y36(mm))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-rules-list"]],features:[e.qOj],decls:3,vars:2,consts:function(){let s;return s="To see all configured Prometheus alerts, please provide the URL to the API of Prometheus as described in the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + ".",[["type","info",4,"ngIf"],[3,"data","columns","selectionType","hasDetails","setExpandedRow","updateSelection",4,"ngIf"],["type","info"],s,["section","prometheus"],[3,"data","columns","selectionType","hasDetails","setExpandedRow","updateSelection"],["cdTableDetail","",3,"data","renderObjects","hideKeys",4,"ngIf"],["cdTableDetail","",3,"data","renderObjects","hideKeys"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-prometheus-tabs"),e.YNc(1,mD,3,0,"cd-alert-panel",0),e.YNc(2,RC,2,5,"cd-table",1)),2&t&&(e.xp6(1),e.Q6J("ngIf",!o.isPrometheusConfigured),e.xp6(1),e.Q6J("ngIf",o.isPrometheusConfigured))},directives:[Ov,p.O5,yo.G,yf.K,Tr.a,fo.b],styles:[""]}),n})();var uy=i(26504);let Yd=(()=>{class n{constructor(){this.valueAttributePath={alertname:"name",instance:"alerts.0.labels.instance",job:"alerts.0.labels.job",severity:"labels.severity"}}singleMatch(t,o){return this.multiMatch([t],o)}multiMatch(t,o){if(!t.some(l=>l.isRegex))return t.forEach(l=>{o=this.getMatchedRules(l,o)}),this.describeMatch(o)}getMatchedRules(t,o){const l=this.getAttributePath(t.name);return o.filter(_=>Sr().get(_,l)===t.value)}describeMatch(t){let o=0;return t.forEach(l=>o+=l.alerts.length),{status:this.getMatchText(t.length,o),cssClass:o?"has-success":"has-warning"}}getAttributePath(t){return this.valueAttributePath[t]}getMatchText(t,o){const l={noRule:"Your matcher seems to match no currently defined rule or active alert.",noAlerts:"no active alerts",alert:"1 active alert",alerts:"" + o + " active alerts",rule:"Matches 1 rule",rules:"Matches " + t + " rules"};return t?"" + (t > 1 ? l.rules : l.rule) + " with " + (o ? o > 1 ? l.alerts : l.alert : l.noAlerts) + ".":l.noRule}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),_b=(()=>{class n{calculateDuration(t,o){const l=+t,_=+o,C=this.getDuration(Math.abs(l-_));return l>_?"-"+C:C}getDuration(t){const o=new Date(t),l=o.getUTCHours(),_=o.getUTCMinutes(),R=(N,V)=>N&&N+V;return[R(Math.floor(t/864e5),"d"),R(l,"h"),R(_,"m")].filter(N=>N).join(" ")}calculateDate(t,o,l){const _=+t;if(Sr().isNaN(_))return;const C=this.getDurationMs(o)*(l?-1:1);return new Date(_+C)}getDurationMs(t){return 6e4*(60*(24*this.getNumbersFromString(t,"d")+this.getNumbersFromString(t,"h"))+this.getNumbersFromString(t,"m"))}getNumbersFromString(t,o){const l=t.match(new RegExp(`[0-9 ]+${o}`,"i"));return l?parseInt(l[0],10):0}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function wC(n,s){if(1&n&&(e.TgZ(0,"option",28),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.hij(" ",t," ")}}function PC(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function mb(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function NC(n,s){if(1&n&&(e.TgZ(0,"div",32)(1,"span"),e._uU(2),e.qZA()()),2&n){const t=e.oxw();e.Gre("cd-col-form-offset ",t.matcherMatch.cssClass,""),e.xp6(1),e.Gre("text-muted ",t.matcherMatch.cssClass,""),e.xp6(1),e.hij(" ",t.matcherMatch.status," ")}}let gb=(()=>{class n{constructor(t,o,l,_){this.formBuilder=t,this.silenceMatcher=o,this.activeModal=l,this.actionLabels=_,this.submitAction=new e.vpe,this.editMode=!1,this.nameAttributes=["alertname","instance","job","severity"],this.possibleValues=[],this.matcherMatch=void 0,this.valueClick=new tp.xQ,this.valueFocus=new tp.xQ,this.search=C=>(0,Dp.T)(C.pipe((0,xp.b)(200),(0,Ud.x)()),this.valueFocus,this.valueClick.pipe((0,Rp.h)(()=>!this.typeahead.isPopupOpen()))).pipe((0,Aa.U)(R=>(""===R?this.possibleValues:this.possibleValues.filter(N=>N.toLowerCase().indexOf(R.toLowerCase())>-1)).slice(0,10))),this.createForm(),this.subscribeToChanges()}createForm(){this.form=this.formBuilder.group({name:[null,[En.kI.required]],value:[{value:"",disabled:!0},[En.kI.required]],isRegex:new En.NI(!1)})}subscribeToChanges(){this.form.get("name").valueChanges.subscribe(t=>{null!==t?(this.setPossibleValues(t),this.form.get("value").enable()):this.form.get("value").disable()}),this.form.get("value").valueChanges.subscribe(t=>{const o=this.form.value;o.value=t,this.matcherMatch=this.silenceMatcher.singleMatch(o,this.rules)})}setPossibleValues(t){this.possibleValues=Sr().sortedUniq(this.rules.map(o=>Sr().get(o,this.silenceMatcher.getAttributePath(t))).filter(o=>o))}getMode(){return this.editMode?this.actionLabels.EDIT:this.actionLabels.ADD}preFillControls(t){this.form.setValue(t)}onSubmit(){this.submitAction.emit(this.form.value),this.activeModal.close()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(jl.O),e.Y36(Yd),e.Y36(Pr.Kz),e.Y36(Mo.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-silence-matcher-modal"]],viewQuery:function(t,o){if(1&t&&e.Gf(Pr.dR,7),2&t){let l;e.iGM(l=e.CRH())&&(o.typeahead=l.first)}},outputs:{submitAction:"submitAction"},decls:32,vars:11,consts:function(){let s,t,o,l,_,C,R,N;return s="{VAR_SELECT, select, true {Edit} other {Add}}",s=e.Zx4(s,{VAR_SELECT:"\ufffd0\ufffd"}),t="" + s + " Matcher",o="Name",l="-- Select an attribute to match against --",_="Value",C="Use regular expression",R="This field is required!",N="This field is required!",[[3,"modalRef"],[1,"modal-title"],t,[1,"modal-content"],["novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],[1,"form-group","row"],["for","name",1,"cd-col-form-label","required"],o,[1,"cd-col-form-input"],["id","name","formControlName","name","name","name",1,"form-select"],[3,"ngValue"],l,[3,"value",4,"ngFor","ngForOf"],["class","help-block",4,"ngIf"],["for","value",1,"cd-col-form-label","required"],_,["id","value","type","text","formControlName","value",1,"form-control",3,"ngbTypeahead","focus","click"],["instance","ngbTypeahead"],["id","match-state",3,"class",4,"ngIf"],[1,"cd-col-form-offset"],[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","isRegex","name","is-regex","id","is-regex",1,"custom-control-input"],["for","is-regex",1,"custom-control-label"],C,[1,"modal-footer"],[3,"form","submitText","submitActionEvent"],[3,"value"],[1,"help-block"],R,N,["id","match-state"]]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0)(1,"span",1),e.SDv(2,2),e.qZA(),e.ynx(3,3),e.TgZ(4,"form",4,5)(6,"div",6)(7,"div",7)(8,"label",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"div",10)(11,"select",11)(12,"option",12),e.SDv(13,13),e.qZA(),e.YNc(14,wC,2,2,"option",14),e.qZA(),e.YNc(15,PC,2,0,"span",15),e.qZA()(),e.TgZ(16,"div",7)(17,"label",16),e.SDv(18,17),e.qZA(),e.TgZ(19,"div",10)(20,"input",18,19),e.NdJ("focus",function(_){return o.valueFocus.next(_.target.value)})("click",function(_){return o.valueClick.next(_.target.value)}),e.qZA(),e.YNc(22,mb,2,0,"span",15),e.qZA(),e.YNc(23,NC,3,7,"div",20),e.qZA(),e.TgZ(24,"div",7)(25,"div",21)(26,"div",22),e._UZ(27,"input",23),e.TgZ(28,"label",24),e.SDv(29,25),e.qZA()()()()(),e.TgZ(30,"div",26)(31,"cd-form-button-panel",27),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.qZA()()(),e.BQk(),e.qZA()),2&t){const l=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(2),e.pQV(o.editMode),e.QtT(2),e.xp6(2),e.Q6J("formGroup",o.form),e.xp6(8),e.Q6J("ngValue",null),e.xp6(2),e.Q6J("ngForOf",o.nameAttributes),e.xp6(1),e.Q6J("ngIf",o.form.showError("name",l,"required")),e.xp6(5),e.Q6J("ngbTypeahead",o.search),e.xp6(2),e.Q6J("ngIf",o.form.showError("value",l,"required")),e.xp6(1),e.Q6J("ngIf",o.form.getValue("value")&&!o.form.getValue("isRegex")&&o.matcherMatch),e.xp6(8),e.Q6J("form",o.form)("submitText",o.getMode())}},directives:[Ye.z,En._Y,En.JL,Oa.V,En.sg,ll.P,ge.o,En.EJ,En.JJ,En.u,En.YN,En.Kr,p.sg,p.O5,En.Fj,Pr.dR,Ll.b,En.Wl,Ml.p],styles:[""]}),n})();var vb=i(52266);function Ug(n,s){if(1&n&&(e.TgZ(0,"i",54),e._uU(1,"~"),e.qZA()),2&n){const t=e.oxw(2).$implicit;e.Q6J("ngbTooltip",t.tooltip)}}function IC(n,s){1&n&&(e.TgZ(0,"i",55),e._uU(1,"="),e.qZA())}function FC(n,s){if(1&n&&(e.TgZ(0,"span",51),e.YNc(1,Ug,2,1,"i",52),e.YNc(2,IC,2,0,"i",53),e.qZA()),2&n){const t=e.oxw().$implicit,o=e.oxw().matcher;e.xp6(1),e.Q6J("ngIf",o[t.attribute]),e.xp6(1),e.Q6J("ngIf",!o[t.attribute])}}function yb(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"input",56),e.BQk()),2&n){const t=e.oxw().$implicit,o=e.oxw(),l=o.index,_=o.matcher;e.xp6(1),e.hYB("id","matcher-",t.attribute,"-",l,""),e.Q6J("value",_[t.attribute])}}function LC(n,s){if(1&n&&(e.ynx(0),e.YNc(1,FC,3,2,"span",50),e.YNc(2,yb,2,3,"ng-container",7),e.BQk()),2&n){const t=s.$implicit;e.xp6(1),e.Q6J("ngIf","isRegex"===t.attribute),e.xp6(1),e.Q6J("ngIf","isRegex"!==t.attribute)}}const U1=function(n){return[n]};function gD(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",46),e.YNc(1,LC,3,2,"ng-container",34),e.TgZ(2,"button",47),e.NdJ("click",function(){const _=e.CHM(t).index;return e.oxw().showMatcherModal(_)}),e._UZ(3,"i",38),e.qZA(),e.TgZ(4,"button",48),e.NdJ("click",function(){const _=e.CHM(t).index;return e.oxw().deleteMatcher(_)}),e._UZ(5,"i",38),e.qZA()(),e._UZ(6,"span",49)}if(2&n){const t=s.index,o=e.oxw();e.xp6(1),e.Q6J("ngForOf",o.matcherConfig),e.xp6(1),e.MGl("id","matcher-edit-",t,""),e.xp6(1),e.Q6J("ngClass",e.VKq(5,U1,o.icons.edit)),e.xp6(1),e.MGl("id","matcher-delete-",t,""),e.xp6(1),e.Q6J("ngClass",e.VKq(7,U1,o.icons.trash))}}function cy(n,s){1&n&&(e.TgZ(0,"cd-helper"),e.SDv(1,57),e.qZA())}function dy(n,s){1&n&&(e.TgZ(0,"span",58),e.SDv(1,59),e.qZA())}function W_(n,s){1&n&&(e.TgZ(0,"span",58),e.SDv(1,60),e.qZA())}function kC(n,s){1&n&&(e.TgZ(0,"span",58),e.SDv(1,61),e.qZA())}function Eb(n,s){1&n&&(e.TgZ(0,"span",58),e.SDv(1,62),e.qZA())}function J_(n,s){1&n&&(e.TgZ(0,"span",58),e.SDv(1,63),e.qZA())}const x_=function(n,s){return{"text-warning":n,"text-danger":s}};function R_(n,s){if(1&n&&(e.TgZ(0,"h5",38)(1,"strong"),e.SDv(2,64),e.qZA()()),2&n){e.oxw();const t=e.MAs(4);e.Q6J("ngClass",e.WLB(1,x_,!t.submitted,t.submitted))}}function bb(n,s){1&n&&e.GkF(0)}const Sb=function(n,s){return{index:n,matcher:s}};function $C(n,s){if(1&n&&(e.TgZ(0,"span"),e.YNc(1,bb,1,0,"ng-container",65),e.qZA()),2&n){const t=s.$implicit,o=s.index;e.oxw();const l=e.MAs(1);e.xp6(1),e.Q6J("ngTemplateOutlet",l)("ngTemplateOutletContext",e.WLB(2,Sb,o,t))}}function HC(n,s){if(1&n&&(e.TgZ(0,"div",66)(1,"span"),e._uU(2),e.qZA()()),2&n){const t=e.oxw();e.Gre("cd-col-form-offset ",t.matcherMatch.cssClass,""),e.xp6(1),e.Gre("text-muted ",t.matcherMatch.cssClass,""),e.xp6(1),e.hij(" ",t.matcherMatch.status," ")}}function BC(n,s){if(1&n&&e._UZ(0,"cd-date-time-picker",67),2&n){const t=e.oxw();e.Q6J("control",t.form.get("startsAt"))("hasSeconds",!1)}}function UC(n,s){if(1&n&&e._UZ(0,"cd-date-time-picker",67),2&n){const t=e.oxw();e.Q6J("control",t.form.get("endsAt"))("hasSeconds",!1)}}const fy=function(n){return{"btn-warning":n}};let Q_=(()=>{class n{constructor(t,o,l,_,C,R,N,V,Q,oe,le){this.router=t,this.authStorageService=o,this.formBuilder=l,this.prometheusService=_,this.notificationService=C,this.route=R,this.timeDiff=N,this.modalService=V,this.silenceMatcher=Q,this.actionLabels=oe,this.succeededLabels=le,this.icons=wo.P,this.matchName="",this.matchValue="",this.recreate=!1,this.edit=!1,this.resource="silence",this.matchers=[],this.matcherMatch=void 0,this.matcherConfig=[{tooltip:"Attribute name",attribute:"name"},{tooltip:"Regular expression",attribute:"isRegex"},{tooltip:"Value",attribute:"value"}],this.datetimeFormat="YYYY-MM-DD HH:mm",this.isNavigate=!0,this.init()}init(){this.chooseMode(),this.authenticate(),this.createForm(),this.setupDates(),this.getData()}chooseMode(){this.edit=this.router.url.startsWith("/monitoring/silences/edit"),this.recreate=this.router.url.startsWith("/monitoring/silences/recreate"),this.action=this.edit?this.actionLabels.EDIT:this.recreate?this.actionLabels.RECREATE:this.actionLabels.CREATE}authenticate(){if(this.permission=this.authStorageService.getPermissions().prometheus,!this.permission.read||!(this.edit?this.permission.update:this.permission.create))throw new uy._2}createForm(){const t=Ae.h.custom("format",o=>!(""===o||ls()(o,this.datetimeFormat).isValid()));this.form=this.formBuilder.group({startsAt:["",[En.kI.required,t]],duration:["2h",[En.kI.min(1)]],endsAt:["",[En.kI.required,t]],createdBy:[this.authStorageService.getUsername(),[En.kI.required]],comment:[null,[En.kI.required]]},{validators:Ae.h.custom("matcherRequired",()=>0===this.matchers.length)})}setupDates(){const t=ls()().format(this.datetimeFormat);this.form.silentSet("startsAt",t),this.updateDate(),this.subscribeDateChanges()}updateDate(t){const o=ls()(this.form.getValue(t?"endsAt":"startsAt"),this.datetimeFormat).toDate(),l=this.timeDiff.calculateDate(o,this.form.getValue("duration"),t);if(l){const _=ls()(l).format(this.datetimeFormat);this.form.silentSet(t?"startsAt":"endsAt",_)}}subscribeDateChanges(){this.form.get("startsAt").valueChanges.subscribe(()=>{this.onDateChange()}),this.form.get("duration").valueChanges.subscribe(()=>{this.updateDate()}),this.form.get("endsAt").valueChanges.subscribe(()=>{this.onDateChange(!0)})}onDateChange(t){const o=ls()(this.form.getValue("startsAt"),this.datetimeFormat),l=ls()(this.form.getValue("endsAt"),this.datetimeFormat);o.isBefore(l)?this.updateDuration():this.updateDate(t)}updateDuration(){const t=ls()(this.form.getValue("startsAt"),this.datetimeFormat).toDate(),o=ls()(this.form.getValue("endsAt"),this.datetimeFormat).toDate();this.form.silentSet("duration",this.timeDiff.calculateDuration(t,o))}getData(){this.getRules(),this.getModeSpecificData()}getRules(){return this.prometheusService.ifPrometheusConfigured(()=>this.prometheusService.getRules().subscribe(t=>{this.rules=t.groups.reduce((o,l)=>Sr().concat(o,l.rules),[])},()=>{this.prometheusService.disablePrometheusConfig(),this.rules=[]}),()=>{this.rules=[],this.notificationService.show(Ta.k.info,"Please add your Prometheus host to the dashboard configuration and refresh the page",void 0,void 0,"Prometheus")}),this.rules}getModeSpecificData(){this.route.params.subscribe(t=>{!t.id||(this.edit||this.recreate?this.prometheusService.getSilences().subscribe(o=>{const l=Sr().find(o,["id",t.id]);Sr().isUndefined(l)||this.fillFormWithSilence(l)}):this.prometheusService.getAlerts().subscribe(o=>{const l=Sr().find(o,["fingerprint",t.id]);Sr().isUndefined(l)||this.fillFormByAlert(l)}))})}fillFormWithSilence(t){this.id=t.id,this.edit&&(["startsAt","endsAt"].forEach(o=>this.form.silentSet(o,ls()(t[o]).format(this.datetimeFormat))),this.updateDuration()),["createdBy","comment"].forEach(o=>this.form.silentSet(o,t[o])),this.matchers=t.matchers,this.validateMatchers()}validateMatchers(){this.rules?(this.matcherMatch=this.silenceMatcher.multiMatch(this.matchers,this.rules),this.form.markAsDirty(),this.form.updateValueAndValidity()):window.setTimeout(()=>this.validateMatchers(),100)}fillFormByAlert(t){this.setMatcher({name:"alertname",value:t.labels.alertname,isRegex:!1})}setMatcher(t,o){Sr().isNumber(o)?this.matchers[o]=t:this.matchers.push(t),this.validateMatchers()}showMatcherModal(t){const l=this.modalService.show(gb).componentInstance;l.rules=this.rules,Sr().isNumber(t)&&(l.editMode=!0,l.preFillControls(this.matchers[t])),l.submitAction.subscribe(_=>{this.setMatcher(_,t)})}deleteMatcher(t){this.matchers.splice(t,1),this.validateMatchers()}submit(t){this.form.invalid||this.prometheusService.setSilence(this.getSubmitData()).subscribe(o=>{t&&(t.silenceId=o.body.silenceId),this.isNavigate&&this.router.navigate(["/monitoring/silences"]),this.notificationService.show(Ta.k.success,this.getNotificationTile(this.matchers),void 0,void 0,"Prometheus"),this.matchers=[]},()=>this.form.setErrors({cdSubmitButton:!0}))}getSubmitData(){const t=this.form.value;return delete t.duration,t.startsAt=ls()(t.startsAt,this.datetimeFormat).toISOString(),t.endsAt=ls()(t.endsAt,this.datetimeFormat).toISOString(),t.matchers=this.matchers,this.edit&&(t.id=this.id),t}getNotificationTile(t){let o;o=this.edit?this.succeededLabels.EDITED:this.recreate?this.succeededLabels.RECREATED:this.succeededLabels.CREATED;let l="";for(const _ of t)l=l.concat(` ${_.name} - ${_.value},`);return`${o} ${this.resource} for ${l.slice(0,-1)}`}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Io.F0),e.Y36(Vi.j),e.Y36(jl.O),e.Y36(mm),e.Y36(Tl.g),e.Y36(Io.gz),e.Y36(_b),e.Y36(ou.Z),e.Y36(Yd),e.Y36(Mo.p4),e.Y36(Mo.aX))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-prometheus-form"]],decls:71,vars:30,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke,we;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Creator",o="Comment",l="Start time",_="If the start time lies in the past the creation time will be used",C="Duration",R="End time",N="Matchers",V="Add matcher",Q="Edit",oe="Delete",le="Editing a silence will expire the old silence and recreate it as a new silence",_e="This field is required!",ye="This field is required!",$e="This field is required!",Ie="This field is required!",ke="This field is required!",we="A silence requires at least one matcher",[["matcherTpl",""],[1,"cd-col-form"],["name","form","novalidate","",1,"form",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[4,"ngIf"],[1,"card-body"],[1,"form-group","row"],["for","created-by",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["formControlName","createdBy","id","created-by","name","created-by","type","text",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","comment",1,"cd-col-form-label","required"],o,["formControlName","comment","id","comment","name","comment","type","text",1,"form-control"],["for","starts-at",1,"cd-col-form-label"],[1,"required"],l,_,["formControlName","startsAt","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["ps","ngbPopover"],["for","duration",1,"cd-col-form-label","required"],C,["formControlName","duration","id","duration","name","duration","type","text",1,"form-control"],["for","ends-at",1,"cd-col-form-label","required"],R,["formControlName","endsAt","triggers","manual",1,"form-control",3,"ngbPopover","click","keypress"],["pe","ngbPopover"],N,[1,"cd-col-form-offset"],[3,"ngClass",4,"ngIf"],[4,"ngFor","ngForOf"],[1,"row"],[1,"col-12"],["type","button","id","add-matcher",1,"btn","btn-light","float-end","my-3",3,"ngClass","click"],[3,"ngClass"],V,["id","match-state",3,"class",4,"ngIf"],[1,"card-footer"],[1,"text-right"],[3,"form","submitText","submitActionEvent"],["popStart",""],["popEnd",""],[1,"input-group","my-2"],["type","button","ngbTooltip",Q,1,"btn","btn-light",3,"id","click"],["type","button","ngbTooltip",oe,1,"btn","btn-light",3,"id","click"],[1,"help-block"],["class","input-group-text",4,"ngIf"],[1,"input-group-text"],[3,"ngbTooltip",4,"ngIf"],["ngbTooltip","Equals",4,"ngIf"],[3,"ngbTooltip"],["ngbTooltip","Equals"],["type","text","disabled","","readonly","",1,"form-control",3,"id","value"],le,[1,"invalid-feedback"],_e,ye,$e,Ie,ke,we,[4,"ngTemplateOutlet","ngTemplateOutletContext"],["id","match-state"],[3,"control","hasSeconds"]]},template:function(t,o){if(1&t){const l=e.EpF();e.YNc(0,gD,7,9,"ng-template",null,0,e.W1O),e.TgZ(2,"div",1)(3,"form",2,3)(5,"div",4)(6,"div",5)(7,"span"),e.SDv(8,6),e.ALo(9,"titlecase"),e.ALo(10,"upperFirst"),e.qZA(),e.YNc(11,cy,2,0,"cd-helper",7),e.qZA(),e.TgZ(12,"div",8)(13,"div",9)(14,"label",10),e.SDv(15,11),e.qZA(),e.TgZ(16,"div",12),e._UZ(17,"input",13),e.YNc(18,dy,2,0,"span",14),e.qZA()(),e.TgZ(19,"div",9)(20,"label",15),e.SDv(21,16),e.qZA(),e.TgZ(22,"div",12)(23,"textarea",17),e._uU(24,"            "),e.qZA(),e.YNc(25,W_,2,0,"span",14),e.qZA()(),e.TgZ(26,"div",9)(27,"label",18)(28,"span",19),e.SDv(29,20),e.qZA(),e.TgZ(30,"cd-helper"),e.SDv(31,21),e.qZA()(),e.TgZ(32,"div",12)(33,"input",22,23),e.NdJ("click",function(){return e.CHM(l),e.MAs(34).open()})("keypress",function(){return e.CHM(l),e.MAs(34).close()}),e.qZA(),e.YNc(35,kC,2,0,"span",14),e.qZA()(),e.TgZ(36,"div",9)(37,"label",24),e.SDv(38,25),e.qZA(),e.TgZ(39,"div",12),e._UZ(40,"input",26),e.YNc(41,Eb,2,0,"span",14),e.qZA()(),e.TgZ(42,"div",9)(43,"label",27),e.SDv(44,28),e.qZA(),e.TgZ(45,"div",12)(46,"input",29,30),e.NdJ("click",function(){return e.CHM(l),e.MAs(47).open()})("keypress",function(){return e.CHM(l),e.MAs(47).close()}),e.qZA(),e.YNc(48,J_,2,0,"span",14),e.qZA()(),e.TgZ(49,"fieldset")(50,"legend",19),e.SDv(51,31),e.qZA(),e.TgZ(52,"div",32),e.YNc(53,R_,3,4,"h5",33),e.YNc(54,$C,2,5,"span",34),e.TgZ(55,"div",35)(56,"div",36)(57,"button",37),e.NdJ("click",function(){return o.showMatcherModal()}),e._UZ(58,"i",38),e.ynx(59),e.SDv(60,39),e.BQk(),e.qZA()()()(),e.YNc(61,HC,3,7,"div",40),e.qZA()(),e.TgZ(62,"div",41)(63,"div",42)(64,"cd-form-button-panel",43),e.NdJ("submitActionEvent",function(){return o.submit()}),e.ALo(65,"titlecase"),e.ALo(66,"upperFirst"),e.qZA()()()()()(),e.YNc(67,BC,1,2,"ng-template",null,44,e.W1O),e.YNc(69,UC,1,2,"ng-template",null,45,e.W1O)}if(2&t){const l=e.MAs(4),_=e.MAs(68),C=e.MAs(70);e.xp6(3),e.Q6J("formGroup",o.form),e.xp6(7),e.pQV(e.lcZ(9,18,o.action))(e.lcZ(10,20,o.resource)),e.QtT(8),e.xp6(1),e.Q6J("ngIf",o.edit),e.xp6(7),e.Q6J("ngIf",o.form.showError("createdBy",l,"required")),e.xp6(7),e.Q6J("ngIf",o.form.showError("comment",l,"required")),e.xp6(8),e.Q6J("ngbPopover",_),e.xp6(2),e.Q6J("ngIf",o.form.showError("startsAt",l,"required")),e.xp6(6),e.Q6J("ngIf",o.form.showError("duration",l,"required")),e.xp6(5),e.Q6J("ngbPopover",C),e.xp6(2),e.Q6J("ngIf",o.form.showError("endsAt",l,"required")),e.xp6(5),e.Q6J("ngIf",0===o.matchers.length),e.xp6(1),e.Q6J("ngForOf",o.matchers),e.xp6(3),e.Q6J("ngClass",e.VKq(26,fy,l.submitted&&0===o.matchers.length)),e.xp6(1),e.Q6J("ngClass",e.VKq(28,U1,o.icons.add)),e.xp6(3),e.Q6J("ngIf",o.matchers.length&&o.matcherMatch),e.xp6(3),e.Q6J("form",o.form)("submitText",e.lcZ(65,22,o.action)+" "+e.lcZ(66,24,o.resource))}},directives:[p.sg,p.O5,Pr._L,ge.o,Ll.b,p.mk,En._Y,En.JL,Oa.V,En.sg,xe.S,ll.P,En.Fj,En.JJ,En.u,Pr.o8,p.tP,Ml.p,vb.J],pipes:[p.rS,Mt.m],styles:["textarea[_ngcontent-%COMP%]{resize:vertical}"]}),n})();var YC=i(84051),Y1=i(70882);function jC(n,s){1&n&&(e.TgZ(0,"cd-alert-panel",2),e.tHW(1,3),e._UZ(2,"cd-doc",4),e.N_p(),e.qZA())}function Tb(n,s){if(1&n&&e._UZ(0,"cd-table-key-value",8),2&n){const t=e.oxw(2);e.Q6J("renderObjects",!0)("hideEmpty",!0)("appendParentKey",!1)("data",t.expandedRow)("customCss",t.customCss)("autoReload",!1)}}function Cb(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-table",5),e.NdJ("setExpandedRow",function(l){return e.CHM(t),e.oxw().setExpandedRow(l)})("fetchData",function(){return e.CHM(t),e.oxw().refresh()})("updateSelection",function(l){return e.CHM(t),e.oxw().updateSelection(l)}),e._UZ(1,"cd-table-actions",6),e.YNc(2,Tb,1,6,"cd-table-key-value",7),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("data",t.silences)("columns",t.columns)("forceIdentifier",!0)("customCss",t.customCss)("sorts",t.sorts)("hasDetails",!0),e.xp6(1),e.Q6J("permission",t.permission)("selection",t.selection)("tableActions",t.tableActions),e.xp6(1),e.Q6J("ngIf",t.expandedRow)}}let GC=(()=>{class n extends Mv{constructor(t,o,l,_,C,R,N,V,Q,oe){super(oe),this.authStorageService=t,this.cdDatePipe=o,this.modalService=l,this.notificationService=_,this.urlBuilder=C,this.actionLabels=R,this.succeededLabels=N,this.silenceFormComponent=V,this.silenceMatcher=Q,this.silences=[],this.selection=new _n.r,this.customCss={"badge badge-danger":"active","badge badge-warning":"pending","badge badge-default":"expired"},this.sorts=[{prop:"endsAt",dir:YC.Sr.desc}],this.permission=this.authStorageService.getPermissions().prometheus;const le=_e=>_e.first()&&_e.first().status&&"expired"===_e.first().status.state;this.tableActions=[{permission:"create",icon:wo.P.add,routerLink:()=>this.urlBuilder.getCreate(),canBePrimary:_e=>!_e.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"create",canBePrimary:_e=>_e.hasSingleSelection&&le(_e),disable:_e=>!_e.hasSingleSelection||_e.first().cdExecuting||_e.first().cdExecuting&&le(_e)||!le(_e),icon:wo.P.copy,routerLink:()=>this.urlBuilder.getRecreate(this.selection.first().id),name:this.actionLabels.RECREATE},{permission:"update",icon:wo.P.edit,canBePrimary:_e=>_e.hasSingleSelection&&!le(_e),disable:_e=>!_e.hasSingleSelection||_e.first().cdExecuting||_e.first().cdExecuting&&!le(_e)||le(_e),routerLink:()=>this.urlBuilder.getEdit(this.selection.first().id),name:this.actionLabels.EDIT},{permission:"delete",icon:wo.P.trash,canBePrimary:_e=>_e.hasSingleSelection&&!le(_e),disable:_e=>!_e.hasSingleSelection||_e.first().cdExecuting||le(_e),click:()=>this.expireSilence(),name:this.actionLabels.EXPIRE}],this.columns=[{name:"ID",prop:"id",flexGrow:3},{name:"Alerts Silenced",prop:"silencedAlerts",flexGrow:3,cellTransformation:Ht.e.badge},{name:"Created by",prop:"createdBy",flexGrow:2},{name:"Started",prop:"startsAt",pipe:this.cdDatePipe},{name:"Updated",prop:"updatedAt",pipe:this.cdDatePipe},{name:"Ends",prop:"endsAt",pipe:this.cdDatePipe},{name:"Status",prop:"status.state",cellTransformation:Ht.e.classAdding}]}refresh(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getSilences().subscribe(t=>{this.silences=t;const o=t.filter(l=>"expired"!==l.status.state);this.getAlerts(o)},()=>{this.prometheusService.disableAlertmanagerConfig()})})}updateSelection(t){this.selection=t}getAlerts(t){const o=this.silenceFormComponent.getRules();t.forEach(l=>{l.matchers.forEach(_=>{this.rules=this.silenceMatcher.getMatchedRules(_,o);const C=[];for(const R of this.rules)C.push(R.name);l.silencedAlerts=C})})}expireSilence(){const t=this.selection.first().id,o="Silence",l="Prometheus";this.modalRef=this.modalService.show(Oc.M,{itemDescription:o,itemNames:[t],actionDescription:this.actionLabels.EXPIRE,submitActionObservable:()=>new Y1.y(_=>{this.prometheusService.expireSilence(t).subscribe(()=>{this.notificationService.show(Ta.k.success,`${this.succeededLabels.EXPIRED} ${o} ${t}`,void 0,void 0,l)},C=>{C.application=l,_.error(C)},()=>{_.complete(),this.refresh()})})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(Pn.N),e.Y36(ou.Z),e.Y36(Tl.g),e.Y36(X.F),e.Y36(Mo.p4),e.Y36(Mo.aX),e.Y36(Q_),e.Y36(Yd),e.Y36(mm))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-silences-list"]],features:[e._Bn([{provide:X.F,useValue:new X.F("monitoring/silences")},Q_]),e.qOj],decls:3,vars:2,consts:function(){let s;return s="To enable Silences, please provide the URL to the API of the Prometheus' Alertmanager as described in the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + ".",[["type","info",4,"ngIf"],["selectionType","single",3,"data","columns","forceIdentifier","customCss","sorts","hasDetails","setExpandedRow","fetchData","updateSelection",4,"ngIf"],["type","info"],s,["section","prometheus"],["selectionType","single",3,"data","columns","forceIdentifier","customCss","sorts","hasDetails","setExpandedRow","fetchData","updateSelection"],[1,"table-actions",3,"permission","selection","tableActions"],["cdTableDetail","",3,"renderObjects","hideEmpty","appendParentKey","data","customCss","autoReload",4,"ngIf"],["cdTableDetail","",3,"renderObjects","hideEmpty","appendParentKey","data","customCss","autoReload"]]},template:function(t,o){1&t&&(e._UZ(0,"cd-prometheus-tabs"),e.YNc(1,jC,3,0,"cd-alert-panel",0),e.YNc(2,Cb,3,10,"cd-table",1)),2&t&&(e.xp6(1),e.Q6J("ngIf",!o.isAlertmanagerConfigured),e.xp6(1),e.Q6J("ngIf",o.isAlertmanagerConfigured))},directives:[Ov,p.O5,yo.G,yf.K,Tr.a,Tu.K,fo.b],styles:[""]}),n})(),Mb=(()=>{class n{constructor(t){this.http=t,this.url="api/telemetry"}getReport(){return this.http.get(`${this.url}/report`)}enable(t=!0){const o={enable:t};return t&&(o.license_name="sharing-1-0"),this.http.put(`${this.url}`,o)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),G1=(()=>{class n{constructor(){this.visible=!1,this.update=new e.vpe}setVisibility(t){this.visible=t,this.update.emit(t)}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function py(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div"),e._uU(1," The plugin is already "),e.TgZ(2,"b"),e._uU(3,"enabled"),e.qZA(),e._uU(4,". Click "),e.TgZ(5,"b"),e._uU(6,"Deactivate"),e.qZA(),e._uU(7," to disable it.\xa0 "),e.TgZ(8,"button",66),e.NdJ("click",function(){return e.CHM(t),e.oxw(3).disableModule("The Telemetry module has been disabled successfully.")}),e.SDv(9,67),e.qZA()()}}function V1(n,s){1&n&&(e.ynx(0),e.TgZ(1,"legend"),e.ynx(2),e.SDv(3,68),e.BQk(),e.TgZ(4,"cd-helper"),e.SDv(5,69),e.qZA()(),e.TgZ(6,"div",15)(7,"label",70),e.SDv(8,71),e.qZA(),e.TgZ(9,"div",24),e._UZ(10,"input",72),e.qZA()(),e.TgZ(11,"div",15)(12,"label",73),e.SDv(13,74),e.qZA(),e.TgZ(14,"div",24),e._UZ(15,"input",75),e.qZA()(),e.TgZ(16,"div",15)(17,"label",76),e.SDv(18,77),e.qZA(),e.TgZ(19,"div",24),e._UZ(20,"input",78),e.qZA()(),e.BQk())}function hy(n,s){1&n&&(e.TgZ(0,"span",79),e.SDv(1,80),e.qZA())}function _y(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div")(1,"form",4,5)(3,"div",6)(4,"div",7),e.SDv(5,8),e.qZA(),e.TgZ(6,"div",9)(7,"p"),e.tHW(8,10),e._UZ(9,"br")(10,"a",11)(11,"br")(12,"br")(13,"b"),e.N_p(),e.qZA(),e.YNc(14,py,10,0,"div",12),e.TgZ(15,"legend"),e.SDv(16,13),e.qZA(),e.TgZ(17,"p"),e.SDv(18,14),e.qZA(),e.TgZ(19,"div",15)(20,"label",16),e.ynx(21),e.SDv(22,17),e.BQk(),e.TgZ(23,"cd-helper"),e.ynx(24),e.SDv(25,18),e.BQk(),e.TgZ(26,"ul")(27,"li"),e.SDv(28,19),e.qZA(),e.TgZ(29,"li"),e.SDv(30,20),e.qZA(),e.TgZ(31,"li"),e.SDv(32,21),e.qZA(),e.TgZ(33,"li"),e.SDv(34,22),e.qZA(),e.TgZ(35,"li"),e.SDv(36,23),e.qZA()()()(),e.TgZ(37,"div",24)(38,"div",25),e._UZ(39,"input",26)(40,"label",27),e.qZA()()(),e.TgZ(41,"div",15)(42,"label",28),e.ynx(43),e.SDv(44,29),e.BQk(),e.TgZ(45,"cd-helper"),e.ynx(46),e.SDv(47,30),e.BQk(),e.TgZ(48,"ul")(49,"li"),e.SDv(50,31),e.qZA(),e.TgZ(51,"li"),e.SDv(52,32),e.qZA(),e.TgZ(53,"li"),e.SDv(54,33),e.qZA(),e.TgZ(55,"li"),e.SDv(56,34),e.qZA()()()(),e.TgZ(57,"div",24)(58,"div",25),e._UZ(59,"input",35)(60,"label",36),e.qZA()()(),e.TgZ(61,"div",15)(62,"label",37),e.ynx(63),e.SDv(64,38),e.BQk(),e._UZ(65,"cd-helper",39),e.qZA(),e.TgZ(66,"div",24)(67,"div",25),e._UZ(68,"input",40)(69,"label",41),e.qZA()()(),e.TgZ(70,"div",15)(71,"label",42),e.ynx(72),e.SDv(73,43),e.BQk(),e.TgZ(74,"cd-helper"),e.ynx(75),e.SDv(76,44),e.BQk(),e.TgZ(77,"ul")(78,"li"),e._uU(79,"Cluster description"),e.qZA(),e.TgZ(80,"li"),e._uU(81,"Contact email address"),e.qZA()()()(),e.TgZ(82,"div",24)(83,"div",25)(84,"input",45),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).toggleIdent()}),e.qZA(),e._UZ(85,"label",46),e.qZA()()(),e.TgZ(86,"div",15)(87,"label",47),e.ynx(88),e.SDv(89,48),e.BQk(),e.TgZ(90,"cd-helper"),e.ynx(91),e.SDv(92,49),e.BQk(),e.qZA()(),e.TgZ(93,"div",24)(94,"div",25),e._UZ(95,"input",50)(96,"label",51),e.qZA()()(),e.YNc(97,V1,21,0,"ng-container",12),e.TgZ(98,"legend"),e.SDv(99,52),e.qZA(),e.TgZ(100,"div",15)(101,"label",53),e.ynx(102),e.SDv(103,54),e.BQk(),e.TgZ(104,"cd-helper"),e.SDv(105,55),e.qZA()(),e.TgZ(106,"div",24),e._UZ(107,"input",56),e.YNc(108,hy,2,0,"span",57),e.qZA()(),e.TgZ(109,"div",15)(110,"label",58),e.ynx(111),e.SDv(112,59),e.BQk(),e.TgZ(113,"cd-helper")(114,"p"),e.SDv(115,60),e.qZA(),e.TgZ(116,"p"),e.SDv(117,61),e.qZA()()(),e.TgZ(118,"div",24),e._UZ(119,"input",62),e.qZA()(),e._UZ(120,"br"),e.TgZ(121,"p"),e.tHW(122,63),e._UZ(123,"b"),e.N_p(),e.qZA()(),e.TgZ(124,"div",64)(125,"div",65)(126,"button",66),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).next()}),e.ynx(127),e._uU(128),e.BQk(),e.qZA()()()()()()}if(2&n){const t=e.MAs(2),o=e.oxw(2);e.xp6(1),e.Q6J("formGroup",o.configForm),e.xp6(4),e.pQV(o.step),e.QtT(5),e.xp6(8),e.pQV(o.sendToUrl)(o.sendToDeviceUrl),e.QtT(8),e.xp6(1),e.Q6J("ngIf",o.moduleEnabled),e.xp6(83),e.Q6J("ngIf",o.showContactInfo),e.xp6(11),e.Q6J("ngIf",o.configForm.showError("interval",t,"min")),e.xp6(20),e.Oqu(o.actionLabels.NEXT)}}function Ob(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div")(1,"form",81,82)(3,"div",6)(4,"div",7),e.SDv(5,83),e.qZA(),e.TgZ(6,"div",9)(7,"div",15)(8,"label",84),e.tHW(9,85),e._UZ(10,"cd-helper",86),e.N_p(),e.qZA(),e.TgZ(11,"div",24),e._UZ(12,"input",87),e.qZA()(),e.TgZ(13,"div",15)(14,"label",88),e.tHW(15,89),e.TgZ(16,"cd-helper",90),e._UZ(17,"em"),e.qZA(),e.N_p(),e.qZA(),e.TgZ(18,"div",24),e._UZ(19,"textarea",91),e.qZA()(),e.TgZ(20,"div",15)(21,"div",92)(22,"div",93),e._UZ(23,"cd-download-button",94)(24,"cd-copy-2-clipboard-button",95),e.qZA()()(),e.TgZ(25,"div",15)(26,"div",92)(27,"div",25),e._UZ(28,"input",96),e.TgZ(29,"label",97),e.tHW(30,98),e._UZ(31,"a",99),e.N_p(),e.qZA()()()()(),e.TgZ(32,"div",64)(33,"div",65)(34,"cd-form-button-panel",100),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw(2).onSubmit()})("backActionEvent",function(){return e.CHM(t),e.oxw(2).back()}),e.qZA()()()()()()}if(2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("formGroup",t.previewForm),e.xp6(4),e.pQV(t.step),e.QtT(5),e.xp6(18),e.Q6J("objectItem",t.report),e.xp6(11),e.Q6J("form",t.previewForm)("submitText",t.actionLabels.UPDATE)("cancelText",t.actionLabels.BACK)}}function Ab(n,s){if(1&n&&(e.TgZ(0,"div",1),e.ynx(1,2),e.YNc(2,_y,129,8,"div",3),e.YNc(3,Ob,35,6,"div",3),e.BQk(),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngSwitch",t.step),e.xp6(1),e.Q6J("ngSwitchCase",1),e.xp6(1),e.Q6J("ngSwitchCase",2)}}let Db=(()=>{class n extends Ul.E{constructor(t,o,l,_,C,R,N){super(),this.actionLabels=t,this.formBuilder=o,this.mgrModuleService=l,this.notificationService=_,this.router=C,this.telemetryService=R,this.telemetryNotificationService=N,this.licenseAgrmt=!1,this.options={},this.newConfig={},this.configResp={},this.requiredFields=["channel_basic","channel_crash","channel_device","channel_ident","channel_perf","interval","proxy","contact","description","organization"],this.contactInfofields=["contact","description","organization"],this.report=void 0,this.reportId=void 0,this.sendToUrl="",this.sendToDeviceUrl="",this.step=1}ngOnInit(){const t=[this.mgrModuleService.getOptions("telemetry"),this.mgrModuleService.getConfig("telemetry")];(0,Fu.D)(t).subscribe(o=>{const l=o[1];this.moduleEnabled=l.enabled,this.sendToUrl=l.url,this.sendToDeviceUrl=l.device_url,this.showContactInfo=l.channel_ident,this.options=Sr().pick(o[0],this.requiredFields),this.configResp=Sr().pick(l,this.requiredFields),this.createConfigForm(),this.configForm.setValue(this.configResp),this.loadingReady()},o=>{this.loadingError()})}createConfigForm(){const t={};Sr().forEach(Object.values(this.options),o=>{t[o.name]=[o.default_value,this.getValidators(o)]}),this.configForm=this.formBuilder.group(t)}replacer(t,o){if(("ranges"===t||"values"===t)&&Array.isArray(o)){const l=[];for(let _=0;_<o.length;_++)l.push(JSON.stringify(o[_]));return l}return o}replacerTest(t){return JSON.stringify(t,this.replacer,2)}formatReport(){let t={};t=JSON.parse(JSON.stringify(this.report));const o=["perf_counters","stats_per_pool","stats_per_pg","io_rate","osd_perf_histograms","mempool","heap_stats","rocksdb_stats"];for(let l=0;l<o.length;l++){const _=o[l];_ in t.report&&delete t.report[_]}return JSON.stringify(t,null,2)}formatReportTest(t){let o={};o=JSON.parse(JSON.stringify(t));const l=["perf_counters","stats_per_pool","stats_per_pg","io_rate","osd_perf_histograms","mempool","heap_stats","rocksdb_stats"];for(let _=0;_<l.length;_++){const C=l[_];C in o&&delete o[C]}return JSON.stringify(o,null,2)}createPreviewForm(){const t={report:this.formatReport(),reportId:this.reportId,licenseAgrmt:[this.licenseAgrmt,En.kI.requiredTrue]};this.previewForm=this.formBuilder.group(t)}getValidators(t){const o=[];switch(t.type){case"int":o.push(En.kI.required);break;case"str":Sr().isNumber(t.min)&&o.push(En.kI.minLength(t.min)),Sr().isNumber(t.max)&&o.push(En.kI.maxLength(t.max))}return o}updateReportFromConfig(t={}){const o=this.report.report.channels_available,l=[];for(const _ of o)t[`channel_${_}`]&&l.push(_);this.report.report.channels=l;for(const _ of this.contactInfofields)this.report.report[_]=t[_]}getReport(){this.loadingStart(),this.telemetryService.getReport().subscribe(t=>{this.report=t,this.reportId=t.report.report_id,this.updateReportFromConfig(this.newConfig),this.createPreviewForm(),this.loadingReady(),this.step++},t=>{this.loadingError()})}toggleIdent(){this.showContactInfo=!this.showContactInfo}buildReport(){this.newConfig={};for(const t of Object.values(this.options)){const o=this.configForm.get(t.name);if(!o.valid)return void this.configForm.setErrors({cdSubmitButton:!0});this.newConfig[t.name]=o.value}if(!this.newConfig.channel_ident)for(const t of this.contactInfofields)this.newConfig[t]="";this.getReport()}disableModule(t=null,o=null){this.telemetryService.enable(!1).subscribe(()=>{this.telemetryNotificationService.setVisibility(!0),t&&this.notificationService.show(Ta.k.success,t),o?o():this.router.navigate([""])})}next(){this.buildReport()}back(){this.step--}getChangedConfig(){const t={};return Sr().forEach(this.requiredFields,o=>{Sr().isEqual(this.configResp[o],this.newConfig[o])||(t[o]=this.newConfig[o])}),t}onSubmit(){const t=this.getChangedConfig(),o=[this.telemetryService.enable(),this.mgrModuleService.updateConfig("telemetry",t)];(0,Fu.D)(o).subscribe(()=>{this.telemetryNotificationService.setVisibility(!1),this.notificationService.show(Ta.k.success,"The Telemetry module has been configured and activated successfully.")},()=>{this.telemetryNotificationService.setVisibility(!1),this.notificationService.show(Ta.k.error,"An Error occurred while updating the Telemetry module configuration.             Please Try again"),this.previewForm.setErrors({cdSubmitButton:!0})},()=>{this.newConfig={},this.router.navigate([""])})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(jl.O),e.Y36(xm.N),e.Y36(Tl.g),e.Y36(Io.F0),e.Y36(Mb),e.Y36(G1))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-telemetry"]],features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke,we,G,Dt,bt,Bt,Jt,Mn,zt,xn,Nn,zr,Hr,Vr,qr,On,Jn,Qn,ur,In,Yr,Qi,Di,ji,Wr,Bn,bn,Xr,Ni;return s="Step " + "\ufffd0\ufffd" + " of 2: Telemetry report configuration",t="The telemetry module sends anonymous data about this Ceph cluster back to the Ceph developers to help understand how Ceph is used and what problems users may be experiencing." + "[\ufffd#9\ufffd\ufffd/#9\ufffd|\ufffd#11\ufffd\ufffd/#11\ufffd|\ufffd#12\ufffd\ufffd/#12\ufffd]" + " This data is visualized on " + "\ufffd#10\ufffd" + "public dashboards" + "\ufffd/#10\ufffd" + " that allow the community to quickly see summary statistics on how many clusters are reporting, their total capacity and OSD count, and version distribution trends." + "[\ufffd#9\ufffd\ufffd/#9\ufffd|\ufffd#11\ufffd\ufffd/#11\ufffd|\ufffd#12\ufffd\ufffd/#12\ufffd]" + "" + "[\ufffd#9\ufffd\ufffd/#9\ufffd|\ufffd#11\ufffd\ufffd/#11\ufffd|\ufffd#12\ufffd\ufffd/#12\ufffd]" + " The data being reported does " + "\ufffd#13\ufffd" + "not" + "\ufffd/#13\ufffd" + " contain any sensitive data like pool names, object names, object contents, hostnames, or device serial numbers. It contains counters and statistics on how the cluster has been deployed, the version of Ceph, the distribution of the hosts and other parameters which help the project to gain a better understanding of the way Ceph is used. The data is sent secured to " + "\ufffd0\ufffd" + " and " + "\ufffd1\ufffd" + " (device report).",t=e.Zx4(t),o="Channels",l="The telemetry report is broken down into several \"channels\", each with a different type of information that can be configured below.",_="Basic",C="Includes basic information about the cluster:",R="Capacity of the cluster",N="Number of monitors, managers, OSDs, MDSs, object gateways, or other daemons",V="Software version currently being used",Q="Number and types of RADOS pools and CephFS file systems",oe="Names of configuration options that have been changed from their default (but not their values)",le="Crash",_e="Includes information about daemon crashes:",ye="Type of daemon",$e="Version of the daemon",Ie="Operating system (OS distribution, kernel version)",ke="Stack trace identifying where in the Ceph code the crash occurred",we="Device",G="Includes information about device metrics like anonymized SMART metrics.",Dt="Ident",bt="Includes user-provided identifying information about the cluster:",Bt="Perf",Jt="Includes various performance metrics of a cluster.",Mn="Advanced Settings",zt="Interval",xn="The module compiles and sends a new report every 24 hours by default. You can adjust this interval by setting a different number of hours.",Nn="Proxy",zr="If the cluster cannot directly connect to the configured telemetry endpoint (default telemetry.ceph.com), you can configure a HTTP/HTTPS proxy server by e.g. adding https://10.0.0.1:8080",Hr="You can also include a user:pass if needed e.g. https://ceph:telemetry@10.0.0.1:8080",Vr="" + "\ufffd#123\ufffd" + "Note:" + "\ufffd/#123\ufffd" + " By clicking 'Next' you will first see a preview of the report content before you can activate the automatic submission of your data.",qr="Deactivate",On="Contact Information",Jn="Submitting any contact information is completely optional and disabled by default.",Qn="Contact",ur="Description",In="My first Ceph cluster",Yr="Organization",Qi="Organization name",Di="The entered value is too low! It must be greater or equal to 8.",ji="Step " + "\ufffd0\ufffd" + " of 2: Telemetry report preview",Wr="A randomized UUID to identify a particular cluster over the course of several telemetry reports.",Bn="Report ID " + "\ufffd#10\ufffd" + "" + "\ufffd/#10\ufffd" + "",bn="The actual telemetry data that will be submitted.",Xr="Report preview " + "\ufffd#16\ufffd" + "" + "\ufffd#17\ufffd" + "Note: Please select 'Download' to view the full report, including metrics from the perf channel." + "\ufffd/#17\ufffd" + "" + "\ufffd/#16\ufffd" + "",Ni="I agree to my telemetry data being submitted under the " + "\ufffd#31\ufffd" + "Community Data License Agreement - Sharing - Version 1.0" + "\ufffd/#31\ufffd" + "",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],[3,"ngSwitch"],[4,"ngSwitchCase"],["name","form","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],t,["href","https://telemetry-public.ceph.com/"],[4,"ngIf"],o,l,[1,"form-group","row"],["for","channel_basic",1,"cd-col-form-label"],_,C,R,N,V,Q,oe,[1,"cd-col-form-input"],[1,"custom-control","custom-checkbox"],["type","checkbox","id","channel_basic","formControlName","channel_basic",1,"custom-control-input"],["for","channel_basic",1,"custom-control-label"],["for","channel_crash",1,"cd-col-form-label"],le,_e,ye,$e,Ie,ke,["type","checkbox","id","channel_crash","formControlName","channel_crash",1,"custom-control-input"],["for","channel_crash",1,"custom-control-label"],["for","channel_device",1,"cd-col-form-label"],we,["html",G],["type","checkbox","id","channel_device","formControlName","channel_device",1,"custom-control-input"],["for","channel_device",1,"custom-control-label"],["for","channel_ident",1,"cd-col-form-label"],Dt,bt,["type","checkbox","id","channel_ident","formControlName","channel_ident",1,"custom-control-input",3,"click"],["for","channel_ident",1,"custom-control-label"],["for","channel_perf",1,"cd-col-form-label"],Bt,Jt,["type","checkbox","id","channel_perf","formControlName","channel_perf",1,"custom-control-input"],["for","channel_perf",1,"custom-control-label"],Mn,["for","interval",1,"cd-col-form-label"],zt,xn,["id","interval","type","number","formControlName","interval","min","8",1,"form-control"],["class","invalid-feedback",4,"ngIf"],["for","proxy",1,"cd-col-form-label"],Nn,zr,Hr,["id","proxy","type","text","formControlName","proxy","placeholder","https://10.0.0.1:8080",1,"form-control"],Vr,[1,"card-footer"],[1,"button-group","text-right"],["type","button",1,"btn","btn-light",3,"click"],qr,On,Jn,["for","contact",1,"cd-col-form-label"],Qn,["id","contact","type","text","formControlName","contact","placeholder","Example User <user@example.com>",1,"form-control"],["for","description",1,"cd-col-form-label"],ur,["id","description","type","text","formControlName","description","placeholder",In,1,"form-control"],["for","organization",1,"cd-col-form-label"],Yr,["id","organization","type","text","formControlName","organization","placeholder",Qi,1,"form-control"],[1,"invalid-feedback"],Di,["name","previewForm","novalidate","",3,"formGroup"],["frm","ngForm"],ji,["for","reportId",1,"cd-col-form-label"],Bn,["html",Wr],["type","text","id","reportId","formControlName","reportId","readonly","",1,"form-control"],["for","report",1,"cd-col-form-label"],Xr,["html",bn],["id","report","formControlName","report","rows","15","readonly","",1,"form-control"],[1,"cd-col-form-offset"],["role","group",1,"btn-group"],["fileName","telemetry_report",3,"objectItem"],["source","report"],["type","checkbox","id","licenseAgrmt","name","licenseAgrmt","formControlName","licenseAgrmt",1,"custom-control-input"],["for","licenseAgrmt",1,"custom-control-label"],Ni,["href","https://cdla.io/sharing-1-0/"],[3,"form","submitText","cancelText","submitActionEvent","backActionEvent"]]},template:function(t,o){1&t&&e.YNc(0,Ab,4,3,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},directives:[cu.y,p.RF,p.n9,En._Y,En.JL,Oa.V,En.sg,p.O5,ge.o,ll.P,xe.S,En.Wl,Ll.b,En.JJ,En.u,En.Fj,En.wV,En.qQ,t1,Ad.s,Ml.p],styles:[""]}),n})();var Yg=i(89154),my=i(33637),xb=i(26561);function wb(n){const{subscriber:s,counter:t,period:o}=n;s.next(t),this.schedule({subscriber:s,counter:t+1,period:o},o)}let gy=(()=>{class n{constructor(t){this.ngZone=t,this.intervalDataSource=new Tc.X(null),this.intervalData$=this.intervalDataSource.asObservable();const o=parseInt(sessionStorage.getItem("dashboard_interval"),10)||5e3;this.setRefreshInterval(o)}setRefreshInterval(t){this.intervalTime=t,sessionStorage.setItem("dashboard_interval",t.toString()),this.intervalSubscription&&this.intervalSubscription.unsubscribe(),this.ngZone.runOutsideAngular(()=>{this.intervalSubscription=function Rb(n=0,s=my.P){return(!(0,xb.k)(n)||n<0)&&(n=0),(!s||"function"!=typeof s.schedule)&&(s=my.P),new Y1.y(t=>(t.add(s.schedule(wb,n,{subscriber:t,counter:0,period:n})),t))}(this.intervalTime).subscribe(()=>this.ngZone.run(()=>{this.intervalDataSource.next(this.intervalTime)}))})}getRefreshInterval(){return this.intervalTime}ngOnDestroy(){this.intervalSubscription&&this.intervalSubscription.unsubscribe()}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(e.R0b))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function Pb(n,s){if(1&n&&(e.TgZ(0,"option",7),e._uU(1),e.qZA()),2&n){const t=s.$implicit,o=e.oxw();e.Q6J("value",o.intervalList[t]),e.xp6(1),e.Oqu(t)}}let VC=(()=>{class n{constructor(t){this.refreshIntervalService=t,this.intervalList={"5 s":5e3,"10 s":1e4,"15 s":15e3,"30 s":3e4,"1 min":6e4,"3 min":18e4,"5 min":3e5},this.intervalKeys=Object.keys(this.intervalList)}ngOnInit(){this.selectedInterval=this.refreshIntervalService.getRefreshInterval()||5e3}changeRefreshInterval(t){this.refreshIntervalService.setRefreshInterval(t)}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(gy))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-refresh-selector"]],decls:8,vars:2,consts:function(){let s;return s="Refresh",[[1,"container-fluid"],[1,"row"],[1,"col-sm-1","d-flex","float-end"],["for","refreshInterval",1,"col-form-label","my-0","mx-2","float-end"],s,["id","refreshInterval","name","refreshInterval",1,"form-select","float-end",3,"ngModel","change","ngModelChange"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"form")(3,"div",2)(4,"label",3),e.SDv(5,4),e.qZA(),e.TgZ(6,"select",5),e.NdJ("change",function(_){return o.changeRefreshInterval(_.target.value)})("ngModelChange",function(_){return o.selectedInterval=_}),e.YNc(7,Pb,2,2,"option",6),e.qZA()()()()()),2&t&&(e.xp6(6),e.Q6J("ngModel",o.selectedInterval),e.xp6(1),e.Q6J("ngForOf",o.intervalKeys))},directives:[En._Y,En.JL,En.F,ge.o,En.EJ,En.JJ,En.On,p.sg,En.YN,En.Kr],styles:[""]}),n})();var Nb=i(20687);let Ib=(()=>{class n{constructor(t){this.http=t}getFullHealth(){return this.http.get("api/health/full")}getMinimalHealth(){return this.http.get("api/health/minimal")}getClusterCapacity(){return this.http.get("api/health/get_cluster_capacity")}getClusterFsid(){return this.http.get("api/health/get_cluster_fsid")}getOrchestratorName(){return this.http.get("api/health/get_orchestrator_name")}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var Bm=i(99475);const ZC=["*"];let zC=(()=>{class n{constructor(){this.icons=wo.P}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-info-group"]],inputs:{groupTitle:"groupTitle"},ngContentSelectors:ZC,decls:12,vars:7,consts:function(){let s,t;return s="here",t="For an overview of " + "\ufffd0\ufffd" + " widgets click " + "\ufffd#8\ufffd" + "" + "\ufffd/#8\ufffd" + "",[[1,"row"],[1,"info-group-title"],["iconClass","fa fa-info-circle fa-2xs"],[1,"text-center"],t,["docText",s,3,"section"]]},template:function(t,o){1&t&&(e.F$t(),e.TgZ(0,"div",0)(1,"div",1)(2,"span"),e._uU(3),e.qZA(),e.TgZ(4,"cd-helper",2)(5,"div",3),e.tHW(6,4),e.ALo(7,"lowercase"),e._UZ(8,"cd-doc",5),e.ALo(9,"lowercase"),e.N_p(),e.qZA()()()(),e.TgZ(10,"div",0),e.Hsn(11),e.qZA()),2&t&&(e.xp6(3),e.Oqu(o.groupTitle),e.xp6(5),e.MGl("section","dashboard-landing-page-",e.lcZ(9,5,o.groupTitle),""),e.xp6(1),e.pQV(e.lcZ(7,3,o.groupTitle)),e.QtT(6))},directives:[xe.S,yf.K],pipes:[p.i8],styles:[".info-group-title[_ngcontent-%COMP%]{font-size:1.75rem;margin:0 0 .5vw}.popover-icon[_ngcontent-%COMP%]{color:#25828e}.popover-icon[_ngcontent-%COMP%]:focus{box-shadow:none}"]}),n})();function WC(n,s){if(1&n&&(e.TgZ(0,"a",6),e._uU(1),e.qZA()),2&n){const t=e.oxw();e.Q6J("routerLink",t.link),e.xp6(1),e.Oqu(t.cardTitle)}}function JC(n,s){if(1&n&&e._uU(0),2&n){const t=e.oxw();e.hij(" ",t.cardTitle," ")}}const QC=["*"];let XC=(()=>{class n{constructor(){this.cardClass=""}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-info-card"]],inputs:{cardTitle:"cardTitle",link:"link",cardClass:"cardClass",contentClass:"contentClass"},ngContentSelectors:QC,decls:8,vars:4,consts:[[1,"card","shadow-sm",3,"ngClass"],[1,"card-body","d-flex","align-items-center","justify-content-center"],[1,"card-title","m-4"],[3,"routerLink",4,"ngIf","ngIfElse"],["noLinkTitle",""],[1,"card-text","text-center",3,"ngClass"],[3,"routerLink"]],template:function(t,o){if(1&t&&(e.F$t(),e.TgZ(0,"div",0)(1,"div",1)(2,"h4",2),e.YNc(3,WC,2,2,"a",3),e.YNc(4,JC,1,1,"ng-template",null,4,e.W1O),e.qZA(),e.TgZ(6,"div",5),e.Hsn(7),e.qZA()()()),2&t){const l=e.MAs(5);e.Q6J("ngClass",o.cardClass),e.xp6(3),e.Q6J("ngIf",o.link)("ngIfElse",l),e.xp6(3),e.Q6J("ngClass",o.contentClass)}},directives:[p.mk,p.O5,Io.yS],styles:[".card[_ngcontent-%COMP%]{font-size:12px;border:.5px solid #dee2e6;border-radius:3px;height:100%}@media screen and (min-width: 320px){.card[_ngcontent-%COMP%]{font-size:calc(12px + 9 * ((100vw - 320px) / 1728))}}@media screen and (min-width: 2048px){.card[_ngcontent-%COMP%]{font-size:21px}}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]{padding-top:40px!important}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]   .card-title[_ngcontent-%COMP%]{left:-.6rem;position:absolute;top:-.3rem}.card[_ngcontent-%COMP%]   .card-body[_ngcontent-%COMP%]   .card-title[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]{color:#25828e}.no-center[_ngcontent-%COMP%]{left:unset;position:unset;top:unset;transform:unset}.content-highlight[_ngcontent-%COMP%]{font-weight:700}"]}),n})();var Fb=i(6823);const KC=["chartCanvas"],qC=["chartTooltip"];let e2=(()=>{class n{constructor(t,o,l){this.dimlessBinary=t,this.dimless=o,this.cssHelper=l,this.config={},this.isBytesData=!1,this.showLabelAsTooltip=!1,this.prepareFn=new e.vpe,this.chartConfig={chartType:"doughnut",dataset:[{label:null,borderWidth:0}],colors:[{backgroundColor:[this.cssHelper.propertyValue("chart-color-green"),this.cssHelper.propertyValue("chart-color-yellow"),this.cssHelper.propertyValue("chart-color-orange"),this.cssHelper.propertyValue("chart-color-red"),this.cssHelper.propertyValue("chart-color-blue")]}],options:{cutoutPercentage:90,events:["click","mouseout","touchstart"],legend:{display:!0,position:"right",labels:{boxWidth:10,usePointStyle:!1}},plugins:{center_text:!0},tooltips:{enabled:!0,displayColors:!1,backgroundColor:this.cssHelper.propertyValue("chart-color-tooltip-background"),cornerRadius:0,bodyFontSize:14,bodyFontStyle:"600",position:"nearest",xPadding:12,yPadding:12,callbacks:{label:(_,C)=>{let R=C.labels[_.index];return R.includes("%")||(R=`${R} (${C.datasets[_.datasetIndex].data[_.index]}%)`),R}}},title:{display:!1}}},this.doughnutChartPlugins=[{id:"center_text",beforeDraw(_){const C=new Bm.P,R="Helvetica Neue, Helvetica, Arial, sans-serif";Fb.defaults.global.defaultFontFamily=R;const N=_.ctx;if(!_.options.plugins.center_text||!_.data.datasets[0].label)return;N.save();const V=_.data.datasets[0].label.split("\n"),Q=(_.chartArea.left+_.chartArea.right)/2,oe=(_.chartArea.top+_.chartArea.bottom)/2;N.textAlign="center",N.textBaseline="middle",N.font=`24px ${R}`,N.fillStyle=C.propertyValue("chart-color-center-text"),N.fillText(V[0],Q,oe-10),V.length>1&&(N.font=`14px ${R}`,N.fillStyle=C.propertyValue("chart-color-center-text-description"),N.fillText(V[1],Q,oe+10)),N.restore()}}]}ngOnInit(){new _l.h(this.chartCanvasRef,this.chartTooltipRef,(_,C)=>C+_.caretX+"px",(_,C)=>C+_.caretY-_.height-10+"px").getBody=_=>this.getChartTooltipBody(_),Sr().merge(this.chartConfig,this.config),this.prepareFn.emit([this.chartConfig,this.data])}ngOnChanges(){this.prepareFn.emit([this.chartConfig,this.data]),this.setChartSliceBorderWidth()}getChartTooltipBody(t){const o=t[0].split(": ");return this.showLabelAsTooltip?o[0]:(o[1]=this.isBytesData?this.dimlessBinary.transform(o[1]):this.dimless.transform(o[1]),o.join(": "))}setChartSliceBorderWidth(){let t=0;Sr().forEach(this.chartConfig.dataset[0].data,function(o){o>0&&(t+=1)}),this.chartConfig.dataset[0].borderWidth=t>1?1:0}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Rr.$),e.Y36(br.n),e.Y36(Bm.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-health-pie"]],viewQuery:function(t,o){if(1&t&&(e.Gf(KC,7),e.Gf(qC,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.chartCanvasRef=l.first),e.iGM(l=e.CRH())&&(o.chartTooltipRef=l.first)}},inputs:{data:"data",config:"config",isBytesData:"isBytesData",tooltipFn:"tooltipFn",showLabelAsTooltip:"showLabelAsTooltip"},outputs:{prepareFn:"prepareFn"},features:[e.TTD],decls:5,vars:6,consts:[[1,"chart-container"],["baseChart","",1,"chart-canvas",3,"datasets","chartType","options","labels","colors","plugins"],["chartCanvas",""],[1,"chartjs-tooltip"],["chartTooltip",""]],template:function(t,o){1&t&&(e.TgZ(0,"div",0),e._UZ(1,"canvas",1,2)(3,"div",3,4),e.qZA()),2&t&&(e.xp6(1),e.Q6J("datasets",o.chartConfig.dataset)("chartType",o.chartConfig.chartType)("options",o.chartConfig.options)("labels",o.chartConfig.labels)("colors",o.chartConfig.colors)("plugins",o.doughnutChartPlugins))},directives:[Us.jh],styles:['.chart-container[_ngcontent-%COMP%]{cursor:pointer;margin:auto;overflow:visible;position:absolute}canvas[_ngcontent-%COMP%]{user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important;opacity:0;pointer-events:none;position:absolute;transform:translate(-50%);transition:all .1s ease}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]:after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]:after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]:after{border-color:#000 transparent transparent transparent;border-style:solid;border-width:5px;content:" ";left:50%;margin-left:-5px;position:absolute;top:100%}  .chartjs-tooltip-key{display:inline-block;height:10px;margin-right:10px;width:10px}.chart-container[_ngcontent-%COMP%]{height:100%;margin-left:auto;margin-right:auto;position:unset;width:100%}.chart-canvas[_ngcontent-%COMP%]{height:100%;margin-left:auto;margin-right:auto;max-height:100%;max-width:100%;position:unset;width:100%}']}),n})();var Um=(()=>{return(n=Um||(Um={})).HEALTH_ERR="health-color-error",n.HEALTH_WARN="health-color-warning",n.HEALTH_OK="health-color-healthy",Um;var n})();let Z1=(()=>{class n{constructor(t){this.cssHelper=t}transform(t){return Object.keys(Um).includes(t)?{color:this.cssHelper.propertyValue(Um[t])}:null}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Bm.P,16))},n.\u0275pipe=e.Yjl({name:"healthColor",type:n,pure:!0}),n})();var jg=(()=>{return(n=jg||(jg={})).HEALTH_ERR="error",n.HEALTH_WARN="warning",n.HEALTH_OK="ok",jg;var n})();let Lb=(()=>{class n{transform(t){return Object.keys(jg).includes(t)?jg[t]:null}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"healthLabel",type:n,pure:!0}),n})(),kb=(()=>{class n{transform(t){return t?"" + t.monmap.mons.length.toString() + " (quorum " + t.quorum.join(", ") + ")":""}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"monSummary",type:n,pure:!0}),n})(),$b=(()=>{class n{transform(t){if(!t)return"";let o=0,l=0,_=0,C=0;Sr().each(t.osds,Q=>{Q.in&&o++,Q.up&&l++,Q.state.includes("nearfull")&&_++,Q.state.includes("full")&&C++});const R=[{content:`${t.osds.length} ${"total"}`,class:""}];R.push({content:"",class:"card-text-line-break"}),R.push({content:`${l} ${"up"}, ${o} ${"in"}`,class:""});const N=t.osds.length-l,V=t.osds.length-o;if(N>0||V>0){R.push({content:"",class:"card-text-line-break"});const Q=N>0?`${N} ${"down"}`:"",le=V>0?`${V} ${"out"}`:"";R.push({content:`${Q}${N>0&&V>0?", ":""}${le}`,class:"card-text-error"})}return _>0&&R.push({content:"",class:"card-text-line-break"},{content:`${_} ${"near full"}`,class:"card-text-error"},{content:"",class:"card-text-line-break"}),C>0&&R.push({content:`${C} ${"full"}`,class:"card-text-error"}),R}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"osdSummary",type:n,pure:!0}),n})(),Hb=(()=>{class n{transform(t){if(!t)return"";let o="n/a";const l=Sr().isUndefined(t.active_name)?"":`${"active daemon"}: ${t.active_name}`;l.length>0&&(o="1");const _=t.standbys.map(V=>V.name).join(", "),C=_?`${"standby daemons"}: ${_}`:"",R=t.standbys.length,N=[{content:`${o} ${"active"}`,class:"popover-info",titleText:l}];return N.push({content:"",class:"card-text-line-break",titleText:""}),N.push({content:`${R} ${"standby"}`,class:"popover-info",titleText:C}),N}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"mgrSummary",type:n,pure:!0}),n})(),Bb=(()=>{class n{transform(t){if(!t)return"";let o="",l="",_=0,C=0,R=0;Sr().each(t.standbys,()=>{_+=1}),t.standbys&&!t.filesystems?(o=`${_} ${"up"}`,l="no filesystems"):0===t.filesystems.length?o="no filesystems":(Sr().each(t.filesystems,$e=>{Sr().each($e.mdsmap.info,Ie=>{"up:standby-replay"===Ie.state?R+=1:C+=1})}),o=`${C} ${"active"}`,l=`${_+R} ${"standby"}`);const N=t.standbys.map($e=>$e.name).join(", "),V=N?`${"standby daemons"}: ${N}`:"",Q=t.filesystems?t.filesystems.length:0,le=Object.values(Q>0?t.filesystems[0].mdsmap.info:{}).map($e=>$e.name).join(", ");let _e=le?`${"active daemon"}: ${le}`:"";!C&&Q>0&&(_e=`${R} ${"standbyReplay"}`);const ye=[{content:o,class:"popover-info",titleText:_e}];return l&&(ye.push({content:"",class:"card-text-line-break",titleText:""}),ye.push({content:l,class:"popover-info",titleText:V})),ye}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275pipe=e.Yjl({name:"mdsSummary",type:n,pure:!0}),n})();function Ub(n,s){1&n&&e.GkF(0)}function vy(n,s){if(1&n&&(e.TgZ(0,"li")(1,"span",22),e.ALo(2,"healthColor"),e._uU(3),e.qZA(),e._uU(4),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.ekj("health-warn-description","HEALTH_WARN"===t.severity),e.Q6J("ngStyle",e.lcZ(2,5,t.severity)),e.xp6(2),e.hij(" ",t.type,""),e.xp6(1),e.hij(": ",t.summary.message," ")}}function yy(n,s){if(1&n&&(e.YNc(0,Ub,1,0,"ng-container",20),e.TgZ(1,"ul"),e.YNc(2,vy,5,7,"li",21),e.qZA()),2&n){e.oxw(4);const t=e.MAs(5),o=e.oxw();e.Q6J("ngTemplateOutlet",t),e.xp6(2),e.Q6J("ngForOf",o.healthData.health.checks)}}function ug(n,s){1&n&&e._UZ(0,"i",23)}function t2(n,s){if(1&n&&(e.ynx(0),e.YNc(1,yy,3,2,"ng-template",null,17,e.W1O),e.TgZ(3,"div",18),e.ALo(4,"healthColor"),e._uU(5),e.ALo(6,"uppercase"),e.ALo(7,"healthLabel"),e.YNc(8,ug,1,0,"i",19),e.qZA(),e.BQk()),2&n){const t=e.MAs(2),o=e.oxw(4);e.xp6(3),e.Q6J("ngStyle",e.lcZ(4,4,o.healthData.health.status))("ngbPopover",t),e.xp6(2),e.hij(" ",e.lcZ(6,6,e.lcZ(7,8,o.healthData.health.status))," "),e.xp6(3),e.Q6J("ngIf","HEALTH_OK"!==(null==o.healthData.health?null:o.healthData.health.status))}}function n2(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"div",22),e.ALo(2,"healthColor"),e._uU(3),e.ALo(4,"uppercase"),e.ALo(5,"healthLabel"),e.qZA(),e.BQk()),2&n){const t=e.oxw(4);e.xp6(1),e.Q6J("ngStyle",e.lcZ(2,2,t.healthData.health.status)),e.xp6(2),e.hij(" ",e.lcZ(4,4,e.lcZ(5,6,t.healthData.health.status))," ")}}function Gg(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",15),e.YNc(1,t2,9,10,"ng-container",16),e.YNc(2,n2,6,8,"ng-container",16),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngIf",(null==t.healthData.health||null==t.healthData.health.checks?null:t.healthData.health.checks.length)>0),e.xp6(1),e.Q6J("ngIf",!(null!=t.healthData.health&&null!=t.healthData.health.checks&&t.healthData.health.checks.length))}}function vD(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",24),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.healthData.hosts," total ")}}function Ey(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",25),e._uU(1),e.ALo(2,"monSummary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.healthData.mon_status)," ")}}function yD(n,s){if(1&n&&(e.TgZ(0,"span",28),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("ngClass",t.class),e.xp6(1),e.hij(" ",t.content," ")}}function Yb(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",26),e.YNc(1,yD,2,2,"span",27),e.qZA()),2&n){const t=s.ngIf;e.xp6(1),e.Q6J("ngForOf",t)}}function jb(n,s){if(1&n&&(e.TgZ(0,"span",31),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("ngClass",t.class)("title",null!=t.titleText?t.titleText:""),e.xp6(1),e.hij(" ",t.content," ")}}function ED(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",29),e.YNc(1,jb,2,3,"span",30),e.ALo(2,"mgrSummary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("ngForOf",e.lcZ(2,1,t.healthData.mgr_map))}}function za(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",32),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.healthData.rgw," total ")}}function r2(n,s){if(1&n&&(e.TgZ(0,"span",31),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("ngClass",t.class)("title",null!==t.titleText?t.titleText:""),e.xp6(1),e.hij(" ",t.content," ")}}function o2(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",33),e.YNc(1,r2,2,3,"span",30),e.qZA()),2&n){const t=s.ngIf;e.Q6J("contentClass",(t.length>1?"text-area-size-2":"")+" content-highlight"),e.xp6(1),e.Q6J("ngForOf",t)}}const s2=function(n){return{"card-text-error":n}};function z1(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",34),e._uU(1),e._UZ(2,"span",35),e._uU(3),e.TgZ(4,"span",28),e._uU(5),e.qZA()()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.healthData.iscsi_daemons.up+t.healthData.iscsi_daemons.down," total "),e.xp6(2),e.hij(" ",t.healthData.iscsi_daemons.up," up, "),e.xp6(1),e.Q6J("ngClass",e.VKq(4,s2,t.healthData.iscsi_daemons.down>0)),e.xp6(1),e.hij("",t.healthData.iscsi_daemons.down," down")}}function a2(n,s){if(1&n&&(e.TgZ(0,"cd-info-group",6),e.YNc(1,Gg,3,2,"cd-info-card",7),e.YNc(2,vD,2,1,"cd-info-card",8),e.YNc(3,Ey,3,3,"cd-info-card",9),e.YNc(4,Yb,2,1,"cd-info-card",10),e.ALo(5,"osdSummary"),e.YNc(6,ED,3,3,"cd-info-card",11),e.YNc(7,za,2,1,"cd-info-card",12),e.YNc(8,o2,2,2,"cd-info-card",13),e.ALo(9,"mdsSummary"),e.YNc(10,z1,6,6,"cd-info-card",14),e.qZA()),2&n){const t=e.oxw().ngIf,o=e.oxw();e.xp6(1),e.Q6J("ngIf",null==o.healthData.health?null:o.healthData.health.status),e.xp6(1),e.Q6J("ngIf",null!=o.healthData.hosts),e.xp6(1),e.Q6J("ngIf",o.healthData.mon_status),e.xp6(1),e.Q6J("ngIf",e.lcZ(5,8,o.healthData.osd_map)),e.xp6(2),e.Q6J("ngIf",o.healthData.mgr_map),e.xp6(1),e.Q6J("ngIf",t.rgw&&null!=(null==o.healthData?null:o.healthData.rgw)),e.xp6(1),e.Q6J("ngIf",e.lcZ(9,10,t.cephfs&&o.healthData.fs_map)),e.xp6(2),e.Q6J("ngIf",t.iscsi&&null!=(null==o.healthData?null:o.healthData.iscsi_daemons))}}function W1(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-info-card",42)(1,"cd-health-pie",43),e.NdJ("prepareFn",function(l){return e.CHM(t),e.oxw(3).prepareRawUsage(l[0],l[1])}),e.qZA()()}if(2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("data",t.healthData)("config",t.rawCapacityChartConfig)("isBytesData",!0)}}function J1(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-info-card",44)(1,"cd-health-pie",45),e.NdJ("prepareFn",function(l){return e.CHM(t),e.oxw(3).prepareObjects(l[0],l[1])}),e.qZA()()}if(2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("data",t.healthData)}}function wd(n,s){1&n&&e.GkF(0)}function bD(n,s){if(1&n&&(e.TgZ(0,"li"),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.AsE(" ",t.key,": ",t.value," ")}}function Gb(n,s){if(1&n&&(e.YNc(0,wd,1,0,"ng-container",20),e.TgZ(1,"ul"),e.YNc(2,bD,2,2,"li",21),e.ALo(3,"keyvalue"),e.qZA()),2&n){e.oxw(3);const t=e.MAs(5),o=e.oxw();e.Q6J("ngTemplateOutlet",t),e.xp6(2),e.Q6J("ngForOf",e.lcZ(3,2,o.healthData.pg_info.statuses))}}function l2(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-info-card",46),e.YNc(1,Gb,4,4,"ng-template",null,47,e.W1O),e.TgZ(3,"div",48)(4,"div",49)(5,"cd-health-pie",50),e.NdJ("prepareFn",function(l){return e.CHM(t),e.oxw(3).preparePgStatus(l[0],l[1])}),e.qZA()()()()}if(2&n){const t=e.MAs(2),o=e.oxw(3);e.xp6(4),e.Q6J("ngbPopover",t),e.xp6(1),e.Q6J("data",o.healthData)("config",o.pgStatusChartConfig)}}function u2(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",51),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.healthData.pools.length," ")}}function Vb(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",52),e._uU(1),e.ALo(2,"dimless"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.healthData.pg_info.pgs_per_osd)," ")}}function Zb(n,s){if(1&n&&(e.TgZ(0,"cd-info-group",36),e.YNc(1,W1,2,3,"cd-info-card",37),e.YNc(2,J1,2,1,"cd-info-card",38),e.YNc(3,l2,6,3,"cd-info-card",39),e.YNc(4,u2,2,1,"cd-info-card",40),e.YNc(5,Vb,3,3,"cd-info-card",41),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.healthData.df),e.xp6(1),e.Q6J("ngIf",null!=(null==t.healthData.pg_info||null==t.healthData.pg_info.object_stats?null:t.healthData.pg_info.object_stats.num_objects)),e.xp6(1),e.Q6J("ngIf",t.healthData.pg_info),e.xp6(1),e.Q6J("ngIf",t.healthData.pools),e.xp6(1),e.Q6J("ngIf",t.healthData.pg_info)}}function zb(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-info-card",58)(1,"cd-health-pie",50),e.NdJ("prepareFn",function(l){return e.CHM(t),e.oxw(3).prepareReadWriteRatio(l[0],l[1])}),e.qZA()()}if(2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("data",t.healthData)("config",t.clientStatsConfig)}}function Wb(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-info-card",59)(1,"cd-health-pie",50),e.NdJ("prepareFn",function(l){return e.CHM(t),e.oxw(3).prepareClientThroughput(l[0],l[1])}),e.qZA()()}if(2&n){const t=e.oxw(3);e.xp6(1),e.Q6J("data",t.healthData)("config",t.clientStatsConfig)}}function c2(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",60),e._uU(1),e.ALo(2,"dimlessBinary"),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",e.lcZ(2,1,t.healthData.client_perf.recovering_bytes_per_sec)+"/s"," ")}}function d2(n,s){if(1&n&&(e.TgZ(0,"cd-info-card",61),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.healthData.scrub_status," ")}}function f2(n,s){if(1&n&&(e.TgZ(0,"cd-info-group",53),e.YNc(1,zb,2,2,"cd-info-card",54),e.YNc(2,Wb,2,2,"cd-info-card",55),e.YNc(3,c2,3,3,"cd-info-card",56),e.YNc(4,d2,2,1,"cd-info-card",57),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.healthData.client_perf),e.xp6(1),e.Q6J("ngIf",t.healthData.client_perf),e.xp6(1),e.Q6J("ngIf",t.healthData.client_perf),e.xp6(1),e.Q6J("ngIf",t.healthData.scrub_status)}}const Av=function(n){return[n]};function p2(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"p",62),e.tHW(2,63),e._UZ(3,"i",28)(4,"a",64),e.N_p(),e.qZA(),e.BQk()),2&n){const t=e.oxw(3);e.xp6(3),e.Q6J("ngClass",e.VKq(1,Av,t.icons.infoCircle))}}function h2(n,s){if(1&n&&e.YNc(0,p2,5,3,"ng-container",16),2&n){const t=e.oxw(2);e.Q6J("ngIf",t.permissions.log.read)}}function _2(n,s){if(1&n&&(e.TgZ(0,"div",1),e.YNc(1,a2,11,12,"cd-info-group",2),e.YNc(2,Zb,6,5,"cd-info-group",3),e.YNc(3,f2,5,4,"cd-info-group",4),e.YNc(4,h2,1,1,"ng-template",null,5,e.W1O),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngIf",(null==t.healthData.health?null:t.healthData.health.status)||t.healthData.mon_status||t.healthData.osd_map||t.healthData.mgr_map||null!=t.healthData.hosts||null!=t.healthData.rgw||t.healthData.fs_map||null!=t.healthData.iscsi_daemons),e.xp6(1),e.Q6J("ngIf",t.healthData.pools||t.healthData.df||t.healthData.pg_info),e.xp6(1),e.Q6J("ngIf",t.healthData.client_perf||t.healthData.scrub_status)}}let Q1=(()=>{class n{constructor(t,o,l,_,C,R,N,V,Q){this.healthService=t,this.osdService=o,this.authStorageService=l,this.pgCategoryService=_,this.featureToggles=C,this.refreshIntervalService=R,this.dimlessBinary=N,this.dimless=V,this.cssHelper=Q,this.osdSettings=new D_,this.interval=new ic.w,this.icons=wo.P,this.clientStatsConfig={colors:[{backgroundColor:[this.cssHelper.propertyValue("chart-color-cyan"),this.cssHelper.propertyValue("chart-color-purple")]}]},this.rawCapacityChartConfig={colors:[{backgroundColor:[this.cssHelper.propertyValue("chart-color-blue"),this.cssHelper.propertyValue("chart-color-gray")]}]},this.pgStatusChartConfig={options:{events:[""]}},this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}ngOnInit(){this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.getHealth()}),this.osdService.getOsdSettings().pipe((0,Bh.q)(1)).subscribe(t=>{this.osdSettings=t})}ngOnDestroy(){this.interval.unsubscribe()}getHealth(){this.healthService.getMinimalHealth().subscribe(t=>{this.healthData=t})}prepareReadWriteRatio(t){const o=[],l=[],_=this.healthData.client_perf.write_op_per_sec+this.healthData.client_perf.read_op_per_sec;o.push(`${"Reads"}: ${this.dimless.transform(this.healthData.client_perf.read_op_per_sec)} ${"/s"}`),l.push(this.calcPercentage(this.healthData.client_perf.read_op_per_sec,_)),o.push(`${"Writes"}: ${this.dimless.transform(this.healthData.client_perf.write_op_per_sec)} ${"/s"}`),l.push(this.calcPercentage(this.healthData.client_perf.write_op_per_sec,_)),t.labels=o,t.dataset[0].data=l,t.dataset[0].label=`${this.dimless.transform(_)}\n${"IOPS"}`}prepareClientThroughput(t){const o=[],l=[],_=this.healthData.client_perf.read_bytes_sec+this.healthData.client_perf.write_bytes_sec;o.push(`${"Reads"}: ${this.dimlessBinary.transform(this.healthData.client_perf.read_bytes_sec)}${"/s"}`),l.push(this.calcPercentage(this.healthData.client_perf.read_bytes_sec,_)),o.push(`${"Writes"}: ${this.dimlessBinary.transform(this.healthData.client_perf.write_bytes_sec)}${"/s"}`),l.push(this.calcPercentage(this.healthData.client_perf.write_bytes_sec,_)),t.labels=o,t.dataset[0].data=l,t.dataset[0].label=`${this.dimlessBinary.transform(_).replace(" ","\n")}${"/s"}`}prepareRawUsage(t,o){const l=this.calcPercentage(o.df.stats.total_bytes-o.df.stats.total_used_raw_bytes,o.df.stats.total_bytes),_=this.calcPercentage(o.df.stats.total_used_raw_bytes,o.df.stats.total_bytes);this.color=_/100>=this.osdSettings.nearfull_ratio?"chart-color-red":_/100>=this.osdSettings.full_ratio?"chart-color-yellow":"chart-color-blue",this.rawCapacityChartConfig.colors[0].backgroundColor[0]=this.cssHelper.propertyValue(this.color),t.dataset[0].data=[_,l],t.labels=[`${"Used"}: ${this.dimlessBinary.transform(o.df.stats.total_used_raw_bytes)}`,`${"Avail."}: ${this.dimlessBinary.transform(o.df.stats.total_bytes-o.df.stats.total_used_raw_bytes)}`],t.dataset[0].label=`${_}%\nof ${this.dimlessBinary.transform(o.df.stats.total_bytes)}`}preparePgStatus(t,o){const l={};let _=0;Sr().forEach(o.pg_info.statuses,(C,R)=>{const N=this.pgCategoryService.getTypeByStates(R);Sr().isUndefined(l[N])&&(l[N]=0),l[N]+=C,_+=C});for(const C of this.pgCategoryService.getAllTypes())Sr().isUndefined(l[C])&&(l[C]=0);t.dataset[0].data=this.pgCategoryService.getAllTypes().map(C=>this.calcPercentage(l[C],_)),t.labels=[`${"Clean"}: ${this.dimless.transform(l.clean)}`,`${"Working"}: ${this.dimless.transform(l.working)}`,`${"Warning"}: ${this.dimless.transform(l.warning)}`,`${"Unknown"}: ${this.dimless.transform(l.unknown)}`],t.dataset[0].label=`${_}\n${"PGs"}`}prepareObjects(t,o){const l=o.pg_info.object_stats.num_object_copies,C=this.calcPercentage(l-o.pg_info.object_stats.num_objects_misplaced-o.pg_info.object_stats.num_objects_degraded-o.pg_info.object_stats.num_objects_unfound,l),R=this.calcPercentage(o.pg_info.object_stats.num_objects_misplaced,l),N=this.calcPercentage(o.pg_info.object_stats.num_objects_degraded,l),V=this.calcPercentage(o.pg_info.object_stats.num_objects_unfound,l);t.labels=[`${"Healthy"}: ${C}%`,`${"Misplaced"}: ${R}%`,`${"Degraded"}: ${N}%`,`${"Unfound"}: ${V}%`],t.dataset[0].data=[C,R,N,V],t.dataset[0].label=`${this.dimless.transform(o.pg_info.object_stats.num_objects)}\n${"objects"}`}isClientReadWriteChartShowable(){return(this.healthData.client_perf.read_op_per_sec||0)+(this.healthData.client_perf.write_op_per_sec||0)>0}calcPercentage(t,o){return Sr().isNumber(t)&&Sr().isNumber(o)&&0!==o?Math.ceil(t/o*100*100)/100:0}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Ib),e.Y36(rc),e.Y36(Vi.j),e.Y36(Nb.j),e.Y36(Yg.l),e.Y36(gy),e.Y36(Rr.$),e.Y36(br.n),e.Y36(Bm.P))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-health"]],decls:2,vars:3,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke,we,G,Dt,bt;return s="Status",t="Capacity",o="Performance",l="Cluster Status",_="Hosts",C="Monitors",R="OSDs",N="Managers",V="Object Gateways",Q="Metadata Servers",oe="iSCSI Gateways",le="Raw Capacity",_e="Objects",ye="PG Status",$e="Pools",Ie="PGs per OSD",ke="Client Read/Write",we="Client Throughput",G="Recovery Throughput",Dt="Scrubbing",bt="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " See " + "\ufffd#4\ufffd" + "Logs" + "\ufffd/#4\ufffd" + " for more details.",[["class","container-fluid",4,"ngIf"],[1,"container-fluid"],["groupTitle",s,4,"ngIf"],["groupTitle",t,4,"ngIf"],["groupTitle",o,4,"ngIf"],["logsLink",""],["groupTitle",s],["cardTitle",l,"class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",_,"link","/hosts","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",C,"link","/monitor","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",R,"link","/osd","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",N,"class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",V,"link","/rgw/daemon","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",Q,"class","cd-status-card",3,"contentClass",4,"ngIf"],["cardTitle",oe,"link","/block/iscsi","class","cd-status-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",l,"contentClass","content-highlight",1,"cd-status-card"],[4,"ngIf"],["healthChecks",""],["popoverClass","info-card-popover-cluster-status",1,"info-card-content-clickable",3,"ngStyle","ngbPopover"],["class","fa fa-exclamation-triangle",4,"ngIf"],[4,"ngTemplateOutlet"],[4,"ngFor","ngForOf"],[3,"ngStyle"],[1,"fa","fa-exclamation-triangle"],["cardTitle",_,"link","/hosts","contentClass","content-highlight",1,"cd-status-card"],["cardTitle",C,"link","/monitor","contentClass","content-highlight",1,"cd-status-card"],["cardTitle",R,"link","/osd","contentClass","content-highlight",1,"cd-status-card"],[3,"ngClass",4,"ngFor","ngForOf"],[3,"ngClass"],["cardTitle",N,"contentClass","content-highlight",1,"cd-status-card"],[3,"ngClass","title",4,"ngFor","ngForOf"],[3,"ngClass","title"],["cardTitle",V,"link","/rgw/daemon","contentClass","content-highlight",1,"cd-status-card"],["cardTitle",Q,1,"cd-status-card",3,"contentClass"],["cardTitle",oe,"link","/block/iscsi","contentClass","content-highlight",1,"cd-status-card"],[1,"card-text-line-break"],["groupTitle",t],["cardTitle",le,"class","cd-capacity-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",_e,"class","cd-capacity-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",ye,"class","cd-capacity-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",$e,"link","/pool","class","cd-capacity-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",Ie,"class","cd-capacity-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",le,"contentClass","content-chart",1,"cd-capacity-card","cd-chart-card"],[3,"data","config","isBytesData","prepareFn"],["cardTitle",_e,"contentClass","content-chart",1,"cd-capacity-card","cd-chart-card"],[3,"data","prepareFn"],["cardTitle",ye,"contentClass","content-chart",1,"cd-capacity-card","cd-chart-card"],["pgStatus",""],[1,"pg-status-popover-wrapper"],[3,"ngbPopover"],[3,"data","config","prepareFn"],["cardTitle",$e,"link","/pool","contentClass","content-highlight",1,"cd-capacity-card"],["cardTitle",Ie,"contentClass","content-highlight",1,"cd-capacity-card"],["groupTitle",o],["cardTitle",ke,"class","cd-performance-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",we,"class","cd-performance-card cd-chart-card","contentClass","content-chart",4,"ngIf"],["cardTitle",G,"class","cd-performance-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",Dt,"class","cd-performance-card","contentClass","content-highlight",4,"ngIf"],["cardTitle",ke,"contentClass","content-chart",1,"cd-performance-card","cd-chart-card"],["cardTitle",we,"contentClass","content-chart",1,"cd-performance-card","cd-chart-card"],["cardTitle",G,"contentClass","content-highlight",1,"cd-performance-card"],["cardTitle",Dt,"contentClass","content-highlight",1,"cd-performance-card"],[1,"logs-link"],bt,["routerLink","/logs"]]},template:function(t,o){1&t&&(e.YNc(0,_2,6,3,"div",0),e.ALo(1,"async")),2&t&&e.Q6J("ngIf",e.lcZ(1,1,o.healthData&&o.enabledFeature$))},directives:[p.O5,zC,XC,p.tP,p.sg,p.PC,Pr.o8,p.mk,e2,Io.yS],pipes:[p.Ov,Z1,p.gd,Lb,kb,$b,Hb,Bb,p.Nd,br.n,Rr.$],styles:['cd-info-card[_ngcontent-%COMP%]{padding:0 .5vw}  cd-health .pg-status-popover-wrapper{position:relative}  cd-health .pg-status-popover-wrapper .popover{max-height:20vh;max-width:unset!important;min-width:unset!important;position:absolute;width:116%}  cd-health .pg-status-popover-wrapper .popover .popover-body{font-size:1rem;max-height:19vh;max-width:100%}.logs-link[_ngcontent-%COMP%]{text-align:center}.logs-link[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:#25828e}.card-text-error[_ngcontent-%COMP%]{color:#c9190b;display:inline}.card-text-line-break[_ngcontent-%COMP%]:after{content:"\\a";white-space:pre}.popover-info[_ngcontent-%COMP%]:hover{cursor:pointer}']}),n})();var cg=(()=>{return(n=cg||(cg={})).USEDCAPACITY="ceph_cluster_total_used_bytes",n.IPS="sum(rate(ceph_osd_op_w_in_bytes[$interval]))",n.OPS="sum(rate(ceph_osd_op_r_out_bytes[$interval]))",n.READLATENCY="avg_over_time(ceph_osd_apply_latency_ms[$interval])",n.WRITELATENCY="avg_over_time(ceph_osd_commit_latency_ms[$interval])",n.READCLIENTTHROUGHPUT="sum(rate(ceph_pool_rd_bytes[$interval]))",n.WRITECLIENTTHROUGHPUT="sum(rate(ceph_pool_wr_bytes[$interval]))",n.RECOVERYBYTES="sum(rate(ceph_osd_recovery_bytes[$interval]))",cg;var n})(),Ym=i(74255);const Jb=["*"];let m2=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-card"]],inputs:{cardTitle:"cardTitle"},ngContentSelectors:Jb,decls:5,vars:1,consts:[[1,"card","shadow-sm","flex-fill"],[1,"card-title","mt-4","ms-4","mb-0"],[1,"card-body","ps-0","pe-0"]],template:function(t,o){1&t&&(e.F$t(),e.TgZ(0,"div",0)(1,"h4",1),e._uU(2),e.qZA(),e.TgZ(3,"div",2),e.Hsn(4),e.qZA()()),2&t&&(e.xp6(2),e.hij(" ",o.cardTitle," "))},styles:[".card-body[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:space-evenly}"]}),n})();var gm=i(85770);let Dv=(()=>{class n{constructor(t,o){this.cssHelper=t,this.dimlessBinary=o,this.chartConfig={chartType:"doughnut",labels:["","",""],dataset:[{label:null,backgroundColor:[this.cssHelper.propertyValue("chart-color-light-gray"),this.cssHelper.propertyValue("chart-color-slight-dark-gray"),this.cssHelper.propertyValue("chart-color-dark-gray")]},{label:null,borderWidth:0,backgroundColor:[this.cssHelper.propertyValue("chart-color-blue"),this.cssHelper.propertyValue("chart-color-white")]}],options:{cutoutPercentage:70,events:["click","mouseout","touchstart"],legend:{display:!0,position:"right",labels:{boxWidth:10,usePointStyle:!1,generateLabels:l=>{const _={0:{},1:{},2:{}};return _[0]={text:"Used: " + l.data.datasets[1].data[2] + "",fillStyle:l.data.datasets[1].backgroundColor[0],strokeStyle:l.data.datasets[1].backgroundColor[0]},_[1]={text:"Warning: " + l.data.datasets[0].data[0] + "%",fillStyle:l.data.datasets[0].backgroundColor[1],strokeStyle:l.data.datasets[0].backgroundColor[1]},_[2]={text:"Danger: " + (l.data.datasets[0].data[0] + l.data.datasets[0].data[1]) + "%",fillStyle:l.data.datasets[0].backgroundColor[2],strokeStyle:l.data.datasets[0].backgroundColor[2]},_}}},plugins:{center_text:!0},tooltips:{enabled:!0,displayColors:!1,backgroundColor:this.cssHelper.propertyValue("chart-color-tooltip-background"),cornerRadius:0,bodyFontSize:14,bodyFontStyle:"600",position:"nearest",xPadding:12,yPadding:12,filter:l=>1===l.datasetIndex,callbacks:{label:(l,_)=>{let C=_.labels[l.index];return C.includes("%")||(C=`${C} (${_.datasets[l.datasetIndex].data[l.index]}%)`),C}}},title:{display:!1}}},this.doughnutChartPlugins=[{id:"center_text",beforeDraw(l){const _=new Bm.P,C="Helvetica Neue, Helvetica, Arial, sans-serif";Fb.defaults.global.defaultFontFamily=C;const R=l.ctx;if(!l.options.plugins.center_text||!l.data.datasets[0].label)return;R.save();const N=l.data.datasets[0].label[0].split("\n"),V=(l.chartArea.left+l.chartArea.right)/2,Q=(l.chartArea.top+l.chartArea.bottom)/2;R.textAlign="center",R.textBaseline="middle",R.font=`24px ${C}`,R.fillText(N[0],V,Q-10),N.length>1&&(R.font=`14px ${C}`,R.fillStyle=_.propertyValue("chart-color-center-text-description"),R.fillText(N[1],V,Q+10)),R.restore()}}]}ngOnInit(){this.prepareRawUsage(this.chartConfig,this.data)}ngOnChanges(){this.prepareRawUsage(this.chartConfig,this.data)}prepareRawUsage(t,o){const l=100*this.lowThreshold,_=100*this.highThreshold,C=this.calcPercentage(o.max-o.current,o.max),R=this.calcPercentage(o.current,o.max);this.color=R>=_?"chart-color-red":R>=l?"chart-color-yellow":"chart-color-blue",t.dataset[0].data=[Math.round(l),Math.round(Math.abs(l-_)),Math.round(100-_)],t.dataset[1].data=[R,C,this.dimlessBinary.transform(o.current)],t.dataset[1].backgroundColor[0]=this.cssHelper.propertyValue(this.color),t.dataset[0].label=[`${R}%\nof ${this.dimlessBinary.transform(o.max)}`]}calcPercentage(t,o){return Sr().isNumber(t)&&Sr().isNumber(o)&&0!==o?Math.ceil(t/o*100*100)/100:0}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Bm.P),e.Y36(Rr.$))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-dashboard-pie"]],inputs:{data:"data",highThreshold:"highThreshold",lowThreshold:"lowThreshold"},features:[e.TTD],decls:6,vars:6,consts:[[1,"chart-container"],["baseChart","",1,"chart-canvas",3,"datasets","chartType","options","labels","colors","plugins"],["chartCanvas",""],[1,"chartjs-tooltip"],["chartTooltip",""]],template:function(t,o){1&t&&(e.TgZ(0,"div",0),e._UZ(1,"canvas",1,2),e.TgZ(3,"div",3,4),e._UZ(5,"table"),e.qZA()()),2&t&&(e.xp6(1),e.Q6J("datasets",o.chartConfig.dataset)("chartType",o.chartConfig.chartType)("options",o.chartConfig.options)("labels",o.chartConfig.labels)("colors",o.chartConfig.colors)("plugins",o.doughnutChartPlugins))},directives:[Us.jh],styles:['.chart-container[_ngcontent-%COMP%]{cursor:pointer;margin:auto;overflow:visible;position:absolute}canvas[_ngcontent-%COMP%]{user-select:none}.chartjs-tooltip[_ngcontent-%COMP%]{background:rgba(0,0,0,.7);border-radius:3px;color:#fff;font-family:Helvetica Neue,Helvetica,Arial,sans-serif!important;opacity:0;pointer-events:none;position:absolute;transform:translate(-50%);transition:all .1s ease}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]{transform:translate(-10%)}.chartjs-tooltip.transform-left[_ngcontent-%COMP%]:after{left:10%}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]{transform:translate(-90%)}.chartjs-tooltip.transform-right[_ngcontent-%COMP%]:after{left:90%}.chartjs-tooltip[_ngcontent-%COMP%]:after{border-color:#000 transparent transparent transparent;border-style:solid;border-width:5px;content:" ";left:50%;margin-left:-5px;position:absolute;top:100%}  .chartjs-tooltip-key{display:inline-block;height:10px;margin-right:10px;width:10px}.chart-container[_ngcontent-%COMP%]{height:100%;margin-left:auto;margin-right:auto;position:unset;width:100%}.chart-canvas[_ngcontent-%COMP%]{height:100%;margin-left:auto;margin-right:auto;max-height:100%;max-width:100%;position:unset;width:100%}']}),n})();function g2(n,s){if(1&n&&e.SDv(0,12,1),2&n){const t=e.oxw(2);e.pQV(t.title),e.QtT(0)}}function v2(n,s){if(1&n&&e.SDv(0,12,2),2&n){const t=e.oxw(2);e.pQV(t.title),e.QtT(0)}}function y2(n,s){if(1&n&&e.SDv(0,12,3),2&n){const t=e.oxw(2);e.pQV(t.title),e.QtT(0)}}function Qb(n,s){if(1&n&&(e.TgZ(0,"a",11),e.tHW(1,12),e.YNc(2,g2,1,1,"ng-template",13),e.YNc(3,v2,1,1,"ng-template",14),e.YNc(4,y2,1,1,"ng-template",15),e.N_p(),e.qZA()),2&n){const t=e.oxw();e.Q6J("routerLink",t.link)("ngPlural",t.total),e.xp6(4),e.pQV(t.total),e.QtT(1)}}function Xb(n,s){1&n&&e.GkF(0)}function Kb(n,s){if(1&n&&(e.ynx(0),e.YNc(1,Xb,1,0,"ng-container",16),e.BQk()),2&n){e.oxw();const t=e.MAs(13);e.xp6(1),e.Q6J("ngTemplateOutlet",t)}}function E2(n,s){1&n&&e.GkF(0)}function qb(n,s){if(1&n&&(e.ynx(0),e.YNc(1,E2,1,0,"ng-container",16),e.BQk()),2&n){e.oxw();const t=e.MAs(11);e.xp6(1),e.Q6J("ngTemplateOutlet",t)}}function b2(n,s){1&n&&e.GkF(0)}function S2(n,s){if(1&n&&(e.ynx(0),e.YNc(1,b2,1,0,"ng-container",16),e.BQk()),2&n){e.oxw();const t=e.MAs(15);e.xp6(1),e.Q6J("ngTemplateOutlet",t)}}function SD(n,s){1&n&&e.GkF(0)}function TD(n,s){if(1&n&&(e.ynx(0),e.YNc(1,SD,1,0,"ng-container",16),e.BQk()),2&n){e.oxw();const t=e.MAs(9);e.xp6(1),e.Q6J("ngTemplateOutlet",t)}}function CD(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.data.success," ")}}function MD(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.clean," ")}}const vm=function(n){return[n]};function X1(n,s){if(1&n&&(e.TgZ(0,"span"),e.YNc(1,CD,2,1,"span",17),e.YNc(2,MD,2,1,"span",17),e._UZ(3,"i",19),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.data.success||0===t.data.success&&0===t.data.total),e.xp6(1),e.Q6J("ngIf",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.clean),e.xp6(1),e.Q6J("ngClass",e.VKq(3,vm,t.icons.success))}}function T2(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.data.info," ")}}function C2(n,s){if(1&n&&(e.TgZ(0,"span",20),e.YNc(1,T2,2,1,"span",17),e._UZ(2,"i",21),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.data.info),e.xp6(1),e.Q6J("ngClass",e.VKq(2,vm,t.icons.danger))}}function eS(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.data.warn," ")}}function xv(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.warning," ")}}function M2(n,s){if(1&n&&(e.TgZ(0,"span",20),e.YNc(1,eS,2,1,"span",17),e.YNc(2,xv,2,1,"span",17),e._UZ(3,"i",22),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.data.warn),e.xp6(1),e.Q6J("ngIf",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.warning),e.xp6(1),e.Q6J("ngClass",e.VKq(3,vm,t.icons.warning))}}function O2(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",t.data.error," ")}}function A2(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.unknown," ")}}function D2(n,s){if(1&n&&(e.TgZ(0,"span",20),e.YNc(1,O2,2,1,"span",17),e.YNc(2,A2,2,1,"span",17),e._UZ(3,"i",23),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.data.error),e.xp6(1),e.Q6J("ngIf",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.unknown),e.xp6(1),e.Q6J("ngClass",e.VKq(3,vm,t.icons.danger))}}function x2(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw(3);e.xp6(1),e.hij(" ",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.working," ")}}const tS=function(n,s){return[n,s]};function R2(n,s){if(1&n&&(e.TgZ(0,"span",20),e.YNc(1,x2,2,1,"span",17),e._UZ(2,"i",22),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.working),e.xp6(1),e.Q6J("ngClass",e.WLB(2,tS,t.icons.spinner,t.icons.spin))}}function w2(n,s){if(1&n&&(e.YNc(0,X1,4,5,"span",17),e.YNc(1,C2,3,4,"span",18),e.YNc(2,M2,4,5,"span",18),e.YNc(3,D2,4,5,"span",18),e.YNc(4,R2,3,5,"span",18)),2&n){const t=e.oxw();e.Q6J("ngIf",t.data.success||(null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.clean)||0===t.data.success&&0===t.data.total),e.xp6(1),e.Q6J("ngIf",t.data.info),e.xp6(1),e.Q6J("ngIf",t.data.warn||(null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.warning)),e.xp6(1),e.Q6J("ngIf",t.data.error||(null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.unknown)),e.xp6(1),e.Q6J("ngIf",null==t.data.categoryPgAmount?null:t.data.categoryPgAmount.working)}}function Vg(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e._UZ(2,"i",19),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.data.up," "),e.xp6(1),e.Q6J("ngClass",e.VKq(2,vm,t.icons.success))}}function P2(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.TgZ(2,"span",24),e._uU(3," up "),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.data.up," ")}}function nS(n,s){if(1&n&&(e.TgZ(0,"span",20),e._uU(1),e.TgZ(2,"span",24),e._uU(3," in "),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.data.in," ")}}function N2(n,s){if(1&n&&(e.TgZ(0,"span",20),e._uU(1),e.TgZ(2,"span",25),e._uU(3," down "),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.data.down," ")}}function rS(n,s){if(1&n&&(e.TgZ(0,"span",20),e._uU(1),e.TgZ(2,"span",25),e._uU(3," out "),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.data.out," ")}}function I2(n,s){if(1&n&&(e.TgZ(0,"span",20),e._uU(1),e.TgZ(2,"span",26),e._uU(3," nearfull"),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.data.nearfull," ")}}function iS(n,s){if(1&n&&(e.TgZ(0,"span",20),e._uU(1),e.TgZ(2,"span",27),e._uU(3," full "),e.qZA()()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.data.full," ")}}function F2(n,s){if(1&n&&(e.YNc(0,Vg,3,4,"span",17),e.YNc(1,P2,4,1,"span",17),e.YNc(2,nS,4,1,"span",18),e.YNc(3,N2,4,1,"span",18),e.YNc(4,rS,4,1,"span",18),e.YNc(5,I2,4,1,"span",18),e.YNc(6,iS,4,1,"span",18)),2&n){const t=e.oxw();e.Q6J("ngIf",t.data.up===t.data.in),e.xp6(1),e.Q6J("ngIf",t.data.up!==t.data.in),e.xp6(1),e.Q6J("ngIf",t.data.in!==t.data.up),e.xp6(1),e.Q6J("ngIf",t.data.down),e.xp6(1),e.Q6J("ngIf",t.data.out),e.xp6(1),e.Q6J("ngIf",t.data.nearfull),e.xp6(1),e.Q6J("ngIf",t.data.full)}}function by(n,s){if(1&n&&e._UZ(0,"i",19),2&n){const t=e.oxw(2);e.Q6J("ngClass",e.VKq(1,vm,t.icons.success))}}function L2(n,s){if(1&n&&(e.TgZ(0,"span",20),e._uU(1),e._UZ(2,"i",23),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.data.down," "),e.xp6(1),e.Q6J("ngClass",e.VKq(2,vm,t.icons.danger))}}function oS(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.YNc(2,by,1,3,"i",28),e.qZA(),e.YNc(3,L2,3,4,"span",18)),2&n){const t=e.oxw();e.xp6(1),e.hij(" ",t.data.up," "),e.xp6(1),e.Q6J("ngIf",t.data.up||0===t.data.up),e.xp6(1),e.Q6J("ngIf",t.data.down)}}function sS(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e._UZ(2,"i",19),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.hij(" ",t.data," "),e.xp6(1),e.Q6J("ngClass",e.VKq(2,vm,t.icons.success))}}function k2(n,s){if(1&n&&e._uU(0),2&n){const t=e.oxw(3);e.Oqu(t.title)}}function $2(n,s){if(1&n&&e._uU(0),2&n){const t=e.oxw(3);e.Oqu(t.title)}}function H2(n,s){if(1&n&&e._uU(0),2&n){const t=e.oxw(3);e.hij("",t.title,"s")}}function Sy(n,s){if(1&n&&(e.TgZ(0,"span",30),e._uU(1),e.YNc(2,k2,1,1,"ng-template",13),e.YNc(3,$2,1,1,"ng-template",14),e.YNc(4,H2,1,1,"ng-template",15),e.qZA()),2&n){const t=e.oxw(2);e.Q6J("ngPlural",t.total),e.xp6(1),e.hij(" ",t.total," ")}}function B2(n,s){if(1&n&&e.YNc(0,Sy,5,2,"span",29),2&n){const t=e.oxw();e.Q6J("ngIf",t.total||0===t.total)}}let aS=(()=>{class n{constructor(){this.summaryType="default",this.icons=wo.P}ngOnChanges(){this.total=this.data.total||0===this.data.total?this.data.total:"iscsi"===this.summaryType?this.data.up+this.data.down||0:this.data}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-card-row"]],inputs:{title:"title",link:"link",data:"data",summaryType:"summaryType"},features:[e.TTD],decls:18,vars:6,consts:function(){let s;return s=" " + "\ufffd0\ufffd" + " " + "\ufffd*2:1\ufffd" + "" + "[\ufffd0:1\ufffd|\ufffd0:2\ufffd|\ufffd0:3\ufffd]" + "" + "[\ufffd/*2:1\ufffd|\ufffd/*3:2\ufffd|\ufffd/*4:3\ufffd]" + "" + "\ufffd*3:2\ufffd" + "" + "[\ufffd0:1\ufffd|\ufffd0:2\ufffd|\ufffd0:3\ufffd]" + "" + "[\ufffd/*2:1\ufffd|\ufffd/*3:2\ufffd|\ufffd/*4:3\ufffd]" + "" + "\ufffd*4:3\ufffd" + "" + "[\ufffd0:1\ufffd|\ufffd0:2\ufffd|\ufffd0:3\ufffd]" + "s" + "[\ufffd/*2:1\ufffd|\ufffd/*3:2\ufffd|\ufffd/*4:3\ufffd]" + "",s=e.Zx4(s),[[1,"d-flex","pl-1","pb-2","pt-2"],[1,"ms-2","me-auto"],[3,"routerLink","ngPlural",4,"ngIf","ngIfElse"],[3,"ngSwitch"],[4,"ngSwitchCase"],[4,"ngSwitchDefault"],["defaultSummary",""],["osdSummary",""],["iscsiSummary",""],["simplifiedSummary",""],["noLinkTitle",""],[3,"routerLink","ngPlural"],s,["ngPluralCase","=0"],["ngPluralCase","=1"],["ngPluralCase","other"],[4,"ngTemplateOutlet"],[4,"ngIf"],["class","ms-2",4,"ngIf"],[1,"text-success",3,"ngClass"],[1,"ms-2"],[1,"text-info",3,"ngClass"],[1,"text-warning",3,"ngClass"],[1,"text-danger",3,"ngClass"],[1,"fw-bold","text-success"],[1,"fw-bold","text-danger","me-2"],[1,"fw-bold","text-warning","me-2"],[1,"fw-bold","text-danger"],["class","text-success",3,"ngClass",4,"ngIf"],[3,"ngPlural",4,"ngIf"],[3,"ngPlural"]]},template:function(t,o){if(1&t&&(e.TgZ(0,"div",0)(1,"div",1),e.YNc(2,Qb,5,3,"a",2),e.qZA(),e.ynx(3,3),e.YNc(4,Kb,2,1,"ng-container",4),e.YNc(5,qb,2,1,"ng-container",4),e.YNc(6,S2,2,1,"ng-container",4),e.YNc(7,TD,2,1,"ng-container",5),e.BQk(),e.qZA(),e.YNc(8,w2,5,5,"ng-template",null,6,e.W1O),e.YNc(10,F2,7,7,"ng-template",null,7,e.W1O),e.YNc(12,oS,4,3,"ng-template",null,8,e.W1O),e.YNc(14,sS,3,4,"ng-template",null,9,e.W1O),e.YNc(16,B2,1,1,"ng-template",null,10,e.W1O)),2&t){const l=e.MAs(17);e.xp6(2),e.Q6J("ngIf",o.link&&o.total>0)("ngIfElse",l),e.xp6(1),e.Q6J("ngSwitch",o.summaryType),e.xp6(1),e.Q6J("ngSwitchCase","iscsi"),e.xp6(1),e.Q6J("ngSwitchCase","osd"),e.xp6(1),e.Q6J("ngSwitchCase","simplified")}},directives:[p.O5,Io.yS,p.iq,p.zE,p.RF,p.n9,p.tP,p.ED,p.mk],styles:[""]}),n})();function U2(n,s){if(1&n&&(e.TgZ(0,"option",3),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("ngValue",t.value),e.xp6(1),e.hij("",t.name," ")}}let Y2=(()=>{class n{constructor(){this.selectedTime=new e.vpe,this.times=[{name:"Last 5 minutes",value:this.timeToDate(300,1)},{name:"Last 15 minutes",value:this.timeToDate(900,3)},{name:"Last 30 minutes",value:this.timeToDate(1800,6)},{name:"Last 1 hour",value:this.timeToDate(3600,12)},{name:"Last 3 hours",value:this.timeToDate(10800,36)},{name:"Last 6 hours",value:this.timeToDate(21600,72)},{name:"Last 12 hours",value:this.timeToDate(43200,144)},{name:"Last 24 hours",value:this.timeToDate(86400,288)},{name:"Last 2 days",value:this.timeToDate(172800,576)},{name:"Last 7 days",value:this.timeToDate(604800,2016)}],this.time=this.times[3].value}emitTime(){this.selectedTime.emit(this.timeToDate(this.time.end-this.time.start,this.time.step))}timeToDate(t,o){return{start:ls()().unix()-t,end:ls()().unix(),step:o}}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-dashboard-time-selector"]],outputs:{selectedTime:"selectedTime"},decls:3,vars:2,consts:[[1,"timeSelector"],["id","timepicker","name","timepicker",1,"form-select",3,"ngModel","ngModelChange"],[3,"ngValue",4,"ngFor","ngForOf"],[3,"ngValue"]],template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"select",1),e.NdJ("ngModelChange",function(_){return o.time=_})("ngModelChange",function(){return o.emitTime()}),e.YNc(2,U2,2,2,"option",2),e.qZA()()),2&t&&(e.xp6(1),e.Q6J("ngModel",o.time),e.xp6(1),e.Q6J("ngForOf",o.times))},directives:[ge.o,En.EJ,En.JJ,En.On,p.sg,En.YN,En.Kr],styles:["select#timepicker[_ngcontent-%COMP%]{border:0}.timeSelector[_ngcontent-%COMP%]{position:absolute;right:18px;top:20px;width:12rem}"]}),n})();var j2=i(20044);let G2=(()=>{class n{constructor(t){this.formatter=t,this.bytesLabels=["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],this.bytesPerSecondLabels=["B/s","KiB/s","MiB/s","GiB/s","TiB/s","PiB/s","EiB/s","ZiB/s","YiB/s"],this.secondsLabels=["ns","\u03bcs","ms","s","ks","Ms"],this.unitlessLabels=["","k","M","G","T","P","E","Z","Y"]}formatFromTo(t,o,l,_,C){return this.formatter.formatNumberFromTo(t,o,l,_,C)}formatBytesFromTo(t,o,l){return this.formatFromTo(t,o,l,1024,this.bytesLabels)}formatBytesPerSecondFromTo(t,o,l){return this.formatFromTo(t,o,l,1024,this.bytesPerSecondLabels)}formatSecondsFromTo(t,o,l){return this.formatFromTo(t,o,l,1e3,this.secondsLabels)}formatUnitlessFromTo(t,o,l){return this.formatFromTo(t,o,l,1e3,this.unitlessLabels)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(Uc.H))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),V2=(()=>{class n{constructor(t,o,l,_,C,R){this.cssHelper=t,this.dimlessBinary=o,this.dimlessBinaryPerSecond=l,this.dimlessPipe=_,this.formatter=C,this.numberFormatter=R,this.chartData={dataset:[{label:"",data:[{x:0,y:0}],tension:0,pointBackgroundColor:this.cssHelper.propertyValue("chart-color-strong-blue"),backgroundColor:this.cssHelper.propertyValue("chart-color-translucent-blue"),borderColor:this.cssHelper.propertyValue("chart-color-strong-blue")},{label:"",data:[],tension:0,pointBackgroundColor:this.cssHelper.propertyValue("chart-color-orange"),backgroundColor:this.cssHelper.propertyValue("chart-color-yellow"),borderColor:this.cssHelper.propertyValue("chart-color-orange")}]},this.options={responsive:!0,maintainAspectRatio:!1,elements:{point:{radius:0}},legend:{display:!1},tooltips:{intersect:!1,displayColors:!0,backgroundColor:this.cssHelper.propertyValue("chart-color-tooltip-background"),callbacks:{title:function(N){return N[0].xLabel}}},hover:{intersect:!1},scales:{xAxes:[{display:!1,type:"time",gridLines:{display:!1},time:{tooltipFormat:"YYYY/MM/DD hh:mm:ss"}}],yAxes:[{gridLines:{display:!1},ticks:{beginAtZero:!0,maxTicksLimit:3,callback:N=>0===N?null:this.fillString(this.convertUnits(N))}}]},plugins:{borderArea:!0,chartAreaBorder:{borderColor:this.cssHelper.propertyValue("chart-color-slight-dark-gray"),borderWidth:2}}},this.chartAreaBorderPlugin=[{beforeDraw(N){if(!N.options.plugins.borderArea)return;const{ctx:V,chartArea:{left:Q,top:oe,right:le,bottom:_e}}=N;V.save(),V.strokeStyle=N.options.plugins.chartAreaBorder.borderColor,V.lineWidth=N.options.plugins.chartAreaBorder.borderWidth,V.setLineDash(N.options.plugins.chartAreaBorder.borderDash||[]),V.lineDashOffset=N.options.plugins.chartAreaBorder.borderDashOffset,V.strokeRect(Q,oe,le-Q-1,_e),V.restore()}}]}ngOnChanges(){this.updateChartData()}ngAfterViewInit(){this.updateChartData()}updateChartData(){this.data&&(this.setChartTicks(),this.chartData.dataset[0].data=this.formatData(this.data),this.chartData.dataset[0].label=this.label,[this.currentData,this.currentDataUnits]=this.convertUnits(this.data[this.data.length-1][1]).split(" ")),this.data2&&(this.chartData.dataset[1].data=this.formatData(this.data2),this.chartData.dataset[1].label=this.label2,[this.currentData2,this.currentDataUnits2]=this.convertUnits(this.data2[this.data2.length-1][1]).split(" ")),this.chart&&this.chart.chart.update()}formatData(t){let o={};return o=t.map(l=>({x:1e3*l[0],y:Number(this.convertToChartDataUnits(l[1]).replace(/[^\d,.]+/g,""))})),o}convertToChartDataUnits(t){let o="";return this.chartDataUnits&&(o="B"===this.dataUnits?this.numberFormatter.formatBytesFromTo(t,this.dataUnits,this.chartDataUnits):"B/s"===this.dataUnits?this.numberFormatter.formatBytesPerSecondFromTo(t,this.dataUnits,this.chartDataUnits):"ms"===this.dataUnits?this.numberFormatter.formatSecondsFromTo(t,this.dataUnits,this.chartDataUnits):this.numberFormatter.formatUnitlessFromTo(t,this.dataUnits,this.chartDataUnits)),o}convertUnits(t){let o="";return o="B"===this.dataUnits?this.dimlessBinary.transform(t):"B/s"===this.dataUnits?this.dimlessBinaryPerSecond.transform(t):"ms"===this.dataUnits?this.formatter.format_number(t,1e3,["ms","s"]):this.dimlessPipe.transform(t),o}fillString(t){let o=8,l=t.length;for(t.length<4&&(o=11);l<o;l++)t="\xa0"+t;return t+"\xa0\xa0"}setChartTicks(){if(!this.chart)return;let t=0,o="",l=1.2;if(this.maxValue)l=1,[t,o]=this.convertUnits(this.maxValue).split(" ");else if(this.data){l=1.2;let C=Math.max(...this.data.map(R=>R[1]));if(this.data2){let R=Math.max(...this.data2.map(N=>N[1]));t=Math.max(C,R)}else t=C;[t,o]=this.convertUnits(t).split(" ")}const _=this.chart.chart.options.scales.yAxes[0].ticks;_.suggestedMax=t*l,_.suggestedMin=0,_.stepSize=Number((_.suggestedMax/2).toFixed(0)),_.callback=C=>0===C?null:this.fillString(o?`${C} ${o}`:`${C}`),this.chartDataUnits=o||"",this.chart.chart.update()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Bm.P),e.Y36(Rr.$),e.Y36(j2.O),e.Y36(br.n),e.Y36(Uc.H),e.Y36(G2))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-dashboard-area-chart"]],viewQuery:function(t,o){if(1&t&&e.Gf(Us.jh,5),2&t){let l;e.iGM(l=e.CRH())&&(o.chart=l.first)}},inputs:{chartTitle:"chartTitle",maxValue:"maxValue",dataUnits:"dataUnits",data:"data",data2:"data2",label:"label",label2:"label2"},features:[e.TTD],decls:14,vars:11,consts:function(){let s,t,o;return s="" + "\ufffd0\ufffd" + "",t="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",o="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",[[1,"row"],[1,"col-3","center-text"],[1,"chartTitle"],s,[3,"ngbTooltip"],t,o,[1,"col-9"],[1,"chart"],["baseChart","",3,"datasets","options","chartType","plugins"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1),e._UZ(2,"br"),e.TgZ(3,"b",2),e.SDv(4,3),e.qZA(),e._UZ(5,"br"),e.TgZ(6,"span",4),e.SDv(7,5),e.qZA(),e._UZ(8,"br"),e.TgZ(9,"span",4),e.SDv(10,6),e.qZA()(),e.TgZ(11,"div",7)(12,"div",8),e._UZ(13,"canvas",9),e.qZA()()()),2&t&&(e.xp6(4),e.pQV(o.chartTitle),e.QtT(4),e.xp6(2),e.Q6J("ngbTooltip",o.label),e.xp6(1),e.pQV(o.currentData)(o.currentDataUnits),e.QtT(7),e.xp6(2),e.Q6J("ngbTooltip",o.label2),e.xp6(1),e.pQV(o.currentData2)(o.currentDataUnits2),e.QtT(10),e.xp6(3),e.Q6J("datasets",o.chartData.dataset)("options",o.options)("chartType","line")("plugins",o.chartAreaBorderPlugin))},directives:[Pr._L,Us.jh],styles:[".center-text[_ngcontent-%COMP%]{margin-top:1.2vw;position:relative}.chart[_ngcontent-%COMP%]{height:8vh;margin-top:15px}"]}),n})();var Z2=i(45246),z2=i(40473),W2=i(67891);let Ty=(()=>{class n{constructor(t){this.pgCategoryService=t}transform(t){const o={};let l=0;return Sr().forEach(t.statuses,(_,C)=>{const R=this.pgCategoryService.getTypeByStates(C);Sr().isUndefined(o[R])&&(o[R]=0),o[R]+=_,l+=_}),{categoryPgAmount:o,total:l}}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Nb.j,16))},n.\u0275pipe=e.Yjl({name:"pgSummary",type:n,pure:!0}),n})();var Cy=i(8074);function lS(n,s){1&n&&e.GkF(0)}function uS(n,s){if(1&n&&(e.TgZ(0,"li")(1,"span",37),e.ALo(2,"healthColor"),e._uU(3),e.qZA(),e._uU(4),e.qZA()),2&n){const t=s.$implicit;e.xp6(1),e.ekj("health-warn-description","HEALTH_WARN"===t.severity),e.Q6J("ngStyle",e.lcZ(2,5,t.severity)),e.xp6(2),e.hij(" ",t.type,""),e.xp6(1),e.hij(": ",t.summary.message," ")}}function My(n,s){if(1&n&&(e.YNc(0,lS,1,0,"ng-container",35),e.TgZ(1,"ul"),e.YNc(2,uS,5,7,"li",36),e.qZA()),2&n){const t=e.oxw(2),o=e.MAs(5);e.Q6J("ngTemplateOutlet",o),e.xp6(2),e.Q6J("ngForOf",t.healthData.health.checks)}}const Oy=function(n,s){return[n,s]};function cS(n,s){if(1&n&&(e._UZ(0,"i",38),e.ALo(1,"healthIcon"),e.ALo(2,"healthColor")),2&n){const t=e.oxw(2);e.Q6J("ngClass",e.WLB(7,Oy,e.lcZ(1,3,t.healthData.health.status),t.icons.large2x))("ngStyle",e.lcZ(2,5,t.healthData.health.status))("title",t.healthData.health.status)}}function J2(n,s){if(1&n&&(e.TgZ(0,"a",39),e.SDv(1,40),e.qZA()),2&n){e.oxw();const t=e.MAs(19);e.Q6J("ngbPopover",t)}}function Ay(n,s){1&n&&(e.TgZ(0,"span",41),e.SDv(1,42),e.qZA())}const K1=function(n){return{active:n}},q1=function(n){return[n]};function Dy(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",52),e.NdJ("click",function(){return e.CHM(t),e.oxw(3).toggleAlertsWindow("danger")}),e._UZ(1,"i",53),e.TgZ(2,"span"),e._uU(3),e.qZA()()}if(2&n){const t=e.oxw(3);e.Q6J("ngClass",e.VKq(3,K1,t.showAlerts&&"critical"===t.alertType)),e.xp6(1),e.Q6J("ngClass",e.VKq(5,q1,t.icons.danger)),e.xp6(2),e.Oqu(t.prometheusAlertService.activeCriticalAlerts)}}function Q2(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",54),e.NdJ("click",function(){return e.CHM(t),e.oxw(3).toggleAlertsWindow("warning")}),e._UZ(1,"i",53),e.TgZ(2,"span"),e._uU(3),e.qZA()()}if(2&n){const t=e.oxw(3);e.Q6J("ngClass",e.VKq(3,K1,t.showAlerts&&"warning"===t.alertType)),e.xp6(1),e.Q6J("ngClass",e.VKq(5,q1,t.icons.infoCircle)),e.xp6(2),e.Oqu(t.prometheusAlertService.activeWarningAlerts)}}function X2(n,s){1&n&&e.GkF(0)}function xy(n,s){if(1&n&&(e.TgZ(0,"div",55),e._UZ(1,"hr",56),e.TgZ(2,"ngx-simplebar",57)(3,"div",58),e.YNc(4,X2,1,0,"ng-container",35),e.qZA()()()),2&n){const t=e.oxw(3),o=e.MAs(3);e.xp6(2),e.Q6J("options",t.simplebar),e.xp6(2),e.Q6J("ngTemplateOutlet",o)}}function K2(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"section",43)(1,"div",44)(2,"span",45),e.SDv(3,46),e.qZA(),e.YNc(4,Dy,4,7,"button",47),e.YNc(5,Q2,4,7,"button",48),e.TgZ(6,"div",49)(7,"button",50),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).toggleAlertsWindow("danger","true")}),e.qZA()()(),e.YNc(8,xy,5,2,"div",51),e.qZA()}if(2&n){const t=e.oxw(2);e.xp6(4),e.Q6J("ngIf",(null==t.prometheusAlertService?null:t.prometheusAlertService.activeCriticalAlerts)>0),e.xp6(1),e.Q6J("ngIf",(null==t.prometheusAlertService?null:t.prometheusAlertService.activeWarningAlerts)>0),e.xp6(2),e.uIk("aria-expanded",t.showAlerts),e.xp6(1),e.Q6J("ngIf",t.showAlerts)}}const dS=function(n,s){return{max:n,current:s}};function fS(n,s){if(1&n&&(e.ynx(0,6),e._UZ(1,"cd-dashboard-pie",59),e.BQk()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("data",e.WLB(3,dS,t.capacity.total_bytes,t.capacity.total_used_raw_bytes))("lowThreshold",t.osdSettings.nearfull_ratio)("highThreshold",t.osdSettings.full_ratio)}}function pS(n,s){if(1&n&&e._UZ(0,"cd-card-row",60),2&n){const t=e.oxw(2);e.Q6J("data",t.healthData.hosts)}}function q2(n,s){if(1&n&&e._UZ(0,"cd-card-row",61),2&n){const t=e.oxw(2);e.Q6J("data",t.healthData.mon_status.monmap.mons.length)}}function hS(n,s){if(1&n&&(e._UZ(0,"cd-card-row",63),e.ALo(1,"mgrSummary")),2&n){const t=e.oxw(3);e.Q6J("data",e.lcZ(1,1,t.healthData.mgr_map))}}function OD(n,s){if(1&n&&(e.TgZ(0,"li",18),e.YNc(1,hS,2,3,"cd-card-row",62),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.healthData.mgr_map)}}function eM(n,s){if(1&n&&(e._UZ(0,"cd-card-row",64),e.ALo(1,"osdSummary")),2&n){const t=e.oxw(2);e.Q6J("data",e.lcZ(1,1,t.healthData.osd_map))}}function e0(n,s){if(1&n&&e._UZ(0,"cd-card-row",66),2&n){const t=e.oxw(3);e.Q6J("data",t.healthData.pools.length)}}function tM(n,s){if(1&n&&(e.TgZ(0,"li",18),e.YNc(1,e0,1,1,"cd-card-row",65),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.healthData.pools)}}function Zg(n,s){if(1&n&&(e._UZ(0,"cd-card-row",67),e.ALo(1,"pgSummary")),2&n){const t=e.oxw(2);e.Q6J("data",e.lcZ(1,1,t.healthData.pg_info))}}function Rv(n,s){if(1&n&&e._UZ(0,"cd-card-row",70),2&n){const t=e.oxw(3);e.Q6J("data",t.healthData.rgw)}}function nM(n,s){if(1&n&&(e.TgZ(0,"li",68),e.YNc(1,Rv,1,1,"cd-card-row",69),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.healthData.rgw||0===t.healthData.rgw)}}function AD(n,s){if(1&n&&(e._UZ(0,"cd-card-row",73),e.ALo(1,"mdsSummary")),2&n){const t=e.oxw(3);e.Q6J("data",e.lcZ(1,1,t.healthData.fs_map))}}function _S(n,s){if(1&n&&(e.TgZ(0,"li",71),e.YNc(1,AD,2,3,"cd-card-row",72),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.healthData.fs_map)}}function rM(n,s){if(1&n&&e._UZ(0,"cd-card-row",76),2&n){const t=e.oxw(3);e.Q6J("data",t.healthData.iscsi_daemons)}}function iM(n,s){if(1&n&&(e.TgZ(0,"li",74),e.YNc(1,rM,1,1,"cd-card-row",75),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("ngIf",t.healthData.iscsi_daemons)}}function oM(n,s){if(1&n&&(e.ynx(0),e._UZ(1,"cd-dashboard-area-chart",77),e.BQk()),2&n){const t=e.oxw(2);e.xp6(1),e.Q6J("maxValue",t.capacity.total_bytes)("data",t.queriesResults.USEDCAPACITY)}}const mS=function(n){return{"d-flex":n}};function gS(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",3)(1,"div",4)(2,"cd-card",5)(3,"dl",6)(4,"dt"),e._uU(5,"FSID"),e.qZA(),e.TgZ(6,"dd"),e._uU(7),e.qZA(),e.TgZ(8,"dt"),e._uU(9,"Orchestrator"),e.qZA(),e.TgZ(10,"dd"),e.SDv(11,7),e.qZA(),e.TgZ(12,"dt"),e._uU(13,"Ceph version"),e.qZA(),e.TgZ(14,"dd"),e._uU(15),e.qZA()()(),e.TgZ(16,"cd-card",8)(17,"div",9),e.YNc(18,My,3,2,"ng-template",null,10,e.W1O),e.YNc(20,cS,3,10,"i",11),e.YNc(21,J2,2,1,"a",12),e.YNc(22,Ay,2,0,"span",13),e.qZA(),e.YNc(23,K2,9,4,"section",14),e.qZA(),e.TgZ(24,"cd-card",15),e.YNc(25,fS,2,6,"ng-container",16),e.qZA()(),e.TgZ(26,"div",4)(27,"cd-card",17),e._UZ(28,"hr"),e.TgZ(29,"li",18),e.YNc(30,pS,1,1,"cd-card-row",19),e.qZA(),e._UZ(31,"hr"),e.TgZ(32,"li",18),e.YNc(33,q2,1,1,"cd-card-row",20),e.qZA(),e._UZ(34,"hr"),e.YNc(35,OD,2,1,"li",21),e._UZ(36,"hr"),e.TgZ(37,"li",18),e.YNc(38,eM,2,3,"cd-card-row",22),e.qZA(),e._UZ(39,"hr"),e.YNc(40,tM,2,1,"li",21),e._UZ(41,"hr"),e.TgZ(42,"li",18),e.YNc(43,Zg,2,3,"cd-card-row",23),e.qZA(),e._UZ(44,"hr"),e.YNc(45,nM,2,1,"li",24),e._UZ(46,"hr"),e.YNc(47,_S,2,1,"li",25),e._UZ(48,"hr"),e.YNc(49,iM,2,1,"li",26),e.qZA(),e.TgZ(50,"cd-card",27)(51,"div",28)(52,"cd-dashboard-time-selector",29),e.NdJ("selectedTime",function(l){return e.CHM(t),e.oxw().getPrometheusData(l)}),e.qZA(),e.YNc(53,oM,2,2,"ng-container",30),e._UZ(54,"cd-dashboard-area-chart",31)(55,"cd-dashboard-area-chart",32)(56,"cd-dashboard-area-chart",33)(57,"cd-dashboard-area-chart",34),e.qZA()()()()}if(2&n){const t=s.ngIf,o=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(27,mS,o.flexHeight)),e.xp6(5),e.Oqu(o.detailsCardData.fsid),e.xp6(4),e.pQV(o.detailsCardData.orchestrator||"Orchestrator is not available"),e.QtT(11),e.xp6(4),e.Oqu(o.detailsCardData.cephVersion),e.xp6(5),e.Q6J("ngIf",null==o.healthData.health?null:o.healthData.health.status),e.xp6(1),e.Q6J("ngIf",null==o.healthData.health||null==o.healthData.health.checks?null:o.healthData.health.checks.length),e.xp6(1),e.Q6J("ngIf",!(null!=o.healthData.health&&null!=o.healthData.health.checks&&o.healthData.health.checks.length)),e.xp6(1),e.Q6J("ngIf",o.isAlertmanagerConfigured&&(o.prometheusAlertService.activeCriticalAlerts||o.prometheusAlertService.activeWarningAlerts)),e.xp6(1),e.Q6J("ngClass",e.VKq(29,mS,o.flexHeight)),e.xp6(1),e.Q6J("ngIf",o.capacity&&o.osdSettings),e.xp6(5),e.Q6J("ngIf",null!=o.healthData.hosts),e.xp6(3),e.Q6J("ngIf",o.healthData.mon_status),e.xp6(2),e.Q6J("ngIf",o.healthData.mgr_map),e.xp6(3),e.Q6J("ngIf",o.healthData.osd_map),e.xp6(2),e.Q6J("ngIf",o.healthData.pools),e.xp6(3),e.Q6J("ngIf",o.healthData.pg_info),e.xp6(2),e.Q6J("ngIf",t.rgw&&null!=o.healthData.rgw),e.xp6(2),e.Q6J("ngIf",t.cephfs&&o.healthData.fs_map),e.xp6(2),e.Q6J("ngIf",t.iscsi&&null!=o.healthData.iscsi_daemons),e.xp6(4),e.Q6J("ngIf",o.capacity),e.xp6(1),e.Q6J("data",o.queriesResults.OPS)("data2",o.queriesResults.IPS),e.xp6(1),e.Q6J("data",o.queriesResults.READLATENCY)("data2",o.queriesResults.WRITELATENCY),e.xp6(1),e.Q6J("data",o.queriesResults.READCLIENTTHROUGHPUT)("data2",o.queriesResults.WRITECLIENTTHROUGHPUT),e.xp6(1),e.Q6J("data",o.queriesResults.RECOVERYBYTES)}}const vS=function(n,s,t){return[n,s,t]};function Ry(n,s){if(1&n&&(e.TgZ(0,"div",53)(1,"div",79)(2,"div",80)(3,"div",81)(4,"span",53),e._UZ(5,"i",53)(6,"i",53),e.qZA()(),e.TgZ(7,"div",82)(8,"div",58)(9,"h6",83),e._uU(10),e.qZA(),e._UZ(11,"p",84),e.TgZ(12,"p",85)(13,"small",86),e.SDv(14,87),e.ALo(15,"cdDate"),e.ALo(16,"relativeDate"),e.qZA()()()()()(),e._UZ(17,"hr"),e.qZA()),2&n){const t=e.oxw().$implicit,o=e.oxw(2);e.Q6J("ngClass",o.borderClass),e.xp6(4),e.Q6J("ngClass",e.kEZ(12,vS,o.icons.stack,o.icons.large,o.textClass)),e.xp6(1),e.Q6J("ngClass",e.WLB(16,Oy,o.icons.circle,o.icons.stack2x)),e.xp6(1),e.Q6J("ngClass",e.kEZ(19,vS,o.icons.stack1x,o.icons.inverse,o.icons.warning)),e.xp6(4),e.Oqu(t.labels.alertname),e.xp6(1),e.Q6J("innerHtml",t.annotations.summary,e.oJD),e.xp6(2),e.Q6J("title",e.lcZ(15,8,t.startsAt)),e.xp6(3),e.pQV(e.lcZ(16,10,t.startsAt)),e.QtT(14)}}function t0(n,s){if(1&n&&(e.ynx(0),e.YNc(1,Ry,18,23,"div",78),e.BQk()),2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(1),e.Q6J("ngIf",o.alertType===t.labels.severity)}}function wv(n,s){if(1&n&&e.YNc(0,t0,2,1,"ng-container",36),2&n){const t=e.oxw();e.Q6J("ngForOf",t.alerts)}}function sM(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"p",88),e.tHW(2,89),e._UZ(3,"i",53)(4,"a",90),e.N_p(),e.qZA(),e.BQk()),2&n){const t=e.oxw(2);e.xp6(3),e.Q6J("ngClass",e.VKq(1,q1,t.icons.infoCircle))}}function yS(n,s){if(1&n&&e.YNc(0,sM,5,3,"ng-container",30),2&n){const t=e.oxw();e.Q6J("ngIf",t.permissions.log.read)}}let ES=(()=>{class n extends Mv{constructor(t,o,l,_,C,R,N,V,Q){super(N),this.summaryService=t,this.orchestratorService=o,this.osdService=l,this.authStorageService=_,this.featureToggles=C,this.healthService=R,this.prometheusService=N,this.refreshIntervalService=V,this.prometheusAlertService=Q,this.detailsCardData={},this.interval=new ic.w,this.icons=wo.P,this.showAlerts=!1,this.flexHeight=!0,this.simplebar={autoHide:!1},this.categoryPgAmount={},this.totalPgs=0,this.queriesResults={USEDCAPACITY:"",IPS:"",OPS:"",READLATENCY:"",WRITELATENCY:"",READCLIENTTHROUGHPUT:"",WRITECLIENTTHROUGHPUT:"",RECOVERYBYTES:""},this.timerTime=3e4,this.lastHourDateObject={start:ls()().unix()-3600,end:ls()().unix(),step:12},this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}ngOnInit(){super.ngOnInit(),this.interval=this.refreshIntervalService.intervalData$.subscribe(()=>{this.getHealth(),this.getCapacityCardData()}),this.getPrometheusData(this.lastHourDateObject),this.getDetailsCardData()}ngOnDestroy(){this.interval.unsubscribe(),this.timerGetPrometheusDataSub&&this.timerGetPrometheusDataSub.unsubscribe()}getHealth(){this.healthService.getMinimalHealth().subscribe(t=>{this.healthData=t})}toggleAlertsWindow(t,o=!1){this.triggerPrometheusAlerts(),(o||!this.showAlerts||this.alertType===t&&"danger"!==t||"warning"!==this.alertType&&"danger"===t)&&(this.showAlerts=!this.showAlerts,this.flexHeight=!this.flexHeight),this.alertType="danger"===t?"critical":t,this.textClass=`text-${t}`,this.borderClass=`border-${t}`}getDetailsCardData(){this.healthService.getClusterFsid().subscribe(t=>{this.detailsCardData.fsid=t}),this.orchestratorService.getName().subscribe(t=>{this.detailsCardData.orchestrator=t}),this.summaryService.subscribe(t=>{const o=t.version.replace("ceph version ","").split(" ");this.detailsCardData.cephVersion=o[0]+" "+o.slice(2,o.length).join(" ")})}getCapacityCardData(){this.osdSettingsService=this.osdService.getOsdSettings().pipe((0,Bh.q)(1)).subscribe(t=>{this.osdSettings=t}),this.capacityService=this.healthService.getClusterCapacity().subscribe(t=>{this.capacity=t})}triggerPrometheusAlerts(){this.prometheusService.ifAlertmanagerConfigured(()=>{this.prometheusService.getAlerts().subscribe(t=>{this.alerts=t})})}getPrometheusData(t){this.prometheusService.ifPrometheusConfigured(()=>{this.timerGetPrometheusDataSub&&this.timerGetPrometheusDataSub.unsubscribe(),this.timerGetPrometheusDataSub=(0,ai.H)(0,this.timerTime).subscribe(()=>{t=this.updateTimeStamp(t);for(const o in cg)if(cg.hasOwnProperty(o)){const l=cg[o];let _=t.step;l.includes("rate")&&t.step<20?_=20:l.includes("rate")&&(_=2*t.step);const C=l.replace(/\[(.*?)\]/g,`[${_}s]`);this.prometheusService.getPrometheusData({params:C,start:t.start,end:t.end,step:t.step}).subscribe(R=>{R.result.length&&(this.queriesResults[o]=R.result[0].values)})}})})}updateTimeStamp(t){let o={};return o={start:t.start+this.timerTime/1e3,end:t.end+this.timerTime/1e3,step:t.step},o}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Ym.J),e.Y36(h),e.Y36(rc),e.Y36(Vi.j),e.Y36(Yg.l),e.Y36(Ib),e.Y36(mm),e.Y36(gy),e.Y36(lg))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-dashboard-v3"]],features:[e.qOj],decls:6,vars:3,consts:function(){let s,t,o,l,_,C,R,N;return s="" + "\ufffd0\ufffd" + "",t="Cluster",o="Cluster",l="Alerts",_="Danger",C="Warning",R="Active since: " + "\ufffd0\ufffd" + "",N="" + "\ufffd#3\ufffd" + "" + "\ufffd/#3\ufffd" + " See " + "\ufffd#4\ufffd" + "Logs" + "\ufffd/#4\ufffd" + " for more details.",[["class","container-fluid",4,"ngIf"],["alertsCard",""],["logsLink",""],[1,"container-fluid"],[1,"row","mx-0"],["cardTitle","Details","aria-label","Details card",1,"col-sm-3","px-3",3,"ngClass"],[1,"ms-4","me-4"],s,["cardTitle","Status","aria-label","Status card",1,"col-sm-6","px-3","d-flex"],[1,"d-flex","ms-4","me-4","mb-5","center-content"],["healthChecks",""],[3,"ngClass","ngStyle","title",4,"ngIf"],["class","ms-2 mt-n1 lead text-primary","popoverClass","info-card-popover-cluster-status",3,"ngbPopover",4,"ngIf"],["class","ms-2 mt-n1 lead",4,"ngIf"],["class","border-top mt-5",4,"ngIf"],["cardTitle","Capacity","aria-label","Capacity card",1,"col-sm-3","px-3",3,"ngClass"],["class","ms-4 me-4",4,"ngIf"],["cardTitle","Inventory","aria-label","Inventory card",1,"col-sm-3","px-3","d-flex"],[1,"list-group-item"],["link","/hosts","title","Host","summaryType","simplified",3,"data",4,"ngIf"],["link","/monitor","title","Monitor","summaryType","simplified",3,"data",4,"ngIf"],["class","list-group-item",4,"ngIf"],["link","/osd","title","OSD","summaryType","osd",3,"data",4,"ngIf"],["title","PG",3,"data",4,"ngIf"],["class","list-group-item","id","rgw-item",4,"ngIf"],["class","list-group-item","id","mds-item",4,"ngIf"],["class","list-group-item","id","iscsi-item",4,"ngIf"],["cardTitle","Cluster utilization","aria-label","Cluster utilization card",1,"col-sm-9","px-3","d-flex"],[1,"ms-4","me-4","mt-0"],[3,"selectedTime"],[4,"ngIf"],["chartTitle","IOPS","dataUnits","","label","OPS","label2","IPS",3,"data","data2"],["chartTitle","Latency","dataUnits","ms","label","Read","label2","Write",3,"data","data2"],["chartTitle","Client Throughput","dataUnits","B/s","label","Read","label2","Write",3,"data","data2"],["chartTitle","Recovery Throughput","dataUnits","B/s","label","Recovery Throughput",3,"data"],[4,"ngTemplateOutlet"],[4,"ngFor","ngForOf"],[3,"ngStyle"],[3,"ngClass","ngStyle","title"],["popoverClass","info-card-popover-cluster-status",1,"ms-2","mt-n1","lead","text-primary",3,"ngbPopover"],t,[1,"ms-2","mt-n1","lead"],o,[1,"border-top","mt-5"],[1,"d-flex","flex-wrap","ms-4","me-4"],[1,"pt-2"],l,["class","btn btn-outline-danger rounded-pill ms-2","title",_,"id","dangerAlerts",3,"ngClass","click",4,"ngIf"],["class","btn btn-outline-warning rounded-pill ms-2","title",C,"id","warningAlerts",3,"ngClass","click",4,"ngIf"],[1,"pt-0","position-right"],["data-toggle","collapse","aria-label","toggle alert window",1,"btn","btn-block","dropdown-toggle",3,"click"],["class","alerts pt-0",4,"ngIf"],["title",_,"id","dangerAlerts",1,"btn","btn-outline-danger","rounded-pill","ms-2",3,"ngClass","click"],[3,"ngClass"],["title",C,"id","warningAlerts",1,"btn","btn-outline-warning","rounded-pill","ms-2",3,"ngClass","click"],[1,"alerts","pt-0"],[1,"mt-4"],[3,"options"],[1,"card-body","ps-0","pe-1","pt-1"],[3,"data","lowThreshold","highThreshold"],["link","/hosts","title","Host","summaryType","simplified",3,"data"],["link","/monitor","title","Monitor","summaryType","simplified",3,"data"],["title","Manager",3,"data",4,"ngIf"],["title","Manager",3,"data"],["link","/osd","title","OSD","summaryType","osd",3,"data"],["link","/pool","title","Pool","summaryType","simplified",3,"data",4,"ngIf"],["link","/pool","title","Pool","summaryType","simplified",3,"data"],["title","PG",3,"data"],["id","rgw-item",1,"list-group-item"],["link","/rgw/daemon","title","Object Gateway","summaryType","simplified",3,"data",4,"ngIf"],["link","/rgw/daemon","title","Object Gateway","summaryType","simplified",3,"data"],["id","mds-item",1,"list-group-item"],["title","Metadata Server",3,"data",4,"ngIf"],["title","Metadata Server",3,"data"],["id","iscsi-item",1,"list-group-item"],["link","/iscsi/daemon","title","iSCSI Gateway","summaryType","iscsi",3,"data",4,"ngIf"],["link","/iscsi/daemon","title","iSCSI Gateway","summaryType","iscsi",3,"data"],["chartTitle","Used Capacity","dataUnits","B","label","Used Capacity",3,"maxValue","data"],[3,"ngClass",4,"ngIf"],[1,"card","tc_alerts","border-0","pt-3"],[1,"row","no-gutters"],[1,"col-sm-1","text-center"],[1,"col-md-11"],[1,"card-title","bold"],[1,"card-text","me-3",3,"innerHtml"],[1,"card-text","text-muted","me-3"],[1,"date",3,"title"],R,[1,"logs-link"],N,["routerLink","/logs"]]},template:function(t,o){1&t&&(e.YNc(0,gS,58,31,"div",0),e.ALo(1,"async"),e.YNc(2,wv,1,1,"ng-template",null,1,e.W1O),e.YNc(4,yS,1,1,"ng-template",null,2,e.W1O)),2&t&&e.Q6J("ngIf",e.lcZ(1,1,o.healthData&&o.enabledFeature$))},directives:[p.O5,m2,p.mk,p.tP,p.sg,p.PC,Pr.o8,ge.o,gm.M,Dv,aS,Y2,V2,Io.yS],pipes:[p.Ov,Z1,Z2.v,z2.c,W2.H,Ty,Cy.F,Pn.N,Ed.h],styles:['.alerts[_ngcontent-%COMP%]{height:17rem}.alerts[_ngcontent-%COMP%]   div[_ngcontent-%COMP%]{padding-top:0}div[_ngcontent-%COMP%]{padding-top:20px}ngx-simplebar[_ngcontent-%COMP%]{height:18rem}hr[_ngcontent-%COMP%]{margin-bottom:2px;margin-top:2px}.position-right[_ngcontent-%COMP%]{margin-left:auto;order:2}.center-content[_ngcontent-%COMP%]{align-items:center;margin-top:30px;position:relative}button.dropdown-toggle[_ngcontent-%COMP%]{position:relative}button.dropdown-toggle[_ngcontent-%COMP%]:after{border:0;content:"\\f054";font-family:ForkAwesome;font-size:1rem;position:absolute;right:20px;transition:transform .3s ease-in-out}button.dropdown-toggle[aria-expanded=true][_ngcontent-%COMP%]:after{transform:rotate(90deg)}button.dropdown-toggle[_ngcontent-%COMP%]:focus{box-shadow:none}.list-group-item[_ngcontent-%COMP%]{border:0}dt[_ngcontent-%COMP%]{font-size:larger;margin-bottom:.3rem}dd[_ngcontent-%COMP%]{font-size:larger;margin-bottom:.8rem}']}),n})();function aM(n,s){1&n&&(e.ynx(0,4),e._UZ(1,"cd-refresh-selector")(2,"cd-health",5),e.BQk())}function lM(n,s){1&n&&e._UZ(0,"cd-dashboard-v3")}let wy=(()=>{class n{constructor(t){this.featureToggles=t,this.enabledFeature$=this.featureToggles.get()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Yg.l))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-dashboard"]],decls:7,vars:4,consts:[["aria-label","Dashboard"],["href","#main",1,"sr-only"],["class","main-padding",4,"ngIf","ngIfElse"],["dashboardV3",""],[1,"main-padding"],["id","main"]],template:function(t,o){if(1&t&&(e.TgZ(0,"main",0)(1,"a",1),e._uU(2,"skip to content"),e.qZA(),e.YNc(3,aM,3,0,"ng-container",2),e.ALo(4,"async"),e.YNc(5,lM,1,0,"ng-template",null,3,e.W1O),e.qZA()),2&t){const l=e.MAs(6);let _;e.xp6(3),e.Q6J("ngIf",!1===(null==(_=e.lcZ(4,2,o.enabledFeature$))?null:_.dashboard))("ngIfElse",l)}},directives:[p.O5,VC,Q1,ES],pipes:[p.Ov],styles:["main[_ngcontent-%COMP%]:has(cd-health){padding-top:20px}"]}),n})();var Pv=i(5304),DD=i(95152),uM=i(33394),bS=i(40205);let jm=(()=>{class n extends ga.S{constructor(t){super(),this.http=t,this.apiPath="api/nfs-ganesha",this.uiApiPath="ui-api/nfs-ganesha",this.nfsAccessType=[{value:"RW",help:"Allows all operations"},{value:"RO",help:"Allows only operations that do not modify the server"},{value:"NONE",help:"Allows no access at all"}],this.nfsFsal=[{value:"CEPH",descr:"CephFS",disabled:!1},{value:"RGW",descr:"Object Gateway",disabled:!1}],this.nfsSquash={no_root_squash:["no_root_squash","noidsquash","none"],root_id_squash:["root_id_squash","rootidsquash","rootid"],root_squash:["root_squash","rootsquash","root"],all_squash:["all_squash","allsquash","all","allanonymous","all_anonymous"]}}list(){return this.http.get(`${this.apiPath}/export`)}get(t,o){return this.http.get(`${this.apiPath}/export/${t}/${o}`)}create(t){return this.http.post(`${this.apiPath}/export`,t,{headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"})}update(t,o,l){return this.http.put(`${this.apiPath}/export/${t}/${o}`,l,{headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"})}delete(t,o){return this.http.delete(`${this.apiPath}/export/${t}/${o}`,{headers:{Accept:this.getVersionHeaderValue(2,0)},observe:"response"})}listClusters(){return this.http.get(`${this.apiPath}/cluster`,{headers:{Accept:this.getVersionHeaderValue(0,1)}})}lsDir(t,o){return t?this.http.get(`${this.uiApiPath}/lsdir/${t}?root_dir=${o}`):(0,bS._)("Please specify a filesystem volume.")}fsals(){return this.http.get(`${this.uiApiPath}/fsals`)}filesystems(){return this.http.get(`${this.uiApiPath}/cephfs/filesystems`)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var SS=i(36569);const zg=["squashHelper"];function xD(n,s){1&n&&(e.TgZ(0,"span",14)(1,"span",15),e.SDv(2,16),e.qZA()())}function TS(n,s){1&n&&(e.TgZ(0,"span"),e.SDv(1,37),e.qZA())}function cM(n,s){1&n&&(e.TgZ(0,"span"),e.ynx(1),e.SDv(2,38),e.BQk(),e._UZ(3,"br"),e.ynx(4),e.SDv(5,39),e.BQk(),e._uU(6," 192.168.0.10, 192.168.1.0/8 "),e.qZA())}function RD(n,s){if(1&n&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.value),e.xp6(1),e.Oqu(t.value)}}function CS(n,s){if(1&n&&(e.TgZ(0,"span",15),e._uU(1),e.qZA()),2&n){const t=e.oxw().index,o=e.oxw();e.xp6(1),e.hij(" ",o.getAccessTypeHelp(t)," ")}}function wD(n,s){1&n&&e.GkF(0)}function MS(n,s){if(1&n&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function Py(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div")(1,"div",17)(2,"div",18),e._uU(3),e.ALo(4,"ordinal"),e.TgZ(5,"span",19),e.NdJ("click",function(){const _=e.CHM(t).index;return e.oxw().removeClient(_)}),e._uU(6,"\xd7"),e.qZA()(),e.TgZ(7,"div",20)(8,"div",0)(9,"label",21),e.SDv(10,22),e.qZA(),e.TgZ(11,"div",23),e._UZ(12,"input",24),e.TgZ(13,"span",25),e.YNc(14,TS,2,0,"span",26),e.YNc(15,cM,7,0,"span",26),e.qZA()()(),e.TgZ(16,"div",0)(17,"label",27),e.SDv(18,28),e.qZA(),e.TgZ(19,"div",23)(20,"select",29)(21,"option",30),e._uU(22),e.qZA(),e.YNc(23,RD,2,2,"option",31),e.qZA(),e.YNc(24,CS,2,1,"span",32),e.qZA()(),e.TgZ(25,"div",0)(26,"label",33)(27,"span"),e.SDv(28,34),e.qZA(),e.YNc(29,wD,1,0,"ng-container",35),e.qZA(),e.TgZ(30,"div",23)(31,"select",36)(32,"option",30),e._uU(33),e.qZA(),e.YNc(34,MS,2,2,"option",31),e.qZA()()()()()()}if(2&n){const t=s.$implicit,o=s.index,l=e.oxw(),_=e.MAs(4);e.xp6(1),e.Q6J("formGroup",t),e.xp6(2),e.hij(" ",e.lcZ(4,10,o+1)," "),e.xp6(11),e.Q6J("ngIf",l.showError(o,"addresses",_,"required")),e.xp6(1),e.Q6J("ngIf",l.showError(o,"addresses",_,"pattern")),e.xp6(7),e.Oqu(l.getNoAccessTypeDescr()),e.xp6(1),e.Q6J("ngForOf",l.nfsAccessType),e.xp6(1),e.Q6J("ngIf",l.getValue(o,"access_type")),e.xp6(5),e.Q6J("ngTemplateOutlet",l.squashHelperTpl),e.xp6(4),e.Oqu(l.getNoSquashDescr()),e.xp6(1),e.Q6J("ngForOf",l.nfsSquash)}}const OS=function(n){return[n]};let AS=(()=>{class n{constructor(t){this.nfsService=t,this.nfsSquash=Object.keys(this.nfsService.nfsSquash),this.nfsAccessType=this.nfsService.nfsAccessType,this.icons=wo.P}ngOnInit(){Sr().forEach(this.clients,t=>{this.addClient().patchValue(t)}),this.clientsFormArray=this.form.get("clients")}getNoAccessTypeDescr(){return this.form.getValue("access_type")?`${this.form.getValue("access_type")} ${"(inherited from global config)"}`:"-- Select the access type --"}getAccessTypeHelp(t){const o=this.nfsAccessType.find(l=>this.getValue(t,"access_type")===l.value);return Sr().isObjectLike(o)?o.help:""}getNoSquashDescr(){return this.form.getValue("squash")?`${this.form.getValue("squash")} (${"inherited from global config"})`:"-- Select what kind of user id squashing is performed --"}addClient(){this.clientsFormArray=this.form.get("clients");const t="(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3}).([0-9]{1,3})([/](\\d|[1-2]\\d|3[0-2]))?)",l=new tc.d({addresses:new En.NI("",{validators:[En.kI.required,En.kI.pattern(`${t}([ ,]{1,2}${t})*`)]}),access_type:new En.NI(""),squash:new En.NI("")});return this.clientsFormArray.push(l),l}removeClient(t){this.clientsFormArray=this.form.get("clients"),this.clientsFormArray.removeAt(t)}showError(t,o,l,_){return this.form.controls.clients.controls[t].showError(o,l,_)}getValue(t,o){return this.clientsFormArray=this.form.get("clients"),this.clientsFormArray.at(t).getValue(o)}trackByFn(t){return t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(jm))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-nfs-form-client"]],contentQueries:function(t,o,l){if(1&t&&e.Suo(l,zg,7),2&t){let _;e.iGM(_=e.CRH())&&(o.squashHelperTpl=_.first)}},inputs:{form:"form",clients:"clients"},decls:15,vars:7,consts:function(){let s,t,o,l,_,C,R,N,V;return s="Clients",t="Add clients",o="Any client can access",l="Addresses",_="Access Type",C="Squash",R="This field is required.",N="Must contain one or more comma-separated values",V="For example:",[[1,"form-group","row"],[1,"cd-col-form-label"],s,[1,"cd-col-form-input",3,"formGroup"],["formDir","ngForm"],["class","no-border text-muted",4,"ngIf"],["formArrayName","clients"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"row","my-2"],[1,"col-12"],[1,"float-end"],["name","add_client",1,"btn","btn-light",3,"click"],[3,"ngClass"],t,[1,"no-border","text-muted"],[1,"form-text","text-muted"],o,[1,"card",3,"formGroup"],[1,"card-header"],["name","remove_client","ngbTooltip","Remove",1,"float-end","clickable",3,"click"],[1,"card-body"],["for","addresses",1,"cd-col-form-label","required"],l,[1,"cd-col-form-input"],["type","text","name","addresses","id","addresses","formControlName","addresses","placeholder","192.168.0.10, 192.168.1.0/8",1,"form-control"],[1,"invalid-feedback"],[4,"ngIf"],["for","access_type",1,"cd-col-form-label"],_,["name","access_type","id","access_type","formControlName","access_type",1,"form-select"],["value",""],[3,"value",4,"ngFor","ngForOf"],["class","form-text text-muted",4,"ngIf"],["for","squash",1,"cd-col-form-label"],C,[4,"ngTemplateOutlet"],["name","squash","id","squash","formControlName","squash",1,"form-select"],R,N,V,[3,"value"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"label",1),e.SDv(2,2),e.qZA(),e.TgZ(3,"div",3,4),e.YNc(5,xD,3,0,"span",5),e.ynx(6,6),e.YNc(7,Py,35,12,"div",7),e.BQk(),e.TgZ(8,"div",8)(9,"div",9)(10,"div",10)(11,"button",11),e.NdJ("click",function(){return o.addClient()}),e._UZ(12,"i",12),e.ynx(13),e.SDv(14,13),e.BQk(),e.qZA()()()()()()),2&t&&(e.xp6(3),e.Q6J("formGroup",o.form),e.xp6(2),e.Q6J("ngIf",0===o.form.get("clients").value.length),e.xp6(2),e.Q6J("ngForOf",o.clientsFormArray.controls)("ngForTrackBy",o.trackByFn),e.xp6(5),e.Q6J("ngClass",e.VKq(5,OS,o.icons.add)))},directives:[ll.P,En.JL,En.sg,Oa.V,p.O5,En.CE,p.sg,Pr._L,ge.o,En.Fj,Ll.b,En.JJ,En.u,En.EJ,En.YN,En.Kr,p.tP,p.mk],pipes:[SS.f],styles:[""]}),n})();const DS=["nfsClients"];function xS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,53),e.qZA())}function RS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,54),e.qZA())}function wS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,55),e.qZA())}function dM(n,s){if(1&n&&(e.TgZ(0,"option",56),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.cluster_id),e.xp6(1),e.Oqu(t.cluster_id)}}const fM=function(){return["create"]},pM=function(n){return{modal:n}},hM=function(n){return{outlets:n}},Nv=function(n){return["/services",n]};function PS(n,s){1&n&&(e.TgZ(0,"span",57),e.tHW(1,58),e._UZ(2,"a",59),e.N_p(),e.qZA()),2&n&&(e.xp6(2),e.Q6J("routerLink",e.VKq(6,Nv,e.VKq(4,hM,e.VKq(2,pM,e.DdM(1,fM))))))}function NS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,60),e.qZA())}function IS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,61),e.qZA())}function FS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,62),e.qZA())}function LS(n,s){if(1&n&&(e.TgZ(0,"option",63),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.value)("disabled",t.disabled),e.xp6(1),e.Oqu(t.descr)}}function kS(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,64),e.qZA())}function _M(n,s){if(1&n&&(e.TgZ(0,"span",57),e.SDv(1,65),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.pQV(t.fsalAvailabilityError),e.QtT(1)}}function $S(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,69),e.qZA())}function HS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,70),e.qZA())}function BS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,71),e.qZA())}function mM(n,s){if(1&n&&(e.TgZ(0,"option",56),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.name),e.xp6(1),e.Oqu(t.name)}}function gM(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,72),e.qZA())}function Iv(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",8)(1,"label",66),e.SDv(2,67),e.qZA(),e.TgZ(3,"div",13)(4,"select",68),e.NdJ("change",function(){return e.CHM(t),e.oxw(2).pathChangeHandler()}),e.YNc(5,$S,2,0,"option",15),e.YNc(6,HS,2,0,"option",15),e.YNc(7,BS,2,0,"option",15),e.YNc(8,mM,2,2,"option",16),e.qZA(),e.YNc(9,gM,2,0,"span",17),e.qZA()()}if(2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngIf",null===o.allFsNames),e.xp6(1),e.Q6J("ngIf",null!==o.allFsNames&&0===o.allFsNames.length),e.xp6(1),e.Q6J("ngIf",null!==o.allFsNames&&o.allFsNames.length>0),e.xp6(1),e.Q6J("ngForOf",o.allFsNames),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("fs_name",t,"required"))}}function vM(n,s){1&n&&e._UZ(0,"input",79)}function Ny(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,80),e.qZA())}const X_=function(n){return{required:n}};function yM(n,s){if(1&n&&(e.TgZ(0,"div",8)(1,"label",73),e.SDv(2,74),e.qZA(),e.TgZ(3,"div",13)(4,"div",26),e._UZ(5,"input",75),e.TgZ(6,"label",76),e.SDv(7,77),e.qZA()(),e._UZ(8,"br"),e.YNc(9,vM,1,0,"input",78),e.YNc(10,Ny,2,0,"span",17),e.qZA()()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(3,X_,o.nfsForm.getValue("security_label"))),e.xp6(8),e.Q6J("ngIf",o.nfsForm.getValue("security_label")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("sec_label_xattr",t,"required"))}}function Iy(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,85),e.qZA())}function Fv(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,86),e.qZA())}function EM(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,87),e.qZA())}function bM(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",8)(1,"label",81)(2,"span",10),e.SDv(3,82),e.qZA(),e.TgZ(4,"cd-helper")(5,"p"),e.SDv(6,83),e.qZA()()(),e.TgZ(7,"div",13)(8,"input",84),e.NdJ("selectItem",function(){return e.CHM(t),e.oxw(2).pathChangeHandler()})("blur",function(){return e.CHM(t),e.oxw(2).pathChangeHandler()}),e.qZA(),e.YNc(9,Iy,2,0,"span",17),e.YNc(10,Fv,2,0,"span",17),e.YNc(11,EM,2,0,"span",17),e.qZA()()}if(2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(8),e.Q6J("ngbTypeahead",o.pathDataSource),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",t,"required")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",t,"pattern")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",t,"pathNameNotAllowed"))}}function SM(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,90),e.qZA())}function n0(n,s){1&n&&(e.TgZ(0,"span",57),e.tHW(1,91),e._UZ(2,"a",92),e.N_p(),e.qZA())}function r0(n,s){if(1&n&&(e.TgZ(0,"div",8)(1,"label",81)(2,"span",10),e.SDv(3,88),e.qZA()(),e.TgZ(4,"div",13),e._UZ(5,"input",89),e.YNc(6,SM,2,0,"span",17),e.YNc(7,n0,3,0,"span",17),e.qZA()()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(5),e.Q6J("ngbTypeahead",o.bucketDataSource),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",t,"required")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("path",t,"bucketNameNotAllowed"))}}function TM(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,93),e.qZA())}function CM(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,99),e.qZA())}function US(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,100),e.qZA())}function YS(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,101),e.qZA())}function Fy(n,s){if(1&n&&(e.TgZ(0,"div",8)(1,"label",94)(2,"span",10),e.SDv(3,95),e.qZA(),e.TgZ(4,"cd-helper")(5,"p"),e.tHW(6,96),e._UZ(7,"strong")(8,"strong"),e.N_p(),e.qZA(),e.TgZ(9,"p"),e.SDv(10,97),e.qZA()()(),e.TgZ(11,"div",13),e._UZ(12,"input",98),e.YNc(13,CM,2,0,"span",17),e.YNc(14,US,2,0,"span",17),e.YNc(15,YS,2,0,"span",17),e.qZA()()),2&n){e.oxw();const t=e.MAs(2),o=e.oxw();e.xp6(13),e.Q6J("ngIf",o.nfsForm.showError("pseudo",t,"required")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("pseudo",t,"pseudoAlreadyExists")),e.xp6(1),e.Q6J("ngIf",o.nfsForm.showError("pseudo",t,"pattern"))}}function jS(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,102),e.qZA())}function MM(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,103),e.qZA())}function OM(n,s){if(1&n&&(e.TgZ(0,"option",56),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t.value),e.xp6(1),e.Oqu(t.value)}}function PD(n,s){if(1&n&&(e.TgZ(0,"span",104),e._uU(1),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.hij(" ",t.getAccessTypeHelp(t.nfsForm.getValue("access_type"))," ")}}function Ly(n,s){1&n&&(e.TgZ(0,"span",105),e.tHW(1,106),e._UZ(2,"cd-doc",107),e.N_p(),e.qZA())}function ky(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,108),e.qZA())}function GS(n,s){1&n&&e.GkF(0)}function $y(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,109),e.qZA())}function Hy(n,s){1&n&&(e.TgZ(0,"option",52),e.SDv(1,110),e.qZA())}function AM(n,s){if(1&n&&(e.TgZ(0,"option",56),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function DM(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,111),e.qZA())}function xM(n,s){1&n&&(e.TgZ(0,"span",57),e.SDv(1,112),e.qZA())}function RM(n,s){1&n&&(e.TgZ(0,"cd-helper")(1,"ul",113)(2,"li")(3,"span",114),e._uU(4,"no_root_squash: "),e.qZA(),e.TgZ(5,"span"),e.SDv(6,115),e.qZA()(),e.TgZ(7,"li")(8,"span",114),e._uU(9,"root_id_squash: "),e.qZA(),e.TgZ(10,"span"),e.SDv(11,116),e.qZA()(),e.TgZ(12,"li")(13,"span",114),e._uU(14,"root_squash: "),e.qZA(),e.TgZ(15,"span"),e.SDv(16,117),e.qZA()(),e.TgZ(17,"li")(18,"span",114),e._uU(19,"all_squash: "),e.qZA(),e.TgZ(20,"span"),e.SDv(21,118),e.qZA()()()())}function VS(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1)(1,"form",2,3)(3,"div",4)(4,"div",5),e.SDv(5,6),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",7)(9,"div",8)(10,"label",9)(11,"span",10),e.SDv(12,11),e.qZA(),e.TgZ(13,"cd-helper")(14,"p"),e.SDv(15,12),e.qZA()()(),e.TgZ(16,"div",13)(17,"select",14),e.YNc(18,xS,2,0,"option",15),e.YNc(19,RS,2,0,"option",15),e.YNc(20,wS,2,0,"option",15),e.YNc(21,dM,2,2,"option",16),e.qZA(),e.YNc(22,PS,3,8,"span",17),e.qZA()(),e.TgZ(23,"div",18)(24,"div",8)(25,"label",19),e.SDv(26,20),e.qZA(),e.TgZ(27,"div",13)(28,"select",21),e.NdJ("change",function(){return e.CHM(t),e.oxw().fsalChangeHandler()}),e.YNc(29,NS,2,0,"option",15),e.YNc(30,IS,2,0,"option",15),e.YNc(31,FS,2,0,"option",15),e.YNc(32,LS,2,3,"option",22),e.qZA(),e.YNc(33,kS,2,0,"span",17),e.YNc(34,_M,2,1,"span",17),e.qZA()(),e.YNc(35,Iv,10,5,"div",23),e.qZA(),e.YNc(36,yM,11,5,"div",23),e.YNc(37,bM,12,4,"div",23),e.YNc(38,r0,8,3,"div",23),e.TgZ(39,"div",8)(40,"label",24),e.SDv(41,25),e.qZA(),e.TgZ(42,"div",13)(43,"div",26),e._UZ(44,"input",27),e.TgZ(45,"label",28),e.SDv(46,29),e.qZA()(),e.YNc(47,TM,2,0,"span",17),e.qZA()(),e.YNc(48,Fy,16,3,"div",23),e.TgZ(49,"div",8)(50,"label",30),e.SDv(51,31),e.qZA(),e.TgZ(52,"div",13)(53,"select",32),e.NdJ("change",function(){return e.CHM(t),e.oxw().accessTypeChangeHandler()}),e.YNc(54,jS,2,0,"option",15),e.YNc(55,MM,2,0,"option",15),e.YNc(56,OM,2,2,"option",16),e.qZA(),e.YNc(57,PD,2,1,"span",33),e.YNc(58,Ly,3,0,"span",34),e.YNc(59,ky,2,0,"span",17),e.qZA()(),e.TgZ(60,"div",8)(61,"label",35)(62,"span"),e.SDv(63,36),e.qZA(),e.YNc(64,GS,1,0,"ng-container",37),e.qZA(),e.TgZ(65,"div",13)(66,"select",38),e.YNc(67,$y,2,0,"option",15),e.YNc(68,Hy,2,0,"option",15),e.YNc(69,AM,2,2,"option",16),e.qZA(),e.YNc(70,DM,2,0,"span",17),e.qZA()(),e.TgZ(71,"div",8)(72,"label",39),e.SDv(73,40),e.qZA(),e.TgZ(74,"div",13)(75,"div",26),e._UZ(76,"input",41),e.TgZ(77,"label",42),e.SDv(78,43),e.qZA()(),e.TgZ(79,"div",26),e._UZ(80,"input",44),e.TgZ(81,"label",45),e.SDv(82,46),e.qZA()(),e.YNc(83,xM,2,0,"span",17),e._UZ(84,"hr"),e.qZA()(),e.TgZ(85,"cd-nfs-form-client",47,48),e.YNc(87,RM,22,0,"ng-template",null,49,e.W1O),e.qZA()(),e.TgZ(89,"div",50)(90,"cd-form-button-panel",51),e.NdJ("submitActionEvent",function(){return e.CHM(t),e.oxw().submitAction()}),e.ALo(91,"titlecase"),e.ALo(92,"upperFirst"),e.qZA()()()()()}if(2&n){const t=e.MAs(2),o=e.MAs(88),l=e.oxw();e.xp6(1),e.Q6J("formGroup",l.nfsForm),e.xp6(6),e.pQV(e.lcZ(6,36,l.action))(e.lcZ(7,38,l.resource)),e.QtT(5),e.xp6(11),e.Q6J("ngIf",null===l.allClusters),e.xp6(1),e.Q6J("ngIf",null!==l.allClusters&&0===l.allClusters.length),e.xp6(1),e.Q6J("ngIf",null!==l.allClusters&&l.allClusters.length>0),e.xp6(1),e.Q6J("ngForOf",l.allClusters),e.xp6(1),e.Q6J("ngIf",l.nfsForm.showError("cluster_id",t,"required")||0===(null==l.allClusters?null:l.allClusters.length)),e.xp6(7),e.Q6J("ngIf",null===l.allFsals),e.xp6(1),e.Q6J("ngIf",null!==l.allFsals&&0===l.allFsals.length),e.xp6(1),e.Q6J("ngIf",null!==l.allFsals&&l.allFsals.length>0),e.xp6(1),e.Q6J("ngForOf",l.allFsals),e.xp6(1),e.Q6J("ngIf",l.nfsForm.showError("name",t,"required")),e.xp6(1),e.Q6J("ngIf",l.fsalAvailabilityError),e.xp6(1),e.Q6J("ngIf","CEPH"===l.nfsForm.getValue("name")),e.xp6(1),e.Q6J("ngIf","CEPH"===l.nfsForm.getValue("name")),e.xp6(1),e.Q6J("ngIf","CEPH"===l.nfsForm.getValue("name")),e.xp6(1),e.Q6J("ngIf","RGW"===l.nfsForm.getValue("name")),e.xp6(9),e.Q6J("ngIf",l.nfsForm.showError("protocolNfsv4",t,"required")),e.xp6(1),e.Q6J("ngIf",l.nfsForm.getValue("protocolNfsv4")),e.xp6(6),e.Q6J("ngIf",null===l.nfsAccessType),e.xp6(1),e.Q6J("ngIf",null!==l.nfsAccessType&&0===l.nfsAccessType.length),e.xp6(1),e.Q6J("ngForOf",l.nfsAccessType),e.xp6(1),e.Q6J("ngIf",l.nfsForm.getValue("access_type")),e.xp6(1),e.Q6J("ngIf","RW"===l.nfsForm.getValue("access_type")&&"RGW"===l.nfsForm.getValue("name")),e.xp6(1),e.Q6J("ngIf",l.nfsForm.showError("access_type",t,"required")),e.xp6(5),e.Q6J("ngTemplateOutlet",o),e.xp6(3),e.Q6J("ngIf",null===l.nfsSquash),e.xp6(1),e.Q6J("ngIf",null!==l.nfsSquash&&0===l.nfsSquash.length),e.xp6(1),e.Q6J("ngForOf",l.nfsSquash),e.xp6(1),e.Q6J("ngIf",l.nfsForm.showError("squash",t,"required")),e.xp6(13),e.Q6J("ngIf",l.nfsForm.showError("transportUDP",t,"required")||l.nfsForm.showError("transportTCP",t,"required")),e.xp6(2),e.Q6J("form",l.nfsForm)("clients",l.clients),e.xp6(5),e.Q6J("form",l.nfsForm)("submitText",e.lcZ(91,40,l.action)+" "+e.lcZ(92,42,l.resource))}}let o0=(()=>{class n extends Ul.E{constructor(t,o,l,_,C,R,N,V,Q,oe){super(),this.authStorageService=t,this.nfsService=o,this.route=l,this.router=_,this.rgwBucketService=C,this.rgwSiteService=R,this.formBuilder=N,this.taskWrapper=V,this.cdRef=Q,this.actionLabels=oe,this.clients=[],this.isEdit=!1,this.cluster_id=null,this.export_id=null,this.allClusters=null,this.icons=wo.P,this.allFsals=[],this.allFsNames=null,this.fsalAvailabilityError=null,this.defaultAccessType={RGW:"RO"},this.nfsAccessType=this.nfsService.nfsAccessType,this.nfsSquash=Object.keys(this.nfsService.nfsSquash),this.pathDataSource=le=>le.pipe((0,xp.b)(200),(0,Ud.x)(),(0,Ac.zg)(_e=>this.getPathTypeahead(_e)),(0,Aa.U)(_e=>_e)),this.bucketDataSource=le=>le.pipe((0,xp.b)(200),(0,Ud.x)(),(0,Ac.zg)(_e=>this.getBucketTypeahead(_e))),this.permission=this.authStorageService.getPermissions().pool,this.resource="NFS export",this.createForm()}ngOnInit(){const t=[this.nfsService.listClusters(),this.nfsService.fsals(),this.nfsService.filesystems()];this.router.url.startsWith("/nfs/edit")&&(this.isEdit=!0),this.isEdit?(this.action=this.actionLabels.EDIT,this.route.params.subscribe(o=>{this.cluster_id=decodeURIComponent(o.cluster_id),this.export_id=decodeURIComponent(o.export_id),t.push(this.nfsService.get(this.cluster_id,this.export_id)),this.getData(t)}),this.nfsForm.get("cluster_id").disable()):(this.action=this.actionLabels.CREATE,this.getData(t))}getData(t){(0,Fu.D)(t).subscribe(o=>{this.resolveClusters(o[0]),this.resolveFsals(o[1]),this.resolveFilesystems(o[2]),o[3]&&this.resolveModel(o[3]),this.loadingReady()})}createForm(){this.nfsForm=new tc.d({cluster_id:new En.NI("",{validators:[En.kI.required]}),fsal:new tc.d({name:new En.NI("",{validators:[En.kI.required]}),fs_name:new En.NI("",{validators:[Ae.h.requiredIf({name:"CEPH"})]})}),path:new En.NI("/"),protocolNfsv4:new En.NI(!0),pseudo:new En.NI("",{validators:[Ae.h.requiredIf({protocolNfsv4:!0}),En.kI.pattern("^/[^><|&()]*$")]}),access_type:new En.NI("RW"),squash:new En.NI(this.nfsSquash[0]),transportUDP:new En.NI(!0,{validators:[Ae.h.requiredIf({transportTCP:!1},t=>!t)]}),transportTCP:new En.NI(!0,{validators:[Ae.h.requiredIf({transportUDP:!1},t=>!t)]}),clients:this.formBuilder.array([]),security_label:new En.NI(!1),sec_label_xattr:new En.NI("security.selinux",Ae.h.requiredIf({security_label:!0,"fsal.name":"CEPH"}))})}resolveModel(t){"CEPH"===t.fsal.name&&(t.sec_label_xattr=t.fsal.sec_label_xattr),t.protocolNfsv4=-1!==t.protocols.indexOf(4),delete t.protocols,t.transportTCP=-1!==t.transports.indexOf("TCP"),t.transportUDP=-1!==t.transports.indexOf("UDP"),delete t.transports,Object.entries(this.nfsService.nfsSquash).forEach(([o,l])=>{l.includes(t.squash)&&(t.squash=o)}),t.clients.forEach(o=>{let l="";o.addresses.forEach(_=>{l+=_+", "}),l.length>=2&&(l=l.substring(0,l.length-2)),o.addresses=l}),this.nfsForm.patchValue(t),this.setPathValidation(),this.clients=t.clients}resolveClusters(t){this.allClusters=[];for(const o of t)this.allClusters.push({cluster_id:o});!this.isEdit&&this.allClusters.length>0&&this.nfsForm.get("cluster_id").setValue(this.allClusters[0].cluster_id)}resolveFsals(t){t.forEach(o=>{const l=this.nfsService.nfsFsal.find(_=>o===_.value);Sr().isObjectLike(l)&&this.allFsals.push(l)}),!this.isEdit&&this.allFsals.length>0&&this.nfsForm.patchValue({fsal:{name:this.allFsals[0].value}})}resolveFilesystems(t){this.allFsNames=t,!this.isEdit&&t.length>0&&this.nfsForm.patchValue({fsal:{fs_name:t[0].name}})}fsalChangeHandler(){this.setPathValidation();const t=this.nfsForm.getValue("name");("RGW"===t?this.rgwSiteService.get("realms").pipe((0,Ac.zg)(l=>0===l.length?(0,nc.of)(!0):this.rgwSiteService.isDefaultRealm().pipe((0,Ac.zg)(_=>{if(!_)throw new Error("Selected realm is not the default.");return(0,nc.of)(!0)})))):this.nfsService.filesystems()).subscribe({next:()=>{this.setFsalAvailability(t,!0),this.isEdit||this.nfsForm.patchValue({path:"RGW"===t?"":"/",pseudo:this.generatePseudo(),access_type:this.updateAccessType()}),this.cdRef.detectChanges()},error:l=>{this.setFsalAvailability(t,!1,l),this.nfsForm.get("name").setValue("")}})}setFsalAvailability(t,o,l=""){this.allFsals=this.allFsals.map(_=>(_.value===t&&(_.disabled=!o,this.fsalAvailabilityError=_.disabled?"" + _.descr + " backend is not available. " + l + "":null),_))}accessTypeChangeHandler(){const t=this.nfsForm.getValue("name"),o=this.nfsForm.getValue("access_type");this.defaultAccessType[t]=o}setPathValidation(){const t=this.nfsForm.get("path");t.setValidators([En.kI.required]),"RGW"===this.nfsForm.getValue("name")?t.setAsyncValidators([Ae.h.bucketExistence(!0,this.rgwBucketService)]):t.setAsyncValidators([this.pathExistence(!0)]),this.isEdit&&t.markAsDirty()}getAccessTypeHelp(t){const o=this.nfsAccessType.find(l=>{if(t===l.value)return l});return Sr().isObjectLike(o)?o.help:""}getId(){return Sr().isString(this.nfsForm.getValue("cluster_id"))&&Sr().isString(this.nfsForm.getValue("path"))?this.nfsForm.getValue("cluster_id")+":"+this.nfsForm.getValue("path"):""}getPathTypeahead(t){if(!Sr().isString(t)||"/"===t)return(0,nc.of)([]);const o=this.nfsForm.getValue("fsal").fs_name;return this.nfsService.lsDir(o,t).pipe((0,Aa.U)(l=>l.paths.filter(_=>_.toLowerCase().includes(t)).slice(0,15)),(0,Pv.K)(()=>(0,nc.of)(["Error while retrieving paths."])))}pathChangeHandler(){this.isEdit||this.nfsForm.patchValue({pseudo:this.generatePseudo()})}getBucketTypeahead(t){return Sr().isString(t)&&"/"!==t&&""!==t?this.rgwBucketService.list().pipe((0,Aa.U)(o=>o.filter(l=>l.toLowerCase().includes(t)).slice(0,15)),(0,Pv.K)(()=>(0,nc.of)(["Error while retrieving bucket names."]))):(0,nc.of)([])}generatePseudo(){let t=this.nfsForm.getValue("pseudo");return this.nfsForm.get("pseudo")&&!this.nfsForm.get("pseudo").dirty&&(t=void 0,"CEPH"===this.nfsForm.getValue("fsal")&&(t="/cephfs",Sr().isString(this.nfsForm.getValue("path"))&&(t+=this.nfsForm.getValue("path")))),t}updateAccessType(){const t=this.nfsForm.getValue("name");let o=this.defaultAccessType[t];return o||(o="RW"),o}submitAction(){let t;const o=this.buildRequest();t=this.taskWrapper.wrapTaskAroundCall(this.isEdit?{task:new Ql.R("nfs/edit",{cluster_id:this.cluster_id,export_id:Sr().parseInt(this.export_id)}),call:this.nfsService.update(this.cluster_id,Sr().parseInt(this.export_id),o)}:{task:new Ql.R("nfs/create",{path:o.path,fsal:o.fsal,cluster_id:o.cluster_id}),call:this.nfsService.create(o)}),t.subscribe({error:l=>this.setFormErrors(l),complete:()=>this.router.navigate(["/nfs"])})}setFormErrors(t){t.error.detail&&t.error.detail.toString().includes(`Pseudo ${this.nfsForm.getValue("pseudo")} is already in use`)&&this.nfsForm.get("pseudo").setErrors({pseudoAlreadyExists:!0}),this.nfsForm.setErrors({cdSubmitButton:!0})}buildRequest(){const t=Sr().cloneDeep(this.nfsForm.value);return this.isEdit&&(t.export_id=Sr().parseInt(this.export_id)),"RGW"===t.fsal.name&&delete t.fsal.fs_name,t.protocols=[],t.protocolNfsv4?t.protocols.push(4):t.pseudo=null,delete t.protocolNfsv4,t.transports=[],t.transportTCP&&t.transports.push("TCP"),delete t.transportTCP,t.transportUDP&&t.transports.push("UDP"),delete t.transportUDP,t.clients.forEach(o=>{o.addresses=Sr().isString(o.addresses)?Sr()(o.addresses).split(/[ ,]+/).uniq().filter(l=>""!==l).value():[],o.squash||(o.squash=t.squash),o.access_type||(o.access_type=t.access_type)}),t.fsal.sec_label_xattr=!1===t.security_label||"RGW"===t.fsal.name?null:t.sec_label_xattr,delete t.sec_label_xattr,t}pathExistence(t){return o=>{if(o.pristine||!o.value)return(0,nc.of)({required:!0});const l=this.nfsForm.getValue("fsal").fs_name;return this.nfsService.lsDir(l,o.value).pipe((0,Aa.U)(_=>_.paths.includes(o.value)===t?null:{pathNameNotAllowed:!0}),(0,Pv.K)(()=>(0,nc.of)({pathNameNotAllowed:!0})))}}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(jm),e.Y36(Io.gz),e.Y36(Io.F0),e.Y36(DD.o),e.Y36(uM.I),e.Y36(jl.O),e.Y36(Sc.P),e.Y36(e.sBO),e.Y36(Mo.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-nfs-form"]],viewQuery:function(t,o){if(1&t&&e.Gf(DS,7),2&t){let l;e.iGM(l=e.CRH())&&(o.nfsClients=l.first)}},features:[e.qOj],decls:1,vars:1,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke,we,G,Dt,bt,Bt,Jt,Mn,zt,xn,Nn,zr,Hr,Vr,qr,On,Jn,Qn,ur,In,Yr,Qi,Di,ji,Wr,Bn,bn,Xr,Ni,Xi,Bo,Ao,zs,Qs,Ii,uo,bo,Qe,Pt;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Cluster",o="This is the ID of an NFS Service.",l="Storage Backend",_="NFS Protocol",C="NFSv4",R="Access Type",N="Squash",V="Transport Protocol",Q="UDP",oe="TCP",le="Loading...",_e="-- No cluster available --",ye="-- Select the cluster --",$e="This field is required. To create a new NFS cluster, " + "\ufffd#2\ufffd" + "add a new NFS Service" + "\ufffd/#2\ufffd" + ".",Ie="Loading...",ke="-- No data pools available --",we="-- Select the storage backend --",G="This field is required.",Dt="" + "\ufffd0\ufffd" + "",bt="Volume",Bt="Loading...",Jt="-- No CephFS filesystem available --",Mn="-- Select the CephFS filesystem --",zt="This field is required.",xn="Security Label",Nn="Enable security label",zr="This field is required.",Hr="CephFS Path",Vr="A path in a CephFS file system.",qr="This field is required.",On="Path need to start with a '/' and can be followed by a word",Jn="The path does not exist in the selected volume.",Qn="Bucket",ur="This field is required.",In="The bucket does not exist or is not in the default realm (if multiple realms are configured). To continue, " + "\ufffd#2\ufffd" + "create a new bucket" + "\ufffd/#2\ufffd" + ".",Yr="This field is required.",Qi="Pseudo",Di="The position that this " + "[\ufffd#7\ufffd|\ufffd#8\ufffd]" + "NFS v4" + "[\ufffd/#7\ufffd|\ufffd/#8\ufffd]" + " export occupies in the " + "[\ufffd#7\ufffd|\ufffd#8\ufffd]" + "Pseudo FS" + "[\ufffd/#7\ufffd|\ufffd/#8\ufffd]" + " (it must be unique).",Di=e.Zx4(Di),ji="By using different Pseudo options, the same Path may be exported multiple times.",Wr="This field is required.",Bn="The pseudo is already in use by another export.",bn="Pseudo needs to start with a '/' and can't contain any of the following: >, <, |, &, ( or ).",Xr="Loading...",Ni="-- No access type available --",Xi="The Object Gateway NFS backend has a number of limitations which will seriously affect applications writing to the share. Please consult the " + "\ufffd#2\ufffd" + "" + "\ufffd/#2\ufffd" + " for details before enabling write access.",Bo="This field is required.",Ao="Loading...",zs="-- No squash available --",Qs="This field is required.",Ii="This field is required.",uo="No user id squashing is performed.",bo="uid 0 and gid 0 are squashed to the Anonymous_Uid and Anonymous_Gid gid 0 in alt_groups lists is also squashed.",Qe="uid 0 and gid of any value are squashed to the Anonymous_Uid and Anonymous_Gid alt_groups lists is discarded.",Pt="All users are squashed.",[["class","cd-col-form",4,"cdFormLoading"],[1,"cd-col-form"],["name","nfsForm","novalidate","",3,"formGroup"],["formDir","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],[1,"form-group","row"],["for","cluster_id",1,"cd-col-form-label"],[1,"required"],t,o,[1,"cd-col-form-input"],["formControlName","cluster_id","name","cluster_id","id","cluster_id",1,"form-select"],["value","",4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],["formGroupName","fsal"],["for","name",1,"cd-col-form-label","required"],l,["formControlName","name","name","name","id","name",1,"form-select",3,"change"],[3,"value","disabled",4,"ngFor","ngForOf"],["class","form-group row",4,"ngIf"],["for","protocols",1,"cd-col-form-label","required"],_,[1,"custom-control","custom-checkbox"],["type","checkbox","formControlName","protocolNfsv4","name","protocolNfsv4","id","protocolNfsv4","disabled","",1,"custom-control-input"],["for","protocolNfsv4",1,"custom-control-label"],C,["for","access_type",1,"cd-col-form-label","required"],R,["formControlName","access_type","name","access_type","id","access_type",1,"form-select",3,"change"],["class","form-text text-muted",4,"ngIf"],["class","form-text text-warning",4,"ngIf"],["for","squash",1,"cd-col-form-label"],N,[4,"ngTemplateOutlet"],["name","squash","formControlName","squash","id","squash",1,"form-select"],["for","transports",1,"cd-col-form-label","required"],V,["type","checkbox","formControlName","transportUDP","name","transportUDP","id","transportUDP",1,"custom-control-input"],["for","transportUDP",1,"custom-control-label"],Q,["type","checkbox","formControlName","transportTCP","name","transportTCP","id","transportTCP",1,"custom-control-input"],["for","transportTCP",1,"custom-control-label"],oe,[3,"form","clients"],["nfsClients",""],["squashHelper",""],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["value",""],le,_e,ye,[3,"value"],[1,"invalid-feedback"],$e,[1,"btn-link",3,"routerLink"],Ie,ke,we,[3,"value","disabled"],G,Dt,["for","fs_name",1,"cd-col-form-label","required"],bt,["formControlName","fs_name","name","fs_name","id","fs_name",1,"form-select",3,"change"],Bt,Jt,Mn,zt,["for","security_label",1,"cd-col-form-label",3,"ngClass"],xn,["type","checkbox","formControlName","security_label","name","security_label","id","security_label",1,"custom-control-input"],["for","security_label",1,"custom-control-label"],Nn,["type","text","class","form-control","name","sec_label_xattr","id","sec_label_xattr","formControlName","sec_label_xattr",4,"ngIf"],["type","text","name","sec_label_xattr","id","sec_label_xattr","formControlName","sec_label_xattr",1,"form-control"],zr,["for","path",1,"cd-col-form-label"],Hr,Vr,["type","text","name","path","id","path","data-testid","fs_path","formControlName","path",1,"form-control",3,"ngbTypeahead","selectItem","blur"],qr,On,Jn,Qn,["type","text","name","path","id","path","data-testid","rgw_path","formControlName","path",1,"form-control",3,"ngbTypeahead"],ur,In,["routerLink","/rgw/bucket/create",1,"btn-link"],Yr,["for","pseudo",1,"cd-col-form-label"],Qi,Di,ji,["type","text","name","pseudo","id","pseudo","formControlName","pseudo",1,"form-control"],Wr,Bn,bn,Xr,Ni,[1,"form-text","text-muted"],[1,"form-text","text-warning"],Xi,["section","rgw-nfs"],Bo,Ao,zs,Qs,Ii,[1,"squash-helper"],[1,"squash-helper-item-value"],uo,bo,Qe,Pt]},template:function(t,o){1&t&&e.YNc(0,VS,93,44,"div",0),2&t&&e.Q6J("cdFormLoading",o.loading)},directives:[cu.y,En._Y,En.JL,En.sg,Oa.V,ll.P,xe.S,ge.o,En.EJ,En.JJ,En.u,p.O5,En.YN,En.Kr,p.sg,Io.yS,En.x0,p.mk,En.Wl,Ll.b,En.Fj,Pr.dR,yf.K,p.tP,AS,Ml.p],pipes:[p.rS,Mt.m],styles:[".cd-mb[_ngcontent-%COMP%]{margin-bottom:10px}.squash-helper[_ngcontent-%COMP%]{padding-left:1rem}.squash-helper-item-value[_ngcontent-%COMP%]{font-weight:700}"]}),n})();var By=i(38047);function ZS(n,s){if(1&n&&e._UZ(0,"cd-table-key-value",10),2&n){const t=e.oxw(2);e.Q6J("data",t.data)}}function zS(n,s){if(1&n&&e._UZ(0,"cd-table",11,12),2&n){const t=e.oxw(2);e.Q6J("data",t.clients)("columns",t.clientsColumns)}}function WS(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"nav",1,2),e.ynx(3,3),e.TgZ(4,"a",4),e.SDv(5,5),e.qZA(),e.YNc(6,ZS,1,1,"ng-template",6),e.BQk(),e.ynx(7,7),e.TgZ(8,"a",4),e.SDv(9,8),e.qZA(),e.YNc(10,zS,2,2,"ng-template",6),e.BQk(),e.qZA(),e._UZ(11,"div",9),e.BQk()),2&n){const t=e.MAs(2),o=e.oxw();e.xp6(9),e.pQV(o.clients.length),e.QtT(9),e.xp6(2),e.Q6J("ngbNavOutlet",t)}}let wM=(()=>{class n{constructor(){this.clients=[],this.clientsColumns=[{name:"Addresses",prop:"addresses",flexGrow:2},{name:"Access Type",prop:"access_type",flexGrow:1},{name:"Squash",prop:"squash",flexGrow:1}]}ngOnChanges(){this.selection&&(this.selectedItem=this.selection,this.clients=this.selectedItem.clients,this.data={},this.data["Cluster"]=this.selectedItem.cluster_id,this.data["NFS Protocol"]=this.selectedItem.protocols.map(t=>"NFSv"+t),this.data["Pseudo"]=this.selectedItem.pseudo,this.data["Access Type"]=this.selectedItem.access_type,this.data["Squash"]=this.selectedItem.squash,this.data["Transport"]=this.selectedItem.transports,this.data["Path"]=this.selectedItem.path,"CEPH"===this.selectedItem.fsal.name?(this.data["Storage Backend"]="CephFS",this.data["CephFS User"]=this.selectedItem.fsal.user_id,this.data["CephFS Filesystem"]=this.selectedItem.fsal.fs_name,this.data["Security Label"]=this.selectedItem.fsal.sec_label_xattr):(this.data["Storage Backend"]="Object Gateway",this.data["Object Gateway User"]=this.selectedItem.fsal.user_id))}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-nfs-details"]],inputs:{selection:"selection"},features:[e.TTD],decls:1,vars:1,consts:function(){let s,t;return s="Details",t="Clients (" + "\ufffd0\ufffd" + ")",[[4,"ngIf"],["ngbNav","","cdStatefulTab","nfs-details",1,"nav-tabs"],["nav","ngbNav"],["ngbNavItem","details"],["ngbNavLink",""],s,["ngbNavContent",""],["ngbNavItem","clients"],t,[3,"ngbNavOutlet"],[3,"data"],["columnMode","flex","identifier","addresses","forceIdentifier","true","selectionType","",3,"data","columns"],["table",""]]},template:function(t,o){1&t&&e.YNc(0,WS,12,2,"ng-container",0),2&t&&e.Q6J("ngIf",o.selection)},directives:[p.O5,Pr.Pz,Yn.m,Pr.nv,Pr.Vx,Pr.uN,fo.b,Tr.a,Pr.tO],styles:[""]}),n})();const JS=["nfsState"],QS=["nfsFsal"],PM=["table"];function XS(n,s){1&n&&(e.ynx(0),e.SDv(1,7),e.BQk())}function KS(n,s){1&n&&(e.ynx(0),e.SDv(1,8),e.BQk())}function Pp(n,s){if(1&n&&(e.YNc(0,XS,2,0,"ng-container",6),e.YNc(1,KS,2,0,"ng-container",6)),2&n){const t=s.value;e.Q6J("ngIf","CEPH"===t.name),e.xp6(1),e.Q6J("ngIf","RGW"===t.name)}}let Wg=(()=>{class n extends It.o{constructor(t,o,l,_,C,R){super(),this.authStorageService=t,this.modalService=o,this.nfsService=l,this.taskListService=_,this.taskWrapper=C,this.actionLabels=R,this.selection=new _n.r,this.isDefaultCluster=!1,this.builders={"nfs/create":le=>({path:le.path,cluster_id:le.cluster_id,fsal:le.fsal})},this.permission=this.authStorageService.getPermissions().nfs;const N=()=>this.selection.first()&&`${encodeURI(this.selection.first().cluster_id)}/${encodeURI(this.selection.first().export_id)}`;this.tableActions=[{permission:"create",icon:wo.P.add,routerLink:()=>"/nfs/create",canBePrimary:le=>!le.hasSingleSelection,name:this.actionLabels.CREATE},{permission:"update",icon:wo.P.edit,routerLink:()=>`/nfs/edit/${N()}`,name:this.actionLabels.EDIT},{permission:"delete",icon:wo.P.destroy,click:()=>this.deleteNfsModal(),name:this.actionLabels.DELETE}]}ngOnInit(){this.columns=[{name:"Path",prop:"path",flexGrow:2,cellTransformation:Ht.e.executing},{name:"Pseudo",prop:"pseudo",flexGrow:2},{name:"Cluster",prop:"cluster_id",flexGrow:2},{name:"Storage Backend",prop:"fsal",flexGrow:2,cellTemplate:this.nfsFsal},{name:"Access Type",prop:"access_type",flexGrow:2}],this.taskListService.init(()=>this.nfsService.list(),t=>this.prepareResponse(t),t=>this.exports=t,()=>this.onFetchError(),this.taskFilter,this.itemFilter,this.builders)}ngOnDestroy(){this.summaryDataSubscription&&this.summaryDataSubscription.unsubscribe()}prepareResponse(t){let o=[];return t.forEach(l=>{l.id=`${l.cluster_id}:${l.export_id}`,l.state="LOADING",o=o.concat(l)}),o}onFetchError(){this.table.reset(),this.viewCacheStatus={status:Ci.T.ValueException}}itemFilter(t,o){return t.cluster_id===o.metadata.cluster_id&&t.export_id===o.metadata.export_id}taskFilter(t){return["nfs/create","nfs/delete","nfs/edit"].includes(t.name)}updateSelection(t){this.selection=t}deleteNfsModal(){const t=this.selection.first().cluster_id,o=this.selection.first().export_id;this.modalRef=this.modalService.show(Oc.M,{itemDescription:"NFS export",itemNames:[`${t}:${o}`],submitActionObservable:()=>this.taskWrapper.wrapTaskAroundCall({task:new Ql.R("nfs/delete",{cluster_id:t,export_id:o}),call:this.nfsService.delete(t,o)})})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(ou.Z),e.Y36(jm),e.Y36(By.j),e.Y36(Sc.P),e.Y36(Mo.p4))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-nfs-list"]],viewQuery:function(t,o){if(1&t&&(e.Gf(JS,5),e.Gf(QS,7),e.Gf(PM,7)),2&t){let l;e.iGM(l=e.CRH())&&(o.nfsState=l.first),e.iGM(l=e.CRH())&&(o.nfsFsal=l.first),e.iGM(l=e.CRH())&&(o.table=l.first)}},features:[e._Bn([By.j]),e.qOj],decls:7,vars:7,consts:function(){let s,t;return s="CephFS",t="Object Gateway",[["columnMode","flex","identifier","id","forceIdentifier","true","selectionType","single",3,"data","columns","hasDetails","setExpandedRow","updateSelection"],["table",""],[1,"table-actions","btn-toolbar"],[1,"btn-group",3,"permission","selection","tableActions"],["cdTableDetail","",3,"selection"],["nfsFsal",""],[4,"ngIf"],s,t]},template:function(t,o){1&t&&(e.TgZ(0,"cd-table",0,1),e.NdJ("setExpandedRow",function(_){return o.setExpandedRow(_)})("updateSelection",function(_){return o.updateSelection(_)}),e.TgZ(2,"div",2),e._UZ(3,"cd-table-actions",3),e.qZA(),e._UZ(4,"cd-nfs-details",4),e.qZA(),e.YNc(5,Pp,2,2,"ng-template",null,5,e.W1O)),2&t&&(e.Q6J("data",o.exports)("columns",o.columns)("hasDetails",!0),e.xp6(3),e.Q6J("permission",o.permission)("selection",o.selection)("tableActions",o.tableActions),e.xp6(1),e.Q6J("selection",o.expandedRow))},directives:[Tr.a,Tu.K,wM,p.O5],styles:[""]}),n})(),NM=(()=>{class n{constructor(t){this.route=t,this.route.queryParams.subscribe(o=>{this.fromLink=o.fromLink||n.defaultFromLink}),this.route.params.subscribe(o=>{this.serviceId=decodeURIComponent(o.id),this.serviceType=o.type})}}return n.defaultFromLink="/hosts",n.\u0275fac=function(t){return new(t||n)(e.Y36(Io.gz))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-performance-counter"]],decls:3,vars:4,consts:[[3,"serviceType","serviceId"]],template:function(t,o){1&t&&(e.TgZ(0,"legend"),e._uU(1),e.qZA(),e._UZ(2,"cd-table-performance-counter",0)),2&t&&(e.xp6(1),e.AsE("",o.serviceType,".",o.serviceId,""),e.xp6(1),e.Q6J("serviceType",o.serviceType)("serviceId",o.serviceId))},directives:[Cv.p],styles:[""]}),n})();var Uy=i(39219),IM=i(81354),dg=i(32057);function FM(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,30),e.qZA())}function Yy(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,31),e.qZA())}function LM(n,s){if(1&n&&e._UZ(0,"cd-helper",32),2&n){const t=e.oxw();e.s9C("html",t.passwordPolicyHelpText)}}function qS(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,33),e.qZA())}function kM(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,34),e.qZA())}function $M(n,s){if(1&n&&(e.TgZ(0,"span",29),e._uU(1),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.hij(" ",t.passwordValuation," ")}}function jy(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,35),e.qZA())}function eT(n,s){1&n&&(e.TgZ(0,"span",29),e.SDv(1,36),e.qZA())}let Gy=(()=>{class n{constructor(t,o,l,_,C,R,N){this.actionLabels=t,this.notificationService=o,this.userService=l,this.authStorageService=_,this.formBuilder=C,this.router=R,this.passwordPolicyService=N,this.passwordPolicyHelpText="",this.icons=wo.P,this.action=this.actionLabels.CHANGE,this.resource="password",this.createForm()}createForm(){this.passwordPolicyService.getHelpText().subscribe(t=>{this.passwordPolicyHelpText=t}),this.userForm=this.formBuilder.group({oldpassword:[null,[En.kI.required,Ae.h.custom("notmatch",()=>this.userForm&&this.userForm.getValue("newpassword")===this.userForm.getValue("oldpassword"))]],newpassword:[null,[En.kI.required,Ae.h.custom("notmatch",()=>this.userForm&&this.userForm.getValue("oldpassword")===this.userForm.getValue("newpassword"))],[Ae.h.passwordPolicy(this.userService,()=>this.authStorageService.getUsername(),(t,o,l)=>{this.passwordStrengthLevelClass=this.passwordPolicyService.mapCreditsToCssClass(o),this.passwordValuation=Sr().defaultTo(l,"")})]],confirmnewpassword:[null,[En.kI.required]]},{validators:[Ae.h.match("newpassword","confirmnewpassword")]})}onSubmit(){if(this.userForm.pristine)return;const t=this.authStorageService.getUsername(),o=this.userForm.getValue("oldpassword"),l=this.userForm.getValue("newpassword");this.userService.changePassword(t,o,l).subscribe(()=>this.onPasswordChange(),()=>{this.userForm.setErrors({cdSubmitButton:!0})})}onPasswordChange(){this.notificationService.show(Ta.k.success,"Updated user password\""),this.router.navigate(["/login"])}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(Tl.g),e.Y36(dg.K),e.Y36(Vi.j),e.Y36(jl.O),e.Y36(Io.F0),e.Y36(IM.q))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-user-password-form"]],decls:45,vars:25,consts:function(){let s,t,o,l,_,C,R,N,V,Q;return s="" + "\ufffd0\ufffd" + " " + "\ufffd1\ufffd" + "",t="Old password",o="New password",l="Confirm new password",_="This field is required.",C="The old and new passwords must be different.",R="This field is required.",N="The old and new passwords must be different.",V="This field is required.",Q="Password confirmation doesn't match the new password.",[[1,"cd-col-form"],["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"card"],[1,"card-header"],s,[1,"card-body"],[1,"form-group","row"],["for","oldpassword",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],[1,"input-group"],["type","password","placeholder","Old password...","id","oldpassword","formControlName","oldpassword","autocomplete","new-password","autofocus","",1,"form-control"],["cdPasswordButton","oldpassword",1,"btn","btn-light"],["class","invalid-feedback",4,"ngIf"],["for","newpassword",1,"cd-col-form-label"],[1,"required"],o,["class","text-pre-wrap",3,"html",4,"ngIf"],["type","password","placeholder","Password...","id","newpassword","autocomplete","new-password","formControlName","newpassword",1,"form-control"],["type","button","cdPasswordButton","newpassword",1,"btn","btn-light"],[1,"password-strength-level"],["data-toggle","tooltip",3,"title"],["for","confirmnewpassword",1,"cd-col-form-label","required"],l,["type","password","autocomplete","new-password","placeholder","Confirm new password...","id","confirmnewpassword","formControlName","confirmnewpassword",1,"form-control"],["cdPasswordButton","confirmnewpassword",1,"btn","btn-light"],[1,"card-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],[1,"invalid-feedback"],_,C,[1,"text-pre-wrap",3,"html"],R,N,V,Q]},template:function(t,o){if(1&t&&(e.TgZ(0,"div",0)(1,"form",1,2)(3,"div",3)(4,"div",4),e.SDv(5,5),e.ALo(6,"titlecase"),e.ALo(7,"upperFirst"),e.qZA(),e.TgZ(8,"div",6)(9,"div",7)(10,"label",8),e.SDv(11,9),e.qZA(),e.TgZ(12,"div",10)(13,"div",11),e._UZ(14,"input",12)(15,"button",13),e.qZA(),e.YNc(16,FM,2,0,"span",14),e.YNc(17,Yy,2,0,"span",14),e.qZA()(),e.TgZ(18,"div",7)(19,"label",15)(20,"span",16),e.SDv(21,17),e.qZA(),e.YNc(22,LM,1,1,"cd-helper",18),e.qZA(),e.TgZ(23,"div",10)(24,"div",11),e._UZ(25,"input",19)(26,"button",20),e.qZA(),e.TgZ(27,"div",21),e._UZ(28,"div",22),e.qZA(),e.YNc(29,qS,2,0,"span",14),e.YNc(30,kM,2,0,"span",14),e.YNc(31,$M,2,1,"span",14),e.qZA()(),e.TgZ(32,"div",7)(33,"label",23),e.SDv(34,24),e.qZA(),e.TgZ(35,"div",10)(36,"div",11),e._UZ(37,"input",25)(38,"button",26),e.qZA(),e.YNc(39,jy,2,0,"span",14),e.YNc(40,eT,2,0,"span",14),e.qZA()()(),e.TgZ(41,"div",27)(42,"cd-form-button-panel",28),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.ALo(43,"titlecase"),e.ALo(44,"upperFirst"),e.qZA()()()()()),2&t){const l=e.MAs(2);e.xp6(1),e.Q6J("formGroup",o.userForm),e.xp6(6),e.pQV(e.lcZ(6,17,o.action))(e.lcZ(7,19,o.resource)),e.QtT(5),e.xp6(9),e.Q6J("ngIf",o.userForm.showError("oldpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("oldpassword",l,"notmatch")),e.xp6(5),e.Q6J("ngIf",o.passwordPolicyHelpText.length>0),e.xp6(6),e.Tol(o.passwordStrengthLevelClass),e.s9C("title",o.passwordValuation),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"notmatch")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"passwordPolicy")),e.xp6(8),e.Q6J("ngIf",o.userForm.showError("confirmnewpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("confirmnewpassword",l,"match")),e.xp6(2),e.Q6J("form",o.userForm)("submitText",e.lcZ(43,21,o.action)+" "+e.lcZ(44,23,o.resource))}},directives:[En._Y,En.JL,En.sg,Oa.V,ll.P,ge.o,En.Fj,Ll.b,En.JJ,En.u,nt.U,S_.C,p.O5,xe.S,Ml.p],pipes:[p.rS,Mt.m],styles:[""]}),n})();function s0(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,17),e.qZA())}function Vy(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,18),e.qZA())}function ND(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,19),e.qZA())}function tT(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,20),e.qZA())}function HM(n,s){if(1&n&&(e.TgZ(0,"span",16),e._uU(1),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.hij(" ",t.passwordValuation," ")}}function nT(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,21),e.qZA())}function a0(n,s){1&n&&(e.TgZ(0,"span",16),e.SDv(1,22),e.qZA())}let rT=(()=>{class n extends Gy{constructor(t,o,l,_,C,R,N,V){super(t,o,l,_,C,R,N),this.actionLabels=t,this.notificationService=o,this.userService=l,this.authStorageService=_,this.formBuilder=C,this.router=R,this.passwordPolicyService=N,this.authService=V}onPasswordChange(){this.authService.logout()}onCancel(){this.authService.logout()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Mo.p4),e.Y36(Tl.g),e.Y36(dg.K),e.Y36(Vi.j),e.Y36(jl.O),e.Y36(Io.F0),e.Y36(IM.q),e.Y36(Uy.e))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-login-password-form"]],features:[e.qOj],decls:31,vars:19,consts:function(){let s,t,o,l,_,C,R,N;return s="Please set a new password.",t="You will be redirected to the login page afterwards.",o="This field is required.",l="The old and new passwords must be different.",_="This field is required.",C="The old and new passwords must be different.",R="This field is required.",N="Password confirmation doesn't match the new password.",[s,t,["novalidate","",3,"formGroup"],["frm","ngForm"],[1,"form-group","has-feedback"],[1,"input-group"],["type","password","placeholder","Old password...","id","oldpassword","formControlName","oldpassword","autocomplete","new-password","autofocus","",1,"form-control"],["cdPasswordButton","oldpassword",1,"btn","btn-outline-light","btn-password"],["class","invalid-feedback",4,"ngIf"],["type","password","placeholder","New password...","id","newpassword","autocomplete","new-password","formControlName","newpassword",1,"form-control"],["type","button","cdPasswordButton","newpassword",1,"btn","btn-outline-light","btn-password"],[1,"password-strength-level"],["data-toggle","tooltip",3,"title"],["type","password","autocomplete","new-password","placeholder","Confirm new password...","id","confirmnewpassword","formControlName","confirmnewpassword",1,"form-control"],["cdPasswordButton","confirmnewpassword",1,"btn","btn-outline-light","btn-password"],["wrappingClass","text-right",3,"form","disabled","submitText","submitActionEvent","backActionEvent"],[1,"invalid-feedback"],o,l,_,C,R,N]},template:function(t,o){if(1&t&&(e.TgZ(0,"div")(1,"h2"),e.SDv(2,0),e.qZA(),e.TgZ(3,"h4"),e.SDv(4,1),e.qZA(),e.TgZ(5,"form",2,3)(7,"div",4)(8,"div",5),e._UZ(9,"input",6)(10,"button",7),e.qZA(),e.YNc(11,s0,2,0,"span",8),e.YNc(12,Vy,2,0,"span",8),e.qZA(),e.TgZ(13,"div",4)(14,"div",5),e._UZ(15,"input",9)(16,"button",10),e.qZA(),e.TgZ(17,"div",11),e._UZ(18,"div",12),e.qZA(),e.YNc(19,ND,2,0,"span",8),e.YNc(20,tT,2,0,"span",8),e.YNc(21,HM,2,1,"span",8),e.qZA(),e.TgZ(22,"div",4)(23,"div",5),e._UZ(24,"input",13)(25,"button",14),e.qZA(),e.YNc(26,nT,2,0,"span",8),e.YNc(27,a0,2,0,"span",8),e.qZA(),e.TgZ(28,"cd-form-button-panel",15),e.NdJ("submitActionEvent",function(){return o.onSubmit()})("backActionEvent",function(){return o.onCancel()}),e.ALo(29,"titlecase"),e.ALo(30,"upperFirst"),e.qZA()()()),2&t){const l=e.MAs(6);e.xp6(5),e.Q6J("formGroup",o.userForm),e.xp6(6),e.Q6J("ngIf",o.userForm.showError("oldpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("oldpassword",l,"notmatch")),e.xp6(6),e.Tol(o.passwordStrengthLevelClass),e.s9C("title",o.passwordValuation),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"notmatch")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("newpassword",l,"passwordPolicy")),e.xp6(5),e.Q6J("ngIf",o.userForm.showError("confirmnewpassword",l,"required")),e.xp6(1),e.Q6J("ngIf",o.userForm.showError("confirmnewpassword",l,"match")),e.xp6(1),e.Q6J("form",o.userForm)("disabled",o.userForm.invalid)("submitText",e.lcZ(29,15,o.action)+" "+e.lcZ(30,17,o.resource))}},directives:[En._Y,En.JL,En.sg,Oa.V,ll.P,ge.o,En.Fj,Ll.b,En.JJ,En.u,nt.U,S_.C,p.O5,Ml.p],pipes:[p.rS,Mt.m],styles:["cd-login-password-form h4{margin:0 0 30px}  cd-login-password-form .form-group{background-color:#2e373d;border-left:4px solid #fff}  cd-login-password-form .form-group:focus-within{border-left:4px solid #25828e}  cd-login-password-form .btn-password,   cd-login-password-form .btn-password:focus,   cd-login-password-form .form-control,   cd-login-password-form .form-control:focus{background-color:#2e373d;border:0;box-shadow:none;color:#f8f9fa;filter:none;outline:none}  cd-login-password-form .form-control::placeholder{color:#6c757d}  cd-login-password-form .btn-password:focus{outline-color:#25828e}  cd-login-password-form button.btn:not(:first-child){margin-left:5px}@keyframes autofill{to{background-color:#2e373d;color:#f8f9fa}}input[_ngcontent-%COMP%]:-webkit-autofill{animation-fill-mode:both;animation-name:autofill;border-radius:0;box-shadow:0 0 0 1000px #2e373d inset;-webkit-text-fill-color:#f8f9fa;-webkit-transition-property:none;transition-property:none}.invalid-feedback[_ngcontent-%COMP%]{padding-left:9px}.is-invalid.cd-form-control[_ngcontent-%COMP%]{border-color:transparent}"]}),n})();class BM{}function Zy(n,s){1&n&&(e.TgZ(0,"div",21),e.SDv(1,22),e.qZA())}function zy(n,s){1&n&&(e.TgZ(0,"div",21),e.SDv(1,23),e.qZA())}function ID(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",1)(1,"h1",2),e._uU(2,"Ceph login"),e.qZA(),e.TgZ(3,"form",3,4),e.NdJ("ngSubmit",function(){return e.CHM(t),e.oxw().login()}),e.TgZ(5,"div",5)(6,"label",6),e.SDv(7,7),e.qZA(),e.TgZ(8,"input",8,9),e.NdJ("ngModelChange",function(l){return e.CHM(t),e.oxw().model.username=l}),e.qZA(),e.YNc(10,Zy,2,0,"div",10),e.qZA(),e.TgZ(11,"div",11)(12,"div",12)(13,"div",13)(14,"label",14),e.SDv(15,15),e.qZA(),e.TgZ(16,"input",16,17),e.NdJ("ngModelChange",function(l){return e.CHM(t),e.oxw().model.password=l}),e.qZA(),e.YNc(18,zy,2,0,"div",10),e.qZA(),e.TgZ(19,"span",18),e._UZ(20,"button",19),e.qZA()()(),e._UZ(21,"input",20),e.qZA()()}if(2&n){const t=e.MAs(4),o=e.MAs(9),l=e.MAs(17),_=e.oxw();e.xp6(8),e.Q6J("ngModel",_.model.username),e.uIk("aria-invalid",o.invalid),e.xp6(2),e.Q6J("ngIf",(t.submitted||o.dirty)&&o.invalid),e.xp6(6),e.Q6J("ngModel",_.model.password),e.uIk("aria-invalid",l.invalid),e.xp6(2),e.Q6J("ngIf",(t.submitted||l.dirty)&&l.invalid),e.xp6(3),e.Q6J("disabled",t.invalid)}}let UM=(()=>{class n{constructor(t,o,l,_,C){this.authService=t,this.authStorageService=o,this.modalService=l,this.route=_,this.router=C,this.model=new BM,this.isLoginActive=!1,this.postInstalled=!1}ngOnInit(){if(this.authStorageService.isLoggedIn())this.router.navigate([""]);else{this.modalService.dismissAll();let t=null;if(-1!==window.location.hash.indexOf("access_token=")){t=window.location.hash.split("access_token=")[1];const o=window.location.toString();window.history.replaceState({},document.title,o.split("?")[0])}this.authService.check(t).subscribe(o=>{o.login_url?(this.postInstalled="POST_INSTALLED"===o.cluster_status,"#/login"===o.login_url?this.isLoginActive=!0:window.location.replace(o.login_url)):(this.authStorageService.set(o.username,o.permissions,o.sso,o.pwdExpirationDate),this.router.navigate([""]))})}}login(){this.authService.login(this.model).subscribe(()=>{const t=this.postInstalled?"/":"/expand-cluster";let o=Sr().get(this.route.snapshot.queryParams,"returnUrl",t);!this.postInstalled&&"/dashboard"===this.route.snapshot.queryParams.returnUrl&&(o="/expand-cluster"),this.router.navigate([o])})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Uy.e),e.Y36(Vi.j),e.Y36(ou.Z),e.Y36(Io.gz),e.Y36(Io.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-login"]],decls:1,vars:1,consts:function(){let s,t,o,l,_;return s="Username",t="Password",o="Log in",l="Username is required",_="Password is required",[["class","container",4,"ngIf"],[1,"container"],[1,"sr-only"],["name","loginForm","novalidate","",3,"ngSubmit"],["loginForm","ngForm"],[1,"form-group","has-feedback","d-flex","flex-column","py-3"],["for","username",1,"placeholder","ps-3"],s,["id","username","name","username","type","text","aria-labelledby","username","required","","autofocus","",1,"form-control","ps-3",3,"ngModel","ngModelChange"],["username","ngModel"],["class","invalid-feedback ps-3",4,"ngIf"],["id","password-div",1,"form-group","has-feedback"],[1,"input-group","d-flex","flex-nowrap"],[1,"d-flex","flex-column","flex-grow-1","py-3"],["for","password",1,"placeholder","ps-3"],t,["id","password","name","password","type","password","aria-labelledby","password","required","",1,"form-control","ps-3",3,"ngModel","ngModelChange"],["password","ngModel"],[1,"form-group-append"],["type","button","cdPasswordButton","password","aria-label","toggle-password",1,"btn","btn-outline-light","btn-password","h-100","px-4"],["type","submit","value",o,1,"btn","btn-accent","px-5","py-2",3,"disabled"],[1,"invalid-feedback","ps-3"],l,_]},template:function(t,o){1&t&&e.YNc(0,ID,22,7,"div",0),2&t&&e.Q6J("ngIf",o.isLoginActive)},directives:[p.O5,En._Y,En.JL,En.F,ll.P,ge.o,En.Fj,Ll.b,En.Q7,nt.U,En.JJ,En.On,S_.C],styles:["cd-login .form-group{background-color:#2e373d;border-left:4px solid #fff;height:auto;margin-bottom:2rem}  cd-login .form-group:focus-within{border-left:4px solid #25828e}  cd-login .btn-password,   cd-login .btn-password:focus,   cd-login .form-control,   cd-login .form-control:focus{background-color:#2e373d;border:0;box-shadow:none;color:#f8f9fa;filter:none;outline:none}  cd-login .placeholder{color:#adb5bd}  cd-login .btn-password:focus{outline-color:#25828e}@keyframes autofill{to{background-color:#2e373d;color:#f8f9fa}}input[_ngcontent-%COMP%]:-webkit-autofill{animation-fill-mode:both;animation-name:autofill;border-radius:0;box-shadow:0 0 0 1000px #2e373d inset;-webkit-text-fill-color:#f8f9fa;-webkit-transition-property:none;transition-property:none}"]}),n})();var iT=i(72625);function oT(n,s){if(1&n&&(e.TgZ(0,"h4",14),e._uU(1),e.qZA()),2&n){const t=e.oxw(2);e.xp6(1),e.Oqu(t.message)}}function sT(n,s){if(1&n&&(e.TgZ(0,"h4"),e.tHW(1,15),e._UZ(2,"a",16),e.N_p(),e.qZA()),2&n){const t=e.oxw(2);e.xp6(2),e.s9C("href",t.docUrl,e.LSH),e.pQV(t.sectionInfo),e.QtT(1)}}function YM(n,s){if(1&n&&(e.TgZ(0,"div"),e._UZ(1,"i",10),e.TgZ(2,"div",11)(3,"h3")(4,"b"),e._uU(5),e.qZA()(),e.YNc(6,oT,2,1,"h4",12),e.YNc(7,sT,3,2,"h4",13),e.qZA()()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngClass",t.icon),e.xp6(4),e.Oqu(t.header),e.xp6(1),e.Q6J("ngIf",t.header!==t.message),e.xp6(1),e.Q6J("ngIf",t.section)}}function aT(n,s){if(1&n&&(e.TgZ(0,"button",19),e.SDv(1,20),e.qZA()),2&n){const t=e.oxw(2);e.Q6J("routerLink",t.buttonRoute),e.xp6(1),e.pQV(t.buttonName),e.QtT(1)}}function lT(n,s){if(1&n&&(e.TgZ(0,"div",17),e.YNc(1,aT,2,2,"button",18),e.qZA()),2&n){const t=e.oxw(),o=e.MAs(11);e.xp6(1),e.Q6J("ngIf",!t.uiConfig)("ngIfElse",o)}}function jM(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",22),e.NdJ("click",function(){return e.CHM(t),e.oxw(2).doConfigure()}),e.SDv(1,23),e.qZA()}if(2&n){const t=e.oxw(2);e.uIk("title",t.buttonTitle),e.xp6(1),e.pQV(t.buttonName),e.QtT(1)}}function GM(n,s){if(1&n&&e.YNc(0,jM,2,2,"button",21),2&n){const t=e.oxw();e.Q6J("ngIf",t.uiConfig)}}function uT(n,s){1&n&&(e._UZ(0,"i",24),e.TgZ(1,"div",11)(2,"h3"),e.tHW(3,25),e._UZ(4,"b"),e.N_p(),e.qZA(),e.TgZ(5,"h4",5),e.SDv(6,26),e.qZA()())}function VM(n,s){1&n&&(e.TgZ(0,"div",11)(1,"button",19),e.SDv(2,27),e.qZA()()),2&n&&(e.xp6(1),e.Q6J("routerLink","/dashboard"))}let cT=(()=>{class n{constructor(t,o,l,_){this.router=t,this.docService=o,this.http=l,this.notificationService=_}ngOnInit(){this.fetchData(),this.routerSubscription=this.router.events.pipe((0,Rp.h)(t=>t instanceof Io.m2)).subscribe(()=>{this.fetchData()})}doConfigure(){this.http.post(`ui-api/${this.uiApiPath}/configure`,{}).subscribe({next:()=>{this.notificationService.show(Ta.k.info,`Configuring ${this.component}`)},error:t=>{this.notificationService.show(Ta.k.error,t)},complete:()=>{setTimeout(()=>{this.router.navigate([this.uiApiPath]),this.notificationService.show(Ta.k.success,`Configured ${this.component}`)},3e3)}})}unloadHandler(t){t.returnValue=!1}fetchData(){try{this.router.onSameUrlNavigation="reload",this.message=history.state.message,this.header=history.state.header,this.section=history.state.section,this.sectionInfo=history.state.section_info,this.icon=history.state.icon,this.source=history.state.source,this.uiConfig=history.state.uiConfig,this.uiApiPath=history.state.uiApiPath,this.buttonRoute=history.state.button_route,this.buttonName=history.state.button_name,this.buttonTitle=history.state.button_title,this.component=history.state.component,this.docUrl=this.docService.urlGenerator(this.section)}catch(t){this.router.navigate(["/error"])}}ngOnDestroy(){this.routerSubscription&&this.routerSubscription.unsubscribe()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Io.F0),e.Y36(iT.R),e.Y36(g.eN),e.Y36(Tl.g))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-error"]],hostBindings:function(t,o){1&t&&e.NdJ("beforeunload",function(_){return o.unloadHandler(_)},!1,e.Jf7)},decls:16,vars:4,consts:function(){let s,t,o,l,_,C;return s="Please consult the " + "\ufffd#2\ufffd" + "documentation" + "\ufffd/#2\ufffd" + " on how to configure and enable the " + "\ufffd0\ufffd" + " management functionality. ",t="" + "\ufffd0\ufffd" + "",o="" + "\ufffd0\ufffd" + "",l="" + "\ufffd#4\ufffd" + "Page not Found" + "\ufffd/#4\ufffd" + "",_="Sorry, we couldn\u2019t find what you were looking for. The page you requested may have been changed or moved.",C="Go To Dashboard",[["target","_blank"],[1,"container","h-75"],[1,"row","h-100","justify-content-center","align-items-center"],[1,"blank-page"],[4,"ngIf","ngIfElse"],[1,"mt-4"],["class","text-center",4,"ngIf","ngIfElse"],["configureButtonTpl",""],["elseBlock",""],["dashboardButton",""],[1,"mx-auto","d-block",3,"ngClass"],[1,"mt-4","text-center"],["class","mt-3",4,"ngIf"],[4,"ngIf"],[1,"mt-3"],s,[3,"href"],[1,"text-center"],["class","btn btn-primary",3,"routerLink",4,"ngIf","ngIfElse"],[1,"btn","btn-primary",3,"routerLink"],t,["class","btn btn-primary",3,"click",4,"ngIf"],[1,"btn","btn-primary",3,"click"],o,[1,"fa","fa-exclamation-triangle","mx-auto","d-block","text-danger"],l,_,C]},template:function(t,o){if(1&t&&(e.TgZ(0,"head")(1,"title"),e._uU(2,"Error Page"),e.qZA(),e._UZ(3,"base",0),e.qZA(),e.TgZ(4,"div",1)(5,"div",2)(6,"div",3),e.YNc(7,YM,8,4,"div",4),e.TgZ(8,"div",5),e.YNc(9,lT,2,2,"div",6),e.qZA()()()(),e.YNc(10,GM,1,1,"ng-template",null,7,e.W1O),e.YNc(12,uT,7,0,"ng-template",null,8,e.W1O),e.YNc(14,VM,3,1,"ng-template",null,9,e.W1O)),2&t){const l=e.MAs(13),_=e.MAs(15);e.xp6(7),e.Q6J("ngIf",o.header&&o.message)("ngIfElse",l),e.xp6(2),e.Q6J("ngIf",o.buttonName&&o.buttonRoute||o.uiConfig)("ngIfElse",_)}},directives:[p.O5,p.mk,ge.o,Io.rH],styles:["h4[_ngcontent-%COMP%]{color:#495057}i[_ngcontent-%COMP%]{font-size:6em;margin-top:120px}.fa-lock[_ngcontent-%COMP%]{color:#dc3545}.fa-wrench[_ngcontent-%COMP%]{color:#25828e}"]}),n})(),dT=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-blank-layout"]],decls:1,vars:0,template:function(t,o){1&t&&e._UZ(0,"router-outlet")},directives:[Io.lC],styles:[""]}),n})();var Wy=i(92340);let fT=(()=>{class n{constructor(t,o){this.http=t,this.localeId=o}getLocale(){return this.localeId||Wy.N.default_lang}setLocale(t){document.cookie=`cd-lang=${t}`}getLanguages(){return this.http.get("ui-api/langs")}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN),e.LFG(e.soG))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var Lv=(()=>{return(n=Lv||(Lv={})).cs="\u010ce\u0161tina",n.de="Deutsch",n["en-US"]="English",n.es="Espa\xf1ol",n.fr="Fran\xe7ais",n.id="Bahasa Indonesia",n.it="Italiano",n.ja="\u65e5\u672c\u8a9e",n.ko="\ud55c\uad6d\uc5b4",n.pl="Polski",n.pt="Portugu\xeas (brasileiro)",n["zh-Hans"]="\u4e2d\u6587 (\u7b80\u4f53)",n["zh-Hant"]="\u4e2d\u6587 (\u7e41\u9ad4\uff09",Lv;var n})();function ZM(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"button",4),e.NdJ("click",function(){const _=e.CHM(t).$implicit;return e.oxw().changeLanguage(_.key)}),e._uU(2),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit;e.xp6(2),e.hij(" ",t.value," ")}}let zM=(()=>{class n{constructor(t){this.languageService=t,this.allLanguages=Lv,this.supportedLanguages={}}ngOnInit(){this.selectedLanguage=this.languageService.getLocale(),this.languageService.getLanguages().subscribe(t=>{this.supportedLanguages=Sr().pick(Lv,t)})}reloadWindow(){window.location.reload()}changeLanguage(t){this.languageService.setLocale(t),this.reloadWindow()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(fT))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-language-selector"]],decls:6,vars:4,consts:function(){let s;return s="Select a Language",[["ngbDropdown","","display","dynamic","placement","bottom-right"],["ngbDropdownToggle","","id","toggle-language-button","title",s,"role","button"],["ngbDropdownMenu","","role","listbox","aria-labelledby","toggle-language-button"],[4,"ngFor","ngForOf"],["ngbDropdownItem","","role","option",3,"click"]]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"a",1),e._uU(2),e.qZA(),e.TgZ(3,"div",2),e.YNc(4,ZM,3,1,"ng-container",3),e.ALo(5,"keyvalue"),e.qZA()()),2&t&&(e.xp6(2),e.hij(" ",o.allLanguages[o.selectedLanguage]," "),e.xp6(2),e.Q6J("ngForOf",e.lcZ(5,2,o.supportedLanguages)))},directives:[Pr.jt,Pr.iD,Pr.Vi,p.sg,ge.o,Pr.TH],pipes:[p.Nd],styles:[""]}),n})(),pT=(()=>{class n{constructor(t){this.http=t,this.baseUiURL="ui-api/login/custom_banner"}getBannerText(){return this.http.get(this.baseUiURL)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function FD(n,s){if(1&n&&(e.TgZ(0,"p",1),e._uU(1),e.qZA()),2&n){const t=s.ngIf;e.xp6(1),e.Oqu(t)}}let LD=(()=>{class n{constructor(t){this.customLoginBannerService=t}ngOnInit(){this.bannerText$=this.customLoginBannerService.getBannerText()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(pT))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-custom-login-banner"]],decls:2,vars:3,consts:[["class","login-text",4,"ngIf"],[1,"login-text"]],template:function(t,o){1&t&&(e.YNc(0,FD,2,1,"p",0),e.ALo(1,"async")),2&t&&e.Q6J("ngIf",e.lcZ(1,1,o.bannerText$))},directives:[p.O5],pipes:[p.Ov],styles:[".login-text[_ngcontent-%COMP%]{font-weight:700;margin:0;padding:12px 20% 12px 12px}"]}),n})();function kD(n,s){if(1&n&&(e.TgZ(0,"li",11)(1,"cd-doc",12),e.DtL(2,13),e.qZA()()),2&n){const t=s.$implicit;e.xp6(1),e.pQV(t.text),e.QtT(2),e.s9C("section",t.section)}}let WM=(()=>{class n{constructor(){this.docItems=[{section:"help",text:"Help"},{section:"security",text:"Security"},{section:"trademarks",text:"Trademarks"}]}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-login-layout"]],decls:16,vars:1,consts:function(){let s;return s="" + "\ufffd0\ufffd" + "",[[1,"login","full-height"],[1,"navbar","p-4"],[1,"navbar-brand"],[1,"form-inline"],[1,"container"],[1,"row","full-height"],[1,"col-sm-12","col-md-6","d-sm-block","login-form"],[1,"col-sm-12","col-md-6","d-sm-block","branding-info"],["src","assets/Ceph_Ceph_Logo_with_text_white.svg","alt","Ceph",1,"img-fluid","pb-3"],[1,"list-inline"],["class","list-inline-item p-3",4,"ngFor","ngForOf"],[1,"list-inline-item","p-3"],["noSubscribe","true",3,"section",6,"docText"],["docText",s]]},template:function(t,o){1&t&&(e.TgZ(0,"main",0)(1,"header")(2,"nav",1),e._UZ(3,"a",2),e.TgZ(4,"div",3),e._UZ(5,"cd-language-selector"),e.qZA()()(),e.TgZ(6,"section")(7,"div",4)(8,"div",5)(9,"div",6),e._UZ(10,"router-outlet"),e.qZA(),e.TgZ(11,"div",7),e._UZ(12,"img",8),e.TgZ(13,"ul",9),e.YNc(14,kD,3,2,"li",10),e.qZA(),e._UZ(15,"cd-custom-login-banner"),e.qZA()()()()()),2&t&&(e.xp6(14),e.Q6J("ngForOf",o.docItems))},directives:[Pr.M2,zM,Io.lC,p.sg,yf.K,LD],styles:["cd-login-layout .login{background-color:#374249;background-image:url(ceph_background.3fbdf95cd52530d7.gif);background-position:right bottom;background-repeat:no-repeat;color:#f8f9fa}  cd-login-layout .login header{position:absolute;width:100vw}  cd-login-layout .login header .navbar .dropdown-menu{margin-top:.2rem}  cd-login-layout .login header .navbar .dropdown-menu li a:hover{background-color:#25828e}  cd-login-layout .login section{display:inline-flex;min-height:100vh;width:100vw}  cd-login-layout .login .list-inline{margin-bottom:0;margin-left:17%}  cd-login-layout .login a{color:#fff}  cd-login-layout .login a:hover{color:#adb5bd}@media screen and (min-width: 576px){  cd-login-layout .login .login-form,   cd-login-layout .login .branding-info{padding-top:30vh}}@media screen and (max-width: 767px){  cd-login-layout .login .login-form{padding-top:10vh}  cd-login-layout .login .branding-info{padding-top:0}}"]}),n})(),hT=(()=>{class n{constructor(t,o,l){this.document=t,this.summaryService=o,this.cssHelper=l}init(){var t;this.url=null===(t=this.document.getElementById("cdFavicon"))||void 0===t?void 0:t.getAttribute("href"),this.sub=this.summaryService.subscribe(o=>{this.changeIcon(o.health_status)})}changeIcon(t){if(t===this.oldStatus)return;this.oldStatus=t;const o=this.document.getElementById("cdFavicon"),C=this.document.createElement("canvas");C.width=16,C.height=16;const R=C.getContext("2d"),N=this.document.createElement("img");N.src=this.url,N.onload=()=>{R.drawImage(N,0,0,16,16),Object.keys(Um).includes(t)&&(R.save(),R.globalCompositeOperation="destination-out",R.beginPath(),R.arc(C.width-4,4,6,0,2*Math.PI),R.fill(),R.restore(),R.beginPath(),R.arc(C.width-4,4,4,0,2*Math.PI),R.fillStyle=this.cssHelper.propertyValue(Um[t]),R.fill()),o.setAttribute("href",C.toDataURL("image/png"))}}ngOnDestroy(){var t;this.changeIcon(),null===(t=this.sub)||void 0===t||t.unsubscribe()}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(p.K0),e.LFG(Ym.J),e.LFG(Bm.P))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac}),n})();var $D=i(71099),JM=i(59193),HD=i(68307),l0=i(77393);class Jy{constructor(s,t){this.count=s,this.source=t}call(s,t){return t.subscribe(new Qy(s,this.count,this.source))}}class Qy extends l0.L{constructor(s,t,o){super(s),this.count=t,this.source=o}complete(){if(!this.isStopped){const{source:s,count:t}=this;if(0===t)return super.complete();t>-1&&(this.count=t-1),s.subscribe(this._unsubscribeAndRecycle())}}}var _T=i(2817);let mT=(()=>{class n{constructor(t){this.http=t,this.url="ui-api/motd"}get(){return this.http.get(this.url)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),QM=(()=>{class n{constructor(t){this.motdService=t,this.motdSource=new Tc.X(null),this.localStorageKey="dashboard_motd_hidden",this.motd$=this.motdSource.asObservable(),this.subscription=(0,nc.of)(!0).pipe((0,Ac.zg)(()=>this.motdService.get()),(0,Pv.K)(o=>(fu.isFunction(o.preventDefault)&&o.preventDefault(),JM.E)),(0,HD.b)(o=>this.processResponse(o)),(0,Mf.g)(6e4),function BD(n=-1){return s=>0===n?(0,JM.c)():s.lift(new Jy(n<0?-1:n-1,s))}(),(0,_T.r)()).subscribe()}ngOnDestroy(){this.subscription.unsubscribe()}hide(){const t=this.motdSource.getValue();if(t){const o=`${t.severity}:${t.md5}`;switch(t.severity){case"info":localStorage.setItem(this.localStorageKey,o),sessionStorage.removeItem(this.localStorageKey);break;case"warning":sessionStorage.setItem(this.localStorageKey,o),localStorage.removeItem(this.localStorageKey)}}this.motdSource.next(null)}processResponse(t){const o=sessionStorage.getItem(this.localStorageKey)||localStorage.getItem(this.localStorageKey);let l=fu.isNull(o);if(!l&&t){const[_,C]=o.split(":");(_!==t.severity||C!==t.md5)&&(l=!0,sessionStorage.removeItem(this.localStorageKey),localStorage.removeItem(this.localStorageKey))}l&&this.motdSource.next(t)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(mT))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var Xy=i(9837),gT=i(51907);function XM(n,s){1&n&&(e.TgZ(0,"div"),e.tHW(1,3),e._UZ(2,"strong")(3,"a",4),e.N_p(),e.qZA())}function vT(n,s){if(1&n&&(e.TgZ(0,"div"),e.tHW(1,5),e._UZ(2,"strong")(3,"a",4),e.N_p(),e.qZA()),2&n){const t=e.oxw(2);e.xp6(3),e.pQV(t.expirationDays),e.QtT(1)}}function UD(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-alert-panel",1),e.NdJ("dismissed",function(){return e.CHM(t),e.oxw().onDismissed()}),e.YNc(1,XM,4,0,"div",2),e.YNc(2,vT,4,1,"div",2),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("type",t.alertType)("showTitle",!1)("dismissible","danger"!==t.alertType),e.xp6(1),e.Q6J("ngIf",0===t.expirationDays),e.xp6(1),e.Q6J("ngIf",t.expirationDays>0)}}let KM=(()=>{class n{constructor(t,o){this.settingsService=t,this.authStorageService=o,this.displayNotification=!1}ngOnInit(){this.settingsService.getStandardSettings().subscribe(t=>{this.pwdExpirationSettings=new gT.G(t);const o=this.authStorageService.getPwdExpirationDate();o&&(this.expirationDays=this.getExpirationDays(o),this.alertType=this.expirationDays<=this.pwdExpirationSettings.pwdExpirationWarning2?"danger":"warning",this.displayNotification=this.expirationDays<=this.pwdExpirationSettings.pwdExpirationWarning1,this.authStorageService.isPwdDisplayedSource.next(this.displayNotification))})}ngOnDestroy(){this.authStorageService.isPwdDisplayedSource.next(!1)}getExpirationDays(t){const o=new Date,l=new Date(1e3*t);return Math.floor((l.valueOf()-o.valueOf())/864e5)}onDismissed(){this.authStorageService.isPwdDisplayedSource.next(!1),this.displayNotification=!1}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Xy.g),e.Y36(Vi.j))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-pwd-expiration-notification"]],decls:1,vars:1,consts:function(){let s,t;return s="Your password will expire in " + "\ufffd#2\ufffd" + "less than 1" + "\ufffd/#2\ufffd" + " day. Click " + "\ufffd#3\ufffd" + "here" + "\ufffd/#3\ufffd" + " to change it now.",t="Your password will expire in " + "\ufffd#2\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#2\ufffd" + " day(s). Click " + "\ufffd#3\ufffd" + "here" + "\ufffd/#3\ufffd" + " to change it now.",[["class","no-margin-bottom","size","slim",3,"type","showTitle","dismissible","dismissed",4,"ngIf"],["size","slim",1,"no-margin-bottom",3,"type","showTitle","dismissible","dismissed"],[4,"ngIf"],s,["routerLink","/user-profile/edit",1,"alert-link"],t]},template:function(t,o){1&t&&e.YNc(0,UD,3,5,"cd-alert-panel",0),2&t&&e.Q6J("ngIf",o.displayNotification)},directives:[p.O5,yo.G,Io.yS],styles:[".no-margin-bottom[_ngcontent-%COMP%]{margin-bottom:0}"]}),n})();function qM(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-alert-panel",1),e.NdJ("dismissed",function(){return e.CHM(t),e.oxw().onDismissed()}),e.TgZ(1,"div"),e.tHW(2,2),e._UZ(3,"a",3)(4,"a",4),e.N_p(),e.qZA()()}if(2&n){const t=e.oxw();e.Q6J("showTitle",!1)("type",t.notificationSeverity)("dismissible","danger"!==t.notificationSeverity)}}let Ky=(()=>{class n{constructor(t,o,l,_){this.mgrModuleService=t,this.authStorageService=o,this.notificationService=l,this.telemetryNotificationService=_,this.displayNotification=!1,this.notificationSeverity="warning"}ngOnInit(){if(this.telemetryNotificationService.update.subscribe(t=>{this.displayNotification=t}),!this.isNotificationHidden()){const t=this.authStorageService.getPermissions().configOpt;Sr().every(Object.values(t))&&this.mgrModuleService.getConfig("telemetry").subscribe(o=>{o.enabled||this.telemetryNotificationService.setVisibility(!0)})}}ngOnDestroy(){this.telemetryNotificationService.setVisibility(!1)}isNotificationHidden(){return"true"===localStorage.getItem("telemetry_notification_hidden")}onDismissed(){this.telemetryNotificationService.setVisibility(!1),localStorage.setItem("telemetry_notification_hidden","true"),this.notificationService.show(Ta.k.success,"Telemetry activation reminder muted","You can activate the module on the Telemetry configuration page (<b>Dashboard Settings</b> -> <b>Telemetry configuration</b>) at any time.")}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(xm.N),e.Y36(Vi.j),e.Y36(Tl.g),e.Y36(G1))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-telemetry-notification"]],decls:1,vars:1,consts:function(){let s;return s="The Ceph community needs your help to continue improving: please " + "\ufffd#3\ufffd" + "Activate" + "[\ufffd/#3\ufffd|\ufffd/#4\ufffd]" + " the " + "\ufffd#4\ufffd" + "Telemetry" + "[\ufffd/#3\ufffd|\ufffd/#4\ufffd]" + " module.",s=e.Zx4(s),[["class","no-margin-bottom","size","slim",3,"showTitle","type","dismissible","dismissed",4,"ngIf"],["size","slim",1,"no-margin-bottom",3,"showTitle","type","dismissible","dismissed"],s,["routerLink","/telemetry",1,"btn","activate-button","alert-link","activate-text"],["href","https://docs.ceph.com/en/latest/mgr/telemetry/"]]},template:function(t,o){1&t&&e.YNc(0,qM,5,3,"cd-alert-panel",0),2&t&&e.Q6J("ngIf",o.displayNotification)},directives:[p.O5,yo.G,Io.yS],styles:[".no-margin-bottom[_ngcontent-%COMP%]{font-size:.875rem;margin-bottom:0}.activate-button[_ngcontent-%COMP%]{background-color:#fcecba;border:#495057 solid .5px;border-radius:10%;padding:.1rem .4rem}.activate-text[_ngcontent-%COMP%]{color:#495057;font-weight:700}a[_ngcontent-%COMP%]{color:#1a5d66;font-weight:700}"]}),n})();var eO=i(60793);function YD(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-alert-panel",1),e.NdJ("dismissed",function(){return e.CHM(t),e.oxw().onDismissed()}),e._UZ(1,"span",2),e.ALo(2,"sanitizeHtml"),e.qZA()}if(2&n){const t=e.oxw();e.Q6J("showTitle",!1)("type",t.motd.severity)("dismissible","danger"!==t.motd.severity),e.xp6(1),e.Q6J("innerHTML",e.lcZ(2,4,t.motd.message),e.oJD)}}let jD=(()=>{class n{constructor(t){this.motdNotificationService=t,this.motd=void 0}ngOnInit(){this.subscription=this.motdNotificationService.motd$.subscribe(t=>{this.motd=t})}ngOnDestroy(){this.subscription.unsubscribe()}onDismissed(){this.motdNotificationService.hide()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(QM))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-motd"]],decls:1,vars:1,consts:[["size","slim",3,"showTitle","type","dismissible","dismissed",4,"ngIf"],["size","slim",3,"showTitle","type","dismissible","dismissed"],[3,"innerHTML"]],template:function(t,o){1&t&&e.YNc(0,YD,3,6,"cd-alert-panel",0),2&t&&e.Q6J("ngIf",o.motd)},directives:[p.O5,yo.G],pipes:[eO.A],styles:[""]}),n})();class tO{constructor(s){if(this._maxConcurrency=s,this._queue=[],s<=0)throw new Error("semaphore must be initialized to a positive value");this._value=s}acquire(){const s=this.isLocked(),t=new Promise(o=>this._queue.push(o));return s||this._dispatch(),t}runExclusive(s){return function(n,s,t,o){return new(t||(t=Promise))(function(_,C){function R(Q){try{V(o.next(Q))}catch(oe){C(oe)}}function N(Q){try{V(o.throw(Q))}catch(oe){C(oe)}}function V(Q){Q.done?_(Q.value):function l(_){return _ instanceof t?_:new t(function(C){C(_)})}(Q.value).then(R,N)}V((o=o.apply(n,s||[])).next())})}(this,void 0,void 0,function*(){const[t,o]=yield this.acquire();try{return yield s(t)}finally{o()}})}isLocked(){return this._value<=0}release(){if(this._maxConcurrency>1)throw new Error("this method is unavailabel on semaphores with concurrency > 1; use the scoped release returned by acquire instead");this._currentReleaser&&(this._currentReleaser(),this._currentReleaser=void 0)}_dispatch(){const s=this._queue.shift();if(!s)return;let t=!1;this._currentReleaser=()=>{t||(t=!0,this._value++,this._dispatch())},s([this._value--,this._currentReleaser])}}class rO{constructor(){this._semaphore=new tO(1)}acquire(){return function(n,s,t,o){return new(t||(t=Promise))(function(_,C){function R(Q){try{V(o.next(Q))}catch(oe){C(oe)}}function N(Q){try{V(o.throw(Q))}catch(oe){C(oe)}}function V(Q){Q.done?_(Q.value):function l(_){return _ instanceof t?_:new t(function(C){C(_)})}(Q.value).then(R,N)}V((o=o.apply(n,s||[])).next())})}(this,void 0,void 0,function*(){const[,s]=yield this._semaphore.acquire();return s})}runExclusive(s){return this._semaphore.runExclusive(()=>s())}isLocked(){return this._semaphore.isLocked()}release(){this._semaphore.release()}}let qy=(()=>{class n{constructor(t,o){this.alertFormatter=t,this.prometheusService=o,this.backendFailure=!1,this.notifications=[]}refresh(){this.backendFailure||this.prometheusService.getNotifications(Sr().last(this.notifications)).subscribe(t=>this.handleNotifications(t),()=>this.backendFailure=!0)}handleNotifications(t){0!==t.length&&(this.notifications.length>0&&this.alertFormatter.sendNotifications(Sr().flatten(t.map(o=>this.formatNotification(o)))),this.notifications=this.notifications.concat(t))}formatNotification(t){return this.alertFormatter.convertToCustomAlerts(t.alerts).map(o=>this.alertFormatter.convertAlertToNotification(o))}}return n.\u0275fac=function(t){return new(t||n)(e.LFG($1),e.LFG(mm))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var oO=i(57924),w_=i(90504);const eE=function(n,s){return[n,s]},tE=function(n,s,t,o){return[n,s,t,o]};function sO(n,s){if(1&n&&(e.TgZ(0,"div")(1,"div",11)(2,"div",12)(3,"div",13)(4,"span",14),e._UZ(5,"i",15)(6,"i",15),e.qZA()(),e.TgZ(7,"div",16)(8,"div",17)(9,"h6",18),e._uU(10),e.qZA(),e.TgZ(11,"div",19),e._UZ(12,"ngb-progressbar",20),e.qZA(),e.TgZ(13,"p",21)(14,"small",22),e._uU(15),e.ALo(16,"cdDate"),e.qZA(),e.TgZ(17,"span",23),e._uU(18),e.qZA()()()()()(),e._UZ(19,"hr"),e.qZA()),2&n){const t=s.$implicit,o=e.oxw(2);e.xp6(4),e.Q6J("ngClass",e.WLB(11,eE,o.icons.stack,o.icons.large2x)),e.xp6(1),e.Q6J("ngClass",e.WLB(14,eE,o.icons.stack2x,o.icons.circle)),e.xp6(1),e.Q6J("ngClass",e.l5B(17,tE,o.icons.stack1x,o.icons.spinner,o.icons.spin,o.icons.inverse)),e.xp6(4),e.Oqu(t.description),e.xp6(2),e.Q6J("value",null==t?null:t.progress)("striped",!0)("animated",!0),e.xp6(3),e.hij(" ",e.lcZ(16,9,t.begin_time)," "),e.xp6(3),e.hij(" ",t.progress||0," % ")}}function aO(n,s){if(1&n&&e.YNc(0,sO,20,22,"div",10),2&n){const t=e.oxw();e.Q6J("ngForOf",t.executingTasks)("ngForTrackBy",t.trackByFn)}}const fg=function(n){return[n]};function yT(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",37),e.NdJ("click",function(){e.CHM(t);const l=e.oxw().$implicit;return e.oxw(3).silence(l)}),e._UZ(1,"i",15),e.qZA()}if(2&n){const t=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,fg,t.icons.mute))}}function ET(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"button",38),e.NdJ("click",function(){e.CHM(t);const l=e.oxw().$implicit;return e.oxw(3).expire(l)}),e._UZ(1,"i",15),e.qZA()}if(2&n){const t=e.oxw(4);e.xp6(1),e.Q6J("ngClass",e.VKq(1,fg,t.icons.bell))}}function lO(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"small"),e.ynx(2),e.SDv(3,39),e.BQk(),e._uU(4),e.ALo(5,"duration"),e.qZA(),e._UZ(6,"br"),e.BQk()),2&n){const t=e.oxw().$implicit;e.xp6(4),e.hij(" ",e.lcZ(5,1,t.duration)," ")}}const nE=function(n,s,t){return[n,s,t]};function uO(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"div",15)(1,"div",29)(2,"div",12)(3,"div",13)(4,"span",15),e._UZ(5,"i",15)(6,"i",15),e.qZA()(),e.TgZ(7,"div",30)(8,"div",17)(9,"button",31),e.NdJ("click",function(l){const C=e.CHM(t).index;return e.oxw(3).remove(C),l.stopPropagation()}),e._UZ(10,"i",15),e.qZA(),e.YNc(11,yT,2,3,"button",32),e.YNc(12,ET,2,3,"button",33),e.TgZ(13,"h6",18),e._uU(14),e.qZA(),e._UZ(15,"p",34),e.TgZ(16,"p",21),e.YNc(17,lO,7,3,"ng-container",24),e.TgZ(18,"small",35),e.ALo(19,"cdDate"),e._uU(20),e.ALo(21,"relativeDate"),e.qZA(),e._UZ(22,"i",36),e.qZA()()()()(),e._UZ(23,"hr"),e.qZA()}if(2&n){const t=s.$implicit,o=e.oxw(3);e.Q6J("ngClass",t.borderClass),e.xp6(4),e.Q6J("ngClass",e.kEZ(18,nE,o.icons.stack,o.icons.large2x,t.textClass)),e.xp6(1),e.Q6J("ngClass",e.WLB(22,eE,o.icons.circle,o.icons.stack2x)),e.xp6(1),e.Q6J("ngClass",e.kEZ(25,nE,o.icons.stack1x,o.icons.inverse,t.iconClass)),e.xp6(4),e.Q6J("ngClass",e.VKq(29,fg,o.icons.trash)),e.xp6(1),e.Q6J("ngIf","Prometheus"===t.application&&2!==t.type&&!t.alertSilenced),e.xp6(1),e.Q6J("ngIf","Prometheus"===t.application&&2!==t.type&&t.alertSilenced),e.xp6(2),e.Oqu(t.title),e.xp6(1),e.Q6J("innerHtml",t.message,e.oJD),e.xp6(2),e.Q6J("ngIf",t.duration),e.xp6(1),e.Q6J("title",e.lcZ(19,14,t.timestamp)),e.xp6(2),e.Oqu(e.lcZ(21,16,t.timestamp)),e.xp6(2),e.Q6J("ngClass",e.VKq(31,fg,t.applicationClass))("title",t.application)}}function cO(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"button",25),e.NdJ("click",function(l){return e.CHM(t),e.oxw(2).removeAll(),l.stopPropagation()}),e._UZ(2,"i",26),e._uU(3," \xa0 "),e.ynx(4),e.SDv(5,27),e.BQk(),e.qZA(),e._UZ(6,"hr"),e.YNc(7,uO,24,33,"div",28),e.BQk()}if(2&n){const t=e.oxw(2);e.xp6(2),e.Q6J("ngClass",e.VKq(2,fg,t.icons.trash)),e.xp6(5),e.Q6J("ngForOf",t.notifications)}}function dO(n,s){if(1&n&&e.YNc(0,cO,8,4,"ng-container",24),2&n){const t=e.oxw();e.Q6J("ngIf",t.notifications.length>0)}}function rE(n,s){1&n&&(e.TgZ(0,"div")(1,"div",40),e.SDv(2,41),e.qZA()())}function pg(n,s){if(1&n&&e.YNc(0,rE,3,0,"div",24),2&n){const t=e.oxw();e.Q6J("ngIf",0===t.notifications.length&&0===t.executingTasks.length)}}function bT(n,s){1&n&&e.GkF(0)}function ST(n,s){1&n&&e.GkF(0)}function fO(n,s){1&n&&e.GkF(0)}let ZD=(()=>{class n{constructor(t,o,l,_,C,R,N,V,Q,oe){this.notificationService=t,this.summaryService=o,this.taskMessageService=l,this.prometheusNotificationService=_,this.succeededLabels=C,this.authStorageService=R,this.prometheusAlertService=N,this.prometheusService=V,this.ngZone=Q,this.cdRef=oe,this.isSidebarOpened=!1,this.executingTasks=[],this.subs=new ic.w,this.icons=wo.P,this.last_task="",this.mutex=new rO,this.simplebar={autoHide:!1},this.notifications=[]}ngOnDestroy(){window.clearInterval(this.interval),window.clearTimeout(this.timeout),this.subs.unsubscribe()}ngOnInit(){this.last_task=window.localStorage.getItem("last_task");const t=this.authStorageService.getPermissions();t.prometheus.read&&t.configOpt.read&&(this.triggerPrometheusAlerts(),this.ngZone.runOutsideAngular(()=>{this.interval=window.setInterval(()=>{this.ngZone.run(()=>{this.triggerPrometheusAlerts()})},5e3)})),this.subs.add(this.notificationService.data$.subscribe(o=>{this.notifications=Sr().orderBy(o,["timestamp"],["desc"]),this.cdRef.detectChanges()})),this.subs.add(this.notificationService.sidebarSubject.subscribe(o=>{this.isSidebarOpened=!o&&!this.isSidebarOpened,window.clearTimeout(this.timeout),this.timeout=window.setTimeout(()=>{this.cdRef.detectChanges()},0)})),this.subs.add(this.summaryService.subscribe(o=>{this._handleTasks(o.executing_tasks),this.mutex.acquire().then(l=>{Sr().filter(o.finished_tasks,_=>!this.last_task||ls()(_.end_time).isAfter(this.last_task)).forEach(_=>{const C=this.notificationService.finishedTaskToNotification(_,_.success),R=new k1.e(C);R.timestamp=_.end_time,R.duration=_.duration,(!this.last_task||ls()(_.end_time).isAfter(this.last_task))&&(this.last_task=_.end_time,window.localStorage.setItem("last_task",this.last_task)),this.notificationService.save(R)}),this.cdRef.detectChanges(),l()})}))}_handleTasks(t){for(const o of t)o.description=this.taskMessageService.getRunningTitle(o);this.executingTasks=t}triggerPrometheusAlerts(){this.prometheusAlertService.refresh(),this.prometheusNotificationService.refresh()}removeAll(){this.notificationService.removeAll()}remove(t){this.notificationService.remove(t)}closeSidebar(){this.isSidebarOpened=!1}trackByFn(t){return t}silence(t){const o="YYYY-MM-DD HH:mm",l="silence",_={name:"alertname",value:t.title.split(" ")[0],isRegex:!1},C={matchers:[_],startsAt:ls()(ls()().format(o)).toISOString(),endsAt:ls()(ls()().add(2,"hours").format(o)).toISOString(),createdBy:this.authStorageService.getUsername(),comment:"Silence created from the alert notification"};let R="";t.alertSilenced=!0,R=R.concat(` ${_.name} - ${_.value},`);const N=`${this.succeededLabels.CREATED} ${l} for ${R.slice(0,-1)}`;this.prometheusService.setSilence(C).subscribe(V=>{t&&(t.silenceId=V.body.silenceId),this.notificationService.show(Ta.k.success,N,void 0,void 0,"Prometheus")})}expire(t){t.alertSilenced=!1,this.prometheusService.expireSilence(t.silenceId).subscribe(()=>{this.notificationService.show(Ta.k.success,`${this.succeededLabels.EXPIRED} ${t.silenceId}`,void 0,void 0,"Prometheus")},o=>{o.application="Prometheus"})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Tl.g),e.Y36(Ym.J),e.Y36(oO.p),e.Y36(qy),e.Y36(Mo.aX),e.Y36(Vi.j),e.Y36(lg),e.Y36(mm),e.Y36(e.R0b),e.Y36(e.sBO))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-notifications-sidebar"]],hostVars:2,hostBindings:function(t,o){2&t&&e.ekj("active",o.isSidebarOpened)},decls:16,vars:5,consts:function(){let s,t,o,l,_,C,R;return s="Tasks and Notifications",t="Clear notifications",o="Remove notification",l="Silence Alert",_="Expire Silence",C="Duration:",R="There are no notifications.",[["tasksTpl",""],["notificationsTpl",""],["emptyTpl",""],[1,"card",3,"clickOutsideEnabled","clickOutside"],[1,"card-header"],s,["tabindex","-1","type","button","title","close",1,"btn-close","float-end",3,"click"],[3,"options"],[1,"card-body"],[4,"ngTemplateOutlet"],[4,"ngFor","ngForOf","ngForTrackBy"],[1,"card","tc_task","border-0"],[1,"row","no-gutters"],[1,"col-md-2","text-center"],[1,"text-info",3,"ngClass"],[3,"ngClass"],[1,"col-md-9"],[1,"card-body","p-1"],[1,"card-title","bold"],[1,"mb-1"],["type","info",3,"value","striped","animated"],[1,"card-text","text-muted"],[1,"date","float-start"],[1,"float-end"],[4,"ngIf"],["type","button",1,"btn","btn-light","btn-block",3,"click"],["aria-hidden","true",3,"ngClass"],t,[3,"ngClass",4,"ngFor","ngForOf"],[1,"card","tc_notification","border-0"],[1,"col-md-10"],["title",o,1,"btn","btn-link","float-end","mt-0","pt-0",3,"click"],["class","btn btn-link float-end text-muted mute m-0 p-0","title",l,3,"click",4,"ngIf"],["class","btn btn-link float-end text-muted mute m-0 p-0","title",_,3,"click",4,"ngIf"],[1,"card-text",3,"innerHtml"],[1,"date",3,"title"],[1,"float-end","custom-icon",3,"ngClass","title"],["title",l,1,"btn","btn-link","float-end","text-muted","mute","m-0","p-0",3,"click"],["title",_,1,"btn","btn-link","float-end","text-muted","mute","m-0","p-0",3,"click"],C,[1,"message","text-center"],R]},template:function(t,o){if(1&t&&(e.YNc(0,aO,1,2,"ng-template",null,0,e.W1O),e.YNc(2,dO,1,1,"ng-template",null,1,e.W1O),e.YNc(4,pg,1,1,"ng-template",null,2,e.W1O),e.TgZ(6,"div",3),e.NdJ("clickOutside",function(){return o.closeSidebar()}),e.TgZ(7,"div",4),e.ynx(8),e.SDv(9,5),e.BQk(),e.TgZ(10,"button",6),e.NdJ("click",function(){return o.closeSidebar()}),e.qZA()(),e.TgZ(11,"ngx-simplebar",7)(12,"div",8),e.YNc(13,bT,1,0,"ng-container",9),e.YNc(14,ST,1,0,"ng-container",9),e.YNc(15,fO,1,0,"ng-container",9),e.qZA()()()),2&t){const l=e.MAs(1),_=e.MAs(3),C=e.MAs(5);e.xp6(6),e.Q6J("clickOutsideEnabled",o.isSidebarOpened),e.xp6(5),e.Q6J("options",o.simplebar),e.xp6(2),e.Q6J("ngTemplateOutlet",l),e.xp6(1),e.Q6J("ngTemplateOutlet",_),e.xp6(1),e.Q6J("ngTemplateOutlet",C)}},directives:[p.sg,p.mk,Pr.Ly,p.O5,ge.o,w_._,gm.M,p.tP],pipes:[Pn.N,ly.u,Ed.h],styles:["[_nghost-%COMP%]{bottom:10px;max-width:90vw;position:fixed;right:-350px;top:53px;transition:all .6s;width:350px;z-index:9}.active[_nghost-%COMP%]{right:20px}.card[_ngcontent-%COMP%]{height:100%}.card-body[_ngcontent-%COMP%]{padding-left:0;padding-right:5px;padding-top:3px}ngx-simplebar[_ngcontent-%COMP%]{height:calc(100% - 42.2px)}.separator[_ngcontent-%COMP%]{background-color:#e9ecef;color:#6c757d;font-size:1rem;padding:5px 12px}.btn-block[_ngcontent-%COMP%]{width:98%}.btn-link[_ngcontent-%COMP%]   .fa-trash-o[_ngcontent-%COMP%]{color:#000}table[_ngcontent-%COMP%]{width:100%}.row[_ngcontent-%COMP%]{margin-left:0;margin-right:0;padding-bottom:1rem;padding-top:1rem}hr[_ngcontent-%COMP%]{margin-bottom:2px;margin-top:2px}"],changeDetection:0}),n})();function pO(n,s){1&n&&e._UZ(0,"span",5)}const hO=function(n){return{running:n}},_O=function(n){return[n]};let TT=(()=>{class n{constructor(t,o){this.notificationService=t,this.summaryService=o,this.icons=wo.P,this.hasRunningTasks=!1,this.hasNotifications=!1,this.subs=new ic.w}ngOnInit(){this.subs.add(this.summaryService.subscribe(t=>{this.hasRunningTasks=t.executing_tasks.length>0})),this.subs.add(this.notificationService.data$.subscribe(t=>{this.hasNotifications=t.length>0}))}ngOnDestroy(){this.subs.unsubscribe()}toggleSidebar(){this.notificationService.toggleSidebar()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Tl.g),e.Y36(Ym.J))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-notifications"]],decls:5,vars:7,consts:function(){let s,t;return s="Tasks and Notifications",t="Tasks and Notifications",[["title",s,3,"ngClass","click"],[3,"ngClass"],["class","dot",4,"ngIf"],[1,"d-md-none"],t,[1,"dot"]]},template:function(t,o){1&t&&(e.TgZ(0,"a",0),e.NdJ("click",function(){return o.toggleSidebar()}),e._UZ(1,"i",1),e.YNc(2,pO,1,0,"span",2),e.TgZ(3,"span",3),e.SDv(4,4),e.qZA()()),2&t&&(e.Q6J("ngClass",e.VKq(3,hO,o.hasRunningTasks)),e.xp6(1),e.Q6J("ngClass",e.VKq(5,_O,o.icons.bell)),e.xp6(1),e.Q6J("ngIf",o.hasNotifications))},directives:[p.mk,p.O5],styles:[".running[_ngcontent-%COMP%]   i[_ngcontent-%COMP%]{color:#25828e}.running[_ngcontent-%COMP%]:hover   i[_ngcontent-%COMP%]{color:#fff}a[_ngcontent-%COMP%]   .dot[_ngcontent-%COMP%]{background-color:#2b99a8;border:2px solid #374249;border-radius:50%;height:11px;position:absolute;right:17px;top:10px;width:10px}a[_ngcontent-%COMP%]:hover   .dot[_ngcontent-%COMP%]{background-color:#fff;border-color:#2b99a8}"]}),n})(),mO=(()=>{class n{constructor(t){this.http=t,this.baseUIURL="api/feedback"}isKeyExist(){return this.http.get("ui-api/feedback/api_key/exist")}createIssue(t,o,l,_,C){return this.http.post("api/feedback",{project:t,tracker:o,subject:l,description:_,api_key:C},{headers:{Accept:"application/vnd.ceph.api.v0.1+json"}})}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();function gO(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"cd-alert-panel",30),e.tHW(1,31),e.TgZ(2,"a",32),e.NdJ("click",function(){return e.CHM(t),e.oxw().redirect()}),e.qZA(),e.N_p(),e.qZA()}}function zD(n,s){1&n&&(e.TgZ(0,"span",37),e.SDv(1,38),e.qZA())}function iE(n,s){1&n&&(e.TgZ(0,"span",37),e.SDv(1,39),e.qZA())}function CT(n,s){if(1&n&&(e.TgZ(0,"div",33)(1,"label",34),e.SDv(2,35),e.qZA(),e.TgZ(3,"div",12),e._UZ(4,"input",36),e.YNc(5,zD,2,0,"span",17),e.YNc(6,iE,2,0,"span",17),e.qZA()()),2&n){const t=e.oxw(),o=e.MAs(5);e.xp6(5),e.Q6J("ngIf",t.feedbackForm.showError("api_key",o,"required")),e.xp6(1),e.Q6J("ngIf",t.feedbackForm.showError("api_key",o,"invalidApiKey"))}}function vO(n,s){if(1&n&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function yO(n,s){1&n&&(e.TgZ(0,"span",37),e.SDv(1,41),e.qZA())}function MT(n,s){if(1&n&&(e.TgZ(0,"option",40),e._uU(1),e.qZA()),2&n){const t=s.$implicit;e.Q6J("value",t),e.xp6(1),e.Oqu(t)}}function oE(n,s){1&n&&(e.TgZ(0,"span",37),e.SDv(1,42),e.qZA())}function sE(n,s){1&n&&(e.TgZ(0,"span",37),e.SDv(1,43),e.qZA())}function OT(n,s){1&n&&(e.TgZ(0,"span",37),e.SDv(1,44),e.qZA())}let EO=(()=>{class n{constructor(t,o,l,_,C,R){this.feedbackService=t,this.activeModal=o,this.actionLabels=l,this.secondaryModal=_,this.notificationService=C,this.router=R,this.title="Feedback",this.project=["dashboard","block","objects","file_system","ceph_manager","orchestrator","ceph_volume","core_ceph"],this.tracker=["bug","feature"],this.isAPIKeySet=!1,this.isFeedbackEnabled=!0}ngOnInit(){this.createForm(),this.keySub=this.feedbackService.isKeyExist().subscribe({next:t=>{this.isAPIKeySet=t,this.isAPIKeySet&&this.feedbackForm.get("api_key").clearValidators()},error:()=>{this.isFeedbackEnabled=!1,this.feedbackForm.disable()}})}createForm(){this.feedbackForm=new tc.d({project:new En.NI("",En.kI.required),tracker:new En.NI("",En.kI.required),subject:new En.NI("",En.kI.required),description:new En.NI("",En.kI.required),api_key:new En.NI("",En.kI.required)})}ngOnDestroy(){this.keySub.unsubscribe()}onSubmit(){this.feedbackService.createIssue(this.feedbackForm.controls.project.value,this.feedbackForm.controls.tracker.value,this.feedbackForm.controls.subject.value,this.feedbackForm.controls.description.value,this.feedbackForm.controls.api_key.value).subscribe({next:t=>{this.notificationService.show(Ta.k.success,"Issue successfully created on Ceph Issue tracker",`Go to the tracker: <a href="https://tracker.ceph.com/issues/${t.message.issue.id}" target="_blank"> ${t.message.issue.id} </a>`)},error:()=>{this.feedbackForm.get("api_key").setErrors({invalidApiKey:!0}),this.feedbackForm.setErrors({cdSubmitButton:!0})},complete:()=>{this.activeModal.close()}})}redirect(){this.activeModal.close(),this.router.navigate(["/mgr-modules"])}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(mO),e.Y36(Pr.Kz),e.Y36(Mo.p4),e.Y36(Pr.FF),e.Y36(Tl.g),e.Y36(Io.F0))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-feedback"]],decls:42,vars:12,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e;return s="Report an issue",t="Project name",o="-- Select a project --",l="Tracker",_="-- Select a tracker --",C="Subject",R="Description",N="Feedback module is not enabled. Please enable it from " + "\ufffd#2\ufffd" + "Cluster-> Manager Modules." + "\ufffd/#2\ufffd" + "",V="Ceph Tracker API Key",Q="Ceph Tracker API key is required.",oe="Ceph Tracker API key is invalid.",le="Project name is required.",_e="Tracker name is required.",ye="Subject is required.",$e="Description is required.",[[3,"modalRef"],[1,"modal-title"],s,[1,"modal-content"],["name","feedbackForm",3,"formGroup"],["formDir","ngForm"],[1,"modal-body"],["type","error",4,"ngIf"],["class","form-group row mt-3",4,"ngIf"],[1,"form-group","row"],["for","project",1,"cd-col-form-label","required"],t,[1,"cd-col-form-input"],["id","project","formControlName","project",1,"form-control"],["ngValue",""],o,[3,"value",4,"ngFor","ngForOf"],["class","invalid-feedback",4,"ngIf"],["for","tracker",1,"cd-col-form-label","required"],l,["id","tracker","formControlName","tracker",1,"form-control"],_,["for","subject",1,"cd-col-form-label","required"],C,["id","subject","type","text","formControlName","subject","placeholder","Add issue title",1,"form-control"],["for","description",1,"cd-col-form-label","required"],R,["id","description","type","text","formControlName","description","placeholder","Add issue description",1,"form-control"],[1,"modal-footer"],["wrappingClass","text-right",3,"form","submitText","submitActionEvent"],["type","error"],N,[3,"click"],[1,"form-group","row","mt-3"],["for","api_key",1,"cd-col-form-label","required"],V,["id","api_key","type","password","formControlName","api_key","placeholder","Add Ceph tracker API key",1,"form-control"],[1,"invalid-feedback"],Q,oe,[3,"value"],le,_e,ye,$e]},template:function(t,o){if(1&t&&(e.TgZ(0,"cd-modal",0)(1,"div",1),e.SDv(2,2),e.qZA(),e.TgZ(3,"div",3)(4,"form",4,5)(6,"div",6),e.YNc(7,gO,3,0,"cd-alert-panel",7),e.YNc(8,CT,7,2,"div",8),e.TgZ(9,"div",9)(10,"label",10),e.SDv(11,11),e.qZA(),e.TgZ(12,"div",12)(13,"select",13)(14,"option",14),e.SDv(15,15),e.qZA(),e.YNc(16,vO,2,2,"option",16),e.qZA(),e.YNc(17,yO,2,0,"span",17),e.qZA()(),e.TgZ(18,"div",9)(19,"label",18),e.SDv(20,19),e.qZA(),e.TgZ(21,"div",12)(22,"select",20)(23,"option",14),e.SDv(24,21),e.qZA(),e.YNc(25,MT,2,2,"option",16),e.qZA(),e.YNc(26,oE,2,0,"span",17),e.qZA()(),e.TgZ(27,"div",9)(28,"label",22),e.SDv(29,23),e.qZA(),e.TgZ(30,"div",12),e._UZ(31,"input",24),e.YNc(32,sE,2,0,"span",17),e.qZA()(),e.TgZ(33,"div",9)(34,"label",25),e.SDv(35,26),e.qZA(),e.TgZ(36,"div",12)(37,"textarea",27),e._uU(38,"            "),e.qZA(),e.YNc(39,OT,2,0,"span",17),e.qZA()()(),e.TgZ(40,"div",28)(41,"cd-form-button-panel",29),e.NdJ("submitActionEvent",function(){return o.onSubmit()}),e.qZA()()()()()),2&t){const l=e.MAs(5);e.Q6J("modalRef",o.activeModal),e.xp6(4),e.Q6J("formGroup",o.feedbackForm),e.xp6(3),e.Q6J("ngIf",!o.isFeedbackEnabled),e.xp6(1),e.Q6J("ngIf",!o.isAPIKeySet),e.xp6(8),e.Q6J("ngForOf",o.project),e.xp6(1),e.Q6J("ngIf",o.feedbackForm.showError("project",l,"required")),e.xp6(8),e.Q6J("ngForOf",o.tracker),e.xp6(1),e.Q6J("ngIf",o.feedbackForm.showError("tracker",l,"required")),e.xp6(6),e.Q6J("ngIf",o.feedbackForm.showError("subject",l,"required")),e.xp6(7),e.Q6J("ngIf",o.feedbackForm.showError("description",l,"required")),e.xp6(2),e.Q6J("form",o.feedbackForm)("submitText",o.actionLabels.SUBMIT)}},directives:[Ye.z,En._Y,En.JL,Oa.V,En.sg,p.O5,yo.G,ll.P,ge.o,En.Fj,Ll.b,En.JJ,En.u,En.EJ,En.YN,En.Kr,p.sg,Ml.p],styles:[""]}),n})();var AT=i(97057);let DT=(()=>{class n{constructor(t,o,l,_){this.activeModal=t,this.summaryService=o,this.userService=l,this.authStorageService=_,this.userPermission=this.authStorageService.getPermissions().user}ngOnInit(){this.projectConstants=Mo.$x,this.hostAddr=window.location.hostname,this.modalVariables=this.setVariables(),this.subs=this.summaryService.subscribe(t=>{const o=t.version.replace("ceph version ","").split(" ");this.hostAddr=t.mgr_host.replace(/(^\w+:|^)\/\//,"").replace(/\/$/,""),this.versionNumber=o[0],this.versionHash=o[1],this.versionName=o.slice(2,o.length).join(" ")})}ngOnDestroy(){this.subs.unsubscribe()}setVariables(){const t={};t.user=localStorage.getItem("dashboard_username"),t.role="user",this.userPermission.read&&this.userService.get(t.user).subscribe(l=>{t.role=l.roles});const o=(0,AT.qY)();return t.browserName=o&&o.name?o.name:"Not detected",t.browserVersion=o&&o.version?o.version:"Not detected",t.browserOS=o&&o.os?o.os:"Not detected",t}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Pr.Kz),e.Y36(Ym.J),e.Y36(dg.K),e.Y36(Vi.j))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-about"]],decls:44,vars:13,consts:[[1,"about-container"],[1,"modal-header"],["type","button","aria-label","Close",1,"btn-close","float-end",3,"click"],[1,"modal-body"],["src","assets/Ceph_Ceph_Logo_with_text_red_white.svg",1,"ceph-logo",3,"alt"],[1,"product-versions"],[1,"modal-footer"],[1,"text-left"]],template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"div",1)(2,"button",2),e.NdJ("click",function(){return o.activeModal.close()}),e.qZA()(),e.TgZ(3,"div",3),e._UZ(4,"img",4),e.TgZ(5,"h3")(6,"strong"),e._uU(7),e.qZA()(),e.TgZ(8,"div",5)(9,"strong"),e._uU(10,"Version"),e.qZA(),e._UZ(11,"br"),e._uU(12),e._UZ(13,"br"),e._uU(14),e.qZA(),e._UZ(15,"br"),e.TgZ(16,"dl")(17,"dt"),e._uU(18,"Ceph Manager"),e.qZA(),e.TgZ(19,"dd"),e._uU(20),e.qZA(),e.TgZ(21,"dt"),e._uU(22,"User"),e.qZA(),e.TgZ(23,"dd"),e._uU(24),e.qZA(),e.TgZ(25,"dt"),e._uU(26,"User Role"),e.qZA(),e.TgZ(27,"dd"),e._uU(28),e.qZA(),e.TgZ(29,"dt"),e._uU(30,"Browser"),e.qZA(),e.TgZ(31,"dd"),e._uU(32),e.qZA(),e.TgZ(33,"dt"),e._uU(34,"Browser Version"),e.qZA(),e.TgZ(35,"dd"),e._uU(36),e.qZA(),e.TgZ(37,"dt"),e._uU(38,"Browser OS"),e.qZA(),e.TgZ(39,"dd"),e._uU(40),e.qZA()()(),e.TgZ(41,"div",6)(42,"div",7),e._uU(43),e.qZA()()()),2&t&&(e.xp6(4),e.s9C("alt",o.projectConstants.organization),e.xp6(3),e.Oqu(o.projectConstants.projectName),e.xp6(5),e.AsE(" ",o.versionNumber," ",o.versionHash," "),e.xp6(2),e.hij(" ",o.versionName," "),e.xp6(6),e.Oqu(o.hostAddr),e.xp6(4),e.Oqu(o.modalVariables.user),e.xp6(4),e.Oqu(o.modalVariables.role),e.xp6(4),e.Oqu(o.modalVariables.browserName),e.xp6(4),e.Oqu(o.modalVariables.browserVersion),e.xp6(4),e.Oqu(o.modalVariables.browserOS),e.xp6(3),e.AsE(" ",o.projectConstants.copyright," ",o.projectConstants.license," "))},directives:[ge.o],styles:[".about-container[_ngcontent-%COMP%]{background-color:#374249;background-image:url(ceph_background.3fbdf95cd52530d7.gif);background-position:right bottom;background-repeat:no-repeat;color:#fff;text-shadow:1px 1px #374249}.product-versions[_ngcontent-%COMP%]{margin-top:30px}.product-versions[_ngcontent-%COMP%]   strong[_ngcontent-%COMP%]{margin-right:10px}.modal-header[_ngcontent-%COMP%]{border-bottom:0}.modal-header[_ngcontent-%COMP%]   .close[_ngcontent-%COMP%]{color:#fff;font-size:2em}.modal-body[_ngcontent-%COMP%]{padding-left:80px;padding-right:80px}.ceph-logo[_ngcontent-%COMP%]{margin-bottom:30px;width:25%}.modal-footer[_ngcontent-%COMP%]{border-top:0;display:block;padding:15px 80px 35px}"]}),n})();const bO=function(n){return[n]},SO=function(n){return{disabled:n}};let WD=(()=>{class n{constructor(t,o){this.modalService=t,this.docService=o,this.icons=wo.P}ngOnInit(){this.docService.subscribeOnce("dashboard",t=>{this.docsUrl=t})}openAboutModal(){this.modalRef=this.modalService.show(DT,null,{size:"lg"})}openFeedbackModal(){this.bsModalRef=this.modalService.show(EO,null,{size:"lg"})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(ou.Z),e.Y36(iT.R))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-dashboard-help"]],decls:14,vars:7,consts:function(){let s,t,o,l,_,C;return s="Help",t="Help",o="documentation",l="API",_="About",C="Report an issue...",[["ngbDropdown","","placement","bottom-right"],["ngbDropdownToggle","","title",s,"role","button"],[3,"ngClass"],[1,"d-md-none"],t,["ngbDropdownMenu",""],["ngbDropdownItem","","target","_blank",1,"text-capitalize",3,"ngClass","href"],o,["ngbDropdownItem","","routerLink","/api-docs","target","_blank"],l,["ngbDropdownItem","",3,"click"],_,C]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"a",1),e._UZ(2,"i",2),e.TgZ(3,"span",3),e.SDv(4,4),e.qZA()(),e.TgZ(5,"div",5)(6,"a",6),e.SDv(7,7),e.qZA(),e.TgZ(8,"button",8),e.SDv(9,9),e.qZA(),e.TgZ(10,"button",10),e.NdJ("click",function(){return o.openAboutModal()}),e.SDv(11,11),e.qZA(),e.TgZ(12,"button",10),e.NdJ("click",function(){return o.openFeedbackModal()}),e.SDv(13,12),e.qZA()()()),2&t&&(e.xp6(2),e.Q6J("ngClass",e.VKq(3,bO,o.icons.questionCircle)),e.xp6(4),e.s9C("href",o.docsUrl,e.LSH),e.Q6J("ngClass",e.VKq(5,SO,!o.docsUrl)))},directives:[Pr.jt,Pr.iD,p.mk,Pr.Vi,Pr.TH,ge.o,Io.rH],styles:[""]}),n})();function JD(n,s){1&n&&(e.TgZ(0,"button",9),e.SDv(1,10),e.qZA())}function xT(n,s){1&n&&(e.TgZ(0,"button",11),e.SDv(1,12),e.qZA())}const TO=function(n){return[n]};function CO(n,s){if(1&n&&(e.TgZ(0,"div",1)(1,"a",2),e._UZ(2,"i",3),e.TgZ(3,"span",4),e.SDv(4,5),e.qZA()(),e.TgZ(5,"div",6),e.YNc(6,JD,2,0,"button",7),e.YNc(7,xT,2,0,"button",8),e.qZA()()),2&n){const t=e.oxw();e.xp6(2),e.Q6J("ngClass",e.VKq(3,TO,t.icons.deepCheck)),e.xp6(4),e.Q6J("ngIf",t.userPermission.read),e.xp6(1),e.Q6J("ngIf",t.configOptPermission.read)}}let MO=(()=>{class n{constructor(t){this.authStorageService=t,this.icons=wo.P;const o=this.authStorageService.getPermissions();this.userPermission=o.user,this.configOptPermission=o.configOpt}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-administration"]],decls:1,vars:1,consts:function(){let s,t,o,l;return s="Dashboard Settings",t="Dashboard Settings",o="User management",l="Telemetry configuration",[["ngbDropdown","","placement","bottom-right",4,"ngIf"],["ngbDropdown","","placement","bottom-right"],["ngbDropdownToggle","","title",s,"role","button",1,"dropdown-toggle"],[3,"ngClass"],[1,"d-md-none"],t,["ngbDropdownMenu",""],["ngbDropdownItem","","routerLink","/user-management",4,"ngIf"],["ngbDropdownItem","","routerLink","/telemetry",4,"ngIf"],["ngbDropdownItem","","routerLink","/user-management"],o,["ngbDropdownItem","","routerLink","/telemetry"],l]},template:function(t,o){1&t&&e.YNc(0,CO,8,5,"div",0),2&t&&e.Q6J("ngIf",o.userPermission.read)},directives:[p.O5,Pr.jt,Pr.iD,p.mk,Pr.Vi,ge.o,Pr.TH,Io.rH],styles:[""]}),n})();const RT=function(n){return[n]};function QD(n,s){if(1&n&&(e.TgZ(0,"button",12),e._UZ(1,"i",2),e.TgZ(2,"span"),e.SDv(3,13),e.qZA()()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngClass",e.VKq(1,RT,t.icons.lock))}}let XD=(()=>{class n{constructor(t,o){this.authStorageService=t,this.authService=o,this.icons=wo.P}ngOnInit(){this.username=this.authStorageService.getUsername(),this.sso=this.authStorageService.isSSO()}logout(){this.authService.logout()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(Uy.e))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-identity"]],decls:15,vars:8,consts:function(){let s,t,o,l,_;return s="Logged in user",t="Logged in user",o="Signed in as " + "\ufffd#8\ufffd" + "" + "\ufffd0\ufffd" + "" + "\ufffd/#8\ufffd" + "",l="Sign out",_="Change password",[["ngbDropdown","","placement","bottom-right"],["ngbDropdownToggle","","title",s,"role","button"],[3,"ngClass"],[1,"d-md-none"],t,["ngbDropdownMenu",""],["ngbDropdownItem","","disabled",""],o,[1,"dropdown-divider"],["ngbDropdownItem","","routerLink","/user-profile/edit",4,"ngIf"],["ngbDropdownItem","",3,"click"],l,["ngbDropdownItem","","routerLink","/user-profile/edit"],_]},template:function(t,o){1&t&&(e.TgZ(0,"div",0)(1,"a",1),e._UZ(2,"i",2),e.TgZ(3,"span",3),e.SDv(4,4),e.qZA()(),e.TgZ(5,"div",5)(6,"button",6),e.tHW(7,7),e._UZ(8,"strong"),e.N_p(),e.qZA(),e._UZ(9,"hr",8),e.YNc(10,QD,4,3,"button",9),e.TgZ(11,"button",10),e.NdJ("click",function(){return o.logout()}),e._UZ(12,"i",2),e.TgZ(13,"span"),e.SDv(14,11),e.qZA()()()()),2&t&&(e.xp6(2),e.Q6J("ngClass",e.VKq(4,RT,o.icons.user)),e.xp6(6),e.pQV(o.username),e.QtT(7),e.xp6(2),e.Q6J("ngIf",!o.sso),e.xp6(2),e.Q6J("ngClass",e.VKq(6,RT,o.icons.signOut)))},directives:[Pr.jt,Pr.iD,p.mk,Pr.Vi,ge.o,Pr.TH,p.O5,Io.rH],styles:[""]}),n})();function KD(n,s){1&n&&e.GkF(0)}function qD(n,s){1&n&&e.GkF(0)}function OO(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"li",22),e._UZ(1,"cd-language-selector",23),e.qZA(),e.TgZ(2,"li",22)(3,"cd-notifications",24),e.NdJ("click",function(){return e.CHM(t),e.oxw().toggleRightSidebar()}),e.qZA()(),e.TgZ(4,"li",22),e._UZ(5,"cd-dashboard-help",23),e.qZA(),e.TgZ(6,"li",22),e._UZ(7,"cd-administration",23),e.qZA(),e.TgZ(8,"li",22),e._UZ(9,"cd-identity",23),e.qZA()}}function u0(n,s){1&n&&(e.TgZ(0,"li",51)(1,"a",52),e.SDv(2,53),e.qZA()())}function AO(n,s){1&n&&(e.TgZ(0,"li",54)(1,"a",55),e.SDv(2,56),e.qZA()())}function DO(n,s){1&n&&(e.TgZ(0,"li",57)(1,"a",58),e.SDv(2,59),e.qZA()())}function wT(n,s){1&n&&(e.TgZ(0,"li",60)(1,"a",61),e.SDv(2,62),e.qZA()())}function hg(n,s){1&n&&(e.TgZ(0,"li",63)(1,"a",64),e.SDv(2,65),e.qZA()())}function PT(n,s){1&n&&(e.TgZ(0,"li",66)(1,"a",67),e.SDv(2,68),e.qZA()())}function aE(n,s){1&n&&(e.TgZ(0,"li",69)(1,"a",70),e.SDv(2,71),e.qZA()())}function lE(n,s){1&n&&(e.TgZ(0,"li",72)(1,"a",73),e.SDv(2,74),e.qZA()())}function xO(n,s){1&n&&(e.TgZ(0,"li",75)(1,"a",76),e.SDv(2,77),e.qZA()())}function uE(n,s){1&n&&(e.TgZ(0,"li",78)(1,"a",79),e.SDv(2,80),e.qZA()())}function cE(n,s){if(1&n&&(e.TgZ(0,"small",86),e._uU(1),e.qZA()),2&n){const t=e.oxw(5);e.xp6(1),e.Oqu(t.prometheusAlertService.activeCriticalAlerts)}}function c0(n,s){if(1&n&&(e.TgZ(0,"small",87),e._uU(1),e.qZA()),2&n){const t=e.oxw(5);e.xp6(1),e.Oqu(t.prometheusAlertService.activeWarningAlerts)}}function ex(n,s){if(1&n&&(e.TgZ(0,"li",81)(1,"a",82),e.ynx(2),e.SDv(3,83),e.BQk(),e.YNc(4,cE,2,1,"small",84),e.YNc(5,c0,2,1,"small",85),e.qZA()()),2&n){const t=e.oxw(4);e.xp6(4),e.Q6J("ngIf",t.prometheusAlertService.activeCriticalAlerts>0),e.xp6(1),e.Q6J("ngIf",t.prometheusAlertService.activeWarningAlerts>0)}}function tx(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"li",36)(1,"a",37),e.NdJ("click",function(){return e.CHM(t),e.oxw(3).toggleSubMenu("cluster")}),e.ynx(2),e.SDv(3,38),e.BQk(),e.qZA(),e.TgZ(4,"ul",39),e.YNc(5,u0,3,0,"li",40),e.YNc(6,AO,3,0,"li",41),e.YNc(7,DO,3,0,"li",42),e.YNc(8,wT,3,0,"li",43),e.YNc(9,hg,3,0,"li",44),e.YNc(10,PT,3,0,"li",45),e.YNc(11,aE,3,0,"li",46),e.YNc(12,lE,3,0,"li",47),e.YNc(13,xO,3,0,"li",48),e.YNc(14,uE,3,0,"li",49),e.YNc(15,ex,6,2,"li",50),e.qZA()()}if(2&n){const t=e.oxw(3);e.xp6(1),e.uIk("aria-expanded","cluster"===t.displayedSubMenu),e.xp6(3),e.Q6J("ngbCollapse","cluster"!==t.displayedSubMenu),e.xp6(1),e.Q6J("ngIf",t.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",t.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",t.permissions.monitor.read),e.xp6(1),e.Q6J("ngIf",t.permissions.hosts.read),e.xp6(1),e.Q6J("ngIf",t.permissions.osd.read),e.xp6(1),e.Q6J("ngIf",t.permissions.configOpt.read),e.xp6(1),e.Q6J("ngIf",t.permissions.osd.read),e.xp6(1),e.Q6J("ngIf",t.permissions.configOpt.read),e.xp6(1),e.Q6J("ngIf",t.permissions.configOpt.read),e.xp6(1),e.Q6J("ngIf",t.permissions.log.read),e.xp6(1),e.Q6J("ngIf",t.permissions.prometheus.read)}}function nx(n,s){1&n&&(e.TgZ(0,"li",88)(1,"a",89),e.SDv(2,90),e.qZA()())}function rx(n,s){1&n&&(e.TgZ(0,"li",98)(1,"a",99),e.SDv(2,100),e.qZA()())}function NT(n,s){if(1&n&&(e.TgZ(0,"small",106),e._uU(1),e.qZA()),2&n){const t=e.oxw(5);e.xp6(1),e.Oqu(null==t.summaryData||null==t.summaryData.rbd_mirroring?null:t.summaryData.rbd_mirroring.warnings)}}function RO(n,s){if(1&n&&(e.TgZ(0,"small",107),e._uU(1),e.qZA()),2&n){const t=e.oxw(5);e.xp6(1),e.Oqu(null==t.summaryData||null==t.summaryData.rbd_mirroring?null:t.summaryData.rbd_mirroring.errors)}}function wO(n,s){if(1&n&&(e.TgZ(0,"li",101)(1,"a",102),e.ynx(2),e.SDv(3,103),e.BQk(),e.YNc(4,NT,2,1,"small",104),e.YNc(5,RO,2,1,"small",105),e.qZA()()),2&n){const t=e.oxw(4);e.xp6(4),e.Q6J("ngIf",0!==(null==t.summaryData||null==t.summaryData.rbd_mirroring?null:t.summaryData.rbd_mirroring.warnings)),e.xp6(1),e.Q6J("ngIf",0!==(null==t.summaryData||null==t.summaryData.rbd_mirroring?null:t.summaryData.rbd_mirroring.errors))}}function PO(n,s){1&n&&(e.TgZ(0,"li",108)(1,"a",109),e.SDv(2,110),e.qZA()())}function NO(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"li",91)(1,"a",92),e.NdJ("click",function(){return e.CHM(t),e.oxw(3).toggleSubMenu("block")}),e.ynx(2),e.SDv(3,93),e.BQk(),e.qZA(),e.TgZ(4,"ul",94),e.YNc(5,rx,3,0,"li",95),e.YNc(6,wO,6,2,"li",96),e.YNc(7,PO,3,0,"li",97),e.qZA()()}if(2&n){const t=e.oxw().ngIf,o=e.oxw(2);e.xp6(1),e.Q6J("ngStyle",o.blockHealthColor()),e.uIk("aria-expanded","block"===o.displayedSubMenu),e.xp6(3),e.Q6J("ngbCollapse","block"!==o.displayedSubMenu),e.xp6(1),e.Q6J("ngIf",o.permissions.rbdImage.read&&t.rbd),e.xp6(1),e.Q6J("ngIf",o.permissions.rbdMirroring.read&&t.mirroring),e.xp6(1),e.Q6J("ngIf",o.permissions.iscsi.read&&t.iscsi)}}function IT(n,s){1&n&&(e.TgZ(0,"li",111)(1,"a",112),e.SDv(2,113),e.qZA()())}function FT(n,s){1&n&&(e.TgZ(0,"li",114)(1,"a",115),e.SDv(2,116),e.qZA()())}function LT(n,s){if(1&n){const t=e.EpF();e.TgZ(0,"li",117)(1,"a",118),e.NdJ("click",function(){return e.CHM(t),e.oxw(3).toggleSubMenu("rgw")}),e.ynx(2),e.SDv(3,119),e.BQk(),e.qZA(),e.TgZ(4,"ul",120)(5,"li",121)(6,"a",122),e.SDv(7,123),e.qZA()(),e.TgZ(8,"li",124)(9,"a",125),e.SDv(10,126),e.qZA()(),e.TgZ(11,"li",127)(12,"a",128),e.SDv(13,129),e.qZA()()()()}if(2&n){const t=e.oxw(3);e.xp6(1),e.uIk("aria-expanded","rgw"===t.displayedSubMenu),e.xp6(3),e.Q6J("ngbCollapse","rgw"!==t.displayedSubMenu)}}const IO=function(n){return[n]};function FO(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"li",26)(2,"a",27)(3,"span"),e.SDv(4,28),e.qZA(),e._uU(5,"\xa0 "),e._UZ(6,"i",29),e.ALo(7,"healthColor"),e.qZA()(),e.YNc(8,tx,16,13,"li",30),e.YNc(9,nx,3,0,"li",31),e.YNc(10,NO,8,6,"li",32),e.YNc(11,IT,3,0,"li",33),e.YNc(12,FT,3,0,"li",34),e.YNc(13,LT,14,2,"li",35),e.BQk()),2&n){const t=s.ngIf,o=e.oxw(2);e.xp6(6),e.Q6J("ngClass",e.VKq(10,IO,o.icons.health))("ngStyle",e.lcZ(7,8,null==o.summaryData?null:o.summaryData.health_status)),e.xp6(2),e.Q6J("ngIf",o.permissions.hosts.read||o.permissions.monitor.read||o.permissions.osd.read||o.permissions.configOpt.read||o.permissions.log.read||o.permissions.prometheus.read),e.xp6(1),e.Q6J("ngIf",o.permissions.pool.read),e.xp6(1),e.Q6J("ngIf",(o.permissions.rbdImage.read||o.permissions.rbdMirroring.read||o.permissions.iscsi.read)&&(t.rbd||t.mirroring||t.iscsi)),e.xp6(1),e.Q6J("ngIf",o.permissions.nfs.read&&t.nfs),e.xp6(1),e.Q6J("ngIf",o.permissions.cephfs.read&&t.cephfs),e.xp6(1),e.Q6J("ngIf",o.permissions.rgw.read&&t.rgw)}}function kT(n,s){if(1&n&&(e.YNc(0,FO,14,12,"ng-container",25),e.ALo(1,"async")),2&n){const t=e.oxw();e.Q6J("ngIf",e.lcZ(1,1,t.enabledFeature$))}}const dE=function(n){return{show:n}},LO=function(n){return{active:n}},$T=["*"];let fE=(()=>{class n{constructor(t,o,l,_,C,R){this.authStorageService=t,this.summaryService=o,this.featureToggles=l,this.telemetryNotificationService=_,this.prometheusAlertService=C,this.motdNotificationService=R,this.notifications=[],this.icons=wo.P,this.rightSidebarOpen=!1,this.showMenuSidebar=!0,this.displayedSubMenu="",this.simplebar={autoHide:!1},this.subs=new ic.w,this.permissions=this.authStorageService.getPermissions(),this.enabledFeature$=this.featureToggles.get()}get class(){return"top-notification-"+this.notifications.length}ngOnInit(){this.subs.add(this.summaryService.subscribe(t=>{this.summaryData=t})),this.subs.add(this.authStorageService.isPwdDisplayed$.subscribe(t=>{this.showTopNotification("isPwdDisplayed",t)})),this.subs.add(this.telemetryNotificationService.update.subscribe(t=>{this.showTopNotification("telemetryNotificationEnabled",t)})),this.subs.add(this.motdNotificationService.motd$.subscribe(t=>{this.showTopNotification("motdNotificationEnabled",fu.isPlainObject(t))}))}ngOnDestroy(){this.subs.unsubscribe()}blockHealthColor(){if(this.summaryData&&this.summaryData.rbd_mirroring){if(this.summaryData.rbd_mirroring.errors>0)return{color:"#f4926c"};if(this.summaryData.rbd_mirroring.warnings>0)return{color:"#f0ad4e"}}}toggleSubMenu(t){this.displayedSubMenu=this.displayedSubMenu===t?"":t}toggleRightSidebar(){this.rightSidebarOpen=!this.rightSidebarOpen}showTopNotification(t,o){if(o)this.notifications.includes(t)||this.notifications.push(t);else{const l=this.notifications.indexOf(t);l>=0&&this.notifications.splice(l,1)}}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(Ym.J),e.Y36(Yg.l),e.Y36(G1),e.Y36(lg),e.Y36(QM))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-navigation"]],hostVars:2,hostBindings:function(t,o){2&t&&e.Tol(o.class)},ngContentSelectors:$T,decls:30,vars:12,consts:function(){let s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke,we,G,Dt,bt,Bt,Jt,Mn,zt;return s="Toggle navigation",t="Dashboard",o="Cluster",l="Hosts",_="Physical Disks",C="Monitors",R="Services",N="OSDs",V="Configuration",Q="CRUSH map",oe="Manager Modules",le="Ceph Users",_e="Logs",ye="Alerts",$e="Pools",Ie="Block",ke="Images",we="Mirroring",G="iSCSI",Dt="NFS",bt="File Systems",Bt="Object Gateway",Jt="Gateways",Mn="Users",zt="Buckets",[[1,"cd-navbar-main"],[1,"cd-navbar-top"],[1,"navbar","navbar-expand-md","navbar-dark","cd-navbar-brand"],["aria-label","toggle sidebar visibility",1,"btn","btn-link","py-0","ms-3",3,"click"],["aria-hidden","true",1,"fa","fa-bars","fa-2x"],["href","#",1,"navbar-brand","ms-2"],["src","assets/Ceph_Ceph_Logo_with_text_white.svg","alt","Ceph"],["type","button",1,"navbar-toggler",3,"click"],[1,"sr-only"],s,[1,""],[1,"fa","fa-navicon","fa-lg"],[1,"collapse","navbar-collapse",3,"ngClass"],[1,"nav","navbar-nav","cd-navbar-utility","my-2","my-md-0"],[4,"ngTemplateOutlet"],[1,"wrapper"],["id","sidebar",3,"ngClass"],[3,"options"],[1,"list-unstyled","components","cd-navbar-primary"],["id","content",3,"ngClass"],["cd_utilities",""],["cd_menu",""],[1,"nav-item"],[1,"cd-navbar"],[1,"cd-navbar",3,"click"],[4,"ngIf"],["routerLinkActive","active",1,"nav-item","tc_menuitem_dashboard"],["routerLink","/dashboard",1,"nav-link"],t,[3,"ngClass","ngStyle"],["routerLinkActive","active","class","nav-item tc_menuitem_cluster",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_pool",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_block",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_nfs",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_cephfs",4,"ngIf"],["routerLinkActive","active","class","nav-item tc_menuitem_rgw",4,"ngIf"],["routerLinkActive","active",1,"nav-item","tc_menuitem_cluster"],["aria-controls","cluster-nav","role","button",1,"nav-link","dropdown-toggle",3,"click"],o,["id","cluster-nav",1,"list-unstyled",3,"ngbCollapse"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_hosts",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_cluster_inventory",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_cluster_monitor",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_cluster_services",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_osds",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_configuration",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_crush",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_modules",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_users",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_log",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_monitoring",4,"ngIf"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_hosts"],["routerLink","/hosts"],l,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_cluster_inventory"],["routerLink","/inventory"],_,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_cluster_monitor"],["routerLink","/monitor/"],C,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_cluster_services"],["routerLink","/services/"],R,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_osds"],["routerLink","/osd"],N,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_configuration"],["routerLink","/configuration"],V,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_crush"],["routerLink","/crush-map"],Q,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_modules"],["routerLink","/mgr-modules"],oe,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_users"],["routerLink","/ceph-users"],le,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_log"],["routerLink","/logs"],_e,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_monitoring"],["routerLink","/monitoring"],ye,["class","badge badge-danger ms-1",4,"ngIf"],["class","badge badge-warning ms-1",4,"ngIf"],[1,"badge","badge-danger","ms-1"],[1,"badge","badge-warning","ms-1"],["routerLinkActive","active",1,"nav-item","tc_menuitem_pool"],["routerLink","/pool",1,"nav-link"],$e,["routerLinkActive","active",1,"nav-item","tc_menuitem_block"],["aria-controls","block-nav","role","button",1,"nav-link","dropdown-toggle",3,"ngStyle","click"],Ie,["id","block-nav",1,"list-unstyled",3,"ngbCollapse"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_block_images",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_block_mirroring",4,"ngIf"],["routerLinkActive","active","class","tc_submenuitem tc_submenuitem_block_iscsi",4,"ngIf"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_block_images"],["routerLink","/block/rbd"],ke,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_block_mirroring"],["routerLink","/block/mirroring"],we,["class","badge badge-warning",4,"ngIf"],["class","badge badge-danger",4,"ngIf"],[1,"badge","badge-warning"],[1,"badge","badge-danger"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_block_iscsi"],["routerLink","/block/iscsi"],G,["routerLinkActive","active",1,"nav-item","tc_menuitem_nfs"],["routerLink","/nfs",1,"nav-link"],Dt,["routerLinkActive","active",1,"nav-item","tc_menuitem_cephfs"],["routerLink","/cephfs",1,"nav-link"],bt,["routerLinkActive","active",1,"nav-item","tc_menuitem_rgw"],["aria-controls","gateway-nav","role","button",1,"nav-link","dropdown-toggle",3,"click"],Bt,["id","gateway-nav",1,"list-unstyled",3,"ngbCollapse"],["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_rgw_daemons"],["routerLink","/rgw/daemon"],Jt,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_rgw_users"],["routerLink","/rgw/user"],Mn,["routerLinkActive","active",1,"tc_submenuitem","tc_submenuitem_rgw_buckets"],["routerLink","/rgw/bucket"],zt]},template:function(t,o){if(1&t&&(e.F$t(),e.TgZ(0,"div",0),e._UZ(1,"cd-pwd-expiration-notification")(2,"cd-telemetry-notification")(3,"cd-motd")(4,"cd-notifications-sidebar"),e.TgZ(5,"div",1)(6,"nav",2)(7,"button",3),e.NdJ("click",function(){return o.showMenuSidebar=!o.showMenuSidebar}),e._UZ(8,"i",4),e.qZA(),e.TgZ(9,"a",5),e._UZ(10,"img",6),e.qZA(),e.TgZ(11,"button",7),e.NdJ("click",function(){return o.toggleRightSidebar()}),e.TgZ(12,"span",8),e.SDv(13,9),e.qZA(),e.TgZ(14,"span",10),e._UZ(15,"i",11),e.qZA()(),e.TgZ(16,"div",12)(17,"ul",13),e.YNc(18,KD,1,0,"ng-container",14),e.qZA()()()(),e.TgZ(19,"div",15)(20,"nav",16)(21,"ngx-simplebar",17)(22,"ul",18),e.YNc(23,qD,1,0,"ng-container",14),e.qZA()()(),e.TgZ(24,"div",19),e.Hsn(25),e.qZA()(),e.YNc(26,OO,10,0,"ng-template",null,20,e.W1O),e.YNc(28,kT,2,3,"ng-template",null,21,e.W1O),e.qZA()),2&t){const l=e.MAs(27),_=e.MAs(29);e.xp6(16),e.Q6J("ngClass",e.VKq(6,dE,o.rightSidebarOpen)),e.xp6(2),e.Q6J("ngTemplateOutlet",l),e.xp6(2),e.Q6J("ngClass",e.VKq(8,LO,!o.showMenuSidebar)),e.xp6(1),e.Q6J("options",o.simplebar),e.xp6(2),e.Q6J("ngTemplateOutlet",_),e.xp6(1),e.Q6J("ngClass",e.VKq(10,LO,!o.showMenuSidebar))}},directives:[KM,Ky,jD,ZD,Pr.M2,ge.o,p.mk,p.tP,gm.M,zM,TT,WD,MO,XD,p.O5,Io.Od,Io.yS,p.PC,Pr._D],pipes:[p.Ov,Z1],styles:['.cd-navbar-main[_ngcontent-%COMP%]{display:flex;flex:1;flex-direction:column;height:100%}  cd-navigation .cd-navbar-top .cd-navbar-brand{background:#374249;border-top:4px solid #25828e}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-brand,   cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-brand:hover{color:#e9ecef;height:auto;padding:0}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-brand>img{height:25px}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-toggler{border:0}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-toggler:focus,   cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-toggler:hover{outline:0}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-toggler .fa-navicon{color:#e9ecef}  cd-navigation .cd-navbar-top .cd-navbar-brand .navbar-collapse{padding:0}  cd-navigation .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>.active>a{background-color:#25828e;color:#e9ecef}  cd-navigation .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a,   cd-navigation .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a:focus,   cd-navigation .cd-navbar-top .cd-navbar-brand .cd-navbar-utility>li>.open>a:hover{background-color:transparent;border-color:transparent;color:#e9ecef}  cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>[ngbDropdown]>a,   cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>a,   cd-navigation .cd-navbar-top .navbar-nav>li>a{color:#e9ecef;display:block;line-height:1;padding:13.5px 18px!important;position:relative;text-decoration:none}  cd-navigation .cd-navbar-top .navbar-nav .nav-link,   cd-navigation .cd-navbar-top .navbar-nav .nav-link:hover{color:#e9ecef}  cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>[ngbDropdown]>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>[ngbDropdown].open>a,   cd-navigation .cd-navbar-top .navbar-nav>li>.cd-navbar>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>li>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>li:hover{background-color:#25828e}  cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>[ngbDropdown]>a,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>[ngbDropdown]>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>a,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>a:focus,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>a:hover,   cd-navigation .cd-navbar-top .navbar-nav>.open>.cd-navbar>li>a:focus,   cd-navigation .cd-navbar-top .navbar-nav>.open>a,   cd-navigation .cd-navbar-top .navbar-nav>.open>a:focus,   cd-navigation .cd-navbar-top .navbar-nav>.open>a:hover{background-color:transparent;border-color:transparent;color:#e9ecef}  cd-navigation .cd-navbar-top .no-hover:hover{background-color:#374249!important}@media (min-width: 768px){  cd-navigation .cd-navbar-top .cd-navbar-utility{border-bottom:0;font-size:1.1rem;position:absolute;right:0;top:0}}@media (max-width: 767px){  cd-navigation .cd-navbar-top .navbar-nav{margin:0}  cd-navigation .cd-navbar-top .navbar-nav .fa{margin-right:.5em}  cd-navigation .cd-navbar-top .navbar-nav .open .dropdown-menu{background-color:#25828e;border:0;padding-bottom:0;padding-top:0}  cd-navigation .cd-navbar-top .navbar-nav .open .dropdown-menu>li>a{color:#e9ecef;padding:5px 15px 5px 35px}  cd-navigation .cd-navbar-top .navbar-nav .open .dropdown-menu>.active>a{background-color:#25828e}  cd-navigation .cd-navbar-top .navbar-nav>li>a:hover{background-color:#25828e}}.cd-navbar-primary[_ngcontent-%COMP%]   .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .cd-navbar-primary[_ngcontent-%COMP%] > .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:focus, .cd-navbar-primary[_ngcontent-%COMP%] > .active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:hover{background-color:#25828e!important;border:0!important;color:#fff!important}.wrapper[_ngcontent-%COMP%]{display:flex;height:100%;width:100%}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]{background:#374249;bottom:0;color:#fff;height:auto;left:0;overflow-y:auto;position:relative;transition:all .3s;width:200px;z-index:999}.wrapper[_ngcontent-%COMP%]   #sidebar.active[_ngcontent-%COMP%]{margin-left:-200px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul.component[_ngcontent-%COMP%]{margin:0;padding:20px 0}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   p[_ngcontent-%COMP%]{color:#fff;padding:10px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{color:#fff;display:block;font-size:1.3em;padding:10px 10px 10px 27px;text-decoration:none}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:hover{background:#25828e;color:#fff}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%]   a[_ngcontent-%COMP%] > .badge[_ngcontent-%COMP%]{margin-left:5px}.wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li.active[_ngcontent-%COMP%] > a[_ngcontent-%COMP%], .wrapper[_ngcontent-%COMP%]   #sidebar[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]   a[aria-expanded=true][_ngcontent-%COMP%]{color:#fff}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[_ngcontent-%COMP%]{position:relative}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[_ngcontent-%COMP%]:after{border:0;content:"\\f054";font-family:ForkAwesome;font-size:1rem;margin-top:2px;position:absolute;right:20px;transition:transform .3s ease-in-out}.wrapper[_ngcontent-%COMP%]   a.dropdown-toggle[aria-expanded=true][_ngcontent-%COMP%]:after{transform:rotate(90deg)}.wrapper[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   ul[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]{background:#4d5c66;font-size:1.1em!important;padding-left:40px!important}.wrapper[_ngcontent-%COMP%]   .cd-navbar-primary[_ngcontent-%COMP%]   a[_ngcontent-%COMP%]:focus{outline:none}.wrapper[_ngcontent-%COMP%]   ngx-simplebar[_ngcontent-%COMP%]{height:100%}#content[_ngcontent-%COMP%]{bottom:0;position:relative;right:0;transition:all .3s;width:calc(100% - 200px)}#content.active[_ngcontent-%COMP%]{width:100vw}']}),n})();var kO=i(17757),$O=i(20523);function ix(n,s){if(1&n){const t=e.EpF();e.ynx(0),e.TgZ(1,"button",8),e.NdJ("click",function(){const _=e.CHM(t).$implicit;return e.oxw(3).onDaemonSelection(_)}),e._uU(2),e.qZA(),e.BQk()}if(2&n){const t=s.$implicit;e.xp6(2),e.AsE(" ",t.id," ( ",t.zonegroup_name," ) ")}}function ox(n,s){if(1&n&&(e.ynx(0),e.TgZ(1,"div",1)(2,"span",2),e.SDv(3,3),e.qZA(),e.TgZ(4,"div",4)(5,"button",5),e._uU(6),e.qZA(),e.TgZ(7,"div",6),e.YNc(8,ix,3,2,"ng-container",7),e.qZA()()(),e.BQk()),2&n){const t=e.oxw().ngIf;e.xp6(6),e.AsE(" ",t.selectedDaemon.id," ( ",t.selectedDaemon.zonegroup_name," ) "),e.xp6(2),e.Q6J("ngForOf",t.daemons)}}function HO(n,s){if(1&n&&(e.ynx(0),e.YNc(1,ox,9,3,"ng-container",0),e.BQk()),2&n){const t=s.ngIf,o=e.oxw();e.xp6(1),e.Q6J("ngIf",t.ftMap&&t.ftMap.rgw&&o.permissions.rgw.read&&o.isRgwRoute&&t.daemons.length>1)}}const BO=function(n,s,t){return{ftMap:n,daemons:s,selectedDaemon:t}};let sx=(()=>{class n{constructor(t,o,l,_,C){this.authStorageService=t,this.featureToggles=o,this.router=l,this.timerService=_,this.rgwDaemonService=C,this.REFRESH_INTERVAL=5e3,this.subs=new ic.w,this.rgwUrlPrefix="/rgw",this.rgwUserUrlPrefix="/rgw/user",this.rgwBuckerUrlPrefix="/rgw/bucket",this.isRgwRoute=document.location.href.includes(this.rgwUserUrlPrefix)||document.location.href.includes(this.rgwBuckerUrlPrefix)}ngOnInit(){this.permissions=this.authStorageService.getPermissions(),this.featureToggleMap$=this.featureToggles.get(),this.subs.add(this.router.events.pipe((0,Rp.h)(t=>t instanceof Io.m2)).subscribe(()=>this.isRgwRoute=[this.rgwBuckerUrlPrefix,this.rgwUserUrlPrefix].some(t=>this.router.url.startsWith(t)))),this.subs.add(this.timerService.get(()=>this.isRgwRoute?this.rgwDaemonService.list():kO.C,this.REFRESH_INTERVAL).subscribe())}ngOnDestroy(){this.subs.unsubscribe()}onDaemonSelection(t){this.rgwDaemonService.selectDaemon(t),this.reloadData()}reloadData(){const t=this.router.url;this.router.navigateByUrl(this.rgwUrlPrefix,{skipLocationChange:!0}).finally(()=>{this.router.navigate([t])})}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Vi.j),e.Y36(Yg.l),e.Y36(Io.F0),e.Y36(zo.f),e.Y36($O.b))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-context"]],decls:4,vars:11,consts:function(){let s,t;return s="Selected Object Gateway:",t="Select Object Gateway",[[4,"ngIf"],[1,"cd-context-bar","pt-3","pb-3"],[1,"me-1"],s,["ngbDropdown","","placement","bottom-left",1,"d-inline-block","ms-2"],["ngbDropdownToggle","","title",t,1,"btn","btn-outline-info","ctx-bar-selected-rgw-daemon"],["ngbDropdownMenu",""],[4,"ngFor","ngForOf"],["ngbDropdownItem","",1,"ctx-bar-available-rgw-daemon",3,"click"]]},template:function(t,o){1&t&&(e.YNc(0,HO,2,1,"ng-container",0),e.ALo(1,"async"),e.ALo(2,"async"),e.ALo(3,"async")),2&t&&e.Q6J("ngIf",e.kEZ(7,BO,e.lcZ(1,1,o.featureToggleMap$),e.lcZ(2,3,o.rgwDaemonService.daemons$),e.lcZ(3,5,o.rgwDaemonService.selectedDaemon$)))},directives:[p.O5,Pr.jt,ge.o,Pr.iD,Pr.Vi,p.sg,Pr.TH],pipes:[p.Ov],styles:[".cd-context-bar[_ngcontent-%COMP%]{border-bottom:1px solid #dee2e6}"]}),n})();var ax=i(6481),lx=i(76666),HT=i(85345);class UO{constructor(s,t){this.keySelector=s,this.flushes=t}call(s,t){return t.subscribe(new cx(s,this.keySelector,this.flushes))}}class cx extends HT.Ds{constructor(s,t,o){super(s),this.keySelector=t,this.values=new Set,o&&this.add((0,HT.ft)(o,new HT.IY(this)))}notifyNext(){this.values.clear()}notifyError(s){this._error(s)}_next(s){this.keySelector?this._useKeySelector(s):this._finalizeNext(s,s)}_useKeySelector(s){let t;const{destination:o}=this;try{t=this.keySelector(s)}catch(l){return void o.error(l)}this._finalizeNext(t,s)}_finalizeNext(s,t){const{values:o}=this;o.has(s)||(o.add(s),this.destination.next(t))}}var YO=i(28049);class pE{resolve(s){const t=s.routeConfig.data,o=null===t.path?null:this.getFullPath(s);return(0,nc.of)([{text:"string"==typeof t.breadcrumbs?t.breadcrumbs:t.breadcrumbs.text||t.text||o,path:o}])}getFullPath(s){return s.pathFromRoot.reduce((_,C)=>_+C.url.reduce((_,C)=>_+"/"+C.path,""),"")}}function dx(n,s){if(1&n&&(e.TgZ(0,"a",6),e._uU(1),e.qZA()),2&n){const t=e.oxw().$implicit;e.Q6J("routerLink",t.path),e.xp6(1),e.Oqu(t.text)}}function c(n,s){if(1&n&&(e.TgZ(0,"span"),e._uU(1),e.qZA()),2&n){const t=e.oxw().$implicit;e.xp6(1),e.Oqu(t.text)}}const d=function(n){return{active:n}};function m(n,s){if(1&n&&(e.TgZ(0,"li",3),e.YNc(1,dx,2,2,"a",4),e.YNc(2,c,2,1,"span",5),e.qZA()),2&n){const t=s.$implicit,o=s.last,l=e.oxw(2);e.Q6J("ngClass",e.VKq(3,d,o&&l.finished)),e.xp6(1),e.Q6J("ngIf",!o&&null!==t.path),e.xp6(1),e.Q6J("ngIf",o||null===t.path)}}function A(n,s){if(1&n&&(e.TgZ(0,"ol",1),e.YNc(1,m,3,5,"li",2),e.qZA()),2&n){const t=e.oxw();e.xp6(1),e.Q6J("ngForOf",t.crumbs)}}let k=(()=>{class n{constructor(t,o,l){this.router=t,this.injector=o,this.titleService=l,this.crumbs=[],this.finished=!1,this.defaultResolver=new pE,this.subscription=this.router.events.pipe((0,Rp.h)(_=>_ instanceof Io.OD)).subscribe(()=>{this.finished=!1}),this.subscription=this.router.events.pipe((0,Rp.h)(_=>_ instanceof Io.m2)).subscribe(()=>{this._resolveCrumbs(t.routerState.snapshot.root).pipe((0,Ac.zg)(C=>C),function ux(n,s){return t=>t.lift(new UO(n,s))}(C=>C.text),$l(),(0,Ac.zg)(C=>{const R=this.postProcess(C);return this.wrapIntoObservable(R).pipe((0,YO.P)())})).subscribe(C=>{this.finished=!0,this.crumbs=C;const R=this.getTitleFromCrumbs(this.crumbs);this.titleService.setTitle(R)})})}ngOnDestroy(){this.subscription.unsubscribe()}_resolveCrumbs(t){let o;const l=t.routeConfig&&t.routeConfig.data;if(l&&l.breadcrumbs){let _;_=l.breadcrumbs.prototype instanceof pE?this.injector.get(l.breadcrumbs):this.defaultResolver;const C=_.resolve(t);o=this.wrapIntoObservable(C).pipe((0,YO.P)())}else o=(0,nc.of)([]);return t.firstChild&&(o=(0,ax.z)(o,this._resolveCrumbs(t.firstChild))),o}postProcess(t){const o=[];return t.forEach(l=>{const _=l.text.split("/");if(_.length>1){l.text=_[_.length-1];for(let C=0;C<_.length-1;C++)o.push({text:_[C],path:null})}o.push(l)}),o}isPromise(t){return t&&"function"==typeof t.then}wrapIntoObservable(t){return t instanceof Y1.y?t:this.isPromise(t)?(0,lx.D)(Promise.resolve(t)):(0,nc.of)(t)}getTitleFromCrumbs(t){const o=t.map(l=>l.text||"").join(" > ");return o.length>0?`Ceph: ${o}`:"Ceph"}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Io.F0),e.Y36(e.zs3),e.Y36(u.Dx))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-breadcrumbs"]],decls:1,vars:1,consts:[["class","breadcrumb",4,"ngIf"],[1,"breadcrumb"],["class","breadcrumb-item",3,"ngClass",4,"ngFor","ngForOf"],[1,"breadcrumb-item",3,"ngClass"],["preserveFragment","",3,"routerLink",4,"ngIf"],[4,"ngIf"],["preserveFragment","",3,"routerLink"]],template:function(t,o){1&t&&e.YNc(0,A,2,1,"ol",0),2&t&&e.Q6J("ngIf",o.crumbs.length)},directives:[p.O5,p.sg,p.mk,Io.yS],styles:['.breadcrumb[_ngcontent-%COMP%]{background-color:transparent;border-radius:0;margin-top:8px;padding:8px 0}.breadcrumb[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%]:before{content:"\\f101";font-family:ForkAwesome;padding:0 5px 0 7px}']}),n})();const ee=function(n){return{dashboard:n}};let me=(()=>{class n{constructor(t,o,l,_){this.router=t,this.summaryService=o,this.taskManagerService=l,this.faviconService=_,this.subs=new ic.w}ngOnInit(){this.subs.add(this.summaryService.startPolling()),this.subs.add(this.taskManagerService.init(this.summaryService)),this.faviconService.init()}ngOnDestroy(){this.subs.unsubscribe()}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Io.F0),e.Y36(Ym.J),e.Y36($D.k),e.Y36(hT))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-workbench-layout"]],features:[e._Bn([hT])],decls:6,vars:3,consts:[[1,"container-fluid","h-100",3,"ngClass"]],template:function(t,o){1&t&&(e.TgZ(0,"block-ui")(1,"cd-navigation")(2,"div",0),e._UZ(3,"cd-context")(4,"cd-breadcrumbs")(5,"router-outlet"),e.qZA()()()),2&t&&(e.xp6(2),e.Q6J("ngClass",e.VKq(1,ee,"/dashboard"==o.router.url||"/dashboard_3"==o.router.url)))},directives:[V0,fE,p.mk,sx,k,Io.lC],styles:[".dashboard[_ngcontent-%COMP%]{background-color:#e9ecef;margin:0;padding:0}.container-fluid[_ngcontent-%COMP%]{overflow:auto;position:absolute}"]}),n})();var Ne=i(78139),Je=i(16482),kt=i.n(Je);function en(n){return(en="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(s){return typeof s}:function(s){return s&&"function"==typeof Symbol&&s.constructor===Symbol&&s!==Symbol.prototype?"symbol":typeof s})(n)}function Ln(n,s){if(!(n instanceof s))throw new TypeError("Cannot call a class as a function")}function Or(n,s){for(var t=0;t<s.length;t++){var o=s[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(n,o.key,o)}}function Wi(n,s,t){return s in n?Object.defineProperty(n,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[s]=t,n}function Uo(n,s){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);s&&(o=o.filter(function(l){return Object.getOwnPropertyDescriptor(n,l).enumerable})),t.push.apply(t,o)}return t}function us(n){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{};s%2?Uo(t,!0).forEach(function(o){Wi(n,o,t[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):Uo(t).forEach(function(o){Object.defineProperty(n,o,Object.getOwnPropertyDescriptor(t,o))})}return n}function _o(n){return(_o=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(n)}function ya(n,s){return(ya=Object.setPrototypeOf||function(o,l){return o.__proto__=l,o})(n,s)}function ac(n,s){return!s||"object"!=typeof s&&"function"!=typeof s?function eu(n){if(void 0===n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}(n):s}var rh={};function _E(n,s,t){return function hE(n){return null==n}(n)?t:function _g(n){return null!==n&&"object"===en(n)&&"function"==typeof n.get&&"function"==typeof n.has}(n)?n.has(s)?n.get(s):t:hasOwnProperty.call(n,s)?n[s]:t}function d0(n,s,t){for(var o=0;o!==s.length;)if((n=_E(n,s[o++],rh))===rh)return t;return n}function kv(n){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=mE(s,t),l=n||Object.keys(us({},t,{},s));return l.every(o)}function mE(n,s){return function(t){if("string"==typeof t)return(0,Je.is)(s[t],n[t]);if(Array.isArray(t))return(0,Je.is)(d0(s,t),d0(n,t));throw new TypeError("Invalid key: expected Array or string: "+t)}}var gE=function(n){function s(){return Ln(this,s),ac(this,_o(s).apply(this,arguments))}return function Zs(n,s){if("function"!=typeof s&&null!==s)throw new TypeError("Super expression must either be null or a function");n.prototype=Object.create(s&&s.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),s&&ya(n,s)}(s,n),function ni(n,s,t){s&&Or(n.prototype,s),t&&Or(n,t)}(s,[{key:"shouldComponentUpdate",value:function(o){var l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return!kv(this.updateOnProps,this.props,o,"updateOnProps")||!kv(this.updateOnStates,this.state,l,"updateOnStates")}}]),s}(Ne.Component);const vE=gE;function fx(n,s){if(Array.prototype.indexOf)return n.indexOf(s);for(var t=0,o=n.length;t<o;t++)if(n[t]===s)return t;return-1}function $v(n,s){for(var t=n.length-1;t>=0;t--)!0===s(n[t])&&n.splice(t,1)}function jO(n){throw new Error("Unhandled case for value: '".concat(n,"'"))}var t,GO=function(){function n(s){void 0===s&&(s={}),this.tagName="",this.attrs={},this.innerHTML="",this.whitespaceRegex=/\s+/,this.tagName=s.tagName||"",this.attrs=s.attrs||{},this.innerHTML=s.innerHtml||s.innerHTML||""}return n.prototype.setTagName=function(s){return this.tagName=s,this},n.prototype.getTagName=function(){return this.tagName||""},n.prototype.setAttr=function(s,t){return this.getAttrs()[s]=t,this},n.prototype.getAttr=function(s){return this.getAttrs()[s]},n.prototype.setAttrs=function(s){return Object.assign(this.getAttrs(),s),this},n.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},n.prototype.setClass=function(s){return this.setAttr("class",s)},n.prototype.addClass=function(s){for(var C,t=this.getClass(),o=this.whitespaceRegex,l=t?t.split(o):[],_=s.split(o);C=_.shift();)-1===fx(l,C)&&l.push(C);return this.getAttrs().class=l.join(" "),this},n.prototype.removeClass=function(s){for(var C,t=this.getClass(),o=this.whitespaceRegex,l=t?t.split(o):[],_=s.split(o);l.length&&(C=_.shift());){var R=fx(l,C);-1!==R&&l.splice(R,1)}return this.getAttrs().class=l.join(" "),this},n.prototype.getClass=function(){return this.getAttrs().class||""},n.prototype.hasClass=function(s){return-1!==(" "+this.getClass()+" ").indexOf(" "+s+" ")},n.prototype.setInnerHTML=function(s){return this.innerHTML=s,this},n.prototype.setInnerHtml=function(s){return this.setInnerHTML(s)},n.prototype.getInnerHTML=function(){return this.innerHTML||""},n.prototype.getInnerHtml=function(){return this.getInnerHTML()},n.prototype.toAnchorString=function(){var s=this.getTagName(),t=this.buildAttrsStr();return["<",s,t=t?" "+t:"",">",this.getInnerHtml(),"</",s,">"].join("")},n.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var s=this.getAttrs(),t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(o+'="'+s[o]+'"');return t.join(" ")},n}(),px=function(){function n(s){void 0===s&&(s={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=s.newWindow||!1,this.truncate=s.truncate||{},this.className=s.className||""}return n.prototype.build=function(s){return new GO({tagName:"a",attrs:this.createAttrs(s),innerHtml:this.processAnchorText(s.getAnchorText())})},n.prototype.createAttrs=function(s){var t={href:s.getAnchorHref()},o=this.createCssClass(s);return o&&(t.class=o),this.newWindow&&(t.target="_blank",t.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length<s.getAnchorText().length&&(t.title=s.getAnchorHref()),t},n.prototype.createCssClass=function(s){var t=this.className;if(t){for(var o=[t],l=s.getCssClassSuffixes(),_=0,C=l.length;_<C;_++)o.push(t+"-"+l[_]);return o.join(" ")}return""},n.prototype.processAnchorText=function(s){return this.doTruncate(s)},n.prototype.doTruncate=function(s){var t=this.truncate;if(!t||!t.length)return s;var o=t.length,l=t.location;return"smart"===l?function mP(n,s,t){var o,l;null==t?(t="&hellip;",l=3,o=8):(l=t.length,o=t.length);var C=function(we){var G="";return we.scheme&&we.host&&(G+=we.scheme+"://"),we.host&&(G+=we.host),we.path&&(G+="/"+we.path),we.query&&(G+="?"+we.query),we.fragment&&(G+="#"+we.fragment),G},R=function(we,G){var Dt=G/2,bt=Math.ceil(Dt),Bt=-1*Math.floor(Dt),Jt="";return Bt<0&&(Jt=we.substr(Bt)),we.substr(0,bt)+t+Jt};if(n.length<=s)return n;var G,Dt,bt,N=s-l,V=(G={},(bt=(Dt=n).match(/^([a-z]+):\/\//i))&&(G.scheme=bt[1],Dt=Dt.substr(bt[0].length)),(bt=Dt.match(/^(.*?)(?=(\?|#|\/|$))/i))&&(G.host=bt[1],Dt=Dt.substr(bt[0].length)),(bt=Dt.match(/^\/(.*?)(?=(\?|#|$))/i))&&(G.path=bt[1],Dt=Dt.substr(bt[0].length)),(bt=Dt.match(/^\?(.*?)(?=(#|$))/i))&&(G.query=bt[1],Dt=Dt.substr(bt[0].length)),(bt=Dt.match(/^#(.*?)$/i))&&(G.fragment=bt[1]),G);if(V.query){var Q=V.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);Q&&(V.query=V.query.substr(0,Q[1].length),n=C(V))}if(n.length<=s||(V.host&&(V.host=V.host.replace(/^www\./,""),n=C(V)),n.length<=s))return n;var oe="";if(V.host&&(oe+=V.host),oe.length>=N)return V.host.length==s?(V.host.substr(0,s-l)+t).substr(0,N+o):R(oe,N).substr(0,N+o);var le="";if(V.path&&(le+="/"+V.path),V.query&&(le+="?"+V.query),le){if((oe+le).length>=N)return(oe+le).length==s?(oe+le).substr(0,s):(oe+R(le,N-oe.length)).substr(0,N+o);oe+=le}if(V.fragment){var ye="#"+V.fragment;if((oe+ye).length>=N)return(oe+ye).length==s?(oe+ye).substr(0,s):(oe+R(ye,N-oe.length)).substr(0,N+o);oe+=ye}if(V.scheme&&V.host){var Ie=V.scheme+"://";if((oe+Ie).length<N)return(Ie+oe).substr(0,s)}if(oe.length<=s)return oe;var ke="";return N>0&&(ke=oe.substr(-1*Math.floor(N/2))),(oe.substr(0,Math.ceil(N/2))+t+ke).substr(0,N+o)}(s,o):"middle"===l?function gP(n,s,t){if(n.length<=s)return n;var o,l;null==t?(t="&hellip;",o=8,l=3):(o=t.length,l=t.length);var _=s-l,C="";return _>0&&(C=n.substr(-1*Math.floor(_/2))),(n.substr(0,Math.ceil(_/2))+t+C).substr(0,_+o)}(s,o):function vP(n,s,t){return function hP(n,s,t){var o;return n.length>s&&(null==t?(t="&hellip;",o=3):o=t.length,n=n.substring(0,s-o)+t),n}(n,s,t)}(s,o)},n}(),f0=function(){function n(s){this.__jsduckDummyDocProp=null,this.matchedText="",this.offset=0,this.tagBuilder=s.tagBuilder,this.matchedText=s.matchedText,this.offset=s.offset}return n.prototype.getMatchedText=function(){return this.matchedText},n.prototype.setOffset=function(s){this.offset=s},n.prototype.getOffset=function(){return this.offset},n.prototype.getCssClassSuffixes=function(){return[this.getType()]},n.prototype.buildTag=function(){return this.tagBuilder.build(this)},n}(),hx=function(n){function s(t){var o=n.call(this,t)||this;return o.email="",o.email=t.email,o}return(0,Z.ZT)(s,n),s.prototype.getType=function(){return"email"},s.prototype.getEmail=function(){return this.email},s.prototype.getAnchorHref=function(){return"mailto:"+this.email},s.prototype.getAnchorText=function(){return this.email},s}(f0),_x=function(n){function s(t){var o=n.call(this,t)||this;return o.serviceName="",o.hashtag="",o.serviceName=t.serviceName,o.hashtag=t.hashtag,o}return(0,Z.ZT)(s,n),s.prototype.getType=function(){return"hashtag"},s.prototype.getServiceName=function(){return this.serviceName},s.prototype.getHashtag=function(){return this.hashtag},s.prototype.getAnchorHref=function(){var t=this.serviceName,o=this.hashtag;switch(t){case"twitter":return"https://twitter.com/hashtag/"+o;case"facebook":return"https://www.facebook.com/hashtag/"+o;case"instagram":return"https://instagram.com/explore/tags/"+o;case"tiktok":return"https://www.tiktok.com/tag/"+o;default:throw new Error("Unknown service name to point hashtag to: "+t)}},s.prototype.getAnchorText=function(){return"#"+this.hashtag},s}(f0),mx=function(n){function s(t){var o=n.call(this,t)||this;return o.serviceName="twitter",o.mention="",o.mention=t.mention,o.serviceName=t.serviceName,o}return(0,Z.ZT)(s,n),s.prototype.getType=function(){return"mention"},s.prototype.getMention=function(){return this.mention},s.prototype.getServiceName=function(){return this.serviceName},s.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;case"tiktok":return"https://www.tiktok.com/@"+this.mention;default:throw new Error("Unknown service name to point mention to: "+this.serviceName)}},s.prototype.getAnchorText=function(){return"@"+this.mention},s.prototype.getCssClassSuffixes=function(){var t=n.prototype.getCssClassSuffixes.call(this),o=this.getServiceName();return o&&t.push(o),t},s}(f0),gx=function(n){function s(t){var o=n.call(this,t)||this;return o.number="",o.plusSign=!1,o.number=t.number,o.plusSign=t.plusSign,o}return(0,Z.ZT)(s,n),s.prototype.getType=function(){return"phone"},s.prototype.getPhoneNumber=function(){return this.number},s.prototype.getNumber=function(){return this.getPhoneNumber()},s.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},s.prototype.getAnchorText=function(){return this.matchedText},s}(f0),vx=function(n){function s(t){var o=n.call(this,t)||this;return o.url="",o.urlMatchType="scheme",o.protocolUrlMatch=!1,o.protocolRelativeMatch=!1,o.stripPrefix={scheme:!0,www:!0},o.stripTrailingSlash=!0,o.decodePercentEncoding=!0,o.schemePrefixRegex=/^(https?:\/\/)?/i,o.wwwPrefixRegex=/^(https?:\/\/)?(www\.)?/i,o.protocolRelativeRegex=/^\/\//,o.protocolPrepended=!1,o.urlMatchType=t.urlMatchType,o.url=t.url,o.protocolUrlMatch=t.protocolUrlMatch,o.protocolRelativeMatch=t.protocolRelativeMatch,o.stripPrefix=t.stripPrefix,o.stripTrailingSlash=t.stripTrailingSlash,o.decodePercentEncoding=t.decodePercentEncoding,o}return(0,Z.ZT)(s,n),s.prototype.getType=function(){return"url"},s.prototype.getUrlMatchType=function(){return this.urlMatchType},s.prototype.getUrl=function(){var t=this.url;return!this.protocolRelativeMatch&&!this.protocolUrlMatch&&!this.protocolPrepended&&(t=this.url="http://"+t,this.protocolPrepended=!0),t},s.prototype.getAnchorHref=function(){return this.getUrl().replace(/&amp;/g,"&")},s.prototype.getAnchorText=function(){var t=this.getMatchedText();return this.protocolRelativeMatch&&(t=this.stripProtocolRelativePrefix(t)),this.stripPrefix.scheme&&(t=this.stripSchemePrefix(t)),this.stripPrefix.www&&(t=this.stripWwwPrefix(t)),this.stripTrailingSlash&&(t=this.removeTrailingSlash(t)),this.decodePercentEncoding&&(t=this.removePercentEncoding(t)),t},s.prototype.stripSchemePrefix=function(t){return t.replace(this.schemePrefixRegex,"")},s.prototype.stripWwwPrefix=function(t){return t.replace(this.wwwPrefixRegex,"$1")},s.prototype.stripProtocolRelativePrefix=function(t){return t.replace(this.protocolRelativeRegex,"")},s.prototype.removeTrailingSlash=function(t){return"/"===t.charAt(t.length-1)&&(t=t.slice(0,-1)),t},s.prototype.removePercentEncoding=function(t){var o=t.replace(/%22/gi,"&quot;").replace(/%26/gi,"&amp;").replace(/%27/gi,"&#39;").replace(/%3C/gi,"&lt;").replace(/%3E/gi,"&gt;");try{return decodeURIComponent(o)}catch(l){return o}},s}(f0),p0=function n(s){this.__jsduckDummyDocProp=null,this.tagBuilder=s.tagBuilder},VO=/[A-Za-z]/,yP=/[\d]/,EP=/[\D]/,Hv=/\s/,ZO=/['"]/,bP=/[\x00-\x1F\x7F]/,yx=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,Ex=yx+/\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff/.source+/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,UT=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,CP=Ex+UT,Pd=Ex+UT,EE=new RegExp("[".concat(Pd,"]")),MP="(?:["+UT+"]{1,3}\\.){3}["+UT+"]{1,3}",OP="["+Pd+"](?:["+Pd+"\\-_]{0,61}["+Pd+"])?",bx=function(n){return"(?=("+OP+"))\\"+n},zO=function(n){return"(?:"+bx(n)+"(?:\\."+bx(n+1)+"){0,126}|"+MP+")"},YT=(new RegExp("["+Pd+".\\-]*["+Pd+"\\-]"),EE),Sx=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|verm\xf6gensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|verm\xf6gensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|travelchannel|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|\u0645\u0648\u0631\u064a\u062a\u0627\u0646\u064a\u0627|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|\u043a\u0430\u0442\u043e\u043b\u0438\u043a|\u0627\u062a\u0635\u0627\u0644\u0627\u062a|\u0627\u0644\u0628\u062d\u0631\u064a\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0639\u0644\u064a\u0627\u0646|\u067e\u0627\u06a9\u0633\u062a\u0627\u0646|\u0643\u0627\u062b\u0648\u0644\u064a\u0643|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|\u043c\u043e\u0441\u043a\u0432\u0430|\u043e\u043d\u043b\u0430\u0439\u043d|\u0627\u0628\u0648\u0638\u0628\u064a|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0641\u0644\u0633\u0637\u064a\u0646|\u0645\u0644\u064a\u0633\u064a\u0627|\u092d\u093e\u0930\u0924\u092e\u094d|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u30d5\u30a1\u30c3\u30b7\u30e7\u30f3|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|\u05d9\u05e9\u05e8\u05d0\u05dc|\u0627\u06cc\u0631\u0627\u0646|\u0628\u0627\u0632\u0627\u0631|\u0628\u06be\u0627\u0631\u062a|\u0633\u0648\u062f\u0627\u0646|\u0633\u0648\u0631\u064a\u0629|\u0647\u0645\u0631\u0627\u0647|\u092d\u093e\u0930\u094b\u0924|\u0938\u0902\u0917\u0920\u0928|\u09ac\u09be\u0982\u09b2\u09be|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0d2d\u0d3e\u0d30\u0d24\u0d02|\u5609\u91cc\u5927\u9152\u5e97|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|\u0434\u0435\u0442\u0438|\u0441\u0430\u0439\u0442|\u0628\u0627\u0631\u062a|\u0628\u064a\u062a\u0643|\u0680\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0645\u0648\u0642\u0639|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u09ad\u09be\u09f0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b2d\u0b3e\u0b30\u0b24|\u0cad\u0cbe\u0cb0\u0ca4|\u0dbd\u0d82\u0d9a\u0dcf|\u30a2\u30de\u30be\u30f3|\u30b0\u30fc\u30b0\u30eb|\u30af\u30e9\u30a6\u30c9|\u30dd\u30a4\u30f3\u30c8|\u7ec4\u7ec7\u673a\u6784|\u96fb\u8a0a\u76c8\u79d1|\u9999\u683c\u91cc\u62c9|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|\u0431\u0435\u043b|\u043a\u043e\u043c|\u049b\u0430\u0437|\u043c\u043a\u0434|\u043c\u043e\u043d|\u043e\u0440\u0433|\u0440\u0443\u0441|\u0441\u0440\u0431|\u0443\u043a\u0440|\u0570\u0561\u0575|\u05e7\u05d5\u05dd|\u0639\u0631\u0628|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0915\u0949\u092e|\u0928\u0947\u091f|\u0e04\u0e2d\u0e21|\u0e44\u0e17\u0e22|\u0ea5\u0eb2\u0ea7|\u30b9\u30c8\u30a2|\u30bb\u30fc\u30eb|\u307f\u3093\u306a|\u4e2d\u6587\u7f51|\u4e9a\u9a6c\u900a|\u5929\u4e3b\u6559|\u6211\u7231\u4f60|\u65b0\u52a0\u5761|\u6de1\u9a6c\u9521|\u8bfa\u57fa\u4e9a|\u98de\u5229\u6d66|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|\u03b5\u03bb|\u03b5\u03c5|\u0431\u0433|\u0435\u044e|\u0440\u0444|\u10d2\u10d4|\ub2f7\ub137|\ub2f7\ucef4|\uc0bc\uc131|\ud55c\uad6d|\u30b3\u30e0|\u4e16\u754c|\u4e2d\u4fe1|\u4e2d\u56fd|\u4e2d\u570b|\u4f01\u4e1a|\u4f5b\u5c71|\u4fe1\u606f|\u5065\u5eb7|\u516b\u5366|\u516c\u53f8|\u516c\u76ca|\u53f0\u6e7e|\u53f0\u7063|\u5546\u57ce|\u5546\u5e97|\u5546\u6807|\u5609\u91cc|\u5728\u7ebf|\u5927\u62ff|\u5a31\u4e50|\u5bb6\u96fb|\u5e7f\u4e1c|\u5fae\u535a|\u6148\u5584|\u624b\u673a|\u62db\u8058|\u653f\u52a1|\u653f\u5e9c|\u65b0\u95fb|\u65f6\u5c1a|\u66f8\u7c4d|\u673a\u6784|\u6e38\u620f|\u6fb3\u9580|\u70b9\u770b|\u79fb\u52a8|\u7f51\u5740|\u7f51\u5e97|\u7f51\u7ad9|\u7f51\u7edc|\u8054\u901a|\u8c37\u6b4c|\u8d2d\u7269|\u901a\u8ca9|\u96c6\u56e2|\u98df\u54c1|\u9910\u5385|\u9999\u6e2f)/,AP=new RegExp("[".concat(Pd,"!#$%&'*+/=?^_`{|}~-]")),DP=new RegExp("^".concat(Sx.source,"$")),Tx=function(n){function s(){var t=null!==n&&n.apply(this,arguments)||this;return t.localPartCharRegex=AP,t.strictTldRegex=DP,t}return(0,Z.ZT)(s,n),s.prototype.parseMatches=function(t){for(var o=this.tagBuilder,l=this.localPartCharRegex,_=this.strictTldRegex,C=[],R=t.length,N=new jT,V={m:"a",a:"i",i:"l",l:"t",t:"o",o:":"},Q=0,oe=0,le=N;Q<R;){var _e=t.charAt(Q);switch(oe){case 0:"m"===(zt=_e)?Bt(1):l.test(zt)&&Bt();break;case 1:$e(t.charAt(Q-1),_e);break;case 2:Ie(_e);break;case 3:ke(_e);break;case 4:we(_e);break;case 5:G(_e);break;case 6:Dt(_e);break;case 7:bt(_e);break;default:jO(oe)}Q++}var zt;return Mn(),C;function $e(zt,xn){":"===zt?l.test(xn)?(oe=2,le=new jT((0,Z.pi)((0,Z.pi)({},le),{hasMailtoPrefix:!0}))):Jt():V[zt]===xn||(l.test(xn)?oe=2:"."===xn?oe=3:"@"===xn?oe=4:Jt())}function Ie(zt){"."===zt?oe=3:"@"===zt?oe=4:l.test(zt)||Jt()}function ke(zt){"."===zt||"@"===zt?Jt():l.test(zt)?oe=2:Jt()}function we(zt){YT.test(zt)?oe=5:Jt()}function G(zt){"."===zt?oe=7:"-"===zt?oe=6:YT.test(zt)||Mn()}function Dt(zt){"-"===zt||"."===zt?Mn():YT.test(zt)?oe=5:Mn()}function bt(zt){"."===zt||"-"===zt?Mn():YT.test(zt)?(oe=5,le=new jT((0,Z.pi)((0,Z.pi)({},le),{hasDomainDot:!0}))):Mn()}function Bt(zt){void 0===zt&&(zt=2),oe=zt,le=new jT({idx:Q})}function Jt(){oe=0,le=N}function Mn(){if(le.hasDomainDot){var zt=t.slice(le.idx,Q);/[-.]$/.test(zt)&&(zt=zt.slice(0,-1));var xn=le.hasMailtoPrefix?zt.slice(7):zt;(function Nn(zr){var Vr=(zr.split(".").pop()||"").toLowerCase();return _.test(Vr)})(xn)&&C.push(new hx({tagBuilder:o,matchedText:zt,offset:le.idx,email:xn}))}Jt()}},s}(p0),jT=function n(s){void 0===s&&(s={}),this.idx=void 0!==s.idx?s.idx:-1,this.hasMailtoPrefix=!!s.hasMailtoPrefix,this.hasDomainDot=!!s.hasDomainDot},xP=function(){function n(){}return n.isValid=function(s,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(s,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(s,t)&&!this.isValidIpAddress(s)||this.containsMultipleDots(s))},n.isValidIpAddress=function(s){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==s.match(t)},n.containsMultipleDots=function(s){var t=s;return this.hasFullProtocolRegex.test(s)&&(t=s.split("://")[1]),t.split("/")[0].indexOf("..")>-1},n.isValidUriScheme=function(s){var t=s.match(this.uriSchemeRegex),o=t&&t[0].toLowerCase();return"javascript:"!==o&&"vbscript:"!==o},n.urlMatchDoesNotHaveProtocolOrDot=function(s,t){return!(!s||t&&this.hasFullProtocolRegex.test(t)||-1!==s.indexOf("."))},n.urlMatchDoesNotHaveAtLeastOneWordChar=function(s,t){return!(!s||!t||this.hasFullProtocolRegex.test(t)||this.hasWordCharAfterProtocolRegex.test(s))},n.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\/\//,n.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,n.hasWordCharAfterProtocolRegex=new RegExp(":[^\\s]*?["+yx+"]"),n.ipRegex=/[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?\.[0-9][0-9]?[0-9]?(:[0-9]*)?\/?$/,n}(),RP=(t=new RegExp("[/?#](?:["+Pd+"\\-+&@#/%=~_()|'$*\\[\\]{}?!:,.;^\u2713]*["+Pd+"\\-+&@#/%=~_()|'$*\\[\\]{}\u2713])?"),new RegExp(["(?:","(",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\/\/)(?!\d+\/?)(?:\/\/)?)/.source,zO(2),")","|","(","(//)?",/(?:www\.)/.source,zO(6),")","|","(","(//)?",zO(10)+"\\.",Sx.source,"(?![-"+CP+"])",")",")","(?::[0-9]+)?","(?:"+t.source+")?"].join(""),"gi")),wP=new RegExp("["+Pd+"]"),Cx=function(n){function s(t){var o=n.call(this,t)||this;return o.stripPrefix={scheme:!0,www:!0},o.stripTrailingSlash=!0,o.decodePercentEncoding=!0,o.matcherRegex=RP,o.wordCharRegExp=wP,o.stripPrefix=t.stripPrefix,o.stripTrailingSlash=t.stripTrailingSlash,o.decodePercentEncoding=t.decodePercentEncoding,o}return(0,Z.ZT)(s,n),s.prototype.parseMatches=function(t){for(var V,o=this.matcherRegex,l=this.stripPrefix,_=this.stripTrailingSlash,C=this.decodePercentEncoding,R=this.tagBuilder,N=[],Q=function(){var le=V[0],_e=V[1],ye=V[4],ke=V.index,we=V[5]||V[9],G=t.charAt(ke-1);if(!xP.isValid(le,_e)||ke>0&&"@"===G||ke>0&&we&&oe.wordCharRegExp.test(G))return"continue";if(/\?$/.test(le)&&(le=le.substr(0,le.length-1)),oe.matchHasUnbalancedClosingParen(le))le=le.substr(0,le.length-1);else{var Dt=oe.matchHasInvalidCharAfterTld(le,_e);Dt>-1&&(le=le.substr(0,Dt))}var bt=["http://","https://"].find(function(zt){return!!_e&&-1!==_e.indexOf(zt)});if(bt){var Bt=le.indexOf(bt);le=le.substr(Bt),_e=_e.substr(Bt),ke+=Bt}N.push(new vx({tagBuilder:R,matchedText:le,offset:ke,urlMatchType:_e?"scheme":ye?"www":"tld",url:le,protocolUrlMatch:!!_e,protocolRelativeMatch:!!we,stripPrefix:l,stripTrailingSlash:_,decodePercentEncoding:C}))},oe=this;null!==(V=o.exec(t));)Q();return N},s.prototype.matchHasUnbalancedClosingParen=function(t){var l,o=t.charAt(t.length-1);if(")"===o)l="(";else if("]"===o)l="[";else{if("}"!==o)return!1;l="{"}for(var _=0,C=0,R=t.length-1;C<R;C++){var N=t.charAt(C);N===l?_++:N===o&&(_=Math.max(_-1,0))}return 0===_},s.prototype.matchHasInvalidCharAfterTld=function(t,o){if(!t)return-1;var l=0;o&&(l=t.indexOf(":"),t=t.slice(l));var C=new RegExp("^((.?//)?[-."+Pd+"]*[-"+Pd+"]\\.[-"+Pd+"]+)").exec(t);return null===C?-1:(l+=C[1].length,t=t.slice(C[1].length),/^[^-.A-Za-z0-9:\/?#]/.test(t)?l:-1)},s}(p0),Mx=new RegExp("[_".concat(Pd,"]")),Ox=function(n){function s(t){var o=n.call(this,t)||this;return o.serviceName="twitter",o.serviceName=t.serviceName,o}return(0,Z.ZT)(s,n),s.prototype.parseMatches=function(t){for(var o=this.tagBuilder,l=this.serviceName,_=[],C=t.length,R=0,N=-1,V=0;R<C;){var Q=t.charAt(R);switch(V){case 0:"#"===(Ie=Q)?(V=2,N=R):EE.test(Ie)&&(V=1);break;case 1:le(Q);break;case 2:_e(Q);break;case 3:ye(Q);break;default:jO(V)}R++}var Ie;return $e(),_;function le(Ie){EE.test(Ie)||(V=0)}function _e(Ie){V=Mx.test(Ie)?3:EE.test(Ie)?1:0}function ye(Ie){Mx.test(Ie)||($e(),N=-1,V=EE.test(Ie)?1:0)}function $e(){if(N>-1&&R-N<=140){var Ie=t.slice(N,R),ke=new _x({tagBuilder:o,matchedText:Ie,offset:N,serviceName:l,hashtag:Ie.slice(1)});_.push(ke)}}},s}(p0),PP=["twitter","facebook","instagram","tiktok"],FP=new RegExp("".concat(/(?:(?:(?:(\+)?\d{1,3}[-\040.]?)?\(?\d{3}\)?[-\040.]?\d{3}[-\040.]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\040.]?(?:\d[-\040.]?){6,12}\d+))([,;]+[0-9]+#?)*/.source,"|").concat(/(0([1-9]{1}-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/.source),"g"),Ax=function(n){function s(){var t=null!==n&&n.apply(this,arguments)||this;return t.matcherRegex=FP,t}return(0,Z.ZT)(s,n),s.prototype.parseMatches=function(t){for(var C,o=this.matcherRegex,l=this.tagBuilder,_=[];null!==(C=o.exec(t));){var R=C[0],N=R.replace(/[^0-9,;#]/g,""),V=!(!C[1]&&!C[2]),Q=0==C.index?"":t.substr(C.index-1,1),oe=t.substr(C.index+R.length,1),le=!Q.match(/\d/)&&!oe.match(/\d/);this.testMatch(C[3])&&this.testMatch(R)&&le&&_.push(new gx({tagBuilder:l,matchedText:R,offset:C.index,number:N,plusSign:V}))}return _},s.prototype.testMatch=function(t){return EP.test(t)},s}(p0),LP=new RegExp("@[_".concat(Pd,"]{1,50}(?![_").concat(Pd,"])"),"g"),kP=new RegExp("@[_.".concat(Pd,"]{1,30}(?![_").concat(Pd,"])"),"g"),$P=new RegExp("@[-_.".concat(Pd,"]{1,50}(?![-_").concat(Pd,"])"),"g"),HP=new RegExp("@[_.".concat(Pd,"]{1,23}[_").concat(Pd,"](?![_").concat(Pd,"])"),"g"),BP=new RegExp("[^"+Pd+"]"),Dx=function(n){function s(t){var o=n.call(this,t)||this;return o.serviceName="twitter",o.matcherRegexes={twitter:LP,instagram:kP,soundcloud:$P,tiktok:HP},o.nonWordCharRegex=BP,o.serviceName=t.serviceName,o}return(0,Z.ZT)(s,n),s.prototype.parseMatches=function(t){var N,o=this.serviceName,l=this.matcherRegexes[this.serviceName],_=this.nonWordCharRegex,C=this.tagBuilder,R=[];if(!l)return R;for(;null!==(N=l.exec(t));){var V=N.index,Q=t.charAt(V-1);if(0===V||_.test(Q)){var oe=N[0].replace(/\.+$/g,""),le=oe.slice(1);R.push(new mx({tagBuilder:C,matchedText:oe,offset:V,serviceName:o,mention:le}))}}return R},s}(p0);var Gm=function n(s){void 0===s&&(s={}),this.idx=void 0!==s.idx?s.idx:-1,this.type=s.type||"tag",this.name=s.name||"",this.isOpening=!!s.isOpening,this.isClosing=!!s.isClosing},YP=function(){function n(s){void 0===s&&(s={}),this.version=n.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(s.urls),this.email="boolean"==typeof s.email?s.email:this.email,this.phone="boolean"==typeof s.phone?s.phone:this.phone,this.hashtag=s.hashtag||this.hashtag,this.mention=s.mention||this.mention,this.newWindow="boolean"==typeof s.newWindow?s.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(s.stripPrefix),this.stripTrailingSlash="boolean"==typeof s.stripTrailingSlash?s.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding="boolean"==typeof s.decodePercentEncoding?s.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=s.sanitizeHtml||!1;var t=this.mention;if(!1!==t&&-1===["twitter","instagram","soundcloud","tiktok"].indexOf(t))throw new Error("invalid `mention` cfg '".concat(t,"' - see docs"));var o=this.hashtag;if(!1!==o&&-1===PP.indexOf(o))throw new Error("invalid `hashtag` cfg '".concat(o,"' - see docs"));this.truncate=this.normalizeTruncateCfg(s.truncate),this.className=s.className||this.className,this.replaceFn=s.replaceFn||this.replaceFn,this.context=s.context||this}return n.link=function(s,t){return new n(t).link(s)},n.parse=function(s,t){return new n(t).parse(s)},n.prototype.normalizeUrlsCfg=function(s){return null==s&&(s=!0),"boolean"==typeof s?{schemeMatches:s,wwwMatches:s,tldMatches:s}:{schemeMatches:"boolean"!=typeof s.schemeMatches||s.schemeMatches,wwwMatches:"boolean"!=typeof s.wwwMatches||s.wwwMatches,tldMatches:"boolean"!=typeof s.tldMatches||s.tldMatches}},n.prototype.normalizeStripPrefixCfg=function(s){return null==s&&(s=!0),"boolean"==typeof s?{scheme:s,www:s}:{scheme:"boolean"!=typeof s.scheme||s.scheme,www:"boolean"!=typeof s.www||s.www}},n.prototype.normalizeTruncateCfg=function(s){return"number"==typeof s?{length:s,location:"end"}:function pP(n,s){for(var t in s)s.hasOwnProperty(t)&&void 0===n[t]&&(n[t]=s[t]);return n}(s||{},{length:Number.POSITIVE_INFINITY,location:"end"})},n.prototype.parse=function(s){var t=this,o=["a","style","script"],l=0,_=[];return function UP(n,s){for(var t=s.onOpenTag,o=s.onCloseTag,l=s.onText,_=s.onComment,C=s.onDoctype,R=new Gm,N=0,V=n.length,Q=0,oe=0,le=R;N<V;){var _e=n.charAt(N);switch(Q){case 0:"<"===_e&&In();break;case 1:"!"===(Wr=_e)?Q=13:"/"===Wr?(Q=2,le=new Gm((0,Z.pi)((0,Z.pi)({},le),{isClosing:!0}))):"<"===Wr?In():VO.test(Wr)?(Q=3,le=new Gm((0,Z.pi)((0,Z.pi)({},le),{isOpening:!0}))):(Q=0,le=R);break;case 2:ke(_e);break;case 3:Ie(_e);break;case 4:we(_e);break;case 5:G(_e);break;case 6:Dt(_e);break;case 7:bt(_e);break;case 8:Bt(_e);break;case 9:Jt(_e);break;case 10:Mn(_e);break;case 11:zt(_e);break;case 12:xn(_e);break;case 13:"--"===n.substr(N,2)?(N+=2,le=new Gm((0,Z.pi)((0,Z.pi)({},le),{type:"comment"})),Q=14):"DOCTYPE"===n.substr(N,7).toUpperCase()?(N+=7,le=new Gm((0,Z.pi)((0,Z.pi)({},le),{type:"doctype"})),Q=20):ur();break;case 14:zr(_e);break;case 15:Hr(_e);break;case 16:Vr(_e);break;case 17:qr(_e);break;case 18:On(_e);break;case 19:Jn(_e);break;case 20:Qn(_e);break;default:jO(Q)}N++}var Wr;function Ie(Wr){Hv.test(Wr)?(le=new Gm((0,Z.pi)((0,Z.pi)({},le),{name:Di()})),Q=4):"<"===Wr?In():"/"===Wr?(le=new Gm((0,Z.pi)((0,Z.pi)({},le),{name:Di()})),Q=12):">"===Wr?(le=new Gm((0,Z.pi)((0,Z.pi)({},le),{name:Di()})),Yr()):!VO.test(Wr)&&!yP.test(Wr)&&":"!==Wr&&ur()}function ke(Wr){">"===Wr?ur():VO.test(Wr)?Q=3:ur()}function we(Wr){Hv.test(Wr)||("/"===Wr?Q=12:">"===Wr?Yr():"<"===Wr?In():"="===Wr||ZO.test(Wr)||bP.test(Wr)?ur():Q=5)}function G(Wr){Hv.test(Wr)?Q=6:"/"===Wr?Q=12:"="===Wr?Q=7:">"===Wr?Yr():"<"===Wr?In():ZO.test(Wr)&&ur()}function Dt(Wr){Hv.test(Wr)||("/"===Wr?Q=12:"="===Wr?Q=7:">"===Wr?Yr():"<"===Wr?In():ZO.test(Wr)?ur():Q=5)}function bt(Wr){Hv.test(Wr)||('"'===Wr?Q=8:"'"===Wr?Q=9:/[>=`]/.test(Wr)?ur():"<"===Wr?In():Q=10)}function Bt(Wr){'"'===Wr&&(Q=11)}function Jt(Wr){"'"===Wr&&(Q=11)}function Mn(Wr){Hv.test(Wr)?Q=4:">"===Wr?Yr():"<"===Wr&&In()}function zt(Wr){Hv.test(Wr)?Q=4:"/"===Wr?Q=12:">"===Wr?Yr():"<"===Wr?In():(Q=4,function ji(){N--}())}function xn(Wr){">"===Wr?(le=new Gm((0,Z.pi)((0,Z.pi)({},le),{isClosing:!0})),Yr()):Q=4}function zr(Wr){"-"===Wr?Q=15:">"===Wr?ur():Q=16}function Hr(Wr){"-"===Wr?Q=18:">"===Wr?ur():Q=16}function Vr(Wr){"-"===Wr&&(Q=17)}function qr(Wr){Q="-"===Wr?18:16}function On(Wr){">"===Wr?Yr():"!"===Wr?Q=19:"-"===Wr||(Q=16)}function Jn(Wr){"-"===Wr?Q=17:">"===Wr?Yr():Q=16}function Qn(Wr){">"===Wr?Yr():"<"===Wr&&In()}function ur(){Q=0,le=R}function In(){Q=1,le=new Gm({idx:N})}function Yr(){var Wr=n.slice(oe,le.idx);Wr&&l(Wr,oe),"comment"===le.type?_(le.idx):"doctype"===le.type?C(le.idx):(le.isOpening&&t(le.name,le.idx),le.isClosing&&o(le.name,le.idx)),ur(),oe=N+1}function Di(){return n.slice(le.idx+(le.isClosing?2:1),N).toLowerCase()}oe<N&&function Qi(){var Wr=n.slice(oe,N);l(Wr,oe),oe=N+1}()}(s,{onOpenTag:function(C){o.indexOf(C)>=0&&l++},onText:function(C,R){if(0===l){var V=function _P(n,s){if(!s.global)throw new Error("`splitRegex` must have the 'g' flag set");for(var l,t=[],o=0;l=s.exec(n);)t.push(n.substring(o,l.index)),t.push(l[0]),o=l.index+l[0].length;return t.push(n.substring(o)),t}(C,/(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi),Q=R;V.forEach(function(oe,le){if(le%2==0){var _e=t.parseText(oe,Q);_.push.apply(_,_e)}Q+=oe.length})}},onCloseTag:function(C){o.indexOf(C)>=0&&(l=Math.max(l-1,0))},onComment:function(C){},onDoctype:function(C){}}),_=this.compactMatches(_),_=this.removeUnwantedMatches(_)},n.prototype.compactMatches=function(s){s.sort(function(N,V){return N.getOffset()-V.getOffset()});for(var t=0;t<s.length-1;){var o=s[t],l=o.getOffset(),_=o.getMatchedText().length,C=l+_;if(t+1<s.length){if(s[t+1].getOffset()===l){var R=s[t+1].getMatchedText().length>_?t:t+1;s.splice(R,1);continue}if(s[t+1].getOffset()<C){s.splice(t+1,1);continue}}t++}return s},n.prototype.removeUnwantedMatches=function(s){return this.hashtag||$v(s,function(t){return"hashtag"===t.getType()}),this.email||$v(s,function(t){return"email"===t.getType()}),this.phone||$v(s,function(t){return"phone"===t.getType()}),this.mention||$v(s,function(t){return"mention"===t.getType()}),this.urls.schemeMatches||$v(s,function(t){return"url"===t.getType()&&"scheme"===t.getUrlMatchType()}),this.urls.wwwMatches||$v(s,function(t){return"url"===t.getType()&&"www"===t.getUrlMatchType()}),this.urls.tldMatches||$v(s,function(t){return"url"===t.getType()&&"tld"===t.getUrlMatchType()}),s},n.prototype.parseText=function(s,t){void 0===t&&(t=0),t=t||0;for(var o=this.getMatchers(),l=[],_=0,C=o.length;_<C;_++){for(var R=o[_].parseMatches(s),N=0,V=R.length;N<V;N++)R[N].setOffset(t+R[N].getOffset());l.push.apply(l,R)}return l},n.prototype.link=function(s){if(!s)return"";this.sanitizeHtml&&(s=s.replace(/</g,"&lt;").replace(/>/g,"&gt;"));for(var t=this.parse(s),o=[],l=0,_=0,C=t.length;_<C;_++){var R=t[_];o.push(s.substring(l,R.getOffset())),o.push(this.createMatchReturnVal(R)),l=R.getOffset()+R.getMatchedText().length}return o.push(s.substring(l)),o.join("")},n.prototype.createMatchReturnVal=function(s){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,s)),"string"==typeof t?t:!1===t?s.getMatchedText():t instanceof GO?t.toAnchorString():s.buildTag().toAnchorString()},n.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var s=this.getTagBuilder(),t=[new Ox({tagBuilder:s,serviceName:this.hashtag}),new Tx({tagBuilder:s}),new Ax({tagBuilder:s}),new Dx({tagBuilder:s,serviceName:this.mention}),new Cx({tagBuilder:s,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},n.prototype.getTagBuilder=function(){var s=this.tagBuilder;return s||(s=this.tagBuilder=new px({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),s},n.version="3.16.2",n.AnchorTagBuilder=px,n.HtmlTag=GO,n.matcher={Email:Tx,Hashtag:Ox,Matcher:p0,Mention:Dx,Phone:Ax,Url:Cx},n.match={Email:hx,Hashtag:_x,Match:f0,Mention:mx,Phone:gx,Url:vx},n}();const jP=YP;var GP=/www|@|\:\/\//;function VP(n){return/^<a[>\s]/i.test(n)}function ZP(n){return/^<\/a\s*>/i.test(n)}function zP(){var n=[],s=new jP({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case"url":n.push({text:t.matchedText,url:t.getUrl()});break;case"email":n.push({text:t.matchedText,url:"mailto:"+t.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:n,autolinker:s}}function WP(n){var s,t,o,l,_,C,R,N,V,Q,oe,ye,$e,le=n.tokens,_e=null;for(t=0,o=le.length;t<o;t++)if("inline"===le[t].type)for(oe=0,s=(l=le[t].children).length-1;s>=0;s--)if("link_close"!==(_=l[s]).type){if("htmltag"===_.type&&(VP(_.content)&&oe>0&&oe--,ZP(_.content)&&oe++),!(oe>0)&&"text"===_.type&&GP.test(_.content)){if(_e||(ye=(_e=zP()).links,$e=_e.autolinker),C=_.content,ye.length=0,$e.link(C),!ye.length)continue;for(R=[],Q=_.level,N=0;N<ye.length;N++)!n.inline.validateLink(ye[N].url)||((V=C.indexOf(ye[N].text))&&R.push({type:"text",content:C.slice(0,V),level:Q}),R.push({type:"link_open",href:ye[N].url,title:"",level:Q++}),R.push({type:"text",content:ye[N].text,level:Q}),R.push({type:"link_close",level:--Q}),C=C.slice(V+ye[N].text.length));C.length&&R.push({type:"text",content:C,level:Q}),le[t].children=l=[].concat(l.slice(0,s),R,l.slice(s+1))}}else for(s--;l[s].level!==_.level&&"link_open"!==l[s].type;)s--}function JP(n){n.core.ruler.push("linkify",WP)}var QP=i(23358),XP=i.n(QP),KP=i(1653),qP=i.n(KP),eN=i(86101),tN=i.n(eN),WO=i(64975);function xx(n){if(WO(n))return n}var Bv=i(63380),JO=i(66627),Rx=i(8225);function wx(n){if(void 0!==Bv&&null!=JO(n)||null!=n["@@iterator"])return Rx(n)}var nN=i(19621);function QO(n,s){(null==s||s>n.length)&&(s=n.length);for(var t=0,o=new Array(s);t<s;t++)o[t]=n[t];return o}function GT(n,s){var t;if(n){if("string"==typeof n)return QO(n,s);var o=nN(t=Object.prototype.toString.call(n)).call(t,8,-1);if("Object"===o&&n.constructor&&(o=n.constructor.name),"Map"===o||"Set"===o)return Rx(n);if("Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return QO(n,s)}}function Px(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function rN(n){return xx(n)||wx(n)||GT(n)||Px()}var iN=i(53757),oN=i.n(iN),sN=i(48129),aN=i.n(sN),lN=i(31507),uN=i.n(lN),cN=i(17346),dN=i.n(cN),fN=i(12232),pN=i.n(fN),Nx=i(69138);function Ix(n,s,t,o,l,_,C){try{var R=n[_](C),N=R.value}catch(V){return void t(V)}R.done?s(N):Nx.resolve(N).then(o,l)}function hN(n){return function(){var s=this,t=arguments;return new Nx(function(o,l){var _=n.apply(s,t);function C(N){Ix(_,o,l,C,R,"next",N)}function R(N){Ix(_,o,l,C,R,"throw",N)}C(void 0)})}}var _N=i(33950),mN=i.n(_N),gN=i(86413),vN=i.n(gN),yN=i(14226),EN=i.n(yN),bN=i(64871),SN=i.n(bN),TN=i(41776),CN=i.n(TN),MN=i(12666),ON=i.n(MN);function Fx(n,s,t,o,l,_,C){try{var R=n[_](C),N=R.value}catch(V){return void t(V)}R.done?s(N):Promise.resolve(N).then(o,l)}function K_(n){return function(){var s=this,t=arguments;return new Promise(function(o,l){var _=n.apply(s,t);function C(N){Fx(_,o,l,C,R,"next",N)}function R(N){Fx(_,o,l,C,R,"throw",N)}C(void 0)})}}var Lx=i(22714),VT=i(23591),AN=i(14306),XO=i(45862),kx=i(6379),$x=i(51134),DN=i(70891),bE=i(77576),xN=i(66342);function Uv(n){return(Uv="function"==typeof Bv&&"symbol"==typeof xN?function(s){return typeof s}:function(s){return s&&"function"==typeof Bv&&s.constructor===Bv&&s!==Bv.prototype?"symbol":typeof s})(n)}var RN=i(71950);function Hx(n){var s=function wN(n,s){if("object"!==Uv(n)||null===n)return n;var t=n[RN];if(void 0!==t){var o=t.call(n,s||"default");if("object"!==Uv(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===s?String:Number)(n)}(n,"string");return"symbol"===Uv(s)?s:String(s)}function Bx(n,s,t){return(s=Hx(s))in n?bE(n,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[s]=t,n}function Ux(n,s){var t=Lx(n);if(VT){var o=VT(n);s&&(o=AN(o).call(o,function(l){return XO(n,l).enumerable})),t.push.apply(t,o)}return t}function kc(n){for(var s=1;s<arguments.length;s++){var t,o,l=null!=arguments[s]?arguments[s]:{};s%2?kx(t=Ux(Object(l),!0)).call(t,function(_){Bx(n,_,l[_])}):$x?DN(n,$x(l)):kx(o=Ux(Object(l))).call(o,function(_){bE(n,_,XO(l,_))})}return n}const Yx="application/json, application/yaml";function jx(n){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{requestInterceptor:t,responseInterceptor:o}=s,l=n.withCredentials?"include":"same-origin";return _=>n({url:_,loadSpec:!0,requestInterceptor:t,responseInterceptor:o,headers:{Accept:Yx},credentials:l}).then(C=>C.body)}i(71577);var PN=i(59009),KO=i.n(PN);function Gx(n){return null==n}var ip={isNothing:Gx,isObject:function NN(n){return"object"==typeof n&&null!==n},toArray:function IN(n){return Array.isArray(n)?n:Gx(n)?[]:[n]},repeat:function LN(n,s){var o,t="";for(o=0;o<s;o+=1)t+=n;return t},isNegativeZero:function kN(n){return 0===n&&Number.NEGATIVE_INFINITY===1/n},extend:function FN(n,s){var t,o,l,_;if(s)for(t=0,o=(_=Object.keys(s)).length;t<o;t+=1)n[l=_[t]]=s[l];return n}};function Vx(n,s){var t="",o=n.reason||"(unknown reason)";return n.mark?(n.mark.name&&(t+='in "'+n.mark.name+'" '),t+="("+(n.mark.line+1)+":"+(n.mark.column+1)+")",!s&&n.mark.snippet&&(t+="\n\n"+n.mark.snippet),o+" "+t):o}function SE(n,s){Error.call(this),this.name="YAMLException",this.reason=n,this.mark=s,this.message=Vx(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}(SE.prototype=Object.create(Error.prototype)).constructor=SE,SE.prototype.toString=function(s){return this.name+": "+Vx(this,s)};var Nh=SE;function qO(n,s,t,o,l){var _="",C="",R=Math.floor(l/2)-1;return o-s>R&&(s=o-R+(_=" ... ").length),t-o>R&&(t=o+R-(C=" ...").length),{str:_+n.slice(s,t).replace(/\t/g,"\u2192")+C,pos:o-s+_.length}}function eA(n,s){return ip.repeat(" ",s-n.length)+n}var ZN=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],zN=["scalar","sequence","mapping"],Np=function JN(n,s){if(s=s||{},Object.keys(s).forEach(function(t){if(-1===ZN.indexOf(t))throw new Nh('Unknown option "'+t+'" is met in definition of "'+n+'" YAML type.')}),this.options=s,this.tag=n,this.kind=s.kind||null,this.resolve=s.resolve||function(){return!0},this.construct=s.construct||function(t){return t},this.instanceOf=s.instanceOf||null,this.predicate=s.predicate||null,this.represent=s.represent||null,this.representName=s.representName||null,this.defaultStyle=s.defaultStyle||null,this.multi=s.multi||!1,this.styleAliases=function WN(n){var s={};return null!==n&&Object.keys(n).forEach(function(t){n[t].forEach(function(o){s[String(o)]=t})}),s}(s.styleAliases||null),-1===zN.indexOf(this.kind))throw new Nh('Unknown kind "'+this.kind+'" is specified for "'+n+'" YAML type.')};function Zx(n,s){var t=[];return n[s].forEach(function(o){var l=t.length;t.forEach(function(_,C){_.tag===o.tag&&_.kind===o.kind&&_.multi===o.multi&&(l=C)}),t[l]=o}),t}function tA(n){return this.extend(n)}tA.prototype.extend=function(s){var t=[],o=[];if(s instanceof Np)o.push(s);else if(Array.isArray(s))o=o.concat(s);else{if(!s||!Array.isArray(s.implicit)&&!Array.isArray(s.explicit))throw new Nh("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");s.implicit&&(t=t.concat(s.implicit)),s.explicit&&(o=o.concat(s.explicit))}t.forEach(function(_){if(!(_ instanceof Np))throw new Nh("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(_.loadKind&&"scalar"!==_.loadKind)throw new Nh("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(_.multi)throw new Nh("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),o.forEach(function(_){if(!(_ instanceof Np))throw new Nh("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var l=Object.create(tA.prototype);return l.implicit=(this.implicit||[]).concat(t),l.explicit=(this.explicit||[]).concat(o),l.compiledImplicit=Zx(l,"implicit"),l.compiledExplicit=Zx(l,"explicit"),l.compiledTypeMap=function QN(){var s,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function o(l){l.multi?(n.multi[l.kind].push(l),n.multi.fallback.push(l)):n[l.kind][l.tag]=n.fallback[l.tag]=l}for(s=0,t=arguments.length;s<t;s+=1)arguments[s].forEach(o);return n}(l.compiledImplicit,l.compiledExplicit),l};var zx=tA,Wx=new Np("tag:yaml.org,2002:str",{kind:"scalar",construct:function(n){return null!==n?n:""}}),Jx=new Np("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(n){return null!==n?n:[]}}),Qx=new Np("tag:yaml.org,2002:map",{kind:"mapping",construct:function(n){return null!==n?n:{}}}),Xx=new zx({explicit:[Wx,Jx,Qx]}),Kx=new Np("tag:yaml.org,2002:null",{kind:"scalar",resolve:function XN(n){if(null===n)return!0;var s=n.length;return 1===s&&"~"===n||4===s&&("null"===n||"Null"===n||"NULL"===n)},construct:function KN(){return null},predicate:function qN(n){return null===n},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"}),qx=new Np("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function e6(n){if(null===n)return!1;var s=n.length;return 4===s&&("true"===n||"True"===n||"TRUE"===n)||5===s&&("false"===n||"False"===n||"FALSE"===n)},construct:function t6(n){return"true"===n||"True"===n||"TRUE"===n},predicate:function n6(n){return"[object Boolean]"===Object.prototype.toString.call(n)},represent:{lowercase:function(n){return n?"true":"false"},uppercase:function(n){return n?"TRUE":"FALSE"},camelcase:function(n){return n?"True":"False"}},defaultStyle:"lowercase"});function r6(n){return 48<=n&&n<=57||65<=n&&n<=70||97<=n&&n<=102}function i6(n){return 48<=n&&n<=55}function o6(n){return 48<=n&&n<=57}var eR=new Np("tag:yaml.org,2002:int",{kind:"scalar",resolve:function s6(n){if(null===n)return!1;var l,s=n.length,t=0,o=!1;if(!s)return!1;if(("-"===(l=n[t])||"+"===l)&&(l=n[++t]),"0"===l){if(t+1===s)return!0;if("b"===(l=n[++t])){for(t++;t<s;t++)if("_"!==(l=n[t])){if("0"!==l&&"1"!==l)return!1;o=!0}return o&&"_"!==l}if("x"===l){for(t++;t<s;t++)if("_"!==(l=n[t])){if(!r6(n.charCodeAt(t)))return!1;o=!0}return o&&"_"!==l}if("o"===l){for(t++;t<s;t++)if("_"!==(l=n[t])){if(!i6(n.charCodeAt(t)))return!1;o=!0}return o&&"_"!==l}}if("_"===l)return!1;for(;t<s;t++)if("_"!==(l=n[t])){if(!o6(n.charCodeAt(t)))return!1;o=!0}return!(!o||"_"===l)},construct:function a6(n){var o,s=n,t=1;if(-1!==s.indexOf("_")&&(s=s.replace(/_/g,"")),("-"===(o=s[0])||"+"===o)&&("-"===o&&(t=-1),o=(s=s.slice(1))[0]),"0"===s)return 0;if("0"===o){if("b"===s[1])return t*parseInt(s.slice(2),2);if("x"===s[1])return t*parseInt(s.slice(2),16);if("o"===s[1])return t*parseInt(s.slice(2),8)}return t*parseInt(s,10)},predicate:function l6(n){return"[object Number]"===Object.prototype.toString.call(n)&&n%1==0&&!ip.isNegativeZero(n)},represent:{binary:function(n){return n>=0?"0b"+n.toString(2):"-0b"+n.toString(2).slice(1)},octal:function(n){return n>=0?"0o"+n.toString(8):"-0o"+n.toString(8).slice(1)},decimal:function(n){return n.toString(10)},hexadecimal:function(n){return n>=0?"0x"+n.toString(16).toUpperCase():"-0x"+n.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),u6=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),f6=/^[-+]?[0-9]+e/,tR=new Np("tag:yaml.org,2002:float",{kind:"scalar",resolve:function c6(n){return!(null===n||!u6.test(n)||"_"===n[n.length-1])},construct:function d6(n){var s,t;return t="-"===(s=n.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(s[0])>=0&&(s=s.slice(1)),".inf"===s?1===t?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===s?NaN:t*parseFloat(s,10)},predicate:function h6(n){return"[object Number]"===Object.prototype.toString.call(n)&&(n%1!=0||ip.isNegativeZero(n))},represent:function p6(n,s){var t;if(isNaN(n))switch(s){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===n)switch(s){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===n)switch(s){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(ip.isNegativeZero(n))return"-0.0";return t=n.toString(10),f6.test(t)?t.replace("e",".e"):t},defaultStyle:"lowercase"}),nR=Xx.extend({implicit:[Kx,qx,eR,tR]}),rR=nR,iR=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),oR=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"),sR=new Np("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function _6(n){return null!==n&&(null!==iR.exec(n)||null!==oR.exec(n))},construct:function m6(n){var s,t,o,l,_,C,R,le,N=0,V=null;if(null===(s=iR.exec(n))&&(s=oR.exec(n)),null===s)throw new Error("Date resolve error");if(t=+s[1],o=+s[2]-1,l=+s[3],!s[4])return new Date(Date.UTC(t,o,l));if(_=+s[4],C=+s[5],R=+s[6],s[7]){for(N=s[7].slice(0,3);N.length<3;)N+="0";N=+N}return s[9]&&(V=6e4*(60*+s[10]+ +(s[11]||0)),"-"===s[9]&&(V=-V)),le=new Date(Date.UTC(t,o,l,_,C,R,N)),V&&le.setTime(le.getTime()-V),le},instanceOf:Date,represent:function g6(n){return n.toISOString()}}),aR=new Np("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function v6(n){return"<<"===n||null===n}}),nA="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r",lR=new Np("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function y6(n){if(null===n)return!1;var s,t,o=0,l=n.length,_=nA;for(t=0;t<l;t++)if(!((s=_.indexOf(n.charAt(t)))>64)){if(s<0)return!1;o+=6}return o%8==0},construct:function E6(n){var s,t,o=n.replace(/[\r\n=]/g,""),l=o.length,_=nA,C=0,R=[];for(s=0;s<l;s++)s%4==0&&s&&(R.push(C>>16&255),R.push(C>>8&255),R.push(255&C)),C=C<<6|_.indexOf(o.charAt(s));return 0==(t=l%4*6)?(R.push(C>>16&255),R.push(C>>8&255),R.push(255&C)):18===t?(R.push(C>>10&255),R.push(C>>2&255)):12===t&&R.push(C>>4&255),new Uint8Array(R)},predicate:function S6(n){return"[object Uint8Array]"===Object.prototype.toString.call(n)},represent:function b6(n){var o,l,s="",t=0,_=n.length,C=nA;for(o=0;o<_;o++)o%3==0&&o&&(s+=C[t>>18&63],s+=C[t>>12&63],s+=C[t>>6&63],s+=C[63&t]),t=(t<<8)+n[o];return 0==(l=_%3)?(s+=C[t>>18&63],s+=C[t>>12&63],s+=C[t>>6&63],s+=C[63&t]):2===l?(s+=C[t>>10&63],s+=C[t>>4&63],s+=C[t<<2&63],s+=C[64]):1===l&&(s+=C[t>>2&63],s+=C[t<<4&63],s+=C[64],s+=C[64]),s}}),T6=Object.prototype.hasOwnProperty,C6=Object.prototype.toString,uR=new Np("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function M6(n){if(null===n)return!0;var t,o,l,_,C,s=[],R=n;for(t=0,o=R.length;t<o;t+=1){if(C=!1,"[object Object]"!==C6.call(l=R[t]))return!1;for(_ in l)if(T6.call(l,_)){if(C)return!1;C=!0}if(!C)return!1;if(-1!==s.indexOf(_))return!1;s.push(_)}return!0},construct:function O6(n){return null!==n?n:[]}}),A6=Object.prototype.toString,cR=new Np("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function D6(n){if(null===n)return!0;var s,t,o,l,_,C=n;for(_=new Array(C.length),s=0,t=C.length;s<t;s+=1){if("[object Object]"!==A6.call(o=C[s])||1!==(l=Object.keys(o)).length)return!1;_[s]=[l[0],o[l[0]]]}return!0},construct:function x6(n){if(null===n)return[];var s,t,o,l,_,C=n;for(_=new Array(C.length),s=0,t=C.length;s<t;s+=1)o=C[s],l=Object.keys(o),_[s]=[l[0],o[l[0]]];return _}}),R6=Object.prototype.hasOwnProperty,dR=new Np("tag:yaml.org,2002:set",{kind:"mapping",resolve:function w6(n){if(null===n)return!0;var s,t=n;for(s in t)if(R6.call(t,s)&&null!==t[s])return!1;return!0},construct:function P6(n){return null!==n?n:{}}}),rA=rR.extend({implicit:[sR,aR],explicit:[lR,uR,cR,dR]}),Jg=Object.prototype.hasOwnProperty,I6=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,F6=/[\x85\u2028\u2029]/,L6=/[,\[\]\{\}]/,_R=/^(?:!|!!|![a-z\-]+!)$/i,mR=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function gR(n){return Object.prototype.toString.call(n)}function Vm(n){return 10===n||13===n}function Yv(n){return 9===n||32===n}function c_(n){return 9===n||32===n||10===n||13===n}function h0(n){return 44===n||91===n||93===n||123===n||125===n}function k6(n){var s;return 48<=n&&n<=57?n-48:97<=(s=32|n)&&s<=102?s-97+10:-1}function $6(n){return 120===n?2:117===n?4:85===n?8:0}function H6(n){return 48<=n&&n<=57?n-48:-1}function vR(n){return 48===n?"\0":97===n?"\x07":98===n?"\b":116===n||9===n?"\t":110===n?"\n":118===n?"\v":102===n?"\f":114===n?"\r":101===n?"\x1b":32===n?" ":34===n?'"':47===n?"/":92===n?"\\":78===n?"\x85":95===n?"\xa0":76===n?"\u2028":80===n?"\u2029":""}function B6(n){return n<=65535?String.fromCharCode(n):String.fromCharCode(55296+(n-65536>>10),56320+(n-65536&1023))}for(var yR=new Array(256),ER=new Array(256),_0=0;_0<256;_0++)yR[_0]=vR(_0)?1:0,ER[_0]=vR(_0);function U6(n,s){this.input=n,this.filename=s.filename||null,this.schema=s.schema||rA,this.onWarning=s.onWarning||null,this.legacy=s.legacy||!1,this.json=s.json||!1,this.listener=s.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=n.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function bR(n,s){var t={name:n.filename,buffer:n.input.slice(0,-1),position:n.position,line:n.line,column:n.position-n.lineStart};return t.snippet=function GN(n,s){if(s=Object.create(s||null),!n.buffer)return null;s.maxLength||(s.maxLength=79),"number"!=typeof s.indent&&(s.indent=1),"number"!=typeof s.linesBefore&&(s.linesBefore=3),"number"!=typeof s.linesAfter&&(s.linesAfter=2);for(var _,t=/\r?\n|\r|\0/g,o=[0],l=[],C=-1;_=t.exec(n.buffer);)l.push(_.index),o.push(_.index+_[0].length),n.position<=_.index&&C<0&&(C=o.length-2);C<0&&(C=o.length-1);var N,V,R="",Q=Math.min(n.line+s.linesAfter,l.length).toString().length,oe=s.maxLength-(s.indent+Q+3);for(N=1;N<=s.linesBefore&&!(C-N<0);N++)V=qO(n.buffer,o[C-N],l[C-N],n.position-(o[C]-o[C-N]),oe),R=ip.repeat(" ",s.indent)+eA((n.line-N+1).toString(),Q)+" | "+V.str+"\n"+R;for(V=qO(n.buffer,o[C],l[C],n.position,oe),R+=ip.repeat(" ",s.indent)+eA((n.line+1).toString(),Q)+" | "+V.str+"\n",R+=ip.repeat("-",s.indent+Q+3+V.pos)+"^\n",N=1;N<=s.linesAfter&&!(C+N>=l.length);N++)V=qO(n.buffer,o[C+N],l[C+N],n.position-(o[C]-o[C+N]),oe),R+=ip.repeat(" ",s.indent)+eA((n.line+N+1).toString(),Q)+" | "+V.str+"\n";return R.replace(/\n$/,"")}(t),new Nh(s,t)}function Ia(n,s){throw bR(n,s)}function WT(n,s){n.onWarning&&n.onWarning.call(null,bR(n,s))}var SR={YAML:function(s,t,o){var l,_,C;null!==s.version&&Ia(s,"duplication of %YAML directive"),1!==o.length&&Ia(s,"YAML directive accepts exactly one argument"),null===(l=/^([0-9]+)\.([0-9]+)$/.exec(o[0]))&&Ia(s,"ill-formed argument of the YAML directive"),_=parseInt(l[1],10),C=parseInt(l[2],10),1!==_&&Ia(s,"unacceptable YAML version of the document"),s.version=o[0],s.checkLineBreaks=C<2,1!==C&&2!==C&&WT(s,"unsupported YAML version of the document")},TAG:function(s,t,o){var l,_;2!==o.length&&Ia(s,"TAG directive accepts exactly two arguments"),_=o[1],_R.test(l=o[0])||Ia(s,"ill-formed tag handle (first argument) of the TAG directive"),Jg.call(s.tagMap,l)&&Ia(s,'there is a previously declared suffix for "'+l+'" tag handle'),mR.test(_)||Ia(s,"ill-formed tag prefix (second argument) of the TAG directive");try{_=decodeURIComponent(_)}catch(C){Ia(s,"tag prefix is malformed: "+_)}s.tagMap[l]=_}};function Qg(n,s,t,o){var l,_,C,R;if(s<t){if(R=n.input.slice(s,t),o)for(l=0,_=R.length;l<_;l+=1)9===(C=R.charCodeAt(l))||32<=C&&C<=1114111||Ia(n,"expected valid JSON character");else I6.test(R)&&Ia(n,"the stream contains non-printable characters");n.result+=R}}function TR(n,s,t,o){var l,_,C,R;for(ip.isObject(t)||Ia(n,"cannot merge mappings; the provided source object is unacceptable"),C=0,R=(l=Object.keys(t)).length;C<R;C+=1)Jg.call(s,_=l[C])||(s[_]=t[_],o[_]=!0)}function m0(n,s,t,o,l,_,C,R,N){var V,Q;if(Array.isArray(l))for(V=0,Q=(l=Array.prototype.slice.call(l)).length;V<Q;V+=1)Array.isArray(l[V])&&Ia(n,"nested arrays are not supported inside keys"),"object"==typeof l&&"[object Object]"===gR(l[V])&&(l[V]="[object Object]");if("object"==typeof l&&"[object Object]"===gR(l)&&(l="[object Object]"),l=String(l),null===s&&(s={}),"tag:yaml.org,2002:merge"===o)if(Array.isArray(_))for(V=0,Q=_.length;V<Q;V+=1)TR(n,s,_[V],t);else TR(n,s,_,t);else!n.json&&!Jg.call(t,l)&&Jg.call(s,l)&&(n.line=C||n.line,n.lineStart=R||n.lineStart,n.position=N||n.position,Ia(n,"duplicated mapping key")),"__proto__"===l?Object.defineProperty(s,l,{configurable:!0,enumerable:!0,writable:!0,value:_}):s[l]=_,delete t[l];return s}function oA(n){var s;10===(s=n.input.charCodeAt(n.position))?n.position++:13===s?(n.position++,10===n.input.charCodeAt(n.position)&&n.position++):Ia(n,"a line break is expected"),n.line+=1,n.lineStart=n.position,n.firstTabInLine=-1}function jf(n,s,t){for(var o=0,l=n.input.charCodeAt(n.position);0!==l;){for(;Yv(l);)9===l&&-1===n.firstTabInLine&&(n.firstTabInLine=n.position),l=n.input.charCodeAt(++n.position);if(s&&35===l)do{l=n.input.charCodeAt(++n.position)}while(10!==l&&13!==l&&0!==l);if(!Vm(l))break;for(oA(n),l=n.input.charCodeAt(n.position),o++,n.lineIndent=0;32===l;)n.lineIndent++,l=n.input.charCodeAt(++n.position)}return-1!==t&&0!==o&&n.lineIndent<t&&WT(n,"deficient indentation"),o}function JT(n){var t,s=n.position;return!(45!==(t=n.input.charCodeAt(s))&&46!==t||t!==n.input.charCodeAt(s+1)||t!==n.input.charCodeAt(s+2)||(s+=3,t=n.input.charCodeAt(s),0!==t&&!c_(t)))}function sA(n,s){1===s?n.result+=" ":s>1&&(n.result+=ip.repeat("\n",s-1))}function CR(n,s){var t,N,o=n.tag,l=n.anchor,_=[],R=!1;if(-1!==n.firstTabInLine)return!1;for(null!==n.anchor&&(n.anchorMap[n.anchor]=_),N=n.input.charCodeAt(n.position);0!==N&&(-1!==n.firstTabInLine&&(n.position=n.firstTabInLine,Ia(n,"tab characters must not be used in indentation")),45===N&&c_(n.input.charCodeAt(n.position+1)));)if(R=!0,n.position++,jf(n,!0,-1)&&n.lineIndent<=s)_.push(null),N=n.input.charCodeAt(n.position);else if(t=n.line,g0(n,s,3,!1,!0),_.push(n.result),jf(n,!0,-1),N=n.input.charCodeAt(n.position),(n.line===t||n.lineIndent>s)&&0!==N)Ia(n,"bad indentation of a sequence entry");else if(n.lineIndent<s)break;return!!R&&(n.tag=o,n.anchor=l,n.kind="sequence",n.result=_,!0)}function W6(n){var s,l,_,C,t=!1,o=!1;if(33!==(C=n.input.charCodeAt(n.position)))return!1;if(null!==n.tag&&Ia(n,"duplication of a tag property"),60===(C=n.input.charCodeAt(++n.position))?(t=!0,C=n.input.charCodeAt(++n.position)):33===C?(o=!0,l="!!",C=n.input.charCodeAt(++n.position)):l="!",s=n.position,t){do{C=n.input.charCodeAt(++n.position)}while(0!==C&&62!==C);n.position<n.length?(_=n.input.slice(s,n.position),C=n.input.charCodeAt(++n.position)):Ia(n,"unexpected end of the stream within a verbatim tag")}else{for(;0!==C&&!c_(C);)33===C&&(o?Ia(n,"tag suffix cannot contain exclamation marks"):(l=n.input.slice(s-1,n.position+1),_R.test(l)||Ia(n,"named tag handle cannot contain such characters"),o=!0,s=n.position+1)),C=n.input.charCodeAt(++n.position);_=n.input.slice(s,n.position),L6.test(_)&&Ia(n,"tag suffix cannot contain flow indicator characters")}_&&!mR.test(_)&&Ia(n,"tag name cannot contain such characters: "+_);try{_=decodeURIComponent(_)}catch(R){Ia(n,"tag name is malformed: "+_)}return t?n.tag=_:Jg.call(n.tagMap,l)?n.tag=n.tagMap[l]+_:"!"===l?n.tag="!"+_:"!!"===l?n.tag="tag:yaml.org,2002:"+_:Ia(n,'undeclared tag handle "'+l+'"'),!0}function J6(n){var s,t;if(38!==(t=n.input.charCodeAt(n.position)))return!1;for(null!==n.anchor&&Ia(n,"duplication of an anchor property"),t=n.input.charCodeAt(++n.position),s=n.position;0!==t&&!c_(t)&&!h0(t);)t=n.input.charCodeAt(++n.position);return n.position===s&&Ia(n,"name of an anchor node must contain at least one character"),n.anchor=n.input.slice(s,n.position),!0}function g0(n,s,t,o,l){var _,C,R,oe,le,_e,ye,$e,Ie,N=1,V=!1,Q=!1;if(null!==n.listener&&n.listener("open",n),n.tag=null,n.anchor=null,n.kind=null,n.result=null,_=C=R=4===t||3===t,o&&jf(n,!0,-1)&&(V=!0,n.lineIndent>s?N=1:n.lineIndent===s?N=0:n.lineIndent<s&&(N=-1)),1===N)for(;W6(n)||J6(n);)jf(n,!0,-1)?(V=!0,R=_,n.lineIndent>s?N=1:n.lineIndent===s?N=0:n.lineIndent<s&&(N=-1)):R=!1;if(R&&(R=V||l),(1===N||4===t)&&($e=1===t||2===t?s:s+1,Ie=n.position-n.lineStart,1===N?R&&(CR(n,Ie)||function z6(n,s,t){var o,l,_,C,R,N,we,V=n.tag,Q=n.anchor,oe={},le=Object.create(null),_e=null,ye=null,$e=null,Ie=!1,ke=!1;if(-1!==n.firstTabInLine)return!1;for(null!==n.anchor&&(n.anchorMap[n.anchor]=oe),we=n.input.charCodeAt(n.position);0!==we;){if(!Ie&&-1!==n.firstTabInLine&&(n.position=n.firstTabInLine,Ia(n,"tab characters must not be used in indentation")),o=n.input.charCodeAt(n.position+1),_=n.line,63!==we&&58!==we||!c_(o)){if(C=n.line,R=n.lineStart,N=n.position,!g0(n,t,2,!1,!0))break;if(n.line===_){for(we=n.input.charCodeAt(n.position);Yv(we);)we=n.input.charCodeAt(++n.position);if(58===we)c_(we=n.input.charCodeAt(++n.position))||Ia(n,"a whitespace character is expected after the key-value separator within a block mapping"),Ie&&(m0(n,oe,le,_e,ye,null,C,R,N),_e=ye=$e=null),ke=!0,Ie=!1,l=!1,_e=n.tag,ye=n.result;else{if(!ke)return n.tag=V,n.anchor=Q,!0;Ia(n,"can not read an implicit mapping pair; a colon is missed")}}else{if(!ke)return n.tag=V,n.anchor=Q,!0;Ia(n,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===we?(Ie&&(m0(n,oe,le,_e,ye,null,C,R,N),_e=ye=$e=null),ke=!0,Ie=!0,l=!0):Ie?(Ie=!1,l=!0):Ia(n,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),n.position+=1,we=o;if((n.line===_||n.lineIndent>s)&&(Ie&&(C=n.line,R=n.lineStart,N=n.position),g0(n,s,4,!0,l)&&(Ie?ye=n.result:$e=n.result),Ie||(m0(n,oe,le,_e,ye,$e,C,R,N),_e=ye=$e=null),jf(n,!0,-1),we=n.input.charCodeAt(n.position)),(n.line===_||n.lineIndent>s)&&0!==we)Ia(n,"bad indentation of a mapping entry");else if(n.lineIndent<s)break}return Ie&&m0(n,oe,le,_e,ye,null,C,R,N),ke&&(n.tag=V,n.anchor=Q,n.kind="mapping",n.result=oe),ke}(n,Ie,$e))||function V6(n,s){var o,l,_,R,Q,oe,le,_e,$e,Ie,ke,we,t=!0,C=n.tag,N=n.anchor,ye=Object.create(null);if(91===(we=n.input.charCodeAt(n.position)))Q=93,_e=!1,R=[];else{if(123!==we)return!1;Q=125,_e=!0,R={}}for(null!==n.anchor&&(n.anchorMap[n.anchor]=R),we=n.input.charCodeAt(++n.position);0!==we;){if(jf(n,!0,s),(we=n.input.charCodeAt(n.position))===Q)return n.position++,n.tag=C,n.anchor=N,n.kind=_e?"mapping":"sequence",n.result=R,!0;t?44===we&&Ia(n,"expected the node content, but found ','"):Ia(n,"missed comma between flow collection entries"),ke=null,oe=le=!1,63===we&&c_(n.input.charCodeAt(n.position+1))&&(oe=le=!0,n.position++,jf(n,!0,s)),o=n.line,l=n.lineStart,_=n.position,g0(n,s,1,!1,!0),Ie=n.tag,$e=n.result,jf(n,!0,s),we=n.input.charCodeAt(n.position),(le||n.line===o)&&58===we&&(oe=!0,we=n.input.charCodeAt(++n.position),jf(n,!0,s),g0(n,s,1,!1,!0),ke=n.result),_e?m0(n,R,ye,Ie,$e,ke,o,l,_):R.push(oe?m0(n,null,ye,Ie,$e,ke,o,l,_):$e),jf(n,!0,s),44===(we=n.input.charCodeAt(n.position))?(t=!0,we=n.input.charCodeAt(++n.position)):t=!1}Ia(n,"unexpected end of the stream within a flow collection")}(n,$e)?Q=!0:(C&&function Z6(n,s){var t,o,Q,oe,l=1,_=!1,C=!1,R=s,N=0,V=!1;if(124===(oe=n.input.charCodeAt(n.position)))o=!1;else{if(62!==oe)return!1;o=!0}for(n.kind="scalar",n.result="";0!==oe;)if(43===(oe=n.input.charCodeAt(++n.position))||45===oe)1===l?l=43===oe?3:2:Ia(n,"repeat of a chomping mode identifier");else{if(!((Q=H6(oe))>=0))break;0===Q?Ia(n,"bad explicit indentation width of a block scalar; it cannot be less than one"):C?Ia(n,"repeat of an indentation width identifier"):(R=s+Q-1,C=!0)}if(Yv(oe)){do{oe=n.input.charCodeAt(++n.position)}while(Yv(oe));if(35===oe)do{oe=n.input.charCodeAt(++n.position)}while(!Vm(oe)&&0!==oe)}for(;0!==oe;){for(oA(n),n.lineIndent=0,oe=n.input.charCodeAt(n.position);(!C||n.lineIndent<R)&&32===oe;)n.lineIndent++,oe=n.input.charCodeAt(++n.position);if(!C&&n.lineIndent>R&&(R=n.lineIndent),Vm(oe))N++;else{if(n.lineIndent<R){3===l?n.result+=ip.repeat("\n",_?1+N:N):1===l&&_&&(n.result+="\n");break}for(o?Yv(oe)?(V=!0,n.result+=ip.repeat("\n",_?1+N:N)):V?(V=!1,n.result+=ip.repeat("\n",N+1)):0===N?_&&(n.result+=" "):n.result+=ip.repeat("\n",N):n.result+=ip.repeat("\n",_?1+N:N),_=!0,C=!0,N=0,t=n.position;!Vm(oe)&&0!==oe;)oe=n.input.charCodeAt(++n.position);Qg(n,t,n.position,!1)}}return!0}(n,$e)||function j6(n,s){var t,o,l;if(39!==(t=n.input.charCodeAt(n.position)))return!1;for(n.kind="scalar",n.result="",n.position++,o=l=n.position;0!==(t=n.input.charCodeAt(n.position));)if(39===t){if(Qg(n,o,n.position,!0),39!==(t=n.input.charCodeAt(++n.position)))return!0;o=n.position,n.position++,l=n.position}else Vm(t)?(Qg(n,o,l,!0),sA(n,jf(n,!1,s)),o=l=n.position):n.position===n.lineStart&&JT(n)?Ia(n,"unexpected end of the document within a single quoted scalar"):(n.position++,l=n.position);Ia(n,"unexpected end of the stream within a single quoted scalar")}(n,$e)||function G6(n,s){var t,o,l,_,C,R;if(34!==(R=n.input.charCodeAt(n.position)))return!1;for(n.kind="scalar",n.result="",n.position++,t=o=n.position;0!==(R=n.input.charCodeAt(n.position));){if(34===R)return Qg(n,t,n.position,!0),n.position++,!0;if(92===R){if(Qg(n,t,n.position,!0),Vm(R=n.input.charCodeAt(++n.position)))jf(n,!1,s);else if(R<256&&yR[R])n.result+=ER[R],n.position++;else if((C=$6(R))>0){for(l=C,_=0;l>0;l--)(C=k6(R=n.input.charCodeAt(++n.position)))>=0?_=(_<<4)+C:Ia(n,"expected hexadecimal character");n.result+=B6(_),n.position++}else Ia(n,"unknown escape sequence");t=o=n.position}else Vm(R)?(Qg(n,t,o,!0),sA(n,jf(n,!1,s)),t=o=n.position):n.position===n.lineStart&&JT(n)?Ia(n,"unexpected end of the document within a double quoted scalar"):(n.position++,o=n.position)}Ia(n,"unexpected end of the stream within a double quoted scalar")}(n,$e)?Q=!0:function Q6(n){var s,t,o;if(42!==(o=n.input.charCodeAt(n.position)))return!1;for(o=n.input.charCodeAt(++n.position),s=n.position;0!==o&&!c_(o)&&!h0(o);)o=n.input.charCodeAt(++n.position);return n.position===s&&Ia(n,"name of an alias node must contain at least one character"),t=n.input.slice(s,n.position),Jg.call(n.anchorMap,t)||Ia(n,'unidentified alias "'+t+'"'),n.result=n.anchorMap[t],jf(n,!0,-1),!0}(n)?(Q=!0,(null!==n.tag||null!==n.anchor)&&Ia(n,"alias node should not have any properties")):function Y6(n,s,t){var l,_,C,R,N,V,Q,_e,oe=n.kind,le=n.result;if(c_(_e=n.input.charCodeAt(n.position))||h0(_e)||35===_e||38===_e||42===_e||33===_e||124===_e||62===_e||39===_e||34===_e||37===_e||64===_e||96===_e||(63===_e||45===_e)&&(c_(l=n.input.charCodeAt(n.position+1))||t&&h0(l)))return!1;for(n.kind="scalar",n.result="",_=C=n.position,R=!1;0!==_e;){if(58===_e){if(c_(l=n.input.charCodeAt(n.position+1))||t&&h0(l))break}else if(35===_e){if(c_(n.input.charCodeAt(n.position-1)))break}else{if(n.position===n.lineStart&&JT(n)||t&&h0(_e))break;if(Vm(_e)){if(N=n.line,V=n.lineStart,Q=n.lineIndent,jf(n,!1,-1),n.lineIndent>=s){R=!0,_e=n.input.charCodeAt(n.position);continue}n.position=C,n.line=N,n.lineStart=V,n.lineIndent=Q;break}}R&&(Qg(n,_,C,!1),sA(n,n.line-N),_=C=n.position,R=!1),Yv(_e)||(C=n.position+1),_e=n.input.charCodeAt(++n.position)}return Qg(n,_,C,!1),!!n.result||(n.kind=oe,n.result=le,!1)}(n,$e,1===t)&&(Q=!0,null===n.tag&&(n.tag="?")),null!==n.anchor&&(n.anchorMap[n.anchor]=n.result)):0===N&&(Q=R&&CR(n,Ie))),null===n.tag)null!==n.anchor&&(n.anchorMap[n.anchor]=n.result);else if("?"===n.tag){for(null!==n.result&&"scalar"!==n.kind&&Ia(n,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+n.kind+'"'),oe=0,le=n.implicitTypes.length;oe<le;oe+=1)if((ye=n.implicitTypes[oe]).resolve(n.result)){n.result=ye.construct(n.result),n.tag=ye.tag,null!==n.anchor&&(n.anchorMap[n.anchor]=n.result);break}}else if("!"!==n.tag){if(Jg.call(n.typeMap[n.kind||"fallback"],n.tag))ye=n.typeMap[n.kind||"fallback"][n.tag];else for(ye=null,oe=0,le=(_e=n.typeMap.multi[n.kind||"fallback"]).length;oe<le;oe+=1)if(n.tag.slice(0,_e[oe].tag.length)===_e[oe].tag){ye=_e[oe];break}ye||Ia(n,"unknown tag !<"+n.tag+">"),null!==n.result&&ye.kind!==n.kind&&Ia(n,"unacceptable node kind for !<"+n.tag+'> tag; it should be "'+ye.kind+'", not "'+n.kind+'"'),ye.resolve(n.result,n.tag)?(n.result=ye.construct(n.result,n.tag),null!==n.anchor&&(n.anchorMap[n.anchor]=n.result)):Ia(n,"cannot resolve a node with !<"+n.tag+"> explicit tag")}return null!==n.listener&&n.listener("close",n),null!==n.tag||null!==n.anchor||Q}function X6(n){var t,o,l,C,s=n.position,_=!1;for(n.version=null,n.checkLineBreaks=n.legacy,n.tagMap=Object.create(null),n.anchorMap=Object.create(null);0!==(C=n.input.charCodeAt(n.position))&&(jf(n,!0,-1),C=n.input.charCodeAt(n.position),!(n.lineIndent>0||37!==C));){for(_=!0,C=n.input.charCodeAt(++n.position),t=n.position;0!==C&&!c_(C);)C=n.input.charCodeAt(++n.position);for(l=[],(o=n.input.slice(t,n.position)).length<1&&Ia(n,"directive name must not be less than one character in length");0!==C;){for(;Yv(C);)C=n.input.charCodeAt(++n.position);if(35===C){do{C=n.input.charCodeAt(++n.position)}while(0!==C&&!Vm(C));break}if(Vm(C))break;for(t=n.position;0!==C&&!c_(C);)C=n.input.charCodeAt(++n.position);l.push(n.input.slice(t,n.position))}0!==C&&oA(n),Jg.call(SR,o)?SR[o](n,o,l):WT(n,'unknown document directive "'+o+'"')}jf(n,!0,-1),0===n.lineIndent&&45===n.input.charCodeAt(n.position)&&45===n.input.charCodeAt(n.position+1)&&45===n.input.charCodeAt(n.position+2)?(n.position+=3,jf(n,!0,-1)):_&&Ia(n,"directives end mark is expected"),g0(n,n.lineIndent-1,4,!1,!0),jf(n,!0,-1),n.checkLineBreaks&&F6.test(n.input.slice(s,n.position))&&WT(n,"non-ASCII line breaks are interpreted as content"),n.documents.push(n.result),n.position===n.lineStart&&JT(n)?46===n.input.charCodeAt(n.position)&&(n.position+=3,jf(n,!0,-1)):n.position<n.length-1&&Ia(n,"end of the stream or a document separator is expected")}function MR(n,s){s=s||{},0!==(n=String(n)).length&&(10!==n.charCodeAt(n.length-1)&&13!==n.charCodeAt(n.length-1)&&(n+="\n"),65279===n.charCodeAt(0)&&(n=n.slice(1)));var t=new U6(n,s),o=n.indexOf("\0");for(-1!==o&&(t.position=o,Ia(t,"null byte is not allowed in input")),t.input+="\0";32===t.input.charCodeAt(t.position);)t.lineIndent+=1,t.position+=1;for(;t.position<t.length-1;)X6(t);return t.documents}var OR_loadAll=function K6(n,s,t){null!==s&&"object"==typeof s&&void 0===t&&(t=s,s=null);var o=MR(n,t);if("function"!=typeof s)return o;for(var l=0,_=o.length;l<_;l+=1)s(o[l])},OR_load=function q6(n,s){var t=MR(n,s);if(0!==t.length){if(1===t.length)return t[0];throw new Nh("expected a single document in the stream, but found more")}},AR=Object.prototype.toString,DR=Object.prototype.hasOwnProperty,ih={0:"\\0",7:"\\a",8:"\\b",9:"\\t",10:"\\n",11:"\\v",12:"\\f",13:"\\r",27:"\\e",34:'\\"',92:"\\\\",133:"\\N",160:"\\_",8232:"\\L",8233:"\\P"},v8=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],y8=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function b8(n){var s,t,o;if(s=n.toString(16).toUpperCase(),n<=255)t="x",o=2;else if(n<=65535)t="u",o=4;else{if(!(n<=4294967295))throw new Nh("code point within a string may not be greater than 0xFFFFFFFF");t="U",o=8}return"\\"+t+ip.repeat("0",o-s.length)+s}function T8(n){this.schema=n.schema||rA,this.indent=Math.max(1,n.indent||2),this.noArrayIndent=n.noArrayIndent||!1,this.skipInvalid=n.skipInvalid||!1,this.flowLevel=ip.isNothing(n.flowLevel)?-1:n.flowLevel,this.styleMap=function E8(n,s){var t,o,l,_,C,R,N;if(null===s)return{};for(t={},l=0,_=(o=Object.keys(s)).length;l<_;l+=1)C=o[l],R=String(s[C]),"!!"===C.slice(0,2)&&(C="tag:yaml.org,2002:"+C.slice(2)),(N=n.compiledTypeMap.fallback[C])&&DR.call(N.styleAliases,R)&&(R=N.styleAliases[R]),t[C]=R;return t}(this.schema,n.styles||null),this.sortKeys=n.sortKeys||!1,this.lineWidth=n.lineWidth||80,this.noRefs=n.noRefs||!1,this.noCompatMode=n.noCompatMode||!1,this.condenseFlow=n.condenseFlow||!1,this.quotingType='"'===n.quotingType?2:1,this.forceQuotes=n.forceQuotes||!1,this.replacer="function"==typeof n.replacer?n.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function IR(n,s){for(var C,t=ip.repeat(" ",s),o=0,l=-1,_="",R=n.length;o<R;)-1===(l=n.indexOf("\n",o))?(C=n.slice(o),o=R):(C=n.slice(o,l+1),o=l+1),C.length&&"\n"!==C&&(_+=t),_+=C;return _}function uA(n,s){return"\n"+ip.repeat(" ",n.indent*s)}function XT(n){return 32===n||9===n}function ME(n){return 32<=n&&n<=126||161<=n&&n<=55295&&8232!==n&&8233!==n||57344<=n&&n<=65533&&65279!==n||65536<=n&&n<=1114111}function FR(n){return ME(n)&&65279!==n&&13!==n&&10!==n}function LR(n,s,t){var o=FR(n),l=o&&!XT(n);return(t?o:o&&44!==n&&91!==n&&93!==n&&123!==n&&125!==n)&&35!==n&&!(58===s&&!l)||FR(s)&&!XT(s)&&35===n||58===s&&l}function OE(n,s){var o,t=n.charCodeAt(s);return t>=55296&&t<=56319&&s+1<n.length&&(o=n.charCodeAt(s+1))>=56320&&o<=57343?1024*(t-55296)+o-56320+65536:t}function kR(n){return/^\n* /.test(n)}function D8(n,s,t,o,l){n.dump=function(){if(0===s.length)return 2===n.quotingType?'""':"''";if(!n.noCompatMode&&(-1!==v8.indexOf(s)||y8.test(s)))return 2===n.quotingType?'"'+s+'"':"'"+s+"'";var _=n.indent*Math.max(1,t),C=-1===n.lineWidth?-1:Math.max(Math.min(n.lineWidth,40),n.lineWidth-_);switch(function A8(n,s,t,o,l,_,C,R){var N,V=0,Q=null,oe=!1,le=!1,_e=-1!==o,ye=-1,$e=function M8(n){return ME(n)&&65279!==n&&!XT(n)&&45!==n&&63!==n&&58!==n&&44!==n&&91!==n&&93!==n&&123!==n&&125!==n&&35!==n&&38!==n&&42!==n&&33!==n&&124!==n&&61!==n&&62!==n&&39!==n&&34!==n&&37!==n&&64!==n&&96!==n}(OE(n,0))&&function O8(n){return!XT(n)&&58!==n}(OE(n,n.length-1));if(s||C)for(N=0;N<n.length;V>=65536?N+=2:N++){if(!ME(V=OE(n,N)))return 5;$e=$e&&LR(V,Q,R),Q=V}else{for(N=0;N<n.length;V>=65536?N+=2:N++){if(10===(V=OE(n,N)))oe=!0,_e&&(le=le||N-ye-1>o&&" "!==n[ye+1],ye=N);else if(!ME(V))return 5;$e=$e&&LR(V,Q,R),Q=V}le=le||_e&&N-ye-1>o&&" "!==n[ye+1]}return oe||le?t>9&&kR(n)?5:C?2===_?5:2:le?4:3:!$e||C||l(n)?2===_?5:2:1}(s,o||n.flowLevel>-1&&t>=n.flowLevel,n.indent,C,function N(V){return function C8(n,s){var t,o;for(t=0,o=n.implicitTypes.length;t<o;t+=1)if(n.implicitTypes[t].resolve(s))return!0;return!1}(n,V)},n.quotingType,n.forceQuotes&&!o,l)){case 1:return s;case 2:return"'"+s.replace(/'/g,"''")+"'";case 3:return"|"+UR(s,n.indent)+YR(IR(s,_));case 4:return">"+UR(s,n.indent)+YR(IR(function x8(n,s){for(var _,C,t=/(\n+)([^\n]*)/g,o=(V=void 0,V=n.indexOf("\n"),t.lastIndex=V=-1!==V?V:n.length,jR(n.slice(0,V),s)),l="\n"===n[0]||" "===n[0];C=t.exec(n);){var N=C[2];_=" "===N[0],o+=C[1]+(l||_||""===N?"":"\n")+jR(N,s),l=_}var V;return o}(s,C),_));case 5:return'"'+function R8(n){for(var o,s="",t=0,l=0;l<n.length;t>=65536?l+=2:l++)t=OE(n,l),!(o=ih[t])&&ME(t)?(s+=n[l],t>=65536&&(s+=n[l+1])):s+=o||b8(t);return s}(s)+'"';default:throw new Nh("impossible error: invalid scalar style")}}()}function UR(n,s){var t=kR(n)?String(s):"",o="\n"===n[n.length-1];return t+(!o||"\n"!==n[n.length-2]&&"\n"!==n?o?"":"-":"+")+"\n"}function YR(n){return"\n"===n[n.length-1]?n.slice(0,-1):n}function jR(n,s){if(""===n||" "===n[0])return n;for(var o,_,t=/ [^ ]/g,l=0,C=0,R=0,N="";o=t.exec(n);)(R=o.index)-l>s&&(N+="\n"+n.slice(l,_=C>l?C:R),l=_+1),C=R;return N+="\n",(N+=n.length-l>s&&C>l?n.slice(l,C)+"\n"+n.slice(C+1):n.slice(l)).slice(1)}function VR(n,s,t){var o,l,_,C,R,N;for(_=0,C=(l=t?n.explicitTypes:n.implicitTypes).length;_<C;_+=1)if(((R=l[_]).instanceOf||R.predicate)&&(!R.instanceOf||"object"==typeof s&&s instanceof R.instanceOf)&&(!R.predicate||R.predicate(s))){if(n.tag=t?R.multi&&R.representName?R.representName(s):R.tag:"?",R.represent){if(N=n.styleMap[R.tag]||R.defaultStyle,"[object Function]"===AR.call(R.represent))o=R.represent(s,N);else{if(!DR.call(R.represent,N))throw new Nh("!<"+R.tag+'> tag resolver accepts not "'+N+'" style');o=R.represent[N](s,N)}n.dump=o}return!0}return!1}function mg(n,s,t,o,l,_,C){n.tag=null,n.dump=t,VR(n,t,!1)||VR(n,t,!0);var V,R=AR.call(n.dump),N=o;o&&(o=n.flowLevel<0||n.flowLevel>s);var oe,le,Q="[object Object]"===R||"[object Array]"===R;if(Q&&(le=-1!==(oe=n.duplicates.indexOf(t))),(null!==n.tag&&"?"!==n.tag||le||2!==n.indent&&s>0)&&(l=!1),le&&n.usedDuplicates[oe])n.dump="*ref_"+oe;else{if(Q&&le&&!n.usedDuplicates[oe]&&(n.usedDuplicates[oe]=!0),"[object Object]"===R)o&&0!==Object.keys(n.dump).length?(function N8(n,s,t,o){var R,N,V,Q,oe,le,l="",_=n.tag,C=Object.keys(t);if(!0===n.sortKeys)C.sort();else if("function"==typeof n.sortKeys)C.sort(n.sortKeys);else if(n.sortKeys)throw new Nh("sortKeys must be a boolean or a function");for(R=0,N=C.length;R<N;R+=1)le="",(!o||""!==l)&&(le+=uA(n,s)),Q=t[V=C[R]],n.replacer&&(Q=n.replacer.call(t,V,Q)),mg(n,s+1,V,!0,!0,!0)&&((oe=null!==n.tag&&"?"!==n.tag||n.dump&&n.dump.length>1024)&&(n.dump&&10===n.dump.charCodeAt(0)?le+="?":le+="? "),le+=n.dump,oe&&(le+=uA(n,s)),mg(n,s+1,Q,!0,oe)&&(n.dump&&10===n.dump.charCodeAt(0)?le+=":":le+=": ",l+=le+=n.dump));n.tag=_,n.dump=l||"{}"}(n,s,n.dump,l),le&&(n.dump="&ref_"+oe+n.dump)):(function P8(n,s,t){var C,R,N,V,Q,o="",l=n.tag,_=Object.keys(t);for(C=0,R=_.length;C<R;C+=1)Q="",""!==o&&(Q+=", "),n.condenseFlow&&(Q+='"'),V=t[N=_[C]],n.replacer&&(V=n.replacer.call(t,N,V)),mg(n,s,N,!1,!1)&&(n.dump.length>1024&&(Q+="? "),Q+=n.dump+(n.condenseFlow?'"':"")+":"+(n.condenseFlow?"":" "),mg(n,s,V,!1,!1)&&(o+=Q+=n.dump));n.tag=l,n.dump="{"+o+"}"}(n,s,n.dump),le&&(n.dump="&ref_"+oe+" "+n.dump));else if("[object Array]"===R)o&&0!==n.dump.length?(function GR(n,s,t,o){var C,R,N,l="",_=n.tag;for(C=0,R=t.length;C<R;C+=1)N=t[C],n.replacer&&(N=n.replacer.call(t,String(C),N)),(mg(n,s+1,N,!0,!0,!1,!0)||void 0===N&&mg(n,s+1,null,!0,!0,!1,!0))&&((!o||""!==l)&&(l+=uA(n,s)),n.dump&&10===n.dump.charCodeAt(0)?l+="-":l+="- ",l+=n.dump);n.tag=_,n.dump=l||"[]"}(n,n.noArrayIndent&&!C&&s>0?s-1:s,n.dump,l),le&&(n.dump="&ref_"+oe+n.dump)):(function w8(n,s,t){var _,C,R,o="",l=n.tag;for(_=0,C=t.length;_<C;_+=1)R=t[_],n.replacer&&(R=n.replacer.call(t,String(_),R)),(mg(n,s,R,!1,!1)||void 0===R&&mg(n,s,null,!1,!1))&&(""!==o&&(o+=","+(n.condenseFlow?"":" ")),o+=n.dump);n.tag=l,n.dump="["+o+"]"}(n,s,n.dump),le&&(n.dump="&ref_"+oe+" "+n.dump));else{if("[object String]"!==R){if("[object Undefined]"===R)return!1;if(n.skipInvalid)return!1;throw new Nh("unacceptable kind of an object to dump "+R)}"?"!==n.tag&&D8(n,n.dump,s,_,N)}null!==n.tag&&"?"!==n.tag&&(V=encodeURI("!"===n.tag[0]?n.tag.slice(1):n.tag).replace(/!/g,"%21"),V="!"===n.tag[0]?"!"+V:"tag:yaml.org,2002:"===V.slice(0,18)?"!!"+V.slice(18):"!<"+V+">",n.dump=V+" "+n.dump)}return!0}function I8(n,s){var l,_,t=[],o=[];for(dA(n,t,o),l=0,_=o.length;l<_;l+=1)s.duplicates.push(t[o[l]]);s.usedDuplicates=new Array(_)}function dA(n,s,t){var o,l,_;if(null!==n&&"object"==typeof n)if(-1!==(l=s.indexOf(n)))-1===t.indexOf(l)&&t.push(l);else if(s.push(n),Array.isArray(n))for(l=0,_=n.length;l<_;l+=1)dA(n[l],s,t);else for(l=0,_=(o=Object.keys(n)).length;l<_;l+=1)dA(n[o[l]],s,t)}function fA(n,s){return function(){throw new Error("Function yaml."+n+" is removed in js-yaml 4. Use yaml."+s+" instead, which is now safe by default.")}}var $8=Np,H8=zx,B8=Xx,ZR=nR,U8=rR,Y8=rA,j8=OR_load,G8=OR_loadAll,V8=function F8(n,s){var t=new T8(s=s||{});t.noRefs||I8(n,t);var o=n;return t.replacer&&(o=t.replacer.call({"":o},"",o)),mg(t,0,o,!0,!0)?t.dump+"\n":""},Z8=Nh,z8={binary:lR,float:tR,map:Qx,null:Kx,pairs:cR,set:dR,timestamp:sR,bool:qx,int:eR,merge:aR,omap:uR,seq:Jx,str:Wx},W8=fA("safeLoad","load"),J8=fA("safeLoadAll","loadAll"),Q8=fA("safeDump","dump");const pA={Type:$8,Schema:H8,FAILSAFE_SCHEMA:B8,JSON_SCHEMA:ZR,CORE_SCHEMA:U8,DEFAULT_SCHEMA:Y8,load:j8,loadAll:G8,dump:V8,YAMLException:Z8,types:z8,safeLoad:W8,safeLoadAll:J8,safeDump:Q8},K8="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,{FormData:zR,Blob:KT,File:WR}=K8,q8=n=>":/?#[]@!$&'()*+,;=".indexOf(n)>-1,eI=n=>/^[a-z0-9\-._~]+$/i.test(n);function y0(n){let{escape:s}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2?arguments[2]:void 0;return"number"==typeof n&&(n=n.toString()),"string"==typeof n&&n.length&&s?t?JSON.parse(n):[...n].map(o=>{if(eI(o)||q8(o)&&"unsafe"===s)return o;const l=new TextEncoder;return Array.from(l.encode(o)).map(C=>`0${C.toString(16).toUpperCase()}`.slice(-2)).map(C=>`%${C}`).join("")}).join(""):n}function hA(n){const{value:s}=n;return Array.isArray(s)?function tI(n){let{key:s,value:t,style:o,explode:l,escape:_}=n;const C=R=>y0(R,{escape:_});if("simple"===o)return t.map(R=>C(R)).join(",");if("label"===o)return`.${t.map(R=>C(R)).join(".")}`;if("matrix"===o)return t.map(R=>C(R)).reduce((R,N)=>!R||l?`${R||""};${s}=${N}`:`${R},${N}`,"");if("form"===o){const R=l?`&${s}=`:",";return t.map(N=>C(N)).join(R)}if("spaceDelimited"===o){const R=l?`${s}=`:"";return t.map(N=>C(N)).join(` ${R}`)}if("pipeDelimited"===o){const R=l?`${s}=`:"";return t.map(N=>C(N)).join(`|${R}`)}}(n):"object"==typeof s?function nI(n){let{key:s,value:t,style:o,explode:l,escape:_}=n;const C=N=>y0(N,{escape:_}),R=Object.keys(t);return"simple"===o?R.reduce((N,V)=>{const Q=C(t[V]);return`${N?`${N},`:""}${V}${l?"=":","}${Q}`},""):"label"===o?R.reduce((N,V)=>{const Q=C(t[V]);return`${N?`${N}.`:"."}${V}${l?"=":"."}${Q}`},""):"matrix"===o&&l?R.reduce((N,V)=>`${N?`${N};`:";"}${V}=${C(t[V])}`,""):"matrix"===o?R.reduce((N,V)=>{const Q=C(t[V]);return`${N?`${N},`:`;${s}=`}${V},${Q}`},""):"form"===o?R.reduce((N,V)=>{const Q=C(t[V]);return`${N?`${N}${l?"&":","}`:""}${V}${l?"=":","}${Q}`},""):void 0}(n):function rI(n){let{key:s,value:t,style:o,escape:l}=n;const _=C=>y0(C,{escape:l});return"simple"===o?_(t):"label"===o?`.${_(t)}`:"matrix"===o?`;${s}=${_(t)}`:"form"===o||"deepObject"===o?_(t):void 0}(n)}const iI=(n,s)=>{s.body=n},_A={serializeRes:JR,mergeInQueryOrForm:ew};function mA(n){return gA.apply(this,arguments)}function gA(){return gA=K_(function*(n){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};"object"==typeof n&&(s=n,n=s.url),s.headers=s.headers||{},_A.mergeInQueryOrForm(s),s.headers&&Object.keys(s.headers).forEach(l=>{const _=s.headers[l];"string"==typeof _&&(s.headers[l]=_.replace(/\n+/g," "))}),s.requestInterceptor&&(s=(yield s.requestInterceptor(s))||s);const t=s.headers["content-type"]||s.headers["Content-Type"];let o;/multipart\/form-data/i.test(t)&&s.body instanceof zR&&(delete s.headers["content-type"],delete s.headers["Content-Type"]);try{o=yield(s.userFetch||fetch)(s.url,s),o=yield _A.serializeRes(o,n,s),s.responseInterceptor&&(o=(yield s.responseInterceptor(o))||o)}catch(l){if(!o)throw l;const _=new Error(o.statusText||`response status is ${o.status}`);throw _.status=o.status,_.statusCode=o.status,_.responseError=l,_}if(!o.ok){const l=new Error(o.statusText||`response status is ${o.status}`);throw l.status=o.status,l.statusCode=o.status,l.response=o,l}return o}),gA.apply(this,arguments)}const oI=function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return/(json|xml|yaml|text)\b/.test(n)};function sI(n,s){return s&&(0===s.indexOf("application/json")||s.indexOf("+json")>0)?JSON.parse(n):pA.load(n)}function JR(n,s){let{loadSpec:t=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o={ok:n.ok,url:n.url||s,status:n.status,statusText:n.statusText,headers:lI(n.headers)},l=o.headers["content-type"],_=t||oI(l);return(_?n.text:n.blob||n.buffer).call(n).then(R=>{if(o.text=R,o.data=R,_)try{const N=sI(R,l);o.body=N,o.obj=N}catch(N){o.parseError=N}return o})}function aI(n){return n.includes(", ")?n.split(", "):n}function lI(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return"function"!=typeof n.entries?{}:Array.from(n.entries()).reduce((s,t)=>{let[o,l]=t;return s[o]=aI(l),s},{})}function vA(n,s){return!s&&"undefined"!=typeof navigator&&(s=navigator),s&&"ReactNative"===s.product?!(!n||"object"!=typeof n||"string"!=typeof n.uri):!!(void 0!==WR&&n instanceof WR||void 0!==KT&&n instanceof KT||ArrayBuffer.isView(n))||null!==n&&"object"==typeof n&&"function"==typeof n.pipe}function QR(n,s){return Array.isArray(n)&&n.some(t=>vA(t,s))}const uI={form:",",spaceDelimited:"%20",pipeDelimited:"|"},cI={csv:",",ssv:"%20",tsv:"%09",pipes:"|"};function XR(n,s){let t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{collectionFormat:o,allowEmptyValue:l,serializationOption:_,encoding:C}=s,R="object"!=typeof s||Array.isArray(s)?s:s.value,N=t?Q=>Q.toString():Q=>encodeURIComponent(Q),V=N(n);if(void 0===R&&l)return[[V,""]];if(vA(R)||QR(R))return[[V,R]];if(_)return KR(n,R,t,_);if(C){if([typeof C.style,typeof C.explode,typeof C.allowReserved].some(Q=>"undefined"!==Q)){const{style:Q,explode:oe,allowReserved:le}=C;return KR(n,R,t,{style:Q,explode:oe,allowReserved:le})}return C.contentType?"application/json"===C.contentType?[[V,N("string"==typeof R?R:JSON.stringify(R))]]:[[V,N(R.toString())]]:"object"!=typeof R?[[V,N(R)]]:Array.isArray(R)&&R.every(Q=>"object"!=typeof Q)?[[V,R.map(N).join(",")]]:[[V,N(JSON.stringify(R))]]}return"object"!=typeof R?[[V,N(R)]]:Array.isArray(R)?"multi"===o?[[V,R.map(N)]]:[[V,R.map(N).join(cI[o||"csv"])]]:[[V,""]]}function KR(n,s,t,o){const l=o.style||"form",_=void 0===o.explode?"form"===l:o.explode,C=!t&&(o&&o.allowReserved?"unsafe":"reserved"),R=V=>y0(V,{escape:C}),N=t?V=>V:V=>y0(V,{escape:C});return"object"!=typeof s?[[N(n),R(s)]]:Array.isArray(s)?_?[[N(n),s.map(R)]]:[[N(n),s.map(R).join(uI[l])]]:"deepObject"===l?Object.keys(s).map(V=>[N(`${n}[${V}]`),R(s[V])]):_?Object.keys(s).map(V=>[N(V),R(s[V])]):[[N(n),Object.keys(s).map(V=>[`${N(V)},${R(s[V])}`]).join(",")]]}function dI(n){return Object.entries(n).reduce((s,t)=>{let[o,l]=t;for(const[_,C]of XR(o,l,!0))if(Array.isArray(C))for(const R of C)if(ArrayBuffer.isView(R)){const N=new KT([R]);s.append(_,N)}else s.append(_,R);else if(ArrayBuffer.isView(C)){const R=new KT([C]);s.append(_,R)}else s.append(_,C);return s},new zR)}function qR(n){const s=Object.keys(n).reduce((t,o)=>{for(const[l,_]of XR(o,n[o]))t[l]=_;return t},{});return KO().stringify(s,{encode:!1,indices:!1})||""}function ew(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{url:s="",query:t,form:o}=n,l=function(){for(var _=arguments.length,C=new Array(_),R=0;R<_;R++)C[R]=arguments[R];const N=C.filter(V=>V).join("&");return N?`?${N}`:""};if(o){const _=Object.keys(o).some(R=>{const{value:N}=o[R];return vA(N)||QR(N)}),C=n.headers["content-type"]||n.headers["Content-Type"];if(_||/multipart\/form-data/i.test(C)){const R=dI(n.form);iI(R,n)}else n.body=qR(o);delete n.form}if(t){const[_,C]=s.split("?");let R="";if(C){const V=KO().parse(C);Object.keys(t).forEach(oe=>delete V[oe]),R=KO().stringify(V,{encode:!0})}const N=l(R,qR(t));n.url=_+N,delete n.query}return n}function fI(n,s,t){return t=t||(o=>o),s=s||(o=>o),o=>("string"==typeof o&&(o={url:o}),_A.mergeInQueryOrForm(o),o=s(o),t(n(o)))}const tw=n=>{const{baseDoc:s,url:t}=n;return s||t||""},nw=n=>{const{fetch:s,http:t}=n;return s||t||mA};var n,pI=(n=function(s,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(o,l){o.__proto__=l}||function(o,l){for(var _ in l)l.hasOwnProperty(_)&&(o[_]=l[_])})(s,t)},function(s,t){function o(){this.constructor=s}n(s,t),s.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),hI=Object.prototype.hasOwnProperty;function qT(n,s){return hI.call(n,s)}function yA(n){if(Array.isArray(n)){for(var s=new Array(n.length),t=0;t<s.length;t++)s[t]=""+t;return s}if(Object.keys)return Object.keys(n);var o=[];for(var l in n)qT(n,l)&&o.push(l);return o}function P_(n){switch(typeof n){case"object":return JSON.parse(JSON.stringify(n));case"undefined":return null;default:return n}}function EA(n){for(var o,s=0,t=n.length;s<t;){if(!((o=n.charCodeAt(s))>=48&&o<=57))return!1;s++}return!0}function gg(n){return-1===n.indexOf("/")&&-1===n.indexOf("~")?n:n.replace(/~/g,"~0").replace(/\//g,"~1")}function rw(n){return n.replace(/~1/g,"/").replace(/~0/g,"~")}function bA(n){if(void 0===n)return!0;if(n)if(Array.isArray(n)){for(var s=0,t=n.length;s<t;s++)if(bA(n[s]))return!0}else if("object"==typeof n)for(var o=yA(n),l=o.length,_=0;_<l;_++)if(bA(n[o[_]]))return!0;return!1}function ow(n,s){var t=[n];for(var o in s){var l="object"==typeof s[o]?JSON.stringify(s[o],null,2):s[o];void 0!==l&&t.push(o+": "+l)}return t.join("\n")}var sw=function(n){function s(t,o,l,_,C){var R=this.constructor,N=n.call(this,ow(t,{name:o,index:l,operation:_,tree:C}))||this;return N.name=o,N.index=l,N.operation=_,N.tree=C,Object.setPrototypeOf(N,R.prototype),N.message=ow(t,{name:o,index:l,operation:_,tree:C}),N}return pI(s,n),s}(Error),df=sw,_I=P_,E0={add:function(n,s,t){return n[s]=this.value,{newDocument:t}},remove:function(n,s,t){var o=n[s];return delete n[s],{newDocument:t,removed:o}},replace:function(n,s,t){var o=n[s];return n[s]=this.value,{newDocument:t,removed:o}},move:function(n,s,t){var o=AE(t,this.path);o&&(o=P_(o));var l=jv(t,{op:"remove",path:this.from}).removed;return jv(t,{op:"add",path:this.path,value:l}),{newDocument:t,removed:o}},copy:function(n,s,t){var o=AE(t,this.from);return jv(t,{op:"add",path:this.path,value:P_(o)}),{newDocument:t}},test:function(n,s,t){return{newDocument:t,test:DE(n[s],this.value)}},_get:function(n,s,t){return this.value=n[s],{newDocument:t}}},mI={add:function(n,s,t){return EA(s)?n.splice(s,0,this.value):n[s]=this.value,{newDocument:t,index:s}},remove:function(n,s,t){return{newDocument:t,removed:n.splice(s,1)[0]}},replace:function(n,s,t){var o=n[s];return n[s]=this.value,{newDocument:t,removed:o}},move:E0.move,copy:E0.copy,test:E0.test,_get:E0._get};function AE(n,s){if(""==s)return n;var t={op:"_get",path:s};return jv(n,t),t.value}function jv(n,s,t,o,l,_){if(void 0===t&&(t=!1),void 0===o&&(o=!0),void 0===l&&(l=!0),void 0===_&&(_=0),t&&("function"==typeof t?t(s,0,n,s.path):eC(s,0)),""===s.path){var C={newDocument:n};if("add"===s.op)return C.newDocument=s.value,C;if("replace"===s.op)return C.newDocument=s.value,C.removed=n,C;if("move"===s.op||"copy"===s.op)return C.newDocument=AE(n,s.from),"move"===s.op&&(C.removed=n),C;if("test"===s.op){if(C.test=DE(n,s.value),!1===C.test)throw new df("Test operation failed","TEST_OPERATION_FAILED",_,s,n);return C.newDocument=n,C}if("remove"===s.op)return C.removed=n,C.newDocument=null,C;if("_get"===s.op)return s.value=n,C;if(t)throw new df("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",_,s,n);return C}o||(n=P_(n));var N=(s.path||"").split("/"),V=n,Q=1,oe=N.length,le=void 0,_e=void 0,ye=void 0;for(ye="function"==typeof t?t:eC;;){if((_e=N[Q])&&-1!=_e.indexOf("~")&&(_e=rw(_e)),l&&("__proto__"==_e||"prototype"==_e&&Q>0&&"constructor"==N[Q-1]))throw new TypeError("JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(t&&void 0===le&&(void 0===V[_e]?le=N.slice(0,Q).join("/"):Q==oe-1&&(le=s.path),void 0!==le&&ye(s,0,n,le)),Q++,Array.isArray(V)){if("-"===_e)_e=V.length;else{if(t&&!EA(_e))throw new df("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",_,s,n);EA(_e)&&(_e=~~_e)}if(Q>=oe){if(t&&"add"===s.op&&_e>V.length)throw new df("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",_,s,n);if(!1===(C=mI[s.op].call(s,V,_e,n)).test)throw new df("Test operation failed","TEST_OPERATION_FAILED",_,s,n);return C}}else if(Q>=oe){if(!1===(C=E0[s.op].call(s,V,_e,n)).test)throw new df("Test operation failed","TEST_OPERATION_FAILED",_,s,n);return C}if(V=V[_e],t&&Q<oe&&(!V||"object"!=typeof V))throw new df("Cannot perform operation at the desired path","OPERATION_PATH_UNRESOLVABLE",_,s,n)}}function Xg(n,s,t,o,l){if(void 0===o&&(o=!0),void 0===l&&(l=!0),t&&!Array.isArray(s))throw new df("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");o||(n=P_(n));for(var _=new Array(s.length),C=0,R=s.length;C<R;C++)_[C]=jv(n,s[C],t,!0,l,C),n=_[C].newDocument;return _.newDocument=n,_}function gI(n,s,t){var o=jv(n,s);if(!1===o.test)throw new df("Test operation failed","TEST_OPERATION_FAILED",t,s,n);return o.newDocument}function eC(n,s,t,o){if("object"!=typeof n||null===n||Array.isArray(n))throw new df("Operation is not an object","OPERATION_NOT_AN_OBJECT",s,n,t);if(!E0[n.op])throw new df("Operation `op` property is not one of operations defined in RFC-6902","OPERATION_OP_INVALID",s,n,t);if("string"!=typeof n.path)throw new df("Operation `path` property is not a string","OPERATION_PATH_INVALID",s,n,t);if(0!==n.path.indexOf("/")&&n.path.length>0)throw new df('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",s,n,t);if(("move"===n.op||"copy"===n.op)&&"string"!=typeof n.from)throw new df("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",s,n,t);if(("add"===n.op||"replace"===n.op||"test"===n.op)&&void 0===n.value)throw new df("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",s,n,t);if(("add"===n.op||"replace"===n.op||"test"===n.op)&&bA(n.value))throw new df("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",s,n,t);if(t)if("add"==n.op){var l=n.path.split("/").length,_=o.split("/").length;if(l!==_+1&&l!==_)throw new df("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",s,n,t)}else if("replace"===n.op||"remove"===n.op||"_get"===n.op){if(n.path!==o)throw new df("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",s,n,t)}else if("move"===n.op||"copy"===n.op){var R=aw([{op:"_get",path:n.from,value:void 0}],t);if(R&&"OPERATION_PATH_UNRESOLVABLE"===R.name)throw new df("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",s,n,t)}}function aw(n,s,t){try{if(!Array.isArray(n))throw new df("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(s)Xg(P_(s),P_(n),t||!0);else{t=t||eC;for(var o=0;o<n.length;o++)t(n[o],o,s,void 0)}}catch(l){if(l instanceof df)return l;throw l}}function DE(n,s){if(n===s)return!0;if(n&&s&&"object"==typeof n&&"object"==typeof s){var l,_,C,t=Array.isArray(n),o=Array.isArray(s);if(t&&o){if((_=n.length)!=s.length)return!1;for(l=_;0!=l--;)if(!DE(n[l],s[l]))return!1;return!0}if(t!=o)return!1;var R=Object.keys(n);if((_=R.length)!==Object.keys(s).length)return!1;for(l=_;0!=l--;)if(!s.hasOwnProperty(R[l]))return!1;for(l=_;0!=l--;)if(!DE(n[C=R[l]],s[C]))return!1;return!0}return n!=n&&s!=s}var SA=new WeakMap,vI=function n(s){this.observers=new Map,this.obj=s},yI=function n(s,t){this.callback=s,this.observer=t};function TI(n,s){s.unobserve()}function CI(n,s){var o,l=function EI(n){return SA.get(n)}(n);if(l){var _=function bI(n,s){return n.observers.get(s)}(l,s);o=_&&_.observer}else l=new vI(n),SA.set(n,l);if(o)return o;if(o={},l.value=P_(n),s){o.callback=s,o.next=null;var C=function(){TA(o)},R=function(){clearTimeout(o.next),o.next=setTimeout(C)};"undefined"!=typeof window&&(window.addEventListener("mouseup",R),window.addEventListener("keyup",R),window.addEventListener("mousedown",R),window.addEventListener("keydown",R),window.addEventListener("change",R))}return o.patches=[],o.object=n,o.unobserve=function(){TA(o),clearTimeout(o.next),function SI(n,s){n.observers.delete(s.callback)}(l,o),"undefined"!=typeof window&&(window.removeEventListener("mouseup",R),window.removeEventListener("keyup",R),window.removeEventListener("mousedown",R),window.removeEventListener("keydown",R),window.removeEventListener("change",R))},l.observers.set(s,new yI(s,o)),o}function TA(n,s){void 0===s&&(s=!1);var t=SA.get(n.object);CA(t.value,n.object,n.patches,"",s),n.patches.length&&Xg(t.value,n.patches);var o=n.patches;return o.length>0&&(n.patches=[],n.callback&&n.callback(o)),o}function CA(n,s,t,o,l){if(s!==n){"function"==typeof s.toJSON&&(s=s.toJSON());for(var _=yA(s),C=yA(n),N=!1,V=C.length-1;V>=0;V--){var oe=n[Q=C[V]];if(!qT(s,Q)||void 0===s[Q]&&void 0!==oe&&!1===Array.isArray(s))Array.isArray(n)===Array.isArray(s)?(l&&t.push({op:"test",path:o+"/"+gg(Q),value:P_(oe)}),t.push({op:"remove",path:o+"/"+gg(Q)}),N=!0):(l&&t.push({op:"test",path:o,value:n}),t.push({op:"replace",path:o,value:s}));else{var le=s[Q];"object"==typeof oe&&null!=oe&&"object"==typeof le&&null!=le&&Array.isArray(oe)===Array.isArray(le)?CA(oe,le,t,o+"/"+gg(Q),l):oe!==le&&(l&&t.push({op:"test",path:o+"/"+gg(Q),value:P_(oe)}),t.push({op:"replace",path:o+"/"+gg(Q),value:P_(le)}))}}if(N||_.length!=C.length)for(V=0;V<_.length;V++){var Q;!qT(n,Q=_[V])&&void 0!==s[Q]&&t.push({op:"add",path:o+"/"+gg(Q),value:P_(s[Q])})}}}function MI(n,s,t){void 0===t&&(t=!1);var o=[];return CA(n,s,o,"",t),o}Object.assign({},r,a,{JsonPatchError:sw,deepClone:P_,escapePathComponent:gg,unescapePathComponent:rw});var OI=i(89225),AI=i.n(OI);const Cc={add:function xI(n,s){return{op:"add",path:n,value:s}},replace:tC,remove:function RI(n){return{op:"remove",path:n}},merge:function wI(n,s){return{type:"mutation",op:"merge",path:n,value:s}},mergeDeep:function PI(n,s){return{type:"mutation",op:"mergeDeep",path:n,value:s}},context:function NI(n,s){return{type:"context",path:n,value:s}},getIn:function kI(n,s){return s.reduce((t,o)=>void 0!==o&&t?t[o]:t,n)},applyPatch:function DI(n,s,t){if(t=t||{},"merge"===(s=kc(kc({},s),{},{path:s.path&&lw(s.path)})).op){const o=AA(n,s.path);Object.assign(o,s.value),Xg(n,[tC(s.path,o)])}else if("mergeDeep"===s.op){const o=AA(n,s.path),l=AI()(o,s.value);n=Xg(n,[tC(s.path,l)]).newDocument}else if("add"===s.op&&""===s.path&&Gv(s.value)){Xg(n,Object.keys(s.value).reduce((l,_)=>(l.push({op:"add",path:`/${lw(_)}`,value:s.value[_]}),l),[]))}else if("replace"===s.op&&""===s.path){let{value:o}=s;t.allowMetaPatches&&s.meta&&nC(s)&&(Array.isArray(s.value)||Gv(s.value))&&(o=kc(kc({},o),s.meta)),n=o}else if(Xg(n,[s]),t.allowMetaPatches&&s.meta&&nC(s)&&(Array.isArray(s.value)||Gv(s.value))){const l=kc(kc({},AA(n,s.path)),s.meta);Xg(n,[tC(s.path,l)])}return n},parentPathMatch:function LI(n,s){if(!Array.isArray(s))return!1;for(let t=0,o=s.length;t<o;t+=1)if(s[t]!==n[t])return!1;return!0},flatten:xE,fullyNormalizeArray:function $I(n){return dw(xE(cw(n)))},normalizeArray:cw,isPromise:function HI(n){return Gv(n)&&fw(n.then)},forEachNew:function II(n,s){try{return uw(n,OA,s)}catch(t){return t}},forEachNewPrimitive:function FI(n,s){try{return uw(n,MA,s)}catch(t){return t}},isJsonPatch:pw,isContextPatch:function YI(n){return rC(n)&&"context"===n.type},isPatch:rC,isMutation:hw,isAdditiveMutation:nC,isGenerator:function UI(n){return"[object GeneratorFunction]"===Object.prototype.toString.call(n)},isFunction:fw,isObject:Gv,isError:function BI(n){return n instanceof Error}};function lw(n){return Array.isArray(n)?n.length<1?"":`/${n.map(s=>(s+"").replace(/~/g,"~0").replace(/\//g,"~1")).join("/")}`:n}function tC(n,s,t){return{op:"replace",path:n,value:s,meta:t}}function uw(n,s,t){return dw(xE(n.filter(nC).map(C=>s(C.value,t,C.path))||[]))}function MA(n,s,t){return t=t||[],Array.isArray(n)?n.map((o,l)=>MA(o,s,t.concat(l))):Gv(n)?Object.keys(n).map(o=>MA(n[o],s,t.concat(o))):s(n,t[t.length-1],t)}function OA(n,s,t){let o=[];if((t=t||[]).length>0){const l=s(n,t[t.length-1],t);l&&(o=o.concat(l))}if(Array.isArray(n)){const l=n.map((_,C)=>OA(_,s,t.concat(C)));l&&(o=o.concat(l))}else if(Gv(n)){const l=Object.keys(n).map(_=>OA(n[_],s,t.concat(_)));l&&(o=o.concat(l))}return o=xE(o),o}function cw(n){return Array.isArray(n)?n:[n]}function xE(n){return[].concat(...n.map(s=>Array.isArray(s)?xE(s):s))}function dw(n){return n.filter(s=>void 0!==s)}function Gv(n){return n&&"object"==typeof n}function fw(n){return n&&"function"==typeof n}function pw(n){if(rC(n)){const{op:s}=n;return"add"===s||"remove"===s||"replace"===s}return!1}function hw(n){return pw(n)||rC(n)&&"mutation"===n.type}function nC(n){return hw(n)&&("add"===n.op||"replace"===n.op||"merge"===n.op||"mergeDeep"===n.op)}function rC(n){return n&&"object"==typeof n}function AA(n,s){try{return AE(n,s)}catch(t){return console.error(t),{}}}var Vv=i(38505);function _w(n,s){function t(){Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack;for(var o=arguments.length,l=new Array(o),_=0;_<o;_++)l[_]=arguments[_];[this.message]=l,s&&s.apply(this,l)}return(t.prototype=new Error).name=n,t.prototype.constructor=t,t}var jI=i(18807),GI=i.n(jI);const VI=["properties"],ZI=["properties"],zI=["definitions","parameters","responses","securityDefinitions","components/schemas","components/responses","components/parameters","components/securitySchemes"],WI=["schema/example","items/example"];function mw(n){const s=n[n.length-1],t=n[n.length-2],o=n.join("/");return VI.indexOf(s)>-1&&-1===ZI.indexOf(t)||zI.indexOf(o)>-1||WI.some(l=>o.indexOf(l)>-1)}function DA(n,s){const[t,o]=n.split("#"),l=Vv.resolve(t||"",s||"");return o?`${l}#${o}`:l}const QI=/^([a-z]+:\/\/|\/\/)/i,b0=_w("JSONRefError",function(s,t,o){this.originalError=o,Object.assign(this,t||{})}),vg={},gw=new WeakMap,XI=[n=>"paths"===n[0]&&"responses"===n[3]&&"examples"===n[5],n=>"paths"===n[0]&&"responses"===n[3]&&"content"===n[5]&&"example"===n[7],n=>"paths"===n[0]&&"responses"===n[3]&&"content"===n[5]&&"examples"===n[7]&&"value"===n[9],n=>"paths"===n[0]&&"requestBody"===n[3]&&"content"===n[4]&&"example"===n[6],n=>"paths"===n[0]&&"requestBody"===n[3]&&"content"===n[4]&&"examples"===n[6]&&"value"===n[8],n=>"paths"===n[0]&&"parameters"===n[2]&&"example"===n[4],n=>"paths"===n[0]&&"parameters"===n[3]&&"example"===n[5],n=>"paths"===n[0]&&"parameters"===n[2]&&"examples"===n[4]&&"value"===n[6],n=>"paths"===n[0]&&"parameters"===n[3]&&"examples"===n[5]&&"value"===n[7],n=>"paths"===n[0]&&"parameters"===n[2]&&"content"===n[4]&&"example"===n[6],n=>"paths"===n[0]&&"parameters"===n[2]&&"content"===n[4]&&"examples"===n[6]&&"value"===n[8],n=>"paths"===n[0]&&"parameters"===n[3]&&"content"===n[4]&&"example"===n[7],n=>"paths"===n[0]&&"parameters"===n[3]&&"content"===n[5]&&"examples"===n[7]&&"value"===n[9]],vw=Object.assign({key:"$ref",plugin:(n,s,t,o)=>{const l=o.getInstance(),_=t.slice(0,-1);if(mw(_)||(n=>XI.some(s=>s(n)))(_))return;const{baseDoc:C}=o.getContext(t);if("string"!=typeof n)return new b0("$ref: must be a string (JSON-Ref)",{$ref:n,baseDoc:C,fullPath:t});const R=Ew(n),N=R[0],V=R[1]||"";let Q,oe,le;try{Q=C||N?yw(N,C):null}catch($e){return xA($e,{pointer:V,$ref:n,basePath:Q,fullPath:t})}if(function i4(n,s,t,o){let l=gw.get(o);l||(l={},gw.set(o,l));const _=function n4(n){return 0===n.length?"":`/${n.map(Cw).join("/")}`}(t),C=`${s||"<specmap-base>"}#${n}`,R=_.replace(/allOf\/\d+\/?/g,"");if(s===o.contextTree.get([]).baseDoc&&PA(R,n))return!0;let V="";if(t.some(oe=>(V=`${V}/${Cw(oe)}`,l[V]&&l[V].some(le=>PA(le,C)||PA(C,le)))))return!0;l[R]=(l[R]||[]).concat(C)}(V,Q,_,o)&&!l.useCircularStructures){const $e=DA(n,Q);return n===$e?null:Cc.replace(t,$e)}if(null==Q?(le=wA(V),oe=o.get(le),void 0===oe&&(oe=new b0(`Could not resolve reference: ${n}`,{pointer:V,$ref:n,baseDoc:C,fullPath:t}))):(oe=bw(Q,V),oe=null!=oe.__value?oe.__value:oe.catch($e=>{throw xA($e,{pointer:V,$ref:n,baseDoc:C,fullPath:t})})),oe instanceof Error)return[Cc.remove(t),oe];const _e=DA(n,Q),ye=Cc.replace(_,oe,{$$ref:_e});if(Q&&Q!==C)return[ye,Cc.context(_,{baseDoc:Q})];try{if(!function o4(n,s){const t=[n];return s.path.reduce((l,_)=>(t.push(l[_]),l[_]),n),function o(l){return Cc.isObject(l)&&(t.indexOf(l)>=0||Object.keys(l).some(_=>o(l[_])))}(s.value)}(o.state,ye)||l.useCircularStructures)return ye}catch($e){return null}}},{docCache:vg,absoluteify:yw,clearCache:function e4(n){void 0!==n?delete vg[n]:Object.keys(vg).forEach(s=>{delete vg[s]})},JSONRefError:b0,wrapError:xA,getDoc:Sw,split:Ew,extractFromDoc:bw,fetchJSON:function t4(n){return fetch(n,{headers:{Accept:Yx},loadSpec:!0}).then(s=>s.text()).then(s=>pA.load(s))},extract:RA,jsonPointerToArray:wA,unescapeJsonPointerToken:Tw}),qI=vw;function yw(n,s){if(!QI.test(n)){if(!s)throw new b0(`Tried to resolve a relative URL, without having a basePath. path: '${n}' basePath: '${s}'`);return Vv.resolve(s,n)}return n}function xA(n,s){let t;return t=n&&n.response&&n.response.body?`${n.response.body.code} ${n.response.body.message}`:n.message,new b0(`Could not resolve reference: ${t}`,s,n)}function Ew(n){return(n+"").split("#")}function bw(n,s){const t=vg[n];if(t&&!Cc.isPromise(t))try{const o=RA(s,t);return Object.assign(Promise.resolve(o),{__value:o})}catch(o){return Promise.reject(o)}return Sw(n).then(o=>RA(s,o))}function Sw(n){const s=vg[n];return s?Cc.isPromise(s)?s:Promise.resolve(s):(vg[n]=vw.fetchJSON(n).then(t=>(vg[n]=t,t)),vg[n])}function RA(n,s){const t=wA(n);if(t.length<1)return s;const o=Cc.getIn(s,t);if(void 0===o)throw new b0(`Could not resolve pointer: ${n} does not exist in document`,{pointer:n});return o}function wA(n){if("string"!=typeof n)throw new TypeError("Expected a string, got a "+typeof n);return"/"===n[0]&&(n=n.substr(1)),""===n?[]:n.split("/").map(Tw)}function Tw(n){return"string"!=typeof n?n:new URLSearchParams(`=${n.replace(/~1/g,"/").replace(/~0/g,"~")}`).get("")}function Cw(n){return new URLSearchParams([["",n.replace(/~/g,"~0").replace(/\//g,"~1")]]).toString().slice(1)}function PA(n,s){if((n=>!n||"/"===n||"#"===n)(s))return!0;const t=n.charAt(s.length),o=s.slice(-1);return 0===n.indexOf(s)&&(!t||"/"===t||"#"===t)&&"#"!==o}const s4={key:"allOf",plugin:(n,s,t,o,l)=>{if(l.meta&&l.meta.$$ref)return;const _=t.slice(0,-1);if(mw(_))return;if(!Array.isArray(n)){const V=new TypeError("allOf must be an array");return V.fullPath=t,V}let C=!1,R=l.value;if(_.forEach(V=>{!R||(R=R[V])}),R=kc({},R),0===Object.keys(R).length)return;delete R.allOf;const N=[];return N.push(o.replace(_,{})),n.forEach((V,Q)=>{if(!o.isObject(V)){if(C)return null;C=!0;const _e=new TypeError("Elements in allOf must be objects");return _e.fullPath=t,N.push(_e)}N.push(o.mergeDeep(_,V));const le=function JI(n,s){let{specmap:t,getBaseUrlForNodePath:o=(C=>t.getContext([...s,...C]).baseDoc),targetKeys:l=["$ref","$$ref"]}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const _=[];return GI()(n).forEach(function(){if(l.includes(this.key)&&"string"==typeof this.node){const R=this.path,N=s.concat(this.path),V=DA(this.node,o(R));_.push(t.replace(N,V))}}),_}(V,t.slice(0,-1),{getBaseUrlForNodePath:_e=>o.getContext([...t,Q,..._e]).baseDoc,specmap:o});N.push(...le)}),R.example&&N.push(o.remove([].concat(_,"example"))),N.push(o.mergeDeep(_,R)),R.$$ref||N.push(o.remove([].concat(_,"$$ref"))),N}},a4={key:"parameters",plugin:(n,s,t,o)=>{if(Array.isArray(n)&&n.length){const l=Object.assign([],n),_=t.slice(0,-1),C=kc({},Cc.getIn(o.spec,_));for(let R=0;R<n.length;R+=1){const N=n[R];try{l[R].default=o.parameterMacro(C,N)}catch(V){const Q=new Error(V);return Q.fullPath=t,Q}}return Cc.replace(t,l)}return Cc.replace(t,n)}},l4={key:"properties",plugin:(n,s,t,o)=>{const l=kc({},n);for(const C in n)try{l[C].default=o.modelPropertyMacro(l[C])}catch(R){const N=new Error(R);return N.fullPath=t,N}return Cc.replace(t,l)}};class u4{constructor(s){this.root=NA(s||{})}set(s,t){const o=this.getParent(s,!0);if(!o)return void iC(this.root,t,null);const l=s[s.length-1],{children:_}=o;_[l]?iC(_[l],t,o):_[l]=NA(t,o)}get(s){if((s=s||[]).length<1)return this.root.value;let o,l,t=this.root;for(let _=0;_<s.length&&(l=s[_],o=t.children,o[l]);_+=1)t=o[l];return t&&t.protoValue}getParent(s,t){return!s||s.length<1?null:s.length<2?this.root:s.slice(0,-1).reduce((o,l)=>{if(!o)return o;const{children:_}=o;return!_[l]&&t&&(_[l]=NA(null,o)),_[l]},this.root)}}function NA(n,s){return iC({children:{}},n,s)}function iC(n,s,t){return n.value=s||{},n.protoValue=t?kc(kc({},t.protoValue),n.value):n.value,Object.keys(n.children).forEach(o=>{const l=n.children[o];n.children[o]=iC(l,l.value,n)}),n}const Ow=()=>{};class c4{static getPluginName(s){return s.pluginName}static getPatchesOfType(s,t){return s.filter(t)}constructor(s){Object.assign(this,{spec:"",debugLevel:"info",plugins:[],pluginHistory:{},errors:[],mutations:[],promisedPatches:[],state:{},patches:[],context:{},contextTree:new u4,showDebug:!1,allPatches:[],pluginProp:"specMap",libMethods:Object.assign(Object.create(this),Cc,{getInstance:()=>this}),allowMetaPatches:!1},s),this.get=this._get.bind(this),this.getContext=this._getContext.bind(this),this.hasRun=this._hasRun.bind(this),this.wrappedPlugins=this.plugins.map(this.wrapPlugin.bind(this)).filter(Cc.isFunction),this.patches.push(Cc.add([],this.spec)),this.patches.push(Cc.context([],this.context)),this.updatePatches(this.patches)}debug(s){if(this.debugLevel===s){for(var t=arguments.length,o=new Array(t>1?t-1:0),l=1;l<t;l++)o[l-1]=arguments[l];console.log(...o)}}verbose(s){if("verbose"===this.debugLevel){for(var t=arguments.length,o=new Array(t>1?t-1:0),l=1;l<t;l++)o[l-1]=arguments[l];console.log(`[${s}]   `,...o)}}wrapPlugin(s,t){const{pathDiscriminator:o}=this;let _,l=null;return s[this.pluginProp]?(l=s,_=s[this.pluginProp]):Cc.isFunction(s)?_=s:Cc.isObject(s)&&(_=function C(R){const N=(V,Q)=>!Array.isArray(V)||V.every((oe,le)=>oe===Q[le]);return function*(Q,oe){const le={};for(const ye of Q.filter(Cc.isAdditiveMutation))yield*_e(ye.value,ye.path,ye);function*_e(ye,$e,Ie){if(Cc.isObject(ye)){const ke=$e.length-1,we=$e[ke],G=$e.indexOf("properties"),Dt="properties"===we&&ke===G,bt=oe.allowMetaPatches&&le[ye.$$ref];for(const Bt of Object.keys(ye)){const Jt=ye[Bt],Mn=$e.concat(Bt),zt=Cc.isObject(Jt),xn=ye.$$ref;if(bt||zt&&(oe.allowMetaPatches&&xn&&(le[xn]=!0),yield*_e(Jt,Mn,Ie)),!Dt&&Bt===R.key){const Nn=N(o,$e);(!o||Nn)&&(yield R.plugin(Jt,Bt,Mn,oe,Ie))}}}else R.key===$e[$e.length-1]&&(yield R.plugin(ye,R.key,$e,oe))}}}(s)),Object.assign(_.bind(l),{pluginName:s.name||t,isGenerator:Cc.isGenerator(_)})}nextPlugin(){return this.wrappedPlugins.find(s=>this.getMutationsForPlugin(s).length>0)}nextPromisedPatch(){if(this.promisedPatches.length>0)return Promise.race(this.promisedPatches.map(s=>s.value))}getPluginHistory(s){const t=this.constructor.getPluginName(s);return this.pluginHistory[t]||[]}getPluginRunCount(s){return this.getPluginHistory(s).length}getPluginHistoryTip(s){const t=this.getPluginHistory(s);return t&&t[t.length-1]||{}}getPluginMutationIndex(s){const t=this.getPluginHistoryTip(s).mutationIndex;return"number"!=typeof t?-1:t}updatePluginHistory(s,t){const o=this.constructor.getPluginName(s);this.pluginHistory[o]=this.pluginHistory[o]||[],this.pluginHistory[o].push(t)}updatePatches(s){Cc.normalizeArray(s).forEach(t=>{if(t instanceof Error)this.errors.push(t);else try{if(!Cc.isObject(t))return void this.debug("updatePatches","Got a non-object patch",t);if(this.showDebug&&this.allPatches.push(t),Cc.isPromise(t.value))return this.promisedPatches.push(t),void this.promisedPatchThen(t);if(Cc.isContextPatch(t))return void this.setContext(t.path,t.value);if(Cc.isMutation(t))return void this.updateMutations(t)}catch(o){console.error(o),this.errors.push(o)}})}updateMutations(s){"object"==typeof s.value&&!Array.isArray(s.value)&&this.allowMetaPatches&&(s.value=kc({},s.value));const t=Cc.applyPatch(this.state,s,{allowMetaPatches:this.allowMetaPatches});t&&(this.mutations.push(s),this.state=t)}removePromisedPatch(s){const t=this.promisedPatches.indexOf(s);t<0?this.debug("Tried to remove a promisedPatch that isn't there!"):this.promisedPatches.splice(t,1)}promisedPatchThen(s){return s.value=s.value.then(t=>{const o=kc(kc({},s),{},{value:t});this.removePromisedPatch(s),this.updatePatches(o)}).catch(t=>{this.removePromisedPatch(s),this.updatePatches(t)}),s.value}getMutations(s,t){return"number"!=typeof t&&(t=this.mutations.length),this.mutations.slice(s=s||0,t)}getCurrentMutations(){return this.getMutationsForPlugin(this.getCurrentPlugin())}getMutationsForPlugin(s){const t=this.getPluginMutationIndex(s);return this.getMutations(t+1)}getCurrentPlugin(){return this.currentPlugin}getLib(){return this.libMethods}_get(s){return Cc.getIn(this.state,s)}_getContext(s){return this.contextTree.get(s)}setContext(s,t){return this.contextTree.set(s,t)}_hasRun(s){return this.getPluginRunCount(this.getCurrentPlugin())>(s||0)}dispatch(){const s=this,t=this.nextPlugin();if(!t){const _=this.nextPromisedPatch();if(_)return _.then(()=>this.dispatch()).catch(()=>this.dispatch());const C={spec:this.state,errors:this.errors};return this.showDebug&&(C.patches=this.allPatches),Promise.resolve(C)}if(s.pluginCount=s.pluginCount||{},s.pluginCount[t]=(s.pluginCount[t]||0)+1,s.pluginCount[t]>100)return Promise.resolve({spec:s.state,errors:s.errors.concat(new Error("We've reached a hard limit of 100 plugin runs"))});if(t!==this.currentPlugin&&this.promisedPatches.length){const _=this.promisedPatches.map(C=>C.value);return Promise.all(_.map(C=>C.then(Ow,Ow))).then(()=>this.dispatch())}return function o(){s.currentPlugin=t;const _=s.getCurrentMutations(),C=s.mutations.length-1;try{if(t.isGenerator)for(const R of t(_,s.getLib()))l(R);else l(t(_,s.getLib()))}catch(R){console.error(R),l([Object.assign(Object.create(R),{plugin:t})])}finally{s.updatePluginHistory(t,{mutationIndex:C})}return s.dispatch()}();function l(_){_&&(_=Cc.fullyNormalizeArray(_),s.updatePatches(_,t))}}}function d4(n){return new c4(n).dispatch()}const S0={refs:qI,allOf:s4,parameters:a4,properties:l4},Aw=n=>n.replace(/\W/gi,"_");function f4(n,s){let{v2OperationIdCompatibilityMode:t}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(t){let o=`${s.toLowerCase()}_${n}`.replace(/[\s!@#$%^&*()_+=[{\]};:<>|./?,\\'""-]/g,"_");return o=o||`${n.substring(1)}_${s}`,o.replace(/((_){2,})/g,"_").replace(/^(_)*/g,"").replace(/([_])*$/g,"")}return`${s.toLowerCase()}${Aw(n)}`}function IA(n,s){let t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",{v2OperationIdCompatibilityMode:o}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return n&&"object"==typeof n?(n.operationId||"").replace(/\s/g,"").length?Aw(n.operationId):f4(s,t,{v2OperationIdCompatibilityMode:o}):null}function oC(n){const{spec:s}=n,{paths:t}=s,o={};if(!t||s.$$normalized)return n;for(const l in t){const _=t[l];if(null==_||!["object","function"].includes(typeof _))continue;const C=_.parameters;for(const R in _){const N=_[R];if(null==N||!["object","function"].includes(typeof N))continue;const V=IA(N,l,R);if(V){o[V]?o[V].push(N):o[V]=[N];const Q=o[V];if(Q.length>1)Q.forEach((oe,le)=>{oe.__originalOperationId=oe.__originalOperationId||oe.operationId,oe.operationId=`${V}${le+1}`});else if(void 0!==N.operationId){const oe=Q[0];oe.__originalOperationId=oe.__originalOperationId||N.operationId,oe.operationId=V}}if("parameters"!==R){const Q=[],oe={};for(const le in s)("produces"===le||"consumes"===le||"security"===le)&&(oe[le]=s[le],Q.push(oe));if(C&&(oe.parameters=C,Q.push(oe)),Q.length)for(const le of Q)for(const _e in le)if(N[_e]){if("parameters"===_e)for(const ye of le[_e])N[_e].some(Ie=>Ie.name&&Ie.name===ye.name||Ie.$ref&&Ie.$ref===ye.$ref||Ie.$$ref&&Ie.$$ref===ye.$$ref||Ie===ye)||N[_e].push(ye)}else N[_e]=le[_e]}}}return s.$$normalized=!0,n}function FA(n){return LA.apply(this,arguments)}function LA(){return LA=K_(function*(n){const{spec:s,mode:t,allowMetaPatches:o=!0,pathDiscriminator:l,modelPropertyMacro:_,parameterMacro:C,requestInterceptor:R,responseInterceptor:N,skipNormalization:V,useCircularStructures:Q}=n,oe=tw(n),le=nw(n);return function _e(ye){oe&&(S0.refs.docCache[oe]=ye),S0.refs.fetchJSON=jx(le,{requestInterceptor:R,responseInterceptor:N});const $e=[S0.refs];return"function"==typeof C&&$e.push(S0.parameters),"function"==typeof _&&$e.push(S0.properties),"strict"!==t&&$e.push(S0.allOf),d4({spec:ye,context:{baseDoc:oe},plugins:$e,allowMetaPatches:o,pathDiscriminator:l,parameterMacro:C,modelPropertyMacro:_,useCircularStructures:Q}).then(V?function(){var Ie=K_(function*(ke){return ke});return function(ke){return Ie.apply(this,arguments)}}():oC)}(s)}),LA.apply(this,arguments)}const Dw={name:"generic",match:()=>!0,normalize(n){let{spec:s}=n;const{spec:t}=oC({spec:s});return t},resolve:n=>K_(function*(){return FA(n)})()};function kA(){return kA=K_(function*(n){return FA(n)}),kA.apply(this,arguments)}const xw=n=>{try{const{openapi:s}=n;return"string"==typeof s&&/^3\.0\.([0123])(?:-rc[012])?$/.test(s)}catch(s){return!1}},Rw=n=>xw(n)||(n=>{try{const{openapi:s}=n;return"string"==typeof s&&/^3\.1\.(?:[1-9]\d*|0)$/.test(s)}catch(s){return!1}})(n),ww={name:"openapi-2",match(n){let{spec:s}=n;return(n=>{try{const{swagger:s}=n;return"2.0"===s}catch(s){return!1}})(s)},normalize(n){let{spec:s}=n;const{spec:t}=oC({spec:s});return t},resolve:n=>K_(function*(){return function p4(n){return kA.apply(this,arguments)}(n)})()};function $A(){return $A=K_(function*(n){return FA(n)}),$A.apply(this,arguments)}const Pw={name:"openapi-3-0",match(n){let{spec:s}=n;return xw(s)},normalize(n){let{spec:s}=n;const{spec:t}=oC({spec:s});return t},resolve:n=>K_(function*(){return function m4(n){return $A.apply(this,arguments)}(n)})()},g4=function(){var n=K_(function*(s){const{spec:t,requestInterceptor:o,responseInterceptor:l}=s,_=tw(s),C=nw(s),R=t||(yield jx(C,{requestInterceptor:o,responseInterceptor:l})(_)),N=kc(kc({},s),{},{spec:R});return s.strategies.find(Q=>Q.match(N)).resolve(N)});return function(t){return n.apply(this,arguments)}}(),Nw=(n=>function(){var s=K_(function*(t){const o=kc(kc({},n),t);return g4(o)});return function(t){return s.apply(this,arguments)}}())({strategies:[Pw,ww,Dw]});var HA=i(72632);function Iw(n,s){if(null==n)return{};var o,l,t=function v4(n,s){if(null==n)return{};var l,_,t={},o=Lx(n);for(_=0;_<o.length;_++)l=o[_],!(HA(s).call(s,l)>=0)&&(t[l]=n[l]);return t}(n,s);if(VT){var _=VT(n);for(l=0;l<_.length;l++)o=_[l],!(HA(s).call(s,o)>=0)&&(!Object.prototype.propertyIsEnumerable.call(n,o)||(t[o]=n[o]))}return t}var y4=i(58102),T0=i.n(y4),E4=i(7281);function Fw(n){return"[object Object]"===Object.prototype.toString.call(n)}function Lw(n){var s,t;return!1!==Fw(n)&&(void 0===(s=n.constructor)||!(!1===Fw(t=s.prototype)||!1===t.hasOwnProperty("isPrototypeOf")))}const b4={body:function S4(n){let{req:s,value:t}=n;s.body=t},header:function C4(n){let{req:s,parameter:t,value:o}=n;s.headers=s.headers||{},void 0!==o&&(s.headers[t.name]=o)},query:function O4(n){let{req:s,value:t,parameter:o}=n;if(s.query=s.query||{},!1===t&&"boolean"===o.type&&(t="false"),0===t&&["number","integer"].indexOf(o.type)>-1&&(t="0"),t)s.query[o.name]={collectionFormat:o.collectionFormat,value:t};else if(o.allowEmptyValue&&void 0!==t){const l=o.name;s.query[l]=s.query[l]||{},s.query[l].allowEmptyValue=!0}},path:function M4(n){let{req:s,value:t,parameter:o}=n;s.url=s.url.split(`{${o.name}}`).join(encodeURIComponent(t))},formData:function T4(n){let{req:s,value:t,parameter:o}=n;(t||o.allowEmptyValue)&&(s.form=s.form||{},s.form[o.name]={value:t,allowEmptyValue:o.allowEmptyValue,collectionFormat:o.collectionFormat})}};function sC(n,s){return s.includes("application/json")?"string"==typeof n?n:JSON.stringify(n):n.toString()}function A4(n){let{req:s,value:t,parameter:o}=n;const{name:l,style:_,explode:C,content:R}=o;if(R){const V=Object.keys(R)[0];return void(s.url=s.url.split(`{${l}}`).join(y0(sC(t,V),{escape:!0})))}const N=hA({key:o.name,value:t,style:_||"simple",explode:C||!1,escape:!0});s.url=s.url.split(`{${l}}`).join(N)}function D4(n){let{req:s,value:t,parameter:o}=n;if(s.query=s.query||{},o.content){const _=sC(t,Object.keys(o.content)[0]);if(_)s.query[o.name]=_;else if(o.allowEmptyValue&&void 0!==t){const C=o.name;s.query[C]=s.query[C]||{},s.query[C].allowEmptyValue=!0}}else if(!1===t&&(t="false"),0===t&&(t="0"),t){const{style:l,explode:_,allowReserved:C}=o;s.query[o.name]={value:t,serializationOption:{style:l,explode:_,allowReserved:C}}}else if(o.allowEmptyValue&&void 0!==t){const l=o.name;s.query[l]=s.query[l]||{},s.query[l].allowEmptyValue=!0}}const x4=["accept","authorization","content-type"];function R4(n){let{req:s,parameter:t,value:o}=n;if(s.headers=s.headers||{},!(x4.indexOf(t.name.toLowerCase())>-1)){if(t.content){const l=Object.keys(t.content)[0];return void(s.headers[t.name]=sC(o,l))}void 0!==o&&(s.headers[t.name]=hA({key:t.name,value:o,style:t.style||"simple",explode:void 0!==t.explode&&t.explode,escape:!1}))}}function w4(n){let{req:s,parameter:t,value:o}=n;s.headers=s.headers||{};const l=typeof o;if(t.content){const _=Object.keys(t.content)[0];s.headers.Cookie=`${t.name}=${sC(o,_)}`}else if("undefined"!==l){const _="object"===l&&!Array.isArray(o)&&t.explode?"":`${t.name}=`;s.headers.Cookie=_+hA({key:t.name,value:o,escape:!1,style:t.style||"form",explode:void 0!==t.explode&&t.explode})}}const P4="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:window,{btoa:N4}=P4,kw=N4;function $w(n,s){return`${s.toLowerCase()}-${n}`}const U4=["http","fetch","spec","operationId","pathName","method","parameters","securities"],Hw=n=>Array.isArray(n)?n:[],Y4=_w("OperationNotFoundError",function(s,t,o){this.originalError=o,Object.assign(this,t||{})}),V4={buildRequest:Bw};function Z4(n){let{http:s,fetch:t,spec:o,operationId:l,pathName:_,method:C,parameters:R,securities:N}=n,V=Iw(n,U4);const Q=s||t||mA;_&&C&&!l&&(l=$w(_,C));const oe=V4.buildRequest(kc({spec:o,operationId:l,parameters:R,securities:N,http:Q},V));return oe.body&&(Lw(oe.body)||Array.isArray(oe.body))&&(oe.body=JSON.stringify(oe.body)),Q(oe)}function Bw(n){const{spec:s,operationId:t,responseContentType:o,scheme:l,requestInterceptor:_,responseInterceptor:C,contextUrl:R,userFetch:N,server:V,serverVariables:Q,http:oe,signal:le}=n;let{parameters:_e,parameterBuilders:ye}=n;const $e=Rw(s);ye||(ye=$e?f:b4);let ke={url:"",credentials:oe&&oe.withCredentials?"include":"same-origin",headers:{},cookies:{}};le&&(ke.signal=le),_&&(ke.requestInterceptor=_),C&&(ke.responseInterceptor=C),N&&(ke.userFetch=N);const we=function B4(n,s){return n&&n.paths?function H4(n,s){return function $4(n,s,t){if(!n||"object"!=typeof n||!n.paths||"object"!=typeof n.paths)return null;const{paths:o}=n;for(const l in o)for(const _ in o[l]){if("PARAMETERS"===_.toUpperCase())continue;const C=o[l][_];if(!C||"object"!=typeof C)continue;const R={spec:n,pathName:l,method:_.toUpperCase(),operation:C},N=s(R);if(t&&N)return R}}(n,s,!0)||null}(n,t=>{let{pathName:o,method:l,operation:_}=t;if(!_||"object"!=typeof _)return!1;const C=_.operationId;return[IA(_,o,l),$w(o,l),C].some(V=>V&&V===s)}):null}(s,t);if(!we)throw new Y4(`Operation ${t} not found`);const{operation:G={},method:Dt,pathName:bt}=we;if(ke.url+=function z4(n){return Rw(n.spec)?function W4(n){let{spec:s,pathName:t,method:o,server:l,contextUrl:_,serverVariables:C={}}=n;const R=T0()(s,["paths",t,(o||"").toLowerCase(),"servers"])||T0()(s,["paths",t,"servers"])||T0()(s,["servers"]);let N="",V=null;if(l&&R&&R.length){const Q=R.map(oe=>oe.url);Q.indexOf(l)>-1&&(N=l,V=R[Q.indexOf(l)])}return!N&&R&&R.length&&(N=R[0].url,[V]=R),N.indexOf("{")>-1&&function Q4(n){const s=[],t=/{([^}]+)}/g;let o;for(;o=t.exec(n);)s.push(o[1]);return s}(N).forEach(oe=>{if(V.variables&&V.variables[oe]){const le=V.variables[oe],_e=C[oe]||le.default,ye=new RegExp(`{${oe}}`,"g");N=N.replace(ye,_e)}}),function J4(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const t=Vv.parse(n&&s?Vv.resolve(s,n):n),o=Vv.parse(s),l=BA(t.protocol)||BA(o.protocol)||"",_=t.host||o.host,C=t.pathname||"";let R;return R=l&&_?`${l}://${_+C}`:C,"/"===R[R.length-1]?R.slice(0,-1):R}(N,_)}(n):function X4(n){let{spec:s,scheme:t,contextUrl:o=""}=n;const l=Vv.parse(o),_=Array.isArray(s.schemes)?s.schemes[0]:null,C=t||_||BA(l.protocol)||"http",R=s.host||l.host||"",N=s.basePath||"";let V;return V=C&&R?`${C}://${R+N}`:N,"/"===V[V.length-1]?V.slice(0,-1):V}(n)}({spec:s,scheme:l,contextUrl:R,server:V,serverVariables:Q,pathName:bt,method:Dt}),!t)return delete ke.cookies,ke;ke.url+=bt,ke.method=`${Dt}`.toUpperCase(),_e=_e||{};const Bt=s.paths[bt]||{};o&&(ke.headers.accept=o);const Jt=(n=>{const s={};n.forEach(o=>{s[o.in]||(s[o.in]={}),s[o.in][o.name]=o});const t=[];return Object.keys(s).forEach(o=>{Object.keys(s[o]).forEach(l=>{t.push(s[o][l])})}),t})([].concat(Hw(G.parameters)).concat(Hw(Bt.parameters)));Jt.forEach(zt=>{const xn=ye[zt.in];let Nn;if("body"===zt.in&&zt.schema&&zt.schema.properties&&(Nn=_e),Nn=zt&&zt.name&&_e[zt.name],void 0===Nn?Nn=zt&&zt.name&&_e[`${zt.in}.${zt.name}`]:((n,s)=>s.filter(t=>t.name===n))(zt.name,Jt).length>1&&console.warn(`Parameter '${zt.name}' is ambiguous because the defined spec has more than one parameter with the name: '${zt.name}' and the passed-in parameter values did not define an 'in' value.`),null!==Nn){if(void 0!==zt.default&&void 0===Nn&&(Nn=zt.default),void 0===Nn&&zt.required&&!zt.allowEmptyValue)throw new Error(`Required parameter ${zt.name} is not provided`);if($e&&zt.schema&&"object"===zt.schema.type&&"string"==typeof Nn)try{Nn=JSON.parse(Nn)}catch(zr){throw new Error("Could not parse object parameter value string as JSON")}xn&&xn({req:ke,parameter:zt,value:Nn,operation:G,spec:s})}});const Mn=kc(kc({},n),{},{operation:G});if(ke=$e?function I4(n,s){const{operation:t,requestBody:o,securities:l,spec:_,attachContentTypeForEmptyPayload:C}=n;let{requestContentType:R}=n;s=function F4(n){let{request:s,securities:t={},operation:o={},spec:l}=n;const _=kc({},s),{authorized:C={}}=t,R=o.security||l.security||[],N=C&&!!Object.keys(C).length,V=T0()(l,["components","securitySchemes"])||{};return _.headers=_.headers||{},_.query=_.query||{},Object.keys(t).length&&N&&R&&(!Array.isArray(o.security)||o.security.length)?(R.forEach(Q=>{Object.keys(Q).forEach(oe=>{const le=C[oe],_e=V[oe];if(!le)return;const ye=le.value||le,{type:$e}=_e;if(le)if("apiKey"===$e)"query"===_e.in&&(_.query[_e.name]=ye),"header"===_e.in&&(_.headers[_e.name]=ye),"cookie"===_e.in&&(_.cookies[_e.name]=ye);else if("http"===$e){if(/^basic$/i.test(_e.scheme)){const we=kw(`${ye.username||""}:${ye.password||""}`);_.headers.Authorization=`Basic ${we}`}/^bearer$/i.test(_e.scheme)&&(_.headers.Authorization=`Bearer ${ye}`)}else if("oauth2"===$e||"openIdConnect"===$e){const Ie=le.token||{},we=Ie[_e["x-tokenName"]||"access_token"];let G=Ie.token_type;(!G||"bearer"===G.toLowerCase())&&(G="Bearer"),_.headers.Authorization=`${G} ${we}`}})}),_):s}({request:s,securities:l,operation:t,spec:_});const N=t.requestBody||{},V=Object.keys(N.content||{}),Q=R&&V.indexOf(R)>-1;if(o||C){if(R&&Q)s.headers["Content-Type"]=R;else if(!R){const oe=V[0];oe&&(s.headers["Content-Type"]=oe,R=oe)}}else R&&Q&&(s.headers["Content-Type"]=R);if(!n.responseContentType&&t.responses){const oe=Object.entries(t.responses).filter(le=>{let[_e,ye]=le;const $e=parseInt(_e,10);return $e>=200&&$e<300&&Lw(ye.content)}).reduce((le,_e)=>{let[,ye]=_e;return le.concat(Object.keys(ye.content))},[]);oe.length>0&&(s.headers.accept=oe.join(", "))}if(o)if(R){if(V.indexOf(R)>-1)if("application/x-www-form-urlencoded"===R||"multipart/form-data"===R)if("object"==typeof o){const oe=(N.content[R]||{}).encoding||{};s.form={},Object.keys(o).forEach(le=>{s.form[le]={value:o[le],encoding:oe[le]||{}}})}else s.form=o;else s.body=o}else s.body=o;return s}(Mn,ke):function L4(n,s){const{spec:t,operation:o,securities:l,requestContentType:_,responseContentType:C,attachContentTypeForEmptyPayload:R}=n;if(s=function k4(n){let{request:s,securities:t={},operation:o={},spec:l}=n;const _=kc({},s),{authorized:C={},specSecurity:R=[]}=t,N=o.security||R,V=C&&!!Object.keys(C).length,Q=l.securityDefinitions;return _.headers=_.headers||{},_.query=_.query||{},Object.keys(t).length&&V&&N&&(!Array.isArray(o.security)||o.security.length)?(N.forEach(oe=>{Object.keys(oe).forEach(le=>{const _e=C[le];if(!_e)return;const{token:ye}=_e,$e=_e.value||_e,Ie=Q[le],{type:ke}=Ie,G=ye&&ye[Ie["x-tokenName"]||"access_token"];let Dt=ye&&ye.token_type;if(_e)if("apiKey"===ke){const bt="query"===Ie.in?"query":"headers";_[bt]=_[bt]||{},_[bt][Ie.name]=$e}else"basic"===ke?$e.header?_.headers.authorization=$e.header:($e.base64=kw(`${$e.username||""}:${$e.password||""}`),_.headers.authorization=`Basic ${$e.base64}`):"oauth2"===ke&&G&&(Dt=Dt&&"bearer"!==Dt.toLowerCase()?Dt:"Bearer",_.headers.authorization=`${Dt} ${G}`)})}),_):s}({request:s,securities:l,operation:o,spec:t}),s.body||s.form||R)_?s.headers["Content-Type"]=_:Array.isArray(o.consumes)?[s.headers["Content-Type"]]=o.consumes:Array.isArray(t.consumes)?[s.headers["Content-Type"]]=t.consumes:o.parameters&&o.parameters.filter(N=>"file"===N.type).length?s.headers["Content-Type"]="multipart/form-data":o.parameters&&o.parameters.filter(N=>"formData"===N.in).length&&(s.headers["Content-Type"]="application/x-www-form-urlencoded");else if(_){const N=o.parameters&&o.parameters.filter(Q=>"body"===Q.in).length>0,V=o.parameters&&o.parameters.filter(Q=>"formData"===Q.in).length>0;(N||V)&&(s.headers["Content-Type"]=_)}return!C&&Array.isArray(o.produces)&&o.produces.length>0&&(s.headers.accept=o.produces.join(", ")),s}(Mn,ke),ke.cookies&&Object.keys(ke.cookies).length){const zt=Object.keys(ke.cookies).reduce((xn,Nn)=>xn+(xn?"&":"")+E4.serialize(Nn,ke.cookies[Nn]),"");ke.headers.Cookie=zt}return ke.cookies&&delete ke.cookies,ew(ke),ke}const BA=n=>n?n.replace(/\W/g,""):null,K4=function(){var n=K_(function*(s,t){let o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{returnEntireTree:l,baseDoc:_,requestInterceptor:C,responseInterceptor:R,parameterMacro:N,modelPropertyMacro:V,useCircularStructures:Q,strategies:oe}=o,le={spec:s,pathDiscriminator:t,baseDoc:_,requestInterceptor:C,responseInterceptor:R,parameterMacro:N,modelPropertyMacro:V,useCircularStructures:Q,strategies:oe},ye=oe.find(Ie=>Ie.match(le)).normalize(le),$e=yield Nw(kc(kc({},le),{},{spec:ye,allowMetaPatches:!0,skipNormalization:!0}));return!l&&Array.isArray(t)&&t.length&&($e.spec=T0()($e.spec,t)||null),$e});return function(t,o){return n.apply(this,arguments)}}(),q4=(n=>function(){var s=K_(function*(t,o){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const _=kc(kc({},n),l);return K4(t,o,_)});return function(t,o){return s.apply(this,arguments)}}())({strategies:[Pw,ww,Dw]});var Uw=i(88768),Yw=Ne.createContext(null),jw=function e5(n){n()};var Gw={notify:function(){},get:function(){return[]}};function Vw(n,s){var t,o=Gw;function C(){Q.onStateChange&&Q.onStateChange()}function N(){t||(t=s?s.addNestedSub(C):n.subscribe(C),o=function r5(){var n=jw,s=null,t=null;return{clear:function(){s=null,t=null},notify:function(){n(function(){for(var l=s;l;)l.callback(),l=l.next})},get:function(){for(var l=[],_=s;_;)l.push(_),_=_.next;return l},subscribe:function(l){var _=!0,C=t={callback:l,next:null,prev:t};return C.prev?C.prev.next=C:s=C,function(){!_||null===s||(_=!1,C.next?C.next.prev=C.prev:t=C.prev,C.prev?C.prev.next=C.next:s=C.next)}}}}())}var Q={addNestedSub:function l(oe){return N(),o.subscribe(oe)},notifyNestedSubs:function _(){o.notify()},handleChangeWrapper:C,isSubscribed:function R(){return Boolean(t)},trySubscribe:N,tryUnsubscribe:function V(){t&&(t(),t=void 0,o.clear(),o=Gw)},getListeners:function(){return o}};return Q}var Zw="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement?Ne.useLayoutEffect:Ne.useEffect;const o5=function i5(n){var s=n.store,t=n.context,o=n.children,l=(0,Ne.useMemo)(function(){var R=Vw(s);return{store:s,subscription:R}},[s]),_=(0,Ne.useMemo)(function(){return s.getState()},[s]);return Zw(function(){var R=l.subscription;return R.onStateChange=R.notifyNestedSubs,R.trySubscribe(),_!==s.getState()&&R.notifyNestedSubs(),function(){R.tryUnsubscribe(),R.onStateChange=null}},[l,_]),Ne.createElement((t||Yw).Provider,{value:l},o)};function yg(){return yg=Object.assign?Object.assign.bind():function(n){for(var s=1;s<arguments.length;s++){var t=arguments[s];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(n[o]=t[o])}return n},yg.apply(this,arguments)}function RE(n,s){if(null==n)return{};var l,_,t={},o=Object.keys(n);for(_=0;_<o.length;_++)!(s.indexOf(l=o[_])>=0)&&(t[l]=n[l]);return t}var s5=i(62568),zw=i.n(s5),a5=i(56261),l5=["getDisplayName","methodName","renderCountProp","shouldHandleStateChanges","storeKey","withRef","forwardRef","context"],u5=["reactReduxForwardedRef"],c5=[],d5=[null,null];function f5(n,s){return[s.payload,n[1]+1]}function Ww(n,s,t){Zw(function(){return n.apply(void 0,s)},t)}function p5(n,s,t,o,l,_,C){n.current=o,s.current=l,t.current=!1,_.current&&(_.current=null,C())}function h5(n,s,t,o,l,_,C,R,N,V){if(n){var Q=!1,oe=null,le=function(){if(!Q){var Ie,ke,$e=s.getState();try{Ie=o($e,l.current)}catch(we){ke=we,oe=we}ke||(oe=null),Ie===_.current?C.current||N():(_.current=Ie,R.current=Ie,C.current=!0,V({type:"STORE_UPDATED",payload:{error:ke}}))}};return t.onStateChange=le,t.trySubscribe(),le(),function(){if(Q=!0,t.tryUnsubscribe(),t.onStateChange=null,oe)throw oe}}}var _5=function(){return[null,0]};function m5(n,s){void 0===s&&(s={});var o=s.getDisplayName,l=void 0===o?function(Bt){return"ConnectAdvanced("+Bt+")"}:o,_=s.methodName,C=void 0===_?"connectAdvanced":_,R=s.renderCountProp,N=void 0===R?void 0:R,V=s.shouldHandleStateChanges,Q=void 0===V||V,oe=s.storeKey,le=void 0===oe?"store":oe,$e=s.forwardRef,Ie=void 0!==$e&&$e,ke=s.context,we=void 0===ke?Yw:ke,G=RE(s,l5),bt=we;return function(Jt){var Mn=Jt.displayName||Jt.name||"Component",zt=l(Mn),xn=yg({},G,{getDisplayName:l,methodName:C,renderCountProp:N,shouldHandleStateChanges:Q,storeKey:le,displayName:zt,wrappedComponentName:Mn,WrappedComponent:Jt}),Nn=G.pure,Hr=Nn?Ne.useMemo:function(Jn){return Jn()};function Vr(Jn){var Qn=(0,Ne.useMemo)(function(){var Gr=Jn.reactReduxForwardedRef,Fi=RE(Jn,u5);return[Jn.context,Gr,Fi]},[Jn]),ur=Qn[0],In=Qn[1],Yr=Qn[2],Qi=(0,Ne.useMemo)(function(){return ur&&ur.Consumer&&(0,a5.isContextConsumer)(Ne.createElement(ur.Consumer,null))?ur:bt},[ur,bt]),Di=(0,Ne.useContext)(Qi),ji=Boolean(Jn.store)&&Boolean(Jn.store.getState)&&Boolean(Jn.store.dispatch),Bn=(Boolean(Di)&&Boolean(Di.store),ji?Jn.store:Di.store),bn=(0,Ne.useMemo)(function(){return function zr(Jn){return n(Jn.dispatch,xn)}(Bn)},[Bn]),Xr=(0,Ne.useMemo)(function(){if(!Q)return d5;var Gr=Vw(Bn,ji?null:Di.subscription),Fi=Gr.notifyNestedSubs.bind(Gr);return[Gr,Fi]},[Bn,ji,Di]),Ni=Xr[0],Xi=Xr[1],Bo=(0,Ne.useMemo)(function(){return ji?Di:yg({},Di,{subscription:Ni})},[ji,Di,Ni]),Ao=(0,Ne.useReducer)(f5,c5,_5),Qs=Ao[0][0],Ii=Ao[1];if(Qs&&Qs.error)throw Qs.error;var uo=(0,Ne.useRef)(),bo=(0,Ne.useRef)(Yr),Qe=(0,Ne.useRef)(),Pt=(0,Ne.useRef)(!1),Rt=Hr(function(){return Qe.current&&Yr===bo.current?Qe.current:bn(Bn.getState(),Yr)},[Bn,Qs,Yr]);Ww(p5,[bo,uo,Pt,Yr,Rt,Qe,Xi]),Ww(h5,[Q,Bn,Ni,bn,bo,uo,Pt,Qe,Xi,Ii],[Bn,Ni,bn]);var qn=(0,Ne.useMemo)(function(){return Ne.createElement(Jt,yg({},Rt,{ref:In}))},[In,Jt,Rt]);return(0,Ne.useMemo)(function(){return Q?Ne.createElement(Qi.Provider,{value:Bo},qn):qn},[Qi,qn,Bo])}var qr=Nn?Ne.memo(Vr):Vr;if(qr.WrappedComponent=Jt,qr.displayName=Vr.displayName=zt,Ie){var On=Ne.forwardRef(function(Qn,ur){return Ne.createElement(qr,yg({},Qn,{reactReduxForwardedRef:ur}))});return On.displayName=zt,On.WrappedComponent=Jt,zw()(On,Jt)}return zw()(qr,Jt)}}function Jw(n,s){return n===s?0!==n||0!==s||1/n==1/s:n!=n&&s!=s}function UA(n,s){if(Jw(n,s))return!0;if("object"!=typeof n||null===n||"object"!=typeof s||null===s)return!1;var t=Object.keys(n),o=Object.keys(s);if(t.length!==o.length)return!1;for(var l=0;l<t.length;l++)if(!Object.prototype.hasOwnProperty.call(s,t[l])||!Jw(n[t[l]],s[t[l]]))return!1;return!0}function YA(n){return function(t,o){var l=n(t,o);function _(){return l}return _.dependsOnOwnProps=!1,_}}function Qw(n){return null!=n.dependsOnOwnProps?Boolean(n.dependsOnOwnProps):1!==n.length}function Xw(n,s){return function(o,l){var C=function(N,V){return C.dependsOnOwnProps?C.mapToProps(N,V):C.mapToProps(N)};return C.dependsOnOwnProps=!0,C.mapToProps=function(N,V){C.mapToProps=n,C.dependsOnOwnProps=Qw(n);var Q=C(N,V);return"function"==typeof Q&&(C.mapToProps=Q,C.dependsOnOwnProps=Qw(Q),Q=C(N,V)),Q},C}}const b5=[function v5(n){return"function"==typeof n?Xw(n):void 0},function y5(n){return n?void 0:YA(function(s){return{dispatch:s}})},function E5(n){return n&&"object"==typeof n?YA(function(s){return function g5(n,s){var t={},o=function(C){var R=n[C];"function"==typeof R&&(t[C]=function(){return s(R.apply(void 0,arguments))})};for(var l in n)o(l);return t}(n,s)}):void 0}],C5=[function S5(n){return"function"==typeof n?Xw(n):void 0},function T5(n){return n?void 0:YA(function(){return{}})}];function M5(n,s,t){return yg({},t,n,s)}const x5=[function A5(n){return"function"==typeof n?function O5(n){return function(t,o){var N,_=o.pure,C=o.areMergedPropsEqual,R=!1;return function(Q,oe,le){var _e=n(Q,oe,le);return R?(!_||!C(_e,N))&&(N=_e):(R=!0,N=_e),N}}}(n):void 0},function D5(n){return n?void 0:function(){return M5}}];var R5=["initMapStateToProps","initMapDispatchToProps","initMergeProps"];function w5(n,s,t,o){return function(_,C){return t(n(_,C),s(o,C),C)}}function P5(n,s,t,o,l){var V,Q,oe,le,_e,_=l.areStatesEqual,C=l.areOwnPropsEqual,R=l.areStatePropsEqual,N=!1;return function(Dt,bt){return N?function we(G,Dt){var bt=!C(Dt,Q),Bt=!_(G,V,Dt,Q);return V=G,Q=Dt,bt&&Bt?function $e(){return oe=n(V,Q),s.dependsOnOwnProps&&(le=s(o,Q)),_e=t(oe,le,Q)}():bt?function Ie(){return n.dependsOnOwnProps&&(oe=n(V,Q)),s.dependsOnOwnProps&&(le=s(o,Q)),_e=t(oe,le,Q)}():Bt?function ke(){var G=n(V,Q),Dt=!R(G,oe);return oe=G,Dt&&(_e=t(oe,le,Q)),_e}():_e}(Dt,bt):function ye(G,Dt){return oe=n(V=G,Q=Dt),le=s(o,Q),_e=t(oe,le,Q),N=!0,_e}(Dt,bt)}}function N5(n,s){var t=s.initMapStateToProps,o=s.initMapDispatchToProps,l=s.initMergeProps,_=RE(s,R5),C=t(n,_),R=o(n,_),N=l(n,_);return(_.pure?P5:w5)(C,R,N,n,_)}var I5=["pure","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","areMergedPropsEqual"];function jA(n,s,t){for(var o=s.length-1;o>=0;o--){var l=s[o](n);if(l)return l}return function(_,C){throw new Error("Invalid value of type "+typeof n+" for "+t+" argument when connecting component "+C.wrappedComponentName+".")}}function F5(n,s){return n===s}function L5(n){var s=void 0===n?{}:n,t=s.connectHOC,o=void 0===t?m5:t,l=s.mapStateToPropsFactories,_=void 0===l?C5:l,C=s.mapDispatchToPropsFactories,R=void 0===C?b5:C,N=s.mergePropsFactories,V=void 0===N?x5:N,Q=s.selectorFactory,oe=void 0===Q?N5:Q;return function(_e,ye,$e,Ie){void 0===Ie&&(Ie={});var we=Ie.pure,G=void 0===we||we,Dt=Ie.areStatesEqual,bt=void 0===Dt?F5:Dt,Bt=Ie.areOwnPropsEqual,Jt=void 0===Bt?UA:Bt,Mn=Ie.areStatePropsEqual,zt=void 0===Mn?UA:Mn,xn=Ie.areMergedPropsEqual,Nn=void 0===xn?UA:xn,zr=RE(Ie,I5),Hr=jA(_e,_,"mapStateToProps"),Vr=jA(ye,R,"mapDispatchToProps"),qr=jA($e,V,"mergeProps");return o(oe,yg({methodName:"connect",getDisplayName:function(Jn){return"Connect("+Jn+")"},shouldHandleStateChanges:Boolean(_e),initMapStateToProps:Hr,initMapDispatchToProps:Vr,initMergeProps:qr,pure:G,areStatesEqual:bt,areOwnPropsEqual:Jt,areStatePropsEqual:zt,areMergedPropsEqual:Nn},zr))}}const k5=L5();jw=Uw.unstable_batchedUpdates;var B5=i(12482),U5=i.n(B5),Y5=i(80290),j5=i.n(Y5);function GA(n,s){(null==s||s>n.length)&&(s=n.length);for(var t=0,o=new Array(s);t<s;t++)o[t]=n[t];return o}function J5(n){return function V5(n){if(Array.isArray(n))return GA(n)}(n)||function Z5(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||function z5(n,s){if(n){if("string"==typeof n)return GA(n,s);var t=Object.prototype.toString.call(n).slice(8,-1);if("Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t)return Array.from(n);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return GA(n,s)}}(n)||function W5(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function wE(n){return(wE="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(s){return typeof s}:function(s){return s&&"function"==typeof Symbol&&s.constructor===Symbol&&s!==Symbol.prototype?"symbol":typeof s})(n)}function VA(n,s,t){return(s=function X5(n){var s=function Q5(n,s){if("object"!==wE(n)||null===n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var o=t.call(n,s||"default");if("object"!==wE(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===s?String:Number)(n)}(n,"string");return"symbol"===wE(s)?s:String(s)}(s))in n?Object.defineProperty(n,s,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[s]=t,n}function Kw(n,s){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);s&&(o=o.filter(function(l){return Object.getOwnPropertyDescriptor(n,l).enumerable})),t.push.apply(t,o)}return t}function C0(n){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{};s%2?Kw(Object(t),!0).forEach(function(o){VA(n,o,t[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):Kw(Object(t)).forEach(function(o){Object.defineProperty(n,o,Object.getOwnPropertyDescriptor(t,o))})}return n}var ZA={};function q5(n){if(0===n.length||1===n.length)return n;var s=n.join(".");return ZA[s]||(ZA[s]=function K5(n){var s=n.length;return 0===s||1===s?n:2===s?[n[0],n[1],"".concat(n[0],".").concat(n[1]),"".concat(n[1],".").concat(n[0])]:3===s?[n[0],n[1],n[2],"".concat(n[0],".").concat(n[1]),"".concat(n[0],".").concat(n[2]),"".concat(n[1],".").concat(n[0]),"".concat(n[1],".").concat(n[2]),"".concat(n[2],".").concat(n[0]),"".concat(n[2],".").concat(n[1]),"".concat(n[0],".").concat(n[1],".").concat(n[2]),"".concat(n[0],".").concat(n[2],".").concat(n[1]),"".concat(n[1],".").concat(n[0],".").concat(n[2]),"".concat(n[1],".").concat(n[2],".").concat(n[0]),"".concat(n[2],".").concat(n[0],".").concat(n[1]),"".concat(n[2],".").concat(n[1],".").concat(n[0])]:s>=4?[n[0],n[1],n[2],n[3],"".concat(n[0],".").concat(n[1]),"".concat(n[0],".").concat(n[2]),"".concat(n[0],".").concat(n[3]),"".concat(n[1],".").concat(n[0]),"".concat(n[1],".").concat(n[2]),"".concat(n[1],".").concat(n[3]),"".concat(n[2],".").concat(n[0]),"".concat(n[2],".").concat(n[1]),"".concat(n[2],".").concat(n[3]),"".concat(n[3],".").concat(n[0]),"".concat(n[3],".").concat(n[1]),"".concat(n[3],".").concat(n[2]),"".concat(n[0],".").concat(n[1],".").concat(n[2]),"".concat(n[0],".").concat(n[1],".").concat(n[3]),"".concat(n[0],".").concat(n[2],".").concat(n[1]),"".concat(n[0],".").concat(n[2],".").concat(n[3]),"".concat(n[0],".").concat(n[3],".").concat(n[1]),"".concat(n[0],".").concat(n[3],".").concat(n[2]),"".concat(n[1],".").concat(n[0],".").concat(n[2]),"".concat(n[1],".").concat(n[0],".").concat(n[3]),"".concat(n[1],".").concat(n[2],".").concat(n[0]),"".concat(n[1],".").concat(n[2],".").concat(n[3]),"".concat(n[1],".").concat(n[3],".").concat(n[0]),"".concat(n[1],".").concat(n[3],".").concat(n[2]),"".concat(n[2],".").concat(n[0],".").concat(n[1]),"".concat(n[2],".").concat(n[0],".").concat(n[3]),"".concat(n[2],".").concat(n[1],".").concat(n[0]),"".concat(n[2],".").concat(n[1],".").concat(n[3]),"".concat(n[2],".").concat(n[3],".").concat(n[0]),"".concat(n[2],".").concat(n[3],".").concat(n[1]),"".concat(n[3],".").concat(n[0],".").concat(n[1]),"".concat(n[3],".").concat(n[0],".").concat(n[2]),"".concat(n[3],".").concat(n[1],".").concat(n[0]),"".concat(n[3],".").concat(n[1],".").concat(n[2]),"".concat(n[3],".").concat(n[2],".").concat(n[0]),"".concat(n[3],".").concat(n[2],".").concat(n[1]),"".concat(n[0],".").concat(n[1],".").concat(n[2],".").concat(n[3]),"".concat(n[0],".").concat(n[1],".").concat(n[3],".").concat(n[2]),"".concat(n[0],".").concat(n[2],".").concat(n[1],".").concat(n[3]),"".concat(n[0],".").concat(n[2],".").concat(n[3],".").concat(n[1]),"".concat(n[0],".").concat(n[3],".").concat(n[1],".").concat(n[2]),"".concat(n[0],".").concat(n[3],".").concat(n[2],".").concat(n[1]),"".concat(n[1],".").concat(n[0],".").concat(n[2],".").concat(n[3]),"".concat(n[1],".").concat(n[0],".").concat(n[3],".").concat(n[2]),"".concat(n[1],".").concat(n[2],".").concat(n[0],".").concat(n[3]),"".concat(n[1],".").concat(n[2],".").concat(n[3],".").concat(n[0]),"".concat(n[1],".").concat(n[3],".").concat(n[0],".").concat(n[2]),"".concat(n[1],".").concat(n[3],".").concat(n[2],".").concat(n[0]),"".concat(n[2],".").concat(n[0],".").concat(n[1],".").concat(n[3]),"".concat(n[2],".").concat(n[0],".").concat(n[3],".").concat(n[1]),"".concat(n[2],".").concat(n[1],".").concat(n[0],".").concat(n[3]),"".concat(n[2],".").concat(n[1],".").concat(n[3],".").concat(n[0]),"".concat(n[2],".").concat(n[3],".").concat(n[0],".").concat(n[1]),"".concat(n[2],".").concat(n[3],".").concat(n[1],".").concat(n[0]),"".concat(n[3],".").concat(n[0],".").concat(n[1],".").concat(n[2]),"".concat(n[3],".").concat(n[0],".").concat(n[2],".").concat(n[1]),"".concat(n[3],".").concat(n[1],".").concat(n[0],".").concat(n[2]),"".concat(n[3],".").concat(n[1],".").concat(n[2],".").concat(n[0]),"".concat(n[3],".").concat(n[2],".").concat(n[0],".").concat(n[1]),"".concat(n[3],".").concat(n[2],".").concat(n[1],".").concat(n[0])]:void 0}(n)),ZA[s]}function eF(n){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2?arguments[2]:void 0,o=n.filter(function(_){return"token"!==_}),l=q5(o);return l.reduce(function(_,C){return C0(C0({},_),t[C])},s)}function qw(n){return n.join(" ")}function e3(n){var s=n.node,t=n.stylesheet,o=n.style,l=void 0===o?{}:o,_=n.useInlineStyles,C=n.key,R=s.properties,V=s.tagName;if("text"===s.type)return s.value;if(V){var le,oe=function tF(n,s){var t=0;return function(o){return t+=1,o.map(function(l,_){return e3({node:l,stylesheet:n,useInlineStyles:s,key:"code-segment-".concat(t,"-").concat(_)})})}}(t,_);if(_){var _e=Object.keys(t).reduce(function(ke,we){return we.split(".").forEach(function(G){ke.includes(G)||ke.push(G)}),ke},[]),ye=R.className&&R.className.includes("token")?["token"]:[],$e=R.className&&ye.concat(R.className.filter(function(ke){return!_e.includes(ke)}));le=C0(C0({},R),{},{className:qw($e)||void 0,style:eF(R.className,Object.assign({},R.style,l),t)})}else le=C0(C0({},R),{},{className:qw(R.className)});var Ie=oe(s.children);return Ne.createElement(V,yg({key:C},le),Ie)}}var rF=["language","children","style","customStyle","codeTagProps","useInlineStyles","showLineNumbers","showInlineLineNumbers","startingLineNumber","lineNumberContainerStyle","lineNumberStyle","wrapLines","wrapLongLines","lineProps","renderer","PreTag","CodeTag","code","astGenerator"];function t3(n,s){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);s&&(o=o.filter(function(l){return Object.getOwnPropertyDescriptor(n,l).enumerable})),t.push.apply(t,o)}return t}function Zm(n){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{};s%2?t3(Object(t),!0).forEach(function(o){VA(n,o,t[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):t3(Object(t)).forEach(function(o){Object.defineProperty(n,o,Object.getOwnPropertyDescriptor(t,o))})}return n}var iF=/\n/g;function aF(n){var s=n.codeString,o=n.containerStyle,_=n.numberStyle,C=void 0===_?{}:_,R=n.startingLineNumber;return Ne.createElement("code",{style:Object.assign({},n.codeStyle,void 0===o?{float:"left",paddingRight:"10px"}:o)},function sF(n){var t=n.startingLineNumber,o=n.style;return n.lines.map(function(l,_){var C=_+t;return Ne.createElement("span",{key:"line-".concat(_),className:"react-syntax-highlighter-line-number",style:"function"==typeof o?o(C):o},"".concat(C,"\n"))})}({lines:s.replace(/\n$/,"").split("\n"),style:C,startingLineNumber:R}))}function lF(n){return"".concat(n.toString().length,".25em")}function n3(n,s){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(n),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:s},children:[{type:"text",value:n}]}}function r3(n,s,t){var o={display:"inline-block",minWidth:lF(t),paddingRight:"1em",textAlign:"right",userSelect:"none"},l="function"==typeof n?n(s):n;return Zm(Zm({},o),l)}function aC(n){var s=n.children,t=n.lineNumber,o=n.lineNumberStyle,l=n.largestLineNumber,_=n.showInlineLineNumbers,C=n.lineProps,R=void 0===C?{}:C,N=n.className,V=void 0===N?[]:N,Q=n.showLineNumbers,oe=n.wrapLongLines,le="function"==typeof R?R(t):R;if(le.className=V,t&&_){var _e=r3(o,t,l);s.unshift(n3(t,_e))}return oe&Q&&(le.style=Zm(Zm({},le.style),{},{display:"flex"})),{type:"element",tagName:"span",properties:le,children:s}}function i3(n){for(var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=0;o<n.length;o++){var l=n[o];if("text"===l.type)t.push(aC({children:[l],className:J5(new Set(s))}));else if(l.children){var _=s.concat(l.properties.className);i3(l.children,_).forEach(function(C){return t.push(C)})}}return t}function uF(n,s,t,o,l,_,C,R,N){var V,Q=i3(n.value),oe=[],le=-1,_e=0;function ye(bt,Bt){var Jt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return aC({children:bt,lineNumber:Bt,lineNumberStyle:R,largestLineNumber:C,showInlineLineNumbers:l,lineProps:t,className:Jt,showLineNumbers:o,wrapLongLines:N})}function $e(bt,Bt){if(o&&Bt&&l){var Jt=r3(R,Bt,C);bt.unshift(n3(Bt,Jt))}return bt}function Ie(bt,Bt){var Jt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return s||Jt.length>0?ye(bt,Bt,Jt):$e(bt,Bt)}for(var ke=function(){var Bt=Q[_e],Jt=Bt.children[0].value,Mn=function oF(n){return n.match(iF)}(Jt);if(Mn){var zt=Jt.split("\n");zt.forEach(function(xn,Nn){var zr=o&&oe.length+_,Hr={type:"text",value:"".concat(xn,"\n")};if(0===Nn){var qr=Ie(Q.slice(le+1,_e).concat(aC({children:[Hr],className:Bt.properties.className})),zr);oe.push(qr)}else if(Nn===zt.length-1){var On=Q[_e+1]&&Q[_e+1].children&&Q[_e+1].children[0],Jn={type:"text",value:"".concat(xn)};if(On){var Qn=aC({children:[Jn],className:Bt.properties.className});Q.splice(_e+1,0,Qn)}else{var In=Ie([Jn],zr,Bt.properties.className);oe.push(In)}}else{var Qi=Ie([Hr],zr,Bt.properties.className);oe.push(Qi)}}),le=_e}_e++};_e<Q.length;)ke();if(le!==Q.length-1){var we=Q.slice(le+1,Q.length);if(we&&we.length){var Dt=Ie(we,o&&oe.length+_);oe.push(Dt)}}return s?oe:(V=[]).concat.apply(V,oe)}function cF(n){var t=n.stylesheet,o=n.useInlineStyles;return n.rows.map(function(l,_){return e3({node:l,stylesheet:t,useInlineStyles:o,key:"code-segement".concat(_)})})}function o3(n){return n&&void 0!==n.highlightAuto}var s3=i(74538),a3=function fF(n,s){return function(o){var l=o.language,_=o.children,C=o.style,R=void 0===C?s:C,N=o.customStyle,V=void 0===N?{}:N,Q=o.codeTagProps,oe=void 0===Q?{className:l?"language-".concat(l):void 0,style:Zm(Zm({},R['code[class*="language-"]']),R['code[class*="language-'.concat(l,'"]')])}:Q,le=o.useInlineStyles,_e=void 0===le||le,ye=o.showLineNumbers,$e=void 0!==ye&&ye,Ie=o.showInlineLineNumbers,ke=void 0===Ie||Ie,we=o.startingLineNumber,G=void 0===we?1:we,Dt=o.lineNumberContainerStyle,bt=o.lineNumberStyle,Bt=void 0===bt?{}:bt,Jt=o.wrapLines,Mn=o.wrapLongLines,zt=void 0!==Mn&&Mn,xn=o.lineProps,Nn=void 0===xn?{}:xn,zr=o.renderer,Hr=o.PreTag,Vr=void 0===Hr?"pre":Hr,qr=o.CodeTag,On=void 0===qr?"code":qr,Jn=o.code,Qn=void 0===Jn?(Array.isArray(_)?_[0]:_)||"":Jn,ur=o.astGenerator,In=function G5(n,s){if(null==n)return{};var o,l,t=RE(n,s);if(Object.getOwnPropertySymbols){var _=Object.getOwnPropertySymbols(n);for(l=0;l<_.length;l++)!(s.indexOf(o=_[l])>=0)&&(!Object.prototype.propertyIsEnumerable.call(n,o)||(t[o]=n[o]))}return t}(o,rF);ur=ur||n;var Yr=$e?Ne.createElement(aF,{containerStyle:Dt,codeStyle:oe.style||{},numberStyle:Bt,startingLineNumber:G,codeString:Qn}):null,Qi=R.hljs||R['pre[class*="language-"]']||{backgroundColor:"#fff"},Di=o3(ur)?"hljs":"prismjs",ji=Object.assign({},In,_e?{style:Object.assign({},Qi,V)}:{className:In.className?"".concat(Di," ").concat(In.className):Di,style:Object.assign({},V)});if(oe.style=Zm(Zm({},oe.style),{},zt?{whiteSpace:"pre-wrap"}:{whiteSpace:"pre"}),!ur)return Ne.createElement(Vr,ji,Yr,Ne.createElement(On,oe,Qn));(void 0===Jt&&zr||zt)&&(Jt=!0),zr=zr||cF;var Wr=[{type:"text",value:Qn}],Bn=function dF(n){var s=n.astGenerator,t=n.language,o=n.code,l=n.defaultCodeValue;if(o3(s)){var _=function(n,s){return-1!==n.listLanguages().indexOf(s)}(s,t);return"text"===t?{value:l,language:"text"}:_?s.highlight(t,o):s.highlightAuto(o)}try{return t&&"text"!==t?{value:s.highlight(o,t)}:{value:l}}catch(C){return{value:l}}}({astGenerator:ur,language:l,code:Qn,defaultCodeValue:Wr});null===Bn.language&&(Bn.value=Wr);var Xr=uF(Bn,Jt,Nn,$e,ke,G,Bn.value.length+G,Bt,zt);return Ne.createElement(Vr,ji,Ne.createElement(On,oe,!ke&&Yr,zr({rows:Xr,stylesheet:R,useInlineStyles:_e})))}}(s3,{});a3.registerLanguage=s3.registerLanguage;const pF=a3;var hF=i(36147);const mF=i.n(hF)();var gF=i(92229);const yF=i.n(gF)();var EF=i(13546);const SF=i.n(EF)();var TF=i(4357);const MF=i.n(TF)();var OF=i(44776);const DF=i.n(OF)();var xF=i(28390);const wF=i.n(xF)();var PF=i(78932);const IF=i.n(PF)(),FF={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#333",color:"white"},"hljs-name":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-code":{fontStyle:"italic",color:"#888"},"hljs-emphasis":{fontStyle:"italic"},"hljs-tag":{color:"#62c8f3"},"hljs-variable":{color:"#ade5fc"},"hljs-template-variable":{color:"#ade5fc"},"hljs-selector-id":{color:"#ade5fc"},"hljs-selector-class":{color:"#ade5fc"},"hljs-string":{color:"#a2fca2"},"hljs-bullet":{color:"#d36363"},"hljs-type":{color:"#ffa"},"hljs-title":{color:"#ffa"},"hljs-section":{color:"#ffa"},"hljs-attribute":{color:"#ffa"},"hljs-quote":{color:"#ffa"},"hljs-built_in":{color:"#ffa"},"hljs-builtin-name":{color:"#ffa"},"hljs-number":{color:"#d36363"},"hljs-symbol":{color:"#d36363"},"hljs-keyword":{color:"#fcc28c"},"hljs-selector-tag":{color:"#fcc28c"},"hljs-literal":{color:"#fcc28c"},"hljs-comment":{color:"#888"},"hljs-deletion":{color:"#333",backgroundColor:"#fc9b9b"},"hljs-regexp":{color:"#c6b4f0"},"hljs-link":{color:"#c6b4f0"},"hljs-meta":{color:"#fc9b9b"},"hljs-addition":{backgroundColor:"#a2fca2",color:"#333"}},LF={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#222",color:"#aaa"},"hljs-subst":{color:"#aaa"},"hljs-section":{color:"#fff",fontWeight:"bold"},"hljs-comment":{color:"#444"},"hljs-quote":{color:"#444"},"hljs-meta":{color:"#444"},"hljs-string":{color:"#ffcc33"},"hljs-symbol":{color:"#ffcc33"},"hljs-bullet":{color:"#ffcc33"},"hljs-regexp":{color:"#ffcc33"},"hljs-number":{color:"#00cc66"},"hljs-addition":{color:"#00cc66"},"hljs-built_in":{color:"#32aaee"},"hljs-builtin-name":{color:"#32aaee"},"hljs-literal":{color:"#32aaee"},"hljs-type":{color:"#32aaee"},"hljs-template-variable":{color:"#32aaee"},"hljs-attribute":{color:"#32aaee"},"hljs-link":{color:"#32aaee"},"hljs-keyword":{color:"#6644aa"},"hljs-selector-tag":{color:"#6644aa"},"hljs-name":{color:"#6644aa"},"hljs-selector-id":{color:"#6644aa"},"hljs-selector-class":{color:"#6644aa"},"hljs-title":{color:"#bb1166"},"hljs-variable":{color:"#bb1166"},"hljs-deletion":{color:"#bb1166"},"hljs-template-tag":{color:"#bb1166"},"hljs-doctag":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"},"hljs-emphasis":{fontStyle:"italic"}},kF={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#272822",color:"#ddd"},"hljs-tag":{color:"#f92672"},"hljs-keyword":{color:"#f92672",fontWeight:"bold"},"hljs-selector-tag":{color:"#f92672",fontWeight:"bold"},"hljs-literal":{color:"#f92672",fontWeight:"bold"},"hljs-strong":{color:"#f92672"},"hljs-name":{color:"#f92672"},"hljs-code":{color:"#66d9ef"},"hljs-class .hljs-title":{color:"white"},"hljs-attribute":{color:"#bf79db"},"hljs-symbol":{color:"#bf79db"},"hljs-regexp":{color:"#bf79db"},"hljs-link":{color:"#bf79db"},"hljs-string":{color:"#a6e22e"},"hljs-bullet":{color:"#a6e22e"},"hljs-subst":{color:"#a6e22e"},"hljs-title":{color:"#a6e22e",fontWeight:"bold"},"hljs-section":{color:"#a6e22e",fontWeight:"bold"},"hljs-emphasis":{color:"#a6e22e"},"hljs-type":{color:"#a6e22e",fontWeight:"bold"},"hljs-built_in":{color:"#a6e22e"},"hljs-builtin-name":{color:"#a6e22e"},"hljs-selector-attr":{color:"#a6e22e"},"hljs-selector-pseudo":{color:"#a6e22e"},"hljs-addition":{color:"#a6e22e"},"hljs-variable":{color:"#a6e22e"},"hljs-template-tag":{color:"#a6e22e"},"hljs-template-variable":{color:"#a6e22e"},"hljs-comment":{color:"#75715e"},"hljs-quote":{color:"#75715e"},"hljs-deletion":{color:"#75715e"},"hljs-meta":{color:"#75715e"},"hljs-doctag":{fontWeight:"bold"},"hljs-selector-id":{fontWeight:"bold"}},$F={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#2E3440",color:"#D8DEE9"},"hljs-subst":{color:"#D8DEE9"},"hljs-selector-tag":{color:"#81A1C1"},"hljs-selector-id":{color:"#8FBCBB",fontWeight:"bold"},"hljs-selector-class":{color:"#8FBCBB"},"hljs-selector-attr":{color:"#8FBCBB"},"hljs-selector-pseudo":{color:"#88C0D0"},"hljs-addition":{backgroundColor:"rgba(163, 190, 140, 0.5)"},"hljs-deletion":{backgroundColor:"rgba(191, 97, 106, 0.5)"},"hljs-built_in":{color:"#8FBCBB"},"hljs-type":{color:"#8FBCBB"},"hljs-class":{color:"#8FBCBB"},"hljs-function":{color:"#88C0D0"},"hljs-function > .hljs-title":{color:"#88C0D0"},"hljs-keyword":{color:"#81A1C1"},"hljs-literal":{color:"#81A1C1"},"hljs-symbol":{color:"#81A1C1"},"hljs-number":{color:"#B48EAD"},"hljs-regexp":{color:"#EBCB8B"},"hljs-string":{color:"#A3BE8C"},"hljs-title":{color:"#8FBCBB"},"hljs-params":{color:"#D8DEE9"},"hljs-bullet":{color:"#81A1C1"},"hljs-code":{color:"#8FBCBB"},"hljs-emphasis":{fontStyle:"italic"},"hljs-formula":{color:"#8FBCBB"},"hljs-strong":{fontWeight:"bold"},"hljs-link:hover":{textDecoration:"underline"},"hljs-quote":{color:"#4C566A"},"hljs-comment":{color:"#4C566A"},"hljs-doctag":{color:"#8FBCBB"},"hljs-meta":{color:"#5E81AC"},"hljs-meta-keyword":{color:"#5E81AC"},"hljs-meta-string":{color:"#A3BE8C"},"hljs-attr":{color:"#8FBCBB"},"hljs-attribute":{color:"#D8DEE9"},"hljs-builtin-name":{color:"#81A1C1"},"hljs-name":{color:"#81A1C1"},"hljs-section":{color:"#88C0D0"},"hljs-tag":{color:"#81A1C1"},"hljs-variable":{color:"#D8DEE9"},"hljs-template-variable":{color:"#D8DEE9"},"hljs-template-tag":{color:"#5E81AC"},"abnf .hljs-attribute":{color:"#88C0D0"},"abnf .hljs-symbol":{color:"#EBCB8B"},"apache .hljs-attribute":{color:"#88C0D0"},"apache .hljs-section":{color:"#81A1C1"},"arduino .hljs-built_in":{color:"#88C0D0"},"aspectj .hljs-meta":{color:"#D08770"},"aspectj > .hljs-title":{color:"#88C0D0"},"bnf .hljs-attribute":{color:"#8FBCBB"},"clojure .hljs-name":{color:"#88C0D0"},"clojure .hljs-symbol":{color:"#EBCB8B"},"coq .hljs-built_in":{color:"#88C0D0"},"cpp .hljs-meta-string":{color:"#8FBCBB"},"css .hljs-built_in":{color:"#88C0D0"},"css .hljs-keyword":{color:"#D08770"},"diff .hljs-meta":{color:"#8FBCBB"},"ebnf .hljs-attribute":{color:"#8FBCBB"},"glsl .hljs-built_in":{color:"#88C0D0"},"groovy .hljs-meta:not(:first-child)":{color:"#D08770"},"haxe .hljs-meta":{color:"#D08770"},"java .hljs-meta":{color:"#D08770"},"ldif .hljs-attribute":{color:"#8FBCBB"},"lisp .hljs-name":{color:"#88C0D0"},"lua .hljs-built_in":{color:"#88C0D0"},"moonscript .hljs-built_in":{color:"#88C0D0"},"nginx .hljs-attribute":{color:"#88C0D0"},"nginx .hljs-section":{color:"#5E81AC"},"pf .hljs-built_in":{color:"#88C0D0"},"processing .hljs-built_in":{color:"#88C0D0"},"scss .hljs-keyword":{color:"#81A1C1"},"stylus .hljs-keyword":{color:"#81A1C1"},"swift .hljs-meta":{color:"#D08770"},"vim .hljs-built_in":{color:"#88C0D0",fontStyle:"italic"},"yaml .hljs-meta":{color:"#D08770"}},HF={hljs:{display:"block",overflowX:"auto",padding:"0.5em",background:"#282b2e",color:"#e0e2e4"},"hljs-keyword":{color:"#93c763",fontWeight:"bold"},"hljs-selector-tag":{color:"#93c763",fontWeight:"bold"},"hljs-literal":{color:"#93c763",fontWeight:"bold"},"hljs-selector-id":{color:"#93c763"},"hljs-number":{color:"#ffcd22"},"hljs-attribute":{color:"#668bb0"},"hljs-code":{color:"white"},"hljs-class .hljs-title":{color:"white"},"hljs-section":{color:"white",fontWeight:"bold"},"hljs-regexp":{color:"#d39745"},"hljs-link":{color:"#d39745"},"hljs-meta":{color:"#557182"},"hljs-tag":{color:"#8cbbad"},"hljs-name":{color:"#8cbbad",fontWeight:"bold"},"hljs-bullet":{color:"#8cbbad"},"hljs-subst":{color:"#8cbbad"},"hljs-emphasis":{color:"#8cbbad"},"hljs-type":{color:"#8cbbad",fontWeight:"bold"},"hljs-built_in":{color:"#8cbbad"},"hljs-selector-attr":{color:"#8cbbad"},"hljs-selector-pseudo":{color:"#8cbbad"},"hljs-addition":{color:"#8cbbad"},"hljs-variable":{color:"#8cbbad"},"hljs-template-tag":{color:"#8cbbad"},"hljs-template-variable":{color:"#8cbbad"},"hljs-string":{color:"#ec7600"},"hljs-symbol":{color:"#ec7600"},"hljs-comment":{color:"#818e96"},"hljs-quote":{color:"#818e96"},"hljs-deletion":{color:"#818e96"},"hljs-selector-class":{color:"#A082BD"},"hljs-doctag":{fontWeight:"bold"},"hljs-title":{fontWeight:"bold"},"hljs-strong":{fontWeight:"bold"}},BF={"hljs-comment":{color:"#969896"},"hljs-quote":{color:"#969896"},"hljs-variable":{color:"#cc6666"},"hljs-template-variable":{color:"#cc6666"},"hljs-tag":{color:"#cc6666"},"hljs-name":{color:"#cc6666"},"hljs-selector-id":{color:"#cc6666"},"hljs-selector-class":{color:"#cc6666"},"hljs-regexp":{color:"#cc6666"},"hljs-deletion":{color:"#cc6666"},"hljs-number":{color:"#de935f"},"hljs-built_in":{color:"#de935f"},"hljs-builtin-name":{color:"#de935f"},"hljs-literal":{color:"#de935f"},"hljs-type":{color:"#de935f"},"hljs-params":{color:"#de935f"},"hljs-meta":{color:"#de935f"},"hljs-link":{color:"#de935f"},"hljs-attribute":{color:"#f0c674"},"hljs-string":{color:"#b5bd68"},"hljs-symbol":{color:"#b5bd68"},"hljs-bullet":{color:"#b5bd68"},"hljs-addition":{color:"#b5bd68"},"hljs-title":{color:"#81a2be"},"hljs-section":{color:"#81a2be"},"hljs-keyword":{color:"#b294bb"},"hljs-selector-tag":{color:"#b294bb"},hljs:{display:"block",overflowX:"auto",background:"#1d1f21",color:"#c5c8c6",padding:"0.5em"},"hljs-emphasis":{fontStyle:"italic"},"hljs-strong":{fontWeight:"bold"}};var UF=i(43155),YF=i(35037),jF=i.n(YF),GF=i(93890),VF=i.n(GF),ZF=i(98990),zF=i.n(ZF),WF=i(52190),JF=i.n(WF),QF=i(71166),XF=i.n(QF),KF=i(52243),qF=i.n(KF),l3=i(15805),M0=i(68645),zA=i(62734),u3=i(76593);function Zv(n){var s;return(Zv=zA?M0(s=u3).call(s):function(o){return o.__proto__||u3(o)})(n)}function eL(n,s){for(;!Object.prototype.hasOwnProperty.call(n,s)&&null!==(n=Zv(n)););return n}function lC(){var n;return lC="undefined"!=typeof Reflect&&l3?M0(n=l3).call(n):function(t,o,l){var _=eL(t,o);if(_){var C=XO(_,o);return C.get?C.get.call(arguments.length<3?t:l):C.value}},lC.apply(this,arguments)}var c3=i(54839),d3=i(73921);function PE(n,s){var t;return(PE=zA?M0(t=zA).call(t):function(l,_){return l.__proto__=_,l})(n,s)}var NE=i(69244);function f3(){if("undefined"==typeof Reflect||!NE||NE.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(NE(Boolean,[],function(){})),!0}catch(n){return!1}}function uC(n,s,t){var o;return(uC=f3()?M0(o=NE).call(o):function(_,C,R){var N=[null];N.push.apply(N,C);var Q=new(M0(Function).apply(_,N));return R&&PE(Q,R.prototype),Q}).apply(null,arguments)}function WA(n){var s="function"==typeof c3?new c3:void 0;return WA=function(o){if(null===o||!function tL(n){var s;return-1!==HA(s=Function.toString.call(n)).call(s,"[native code]")}(o))return o;if("function"!=typeof o)throw new TypeError("Super expression must either be null or a function");if(void 0!==s){if(s.has(o))return s.get(o);s.set(o,l)}function l(){return uC(o,arguments,Zv(this).constructor)}return l.prototype=d3(o.prototype,{constructor:{value:l,enumerable:!1,writable:!0,configurable:!0}}),PE(l,o)},WA(n)}var nL=i(45163),rL=i.n(nL),iL=i(30071),oL=i.n(iL),sL=i(58711),aL=i.n(sL),lL=i(15886),uL=i.n(lL),cL=i(34377),dL=i.n(cL),fL=i(28086),pL=i.n(fL),hL=i(56166),_L=i.n(hL),mL=i(10068),gL=i.n(mL),vL=i(45819),yL=i.n(vL),EL=i(84901),bL=i.n(EL),SL=i(35524),TL=i.n(SL),CL=i(71851),ML=i.n(CL),OL=i(91465),AL=i.n(OL),DL=i(37940),xL=i.n(DL),RL=i(35431),wL=i.n(RL),PL=i(46558),NL=i.n(PL),IL=i(53625),FL=i.n(IL),LL=i(31978),kL=i.n(LL),$L=i(84220),HL=i.n($L),BL=i(40984),UL=i.n(BL),YL=i(44859),jL=i.n(YL),GL=i(54082),VL=i.n(GL),ZL=i(30508),zL=i.n(ZL),WL=i(46245),JL=i.n(WL),QL=i(69605),XL=i.n(QL),KL=i(87513),qL=i.n(KL),e7=i(69253),t7=i.n(e7);function p3(n){if(void 0===n)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return n}function n7(n,s){if(!(n instanceof s))throw new TypeError("Cannot call a class as a function")}function h3(n,s){for(var t=0;t<s.length;t++){var o=s[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),bE(n,Hx(o.key),o)}}function r7(n,s,t){return s&&h3(n.prototype,s),t&&h3(n,t),bE(n,"prototype",{writable:!1}),n}function i7(n,s){var t=void 0!==Bv&&JO(n)||n["@@iterator"];if(!t){if(WO(n)||(t=GT(n))||s&&n&&"number"==typeof n.length){t&&(n=t);var o=0,l=function(){};return{s:l,n:function(){return o>=n.length?{done:!0}:{done:!1,value:n[o++]}},e:function(V){throw V},f:l}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var R,_=!0,C=!1;return{s:function(){t=t.call(n)},n:function(){var V=t.next();return _=V.done,V},e:function(V){C=!0,R=V},f:function(){try{!_&&null!=t.return&&t.return()}finally{if(C)throw R}}}}function o7(n,s){if(s&&("object"===Uv(s)||"function"==typeof s))return s;if(void 0!==s)throw new TypeError("Derived constructors may only return object or undefined");return p3(n)}function s7(n){var s=f3();return function(){var l,o=Zv(n);if(s){var _=Zv(this).constructor;l=NE(o,arguments,_)}else l=o.apply(this,arguments);return o7(this,l)}}var _3=i(95343);function JA(){var n;return JA=_3?M0(n=_3).call(n):function(s){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var l in o)Object.prototype.hasOwnProperty.call(o,l)&&(s[l]=o[l])}return s},JA.apply(this,arguments)}function a7(n,s){if("function"!=typeof s&&null!==s)throw new TypeError("Super expression must either be null or a function");n.prototype=d3(s&&s.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),bE(n,"prototype",{writable:!1}),s&&PE(n,s)}function u7(n,s){return xx(n)||function l7(n,s){var t=null==n?null:void 0!==Bv&&JO(n)||n["@@iterator"];if(null!=t){var o,l,_,C,R=[],N=!0,V=!1;try{if(_=(t=t.call(n)).next,0===s){if(Object(t)!==t)return;N=!1}else for(;!(N=(o=_.call(t)).done)&&(R.push(o.value),R.length!==s);N=!0);}catch(Q){V=!0,l=Q}finally{try{if(!N&&null!=t.return&&(C=t.return(),Object(C)!==C))return}finally{if(V)throw l}}return R}}(n,s)||GT(n,s)||Px()}function f7(n){return function c7(n){if(WO(n))return QO(n)}(n)||wx(n)||GT(n)||function d7(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var p7=i(96434),h7=i.t(p7,2),_7=i(82885),m7=i.n(_7),g7=i(12658),v7=i.t(g7,2),y7=i(55836),E7=i.n(y7),b7=i(97425),S7=i.n(b7),T7=i(76874),C7=i.n(T7),M7=i(43409),O7=i(14395),A7=i.n(O7);function m3(n,s){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(n);s&&(o=o.filter(function(l){return Object.getOwnPropertyDescriptor(n,l).enumerable})),t.push.apply(t,o)}return t}function g3(n){for(var s=1;s<arguments.length;s++){var t=null!=arguments[s]?arguments[s]:{};s%2?m3(Object(t),!0).forEach(function(o){VA(n,o,t[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):m3(Object(t)).forEach(function(o){Object.defineProperty(n,o,Object.getOwnPropertyDescriptor(t,o))})}return n}function Ip(n){return"Minified Redux error #"+n+"; visit https://redux.js.org/Errors?code="+n+" for the full message or use the non-minified dev environment for full errors. "}var cC,v3="function"==typeof Symbol&&Symbol.observable||"@@observable",QA=function(){return Math.random().toString(36).substring(7).split("").join(".")},O0={INIT:"@@redux/INIT"+QA(),REPLACE:"@@redux/REPLACE"+QA(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+QA()}};function y3(n){if("object"!=typeof n||null===n)return!1;for(var s=n;null!==Object.getPrototypeOf(s);)s=Object.getPrototypeOf(s);return Object.getPrototypeOf(n)===s}function E3(n,s,t){var o;if("function"==typeof s&&"function"==typeof t||"function"==typeof t&&"function"==typeof arguments[3])throw new Error(Ip(0));if("function"==typeof s&&void 0===t&&(t=s,s=void 0),void 0!==t){if("function"!=typeof t)throw new Error(Ip(1));return t(E3)(n,s)}if("function"!=typeof n)throw new Error(Ip(2));var l=n,_=s,C=[],R=C,N=!1;function V(){R===C&&(R=C.slice())}function Q(){if(N)throw new Error(Ip(3));return _}function oe($e){if("function"!=typeof $e)throw new Error(Ip(4));if(N)throw new Error(Ip(5));var Ie=!0;return V(),R.push($e),function(){if(Ie){if(N)throw new Error(Ip(6));Ie=!1,V();var we=R.indexOf($e);R.splice(we,1),C=null}}}function le($e){if(!y3($e))throw new Error(Ip(7));if(void 0===$e.type)throw new Error(Ip(8));if(N)throw new Error(Ip(9));try{N=!0,_=l(_,$e)}finally{N=!1}for(var Ie=C=R,ke=0;ke<Ie.length;ke++)(0,Ie[ke])();return $e}function _e($e){if("function"!=typeof $e)throw new Error(Ip(10));l=$e,le({type:O0.REPLACE})}function ye(){var $e,Ie=oe;return($e={subscribe:function(we){if("object"!=typeof we||null===we)throw new Error(Ip(11));function G(){we.next&&we.next(Q())}return G(),{unsubscribe:Ie(G)}}})[v3]=function(){return this},$e}return le({type:O0.INIT}),(o={dispatch:le,subscribe:oe,getState:Q,replaceReducer:_e})[v3]=ye,o}function b3(n,s){return function(){return s(n.apply(this,arguments))}}function N7(n,s){if("function"==typeof n)return b3(n,s);if("object"!=typeof n||null===n)throw new Error(Ip(16));var t={};for(var o in n){var l=n[o];"function"==typeof l&&(t[o]=b3(l,s))}return t}function S3(){for(var n=arguments.length,s=new Array(n),t=0;t<n;t++)s[t]=arguments[t];return 0===s.length?function(o){return o}:1===s.length?s[0]:s.reduce(function(o,l){return function(){return o(l.apply(void 0,arguments))}})}function I7(){for(var n=arguments.length,s=new Array(n),t=0;t<n;t++)s[t]=arguments[t];return function(o){return function(){var l=o.apply(void 0,arguments),_=function(){throw new Error(Ip(15))},C={getState:l.getState,dispatch:function(){return _.apply(void 0,arguments)}},R=s.map(function(N){return N(C)});return _=S3.apply(void 0,R)(l.dispatch),g3(g3({},l),{},{dispatch:_})}}}function T3(n){return(cC=cC||document.createElement("textarea")).innerHTML="&"+n+";",cC.value}var k7=Object.prototype.hasOwnProperty;function XA(n){var s=[].slice.call(arguments,1);return s.forEach(function(t){if(t){if("object"!=typeof t)throw new TypeError(t+"must be object");Object.keys(t).forEach(function(o){n[o]=t[o]})}}),n}var $7=/\\([\\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g;function A0(n){return n.indexOf("\\")<0?n:n.replace($7,"$1")}function KA(n){return!(n>=55296&&n<=57343||n>=64976&&n<=65007||65535==(65535&n)||65534==(65535&n)||n>=0&&n<=8||11===n||n>=14&&n<=31||n>=127&&n<=159||n>1114111)}function dC(n){return n>65535?(n-=65536,String.fromCharCode(55296+(n>>10),56320+(1023&n))):String.fromCharCode(n)}var H7=/&([a-z#][a-z0-9]{1,31});/gi,B7=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;function U7(n,s){var t=0,o=T3(s);return s!==o?o:35===s.charCodeAt(0)&&B7.test(s)&&KA(t="x"===s[1].toLowerCase()?parseInt(s.slice(2),16):parseInt(s.slice(1),10))?dC(t):n}function Kg(n){return n.indexOf("&")<0?n:n.replace(H7,U7)}var Y7=/[&<>"]/,j7=/[&<>"]/g,G7={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"};function V7(n){return G7[n]}function Ih(n){return Y7.test(n)?n.replace(j7,V7):n}var ea={};function M3(n,s){return++s>=n.length-2?s:"paragraph_open"===n[s].type&&n[s].tight&&"inline"===n[s+1].type&&0===n[s+1].content.length&&"paragraph_close"===n[s+2].type&&n[s+2].tight?M3(n,s+2):s}ea.blockquote_open=function(){return"<blockquote>\n"},ea.blockquote_close=function(n,s){return"</blockquote>"+zv(n,s)},ea.code=function(n,s){return n[s].block?"<pre><code>"+Ih(n[s].content)+"</code></pre>"+zv(n,s):"<code>"+Ih(n[s].content)+"</code>"},ea.fence=function(n,s,t,o,l){var V,Q,_=n[s],C="",R=t.langPrefix;if(_.params){if(Q=(V=_.params.split(/\s+/g)).join(" "),function C3(n,s){return!!n&&k7.call(n,s)}(l.rules.fence_custom,V[0]))return l.rules.fence_custom[V[0]](n,s,t,o,l);C=' class="'+R+Ih(Kg(A0(Q)))+'"'}return"<pre><code"+C+">"+(t.highlight&&t.highlight.apply(t.highlight,[_.content].concat(V))||Ih(_.content))+"</code></pre>"+zv(n,s)},ea.fence_custom={},ea.heading_open=function(n,s){return"<h"+n[s].hLevel+">"},ea.heading_close=function(n,s){return"</h"+n[s].hLevel+">\n"},ea.hr=function(n,s,t){return(t.xhtmlOut?"<hr />":"<hr>")+zv(n,s)},ea.bullet_list_open=function(){return"<ul>\n"},ea.bullet_list_close=function(n,s){return"</ul>"+zv(n,s)},ea.list_item_open=function(){return"<li>"},ea.list_item_close=function(){return"</li>\n"},ea.ordered_list_open=function(n,s){var t=n[s];return"<ol"+(t.order>1?' start="'+t.order+'"':"")+">\n"},ea.ordered_list_close=function(n,s){return"</ol>"+zv(n,s)},ea.paragraph_open=function(n,s){return n[s].tight?"":"<p>"},ea.paragraph_close=function(n,s){return(n[s].tight?"":"</p>")+(n[s].tight&&s&&"inline"===n[s-1].type&&!n[s-1].content?"":zv(n,s))},ea.link_open=function(n,s,t){var o=n[s].title?' title="'+Ih(Kg(n[s].title))+'"':"",l=t.linkTarget?' target="'+t.linkTarget+'"':"";return'<a href="'+Ih(n[s].href)+'"'+o+l+">"},ea.link_close=function(){return"</a>"},ea.image=function(n,s,t){var o=' src="'+Ih(n[s].src)+'"',l=n[s].title?' title="'+Ih(Kg(n[s].title))+'"':"";return"<img"+o+' alt="'+(n[s].alt?Ih(Kg(A0(n[s].alt))):"")+'"'+l+(t.xhtmlOut?" /":"")+">"},ea.table_open=function(){return"<table>\n"},ea.table_close=function(){return"</table>\n"},ea.thead_open=function(){return"<thead>\n"},ea.thead_close=function(){return"</thead>\n"},ea.tbody_open=function(){return"<tbody>\n"},ea.tbody_close=function(){return"</tbody>\n"},ea.tr_open=function(){return"<tr>"},ea.tr_close=function(){return"</tr>\n"},ea.th_open=function(n,s){var t=n[s];return"<th"+(t.align?' style="text-align:'+t.align+'"':"")+">"},ea.th_close=function(){return"</th>"},ea.td_open=function(n,s){var t=n[s];return"<td"+(t.align?' style="text-align:'+t.align+'"':"")+">"},ea.td_close=function(){return"</td>"},ea.strong_open=function(){return"<strong>"},ea.strong_close=function(){return"</strong>"},ea.em_open=function(){return"<em>"},ea.em_close=function(){return"</em>"},ea.del_open=function(){return"<del>"},ea.del_close=function(){return"</del>"},ea.ins_open=function(){return"<ins>"},ea.ins_close=function(){return"</ins>"},ea.mark_open=function(){return"<mark>"},ea.mark_close=function(){return"</mark>"},ea.sub=function(n,s){return"<sub>"+Ih(n[s].content)+"</sub>"},ea.sup=function(n,s){return"<sup>"+Ih(n[s].content)+"</sup>"},ea.hardbreak=function(n,s,t){return t.xhtmlOut?"<br />\n":"<br>\n"},ea.softbreak=function(n,s,t){return t.breaks?t.xhtmlOut?"<br />\n":"<br>\n":"\n"},ea.text=function(n,s){return Ih(n[s].content)},ea.htmlblock=function(n,s){return n[s].content},ea.htmltag=function(n,s){return n[s].content},ea.abbr_open=function(n,s){return'<abbr title="'+Ih(Kg(n[s].title))+'">'},ea.abbr_close=function(){return"</abbr>"},ea.footnote_ref=function(n,s){var t=Number(n[s].id+1).toString(),o="fnref"+t;return n[s].subId>0&&(o+=":"+n[s].subId),'<sup class="footnote-ref"><a href="#fn'+t+'" id="'+o+'">['+t+"]</a></sup>"},ea.footnote_block_open=function(n,s,t){return(t.xhtmlOut?'<hr class="footnotes-sep" />\n':'<hr class="footnotes-sep">\n')+'<section class="footnotes">\n<ol class="footnotes-list">\n'},ea.footnote_block_close=function(){return"</ol>\n</section>\n"},ea.footnote_open=function(n,s){return'<li id="fn'+Number(n[s].id+1).toString()+'"  class="footnote-item">'},ea.footnote_close=function(){return"</li>\n"},ea.footnote_anchor=function(n,s){var o="fnref"+Number(n[s].id+1).toString();return n[s].subId>0&&(o+=":"+n[s].subId),' <a href="#'+o+'" class="footnote-backref">\u21a9</a>'},ea.dl_open=function(){return"<dl>\n"},ea.dt_open=function(){return"<dt>"},ea.dd_open=function(){return"<dd>"},ea.dl_close=function(){return"</dl>\n"},ea.dt_close=function(){return"</dt>\n"},ea.dd_close=function(){return"</dd>\n"};var zv=ea.getBreak=function(s,t){return(t=M3(s,t))<s.length&&"list_item_close"===s[t].type?"":"\n"};function qA(){this.rules=XA({},ea),this.getBreak=ea.getBreak}function N_(){this.__rules__=[],this.__cache__=null}function Wv(n,s,t,o,l){this.src=n,this.env=o,this.options=t,this.parser=s,this.tokens=l,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache=[],this.isInLabel=!1,this.linkLevel=0,this.linkContent="",this.labelUnmatchedScopes=0}function IE(n,s){var t,o,l,_=-1,C=n.posMax,R=n.pos,N=n.isInLabel;if(n.isInLabel)return-1;if(n.labelUnmatchedScopes)return n.labelUnmatchedScopes--,-1;for(n.pos=s+1,n.isInLabel=!0,t=1;n.pos<C;){if(91===(l=n.src.charCodeAt(n.pos)))t++;else if(93===l&&0==--t){o=!0;break}n.parser.skipToken(n)}return o?(_=n.pos,n.labelUnmatchedScopes=0):n.labelUnmatchedScopes=t-1,n.pos=R,n.isInLabel=N,_}function z7(n,s,t,o){var l,_,C,R,N,V;if(42!==n.charCodeAt(0)||91!==n.charCodeAt(1)||-1===n.indexOf("]:")||(_=IE(l=new Wv(n,s,t,o,[]),1))<0||58!==n.charCodeAt(_+1))return-1;for(R=l.posMax,C=_+2;C<R&&10!==l.src.charCodeAt(C);C++);return N=n.slice(2,_),0===(V=n.slice(_+2,C).trim()).length?-1:(o.abbreviations||(o.abbreviations={}),void 0===o.abbreviations[":"+N]&&(o.abbreviations[":"+N]=V),C)}function eD(n){var s=Kg(n);try{s=decodeURI(s)}catch(t){}return encodeURI(s)}function O3(n,s){var t,o,l,_=s,C=n.posMax;if(60===n.src.charCodeAt(s)){for(s++;s<C;){if(10===(t=n.src.charCodeAt(s)))return!1;if(62===t)return l=eD(A0(n.src.slice(_+1,s))),!!n.parser.validateLink(l)&&(n.pos=s+1,n.linkContent=l,!0);92===t&&s+1<C?s+=2:s++}return!1}for(o=0;s<C&&!(32===(t=n.src.charCodeAt(s))||t<32||127===t);)if(92===t&&s+1<C)s+=2;else{if(40===t&&++o>1||41===t&&--o<0)break;s++}return!(_===s||(l=A0(n.src.slice(_,s)),!n.parser.validateLink(l))||(n.linkContent=l,n.pos=s,0))}function A3(n,s){var t,o=s,l=n.posMax,_=n.src.charCodeAt(s);if(34!==_&&39!==_&&40!==_)return!1;for(s++,40===_&&(_=41);s<l;){if((t=n.src.charCodeAt(s))===_)return n.pos=s+1,n.linkContent=A0(n.src.slice(o+1,s)),!0;92===t&&s+1<l?s+=2:s++}return!1}function D3(n){return n.trim().replace(/\s+/g," ").toUpperCase()}function J7(n,s,t,o){var l,_,C,R,N,V,Q,oe,le;if(91!==n.charCodeAt(0)||-1===n.indexOf("]:")||(_=IE(l=new Wv(n,s,t,o,[]),0))<0||58!==n.charCodeAt(_+1))return-1;for(R=l.posMax,C=_+2;C<R&&(32===(N=l.src.charCodeAt(C))||10===N);C++);if(!O3(l,C))return-1;for(Q=l.linkContent,V=C=l.pos,C+=1;C<R&&(32===(N=l.src.charCodeAt(C))||10===N);C++);for(C<R&&V!==C&&A3(l,C)?(oe=l.linkContent,C=l.pos):(oe="",C=V);C<R&&32===l.src.charCodeAt(C);)C++;return C<R&&10!==l.src.charCodeAt(C)?-1:(le=D3(n.slice(1,_)),void 0===o.references[le]&&(o.references[le]={title:oe,href:Q}),C)}qA.prototype.renderInline=function(n,s,t){for(var o=this.rules,l=n.length,_=0,C="";l--;)C+=o[n[_].type](n,_++,s,t,this);return C},qA.prototype.render=function(n,s,t){for(var o=this.rules,l=n.length,_=-1,C="";++_<l;)C+="inline"===n[_].type?this.renderInline(n[_].children,s,t):o[n[_].type](n,_,s,t,this);return C},N_.prototype.__find__=function(n){for(var s=this.__rules__.length,t=-1;s--;)if(this.__rules__[++t].name===n)return t;return-1},N_.prototype.__compile__=function(){var n=this,s=[""];n.__rules__.forEach(function(t){!t.enabled||t.alt.forEach(function(o){s.indexOf(o)<0&&s.push(o)})}),n.__cache__={},s.forEach(function(t){n.__cache__[t]=[],n.__rules__.forEach(function(o){!o.enabled||t&&o.alt.indexOf(t)<0||n.__cache__[t].push(o.fn)})})},N_.prototype.at=function(n,s,t){var o=this.__find__(n),l=t||{};if(-1===o)throw new Error("Parser rule not found: "+n);this.__rules__[o].fn=s,this.__rules__[o].alt=l.alt||[],this.__cache__=null},N_.prototype.before=function(n,s,t,o){var l=this.__find__(n),_=o||{};if(-1===l)throw new Error("Parser rule not found: "+n);this.__rules__.splice(l,0,{name:s,enabled:!0,fn:t,alt:_.alt||[]}),this.__cache__=null},N_.prototype.after=function(n,s,t,o){var l=this.__find__(n),_=o||{};if(-1===l)throw new Error("Parser rule not found: "+n);this.__rules__.splice(l+1,0,{name:s,enabled:!0,fn:t,alt:_.alt||[]}),this.__cache__=null},N_.prototype.push=function(n,s,t){this.__rules__.push({name:n,enabled:!0,fn:s,alt:(t||{}).alt||[]}),this.__cache__=null},N_.prototype.enable=function(n,s){n=Array.isArray(n)?n:[n],s&&this.__rules__.forEach(function(t){t.enabled=!1}),n.forEach(function(t){var o=this.__find__(t);if(o<0)throw new Error("Rules manager: invalid rule name "+t);this.__rules__[o].enabled=!0},this),this.__cache__=null},N_.prototype.disable=function(n){(n=Array.isArray(n)?n:[n]).forEach(function(s){var t=this.__find__(s);if(t<0)throw new Error("Rules manager: invalid rule name "+s);this.__rules__[t].enabled=!1},this),this.__cache__=null},N_.prototype.getRules=function(n){return null===this.__cache__&&this.__compile__(),this.__cache__[n]||[]},Wv.prototype.pushPending=function(){this.tokens.push({type:"text",content:this.pending,level:this.pendingLevel}),this.pending=""},Wv.prototype.push=function(n){this.pending&&this.pushPending(),this.tokens.push(n),this.pendingLevel=this.level},Wv.prototype.cacheSet=function(n,s){for(var t=this.cache.length;t<=n;t++)this.cache.push(0);this.cache[n]=s},Wv.prototype.cacheGet=function(n){return n<this.cache.length?this.cache[n]:0};var x3=" \n()[]'\".,!?-";function tD(n){return n.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1")}var e9=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,t9=/\((c|tm|r|p)\)/gi,n9={c:"\xa9",r:"\xae",p:"\xa7",tm:"\u2122"};function r9(n){return n.indexOf("(")<0?n:n.replace(t9,function(s,t){return n9[t.toLowerCase()]})}var o9=/['"]/,R3=/['"]/g,s9=/[-\s()\[\]]/;function P3(n,s){return!(s<0||s>=n.length||s9.test(n[s]))}function D0(n,s,t){return n.substr(0,s)+t+n.substr(s+1)}var nD=[["block",function Z7(n){n.inlineMode?n.tokens.push({type:"inline",content:n.src.replace(/\n/g," ").trim(),level:0,lines:[0,1],children:[]}):n.block.parse(n.src,n.options,n.env,n.tokens)}],["abbr",function W7(n){var t,o,l,_,s=n.tokens;if(!n.inlineMode)for(t=1,o=s.length-1;t<o;t++)if("paragraph_open"===s[t-1].type&&"inline"===s[t].type&&"paragraph_close"===s[t+1].type){for(l=s[t].content;l.length&&!((_=z7(l,n.inline,n.options,n.env))<0);)l=l.slice(_).trim();s[t].content=l,l.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],["references",function Q7(n){var t,o,l,_,s=n.tokens;if(n.env.references=n.env.references||{},!n.inlineMode)for(t=1,o=s.length-1;t<o;t++)if("inline"===s[t].type&&"paragraph_open"===s[t-1].type&&"paragraph_close"===s[t+1].type){for(l=s[t].content;l.length&&!((_=J7(l,n.inline,n.options,n.env))<0);)l=l.slice(_).trim();s[t].content=l,l.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],["inline",function X7(n){var t,o,l,s=n.tokens;for(o=0,l=s.length;o<l;o++)"inline"===(t=s[o]).type&&n.inline.parse(t.content,n.options,n.env,t.children)}],["footnote_tail",function K7(n){var s,t,o,l,_,C,R,N,V,Q=0,oe=!1,le={};if(n.env.footnotes&&(n.tokens=n.tokens.filter(function(_e){return"footnote_reference_open"===_e.type?(oe=!0,N=[],V=_e.label,!1):"footnote_reference_close"===_e.type?(oe=!1,le[":"+V]=N,!1):(oe&&N.push(_e),!oe)}),n.env.footnotes.list)){for(C=n.env.footnotes.list,n.tokens.push({type:"footnote_block_open",level:Q++}),s=0,t=C.length;s<t;s++){for(n.tokens.push({type:"footnote_open",id:s,level:Q++}),C[s].tokens?((R=[]).push({type:"paragraph_open",tight:!1,level:Q++}),R.push({type:"inline",content:"",level:Q,children:C[s].tokens}),R.push({type:"paragraph_close",tight:!1,level:--Q})):C[s].label&&(R=le[":"+C[s].label]),n.tokens=n.tokens.concat(R),_="paragraph_close"===n.tokens[n.tokens.length-1].type?n.tokens.pop():null,l=C[s].count>0?C[s].count:1,o=0;o<l;o++)n.tokens.push({type:"footnote_anchor",id:s,subId:o,level:Q});_&&n.tokens.push(_),n.tokens.push({type:"footnote_close",level:--Q})}n.tokens.push({type:"footnote_block_close",level:--Q})}}],["abbr2",function q7(n){var s,t,o,l,_,C,R,N,V,Q,oe,le,_e=n.tokens;if(n.env.abbreviations)for(n.env.abbrRegExp||(le="(^|["+x3.split("").map(tD).join("")+"])("+Object.keys(n.env.abbreviations).map(function(ye){return ye.substr(1)}).sort(function(ye,$e){return $e.length-ye.length}).map(tD).join("|")+")($|["+x3.split("").map(tD).join("")+"])",n.env.abbrRegExp=new RegExp(le,"g")),Q=n.env.abbrRegExp,t=0,o=_e.length;t<o;t++)if("inline"===_e[t].type)for(s=(l=_e[t].children).length-1;s>=0;s--)if("text"===(_=l[s]).type){for(N=0,C=_.content,Q.lastIndex=0,V=_.level,R=[];oe=Q.exec(C);)Q.lastIndex>N&&R.push({type:"text",content:C.slice(N,oe.index+oe[1].length),level:V}),R.push({type:"abbr_open",title:n.env.abbreviations[":"+oe[2]],level:V++}),R.push({type:"text",content:oe[2],level:V}),R.push({type:"abbr_close",level:--V}),N=Q.lastIndex-oe[3].length;!R.length||(N<C.length&&R.push({type:"text",content:C.slice(N),level:V}),_e[t].children=l=[].concat(l.slice(0,s),R,l.slice(s+1)))}}],["replacements",function i9(n){var s,t,o,l,_;if(n.options.typographer)for(_=n.tokens.length-1;_>=0;_--)if("inline"===n.tokens[_].type)for(s=(l=n.tokens[_].children).length-1;s>=0;s--)"text"===(t=l[s]).type&&(o=r9(o=t.content),e9.test(o)&&(o=o.replace(/\+-/g,"\xb1").replace(/\.{2,}/g,"\u2026").replace(/([?!])\u2026/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1\u2014$2").replace(/(^|\s)--(\s|$)/gm,"$1\u2013$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1\u2013$2")),t.content=o)}],["smartquotes",function a9(n){var s,t,o,l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke;if(n.options.typographer)for(ke=[],$e=n.tokens.length-1;$e>=0;$e--)if("inline"===n.tokens[$e].type)for(Ie=n.tokens[$e].children,ke.length=0,s=0;s<Ie.length;s++)if("text"===(t=Ie[s]).type&&!o9.test(t.text)){for(R=Ie[s].level,_e=ke.length-1;_e>=0&&!(ke[_e].level<=R);_e--);ke.length=_e+1,_=0,C=(o=t.content).length;e:for(;_<C&&(R3.lastIndex=_,l=R3.exec(o),l);)if(N=!P3(o,l.index-1),ye="'"===l[0],(V=!P3(o,_=l.index+1))||N){if(oe=!V,le=!N)for(_e=ke.length-1;_e>=0&&(Q=ke[_e],!(ke[_e].level<R));_e--)if(Q.single===ye&&ke[_e].level===R){Q=ke[_e],ye?(Ie[Q.token].content=D0(Ie[Q.token].content,Q.pos,n.options.quotes[2]),t.content=D0(t.content,l.index,n.options.quotes[3])):(Ie[Q.token].content=D0(Ie[Q.token].content,Q.pos,n.options.quotes[0]),t.content=D0(t.content,l.index,n.options.quotes[1])),ke.length=_e;continue e}oe?ke.push({token:s,pos:l.index,single:ye,level:R}):le&&ye&&(t.content=D0(t.content,l.index,"\u2019"))}else ye&&(t.content=D0(t.content,l.index,"\u2019"))}}]];function N3(){this.options={},this.ruler=new N_;for(var n=0;n<nD.length;n++)this.ruler.push(nD[n][0],nD[n][1])}function Jv(n,s,t,o,l){var _,C,R,N,V,Q,oe;for(this.src=n,this.parser=s,this.options=t,this.env=o,this.tokens=l,this.bMarks=[],this.eMarks=[],this.tShift=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.parentType="root",this.ddIndent=-1,this.level=0,this.result="",Q=0,oe=!1,R=N=Q=0,V=(C=this.src).length;N<V;N++){if(_=C.charCodeAt(N),!oe){if(32===_){Q++;continue}oe=!0}(10===_||N===V-1)&&(10!==_&&N++,this.bMarks.push(R),this.eMarks.push(N),this.tShift.push(Q),oe=!1,Q=0,R=N+1)}this.bMarks.push(C.length),this.eMarks.push(C.length),this.tShift.push(0),this.lineMax=this.bMarks.length-1}function I3(n,s){var t,o,l;return(o=n.bMarks[s]+n.tShift[s])>=(l=n.eMarks[s])||42!==(t=n.src.charCodeAt(o++))&&45!==t&&43!==t||o<l&&32!==n.src.charCodeAt(o)?-1:o}function F3(n,s){var t,o=n.bMarks[s]+n.tShift[s],l=n.eMarks[s];if(o+1>=l||(t=n.src.charCodeAt(o++))<48||t>57)return-1;for(;;){if(o>=l)return-1;if(!((t=n.src.charCodeAt(o++))>=48&&t<=57)){if(41===t||46===t)break;return-1}}return o<l&&32!==n.src.charCodeAt(o)?-1:o}N3.prototype.process=function(n){var s,t,o;for(s=0,t=(o=this.ruler.getRules("")).length;s<t;s++)o[s](n)},Jv.prototype.isEmpty=function(s){return this.bMarks[s]+this.tShift[s]>=this.eMarks[s]},Jv.prototype.skipEmptyLines=function(s){for(var t=this.lineMax;s<t&&!(this.bMarks[s]+this.tShift[s]<this.eMarks[s]);s++);return s},Jv.prototype.skipSpaces=function(s){for(var t=this.src.length;s<t&&32===this.src.charCodeAt(s);s++);return s},Jv.prototype.skipChars=function(s,t){for(var o=this.src.length;s<o&&this.src.charCodeAt(s)===t;s++);return s},Jv.prototype.skipCharsBack=function(s,t,o){if(s<=o)return s;for(;s>o;)if(t!==this.src.charCodeAt(--s))return s+1;return s},Jv.prototype.getLines=function(s,t,o,l){var _,C,N,V,Q=s;if(s>=t)return"";if(Q+1===t)return C=this.bMarks[Q]+Math.min(this.tShift[Q],o),this.src.slice(C,l?this.eMarks[Q]+1:this.eMarks[Q]);for(N=new Array(t-s),_=0;Q<t;Q++,_++)(V=this.tShift[Q])>o&&(V=o),V<0&&(V=0),N[_]=this.src.slice(C=this.bMarks[Q]+V,Q+1<t||l?this.eMarks[Q]+1:this.eMarks[Q]);return N.join("")};var L3={};["article","aside","button","blockquote","body","canvas","caption","col","colgroup","dd","div","dl","dt","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","iframe","li","map","object","ol","output","p","pre","progress","script","section","style","table","tbody","td","textarea","tfoot","th","tr","thead","ul","video"].forEach(function(n){L3[n]=!0});var g9=/^<([a-zA-Z]{1,15})[\s\/>]/,v9=/^<\/([a-zA-Z]{1,15})[\s>]/;function rD(n,s){var t=n.bMarks[s]+n.blkIndent;return n.src.substr(t,n.eMarks[s]-t)}function fC(n,s){var t,o,l=n.bMarks[s]+n.tShift[s],_=n.eMarks[s];return l>=_||126!==(o=n.src.charCodeAt(l++))&&58!==o||l===(t=n.skipSpaces(l))||t>=_?-1:t}var pC=[["code",function l9(n,s,t){var o,l;if(n.tShift[s]-n.blkIndent<4)return!1;for(l=o=s+1;o<t;)if(n.isEmpty(o))o++;else{if(!(n.tShift[o]-n.blkIndent>=4))break;l=++o}return n.line=o,n.tokens.push({type:"code",content:n.getLines(s,l,4+n.blkIndent,!0),block:!0,lines:[s,n.line],level:n.level}),!0}],["fences",function u9(n,s,t,o){var l,_,C,R,N,V=!1,Q=n.bMarks[s]+n.tShift[s],oe=n.eMarks[s];if(Q+3>oe||126!==(l=n.src.charCodeAt(Q))&&96!==l||(N=Q,(_=(Q=n.skipChars(Q,l))-N)<3)||(C=n.src.slice(Q,oe).trim()).indexOf("`")>=0)return!1;if(o)return!0;for(R=s;!(++R>=t||(Q=N=n.bMarks[R]+n.tShift[R],oe=n.eMarks[R],Q<oe&&n.tShift[R]<n.blkIndent));)if(!(n.src.charCodeAt(Q)!==l||n.tShift[R]-n.blkIndent>=4||(Q=n.skipChars(Q,l),Q-N<_||(Q=n.skipSpaces(Q),Q<oe)))){V=!0;break}return _=n.tShift[s],n.line=R+(V?1:0),n.tokens.push({type:"fence",params:C,content:n.getLines(s+1,R,_,!0),lines:[s,n.line],level:n.level}),!0},["paragraph","blockquote","list"]],["blockquote",function c9(n,s,t,o){var l,_,C,R,N,V,Q,oe,le,_e,ye,$e=n.bMarks[s]+n.tShift[s],Ie=n.eMarks[s];if($e>Ie||62!==n.src.charCodeAt($e++)||n.level>=n.options.maxNesting)return!1;if(o)return!0;for(32===n.src.charCodeAt($e)&&$e++,N=n.blkIndent,n.blkIndent=0,R=[n.bMarks[s]],n.bMarks[s]=$e,_=($e=$e<Ie?n.skipSpaces($e):$e)>=Ie,C=[n.tShift[s]],n.tShift[s]=$e-n.bMarks[s],oe=n.parser.ruler.getRules("blockquote"),l=s+1;l<t&&!(($e=n.bMarks[l]+n.tShift[l])>=(Ie=n.eMarks[l]));l++)if(62!==n.src.charCodeAt($e++)){if(_)break;for(ye=!1,le=0,_e=oe.length;le<_e;le++)if(oe[le](n,l,t,!0)){ye=!0;break}if(ye)break;R.push(n.bMarks[l]),C.push(n.tShift[l]),n.tShift[l]=-1337}else 32===n.src.charCodeAt($e)&&$e++,R.push(n.bMarks[l]),n.bMarks[l]=$e,_=($e=$e<Ie?n.skipSpaces($e):$e)>=Ie,C.push(n.tShift[l]),n.tShift[l]=$e-n.bMarks[l];for(V=n.parentType,n.parentType="blockquote",n.tokens.push({type:"blockquote_open",lines:Q=[s,0],level:n.level++}),n.parser.tokenize(n,s,l),n.tokens.push({type:"blockquote_close",level:--n.level}),n.parentType=V,Q[1]=n.line,le=0;le<C.length;le++)n.bMarks[le+s]=R[le],n.tShift[le+s]=C[le];return n.blkIndent=N,!0},["paragraph","blockquote","list"]],["hr",function d9(n,s,t,o){var l,_,C,R=n.bMarks[s],N=n.eMarks[s];if((R+=n.tShift[s])>N||42!==(l=n.src.charCodeAt(R++))&&45!==l&&95!==l)return!1;for(_=1;R<N;){if((C=n.src.charCodeAt(R++))!==l&&32!==C)return!1;C===l&&_++}return!(_<3||(o||(n.line=s+1,n.tokens.push({type:"hr",lines:[s,n.line],level:n.level})),0))},["paragraph","blockquote","list"]],["list",function p9(n,s,t,o){var l,_,C,R,N,V,Q,oe,_e,ye,$e,Ie,ke,we,G,Dt,bt,Jt,Mn,zt,xn,Bt=!0;if((oe=F3(n,s))>=0)Ie=!0;else{if(!((oe=I3(n,s))>=0))return!1;Ie=!1}if(n.level>=n.options.maxNesting)return!1;if($e=n.src.charCodeAt(oe-1),o)return!0;for(we=n.tokens.length,Ie?(Q=n.bMarks[s]+n.tShift[s],ye=Number(n.src.substr(Q,oe-Q-1)),n.tokens.push({type:"ordered_list_open",order:ye,lines:Dt=[s,0],level:n.level++})):n.tokens.push({type:"bullet_list_open",lines:Dt=[s,0],level:n.level++}),l=s,G=!1,Jt=n.parser.ruler.getRules("list");l<t&&((_e=(ke=n.skipSpaces(oe))>=n.eMarks[l]?1:ke-oe)>4&&(_e=1),_e<1&&(_e=1),_=oe-n.bMarks[l]+_e,n.tokens.push({type:"list_item_open",lines:bt=[s,0],level:n.level++}),R=n.blkIndent,N=n.tight,C=n.tShift[s],V=n.parentType,n.tShift[s]=ke-n.bMarks[s],n.blkIndent=_,n.tight=!0,n.parentType="list",n.parser.tokenize(n,s,t,!0),(!n.tight||G)&&(Bt=!1),G=n.line-s>1&&n.isEmpty(n.line-1),n.blkIndent=R,n.tShift[s]=C,n.tight=N,n.parentType=V,n.tokens.push({type:"list_item_close",level:--n.level}),l=s=n.line,bt[1]=l,ke=n.bMarks[s],!(l>=t||n.isEmpty(l)||n.tShift[l]<n.blkIndent));){for(xn=!1,Mn=0,zt=Jt.length;Mn<zt;Mn++)if(Jt[Mn](n,l,t,!0)){xn=!0;break}if(xn)break;if(Ie){if((oe=F3(n,l))<0)break}else if((oe=I3(n,l))<0)break;if($e!==n.src.charCodeAt(oe-1))break}return n.tokens.push({type:Ie?"ordered_list_close":"bullet_list_close",level:--n.level}),Dt[1]=l,n.line=l,Bt&&function f9(n,s){var t,o,l=n.level+2;for(t=s+2,o=n.tokens.length-2;t<o;t++)n.tokens[t].level===l&&"paragraph_open"===n.tokens[t].type&&(n.tokens[t+2].tight=!0,n.tokens[t].tight=!0,t+=2)}(n,we),!0},["paragraph","blockquote"]],["footnote",function h9(n,s,t,o){var l,_,C,R,N,V=n.bMarks[s]+n.tShift[s],Q=n.eMarks[s];if(V+4>Q||91!==n.src.charCodeAt(V)||94!==n.src.charCodeAt(V+1)||n.level>=n.options.maxNesting)return!1;for(R=V+2;R<Q;R++){if(32===n.src.charCodeAt(R))return!1;if(93===n.src.charCodeAt(R))break}return!(R===V+2||R+1>=Q||58!==n.src.charCodeAt(++R)||(o||(R++,n.env.footnotes||(n.env.footnotes={}),n.env.footnotes.refs||(n.env.footnotes.refs={}),N=n.src.slice(V+2,R-2),n.env.footnotes.refs[":"+N]=-1,n.tokens.push({type:"footnote_reference_open",label:N,level:n.level++}),l=n.bMarks[s],_=n.tShift[s],C=n.parentType,n.tShift[s]=n.skipSpaces(R)-R,n.bMarks[s]=R,n.blkIndent+=4,n.parentType="footnote",n.tShift[s]<n.blkIndent&&(n.tShift[s]+=n.blkIndent,n.bMarks[s]-=n.blkIndent),n.parser.tokenize(n,s,t,!0),n.parentType=C,n.blkIndent-=4,n.tShift[s]=_,n.bMarks[s]=l,n.tokens.push({type:"footnote_reference_close",level:--n.level})),0))},["paragraph"]],["heading",function _9(n,s,t,o){var l,_,C,R=n.bMarks[s]+n.tShift[s],N=n.eMarks[s];if(R>=N||35!==(l=n.src.charCodeAt(R))||R>=N)return!1;for(_=1,l=n.src.charCodeAt(++R);35===l&&R<N&&_<=6;)_++,l=n.src.charCodeAt(++R);return!(_>6||R<N&&32!==l||(o||(N=n.skipCharsBack(N,32,R),(C=n.skipCharsBack(N,35,R))>R&&32===n.src.charCodeAt(C-1)&&(N=C),n.line=s+1,n.tokens.push({type:"heading_open",hLevel:_,lines:[s,n.line],level:n.level}),R<N&&n.tokens.push({type:"inline",content:n.src.slice(R,N).trim(),level:n.level+1,lines:[s,n.line],children:[]}),n.tokens.push({type:"heading_close",hLevel:_,level:n.level})),0))},["paragraph","blockquote"]],["lheading",function m9(n,s,t){var o,l,_,C=s+1;return!(C>=t||n.tShift[C]<n.blkIndent||n.tShift[C]-n.blkIndent>3||(l=n.bMarks[C]+n.tShift[C],_=n.eMarks[C],l>=_)||(o=n.src.charCodeAt(l),45!==o&&61!==o)||(l=n.skipChars(l,o),l=n.skipSpaces(l),l<_)||(l=n.bMarks[s]+n.tShift[s],n.line=C+1,n.tokens.push({type:"heading_open",hLevel:61===o?1:2,lines:[s,n.line],level:n.level}),n.tokens.push({type:"inline",content:n.src.slice(l,n.eMarks[s]).trim(),level:n.level+1,lines:[s,n.line-1],children:[]}),n.tokens.push({type:"heading_close",hLevel:61===o?1:2,level:n.level}),0))}],["htmlblock",function E9(n,s,t,o){var l,_,C,R=n.bMarks[s],N=n.eMarks[s],V=n.tShift[s];if(R+=V,!n.options.html||V>3||R+2>=N||60!==n.src.charCodeAt(R))return!1;if(33===(l=n.src.charCodeAt(R+1))||63===l){if(o)return!0}else{if(47!==l&&!function y9(n){var s=32|n;return s>=97&&s<=122}(l))return!1;if(47===l){if(!(_=n.src.slice(R,N).match(v9)))return!1}else if(!(_=n.src.slice(R,N).match(g9)))return!1;if(!0!==L3[_[1].toLowerCase()])return!1;if(o)return!0}for(C=s+1;C<n.lineMax&&!n.isEmpty(C);)C++;return n.line=C,n.tokens.push({type:"htmlblock",level:n.level,lines:[s,n.line],content:n.getLines(s,C,0,!0)}),!0},["paragraph","blockquote"]],["table",function b9(n,s,t,o){var l,_,C,R,N,V,Q,oe,le,_e,ye;if(s+2>t||n.tShift[N=s+1]<n.blkIndent||(C=n.bMarks[N]+n.tShift[N])>=n.eMarks[N]||124!==(l=n.src.charCodeAt(C))&&45!==l&&58!==l||(_=rD(n,s+1),!/^[-:| ]+$/.test(_))||(V=_.split("|"))<=2)return!1;for(oe=[],R=0;R<V.length;R++){if(!(le=V[R].trim())){if(0===R||R===V.length-1)continue;return!1}if(!/^:?-+:?$/.test(le))return!1;58===le.charCodeAt(le.length-1)?oe.push(58===le.charCodeAt(0)?"center":"right"):58===le.charCodeAt(0)?oe.push("left"):oe.push("")}if(-1===(_=rD(n,s).trim()).indexOf("|")||(V=_.replace(/^\||\|$/g,"").split("|"),oe.length!==V.length))return!1;if(o)return!0;for(n.tokens.push({type:"table_open",lines:_e=[s,0],level:n.level++}),n.tokens.push({type:"thead_open",lines:[s,s+1],level:n.level++}),n.tokens.push({type:"tr_open",lines:[s,s+1],level:n.level++}),R=0;R<V.length;R++)n.tokens.push({type:"th_open",align:oe[R],lines:[s,s+1],level:n.level++}),n.tokens.push({type:"inline",content:V[R].trim(),lines:[s,s+1],level:n.level,children:[]}),n.tokens.push({type:"th_close",level:--n.level});for(n.tokens.push({type:"tr_close",level:--n.level}),n.tokens.push({type:"thead_close",level:--n.level}),n.tokens.push({type:"tbody_open",lines:ye=[s+2,0],level:n.level++}),N=s+2;N<t&&!(n.tShift[N]<n.blkIndent||(_=rD(n,N).trim(),-1===_.indexOf("|")));N++){for(V=_.replace(/^\||\|$/g,"").split("|"),n.tokens.push({type:"tr_open",level:n.level++}),R=0;R<V.length;R++)n.tokens.push({type:"td_open",align:oe[R],level:n.level++}),Q=V[R].substring(124===V[R].charCodeAt(0)?1:0,124===V[R].charCodeAt(V[R].length-1)?V[R].length-1:V[R].length).trim(),n.tokens.push({type:"inline",content:Q,level:n.level,children:[]}),n.tokens.push({type:"td_close",level:--n.level});n.tokens.push({type:"tr_close",level:--n.level})}return n.tokens.push({type:"tbody_close",level:--n.level}),n.tokens.push({type:"table_close",level:--n.level}),_e[1]=ye[1]=N,n.line=N,!0},["paragraph"]],["deflist",function T9(n,s,t,o){var l,_,C,R,N,V,Q,oe,le,_e,ye,$e,Ie,ke;if(o)return!(n.ddIndent<0)&&fC(n,s)>=0;if(n.isEmpty(Q=s+1)&&++Q>t||n.tShift[Q]<n.blkIndent||(l=fC(n,Q))<0||n.level>=n.options.maxNesting)return!1;V=n.tokens.length,n.tokens.push({type:"dl_open",lines:N=[s,0],level:n.level++}),C=s,_=Q;e:for(;;){for(ke=!0,Ie=!1,n.tokens.push({type:"dt_open",lines:[C,C],level:n.level++}),n.tokens.push({type:"inline",content:n.getLines(C,C+1,n.blkIndent,!1).trim(),level:n.level+1,lines:[C,C],children:[]}),n.tokens.push({type:"dt_close",level:--n.level});;){if(n.tokens.push({type:"dd_open",lines:R=[Q,0],level:n.level++}),$e=n.tight,le=n.ddIndent,oe=n.blkIndent,ye=n.tShift[_],_e=n.parentType,n.blkIndent=n.ddIndent=n.tShift[_]+2,n.tShift[_]=l-n.bMarks[_],n.tight=!0,n.parentType="deflist",n.parser.tokenize(n,_,t,!0),(!n.tight||Ie)&&(ke=!1),Ie=n.line-_>1&&n.isEmpty(n.line-1),n.tShift[_]=ye,n.tight=$e,n.parentType=_e,n.blkIndent=oe,n.ddIndent=le,n.tokens.push({type:"dd_close",level:--n.level}),R[1]=Q=n.line,Q>=t||n.tShift[Q]<n.blkIndent)break e;if((l=fC(n,Q))<0)break;_=Q}if(Q>=t||n.isEmpty(C=Q)||n.tShift[C]<n.blkIndent||(_=C+1)>=t||(n.isEmpty(_)&&_++,_>=t)||n.tShift[_]<n.blkIndent||(l=fC(n,_))<0)break}return n.tokens.push({type:"dl_close",level:--n.level}),N[1]=Q,n.line=Q,ke&&function S9(n,s){var t,o,l=n.level+2;for(t=s+2,o=n.tokens.length-2;t<o;t++)n.tokens[t].level===l&&"paragraph_open"===n.tokens[t].type&&(n.tokens[t+2].tight=!0,n.tokens[t].tight=!0,t+=2)}(n,V),!0},["paragraph"]],["paragraph",function C9(n,s){var t,o,l,_,C,N,R=s+1;if(R<(t=n.lineMax)&&!n.isEmpty(R))for(N=n.parser.ruler.getRules("paragraph");R<t&&!n.isEmpty(R);R++)if(!(n.tShift[R]-n.blkIndent>3)){for(l=!1,_=0,C=N.length;_<C;_++)if(N[_](n,R,t,!0)){l=!0;break}if(l)break}return o=n.getLines(s,R,n.blkIndent,!1).trim(),n.line=R,o.length&&(n.tokens.push({type:"paragraph_open",tight:!1,lines:[s,n.line],level:n.level}),n.tokens.push({type:"inline",content:o,level:n.level+1,lines:[s,n.line],children:[]}),n.tokens.push({type:"paragraph_close",tight:!1,level:n.level})),!0}]];function iD(){this.ruler=new N_;for(var n=0;n<pC.length;n++)this.ruler.push(pC[n][0],pC[n][1],{alt:(pC[n][2]||[]).slice()})}iD.prototype.tokenize=function(n,s,t){for(var N,o=this.ruler.getRules(""),l=o.length,_=s,C=!1;_<t&&(n.line=_=n.skipEmptyLines(_),!(_>=t||n.tShift[_]<n.blkIndent));){for(N=0;N<l&&!o[N](n,_,t,!1);N++);if(n.tight=!C,n.isEmpty(n.line-1)&&(C=!0),(_=n.line)<t&&n.isEmpty(_)){if(C=!0,++_<t&&"list"===n.parentType&&n.isEmpty(_))break;n.line=_}}};var M9=/[\n\t]/g,O9=/\r[\n\u0085]|[\u2424\u2028\u0085]/g,A9=/\u00a0/g;function D9(n){switch(n){case 10:case 92:case 96:case 42:case 95:case 94:case 91:case 93:case 33:case 38:case 60:case 62:case 123:case 125:case 36:case 37:case 64:case 126:case 43:case 61:case 58:return!0;default:return!1}}iD.prototype.parse=function(n,s,t,o){var l,_=0,C=0;if(!n)return[];(n=(n=n.replace(A9," ")).replace(O9,"\n")).indexOf("\t")>=0&&(n=n.replace(M9,function(R,N){var V;return 10===n.charCodeAt(N)?(_=N+1,C=0,R):(V="    ".slice((N-_-C)%4),C=N-_+1,V)})),l=new Jv(n,this,s,t,o),this.tokenize(l,l.line,l.lineMax)};for(var oD=[],k3=0;k3<256;k3++)oD.push(0);function $3(n){return n>=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122}function H3(n,s){var o,l,_,t=s,C=!0,R=!0,N=n.posMax,V=n.src.charCodeAt(s);for(o=s>0?n.src.charCodeAt(s-1):-1;t<N&&n.src.charCodeAt(t)===V;)t++;return t>=N&&(C=!1),(_=t-s)>=4?C=R=!1:((32===(l=t<N?n.src.charCodeAt(t):-1)||10===l)&&(C=!1),(32===o||10===o)&&(R=!1),95===V&&($3(o)&&(C=!1),$3(l)&&(R=!1))),{can_open:C,can_close:R,delims:_}}"\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(n){oD[n.charCodeAt(0)]=1});var k9=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g,H9=/\\([ \\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g,G9=["coap","doi","javascript","aaa","aaas","about","acap","cap","cid","crid","data","dav","dict","dns","file","ftp","geo","go","gopher","h323","http","https","iax","icap","im","imap","info","ipp","iris","iris.beep","iris.xpc","iris.xpcs","iris.lwz","ldap","mailto","mid","msrp","msrps","mtqp","mupdate","news","nfs","ni","nih","nntp","opaquelocktoken","pop","pres","rtsp","service","session","shttp","sieve","sip","sips","sms","snmp","soap.beep","soap.beeps","tag","tel","telnet","tftp","thismessage","tn3270","tip","tv","urn","vemmi","ws","wss","xcon","xcon-userid","xmlrpc.beep","xmlrpc.beeps","xmpp","z39.50r","z39.50s","adiumxtra","afp","afs","aim","apt","attachment","aw","beshare","bitcoin","bolo","callto","chrome","chrome-extension","com-eventbrite-attendee","content","cvs","dlna-playsingle","dlna-playcontainer","dtn","dvb","ed2k","facetime","feed","finger","fish","gg","git","gizmoproject","gtalk","hcp","icon","ipn","irc","irc6","ircs","itms","jar","jms","keyparc","lastfm","ldaps","magnet","maps","market","message","mms","ms-help","msnim","mumble","mvn","notes","oid","palm","paparazzi","platform","proxy","psyc","query","res","resource","rmi","rsync","rtmp","secondlife","sftp","sgn","skype","smb","soldat","spotify","ssh","steam","svn","teamspeak","things","udp","unreal","ut2004","ventrilo","view-source","webcal","wtai","wyciwyg","xfire","xri","ymsgr"],V9=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,Z9=/^<([a-zA-Z.\-]{1,25}):([^<>\x00-\x20]*)>/;function hC(n,s){return n=n.source,s=s||"",function t(o,l){return o?(n=n.replace(o,l=l.source||l),t):new RegExp(n,s)}}var K9=hC(/(?:unquoted|single_quoted|double_quoted)/)("unquoted",/[^"'=<>`\x00-\x20]+/)("single_quoted",/'[^']*'/)("double_quoted",/"[^"]*"/)(),q9=hC(/(?:\s+attr_name(?:\s*=\s*attr_value)?)/)("attr_name",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)("attr_value",K9)(),ek=hC(/<[A-Za-z][A-Za-z0-9]*attribute*\s*\/?>/)("attribute",q9)(),sk=hC(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)("open_tag",ek)("close_tag",/<\/[A-Za-z][A-Za-z0-9]*\s*>/)("comment",/<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->/)("processing",/<[?].*?[?]>/)("declaration",/<![A-Z]+\s+[^>]*>/)("cdata",/<!\[CDATA\[[\s\S]*?\]\]>/)(),uk=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,ck=/^&([a-z][a-z0-9]{1,31});/i,sD=[["text",function x9(n,s){for(var t=n.pos;t<n.posMax&&!D9(n.src.charCodeAt(t));)t++;return t!==n.pos&&(s||(n.pending+=n.src.slice(n.pos,t)),n.pos=t,!0)}],["newline",function R9(n,s){var t,o,l=n.pos;if(10!==n.src.charCodeAt(l))return!1;if(t=n.pending.length-1,o=n.posMax,!s)if(t>=0&&32===n.pending.charCodeAt(t))if(t>=1&&32===n.pending.charCodeAt(t-1)){for(var _=t-2;_>=0;_--)if(32!==n.pending.charCodeAt(_)){n.pending=n.pending.substring(0,_+1);break}n.push({type:"hardbreak",level:n.level})}else n.pending=n.pending.slice(0,-1),n.push({type:"softbreak",level:n.level});else n.push({type:"softbreak",level:n.level});for(l++;l<o&&32===n.src.charCodeAt(l);)l++;return n.pos=l,!0}],["escape",function w9(n,s){var t,o=n.pos,l=n.posMax;if(92!==n.src.charCodeAt(o))return!1;if(++o<l){if((t=n.src.charCodeAt(o))<256&&0!==oD[t])return s||(n.pending+=n.src[o]),n.pos+=2,!0;if(10===t){for(s||n.push({type:"hardbreak",level:n.level}),o++;o<l&&32===n.src.charCodeAt(o);)o++;return n.pos=o,!0}}return s||(n.pending+="\\"),n.pos++,!0}],["backticks",function P9(n,s){var t,o,l,_,C,R=n.pos;if(96!==n.src.charCodeAt(R))return!1;for(t=R,R++,o=n.posMax;R<o&&96===n.src.charCodeAt(R);)R++;for(l=n.src.slice(t,R),_=C=R;-1!==(_=n.src.indexOf("`",C));){for(C=_+1;C<o&&96===n.src.charCodeAt(C);)C++;if(C-_===l.length)return s||n.push({type:"code",content:n.src.slice(R,_).replace(/[ \n]+/g," ").trim(),block:!1,level:n.level}),n.pos=C,!0}return s||(n.pending+=l),n.pos+=l.length,!0}],["del",function N9(n,s){var t,o,l,R,N,_=n.posMax,C=n.pos;if(126!==n.src.charCodeAt(C)||s||C+4>=_||126!==n.src.charCodeAt(C+1)||n.level>=n.options.maxNesting||(R=C>0?n.src.charCodeAt(C-1):-1,N=n.src.charCodeAt(C+2),126===R)||126===N||32===N||10===N)return!1;for(o=C+2;o<_&&126===n.src.charCodeAt(o);)o++;if(o>C+3)return n.pos+=o-C,s||(n.pending+=n.src.slice(C,o)),!0;for(n.pos=C+2,l=1;n.pos+1<_;){if(126===n.src.charCodeAt(n.pos)&&126===n.src.charCodeAt(n.pos+1)&&(R=n.src.charCodeAt(n.pos-1),126!==(N=n.pos+2<_?n.src.charCodeAt(n.pos+2):-1)&&126!==R&&(32!==R&&10!==R?l--:32!==N&&10!==N&&l++,l<=0))){t=!0;break}n.parser.skipToken(n)}return t?(n.posMax=n.pos,n.pos=C+2,s||(n.push({type:"del_open",level:n.level++}),n.parser.tokenize(n),n.push({type:"del_close",level:--n.level})),n.pos=n.posMax+2,n.posMax=_,!0):(n.pos=C,!1)}],["ins",function I9(n,s){var t,o,l,R,N,_=n.posMax,C=n.pos;if(43!==n.src.charCodeAt(C)||s||C+4>=_||43!==n.src.charCodeAt(C+1)||n.level>=n.options.maxNesting||(R=C>0?n.src.charCodeAt(C-1):-1,N=n.src.charCodeAt(C+2),43===R)||43===N||32===N||10===N)return!1;for(o=C+2;o<_&&43===n.src.charCodeAt(o);)o++;if(o!==C+2)return n.pos+=o-C,s||(n.pending+=n.src.slice(C,o)),!0;for(n.pos=C+2,l=1;n.pos+1<_;){if(43===n.src.charCodeAt(n.pos)&&43===n.src.charCodeAt(n.pos+1)&&(R=n.src.charCodeAt(n.pos-1),43!==(N=n.pos+2<_?n.src.charCodeAt(n.pos+2):-1)&&43!==R&&(32!==R&&10!==R?l--:32!==N&&10!==N&&l++,l<=0))){t=!0;break}n.parser.skipToken(n)}return t?(n.posMax=n.pos,n.pos=C+2,s||(n.push({type:"ins_open",level:n.level++}),n.parser.tokenize(n),n.push({type:"ins_close",level:--n.level})),n.pos=n.posMax+2,n.posMax=_,!0):(n.pos=C,!1)}],["mark",function F9(n,s){var t,o,l,R,N,_=n.posMax,C=n.pos;if(61!==n.src.charCodeAt(C)||s||C+4>=_||61!==n.src.charCodeAt(C+1)||n.level>=n.options.maxNesting||(R=C>0?n.src.charCodeAt(C-1):-1,N=n.src.charCodeAt(C+2),61===R)||61===N||32===N||10===N)return!1;for(o=C+2;o<_&&61===n.src.charCodeAt(o);)o++;if(o!==C+2)return n.pos+=o-C,s||(n.pending+=n.src.slice(C,o)),!0;for(n.pos=C+2,l=1;n.pos+1<_;){if(61===n.src.charCodeAt(n.pos)&&61===n.src.charCodeAt(n.pos+1)&&(R=n.src.charCodeAt(n.pos-1),61!==(N=n.pos+2<_?n.src.charCodeAt(n.pos+2):-1)&&61!==R&&(32!==R&&10!==R?l--:32!==N&&10!==N&&l++,l<=0))){t=!0;break}n.parser.skipToken(n)}return t?(n.posMax=n.pos,n.pos=C+2,s||(n.push({type:"mark_open",level:n.level++}),n.parser.tokenize(n),n.push({type:"mark_close",level:--n.level})),n.pos=n.posMax+2,n.posMax=_,!0):(n.pos=C,!1)}],["emphasis",function L9(n,s){var t,o,l,_,C,R,N,V=n.posMax,Q=n.pos,oe=n.src.charCodeAt(Q);if(95!==oe&&42!==oe||s)return!1;if(t=(N=H3(n,Q)).delims,!N.can_open)return n.pos+=t,s||(n.pending+=n.src.slice(Q,n.pos)),!0;if(n.level>=n.options.maxNesting)return!1;for(n.pos=Q+t,R=[t];n.pos<V;)if(n.src.charCodeAt(n.pos)!==oe)n.parser.skipToken(n);else{if(o=(N=H3(n,n.pos)).delims,N.can_close){for(_=R.pop(),C=o;_!==C;){if(C<_){R.push(_-C);break}if(C-=_,0===R.length)break;n.pos+=_,_=R.pop()}if(0===R.length){t=_,l=!0;break}n.pos+=o;continue}N.can_open&&R.push(o),n.pos+=o}return l?(n.posMax=n.pos,n.pos=Q+t,s||((2===t||3===t)&&n.push({type:"strong_open",level:n.level++}),(1===t||3===t)&&n.push({type:"em_open",level:n.level++}),n.parser.tokenize(n),(1===t||3===t)&&n.push({type:"em_close",level:--n.level}),(2===t||3===t)&&n.push({type:"strong_close",level:--n.level})),n.pos=n.posMax+t,n.posMax=V,!0):(n.pos=Q,!1)}],["sub",function $9(n,s){var t,o,l=n.posMax,_=n.pos;if(126!==n.src.charCodeAt(_)||s||_+2>=l||n.level>=n.options.maxNesting)return!1;for(n.pos=_+1;n.pos<l;){if(126===n.src.charCodeAt(n.pos)){t=!0;break}n.parser.skipToken(n)}return!t||_+1===n.pos||(o=n.src.slice(_+1,n.pos)).match(/(^|[^\\])(\\\\)*\s/)?(n.pos=_,!1):(n.posMax=n.pos,n.pos=_+1,s||n.push({type:"sub",level:n.level,content:o.replace(k9,"$1")}),n.pos=n.posMax+1,n.posMax=l,!0)}],["sup",function B9(n,s){var t,o,l=n.posMax,_=n.pos;if(94!==n.src.charCodeAt(_)||s||_+2>=l||n.level>=n.options.maxNesting)return!1;for(n.pos=_+1;n.pos<l;){if(94===n.src.charCodeAt(n.pos)){t=!0;break}n.parser.skipToken(n)}return!t||_+1===n.pos||(o=n.src.slice(_+1,n.pos)).match(/(^|[^\\])(\\\\)*\s/)?(n.pos=_,!1):(n.posMax=n.pos,n.pos=_+1,s||n.push({type:"sup",level:n.level,content:o.replace(H9,"$1")}),n.pos=n.posMax+1,n.posMax=l,!0)}],["links",function U9(n,s){var t,o,l,_,C,R,N,V,Q=!1,oe=n.pos,le=n.posMax,_e=n.pos,ye=n.src.charCodeAt(_e);if(33===ye&&(Q=!0,ye=n.src.charCodeAt(++_e)),91!==ye||n.level>=n.options.maxNesting||(t=_e+1,(o=IE(n,_e))<0))return!1;if((R=o+1)<le&&40===n.src.charCodeAt(R)){for(R++;R<le&&(32===(V=n.src.charCodeAt(R))||10===V);R++);if(R>=le)return!1;for(_e=R,O3(n,R)?(_=n.linkContent,R=n.pos):_="",_e=R;R<le&&(32===(V=n.src.charCodeAt(R))||10===V);R++);if(R<le&&_e!==R&&A3(n,R))for(C=n.linkContent,R=n.pos;R<le&&(32===(V=n.src.charCodeAt(R))||10===V);R++);else C="";if(R>=le||41!==n.src.charCodeAt(R))return n.pos=oe,!1;R++}else{if(n.linkLevel>0)return!1;for(;R<le&&(32===(V=n.src.charCodeAt(R))||10===V);R++);if(R<le&&91===n.src.charCodeAt(R)&&(_e=R+1,(R=IE(n,R))>=0?l=n.src.slice(_e,R++):R=_e-1),l||(void 0===l&&(R=o+1),l=n.src.slice(t,o)),!(N=n.env.references[D3(l)]))return n.pos=oe,!1;_=N.href,C=N.title}return s||(n.pos=t,n.posMax=o,Q?n.push({type:"image",src:_,title:C,alt:n.src.substr(t,o-t),level:n.level}):(n.push({type:"link_open",href:_,title:C,level:n.level++}),n.linkLevel++,n.parser.tokenize(n),n.linkLevel--,n.push({type:"link_close",level:--n.level}))),n.pos=R,n.posMax=le,!0}],["footnote_inline",function Y9(n,s){var t,o,l,_,C=n.posMax,R=n.pos;return!(R+2>=C||94!==n.src.charCodeAt(R)||91!==n.src.charCodeAt(R+1)||n.level>=n.options.maxNesting||(t=R+2,o=IE(n,R+1),o<0)||(s||(n.env.footnotes||(n.env.footnotes={}),n.env.footnotes.list||(n.env.footnotes.list=[]),l=n.env.footnotes.list.length,n.pos=t,n.posMax=o,n.push({type:"footnote_ref",id:l,level:n.level}),n.linkLevel++,_=n.tokens.length,n.parser.tokenize(n),n.env.footnotes.list[l]={tokens:n.tokens.splice(_)},n.linkLevel--),n.pos=o+1,n.posMax=C,0))}],["footnote_ref",function j9(n,s){var t,o,l,_,C=n.posMax,R=n.pos;if(R+3>C||!n.env.footnotes||!n.env.footnotes.refs||91!==n.src.charCodeAt(R)||94!==n.src.charCodeAt(R+1)||n.level>=n.options.maxNesting)return!1;for(o=R+2;o<C;o++){if(32===n.src.charCodeAt(o)||10===n.src.charCodeAt(o))return!1;if(93===n.src.charCodeAt(o))break}return!(o===R+2||o>=C||(o++,t=n.src.slice(R+2,o-1),void 0===n.env.footnotes.refs[":"+t])||(s||(n.env.footnotes.list||(n.env.footnotes.list=[]),n.env.footnotes.refs[":"+t]<0?(n.env.footnotes.list[l=n.env.footnotes.list.length]={label:t,count:0},n.env.footnotes.refs[":"+t]=l):l=n.env.footnotes.refs[":"+t],_=n.env.footnotes.list[l].count,n.env.footnotes.list[l].count++,n.push({type:"footnote_ref",id:l,subId:_,level:n.level})),n.pos=o,n.posMax=C,0))}],["autolink",function z9(n,s){var t,o,l,_,C,R=n.pos;return!(60!==n.src.charCodeAt(R)||(t=n.src.slice(R),t.indexOf(">")<0)||((o=t.match(Z9))?G9.indexOf(o[1].toLowerCase())<0||(_=o[0].slice(1,-1),C=eD(_),!n.parser.validateLink(_))||(s||(n.push({type:"link_open",href:C,level:n.level}),n.push({type:"text",content:_,level:n.level+1}),n.push({type:"link_close",level:n.level})),n.pos+=o[0].length,0):!(l=t.match(V9))||(C=eD("mailto:"+(_=l[0].slice(1,-1))),!n.parser.validateLink(C)||(s||(n.push({type:"link_open",href:C,level:n.level}),n.push({type:"text",content:_,level:n.level+1}),n.push({type:"link_close",level:n.level})),n.pos+=l[0].length,0))))}],["htmltag",function lk(n,s){var t,o,l,_=n.pos;return!(!n.options.html||(l=n.posMax,60!==n.src.charCodeAt(_)||_+2>=l)||(t=n.src.charCodeAt(_+1),33!==t&&63!==t&&47!==t&&!function ak(n){var s=32|n;return s>=97&&s<=122}(t))||(o=n.src.slice(_).match(sk),!o)||(s||n.push({type:"htmltag",content:n.src.slice(_,_+o[0].length),level:n.level}),n.pos+=o[0].length,0))}],["entity",function dk(n,s){var o,l,_=n.pos,C=n.posMax;if(38!==n.src.charCodeAt(_))return!1;if(_+1<C)if(35===n.src.charCodeAt(_+1)){if(l=n.src.slice(_).match(uk))return s||(o="x"===l[1][0].toLowerCase()?parseInt(l[1].slice(1),16):parseInt(l[1],10),n.pending+=KA(o)?dC(o):dC(65533)),n.pos+=l[0].length,!0}else if(l=n.src.slice(_).match(ck)){var R=T3(l[1]);if(l[1]!==R)return s||(n.pending+=R),n.pos+=l[0].length,!0}return s||(n.pending+="&"),n.pos++,!0}]];function _C(){this.ruler=new N_;for(var n=0;n<sD.length;n++)this.ruler.push(sD[n][0],sD[n][1]);this.validateLink=fk}function fk(n){var t=n.trim().toLowerCase();return!(-1!==(t=Kg(t)).indexOf(":")&&-1!==["vbscript","javascript","file","data"].indexOf(t.split(":")[0]))}_C.prototype.skipToken=function(n){var l,_,s=this.ruler.getRules(""),t=s.length,o=n.pos;if((_=n.cacheGet(o))>0)n.pos=_;else{for(l=0;l<t;l++)if(s[l](n,!0))return void n.cacheSet(o,n.pos);n.pos++,n.cacheSet(o,n.pos)}},_C.prototype.tokenize=function(n){for(var l,_,s=this.ruler.getRules(""),t=s.length,o=n.posMax;n.pos<o;){for(_=0;_<t&&!(l=s[_](n,!1));_++);if(l){if(n.pos>=o)break}else n.pending+=n.src[n.pos++]}n.pending&&n.pushPending()},_C.prototype.parse=function(n,s,t,o){var l=new Wv(n,this,s,t,o);this.tokenize(l)};var mk={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","replacements","smartquotes","references","abbr2","footnote_tail"]},block:{rules:["blockquote","code","fences","footnote","heading","hr","htmlblock","lheading","list","paragraph","table"]},inline:{rules:["autolink","backticks","del","emphasis","entity","escape","footnote_ref","htmltag","links","newline","text"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkTarget:"",typographer:!1,quotes:"\u201c\u201d\u2018\u2019",highlight:null,maxNesting:20},components:{core:{rules:["block","inline","references","abbr2"]},block:{rules:["blockquote","code","fences","heading","hr","htmlblock","lheading","list","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","htmltag","links","newline","text"]}}}};function B3(n,s,t){this.src=s,this.env=t,this.options=n.options,this.tokens=[],this.inlineMode=!1,this.inline=n.inline,this.block=n.block,this.renderer=n.renderer,this.typographer=n.typographer}function qg(n,s){"string"!=typeof n&&(s=n,n="default"),s&&null!=s.linkify&&console.warn("linkify option is removed. Use linkify plugin instead:\n\nimport Remarkable from 'remarkable';\nimport linkify from 'remarkable/linkify';\nnew Remarkable().use(linkify)\n"),this.inline=new _C,this.block=new iD,this.core=new N3,this.renderer=new qA,this.ruler=new N_,this.options={},this.configure(mk[n]),this.set(s||{})}qg.prototype.set=function(n){XA(this.options,n)},qg.prototype.configure=function(n){var s=this;if(!n)throw new Error("Wrong `remarkable` preset, check name/content");n.options&&s.set(n.options),n.components&&Object.keys(n.components).forEach(function(t){n.components[t].rules&&s[t].ruler.enable(n.components[t].rules,!0)})},qg.prototype.use=function(n,s){return n(this,s),this},qg.prototype.parse=function(n,s){var t=new B3(this,n,s);return this.core.process(t),t.tokens},qg.prototype.render=function(n,s){return this.renderer.render(this.parse(n,s=s||{}),this.options,s)},qg.prototype.parseInline=function(n,s){var t=new B3(this,n,s);return t.inlineMode=!0,this.core.process(t),t.tokens},qg.prototype.renderInline=function(n,s){return this.renderer.render(this.parseInline(n,s=s||{}),this.options,s)};var mC="NOT_FOUND",yk=function(s,t){return s===t};function bk(n,s){var t="object"==typeof s?s:{equalityCheck:s},o=t.equalityCheck,_=t.maxSize,C=void 0===_?1:_,R=t.resultEqualityCheck,N=function Ek(n){return function(t,o){if(null===t||null===o||t.length!==o.length)return!1;for(var l=t.length,_=0;_<l;_++)if(!n(t[_],o[_]))return!1;return!0}}(void 0===o?yk:o),V=1===C?function gk(n){var s;return{get:function(o){return s&&n(s.key,o)?s.value:mC},put:function(o,l){s={key:o,value:l}},getEntries:function(){return s?[s]:[]},clear:function(){s=void 0}}}(N):function vk(n,s){var t=[];function o(R){var N=t.findIndex(function(Q){return s(R,Q.key)});if(N>-1){var V=t[N];return N>0&&(t.splice(N,1),t.unshift(V)),V.value}return mC}return{get:o,put:function l(R,N){o(R)===mC&&(t.unshift({key:R,value:N}),t.length>n&&t.pop())},getEntries:function _(){return t},clear:function C(){t=[]}}}(C,N);function Q(){var oe=V.get(arguments);if(oe===mC){if(oe=n.apply(null,arguments),R){var le=V.getEntries(),_e=le.find(function(ye){return R(ye.value,oe)});_e&&(oe=_e.value)}V.put(arguments,oe)}return oe}return Q.clearCache=function(){return V.clear()},Q}function Sk(n){var s=Array.isArray(n[0])?n[0]:n;if(!s.every(function(o){return"function"==typeof o})){var t=s.map(function(o){return"function"==typeof o?"function "+(o.name||"unnamed")+"()":typeof o}).join(", ");throw new Error("createSelector expects all input-selectors to be functions, but received the following types: ["+t+"]")}return s}function Tk(n){for(var s=arguments.length,t=new Array(s>1?s-1:0),o=1;o<s;o++)t[o-1]=arguments[o];var l=function(){for(var C=arguments.length,R=new Array(C),N=0;N<C;N++)R[N]=arguments[N];var Q,V=0,oe={memoizeOptions:void 0},le=R.pop();if("object"==typeof le&&(oe=le,le=R.pop()),"function"!=typeof le)throw new Error("createSelector expects an output function after the inputs, but received: ["+typeof le+"]");var _e=oe,ye=_e.memoizeOptions,$e=void 0===ye?t:ye,Ie=Array.isArray($e)?$e:[$e],ke=Sk(R),we=n.apply(void 0,[function(){return V++,le.apply(null,arguments)}].concat(Ie)),G=n(function(){for(var bt=[],Bt=ke.length,Jt=0;Jt<Bt;Jt++)bt.push(ke[Jt].apply(null,arguments));return Q=we.apply(null,bt)});return Object.assign(G,{resultFunc:le,memoizedResultFunc:we,dependencies:ke,lastResult:function(){return Q},recomputations:function(){return V},resetRecomputations:function(){return V=0}}),G};return l}var U3=Tk(bk),Ck=i(4043),Mk=i(2135),Ok=i.n(Mk),Ak=i(95327),Dk=i.n(Ak),xk=i(31208),Rk=i(3912),wk=i.n(Rk),Pk=i(41233),Nk=i.n(Pk),Ik=i(33814),Fk=i.n(Ik),Lk=i(74299),kk=i.n(Lk),$k=i(32322),Hk=i.n($k),Bk=i(58734),Uk=i.n(Bk),Yk=i(69883),jk=i.n(Yk),Gk=i(41205),Vk=i.n(Gk),Zk={3978:(n,s,t)=>{n.exports=t(1910)},1543:(n,s,t)=>{t.d(s,{Z:()=>ke});var o=t(863),l=t(7344),_=t(8656),C=t(6340),R=t(9972),N=t(5416),V=t(775),Q=t(5171),oe=t(8818),le=t(2565),_e=t(810);const ye=(t.d(G={},{default:()=>vE}),G);var G,$e=t(9569),Ie=t(5053),ke=function(we){(0,R.default)(Dt,we);var G=(0,N.default)(Dt);function Dt(){var bt,Bt;(0,l.default)(this,Dt);for(var Jt=arguments.length,Mn=new Array(Jt),zt=0;zt<Jt;zt++)Mn[zt]=arguments[zt];return Bt=G.call.apply(G,(0,Q.default)(bt=[this]).call(bt,Mn)),(0,V.default)((0,C.default)(Bt),"getModelName",function(xn){return-1!==(0,oe.default)(xn).call(xn,"#/definitions/")?xn.replace(/^.*#\/definitions\//,""):-1!==(0,oe.default)(xn).call(xn,"#/components/schemas/")?xn.replace(/^.*#\/components\/schemas\//,""):void 0}),(0,V.default)((0,C.default)(Bt),"getRefSchema",function(xn){return Bt.props.specSelectors.findDefinition(xn)}),Bt}return(0,_.default)(Dt,[{key:"render",value:function(){var bt=this.props,Bt=bt.getComponent,Jt=bt.getConfigs,Mn=bt.specSelectors,zt=bt.schema,xn=bt.required,Nn=bt.name,zr=bt.isRef,Hr=bt.specPath,Vr=bt.displayName,qr=bt.includeReadOnly,On=bt.includeWriteOnly,Jn=Bt("ObjectModel"),Qn=Bt("ArrayModel"),ur=Bt("PrimitiveModel"),In="object",Yr=zt&&zt.get("$$ref");if(!Nn&&Yr&&(Nn=this.getModelName(Yr)),!zt&&Yr&&(zt=this.getRefSchema(Nn)),!zt)return _e.default.createElement("span",{className:"model model-title"},_e.default.createElement("span",{className:"model-title__text"},Vr||Nn),_e.default.createElement("img",{src:t(2517),height:"20px",width:"20px"}));var Qi=Mn.isOAS3()&&zt.get("deprecated");switch(zr=void 0!==zr?zr:!!Yr,In=zt&&zt.get("type")||In){case"object":return _e.default.createElement(Jn,(0,o.default)({className:"object"},this.props,{specPath:Hr,getConfigs:Jt,schema:zt,name:Nn,deprecated:Qi,isRef:zr,includeReadOnly:qr,includeWriteOnly:On}));case"array":return _e.default.createElement(Qn,(0,o.default)({className:"array"},this.props,{getConfigs:Jt,schema:zt,name:Nn,deprecated:Qi,required:xn,includeReadOnly:qr,includeWriteOnly:On}));default:return _e.default.createElement(ur,(0,o.default)({},this.props,{getComponent:Bt,getConfigs:Jt,schema:zt,name:Nn,deprecated:Qi,required:xn}))}}}]),Dt}(ye.default);(0,V.default)(ke,"propTypes",{schema:(0,le.default)($e.default).isRequired,getComponent:Ie.default.func.isRequired,getConfigs:Ie.default.func.isRequired,specSelectors:Ie.default.object.isRequired,name:Ie.default.string,displayName:Ie.default.string,isRef:Ie.default.bool,required:Ie.default.bool,expandDepth:Ie.default.number,depth:Ie.default.number,specPath:$e.default.list.isRequired,includeReadOnly:Ie.default.bool,includeWriteOnly:Ie.default.bool})},5623:(n,s,t)=>{t.d(s,{Z:()=>Ie});var o=t(1581),l=t(7344),_=t(8656),C=t(6340),R=t(9972),N=t(5416),V=t(775),Q=t(2740),oe=t(5171),le=t(810),_e=t(8900),ye=(t(5053),t(6298)),$e=t(7504),Ie=function(we){(0,R.default)(Dt,we);var G=(0,N.default)(Dt);function Dt(bt,Bt){var Jt;(0,l.default)(this,Dt),Jt=G.call(this,bt,Bt),(0,V.default)((0,C.default)(Jt),"getDefinitionUrl",function(){return new _e.default(Jt.props.specSelectors.url(),$e.Z.location).toString()});var Mn=(0,bt.getConfigs)().validatorUrl;return Jt.state={url:Jt.getDefinitionUrl(),validatorUrl:void 0===Mn?"https://validator.swagger.io/validator":Mn},Jt}return(0,_.default)(Dt,[{key:"UNSAFE_componentWillReceiveProps",value:function(bt){var Bt=(0,bt.getConfigs)().validatorUrl;this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===Bt?"https://validator.swagger.io/validator":Bt})}},{key:"render",value:function(){var bt,Bt,Jt=(0,this.props.getConfigs)().spec,Mn=(0,ye.Nm)(this.state.validatorUrl);return"object"===(0,o.default)(Jt)&&(0,Q.default)(Jt).length?null:this.state.url&&(0,ye.hW)(this.state.validatorUrl)&&(0,ye.hW)(this.state.url)?le.default.createElement("span",{className:"float-right"},le.default.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:(0,oe.default)(bt="".concat(Mn,"/debug?url=")).call(bt,encodeURIComponent(this.state.url))},le.default.createElement(ke,{src:(0,oe.default)(Bt="".concat(Mn,"?url=")).call(Bt,encodeURIComponent(this.state.url)),alt:"Online validator badge"}))):null}}]),Dt}(le.default.Component),ke=function(we){(0,R.default)(Dt,we);var G=(0,N.default)(Dt);function Dt(bt){var Bt;return(0,l.default)(this,Dt),(Bt=G.call(this,bt)).state={loaded:!1,error:!1},Bt}return(0,_.default)(Dt,[{key:"componentDidMount",value:function(){var bt=this,Bt=new Image;Bt.onload=function(){bt.setState({loaded:!0})},Bt.onerror=function(){bt.setState({error:!0})},Bt.src=this.props.src}},{key:"UNSAFE_componentWillReceiveProps",value:function(bt){var Bt=this;if(bt.src!==this.props.src){var Jt=new Image;Jt.onload=function(){Bt.setState({loaded:!0})},Jt.onerror=function(){Bt.setState({error:!0})},Jt.src=bt.src}}},{key:"render",value:function(){return this.state.error?le.default.createElement("img",{alt:"Error"}):this.state.loaded?le.default.createElement("img",{src:this.props.src,alt:this.props.alt}):null}}]),Dt}(le.default.Component)},5466:(n,s,t)=>{t.d(s,{Z:()=>V,s:()=>Q});var o=t(810),l=(t(5053),t(3952));const _=(t.d(le={},{linkify:()=>JP}),le),C=(oe=>{var le={};return t.d(le,oe),le})({default:()=>XP()});var le,R=t(8096);function N(oe){var le=oe.source,_e=oe.className,ye=void 0===_e?"":_e,$e=oe.getConfigs;if("string"!=typeof le)return null;var Ie=new l.Remarkable({html:!0,typographer:!0,breaks:!0,linkTarget:"_blank"}).use(_.linkify);Ie.core.ruler.disable(["replacements","smartquotes"]);var ke=$e().useUnsafeMarkdown,we=Ie.render(le),G=Q(we,{useUnsafeMarkdown:ke});return le&&we&&G?o.default.createElement("div",{className:(0,R.default)(ye,"markdown"),dangerouslySetInnerHTML:{__html:G}}):null}C.default.addHook&&C.default.addHook("beforeSanitizeElements",function(oe){return oe.href&&oe.setAttribute("rel","noopener noreferrer"),oe}),N.defaultProps={getConfigs:function(){return{useUnsafeMarkdown:!1}}};const V=N;function Q(oe){var le=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},_e=le.useUnsafeMarkdown,ye=void 0!==_e&&_e,$e=ye,Ie=ye?[]:["style","class"];return ye&&!Q.hasWarnedAboutDeprecation&&(console.warn("useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0."),Q.hasWarnedAboutDeprecation=!0),C.default.sanitize(oe,{ADD_ATTR:["target"],FORBID_TAGS:["style","form"],ALLOW_DATA_ATTR:$e,FORBID_ATTR:Ie})}Q.hasWarnedAboutDeprecation=!1},5308:(n,s,t)=>{t.r(s),t.d(s,{default:()=>Q});var o,l=t(29),_=t(5487),C=t(6298),R=t(8102),N=t(5102),V={};const Q=V;(0,l.default)(o=(0,_.default)(N).call(N)).call(o,function(oe){if("./index.js"!==oe){var le=N(oe);V[(0,C.Zl)(oe)]=le.default?le.default:le}}),V.SafeRender=R.default},5812:(n,s,t)=>{t.r(s),t.d(s,{SHOW_AUTH_POPUP:()=>V,AUTHORIZE:()=>Q,LOGOUT:()=>oe,PRE_AUTHORIZE_OAUTH2:()=>le,AUTHORIZE_OAUTH2:()=>_e,VALIDATE:()=>ye,CONFIGURE_AUTH:()=>$e,RESTORE_AUTHORIZATION:()=>Ie,showDefinitions:()=>ke,authorize:()=>we,authorizeWithPersistOption:()=>G,logout:()=>Dt,logoutWithPersistOption:()=>bt,preAuthorizeImplicit:()=>Bt,authorizeOauth2:()=>Jt,authorizeOauth2WithPersistOption:()=>Mn,authorizePassword:()=>zt,authorizeApplication:()=>xn,authorizeAccessCodeWithFormParams:()=>Nn,authorizeAccessCodeWithBasicAuthentication:()=>zr,authorizeRequest:()=>Hr,configureAuth:()=>Vr,restoreAuthorization:()=>qr,persistAuthorizationIfNeeded:()=>On,authPopup:()=>Jn});var o=t(1581),l=t(313),_=t(7512),C=t(8900),R=t(7504),N=t(6298),V="show_popup",Q="authorize",oe="logout",le="pre_authorize_oauth2",_e="authorize_oauth2",ye="validate",$e="configure_auth",Ie="restore_authorization";function ke(Qn){return{type:V,payload:Qn}}function we(Qn){return{type:Q,payload:Qn}}var G=function(Qn){return function(ur){var In=ur.authActions;In.authorize(Qn),In.persistAuthorizationIfNeeded()}};function Dt(Qn){return{type:oe,payload:Qn}}var bt=function(Qn){return function(ur){var In=ur.authActions;In.logout(Qn),In.persistAuthorizationIfNeeded()}},Bt=function(Qn){return function(ur){var In=ur.authActions,Yr=ur.errActions,Qi=Qn.auth,Di=Qn.token,ji=Qn.isValid,Bn=Qi.name,bn=Qi.schema.get("flow");delete R.Z.swaggerUIRedirectOauth2,"accessCode"===bn||ji||Yr.newAuthErr({authId:Bn,source:"auth",level:"warning",message:"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"}),Di.error?Yr.newAuthErr({authId:Bn,source:"auth",level:"error",message:(0,l.default)(Di)}):In.authorizeOauth2WithPersistOption({auth:Qi,token:Di})}};function Jt(Qn){return{type:_e,payload:Qn}}var Mn=function(Qn){return function(ur){var In=ur.authActions;In.authorizeOauth2(Qn),In.persistAuthorizationIfNeeded()}},zt=function(Qn){return function(ur){var Xi,Bo,Ao,In=ur.authActions,Yr=Qn.schema,Qi=Qn.name,Di=Qn.username,ji=Qn.password,Wr=Qn.passwordType,Bn=Qn.clientId,bn=Qn.clientSecret,Xr={grant_type:"password",scope:Qn.scopes.join(" "),username:Di,password:ji},Ni={};switch(Wr){case"request-body":Xi=Xr,Ao=bn,(Bo=Bn)&&(0,_.default)(Xi,{client_id:Bo}),Ao&&(0,_.default)(Xi,{client_secret:Ao});break;case"basic":Ni.Authorization="Basic "+(0,N.r3)(Bn+":"+bn);break;default:console.warn("Warning: invalid passwordType ".concat(Wr," was passed, not including client id and secret"))}return In.authorizeRequest({body:(0,N.GZ)(Xr),url:Yr.get("tokenUrl"),name:Qi,headers:Ni,query:{},auth:Qn})}},xn=function(Qn){return function(ur){var In=ur.authActions,Yr=Qn.schema,Qi=Qn.scopes,Di=Qn.name,Bn={Authorization:"Basic "+(0,N.r3)(Qn.clientId+":"+Qn.clientSecret)},bn={grant_type:"client_credentials",scope:Qi.join(" ")};return In.authorizeRequest({body:(0,N.GZ)(bn),name:Di,url:Yr.get("tokenUrl"),auth:Qn,headers:Bn})}},Nn=function(Qn){var ur=Qn.auth,In=Qn.redirectUrl;return function(Yr){var Di=ur.schema,ji=ur.name;return Yr.authActions.authorizeRequest({body:(0,N.GZ)({grant_type:"authorization_code",code:ur.code,client_id:ur.clientId,client_secret:ur.clientSecret,redirect_uri:In,code_verifier:ur.codeVerifier}),name:ji,url:Di.get("tokenUrl"),auth:ur})}},zr=function(Qn){var ur=Qn.auth,In=Qn.redirectUrl;return function(Yr){var Qi=Yr.authActions,Di=ur.schema,ji=ur.name,Wr=ur.clientId,bn=ur.codeVerifier,Xr={Authorization:"Basic "+(0,N.r3)(Wr+":"+ur.clientSecret)};return Qi.authorizeRequest({body:(0,N.GZ)({grant_type:"authorization_code",code:ur.code,client_id:Wr,redirect_uri:In,code_verifier:bn}),name:ji,url:Di.get("tokenUrl"),auth:ur,headers:Xr})}},Hr=function(Qn){return function(ur){var In,Yr=ur.fn,Qi=ur.getConfigs,Di=ur.authActions,ji=ur.errActions,Wr=ur.oas3Selectors,Bn=ur.specSelectors,Xr=Qn.body,Ni=Qn.query,Xi=void 0===Ni?{}:Ni,Bo=Qn.headers,Ao=void 0===Bo?{}:Bo,zs=Qn.name,Qs=Qn.url,Ii=Qn.auth,uo=(ur.authSelectors.getConfigs()||{}).additionalQueryStringParams;if(Bn.isOAS3()){var bo=Wr.serverEffectiveValue(Wr.selectedServer());In=(0,C.default)(Qs,bo,!0)}else In=(0,C.default)(Qs,Bn.url(),!0);"object"===(0,o.default)(uo)&&(In.query=(0,_.default)({},In.query,uo));var Qe=In.toString(),Pt=(0,_.default)({Accept:"application/json, text/plain, */*","Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"},Ao);Yr.fetch({url:Qe,method:"post",headers:Pt,query:Xi,body:Xr,requestInterceptor:Qi().requestInterceptor,responseInterceptor:Qi().responseInterceptor}).then(function(Rt){var qn=JSON.parse(Rt.data);Rt.ok?qn&&qn.error||qn&&qn.parseError?ji.newAuthErr({authId:zs,level:"error",source:"auth",message:(0,l.default)(qn)}):Di.authorizeOauth2WithPersistOption({auth:Ii,token:qn}):ji.newAuthErr({authId:zs,level:"error",source:"auth",message:Rt.statusText})}).catch(function(Rt){var qn=new Error(Rt).message;if(Rt.response&&Rt.response.data){var wr=Rt.response.data;try{var Gr="string"==typeof wr?JSON.parse(wr):wr;Gr.error&&(qn+=", error: ".concat(Gr.error)),Gr.error_description&&(qn+=", description: ".concat(Gr.error_description))}catch(Fi){}}ji.newAuthErr({authId:zs,level:"error",source:"auth",message:qn})})}};function Vr(Qn){return{type:$e,payload:Qn}}function qr(Qn){return{type:Ie,payload:Qn}}var On=function(){return function(Qn){var ur=Qn.authSelectors;if((0,Qn.getConfigs)().persistAuthorization){var In=ur.authorized();localStorage.setItem("authorized",(0,l.default)(In.toJS()))}}},Jn=function(Qn,ur){return function(){R.Z.swaggerUIRedirectOauth2=ur,R.Z.open(Qn)}}},3705:(n,s,t)=>{t.r(s),t.d(s,{default:()=>Q,preauthorizeBasic:()=>oe,preauthorizeApiKey:()=>le});var o=t(775),l=t(5527),_=t(5171),C=t(3962),R=t(5812),N=t(35),V=t(8302);function Q(){return{afterLoad:function(_e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=_e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=(0,l.default)(le).call(le,null,_e),this.rootInjects.preauthorizeBasic=(0,l.default)(oe).call(oe,null,_e)},statePlugins:{auth:{reducers:C.default,actions:R,selectors:N},spec:{wrapActions:V}}}}function oe(_e,ye,$e,Ie){var ke,we=_e.authActions.authorize,G=_e.specSelectors,Dt=G.specJson,bt=(0,G.isOAS3)()?["components","securitySchemes"]:["securityDefinitions"],Bt=Dt().getIn((0,_.default)(ke=[]).call(ke,bt,[ye]));return Bt?we((0,o.default)({},ye,{value:{username:$e,password:Ie},schema:Bt.toJS()})):null}function le(_e,ye,$e){var Ie,ke=_e.authActions.authorize,we=_e.specSelectors,G=we.specJson,Dt=(0,we.isOAS3)()?["components","securitySchemes"]:["securityDefinitions"],bt=G().getIn((0,_.default)(Ie=[]).call(Ie,Dt,[ye]));return bt?ke((0,o.default)({},ye,{value:$e,schema:bt.toJS()})):null}},3962:(n,s,t)=>{t.r(s),t.d(s,{default:()=>oe});var o,l=t(775),_=t(9334),C=t(29),R=t(7512),N=t(9725),V=t(6298),Q=t(5812);const oe=((0,l.default)(o={},Q.SHOW_AUTH_POPUP,function(le,_e){return le.set("showDefinitions",_e.payload)}),(0,l.default)(o,Q.AUTHORIZE,function(le,_e){var ye,Ie=(0,N.fromJS)(_e.payload),ke=le.get("authorized")||(0,N.Map)();return(0,C.default)(ye=Ie.entrySeq()).call(ye,function(we){var G=(0,_.default)(we,2),Dt=G[0],bt=G[1];if(!(0,V.Wl)(bt.getIn))return le.set("authorized",ke);var Bt=bt.getIn(["schema","type"]);if("apiKey"===Bt||"http"===Bt)ke=ke.set(Dt,bt);else if("basic"===Bt){var Jt=bt.getIn(["value","username"]),Mn=bt.getIn(["value","password"]);ke=(ke=ke.setIn([Dt,"value"],{username:Jt,header:"Basic "+(0,V.r3)(Jt+":"+Mn)})).setIn([Dt,"schema"],bt.get("schema"))}}),le.set("authorized",ke)}),(0,l.default)(o,Q.AUTHORIZE_OAUTH2,function(le,_e){var ye,$e=_e.payload,Ie=$e.auth;Ie.token=(0,R.default)({},$e.token),ye=(0,N.fromJS)(Ie);var we=le.get("authorized")||(0,N.Map)();return we=we.set(ye.get("name"),ye),le.set("authorized",we)}),(0,l.default)(o,Q.LOGOUT,function(le,_e){var ye=_e.payload,$e=le.get("authorized").withMutations(function(Ie){(0,C.default)(ye).call(ye,function(ke){Ie.delete(ke)})});return le.set("authorized",$e)}),(0,l.default)(o,Q.CONFIGURE_AUTH,function(le,_e){return le.set("configs",_e.payload)}),(0,l.default)(o,Q.RESTORE_AUTHORIZATION,function(le,_e){return le.set("authorized",(0,N.fromJS)(_e.payload.authorized))}),o)},35:(n,s,t)=>{t.r(s),t.d(s,{shownDefinitions:()=>_e,definitionsToAuthorize:()=>ye,getDefinitionsByNames:()=>$e,definitionsForRequirements:()=>Ie,authorized:()=>ke,isAuthorized:()=>we,getConfigs:()=>G});var o=t(9334),l=t(29),_=t(6145),C=t(9963),R=t(8818),N=t(2565),V=t(2740),Q=t(8639),oe=t(9725),le=function(Dt){return Dt},_e=(0,Q.createSelector)(le,function(Dt){return Dt.get("showDefinitions")}),ye=(0,Q.createSelector)(le,function(){return function(Dt){var bt,Bt=Dt.specSelectors.securityDefinitions()||(0,oe.Map)({}),Jt=(0,oe.List)();return(0,l.default)(bt=Bt.entrySeq()).call(bt,function(Mn){var zt=(0,o.default)(Mn,2),xn=zt[0],Nn=zt[1],zr=(0,oe.Map)();zr=zr.set(xn,Nn),Jt=Jt.push(zr)}),Jt}}),$e=function(Dt,bt){return function(Bt){var Jt,Mn=Bt.specSelectors;console.warn("WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.");var zt=Mn.securityDefinitions(),xn=(0,oe.List)();return(0,l.default)(Jt=bt.valueSeq()).call(Jt,function(Nn){var zr,Hr=(0,oe.Map)();(0,l.default)(zr=Nn.entrySeq()).call(zr,function(Vr){var qr,On,Jn=(0,o.default)(Vr,2),Qn=Jn[0],ur=Jn[1],In=zt.get(Qn);"oauth2"===In.get("type")&&ur.size&&(qr=In.get("scopes"),(0,l.default)(On=qr.keySeq()).call(On,function(Yr){ur.contains(Yr)||(qr=qr.delete(Yr))}),In=In.set("allowedScopes",qr)),Hr=Hr.set(Qn,In)}),xn=xn.push(Hr)}),xn}},Ie=function(Dt){var bt=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,oe.List)();return function(Bt){var Jt=Bt.authSelectors.definitionsToAuthorize()||(0,oe.List)();return(0,_.default)(Jt).call(Jt,function(Mn){return(0,C.default)(bt).call(bt,function(zt){return zt.get(Mn.keySeq().first())})})}},ke=(0,Q.createSelector)(le,function(Dt){return Dt.get("authorized")||(0,oe.Map)()}),we=function(Dt,bt){return function(Bt){var Jt,Mn=Bt.authSelectors.authorized();return oe.List.isList(bt)?!!(0,_.default)(Jt=bt.toJS()).call(Jt,function(zt){var xn,Nn;return-1===(0,R.default)(xn=(0,N.default)(Nn=(0,V.default)(zt)).call(Nn,function(zr){return!!Mn.get(zr)})).call(xn,!1)}).length:null}},G=(0,Q.createSelector)(le,function(Dt){return Dt.get("configs")})},8302:(n,s,t)=>{t.r(s),t.d(s,{execute:()=>l});var o=t(1013),l=function(_,C){var R=C.authSelectors,N=C.specSelectors;return function(V){var Q=V.path,oe=V.method,le=V.operation,_e=V.extras,ye={authorized:R.authorized()&&R.authorized().toJS(),definitions:N.securityDefinitions()&&N.securityDefinitions().toJS(),specSecurity:N.security()&&N.security().toJS()};return _((0,o.default)({path:Q,method:oe,operation:le,securities:ye},_e))}}},714:(n,s,t)=>{t.r(s),t.d(s,{UPDATE_CONFIGS:()=>l,TOGGLE_CONFIGS:()=>_,update:()=>C,toggle:()=>R,loaded:()=>N});var o=t(775),l="configs_update",_="configs_toggle";function C(V,Q){return{type:l,payload:(0,o.default)({},V,Q)}}function R(V){return{type:_,payload:V}}var N=function(){return function(V){var oe=V.authActions;if((0,V.getConfigs)().persistAuthorization){var le=localStorage.getItem("authorized");le&&oe.restoreAuthorization({authorized:JSON.parse(le)})}}}},2256:(n,s,t)=>{t.r(s),t.d(s,{parseYamlConfig:()=>l});var o=t(626),l=function(_,C){try{return o.default.load(_)}catch(R){return C&&C.errActions.newThrownErr(new Error(R)),{}}}},1661:(n,s,t)=>{t.r(s),t.d(s,{default:()=>Q});var o=t(5163),l=t(2256),_=t(714),C=t(2698),R=t(9018),N=t(7743),V={getLocalConfig:function(){return(0,l.parseYamlConfig)(o)}};function Q(){return{statePlugins:{spec:{actions:C,selectors:V},configs:{reducers:N.default,actions:_,selectors:R}}}}},7743:(n,s,t)=>{t.r(s),t.d(s,{default:()=>R});var o,l=t(775),_=t(9725),C=t(714);const R=((0,l.default)(o={},C.UPDATE_CONFIGS,function(N,V){return N.merge((0,_.fromJS)(V.payload))}),(0,l.default)(o,C.TOGGLE_CONFIGS,function(N,V){var Q=V.payload,oe=N.get(Q);return N.set(Q,!oe)}),o)},9018:(n,s,t)=>{t.r(s),t.d(s,{get:()=>l});var o=t(4163),l=function(_,C){return _.getIn((0,o.default)(C)?C:[C])}},2698:(n,s,t)=>{t.r(s),t.d(s,{downloadConfig:()=>l,getConfigByUrl:()=>_});var o=t(2256),l=function(C){return function(R){return(0,R.fn.fetch)(C)}},_=function(C,R){return function(N){var V=N.specActions;if(C)return V.downloadConfig(C).then(Q,Q);function Q(oe){oe instanceof Error||oe.status>=400?(V.updateLoadingStatus("failedConfig"),V.updateLoadingStatus("failedConfig"),V.updateUrl(""),console.error(oe.statusText+" "+C.url),R(null)):R((0,o.parseYamlConfig)(oe.text))}}}},1970:(n,s,t)=>{t.r(s),t.d(s,{setHash:()=>o});var o=function(l){return l?history.pushState(null,null,"#".concat(l)):window.location.hash=""}},4980:(n,s,t)=>{t.r(s),t.d(s,{default:()=>C});var o=t(5858),l=t(877),_=t(4584);function C(){return[o.default,{statePlugins:{configs:{wrapActions:{loaded:function(R,N){return function(){R.apply(void 0,arguments);var V=decodeURIComponent(window.location.hash);N.layoutActions.parseDeepLinkHash(V)}}}}},wrapComponents:{operation:l.default,OperationTag:_.default}}]}},5858:(n,s,t)=>{t.r(s),t.d(s,{clearScrollTo:()=>Bt,default:()=>Jt,parseDeepLinkHash:()=>G,readyToScroll:()=>Dt,scrollTo:()=>we,scrollToElement:()=>bt,show:()=>ke});var o=t(775),l=t(9334),_=t(4163),C=t(5171),R=t(8136),N=t(2565),V=t(8818),Q=t(1970);const oe=(t.d(zt={},{default:()=>qP()}),zt);var zt,le,_e=t(6298),ye=t(9725),$e="layout_scroll_to",Ie="layout_clear_scroll",ke=function(Mn,zt){var xn=zt.getConfigs,Nn=zt.layoutSelectors;return function(){for(var zr=arguments.length,Hr=new Array(zr),Vr=0;Vr<zr;Vr++)Hr[Vr]=arguments[Vr];if(Mn.apply(void 0,Hr),xn().deepLinking)try{var qr=Hr[0],On=Hr[1];qr=(0,_.default)(qr)?qr:[qr];var Jn=Nn.urlHashArrayFromIsShownKey(qr);if(!Jn.length)return;var Qn,ur=(0,l.default)(Jn,2),In=ur[0],Yr=ur[1];if(!On)return(0,Q.setHash)("/");2===Jn.length?(0,Q.setHash)((0,_e.oJ)((0,C.default)(Qn="/".concat(encodeURIComponent(In),"/")).call(Qn,encodeURIComponent(Yr)))):1===Jn.length&&(0,Q.setHash)((0,_e.oJ)("/".concat(encodeURIComponent(In))))}catch(Qi){console.error(Qi)}}},we=function(Mn){return{type:$e,payload:(0,_.default)(Mn)?Mn:[Mn]}},G=function(Mn){return function(zt){var xn=zt.layoutActions,Nn=zt.layoutSelectors;if((0,zt.getConfigs)().deepLinking&&Mn){var zr,Hr=(0,R.default)(Mn).call(Mn,1);"!"===Hr[0]&&(Hr=(0,R.default)(Hr).call(Hr,1)),"/"===Hr[0]&&(Hr=(0,R.default)(Hr).call(Hr,1));var Vr=(0,N.default)(zr=Hr.split("/")).call(zr,function(Di){return Di||""}),qr=Nn.isShownKeyFromUrlHashArray(Vr),On=(0,l.default)(qr,3),Qn=On[1],ur=void 0===Qn?"":Qn,In=On[2],Yr=void 0===In?"":In;if("operations"===On[0]){var Qi=Nn.isShownKeyFromUrlHashArray([ur]);(0,V.default)(ur).call(ur,"_")>-1&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),xn.show((0,N.default)(Qi).call(Qi,function(Di){return Di.replace(/_/g," ")}),!0)),xn.show(Qi,!0)}((0,V.default)(ur).call(ur,"_")>-1||(0,V.default)(Yr).call(Yr,"_")>-1)&&(console.warn("Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead."),xn.show((0,N.default)(qr).call(qr,function(Di){return Di.replace(/_/g," ")}),!0)),xn.show(qr,!0),xn.scrollTo(qr)}}},Dt=function(Mn,zt){return function(xn){var Nn=xn.layoutSelectors.getScrollToKey();ye.default.is(Nn,(0,ye.fromJS)(Mn))&&(xn.layoutActions.scrollToElement(zt),xn.layoutActions.clearScrollTo())}},bt=function(Mn,zt){return function(xn){try{zt=zt||xn.fn.getScrollParent(Mn),oe.default.createScroller(zt).to(Mn)}catch(Nn){console.error(Nn)}}},Bt=function(){return{type:Ie}};const Jt={fn:{getScrollParent:function(Mn,zt){var xn=document.documentElement,Nn=getComputedStyle(Mn),zr="absolute"===Nn.position,Hr=zt?/(auto|scroll|hidden)/:/(auto|scroll)/;if("fixed"===Nn.position)return xn;for(var Vr=Mn;Vr=Vr.parentElement;)if(Nn=getComputedStyle(Vr),(!zr||"static"!==Nn.position)&&Hr.test(Nn.overflow+Nn.overflowY+Nn.overflowX))return Vr;return xn}},statePlugins:{layout:{actions:{scrollToElement:bt,scrollTo:we,clearScrollTo:Bt,readyToScroll:Dt,parseDeepLinkHash:G},selectors:{getScrollToKey:function(Mn){return Mn.get("scrollToKey")},isShownKeyFromUrlHashArray:function(Mn,zt){var xn=(0,l.default)(zt,2),Nn=xn[0],zr=xn[1];return zr?["operations",Nn,zr]:Nn?["operations-tag",Nn]:[]},urlHashArrayFromIsShownKey:function(Mn,zt){var xn=(0,l.default)(zt,3),Nn=xn[0],zr=xn[1];return"operations"==Nn?[zr,xn[2]]:"operations-tag"==Nn?[zr]:[]}},reducers:(le={},(0,o.default)(le,$e,function(Mn,zt){return Mn.set("scrollToKey",ye.default.fromJS(zt.payload))}),(0,o.default)(le,Ie,function(Mn){return Mn.delete("scrollToKey")}),le),wrapActions:{show:ke}}}}},4584:(n,s,t)=>{t.r(s),t.d(s,{default:()=>oe});var o=t(7344),l=t(8656),_=t(6340),C=t(9972),R=t(5416),N=t(775),V=t(5171),Q=t(810);t(5053);const oe=function(le,_e){return function(ye){(0,C.default)(Ie,ye);var $e=(0,R.default)(Ie);function Ie(){var ke,we;(0,o.default)(this,Ie);for(var G=arguments.length,Dt=new Array(G),bt=0;bt<G;bt++)Dt[bt]=arguments[bt];return we=$e.call.apply($e,(0,V.default)(ke=[this]).call(ke,Dt)),(0,N.default)((0,_.default)(we),"onLoad",function(Bt){_e.layoutActions.readyToScroll(["operations-tag",we.props.tag],Bt)}),we}return(0,l.default)(Ie,[{key:"render",value:function(){return Q.default.createElement("span",{ref:this.onLoad},Q.default.createElement(le,this.props))}}]),Ie}(Q.default.Component)}},877:(n,s,t)=>{t.r(s),t.d(s,{default:()=>oe});var o=t(7344),l=t(8656),_=t(6340),C=t(9972),R=t(5416),N=t(775),V=t(5171),Q=t(810);t(9569);const oe=function(le,_e){return function(ye){(0,C.default)(Ie,ye);var $e=(0,R.default)(Ie);function Ie(){var ke,we;(0,o.default)(this,Ie);for(var G=arguments.length,Dt=new Array(G),bt=0;bt<G;bt++)Dt[bt]=arguments[bt];return we=$e.call.apply($e,(0,V.default)(ke=[this]).call(ke,Dt)),(0,N.default)((0,_.default)(we),"onLoad",function(Bt){var Jt=we.props.operation,Mn=Jt.toObject(),zt=Mn.tag,xn=Mn.operationId,Nn=Jt.toObject().isShownKey;_e.layoutActions.readyToScroll(Nn=Nn||["operations",zt,xn],Bt)}),we}return(0,l.default)(Ie,[{key:"render",value:function(){return Q.default.createElement("span",{ref:this.onLoad},Q.default.createElement(le,this.props))}}]),Ie}(Q.default.Component)}},8011:(n,s,t)=>{t.r(s),t.d(s,{default:()=>oe});var o=t(7512),l=t(3769),_=t(5171),C=t(8818),R=t(313),N=t(8639),V=t(9725),Q=t(7504);function oe(le){var _e=le.fn;return{statePlugins:{spec:{actions:{download:function(ye){return function($e){var Ie=$e.errActions,ke=$e.specSelectors,we=$e.specActions,Dt=_e.fetch,bt=(0,$e.getConfigs)();function Bt(Jt){if(Jt instanceof Error||Jt.status>=400)return we.updateLoadingStatus("failed"),Ie.newThrownErr((0,o.default)(new Error((Jt.message||Jt.statusText)+" "+ye),{source:"fetch"})),void(!Jt.status&&Jt instanceof Error&&function(){try{var Mn;if("URL"in Q.Z?Mn=new l.default(ye):(Mn=document.createElement("a")).href=ye,"https:"!==Mn.protocol&&"https:"===Q.Z.location.protocol){var zt=(0,o.default)(new Error("Possible mixed-content issue? The page was loaded over https:// but a ".concat(Mn.protocol,"// URL was specified. Check that you are not attempting to load mixed content.")),{source:"fetch"});return void Ie.newThrownErr(zt)}if(Mn.origin!==Q.Z.location.origin){var xn,Nn=(0,o.default)(new Error((0,_.default)(xn="Possible cross-origin (CORS) issue? The URL origin (".concat(Mn.origin,") does not match the page (")).call(xn,Q.Z.location.origin,"). Check the server returns the correct 'Access-Control-Allow-*' headers.")),{source:"fetch"});Ie.newThrownErr(Nn)}}catch(zr){return}}());we.updateLoadingStatus("success"),we.updateSpec(Jt.text),ke.url()!==ye&&we.updateUrl(ye)}ye=ye||ke.url(),we.updateLoadingStatus("loading"),Ie.clear({source:"fetch"}),Dt({url:ye,loadSpec:!0,requestInterceptor:bt.requestInterceptor||function(Jt){return Jt},responseInterceptor:bt.responseInterceptor||function(Jt){return Jt},credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(Bt,Bt)}},updateLoadingStatus:function(ye){var $e,Ie=[null,"loading","failed","success","failedConfig"];return-1===(0,C.default)(Ie).call(Ie,ye)&&console.error((0,_.default)($e="Error: ".concat(ye," is not one of ")).call($e,(0,R.default)(Ie))),{type:"spec_update_loading_status",payload:ye}}},reducers:{spec_update_loading_status:function(ye,$e){return"string"==typeof $e.payload?ye.set("loadingStatus",$e.payload):ye}},selectors:{loadingStatus:(0,N.createSelector)(function(ye){return ye||(0,V.Map)()},function(ye){return ye.get("loadingStatus")||null})}}}}}},4966:(n,s,t)=>{t.r(s),t.d(s,{NEW_THROWN_ERR:()=>l,NEW_THROWN_ERR_BATCH:()=>_,NEW_SPEC_ERR:()=>C,NEW_SPEC_ERR_BATCH:()=>R,NEW_AUTH_ERR:()=>N,CLEAR:()=>V,CLEAR_BY:()=>Q,newThrownErr:()=>oe,newThrownErrBatch:()=>le,newSpecErr:()=>_e,newSpecErrBatch:()=>ye,newAuthErr:()=>$e,clear:()=>Ie,clearBy:()=>ke});var o=t(8518),l="err_new_thrown_err",_="err_new_thrown_err_batch",C="err_new_spec_err",R="err_new_spec_err_batch",N="err_new_auth_err",V="err_clear",Q="err_clear_by";function oe(we){return{type:l,payload:(0,o.serializeError)(we)}}function le(we){return{type:_,payload:we}}function _e(we){return{type:C,payload:we}}function ye(we){return{type:R,payload:we}}function $e(we){return{type:N,payload:we}}function Ie(){var we=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:V,payload:we}}function ke(){var we=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!0};return{type:Q,payload:we}}},6808:(n,s,t)=>{t.r(s),t.d(s,{default:()=>R});var o=t(6145),l=t(2565);const _=(t.d(V={},{default:()=>tN()}),V);var V,C=[t(2392),t(1835)];function R(N){var V,Q={jsSpec:{}},oe=(0,_.default)(C,function(le,_e){try{var ye=_e.transform(le,Q);return(0,o.default)(ye).call(ye,function($e){return!!$e})}catch($e){return console.error("Transformer error:",$e),le}},N);return(0,l.default)(V=(0,o.default)(oe).call(oe,function(le){return!!le})).call(V,function(le){return!le.get("line")&&le.get("path"),le})}},2392:(n,s,t)=>{t.r(s),t.d(s,{transform:()=>R});var o=t(2565),l=t(8818),_=t(8136),C=t(6785);function R(N){return(0,o.default)(N).call(N,function(V){var Q,Ie,oe="is not of a type(s)",le=(0,l.default)(Q=V.get("message")).call(Q,oe);if(le>-1){var _e,ye,$e=(0,_.default)(_e=V.get("message")).call(_e,le+oe.length).split(",");return V.set("message",(0,_.default)(ye=V.get("message")).call(ye,0,le)+(0,C.default)(Ie=$e).call(Ie,function(ke,we,G,Dt){return G===Dt.length-1&&Dt.length>1?ke+"or "+we:Dt[G+1]&&Dt.length>2?ke+we+", ":Dt[G+1]?ke+we+" ":ke+we},"should be a"))}return V})}},1835:(n,s,t)=>{function o(l,_){return l}t.r(s),t.d(s,{transform:()=>o}),t(2565),t(8818),t(9908),t(9725)},7793:(n,s,t)=>{t.r(s),t.d(s,{default:()=>C});var o=t(3527),l=t(4966),_=t(7667);function C(R){return{statePlugins:{err:{reducers:(0,o.default)(R),actions:l,selectors:_}}}}},3527:(n,s,t)=>{t.r(s),t.d(s,{default:()=>_e});var o=t(775),l=t(7512),_=t(2565),C=t(5171),R=t(6145),N=t(7930),V=t(4966),Q=t(9725),oe=t(6808),le={line:0,level:"error",message:"Unknown error"};function _e(){var ye;return(0,o.default)(ye={},V.NEW_THROWN_ERR,function($e,Ie){var we=(0,l.default)(le,Ie.payload,{type:"thrown"});return $e.update("errors",function(G){return(G||(0,Q.List)()).push((0,Q.fromJS)(we))}).update("errors",function(G){return(0,oe.default)(G)})}),(0,o.default)(ye,V.NEW_THROWN_ERR_BATCH,function($e,Ie){var ke=Ie.payload;return ke=(0,_.default)(ke).call(ke,function(we){return(0,Q.fromJS)((0,l.default)(le,we,{type:"thrown"}))}),$e.update("errors",function(we){var G;return(0,C.default)(G=we||(0,Q.List)()).call(G,(0,Q.fromJS)(ke))}).update("errors",function(we){return(0,oe.default)(we)})}),(0,o.default)(ye,V.NEW_SPEC_ERR,function($e,Ie){var we=(0,Q.fromJS)(Ie.payload);return we=we.set("type","spec"),$e.update("errors",function(G){return(G||(0,Q.List)()).push((0,Q.fromJS)(we)).sortBy(function(Dt){return Dt.get("line")})}).update("errors",function(G){return(0,oe.default)(G)})}),(0,o.default)(ye,V.NEW_SPEC_ERR_BATCH,function($e,Ie){var ke=Ie.payload;return ke=(0,_.default)(ke).call(ke,function(we){return(0,Q.fromJS)((0,l.default)(le,we,{type:"spec"}))}),$e.update("errors",function(we){var G;return(0,C.default)(G=we||(0,Q.List)()).call(G,(0,Q.fromJS)(ke))}).update("errors",function(we){return(0,oe.default)(we)})}),(0,o.default)(ye,V.NEW_AUTH_ERR,function($e,Ie){var we=(0,Q.fromJS)((0,l.default)({},Ie.payload));return we=we.set("type","auth"),$e.update("errors",function(G){return(G||(0,Q.List)()).push((0,Q.fromJS)(we))}).update("errors",function(G){return(0,oe.default)(G)})}),(0,o.default)(ye,V.CLEAR,function($e,Ie){var ke,we=Ie.payload;if(!we||!$e.get("errors"))return $e;var G=(0,R.default)(ke=$e.get("errors")).call(ke,function(Dt){var bt;return(0,N.default)(bt=Dt.keySeq()).call(bt,function(Bt){var Jt=Dt.get(Bt),Mn=we[Bt];return!Mn||Jt!==Mn})});return $e.merge({errors:G})}),(0,o.default)(ye,V.CLEAR_BY,function($e,Ie){var ke,we=Ie.payload;if(!we||"function"!=typeof we)return $e;var G=(0,R.default)(ke=$e.get("errors")).call(ke,function(Dt){return we(Dt)});return $e.merge({errors:G})}),ye}},7667:(n,s,t)=>{t.r(s),t.d(s,{allErrors:()=>_,lastError:()=>C});var o=t(9725),l=t(8639),_=(0,l.createSelector)(function(R){return R},function(R){return R.get("errors",(0,o.List)())}),C=(0,l.createSelector)(_,function(R){return R.last()})},9978:(n,s,t)=>{t.r(s),t.d(s,{default:()=>l});var o=t(4309);function l(){return{fn:{opsFilter:o.default}}}},4309:(n,s,t)=>{t.r(s),t.d(s,{default:()=>_});var o=t(6145),l=t(8818);function _(C,R){return(0,o.default)(C).call(C,function(N,V){return-1!==(0,l.default)(V).call(V,R)})}},5474:(n,s,t)=>{t.r(s),t.d(s,{UPDATE_LAYOUT:()=>l,UPDATE_FILTER:()=>_,UPDATE_MODE:()=>C,SHOW:()=>R,updateLayout:()=>N,updateFilter:()=>V,show:()=>Q,changeMode:()=>oe});var o=t(6298),l="layout_update_layout",_="layout_update_filter",C="layout_update_mode",R="layout_show";function N(le){return{type:l,payload:le}}function V(le){return{type:_,payload:le}}function Q(le){var _e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return le=(0,o.AF)(le),{type:R,payload:{thing:le,shown:_e}}}function oe(le){var _e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return le=(0,o.AF)(le),{type:C,payload:{thing:le,mode:_e}}}},6821:(n,s,t)=>{t.r(s),t.d(s,{default:()=>R});var o=t(5672),l=t(5474),_=t(4400),C=t(8989);function R(){return{statePlugins:{layout:{reducers:o.default,actions:l,selectors:_},spec:{wrapSelectors:C}}}}},5672:(n,s,t)=>{t.r(s),t.d(s,{default:()=>N});var o,l=t(775),_=t(5171),C=t(9725),R=t(5474);const N=((0,l.default)(o={},R.UPDATE_LAYOUT,function(V,Q){return V.set("layout",Q.payload)}),(0,l.default)(o,R.UPDATE_FILTER,function(V,Q){return V.set("filter",Q.payload)}),(0,l.default)(o,R.SHOW,function(V,Q){var oe=Q.payload.shown,le=(0,C.fromJS)(Q.payload.thing);return V.update("shown",(0,C.fromJS)({}),function(_e){return _e.set(le,oe)})}),(0,l.default)(o,R.UPDATE_MODE,function(V,Q){var oe,le=Q.payload.thing,_e=Q.payload.mode;return V.setIn((0,_.default)(oe=["modes"]).call(oe,le),(_e||"")+"")}),o)},4400:(n,s,t)=>{t.r(s),t.d(s,{current:()=>N,currentFilter:()=>V,isShown:()=>Q,whatMode:()=>oe,showSummary:()=>le});var o=t(2691),l=t(5171),_=t(8639),C=t(6298),R=t(9725),N=function(_e){return _e.get("layout")},V=function(_e){return _e.get("filter")},Q=function(_e,ye,$e){return ye=(0,C.AF)(ye),_e.get("shown",(0,R.fromJS)({})).get((0,R.fromJS)(ye),$e)},oe=function(_e,ye){var $e,Ie=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return ye=(0,C.AF)(ye),_e.getIn((0,l.default)($e=["modes"]).call($e,(0,o.default)(ye)),Ie)},le=(0,_.createSelector)(function(_e){return _e},function(_e){return!Q(_e,"editor")})},8989:(n,s,t)=>{t.r(s),t.d(s,{taggedOperations:()=>_});var o=t(5171),l=t(8136),_=function(C,R){return function(N){for(var V,Q=arguments.length,oe=new Array(Q>1?Q-1:0),le=1;le<Q;le++)oe[le-1]=arguments[le];var _e=C.apply(void 0,(0,o.default)(V=[N]).call(V,oe)),ye=R.getSystem(),$e=ye.fn,Ie=ye.layoutSelectors,ke=ye.getConfigs,we=ke(),G=we.maxDisplayedTags,Dt=Ie.currentFilter();return Dt&&!0!==Dt&&"true"!==Dt&&"false"!==Dt&&(_e=$e.opsFilter(_e,Dt)),G&&!isNaN(G)&&G>=0&&(_e=(0,l.default)(_e).call(_e,0,G)),_e}}},9150:(n,s,t)=>{t.r(s),t.d(s,{default:()=>l});var o=t(5527);function l(_){var R={debug:0,info:1,log:2,warn:3,error:4},N=function(le){return R[le]||-1},Q=N(_.configs.logLevel);function oe(le){for(var _e,ye=arguments.length,$e=new Array(ye>1?ye-1:0),Ie=1;Ie<ye;Ie++)$e[Ie-1]=arguments[Ie];N(le)>=Q&&(_e=console)[le].apply(_e,$e)}return oe.warn=(0,o.default)(oe).call(oe,null,"warn"),oe.error=(0,o.default)(oe).call(oe,null,"error"),oe.info=(0,o.default)(oe).call(oe,null,"info"),oe.debug=(0,o.default)(oe).call(oe,null,"debug"),{rootInjects:{log:oe}}}},7002:(n,s,t)=>{t.r(s),t.d(s,{UPDATE_SELECTED_SERVER:()=>o,UPDATE_REQUEST_BODY_VALUE:()=>l,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>_,UPDATE_REQUEST_BODY_INCLUSION:()=>C,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>R,UPDATE_REQUEST_CONTENT_TYPE:()=>N,UPDATE_RESPONSE_CONTENT_TYPE:()=>V,UPDATE_SERVER_VARIABLE_VALUE:()=>Q,SET_REQUEST_BODY_VALIDATE_ERROR:()=>oe,CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>le,CLEAR_REQUEST_BODY_VALUE:()=>_e,setSelectedServer:()=>ye,setRequestBodyValue:()=>$e,setRetainRequestBodyValueFlag:()=>Ie,setRequestBodyInclusion:()=>ke,setActiveExamplesMember:()=>we,setRequestContentType:()=>G,setResponseContentType:()=>Dt,setServerVariableValue:()=>bt,setRequestBodyValidateError:()=>Bt,clearRequestBodyValidateError:()=>Jt,initRequestBodyValidateError:()=>Mn,clearRequestBodyValue:()=>zt});var o="oas3_set_servers",l="oas3_set_request_body_value",_="oas3_set_request_body_retain_flag",C="oas3_set_request_body_inclusion",R="oas3_set_active_examples_member",N="oas3_set_request_content_type",V="oas3_set_response_content_type",Q="oas3_set_server_variable_value",oe="oas3_set_request_body_validate_error",le="oas3_clear_request_body_validate_error",_e="oas3_clear_request_body_value";function ye(xn,Nn){return{type:o,payload:{selectedServerUrl:xn,namespace:Nn}}}function $e(xn){return{type:l,payload:{value:xn.value,pathMethod:xn.pathMethod}}}var Ie=function(xn){return{type:_,payload:{value:xn.value,pathMethod:xn.pathMethod}}};function ke(xn){return{type:C,payload:{value:xn.value,pathMethod:xn.pathMethod,name:xn.name}}}function we(xn){return{type:R,payload:{name:xn.name,pathMethod:xn.pathMethod,contextType:xn.contextType,contextName:xn.contextName}}}function G(xn){return{type:N,payload:{value:xn.value,pathMethod:xn.pathMethod}}}function Dt(xn){return{type:V,payload:{value:xn.value,path:xn.path,method:xn.method}}}function bt(xn){return{type:Q,payload:{server:xn.server,namespace:xn.namespace,key:xn.key,val:xn.val}}}var Bt=function(xn){return{type:oe,payload:{path:xn.path,method:xn.method,validationErrors:xn.validationErrors}}},Jt=function(xn){return{type:le,payload:{path:xn.path,method:xn.method}}},Mn=function(xn){var Nn=xn.pathMethod;return{type:le,payload:{path:Nn[0],method:Nn[1]}}},zt=function(xn){return{type:_e,payload:{pathMethod:xn.pathMethod}}}},3723:(n,s,t)=>{t.r(s),t.d(s,{definitionsToAuthorize:()=>_e});var le,o=t(775),l=t(9334),_=t(5171),C=t(29),R=t(6145),N=t(6785),V=t(8639),Q=t(9725),oe=t(7779),_e=(le=(0,V.createSelector)(function(ye){return ye},function(ye){return ye.specSelectors.securityDefinitions()},function(ye,$e){var Ie,ke=(0,Q.List)();return $e&&(0,C.default)(Ie=$e.entrySeq()).call(Ie,function(we){var G,Dt=(0,l.default)(we,2),bt=Dt[0],Bt=Dt[1],Jt=Bt.get("type");if("oauth2"===Jt&&(0,C.default)(G=Bt.get("flows").entrySeq()).call(G,function(xn){var Nn=(0,l.default)(xn,2),Hr=Nn[1],Vr=(0,Q.fromJS)({flow:Nn[0],authorizationUrl:Hr.get("authorizationUrl"),tokenUrl:Hr.get("tokenUrl"),scopes:Hr.get("scopes"),type:Bt.get("type"),description:Bt.get("description")});ke=ke.push(new Q.Map((0,o.default)({},bt,(0,R.default)(Vr).call(Vr,function(qr){return void 0!==qr}))))}),"http"!==Jt&&"apiKey"!==Jt||(ke=ke.push(new Q.Map((0,o.default)({},bt,Bt)))),"openIdConnect"===Jt&&Bt.get("openIdConnectData")){var Mn=Bt.get("openIdConnectData"),zt=Mn.get("grant_types_supported")||["authorization_code","implicit"];(0,C.default)(zt).call(zt,function(xn){var Nn,zr=Mn.get("scopes_supported")&&(0,N.default)(Nn=Mn.get("scopes_supported")).call(Nn,function(Vr,qr){return Vr.set(qr,"")},new Q.Map),Hr=(0,Q.fromJS)({flow:xn,authorizationUrl:Mn.get("authorization_endpoint"),tokenUrl:Mn.get("token_endpoint"),scopes:zr,type:"oauth2",openIdConnectUrl:Bt.get("openIdConnectUrl")});ke=ke.push(new Q.Map((0,o.default)({},bt,(0,R.default)(Hr).call(Hr,function(Vr){return void 0!==Vr}))))})}}),ke}),function(ye,$e){return function(){for(var Ie=$e.getSystem().specSelectors.specJson(),ke=arguments.length,we=new Array(ke),G=0;G<ke;G++)we[G]=arguments[G];if((0,oe.isOAS3)(Ie)){var Dt,bt=$e.getState().getIn(["spec","resolvedSubtrees","components","securitySchemes"]);return le.apply(void 0,(0,_.default)(Dt=[$e,bt]).call(Dt,we))}return ye.apply(void 0,we)}})},3427:(n,s,t)=>{t.r(s),t.d(s,{default:()=>N});var o=t(863),l=t(9334),_=t(2565),C=t(810),R=(t(5053),t(9569),t(9725));const N=function(V){var Q,oe=V.callbacks,_e=V.specPath,ye=(0,V.getComponent)("OperationContainer",!0);if(!oe)return C.default.createElement("span",null,"No callbacks");var $e=(0,_.default)(Q=oe.entrySeq()).call(Q,function(Ie){var ke,we=(0,l.default)(Ie,2),G=we[0],Dt=we[1];return C.default.createElement("div",{key:G},C.default.createElement("h2",null,G),(0,_.default)(ke=Dt.entrySeq()).call(ke,function(bt){var Bt,Jt=(0,l.default)(bt,2),Mn=Jt[0];return"$$ref"===Mn?null:C.default.createElement("div",{key:Mn},(0,_.default)(Bt=Jt[1].entrySeq()).call(Bt,function(xn){var Nn=(0,l.default)(xn,2),zr=Nn[0];if("$$ref"===zr)return null;var Vr=(0,R.fromJS)({operation:Nn[1]});return C.default.createElement(ye,(0,o.default)({},V,{op:Vr,key:zr,tag:"",method:zr,path:Mn,specPath:_e.push(G,Mn,zr),allowTryItOut:!1}))}))}))});return C.default.createElement("div",null,$e)}},6775:(n,s,t)=>{t.r(s),t.d(s,{default:()=>_e});var o=t(7344),l=t(8656),_=t(6340),C=t(9972),R=t(5416),N=t(775),V=t(7512),Q=t(6145),oe=t(2565),le=t(810),_e=(t(5053),function(ye){(0,C.default)(Ie,ye);var $e=(0,R.default)(Ie);function Ie(ke,we){var G;(0,o.default)(this,Ie),G=$e.call(this,ke,we),(0,N.default)((0,_.default)(G),"onChange",function(Mn){var zt=G.props.onChange,xn=Mn.target,Nn=xn.value,zr=xn.name,Hr=(0,V.default)({},G.state.value);zr?Hr[zr]=Nn:Hr=Nn,G.setState({value:Hr},function(){return zt(G.state)})});var Dt=G.props,bt=Dt.name,Bt=Dt.schema,Jt=G.getValue();return G.state={name:bt,schema:Bt,value:Jt},G}return(0,l.default)(Ie,[{key:"getValue",value:function(){var ke=this.props,G=ke.authorized;return G&&G.getIn([ke.name,"value"])}},{key:"render",value:function(){var ke,we,G=this.props,Dt=G.schema,bt=G.getComponent,Bt=G.errSelectors,Jt=G.name,Mn=bt("Input"),zt=bt("Row"),xn=bt("Col"),Nn=bt("authError"),zr=bt("Markdown",!0),Hr=bt("JumpToPath",!0),Vr=(Dt.get("scheme")||"").toLowerCase(),qr=this.getValue(),On=(0,Q.default)(ke=Bt.allErrors()).call(ke,function(ur){return ur.get("authId")===Jt});if("basic"===Vr){var Jn,Qn=qr?qr.get("username"):null;return le.default.createElement("div",null,le.default.createElement("h4",null,le.default.createElement("code",null,Jt||Dt.get("name")),"\xa0 (http, Basic)",le.default.createElement(Hr,{path:["securityDefinitions",Jt]})),Qn&&le.default.createElement("h6",null,"Authorized"),le.default.createElement(zt,null,le.default.createElement(zr,{source:Dt.get("description")})),le.default.createElement(zt,null,le.default.createElement("label",null,"Username:"),Qn?le.default.createElement("code",null," ",Qn," "):le.default.createElement(xn,null,le.default.createElement(Mn,{type:"text",required:"required",name:"username","aria-label":"auth-basic-username",onChange:this.onChange,autoFocus:!0}))),le.default.createElement(zt,null,le.default.createElement("label",null,"Password:"),Qn?le.default.createElement("code",null," ****** "):le.default.createElement(xn,null,le.default.createElement(Mn,{autoComplete:"new-password",name:"password",type:"password","aria-label":"auth-basic-password",onChange:this.onChange}))),(0,oe.default)(Jn=On.valueSeq()).call(Jn,function(ur,In){return le.default.createElement(Nn,{error:ur,key:In})}))}return"bearer"===Vr?le.default.createElement("div",null,le.default.createElement("h4",null,le.default.createElement("code",null,Jt||Dt.get("name")),"\xa0 (http, Bearer)",le.default.createElement(Hr,{path:["securityDefinitions",Jt]})),qr&&le.default.createElement("h6",null,"Authorized"),le.default.createElement(zt,null,le.default.createElement(zr,{source:Dt.get("description")})),le.default.createElement(zt,null,le.default.createElement("label",null,"Value:"),qr?le.default.createElement("code",null," ****** "):le.default.createElement(xn,null,le.default.createElement(Mn,{type:"text","aria-label":"auth-bearer-value",onChange:this.onChange,autoFocus:!0}))),(0,oe.default)(we=On.valueSeq()).call(we,function(ur,In){return le.default.createElement(Nn,{error:ur,key:In})})):le.default.createElement("div",null,le.default.createElement("em",null,le.default.createElement("b",null,Jt)," HTTP authentication: unsupported scheme ","'".concat(Vr,"'")))}}]),Ie}(le.default.Component))},6467:(n,s,t)=>{t.r(s),t.d(s,{default:()=>oe});var o=t(3427),l=t(2458),_=t(5757),C=t(6617),R=t(9928),N=t(5327),V=t(6775),Q=t(6796);const oe={Callbacks:o.default,HttpAuth:V.default,RequestBody:l.default,Servers:C.default,ServersContainer:R.default,RequestBodyEditor:N.default,OperationServers:Q.default,operationLink:_.default}},5757:(n,s,t)=>{t.r(s),t.d(s,{default:()=>Q});var o=t(7344),l=t(8656),_=t(9972),C=t(5416),R=t(313),N=t(2565),V=t(810);t(5053),t(9569);const Q=function(oe){(0,_.default)(_e,oe);var le=(0,C.default)(_e);function _e(){return(0,o.default)(this,_e),le.apply(this,arguments)}return(0,l.default)(_e,[{key:"render",value:function(){var Bt,Jt,ye=this.props,$e=ye.link,Ie=ye.name,ke=(0,ye.getComponent)("Markdown",!0),we=$e.get("operationId")||$e.get("operationRef"),G=$e.get("parameters")&&$e.get("parameters").toJS(),Dt=$e.get("description");return V.default.createElement("div",{className:"operation-link"},V.default.createElement("div",{className:"description"},V.default.createElement("b",null,V.default.createElement("code",null,Ie)),Dt?V.default.createElement(ke,{source:Dt}):null),V.default.createElement("pre",null,"Operation `",we,"`",V.default.createElement("br",null),V.default.createElement("br",null),"Parameters ",("string"!=typeof(Bt=(0,R.default)(G,null,2))?"":(0,N.default)(Jt=Bt.split("\n")).call(Jt,function(Mn,zt){return zt>0?Array(1).join(" ")+Mn:Mn}).join("\n"))||"{}",V.default.createElement("br",null)))}}]),_e}(V.Component)},6796:(n,s,t)=>{t.r(s),t.d(s,{default:()=>le});var o=t(1013),l=t(7344),_=t(8656),C=t(6340),R=t(9972),N=t(5416),V=t(775),Q=t(5171),oe=t(810),le=(t(5053),t(9569),function(_e){(0,R.default)($e,_e);var ye=(0,N.default)($e);function $e(){var Ie,ke;(0,l.default)(this,$e);for(var we=arguments.length,G=new Array(we),Dt=0;Dt<we;Dt++)G[Dt]=arguments[Dt];return ke=ye.call.apply(ye,(0,Q.default)(Ie=[this]).call(Ie,G)),(0,V.default)((0,C.default)(ke),"setSelectedServer",function(bt){var Bt,Jt=ke.props,Mn=Jt.path,zt=Jt.method;return ke.forceUpdate(),ke.props.setSelectedServer(bt,(0,Q.default)(Bt="".concat(Mn,":")).call(Bt,zt))}),(0,V.default)((0,C.default)(ke),"setServerVariableValue",function(bt){var Bt,Jt=ke.props,Mn=Jt.path,zt=Jt.method;return ke.forceUpdate(),ke.props.setServerVariableValue((0,o.default)((0,o.default)({},bt),{},{namespace:(0,Q.default)(Bt="".concat(Mn,":")).call(Bt,zt)}))}),(0,V.default)((0,C.default)(ke),"getSelectedServer",function(){var bt,Bt=ke.props,Mn=Bt.method;return ke.props.getSelectedServer((0,Q.default)(bt="".concat(Bt.path,":")).call(bt,Mn))}),(0,V.default)((0,C.default)(ke),"getServerVariable",function(bt,Bt){var Jt,Mn=ke.props,xn=Mn.method;return ke.props.getServerVariable({namespace:(0,Q.default)(Jt="".concat(Mn.path,":")).call(Jt,xn),server:bt},Bt)}),(0,V.default)((0,C.default)(ke),"getEffectiveServerValue",function(bt){var Bt,Jt=ke.props,zt=Jt.method;return ke.props.getEffectiveServerValue({server:bt,namespace:(0,Q.default)(Bt="".concat(Jt.path,":")).call(Bt,zt)})}),ke}return(0,_.default)($e,[{key:"render",value:function(){var Ie=this.props,ke=Ie.operationServers,we=Ie.pathServers;if(!ke&&!we)return null;var Dt=(0,Ie.getComponent)("Servers"),bt=ke||we,Bt=ke?"operation":"path";return oe.default.createElement("div",{className:"opblock-section operation-servers"},oe.default.createElement("div",{className:"opblock-section-header"},oe.default.createElement("div",{className:"tab-header"},oe.default.createElement("h4",{className:"opblock-title"},"Servers"))),oe.default.createElement("div",{className:"opblock-description-wrapper"},oe.default.createElement("h4",{className:"message"},"These ",Bt,"-level options override the global server options."),oe.default.createElement(Dt,{servers:bt,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}]),$e}(oe.default.Component))},5327:(n,s,t)=>{t.r(s),t.d(s,{default:()=>_e});var o=t(7344),l=t(8656),_=t(6340),C=t(9972),R=t(5416),N=t(775),V=t(810),Q=(t(5053),t(8096)),oe=t(6298),le=Function.prototype,_e=function(ye){(0,C.default)(Ie,ye);var $e=(0,R.default)(Ie);function Ie(ke,we){var G;return(0,o.default)(this,Ie),G=$e.call(this,ke,we),(0,N.default)((0,_.default)(G),"applyDefaultValue",function(Dt){var bt=Dt||G.props,Bt=bt.onChange,Jt=bt.defaultValue;return G.setState({value:Jt}),Bt(Jt)}),(0,N.default)((0,_.default)(G),"onChange",function(Dt){G.props.onChange((0,oe.Pz)(Dt))}),(0,N.default)((0,_.default)(G),"onDomChange",function(Dt){var bt=Dt.target.value;G.setState({value:bt},function(){return G.onChange(bt)})}),G.state={value:(0,oe.Pz)(ke.value)||ke.defaultValue},ke.onChange(ke.value),G}return(0,l.default)(Ie,[{key:"UNSAFE_componentWillReceiveProps",value:function(ke){this.props.value!==ke.value&&ke.value!==this.state.value&&this.setState({value:(0,oe.Pz)(ke.value)}),!ke.value&&ke.defaultValue&&this.state.value&&this.applyDefaultValue(ke)}},{key:"render",value:function(){var ke=this.props,G=ke.errors,Dt=this.state.value,bt=G.size>0,Bt=(0,ke.getComponent)("TextArea");return V.default.createElement("div",{className:"body-param"},V.default.createElement(Bt,{className:(0,Q.default)("body-param__text",{invalid:bt}),title:G.size?G.join(", "):"",value:Dt,onChange:this.onDomChange}))}}]),Ie}(V.PureComponent);(0,N.default)(_e,"defaultProps",{onChange:le,userHasEditedBody:!1})},2458:(n,s,t)=>{t.r(s),t.d(s,{getDefaultRequestBodyValue:()=>_e,default:()=>ye});var o=t(9334),l=t(2565),_=t(8818),C=t(2372),R=t(5171),N=t(4163),V=t(810),Q=(t(5053),t(9569),t(9725)),oe=t(6298),le=t(2518),_e=function($e,Ie,ke){var we=$e.getIn(["content",Ie]),G=we.get("schema").toJS(),Dt=void 0!==we.get("examples"),bt=we.get("example"),Bt=Dt?we.getIn(["examples",ke,"value"]):bt,Jt=(0,oe.xi)(G,Ie,{includeWriteOnly:!0},Bt);return(0,oe.Pz)(Jt)};const ye=function($e){var Ie=$e.userHasEditedBody,ke=$e.requestBody,we=$e.requestBodyValue,G=$e.requestBodyInclusionSetting,Dt=$e.requestBodyErrors,bt=$e.getComponent,Bt=$e.getConfigs,Jt=$e.specSelectors,Mn=$e.fn,zt=$e.contentType,xn=$e.isExecute,Nn=$e.specPath,zr=$e.onChange,Hr=$e.onChangeIncludeEmpty,Vr=$e.activeExamplesKey,qr=$e.updateActiveExamplesKey,On=$e.setRetainRequestBodyValueFlag,Jn=function(wr){var Gr={key:wr,shouldDispatchInit:!1,defaultValue:!0};return"no value"===G.get(wr,"no value")&&(Gr.shouldDispatchInit=!0),Gr},Qn=bt("Markdown",!0),ur=bt("modelExample"),In=bt("RequestBodyEditor"),Yr=bt("highlightCode"),Qi=bt("ExamplesSelectValueRetainer"),Di=bt("Example"),ji=bt("ParameterIncludeEmpty"),Wr=Bt().showCommonExtensions,Bn=ke&&ke.get("description")||null,bn=ke&&ke.get("content")||new Q.OrderedMap;zt=zt||bn.keySeq().first()||"";var Xr=bn.get(zt,(0,Q.OrderedMap)()),Ni=Xr.get("schema",(0,Q.OrderedMap)()),Xi=Xr.get("examples",null),Bo=null==Xi?void 0:(0,l.default)(Xi).call(Xi,function(wr,Gr){var Fi,Ws=null===(Fi=wr)||void 0===Fi?void 0:Fi.get("value",null);return Ws&&(wr=wr.set("value",_e(ke,zt,Gr),Ws)),wr});if(Dt=Q.List.isList(Dt)?Dt:(0,Q.List)(),!Xr.size)return null;var Ao="object"===Xr.getIn(["schema","type"]),zs="binary"===Xr.getIn(["schema","format"]),Qs="base64"===Xr.getIn(["schema","format"]);if("application/octet-stream"===zt||0===(0,_.default)(zt).call(zt,"image/")||0===(0,_.default)(zt).call(zt,"audio/")||0===(0,_.default)(zt).call(zt,"video/")||zs||Qs){var Ii=bt("Input");return xn?V.default.createElement(Ii,{type:"file",onChange:function(wr){zr(wr.target.files[0])}}):V.default.createElement("i",null,"Example values are not available for ",V.default.createElement("code",null,zt)," media types.")}if(Ao&&("application/x-www-form-urlencoded"===zt||0===(0,_.default)(zt).call(zt,"multipart/"))&&Ni.get("properties",(0,Q.OrderedMap)()).size>0){var uo,bo=bt("JsonSchemaForm"),Qe=bt("ParameterExt"),Pt=Ni.get("properties",(0,Q.OrderedMap)());return we=Q.Map.isMap(we)?we:(0,Q.OrderedMap)(),V.default.createElement("div",{className:"table-container"},Bn&&V.default.createElement(Qn,{source:Bn}),V.default.createElement("table",null,V.default.createElement("tbody",null,Q.Map.isMap(Pt)&&(0,l.default)(uo=Pt.entrySeq()).call(uo,function(wr){var Gr,Fi,Ws=(0,o.default)(wr,2),Zo=Ws[0],ol=Ws[1];if(!ol.get("readOnly")){var gl=Wr?(0,oe.po)(ol):null,Zl=(0,C.default)(Gr=Ni.get("required",(0,Q.List)())).call(Gr,Zo),Ju=ol.get("type"),Gf=ol.get("format"),wl=ol.get("description"),Zc=we.getIn([Zo,"value"]),gp=we.getIn([Zo,"errors"])||Dt,Fh=G.get(Zo)||!1,oh=ol.has("default")||ol.has("example")||ol.hasIn(["items","example"])||ol.hasIn(["items","default"]),Lh=ol.has("enum")&&(1===ol.get("enum").size||Zl),zl=oh||Lh,$c="";"array"!==Ju||zl||($c=[]),("object"===Ju||zl)&&($c=(0,oe.xi)(ol,!1,{includeWriteOnly:!0})),"string"!=typeof $c&&"object"===Ju&&($c=(0,oe.Pz)($c)),"string"==typeof $c&&"array"===Ju&&($c=JSON.parse($c));var Fp="string"===Ju&&("binary"===Gf||"base64"===Gf);return V.default.createElement("tr",{key:Zo,className:"parameters","data-property-name":Zo},V.default.createElement("td",{className:"parameters-col_name"},V.default.createElement("div",{className:Zl?"parameter__name required":"parameter__name"},Zo,Zl?V.default.createElement("span",null,"\xa0*"):null),V.default.createElement("div",{className:"parameter__type"},Ju,Gf&&V.default.createElement("span",{className:"prop-format"},"($",Gf,")"),Wr&&gl.size?(0,l.default)(Fi=gl.entrySeq()).call(Fi,function(Zi){var mr,Mi=(0,o.default)(Zi,2),eo=Mi[0],No=Mi[1];return V.default.createElement(Qe,{key:(0,R.default)(mr="".concat(eo,"-")).call(mr,No),xKey:eo,xVal:No})}):null),V.default.createElement("div",{className:"parameter__deprecated"},ol.get("deprecated")?"deprecated":null)),V.default.createElement("td",{className:"parameters-col_description"},V.default.createElement(Qn,{source:wl}),xn?V.default.createElement("div",null,V.default.createElement(bo,{fn:Mn,dispatchInitialValue:!Fp,schema:ol,description:Zo,getComponent:bt,value:void 0===Zc?$c:Zc,required:Zl,errors:gp,onChange:function(Zi){zr(Zi,[Zo])}}),Zl?null:V.default.createElement(ji,{onChange:function(Zi){return Hr(Zo,Zi)},isIncluded:Fh,isIncludedOptions:Jn(Zo),isDisabled:(0,N.default)(Zc)?0!==Zc.length:!(0,oe.O2)(Zc)})):null))}}))))}var Rt=_e(ke,zt,Vr),qn=null;return(0,le.O)(Rt)&&(qn="json"),V.default.createElement("div",null,Bn&&V.default.createElement(Qn,{source:Bn}),Bo?V.default.createElement(Qi,{userHasEditedBody:Ie,examples:Bo,currentKey:Vr,currentUserInputValue:we,onSelect:function(wr){qr(wr)},updateValue:zr,defaultToFirstExample:!0,getComponent:bt,setRetainRequestBodyValueFlag:On}):null,xn?V.default.createElement("div",null,V.default.createElement(In,{value:we,errors:Dt,defaultValue:Rt,onChange:zr,getComponent:bt})):V.default.createElement(ur,{getComponent:bt,getConfigs:Bt,specSelectors:Jt,expandDepth:1,isExecute:xn,schema:Xr.get("schema"),specPath:Nn.push("content",zt),example:V.default.createElement(Yr,{className:"body-param__example",getConfigs:Bt,language:qn,value:(0,oe.Pz)(we)||Rt}),includeWriteOnly:!0}),Bo?V.default.createElement(Di,{example:Bo.get(Vr),getComponent:bt,getConfigs:Bt}):null)}},9928:(n,s,t)=>{t.r(s),t.d(s,{default:()=>N});var o=t(7344),l=t(8656),_=t(9972),C=t(5416),R=t(810),N=(t(5053),function(V){(0,_.default)(oe,V);var Q=(0,C.default)(oe);function oe(){return(0,o.default)(this,oe),Q.apply(this,arguments)}return(0,l.default)(oe,[{key:"render",value:function(){var le=this.props,ye=le.oas3Selectors,$e=le.oas3Actions,Ie=le.getComponent,ke=le.specSelectors.servers(),we=Ie("Servers");return ke&&ke.size?R.default.createElement("div",null,R.default.createElement("span",{className:"servers-title"},"Servers"),R.default.createElement(we,{servers:ke,currentServer:ye.selectedServer(),setSelectedServer:$e.setSelectedServer,setServerVariableValue:$e.setServerVariableValue,getServerVariable:ye.serverVariableValue,getEffectiveServerValue:ye.serverEffectiveValue})):null}}]),oe}(R.default.Component))},6617:(n,s,t)=>{t.r(s),t.d(s,{default:()=>$e});var o=t(9334),l=t(7344),_=t(8656),C=t(6340),R=t(9972),N=t(5416),V=t(775),Q=t(5171),oe=t(1778),le=t(2565),_e=t(810),ye=t(9725),$e=(t(5053),t(9569),function(Ie){(0,R.default)(we,Ie);var ke=(0,N.default)(we);function we(){var G,Dt;(0,l.default)(this,we);for(var bt=arguments.length,Bt=new Array(bt),Jt=0;Jt<bt;Jt++)Bt[Jt]=arguments[Jt];return Dt=ke.call.apply(ke,(0,Q.default)(G=[this]).call(G,Bt)),(0,V.default)((0,C.default)(Dt),"onServerChange",function(Mn){Dt.setServer(Mn.target.value)}),(0,V.default)((0,C.default)(Dt),"onServerVariableValueChange",function(Mn){var zt=Dt.props,xn=zt.setServerVariableValue,Nn=zt.currentServer,zr=Mn.target.getAttribute("data-variable");"function"==typeof xn&&xn({server:Nn,key:zr,val:Mn.target.value})}),(0,V.default)((0,C.default)(Dt),"setServer",function(Mn){(0,Dt.props.setSelectedServer)(Mn)}),Dt}return(0,_.default)(we,[{key:"componentDidMount",value:function(){var G,Dt=this.props;Dt.currentServer||this.setServer(null===(G=Dt.servers.first())||void 0===G?void 0:G.get("url"))}},{key:"UNSAFE_componentWillReceiveProps",value:function(G){var Dt=this,bt=G.servers,Bt=G.setServerVariableValue,Jt=G.getServerVariable;if(this.props.currentServer!==G.currentServer||this.props.servers!==G.servers){var Mn,zt=(0,oe.default)(bt).call(bt,function(qr){return qr.get("url")===G.currentServer}),xn=(0,oe.default)(Mn=this.props.servers).call(Mn,function(qr){return qr.get("url")===Dt.props.currentServer})||(0,ye.OrderedMap)();if(!zt)return this.setServer(bt.first().get("url"));var Nn=xn.get("variables")||(0,ye.OrderedMap)(),zr=((0,oe.default)(Nn).call(Nn,function(qr){return qr.get("default")})||(0,ye.OrderedMap)()).get("default"),Hr=zt.get("variables")||(0,ye.OrderedMap)(),Vr=((0,oe.default)(Hr).call(Hr,function(qr){return qr.get("default")})||(0,ye.OrderedMap)()).get("default");(0,le.default)(Hr).call(Hr,function(qr,On){Jt(G.currentServer,On)&&zr===Vr||Bt({server:G.currentServer,key:On,val:qr.get("default")||""})})}}},{key:"render",value:function(){var G,Dt,bt=this,Bt=this.props,Jt=Bt.servers,Mn=Bt.currentServer,zt=Bt.getServerVariable,xn=Bt.getEffectiveServerValue,Nn=((0,oe.default)(Jt).call(Jt,function(Hr){return Hr.get("url")===Mn})||(0,ye.OrderedMap)()).get("variables")||(0,ye.OrderedMap)(),zr=0!==Nn.size;return _e.default.createElement("div",{className:"servers"},_e.default.createElement("label",{htmlFor:"servers"},_e.default.createElement("select",{onChange:this.onServerChange,value:Mn},(0,le.default)(G=Jt.valueSeq()).call(G,function(Hr){return _e.default.createElement("option",{value:Hr.get("url"),key:Hr.get("url")},Hr.get("url"),Hr.get("description")&&" - ".concat(Hr.get("description")))}).toArray())),zr?_e.default.createElement("div",null,_e.default.createElement("div",{className:"computed-url"},"Computed URL:",_e.default.createElement("code",null,xn(Mn))),_e.default.createElement("h4",null,"Server variables"),_e.default.createElement("table",null,_e.default.createElement("tbody",null,(0,le.default)(Dt=Nn.entrySeq()).call(Dt,function(Hr){var Vr,qr=(0,o.default)(Hr,2),On=qr[0],Jn=qr[1];return _e.default.createElement("tr",{key:On},_e.default.createElement("td",null,On),_e.default.createElement("td",null,Jn.get("enum")?_e.default.createElement("select",{"data-variable":On,onChange:bt.onServerVariableValueChange},(0,le.default)(Vr=Jn.get("enum")).call(Vr,function(Qn){return _e.default.createElement("option",{selected:Qn===zt(Mn,On),key:Qn,value:Qn},Qn)})):_e.default.createElement("input",{type:"text",value:zt(Mn,On)||"",onChange:bt.onServerVariableValueChange,"data-variable":On})))})))):null)}}]),we}(_e.default.Component))},7779:(n,s,t)=>{t.r(s),t.d(s,{isOAS3:()=>C,isSwagger2:()=>R,OAS3ComponentWrapFactory:()=>N});var o=t(863),l=t(3590),_=t(810);function C(V){var Q=V.get("openapi");return"string"==typeof Q&&(0,l.default)(Q).call(Q,"3.0.")&&Q.length>4}function R(V){var Q=V.get("swagger");return"string"==typeof Q&&(0,l.default)(Q).call(Q,"2.0")}function N(V){return function(Q,oe){return function(le){return oe&&oe.specSelectors&&oe.specSelectors.specJson?C(oe.specSelectors.specJson())?_.default.createElement(V,(0,o.default)({},le,oe,{Ori:Q})):_.default.createElement(Q,le):(console.warn("OAS3 wrapper: couldn't get spec"),null)}}}},7451:(n,s,t)=>{t.r(s),t.d(s,{default:()=>oe});var o=t(2044),l=t(3723),_=t(1741),C=t(6467),R=t(7761),N=t(7002),V=t(5065),Q=t(9666);function oe(){return{components:C.default,wrapComponents:R.default,statePlugins:{spec:{wrapSelectors:o,selectors:_},auth:{wrapSelectors:l},oas3:{actions:N,reducers:Q.default,selectors:V}}}}},9666:(n,s,t)=>{t.r(s),t.d(s,{default:()=>_e});var o=t(775);const l=(t.d($e={},{default:()=>rN}),$e);var $e,_,C=t(9334),R=t(5487),N=t(8136),V=t(29),Q=t(6785),oe=t(9725),le=t(7002);const _e=((0,o.default)(_={},le.UPDATE_SELECTED_SERVER,function(ye,$e){var Ie=$e.payload,we=Ie.namespace;return ye.setIn(we?[we,"selectedServer"]:["selectedServer"],Ie.selectedServerUrl)}),(0,o.default)(_,le.UPDATE_REQUEST_BODY_VALUE,function(ye,$e){var Ie=$e.payload,ke=Ie.value,G=(0,C.default)(Ie.pathMethod,2),Dt=G[0],bt=G[1];if(!oe.Map.isMap(ke))return ye.setIn(["requestData",Dt,bt,"bodyValue"],ke);var Bt,Jt=ye.getIn(["requestData",Dt,bt,"bodyValue"])||(0,oe.Map)();oe.Map.isMap(Jt)||(Jt=(0,oe.Map)());var Mn=(0,R.default)(ke).call(ke),zt=(0,l.default)(Mn),xn=(0,N.default)(zt).call(zt,0);return(0,V.default)(xn).call(xn,function(Nn){var zr=ke.getIn([Nn]);Jt.has(Nn)&&oe.Map.isMap(zr)||(Bt=Jt.setIn([Nn,"value"],zr))}),ye.setIn(["requestData",Dt,bt,"bodyValue"],Bt)}),(0,o.default)(_,le.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG,function(ye,$e){var Ie=$e.payload,ke=Ie.value,G=(0,C.default)(Ie.pathMethod,2);return ye.setIn(["requestData",G[0],G[1],"retainBodyValue"],ke)}),(0,o.default)(_,le.UPDATE_REQUEST_BODY_INCLUSION,function(ye,$e){var Ie=$e.payload,ke=Ie.value,G=Ie.name,Dt=(0,C.default)(Ie.pathMethod,2);return ye.setIn(["requestData",Dt[0],Dt[1],"bodyInclusion",G],ke)}),(0,o.default)(_,le.UPDATE_ACTIVE_EXAMPLES_MEMBER,function(ye,$e){var Ie=$e.payload,ke=Ie.name,G=Ie.contextType,Dt=Ie.contextName,bt=(0,C.default)(Ie.pathMethod,2);return ye.setIn(["examples",bt[0],bt[1],G,Dt,"activeExample"],ke)}),(0,o.default)(_,le.UPDATE_REQUEST_CONTENT_TYPE,function(ye,$e){var Ie=$e.payload,ke=Ie.value,G=(0,C.default)(Ie.pathMethod,2);return ye.setIn(["requestData",G[0],G[1],"requestContentType"],ke)}),(0,o.default)(_,le.UPDATE_RESPONSE_CONTENT_TYPE,function(ye,$e){var Ie=$e.payload;return ye.setIn(["requestData",Ie.path,Ie.method,"responseContentType"],Ie.value)}),(0,o.default)(_,le.UPDATE_SERVER_VARIABLE_VALUE,function(ye,$e){var Ie=$e.payload,ke=Ie.server,we=Ie.namespace,G=Ie.key;return ye.setIn(we?[we,"serverVariableValues",ke,G]:["serverVariableValues",ke,G],Ie.val)}),(0,o.default)(_,le.SET_REQUEST_BODY_VALIDATE_ERROR,function(ye,$e){var Ie=$e.payload,ke=Ie.path,we=Ie.method,G=Ie.validationErrors,Dt=[];if(Dt.push("Required field is not provided"),G.missingBodyValue)return ye.setIn(["requestData",ke,we,"errors"],(0,oe.fromJS)(Dt));if(G.missingRequiredKeys&&G.missingRequiredKeys.length>0){var bt=G.missingRequiredKeys;return ye.updateIn(["requestData",ke,we,"bodyValue"],(0,oe.fromJS)({}),function(Bt){return(0,Q.default)(bt).call(bt,function(Jt,Mn){return Jt.setIn([Mn,"errors"],(0,oe.fromJS)(Dt))},Bt)})}return console.warn("unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR"),ye}),(0,o.default)(_,le.CLEAR_REQUEST_BODY_VALIDATE_ERROR,function(ye,$e){var Ie=$e.payload,ke=Ie.path,we=Ie.method,G=ye.getIn(["requestData",ke,we,"bodyValue"]);if(!oe.Map.isMap(G))return ye.setIn(["requestData",ke,we,"errors"],(0,oe.fromJS)([]));var Dt=(0,R.default)(G).call(G),bt=(0,l.default)(Dt),Bt=(0,N.default)(bt).call(bt,0);return Bt?ye.updateIn(["requestData",ke,we,"bodyValue"],(0,oe.fromJS)({}),function(Jt){return(0,Q.default)(Bt).call(Bt,function(Mn,zt){return Mn.setIn([zt,"errors"],(0,oe.fromJS)([]))},Jt)}):ye}),(0,o.default)(_,le.CLEAR_REQUEST_BODY_VALUE,function(ye,$e){var ke=(0,C.default)($e.payload.pathMethod,2),we=ke[0],G=ke[1],Dt=ye.getIn(["requestData",we,G,"bodyValue"]);return Dt?oe.Map.isMap(Dt)?ye.setIn(["requestData",we,G,"bodyValue"],(0,oe.Map)()):ye.setIn(["requestData",we,G,"bodyValue"],""):ye}),_)},5065:(n,s,t)=>{t.r(s),t.d(s,{selectedServer:()=>$e,requestBodyValue:()=>Ie,shouldRetainRequestBodyValue:()=>ke,hasUserEditedBody:()=>we,requestBodyInclusionSetting:()=>G,requestBodyErrors:()=>Dt,activeExamplesMember:()=>bt,requestContentType:()=>Bt,responseContentType:()=>Jt,serverVariableValue:()=>Mn,serverVariables:()=>zt,serverEffectiveValue:()=>xn,validateBeforeExecute:()=>Nn,validateShallowRequired:()=>zr});var o=t(2691),l=t(5171),_=t(2565),C=t(29),R=t(2740),N=t(8818),V=t(9725),Q=t(7779),oe=t(2458),le=t(6298);function _e(Hr){return function(){for(var Vr=arguments.length,qr=new Array(Vr),On=0;On<Vr;On++)qr[On]=arguments[On];return function(Jn){var Qn=Jn.getSystem().specSelectors.specJson();return(0,Q.isOAS3)(Qn)?Hr.apply(void 0,qr):null}}}var ye,$e=_e(function(Hr,Vr){return Hr.getIn(Vr?[Vr,"selectedServer"]:["selectedServer"])||""}),Ie=_e(function(Hr,Vr,qr){return Hr.getIn(["requestData",Vr,qr,"bodyValue"])||null}),ke=_e(function(Hr,Vr,qr){return Hr.getIn(["requestData",Vr,qr,"retainBodyValue"])||!1}),we=function(Hr,Vr,qr){return function(On){var Jn=On.getSystem(),Qn=Jn.oas3Selectors,ur=Jn.specSelectors,In=ur.specJson();if((0,Q.isOAS3)(In)){var Yr=!1,Qi=Qn.requestContentType(Vr,qr),Di=Qn.requestBodyValue(Vr,qr);if(V.Map.isMap(Di)&&(Di=(0,le.Pz)(Di.mapEntries(function(Wr){return V.Map.isMap(Wr[1])?[Wr[0],Wr[1].get("value")]:Wr}).toJS())),V.List.isList(Di)&&(Di=(0,le.Pz)(Di)),Qi){var ji=(0,oe.getDefaultRequestBodyValue)(ur.specResolvedSubtree(["paths",Vr,qr,"requestBody"]),Qi,Qn.activeExamplesMember(Vr,qr,"requestBody","requestBody"));Yr=!!Di&&Di!==ji}return Yr}return null}},G=_e(function(Hr,Vr,qr){return Hr.getIn(["requestData",Vr,qr,"bodyInclusion"])||(0,V.Map)()}),Dt=_e(function(Hr,Vr,qr){return Hr.getIn(["requestData",Vr,qr,"errors"])||null}),bt=_e(function(Hr,Vr,qr,On,Jn){return Hr.getIn(["examples",Vr,qr,On,Jn,"activeExample"])||null}),Bt=_e(function(Hr,Vr,qr){return Hr.getIn(["requestData",Vr,qr,"requestContentType"])||null}),Jt=_e(function(Hr,Vr,qr){return Hr.getIn(["requestData",Vr,qr,"responseContentType"])||null}),Mn=_e(function(Hr,Vr,qr){var On;if("string"!=typeof Vr){var Jn=Vr.server,Qn=Vr.namespace;On=Qn?[Qn,"serverVariableValues",Jn,qr]:["serverVariableValues",Jn,qr]}else On=["serverVariableValues",Vr,qr];return Hr.getIn(On)||null}),zt=_e(function(Hr,Vr){var qr;if("string"!=typeof Vr){var On=Vr.server,Jn=Vr.namespace;qr=Jn?[Jn,"serverVariableValues",On]:["serverVariableValues",On]}else qr=["serverVariableValues",Vr];return Hr.getIn(qr)||(0,V.OrderedMap)()}),xn=_e(function(Hr,Vr){var qr,On;if("string"!=typeof Vr){var Qn=Vr.namespace;On=Vr.server,qr=Hr.getIn(Qn?[Qn,"serverVariableValues",On]:["serverVariableValues",On])}else qr=Hr.getIn(["serverVariableValues",On=Vr]);qr=qr||(0,V.OrderedMap)();var ur=On;return(0,_.default)(qr).call(qr,function(In,Yr){ur=ur.replace(new RegExp("{".concat(Yr,"}"),"g"),In)}),ur}),Nn=(ye=function(Hr,Vr){return On=(On=Vr)||[],!!Hr.getIn((0,l.default)(Jn=["requestData"]).call(Jn,(0,o.default)(On),["bodyValue"]));var On,Jn},function(){for(var Hr=arguments.length,Vr=new Array(Hr),qr=0;qr<Hr;qr++)Vr[qr]=arguments[qr];return function(On){var Jn,Qn,ur=On.getSystem().specSelectors.specJson(),In=(0,l.default)(Jn=[]).call(Jn,Vr)[1]||[];return!ur.getIn((0,l.default)(Qn=["paths"]).call(Qn,(0,o.default)(In),["requestBody","required"]))||ye.apply(void 0,Vr)}}),zr=function(Hr,Vr){var qr,On=Vr.oas3RequiredRequestBodyContentType,Jn=Vr.oas3RequestContentType,Qn=Vr.oas3RequestBodyValue,ur=[];if(!V.Map.isMap(Qn))return ur;var In=[];return(0,C.default)(qr=(0,R.default)(On.requestContentType)).call(qr,function(Yr){if(Yr===Jn){var Qi=On.requestContentType[Yr];(0,C.default)(Qi).call(Qi,function(Di){(0,N.default)(In).call(In,Di)<0&&In.push(Di)})}}),(0,C.default)(In).call(In,function(Yr){Qn.getIn([Yr,"value"])||ur.push(Yr)}),ur}},1741:(n,s,t)=>{t.r(s),t.d(s,{servers:()=>Q,isSwagger2:()=>oe});var C,o=t(8639),l=t(9725),_=t(7779),R=function(le){return le||(0,l.Map)()},N=(0,o.createSelector)(R,function(le){return le.get("json",(0,l.Map)())}),V=(0,o.createSelector)(R,function(le){return le.get("resolved",(0,l.Map)())}),Q=(C=(0,o.createSelector)(function(le){var _e=V(le);return _e.count()<1&&(_e=N(le)),_e},function(le){return le.getIn(["servers"])||(0,l.Map)()}),function(){return function(le){var _e=le.getSystem().specSelectors.specJson();if((0,_.isOAS3)(_e)){for(var ye=arguments.length,$e=new Array(ye>1?ye-1:0),Ie=1;Ie<ye;Ie++)$e[Ie-1]=arguments[Ie];return C.apply(void 0,$e)}return null}}),oe=function(le,_e){return function(){var ye=_e.getSystem().specSelectors.specJson();return(0,_.isSwagger2)(ye)}}},2044:(n,s,t)=>{t.r(s),t.d(s,{definitions:()=>_e,hasHost:()=>ye,securityDefinitions:()=>$e,host:()=>Ie,basePath:()=>ke,consumes:()=>we,produces:()=>G,schemes:()=>Dt,servers:()=>bt,isOAS3:()=>Bt,isSwagger2:()=>Jt});var o=t(8639),l=t(3881),_=t(9725),C=t(7779);function R(Mn){return function(zt,xn){return function(){var Nn=xn.getSystem().specSelectors.specJson();return(0,C.isOAS3)(Nn)?Mn.apply(void 0,arguments):zt.apply(void 0,arguments)}}}var N=function(Mn){return Mn||(0,_.Map)()},V=R((0,o.createSelector)(function(){return null})),Q=(0,o.createSelector)(N,function(Mn){return Mn.get("json",(0,_.Map)())}),oe=(0,o.createSelector)(N,function(Mn){return Mn.get("resolved",(0,_.Map)())}),le=function(Mn){var zt=oe(Mn);return zt.count()<1&&(zt=Q(Mn)),zt},_e=R((0,o.createSelector)(le,function(Mn){var zt=Mn.getIn(["components","schemas"]);return _.Map.isMap(zt)?zt:(0,_.Map)()})),ye=R(function(Mn){return le(Mn).hasIn(["servers",0])}),$e=R((0,o.createSelector)(l.specJsonWithResolvedSubtrees,function(Mn){return Mn.getIn(["components","securitySchemes"])||null})),Ie=V,ke=V,we=V,G=V,Dt=V,bt=R((0,o.createSelector)(le,function(Mn){return Mn.getIn(["servers"])||(0,_.Map)()})),Bt=function(Mn,zt){return function(){var xn=zt.getSystem().specSelectors.specJson();return(0,C.isOAS3)(_.Map.isMap(xn)?xn:(0,_.Map)())}},Jt=function(Mn,zt){return function(){var xn=zt.getSystem().specSelectors.specJson();return(0,C.isSwagger2)(_.Map.isMap(xn)?xn:(0,_.Map)())}}},356:(n,s,t)=>{t.r(s),t.d(s,{default:()=>R});var o=t(302),l=t(810),_=t(7779),C=["Ori"];const R=(0,_.OAS3ComponentWrapFactory)(function(N){var V=N.Ori,Q=(0,o.default)(N,C),oe=Q.schema,le=Q.getComponent,_e=Q.errSelectors,ye=Q.authorized,$e=Q.onAuthChange,Ie=Q.name,ke=le("HttpAuth");return"http"===oe.get("type")?l.default.createElement(ke,{key:Ie,schema:oe,name:Ie,errSelectors:_e,authorized:ye,getComponent:le,onChange:$e}):l.default.createElement(V,Q)})},7761:(n,s,t)=>{t.r(s),t.d(s,{default:()=>V});var o=t(2460),l=t(356),_=t(9487),C=t(58),R=t(3499),N=t(287);const V={Markdown:o.default,AuthItem:l.default,JsonSchema_string:N.default,VersionStamp:_.default,model:R.default,onlineValidatorBadge:C.default}},287:(n,s,t)=>{t.r(s),t.d(s,{default:()=>R});var o=t(302),l=t(810),_=t(7779),C=["Ori"];const R=(0,_.OAS3ComponentWrapFactory)(function(N){var V=N.Ori,Q=(0,o.default)(N,C),oe=Q.schema,le=Q.getComponent,_e=Q.errors,ye=Q.onChange,$e=oe&&oe.get?oe.get("format"):null,Ie=oe&&oe.get?oe.get("type"):null,ke=le("Input");return Ie&&"string"===Ie&&$e&&("binary"===$e||"base64"===$e)?l.default.createElement(ke,{type:"file",className:_e.length?"invalid":"",title:_e.length?_e:"",onChange:function(we){ye(we.target.files[0])},disabled:V.isDisabled}):l.default.createElement(V,Q)})},2460:(n,s,t)=>{t.r(s),t.d(s,{Markdown:()=>Q,default:()=>oe});var o=t(5942),l=t(810),_=(t(5053),t(8096)),C=t(3952),R=t(7779),N=t(5466),V=new C.Remarkable("commonmark");V.block.ruler.enable(["table"]),V.set({linkTarget:"_blank"});var Q=function(le){var _e=le.source,ye=le.className,$e=void 0===ye?"":ye;if("string"!=typeof _e)return null;if(_e){var ke,we=(0,le.getConfigs)().useUnsafeMarkdown,G=V.render(_e),Dt=(0,N.s)(G,{useUnsafeMarkdown:we});return"string"==typeof Dt&&(ke=(0,o.default)(Dt).call(Dt)),l.default.createElement("div",{dangerouslySetInnerHTML:{__html:ke},className:(0,_.default)($e,"renderedMarkdown")})}return null};Q.defaultProps={getConfigs:function(){return{useUnsafeMarkdown:!1}}};const oe=(0,R.OAS3ComponentWrapFactory)(Q)},3499:(n,s,t)=>{t.r(s),t.d(s,{default:()=>le});var o=t(863),l=t(7344),_=t(8656),C=t(9972),R=t(5416),N=t(810),V=(t(5053),t(7779)),Q=t(1543),oe=function(_e){(0,C.default)($e,_e);var ye=(0,R.default)($e);function $e(){return(0,l.default)(this,$e),ye.apply(this,arguments)}return(0,_.default)($e,[{key:"render",value:function(){var Ie=this.props,ke=Ie.getConfigs,we=["model-box"],G=null;return!0===Ie.schema.get("deprecated")&&(we.push("deprecated"),G=N.default.createElement("span",{className:"model-deprecated-warning"},"Deprecated:")),N.default.createElement("div",{className:we.join(" ")},G,N.default.createElement(Q.Z,(0,o.default)({},this.props,{getConfigs:ke,depth:1,expandDepth:this.props.expandDepth||0})))}}]),$e}(N.Component);const le=(0,V.OAS3ComponentWrapFactory)(oe)},58:(n,s,t)=>{t.r(s),t.d(s,{default:()=>_});var o=t(7779),l=t(5623);const _=(0,o.OAS3ComponentWrapFactory)(l.Z)},9487:(n,s,t)=>{t.r(s),t.d(s,{default:()=>l});var o=t(810);const l=(0,t(7779).OAS3ComponentWrapFactory)(function(_){return o.default.createElement("span",null,o.default.createElement(_.Ori,_),o.default.createElement("small",{className:"version-stamp"},o.default.createElement("pre",{className:"version"},"OAS3")))})},8560:(n,s,t)=>{t.r(s),t.d(s,{default:()=>_});var o=t(6235),l=!1;function _(){return{statePlugins:{spec:{wrapActions:{updateSpec:function(C){return function(){return l=!0,C.apply(void 0,arguments)}},updateJsonSpec:function(C,R){return function(){var N=R.getConfigs().onComplete;return l&&"function"==typeof N&&((0,o.default)(N,0),l=!1),C.apply(void 0,arguments)}}}}}}}},4624:(n,s,t)=>{t.r(s),t.d(s,{requestSnippetGenerator_curl_bash:()=>Jt,requestSnippetGenerator_curl_cmd:()=>Mn,requestSnippetGenerator_curl_powershell:()=>Bt});var o=t(2691),l=t(9334),_=t(3248),C=t(8818),R=t(5942),N=t(5171),V=t(313),Q=t(2565);const oe=(t.d(xn={},{default:()=>oN()}),xn);var xn,le=t(2954),_e=t(2372),ye=t(7504),$e=t(9725),Ie=function(zt){var xn;return(0,C.default)(zt).call(zt,"_**[]")<0?zt:(0,R.default)(xn=zt.split("_**[]")[0]).call(xn)},ke=function(zt){return"-d "===zt||/^[_\/-]/g.test(zt)?zt:"'"+zt.replace(/'/g,"'\\''")+"'"},we=function(zt){return"-d "===(zt=zt.replace(/\^/g,"^^").replace(/\\"/g,'\\\\"').replace(/"/g,'""').replace(/\n/g,"^\n"))?zt.replace(/-d /g,"-d ^\n"):/^[_\/-]/g.test(zt)?zt:'"'+zt+'"'},G=function(zt){return"-d "===zt?zt:/\n/.test(zt)?'@"\n'+zt.replace(/"/g,'\\"').replace(/`/g,"``").replace(/\$/,"`$")+'\n"@':/^[_\/-]/g.test(zt)?zt:"'"+zt.replace(/"/g,'""').replace(/'/g,"''")+"'"};function Dt(zt){var xn,Nn=[],zr=(0,_.default)(zt.get("body").entrySeq());try{for(zr.s();!(xn=zr.n()).done;){var Hr,Vr,qr,On=(0,l.default)(xn.value,2),Qn=On[1],ur=Ie(On[0]);Nn.push(Qn instanceof ye.Z.File?(0,N.default)(Hr=(0,N.default)(Vr='  "'.concat(ur,'": {\n    "name": "')).call(Vr,Qn.name,'"')).call(Hr,Qn.type?',\n    "type": "'.concat(Qn.type,'"'):"","\n  }"):(0,N.default)(qr='  "'.concat(ur,'": ')).call(qr,(0,V.default)(Qn,null,2).replace(/(\r\n|\r|\n)/g,"\n  ")))}}catch(In){zr.e(In)}finally{zr.f()}return"{\n".concat(Nn.join(",\n"),"\n}")}var bt=function(zt,xn,Nn){var zr=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",Hr=!1,Vr="",qr=function(){for(var Rt=arguments.length,qn=new Array(Rt),wr=0;wr<Rt;wr++)qn[wr]=arguments[wr];return Vr+=" "+(0,Q.default)(qn).call(qn,xn).join(" ")},On=function(){for(var Rt=arguments.length,qn=new Array(Rt),wr=0;wr<Rt;wr++)qn[wr]=arguments[wr];return Vr+=(0,Q.default)(qn).call(qn,xn).join(" ")},Jn=function(){return Vr+=" ".concat(Nn)},Qn=function(){var Rt,qn=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return Vr+=(0,oe.default)(Rt="  ").call(Rt,qn)},ur=zt.get("headers");if(Vr+="curl"+zr,zt.has("curlOptions")&&qr.apply(void 0,(0,o.default)(zt.get("curlOptions"))),qr("-X",zt.get("method")),Jn(),Qn(),On("".concat(zt.get("url"))),ur&&ur.size){var In,Yr,Qi=(0,_.default)((0,le.default)(In=zt.get("headers")).call(In));try{for(Qi.s();!(Yr=Qi.n()).done;){var Di,ji=Yr.value;Jn(),Qn();var Wr=(0,l.default)(ji,2),Bn=Wr[0],bn=Wr[1];On("-H",(0,N.default)(Di="".concat(Bn,": ")).call(Di,bn)),Hr=Hr||/^content-type$/i.test(Bn)&&/^multipart\/form-data$/i.test(bn)}}catch(Rt){Qi.e(Rt)}finally{Qi.f()}}var Xr,Ni=zt.get("body");if(Ni)if(Hr&&(0,_e.default)(Xr=["POST","PUT","PATCH"]).call(Xr,zt.get("method"))){var Xi,Bo=(0,_.default)(Ni.entrySeq());try{for(Bo.s();!(Xi=Bo.n()).done;){var Ao,zs,Qs,Ii=(0,l.default)(Xi.value,2),uo=Ii[0],bo=Ii[1],Qe=Ie(uo);Jn(),Qn(),On("-F"),qr(bo instanceof ye.Z.File?(0,N.default)(Ao=(0,N.default)(zs="".concat(Qe,"=@")).call(zs,bo.name)).call(Ao,bo.type?";type=".concat(bo.type):""):(0,N.default)(Qs="".concat(Qe,"=")).call(Qs,bo))}}catch(Rt){Bo.e(Rt)}finally{Bo.f()}}else if(Ni instanceof ye.Z.File)Jn(),Qn(),On("--data-binary '@".concat(Ni.name,"'"));else{Jn(),Qn(),On("-d ");var Pt=Ni;$e.Map.isMap(Pt)?On(Dt(zt)):("string"!=typeof Pt&&(Pt=(0,V.default)(Pt)),On(Pt))}else Ni||"POST"!==zt.get("method")||(Jn(),Qn(),On("-d ''"));return Vr},Bt=function(zt){return bt(zt,G,"`\n",".exe")},Jt=function(zt){return bt(zt,ke,"\\\n")},Mn=function(zt){return bt(zt,we,"^\n")}},6575:(n,s,t)=>{t.r(s),t.d(s,{default:()=>C});var o=t(4624),l=t(4669),_=t(4206);const C=function(){return{components:{RequestSnippets:_.default},fn:o,statePlugins:{requestSnippets:{selectors:l}}}}},4206:(n,s,t)=>{t.r(s),t.d(s,{default:()=>$e});var o=t(9334),l=t(6145),_=t(8898),C=t(29),R=t(2565),N=t(810),V=(t(5053),t(9908)),Q=t(7068),oe=t(9874),le=t(471),_e={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(250, 250, 250)",paddingBottom:"0",paddingTop:"0",border:"1px solid rgb(51, 51, 51)",borderRadius:"4px 4px 0 0",boxShadow:"none",borderBottom:"none"},ye={cursor:"pointer",lineHeight:1,display:"inline-flex",backgroundColor:"rgb(51, 51, 51)",boxShadow:"none",border:"1px solid rgb(51, 51, 51)",paddingBottom:"0",paddingTop:"0",borderRadius:"4px 4px 0 0",marginTop:"-5px",marginRight:"-5px",marginLeft:"-5px",zIndex:"9999",borderBottom:"none"};const $e=function(Ie){var ke,we,G=Ie.request,Dt=Ie.requestSnippetsSelectors,bt=Ie.getConfigs,Bt=(0,Q.default)(bt)?bt():null,Jt=!1!==(0,V.default)(Bt,"syntaxHighlight")&&(0,V.default)(Bt,"syntaxHighlight.activated",!0),Mn=(0,N.useRef)(null),zt=(0,N.useState)(null===(ke=Dt.getSnippetGenerators())||void 0===ke?void 0:ke.keySeq().first()),xn=(0,o.default)(zt,2),Nn=xn[0],zr=xn[1],Hr=(0,N.useState)(null==Dt?void 0:Dt.getDefaultExpanded()),Vr=(0,o.default)(Hr,2),qr=Vr[0],On=Vr[1];(0,N.useEffect)(function(){},[]),(0,N.useEffect)(function(){var ji,Wr=(0,l.default)(ji=(0,_.default)(Mn.current.childNodes)).call(ji,function(Bn){var bn;return!!Bn.nodeType&&(null===(bn=Bn.classList)||void 0===bn?void 0:bn.contains("curl-command"))});return(0,C.default)(Wr).call(Wr,function(Bn){return Bn.addEventListener("mousewheel",Qi,{passive:!1})}),function(){(0,C.default)(Wr).call(Wr,function(Bn){return Bn.removeEventListener("mousewheel",Qi)})}},[G]);var Jn=Dt.getSnippetGenerators(),Qn=Jn.get(Nn),ur=Qn.get("fn")(G),In=function(){On(!qr)},Yr=function(ji){return ji===Nn?ye:_e},Qi=function(ji){var Wr=ji.target,Bn=ji.deltaY,bn=Wr.scrollHeight,Xr=Wr.offsetHeight,Ni=Wr.scrollTop;bn>Xr&&(0===Ni&&Bn<0||Xr+Ni>=bn&&Bn>0)&&ji.preventDefault()},Di=Jt?N.default.createElement(le.d3,{language:Qn.get("syntax"),className:"curl microlight",style:(0,le.C2)((0,V.default)(Bt,"syntaxHighlight.theme"))},ur):N.default.createElement("textarea",{readOnly:!0,className:"curl",value:ur});return N.default.createElement("div",{className:"request-snippets",ref:Mn},N.default.createElement("div",{style:{width:"100%",display:"flex",justifyContent:"flex-start",alignItems:"center",marginBottom:"15px"}},N.default.createElement("h4",{onClick:function(){return In()},style:{cursor:"pointer"}},"Snippets"),N.default.createElement("button",{onClick:function(){return In()},style:{border:"none",background:"none"},title:qr?"Collapse operation":"Expand operation"},N.default.createElement("svg",{className:"arrow",width:"10",height:"10"},N.default.createElement("use",{href:qr?"#large-arrow-down":"#large-arrow",xlinkHref:qr?"#large-arrow-down":"#large-arrow"})))),qr&&N.default.createElement("div",{className:"curl-command"},N.default.createElement("div",{style:{paddingLeft:"15px",paddingRight:"10px",width:"100%",display:"flex"}},(0,R.default)(we=Jn.entrySeq()).call(we,function(ji){var Wr=(0,o.default)(ji,2),Bn=Wr[0],bn=Wr[1];return N.default.createElement("div",{style:Yr(Bn),className:"btn",key:Bn,onClick:function(){var Xr;Nn!==(Xr=Bn)&&zr(Xr)}},N.default.createElement("h4",{style:Bn===Nn?{color:"white"}:{}},bn.get("title")))})),N.default.createElement("div",{className:"copy-to-clipboard"},N.default.createElement(oe.CopyToClipboard,{text:ur},N.default.createElement("button",null))),N.default.createElement("div",null,Di)))}},4669:(n,s,t)=>{t.r(s),t.d(s,{getGenerators:()=>V,getSnippetGenerators:()=>Q,getActiveLanguage:()=>oe,getDefaultExpanded:()=>le});var o=t(6145),l=t(2372),_=t(2565),C=t(8639),R=t(9725),N=function(_e){return _e||(0,R.Map)()},V=(0,C.createSelector)(N,function(_e){var ye=_e.get("languages"),$e=_e.get("generators",(0,R.Map)());return!ye||ye.isEmpty()?$e:(0,o.default)($e).call($e,function(Ie,ke){return(0,l.default)(ye).call(ye,ke)})}),Q=function(_e){return function(ye){var $e,Ie,ke=ye.fn;return(0,o.default)($e=(0,_.default)(Ie=V(_e)).call(Ie,function(we,G){var Dt=ke["requestSnippetGenerator_".concat(G)];return"function"!=typeof Dt?null:we.set("fn",Dt)})).call($e,function(we){return we})}},oe=(0,C.createSelector)(N,function(_e){return _e.get("activeLanguage")}),le=(0,C.createSelector)(N,function(_e){return _e.get("defaultExpanded")})},6195:(n,s,t)=>{t.r(s),t.d(s,{ErrorBoundary:()=>oe,default:()=>le});var o=t(7344),l=t(8656),_=t(9972),C=t(5416),R=t(5171),N=(t(5053),t(810)),V=t(6189),Q=t(9403),oe=function(_e){(0,_.default)($e,_e);var ye=(0,C.default)($e);function $e(){var Ie,ke;(0,o.default)(this,$e);for(var we=arguments.length,G=new Array(we),Dt=0;Dt<we;Dt++)G[Dt]=arguments[Dt];return(ke=ye.call.apply(ye,(0,R.default)(Ie=[this]).call(Ie,G))).state={hasError:!1,error:null},ke}return(0,l.default)($e,[{key:"componentDidCatch",value:function(Ie,ke){this.props.fn.componentDidCatch(Ie,ke)}},{key:"render",value:function(){var Ie=this.props,we=Ie.targetName,G=Ie.children;if(this.state.hasError){var Dt=(0,Ie.getComponent)("Fallback");return N.default.createElement(Dt,{name:we})}return G}}],[{key:"getDerivedStateFromError",value:function(Ie){return{hasError:!0,error:Ie}}}]),$e}(N.Component);oe.defaultProps={targetName:"this component",getComponent:function(){return Q.default},fn:{componentDidCatch:V.componentDidCatch},children:null};const le=oe},9403:(n,s,t)=>{t.r(s),t.d(s,{default:()=>l});var o=t(810);t(5053);const l=function(_){var C=_.name;return o.default.createElement("div",{className:"fallback"},"\u{1f631} ",o.default.createElement("i",null,"Could not render ","t"===C?"this component":C,", see the console."))}},6189:(n,s,t)=>{t.r(s),t.d(s,{componentDidCatch:()=>V,withErrorBoundary:()=>Q});var o=t(863),l=t(7344),_=t(8656),C=t(9972),R=t(5416),N=t(810),V=console.error,Q=function(oe){return function(le){var _e,ye=oe(),$e=ye.getComponent,Ie=ye.fn,ke=$e("ErrorBoundary"),we=Ie.getDisplayName(le),G=function(Dt){(0,C.default)(Bt,Dt);var bt=(0,R.default)(Bt);function Bt(){return(0,l.default)(this,Bt),bt.apply(this,arguments)}return(0,_.default)(Bt,[{key:"render",value:function(){return N.default.createElement(ke,{targetName:we,getComponent:$e,fn:Ie},N.default.createElement(le,(0,o.default)({},this.props,this.context)))}}]),Bt}(N.Component);return G.displayName="WithErrorBoundary(".concat(we,")"),(_e=le).prototype&&_e.prototype.isReactComponent&&(G.prototype.mapStateToProps=le.prototype.mapStateToProps),G}}},8102:(n,s,t)=>{t.r(s),t.d(s,{default:()=>Q});var o=t(2691),l=t(5171);const _=(t.d(le={},{default:()=>aN()}),le),C=(oe=>{var le={};return t.d(le,oe),le})({default:()=>uN()});var le,R=t(6195),N=t(9403),V=t(6189);const Q=function(){var oe=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},le=oe.componentList,_e=void 0===le?[]:le,ye=oe.fullOverride,$e=void 0!==ye&&ye;return function(Ie){var ke,we,G=Ie.getSystem,Dt=$e?_e:(0,l.default)(ke=[]).call(ke,["App","BaseLayout","VersionPragmaFilter","InfoContainer","ServersContainer","SchemesContainer","AuthorizeBtnContainer","FilterContainer","Operations","OperationContainer","parameters","responses","OperationServers","Models","ModelWrapper"],(0,o.default)(_e)),bt=(0,C.default)(Dt,(0,_.default)(we=Array(Dt.length)).call(we,function(Bt,Jt){return Jt.fn.withErrorBoundary(Bt)}));return{fn:{componentDidCatch:V.componentDidCatch,withErrorBoundary:(0,V.withErrorBoundary)(G)},components:{ErrorBoundary:R.default,Fallback:N.default},wrapComponents:bt}}}},2473:(n,s,t)=>{t.r(s),t.d(s,{createXMLExample:()=>Vr,inferSchema:()=>Hr,memoizedCreateXMLExample:()=>Jn,memoizedSampleFromSchema:()=>Qn,sampleFromSchema:()=>qr,sampleFromSchemaGeneric:()=>zr});var o=t(1581),l=t(5171),_=t(8818),C=t(29),R=t(4163),N=t(2372),V=t(9963),Q=t(8136),oe=t(1778),le=t(2565),_e=t(313),ye=t(3479),$e=t.n(ye);const Ie=(t.d(In={},{default:()=>dN()}),In),ke=(ur=>{var In={};return t.d(In,ur),In})({default:()=>pN()});var In,we=t(6298),G=t(8287),Dt={string:function(ur){return ur.pattern?function(In){try{return new Ie.default(In).gen()}catch(Yr){return"string"}}(ur.pattern):"string"},string_email:function(){return"user@example.com"},"string_date-time":function(){return(new Date).toISOString()},string_date:function(){return(new Date).toISOString().substring(0,10)},string_uuid:function(){return"3fa85f64-5717-4562-b3fc-2c963f66afa6"},string_hostname:function(){return"example.com"},string_ipv4:function(){return"198.51.100.42"},string_ipv6:function(){return"2001:0db8:5b96:0000:0000:426f:8e17:642a"},number:function(){return 0},number_float:function(){return 0},integer:function(){return 0},boolean:function(ur){return"boolean"!=typeof ur.default||ur.default}},bt=function(ur){var In,Yr=ur=(0,we.mz)(ur),Qi=Yr.type,Di=Yr.format,ji=Dt[(0,l.default)(In="".concat(Qi,"_")).call(In,Di)]||Dt[Qi];return(0,we.Wl)(ji)?ji(ur):"Unknown Type: "+ur.type},Bt=function(ur){return(0,we.XV)(ur,"$$ref",function(In){return"string"==typeof In&&(0,_.default)(In).call(In,"#")>-1})},Jt=["maxProperties","minProperties"],Mn=["minItems","maxItems"],zt=["minimum","maximum","exclusiveMinimum","exclusiveMaximum"],xn=["minLength","maxLength"],Nn=function ur(In,Yr){var Qi,Di,ji,Wr=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},Bn=function(Xi){void 0===Yr[Xi]&&void 0!==In[Xi]&&(Yr[Xi]=In[Xi])};if((0,C.default)(Qi=(0,l.default)(Di=["example","default","enum","xml","type"]).call(Di,Jt,Mn,zt,xn)).call(Qi,function(Xi){return Bn(Xi)}),void 0!==In.required&&(0,R.default)(In.required)&&(void 0!==Yr.required&&Yr.required.length||(Yr.required=[]),(0,C.default)(ji=In.required).call(ji,function(Xi){var Bo;(0,N.default)(Bo=Yr.required).call(Bo,Xi)||Yr.required.push(Xi)})),In.properties){Yr.properties||(Yr.properties={});var bn=(0,we.mz)(In.properties);for(var Xr in bn){var Ni;Object.prototype.hasOwnProperty.call(bn,Xr)&&(!bn[Xr]||!bn[Xr].deprecated)&&(!bn[Xr]||!bn[Xr].readOnly||Wr.includeReadOnly)&&(!bn[Xr]||!bn[Xr].writeOnly||Wr.includeWriteOnly)&&(Yr.properties[Xr]||(Yr.properties[Xr]=bn[Xr],!In.required&&(0,R.default)(In.required)&&-1!==(0,_.default)(Ni=In.required).call(Ni,Xr)&&(Yr.required?Yr.required.push(Xr):Yr.required=[Xr])))}}return In.items&&(Yr.items||(Yr.items={}),Yr.items=ur(In.items,Yr.items,Wr)),Yr},zr=function ur(In){var Yr=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},Qi=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,Di=arguments.length>3&&void 0!==arguments[3]&&arguments[3];In&&(0,we.Wl)(In.toJS)&&(In=In.toJS());var ji=void 0!==Qi||In&&void 0!==In.example||In&&void 0!==In.default,Wr=!ji&&In&&In.oneOf&&In.oneOf.length>0,Bn=!ji&&In&&In.anyOf&&In.anyOf.length>0;if(!ji&&(Wr||Bn)){var bn=(0,we.mz)(Wr?In.oneOf[0]:In.anyOf[0]);if(Nn(bn,In,Yr),!In.xml&&bn.xml&&(In.xml=bn.xml),void 0!==In.example&&void 0!==bn.example)ji=!0;else if(bn.properties){In.properties||(In.properties={});var Xr=(0,we.mz)(bn.properties);for(var Ni in Xr){var Xi;Object.prototype.hasOwnProperty.call(Xr,Ni)&&(!Xr[Ni]||!Xr[Ni].deprecated)&&(!Xr[Ni]||!Xr[Ni].readOnly||Yr.includeReadOnly)&&(!Xr[Ni]||!Xr[Ni].writeOnly||Yr.includeWriteOnly)&&(In.properties[Ni]||(In.properties[Ni]=Xr[Ni],!bn.required&&(0,R.default)(bn.required)&&-1!==(0,_.default)(Xi=bn.required).call(Xi,Ni)&&(In.required?In.required.push(Ni):In.required=[Ni])))}}}var Bo,Ao={},zs=In||{},Qs=zs.xml,Ii=zs.type,uo=zs.example,bo=zs.properties,Qe=zs.additionalProperties,Pt=zs.items,Rt=Yr.includeReadOnly,qn=Yr.includeWriteOnly,wr=Qs=Qs||{},Gr=wr.name,Fi=wr.prefix,Ws=wr.namespace,Zo={};if(Di&&(Bo=(Fi?Fi+":":"")+(Gr=Gr||"notagname"),Ws)){var ol=Fi?"xmlns:"+Fi:"xmlns";Ao[ol]=Ws}Di&&(Zo[Bo]=[]);var gl=function(zi){return(0,V.default)(zi).call(zi,function(Ds){return Object.prototype.hasOwnProperty.call(In,Ds)})};In&&!Ii&&(bo||Qe||gl(Jt)?Ii="object":Pt||gl(Mn)?Ii="array":gl(zt)?(Ii="number",In.type="number"):ji||In.enum||(Ii="string",In.type="string"));var Zl,Ju,Gf=function(zi){var Ds,ss,tu,bl,fl;if(null!==(null===(Ds=In)||void 0===Ds?void 0:Ds.maxItems)&&void 0!==(null===(ss=In)||void 0===ss?void 0:ss.maxItems)&&(zi=(0,Q.default)(zi).call(zi,0,null===(fl=In)||void 0===fl?void 0:fl.maxItems)),null!==(null===(tu=In)||void 0===tu?void 0:tu.minItems)&&void 0!==(null===(bl=In)||void 0===bl?void 0:bl.minItems))for(var Ba=0;zi.length<(null===(xa=In)||void 0===xa?void 0:xa.minItems);){var xa;zi.push(zi[Ba++%zi.length])}return zi},wl=(0,we.mz)(bo),Zc=0,gp=function(){return In&&null!=In.maxProperties&&Zc>=In.maxProperties},Fh=function(){if(!In||!In.required)return 0;var zi,Ds,ss=0;return Di?(0,C.default)(zi=In.required).call(zi,function(tu){return ss+=void 0===Zo[tu]?0:1}):(0,C.default)(Ds=In.required).call(Ds,function(tu){var bl;return ss+=void 0===(null===(bl=Zo[Bo])||void 0===bl?void 0:(0,oe.default)(bl).call(bl,function(fl){return void 0!==fl[tu]}))?0:1}),In.required.length-ss},oh=function(zi){var Ds;return!(In&&In.required&&In.required.length&&(0,N.default)(Ds=In.required).call(Ds,zi))},Lh=function(zi){return!In||null==In.maxProperties||!gp()&&(!oh(zi)||In.maxProperties-Zc-Fh()>0)};if(Zl=Di?function(zi){var Ds=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(In&&wl[zi]){if(wl[zi].xml=wl[zi].xml||{},wl[zi].xml.attribute){var ss=(0,R.default)(wl[zi].enum)?wl[zi].enum[0]:void 0,tu=wl[zi].example,bl=wl[zi].default;return void(Ao[wl[zi].xml.name||zi]=void 0!==tu?tu:void 0!==bl?bl:void 0!==ss?ss:bt(wl[zi]))}wl[zi].xml.name=wl[zi].xml.name||zi}else wl[zi]||!1===Qe||(wl[zi]={xml:{name:zi}});var fl,Ba=ur(In&&wl[zi]||void 0,Yr,Ds,Di);Lh(zi)&&(Zc++,(0,R.default)(Ba)?Zo[Bo]=(0,l.default)(fl=Zo[Bo]).call(fl,Ba):Zo[Bo].push(Ba))}:function(zi,Ds){Lh(zi)&&(Zo[zi]=ur(wl[zi],Yr,Ds,Di),Zc++)},ji){var zl;if(zl=Bt(void 0!==Qi?Qi:void 0!==uo?uo:In.default),!Di){if("number"==typeof zl&&"string"===Ii)return"".concat(zl);if("string"!=typeof zl||"string"===Ii)return zl;try{return JSON.parse(zl)}catch(zi){return zl}}if(In||(Ii=(0,R.default)(zl)?"array":(0,o.default)(zl)),"array"===Ii){if(!(0,R.default)(zl)){if("string"==typeof zl)return zl;zl=[zl]}var $c=In?In.items:void 0;$c&&($c.xml=$c.xml||Qs||{},$c.xml.name=$c.xml.name||Qs.name);var Fp=(0,le.default)(zl).call(zl,function(zi){return ur($c,Yr,zi,Di)});return Fp=Gf(Fp),Qs.wrapped?(Zo[Bo]=Fp,(0,ke.default)(Ao)||Zo[Bo].push({_attr:Ao})):Zo=Fp,Zo}if("object"===Ii){if("string"==typeof zl)return zl;for(var Zi in zl)Object.prototype.hasOwnProperty.call(zl,Zi)&&(In&&wl[Zi]&&wl[Zi].readOnly&&!Rt||In&&wl[Zi]&&wl[Zi].writeOnly&&!qn||(In&&wl[Zi]&&wl[Zi].xml&&wl[Zi].xml.attribute?Ao[wl[Zi].xml.name||Zi]=zl[Zi]:Zl(Zi,zl[Zi])));return(0,ke.default)(Ao)||Zo[Bo].push({_attr:Ao}),Zo}return Zo[Bo]=(0,ke.default)(Ao)?zl:[{_attr:Ao},zl],Zo}if("object"===Ii){for(var mr in wl)Object.prototype.hasOwnProperty.call(wl,mr)&&(wl[mr]&&wl[mr].deprecated||wl[mr]&&wl[mr].readOnly&&!Rt||wl[mr]&&wl[mr].writeOnly&&!qn||Zl(mr));if(Di&&Ao&&Zo[Bo].push({_attr:Ao}),gp())return Zo;if(!0===Qe)Di?Zo[Bo].push({additionalProp:"Anything can be here"}):Zo.additionalProp1={},Zc++;else if(Qe){var Mi=(0,we.mz)(Qe),eo=ur(Mi,Yr,void 0,Di);if(Di&&Mi.xml&&Mi.xml.name&&"notagname"!==Mi.xml.name)Zo[Bo].push(eo);else for(var No=null!=In.minProperties&&Zc<In.minProperties?In.minProperties-Zc:3,qo=1;qo<=No;qo++){if(gp())return Zo;if(Di){var os={};os["additionalProp"+qo]=eo.notagname,Zo[Bo].push(os)}else Zo["additionalProp"+qo]=eo;Zc++}}return Zo}if("array"===Ii){if(!Pt)return;var ps,_a,tl;if(Di&&(Pt.xml=Pt.xml||(null===(_a=In)||void 0===_a?void 0:_a.xml)||{},Pt.xml.name=Pt.xml.name||Qs.name),(0,R.default)(Pt.anyOf))ps=(0,le.default)(tl=Pt.anyOf).call(tl,function(zi){return ur(Nn(Pt,zi,Yr),Yr,void 0,Di)});else if((0,R.default)(Pt.oneOf)){var vu;ps=(0,le.default)(vu=Pt.oneOf).call(vu,function(zi){return ur(Nn(Pt,zi,Yr),Yr,void 0,Di)})}else{if(!(!Di||Di&&Qs.wrapped))return ur(Pt,Yr,void 0,Di);ps=[ur(Pt,Yr,void 0,Di)]}return ps=Gf(ps),Di&&Qs.wrapped?(Zo[Bo]=ps,(0,ke.default)(Ao)||Zo[Bo].push({_attr:Ao}),Zo):ps}if(In&&(0,R.default)(In.enum))Ju=(0,we.AF)(In.enum)[0];else{if(!In)return;if("number"==typeof(Ju=bt(In))){var sr=In.minimum;null!=sr&&(In.exclusiveMinimum&&sr++,Ju=sr);var Bi=In.maximum;null!=Bi&&(In.exclusiveMaximum&&Bi--,Ju=Bi)}if("string"==typeof Ju&&(null!=In.maxLength&&(Ju=(0,Q.default)(Ju).call(Ju,0,In.maxLength)),null!=In.minLength))for(var cs=0;Ju.length<In.minLength;)Ju+=Ju[cs++%Ju.length]}if("file"!==Ii)return Di?(Zo[Bo]=(0,ke.default)(Ao)?Ju:[{_attr:Ao},Ju],Zo):Ju},Hr=function(ur){return ur.schema&&(ur=ur.schema),ur.properties&&(ur.type="object"),ur},Vr=function(ur,In,Yr){var Qi=zr(ur,In,Yr,!0);if(Qi)return"string"==typeof Qi?Qi:$e()(Qi,{declaration:!0,indent:"\t"})},qr=function(ur,In,Yr){return zr(ur,In,Yr,!1)},On=function(ur,In,Yr){return[ur,(0,_e.default)(In),(0,_e.default)(Yr)]},Jn=(0,G.Z)(Vr,On),Qn=(0,G.Z)(qr,On)},8883:(n,s,t)=>{t.r(s),t.d(s,{default:()=>l});var o=t(2473);function l(){return{fn:o}}},1737:(n,s,t)=>{t.r(s),t.d(s,{CLEAR_REQUEST:()=>bn,CLEAR_RESPONSE:()=>Bn,CLEAR_VALIDATE_PARAMS:()=>Xr,LOG_REQUEST:()=>Wr,SET_MUTATED_REQUEST:()=>ji,SET_REQUEST:()=>Di,SET_RESPONSE:()=>Qi,SET_SCHEME:()=>Ao,UPDATE_EMPTY_PARAM_INCLUSION:()=>In,UPDATE_JSON:()=>Qn,UPDATE_OPERATION_META_VALUE:()=>Ni,UPDATE_PARAM:()=>ur,UPDATE_RESOLVED:()=>Xi,UPDATE_RESOLVED_SUBTREE:()=>Bo,UPDATE_SPEC:()=>On,UPDATE_URL:()=>Jn,VALIDATE_PARAMS:()=>Yr,changeConsumesValue:()=>Ju,changeParam:()=>Gr,changeParamByIdentity:()=>Fi,changeProducesValue:()=>Gf,clearRequest:()=>$c,clearResponse:()=>zl,clearValidateParams:()=>Zl,execute:()=>Lh,executeRequest:()=>oh,invalidateResolvedSubtreeCache:()=>Zo,logRequest:()=>Fh,parseToJson:()=>bo,requestResolvedSubtree:()=>wr,resolveSpec:()=>Pt,setMutatedRequest:()=>gp,setRequest:()=>Zc,setResponse:()=>wl,setScheme:()=>Fp,updateEmptyParamInclusion:()=>gl,updateJsonSpec:()=>uo,updateResolved:()=>Qs,updateResolvedSubtree:()=>Ws,updateSpec:()=>zs,updateUrl:()=>Ii,validateParams:()=>ol});var o=t(1013),l=t(302);const _=(t.d(mr={},{default:()=>hN}),mr);var mr,C=t(1581);const R=(Zi=>{var mr={};return t.d(mr,Zi),mr})({default:()=>mN()});var N=t(4163),V=t(2565),Q=t(3978),oe=t.n(Q),le=t(6785),_e=t(7930);const ye=(Zi=>{var mr={};return t.d(mr,Zi),mr})({default:()=>vN()});var $e=t(6145),Ie=t(374),ke=t(8818),we=t(29),G=t(5171),Dt=t(2740),bt=t(7512);const Bt=(Zi=>{var mr={};return t.d(mr,Zi),mr})({default:()=>EN()});var Jt=t(626),Mn=t(9725),zt=t(8900),xn=t(8518);const Nn=(Zi=>{var mr={};return t.d(mr,Zi),mr})({default:()=>SN()}),zr=(Zi=>{var mr={};return t.d(mr,Zi),mr})({default:()=>CN()}),Hr=(Zi=>{var mr={};return t.d(mr,Zi),mr})({default:()=>ON()});var Vr=t(6298),qr=["path","method"],On="spec_update_spec",Jn="spec_update_url",Qn="spec_update_json",ur="spec_update_param",In="spec_update_empty_param_inclusion",Yr="spec_validate_param",Qi="spec_set_response",Di="spec_set_request",ji="spec_set_mutated_request",Wr="spec_log_request",Bn="spec_clear_response",bn="spec_clear_request",Xr="spec_clear_validate_param",Ni="spec_update_operation_meta_value",Xi="spec_update_resolved",Bo="spec_update_resolved_subtree",Ao="set_scheme";function zs(Zi){var mr,Mi=(mr=Zi,(0,Nn.default)(mr)?mr:"").replace(/\t/g,"  ");if("string"==typeof Zi)return{type:On,payload:Mi}}function Qs(Zi){return{type:Xi,payload:Zi}}function Ii(Zi){return{type:Jn,payload:Zi}}function uo(Zi){return{type:Qn,payload:Zi}}var bo=function(Zi){return function(mr){var Mi=mr.specActions,No=mr.errActions,qo=mr.specSelectors.specStr,os=null;try{Zi=Zi||qo(),No.clear({source:"parser"}),os=Jt.default.load(Zi,{schema:Jt.JSON_SCHEMA})}catch(ps){return console.error(ps),No.newSpecErr({source:"parser",level:"error",message:ps.reason,line:ps.mark&&ps.mark.line?ps.mark.line+1:void 0})}return os&&"object"===(0,C.default)(os)?Mi.updateJsonSpec(os):{}}},Qe=!1,Pt=function(Zi,mr){return function(Mi){var eo=Mi.specActions,No=Mi.specSelectors,qo=Mi.errActions,os=Mi.fn,ps=os.fetch,_a=os.resolve,tl=os.AST,vu=void 0===tl?{}:tl,sr=Mi.getConfigs;Qe||(console.warn("specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!"),Qe=!0);var Bi=sr(),cs=Bi.modelPropertyMacro,zi=Bi.parameterMacro,Ds=Bi.requestInterceptor,ss=Bi.responseInterceptor;void 0===Zi&&(Zi=No.specJson()),void 0===mr&&(mr=No.url());var tu=vu.getLineNumberForPath?vu.getLineNumberForPath:function(){},bl=No.specStr();return _a({fetch:ps,spec:Zi,baseDoc:mr,modelPropertyMacro:cs,parameterMacro:zi,requestInterceptor:Ds,responseInterceptor:ss}).then(function(fl){var Ba=fl.spec,xa=fl.errors;if(qo.clear({type:"thrown"}),(0,N.default)(xa)&&xa.length>0){var yu=(0,V.default)(xa).call(xa,function(nu){return console.error(nu),nu.line=nu.fullPath?tu(bl,nu.fullPath):null,nu.path=nu.fullPath?nu.fullPath.join("."):null,nu.level="error",nu.type="thrown",nu.source="resolver",oe()(nu,"message",{enumerable:!0,value:nu.message}),nu});qo.newThrownErrBatch(yu)}return eo.updateResolved(Ba)})}},Rt=[],qn=(0,zr.default)((0,_.default)(R.default.mark(function Zi(){var mr,Mi,eo,No,qo,os,ps,_a,tl,vu,sr,Bi,cs,zi,Ds,ss,tu,bl;return R.default.wrap(function(fl){for(;;)switch(fl.prev=fl.next){case 0:if(mr=Rt.system){fl.next=4;break}return console.error("debResolveSubtrees: don't have a system to operate on, aborting."),fl.abrupt("return");case 4:if(Mi=mr.errActions,eo=mr.errSelectors,os=(No=mr.fn).fetch,_a=void 0===(ps=No.AST)?{}:ps,tl=mr.specSelectors,vu=mr.specActions,qo=No.resolveSubtree){fl.next=8;break}return console.error("Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing."),fl.abrupt("return");case 8:return sr=_a.getLineNumberForPath?_a.getLineNumberForPath:function(){},Bi=tl.specStr(),cs=mr.getConfigs(),zi=cs.modelPropertyMacro,Ds=cs.parameterMacro,ss=cs.requestInterceptor,tu=cs.responseInterceptor,fl.prev=11,fl.next=14,(0,le.default)(Rt).call(Rt,function(){var Ba=(0,_.default)(R.default.mark(function xa(yu,nu){var jd,op,Pl,ff,kh,so,Em,I_,ev;return R.default.wrap(function(sh){for(;;)switch(sh.prev=sh.next){case 0:return sh.next=2,yu;case 2:return op=(jd=sh.sent).resultMap,Pl=jd.specWithCurrentSubtrees,sh.next=7,qo(Pl,nu,{baseDoc:tl.url(),modelPropertyMacro:zi,parameterMacro:Ds,requestInterceptor:ss,responseInterceptor:tu});case 7:if(kh=(ff=sh.sent).errors,so=ff.spec,eo.allErrors().size&&Mi.clearBy(function(pd){var bm;return"thrown"!==pd.get("type")||"resolver"!==pd.get("source")||!(0,_e.default)(bm=pd.get("fullPath")).call(bm,function(zm,q_){return zm===nu[q_]||void 0===nu[q_]})}),(0,N.default)(kh)&&kh.length>0&&(Em=(0,V.default)(kh).call(kh,function(pd){return pd.line=pd.fullPath?sr(Bi,pd.fullPath):null,pd.path=pd.fullPath?pd.fullPath.join("."):null,pd.level="error",pd.type="thrown",pd.source="resolver",oe()(pd,"message",{enumerable:!0,value:pd.message}),pd}),Mi.newThrownErrBatch(Em)),!so||!tl.isOAS3()||"components"!==nu[0]||"securitySchemes"!==nu[1]){sh.next=15;break}return sh.next=15,ye.default.all((0,V.default)(I_=(0,$e.default)(ev=(0,Ie.default)(so)).call(ev,function(pd){return"openIdConnect"===pd.type})).call(I_,function(){var pd=(0,_.default)(R.default.mark(function bm(zm){var q_,Eg;return R.default.wrap(function(Lp){for(;;)switch(Lp.prev=Lp.next){case 0:return q_={url:zm.openIdConnectUrl,requestInterceptor:ss,responseInterceptor:tu},Lp.prev=1,Lp.next=4,os(q_);case 4:(Eg=Lp.sent)instanceof Error||Eg.status>=400?console.error(Eg.statusText+" "+q_.url):zm.openIdConnectData=JSON.parse(Eg.text),Lp.next=11;break;case 8:Lp.prev=8,Lp.t0=Lp.catch(1),console.error(Lp.t0);case 11:case"end":return Lp.stop()}},bm,null,[[1,8]])}));return function(bm){return pd.apply(this,arguments)}}()));case 15:return(0,Hr.default)(op,nu,so),(0,Hr.default)(Pl,nu,so),sh.abrupt("return",{resultMap:op,specWithCurrentSubtrees:Pl});case 18:case"end":return sh.stop()}},xa)}));return function(xa,yu){return Ba.apply(this,arguments)}}(),ye.default.resolve({resultMap:(tl.specResolvedSubtree([])||(0,Mn.Map)()).toJS(),specWithCurrentSubtrees:tl.specJson().toJS()}));case 14:bl=fl.sent,delete Rt.system,Rt=[],fl.next=22;break;case 19:fl.prev=19,fl.t0=fl.catch(11),console.error(fl.t0);case 22:vu.updateResolvedSubtree([],bl.resultMap);case 23:case"end":return fl.stop()}},Zi,null,[[11,19]])})),35),wr=function(Zi){return function(mr){var Mi;(0,ke.default)(Mi=(0,V.default)(Rt).call(Rt,function(eo){return eo.join("@@")})).call(Mi,Zi.join("@@"))>-1||(Rt.push(Zi),Rt.system=mr,qn())}};function Gr(Zi,mr,Mi,eo,No){return{type:ur,payload:{path:Zi,value:eo,paramName:mr,paramIn:Mi,isXml:No}}}function Fi(Zi,mr,Mi,eo){return{type:ur,payload:{path:Zi,param:mr,value:Mi,isXml:eo}}}var Ws=function(Zi,mr){return{type:Bo,payload:{path:Zi,value:mr}}},Zo=function(){return{type:Bo,payload:{path:[],value:(0,Mn.Map)()}}},ol=function(Zi,mr){return{type:Yr,payload:{pathMethod:Zi,isOAS3:mr}}},gl=function(Zi,mr,Mi,eo){return{type:In,payload:{pathMethod:Zi,paramName:mr,paramIn:Mi,includeEmptyValue:eo}}};function Zl(Zi){return{type:Xr,payload:{pathMethod:Zi}}}function Ju(Zi,mr){return{type:Ni,payload:{path:Zi,value:mr,key:"consumes_value"}}}function Gf(Zi,mr){return{type:Ni,payload:{path:Zi,value:mr,key:"produces_value"}}}var wl=function(Zi,mr,Mi){return{payload:{path:Zi,method:mr,res:Mi},type:Qi}},Zc=function(Zi,mr,Mi){return{payload:{path:Zi,method:mr,req:Mi},type:Di}},gp=function(Zi,mr,Mi){return{payload:{path:Zi,method:mr,req:Mi},type:ji}},Fh=function(Zi){return{payload:Zi,type:Wr}},oh=function(Zi){return function(mr){var Mi,eo,No=mr.fn,qo=mr.specActions,os=mr.specSelectors,_a=mr.oas3Selectors,tl=Zi.pathName,vu=Zi.method,sr=Zi.operation,Bi=(0,mr.getConfigs)(),cs=Bi.requestInterceptor,zi=Bi.responseInterceptor,Ds=sr.toJS();if(sr&&sr.get("parameters")&&(0,we.default)(Mi=(0,$e.default)(eo=sr.get("parameters")).call(eo,function(Pl){return Pl&&!0===Pl.get("allowEmptyValue")})).call(Mi,function(Pl){if(os.parameterInclusionSettingFor([tl,vu],Pl.get("name"),Pl.get("in"))){Zi.parameters=Zi.parameters||{};var ff=(0,Vr.cz)(Pl,Zi.parameters);(!ff||ff&&0===ff.size)&&(Zi.parameters[Pl.get("name")]="")}}),Zi.contextUrl=(0,zt.default)(os.url()).toString(),Ds&&Ds.operationId?Zi.operationId=Ds.operationId:Ds&&tl&&vu&&(Zi.operationId=No.opId(Ds,tl,vu)),os.isOAS3()){var ss,tu=(0,G.default)(ss="".concat(tl,":")).call(ss,vu);Zi.server=_a.selectedServer(tu)||_a.selectedServer();var bl=_a.serverVariables({server:Zi.server,namespace:tu}).toJS(),fl=_a.serverVariables({server:Zi.server}).toJS();Zi.serverVariables=(0,Dt.default)(bl).length?bl:fl,Zi.requestContentType=_a.requestContentType(tl,vu),Zi.responseContentType=_a.responseContentType(tl,vu)||"*/*";var Ba,xa=_a.requestBodyValue(tl,vu),yu=_a.requestBodyInclusionSetting(tl,vu);Zi.requestBody=xa&&xa.toJS?(0,$e.default)(Ba=(0,V.default)(xa).call(xa,function(Pl){return Mn.Map.isMap(Pl)?Pl.get("value"):Pl})).call(Ba,function(Pl,ff){return((0,N.default)(Pl)?0!==Pl.length:!(0,Vr.O2)(Pl))||yu.get(ff)}).toJS():xa}var nu=(0,bt.default)({},Zi);nu=No.buildRequest(nu),qo.setRequest(Zi.pathName,Zi.method,nu);var Pl,jd=(Pl=(0,_.default)(R.default.mark(function ff(kh){var so,Em;return R.default.wrap(function(I_){for(;;)switch(I_.prev=I_.next){case 0:return I_.next=2,cs.apply(void 0,[kh]);case 2:return Em=(0,bt.default)({},so=I_.sent),qo.setMutatedRequest(Zi.pathName,Zi.method,Em),I_.abrupt("return",so);case 6:case"end":return I_.stop()}},ff)})),function(ff){return Pl.apply(this,arguments)});Zi.requestInterceptor=jd,Zi.responseInterceptor=zi;var op=(0,Bt.default)();return No.execute(Zi).then(function(Pl){Pl.duration=(0,Bt.default)()-op,qo.setResponse(Zi.pathName,Zi.method,Pl)}).catch(function(Pl){"Failed to fetch"===Pl.message&&(Pl.name="",Pl.message='**Failed to fetch.**  \n**Possible Reasons:** \n  - CORS \n  - Network Failure \n  - URL scheme must be "http" or "https" for CORS request.'),qo.setResponse(Zi.pathName,Zi.method,{error:!0,err:(0,xn.serializeError)(Pl)})})}},Lh=function(){var Zi=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},mr=Zi.path,Mi=Zi.method,eo=(0,l.default)(Zi,qr);return function(No){var qo=No.fn.fetch,os=No.specSelectors,ps=No.specActions,_a=os.specJsonWithResolvedSubtrees().toJS(),tl=os.operationScheme(mr,Mi),vu=os.contentTypeValues([mr,Mi]).toJS(),sr=vu.requestContentType,Bi=vu.responseContentType,cs=/xml/i.test(sr),zi=os.parameterValues([mr,Mi],cs).toJS();return ps.executeRequest((0,o.default)((0,o.default)({},eo),{},{fetch:qo,spec:_a,pathName:mr,method:Mi,parameters:zi,requestContentType:sr,scheme:tl,responseContentType:Bi}))}};function zl(Zi,mr){return{type:Bn,payload:{path:Zi,method:mr}}}function $c(Zi,mr){return{type:bn,payload:{path:Zi,method:mr}}}function Fp(Zi,mr,Mi){return{type:Ao,payload:{scheme:Zi,path:mr,method:Mi}}}},7038:(n,s,t)=>{t.r(s),t.d(s,{default:()=>R});var o=t(32),l=t(1737),_=t(3881),C=t(7508);function R(){return{statePlugins:{spec:{wrapActions:C,reducers:o.default,actions:l,selectors:_}}}}},32:(n,s,t)=>{t.r(s),t.d(s,{default:()=>$e});var o,l=t(775),_=t(2691),C=t(5171),R=t(6785),N=t(2565),V=t(7512),Q=t(9725),oe=t(6298),le=t(7504),_e=t(3881),ye=t(1737);const $e=((0,l.default)(o={},ye.UPDATE_SPEC,function(Ie,ke){return"string"==typeof ke.payload?Ie.set("spec",ke.payload):Ie}),(0,l.default)(o,ye.UPDATE_URL,function(Ie,ke){return Ie.set("url",ke.payload+"")}),(0,l.default)(o,ye.UPDATE_JSON,function(Ie,ke){return Ie.set("json",(0,oe.oG)(ke.payload))}),(0,l.default)(o,ye.UPDATE_RESOLVED,function(Ie,ke){return Ie.setIn(["resolved"],(0,oe.oG)(ke.payload))}),(0,l.default)(o,ye.UPDATE_RESOLVED_SUBTREE,function(Ie,ke){var we,G=ke.payload,Dt=G.value,bt=G.path;return Ie.setIn((0,C.default)(we=["resolvedSubtrees"]).call(we,(0,_.default)(bt)),(0,oe.oG)(Dt))}),(0,l.default)(o,ye.UPDATE_PARAM,function(Ie,ke){var we,G,Dt=ke.payload,bt=Dt.path,Bt=Dt.paramName,Jt=Dt.paramIn,Mn=Dt.param,zt=Dt.value,xn=Dt.isXml,Nn=Mn?(0,oe.V9)(Mn):(0,C.default)(we="".concat(Jt,".")).call(we,Bt),zr=xn?"value_xml":"value";return Ie.setIn((0,C.default)(G=["meta","paths"]).call(G,(0,_.default)(bt),["parameters",Nn,zr]),zt)}),(0,l.default)(o,ye.UPDATE_EMPTY_PARAM_INCLUSION,function(Ie,ke){var we,G,Dt=ke.payload,bt=Dt.pathMethod,Bt=Dt.paramName,Jt=Dt.paramIn,Mn=Dt.includeEmptyValue;if(!Bt||!Jt)return console.warn("Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey."),Ie;var zt=(0,C.default)(we="".concat(Jt,".")).call(we,Bt);return Ie.setIn((0,C.default)(G=["meta","paths"]).call(G,(0,_.default)(bt),["parameter_inclusions",zt]),Mn)}),(0,l.default)(o,ye.VALIDATE_PARAMS,function(Ie,ke){var we,G,Dt=ke.payload,bt=Dt.pathMethod,Bt=Dt.isOAS3,Jt=(0,_e.specJsonWithResolvedSubtrees)(Ie).getIn((0,C.default)(we=["paths"]).call(we,(0,_.default)(bt))),Mn=(0,_e.parameterValues)(Ie,bt).toJS();return Ie.updateIn((0,C.default)(G=["meta","paths"]).call(G,(0,_.default)(bt),["parameters"]),(0,Q.fromJS)({}),function(zt){var xn;return(0,R.default)(xn=Jt.get("parameters",(0,Q.List)())).call(xn,function(Nn,zr){var Hr=(0,oe.cz)(zr,Mn),Vr=(0,_e.parameterInclusionSettingFor)(Ie,bt,zr.get("name"),zr.get("in")),qr=(0,oe.Ik)(zr,Hr,{bypassRequiredCheck:Vr,isOAS3:Bt});return Nn.setIn([(0,oe.V9)(zr),"errors"],(0,Q.fromJS)(qr))},zt)})}),(0,l.default)(o,ye.CLEAR_VALIDATE_PARAMS,function(Ie,ke){var we,G=ke.payload.pathMethod;return Ie.updateIn((0,C.default)(we=["meta","paths"]).call(we,(0,_.default)(G),["parameters"]),(0,Q.fromJS)([]),function(Dt){return(0,N.default)(Dt).call(Dt,function(bt){return bt.set("errors",(0,Q.fromJS)([]))})})}),(0,l.default)(o,ye.SET_RESPONSE,function(Ie,ke){var we,G=ke.payload,Dt=G.res,bt=G.path,Bt=G.method;(we=Dt.error?(0,V.default)({error:!0,name:Dt.err.name,message:Dt.err.message,statusCode:Dt.err.statusCode},Dt.err.response):Dt).headers=we.headers||{};var Jt=Ie.setIn(["responses",bt,Bt],(0,oe.oG)(we));return le.Z.Blob&&Dt.data instanceof le.Z.Blob&&(Jt=Jt.setIn(["responses",bt,Bt,"text"],Dt.data)),Jt}),(0,l.default)(o,ye.SET_REQUEST,function(Ie,ke){var we=ke.payload;return Ie.setIn(["requests",we.path,we.method],(0,oe.oG)(we.req))}),(0,l.default)(o,ye.SET_MUTATED_REQUEST,function(Ie,ke){var we=ke.payload;return Ie.setIn(["mutatedRequests",we.path,we.method],(0,oe.oG)(we.req))}),(0,l.default)(o,ye.UPDATE_OPERATION_META_VALUE,function(Ie,ke){var we,G,Dt,bt,Bt,Jt,Mn=ke.payload,zt=Mn.path,xn=Mn.value,Nn=Mn.key,zr=(0,C.default)(we=["paths"]).call(we,(0,_.default)(zt)),Hr=(0,C.default)(G=["meta","paths"]).call(G,(0,_.default)(zt));return Ie.getIn((0,C.default)(Dt=["json"]).call(Dt,(0,_.default)(zr)))||Ie.getIn((0,C.default)(bt=["resolved"]).call(bt,(0,_.default)(zr)))||Ie.getIn((0,C.default)(Bt=["resolvedSubtrees"]).call(Bt,(0,_.default)(zr)))?Ie.setIn((0,C.default)(Jt=[]).call(Jt,(0,_.default)(Hr),[Nn]),(0,Q.fromJS)(xn)):Ie}),(0,l.default)(o,ye.CLEAR_RESPONSE,function(Ie,ke){var we=ke.payload;return Ie.deleteIn(["responses",we.path,we.method])}),(0,l.default)(o,ye.CLEAR_REQUEST,function(Ie,ke){var we=ke.payload;return Ie.deleteIn(["requests",we.path,we.method])}),(0,l.default)(o,ye.SET_SCHEME,function(Ie,ke){var we=ke.payload,G=we.scheme,Dt=we.path,bt=we.method;return Dt&&bt?Ie.setIn(["scheme",Dt,bt],G):Dt||bt?void 0:Ie.setIn(["scheme","_defaultScheme"],G)}),o)},3881:(n,s,t)=>{t.r(s),t.d(s,{lastError:()=>bt,url:()=>Bt,specStr:()=>Jt,specSource:()=>Mn,specJson:()=>zt,specResolved:()=>xn,specResolvedSubtree:()=>Nn,specJsonWithResolvedSubtrees:()=>Hr,spec:()=>Vr,isOAS3:()=>qr,info:()=>On,externalDocs:()=>Jn,version:()=>Qn,semver:()=>ur,paths:()=>In,operations:()=>Yr,consumes:()=>Qi,produces:()=>Di,security:()=>ji,securityDefinitions:()=>Wr,findDefinition:()=>Bn,definitions:()=>bn,basePath:()=>Xr,host:()=>Ni,schemes:()=>Xi,operationsWithRootInherited:()=>Bo,tags:()=>Ao,tagDetails:()=>zs,operationsWithTags:()=>Qs,taggedOperations:()=>Ii,responses:()=>uo,requests:()=>bo,mutatedRequests:()=>Qe,responseFor:()=>Pt,requestFor:()=>Rt,mutatedRequestFor:()=>qn,allowTryItOutFor:()=>wr,parameterWithMetaByIdentity:()=>Gr,parameterInclusionSettingFor:()=>Fi,parameterWithMeta:()=>Ws,operationWithMeta:()=>Zo,getParameter:()=>ol,hasHost:()=>gl,parameterValues:()=>Zl,parametersIncludeIn:()=>Ju,parametersIncludeType:()=>Gf,contentTypeValues:()=>wl,currentProducesFor:()=>Zc,producesOptionsFor:()=>gp,consumesOptionsFor:()=>Fh,operationScheme:()=>oh,canExecuteScheme:()=>Lh,validateBeforeExecute:()=>zl,getOAS3RequiredRequestBodyContentType:()=>$c,isMediaTypeSchemaPropertiesEqual:()=>Fp});var o=t(9334),l=t(2691),_=t(5171),C=t(8136),R=t(29),N=t(8818),V=t(2565),Q=t(6145),oe=t(1778),le=t(6785),_e=t(4350),ye=t(9963),$e=t(4163),Ie=t(8639),ke=t(6298),we=t(9725),G=["get","put","post","delete","options","head","patch","trace"],Dt=function(mr){return mr||(0,we.Map)()},bt=(0,Ie.createSelector)(Dt,function(mr){return mr.get("lastError")}),Bt=(0,Ie.createSelector)(Dt,function(mr){return mr.get("url")}),Jt=(0,Ie.createSelector)(Dt,function(mr){return mr.get("spec")||""}),Mn=(0,Ie.createSelector)(Dt,function(mr){return mr.get("specSource")||"not-editor"}),zt=(0,Ie.createSelector)(Dt,function(mr){return mr.get("json",(0,we.Map)())}),xn=(0,Ie.createSelector)(Dt,function(mr){return mr.get("resolved",(0,we.Map)())}),Nn=function(mr,Mi){var eo;return mr.getIn((0,_.default)(eo=["resolvedSubtrees"]).call(eo,(0,l.default)(Mi)),void 0)},zr=function mr(Mi,eo){return we.Map.isMap(Mi)&&we.Map.isMap(eo)?eo.get("$$ref")?eo:(0,we.OrderedMap)().mergeWith(mr,Mi,eo):eo},Hr=(0,Ie.createSelector)(Dt,function(mr){return(0,we.OrderedMap)().mergeWith(zr,mr.get("json"),mr.get("resolvedSubtrees"))}),Vr=function(mr){return zt(mr)},qr=(0,Ie.createSelector)(Vr,function(){return!1}),On=(0,Ie.createSelector)(Vr,function(mr){return Zi(mr&&mr.get("info"))}),Jn=(0,Ie.createSelector)(Vr,function(mr){return Zi(mr&&mr.get("externalDocs"))}),Qn=(0,Ie.createSelector)(On,function(mr){return mr&&mr.get("version")}),ur=(0,Ie.createSelector)(Qn,function(mr){var Mi;return(0,C.default)(Mi=/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(mr)).call(Mi,1)}),In=(0,Ie.createSelector)(Hr,function(mr){return mr.get("paths")}),Yr=(0,Ie.createSelector)(In,function(mr){if(!mr||mr.size<1)return(0,we.List)();var Mi=(0,we.List)();return mr&&(0,R.default)(mr)?((0,R.default)(mr).call(mr,function(eo,No){if(!eo||!(0,R.default)(eo))return{};(0,R.default)(eo).call(eo,function(qo,os){var ps;(0,N.default)(G).call(G,os)<0||(Mi=Mi.push((0,we.fromJS)({path:No,method:os,operation:qo,id:(0,_.default)(ps="".concat(os,"-")).call(ps,No)})))})}),Mi):(0,we.List)()}),Qi=(0,Ie.createSelector)(Vr,function(mr){return(0,we.Set)(mr.get("consumes"))}),Di=(0,Ie.createSelector)(Vr,function(mr){return(0,we.Set)(mr.get("produces"))}),ji=(0,Ie.createSelector)(Vr,function(mr){return mr.get("security",(0,we.List)())}),Wr=(0,Ie.createSelector)(Vr,function(mr){return mr.get("securityDefinitions")}),Bn=function(mr,Mi){var eo=mr.getIn(["resolvedSubtrees","definitions",Mi],null),No=mr.getIn(["json","definitions",Mi],null);return eo||No||null},bn=(0,Ie.createSelector)(Vr,function(mr){var Mi=mr.get("definitions");return we.Map.isMap(Mi)?Mi:(0,we.Map)()}),Xr=(0,Ie.createSelector)(Vr,function(mr){return mr.get("basePath")}),Ni=(0,Ie.createSelector)(Vr,function(mr){return mr.get("host")}),Xi=(0,Ie.createSelector)(Vr,function(mr){return mr.get("schemes",(0,we.Map)())}),Bo=(0,Ie.createSelector)(Yr,Qi,Di,function(mr,Mi,eo){return(0,V.default)(mr).call(mr,function(No){return No.update("operation",function(qo){return qo?we.Map.isMap(qo)?qo.withMutations(function(os){return os.get("consumes")||os.update("consumes",function(ps){return(0,we.Set)(ps).merge(Mi)}),os.get("produces")||os.update("produces",function(ps){return(0,we.Set)(ps).merge(eo)}),os}):void 0:(0,we.Map)()})})}),Ao=(0,Ie.createSelector)(Vr,function(mr){var Mi=mr.get("tags",(0,we.List)());return we.List.isList(Mi)?(0,Q.default)(Mi).call(Mi,function(eo){return we.Map.isMap(eo)}):(0,we.List)()}),zs=function(mr,Mi){var eo,No=Ao(mr)||(0,we.List)();return(0,oe.default)(eo=(0,Q.default)(No).call(No,we.Map.isMap)).call(eo,function(qo){return qo.get("name")===Mi},(0,we.Map)())},Qs=(0,Ie.createSelector)(Bo,Ao,function(mr,Mi){return(0,le.default)(mr).call(mr,function(eo,No){var qo=(0,we.Set)(No.getIn(["operation","tags"]));return qo.count()<1?eo.update("default",(0,we.List)(),function(os){return os.push(No)}):(0,le.default)(qo).call(qo,function(os,ps){return os.update(ps,(0,we.List)(),function(_a){return _a.push(No)})},eo)},(0,le.default)(Mi).call(Mi,function(eo,No){return eo.set(No.get("name"),(0,we.List)())},(0,we.OrderedMap)()))}),Ii=function(mr){return function(Mi){var eo,No=(0,Mi.getConfigs)(),qo=No.tagsSorter,os=No.operationsSorter;return(0,V.default)(eo=Qs(mr).sortBy(function(ps,_a){return _a},function(ps,_a){var tl="function"==typeof qo?qo:ke.wh.tagsSorter[qo];return tl?tl(ps,_a):null})).call(eo,function(ps,_a){var tl="function"==typeof os?os:ke.wh.operationsSorter[os],vu=tl?(0,_e.default)(ps).call(ps,tl):ps;return(0,we.Map)({tagDetails:zs(mr,_a),operations:vu})})}},uo=(0,Ie.createSelector)(Dt,function(mr){return mr.get("responses",(0,we.Map)())}),bo=(0,Ie.createSelector)(Dt,function(mr){return mr.get("requests",(0,we.Map)())}),Qe=(0,Ie.createSelector)(Dt,function(mr){return mr.get("mutatedRequests",(0,we.Map)())}),Pt=function(mr,Mi,eo){return uo(mr).getIn([Mi,eo],null)},Rt=function(mr,Mi,eo){return bo(mr).getIn([Mi,eo],null)},qn=function(mr,Mi,eo){return Qe(mr).getIn([Mi,eo],null)},wr=function(){return!0},Gr=function(mr,Mi,eo){var No,qo,os=Hr(mr).getIn((0,_.default)(No=["paths"]).call(No,(0,l.default)(Mi),["parameters"]),(0,we.OrderedMap)()),ps=mr.getIn((0,_.default)(qo=["meta","paths"]).call(qo,(0,l.default)(Mi),["parameters"]),(0,we.OrderedMap)()),_a=(0,V.default)(os).call(os,function(tl){var vu,sr,Bi,cs=ps.get((0,_.default)(vu="".concat(eo.get("in"),".")).call(vu,eo.get("name"))),zi=ps.get((0,_.default)(sr=(0,_.default)(Bi="".concat(eo.get("in"),".")).call(Bi,eo.get("name"),".hash-")).call(sr,eo.hashCode()));return(0,we.OrderedMap)().merge(tl,cs,zi)});return(0,oe.default)(_a).call(_a,function(tl){return tl.get("in")===eo.get("in")&&tl.get("name")===eo.get("name")},(0,we.OrderedMap)())},Fi=function(mr,Mi,eo,No){var qo,os,ps=(0,_.default)(qo="".concat(No,".")).call(qo,eo);return mr.getIn((0,_.default)(os=["meta","paths"]).call(os,(0,l.default)(Mi),["parameter_inclusions",ps]),!1)},Ws=function(mr,Mi,eo,No){var qo,os=Hr(mr).getIn((0,_.default)(qo=["paths"]).call(qo,(0,l.default)(Mi),["parameters"]),(0,we.OrderedMap)()),ps=(0,oe.default)(os).call(os,function(_a){return _a.get("in")===No&&_a.get("name")===eo},(0,we.OrderedMap)());return Gr(mr,Mi,ps)},Zo=function(mr,Mi,eo){var No,qo=Hr(mr).getIn(["paths",Mi,eo],(0,we.OrderedMap)()),os=mr.getIn(["meta","paths",Mi,eo],(0,we.OrderedMap)()),ps=(0,V.default)(No=qo.get("parameters",(0,we.List)())).call(No,function(_a){return Gr(mr,[Mi,eo],_a)});return(0,we.OrderedMap)().merge(qo,os).set("parameters",ps)};function ol(mr,Mi,eo,No){var qo;Mi=Mi||[];var os=mr.getIn((0,_.default)(qo=["meta","paths"]).call(qo,(0,l.default)(Mi),["parameters"]),(0,we.fromJS)([]));return(0,oe.default)(os).call(os,function(ps){return we.Map.isMap(ps)&&ps.get("name")===eo&&ps.get("in")===No})||(0,we.Map)()}var gl=(0,Ie.createSelector)(Vr,function(mr){var Mi=mr.get("host");return"string"==typeof Mi&&Mi.length>0&&"/"!==Mi[0]});function Zl(mr,Mi,eo){var No;Mi=Mi||[];var qo=Zo.apply(void 0,(0,_.default)(No=[mr]).call(No,(0,l.default)(Mi))).get("parameters",(0,we.List)());return(0,le.default)(qo).call(qo,function(os,ps){var _a=eo&&"body"===ps.get("in")?ps.get("value_xml"):ps.get("value");return os.set((0,ke.V9)(ps,{allowHashes:!1}),_a)},(0,we.fromJS)({}))}function Ju(mr){var Mi=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(we.List.isList(mr))return(0,ye.default)(mr).call(mr,function(eo){return we.Map.isMap(eo)&&eo.get("in")===Mi})}function Gf(mr){var Mi=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(we.List.isList(mr))return(0,ye.default)(mr).call(mr,function(eo){return we.Map.isMap(eo)&&eo.get("type")===Mi})}function wl(mr,Mi){var eo,No;Mi=Mi||[];var qo=Hr(mr).getIn((0,_.default)(eo=["paths"]).call(eo,(0,l.default)(Mi)),(0,we.fromJS)({})),os=mr.getIn((0,_.default)(No=["meta","paths"]).call(No,(0,l.default)(Mi)),(0,we.fromJS)({})),ps=Zc(mr,Mi),_a=qo.get("parameters")||new we.List,tl=os.get("consumes_value")?os.get("consumes_value"):Gf(_a,"file")?"multipart/form-data":Gf(_a,"formData")?"application/x-www-form-urlencoded":void 0;return(0,we.fromJS)({requestContentType:tl,responseContentType:ps})}function Zc(mr,Mi){var eo,No;Mi=Mi||[];var qo=Hr(mr).getIn((0,_.default)(eo=["paths"]).call(eo,(0,l.default)(Mi)),null);if(null!==qo){var os=mr.getIn((0,_.default)(No=["meta","paths"]).call(No,(0,l.default)(Mi),["produces_value"]),null),ps=qo.getIn(["produces",0],null);return os||ps||"application/json"}}function gp(mr,Mi){var eo;Mi=Mi||[];var No=Hr(mr),qo=No.getIn((0,_.default)(eo=["paths"]).call(eo,(0,l.default)(Mi)),null);if(null!==qo){var ps=(0,o.default)(Mi,1)[0],_a=qo.get("produces",null),tl=No.getIn(["paths",ps,"produces"],null),vu=No.getIn(["produces"],null);return _a||tl||vu}}function Fh(mr,Mi){var eo;Mi=Mi||[];var No=Hr(mr),qo=No.getIn((0,_.default)(eo=["paths"]).call(eo,(0,l.default)(Mi)),null);if(null!==qo){var ps=(0,o.default)(Mi,1)[0],_a=qo.get("consumes",null),tl=No.getIn(["paths",ps,"consumes"],null),vu=No.getIn(["consumes"],null);return _a||tl||vu}}var oh=function(mr,Mi,eo){var No=mr.get("url").match(/^([a-z][a-z0-9+\-.]*):/),qo=(0,$e.default)(No)?No[1]:null;return mr.getIn(["scheme",Mi,eo])||mr.getIn(["scheme","_defaultScheme"])||qo||""},Lh=function(mr,Mi,eo){var No;return(0,N.default)(No=["http","https"]).call(No,oh(mr,Mi,eo))>-1},zl=function(mr,Mi){var eo;Mi=Mi||[];var No=mr.getIn((0,_.default)(eo=["meta","paths"]).call(eo,(0,l.default)(Mi),["parameters"]),(0,we.fromJS)([])),qo=!0;return(0,R.default)(No).call(No,function(os){var ps=os.get("errors");ps&&ps.count()&&(qo=!1)}),qo},$c=function(mr,Mi){var eo,No,qo={requestBody:!1,requestContentType:{}},os=mr.getIn((0,_.default)(eo=["resolvedSubtrees","paths"]).call(eo,(0,l.default)(Mi),["requestBody"]),(0,we.fromJS)([]));return os.size<1||(os.getIn(["required"])&&(qo.requestBody=os.getIn(["required"])),(0,R.default)(No=os.getIn(["content"]).entrySeq()).call(No,function(ps){var _a=ps[0];if(ps[1].getIn(["schema","required"])){var tl=ps[1].getIn(["schema","required"]).toJS();qo.requestContentType[_a]=tl}})),qo},Fp=function(mr,Mi,eo,No){var qo;if((eo||No)&&eo===No)return!0;var os=mr.getIn((0,_.default)(qo=["resolvedSubtrees","paths"]).call(qo,(0,l.default)(Mi),["requestBody","content"]),(0,we.fromJS)([]));if(os.size<2||!eo||!No)return!1;var ps=os.getIn([eo,"schema","properties"],(0,we.fromJS)([])),_a=os.getIn([No,"schema","properties"],(0,we.fromJS)([]));return!!ps.equals(_a)};function Zi(mr){return we.Map.isMap(mr)?mr:new we.Map}},7508:(n,s,t)=>{t.r(s),t.d(s,{updateSpec:()=>C,updateJsonSpec:()=>R,executeRequest:()=>N,validateParams:()=>V});var o=t(2740),l=t(29),_=t(9908),C=function(Q,oe){var le=oe.specActions;return function(){Q.apply(void 0,arguments),le.parseToJson.apply(le,arguments)}},R=function(Q,oe){var le=oe.specActions;return function(){for(var _e=arguments.length,ye=new Array(_e),$e=0;$e<_e;$e++)ye[$e]=arguments[$e];Q.apply(void 0,ye),le.invalidateResolvedSubtreeCache();var Ie=ye[0],ke=(0,_.default)(Ie,["paths"])||{},we=(0,o.default)(ke);(0,l.default)(we).call(we,function(G){(0,_.default)(ke,[G]).$ref&&le.requestResolvedSubtree(["paths",G])}),le.requestResolvedSubtree(["components","securitySchemes"])}},N=function(Q,oe){var le=oe.specActions;return function(_e){return le.logRequest(_e),Q(_e)}},V=function(Q,oe){var le=oe.specSelectors;return function(_e){return Q(_e,le.isOAS3())}}},4852:(n,s,t)=>{t.r(s),t.d(s,{loaded:()=>o});var o=function(l,_){return function(){l.apply(void 0,arguments);var C=_.getConfigs().withCredentials;void 0!==C&&(_.fn.fetch.withCredentials="string"==typeof C?"true"===C:!!C)}}},2990:(n,s,t)=>{t.r(s),t.d(s,{default:()=>Q});var o=t(5171);const l=(t.d(le={},{default:()=>Nw}),le),_=(oe=>{var le={};return t.d(le,oe),le})({buildRequest:()=>Bw,execute:()=>Z4}),C=(oe=>{var le={};return t.d(le,oe),le})({default:()=>mA,makeHttp:()=>fI,serializeRes:()=>JR}),R=(oe=>{var le={};return t.d(le,oe),le})({default:()=>q4});var le,N=t(5013),V=t(4852);function Q(oe){var le=oe.configs,_e=oe.getConfigs;return{fn:{fetch:(0,C.makeHttp)(C.default,le.preFetch,le.postFetch),buildRequest:_.buildRequest,execute:_.execute,resolve:l.default,resolveSubtree:function(ye,$e,Ie){var ke;if(void 0===Ie){var we=_e();Ie={modelPropertyMacro:we.modelPropertyMacro,parameterMacro:we.parameterMacro,requestInterceptor:we.requestInterceptor,responseInterceptor:we.responseInterceptor}}for(var G=arguments.length,Dt=new Array(G>3?G-3:0),bt=3;bt<G;bt++)Dt[bt-3]=arguments[bt];return R.default.apply(void 0,(0,o.default)(ke=[ye,$e,Ie]).call(ke,Dt))},serializeRes:C.serializeRes,opId:N.opId},statePlugins:{configs:{wrapActions:{loaded:V.loaded}}}}}},8525:(n,s,t)=>{t.r(s),t.d(s,{default:()=>l});var o=t(6298);function l(){return{fn:{shallowEqualKeys:o.be}}}},8347:(n,s,t)=>{t.r(s),t.d(s,{getDisplayName:()=>o});var o=function(l){return l.displayName||l.name||"Component"}},3420:(n,s,t)=>{t.r(s),t.d(s,{default:()=>N});var o=t(313),l=t(6298),_=t(5005),C=t(8347),R=t(8287);const N=function(V){var Q,Ie,oe=V.getComponents,le=V.getStore,_e=V.getSystem,ye=(Q=(0,_.getComponent)(_e,le,oe),(0,l.HP)(Q,function(){for(var Ie=arguments.length,ke=new Array(Ie),we=0;we<Ie;we++)ke[we]=arguments[we];return(0,o.default)(ke)})),$e=(Ie=(0,_.withMappedContainer)(_e,le,ye),(0,R.Z)(Ie,function(){for(var ke=arguments.length,we=new Array(ke),G=0;G<ke;G++)we[G]=arguments[G];return we}));return{rootInjects:{getComponent:ye,makeMappedContainer:$e,render:(0,_.render)(_e,le,_.getComponent,oe)},fn:{getDisplayName:C.getDisplayName}}}},5005:(n,s,t)=>{t.r(s),t.d(s,{getComponent:()=>bt,render:()=>Dt,withMappedContainer:()=>G});var o=t(1581),l=t(1013),_=t(863),C=t(7344),R=t(8656),N=t(9972),V=t(5416),Q=t(2740),oe=t(810);const le=(t.d(Jt={},{default:()=>Uw}),Jt);var Jt,_e=t(9871);const ye=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({Provider:()=>o5,connect:()=>k5}),$e=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>U5()}),Ie=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>j5()});var ke=function(Bt,Jt,Mn){return(0,_e.compose)(Mn?(zt=Bt,xn=Mn,function(Nn){var zr=zt().fn,Hr=function(Vr){(0,N.default)(On,Vr);var qr=(0,V.default)(On);function On(){return(0,C.default)(this,On),qr.apply(this,arguments)}return(0,R.default)(On,[{key:"render",value:function(){return oe.default.createElement(ye.Provider,{store:xn},oe.default.createElement(Nn,(0,_.default)({},this.props,this.context)))}}]),On}(oe.Component);return Hr.displayName="WithRoot(".concat(zr.getDisplayName(Nn),")"),Hr}):Ie.default,(0,ye.connect)(function(zt,xn){var Nn,zr=(0,l.default)((0,l.default)({},xn),Bt());return((null===(Nn=Jt.prototype)||void 0===Nn?void 0:Nn.mapStateToProps)||function(Vr){return{state:Vr}})(zt,zr)}),function(zt){return function(xn){var Nn=zt().fn,zr=function(Hr){(0,N.default)(qr,Hr);var Vr=(0,V.default)(qr);function qr(){return(0,C.default)(this,qr),Vr.apply(this,arguments)}return(0,R.default)(qr,[{key:"render",value:function(){return oe.default.createElement(xn,(0,_.default)({},zt(),this.props,this.context))}}]),qr}(oe.Component);return zr.displayName="WithSystem(".concat(Nn.getDisplayName(xn),")"),zr}}(Bt))(Jt);var zt,xn},we=function(Bt,Jt,Mn,zt){for(var xn in Jt){var Nn=Jt[xn];"function"==typeof Nn&&Nn(Mn[xn],zt[xn],Bt())}},G=function(Bt,Jt,Mn){return function(zt,xn){var Nn=Bt().fn,zr=Mn(zt,"root"),Hr=function(Vr){(0,N.default)(On,Vr);var qr=(0,V.default)(On);function On(Jn,Qn){var ur;return(0,C.default)(this,On),ur=qr.call(this,Jn,Qn),we(Bt,xn,Jn,{}),ur}return(0,R.default)(On,[{key:"UNSAFE_componentWillReceiveProps",value:function(Jn){we(Bt,xn,Jn,this.props)}},{key:"render",value:function(){var Jn=(0,$e.default)(this.props,xn?(0,Q.default)(xn):[]);return oe.default.createElement(zr,Jn)}}]),On}(oe.Component);return Hr.displayName="WithMappedContainer(".concat(Nn.getDisplayName(zr),")"),Hr}},Dt=function(Bt,Jt,Mn,zt){return function(xn){var Nn=Mn(Bt,Jt,zt)("App","root");le.default.render(oe.default.createElement(Nn,null),xn)}},bt=function(Bt,Jt,Mn){return function(zt,xn){var Nn=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if("string"!=typeof zt)throw new TypeError("Need a string, to fetch a component. Was given a "+(0,o.default)(zt));var zr=Mn(zt);return zr?xn?"root"===xn?ke(Bt,zr,Jt()):ke(Bt,zr):zr:(Nn.failSilently||Bt().log.warn("Could not find component:",zt),null)}}},471:(n,s,t)=>{t.d(s,{d3:()=>_.default,C2:()=>bt});var o=t(2740),l=t(2372);const _=(t.d(Jt={},{default:()=>pF}),Jt),C=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>mF}),R=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>yF}),N=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>SF}),V=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>MF}),Q=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>DF}),oe=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>wF}),le=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>IF}),_e=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>FF}),ye=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>LF}),$e=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>kF}),Ie=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>$F}),ke=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>HF}),we=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>BF});var Jt;_.default.registerLanguage("json",R.default),_.default.registerLanguage("js",C.default),_.default.registerLanguage("xml",N.default),_.default.registerLanguage("yaml",Q.default),_.default.registerLanguage("http",oe.default),_.default.registerLanguage("bash",V.default),_.default.registerLanguage("powershell",le.default),_.default.registerLanguage("javascript",C.default);var G={agate:_e.default,arta:ye.default,monokai:$e.default,nord:Ie.default,obsidian:ke.default,"tomorrow-night":we.default},Dt=(0,o.default)(G),bt=function(Bt){return(0,l.default)(Dt).call(Dt,Bt)?G[Bt]:(console.warn("Request style '".concat(Bt,"' is not available, returning default instead")),_e.default)}},6298:(n,s,t)=>{t.d(s,{r3:()=>wl,GZ:()=>gp,Xb:()=>_a,oJ:()=>$c,XV:()=>Mi,iQ:()=>Pt,J6:()=>Fp,DR:()=>qn,oG:()=>Ni,Uj:()=>ps,QG:()=>zl,po:()=>mr,nX:()=>Zi,gp:()=>Rt,xi:()=>Ju,kJ:()=>Qs,O2:()=>vu,LQ:()=>Bo,Wl:()=>zs,Kn:()=>Ao,HP:()=>Ii,AF:()=>Xi,D$:()=>No,Ay:()=>uo,Q2:()=>bo,mz:()=>Xr,V9:()=>qo,cz:()=>os,UG:()=>Gf,Zl:()=>wr,hW:()=>Lh,Nm:()=>oh,be:()=>Fh,wh:()=>Zc,Pz:()=>eo,_5:()=>Qe,Ik:()=>Fi});var o=t(2691),l=(t(9334),t(1581)),_=t(3248),C=t(4163),R=t(2565),N=t(2954),V=t(5171),Q=t(29),oe=t(6145),le=t(2740),_e=(t(5527),t(6785)),ye=t(7512),$e=t(4350),Ie=t(8136),ke=t(9963),we=(t(2372),t(313)),G=t(8818),Dt=t(1778),bt=t(3590),Bt=t(5942),Jt=t(9725);const Mn=(t.d(Bi={},{sanitizeUrl:()=>UF.N}),Bi),zt=(sr=>{var Bi={};return t.d(Bi,sr),Bi})({default:()=>jF()}),xn=(sr=>{var Bi={};return t.d(Bi,sr),Bi})({default:()=>VF()});var Bi,Nn=t(5476);const zr=(sr=>{var Bi={};return t.d(Bi,sr),Bi})({default:()=>zF()}),Hr=(sr=>{var Bi={};return t.d(Bi,sr),Bi})({default:()=>JF()}),Vr=(sr=>{var Bi={};return t.d(Bi,sr),Bi})({default:()=>XF()});var qr=t(7068),On=t(2473),Jn=t(7504);const Qn=(sr=>{var Bi={};return t.d(Bi,sr),Bi})({default:()=>qF()});var ur=t(9069),In=t(1798),Yr=t.n(In),Qi=t(9072),Di=t.n(Qi),ji=t(626),Wr=t(8764).Buffer,Bn="default",bn=function(sr){return Jt.default.Iterable.isIterable(sr)};function Xr(sr){return Ao(sr)?bn(sr)?sr.toJS():sr:{}}function Ni(sr){var Bi,cs;if(bn(sr)||sr instanceof Jn.Z.File||!Ao(sr))return sr;if((0,C.default)(sr))return(0,R.default)(cs=Jt.default.Seq(sr)).call(cs,Ni).toList();if((0,qr.default)((0,N.default)(sr))){var zi,Ds=function(ss){if(!(0,qr.default)((0,N.default)(ss)))return ss;var tu,bl={},Ba={},xa=(0,_.default)((0,N.default)(ss).call(ss));try{for(xa.s();!(tu=xa.n()).done;){var nu,jd,op,Pl,yu=tu.value;bl[yu[0]]||Ba[yu[0]]&&Ba[yu[0]].containsMultiple?(Ba[yu[0]]||(Ba[yu[0]]={containsMultiple:!0,length:1},bl[(0,V.default)(op=(0,V.default)(Pl="".concat(yu[0])).call(Pl,"_**[]")).call(op,Ba[yu[0]].length)]=bl[yu[0]],delete bl[yu[0]]),Ba[yu[0]].length+=1,bl[(0,V.default)(nu=(0,V.default)(jd="".concat(yu[0])).call(jd,"_**[]")).call(nu,Ba[yu[0]].length)]=yu[1]):bl[yu[0]]=yu[1]}}catch(ff){xa.e(ff)}finally{xa.f()}return bl}(sr);return(0,R.default)(zi=Jt.default.OrderedMap(Ds)).call(zi,Ni)}return(0,R.default)(Bi=Jt.default.OrderedMap(sr)).call(Bi,Ni)}function Xi(sr){return(0,C.default)(sr)?sr:[sr]}function Bo(sr){return"function"==typeof sr}function Ao(sr){return!!sr&&"object"===(0,l.default)(sr)}function zs(sr){return"function"==typeof sr}function Qs(sr){return(0,C.default)(sr)}var Ii=Nn.default;function uo(sr,Bi){var cs;return(0,_e.default)(cs=(0,le.default)(sr)).call(cs,function(zi,Ds){return zi[Ds]=Bi(sr[Ds],Ds),zi},{})}function bo(sr,Bi){var cs;return(0,_e.default)(cs=(0,le.default)(sr)).call(cs,function(zi,Ds){var ss=Bi(sr[Ds],Ds);return ss&&"object"===(0,l.default)(ss)&&(0,ye.default)(zi,ss),zi},{})}function Qe(sr){return function(Bi){return function(cs){return function(zi){return"function"==typeof zi?zi(sr()):cs(zi)}}}}function Pt(sr){var Bi,cs=sr.keySeq();return cs.contains(Bn)?Bn:(0,$e.default)(Bi=(0,oe.default)(cs).call(cs,function(zi){return"2"===(zi+"")[0]})).call(Bi).first()}function Rt(sr,Bi){if(!Jt.default.Iterable.isIterable(sr))return Jt.default.List();var cs=sr.getIn((0,C.default)(Bi)?Bi:[Bi]);return Jt.default.List.isList(cs)?cs:Jt.default.List()}function qn(sr){var Bi,cs=[/filename\*=[^']+'\w*'"([^"]+)";?/i,/filename\*=[^']+'\w*'([^;]+);?/i,/filename="([^;]*);?"/i,/filename=([^;]*);?/i];if((0,ke.default)(cs).call(cs,function(zi){return null!==(Bi=zi.exec(sr))}),null!==Bi&&Bi.length>1)try{return decodeURIComponent(Bi[1])}catch(zi){console.error(zi)}return null}function wr(sr){return Bi=sr.replace(/\.[^./]*$/,""),(0,xn.default)((0,zt.default)(Bi));var Bi}function Gr(sr,Bi,cs,zi,Ds){if(!Bi)return[];var ss=[],tu=Bi.get("nullable"),bl=Bi.get("required"),fl=Bi.get("maximum"),Ba=Bi.get("minimum"),xa=Bi.get("type"),yu=Bi.get("format"),nu=Bi.get("maxLength"),jd=Bi.get("minLength"),op=Bi.get("uniqueItems"),Pl=Bi.get("maxItems"),ff=Bi.get("minItems"),kh=Bi.get("pattern"),so=cs||!0===bl,Em=null!=sr;if(tu&&null===sr||!xa||!(so||Em&&"array"===xa||so||Em))return[];var I_="string"===xa&&sr,ev="array"===xa&&(0,C.default)(sr)&&sr.length,sh="array"===xa&&Jt.default.List.isList(sr)&&sr.count(),pd=[I_,ev,sh,"array"===xa&&"string"==typeof sr&&sr,"file"===xa&&sr instanceof Jn.Z.File,"boolean"===xa&&(sr||!1===sr),"number"===xa&&(sr||0===sr),"integer"===xa&&(sr||0===sr),"object"===xa&&"object"===(0,l.default)(sr)&&null!==sr,"object"===xa&&"string"==typeof sr&&sr],bm=(0,ke.default)(pd).call(pd,function(Qa){return!!Qa});if(so&&!bm&&!zi)return ss.push("Required field is not provided"),ss;if("object"===xa&&(null===Ds||"application/json"===Ds)){var zm,q_=sr;if("string"==typeof sr)try{q_=JSON.parse(sr)}catch(Qa){return ss.push("Parameter string value must be valid JSON"),ss}Bi&&Bi.has("required")&&zs(bl.isList)&&bl.isList()&&(0,Q.default)(bl).call(bl,function(Qa){void 0===q_[Qa]&&ss.push({propKey:Qa,error:"Required property not found"})}),Bi&&Bi.has("properties")&&(0,Q.default)(zm=Bi.get("properties")).call(zm,function(Qa,Ru){var Kc=Gr(q_[Ru],Qa,!1,zi,Ds);ss.push.apply(ss,(0,o.default)((0,R.default)(Kc).call(Kc,function(Qv){return{propKey:Ru,error:Qv}})))})}if(kh){var Eg=function(Qa,Ru){if(!new RegExp(Ru).test(Qa))return"Value must follow pattern "+Ru}(sr,kh);Eg&&ss.push(Eg)}if(ff&&"array"===xa){var Lp=function(Qa,Ru){var Kc;if(!Qa&&Ru>=1||Qa&&Qa.length<Ru)return(0,V.default)(Kc="Array must contain at least ".concat(Ru," item")).call(Kc,1===Ru?"":"s")}(sr,ff);Lp&&ss.push(Lp)}if(Pl&&"array"===xa){var vC=function(Qa,Ru){var Kc;if(Qa&&Qa.length>Ru)return(0,V.default)(Kc="Array must not contain more then ".concat(Ru," item")).call(Kc,1===Ru?"":"s")}(sr,Pl);vC&&ss.push({needRemove:!0,error:vC})}if(op&&"array"===xa){var Nd=function(Qa,Ru){if(Qa&&("true"===Ru||!0===Ru)){var Kc=(0,Jt.fromJS)(Qa),Qv=Kc.toSet();if(Qa.length>Qv.size){var tv=(0,Jt.Set)();if((0,Q.default)(Kc).call(Kc,function(Xv,kp){(0,oe.default)(Kc).call(Kc,function(nv){return zs(nv.equals)?nv.equals(Xv):nv===Xv}).size>1&&(tv=tv.add(kp))}),0!==tv.size)return(0,R.default)(tv).call(tv,function(Xv){return{index:Xv,error:"No duplicates allowed."}}).toArray()}}}(sr,op);Nd&&ss.push.apply(ss,(0,o.default)(Nd))}if(nu||0===nu){var yC=function(Qa,Ru){var Kc;if(Qa.length>Ru)return(0,V.default)(Kc="Value must be no longer than ".concat(Ru," character")).call(Kc,1!==Ru?"s":"")}(sr,nu);yC&&ss.push(yC)}if(jd){var LE=function(Qa,Ru){var Kc;if(Qa.length<Ru)return(0,V.default)(Kc="Value must be at least ".concat(Ru," character")).call(Kc,1!==Ru?"s":"")}(sr,jd);LE&&ss.push(LE)}if(fl||0===fl){var EC=function(Qa,Ru){if(Qa>Ru)return"Value must be less than ".concat(Ru)}(sr,fl);EC&&ss.push(EC)}if(Ba||0===Ba){var bC=function(Qa,Ru){if(Qa<Ru)return"Value must be greater than ".concat(Ru)}(sr,Ba);bC&&ss.push(bC)}if("string"===xa){var kE;if(!(kE="date-time"===yu?function(Qa){if(isNaN(Date.parse(Qa)))return"Value must be a DateTime"}(sr):"uuid"===yu?function(Qa){if(Qa=Qa.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(Qa))return"Value must be a Guid"}(sr):function(Qa){if(Qa&&"string"!=typeof Qa)return"Value must be a string"}(sr)))return ss;ss.push(kE)}else if("boolean"===xa){var x0=function(Qa){if("true"!==Qa&&"false"!==Qa&&!0!==Qa&&!1!==Qa)return"Value must be a boolean"}(sr);if(!x0)return ss;ss.push(x0)}else if("number"===xa){var SC=function(Qa){if(!/^-?\d+(\.?\d+)?$/.test(Qa))return"Value must be a number"}(sr);if(!SC)return ss;ss.push(SC)}else if("integer"===xa){var TC=function(Qa){if(!/^-?\d+$/.test(Qa))return"Value must be an integer"}(sr);if(!TC)return ss;ss.push(TC)}else if("array"===xa){if(!ev&&!sh)return ss;sr&&(0,Q.default)(sr).call(sr,function(Qa,Ru){var Kc=Gr(Qa,Bi.get("items"),!1,zi,Ds);ss.push.apply(ss,(0,o.default)((0,R.default)(Kc).call(Kc,function(Qv){return{index:Ru,error:Qv}})))})}else if("file"===xa){var CC=function(Qa){if(Qa&&!(Qa instanceof Jn.Z.File))return"Value must be a file"}(sr);if(!CC)return ss;ss.push(CC)}return ss}var Fi=function(sr,Bi){var cs=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},zi=cs.isOAS3,Ds=void 0!==zi&&zi,ss=cs.bypassRequiredCheck,tu=void 0!==ss&&ss,bl=sr.get("required"),fl=(0,ur.Z)(sr,{isOAS3:Ds}),Ba=fl.schema,xa=fl.parameterContentMediaType;return Gr(Bi,Ba,bl,tu,xa)},Ws=function(sr,Bi,cs){if(sr&&(!sr.xml||!sr.xml.name)){if(sr.xml=sr.xml||{},!sr.$$ref)return sr.type||sr.items||sr.properties||sr.additionalProperties?'<?xml version="1.0" encoding="UTF-8"?>\n\x3c!-- XML example cannot be generated; root element name is undefined --\x3e':null;var zi=sr.$$ref.match(/\S*\/(\S+)$/);sr.xml.name=zi[1]}return(0,On.memoizedCreateXMLExample)(sr,Bi,cs)},Zo=[{when:/json/,shouldStringifyTypes:["string"]}],ol=["object"],gl=function(sr,Bi,cs,zi){var Ds=(0,On.memoizedSampleFromSchema)(sr,Bi,zi),ss=(0,l.default)(Ds),tu=(0,_e.default)(Zo).call(Zo,function(bl,fl){var Ba;return fl.when.test(cs)?(0,V.default)(Ba=[]).call(Ba,(0,o.default)(bl),(0,o.default)(fl.shouldStringifyTypes)):bl},ol);return(0,Hr.default)(tu,function(bl){return bl===ss})?(0,we.default)(Ds,null,2):Ds},Zl=function(sr,Bi,cs,zi){var Ds,ss=gl(sr,Bi,cs,zi);try{"\n"===(Ds=ji.default.dump(ji.default.load(ss),{lineWidth:-1},{schema:ji.JSON_SCHEMA}))[Ds.length-1]&&(Ds=(0,Ie.default)(Ds).call(Ds,0,Ds.length-1))}catch(tu){return console.error(tu),"error: could not generate yaml example"}return Ds.replace(/\t/g,"  ")},Ju=function(sr){var Bi=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",cs=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},zi=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return sr&&zs(sr.toJS)&&(sr=sr.toJS()),zi&&zs(zi.toJS)&&(zi=zi.toJS()),/xml/.test(Bi)?Ws(sr,cs,zi):/(yaml|yml)/.test(Bi)?Zl(sr,cs,Bi,zi):gl(sr,cs,Bi,zi)},Gf=function(){var sr={},Bi=Jn.Z.location.search;if(!Bi)return{};if(""!=Bi){var cs=Bi.substr(1).split("&");for(var zi in cs)Object.prototype.hasOwnProperty.call(cs,zi)&&(zi=cs[zi].split("="),sr[decodeURIComponent(zi[0])]=zi[1]&&decodeURIComponent(zi[1])||"")}return sr},wl=function(sr){return(sr instanceof Wr?sr:Wr.from(sr.toString(),"utf-8")).toString("base64")},Zc={operationsSorter:{alpha:function(sr,Bi){return sr.get("path").localeCompare(Bi.get("path"))},method:function(sr,Bi){return sr.get("method").localeCompare(Bi.get("method"))}},tagsSorter:{alpha:function(sr,Bi){return sr.localeCompare(Bi)}}},gp=function(sr){var Bi=[];for(var cs in sr){var zi=sr[cs];void 0!==zi&&""!==zi&&Bi.push([cs,"=",encodeURIComponent(zi).replace(/%20/g,"+")].join(""))}return Bi.join("&")},Fh=function(sr,Bi,cs){return!!(0,zr.default)(cs,function(zi){return(0,Vr.default)(sr[zi],Bi[zi])})};function oh(sr){return"string"!=typeof sr||""===sr?"":(0,Mn.sanitizeUrl)(sr)}function Lh(sr){return!(!sr||(0,G.default)(sr).call(sr,"localhost")>=0||(0,G.default)(sr).call(sr,"127.0.0.1")>=0||"none"===sr)}function zl(sr){if(!Jt.default.OrderedMap.isOrderedMap(sr)||!sr.size)return null;var Bi=(0,Dt.default)(sr).call(sr,function(Ds,ss){return(0,bt.default)(ss).call(ss,"2")&&(0,le.default)(Ds.get("content")||{}).length>0}),cs=sr.get("default")||Jt.default.OrderedMap(),zi=(cs.get("content")||Jt.default.OrderedMap()).keySeq().toJS().length?cs:null;return Bi||zi}var $c=function(sr){return"string"==typeof sr||sr instanceof String?(0,Bt.default)(sr).call(sr).replace(/\s/g,"%20"):""},Fp=function(sr){return(0,Qn.default)($c(sr).replace(/%20/g,"_"))},Zi=function(sr){return(0,oe.default)(sr).call(sr,function(Bi,cs){return/^x-/.test(cs)})},mr=function(sr){return(0,oe.default)(sr).call(sr,function(Bi,cs){return/^pattern|maxLength|minLength|maximum|minimum/.test(cs)})};function Mi(sr,Bi){var cs,zi=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){return!0};if("object"!==(0,l.default)(sr)||(0,C.default)(sr)||null===sr||!Bi)return sr;var Ds=(0,ye.default)({},sr);return(0,Q.default)(cs=(0,le.default)(Ds)).call(cs,function(ss){ss===Bi&&zi(Ds[ss],ss)?delete Ds[ss]:Ds[ss]=Mi(Ds[ss],Bi,zi)}),Ds}function eo(sr){if("string"==typeof sr)return sr;if(sr&&sr.toJS&&(sr=sr.toJS()),"object"===(0,l.default)(sr)&&null!==sr)try{return(0,we.default)(sr,null,2)}catch(Bi){return String(sr)}return null==sr?"":sr.toString()}function No(sr){return"number"==typeof sr?sr.toString():sr}function qo(sr){var Bi=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},cs=Bi.returnAll,zi=void 0!==cs&&cs,Ds=Bi.allowHashes,ss=void 0===Ds||Ds;if(!Jt.default.Map.isMap(sr))throw new Error("paramToIdentifier: received a non-Im.Map parameter as input");var tu,bl,fl,Ba=sr.get("name"),xa=sr.get("in"),yu=[];return sr&&sr.hashCode&&xa&&Ba&&ss&&yu.push((0,V.default)(tu=(0,V.default)(bl="".concat(xa,".")).call(bl,Ba,".hash-")).call(tu,sr.hashCode())),xa&&Ba&&yu.push((0,V.default)(fl="".concat(xa,".")).call(fl,Ba)),yu.push(Ba),zi?yu:yu[0]||""}function os(sr,Bi){var cs,zi=qo(sr,{returnAll:!0});return(0,oe.default)(cs=(0,R.default)(zi).call(zi,function(Ds){return Bi[Ds]})).call(cs,function(Ds){return void 0!==Ds})[0]}function ps(){return tl(Yr()(32).toString("base64"))}function _a(sr){return tl(Di()("sha256").update(sr).digest("base64"))}function tl(sr){return sr.replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}var vu=function(sr){return!sr||!(!bn(sr)||!sr.isEmpty())}},2518:(n,s,t)=>{function o(l){return function(_){try{return!!JSON.parse(_)}catch(C){return null}}(l)?"json":null}t.d(s,{O:()=>o})},7504:(n,s,t)=>{t.d(s,{Z:()=>o});const o=function(){var l={location:{},history:{},open:function(){},close:function(){},File:function(){}};if("undefined"==typeof window)return l;try{l=window;for(var _=0,C=["File","Blob","FormData"];_<C.length;_++){var R=C[_];R in window&&(l[R]=window[R])}}catch(N){console.error(N)}return l}()},9069:(n,s,t)=>{t.d(s,{Z:()=>R});var o=t(6145),l=t(2372),_=t(9725),C=_.default.Set.of("type","format","items","default","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","maxItems","minItems","uniqueItems","enum","multipleOf");function R(N){var V=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},Q=V.isOAS3;if(!_.default.Map.isMap(N))return{schema:_.default.Map(),parameterContentMediaType:null};if(!Q)return"body"===N.get("in")?{schema:N.get("schema",_.default.Map()),parameterContentMediaType:null}:{schema:(0,o.default)(N).call(N,function(_e,ye){return(0,l.default)(C).call(C,ye)}),parameterContentMediaType:null};if(N.get("content")){var oe=N.get("content",_.default.Map({})).keySeq(),le=oe.first();return{schema:N.getIn(["content",le,"schema"],_.default.Map()),parameterContentMediaType:le}}return{schema:N.get("schema",_.default.Map()),parameterContentMediaType:null}}},8287:(n,s,t)=>{t.d(s,{Z:()=>bt});var o=t(7344),l=t(8656);const _=(t.d(Jt={},{default:()=>lC}),Jt),C=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>Zv});var Jt,R=t(9972),N=t(5416);const V=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>WA});var Q=t(4163),oe=t(7930),le=t(8898),_e=t(5487),ye=t(1778);const $e=(Bt=>{var Jt={};return t.d(Jt,Bt),Jt})({default:()=>rL()});var Ie=t(6914),ke=t(5476),we=function(Bt){return function(Jt){return(0,Q.default)(Bt)&&(0,Q.default)(Jt)&&Bt.length===Jt.length&&(0,oe.default)(Bt).call(Bt,function(Mn,zt){return Mn===Jt[zt]})}},G=function(){for(var Bt=arguments.length,Jt=new Array(Bt),Mn=0;Mn<Bt;Mn++)Jt[Mn]=arguments[Mn];return Jt},Dt=function(Bt){(0,R.default)(Mn,Bt);var Jt=(0,N.default)(Mn);function Mn(){return(0,o.default)(this,Mn),Jt.apply(this,arguments)}return(0,l.default)(Mn,[{key:"delete",value:function(zt){var xn=(0,le.default)((0,_e.default)(this).call(this)),Nn=(0,ye.default)(xn).call(xn,we(zt));return(0,_.default)((0,C.default)(Mn.prototype),"delete",this).call(this,Nn)}},{key:"get",value:function(zt){var xn=(0,le.default)((0,_e.default)(this).call(this)),Nn=(0,ye.default)(xn).call(xn,we(zt));return(0,_.default)((0,C.default)(Mn.prototype),"get",this).call(this,Nn)}},{key:"has",value:function(zt){var xn=(0,le.default)((0,_e.default)(this).call(this));return-1!==(0,$e.default)(xn).call(xn,we(zt))}}]),Mn}((0,V.default)(Ie.default));const bt=function(Bt){var Jt=arguments.length>1&&void 0!==arguments[1]?arguments[1]:G,Mn=ke.default.Cache;ke.default.Cache=Dt;var zt=(0,ke.default)(Bt,Jt);return ke.default.Cache=Mn,zt}},8764:(n,s,t)=>{const o=t(4780),l=t(3294),_="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;s.Buffer=N,s.SlowBuffer=function(Qe){return+Qe!=Qe&&(Qe=0),N.alloc(+Qe)},s.INSPECT_MAX_BYTES=50;const C=2147483647;function R(Qe){if(Qe>C)throw new RangeError('The value "'+Qe+'" is invalid for option "size"');const Pt=new Uint8Array(Qe);return Object.setPrototypeOf(Pt,N.prototype),Pt}function N(Qe,Pt,Rt){if("number"==typeof Qe){if("string"==typeof Pt)throw new TypeError('The "string" argument must be of type string. Received type number');return oe(Qe)}return V(Qe,Pt,Rt)}function V(Qe,Pt,Rt){if("string"==typeof Qe)return function(Gr,Fi){if("string"==typeof Fi&&""!==Fi||(Fi="utf8"),!N.isEncoding(Fi))throw new TypeError("Unknown encoding: "+Fi);const Ws=0|$e(Gr,Fi);let Zo=R(Ws);const ol=Zo.write(Gr,Fi);return ol!==Ws&&(Zo=Zo.slice(0,ol)),Zo}(Qe,Pt);if(ArrayBuffer.isView(Qe))return function(Gr){if(zs(Gr,Uint8Array)){const Fi=new Uint8Array(Gr);return _e(Fi.buffer,Fi.byteOffset,Fi.byteLength)}return le(Gr)}(Qe);if(null==Qe)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Qe);if(zs(Qe,ArrayBuffer)||Qe&&zs(Qe.buffer,ArrayBuffer)||"undefined"!=typeof SharedArrayBuffer&&(zs(Qe,SharedArrayBuffer)||Qe&&zs(Qe.buffer,SharedArrayBuffer)))return _e(Qe,Pt,Rt);if("number"==typeof Qe)throw new TypeError('The "value" argument must not be of type number. Received type number');const qn=Qe.valueOf&&Qe.valueOf();if(null!=qn&&qn!==Qe)return N.from(qn,Pt,Rt);const wr=function(Gr){if(N.isBuffer(Gr)){const Fi=0|ye(Gr.length),Ws=R(Fi);return 0===Ws.length||Gr.copy(Ws,0,0,Fi),Ws}return void 0!==Gr.length?"number"!=typeof Gr.length||Qs(Gr.length)?R(0):le(Gr):"Buffer"===Gr.type&&Array.isArray(Gr.data)?le(Gr.data):void 0}(Qe);if(wr)return wr;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof Qe[Symbol.toPrimitive])return N.from(Qe[Symbol.toPrimitive]("string"),Pt,Rt);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Qe)}function Q(Qe){if("number"!=typeof Qe)throw new TypeError('"size" argument must be of type number');if(Qe<0)throw new RangeError('The value "'+Qe+'" is invalid for option "size"')}function oe(Qe){return Q(Qe),R(Qe<0?0:0|ye(Qe))}function le(Qe){const Pt=Qe.length<0?0:0|ye(Qe.length),Rt=R(Pt);for(let qn=0;qn<Pt;qn+=1)Rt[qn]=255&Qe[qn];return Rt}function _e(Qe,Pt,Rt){if(Pt<0||Qe.byteLength<Pt)throw new RangeError('"offset" is outside of buffer bounds');if(Qe.byteLength<Pt+(Rt||0))throw new RangeError('"length" is outside of buffer bounds');let qn;return qn=void 0===Pt&&void 0===Rt?new Uint8Array(Qe):void 0===Rt?new Uint8Array(Qe,Pt):new Uint8Array(Qe,Pt,Rt),Object.setPrototypeOf(qn,N.prototype),qn}function ye(Qe){if(Qe>=C)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+C.toString(16)+" bytes");return 0|Qe}function $e(Qe,Pt){if(N.isBuffer(Qe))return Qe.length;if(ArrayBuffer.isView(Qe)||zs(Qe,ArrayBuffer))return Qe.byteLength;if("string"!=typeof Qe)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof Qe);const Rt=Qe.length,qn=arguments.length>2&&!0===arguments[2];if(!qn&&0===Rt)return 0;let wr=!1;for(;;)switch(Pt){case"ascii":case"latin1":case"binary":return Rt;case"utf8":case"utf-8":return Xi(Qe).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*Rt;case"hex":return Rt>>>1;case"base64":return Bo(Qe).length;default:if(wr)return qn?-1:Xi(Qe).length;Pt=(""+Pt).toLowerCase(),wr=!0}}function Ie(Qe,Pt,Rt){let qn=!1;if((void 0===Pt||Pt<0)&&(Pt=0),Pt>this.length||((void 0===Rt||Rt>this.length)&&(Rt=this.length),Rt<=0)||(Rt>>>=0)<=(Pt>>>=0))return"";for(Qe||(Qe="utf8");;)switch(Qe){case"hex":return Vr(this,Pt,Rt);case"utf8":case"utf-8":return xn(this,Pt,Rt);case"ascii":return zr(this,Pt,Rt);case"latin1":case"binary":return Hr(this,Pt,Rt);case"base64":return zt(this,Pt,Rt);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return qr(this,Pt,Rt);default:if(qn)throw new TypeError("Unknown encoding: "+Qe);Qe=(Qe+"").toLowerCase(),qn=!0}}function ke(Qe,Pt,Rt){const qn=Qe[Pt];Qe[Pt]=Qe[Rt],Qe[Rt]=qn}function we(Qe,Pt,Rt,qn,wr){if(0===Qe.length)return-1;if("string"==typeof Rt?(qn=Rt,Rt=0):Rt>2147483647?Rt=2147483647:Rt<-2147483648&&(Rt=-2147483648),Qs(Rt=+Rt)&&(Rt=wr?0:Qe.length-1),Rt<0&&(Rt=Qe.length+Rt),Rt>=Qe.length){if(wr)return-1;Rt=Qe.length-1}else if(Rt<0){if(!wr)return-1;Rt=0}if("string"==typeof Pt&&(Pt=N.from(Pt,qn)),N.isBuffer(Pt))return 0===Pt.length?-1:G(Qe,Pt,Rt,qn,wr);if("number"==typeof Pt)return Pt&=255,"function"==typeof Uint8Array.prototype.indexOf?wr?Uint8Array.prototype.indexOf.call(Qe,Pt,Rt):Uint8Array.prototype.lastIndexOf.call(Qe,Pt,Rt):G(Qe,[Pt],Rt,qn,wr);throw new TypeError("val must be string, number or Buffer")}function G(Qe,Pt,Rt,qn,wr){let Gr,Fi=1,Ws=Qe.length,Zo=Pt.length;if(void 0!==qn&&("ucs2"===(qn=String(qn).toLowerCase())||"ucs-2"===qn||"utf16le"===qn||"utf-16le"===qn)){if(Qe.length<2||Pt.length<2)return-1;Fi=2,Ws/=2,Zo/=2,Rt/=2}function ol(gl,Zl){return 1===Fi?gl[Zl]:gl.readUInt16BE(Zl*Fi)}if(wr){let gl=-1;for(Gr=Rt;Gr<Ws;Gr++)if(ol(Qe,Gr)===ol(Pt,-1===gl?0:Gr-gl)){if(-1===gl&&(gl=Gr),Gr-gl+1===Zo)return gl*Fi}else-1!==gl&&(Gr-=Gr-gl),gl=-1}else for(Rt+Zo>Ws&&(Rt=Ws-Zo),Gr=Rt;Gr>=0;Gr--){let gl=!0;for(let Zl=0;Zl<Zo;Zl++)if(ol(Qe,Gr+Zl)!==ol(Pt,Zl)){gl=!1;break}if(gl)return Gr}return-1}function Dt(Qe,Pt,Rt,qn){Rt=Number(Rt)||0;const wr=Qe.length-Rt;qn?(qn=Number(qn))>wr&&(qn=wr):qn=wr;const Gr=Pt.length;let Fi;for(qn>Gr/2&&(qn=Gr/2),Fi=0;Fi<qn;++Fi){const Ws=parseInt(Pt.substr(2*Fi,2),16);if(Qs(Ws))return Fi;Qe[Rt+Fi]=Ws}return Fi}function bt(Qe,Pt,Rt,qn){return Ao(Xi(Pt,Qe.length-Rt),Qe,Rt,qn)}function Bt(Qe,Pt,Rt,qn){return Ao(function(wr){const Gr=[];for(let Fi=0;Fi<wr.length;++Fi)Gr.push(255&wr.charCodeAt(Fi));return Gr}(Pt),Qe,Rt,qn)}function Jt(Qe,Pt,Rt,qn){return Ao(Bo(Pt),Qe,Rt,qn)}function Mn(Qe,Pt,Rt,qn){return Ao(function(wr,Gr){let Fi,Ws,Zo;const ol=[];for(let gl=0;gl<wr.length&&!((Gr-=2)<0);++gl)Fi=wr.charCodeAt(gl),Ws=Fi>>8,Zo=Fi%256,ol.push(Zo),ol.push(Ws);return ol}(Pt,Qe.length-Rt),Qe,Rt,qn)}function zt(Qe,Pt,Rt){return o.fromByteArray(0===Pt&&Rt===Qe.length?Qe:Qe.slice(Pt,Rt))}function xn(Qe,Pt,Rt){Rt=Math.min(Qe.length,Rt);const qn=[];let wr=Pt;for(;wr<Rt;){const Gr=Qe[wr];let Fi=null,Ws=Gr>239?4:Gr>223?3:Gr>191?2:1;if(wr+Ws<=Rt){let Zo,ol,gl,Zl;switch(Ws){case 1:Gr<128&&(Fi=Gr);break;case 2:Zo=Qe[wr+1],128==(192&Zo)&&(Zl=(31&Gr)<<6|63&Zo,Zl>127&&(Fi=Zl));break;case 3:Zo=Qe[wr+1],ol=Qe[wr+2],128==(192&Zo)&&128==(192&ol)&&(Zl=(15&Gr)<<12|(63&Zo)<<6|63&ol,Zl>2047&&(Zl<55296||Zl>57343)&&(Fi=Zl));break;case 4:Zo=Qe[wr+1],ol=Qe[wr+2],gl=Qe[wr+3],128==(192&Zo)&&128==(192&ol)&&128==(192&gl)&&(Zl=(15&Gr)<<18|(63&Zo)<<12|(63&ol)<<6|63&gl,Zl>65535&&Zl<1114112&&(Fi=Zl))}}null===Fi?(Fi=65533,Ws=1):Fi>65535&&(Fi-=65536,qn.push(Fi>>>10&1023|55296),Fi=56320|1023&Fi),qn.push(Fi),wr+=Ws}return function(Gr){const Fi=Gr.length;if(Fi<=Nn)return String.fromCharCode.apply(String,Gr);let Ws="",Zo=0;for(;Zo<Fi;)Ws+=String.fromCharCode.apply(String,Gr.slice(Zo,Zo+=Nn));return Ws}(qn)}s.kMaxLength=C,(N.TYPED_ARRAY_SUPPORT=function(){try{const Qe=new Uint8Array(1),Pt={foo:function(){return 42}};return Object.setPrototypeOf(Pt,Uint8Array.prototype),Object.setPrototypeOf(Qe,Pt),42===Qe.foo()}catch(Qe){return!1}}())||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(N.prototype,"parent",{enumerable:!0,get:function(){if(N.isBuffer(this))return this.buffer}}),Object.defineProperty(N.prototype,"offset",{enumerable:!0,get:function(){if(N.isBuffer(this))return this.byteOffset}}),N.poolSize=8192,N.from=function(Qe,Pt,Rt){return V(Qe,Pt,Rt)},Object.setPrototypeOf(N.prototype,Uint8Array.prototype),Object.setPrototypeOf(N,Uint8Array),N.alloc=function(Qe,Pt,Rt){return wr=Pt,Gr=Rt,Q(qn=Qe),qn<=0?R(qn):void 0!==wr?"string"==typeof Gr?R(qn).fill(wr,Gr):R(qn).fill(wr):R(qn);var qn,wr,Gr},N.allocUnsafe=function(Qe){return oe(Qe)},N.allocUnsafeSlow=function(Qe){return oe(Qe)},N.isBuffer=function(Qe){return null!=Qe&&!0===Qe._isBuffer&&Qe!==N.prototype},N.compare=function(Qe,Pt){if(zs(Qe,Uint8Array)&&(Qe=N.from(Qe,Qe.offset,Qe.byteLength)),zs(Pt,Uint8Array)&&(Pt=N.from(Pt,Pt.offset,Pt.byteLength)),!N.isBuffer(Qe)||!N.isBuffer(Pt))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(Qe===Pt)return 0;let Rt=Qe.length,qn=Pt.length;for(let wr=0,Gr=Math.min(Rt,qn);wr<Gr;++wr)if(Qe[wr]!==Pt[wr]){Rt=Qe[wr],qn=Pt[wr];break}return Rt<qn?-1:qn<Rt?1:0},N.isEncoding=function(Qe){switch(String(Qe).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},N.concat=function(Qe,Pt){if(!Array.isArray(Qe))throw new TypeError('"list" argument must be an Array of Buffers');if(0===Qe.length)return N.alloc(0);let Rt;if(void 0===Pt)for(Pt=0,Rt=0;Rt<Qe.length;++Rt)Pt+=Qe[Rt].length;const qn=N.allocUnsafe(Pt);let wr=0;for(Rt=0;Rt<Qe.length;++Rt){let Gr=Qe[Rt];if(zs(Gr,Uint8Array))wr+Gr.length>qn.length?(N.isBuffer(Gr)||(Gr=N.from(Gr)),Gr.copy(qn,wr)):Uint8Array.prototype.set.call(qn,Gr,wr);else{if(!N.isBuffer(Gr))throw new TypeError('"list" argument must be an Array of Buffers');Gr.copy(qn,wr)}wr+=Gr.length}return qn},N.byteLength=$e,N.prototype._isBuffer=!0,N.prototype.swap16=function(){const Qe=this.length;if(Qe%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let Pt=0;Pt<Qe;Pt+=2)ke(this,Pt,Pt+1);return this},N.prototype.swap32=function(){const Qe=this.length;if(Qe%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let Pt=0;Pt<Qe;Pt+=4)ke(this,Pt,Pt+3),ke(this,Pt+1,Pt+2);return this},N.prototype.swap64=function(){const Qe=this.length;if(Qe%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let Pt=0;Pt<Qe;Pt+=8)ke(this,Pt,Pt+7),ke(this,Pt+1,Pt+6),ke(this,Pt+2,Pt+5),ke(this,Pt+3,Pt+4);return this},N.prototype.toLocaleString=N.prototype.toString=function(){const Qe=this.length;return 0===Qe?"":0===arguments.length?xn(this,0,Qe):Ie.apply(this,arguments)},N.prototype.equals=function(Qe){if(!N.isBuffer(Qe))throw new TypeError("Argument must be a Buffer");return this===Qe||0===N.compare(this,Qe)},N.prototype.inspect=function(){let Qe="";const Pt=s.INSPECT_MAX_BYTES;return Qe=this.toString("hex",0,Pt).replace(/(.{2})/g,"$1 ").trim(),this.length>Pt&&(Qe+=" ... "),"<Buffer "+Qe+">"},_&&(N.prototype[_]=N.prototype.inspect),N.prototype.compare=function(Qe,Pt,Rt,qn,wr){if(zs(Qe,Uint8Array)&&(Qe=N.from(Qe,Qe.offset,Qe.byteLength)),!N.isBuffer(Qe))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof Qe);if(void 0===Pt&&(Pt=0),void 0===Rt&&(Rt=Qe?Qe.length:0),void 0===qn&&(qn=0),void 0===wr&&(wr=this.length),Pt<0||Rt>Qe.length||qn<0||wr>this.length)throw new RangeError("out of range index");if(qn>=wr&&Pt>=Rt)return 0;if(qn>=wr)return-1;if(Pt>=Rt)return 1;if(this===Qe)return 0;let Gr=(wr>>>=0)-(qn>>>=0),Fi=(Rt>>>=0)-(Pt>>>=0);const Ws=Math.min(Gr,Fi),Zo=this.slice(qn,wr),ol=Qe.slice(Pt,Rt);for(let gl=0;gl<Ws;++gl)if(Zo[gl]!==ol[gl]){Gr=Zo[gl],Fi=ol[gl];break}return Gr<Fi?-1:Fi<Gr?1:0},N.prototype.includes=function(Qe,Pt,Rt){return-1!==this.indexOf(Qe,Pt,Rt)},N.prototype.indexOf=function(Qe,Pt,Rt){return we(this,Qe,Pt,Rt,!0)},N.prototype.lastIndexOf=function(Qe,Pt,Rt){return we(this,Qe,Pt,Rt,!1)},N.prototype.write=function(Qe,Pt,Rt,qn){if(void 0===Pt)qn="utf8",Rt=this.length,Pt=0;else if(void 0===Rt&&"string"==typeof Pt)qn=Pt,Rt=this.length,Pt=0;else{if(!isFinite(Pt))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");Pt>>>=0,isFinite(Rt)?(Rt>>>=0,void 0===qn&&(qn="utf8")):(qn=Rt,Rt=void 0)}const wr=this.length-Pt;if((void 0===Rt||Rt>wr)&&(Rt=wr),Qe.length>0&&(Rt<0||Pt<0)||Pt>this.length)throw new RangeError("Attempt to write outside buffer bounds");qn||(qn="utf8");let Gr=!1;for(;;)switch(qn){case"hex":return Dt(this,Qe,Pt,Rt);case"utf8":case"utf-8":return bt(this,Qe,Pt,Rt);case"ascii":case"latin1":case"binary":return Bt(this,Qe,Pt,Rt);case"base64":return Jt(this,Qe,Pt,Rt);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Mn(this,Qe,Pt,Rt);default:if(Gr)throw new TypeError("Unknown encoding: "+qn);qn=(""+qn).toLowerCase(),Gr=!0}},N.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const Nn=4096;function zr(Qe,Pt,Rt){let qn="";Rt=Math.min(Qe.length,Rt);for(let wr=Pt;wr<Rt;++wr)qn+=String.fromCharCode(127&Qe[wr]);return qn}function Hr(Qe,Pt,Rt){let qn="";Rt=Math.min(Qe.length,Rt);for(let wr=Pt;wr<Rt;++wr)qn+=String.fromCharCode(Qe[wr]);return qn}function Vr(Qe,Pt,Rt){const qn=Qe.length;(!Pt||Pt<0)&&(Pt=0),(!Rt||Rt<0||Rt>qn)&&(Rt=qn);let wr="";for(let Gr=Pt;Gr<Rt;++Gr)wr+=Ii[Qe[Gr]];return wr}function qr(Qe,Pt,Rt){const qn=Qe.slice(Pt,Rt);let wr="";for(let Gr=0;Gr<qn.length-1;Gr+=2)wr+=String.fromCharCode(qn[Gr]+256*qn[Gr+1]);return wr}function On(Qe,Pt,Rt){if(Qe%1!=0||Qe<0)throw new RangeError("offset is not uint");if(Qe+Pt>Rt)throw new RangeError("Trying to access beyond buffer length")}function Jn(Qe,Pt,Rt,qn,wr,Gr){if(!N.isBuffer(Qe))throw new TypeError('"buffer" argument must be a Buffer instance');if(Pt>wr||Pt<Gr)throw new RangeError('"value" argument is out of bounds');if(Rt+qn>Qe.length)throw new RangeError("Index out of range")}function Qn(Qe,Pt,Rt,qn,wr){Bn(Pt,qn,wr,Qe,Rt,7);let Gr=Number(Pt&BigInt(4294967295));Qe[Rt++]=Gr,Gr>>=8,Qe[Rt++]=Gr,Gr>>=8,Qe[Rt++]=Gr,Gr>>=8,Qe[Rt++]=Gr;let Fi=Number(Pt>>BigInt(32)&BigInt(4294967295));return Qe[Rt++]=Fi,Fi>>=8,Qe[Rt++]=Fi,Fi>>=8,Qe[Rt++]=Fi,Fi>>=8,Qe[Rt++]=Fi,Rt}function ur(Qe,Pt,Rt,qn,wr){Bn(Pt,qn,wr,Qe,Rt,7);let Gr=Number(Pt&BigInt(4294967295));Qe[Rt+7]=Gr,Gr>>=8,Qe[Rt+6]=Gr,Gr>>=8,Qe[Rt+5]=Gr,Gr>>=8,Qe[Rt+4]=Gr;let Fi=Number(Pt>>BigInt(32)&BigInt(4294967295));return Qe[Rt+3]=Fi,Fi>>=8,Qe[Rt+2]=Fi,Fi>>=8,Qe[Rt+1]=Fi,Fi>>=8,Qe[Rt]=Fi,Rt+8}function In(Qe,Pt,Rt,qn,wr,Gr){if(Rt+qn>Qe.length)throw new RangeError("Index out of range");if(Rt<0)throw new RangeError("Index out of range")}function Yr(Qe,Pt,Rt,qn,wr){return Pt=+Pt,Rt>>>=0,wr||In(Qe,0,Rt,4),l.write(Qe,Pt,Rt,qn,23,4),Rt+4}function Qi(Qe,Pt,Rt,qn,wr){return Pt=+Pt,Rt>>>=0,wr||In(Qe,0,Rt,8),l.write(Qe,Pt,Rt,qn,52,8),Rt+8}N.prototype.slice=function(Qe,Pt){const Rt=this.length;(Qe=~~Qe)<0?(Qe+=Rt)<0&&(Qe=0):Qe>Rt&&(Qe=Rt),(Pt=void 0===Pt?Rt:~~Pt)<0?(Pt+=Rt)<0&&(Pt=0):Pt>Rt&&(Pt=Rt),Pt<Qe&&(Pt=Qe);const qn=this.subarray(Qe,Pt);return Object.setPrototypeOf(qn,N.prototype),qn},N.prototype.readUintLE=N.prototype.readUIntLE=function(Qe,Pt,Rt){Qe>>>=0,Pt>>>=0,Rt||On(Qe,Pt,this.length);let qn=this[Qe],wr=1,Gr=0;for(;++Gr<Pt&&(wr*=256);)qn+=this[Qe+Gr]*wr;return qn},N.prototype.readUintBE=N.prototype.readUIntBE=function(Qe,Pt,Rt){Qe>>>=0,Pt>>>=0,Rt||On(Qe,Pt,this.length);let qn=this[Qe+--Pt],wr=1;for(;Pt>0&&(wr*=256);)qn+=this[Qe+--Pt]*wr;return qn},N.prototype.readUint8=N.prototype.readUInt8=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,1,this.length),this[Qe]},N.prototype.readUint16LE=N.prototype.readUInt16LE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,2,this.length),this[Qe]|this[Qe+1]<<8},N.prototype.readUint16BE=N.prototype.readUInt16BE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,2,this.length),this[Qe]<<8|this[Qe+1]},N.prototype.readUint32LE=N.prototype.readUInt32LE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,4,this.length),(this[Qe]|this[Qe+1]<<8|this[Qe+2]<<16)+16777216*this[Qe+3]},N.prototype.readUint32BE=N.prototype.readUInt32BE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,4,this.length),16777216*this[Qe]+(this[Qe+1]<<16|this[Qe+2]<<8|this[Qe+3])},N.prototype.readBigUInt64LE=uo(function(Qe){bn(Qe>>>=0,"offset");const Pt=this[Qe],Rt=this[Qe+7];void 0!==Pt&&void 0!==Rt||Xr(Qe,this.length-8);const qn=Pt+256*this[++Qe]+65536*this[++Qe]+this[++Qe]*Jm(2,24),wr=this[++Qe]+256*this[++Qe]+65536*this[++Qe]+Rt*Jm(2,24);return BigInt(qn)+(BigInt(wr)<<BigInt(32))}),N.prototype.readBigUInt64BE=uo(function(Qe){bn(Qe>>>=0,"offset");const Pt=this[Qe],Rt=this[Qe+7];void 0!==Pt&&void 0!==Rt||Xr(Qe,this.length-8);const qn=Pt*Jm(2,24)+65536*this[++Qe]+256*this[++Qe]+this[++Qe],wr=this[++Qe]*Jm(2,24)+65536*this[++Qe]+256*this[++Qe]+Rt;return(BigInt(qn)<<BigInt(32))+BigInt(wr)}),N.prototype.readIntLE=function(Qe,Pt,Rt){Qe>>>=0,Pt>>>=0,Rt||On(Qe,Pt,this.length);let qn=this[Qe],wr=1,Gr=0;for(;++Gr<Pt&&(wr*=256);)qn+=this[Qe+Gr]*wr;return wr*=128,qn>=wr&&(qn-=Math.pow(2,8*Pt)),qn},N.prototype.readIntBE=function(Qe,Pt,Rt){Qe>>>=0,Pt>>>=0,Rt||On(Qe,Pt,this.length);let qn=Pt,wr=1,Gr=this[Qe+--qn];for(;qn>0&&(wr*=256);)Gr+=this[Qe+--qn]*wr;return wr*=128,Gr>=wr&&(Gr-=Math.pow(2,8*Pt)),Gr},N.prototype.readInt8=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,1,this.length),128&this[Qe]?-1*(255-this[Qe]+1):this[Qe]},N.prototype.readInt16LE=function(Qe,Pt){Qe>>>=0,Pt||On(Qe,2,this.length);const Rt=this[Qe]|this[Qe+1]<<8;return 32768&Rt?4294901760|Rt:Rt},N.prototype.readInt16BE=function(Qe,Pt){Qe>>>=0,Pt||On(Qe,2,this.length);const Rt=this[Qe+1]|this[Qe]<<8;return 32768&Rt?4294901760|Rt:Rt},N.prototype.readInt32LE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,4,this.length),this[Qe]|this[Qe+1]<<8|this[Qe+2]<<16|this[Qe+3]<<24},N.prototype.readInt32BE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,4,this.length),this[Qe]<<24|this[Qe+1]<<16|this[Qe+2]<<8|this[Qe+3]},N.prototype.readBigInt64LE=uo(function(Qe){bn(Qe>>>=0,"offset");const Pt=this[Qe],Rt=this[Qe+7];return void 0!==Pt&&void 0!==Rt||Xr(Qe,this.length-8),(BigInt(this[Qe+4]+256*this[Qe+5]+65536*this[Qe+6]+(Rt<<24))<<BigInt(32))+BigInt(Pt+256*this[++Qe]+65536*this[++Qe]+this[++Qe]*Jm(2,24))}),N.prototype.readBigInt64BE=uo(function(Qe){bn(Qe>>>=0,"offset");const Pt=this[Qe],Rt=this[Qe+7];void 0!==Pt&&void 0!==Rt||Xr(Qe,this.length-8);const qn=(Pt<<24)+65536*this[++Qe]+256*this[++Qe]+this[++Qe];return(BigInt(qn)<<BigInt(32))+BigInt(this[++Qe]*Jm(2,24)+65536*this[++Qe]+256*this[++Qe]+Rt)}),N.prototype.readFloatLE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,4,this.length),l.read(this,Qe,!0,23,4)},N.prototype.readFloatBE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,4,this.length),l.read(this,Qe,!1,23,4)},N.prototype.readDoubleLE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,8,this.length),l.read(this,Qe,!0,52,8)},N.prototype.readDoubleBE=function(Qe,Pt){return Qe>>>=0,Pt||On(Qe,8,this.length),l.read(this,Qe,!1,52,8)},N.prototype.writeUintLE=N.prototype.writeUIntLE=function(Qe,Pt,Rt,qn){Qe=+Qe,Pt>>>=0,Rt>>>=0,!qn&&Jn(this,Qe,Pt,Rt,Math.pow(2,8*Rt)-1,0);let wr=1,Gr=0;for(this[Pt]=255&Qe;++Gr<Rt&&(wr*=256);)this[Pt+Gr]=Qe/wr&255;return Pt+Rt},N.prototype.writeUintBE=N.prototype.writeUIntBE=function(Qe,Pt,Rt,qn){Qe=+Qe,Pt>>>=0,Rt>>>=0,!qn&&Jn(this,Qe,Pt,Rt,Math.pow(2,8*Rt)-1,0);let wr=Rt-1,Gr=1;for(this[Pt+wr]=255&Qe;--wr>=0&&(Gr*=256);)this[Pt+wr]=Qe/Gr&255;return Pt+Rt},N.prototype.writeUint8=N.prototype.writeUInt8=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,1,255,0),this[Pt]=255&Qe,Pt+1},N.prototype.writeUint16LE=N.prototype.writeUInt16LE=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,2,65535,0),this[Pt]=255&Qe,this[Pt+1]=Qe>>>8,Pt+2},N.prototype.writeUint16BE=N.prototype.writeUInt16BE=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,2,65535,0),this[Pt]=Qe>>>8,this[Pt+1]=255&Qe,Pt+2},N.prototype.writeUint32LE=N.prototype.writeUInt32LE=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,4,4294967295,0),this[Pt+3]=Qe>>>24,this[Pt+2]=Qe>>>16,this[Pt+1]=Qe>>>8,this[Pt]=255&Qe,Pt+4},N.prototype.writeUint32BE=N.prototype.writeUInt32BE=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,4,4294967295,0),this[Pt]=Qe>>>24,this[Pt+1]=Qe>>>16,this[Pt+2]=Qe>>>8,this[Pt+3]=255&Qe,Pt+4},N.prototype.writeBigUInt64LE=uo(function(Qe,Pt=0){return Qn(this,Qe,Pt,BigInt(0),BigInt("0xffffffffffffffff"))}),N.prototype.writeBigUInt64BE=uo(function(Qe,Pt=0){return ur(this,Qe,Pt,BigInt(0),BigInt("0xffffffffffffffff"))}),N.prototype.writeIntLE=function(Qe,Pt,Rt,qn){if(Qe=+Qe,Pt>>>=0,!qn){const Ws=Math.pow(2,8*Rt-1);Jn(this,Qe,Pt,Rt,Ws-1,-Ws)}let wr=0,Gr=1,Fi=0;for(this[Pt]=255&Qe;++wr<Rt&&(Gr*=256);)Qe<0&&0===Fi&&0!==this[Pt+wr-1]&&(Fi=1),this[Pt+wr]=(Qe/Gr>>0)-Fi&255;return Pt+Rt},N.prototype.writeIntBE=function(Qe,Pt,Rt,qn){if(Qe=+Qe,Pt>>>=0,!qn){const Ws=Math.pow(2,8*Rt-1);Jn(this,Qe,Pt,Rt,Ws-1,-Ws)}let wr=Rt-1,Gr=1,Fi=0;for(this[Pt+wr]=255&Qe;--wr>=0&&(Gr*=256);)Qe<0&&0===Fi&&0!==this[Pt+wr+1]&&(Fi=1),this[Pt+wr]=(Qe/Gr>>0)-Fi&255;return Pt+Rt},N.prototype.writeInt8=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,1,127,-128),Qe<0&&(Qe=255+Qe+1),this[Pt]=255&Qe,Pt+1},N.prototype.writeInt16LE=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,2,32767,-32768),this[Pt]=255&Qe,this[Pt+1]=Qe>>>8,Pt+2},N.prototype.writeInt16BE=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,2,32767,-32768),this[Pt]=Qe>>>8,this[Pt+1]=255&Qe,Pt+2},N.prototype.writeInt32LE=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,4,2147483647,-2147483648),this[Pt]=255&Qe,this[Pt+1]=Qe>>>8,this[Pt+2]=Qe>>>16,this[Pt+3]=Qe>>>24,Pt+4},N.prototype.writeInt32BE=function(Qe,Pt,Rt){return Qe=+Qe,Pt>>>=0,Rt||Jn(this,Qe,Pt,4,2147483647,-2147483648),Qe<0&&(Qe=4294967295+Qe+1),this[Pt]=Qe>>>24,this[Pt+1]=Qe>>>16,this[Pt+2]=Qe>>>8,this[Pt+3]=255&Qe,Pt+4},N.prototype.writeBigInt64LE=uo(function(Qe,Pt=0){return Qn(this,Qe,Pt,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),N.prototype.writeBigInt64BE=uo(function(Qe,Pt=0){return ur(this,Qe,Pt,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),N.prototype.writeFloatLE=function(Qe,Pt,Rt){return Yr(this,Qe,Pt,!0,Rt)},N.prototype.writeFloatBE=function(Qe,Pt,Rt){return Yr(this,Qe,Pt,!1,Rt)},N.prototype.writeDoubleLE=function(Qe,Pt,Rt){return Qi(this,Qe,Pt,!0,Rt)},N.prototype.writeDoubleBE=function(Qe,Pt,Rt){return Qi(this,Qe,Pt,!1,Rt)},N.prototype.copy=function(Qe,Pt,Rt,qn){if(!N.isBuffer(Qe))throw new TypeError("argument should be a Buffer");if(Rt||(Rt=0),qn||0===qn||(qn=this.length),Pt>=Qe.length&&(Pt=Qe.length),Pt||(Pt=0),qn>0&&qn<Rt&&(qn=Rt),qn===Rt||0===Qe.length||0===this.length)return 0;if(Pt<0)throw new RangeError("targetStart out of bounds");if(Rt<0||Rt>=this.length)throw new RangeError("Index out of range");if(qn<0)throw new RangeError("sourceEnd out of bounds");qn>this.length&&(qn=this.length),Qe.length-Pt<qn-Rt&&(qn=Qe.length-Pt+Rt);const wr=qn-Rt;return this===Qe&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(Pt,Rt,qn):Uint8Array.prototype.set.call(Qe,this.subarray(Rt,qn),Pt),wr},N.prototype.fill=function(Qe,Pt,Rt,qn){if("string"==typeof Qe){if("string"==typeof Pt?(qn=Pt,Pt=0,Rt=this.length):"string"==typeof Rt&&(qn=Rt,Rt=this.length),void 0!==qn&&"string"!=typeof qn)throw new TypeError("encoding must be a string");if("string"==typeof qn&&!N.isEncoding(qn))throw new TypeError("Unknown encoding: "+qn);if(1===Qe.length){const Gr=Qe.charCodeAt(0);("utf8"===qn&&Gr<128||"latin1"===qn)&&(Qe=Gr)}}else"number"==typeof Qe?Qe&=255:"boolean"==typeof Qe&&(Qe=Number(Qe));if(Pt<0||this.length<Pt||this.length<Rt)throw new RangeError("Out of range index");if(Rt<=Pt)return this;let wr;if(Pt>>>=0,Rt=void 0===Rt?this.length:Rt>>>0,Qe||(Qe=0),"number"==typeof Qe)for(wr=Pt;wr<Rt;++wr)this[wr]=Qe;else{const Gr=N.isBuffer(Qe)?Qe:N.from(Qe,qn),Fi=Gr.length;if(0===Fi)throw new TypeError('The value "'+Qe+'" is invalid for argument "value"');for(wr=0;wr<Rt-Pt;++wr)this[wr+Pt]=Gr[wr%Fi]}return this};const Di={};function ji(Qe,Pt,Rt){Di[Qe]=class extends Rt{constructor(){super(),Object.defineProperty(this,"message",{value:Pt.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${Qe}]`,delete this.name}get code(){return Qe}set code(qn){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:qn,writable:!0})}toString(){return`${this.name} [${Qe}]: ${this.message}`}}}function Wr(Qe){let Pt="",Rt=Qe.length;const qn="-"===Qe[0]?1:0;for(;Rt>=qn+4;Rt-=3)Pt=`_${Qe.slice(Rt-3,Rt)}${Pt}`;return`${Qe.slice(0,Rt)}${Pt}`}function Bn(Qe,Pt,Rt,qn,wr,Gr){if(Qe>Rt||Qe<Pt){const Fi="bigint"==typeof Pt?"n":"";let Ws;throw Ws=Gr>3?0===Pt||Pt===BigInt(0)?`>= 0${Fi} and < 2${Fi} ** ${8*(Gr+1)}${Fi}`:`>= -(2${Fi} ** ${8*(Gr+1)-1}${Fi}) and < 2 ** ${8*(Gr+1)-1}${Fi}`:`>= ${Pt}${Fi} and <= ${Rt}${Fi}`,new Di.ERR_OUT_OF_RANGE("value",Ws,Qe)}var Fi,Ws,Zo;Fi=qn,Zo=Gr,bn(Ws=wr,"offset"),void 0!==Fi[Ws]&&void 0!==Fi[Ws+Zo]||Xr(Ws,Fi.length-(Zo+1))}function bn(Qe,Pt){if("number"!=typeof Qe)throw new Di.ERR_INVALID_ARG_TYPE(Pt,"number",Qe)}function Xr(Qe,Pt,Rt){throw Math.floor(Qe)!==Qe?(bn(Qe,Rt),new Di.ERR_OUT_OF_RANGE(Rt||"offset","an integer",Qe)):Pt<0?new Di.ERR_BUFFER_OUT_OF_BOUNDS:new Di.ERR_OUT_OF_RANGE(Rt||"offset",`>= ${Rt?1:0} and <= ${Pt}`,Qe)}ji("ERR_BUFFER_OUT_OF_BOUNDS",function(Qe){return Qe?`${Qe} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),ji("ERR_INVALID_ARG_TYPE",function(Qe,Pt){return`The "${Qe}" argument must be of type number. Received type ${typeof Pt}`},TypeError),ji("ERR_OUT_OF_RANGE",function(Qe,Pt,Rt){let qn=`The value of "${Qe}" is out of range.`,wr=Rt;return Number.isInteger(Rt)&&Math.abs(Rt)>Jm(2,32)?wr=Wr(String(Rt)):"bigint"==typeof Rt&&(wr=String(Rt),(Rt>Jm(BigInt(2),BigInt(32))||Rt<-Jm(BigInt(2),BigInt(32)))&&(wr=Wr(wr)),wr+="n"),qn+=` It must be ${Pt}. Received ${wr}`,qn},RangeError);const Ni=/[^+/0-9A-Za-z-_]/g;function Xi(Qe,Pt){let Rt;Pt=Pt||1/0;const qn=Qe.length;let wr=null;const Gr=[];for(let Fi=0;Fi<qn;++Fi){if(Rt=Qe.charCodeAt(Fi),Rt>55295&&Rt<57344){if(!wr){if(Rt>56319){(Pt-=3)>-1&&Gr.push(239,191,189);continue}if(Fi+1===qn){(Pt-=3)>-1&&Gr.push(239,191,189);continue}wr=Rt;continue}if(Rt<56320){(Pt-=3)>-1&&Gr.push(239,191,189),wr=Rt;continue}Rt=65536+(wr-55296<<10|Rt-56320)}else wr&&(Pt-=3)>-1&&Gr.push(239,191,189);if(wr=null,Rt<128){if((Pt-=1)<0)break;Gr.push(Rt)}else if(Rt<2048){if((Pt-=2)<0)break;Gr.push(Rt>>6|192,63&Rt|128)}else if(Rt<65536){if((Pt-=3)<0)break;Gr.push(Rt>>12|224,Rt>>6&63|128,63&Rt|128)}else{if(!(Rt<1114112))throw new Error("Invalid code point");if((Pt-=4)<0)break;Gr.push(Rt>>18|240,Rt>>12&63|128,Rt>>6&63|128,63&Rt|128)}}return Gr}function Bo(Qe){return o.toByteArray(function(Pt){if((Pt=(Pt=Pt.split("=")[0]).trim().replace(Ni,"")).length<2)return"";for(;Pt.length%4!=0;)Pt+="=";return Pt}(Qe))}function Ao(Qe,Pt,Rt,qn){let wr;for(wr=0;wr<qn&&!(wr+Rt>=Pt.length||wr>=Qe.length);++wr)Pt[wr+Rt]=Qe[wr];return wr}function zs(Qe,Pt){return Qe instanceof Pt||null!=Qe&&null!=Qe.constructor&&null!=Qe.constructor.name&&Qe.constructor.name===Pt.name}function Qs(Qe){return Qe!=Qe}const Ii=function(){const Qe="0123456789abcdef",Pt=new Array(256);for(let Rt=0;Rt<16;++Rt){const qn=16*Rt;for(let wr=0;wr<16;++wr)Pt[qn+wr]=Qe[Rt]+Qe[wr]}return Pt}();function uo(Qe){return"undefined"==typeof BigInt?bo:Qe}function bo(){throw new Error("BigInt not supported")}},8171:(n,s,t)=>{t(6450);var o=t(4058).Object,l=n.exports=function(_,C,R){return o.defineProperty(_,C,R)};o.defineProperty.sham&&(l.sham=!0)},4883:(n,s,t)=>{var o=t(1899),l=t(7475),_=t(9826),C=o.TypeError;n.exports=function(R){if(l(R))return R;throw C(_(R)+" is not a function")}},6059:(n,s,t)=>{var o=t(1899),l=t(941),_=o.String,C=o.TypeError;n.exports=function(R){if(l(R))return R;throw C(_(R)+" is not an object")}},2532:(n,s,t)=>{var o=t(5329),l=o({}.toString),_=o("".slice);n.exports=function(C){return _(l(C),8,-1)}},2029:(n,s,t)=>{var o=t(5746),l=t(5988),_=t(1887);n.exports=o?function(C,R,N){return l.f(C,R,_(1,N))}:function(C,R,N){return C[R]=N,C}},1887:n=>{n.exports=function(s,t){return{enumerable:!(1&s),configurable:!(2&s),writable:!(4&s),value:t}}},5746:(n,s,t)=>{var o=t(5981);n.exports=!o(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},1333:(n,s,t)=>{var o=t(1899),l=t(941),_=o.document,C=l(_)&&l(_.createElement);n.exports=function(R){return C?_.createElement(R):{}}},2861:(n,s,t)=>{var o=t(224);n.exports=o("navigator","userAgent")||""},3385:(n,s,t)=>{var o,l,_=t(1899),C=t(2861),R=_.process,N=_.Deno,V=R&&R.versions||N&&N.version,Q=V&&V.v8;Q&&(l=(o=Q.split("."))[0]>0&&o[0]<4?1:+(o[0]+o[1])),!l&&C&&(!(o=C.match(/Edge\/(\d+)/))||o[1]>=74)&&(o=C.match(/Chrome\/(\d+)/))&&(l=+o[1]),n.exports=l},6887:(n,s,t)=>{var o=t(1899),l=t(9730),_=t(5329),C=t(7475),R=t(9677).f,N=t(7252),V=t(4058),Q=t(6843),oe=t(2029),le=t(953),_e=function(ye){var $e=function(Ie,ke,we){if(this instanceof $e){switch(arguments.length){case 0:return new ye;case 1:return new ye(Ie);case 2:return new ye(Ie,ke)}return new ye(Ie,ke,we)}return l(ye,this,arguments)};return $e.prototype=ye.prototype,$e};n.exports=function(ye,$e){var Ie,ke,we,G,Dt,bt,Bt,Jt,Mn=ye.target,zt=ye.global,xn=ye.stat,Nn=ye.proto,zr=zt?o:xn?o[Mn]:(o[Mn]||{}).prototype,Hr=zt?V:V[Mn]||oe(V,Mn,{})[Mn],Vr=Hr.prototype;for(we in $e)Ie=!N(zt?we:Mn+(xn?".":"#")+we,ye.forced)&&zr&&le(zr,we),Dt=Hr[we],Ie&&(bt=ye.noTargetGet?(Jt=R(zr,we))&&Jt.value:zr[we]),G=Ie&&bt?bt:$e[we],Ie&&typeof Dt==typeof G||(Bt=ye.bind&&Ie?Q(G,o):ye.wrap&&Ie?_e(G):Nn&&C(G)?_(G):G,(ye.sham||G&&G.sham||Dt&&Dt.sham)&&oe(Bt,"sham",!0),oe(Hr,we,Bt),Nn&&(le(V,ke=Mn+"Prototype")||oe(V,ke,{}),oe(V[ke],we,G),ye.real&&Vr&&!Vr[we]&&oe(Vr,we,G)))}},5981:n=>{n.exports=function(s){try{return!!s()}catch(t){return!0}}},9730:(n,s,t)=>{var o=t(8285),l=Function.prototype,_=l.apply,C=l.call;n.exports="object"==typeof Reflect&&Reflect.apply||(o?C.bind(_):function(){return C.apply(_,arguments)})},6843:(n,s,t)=>{var o=t(5329),l=t(4883),_=t(8285),C=o(o.bind);n.exports=function(R,N){return l(R),void 0===N?R:_?C(R,N):function(){return R.apply(N,arguments)}}},8285:(n,s,t)=>{var o=t(5981);n.exports=!o(function(){var l=function(){}.bind();return"function"!=typeof l||l.hasOwnProperty("prototype")})},8834:(n,s,t)=>{var o=t(8285),l=Function.prototype.call;n.exports=o?l.bind(l):function(){return l.apply(l,arguments)}},5329:(n,s,t)=>{var o=t(8285),l=Function.prototype,C=l.call,R=o&&l.bind.bind(C,C);n.exports=o?function(N){return N&&R(N)}:function(N){return N&&function(){return C.apply(N,arguments)}}},224:(n,s,t)=>{var o=t(4058),l=t(1899),_=t(7475),C=function(R){return _(R)?R:void 0};n.exports=function(R,N){return arguments.length<2?C(o[R])||C(l[R]):o[R]&&o[R][N]||l[R]&&l[R][N]}},9733:(n,s,t)=>{var o=t(4883);n.exports=function(l,_){var C=l[_];return null==C?void 0:o(C)}},1899:(n,s,t)=>{var o=function(l){return l&&l.Math==Math&&l};n.exports=o("object"==typeof globalThis&&globalThis)||o("object"==typeof window&&window)||o("object"==typeof self&&self)||o("object"==typeof t.g&&t.g)||function(){return this}()||Function("return this")()},953:(n,s,t)=>{var o=t(5329),l=t(9678),_=o({}.hasOwnProperty);n.exports=Object.hasOwn||function(C,R){return _(l(C),R)}},2840:(n,s,t)=>{var o=t(5746),l=t(5981),_=t(1333);n.exports=!o&&!l(function(){return 7!=Object.defineProperty(_("div"),"a",{get:function(){return 7}}).a})},7026:(n,s,t)=>{var o=t(1899),l=t(5329),_=t(5981),C=t(2532),R=o.Object,N=l("".split);n.exports=_(function(){return!R("z").propertyIsEnumerable(0)})?function(V){return"String"==C(V)?N(V,""):R(V)}:R},7475:n=>{n.exports=function(s){return"function"==typeof s}},7252:(n,s,t)=>{var o=t(5981),l=t(7475),_=/#|\.prototype\./,C=function(oe,le){var _e=N[R(oe)];return _e==Q||_e!=V&&(l(le)?o(le):!!le)},R=C.normalize=function(oe){return String(oe).replace(_,".").toLowerCase()},N=C.data={},V=C.NATIVE="N",Q=C.POLYFILL="P";n.exports=C},941:(n,s,t)=>{var o=t(7475);n.exports=function(l){return"object"==typeof l?null!==l:o(l)}},2529:n=>{n.exports=!0},6664:(n,s,t)=>{var o=t(1899),l=t(224),_=t(7475),C=t(7046),R=t(2302),N=o.Object;n.exports=R?function(V){return"symbol"==typeof V}:function(V){var Q=l("Symbol");return _(Q)&&C(Q.prototype,N(V))}},2497:(n,s,t)=>{var o=t(3385),l=t(5981);n.exports=!!Object.getOwnPropertySymbols&&!l(function(){var _=Symbol();return!String(_)||!(Object(_)instanceof Symbol)||!Symbol.sham&&o&&o<41})},5988:(n,s,t)=>{var o=t(1899),l=t(5746),_=t(2840),C=t(3937),R=t(6059),N=t(3894),V=o.TypeError,Q=Object.defineProperty,oe=Object.getOwnPropertyDescriptor;s.f=l?C?function($e,Ie,ke){if(R($e),Ie=N(Ie),R(ke),"function"==typeof $e&&"prototype"===Ie&&"value"in ke&&"writable"in ke&&!ke.writable){var we=oe($e,Ie);we&&we.writable&&($e[Ie]=ke.value,ke={configurable:"configurable"in ke?ke.configurable:we.configurable,enumerable:"enumerable"in ke?ke.enumerable:we.enumerable,writable:!1})}return Q($e,Ie,ke)}:Q:function($e,Ie,ke){if(R($e),Ie=N(Ie),R(ke),_)try{return Q($e,Ie,ke)}catch(we){}if("get"in ke||"set"in ke)throw V("Accessors not supported");return"value"in ke&&($e[Ie]=ke.value),$e}},9677:(n,s,t)=>{var o=t(5746),l=t(8834),_=t(6760),C=t(1887),R=t(4529),N=t(3894),V=t(953),Q=t(2840),oe=Object.getOwnPropertyDescriptor;s.f=o?oe:function(le,_e){if(le=R(le),_e=N(_e),Q)try{return oe(le,_e)}catch(ye){}if(V(le,_e))return C(!l(_.f,le,_e),le[_e])}},7046:(n,s,t)=>{var o=t(5329);n.exports=o({}.isPrototypeOf)},6760:(n,s)=>{var t={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,l=o&&!t.call({1:2},1);s.f=l?function(_){var C=o(this,_);return!!C&&C.enumerable}:t},9811:(n,s,t)=>{var o=t(1899),l=t(8834),_=t(7475),C=t(941),R=o.TypeError;n.exports=function(N,V){var Q,oe;if("string"===V&&_(Q=N.toString)&&!C(oe=l(Q,N))||_(Q=N.valueOf)&&!C(oe=l(Q,N))||"string"!==V&&_(Q=N.toString)&&!C(oe=l(Q,N)))return oe;throw R("Can't convert object to primitive value")}},4058:n=>{n.exports={}},8219:(n,s,t)=>{var o=t(1899).TypeError;n.exports=function(l){if(null==l)throw o("Can't call method on "+l);return l}},4911:(n,s,t)=>{var o=t(1899),l=Object.defineProperty;n.exports=function(_,C){try{l(o,_,{value:C,configurable:!0,writable:!0})}catch(R){o[_]=C}return C}},3030:(n,s,t)=>{var o=t(1899),l=t(4911),_="__core-js_shared__",C=o[_]||l(_,{});n.exports=C},8726:(n,s,t)=>{var o=t(2529),l=t(3030);(n.exports=function(_,C){return l[_]||(l[_]=void 0!==C?C:{})})("versions",[]).push({version:"3.20.3",mode:o?"pure":"global",copyright:"\xa9 2014-2022 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.20.3/LICENSE",source:"https://github.com/zloirock/core-js"})},4529:(n,s,t)=>{var o=t(7026),l=t(8219);n.exports=function(_){return o(l(_))}},9678:(n,s,t)=>{var o=t(1899),l=t(8219),_=o.Object;n.exports=function(C){return _(l(C))}},6935:(n,s,t)=>{var o=t(1899),l=t(8834),_=t(941),C=t(6664),R=t(9733),N=t(9811),V=t(9813),Q=o.TypeError,oe=V("toPrimitive");n.exports=function(le,_e){if(!_(le)||C(le))return le;var ye,$e=R(le,oe);if($e){if(void 0===_e&&(_e="default"),ye=l($e,le,_e),!_(ye)||C(ye))return ye;throw Q("Can't convert object to primitive value")}return void 0===_e&&(_e="number"),N(le,_e)}},3894:(n,s,t)=>{var o=t(6935),l=t(6664);n.exports=function(_){var C=o(_,"string");return l(C)?C:C+""}},9826:(n,s,t)=>{var o=t(1899).String;n.exports=function(l){try{return o(l)}catch(_){return"Object"}}},9418:(n,s,t)=>{var o=t(5329),l=0,_=Math.random(),C=o(1..toString);n.exports=function(R){return"Symbol("+(void 0===R?"":R)+")_"+C(++l+_,36)}},2302:(n,s,t)=>{var o=t(2497);n.exports=o&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},3937:(n,s,t)=>{var o=t(5746),l=t(5981);n.exports=o&&l(function(){return 42!=Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},9813:(n,s,t)=>{var o=t(1899),l=t(8726),_=t(953),C=t(9418),R=t(2497),N=t(2302),V=l("wks"),Q=o.Symbol,oe=Q&&Q.for,le=N?Q:Q&&Q.withoutSetter||C;n.exports=function(_e){if(!_(V,_e)||!R&&"string"!=typeof V[_e]){var ye="Symbol."+_e;V[_e]=R&&_(Q,_e)?Q[_e]:N&&oe?oe(ye):le(ye)}return V[_e]}},6450:(n,s,t)=>{var o=t(6887),l=t(5746),_=t(5988).f;o({target:"Object",stat:!0,forced:Object.defineProperty!==_,sham:!l},{defineProperty:_})},1910:(n,s,t)=>{var o=t(8171);n.exports=o},7698:(n,s,t)=>{var o=t(8764).Buffer;function l(V){return V instanceof o||V instanceof Date||V instanceof RegExp}function _(V){if(V instanceof o){var Q=o.alloc?o.alloc(V.length):new o(V.length);return V.copy(Q),Q}if(V instanceof Date)return new Date(V.getTime());if(V instanceof RegExp)return new RegExp(V);throw new Error("Unexpected situation")}function C(V){var Q=[];return V.forEach(function(oe,le){Q[le]="object"==typeof oe&&null!==oe?Array.isArray(oe)?C(oe):l(oe)?_(oe):N({},oe):oe}),Q}function R(V,Q){return"__proto__"===Q?void 0:V[Q]}var N=n.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var V,Q,oe=arguments[0],le=Array.prototype.slice.call(arguments,1);return le.forEach(function(_e){"object"!=typeof _e||null===_e||Array.isArray(_e)||Object.keys(_e).forEach(function(ye){return Q=R(oe,ye),(V=R(_e,ye))===oe?void 0:"object"!=typeof V||null===V?void(oe[ye]=V):Array.isArray(V)?void(oe[ye]=C(V)):l(V)?void(oe[ye]=_(V)):"object"!=typeof Q||null===Q||Array.isArray(Q)?void(oe[ye]=N({},V)):void(oe[ye]=N(Q,V))})}),oe}},7187:n=>{var s,t="object"==typeof Reflect?Reflect:null,o=t&&"function"==typeof t.apply?t.apply:function(Ie,ke,we){return Function.prototype.apply.call(Ie,ke,we)};s=t&&"function"==typeof t.ownKeys?t.ownKeys:Object.getOwnPropertySymbols?function(Ie){return Object.getOwnPropertyNames(Ie).concat(Object.getOwnPropertySymbols(Ie))}:function(Ie){return Object.getOwnPropertyNames(Ie)};var l=Number.isNaN||function(Ie){return Ie!=Ie};function _(){_.init.call(this)}n.exports=_,n.exports.once=function(Ie,ke){return new Promise(function(we,G){function Dt(Bt){Ie.removeListener(ke,bt),G(Bt)}function bt(){"function"==typeof Ie.removeListener&&Ie.removeListener("error",Dt),we([].slice.call(arguments))}var Bt;$e(Ie,ke,bt,{once:!0}),"error"!==ke&&("function"==typeof(Bt=Ie).on&&$e(Bt,"error",Dt,{once:!0}))})},_.EventEmitter=_,_.prototype._events=void 0,_.prototype._eventsCount=0,_.prototype._maxListeners=void 0;var C=10;function R(Ie){if("function"!=typeof Ie)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof Ie)}function N(Ie){return void 0===Ie._maxListeners?_.defaultMaxListeners:Ie._maxListeners}function V(Ie,ke,we,G){var Dt,bt,Bt;if(R(we),void 0===(bt=Ie._events)?(bt=Ie._events=Object.create(null),Ie._eventsCount=0):(void 0!==bt.newListener&&(Ie.emit("newListener",ke,we.listener?we.listener:we),bt=Ie._events),Bt=bt[ke]),void 0===Bt)Bt=bt[ke]=we,++Ie._eventsCount;else if("function"==typeof Bt?Bt=bt[ke]=G?[we,Bt]:[Bt,we]:G?Bt.unshift(we):Bt.push(we),(Dt=N(Ie))>0&&Bt.length>Dt&&!Bt.warned){Bt.warned=!0;var Mn=new Error("Possible EventEmitter memory leak detected. "+Bt.length+" "+String(ke)+" listeners added. Use emitter.setMaxListeners() to increase limit");Mn.name="MaxListenersExceededWarning",Mn.emitter=Ie,Mn.type=ke,Mn.count=Bt.length,console&&console.warn&&console.warn(Mn)}return Ie}function Q(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function oe(Ie,ke,we){var G={fired:!1,wrapFn:void 0,target:Ie,type:ke,listener:we},Dt=Q.bind(G);return Dt.listener=we,G.wrapFn=Dt,Dt}function le(Ie,ke,we){var G=Ie._events;if(void 0===G)return[];var Dt=G[ke];return void 0===Dt?[]:"function"==typeof Dt?we?[Dt.listener||Dt]:[Dt]:we?function(bt){for(var Bt=new Array(bt.length),Jt=0;Jt<Bt.length;++Jt)Bt[Jt]=bt[Jt].listener||bt[Jt];return Bt}(Dt):ye(Dt,Dt.length)}function _e(Ie){var ke=this._events;if(void 0!==ke){var we=ke[Ie];if("function"==typeof we)return 1;if(void 0!==we)return we.length}return 0}function ye(Ie,ke){for(var we=new Array(ke),G=0;G<ke;++G)we[G]=Ie[G];return we}function $e(Ie,ke,we,G){if("function"==typeof Ie.on)G.once?Ie.once(ke,we):Ie.on(ke,we);else{if("function"!=typeof Ie.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof Ie);Ie.addEventListener(ke,function Dt(bt){G.once&&Ie.removeEventListener(ke,Dt),we(bt)})}}Object.defineProperty(_,"defaultMaxListeners",{enumerable:!0,get:function(){return C},set:function(Ie){if("number"!=typeof Ie||Ie<0||l(Ie))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+Ie+".");C=Ie}}),_.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},_.prototype.setMaxListeners=function(Ie){if("number"!=typeof Ie||Ie<0||l(Ie))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+Ie+".");return this._maxListeners=Ie,this},_.prototype.getMaxListeners=function(){return N(this)},_.prototype.emit=function(Ie){for(var ke=[],we=1;we<arguments.length;we++)ke.push(arguments[we]);var G="error"===Ie,Dt=this._events;if(void 0!==Dt)G=G&&void 0===Dt.error;else if(!G)return!1;if(G){var bt;if(ke.length>0&&(bt=ke[0]),bt instanceof Error)throw bt;var Bt=new Error("Unhandled error."+(bt?" ("+bt.message+")":""));throw Bt.context=bt,Bt}var Jt=Dt[Ie];if(void 0===Jt)return!1;if("function"==typeof Jt)o(Jt,this,ke);else{var Mn=Jt.length,zt=ye(Jt,Mn);for(we=0;we<Mn;++we)o(zt[we],this,ke)}return!0},_.prototype.on=_.prototype.addListener=function(Ie,ke){return V(this,Ie,ke,!1)},_.prototype.prependListener=function(Ie,ke){return V(this,Ie,ke,!0)},_.prototype.once=function(Ie,ke){return R(ke),this.on(Ie,oe(this,Ie,ke)),this},_.prototype.prependOnceListener=function(Ie,ke){return R(ke),this.prependListener(Ie,oe(this,Ie,ke)),this},_.prototype.off=_.prototype.removeListener=function(Ie,ke){var we,G,Dt,bt,Bt;if(R(ke),void 0===(G=this._events))return this;if(void 0===(we=G[Ie]))return this;if(we===ke||we.listener===ke)0==--this._eventsCount?this._events=Object.create(null):(delete G[Ie],G.removeListener&&this.emit("removeListener",Ie,we.listener||ke));else if("function"!=typeof we){for(Dt=-1,bt=we.length-1;bt>=0;bt--)if(we[bt]===ke||we[bt].listener===ke){Bt=we[bt].listener,Dt=bt;break}if(Dt<0)return this;0===Dt?we.shift():function(Jt,Mn){for(;Mn+1<Jt.length;Mn++)Jt[Mn]=Jt[Mn+1];Jt.pop()}(we,Dt),1===we.length&&(G[Ie]=we[0]),void 0!==G.removeListener&&this.emit("removeListener",Ie,Bt||ke)}return this},_.prototype.removeAllListeners=function(Ie){var ke,we,G;if(void 0===(we=this._events))return this;if(void 0===we.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==we[Ie]&&(0==--this._eventsCount?this._events=Object.create(null):delete we[Ie]),this;if(0===arguments.length){var Dt,bt=Object.keys(we);for(G=0;G<bt.length;++G)"removeListener"!==(Dt=bt[G])&&this.removeAllListeners(Dt);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(ke=we[Ie]))this.removeListener(Ie,ke);else if(void 0!==ke)for(G=ke.length-1;G>=0;G--)this.removeListener(Ie,ke[G]);return this},_.prototype.listeners=function(Ie){return le(this,Ie,!0)},_.prototype.rawListeners=function(Ie){return le(this,Ie,!1)},_.listenerCount=function(Ie,ke){return"function"==typeof Ie.listenerCount?Ie.listenerCount(ke):_e.call(Ie,ke)},_.prototype.listenerCount=_e,_.prototype.eventNames=function(){return this._eventsCount>0?s(this._events):[]}},5717:n=>{n.exports="function"==typeof Object.create?function(s,t){t&&(s.super_=t,s.prototype=Object.create(t.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}))}:function(s,t){if(t){s.super_=t;var o=function(){};o.prototype=t.prototype,s.prototype=new o,s.prototype.constructor=s}}},4155:n=>{var s,t,o=n.exports={};function l(){throw new Error("setTimeout has not been defined")}function _(){throw new Error("clearTimeout has not been defined")}function C($e){if(s===setTimeout)return setTimeout($e,0);if((s===l||!s)&&setTimeout)return s=setTimeout,setTimeout($e,0);try{return s($e,0)}catch(Ie){try{return s.call(null,$e,0)}catch(ke){return s.call(this,$e,0)}}}!function(){try{s="function"==typeof setTimeout?setTimeout:l}catch($e){s=l}try{t="function"==typeof clearTimeout?clearTimeout:_}catch($e){t=_}}();var R,N=[],V=!1,Q=-1;function oe(){V&&R&&(V=!1,R.length?N=R.concat(N):Q=-1,N.length&&le())}function le(){if(!V){var $e=C(oe);V=!0;for(var Ie=N.length;Ie;){for(R=N,N=[];++Q<Ie;)R&&R[Q].run();Q=-1,Ie=N.length}R=null,V=!1,function(ke){if(t===clearTimeout)return clearTimeout(ke);if((t===_||!t)&&clearTimeout)return t=clearTimeout,clearTimeout(ke);try{t(ke)}catch(we){try{return t.call(null,ke)}catch(G){return t.call(this,ke)}}}($e)}}function _e($e,Ie){this.fun=$e,this.array=Ie}function ye(){}o.nextTick=function($e){var Ie=new Array(arguments.length-1);if(arguments.length>1)for(var ke=1;ke<arguments.length;ke++)Ie[ke-1]=arguments[ke];N.push(new _e($e,Ie)),1!==N.length||V||C(le)},_e.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=ye,o.addListener=ye,o.once=ye,o.off=ye,o.removeListener=ye,o.removeAllListeners=ye,o.emit=ye,o.prependListener=ye,o.prependOnceListener=ye,o.listeners=function($e){return[]},o.binding=function($e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function($e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},1798:(n,s,t)=>{var o=t(4155),l=65536,C=t(396).Buffer,R=t.g.crypto||t.g.msCrypto;n.exports=R&&R.getRandomValues?function(N,V){if(N>4294967295)throw new RangeError("requested too many random bytes");var Q=C.allocUnsafe(N);if(N>0)if(N>l)for(var oe=0;oe<N;oe+=l)R.getRandomValues(Q.slice(oe,oe+l));else R.getRandomValues(Q);return"function"==typeof V?o.nextTick(function(){V(null,Q)}):Q}:function(){throw new Error("Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11")}},4281:n=>{var s={};function t(l,_,C){C||(C=Error);var R=function(N){var V,Q;function oe(le,_e,ye){return N.call(this,"string"==typeof _?_:_(le,_e,ye))||this}return Q=N,(V=oe).prototype=Object.create(Q.prototype),V.prototype.constructor=V,V.__proto__=Q,oe}(C);R.prototype.name=C.name,R.prototype.code=l,s[l]=R}function o(l,_){if(Array.isArray(l)){var C=l.length;return l=l.map(function(R){return String(R)}),C>2?"one of ".concat(_," ").concat(l.slice(0,C-1).join(", "),", or ")+l[C-1]:2===C?"one of ".concat(_," ").concat(l[0]," or ").concat(l[1]):"of ".concat(_," ").concat(l[0])}return"of ".concat(_," ").concat(String(l))}t("ERR_INVALID_OPT_VALUE",function(l,_){return'The value "'+_+'" is invalid for option "'+l+'"'},TypeError),t("ERR_INVALID_ARG_TYPE",function(l,_,C){var R,Q,le,ye;if("string"==typeof _&&"not "===_.substr(0,"not ".length)?(R="must not be",_=_.replace(/^not /,"")):R="must be",le=l,(void 0===ye||ye>le.length)&&(ye=le.length)," argument"===le.substring(ye-" argument".length,ye))Q="The ".concat(l," ").concat(R," ").concat(o(_,"type"));else{var oe=function(le,_e,ye){return"number"!=typeof ye&&(ye=0),!(ye+".".length>le.length)&&-1!==le.indexOf(".",ye)}(l)?"property":"argument";Q='The "'.concat(l,'" ').concat(oe," ").concat(R," ").concat(o(_,"type"))}return Q+". Received type ".concat(typeof C)},TypeError),t("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),t("ERR_METHOD_NOT_IMPLEMENTED",function(l){return"The "+l+" method is not implemented"}),t("ERR_STREAM_PREMATURE_CLOSE","Premature close"),t("ERR_STREAM_DESTROYED",function(l){return"Cannot call "+l+" after a stream was destroyed"}),t("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),t("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),t("ERR_STREAM_WRITE_AFTER_END","write after end"),t("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),t("ERR_UNKNOWN_ENCODING",function(l){return"Unknown encoding: "+l},TypeError),t("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),n.exports.q=s},6753:(n,s,t)=>{var o=t(4155),l=Object.keys||function(_e){var ye=[];for(var $e in _e)ye.push($e);return ye};n.exports=Q;var _=t(9481),C=t(4229);t(5717)(Q,_);for(var R=l(C.prototype),N=0;N<R.length;N++){var V=R[N];Q.prototype[V]||(Q.prototype[V]=C.prototype[V])}function Q(_e){if(!(this instanceof Q))return new Q(_e);_.call(this,_e),C.call(this,_e),this.allowHalfOpen=!0,_e&&(!1===_e.readable&&(this.readable=!1),!1===_e.writable&&(this.writable=!1),!1===_e.allowHalfOpen&&(this.allowHalfOpen=!1,this.once("end",oe)))}function oe(){this._writableState.ended||o.nextTick(le,this)}function le(_e){_e.end()}Object.defineProperty(Q.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(Q.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(Q.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(Q.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&this._readableState.destroyed&&this._writableState.destroyed},set:function(_e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=_e,this._writableState.destroyed=_e)}})},2725:(n,s,t)=>{n.exports=l;var o=t(4605);function l(_){if(!(this instanceof l))return new l(_);o.call(this,_)}t(5717)(l,o),l.prototype._transform=function(_,C,R){R(null,_)}},9481:(n,s,t)=>{var o,l=t(4155);n.exports=zt,zt.ReadableState=Mn,t(7187);var V,_=function(Bn,bn){return Bn.listeners(bn).length},C=t(2503),R=t(8764).Buffer,N=t.g.Uint8Array||function(){},Q=t(4616);V=Q&&Q.debuglog?Q.debuglog("stream"):function(){};var oe,le,_e,ye=t(7327),$e=t(1195),Ie=t(2457).getHighWaterMark,ke=t(4281).q,we=ke.ERR_INVALID_ARG_TYPE,G=ke.ERR_STREAM_PUSH_AFTER_EOF,Dt=ke.ERR_METHOD_NOT_IMPLEMENTED,bt=ke.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;t(5717)(zt,C);var Bt=$e.errorOrDestroy,Jt=["error","close","destroy","pause","resume"];function Mn(Bn,bn,Xr){o=o||t(6753),"boolean"!=typeof Xr&&(Xr=bn instanceof o),this.objectMode=!!(Bn=Bn||{}).objectMode,Xr&&(this.objectMode=this.objectMode||!!Bn.readableObjectMode),this.highWaterMark=Ie(this,Bn,"readableHighWaterMark",Xr),this.buffer=new ye,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==Bn.emitClose,this.autoDestroy=!!Bn.autoDestroy,this.destroyed=!1,this.defaultEncoding=Bn.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,Bn.encoding&&(oe||(oe=t(2553).s),this.decoder=new oe(Bn.encoding),this.encoding=Bn.encoding)}function zt(Bn){if(o=o||t(6753),!(this instanceof zt))return new zt(Bn);this._readableState=new Mn(Bn,this,this instanceof o),this.readable=!0,Bn&&("function"==typeof Bn.read&&(this._read=Bn.read),"function"==typeof Bn.destroy&&(this._destroy=Bn.destroy)),C.call(this)}function xn(Bn,bn,Xr,Ni,Xi){V("readableAddChunk",bn);var Bo,zs,Qs,Ii,uo,Ao=Bn._readableState;if(null===bn)Ao.reading=!1,function(zs,Qs){if(V("onEofChunk"),!Qs.ended){if(Qs.decoder){var Ii=Qs.decoder.end();Ii&&Ii.length&&(Qs.buffer.push(Ii),Qs.length+=Qs.objectMode?1:Ii.length)}Qs.ended=!0,Qs.sync?Vr(zs):(Qs.needReadable=!1,Qs.emittedReadable||(Qs.emittedReadable=!0,qr(zs)))}}(Bn,Ao);else if(Xi||(zs=Ao,R.isBuffer(uo=Qs=bn)||uo instanceof N||"string"==typeof Qs||void 0===Qs||zs.objectMode||(Ii=new we("chunk",["string","Buffer","Uint8Array"],Qs)),Bo=Ii),Bo)Bt(Bn,Bo);else if(Ao.objectMode||bn&&bn.length>0)if("string"==typeof bn||Ao.objectMode||Object.getPrototypeOf(bn)===R.prototype||(bn=function(zs){return R.from(zs)}(bn)),Ni)Ao.endEmitted?Bt(Bn,new bt):Nn(Bn,Ao,bn,!0);else if(Ao.ended)Bt(Bn,new G);else{if(Ao.destroyed)return!1;Ao.reading=!1,Ao.decoder&&!Xr?(bn=Ao.decoder.write(bn),Ao.objectMode||0!==bn.length?Nn(Bn,Ao,bn,!1):On(Bn,Ao)):Nn(Bn,Ao,bn,!1)}else Ni||(Ao.reading=!1,On(Bn,Ao));return!Ao.ended&&(Ao.length<Ao.highWaterMark||0===Ao.length)}function Nn(Bn,bn,Xr,Ni){bn.flowing&&0===bn.length&&!bn.sync?(bn.awaitDrain=0,Bn.emit("data",Xr)):(bn.length+=bn.objectMode?1:Xr.length,Ni?bn.buffer.unshift(Xr):bn.buffer.push(Xr),bn.needReadable&&Vr(Bn)),On(Bn,bn)}Object.defineProperty(zt.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(Bn){this._readableState&&(this._readableState.destroyed=Bn)}}),zt.prototype.destroy=$e.destroy,zt.prototype._undestroy=$e.undestroy,zt.prototype._destroy=function(Bn,bn){bn(Bn)},zt.prototype.push=function(Bn,bn){var Xr,Ni=this._readableState;return Ni.objectMode?Xr=!0:"string"==typeof Bn&&((bn=bn||Ni.defaultEncoding)!==Ni.encoding&&(Bn=R.from(Bn,bn),bn=""),Xr=!0),xn(this,Bn,bn,!1,Xr)},zt.prototype.unshift=function(Bn){return xn(this,Bn,null,!0,!1)},zt.prototype.isPaused=function(){return!1===this._readableState.flowing},zt.prototype.setEncoding=function(Bn){oe||(oe=t(2553).s);var bn=new oe(Bn);this._readableState.decoder=bn,this._readableState.encoding=this._readableState.decoder.encoding;for(var Xr=this._readableState.buffer.head,Ni="";null!==Xr;)Ni+=bn.write(Xr.data),Xr=Xr.next;return this._readableState.buffer.clear(),""!==Ni&&this._readableState.buffer.push(Ni),this._readableState.length=Ni.length,this};var zr=1073741824;function Hr(Bn,bn){return Bn<=0||0===bn.length&&bn.ended?0:bn.objectMode?1:Bn!=Bn?bn.flowing&&bn.length?bn.buffer.head.data.length:bn.length:(Bn>bn.highWaterMark&&(bn.highWaterMark=((Xr=Bn)>=zr?Xr=zr:(Xr--,Xr|=Xr>>>1,Xr|=Xr>>>2,Xr|=Xr>>>4,Xr|=Xr>>>8,Xr|=Xr>>>16,Xr++),Xr)),Bn<=bn.length?Bn:bn.ended?bn.length:(bn.needReadable=!0,0));var Xr}function Vr(Bn){var bn=Bn._readableState;V("emitReadable",bn.needReadable,bn.emittedReadable),bn.needReadable=!1,bn.emittedReadable||(V("emitReadable",bn.flowing),bn.emittedReadable=!0,l.nextTick(qr,Bn))}function qr(Bn){var bn=Bn._readableState;V("emitReadable_",bn.destroyed,bn.length,bn.ended),bn.destroyed||!bn.length&&!bn.ended||(Bn.emit("readable"),bn.emittedReadable=!1),bn.needReadable=!bn.flowing&&!bn.ended&&bn.length<=bn.highWaterMark,Yr(Bn)}function On(Bn,bn){bn.readingMore||(bn.readingMore=!0,l.nextTick(Jn,Bn,bn))}function Jn(Bn,bn){for(;!bn.reading&&!bn.ended&&(bn.length<bn.highWaterMark||bn.flowing&&0===bn.length);){var Xr=bn.length;if(V("maybeReadMore read 0"),Bn.read(0),Xr===bn.length)break}bn.readingMore=!1}function Qn(Bn){var bn=Bn._readableState;bn.readableListening=Bn.listenerCount("readable")>0,bn.resumeScheduled&&!bn.paused?bn.flowing=!0:Bn.listenerCount("data")>0&&Bn.resume()}function ur(Bn){V("readable nexttick read 0"),Bn.read(0)}function In(Bn,bn){V("resume",bn.reading),bn.reading||Bn.read(0),bn.resumeScheduled=!1,Bn.emit("resume"),Yr(Bn),bn.flowing&&!bn.reading&&Bn.read(0)}function Yr(Bn){var bn=Bn._readableState;for(V("flow",bn.flowing);bn.flowing&&null!==Bn.read(););}function Qi(Bn,bn){return 0===bn.length?null:(bn.objectMode?Xr=bn.buffer.shift():!Bn||Bn>=bn.length?(Xr=bn.decoder?bn.buffer.join(""):1===bn.buffer.length?bn.buffer.first():bn.buffer.concat(bn.length),bn.buffer.clear()):Xr=bn.buffer.consume(Bn,bn.decoder),Xr);var Xr}function Di(Bn){var bn=Bn._readableState;V("endReadable",bn.endEmitted),bn.endEmitted||(bn.ended=!0,l.nextTick(ji,bn,Bn))}function ji(Bn,bn){if(V("endReadableNT",Bn.endEmitted,Bn.length),!Bn.endEmitted&&0===Bn.length&&(Bn.endEmitted=!0,bn.readable=!1,bn.emit("end"),Bn.autoDestroy)){var Xr=bn._writableState;(!Xr||Xr.autoDestroy&&Xr.finished)&&bn.destroy()}}function Wr(Bn,bn){for(var Xr=0,Ni=Bn.length;Xr<Ni;Xr++)if(Bn[Xr]===bn)return Xr;return-1}zt.prototype.read=function(Bn){V("read",Bn),Bn=parseInt(Bn,10);var bn=this._readableState,Xr=Bn;if(0!==Bn&&(bn.emittedReadable=!1),0===Bn&&bn.needReadable&&((0!==bn.highWaterMark?bn.length>=bn.highWaterMark:bn.length>0)||bn.ended))return V("read: emitReadable",bn.length,bn.ended),0===bn.length&&bn.ended?Di(this):Vr(this),null;if(0===(Bn=Hr(Bn,bn))&&bn.ended)return 0===bn.length&&Di(this),null;var Ni,Xi=bn.needReadable;return V("need readable",Xi),(0===bn.length||bn.length-Bn<bn.highWaterMark)&&V("length less than watermark",Xi=!0),bn.ended||bn.reading?V("reading or ended",Xi=!1):Xi&&(V("do read"),bn.reading=!0,bn.sync=!0,0===bn.length&&(bn.needReadable=!0),this._read(bn.highWaterMark),bn.sync=!1,bn.reading||(Bn=Hr(Xr,bn))),null===(Ni=Bn>0?Qi(Bn,bn):null)?(bn.needReadable=bn.length<=bn.highWaterMark,Bn=0):(bn.length-=Bn,bn.awaitDrain=0),0===bn.length&&(bn.ended||(bn.needReadable=!0),Xr!==Bn&&bn.ended&&Di(this)),null!==Ni&&this.emit("data",Ni),Ni},zt.prototype._read=function(Bn){Bt(this,new Dt("_read()"))},zt.prototype.pipe=function(Bn,bn){var Xr=this,Ni=this._readableState;switch(Ni.pipesCount){case 0:Ni.pipes=Bn;break;case 1:Ni.pipes=[Ni.pipes,Bn];break;default:Ni.pipes.push(Bn)}Ni.pipesCount+=1,V("pipe count=%d opts=%j",Ni.pipesCount,bn);var Xi=bn&&!1===bn.end||Bn===l.stdout||Bn===l.stderr?Pt:Ao;function Ao(){V("onend"),Bn.end()}Ni.endEmitted?l.nextTick(Xi):Xr.once("end",Xi),Bn.on("unpipe",function Bo(Rt,qn){V("onunpipe"),Rt===Xr&&qn&&!1===qn.hasUnpiped&&(qn.hasUnpiped=!0,V("cleanup"),Bn.removeListener("close",bo),Bn.removeListener("finish",Qe),Bn.removeListener("drain",zs),Bn.removeListener("error",uo),Bn.removeListener("unpipe",Bo),Xr.removeListener("end",Ao),Xr.removeListener("end",Pt),Xr.removeListener("data",Ii),Qs=!0,!Ni.awaitDrain||Bn._writableState&&!Bn._writableState.needDrain||zs())});var Rt,zs=(Rt=Xr,function(){var qn=Rt._readableState;V("pipeOnDrain",qn.awaitDrain),qn.awaitDrain&&qn.awaitDrain--,0===qn.awaitDrain&&_(Rt,"data")&&(qn.flowing=!0,Yr(Rt))});Bn.on("drain",zs);var Qs=!1;function Ii(Rt){V("ondata");var qn=Bn.write(Rt);V("dest.write",qn),!1===qn&&((1===Ni.pipesCount&&Ni.pipes===Bn||Ni.pipesCount>1&&-1!==Wr(Ni.pipes,Bn))&&!Qs&&(V("false write response, pause",Ni.awaitDrain),Ni.awaitDrain++),Xr.pause())}function uo(Rt){V("onerror",Rt),Pt(),Bn.removeListener("error",uo),0===_(Bn,"error")&&Bt(Bn,Rt)}function bo(){Bn.removeListener("finish",Qe),Pt()}function Qe(){V("onfinish"),Bn.removeListener("close",bo),Pt()}function Pt(){V("unpipe"),Xr.unpipe(Bn)}return Xr.on("data",Ii),function(Rt,qn,wr){if("function"==typeof Rt.prependListener)return Rt.prependListener(qn,wr);Rt._events&&Rt._events[qn]?Array.isArray(Rt._events[qn])?Rt._events[qn].unshift(wr):Rt._events[qn]=[wr,Rt._events[qn]]:Rt.on(qn,wr)}(Bn,"error",uo),Bn.once("close",bo),Bn.once("finish",Qe),Bn.emit("pipe",Xr),Ni.flowing||(V("pipe resume"),Xr.resume()),Bn},zt.prototype.unpipe=function(Bn){var bn=this._readableState,Xr={hasUnpiped:!1};if(0===bn.pipesCount)return this;if(1===bn.pipesCount)return Bn&&Bn!==bn.pipes||(Bn||(Bn=bn.pipes),bn.pipes=null,bn.pipesCount=0,bn.flowing=!1,Bn&&Bn.emit("unpipe",this,Xr)),this;if(!Bn){var Ni=bn.pipes,Xi=bn.pipesCount;bn.pipes=null,bn.pipesCount=0,bn.flowing=!1;for(var Bo=0;Bo<Xi;Bo++)Ni[Bo].emit("unpipe",this,{hasUnpiped:!1});return this}var Ao=Wr(bn.pipes,Bn);return-1===Ao||(bn.pipes.splice(Ao,1),bn.pipesCount-=1,1===bn.pipesCount&&(bn.pipes=bn.pipes[0]),Bn.emit("unpipe",this,Xr)),this},zt.prototype.addListener=zt.prototype.on=function(Bn,bn){var Xr=C.prototype.on.call(this,Bn,bn),Ni=this._readableState;return"data"===Bn?(Ni.readableListening=this.listenerCount("readable")>0,!1!==Ni.flowing&&this.resume()):"readable"===Bn&&(Ni.endEmitted||Ni.readableListening||(Ni.readableListening=Ni.needReadable=!0,Ni.flowing=!1,Ni.emittedReadable=!1,V("on readable",Ni.length,Ni.reading),Ni.length?Vr(this):Ni.reading||l.nextTick(ur,this))),Xr},zt.prototype.removeListener=function(Bn,bn){var Xr=C.prototype.removeListener.call(this,Bn,bn);return"readable"===Bn&&l.nextTick(Qn,this),Xr},zt.prototype.removeAllListeners=function(Bn){var bn=C.prototype.removeAllListeners.apply(this,arguments);return"readable"!==Bn&&void 0!==Bn||l.nextTick(Qn,this),bn},zt.prototype.resume=function(){var Xr,Bn=this._readableState;return Bn.flowing||(V("resume"),Bn.flowing=!Bn.readableListening,this,(Xr=Bn).resumeScheduled||(Xr.resumeScheduled=!0,l.nextTick(In,this,Xr))),Bn.paused=!1,this},zt.prototype.pause=function(){return V("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(V("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},zt.prototype.wrap=function(Bn){var bn=this,Xr=this._readableState,Ni=!1;for(var Xi in Bn.on("end",function(){if(V("wrapped end"),Xr.decoder&&!Xr.ended){var Ao=Xr.decoder.end();Ao&&Ao.length&&bn.push(Ao)}bn.push(null)}),Bn.on("data",function(Ao){V("wrapped data"),Xr.decoder&&(Ao=Xr.decoder.write(Ao)),Xr.objectMode&&null==Ao||(Xr.objectMode||Ao&&Ao.length)&&(bn.push(Ao)||(Ni=!0,Bn.pause()))}),Bn)void 0===this[Xi]&&"function"==typeof Bn[Xi]&&(this[Xi]=function(Ao){return function(){return Bn[Ao].apply(Bn,arguments)}}(Xi));for(var Bo=0;Bo<Jt.length;Bo++)Bn.on(Jt[Bo],this.emit.bind(this,Jt[Bo]));return this._read=function(Ao){V("wrapped _read",Ao),Ni&&(Ni=!1,Bn.resume())},this},"function"==typeof Symbol&&(zt.prototype[Symbol.asyncIterator]=function(){return void 0===le&&(le=t(5850)),le(this)}),Object.defineProperty(zt.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(zt.prototype,"readableBuffer",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(zt.prototype,"readableFlowing",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(Bn){this._readableState&&(this._readableState.flowing=Bn)}}),zt._fromList=Qi,Object.defineProperty(zt.prototype,"readableLength",{enumerable:!1,get:function(){return this._readableState.length}}),"function"==typeof Symbol&&(zt.from=function(Bn,bn){return void 0===_e&&(_e=t(5167)),_e(zt,Bn,bn)})},4605:(n,s,t)=>{n.exports=Q;var o=t(4281).q,l=o.ERR_METHOD_NOT_IMPLEMENTED,_=o.ERR_MULTIPLE_CALLBACK,C=o.ERR_TRANSFORM_ALREADY_TRANSFORMING,R=o.ERR_TRANSFORM_WITH_LENGTH_0,N=t(6753);function V(_e,ye){var $e=this._transformState;$e.transforming=!1;var Ie=$e.writecb;if(null===Ie)return this.emit("error",new _);$e.writechunk=null,$e.writecb=null,null!=ye&&this.push(ye),Ie(_e);var ke=this._readableState;ke.reading=!1,(ke.needReadable||ke.length<ke.highWaterMark)&&this._read(ke.highWaterMark)}function Q(_e){if(!(this instanceof Q))return new Q(_e);N.call(this,_e),this._transformState={afterTransform:V.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,_e&&("function"==typeof _e.transform&&(this._transform=_e.transform),"function"==typeof _e.flush&&(this._flush=_e.flush)),this.on("prefinish",oe)}function oe(){var _e=this;"function"!=typeof this._flush||this._readableState.destroyed?le(this,null,null):this._flush(function(ye,$e){le(_e,ye,$e)})}function le(_e,ye,$e){if(ye)return _e.emit("error",ye);if(null!=$e&&_e.push($e),_e._writableState.length)throw new R;if(_e._transformState.transforming)throw new C;return _e.push(null)}t(5717)(Q,N),Q.prototype.push=function(_e,ye){return this._transformState.needTransform=!1,N.prototype.push.call(this,_e,ye)},Q.prototype._transform=function(_e,ye,$e){$e(new l("_transform()"))},Q.prototype._write=function(_e,ye,$e){var Ie=this._transformState;if(Ie.writecb=$e,Ie.writechunk=_e,Ie.writeencoding=ye,!Ie.transforming){var ke=this._readableState;(Ie.needTransform||ke.needReadable||ke.length<ke.highWaterMark)&&this._read(ke.highWaterMark)}},Q.prototype._read=function(_e){var ye=this._transformState;null===ye.writechunk||ye.transforming?ye.needTransform=!0:(ye.transforming=!0,this._transform(ye.writechunk,ye.writeencoding,ye.afterTransform))},Q.prototype._destroy=function(_e,ye){N.prototype._destroy.call(this,_e,function($e){ye($e)})}},4229:(n,s,t)=>{var o,l=t(4155);function _(On){var Jn=this;this.next=null,this.entry=null,this.finish=function(){!function(Qn,ur,In){var Yr=Qn.entry;for(Qn.entry=null;Yr;){var Qi=Yr.callback;ur.pendingcb--,Qi(void 0),Yr=Yr.next}ur.corkedRequestsFree.next=Qn}(Jn,On)}}n.exports=zt,zt.WritableState=Mn;var Q,C={deprecate:t(4927)},R=t(2503),N=t(8764).Buffer,V=t.g.Uint8Array||function(){},oe=t(1195),le=t(2457).getHighWaterMark,_e=t(4281).q,ye=_e.ERR_INVALID_ARG_TYPE,$e=_e.ERR_METHOD_NOT_IMPLEMENTED,Ie=_e.ERR_MULTIPLE_CALLBACK,ke=_e.ERR_STREAM_CANNOT_PIPE,we=_e.ERR_STREAM_DESTROYED,G=_e.ERR_STREAM_NULL_VALUES,Dt=_e.ERR_STREAM_WRITE_AFTER_END,bt=_e.ERR_UNKNOWN_ENCODING,Bt=oe.errorOrDestroy;function Jt(){}function Mn(On,Jn,Qn){o=o||t(6753),"boolean"!=typeof Qn&&(Qn=Jn instanceof o),this.objectMode=!!(On=On||{}).objectMode,Qn&&(this.objectMode=this.objectMode||!!On.writableObjectMode),this.highWaterMark=le(this,On,"writableHighWaterMark",Qn),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1,this.decodeStrings=!(!1===On.decodeStrings),this.defaultEncoding=On.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(In){!function(Yr,Qi){var bn,Di=Yr._writableState,ji=Di.sync,Wr=Di.writecb;if("function"!=typeof Wr)throw new Ie;if((bn=Di).writing=!1,bn.writecb=null,bn.length-=bn.writelen,bn.writelen=0,Qi)!function(bn,Xr,Ni,Xi,Bo){--Xr.pendingcb,Ni?(l.nextTick(Bo,Xi),l.nextTick(qr,bn,Xr),bn._writableState.errorEmitted=!0,Bt(bn,Xi)):(Bo(Xi),bn._writableState.errorEmitted=!0,Bt(bn,Xi),qr(bn,Xr))}(Yr,Di,ji,Qi,Wr);else{var Bn=Hr(Di)||Yr.destroyed;Bn||Di.corked||Di.bufferProcessing||!Di.bufferedRequest||zr(Yr,Di),ji?l.nextTick(Nn,Yr,Di,Bn,Wr):Nn(Yr,Di,Bn,Wr)}}(Jn,In)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==On.emitClose,this.autoDestroy=!!On.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new _(this)}function zt(On){var Jn=this instanceof(o=o||t(6753));if(!Jn&&!Q.call(zt,this))return new zt(On);this._writableState=new Mn(On,this,Jn),this.writable=!0,On&&("function"==typeof On.write&&(this._write=On.write),"function"==typeof On.writev&&(this._writev=On.writev),"function"==typeof On.destroy&&(this._destroy=On.destroy),"function"==typeof On.final&&(this._final=On.final)),R.call(this)}function xn(On,Jn,Qn,ur,In,Yr,Qi){Jn.writelen=ur,Jn.writecb=Qi,Jn.writing=!0,Jn.sync=!0,Jn.destroyed?Jn.onwrite(new we("write")):Qn?On._writev(In,Jn.onwrite):On._write(In,Yr,Jn.onwrite),Jn.sync=!1}function Nn(On,Jn,Qn,ur){var In,Yr;Qn||(In=On,0===(Yr=Jn).length&&Yr.needDrain&&(Yr.needDrain=!1,In.emit("drain"))),Jn.pendingcb--,ur(),qr(On,Jn)}function zr(On,Jn){Jn.bufferProcessing=!0;var Qn=Jn.bufferedRequest;if(On._writev&&Qn&&Qn.next){var In=new Array(Jn.bufferedRequestCount),Yr=Jn.corkedRequestsFree;Yr.entry=Qn;for(var Qi=0,Di=!0;Qn;)In[Qi]=Qn,Qn.isBuf||(Di=!1),Qn=Qn.next,Qi+=1;In.allBuffers=Di,xn(On,Jn,!0,Jn.length,In,"",Yr.finish),Jn.pendingcb++,Jn.lastBufferedRequest=null,Yr.next?(Jn.corkedRequestsFree=Yr.next,Yr.next=null):Jn.corkedRequestsFree=new _(Jn),Jn.bufferedRequestCount=0}else{for(;Qn;){var ji=Qn.chunk;if(xn(On,Jn,!1,Jn.objectMode?1:ji.length,ji,Qn.encoding,Qn.callback),Qn=Qn.next,Jn.bufferedRequestCount--,Jn.writing)break}null===Qn&&(Jn.lastBufferedRequest=null)}Jn.bufferedRequest=Qn,Jn.bufferProcessing=!1}function Hr(On){return On.ending&&0===On.length&&null===On.bufferedRequest&&!On.finished&&!On.writing}function Vr(On,Jn){On._final(function(Qn){Jn.pendingcb--,Qn&&Bt(On,Qn),Jn.prefinished=!0,On.emit("prefinish"),qr(On,Jn)})}function qr(On,Jn){var In,Yr,Qn=Hr(Jn);if(Qn&&(In=On,(Yr=Jn).prefinished||Yr.finalCalled||("function"!=typeof In._final||Yr.destroyed?(Yr.prefinished=!0,In.emit("prefinish")):(Yr.pendingcb++,Yr.finalCalled=!0,l.nextTick(Vr,In,Yr))),0===Jn.pendingcb&&(Jn.finished=!0,On.emit("finish"),Jn.autoDestroy))){var ur=On._readableState;(!ur||ur.autoDestroy&&ur.endEmitted)&&On.destroy()}return Qn}t(5717)(zt,R),Mn.prototype.getBuffer=function(){for(var On=this.bufferedRequest,Jn=[];On;)Jn.push(On),On=On.next;return Jn},function(){try{Object.defineProperty(Mn.prototype,"buffer",{get:C.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(On){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(Q=Function.prototype[Symbol.hasInstance],Object.defineProperty(zt,Symbol.hasInstance,{value:function(On){return!!Q.call(this,On)||this===zt&&On&&On._writableState instanceof Mn}})):Q=function(On){return On instanceof this},zt.prototype.pipe=function(){Bt(this,new ke)},zt.prototype.write=function(On,Jn,Qn){var ur,Di,ji,Wr,In=this._writableState,Yr=!1,Qi=!In.objectMode&&(N.isBuffer(ur=On)||ur instanceof V);return Qi&&!N.isBuffer(On)&&(On=N.from(On)),"function"==typeof Jn&&(Qn=Jn,Jn=null),Qi?Jn="buffer":Jn||(Jn=In.defaultEncoding),"function"!=typeof Qn&&(Qn=Jt),In.ending?(Di=this,ji=Qn,Wr=new Dt,Bt(Di,Wr),l.nextTick(ji,Wr)):(Qi||function(Di,ji,Wr,Bn){var bn;return null===Wr?bn=new G:"string"==typeof Wr||ji.objectMode||(bn=new ye("chunk",["string","Buffer"],Wr)),!bn||(Bt(Di,bn),l.nextTick(Bn,bn),!1)}(this,In,On,Qn))&&(In.pendingcb++,Yr=function(Di,ji,Wr,Bn,bn,Xr){if(!Wr){var Ni=(Qs=Bn,(zs=ji).objectMode||!1===zs.decodeStrings||"string"!=typeof Qs||(Qs=N.from(Qs,bn)),Qs);Bn!==Ni&&(Wr=!0,bn="buffer",Bn=Ni)}var zs,Qs,Xi=ji.objectMode?1:Bn.length;ji.length+=Xi;var Bo=ji.length<ji.highWaterMark;if(Bo||(ji.needDrain=!0),ji.writing||ji.corked){var Ao=ji.lastBufferedRequest;ji.lastBufferedRequest={chunk:Bn,encoding:bn,isBuf:Wr,callback:Xr,next:null},Ao?Ao.next=ji.lastBufferedRequest:ji.bufferedRequest=ji.lastBufferedRequest,ji.bufferedRequestCount+=1}else xn(Di,ji,!1,Xi,Bn,bn,Xr);return Bo}(this,In,Qi,On,Jn,Qn)),Yr},zt.prototype.cork=function(){this._writableState.corked++},zt.prototype.uncork=function(){var On=this._writableState;On.corked&&(On.corked--,On.writing||On.corked||On.bufferProcessing||!On.bufferedRequest||zr(this,On))},zt.prototype.setDefaultEncoding=function(On){if("string"==typeof On&&(On=On.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((On+"").toLowerCase())>-1))throw new bt(On);return this._writableState.defaultEncoding=On,this},Object.defineProperty(zt.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(zt.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),zt.prototype._write=function(On,Jn,Qn){Qn(new $e("_write()"))},zt.prototype._writev=null,zt.prototype.end=function(On,Jn,Qn){var Yr,Qi,ur=this._writableState;return"function"==typeof On?(Qn=On,On=null,Jn=null):"function"==typeof Jn&&(Qn=Jn,Jn=null),null!=On&&this.write(On,Jn),ur.corked&&(ur.corked=1,this.uncork()),ur.ending||(this,Qi=Qn,(Yr=ur).ending=!0,qr(this,Yr),Qi&&(Yr.finished?l.nextTick(Qi):this.once("finish",Qi)),Yr.ended=!0,this.writable=!1),this},Object.defineProperty(zt.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(zt.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(On){this._writableState&&(this._writableState.destroyed=On)}}),zt.prototype.destroy=oe.destroy,zt.prototype._undestroy=oe.undestroy,zt.prototype._destroy=function(On,Jn){Jn(On)}},5850:(n,s,t)=>{var o,l=t(4155);function _(G,Dt,bt){return Dt in G?Object.defineProperty(G,Dt,{value:bt,enumerable:!0,configurable:!0,writable:!0}):G[Dt]=bt,G}var C=t(8610),R=Symbol("lastResolve"),N=Symbol("lastReject"),V=Symbol("error"),Q=Symbol("ended"),oe=Symbol("lastPromise"),le=Symbol("handlePromise"),_e=Symbol("stream");function ye(G,Dt){return{value:G,done:Dt}}function $e(G){var Dt=G[R];if(null!==Dt){var bt=G[_e].read();null!==bt&&(G[oe]=null,G[R]=null,G[N]=null,Dt(ye(bt,!1)))}}function Ie(G){l.nextTick($e,G)}var ke=Object.getPrototypeOf(function(){}),we=Object.setPrototypeOf((_(o={get stream(){return this[_e]},next:function(){var G=this,Dt=this[V];if(null!==Dt)return Promise.reject(Dt);if(this[Q])return Promise.resolve(ye(void 0,!0));if(this[_e].destroyed)return new Promise(function(Mn,zt){l.nextTick(function(){G[V]?zt(G[V]):Mn(ye(void 0,!0))})});var bt,Mn,zt,Bt=this[oe];if(Bt)bt=new Promise((Mn=Bt,zt=this,function(xn,Nn){Mn.then(function(){zt[Q]?xn(ye(void 0,!0)):zt[le](xn,Nn)},Nn)}));else{var Jt=this[_e].read();if(null!==Jt)return Promise.resolve(ye(Jt,!1));bt=new Promise(this[le])}return this[oe]=bt,bt}},Symbol.asyncIterator,function(){return this}),_(o,"return",function(){var G=this;return new Promise(function(Dt,bt){G[_e].destroy(null,function(Bt){Bt?bt(Bt):Dt(ye(void 0,!0))})})}),o),ke);n.exports=function(G){var Dt,bt=Object.create(we,(_(Dt={},_e,{value:G,writable:!0}),_(Dt,R,{value:null,writable:!0}),_(Dt,N,{value:null,writable:!0}),_(Dt,V,{value:null,writable:!0}),_(Dt,Q,{value:G._readableState.endEmitted,writable:!0}),_(Dt,le,{value:function(Bt,Jt){var Mn=bt[_e].read();Mn?(bt[oe]=null,bt[R]=null,bt[N]=null,Bt(ye(Mn,!1))):(bt[R]=Bt,bt[N]=Jt)},writable:!0}),Dt));return bt[oe]=null,C(G,function(Bt){if(Bt&&"ERR_STREAM_PREMATURE_CLOSE"!==Bt.code){var Jt=bt[N];return null!==Jt&&(bt[oe]=null,bt[R]=null,bt[N]=null,Jt(Bt)),void(bt[V]=Bt)}var Mn=bt[R];null!==Mn&&(bt[oe]=null,bt[R]=null,bt[N]=null,Mn(ye(void 0,!0))),bt[Q]=!0}),G.on("readable",Ie.bind(null,bt)),bt}},7327:(n,s,t)=>{function o(V,Q){var oe=Object.keys(V);if(Object.getOwnPropertySymbols){var le=Object.getOwnPropertySymbols(V);Q&&(le=le.filter(function(_e){return Object.getOwnPropertyDescriptor(V,_e).enumerable})),oe.push.apply(oe,le)}return oe}function l(V,Q,oe){return Q in V?Object.defineProperty(V,Q,{value:oe,enumerable:!0,configurable:!0,writable:!0}):V[Q]=oe,V}var C=t(8764).Buffer,R=t(2361).inspect,N=R&&R.custom||"inspect";n.exports=function(){function V(){(function(_e,ye){if(!(_e instanceof ye))throw new TypeError("Cannot call a class as a function")})(this,V),this.head=null,this.tail=null,this.length=0}var oe;return oe=[{key:"push",value:function(_e){var ye={data:_e,next:null};this.length>0?this.tail.next=ye:this.head=ye,this.tail=ye,++this.length}},{key:"unshift",value:function(_e){var ye={data:_e,next:this.head};0===this.length&&(this.tail=ye),this.head=ye,++this.length}},{key:"shift",value:function(){if(0!==this.length){var _e=this.head.data;return this.head=1===this.length?this.tail=null:this.head.next,--this.length,_e}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(_e){if(0===this.length)return"";for(var ye=this.head,$e=""+ye.data;ye=ye.next;)$e+=_e+ye.data;return $e}},{key:"concat",value:function(_e){if(0===this.length)return C.alloc(0);for(var ke=C.allocUnsafe(_e>>>0),we=this.head,G=0;we;)C.prototype.copy.call(we.data,ke,G),G+=we.data.length,we=we.next;return ke}},{key:"consume",value:function(_e,ye){var $e;return _e<this.head.data.length?($e=this.head.data.slice(0,_e),this.head.data=this.head.data.slice(_e)):$e=_e===this.head.data.length?this.shift():ye?this._getString(_e):this._getBuffer(_e),$e}},{key:"first",value:function(){return this.head.data}},{key:"_getString",value:function(_e){var ye=this.head,$e=1,Ie=ye.data;for(_e-=Ie.length;ye=ye.next;){var ke=ye.data,we=_e>ke.length?ke.length:_e;if(Ie+=we===ke.length?ke:ke.slice(0,_e),0==(_e-=we)){we===ke.length?(++$e,this.head=ye.next?ye.next:this.tail=null):(this.head=ye,ye.data=ke.slice(we));break}++$e}return this.length-=$e,Ie}},{key:"_getBuffer",value:function(_e){var ye=C.allocUnsafe(_e),$e=this.head,Ie=1;for($e.data.copy(ye),_e-=$e.data.length;$e=$e.next;){var ke=$e.data,we=_e>ke.length?ke.length:_e;if(ke.copy(ye,ye.length-_e,0,we),0==(_e-=we)){we===ke.length?(++Ie,this.head=$e.next?$e.next:this.tail=null):(this.head=$e,$e.data=ke.slice(we));break}++Ie}return this.length-=Ie,ye}},{key:N,value:function(_e,ye){return R(this,function($e){for(var Ie=1;Ie<arguments.length;Ie++){var ke=null!=arguments[Ie]?arguments[Ie]:{};Ie%2?o(Object(ke),!0).forEach(function(we){l($e,we,ke[we])}):Object.getOwnPropertyDescriptors?Object.defineProperties($e,Object.getOwnPropertyDescriptors(ke)):o(Object(ke)).forEach(function(we){Object.defineProperty($e,we,Object.getOwnPropertyDescriptor(ke,we))})}return $e}({},ye,{depth:0,customInspect:!1}))}}],oe&&function _(V,Q){for(var oe=0;oe<Q.length;oe++){var le=Q[oe];le.enumerable=le.enumerable||!1,le.configurable=!0,"value"in le&&(le.writable=!0),Object.defineProperty(V,le.key,le)}}(V.prototype,oe),V}()},1195:(n,s,t)=>{var o=t(4155);function l(R,N){C(R,N),_(R)}function _(R){R._writableState&&!R._writableState.emitClose||R._readableState&&!R._readableState.emitClose||R.emit("close")}function C(R,N){R.emit("error",N)}n.exports={destroy:function(R,N){var V=this;return this._readableState&&this._readableState.destroyed||this._writableState&&this._writableState.destroyed?(N?N(R):R&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,o.nextTick(C,this,R)):o.nextTick(C,this,R)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(R||null,function(le){!N&&le?V._writableState?V._writableState.errorEmitted?o.nextTick(_,V):(V._writableState.errorEmitted=!0,o.nextTick(l,V,le)):o.nextTick(l,V,le):N?(o.nextTick(_,V),N(le)):o.nextTick(_,V)}),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(R,N){var V=R._readableState,Q=R._writableState;V&&V.autoDestroy||Q&&Q.autoDestroy?R.destroy(N):R.emit("error",N)}}},8610:(n,s,t)=>{var o=t(4281).q.ERR_STREAM_PREMATURE_CLOSE;function l(){}n.exports=function _(C,R,N){if("function"==typeof R)return _(C,null,R);var G,Dt;R||(R={}),G=N||l,Dt=!1,N=function(){if(!Dt){Dt=!0;for(var bt=arguments.length,Bt=new Array(bt),Jt=0;Jt<bt;Jt++)Bt[Jt]=arguments[Jt];G.apply(this,Bt)}};var V=R.readable||!1!==R.readable&&C.readable,Q=R.writable||!1!==R.writable&&C.writable,oe=function(){C.writable||_e()},le=C._writableState&&C._writableState.finished,_e=function(){Q=!1,le=!0,V||N.call(C)},ye=C._readableState&&C._readableState.endEmitted,$e=function(){V=!1,ye=!0,Q||N.call(C)},Ie=function(G){N.call(C,G)},ke=function(){var G;return V&&!ye?(C._readableState&&C._readableState.ended||(G=new o),N.call(C,G)):Q&&!le?(C._writableState&&C._writableState.ended||(G=new o),N.call(C,G)):void 0},we=function(){C.req.on("finish",_e)};return function(G){return G.setHeader&&"function"==typeof G.abort}(C)?(C.on("complete",_e),C.on("abort",ke),C.req?we():C.on("request",we)):Q&&!C._writableState&&(C.on("end",oe),C.on("close",oe)),C.on("end",$e),C.on("finish",_e),!1!==R.error&&C.on("error",Ie),C.on("close",ke),function(){C.removeListener("complete",_e),C.removeListener("abort",ke),C.removeListener("request",we),C.req&&C.req.removeListener("finish",_e),C.removeListener("end",oe),C.removeListener("close",oe),C.removeListener("finish",_e),C.removeListener("end",$e),C.removeListener("error",Ie),C.removeListener("close",ke)}}},5167:n=>{n.exports=function(){throw new Error("Readable.from is not available in the browser")}},9946:(n,s,t)=>{var o,l=t(4281).q,_=l.ERR_MISSING_ARGS,C=l.ERR_STREAM_DESTROYED;function R(le){if(le)throw le}function N(le,_e,ye,$e){var we,G;we=$e,G=!1,$e=function(){G||(G=!0,we.apply(void 0,arguments))};var Ie=!1;le.on("close",function(){Ie=!0}),void 0===o&&(o=t(8610)),o(le,{readable:_e,writable:ye},function(we){if(we)return $e(we);Ie=!0,$e()});var ke=!1;return function(we){if(!Ie&&!ke)return ke=!0,function(G){return G.setHeader&&"function"==typeof G.abort}(le)?le.abort():"function"==typeof le.destroy?le.destroy():void $e(we||new C("pipe"))}}function V(le){le()}function Q(le,_e){return le.pipe(_e)}function oe(le){return le.length?"function"!=typeof le[le.length-1]?R:le.pop():R}n.exports=function(){for(var le=arguments.length,_e=new Array(le),ye=0;ye<le;ye++)_e[ye]=arguments[ye];var $e,Ie=oe(_e);if(Array.isArray(_e[0])&&(_e=_e[0]),_e.length<2)throw new _("streams");var ke=_e.map(function(we,G){var Dt=G<_e.length-1;return N(we,Dt,G>0,function(bt){$e||($e=bt),bt&&ke.forEach(V),Dt||(ke.forEach(V),Ie($e))})});return _e.reduce(Q)}},2457:(n,s,t)=>{var o=t(4281).q.ERR_INVALID_OPT_VALUE;n.exports={getHighWaterMark:function(l,_,C,R){var V,N=null!=(V=_).highWaterMark?V.highWaterMark:R?V[C]:null;if(null!=N){if(!isFinite(N)||Math.floor(N)!==N||N<0)throw new o(R?C:"highWaterMark",N);return Math.floor(N)}return l.objectMode?16:16384}}},2503:(n,s,t)=>{n.exports=t(7187).EventEmitter},4189:(n,s,t)=>{var o=t(396).Buffer;function l(_,C){this._block=o.alloc(_),this._finalSize=C,this._blockSize=_,this._len=0}l.prototype.update=function(_,C){"string"==typeof _&&(_=o.from(_,C=C||"utf8"));for(var R=this._block,N=this._blockSize,V=_.length,Q=this._len,oe=0;oe<V;){for(var le=Q%N,_e=Math.min(V-oe,N-le),ye=0;ye<_e;ye++)R[le+ye]=_[oe+ye];oe+=_e,(Q+=_e)%N==0&&this._update(R)}return this._len+=V,this},l.prototype.digest=function(_){var C=this._len%this._blockSize;this._block[C]=128,this._block.fill(0,C+1),C>=this._finalSize&&(this._update(this._block),this._block.fill(0));var R=8*this._len;if(R<=4294967295)this._block.writeUInt32BE(R,this._blockSize-4);else{var N=(4294967295&R)>>>0;this._block.writeUInt32BE((R-N)/4294967296,this._blockSize-8),this._block.writeUInt32BE(N,this._blockSize-4)}this._update(this._block);var Q=this._hash();return _?Q.toString(_):Q},l.prototype._update=function(){throw new Error("_update must be implemented by subclass")},n.exports=l},9072:(n,s,t)=>{var o=n.exports=function(l){l=l.toLowerCase();var _=o[l];if(!_)throw new Error(l+" is not supported (we accept pull requests)");return new _};o.sha=t(4448),o.sha1=t(8336),o.sha224=t(8432),o.sha256=t(7499),o.sha384=t(1686),o.sha512=t(7816)},4448:(n,s,t)=>{var o=t(5717),l=t(4189),_=t(396).Buffer,C=[1518500249,1859775393,-1894007588,-899497514],R=new Array(80);function N(){this.init(),this._w=R,l.call(this,64,56)}function V(oe){return oe<<30|oe>>>2}function Q(oe,le,_e,ye){return 0===oe?le&_e|~le&ye:2===oe?le&_e|le&ye|_e&ye:le^_e^ye}o(N,l),N.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},N.prototype._update=function(oe){for(var le,_e=this._w,ye=0|this._a,$e=0|this._b,Ie=0|this._c,ke=0|this._d,we=0|this._e,G=0;G<16;++G)_e[G]=oe.readInt32BE(4*G);for(;G<80;++G)_e[G]=_e[G-3]^_e[G-8]^_e[G-14]^_e[G-16];for(var Dt=0;Dt<80;++Dt){var bt=~~(Dt/20),Bt=0|((le=ye)<<5|le>>>27)+Q(bt,$e,Ie,ke)+we+_e[Dt]+C[bt];we=ke,ke=Ie,Ie=V($e),$e=ye,ye=Bt}this._a=ye+this._a|0,this._b=$e+this._b|0,this._c=Ie+this._c|0,this._d=ke+this._d|0,this._e=we+this._e|0},N.prototype._hash=function(){var oe=_.allocUnsafe(20);return oe.writeInt32BE(0|this._a,0),oe.writeInt32BE(0|this._b,4),oe.writeInt32BE(0|this._c,8),oe.writeInt32BE(0|this._d,12),oe.writeInt32BE(0|this._e,16),oe},n.exports=N},8336:(n,s,t)=>{var o=t(5717),l=t(4189),_=t(396).Buffer,C=[1518500249,1859775393,-1894007588,-899497514],R=new Array(80);function N(){this.init(),this._w=R,l.call(this,64,56)}function V(le){return le<<5|le>>>27}function Q(le){return le<<30|le>>>2}function oe(le,_e,ye,$e){return 0===le?_e&ye|~_e&$e:2===le?_e&ye|_e&$e|ye&$e:_e^ye^$e}o(N,l),N.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},N.prototype._update=function(le){for(var _e,ye=this._w,$e=0|this._a,Ie=0|this._b,ke=0|this._c,we=0|this._d,G=0|this._e,Dt=0;Dt<16;++Dt)ye[Dt]=le.readInt32BE(4*Dt);for(;Dt<80;++Dt)ye[Dt]=(_e=ye[Dt-3]^ye[Dt-8]^ye[Dt-14]^ye[Dt-16])<<1|_e>>>31;for(var bt=0;bt<80;++bt){var Bt=~~(bt/20),Jt=V($e)+oe(Bt,Ie,ke,we)+G+ye[bt]+C[Bt]|0;G=we,we=ke,ke=Q(Ie),Ie=$e,$e=Jt}this._a=$e+this._a|0,this._b=Ie+this._b|0,this._c=ke+this._c|0,this._d=we+this._d|0,this._e=G+this._e|0},N.prototype._hash=function(){var le=_.allocUnsafe(20);return le.writeInt32BE(0|this._a,0),le.writeInt32BE(0|this._b,4),le.writeInt32BE(0|this._c,8),le.writeInt32BE(0|this._d,12),le.writeInt32BE(0|this._e,16),le},n.exports=N},8432:(n,s,t)=>{var o=t(5717),l=t(7499),_=t(4189),C=t(396).Buffer,R=new Array(64);function N(){this.init(),this._w=R,_.call(this,64,56)}o(N,l),N.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},N.prototype._hash=function(){var V=C.allocUnsafe(28);return V.writeInt32BE(this._a,0),V.writeInt32BE(this._b,4),V.writeInt32BE(this._c,8),V.writeInt32BE(this._d,12),V.writeInt32BE(this._e,16),V.writeInt32BE(this._f,20),V.writeInt32BE(this._g,24),V},n.exports=N},7499:(n,s,t)=>{var o=t(5717),l=t(4189),_=t(396).Buffer,C=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],R=new Array(64);function N(){this.init(),this._w=R,l.call(this,64,56)}function V(ye,$e,Ie){return Ie^ye&($e^Ie)}function Q(ye,$e,Ie){return ye&$e|Ie&(ye|$e)}function oe(ye){return(ye>>>2|ye<<30)^(ye>>>13|ye<<19)^(ye>>>22|ye<<10)}function le(ye){return(ye>>>6|ye<<26)^(ye>>>11|ye<<21)^(ye>>>25|ye<<7)}function _e(ye){return(ye>>>7|ye<<25)^(ye>>>18|ye<<14)^ye>>>3}o(N,l),N.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},N.prototype._update=function(ye){for(var $e,Ie=this._w,ke=0|this._a,we=0|this._b,G=0|this._c,Dt=0|this._d,bt=0|this._e,Bt=0|this._f,Jt=0|this._g,Mn=0|this._h,zt=0;zt<16;++zt)Ie[zt]=ye.readInt32BE(4*zt);for(;zt<64;++zt)Ie[zt]=0|((($e=Ie[zt-2])>>>17|$e<<15)^($e>>>19|$e<<13)^$e>>>10)+Ie[zt-7]+_e(Ie[zt-15])+Ie[zt-16];for(var xn=0;xn<64;++xn){var Nn=Mn+le(bt)+V(bt,Bt,Jt)+C[xn]+Ie[xn]|0,zr=oe(ke)+Q(ke,we,G)|0;Mn=Jt,Jt=Bt,Bt=bt,bt=Dt+Nn|0,Dt=G,G=we,we=ke,ke=Nn+zr|0}this._a=ke+this._a|0,this._b=we+this._b|0,this._c=G+this._c|0,this._d=Dt+this._d|0,this._e=bt+this._e|0,this._f=Bt+this._f|0,this._g=Jt+this._g|0,this._h=Mn+this._h|0},N.prototype._hash=function(){var ye=_.allocUnsafe(32);return ye.writeInt32BE(this._a,0),ye.writeInt32BE(this._b,4),ye.writeInt32BE(this._c,8),ye.writeInt32BE(this._d,12),ye.writeInt32BE(this._e,16),ye.writeInt32BE(this._f,20),ye.writeInt32BE(this._g,24),ye.writeInt32BE(this._h,28),ye},n.exports=N},1686:(n,s,t)=>{var o=t(5717),l=t(7816),_=t(4189),C=t(396).Buffer,R=new Array(160);function N(){this.init(),this._w=R,_.call(this,128,112)}o(N,l),N.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},N.prototype._hash=function(){var V=C.allocUnsafe(48);function Q(oe,le,_e){V.writeInt32BE(oe,_e),V.writeInt32BE(le,_e+4)}return Q(this._ah,this._al,0),Q(this._bh,this._bl,8),Q(this._ch,this._cl,16),Q(this._dh,this._dl,24),Q(this._eh,this._el,32),Q(this._fh,this._fl,40),V},n.exports=N},7816:(n,s,t)=>{var o=t(5717),l=t(4189),_=t(396).Buffer,C=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],R=new Array(160);function N(){this.init(),this._w=R,l.call(this,128,112)}function V(we,G,Dt){return Dt^we&(G^Dt)}function Q(we,G,Dt){return we&G|Dt&(we|G)}function oe(we,G){return(we>>>28|G<<4)^(G>>>2|we<<30)^(G>>>7|we<<25)}function le(we,G){return(we>>>14|G<<18)^(we>>>18|G<<14)^(G>>>9|we<<23)}function _e(we,G){return(we>>>1|G<<31)^(we>>>8|G<<24)^we>>>7}function ye(we,G){return(we>>>1|G<<31)^(we>>>8|G<<24)^(we>>>7|G<<25)}function $e(we,G){return(we>>>19|G<<13)^(G>>>29|we<<3)^we>>>6}function Ie(we,G){return(we>>>19|G<<13)^(G>>>29|we<<3)^(we>>>6|G<<26)}function ke(we,G){return we>>>0<G>>>0?1:0}o(N,l),N.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},N.prototype._update=function(we){for(var G=this._w,Dt=0|this._ah,bt=0|this._bh,Bt=0|this._ch,Jt=0|this._dh,Mn=0|this._eh,zt=0|this._fh,xn=0|this._gh,Nn=0|this._hh,zr=0|this._al,Hr=0|this._bl,Vr=0|this._cl,qr=0|this._dl,On=0|this._el,Jn=0|this._fl,Qn=0|this._gl,ur=0|this._hl,In=0;In<32;In+=2)G[In]=we.readInt32BE(4*In),G[In+1]=we.readInt32BE(4*In+4);for(;In<160;In+=2){var Yr=G[In-30],Qi=G[In-30+1],Di=_e(Yr,Qi),ji=ye(Qi,Yr),Wr=$e(Yr=G[In-4],Qi=G[In-4+1]),Bn=Ie(Qi,Yr),Ni=G[In-32],Xi=G[In-32+1],Bo=ji+G[In-14+1]|0,Ao=Di+G[In-14]+ke(Bo,ji)|0;Ao=(Ao=Ao+Wr+ke(Bo=Bo+Bn|0,Bn)|0)+Ni+ke(Bo=Bo+Xi|0,Xi)|0,G[In]=Ao,G[In+1]=Bo}for(var zs=0;zs<160;zs+=2){Ao=G[zs],Bo=G[zs+1];var Qs=Q(Dt,bt,Bt),Ii=Q(zr,Hr,Vr),uo=oe(Dt,zr),bo=oe(zr,Dt),Qe=le(Mn,On),Pt=le(On,Mn),Rt=C[zs],qn=C[zs+1],wr=V(Mn,zt,xn),Gr=V(On,Jn,Qn),Fi=ur+Pt|0,Ws=Nn+Qe+ke(Fi,ur)|0;Ws=(Ws=(Ws=Ws+wr+ke(Fi=Fi+Gr|0,Gr)|0)+Rt+ke(Fi=Fi+qn|0,qn)|0)+Ao+ke(Fi=Fi+Bo|0,Bo)|0;var Zo=bo+Ii|0,ol=uo+Qs+ke(Zo,bo)|0;Nn=xn,ur=Qn,xn=zt,Qn=Jn,zt=Mn,Jn=On,Mn=Jt+Ws+ke(On=qr+Fi|0,qr)|0,Jt=Bt,qr=Vr,Bt=bt,Vr=Hr,bt=Dt,Hr=zr,Dt=Ws+ol+ke(zr=Fi+Zo|0,Fi)|0}this._al=this._al+zr|0,this._bl=this._bl+Hr|0,this._cl=this._cl+Vr|0,this._dl=this._dl+qr|0,this._el=this._el+On|0,this._fl=this._fl+Jn|0,this._gl=this._gl+Qn|0,this._hl=this._hl+ur|0,this._ah=this._ah+Dt+ke(this._al,zr)|0,this._bh=this._bh+bt+ke(this._bl,Hr)|0,this._ch=this._ch+Bt+ke(this._cl,Vr)|0,this._dh=this._dh+Jt+ke(this._dl,qr)|0,this._eh=this._eh+Mn+ke(this._el,On)|0,this._fh=this._fh+zt+ke(this._fl,Jn)|0,this._gh=this._gh+xn+ke(this._gl,Qn)|0,this._hh=this._hh+Nn+ke(this._hl,ur)|0},N.prototype._hash=function(){var we=_.allocUnsafe(64);function G(Dt,bt,Bt){we.writeInt32BE(Dt,Bt),we.writeInt32BE(bt,Bt+4)}return G(this._ah,this._al,0),G(this._bh,this._bl,8),G(this._ch,this._cl,16),G(this._dh,this._dl,24),G(this._eh,this._el,32),G(this._fh,this._fl,40),G(this._gh,this._gl,48),G(this._hh,this._hl,56),we},n.exports=N},2830:(n,s,t)=>{n.exports=l;var o=t(7187).EventEmitter;function l(){o.call(this)}t(5717)(l,o),l.Readable=t(9481),l.Writable=t(4229),l.Duplex=t(6753),l.Transform=t(4605),l.PassThrough=t(2725),l.finished=t(8610),l.pipeline=t(9946),l.Stream=l,l.prototype.pipe=function(_,C){var R=this;function N($e){_.writable&&!1===_.write($e)&&R.pause&&R.pause()}function V(){R.readable&&R.resume&&R.resume()}R.on("data",N),_.on("drain",V),_._isStdio||C&&!1===C.end||(R.on("end",oe),R.on("close",le));var Q=!1;function oe(){Q||(Q=!0,_.end())}function le(){Q||(Q=!0,"function"==typeof _.destroy&&_.destroy())}function _e($e){if(ye(),0===o.listenerCount(this,"error"))throw $e}function ye(){R.removeListener("data",N),_.removeListener("drain",V),R.removeListener("end",oe),R.removeListener("close",le),R.removeListener("error",_e),_.removeListener("error",_e),R.removeListener("end",ye),R.removeListener("close",ye),_.removeListener("close",ye)}return R.on("error",_e),_.on("error",_e),R.on("end",ye),R.on("close",ye),_.on("close",ye),_.emit("pipe",R),_}},2553:(n,s,t)=>{var o=t(396).Buffer,l=o.isEncoding||function(ye){switch((ye=""+ye)&&ye.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function _(ye){var $e;switch(this.encoding=function(Ie){var ke=function(we){if(!we)return"utf8";for(var G;;)switch(we){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return we;default:if(G)return;we=(""+we).toLowerCase(),G=!0}}(Ie);if("string"!=typeof ke&&(o.isEncoding===l||!l(Ie)))throw new Error("Unknown encoding: "+Ie);return ke||Ie}(ye),this.encoding){case"utf16le":this.text=N,this.end=V,$e=4;break;case"utf8":this.fillLast=R,$e=4;break;case"base64":this.text=Q,this.end=oe,$e=3;break;default:return this.write=le,void(this.end=_e)}this.lastNeed=0,this.lastTotal=0,this.lastChar=o.allocUnsafe($e)}function C(ye){return ye<=127?0:ye>>5==6?2:ye>>4==14?3:ye>>3==30?4:ye>>6==2?-1:-2}function R(ye){var $e=this.lastTotal-this.lastNeed,Ie=function(ke,we,G){if(128!=(192&we[0]))return ke.lastNeed=0,"\ufffd";if(ke.lastNeed>1&&we.length>1){if(128!=(192&we[1]))return ke.lastNeed=1,"\ufffd";if(ke.lastNeed>2&&we.length>2&&128!=(192&we[2]))return ke.lastNeed=2,"\ufffd"}}(this,ye);return void 0!==Ie?Ie:this.lastNeed<=ye.length?(ye.copy(this.lastChar,$e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(ye.copy(this.lastChar,$e,0,ye.length),void(this.lastNeed-=ye.length))}function N(ye,$e){if((ye.length-$e)%2==0){var Ie=ye.toString("utf16le",$e);if(Ie){var ke=Ie.charCodeAt(Ie.length-1);if(ke>=55296&&ke<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=ye[ye.length-2],this.lastChar[1]=ye[ye.length-1],Ie.slice(0,-1)}return Ie}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=ye[ye.length-1],ye.toString("utf16le",$e,ye.length-1)}function V(ye){var $e=ye&&ye.length?this.write(ye):"";return this.lastNeed?$e+this.lastChar.toString("utf16le",0,this.lastTotal-this.lastNeed):$e}function Q(ye,$e){var Ie=(ye.length-$e)%3;return 0===Ie?ye.toString("base64",$e):(this.lastNeed=3-Ie,this.lastTotal=3,1===Ie?this.lastChar[0]=ye[ye.length-1]:(this.lastChar[0]=ye[ye.length-2],this.lastChar[1]=ye[ye.length-1]),ye.toString("base64",$e,ye.length-Ie))}function oe(ye){var $e=ye&&ye.length?this.write(ye):"";return this.lastNeed?$e+this.lastChar.toString("base64",0,3-this.lastNeed):$e}function le(ye){return ye.toString(this.encoding)}function _e(ye){return ye&&ye.length?this.write(ye):""}s.s=_,_.prototype.write=function(ye){if(0===ye.length)return"";var $e,Ie;if(this.lastNeed){if(void 0===($e=this.fillLast(ye)))return"";Ie=this.lastNeed,this.lastNeed=0}else Ie=0;return Ie<ye.length?$e?$e+this.text(ye,Ie):this.text(ye,Ie):$e||""},_.prototype.end=function(ye){var $e=ye&&ye.length?this.write(ye):"";return this.lastNeed?$e+"\ufffd":$e},_.prototype.text=function(ye,$e){var Ie=function(we,G,Dt){var bt=G.length-1;if(bt<Dt)return 0;var Bt=C(G[bt]);return Bt>=0?(Bt>0&&(we.lastNeed=Bt-1),Bt):--bt<Dt||-2===Bt?0:(Bt=C(G[bt]))>=0?(Bt>0&&(we.lastNeed=Bt-2),Bt):--bt<Dt||-2===Bt?0:(Bt=C(G[bt]))>=0?(Bt>0&&(2===Bt?Bt=0:we.lastNeed=Bt-3),Bt):0}(this,ye,$e);if(!this.lastNeed)return ye.toString("utf8",$e);this.lastTotal=Ie;var ke=ye.length-(Ie-this.lastNeed);return ye.copy(this.lastChar,0,ke),ye.toString("utf8",$e,ke)},_.prototype.fillLast=function(ye){if(this.lastNeed<=ye.length)return ye.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);ye.copy(this.lastChar,this.lastTotal-this.lastNeed,0,ye.length),this.lastNeed-=ye.length}},396:(n,s,t)=>{var o=t(8764),l=o.Buffer;function _(R,N){for(var V in R)N[V]=R[V]}function C(R,N,V){return l(R,N,V)}l.from&&l.alloc&&l.allocUnsafe&&l.allocUnsafeSlow?n.exports=o:(_(o,s),s.Buffer=C),C.prototype=Object.create(l.prototype),_(l,C),C.from=function(R,N,V){if("number"==typeof R)throw new TypeError("Argument must not be a number");return l(R,N,V)},C.alloc=function(R,N,V){if("number"!=typeof R)throw new TypeError("Argument must be a number");var Q=l(R);return void 0!==N?"string"==typeof V?Q.fill(N,V):Q.fill(N):Q.fill(0),Q},C.allocUnsafe=function(R){if("number"!=typeof R)throw new TypeError("Argument must be a number");return l(R)},C.allocUnsafeSlow=function(R){if("number"!=typeof R)throw new TypeError("Argument must be a number");return o.SlowBuffer(R)}},4927:(n,s,t)=>{function o(l){try{if(!t.g.localStorage)return!1}catch(C){return!1}var _=t.g.localStorage[l];return null!=_&&"true"===String(_).toLowerCase()}n.exports=function(l,_){if(o("noDeprecation"))return l;var C=!1;return function(){if(!C){if(o("throwDeprecation"))throw new Error(_);o("traceDeprecation")?console.trace(_):console.warn(_),C=!0}return l.apply(this,arguments)}}},255:n=>{var s={"&":"&amp;",'"':"&quot;","'":"&apos;","<":"&lt;",">":"&gt;"};n.exports=function(t){return t&&t.replace?t.replace(/([&"<>'])/g,function(o,l){return s[l]}):t}},3479:(n,s,t)=>{var o=t(4155),l=t(255),_=t(2830).Stream;function C(N,V,Q){Q=Q||0;var oe,le,_e=(oe=V,new Array(Q||0).join(oe||"")),ye=N;if("object"==typeof N&&(ye=N[le=Object.keys(N)[0]])&&ye._elem)return ye._elem.name=le,ye._elem.icount=Q,ye._elem.indent=V,ye._elem.indents=_e,ye._elem.interrupt=ye,ye._elem;var $e,Ie=[],ke=[];function we(G){Object.keys(G).forEach(function(Dt){Ie.push(Dt+'="'+l(G[Dt])+'"')})}switch(typeof ye){case"object":if(null===ye)break;ye._attr&&we(ye._attr),ye._cdata&&ke.push(("<![CDATA["+ye._cdata).replace(/\]\]>/g,"]]]]><![CDATA[>")+"]]>"),ye.forEach&&($e=!1,ke.push(""),ye.forEach(function(G){"object"==typeof G?"_attr"==Object.keys(G)[0]?we(G._attr):ke.push(C(G,V,Q+1)):(ke.pop(),$e=!0,ke.push(l(G)))}),$e||ke.push(""));break;default:ke.push(l(ye))}return{name:le,interrupt:!1,attributes:Ie,content:ke,icount:Q,indents:_e,indent:V}}function R(N,V,Q){if("object"!=typeof V)return N(!1,V);var oe=V.interrupt?1:V.content.length;function le(){for(;V.content.length;){var ye=V.content.shift();if(void 0!==ye){if(_e(ye))return;R(N,ye)}}N(!1,(oe>1?V.indents:"")+(V.name?"</"+V.name+">":"")+(V.indent&&!Q?"\n":"")),Q&&Q()}function _e(ye){return!!ye.interrupt&&(ye.interrupt.append=N,ye.interrupt.end=le,ye.interrupt=!1,N(!0),!0)}if(N(!1,V.indents+(V.name?"<"+V.name:"")+(V.attributes.length?" "+V.attributes.join(" "):"")+(oe?V.name?">":"":V.name?"/>":"")+(V.indent&&oe>1?"\n":"")),!oe)return N(!1,V.indent?"\n":"");_e(V)||le()}n.exports=function(N,V){"object"!=typeof V&&(V={indent:V});var Q,oe,le=V.stream?new _:null,_e="",ye=!1,$e=V.indent?!0===V.indent?"    ":V.indent:"",Ie=!0;function ke(bt){Ie?o.nextTick(bt):bt()}function we(bt,Bt){if(void 0!==Bt&&(_e+=Bt),bt&&!ye&&(le=le||new _,ye=!0),bt&&ye){var Jt=_e;ke(function(){le.emit("data",Jt)}),_e=""}}function G(bt,Bt){R(we,C(bt,$e,$e?1:0),Bt)}function Dt(){if(le){var bt=_e;ke(function(){le.emit("data",bt),le.emit("end"),le.readable=!1,le.emit("close")})}}return ke(function(){Ie=!1}),V.declaration&&(oe={version:"1.0",encoding:(Q=V.declaration).encoding||"UTF-8"},Q.standalone&&(oe.standalone=Q.standalone),G({"?xml":{_attr:oe}}),_e=_e.replace("/>","?>")),N&&N.forEach?N.forEach(function(bt,Bt){var Jt;Bt+1===N.length&&(Jt=Dt),G(bt,Jt)}):G(N,Dt),le?(le.readable=!0,le):_e},n.exports.element=n.exports.Element=function(){var N=Array.prototype.slice.call(arguments),V={_elem:C(N),push:function(Q){if(!this.append)throw new Error("not assigned to a parent!");var oe=this,le=this._elem.indent;R(this.append,C(Q,le,this._elem.icount+(le?1:0)),function(){oe.append(!0)})},close:function(Q){void 0!==Q&&this.push(Q),this.end&&this.end()}};return V}},5102:(n,s,t)=>{var o={"./all.js":5308,"./auth/actions.js":5812,"./auth/index.js":3705,"./auth/reducers.js":3962,"./auth/selectors.js":35,"./auth/spec-wrap-actions.js":8302,"./configs/actions.js":714,"./configs/helpers.js":2256,"./configs/index.js":1661,"./configs/reducers.js":7743,"./configs/selectors.js":9018,"./configs/spec-actions.js":2698,"./deep-linking/helpers.js":1970,"./deep-linking/index.js":4980,"./deep-linking/layout.js":5858,"./deep-linking/operation-tag-wrapper.jsx":4584,"./deep-linking/operation-wrapper.jsx":877,"./download-url.js":8011,"./err/actions.js":4966,"./err/error-transformers/hook.js":6808,"./err/error-transformers/transformers/not-of-type.js":2392,"./err/error-transformers/transformers/parameter-oneof.js":1835,"./err/index.js":7793,"./err/reducers.js":3527,"./err/selectors.js":7667,"./filter/index.js":9978,"./filter/opsFilter.js":4309,"./layout/actions.js":5474,"./layout/index.js":6821,"./layout/reducers.js":5672,"./layout/selectors.js":4400,"./layout/spec-extensions/wrap-selector.js":8989,"./logs/index.js":9150,"./oas3/actions.js":7002,"./oas3/auth-extensions/wrap-selectors.js":3723,"./oas3/components/callbacks.jsx":3427,"./oas3/components/http-auth.jsx":6775,"./oas3/components/index.js":6467,"./oas3/components/operation-link.jsx":5757,"./oas3/components/operation-servers.jsx":6796,"./oas3/components/request-body-editor.jsx":5327,"./oas3/components/request-body.jsx":2458,"./oas3/components/servers-container.jsx":9928,"./oas3/components/servers.jsx":6617,"./oas3/helpers.jsx":7779,"./oas3/index.js":7451,"./oas3/reducers.js":9666,"./oas3/selectors.js":5065,"./oas3/spec-extensions/selectors.js":1741,"./oas3/spec-extensions/wrap-selectors.js":2044,"./oas3/wrap-components/auth-item.jsx":356,"./oas3/wrap-components/index.js":7761,"./oas3/wrap-components/json-schema-string.jsx":287,"./oas3/wrap-components/markdown.jsx":2460,"./oas3/wrap-components/model.jsx":3499,"./oas3/wrap-components/online-validator-badge.js":58,"./oas3/wrap-components/version-stamp.jsx":9487,"./on-complete/index.js":8560,"./request-snippets/fn.js":4624,"./request-snippets/index.js":6575,"./request-snippets/request-snippets.jsx":4206,"./request-snippets/selectors.js":4669,"./safe-render/components/error-boundary.jsx":6195,"./safe-render/components/fallback.jsx":9403,"./safe-render/fn.jsx":6189,"./safe-render/index.js":8102,"./samples/fn.js":2473,"./samples/index.js":8883,"./spec/actions.js":1737,"./spec/index.js":7038,"./spec/reducers.js":32,"./spec/selectors.js":3881,"./spec/wrap-actions.js":7508,"./swagger-js/configs-wrap-actions.js":4852,"./swagger-js/index.js":2990,"./util/index.js":8525,"./view/fn.js":8347,"./view/index.js":3420,"./view/root-injects.jsx":5005,"core/plugins/all.js":5308,"core/plugins/auth/actions.js":5812,"core/plugins/auth/index.js":3705,"core/plugins/auth/reducers.js":3962,"core/plugins/auth/selectors.js":35,"core/plugins/auth/spec-wrap-actions.js":8302,"core/plugins/configs/actions.js":714,"core/plugins/configs/helpers.js":2256,"core/plugins/configs/index.js":1661,"core/plugins/configs/reducers.js":7743,"core/plugins/configs/selectors.js":9018,"core/plugins/configs/spec-actions.js":2698,"core/plugins/deep-linking/helpers.js":1970,"core/plugins/deep-linking/index.js":4980,"core/plugins/deep-linking/layout.js":5858,"core/plugins/deep-linking/operation-tag-wrapper.jsx":4584,"core/plugins/deep-linking/operation-wrapper.jsx":877,"core/plugins/download-url.js":8011,"core/plugins/err/actions.js":4966,"core/plugins/err/error-transformers/hook.js":6808,"core/plugins/err/error-transformers/transformers/not-of-type.js":2392,"core/plugins/err/error-transformers/transformers/parameter-oneof.js":1835,"core/plugins/err/index.js":7793,"core/plugins/err/reducers.js":3527,"core/plugins/err/selectors.js":7667,"core/plugins/filter/index.js":9978,"core/plugins/filter/opsFilter.js":4309,"core/plugins/layout/actions.js":5474,"core/plugins/layout/index.js":6821,"core/plugins/layout/reducers.js":5672,"core/plugins/layout/selectors.js":4400,"core/plugins/layout/spec-extensions/wrap-selector.js":8989,"core/plugins/logs/index.js":9150,"core/plugins/oas3/actions.js":7002,"core/plugins/oas3/auth-extensions/wrap-selectors.js":3723,"core/plugins/oas3/components/callbacks.jsx":3427,"core/plugins/oas3/components/http-auth.jsx":6775,"core/plugins/oas3/components/index.js":6467,"core/plugins/oas3/components/operation-link.jsx":5757,"core/plugins/oas3/components/operation-servers.jsx":6796,"core/plugins/oas3/components/request-body-editor.jsx":5327,"core/plugins/oas3/components/request-body.jsx":2458,"core/plugins/oas3/components/servers-container.jsx":9928,"core/plugins/oas3/components/servers.jsx":6617,"core/plugins/oas3/helpers.jsx":7779,"core/plugins/oas3/index.js":7451,"core/plugins/oas3/reducers.js":9666,"core/plugins/oas3/selectors.js":5065,"core/plugins/oas3/spec-extensions/selectors.js":1741,"core/plugins/oas3/spec-extensions/wrap-selectors.js":2044,"core/plugins/oas3/wrap-components/auth-item.jsx":356,"core/plugins/oas3/wrap-components/index.js":7761,"core/plugins/oas3/wrap-components/json-schema-string.jsx":287,"core/plugins/oas3/wrap-components/markdown.jsx":2460,"core/plugins/oas3/wrap-components/model.jsx":3499,"core/plugins/oas3/wrap-components/online-validator-badge.js":58,"core/plugins/oas3/wrap-components/version-stamp.jsx":9487,"core/plugins/on-complete/index.js":8560,"core/plugins/request-snippets/fn.js":4624,"core/plugins/request-snippets/index.js":6575,"core/plugins/request-snippets/request-snippets.jsx":4206,"core/plugins/request-snippets/selectors.js":4669,"core/plugins/safe-render/components/error-boundary.jsx":6195,"core/plugins/safe-render/components/fallback.jsx":9403,"core/plugins/safe-render/fn.jsx":6189,"core/plugins/safe-render/index.js":8102,"core/plugins/samples/fn.js":2473,"core/plugins/samples/index.js":8883,"core/plugins/spec/actions.js":1737,"core/plugins/spec/index.js":7038,"core/plugins/spec/reducers.js":32,"core/plugins/spec/selectors.js":3881,"core/plugins/spec/wrap-actions.js":7508,"core/plugins/swagger-js/configs-wrap-actions.js":4852,"core/plugins/swagger-js/index.js":2990,"core/plugins/util/index.js":8525,"core/plugins/view/fn.js":8347,"core/plugins/view/index.js":3420,"core/plugins/view/root-injects.jsx":5005};function l(C){var R=_(C);return t(R)}function _(C){if(!t.o(o,C)){var R=new Error("Cannot find module '"+C+"'");throw R.code="MODULE_NOT_FOUND",R}return o[C]}l.keys=function(){return Object.keys(o)},l.resolve=_,n.exports=l,l.id=5102},2517:n=>{n.exports="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwcHgiICBoZWlnaHQ9IjIwMHB4IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIGNsYXNzPSJsZHMtcm9sbGluZyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IGJhY2tncm91bmQtcG9zaXRpb246IGluaXRpYWwgaW5pdGlhbDsgYmFja2dyb3VuZC1yZXBlYXQ6IGluaXRpYWwgaW5pdGlhbDsiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIG5nLWF0dHItc3Ryb2tlPSJ7e2NvbmZpZy5jb2xvcn19IiBuZy1hdHRyLXN0cm9rZS13aWR0aD0ie3tjb25maWcud2lkdGh9fSIgbmctYXR0ci1yPSJ7e2NvbmZpZy5yYWRpdXN9fSIgbmctYXR0ci1zdHJva2UtZGFzaGFycmF5PSJ7e2NvbmZpZy5kYXNoYXJyYXl9fSIgc3Ryb2tlPSIjNTU1NTU1IiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgY2FsY01vZGU9ImxpbmVhciIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49IjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlVHJhbnNmb3JtPjwvY2lyY2xlPjwvc3ZnPgo="},5163:n=>{n.exports='---\nurl: "https://petstore.swagger.io/v2/swagger.json"\ndom_id: "#swagger-ui"\nvalidatorUrl: "https://validator.swagger.io/validator"\n'},8898:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>oL()}),l)},4163:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>aL()}),l)},5527:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>uL()}),l)},5171:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>dL()}),l)},2954:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>pL()}),l)},7930:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>_L()}),l)},6145:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>gL()}),l)},1778:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>yL()}),l)},29:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>bL()}),l)},2372:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>TL()}),l)},8818:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>ML()}),l)},5487:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>AL()}),l)},2565:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>xL()}),l)},6785:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>wL()}),l)},8136:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>NL()}),l)},9963:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>FL()}),l)},4350:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>kL()}),l)},3590:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>HL()}),l)},5942:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>UL()}),l)},313:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>jL()}),l)},6914:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>VL()}),l)},7512:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>zL()}),l)},2740:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>JL()}),l)},374:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>XL()}),l)},6235:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>qL()}),l)},3769:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>t7()}),l)},6340:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>p3}),l)},7344:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>n7}),l)},8656:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>r7}),l)},3248:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>i7}),l)},5416:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>s7}),l)},775:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>Bx}),l)},863:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>JA}),l)},9972:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>a7}),l)},1013:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>kc}),l)},302:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>Iw}),l)},9334:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>u7}),l)},2691:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>f7}),l)},1581:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>Uv}),l)},4780:n=>{n.exports=h7},8096:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>m7()}),l)},3294:n=>{n.exports=v7},9725:(n,s,t)=>{var l;n.exports=(t.d(l={},{List:()=>Je.List,Map:()=>Je.Map,OrderedMap:()=>Je.OrderedMap,Seq:()=>Je.Seq,Set:()=>Je.Set,default:()=>kt(),fromJS:()=>Je.fromJS}),l)},626:(n,s,t)=>{var l;n.exports=(t.d(l={},{JSON_SCHEMA:()=>ZR,default:()=>pA}),l)},9908:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>T0()}),l)},7068:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>E7()}),l)},5476:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>S7()}),l)},5053:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>C7()}),l)},810:(n,s,t)=>{var l;n.exports=(t.d(l={},{Component:()=>Ne.Component,PureComponent:()=>Ne.PureComponent,default:()=>Ne,useEffect:()=>Ne.useEffect,useRef:()=>Ne.useRef,useState:()=>Ne.useState}),l)},9874:(n,s,t)=>{var l;n.exports=(t.d(l={},{CopyToClipboard:()=>M7.CopyToClipboard}),l)},9569:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>A7()}),l)},9871:(n,s,t)=>{var l;n.exports=(t.d(l={},{applyMiddleware:()=>I7,bindActionCreators:()=>N7,compose:()=>S3,createStore:()=>E3}),l)},3952:(n,s,t)=>{var l;n.exports=(t.d(l={},{Remarkable:()=>qg}),l)},8639:(n,s,t)=>{var l;n.exports=(t.d(l={},{createSelector:()=>U3}),l)},8518:(n,s,t)=>{var l;n.exports=(t.d(l={},{serializeError:()=>Ck.serializeError}),l)},5013:(n,s,t)=>{var l;n.exports=(t.d(l={},{opId:()=>IA}),l)},8900:(n,s,t)=>{var l;n.exports=(t.d(l={},{default:()=>Ok()}),l)},2361:()=>{},4616:()=>{}},Y3={};function Po(n){var s=Y3[n];if(void 0!==s)return s.exports;var t=Y3[n]={exports:{}};return Zk[n](t,t.exports,Po),t.exports}Po.n=n=>{var s=n&&n.__esModule?()=>n.default:()=>n;return Po.d(s,{a:s}),s},Po.d=(n,s)=>{for(var t in s)Po.o(s,t)&&!Po.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:s[t]})},Po.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),Po.o=(n,s)=>Object.prototype.hasOwnProperty.call(n,s),Po.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})};var j3={};(()=>{Po.d(j3,{Z:()=>sH});var n={};Po.r(n),Po.d(n,{Button:()=>X3,Col:()=>_$,Collapse:()=>tP,Container:()=>h$,Input:()=>v$,Link:()=>q3,Row:()=>m$,Select:()=>K3,TextArea:()=>g$});var s={};Po.r(s),Po.d(s,{JsonSchemaArrayItemFile:()=>pD,JsonSchemaArrayItemText:()=>fD,JsonSchemaForm:()=>aP,JsonSchema_array:()=>uP,JsonSchema_boolean:()=>cP,JsonSchema_object:()=>dP,JsonSchema_string:()=>lP});var t=Po(1581),o=Po(5171);const l=(Po.d(un={},{default:()=>Dk()}),un);var un,_=Po(6145),C=Po(2740),R=Po(313),N=Po(7698),V=Po.n(N),Q=Po(775),oe=Po(7344),le=Po(8656),_e=Po(5527),ye=Po(7512),$e=Po(8136),Ie=Po(4163),ke=Po(6785),we=Po(2565),G=Po(810),Dt=Po(9871),bt=Po(9725);const Bt=(An=>{var un={};return Po.d(un,An),un})({combineReducers:()=>xk.U});var Jt=Po(8518);const Mn=(An=>{var un={};return Po.d(un,An),un})({default:()=>wk()});var zt=Po(4966),xn=Po(7504),Nn=Po(6298),zr=function(An){return An},Hr=function(){function An(){var un,gt=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,oe.default)(this,An),V()(this,{state:{},plugins:[],pluginsOptions:{},system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},gt),this.getSystem=(0,_e.default)(un=this._getSystem).call(un,this),this.store=Qn(zr,(0,bt.fromJS)(this.state),this.getSystem),this.buildSystem(!1),this.register(this.plugins)}return(0,le.default)(An,[{key:"getStore",value:function(){return this.store}},{key:"register",value:function(un){var gt=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],qe=Vr(un,this.getSystem(),this.pluginsOptions);On(this.system,qe),gt&&this.buildSystem();var tt=qr.call(this.system,un,this.getSystem());tt&&this.buildSystem()}},{key:"buildSystem",value:function(){var un=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],gt=this.getStore().dispatch,qe=this.getStore().getState;this.boundSystem=(0,ye.default)({},this.getRootInjects(),this.getWrappedAndBoundActions(gt),this.getWrappedAndBoundSelectors(qe,this.getSystem),this.getStateThunks(qe),this.getFn(),this.getConfigs()),un&&this.rebuildReducer()}},{key:"_getSystem",value:function(){return this.boundSystem}},{key:"getRootInjects",value:function(){var un,gt,qe;return(0,ye.default)({getSystem:this.getSystem,getStore:(0,_e.default)(un=this.getStore).call(un,this),getComponents:(0,_e.default)(gt=this.getComponents).call(gt,this),getState:this.getStore().getState,getConfigs:(0,_e.default)(qe=this._getConfigs).call(qe,this),Im:bt.default,React:G.default},this.system.rootInjects||{})}},{key:"_getConfigs",value:function(){return this.system.configs}},{key:"getConfigs",value:function(){return{configs:this.system.configs}}},{key:"setConfigs",value:function(un){this.system.configs=un}},{key:"rebuildReducer",value:function(){var un,gt,qe;this.store.replaceReducer((un=(0,Nn.Ay)(this.system.statePlugins,function(at){return at.reducers}),qe=(0,ke.default)(gt=(0,C.default)(un)).call(gt,function(at,Ft){return at[Ft]=(Lt=un[Ft],function(){var on=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new bt.Map,wn=arguments.length>1?arguments[1]:void 0;if(!Lt)return on;var tr=Lt[wn.type];if(tr){var Gn=Jn(tr)(on,wn);return null===Gn?on:Gn}return on}),at;var Lt},{}),(0,C.default)(qe).length?(0,Bt.combineReducers)(qe):zr))}},{key:"getType",value:function(un){var gt=un[0].toUpperCase()+(0,$e.default)(un).call(un,1);return(0,Nn.Q2)(this.system.statePlugins,function(qe,tt){var at=qe[un];if(at)return(0,Q.default)({},tt+gt,at)})}},{key:"getSelectors",value:function(){return this.getType("selectors")}},{key:"getActions",value:function(){var un=this.getType("actions");return(0,Nn.Ay)(un,function(gt){return(0,Nn.Q2)(gt,function(qe,tt){if((0,Nn.LQ)(qe))return(0,Q.default)({},tt,qe)})})}},{key:"getWrappedAndBoundActions",value:function(un){var gt=this,qe=this.getBoundActions(un);return(0,Nn.Ay)(qe,function(tt,at){var Ft=gt.system.statePlugins[(0,$e.default)(at).call(at,0,-7)].wrapActions;return Ft?(0,Nn.Ay)(tt,function(Lt,on){var wn=Ft[on];return wn?((0,Ie.default)(wn)||(wn=[wn]),(0,ke.default)(wn).call(wn,function(tr,Gn){var dr=function(){return Gn(tr,gt.getSystem()).apply(void 0,arguments)};if(!(0,Nn.LQ)(dr))throw new TypeError("wrapActions needs to return a function that returns a new function (ie the wrapped action)");return Jn(dr)},Lt||Function.prototype)):Lt}):tt})}},{key:"getWrappedAndBoundSelectors",value:function(un,gt){var qe=this,tt=this.getBoundSelectors(un,gt);return(0,Nn.Ay)(tt,function(at,Ft){var Lt=[(0,$e.default)(Ft).call(Ft,0,-9)],on=qe.system.statePlugins[Lt].wrapSelectors;return on?(0,Nn.Ay)(at,function(wn,tr){var Gn=on[tr];return Gn?((0,Ie.default)(Gn)||(Gn=[Gn]),(0,ke.default)(Gn).call(Gn,function(dr,Ti){var _i=function(){for(var Pi,Li=arguments.length,co=new Array(Li),qi=0;qi<Li;qi++)co[qi]=arguments[qi];return Ti(dr,qe.getSystem()).apply(void 0,(0,o.default)(Pi=[un().getIn(Lt)]).call(Pi,co))};if(!(0,Nn.LQ)(_i))throw new TypeError("wrapSelector needs to return a function that returns a new function (ie the wrapped action)");return _i},wn||Function.prototype)):wn}):at})}},{key:"getStates",value:function(un){var gt;return(0,ke.default)(gt=(0,C.default)(this.system.statePlugins)).call(gt,function(qe,tt){return qe[tt]=un.get(tt),qe},{})}},{key:"getStateThunks",value:function(un){var gt;return(0,ke.default)(gt=(0,C.default)(this.system.statePlugins)).call(gt,function(qe,tt){return qe[tt]=function(){return un().get(tt)},qe},{})}},{key:"getFn",value:function(){return{fn:this.system.fn}}},{key:"getComponents",value:function(un){var gt=this,qe=this.system.components[un];return(0,Ie.default)(qe)?(0,ke.default)(qe).call(qe,function(tt,at){return at(tt,gt.getSystem())}):void 0!==un?this.system.components[un]:this.system.components}},{key:"getBoundSelectors",value:function(un,gt){return(0,Nn.Ay)(this.getSelectors(),function(qe,tt){var at=[(0,$e.default)(tt).call(tt,0,-9)],Ft=function(){return un().getIn(at)};return(0,Nn.Ay)(qe,function(Lt){return function(){for(var on,wn=arguments.length,tr=new Array(wn),Gn=0;Gn<wn;Gn++)tr[Gn]=arguments[Gn];var dr=Jn(Lt).apply(null,(0,o.default)(on=[Ft()]).call(on,tr));return"function"==typeof dr&&(dr=Jn(dr)(gt())),dr}})})}},{key:"getBoundActions",value:function(un){un=un||this.getStore().dispatch;var gt=this.getActions(),qe=function tt(at){return"function"!=typeof at?(0,Nn.Ay)(at,function(Ft){return tt(Ft)}):function(){var Ft=null;try{Ft=at.apply(void 0,arguments)}catch(Lt){Ft={type:zt.NEW_THROWN_ERR,error:!0,payload:(0,Jt.serializeError)(Lt)}}finally{return Ft}}};return(0,Nn.Ay)(gt,function(tt){return(0,Dt.bindActionCreators)(qe(tt),un)})}},{key:"getMapStateToProps",value:function(){var un=this;return function(){return(0,ye.default)({},un.getSystem())}}},{key:"getMapDispatchToProps",value:function(un){var gt=this;return function(qe){return V()({},gt.getWrappedAndBoundActions(qe),gt.getFn(),un)}}}]),An}();function Vr(An,un,gt){if((0,Nn.Kn)(An)&&!(0,Nn.kJ)(An))return(0,Mn.default)({},An);if((0,Nn.Wl)(An))return Vr(An(un),un,gt);if((0,Nn.kJ)(An)){var qe,tt="chain"===gt.pluginLoadType?un.getComponents():{};return(0,ke.default)(qe=(0,we.default)(An).call(An,function(at){return Vr(at,un,gt)})).call(qe,On,tt)}return{}}function qr(An,un){var gt=this,qe=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},tt=qe.hasLoaded,at=tt;return(0,Nn.Kn)(An)&&!(0,Nn.kJ)(An)&&"function"==typeof An.afterLoad&&(at=!0,Jn(An.afterLoad).call(this,un)),(0,Nn.Wl)(An)?qr.call(this,An(un),un,{hasLoaded:at}):(0,Nn.kJ)(An)?(0,we.default)(An).call(An,function(Ft){return qr.call(gt,Ft,un,{hasLoaded:at})}):at}function On(){var An=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},un=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,Nn.Kn)(An))return{};if(!(0,Nn.Kn)(un))return An;un.wrapComponents&&((0,Nn.Ay)(un.wrapComponents,function(Ti,_i){var Pi=An.components&&An.components[_i];Pi&&(0,Ie.default)(Pi)?(An.components[_i]=(0,o.default)(Pi).call(Pi,[Ti]),delete un.wrapComponents[_i]):Pi&&(An.components[_i]=[Pi,Ti],delete un.wrapComponents[_i])}),(0,C.default)(un.wrapComponents).length||delete un.wrapComponents);var gt=An.statePlugins;if((0,Nn.Kn)(gt))for(var qe in gt){var tt=gt[qe];if((0,Nn.Kn)(tt)){var at=tt.wrapActions,Ft=tt.wrapSelectors;if((0,Nn.Kn)(at))for(var Lt in at){var on,wn=at[Lt];(0,Ie.default)(wn)||(at[Lt]=wn=[wn]),un&&un.statePlugins&&un.statePlugins[qe]&&un.statePlugins[qe].wrapActions&&un.statePlugins[qe].wrapActions[Lt]&&(un.statePlugins[qe].wrapActions[Lt]=(0,o.default)(on=at[Lt]).call(on,un.statePlugins[qe].wrapActions[Lt]))}if((0,Nn.Kn)(Ft))for(var tr in Ft){var Gn,dr=Ft[tr];(0,Ie.default)(dr)||(Ft[tr]=dr=[dr]),un&&un.statePlugins&&un.statePlugins[qe]&&un.statePlugins[qe].wrapSelectors&&un.statePlugins[qe].wrapSelectors[tr]&&(un.statePlugins[qe].wrapSelectors[tr]=(0,o.default)(Gn=Ft[tr]).call(Gn,un.statePlugins[qe].wrapSelectors[tr]))}}}return V()(An,un)}function Jn(An){var un=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},gt=un.logErrors,qe=void 0===gt||gt;return"function"!=typeof An?An:function(){try{for(var tt,at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return An.call.apply(An,(0,o.default)(tt=[this]).call(tt,Ft))}catch(on){return qe&&console.error(on),null}}}function Qn(An,un,gt){var tt,at,Lt;return tt=An,at=un,Lt=[(0,Nn._5)(gt)],(0,Dt.createStore)(tt,at,(xn.Z.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||Dt.compose)(Dt.applyMiddleware.apply(void 0,Lt)))}var ur=Po(7793),In=Po(6821),Yr=Po(7038),Qi=Po(3420),Di=Po(8883),ji=Po(6575),Wr=Po(9150),Bn=Po(2990),bn=Po(3705),Xr=Po(8525),Ni=Po(8011),Xi=Po(1661),Bo=Po(4980),Ao=Po(9978),zs=Po(8560),Qs=Po(8102),Ii=Po(6340),uo=Po(9972),bo=Po(5416),Qe=Po(8818),Pt=(Po(5053),Po(9569),Po(5013)),Rt=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"toggleShown",function(){var Lt=at.props,on=Lt.layoutActions,wn=Lt.tag,tr=Lt.operationId,Gn=Lt.isShown,dr=at.getResolvedSubtree();Gn||void 0!==dr||at.requestResolvedSubtree(),on.show(["operations",wn,tr],!Gn)}),(0,Q.default)((0,Ii.default)(at),"onCancelClick",function(){at.setState({tryItOutEnabled:!at.state.tryItOutEnabled})}),(0,Q.default)((0,Ii.default)(at),"onTryoutClick",function(){at.setState({tryItOutEnabled:!at.state.tryItOutEnabled})}),(0,Q.default)((0,Ii.default)(at),"onExecute",function(){at.setState({executeInProgress:!0})}),(0,Q.default)((0,Ii.default)(at),"getResolvedSubtree",function(){var Lt=at.props,wn=Lt.path,tr=Lt.method,Gn=Lt.specPath;return Lt.specSelectors.specResolvedSubtree(Gn?Gn.toJS():["paths",wn,tr])}),(0,Q.default)((0,Ii.default)(at),"requestResolvedSubtree",function(){var Lt=at.props,wn=Lt.path,tr=Lt.method,Gn=Lt.specPath;return Lt.specActions.requestResolvedSubtree(Gn?Gn.toJS():["paths",wn,tr])});var Ft=qe.getConfigs().tryItOutEnabled;return at.state={tryItOutEnabled:!0===Ft||"true"===Ft,executeInProgress:!1},at}return(0,le.default)(gt,[{key:"mapStateToProps",value:function(qe,tt){var at,Ft=tt.op,Lt=tt.layoutSelectors,on=(0,tt.getConfigs)(),wn=on.docExpansion,tr=on.deepLinking,Gn=on.displayOperationId,dr=on.displayRequestDuration,Ti=on.supportedSubmitMethods,_i=Lt.showSummary(),Pi=Ft.getIn(["operation","__originalOperationId"])||Ft.getIn(["operation","operationId"])||(0,Pt.opId)(Ft.get("operation"),tt.path,tt.method)||Ft.get("id"),Li=["operations",tt.tag,Pi],co=tr&&"false"!==tr,qi=(0,Qe.default)(Ti).call(Ti,tt.method)>=0&&(void 0===tt.allowTryItOut?tt.specSelectors.allowTryItOutFor(tt.path,tt.method):tt.allowTryItOut),to=Ft.getIn(["operation","security"])||tt.specSelectors.security();return{operationId:Pi,isDeepLinkingEnabled:co,showSummary:_i,displayOperationId:Gn,displayRequestDuration:dr,allowTryItOut:qi,security:to,isAuthorized:tt.authSelectors.isAuthorized(to),isShown:Lt.isShown(Li,"full"===wn),jumpToKey:(0,o.default)(at="paths.".concat(tt.path,".")).call(at,tt.method),response:tt.specSelectors.responseFor(tt.path,tt.method),request:tt.specSelectors.requestFor(tt.path,tt.method)}}},{key:"componentDidMount",value:function(){var qe=this.props.isShown,tt=this.getResolvedSubtree();qe&&void 0===tt&&this.requestResolvedSubtree()}},{key:"UNSAFE_componentWillReceiveProps",value:function(qe){var tt=qe.response,at=qe.isShown,Ft=this.getResolvedSubtree();tt!==this.props.response&&this.setState({executeInProgress:!1}),at&&void 0===Ft&&this.requestResolvedSubtree()}},{key:"render",value:function(){var qe=this.props,tt=qe.op,at=qe.tag,Ft=qe.path,Lt=qe.method,on=qe.security,wn=qe.isAuthorized,tr=qe.operationId,Gn=qe.showSummary,dr=qe.isShown,Ti=qe.jumpToKey,_i=qe.allowTryItOut,Pi=qe.response,Li=qe.request,co=qe.displayOperationId,qi=qe.displayRequestDuration,to=qe.isDeepLinkingEnabled,Cs=qe.specPath,Ls=qe.specSelectors,ta=qe.specActions,xs=qe.getComponent,Rs=qe.getConfigs,ks=qe.layoutSelectors,Ms=qe.layoutActions,Ua=qe.authActions,Js=qe.authSelectors,Sa=qe.oas3Actions,rs=qe.oas3Selectors,na=qe.fn,vl=xs("operation"),qc=this.getResolvedSubtree()||(0,bt.Map)(),pf=(0,bt.fromJS)({op:qc,tag:at,path:Ft,summary:tt.getIn(["operation","summary"])||"",deprecated:qc.get("deprecated")||tt.getIn(["operation","deprecated"])||!1,method:Lt,security:on,isAuthorized:wn,operationId:tr,originalOperationId:qc.getIn(["operation","__originalOperationId"]),showSummary:Gn,isShown:dr,jumpToKey:Ti,allowTryItOut:_i,request:Li,displayOperationId:co,displayRequestDuration:qi,isDeepLinkingEnabled:to,executeInProgress:this.state.executeInProgress,tryItOutEnabled:this.state.tryItOutEnabled});return G.default.createElement(vl,{operation:pf,response:Pi,request:Li,isShown:dr,toggleShown:this.toggleShown,onTryoutClick:this.onTryoutClick,onCancelClick:this.onCancelClick,onExecute:this.onExecute,specPath:Cs,specActions:ta,specSelectors:Ls,oas3Actions:Sa,oas3Selectors:rs,layoutActions:Ms,layoutSelectors:ks,authActions:Ua,authSelectors:Js,getComponent:xs,getConfigs:Rs,fn:na})}}]),gt}(G.PureComponent);(0,Q.default)(Rt,"defaultProps",{showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1,displayRequestDuration:!1});var qn=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"getLayout",value:function(){var qe=this.props,tt=qe.getComponent,at=qe.layoutSelectors.current();return tt(at,!0)||function(){return G.default.createElement("h1",null,' No layout defined for "',at,'" ')}}},{key:"render",value:function(){var qe=this.getLayout();return G.default.createElement(qe,null)}}]),gt}(G.default.Component);qn.defaultProps={};var wr=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"close",function(){tt.props.authActions.showDefinitions(!1)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this.props,at=tt.authSelectors,Ft=tt.authActions,Lt=tt.getComponent,on=tt.errSelectors,wn=tt.specSelectors,tr=tt.fn.AST,Gn=void 0===tr?{}:tr,dr=at.shownDefinitions(),Ti=Lt("auths");return G.default.createElement("div",{className:"dialog-ux"},G.default.createElement("div",{className:"backdrop-ux"}),G.default.createElement("div",{className:"modal-ux"},G.default.createElement("div",{className:"modal-dialog-ux"},G.default.createElement("div",{className:"modal-ux-inner"},G.default.createElement("div",{className:"modal-ux-header"},G.default.createElement("h3",null,"Available authorizations"),G.default.createElement("button",{type:"button",className:"close-modal",onClick:this.close},G.default.createElement("svg",{width:"20",height:"20"},G.default.createElement("use",{href:"#close",xlinkHref:"#close"})))),G.default.createElement("div",{className:"modal-ux-content"},(0,we.default)(qe=dr.valueSeq()).call(qe,function(_i,Pi){return G.default.createElement(Ti,{key:Pi,AST:Gn,definitions:_i,getComponent:Lt,errSelectors:on,authSelectors:at,authActions:Ft,specSelectors:wn})}))))))}}]),gt}(G.default.Component),Gr=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.isAuthorized,at=qe.showPopup,Ft=qe.onClick,Lt=(0,qe.getComponent)("authorizationPopup",!0);return G.default.createElement("div",{className:"auth-wrapper"},G.default.createElement("button",{className:tt?"btn authorize locked":"btn authorize unlocked",onClick:Ft},G.default.createElement("span",null,"Authorize"),G.default.createElement("svg",{width:"20",height:"20"},G.default.createElement("use",{href:tt?"#locked":"#unlocked",xlinkHref:tt?"#locked":"#unlocked"}))),at&&G.default.createElement(Lt,null))}}]),gt}(G.default.Component),Fi=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.authActions,at=qe.authSelectors,Lt=qe.getComponent,on=qe.specSelectors.securityDefinitions(),wn=at.definitionsToAuthorize(),tr=Lt("authorizeBtn");return on?G.default.createElement(tr,{onClick:function(){return tt.showDefinitions(wn)},isAuthorized:!!at.authorized().size,showPopup:!!at.shownDefinitions(),getComponent:Lt}):null}}]),gt}(G.default.Component),Ws=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onClick",function(on){on.stopPropagation();var wn=tt.props.onClick;wn&&wn()}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props.isAuthorized;return G.default.createElement("button",{className:qe?"authorization__btn locked":"authorization__btn unlocked","aria-label":qe?"authorization button locked":"authorization button unlocked",onClick:this.onClick},G.default.createElement("svg",{width:"20",height:"20"},G.default.createElement("use",{href:qe?"#locked":"#unlocked",xlinkHref:qe?"#locked":"#unlocked"})))}}]),gt}(G.default.Component),Zo=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;return(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"onAuthChange",function(Ft){at.setState((0,Q.default)({},Ft.name,Ft))}),(0,Q.default)((0,Ii.default)(at),"submitAuth",function(Ft){Ft.preventDefault(),at.props.authActions.authorizeWithPersistOption(at.state)}),(0,Q.default)((0,Ii.default)(at),"logoutClick",function(Ft){Ft.preventDefault();var Lt=at.props,on=Lt.authActions,wn=Lt.definitions,tr=(0,we.default)(wn).call(wn,function(Gn,dr){return dr}).toArray();at.setState((0,ke.default)(tr).call(tr,function(Gn,dr){return Gn[dr]="",Gn},{})),on.logoutWithPersistOption(tr)}),(0,Q.default)((0,Ii.default)(at),"close",function(Ft){Ft.preventDefault(),at.props.authActions.showDefinitions(!1)}),at.state={},at}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this,at=this.props,Ft=at.definitions,Lt=at.getComponent,on=at.authSelectors,wn=at.errSelectors,tr=Lt("AuthItem"),Gn=Lt("oauth2",!0),dr=Lt("Button"),Ti=on.authorized(),_i=(0,_.default)(Ft).call(Ft,function(co,qi){return!!Ti.get(qi)}),Pi=(0,_.default)(Ft).call(Ft,function(co){return"oauth2"!==co.get("type")}),Li=(0,_.default)(Ft).call(Ft,function(co){return"oauth2"===co.get("type")});return G.default.createElement("div",{className:"auth-container"},!!Pi.size&&G.default.createElement("form",{onSubmit:this.submitAuth},(0,we.default)(Pi).call(Pi,function(co,qi){return G.default.createElement(tr,{key:qi,schema:co,name:qi,getComponent:Lt,onAuthChange:tt.onAuthChange,authorized:Ti,errSelectors:wn})}).toArray(),G.default.createElement("div",{className:"auth-btn-wrapper"},Pi.size===_i.size?G.default.createElement(dr,{className:"btn modal-btn auth",onClick:this.logoutClick},"Logout"):G.default.createElement(dr,{type:"submit",className:"btn modal-btn auth authorize"},"Authorize"),G.default.createElement(dr,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close"))),Li&&Li.size?G.default.createElement("div",null,G.default.createElement("div",{className:"scope-def"},G.default.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),G.default.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),(0,we.default)(qe=(0,_.default)(Ft).call(Ft,function(co){return"oauth2"===co.get("type")})).call(qe,function(co,qi){return G.default.createElement("div",{key:qi},G.default.createElement(Gn,{authorized:Ti,schema:co,name:qi}))}).toArray()):null)}}]),gt}(G.default.Component),ol=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this.props,at=tt.schema,Ft=tt.name,Lt=tt.getComponent,on=tt.onAuthChange,wn=tt.authorized,tr=tt.errSelectors,Gn=Lt("apiKeyAuth"),dr=Lt("basicAuth"),Ti=at.get("type");switch(Ti){case"apiKey":qe=G.default.createElement(Gn,{key:Ft,schema:at,name:Ft,errSelectors:tr,authorized:wn,getComponent:Lt,onChange:on});break;case"basic":qe=G.default.createElement(dr,{key:Ft,schema:at,name:Ft,errSelectors:tr,authorized:wn,getComponent:Lt,onChange:on});break;default:qe=G.default.createElement("div",{key:Ft},"Unknown security definition type ",Ti)}return G.default.createElement("div",{key:"".concat(Ft,"-jump")},qe)}}]),gt}(G.default.Component),gl=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props.error,tt=qe.get("level"),at=qe.get("message"),Ft=qe.get("source");return G.default.createElement("div",{className:"errors"},G.default.createElement("b",null,Ft," ",tt),G.default.createElement("span",null,at))}}]),gt}(G.default.Component),Zl=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"onChange",function(tr){var Gn=at.props.onChange,Ti=(0,ye.default)({},at.state,{value:tr.target.value});at.setState(Ti),Gn(Ti)});var Ft=at.props,Lt=Ft.name,on=Ft.schema,wn=at.getValue();return at.state={name:Lt,schema:on,value:wn},at}return(0,le.default)(gt,[{key:"getValue",value:function(){var qe=this.props,at=qe.authorized;return at&&at.getIn([qe.name,"value"])}},{key:"render",value:function(){var qe,tt,at=this.props,Ft=at.schema,Lt=at.getComponent,on=at.errSelectors,wn=at.name,tr=Lt("Input"),Gn=Lt("Row"),dr=Lt("Col"),Ti=Lt("authError"),_i=Lt("Markdown",!0),Pi=Lt("JumpToPath",!0),Li=this.getValue(),co=(0,_.default)(qe=on.allErrors()).call(qe,function(qi){return qi.get("authId")===wn});return G.default.createElement("div",null,G.default.createElement("h4",null,G.default.createElement("code",null,wn||Ft.get("name")),"\xa0(apiKey)",G.default.createElement(Pi,{path:["securityDefinitions",wn]})),Li&&G.default.createElement("h6",null,"Authorized"),G.default.createElement(Gn,null,G.default.createElement(_i,{source:Ft.get("description")})),G.default.createElement(Gn,null,G.default.createElement("p",null,"Name: ",G.default.createElement("code",null,Ft.get("name")))),G.default.createElement(Gn,null,G.default.createElement("p",null,"In: ",G.default.createElement("code",null,Ft.get("in")))),G.default.createElement(Gn,null,G.default.createElement("label",null,"Value:"),Li?G.default.createElement("code",null," ****** "):G.default.createElement(dr,null,G.default.createElement(tr,{type:"text",onChange:this.onChange,autoFocus:!0}))),(0,we.default)(tt=co.valueSeq()).call(tt,function(qi,to){return G.default.createElement(Ti,{error:qi,key:to})}))}}]),gt}(G.default.Component),Ju=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"onChange",function(tr){var Gn=at.props.onChange,dr=tr.target,Pi=at.state.value;Pi[dr.name]=dr.value,at.setState({value:Pi}),Gn(at.state)});var Ft=at.props,Lt=Ft.schema,on=Ft.name,wn=at.getValue().username;return at.state={name:on,schema:Lt,value:wn?{username:wn}:{}},at}return(0,le.default)(gt,[{key:"getValue",value:function(){var qe=this.props,tt=qe.authorized;return tt&&tt.getIn([qe.name,"value"])||{}}},{key:"render",value:function(){var qe,tt,at=this.props,Ft=at.schema,Lt=at.getComponent,on=at.name,wn=at.errSelectors,tr=Lt("Input"),Gn=Lt("Row"),dr=Lt("Col"),Ti=Lt("authError"),_i=Lt("JumpToPath",!0),Pi=Lt("Markdown",!0),Li=this.getValue().username,co=(0,_.default)(qe=wn.allErrors()).call(qe,function(qi){return qi.get("authId")===on});return G.default.createElement("div",null,G.default.createElement("h4",null,"Basic authorization",G.default.createElement(_i,{path:["securityDefinitions",on]})),Li&&G.default.createElement("h6",null,"Authorized"),G.default.createElement(Gn,null,G.default.createElement(Pi,{source:Ft.get("description")})),G.default.createElement(Gn,null,G.default.createElement("label",null,"Username:"),Li?G.default.createElement("code",null," ",Li," "):G.default.createElement(dr,null,G.default.createElement(tr,{type:"text",required:"required",name:"username",onChange:this.onChange,autoFocus:!0}))),G.default.createElement(Gn,null,G.default.createElement("label",null,"Password:"),Li?G.default.createElement("code",null," ****** "):G.default.createElement(dr,null,G.default.createElement(tr,{autoComplete:"new-password",name:"password",type:"password",onChange:this.onChange}))),(0,we.default)(tt=co.valueSeq()).call(tt,function(qi,to){return G.default.createElement(Ti,{error:qi,key:to})}))}}]),gt}(G.default.Component);function Gf(An){var un=An.example,gt=An.showValue,qe=An.getComponent,tt=An.getConfigs,at=qe("Markdown",!0),Ft=qe("highlightCode");return un?G.default.createElement("div",{className:"example"},un.get("description")?G.default.createElement("section",{className:"example__section"},G.default.createElement("div",{className:"example__section-header"},"Example Description"),G.default.createElement("p",null,G.default.createElement(at,{source:un.get("description")}))):null,gt&&un.has("value")?G.default.createElement("section",{className:"example__section"},G.default.createElement("div",{className:"example__section-header"},"Example Value"),G.default.createElement(Ft,{getConfigs:tt,value:(0,Nn.Pz)(un.get("value"))})):null):null}var wl=Po(6914),Zc=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"_onSelect",function(on){var wn=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},tr=wn.isSyntheticChange,Gn=void 0!==tr&&tr;"function"==typeof tt.props.onSelect&&tt.props.onSelect(on,{isSyntheticChange:Gn})}),(0,Q.default)((0,Ii.default)(tt),"_onDomSelect",function(on){if("function"==typeof tt.props.onSelect){var wn=on.target.selectedOptions[0].getAttribute("value");tt._onSelect(wn,{isSyntheticChange:!1})}}),(0,Q.default)((0,Ii.default)(tt),"getCurrentExample",function(){var on=tt.props,wn=on.examples,Gn=wn.get(on.currentExampleKey),dr=wn.keySeq().first(),Ti=wn.get(dr);return Gn||Ti||(0,wl.default)({})}),tt}return(0,le.default)(gt,[{key:"componentDidMount",value:function(){var qe=this.props,at=qe.examples;if("function"==typeof qe.onSelect){var Ft=at.first(),Lt=at.keyOf(Ft);this._onSelect(Lt,{isSyntheticChange:!0})}}},{key:"UNSAFE_componentWillReceiveProps",value:function(qe){var at=qe.examples;if(at!==this.props.examples&&!at.has(qe.currentExampleKey)){var Ft=at.first(),Lt=at.keyOf(Ft);this._onSelect(Lt,{isSyntheticChange:!0})}}},{key:"render",value:function(){var qe=this.props,tt=qe.examples,at=qe.currentExampleKey,Ft=qe.isValueModified,Lt=qe.isModifiedValueAvailable;return G.default.createElement("div",{className:"examples-select"},qe.showLabels?G.default.createElement("span",{className:"examples-select__section-label"},"Examples: "):null,G.default.createElement("select",{className:"examples-select-element",onChange:this._onDomSelect,value:Lt&&Ft?"__MODIFIED__VALUE__":at||""},Lt?G.default.createElement("option",{value:"__MODIFIED__VALUE__"},"[Modified value]"):null,(0,we.default)(tt).call(tt,function(wn,tr){return G.default.createElement("option",{key:tr,value:tr},wn.get("summary")||tr)}).valueSeq()))}}]),gt}(G.default.PureComponent);(0,Q.default)(Zc,"defaultProps",{examples:bt.default.Map({}),onSelect:function(){for(var An,un,gt=arguments.length,qe=new Array(gt),tt=0;tt<gt;tt++)qe[tt]=arguments[tt];return(An=console).log.apply(An,(0,o.default)(un=["DEBUG: ExamplesSelect was not given an onSelect callback"]).call(un,qe))},currentExampleKey:null,showLabels:!0});var gp=function(An){return bt.List.isList(An)?An:(0,Nn.Pz)(An)},Fh=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe){var tt;(0,oe.default)(this,gt),tt=un.call(this,qe),(0,Q.default)((0,Ii.default)(tt),"_getStateForCurrentNamespace",function(){return(tt.state[tt.props.currentNamespace]||(0,bt.Map)()).toObject()}),(0,Q.default)((0,Ii.default)(tt),"_setStateForCurrentNamespace",function(Ft){return tt._setStateForNamespace(tt.props.currentNamespace,Ft)}),(0,Q.default)((0,Ii.default)(tt),"_setStateForNamespace",function(Ft,Lt){var on=(tt.state[Ft]||(0,bt.Map)()).mergeDeep(Lt);return tt.setState((0,Q.default)({},Ft,on))}),(0,Q.default)((0,Ii.default)(tt),"_isCurrentUserInputSameAsExampleValue",function(){var Ft=tt.props.currentUserInputValue;return tt._getCurrentExampleValue()===Ft}),(0,Q.default)((0,Ii.default)(tt),"_getValueForExample",function(Ft,Lt){return gp(((Lt||tt.props).examples||(0,bt.Map)({})).getIn([Ft,"value"]))}),(0,Q.default)((0,Ii.default)(tt),"_getCurrentExampleValue",function(Ft){return tt._getValueForExample((Ft||tt.props).currentKey,Ft||tt.props)}),(0,Q.default)((0,Ii.default)(tt),"_onExamplesSelect",function(Ft){var Lt=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},on=Lt.isSyntheticChange,wn=tt.props,tr=wn.onSelect,Gn=wn.updateValue,dr=wn.currentUserInputValue,Ti=wn.userHasEditedBody,_i=tt._getStateForCurrentNamespace(),Pi=_i.lastUserEditedValue,Li=tt._getValueForExample(Ft);if("__MODIFIED__VALUE__"===Ft)return Gn(gp(Pi)),tt._setStateForCurrentNamespace({isModifiedValueSelected:!0});if("function"==typeof tr){for(var co,qi=arguments.length,to=new Array(qi>2?qi-2:0),Cs=2;Cs<qi;Cs++)to[Cs-2]=arguments[Cs];tr.apply(void 0,(0,o.default)(co=[Ft,{isSyntheticChange:on}]).call(co,to))}tt._setStateForCurrentNamespace({lastDownstreamValue:Li,isModifiedValueSelected:on&&Ti||!!dr&&dr!==Li}),on||"function"==typeof Gn&&Gn(gp(Li))});var at=tt._getCurrentExampleValue();return tt.state=(0,Q.default)({},qe.currentNamespace,(0,bt.Map)({lastUserEditedValue:tt.props.currentUserInputValue,lastDownstreamValue:at,isModifiedValueSelected:tt.props.userHasEditedBody||tt.props.currentUserInputValue!==at})),tt}return(0,le.default)(gt,[{key:"componentWillUnmount",value:function(){this.props.setRetainRequestBodyValueFlag(!1)}},{key:"UNSAFE_componentWillReceiveProps",value:function(qe){var tt=qe.currentUserInputValue,at=qe.examples,Ft=qe.onSelect,Lt=qe.userHasEditedBody,on=this._getStateForCurrentNamespace(),wn=on.lastUserEditedValue,tr=on.lastDownstreamValue,Gn=this._getValueForExample(qe.currentKey,qe),dr=(0,_.default)(at).call(at,function(Ti){return Ti.get("value")===tt||(0,Nn.Pz)(Ti.get("value"))===tt});dr.size?Ft(dr.has(qe.currentKey)?qe.currentKey:dr.keySeq().first(),{isSyntheticChange:!0}):tt!==this.props.currentUserInputValue&&tt!==wn&&tt!==tr&&(this.props.setRetainRequestBodyValueFlag(!0),this._setStateForNamespace(qe.currentNamespace,{lastUserEditedValue:qe.currentUserInputValue,isModifiedValueSelected:Lt||tt!==Gn}))}},{key:"render",value:function(){var qe=this.props,tt=qe.currentUserInputValue,at=qe.examples,Ft=qe.currentKey,Lt=qe.getComponent,on=qe.userHasEditedBody,wn=this._getStateForCurrentNamespace(),tr=wn.lastDownstreamValue,Gn=wn.lastUserEditedValue,dr=wn.isModifiedValueSelected,Ti=Lt("ExamplesSelect");return G.default.createElement(Ti,{examples:at,currentExampleKey:Ft,onSelect:this._onExamplesSelect,isModifiedValueAvailable:!!Gn&&Gn!==tr,isValueModified:void 0!==tt&&dr&&tt!==this._getCurrentExampleValue()||on})}}]),gt}(G.default.PureComponent);(0,Q.default)(Fh,"defaultProps",{userHasEditedBody:!1,examples:(0,bt.Map)({}),currentNamespace:"__DEFAULT__NAMESPACE__",setRetainRequestBodyValueFlag:function(){},onSelect:function(){for(var An,un,gt=arguments.length,qe=new Array(gt),tt=0;tt<gt;tt++)qe[tt]=arguments[tt];return(An=console).log.apply(An,(0,o.default)(un=["ExamplesSelectValueRetainer: no `onSelect` function was provided"]).call(un,qe))},updateValue:function(){for(var An,un,gt=arguments.length,qe=new Array(gt),tt=0;tt<gt;tt++)qe[tt]=arguments[tt];return(An=console).log.apply(An,(0,o.default)(un=["ExamplesSelectValueRetainer: no `updateValue` function was provided"]).call(un,qe))}});var oh=Po(8898),Lh=Po(5487),zl=Po(2372),$c=Po(8900),Fp=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"close",function(qi){qi.preventDefault(),at.props.authActions.showDefinitions(!1)}),(0,Q.default)((0,Ii.default)(at),"authorize",function(){var qi=at.props,to=qi.authActions,Cs=qi.errActions,ta=qi.authSelectors,xs=qi.oas3Selectors,Rs=(0,qi.getConfigs)(),ks=ta.getConfigs();Cs.clear({authId:name,type:"auth",source:"auth"}),function(Ms){var Ua=Ms.auth,Js=Ms.authActions,Sa=Ms.errActions,rs=Ms.configs,na=Ms.authConfigs,vl=void 0===na?{}:na,qc=Ms.currentServer,pf=Ua.schema,hf=Ua.scopes,Vf=Ua.name,Wl=Ua.clientId,ed=pf.get("flow"),lc=[];switch(ed){case"password":return void Js.authorizePassword(Ua);case"application":case"clientCredentials":case"client_credentials":return void Js.authorizeApplication(Ua);case"accessCode":case"authorizationCode":case"authorization_code":lc.push("response_type=code");break;case"implicit":lc.push("response_type=token")}"string"==typeof Wl&&lc.push("client_id="+encodeURIComponent(Wl));var vp=rs.oauth2RedirectUrl;if(void 0!==vp){lc.push("redirect_uri="+encodeURIComponent(vp));var sp=[];(0,Ie.default)(hf)?sp=hf:bt.default.List.isList(hf)&&(sp=hf.toArray()),sp.length>0&&lc.push("scope="+encodeURIComponent(sp.join(vl.scopeSeparator||" ")));var Gd=(0,Nn.r3)(new Date);if(lc.push("state="+encodeURIComponent(Gd)),void 0!==vl.realm&&lc.push("realm="+encodeURIComponent(vl.realm)),("authorizationCode"===ed||"authorization_code"===ed||"accessCode"===ed)&&vl.usePkceWithAuthorizationCodeGrant){var uc=(0,Nn.Uj)(),Vd=(0,Nn.Xb)(uc);lc.push("code_challenge="+Vd),lc.push("code_challenge_method=S256"),Ua.codeVerifier=uc}var _f=vl.additionalQueryStringParams;for(var mf in _f){var $h;void 0!==_f[mf]&&lc.push((0,we.default)($h=[mf,_f[mf]]).call($h,encodeURIComponent).join("="))}var Fd=pf.get("authorizationUrl"),Df=[qc?(0,$c.default)((0,Nn.Nm)(Fd),qc,!0).toString():(0,Nn.Nm)(Fd),lc.join("&")].join(-1===(0,Qe.default)(Fd).call(Fd,"?")?"?":"&");Js.authPopup(Df,{auth:Ua,state:Gd,redirectUrl:vp,callback:"implicit"===ed?Js.preAuthorizeImplicit:vl.useBasicAuthenticationWithAccessCodeGrant?Js.authorizeAccessCodeWithBasicAuthentication:Js.authorizeAccessCodeWithFormParams,errCb:Sa.newAuthErr})}else Sa.newAuthErr({authId:Vf,source:"validation",level:"error",message:"oauth2RedirectUrl configuration is not passed. Oauth2 authorization cannot be performed."})}({auth:at.state,currentServer:xs.serverEffectiveValue(xs.selectedServer()),authActions:to,errActions:Cs,configs:Rs,authConfigs:ks})}),(0,Q.default)((0,Ii.default)(at),"onScopeChange",function(qi){var to,Cs,Ls=qi.target,ta=Ls.checked,xs=Ls.dataset.value;if(ta&&-1===(0,Qe.default)(to=at.state.scopes).call(to,xs)){var Rs,ks=(0,o.default)(Rs=at.state.scopes).call(Rs,[xs]);at.setState({scopes:ks})}else if(!ta&&(0,Qe.default)(Cs=at.state.scopes).call(Cs,xs)>-1){var Ms;at.setState({scopes:(0,_.default)(Ms=at.state.scopes).call(Ms,function(Ua){return Ua!==xs})})}}),(0,Q.default)((0,Ii.default)(at),"onInputChange",function(qi){var to=qi.target,ta=(0,Q.default)({},to.dataset.name,to.value);at.setState(ta)}),(0,Q.default)((0,Ii.default)(at),"selectScopes",function(qi){var to;at.setState(qi.target.dataset.all?{scopes:(0,oh.default)((0,Lh.default)(to=at.props.schema.get("allowedScopes")||at.props.schema.get("scopes")).call(to))}:{scopes:[]})}),(0,Q.default)((0,Ii.default)(at),"logout",function(qi){qi.preventDefault();var to=at.props,Cs=to.authActions,ta=to.name;to.errActions.clear({authId:ta,type:"auth",source:"auth"}),Cs.logoutWithPersistOption([ta])});var Ft=at.props,Lt=Ft.name,on=Ft.schema,wn=Ft.authorized,tr=Ft.authSelectors,Gn=wn&&wn.get(Lt),dr=tr.getConfigs()||{},Ti=Gn&&Gn.get("username")||"",_i=Gn&&Gn.get("clientId")||dr.clientId||"",Pi=Gn&&Gn.get("clientSecret")||dr.clientSecret||"",Li=Gn&&Gn.get("passwordType")||"basic",co=Gn&&Gn.get("scopes")||dr.scopes||[];return"string"==typeof co&&(co=co.split(dr.scopeSeparator||" ")),at.state={appName:dr.appName,name:Lt,schema:on,scopes:co,clientId:_i,clientSecret:Pi,username:Ti,password:"",passwordType:Li},at}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt,at=this,Ft=this.props,Lt=Ft.schema,on=Ft.getComponent,wn=Ft.authSelectors,tr=Ft.errSelectors,Gn=Ft.name,dr=Ft.specSelectors,Ti=on("Input"),_i=on("Row"),Pi=on("Col"),Li=on("Button"),co=on("authError"),qi=on("JumpToPath",!0),to=on("Markdown",!0),Cs=on("InitializedInput"),Ls=dr.isOAS3,ta=Ls()?Lt.get("openIdConnectUrl"):null,xs="implicit",Rs="password",ks=Ls()?ta?"authorization_code":"authorizationCode":"accessCode",Ms=Ls()?ta?"client_credentials":"clientCredentials":"application",Ua=!!(wn.getConfigs()||{}).usePkceWithAuthorizationCodeGrant,Js=Lt.get("flow"),Sa=Js===ks&&Ua?Js+" with PKCE":Js,rs=Lt.get("allowedScopes")||Lt.get("scopes"),na=!!wn.authorized().get(Gn),vl=(0,_.default)(qe=tr.allErrors()).call(qe,function(hf){return hf.get("authId")===Gn}),qc=!(0,_.default)(vl).call(vl,function(hf){return"validation"===hf.get("source")}).size,pf=Lt.get("description");return G.default.createElement("div",null,G.default.createElement("h4",null,Gn," (OAuth2, ",Sa,") ",G.default.createElement(qi,{path:["securityDefinitions",Gn]})),this.state.appName?G.default.createElement("h5",null,"Application: ",this.state.appName," "):null,pf&&G.default.createElement(to,{source:Lt.get("description")}),na&&G.default.createElement("h6",null,"Authorized"),ta&&G.default.createElement("p",null,"OpenID Connect URL: ",G.default.createElement("code",null,ta)),(Js===xs||Js===ks)&&G.default.createElement("p",null,"Authorization URL: ",G.default.createElement("code",null,Lt.get("authorizationUrl"))),(Js===Rs||Js===ks||Js===Ms)&&G.default.createElement("p",null,"Token URL:",G.default.createElement("code",null," ",Lt.get("tokenUrl"))),G.default.createElement("p",{className:"flow"},"Flow: ",G.default.createElement("code",null,Sa)),Js!==Rs?null:G.default.createElement(_i,null,G.default.createElement(_i,null,G.default.createElement("label",{htmlFor:"oauth_username"},"username:"),na?G.default.createElement("code",null," ",this.state.username," "):G.default.createElement(Pi,{tablet:10,desktop:10},G.default.createElement("input",{id:"oauth_username",type:"text","data-name":"username",onChange:this.onInputChange,autoFocus:!0}))),G.default.createElement(_i,null,G.default.createElement("label",{htmlFor:"oauth_password"},"password:"),na?G.default.createElement("code",null," ****** "):G.default.createElement(Pi,{tablet:10,desktop:10},G.default.createElement("input",{id:"oauth_password",type:"password","data-name":"password",onChange:this.onInputChange}))),G.default.createElement(_i,null,G.default.createElement("label",{htmlFor:"password_type"},"Client credentials location:"),na?G.default.createElement("code",null," ",this.state.passwordType," "):G.default.createElement(Pi,{tablet:10,desktop:10},G.default.createElement("select",{id:"password_type","data-name":"passwordType",onChange:this.onInputChange},G.default.createElement("option",{value:"basic"},"Authorization header"),G.default.createElement("option",{value:"request-body"},"Request body"))))),(Js===Ms||Js===xs||Js===ks||Js===Rs)&&(!na||na&&this.state.clientId)&&G.default.createElement(_i,null,G.default.createElement("label",{htmlFor:"client_id"},"client_id:"),na?G.default.createElement("code",null," ****** "):G.default.createElement(Pi,{tablet:10,desktop:10},G.default.createElement(Cs,{id:"client_id",type:"text",required:Js===Rs,initialValue:this.state.clientId,"data-name":"clientId",onChange:this.onInputChange}))),(Js===Ms||Js===ks||Js===Rs)&&!Ua&&G.default.createElement(_i,null,G.default.createElement("label",{htmlFor:"client_secret"},"client_secret:"),na?G.default.createElement("code",null," ****** "):G.default.createElement(Pi,{tablet:10,desktop:10},G.default.createElement(Cs,{id:"client_secret",initialValue:this.state.clientSecret,type:"password","data-name":"clientSecret",onChange:this.onInputChange}))),!na&&rs&&rs.size?G.default.createElement("div",{className:"scopes"},G.default.createElement("h2",null,"Scopes:",G.default.createElement("a",{onClick:this.selectScopes,"data-all":!0},"select all"),G.default.createElement("a",{onClick:this.selectScopes},"select none")),(0,we.default)(rs).call(rs,function(hf,Vf){var Wl,ed,lc,vp,sp;return G.default.createElement(_i,{key:Vf},G.default.createElement("div",{className:"checkbox"},G.default.createElement(Ti,{"data-value":Vf,id:(0,o.default)(Wl=(0,o.default)(ed="".concat(Vf,"-")).call(ed,Js,"-checkbox-")).call(Wl,at.state.name),disabled:na,checked:(0,zl.default)(lc=at.state.scopes).call(lc,Vf),type:"checkbox",onChange:at.onScopeChange}),G.default.createElement("label",{htmlFor:(0,o.default)(vp=(0,o.default)(sp="".concat(Vf,"-")).call(sp,Js,"-checkbox-")).call(vp,at.state.name)},G.default.createElement("span",{className:"item"}),G.default.createElement("div",{className:"text"},G.default.createElement("p",{className:"name"},Vf),G.default.createElement("p",{className:"description"},hf)))))}).toArray()):null,(0,we.default)(tt=vl.valueSeq()).call(tt,function(hf,Vf){return G.default.createElement(co,{error:hf,key:Vf})}),G.default.createElement("div",{className:"auth-btn-wrapper"},qc&&(na?G.default.createElement(Li,{className:"btn modal-btn auth authorize",onClick:this.logout},"Logout"):G.default.createElement(Li,{className:"btn modal-btn auth authorize",onClick:this.authorize},"Authorize")),G.default.createElement(Li,{className:"btn modal-btn auth btn-done",onClick:this.close},"Close")))}}]),gt}(G.default.Component),Zi=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onClick",function(){var on=tt.props,wn=on.specActions,tr=on.path,Gn=on.method;wn.clearResponse(tr,Gn),wn.clearRequest(tr,Gn)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){return G.default.createElement("button",{className:"btn btn-clear opblock-control__btn",onClick:this.onClick},"Clear")}}]),gt}(G.Component),mr=function(An){var un=An.headers;return G.default.createElement("div",null,G.default.createElement("h5",null,"Response headers"),G.default.createElement("pre",{className:"microlight"},un))},Mi=function(An){var un=An.duration;return G.default.createElement("div",null,G.default.createElement("h5",null,"Request duration"),G.default.createElement("pre",{className:"microlight"},un," ms"))},eo=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"shouldComponentUpdate",value:function(qe){return this.props.response!==qe.response||this.props.path!==qe.path||this.props.method!==qe.method||this.props.displayRequestDuration!==qe.displayRequestDuration}},{key:"render",value:function(){var qe,tt=this.props,at=tt.response,Ft=tt.getComponent,Lt=tt.getConfigs,on=tt.displayRequestDuration,wn=tt.specSelectors,tr=tt.path,Gn=tt.method,dr=Lt(),_i=dr.requestSnippetsEnabled,Pi=dr.showMutatedRequest?wn.mutatedRequestFor(tr,Gn):wn.requestFor(tr,Gn),Li=at.get("status"),co=Pi.get("url"),qi=at.get("headers").toJS(),to=at.get("notDocumented"),Cs=at.get("error"),Ls=at.get("text"),ta=at.get("duration"),xs=(0,C.default)(qi),Rs=qi["content-type"]||qi["Content-Type"],ks=Ft("responseBody"),Ms=(0,we.default)(xs).call(xs,function(na){var vl=(0,Ie.default)(qi[na])?qi[na].join():qi[na];return G.default.createElement("span",{className:"headerline",key:na}," ",na,": ",vl," ")}),Ua=0!==Ms.length,Js=Ft("Markdown",!0),Sa=Ft("RequestSnippets",!0),rs=Ft("curl");return G.default.createElement("div",null,Pi&&(!0===_i||"true"===_i?G.default.createElement(Sa,{request:Pi}):G.default.createElement(rs,{request:Pi,getConfigs:Lt})),co&&G.default.createElement("div",null,G.default.createElement("div",{className:"request-url"},G.default.createElement("h4",null,"Request URL"),G.default.createElement("pre",{className:"microlight"},co))),G.default.createElement("h4",null,"Server response"),G.default.createElement("table",{className:"responses-table live-responses-table"},G.default.createElement("thead",null,G.default.createElement("tr",{className:"responses-header"},G.default.createElement("td",{className:"col_header response-col_status"},"Code"),G.default.createElement("td",{className:"col_header response-col_description"},"Details"))),G.default.createElement("tbody",null,G.default.createElement("tr",{className:"response"},G.default.createElement("td",{className:"response-col_status"},Li,to?G.default.createElement("div",{className:"response-undocumented"},G.default.createElement("i",null," Undocumented ")):null),G.default.createElement("td",{className:"response-col_description"},Cs?G.default.createElement(Js,{source:(0,o.default)(qe="".concat(""!==at.get("name")?"".concat(at.get("name"),": "):"")).call(qe,at.get("message"))}):null,Ls?G.default.createElement(ks,{content:Ls,contentType:Rs,url:co,headers:qi,getConfigs:Lt,getComponent:Ft}):null,Ua?G.default.createElement(mr,{headers:Ms}):null,on&&ta?G.default.createElement(Mi,{duration:ta}):null)))))}}]),gt}(G.default.Component),No=Po(5623),qo=["get","put","post","delete","options","head","patch"],os=(0,o.default)(qo).call(qo,["trace"]),ps=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"renderOperationTag",function(on,wn){var tr=tt.props,Gn=tr.specSelectors,dr=tr.getComponent,Ti=tr.oas3Selectors,_i=tr.layoutSelectors,Pi=tr.layoutActions,Li=tr.getConfigs,co=dr("OperationContainer",!0),qi=dr("OperationTag"),to=on.get("operations");return G.default.createElement(qi,{key:"operation-"+wn,tagObj:on,tag:wn,oas3Selectors:Ti,layoutSelectors:_i,layoutActions:Pi,getConfigs:Li,getComponent:dr,specUrl:Gn.url()},G.default.createElement("div",{className:"operation-tag-content"},(0,we.default)(to).call(to,function(Cs){var Ls,ta=Cs.get("path"),xs=Cs.get("method"),Rs=bt.default.List(["paths",ta,xs]),ks=Gn.isOAS3()?os:qo;return-1===(0,Qe.default)(ks).call(ks,xs)?null:G.default.createElement(co,{key:(0,o.default)(Ls="".concat(ta,"-")).call(Ls,xs),specPath:Rs,op:Cs,path:ta,method:xs,tag:wn})}).toArray()))}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props.specSelectors.taggedOperations();return 0===qe.size?G.default.createElement("h3",null," No operations defined in spec!"):G.default.createElement("div",null,(0,we.default)(qe).call(qe,this.renderOperationTag).toArray(),qe.size<1?G.default.createElement("h3",null," No operations defined in spec! "):null)}}]),gt}(G.default.Component),_a=Po(3769);function tl(An){return An.match(/^(?:[a-z]+:)?\/\//i)}function vu(An,un){return An?tl(An)?(gt=An).match(/^\/\//i)?(0,o.default)(qe="".concat(window.location.protocol)).call(qe,gt):gt:new _a.default(An,un).href:un;var gt,qe}function sr(An,un){var gt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},qe=gt.selectedServer,tt=void 0===qe?"":qe;if(An){if(tl(An))return An;var at=vu(tt,un);return tl(at)?new _a.default(An,at).href:new _a.default(An,window.location.href).href}}function Bi(An,un){var gt=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},qe=gt.selectedServer,tt=void 0===qe?"":qe;try{return sr(An,un,{selectedServer:tt})}catch(at){return}}var cs=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this.props,at=tt.tagObj,Ft=tt.tag,Lt=tt.children,on=tt.oas3Selectors,wn=tt.layoutSelectors,tr=tt.layoutActions,dr=tt.getComponent,Ti=tt.specUrl,_i=(0,tt.getConfigs)(),Pi=_i.docExpansion,Li=_i.deepLinking,co=Li&&"false"!==Li,qi=dr("Collapse"),to=dr("Markdown",!0),Cs=dr("DeepLink"),Ls=dr("Link"),ta=at.getIn(["tagDetails","description"],null),xs=at.getIn(["tagDetails","externalDocs","description"]),Rs=at.getIn(["tagDetails","externalDocs","url"]);qe=(0,Nn.Wl)(on)&&(0,Nn.Wl)(on.selectedServer)?Bi(Rs,Ti,{selectedServer:on.selectedServer()}):Rs;var ks=["operations-tag",Ft],Ms=wn.isShown(ks,"full"===Pi||"list"===Pi);return G.default.createElement("div",{className:Ms?"opblock-tag-section is-open":"opblock-tag-section"},G.default.createElement("h3",{onClick:function(){return tr.show(ks,!Ms)},className:ta?"opblock-tag":"opblock-tag no-desc",id:(0,we.default)(ks).call(ks,function(Ua){return(0,Nn.J6)(Ua)}).join("-"),"data-tag":Ft,"data-is-open":Ms},G.default.createElement(Cs,{enabled:co,isShown:Ms,path:(0,Nn.oJ)(Ft),text:Ft}),ta?G.default.createElement("small",null,G.default.createElement(to,{source:ta})):G.default.createElement("small",null),xs?G.default.createElement("div",{className:"info__externaldocs"},G.default.createElement("small",null,xs,qe?": ":null,qe?G.default.createElement(Ls,{href:(0,Nn.Nm)(qe),onClick:function(Ua){return Ua.stopPropagation()},target:"_blank"},qe):null)):null,G.default.createElement("button",{"aria-expanded":Ms,className:"expand-operation",title:Ms?"Collapse operation":"Expand operation",onClick:function(){return tr.show(ks,!Ms)}},G.default.createElement("svg",{className:"arrow",width:"20",height:"20","aria-hidden":"true",focusable:"false"},G.default.createElement("use",{href:Ms?"#large-arrow-up":"#large-arrow-down",xlinkHref:Ms?"#large-arrow-up":"#large-arrow-down"})))),G.default.createElement(qi,{isOpened:Ms},Lt))}}]),gt}(G.default.Component);(0,Q.default)(cs,"defaultProps",{tagObj:bt.default.fromJS({}),tag:""});var zi=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.specPath,at=qe.response,Ft=qe.request,Lt=qe.toggleShown,on=qe.onTryoutClick,wn=qe.onCancelClick,tr=qe.onExecute,Gn=qe.fn,dr=qe.getComponent,Ti=qe.getConfigs,_i=qe.specActions,Pi=qe.specSelectors,Li=qe.authActions,co=qe.authSelectors,qi=qe.oas3Actions,to=qe.oas3Selectors,Cs=this.props.operation,Ls=Cs.toJS(),ta=Ls.deprecated,xs=Ls.isShown,Rs=Ls.path,ks=Ls.method,Ms=Ls.op,Ua=Ls.tag,Js=Ls.operationId,Sa=Ls.allowTryItOut,rs=Ls.displayRequestDuration,na=Ls.tryItOutEnabled,vl=Ls.executeInProgress,qc=Ms.description,pf=Ms.externalDocs,hf=Ms.schemes,Vf=pf?Bi(pf.url,Pi.url(),{selectedServer:to.selectedServer()}):"",Wl=Cs.getIn(["op"]),ed=Wl.get("responses"),lc=(0,Nn.gp)(Wl,["parameters"]),vp=Pi.operationScheme(Rs,ks),sp=["operations",Ua,Js],F_=(0,Nn.nX)(Wl),Gd=dr("responses"),uc=dr("parameters"),Vd=dr("execute"),_f=dr("clear"),mf=dr("Collapse"),$h=dr("Markdown",!0),Id=dr("schemes"),Fd=dr("OperationServers"),Df=dr("OperationExt"),Hh=dr("OperationSummary"),Wm=dr("Link"),aH=Ti().showExtensions;if(ed&&at&&at.size>0){var lH=!ed.get(String(at.get("status")))&&!ed.get("default");at=at.set("notDocumented",lH)}var uH=[Rs,ks];return G.default.createElement("div",{className:ta?"opblock opblock-deprecated":xs?"opblock opblock-".concat(ks," is-open"):"opblock opblock-".concat(ks),id:(0,Nn.J6)(sp.join("-"))},G.default.createElement(Hh,{operationProps:Cs,isShown:xs,toggleShown:Lt,getComponent:dr,authActions:Li,authSelectors:co,specPath:tt}),G.default.createElement(mf,{isOpened:xs},G.default.createElement("div",{className:"opblock-body"},Wl&&Wl.size||null===Wl?null:G.default.createElement("img",{height:"32px",width:"32px",src:Po(2517),className:"opblock-loading-animation"}),ta&&G.default.createElement("h4",{className:"opblock-title_normal"}," Warning: Deprecated"),qc&&G.default.createElement("div",{className:"opblock-description-wrapper"},G.default.createElement("div",{className:"opblock-description"},G.default.createElement($h,{source:qc}))),Vf?G.default.createElement("div",{className:"opblock-external-docs-wrapper"},G.default.createElement("h4",{className:"opblock-title_normal"},"Find more details"),G.default.createElement("div",{className:"opblock-external-docs"},G.default.createElement("span",{className:"opblock-external-docs__description"},G.default.createElement($h,{source:pf.description})),G.default.createElement(Wm,{target:"_blank",className:"opblock-external-docs__link",href:(0,Nn.Nm)(Vf)},Vf))):null,Wl&&Wl.size?G.default.createElement(uc,{parameters:lc,specPath:tt.push("parameters"),operation:Wl,onChangeKey:uH,onTryoutClick:on,onCancelClick:wn,tryItOutEnabled:na,allowTryItOut:Sa,fn:Gn,getComponent:dr,specActions:_i,specSelectors:Pi,pathMethod:[Rs,ks],getConfigs:Ti,oas3Actions:qi,oas3Selectors:to}):null,na?G.default.createElement(Fd,{getComponent:dr,path:Rs,method:ks,operationServers:Wl.get("servers"),pathServers:Pi.paths().getIn([Rs,"servers"]),getSelectedServer:to.selectedServer,setSelectedServer:qi.setSelectedServer,setServerVariableValue:qi.setServerVariableValue,getServerVariable:to.serverVariableValue,getEffectiveServerValue:to.serverEffectiveValue}):null,na&&Sa&&hf&&hf.size?G.default.createElement("div",{className:"opblock-schemes"},G.default.createElement(Id,{schemes:hf,path:Rs,method:ks,specActions:_i,currentScheme:vp})):null,G.default.createElement("div",{className:na&&at&&Sa?"btn-group":"execute-wrapper"},na&&Sa?G.default.createElement(Vd,{operation:Wl,specActions:_i,specSelectors:Pi,oas3Selectors:to,oas3Actions:qi,path:Rs,method:ks,onExecute:tr,disabled:vl}):null,na&&at&&Sa?G.default.createElement(_f,{specActions:_i,path:Rs,method:ks}):null),vl?G.default.createElement("div",{className:"loading-container"},G.default.createElement("div",{className:"loading"})):null,ed?G.default.createElement(Gd,{responses:ed,request:Ft,tryItOutResponse:at,getComponent:dr,getConfigs:Ti,specSelectors:Pi,oas3Actions:qi,oas3Selectors:to,specActions:_i,produces:Pi.producesOptionsFor([Rs,ks]),producesValue:Pi.currentProducesFor([Rs,ks]),specPath:tt.push("responses"),path:Rs,method:ks,displayRequestDuration:rs,fn:Gn}):null,aH&&F_.size?G.default.createElement(Df,{extensions:F_,getComponent:dr}):null)))}}]),gt}(G.PureComponent);(0,Q.default)(zi,"defaultProps",{operation:null,response:null,request:null,specPath:(0,bt.List)(),summary:""});const Ds=(An=>{var un={};return Po.d(un,An),un})({default:()=>Nk()});var ss=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this.props,at=tt.isShown,Ft=tt.toggleShown,Lt=tt.getComponent,on=tt.authActions,wn=tt.authSelectors,tr=tt.operationProps,Gn=tt.specPath,dr=tr.toJS(),Ti=dr.summary,_i=dr.isAuthorized,Pi=dr.method,co=dr.showSummary,qi=dr.path,to=dr.operationId,Cs=dr.originalOperationId,Ls=dr.displayOperationId,ta=dr.op.summary,xs=tr.get("security"),Rs=Lt("authorizeOperationBtn"),ks=Lt("OperationSummaryMethod"),Ms=Lt("OperationSummaryPath"),Ua=Lt("JumpToPath",!0),Js=xs&&!!xs.count(),Sa=Js&&1===xs.size&&xs.first().isEmpty(),rs=!Js||Sa;return G.default.createElement("div",{className:"opblock-summary opblock-summary-".concat(Pi)},G.default.createElement("button",{"aria-label":(0,o.default)(qe="".concat(Pi," ")).call(qe,qi.replace(/\//g,"\u200b/")),"aria-expanded":at,className:"opblock-summary-control",onClick:Ft},G.default.createElement(ks,{method:Pi}),G.default.createElement(Ms,{getComponent:Lt,operationProps:tr,specPath:Gn}),co?G.default.createElement("div",{className:"opblock-summary-description"},(0,Ds.default)(ta||Ti)):null,Ls&&(Cs||to)?G.default.createElement("span",{className:"opblock-summary-operation-id"},Cs||to):null,G.default.createElement("svg",{className:"arrow",width:"20",height:"20","aria-hidden":"true",focusable:"false"},G.default.createElement("use",{href:at?"#large-arrow-up":"#large-arrow-down",xlinkHref:at?"#large-arrow-up":"#large-arrow-down"}))),rs?null:G.default.createElement(Rs,{isAuthorized:_i,onClick:function(){var na=wn.definitionsForRequirements(xs);on.showDefinitions(na)}}),G.default.createElement(Ua,{path:Gn}))}}]),gt}(G.PureComponent);(0,Q.default)(ss,"defaultProps",{operationProps:null,specPath:(0,bt.List)(),summary:""});var tu=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){return G.default.createElement("span",{className:"opblock-summary-method"},this.props.method.toUpperCase())}}]),gt}(G.PureComponent);(0,Q.default)(tu,"defaultProps",{operationProps:null});const bl=(An=>{var un={};return Po.d(un,An),un})({default:()=>Fk()});var fl=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){for(var qe,tt=this.props,at=tt.getComponent,Ft=tt.operationProps.toJS(),Lt=Ft.deprecated,on=Ft.isShown,wn=Ft.path,tr=Ft.tag,Gn=Ft.operationId,dr=Ft.isDeepLinkingEnabled,Ti=wn.split(/(?=\/)/g),_i=1;_i<Ti.length;_i+=2)(0,bl.default)(Ti).call(Ti,_i,0,G.default.createElement("wbr",{key:_i}));var Pi=at("DeepLink");return G.default.createElement("span",{className:Lt?"opblock-summary-path__deprecated":"opblock-summary-path","data-path":wn},G.default.createElement(Pi,{enabled:dr,isShown:on,path:(0,Nn.oJ)((0,o.default)(qe="".concat(tr,"/")).call(qe,Gn)),text:Ti}))}}]),gt}(G.PureComponent),Ba=Po(9334);const xa=function(An){var un,gt=An.extensions,qe=(0,An.getComponent)("OperationExtRow");return G.default.createElement("div",{className:"opblock-section"},G.default.createElement("div",{className:"opblock-section-header"},G.default.createElement("h4",null,"Extensions")),G.default.createElement("div",{className:"table-container"},G.default.createElement("table",null,G.default.createElement("thead",null,G.default.createElement("tr",null,G.default.createElement("td",{className:"col_header"},"Field"),G.default.createElement("td",{className:"col_header"},"Value"))),G.default.createElement("tbody",null,(0,we.default)(un=gt.entrySeq()).call(un,function(tt){var at,Ft=(0,Ba.default)(tt,2),Lt=Ft[0],on=Ft[1];return G.default.createElement(qe,{key:(0,o.default)(at="".concat(Lt,"-")).call(at,on),xKey:Lt,xVal:on})})))))},yu=function(An){var un=An.xKey,gt=An.xVal,qe=gt?gt.toJS?gt.toJS():gt:null;return G.default.createElement("tr",null,G.default.createElement("td",null,un),G.default.createElement("td",null,(0,R.default)(qe)))};var nu=Po(29),jd=Po(8096),op=Po(471),Pl=Po(9908),ff=Po(7068);const kh=(An=>{var un={};return Po.d(un,An),un})({default:()=>kk()});var so=Po(9874),Em=function(An){var un=An.value,gt=An.fileName,qe=An.className,tt=An.downloadable,at=An.getConfigs,Ft=An.canCopy,Lt=An.language,on=(0,ff.default)(at)?at():null,wn=!1!==(0,Pl.default)(on,"syntaxHighlight")&&(0,Pl.default)(on,"syntaxHighlight.activated",!0),tr=(0,G.useRef)(null);(0,G.useEffect)(function(){var dr,Ti=(0,_.default)(dr=(0,oh.default)(tr.current.childNodes)).call(dr,function(_i){return!!_i.nodeType&&_i.classList.contains("microlight")});return(0,nu.default)(Ti).call(Ti,function(_i){return _i.addEventListener("mousewheel",Gn,{passive:!1})}),function(){(0,nu.default)(Ti).call(Ti,function(_i){return _i.removeEventListener("mousewheel",Gn)})}},[un,qe,Lt]);var Gn=function(dr){var Ti=dr.target,_i=dr.deltaY,Pi=Ti.scrollHeight,Li=Ti.offsetHeight,co=Ti.scrollTop;Pi>Li&&(0===co&&_i<0||Li+co>=Pi&&_i>0)&&dr.preventDefault()};return G.default.createElement("div",{className:"highlight-code",ref:tr},tt?G.default.createElement("div",{className:"download-contents",onClick:function(){(0,kh.default)(un,gt)}},"Download"):null,Ft&&G.default.createElement("div",{className:"copy-to-clipboard"},G.default.createElement(so.CopyToClipboard,{text:un},G.default.createElement("button",null))),wn?G.default.createElement(op.d3,{language:Lt,className:(0,jd.default)(qe,"microlight"),style:(0,op.C2)((0,Pl.default)(on,"syntaxHighlight.theme","agate"))},un):G.default.createElement("pre",{className:(0,jd.default)(qe,"microlight")},un))};Em.defaultProps={fileName:"response.txt"};const I_=Em;var ev=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onChangeProducesWrapper",function(on){return tt.props.specActions.changeProducesValue([tt.props.path,tt.props.method],on)}),(0,Q.default)((0,Ii.default)(tt),"onResponseContentTypeChange",function(on){var Gn=tt.props;on.controlsAcceptHeader&&Gn.oas3Actions.setResponseContentType({value:on.value,path:Gn.path,method:Gn.method})}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt,at=this,Ft=this.props,Lt=Ft.responses,on=Ft.tryItOutResponse,wn=Ft.getComponent,tr=Ft.getConfigs,Gn=Ft.specSelectors,dr=Ft.fn,Ti=Ft.producesValue,_i=Ft.displayRequestDuration,Pi=Ft.specPath,Li=Ft.path,co=Ft.method,qi=Ft.oas3Selectors,to=Ft.oas3Actions,Cs=(0,Nn.iQ)(Lt),Ls=wn("contentType"),ta=wn("liveResponse"),xs=wn("response"),Rs=this.props.produces&&this.props.produces.size?this.props.produces:gt.defaultProps.produces,ks=Gn.isOAS3()?(0,Nn.QG)(Lt):null,Ms=function(Js){var Sa=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"_";return Js.replace(/[^\w-]/g,Sa)}((0,o.default)(qe="".concat(co)).call(qe,Li,"_responses")),Ua="".concat(Ms,"_select");return G.default.createElement("div",{className:"responses-wrapper"},G.default.createElement("div",{className:"opblock-section-header"},G.default.createElement("h4",null,"Responses"),Gn.isOAS3()?null:G.default.createElement("label",{htmlFor:Ua},G.default.createElement("span",null,"Response content type"),G.default.createElement(Ls,{value:Ti,ariaControls:Ms,ariaLabel:"Response content type",className:"execute-content-type",contentTypes:Rs,controlId:Ua,onChange:this.onChangeProducesWrapper}))),G.default.createElement("div",{className:"responses-inner"},on?G.default.createElement("div",null,G.default.createElement(ta,{response:on,getComponent:wn,getConfigs:tr,specSelectors:Gn,path:this.props.path,method:this.props.method,displayRequestDuration:_i}),G.default.createElement("h4",null,"Responses")):null,G.default.createElement("table",{"aria-live":"polite",className:"responses-table",id:Ms,role:"region"},G.default.createElement("thead",null,G.default.createElement("tr",{className:"responses-header"},G.default.createElement("td",{className:"col_header response-col_status"},"Code"),G.default.createElement("td",{className:"col_header response-col_description"},"Description"),Gn.isOAS3()?G.default.createElement("td",{className:"col col_header response-col_links"},"Links"):null)),G.default.createElement("tbody",null,(0,we.default)(tt=Lt.entrySeq()).call(tt,function(Js){var Sa=(0,Ba.default)(Js,2),rs=Sa[0],na=Sa[1],vl=on&&on.get("status")==rs?"response_current":"";return G.default.createElement(xs,{key:rs,path:Li,method:co,specPath:Pi.push(rs),isDefault:Cs===rs,fn:dr,className:vl,code:rs,response:na,specSelectors:Gn,controlsAcceptHeader:na===ks,onContentTypeChange:at.onResponseContentTypeChange,contentType:Ti,getConfigs:tr,activeExamplesKey:qi.activeExamplesMember(Li,co,"responses",rs),oas3Actions:to,getComponent:wn})}).toArray()))))}}]),gt}(G.default.Component);(0,Q.default)(ev,"defaultProps",{tryItOutResponse:null,produces:(0,bt.fromJS)(["application/json"]),displayRequestDuration:!1});var sh=Po(1013);const pd=(An=>{var un={};return Po.d(un,An),un})({default:()=>Hk()});var bm=Po(2518),zm=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;return(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"_onContentTypeChange",function(Ft){var Lt=at.props,on=Lt.onContentTypeChange,wn=Lt.controlsAcceptHeader;at.setState({responseContentType:Ft}),on({value:Ft,controlsAcceptHeader:wn})}),(0,Q.default)((0,Ii.default)(at),"getTargetExamplesKey",function(){var Ft=at.props,wn=Ft.activeExamplesKey,Gn=Ft.response.getIn(["content",at.state.responseContentType||Ft.contentType],(0,bt.Map)({})).get("examples",null).keySeq().first();return wn||Gn}),at.state={responseContentType:""},at}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt,at,Ft,Lt,on=this.props,wn=on.path,tr=on.method,Gn=on.code,dr=on.response,Ti=on.className,_i=on.specPath,Li=on.getComponent,co=on.getConfigs,qi=on.specSelectors,to=on.contentType,Cs=on.controlsAcceptHeader,Ls=on.oas3Actions,ta=on.fn.inferSchema,xs=qi.isOAS3(),Rs=co().showExtensions,ks=Rs?(0,Nn.nX)(dr):null,Ms=dr.get("headers"),Ua=dr.get("links"),Js=Li("ResponseExtension"),Sa=Li("headers"),rs=Li("highlightCode"),na=Li("modelExample"),vl=Li("Markdown",!0),qc=Li("operationLink"),pf=Li("contentType"),hf=Li("ExamplesSelect"),Vf=Li("Example"),Wl=this.state.responseContentType||to,ed=dr.getIn(["content",Wl],(0,bt.Map)({})),lc=ed.get("examples",null);if(xs){var vp=ed.get("schema");at=vp?ta(vp.toJS()):null,Ft=vp?(0,bt.List)(["content",this.state.responseContentType,"schema"]):_i}else at=dr.get("schema"),Ft=dr.has("schema")?_i.push("schema"):_i;var sp,F_=!1,Gd={includeReadOnly:!0};if(xs){var uc;if(sp=null===(uc=ed.get("schema"))||void 0===uc?void 0:uc.toJS(),lc){var Vd=this.getTargetExamplesKey(),_f=function(Id){return Id.get("value")};void 0===(Lt=_f(lc.get(Vd,(0,bt.Map)({}))))&&(Lt=_f((0,pd.default)(lc).call(lc).next().value)),F_=!0}else void 0!==ed.get("example")&&(Lt=ed.get("example"),F_=!0)}else{sp=at,Gd=(0,sh.default)((0,sh.default)({},Gd),{},{includeWriteOnly:!0});var mf=dr.getIn(["examples",Wl]);mf&&(Lt=mf,F_=!0)}var $h=function(Id,Fd,Df){if(null!=Id){var Hh=null;return(0,bm.O)(Id)&&(Hh="json"),G.default.createElement("div",null,G.default.createElement(Fd,{className:"example",getConfigs:Df,language:Hh,value:(0,Nn.Pz)(Id)}))}return null}((0,Nn.xi)(sp,Wl,Gd,F_?Lt:void 0),rs,co);return G.default.createElement("tr",{className:"response "+(Ti||""),"data-code":Gn},G.default.createElement("td",{className:"response-col_status"},Gn),G.default.createElement("td",{className:"response-col_description"},G.default.createElement("div",{className:"response-col_description__inner"},G.default.createElement(vl,{source:dr.get("description")})),Rs&&ks.size?(0,we.default)(qe=ks.entrySeq()).call(qe,function(Id){var Fd,Df=(0,Ba.default)(Id,2),Hh=Df[0],Wm=Df[1];return G.default.createElement(Js,{key:(0,o.default)(Fd="".concat(Hh,"-")).call(Fd,Wm),xKey:Hh,xVal:Wm})}):null,xs&&dr.get("content")?G.default.createElement("section",{className:"response-controls"},G.default.createElement("div",{className:(0,jd.default)("response-control-media-type",{"response-control-media-type--accept-controller":Cs})},G.default.createElement("small",{className:"response-control-media-type__title"},"Media type"),G.default.createElement(pf,{value:this.state.responseContentType,contentTypes:dr.get("content")?dr.get("content").keySeq():(0,bt.Seq)(),onChange:this._onContentTypeChange,ariaLabel:"Media Type"}),Cs?G.default.createElement("small",{className:"response-control-media-type__accept-message"},"Controls ",G.default.createElement("code",null,"Accept")," header."):null),lc?G.default.createElement("div",{className:"response-control-examples"},G.default.createElement("small",{className:"response-control-examples__title"},"Examples"),G.default.createElement(hf,{examples:lc,currentExampleKey:this.getTargetExamplesKey(),onSelect:function(Id){return Ls.setActiveExamplesMember({name:Id,pathMethod:[wn,tr],contextType:"responses",contextName:Gn})},showLabels:!1})):null):null,$h||at?G.default.createElement(na,{specPath:Ft,getComponent:Li,getConfigs:co,specSelectors:qi,schema:(0,Nn.oG)(at),example:$h,includeReadOnly:!0}):null,xs&&lc?G.default.createElement(Vf,{example:lc.get(this.getTargetExamplesKey(),(0,bt.Map)({})),getComponent:Li,getConfigs:co,omitValue:!0}):null,Ms?G.default.createElement(Sa,{headers:Ms,getComponent:Li}):null),xs?G.default.createElement("td",{className:"response-col_links"},Ua?(0,we.default)(tt=Ua.toSeq().entrySeq()).call(tt,function(Id){var Fd=(0,Ba.default)(Id,2),Df=Fd[0];return G.default.createElement(qc,{key:Df,name:Df,link:Fd[1],getComponent:Li})}):G.default.createElement("i",null,"No links")):null)}}]),gt}(G.default.Component);(0,Q.default)(zm,"defaultProps",{response:(0,bt.fromJS)({}),onContentTypeChange:function(){}});const q_=function(An){return G.default.createElement("div",{className:"response__extension"},An.xKey,": ",String(An.xVal))},Eg=(An=>{var un={};return Po.d(un,An),un})({default:()=>Uk()}),Lp=(An=>{var un={};return Po.d(un,An),un})({default:()=>jk()});var vC=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"state",{parsedContent:null}),(0,Q.default)((0,Ii.default)(tt),"updateParsedContent",function(on){var wn=tt.props.content;if(on!==wn)if(wn&&wn instanceof Blob){var tr=new FileReader;tr.onload=function(){tt.setState({parsedContent:tr.result})},tr.readAsText(wn)}else tt.setState({parsedContent:wn.toString()})}),tt}return(0,le.default)(gt,[{key:"componentDidMount",value:function(){this.updateParsedContent(null)}},{key:"componentDidUpdate",value:function(qe){this.updateParsedContent(qe.content)}},{key:"render",value:function(){var qe,tt,at=this.props,Ft=at.content,Lt=at.contentType,on=at.url,wn=at.headers,tr=void 0===wn?{}:wn,Gn=at.getConfigs,Ti=this.state.parsedContent,_i=(0,at.getComponent)("highlightCode"),Pi="response_"+(new Date).getTime();if(on=on||"",/^application\/octet-stream/i.test(Lt)||tr["Content-Disposition"]&&/attachment/i.test(tr["Content-Disposition"])||tr["content-disposition"]&&/attachment/i.test(tr["content-disposition"])||tr["Content-Description"]&&/File Transfer/i.test(tr["Content-Description"])||tr["content-description"]&&/File Transfer/i.test(tr["content-description"]))if("Blob"in window){var Li=Lt||"text/html",co=Ft instanceof Blob?Ft:new Blob([Ft],{type:Li}),qi=_a.default.createObjectURL(co),to=[Li,on.substr((0,l.default)(on).call(on,"/")+1),qi].join(":"),Cs=tr["content-disposition"]||tr["Content-Disposition"];if(void 0!==Cs){var Ls=(0,Nn.DR)(Cs);null!==Ls&&(to=Ls)}tt=G.default.createElement("div",null,G.default.createElement("a",xn.Z.navigator&&xn.Z.navigator.msSaveOrOpenBlob?{href:qi,onClick:function(){return xn.Z.navigator.msSaveOrOpenBlob(co,to)}}:{href:qi,download:to},"Download file"))}else tt=G.default.createElement("pre",{className:"microlight"},"Download headers detected but your browser does not support downloading binary via XHR (Blob).");else if(/json/i.test(Lt)){var ta=null;(0,bm.O)(Ft)&&(ta="json");try{qe=(0,R.default)(JSON.parse(Ft),null,"  ")}catch(xs){qe="can't parse JSON.  Raw result:\n\n"+Ft}tt=G.default.createElement(_i,{language:ta,downloadable:!0,fileName:"".concat(Pi,".json"),value:qe,getConfigs:Gn,canCopy:!0})}else/xml/i.test(Lt)?(qe=(0,Eg.default)(Ft,{textNodesOnSameLine:!0,indentor:"  "}),tt=G.default.createElement(_i,{downloadable:!0,fileName:"".concat(Pi,".xml"),value:qe,getConfigs:Gn,canCopy:!0})):tt="text/html"===(0,Lp.default)(Lt)||/text\/plain/.test(Lt)?G.default.createElement(_i,{downloadable:!0,fileName:"".concat(Pi,".html"),value:Ft,getConfigs:Gn,canCopy:!0}):"text/csv"===(0,Lp.default)(Lt)||/text\/csv/.test(Lt)?G.default.createElement(_i,{downloadable:!0,fileName:"".concat(Pi,".csv"),value:Ft,getConfigs:Gn,canCopy:!0}):/^image\//i.test(Lt)?(0,zl.default)(Lt).call(Lt,"svg")?G.default.createElement("div",null," ",Ft," "):G.default.createElement("img",{src:_a.default.createObjectURL(Ft)}):/^audio\//i.test(Lt)?G.default.createElement("pre",{className:"microlight"},G.default.createElement("audio",{controls:!0},G.default.createElement("source",{src:on,type:Lt}))):"string"==typeof Ft?G.default.createElement(_i,{downloadable:!0,fileName:"".concat(Pi,".txt"),value:Ft,getConfigs:Gn,canCopy:!0}):Ft.size>0?Ti?G.default.createElement("div",null,G.default.createElement("p",{className:"i"},"Unrecognized response type; displaying content as text."),G.default.createElement(_i,{downloadable:!0,fileName:"".concat(Pi,".txt"),value:Ti,getConfigs:Gn,canCopy:!0})):G.default.createElement("p",{className:"i"},"Unrecognized response type; unable to display."):null;return tt?G.default.createElement("div",null,G.default.createElement("h5",null,"Response body"),tt):null}}]),gt}(G.default.PureComponent),Nd=Po(2691),yC=Po(374),LE=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe){var tt;return(0,oe.default)(this,gt),tt=un.call(this,qe),(0,Q.default)((0,Ii.default)(tt),"onChange",function(at,Ft,Lt){var on=tt.props;(0,on.specActions.changeParamByIdentity)(on.onChangeKey,at,Ft,Lt)}),(0,Q.default)((0,Ii.default)(tt),"onChangeConsumesWrapper",function(at){var Ft=tt.props;(0,Ft.specActions.changeConsumesValue)(Ft.onChangeKey,at)}),(0,Q.default)((0,Ii.default)(tt),"toggleTab",function(at){return"parameters"===at?tt.setState({parametersVisible:!0,callbackVisible:!1}):"callbacks"===at?tt.setState({callbackVisible:!0,parametersVisible:!1}):void 0}),(0,Q.default)((0,Ii.default)(tt),"onChangeMediaType",function(at){var Ft=at.value,Lt=at.pathMethod,on=tt.props,wn=on.specActions,tr=on.oas3Selectors,Gn=on.oas3Actions,dr=tr.hasUserEditedBody.apply(tr,(0,Nd.default)(Lt)),Ti=tr.shouldRetainRequestBodyValue.apply(tr,(0,Nd.default)(Lt));Gn.setRequestContentType({value:Ft,pathMethod:Lt}),Gn.initRequestBodyValidateError({pathMethod:Lt}),dr||(Ti||Gn.setRequestBodyValue({value:void 0,pathMethod:Lt}),wn.clearResponse.apply(wn,(0,Nd.default)(Lt)),wn.clearRequest.apply(wn,(0,Nd.default)(Lt)),wn.clearValidateParams(Lt))}),tt.state={callbackVisible:!1,parametersVisible:!0},tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt,at=this,Ft=this.props,Lt=Ft.onTryoutClick,on=Ft.parameters,wn=Ft.allowTryItOut,tr=Ft.tryItOutEnabled,Gn=Ft.specPath,dr=Ft.fn,Ti=Ft.getComponent,_i=Ft.getConfigs,Pi=Ft.specSelectors,Li=Ft.specActions,co=Ft.pathMethod,qi=Ft.oas3Actions,to=Ft.oas3Selectors,Cs=Ft.operation,Ls=Ti("parameterRow"),ta=Ti("TryItOutButton"),xs=Ti("contentType"),Rs=Ti("Callbacks",!0),ks=Ti("RequestBody",!0),Ms=tr&&wn,Ua=Pi.isOAS3(),Js=Cs.get("requestBody"),Sa=(0,ke.default)(qe=(0,yC.default)((0,ke.default)(on).call(on,function(rs,na){var vl,qc=na.get("in");return null!==(vl=rs[qc])&&void 0!==vl||(rs[qc]=[]),rs[qc].push(na),rs},{}))).call(qe,function(rs,na){return(0,o.default)(rs).call(rs,na)},[]);return G.default.createElement("div",{className:"opblock-section"},G.default.createElement("div",{className:"opblock-section-header"},Ua?G.default.createElement("div",{className:"tab-header"},G.default.createElement("div",{onClick:function(){return at.toggleTab("parameters")},className:"tab-item ".concat(this.state.parametersVisible&&"active")},G.default.createElement("h4",{className:"opblock-title"},G.default.createElement("span",null,"Parameters"))),Cs.get("callbacks")?G.default.createElement("div",{onClick:function(){return at.toggleTab("callbacks")},className:"tab-item ".concat(this.state.callbackVisible&&"active")},G.default.createElement("h4",{className:"opblock-title"},G.default.createElement("span",null,"Callbacks"))):null):G.default.createElement("div",{className:"tab-header"},G.default.createElement("h4",{className:"opblock-title"},"Parameters")),wn?G.default.createElement(ta,{isOAS3:Pi.isOAS3(),hasUserEditedBody:to.hasUserEditedBody.apply(to,(0,Nd.default)(co)),enabled:tr,onCancelClick:this.props.onCancelClick,onTryoutClick:Lt,onResetClick:function(){return qi.setRequestBodyValue({value:void 0,pathMethod:co})}}):null),this.state.parametersVisible?G.default.createElement("div",{className:"parameters-container"},Sa.length?G.default.createElement("div",{className:"table-container"},G.default.createElement("table",{className:"parameters"},G.default.createElement("thead",null,G.default.createElement("tr",null,G.default.createElement("th",{className:"col_header parameters-col_name"},"Name"),G.default.createElement("th",{className:"col_header parameters-col_description"},"Description"))),G.default.createElement("tbody",null,(0,we.default)(Sa).call(Sa,function(rs,na){var vl;return G.default.createElement(Ls,{fn:dr,specPath:Gn.push(na.toString()),getComponent:Ti,getConfigs:_i,rawParam:rs,param:Pi.parameterWithMetaByIdentity(co,rs),key:(0,o.default)(vl="".concat(rs.get("in"),".")).call(vl,rs.get("name")),onChange:at.onChange,onChangeConsumes:at.onChangeConsumesWrapper,specSelectors:Pi,specActions:Li,oas3Actions:qi,oas3Selectors:to,pathMethod:co,isExecute:Ms})})))):G.default.createElement("div",{className:"opblock-description-wrapper"},G.default.createElement("p",null,"No parameters"))):null,this.state.callbackVisible?G.default.createElement("div",{className:"callbacks-container opblock-description-wrapper"},G.default.createElement(Rs,{callbacks:(0,bt.Map)(Cs.get("callbacks")),specPath:(0,$e.default)(Gn).call(Gn,0,-1).push("callbacks")})):null,Ua&&Js&&this.state.parametersVisible&&G.default.createElement("div",{className:"opblock-section opblock-section-request-body"},G.default.createElement("div",{className:"opblock-section-header"},G.default.createElement("h4",{className:"opblock-title parameter__name ".concat(Js.get("required")&&"required")},"Request body"),G.default.createElement("label",null,G.default.createElement(xs,{value:to.requestContentType.apply(to,(0,Nd.default)(co)),contentTypes:Js.get("content",(0,bt.List)()).keySeq(),onChange:function(rs){at.onChangeMediaType({value:rs,pathMethod:co})},className:"body-param-content-type",ariaLabel:"Request content type"}))),G.default.createElement("div",{className:"opblock-description-wrapper"},G.default.createElement(ks,{setRetainRequestBodyValueFlag:function(rs){return qi.setRetainRequestBodyValueFlag({value:rs,pathMethod:co})},userHasEditedBody:to.hasUserEditedBody.apply(to,(0,Nd.default)(co)),specPath:(0,$e.default)(Gn).call(Gn,0,-1).push("requestBody"),requestBody:Js,requestBodyValue:to.requestBodyValue.apply(to,(0,Nd.default)(co)),requestBodyInclusionSetting:to.requestBodyInclusionSetting.apply(to,(0,Nd.default)(co)),requestBodyErrors:to.requestBodyErrors.apply(to,(0,Nd.default)(co)),isExecute:Ms,getConfigs:_i,activeExamplesKey:to.activeExamplesMember.apply(to,(0,o.default)(tt=(0,Nd.default)(co)).call(tt,["requestBody","requestBody"])),updateActiveExamplesKey:function(rs){at.props.oas3Actions.setActiveExamplesMember({name:rs,pathMethod:at.props.pathMethod,contextType:"requestBody",contextName:"requestBody"})},onChange:function(rs,na){if(na){var vl=to.requestBodyValue.apply(to,(0,Nd.default)(co)),qc=bt.Map.isMap(vl)?vl:(0,bt.Map)();return qi.setRequestBodyValue({pathMethod:co,value:qc.setIn(na,rs)})}qi.setRequestBodyValue({value:rs,pathMethod:co})},onChangeIncludeEmpty:function(rs,na){qi.setRequestBodyInclusion({pathMethod:co,value:na,name:rs})},contentType:to.requestContentType.apply(to,(0,Nd.default)(co))}))))}}]),gt}(G.Component);(0,Q.default)(LE,"defaultProps",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,tryItOutEnabled:!1,allowTryItOut:!0,onChangeKey:[],specPath:[]});const EC=function(An){return G.default.createElement("div",{className:"parameter__extension"},An.xKey,": ",String(An.xVal))};var kE=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onCheckboxChange",function(on){(0,tt.props.onChange)(on.target.checked)}),tt}return(0,le.default)(gt,[{key:"componentDidMount",value:function(){var qe=this.props,tt=qe.isIncludedOptions;tt.shouldDispatchInit&&(0,qe.onChange)(tt.defaultValue)}},{key:"render",value:function(){var qe=this.props,tt=qe.isIncluded,at=qe.isDisabled;return G.default.createElement("div",null,G.default.createElement("label",{className:(0,jd.default)("parameter__empty_value_toggle",{disabled:at})},G.default.createElement("input",{type:"checkbox",disabled:at,checked:!at&&tt,onChange:this.onCheckboxChange}),"Send empty value"))}}]),gt}(G.Component);(0,Q.default)(kE,"defaultProps",{onChange:function(){},isIncludedOptions:{}});var x0=Po(9069),SC=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;return(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"onChangeWrapper",function(Ft){var Lt=arguments.length>1&&void 0!==arguments[1]&&arguments[1],on=at.props,wn=on.onChange,tr=on.rawParam;return wn(tr,""===Ft||Ft&&0===Ft.size?null:Ft,Lt)}),(0,Q.default)((0,Ii.default)(at),"_onExampleSelect",function(Ft){at.props.oas3Actions.setActiveExamplesMember({name:Ft,pathMethod:at.props.pathMethod,contextType:"parameters",contextName:at.getParamKey()})}),(0,Q.default)((0,Ii.default)(at),"onChangeIncludeEmpty",function(Ft){var Lt=at.props,on=Lt.specActions,wn=Lt.param,tr=Lt.pathMethod,Gn=wn.get("name"),dr=wn.get("in");return on.updateEmptyParamInclusion(tr,Gn,dr,Ft)}),(0,Q.default)((0,Ii.default)(at),"setDefaultValue",function(){var Ft=at.props,Lt=Ft.specSelectors,on=Ft.pathMethod,tr=Ft.oas3Selectors,Gn=Lt.parameterWithMetaByIdentity(on,Ft.rawParam)||(0,bt.Map)(),dr=(0,x0.Z)(Gn,{isOAS3:Lt.isOAS3()}).schema,Ti=Gn.get("content",(0,bt.Map)()).keySeq().first(),_i=dr?(0,Nn.xi)(dr.toJS(),Ti,{includeWriteOnly:!0}):null;if(Gn&&void 0===Gn.get("value")&&"body"!==Gn.get("in")){var Pi;if(Lt.isSwagger2())Pi=void 0!==Gn.get("x-example")?Gn.get("x-example"):void 0!==Gn.getIn(["schema","example"])?Gn.getIn(["schema","example"]):dr&&dr.getIn(["default"]);else if(Lt.isOAS3()){var Li,co=tr.activeExamplesMember.apply(tr,(0,o.default)(Li=(0,Nd.default)(on)).call(Li,["parameters",at.getParamKey()]));Pi=void 0!==Gn.getIn(["examples",co,"value"])?Gn.getIn(["examples",co,"value"]):void 0!==Gn.getIn(["content",Ti,"example"])?Gn.getIn(["content",Ti,"example"]):void 0!==Gn.get("example")?Gn.get("example"):void 0!==(dr&&dr.get("example"))?dr&&dr.get("example"):void 0!==(dr&&dr.get("default"))?dr&&dr.get("default"):Gn.get("default")}void 0===Pi||bt.List.isList(Pi)||(Pi=(0,Nn.Pz)(Pi)),void 0!==Pi?at.onChangeWrapper(Pi):dr&&"object"===dr.get("type")&&_i&&!Gn.get("examples")&&at.onChangeWrapper(bt.List.isList(_i)?_i:(0,Nn.Pz)(_i))}}),at.setDefaultValue(),at}return(0,le.default)(gt,[{key:"UNSAFE_componentWillReceiveProps",value:function(qe){var tt,at=qe.specSelectors,Ft=qe.pathMethod,Lt=qe.rawParam,on=at.isOAS3(),wn=at.parameterWithMetaByIdentity(Ft,Lt)||new bt.Map;if(wn=wn.isEmpty()?Lt:wn,on){var tr=(0,x0.Z)(wn,{isOAS3:on}).schema;tt=tr?tr.get("enum"):void 0}else tt=wn?wn.get("enum"):void 0;var Gn,dr=wn?wn.get("value"):void 0;void 0!==dr?Gn=dr:Lt.get("required")&&tt&&tt.size&&(Gn=tt.first()),void 0!==Gn&&Gn!==dr&&this.onChangeWrapper((0,Nn.D$)(Gn)),this.setDefaultValue()}},{key:"getParamKey",value:function(){var qe,tt=this.props.param;return tt?(0,o.default)(qe="".concat(tt.get("name"),"-")).call(qe,tt.get("in")):null}},{key:"render",value:function(){var qe,tt,at,Ft,Lt=this.props,on=Lt.param,wn=Lt.rawParam,tr=Lt.getComponent,Gn=Lt.getConfigs,dr=Lt.isExecute,Ti=Lt.fn,_i=Lt.onChangeConsumes,Pi=Lt.specSelectors,Li=Lt.pathMethod,co=Lt.specPath,qi=Lt.oas3Selectors,to=Pi.isOAS3(),Cs=Gn(),Ls=Cs.showExtensions,ta=Cs.showCommonExtensions;if(on||(on=wn),!wn)return null;var xs,Rs,ks,Ms,Ua=tr("JsonSchemaForm"),Js=tr("ParamBody"),Sa=on.get("in"),rs="body"!==Sa?null:G.default.createElement(Js,{getComponent:tr,getConfigs:Gn,fn:Ti,param:on,consumes:Pi.consumesOptionsFor(Li),consumesValue:Pi.contentTypeValues(Li).get("requestContentType"),onChange:this.onChangeWrapper,onChangeConsumes:_i,isExecute:dr,specSelectors:Pi,pathMethod:Li}),na=tr("modelExample"),vl=tr("Markdown",!0),qc=tr("ParameterExt"),pf=tr("ParameterIncludeEmpty"),hf=tr("ExamplesSelectValueRetainer"),Vf=tr("Example"),Wl=(0,x0.Z)(on,{isOAS3:to}).schema,ed=Pi.parameterWithMetaByIdentity(Li,wn)||(0,bt.Map)(),lc=Wl?Wl.get("format"):null,vp=Wl?Wl.get("type"):null,sp=Wl?Wl.getIn(["items","type"]):null,F_="formData"===Sa,Gd="FormData"in xn.Z,uc=on.get("required"),Vd=ed?ed.get("value"):"",_f=ta?(0,Nn.po)(Wl):null,mf=Ls?(0,Nn.nX)(on):null,$h=!1;return void 0!==on&&Wl&&(xs=Wl.get("items")),void 0!==xs?(Rs=xs.get("enum"),ks=xs.get("default")):Wl&&(Rs=Wl.get("enum")),Rs&&Rs.size&&Rs.size>0&&($h=!0),void 0!==on&&(Wl&&(ks=Wl.get("default")),void 0===ks&&(ks=on.get("default")),void 0===(Ms=on.get("example"))&&(Ms=on.get("x-example"))),G.default.createElement("tr",{"data-param-name":on.get("name"),"data-param-in":on.get("in")},G.default.createElement("td",{className:"parameters-col_name"},G.default.createElement("div",{className:uc?"parameter__name required":"parameter__name"},on.get("name"),uc?G.default.createElement("span",null,"\xa0*"):null),G.default.createElement("div",{className:"parameter__type"},vp,sp&&"[".concat(sp,"]"),lc&&G.default.createElement("span",{className:"prop-format"},"($",lc,")")),G.default.createElement("div",{className:"parameter__deprecated"},to&&on.get("deprecated")?"deprecated":null),G.default.createElement("div",{className:"parameter__in"},"(",on.get("in"),")"),ta&&_f.size?(0,we.default)(qe=_f.entrySeq()).call(qe,function(Id){var Fd,Df=(0,Ba.default)(Id,2),Hh=Df[0],Wm=Df[1];return G.default.createElement(qc,{key:(0,o.default)(Fd="".concat(Hh,"-")).call(Fd,Wm),xKey:Hh,xVal:Wm})}):null,Ls&&mf.size?(0,we.default)(tt=mf.entrySeq()).call(tt,function(Id){var Fd,Df=(0,Ba.default)(Id,2),Hh=Df[0],Wm=Df[1];return G.default.createElement(qc,{key:(0,o.default)(Fd="".concat(Hh,"-")).call(Fd,Wm),xKey:Hh,xVal:Wm})}):null),G.default.createElement("td",{className:"parameters-col_description"},on.get("description")?G.default.createElement(vl,{source:on.get("description")}):null,!rs&&dr||!$h?null:G.default.createElement(vl,{className:"parameter__enum",source:"<i>Available values</i> : "+(0,we.default)(Rs).call(Rs,function(Id){return Id}).toArray().join(", ")}),!rs&&dr||void 0===ks?null:G.default.createElement(vl,{className:"parameter__default",source:"<i>Default value</i> : "+ks}),!rs&&dr||void 0===Ms?null:G.default.createElement(vl,{source:"<i>Example</i> : "+Ms}),F_&&!Gd&&G.default.createElement("div",null,"Error: your browser does not support FormData"),to&&on.get("examples")?G.default.createElement("section",{className:"parameter-controls"},G.default.createElement(hf,{examples:on.get("examples"),onSelect:this._onExampleSelect,updateValue:this.onChangeWrapper,getComponent:tr,defaultToFirstExample:!0,currentKey:qi.activeExamplesMember.apply(qi,(0,o.default)(at=(0,Nd.default)(Li)).call(at,["parameters",this.getParamKey()])),currentUserInputValue:Vd})):null,rs?null:G.default.createElement(Ua,{fn:Ti,getComponent:tr,value:Vd,required:uc,disabled:!dr,description:on.get("name"),onChange:this.onChangeWrapper,errors:ed.get("errors"),schema:Wl}),rs&&Wl?G.default.createElement(na,{getComponent:tr,specPath:co.push("schema"),getConfigs:Gn,isExecute:dr,specSelectors:Pi,schema:Wl,example:rs,includeWriteOnly:!0}):null,!rs&&dr&&on.get("allowEmptyValue")?G.default.createElement(pf,{onChange:this.onChangeIncludeEmpty,isIncluded:Pi.parameterInclusionSettingFor(Li,on.get("name"),on.get("in")),isDisabled:!(0,Nn.O2)(Vd)}):null,to&&on.get("examples")?G.default.createElement(Vf,{example:on.getIn(["examples",qi.activeExamplesMember.apply(qi,(0,o.default)(Ft=(0,Nd.default)(Li)).call(Ft,["parameters",this.getParamKey()]))]),getComponent:tr,getConfigs:Gn}):null))}}]),gt}(G.Component),TC=Po(6235),CC=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"handleValidateParameters",function(){var on=tt.props,wn=on.specSelectors,Gn=on.path,dr=on.method;return on.specActions.validateParams([Gn,dr]),wn.validateBeforeExecute([Gn,dr])}),(0,Q.default)((0,Ii.default)(tt),"handleValidateRequestBody",function(){var on=tt.props,wn=on.path,tr=on.method,Gn=on.specSelectors,dr=on.oas3Selectors,Ti=on.oas3Actions,_i={missingBodyValue:!1,missingRequiredKeys:[]};Ti.clearRequestBodyValidateError({path:wn,method:tr});var Pi=Gn.getOAS3RequiredRequestBodyContentType([wn,tr]),Li=dr.requestBodyValue(wn,tr),co=dr.validateBeforeExecute([wn,tr]),qi=dr.requestContentType(wn,tr);if(!co)return _i.missingBodyValue=!0,Ti.setRequestBodyValidateError({path:wn,method:tr,validationErrors:_i}),!1;if(!Pi)return!0;var to=dr.validateShallowRequired({oas3RequiredRequestBodyContentType:Pi,oas3RequestContentType:qi,oas3RequestBodyValue:Li});return!to||to.length<1||((0,nu.default)(to).call(to,function(Cs){_i.missingRequiredKeys.push(Cs)}),Ti.setRequestBodyValidateError({path:wn,method:tr,validationErrors:_i}),!1)}),(0,Q.default)((0,Ii.default)(tt),"handleValidationResultPass",function(){var on=tt.props,wn=on.specActions,tr=on.operation,Gn=on.path,dr=on.method;tt.props.onExecute&&tt.props.onExecute(),wn.execute({operation:tr,path:Gn,method:dr})}),(0,Q.default)((0,Ii.default)(tt),"handleValidationResultFail",function(){var on=tt.props,wn=on.specActions,tr=on.path,Gn=on.method;wn.clearValidateParams([tr,Gn]),(0,TC.default)(function(){wn.validateParams([tr,Gn])},40)}),(0,Q.default)((0,Ii.default)(tt),"handleValidationResult",function(on){on?tt.handleValidationResultPass():tt.handleValidationResultFail()}),(0,Q.default)((0,Ii.default)(tt),"onClick",function(){var on=tt.handleValidateParameters(),wn=tt.handleValidateRequestBody();tt.handleValidationResult(on&&wn)}),(0,Q.default)((0,Ii.default)(tt),"onChangeProducesWrapper",function(on){return tt.props.specActions.changeProducesValue([tt.props.path,tt.props.method],on)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){return G.default.createElement("button",{className:"btn execute opblock-control__btn",onClick:this.onClick,disabled:this.props.disabled},"Execute")}}]),gt}(G.Component),Qa=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this.props,at=tt.headers,Ft=tt.getComponent,Lt=Ft("Property"),on=Ft("Markdown",!0);return at&&at.size?G.default.createElement("div",{className:"headers-wrapper"},G.default.createElement("h4",{className:"headers__title"},"Headers:"),G.default.createElement("table",{className:"headers"},G.default.createElement("thead",null,G.default.createElement("tr",{className:"header-row"},G.default.createElement("th",{className:"header-col"},"Name"),G.default.createElement("th",{className:"header-col"},"Description"),G.default.createElement("th",{className:"header-col"},"Type"))),G.default.createElement("tbody",null,(0,we.default)(qe=at.entrySeq()).call(qe,function(wn){var tr=(0,Ba.default)(wn,2),Gn=tr[0],dr=tr[1];if(!bt.default.Map.isMap(dr))return null;var Ti=dr.get("description"),_i=dr.getIn(["schema"])?dr.getIn(["schema","type"]):dr.getIn(["type"]),Pi=dr.getIn(["schema","example"]);return G.default.createElement("tr",{key:Gn},G.default.createElement("td",{className:"header-col"},Gn),G.default.createElement("td",{className:"header-col"},Ti?G.default.createElement(on,{source:Ti}):null),G.default.createElement("td",{className:"header-col"},_i," ",Pi?G.default.createElement(Lt,{propKey:"Example",propVal:Pi,propClass:"header-example"}):null))}).toArray()))):null}}]),gt}(G.default.Component),Ru=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.editorActions,at=qe.errSelectors,Ft=qe.layoutSelectors,Lt=qe.layoutActions,on=(0,qe.getComponent)("Collapse");if(tt&&tt.jumpToLine)var wn=tt.jumpToLine;var tr=at.allErrors(),Gn=(0,_.default)(tr).call(tr,function(_i){return"thrown"===_i.get("type")||"error"===_i.get("level")});if(!Gn||Gn.count()<1)return null;var dr=Ft.isShown(["errorPane"],!0),Ti=Gn.sortBy(function(_i){return _i.get("line")});return G.default.createElement("pre",{className:"errors-wrapper"},G.default.createElement("hgroup",{className:"error"},G.default.createElement("h4",{className:"errors__title"},"Errors"),G.default.createElement("button",{className:"btn errors__clear-btn",onClick:function(){return Lt.show(["errorPane"],!dr)}},dr?"Hide":"Show")),G.default.createElement(on,{isOpened:dr,animated:!0},G.default.createElement("div",{className:"errors"},(0,we.default)(Ti).call(Ti,function(_i,Pi){var Li=_i.get("type");return"thrown"===Li||"auth"===Li?G.default.createElement(Kc,{key:Pi,error:_i.get("error")||_i,jumpToLine:wn}):"spec"===Li?G.default.createElement(Qv,{key:Pi,error:_i,jumpToLine:wn}):void 0}))))}}]),gt}(G.default.Component),Kc=function(An){var un=An.error,gt=An.jumpToLine;if(!un)return null;var qe=un.get("line");return G.default.createElement("div",{className:"error-wrapper"},un?G.default.createElement("div",null,G.default.createElement("h4",null,un.get("source")&&un.get("level")?tv(un.get("source"))+" "+un.get("level"):"",un.get("path")?G.default.createElement("small",null," at ",un.get("path")):null),G.default.createElement("span",{className:"message thrown"},un.get("message")),G.default.createElement("div",{className:"error-line"},qe&&gt?G.default.createElement("a",{onClick:(0,_e.default)(gt).call(gt,null,qe)},"Jump to line ",qe):null)):null)},Qv=function(An){var un=An.error,gt=An.jumpToLine,qe=null;return un.get("path")?qe=bt.List.isList(un.get("path"))?G.default.createElement("small",null,"at ",un.get("path").join(".")):G.default.createElement("small",null,"at ",un.get("path")):un.get("line")&&!gt&&(qe=G.default.createElement("small",null,"on line ",un.get("line"))),G.default.createElement("div",{className:"error-wrapper"},un?G.default.createElement("div",null,G.default.createElement("h4",null,tv(un.get("source"))+" "+un.get("level"),"\xa0",qe),G.default.createElement("span",{className:"message"},un.get("message")),G.default.createElement("div",{className:"error-line"},gt?G.default.createElement("a",{onClick:(0,_e.default)(gt).call(gt,null,un.get("line"))},"Jump to line ",un.get("line")):null)):null)};function tv(An){var un;return(0,we.default)(un=(An||"").split(" ")).call(un,function(gt){return gt[0].toUpperCase()+(0,$e.default)(gt).call(gt,1)}).join(" ")}Kc.defaultProps={jumpToLine:null};var Xv=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onChangeWrapper",function(on){return tt.props.onChange(on.target.value)}),tt}return(0,le.default)(gt,[{key:"componentDidMount",value:function(){this.props.contentTypes&&this.props.onChange(this.props.contentTypes.first())}},{key:"UNSAFE_componentWillReceiveProps",value:function(qe){var tt;qe.contentTypes&&qe.contentTypes.size&&((0,zl.default)(tt=qe.contentTypes).call(tt,qe.value)||qe.onChange(qe.contentTypes.first()))}},{key:"render",value:function(){var qe=this.props,Lt=qe.contentTypes;return Lt&&Lt.size?G.default.createElement("div",{className:"content-type-wrapper "+(qe.className||"")},G.default.createElement("select",{"aria-controls":qe.ariaControls,"aria-label":qe.ariaLabel,className:"content-type",id:qe.controlId,onChange:this.onChangeWrapper,value:qe.value||""},(0,we.default)(Lt).call(Lt,function(tr){return G.default.createElement("option",{key:tr,value:tr},tr)}).toArray())):null}}]),gt}(G.default.Component);(0,Q.default)(Xv,"defaultProps",{onChange:function(){},value:null,contentTypes:(0,bt.fromJS)(["application/json"])});var kp=Po(863),nv=Po(302),d$=Po(5942),f$=["fullscreen","full"],p$=["hide","keepContents","mobile","tablet","desktop","large"];function $E(){for(var An,un=arguments.length,gt=new Array(un),qe=0;qe<un;qe++)gt[qe]=arguments[qe];return(0,d$.default)(An=(0,_.default)(gt).call(gt,function(tt){return!!tt}).join(" ")).call(An)}var h$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.fullscreen,at=qe.full,Ft=(0,nv.default)(qe,f$);return G.default.createElement("section",tt?Ft:(0,kp.default)({},Ft,{className:$E(Ft.className,"swagger-container"+(at?"-full":""))}))}}]),gt}(G.default.Component),cD={mobile:"",tablet:"-tablet",desktop:"-desktop",large:"-hd"},_$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this.props,at=tt.hide,Ft=tt.keepContents,Lt=(0,nv.default)(tt,p$);if(at&&!Ft)return G.default.createElement("span",null);var on=[];for(var wn in cD)if(Object.prototype.hasOwnProperty.call(cD,wn)){var tr=cD[wn];if(wn in this.props){var Gn=this.props[wn];if(Gn<1){on.push("none"+tr);continue}on.push("block"+tr),on.push("col-"+Gn+tr)}}at&&on.push("hidden");var dr=$E.apply(void 0,(0,o.default)(qe=[Lt.className]).call(qe,on));return G.default.createElement("section",(0,kp.default)({},Lt,{className:dr}))}}]),gt}(G.default.Component),m$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){return G.default.createElement("div",(0,kp.default)({},this.props,{className:$E(this.props.className,"wrapper")}))}}]),gt}(G.default.Component),X3=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){return G.default.createElement("button",(0,kp.default)({},this.props,{className:$E(this.props.className,"button")}))}}]),gt}(G.default.Component);(0,Q.default)(X3,"defaultProps",{className:""});var g$=function(An){return G.default.createElement("textarea",An)},v$=function(An){return G.default.createElement("input",An)},K3=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;return(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"onChange",function(Lt){var on,wn,tr=at.props,Gn=tr.onChange,dr=tr.multiple,Ti=(0,$e.default)([]).call(Lt.target.options);on=dr?(0,we.default)(wn=(0,_.default)(Ti).call(Ti,function(_i){return _i.selected})).call(wn,function(_i){return _i.value}):Lt.target.value,at.setState({value:on}),Gn&&Gn(on)}),at.state={value:qe.value?qe.value:qe.multiple?[""]:""},at}return(0,le.default)(gt,[{key:"UNSAFE_componentWillReceiveProps",value:function(qe){qe.value!==this.props.value&&this.setState({value:qe.value})}},{key:"render",value:function(){var qe,tt,at=this.props,Ft=at.allowedValues,Lt=at.multiple,on=at.allowEmptyValue,wn=at.disabled,tr=(null===(qe=this.state.value)||void 0===qe||null===(tt=qe.toJS)||void 0===tt?void 0:tt.call(qe))||this.state.value;return G.default.createElement("select",{className:this.props.className,multiple:Lt,value:tr,onChange:this.onChange,disabled:wn},on?G.default.createElement("option",{value:""},"--"):null,(0,we.default)(Ft).call(Ft,function(Gn,dr){return G.default.createElement("option",{key:dr,value:String(Gn)},String(Gn))}))}}]),gt}(G.default.Component);(0,Q.default)(K3,"defaultProps",{multiple:!1,allowEmptyValue:!0});var q3=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){return G.default.createElement("a",(0,kp.default)({},this.props,{rel:"noopener noreferrer",className:$E(this.props.className,"link")}))}}]),gt}(G.default.Component),eP=function(An){return G.default.createElement("div",{className:"no-margin"}," ",An.children," ")},tP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"renderNotAnimated",value:function(){return this.props.isOpened?G.default.createElement(eP,null,this.props.children):G.default.createElement("noscript",null)}},{key:"render",value:function(){var qe=this.props,Ft=qe.children;return qe.animated?G.default.createElement(eP,null,Ft=qe.isOpened?Ft:null):this.renderNotAnimated()}}]),gt}(G.default.Component);(0,Q.default)(tP,"defaultProps",{isOpened:!1,animated:!1});var y$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt,at;(0,oe.default)(this,gt);for(var Ft=arguments.length,Lt=new Array(Ft),on=0;on<Ft;on++)Lt[on]=arguments[on];return(at=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Lt))).setTagShown=(0,_e.default)(tt=at._setTagShown).call(tt,(0,Ii.default)(at)),at}return(0,le.default)(gt,[{key:"_setTagShown",value:function(qe,tt){this.props.layoutActions.show(qe,tt)}},{key:"showOp",value:function(qe,tt){this.props.layoutActions.show(qe,tt)}},{key:"render",value:function(){var qe=this.props,at=qe.layoutSelectors,Ft=qe.layoutActions,Lt=qe.getComponent,on=qe.specSelectors.taggedOperations(),wn=Lt("Collapse");return G.default.createElement("div",null,G.default.createElement("h4",{className:"overview-title"},"Overview"),(0,we.default)(on).call(on,function(tr,Gn){var dr=tr.get("operations"),Ti=["overview-tags",Gn],_i=at.isShown(Ti,!0);return G.default.createElement("div",{key:"overview-"+Gn},G.default.createElement("h4",{onClick:function(){return Ft.show(Ti,!_i)},className:"link overview-tag"}," ",_i?"-":"+",Gn),G.default.createElement(wn,{isOpened:_i,animated:!0},(0,we.default)(dr).call(dr,function(Pi){var Li=Pi.toObject(),co=Li.path,qi=Li.method,to=Li.id,Cs="operations",Ls=to,ta=at.isShown([Cs,Ls]);return G.default.createElement(E$,{key:to,path:co,method:qi,id:co+"-"+qi,shown:ta,showOpId:Ls,showOpIdPrefix:Cs,href:"#operation-".concat(Ls),onClick:Ft.show})}).toArray()))}).toArray(),on.size<1&&G.default.createElement("h3",null," No operations defined in spec! "))}}]),gt}(G.default.Component),E$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe){var tt,at;return(0,oe.default)(this,gt),(at=un.call(this,qe)).onClick=(0,_e.default)(tt=at._onClick).call(tt,(0,Ii.default)(at)),at}return(0,le.default)(gt,[{key:"_onClick",value:function(){var qe=this.props;(0,qe.onClick)([qe.showOpIdPrefix,qe.showOpId],!qe.shown)}},{key:"render",value:function(){var qe=this.props,tt=qe.id,at=qe.method;return G.default.createElement(q3,{href:qe.href,onClick:this.onClick,className:"block opblock-link ".concat(qe.shown?"shown":"")},G.default.createElement("div",null,G.default.createElement("small",{className:"bold-label-".concat(at)},at.toUpperCase()),G.default.createElement("span",{className:"bold-label"},tt)))}}]),gt}(G.default.Component),b$=["value","defaultValue","initialValue"],S$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"componentDidMount",value:function(){this.props.initialValue&&(this.inputRef.value=this.props.initialValue)}},{key:"render",value:function(){var qe=this,at=(0,nv.default)(this.props,b$);return G.default.createElement("input",(0,kp.default)({},at,{ref:function(Ft){return qe.inputRef=Ft}}))}}]),gt}(G.default.Component),T$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props;return G.default.createElement("pre",{className:"base-url"},"[ Base URL: ",qe.host,qe.basePath," ]")}}]),gt}(G.default.Component),C$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.data,at=qe.getComponent,Ft=qe.selectedServer,Lt=qe.url,on=tt.get("name")||"the developer",wn=Bi(tt.get("url"),Lt,{selectedServer:Ft}),tr=tt.get("email"),Gn=at("Link");return G.default.createElement("div",{className:"info__contact"},wn&&G.default.createElement("div",null,G.default.createElement(Gn,{href:(0,Nn.Nm)(wn),target:"_blank"},on," - Website")),tr&&G.default.createElement(Gn,{href:(0,Nn.Nm)("mailto:".concat(tr))},wn?"Send email to ".concat(on):"Contact ".concat(on)))}}]),gt}(G.default.Component),M$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.license,Ft=qe.selectedServer,Lt=qe.url,on=(0,qe.getComponent)("Link"),wn=tt.get("name")||"License",tr=Bi(tt.get("url"),Lt,{selectedServer:Ft});return G.default.createElement("div",{className:"info__license"},tr?G.default.createElement(on,{target:"_blank",href:(0,Nn.Nm)(tr)},wn):G.default.createElement("span",null,wn))}}]),gt}(G.default.Component),O$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.url,at=(0,qe.getComponent)("Link");return G.default.createElement(at,{target:"_blank",href:(0,Nn.Nm)(tt)},G.default.createElement("span",{className:"url"}," ",tt))}}]),gt}(G.default.PureComponent),A$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.info,at=qe.url,Ft=qe.host,Lt=qe.basePath,on=qe.getComponent,wn=qe.externalDocs,tr=qe.selectedServer,Gn=qe.url,dr=tt.get("version"),Ti=tt.get("description"),_i=tt.get("title"),Pi=Bi(tt.get("termsOfService"),Gn,{selectedServer:tr}),Li=tt.get("contact"),co=tt.get("license"),qi=Bi(wn&&wn.get("url"),Gn,{selectedServer:tr}),to=wn&&wn.get("description"),Cs=on("Markdown",!0),Ls=on("Link"),ta=on("VersionStamp"),xs=on("InfoUrl"),Rs=on("InfoBasePath");return G.default.createElement("div",{className:"info"},G.default.createElement("hgroup",{className:"main"},G.default.createElement("h2",{className:"title"},_i,dr&&G.default.createElement(ta,{version:dr})),Ft||Lt?G.default.createElement(Rs,{host:Ft,basePath:Lt}):null,at&&G.default.createElement(xs,{getComponent:on,url:at})),G.default.createElement("div",{className:"description"},G.default.createElement(Cs,{source:Ti})),Pi&&G.default.createElement("div",{className:"info__tos"},G.default.createElement(Ls,{target:"_blank",href:(0,Nn.Nm)(Pi)},"Terms of service")),Li&&Li.size?G.default.createElement(C$,{getComponent:on,data:Li,selectedServer:tr,url:at}):null,co&&co.size?G.default.createElement(M$,{getComponent:on,license:co,selectedServer:tr,url:at}):null,qi?G.default.createElement(Ls,{className:"info__extdocs",target:"_blank",href:(0,Nn.Nm)(qi)},to||qi):null)}}]),gt}(G.default.Component),D$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.specSelectors,at=qe.getComponent,Ft=qe.oas3Selectors,Lt=tt.info(),on=tt.url(),wn=tt.basePath(),tr=tt.host(),Gn=tt.externalDocs(),dr=Ft.selectedServer(),Ti=at("info");return G.default.createElement("div",null,Lt&&Lt.count()?G.default.createElement(Ti,{info:Lt,url:on,host:tr,basePath:wn,externalDocs:Gn,getComponent:at,selectedServer:dr}):null)}}]),gt}(G.default.Component),x$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){return null}}]),gt}(G.default.Component),R$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){return G.default.createElement("div",{className:"footer"})}}]),gt}(G.default.Component),w$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onFilterChange",function(on){tt.props.layoutActions.updateFilter(on.target.value)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.specSelectors,at=qe.layoutSelectors,Ft=(0,qe.getComponent)("Col"),Lt="loading"===tt.loadingStatus(),on="failed"===tt.loadingStatus(),wn=at.currentFilter(),tr=["operation-filter-input"];return on&&tr.push("failed"),Lt&&tr.push("loading"),G.default.createElement("div",null,null===wn||!1===wn||"false"===wn?null:G.default.createElement("div",{className:"filter-container"},G.default.createElement(Ft,{className:"filter wrapper",mobile:12},G.default.createElement("input",{className:tr.join(" "),placeholder:"Filter by tag",type:"text",onChange:this.onFilterChange,value:!0===wn||"true"===wn?"":wn,disabled:Lt}))))}}]),gt}(G.default.Component),dD=Function.prototype,nP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;return(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"updateValues",function(Ft){var Lt=Ft.param,on=Ft.isExecute,wn=Ft.consumesValue,tr=void 0===wn?"":wn,Gn=/xml/i.test(tr),dr=/json/i.test(tr),Ti=Lt.get(Gn?"value_xml":"value");if(void 0!==Ti){var _i=!Ti&&dr?"{}":Ti;at.setState({value:_i}),at.onChange(_i,{isXml:Gn,isEditBox:on})}else Gn?at.onChange(at.sample("xml"),{isXml:Gn,isEditBox:on}):at.onChange(at.sample(),{isEditBox:on})}),(0,Q.default)((0,Ii.default)(at),"sample",function(Ft){var Lt=at.props,wn=(0,Lt.fn.inferSchema)(Lt.param.toJS());return(0,Nn.xi)(wn,Ft,{includeWriteOnly:!0})}),(0,Q.default)((0,Ii.default)(at),"onChange",function(Ft,Lt){var wn=Lt.isXml;at.setState({value:Ft,isEditBox:Lt.isEditBox}),at._onChange(Ft,wn)}),(0,Q.default)((0,Ii.default)(at),"_onChange",function(Ft,Lt){(at.props.onChange||dD)(Ft,Lt)}),(0,Q.default)((0,Ii.default)(at),"handleOnChange",function(Ft){var on=/xml/i.test(at.props.consumesValue);at.onChange(Ft.target.value,{isXml:on,isEditBox:at.state.isEditBox})}),(0,Q.default)((0,Ii.default)(at),"toggleIsEditBox",function(){return at.setState(function(Ft){return{isEditBox:!Ft.isEditBox}})}),at.state={isEditBox:!1,value:""},at}return(0,le.default)(gt,[{key:"componentDidMount",value:function(){this.updateValues.call(this,this.props)}},{key:"UNSAFE_componentWillReceiveProps",value:function(qe){this.updateValues.call(this,qe)}},{key:"render",value:function(){var qe=this.props,tt=qe.onChangeConsumes,at=qe.param,Ft=qe.isExecute,Lt=qe.specSelectors,on=qe.pathMethod,wn=qe.getConfigs,tr=qe.getComponent,Gn=tr("Button"),dr=tr("TextArea"),Ti=tr("highlightCode"),_i=tr("contentType"),Pi=(Lt?Lt.parameterWithMetaByIdentity(on,at):at).get("errors",(0,bt.List)()),Li=Lt.contentTypeValues(on).get("requestContentType"),co=this.props.consumes&&this.props.consumes.size?this.props.consumes:gt.defaultProp.consumes,qi=this.state,to=qi.value,Cs=qi.isEditBox,Ls=null;return(0,bm.O)(to)&&(Ls="json"),G.default.createElement("div",{className:"body-param","data-param-name":at.get("name"),"data-param-in":at.get("in")},Cs&&Ft?G.default.createElement(dr,{className:"body-param__text"+(Pi.count()?" invalid":""),value:to,onChange:this.handleOnChange}):to&&G.default.createElement(Ti,{className:"body-param__example",language:Ls,getConfigs:wn,value:to}),G.default.createElement("div",{className:"body-param-options"},Ft?G.default.createElement("div",{className:"body-param-edit"},G.default.createElement(Gn,{className:Cs?"btn cancel body-param__example-edit":"btn edit body-param__example-edit",onClick:this.toggleIsEditBox},Cs?"Cancel":"Edit")):null,G.default.createElement("label",{htmlFor:""},G.default.createElement("span",null,"Parameter content type"),G.default.createElement(_i,{value:Li,contentTypes:co,onChange:tt,className:"body-param-content-type",ariaLabel:"Parameter content type"}))))}}]),gt}(G.PureComponent);(0,Q.default)(nP,"defaultProp",{consumes:(0,bt.fromJS)(["application/json"]),param:(0,bt.fromJS)({}),onChange:dD,onChangeConsumes:dD});var P$=Po(4624),N$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,at=qe.getConfigs,Ft=(0,P$.requestSnippetGenerator_curl_bash)(qe.request),Lt=at(),on=(0,Pl.default)(Lt,"syntaxHighlight.activated")?G.default.createElement(op.d3,{language:"bash",className:"curl microlight",style:(0,op.C2)((0,Pl.default)(Lt,"syntaxHighlight.theme"))},Ft):G.default.createElement("textarea",{readOnly:!0,className:"curl",value:Ft});return G.default.createElement("div",{className:"curl-command"},G.default.createElement("h4",null,"Curl"),G.default.createElement("div",{className:"copy-to-clipboard"},G.default.createElement(so.CopyToClipboard,{text:Ft},G.default.createElement("button",null))),G.default.createElement("div",null,on))}}]),gt}(G.default.Component),I$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onChange",function(on){tt.setScheme(on.target.value)}),(0,Q.default)((0,Ii.default)(tt),"setScheme",function(on){var wn=tt.props;wn.specActions.setScheme(on,wn.path,wn.method)}),tt}return(0,le.default)(gt,[{key:"UNSAFE_componentWillMount",value:function(){this.setScheme(this.props.schemes.first())}},{key:"UNSAFE_componentWillReceiveProps",value:function(qe){var tt;this.props.currentScheme&&(0,zl.default)(tt=qe.schemes).call(tt,this.props.currentScheme)||this.setScheme(qe.schemes.first())}},{key:"render",value:function(){var qe,tt=this.props,at=tt.schemes,Ft=tt.currentScheme;return G.default.createElement("label",{htmlFor:"schemes"},G.default.createElement("span",{className:"schemes-title"},"Schemes"),G.default.createElement("select",{onChange:this.onChange,value:Ft},(0,we.default)(qe=at.valueSeq()).call(qe,function(Lt){return G.default.createElement("option",{value:Lt,key:Lt},Lt)}).toArray()))}}]),gt}(G.default.Component),F$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.specActions,at=qe.specSelectors,Ft=qe.getComponent,Lt=at.operationScheme(),on=at.schemes(),wn=Ft("schemes");return on&&on.size?G.default.createElement(wn,{currentScheme:Lt,schemes:on,specActions:tt}):null}}]),gt}(G.default.Component),rP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"toggleCollapsed",function(){at.props.onToggle&&at.props.onToggle(at.props.modelName,!at.state.expanded),at.setState({expanded:!at.state.expanded})}),(0,Q.default)((0,Ii.default)(at),"onLoad",function(wn){if(wn&&at.props.layoutSelectors){var tr=at.props.layoutSelectors.getScrollToKey();bt.default.is(tr,at.props.specPath)&&at.toggleCollapsed(),at.props.layoutActions.readyToScroll(at.props.specPath,wn.parentElement)}});var Ft=at.props;return at.state={expanded:Ft.expanded,collapsedContent:Ft.collapsedContent||gt.defaultProps.collapsedContent},at}return(0,le.default)(gt,[{key:"componentDidMount",value:function(){var qe=this.props,at=qe.expanded;qe.hideSelfOnExpand&&at&&this.props.onToggle(qe.modelName,at)}},{key:"UNSAFE_componentWillReceiveProps",value:function(qe){this.props.expanded!==qe.expanded&&this.setState({expanded:qe.expanded})}},{key:"render",value:function(){var qe=this.props,tt=qe.title,at=qe.classes;return this.state.expanded&&this.props.hideSelfOnExpand?G.default.createElement("span",{className:at||""},this.props.children):G.default.createElement("span",{className:at||"",ref:this.onLoad},G.default.createElement("button",{"aria-expanded":this.state.expanded,className:"model-box-control",onClick:this.toggleCollapsed},tt&&G.default.createElement("span",{className:"pointer"},tt),G.default.createElement("span",{className:"model-toggle"+(this.state.expanded?"":" collapsed")}),!this.state.expanded&&G.default.createElement("span",null,this.state.collapsedContent)),this.state.expanded&&this.props.children)}}]),gt}(G.Component);(0,Q.default)(rP,"defaultProps",{collapsedContent:"{...}",expanded:!1,title:null,onToggle:function(){},hideSelfOnExpand:!1,specPath:bt.default.List([])});var L$=Po(1798),MC=Po.n(L$),k$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"activeTab",function(Gn){at.setState({activeTab:Gn.target.dataset.name})});var Ft=at.props,on=Ft.isExecute,wn=(0,Ft.getConfigs)().defaultModelRendering,tr=wn;return"example"!==wn&&"model"!==wn&&(tr="example"),on&&(tr="example"),at.state={activeTab:tr},at}return(0,le.default)(gt,[{key:"UNSAFE_componentWillReceiveProps",value:function(qe){qe.isExecute&&!this.props.isExecute&&this.props.example&&this.setState({activeTab:"example"})}},{key:"render",value:function(){var qe=this.props,tt=qe.getComponent,at=qe.specSelectors,Ft=qe.schema,Lt=qe.example,on=qe.isExecute,wn=qe.getConfigs,tr=qe.specPath,Gn=qe.includeReadOnly,dr=qe.includeWriteOnly,Ti=wn().defaultModelExpandDepth,_i=tt("ModelWrapper"),Pi=tt("highlightCode"),Li=MC()(5).toString("base64"),co=MC()(5).toString("base64"),qi=MC()(5).toString("base64"),to=MC()(5).toString("base64"),Cs=at.isOAS3();return G.default.createElement("div",{className:"model-example"},G.default.createElement("ul",{className:"tab",role:"tablist"},G.default.createElement("li",{className:(0,jd.default)("tabitem",{active:"example"===this.state.activeTab}),role:"presentation"},G.default.createElement("button",{"aria-controls":co,"aria-selected":"example"===this.state.activeTab,className:"tablinks","data-name":"example",id:Li,onClick:this.activeTab,role:"tab"},on?"Edit Value":"Example Value")),Ft&&G.default.createElement("li",{className:(0,jd.default)("tabitem",{active:"model"===this.state.activeTab}),role:"presentation"},G.default.createElement("button",{"aria-controls":to,"aria-selected":"model"===this.state.activeTab,className:(0,jd.default)("tablinks",{inactive:on}),"data-name":"model",id:qi,onClick:this.activeTab,role:"tab"},Cs?"Schema":"Model"))),"example"===this.state.activeTab&&G.default.createElement("div",{"aria-hidden":"example"!==this.state.activeTab,"aria-labelledby":Li,"data-name":"examplePanel",id:co,role:"tabpanel",tabIndex:"0"},Lt||G.default.createElement(Pi,{value:"(no example available)",getConfigs:wn})),"model"===this.state.activeTab&&G.default.createElement("div",{"aria-hidden":"example"===this.state.activeTab,"aria-labelledby":qi,"data-name":"modelPanel",id:to,role:"tabpanel",tabIndex:"0"},G.default.createElement(_i,{schema:Ft,getComponent:tt,getConfigs:wn,specSelectors:at,expandDepth:Ti,specPath:tr,includeReadOnly:Gn,includeWriteOnly:dr})))}}]),gt}(G.default.Component),$$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onToggle",function(on,wn){tt.props.layoutActions&&tt.props.layoutActions.show(tt.props.fullPath,wn)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this.props,Ft=tt.getConfigs,Lt=(0,tt.getComponent)("Model");return this.props.layoutSelectors&&(qe=this.props.layoutSelectors.isShown(this.props.fullPath)),G.default.createElement("div",{className:"model-box"},G.default.createElement(Lt,(0,kp.default)({},this.props,{getConfigs:Ft,expanded:qe,depth:1,onToggle:this.onToggle,expandDepth:this.props.expandDepth||0})))}}]),gt}(G.Component),H$=Po(1543),B$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"getSchemaBasePath",function(){return tt.props.specSelectors.isOAS3()?["components","schemas"]:["definitions"]}),(0,Q.default)((0,Ii.default)(tt),"getCollapsedContent",function(){return" "}),(0,Q.default)((0,Ii.default)(tt),"handleToggle",function(on,wn){var tr,Gn;tt.props.layoutActions.show((0,o.default)(tr=[]).call(tr,(0,Nd.default)(tt.getSchemaBasePath()),[on]),wn),wn&&tt.props.specActions.requestResolvedSubtree((0,o.default)(Gn=[]).call(Gn,(0,Nd.default)(tt.getSchemaBasePath()),[on]))}),(0,Q.default)((0,Ii.default)(tt),"onLoadModels",function(on){on&&tt.props.layoutActions.readyToScroll(tt.getSchemaBasePath(),on)}),(0,Q.default)((0,Ii.default)(tt),"onLoadModel",function(on){if(on){var wn,tr=on.getAttribute("data-name");tt.props.layoutActions.readyToScroll((0,o.default)(wn=[]).call(wn,(0,Nd.default)(tt.getSchemaBasePath()),[tr]),on)}}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this,at=this.props,Ft=at.specSelectors,Lt=at.getComponent,on=at.layoutSelectors,wn=at.layoutActions,tr=at.getConfigs,Gn=Ft.definitions(),dr=tr(),Ti=dr.docExpansion,_i=dr.defaultModelsExpandDepth;if(!Gn.size||_i<0)return null;var Pi=this.getSchemaBasePath(),Li=on.isShown(Pi,_i>0&&"none"!==Ti),co=Ft.isOAS3(),qi=Lt("ModelWrapper"),to=Lt("Collapse"),Cs=Lt("ModelCollapse"),Ls=Lt("JumpToPath",!0);return G.default.createElement("section",{className:Li?"models is-open":"models",ref:this.onLoadModels},G.default.createElement("h4",null,G.default.createElement("button",{"aria-expanded":Li,className:"models-control",onClick:function(){return wn.show(Pi,!Li)}},G.default.createElement("span",null,co?"Schemas":"Models"),G.default.createElement("svg",{width:"20",height:"20","aria-hidden":"true",focusable:"false"},G.default.createElement("use",{xlinkHref:Li?"#large-arrow-up":"#large-arrow-down"})))),G.default.createElement(to,{isOpened:Li},(0,we.default)(qe=Gn.entrySeq()).call(qe,function(ta){var xs,Rs=(0,Ba.default)(ta,1)[0],ks=(0,o.default)(xs=[]).call(xs,(0,Nd.default)(Pi),[Rs]),Ms=bt.default.List(ks),Ua=Ft.specResolvedSubtree(ks),Js=Ft.specJson().getIn(ks),Sa=bt.Map.isMap(Ua)?Ua:bt.default.Map(),rs=bt.Map.isMap(Js)?Js:bt.default.Map(),na=Sa.get("title")||rs.get("title")||Rs,vl=on.isShown(ks,!1);vl&&0===Sa.size&&rs.size>0&&tt.props.specActions.requestResolvedSubtree(ks);var qc=G.default.createElement(qi,{name:Rs,expandDepth:_i,schema:Sa||bt.default.Map(),displayName:na,fullPath:ks,specPath:Ms,getComponent:Lt,specSelectors:Ft,getConfigs:tr,layoutSelectors:on,layoutActions:wn,includeReadOnly:!0,includeWriteOnly:!0}),pf=G.default.createElement("span",{className:"model-box"},G.default.createElement("span",{className:"model model-title"},na));return G.default.createElement("div",{id:"model-".concat(Rs),className:"model-container",key:"models-section-".concat(Rs),"data-name":Rs,ref:tt.onLoadModel},G.default.createElement("span",{className:"models-jump-to-path"},G.default.createElement(Ls,{specPath:Ms})),G.default.createElement(Cs,{classes:"model-box",collapsedContent:tt.getCollapsedContent(Rs),onToggle:tt.handleToggle,title:pf,displayName:na,modelName:Rs,specPath:Ms,layoutSelectors:on,layoutActions:wn,hideSelfOnExpand:!0,expanded:_i>0&&vl},qc))}).toArray()))}}]),gt}(G.Component);const U$=function(An){var un=An.value,gt=(0,An.getComponent)("ModelCollapse"),qe=G.default.createElement("span",null,"Array [ ",un.count()," ]");return G.default.createElement("span",{className:"prop-enum"},"Enum:",G.default.createElement("br",null),G.default.createElement(gt,{collapsedContent:qe},"[ ",un.join(", ")," ]"))};var Y$=["schema","name","displayName","isRef","getComponent","getConfigs","depth","onToggle","expanded","specPath"],j$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt,at,Ft,Lt=this.props,on=Lt.schema,wn=Lt.name,tr=Lt.displayName,Gn=Lt.isRef,dr=Lt.getComponent,Ti=Lt.getConfigs,_i=Lt.depth,Pi=Lt.onToggle,Li=Lt.expanded,co=Lt.specPath,qi=(0,nv.default)(Lt,Y$),to=qi.specSelectors,Cs=qi.expandDepth,Ls=qi.includeReadOnly,ta=qi.includeWriteOnly,xs=to.isOAS3;if(!on)return null;var Rs=Ti().showExtensions,ks=on.get("description"),Ms=on.get("properties"),Ua=on.get("additionalProperties"),Js=on.get("title")||tr||wn,Sa=on.get("required"),rs=(0,_.default)(on).call(on,function(Gd,uc){var Vd;return-1!==(0,Qe.default)(Vd=["maxProperties","minProperties","nullable","example"]).call(Vd,uc)}),na=on.get("deprecated"),vl=dr("JumpToPath",!0),qc=dr("Markdown",!0),pf=dr("Model"),hf=dr("ModelCollapse"),Vf=dr("Property"),Wl=function(){return G.default.createElement("span",{className:"model-jump-to-path"},G.default.createElement(vl,{specPath:co}))},ed=G.default.createElement("span",null,G.default.createElement("span",null,"{"),"...",G.default.createElement("span",null,"}"),Gn?G.default.createElement(Wl,null):""),lc=to.isOAS3()?on.get("anyOf"):null,vp=to.isOAS3()?on.get("oneOf"):null,sp=to.isOAS3()?on.get("not"):null,F_=Js&&G.default.createElement("span",{className:"model-title"},Gn&&on.get("$$ref")&&G.default.createElement("span",{className:"model-hint"},on.get("$$ref")),G.default.createElement("span",{className:"model-title__text"},Js));return G.default.createElement("span",{className:"model"},G.default.createElement(hf,{modelName:wn,title:F_,onToggle:Pi,expanded:!!Li||_i<=Cs,collapsedContent:ed},G.default.createElement("span",{className:"brace-open object"},"{"),Gn?G.default.createElement(Wl,null):null,G.default.createElement("span",{className:"inner-object"},G.default.createElement("table",{className:"model"},G.default.createElement("tbody",null,ks?G.default.createElement("tr",{className:"description"},G.default.createElement("td",null,"description:"),G.default.createElement("td",null,G.default.createElement(qc,{source:ks}))):null,na?G.default.createElement("tr",{className:"property"},G.default.createElement("td",null,"deprecated:"),G.default.createElement("td",null,"true")):null,Ms&&Ms.size?(0,we.default)(qe=(0,_.default)(tt=Ms.entrySeq()).call(tt,function(Gd){var uc=(0,Ba.default)(Gd,2)[1];return(!uc.get("readOnly")||Ls)&&(!uc.get("writeOnly")||ta)})).call(qe,function(Gd){var uc,Vd,_f=(0,Ba.default)(Gd,2),mf=_f[0],$h=_f[1],Id=xs()&&$h.get("deprecated"),Fd=bt.List.isList(Sa)&&Sa.contains(mf),Df=["property-row"];return Id&&Df.push("deprecated"),Fd&&Df.push("required"),G.default.createElement("tr",{key:mf,className:Df.join(" ")},G.default.createElement("td",null,mf,Fd&&G.default.createElement("span",{className:"star"},"*")),G.default.createElement("td",null,G.default.createElement(pf,(0,kp.default)({key:(0,o.default)(uc=(0,o.default)(Vd="object-".concat(wn,"-")).call(Vd,mf,"_")).call(uc,$h)},qi,{required:Fd,getComponent:dr,specPath:co.push("properties",mf),getConfigs:Ti,schema:$h,depth:_i+1}))))}).toArray():null,Rs?G.default.createElement("tr",null,G.default.createElement("td",null,"\xa0")):null,Rs?(0,we.default)(at=on.entrySeq()).call(at,function(Gd){var uc=(0,Ba.default)(Gd,2),Vd=uc[0],_f=uc[1];if("x-"===(0,$e.default)(Vd).call(Vd,0,2)){var mf=_f?_f.toJS?_f.toJS():_f:null;return G.default.createElement("tr",{key:Vd,className:"extension"},G.default.createElement("td",null,Vd),G.default.createElement("td",null,(0,R.default)(mf)))}}).toArray():null,Ua&&Ua.size?G.default.createElement("tr",null,G.default.createElement("td",null,"< * >:"),G.default.createElement("td",null,G.default.createElement(pf,(0,kp.default)({},qi,{required:!1,getComponent:dr,specPath:co.push("additionalProperties"),getConfigs:Ti,schema:Ua,depth:_i+1})))):null,lc?G.default.createElement("tr",null,G.default.createElement("td",null,"anyOf ->"),G.default.createElement("td",null,(0,we.default)(lc).call(lc,function(Gd,uc){return G.default.createElement("div",{key:uc},G.default.createElement(pf,(0,kp.default)({},qi,{required:!1,getComponent:dr,specPath:co.push("anyOf",uc),getConfigs:Ti,schema:Gd,depth:_i+1})))}))):null,vp?G.default.createElement("tr",null,G.default.createElement("td",null,"oneOf ->"),G.default.createElement("td",null,(0,we.default)(vp).call(vp,function(Gd,uc){return G.default.createElement("div",{key:uc},G.default.createElement(pf,(0,kp.default)({},qi,{required:!1,getComponent:dr,specPath:co.push("oneOf",uc),getConfigs:Ti,schema:Gd,depth:_i+1})))}))):null,sp?G.default.createElement("tr",null,G.default.createElement("td",null,"not ->"),G.default.createElement("td",null,G.default.createElement("div",null,G.default.createElement(pf,(0,kp.default)({},qi,{required:!1,getComponent:dr,specPath:co.push("not"),getConfigs:Ti,schema:sp,depth:_i+1}))))):null))),G.default.createElement("span",{className:"brace-close"},"}")),rs.size?(0,we.default)(Ft=rs.entrySeq()).call(Ft,function(Gd){var uc,Vd=(0,Ba.default)(Gd,2),_f=Vd[0],mf=Vd[1];return G.default.createElement(Vf,{key:(0,o.default)(uc="".concat(_f,"-")).call(uc,mf),propKey:_f,propVal:mf,propClass:"property"})}):null)}}]),gt}(G.Component),G$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt=this.props,at=tt.getComponent,Ft=tt.getConfigs,Lt=tt.schema,on=tt.depth,wn=tt.expandDepth,tr=tt.name,Gn=tt.displayName,dr=tt.specPath,Ti=Lt.get("description"),_i=Lt.get("items"),Pi=Lt.get("title")||Gn||tr,Li=(0,_.default)(Lt).call(Lt,function(ta,xs){var Rs;return-1===(0,Qe.default)(Rs=["type","items","description","$$ref"]).call(Rs,xs)}),co=at("Markdown",!0),qi=at("ModelCollapse"),to=at("Model"),Cs=at("Property"),Ls=Pi&&G.default.createElement("span",{className:"model-title"},G.default.createElement("span",{className:"model-title__text"},Pi));return G.default.createElement("span",{className:"model"},G.default.createElement(qi,{title:Ls,expanded:on<=wn,collapsedContent:"[...]"},"[",Li.size?(0,we.default)(qe=Li.entrySeq()).call(qe,function(ta){var xs,Rs=(0,Ba.default)(ta,2),ks=Rs[0],Ms=Rs[1];return G.default.createElement(Cs,{key:(0,o.default)(xs="".concat(ks,"-")).call(xs,Ms),propKey:ks,propVal:Ms,propClass:"property"})}):null,Ti?G.default.createElement(co,{source:Ti}):Li.size?G.default.createElement("div",{className:"markdown"}):null,G.default.createElement("span",null,G.default.createElement(to,(0,kp.default)({},this.props,{getConfigs:Ft,specPath:dr.push("items"),name:null,schema:_i,required:!1,depth:on+1}))),"]"))}}]),gt}(G.Component),OC="property primitive",V$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe,tt,at,Ft=this.props,Lt=Ft.schema,on=Ft.getComponent,tr=Ft.name,Gn=Ft.displayName,dr=Ft.depth,Ti=Ft.expandDepth,_i=(0,Ft.getConfigs)().showExtensions;if(!Lt||!Lt.get)return G.default.createElement("div",null);var Pi=Lt.get("type"),Li=Lt.get("format"),co=Lt.get("xml"),qi=Lt.get("enum"),to=Lt.get("title")||Gn||tr,Cs=Lt.get("description"),Ls=(0,Nn.nX)(Lt),ta=(0,_.default)(Lt).call(Lt,function(Js,Sa){var rs;return-1===(0,Qe.default)(rs=["enum","type","format","description","$$ref"]).call(rs,Sa)}).filterNot(function(Js,Sa){return Ls.has(Sa)}),xs=on("Markdown",!0),Rs=on("EnumModel"),ks=on("Property"),Ms=on("ModelCollapse"),Ua=to&&G.default.createElement("span",{className:"model-title"},G.default.createElement("span",{className:"model-title__text"},to));return G.default.createElement("span",{className:"model"},G.default.createElement(Ms,{title:Ua,expanded:dr>=Ti,collapsedContent:" ",hideSelfOnExpand:Ti!==dr},G.default.createElement("span",{className:"prop"},tr&&dr>1&&G.default.createElement("span",{className:"prop-name"},to),G.default.createElement("span",{className:"prop-type"},Pi),Li&&G.default.createElement("span",{className:"prop-format"},"($",Li,")"),ta.size?(0,we.default)(qe=ta.entrySeq()).call(qe,function(Js){var Sa,rs=(0,Ba.default)(Js,2),na=rs[0],vl=rs[1];return G.default.createElement(ks,{key:(0,o.default)(Sa="".concat(na,"-")).call(Sa,vl),propKey:na,propVal:vl,propClass:OC})}):null,_i&&Ls.size?(0,we.default)(tt=Ls.entrySeq()).call(tt,function(Js){var Sa,rs=(0,Ba.default)(Js,2),na=rs[0],vl=rs[1];return G.default.createElement(ks,{key:(0,o.default)(Sa="".concat(na,"-")).call(Sa,vl),propKey:na,propVal:vl,propClass:OC})}):null,Cs?G.default.createElement(xs,{source:Cs}):null,co&&co.size?G.default.createElement("span",null,G.default.createElement("br",null),G.default.createElement("span",{className:OC},"xml:"),(0,we.default)(at=co.entrySeq()).call(at,function(Js){var Sa,rs=(0,Ba.default)(Js,2),na=rs[0],vl=rs[1];return G.default.createElement("span",{key:(0,o.default)(Sa="".concat(na,"-")).call(Sa,vl),className:OC},G.default.createElement("br",null),"\xa0\xa0\xa0",na,": ",String(vl))}).toArray()):null,qi&&G.default.createElement(Rs,{value:qi,getComponent:on}))))}}]),gt}(G.Component);const Z$=function(An){var un=An.propKey,gt=An.propVal;return G.default.createElement("span",{className:An.propClass},G.default.createElement("br",null),un,": ",String(gt))};var iP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.onTryoutClick,Ft=qe.onResetClick,wn=qe.isOAS3&&qe.hasUserEditedBody;return G.default.createElement("div",{className:wn?"try-out btn-group":"try-out"},qe.enabled?G.default.createElement("button",{className:"btn try-out__btn cancel",onClick:qe.onCancelClick},"Cancel"):G.default.createElement("button",{className:"btn try-out__btn",onClick:tt},"Try it out "),wn&&G.default.createElement("button",{className:"btn try-out__btn reset",onClick:Ft},"Reset"))}}]),gt}(G.default.Component);(0,Q.default)(iP,"defaultProps",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,onResetClick:Function.prototype,enabled:!1,hasUserEditedBody:!1,isOAS3:!1});var oP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,at=qe.isSwagger2,Ft=qe.isOAS3,Lt=qe.alsoShow;return qe.bypass?G.default.createElement("div",null,this.props.children):at&&Ft?G.default.createElement("div",{className:"version-pragma"},Lt,G.default.createElement("div",{className:"version-pragma__message version-pragma__message--ambiguous"},G.default.createElement("div",null,G.default.createElement("h3",null,"Unable to render this definition"),G.default.createElement("p",null,G.default.createElement("code",null,"swagger")," and ",G.default.createElement("code",null,"openapi")," fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields."),G.default.createElement("p",null,"Supported version fields are ",G.default.createElement("code",null,"swagger: ",'"2.0"')," and those that match ",G.default.createElement("code",null,"openapi: 3.0.n")," (for example, ",G.default.createElement("code",null,"openapi: 3.0.0"),").")))):at||Ft?G.default.createElement("div",null,this.props.children):G.default.createElement("div",{className:"version-pragma"},Lt,G.default.createElement("div",{className:"version-pragma__message version-pragma__message--missing"},G.default.createElement("div",null,G.default.createElement("h3",null,"Unable to render this definition"),G.default.createElement("p",null,"The provided definition does not specify a valid version field."),G.default.createElement("p",null,"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are ",G.default.createElement("code",null,"swagger: ",'"2.0"')," and those that match ",G.default.createElement("code",null,"openapi: 3.0.n")," (for example, ",G.default.createElement("code",null,"openapi: 3.0.0"),")."))))}}]),gt}(G.default.PureComponent);(0,Q.default)(oP,"defaultProps",{alsoShow:null,children:null,bypass:!1});const z$=function(An){return G.default.createElement("small",null,G.default.createElement("pre",{className:"version"}," ",An.version," "))},W$=function(An){var un=An.enabled,qe=An.text;return G.default.createElement("a",{className:"nostyle",onClick:un?function(tt){return tt.preventDefault()}:null,href:un?"#/".concat(An.path):null},G.default.createElement("span",null,qe))},J$=function(){return G.default.createElement("div",null,G.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",className:"svg-assets"},G.default.createElement("defs",null,G.default.createElement("symbol",{viewBox:"0 0 20 20",id:"unlocked"},G.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"})),G.default.createElement("symbol",{viewBox:"0 0 20 20",id:"locked"},G.default.createElement("path",{d:"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"})),G.default.createElement("symbol",{viewBox:"0 0 20 20",id:"close"},G.default.createElement("path",{d:"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"})),G.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow"},G.default.createElement("path",{d:"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"})),G.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow-down"},G.default.createElement("path",{d:"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"})),G.default.createElement("symbol",{viewBox:"0 0 20 20",id:"large-arrow-up"},G.default.createElement("path",{d:"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z"})),G.default.createElement("symbol",{viewBox:"0 0 24 24",id:"jump-to"},G.default.createElement("path",{d:"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"})),G.default.createElement("symbol",{viewBox:"0 0 24 24",id:"expand"},G.default.createElement("path",{d:"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"})))))};var Q$=Po(5466),X$=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.errSelectors,at=qe.specSelectors,Ft=qe.getComponent,Lt=Ft("SvgAssets"),on=Ft("InfoContainer",!0),wn=Ft("VersionPragmaFilter"),tr=Ft("operations",!0),Gn=Ft("Models",!0),dr=Ft("Row"),Ti=Ft("Col"),_i=Ft("errors",!0),Pi=Ft("ServersContainer",!0),Li=Ft("SchemesContainer",!0),co=Ft("AuthorizeBtnContainer",!0),qi=Ft("FilterContainer",!0),to=at.isSwagger2(),Cs=at.isOAS3(),Ls=!at.specStr(),ta=at.loadingStatus(),xs=null;if("loading"===ta&&(xs=G.default.createElement("div",{className:"info"},G.default.createElement("div",{className:"loading-container"},G.default.createElement("div",{className:"loading"})))),"failed"===ta&&(xs=G.default.createElement("div",{className:"info"},G.default.createElement("div",{className:"loading-container"},G.default.createElement("h4",{className:"title"},"Failed to load API definition."),G.default.createElement(_i,null)))),"failedConfig"===ta){var Rs=tt.lastError(),ks=Rs?Rs.get("message"):"";xs=G.default.createElement("div",{className:"info failed-config"},G.default.createElement("div",{className:"loading-container"},G.default.createElement("h4",{className:"title"},"Failed to load remote configuration."),G.default.createElement("p",null,ks)))}if(!xs&&Ls&&(xs=G.default.createElement("h4",null,"No API definition provided.")),xs)return G.default.createElement("div",{className:"swagger-ui"},G.default.createElement("div",{className:"loading-container"},xs));var Ms=at.servers(),Ua=at.schemes(),Js=Ms&&Ms.size,Sa=Ua&&Ua.size,rs=!!at.securityDefinitions();return G.default.createElement("div",{className:"swagger-ui"},G.default.createElement(Lt,null),G.default.createElement(wn,{isSwagger2:to,isOAS3:Cs,alsoShow:G.default.createElement(_i,null)},G.default.createElement(_i,null),G.default.createElement(dr,{className:"information-container"},G.default.createElement(Ti,{mobile:12},G.default.createElement(on,null))),Js||Sa||rs?G.default.createElement("div",{className:"scheme-container"},G.default.createElement(Ti,{className:"schemes wrapper",mobile:12},Js?G.default.createElement(Pi,null):null,Sa?G.default.createElement(Li,null):null,rs?G.default.createElement(co,null):null)):null,G.default.createElement(qi,null),G.default.createElement(dr,null,G.default.createElement(Ti,{mobile:12,desktop:12},G.default.createElement(tr,null))),G.default.createElement(dr,null,G.default.createElement(Ti,{mobile:12,desktop:12},G.default.createElement(Gn,null)))))}}]),gt}(G.default.Component);const sP=(An=>{var un={};return Po.d(un,An),un})({default:()=>Vk()});var Kv={value:"",onChange:function(){},schema:{},keyName:"",required:!1,errors:(0,bt.List)()},aP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){return(0,oe.default)(this,gt),un.apply(this,arguments)}return(0,le.default)(gt,[{key:"componentDidMount",value:function(){var qe=this.props,tt=qe.dispatchInitialValue,Ft=qe.onChange;tt?Ft(qe.value):!1===tt&&Ft("")}},{key:"render",value:function(){var qe,tt=this.props,at=tt.schema,Ft=tt.errors,Lt=tt.value,on=tt.onChange,wn=tt.getComponent,tr=tt.fn,Gn=tt.disabled,dr=at&&at.get?at.get("format"):null,Ti=at&&at.get?at.get("type"):null,Pi=Ti?wn(dr?(0,o.default)(qe="JsonSchema_".concat(Ti,"_")).call(qe,dr):"JsonSchema_".concat(Ti),!1,{failSilently:!0}):wn("JsonSchema_string");return Pi||(Pi=wn("JsonSchema_string")),G.default.createElement(Pi,(0,kp.default)({},this.props,{errors:Ft,fn:tr,getComponent:wn,value:Lt,onChange:on,schema:at,disabled:Gn}))}}]),gt}(G.Component);(0,Q.default)(aP,"defaultProps",Kv);var lP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onChange",function(on){var wn=tt.props.schema&&"file"===tt.props.schema.get("type")?on.target.files[0]:on.target.value;tt.props.onChange(wn,tt.props.keyName)}),(0,Q.default)((0,Ii.default)(tt),"onEnumChange",function(on){return tt.props.onChange(on)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.getComponent,at=qe.value,Ft=qe.schema,Lt=qe.errors,on=qe.required,wn=qe.description,tr=qe.disabled,Gn=Ft&&Ft.get?Ft.get("enum"):null,dr=Ft&&Ft.get?Ft.get("format"):null,Ti=Ft&&Ft.get?Ft.get("type"):null,_i=Ft&&Ft.get?Ft.get("in"):null;if(at||(at=""),Lt=Lt.toJS?Lt.toJS():[],Gn){var Pi=tt("Select");return G.default.createElement(Pi,{className:Lt.length?"invalid":"",title:Lt.length?Lt:"",allowedValues:Gn,value:at,allowEmptyValue:!on,disabled:tr,onChange:this.onEnumChange})}var Li=tr||_i&&"formData"===_i&&!("FormData"in window),co=tt("Input");return Ti&&"file"===Ti?G.default.createElement(co,{type:"file",className:Lt.length?"invalid":"",title:Lt.length?Lt:"",onChange:this.onChange,disabled:Li}):G.default.createElement(sP.default,{type:dr&&"password"===dr?"password":"text",className:Lt.length?"invalid":"",title:Lt.length?Lt:"",value:at,minLength:0,debounceTimeout:350,placeholder:wn,onChange:this.onChange,disabled:Li})}}]),gt}(G.Component);(0,Q.default)(lP,"defaultProps",Kv);var uP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(qe,tt){var at;return(0,oe.default)(this,gt),at=un.call(this,qe,tt),(0,Q.default)((0,Ii.default)(at),"onChange",function(){at.props.onChange(at.state.value)}),(0,Q.default)((0,Ii.default)(at),"onItemChange",function(Ft,Lt){at.setState(function(on){return{value:on.value.set(Lt,Ft)}},at.onChange)}),(0,Q.default)((0,Ii.default)(at),"removeItem",function(Ft){at.setState(function(Lt){return{value:Lt.value.delete(Ft)}},at.onChange)}),(0,Q.default)((0,Ii.default)(at),"addItem",function(){var Ft=hD(at.state.value);at.setState(function(){return{value:Ft.push((0,Nn.xi)(at.state.schema.get("items"),!1,{includeWriteOnly:!0}))}},at.onChange)}),(0,Q.default)((0,Ii.default)(at),"onEnumChange",function(Ft){at.setState(function(){return{value:Ft}},at.onChange)}),at.state={value:hD(qe.value),schema:qe.schema},at}return(0,le.default)(gt,[{key:"UNSAFE_componentWillReceiveProps",value:function(qe){var tt=hD(qe.value);tt!==this.state.value&&this.setState({value:tt}),qe.schema!==this.state.schema&&this.setState({schema:qe.schema})}},{key:"render",value:function(){var qe,tt=this,at=this.props,Ft=at.getComponent,Lt=at.required,on=at.schema,wn=at.errors,tr=at.fn,Gn=at.disabled;wn=wn.toJS?wn.toJS():(0,Ie.default)(wn)?wn:[];var dr,Ti,_i=(0,_.default)(wn).call(wn,function(Ms){return"string"==typeof Ms}),Pi=(0,we.default)(qe=(0,_.default)(wn).call(wn,function(Ms){return void 0!==Ms.needRemove})).call(qe,function(Ms){return Ms.error}),Li=this.state.value,co=!!(Li&&Li.count&&Li.count()>0),qi=on.getIn(["items","enum"]),to=on.getIn(["items","type"]),Cs=on.getIn(["items","format"]),Ls=on.get("items"),ta=!1,xs="file"===to||"string"===to&&"binary"===Cs;if(to&&Cs?dr=Ft((0,o.default)(Ti="JsonSchema_".concat(to,"_")).call(Ti,Cs)):"boolean"!==to&&"array"!==to&&"object"!==to||(dr=Ft("JsonSchema_".concat(to))),dr||xs||(ta=!0),qi){var Rs=Ft("Select");return G.default.createElement(Rs,{className:wn.length?"invalid":"",title:wn.length?wn:"",multiple:!0,value:Li,disabled:Gn,allowedValues:qi,allowEmptyValue:!Lt,onChange:this.onEnumChange})}var ks=Ft("Button");return G.default.createElement("div",{className:"json-schema-array"},co?(0,we.default)(Li).call(Li,function(Ms,Ua){var Js,Sa=(0,bt.fromJS)((0,Nd.default)((0,we.default)(Js=(0,_.default)(wn).call(wn,function(rs){return rs.index===Ua})).call(Js,function(rs){return rs.error})));return G.default.createElement("div",{key:Ua,className:"json-schema-form-item"},xs?G.default.createElement(pD,{value:Ms,onChange:function(rs){return tt.onItemChange(rs,Ua)},disabled:Gn,errors:Sa,getComponent:Ft}):ta?G.default.createElement(fD,{value:Ms,onChange:function(rs){return tt.onItemChange(rs,Ua)},disabled:Gn,errors:Sa}):G.default.createElement(dr,(0,kp.default)({},tt.props,{value:Ms,onChange:function(rs){return tt.onItemChange(rs,Ua)},disabled:Gn,errors:Sa,schema:Ls,getComponent:Ft,fn:tr})),Gn?null:G.default.createElement(ks,{className:"btn btn-sm json-schema-form-item-remove ".concat(Pi.length?"invalid":null),title:Pi.length?Pi:"",onClick:function(){return tt.removeItem(Ua)}}," - "))}):null,Gn?null:G.default.createElement(ks,{className:"btn btn-sm json-schema-form-item-add ".concat(_i.length?"invalid":null),title:_i.length?_i:"",onClick:this.addItem},"Add ",to?"".concat(to," "):"","item"))}}]),gt}(G.PureComponent);(0,Q.default)(uP,"defaultProps",Kv);var fD=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onChange",function(on){tt.props.onChange(on.target.value,tt.props.keyName)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.value,at=qe.errors,Ft=qe.description,Lt=qe.disabled;return tt||(tt=""),at=at.toJS?at.toJS():[],G.default.createElement(sP.default,{type:"text",className:at.length?"invalid":"",title:at.length?at:"",value:tt,minLength:0,debounceTimeout:350,placeholder:Ft,onChange:this.onChange,disabled:Lt})}}]),gt}(G.Component);(0,Q.default)(fD,"defaultProps",Kv);var pD=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onFileChange",function(on){tt.props.onChange(on.target.files[0],tt.props.keyName)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,at=qe.errors,Ft=qe.disabled,Lt=(0,qe.getComponent)("Input"),on=Ft||!("FormData"in window);return G.default.createElement(Lt,{type:"file",className:at.length?"invalid":"",title:at.length?at:"",onChange:this.onFileChange,disabled:on})}}]),gt}(G.Component);(0,Q.default)(pD,"defaultProps",Kv);var cP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe,tt;(0,oe.default)(this,gt);for(var at=arguments.length,Ft=new Array(at),Lt=0;Lt<at;Lt++)Ft[Lt]=arguments[Lt];return tt=un.call.apply(un,(0,o.default)(qe=[this]).call(qe,Ft)),(0,Q.default)((0,Ii.default)(tt),"onEnumChange",function(on){return tt.props.onChange(on)}),tt}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,tt=qe.getComponent,at=qe.value,Ft=qe.errors,Lt=qe.schema,on=qe.required,wn=qe.disabled;Ft=Ft.toJS?Ft.toJS():[];var tr=Lt&&Lt.get?Lt.get("enum"):null,Gn=!tr||!on,dr=!tr&&(0,bt.fromJS)(["true","false"]),Ti=tt("Select");return G.default.createElement(Ti,{className:Ft.length?"invalid":"",title:Ft.length?Ft:"",value:String(at),disabled:wn,allowedValues:tr||dr,allowEmptyValue:Gn,onChange:this.onEnumChange})}}]),gt}(G.Component);(0,Q.default)(cP,"defaultProps",Kv);var K$=function(An){return(0,we.default)(An).call(An,function(un){var gt,tt="string"==typeof un?un:"string"==typeof un.error?un.error:null;if(!(void 0!==un.propKey?un.propKey:un.index)&&tt)return tt;for(var at=un.error,Ft="/".concat(un.propKey);"object"===(0,t.default)(at);){var Lt=void 0!==at.propKey?at.propKey:at.index;if(void 0===Lt||(Ft+="/".concat(Lt),!at.error))break;at=at.error}return(0,o.default)(gt="".concat(Ft,": ")).call(gt,at)})},dP=function(An){(0,uo.default)(gt,An);var un=(0,bo.default)(gt);function gt(){var qe;return(0,oe.default)(this,gt),qe=un.call(this),(0,Q.default)((0,Ii.default)(qe),"onChange",function(tt){qe.props.onChange(tt)}),(0,Q.default)((0,Ii.default)(qe),"handleOnChange",function(tt){qe.onChange(tt.target.value)}),qe}return(0,le.default)(gt,[{key:"render",value:function(){var qe=this.props,at=qe.value,Ft=qe.errors,Lt=qe.disabled,on=(0,qe.getComponent)("TextArea");return Ft=Ft.toJS?Ft.toJS():(0,Ie.default)(Ft)?Ft:[],G.default.createElement("div",null,G.default.createElement(on,{className:(0,jd.default)({invalid:Ft.length}),title:Ft.length?K$(Ft).join(", "):"",value:(0,Nn.Pz)(at),disabled:Lt,onChange:this.handleOnChange}))}}]),gt}(G.PureComponent);function hD(An){return bt.List.isList(An)?An:(0,Ie.default)(An)?(0,bt.fromJS)(An):(0,bt.List)()}function q$(){return[Xi.default,Xr.default,Wr.default,Qi.default,Yr.default,ur.default,In.default,Di.default,{components:{App:qn,authorizationPopup:wr,authorizeBtn:Gr,AuthorizeBtnContainer:Fi,authorizeOperationBtn:Ws,auths:Zo,AuthItem:ol,authError:gl,oauth2:Fp,apiKeyAuth:Zl,basicAuth:Ju,clear:Zi,liveResponse:eo,InitializedInput:S$,info:A$,InfoContainer:D$,JumpToPath:x$,onlineValidatorBadge:No.Z,operations:ps,operation:zi,OperationSummary:ss,OperationSummaryMethod:tu,OperationSummaryPath:fl,highlightCode:I_,responses:ev,response:zm,ResponseExtension:q_,responseBody:vC,parameters:LE,parameterRow:SC,execute:CC,headers:Qa,errors:Ru,contentType:Xv,overview:y$,footer:R$,FilterContainer:w$,ParamBody:nP,curl:N$,schemes:I$,SchemesContainer:F$,modelExample:k$,ModelWrapper:$$,ModelCollapse:rP,Model:H$.Z,Models:B$,EnumModel:U$,ObjectModel:j$,ArrayModel:G$,PrimitiveModel:V$,Property:Z$,TryItOutButton:iP,Markdown:Q$.Z,BaseLayout:X$,VersionPragmaFilter:oP,VersionStamp:z$,OperationExt:xa,OperationExtRow:yu,ParameterExt:EC,ParameterIncludeEmpty:kE,OperationTag:cs,OperationContainer:Rt,DeepLink:W$,InfoUrl:O$,InfoBasePath:T$,SvgAssets:J$,Example:Gf,ExamplesSelect:Zc,ExamplesSelectValueRetainer:Fh}},{components:n},Bn.default,{components:s},bn.default,Ni.default,Bo.default,Ao.default,zs.default,ji.default,(0,Qs.default)()]}(0,Q.default)(dP,"defaultProps",Kv);var eH=Po(7451);function fP(){return[q$,eH.default]}var tH=Po(5308);function _D(An){var un,gt,qe;xn.Z.versions=xn.Z.versions||{},xn.Z.versions.swaggerUi={version:"4.12.0",gitRevision:"ga7e23b5",gitDirty:!0,buildTimestamp:"Fri, 03 Jun 2022 17:07:59 GMT"};var tt={dom_id:null,domNode:null,spec:{},url:"",urls:null,layout:"BaseLayout",docExpansion:"list",maxDisplayedTags:null,filter:null,validatorUrl:"https://validator.swagger.io/validator",oauth2RedirectUrl:(0,o.default)(un=(0,o.default)(gt="".concat(window.location.protocol,"//")).call(gt,window.location.host)).call(un,window.location.pathname.substring(0,(0,l.default)(qe=window.location.pathname).call(qe,"/")),"/oauth2-redirect.html"),persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:function(_i){return _i},responseInterceptor:function(_i){return _i},showMutatedRequest:!0,defaultModelRendering:"example",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:"cURL (bash)",syntax:"bash"},curl_powershell:{title:"cURL (PowerShell)",syntax:"powershell"},curl_cmd:{title:"cURL (CMD)",syntax:"bash"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:["get","put","post","delete","options","head","patch","trace"],queryConfigEnabled:!1,presets:[fP],plugins:[],pluginsOptions:{pluginLoadType:"legacy"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:"agate"}},at=An.queryConfigEnabled?(0,Nn.UG)():{},Ft=An.domNode;delete An.domNode;var Lt=V()({},tt,An,at),on={system:{configs:Lt.configs},plugins:Lt.presets,pluginsOptions:Lt.pluginsOptions,state:V()({layout:{layout:Lt.layout,filter:(0,_.default)(Lt)},spec:{spec:"",url:Lt.url},requestSnippets:Lt.requestSnippets},Lt.initialState)};if(Lt.initialState)for(var wn in Lt.initialState)Object.prototype.hasOwnProperty.call(Lt.initialState,wn)&&void 0===Lt.initialState[wn]&&delete on.state[wn];var tr=new Hr(on);tr.register([Lt.plugins,function(){return{fn:Lt.fn,components:Lt.components,state:Lt.state}}]);var Gn=tr.getSystem(),dr=function(_i){var Pi=Gn.specSelectors.getLocalConfig?Gn.specSelectors.getLocalConfig():{},Li=V()({},Pi,Lt,_i||{},at);if(Ft&&(Li.domNode=Ft),tr.setConfigs(Li),Gn.configsActions.loaded(),null!==_i&&(!at.url&&"object"===(0,t.default)(Li.spec)&&(0,C.default)(Li.spec).length?(Gn.specActions.updateUrl(""),Gn.specActions.updateLoadingStatus("success"),Gn.specActions.updateSpec((0,R.default)(Li.spec))):Gn.specActions.download&&Li.url&&!Li.urls&&(Gn.specActions.updateUrl(Li.url),Gn.specActions.download(Li.url))),Li.domNode)Gn.render(Li.domNode,"App");else if(Li.dom_id){var co=document.querySelector(Li.dom_id);Gn.render(co,"App")}else null===Li.dom_id||null===Li.domNode||console.error("Skipped rendering: no `dom_id` or `domNode` was specified");return Gn},Ti=at.config||Lt.configUrl;return Ti&&Gn.specActions&&Gn.specActions.getConfigByUrl?(Gn.specActions.getConfigByUrl({url:Ti,loadRemoteConfig:!0,requestInterceptor:Lt.requestInterceptor,responseInterceptor:Lt.responseInterceptor},dr),Gn):dr()}_D.presets={apis:fP},_D.plugins=tH.default;const sH=_D})();var zk=j3.Z;let Wk=(()=>{class n{ngOnInit(){zk({url:window.location.origin+"/docs/openapi.json",dom_id:"#swagger-ui",layout:"BaseLayout"})}}return n.\u0275fac=function(t){return new(t||n)},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-api-docs"]],decls:1,vars:0,consts:[["id","swagger-ui",1,"apiDocs"]],template:function(t,o){1&t&&e._UZ(0,"div",0)},styles:[".apiDocs[_ngcontent-%COMP%]{background:#f8f9fa;font-size:18px!important;margin-top:-48px!important}"]}),n})();var aD=i(83357),Jk=i(4268),G3=i(45510);let V3=(()=>{class n{constructor(t,o){this.router=t,this.authStorageService=o}canActivate(t,o){return!(this.authStorageService.isLoggedIn()&&!this.authStorageService.isSSO()&&this.authStorageService.getPwdUpdateRequired()&&(this.router.navigate(["/login-change-password"],{queryParams:{returnUrl:o.url}}),1))}canActivateChild(t,o){return this.canActivate(t,o)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(Io.F0),e.LFG(Vi.j))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})();var lD=i(4222),FE=i(54462);let Z3=(()=>{class n{constructor(t){this.authStorageService=t}canActivate(){if(!this.authStorageService.isSSO())return!0;throw new uy.mM}canActivateChild(){return this.canActivate()}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(Vi.j))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),z3=(()=>{class n extends pE{resolve(t){const o=[],l=t.queryParams.fromLink||null;let _="";switch(l){case"/monitor":_="Monitors";break;case"/hosts":_="Hosts"}return o.push({text:"Cluster",path:null}),o.push({text:_,path:l}),o.push({text:"Performance Counters",path:""}),o}}return n.\u0275fac=function(){let s;return function(o){return(s||(s=e.n5z(n)))(o||n)}}(),n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac}),n})(),W3=(()=>{class n extends pE{resolve(t){const o=t.params.name;return[{text:`${Sr().startCase(o)}/Edit`,path:o}]}}return n.\u0275fac=function(){let s;return function(o){return(s||(s=e.n5z(n)))(o||n)}}(),n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac}),n})();const Qk=[{path:"",redirectTo:"dashboard",pathMatch:"full"},{path:"api-docs",component:Wk},{path:"",component:me,canActivate:[G3.P,V3],canActivateChild:[G3.P,V3],children:[{path:"dashboard",component:wy},{path:"error",component:cT},{path:"expand-cluster",component:hi,canActivate:[FE.P],data:{moduleStatusGuardConfig:{uiApiPath:"orchestrator",redirectTo:"dashboard",backend:"cephadm"},breadcrumbs:"Expand Cluster"}},{path:"hosts",component:dp,data:{breadcrumbs:"Cluster/Hosts"},children:[{path:Mo.MQ.ADD,component:is,outlet:"modal"}]},{path:"ceph-users",component:Jk.c,data:{breadcrumbs:"Cluster/Ceph Users",resource:"api.cluster.user@1.0"}},{path:"cluster/user/create",component:aD.U,data:{breadcrumbs:"Cluster/Ceph Users/Create",resource:"api.cluster.user@1.0"}},{path:"cluster/user/import",component:aD.U,data:{breadcrumbs:"Cluster/Ceph Users/Import",resource:"api.cluster.user@1.0"}},{path:"cluster/user/edit",component:aD.U,data:{breadcrumbs:"Cluster/Ceph Users/Edit",resource:"api.cluster.user@1.0"}},{path:"monitor",component:vv,data:{breadcrumbs:"Cluster/Monitors"}},{path:"services",component:Om,canActivate:[FE.P],data:{moduleStatusGuardConfig:{uiApiPath:"orchestrator",redirectTo:"error",section:"orch",section_info:"Orchestrator",header:"Orchestrator is not available"},breadcrumbs:"Cluster/Services"},children:[{path:Mo.MQ.CREATE,component:um,outlet:"modal"},{path:`${Mo.MQ.EDIT}/:type/:name`,component:um,outlet:"modal"}]},{path:"inventory",canActivate:[FE.P],component:dl,data:{moduleStatusGuardConfig:{uiApiPath:"orchestrator",redirectTo:"error",section:"orch",section_info:"Orchestrator",header:"Orchestrator is not available"},breadcrumbs:"Cluster/Physical Disks"}},{path:"osd",data:{breadcrumbs:"Cluster/OSDs"},children:[{path:"",component:sb},{path:Mo.MQ.CREATE,component:b_,data:{breadcrumbs:Mo.Qn.CREATE}}]},{path:"configuration",data:{breadcrumbs:"Cluster/Configuration"},children:[{path:"",component:Lc},{path:"edit/:name",component:Bc,data:{breadcrumbs:Mo.Qn.EDIT}}]},{path:"crush-map",component:uf,data:{breadcrumbs:"Cluster/CRUSH map"}},{path:"logs",component:Pg,data:{breadcrumbs:"Cluster/Logs"}},{path:"telemetry",component:Db,data:{breadcrumbs:"Telemetry configuration"}},{path:"monitoring",data:{breadcrumbs:"Cluster/Alerts"},children:[{path:"",redirectTo:"active-alerts",pathMatch:"full"},{path:"active-alerts",data:{breadcrumbs:"Active Alerts"},component:pb},{path:"alerts",data:{breadcrumbs:"Alerts"},component:hb},{path:"silences",data:{breadcrumbs:"Silences"},children:[{path:"",component:GC},{path:Mo.MQ.CREATE,component:Q_,data:{breadcrumbs:`${Mo.Qn.CREATE} Silence`}},{path:`${Mo.MQ.CREATE}/:id`,component:Q_,data:{breadcrumbs:Mo.Qn.CREATE}},{path:`${Mo.MQ.EDIT}/:id`,component:Q_,data:{breadcrumbs:Mo.Qn.EDIT}},{path:`${Mo.MQ.RECREATE}/:id`,component:Q_,data:{breadcrumbs:Mo.Qn.RECREATE}}]}]},{path:"perf_counters/:type/:id",component:NM,data:{breadcrumbs:z3}},{path:"mgr-modules",data:{breadcrumbs:"Cluster/Manager Modules"},children:[{path:"",component:eh},{path:"edit/:name",component:H0,data:{breadcrumbs:W3}}]},{path:"pool",data:{breadcrumbs:"Pools"},loadChildren:()=>Promise.all([i.e(43),i.e(95)]).then(i.bind(i,38095)).then(n=>n.RoutedPoolModule)},{path:"block",data:{breadcrumbs:!0,text:"Block",path:null},loadChildren:()=>i.e(43).then(i.bind(i,21043)).then(n=>n.RoutedBlockModule)},{path:"cephfs",component:yc,canActivate:[lD.T],data:{breadcrumbs:"File Systems"}},{path:"rgw",canActivateChild:[lD.T,FE.P],data:{moduleStatusGuardConfig:{uiApiPath:"rgw",redirectTo:"error",section:"rgw",section_info:"Object Gateway",header:"The Object Gateway Service is not configured"},breadcrumbs:!0,text:"Object Gateway",path:null},loadChildren:()=>i.e(543).then(i.bind(i,38543)).then(n=>n.RoutedRgwModule)},{path:"user-management",data:{breadcrumbs:"User management",path:null},loadChildren:()=>Promise.resolve().then(i.bind(i,13140)).then(n=>n.RoutedAuthModule)},{path:"user-profile",data:{breadcrumbs:"User profile",path:null},children:[{path:Mo.MQ.EDIT,component:Gy,canActivate:[Z3],data:{breadcrumbs:Mo.Qn.EDIT}}]},{path:"nfs",canActivateChild:[lD.T,FE.P],data:{moduleStatusGuardConfig:{uiApiPath:"nfs-ganesha",redirectTo:"error",section:"nfs-ganesha",section_info:"NFS GANESHA",header:"NFS-Ganesha is not configured"},breadcrumbs:"NFS"},children:[{path:"",component:Wg},{path:Mo.MQ.CREATE,component:o0,data:{breadcrumbs:Mo.Qn.CREATE}},{path:`${Mo.MQ.EDIT}/:cluster_id/:export_id`,component:o0,data:{breadcrumbs:Mo.Qn.EDIT}}]}]},{path:"",component:WM,children:[{path:"login",component:UM},{path:"login-change-password",component:rT,canActivate:[Z3]}]},{path:"",component:dT,children:[{path:"**",redirectTo:"/error"}]}];let gC=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({providers:[W3,z3],imports:[[Io.Bz.forRoot(Qk,{useHash:!0,preloadingStrategy:Io.wm,relativeLinkResolution:"legacy"})],Io.Bz]}),n})(),Xk=(()=>{class n{constructor(t,o){t.autoClose="outside",t.container="body",t.placement="bottom",o.container="body"}}return n.\u0275fac=function(t){return new(t||n)(e.Y36(Pr.AX),e.Y36(Pr.xI))},n.\u0275cmp=e.Xpm({type:n,selectors:[["cd-root"]],decls:1,vars:0,template:function(t,o){1&t&&e._UZ(0,"router-outlet")},directives:[Io.lC],styles:[""]}),n})();var ym=i(44466);let Kk=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[p.ez,ym.m,gC,Us.m9,pa.xc,Pr.Oz]]}),n})();var J3=i(66265),uD=i(370);let qk=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[gC,p.ez,En.UX,ym.m,Pr.Oz]]}),n})(),e$=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({providers:[Pr.Kz],imports:[[p.ez,J3.B,Pr.Oz,ym.m,Io.Bz,En.u5,En.UX,Pr.HK,qk,Pr.ZS,Pr.UL,pa.xc,uD.t,Pr.M,Pr.dT,Pr.XC,up.b]]}),n})(),t$=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[uD.t,p.ez,Pr.Oz,ym.m,Us.m9,Io.Bz,Pr.dT,Pr.HK,En.u5,En.UX,gm.t]]}),n})(),n$=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[uD.t,p.ez,Pr.Oz,ym.m,Us.m9,Io.Bz,Pr.dT,En.u5,En.UX,t$]]}),n})(),r$=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[En.UX,Io.Bz,ym.m,Pr.Oz,p.ez,Pr.ZS,Pr.HK]]}),n})(),i$=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[p.ez,e$,n$,J3.B,Kk,r$,ym.m]]}),n})();var o$=i(13140);let Q3=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[p.ez,o$.AuthModule,Pr.lQ,Pr.XC,gC,ym.m,gm.t,Io.Bz]]}),n})(),s$=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n}),n.\u0275inj=e.cJS({imports:[[Fm.forRoot(),p.ez,Q3,Pr.XC,Io.Bz,ym.m],Q3]}),n})(),a$=(()=>{class n{constructor(t,o,l){this.router=t,this.authStorageService=o,this.notificationService=l}intercept(t,o){const l=t.headers.get("Accept");let _;return _=l&&l.startsWith("application/vnd.ceph.api.v")?t.clone():t.clone({setHeaders:{Accept:Dc.T.cdVersionHeader("1","0")}}),o.handle(_).pipe((0,Pv.K)(C=>{if(C instanceof g.UA){let R;switch(C.status){case 400:const N=new Ql.R,V=C.error.task;Sr().isPlainObject(V)?(V.metadata.component=V.metadata.component||C.error.component,N.name=V.name,N.metadata=V.metadata):N.metadata=C.error,N.success=!1,N.exception=C.error,R=this.notificationService.notifyTask(N);break;case 401:this.authStorageService.remove(),this.router.navigate(["/login"]);break;case 403:this.router.navigate(["error"],{state:{message:"Sorry, you don\u2019t have permission to view this page or resource.",header:"Access Denied",icon:"fa fa-lock",source:"forbidden"}});break;default:R=this.prepareNotification(C)}C.preventDefault=()=>{this.notificationService.cancel(R)},C.ignoreStatusCode=function(N){this.status===N&&this.preventDefault()}}return(0,bS._)(C)}))}prepareNotification(t){return this.notificationService.show(()=>{let o="";return Sr().isPlainObject(t.error)&&Sr().isString(t.error.detail)?o=t.error.detail:Sr().isString(t.error)?o=t.error:Sr().isString(t.message)&&(o=t.message),new k1.T(Ta.k.error,`${t.status} - ${t.statusText}`,o,void 0,t.application)})}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(Io.F0),e.LFG(Vi.j),e.LFG(Tl.g))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),l$=(()=>{class n{constructor(t){this.http=t}jsError(t,o,l){return this.http.post("ui-api/logging/js-error",{url:t,message:o,stack:l})}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(g.eN))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac,providedIn:"root"}),n})(),u$=(()=>{class n{constructor(t,o){this.injector=t,this.router=o}handleError(t){const o=this.injector.get(l$),l=window.location.href;if(o.jsError(l,t&&t.message,t&&t.stack).subscribe(),!(t.rejection instanceof uy.s9))throw t;setTimeout(()=>this.router.navigate(["error"],{state:{message:t.rejection.message,header:t.rejection.header,icon:t.rejection.icon}}),50)}}return n.\u0275fac=function(t){return new(t||n)(e.LFG(e.zs3),e.LFG(Io.F0))},n.\u0275prov=e.Yz7({token:n,factory:n.\u0275fac}),n})(),c$=(()=>{class n{}return n.\u0275fac=function(t){return new(t||n)},n.\u0275mod=e.oAB({type:n,bootstrap:[Xk]}),n.\u0275inj=e.cJS({providers:[{provide:e.qLn,useClass:u$},{provide:g.TP,useClass:a$,multi:!0},{provide:p.mr,useValue:"/"+(window.location.pathname.split("/",1)[1]||"")}],imports:[[g.JF,u.b2,Yu,Ld.Rh.forRoot({positionClass:"toast-top-right",preventDuplicates:!0,enableHtml:!0}),gC,s$,ym.m,i$],ym.m]}),n})();Wy.N.production&&(0,e.G48)(),u.q6().bootstrapModule(c$).then(n=>{if((0,e.X6Q)()){const t=n.injector.get(e.z2F).components[0];(0,u.HJ)(t)}}).catch(n=>console.log(n))},77340:(v,b,i)=>{var r=i(25591),a=i(60802),f=TypeError;v.exports=function(u){if(r(u))return u;throw f(a(u)+" is not a function")}},95143:(v,b,i)=>{var r=i(25591),a=String,f=TypeError;v.exports=function(u){if("object"==typeof u||r(u))return u;throw f("Can't set "+a(u)+" as a prototype")}},24094:(v,b,i)=>{var r=i(84563),a=i(38724),f=i(52975).f,u=r("unscopables"),e=Array.prototype;null==e[u]&&f(e,u,{configurable:!0,value:a(null)}),v.exports=function(p){e[u][p]=!0}},27678:(v,b,i)=>{"use strict";var r=i(64487).charAt;v.exports=function(a,f,u){return f+(u?r(a,f).length:1)}},86063:(v,b,i)=>{var r=i(93290),a=TypeError;v.exports=function(f,u){if(r(u,f))return f;throw a("Incorrect invocation")}},21099:(v,b,i)=>{var r=i(60726),a=String,f=TypeError;v.exports=function(u){if(r(u))return u;throw f(a(u)+" is not an object")}},93241:(v,b,i)=>{var r=i(8597);v.exports=r(function(){if("function"==typeof ArrayBuffer){var a=new ArrayBuffer(8);Object.isExtensible(a)&&Object.defineProperty(a,"a",{value:8})}})},70452:(v,b,i)=>{var r=i(8643),a=i(20222),f=i(24196),u=function(e){return function(p,g,S){var B,M=r(p),w=f(M),x=a(S,w);if(e&&g!=g){for(;w>x;)if((B=M[x++])!=B)return!0}else for(;w>x;x++)if((e||x in M)&&M[x]===g)return e||x||0;return!e&&-1}};v.exports={includes:u(!0),indexOf:u(!1)}},94115:(v,b,i)=>{var r=i(29727),a=i(47964),f=i(56169),u=i(16174),e=i(24196),p=i(62889),g=a([].push),S=function(M){var w=1==M,x=2==M,B=3==M,W=4==M,j=6==M,q=7==M,ue=5==M||j;return function(re,H,se,ae){for(var Xe,He,ie=u(re),fe=f(ie),he=r(H,se),Ce=e(fe),ce=0,Be=ae||p,Ve=w?Be(re,Ce):x||q?Be(re,0):void 0;Ce>ce;ce++)if((ue||ce in fe)&&(He=he(Xe=fe[ce],ce,ie),M))if(w)Ve[ce]=He;else if(He)switch(M){case 3:return!0;case 5:return Xe;case 6:return ce;case 2:g(Ve,Xe)}else switch(M){case 4:return!1;case 7:g(Ve,Xe)}return j?-1:B||W?W:Ve}};v.exports={forEach:S(0),map:S(1),filter:S(2),some:S(3),every:S(4),find:S(5),findIndex:S(6),filterReject:S(7)}},37394:(v,b,i)=>{var r=i(8597),a=i(84563),f=i(17189),u=a("species");v.exports=function(e){return f>=51||!r(function(){var p=[];return(p.constructor={})[u]=function(){return{foo:1}},1!==p[e](Boolean).foo})}},47051:(v,b,i)=>{"use strict";var r=i(8597);v.exports=function(a,f){var u=[][a];return!!u&&r(function(){u.call(null,f||function(){return 1},1)})}},14716:(v,b,i)=>{var r=i(77340),a=i(16174),f=i(56169),u=i(24196),e=TypeError,p=function(g){return function(S,M,w,x){r(M);var B=a(S),W=f(B),j=u(B),q=g?j-1:0,ue=g?-1:1;if(w<2)for(;;){if(q in W){x=W[q],q+=ue;break}if(q+=ue,g?q<0:j<=q)throw e("Reduce of empty array with no initial value")}for(;g?q>=0:j>q;q+=ue)q in W&&(x=M(x,W[q],q,B));return x}};v.exports={left:p(!1),right:p(!0)}},32342:(v,b,i)=>{var r=i(20222),a=i(24196),f=i(45347),u=Array,e=Math.max;v.exports=function(p,g,S){for(var M=a(p),w=r(g,M),x=r(void 0===S?M:S,M),B=u(e(x-w,0)),W=0;w<x;w++,W++)f(B,W,p[w]);return B.length=W,B}},71497:(v,b,i)=>{var r=i(47883),a=i(57995),f=i(60726),e=i(84563)("species"),p=Array;v.exports=function(g){var S;return r(g)&&(a(S=g.constructor)&&(S===p||r(S.prototype))||f(S)&&null===(S=S[e]))&&(S=void 0),void 0===S?p:S}},62889:(v,b,i)=>{var r=i(71497);v.exports=function(a,f){return new(r(a))(0===f?0:f)}},56297:(v,b,i)=>{var a=i(84563)("iterator"),f=!1;try{var u=0,e={next:function(){return{done:!!u++}},return:function(){f=!0}};e[a]=function(){return this},Array.from(e,function(){throw 2})}catch(p){}v.exports=function(p,g){if(!g&&!f)return!1;var S=!1;try{var M={};M[a]=function(){return{next:function(){return{done:S=!0}}}},p(M)}catch(w){}return S}},96644:(v,b,i)=>{var r=i(47964),a=r({}.toString),f=r("".slice);v.exports=function(u){return f(a(u),8,-1)}},99420:(v,b,i)=>{var r=i(72900),a=i(25591),f=i(96644),e=i(84563)("toStringTag"),p=Object,g="Arguments"==f(function(){return arguments}());v.exports=r?f:function(M){var w,x,B;return void 0===M?"Undefined":null===M?"Null":"string"==typeof(x=function(M,w){try{return M[w]}catch(x){}}(w=p(M),e))?x:g?f(w):"Object"==(B=f(w))&&a(w.callee)?"Arguments":B}},96491:(v,b,i)=>{"use strict";var r=i(47964),a=i(41292),f=i(64238).getWeakData,u=i(86063),e=i(21099),p=i(37432),g=i(60726),S=i(53284),M=i(94115),w=i(62445),x=i(52493),B=x.set,W=x.getterFor,j=M.find,q=M.findIndex,ue=r([].splice),re=0,H=function(ie){return ie.frozen||(ie.frozen=new se)},se=function(){this.entries=[]},ae=function(ie,fe){return j(ie.entries,function(he){return he[0]===fe})};se.prototype={get:function(ie){var fe=ae(this,ie);if(fe)return fe[1]},has:function(ie){return!!ae(this,ie)},set:function(ie,fe){var he=ae(this,ie);he?he[1]=fe:this.entries.push([ie,fe])},delete:function(ie){var fe=q(this.entries,function(he){return he[0]===ie});return~fe&&ue(this.entries,fe,1),!!~fe}},v.exports={getConstructor:function(ie,fe,he,Ce){var ce=ie(function(He,Pe){u(He,Be),B(He,{type:fe,id:re++,frozen:void 0}),p(Pe)||S(Pe,He[Ce],{that:He,AS_ENTRIES:he})}),Be=ce.prototype,Ve=W(fe),Xe=function(He,Pe,Ge){var Oe=Ve(He),Tt=f(e(Pe),!0);return!0===Tt?H(Oe).set(Pe,Ge):Tt[Oe.id]=Ge,He};return a(Be,{delete:function(He){var Pe=Ve(this);if(!g(He))return!1;var Ge=f(He);return!0===Ge?H(Pe).delete(He):Ge&&w(Ge,Pe.id)&&delete Ge[Pe.id]},has:function(Pe){var Ge=Ve(this);if(!g(Pe))return!1;var Oe=f(Pe);return!0===Oe?H(Ge).has(Pe):Oe&&w(Oe,Ge.id)}}),a(Be,he?{get:function(Pe){var Ge=Ve(this);if(g(Pe)){var Oe=f(Pe);return!0===Oe?H(Ge).get(Pe):Oe?Oe[Ge.id]:void 0}},set:function(Pe,Ge){return Xe(this,Pe,Ge)}}:{add:function(Pe){return Xe(this,Pe,!0)}}),ce}}},41603:(v,b,i)=>{"use strict";var r=i(51163),a=i(31864),f=i(47964),u=i(87215),e=i(70688),p=i(64238),g=i(53284),S=i(86063),M=i(25591),w=i(37432),x=i(60726),B=i(8597),W=i(56297),j=i(58242),q=i(38267);v.exports=function(ue,re,H){var se=-1!==ue.indexOf("Map"),ae=-1!==ue.indexOf("Weak"),ie=se?"set":"add",fe=a[ue],he=fe&&fe.prototype,Ce=fe,ce={},Be=function(Tt){var We=f(he[Tt]);e(he,Tt,"add"==Tt?function(Nt){return We(this,0===Nt?0:Nt),this}:"delete"==Tt?function(Qt){return!(ae&&!x(Qt))&&We(this,0===Qt?0:Qt)}:"get"==Tt?function(Nt){return ae&&!x(Nt)?void 0:We(this,0===Nt?0:Nt)}:"has"==Tt?function(Nt){return!(ae&&!x(Nt))&&We(this,0===Nt?0:Nt)}:function(Nt,Yt){return We(this,0===Nt?0:Nt,Yt),this})};if(u(ue,!M(fe)||!(ae||he.forEach&&!B(function(){(new fe).entries().next()}))))Ce=H.getConstructor(re,ue,se,ie),p.enable();else if(u(ue,!0)){var Xe=new Ce,He=Xe[ie](ae?{}:-0,1)!=Xe,Pe=B(function(){Xe.has(1)}),Ge=W(function(Tt){new fe(Tt)}),Oe=!ae&&B(function(){for(var Tt=new fe,We=5;We--;)Tt[ie](We,We);return!Tt.has(-0)});Ge||((Ce=re(function(Tt,We){S(Tt,he);var Qt=q(new fe,Tt,Ce);return w(We)||g(We,Qt[ie],{that:Qt,AS_ENTRIES:se}),Qt})).prototype=he,he.constructor=Ce),(Pe||Oe)&&(Be("delete"),Be("has"),se&&Be("get")),(Oe||He)&&Be(ie),ae&&he.clear&&delete he.clear}return ce[ue]=Ce,r({global:!0,constructor:!0,forced:Ce!=fe},ce),j(Ce,ue),ae||H.setStrong(Ce,ue,se),Ce}},30009:(v,b,i)=>{var r=i(62445),a=i(99376),f=i(93099),u=i(52975);v.exports=function(e,p,g){for(var S=a(p),M=u.f,w=f.f,x=0;x<S.length;x++){var B=S[x];!r(e,B)&&(!g||!r(g,B))&&M(e,B,w(p,B))}}},51335:(v,b,i)=>{var r=i(8597);v.exports=!r(function(){function a(){}return a.prototype.constructor=null,Object.getPrototypeOf(new a)!==a.prototype})},15189:v=>{v.exports=function(b,i){return{value:b,done:i}}},815:(v,b,i)=>{var r=i(47012),a=i(52975),f=i(53203);v.exports=r?function(u,e,p){return a.f(u,e,f(1,p))}:function(u,e,p){return u[e]=p,u}},53203:v=>{v.exports=function(b,i){return{enumerable:!(1&b),configurable:!(2&b),writable:!(4&b),value:i}}},45347:(v,b,i)=>{"use strict";var r=i(16582),a=i(52975),f=i(53203);v.exports=function(u,e,p){var g=r(e);g in u?a.f(u,g,f(0,p)):u[g]=p}},48213:(v,b,i)=>{var r=i(74952),a=i(52975);v.exports=function(f,u,e){return e.get&&r(e.get,u,{getter:!0}),e.set&&r(e.set,u,{setter:!0}),a.f(f,u,e)}},70688:(v,b,i)=>{var r=i(25591),a=i(52975),f=i(74952),u=i(11996);v.exports=function(e,p,g,S){S||(S={});var M=S.enumerable,w=void 0!==S.name?S.name:p;if(r(g)&&f(g,w,S),S.global)M?e[p]=g:u(p,g);else{try{S.unsafe?e[p]&&(M=!0):delete e[p]}catch(x){}M?e[p]=g:a.f(e,p,{value:g,enumerable:!1,configurable:!S.nonConfigurable,writable:!S.nonWritable})}return e}},41292:(v,b,i)=>{var r=i(70688);v.exports=function(a,f,u){for(var e in f)r(a,e,f[e],u);return a}},11996:(v,b,i)=>{var r=i(31864),a=Object.defineProperty;v.exports=function(f,u){try{a(r,f,{value:u,configurable:!0,writable:!0})}catch(e){r[f]=u}return u}},47012:(v,b,i)=>{var r=i(8597);v.exports=!r(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})},34550:v=>{var b="object"==typeof document&&document.all;v.exports={all:b,IS_HTMLDDA:void 0===b&&void 0!==b}},85815:(v,b,i)=>{var r=i(31864),a=i(60726),f=r.document,u=a(f)&&a(f.createElement);v.exports=function(e){return u?f.createElement(e):{}}},26877:v=>{v.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},20713:(v,b,i)=>{var a=i(85815)("span").classList,f=a&&a.constructor&&a.constructor.prototype;v.exports=f===Object.prototype?void 0:f},32002:(v,b,i)=>{var r=i(96644);v.exports="undefined"!=typeof process&&"process"==r(process)},73792:v=>{v.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},17189:(v,b,i)=>{var g,S,r=i(31864),a=i(73792),f=r.process,u=r.Deno,e=f&&f.versions||u&&u.version,p=e&&e.v8;p&&(S=(g=p.split("."))[0]>0&&g[0]<4?1:+(g[0]+g[1])),!S&&a&&(!(g=a.match(/Edge\/(\d+)/))||g[1]>=74)&&(g=a.match(/Chrome\/(\d+)/))&&(S=+g[1]),v.exports=S},71001:v=>{v.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},51163:(v,b,i)=>{var r=i(31864),a=i(93099).f,f=i(815),u=i(70688),e=i(11996),p=i(30009),g=i(87215);v.exports=function(S,M){var j,q,ue,re,H,w=S.target,x=S.global,B=S.stat;if(j=x?r:B?r[w]||e(w,{}):(r[w]||{}).prototype)for(q in M){if(re=M[q],ue=S.dontCallGetSet?(H=a(j,q))&&H.value:j[q],!g(x?q:w+(B?".":"#")+q,S.forced)&&void 0!==ue){if(typeof re==typeof ue)continue;p(re,ue)}(S.sham||ue&&ue.sham)&&f(re,"sham",!0),u(j,q,re,S)}}},8597:v=>{v.exports=function(b){try{return!!b()}catch(i){return!0}}},9357:(v,b,i)=>{"use strict";i(69665);var r=i(29263),a=i(70688),f=i(93084),u=i(8597),e=i(84563),p=i(815),g=e("species"),S=RegExp.prototype;v.exports=function(M,w,x,B){var W=e(M),j=!u(function(){var H={};return H[W]=function(){return 7},7!=""[M](H)}),q=j&&!u(function(){var H=!1,se=/a/;return"split"===M&&((se={}).constructor={},se.constructor[g]=function(){return se},se.flags="",se[W]=/./[W]),se.exec=function(){return H=!0,null},se[W](""),!H});if(!j||!q||x){var ue=r(/./[W]),re=w(W,""[M],function(H,se,ae,ie,fe){var he=r(H),Ce=se.exec;return Ce===f||Ce===S.exec?j&&!fe?{done:!0,value:ue(se,ae,ie)}:{done:!0,value:he(ae,se,ie)}:{done:!1}});a(String.prototype,M,re[0]),a(S,W,re[1])}B&&p(S[W],"sham",!0)}},39352:(v,b,i)=>{var r=i(8597);v.exports=!r(function(){return Object.isExtensible(Object.preventExtensions({}))})},32328:(v,b,i)=>{var r=i(4459),a=Function.prototype,f=a.apply,u=a.call;v.exports="object"==typeof Reflect&&Reflect.apply||(r?u.bind(f):function(){return u.apply(f,arguments)})},29727:(v,b,i)=>{var r=i(29263),a=i(77340),f=i(4459),u=r(r.bind);v.exports=function(e,p){return a(e),void 0===p?e:f?u(e,p):function(){return e.apply(p,arguments)}}},4459:(v,b,i)=>{var r=i(8597);v.exports=!r(function(){var a=function(){}.bind();return"function"!=typeof a||a.hasOwnProperty("prototype")})},757:(v,b,i)=>{var r=i(4459),a=Function.prototype.call;v.exports=r?a.bind(a):function(){return a.apply(a,arguments)}},20538:(v,b,i)=>{var r=i(47012),a=i(62445),f=Function.prototype,u=r&&Object.getOwnPropertyDescriptor,e=a(f,"name"),p=e&&"something"===function(){}.name,g=e&&(!r||r&&u(f,"name").configurable);v.exports={EXISTS:e,PROPER:p,CONFIGURABLE:g}},56389:(v,b,i)=>{var r=i(47964),a=i(77340);v.exports=function(f,u,e){try{return r(a(Object.getOwnPropertyDescriptor(f,u)[e]))}catch(p){}}},29263:(v,b,i)=>{var r=i(96644),a=i(47964);v.exports=function(f){if("Function"===r(f))return a(f)}},47964:(v,b,i)=>{var r=i(4459),a=Function.prototype,f=a.call,u=r&&a.bind.bind(f,f);v.exports=r?u:function(e){return function(){return f.apply(e,arguments)}}},73626:(v,b,i)=>{var r=i(31864),a=i(25591),f=function(u){return a(u)?u:void 0};v.exports=function(u,e){return arguments.length<2?f(r[u]):r[u]&&r[u][e]}},63076:(v,b,i)=>{var r=i(99420),a=i(35642),f=i(37432),u=i(72339),p=i(84563)("iterator");v.exports=function(g){if(!f(g))return a(g,p)||a(g,"@@iterator")||u[r(g)]}},36414:(v,b,i)=>{var r=i(757),a=i(77340),f=i(21099),u=i(60802),e=i(63076),p=TypeError;v.exports=function(g,S){var M=arguments.length<2?e(g):S;if(a(M))return f(r(M,g));throw p(u(g)+" is not iterable")}},35642:(v,b,i)=>{var r=i(77340),a=i(37432);v.exports=function(f,u){var e=f[u];return a(e)?void 0:r(e)}},16162:(v,b,i)=>{var r=i(47964),a=i(16174),f=Math.floor,u=r("".charAt),e=r("".replace),p=r("".slice),g=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,S=/\$([$&'`]|\d{1,2})/g;v.exports=function(M,w,x,B,W,j){var q=x+M.length,ue=B.length,re=S;return void 0!==W&&(W=a(W),re=g),e(j,re,function(H,se){var ae;switch(u(se,0)){case"$":return"$";case"&":return M;case"`":return p(w,0,x);case"'":return p(w,q);case"<":ae=W[p(se,1,-1)];break;default:var ie=+se;if(0===ie)return H;if(ie>ue){var fe=f(ie/10);return 0===fe?H:fe<=ue?void 0===B[fe-1]?u(se,1):B[fe-1]+u(se,1):H}ae=B[ie-1]}return void 0===ae?"":ae})}},31864:function(v){var b=function(i){return i&&i.Math==Math&&i};v.exports=b("object"==typeof globalThis&&globalThis)||b("object"==typeof window&&window)||b("object"==typeof self&&self)||b("object"==typeof global&&global)||function(){return this}()||this||Function("return this")()},62445:(v,b,i)=>{var r=i(47964),a=i(16174),f=r({}.hasOwnProperty);v.exports=Object.hasOwn||function(e,p){return f(a(e),p)}},3536:v=>{v.exports={}},67538:(v,b,i)=>{var r=i(73626);v.exports=r("document","documentElement")},27091:(v,b,i)=>{var r=i(47012),a=i(8597),f=i(85815);v.exports=!r&&!a(function(){return 7!=Object.defineProperty(f("div"),"a",{get:function(){return 7}}).a})},56169:(v,b,i)=>{var r=i(47964),a=i(8597),f=i(96644),u=Object,e=r("".split);v.exports=a(function(){return!u("z").propertyIsEnumerable(0)})?function(p){return"String"==f(p)?e(p,""):u(p)}:u},38267:(v,b,i)=>{var r=i(25591),a=i(60726),f=i(91464);v.exports=function(u,e,p){var g,S;return f&&r(g=e.constructor)&&g!==p&&a(S=g.prototype)&&S!==p.prototype&&f(u,S),u}},87720:(v,b,i)=>{var r=i(47964),a=i(25591),f=i(59941),u=r(Function.toString);a(f.inspectSource)||(f.inspectSource=function(e){return u(e)}),v.exports=f.inspectSource},64238:(v,b,i)=>{var r=i(51163),a=i(47964),f=i(3536),u=i(60726),e=i(62445),p=i(52975).f,g=i(94564),S=i(7388),M=i(67117),w=i(94295),x=i(39352),B=!1,W=w("meta"),j=0,q=function(ie){p(ie,W,{value:{objectID:"O"+j++,weakData:{}}})},ae=v.exports={enable:function(){ae.enable=function(){},B=!0;var ie=g.f,fe=a([].splice),he={};he[W]=1,ie(he).length&&(g.f=function(Ce){for(var ce=ie(Ce),Be=0,Ve=ce.length;Be<Ve;Be++)if(ce[Be]===W){fe(ce,Be,1);break}return ce},r({target:"Object",stat:!0,forced:!0},{getOwnPropertyNames:S.f}))},fastKey:function(ie,fe){if(!u(ie))return"symbol"==typeof ie?ie:("string"==typeof ie?"S":"P")+ie;if(!e(ie,W)){if(!M(ie))return"F";if(!fe)return"E";q(ie)}return ie[W].objectID},getWeakData:function(ie,fe){if(!e(ie,W)){if(!M(ie))return!0;if(!fe)return!1;q(ie)}return ie[W].weakData},onFreeze:function(ie){return x&&B&&M(ie)&&!e(ie,W)&&q(ie),ie}};f[W]=!0},52493:(v,b,i)=>{var B,W,j,r=i(28095),a=i(31864),f=i(60726),u=i(815),e=i(62445),p=i(59941),g=i(42650),S=i(3536),M="Object already initialized",w=a.TypeError;if(r||p.state){var re=p.state||(p.state=new(0,a.WeakMap));re.get=re.get,re.has=re.has,re.set=re.set,B=function(se,ae){if(re.has(se))throw w(M);return ae.facade=se,re.set(se,ae),ae},W=function(se){return re.get(se)||{}},j=function(se){return re.has(se)}}else{var H=g("state");S[H]=!0,B=function(se,ae){if(e(se,H))throw w(M);return ae.facade=se,u(se,H,ae),ae},W=function(se){return e(se,H)?se[H]:{}},j=function(se){return e(se,H)}}v.exports={set:B,get:W,has:j,enforce:function(se){return j(se)?W(se):B(se,{})},getterFor:function(se){return function(ae){var ie;if(!f(ae)||(ie=W(ae)).type!==se)throw w("Incompatible receiver, "+se+" required");return ie}}}},81643:(v,b,i)=>{var r=i(84563),a=i(72339),f=r("iterator"),u=Array.prototype;v.exports=function(e){return void 0!==e&&(a.Array===e||u[f]===e)}},47883:(v,b,i)=>{var r=i(96644);v.exports=Array.isArray||function(f){return"Array"==r(f)}},25591:(v,b,i)=>{var r=i(34550),a=r.all;v.exports=r.IS_HTMLDDA?function(f){return"function"==typeof f||f===a}:function(f){return"function"==typeof f}},57995:(v,b,i)=>{var r=i(47964),a=i(8597),f=i(25591),u=i(99420),e=i(73626),p=i(87720),g=function(){},S=[],M=e("Reflect","construct"),w=/^\s*(?:class|function)\b/,x=r(w.exec),B=!w.exec(g),W=function(ue){if(!f(ue))return!1;try{return M(g,S,ue),!0}catch(re){return!1}},j=function(ue){if(!f(ue))return!1;switch(u(ue)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return B||!!x(w,p(ue))}catch(re){return!0}};j.sham=!0,v.exports=!M||a(function(){var q;return W(W.call)||!W(Object)||!W(function(){q=!0})||q})?j:W},87215:(v,b,i)=>{var r=i(8597),a=i(25591),f=/#|\.prototype\./,u=function(M,w){var x=p[e(M)];return x==S||x!=g&&(a(w)?r(w):!!w)},e=u.normalize=function(M){return String(M).replace(f,".").toLowerCase()},p=u.data={},g=u.NATIVE="N",S=u.POLYFILL="P";v.exports=u},37432:v=>{v.exports=function(b){return null==b}},60726:(v,b,i)=>{var r=i(25591),a=i(34550),f=a.all;v.exports=a.IS_HTMLDDA?function(u){return"object"==typeof u?null!==u:r(u)||u===f}:function(u){return"object"==typeof u?null!==u:r(u)}},97515:v=>{v.exports=!1},26186:(v,b,i)=>{var r=i(73626),a=i(25591),f=i(93290),u=i(24431),e=Object;v.exports=u?function(p){return"symbol"==typeof p}:function(p){var g=r("Symbol");return a(g)&&f(g.prototype,e(p))}},53284:(v,b,i)=>{var r=i(29727),a=i(757),f=i(21099),u=i(60802),e=i(81643),p=i(24196),g=i(93290),S=i(36414),M=i(63076),w=i(87883),x=TypeError,B=function(j,q){this.stopped=j,this.result=q},W=B.prototype;v.exports=function(j,q,ue){var he,Ce,ce,Be,Ve,Xe,He,H=!(!ue||!ue.AS_ENTRIES),se=!(!ue||!ue.IS_RECORD),ae=!(!ue||!ue.IS_ITERATOR),ie=!(!ue||!ue.INTERRUPTED),fe=r(q,ue&&ue.that),Pe=function(Oe){return he&&w(he,"normal",Oe),new B(!0,Oe)},Ge=function(Oe){return H?(f(Oe),ie?fe(Oe[0],Oe[1],Pe):fe(Oe[0],Oe[1])):ie?fe(Oe,Pe):fe(Oe)};if(se)he=j.iterator;else if(ae)he=j;else{if(!(Ce=M(j)))throw x(u(j)+" is not iterable");if(e(Ce)){for(ce=0,Be=p(j);Be>ce;ce++)if((Ve=Ge(j[ce]))&&g(W,Ve))return Ve;return new B(!1)}he=S(j,Ce)}for(Xe=se?j.next:he.next;!(He=a(Xe,he)).done;){try{Ve=Ge(He.value)}catch(Oe){w(he,"throw",Oe)}if("object"==typeof Ve&&Ve&&g(W,Ve))return Ve}return new B(!1)}},87883:(v,b,i)=>{var r=i(757),a=i(21099),f=i(35642);v.exports=function(u,e,p){var g,S;a(u);try{if(!(g=f(u,"return"))){if("throw"===e)throw p;return p}g=r(g,u)}catch(M){S=!0,g=M}if("throw"===e)throw p;if(S)throw g;return a(g),p}},30281:(v,b,i)=>{"use strict";var r=i(92053).IteratorPrototype,a=i(38724),f=i(53203),u=i(58242),e=i(72339),p=function(){return this};v.exports=function(g,S,M,w){var x=S+" Iterator";return g.prototype=a(r,{next:f(+!w,M)}),u(g,x,!1,!0),e[x]=p,g}},43291:(v,b,i)=>{"use strict";var r=i(51163),a=i(757),f=i(97515),u=i(20538),e=i(25591),p=i(30281),g=i(3963),S=i(91464),M=i(58242),w=i(815),x=i(70688),B=i(84563),W=i(72339),j=i(92053),q=u.PROPER,ue=u.CONFIGURABLE,re=j.IteratorPrototype,H=j.BUGGY_SAFARI_ITERATORS,se=B("iterator"),ie="values",fe="entries",he=function(){return this};v.exports=function(Ce,ce,Be,Ve,Xe,He,Pe){p(Be,ce,Ve);var dn,rn,vt,Ge=function(xt){if(xt===Xe&&Nt)return Nt;if(!H&&xt in We)return We[xt];switch(xt){case"keys":case ie:case fe:return function(){return new Be(this,xt)}}return function(){return new Be(this)}},Oe=ce+" Iterator",Tt=!1,We=Ce.prototype,Qt=We[se]||We["@@iterator"]||Xe&&We[Xe],Nt=!H&&Qt||Ge(Xe),Yt="Array"==ce&&We.entries||Qt;if(Yt&&(dn=g(Yt.call(new Ce)))!==Object.prototype&&dn.next&&(!f&&g(dn)!==re&&(S?S(dn,re):e(dn[se])||x(dn,se,he)),M(dn,Oe,!0,!0),f&&(W[Oe]=he)),q&&Xe==ie&&Qt&&Qt.name!==ie&&(!f&&ue?w(We,"name",ie):(Tt=!0,Nt=function(){return a(Qt,this)})),Xe)if(rn={values:Ge(ie),keys:He?Nt:Ge("keys"),entries:Ge(fe)},Pe)for(vt in rn)(H||Tt||!(vt in We))&&x(We,vt,rn[vt]);else r({target:ce,proto:!0,forced:H||Tt},rn);return(!f||Pe)&&We[se]!==Nt&&x(We,se,Nt,{name:Xe}),W[ce]=Nt,rn}},92053:(v,b,i)=>{"use strict";var x,B,W,r=i(8597),a=i(25591),f=i(60726),u=i(38724),e=i(3963),p=i(70688),g=i(84563),S=i(97515),M=g("iterator"),w=!1;[].keys&&("next"in(W=[].keys())?(B=e(e(W)))!==Object.prototype&&(x=B):w=!0),!f(x)||r(function(){var q={};return x[M].call(q)!==q})?x={}:S&&(x=u(x)),a(x[M])||p(x,M,function(){return this}),v.exports={IteratorPrototype:x,BUGGY_SAFARI_ITERATORS:w}},72339:v=>{v.exports={}},24196:(v,b,i)=>{var r=i(15902);v.exports=function(a){return r(a.length)}},74952:(v,b,i)=>{var r=i(47964),a=i(8597),f=i(25591),u=i(62445),e=i(47012),p=i(20538).CONFIGURABLE,g=i(87720),S=i(52493),M=S.enforce,w=S.get,x=String,B=Object.defineProperty,W=r("".slice),j=r("".replace),q=r([].join),ue=e&&!a(function(){return 8!==B(function(){},"length",{value:8}).length}),re=String(String).split("String"),H=v.exports=function(se,ae,ie){"Symbol("===W(x(ae),0,7)&&(ae="["+j(x(ae),/^Symbol\(([^)]*)\)/,"$1")+"]"),ie&&ie.getter&&(ae="get "+ae),ie&&ie.setter&&(ae="set "+ae),(!u(se,"name")||p&&se.name!==ae)&&(e?B(se,"name",{value:ae,configurable:!0}):se.name=ae),ue&&ie&&u(ie,"arity")&&se.length!==ie.arity&&B(se,"length",{value:ie.arity});try{ie&&u(ie,"constructor")&&ie.constructor?e&&B(se,"prototype",{writable:!1}):se.prototype&&(se.prototype=void 0)}catch(he){}var fe=M(se);return u(fe,"source")||(fe.source=q(re,"string"==typeof ae?ae:"")),se};Function.prototype.toString=H(function(){return f(this)&&w(this).source||g(this)},"toString")},58194:v=>{var b=Math.ceil,i=Math.floor;v.exports=Math.trunc||function(a){var f=+a;return(f>0?i:b)(f)}},43656:(v,b,i)=>{var r=i(31864),a=i(8597),f=i(47964),u=i(73574),e=i(51664).trim,p=i(48004),g=r.parseInt,S=r.Symbol,M=S&&S.iterator,w=/^[+-]?0x/i,x=f(w.exec),B=8!==g(p+"08")||22!==g(p+"0x16")||M&&!a(function(){g(Object(M))});v.exports=B?function(j,q){var ue=e(u(j));return g(ue,q>>>0||(x(w,ue)?16:10))}:g},51746:(v,b,i)=>{"use strict";var r=i(47012),a=i(47964),f=i(757),u=i(8597),e=i(68032),p=i(77593),g=i(5600),S=i(16174),M=i(56169),w=Object.assign,x=Object.defineProperty,B=a([].concat);v.exports=!w||u(function(){if(r&&1!==w({b:1},w(x({},"a",{enumerable:!0,get:function(){x(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var W={},j={},q=Symbol(),ue="abcdefghijklmnopqrst";return W[q]=7,ue.split("").forEach(function(re){j[re]=re}),7!=w({},W)[q]||e(w({},j)).join("")!=ue})?function(j,q){for(var ue=S(j),re=arguments.length,H=1,se=p.f,ae=g.f;re>H;)for(var ce,ie=M(arguments[H++]),fe=se?B(e(ie),se(ie)):e(ie),he=fe.length,Ce=0;he>Ce;)ce=fe[Ce++],(!r||f(ae,ie,ce))&&(ue[ce]=ie[ce]);return ue}:w},38724:(v,b,i)=>{var re,r=i(21099),a=i(10988),f=i(71001),u=i(3536),e=i(67538),p=i(85815),g=i(42650),w="prototype",x="script",B=g("IE_PROTO"),W=function(){},j=function(se){return"<"+x+">"+se+"</"+x+">"},q=function(se){se.write(j("")),se.close();var ae=se.parentWindow.Object;return se=null,ae},H=function(){try{re=new ActiveXObject("htmlfile")}catch(ae){}H="undefined"!=typeof document?document.domain&&re?q(re):function(){var ie,se=p("iframe");return se.style.display="none",e.appendChild(se),se.src=String("javascript:"),(ie=se.contentWindow.document).open(),ie.write(j("document.F=Object")),ie.close(),ie.F}():q(re);for(var se=f.length;se--;)delete H[w][f[se]];return H()};u[B]=!0,v.exports=Object.create||function(ae,ie){var fe;return null!==ae?(W[w]=r(ae),fe=new W,W[w]=null,fe[B]=ae):fe=H(),void 0===ie?fe:a.f(fe,ie)}},10988:(v,b,i)=>{var r=i(47012),a=i(52339),f=i(52975),u=i(21099),e=i(8643),p=i(68032);b.f=r&&!a?Object.defineProperties:function(S,M){u(S);for(var j,w=e(M),x=p(M),B=x.length,W=0;B>W;)f.f(S,j=x[W++],w[j]);return S}},52975:(v,b,i)=>{var r=i(47012),a=i(27091),f=i(52339),u=i(21099),e=i(16582),p=TypeError,g=Object.defineProperty,S=Object.getOwnPropertyDescriptor,M="enumerable",w="configurable",x="writable";b.f=r?f?function(W,j,q){if(u(W),j=e(j),u(q),"function"==typeof W&&"prototype"===j&&"value"in q&&x in q&&!q[x]){var ue=S(W,j);ue&&ue[x]&&(W[j]=q.value,q={configurable:w in q?q[w]:ue[w],enumerable:M in q?q[M]:ue[M],writable:!1})}return g(W,j,q)}:g:function(W,j,q){if(u(W),j=e(j),u(q),a)try{return g(W,j,q)}catch(ue){}if("get"in q||"set"in q)throw p("Accessors not supported");return"value"in q&&(W[j]=q.value),W}},93099:(v,b,i)=>{var r=i(47012),a=i(757),f=i(5600),u=i(53203),e=i(8643),p=i(16582),g=i(62445),S=i(27091),M=Object.getOwnPropertyDescriptor;b.f=r?M:function(x,B){if(x=e(x),B=p(B),S)try{return M(x,B)}catch(W){}if(g(x,B))return u(!a(f.f,x,B),x[B])}},7388:(v,b,i)=>{var r=i(96644),a=i(8643),f=i(94564).f,u=i(32342),e="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];v.exports.f=function(S){return e&&"Window"==r(S)?function(g){try{return f(g)}catch(S){return u(e)}}(S):f(a(S))}},94564:(v,b,i)=>{var r=i(77759),f=i(71001).concat("length","prototype");b.f=Object.getOwnPropertyNames||function(e){return r(e,f)}},77593:(v,b)=>{b.f=Object.getOwnPropertySymbols},3963:(v,b,i)=>{var r=i(62445),a=i(25591),f=i(16174),u=i(42650),e=i(51335),p=u("IE_PROTO"),g=Object,S=g.prototype;v.exports=e?g.getPrototypeOf:function(M){var w=f(M);if(r(w,p))return w[p];var x=w.constructor;return a(x)&&w instanceof x?x.prototype:w instanceof g?S:null}},67117:(v,b,i)=>{var r=i(8597),a=i(60726),f=i(96644),u=i(93241),e=Object.isExtensible,p=r(function(){e(1)});v.exports=p||u?function(S){return!(!a(S)||u&&"ArrayBuffer"==f(S))&&(!e||e(S))}:e},93290:(v,b,i)=>{var r=i(47964);v.exports=r({}.isPrototypeOf)},77759:(v,b,i)=>{var r=i(47964),a=i(62445),f=i(8643),u=i(70452).indexOf,e=i(3536),p=r([].push);v.exports=function(g,S){var B,M=f(g),w=0,x=[];for(B in M)!a(e,B)&&a(M,B)&&p(x,B);for(;S.length>w;)a(M,B=S[w++])&&(~u(x,B)||p(x,B));return x}},68032:(v,b,i)=>{var r=i(77759),a=i(71001);v.exports=Object.keys||function(u){return r(u,a)}},5600:(v,b)=>{"use strict";var i={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,a=r&&!i.call({1:2},1);b.f=a?function(u){var e=r(this,u);return!!e&&e.enumerable}:i},91464:(v,b,i)=>{var r=i(56389),a=i(21099),f=i(95143);v.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var p,u=!1,e={};try{(p=r(Object.prototype,"__proto__","set"))(e,[]),u=e instanceof Array}catch(g){}return function(S,M){return a(S),f(M),u?p(S,M):S.__proto__=M,S}}():void 0)},83119:(v,b,i)=>{"use strict";var r=i(72900),a=i(99420);v.exports=r?{}.toString:function(){return"[object "+a(this)+"]"}},48297:(v,b,i)=>{var r=i(757),a=i(25591),f=i(60726),u=TypeError;v.exports=function(e,p){var g,S;if("string"===p&&a(g=e.toString)&&!f(S=r(g,e))||a(g=e.valueOf)&&!f(S=r(g,e))||"string"!==p&&a(g=e.toString)&&!f(S=r(g,e)))return S;throw u("Can't convert object to primitive value")}},99376:(v,b,i)=>{var r=i(73626),a=i(47964),f=i(94564),u=i(77593),e=i(21099),p=a([].concat);v.exports=r("Reflect","ownKeys")||function(S){var M=f.f(e(S)),w=u.f;return w?p(M,w(S)):M}},53793:(v,b,i)=>{var r=i(757),a=i(21099),f=i(25591),u=i(96644),e=i(93084),p=TypeError;v.exports=function(g,S){var M=g.exec;if(f(M)){var w=r(M,g,S);return null!==w&&a(w),w}if("RegExp"===u(g))return r(e,g,S);throw p("RegExp#exec called on incompatible receiver")}},93084:(v,b,i)=>{"use strict";var fe,he,r=i(757),a=i(47964),f=i(73574),u=i(41891),e=i(29895),p=i(77719),g=i(38724),S=i(52493).get,M=i(38126),w=i(31053),x=p("native-string-replace",String.prototype.replace),B=RegExp.prototype.exec,W=B,j=a("".charAt),q=a("".indexOf),ue=a("".replace),re=a("".slice),H=(he=/b*/g,r(B,fe=/a/,"a"),r(B,he,"a"),0!==fe.lastIndex||0!==he.lastIndex),se=e.BROKEN_CARET,ae=void 0!==/()??/.exec("")[1];(H||ae||se||M||w)&&(W=function(he){var Xe,He,Pe,Ge,Oe,Tt,We,Ce=this,ce=S(Ce),Be=f(he),Ve=ce.raw;if(Ve)return Ve.lastIndex=Ce.lastIndex,Xe=r(W,Ve,Be),Ce.lastIndex=Ve.lastIndex,Xe;var Qt=ce.groups,Nt=se&&Ce.sticky,Yt=r(u,Ce),dn=Ce.source,rn=0,vt=Be;if(Nt&&(Yt=ue(Yt,"y",""),-1===q(Yt,"g")&&(Yt+="g"),vt=re(Be,Ce.lastIndex),Ce.lastIndex>0&&(!Ce.multiline||Ce.multiline&&"\n"!==j(Be,Ce.lastIndex-1))&&(dn="(?: "+dn+")",vt=" "+vt,rn++),He=new RegExp("^(?:"+dn+")",Yt)),ae&&(He=new RegExp("^"+dn+"$(?!\\s)",Yt)),H&&(Pe=Ce.lastIndex),Ge=r(B,Nt?He:Ce,vt),Nt?Ge?(Ge.input=re(Ge.input,rn),Ge[0]=re(Ge[0],rn),Ge.index=Ce.lastIndex,Ce.lastIndex+=Ge[0].length):Ce.lastIndex=0:H&&Ge&&(Ce.lastIndex=Ce.global?Ge.index+Ge[0].length:Pe),ae&&Ge&&Ge.length>1&&r(x,Ge[0],He,function(){for(Oe=1;Oe<arguments.length-2;Oe++)void 0===arguments[Oe]&&(Ge[Oe]=void 0)}),Ge&&Qt)for(Ge.groups=Tt=g(null),Oe=0;Oe<Qt.length;Oe++)Tt[(We=Qt[Oe])[0]]=Ge[We[1]];return Ge}),v.exports=W},41891:(v,b,i)=>{"use strict";var r=i(21099);v.exports=function(){var a=r(this),f="";return a.hasIndices&&(f+="d"),a.global&&(f+="g"),a.ignoreCase&&(f+="i"),a.multiline&&(f+="m"),a.dotAll&&(f+="s"),a.unicode&&(f+="u"),a.unicodeSets&&(f+="v"),a.sticky&&(f+="y"),f}},29895:(v,b,i)=>{var r=i(8597),f=i(31864).RegExp,u=r(function(){var g=f("a","y");return g.lastIndex=2,null!=g.exec("abcd")}),e=u||r(function(){return!f("a","y").sticky}),p=u||r(function(){var g=f("^r","gy");return g.lastIndex=2,null!=g.exec("str")});v.exports={BROKEN_CARET:p,MISSED_STICKY:e,UNSUPPORTED_Y:u}},38126:(v,b,i)=>{var r=i(8597),f=i(31864).RegExp;v.exports=r(function(){var u=f(".","s");return!(u.dotAll&&u.exec("\n")&&"s"===u.flags)})},31053:(v,b,i)=>{var r=i(8597),f=i(31864).RegExp;v.exports=r(function(){var u=f("(?<a>b)","g");return"b"!==u.exec("b").groups.a||"bc"!=="b".replace(u,"$<a>c")})},95025:(v,b,i)=>{var r=i(37432),a=TypeError;v.exports=function(f){if(r(f))throw a("Can't call method on "+f);return f}},58242:(v,b,i)=>{var r=i(52975).f,a=i(62445),u=i(84563)("toStringTag");v.exports=function(e,p,g){e&&!g&&(e=e.prototype),e&&!a(e,u)&&r(e,u,{configurable:!0,value:p})}},42650:(v,b,i)=>{var r=i(77719),a=i(94295),f=r("keys");v.exports=function(u){return f[u]||(f[u]=a(u))}},59941:(v,b,i)=>{var r=i(31864),a=i(11996),f="__core-js_shared__",u=r[f]||a(f,{});v.exports=u},77719:(v,b,i)=>{var r=i(97515),a=i(59941);(v.exports=function(f,u){return a[f]||(a[f]=void 0!==u?u:{})})("versions",[]).push({version:"3.30.2",mode:r?"pure":"global",copyright:"\xa9 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.30.2/LICENSE",source:"https://github.com/zloirock/core-js"})},64487:(v,b,i)=>{var r=i(47964),a=i(22157),f=i(73574),u=i(95025),e=r("".charAt),p=r("".charCodeAt),g=r("".slice),S=function(M){return function(w,x){var q,ue,B=f(u(w)),W=a(x),j=B.length;return W<0||W>=j?M?"":void 0:(q=p(B,W))<55296||q>56319||W+1===j||(ue=p(B,W+1))<56320||ue>57343?M?e(B,W):q:M?g(B,W,W+2):ue-56320+(q-55296<<10)+65536}};v.exports={codeAt:S(!1),charAt:S(!0)}},51664:(v,b,i)=>{var r=i(47964),a=i(95025),f=i(73574),u=i(48004),e=r("".replace),p=RegExp("^["+u+"]+"),g=RegExp("(^|[^"+u+"])["+u+"]+$"),S=function(M){return function(w){var x=f(a(w));return 1&M&&(x=e(x,p,"")),2&M&&(x=e(x,g,"$1")),x}};v.exports={start:S(1),end:S(2),trim:S(3)}},33021:(v,b,i)=>{var r=i(17189),a=i(8597),u=i(31864).String;v.exports=!!Object.getOwnPropertySymbols&&!a(function(){var e=Symbol();return!u(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41})},20222:(v,b,i)=>{var r=i(22157),a=Math.max,f=Math.min;v.exports=function(u,e){var p=r(u);return p<0?a(p+e,0):f(p,e)}},8643:(v,b,i)=>{var r=i(56169),a=i(95025);v.exports=function(f){return r(a(f))}},22157:(v,b,i)=>{var r=i(58194);v.exports=function(a){var f=+a;return f!=f||0===f?0:r(f)}},15902:(v,b,i)=>{var r=i(22157),a=Math.min;v.exports=function(f){return f>0?a(r(f),9007199254740991):0}},16174:(v,b,i)=>{var r=i(95025),a=Object;v.exports=function(f){return a(r(f))}},28495:(v,b,i)=>{var r=i(757),a=i(60726),f=i(26186),u=i(35642),e=i(48297),p=i(84563),g=TypeError,S=p("toPrimitive");v.exports=function(M,w){if(!a(M)||f(M))return M;var B,x=u(M,S);if(x){if(void 0===w&&(w="default"),B=r(x,M,w),!a(B)||f(B))return B;throw g("Can't convert object to primitive value")}return void 0===w&&(w="number"),e(M,w)}},16582:(v,b,i)=>{var r=i(28495),a=i(26186);v.exports=function(f){var u=r(f,"string");return a(u)?u:u+""}},72900:(v,b,i)=>{var f={};f[i(84563)("toStringTag")]="z",v.exports="[object z]"===String(f)},73574:(v,b,i)=>{var r=i(99420),a=String;v.exports=function(f){if("Symbol"===r(f))throw TypeError("Cannot convert a Symbol value to a string");return a(f)}},60802:v=>{var b=String;v.exports=function(i){try{return b(i)}catch(r){return"Object"}}},94295:(v,b,i)=>{var r=i(47964),a=0,f=Math.random(),u=r(1..toString);v.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+u(++a+f,36)}},24431:(v,b,i)=>{var r=i(33021);v.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},52339:(v,b,i)=>{var r=i(47012),a=i(8597);v.exports=r&&a(function(){return 42!=Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype})},28095:(v,b,i)=>{var r=i(31864),a=i(25591),f=r.WeakMap;v.exports=a(f)&&/native code/.test(String(f))},84563:(v,b,i)=>{var r=i(31864),a=i(77719),f=i(62445),u=i(94295),e=i(33021),p=i(24431),g=r.Symbol,S=a("wks"),M=p?g.for||g:g&&g.withoutSetter||u;v.exports=function(w){return f(S,w)||(S[w]=e&&f(g,w)?g[w]:M("Symbol."+w)),S[w]}},48004:v=>{v.exports="\t\n\v\f\r \xa0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029\ufeff"},85443:(v,b,i)=>{"use strict";var r=i(51163),a=i(94115).filter;r({target:"Array",proto:!0,forced:!i(37394)("filter")},{filter:function(p){return a(this,p,arguments.length>1?arguments[1]:void 0)}})},66837:(v,b,i)=>{"use strict";var r=i(8643),a=i(24094),f=i(72339),u=i(52493),e=i(52975).f,p=i(43291),g=i(15189),S=i(97515),M=i(47012),w="Array Iterator",x=u.set,B=u.getterFor(w);v.exports=p(Array,"Array",function(j,q){x(this,{type:w,target:r(j),index:0,kind:q})},function(){var j=B(this),q=j.target,ue=j.kind,re=j.index++;return!q||re>=q.length?(j.target=void 0,g(void 0,!0)):g("keys"==ue?re:"values"==ue?q[re]:[re,q[re]],!1)},"values");var W=f.Arguments=f.Array;if(a("keys"),a("values"),a("entries"),!S&&M&&"values"!==W.name)try{e(W,"name",{value:"values"})}catch(j){}},35319:(v,b,i)=>{"use strict";var r=i(51163),a=i(14716).left,f=i(47051),u=i(17189);r({target:"Array",proto:!0,forced:!i(32002)&&u>79&&u<83||!f("reduce")},{reduce:function(M){var w=arguments.length;return a(this,M,w,w>1?arguments[1]:void 0)}})},80477:(v,b,i)=>{var r=i(47012),a=i(20538).EXISTS,f=i(47964),u=i(48213),e=Function.prototype,p=f(e.toString),g=/function\b(?:\s|\/\*[\S\s]*?\*\/|\/\/[^\n\r]*[\n\r]+)*([^\s(/]*)/,S=f(g.exec);r&&!a&&u(e,"name",{configurable:!0,get:function(){try{return S(g,p(this))[1]}catch(w){return""}}})},8868:(v,b,i)=>{var r=i(51163),a=i(51746);r({target:"Object",stat:!0,arity:2,forced:Object.assign!==a},{assign:a})},35704:(v,b,i)=>{var r=i(72900),a=i(70688),f=i(83119);r||a(Object.prototype,"toString",f,{unsafe:!0})},21581:(v,b,i)=>{var r=i(51163),a=i(43656);r({global:!0,forced:parseInt!=a},{parseInt:a})},69665:(v,b,i)=>{"use strict";var r=i(51163),a=i(93084);r({target:"RegExp",proto:!0,forced:/./.exec!==a},{exec:a})},13744:(v,b,i)=>{"use strict";var r=i(64487).charAt,a=i(73574),f=i(52493),u=i(43291),e=i(15189),p="String Iterator",g=f.set,S=f.getterFor(p);u(String,"String",function(M){g(this,{type:p,string:a(M),index:0})},function(){var W,w=S(this),x=w.string,B=w.index;return B>=x.length?e(void 0,!0):(W=r(x,B),w.index+=W.length,e(W,!1))})},26954:(v,b,i)=>{"use strict";var r=i(757),a=i(9357),f=i(21099),u=i(37432),e=i(15902),p=i(73574),g=i(95025),S=i(35642),M=i(27678),w=i(53793);a("match",function(x,B,W){return[function(q){var ue=g(this),re=u(q)?void 0:S(q,x);return re?r(re,q,ue):new RegExp(q)[x](p(ue))},function(j){var q=f(this),ue=p(j),re=W(B,q,ue);if(re.done)return re.value;if(!q.global)return w(q,ue);var H=q.unicode;q.lastIndex=0;for(var ie,se=[],ae=0;null!==(ie=w(q,ue));){var fe=p(ie[0]);se[ae]=fe,""===fe&&(q.lastIndex=M(ue,e(q.lastIndex),H)),ae++}return 0===ae?null:se}]})},66262:(v,b,i)=>{"use strict";var r=i(32328),a=i(757),f=i(47964),u=i(9357),e=i(8597),p=i(21099),g=i(25591),S=i(37432),M=i(22157),w=i(15902),x=i(73574),B=i(95025),W=i(27678),j=i(35642),q=i(16162),ue=i(53793),H=i(84563)("replace"),se=Math.max,ae=Math.min,ie=f([].concat),fe=f([].push),he=f("".indexOf),Ce=f("".slice),ce=function(He){return void 0===He?He:String(He)},Be="$0"==="a".replace(/./,"$0"),Ve=!!/./[H]&&""===/./[H]("a","$0");u("replace",function(He,Pe,Ge){var Oe=Ve?"$":"$0";return[function(We,Qt){var Nt=B(this),Yt=S(We)?void 0:j(We,H);return Yt?a(Yt,We,Nt,Qt):a(Pe,x(Nt),We,Qt)},function(Tt,We){var Qt=p(this),Nt=x(Tt);if("string"==typeof We&&-1===he(We,Oe)&&-1===he(We,"$<")){var Yt=Ge(Pe,Qt,Nt,We);if(Yt.done)return Yt.value}var dn=g(We);dn||(We=x(We));var rn=Qt.global;if(rn){var vt=Qt.unicode;Qt.lastIndex=0}for(var xt=[];;){var Ct=ue(Qt,Nt);if(null===Ct||(fe(xt,Ct),!rn))break;""===x(Ct[0])&&(Qt.lastIndex=W(Nt,w(Qt.lastIndex),vt))}for(var Fn="",pr=0,mi=0;mi<xt.length;mi++){for(var ci=x((Ct=xt[mi])[0]),hr=se(ae(M(Ct.index),Nt.length),0),Br=[],Ur=1;Ur<Ct.length;Ur++)fe(Br,ce(Ct[Ur]));var Hn=Ct.groups;if(dn){var er=ie([ci],Br,hr,Nt);void 0!==Hn&&fe(er,Hn);var _r=x(r(We,void 0,er))}else _r=q(ci,Nt,hr,Br,Hn,We);hr>=pr&&(Fn+=Ce(Nt,pr,hr)+_r,pr=hr+ci.length)}return Fn+Ce(Nt,pr)}]},!!e(function(){var He=/./;return He.exec=function(){var Pe=[];return Pe.groups={a:"7"},Pe},"7"!=="".replace(He,"$<a>")})||!Be||Ve)},62913:(v,b,i)=>{"use strict";var fe,r=i(39352),a=i(31864),f=i(47964),u=i(41292),e=i(64238),p=i(41603),g=i(96491),S=i(60726),M=i(52493).enforce,w=i(8597),x=i(28095),B=Object,W=Array.isArray,j=B.isExtensible,q=B.isFrozen,ue=B.isSealed,re=B.freeze,H=B.seal,se={},ae={},ie=!a.ActiveXObject&&"ActiveXObject"in a,he=function(Ge){return function(){return Ge(this,arguments.length?arguments[0]:void 0)}},Ce=p("WeakMap",he,g),ce=Ce.prototype,Be=f(ce.set);if(x)if(ie){fe=g.getConstructor(he,"WeakMap",!0),e.enable();var Xe=f(ce.delete),He=f(ce.has),Pe=f(ce.get);u(ce,{delete:function(Ge){if(S(Ge)&&!j(Ge)){var Oe=M(this);return Oe.frozen||(Oe.frozen=new fe),Xe(this,Ge)||Oe.frozen.delete(Ge)}return Xe(this,Ge)},has:function(Oe){if(S(Oe)&&!j(Oe)){var Tt=M(this);return Tt.frozen||(Tt.frozen=new fe),He(this,Oe)||Tt.frozen.has(Oe)}return He(this,Oe)},get:function(Oe){if(S(Oe)&&!j(Oe)){var Tt=M(this);return Tt.frozen||(Tt.frozen=new fe),He(this,Oe)?Pe(this,Oe):Tt.frozen.get(Oe)}return Pe(this,Oe)},set:function(Oe,Tt){if(S(Oe)&&!j(Oe)){var We=M(this);We.frozen||(We.frozen=new fe),He(this,Oe)?Be(this,Oe,Tt):We.frozen.set(Oe,Tt)}else Be(this,Oe,Tt);return this}})}else r&&w(function(){var Ge=re([]);return Be(new Ce,Ge,1),!q(Ge)})&&u(ce,{set:function(Oe,Tt){var We;return W(Oe)&&(q(Oe)?We=se:ue(Oe)&&(We=ae)),Be(this,Oe,Tt),We==se&&re(Oe),We==ae&&H(Oe),this}})},63438:(v,b,i)=>{i(62913)},22603:(v,b,i)=>{var r=i(31864),a=i(26877),f=i(20713),u=i(66837),e=i(815),p=i(84563),g=p("iterator"),S=p("toStringTag"),M=u.values,w=function(B,W){if(B){if(B[g]!==M)try{e(B,g,M)}catch(q){B[g]=M}if(B[S]||e(B,S,W),a[W])for(var j in u)if(B[j]!==u[j])try{e(B,j,u[j])}catch(q){B[j]=u[j]}}};for(var x in a)w(r[x]&&r[x].prototype,x);w(f,"DOMTokenList")},64762:(v,b,i)=>{"use strict";i.d(b,{ZT:()=>a,_T:()=>u,fM:()=>p,gn:()=>e,mG:()=>S,pi:()=>f,w6:()=>g});var r=function(Ve,Xe){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(He,Pe){He.__proto__=Pe}||function(He,Pe){for(var Ge in Pe)Object.prototype.hasOwnProperty.call(Pe,Ge)&&(He[Ge]=Pe[Ge])})(Ve,Xe)};function a(Ve,Xe){if("function"!=typeof Xe&&null!==Xe)throw new TypeError("Class extends value "+String(Xe)+" is not a constructor or null");function He(){this.constructor=Ve}r(Ve,Xe),Ve.prototype=null===Xe?Object.create(Xe):(He.prototype=Xe.prototype,new He)}var f=function(){return f=Object.assign||function(Xe){for(var He,Pe=1,Ge=arguments.length;Pe<Ge;Pe++)for(var Oe in He=arguments[Pe])Object.prototype.hasOwnProperty.call(He,Oe)&&(Xe[Oe]=He[Oe]);return Xe},f.apply(this,arguments)};function u(Ve,Xe){var He={};for(var Pe in Ve)Object.prototype.hasOwnProperty.call(Ve,Pe)&&Xe.indexOf(Pe)<0&&(He[Pe]=Ve[Pe]);if(null!=Ve&&"function"==typeof Object.getOwnPropertySymbols){var Ge=0;for(Pe=Object.getOwnPropertySymbols(Ve);Ge<Pe.length;Ge++)Xe.indexOf(Pe[Ge])<0&&Object.prototype.propertyIsEnumerable.call(Ve,Pe[Ge])&&(He[Pe[Ge]]=Ve[Pe[Ge]])}return He}function e(Ve,Xe,He,Pe){var Tt,Ge=arguments.length,Oe=Ge<3?Xe:null===Pe?Pe=Object.getOwnPropertyDescriptor(Xe,He):Pe;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)Oe=Reflect.decorate(Ve,Xe,He,Pe);else for(var We=Ve.length-1;We>=0;We--)(Tt=Ve[We])&&(Oe=(Ge<3?Tt(Oe):Ge>3?Tt(Xe,He,Oe):Tt(Xe,He))||Oe);return Ge>3&&Oe&&Object.defineProperty(Xe,He,Oe),Oe}function p(Ve,Xe){return function(He,Pe){Xe(He,Pe,Ve)}}function g(Ve,Xe){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(Ve,Xe)}function S(Ve,Xe,He,Pe){return new(He||(He=Promise))(function(Oe,Tt){function We(Yt){try{Nt(Pe.next(Yt))}catch(dn){Tt(dn)}}function Qt(Yt){try{Nt(Pe.throw(Yt))}catch(dn){Tt(dn)}}function Nt(Yt){Yt.done?Oe(Yt.value):function Ge(Oe){return Oe instanceof He?Oe:new He(function(Tt){Tt(Oe)})}(Yt.value).then(We,Qt)}Nt((Pe=Pe.apply(Ve,Xe||[])).next())})}},46700:(v,b,i)=>{var r={"./af":26431,"./af.js":26431,"./ar":81286,"./ar-dz":1616,"./ar-dz.js":1616,"./ar-kw":9759,"./ar-kw.js":9759,"./ar-ly":43160,"./ar-ly.js":43160,"./ar-ma":62551,"./ar-ma.js":62551,"./ar-sa":79989,"./ar-sa.js":79989,"./ar-tn":6962,"./ar-tn.js":6962,"./ar.js":81286,"./az":15887,"./az.js":15887,"./be":14572,"./be.js":14572,"./bg":3276,"./bg.js":3276,"./bm":93344,"./bm.js":93344,"./bn":58985,"./bn-bd":83990,"./bn-bd.js":83990,"./bn.js":58985,"./bo":94391,"./bo.js":94391,"./br":46728,"./br.js":46728,"./bs":5536,"./bs.js":5536,"./ca":41043,"./ca.js":41043,"./cs":70420,"./cs.js":70420,"./cv":33513,"./cv.js":33513,"./cy":6771,"./cy.js":6771,"./da":47978,"./da.js":47978,"./de":46061,"./de-at":25204,"./de-at.js":25204,"./de-ch":2653,"./de-ch.js":2653,"./de.js":46061,"./dv":85,"./dv.js":85,"./el":8579,"./el.js":8579,"./en-au":25724,"./en-au.js":25724,"./en-ca":10525,"./en-ca.js":10525,"./en-gb":52847,"./en-gb.js":52847,"./en-ie":67216,"./en-ie.js":67216,"./en-il":39305,"./en-il.js":39305,"./en-in":73364,"./en-in.js":73364,"./en-nz":79130,"./en-nz.js":79130,"./en-sg":11161,"./en-sg.js":11161,"./eo":50802,"./eo.js":50802,"./es":40328,"./es-do":45551,"./es-do.js":45551,"./es-mx":75615,"./es-mx.js":75615,"./es-us":64790,"./es-us.js":64790,"./es.js":40328,"./et":96389,"./et.js":96389,"./eu":52961,"./eu.js":52961,"./fa":26151,"./fa.js":26151,"./fi":7997,"./fi.js":7997,"./fil":58898,"./fil.js":58898,"./fo":37779,"./fo.js":37779,"./fr":28174,"./fr-ca":3287,"./fr-ca.js":3287,"./fr-ch":38867,"./fr-ch.js":38867,"./fr.js":28174,"./fy":50452,"./fy.js":50452,"./ga":45014,"./ga.js":45014,"./gd":74127,"./gd.js":74127,"./gl":72124,"./gl.js":72124,"./gom-deva":6444,"./gom-deva.js":6444,"./gom-latn":37953,"./gom-latn.js":37953,"./gu":76604,"./gu.js":76604,"./he":1222,"./he.js":1222,"./hi":74235,"./hi.js":74235,"./hr":622,"./hr.js":622,"./hu":37735,"./hu.js":37735,"./hy-am":90402,"./hy-am.js":90402,"./id":59187,"./id.js":59187,"./is":30536,"./is.js":30536,"./it":35007,"./it-ch":94667,"./it-ch.js":94667,"./it.js":35007,"./ja":62093,"./ja.js":62093,"./jv":80059,"./jv.js":80059,"./ka":66870,"./ka.js":66870,"./kk":80880,"./kk.js":80880,"./km":1083,"./km.js":1083,"./kn":68785,"./kn.js":68785,"./ko":21721,"./ko.js":21721,"./ku":37851,"./ku.js":37851,"./ky":1727,"./ky.js":1727,"./lb":40346,"./lb.js":40346,"./lo":93002,"./lo.js":93002,"./lt":64035,"./lt.js":64035,"./lv":56927,"./lv.js":56927,"./me":5634,"./me.js":5634,"./mi":94173,"./mi.js":94173,"./mk":86320,"./mk.js":86320,"./ml":11705,"./ml.js":11705,"./mn":31062,"./mn.js":31062,"./mr":92805,"./mr.js":92805,"./ms":11341,"./ms-my":59900,"./ms-my.js":59900,"./ms.js":11341,"./mt":37734,"./mt.js":37734,"./my":19034,"./my.js":19034,"./nb":9324,"./nb.js":9324,"./ne":46495,"./ne.js":46495,"./nl":70673,"./nl-be":76272,"./nl-be.js":76272,"./nl.js":70673,"./nn":72486,"./nn.js":72486,"./oc-lnc":46219,"./oc-lnc.js":46219,"./pa-in":2829,"./pa-in.js":2829,"./pl":78444,"./pl.js":78444,"./pt":53170,"./pt-br":66117,"./pt-br.js":66117,"./pt.js":53170,"./ro":96587,"./ro.js":96587,"./ru":39264,"./ru.js":39264,"./sd":42135,"./sd.js":42135,"./se":95366,"./se.js":95366,"./si":93379,"./si.js":93379,"./sk":46143,"./sk.js":46143,"./sl":196,"./sl.js":196,"./sq":21082,"./sq.js":21082,"./sr":91621,"./sr-cyrl":98963,"./sr-cyrl.js":98963,"./sr.js":91621,"./ss":41404,"./ss.js":41404,"./sv":55685,"./sv.js":55685,"./sw":3872,"./sw.js":3872,"./ta":54106,"./ta.js":54106,"./te":39204,"./te.js":39204,"./tet":83692,"./tet.js":83692,"./tg":86361,"./tg.js":86361,"./th":31735,"./th.js":31735,"./tk":1568,"./tk.js":1568,"./tl-ph":96129,"./tl-ph.js":96129,"./tlh":13759,"./tlh.js":13759,"./tr":81644,"./tr.js":81644,"./tzl":90875,"./tzl.js":90875,"./tzm":16878,"./tzm-latn":11041,"./tzm-latn.js":11041,"./tzm.js":16878,"./ug-cn":74357,"./ug-cn.js":74357,"./uk":74810,"./uk.js":74810,"./ur":86794,"./ur.js":86794,"./uz":28966,"./uz-latn":77959,"./uz-latn.js":77959,"./uz.js":28966,"./vi":35386,"./vi.js":35386,"./x-pseudo":23156,"./x-pseudo.js":23156,"./yo":68028,"./yo.js":68028,"./zh-cn":9330,"./zh-cn.js":9330,"./zh-hk":89380,"./zh-hk.js":89380,"./zh-mo":60874,"./zh-mo.js":60874,"./zh-tw":96508,"./zh-tw.js":96508};function a(u){var e=f(u);return i(e)}function f(u){if(!i.o(r,u)){var e=new Error("Cannot find module '"+u+"'");throw e.code="MODULE_NOT_FOUND",e}return r[u]}a.keys=function(){return Object.keys(r)},a.resolve=f,v.exports=a,a.id=46700},24654:()=>{},30071:(v,b,i)=>{v.exports=i(75242)},58711:(v,b,i)=>{v.exports=i(10323)},14226:(v,b,i)=>{v.exports=i(38762)},15886:(v,b,i)=>{v.exports=i(71873)},34377:(v,b,i)=>{v.exports=i(61599)},28086:(v,b,i)=>{v.exports=i(34097)},56166:(v,b,i)=>{v.exports=i(15149)},48129:(v,b,i)=>{v.exports=i(83361)},10068:(v,b,i)=>{v.exports=i(19095)},45163:(v,b,i)=>{v.exports=i(71420)},45819:(v,b,i)=>{v.exports=i(13178)},84901:(v,b,i)=>{v.exports=i(52049)},35524:(v,b,i)=>{v.exports=i(83655)},71851:(v,b,i)=>{v.exports=i(87054)},91465:(v,b,i)=>{v.exports=i(51946)},95327:(v,b,i)=>{v.exports=i(40764)},37940:(v,b,i)=>{v.exports=i(81214)},35431:(v,b,i)=>{v.exports=i(50881)},53757:(v,b,i)=>{v.exports=i(38813)},46558:(v,b,i)=>{v.exports=i(70157)},53625:(v,b,i)=>{v.exports=i(3502)},31978:(v,b,i)=>{v.exports=i(81610)},33814:(v,b,i)=>{v.exports=i(19543)},84220:(v,b,i)=>{v.exports=i(74046)},40984:(v,b,i)=>{v.exports=i(13731)},32322:(v,b,i)=>{v.exports=i(80129)},44859:(v,b,i)=>{v.exports=i(43720)},54082:(v,b,i)=>{v.exports=i(640)},30508:(v,b,i)=>{v.exports=i(50320)},46245:(v,b,i)=>{v.exports=i(1162)},69605:(v,b,i)=>{v.exports=i(70809)},86413:(v,b,i)=>{v.exports=i(26498)},87513:(v,b,i)=>{v.exports=i(12118)},69253:(v,b,i)=>{v.exports=i(70906)},8225:(v,b,i)=>{v.exports=i(56286)},64975:(v,b,i)=>{v.exports=i(54153)},66627:(v,b,i)=>{v.exports=i(90755)},68645:(v,b,i)=>{v.exports=i(98235)},14306:(v,b,i)=>{v.exports=i(78096)},6379:(v,b,i)=>{v.exports=i(31236)},72632:(v,b,i)=>{v.exports=i(15819)},28033:(v,b,i)=>{v.exports=i(44948)},19621:(v,b,i)=>{v.exports=i(96471)},54839:(v,b,i)=>{v.exports=i(5228)},95343:(v,b,i)=>{v.exports=i(50182)},73921:(v,b,i)=>{v.exports=i(41171)},70891:(v,b,i)=>{v.exports=i(54585)},77576:(v,b,i)=>{v.exports=i(62005)},45862:(v,b,i)=>{v.exports=i(39964)},51134:(v,b,i)=>{v.exports=i(70326)},23591:(v,b,i)=>{v.exports=i(98162)},76593:(v,b,i)=>{v.exports=i(42346)},22714:(v,b,i)=>{v.exports=i(4204)},62734:(v,b,i)=>{v.exports=i(24329)},69138:(v,b,i)=>{v.exports=i(2793)},69244:(v,b,i)=>{v.exports=i(42700)},15805:(v,b,i)=>{v.exports=i(70269)},63380:(v,b,i)=>{v.exports=i(88819)},66342:(v,b,i)=>{v.exports=i(55912)},71950:(v,b,i)=>{v.exports=i(91185)},12885:(v,b,i)=>{var r=i(79599).default,a=i(77576),f=i(63380),u=i(73921),e=i(76593),p=i(6379),g=i(62734),S=i(69138),M=i(28033),w=i(19621);function x(){"use strict";v.exports=x=function(){return B},v.exports.__esModule=!0,v.exports.default=v.exports;var B={},W=Object.prototype,j=W.hasOwnProperty,q=a||function(vt,xt,Ct){vt[xt]=Ct.value},ue="function"==typeof f?f:{},re=ue.iterator||"@@iterator",H=ue.asyncIterator||"@@asyncIterator",se=ue.toStringTag||"@@toStringTag";function ae(vt,xt,Ct){return a(vt,xt,{value:Ct,enumerable:!0,configurable:!0,writable:!0}),vt[xt]}try{ae({},"")}catch(vt){ae=function(Ct,Gt,Fn){return Ct[Gt]=Fn}}function ie(vt,xt,Ct,Gt){var pr=u((xt&&xt.prototype instanceof Ce?xt:Ce).prototype),mi=new Yt(Gt||[]);return q(pr,"_invoke",{value:Tt(vt,Ct,mi)}),pr}function fe(vt,xt,Ct){try{return{type:"normal",arg:vt.call(xt,Ct)}}catch(Gt){return{type:"throw",arg:Gt}}}B.wrap=ie;var he={};function Ce(){}function ce(){}function Be(){}var Ve={};ae(Ve,re,function(){return this});var He=e&&e(e(dn([])));He&&He!==W&&j.call(He,re)&&(Ve=He);var Pe=Be.prototype=Ce.prototype=u(Ve);function Ge(vt){var xt;p(xt=["next","throw","return"]).call(xt,function(Ct){ae(vt,Ct,function(Gt){return this._invoke(Ct,Gt)})})}function Oe(vt,xt){function Ct(Fn,pr,mi,ci){var hr=fe(vt[Fn],vt,pr);if("throw"!==hr.type){var Br=hr.arg,Ur=Br.value;return Ur&&"object"==r(Ur)&&j.call(Ur,"__await")?xt.resolve(Ur.__await).then(function(Hn){Ct("next",Hn,mi,ci)},function(Hn){Ct("throw",Hn,mi,ci)}):xt.resolve(Ur).then(function(Hn){Br.value=Hn,mi(Br)},function(Hn){return Ct("throw",Hn,mi,ci)})}ci(hr.arg)}var Gt;q(this,"_invoke",{value:function(pr,mi){function ci(){return new xt(function(hr,Br){Ct(pr,mi,hr,Br)})}return Gt=Gt?Gt.then(ci,ci):ci()}})}function Tt(vt,xt,Ct){var Gt="suspendedStart";return function(Fn,pr){if("executing"===Gt)throw new Error("Generator is already running");if("completed"===Gt){if("throw"===Fn)throw pr;return{value:void 0,done:!0}}for(Ct.method=Fn,Ct.arg=pr;;){var mi=Ct.delegate;if(mi){var ci=We(mi,Ct);if(ci){if(ci===he)continue;return ci}}if("next"===Ct.method)Ct.sent=Ct._sent=Ct.arg;else if("throw"===Ct.method){if("suspendedStart"===Gt)throw Gt="completed",Ct.arg;Ct.dispatchException(Ct.arg)}else"return"===Ct.method&&Ct.abrupt("return",Ct.arg);Gt="executing";var hr=fe(vt,xt,Ct);if("normal"===hr.type){if(Gt=Ct.done?"completed":"suspendedYield",hr.arg===he)continue;return{value:hr.arg,done:Ct.done}}"throw"===hr.type&&(Gt="completed",Ct.method="throw",Ct.arg=hr.arg)}}}function We(vt,xt){var Ct=xt.method,Gt=vt.iterator[Ct];if(void 0===Gt)return xt.delegate=null,"throw"===Ct&&vt.iterator.return&&(xt.method="return",xt.arg=void 0,We(vt,xt),"throw"===xt.method)||"return"!==Ct&&(xt.method="throw",xt.arg=new TypeError("The iterator does not provide a '"+Ct+"' method")),he;var Fn=fe(Gt,vt.iterator,xt.arg);if("throw"===Fn.type)return xt.method="throw",xt.arg=Fn.arg,xt.delegate=null,he;var pr=Fn.arg;return pr?pr.done?(xt[vt.resultName]=pr.value,xt.next=vt.nextLoc,"return"!==xt.method&&(xt.method="next",xt.arg=void 0),xt.delegate=null,he):pr:(xt.method="throw",xt.arg=new TypeError("iterator result is not an object"),xt.delegate=null,he)}function Qt(vt){var xt={tryLoc:vt[0]};1 in vt&&(xt.catchLoc=vt[1]),2 in vt&&(xt.finallyLoc=vt[2],xt.afterLoc=vt[3]),this.tryEntries.push(xt)}function Nt(vt){var xt=vt.completion||{};xt.type="normal",delete xt.arg,vt.completion=xt}function Yt(vt){this.tryEntries=[{tryLoc:"root"}],p(vt).call(vt,Qt,this),this.reset(!0)}function dn(vt){if(vt){var xt=vt[re];if(xt)return xt.call(vt);if("function"==typeof vt.next)return vt;if(!isNaN(vt.length)){var Ct=-1,Gt=function Fn(){for(;++Ct<vt.length;)if(j.call(vt,Ct))return Fn.value=vt[Ct],Fn.done=!1,Fn;return Fn.value=void 0,Fn.done=!0,Fn};return Gt.next=Gt}}return{next:rn}}function rn(){return{value:void 0,done:!0}}return ce.prototype=Be,q(Pe,"constructor",{value:Be,configurable:!0}),q(Be,"constructor",{value:ce,configurable:!0}),ce.displayName=ae(Be,se,"GeneratorFunction"),B.isGeneratorFunction=function(vt){var xt="function"==typeof vt&&vt.constructor;return!!xt&&(xt===ce||"GeneratorFunction"===(xt.displayName||xt.name))},B.mark=function(vt){return g?g(vt,Be):(vt.__proto__=Be,ae(vt,se,"GeneratorFunction")),vt.prototype=u(Pe),vt},B.awrap=function(vt){return{__await:vt}},Ge(Oe.prototype),ae(Oe.prototype,H,function(){return this}),B.AsyncIterator=Oe,B.async=function(vt,xt,Ct,Gt,Fn){void 0===Fn&&(Fn=S);var pr=new Oe(ie(vt,xt,Ct,Gt),Fn);return B.isGeneratorFunction(xt)?pr:pr.next().then(function(mi){return mi.done?mi.value:pr.next()})},Ge(Pe),ae(Pe,se,"Generator"),ae(Pe,re,function(){return this}),ae(Pe,"toString",function(){return"[object Generator]"}),B.keys=function(vt){var xt=Object(vt),Ct=[];for(var Gt in xt)Ct.push(Gt);return M(Ct).call(Ct),function Fn(){for(;Ct.length;){var pr=Ct.pop();if(pr in xt)return Fn.value=pr,Fn.done=!1,Fn}return Fn.done=!0,Fn}},B.values=dn,Yt.prototype={constructor:Yt,reset:function(xt){var Ct;if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,p(Ct=this.tryEntries).call(Ct,Nt),!xt)for(var Gt in this)"t"===Gt.charAt(0)&&j.call(this,Gt)&&!isNaN(+w(Gt).call(Gt,1))&&(this[Gt]=void 0)},stop:function(){this.done=!0;var xt=this.tryEntries[0].completion;if("throw"===xt.type)throw xt.arg;return this.rval},dispatchException:function(xt){if(this.done)throw xt;var Ct=this;function Gt(Br,Ur){return mi.type="throw",mi.arg=xt,Ct.next=Br,Ur&&(Ct.method="next",Ct.arg=void 0),!!Ur}for(var Fn=this.tryEntries.length-1;Fn>=0;--Fn){var pr=this.tryEntries[Fn],mi=pr.completion;if("root"===pr.tryLoc)return Gt("end");if(pr.tryLoc<=this.prev){var ci=j.call(pr,"catchLoc"),hr=j.call(pr,"finallyLoc");if(ci&&hr){if(this.prev<pr.catchLoc)return Gt(pr.catchLoc,!0);if(this.prev<pr.finallyLoc)return Gt(pr.finallyLoc)}else if(ci){if(this.prev<pr.catchLoc)return Gt(pr.catchLoc,!0)}else{if(!hr)throw new Error("try statement without catch or finally");if(this.prev<pr.finallyLoc)return Gt(pr.finallyLoc)}}}},abrupt:function(xt,Ct){for(var Gt=this.tryEntries.length-1;Gt>=0;--Gt){var Fn=this.tryEntries[Gt];if(Fn.tryLoc<=this.prev&&j.call(Fn,"finallyLoc")&&this.prev<Fn.finallyLoc){var pr=Fn;break}}pr&&("break"===xt||"continue"===xt)&&pr.tryLoc<=Ct&&Ct<=pr.finallyLoc&&(pr=null);var mi=pr?pr.completion:{};return mi.type=xt,mi.arg=Ct,pr?(this.method="next",this.next=pr.finallyLoc,he):this.complete(mi)},complete:function(xt,Ct){if("throw"===xt.type)throw xt.arg;return"break"===xt.type||"continue"===xt.type?this.next=xt.arg:"return"===xt.type?(this.rval=this.arg=xt.arg,this.method="return",this.next="end"):"normal"===xt.type&&Ct&&(this.next=Ct),he},finish:function(xt){for(var Ct=this.tryEntries.length-1;Ct>=0;--Ct){var Gt=this.tryEntries[Ct];if(Gt.finallyLoc===xt)return this.complete(Gt.completion,Gt.afterLoc),Nt(Gt),he}},catch:function(xt){for(var Ct=this.tryEntries.length-1;Ct>=0;--Ct){var Gt=this.tryEntries[Ct];if(Gt.tryLoc===xt){var Fn=Gt.completion;if("throw"===Fn.type){var pr=Fn.arg;Nt(Gt)}return pr}}throw new Error("illegal catch attempt")},delegateYield:function(xt,Ct,Gt){return this.delegate={iterator:dn(xt),resultName:Ct,nextLoc:Gt},"next"===this.method&&(this.arg=void 0),he}},B}v.exports=x,v.exports.__esModule=!0,v.exports.default=v.exports},79599:(v,b,i)=>{var r=i(63380),a=i(66342);function f(u){return v.exports=f="function"==typeof r&&"symbol"==typeof a?function(e){return typeof e}:function(e){return e&&"function"==typeof r&&e.constructor===r&&e!==r.prototype?"symbol":typeof e},v.exports.__esModule=!0,v.exports.default=v.exports,f(u)}v.exports=f,v.exports.__esModule=!0,v.exports.default=v.exports},33950:(v,b,i)=>{var r=i(12885)();v.exports=r;try{regeneratorRuntime=r}catch(a){"object"==typeof globalThis?globalThis.regeneratorRuntime=r:Function("r","regeneratorRuntime = r")(r)}},32019:(v,b,i)=>{"use strict";i.d(b,{LC:()=>a,SB:()=>M,X$:()=>u,ZE:()=>se,ZN:()=>H,_j:()=>r,eR:()=>x,jt:()=>e,k1:()=>ae,l3:()=>f,oB:()=>S,vP:()=>g});class r{}class a{}const f="*";function u(ie,fe){return{type:7,name:ie,definitions:fe,options:{}}}function e(ie,fe=null){return{type:4,styles:fe,timings:ie}}function g(ie,fe=null){return{type:2,steps:ie,options:fe}}function S(ie){return{type:6,styles:ie,offset:null}}function M(ie,fe,he){return{type:0,name:ie,styles:fe,options:he}}function x(ie,fe,he=null){return{type:1,expr:ie,animation:fe,options:he}}function re(ie){Promise.resolve(null).then(ie)}class H{constructor(fe=0,he=0){this._onDoneFns=[],this._onStartFns=[],this._onDestroyFns=[],this._started=!1,this._destroyed=!1,this._finished=!1,this._position=0,this.parentPlayer=null,this.totalTime=fe+he}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(fe=>fe()),this._onDoneFns=[])}onStart(fe){this._onStartFns.push(fe)}onDone(fe){this._onDoneFns.push(fe)}onDestroy(fe){this._onDestroyFns.push(fe)}hasStarted(){return this._started}init(){}play(){this.hasStarted()||(this._onStart(),this.triggerMicrotask()),this._started=!0}triggerMicrotask(){re(()=>this._onFinish())}_onStart(){this._onStartFns.forEach(fe=>fe()),this._onStartFns=[]}pause(){}restart(){}finish(){this._onFinish()}destroy(){this._destroyed||(this._destroyed=!0,this.hasStarted()||this._onStart(),this.finish(),this._onDestroyFns.forEach(fe=>fe()),this._onDestroyFns=[])}reset(){this._started=!1}setPosition(fe){this._position=this.totalTime?fe*this.totalTime:1}getPosition(){return this.totalTime?this._position/this.totalTime:1}triggerCallback(fe){const he="start"==fe?this._onStartFns:this._onDoneFns;he.forEach(Ce=>Ce()),he.length=0}}class se{constructor(fe){this._onDoneFns=[],this._onStartFns=[],this._finished=!1,this._started=!1,this._destroyed=!1,this._onDestroyFns=[],this.parentPlayer=null,this.totalTime=0,this.players=fe;let he=0,Ce=0,ce=0;const Be=this.players.length;0==Be?re(()=>this._onFinish()):this.players.forEach(Ve=>{Ve.onDone(()=>{++he==Be&&this._onFinish()}),Ve.onDestroy(()=>{++Ce==Be&&this._onDestroy()}),Ve.onStart(()=>{++ce==Be&&this._onStart()})}),this.totalTime=this.players.reduce((Ve,Xe)=>Math.max(Ve,Xe.totalTime),0)}_onFinish(){this._finished||(this._finished=!0,this._onDoneFns.forEach(fe=>fe()),this._onDoneFns=[])}init(){this.players.forEach(fe=>fe.init())}onStart(fe){this._onStartFns.push(fe)}_onStart(){this.hasStarted()||(this._started=!0,this._onStartFns.forEach(fe=>fe()),this._onStartFns=[])}onDone(fe){this._onDoneFns.push(fe)}onDestroy(fe){this._onDestroyFns.push(fe)}hasStarted(){return this._started}play(){this.parentPlayer||this.init(),this._onStart(),this.players.forEach(fe=>fe.play())}pause(){this.players.forEach(fe=>fe.pause())}restart(){this.players.forEach(fe=>fe.restart())}finish(){this._onFinish(),this.players.forEach(fe=>fe.finish())}destroy(){this._onDestroy()}_onDestroy(){this._destroyed||(this._destroyed=!0,this._onFinish(),this.players.forEach(fe=>fe.destroy()),this._onDestroyFns.forEach(fe=>fe()),this._onDestroyFns=[])}reset(){this.players.forEach(fe=>fe.reset()),this._destroyed=!1,this._finished=!1,this._started=!1}setPosition(fe){const he=fe*this.totalTime;this.players.forEach(Ce=>{const ce=Ce.totalTime?Math.min(1,he/Ce.totalTime):1;Ce.setPosition(ce)})}getPosition(){const fe=this.players.reduce((he,Ce)=>null===he||Ce.totalTime>he.totalTime?Ce:he,null);return null!=fe?fe.getPosition():0}beforeDestroy(){this.players.forEach(fe=>{fe.beforeDestroy&&fe.beforeDestroy()})}triggerCallback(fe){const he="start"==fe?this._onStartFns:this._onDoneFns;he.forEach(Ce=>Ce()),he.length=0}}const ae="!"},11048:(v,b,i)=>{"use strict";i.d(b,{Do:()=>ie,ED:()=>Ea,EM:()=>Mc,Gx:()=>ut,HT:()=>e,JF:()=>Ya,JJ:()=>ii,K0:()=>g,Mn:()=>Nt,Mx:()=>Ar,NF:()=>Cl,Nd:()=>jt,O5:()=>go,Ov:()=>js,PC:()=>pl,RF:()=>es,S$:()=>re,Tn:()=>Pe,Ts:()=>te,UT:()=>Yt,V_:()=>w,Ye:()=>fe,Zx:()=>Oi,b0:()=>ae,bD:()=>sl,ez:()=>hl,gd:()=>hs,i8:()=>$o,iq:()=>sa,lw:()=>S,mk:()=>cr,mr:()=>se,n9:()=>ma,ol:()=>Qt,p6:()=>Gi,q:()=>f,rS:()=>Ns,sg:()=>$n,tP:()=>Co,uU:()=>kr,w_:()=>p,x:()=>He,zE:()=>Ra});var r=i(89724);let a=null;function f(){return a}function e(rt){a||(a=rt)}class p{}const g=new r.OlP("DocumentToken");let S=(()=>{class rt{historyGo(pt){throw new Error("Not implemented")}}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275prov=r.Yz7({token:rt,factory:function(){return function M(){return(0,r.LFG)(x)}()},providedIn:"platform"}),rt})();const w=new r.OlP("Location Initialized");let x=(()=>{class rt extends S{constructor(pt){super(),this._doc=pt,this._init()}_init(){this.location=window.location,this._history=window.history}getBaseHrefFromDOM(){return f().getBaseHref(this._doc)}onPopState(pt){const Kt=f().getGlobalEventTarget(this._doc,"window");return Kt.addEventListener("popstate",pt,!1),()=>Kt.removeEventListener("popstate",pt)}onHashChange(pt){const Kt=f().getGlobalEventTarget(this._doc,"window");return Kt.addEventListener("hashchange",pt,!1),()=>Kt.removeEventListener("hashchange",pt)}get href(){return this.location.href}get protocol(){return this.location.protocol}get hostname(){return this.location.hostname}get port(){return this.location.port}get pathname(){return this.location.pathname}get search(){return this.location.search}get hash(){return this.location.hash}set pathname(pt){this.location.pathname=pt}pushState(pt,Kt,Kn){B()?this._history.pushState(pt,Kt,Kn):this.location.hash=Kn}replaceState(pt,Kt,Kn){B()?this._history.replaceState(pt,Kt,Kn):this.location.hash=Kn}forward(){this._history.forward()}back(){this._history.back()}historyGo(pt=0){this._history.go(pt)}getState(){return this._history.state}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.LFG(g))},rt.\u0275prov=r.Yz7({token:rt,factory:function(){return function W(){return new x((0,r.LFG)(g))}()},providedIn:"platform"}),rt})();function B(){return!!window.history.pushState}function j(rt,qt){if(0==rt.length)return qt;if(0==qt.length)return rt;let pt=0;return rt.endsWith("/")&&pt++,qt.startsWith("/")&&pt++,2==pt?rt+qt.substring(1):1==pt?rt+qt:rt+"/"+qt}function q(rt){const qt=rt.match(/#|\?|$/),pt=qt&&qt.index||rt.length;return rt.slice(0,pt-("/"===rt[pt-1]?1:0))+rt.slice(pt)}function ue(rt){return rt&&"?"!==rt[0]?"?"+rt:rt}let re=(()=>{class rt{historyGo(pt){throw new Error("Not implemented")}}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275prov=r.Yz7({token:rt,factory:function(){return function H(rt){const qt=(0,r.LFG)(g).location;return new ae((0,r.LFG)(S),qt&&qt.origin||"")}()},providedIn:"root"}),rt})();const se=new r.OlP("appBaseHref");let ae=(()=>{class rt extends re{constructor(pt,Kt){if(super(),this._platformLocation=pt,this._removeListenerFns=[],null==Kt&&(Kt=this._platformLocation.getBaseHrefFromDOM()),null==Kt)throw new Error("No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.");this._baseHref=Kt}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(pt){this._removeListenerFns.push(this._platformLocation.onPopState(pt),this._platformLocation.onHashChange(pt))}getBaseHref(){return this._baseHref}prepareExternalUrl(pt){return j(this._baseHref,pt)}path(pt=!1){const Kt=this._platformLocation.pathname+ue(this._platformLocation.search),Kn=this._platformLocation.hash;return Kn&&pt?`${Kt}${Kn}`:Kt}pushState(pt,Kt,Kn,oi){const wi=this.prepareExternalUrl(Kn+ue(oi));this._platformLocation.pushState(pt,Kt,wi)}replaceState(pt,Kt,Kn,oi){const wi=this.prepareExternalUrl(Kn+ue(oi));this._platformLocation.replaceState(pt,Kt,wi)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}historyGo(pt=0){var Kt,Kn;null===(Kn=(Kt=this._platformLocation).historyGo)||void 0===Kn||Kn.call(Kt,pt)}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.LFG(S),r.LFG(se,8))},rt.\u0275prov=r.Yz7({token:rt,factory:rt.\u0275fac}),rt})(),ie=(()=>{class rt extends re{constructor(pt,Kt){super(),this._platformLocation=pt,this._baseHref="",this._removeListenerFns=[],null!=Kt&&(this._baseHref=Kt)}ngOnDestroy(){for(;this._removeListenerFns.length;)this._removeListenerFns.pop()()}onPopState(pt){this._removeListenerFns.push(this._platformLocation.onPopState(pt),this._platformLocation.onHashChange(pt))}getBaseHref(){return this._baseHref}path(pt=!1){let Kt=this._platformLocation.hash;return null==Kt&&(Kt="#"),Kt.length>0?Kt.substring(1):Kt}prepareExternalUrl(pt){const Kt=j(this._baseHref,pt);return Kt.length>0?"#"+Kt:Kt}pushState(pt,Kt,Kn,oi){let wi=this.prepareExternalUrl(Kn+ue(oi));0==wi.length&&(wi=this._platformLocation.pathname),this._platformLocation.pushState(pt,Kt,wi)}replaceState(pt,Kt,Kn,oi){let wi=this.prepareExternalUrl(Kn+ue(oi));0==wi.length&&(wi=this._platformLocation.pathname),this._platformLocation.replaceState(pt,Kt,wi)}forward(){this._platformLocation.forward()}back(){this._platformLocation.back()}historyGo(pt=0){var Kt,Kn;null===(Kn=(Kt=this._platformLocation).historyGo)||void 0===Kn||Kn.call(Kt,pt)}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.LFG(S),r.LFG(se,8))},rt.\u0275prov=r.Yz7({token:rt,factory:rt.\u0275fac}),rt})(),fe=(()=>{class rt{constructor(pt,Kt){this._subject=new r.vpe,this._urlChangeListeners=[],this._platformStrategy=pt;const Kn=this._platformStrategy.getBaseHref();this._platformLocation=Kt,this._baseHref=q(ce(Kn)),this._platformStrategy.onPopState(oi=>{this._subject.emit({url:this.path(!0),pop:!0,state:oi.state,type:oi.type})})}path(pt=!1){return this.normalize(this._platformStrategy.path(pt))}getState(){return this._platformLocation.getState()}isCurrentPathEqualTo(pt,Kt=""){return this.path()==this.normalize(pt+ue(Kt))}normalize(pt){return rt.stripTrailingSlash(function Ce(rt,qt){return rt&&qt.startsWith(rt)?qt.substring(rt.length):qt}(this._baseHref,ce(pt)))}prepareExternalUrl(pt){return pt&&"/"!==pt[0]&&(pt="/"+pt),this._platformStrategy.prepareExternalUrl(pt)}go(pt,Kt="",Kn=null){this._platformStrategy.pushState(Kn,"",pt,Kt),this._notifyUrlChangeListeners(this.prepareExternalUrl(pt+ue(Kt)),Kn)}replaceState(pt,Kt="",Kn=null){this._platformStrategy.replaceState(Kn,"",pt,Kt),this._notifyUrlChangeListeners(this.prepareExternalUrl(pt+ue(Kt)),Kn)}forward(){this._platformStrategy.forward()}back(){this._platformStrategy.back()}historyGo(pt=0){var Kt,Kn;null===(Kn=(Kt=this._platformStrategy).historyGo)||void 0===Kn||Kn.call(Kt,pt)}onUrlChange(pt){this._urlChangeListeners.push(pt),this._urlChangeSubscription||(this._urlChangeSubscription=this.subscribe(Kt=>{this._notifyUrlChangeListeners(Kt.url,Kt.state)}))}_notifyUrlChangeListeners(pt="",Kt){this._urlChangeListeners.forEach(Kn=>Kn(pt,Kt))}subscribe(pt,Kt,Kn){return this._subject.subscribe({next:pt,error:Kt,complete:Kn})}}return rt.normalizeQueryParams=ue,rt.joinWithSlash=j,rt.stripTrailingSlash=q,rt.\u0275fac=function(pt){return new(pt||rt)(r.LFG(re),r.LFG(S))},rt.\u0275prov=r.Yz7({token:rt,factory:function(){return function he(){return new fe((0,r.LFG)(re),(0,r.LFG)(S))}()},providedIn:"root"}),rt})();function ce(rt){return rt.replace(/\/index.html$/,"")}var Ve=(()=>((Ve=Ve||{})[Ve.Decimal=0]="Decimal",Ve[Ve.Percent=1]="Percent",Ve[Ve.Currency=2]="Currency",Ve[Ve.Scientific=3]="Scientific",Ve))(),Xe=(()=>((Xe=Xe||{})[Xe.Zero=0]="Zero",Xe[Xe.One=1]="One",Xe[Xe.Two=2]="Two",Xe[Xe.Few=3]="Few",Xe[Xe.Many=4]="Many",Xe[Xe.Other=5]="Other",Xe))(),He=(()=>((He=He||{})[He.Format=0]="Format",He[He.Standalone=1]="Standalone",He))(),Pe=(()=>((Pe=Pe||{})[Pe.Narrow=0]="Narrow",Pe[Pe.Abbreviated=1]="Abbreviated",Pe[Pe.Wide=2]="Wide",Pe[Pe.Short=3]="Short",Pe))(),Ge=(()=>((Ge=Ge||{})[Ge.Short=0]="Short",Ge[Ge.Medium=1]="Medium",Ge[Ge.Long=2]="Long",Ge[Ge.Full=3]="Full",Ge))(),Oe=(()=>((Oe=Oe||{})[Oe.Decimal=0]="Decimal",Oe[Oe.Group=1]="Group",Oe[Oe.List=2]="List",Oe[Oe.PercentSign=3]="PercentSign",Oe[Oe.PlusSign=4]="PlusSign",Oe[Oe.MinusSign=5]="MinusSign",Oe[Oe.Exponential=6]="Exponential",Oe[Oe.SuperscriptingExponent=7]="SuperscriptingExponent",Oe[Oe.PerMille=8]="PerMille",Oe[Oe.Infinity=9]="Infinity",Oe[Oe.NaN=10]="NaN",Oe[Oe.TimeSeparator=11]="TimeSeparator",Oe[Oe.CurrencyDecimal=12]="CurrencyDecimal",Oe[Oe.CurrencyGroup=13]="CurrencyGroup",Oe))();function Qt(rt,qt,pt){const Kt=(0,r.cg1)(rt),oi=bi([Kt[r.wAp.DayPeriodsFormat],Kt[r.wAp.DayPeriodsStandalone]],qt);return bi(oi,pt)}function Nt(rt,qt,pt){const Kt=(0,r.cg1)(rt),oi=bi([Kt[r.wAp.DaysFormat],Kt[r.wAp.DaysStandalone]],qt);return bi(oi,pt)}function Yt(rt,qt,pt){const Kt=(0,r.cg1)(rt),oi=bi([Kt[r.wAp.MonthsFormat],Kt[r.wAp.MonthsStandalone]],qt);return bi(oi,pt)}function xt(rt,qt){return bi((0,r.cg1)(rt)[r.wAp.DateFormat],qt)}function Ct(rt,qt){return bi((0,r.cg1)(rt)[r.wAp.TimeFormat],qt)}function Gt(rt,qt){return bi((0,r.cg1)(rt)[r.wAp.DateTimeFormat],qt)}function Fn(rt,qt){const pt=(0,r.cg1)(rt),Kt=pt[r.wAp.NumberSymbols][qt];if(void 0===Kt){if(qt===Oe.CurrencyDecimal)return pt[r.wAp.NumberSymbols][Oe.Decimal];if(qt===Oe.CurrencyGroup)return pt[r.wAp.NumberSymbols][Oe.Group]}return Kt}function pr(rt,qt){return(0,r.cg1)(rt)[r.wAp.NumberFormats][qt]}const Ur=r.kL8;function Hn(rt){if(!rt[r.wAp.ExtraData])throw new Error(`Missing extra locale data for the locale "${rt[r.wAp.LocaleId]}". Use "registerLocaleData" to load new data. See the "I18n guide" on angular.io to know more.`)}function bi(rt,qt){for(let pt=qt;pt>-1;pt--)if(void 0!==rt[pt])return rt[pt];throw new Error("Locale data API: locale data undefined")}function fi(rt){const[qt,pt]=rt.split(":");return{hours:+qt,minutes:+pt}}const an=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/,vn={},Zn=/((?:[^BEGHLMOSWYZabcdhmswyz']+)|(?:'(?:[^']|'')*')|(?:G{1,5}|y{1,4}|Y{1,4}|M{1,5}|L{1,5}|w{1,2}|W{1}|d{1,2}|E{1,6}|c{1,6}|a{1,5}|b{1,5}|B{1,5}|h{1,2}|H{1,2}|m{1,2}|s{1,2}|S{1,3}|z{1,4}|Z{1,5}|O{1,4}))([\s\S]*)/;var Xn=(()=>((Xn=Xn||{})[Xn.Short=0]="Short",Xn[Xn.ShortGMT=1]="ShortGMT",Xn[Xn.Long=2]="Long",Xn[Xn.Extended=3]="Extended",Xn))(),zn=(()=>((zn=zn||{})[zn.FullYear=0]="FullYear",zn[zn.Month=1]="Month",zn[zn.Date=2]="Date",zn[zn.Hours=3]="Hours",zn[zn.Minutes=4]="Minutes",zn[zn.Seconds=5]="Seconds",zn[zn.FractionalSeconds=6]="FractionalSeconds",zn[zn.Day=7]="Day",zn))(),ri=(()=>((ri=ri||{})[ri.DayPeriods=0]="DayPeriods",ri[ri.Days=1]="Days",ri[ri.Months=2]="Months",ri[ri.Eras=3]="Eras",ri))();function Gi(rt,qt,pt,Kt){let Kn=function yt(rt){if(yn(rt))return rt;if("number"==typeof rt&&!isNaN(rt))return new Date(rt);if("string"==typeof rt){if(rt=rt.trim(),/^(\d{4}(-\d{1,2}(-\d{1,2})?)?)$/.test(rt)){const[Kn,oi=1,wi=1]=rt.split("-").map(as=>+as);return ui(Kn,oi-1,wi)}const pt=parseFloat(rt);if(!isNaN(rt-pt))return new Date(pt);let Kt;if(Kt=rt.match(an))return function Vt(rt){const qt=new Date(0);let pt=0,Kt=0;const Kn=rt[8]?qt.setUTCFullYear:qt.setFullYear,oi=rt[8]?qt.setUTCHours:qt.setHours;rt[9]&&(pt=Number(rt[9]+rt[10]),Kt=Number(rt[9]+rt[11])),Kn.call(qt,Number(rt[1]),Number(rt[2])-1,Number(rt[3]));const wi=Number(rt[4]||0)-pt,as=Number(rt[5]||0)-Kt,Gs=Number(rt[6]||0),Os=Math.floor(1e3*parseFloat("0."+(rt[7]||0)));return oi.call(qt,wi,as,Gs,Os),qt}(Kt)}const qt=new Date(rt);if(!yn(qt))throw new Error(`Unable to convert "${rt}" into a date`);return qt}(rt);qt=vr(pt,qt)||qt;let as,wi=[];for(;qt;){if(as=Zn.exec(qt),!as){wi.push(qt);break}{wi=wi.concat(as.slice(1));const ws=wi.pop();if(!ws)break;qt=ws}}let Gs=Kn.getTimezoneOffset();Kt&&(Gs=Et(Kt,Gs),Kn=function _t(rt,qt,pt){const Kt=pt?-1:1,Kn=rt.getTimezoneOffset();return function $t(rt,qt){return(rt=new Date(rt.getTime())).setMinutes(rt.getMinutes()+qt),rt}(rt,Kt*(Et(qt,Kn)-Kn))}(Kn,Kt,!0));let Os="";return wi.forEach(ws=>{const Fo=function Dn(rt){if(Ut[rt])return Ut[rt];let qt;switch(rt){case"G":case"GG":case"GGG":qt=Le(ri.Eras,Pe.Abbreviated);break;case"GGGG":qt=Le(ri.Eras,Pe.Wide);break;case"GGGGG":qt=Le(ri.Eras,Pe.Narrow);break;case"y":qt=Wn(zn.FullYear,1,0,!1,!0);break;case"yy":qt=Wn(zn.FullYear,2,0,!0,!0);break;case"yyy":qt=Wn(zn.FullYear,3,0,!1,!0);break;case"yyyy":qt=Wn(zn.FullYear,4,0,!1,!0);break;case"Y":qt=ti(1);break;case"YY":qt=ti(2,!0);break;case"YYY":qt=ti(3);break;case"YYYY":qt=ti(4);break;case"M":case"L":qt=Wn(zn.Month,1,1);break;case"MM":case"LL":qt=Wn(zn.Month,2,1);break;case"MMM":qt=Le(ri.Months,Pe.Abbreviated);break;case"MMMM":qt=Le(ri.Months,Pe.Wide);break;case"MMMMM":qt=Le(ri.Months,Pe.Narrow);break;case"LLL":qt=Le(ri.Months,Pe.Abbreviated,He.Standalone);break;case"LLLL":qt=Le(ri.Months,Pe.Wide,He.Standalone);break;case"LLLLL":qt=Le(ri.Months,Pe.Narrow,He.Standalone);break;case"w":qt=Lr(1);break;case"ww":qt=Lr(2);break;case"W":qt=Lr(1,!0);break;case"d":qt=Wn(zn.Date,1);break;case"dd":qt=Wn(zn.Date,2);break;case"c":case"cc":qt=Wn(zn.Day,1);break;case"ccc":qt=Le(ri.Days,Pe.Abbreviated,He.Standalone);break;case"cccc":qt=Le(ri.Days,Pe.Wide,He.Standalone);break;case"ccccc":qt=Le(ri.Days,Pe.Narrow,He.Standalone);break;case"cccccc":qt=Le(ri.Days,Pe.Short,He.Standalone);break;case"E":case"EE":case"EEE":qt=Le(ri.Days,Pe.Abbreviated);break;case"EEEE":qt=Le(ri.Days,Pe.Wide);break;case"EEEEE":qt=Le(ri.Days,Pe.Narrow);break;case"EEEEEE":qt=Le(ri.Days,Pe.Short);break;case"a":case"aa":case"aaa":qt=Le(ri.DayPeriods,Pe.Abbreviated);break;case"aaaa":qt=Le(ri.DayPeriods,Pe.Wide);break;case"aaaaa":qt=Le(ri.DayPeriods,Pe.Narrow);break;case"b":case"bb":case"bbb":qt=Le(ri.DayPeriods,Pe.Abbreviated,He.Standalone,!0);break;case"bbbb":qt=Le(ri.DayPeriods,Pe.Wide,He.Standalone,!0);break;case"bbbbb":qt=Le(ri.DayPeriods,Pe.Narrow,He.Standalone,!0);break;case"B":case"BB":case"BBB":qt=Le(ri.DayPeriods,Pe.Abbreviated,He.Format,!0);break;case"BBBB":qt=Le(ri.DayPeriods,Pe.Wide,He.Format,!0);break;case"BBBBB":qt=Le(ri.DayPeriods,Pe.Narrow,He.Format,!0);break;case"h":qt=Wn(zn.Hours,1,-12);break;case"hh":qt=Wn(zn.Hours,2,-12);break;case"H":qt=Wn(zn.Hours,1);break;case"HH":qt=Wn(zn.Hours,2);break;case"m":qt=Wn(zn.Minutes,1);break;case"mm":qt=Wn(zn.Minutes,2);break;case"s":qt=Wn(zn.Seconds,1);break;case"ss":qt=Wn(zn.Seconds,2);break;case"S":qt=Wn(zn.FractionalSeconds,1);break;case"SS":qt=Wn(zn.FractionalSeconds,2);break;case"SSS":qt=Wn(zn.FractionalSeconds,3);break;case"Z":case"ZZ":case"ZZZ":qt=Se(Xn.Short);break;case"ZZZZZ":qt=Se(Xn.Extended);break;case"O":case"OO":case"OOO":case"z":case"zz":case"zzz":qt=Se(Xn.ShortGMT);break;case"OOOO":case"ZZZZ":case"zzzz":qt=Se(Xn.Long);break;default:return null}return Ut[rt]=qt,qt}(ws);Os+=Fo?Fo(Kn,pt,Gs):"''"===ws?"'":ws.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),Os}function ui(rt,qt,pt){const Kt=new Date(0);return Kt.setFullYear(rt,qt,pt),Kt.setHours(0,0,0),Kt}function vr(rt,qt){const pt=function We(rt){return(0,r.cg1)(rt)[r.wAp.LocaleId]}(rt);if(vn[pt]=vn[pt]||{},vn[pt][qt])return vn[pt][qt];let Kt="";switch(qt){case"shortDate":Kt=xt(rt,Ge.Short);break;case"mediumDate":Kt=xt(rt,Ge.Medium);break;case"longDate":Kt=xt(rt,Ge.Long);break;case"fullDate":Kt=xt(rt,Ge.Full);break;case"shortTime":Kt=Ct(rt,Ge.Short);break;case"mediumTime":Kt=Ct(rt,Ge.Medium);break;case"longTime":Kt=Ct(rt,Ge.Long);break;case"fullTime":Kt=Ct(rt,Ge.Full);break;case"short":const Kn=vr(rt,"shortTime"),oi=vr(rt,"shortDate");Kt=Ji(Gt(rt,Ge.Short),[Kn,oi]);break;case"medium":const wi=vr(rt,"mediumTime"),as=vr(rt,"mediumDate");Kt=Ji(Gt(rt,Ge.Medium),[wi,as]);break;case"long":const Gs=vr(rt,"longTime"),Os=vr(rt,"longDate");Kt=Ji(Gt(rt,Ge.Long),[Gs,Os]);break;case"full":const ws=vr(rt,"fullTime"),Fo=vr(rt,"fullDate");Kt=Ji(Gt(rt,Ge.Full),[ws,Fo])}return Kt&&(vn[pt][qt]=Kt),Kt}function Ji(rt,qt){return qt&&(rt=rt.replace(/\{([^}]+)}/g,function(pt,Kt){return null!=qt&&Kt in qt?qt[Kt]:pt})),rt}function mn(rt,qt,pt="-",Kt,Kn){let oi="";(rt<0||Kn&&rt<=0)&&(Kn?rt=1-rt:(rt=-rt,oi=pt));let wi=String(rt);for(;wi.length<qt;)wi="0"+wi;return Kt&&(wi=wi.substr(wi.length-qt)),oi+wi}function Wn(rt,qt,pt=0,Kt=!1,Kn=!1){return function(oi,wi){let as=function et(rt,qt){switch(rt){case zn.FullYear:return qt.getFullYear();case zn.Month:return qt.getMonth();case zn.Date:return qt.getDate();case zn.Hours:return qt.getHours();case zn.Minutes:return qt.getMinutes();case zn.Seconds:return qt.getSeconds();case zn.FractionalSeconds:return qt.getMilliseconds();case zn.Day:return qt.getDay();default:throw new Error(`Unknown DateType value "${rt}".`)}}(rt,oi);if((pt>0||as>-pt)&&(as+=pt),rt===zn.Hours)0===as&&-12===pt&&(as=12);else if(rt===zn.FractionalSeconds)return function Rn(rt,qt){return mn(rt,3).substr(0,qt)}(as,qt);const Gs=Fn(wi,Oe.MinusSign);return mn(as,qt,Gs,Kt,Kn)}}function Le(rt,qt,pt=He.Format,Kt=!1){return function(Kn,oi){return function Re(rt,qt,pt,Kt,Kn,oi){switch(pt){case ri.Months:return Yt(qt,Kn,Kt)[rt.getMonth()];case ri.Days:return Nt(qt,Kn,Kt)[rt.getDay()];case ri.DayPeriods:const wi=rt.getHours(),as=rt.getMinutes();if(oi){const Os=function er(rt){const qt=(0,r.cg1)(rt);return Hn(qt),(qt[r.wAp.ExtraData][2]||[]).map(Kt=>"string"==typeof Kt?fi(Kt):[fi(Kt[0]),fi(Kt[1])])}(qt),ws=function _r(rt,qt,pt){const Kt=(0,r.cg1)(rt);Hn(Kt);const oi=bi([Kt[r.wAp.ExtraData][0],Kt[r.wAp.ExtraData][1]],qt)||[];return bi(oi,pt)||[]}(qt,Kn,Kt),Fo=Os.findIndex(Ka=>{if(Array.isArray(Ka)){const[al,Bs]=Ka,mt=wi>=al.hours&&as>=al.minutes,ot=wi<Bs.hours||wi===Bs.hours&&as<Bs.minutes;if(al.hours<Bs.hours){if(mt&&ot)return!0}else if(mt||ot)return!0}else if(Ka.hours===wi&&Ka.minutes===as)return!0;return!1});if(-1!==Fo)return ws[Fo]}return Qt(qt,Kn,Kt)[wi<12?0:1];case ri.Eras:return function dn(rt,qt){return bi((0,r.cg1)(rt)[r.wAp.Eras],qt)}(qt,Kt)[rt.getFullYear()<=0?0:1];default:throw new Error(`unexpected translation type ${pt}`)}}(Kn,oi,rt,qt,pt,Kt)}}function Se(rt){return function(qt,pt,Kt){const Kn=-1*Kt,oi=Fn(pt,Oe.MinusSign),wi=Kn>0?Math.floor(Kn/60):Math.ceil(Kn/60);switch(rt){case Xn.Short:return(Kn>=0?"+":"")+mn(wi,2,oi)+mn(Math.abs(Kn%60),2,oi);case Xn.ShortGMT:return"GMT"+(Kn>=0?"+":"")+mn(wi,1,oi);case Xn.Long:return"GMT"+(Kn>=0?"+":"")+mn(wi,2,oi)+":"+mn(Math.abs(Kn%60),2,oi);case Xn.Extended:return 0===Kt?"Z":(Kn>=0?"+":"")+mn(wi,2,oi)+":"+mn(Math.abs(Kn%60),2,oi);default:throw new Error(`Unknown zone width "${rt}"`)}}}function Fe(rt){return ui(rt.getFullYear(),rt.getMonth(),rt.getDate()+(4-rt.getDay()))}function Lr(rt,qt=!1){return function(pt,Kt){let Kn;if(qt){const oi=new Date(pt.getFullYear(),pt.getMonth(),1).getDay()-1,wi=pt.getDate();Kn=1+Math.floor((wi+oi)/7)}else{const oi=Fe(pt),wi=function nn(rt){const qt=ui(rt,0,1).getDay();return ui(rt,0,1+(qt<=4?4:11)-qt)}(oi.getFullYear()),as=oi.getTime()-wi.getTime();Kn=1+Math.round(as/6048e5)}return mn(Kn,rt,Fn(Kt,Oe.MinusSign))}}function ti(rt,qt=!1){return function(pt,Kt){return mn(Fe(pt).getFullYear(),rt,Fn(Kt,Oe.MinusSign),qt)}}const Ut={};function Et(rt,qt){rt=rt.replace(/:/g,"");const pt=Date.parse("Jan 01, 1970 00:00:00 "+rt)/6e4;return isNaN(pt)?qt:pt}function yn(rt){return rt instanceof Date&&!isNaN(rt.valueOf())}const Cr=/^(\d+)?\.((\d+)(-(\d+))?)?$/;function ir(rt,qt,pt,Kt,Kn,oi,wi=!1){let as="",Gs=!1;if(isFinite(rt)){let Os=function $i(rt){let Kt,Kn,oi,wi,as,qt=Math.abs(rt)+"",pt=0;for((Kn=qt.indexOf("."))>-1&&(qt=qt.replace(".","")),(oi=qt.search(/e/i))>0?(Kn<0&&(Kn=oi),Kn+=+qt.slice(oi+1),qt=qt.substring(0,oi)):Kn<0&&(Kn=qt.length),oi=0;"0"===qt.charAt(oi);oi++);if(oi===(as=qt.length))Kt=[0],Kn=1;else{for(as--;"0"===qt.charAt(as);)as--;for(Kn-=oi,Kt=[],wi=0;oi<=as;oi++,wi++)Kt[wi]=Number(qt.charAt(oi))}return Kn>22&&(Kt=Kt.splice(0,21),pt=Kn-1,Kn=1),{digits:Kt,exponent:pt,integerLen:Kn}}(rt);wi&&(Os=function ao(rt){if(0===rt.digits[0])return rt;const qt=rt.digits.length-rt.integerLen;return rt.exponent?rt.exponent+=2:(0===qt?rt.digits.push(0,0):1===qt&&rt.digits.push(0),rt.integerLen+=2),rt}(Os));let ws=qt.minInt,Fo=qt.minFrac,Ka=qt.maxFrac;if(oi){const Xt=oi.match(Cr);if(null===Xt)throw new Error(`${oi} is not a valid digit info`);const Si=Xt[1],Jo=Xt[3],ja=Xt[5];null!=Si&&(ws=mo(Si)),null!=Jo&&(Fo=mo(Jo)),null!=ja?Ka=mo(ja):null!=Jo&&Fo>Ka&&(Ka=Fo)}!function Eo(rt,qt,pt){if(qt>pt)throw new Error(`The minimum number of digits after fraction (${qt}) is higher than the maximum (${pt}).`);let Kt=rt.digits,Kn=Kt.length-rt.integerLen;const oi=Math.min(Math.max(qt,Kn),pt);let wi=oi+rt.integerLen,as=Kt[wi];if(wi>0){Kt.splice(Math.max(rt.integerLen,wi));for(let Fo=wi;Fo<Kt.length;Fo++)Kt[Fo]=0}else{Kn=Math.max(0,Kn),rt.integerLen=1,Kt.length=Math.max(1,wi=oi+1),Kt[0]=0;for(let Fo=1;Fo<wi;Fo++)Kt[Fo]=0}if(as>=5)if(wi-1<0){for(let Fo=0;Fo>wi;Fo--)Kt.unshift(0),rt.integerLen++;Kt.unshift(1),rt.integerLen++}else Kt[wi-1]++;for(;Kn<Math.max(0,oi);Kn++)Kt.push(0);let Gs=0!==oi;const Os=qt+rt.integerLen,ws=Kt.reduceRight(function(Fo,Ka,al,Bs){return Bs[al]=(Ka+=Fo)<10?Ka:Ka-10,Gs&&(0===Bs[al]&&al>=Os?Bs.pop():Gs=!1),Ka>=10?1:0},0);ws&&(Kt.unshift(ws),rt.integerLen++)}(Os,Fo,Ka);let al=Os.digits,Bs=Os.integerLen;const mt=Os.exponent;let ot=[];for(Gs=al.every(Xt=>!Xt);Bs<ws;Bs++)al.unshift(0);for(;Bs<0;Bs++)al.unshift(0);Bs>0?ot=al.splice(Bs,al.length):(ot=al,al=[0]);const je=[];for(al.length>=qt.lgSize&&je.unshift(al.splice(-qt.lgSize,al.length).join(""));al.length>qt.gSize;)je.unshift(al.splice(-qt.gSize,al.length).join(""));al.length&&je.unshift(al.join("")),as=je.join(Fn(pt,Kt)),ot.length&&(as+=Fn(pt,Kn)+ot.join("")),mt&&(as+=Fn(pt,Oe.Exponential)+"+"+mt)}else as=Fn(pt,Oe.Infinity);return as=rt<0&&!Gs?qt.negPre+as+qt.negSuf:qt.posPre+as+qt.posSuf,as}function jr(rt,qt="-"){const pt={minInt:1,minFrac:0,maxFrac:0,posPre:"",posSuf:"",negPre:"",negSuf:"",gSize:0,lgSize:0},Kt=rt.split(";"),Kn=Kt[0],oi=Kt[1],wi=-1!==Kn.indexOf(".")?Kn.split("."):[Kn.substring(0,Kn.lastIndexOf("0")+1),Kn.substring(Kn.lastIndexOf("0")+1)],as=wi[0],Gs=wi[1]||"";pt.posPre=as.substr(0,as.indexOf("#"));for(let ws=0;ws<Gs.length;ws++){const Fo=Gs.charAt(ws);"0"===Fo?pt.minFrac=pt.maxFrac=ws+1:"#"===Fo?pt.maxFrac=ws+1:pt.posSuf+=Fo}const Os=as.split(",");if(pt.gSize=Os[1]?Os[1].length:0,pt.lgSize=Os[2]||Os[1]?(Os[2]||Os[1]).length:0,oi){const ws=Kn.length-pt.posPre.length-pt.posSuf.length,Fo=oi.indexOf("#");pt.negPre=oi.substr(0,Fo).replace(/'/g,""),pt.negSuf=oi.substr(Fo+ws).replace(/'/g,"")}else pt.negPre=qt+pt.posPre,pt.negSuf=pt.posSuf;return pt}function mo(rt){const qt=parseInt(rt);if(isNaN(qt))throw new Error("Invalid integer literal when parsing "+rt);return qt}let Go=(()=>{class rt{}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275prov=r.Yz7({token:rt,factory:function(pt){let Kt=null;return pt?Kt=new pt:(Kn=r.LFG(r.soG),Kt=new or(Kn)),Kt;var Kn},providedIn:"root"}),rt})();function ua(rt,qt,pt,Kt){let Kn=`=${rt}`;if(qt.indexOf(Kn)>-1||(Kn=pt.getPluralCategory(rt,Kt),qt.indexOf(Kn)>-1))return Kn;if(qt.indexOf("other")>-1)return"other";throw new Error(`No plural message found for value "${rt}"`)}let or=(()=>{class rt extends Go{constructor(pt){super(),this.locale=pt}getPluralCategory(pt,Kt){switch(Ur(Kt||this.locale)(pt)){case Xe.Zero:return"zero";case Xe.One:return"one";case Xe.Two:return"two";case Xe.Few:return"few";case Xe.Many:return"many";default:return"other"}}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.LFG(r.soG))},rt.\u0275prov=r.Yz7({token:rt,factory:rt.\u0275fac}),rt})();function Ar(rt,qt){qt=encodeURIComponent(qt);for(const pt of rt.split(";")){const Kt=pt.indexOf("="),[Kn,oi]=-1==Kt?[pt,""]:[pt.slice(0,Kt),pt.slice(Kt+1)];if(Kn.trim()===qt)return decodeURIComponent(oi)}return null}let cr=(()=>{class rt{constructor(pt,Kt,Kn,oi){this._iterableDiffers=pt,this._keyValueDiffers=Kt,this._ngEl=Kn,this._renderer=oi,this._iterableDiffer=null,this._keyValueDiffer=null,this._initialClasses=[],this._rawClass=null}set klass(pt){this._removeClasses(this._initialClasses),this._initialClasses="string"==typeof pt?pt.split(/\s+/):[],this._applyClasses(this._initialClasses),this._applyClasses(this._rawClass)}set ngClass(pt){this._removeClasses(this._rawClass),this._applyClasses(this._initialClasses),this._iterableDiffer=null,this._keyValueDiffer=null,this._rawClass="string"==typeof pt?pt.split(/\s+/):pt,this._rawClass&&((0,r.sIi)(this._rawClass)?this._iterableDiffer=this._iterableDiffers.find(this._rawClass).create():this._keyValueDiffer=this._keyValueDiffers.find(this._rawClass).create())}ngDoCheck(){if(this._iterableDiffer){const pt=this._iterableDiffer.diff(this._rawClass);pt&&this._applyIterableChanges(pt)}else if(this._keyValueDiffer){const pt=this._keyValueDiffer.diff(this._rawClass);pt&&this._applyKeyValueChanges(pt)}}_applyKeyValueChanges(pt){pt.forEachAddedItem(Kt=>this._toggleClass(Kt.key,Kt.currentValue)),pt.forEachChangedItem(Kt=>this._toggleClass(Kt.key,Kt.currentValue)),pt.forEachRemovedItem(Kt=>{Kt.previousValue&&this._toggleClass(Kt.key,!1)})}_applyIterableChanges(pt){pt.forEachAddedItem(Kt=>{if("string"!=typeof Kt.item)throw new Error(`NgClass can only toggle CSS classes expressed as strings, got ${(0,r.AaK)(Kt.item)}`);this._toggleClass(Kt.item,!0)}),pt.forEachRemovedItem(Kt=>this._toggleClass(Kt.item,!1))}_applyClasses(pt){pt&&(Array.isArray(pt)||pt instanceof Set?pt.forEach(Kt=>this._toggleClass(Kt,!0)):Object.keys(pt).forEach(Kt=>this._toggleClass(Kt,!!pt[Kt])))}_removeClasses(pt){pt&&(Array.isArray(pt)||pt instanceof Set?pt.forEach(Kt=>this._toggleClass(Kt,!1)):Object.keys(pt).forEach(Kt=>this._toggleClass(Kt,!1)))}_toggleClass(pt,Kt){(pt=pt.trim())&&pt.split(/\s+/g).forEach(Kn=>{Kt?this._renderer.addClass(this._ngEl.nativeElement,Kn):this._renderer.removeClass(this._ngEl.nativeElement,Kn)})}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.ZZ4),r.Y36(r.aQg),r.Y36(r.SBq),r.Y36(r.Qsj))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngClass",""]],inputs:{klass:["class","klass"],ngClass:"ngClass"}}),rt})();class Sn{constructor(qt,pt,Kt,Kn){this.$implicit=qt,this.ngForOf=pt,this.index=Kt,this.count=Kn}get first(){return 0===this.index}get last(){return this.index===this.count-1}get even(){return this.index%2==0}get odd(){return!this.even}}let $n=(()=>{class rt{constructor(pt,Kt,Kn){this._viewContainer=pt,this._template=Kt,this._differs=Kn,this._ngForOf=null,this._ngForOfDirty=!0,this._differ=null}set ngForOf(pt){this._ngForOf=pt,this._ngForOfDirty=!0}set ngForTrackBy(pt){this._trackByFn=pt}get ngForTrackBy(){return this._trackByFn}set ngForTemplate(pt){pt&&(this._template=pt)}ngDoCheck(){if(this._ngForOfDirty){this._ngForOfDirty=!1;const pt=this._ngForOf;!this._differ&&pt&&(this._differ=this._differs.find(pt).create(this.ngForTrackBy))}if(this._differ){const pt=this._differ.diff(this._ngForOf);pt&&this._applyChanges(pt)}}_applyChanges(pt){const Kt=this._viewContainer;pt.forEachOperation((Kn,oi,wi)=>{if(null==Kn.previousIndex)Kt.createEmbeddedView(this._template,new Sn(Kn.item,this._ngForOf,-1,-1),null===wi?void 0:wi);else if(null==wi)Kt.remove(null===oi?void 0:oi);else if(null!==oi){const as=Kt.get(oi);Kt.move(as,wi),Jr(as,Kn)}});for(let Kn=0,oi=Kt.length;Kn<oi;Kn++){const as=Kt.get(Kn).context;as.index=Kn,as.count=oi,as.ngForOf=this._ngForOf}pt.forEachIdentityChange(Kn=>{Jr(Kt.get(Kn.currentIndex),Kn)})}static ngTemplateContextGuard(pt,Kt){return!0}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(r.ZZ4))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngFor","","ngForOf",""]],inputs:{ngForOf:"ngForOf",ngForTrackBy:"ngForTrackBy",ngForTemplate:"ngForTemplate"}}),rt})();function Jr(rt,qt){rt.context.$implicit=qt.item}let go=(()=>{class rt{constructor(pt,Kt){this._viewContainer=pt,this._context=new Ro,this._thenTemplateRef=null,this._elseTemplateRef=null,this._thenViewRef=null,this._elseViewRef=null,this._thenTemplateRef=Kt}set ngIf(pt){this._context.$implicit=this._context.ngIf=pt,this._updateView()}set ngIfThen(pt){Ys("ngIfThen",pt),this._thenTemplateRef=pt,this._thenViewRef=null,this._updateView()}set ngIfElse(pt){Ys("ngIfElse",pt),this._elseTemplateRef=pt,this._elseViewRef=null,this._updateView()}_updateView(){this._context.$implicit?this._thenViewRef||(this._viewContainer.clear(),this._elseViewRef=null,this._thenTemplateRef&&(this._thenViewRef=this._viewContainer.createEmbeddedView(this._thenTemplateRef,this._context))):this._elseViewRef||(this._viewContainer.clear(),this._thenViewRef=null,this._elseTemplateRef&&(this._elseViewRef=this._viewContainer.createEmbeddedView(this._elseTemplateRef,this._context)))}static ngTemplateContextGuard(pt,Kt){return!0}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.s_b),r.Y36(r.Rgc))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngIf",""]],inputs:{ngIf:"ngIf",ngIfThen:"ngIfThen",ngIfElse:"ngIfElse"}}),rt})();class Ro{constructor(){this.$implicit=null,this.ngIf=null}}function Ys(rt,qt){if(qt&&!qt.createEmbeddedView)throw new Error(`${rt} must be a TemplateRef, but received '${(0,r.AaK)(qt)}'.`)}class ds{constructor(qt,pt){this._viewContainerRef=qt,this._templateRef=pt,this._created=!1}create(){this._created=!0,this._viewContainerRef.createEmbeddedView(this._templateRef)}destroy(){this._created=!1,this._viewContainerRef.clear()}enforceState(qt){qt&&!this._created?this.create():!qt&&this._created&&this.destroy()}}let es=(()=>{class rt{constructor(){this._defaultUsed=!1,this._caseCount=0,this._lastCaseCheckIndex=0,this._lastCasesMatched=!1}set ngSwitch(pt){this._ngSwitch=pt,0===this._caseCount&&this._updateDefaultCases(!0)}_addCase(){return this._caseCount++}_addDefault(pt){this._defaultViews||(this._defaultViews=[]),this._defaultViews.push(pt)}_matchCase(pt){const Kt=pt==this._ngSwitch;return this._lastCasesMatched=this._lastCasesMatched||Kt,this._lastCaseCheckIndex++,this._lastCaseCheckIndex===this._caseCount&&(this._updateDefaultCases(!this._lastCasesMatched),this._lastCaseCheckIndex=0,this._lastCasesMatched=!1),Kt}_updateDefaultCases(pt){if(this._defaultViews&&pt!==this._defaultUsed){this._defaultUsed=pt;for(let Kt=0;Kt<this._defaultViews.length;Kt++)this._defaultViews[Kt].enforceState(pt)}}}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngSwitch",""]],inputs:{ngSwitch:"ngSwitch"}}),rt})(),ma=(()=>{class rt{constructor(pt,Kt,Kn){this.ngSwitch=Kn,Kn._addCase(),this._view=new ds(pt,Kt)}ngDoCheck(){this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase))}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(es,9))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngSwitchCase",""]],inputs:{ngSwitchCase:"ngSwitchCase"}}),rt})(),Ea=(()=>{class rt{constructor(pt,Kt,Kn){Kn._addDefault(new ds(pt,Kt))}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.s_b),r.Y36(r.Rgc),r.Y36(es,9))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngSwitchDefault",""]]}),rt})(),sa=(()=>{class rt{constructor(pt){this._localization=pt,this._caseViews={}}set ngPlural(pt){this._switchValue=pt,this._updateView()}addCase(pt,Kt){this._caseViews[pt]=Kt}_updateView(){this._clearViews();const pt=Object.keys(this._caseViews),Kt=ua(this._switchValue,pt,this._localization);this._activateView(this._caseViews[Kt])}_clearViews(){this._activeView&&this._activeView.destroy()}_activateView(pt){pt&&(this._activeView=pt,this._activeView.create())}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(Go))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngPlural",""]],inputs:{ngPlural:"ngPlural"}}),rt})(),Ra=(()=>{class rt{constructor(pt,Kt,Kn,oi){this.value=pt;const wi=!isNaN(Number(pt));oi.addCase(wi?`=${pt}`:pt,new ds(Kn,Kt))}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.$8M("ngPluralCase"),r.Y36(r.Rgc),r.Y36(r.s_b),r.Y36(sa,1))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngPluralCase",""]]}),rt})(),pl=(()=>{class rt{constructor(pt,Kt,Kn){this._ngEl=pt,this._differs=Kt,this._renderer=Kn,this._ngStyle=null,this._differ=null}set ngStyle(pt){this._ngStyle=pt,!this._differ&&pt&&(this._differ=this._differs.find(pt).create())}ngDoCheck(){if(this._differ){const pt=this._differ.diff(this._ngStyle);pt&&this._applyChanges(pt)}}_setStyle(pt,Kt){const[Kn,oi]=pt.split(".");null!=(Kt=null!=Kt&&oi?`${Kt}${oi}`:Kt)?this._renderer.setStyle(this._ngEl.nativeElement,Kn,Kt):this._renderer.removeStyle(this._ngEl.nativeElement,Kn)}_applyChanges(pt){pt.forEachRemovedItem(Kt=>this._setStyle(Kt.key,null)),pt.forEachAddedItem(Kt=>this._setStyle(Kt.key,Kt.currentValue)),pt.forEachChangedItem(Kt=>this._setStyle(Kt.key,Kt.currentValue))}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.SBq),r.Y36(r.aQg),r.Y36(r.Qsj))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngStyle",""]],inputs:{ngStyle:"ngStyle"}}),rt})(),Co=(()=>{class rt{constructor(pt){this._viewContainerRef=pt,this._viewRef=null,this.ngTemplateOutletContext=null,this.ngTemplateOutlet=null}ngOnChanges(pt){if(pt.ngTemplateOutlet){const Kt=this._viewContainerRef;this._viewRef&&Kt.remove(Kt.indexOf(this._viewRef)),this._viewRef=this.ngTemplateOutlet?Kt.createEmbeddedView(this.ngTemplateOutlet,this.ngTemplateOutletContext):null}else this._viewRef&&pt.ngTemplateOutletContext&&this.ngTemplateOutletContext&&(this._viewRef.context=this.ngTemplateOutletContext)}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.s_b))},rt.\u0275dir=r.lG2({type:rt,selectors:[["","ngTemplateOutlet",""]],inputs:{ngTemplateOutletContext:"ngTemplateOutletContext",ngTemplateOutlet:"ngTemplateOutlet"},features:[r.TTD]}),rt})();function Wo(rt,qt){return new r.vHH(2100,"")}class ys{createSubscription(qt,pt){return qt.subscribe({next:pt,error:Kt=>{throw Kt}})}dispose(qt){qt.unsubscribe()}onDestroy(qt){qt.unsubscribe()}}class Wa{createSubscription(qt,pt){return qt.then(pt,Kt=>{throw Kt})}dispose(qt){}onDestroy(qt){}}const Is=new Wa,nl=new ys;let js=(()=>{class rt{constructor(pt){this._ref=pt,this._latestValue=null,this._subscription=null,this._obj=null,this._strategy=null}ngOnDestroy(){this._subscription&&this._dispose()}transform(pt){return this._obj?pt!==this._obj?(this._dispose(),this.transform(pt)):this._latestValue:(pt&&this._subscribe(pt),this._latestValue)}_subscribe(pt){this._obj=pt,this._strategy=this._selectStrategy(pt),this._subscription=this._strategy.createSubscription(pt,Kt=>this._updateLatestValue(pt,Kt))}_selectStrategy(pt){if((0,r.QGY)(pt))return Is;if((0,r.F4k)(pt))return nl;throw Wo()}_dispose(){this._strategy.dispose(this._subscription),this._latestValue=null,this._subscription=null,this._obj=null}_updateLatestValue(pt,Kt){pt===this._obj&&(this._latestValue=Kt,this._ref.markForCheck())}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.sBO,16))},rt.\u0275pipe=r.Yjl({name:"async",type:rt,pure:!1}),rt})(),$o=(()=>{class rt{transform(pt){if(null==pt)return null;if("string"!=typeof pt)throw Wo();return pt.toLowerCase()}}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275pipe=r.Yjl({name:"lowercase",type:rt,pure:!0}),rt})();const To=/(?:[0-9A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;let Ns=(()=>{class rt{transform(pt){if(null==pt)return null;if("string"!=typeof pt)throw Wo();return pt.replace(To,Kt=>Kt[0].toUpperCase()+Kt.substr(1).toLowerCase())}}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275pipe=r.Yjl({name:"titlecase",type:rt,pure:!0}),rt})(),hs=(()=>{class rt{transform(pt){if(null==pt)return null;if("string"!=typeof pt)throw Wo();return pt.toUpperCase()}}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275pipe=r.Yjl({name:"uppercase",type:rt,pure:!0}),rt})();const Oo=new r.OlP("DATE_PIPE_DEFAULT_TIMEZONE");let kr=(()=>{class rt{constructor(pt,Kt){this.locale=pt,this.defaultTimezone=Kt}transform(pt,Kt="mediumDate",Kn,oi){var wi;if(null==pt||""===pt||pt!=pt)return null;try{return Gi(pt,Kt,oi||this.locale,null!==(wi=null!=Kn?Kn:this.defaultTimezone)&&void 0!==wi?wi:void 0)}catch(as){throw Wo()}}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.soG,16),r.Y36(Oo,24))},rt.\u0275pipe=r.Yjl({name:"date",type:rt,pure:!0}),rt})();const Ki=/#/g;let ut=(()=>{class rt{constructor(pt){this._localization=pt}transform(pt,Kt,Kn){if(null==pt)return"";if("object"!=typeof Kt||null===Kt)throw Wo();return Kt[ua(pt,Object.keys(Kt),this._localization,Kn)].replace(Ki,pt.toString())}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(Go,16))},rt.\u0275pipe=r.Yjl({name:"i18nPlural",type:rt,pure:!0}),rt})(),te=(()=>{class rt{transform(pt){return JSON.stringify(pt,null,2)}}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275pipe=r.Yjl({name:"json",type:rt,pure:!1}),rt})(),jt=(()=>{class rt{constructor(pt){this.differs=pt,this.keyValues=[],this.compareFn=hn}transform(pt,Kt=hn){if(!pt||!(pt instanceof Map)&&"object"!=typeof pt)return null;this.differ||(this.differ=this.differs.find(pt).create());const Kn=this.differ.diff(pt),oi=Kt!==this.compareFn;return Kn&&(this.keyValues=[],Kn.forEachItem(wi=>{this.keyValues.push(function Ue(rt,qt){return{key:rt,value:qt}}(wi.key,wi.currentValue))})),(Kn||oi)&&(this.keyValues.sort(Kt),this.compareFn=Kt),this.keyValues}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.aQg,16))},rt.\u0275pipe=r.Yjl({name:"keyvalue",type:rt,pure:!1}),rt})();function hn(rt,qt){const pt=rt.key,Kt=qt.key;if(pt===Kt)return 0;if(void 0===pt)return 1;if(void 0===Kt)return-1;if(null===pt)return 1;if(null===Kt)return-1;if("string"==typeof pt&&"string"==typeof Kt)return pt<Kt?-1:1;if("number"==typeof pt&&"number"==typeof Kt)return pt-Kt;if("boolean"==typeof pt&&"boolean"==typeof Kt)return pt<Kt?-1:1;const Kn=String(pt),oi=String(Kt);return Kn==oi?0:Kn<oi?-1:1}let ii=(()=>{class rt{constructor(pt){this._locale=pt}transform(pt,Kt,Kn){if(!_s(pt))return null;Kn=Kn||this._locale;try{return function nr(rt,qt,pt){return ir(rt,jr(pr(qt,Ve.Decimal),Fn(qt,Oe.MinusSign)),qt,Oe.Group,Oe.Decimal,pt)}(Vo(pt),Kn,Kt)}catch(oi){throw Wo()}}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.soG,16))},rt.\u0275pipe=r.Yjl({name:"number",type:rt,pure:!0}),rt})(),Oi=(()=>{class rt{constructor(pt){this._locale=pt}transform(pt,Kt,Kn){if(!_s(pt))return null;Kn=Kn||this._locale;try{return function kn(rt,qt,pt){return ir(rt,jr(pr(qt,Ve.Percent),Fn(qt,Oe.MinusSign)),qt,Oe.Group,Oe.Decimal,pt,!0).replace(new RegExp("%","g"),Fn(qt,Oe.PercentSign))}(Vo(pt),Kn,Kt)}catch(oi){throw Wo()}}}return rt.\u0275fac=function(pt){return new(pt||rt)(r.Y36(r.soG,16))},rt.\u0275pipe=r.Yjl({name:"percent",type:rt,pure:!0}),rt})();function _s(rt){return!(null==rt||""===rt||rt!=rt)}function Vo(rt){if("string"==typeof rt&&!isNaN(Number(rt)-parseFloat(rt)))return Number(rt);if("number"!=typeof rt)throw new Error(`${rt} is not a number`);return rt}let hl=(()=>{class rt{}return rt.\u0275fac=function(pt){return new(pt||rt)},rt.\u0275mod=r.oAB({type:rt}),rt.\u0275inj=r.cJS({}),rt})();const sl="browser";function Cl(rt){return rt===sl}let Mc=(()=>{class rt{}return rt.\u0275prov=(0,r.Yz7)({token:rt,providedIn:"root",factory:()=>new ru((0,r.LFG)(g),window)}),rt})();class ru{constructor(qt,pt){this.document=qt,this.window=pt,this.offset=()=>[0,0]}setOffset(qt){this.offset=Array.isArray(qt)?()=>qt:qt}getScrollPosition(){return this.supportsScrolling()?[this.window.pageXOffset,this.window.pageYOffset]:[0,0]}scrollToPosition(qt){this.supportsScrolling()&&this.window.scrollTo(qt[0],qt[1])}scrollToAnchor(qt){if(!this.supportsScrolling())return;const pt=function Ol(rt,qt){const pt=rt.getElementById(qt)||rt.getElementsByName(qt)[0];if(pt)return pt;if("function"==typeof rt.createTreeWalker&&rt.body&&(rt.body.createShadowRoot||rt.body.attachShadow)){const Kt=rt.createTreeWalker(rt.body,NodeFilter.SHOW_ELEMENT);let Kn=Kt.currentNode;for(;Kn;){const oi=Kn.shadowRoot;if(oi){const wi=oi.getElementById(qt)||oi.querySelector(`[name="${qt}"]`);if(wi)return wi}Kn=Kt.nextNode()}}return null}(this.document,qt);pt&&(this.scrollToElement(pt),pt.focus())}setHistoryScrollRestoration(qt){if(this.supportScrollRestoration()){const pt=this.window.history;pt&&pt.scrollRestoration&&(pt.scrollRestoration=qt)}}scrollToElement(qt){const pt=qt.getBoundingClientRect(),Kt=pt.left+this.window.pageXOffset,Kn=pt.top+this.window.pageYOffset,oi=this.offset();this.window.scrollTo(Kt-oi[0],Kn-oi[1])}supportScrollRestoration(){try{if(!this.supportsScrolling())return!1;const qt=Ja(this.window.history)||Ja(Object.getPrototypeOf(this.window.history));return!(!qt||!qt.writable&&!qt.set)}catch(qt){return!1}}supportsScrolling(){try{return!!this.window&&!!this.window.scrollTo&&"pageXOffset"in this.window}catch(qt){return!1}}}function Ja(rt){return Object.getOwnPropertyDescriptor(rt,"scrollRestoration")}class Ya{}},19725:(v,b,i)=>{"use strict";i.d(b,{JF:()=>fi,LE:()=>re,TP:()=>We,UA:()=>Pe,eN:()=>Oe});var r=i(11048),a=i(89724),f=i(25917),u=i(70882),e=i(94612),p=i(45435),g=i(88002);class S{}class M{}class w{constructor(an){this.normalizedNames=new Map,this.lazyUpdate=null,an?this.lazyInit="string"==typeof an?()=>{this.headers=new Map,an.split("\n").forEach(vn=>{const Zn=vn.indexOf(":");if(Zn>0){const Xn=vn.slice(0,Zn),zn=Xn.toLowerCase(),ri=vn.slice(Zn+1).trim();this.maybeSetNormalizedName(Xn,zn),this.headers.has(zn)?this.headers.get(zn).push(ri):this.headers.set(zn,[ri])}})}:()=>{this.headers=new Map,Object.keys(an).forEach(vn=>{let Zn=an[vn];const Xn=vn.toLowerCase();"string"==typeof Zn&&(Zn=[Zn]),Zn.length>0&&(this.headers.set(Xn,Zn),this.maybeSetNormalizedName(vn,Xn))})}:this.headers=new Map}has(an){return this.init(),this.headers.has(an.toLowerCase())}get(an){this.init();const vn=this.headers.get(an.toLowerCase());return vn&&vn.length>0?vn[0]:null}keys(){return this.init(),Array.from(this.normalizedNames.values())}getAll(an){return this.init(),this.headers.get(an.toLowerCase())||null}append(an,vn){return this.clone({name:an,value:vn,op:"a"})}set(an,vn){return this.clone({name:an,value:vn,op:"s"})}delete(an,vn){return this.clone({name:an,value:vn,op:"d"})}maybeSetNormalizedName(an,vn){this.normalizedNames.has(vn)||this.normalizedNames.set(vn,an)}init(){this.lazyInit&&(this.lazyInit instanceof w?this.copyFrom(this.lazyInit):this.lazyInit(),this.lazyInit=null,this.lazyUpdate&&(this.lazyUpdate.forEach(an=>this.applyUpdate(an)),this.lazyUpdate=null))}copyFrom(an){an.init(),Array.from(an.headers.keys()).forEach(vn=>{this.headers.set(vn,an.headers.get(vn)),this.normalizedNames.set(vn,an.normalizedNames.get(vn))})}clone(an){const vn=new w;return vn.lazyInit=this.lazyInit&&this.lazyInit instanceof w?this.lazyInit:this,vn.lazyUpdate=(this.lazyUpdate||[]).concat([an]),vn}applyUpdate(an){const vn=an.name.toLowerCase();switch(an.op){case"a":case"s":let Zn=an.value;if("string"==typeof Zn&&(Zn=[Zn]),0===Zn.length)return;this.maybeSetNormalizedName(an.name,vn);const Xn=("a"===an.op?this.headers.get(vn):void 0)||[];Xn.push(...Zn),this.headers.set(vn,Xn);break;case"d":const zn=an.value;if(zn){let ri=this.headers.get(vn);if(!ri)return;ri=ri.filter(Gi=>-1===zn.indexOf(Gi)),0===ri.length?(this.headers.delete(vn),this.normalizedNames.delete(vn)):this.headers.set(vn,ri)}else this.headers.delete(vn),this.normalizedNames.delete(vn)}}forEach(an){this.init(),Array.from(this.normalizedNames.keys()).forEach(vn=>an(this.normalizedNames.get(vn),this.headers.get(vn)))}}class x{encodeKey(an){return q(an)}encodeValue(an){return q(an)}decodeKey(an){return decodeURIComponent(an)}decodeValue(an){return decodeURIComponent(an)}}const W=/%(\d[a-f0-9])/gi,j={40:"@","3A":":",24:"$","2C":",","3B":";","2B":"+","3D":"=","3F":"?","2F":"/"};function q(Er){return encodeURIComponent(Er).replace(W,(an,vn)=>{var Zn;return null!==(Zn=j[vn])&&void 0!==Zn?Zn:an})}function ue(Er){return`${Er}`}class re{constructor(an={}){if(this.updates=null,this.cloneFrom=null,this.encoder=an.encoder||new x,an.fromString){if(an.fromObject)throw new Error("Cannot specify both fromString and fromObject.");this.map=function B(Er,an){const vn=new Map;return Er.length>0&&Er.replace(/^\?/,"").split("&").forEach(Xn=>{const zn=Xn.indexOf("="),[ri,Gi]=-1==zn?[an.decodeKey(Xn),""]:[an.decodeKey(Xn.slice(0,zn)),an.decodeValue(Xn.slice(zn+1))],ui=vn.get(ri)||[];ui.push(Gi),vn.set(ri,ui)}),vn}(an.fromString,this.encoder)}else an.fromObject?(this.map=new Map,Object.keys(an.fromObject).forEach(vn=>{const Zn=an.fromObject[vn];this.map.set(vn,Array.isArray(Zn)?Zn:[Zn])})):this.map=null}has(an){return this.init(),this.map.has(an)}get(an){this.init();const vn=this.map.get(an);return vn?vn[0]:null}getAll(an){return this.init(),this.map.get(an)||null}keys(){return this.init(),Array.from(this.map.keys())}append(an,vn){return this.clone({param:an,value:vn,op:"a"})}appendAll(an){const vn=[];return Object.keys(an).forEach(Zn=>{const Xn=an[Zn];Array.isArray(Xn)?Xn.forEach(zn=>{vn.push({param:Zn,value:zn,op:"a"})}):vn.push({param:Zn,value:Xn,op:"a"})}),this.clone(vn)}set(an,vn){return this.clone({param:an,value:vn,op:"s"})}delete(an,vn){return this.clone({param:an,value:vn,op:"d"})}toString(){return this.init(),this.keys().map(an=>{const vn=this.encoder.encodeKey(an);return this.map.get(an).map(Zn=>vn+"="+this.encoder.encodeValue(Zn)).join("&")}).filter(an=>""!==an).join("&")}clone(an){const vn=new re({encoder:this.encoder});return vn.cloneFrom=this.cloneFrom||this,vn.updates=(this.updates||[]).concat(an),vn}init(){null===this.map&&(this.map=new Map),null!==this.cloneFrom&&(this.cloneFrom.init(),this.cloneFrom.keys().forEach(an=>this.map.set(an,this.cloneFrom.map.get(an))),this.updates.forEach(an=>{switch(an.op){case"a":case"s":const vn=("a"===an.op?this.map.get(an.param):void 0)||[];vn.push(ue(an.value)),this.map.set(an.param,vn);break;case"d":if(void 0===an.value){this.map.delete(an.param);break}{let Zn=this.map.get(an.param)||[];const Xn=Zn.indexOf(ue(an.value));-1!==Xn&&Zn.splice(Xn,1),Zn.length>0?this.map.set(an.param,Zn):this.map.delete(an.param)}}}),this.cloneFrom=this.updates=null)}}class se{constructor(){this.map=new Map}set(an,vn){return this.map.set(an,vn),this}get(an){return this.map.has(an)||this.map.set(an,an.defaultValue()),this.map.get(an)}delete(an){return this.map.delete(an),this}has(an){return this.map.has(an)}keys(){return this.map.keys()}}function ie(Er){return"undefined"!=typeof ArrayBuffer&&Er instanceof ArrayBuffer}function fe(Er){return"undefined"!=typeof Blob&&Er instanceof Blob}function he(Er){return"undefined"!=typeof FormData&&Er instanceof FormData}class ce{constructor(an,vn,Zn,Xn){let zn;if(this.url=vn,this.body=null,this.reportProgress=!1,this.withCredentials=!1,this.responseType="json",this.method=an.toUpperCase(),function ae(Er){switch(Er){case"DELETE":case"GET":case"HEAD":case"OPTIONS":case"JSONP":return!1;default:return!0}}(this.method)||Xn?(this.body=void 0!==Zn?Zn:null,zn=Xn):zn=Zn,zn&&(this.reportProgress=!!zn.reportProgress,this.withCredentials=!!zn.withCredentials,zn.responseType&&(this.responseType=zn.responseType),zn.headers&&(this.headers=zn.headers),zn.context&&(this.context=zn.context),zn.params&&(this.params=zn.params)),this.headers||(this.headers=new w),this.context||(this.context=new se),this.params){const ri=this.params.toString();if(0===ri.length)this.urlWithParams=vn;else{const Gi=vn.indexOf("?");this.urlWithParams=vn+(-1===Gi?"?":Gi<vn.length-1?"&":"")+ri}}else this.params=new re,this.urlWithParams=vn}serializeBody(){return null===this.body?null:ie(this.body)||fe(this.body)||he(this.body)||function Ce(Er){return"undefined"!=typeof URLSearchParams&&Er instanceof URLSearchParams}(this.body)||"string"==typeof this.body?this.body:this.body instanceof re?this.body.toString():"object"==typeof this.body||"boolean"==typeof this.body||Array.isArray(this.body)?JSON.stringify(this.body):this.body.toString()}detectContentTypeHeader(){return null===this.body||he(this.body)?null:fe(this.body)?this.body.type||null:ie(this.body)?null:"string"==typeof this.body?"text/plain":this.body instanceof re?"application/x-www-form-urlencoded;charset=UTF-8":"object"==typeof this.body||"number"==typeof this.body||"boolean"==typeof this.body?"application/json":null}clone(an={}){var vn;const Zn=an.method||this.method,Xn=an.url||this.url,zn=an.responseType||this.responseType,ri=void 0!==an.body?an.body:this.body,Gi=void 0!==an.withCredentials?an.withCredentials:this.withCredentials,ui=void 0!==an.reportProgress?an.reportProgress:this.reportProgress;let vr=an.headers||this.headers,Ji=an.params||this.params;const mn=null!==(vn=an.context)&&void 0!==vn?vn:this.context;return void 0!==an.setHeaders&&(vr=Object.keys(an.setHeaders).reduce((Rn,Wn)=>Rn.set(Wn,an.setHeaders[Wn]),vr)),an.setParams&&(Ji=Object.keys(an.setParams).reduce((Rn,Wn)=>Rn.set(Wn,an.setParams[Wn]),Ji)),new ce(Zn,Xn,ri,{params:Ji,headers:vr,context:mn,reportProgress:ui,responseType:zn,withCredentials:Gi})}}var Be=(()=>((Be=Be||{})[Be.Sent=0]="Sent",Be[Be.UploadProgress=1]="UploadProgress",Be[Be.ResponseHeader=2]="ResponseHeader",Be[Be.DownloadProgress=3]="DownloadProgress",Be[Be.Response=4]="Response",Be[Be.User=5]="User",Be))();class Ve{constructor(an,vn=200,Zn="OK"){this.headers=an.headers||new w,this.status=void 0!==an.status?an.status:vn,this.statusText=an.statusText||Zn,this.url=an.url||null,this.ok=this.status>=200&&this.status<300}}class Xe extends Ve{constructor(an={}){super(an),this.type=Be.ResponseHeader}clone(an={}){return new Xe({headers:an.headers||this.headers,status:void 0!==an.status?an.status:this.status,statusText:an.statusText||this.statusText,url:an.url||this.url||void 0})}}class He extends Ve{constructor(an={}){super(an),this.type=Be.Response,this.body=void 0!==an.body?an.body:null}clone(an={}){return new He({body:void 0!==an.body?an.body:this.body,headers:an.headers||this.headers,status:void 0!==an.status?an.status:this.status,statusText:an.statusText||this.statusText,url:an.url||this.url||void 0})}}class Pe extends Ve{constructor(an){super(an,0,"Unknown Error"),this.name="HttpErrorResponse",this.ok=!1,this.message=this.status>=200&&this.status<300?`Http failure during parsing for ${an.url||"(unknown url)"}`:`Http failure response for ${an.url||"(unknown url)"}: ${an.status} ${an.statusText}`,this.error=an.error||null}}function Ge(Er,an){return{body:an,headers:Er.headers,context:Er.context,observe:Er.observe,params:Er.params,reportProgress:Er.reportProgress,responseType:Er.responseType,withCredentials:Er.withCredentials}}let Oe=(()=>{class Er{constructor(vn){this.handler=vn}request(vn,Zn,Xn={}){let zn;if(vn instanceof ce)zn=vn;else{let ui,vr;ui=Xn.headers instanceof w?Xn.headers:new w(Xn.headers),Xn.params&&(vr=Xn.params instanceof re?Xn.params:new re({fromObject:Xn.params})),zn=new ce(vn,Zn,void 0!==Xn.body?Xn.body:null,{headers:ui,context:Xn.context,params:vr,reportProgress:Xn.reportProgress,responseType:Xn.responseType||"json",withCredentials:Xn.withCredentials})}const ri=(0,f.of)(zn).pipe((0,e.b)(ui=>this.handler.handle(ui)));if(vn instanceof ce||"events"===Xn.observe)return ri;const Gi=ri.pipe((0,p.h)(ui=>ui instanceof He));switch(Xn.observe||"body"){case"body":switch(zn.responseType){case"arraybuffer":return Gi.pipe((0,g.U)(ui=>{if(null!==ui.body&&!(ui.body instanceof ArrayBuffer))throw new Error("Response is not an ArrayBuffer.");return ui.body}));case"blob":return Gi.pipe((0,g.U)(ui=>{if(null!==ui.body&&!(ui.body instanceof Blob))throw new Error("Response is not a Blob.");return ui.body}));case"text":return Gi.pipe((0,g.U)(ui=>{if(null!==ui.body&&"string"!=typeof ui.body)throw new Error("Response is not a string.");return ui.body}));default:return Gi.pipe((0,g.U)(ui=>ui.body))}case"response":return Gi;default:throw new Error(`Unreachable: unhandled observe type ${Xn.observe}}`)}}delete(vn,Zn={}){return this.request("DELETE",vn,Zn)}get(vn,Zn={}){return this.request("GET",vn,Zn)}head(vn,Zn={}){return this.request("HEAD",vn,Zn)}jsonp(vn,Zn){return this.request("JSONP",vn,{params:(new re).append(Zn,"JSONP_CALLBACK"),observe:"body",responseType:"json"})}options(vn,Zn={}){return this.request("OPTIONS",vn,Zn)}patch(vn,Zn,Xn={}){return this.request("PATCH",vn,Ge(Xn,Zn))}post(vn,Zn,Xn={}){return this.request("POST",vn,Ge(Xn,Zn))}put(vn,Zn,Xn={}){return this.request("PUT",vn,Ge(Xn,Zn))}}return Er.\u0275fac=function(vn){return new(vn||Er)(a.LFG(S))},Er.\u0275prov=a.Yz7({token:Er,factory:Er.\u0275fac}),Er})();class Tt{constructor(an,vn){this.next=an,this.interceptor=vn}handle(an){return this.interceptor.intercept(an,this.next)}}const We=new a.OlP("HTTP_INTERCEPTORS");let Qt=(()=>{class Er{intercept(vn,Zn){return Zn.handle(vn)}}return Er.\u0275fac=function(vn){return new(vn||Er)},Er.\u0275prov=a.Yz7({token:Er,factory:Er.\u0275fac}),Er})();const Fn=/^\)\]\}',?\n/;let mi=(()=>{class Er{constructor(vn){this.xhrFactory=vn}handle(vn){if("JSONP"===vn.method)throw new Error("Attempted to construct Jsonp request without HttpClientJsonpModule installed.");return new u.y(Zn=>{const Xn=this.xhrFactory.build();if(Xn.open(vn.method,vn.urlWithParams),vn.withCredentials&&(Xn.withCredentials=!0),vn.headers.forEach((Wn,et)=>Xn.setRequestHeader(Wn,et.join(","))),vn.headers.has("Accept")||Xn.setRequestHeader("Accept","application/json, text/plain, */*"),!vn.headers.has("Content-Type")){const Wn=vn.detectContentTypeHeader();null!==Wn&&Xn.setRequestHeader("Content-Type",Wn)}if(vn.responseType){const Wn=vn.responseType.toLowerCase();Xn.responseType="json"!==Wn?Wn:"text"}const zn=vn.serializeBody();let ri=null;const Gi=()=>{if(null!==ri)return ri;const Wn=Xn.statusText||"OK",et=new w(Xn.getAllResponseHeaders()),Le=function pr(Er){return"responseURL"in Er&&Er.responseURL?Er.responseURL:/^X-Request-URL:/m.test(Er.getAllResponseHeaders())?Er.getResponseHeader("X-Request-URL"):null}(Xn)||vn.url;return ri=new Xe({headers:et,status:Xn.status,statusText:Wn,url:Le}),ri},ui=()=>{let{headers:Wn,status:et,statusText:Le,url:Re}=Gi(),Se=null;204!==et&&(Se=void 0===Xn.response?Xn.responseText:Xn.response),0===et&&(et=Se?200:0);let dt=et>=200&&et<300;if("json"===vn.responseType&&"string"==typeof Se){const st=Se;Se=Se.replace(Fn,"");try{Se=""!==Se?JSON.parse(Se):null}catch(nn){Se=st,dt&&(dt=!1,Se={error:nn,text:Se})}}dt?(Zn.next(new He({body:Se,headers:Wn,status:et,statusText:Le,url:Re||void 0})),Zn.complete()):Zn.error(new Pe({error:Se,headers:Wn,status:et,statusText:Le,url:Re||void 0}))},vr=Wn=>{const{url:et}=Gi(),Le=new Pe({error:Wn,status:Xn.status||0,statusText:Xn.statusText||"Unknown Error",url:et||void 0});Zn.error(Le)};let Ji=!1;const mn=Wn=>{Ji||(Zn.next(Gi()),Ji=!0);let et={type:Be.DownloadProgress,loaded:Wn.loaded};Wn.lengthComputable&&(et.total=Wn.total),"text"===vn.responseType&&!!Xn.responseText&&(et.partialText=Xn.responseText),Zn.next(et)},Rn=Wn=>{let et={type:Be.UploadProgress,loaded:Wn.loaded};Wn.lengthComputable&&(et.total=Wn.total),Zn.next(et)};return Xn.addEventListener("load",ui),Xn.addEventListener("error",vr),Xn.addEventListener("timeout",vr),Xn.addEventListener("abort",vr),vn.reportProgress&&(Xn.addEventListener("progress",mn),null!==zn&&Xn.upload&&Xn.upload.addEventListener("progress",Rn)),Xn.send(zn),Zn.next({type:Be.Sent}),()=>{Xn.removeEventListener("error",vr),Xn.removeEventListener("abort",vr),Xn.removeEventListener("load",ui),Xn.removeEventListener("timeout",vr),vn.reportProgress&&(Xn.removeEventListener("progress",mn),null!==zn&&Xn.upload&&Xn.upload.removeEventListener("progress",Rn)),Xn.readyState!==Xn.DONE&&Xn.abort()}})}}return Er.\u0275fac=function(vn){return new(vn||Er)(a.LFG(r.JF))},Er.\u0275prov=a.Yz7({token:Er,factory:Er.\u0275fac}),Er})();const ci=new a.OlP("XSRF_COOKIE_NAME"),hr=new a.OlP("XSRF_HEADER_NAME");class Br{}let Ur=(()=>{class Er{constructor(vn,Zn,Xn){this.doc=vn,this.platform=Zn,this.cookieName=Xn,this.lastCookieString="",this.lastToken=null,this.parseCount=0}getToken(){if("server"===this.platform)return null;const vn=this.doc.cookie||"";return vn!==this.lastCookieString&&(this.parseCount++,this.lastToken=(0,r.Mx)(vn,this.cookieName),this.lastCookieString=vn),this.lastToken}}return Er.\u0275fac=function(vn){return new(vn||Er)(a.LFG(r.K0),a.LFG(a.Lbi),a.LFG(ci))},Er.\u0275prov=a.Yz7({token:Er,factory:Er.\u0275fac}),Er})(),Hn=(()=>{class Er{constructor(vn,Zn){this.tokenService=vn,this.headerName=Zn}intercept(vn,Zn){const Xn=vn.url.toLowerCase();if("GET"===vn.method||"HEAD"===vn.method||Xn.startsWith("http://")||Xn.startsWith("https://"))return Zn.handle(vn);const zn=this.tokenService.getToken();return null!==zn&&!vn.headers.has(this.headerName)&&(vn=vn.clone({headers:vn.headers.set(this.headerName,zn)})),Zn.handle(vn)}}return Er.\u0275fac=function(vn){return new(vn||Er)(a.LFG(Br),a.LFG(hr))},Er.\u0275prov=a.Yz7({token:Er,factory:Er.\u0275fac}),Er})(),er=(()=>{class Er{constructor(vn,Zn){this.backend=vn,this.injector=Zn,this.chain=null}handle(vn){if(null===this.chain){const Zn=this.injector.get(We,[]);this.chain=Zn.reduceRight((Xn,zn)=>new Tt(Xn,zn),this.backend)}return this.chain.handle(vn)}}return Er.\u0275fac=function(vn){return new(vn||Er)(a.LFG(M),a.LFG(a.zs3))},Er.\u0275prov=a.Yz7({token:Er,factory:Er.\u0275fac}),Er})(),bi=(()=>{class Er{static disable(){return{ngModule:Er,providers:[{provide:Hn,useClass:Qt}]}}static withOptions(vn={}){return{ngModule:Er,providers:[vn.cookieName?{provide:ci,useValue:vn.cookieName}:[],vn.headerName?{provide:hr,useValue:vn.headerName}:[]]}}}return Er.\u0275fac=function(vn){return new(vn||Er)},Er.\u0275mod=a.oAB({type:Er}),Er.\u0275inj=a.cJS({providers:[Hn,{provide:We,useExisting:Hn,multi:!0},{provide:Br,useClass:Ur},{provide:ci,useValue:"XSRF-TOKEN"},{provide:hr,useValue:"X-XSRF-TOKEN"}]}),Er})(),fi=(()=>{class Er{}return Er.\u0275fac=function(vn){return new(vn||Er)},Er.\u0275mod=a.oAB({type:Er}),Er.\u0275inj=a.cJS({providers:[Oe,{provide:S,useClass:er},mi,{provide:M,useExisting:mi}],imports:[[bi.withOptions({cookieName:"XSRF-TOKEN",headerName:"X-XSRF-TOKEN"})]]}),Er})()},89724:(v,b,i)=>{"use strict";i.d(b,{$8M:()=>id,$Z:()=>Rl,AFp:()=>_T,ALo:()=>kS,AaK:()=>S,AsE:()=>hy,BQk:()=>ag,CHM:()=>Fa,CRH:()=>WS,CZH:()=>Qy,CqO:()=>ob,DdM:()=>OS,DjV:()=>Pb,Dn7:()=>BS,DtL:()=>uS,DyG:()=>fc,EJc:()=>eO,EiD:()=>Gh,EpF:()=>rb,F$t:()=>ab,F4k:()=>ib,FYo:()=>_S,FiY:()=>fr,G48:()=>SO,Gf:()=>ZS,GfV:()=>gS,GkF:()=>iy,Gpc:()=>x,Gre:()=>Rb,Hsn:()=>H1,IIB:()=>WM,Ikx:()=>vy,JOm:()=>Md,JVY:()=>lh,Jf7:()=>Lf,L6k:()=>Hp,LAX:()=>Bh,LFG:()=>ve,LSH:()=>Kd,Lbi:()=>XM,MAs:()=>w1,MGl:()=>B1,MT6:()=>wb,N_p:()=>Cy,NdJ:()=>sy,OlP:()=>qa,Oqu:()=>py,PXZ:()=>hO,Q6J:()=>Na,QGY:()=>oy,Qsj:()=>rM,QtT:()=>Oy,R0b:()=>w_,RDi:()=>Ja,Rgc:()=>Fv,SBq:()=>Rv,SDv:()=>lS,Sil:()=>nO,Suo:()=>zS,TTD:()=>_s,TgZ:()=>Yf,Tol:()=>Eb,Udp:()=>cy,UuU:()=>fS,VKq:()=>AS,VLi:()=>dO,W1O:()=>KS,WLB:()=>DS,X6Q:()=>bO,XFs:()=>_r,Xpm:()=>Fe,Y36:()=>ba,YKP:()=>SS,YNc:()=>R1,Yjl:()=>Vt,Yz7:()=>xt,ZZ4:()=>dE,Zx4:()=>cS,_Bn:()=>dS,_UZ:()=>rp,_Vd:()=>e0,_c5:()=>HO,_uU:()=>G1,aQg:()=>fE,c2e:()=>KM,cJS:()=>Gt,cg1:()=>Ey,d8E:()=>yy,dDg:()=>nE,deG:()=>cl,dqk:()=>vr,eBb:()=>dl,eFA:()=>TT,ekj:()=>dy,g9A:()=>gT,h0i:()=>jm,hGG:()=>BO,hYB:()=>ay,hij:()=>V1,i9L:()=>$p,iGM:()=>By,ifc:()=>Xn,ip1:()=>Jy,kEZ:()=>xS,kL8:()=>Yb,kYT:()=>$t,l5B:()=>RS,lG2:()=>yt,lcZ:()=>$S,lnq:()=>_y,mCW:()=>Pf,n5z:()=>gf,oAB:()=>Et,oJD:()=>Vh,oxw:()=>lg,pB0:()=>wf,pQV:()=>My,pYS:()=>zu,q3G:()=>Du,qLn:()=>Cp,qOj:()=>_v,qZA:()=>cf,qbA:()=>wS,qzn:()=>Xd,r_U:()=>hT,s9C:()=>Ov,sBO:()=>TO,sIi:()=>Im,s_b:()=>r0,soG:()=>Ky,tBr:()=>Vn,tHW:()=>Ty,tb:()=>vT,tp0:()=>Ui,uIk:()=>vv,uOi:()=>h_,vHH:()=>q,vpe:()=>X_,wAp:()=>za,xi3:()=>HS,xp6:()=>ia,yhl:()=>Bd,ynx:()=>nh,z2F:()=>oE,z3N:()=>Rc,zSh:()=>gu,zs3:()=>qp});var r=i(79765),a=i(13464),f=i(70882),u=i(66682),e=i(4121);function p(c){for(let d in c)if(c[d]===p)return d;throw Error("Could not find renamed property on target object.")}function g(c,d){for(const m in d)d.hasOwnProperty(m)&&!c.hasOwnProperty(m)&&(c[m]=d[m])}function S(c){if("string"==typeof c)return c;if(Array.isArray(c))return"["+c.map(S).join(", ")+"]";if(null==c)return""+c;if(c.overriddenName)return`${c.overriddenName}`;if(c.name)return`${c.name}`;const d=c.toString();if(null==d)return""+d;const m=d.indexOf("\n");return-1===m?d:d.substring(0,m)}function M(c,d){return null==c||""===c?null===d?"":d:null==d||""===d?c:c+" "+d}const w=p({__forward_ref__:p});function x(c){return c.__forward_ref__=x,c.toString=function(){return S(this())},c}function B(c){return W(c)?c():c}function W(c){return"function"==typeof c&&c.hasOwnProperty(w)&&c.__forward_ref__===x}class q extends Error{constructor(d,m){super(function ue(c,d){return`NG0${Math.abs(c)}${d?": "+d:""}`}(d,m)),this.code=d}}function re(c){return"string"==typeof c?c:null==c?"":String(c)}function H(c){return"function"==typeof c?c.name||c.toString():"object"==typeof c&&null!=c&&"function"==typeof c.type?c.type.name||c.type.toString():re(c)}function fe(c,d){const m=d?` in ${d}`:"";throw new q(-201,`No provider for ${H(c)} found${m}`)}function Yt(c,d,m,A){throw new Error(`ASSERTION ERROR: ${c}`+(null==A?"":` [Expected=> ${m} ${A} ${d} <=Actual]`))}function xt(c){return{token:c.token,providedIn:c.providedIn||null,factory:c.factory,value:void 0}}function Gt(c){return{providers:c.providers||[],imports:c.imports||[]}}function Fn(c){return pr(c,Br)||pr(c,Hn)}function pr(c,d){return c.hasOwnProperty(d)?c[d]:null}function hr(c){return c&&(c.hasOwnProperty(Ur)||c.hasOwnProperty(er))?c[Ur]:null}const Br=p({\u0275prov:p}),Ur=p({\u0275inj:p}),Hn=p({ngInjectableDef:p}),er=p({ngInjectorDef:p});var _r=(()=>((_r=_r||{})[_r.Default=0]="Default",_r[_r.Host=1]="Host",_r[_r.Self=2]="Self",_r[_r.SkipSelf=4]="SkipSelf",_r[_r.Optional=8]="Optional",_r))();let ei;function fi(c){const d=ei;return ei=c,d}function no(c,d,m){const A=Fn(c);return A&&"root"==A.providedIn?void 0===A.value?A.value=A.factory():A.value:m&_r.Optional?null:void 0!==d?d:void fe(S(c),"Injector")}function Er(c){return{toString:c}.toString()}var an=(()=>((an=an||{})[an.OnPush=0]="OnPush",an[an.Default=1]="Default",an))(),Xn=(()=>{return(c=Xn||(Xn={}))[c.Emulated=0]="Emulated",c[c.None=2]="None",c[c.ShadowDom=3]="ShadowDom",Xn;var c})();const zn="undefined"!=typeof globalThis&&globalThis,ri="undefined"!=typeof window&&window,Gi="undefined"!=typeof self&&"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&self,vr=zn||"undefined"!=typeof global&&global||ri||Gi,Rn={},Wn=[],et=p({\u0275cmp:p}),Le=p({\u0275dir:p}),Re=p({\u0275pipe:p}),Se=p({\u0275mod:p}),dt=p({\u0275fac:p}),st=p({__NG_ELEMENT_ID__:p});let nn=0;function Fe(c){return Er(()=>{const m={},A={type:c.type,providersResolver:null,decls:c.decls,vars:c.vars,factory:null,template:c.template||null,consts:c.consts||null,ngContentSelectors:c.ngContentSelectors,hostBindings:c.hostBindings||null,hostVars:c.hostVars||0,hostAttrs:c.hostAttrs||null,contentQueries:c.contentQueries||null,declaredInputs:m,inputs:null,outputs:null,exportAs:c.exportAs||null,onPush:c.changeDetection===an.OnPush,directiveDefs:null,pipeDefs:null,selectors:c.selectors||Wn,viewQuery:c.viewQuery||null,features:c.features||null,data:c.data||{},encapsulation:c.encapsulation||Xn.Emulated,id:"c",styles:c.styles||Wn,_:null,setInput:null,schemas:c.schemas||null,tView:null},k=c.directives,ee=c.features,me=c.pipes;return A.id+=nn++,A.inputs=_t(c.inputs,m),A.outputs=_t(c.outputs),ee&&ee.forEach(Ne=>Ne(A)),A.directiveDefs=k?()=>("function"==typeof k?k():k).map(ti):null,A.pipeDefs=me?()=>("function"==typeof me?me():me).map(Ut):null,A})}function ti(c){return yn(c)||function Cr(c){return c[Le]||null}(c)}function Ut(c){return function xi(c){return c[Re]||null}(c)}const Dn={};function Et(c){return Er(()=>{const d={type:c.type,bootstrap:c.bootstrap||Wn,declarations:c.declarations||Wn,imports:c.imports||Wn,exports:c.exports||Wn,transitiveCompileScopes:null,schemas:c.schemas||null,id:c.id||null};return null!=c.id&&(Dn[c.id]=c.type),d})}function $t(c,d){return Er(()=>{const m=yi(c,!0);m.declarations=d.declarations||Wn,m.imports=d.imports||Wn,m.exports=d.exports||Wn})}function _t(c,d){if(null==c)return Rn;const m={};for(const A in c)if(c.hasOwnProperty(A)){let k=c[A],ee=k;Array.isArray(k)&&(ee=k[1],k=k[0]),m[k]=A,d&&(d[k]=ee)}return m}const yt=Fe;function Vt(c){return{type:c.type,name:c.name,factory:null,pure:!1!==c.pure,onDestroy:c.type.prototype.ngOnDestroy||null}}function yn(c){return c[et]||null}function yi(c,d){const m=c[Se]||null;if(!m&&!0===d)throw new Error(`Type ${S(c)} does not have '\u0275mod' property.`);return m}function es(c){return Array.isArray(c)&&"object"==typeof c[1]}function ma(c){return Array.isArray(c)&&!0===c[1]}function Ea(c){return 0!=(8&c.flags)}function fa(c){return 2==(2&c.flags)}function sa(c){return 1==(1&c.flags)}function Ra(c){return null!==c.template}function pl(c){return 0!=(512&c[2])}function Oi(c,d){return c.hasOwnProperty(dt)?c[dt]:null}class ki{constructor(d,m,A){this.previousValue=d,this.currentValue=m,this.firstChange=A}isFirstChange(){return this.firstChange}}function _s(){return Vo}function Vo(c){return c.type.prototype.ngOnChanges&&(c.setInput=Ks),Fs}function Fs(){const c=sl(this),d=null==c?void 0:c.current;if(d){const m=c.previous;if(m===Rn)c.previous=d;else for(let A in d)m[A]=d[A];c.current=null,this.ngOnChanges(d)}}function Ks(c,d,m,A){const k=sl(c)||function Jl(c,d){return c[hl]=d}(c,{previous:Rn,current:null}),ee=k.current||(k.current={}),me=k.previous,Ne=this.declaredInputs[m],Je=me[Ne];ee[Ne]=new ki(Je&&Je.currentValue,d,me===Rn),c[A]=d}_s.ngInherit=!0;const hl="__ngSimpleChanges__";function sl(c){return c[hl]||null}let ru;function Ja(c){ru=c}function Ol(){return void 0!==ru?ru:"undefined"!=typeof document?document:void 0}function Ya(c){return!!c.listen}const rt={createRenderer:(c,d)=>Ol()};function pt(c){for(;Array.isArray(c);)c=c[0];return c}function oi(c,d){return pt(d[c])}function wi(c,d){return pt(d[c.index])}function Gs(c,d){return c.data[d]}function Os(c,d){return c[d]}function ws(c,d){const m=d[c];return es(m)?m:m[0]}function Fo(c){return 4==(4&c[2])}function Ka(c){return 128==(128&c[2])}function Bs(c,d){return null==d?null:c[d]}function mt(c){c[18]=0}function ot(c,d){c[5]+=d;let m=c,A=c[3];for(;null!==A&&(1===d&&1===m[5]||-1===d&&0===m[5]);)A[5]+=d,m=A,A=A[3]}const je={lFrame:Tr(null),bindingsEnabled:!0};function Ku(){return je.bindingsEnabled}function Yi(){return je.lFrame.lView}function aa(){return je.lFrame.tView}function Fa(c){return je.lFrame.contextLView=c,c[8]}function Es(){let c=qu();for(;null!==c&&64===c.type;)c=c.parent;return c}function qu(){return je.lFrame.currentTNode}function Sl(){const c=je.lFrame,d=c.currentTNode;return c.isParent?d:d.parent}function lu(c,d){const m=je.lFrame;m.currentTNode=c,m.isParent=d}function Eu(){return je.lFrame.isParent}function iu(){je.lFrame.isParent=!1}function uu(){const c=je.lFrame;let d=c.bindingRootIndex;return-1===d&&(d=c.bindingRootIndex=c.tView.bindingStartIndex),d}function du(){return je.lFrame.bindingIndex}function Uu(){return je.lFrame.bindingIndex++}function Yu(c){const d=je.lFrame,m=d.bindingIndex;return d.bindingIndex=d.bindingIndex+c,m}function Ld(c){je.lFrame.inI18n=c}function Io(c,d){const m=je.lFrame;m.bindingIndex=m.bindingRootIndex=c,Sr(d)}function Sr(c){je.lFrame.currentDirectiveIndex=c}function Z(c){const d=je.lFrame.currentDirectiveIndex;return-1===d?null:c[d]}function De(){return je.lFrame.currentQueryIndex}function ct(c){je.lFrame.currentQueryIndex=c}function It(c){const d=c[1];return 2===d.type?d.declTNode:1===d.type?c[6]:null}function Ht(c,d,m){if(m&_r.SkipSelf){let k=d,ee=c;for(;!(k=k.parent,null!==k||m&_r.Host||(k=It(ee),null===k||(ee=ee[15],10&k.type))););if(null===k)return!1;d=k,c=ee}const A=je.lFrame=Pn();return A.currentTNode=d,A.lView=c,!0}function _n(c){const d=Pn(),m=c[1];je.lFrame=d,d.currentTNode=m.firstChild,d.lView=c,d.tView=m,d.contextLView=c,d.bindingIndex=m.bindingStartIndex,d.inI18n=!1}function Pn(){const c=je.lFrame,d=null===c?null:c.child;return null===d?Tr(c):d}function Tr(c){const d={currentTNode:null,isParent:!0,lView:null,tView:null,selectedIndex:-1,contextLView:null,elementDepthCount:0,currentNamespace:null,currentDirectiveIndex:-1,bindingRootIndex:-1,bindingIndex:-1,currentQueryIndex:0,parent:c,child:null,inI18n:!1};return null!==c&&(c.child=d),d}function ai(){const c=je.lFrame;return je.lFrame=c.parent,c.currentTNode=null,c.lView=null,c}const Ei=ai;function Ci(){const c=ai();c.isParent=!0,c.tView=null,c.selectedIndex=-1,c.contextLView=null,c.elementDepthCount=0,c.currentDirectiveIndex=-1,c.currentNamespace=null,c.bindingRootIndex=-1,c.bindingIndex=-1,c.currentQueryIndex=0}function Yn(){return je.lFrame.selectedIndex}function Rr(c){je.lFrame.selectedIndex=c}function br(){const c=je.lFrame;return Gs(c.tView,c.selectedIndex)}function Ic(c,d){for(let m=d.directiveStart,A=d.directiveEnd;m<A;m++){const ee=c.data[m].type.prototype,{ngAfterContentInit:me,ngAfterContentChecked:Ne,ngAfterViewInit:Je,ngAfterViewChecked:kt,ngOnDestroy:en}=ee;me&&(c.contentHooks||(c.contentHooks=[])).push(-m,me),Ne&&((c.contentHooks||(c.contentHooks=[])).push(m,Ne),(c.contentCheckHooks||(c.contentCheckHooks=[])).push(m,Ne)),Je&&(c.viewHooks||(c.viewHooks=[])).push(-m,Je),kt&&((c.viewHooks||(c.viewHooks=[])).push(m,kt),(c.viewCheckHooks||(c.viewCheckHooks=[])).push(m,kt)),null!=en&&(c.destroyHooks||(c.destroyHooks=[])).push(m,en)}}function Pu(c,d,m){_d(c,d,3,m)}function Su(c,d,m,A){(3&c[2])===m&&_d(c,d,m,A)}function Zd(c,d){let m=c[2];(3&m)===d&&(m&=2047,m+=1,c[2]=m)}function _d(c,d,m,A){const ee=null!=A?A:-1,me=d.length-1;let Ne=0;for(let Je=void 0!==A?65535&c[18]:0;Je<me;Je++)if("number"==typeof d[Je+1]){if(Ne=d[Je],null!=A&&Ne>=A)break}else d[Je]<0&&(c[18]+=65536),(Ne<ee||-1==ee)&&(md(c,m,d,Je),c[18]=(4294901760&c[18])+Je+2),Je++}function md(c,d,m,A){const k=m[A]<0,ee=m[A+1],Ne=c[k?-m[A]:m[A]];if(k){if(c[2]>>11<c[18]>>16&&(3&c[2])===d){c[2]+=2048;try{ee.call(Ne)}finally{}}}else try{ee.call(Ne)}finally{}}class La{constructor(d,m,A){this.factory=d,this.resolving=!1,this.canSeeViewProviders=m,this.injectImpl=A}}function gc(c,d,m){const A=Ya(c);let k=0;for(;k<m.length;){const ee=m[k];if("number"==typeof ee){if(0!==ee)break;k++;const me=m[k++],Ne=m[k++],Je=m[k++];A?c.setAttribute(d,Ne,Je,me):d.setAttributeNS(me,Ne,Je)}else{const me=ee,Ne=m[++k];pa(me)?A&&c.setProperty(d,me,Ne):A?c.setAttribute(d,me,Ne):d.setAttribute(me,Ne),k++}}return k}function En(c){return 3===c||4===c||6===c}function pa(c){return 64===c.charCodeAt(0)}function rd(c,d){if(null!==d&&0!==d.length)if(null===c||0===c.length)c=d.slice();else{let m=-1;for(let A=0;A<d.length;A++){const k=d[A];"number"==typeof k?m=k:0===m||Ze(c,m,k,null,-1===m||2===m?d[++A]:null)}}return c}function Ze(c,d,m,A,k){let ee=0,me=c.length;if(-1===d)me=-1;else for(;ee<c.length;){const Ne=c[ee++];if("number"==typeof Ne){if(Ne===d){me=-1;break}if(Ne>d){me=ee-1;break}}}for(;ee<c.length;){const Ne=c[ee];if("number"==typeof Ne)break;if(Ne===m){if(null===A)return void(null!==k&&(c[ee+1]=k));if(A===c[ee+1])return void(c[ee+2]=k)}ee++,null!==A&&ee++,null!==k&&ee++}-1!==me&&(c.splice(me,0,d),ee=me+1),c.splice(ee++,0,m),null!==A&&c.splice(ee++,0,A),null!==k&&c.splice(ee++,0,k)}function Ae(c){return-1!==c}function ge(c){return 32767&c}function Ot(c,d){let m=function ht(c){return c>>16}(c),A=d;for(;m>0;)A=A[15],m--;return A}let sn=!0;function Un(c){const d=sn;return sn=c,d}let Ca=0;function ha(c,d){const m=Nu(c,d);if(-1!==m)return m;const A=d[1];A.firstCreatePass&&(c.injectorIndex=d.length,Ma(A.data,c),Ma(d,null),Ma(A.blueprint,null));const k=cc(c,d),ee=c.injectorIndex;if(Ae(k)){const me=ge(k),Ne=Ot(k,d),Je=Ne[1].data;for(let kt=0;kt<8;kt++)d[ee+kt]=Ne[me+kt]|Je[me+kt]}return d[ee+8]=k,ee}function Ma(c,d){c.push(0,0,0,0,0,0,0,0,d)}function Nu(c,d){return-1===c.injectorIndex||c.parent&&c.parent.injectorIndex===c.injectorIndex||null===d[c.injectorIndex+8]?-1:c.injectorIndex}function cc(c,d){if(c.parent&&-1!==c.parent.injectorIndex)return c.parent.injectorIndex;let m=0,A=null,k=d;for(;null!==k;){const ee=k[1],me=ee.type;if(A=2===me?ee.declTNode:1===me?k[6]:null,null===A)return-1;if(m++,k=k[15],-1!==A.injectorIndex)return A.injectorIndex|m<<16}return-1}function ka(c,d,m){!function ms(c,d,m){let A;"string"==typeof m?A=m.charCodeAt(0)||0:m.hasOwnProperty(st)&&(A=m[st]),null==A&&(A=m[st]=Ca++);const k=255&A;d.data[c+(k>>5)]|=1<<k}(c,d,m)}function vc(c,d,m){if(m&_r.Optional)return c;fe(d,"NodeInjector")}function yc(c,d,m,A){if(m&_r.Optional&&void 0===A&&(A=null),0==(m&(_r.Self|_r.Host))){const k=c[9],ee=fi(void 0);try{return k?k.get(d,A,m&_r.Optional):no(d,A,m&_r.Optional)}finally{fi(ee)}}return vc(A,d,m)}function ju(c,d,m,A=_r.Default,k){if(null!==c){const ee=function Oa(c){if("string"==typeof c)return c.charCodeAt(0)||0;const d=c.hasOwnProperty(st)?c[st]:void 0;return"number"==typeof d?d>=0?255&d:tc:d}(m);if("function"==typeof ee){if(!Ht(d,c,A))return A&_r.Host?vc(k,m,A):yc(d,m,A,k);try{const me=ee(A);if(null!=me||A&_r.Optional)return me;fe(m)}finally{Ei()}}else if("number"==typeof ee){let me=null,Ne=Nu(c,d),Je=-1,kt=A&_r.Host?d[16][6]:null;for((-1===Ne||A&_r.SkipSelf)&&(Je=-1===Ne?cc(c,d):d[Ne+8],-1!==Je&&Ll(A,!1)?(me=d[1],Ne=ge(Je),d=Ot(Je,d)):Ne=-1);-1!==Ne;){const en=d[1];if(ll(ee,Ne,en.data)){const Ln=gd(Ne,d,m,me,A,kt);if(Ln!==Ul)return Ln}Je=d[Ne+8],-1!==Je&&Ll(A,d[1].data[Ne+8]===kt)&&ll(ee,Ne,d)?(me=en,Ne=ge(Je),d=Ot(Je,d)):Ne=-1}}}return yc(d,m,A,k)}const Ul={};function tc(){return new Ml(Es(),Yi())}function gd(c,d,m,A,k,ee){const me=d[1],Ne=me.data[c+8],en=Fc(Ne,me,m,null==A?fa(Ne)&&sn:A!=me&&0!=(3&Ne.type),k&_r.Host&&ee===Ne);return null!==en?cu(d,me,en,Ne):Ul}function Fc(c,d,m,A,k){const ee=c.providerIndexes,me=d.data,Ne=1048575&ee,Je=c.directiveStart,en=ee>>20,Or=k?Ne+en:c.directiveEnd;for(let ni=A?Ne:Ne+en;ni<Or;ni++){const Wi=me[ni];if(ni<Je&&m===Wi||ni>=Je&&Wi.type===m)return ni}if(k){const ni=me[Je];if(ni&&Ra(ni)&&ni.type===m)return Je}return null}function cu(c,d,m,A){let k=c[m];const ee=d.data;if(function kd(c){return c instanceof La}(k)){const me=k;me.resolving&&function se(c,d){const m=d?`. Dependency path: ${d.join(" > ")} > ${c}`:"";throw new q(-200,`Circular dependency in DI detected for ${c}${m}`)}(H(ee[m]));const Ne=Un(me.canSeeViewProviders);me.resolving=!0;const Je=me.injectImpl?fi(me.injectImpl):null;Ht(c,A,_r.Default);try{k=c[m]=me.factory(void 0,ee,c,A),d.firstCreatePass&&m>=A.directiveStart&&function zc(c,d,m){const{ngOnChanges:A,ngOnInit:k,ngDoCheck:ee}=d.type.prototype;if(A){const me=Vo(d);(m.preOrderHooks||(m.preOrderHooks=[])).push(c,me),(m.preOrderCheckHooks||(m.preOrderCheckHooks=[])).push(c,me)}k&&(m.preOrderHooks||(m.preOrderHooks=[])).push(0-c,k),ee&&((m.preOrderHooks||(m.preOrderHooks=[])).push(c,ee),(m.preOrderCheckHooks||(m.preOrderCheckHooks=[])).push(c,ee))}(m,ee[m],d)}finally{null!==Je&&fi(Je),Un(Ne),me.resolving=!1,Ei()}}return k}function ll(c,d,m){return!!(m[d+(c>>5)]&1<<c)}function Ll(c,d){return!(c&_r.Self||c&_r.Host&&d)}class Ml{constructor(d,m){this._tNode=d,this._lView=m}get(d,m,A){return ju(this._tNode,this._lView,d,A,m)}}function gf(c){return Er(()=>{const d=c.prototype.constructor,m=d[dt]||zd(d),A=Object.prototype;let k=Object.getPrototypeOf(c.prototype).constructor;for(;k&&k!==A;){const ee=k[dt]||zd(k);if(ee&&ee!==m)return ee;k=Object.getPrototypeOf(k)}return ee=>new ee})}function zd(c){return W(c)?()=>{const d=zd(B(c));return d&&d()}:Oi(c)}function id(c){return function rl(c,d){if("class"===d)return c.classes;if("style"===d)return c.styles;const m=c.attrs;if(m){const A=m.length;let k=0;for(;k<A;){const ee=m[k];if(En(ee))break;if(0===ee)k+=2;else if("number"==typeof ee)for(k++;k<A&&"string"==typeof m[k];)k++;else{if(ee===d)return m[k+1];k+=2}}}return null}(Es(),c)}const kl="__parameters__",Gu="__prop__metadata__";function Cu(c){return function(...m){if(c){const A=c(...m);for(const k in A)this[k]=A[k]}}}function cn(c,d,m){return Er(()=>{const A=Cu(d);function k(...ee){if(this instanceof k)return A.apply(this,ee),this;const me=new k(...ee);return Ne.annotation=me,Ne;function Ne(Je,kt,en){const Ln=Je.hasOwnProperty(kl)?Je[kl]:Object.defineProperty(Je,kl,{value:[]})[kl];for(;Ln.length<=en;)Ln.push(null);return(Ln[en]=Ln[en]||[]).push(me),Je}}return m&&(k.prototype=Object.create(m.prototype)),k.prototype.ngMetadataName=c,k.annotationCls=k,k})}function Ec(c,d,m,A){return Er(()=>{const k=Cu(d);function ee(...me){if(this instanceof ee)return k.apply(this,me),this;const Ne=new ee(...me);return function Je(kt,en){const Ln=kt.constructor,Or=Ln.hasOwnProperty(Gu)?Ln[Gu]:Object.defineProperty(Ln,Gu,{value:{}})[Gu];Or[en]=Or.hasOwnProperty(en)&&Or[en]||[],Or[en].unshift(Ne),A&&A(kt,en,...me)}}return m&&(ee.prototype=Object.create(m.prototype)),ee.prototype.ngMetadataName=c,ee.annotationCls=ee,ee})}class qa{constructor(d,m){this._desc=d,this.ngMetadataName="InjectionToken",this.\u0275prov=void 0,"number"==typeof m?this.__NG_ELEMENT_ID__=m:void 0!==m&&(this.\u0275prov=xt({token:this,providedIn:m.providedIn||"root",factory:m.factory}))}toString(){return`InjectionToken ${this._desc}`}}const cl=new qa("AnalyzeForEntryComponents");class Bc{}const $p=Ec("ViewChild",(c,d)=>Object.assign({selector:c,first:!0,isViewQuery:!0,descendants:!0},d),Bc),fc=Function;function Lc(c,d){void 0===d&&(d=c);for(let m=0;m<c.length;m++){let A=c[m];Array.isArray(A)?(d===c&&(d=c.slice(0,m)),Lc(A,d)):d!==c&&d.push(A)}return d}function Fu(c,d){c.forEach(m=>Array.isArray(m)?Fu(m,d):d(m))}function od(c,d,m){d>=c.length?c.push(m):c.splice(d,0,m)}function nc(c,d){return d>=c.length-1?c.pop():c.splice(d,1)[0]}function Aa(c,d){const m=[];for(let A=0;A<c;A++)m.push(d);return m}function $l(c,d,m){let A=ga(c,d);return A>=0?c[1|A]=m:(A=~A,function lp(c,d,m,A){let k=c.length;if(k==d)c.push(m,A);else if(1===k)c.push(A,c[0]),c[0]=m;else{for(k--,c.push(c[k-1],c[k]);k>d;)c[k]=c[k-2],k--;c[d]=m,c[d+1]=A}}(c,A,d,m)),A}function Ac(c,d){const m=ga(c,d);if(m>=0)return c[1|m]}function ga(c,d){return function Lu(c,d,m){let A=0,k=c.length>>m;for(;k!==A;){const ee=A+(k-A>>1),me=c[ee<<m];if(d===me)return ee<<m;me>d?k=ee:A=ee+1}return~(k<<m)}(c,d,1)}const Jd={},Jc="__NG_DI_FLAG__",Nl="ngTempTokenPath",ic=/\n/gm,E="__source",P=p({provide:String,useValue:p});let L;function X(c){const d=L;return L=c,d}function de(c,d=_r.Default){if(void 0===L)throw new q(203,"");return null===L?no(c,void 0,d):L.get(c,d&_r.Optional?null:void 0,d)}function ve(c,d=_r.Default){return(function bi(){return ei}()||de)(B(c),d)}const xe=ve;function nt(c){const d=[];for(let m=0;m<c.length;m++){const A=B(c[m]);if(Array.isArray(A)){if(0===A.length)throw new q(900,"");let k,ee=_r.Default;for(let me=0;me<A.length;me++){const Ne=A[me],Je=Mt(Ne);"number"==typeof Je?-1===Je?k=Ne.token:ee|=Je:k=Ne}d.push(ve(k,ee))}else d.push(ve(A))}return d}function St(c,d){return c[Jc]=d,c.prototype[Jc]=d,c}function Mt(c){return c[Jc]}const Vn=St(cn("Inject",c=>({token:c})),-1),fr=St(cn("Optional"),8),Ui=St(cn("SkipSelf"),4);let K,Ai;function lt(c){var d;return(null===(d=function be(){if(void 0===K&&(K=null,vr.trustedTypes))try{K=vr.trustedTypes.createPolicy("angular",{createHTML:c=>c,createScript:c=>c,createScriptURL:c=>c})}catch(c){}return K}())||void 0===d?void 0:d.createHTML(c))||c}function gs(){if(void 0===Ai&&(Ai=null,vr.trustedTypes))try{Ai=vr.trustedTypes.createPolicy("angular#unsafe-bypass",{createHTML:c=>c,createScript:c=>c,createScriptURL:c=>c})}catch(c){}return Ai}function Da(c){var d;return(null===(d=gs())||void 0===d?void 0:d.createHTML(c))||c}function Dl(c){var d;return(null===(d=gs())||void 0===d?void 0:d.createScriptURL(c))||c}class Yl{constructor(d){this.changingThisBreaksApplicationSecurity=d}toString(){return`SafeValue must use [property]=binding: ${this.changingThisBreaksApplicationSecurity} (see https://g.co/ng/security#xss)`}}class jc extends Yl{getTypeName(){return"HTML"}}class yf extends Yl{getTypeName(){return"Style"}}class Hd extends Yl{getTypeName(){return"Script"}}class d_ extends Yl{getTypeName(){return"URL"}}class ah extends Yl{getTypeName(){return"ResourceURL"}}function Rc(c){return c instanceof Yl?c.changingThisBreaksApplicationSecurity:c}function Xd(c,d){const m=Bd(c);if(null!=m&&m!==d){if("ResourceURL"===m&&"URL"===d)return!0;throw new Error(`Required a safe ${d}, got a ${m} (see https://g.co/ng/security#xss)`)}return m===d}function Bd(c){return c instanceof Yl&&c.getTypeName()||null}function lh(c){return new jc(c)}function Hp(c){return new yf(c)}function dl(c){return new Hd(c)}function Bh(c){return new d_(c)}function wf(c){return new ah(c)}function Ed(c){const d=new Kl(c);return function up(){try{return!!(new window.DOMParser).parseFromString(lt(""),"text/html")}catch(c){return!1}}()?new ad(d):d}class ad{constructor(d){this.inertDocumentHelper=d}getInertBodyElement(d){d="<body><remove></remove>"+d;try{const m=(new window.DOMParser).parseFromString(lt(d),"text/html").body;return null===m?this.inertDocumentHelper.getInertBodyElement(d):(m.removeChild(m.firstChild),m)}catch(m){return null}}}class Kl{constructor(d){if(this.defaultDoc=d,this.inertDocument=this.defaultDoc.implementation.createHTMLDocument("sanitization-inert"),null==this.inertDocument.body){const m=this.inertDocument.createElement("html");this.inertDocument.appendChild(m);const A=this.inertDocument.createElement("body");m.appendChild(A)}}getInertBodyElement(d){const m=this.inertDocument.createElement("template");if("content"in m)return m.innerHTML=lt(d),m;const A=this.inertDocument.createElement("body");return A.innerHTML=lt(d),this.defaultDoc.documentMode&&this.stripCustomNsAttrs(A),A}stripCustomNsAttrs(d){const m=d.attributes;for(let k=m.length-1;0<k;k--){const me=m.item(k).name;("xmlns:ns1"===me||0===me.indexOf("ns1:"))&&d.removeAttribute(me)}let A=d.firstChild;for(;A;)A.nodeType===Node.ELEMENT_NODE&&this.stripCustomNsAttrs(A),A=A.nextSibling}}const ld=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^&:/?#]*(?:[/?#]|$))/gi,uh=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+\/]+=*$/i;function Pf(c){return(c=String(c)).match(ld)||c.match(uh)?c:"unsafe:"+c}function Bp(c){return(c=String(c)).split(",").map(d=>Pf(d.trim())).join(", ")}function Ef(c){const d={};for(const m of c.split(","))d[m]=!0;return d}function oc(...c){const d={};for(const m of c)for(const A in m)m.hasOwnProperty(A)&&(d[A]=!0);return d}const bd=Ef("area,br,col,hr,img,wbr"),Up=Ef("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),ch=Ef("rp,rt"),bf=oc(bd,oc(Up,Ef("address,article,aside,blockquote,caption,center,del,details,dialog,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,main,map,menu,nav,ol,pre,section,summary,table,ul")),oc(ch,Ef("a,abbr,acronym,audio,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,picture,q,ruby,rp,rt,s,samp,small,source,span,strike,strong,sub,sup,time,track,tt,u,var,video")),oc(ch,Up)),Sf=Ef("background,cite,href,itemtype,longdesc,poster,src,xlink:href"),Zf=Ef("srcset"),Au=oc(Sf,Zf,Ef("abbr,accesskey,align,alt,autoplay,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,controls,coords,datetime,default,dir,download,face,headers,height,hidden,hreflang,hspace,ismap,itemscope,itemprop,kind,label,lang,language,loop,media,muted,nohref,nowrap,open,preload,rel,rev,role,rows,rowspan,rules,scope,scrolling,shape,size,sizes,span,srclang,start,summary,tabindex,target,title,translate,type,usemap,valign,value,vspace,width"),Ef("aria-activedescendant,aria-atomic,aria-autocomplete,aria-busy,aria-checked,aria-colcount,aria-colindex,aria-colspan,aria-controls,aria-current,aria-describedby,aria-details,aria-disabled,aria-dropeffect,aria-errormessage,aria-expanded,aria-flowto,aria-grabbed,aria-haspopup,aria-hidden,aria-invalid,aria-keyshortcuts,aria-label,aria-labelledby,aria-level,aria-live,aria-modal,aria-multiline,aria-multiselectable,aria-orientation,aria-owns,aria-placeholder,aria-posinset,aria-pressed,aria-readonly,aria-relevant,aria-required,aria-roledescription,aria-rowcount,aria-rowindex,aria-rowspan,aria-selected,aria-setsize,aria-sort,aria-valuemax,aria-valuemin,aria-valuenow,aria-valuetext")),If=Ef("script,style,template");class Yh{constructor(){this.sanitizedSomething=!1,this.buf=[]}sanitizeChildren(d){let m=d.firstChild,A=!0;for(;m;)if(m.nodeType===Node.ELEMENT_NODE?A=this.startElement(m):m.nodeType===Node.TEXT_NODE?this.chars(m.nodeValue):this.sanitizedSomething=!0,A&&m.firstChild)m=m.firstChild;else for(;m;){m.nodeType===Node.ELEMENT_NODE&&this.endElement(m);let k=this.checkClobberedElement(m,m.nextSibling);if(k){m=k;break}m=this.checkClobberedElement(m,m.parentNode)}return this.buf.join("")}startElement(d){const m=d.nodeName.toLowerCase();if(!bf.hasOwnProperty(m))return this.sanitizedSomething=!0,!If.hasOwnProperty(m);this.buf.push("<"),this.buf.push(m);const A=d.attributes;for(let k=0;k<A.length;k++){const ee=A.item(k),me=ee.name,Ne=me.toLowerCase();if(!Au.hasOwnProperty(Ne)){this.sanitizedSomething=!0;continue}let Je=ee.value;Sf[Ne]&&(Je=Pf(Je)),Zf[Ne]&&(Je=Bp(Je)),this.buf.push(" ",me,'="',ph(Je),'"')}return this.buf.push(">"),!0}endElement(d){const m=d.nodeName.toLowerCase();bf.hasOwnProperty(m)&&!bd.hasOwnProperty(m)&&(this.buf.push("</"),this.buf.push(m),this.buf.push(">"))}chars(d){this.buf.push(ph(d))}checkClobberedElement(d,m){if(m&&(d.compareDocumentPosition(m)&Node.DOCUMENT_POSITION_CONTAINED_BY)===Node.DOCUMENT_POSITION_CONTAINED_BY)throw new Error(`Failed to sanitize html because the element is clobbered: ${d.outerHTML}`);return m}}const jh=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,p_=/([^\#-~ |!])/g;function ph(c){return c.replace(/&/g,"&amp;").replace(jh,function(d){return"&#"+(1024*(d.charCodeAt(0)-55296)+(d.charCodeAt(1)-56320)+65536)+";"}).replace(p_,function(d){return"&#"+d.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}let Yp;function Gh(c,d){let m=null;try{Yp=Yp||Ed(c);let A=d?String(d):"";m=Yp.getInertBodyElement(A);let k=5,ee=A;do{if(0===k)throw new Error("Failed to sanitize html because the input is unstable");k--,A=ee,ee=m.innerHTML,m=Yp.getInertBodyElement(A)}while(A!==ee);return lt((new Yh).sanitizeChildren(hh(m)||m))}finally{if(m){const A=hh(m)||m;for(;A.firstChild;)A.removeChild(A.firstChild)}}}function hh(c){return"content"in c&&function em(c){return c.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===c.nodeName}(c)?c.content:null}var Du=(()=>((Du=Du||{})[Du.NONE=0]="NONE",Du[Du.HTML=1]="HTML",Du[Du.STYLE=2]="STYLE",Du[Du.SCRIPT=3]="SCRIPT",Du[Du.URL=4]="URL",Du[Du.RESOURCE_URL=5]="RESOURCE_URL",Du))();function Vh(c){const d=Cd();return d?Da(d.sanitize(Du.HTML,c)||""):Xd(c,"HTML")?Da(Rc(c)):Gh(Ol(),re(c))}function Kd(c){const d=Cd();return d?d.sanitize(Du.URL,c)||"":Xd(c,"URL")?Rc(c):Pf(re(c))}function h_(c){const d=Cd();if(d)return Dl(d.sanitize(Du.RESOURCE_URL,c)||"");if(Xd(c,"ResourceURL"))return Dl(Rc(c));throw new q(904,"")}function Cd(){const c=Yi();return c&&c[12]}const Jh="__ngContext__";function sc(c,d){c[Jh]=d}function zf(c){const d=function qd(c){return c[Jh]||null}(c);return d?Array.isArray(d)?d:d.lView:null}function qh(c){return c.ngOriginalError}function yh(c,...d){c.error(...d)}class Cp{constructor(){this._console=console}handleError(d){const m=this._findOriginalError(d),A=function Wf(c){return c&&c.ngErrorLogger||yh}(d);A(this._console,"ERROR",d),m&&A(this._console,"ORIGINAL ERROR",m)}_findOriginalError(d){let m=d&&qh(d);for(;m&&qh(m);)m=qh(m);return m||null}}const bh=/^>|^->|<!--|-->|--!>|<!-$/g,da=/(<|>)/;const Sh=(()=>("undefined"!=typeof requestAnimationFrame&&requestAnimationFrame||setTimeout).bind(vr))();function Lf(c){return c.ownerDocument.defaultView}function zu(c){return c.ownerDocument.body}function tf(c){return c instanceof Function?c():c}var Md=(()=>((Md=Md||{})[Md.Important=1]="Important",Md[Md.DashCase=2]="DashCase",Md))();let dp;function Bu(c,d){return dp(c,d)}function kf(c){const d=c[3];return ma(d)?d[3]:d}function nf(c){return Ch(c[13])}function rf(c){return Ch(c[4])}function Ch(c){for(;null!==c&&!ma(c);)c=c[4];return c}function ud(c,d,m,A,k){if(null!=A){let ee,me=!1;ma(A)?ee=A:es(A)&&(me=!0,A=A[0]);const Ne=pt(A);0===c&&null!==m?null==k?Wp(d,m,Ne):ep(d,m,Ne,k||null,!0):1===c&&null!==m?ep(d,m,Ne,k||null,!0):2===c?Rp(d,Ne,me):3===c&&d.destroyNode(Ne),null!=ee&&function B_(c,d,m,A,k){const ee=m[7];ee!==pt(m)&&ud(d,c,A,ee,k);for(let Ne=10;Ne<m.length;Ne++){const Je=m[Ne];Jp(Je[1],Je,c,d,A,ee)}}(d,c,ee,m,k)}}function Mh(c,d){return Ya(c)?c.createText(d):c.createTextNode(d)}function fp(c,d,m){Ya(c)?c.setValue(d,m):d.textContent=m}function Oh(c,d){return c.createComment(function $u(c){return c.replace(bh,d=>d.replace(da,"\u200b$1\u200b"))}(d))}function Gc(c,d,m){if(Ya(c))return c.createElement(d,m);{const A=null!==m?function Mc(c){const d=c.toLowerCase();return"svg"===d?"http://www.w3.org/2000/svg":"math"===d?"http://www.w3.org/1998/MathML/":null}(m):null;return null===A?c.createElement(d):c.createElementNS(A,d)}}function n_(c,d){const m=c[9],A=m.indexOf(d),k=d[3];1024&d[2]&&(d[2]&=-1025,ot(k,-1)),m.splice(A,1)}function r_(c,d){if(c.length<=10)return;const m=10+d,A=c[m];if(A){const k=A[17];null!==k&&k!==c&&n_(k,A),d>0&&(c[m-1][4]=A[4]);const ee=nc(c,10+d);!function Xf(c,d){Jp(c,d,d[11],2,null,null),d[0]=null,d[6]=null}(A[1],A);const me=ee[19];null!==me&&me.detachView(ee[1]),A[3]=null,A[4]=null,A[2]&=-129}return A}function Ap(c,d){if(!(256&d[2])){const m=d[11];Ya(m)&&m.destroyNode&&Jp(c,d,m,3,null,null),function Od(c){let d=c[13];if(!d)return Zp(c[1],c);for(;d;){let m=null;if(es(d))m=d[13];else{const A=d[10];A&&(m=A)}if(!m){for(;d&&!d[4]&&d!==c;)es(d)&&Zp(d[1],d),d=d[3];null===d&&(d=c),es(d)&&Zp(d[1],d),m=d&&d[4]}d=m}}(d)}}function Zp(c,d){if(!(256&d[2])){d[2]&=-129,d[2]|=256,function qf(c,d){let m;if(null!=c&&null!=(m=c.destroyHooks))for(let A=0;A<m.length;A+=2){const k=d[m[A]];if(!(k instanceof La)){const ee=m[A+1];if(Array.isArray(ee))for(let me=0;me<ee.length;me+=2){const Ne=k[ee[me]],Je=ee[me+1];try{Je.call(Ne)}finally{}}else try{ee.call(k)}finally{}}}}(c,d),function sf(c,d){const m=c.cleanup,A=d[7];let k=-1;if(null!==m)for(let ee=0;ee<m.length-1;ee+=2)if("string"==typeof m[ee]){const me=m[ee+1],Ne="function"==typeof me?me(d):pt(d[me]),Je=A[k=m[ee+2]],kt=m[ee+3];"boolean"==typeof kt?Ne.removeEventListener(m[ee],Je,kt):kt>=0?A[k=kt]():A[k=-kt].unsubscribe(),ee+=2}else{const me=A[k=m[ee+1]];m[ee].call(me)}if(null!==A){for(let ee=k+1;ee<A.length;ee++)A[ee]();d[7]=null}}(c,d),1===d[1].type&&Ya(d[11])&&d[11].destroy();const m=d[17];if(null!==m&&ma(d[3])){m!==d[3]&&n_(m,d);const A=d[19];null!==A&&A.detachView(c)}}}function zp(c,d,m){return v_(c,d.parent,m)}function v_(c,d,m){let A=d;for(;null!==A&&40&A.type;)A=(d=A).parent;if(null===A)return m[0];if(2&A.flags){const k=c.data[A.directiveStart].encapsulation;if(k===Xn.None||k===Xn.Emulated)return null}return wi(A,m)}function ep(c,d,m,A,k){Ya(c)?c.insertBefore(d,m,A,k):d.insertBefore(m,A,k)}function Wp(c,d,m){Ya(c)?c.appendChild(d,m):d.appendChild(m)}function y_(c,d,m,A,k){null!==A?ep(c,d,m,A,k):Wp(c,d,m)}function Ah(c,d){return Ya(c)?c.parentNode(d):d.parentNode}function $f(c,d,m){return b_(c,d,m)}function $_(c,d,m){return 40&c.type?wi(c,m):null}let Mf,b_=$_;function H_(c,d){b_=c,Mf=d}function tp(c,d,m,A){const k=zp(c,A,d),ee=d[11],Ne=$f(A.parent||d[6],A,d);if(null!=k)if(Array.isArray(m))for(let Je=0;Je<m.length;Je++)y_(ee,k,m[Je],Ne,!1);else y_(ee,k,m,Ne,!1);void 0!==Mf&&Mf(ee,A,d,m,k)}function Dp(c,d){if(null!==d){const m=d.type;if(3&m)return wi(d,c);if(4&m)return Ud(-1,c[d.index]);if(8&m){const A=d.child;if(null!==A)return Dp(c,A);{const k=c[d.index];return ma(k)?Ud(-1,k):pt(k)}}if(32&m)return Bu(d,c)()||pt(c[d.index]);{const A=xp(c,d);return null!==A?Array.isArray(A)?A[0]:Dp(kf(c[16]),A):Dp(c,d.next)}}return null}function xp(c,d){return null!==d?c[16][6].projection[d.projection]:null}function Ud(c,d){const m=10+c+1;if(m<d.length){const A=d[m],k=A[1].firstChild;if(null!==k)return Dp(A,k)}return d[7]}function Rp(c,d,m){const A=Ah(c,d);A&&function nm(c,d,m,A){Ya(c)?c.removeChild(d,m,A):d.removeChild(m)}(c,A,d,m)}function i_(c,d,m,A,k,ee,me){for(;null!=m;){const Ne=A[m.index],Je=m.type;if(me&&0===d&&(Ne&&sc(pt(Ne),A),m.flags|=4),64!=(64&m.flags))if(8&Je)i_(c,d,m.child,A,k,ee,!1),ud(d,c,k,Ne,ee);else if(32&Je){const kt=Bu(m,A);let en;for(;en=kt();)ud(d,c,k,en,ee);ud(d,c,k,Ne,ee)}else 16&Je?Ad(c,d,A,m,k,ee):ud(d,c,k,Ne,ee);m=me?m.projectionNext:m.next}}function Jp(c,d,m,A,k,ee){i_(m,A,c.firstChild,d,k,ee,!1)}function Ad(c,d,m,A,k,ee){const me=m[16],Je=me[6].projection[A.projection];if(Array.isArray(Je))for(let kt=0;kt<Je.length;kt++)ud(d,c,k,Je[kt],ee);else i_(c,d,Je,me[3],k,ee,!0)}function hp(c,d,m){Ya(c)?c.setAttribute(d,"style",m):d.style.cssText=m}function Dh(c,d,m){Ya(c)?""===m?c.removeAttribute(d,"class"):c.setAttribute(d,"class",m):d.className=m}function Vc(c,d,m){let A=c.length;for(;;){const k=c.indexOf(d,m);if(-1===k)return k;if(0===k||c.charCodeAt(k-1)<=32){const ee=d.length;if(k+ee===A||c.charCodeAt(k+ee)<=32)return k}m=k+1}}const T_="ng-template";function xh(c,d,m){let A=0;for(;A<c.length;){let k=c[A++];if(m&&"class"===k){if(k=c[A],-1!==Vc(k.toLowerCase(),d,0))return!0}else if(1===k){for(;A<c.length&&"string"==typeof(k=c[A++]);)if(k.toLowerCase()===d)return!0;return!1}}return!1}function I(c){return 4===c.type&&c.value!==T_}function ne(c,d,m){return d===(4!==c.type||m?c.value:T_)}function T(c,d,m){let A=4;const k=c.attrs||[],ee=function yr(c){for(let d=0;d<c.length;d++)if(En(c[d]))return d;return c.length}(k);let me=!1;for(let Ne=0;Ne<d.length;Ne++){const Je=d[Ne];if("number"!=typeof Je){if(!me)if(4&A){if(A=2|1&A,""!==Je&&!ne(c,Je,m)||""===Je&&1===d.length){if(z(A))return!1;me=!0}}else{const kt=8&A?Je:d[++Ne];if(8&A&&null!==c.attrs){if(!xh(c.attrs,kt,m)){if(z(A))return!1;me=!0}continue}const Ln=Me(8&A?"class":Je,k,I(c),m);if(-1===Ln){if(z(A))return!1;me=!0;continue}if(""!==kt){let Or;Or=Ln>ee?"":k[Ln+1].toLowerCase();const ni=8&A?Or:null;if(ni&&-1!==Vc(ni,kt,0)||2&A&&kt!==Or){if(z(A))return!1;me=!0}}}}else{if(!me&&!z(A)&&!z(Je))return!1;if(me&&z(Je))continue;me=!1,A=Je|1&A}}return z(A)||me}function z(c){return 0==(1&c)}function Me(c,d,m,A){if(null===d)return-1;let k=0;if(A||!m){let ee=!1;for(;k<d.length;){const me=d[k];if(me===c)return k;if(3===me||6===me)ee=!0;else{if(1===me||2===me){let Ne=d[++k];for(;"string"==typeof Ne;)Ne=d[++k];continue}if(4===me)break;if(0===me){k+=4;continue}}k+=ee?1:2}return-1}return function Nr(c,d){let m=c.indexOf(4);if(m>-1)for(m++;m<c.length;){const A=c[m];if("number"==typeof A)return-1;if(A===d)return m;m++}return-1}(d,c)}function Ke(c,d,m=!1){for(let A=0;A<d.length;A++)if(T(c,d[A],m))return!0;return!1}function vi(c,d){e:for(let m=0;m<d.length;m++){const A=d[m];if(c.length===A.length){for(let k=0;k<c.length;k++)if(c[k]!==A[k])continue e;return!0}}return!1}function di(c,d){return c?":not("+d.trim()+")":d}function ts(c){let d=c[0],m=1,A=2,k="",ee=!1;for(;m<c.length;){let me=c[m];if("string"==typeof me)if(2&A){const Ne=c[++m];k+="["+me+(Ne.length>0?'="'+Ne+'"':"")+"]"}else 8&A?k+="."+me:4&A&&(k+=" "+me);else""!==k&&!z(me)&&(d+=di(ee,k),k=""),A=me,ee=ee||!z(A);m++}return""!==k&&(d+=di(ee,k)),d}const jo={};function ia(c){y(aa(),Yi(),Yn()+c,!1)}function y(c,d,m,A){if(!A)if(3==(3&d[2])){const ee=c.preOrderCheckHooks;null!==ee&&Pu(d,ee,m)}else{const ee=c.preOrderHooks;null!==ee&&Su(d,ee,0,m)}Rr(m)}function Y(c,d){return c<<17|d<<2}function Ee(c){return c>>17&32767}function tn(c){return 2|c}function Tn(c){return(131068&c)>>2}function ar(c,d){return-131069&c|d<<2}function Ho(c){return 1|c}function tg(c,d){const m=c.contentQueries;if(null!==m)for(let A=0;A<m.length;A+=2){const k=m[A],ee=m[A+1];if(-1!==ee){const me=c.data[ee];ct(k),me.contentQueries(2,d[ee],ee)}}}function lm(c,d,m,A,k,ee,me,Ne,Je,kt){const en=d.blueprint.slice();return en[0]=k,en[2]=140|A,mt(en),en[3]=en[15]=c,en[8]=m,en[10]=me||c&&c[10],en[11]=Ne||c&&c[11],en[12]=Je||c&&c[12]||null,en[9]=kt||c&&c[9]||null,en[6]=ee,en[16]=2==d.type?c[16]:en,en}function C_(c,d,m,A,k){let ee=c.data[d];if(null===ee)ee=Mm(c,d,m,A,k),function wu(){return je.lFrame.inI18n}()&&(ee.flags|=64);else if(64&ee.type){ee.type=m,ee.value=A,ee.attrs=k;const me=Sl();ee.injectorIndex=null===me?-1:me.injectorIndex}return lu(ee,!0),ee}function Mm(c,d,m,A,k){const ee=qu(),me=Eu(),Je=c.data[d]=function Dg(c,d,m,A,k,ee){return{type:m,index:A,insertBeforeIndex:null,injectorIndex:d?d.injectorIndex:-1,directiveStart:-1,directiveEnd:-1,directiveStylingLast:-1,propertyBindings:null,flags:0,providerIndexes:0,value:k,attrs:ee,mergedAttrs:null,localNames:null,initialInputs:void 0,inputs:null,outputs:null,tViews:null,next:null,projectionNext:null,child:null,parent:d,projection:null,styles:null,stylesWithoutHost:null,residualStyles:void 0,classes:null,classesWithoutHost:null,residualClasses:void 0,classBindings:0,styleBindings:0}}(0,me?ee:ee&&ee.parent,m,d,A,k);return null===c.firstChild&&(c.firstChild=Je),null!==ee&&(me?null==ee.child&&null!==Je.parent&&(ee.child=Je):null===ee.next&&(ee.next=Je)),Je}function Rh(c,d,m,A){if(0===m)return-1;const k=d.length;for(let ee=0;ee<m;ee++)d.push(A),c.blueprint.push(A),c.data.push(null);return k}function Y_(c,d,m){_n(d);try{const A=c.viewQuery;null!==A&&Am(1,A,m);const k=c.template;null!==k&&um(c,d,k,1,m),c.firstCreatePass&&(c.firstCreatePass=!1),c.staticContentQueries&&tg(c,d),c.staticViewQueries&&Am(2,c.viewQuery,m);const ee=c.components;null!==ee&&function Cm(c,d){for(let m=0;m<d.length;m++)t1(c,d[m])}(d,ee)}catch(A){throw c.firstCreatePass&&(c.incompleteFirstPass=!0,c.firstCreatePass=!1),A}finally{d[2]&=-5,Ci()}}function M_(c,d,m,A){const k=d[2];if(256!=(256&k)){_n(d);try{mt(d),function nd(c){return je.lFrame.bindingIndex=c}(c.bindingStartIndex),null!==m&&um(c,d,m,2,A);const me=3==(3&k);if(me){const kt=c.preOrderCheckHooks;null!==kt&&Pu(d,kt,null)}else{const kt=c.preOrderHooks;null!==kt&&Su(d,kt,0,null),Zd(d,0)}if(function hc(c){for(let d=nf(c);null!==d;d=rf(d)){if(!d[2])continue;const m=d[9];for(let A=0;A<m.length;A++){const k=m[A],ee=k[3];0==(1024&k[2])&&ot(ee,1),k[2]|=1024}}}(d),function Wu(c){for(let d=nf(c);null!==d;d=rf(d))for(let m=10;m<d.length;m++){const A=d[m],k=A[1];Ka(A)&&M_(k,A,k.template,A[8])}}(d),null!==c.contentQueries&&tg(c,d),me){const kt=c.contentCheckHooks;null!==kt&&Pu(d,kt)}else{const kt=c.contentHooks;null!==kt&&Su(d,kt,1),Zd(d,1)}!function wp(c,d){const m=c.hostBindingOpCodes;if(null!==m)try{for(let A=0;A<m.length;A++){const k=m[A];if(k<0)Rr(~k);else{const ee=k,me=m[++A],Ne=m[++A];Io(me,ee),Ne(2,d[ee])}}}finally{Rr(-1)}}(c,d);const Ne=c.components;null!==Ne&&function ov(c,d){for(let m=0;m<d.length;m++)e1(c,d[m])}(d,Ne);const Je=c.viewQuery;if(null!==Je&&Am(2,Je,A),me){const kt=c.viewCheckHooks;null!==kt&&Pu(d,kt)}else{const kt=c.viewHooks;null!==kt&&Su(d,kt,2),Zd(d,2)}!0===c.firstUpdatePass&&(c.firstUpdatePass=!1),d[2]&=-73,1024&d[2]&&(d[2]&=-1025,ot(d[3],-1))}finally{Ci()}}}function Mg(c,d,m,A){const k=d[10],me=Fo(d);try{!me&&k.begin&&k.begin(),me&&Y_(c,d,A),M_(c,d,m,A)}finally{!me&&k.end&&k.end()}}function um(c,d,m,A,k){const ee=Yn(),me=2&A;try{Rr(-1),me&&d.length>20&&y(c,d,20,!1),m(A,k)}finally{Rr(ee)}}function Og(c,d,m){if(Ea(d)){const k=d.directiveEnd;for(let ee=d.directiveStart;ee<k;ee++){const me=c.data[ee];me.contentQueries&&me.contentQueries(1,m[ee],ee)}}}function ng(c,d,m){!Ku()||(function hi(c,d,m,A){const k=m.directiveStart,ee=m.directiveEnd;c.firstCreatePass||ha(m,d),sc(A,d);const me=m.initialInputs;for(let Ne=k;Ne<ee;Ne++){const Je=c.data[Ne],kt=Ra(Je);kt&&lf(d,m,Je);const en=cu(d,c,Ne,m);sc(en,d),null!==me&&G_(0,Ne-k,en,Je,0,me),kt&&(ws(m.index,d)[8]=en)}}(c,d,m,wi(m,d)),128==(128&m.flags)&&function ns(c,d,m){const A=m.directiveStart,k=m.directiveEnd,me=m.index,Ne=function fu(){return je.lFrame.currentDirectiveIndex}();try{Rr(me);for(let Je=A;Je<k;Je++){const kt=c.data[Je],en=d[Je];Sr(Je),(null!==kt.hostBindings||0!==kt.hostVars||null!==kt.hostAttrs)&&zo(kt,en)}}finally{Rr(-1),Sr(Ne)}}(c,d,m))}function rg(c,d,m=wi){const A=d.localNames;if(null!==A){let k=d.index+1;for(let ee=0;ee<A.length;ee+=2){const me=A[ee+1],Ne=-1===me?m(d,c):c[me];c[k++]=Ne}}}function j_(c){const d=c.tView;return null===d||d.incompleteFirstPass?c.tView=Qp(1,null,c.template,c.decls,c.vars,c.directiveDefs,c.pipeDefs,c.viewQuery,c.schemas,c.consts):d}function Qp(c,d,m,A,k,ee,me,Ne,Je,kt){const en=20+A,Ln=en+k,Or=function O_(c,d){const m=[];for(let A=0;A<d;A++)m.push(A<c?null:jo);return m}(en,Ln),ni="function"==typeof kt?kt():kt;return Or[1]={type:c,blueprint:Or,template:m,queries:null,viewQuery:Ne,declTNode:d,data:Or.slice().fill(null,en),bindingStartIndex:en,expandoStartIndex:Ln,hostBindingOpCodes:null,firstCreatePass:!0,firstUpdatePass:!0,staticViewQueries:!1,staticContentQueries:!1,preOrderHooks:null,preOrderCheckHooks:null,contentHooks:null,contentCheckHooks:null,viewHooks:null,viewCheckHooks:null,destroyHooks:null,cleanup:null,contentQueries:null,components:null,directiveRegistry:"function"==typeof ee?ee():ee,pipeRegistry:"function"==typeof me?me():me,firstChild:null,schemas:Je,consts:ni,incompleteFirstPass:!1}}function Om(c,d,m,A){const k=n1(d);null===m?k.push(A):(k.push(m),c.firstCreatePass&&r1(c).push(A,k.length-1))}function ig(c,d,m){for(let A in c)if(c.hasOwnProperty(A)){const k=c[A];(m=null===m?{}:m).hasOwnProperty(A)?m[A].push(d,k):m[A]=[d,k]}return m}function Bf(c,d,m,A,k,ee,me,Ne){const Je=wi(d,m);let en,kt=d.inputs;!Ne&&null!=kt&&(en=kt[A])?(s1(c,m,en,A,k),fa(d)&&function av(c,d){const m=ws(d,c);16&m[2]||(m[2]|=64)}(m,d.index)):3&d.type&&(A=function sv(c){return"class"===c?"className":"for"===c?"htmlFor":"formaction"===c?"formAction":"innerHtml"===c?"innerHTML":"readonly"===c?"readOnly":"tabindex"===c?"tabIndex":c}(A),k=null!=me?me(k,d.value||"",A):k,Ya(ee)?ee.setProperty(Je,A,k):pa(A)||(Je.setProperty?Je.setProperty(A,k):Je[A]=k))}function Zt(c,d,m,A){let k=!1;if(Ku()){const ee=function As(c,d,m){const A=c.directiveRegistry;let k=null;if(A)for(let ee=0;ee<A.length;ee++){const me=A[ee];Ke(m,me.selectors,!1)&&(k||(k=[]),ka(ha(m,d),c,me.type),Ra(me)?(ml(c,m),k.unshift(me)):k.push(me))}return k}(c,d,m),me=null===A?null:{"":-1};if(null!==ee){k=!0,xu(m,c.data.length,ee.length);for(let en=0;en<ee.length;en++){const Ln=ee[en];Ln.providersResolver&&Ln.providersResolver(Ln)}let Ne=!1,Je=!1,kt=Rh(c,d,ee.length,null);for(let en=0;en<ee.length;en++){const Ln=ee[en];m.mergedAttrs=rd(m.mergedAttrs,Ln.hostAttrs),Dd(c,m,d,kt,Ln),Xl(kt,Ln,me),null!==Ln.contentQueries&&(m.flags|=8),(null!==Ln.hostBindings||null!==Ln.hostAttrs||0!==Ln.hostVars)&&(m.flags|=128);const Or=Ln.type.prototype;!Ne&&(Or.ngOnChanges||Or.ngOnInit||Or.ngDoCheck)&&((c.preOrderHooks||(c.preOrderHooks=[])).push(m.index),Ne=!0),!Je&&(Or.ngOnChanges||Or.ngDoCheck)&&((c.preOrderCheckHooks||(c.preOrderCheckHooks=[])).push(m.index),Je=!0),kt++}!function qv(c,d){const A=d.directiveEnd,k=c.data,ee=d.attrs,me=[];let Ne=null,Je=null;for(let kt=d.directiveStart;kt<A;kt++){const en=k[kt],Ln=en.inputs,Or=null===ee||I(d)?null:uf(Ln,ee);me.push(Or),Ne=ig(Ln,kt,Ne),Je=ig(en.outputs,kt,Je)}null!==Ne&&(Ne.hasOwnProperty("class")&&(d.flags|=16),Ne.hasOwnProperty("style")&&(d.flags|=32)),d.initialInputs=me,d.inputs=Ne,d.outputs=Je}(c,m)}me&&function au(c,d,m){if(d){const A=c.localNames=[];for(let k=0;k<d.length;k+=2){const ee=m[d[k+1]];if(null==ee)throw new q(-301,!1);A.push(d[k],ee)}}}(m,A,me)}return m.mergedAttrs=rd(m.mergedAttrs,m.attrs),k}function rr(c,d,m,A,k,ee){const me=ee.hostBindings;if(me){let Ne=c.hostBindingOpCodes;null===Ne&&(Ne=c.hostBindingOpCodes=[]);const Je=~d.index;(function xr(c){let d=c.length;for(;d>0;){const m=c[--d];if("number"==typeof m&&m<0)return m}return 0})(Ne)!=Je&&Ne.push(Je),Ne.push(A,k,me)}}function zo(c,d){null!==c.hostBindings&&c.hostBindings(1,d)}function ml(c,d){d.flags|=2,(c.components||(c.components=[])).push(d.index)}function Xl(c,d,m){if(m){if(d.exportAs)for(let A=0;A<d.exportAs.length;A++)m[d.exportAs[A]]=c;Ra(d)&&(m[""]=c)}}function xu(c,d,m){c.flags|=1,c.directiveStart=d,c.directiveEnd=d+m,c.providerIndexes=d}function Dd(c,d,m,A,k){c.data[A]=k;const ee=k.factory||(k.factory=Oi(k.type)),me=new La(ee,Ra(k),null);c.blueprint[A]=me,m[A]=me,rr(c,d,0,A,Rh(c,m,k.hostVars,jo),k)}function lf(c,d,m){const A=wi(d,c),k=j_(m),ee=c[10],me=xg(c,lm(c,k,null,m.onPush?64:16,A,d,ee,ee.createRenderer(A,m),null,null));c[d.index]=me}function s_(c,d,m,A,k,ee,me){if(null==ee)Ya(c)?c.removeAttribute(d,k,m):d.removeAttribute(k);else{const Ne=null==me?re(ee):me(ee,A||"",k);Ya(c)?c.setAttribute(d,k,Ne,m):m?d.setAttributeNS(m,k,Ne):d.setAttribute(k,Ne)}}function G_(c,d,m,A,k,ee){const me=ee[d];if(null!==me){const Ne=A.setInput;for(let Je=0;Je<me.length;){const kt=me[Je++],en=me[Je++],Ln=me[Je++];null!==Ne?A.setInput(m,Ln,kt,en):m[en]=Ln}}}function uf(c,d){let m=null,A=0;for(;A<d.length;){const k=d[A];if(0!==k)if(5!==k){if("number"==typeof k)break;c.hasOwnProperty(k)&&(null===m&&(m=[]),m.push(k,c[k],d[A+1])),A+=2}else A+=2;else A+=4}return m}function _p(c,d,m,A){return new Array(c,!0,!1,d,null,0,A,m,null,null)}function e1(c,d){const m=ws(d,c);if(Ka(m)){const A=m[1];80&m[2]?M_(A,m,A.template,m[8]):m[5]>0&&uv(m)}}function uv(c){for(let A=nf(c);null!==A;A=rf(A))for(let k=10;k<A.length;k++){const ee=A[k];if(1024&ee[2]){const me=ee[1];M_(me,ee,me.template,ee[8])}else ee[5]>0&&uv(ee)}const m=c[1].components;if(null!==m)for(let A=0;A<m.length;A++){const k=ws(m[A],c);Ka(k)&&k[5]>0&&uv(k)}}function t1(c,d){const m=ws(d,c),A=m[1];(function R0(c,d){for(let m=d.length;m<c.blueprint.length;m++)d.push(c.blueprint[m])})(A,m),Y_(A,m,m[8])}function xg(c,d){return c[13]?c[14][4]=d:c[13]=d,c[14]=d,d}function cv(c){for(;c;){c[2]|=64;const d=kf(c);if(pl(c)&&!d)return c;c=d}return null}function wg(c){!function Rg(c){for(let d=0;d<c.components.length;d++){const m=c.components[d],A=zf(m),k=A[1];Mg(k,A,k.template,m)}}(c[8])}function Am(c,d,m){ct(0),d(c,m)}const Dm=(()=>Promise.resolve(null))();function n1(c){return c[7]||(c[7]=[])}function r1(c){return c.cleanup||(c.cleanup=[])}function o1(c,d){const m=c[9],A=m?m.get(Cp,null):null;A&&A.handleError(d)}function s1(c,d,m,A,k){for(let ee=0;ee<m.length;){const me=m[ee++],Ne=m[ee++],Je=d[me],kt=c.data[me];null!==kt.setInput?kt.setInput(Je,k,A,Ne):Je[Ne]=k}}function a_(c,d,m){const A=oi(d,c);fp(c[11],A,m)}function Kp(c,d,m){let A=m?c.styles:null,k=m?c.classes:null,ee=0;if(null!==d)for(let me=0;me<d.length;me++){const Ne=d[me];"number"==typeof Ne?ee=Ne:1==ee?k=M(k,Ne):2==ee&&(A=M(A,Ne+": "+d[++me]+";"))}m?c.styles=A:c.stylesWithoutHost=A,m?c.classes=k:c.classesWithoutHost=k}const Pg=new qa("INJECTOR",-1);class xm{get(d,m=Jd){if(m===Jd){const A=new Error(`NullInjectorError: No provider for ${S(d)}!`);throw A.name="NullInjectorError",A}return m}}const gu=new qa("Set Injector scope."),og={},l1={};let Rm;function u1(){return void 0===Rm&&(Rm=new xm),Rm}function c1(c,d=null,m=null,A){const k=d1(c,d,m,A);return k._resolveInjectorDefTypes(),k}function d1(c,d=null,m=null,A){return new N0(c,m,d||u1(),A)}class N0{constructor(d,m,A,k=null){this.parent=A,this.records=new Map,this.injectorDefTypes=new Set,this.onDestroy=new Set,this._destroyed=!1;const ee=[];m&&Fu(m,Ne=>this.processProvider(Ne,d,m)),Fu([d],Ne=>this.processInjectorType(Ne,[],ee)),this.records.set(Pg,wm(void 0,this));const me=this.records.get(gu);this.scope=null!=me?me.value:null,this.source=k||("object"==typeof d?null:S(d))}get destroyed(){return this._destroyed}destroy(){this.assertNotDestroyed(),this._destroyed=!0;try{this.onDestroy.forEach(d=>d.ngOnDestroy())}finally{this.records.clear(),this.onDestroy.clear(),this.injectorDefTypes.clear()}}get(d,m=Jd,A=_r.Default){this.assertNotDestroyed();const k=X(this),ee=fi(void 0);try{if(!(A&_r.SkipSelf)){let Ne=this.records.get(d);if(void 0===Ne){const Je=function H0(c){return"function"==typeof c||"object"==typeof c&&c instanceof qa}(d)&&Fn(d);Ne=Je&&this.injectableDefInScope(Je)?wm(dv(d),og):null,this.records.set(d,Ne)}if(null!=Ne)return this.hydrate(d,Ne)}return(A&_r.Self?u1():this.parent).get(d,m=A&_r.Optional&&m===Jd?null:m)}catch(me){if("NullInjectorError"===me.name){if((me[Nl]=me[Nl]||[]).unshift(S(d)),k)throw me;return function fn(c,d,m,A){const k=c[Nl];throw d[E]&&k.unshift(d[E]),c.message=function jn(c,d,m,A=null){c=c&&"\n"===c.charAt(0)&&"\u0275"==c.charAt(1)?c.substr(2):c;let k=S(d);if(Array.isArray(d))k=d.map(S).join(" -> ");else if("object"==typeof d){let ee=[];for(let me in d)if(d.hasOwnProperty(me)){let Ne=d[me];ee.push(me+":"+("string"==typeof Ne?JSON.stringify(Ne):S(Ne)))}k=`{${ee.join(", ")}}`}return`${m}${A?"("+A+")":""}[${k}]: ${c.replace(ic,"\n  ")}`}("\n"+c.message,k,m,A),c.ngTokenPath=k,c[Nl]=null,c}(me,d,"R3InjectorError",this.source)}throw me}finally{fi(ee),X(k)}}_resolveInjectorDefTypes(){this.injectorDefTypes.forEach(d=>this.get(d))}toString(){const d=[];return this.records.forEach((A,k)=>d.push(S(k))),`R3Injector[${d.join(", ")}]`}assertNotDestroyed(){if(this._destroyed)throw new q(205,!1)}processInjectorType(d,m,A){if(!(d=B(d)))return!1;let k=hr(d);const ee=null==k&&d.ngModule||void 0,me=void 0===ee?d:ee,Ne=-1!==A.indexOf(me);if(void 0!==ee&&(k=hr(ee)),null==k)return!1;if(null!=k.imports&&!Ne){let en;A.push(me);try{Fu(k.imports,Ln=>{this.processInjectorType(Ln,m,A)&&(void 0===en&&(en=[]),en.push(Ln))})}finally{}if(void 0!==en)for(let Ln=0;Ln<en.length;Ln++){const{ngModule:Or,providers:ni}=en[Ln];Fu(ni,Wi=>this.processProvider(Wi,Or,ni||Wn))}}this.injectorDefTypes.add(me);const Je=Oi(me)||(()=>new me);this.records.set(me,wm(Je,og));const kt=k.providers;if(null!=kt&&!Ne){const en=d;Fu(kt,Ln=>this.processProvider(Ln,en,kt))}return void 0!==ee&&void 0!==d.providers}processProvider(d,m,A){let k=Pm(d=B(d))?d:B(d&&d.provide);const ee=function F0(c,d,m){return p1(c)?wm(void 0,c.useValue):wm(f1(c),og)}(d);if(Pm(d)||!0!==d.multi)this.records.get(k);else{let me=this.records.get(k);me||(me=wm(void 0,og,!0),me.factory=()=>nt(me.multi),this.records.set(k,me)),k=d,me.multi.push(d)}this.records.set(k,ee)}hydrate(d,m){return m.value===og&&(m.value=l1,m.value=m.factory()),"object"==typeof m.value&&m.value&&function pv(c){return null!==c&&"object"==typeof c&&"function"==typeof c.ngOnDestroy}(m.value)&&this.onDestroy.add(m.value),m.value}injectableDefInScope(d){if(!d.providedIn)return!1;const m=B(d.providedIn);return"string"==typeof m?"any"===m||m===this.scope:this.injectorDefTypes.has(m)}}function dv(c){const d=Fn(c),m=null!==d?d.factory:Oi(c);if(null!==m)return m;if(c instanceof qa)throw new q(204,!1);if(c instanceof Function)return function I0(c){const d=c.length;if(d>0)throw Aa(d,"?"),new q(204,!1);const m=function mi(c){const d=c&&(c[Br]||c[Hn]);if(d){const m=function ci(c){if(c.hasOwnProperty("name"))return c.name;const d=(""+c).match(/^function\s*([^\s(]+)/);return null===d?"":d[1]}(c);return console.warn(`DEPRECATED: DI is instantiating a token "${m}" that inherits its @Injectable decorator but does not provide one itself.\nThis will become an error in a future version of Angular. Please add @Injectable() to the "${m}" class.`),d}return null}(c);return null!==m?()=>m.factory(c):()=>new c}(c);throw new q(204,!1)}function f1(c,d,m){let A;if(Pm(c)){const k=B(c);return Oi(k)||dv(k)}if(p1(c))A=()=>B(c.useValue);else if(function k0(c){return!(!c||!c.useFactory)}(c))A=()=>c.useFactory(...nt(c.deps||[]));else if(function L0(c){return!(!c||!c.useExisting)}(c))A=()=>ve(B(c.useExisting));else{const k=B(c&&(c.useClass||c.provide));if(!function $0(c){return!!c.deps}(c))return Oi(k)||dv(k);A=()=>new k(...nt(c.deps))}return A}function wm(c,d,m=!1){return{factory:c,value:d,multi:m?[]:void 0}}function p1(c){return null!==c&&"object"==typeof c&&P in c}function Pm(c){return"function"==typeof c}let qp=(()=>{class c{static create(m,A){var k;if(Array.isArray(m))return c1({name:""},A,m,"");{const ee=null!==(k=m.name)&&void 0!==k?k:"";return c1({name:ee},m.parent,m.providers,ee)}}}return c.THROW_IF_NOT_FOUND=Jd,c.NULL=new xm,c.\u0275prov=xt({token:c,providedIn:"any",factory:()=>ve(Pg)}),c.__NG_ELEMENT_ID__=-1,c})();function E1(c,d){Ic(zf(c)[1],Es())}function _v(c){let d=function b1(c){return Object.getPrototypeOf(c.prototype).constructor}(c.type),m=!0;const A=[c];for(;d;){let k;if(Ra(c))k=d.\u0275cmp||d.\u0275dir;else{if(d.\u0275cmp)throw new q(903,"");k=d.\u0275dir}if(k){if(m){A.push(k);const me=c;me.inputs=fm(c.inputs),me.declaredInputs=fm(c.declaredInputs),me.outputs=fm(c.outputs);const Ne=k.hostBindings;Ne&&QE(c,Ne);const Je=k.viewQuery,kt=k.contentQueries;if(Je&&Nm(c,Je),kt&&V0(c,kt),g(c.inputs,k.inputs),g(c.declaredInputs,k.declaredInputs),g(c.outputs,k.outputs),Ra(k)&&k.data.animation){const en=c.data;en.animation=(en.animation||[]).concat(k.data.animation)}}const ee=k.features;if(ee)for(let me=0;me<ee.length;me++){const Ne=ee[me];Ne&&Ne.ngInherit&&Ne(c),Ne===_v&&(m=!1)}}d=Object.getPrototypeOf(d)}!function fd(c){let d=0,m=null;for(let A=c.length-1;A>=0;A--){const k=c[A];k.hostVars=d+=k.hostVars,k.hostAttrs=rd(k.hostAttrs,m=rd(m,k.hostAttrs))}}(A)}function fm(c){return c===Rn?{}:c===Wn?[]:c}function Nm(c,d){const m=c.viewQuery;c.viewQuery=m?(A,k)=>{d(A,k),m(A,k)}:d}function V0(c,d){const m=c.contentQueries;c.contentQueries=m?(A,k,ee)=>{d(A,k,ee),m(A,k,ee)}:d}function QE(c,d){const m=c.hostBindings;c.hostBindings=m?(A,k)=>{d(A,k),m(A,k)}:d}let mv=null;function pm(){if(!mv){const c=vr.Symbol;if(c&&c.iterator)mv=c.iterator;else{const d=Object.getOwnPropertyNames(Map.prototype);for(let m=0;m<d.length;++m){const A=d[m];"entries"!==A&&"size"!==A&&Map.prototype[A]===Map.prototype.entries&&(mv=A)}}}return mv}function Im(c){return!!gv(c)&&(Array.isArray(c)||!(c instanceof Map)&&pm()in c)}function gv(c){return null!==c&&("function"==typeof c||"object"==typeof c)}function u_(c,d,m){return c[d]=m}function sg(c,d){return c[d]}function Uf(c,d,m){return!Object.is(c[d],m)&&(c[d]=m,!0)}function eh(c,d,m,A){const k=Uf(c,d,m);return Uf(c,d+1,A)||k}function Lg(c,d,m,A,k){const ee=eh(c,d,m,A);return Uf(c,d+2,k)||ee}function th(c,d,m,A,k,ee){const me=eh(c,d,m,A);return eh(c,d+2,k,ee)||me}function vv(c,d,m,A){const k=Yi();return Uf(k,Uu(),d)&&(aa(),function cd(c,d,m,A,k,ee){const me=wi(c,d);s_(d[11],me,ee,c.value,m,A,k)}(br(),k,c,d,m,A)),vv}function hm(c,d,m,A){return Uf(c,Uu(),m)?d+re(m)+A:jo}function _m(c,d,m,A,k,ee){const Ne=eh(c,du(),m,k);return Yu(2),Ne?d+re(m)+A+re(k)+ee:jo}function R1(c,d,m,A,k,ee,me,Ne){const Je=Yi(),kt=aa(),en=c+20,Ln=kt.firstCreatePass?function yv(c,d,m,A,k,ee,me,Ne,Je){const kt=d.consts,en=C_(d,c,4,me||null,Bs(kt,Ne));Zt(d,m,en,Bs(kt,Je)),Ic(d,en);const Ln=en.tViews=Qp(2,en,A,k,ee,d.directiveRegistry,d.pipeRegistry,null,d.schemas,kt);return null!==d.queries&&(d.queries.template(d,en),Ln.queries=d.queries.embeddedTView(en)),en}(en,kt,Je,d,m,A,k,ee,me):kt.data[en];lu(Ln,!1);const Or=Je[11].createComment("");tp(kt,Je,Or,Ln),sc(Or,Je),xg(Je,Je[en]=_p(Or,Je,Or,Ln)),sa(Ln)&&ng(kt,Je,Ln),null!=me&&rg(Je,Ln,Ne)}function w1(c){return Os(function bu(){return je.lFrame.contextLView}(),20+c)}function ba(c,d=_r.Default){const m=Yi();return null===m?ve(c,d):ju(Es(),m,B(c),d)}function Rl(){throw new Error("invalid")}function Na(c,d,m){const A=Yi();return Uf(A,Uu(),d)&&Bf(aa(),br(),A,c,d,A[11],m,!1),Na}function Hl(c,d,m,A,k){const me=k?"class":"style";s1(c,m,d.inputs[me],me,A)}function Yf(c,d,m,A){const k=Yi(),ee=aa(),me=20+c,Ne=k[11],Je=k[me]=Gc(Ne,d,function Us(){return je.lFrame.currentNamespace}()),kt=ee.firstCreatePass?function ql(c,d,m,A,k,ee,me){const Ne=d.consts,kt=C_(d,c,2,k,Bs(Ne,ee));return Zt(d,m,kt,Bs(Ne,me)),null!==kt.attrs&&Kp(kt,kt.attrs,!1),null!==kt.mergedAttrs&&Kp(kt,kt.mergedAttrs,!0),null!==d.queries&&d.queries.elementStart(d,kt),kt}(me,ee,k,0,d,m,A):ee.data[me];lu(kt,!0);const en=kt.mergedAttrs;null!==en&&gc(Ne,Je,en);const Ln=kt.classes;null!==Ln&&Dh(Ne,Je,Ln);const Or=kt.styles;return null!==Or&&hp(Ne,Je,Or),64!=(64&kt.flags)&&tp(ee,k,Je,kt),0===function Jo(){return je.lFrame.elementDepthCount}()&&sc(Je,k),function ja(){je.lFrame.elementDepthCount++}(),sa(kt)&&(ng(ee,k,kt),Og(ee,kt,k)),null!==A&&rg(k,kt),Yf}function cf(){let c=Es();Eu()?iu():(c=c.parent,lu(c,!1));const d=c;!function El(){je.lFrame.elementDepthCount--}();const m=aa();return m.firstCreatePass&&(Ic(m,c),Ea(c)&&m.queries.elementEnd(c)),null!=d.classesWithoutHost&&function Ta(c){return 0!=(16&c.flags)}(d)&&Hl(m,d,Yi(),d.classesWithoutHost,!0),null!=d.stylesWithoutHost&&function Tl(c){return 0!=(32&c.flags)}(d)&&Hl(m,d,Yi(),d.stylesWithoutHost,!1),cf}function rp(c,d,m,A){return Yf(c,d,m,A),cf(),rp}function nh(c,d,m){const A=Yi(),k=aa(),ee=c+20,me=k.firstCreatePass?function Ph(c,d,m,A,k){const ee=d.consts,me=Bs(ee,A),Ne=C_(d,c,8,"ng-container",me);return null!==me&&Kp(Ne,me,!0),Zt(d,m,Ne,Bs(ee,k)),null!==d.queries&&d.queries.elementStart(d,Ne),Ne}(ee,k,A,d,m):k.data[ee];lu(me,!0);const Ne=A[ee]=A[11].createComment("");return tp(k,A,Ne,me),sc(Ne,A),sa(me)&&(ng(k,A,me),Og(k,me,A)),null!=m&&rg(A,me),nh}function ag(){let c=Es();const d=aa();return Eu()?iu():(c=c.parent,lu(c,!1)),d.firstCreatePass&&(Ic(d,c),Ea(c)&&d.queries.elementEnd(c)),ag}function iy(c,d,m){return nh(c,d,m),ag(),iy}function rb(){return Yi()}function oy(c){return!!c&&"function"==typeof c.then}function ib(c){return!!c&&"function"==typeof c.subscribe}const ob=ib;function sy(c,d,m,A){const k=Yi(),ee=aa(),me=Es();return function Mv(c,d,m,A,k,ee,me,Ne){const Je=sa(A),en=c.firstCreatePass&&r1(c),Ln=d[8],Or=n1(d);let ni=!0;if(3&A.type||Ne){const us=wi(A,d),Zs=Ne?Ne(us):us,_o=Or.length,ya=Ne?eu=>Ne(pt(eu[A.index])):A.index;if(Ya(m)){let eu=null;if(!Ne&&Je&&(eu=function mm(c,d,m,A){const k=c.cleanup;if(null!=k)for(let ee=0;ee<k.length-1;ee+=2){const me=k[ee];if(me===m&&k[ee+1]===A){const Ne=d[7],Je=k[ee+2];return Ne.length>Je?Ne[Je]:null}"string"==typeof me&&(ee+=2)}return null}(c,d,k,A.index)),null!==eu)(eu.__ngLastListenerFn__||eu).__ngNextListenerFn__=ee,eu.__ngLastListenerFn__=ee,ni=!1;else{ee=$1(A,d,Ln,ee,!1);const ac=m.listen(Zs,k,ee);Or.push(ee,ac),en&&en.push(k,ya,_o,_o+1)}}else ee=$1(A,d,Ln,ee,!0),Zs.addEventListener(k,ee,me),Or.push(ee),en&&en.push(k,ya,_o,me)}else ee=$1(A,d,Ln,ee,!1);const Wi=A.outputs;let Uo;if(ni&&null!==Wi&&(Uo=Wi[k])){const us=Uo.length;if(us)for(let Zs=0;Zs<us;Zs+=2){const rh=d[Uo[Zs]][Uo[Zs+1]].subscribe(ee),_g=Or.length;Or.push(ee,rh),en&&en.push(k,A.index,_g,-(_g+1))}}}(ee,k,k[11],me,c,d,!!m,A),sy}function k1(c,d,m,A){try{return!1!==m(A)}catch(k){return o1(c,k),!1}}function $1(c,d,m,A,k){return function ee(me){if(me===Function)return A;const Ne=2&c.flags?ws(c.index,d):d;0==(32&d[2])&&cv(Ne);let Je=k1(d,0,A,me),kt=ee.__ngNextListenerFn__;for(;kt;)Je=k1(d,0,kt,me)&&Je,kt=kt.__ngNextListenerFn__;return k&&!1===Je&&(me.preventDefault(),me.returnValue=!1),Je}}function lg(c=1){return function Vi(c){return(je.lFrame.contextLView=function Pr(c,d){for(;c>0;)d=d[15],c--;return d}(c,je.lFrame.contextLView))[8]}(c)}function DC(c,d){let m=null;const A=function gn(c){const d=c.attrs;if(null!=d){const m=d.indexOf(5);if(0==(1&m))return d[m+1]}return null}(c);for(let k=0;k<d.length;k++){const ee=d[k];if("*"!==ee){if(null===A?Ke(c,ee,!0):vi(A,ee))return k}else m=k}return m}function ab(c){const d=Yi()[16][6];if(!d.projection){const A=d.projection=Aa(c?c.length:1,null),k=A.slice();let ee=d.child;for(;null!==ee;){const me=c?DC(ee,c):0;null!==me&&(k[me]?k[me].projectionNext=ee:A[me]=ee,k[me]=ee),ee=ee.next}}}function H1(c,d=0,m){const A=Yi(),k=aa(),ee=C_(k,20+c,16,null,m||null);null===ee.projection&&(ee.projection=d),iu(),64!=(64&ee.flags)&&function S_(c,d,m){Ad(d[11],0,d,m,zp(c,m,d),$f(m.parent||d[6],m,d))}(k,A,ee)}function Ov(c,d,m){return B1(c,"",d,"",m),Ov}function B1(c,d,m,A,k){const ee=Yi(),me=hm(ee,d,m,A);return me!==jo&&Bf(aa(),br(),ee,c,me,ee[11],k,!1),B1}function ay(c,d,m,A,k,ee,me){const Ne=Yi(),Je=_m(Ne,d,m,A,k,ee);return Je!==jo&&Bf(aa(),br(),Ne,c,Je,Ne[11],me,!1),ay}function hb(c,d,m,A,k){const ee=c[m+1],me=null===d;let Ne=A?Ee(ee):Tn(ee),Je=!1;for(;0!==Ne&&(!1===Je||me);){const en=c[Ne+1];uy(c[Ne],d)&&(Je=!0,c[Ne+1]=A?Ho(en):tn(en)),Ne=A?Ee(en):Tn(en)}Je&&(c[m+1]=A?tn(ee):Ho(ee))}function uy(c,d){return null===c||null==d||(Array.isArray(c)?c[1]:c)===d||!(!Array.isArray(c)||"string"!=typeof d)&&ga(c,d)>=0}const Yd={textEnd:0,key:0,keyEnd:0,value:0,valueEnd:0};function _b(c){return c.substring(Yd.key,Yd.keyEnd)}function mb(c,d){const m=Yd.textEnd;return m===d?-1:(d=Yd.keyEnd=function IC(c,d,m){for(;d<m&&c.charCodeAt(d)>32;)d++;return d}(c,Yd.key=d,m),Ug(c,d,m))}function Ug(c,d,m){for(;d<m&&c.charCodeAt(d)<=32;)d++;return d}function cy(c,d,m){return x_(c,d,m,!1),cy}function dy(c,d){return x_(c,d,null,!0),dy}function Eb(c){R_($l,J_,c,!0)}function J_(c,d){for(let m=function PC(c){return function vb(c){Yd.key=0,Yd.keyEnd=0,Yd.value=0,Yd.valueEnd=0,Yd.textEnd=c.length}(c),mb(c,Ug(c,0,Yd.textEnd))}(d);m>=0;m=mb(d,m))$l(c,_b(d),!0)}function x_(c,d,m,A){const k=Yi(),ee=aa(),me=Yu(2);ee.firstUpdatePass&&Sb(ee,c,me,A),d!==jo&&Uf(k,me,d)&&Tb(ee,ee.data[Yn()],k,k[11],c,k[me+1]=function GC(c,d){return null==c||("string"==typeof d?c+=d:"object"==typeof c&&(c=S(Rc(c)))),c}(d,m),A,me)}function R_(c,d,m,A){const k=aa(),ee=Yu(2);k.firstUpdatePass&&Sb(k,null,ee,A);const me=Yi();if(m!==jo&&Uf(me,ee,m)){const Ne=k.data[Yn()];if(Mb(Ne,A)&&!bb(k,ee)){let Je=A?Ne.classesWithoutHost:Ne.stylesWithoutHost;null!==Je&&(m=M(Je,m||"")),Hl(k,Ne,me,m,A)}else!function jC(c,d,m,A,k,ee,me,Ne){k===jo&&(k=Wn);let Je=0,kt=0,en=0<k.length?k[0]:null,Ln=0<ee.length?ee[0]:null;for(;null!==en||null!==Ln;){const Or=Je<k.length?k[Je+1]:void 0,ni=kt<ee.length?ee[kt+1]:void 0;let Uo,Wi=null;en===Ln?(Je+=2,kt+=2,Or!==ni&&(Wi=Ln,Uo=ni)):null===Ln||null!==en&&en<Ln?(Je+=2,Wi=en):(kt+=2,Wi=Ln,Uo=ni),null!==Wi&&Tb(c,d,m,A,Wi,Uo,me,Ne),en=Je<k.length?k[Je]:null,Ln=kt<ee.length?ee[kt]:null}}(k,Ne,me,me[11],me[ee+1],me[ee+1]=function YC(c,d,m){if(null==m||""===m)return Wn;const A=[],k=Rc(m);if(Array.isArray(k))for(let ee=0;ee<k.length;ee++)c(A,k[ee],!0);else if("object"==typeof k)for(const ee in k)k.hasOwnProperty(ee)&&c(A,ee,k[ee]);else"string"==typeof k&&d(A,k);return A}(c,d,m),A,ee)}}function bb(c,d){return d>=c.expandoStartIndex}function Sb(c,d,m,A){const k=c.data;if(null===k[m+1]){const ee=k[Yn()],me=bb(c,m);Mb(ee,A)&&null===d&&!me&&(d=!1),d=function $C(c,d,m,A){const k=Z(c);let ee=A?d.residualClasses:d.residualStyles;if(null===k)0===(A?d.classBindings:d.styleBindings)&&(m=Q_(m=fy(null,c,d,m,A),d.attrs,A),ee=null);else{const me=d.directiveStylingLast;if(-1===me||c[me]!==k)if(m=fy(k,c,d,m,A),null===ee){let Je=function HC(c,d,m){const A=m?d.classBindings:d.styleBindings;if(0!==Tn(A))return c[Ee(A)]}(c,d,A);void 0!==Je&&Array.isArray(Je)&&(Je=fy(null,c,d,Je[1],A),Je=Q_(Je,d.attrs,A),function BC(c,d,m,A){c[Ee(m?d.classBindings:d.styleBindings)]=A}(c,d,A,Je))}else ee=function UC(c,d,m){let A;const k=d.directiveEnd;for(let ee=1+d.directiveStylingLast;ee<k;ee++)A=Q_(A,c[ee].hostAttrs,m);return Q_(A,d.attrs,m)}(c,d,A)}return void 0!==ee&&(A?d.residualClasses=ee:d.residualStyles=ee),m}(k,ee,d,A),function xC(c,d,m,A,k,ee){let me=ee?d.classBindings:d.styleBindings,Ne=Ee(me),Je=Tn(me);c[A]=m;let en,kt=!1;if(Array.isArray(m)){const Ln=m;en=Ln[1],(null===en||ga(Ln,en)>0)&&(kt=!0)}else en=m;if(k)if(0!==Je){const Or=Ee(c[Ne+1]);c[A+1]=Y(Or,Ne),0!==Or&&(c[Or+1]=ar(c[Or+1],A)),c[Ne+1]=function At(c,d){return 131071&c|d<<17}(c[Ne+1],A)}else c[A+1]=Y(Ne,0),0!==Ne&&(c[Ne+1]=ar(c[Ne+1],A)),Ne=A;else c[A+1]=Y(Je,0),0===Ne?Ne=A:c[Je+1]=ar(c[Je+1],A),Je=A;kt&&(c[A+1]=tn(c[A+1])),hb(c,en,A,!0),hb(c,en,A,!1),function RC(c,d,m,A,k){const ee=k?c.residualClasses:c.residualStyles;null!=ee&&"string"==typeof d&&ga(ee,d)>=0&&(m[A+1]=Ho(m[A+1]))}(d,en,c,A,ee),me=Y(Ne,Je),ee?d.classBindings=me:d.styleBindings=me}(k,ee,d,m,me,A)}}function fy(c,d,m,A,k){let ee=null;const me=m.directiveEnd;let Ne=m.directiveStylingLast;for(-1===Ne?Ne=m.directiveStart:Ne++;Ne<me&&(ee=d[Ne],A=Q_(A,ee.hostAttrs,k),ee!==c);)Ne++;return null!==c&&(m.directiveStylingLast=Ne),A}function Q_(c,d,m){const A=m?1:2;let k=-1;if(null!==d)for(let ee=0;ee<d.length;ee++){const me=d[ee];"number"==typeof me?k=me:k===A&&(Array.isArray(c)||(c=void 0===c?[]:["",c]),$l(c,me,!!m||d[++ee]))}return void 0===c?null:c}function Tb(c,d,m,A,k,ee,me,Ne){if(!(3&d.type))return;const Je=c.data,kt=Je[Ne+1];j1(function li(c){return 1==(1&c)}(kt)?Cb(Je,d,m,k,Tn(kt),me):void 0)||(j1(ee)||function ze(c){return 2==(2&c)}(kt)&&(ee=Cb(Je,null,m,k,Ne,me)),function Sm(c,d,m,A,k){const ee=Ya(c);if(d)k?ee?c.addClass(m,A):m.classList.add(A):ee?c.removeClass(m,A):m.classList.remove(A);else{let me=-1===A.indexOf("-")?void 0:Md.DashCase;if(null==k)ee?c.removeStyle(m,A,me):m.style.removeProperty(A);else{const Ne="string"==typeof k&&k.endsWith("!important");Ne&&(k=k.slice(0,-10),me|=Md.Important),ee?c.setStyle(m,A,k,me):m.style.setProperty(A,k,Ne?"important":"")}}}(A,me,oi(Yn(),m),k,ee))}function Cb(c,d,m,A,k,ee){const me=null===d;let Ne;for(;k>0;){const Je=c[k],kt=Array.isArray(Je),en=kt?Je[1]:Je,Ln=null===en;let Or=m[k+1];Or===jo&&(Or=Ln?Wn:void 0);let ni=Ln?Ac(Or,A):en===A?Or:void 0;if(kt&&!j1(ni)&&(ni=Ac(Je,A)),j1(ni)&&(Ne=ni,me))return Ne;const Wi=c[k+1];k=me?Ee(Wi):Tn(Wi)}if(null!==d){let Je=ee?d.residualClasses:d.residualStyles;null!=Je&&(Ne=Ac(Je,A))}return Ne}function j1(c){return void 0!==c}function Mb(c,d){return 0!=(c.flags&(d?16:32))}function G1(c,d=""){const m=Yi(),A=aa(),k=c+20,ee=A.firstCreatePass?C_(A,k,1,d,null):A.data[k],me=m[k]=Mh(m[11],d);tp(A,m,me,ee),lu(ee,!1)}function py(c){return V1("",c,""),py}function V1(c,d,m){const A=Yi(),k=hm(A,c,d,m);return k!==jo&&a_(A,Yn(),k),V1}function hy(c,d,m,A,k){const ee=Yi(),me=_m(ee,c,d,m,A,k);return me!==jo&&a_(ee,Yn(),me),hy}function _y(c,d,m,A,k,ee,me){const Ne=Yi(),Je=function Lm(c,d,m,A,k,ee,me,Ne){const kt=Lg(c,du(),m,k,me);return Yu(3),kt?d+re(m)+A+re(k)+ee+re(me)+Ne:jo}(Ne,c,d,m,A,k,ee,me);return Je!==jo&&a_(Ne,Yn(),Je),_y}function Rb(c,d,m){R_($l,J_,hm(Yi(),c,d,m),!0)}function wb(c,d,m,A,k){R_($l,J_,_m(Yi(),c,d,m,A,k),!0)}function Pb(c,d,m,A,k,ee,me,Ne,Je){R_($l,J_,function km(c,d,m,A,k,ee,me,Ne,Je,kt){const Ln=th(c,du(),m,k,me,Je);return Yu(4),Ln?d+re(m)+A+re(k)+ee+re(me)+Ne+re(Je)+kt:jo}(Yi(),c,d,m,A,k,ee,me,Ne,Je),!0)}function vy(c,d,m){const A=Yi();return Uf(A,Uu(),d)&&Bf(aa(),br(),A,c,d,A[11],m,!0),vy}function yy(c,d,m){const A=Yi();if(Uf(A,Uu(),d)){const ee=aa(),me=br();Bf(ee,me,A,c,d,function i1(c,d,m){return(null===c||Ra(c))&&(m=function Kt(c){for(;Array.isArray(c);){if("object"==typeof c[1])return c;c=c[0]}return null}(m[d.index])),m[11]}(Z(ee.data),me,A),m,!0)}return yy}const ug=void 0;var n2=["en",[["a","p"],["AM","PM"],ug],[["AM","PM"],ug,ug],[["S","M","T","W","T","F","S"],["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],["Su","Mo","Tu","We","Th","Fr","Sa"]],ug,[["J","F","M","A","M","J","J","A","S","O","N","D"],["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],["January","February","March","April","May","June","July","August","September","October","November","December"]],ug,[["B","A"],["BC","AD"],["Before Christ","Anno Domini"]],0,[6,0],["M/d/yy","MMM d, y","MMMM d, y","EEEE, MMMM d, y"],["h:mm a","h:mm:ss a","h:mm:ss a z","h:mm:ss a zzzz"],["{1}, {0}",ug,"{1} 'at' {0}",ug],[".",",",";","%","+","-","E","\xd7","\u2030","\u221e","NaN",":"],["#,##0.###","#,##0%","\xa4#,##0.00","#E0"],"USD","$","US Dollar",{},"ltr",function t2(c){const m=Math.floor(Math.abs(c)),A=c.toString().replace(/^[^.]*\.?/,"").length;return 1===m&&0===A?1:5}];let Gg={};function Ey(c){const d=function r2(c){return c.toLowerCase().replace(/_/g,"-")}(c);let m=jb(d);if(m)return m;const A=d.split("-")[0];if(m=jb(A),m)return m;if("en"===A)return n2;throw new Error(`Missing locale data for the locale "${c}".`)}function Yb(c){return Ey(c)[za.PluralCase]}function jb(c){return c in Gg||(Gg[c]=vr.ng&&vr.ng.common&&vr.ng.common.locales&&vr.ng.common.locales[c]),Gg[c]}var za=(()=>((za=za||{})[za.LocaleId=0]="LocaleId",za[za.DayPeriodsFormat=1]="DayPeriodsFormat",za[za.DayPeriodsStandalone=2]="DayPeriodsStandalone",za[za.DaysFormat=3]="DaysFormat",za[za.DaysStandalone=4]="DaysStandalone",za[za.MonthsFormat=5]="MonthsFormat",za[za.MonthsStandalone=6]="MonthsStandalone",za[za.Eras=7]="Eras",za[za.FirstDayOfWeek=8]="FirstDayOfWeek",za[za.WeekendRange=9]="WeekendRange",za[za.DateFormat=10]="DateFormat",za[za.TimeFormat=11]="TimeFormat",za[za.DateTimeFormat=12]="DateTimeFormat",za[za.NumberSymbols=13]="NumberSymbols",za[za.NumberFormats=14]="NumberFormats",za[za.CurrencyCode=15]="CurrencyCode",za[za.CurrencySymbol=16]="CurrencySymbol",za[za.CurrencyName=17]="CurrencyName",za[za.Currencies=18]="Currencies",za[za.Directionality=19]="Directionality",za[za.PluralCase=20]="PluralCase",za[za.ExtraData=21]="ExtraData",za))();const o2=["zero","one","two","few","many"],z1="en-US",W1={marker:"element"},J1={marker:"ICU"};var wd=(()=>((wd=wd||{})[wd.SHIFT=2]="SHIFT",wd[wd.APPEND_EAGERLY=1]="APPEND_EAGERLY",wd[wd.COMMENT=2]="COMMENT",wd))();let Gb=z1;function Vb(c,d,m){const A=d.insertBeforeIndex,k=Array.isArray(A)?A[0]:A;return null===k?$_(c,0,m):pt(m[k])}function Zb(c,d,m,A,k){const ee=d.insertBeforeIndex;if(Array.isArray(ee)){let me=A,Ne=null;if(3&d.type||(Ne=me,me=k),null!==me&&0==(2&d.flags))for(let Je=1;Je<ee.length;Je++)ep(c,me,m[ee[Je]],Ne,!1)}}function zb(c,d){if(c.push(d),c.length>1)for(let m=c.length-2;m>=0;m--){const A=c[m];Wb(A)||c2(A,d)&&null===d2(A)&&f2(A,d.index)}}function Wb(c){return!(64&c.type)}function c2(c,d){return Wb(d)||c.index>d.index}function d2(c){const d=c.insertBeforeIndex;return Array.isArray(d)?d[0]:d}function f2(c,d){const m=c.insertBeforeIndex;Array.isArray(m)?m[0]=d:(H_(Vb,Zb),c.insertBeforeIndex=d)}function Av(c,d){const m=c.data[d];return null===m||"string"==typeof m?null:m.hasOwnProperty("currentCaseLViewIndex")?m:m.value}function _2(c,d,m){const A=Mm(c,m,64,null,null);return zb(d,A),A}function Q1(c,d){const m=d[c.currentCaseLViewIndex];return null===m?m:m<0?~m:m}function cg(c){return c>>>17}function Ym(c){return(131070&c)>>>1}let gm=0,Dv=0;function Qb(c,d,m,A){const k=m[11];let me,ee=null;for(let Ne=0;Ne<d.length;Ne++){const Je=d[Ne];if("string"==typeof Je){const kt=d[++Ne];null===m[kt]&&(m[kt]=Mh(k,Je))}else if("number"==typeof Je)switch(1&Je){case 0:const kt=cg(Je);let en,Ln;if(null===ee&&(ee=kt,me=Ah(k,A)),kt===ee?(en=A,Ln=me):(en=null,Ln=pt(m[kt])),null!==Ln){const Uo=Ym(Je);ep(k,Ln,m[Uo],en,!1);const Zs=Av(c,Uo);if(null!==Zs&&"object"==typeof Zs){const _o=Q1(Zs,m);null!==_o&&Qb(c,Zs.create[_o],m,m[Zs.anchorIdx])}}break;case 1:const ni=d[++Ne],Wi=d[++Ne];s_(k,oi(Je>>>1,m),null,null,ni,Wi,null)}else switch(Je){case J1:const kt=d[++Ne],en=d[++Ne];null===m[en]&&sc(m[en]=Oh(k,kt),m);break;case W1:const Ln=d[++Ne],Or=d[++Ne];null===m[Or]&&sc(m[Or]=Gc(k,Ln,null),m)}}}function Xb(c,d,m,A,k){for(let ee=0;ee<m.length;ee++){const me=m[ee],Ne=m[++ee];if(me&k){let Je="";for(let kt=ee+1;kt<=ee+Ne;kt++){const en=m[kt];if("string"==typeof en)Je+=en;else if("number"==typeof en)if(en<0)Je+=re(d[A-en]);else{const Ln=en>>>2;switch(3&en){case 1:const Or=m[++kt],ni=m[++kt],Wi=c.data[Ln];"string"==typeof Wi?s_(d[11],d[Ln],null,Wi,Or,Je,ni):Bf(c,Wi,d,Or,Je,d[11],ni,!1);break;case 0:const Uo=d[Ln];null!==Uo&&fp(d[11],Uo,Je);break;case 2:E2(c,Av(c,Ln),d,Je);break;case 3:Kb(c,Av(c,Ln),A,d)}}}}else{const Je=m[ee+1];if(Je>0&&3==(3&Je)){const en=Av(c,Je>>>2);d[en.currentCaseLViewIndex]<0&&Kb(c,en,A,d)}}ee+=Ne}}function Kb(c,d,m,A){let k=A[d.currentCaseLViewIndex];if(null!==k){let ee=gm;k<0&&(k=A[d.currentCaseLViewIndex]=~k,ee=-1),Xb(c,A,d.update[k],m,ee)}}function E2(c,d,m,A){const k=function b2(c,d){let m=c.cases.indexOf(d);if(-1===m)switch(c.type){case 1:{const A=function s2(c,d){const m=Yb(d)(parseInt(c,10)),A=o2[m];return void 0!==A?A:"other"}(d,function u2(){return Gb}());m=c.cases.indexOf(A),-1===m&&"other"!==A&&(m=c.cases.indexOf("other"));break}case 0:m=c.cases.indexOf("other")}return-1===m?null:m}(d,A);if(Q1(d,m)!==k&&(qb(c,d,m),m[d.currentCaseLViewIndex]=null===k?null:~k,null!==k)){const me=m[d.anchorIdx];me&&Qb(c,d.create[k],m,me)}}function qb(c,d,m){let A=Q1(d,m);if(null!==A){const k=d.remove[A];for(let ee=0;ee<k.length;ee++){const me=k[ee];if(me>0){const Ne=oi(me,m);null!==Ne&&Rp(m[11],Ne)}else qb(c,Av(c,~me),m)}}}function S2(){const c=[];let m,A,d=-1;function ee(Ne,Je){d=0;const kt=Q1(Ne,Je);A=null!==kt?Ne.remove[kt]:Wn}function me(){if(d<A.length){const Ne=A[d++];return Ne>0?m[Ne]:(c.push(d,A),ee(m[1].data[~Ne],m),me())}return 0===c.length?null:(A=c.pop(),d=c.pop(),me())}return function k(Ne,Je){for(m=Je;c.length;)c.pop();return ee(Ne.value,Je),me}}const X1=/\ufffd(\d+):?\d*\ufffd/gi,T2=/({\s*\ufffd\d+:?\d*\ufffd\s*,\s*\S{6}\s*,[\s\S]*})/gi,C2=/\ufffd(\d+)\ufffd/,eS=/^\s*(\ufffd\d+:?\d*\ufffd)\s*,\s*(select|plural)\s*,/,M2=/\ufffd\/?\*(\d+:\d+)\ufffd/gi,O2=/\ufffd(\/?[#*]\d+):?\d*\ufffd/gi,A2=/\uE500/g;function tS(c,d,m,A,k,ee,me){const Ne=Rh(c,A,1,null);let Je=Ne<<wd.SHIFT,kt=Sl();d===kt&&(kt=null),null===kt&&(Je|=wd.APPEND_EAGERLY),me&&(Je|=wd.COMMENT,function jl(c){void 0===dp&&(dp=c())}(S2)),k.push(Je,null===ee?"":ee);const en=Mm(c,Ne,me?32:1,null===ee?"":ee,null);zb(m,en);const Ln=en.index;return lu(en,!1),null!==kt&&d!==kt&&function h2(c,d){let m=c.insertBeforeIndex;null===m?(H_(Vb,Zb),m=c.insertBeforeIndex=[null,d]):(function Ve(c,d,m){c!=d&&Yt(m,c,d,"==")}(Array.isArray(m),!0,"Expecting array here"),m.push(d))}(kt,Ln),en}function R2(c,d,m,A,k,ee,me){const Ne=me.match(X1),Je=tS(c,d,m,ee,A,Ne?null:me,!1);Ne&&Vg(k,me,Je.index,null,0,null)}function Vg(c,d,m,A,k,ee){const me=c.length,Ne=me+1;c.push(null,null);const Je=me+2,kt=d.split(X1);let en=0;for(let Ln=0;Ln<kt.length;Ln++){const Or=kt[Ln];if(1&Ln){const ni=k+parseInt(Or,10);c.push(-1-ni),en|=nS(ni)}else""!==Or&&c.push(Or)}return c.push(m<<2|(A?1:0)),A&&c.push(A,ee),c[me]=en,c[Ne]=c.length-Je,en}function P2(c){let d=0;for(let m=0;m<c.length;m++){const A=c[m];"number"==typeof A&&A<0&&d++}return d}function nS(c){return 1<<Math.min(c,31)}function rS(c){let d,ee,m="",A=0,k=!1;for(;null!==(d=M2.exec(c));)k?d[0]===`\ufffd/*${ee}\ufffd`&&(A=d.index,k=!1):(m+=c.substring(A,d.index+d[0].length),ee=d[1],k=!0);return m+=c.substr(A),m}function iS(c,d,m,A,k,ee){let me=0;const Ne={type:k.type,currentCaseLViewIndex:Rh(c,d,1,null),anchorIdx:ee,cases:[],create:[],remove:[],update:[]};(function $2(c,d,m){c.push(nS(d.mainBinding),2,-1-d.mainBinding,m<<2|2)})(m,k,ee),function p2(c,d,m){const A=c.data[d];null===A?c.data[d]=m:A.value=m}(c,ee,Ne);const Je=k.values;for(let kt=0;kt<Je.length;kt++){const en=Je[kt],Ln=[];for(let Or=0;Or<en.length;Or++){const ni=en[Or];if("string"!=typeof ni){const Wi=Ln.push(ni)-1;en[Or]=`\x3c!--\ufffd${Wi}\ufffd--\x3e`}}me=L2(c,Ne,d,m,A,k.cases[kt],en.join(""),Ln)|me}me&&function H2(c,d,m){c.push(d,1,m<<2|3)}(m,me,ee)}function F2(c){const d=[],m=[];let A=1,k=0;const ee=by(c=c.replace(eS,function(me,Ne,Je){return A="select"===Je?0:1,k=parseInt(Ne.substr(1),10),""}));for(let me=0;me<ee.length;){let Ne=ee[me++].trim();1===A&&(Ne=Ne.replace(/\s*(?:=)?(\w+)\s*/,"$1")),Ne.length&&d.push(Ne);const Je=by(ee[me++]);d.length>m.length&&m.push(Je)}return{type:A,mainBinding:k,cases:d,values:m}}function by(c){if(!c)return[];let d=0;const m=[],A=[],k=/[{}]/g;let ee;for(k.lastIndex=0;ee=k.exec(c);){const Ne=ee.index;if("}"==ee[0]){if(m.pop(),0==m.length){const Je=c.substring(d,Ne);eS.test(Je)?A.push(F2(Je)):A.push(Je),d=Ne+1}}else{if(0==m.length){const Je=c.substring(d,Ne);A.push(Je),d=Ne+1}m.push("{")}}const me=c.substring(d);return A.push(me),A}function L2(c,d,m,A,k,ee,me,Ne){const Je=[],kt=[],en=[];d.cases.push(ee),d.create.push(Je),d.remove.push(kt),d.update.push(en);const Or=Ed(Ol()).getInertBodyElement(me),ni=hh(Or)||Or;return ni?oS(c,d,m,A,Je,kt,en,ni,k,Ne,0):0}function oS(c,d,m,A,k,ee,me,Ne,Je,kt,en){let Ln=0,Or=Ne.firstChild;for(;Or;){const ni=Rh(c,m,1,null);switch(Or.nodeType){case Node.ELEMENT_NODE:const Wi=Or,Uo=Wi.tagName.toLowerCase();if(bf.hasOwnProperty(Uo)){Sy(k,W1,Uo,Je,ni),c.data[ni]=Uo;const ya=Wi.attributes;for(let eu=0;eu<ya.length;eu++){const ac=ya.item(eu),rh=ac.name.toLowerCase();ac.value.match(X1)?Au.hasOwnProperty(rh)&&Vg(me,ac.value,ni,ac.name,0,Sf[rh]?Pf:Zf[rh]?Bp:null):B2(k,ni,ac)}Ln=oS(c,d,m,A,k,ee,me,Or,ni,kt,en+1)|Ln,sS(ee,ni,en)}break;case Node.TEXT_NODE:const us=Or.textContent||"",Zs=us.match(X1);Sy(k,null,Zs?"":us,Je,ni),sS(ee,ni,en),Zs&&(Ln=Vg(me,us,ni,null,0,null)|Ln);break;case Node.COMMENT_NODE:const _o=C2.exec(Or.textContent||"");if(_o){const eu=kt[parseInt(_o[1],10)];Sy(k,J1,"",Je,ni),iS(c,m,A,Je,eu,ni),k2(ee,ni,en)}}Or=Or.nextSibling}return Ln}function sS(c,d,m){0===m&&c.push(d)}function k2(c,d,m){0===m&&(c.push(~d),c.push(d))}function Sy(c,d,m,A,k){null!==d&&c.push(d),c.push(m,k,function m2(c,d,m){return c|d<<17|m<<1}(0,A,k))}function B2(c,d,m){c.push(d<<1|1,m.name,m.value)}const U2=/\[(\ufffd.+?\ufffd?)\]/,Y2=/\[(\ufffd.+?\ufffd?)\]|(\ufffd\/?\*\d+:\d+\ufffd)/g,j2=/({\s*)(VAR_(PLURAL|SELECT)(_\d+)?)(\s*,)/g,G2=/{([A-Z0-9_]+)}/g,V2=/\ufffdI18N_EXP_(ICU(_\d+)?)\ufffd/g,Z2=/\/\*/,z2=/\d+\:(\d+)/;function Ty(c,d,m=-1){const A=aa(),k=Yi(),ee=20+c,me=Bs(A.consts,d),Ne=Sl();A.firstCreatePass&&function x2(c,d,m,A,k,ee){const me=Sl(),Ne=[],Je=[],kt=[[]];k=function I2(c,d){if(function N2(c){return-1===c}(d))return rS(c);{const m=c.indexOf(`:${d}\ufffd`)+2+d.toString().length,A=c.search(new RegExp(`\ufffd\\/\\*\\d+:${d}\ufffd`));return rS(c.substring(m,A))}}(k,ee);const en=function D2(c){return c.replace(A2," ")}(k).split(O2);for(let Ln=0;Ln<en.length;Ln++){let Or=en[Ln];if(0==(1&Ln)){const ni=by(Or);for(let Wi=0;Wi<ni.length;Wi++){let Uo=ni[Wi];if(0==(1&Wi)){const us=Uo;""!==us&&R2(c,me,kt[0],Ne,Je,m,us)}else{const us=Uo;if("object"!=typeof us)throw new Error(`Unable to parse ICU expression in "${k}" message.`);iS(c,m,Je,d,us,tS(c,me,kt[0],m,Ne,"",!0).index)}}}else{const ni=47===Or.charCodeAt(0),Uo=(Or.charCodeAt(ni?1:0),20+Number.parseInt(Or.substring(ni?2:1)));if(ni)kt.shift(),lu(Sl(),!1);else{const us=_2(c,kt[0],Uo);kt.unshift([]),lu(us,!0)}}}c.data[A]={create:Ne,update:Je}}(A,null===Ne?0:Ne.index,k,ee,me,m);const Je=A.data[ee],en=v_(A,Ne===k[6]?null:Ne,k);(function y2(c,d,m,A){const k=c[11];for(let ee=0;ee<d.length;ee++){const me=d[ee++],Ne=d[ee],Je=(me&wd.COMMENT)===wd.COMMENT,kt=(me&wd.APPEND_EAGERLY)===wd.APPEND_EAGERLY,en=me>>>wd.SHIFT;let Ln=c[en];null===Ln&&(Ln=c[en]=Je?k.createComment(Ne):Mh(k,Ne)),kt&&null!==m&&ep(k,m,Ln,A,!1)}})(k,Je.create,en,Ne&&8&Ne.type?k[Ne.index]:null),Ld(!0)}function Cy(){Ld(!1)}function lS(c,d,m){Ty(c,d,m),Cy()}function uS(c,d){const m=aa();!function w2(c,d,m){const k=Es().index,ee=[];if(c.firstCreatePass&&null===c.data[d]){for(let me=0;me<m.length;me+=2){const Ne=m[me],Je=m[me+1];if(""!==Je){if(T2.test(Je))throw new Error(`ICU expressions are not supported in attributes. Message: "${Je}".`);Vg(ee,Je,k,Ne,P2(ee),null)}}c.data[d]=ee}}(m,c+20,Bs(m.consts,d))}function My(c){return function g2(c){c&&(gm|=1<<Math.min(Dv,31)),Dv++}(Uf(Yi(),Uu(),c)),My}function Oy(c){!function v2(c,d,m){if(Dv>0){const A=c.data[m];Xb(c,d,Array.isArray(A)?A:A.update,du()-Dv-1,gm)}gm=0,Dv=0}(aa(),Yi(),c+20)}function cS(c,d={}){return function W2(c,d={}){let m=c;if(U2.test(c)){const A={},k=[0];m=m.replace(Y2,(ee,me,Ne)=>{const Je=me||Ne,kt=A[Je]||[];if(kt.length||(Je.split("|").forEach(Uo=>{const us=Uo.match(z2),Zs=us?parseInt(us[1],10):0,_o=Z2.test(Uo);kt.push([Zs,_o,Uo])}),A[Je]=kt),!kt.length)throw new Error(`i18n postprocess: unmatched placeholder - ${Je}`);const en=k[k.length-1];let Ln=0;for(let Uo=0;Uo<kt.length;Uo++)if(kt[Uo][0]===en){Ln=Uo;break}const[Or,ni,Wi]=kt[Ln];return ni?k.pop():en!==Or&&k.push(Or),kt.splice(Ln,1),Wi})}return Object.keys(d).length&&(m=m.replace(j2,(A,k,ee,me,Ne,Je)=>d.hasOwnProperty(ee)?`${k}${d[ee]}${Je}`:A),m=m.replace(G2,(A,k)=>d.hasOwnProperty(k)?d[k]:A),m=m.replace(V2,(A,k)=>{if(d.hasOwnProperty(k)){const ee=d[k];if(!ee.length)throw new Error(`i18n postprocess: unmatched ICU - ${A} with key: ${k}`);return ee.shift()}return A})),m}(c,d)}function Ay(c,d,m,A,k){if(c=B(c),Array.isArray(c))for(let ee=0;ee<c.length;ee++)Ay(c[ee],d,m,A,k);else{const ee=aa(),me=Yi();let Ne=Pm(c)?c:B(c.provide),Je=f1(c);const kt=Es(),en=1048575&kt.providerIndexes,Ln=kt.directiveStart,Or=kt.providerIndexes>>20;if(Pm(c)||!c.multi){const ni=new La(Je,k,ba),Wi=Dy(Ne,d,k?en:en+Or,Ln);-1===Wi?(ka(ha(kt,me),ee,Ne),K1(ee,c,d.length),d.push(Ne),kt.directiveStart++,kt.directiveEnd++,k&&(kt.providerIndexes+=1048576),m.push(ni),me.push(ni)):(m[Wi]=ni,me[Wi]=ni)}else{const ni=Dy(Ne,d,en+Or,Ln),Wi=Dy(Ne,d,en,en+Or),Uo=ni>=0&&m[ni],us=Wi>=0&&m[Wi];if(k&&!us||!k&&!Uo){ka(ha(kt,me),ee,Ne);const Zs=function K2(c,d,m,A,k){const ee=new La(c,m,ba);return ee.multi=[],ee.index=d,ee.componentProviders=0,q1(ee,k,A&&!m),ee}(k?X2:Q2,m.length,k,A,Je);!k&&us&&(m[Wi].providerFactory=Zs),K1(ee,c,d.length,0),d.push(Ne),kt.directiveStart++,kt.directiveEnd++,k&&(kt.providerIndexes+=1048576),m.push(Zs),me.push(Zs)}else K1(ee,c,ni>-1?ni:Wi,q1(m[k?Wi:ni],Je,!k&&A));!k&&A&&us&&m[Wi].componentProviders++}}}function K1(c,d,m,A){const k=Pm(d),ee=function fv(c){return!!c.useClass}(d);if(k||ee){const Je=(ee?B(d.useClass):d).prototype.ngOnDestroy;if(Je){const kt=c.destroyHooks||(c.destroyHooks=[]);if(!k&&d.multi){const en=kt.indexOf(m);-1===en?kt.push(m,[A,Je]):kt[en+1].push(A,Je)}else kt.push(m,Je)}}}function q1(c,d,m){return m&&c.componentProviders++,c.multi.push(d)-1}function Dy(c,d,m,A){for(let k=m;k<A;k++)if(d[k]===c)return k;return-1}function Q2(c,d,m,A){return xy(this.multi,[])}function X2(c,d,m,A){const k=this.multi;let ee;if(this.providerFactory){const me=this.providerFactory.componentProviders,Ne=cu(m,m[1],this.providerFactory.index,A);ee=Ne.slice(0,me),xy(k,ee);for(let Je=me;Je<Ne.length;Je++)ee.push(Ne[Je])}else ee=[],xy(k,ee);return ee}function xy(c,d){for(let m=0;m<c.length;m++)d.push((0,c[m])());return d}function dS(c,d=[]){return m=>{m.providersResolver=(A,k)=>function J2(c,d,m){const A=aa();if(A.firstCreatePass){const k=Ra(c);Ay(m,A.data,A.blueprint,k,!0),Ay(d,A.data,A.blueprint,k,!1)}}(A,k?k(c):c,d)}}class fS{}class pS{}class eM{resolveComponentFactory(d){throw function q2(c){const d=Error(`No component factory found for ${S(c)}. Did you add it to @NgModule.entryComponents?`);return d.ngComponent=c,d}(d)}}let e0=(()=>{class c{}return c.NULL=new eM,c})();function tM(){return Zg(Es(),Yi())}function Zg(c,d){return new Rv(wi(c,d))}let Rv=(()=>{class c{constructor(m){this.nativeElement=m}}return c.__NG_ELEMENT_ID__=tM,c})();function nM(c){return c instanceof Rv?c.nativeElement:c}class _S{}let rM=(()=>{class c{}return c.__NG_ELEMENT_ID__=()=>function oM(){const c=Yi(),m=ws(Es().index,c);return function iM(c){return c[11]}(es(m)?m:c)}(),c})(),mS=(()=>{class c{}return c.\u0275prov=xt({token:c,providedIn:"root",factory:()=>null}),c})();class gS{constructor(d){this.full=d,this.major=d.split(".")[0],this.minor=d.split(".")[1],this.patch=d.split(".").slice(2).join(".")}}const vS=new gS("13.3.11"),Ry={};function t0(c,d,m,A,k=!1){for(;null!==m;){const ee=d[m.index];if(null!==ee&&A.push(pt(ee)),ma(ee))for(let Ne=10;Ne<ee.length;Ne++){const Je=ee[Ne],kt=Je[1].firstChild;null!==kt&&t0(Je[1],Je,kt,A)}const me=m.type;if(8&me)t0(c,d,m.child,A);else if(32&me){const Ne=Bu(m,d);let Je;for(;Je=Ne();)A.push(Je)}else if(16&me){const Ne=xp(d,m);if(Array.isArray(Ne))A.push(...Ne);else{const Je=kf(d[16]);t0(Je[1],Je,Ne,A,!0)}}m=k?m.projectionNext:m.next}return A}class wv{constructor(d,m){this._lView=d,this._cdRefInjectingView=m,this._appRef=null,this._attachedToViewContainer=!1}get rootNodes(){const d=this._lView,m=d[1];return t0(m,d,m.firstChild,[])}get context(){return this._lView[8]}set context(d){this._lView[8]=d}get destroyed(){return 256==(256&this._lView[2])}destroy(){if(this._appRef)this._appRef.detachView(this);else if(this._attachedToViewContainer){const d=this._lView[3];if(ma(d)){const m=d[8],A=m?m.indexOf(this):-1;A>-1&&(r_(d,A),nc(m,A))}this._attachedToViewContainer=!1}Ap(this._lView[1],this._lView)}onDestroy(d){Om(this._lView[1],this._lView,null,d)}markForCheck(){cv(this._cdRefInjectingView||this._lView)}detach(){this._lView[2]&=-129}reattach(){this._lView[2]|=128}detectChanges(){!function dm(c,d,m){const A=d[10];A.begin&&A.begin();try{M_(c,d,c.template,m)}catch(k){throw o1(d,k),k}finally{A.end&&A.end()}}(this._lView[1],this._lView,this.context)}checkNoChanges(){}attachToViewContainerRef(){if(this._appRef)throw new q(902,"");this._attachedToViewContainer=!0}detachFromAppRef(){this._appRef=null,function Op(c,d){Jp(c,d,d[11],2,null,null)}(this._lView[1],this._lView)}attachToAppRef(d){if(this._attachedToViewContainer)throw new q(902,"");this._appRef=d}}class sM extends wv{constructor(d){super(d),this._view=d}detectChanges(){wg(this._view)}checkNoChanges(){}get context(){return null}}class yS extends e0{constructor(d){super(),this.ngModule=d}resolveComponentFactory(d){const m=yn(d);return new wy(m,this.ngModule)}}function ES(c){const d=[];for(let m in c)c.hasOwnProperty(m)&&d.push({propName:c[m],templateName:m});return d}class wy extends pS{constructor(d,m){super(),this.componentDef=d,this.ngModule=m,this.componentType=d.type,this.selector=function Do(c){return c.map(ts).join(",")}(d.selectors),this.ngContentSelectors=d.ngContentSelectors?d.ngContentSelectors:[],this.isBoundToModule=!!m}get inputs(){return ES(this.componentDef.inputs)}get outputs(){return ES(this.componentDef.outputs)}create(d,m,A,k){const ee=(k=k||this.ngModule)?function lM(c,d){return{get:(m,A,k)=>{const ee=c.get(m,Ry,k);return ee!==Ry||A===Ry?ee:d.get(m,A,k)}}}(d,k.injector):d,me=ee.get(_S,rt),Ne=ee.get(mS,null),Je=me.createRenderer(null,this.componentDef),kt=this.componentDef.selectors[0][0]||"div",en=A?function cm(c,d,m){if(Ya(c))return c.selectRootElement(d,m===Xn.ShadowDom);let A="string"==typeof d?c.querySelector(d):d;return A.textContent="",A}(Je,A,this.componentDef.encapsulation):Gc(me.createRenderer(null,this.componentDef),kt,function aM(c){const d=c.toLowerCase();return"svg"===d?"svg":"math"===d?"math":null}(kt)),Ln=this.componentDef.onPush?576:528,Or=function hv(c,d){return{components:[],scheduler:c||Sh,clean:Dm,playerHandler:d||null,flags:0}}(),ni=Qp(0,null,null,1,0,null,null,null,null,null),Wi=lm(null,ni,Or,Ln,null,null,me,Je,Ne,ee);let Uo,us;_n(Wi);try{const Zs=function v1(c,d,m,A,k,ee){const me=m[1];m[20]=c;const Je=C_(me,20,2,"#host",null),kt=Je.mergedAttrs=d.hostAttrs;null!==kt&&(Kp(Je,kt,!0),null!==c&&(gc(k,c,kt),null!==Je.classes&&Dh(k,c,Je.classes),null!==Je.styles&&hp(k,c,Je.styles)));const en=A.createRenderer(c,d),Ln=lm(m,j_(d),null,d.onPush?64:16,m[20],Je,A,en,ee||null,null);return me.firstCreatePass&&(ka(ha(Je,m),me,d.type),ml(me,Je),xu(Je,m.length,1)),xg(m,Ln),m[20]=Ln}(en,this.componentDef,Wi,me,Je);if(en)if(A)gc(Je,en,["ng-version",vS.full]);else{const{attrs:_o,classes:ya}=function Ss(c){const d=[],m=[];let A=1,k=2;for(;A<c.length;){let ee=c[A];if("string"==typeof ee)2===k?""!==ee&&d.push(ee,c[++A]):8===k&&m.push(ee);else{if(!z(k))break;k=ee}A++}return{attrs:d,classes:m}}(this.componentDef.selectors[0]);_o&&gc(Je,en,_o),ya&&ya.length>0&&Dh(Je,en,ya.join(" "))}if(us=Gs(ni,20),void 0!==m){const _o=us.projection=[];for(let ya=0;ya<this.ngContentSelectors.length;ya++){const eu=m[ya];_o.push(null!=eu?Array.from(eu):null)}}Uo=function y1(c,d,m,A,k){const ee=m[1],me=function ft(c,d,m){const A=Es();c.firstCreatePass&&(m.providersResolver&&m.providersResolver(m),Dd(c,A,d,Rh(c,d,1,null),m));const k=cu(d,c,A.directiveStart,A);sc(k,d);const ee=wi(A,d);return ee&&sc(ee,d),k}(ee,m,d);if(A.components.push(me),c[8]=me,k&&k.forEach(Je=>Je(me,d)),d.contentQueries){const Je=Es();d.contentQueries(1,me,Je.directiveStart)}const Ne=Es();return!ee.firstCreatePass||null===d.hostBindings&&null===d.hostAttrs||(Rr(Ne.index),rr(m[1],Ne,0,Ne.directiveStart,Ne.directiveEnd,d),zo(d,me)),me}(Zs,this.componentDef,Wi,Or,[E1]),Y_(ni,Wi,null)}finally{Ci()}return new uM(this.componentType,Uo,Zg(us,Wi),Wi,us)}}class uM extends fS{constructor(d,m,A,k,ee){super(),this.location=A,this._rootLView=k,this._tNode=ee,this.instance=m,this.hostView=this.changeDetectorRef=new sM(k),this.componentType=d}get injector(){return new Ml(this._tNode,this._rootLView)}destroy(){this.hostView.destroy()}onDestroy(d){this.hostView.onDestroy(d)}}class jm{}class SS{}const zg=new Map;class MS extends jm{constructor(d,m){super(),this._parent=m,this._bootstrapComponents=[],this.injector=this,this.destroyCbs=[],this.componentFactoryResolver=new yS(this);const A=yi(d);this._bootstrapComponents=tf(A.bootstrap),this._r3Injector=d1(d,m,[{provide:jm,useValue:this},{provide:e0,useValue:this.componentFactoryResolver}],S(d)),this._r3Injector._resolveInjectorDefTypes(),this.instance=this.get(d)}get(d,m=qp.THROW_IF_NOT_FOUND,A=_r.Default){return d===qp||d===jm||d===Pg?this:this._r3Injector.get(d,m,A)}destroy(){const d=this._r3Injector;!d.destroyed&&d.destroy(),this.destroyCbs.forEach(m=>m()),this.destroyCbs=null}onDestroy(d){this.destroyCbs.push(d)}}class Py extends SS{constructor(d){super(),this.moduleType=d,null!==yi(d)&&function cM(c){const d=new Set;!function m(A){const k=yi(A,!0),ee=k.id;null!==ee&&(function TS(c,d,m){if(d&&d!==m)throw new Error(`Duplicate module registered for ${c} - ${S(d)} vs ${S(d.name)}`)}(ee,zg.get(ee),A),zg.set(ee,A));const me=tf(k.imports);for(const Ne of me)d.has(Ne)||(d.add(Ne),m(Ne))}(c)}(d)}create(d){return new MS(this.moduleType,d)}}function OS(c,d,m){const A=uu()+c,k=Yi();return k[A]===jo?u_(k,A,m?d.call(m):d()):sg(k,A)}function AS(c,d,m,A){return PS(Yi(),uu(),c,d,m,A)}function DS(c,d,m,A,k){return NS(Yi(),uu(),c,d,m,A,k)}function xS(c,d,m,A,k,ee){return IS(Yi(),uu(),c,d,m,A,k,ee)}function RS(c,d,m,A,k,ee,me){return function FS(c,d,m,A,k,ee,me,Ne,Je){const kt=d+m;return th(c,kt,k,ee,me,Ne)?u_(c,kt+4,Je?A.call(Je,k,ee,me,Ne):A(k,ee,me,Ne)):Nv(c,kt+4)}(Yi(),uu(),c,d,m,A,k,ee,me)}function wS(c,d,m,A,k,ee,me,Ne){const Je=uu()+c,kt=Yi(),en=th(kt,Je,m,A,k,ee);return Uf(kt,Je+4,me)||en?u_(kt,Je+5,Ne?d.call(Ne,m,A,k,ee,me):d(m,A,k,ee,me)):sg(kt,Je+5)}function Nv(c,d){const m=c[d];return m===jo?void 0:m}function PS(c,d,m,A,k,ee){const me=d+m;return Uf(c,me,k)?u_(c,me+1,ee?A.call(ee,k):A(k)):Nv(c,me+1)}function NS(c,d,m,A,k,ee,me){const Ne=d+m;return eh(c,Ne,k,ee)?u_(c,Ne+2,me?A.call(me,k,ee):A(k,ee)):Nv(c,Ne+2)}function IS(c,d,m,A,k,ee,me,Ne){const Je=d+m;return Lg(c,Je,k,ee,me)?u_(c,Je+3,Ne?A.call(Ne,k,ee,me):A(k,ee,me)):Nv(c,Je+3)}function kS(c,d){const m=aa();let A;const k=c+20;m.firstCreatePass?(A=function _M(c,d){if(d)for(let m=d.length-1;m>=0;m--){const A=d[m];if(c===A.name)return A}}(d,m.pipeRegistry),m.data[k]=A,A.onDestroy&&(m.destroyHooks||(m.destroyHooks=[])).push(k,A.onDestroy)):A=m.data[k];const ee=A.factory||(A.factory=Oi(A.type)),me=fi(ba);try{const Ne=Un(!1),Je=ee();return Un(Ne),function z0(c,d,m,A){m>=c.data.length&&(c.data[m]=null,c.blueprint[m]=null),d[m]=A}(m,Yi(),k,Je),Je}finally{fi(me)}}function $S(c,d,m){const A=c+20,k=Yi(),ee=Os(k,A);return Iv(k,A)?PS(k,uu(),d,ee.transform,m,ee):ee.transform(m)}function HS(c,d,m,A){const k=c+20,ee=Yi(),me=Os(ee,k);return Iv(ee,k)?NS(ee,uu(),d,me.transform,m,A,me):me.transform(m,A)}function BS(c,d,m,A,k){const ee=c+20,me=Yi(),Ne=Os(me,ee);return Iv(me,ee)?IS(me,uu(),d,Ne.transform,m,A,k,Ne):Ne.transform(m,A,k)}function Iv(c,d){return c[1].data[d].pure}function Ny(c){return d=>{setTimeout(c,void 0,d)}}const X_=class vM extends r.xQ{constructor(d=!1){super(),this.__isAsync=d}emit(d){super.next(d)}subscribe(d,m,A){var k,ee,me;let Ne=d,Je=m||(()=>null),kt=A;if(d&&"object"==typeof d){const Ln=d;Ne=null===(k=Ln.next)||void 0===k?void 0:k.bind(Ln),Je=null===(ee=Ln.error)||void 0===ee?void 0:ee.bind(Ln),kt=null===(me=Ln.complete)||void 0===me?void 0:me.bind(Ln)}this.__isAsync&&(Je=Ny(Je),Ne&&(Ne=Ny(Ne)),kt&&(kt=Ny(kt)));const en=super.subscribe({next:Ne,error:Je,complete:kt});return d instanceof a.w&&d.add(en),en}};function yM(){return this._results[pm()]()}class Iy{constructor(d=!1){this._emitDistinctChangesOnly=d,this.dirty=!0,this._results=[],this._changesDetected=!1,this._changes=null,this.length=0,this.first=void 0,this.last=void 0;const m=pm(),A=Iy.prototype;A[m]||(A[m]=yM)}get changes(){return this._changes||(this._changes=new X_)}get(d){return this._results[d]}map(d){return this._results.map(d)}filter(d){return this._results.filter(d)}find(d){return this._results.find(d)}reduce(d,m){return this._results.reduce(d,m)}forEach(d){this._results.forEach(d)}some(d){return this._results.some(d)}toArray(){return this._results.slice()}toString(){return this._results.toString()}reset(d,m){const A=this;A.dirty=!1;const k=Lc(d);(this._changesDetected=!function yp(c,d,m){if(c.length!==d.length)return!1;for(let A=0;A<c.length;A++){let k=c[A],ee=d[A];if(m&&(k=m(k),ee=m(ee)),ee!==k)return!1}return!0}(A._results,k,m))&&(A._results=k,A.length=k.length,A.last=k[this.length-1],A.first=k[0])}notifyOnChanges(){this._changes&&(this._changesDetected||!this._emitDistinctChangesOnly)&&this._changes.emit(this)}setDirty(){this.dirty=!0}destroy(){this.changes.complete(),this.changes.unsubscribe()}}Symbol;let Fv=(()=>{class c{}return c.__NG_ELEMENT_ID__=SM,c})();const EM=Fv,bM=class extends EM{constructor(d,m,A){super(),this._declarationLView=d,this._declarationTContainer=m,this.elementRef=A}createEmbeddedView(d){const m=this._declarationTContainer.tViews,A=lm(this._declarationLView,m,d,16,null,m.declTNode,null,null,null,null);A[17]=this._declarationLView[this._declarationTContainer.index];const ee=this._declarationLView[19];return null!==ee&&(A[19]=ee.createEmbeddedView(m)),Y_(m,A,d),new wv(A)}};function SM(){return n0(Es(),Yi())}function n0(c,d){return 4&c.type?new bM(d,c,Zg(c,d)):null}let r0=(()=>{class c{}return c.__NG_ELEMENT_ID__=TM,c})();function TM(){return jS(Es(),Yi())}const CM=r0,US=class extends CM{constructor(d,m,A){super(),this._lContainer=d,this._hostTNode=m,this._hostLView=A}get element(){return Zg(this._hostTNode,this._hostLView)}get injector(){return new Ml(this._hostTNode,this._hostLView)}get parentInjector(){const d=cc(this._hostTNode,this._hostLView);if(Ae(d)){const m=Ot(d,this._hostLView),A=ge(d);return new Ml(m[1].data[A+8],m)}return new Ml(null,this._hostLView)}clear(){for(;this.length>0;)this.remove(this.length-1)}get(d){const m=YS(this._lContainer);return null!==m&&m[d]||null}get length(){return this._lContainer.length-10}createEmbeddedView(d,m,A){const k=d.createEmbeddedView(m||{});return this.insert(k,A),k}createComponent(d,m,A,k,ee){const me=d&&!function Wd(c){return"function"==typeof c}(d);let Ne;if(me)Ne=m;else{const Ln=m||{};Ne=Ln.index,A=Ln.injector,k=Ln.projectableNodes,ee=Ln.ngModuleRef}const Je=me?d:new wy(yn(d)),kt=A||this.parentInjector;if(!ee&&null==Je.ngModule){const Or=(me?kt:this.parentInjector).get(jm,null);Or&&(ee=Or)}const en=Je.create(kt,k,void 0,ee);return this.insert(en.hostView,Ne),en}insert(d,m){const A=d._lView,k=A[1];if(function al(c){return ma(c[3])}(A)){const en=this.indexOf(d);if(-1!==en)this.detach(en);else{const Ln=A[3],Or=new US(Ln,Ln[6],Ln[3]);Or.detach(Or.indexOf(d))}}const ee=this._adjustIndex(m),me=this._lContainer;!function Vp(c,d,m,A){const k=10+A,ee=m.length;A>0&&(m[k-1][4]=d),A<ee-10?(d[4]=m[k],od(m,10+A,d)):(m.push(d),d[4]=null),d[3]=m;const me=d[17];null!==me&&m!==me&&function Kf(c,d){const m=c[9];d[16]!==d[3][3][16]&&(c[2]=!0),null===m?c[9]=[d]:m.push(d)}(me,d);const Ne=d[19];null!==Ne&&Ne.insertView(c),d[2]|=128}(k,A,me,ee);const Ne=Ud(ee,me),Je=A[11],kt=Ah(Je,me[7]);return null!==kt&&function pp(c,d,m,A,k,ee){A[0]=k,A[6]=d,Jp(c,A,m,1,k,ee)}(k,me[6],Je,A,kt,Ne),d.attachToViewContainerRef(),od(Fy(me),ee,d),d}move(d,m){return this.insert(d,m)}indexOf(d){const m=YS(this._lContainer);return null!==m?m.indexOf(d):-1}remove(d){const m=this._adjustIndex(d,-1),A=r_(this._lContainer,m);A&&(nc(Fy(this._lContainer),m),Ap(A[1],A))}detach(d){const m=this._adjustIndex(d,-1),A=r_(this._lContainer,m);return A&&null!=nc(Fy(this._lContainer),m)?new wv(A):null}_adjustIndex(d,m=0){return null==d?this.length+m:d}};function YS(c){return c[8]}function Fy(c){return c[8]||(c[8]=[])}function jS(c,d){let m;const A=d[c.index];if(ma(A))m=A;else{let k;if(8&c.type)k=pt(A);else{const ee=d[11];k=ee.createComment("");const me=wi(c,d);ep(ee,Ah(ee,me),k,function E_(c,d){return Ya(c)?c.nextSibling(d):d.nextSibling}(ee,me),!1)}d[c.index]=m=_p(A,d,k,c),xg(d,m)}return new US(m,c,d)}class Ly{constructor(d){this.queryList=d,this.matches=null}clone(){return new Ly(this.queryList)}setDirty(){this.queryList.setDirty()}}class ky{constructor(d=[]){this.queries=d}createEmbeddedView(d){const m=d.queries;if(null!==m){const A=null!==d.contentQueries?d.contentQueries[0]:m.length,k=[];for(let ee=0;ee<A;ee++){const me=m.getByIndex(ee);k.push(this.queries[me.indexInDeclarationView].clone())}return new ky(k)}return null}insertView(d){this.dirtyQueriesWithMatches(d)}detachView(d){this.dirtyQueriesWithMatches(d)}dirtyQueriesWithMatches(d){for(let m=0;m<this.queries.length;m++)null!==XS(d,m).matches&&this.queries[m].setDirty()}}class GS{constructor(d,m,A=null){this.predicate=d,this.flags=m,this.read=A}}class $y{constructor(d=[]){this.queries=d}elementStart(d,m){for(let A=0;A<this.queries.length;A++)this.queries[A].elementStart(d,m)}elementEnd(d){for(let m=0;m<this.queries.length;m++)this.queries[m].elementEnd(d)}embeddedTView(d){let m=null;for(let A=0;A<this.length;A++){const k=null!==m?m.length:0,ee=this.getByIndex(A).embeddedTView(d,k);ee&&(ee.indexInDeclarationView=A,null!==m?m.push(ee):m=[ee])}return null!==m?new $y(m):null}template(d,m){for(let A=0;A<this.queries.length;A++)this.queries[A].template(d,m)}getByIndex(d){return this.queries[d]}get length(){return this.queries.length}track(d){this.queries.push(d)}}class Hy{constructor(d,m=-1){this.metadata=d,this.matches=null,this.indexInDeclarationView=-1,this.crossesNgTemplate=!1,this._appliesToNextNode=!0,this._declarationNodeIndex=m}elementStart(d,m){this.isApplyingToNode(m)&&this.matchTNode(d,m)}elementEnd(d){this._declarationNodeIndex===d.index&&(this._appliesToNextNode=!1)}template(d,m){this.elementStart(d,m)}embeddedTView(d,m){return this.isApplyingToNode(d)?(this.crossesNgTemplate=!0,this.addMatch(-d.index,m),new Hy(this.metadata)):null}isApplyingToNode(d){if(this._appliesToNextNode&&1!=(1&this.metadata.flags)){const m=this._declarationNodeIndex;let A=d.parent;for(;null!==A&&8&A.type&&A.index!==m;)A=A.parent;return m===(null!==A?A.index:-1)}return this._appliesToNextNode}matchTNode(d,m){const A=this.metadata.predicate;if(Array.isArray(A))for(let k=0;k<A.length;k++){const ee=A[k];this.matchTNodeWithReadOption(d,m,AM(m,ee)),this.matchTNodeWithReadOption(d,m,Fc(m,d,ee,!1,!1))}else A===Fv?4&m.type&&this.matchTNodeWithReadOption(d,m,-1):this.matchTNodeWithReadOption(d,m,Fc(m,d,A,!1,!1))}matchTNodeWithReadOption(d,m,A){if(null!==A){const k=this.metadata.read;if(null!==k)if(k===Rv||k===r0||k===Fv&&4&m.type)this.addMatch(m.index,-2);else{const ee=Fc(m,d,k,!1,!1);null!==ee&&this.addMatch(m.index,ee)}else this.addMatch(m.index,A)}}addMatch(d,m){null===this.matches?this.matches=[d,m]:this.matches.push(d,m)}}function AM(c,d){const m=c.localNames;if(null!==m)for(let A=0;A<m.length;A+=2)if(m[A]===d)return m[A+1];return null}function xM(c,d,m,A){return-1===m?function DM(c,d){return 11&c.type?Zg(c,d):4&c.type?n0(c,d):null}(d,c):-2===m?function RM(c,d,m){return m===Rv?Zg(d,c):m===Fv?n0(d,c):m===r0?jS(d,c):void 0}(c,d,A):cu(c,c[1],m,d)}function VS(c,d,m,A){const k=d[19].queries[A];if(null===k.matches){const ee=c.data,me=m.matches,Ne=[];for(let Je=0;Je<me.length;Je+=2){const kt=me[Je];Ne.push(kt<0?null:xM(d,ee[kt],me[Je+1],m.metadata.read))}k.matches=Ne}return k.matches}function o0(c,d,m,A){const k=c.queries.getByIndex(m),ee=k.matches;if(null!==ee){const me=VS(c,d,k,m);for(let Ne=0;Ne<ee.length;Ne+=2){const Je=ee[Ne];if(Je>0)A.push(me[Ne/2]);else{const kt=ee[Ne+1],en=d[-Je];for(let Ln=10;Ln<en.length;Ln++){const Or=en[Ln];Or[17]===Or[3]&&o0(Or[1],Or,kt,A)}if(null!==en[9]){const Ln=en[9];for(let Or=0;Or<Ln.length;Or++){const ni=Ln[Or];o0(ni[1],ni,kt,A)}}}}}return A}function By(c){const d=Yi(),m=aa(),A=De();ct(A+1);const k=XS(m,A);if(c.dirty&&Fo(d)===(2==(2&k.metadata.flags))){if(null===k.matches)c.reset([]);else{const ee=k.crossesNgTemplate?o0(m,d,A,[]):VS(m,d,k,A);c.reset(ee,nM),c.notifyOnChanges()}return!0}return!1}function ZS(c,d,m){const A=aa();A.firstCreatePass&&(QS(A,new GS(c,d,m),-1),2==(2&d)&&(A.staticViewQueries=!0)),JS(A,Yi(),d)}function zS(c,d,m,A){const k=aa();if(k.firstCreatePass){const ee=Es();QS(k,new GS(d,m,A),ee.index),function PM(c,d){const m=c.contentQueries||(c.contentQueries=[]);d!==(m.length?m[m.length-1]:-1)&&m.push(c.queries.length-1,d)}(k,c),2==(2&m)&&(k.staticContentQueries=!0)}JS(k,Yi(),m)}function WS(){return function wM(c,d){return c[19].queries[d].queryList}(Yi(),De())}function JS(c,d,m){const A=new Iy(4==(4&m));Om(c,d,A,A.destroy),null===d[19]&&(d[19]=new ky),d[19].queries.push(new Ly(A))}function QS(c,d,m){null===c.queries&&(c.queries=new $y),c.queries.track(new Hy(d,m))}function XS(c,d){return c.queries.getByIndex(d)}function KS(c,d){return n0(c,d)}const WM=Ec("Input",c=>({bindingPropertyName:c})),hT=Ec("Output",c=>({bindingPropertyName:c}));function l0(...c){}const Jy=new qa("Application Initializer");let Qy=(()=>{class c{constructor(m){this.appInits=m,this.resolve=l0,this.reject=l0,this.initialized=!1,this.done=!1,this.donePromise=new Promise((A,k)=>{this.resolve=A,this.reject=k})}runInitializers(){if(this.initialized)return;const m=[],A=()=>{this.done=!0,this.resolve()};if(this.appInits)for(let k=0;k<this.appInits.length;k++){const ee=this.appInits[k]();if(oy(ee))m.push(ee);else if(ob(ee)){const me=new Promise((Ne,Je)=>{ee.subscribe({complete:Ne,error:Je})});m.push(me)}}Promise.all(m).then(()=>{A()}).catch(k=>{this.reject(k)}),0===m.length&&A(),this.initialized=!0}}return c.\u0275fac=function(m){return new(m||c)(ve(Jy,8))},c.\u0275prov=xt({token:c,factory:c.\u0275fac,providedIn:"root"}),c})();const _T=new qa("AppId",{providedIn:"root",factory:function mT(){return`${Xy()}${Xy()}${Xy()}`}});function Xy(){return String.fromCharCode(97+Math.floor(25*Math.random()))}const gT=new qa("Platform Initializer"),XM=new qa("Platform ID",{providedIn:"platform",factory:()=>"unknown"}),vT=new qa("appBootstrapListener");let KM=(()=>{class c{log(m){console.log(m)}warn(m){console.warn(m)}}return c.\u0275fac=function(m){return new(m||c)},c.\u0275prov=xt({token:c,factory:c.\u0275fac,providedIn:"platform"}),c})();const Ky=new qa("LocaleId",{providedIn:"root",factory:()=>xe(Ky,_r.Optional|_r.SkipSelf)||function qM(){return"undefined"!=typeof $localize&&$localize.locale||z1}()}),eO=new qa("DefaultCurrencyCode",{providedIn:"root",factory:()=>"USD"});class tO{constructor(d,m){this.ngModuleFactory=d,this.componentFactories=m}}let nO=(()=>{class c{compileModuleSync(m){return new Py(m)}compileModuleAsync(m){return Promise.resolve(this.compileModuleSync(m))}compileModuleAndAllComponentsSync(m){const A=this.compileModuleSync(m),ee=tf(yi(m).declarations).reduce((me,Ne)=>{const Je=yn(Ne);return Je&&me.push(new wy(Je)),me},[]);return new tO(A,ee)}compileModuleAndAllComponentsAsync(m){return Promise.resolve(this.compileModuleAndAllComponentsSync(m))}clearCache(){}clearCacheFor(m){}getModuleId(m){}}return c.\u0275fac=function(m){return new(m||c)},c.\u0275prov=xt({token:c,factory:c.\u0275fac,providedIn:"root"}),c})();const VD=(()=>Promise.resolve(0))();function qy(c){"undefined"==typeof Zone?VD.then(()=>{c&&c.apply(null,null)}):Zone.current.scheduleMicroTask("scheduleMicrotask",c)}class w_{constructor({enableLongStackTrace:d=!1,shouldCoalesceEventChangeDetection:m=!1,shouldCoalesceRunChangeDetection:A=!1}){if(this.hasPendingMacrotasks=!1,this.hasPendingMicrotasks=!1,this.isStable=!0,this.onUnstable=new X_(!1),this.onMicrotaskEmpty=new X_(!1),this.onStable=new X_(!1),this.onError=new X_(!1),"undefined"==typeof Zone)throw new Error("In this configuration Angular requires Zone.js");Zone.assertZonePatched();const k=this;k._nesting=0,k._outer=k._inner=Zone.current,Zone.TaskTrackingZoneSpec&&(k._inner=k._inner.fork(new Zone.TaskTrackingZoneSpec)),d&&Zone.longStackTraceZoneSpec&&(k._inner=k._inner.fork(Zone.longStackTraceZoneSpec)),k.shouldCoalesceEventChangeDetection=!A&&m,k.shouldCoalesceRunChangeDetection=A,k.lastRequestAnimationFrameId=-1,k.nativeRequestAnimationFrame=function oO(){let c=vr.requestAnimationFrame,d=vr.cancelAnimationFrame;if("undefined"!=typeof Zone&&c&&d){const m=c[Zone.__symbol__("OriginalDelegate")];m&&(c=m);const A=d[Zone.__symbol__("OriginalDelegate")];A&&(d=A)}return{nativeRequestAnimationFrame:c,nativeCancelAnimationFrame:d}}().nativeRequestAnimationFrame,function aO(c){const d=()=>{!function sO(c){c.isCheckStableRunning||-1!==c.lastRequestAnimationFrameId||(c.lastRequestAnimationFrameId=c.nativeRequestAnimationFrame.call(vr,()=>{c.fakeTopEventTask||(c.fakeTopEventTask=Zone.root.scheduleEventTask("fakeTopEventTask",()=>{c.lastRequestAnimationFrameId=-1,fg(c),c.isCheckStableRunning=!0,tE(c),c.isCheckStableRunning=!1},void 0,()=>{},()=>{})),c.fakeTopEventTask.invoke()}),fg(c))}(c)};c._inner=c._inner.fork({name:"angular",properties:{isAngularZone:!0},onInvokeTask:(m,A,k,ee,me,Ne)=>{try{return yT(c),m.invokeTask(k,ee,me,Ne)}finally{(c.shouldCoalesceEventChangeDetection&&"eventTask"===ee.type||c.shouldCoalesceRunChangeDetection)&&d(),ET(c)}},onInvoke:(m,A,k,ee,me,Ne,Je)=>{try{return yT(c),m.invoke(k,ee,me,Ne,Je)}finally{c.shouldCoalesceRunChangeDetection&&d(),ET(c)}},onHasTask:(m,A,k,ee)=>{m.hasTask(k,ee),A===k&&("microTask"==ee.change?(c._hasPendingMicrotasks=ee.microTask,fg(c),tE(c)):"macroTask"==ee.change&&(c.hasPendingMacrotasks=ee.macroTask))},onHandleError:(m,A,k,ee)=>(m.handleError(k,ee),c.runOutsideAngular(()=>c.onError.emit(ee)),!1)})}(k)}static isInAngularZone(){return"undefined"!=typeof Zone&&!0===Zone.current.get("isAngularZone")}static assertInAngularZone(){if(!w_.isInAngularZone())throw new Error("Expected to be in Angular Zone, but it is not!")}static assertNotInAngularZone(){if(w_.isInAngularZone())throw new Error("Expected to not be in Angular Zone, but it is!")}run(d,m,A){return this._inner.run(d,m,A)}runTask(d,m,A,k){const ee=this._inner,me=ee.scheduleEventTask("NgZoneEvent: "+k,d,eE,l0,l0);try{return ee.runTask(me,m,A)}finally{ee.cancelTask(me)}}runGuarded(d,m,A){return this._inner.runGuarded(d,m,A)}runOutsideAngular(d){return this._outer.run(d)}}const eE={};function tE(c){if(0==c._nesting&&!c.hasPendingMicrotasks&&!c.isStable)try{c._nesting++,c.onMicrotaskEmpty.emit(null)}finally{if(c._nesting--,!c.hasPendingMicrotasks)try{c.runOutsideAngular(()=>c.onStable.emit(null))}finally{c.isStable=!0}}}function fg(c){c.hasPendingMicrotasks=!!(c._hasPendingMicrotasks||(c.shouldCoalesceEventChangeDetection||c.shouldCoalesceRunChangeDetection)&&-1!==c.lastRequestAnimationFrameId)}function yT(c){c._nesting++,c.isStable&&(c.isStable=!1,c.onUnstable.emit(null))}function ET(c){c._nesting--,tE(c)}class lO{constructor(){this.hasPendingMicrotasks=!1,this.hasPendingMacrotasks=!1,this.isStable=!0,this.onUnstable=new X_,this.onMicrotaskEmpty=new X_,this.onStable=new X_,this.onError=new X_}run(d,m,A){return d.apply(m,A)}runGuarded(d,m,A){return d.apply(m,A)}runOutsideAngular(d){return d()}runTask(d,m,A,k){return d.apply(m,A)}}let nE=(()=>{class c{constructor(m){this._ngZone=m,this._pendingCount=0,this._isZoneStable=!0,this._didWork=!1,this._callbacks=[],this.taskTrackingZone=null,this._watchAngularEvents(),m.run(()=>{this.taskTrackingZone="undefined"==typeof Zone?null:Zone.current.get("TaskTrackingZone")})}_watchAngularEvents(){this._ngZone.onUnstable.subscribe({next:()=>{this._didWork=!0,this._isZoneStable=!1}}),this._ngZone.runOutsideAngular(()=>{this._ngZone.onStable.subscribe({next:()=>{w_.assertNotInAngularZone(),qy(()=>{this._isZoneStable=!0,this._runCallbacksIfReady()})}})})}increasePendingRequestCount(){return this._pendingCount+=1,this._didWork=!0,this._pendingCount}decreasePendingRequestCount(){if(this._pendingCount-=1,this._pendingCount<0)throw new Error("pending async requests below zero");return this._runCallbacksIfReady(),this._pendingCount}isStable(){return this._isZoneStable&&0===this._pendingCount&&!this._ngZone.hasPendingMacrotasks}_runCallbacksIfReady(){if(this.isStable())qy(()=>{for(;0!==this._callbacks.length;){let m=this._callbacks.pop();clearTimeout(m.timeoutId),m.doneCb(this._didWork)}this._didWork=!1});else{let m=this.getPendingTasks();this._callbacks=this._callbacks.filter(A=>!A.updateCb||!A.updateCb(m)||(clearTimeout(A.timeoutId),!1)),this._didWork=!0}}getPendingTasks(){return this.taskTrackingZone?this.taskTrackingZone.macroTasks.map(m=>({source:m.source,creationLocation:m.creationLocation,data:m.data})):[]}addCallback(m,A,k){let ee=-1;A&&A>0&&(ee=setTimeout(()=>{this._callbacks=this._callbacks.filter(me=>me.timeoutId!==ee),m(this._didWork,this.getPendingTasks())},A)),this._callbacks.push({doneCb:m,timeoutId:ee,updateCb:k})}whenStable(m,A,k){if(k&&!this.taskTrackingZone)throw new Error('Task tracking zone is required when passing an update callback to whenStable(). Is "zone.js/plugins/task-tracking" loaded?');this.addCallback(m,A,k),this._runCallbacksIfReady()}getPendingRequestCount(){return this._pendingCount}findProviders(m,A,k){return[]}}return c.\u0275fac=function(m){return new(m||c)(ve(w_))},c.\u0275prov=xt({token:c,factory:c.\u0275fac}),c})(),uO=(()=>{class c{constructor(){this._applications=new Map,rE.addToWindow(this)}registerApplication(m,A){this._applications.set(m,A)}unregisterApplication(m){this._applications.delete(m)}unregisterAllApplications(){this._applications.clear()}getTestability(m){return this._applications.get(m)||null}getAllTestabilities(){return Array.from(this._applications.values())}getAllRootElements(){return Array.from(this._applications.keys())}findTestabilityInTree(m,A=!0){return rE.findTestabilityInTree(this,m,A)}}return c.\u0275fac=function(m){return new(m||c)},c.\u0275prov=xt({token:c,factory:c.\u0275fac,providedIn:"platform"}),c})();class cO{addToWindow(d){}findTestabilityInTree(d,m,A){return null}}function dO(c){rE=c}let rE=new cO,pg=null;const bT=new qa("AllowMultipleToken"),ST=new qa("PlatformOnDestroy");class hO{constructor(d,m){this.name=d,this.token=m}}function TT(c,d,m=[]){const A=`Platform: ${d}`,k=new qa(A);return(ee=[])=>{let me=iE();if(!me||me.injector.get(bT,!1)){const Ne=[...m,...ee,{provide:k,useValue:!0}];c?c(Ne):function _O(c){if(pg&&!pg.get(bT,!1))throw new q(400,"");pg=c;const d=c.get(CT),m=c.get(gT,null);m&&m.forEach(A=>A())}(function gO(c=[],d){return qp.create({name:d,providers:[{provide:gu,useValue:"platform"},{provide:ST,useValue:()=>pg=null},...c]})}(Ne,A))}return function mO(c){const d=iE();if(!d)throw new q(401,"");return d}()}}function iE(){var c;return null!==(c=null==pg?void 0:pg.get(CT))&&void 0!==c?c:null}let CT=(()=>{class c{constructor(m){this._injector=m,this._modules=[],this._destroyListeners=[],this._destroyed=!1}bootstrapModuleFactory(m,A){const Ne=function vO(c,d){let m;return m="noop"===c?new lO:("zone.js"===c?void 0:c)||new w_({enableLongStackTrace:!1,shouldCoalesceEventChangeDetection:!!(null==d?void 0:d.ngZoneEventCoalescing),shouldCoalesceRunChangeDetection:!!(null==d?void 0:d.ngZoneRunCoalescing)}),m}(A?A.ngZone:void 0,{ngZoneEventCoalescing:A&&A.ngZoneEventCoalescing||!1,ngZoneRunCoalescing:A&&A.ngZoneRunCoalescing||!1}),Je=[{provide:w_,useValue:Ne}];return Ne.run(()=>{const kt=qp.create({providers:Je,parent:this.injector,name:m.moduleType.name}),en=m.create(kt),Ln=en.injector.get(Cp,null);if(!Ln)throw new q(402,"");return Ne.runOutsideAngular(()=>{const Or=Ne.onError.subscribe({next:ni=>{Ln.handleError(ni)}});en.onDestroy(()=>{sE(this._modules,en),Or.unsubscribe()})}),function yO(c,d,m){try{const A=m();return oy(A)?A.catch(k=>{throw d.runOutsideAngular(()=>c.handleError(k)),k}):A}catch(A){throw d.runOutsideAngular(()=>c.handleError(A)),A}}(Ln,Ne,()=>{const Or=en.injector.get(Qy);return Or.runInitializers(),Or.donePromise.then(()=>(function l2(c){(function Nt(c,d){null==c&&Yt(d,c,null,"!=")})(c,"Expected localeId to be defined"),"string"==typeof c&&(Gb=c.toLowerCase().replace(/_/g,"-"))}(en.injector.get(Ky,z1)||z1),this._moduleDoBootstrap(en),en))})})}bootstrapModule(m,A=[]){const k=MT({},A);return function fO(c,d,m){const A=new Py(m);return Promise.resolve(A)}(0,0,m).then(ee=>this.bootstrapModuleFactory(ee,k))}_moduleDoBootstrap(m){const A=m.injector.get(oE);if(m._bootstrapComponents.length>0)m._bootstrapComponents.forEach(k=>A.bootstrap(k));else{if(!m.instance.ngDoBootstrap)throw new q(403,"");m.instance.ngDoBootstrap(A)}this._modules.push(m)}onDestroy(m){this._destroyListeners.push(m)}get injector(){return this._injector}destroy(){if(this._destroyed)throw new q(404,"");this._modules.slice().forEach(A=>A.destroy()),this._destroyListeners.forEach(A=>A());const m=this._injector.get(ST,null);null==m||m(),this._destroyed=!0}get destroyed(){return this._destroyed}}return c.\u0275fac=function(m){return new(m||c)(ve(qp))},c.\u0275prov=xt({token:c,factory:c.\u0275fac,providedIn:"platform"}),c})();function MT(c,d){return Array.isArray(d)?d.reduce(MT,c):Object.assign(Object.assign({},c),d)}let oE=(()=>{class c{constructor(m,A,k,ee){this._zone=m,this._injector=A,this._exceptionHandler=k,this._initStatus=ee,this._bootstrapListeners=[],this._views=[],this._runningTick=!1,this._stable=!0,this.componentTypes=[],this.components=[],this._onMicrotaskEmptySubscription=this._zone.onMicrotaskEmpty.subscribe({next:()=>{this._zone.run(()=>{this.tick()})}});const me=new f.y(Je=>{this._stable=this._zone.isStable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks,this._zone.runOutsideAngular(()=>{Je.next(this._stable),Je.complete()})}),Ne=new f.y(Je=>{let kt;this._zone.runOutsideAngular(()=>{kt=this._zone.onStable.subscribe(()=>{w_.assertNotInAngularZone(),qy(()=>{!this._stable&&!this._zone.hasPendingMacrotasks&&!this._zone.hasPendingMicrotasks&&(this._stable=!0,Je.next(!0))})})});const en=this._zone.onUnstable.subscribe(()=>{w_.assertInAngularZone(),this._stable&&(this._stable=!1,this._zone.runOutsideAngular(()=>{Je.next(!1)}))});return()=>{kt.unsubscribe(),en.unsubscribe()}});this.isStable=(0,u.T)(me,Ne.pipe((0,e.B)()))}bootstrap(m,A){if(!this._initStatus.done)throw new q(405,"");let k;k=m instanceof pS?m:this._injector.get(e0).resolveComponentFactory(m),this.componentTypes.push(k.componentType);const ee=function pO(c){return c.isBoundToModule}(k)?void 0:this._injector.get(jm),Ne=k.create(qp.NULL,[],A||k.selector,ee),Je=Ne.location.nativeElement,kt=Ne.injector.get(nE,null),en=kt&&Ne.injector.get(uO);return kt&&en&&en.registerApplication(Je,kt),Ne.onDestroy(()=>{this.detachView(Ne.hostView),sE(this.components,Ne),en&&en.unregisterApplication(Je)}),this._loadComponent(Ne),Ne}tick(){if(this._runningTick)throw new q(101,"");try{this._runningTick=!0;for(let m of this._views)m.detectChanges()}catch(m){this._zone.runOutsideAngular(()=>this._exceptionHandler.handleError(m))}finally{this._runningTick=!1}}attachView(m){const A=m;this._views.push(A),A.attachToAppRef(this)}detachView(m){const A=m;sE(this._views,A),A.detachFromAppRef()}_loadComponent(m){this.attachView(m.hostView),this.tick(),this.components.push(m),this._injector.get(vT,[]).concat(this._bootstrapListeners).forEach(k=>k(m))}ngOnDestroy(){this._views.slice().forEach(m=>m.destroy()),this._onMicrotaskEmptySubscription.unsubscribe()}get viewCount(){return this._views.length}}return c.\u0275fac=function(m){return new(m||c)(ve(w_),ve(qp),ve(Cp),ve(Qy))},c.\u0275prov=xt({token:c,factory:c.\u0275fac,providedIn:"root"}),c})();function sE(c,d){const m=c.indexOf(d);m>-1&&c.splice(m,1)}let AT=!0,DT=!1;function bO(){return DT=!0,AT}function SO(){if(DT)throw new Error("Cannot enable prod mode after platform setup.");AT=!1}let TO=(()=>{class c{}return c.__NG_ELEMENT_ID__=CO,c})();function CO(c){return function MO(c,d,m){if(fa(c)&&!m){const A=ws(c.index,d);return new wv(A,A)}return 47&c.type?new wv(d[16],d):null}(Es(),Yi(),16==(16&c))}class NT{constructor(){}supports(d){return Im(d)}create(d){return new wO(d)}}const RO=(c,d)=>d;class wO{constructor(d){this.length=0,this._linkedRecords=null,this._unlinkedRecords=null,this._previousItHead=null,this._itHead=null,this._itTail=null,this._additionsHead=null,this._additionsTail=null,this._movesHead=null,this._movesTail=null,this._removalsHead=null,this._removalsTail=null,this._identityChangesHead=null,this._identityChangesTail=null,this._trackByFn=d||RO}forEachItem(d){let m;for(m=this._itHead;null!==m;m=m._next)d(m)}forEachOperation(d){let m=this._itHead,A=this._removalsHead,k=0,ee=null;for(;m||A;){const me=!A||m&&m.currentIndex<FT(A,k,ee)?m:A,Ne=FT(me,k,ee),Je=me.currentIndex;if(me===A)k--,A=A._nextRemoved;else if(m=m._next,null==me.previousIndex)k++;else{ee||(ee=[]);const kt=Ne-k,en=Je-k;if(kt!=en){for(let Or=0;Or<kt;Or++){const ni=Or<ee.length?ee[Or]:ee[Or]=0,Wi=ni+Or;en<=Wi&&Wi<kt&&(ee[Or]=ni+1)}ee[me.previousIndex]=en-kt}}Ne!==Je&&d(me,Ne,Je)}}forEachPreviousItem(d){let m;for(m=this._previousItHead;null!==m;m=m._nextPrevious)d(m)}forEachAddedItem(d){let m;for(m=this._additionsHead;null!==m;m=m._nextAdded)d(m)}forEachMovedItem(d){let m;for(m=this._movesHead;null!==m;m=m._nextMoved)d(m)}forEachRemovedItem(d){let m;for(m=this._removalsHead;null!==m;m=m._nextRemoved)d(m)}forEachIdentityChange(d){let m;for(m=this._identityChangesHead;null!==m;m=m._nextIdentityChange)d(m)}diff(d){if(null==d&&(d=[]),!Im(d))throw new q(900,"");return this.check(d)?this:null}onDestroy(){}check(d){this._reset();let k,ee,me,m=this._itHead,A=!1;if(Array.isArray(d)){this.length=d.length;for(let Ne=0;Ne<this.length;Ne++)ee=d[Ne],me=this._trackByFn(Ne,ee),null!==m&&Object.is(m.trackById,me)?(A&&(m=this._verifyReinsertion(m,ee,me,Ne)),Object.is(m.item,ee)||this._addIdentityChange(m,ee)):(m=this._mismatch(m,ee,me,Ne),A=!0),m=m._next}else k=0,function Fm(c,d){if(Array.isArray(c))for(let m=0;m<c.length;m++)d(c[m]);else{const m=c[pm()]();let A;for(;!(A=m.next()).done;)d(A.value)}}(d,Ne=>{me=this._trackByFn(k,Ne),null!==m&&Object.is(m.trackById,me)?(A&&(m=this._verifyReinsertion(m,Ne,me,k)),Object.is(m.item,Ne)||this._addIdentityChange(m,Ne)):(m=this._mismatch(m,Ne,me,k),A=!0),m=m._next,k++}),this.length=k;return this._truncate(m),this.collection=d,this.isDirty}get isDirty(){return null!==this._additionsHead||null!==this._movesHead||null!==this._removalsHead||null!==this._identityChangesHead}_reset(){if(this.isDirty){let d;for(d=this._previousItHead=this._itHead;null!==d;d=d._next)d._nextPrevious=d._next;for(d=this._additionsHead;null!==d;d=d._nextAdded)d.previousIndex=d.currentIndex;for(this._additionsHead=this._additionsTail=null,d=this._movesHead;null!==d;d=d._nextMoved)d.previousIndex=d.currentIndex;this._movesHead=this._movesTail=null,this._removalsHead=this._removalsTail=null,this._identityChangesHead=this._identityChangesTail=null}}_mismatch(d,m,A,k){let ee;return null===d?ee=this._itTail:(ee=d._prev,this._remove(d)),null!==(d=null===this._unlinkedRecords?null:this._unlinkedRecords.get(A,null))?(Object.is(d.item,m)||this._addIdentityChange(d,m),this._reinsertAfter(d,ee,k)):null!==(d=null===this._linkedRecords?null:this._linkedRecords.get(A,k))?(Object.is(d.item,m)||this._addIdentityChange(d,m),this._moveAfter(d,ee,k)):d=this._addAfter(new PO(m,A),ee,k),d}_verifyReinsertion(d,m,A,k){let ee=null===this._unlinkedRecords?null:this._unlinkedRecords.get(A,null);return null!==ee?d=this._reinsertAfter(ee,d._prev,k):d.currentIndex!=k&&(d.currentIndex=k,this._addToMoves(d,k)),d}_truncate(d){for(;null!==d;){const m=d._next;this._addToRemovals(this._unlink(d)),d=m}null!==this._unlinkedRecords&&this._unlinkedRecords.clear(),null!==this._additionsTail&&(this._additionsTail._nextAdded=null),null!==this._movesTail&&(this._movesTail._nextMoved=null),null!==this._itTail&&(this._itTail._next=null),null!==this._removalsTail&&(this._removalsTail._nextRemoved=null),null!==this._identityChangesTail&&(this._identityChangesTail._nextIdentityChange=null)}_reinsertAfter(d,m,A){null!==this._unlinkedRecords&&this._unlinkedRecords.remove(d);const k=d._prevRemoved,ee=d._nextRemoved;return null===k?this._removalsHead=ee:k._nextRemoved=ee,null===ee?this._removalsTail=k:ee._prevRemoved=k,this._insertAfter(d,m,A),this._addToMoves(d,A),d}_moveAfter(d,m,A){return this._unlink(d),this._insertAfter(d,m,A),this._addToMoves(d,A),d}_addAfter(d,m,A){return this._insertAfter(d,m,A),this._additionsTail=null===this._additionsTail?this._additionsHead=d:this._additionsTail._nextAdded=d,d}_insertAfter(d,m,A){const k=null===m?this._itHead:m._next;return d._next=k,d._prev=m,null===k?this._itTail=d:k._prev=d,null===m?this._itHead=d:m._next=d,null===this._linkedRecords&&(this._linkedRecords=new IT),this._linkedRecords.put(d),d.currentIndex=A,d}_remove(d){return this._addToRemovals(this._unlink(d))}_unlink(d){null!==this._linkedRecords&&this._linkedRecords.remove(d);const m=d._prev,A=d._next;return null===m?this._itHead=A:m._next=A,null===A?this._itTail=m:A._prev=m,d}_addToMoves(d,m){return d.previousIndex===m||(this._movesTail=null===this._movesTail?this._movesHead=d:this._movesTail._nextMoved=d),d}_addToRemovals(d){return null===this._unlinkedRecords&&(this._unlinkedRecords=new IT),this._unlinkedRecords.put(d),d.currentIndex=null,d._nextRemoved=null,null===this._removalsTail?(this._removalsTail=this._removalsHead=d,d._prevRemoved=null):(d._prevRemoved=this._removalsTail,this._removalsTail=this._removalsTail._nextRemoved=d),d}_addIdentityChange(d,m){return d.item=m,this._identityChangesTail=null===this._identityChangesTail?this._identityChangesHead=d:this._identityChangesTail._nextIdentityChange=d,d}}class PO{constructor(d,m){this.item=d,this.trackById=m,this.currentIndex=null,this.previousIndex=null,this._nextPrevious=null,this._prev=null,this._next=null,this._prevDup=null,this._nextDup=null,this._prevRemoved=null,this._nextRemoved=null,this._nextAdded=null,this._nextMoved=null,this._nextIdentityChange=null}}class NO{constructor(){this._head=null,this._tail=null}add(d){null===this._head?(this._head=this._tail=d,d._nextDup=null,d._prevDup=null):(this._tail._nextDup=d,d._prevDup=this._tail,d._nextDup=null,this._tail=d)}get(d,m){let A;for(A=this._head;null!==A;A=A._nextDup)if((null===m||m<=A.currentIndex)&&Object.is(A.trackById,d))return A;return null}remove(d){const m=d._prevDup,A=d._nextDup;return null===m?this._head=A:m._nextDup=A,null===A?this._tail=m:A._prevDup=m,null===this._head}}class IT{constructor(){this.map=new Map}put(d){const m=d.trackById;let A=this.map.get(m);A||(A=new NO,this.map.set(m,A)),A.add(d)}get(d,m){const k=this.map.get(d);return k?k.get(d,m):null}remove(d){const m=d.trackById;return this.map.get(m).remove(d)&&this.map.delete(m),d}get isEmpty(){return 0===this.map.size}clear(){this.map.clear()}}function FT(c,d,m){const A=c.previousIndex;if(null===A)return A;let k=0;return m&&A<m.length&&(k=m[A]),A+d+k}class LT{constructor(){}supports(d){return d instanceof Map||gv(d)}create(){return new IO}}class IO{constructor(){this._records=new Map,this._mapHead=null,this._appendAfter=null,this._previousMapHead=null,this._changesHead=null,this._changesTail=null,this._additionsHead=null,this._additionsTail=null,this._removalsHead=null,this._removalsTail=null}get isDirty(){return null!==this._additionsHead||null!==this._changesHead||null!==this._removalsHead}forEachItem(d){let m;for(m=this._mapHead;null!==m;m=m._next)d(m)}forEachPreviousItem(d){let m;for(m=this._previousMapHead;null!==m;m=m._nextPrevious)d(m)}forEachChangedItem(d){let m;for(m=this._changesHead;null!==m;m=m._nextChanged)d(m)}forEachAddedItem(d){let m;for(m=this._additionsHead;null!==m;m=m._nextAdded)d(m)}forEachRemovedItem(d){let m;for(m=this._removalsHead;null!==m;m=m._nextRemoved)d(m)}diff(d){if(d){if(!(d instanceof Map||gv(d)))throw new q(900,"")}else d=new Map;return this.check(d)?this:null}onDestroy(){}check(d){this._reset();let m=this._mapHead;if(this._appendAfter=null,this._forEach(d,(A,k)=>{if(m&&m.key===k)this._maybeAddToChanges(m,A),this._appendAfter=m,m=m._next;else{const ee=this._getOrCreateRecordForKey(k,A);m=this._insertBeforeOrAppend(m,ee)}}),m){m._prev&&(m._prev._next=null),this._removalsHead=m;for(let A=m;null!==A;A=A._nextRemoved)A===this._mapHead&&(this._mapHead=null),this._records.delete(A.key),A._nextRemoved=A._next,A.previousValue=A.currentValue,A.currentValue=null,A._prev=null,A._next=null}return this._changesTail&&(this._changesTail._nextChanged=null),this._additionsTail&&(this._additionsTail._nextAdded=null),this.isDirty}_insertBeforeOrAppend(d,m){if(d){const A=d._prev;return m._next=d,m._prev=A,d._prev=m,A&&(A._next=m),d===this._mapHead&&(this._mapHead=m),this._appendAfter=d,d}return this._appendAfter?(this._appendAfter._next=m,m._prev=this._appendAfter):this._mapHead=m,this._appendAfter=m,null}_getOrCreateRecordForKey(d,m){if(this._records.has(d)){const k=this._records.get(d);this._maybeAddToChanges(k,m);const ee=k._prev,me=k._next;return ee&&(ee._next=me),me&&(me._prev=ee),k._next=null,k._prev=null,k}const A=new FO(d);return this._records.set(d,A),A.currentValue=m,this._addToAdditions(A),A}_reset(){if(this.isDirty){let d;for(this._previousMapHead=this._mapHead,d=this._previousMapHead;null!==d;d=d._next)d._nextPrevious=d._next;for(d=this._changesHead;null!==d;d=d._nextChanged)d.previousValue=d.currentValue;for(d=this._additionsHead;null!=d;d=d._nextAdded)d.previousValue=d.currentValue;this._changesHead=this._changesTail=null,this._additionsHead=this._additionsTail=null,this._removalsHead=null}}_maybeAddToChanges(d,m){Object.is(m,d.currentValue)||(d.previousValue=d.currentValue,d.currentValue=m,this._addToChanges(d))}_addToAdditions(d){null===this._additionsHead?this._additionsHead=this._additionsTail=d:(this._additionsTail._nextAdded=d,this._additionsTail=d)}_addToChanges(d){null===this._changesHead?this._changesHead=this._changesTail=d:(this._changesTail._nextChanged=d,this._changesTail=d)}_forEach(d,m){d instanceof Map?d.forEach(m):Object.keys(d).forEach(A=>m(d[A],A))}}class FO{constructor(d){this.key=d,this.previousValue=null,this.currentValue=null,this._nextPrevious=null,this._next=null,this._prev=null,this._nextAdded=null,this._nextRemoved=null,this._nextChanged=null}}function kT(){return new dE([new NT])}let dE=(()=>{class c{constructor(m){this.factories=m}static create(m,A){if(null!=A){const k=A.factories.slice();m=m.concat(k)}return new c(m)}static extend(m){return{provide:c,useFactory:A=>c.create(m,A||kT()),deps:[[c,new Ui,new fr]]}}find(m){const A=this.factories.find(k=>k.supports(m));if(null!=A)return A;throw new q(901,"")}}return c.\u0275prov=xt({token:c,providedIn:"root",factory:kT}),c})();function $T(){return new fE([new LT])}let fE=(()=>{class c{constructor(m){this.factories=m}static create(m,A){if(A){const k=A.factories.slice();m=m.concat(k)}return new c(m)}static extend(m){return{provide:c,useFactory:A=>c.create(m,A||$T()),deps:[[c,new Ui,new fr]]}}find(m){const A=this.factories.find(ee=>ee.supports(m));if(A)return A;throw new q(901,"")}}return c.\u0275prov=xt({token:c,providedIn:"root",factory:$T}),c})();const HO=TT(null,"core",[]);let BO=(()=>{class c{constructor(m){}}return c.\u0275fac=function(m){return new(m||c)(ve(oE))},c.\u0275mod=Et({type:c}),c.\u0275inj=Gt({}),c})()},1659:(v,b,i)=>{"use strict";i.d(b,{CE:()=>ut,Cf:()=>re,EJ:()=>Oi,F:()=>$n,Fd:()=>Fl,Fj:()=>j,JJ:()=>_r,JL:()=>ei,JU:()=>S,K7:()=>hl,Kr:()=>sl,NI:()=>Mr,Oe:()=>cr,On:()=>fa,Q7:()=>Ja,TO:()=>or,UX:()=>Fo,Wl:()=>w,YN:()=>ki,_:()=>Wa,_Y:()=>sa,a5:()=>hr,cw:()=>Ar,gN:()=>Br,kI:()=>ae,oH:()=>To,qQ:()=>Xa,qu:()=>al,sg:()=>hs,u:()=>Ue,u5:()=>ws,wV:()=>pl,x0:()=>kr});var r=i(89724),a=i(11048),f=i(76666),u=i(35758),e=i(88002);let p=(()=>{class mt{constructor(je,Xt){this._renderer=je,this._elementRef=Xt,this.onChange=Si=>{},this.onTouched=()=>{}}setProperty(je,Xt){this._renderer.setProperty(this._elementRef.nativeElement,je,Xt)}registerOnTouched(je){this.onTouched=je}registerOnChange(je){this.onChange=je}setDisabledState(je){this.setProperty("disabled",je)}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(r.Qsj),r.Y36(r.SBq))},mt.\u0275dir=r.lG2({type:mt}),mt})(),g=(()=>{class mt extends p{}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,features:[r.qOj]}),mt})();const S=new r.OlP("NgValueAccessor"),M={provide:S,useExisting:(0,r.Gpc)(()=>w),multi:!0};let w=(()=>{class mt extends g{writeValue(je){this.setProperty("checked",je)}}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,selectors:[["input","type","checkbox","formControlName",""],["input","type","checkbox","formControl",""],["input","type","checkbox","ngModel",""]],hostBindings:function(je,Xt){1&je&&r.NdJ("change",function(Jo){return Xt.onChange(Jo.target.checked)})("blur",function(){return Xt.onTouched()})},features:[r._Bn([M]),r.qOj]}),mt})();const x={provide:S,useExisting:(0,r.Gpc)(()=>j),multi:!0},W=new r.OlP("CompositionEventMode");let j=(()=>{class mt extends p{constructor(je,Xt,Si){super(je,Xt),this._compositionMode=Si,this._composing=!1,null==this._compositionMode&&(this._compositionMode=!function B(){const mt=(0,a.q)()?(0,a.q)().getUserAgent():"";return/android (\d+)/.test(mt.toLowerCase())}())}writeValue(je){this.setProperty("value",null==je?"":je)}_handleInput(je){(!this._compositionMode||this._compositionMode&&!this._composing)&&this.onChange(je)}_compositionStart(){this._composing=!0}_compositionEnd(je){this._composing=!1,this._compositionMode&&this.onChange(je)}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(W,8))},mt.\u0275dir=r.lG2({type:mt,selectors:[["input","formControlName","",3,"type","checkbox"],["textarea","formControlName",""],["input","formControl","",3,"type","checkbox"],["textarea","formControl",""],["input","ngModel","",3,"type","checkbox"],["textarea","ngModel",""],["","ngDefaultControl",""]],hostBindings:function(je,Xt){1&je&&r.NdJ("input",function(Jo){return Xt._handleInput(Jo.target.value)})("blur",function(){return Xt.onTouched()})("compositionstart",function(){return Xt._compositionStart()})("compositionend",function(Jo){return Xt._compositionEnd(Jo.target.value)})},features:[r._Bn([x]),r.qOj]}),mt})();function q(mt){return null==mt||0===mt.length}function ue(mt){return null!=mt&&"number"==typeof mt.length}const re=new r.OlP("NgValidators"),H=new r.OlP("NgAsyncValidators"),se=/^(?=.{1,254}$)(?=.{1,64}@)[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;class ae{static min(ot){return ie(ot)}static max(ot){return fe(ot)}static required(ot){return he(ot)}static requiredTrue(ot){return function Ce(mt){return!0===mt.value?null:{required:!0}}(ot)}static email(ot){return function ce(mt){return q(mt.value)||se.test(mt.value)?null:{email:!0}}(ot)}static minLength(ot){return function Be(mt){return ot=>q(ot.value)||!ue(ot.value)?null:ot.value.length<mt?{minlength:{requiredLength:mt,actualLength:ot.value.length}}:null}(ot)}static maxLength(ot){return function Ve(mt){return ot=>ue(ot.value)&&ot.value.length>mt?{maxlength:{requiredLength:mt,actualLength:ot.value.length}}:null}(ot)}static pattern(ot){return function Xe(mt){if(!mt)return He;let ot,je;return"string"==typeof mt?(je="","^"!==mt.charAt(0)&&(je+="^"),je+=mt,"$"!==mt.charAt(mt.length-1)&&(je+="$"),ot=new RegExp(je)):(je=mt.toString(),ot=mt),Xt=>{if(q(Xt.value))return null;const Si=Xt.value;return ot.test(Si)?null:{pattern:{requiredPattern:je,actualValue:Si}}}}(ot)}static nullValidator(ot){return null}static compose(ot){return Nt(ot)}static composeAsync(ot){return dn(ot)}}function ie(mt){return ot=>{if(q(ot.value)||q(mt))return null;const je=parseFloat(ot.value);return!isNaN(je)&&je<mt?{min:{min:mt,actual:ot.value}}:null}}function fe(mt){return ot=>{if(q(ot.value)||q(mt))return null;const je=parseFloat(ot.value);return!isNaN(je)&&je>mt?{max:{max:mt,actual:ot.value}}:null}}function he(mt){return q(mt.value)?{required:!0}:null}function He(mt){return null}function Pe(mt){return null!=mt}function Ge(mt){const ot=(0,r.QGY)(mt)?(0,f.D)(mt):mt;return(0,r.CqO)(ot),ot}function Oe(mt){let ot={};return mt.forEach(je=>{ot=null!=je?Object.assign(Object.assign({},ot),je):ot}),0===Object.keys(ot).length?null:ot}function Tt(mt,ot){return ot.map(je=>je(mt))}function Qt(mt){return mt.map(ot=>function We(mt){return!mt.validate}(ot)?ot:je=>ot.validate(je))}function Nt(mt){if(!mt)return null;const ot=mt.filter(Pe);return 0==ot.length?null:function(je){return Oe(Tt(je,ot))}}function Yt(mt){return null!=mt?Nt(Qt(mt)):null}function dn(mt){if(!mt)return null;const ot=mt.filter(Pe);return 0==ot.length?null:function(je){const Xt=Tt(je,ot).map(Ge);return(0,u.D)(Xt).pipe((0,e.U)(Oe))}}function rn(mt){return null!=mt?dn(Qt(mt)):null}function vt(mt,ot){return null===mt?[ot]:Array.isArray(mt)?[...mt,ot]:[mt,ot]}function xt(mt){return mt._rawValidators}function Ct(mt){return mt._rawAsyncValidators}function Gt(mt){return mt?Array.isArray(mt)?mt:[mt]:[]}function Fn(mt,ot){return Array.isArray(mt)?mt.includes(ot):mt===ot}function pr(mt,ot){const je=Gt(ot);return Gt(mt).forEach(Si=>{Fn(je,Si)||je.push(Si)}),je}function mi(mt,ot){return Gt(ot).filter(je=>!Fn(mt,je))}class ci{constructor(){this._rawValidators=[],this._rawAsyncValidators=[],this._onDestroyCallbacks=[]}get value(){return this.control?this.control.value:null}get valid(){return this.control?this.control.valid:null}get invalid(){return this.control?this.control.invalid:null}get pending(){return this.control?this.control.pending:null}get disabled(){return this.control?this.control.disabled:null}get enabled(){return this.control?this.control.enabled:null}get errors(){return this.control?this.control.errors:null}get pristine(){return this.control?this.control.pristine:null}get dirty(){return this.control?this.control.dirty:null}get touched(){return this.control?this.control.touched:null}get status(){return this.control?this.control.status:null}get untouched(){return this.control?this.control.untouched:null}get statusChanges(){return this.control?this.control.statusChanges:null}get valueChanges(){return this.control?this.control.valueChanges:null}get path(){return null}_setValidators(ot){this._rawValidators=ot||[],this._composedValidatorFn=Yt(this._rawValidators)}_setAsyncValidators(ot){this._rawAsyncValidators=ot||[],this._composedAsyncValidatorFn=rn(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn||null}get asyncValidator(){return this._composedAsyncValidatorFn||null}_registerOnDestroy(ot){this._onDestroyCallbacks.push(ot)}_invokeOnDestroyCallbacks(){this._onDestroyCallbacks.forEach(ot=>ot()),this._onDestroyCallbacks=[]}reset(ot){this.control&&this.control.reset(ot)}hasError(ot,je){return!!this.control&&this.control.hasError(ot,je)}getError(ot,je){return this.control?this.control.getError(ot,je):null}}class hr extends ci{constructor(){super(...arguments),this._parent=null,this.name=null,this.valueAccessor=null}}class Br extends ci{get formDirective(){return null}get path(){return null}}class Ur{constructor(ot){this._cd=ot}is(ot){var je,Xt,Si;return"submitted"===ot?!!(null===(je=this._cd)||void 0===je?void 0:je.submitted):!!(null===(Si=null===(Xt=this._cd)||void 0===Xt?void 0:Xt.control)||void 0===Si?void 0:Si[ot])}}let _r=(()=>{class mt extends Ur{constructor(je){super(je)}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(hr,2))},mt.\u0275dir=r.lG2({type:mt,selectors:[["","formControlName",""],["","ngModel",""],["","formControl",""]],hostVars:14,hostBindings:function(je,Xt){2&je&&r.ekj("ng-untouched",Xt.is("untouched"))("ng-touched",Xt.is("touched"))("ng-pristine",Xt.is("pristine"))("ng-dirty",Xt.is("dirty"))("ng-valid",Xt.is("valid"))("ng-invalid",Xt.is("invalid"))("ng-pending",Xt.is("pending"))},features:[r.qOj]}),mt})(),ei=(()=>{class mt extends Ur{constructor(je){super(je)}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(Br,10))},mt.\u0275dir=r.lG2({type:mt,selectors:[["","formGroupName",""],["","formArrayName",""],["","ngModelGroup",""],["","formGroup",""],["form",3,"ngNoForm",""],["","ngForm",""]],hostVars:16,hostBindings:function(je,Xt){2&je&&r.ekj("ng-untouched",Xt.is("untouched"))("ng-touched",Xt.is("touched"))("ng-pristine",Xt.is("pristine"))("ng-dirty",Xt.is("dirty"))("ng-valid",Xt.is("valid"))("ng-invalid",Xt.is("invalid"))("ng-pending",Xt.is("pending"))("ng-submitted",Xt.is("submitted"))},features:[r.qOj]}),mt})();function Rn(mt,ot){return[...ot.path,mt]}function Wn(mt,ot){Se(mt,ot),ot.valueAccessor.writeValue(mt.value),function st(mt,ot){ot.valueAccessor.registerOnChange(je=>{mt._pendingValue=je,mt._pendingChange=!0,mt._pendingDirty=!0,"change"===mt.updateOn&&Fe(mt,ot)})}(mt,ot),function Lr(mt,ot){const je=(Xt,Si)=>{ot.valueAccessor.writeValue(Xt),Si&&ot.viewToModelUpdate(Xt)};mt.registerOnChange(je),ot._registerOnDestroy(()=>{mt._unregisterOnChange(je)})}(mt,ot),function nn(mt,ot){ot.valueAccessor.registerOnTouched(()=>{mt._pendingTouched=!0,"blur"===mt.updateOn&&mt._pendingChange&&Fe(mt,ot),"submit"!==mt.updateOn&&mt.markAsTouched()})}(mt,ot),function Re(mt,ot){if(ot.valueAccessor.setDisabledState){const je=Xt=>{ot.valueAccessor.setDisabledState(Xt)};mt.registerOnDisabledChange(je),ot._registerOnDestroy(()=>{mt._unregisterOnDisabledChange(je)})}}(mt,ot)}function et(mt,ot,je=!0){const Xt=()=>{};ot.valueAccessor&&(ot.valueAccessor.registerOnChange(Xt),ot.valueAccessor.registerOnTouched(Xt)),dt(mt,ot),mt&&(ot._invokeOnDestroyCallbacks(),mt._registerOnCollectionChange(()=>{}))}function Le(mt,ot){mt.forEach(je=>{je.registerOnValidatorChange&&je.registerOnValidatorChange(ot)})}function Se(mt,ot){const je=xt(mt);null!==ot.validator?mt.setValidators(vt(je,ot.validator)):"function"==typeof je&&mt.setValidators([je]);const Xt=Ct(mt);null!==ot.asyncValidator?mt.setAsyncValidators(vt(Xt,ot.asyncValidator)):"function"==typeof Xt&&mt.setAsyncValidators([Xt]);const Si=()=>mt.updateValueAndValidity();Le(ot._rawValidators,Si),Le(ot._rawAsyncValidators,Si)}function dt(mt,ot){let je=!1;if(null!==mt){if(null!==ot.validator){const Si=xt(mt);if(Array.isArray(Si)&&Si.length>0){const Jo=Si.filter(ja=>ja!==ot.validator);Jo.length!==Si.length&&(je=!0,mt.setValidators(Jo))}}if(null!==ot.asyncValidator){const Si=Ct(mt);if(Array.isArray(Si)&&Si.length>0){const Jo=Si.filter(ja=>ja!==ot.asyncValidator);Jo.length!==Si.length&&(je=!0,mt.setAsyncValidators(Jo))}}}const Xt=()=>{};return Le(ot._rawValidators,Xt),Le(ot._rawAsyncValidators,Xt),je}function Fe(mt,ot){mt._pendingDirty&&mt.markAsDirty(),mt.setValue(mt._pendingValue,{emitModelToViewChange:!1}),ot.viewToModelUpdate(mt._pendingValue),mt._pendingChange=!1}function ti(mt,ot){Se(mt,ot)}function yt(mt,ot){if(!mt.hasOwnProperty("model"))return!1;const je=mt.model;return!!je.isFirstChange()||!Object.is(ot,je.currentValue)}function yn(mt,ot){mt._syncPendingControls(),ot.forEach(je=>{const Xt=je.control;"submit"===Xt.updateOn&&Xt._pendingChange&&(je.viewToModelUpdate(Xt._pendingValue),Xt._pendingChange=!1)})}function Cr(mt,ot){if(!ot)return null;let je,Xt,Si;return Array.isArray(ot),ot.forEach(Jo=>{Jo.constructor===j?je=Jo:function Vt(mt){return Object.getPrototypeOf(mt.constructor)===g}(Jo)?Xt=Jo:Si=Jo}),Si||Xt||je||null}function xi(mt,ot){const je=mt.indexOf(ot);je>-1&&mt.splice(je,1)}const Qo="VALID",lo="INVALID",Ri="PENDING",ko="DISABLED";function ir(mt){return(jr(mt)?mt.validators:mt)||null}function si(mt){return Array.isArray(mt)?Yt(mt):mt||null}function kn(mt,ot){return(jr(ot)?ot.asyncValidators:mt)||null}function nr(mt){return Array.isArray(mt)?rn(mt):mt||null}function jr(mt){return null!=mt&&!Array.isArray(mt)&&"object"==typeof mt}const ao=mt=>mt instanceof Mr,$i=mt=>mt instanceof Ar,Eo=mt=>mt instanceof cr;function mo(mt){return ao(mt)?mt.value:mt.getRawValue()}function Go(mt,ot){const je=$i(mt),Xt=mt.controls;if(!(je?Object.keys(Xt):Xt).length)throw new r.vHH(1e3,"");if(!Xt[ot])throw new r.vHH(1001,"")}function ua(mt,ot){$i(mt),mt._forEachChild((Xt,Si)=>{if(void 0===ot[Si])throw new r.vHH(1002,"")})}class or{constructor(ot,je){this._pendingDirty=!1,this._hasOwnPendingAsyncValidator=!1,this._pendingTouched=!1,this._onCollectionChange=()=>{},this._parent=null,this.pristine=!0,this.touched=!1,this._onDisabledChange=[],this._rawValidators=ot,this._rawAsyncValidators=je,this._composedValidatorFn=si(this._rawValidators),this._composedAsyncValidatorFn=nr(this._rawAsyncValidators)}get validator(){return this._composedValidatorFn}set validator(ot){this._rawValidators=this._composedValidatorFn=ot}get asyncValidator(){return this._composedAsyncValidatorFn}set asyncValidator(ot){this._rawAsyncValidators=this._composedAsyncValidatorFn=ot}get parent(){return this._parent}get valid(){return this.status===Qo}get invalid(){return this.status===lo}get pending(){return this.status==Ri}get disabled(){return this.status===ko}get enabled(){return this.status!==ko}get dirty(){return!this.pristine}get untouched(){return!this.touched}get updateOn(){return this._updateOn?this._updateOn:this.parent?this.parent.updateOn:"change"}setValidators(ot){this._rawValidators=ot,this._composedValidatorFn=si(ot)}setAsyncValidators(ot){this._rawAsyncValidators=ot,this._composedAsyncValidatorFn=nr(ot)}addValidators(ot){this.setValidators(pr(ot,this._rawValidators))}addAsyncValidators(ot){this.setAsyncValidators(pr(ot,this._rawAsyncValidators))}removeValidators(ot){this.setValidators(mi(ot,this._rawValidators))}removeAsyncValidators(ot){this.setAsyncValidators(mi(ot,this._rawAsyncValidators))}hasValidator(ot){return Fn(this._rawValidators,ot)}hasAsyncValidator(ot){return Fn(this._rawAsyncValidators,ot)}clearValidators(){this.validator=null}clearAsyncValidators(){this.asyncValidator=null}markAsTouched(ot={}){this.touched=!0,this._parent&&!ot.onlySelf&&this._parent.markAsTouched(ot)}markAllAsTouched(){this.markAsTouched({onlySelf:!0}),this._forEachChild(ot=>ot.markAllAsTouched())}markAsUntouched(ot={}){this.touched=!1,this._pendingTouched=!1,this._forEachChild(je=>{je.markAsUntouched({onlySelf:!0})}),this._parent&&!ot.onlySelf&&this._parent._updateTouched(ot)}markAsDirty(ot={}){this.pristine=!1,this._parent&&!ot.onlySelf&&this._parent.markAsDirty(ot)}markAsPristine(ot={}){this.pristine=!0,this._pendingDirty=!1,this._forEachChild(je=>{je.markAsPristine({onlySelf:!0})}),this._parent&&!ot.onlySelf&&this._parent._updatePristine(ot)}markAsPending(ot={}){this.status=Ri,!1!==ot.emitEvent&&this.statusChanges.emit(this.status),this._parent&&!ot.onlySelf&&this._parent.markAsPending(ot)}disable(ot={}){const je=this._parentMarkedDirty(ot.onlySelf);this.status=ko,this.errors=null,this._forEachChild(Xt=>{Xt.disable(Object.assign(Object.assign({},ot),{onlySelf:!0}))}),this._updateValue(),!1!==ot.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._updateAncestors(Object.assign(Object.assign({},ot),{skipPristineCheck:je})),this._onDisabledChange.forEach(Xt=>Xt(!0))}enable(ot={}){const je=this._parentMarkedDirty(ot.onlySelf);this.status=Qo,this._forEachChild(Xt=>{Xt.enable(Object.assign(Object.assign({},ot),{onlySelf:!0}))}),this.updateValueAndValidity({onlySelf:!0,emitEvent:ot.emitEvent}),this._updateAncestors(Object.assign(Object.assign({},ot),{skipPristineCheck:je})),this._onDisabledChange.forEach(Xt=>Xt(!1))}_updateAncestors(ot){this._parent&&!ot.onlySelf&&(this._parent.updateValueAndValidity(ot),ot.skipPristineCheck||this._parent._updatePristine(),this._parent._updateTouched())}setParent(ot){this._parent=ot}updateValueAndValidity(ot={}){this._setInitialStatus(),this._updateValue(),this.enabled&&(this._cancelExistingSubscription(),this.errors=this._runValidator(),this.status=this._calculateStatus(),(this.status===Qo||this.status===Ri)&&this._runAsyncValidator(ot.emitEvent)),!1!==ot.emitEvent&&(this.valueChanges.emit(this.value),this.statusChanges.emit(this.status)),this._parent&&!ot.onlySelf&&this._parent.updateValueAndValidity(ot)}_updateTreeValidity(ot={emitEvent:!0}){this._forEachChild(je=>je._updateTreeValidity(ot)),this.updateValueAndValidity({onlySelf:!0,emitEvent:ot.emitEvent})}_setInitialStatus(){this.status=this._allControlsDisabled()?ko:Qo}_runValidator(){return this.validator?this.validator(this):null}_runAsyncValidator(ot){if(this.asyncValidator){this.status=Ri,this._hasOwnPendingAsyncValidator=!0;const je=Ge(this.asyncValidator(this));this._asyncValidationSubscription=je.subscribe(Xt=>{this._hasOwnPendingAsyncValidator=!1,this.setErrors(Xt,{emitEvent:ot})})}}_cancelExistingSubscription(){this._asyncValidationSubscription&&(this._asyncValidationSubscription.unsubscribe(),this._hasOwnPendingAsyncValidator=!1)}setErrors(ot,je={}){this.errors=ot,this._updateControlsErrors(!1!==je.emitEvent)}get(ot){return function Xo(mt,ot,je){if(null==ot||(Array.isArray(ot)||(ot=ot.split(je)),Array.isArray(ot)&&0===ot.length))return null;let Xt=mt;return ot.forEach(Si=>{Xt=$i(Xt)?Xt.controls.hasOwnProperty(Si)?Xt.controls[Si]:null:Eo(Xt)&&Xt.at(Si)||null}),Xt}(this,ot,".")}getError(ot,je){const Xt=je?this.get(je):this;return Xt&&Xt.errors?Xt.errors[ot]:null}hasError(ot,je){return!!this.getError(ot,je)}get root(){let ot=this;for(;ot._parent;)ot=ot._parent;return ot}_updateControlsErrors(ot){this.status=this._calculateStatus(),ot&&this.statusChanges.emit(this.status),this._parent&&this._parent._updateControlsErrors(ot)}_initObservables(){this.valueChanges=new r.vpe,this.statusChanges=new r.vpe}_calculateStatus(){return this._allControlsDisabled()?ko:this.errors?lo:this._hasOwnPendingAsyncValidator||this._anyControlsHaveStatus(Ri)?Ri:this._anyControlsHaveStatus(lo)?lo:Qo}_anyControlsHaveStatus(ot){return this._anyControls(je=>je.status===ot)}_anyControlsDirty(){return this._anyControls(ot=>ot.dirty)}_anyControlsTouched(){return this._anyControls(ot=>ot.touched)}_updatePristine(ot={}){this.pristine=!this._anyControlsDirty(),this._parent&&!ot.onlySelf&&this._parent._updatePristine(ot)}_updateTouched(ot={}){this.touched=this._anyControlsTouched(),this._parent&&!ot.onlySelf&&this._parent._updateTouched(ot)}_isBoxedValue(ot){return"object"==typeof ot&&null!==ot&&2===Object.keys(ot).length&&"value"in ot&&"disabled"in ot}_registerOnCollectionChange(ot){this._onCollectionChange=ot}_setUpdateStrategy(ot){jr(ot)&&null!=ot.updateOn&&(this._updateOn=ot.updateOn)}_parentMarkedDirty(ot){return!ot&&!(!this._parent||!this._parent.dirty)&&!this._parent._anyControlsDirty()}}class Mr extends or{constructor(ot=null,je,Xt){super(ir(je),kn(Xt,je)),this.defaultValue=null,this._onChange=[],this._pendingChange=!1,this._applyFormState(ot),this._setUpdateStrategy(je),this._initObservables(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator}),jr(je)&&je.initialValueIsDefault&&(this.defaultValue=this._isBoxedValue(ot)?ot.value:ot)}setValue(ot,je={}){this.value=this._pendingValue=ot,this._onChange.length&&!1!==je.emitModelToViewChange&&this._onChange.forEach(Xt=>Xt(this.value,!1!==je.emitViewToModelChange)),this.updateValueAndValidity(je)}patchValue(ot,je={}){this.setValue(ot,je)}reset(ot=this.defaultValue,je={}){this._applyFormState(ot),this.markAsPristine(je),this.markAsUntouched(je),this.setValue(this.value,je),this._pendingChange=!1}_updateValue(){}_anyControls(ot){return!1}_allControlsDisabled(){return this.disabled}registerOnChange(ot){this._onChange.push(ot)}_unregisterOnChange(ot){xi(this._onChange,ot)}registerOnDisabledChange(ot){this._onDisabledChange.push(ot)}_unregisterOnDisabledChange(ot){xi(this._onDisabledChange,ot)}_forEachChild(ot){}_syncPendingControls(){return!("submit"!==this.updateOn||(this._pendingDirty&&this.markAsDirty(),this._pendingTouched&&this.markAsTouched(),!this._pendingChange)||(this.setValue(this._pendingValue,{onlySelf:!0,emitModelToViewChange:!1}),0))}_applyFormState(ot){this._isBoxedValue(ot)?(this.value=this._pendingValue=ot.value,ot.disabled?this.disable({onlySelf:!0,emitEvent:!1}):this.enable({onlySelf:!0,emitEvent:!1})):this.value=this._pendingValue=ot}}class Ar extends or{constructor(ot,je,Xt){super(ir(je),kn(Xt,je)),this.controls=ot,this._initObservables(),this._setUpdateStrategy(je),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}registerControl(ot,je){return this.controls[ot]?this.controls[ot]:(this.controls[ot]=je,je.setParent(this),je._registerOnCollectionChange(this._onCollectionChange),je)}addControl(ot,je,Xt={}){this.registerControl(ot,je),this.updateValueAndValidity({emitEvent:Xt.emitEvent}),this._onCollectionChange()}removeControl(ot,je={}){this.controls[ot]&&this.controls[ot]._registerOnCollectionChange(()=>{}),delete this.controls[ot],this.updateValueAndValidity({emitEvent:je.emitEvent}),this._onCollectionChange()}setControl(ot,je,Xt={}){this.controls[ot]&&this.controls[ot]._registerOnCollectionChange(()=>{}),delete this.controls[ot],je&&this.registerControl(ot,je),this.updateValueAndValidity({emitEvent:Xt.emitEvent}),this._onCollectionChange()}contains(ot){return this.controls.hasOwnProperty(ot)&&this.controls[ot].enabled}setValue(ot,je={}){ua(this,ot),Object.keys(ot).forEach(Xt=>{Go(this,Xt),this.controls[Xt].setValue(ot[Xt],{onlySelf:!0,emitEvent:je.emitEvent})}),this.updateValueAndValidity(je)}patchValue(ot,je={}){null!=ot&&(Object.keys(ot).forEach(Xt=>{this.controls[Xt]&&this.controls[Xt].patchValue(ot[Xt],{onlySelf:!0,emitEvent:je.emitEvent})}),this.updateValueAndValidity(je))}reset(ot={},je={}){this._forEachChild((Xt,Si)=>{Xt.reset(ot[Si],{onlySelf:!0,emitEvent:je.emitEvent})}),this._updatePristine(je),this._updateTouched(je),this.updateValueAndValidity(je)}getRawValue(){return this._reduceChildren({},(ot,je,Xt)=>(ot[Xt]=mo(je),ot))}_syncPendingControls(){let ot=this._reduceChildren(!1,(je,Xt)=>!!Xt._syncPendingControls()||je);return ot&&this.updateValueAndValidity({onlySelf:!0}),ot}_forEachChild(ot){Object.keys(this.controls).forEach(je=>{const Xt=this.controls[je];Xt&&ot(Xt,je)})}_setUpControls(){this._forEachChild(ot=>{ot.setParent(this),ot._registerOnCollectionChange(this._onCollectionChange)})}_updateValue(){this.value=this._reduceValue()}_anyControls(ot){for(const je of Object.keys(this.controls)){const Xt=this.controls[je];if(this.contains(je)&&ot(Xt))return!0}return!1}_reduceValue(){return this._reduceChildren({},(ot,je,Xt)=>((je.enabled||this.disabled)&&(ot[Xt]=je.value),ot))}_reduceChildren(ot,je){let Xt=ot;return this._forEachChild((Si,Jo)=>{Xt=je(Xt,Si,Jo)}),Xt}_allControlsDisabled(){for(const ot of Object.keys(this.controls))if(this.controls[ot].enabled)return!1;return Object.keys(this.controls).length>0||this.disabled}}class cr extends or{constructor(ot,je,Xt){super(ir(je),kn(Xt,je)),this.controls=ot,this._initObservables(),this._setUpdateStrategy(je),this._setUpControls(),this.updateValueAndValidity({onlySelf:!0,emitEvent:!!this.asyncValidator})}at(ot){return this.controls[ot]}push(ot,je={}){this.controls.push(ot),this._registerControl(ot),this.updateValueAndValidity({emitEvent:je.emitEvent}),this._onCollectionChange()}insert(ot,je,Xt={}){this.controls.splice(ot,0,je),this._registerControl(je),this.updateValueAndValidity({emitEvent:Xt.emitEvent})}removeAt(ot,je={}){this.controls[ot]&&this.controls[ot]._registerOnCollectionChange(()=>{}),this.controls.splice(ot,1),this.updateValueAndValidity({emitEvent:je.emitEvent})}setControl(ot,je,Xt={}){this.controls[ot]&&this.controls[ot]._registerOnCollectionChange(()=>{}),this.controls.splice(ot,1),je&&(this.controls.splice(ot,0,je),this._registerControl(je)),this.updateValueAndValidity({emitEvent:Xt.emitEvent}),this._onCollectionChange()}get length(){return this.controls.length}setValue(ot,je={}){ua(this,ot),ot.forEach((Xt,Si)=>{Go(this,Si),this.at(Si).setValue(Xt,{onlySelf:!0,emitEvent:je.emitEvent})}),this.updateValueAndValidity(je)}patchValue(ot,je={}){null!=ot&&(ot.forEach((Xt,Si)=>{this.at(Si)&&this.at(Si).patchValue(Xt,{onlySelf:!0,emitEvent:je.emitEvent})}),this.updateValueAndValidity(je))}reset(ot=[],je={}){this._forEachChild((Xt,Si)=>{Xt.reset(ot[Si],{onlySelf:!0,emitEvent:je.emitEvent})}),this._updatePristine(je),this._updateTouched(je),this.updateValueAndValidity(je)}getRawValue(){return this.controls.map(ot=>mo(ot))}clear(ot={}){this.controls.length<1||(this._forEachChild(je=>je._registerOnCollectionChange(()=>{})),this.controls.splice(0),this.updateValueAndValidity({emitEvent:ot.emitEvent}))}_syncPendingControls(){let ot=this.controls.reduce((je,Xt)=>!!Xt._syncPendingControls()||je,!1);return ot&&this.updateValueAndValidity({onlySelf:!0}),ot}_forEachChild(ot){this.controls.forEach((je,Xt)=>{ot(je,Xt)})}_updateValue(){this.value=this.controls.filter(ot=>ot.enabled||this.disabled).map(ot=>ot.value)}_anyControls(ot){return this.controls.some(je=>je.enabled&&ot(je))}_setUpControls(){this._forEachChild(ot=>this._registerControl(ot))}_allControlsDisabled(){for(const ot of this.controls)if(ot.enabled)return!1;return this.controls.length>0||this.disabled}_registerControl(ot){ot.setParent(this),ot._registerOnCollectionChange(this._onCollectionChange)}}const pi={provide:Br,useExisting:(0,r.Gpc)(()=>$n)},Sn=(()=>Promise.resolve(null))();let $n=(()=>{class mt extends Br{constructor(je,Xt){super(),this.submitted=!1,this._directives=new Set,this.ngSubmit=new r.vpe,this.form=new Ar({},Yt(je),rn(Xt))}ngAfterViewInit(){this._setUpdateStrategy()}get formDirective(){return this}get control(){return this.form}get path(){return[]}get controls(){return this.form.controls}addControl(je){Sn.then(()=>{const Xt=this._findContainer(je.path);je.control=Xt.registerControl(je.name,je.control),Wn(je.control,je),je.control.updateValueAndValidity({emitEvent:!1}),this._directives.add(je)})}getControl(je){return this.form.get(je.path)}removeControl(je){Sn.then(()=>{const Xt=this._findContainer(je.path);Xt&&Xt.removeControl(je.name),this._directives.delete(je)})}addFormGroup(je){Sn.then(()=>{const Xt=this._findContainer(je.path),Si=new Ar({});ti(Si,je),Xt.registerControl(je.name,Si),Si.updateValueAndValidity({emitEvent:!1})})}removeFormGroup(je){Sn.then(()=>{const Xt=this._findContainer(je.path);Xt&&Xt.removeControl(je.name)})}getFormGroup(je){return this.form.get(je.path)}updateModel(je,Xt){Sn.then(()=>{this.form.get(je.path).setValue(Xt)})}setValue(je){this.control.setValue(je)}onSubmit(je){return this.submitted=!0,yn(this.form,this._directives),this.ngSubmit.emit(je),!1}onReset(){this.resetForm()}resetForm(je){this.form.reset(je),this.submitted=!1}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.form._updateOn=this.options.updateOn)}_findContainer(je){return je.pop(),je.length?this.form.get(je):this.form}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(re,10),r.Y36(H,10))},mt.\u0275dir=r.lG2({type:mt,selectors:[["form",3,"ngNoForm","",3,"formGroup",""],["ng-form"],["","ngForm",""]],hostBindings:function(je,Xt){1&je&&r.NdJ("submit",function(Jo){return Xt.onSubmit(Jo)})("reset",function(){return Xt.onReset()})},inputs:{options:["ngFormOptions","options"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[r._Bn([pi]),r.qOj]}),mt})(),Jr=(()=>{class mt extends Br{ngOnInit(){this._checkParentType(),this.formDirective.addFormGroup(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormGroup(this)}get control(){return this.formDirective.getFormGroup(this)}get path(){return Rn(null==this.name?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_checkParentType(){}}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,features:[r.qOj]}),mt})();const ma={provide:hr,useExisting:(0,r.Gpc)(()=>fa)},Ea=(()=>Promise.resolve(null))();let fa=(()=>{class mt extends hr{constructor(je,Xt,Si,Jo,ja){super(),this._changeDetectorRef=ja,this.control=new Mr,this._registered=!1,this.update=new r.vpe,this._parent=je,this._setValidators(Xt),this._setAsyncValidators(Si),this.valueAccessor=Cr(0,Jo)}ngOnChanges(je){if(this._checkForErrors(),!this._registered||"name"in je){if(this._registered&&(this._checkName(),this.formDirective)){const Xt=je.name.previousValue;this.formDirective.removeControl({name:Xt,path:this._getPath(Xt)})}this._setUpControl()}"isDisabled"in je&&this._updateDisabled(je),yt(je,this.viewModel)&&(this._updateValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}get path(){return this._getPath(this.name)}get formDirective(){return this._parent?this._parent.formDirective:null}viewToModelUpdate(je){this.viewModel=je,this.update.emit(je)}_setUpControl(){this._setUpdateStrategy(),this._isStandalone()?this._setUpStandalone():this.formDirective.addControl(this),this._registered=!0}_setUpdateStrategy(){this.options&&null!=this.options.updateOn&&(this.control._updateOn=this.options.updateOn)}_isStandalone(){return!this._parent||!(!this.options||!this.options.standalone)}_setUpStandalone(){Wn(this.control,this),this.control.updateValueAndValidity({emitEvent:!1})}_checkForErrors(){this._isStandalone()||this._checkParentType(),this._checkName()}_checkParentType(){}_checkName(){this.options&&this.options.name&&(this.name=this.options.name),this._isStandalone()}_updateValue(je){Ea.then(()=>{var Xt;this.control.setValue(je,{emitViewToModelChange:!1}),null===(Xt=this._changeDetectorRef)||void 0===Xt||Xt.markForCheck()})}_updateDisabled(je){const Xt=je.isDisabled.currentValue,Si=""===Xt||Xt&&"false"!==Xt;Ea.then(()=>{var Jo;Si&&!this.control.disabled?this.control.disable():!Si&&this.control.disabled&&this.control.enable(),null===(Jo=this._changeDetectorRef)||void 0===Jo||Jo.markForCheck()})}_getPath(je){return this._parent?Rn(je,this._parent):[je]}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(Br,9),r.Y36(re,10),r.Y36(H,10),r.Y36(S,10),r.Y36(r.sBO,8))},mt.\u0275dir=r.lG2({type:mt,selectors:[["","ngModel","",3,"formControlName","",3,"formControl",""]],inputs:{name:"name",isDisabled:["disabled","isDisabled"],model:["ngModel","model"],options:["ngModelOptions","options"]},outputs:{update:"ngModelChange"},exportAs:["ngModel"],features:[r._Bn([ma]),r.qOj,r.TTD]}),mt})(),sa=(()=>{class mt{}return mt.\u0275fac=function(je){return new(je||mt)},mt.\u0275dir=r.lG2({type:mt,selectors:[["form",3,"ngNoForm","",3,"ngNativeValidate",""]],hostAttrs:["novalidate",""]}),mt})();const Ra={provide:S,useExisting:(0,r.Gpc)(()=>pl),multi:!0};let pl=(()=>{class mt extends g{writeValue(je){this.setProperty("value",null==je?"":je)}registerOnChange(je){this.onChange=Xt=>{je(""==Xt?null:parseFloat(Xt))}}}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,selectors:[["input","type","number","formControlName",""],["input","type","number","formControl",""],["input","type","number","ngModel",""]],hostBindings:function(je,Xt){1&je&&r.NdJ("input",function(Jo){return Xt.onChange(Jo.target.value)})("blur",function(){return Xt.onTouched()})},features:[r._Bn([Ra]),r.qOj]}),mt})();const Co={provide:S,useExisting:(0,r.Gpc)(()=>Wa),multi:!0};let Wo=(()=>{class mt{}return mt.\u0275fac=function(je){return new(je||mt)},mt.\u0275mod=r.oAB({type:mt}),mt.\u0275inj=r.cJS({}),mt})(),ys=(()=>{class mt{constructor(){this._accessors=[]}add(je,Xt){this._accessors.push([je,Xt])}remove(je){for(let Xt=this._accessors.length-1;Xt>=0;--Xt)if(this._accessors[Xt][1]===je)return void this._accessors.splice(Xt,1)}select(je){this._accessors.forEach(Xt=>{this._isSameGroup(Xt,je)&&Xt[1]!==je&&Xt[1].fireUncheck(je.value)})}_isSameGroup(je,Xt){return!!je[0].control&&je[0]._parent===Xt._control._parent&&je[1].name===Xt.name}}return mt.\u0275fac=function(je){return new(je||mt)},mt.\u0275prov=r.Yz7({token:mt,factory:mt.\u0275fac,providedIn:Wo}),mt})(),Wa=(()=>{class mt extends g{constructor(je,Xt,Si,Jo){super(je,Xt),this._registry=Si,this._injector=Jo,this.onChange=()=>{}}ngOnInit(){this._control=this._injector.get(hr),this._checkName(),this._registry.add(this._control,this)}ngOnDestroy(){this._registry.remove(this)}writeValue(je){this._state=je===this.value,this.setProperty("checked",this._state)}registerOnChange(je){this._fn=je,this.onChange=()=>{je(this.value),this._registry.select(this)}}fireUncheck(je){this.writeValue(je)}_checkName(){!this.name&&this.formControlName&&(this.name=this.formControlName)}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(ys),r.Y36(r.zs3))},mt.\u0275dir=r.lG2({type:mt,selectors:[["input","type","radio","formControlName",""],["input","type","radio","formControl",""],["input","type","radio","ngModel",""]],hostBindings:function(je,Xt){1&je&&r.NdJ("change",function(){return Xt.onChange()})("blur",function(){return Xt.onTouched()})},inputs:{name:"name",formControlName:"formControlName",value:"value"},features:[r._Bn([Co]),r.qOj]}),mt})();const js=new r.OlP("NgModelWithFormControlWarning"),$o={provide:hr,useExisting:(0,r.Gpc)(()=>To)};let To=(()=>{class mt extends hr{constructor(je,Xt,Si,Jo){super(),this._ngModelWarningConfig=Jo,this.update=new r.vpe,this._ngModelWarningSent=!1,this._setValidators(je),this._setAsyncValidators(Xt),this.valueAccessor=Cr(0,Si)}set isDisabled(je){}ngOnChanges(je){if(this._isControlChanged(je)){const Xt=je.form.previousValue;Xt&&et(Xt,this,!1),Wn(this.form,this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this.form.updateValueAndValidity({emitEvent:!1})}yt(je,this.viewModel)&&(this.form.setValue(this.model),this.viewModel=this.model)}ngOnDestroy(){this.form&&et(this.form,this,!1)}get path(){return[]}get control(){return this.form}viewToModelUpdate(je){this.viewModel=je,this.update.emit(je)}_isControlChanged(je){return je.hasOwnProperty("form")}}return mt._ngModelWarningSentOnce=!1,mt.\u0275fac=function(je){return new(je||mt)(r.Y36(re,10),r.Y36(H,10),r.Y36(S,10),r.Y36(js,8))},mt.\u0275dir=r.lG2({type:mt,selectors:[["","formControl",""]],inputs:{form:["formControl","form"],isDisabled:["disabled","isDisabled"],model:["ngModel","model"]},outputs:{update:"ngModelChange"},exportAs:["ngForm"],features:[r._Bn([$o]),r.qOj,r.TTD]}),mt})();const Ns={provide:Br,useExisting:(0,r.Gpc)(()=>hs)};let hs=(()=>{class mt extends Br{constructor(je,Xt){super(),this.validators=je,this.asyncValidators=Xt,this.submitted=!1,this._onCollectionChange=()=>this._updateDomValue(),this.directives=[],this.form=null,this.ngSubmit=new r.vpe,this._setValidators(je),this._setAsyncValidators(Xt)}ngOnChanges(je){this._checkFormPresent(),je.hasOwnProperty("form")&&(this._updateValidators(),this._updateDomValue(),this._updateRegistrations(),this._oldForm=this.form)}ngOnDestroy(){this.form&&(dt(this.form,this),this.form._onCollectionChange===this._onCollectionChange&&this.form._registerOnCollectionChange(()=>{}))}get formDirective(){return this}get control(){return this.form}get path(){return[]}addControl(je){const Xt=this.form.get(je.path);return Wn(Xt,je),Xt.updateValueAndValidity({emitEvent:!1}),this.directives.push(je),Xt}getControl(je){return this.form.get(je.path)}removeControl(je){et(je.control||null,je,!1),xi(this.directives,je)}addFormGroup(je){this._setUpFormContainer(je)}removeFormGroup(je){this._cleanUpFormContainer(je)}getFormGroup(je){return this.form.get(je.path)}addFormArray(je){this._setUpFormContainer(je)}removeFormArray(je){this._cleanUpFormContainer(je)}getFormArray(je){return this.form.get(je.path)}updateModel(je,Xt){this.form.get(je.path).setValue(Xt)}onSubmit(je){return this.submitted=!0,yn(this.form,this.directives),this.ngSubmit.emit(je),!1}onReset(){this.resetForm()}resetForm(je){this.form.reset(je),this.submitted=!1}_updateDomValue(){this.directives.forEach(je=>{const Xt=je.control,Si=this.form.get(je.path);Xt!==Si&&(et(Xt||null,je),ao(Si)&&(Wn(Si,je),je.control=Si))}),this.form._updateTreeValidity({emitEvent:!1})}_setUpFormContainer(je){const Xt=this.form.get(je.path);ti(Xt,je),Xt.updateValueAndValidity({emitEvent:!1})}_cleanUpFormContainer(je){if(this.form){const Xt=this.form.get(je.path);Xt&&function Ut(mt,ot){return dt(mt,ot)}(Xt,je)&&Xt.updateValueAndValidity({emitEvent:!1})}}_updateRegistrations(){this.form._registerOnCollectionChange(this._onCollectionChange),this._oldForm&&this._oldForm._registerOnCollectionChange(()=>{})}_updateValidators(){Se(this.form,this),this._oldForm&&dt(this._oldForm,this)}_checkFormPresent(){}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(re,10),r.Y36(H,10))},mt.\u0275dir=r.lG2({type:mt,selectors:[["","formGroup",""]],hostBindings:function(je,Xt){1&je&&r.NdJ("submit",function(Jo){return Xt.onSubmit(Jo)})("reset",function(){return Xt.onReset()})},inputs:{form:["formGroup","form"]},outputs:{ngSubmit:"ngSubmit"},exportAs:["ngForm"],features:[r._Bn([Ns]),r.qOj,r.TTD]}),mt})();const Oo={provide:Br,useExisting:(0,r.Gpc)(()=>kr)};let kr=(()=>{class mt extends Jr{constructor(je,Xt,Si){super(),this._parent=je,this._setValidators(Xt),this._setAsyncValidators(Si)}_checkParentType(){pn(this._parent)}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(Br,13),r.Y36(re,10),r.Y36(H,10))},mt.\u0275dir=r.lG2({type:mt,selectors:[["","formGroupName",""]],inputs:{name:["formGroupName","name"]},features:[r._Bn([Oo]),r.qOj]}),mt})();const Ki={provide:Br,useExisting:(0,r.Gpc)(()=>ut)};let ut=(()=>{class mt extends Br{constructor(je,Xt,Si){super(),this._parent=je,this._setValidators(Xt),this._setAsyncValidators(Si)}ngOnInit(){this._checkParentType(),this.formDirective.addFormArray(this)}ngOnDestroy(){this.formDirective&&this.formDirective.removeFormArray(this)}get control(){return this.formDirective.getFormArray(this)}get formDirective(){return this._parent?this._parent.formDirective:null}get path(){return Rn(null==this.name?this.name:this.name.toString(),this._parent)}_checkParentType(){pn(this._parent)}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(Br,13),r.Y36(re,10),r.Y36(H,10))},mt.\u0275dir=r.lG2({type:mt,selectors:[["","formArrayName",""]],inputs:{name:["formArrayName","name"]},features:[r._Bn([Ki]),r.qOj]}),mt})();function pn(mt){return!(mt instanceof kr||mt instanceof hs||mt instanceof ut)}const te={provide:hr,useExisting:(0,r.Gpc)(()=>Ue)};let Ue=(()=>{class mt extends hr{constructor(je,Xt,Si,Jo,ja){super(),this._ngModelWarningConfig=ja,this._added=!1,this.update=new r.vpe,this._ngModelWarningSent=!1,this._parent=je,this._setValidators(Xt),this._setAsyncValidators(Si),this.valueAccessor=Cr(0,Jo)}set isDisabled(je){}ngOnChanges(je){this._added||this._setUpControl(),yt(je,this.viewModel)&&(this.viewModel=this.model,this.formDirective.updateModel(this,this.model))}ngOnDestroy(){this.formDirective&&this.formDirective.removeControl(this)}viewToModelUpdate(je){this.viewModel=je,this.update.emit(je)}get path(){return Rn(null==this.name?this.name:this.name.toString(),this._parent)}get formDirective(){return this._parent?this._parent.formDirective:null}_checkParentType(){}_setUpControl(){this._checkParentType(),this.control=this.formDirective.addControl(this),this.control.disabled&&this.valueAccessor.setDisabledState&&this.valueAccessor.setDisabledState(!0),this._added=!0}}return mt._ngModelWarningSentOnce=!1,mt.\u0275fac=function(je){return new(je||mt)(r.Y36(Br,13),r.Y36(re,10),r.Y36(H,10),r.Y36(S,10),r.Y36(js,8))},mt.\u0275dir=r.lG2({type:mt,selectors:[["","formControlName",""]],inputs:{name:["formControlName","name"],isDisabled:["disabled","isDisabled"],model:["ngModel","model"]},outputs:{update:"ngModelChange"},features:[r._Bn([te]),r.qOj,r.TTD]}),mt})();const jt={provide:S,useExisting:(0,r.Gpc)(()=>Oi),multi:!0};function hn(mt,ot){return null==mt?`${ot}`:(ot&&"object"==typeof ot&&(ot="Object"),`${mt}: ${ot}`.slice(0,50))}let Oi=(()=>{class mt extends g{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(je){this._compareWith=je}writeValue(je){this.value=je;const Si=hn(this._getOptionId(je),je);this.setProperty("value",Si)}registerOnChange(je){this.onChange=Xt=>{this.value=this._getOptionValue(Xt),je(this.value)}}_registerOption(){return(this._idCounter++).toString()}_getOptionId(je){for(const Xt of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(Xt),je))return Xt;return null}_getOptionValue(je){const Xt=function ii(mt){return mt.split(":")[0]}(je);return this._optionMap.has(Xt)?this._optionMap.get(Xt):je}}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,selectors:[["select","formControlName","",3,"multiple",""],["select","formControl","",3,"multiple",""],["select","ngModel","",3,"multiple",""]],hostBindings:function(je,Xt){1&je&&r.NdJ("change",function(Jo){return Xt.onChange(Jo.target.value)})("blur",function(){return Xt.onTouched()})},inputs:{compareWith:"compareWith"},features:[r._Bn([jt]),r.qOj]}),mt})(),ki=(()=>{class mt{constructor(je,Xt,Si){this._element=je,this._renderer=Xt,this._select=Si,this._select&&(this.id=this._select._registerOption())}set ngValue(je){null!=this._select&&(this._select._optionMap.set(this.id,je),this._setElementValue(hn(this.id,je)),this._select.writeValue(this._select.value))}set value(je){this._setElementValue(je),this._select&&this._select.writeValue(this._select.value)}_setElementValue(je){this._renderer.setProperty(this._element.nativeElement,"value",je)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(Oi,9))},mt.\u0275dir=r.lG2({type:mt,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),mt})();const _s={provide:S,useExisting:(0,r.Gpc)(()=>hl),multi:!0};function Vo(mt,ot){return null==mt?`${ot}`:("string"==typeof ot&&(ot=`'${ot}'`),ot&&"object"==typeof ot&&(ot="Object"),`${mt}: ${ot}`.slice(0,50))}let hl=(()=>{class mt extends g{constructor(){super(...arguments),this._optionMap=new Map,this._idCounter=0,this._compareWith=Object.is}set compareWith(je){this._compareWith=je}writeValue(je){let Xt;if(this.value=je,Array.isArray(je)){const Si=je.map(Jo=>this._getOptionId(Jo));Xt=(Jo,ja)=>{Jo._setSelected(Si.indexOf(ja.toString())>-1)}}else Xt=(Si,Jo)=>{Si._setSelected(!1)};this._optionMap.forEach(Xt)}registerOnChange(je){this.onChange=Xt=>{const Si=[],Jo=Xt.selectedOptions;if(void 0!==Jo){const ja=Jo;for(let El=0;El<ja.length;El++){const Nc=this._getOptionValue(ja[El].value);Si.push(Nc)}}else{const ja=Xt.options;for(let El=0;El<ja.length;El++){const Ku=ja[El];if(Ku.selected){const Nc=this._getOptionValue(Ku.value);Si.push(Nc)}}}this.value=Si,je(Si)}}_registerOption(je){const Xt=(this._idCounter++).toString();return this._optionMap.set(Xt,je),Xt}_getOptionId(je){for(const Xt of Array.from(this._optionMap.keys()))if(this._compareWith(this._optionMap.get(Xt)._value,je))return Xt;return null}_getOptionValue(je){const Xt=function Fs(mt){return mt.split(":")[0]}(je);return this._optionMap.has(Xt)?this._optionMap.get(Xt)._value:je}}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,selectors:[["select","multiple","","formControlName",""],["select","multiple","","formControl",""],["select","multiple","","ngModel",""]],hostBindings:function(je,Xt){1&je&&r.NdJ("change",function(Jo){return Xt.onChange(Jo.target)})("blur",function(){return Xt.onTouched()})},inputs:{compareWith:"compareWith"},features:[r._Bn([_s]),r.qOj]}),mt})(),sl=(()=>{class mt{constructor(je,Xt,Si){this._element=je,this._renderer=Xt,this._select=Si,this._select&&(this.id=this._select._registerOption(this))}set ngValue(je){null!=this._select&&(this._value=je,this._setElementValue(Vo(this.id,je)),this._select.writeValue(this._select.value))}set value(je){this._select?(this._value=je,this._setElementValue(Vo(this.id,je)),this._select.writeValue(this._select.value)):this._setElementValue(je)}_setElementValue(je){this._renderer.setProperty(this._element.nativeElement,"value",je)}_setSelected(je){this._renderer.setProperty(this._element.nativeElement,"selected",je)}ngOnDestroy(){this._select&&(this._select._optionMap.delete(this.id),this._select.writeValue(this._select.value))}}return mt.\u0275fac=function(je){return new(je||mt)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(hl,9))},mt.\u0275dir=r.lG2({type:mt,selectors:[["option"]],inputs:{ngValue:"ngValue",value:"value"}}),mt})();function _c(mt){return"number"==typeof mt?mt:parseFloat(mt)}let Cl=(()=>{class mt{constructor(){this._validator=He}ngOnChanges(je){if(this.inputName in je){const Xt=this.normalizeInput(je[this.inputName].currentValue);this._enabled=this.enabled(Xt),this._validator=this._enabled?this.createValidator(Xt):He,this._onChange&&this._onChange()}}validate(je){return this._validator(je)}registerOnValidatorChange(je){this._onChange=je}enabled(je){return null!=je}}return mt.\u0275fac=function(je){return new(je||mt)},mt.\u0275dir=r.lG2({type:mt,features:[r.TTD]}),mt})();const mc={provide:re,useExisting:(0,r.Gpc)(()=>Fl),multi:!0};let Fl=(()=>{class mt extends Cl{constructor(){super(...arguments),this.inputName="max",this.normalizeInput=je=>_c(je),this.createValidator=je=>fe(je)}}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,selectors:[["input","type","number","max","","formControlName",""],["input","type","number","max","","formControl",""],["input","type","number","max","","ngModel",""]],hostVars:1,hostBindings:function(je,Xt){2&je&&r.uIk("max",Xt._enabled?Xt.max:null)},inputs:{max:"max"},features:[r._Bn([mc]),r.qOj]}),mt})();const Xu={provide:re,useExisting:(0,r.Gpc)(()=>Xa),multi:!0};let Xa=(()=>{class mt extends Cl{constructor(){super(...arguments),this.inputName="min",this.normalizeInput=je=>_c(je),this.createValidator=je=>ie(je)}}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,selectors:[["input","type","number","min","","formControlName",""],["input","type","number","min","","formControl",""],["input","type","number","min","","ngModel",""]],hostVars:1,hostBindings:function(je,Xt){2&je&&r.uIk("min",Xt._enabled?Xt.min:null)},inputs:{min:"min"},features:[r._Bn([Xu]),r.qOj]}),mt})();const Mc={provide:re,useExisting:(0,r.Gpc)(()=>Ja),multi:!0};let Ja=(()=>{class mt extends Cl{constructor(){super(...arguments),this.inputName="required",this.normalizeInput=je=>function Qu(mt){return null!=mt&&!1!==mt&&"false"!=`${mt}`}(je),this.createValidator=je=>he}enabled(je){return je}}return mt.\u0275fac=function(){let ot;return function(Xt){return(ot||(ot=r.n5z(mt)))(Xt||mt)}}(),mt.\u0275dir=r.lG2({type:mt,selectors:[["","required","","formControlName","",3,"type","checkbox"],["","required","","formControl","",3,"type","checkbox"],["","required","","ngModel","",3,"type","checkbox"]],hostVars:1,hostBindings:function(je,Xt){2&je&&r.uIk("required",Xt._enabled?"":null)},inputs:{required:"required"},features:[r._Bn([Mc]),r.qOj]}),mt})(),Os=(()=>{class mt{}return mt.\u0275fac=function(je){return new(je||mt)},mt.\u0275mod=r.oAB({type:mt}),mt.\u0275inj=r.cJS({imports:[[Wo]]}),mt})(),ws=(()=>{class mt{}return mt.\u0275fac=function(je){return new(je||mt)},mt.\u0275mod=r.oAB({type:mt}),mt.\u0275inj=r.cJS({imports:[Os]}),mt})(),Fo=(()=>{class mt{static withConfig(je){return{ngModule:mt,providers:[{provide:js,useValue:je.warnOnNgModelWithFormControl}]}}}return mt.\u0275fac=function(je){return new(je||mt)},mt.\u0275mod=r.oAB({type:mt}),mt.\u0275inj=r.cJS({imports:[Os]}),mt})(),al=(()=>{class mt{group(je,Xt=null){const Si=this._reduceControls(je);let El,Jo=null,ja=null;return null!=Xt&&(function Ka(mt){return void 0!==mt.asyncValidators||void 0!==mt.validators||void 0!==mt.updateOn}(Xt)?(Jo=null!=Xt.validators?Xt.validators:null,ja=null!=Xt.asyncValidators?Xt.asyncValidators:null,El=null!=Xt.updateOn?Xt.updateOn:void 0):(Jo=null!=Xt.validator?Xt.validator:null,ja=null!=Xt.asyncValidator?Xt.asyncValidator:null)),new Ar(Si,{asyncValidators:ja,updateOn:El,validators:Jo})}control(je,Xt,Si){return new Mr(je,Xt,Si)}array(je,Xt,Si){const Jo=je.map(ja=>this._createControl(ja));return new cr(Jo,Xt,Si)}_reduceControls(je){const Xt={};return Object.keys(je).forEach(Si=>{Xt[Si]=this._createControl(je[Si])}),Xt}_createControl(je){return ao(je)||$i(je)||Eo(je)?je:Array.isArray(je)?this.control(je[0],je.length>1?je[1]:null,je.length>2?je[2]:null):this.control(je)}}return mt.\u0275fac=function(je){return new(je||mt)},mt.\u0275prov=r.Yz7({token:mt,factory:mt.\u0275fac,providedIn:Fo}),mt})()},14800:(v,b,i)=>{"use strict";i.d(b,{Dx:()=>fi,H7:()=>Ut,HJ:()=>ui,b2:()=>Hn,q6:()=>Br,se:()=>Ge});var r=i(11048),a=i(89724);class f extends r.w_{constructor(){super(...arguments),this.supportsDOMEvents=!0}}class u extends f{static makeCurrent(){(0,r.HT)(new u)}onAndCancel(yt,Vt,yn){return yt.addEventListener(Vt,yn,!1),()=>{yt.removeEventListener(Vt,yn,!1)}}dispatchEvent(yt,Vt){yt.dispatchEvent(Vt)}remove(yt){yt.parentNode&&yt.parentNode.removeChild(yt)}createElement(yt,Vt){return(Vt=Vt||this.getDefaultDocument()).createElement(yt)}createHtmlDocument(){return document.implementation.createHTMLDocument("fakeTitle")}getDefaultDocument(){return document}isElementNode(yt){return yt.nodeType===Node.ELEMENT_NODE}isShadowRoot(yt){return yt instanceof DocumentFragment}getGlobalEventTarget(yt,Vt){return"window"===Vt?window:"document"===Vt?yt:"body"===Vt?yt.body:null}getBaseHref(yt){const Vt=function p(){return e=e||document.querySelector("base"),e?e.getAttribute("href"):null}();return null==Vt?null:function S(_t){g=g||document.createElement("a"),g.setAttribute("href",_t);const yt=g.pathname;return"/"===yt.charAt(0)?yt:`/${yt}`}(Vt)}resetBaseElement(){e=null}getUserAgent(){return window.navigator.userAgent}getCookie(yt){return(0,r.Mx)(document.cookie,yt)}}let g,e=null;const M=new a.OlP("TRANSITION_ID"),x=[{provide:a.ip1,useFactory:function w(_t,yt,Vt){return()=>{Vt.get(a.CZH).donePromise.then(()=>{const yn=(0,r.q)(),Cr=yt.querySelectorAll(`style[ng-transition="${_t}"]`);for(let xi=0;xi<Cr.length;xi++)yn.remove(Cr[xi])})}},deps:[M,r.K0,a.zs3],multi:!0}];class B{static init(){(0,a.VLi)(new B)}addToWindow(yt){a.dqk.getAngularTestability=(yn,Cr=!0)=>{const xi=yt.findTestabilityInTree(yn,Cr);if(null==xi)throw new Error("Could not find testability for element.");return xi},a.dqk.getAllAngularTestabilities=()=>yt.getAllTestabilities(),a.dqk.getAllAngularRootElements=()=>yt.getAllRootElements(),a.dqk.frameworkStabilizers||(a.dqk.frameworkStabilizers=[]),a.dqk.frameworkStabilizers.push(yn=>{const Cr=a.dqk.getAllAngularTestabilities();let xi=Cr.length,yi=!1;const Yo=function(Qo){yi=yi||Qo,xi--,0==xi&&yn(yi)};Cr.forEach(function(Qo){Qo.whenStable(Yo)})})}findTestabilityInTree(yt,Vt,yn){if(null==Vt)return null;const Cr=yt.getTestability(Vt);return null!=Cr?Cr:yn?(0,r.q)().isShadowRoot(Vt)?this.findTestabilityInTree(yt,Vt.host,!0):this.findTestabilityInTree(yt,Vt.parentElement,!0):null}}let W=(()=>{class _t{build(){return new XMLHttpRequest}}return _t.\u0275fac=function(Vt){return new(Vt||_t)},_t.\u0275prov=a.Yz7({token:_t,factory:_t.\u0275fac}),_t})();const j=new a.OlP("EventManagerPlugins");let q=(()=>{class _t{constructor(Vt,yn){this._zone=yn,this._eventNameToPlugin=new Map,Vt.forEach(Cr=>Cr.manager=this),this._plugins=Vt.slice().reverse()}addEventListener(Vt,yn,Cr){return this._findPluginFor(yn).addEventListener(Vt,yn,Cr)}addGlobalEventListener(Vt,yn,Cr){return this._findPluginFor(yn).addGlobalEventListener(Vt,yn,Cr)}getZone(){return this._zone}_findPluginFor(Vt){const yn=this._eventNameToPlugin.get(Vt);if(yn)return yn;const Cr=this._plugins;for(let xi=0;xi<Cr.length;xi++){const yi=Cr[xi];if(yi.supports(Vt))return this._eventNameToPlugin.set(Vt,yi),yi}throw new Error(`No event manager plugin found for event ${Vt}`)}}return _t.\u0275fac=function(Vt){return new(Vt||_t)(a.LFG(j),a.LFG(a.R0b))},_t.\u0275prov=a.Yz7({token:_t,factory:_t.\u0275fac}),_t})();class ue{constructor(yt){this._doc=yt}addGlobalEventListener(yt,Vt,yn){const Cr=(0,r.q)().getGlobalEventTarget(this._doc,yt);if(!Cr)throw new Error(`Unsupported event target ${Cr} for event ${Vt}`);return this.addEventListener(Cr,Vt,yn)}}let re=(()=>{class _t{constructor(){this._stylesSet=new Set}addStyles(Vt){const yn=new Set;Vt.forEach(Cr=>{this._stylesSet.has(Cr)||(this._stylesSet.add(Cr),yn.add(Cr))}),this.onStylesAdded(yn)}onStylesAdded(Vt){}getAllStyles(){return Array.from(this._stylesSet)}}return _t.\u0275fac=function(Vt){return new(Vt||_t)},_t.\u0275prov=a.Yz7({token:_t,factory:_t.\u0275fac}),_t})(),H=(()=>{class _t extends re{constructor(Vt){super(),this._doc=Vt,this._hostNodes=new Map,this._hostNodes.set(Vt.head,[])}_addStylesToHost(Vt,yn,Cr){Vt.forEach(xi=>{const yi=this._doc.createElement("style");yi.textContent=xi,Cr.push(yn.appendChild(yi))})}addHost(Vt){const yn=[];this._addStylesToHost(this._stylesSet,Vt,yn),this._hostNodes.set(Vt,yn)}removeHost(Vt){const yn=this._hostNodes.get(Vt);yn&&yn.forEach(se),this._hostNodes.delete(Vt)}onStylesAdded(Vt){this._hostNodes.forEach((yn,Cr)=>{this._addStylesToHost(Vt,Cr,yn)})}ngOnDestroy(){this._hostNodes.forEach(Vt=>Vt.forEach(se))}}return _t.\u0275fac=function(Vt){return new(Vt||_t)(a.LFG(r.K0))},_t.\u0275prov=a.Yz7({token:_t,factory:_t.\u0275fac}),_t})();function se(_t){(0,r.q)().remove(_t)}const ae={svg:"http://www.w3.org/2000/svg",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/",math:"http://www.w3.org/1998/MathML/"},ie=/%COMP%/g;function Xe(_t,yt,Vt){for(let yn=0;yn<yt.length;yn++){let Cr=yt[yn];Array.isArray(Cr)?Xe(_t,Cr,Vt):(Cr=Cr.replace(ie,_t),Vt.push(Cr))}return Vt}function He(_t){return yt=>{if("__ngUnwrap__"===yt)return _t;!1===_t(yt)&&(yt.preventDefault(),yt.returnValue=!1)}}let Ge=(()=>{class _t{constructor(Vt,yn,Cr){this.eventManager=Vt,this.sharedStylesHost=yn,this.appId=Cr,this.rendererByCompId=new Map,this.defaultRenderer=new Oe(Vt)}createRenderer(Vt,yn){if(!Vt||!yn)return this.defaultRenderer;switch(yn.encapsulation){case a.ifc.Emulated:{let Cr=this.rendererByCompId.get(yn.id);return Cr||(Cr=new Qt(this.eventManager,this.sharedStylesHost,yn,this.appId),this.rendererByCompId.set(yn.id,Cr)),Cr.applyToHost(Vt),Cr}case 1:case a.ifc.ShadowDom:return new Nt(this.eventManager,this.sharedStylesHost,Vt,yn);default:if(!this.rendererByCompId.has(yn.id)){const Cr=Xe(yn.id,yn.styles,[]);this.sharedStylesHost.addStyles(Cr),this.rendererByCompId.set(yn.id,this.defaultRenderer)}return this.defaultRenderer}}begin(){}end(){}}return _t.\u0275fac=function(Vt){return new(Vt||_t)(a.LFG(q),a.LFG(H),a.LFG(a.AFp))},_t.\u0275prov=a.Yz7({token:_t,factory:_t.\u0275fac}),_t})();class Oe{constructor(yt){this.eventManager=yt,this.data=Object.create(null),this.destroyNode=null}destroy(){}createElement(yt,Vt){return Vt?document.createElementNS(ae[Vt]||Vt,yt):document.createElement(yt)}createComment(yt){return document.createComment(yt)}createText(yt){return document.createTextNode(yt)}appendChild(yt,Vt){yt.appendChild(Vt)}insertBefore(yt,Vt,yn){yt&&yt.insertBefore(Vt,yn)}removeChild(yt,Vt){yt&&yt.removeChild(Vt)}selectRootElement(yt,Vt){let yn="string"==typeof yt?document.querySelector(yt):yt;if(!yn)throw new Error(`The selector "${yt}" did not match any elements`);return Vt||(yn.textContent=""),yn}parentNode(yt){return yt.parentNode}nextSibling(yt){return yt.nextSibling}setAttribute(yt,Vt,yn,Cr){if(Cr){Vt=Cr+":"+Vt;const xi=ae[Cr];xi?yt.setAttributeNS(xi,Vt,yn):yt.setAttribute(Vt,yn)}else yt.setAttribute(Vt,yn)}removeAttribute(yt,Vt,yn){if(yn){const Cr=ae[yn];Cr?yt.removeAttributeNS(Cr,Vt):yt.removeAttribute(`${yn}:${Vt}`)}else yt.removeAttribute(Vt)}addClass(yt,Vt){yt.classList.add(Vt)}removeClass(yt,Vt){yt.classList.remove(Vt)}setStyle(yt,Vt,yn,Cr){Cr&(a.JOm.DashCase|a.JOm.Important)?yt.style.setProperty(Vt,yn,Cr&a.JOm.Important?"important":""):yt.style[Vt]=yn}removeStyle(yt,Vt,yn){yn&a.JOm.DashCase?yt.style.removeProperty(Vt):yt.style[Vt]=""}setProperty(yt,Vt,yn){yt[Vt]=yn}setValue(yt,Vt){yt.nodeValue=Vt}listen(yt,Vt,yn){return"string"==typeof yt?this.eventManager.addGlobalEventListener(yt,Vt,He(yn)):this.eventManager.addEventListener(yt,Vt,He(yn))}}class Qt extends Oe{constructor(yt,Vt,yn,Cr){super(yt),this.component=yn;const xi=Xe(Cr+"-"+yn.id,yn.styles,[]);Vt.addStyles(xi),this.contentAttr=function Be(_t){return"_ngcontent-%COMP%".replace(ie,_t)}(Cr+"-"+yn.id),this.hostAttr=function Ve(_t){return"_nghost-%COMP%".replace(ie,_t)}(Cr+"-"+yn.id)}applyToHost(yt){super.setAttribute(yt,this.hostAttr,"")}createElement(yt,Vt){const yn=super.createElement(yt,Vt);return super.setAttribute(yn,this.contentAttr,""),yn}}class Nt extends Oe{constructor(yt,Vt,yn,Cr){super(yt),this.sharedStylesHost=Vt,this.hostEl=yn,this.shadowRoot=yn.attachShadow({mode:"open"}),this.sharedStylesHost.addHost(this.shadowRoot);const xi=Xe(Cr.id,Cr.styles,[]);for(let yi=0;yi<xi.length;yi++){const Yo=document.createElement("style");Yo.textContent=xi[yi],this.shadowRoot.appendChild(Yo)}}nodeOrShadowRoot(yt){return yt===this.hostEl?this.shadowRoot:yt}destroy(){this.sharedStylesHost.removeHost(this.shadowRoot)}appendChild(yt,Vt){return super.appendChild(this.nodeOrShadowRoot(yt),Vt)}insertBefore(yt,Vt,yn){return super.insertBefore(this.nodeOrShadowRoot(yt),Vt,yn)}removeChild(yt,Vt){return super.removeChild(this.nodeOrShadowRoot(yt),Vt)}parentNode(yt){return this.nodeOrShadowRoot(super.parentNode(this.nodeOrShadowRoot(yt)))}}let Yt=(()=>{class _t extends ue{constructor(Vt){super(Vt)}supports(Vt){return!0}addEventListener(Vt,yn,Cr){return Vt.addEventListener(yn,Cr,!1),()=>this.removeEventListener(Vt,yn,Cr)}removeEventListener(Vt,yn,Cr){return Vt.removeEventListener(yn,Cr)}}return _t.\u0275fac=function(Vt){return new(Vt||_t)(a.LFG(r.K0))},_t.\u0275prov=a.Yz7({token:_t,factory:_t.\u0275fac}),_t})();const dn=["alt","control","meta","shift"],vt={"\b":"Backspace","\t":"Tab","\x7f":"Delete","\x1b":"Escape",Del:"Delete",Esc:"Escape",Left:"ArrowLeft",Right:"ArrowRight",Up:"ArrowUp",Down:"ArrowDown",Menu:"ContextMenu",Scroll:"ScrollLock",Win:"OS"},xt={A:"1",B:"2",C:"3",D:"4",E:"5",F:"6",G:"7",H:"8",I:"9",J:"*",K:"+",M:"-",N:".",O:"/","`":"0","\x90":"NumLock"},Ct={alt:_t=>_t.altKey,control:_t=>_t.ctrlKey,meta:_t=>_t.metaKey,shift:_t=>_t.shiftKey};let Gt=(()=>{class _t extends ue{constructor(Vt){super(Vt)}supports(Vt){return null!=_t.parseEventName(Vt)}addEventListener(Vt,yn,Cr){const xi=_t.parseEventName(yn),yi=_t.eventCallback(xi.fullKey,Cr,this.manager.getZone());return this.manager.getZone().runOutsideAngular(()=>(0,r.q)().onAndCancel(Vt,xi.domEventName,yi))}static parseEventName(Vt){const yn=Vt.toLowerCase().split("."),Cr=yn.shift();if(0===yn.length||"keydown"!==Cr&&"keyup"!==Cr)return null;const xi=_t._normalizeKey(yn.pop());let yi="";if(dn.forEach(Qo=>{const lo=yn.indexOf(Qo);lo>-1&&(yn.splice(lo,1),yi+=Qo+".")}),yi+=xi,0!=yn.length||0===xi.length)return null;const Yo={};return Yo.domEventName=Cr,Yo.fullKey=yi,Yo}static getEventFullKey(Vt){let yn="",Cr=function Fn(_t){let yt=_t.key;if(null==yt){if(yt=_t.keyIdentifier,null==yt)return"Unidentified";yt.startsWith("U+")&&(yt=String.fromCharCode(parseInt(yt.substring(2),16)),3===_t.location&&xt.hasOwnProperty(yt)&&(yt=xt[yt]))}return vt[yt]||yt}(Vt);return Cr=Cr.toLowerCase()," "===Cr?Cr="space":"."===Cr&&(Cr="dot"),dn.forEach(xi=>{xi!=Cr&&Ct[xi](Vt)&&(yn+=xi+".")}),yn+=Cr,yn}static eventCallback(Vt,yn,Cr){return xi=>{_t.getEventFullKey(xi)===Vt&&Cr.runGuarded(()=>yn(xi))}}static _normalizeKey(Vt){return"esc"===Vt?"escape":Vt}}return _t.\u0275fac=function(Vt){return new(Vt||_t)(a.LFG(r.K0))},_t.\u0275prov=a.Yz7({token:_t,factory:_t.\u0275fac}),_t})();const Br=(0,a.eFA)(a._c5,"browser",[{provide:a.Lbi,useValue:r.bD},{provide:a.g9A,useValue:function pr(){u.makeCurrent(),B.init()},multi:!0},{provide:r.K0,useFactory:function ci(){return(0,a.RDi)(document),document},deps:[]}]),Ur=[{provide:a.zSh,useValue:"root"},{provide:a.qLn,useFactory:function mi(){return new a.qLn},deps:[]},{provide:j,useClass:Yt,multi:!0,deps:[r.K0,a.R0b,a.Lbi]},{provide:j,useClass:Gt,multi:!0,deps:[r.K0]},{provide:Ge,useClass:Ge,deps:[q,H,a.AFp]},{provide:a.FYo,useExisting:Ge},{provide:re,useExisting:H},{provide:H,useClass:H,deps:[r.K0]},{provide:a.dDg,useClass:a.dDg,deps:[a.R0b]},{provide:q,useClass:q,deps:[j,a.R0b]},{provide:r.JF,useClass:W,deps:[]}];let Hn=(()=>{class _t{constructor(Vt){if(Vt)throw new Error("BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead.")}static withServerTransition(Vt){return{ngModule:_t,providers:[{provide:a.AFp,useValue:Vt.appId},{provide:M,useExisting:a.AFp},x]}}}return _t.\u0275fac=function(Vt){return new(Vt||_t)(a.LFG(_t,12))},_t.\u0275mod=a.oAB({type:_t}),_t.\u0275inj=a.cJS({providers:Ur,imports:[r.ez,a.hGG]}),_t})(),fi=(()=>{class _t{constructor(Vt){this._doc=Vt}getTitle(){return this._doc.title}setTitle(Vt){this._doc.title=Vt||""}}return _t.\u0275fac=function(Vt){return new(Vt||_t)(a.LFG(r.K0))},_t.\u0275prov=a.Yz7({token:_t,factory:function(Vt){let yn=null;return yn=Vt?new Vt:function bi(){return new fi((0,a.LFG)(r.K0))}(),yn},providedIn:"root"}),_t})();const Zn="undefined"!=typeof window&&window||{};class Xn{constructor(yt,Vt){this.msPerTick=yt,this.numTicks=Vt}}class zn{constructor(yt){this.appRef=yt.injector.get(a.z2F)}timeChangeDetection(yt){const Vt=yt&&yt.record,yn="Change Detection",Cr=null!=Zn.console.profile;Vt&&Cr&&Zn.console.profile(yn);const xi=ri();let yi=0;for(;yi<5||ri()-xi<500;)this.appRef.tick(),yi++;const Yo=ri();Vt&&Cr&&Zn.console.profileEnd(yn);const Qo=(Yo-xi)/yi;return Zn.console.log(`ran ${yi} change detection cycles`),Zn.console.log(`${Qo.toFixed(2)} ms per check`),new Xn(Qo,yi)}}function ri(){return Zn.performance&&Zn.performance.now?Zn.performance.now():(new Date).getTime()}function ui(_t){return function vn(_t,yt){"undefined"!=typeof COMPILED&&COMPILED||((a.dqk.ng=a.dqk.ng||{})[_t]=yt)}("profiler",new zn(_t)),_t}let Ut=(()=>{class _t{}return _t.\u0275fac=function(Vt){return new(Vt||_t)},_t.\u0275prov=a.Yz7({token:_t,factory:function(Vt){let yn=null;return yn=Vt?new(Vt||_t):a.LFG(Et),yn},providedIn:"root"}),_t})(),Et=(()=>{class _t extends Ut{constructor(Vt){super(),this._doc=Vt}sanitize(Vt,yn){if(null==yn)return null;switch(Vt){case a.q3G.NONE:return yn;case a.q3G.HTML:return(0,a.qzn)(yn,"HTML")?(0,a.z3N)(yn):(0,a.EiD)(this._doc,String(yn)).toString();case a.q3G.STYLE:return(0,a.qzn)(yn,"Style")?(0,a.z3N)(yn):yn;case a.q3G.SCRIPT:if((0,a.qzn)(yn,"Script"))return(0,a.z3N)(yn);throw new Error("unsafe value used in a script context");case a.q3G.URL:return(0,a.yhl)(yn),(0,a.qzn)(yn,"URL")?(0,a.z3N)(yn):(0,a.mCW)(String(yn));case a.q3G.RESOURCE_URL:if((0,a.qzn)(yn,"ResourceURL"))return(0,a.z3N)(yn);throw new Error("unsafe value used in a resource URL context (see https://g.co/ng/security#xss)");default:throw new Error(`Unexpected SecurityContext ${Vt} (see https://g.co/ng/security#xss)`)}}bypassSecurityTrustHtml(Vt){return(0,a.JVY)(Vt)}bypassSecurityTrustStyle(Vt){return(0,a.L6k)(Vt)}bypassSecurityTrustScript(Vt){return(0,a.eBb)(Vt)}bypassSecurityTrustUrl(Vt){return(0,a.LAX)(Vt)}bypassSecurityTrustResourceUrl(Vt){return(0,a.pB0)(Vt)}}return _t.\u0275fac=function(Vt){return new(Vt||_t)(a.LFG(r.K0))},_t.\u0275prov=a.Yz7({token:_t,factory:function(Vt){let yn=null;return yn=Vt?new Vt:function Dn(_t){return new Et(_t.get(r.K0))}(a.LFG(a.zs3)),yn},providedIn:"root"}),_t})()},55860:(v,b,i)=>{"use strict";i.d(b,{gz:()=>mo,m2:()=>Tt,OD:()=>Oe,wm:()=>_l,F0:()=>Ci,rH:()=>Yn,Od:()=>fo,yS:()=>Rr,Bz:()=>Hc,lC:()=>ki});var r=i(89724),a=i(76666),f=i(25917),u=i(26215),e=i(9112),p=i(40205),g=i(13410),S=i(6481),M=i(70882),w=i(59193);function x(Ze){return new M.y(Ae=>{let ge;try{ge=Ze()}catch(Ot){return void Ae.error(Ot)}return(ge?(0,a.D)(ge):(0,w.c)()).subscribe(Ae)})}var B=i(52441),W=i(79765),j=i(88002),q=i(43190),ue=i(15257),re=i(39761),H=i(42145),se=i(45435),ae=i(5304),ie=i(94612),fe=i(12627),he=i(28049),Ce=i(19773),ce=i(68307),Be=i(548),Ve=i(51307),Xe=i(68939),He=i(63282),Pe=i(11048);class Ge{constructor(Ae,ge){this.id=Ae,this.url=ge}}class Oe extends Ge{constructor(Ae,ge,ht="imperative",Ot=null){super(Ae,ge),this.navigationTrigger=ht,this.restoredState=Ot}toString(){return`NavigationStart(id: ${this.id}, url: '${this.url}')`}}class Tt extends Ge{constructor(Ae,ge,ht){super(Ae,ge),this.urlAfterRedirects=ht}toString(){return`NavigationEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}')`}}class We extends Ge{constructor(Ae,ge,ht){super(Ae,ge),this.reason=ht}toString(){return`NavigationCancel(id: ${this.id}, url: '${this.url}')`}}class Qt extends Ge{constructor(Ae,ge,ht){super(Ae,ge),this.error=ht}toString(){return`NavigationError(id: ${this.id}, url: '${this.url}', error: ${this.error})`}}class Nt extends Ge{constructor(Ae,ge,ht,Ot){super(Ae,ge),this.urlAfterRedirects=ht,this.state=Ot}toString(){return`RoutesRecognized(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class Yt extends Ge{constructor(Ae,ge,ht,Ot){super(Ae,ge),this.urlAfterRedirects=ht,this.state=Ot}toString(){return`GuardsCheckStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class dn extends Ge{constructor(Ae,ge,ht,Ot,sn){super(Ae,ge),this.urlAfterRedirects=ht,this.state=Ot,this.shouldActivate=sn}toString(){return`GuardsCheckEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state}, shouldActivate: ${this.shouldActivate})`}}class rn extends Ge{constructor(Ae,ge,ht,Ot){super(Ae,ge),this.urlAfterRedirects=ht,this.state=Ot}toString(){return`ResolveStart(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class vt extends Ge{constructor(Ae,ge,ht,Ot){super(Ae,ge),this.urlAfterRedirects=ht,this.state=Ot}toString(){return`ResolveEnd(id: ${this.id}, url: '${this.url}', urlAfterRedirects: '${this.urlAfterRedirects}', state: ${this.state})`}}class xt{constructor(Ae){this.route=Ae}toString(){return`RouteConfigLoadStart(path: ${this.route.path})`}}class Ct{constructor(Ae){this.route=Ae}toString(){return`RouteConfigLoadEnd(path: ${this.route.path})`}}class Gt{constructor(Ae){this.snapshot=Ae}toString(){return`ChildActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class Fn{constructor(Ae){this.snapshot=Ae}toString(){return`ChildActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class pr{constructor(Ae){this.snapshot=Ae}toString(){return`ActivationStart(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class mi{constructor(Ae){this.snapshot=Ae}toString(){return`ActivationEnd(path: '${this.snapshot.routeConfig&&this.snapshot.routeConfig.path||""}')`}}class ci{constructor(Ae,ge,ht){this.routerEvent=Ae,this.position=ge,this.anchor=ht}toString(){return`Scroll(anchor: '${this.anchor}', position: '${this.position?`${this.position[0]}, ${this.position[1]}`:null}')`}}const hr="primary";class Br{constructor(Ae){this.params=Ae||{}}has(Ae){return Object.prototype.hasOwnProperty.call(this.params,Ae)}get(Ae){if(this.has(Ae)){const ge=this.params[Ae];return Array.isArray(ge)?ge[0]:ge}return null}getAll(Ae){if(this.has(Ae)){const ge=this.params[Ae];return Array.isArray(ge)?ge:[ge]}return[]}get keys(){return Object.keys(this.params)}}function Ur(Ze){return new Br(Ze)}const Hn="ngNavigationCancelingError";function er(Ze){const Ae=Error("NavigationCancelingError: "+Ze);return Ae[Hn]=!0,Ae}function ei(Ze,Ae,ge){const ht=ge.path.split("/");if(ht.length>Ze.length||"full"===ge.pathMatch&&(Ae.hasChildren()||ht.length<Ze.length))return null;const Ot={};for(let sn=0;sn<ht.length;sn++){const Un=ht[sn],gr=Ze[sn];if(Un.startsWith(":"))Ot[Un.substring(1)]=gr;else if(Un!==gr.path)return null}return{consumed:Ze.slice(0,ht.length),posParams:Ot}}function fi(Ze,Ae){const ge=Ze?Object.keys(Ze):void 0,ht=Ae?Object.keys(Ae):void 0;if(!ge||!ht||ge.length!=ht.length)return!1;let Ot;for(let sn=0;sn<ge.length;sn++)if(Ot=ge[sn],!no(Ze[Ot],Ae[Ot]))return!1;return!0}function no(Ze,Ae){if(Array.isArray(Ze)&&Array.isArray(Ae)){if(Ze.length!==Ae.length)return!1;const ge=[...Ze].sort(),ht=[...Ae].sort();return ge.every((Ot,sn)=>ht[sn]===Ot)}return Ze===Ae}function xo(Ze){return Array.prototype.concat.apply([],Ze)}function Er(Ze){return Ze.length>0?Ze[Ze.length-1]:null}function vn(Ze,Ae){for(const ge in Ze)Ze.hasOwnProperty(ge)&&Ae(Ze[ge],ge)}function Zn(Ze){return(0,r.CqO)(Ze)?Ze:(0,r.QGY)(Ze)?(0,a.D)(Promise.resolve(Ze)):(0,f.of)(Ze)}const zn={exact:function vr(Ze,Ae,ge){if(!dt(Ze.segments,Ae.segments)||!Wn(Ze.segments,Ae.segments,ge)||Ze.numberOfChildren!==Ae.numberOfChildren)return!1;for(const ht in Ae.children)if(!Ze.children[ht]||!vr(Ze.children[ht],Ae.children[ht],ge))return!1;return!0},subset:mn},ri={exact:function ui(Ze,Ae){return fi(Ze,Ae)},subset:function Ji(Ze,Ae){return Object.keys(Ae).length<=Object.keys(Ze).length&&Object.keys(Ae).every(ge=>no(Ze[ge],Ae[ge]))},ignored:()=>!0};function Gi(Ze,Ae,ge){return zn[ge.paths](Ze.root,Ae.root,ge.matrixParams)&&ri[ge.queryParams](Ze.queryParams,Ae.queryParams)&&!("exact"===ge.fragment&&Ze.fragment!==Ae.fragment)}function mn(Ze,Ae,ge){return Rn(Ze,Ae,Ae.segments,ge)}function Rn(Ze,Ae,ge,ht){if(Ze.segments.length>ge.length){const Ot=Ze.segments.slice(0,ge.length);return!(!dt(Ot,ge)||Ae.hasChildren()||!Wn(Ot,ge,ht))}if(Ze.segments.length===ge.length){if(!dt(Ze.segments,ge)||!Wn(Ze.segments,ge,ht))return!1;for(const Ot in Ae.children)if(!Ze.children[Ot]||!mn(Ze.children[Ot],Ae.children[Ot],ht))return!1;return!0}{const Ot=ge.slice(0,Ze.segments.length),sn=ge.slice(Ze.segments.length);return!!(dt(Ze.segments,Ot)&&Wn(Ze.segments,Ot,ht)&&Ze.children[hr])&&Rn(Ze.children[hr],Ae,sn,ht)}}function Wn(Ze,Ae,ge){return Ae.every((ht,Ot)=>ri[ge](Ze[Ot].parameters,ht.parameters))}class et{constructor(Ae,ge,ht){this.root=Ae,this.queryParams=ge,this.fragment=ht}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Ur(this.queryParams)),this._queryParamMap}toString(){return Lr.serialize(this)}}class Le{constructor(Ae,ge){this.segments=Ae,this.children=ge,this.parent=null,vn(ge,(ht,Ot)=>ht.parent=this)}hasChildren(){return this.numberOfChildren>0}get numberOfChildren(){return Object.keys(this.children).length}toString(){return ti(this)}}class Re{constructor(Ae,ge){this.path=Ae,this.parameters=ge}get parameterMap(){return this._parameterMap||(this._parameterMap=Ur(this.parameters)),this._parameterMap}toString(){return yn(this)}}function dt(Ze,Ae){return Ze.length===Ae.length&&Ze.every((ge,ht)=>ge.path===Ae[ht].path)}class nn{}class Fe{parse(Ae){const ge=new Xo(Ae);return new et(ge.parseRootSegment(),ge.parseQueryParams(),ge.parseFragment())}serialize(Ae){const ge=`/${Ut(Ae.root,!0)}`,ht=function xi(Ze){const Ae=Object.keys(Ze).map(ge=>{const ht=Ze[ge];return Array.isArray(ht)?ht.map(Ot=>`${Et(ge)}=${Et(Ot)}`).join("&"):`${Et(ge)}=${Et(ht)}`}).filter(ge=>!!ge);return Ae.length?`?${Ae.join("&")}`:""}(Ae.queryParams);return`${ge}${ht}${"string"==typeof Ae.fragment?`#${function $t(Ze){return encodeURI(Ze)}(Ae.fragment)}`:""}`}}const Lr=new Fe;function ti(Ze){return Ze.segments.map(Ae=>yn(Ae)).join("/")}function Ut(Ze,Ae){if(!Ze.hasChildren())return ti(Ze);if(Ae){const ge=Ze.children[hr]?Ut(Ze.children[hr],!1):"",ht=[];return vn(Ze.children,(Ot,sn)=>{sn!==hr&&ht.push(`${sn}:${Ut(Ot,!1)}`)}),ht.length>0?`${ge}(${ht.join("//")})`:ge}{const ge=function st(Ze,Ae){let ge=[];return vn(Ze.children,(ht,Ot)=>{Ot===hr&&(ge=ge.concat(Ae(ht,Ot)))}),vn(Ze.children,(ht,Ot)=>{Ot!==hr&&(ge=ge.concat(Ae(ht,Ot)))}),ge}(Ze,(ht,Ot)=>Ot===hr?[Ut(Ze.children[hr],!1)]:[`${Ot}:${Ut(ht,!1)}`]);return 1===Object.keys(Ze.children).length&&null!=Ze.children[hr]?`${ti(Ze)}/${ge[0]}`:`${ti(Ze)}/(${ge.join("//")})`}}function Dn(Ze){return encodeURIComponent(Ze).replace(/%40/g,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",")}function Et(Ze){return Dn(Ze).replace(/%3B/gi,";")}function _t(Ze){return Dn(Ze).replace(/\(/g,"%28").replace(/\)/g,"%29").replace(/%26/gi,"&")}function yt(Ze){return decodeURIComponent(Ze)}function Vt(Ze){return yt(Ze.replace(/\+/g,"%20"))}function yn(Ze){return`${_t(Ze.path)}${function Cr(Ze){return Object.keys(Ze).map(Ae=>`;${_t(Ae)}=${_t(Ze[Ae])}`).join("")}(Ze.parameters)}`}const yi=/^[^\/()?;=#]+/;function Yo(Ze){const Ae=Ze.match(yi);return Ae?Ae[0]:""}const Qo=/^[^=?&#]+/,Ri=/^[^&#]+/;class Xo{constructor(Ae){this.url=Ae,this.remaining=Ae}parseRootSegment(){return this.consumeOptional("/"),""===this.remaining||this.peekStartsWith("?")||this.peekStartsWith("#")?new Le([],{}):new Le([],this.parseChildren())}parseQueryParams(){const Ae={};if(this.consumeOptional("?"))do{this.parseQueryParam(Ae)}while(this.consumeOptional("&"));return Ae}parseFragment(){return this.consumeOptional("#")?decodeURIComponent(this.remaining):null}parseChildren(){if(""===this.remaining)return{};this.consumeOptional("/");const Ae=[];for(this.peekStartsWith("(")||Ae.push(this.parseSegment());this.peekStartsWith("/")&&!this.peekStartsWith("//")&&!this.peekStartsWith("/(");)this.capture("/"),Ae.push(this.parseSegment());let ge={};this.peekStartsWith("/(")&&(this.capture("/"),ge=this.parseParens(!0));let ht={};return this.peekStartsWith("(")&&(ht=this.parseParens(!1)),(Ae.length>0||Object.keys(ge).length>0)&&(ht[hr]=new Le(Ae,ge)),ht}parseSegment(){const Ae=Yo(this.remaining);if(""===Ae&&this.peekStartsWith(";"))throw new Error(`Empty path url segment cannot have parameters: '${this.remaining}'.`);return this.capture(Ae),new Re(yt(Ae),this.parseMatrixParams())}parseMatrixParams(){const Ae={};for(;this.consumeOptional(";");)this.parseParam(Ae);return Ae}parseParam(Ae){const ge=Yo(this.remaining);if(!ge)return;this.capture(ge);let ht="";if(this.consumeOptional("=")){const Ot=Yo(this.remaining);Ot&&(ht=Ot,this.capture(ht))}Ae[yt(ge)]=yt(ht)}parseQueryParam(Ae){const ge=function lo(Ze){const Ae=Ze.match(Qo);return Ae?Ae[0]:""}(this.remaining);if(!ge)return;this.capture(ge);let ht="";if(this.consumeOptional("=")){const Un=function ko(Ze){const Ae=Ze.match(Ri);return Ae?Ae[0]:""}(this.remaining);Un&&(ht=Un,this.capture(ht))}const Ot=Vt(ge),sn=Vt(ht);if(Ae.hasOwnProperty(Ot)){let Un=Ae[Ot];Array.isArray(Un)||(Un=[Un],Ae[Ot]=Un),Un.push(sn)}else Ae[Ot]=sn}parseParens(Ae){const ge={};for(this.capture("(");!this.consumeOptional(")")&&this.remaining.length>0;){const ht=Yo(this.remaining),Ot=this.remaining[ht.length];if("/"!==Ot&&")"!==Ot&&";"!==Ot)throw new Error(`Cannot parse url '${this.url}'`);let sn;ht.indexOf(":")>-1?(sn=ht.substr(0,ht.indexOf(":")),this.capture(sn),this.capture(":")):Ae&&(sn=hr);const Un=this.parseChildren();ge[sn]=1===Object.keys(Un).length?Un[hr]:new Le([],Un),this.consumeOptional("//")}return ge}peekStartsWith(Ae){return this.remaining.startsWith(Ae)}consumeOptional(Ae){return!!this.peekStartsWith(Ae)&&(this.remaining=this.remaining.substring(Ae.length),!0)}capture(Ae){if(!this.consumeOptional(Ae))throw new Error(`Expected "${Ae}".`)}}class ir{constructor(Ae){this._root=Ae}get root(){return this._root.value}parent(Ae){const ge=this.pathFromRoot(Ae);return ge.length>1?ge[ge.length-2]:null}children(Ae){const ge=si(Ae,this._root);return ge?ge.children.map(ht=>ht.value):[]}firstChild(Ae){const ge=si(Ae,this._root);return ge&&ge.children.length>0?ge.children[0].value:null}siblings(Ae){const ge=kn(Ae,this._root);return ge.length<2?[]:ge[ge.length-2].children.map(Ot=>Ot.value).filter(Ot=>Ot!==Ae)}pathFromRoot(Ae){return kn(Ae,this._root).map(ge=>ge.value)}}function si(Ze,Ae){if(Ze===Ae.value)return Ae;for(const ge of Ae.children){const ht=si(Ze,ge);if(ht)return ht}return null}function kn(Ze,Ae){if(Ze===Ae.value)return[Ae];for(const ge of Ae.children){const ht=kn(Ze,ge);if(ht.length)return ht.unshift(Ae),ht}return[]}class nr{constructor(Ae,ge){this.value=Ae,this.children=ge}toString(){return`TreeNode(${this.value})`}}function jr(Ze){const Ae={};return Ze&&Ze.children.forEach(ge=>Ae[ge.value.outlet]=ge),Ae}class ao extends ir{constructor(Ae,ge){super(Ae),this.snapshot=ge,Ar(this,Ae)}toString(){return this.snapshot.toString()}}function $i(Ze,Ae){const ge=function Eo(Ze,Ae){const Un=new or([],{},{},"",{},hr,Ae,null,Ze.root,-1,{});return new Mr("",new nr(Un,[]))}(Ze,Ae),ht=new u.X([new Re("",{})]),Ot=new u.X({}),sn=new u.X({}),Un=new u.X({}),gr=new u.X(""),gi=new mo(ht,Ot,Un,gr,sn,hr,Ae,ge.root);return gi.snapshot=ge.root,new ao(new nr(gi,[]),ge)}class mo{constructor(Ae,ge,ht,Ot,sn,Un,gr,gi){this.url=Ae,this.params=ge,this.queryParams=ht,this.fragment=Ot,this.data=sn,this.outlet=Un,this.component=gr,this._futureSnapshot=gi}get routeConfig(){return this._futureSnapshot.routeConfig}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=this.params.pipe((0,j.U)(Ae=>Ur(Ae)))),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=this.queryParams.pipe((0,j.U)(Ae=>Ur(Ae)))),this._queryParamMap}toString(){return this.snapshot?this.snapshot.toString():`Future(${this._futureSnapshot})`}}function Go(Ze,Ae="emptyOnly"){const ge=Ze.pathFromRoot;let ht=0;if("always"!==Ae)for(ht=ge.length-1;ht>=1;){const Ot=ge[ht],sn=ge[ht-1];if(Ot.routeConfig&&""===Ot.routeConfig.path)ht--;else{if(sn.component)break;ht--}}return function ua(Ze){return Ze.reduce((Ae,ge)=>({params:Object.assign(Object.assign({},Ae.params),ge.params),data:Object.assign(Object.assign({},Ae.data),ge.data),resolve:Object.assign(Object.assign({},Ae.resolve),ge._resolvedData)}),{params:{},data:{},resolve:{}})}(ge.slice(ht))}class or{constructor(Ae,ge,ht,Ot,sn,Un,gr,gi,Lo,Ca,ms){this.url=Ae,this.params=ge,this.queryParams=ht,this.fragment=Ot,this.data=sn,this.outlet=Un,this.component=gr,this.routeConfig=gi,this._urlSegment=Lo,this._lastPathIndex=Ca,this._resolve=ms}get root(){return this._routerState.root}get parent(){return this._routerState.parent(this)}get firstChild(){return this._routerState.firstChild(this)}get children(){return this._routerState.children(this)}get pathFromRoot(){return this._routerState.pathFromRoot(this)}get paramMap(){return this._paramMap||(this._paramMap=Ur(this.params)),this._paramMap}get queryParamMap(){return this._queryParamMap||(this._queryParamMap=Ur(this.queryParams)),this._queryParamMap}toString(){return`Route(url:'${this.url.map(ht=>ht.toString()).join("/")}', path:'${this.routeConfig?this.routeConfig.path:""}')`}}class Mr extends ir{constructor(Ae,ge){super(ge),this.url=Ae,Ar(this,ge)}toString(){return cr(this._root)}}function Ar(Ze,Ae){Ae.value._routerState=Ze,Ae.children.forEach(ge=>Ar(Ze,ge))}function cr(Ze){const Ae=Ze.children.length>0?` { ${Ze.children.map(cr).join(", ")} } `:"";return`${Ze.value}${Ae}`}function pi(Ze){if(Ze.snapshot){const Ae=Ze.snapshot,ge=Ze._futureSnapshot;Ze.snapshot=ge,fi(Ae.queryParams,ge.queryParams)||Ze.queryParams.next(ge.queryParams),Ae.fragment!==ge.fragment&&Ze.fragment.next(ge.fragment),fi(Ae.params,ge.params)||Ze.params.next(ge.params),function bi(Ze,Ae){if(Ze.length!==Ae.length)return!1;for(let ge=0;ge<Ze.length;++ge)if(!fi(Ze[ge],Ae[ge]))return!1;return!0}(Ae.url,ge.url)||Ze.url.next(ge.url),fi(Ae.data,ge.data)||Ze.data.next(ge.data)}else Ze.snapshot=Ze._futureSnapshot,Ze.data.next(Ze._futureSnapshot.data)}function Sn(Ze,Ae){const ge=fi(Ze.params,Ae.params)&&function Se(Ze,Ae){return dt(Ze,Ae)&&Ze.every((ge,ht)=>fi(ge.parameters,Ae[ht].parameters))}(Ze.url,Ae.url);return ge&&!(!Ze.parent!=!Ae.parent)&&(!Ze.parent||Sn(Ze.parent,Ae.parent))}function Jr(Ze,Ae,ge){if(ge&&Ze.shouldReuseRoute(Ae.value,ge.value.snapshot)){const ht=ge.value;ht._futureSnapshot=Ae.value;const Ot=function ro(Ze,Ae,ge){return Ae.children.map(ht=>{for(const Ot of ge.children)if(Ze.shouldReuseRoute(ht.value,Ot.value.snapshot))return Jr(Ze,ht,Ot);return Jr(Ze,ht)})}(Ze,Ae,ge);return new nr(ht,Ot)}{if(Ze.shouldAttach(Ae.value)){const sn=Ze.retrieve(Ae.value);if(null!==sn){const Un=sn.route;return Un.value._futureSnapshot=Ae.value,Un.children=Ae.children.map(gr=>Jr(Ze,gr)),Un}}const ht=function go(Ze){return new mo(new u.X(Ze.url),new u.X(Ze.params),new u.X(Ze.queryParams),new u.X(Ze.fragment),new u.X(Ze.data),Ze.outlet,Ze.component,Ze)}(Ae.value),Ot=Ae.children.map(sn=>Jr(Ze,sn));return new nr(ht,Ot)}}function Ys(Ze){return"object"==typeof Ze&&null!=Ze&&!Ze.outlets&&!Ze.segmentPath}function ds(Ze){return"object"==typeof Ze&&null!=Ze&&Ze.outlets}function es(Ze,Ae,ge,ht,Ot){let sn={};if(ht&&vn(ht,(gr,gi)=>{sn[gi]=Array.isArray(gr)?gr.map(Lo=>`${Lo}`):`${gr}`}),Ze===Ae)return new et(ge,sn,Ot);const Un=ma(Ze,Ae,ge);return new et(Un,sn,Ot)}function ma(Ze,Ae,ge){const ht={};return vn(Ze.children,(Ot,sn)=>{ht[sn]=Ot===Ae?ge:ma(Ot,Ae,ge)}),new Le(Ze.segments,ht)}class Ea{constructor(Ae,ge,ht){if(this.isAbsolute=Ae,this.numberOfDoubleDots=ge,this.commands=ht,Ae&&ht.length>0&&Ys(ht[0]))throw new Error("Root segment cannot have matrix parameters");const Ot=ht.find(ds);if(Ot&&Ot!==Er(ht))throw new Error("{outlets:{}} has to be the last command")}toRoot(){return this.isAbsolute&&1===this.commands.length&&"/"==this.commands[0]}}class sa{constructor(Ae,ge,ht){this.segmentGroup=Ae,this.processChildren=ge,this.index=ht}}function yl(Ze,Ae,ge){if(Ze||(Ze=new Le([],{})),0===Ze.segments.length&&Ze.hasChildren())return Wo(Ze,Ae,ge);const ht=function ys(Ze,Ae,ge){let ht=0,Ot=Ae;const sn={match:!1,pathIndex:0,commandIndex:0};for(;Ot<Ze.segments.length;){if(ht>=ge.length)return sn;const Un=Ze.segments[Ot],gr=ge[ht];if(ds(gr))break;const gi=`${gr}`,Lo=ht<ge.length-1?ge[ht+1]:null;if(Ot>0&&void 0===gi)break;if(gi&&Lo&&"object"==typeof Lo&&void 0===Lo.outlets){if(!js(gi,Lo,Un))return sn;ht+=2}else{if(!js(gi,{},Un))return sn;ht++}Ot++}return{match:!0,pathIndex:Ot,commandIndex:ht}}(Ze,Ae,ge),Ot=ge.slice(ht.commandIndex);if(ht.match&&ht.pathIndex<Ze.segments.length){const sn=new Le(Ze.segments.slice(0,ht.pathIndex),{});return sn.children[hr]=new Le(Ze.segments.slice(ht.pathIndex),Ze.children),Wo(sn,0,Ot)}return ht.match&&0===Ot.length?new Le(Ze.segments,{}):ht.match&&!Ze.hasChildren()?Wa(Ze,Ae,ge):ht.match?Wo(Ze,0,Ot):Wa(Ze,Ae,ge)}function Wo(Ze,Ae,ge){if(0===ge.length)return new Le(Ze.segments,{});{const ht=function Co(Ze){return ds(Ze[0])?Ze[0].outlets:{[hr]:Ze}}(ge),Ot={};return vn(ht,(sn,Un)=>{"string"==typeof sn&&(sn=[sn]),null!==sn&&(Ot[Un]=yl(Ze.children[Un],Ae,sn))}),vn(Ze.children,(sn,Un)=>{void 0===ht[Un]&&(Ot[Un]=sn)}),new Le(Ze.segments,Ot)}}function Wa(Ze,Ae,ge){const ht=Ze.segments.slice(0,Ae);let Ot=0;for(;Ot<ge.length;){const sn=ge[Ot];if(ds(sn)){const gi=Is(sn.outlets);return new Le(ht,gi)}if(0===Ot&&Ys(ge[0])){ht.push(new Re(Ze.segments[Ae].path,nl(ge[0]))),Ot++;continue}const Un=ds(sn)?sn.outlets[hr]:`${sn}`,gr=Ot<ge.length-1?ge[Ot+1]:null;Un&&gr&&Ys(gr)?(ht.push(new Re(Un,nl(gr))),Ot+=2):(ht.push(new Re(Un,{})),Ot++)}return new Le(ht,{})}function Is(Ze){const Ae={};return vn(Ze,(ge,ht)=>{"string"==typeof ge&&(ge=[ge]),null!==ge&&(Ae[ht]=Wa(new Le([],{}),0,ge))}),Ae}function nl(Ze){const Ae={};return vn(Ze,(ge,ht)=>Ae[ht]=`${ge}`),Ae}function js(Ze,Ae,ge){return Ze==ge.path&&fi(Ae,ge.parameters)}class To{constructor(Ae,ge,ht,Ot){this.routeReuseStrategy=Ae,this.futureState=ge,this.currState=ht,this.forwardEvent=Ot}activate(Ae){const ge=this.futureState._root,ht=this.currState?this.currState._root:null;this.deactivateChildRoutes(ge,ht,Ae),pi(this.futureState.root),this.activateChildRoutes(ge,ht,Ae)}deactivateChildRoutes(Ae,ge,ht){const Ot=jr(ge);Ae.children.forEach(sn=>{const Un=sn.value.outlet;this.deactivateRoutes(sn,Ot[Un],ht),delete Ot[Un]}),vn(Ot,(sn,Un)=>{this.deactivateRouteAndItsChildren(sn,ht)})}deactivateRoutes(Ae,ge,ht){const Ot=Ae.value,sn=ge?ge.value:null;if(Ot===sn)if(Ot.component){const Un=ht.getContext(Ot.outlet);Un&&this.deactivateChildRoutes(Ae,ge,Un.children)}else this.deactivateChildRoutes(Ae,ge,ht);else sn&&this.deactivateRouteAndItsChildren(ge,ht)}deactivateRouteAndItsChildren(Ae,ge){Ae.value.component&&this.routeReuseStrategy.shouldDetach(Ae.value.snapshot)?this.detachAndStoreRouteSubtree(Ae,ge):this.deactivateRouteAndOutlet(Ae,ge)}detachAndStoreRouteSubtree(Ae,ge){const ht=ge.getContext(Ae.value.outlet),Ot=ht&&Ae.value.component?ht.children:ge,sn=jr(Ae);for(const Un of Object.keys(sn))this.deactivateRouteAndItsChildren(sn[Un],Ot);if(ht&&ht.outlet){const Un=ht.outlet.detach(),gr=ht.children.onOutletDeactivated();this.routeReuseStrategy.store(Ae.value.snapshot,{componentRef:Un,route:Ae,contexts:gr})}}deactivateRouteAndOutlet(Ae,ge){const ht=ge.getContext(Ae.value.outlet),Ot=ht&&Ae.value.component?ht.children:ge,sn=jr(Ae);for(const Un of Object.keys(sn))this.deactivateRouteAndItsChildren(sn[Un],Ot);ht&&ht.outlet&&(ht.outlet.deactivate(),ht.children.onOutletDeactivated(),ht.attachRef=null,ht.resolver=null,ht.route=null)}activateChildRoutes(Ae,ge,ht){const Ot=jr(ge);Ae.children.forEach(sn=>{this.activateRoutes(sn,Ot[sn.value.outlet],ht),this.forwardEvent(new mi(sn.value.snapshot))}),Ae.children.length&&this.forwardEvent(new Fn(Ae.value.snapshot))}activateRoutes(Ae,ge,ht){const Ot=Ae.value,sn=ge?ge.value:null;if(pi(Ot),Ot===sn)if(Ot.component){const Un=ht.getOrCreateContext(Ot.outlet);this.activateChildRoutes(Ae,ge,Un.children)}else this.activateChildRoutes(Ae,ge,ht);else if(Ot.component){const Un=ht.getOrCreateContext(Ot.outlet);if(this.routeReuseStrategy.shouldAttach(Ot.snapshot)){const gr=this.routeReuseStrategy.retrieve(Ot.snapshot);this.routeReuseStrategy.store(Ot.snapshot,null),Un.children.onOutletReAttached(gr.contexts),Un.attachRef=gr.componentRef,Un.route=gr.route.value,Un.outlet&&Un.outlet.attach(gr.componentRef,gr.route.value),pi(gr.route.value),this.activateChildRoutes(Ae,null,Un.children)}else{const gr=function Ns(Ze){for(let Ae=Ze.parent;Ae;Ae=Ae.parent){const ge=Ae.routeConfig;if(ge&&ge._loadedConfig)return ge._loadedConfig;if(ge&&ge.component)return null}return null}(Ot.snapshot),gi=gr?gr.module.componentFactoryResolver:null;Un.attachRef=null,Un.route=Ot,Un.resolver=gi,Un.outlet&&Un.outlet.activateWith(Ot,gi),this.activateChildRoutes(Ae,null,Un.children)}}else this.activateChildRoutes(Ae,null,ht)}}class hs{constructor(Ae,ge){this.routes=Ae,this.module=ge}}function Oo(Ze){return"function"==typeof Ze}function Ki(Ze){return Ze instanceof et}const jt=Symbol("INITIAL_VALUE");function hn(){return(0,q.w)(Ze=>(0,e.aj)(Ze.map(Ae=>Ae.pipe((0,ue.q)(1),(0,re.O)(jt)))).pipe((0,H.R)((Ae,ge)=>{let ht=!1;return ge.reduce((Ot,sn,Un)=>Ot!==jt?Ot:(sn===jt&&(ht=!0),ht||!1!==sn&&Un!==ge.length-1&&!Ki(sn)?Ot:sn),Ae)},jt),(0,se.h)(Ae=>Ae!==jt),(0,j.U)(Ae=>Ki(Ae)?Ae:!0===Ae),(0,ue.q)(1)))}class ii{constructor(){this.outlet=null,this.route=null,this.resolver=null,this.children=new Oi,this.attachRef=null}}class Oi{constructor(){this.contexts=new Map}onChildOutletCreated(Ae,ge){const ht=this.getOrCreateContext(Ae);ht.outlet=ge,this.contexts.set(Ae,ht)}onChildOutletDestroyed(Ae){const ge=this.getContext(Ae);ge&&(ge.outlet=null,ge.attachRef=null)}onOutletDeactivated(){const Ae=this.contexts;return this.contexts=new Map,Ae}onOutletReAttached(Ae){this.contexts=Ae}getOrCreateContext(Ae){let ge=this.getContext(Ae);return ge||(ge=new ii,this.contexts.set(Ae,ge)),ge}getContext(Ae){return this.contexts.get(Ae)||null}}let ki=(()=>{class Ze{constructor(ge,ht,Ot,sn,Un){this.parentContexts=ge,this.location=ht,this.resolver=Ot,this.changeDetector=Un,this.activated=null,this._activatedRoute=null,this.activateEvents=new r.vpe,this.deactivateEvents=new r.vpe,this.attachEvents=new r.vpe,this.detachEvents=new r.vpe,this.name=sn||hr,ge.onChildOutletCreated(this.name,this)}ngOnDestroy(){this.parentContexts.onChildOutletDestroyed(this.name)}ngOnInit(){if(!this.activated){const ge=this.parentContexts.getContext(this.name);ge&&ge.route&&(ge.attachRef?this.attach(ge.attachRef,ge.route):this.activateWith(ge.route,ge.resolver||null))}}get isActivated(){return!!this.activated}get component(){if(!this.activated)throw new Error("Outlet is not activated");return this.activated.instance}get activatedRoute(){if(!this.activated)throw new Error("Outlet is not activated");return this._activatedRoute}get activatedRouteData(){return this._activatedRoute?this._activatedRoute.snapshot.data:{}}detach(){if(!this.activated)throw new Error("Outlet is not activated");this.location.detach();const ge=this.activated;return this.activated=null,this._activatedRoute=null,this.detachEvents.emit(ge.instance),ge}attach(ge,ht){this.activated=ge,this._activatedRoute=ht,this.location.insert(ge.hostView),this.attachEvents.emit(ge.instance)}deactivate(){if(this.activated){const ge=this.component;this.activated.destroy(),this.activated=null,this._activatedRoute=null,this.deactivateEvents.emit(ge)}}activateWith(ge,ht){if(this.isActivated)throw new Error("Cannot activate an already activated outlet");this._activatedRoute=ge;const Un=(ht=ht||this.resolver).resolveComponentFactory(ge._futureSnapshot.routeConfig.component),gr=this.parentContexts.getOrCreateContext(this.name).children,gi=new _s(ge,gr,this.location.injector);this.activated=this.location.createComponent(Un,this.location.length,gi),this.changeDetector.markForCheck(),this.activateEvents.emit(this.activated.instance)}}return Ze.\u0275fac=function(ge){return new(ge||Ze)(r.Y36(Oi),r.Y36(r.s_b),r.Y36(r._Vd),r.$8M("name"),r.Y36(r.sBO))},Ze.\u0275dir=r.lG2({type:Ze,selectors:[["router-outlet"]],outputs:{activateEvents:"activate",deactivateEvents:"deactivate",attachEvents:"attach",detachEvents:"detach"},exportAs:["outlet"]}),Ze})();class _s{constructor(Ae,ge,ht){this.route=Ae,this.childContexts=ge,this.parent=ht}get(Ae,ge){return Ae===mo?this.route:Ae===Oi?this.childContexts:this.parent.get(Ae,ge)}}let Vo=(()=>{class Ze{}return Ze.\u0275fac=function(ge){return new(ge||Ze)},Ze.\u0275cmp=r.Xpm({type:Ze,selectors:[["ng-component"]],decls:1,vars:0,template:function(ge,ht){1&ge&&r._UZ(0,"router-outlet")},directives:[ki],encapsulation:2}),Ze})();function Fs(Ze,Ae=""){for(let ge=0;ge<Ze.length;ge++){const ht=Ze[ge];Ks(ht,hl(Ae,ht))}}function Ks(Ze,Ae){Ze.children&&Fs(Ze.children,Ae)}function hl(Ze,Ae){return Ae?Ze||Ae.path?Ze&&!Ae.path?`${Ze}/`:!Ze&&Ae.path?Ae.path:`${Ze}/${Ae.path}`:"":Ze}function sl(Ze){const Ae=Ze.children&&Ze.children.map(sl),ge=Ae?Object.assign(Object.assign({},Ze),{children:Ae}):Object.assign({},Ze);return!ge.component&&(Ae||ge.loadChildren)&&ge.outlet&&ge.outlet!==hr&&(ge.component=Vo),ge}function Jl(Ze){return Ze.outlet||hr}function Qu(Ze,Ae){const ge=Ze.filter(ht=>Jl(ht)===Ae);return ge.push(...Ze.filter(ht=>Jl(ht)!==Ae)),ge}const _c={matched:!1,consumedSegments:[],remainingSegments:[],parameters:{},positionalParamSegments:{}};function Cl(Ze,Ae,ge){var ht;if(""===Ae.path)return"full"===Ae.pathMatch&&(Ze.hasChildren()||ge.length>0)?Object.assign({},_c):{matched:!0,consumedSegments:[],remainingSegments:ge,parameters:{},positionalParamSegments:{}};const sn=(Ae.matcher||ei)(ge,Ze,Ae);if(!sn)return Object.assign({},_c);const Un={};vn(sn.posParams,(gi,Lo)=>{Un[Lo]=gi.path});const gr=sn.consumed.length>0?Object.assign(Object.assign({},Un),sn.consumed[sn.consumed.length-1].parameters):Un;return{matched:!0,consumedSegments:sn.consumed,remainingSegments:ge.slice(sn.consumed.length),parameters:gr,positionalParamSegments:null!==(ht=sn.posParams)&&void 0!==ht?ht:{}}}function mc(Ze,Ae,ge,ht,Ot="corrected"){if(ge.length>0&&function Xa(Ze,Ae,ge){return ge.some(ht=>ru(Ze,Ae,ht)&&Jl(ht)!==hr)}(Ze,ge,ht)){const Un=new Le(Ae,function Xu(Ze,Ae,ge,ht){const Ot={};Ot[hr]=ht,ht._sourceSegment=Ze,ht._segmentIndexShift=Ae.length;for(const sn of ge)if(""===sn.path&&Jl(sn)!==hr){const Un=new Le([],{});Un._sourceSegment=Ze,Un._segmentIndexShift=Ae.length,Ot[Jl(sn)]=Un}return Ot}(Ze,Ae,ht,new Le(ge,Ze.children)));return Un._sourceSegment=Ze,Un._segmentIndexShift=Ae.length,{segmentGroup:Un,slicedSegments:[]}}if(0===ge.length&&function Mc(Ze,Ae,ge){return ge.some(ht=>ru(Ze,Ae,ht))}(Ze,ge,ht)){const Un=new Le(Ze.segments,function Fl(Ze,Ae,ge,ht,Ot,sn){const Un={};for(const gr of ht)if(ru(Ze,ge,gr)&&!Ot[Jl(gr)]){const gi=new Le([],{});gi._sourceSegment=Ze,gi._segmentIndexShift="legacy"===sn?Ze.segments.length:Ae.length,Un[Jl(gr)]=gi}return Object.assign(Object.assign({},Ot),Un)}(Ze,Ae,ge,ht,Ze.children,Ot));return Un._sourceSegment=Ze,Un._segmentIndexShift=Ae.length,{segmentGroup:Un,slicedSegments:ge}}const sn=new Le(Ze.segments,Ze.children);return sn._sourceSegment=Ze,sn._segmentIndexShift=Ae.length,{segmentGroup:sn,slicedSegments:ge}}function ru(Ze,Ae,ge){return(!(Ze.hasChildren()||Ae.length>0)||"full"!==ge.pathMatch)&&""===ge.path}function Ja(Ze,Ae,ge,ht){return!!(Jl(Ze)===ht||ht!==hr&&ru(Ae,ge,Ze))&&("**"===Ze.path||Cl(Ae,Ze,ge).matched)}function Ol(Ze,Ae,ge){return 0===Ae.length&&!Ze.children[ge]}class Bl{constructor(Ae){this.segmentGroup=Ae||null}}class Ya{constructor(Ae){this.urlTree=Ae}}function rt(Ze){return(0,p._)(new Bl(Ze))}function qt(Ze){return(0,p._)(new Ya(Ze))}class oi{constructor(Ae,ge,ht,Ot,sn){this.configLoader=ge,this.urlSerializer=ht,this.urlTree=Ot,this.config=sn,this.allowRedirects=!0,this.ngModule=Ae.get(r.h0i)}apply(){const Ae=mc(this.urlTree.root,[],[],this.config).segmentGroup,ge=new Le(Ae.segments,Ae.children);return this.expandSegmentGroup(this.ngModule,this.config,ge,hr).pipe((0,j.U)(sn=>this.createUrlTree(as(sn),this.urlTree.queryParams,this.urlTree.fragment))).pipe((0,ae.K)(sn=>{if(sn instanceof Ya)return this.allowRedirects=!1,this.match(sn.urlTree);throw sn instanceof Bl?this.noMatchError(sn):sn}))}match(Ae){return this.expandSegmentGroup(this.ngModule,this.config,Ae.root,hr).pipe((0,j.U)(Ot=>this.createUrlTree(as(Ot),Ae.queryParams,Ae.fragment))).pipe((0,ae.K)(Ot=>{throw Ot instanceof Bl?this.noMatchError(Ot):Ot}))}noMatchError(Ae){return new Error(`Cannot match any routes. URL Segment: '${Ae.segmentGroup}'`)}createUrlTree(Ae,ge,ht){const Ot=Ae.segments.length>0?new Le([],{[hr]:Ae}):Ae;return new et(Ot,ge,ht)}expandSegmentGroup(Ae,ge,ht,Ot){return 0===ht.segments.length&&ht.hasChildren()?this.expandChildren(Ae,ge,ht).pipe((0,j.U)(sn=>new Le([],sn))):this.expandSegment(Ae,ht,ge,ht.segments,Ot,!0)}expandChildren(Ae,ge,ht){const Ot=[];for(const sn of Object.keys(ht.children))"primary"===sn?Ot.unshift(sn):Ot.push(sn);return(0,a.D)(Ot).pipe((0,ie.b)(sn=>{const Un=ht.children[sn],gr=Qu(ge,sn);return this.expandSegmentGroup(Ae,gr,Un,sn).pipe((0,j.U)(gi=>({segment:gi,outlet:sn})))}),(0,H.R)((sn,Un)=>(sn[Un.outlet]=Un.segment,sn),{}),(0,fe.Z)())}expandSegment(Ae,ge,ht,Ot,sn,Un){return(0,a.D)(ht).pipe((0,ie.b)(gr=>this.expandSegmentAgainstRoute(Ae,ge,ht,gr,Ot,sn,Un).pipe((0,ae.K)(Lo=>{if(Lo instanceof Bl)return(0,f.of)(null);throw Lo}))),(0,he.P)(gr=>!!gr),(0,ae.K)((gr,gi)=>{if(gr instanceof g.K||"EmptyError"===gr.name)return Ol(ge,Ot,sn)?(0,f.of)(new Le([],{})):rt(ge);throw gr}))}expandSegmentAgainstRoute(Ae,ge,ht,Ot,sn,Un,gr){return Ja(Ot,ge,sn,Un)?void 0===Ot.redirectTo?this.matchSegmentAgainstRoute(Ae,ge,Ot,sn,Un):gr&&this.allowRedirects?this.expandSegmentAgainstRouteUsingRedirect(Ae,ge,ht,Ot,sn,Un):rt(ge):rt(ge)}expandSegmentAgainstRouteUsingRedirect(Ae,ge,ht,Ot,sn,Un){return"**"===Ot.path?this.expandWildCardWithParamsAgainstRouteUsingRedirect(Ae,ht,Ot,Un):this.expandRegularSegmentAgainstRouteUsingRedirect(Ae,ge,ht,Ot,sn,Un)}expandWildCardWithParamsAgainstRouteUsingRedirect(Ae,ge,ht,Ot){const sn=this.applyRedirectCommands([],ht.redirectTo,{});return ht.redirectTo.startsWith("/")?qt(sn):this.lineralizeSegments(ht,sn).pipe((0,Ce.zg)(Un=>{const gr=new Le(Un,{});return this.expandSegment(Ae,gr,ge,Un,Ot,!1)}))}expandRegularSegmentAgainstRouteUsingRedirect(Ae,ge,ht,Ot,sn,Un){const{matched:gr,consumedSegments:gi,remainingSegments:Lo,positionalParamSegments:Ca}=Cl(ge,Ot,sn);if(!gr)return rt(ge);const ms=this.applyRedirectCommands(gi,Ot.redirectTo,Ca);return Ot.redirectTo.startsWith("/")?qt(ms):this.lineralizeSegments(Ot,ms).pipe((0,Ce.zg)(ha=>this.expandSegment(Ae,ge,ht,ha.concat(Lo),Un,!1)))}matchSegmentAgainstRoute(Ae,ge,ht,Ot,sn){if("**"===ht.path)return ht.loadChildren?(ht._loadedConfig?(0,f.of)(ht._loadedConfig):this.configLoader.load(Ae.injector,ht)).pipe((0,j.U)(ms=>(ht._loadedConfig=ms,new Le(Ot,{})))):(0,f.of)(new Le(Ot,{}));const{matched:Un,consumedSegments:gr,remainingSegments:gi}=Cl(ge,ht,Ot);return Un?this.getChildConfig(Ae,ht,Ot).pipe((0,Ce.zg)(Ca=>{const ms=Ca.module,ha=Ca.routes,{segmentGroup:Ma,slicedSegments:Nu}=mc(ge,gr,gi,ha),cc=new Le(Ma.segments,Ma.children);if(0===Nu.length&&cc.hasChildren())return this.expandChildren(ms,ha,cc).pipe((0,j.U)(yc=>new Le(gr,yc)));if(0===ha.length&&0===Nu.length)return(0,f.of)(new Le(gr,{}));const ka=Jl(ht)===sn;return this.expandSegment(ms,cc,ha,Nu,ka?hr:sn,!0).pipe((0,j.U)(vc=>new Le(gr.concat(vc.segments),vc.children)))})):rt(ge)}getChildConfig(Ae,ge,ht){return ge.children?(0,f.of)(new hs(ge.children,Ae)):ge.loadChildren?void 0!==ge._loadedConfig?(0,f.of)(ge._loadedConfig):this.runCanLoadGuards(Ae.injector,ge,ht).pipe((0,Ce.zg)(Ot=>Ot?this.configLoader.load(Ae.injector,ge).pipe((0,j.U)(sn=>(ge._loadedConfig=sn,sn))):function Kt(Ze){return(0,p._)(er(`Cannot load children because the guard of the route "path: '${Ze.path}'" returned false`))}(ge))):(0,f.of)(new hs([],Ae))}runCanLoadGuards(Ae,ge,ht){const Ot=ge.canLoad;if(!Ot||0===Ot.length)return(0,f.of)(!0);const sn=Ot.map(Un=>{const gr=Ae.get(Un);let gi;if(function ut(Ze){return Ze&&Oo(Ze.canLoad)}(gr))gi=gr.canLoad(ge,ht);else{if(!Oo(gr))throw new Error("Invalid CanLoad guard");gi=gr(ge,ht)}return Zn(gi)});return(0,f.of)(sn).pipe(hn(),(0,ce.b)(Un=>{if(!Ki(Un))return;const gr=er(`Redirecting to "${this.urlSerializer.serialize(Un)}"`);throw gr.url=Un,gr}),(0,j.U)(Un=>!0===Un))}lineralizeSegments(Ae,ge){let ht=[],Ot=ge.root;for(;;){if(ht=ht.concat(Ot.segments),0===Ot.numberOfChildren)return(0,f.of)(ht);if(Ot.numberOfChildren>1||!Ot.children[hr])return(0,p._)(new Error(`Only absolute redirects can have named outlets. redirectTo: '${Ae.redirectTo}'`));Ot=Ot.children[hr]}}applyRedirectCommands(Ae,ge,ht){return this.applyRedirectCreatreUrlTree(ge,this.urlSerializer.parse(ge),Ae,ht)}applyRedirectCreatreUrlTree(Ae,ge,ht,Ot){const sn=this.createSegmentGroup(Ae,ge.root,ht,Ot);return new et(sn,this.createQueryParams(ge.queryParams,this.urlTree.queryParams),ge.fragment)}createQueryParams(Ae,ge){const ht={};return vn(Ae,(Ot,sn)=>{if("string"==typeof Ot&&Ot.startsWith(":")){const gr=Ot.substring(1);ht[sn]=ge[gr]}else ht[sn]=Ot}),ht}createSegmentGroup(Ae,ge,ht,Ot){const sn=this.createSegments(Ae,ge.segments,ht,Ot);let Un={};return vn(ge.children,(gr,gi)=>{Un[gi]=this.createSegmentGroup(Ae,gr,ht,Ot)}),new Le(sn,Un)}createSegments(Ae,ge,ht,Ot){return ge.map(sn=>sn.path.startsWith(":")?this.findPosParam(Ae,sn,Ot):this.findOrReturn(sn,ht))}findPosParam(Ae,ge,ht){const Ot=ht[ge.path.substring(1)];if(!Ot)throw new Error(`Cannot redirect to '${Ae}'. Cannot find '${ge.path}'.`);return Ot}findOrReturn(Ae,ge){let ht=0;for(const Ot of ge){if(Ot.path===Ae.path)return ge.splice(ht),Ot;ht++}return Ae}}function as(Ze){const Ae={};for(const ht of Object.keys(Ze.children)){const sn=as(Ze.children[ht]);(sn.segments.length>0||sn.hasChildren())&&(Ae[ht]=sn)}return function wi(Ze){if(1===Ze.numberOfChildren&&Ze.children[hr]){const Ae=Ze.children[hr];return new Le(Ze.segments.concat(Ae.segments),Ae.children)}return Ze}(new Le(Ze.segments,Ae))}class Os{constructor(Ae){this.path=Ae,this.route=this.path[this.path.length-1]}}class ws{constructor(Ae,ge){this.component=Ae,this.route=ge}}function Fo(Ze,Ae,ge){const ht=Ze._root;return mt(ht,Ae?Ae._root:null,ge,[ht.value])}function al(Ze,Ae,ge){const ht=function Bs(Ze){if(!Ze)return null;for(let Ae=Ze.parent;Ae;Ae=Ae.parent){const ge=Ae.routeConfig;if(ge&&ge._loadedConfig)return ge._loadedConfig}return null}(Ae);return(ht?ht.module.injector:ge).get(Ze)}function mt(Ze,Ae,ge,ht,Ot={canDeactivateChecks:[],canActivateChecks:[]}){const sn=jr(Ae);return Ze.children.forEach(Un=>{(function ot(Ze,Ae,ge,ht,Ot={canDeactivateChecks:[],canActivateChecks:[]}){const sn=Ze.value,Un=Ae?Ae.value:null,gr=ge?ge.getContext(Ze.value.outlet):null;if(Un&&sn.routeConfig===Un.routeConfig){const gi=function je(Ze,Ae,ge){if("function"==typeof ge)return ge(Ze,Ae);switch(ge){case"pathParamsChange":return!dt(Ze.url,Ae.url);case"pathParamsOrQueryParamsChange":return!dt(Ze.url,Ae.url)||!fi(Ze.queryParams,Ae.queryParams);case"always":return!0;case"paramsOrQueryParamsChange":return!Sn(Ze,Ae)||!fi(Ze.queryParams,Ae.queryParams);default:return!Sn(Ze,Ae)}}(Un,sn,sn.routeConfig.runGuardsAndResolvers);gi?Ot.canActivateChecks.push(new Os(ht)):(sn.data=Un.data,sn._resolvedData=Un._resolvedData),mt(Ze,Ae,sn.component?gr?gr.children:null:ge,ht,Ot),gi&&gr&&gr.outlet&&gr.outlet.isActivated&&Ot.canDeactivateChecks.push(new ws(gr.outlet.component,Un))}else Un&&Xt(Ae,gr,Ot),Ot.canActivateChecks.push(new Os(ht)),mt(Ze,null,sn.component?gr?gr.children:null:ge,ht,Ot)})(Un,sn[Un.value.outlet],ge,ht.concat([Un.value]),Ot),delete sn[Un.value.outlet]}),vn(sn,(Un,gr)=>Xt(Un,ge.getContext(gr),Ot)),Ot}function Xt(Ze,Ae,ge){const ht=jr(Ze),Ot=Ze.value;vn(ht,(sn,Un)=>{Xt(sn,Ot.component?Ae?Ae.children.getContext(Un):null:Ae,ge)}),ge.canDeactivateChecks.push(new ws(Ot.component&&Ae&&Ae.outlet&&Ae.outlet.isActivated?Ae.outlet.component:null,Ot))}class aa{}function Fa(Ze){return new M.y(Ae=>Ae.error(Ze))}class qu{constructor(Ae,ge,ht,Ot,sn,Un){this.rootComponentType=Ae,this.config=ge,this.urlTree=ht,this.url=Ot,this.paramsInheritanceStrategy=sn,this.relativeLinkResolution=Un}recognize(){const Ae=mc(this.urlTree.root,[],[],this.config.filter(Un=>void 0===Un.redirectTo),this.relativeLinkResolution).segmentGroup,ge=this.processSegmentGroup(this.config,Ae,hr);if(null===ge)return null;const ht=new or([],Object.freeze({}),Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,{},hr,this.rootComponentType,null,this.urlTree.root,-1,{}),Ot=new nr(ht,ge),sn=new Mr(this.url,Ot);return this.inheritParamsAndData(sn._root),sn}inheritParamsAndData(Ae){const ge=Ae.value,ht=Go(ge,this.paramsInheritanceStrategy);ge.params=Object.freeze(ht.params),ge.data=Object.freeze(ht.data),Ae.children.forEach(Ot=>this.inheritParamsAndData(Ot))}processSegmentGroup(Ae,ge,ht){return 0===ge.segments.length&&ge.hasChildren()?this.processChildren(Ae,ge):this.processSegment(Ae,ge,ge.segments,ht)}processChildren(Ae,ge){const ht=[];for(const sn of Object.keys(ge.children)){const Un=ge.children[sn],gr=Qu(Ae,sn),gi=this.processSegmentGroup(gr,Un,sn);if(null===gi)return null;ht.push(...gi)}const Ot=iu(ht);return function Sl(Ze){Ze.sort((Ae,ge)=>Ae.value.outlet===hr?-1:ge.value.outlet===hr?1:Ae.value.outlet.localeCompare(ge.value.outlet))}(Ot),Ot}processSegment(Ae,ge,ht,Ot){for(const sn of Ae){const Un=this.processSegmentAgainstRoute(sn,ge,ht,Ot);if(null!==Un)return Un}return Ol(ge,ht,Ot)?[]:null}processSegmentAgainstRoute(Ae,ge,ht,Ot){if(Ae.redirectTo||!Ja(Ae,ge,ht,Ot))return null;let sn,Un=[],gr=[];if("**"===Ae.path){const Ma=ht.length>0?Er(ht).parameters:{};sn=new or(ht,Ma,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,ec(Ae),Jl(Ae),Ae.component,Ae,bu(ge),td(ge)+ht.length,uu(Ae))}else{const Ma=Cl(ge,Ae,ht);if(!Ma.matched)return null;Un=Ma.consumedSegments,gr=Ma.remainingSegments,sn=new or(Un,Ma.parameters,Object.freeze(Object.assign({},this.urlTree.queryParams)),this.urlTree.fragment,ec(Ae),Jl(Ae),Ae.component,Ae,bu(ge),td(ge)+Un.length,uu(Ae))}const gi=function lu(Ze){return Ze.children?Ze.children:Ze.loadChildren?Ze._loadedConfig.routes:[]}(Ae),{segmentGroup:Lo,slicedSegments:Ca}=mc(ge,Un,gr,gi.filter(Ma=>void 0===Ma.redirectTo),this.relativeLinkResolution);if(0===Ca.length&&Lo.hasChildren()){const Ma=this.processChildren(gi,Lo);return null===Ma?null:[new nr(sn,Ma)]}if(0===gi.length&&0===Ca.length)return[new nr(sn,[])];const ms=Jl(Ae)===Ot,ha=this.processSegment(gi,Lo,Ca,ms?hr:Ot);return null===ha?null:[new nr(sn,ha)]}}function Eu(Ze){const Ae=Ze.value.routeConfig;return Ae&&""===Ae.path&&void 0===Ae.redirectTo}function iu(Ze){const Ae=[],ge=new Set;for(const ht of Ze){if(!Eu(ht)){Ae.push(ht);continue}const Ot=Ae.find(sn=>ht.value.routeConfig===sn.value.routeConfig);void 0!==Ot?(Ot.children.push(...ht.children),ge.add(Ot)):Ae.push(ht)}for(const ht of ge){const Ot=iu(ht.children);Ae.push(new nr(ht.value,Ot))}return Ae.filter(ht=>!ge.has(ht))}function bu(Ze){let Ae=Ze;for(;Ae._sourceSegment;)Ae=Ae._sourceSegment;return Ae}function td(Ze){let Ae=Ze,ge=Ae._segmentIndexShift?Ae._segmentIndexShift:0;for(;Ae._sourceSegment;)Ae=Ae._sourceSegment,ge+=Ae._segmentIndexShift?Ae._segmentIndexShift:0;return ge-1}function ec(Ze){return Ze.data||{}}function uu(Ze){return Ze.resolve||{}}function wu(Ze){return[...Object.keys(Ze),...Object.getOwnPropertySymbols(Ze)]}function Io(Ze){return(0,q.w)(Ae=>{const ge=Ze(Ae);return ge?(0,a.D)(ge).pipe((0,j.U)(()=>Ae)):(0,f.of)(Ae)})}class Z extends class Sr{shouldDetach(Ae){return!1}store(Ae,ge){}shouldAttach(Ae){return!1}retrieve(Ae){return null}shouldReuseRoute(Ae,ge){return Ae.routeConfig===ge.routeConfig}}{}const De=new r.OlP("ROUTES");class ct{constructor(Ae,ge,ht,Ot){this.injector=Ae,this.compiler=ge,this.onLoadStartListener=ht,this.onLoadEndListener=Ot}load(Ae,ge){if(ge._loader$)return ge._loader$;this.onLoadStartListener&&this.onLoadStartListener(ge);const Ot=this.loadModuleFactory(ge.loadChildren).pipe((0,j.U)(sn=>{this.onLoadEndListener&&this.onLoadEndListener(ge);const Un=sn.create(Ae);return new hs(xo(Un.injector.get(De,void 0,r.XFs.Self|r.XFs.Optional)).map(sl),Un)}),(0,ae.K)(sn=>{throw ge._loader$=void 0,sn}));return ge._loader$=new B.c(Ot,()=>new W.xQ).pipe((0,Ve.x)()),ge._loader$}loadModuleFactory(Ae){return Zn(Ae()).pipe((0,Ce.zg)(ge=>ge instanceof r.YKP?(0,f.of)(ge):(0,a.D)(this.compiler.compileModuleAsync(ge))))}}class Ht{shouldProcessUrl(Ae){return!0}extract(Ae){return Ae}merge(Ae,ge){return Ae}}function _n(Ze){throw Ze}function Pn(Ze,Ae,ge){return Ae.parse("/")}function Tr(Ze,Ae){return(0,f.of)(null)}const ai={paths:"exact",fragment:"ignored",matrixParams:"ignored",queryParams:"exact"},Ei={paths:"subset",fragment:"ignored",matrixParams:"ignored",queryParams:"subset"};let Ci=(()=>{class Ze{constructor(ge,ht,Ot,sn,Un,gr,gi){this.rootComponentType=ge,this.urlSerializer=ht,this.rootContexts=Ot,this.location=sn,this.config=gi,this.lastSuccessfulNavigation=null,this.currentNavigation=null,this.disposed=!1,this.navigationId=0,this.currentPageId=0,this.isNgZoneEnabled=!1,this.events=new W.xQ,this.errorHandler=_n,this.malformedUriErrorHandler=Pn,this.navigated=!1,this.lastSuccessfulId=-1,this.hooks={beforePreactivation:Tr,afterPreactivation:Tr},this.urlHandlingStrategy=new Ht,this.routeReuseStrategy=new Z,this.onSameUrlNavigation="ignore",this.paramsInheritanceStrategy="emptyOnly",this.urlUpdateStrategy="deferred",this.relativeLinkResolution="corrected",this.canceledNavigationResolution="replace",this.ngModule=Un.get(r.h0i),this.console=Un.get(r.c2e);const ms=Un.get(r.R0b);this.isNgZoneEnabled=ms instanceof r.R0b&&r.R0b.isInAngularZone(),this.resetConfig(gi),this.currentUrlTree=function Xn(){return new et(new Le([],{}),{},null)}(),this.rawUrlTree=this.currentUrlTree,this.browserUrlTree=this.currentUrlTree,this.configLoader=new ct(Un,gr,ha=>this.triggerEvent(new xt(ha)),ha=>this.triggerEvent(new Ct(ha))),this.routerState=$i(this.currentUrlTree,this.rootComponentType),this.transitions=new u.X({id:0,targetPageId:0,currentUrlTree:this.currentUrlTree,currentRawUrl:this.currentUrlTree,extractedUrl:this.urlHandlingStrategy.extract(this.currentUrlTree),urlAfterRedirects:this.urlHandlingStrategy.extract(this.currentUrlTree),rawUrl:this.currentUrlTree,extras:{},resolve:null,reject:null,promise:Promise.resolve(!0),source:"imperative",restoredState:null,currentSnapshot:this.routerState.snapshot,targetSnapshot:null,currentRouterState:this.routerState,targetRouterState:null,guards:{canActivateChecks:[],canDeactivateChecks:[]},guardsResult:null}),this.navigations=this.setupNavigations(this.transitions),this.processNavigations()}get browserPageId(){var ge;return null===(ge=this.location.getState())||void 0===ge?void 0:ge.\u0275routerPageId}setupNavigations(ge){const ht=this.events;return ge.pipe((0,se.h)(Ot=>0!==Ot.id),(0,j.U)(Ot=>Object.assign(Object.assign({},Ot),{extractedUrl:this.urlHandlingStrategy.extract(Ot.rawUrl)})),(0,q.w)(Ot=>{let sn=!1,Un=!1;return(0,f.of)(Ot).pipe((0,ce.b)(gr=>{this.currentNavigation={id:gr.id,initialUrl:gr.currentRawUrl,extractedUrl:gr.extractedUrl,trigger:gr.source,extras:gr.extras,previousNavigation:this.lastSuccessfulNavigation?Object.assign(Object.assign({},this.lastSuccessfulNavigation),{previousNavigation:null}):null}}),(0,q.w)(gr=>{const gi=this.browserUrlTree.toString(),Lo=!this.navigated||gr.extractedUrl.toString()!==gi||gi!==this.currentUrlTree.toString();if(("reload"===this.onSameUrlNavigation||Lo)&&this.urlHandlingStrategy.shouldProcessUrl(gr.rawUrl))return Pr(gr.source)&&(this.browserUrlTree=gr.extractedUrl),(0,f.of)(gr).pipe((0,q.w)(ms=>{const ha=this.transitions.getValue();return ht.next(new Oe(ms.id,this.serializeUrl(ms.extractedUrl),ms.source,ms.restoredState)),ha!==this.transitions.getValue()?w.E:Promise.resolve(ms)}),function Gs(Ze,Ae,ge,ht){return(0,q.w)(Ot=>function Kn(Ze,Ae,ge,ht,Ot){return new oi(Ze,Ae,ge,ht,Ot).apply()}(Ze,Ae,ge,Ot.extractedUrl,ht).pipe((0,j.U)(sn=>Object.assign(Object.assign({},Ot),{urlAfterRedirects:sn}))))}(this.ngModule.injector,this.configLoader,this.urlSerializer,this.config),(0,ce.b)(ms=>{this.currentNavigation=Object.assign(Object.assign({},this.currentNavigation),{finalUrl:ms.urlAfterRedirects})}),function du(Ze,Ae,ge,ht,Ot){return(0,Ce.zg)(sn=>function Es(Ze,Ae,ge,ht,Ot="emptyOnly",sn="legacy"){try{const Un=new qu(Ze,Ae,ge,ht,Ot,sn).recognize();return null===Un?Fa(new aa):(0,f.of)(Un)}catch(Un){return Fa(Un)}}(Ze,Ae,sn.urlAfterRedirects,ge(sn.urlAfterRedirects),ht,Ot).pipe((0,j.U)(Un=>Object.assign(Object.assign({},sn),{targetSnapshot:Un}))))}(this.rootComponentType,this.config,ms=>this.serializeUrl(ms),this.paramsInheritanceStrategy,this.relativeLinkResolution),(0,ce.b)(ms=>{if("eager"===this.urlUpdateStrategy){if(!ms.extras.skipLocationChange){const Ma=this.urlHandlingStrategy.merge(ms.urlAfterRedirects,ms.rawUrl);this.setBrowserUrl(Ma,ms)}this.browserUrlTree=ms.urlAfterRedirects}const ha=new Nt(ms.id,this.serializeUrl(ms.extractedUrl),this.serializeUrl(ms.urlAfterRedirects),ms.targetSnapshot);ht.next(ha)}));if(Lo&&this.rawUrlTree&&this.urlHandlingStrategy.shouldProcessUrl(this.rawUrlTree)){const{id:ha,extractedUrl:Ma,source:Nu,restoredState:cc,extras:ka}=gr,rl=new Oe(ha,this.serializeUrl(Ma),Nu,cc);ht.next(rl);const vc=$i(Ma,this.rootComponentType).snapshot;return(0,f.of)(Object.assign(Object.assign({},gr),{targetSnapshot:vc,urlAfterRedirects:Ma,extras:Object.assign(Object.assign({},ka),{skipLocationChange:!1,replaceUrl:!1})}))}return this.rawUrlTree=gr.rawUrl,gr.resolve(null),w.E}),Io(gr=>{const{targetSnapshot:gi,id:Lo,extractedUrl:Ca,rawUrl:ms,extras:{skipLocationChange:ha,replaceUrl:Ma}}=gr;return this.hooks.beforePreactivation(gi,{navigationId:Lo,appliedUrlTree:Ca,rawUrlTree:ms,skipLocationChange:!!ha,replaceUrl:!!Ma})}),(0,ce.b)(gr=>{const gi=new Yt(gr.id,this.serializeUrl(gr.extractedUrl),this.serializeUrl(gr.urlAfterRedirects),gr.targetSnapshot);this.triggerEvent(gi)}),(0,j.U)(gr=>Object.assign(Object.assign({},gr),{guards:Fo(gr.targetSnapshot,gr.currentSnapshot,this.rootContexts)})),function Si(Ze,Ae){return(0,Ce.zg)(ge=>{const{targetSnapshot:ht,currentSnapshot:Ot,guards:{canActivateChecks:sn,canDeactivateChecks:Un}}=ge;return 0===Un.length&&0===sn.length?(0,f.of)(Object.assign(Object.assign({},ge),{guardsResult:!0})):function Jo(Ze,Ae,ge,ht){return(0,a.D)(Ze).pipe((0,Ce.zg)(Ot=>function Yi(Ze,Ae,ge,ht,Ot){const sn=Ae&&Ae.routeConfig?Ae.routeConfig.canDeactivate:null;if(!sn||0===sn.length)return(0,f.of)(!0);const Un=sn.map(gr=>{const gi=al(gr,Ae,Ot);let Lo;if(function Ue(Ze){return Ze&&Oo(Ze.canDeactivate)}(gi))Lo=Zn(gi.canDeactivate(Ze,Ae,ge,ht));else{if(!Oo(gi))throw new Error("Invalid CanDeactivate guard");Lo=Zn(gi(Ze,Ae,ge,ht))}return Lo.pipe((0,he.P)())});return(0,f.of)(Un).pipe(hn())}(Ot.component,Ot.route,ge,Ae,ht)),(0,he.P)(Ot=>!0!==Ot,!0))}(Un,ht,Ot,Ze).pipe((0,Ce.zg)(gr=>gr&&function kr(Ze){return"boolean"==typeof Ze}(gr)?function ja(Ze,Ae,ge,ht){return(0,a.D)(Ae).pipe((0,ie.b)(Ot=>(0,S.z)(function Ku(Ze,Ae){return null!==Ze&&Ae&&Ae(new Gt(Ze)),(0,f.of)(!0)}(Ot.route.parent,ht),function El(Ze,Ae){return null!==Ze&&Ae&&Ae(new pr(Ze)),(0,f.of)(!0)}(Ot.route,ht),function hd(Ze,Ae,ge){const ht=Ae[Ae.length-1],sn=Ae.slice(0,Ae.length-1).reverse().map(Un=>function Ka(Ze){const Ae=Ze.routeConfig?Ze.routeConfig.canActivateChild:null;return Ae&&0!==Ae.length?{node:Ze,guards:Ae}:null}(Un)).filter(Un=>null!==Un).map(Un=>x(()=>{const gr=Un.guards.map(gi=>{const Lo=al(gi,Un.node,ge);let Ca;if(function te(Ze){return Ze&&Oo(Ze.canActivateChild)}(Lo))Ca=Zn(Lo.canActivateChild(ht,Ze));else{if(!Oo(Lo))throw new Error("Invalid CanActivateChild guard");Ca=Zn(Lo(ht,Ze))}return Ca.pipe((0,he.P)())});return(0,f.of)(gr).pipe(hn())}));return(0,f.of)(sn).pipe(hn())}(Ze,Ot.path,ge),function Nc(Ze,Ae,ge){const ht=Ae.routeConfig?Ae.routeConfig.canActivate:null;if(!ht||0===ht.length)return(0,f.of)(!0);const Ot=ht.map(sn=>x(()=>{const Un=al(sn,Ae,ge);let gr;if(function pn(Ze){return Ze&&Oo(Ze.canActivate)}(Un))gr=Zn(Un.canActivate(Ae,Ze));else{if(!Oo(Un))throw new Error("Invalid CanActivate guard");gr=Zn(Un(Ae,Ze))}return gr.pipe((0,he.P)())}));return(0,f.of)(Ot).pipe(hn())}(Ze,Ot.route,ge))),(0,he.P)(Ot=>!0!==Ot,!0))}(ht,sn,Ze,Ae):(0,f.of)(gr)),(0,j.U)(gr=>Object.assign(Object.assign({},ge),{guardsResult:gr})))})}(this.ngModule.injector,gr=>this.triggerEvent(gr)),(0,ce.b)(gr=>{if(Ki(gr.guardsResult)){const Lo=er(`Redirecting to "${this.serializeUrl(gr.guardsResult)}"`);throw Lo.url=gr.guardsResult,Lo}const gi=new dn(gr.id,this.serializeUrl(gr.extractedUrl),this.serializeUrl(gr.urlAfterRedirects),gr.targetSnapshot,!!gr.guardsResult);this.triggerEvent(gi)}),(0,se.h)(gr=>!!gr.guardsResult||(this.restoreHistory(gr),this.cancelNavigationTransition(gr,""),!1)),Io(gr=>{if(gr.guards.canActivateChecks.length)return(0,f.of)(gr).pipe((0,ce.b)(gi=>{const Lo=new rn(gi.id,this.serializeUrl(gi.extractedUrl),this.serializeUrl(gi.urlAfterRedirects),gi.targetSnapshot);this.triggerEvent(Lo)}),(0,q.w)(gi=>{let Lo=!1;return(0,f.of)(gi).pipe(function nd(Ze,Ae){return(0,Ce.zg)(ge=>{const{targetSnapshot:ht,guards:{canActivateChecks:Ot}}=ge;if(!Ot.length)return(0,f.of)(ge);let sn=0;return(0,a.D)(Ot).pipe((0,ie.b)(Un=>function Uu(Ze,Ae,ge,ht){return function Yu(Ze,Ae,ge,ht){const Ot=wu(Ze);if(0===Ot.length)return(0,f.of)({});const sn={};return(0,a.D)(Ot).pipe((0,Ce.zg)(Un=>function Ld(Ze,Ae,ge,ht){const Ot=al(Ze,Ae,ht);return Zn(Ot.resolve?Ot.resolve(Ae,ge):Ot(Ae,ge))}(Ze[Un],Ae,ge,ht).pipe((0,ce.b)(gr=>{sn[Un]=gr}))),(0,Be.h)(1),(0,Ce.zg)(()=>wu(sn).length===Ot.length?(0,f.of)(sn):w.E))}(Ze._resolve,Ze,Ae,ht).pipe((0,j.U)(sn=>(Ze._resolvedData=sn,Ze.data=Object.assign(Object.assign({},Ze.data),Go(Ze,ge).resolve),null)))}(Un.route,ht,Ze,Ae)),(0,ce.b)(()=>sn++),(0,Be.h)(1),(0,Ce.zg)(Un=>sn===Ot.length?(0,f.of)(ge):w.E))})}(this.paramsInheritanceStrategy,this.ngModule.injector),(0,ce.b)({next:()=>Lo=!0,complete:()=>{Lo||(this.restoreHistory(gi),this.cancelNavigationTransition(gi,"At least one route resolver didn't emit any value."))}}))}),(0,ce.b)(gi=>{const Lo=new vt(gi.id,this.serializeUrl(gi.extractedUrl),this.serializeUrl(gi.urlAfterRedirects),gi.targetSnapshot);this.triggerEvent(Lo)}))}),Io(gr=>{const{targetSnapshot:gi,id:Lo,extractedUrl:Ca,rawUrl:ms,extras:{skipLocationChange:ha,replaceUrl:Ma}}=gr;return this.hooks.afterPreactivation(gi,{navigationId:Lo,appliedUrlTree:Ca,rawUrlTree:ms,skipLocationChange:!!ha,replaceUrl:!!Ma})}),(0,j.U)(gr=>{const gi=function $n(Ze,Ae,ge){const ht=Jr(Ze,Ae._root,ge?ge._root:void 0);return new ao(ht,Ae)}(this.routeReuseStrategy,gr.targetSnapshot,gr.currentRouterState);return Object.assign(Object.assign({},gr),{targetRouterState:gi})}),(0,ce.b)(gr=>{this.currentUrlTree=gr.urlAfterRedirects,this.rawUrlTree=this.urlHandlingStrategy.merge(gr.urlAfterRedirects,gr.rawUrl),this.routerState=gr.targetRouterState,"deferred"===this.urlUpdateStrategy&&(gr.extras.skipLocationChange||this.setBrowserUrl(this.rawUrlTree,gr),this.browserUrlTree=gr.urlAfterRedirects)}),((Ze,Ae,ge)=>(0,j.U)(ht=>(new To(Ae,ht.targetRouterState,ht.currentRouterState,ge).activate(Ze),ht)))(this.rootContexts,this.routeReuseStrategy,gr=>this.triggerEvent(gr)),(0,ce.b)({next(){sn=!0},complete(){sn=!0}}),(0,Xe.x)(()=>{var gr;sn||Un||this.cancelNavigationTransition(Ot,`Navigation ID ${Ot.id} is not equal to the current navigation id ${this.navigationId}`),(null===(gr=this.currentNavigation)||void 0===gr?void 0:gr.id)===Ot.id&&(this.currentNavigation=null)}),(0,ae.K)(gr=>{if(Un=!0,function _r(Ze){return Ze&&Ze[Hn]}(gr)){const gi=Ki(gr.url);gi||(this.navigated=!0,this.restoreHistory(Ot,!0));const Lo=new We(Ot.id,this.serializeUrl(Ot.extractedUrl),gr.message);ht.next(Lo),gi?setTimeout(()=>{const Ca=this.urlHandlingStrategy.merge(gr.url,this.rawUrlTree),ms={skipLocationChange:Ot.extras.skipLocationChange,replaceUrl:"eager"===this.urlUpdateStrategy||Pr(Ot.source)};this.scheduleNavigation(Ca,"imperative",null,ms,{resolve:Ot.resolve,reject:Ot.reject,promise:Ot.promise})},0):Ot.resolve(!1)}else{this.restoreHistory(Ot,!0);const gi=new Qt(Ot.id,this.serializeUrl(Ot.extractedUrl),gr);ht.next(gi);try{Ot.resolve(this.errorHandler(gr))}catch(Lo){Ot.reject(Lo)}}return w.E}))}))}resetRootComponentType(ge){this.rootComponentType=ge,this.routerState.root.component=this.rootComponentType}setTransition(ge){this.transitions.next(Object.assign(Object.assign({},this.transitions.value),ge))}initialNavigation(){this.setUpLocationChangeListener(),0===this.navigationId&&this.navigateByUrl(this.location.path(!0),{replaceUrl:!0})}setUpLocationChangeListener(){this.locationSubscription||(this.locationSubscription=this.location.subscribe(ge=>{const ht="popstate"===ge.type?"popstate":"hashchange";"popstate"===ht&&setTimeout(()=>{var Ot;const sn={replaceUrl:!0},Un=(null===(Ot=ge.state)||void 0===Ot?void 0:Ot.navigationId)?ge.state:null;if(Un){const gi=Object.assign({},Un);delete gi.navigationId,delete gi.\u0275routerPageId,0!==Object.keys(gi).length&&(sn.state=gi)}const gr=this.parseUrl(ge.url);this.scheduleNavigation(gr,ht,Un,sn)},0)}))}get url(){return this.serializeUrl(this.currentUrlTree)}getCurrentNavigation(){return this.currentNavigation}triggerEvent(ge){this.events.next(ge)}resetConfig(ge){Fs(ge),this.config=ge.map(sl),this.navigated=!1,this.lastSuccessfulId=-1}ngOnDestroy(){this.dispose()}dispose(){this.transitions.complete(),this.locationSubscription&&(this.locationSubscription.unsubscribe(),this.locationSubscription=void 0),this.disposed=!0}createUrlTree(ge,ht={}){const{relativeTo:Ot,queryParams:sn,fragment:Un,queryParamsHandling:gr,preserveFragment:gi}=ht,Lo=Ot||this.routerState.root,Ca=gi?this.currentUrlTree.fragment:Un;let ms=null;switch(gr){case"merge":ms=Object.assign(Object.assign({},this.currentUrlTree.queryParams),sn);break;case"preserve":ms=this.currentUrlTree.queryParams;break;default:ms=sn||null}return null!==ms&&(ms=this.removeEmptyProps(ms)),function Ro(Ze,Ae,ge,ht,Ot){if(0===ge.length)return es(Ae.root,Ae.root,Ae.root,ht,Ot);const sn=function fa(Ze){if("string"==typeof Ze[0]&&1===Ze.length&&"/"===Ze[0])return new Ea(!0,0,Ze);let Ae=0,ge=!1;const ht=Ze.reduce((Ot,sn,Un)=>{if("object"==typeof sn&&null!=sn){if(sn.outlets){const gr={};return vn(sn.outlets,(gi,Lo)=>{gr[Lo]="string"==typeof gi?gi.split("/"):gi}),[...Ot,{outlets:gr}]}if(sn.segmentPath)return[...Ot,sn.segmentPath]}return"string"!=typeof sn?[...Ot,sn]:0===Un?(sn.split("/").forEach((gr,gi)=>{0==gi&&"."===gr||(0==gi&&""===gr?ge=!0:".."===gr?Ae++:""!=gr&&Ot.push(gr))}),Ot):[...Ot,sn]},[]);return new Ea(ge,Ae,ht)}(ge);if(sn.toRoot())return es(Ae.root,Ae.root,new Le([],{}),ht,Ot);const Un=function Ra(Ze,Ae,ge){if(Ze.isAbsolute)return new sa(Ae.root,!0,0);if(-1===ge.snapshot._lastPathIndex){const sn=ge.snapshot._urlSegment;return new sa(sn,sn===Ae.root,0)}const ht=Ys(Ze.commands[0])?0:1;return function pl(Ze,Ae,ge){let ht=Ze,Ot=Ae,sn=ge;for(;sn>Ot;){if(sn-=Ot,ht=ht.parent,!ht)throw new Error("Invalid number of '../'");Ot=ht.segments.length}return new sa(ht,!1,Ot-sn)}(ge.snapshot._urlSegment,ge.snapshot._lastPathIndex+ht,Ze.numberOfDoubleDots)}(sn,Ae,Ze),gr=Un.processChildren?Wo(Un.segmentGroup,Un.index,sn.commands):yl(Un.segmentGroup,Un.index,sn.commands);return es(Ae.root,Un.segmentGroup,gr,ht,Ot)}(Lo,this.currentUrlTree,ge,ms,null!=Ca?Ca:null)}navigateByUrl(ge,ht={skipLocationChange:!1}){const Ot=Ki(ge)?ge:this.parseUrl(ge),sn=this.urlHandlingStrategy.merge(Ot,this.rawUrlTree);return this.scheduleNavigation(sn,"imperative",null,ht)}navigate(ge,ht={skipLocationChange:!1}){return function Vi(Ze){for(let Ae=0;Ae<Ze.length;Ae++){const ge=Ze[Ae];if(null==ge)throw new Error(`The requested path contains ${ge} segment at index ${Ae}`)}}(ge),this.navigateByUrl(this.createUrlTree(ge,ht),ht)}serializeUrl(ge){return this.urlSerializer.serialize(ge)}parseUrl(ge){let ht;try{ht=this.urlSerializer.parse(ge)}catch(Ot){ht=this.malformedUriErrorHandler(Ot,this.urlSerializer,ge)}return ht}isActive(ge,ht){let Ot;if(Ot=!0===ht?Object.assign({},ai):!1===ht?Object.assign({},Ei):ht,Ki(ge))return Gi(this.currentUrlTree,ge,Ot);const sn=this.parseUrl(ge);return Gi(this.currentUrlTree,sn,Ot)}removeEmptyProps(ge){return Object.keys(ge).reduce((ht,Ot)=>{const sn=ge[Ot];return null!=sn&&(ht[Ot]=sn),ht},{})}processNavigations(){this.navigations.subscribe(ge=>{this.navigated=!0,this.lastSuccessfulId=ge.id,this.currentPageId=ge.targetPageId,this.events.next(new Tt(ge.id,this.serializeUrl(ge.extractedUrl),this.serializeUrl(this.currentUrlTree))),this.lastSuccessfulNavigation=this.currentNavigation,ge.resolve(!0)},ge=>{this.console.warn(`Unhandled Navigation Error: ${ge}`)})}scheduleNavigation(ge,ht,Ot,sn,Un){var gr,gi;if(this.disposed)return Promise.resolve(!1);let Lo,Ca,ms;Un?(Lo=Un.resolve,Ca=Un.reject,ms=Un.promise):ms=new Promise((Nu,cc)=>{Lo=Nu,Ca=cc});const ha=++this.navigationId;let Ma;return"computed"===this.canceledNavigationResolution?(0===this.currentPageId&&(Ot=this.location.getState()),Ma=Ot&&Ot.\u0275routerPageId?Ot.\u0275routerPageId:sn.replaceUrl||sn.skipLocationChange?null!==(gr=this.browserPageId)&&void 0!==gr?gr:0:(null!==(gi=this.browserPageId)&&void 0!==gi?gi:0)+1):Ma=0,this.setTransition({id:ha,targetPageId:Ma,source:ht,restoredState:Ot,currentUrlTree:this.currentUrlTree,currentRawUrl:this.rawUrlTree,rawUrl:ge,extras:sn,resolve:Lo,reject:Ca,promise:ms,currentSnapshot:this.routerState.snapshot,currentRouterState:this.routerState}),ms.catch(Nu=>Promise.reject(Nu))}setBrowserUrl(ge,ht){const Ot=this.urlSerializer.serialize(ge),sn=Object.assign(Object.assign({},ht.extras.state),this.generateNgRouterState(ht.id,ht.targetPageId));this.location.isCurrentPathEqualTo(Ot)||ht.extras.replaceUrl?this.location.replaceState(Ot,"",sn):this.location.go(Ot,"",sn)}restoreHistory(ge,ht=!1){var Ot,sn;if("computed"===this.canceledNavigationResolution){const Un=this.currentPageId-ge.targetPageId;"popstate"!==ge.source&&"eager"!==this.urlUpdateStrategy&&this.currentUrlTree!==(null===(Ot=this.currentNavigation)||void 0===Ot?void 0:Ot.finalUrl)||0===Un?this.currentUrlTree===(null===(sn=this.currentNavigation)||void 0===sn?void 0:sn.finalUrl)&&0===Un&&(this.resetState(ge),this.browserUrlTree=ge.currentUrlTree,this.resetUrlToCurrentUrlTree()):this.location.historyGo(Un)}else"replace"===this.canceledNavigationResolution&&(ht&&this.resetState(ge),this.resetUrlToCurrentUrlTree())}resetState(ge){this.routerState=ge.currentRouterState,this.currentUrlTree=ge.currentUrlTree,this.rawUrlTree=this.urlHandlingStrategy.merge(this.currentUrlTree,ge.rawUrl)}resetUrlToCurrentUrlTree(){this.location.replaceState(this.urlSerializer.serialize(this.rawUrlTree),"",this.generateNgRouterState(this.lastSuccessfulId,this.currentPageId))}cancelNavigationTransition(ge,ht){const Ot=new We(ge.id,this.serializeUrl(ge.extractedUrl),ht);this.triggerEvent(Ot),ge.resolve(!1)}generateNgRouterState(ge,ht){return"computed"===this.canceledNavigationResolution?{navigationId:ge,\u0275routerPageId:ht}:{navigationId:ge}}}return Ze.\u0275fac=function(ge){r.$Z()},Ze.\u0275prov=r.Yz7({token:Ze,factory:Ze.\u0275fac}),Ze})();function Pr(Ze){return"imperative"!==Ze}let Yn=(()=>{class Ze{constructor(ge,ht,Ot,sn,Un){this.router=ge,this.route=ht,this.tabIndexAttribute=Ot,this.renderer=sn,this.el=Un,this.commands=null,this.onChanges=new W.xQ,this.setTabIndexIfNotOnNativeEl("0")}setTabIndexIfNotOnNativeEl(ge){if(null!=this.tabIndexAttribute)return;const ht=this.renderer,Ot=this.el.nativeElement;null!==ge?ht.setAttribute(Ot,"tabindex",ge):ht.removeAttribute(Ot,"tabindex")}ngOnChanges(ge){this.onChanges.next(this)}set routerLink(ge){null!=ge?(this.commands=Array.isArray(ge)?ge:[ge],this.setTabIndexIfNotOnNativeEl("0")):(this.commands=null,this.setTabIndexIfNotOnNativeEl(null))}onClick(){if(null===this.urlTree)return!0;const ge={skipLocationChange:br(this.skipLocationChange),replaceUrl:br(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,ge),!0}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:br(this.preserveFragment)})}}return Ze.\u0275fac=function(ge){return new(ge||Ze)(r.Y36(Ci),r.Y36(mo),r.$8M("tabindex"),r.Y36(r.Qsj),r.Y36(r.SBq))},Ze.\u0275dir=r.lG2({type:Ze,selectors:[["","routerLink","",5,"a",5,"area"]],hostBindings:function(ge,ht){1&ge&&r.NdJ("click",function(){return ht.onClick()})},inputs:{queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",state:"state",relativeTo:"relativeTo",routerLink:"routerLink"},features:[r.TTD]}),Ze})(),Rr=(()=>{class Ze{constructor(ge,ht,Ot){this.router=ge,this.route=ht,this.locationStrategy=Ot,this.commands=null,this.href=null,this.onChanges=new W.xQ,this.subscription=ge.events.subscribe(sn=>{sn instanceof Tt&&this.updateTargetUrlAndHref()})}set routerLink(ge){this.commands=null!=ge?Array.isArray(ge)?ge:[ge]:null}ngOnChanges(ge){this.updateTargetUrlAndHref(),this.onChanges.next(this)}ngOnDestroy(){this.subscription.unsubscribe()}onClick(ge,ht,Ot,sn,Un){if(0!==ge||ht||Ot||sn||Un||"string"==typeof this.target&&"_self"!=this.target||null===this.urlTree)return!0;const gr={skipLocationChange:br(this.skipLocationChange),replaceUrl:br(this.replaceUrl),state:this.state};return this.router.navigateByUrl(this.urlTree,gr),!1}updateTargetUrlAndHref(){this.href=null!==this.urlTree?this.locationStrategy.prepareExternalUrl(this.router.serializeUrl(this.urlTree)):null}get urlTree(){return null===this.commands?null:this.router.createUrlTree(this.commands,{relativeTo:void 0!==this.relativeTo?this.relativeTo:this.route,queryParams:this.queryParams,fragment:this.fragment,queryParamsHandling:this.queryParamsHandling,preserveFragment:br(this.preserveFragment)})}}return Ze.\u0275fac=function(ge){return new(ge||Ze)(r.Y36(Ci),r.Y36(mo),r.Y36(Pe.S$))},Ze.\u0275dir=r.lG2({type:Ze,selectors:[["a","routerLink",""],["area","routerLink",""]],hostVars:2,hostBindings:function(ge,ht){1&ge&&r.NdJ("click",function(sn){return ht.onClick(sn.button,sn.ctrlKey,sn.shiftKey,sn.altKey,sn.metaKey)}),2&ge&&r.uIk("target",ht.target)("href",ht.href,r.LSH)},inputs:{target:"target",queryParams:"queryParams",fragment:"fragment",queryParamsHandling:"queryParamsHandling",preserveFragment:"preserveFragment",skipLocationChange:"skipLocationChange",replaceUrl:"replaceUrl",state:"state",relativeTo:"relativeTo",routerLink:"routerLink"},features:[r.TTD]}),Ze})();function br(Ze){return""===Ze||!!Ze}let fo=(()=>{class Ze{constructor(ge,ht,Ot,sn,Un,gr){this.router=ge,this.element=ht,this.renderer=Ot,this.cdr=sn,this.link=Un,this.linkWithHref=gr,this.classes=[],this.isActive=!1,this.routerLinkActiveOptions={exact:!1},this.isActiveChange=new r.vpe,this.routerEventsSubscription=ge.events.subscribe(gi=>{gi instanceof Tt&&this.update()})}ngAfterContentInit(){(0,f.of)(this.links.changes,this.linksWithHrefs.changes,(0,f.of)(null)).pipe((0,He.J)()).subscribe(ge=>{this.update(),this.subscribeToEachLinkOnChanges()})}subscribeToEachLinkOnChanges(){var ge;null===(ge=this.linkInputChangesSubscription)||void 0===ge||ge.unsubscribe();const ht=[...this.links.toArray(),...this.linksWithHrefs.toArray(),this.link,this.linkWithHref].filter(Ot=>!!Ot).map(Ot=>Ot.onChanges);this.linkInputChangesSubscription=(0,a.D)(ht).pipe((0,He.J)()).subscribe(Ot=>{this.isActive!==this.isLinkActive(this.router)(Ot)&&this.update()})}set routerLinkActive(ge){const ht=Array.isArray(ge)?ge:ge.split(" ");this.classes=ht.filter(Ot=>!!Ot)}ngOnChanges(ge){this.update()}ngOnDestroy(){var ge;this.routerEventsSubscription.unsubscribe(),null===(ge=this.linkInputChangesSubscription)||void 0===ge||ge.unsubscribe()}update(){!this.links||!this.linksWithHrefs||!this.router.navigated||Promise.resolve().then(()=>{const ge=this.hasActiveLinks();this.isActive!==ge&&(this.isActive=ge,this.cdr.markForCheck(),this.classes.forEach(ht=>{ge?this.renderer.addClass(this.element.nativeElement,ht):this.renderer.removeClass(this.element.nativeElement,ht)}),this.isActiveChange.emit(ge))})}isLinkActive(ge){const ht=function $s(Ze){return!!Ze.paths}(this.routerLinkActiveOptions)?this.routerLinkActiveOptions:this.routerLinkActiveOptions.exact||!1;return Ot=>!!Ot.urlTree&&ge.isActive(Ot.urlTree,ht)}hasActiveLinks(){const ge=this.isLinkActive(this.router);return this.link&&ge(this.link)||this.linkWithHref&&ge(this.linkWithHref)||this.links.some(ge)||this.linksWithHrefs.some(ge)}}return Ze.\u0275fac=function(ge){return new(ge||Ze)(r.Y36(Ci),r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(r.sBO),r.Y36(Yn,8),r.Y36(Rr,8))},Ze.\u0275dir=r.lG2({type:Ze,selectors:[["","routerLinkActive",""]],contentQueries:function(ge,ht,Ot){if(1&ge&&(r.Suo(Ot,Yn,5),r.Suo(Ot,Rr,5)),2&ge){let sn;r.iGM(sn=r.CRH())&&(ht.links=sn),r.iGM(sn=r.CRH())&&(ht.linksWithHrefs=sn)}},inputs:{routerLinkActiveOptions:"routerLinkActiveOptions",routerLinkActive:"routerLinkActive"},outputs:{isActiveChange:"isActiveChange"},exportAs:["routerLinkActive"],features:[r.TTD]}),Ze})();class ls{}class _l{preload(Ae,ge){return ge().pipe((0,ae.K)(()=>(0,f.of)(null)))}}class Us{preload(Ae,ge){return(0,f.of)(null)}}let zc=(()=>{class Ze{constructor(ge,ht,Ot,sn){this.router=ge,this.injector=Ot,this.preloadingStrategy=sn,this.loader=new ct(Ot,ht,gi=>ge.triggerEvent(new xt(gi)),gi=>ge.triggerEvent(new Ct(gi)))}setUpPreloading(){this.subscription=this.router.events.pipe((0,se.h)(ge=>ge instanceof Tt),(0,ie.b)(()=>this.preload())).subscribe(()=>{})}preload(){const ge=this.injector.get(r.h0i);return this.processRoutes(ge,this.router.config)}ngOnDestroy(){this.subscription&&this.subscription.unsubscribe()}processRoutes(ge,ht){const Ot=[];for(const sn of ht)if(sn.loadChildren&&!sn.canLoad&&sn._loadedConfig){const Un=sn._loadedConfig;Ot.push(this.processRoutes(Un.module,Un.routes))}else sn.loadChildren&&!sn.canLoad?Ot.push(this.preloadConfig(ge,sn)):sn.children&&Ot.push(this.processRoutes(ge,sn.children));return(0,a.D)(Ot).pipe((0,He.J)(),(0,j.U)(sn=>{}))}preloadConfig(ge,ht){return this.preloadingStrategy.preload(ht,()=>(ht._loadedConfig?(0,f.of)(ht._loadedConfig):this.loader.load(ge.injector,ht)).pipe((0,Ce.zg)(sn=>(ht._loadedConfig=sn,this.processRoutes(sn.module,sn.routes)))))}}return Ze.\u0275fac=function(ge){return new(ge||Ze)(r.LFG(Ci),r.LFG(r.Sil),r.LFG(r.zs3),r.LFG(ls))},Ze.\u0275prov=r.Yz7({token:Ze,factory:Ze.\u0275fac}),Ze})(),Ic=(()=>{class Ze{constructor(ge,ht,Ot={}){this.router=ge,this.viewportScroller=ht,this.options=Ot,this.lastId=0,this.lastSource="imperative",this.restoredId=0,this.store={},Ot.scrollPositionRestoration=Ot.scrollPositionRestoration||"disabled",Ot.anchorScrolling=Ot.anchorScrolling||"disabled"}init(){"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.setHistoryScrollRestoration("manual"),this.routerEventsSubscription=this.createScrollEvents(),this.scrollEventsSubscription=this.consumeScrollEvents()}createScrollEvents(){return this.router.events.subscribe(ge=>{ge instanceof Oe?(this.store[this.lastId]=this.viewportScroller.getScrollPosition(),this.lastSource=ge.navigationTrigger,this.restoredId=ge.restoredState?ge.restoredState.navigationId:0):ge instanceof Tt&&(this.lastId=ge.id,this.scheduleScrollEvent(ge,this.router.parseUrl(ge.urlAfterRedirects).fragment))})}consumeScrollEvents(){return this.router.events.subscribe(ge=>{ge instanceof ci&&(ge.position?"top"===this.options.scrollPositionRestoration?this.viewportScroller.scrollToPosition([0,0]):"enabled"===this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition(ge.position):ge.anchor&&"enabled"===this.options.anchorScrolling?this.viewportScroller.scrollToAnchor(ge.anchor):"disabled"!==this.options.scrollPositionRestoration&&this.viewportScroller.scrollToPosition([0,0]))})}scheduleScrollEvent(ge,ht){this.router.triggerEvent(new ci(ge,"popstate"===this.lastSource?this.store[this.restoredId]:null,ht))}ngOnDestroy(){this.routerEventsSubscription&&this.routerEventsSubscription.unsubscribe(),this.scrollEventsSubscription&&this.scrollEventsSubscription.unsubscribe()}}return Ze.\u0275fac=function(ge){r.$Z()},Ze.\u0275prov=r.Yz7({token:Ze,factory:Ze.\u0275fac}),Ze})();const Su=new r.OlP("ROUTER_CONFIGURATION"),Zd=new r.OlP("ROUTER_FORROOT_GUARD"),_d=[Pe.Ye,{provide:nn,useClass:Fe},{provide:Ci,useFactory:function wo(Ze,Ae,ge,ht,Ot,sn,Un={},gr,gi){const Lo=new Ci(null,Ze,Ae,ge,ht,Ot,xo(sn));return gr&&(Lo.urlHandlingStrategy=gr),gi&&(Lo.routeReuseStrategy=gi),function Ta(Ze,Ae){Ze.errorHandler&&(Ae.errorHandler=Ze.errorHandler),Ze.malformedUriErrorHandler&&(Ae.malformedUriErrorHandler=Ze.malformedUriErrorHandler),Ze.onSameUrlNavigation&&(Ae.onSameUrlNavigation=Ze.onSameUrlNavigation),Ze.paramsInheritanceStrategy&&(Ae.paramsInheritanceStrategy=Ze.paramsInheritanceStrategy),Ze.relativeLinkResolution&&(Ae.relativeLinkResolution=Ze.relativeLinkResolution),Ze.urlUpdateStrategy&&(Ae.urlUpdateStrategy=Ze.urlUpdateStrategy),Ze.canceledNavigationResolution&&(Ae.canceledNavigationResolution=Ze.canceledNavigationResolution)}(Un,Lo),Un.enableTracing&&Lo.events.subscribe(Ca=>{var ms,ha;null===(ms=console.group)||void 0===ms||ms.call(console,`Router Event: ${Ca.constructor.name}`),console.log(Ca.toString()),console.log(Ca),null===(ha=console.groupEnd)||void 0===ha||ha.call(console)}),Lo},deps:[nn,Oi,Pe.Ye,r.zs3,r.Sil,De,Su,[class It{},new r.FiY],[class fu{},new r.FiY]]},Oi,{provide:mo,useFactory:function Tl(Ze){return Ze.routerState.root},deps:[Ci]},zc,Us,_l,{provide:Su,useValue:{enableTracing:!1}}];function md(){return new r.PXZ("Router",Ci)}let Hc=(()=>{class Ze{constructor(ge,ht){}static forRoot(ge,ht){return{ngModule:Ze,providers:[_d,Mo(ge),{provide:Zd,useFactory:Oc,deps:[[Ci,new r.FiY,new r.tp0]]},{provide:Su,useValue:ht||{}},{provide:Pe.S$,useFactory:kd,deps:[Pe.lw,[new r.tBr(Pe.mr),new r.FiY],Su]},{provide:Ic,useFactory:La,deps:[Ci,Pe.EM,Su]},{provide:ls,useExisting:ht&&ht.preloadingStrategy?ht.preloadingStrategy:Us},{provide:r.PXZ,multi:!0,useFactory:md},[ou,{provide:r.ip1,multi:!0,useFactory:Tu,deps:[ou]},{provide:En,useFactory:gc,deps:[ou]},{provide:r.tb,multi:!0,useExisting:En}]]}}static forChild(ge){return{ngModule:Ze,providers:[Mo(ge)]}}}return Ze.\u0275fac=function(ge){return new(ge||Ze)(r.LFG(Zd,8),r.LFG(Ci,8))},Ze.\u0275mod=r.oAB({type:Ze}),Ze.\u0275inj=r.cJS({}),Ze})();function La(Ze,Ae,ge){return ge.scrollOffset&&Ae.setOffset(ge.scrollOffset),new Ic(Ze,Ae,ge)}function kd(Ze,Ae,ge={}){return ge.useHash?new Pe.Do(Ze,Ae):new Pe.b0(Ze,Ae)}function Oc(Ze){return"guarded"}function Mo(Ze){return[{provide:r.deG,multi:!0,useValue:Ze},{provide:De,multi:!0,useValue:Ze}]}let ou=(()=>{class Ze{constructor(ge){this.injector=ge,this.initNavigation=!1,this.destroyed=!1,this.resultOfPreactivationDone=new W.xQ}appInitializer(){return this.injector.get(Pe.V_,Promise.resolve(null)).then(()=>{if(this.destroyed)return Promise.resolve(!0);let ht=null;const Ot=new Promise(gr=>ht=gr),sn=this.injector.get(Ci),Un=this.injector.get(Su);return"disabled"===Un.initialNavigation?(sn.setUpLocationChangeListener(),ht(!0)):"enabled"===Un.initialNavigation||"enabledBlocking"===Un.initialNavigation?(sn.hooks.afterPreactivation=()=>this.initNavigation?(0,f.of)(null):(this.initNavigation=!0,ht(!0),this.resultOfPreactivationDone),sn.initialNavigation()):ht(!0),Ot})}bootstrapListener(ge){const ht=this.injector.get(Su),Ot=this.injector.get(zc),sn=this.injector.get(Ic),Un=this.injector.get(Ci),gr=this.injector.get(r.z2F);ge===gr.components[0]&&(("enabledNonBlocking"===ht.initialNavigation||void 0===ht.initialNavigation)&&Un.initialNavigation(),Ot.setUpPreloading(),sn.init(),Un.resetRootComponentType(gr.componentTypes[0]),this.resultOfPreactivationDone.next(null),this.resultOfPreactivationDone.complete())}ngOnDestroy(){this.destroyed=!0}}return Ze.\u0275fac=function(ge){return new(ge||Ze)(r.LFG(r.zs3))},Ze.\u0275prov=r.Yz7({token:Ze,factory:Ze.\u0275fac}),Ze})();function Tu(Ze){return Ze.appInitializer.bind(Ze)}function gc(Ze){return Ze.bootstrapListener.bind(Ze)}const En=new r.OlP("Router Initializer")},71334:(v,b,i)=>{"use strict";i.d(b,{Kz:()=>Sp,xm:()=>Gu,_A:()=>ul,vL:()=>Zu,_D:()=>od,lQ:()=>nc,VL:()=>xe,M:()=>Td,jt:()=>bp,TH:()=>zh,Vi:()=>Cd,XC:()=>sc,iD:()=>Wh,J4:()=>wt,FF:()=>Xh,Pz:()=>Cp,uN:()=>Wf,nv:()=>yh,Vx:()=>Cf,Oz:()=>Ts,tO:()=>wc,M2:()=>Zh,o8:()=>nf,AX:()=>kf,dT:()=>rf,Ly:()=>t_,ZQ:()=>ud,Pm:()=>Ap,UL:()=>Zp,_L:()=>E_,xI:()=>y_,HK:()=>$f,dR:()=>Rp,ZS:()=>i_});var r=i(89724),a=i(11048),f=i(70882),u=i(59193),e=i(25917),p=i(79765),g=i(22759),S=i(46797),M=i(59796),w=i(56693),x=i(55197),B=i(53960);function W(...I){if(1===I.length){if(!(0,M.k)(I[0]))return I[0];I=I[0]}return(0,w.n)(I,void 0).lift(new j)}class j{call(ne,T){return T.subscribe(new q(ne))}}class q extends x.L{constructor(ne){super(ne),this.hasFirst=!1,this.observables=[],this.subscriptions=[]}_next(ne){this.observables.push(ne)}_complete(){const ne=this.observables,T=ne.length;if(0===T)this.destination.complete();else{for(let z=0;z<T&&!this.hasFirst;z++){const Ke=(0,B.D)(this,ne[z],void 0,z);this.subscriptions&&this.subscriptions.push(Ke),this.add(Ke)}this.observables=null}}notifyNext(ne,T,z){if(!this.hasFirst){this.hasFirst=!0;for(let Me=0;Me<this.subscriptions.length;Me++)if(Me!==z){let Ke=this.subscriptions[Me];Ke.unsubscribe(),this.remove(Ke)}this.subscriptions=null}this.destination.next(T)}}var ue=i(26215),se=(i(9112),i(17757),i(77393)),ae=i(20377),ie=i(85345);function fe(...I){const ne=I[I.length-1];return"function"==typeof ne&&I.pop(),(0,w.n)(I,void 0).lift(new he(ne))}class he{constructor(ne){this.resultSelector=ne}call(ne,T){return T.subscribe(new Ce(ne,this.resultSelector))}}class Ce extends se.L{constructor(ne,T,z=Object.create(null)){super(ne),this.resultSelector=T,this.iterators=[],this.active=0,this.resultSelector="function"==typeof T?T:void 0}_next(ne){const T=this.iterators;(0,M.k)(ne)?T.push(new Be(ne)):T.push("function"==typeof ne[ae.hZ]?new ce(ne[ae.hZ]()):new Ve(this.destination,this,ne))}_complete(){const ne=this.iterators,T=ne.length;if(this.unsubscribe(),0!==T){this.active=T;for(let z=0;z<T;z++){let Me=ne[z];Me.stillUnsubscribed?this.destination.add(Me.subscribe()):this.active--}}else this.destination.complete()}notifyInactive(){this.active--,0===this.active&&this.destination.complete()}checkIterators(){const ne=this.iterators,T=ne.length,z=this.destination;for(let gn=0;gn<T;gn++){let yr=ne[gn];if("function"==typeof yr.hasValue&&!yr.hasValue())return}let Me=!1;const Ke=[];for(let gn=0;gn<T;gn++){let yr=ne[gn],Nr=yr.next();if(yr.hasCompleted()&&(Me=!0),Nr.done)return void z.complete();Ke.push(Nr.value)}this.resultSelector?this._tryresultSelector(Ke):z.next(Ke),Me&&z.complete()}_tryresultSelector(ne){let T;try{T=this.resultSelector.apply(this,ne)}catch(z){return void this.destination.error(z)}this.destination.next(T)}}class ce{constructor(ne){this.iterator=ne,this.nextResult=ne.next()}hasValue(){return!0}next(){const ne=this.nextResult;return this.nextResult=this.iterator.next(),ne}hasCompleted(){const ne=this.nextResult;return Boolean(ne&&ne.done)}}class Be{constructor(ne){this.array=ne,this.index=0,this.length=0,this.length=ne.length}[ae.hZ](){return this}next(ne){const T=this.index++;return T<this.length?{value:this.array[T],done:!1}:{value:null,done:!0}}hasValue(){return this.array.length>this.index}hasCompleted(){return this.array.length===this.index}}class Ve extends ie.Ds{constructor(ne,T,z){super(ne),this.parent=T,this.observable=z,this.stillUnsubscribed=!0,this.buffer=[],this.isComplete=!1}[ae.hZ](){return this}next(){const ne=this.buffer;return 0===ne.length&&this.isComplete?{value:null,done:!0}:{value:ne.shift(),done:!1}}hasValue(){return this.buffer.length>0}hasCompleted(){return 0===this.buffer.length&&this.isComplete}notifyComplete(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()}notifyNext(ne){this.buffer.push(ne),this.parent.checkIterators()}subscribe(){return(0,ie.ft)(this.observable,new ie.IY(this))}}var Xe=i(66682),He=i(6481),Ge=i(46782),Oe=i(45435),Tt=i(15257),We=i(88002),Qt=i(39761),Nt=i(87519),Yt=i(43190),dn=i(68307);function rn(...I){return ne=>{let T;return"function"==typeof I[I.length-1]&&(T=I.pop()),ne.lift(new vt(I,T))}}class vt{constructor(ne,T){this.observables=ne,this.project=T}call(ne,T){return T.subscribe(new xt(ne,this.observables,this.project))}}class xt extends x.L{constructor(ne,T,z){super(ne),this.observables=T,this.project=z,this.toRespond=[];const Me=T.length;this.values=new Array(Me);for(let Ke=0;Ke<Me;Ke++)this.toRespond.push(Ke);for(let Ke=0;Ke<Me;Ke++)this.add((0,B.D)(this,T[Ke],void 0,Ke))}notifyNext(ne,T,z){this.values[z]=T;const Me=this.toRespond;if(Me.length>0){const Ke=Me.indexOf(z);-1!==Ke&&Me.splice(Ke,1)}}notifyComplete(){}_next(ne){if(0===this.toRespond.length){const T=[ne,...this.values];this.project?this._tryProject(T):this.destination.next(T)}}_tryProject(ne){let T;try{T=this.project.apply(this,ne)}catch(z){return void this.destination.error(z)}this.destination.next(T)}}var Ct=i(67460),Gt=i(19773);class pr{constructor(ne){this.total=ne}call(ne,T){return T.subscribe(new mi(ne,this.total))}}class mi extends se.L{constructor(ne,T){super(ne),this.total=T,this.count=0}_next(ne){++this.count>this.total&&this.destination.next(ne)}}var ci=i(4121),hr=i(1659),Br={left:"right",right:"left",bottom:"top",top:"bottom"};function Ur(I){return I.replace(/left|right|bottom|top/g,function(ne){return Br[ne]})}function Hn(I){return I.split("-")[0]}var er={start:"end",end:"start"};function _r(I){return I.replace(/start|end/g,function(ne){return er[ne]})}var ei="top",bi="bottom",fi="right",no="left",xo="auto",Er=[ei,bi,fi,no],an="start",vn="end",Xn="viewport",zn="popper",Gi=Er.reduce(function(I,ne){return I.concat([ne+"-"+an,ne+"-"+vn])},[]),ui=[].concat(Er,[xo]).reduce(function(I,ne){return I.concat([ne,ne+"-"+an,ne+"-"+vn])},[]),dt=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function st(I){if(null==I)return window;if("[object Window]"!==I.toString()){var ne=I.ownerDocument;return ne&&ne.defaultView||window}return I}function nn(I){return I instanceof st(I).Element||I instanceof Element}function Fe(I){return I instanceof st(I).HTMLElement||I instanceof HTMLElement}function Lr(I){return"undefined"!=typeof ShadowRoot&&(I instanceof st(I).ShadowRoot||I instanceof ShadowRoot)}function ti(I){return((nn(I)?I.ownerDocument:I.document)||window.document).documentElement}function Ut(I,ne){void 0===ne&&(ne=!1);var T=I.getBoundingClientRect();return{width:T.width/1,height:T.height/1,top:T.top/1,right:T.right/1,bottom:T.bottom/1,left:T.left/1,x:T.left/1,y:T.top/1}}function Dn(I){var ne=st(I);return{scrollLeft:ne.pageXOffset,scrollTop:ne.pageYOffset}}function Et(I){return Ut(ti(I)).left+Dn(I).scrollLeft}function _t(I){return st(I).getComputedStyle(I)}var yt=Math.max,Vt=Math.min,yn=Math.round;function xi(I){return I?(I.nodeName||"").toLowerCase():null}function yi(I){return"html"===xi(I)?I:I.assignedSlot||I.parentNode||(Lr(I)?I.host:null)||ti(I)}function Yo(I){var ne=_t(I);return/auto|scroll|overlay|hidden/.test(ne.overflow+ne.overflowY+ne.overflowX)}function Qo(I){return["html","body","#document"].indexOf(xi(I))>=0?I.ownerDocument.body:Fe(I)&&Yo(I)?I:Qo(yi(I))}function lo(I,ne){var T;void 0===ne&&(ne=[]);var z=Qo(I),Me=z===(null==(T=I.ownerDocument)?void 0:T.body),Ke=st(z),gn=Me?[Ke].concat(Ke.visualViewport||[],Yo(z)?z:[]):z,yr=ne.concat(gn);return Me?yr:yr.concat(lo(yi(gn)))}function Ri(I){return["table","td","th"].indexOf(xi(I))>=0}function ko(I){return Fe(I)&&"fixed"!==_t(I).position?I.offsetParent:null}function ir(I){for(var ne=st(I),T=ko(I);T&&Ri(T)&&"static"===_t(T).position;)T=ko(T);return T&&("html"===xi(T)||"body"===xi(T)&&"static"===_t(T).position)?ne:T||function Xo(I){var ne=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&Fe(I)&&"fixed"===_t(I).position)return null;for(var Me=yi(I);Fe(Me)&&["html","body"].indexOf(xi(Me))<0;){var Ke=_t(Me);if("none"!==Ke.transform||"none"!==Ke.perspective||"paint"===Ke.contain||-1!==["transform","perspective"].indexOf(Ke.willChange)||ne&&"filter"===Ke.willChange||ne&&Ke.filter&&"none"!==Ke.filter)return Me;Me=Me.parentNode}return null}(I)||ne}function si(I,ne){var T=ne.getRootNode&&ne.getRootNode();if(I.contains(ne))return!0;if(T&&Lr(T)){var z=ne;do{if(z&&I.isSameNode(z))return!0;z=z.parentNode||z.host}while(z)}return!1}function kn(I){return Object.assign({},I,{left:I.x,top:I.y,right:I.x+I.width,bottom:I.y+I.height})}function jr(I,ne){return ne===Xn?kn(function $t(I){var ne=st(I),T=ti(I),z=ne.visualViewport,Me=T.clientWidth,Ke=T.clientHeight,gn=0,yr=0;return z&&(Me=z.width,Ke=z.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(gn=z.offsetLeft,yr=z.offsetTop)),{width:Me,height:Ke,x:gn+Et(I),y:yr}}(I)):Fe(ne)?function nr(I){var ne=Ut(I);return ne.top=ne.top+I.clientTop,ne.left=ne.left+I.clientLeft,ne.bottom=ne.top+I.clientHeight,ne.right=ne.left+I.clientWidth,ne.width=I.clientWidth,ne.height=I.clientHeight,ne.x=ne.left,ne.y=ne.top,ne}(ne):kn(function Cr(I){var ne,T=ti(I),z=Dn(I),Me=null==(ne=I.ownerDocument)?void 0:ne.body,Ke=yt(T.scrollWidth,T.clientWidth,Me?Me.scrollWidth:0,Me?Me.clientWidth:0),gn=yt(T.scrollHeight,T.clientHeight,Me?Me.scrollHeight:0,Me?Me.clientHeight:0),yr=-z.scrollLeft+Et(I),Nr=-z.scrollTop;return"rtl"===_t(Me||T).direction&&(yr+=yt(T.clientWidth,Me?Me.clientWidth:0)-Ke),{width:Ke,height:gn,x:yr,y:Nr}}(ti(I)))}function Eo(I){return I.split("-")[1]}function mo(I){return["top","bottom"].indexOf(I)>=0?"x":"y"}function Go(I){var Nr,ne=I.reference,T=I.element,z=I.placement,Me=z?Hn(z):null,Ke=z?Eo(z):null,gn=ne.x+ne.width/2-T.width/2,yr=ne.y+ne.height/2-T.height/2;switch(Me){case ei:Nr={x:gn,y:ne.y-T.height};break;case bi:Nr={x:gn,y:ne.y+ne.height};break;case fi:Nr={x:ne.x+ne.width,y:yr};break;case no:Nr={x:ne.x-T.width,y:yr};break;default:Nr={x:ne.x,y:ne.y}}var vi=Me?mo(Me):null;if(null!=vi){var di="y"===vi?"height":"width";switch(Ke){case an:Nr[vi]=Nr[vi]-(ne[di]/2-T[di]/2);break;case vn:Nr[vi]=Nr[vi]+(ne[di]/2-T[di]/2)}}return Nr}function or(I){return Object.assign({},{top:0,right:0,bottom:0,left:0},I)}function Mr(I,ne){return ne.reduce(function(T,z){return T[z]=I,T},{})}function Ar(I,ne){void 0===ne&&(ne={});var z=ne.placement,Me=void 0===z?I.placement:z,Ke=ne.boundary,gn=void 0===Ke?"clippingParents":Ke,yr=ne.rootBoundary,Nr=void 0===yr?Xn:yr,vi=ne.elementContext,di=void 0===vi?zn:vi,ts=ne.altBoundary,Do=void 0!==ts&&ts,Ss=ne.padding,jo=void 0===Ss?0:Ss,ia=or("number"!=typeof jo?jo:Mr(jo,Er)),D=I.rects.popper,Y=I.elements[Do?di===zn?"reference":zn:di],Ee=function $i(I,ne,T){var z="clippingParents"===ne?function ao(I){var ne=lo(yi(I)),z=["absolute","fixed"].indexOf(_t(I).position)>=0&&Fe(I)?ir(I):I;return nn(z)?ne.filter(function(Me){return nn(Me)&&si(Me,z)&&"body"!==xi(Me)}):[]}(I):[].concat(ne),Me=[].concat(z,[T]),gn=Me.reduce(function(yr,Nr){var vi=jr(I,Nr);return yr.top=yt(vi.top,yr.top),yr.right=Vt(vi.right,yr.right),yr.bottom=Vt(vi.bottom,yr.bottom),yr.left=yt(vi.left,yr.left),yr},jr(I,Me[0]));return gn.width=gn.right-gn.left,gn.height=gn.bottom-gn.top,gn.x=gn.left,gn.y=gn.top,gn}(nn(Y)?Y:Y.contextElement||ti(I.elements.popper),gn,Nr),ze=Ut(I.elements.reference),At=Go({reference:ze,element:D,strategy:"absolute",placement:Me}),tn=kn(Object.assign({},D,At)),Tn=di===zn?tn:ze,ar={top:Ee.top-Tn.top+ia.top,bottom:Tn.bottom-Ee.bottom+ia.bottom,left:Ee.left-Tn.left+ia.left,right:Tn.right-Ee.right+ia.right},li=I.modifiersData.offset;if(di===zn&&li){var Ho=li[Me];Object.keys(ar).forEach(function(Hs){var po=[fi,bi].indexOf(Hs)>=0?1:-1,fs=[ei,bi].indexOf(Hs)>=0?"y":"x";ar[Hs]+=Ho[fs]*po})}return ar}const $n={name:"flip",enabled:!0,phase:"main",fn:function Sn(I){var ne=I.state,T=I.options,z=I.name;if(!ne.modifiersData[z]._skip){for(var Me=T.mainAxis,Ke=void 0===Me||Me,gn=T.altAxis,yr=void 0===gn||gn,Nr=T.fallbackPlacements,vi=T.padding,di=T.boundary,ts=T.rootBoundary,Do=T.altBoundary,Ss=T.flipVariations,jo=void 0===Ss||Ss,ia=T.allowedAutoPlacements,y=ne.options.placement,D=Hn(y),Ee=Nr||(D!==y&&jo?function pi(I){if(Hn(I)===xo)return[];var ne=Ur(I);return[_r(I),ne,_r(ne)]}(y):[Ur(y)]),ze=[y].concat(Ee).reduce(function(Za,va){return Za.concat(Hn(va)===xo?function cr(I,ne){void 0===ne&&(ne={});var Me=ne.boundary,Ke=ne.rootBoundary,gn=ne.padding,yr=ne.flipVariations,Nr=ne.allowedAutoPlacements,vi=void 0===Nr?ui:Nr,di=Eo(ne.placement),ts=di?yr?Gi:Gi.filter(function(jo){return Eo(jo)===di}):Er,Do=ts.filter(function(jo){return vi.indexOf(jo)>=0});0===Do.length&&(Do=ts);var Ss=Do.reduce(function(jo,ia){return jo[ia]=Ar(I,{placement:ia,boundary:Me,rootBoundary:Ke,padding:gn})[Hn(ia)],jo},{});return Object.keys(Ss).sort(function(jo,ia){return Ss[jo]-Ss[ia]})}(ne,{placement:va,boundary:di,rootBoundary:ts,padding:vi,flipVariations:jo,allowedAutoPlacements:ia}):va)},[]),At=ne.rects.reference,tn=ne.rects.popper,Tn=new Map,ar=!0,li=ze[0],Ho=0;Ho<ze.length;Ho++){var Hs=ze[Ho],po=Hn(Hs),fs=Eo(Hs)===an,oa=[ei,bi].indexOf(po)>=0,Xs=oa?"width":"height",Qr=Ar(ne,{placement:Hs,boundary:di,rootBoundary:ts,altBoundary:Do,padding:vi}),Fr=oa?fs?fi:no:fs?bi:ei;At[Xs]>tn[Xs]&&(Fr=Ur(Fr));var Zr=Ur(Fr),Hi=[];if(Ke&&Hi.push(Qr[po]<=0),yr&&Hi.push(Qr[Fr]<=0,Qr[Zr]<=0),Hi.every(function(Za){return Za})){li=Hs,ar=!1;break}Tn.set(Hs,Hi)}if(ar)for(var Ha=function(va){var Hf=ze.find(function(im){var o_=Tn.get(im);if(o_)return o_.slice(0,va).every(function(om){return om})});if(Hf)return li=Hf,"break"},vs=jo?3:1;vs>0&&"break"!==Ha(vs);vs--);ne.placement!==li&&(ne.modifiersData[z]._skip=!0,ne.placement=li,ne.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function ro(I,ne,T){return yt(I,Vt(ne,T))}function go(I){var ne=Ut(I),T=I.offsetWidth,z=I.offsetHeight;return Math.abs(ne.width-T)<=1&&(T=ne.width),Math.abs(ne.height-z)<=1&&(z=ne.height),{x:I.offsetLeft,y:I.offsetTop,width:T,height:z}}const Ys={name:"preventOverflow",enabled:!0,phase:"main",fn:function Ro(I){var ne=I.state,T=I.options,z=I.name,Me=T.mainAxis,Ke=void 0===Me||Me,gn=T.altAxis,yr=void 0!==gn&&gn,Do=T.tether,Ss=void 0===Do||Do,jo=T.tetherOffset,ia=void 0===jo?0:jo,y=Ar(ne,{boundary:T.boundary,rootBoundary:T.rootBoundary,padding:T.padding,altBoundary:T.altBoundary}),D=Hn(ne.placement),Y=Eo(ne.placement),Ee=!Y,ze=mo(D),At=function Jr(I){return"x"===I?"y":"x"}(ze),tn=ne.modifiersData.popperOffsets,Tn=ne.rects.reference,ar=ne.rects.popper,li="function"==typeof ia?ia(Object.assign({},ne.rects,{placement:ne.placement})):ia,Ho={x:0,y:0};if(tn){if(Ke||yr){var Hs="y"===ze?ei:no,po="y"===ze?bi:fi,fs="y"===ze?"height":"width",oa=tn[ze],Xs=tn[ze]+y[Hs],Qr=tn[ze]-y[po],Fr=Ss?-ar[fs]/2:0,Zr=Y===an?Tn[fs]:ar[fs],Hi=Y===an?-ar[fs]:-Tn[fs],io=ne.elements.arrow,Ha=Ss&&io?go(io):{width:0,height:0},vs=ne.modifiersData["arrow#persistent"]?ne.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},Pa=vs[Hs],Za=vs[po],va=ro(0,Tn[fs],Ha[fs]),Hf=Ee?Tn[fs]/2-Fr-va-Pa-li:Zr-va-Pa-li,im=Ee?-Tn[fs]/2+Fr+va+Za+li:Hi+va+Za+li,o_=ne.elements.arrow&&ir(ne.elements.arrow),Qm=ne.modifiersData.offset?ne.modifiersData.offset[ne.placement][ze]:0,sm=tn[ze]+Hf-Qm-(o_?"y"===ze?o_.clientTop||0:o_.clientLeft||0:0),bg=tn[ze]+im-Qm;if(Ke){var Sg=ro(Ss?Vt(Xs,sm):Xs,oa,Ss?yt(Qr,bg):Qr);tn[ze]=Sg,Ho[ze]=Sg-oa}if(yr){var Tm=tn[At],Of=Tm+y["x"===ze?ei:no],Xm=Tm-y["x"===ze?bi:fi],Km=ro(Ss?Vt(Of,sm):Of,Tm,Ss?yt(Xm,bg):Xm);tn[At]=Km,Ho[At]=Km-Tm}}ne.modifiersData[z]=Ho}},requiresIfExists:["offset"]},Ea={name:"arrow",enabled:!0,phase:"main",fn:function es(I){var ne,T=I.state,z=I.name,Me=I.options,Ke=T.elements.arrow,gn=T.modifiersData.popperOffsets,yr=Hn(T.placement),Nr=mo(yr),di=[no,fi].indexOf(yr)>=0?"height":"width";if(Ke&&gn){var ts=function(ne,T){return or("number"!=typeof(ne="function"==typeof ne?ne(Object.assign({},T.rects,{placement:T.placement})):ne)?ne:Mr(ne,Er))}(Me.padding,T),Do=go(Ke),Ss="y"===Nr?ei:no,jo="y"===Nr?bi:fi,ia=T.rects.reference[di]+T.rects.reference[Nr]-gn[Nr]-T.rects.popper[di],y=gn[Nr]-T.rects.reference[Nr],D=ir(Ke),Y=D?"y"===Nr?D.clientHeight||0:D.clientWidth||0:0,tn=Y/2-Do[di]/2+(ia/2-y/2),Tn=ro(ts[Ss],tn,Y-Do[di]-ts[jo]);T.modifiersData[z]=((ne={})[Nr]=Tn,ne.centerOffset=Tn-tn,ne)}},effect:function ma(I){var ne=I.state,z=I.options.element,Me=void 0===z?"[data-popper-arrow]":z;null!=Me&&("string"==typeof Me&&!(Me=ne.elements.popper.querySelector(Me))||!si(ne.elements.popper,Me)||(ne.elements.arrow=Me))},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function pl(I,ne,T){void 0===T&&(T=!1);var z=Fe(ne),Me=Fe(ne)&&function Ra(I){var ne=I.getBoundingClientRect();return 1!==(ne.width/I.offsetWidth||1)||1!==(ne.height/I.offsetHeight||1)}(ne),Ke=ti(ne),gn=Ut(I,Me),yr={scrollLeft:0,scrollTop:0},Nr={x:0,y:0};return(z||!z&&!T)&&(("body"!==xi(ne)||Yo(Ke))&&(yr=function sa(I){return I!==st(I)&&Fe(I)?function fa(I){return{scrollLeft:I.scrollLeft,scrollTop:I.scrollTop}}(I):Dn(I)}(ne)),Fe(ne)?((Nr=Ut(ne,!0)).x+=ne.clientLeft,Nr.y+=ne.clientTop):Ke&&(Nr.x=Et(Ke))),{x:gn.left+yr.scrollLeft-Nr.x,y:gn.top+yr.scrollTop-Nr.y,width:gn.width,height:gn.height}}function Co(I){var ne=new Map,T=new Set,z=[];function Me(Ke){T.add(Ke.name),[].concat(Ke.requires||[],Ke.requiresIfExists||[]).forEach(function(yr){if(!T.has(yr)){var Nr=ne.get(yr);Nr&&Me(Nr)}}),z.push(Ke)}return I.forEach(function(Ke){ne.set(Ke.name,Ke)}),I.forEach(function(Ke){T.has(Ke.name)||Me(Ke)}),z}function Wo(I){var ne;return function(){return ne||(ne=new Promise(function(T){Promise.resolve().then(function(){ne=void 0,T(I())})})),ne}}var nl={placement:"bottom",modifiers:[],strategy:"absolute"};function js(){for(var I=arguments.length,ne=new Array(I),T=0;T<I;T++)ne[T]=arguments[T];return!ne.some(function(z){return!(z&&"function"==typeof z.getBoundingClientRect)})}function $o(I){void 0===I&&(I={});var T=I.defaultModifiers,z=void 0===T?[]:T,Me=I.defaultOptions,Ke=void 0===Me?nl:Me;return function(yr,Nr,vi){void 0===vi&&(vi=Ke);var di={placement:"bottom",orderedModifiers:[],options:Object.assign({},nl,Ke),modifiersData:{},elements:{reference:yr,popper:Nr},attributes:{},styles:{}},ts=[],Do=!1,Ss={state:di,setOptions:function(D){var Y="function"==typeof D?D(di.options):D;ia(),di.options=Object.assign({},Ke,di.options,Y),di.scrollParents={reference:nn(yr)?lo(yr):yr.contextElement?lo(yr.contextElement):[],popper:lo(Nr)};var Ee=function yl(I){var ne=Co(I);return dt.reduce(function(T,z){return T.concat(ne.filter(function(Me){return Me.phase===z}))},[])}(function ys(I){var ne=I.reduce(function(T,z){var Me=T[z.name];return T[z.name]=Me?Object.assign({},Me,z,{options:Object.assign({},Me.options,z.options),data:Object.assign({},Me.data,z.data)}):z,T},{});return Object.keys(ne).map(function(T){return ne[T]})}([].concat(z,di.options.modifiers)));return di.orderedModifiers=Ee.filter(function(Hs){return Hs.enabled}),function jo(){di.orderedModifiers.forEach(function(y){var Y=y.options,ze=y.effect;if("function"==typeof ze){var At=ze({state:di,name:y.name,instance:Ss,options:void 0===Y?{}:Y});ts.push(At||function(){})}})}(),Ss.update()},forceUpdate:function(){if(!Do){var D=di.elements,Y=D.reference,Ee=D.popper;if(js(Y,Ee)){di.rects={reference:pl(Y,ir(Ee),"fixed"===di.options.strategy),popper:go(Ee)},di.reset=!1,di.placement=di.options.placement,di.orderedModifiers.forEach(function(Hs){return di.modifiersData[Hs.name]=Object.assign({},Hs.data)});for(var At=0;At<di.orderedModifiers.length;At++)if(!0!==di.reset){var tn=di.orderedModifiers[At],Tn=tn.fn,ar=tn.options;"function"==typeof Tn&&(di=Tn({state:di,options:void 0===ar?{}:ar,name:tn.name,instance:Ss})||di)}else di.reset=!1,At=-1}}},update:Wo(function(){return new Promise(function(y){Ss.forceUpdate(),y(di)})}),destroy:function(){ia(),Do=!0}};if(!js(yr,Nr))return Ss;function ia(){ts.forEach(function(y){return y()}),ts=[]}return Ss.setOptions(vi).then(function(y){!Do&&vi.onFirstUpdate&&vi.onFirstUpdate(y)}),Ss}}var Ns={passive:!0},ut={top:"auto",right:"auto",bottom:"auto",left:"auto"};function te(I){var ne,T=I.popper,z=I.popperRect,Me=I.placement,Ke=I.variation,gn=I.offsets,yr=I.position,Nr=I.gpuAcceleration,vi=I.adaptive,di=I.roundOffsets,ts=!0===di?function pn(I){var T=I.y,Me=window.devicePixelRatio||1;return{x:yn(yn(I.x*Me)/Me)||0,y:yn(yn(T*Me)/Me)||0}}(gn):"function"==typeof di?di(gn):gn,Do=ts.x,Ss=void 0===Do?0:Do,jo=ts.y,ia=void 0===jo?0:jo,y=gn.hasOwnProperty("x"),D=gn.hasOwnProperty("y"),Y=no,Ee=ei,ze=window;if(vi){var At=ir(T),tn="clientHeight",Tn="clientWidth";At===st(T)&&"static"!==_t(At=ti(T)).position&&"absolute"===yr&&(tn="scrollHeight",Tn="scrollWidth"),(Me===ei||(Me===no||Me===fi)&&Ke===vn)&&(Ee=bi,ia-=At[tn]-z.height,ia*=Nr?1:-1),(Me===no||(Me===ei||Me===bi)&&Ke===vn)&&(Y=fi,Ss-=At[Tn]-z.width,Ss*=Nr?1:-1)}var li,ar=Object.assign({position:yr},vi&&ut);return Object.assign({},ar,Nr?((li={})[Ee]=D?"0":"",li[Y]=y?"0":"",li.transform=(ze.devicePixelRatio||1)<=1?"translate("+Ss+"px, "+ia+"px)":"translate3d("+Ss+"px, "+ia+"px, 0)",li):((ne={})[Ee]=D?ia+"px":"",ne[Y]=y?Ss+"px":"",ne.transform="",ne))}var _s=$o({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function hs(I){var ne=I.state,T=I.instance,z=I.options,Me=z.scroll,Ke=void 0===Me||Me,gn=z.resize,yr=void 0===gn||gn,Nr=st(ne.elements.popper),vi=[].concat(ne.scrollParents.reference,ne.scrollParents.popper);return Ke&&vi.forEach(function(di){di.addEventListener("scroll",T.update,Ns)}),yr&&Nr.addEventListener("resize",T.update,Ns),function(){Ke&&vi.forEach(function(di){di.removeEventListener("scroll",T.update,Ns)}),yr&&Nr.removeEventListener("resize",T.update,Ns)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function kr(I){var ne=I.state;ne.modifiersData[I.name]=Go({reference:ne.rects.reference,element:ne.rects.popper,strategy:"absolute",placement:ne.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function Ue(I){var ne=I.state,T=I.options,z=T.gpuAcceleration,Me=void 0===z||z,Ke=T.adaptive,gn=void 0===Ke||Ke,yr=T.roundOffsets,Nr=void 0===yr||yr,di={placement:Hn(ne.placement),variation:Eo(ne.placement),popper:ne.elements.popper,popperRect:ne.rects.popper,gpuAcceleration:Me};null!=ne.modifiersData.popperOffsets&&(ne.styles.popper=Object.assign({},ne.styles.popper,te(Object.assign({},di,{offsets:ne.modifiersData.popperOffsets,position:ne.options.strategy,adaptive:gn,roundOffsets:Nr})))),null!=ne.modifiersData.arrow&&(ne.styles.arrow=Object.assign({},ne.styles.arrow,te(Object.assign({},di,{offsets:ne.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:Nr})))),ne.attributes.popper=Object.assign({},ne.attributes.popper,{"data-popper-placement":ne.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function hn(I){var ne=I.state;Object.keys(ne.elements).forEach(function(T){var z=ne.styles[T]||{},Me=ne.attributes[T]||{},Ke=ne.elements[T];!Fe(Ke)||!xi(Ke)||(Object.assign(Ke.style,z),Object.keys(Me).forEach(function(gn){var yr=Me[gn];!1===yr?Ke.removeAttribute(gn):Ke.setAttribute(gn,!0===yr?"":yr)}))})},effect:function ii(I){var ne=I.state,T={popper:{position:ne.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(ne.elements.popper.style,T.popper),ne.styles=T,ne.elements.arrow&&Object.assign(ne.elements.arrow.style,T.arrow),function(){Object.keys(ne.elements).forEach(function(z){var Me=ne.elements[z],Ke=ne.attributes[z]||{},yr=Object.keys(ne.styles.hasOwnProperty(z)?ne.styles[z]:T[z]).reduce(function(Nr,vi){return Nr[vi]="",Nr},{});!Fe(Me)||!xi(Me)||(Object.assign(Me.style,yr),Object.keys(Ke).forEach(function(Nr){Me.removeAttribute(Nr)}))})}},requires:["computeStyles"]}]});const Ks={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function Fs(I){var ne=I.state,z=I.name,Me=I.options.offset,Ke=void 0===Me?[0,0]:Me,gn=ui.reduce(function(di,ts){return di[ts]=function Vo(I,ne,T){var z=Hn(I),Me=[no,ei].indexOf(z)>=0?-1:1,Ke="function"==typeof T?T(Object.assign({},ne,{placement:I})):T,gn=Ke[0],yr=Ke[1];return gn=gn||0,yr=(yr||0)*Me,[no,fi].indexOf(z)>=0?{x:yr,y:gn}:{x:gn,y:yr}}(ts,ne.rects,Ke),di},{}),yr=gn[ne.placement],vi=yr.y;null!=ne.modifiersData.popperOffsets&&(ne.modifiersData.popperOffsets.x+=yr.x,ne.modifiersData.popperOffsets.y+=vi),ne.modifiersData[z]=gn}};function Fl(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"button",1),r.NdJ("click",function(){return r.CHM(T),r.oxw().close()}),r.qZA()}}const Xu=["*"],Bl=["ngbDatepickerDayView",""],Ya=["month"],rt=["year"];function qt(I,ne){if(1&I&&(r.TgZ(0,"option",5),r._uU(1),r.qZA()),2&I){const T=ne.$implicit,z=r.oxw();r.Q6J("value",T),r.uIk("aria-label",z.i18n.getMonthFullName(T,null==z.date?null:z.date.year)),r.xp6(1),r.Oqu(z.i18n.getMonthShortName(T,null==z.date?null:z.date.year))}}function pt(I,ne){if(1&I&&(r.TgZ(0,"option",5),r._uU(1),r.qZA()),2&I){const T=ne.$implicit,z=r.oxw();r.Q6J("value",T),r.xp6(1),r.Oqu(z.i18n.getYearNumerals(T))}}function Kt(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"ngb-datepicker-navigation-select",7),r.NdJ("select",function(Me){return r.CHM(T),r.oxw().select.emit(Me)}),r.qZA()}if(2&I){const T=r.oxw();r.Q6J("date",T.date)("disabled",T.disabled)("months",T.selectBoxes.months)("years",T.selectBoxes.years)}}function Kn(I,ne){1&I&&r._UZ(0,"div",0)}function oi(I,ne){1&I&&r._UZ(0,"div",0)}function wi(I,ne){if(1&I&&(r.YNc(0,Kn,1,0,"div",9),r.TgZ(1,"div",10),r._uU(2),r.qZA(),r.YNc(3,oi,1,0,"div",9)),2&I){const T=ne.$implicit,z=ne.index,Me=r.oxw(2);r.Q6J("ngIf",z>0),r.xp6(2),r.hij(" ",Me.i18n.getMonthLabel(T.firstDate)," "),r.xp6(1),r.Q6J("ngIf",z!==Me.months.length-1)}}function as(I,ne){if(1&I&&r.YNc(0,wi,4,3,"ng-template",8),2&I){const T=r.oxw();r.Q6J("ngForOf",T.months)}}const Gs=["defaultDayTemplate"],Os=["content"];function ws(I,ne){if(1&I&&r._UZ(0,"div",7),2&I){const z=ne.currentMonth,Me=ne.selected,Ke=ne.disabled,gn=ne.focused;r.Q6J("date",ne.date)("currentMonth",z)("selected",Me)("disabled",Ke)("focused",gn)}}function Fo(I,ne){if(1&I&&(r.TgZ(0,"div",12),r._uU(1),r.qZA()),2&I){const T=r.oxw().$implicit,z=r.oxw(2);r.xp6(1),r.hij(" ",z.i18n.getMonthLabel(T.firstDate)," ")}}function Ka(I,ne){if(1&I&&(r.TgZ(0,"div",9),r.YNc(1,Fo,2,1,"div",10),r._UZ(2,"ngb-datepicker-month",11),r.qZA()),2&I){const T=ne.$implicit,z=r.oxw(2);r.xp6(1),r.Q6J("ngIf","none"===z.navigation||z.displayMonths>1&&"select"===z.navigation),r.xp6(1),r.Q6J("month",T.firstDate)}}function al(I,ne){if(1&I&&r.YNc(0,Ka,3,2,"div",8),2&I){const T=r.oxw();r.Q6J("ngForOf",T.model.months)}}function Bs(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"ngb-datepicker-navigation",13),r.NdJ("navigate",function(Me){return r.CHM(T),r.oxw().onNavigateEvent(Me)})("select",function(Me){return r.CHM(T),r.oxw().onNavigateDateSelect(Me)}),r.qZA()}if(2&I){const T=r.oxw();r.Q6J("date",T.model.firstDate)("months",T.model.months)("disabled",T.model.disabled)("showSelect","select"===T.model.navigation)("prevDisabled",T.model.prevDisabled)("nextDisabled",T.model.nextDisabled)("selectBoxes",T.model.selectBoxes)}}function mt(I,ne){}function ot(I,ne){}function je(I,ne){if(1&I&&(r.TgZ(0,"div",5),r._uU(1),r.qZA()),2&I){const T=r.oxw(2);r.xp6(1),r.Oqu(T.i18n.getWeekLabel())}}function Xt(I,ne){if(1&I&&(r.TgZ(0,"div",6),r._uU(1),r.qZA()),2&I){const T=ne.$implicit;r.xp6(1),r.Oqu(T)}}function Si(I,ne){if(1&I&&(r.TgZ(0,"div",2),r.YNc(1,je,2,1,"div",3),r.YNc(2,Xt,2,1,"div",4),r.qZA()),2&I){const T=r.oxw();r.xp6(1),r.Q6J("ngIf",T.datepicker.showWeekNumbers),r.xp6(1),r.Q6J("ngForOf",T.viewModel.weekdays)}}function Jo(I,ne){if(1&I&&(r.TgZ(0,"div",11),r._uU(1),r.qZA()),2&I){const T=r.oxw(2).$implicit,z=r.oxw();r.xp6(1),r.Oqu(z.i18n.getWeekNumerals(T.number))}}function ja(I,ne){}function El(I,ne){if(1&I&&r.YNc(0,ja,0,0,"ng-template",14),2&I){const T=r.oxw().$implicit,z=r.oxw(3);r.Q6J("ngTemplateOutlet",z.datepicker.dayTemplate)("ngTemplateOutletContext",T.context)}}function Ku(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"div",12),r.NdJ("click",function(Me){const gn=r.CHM(T).$implicit;return r.oxw(3).doSelect(gn),Me.preventDefault()}),r.YNc(1,El,1,2,"ng-template",13),r.qZA()}if(2&I){const T=ne.$implicit;r.ekj("disabled",T.context.disabled)("hidden",T.hidden)("ngb-dp-today",T.context.today),r.Q6J("tabindex",T.tabindex),r.uIk("aria-label",T.ariaLabel),r.xp6(1),r.Q6J("ngIf",!T.hidden)}}function Nc(I,ne){if(1&I&&(r.TgZ(0,"div",8),r.YNc(1,Jo,2,1,"div",9),r.YNc(2,Ku,2,9,"div",10),r.qZA()),2&I){const T=r.oxw().$implicit,z=r.oxw();r.xp6(1),r.Q6J("ngIf",z.datepicker.showWeekNumbers),r.xp6(1),r.Q6J("ngForOf",T.days)}}function hd(I,ne){1&I&&r.YNc(0,Nc,3,2,"div",7),2&I&&r.Q6J("ngIf",!ne.$implicit.collapsed)}const Yi=["dialog"],aa=["ngbNavOutlet",""];function Fa(I,ne){}const Es=function(I){return{$implicit:I}};function qu(I,ne){if(1&I&&(r.TgZ(0,"div",2),r.YNc(1,Fa,0,0,"ng-template",3),r.qZA()),2&I){const T=r.oxw().$implicit,z=r.oxw();r.Q6J("item",T)("nav",z.nav)("role",z.paneRole),r.xp6(1),r.Q6J("ngTemplateOutlet",(null==T.contentTpl?null:T.contentTpl.templateRef)||null)("ngTemplateOutletContext",r.VKq(5,Es,T.active||z.isPanelTransitioning(T)))}}function Sl(I,ne){if(1&I&&r.YNc(0,qu,2,7,"div",1),2&I){const T=ne.$implicit,z=r.oxw();r.Q6J("ngIf",T.isPanelInDom()||z.isPanelTransitioning(T))}}function Ci(I,ne){if(1&I&&r._uU(0),2&I){const T=r.oxw(2);r.Oqu(T.title)}}function Vi(I,ne){}function Pr(I,ne){if(1&I&&(r.TgZ(0,"h3",3),r.YNc(1,Ci,1,1,"ng-template",null,4,r.W1O),r.YNc(3,Vi,0,0,"ng-template",5),r.qZA()),2&I){const T=r.MAs(2),z=r.oxw();r.xp6(3),r.Q6J("ngTemplateOutlet",z.isTitleTemplate()?z.title:T)("ngTemplateOutletContext",z.context)}}function Yn(I,ne){if(1&I&&(r.TgZ(0,"span"),r.SDv(1,2),r.ALo(2,"percent"),r.qZA()),2&I){const T=r.oxw();r.xp6(2),r.pQV(r.lcZ(2,1,T.getValue()/T.max)),r.QtT(1)}}function $s(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(T);const Me=r.oxw();return Me.changeHour(Me.hourStep)}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,14),r.qZA()()}if(2&I){const T=r.oxw();r.ekj("btn-sm",T.isSmallSize)("btn-lg",T.isLargeSize)("disabled",T.disabled),r.Q6J("disabled",T.disabled)}}function ls(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(T);const Me=r.oxw();return Me.changeHour(-Me.hourStep)}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,16),r.qZA()()}if(2&I){const T=r.oxw();r.ekj("btn-sm",T.isSmallSize)("btn-lg",T.isLargeSize)("disabled",T.disabled),r.Q6J("disabled",T.disabled)}}function _l(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(T);const Me=r.oxw();return Me.changeMinute(Me.minuteStep)}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,17),r.qZA()()}if(2&I){const T=r.oxw();r.ekj("btn-sm",T.isSmallSize)("btn-lg",T.isLargeSize)("disabled",T.disabled),r.Q6J("disabled",T.disabled)}}function Us(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(T);const Me=r.oxw();return Me.changeMinute(-Me.minuteStep)}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,18),r.qZA()()}if(2&I){const T=r.oxw();r.ekj("btn-sm",T.isSmallSize)("btn-lg",T.isLargeSize)("disabled",T.disabled),r.Q6J("disabled",T.disabled)}}function zc(I,ne){1&I&&(r.TgZ(0,"div",5),r._uU(1,":"),r.qZA())}function Ic(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(T);const Me=r.oxw(2);return Me.changeSecond(Me.secondStep)}),r._UZ(1,"span",12),r.TgZ(2,"span",13),r.SDv(3,21),r.qZA()()}if(2&I){const T=r.oxw(2);r.ekj("btn-sm",T.isSmallSize)("btn-lg",T.isLargeSize)("disabled",T.disabled),r.Q6J("disabled",T.disabled)}}function Pu(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"button",11),r.NdJ("click",function(){r.CHM(T);const Me=r.oxw(2);return Me.changeSecond(-Me.secondStep)}),r._UZ(1,"span",15),r.TgZ(2,"span",13),r.SDv(3,22),r.qZA()()}if(2&I){const T=r.oxw(2);r.ekj("btn-sm",T.isSmallSize)("btn-lg",T.isLargeSize)("disabled",T.disabled),r.Q6J("disabled",T.disabled)}}function Su(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"div",19),r.YNc(1,Ic,4,7,"button",3),r.TgZ(2,"input",20),r.NdJ("change",function(Me){return r.CHM(T),r.oxw().updateSecond(Me.target.value)})("blur",function(){return r.CHM(T),r.oxw().handleBlur()})("input",function(Me){return r.CHM(T),r.oxw().formatInput(Me.target)})("keydown.ArrowUp",function(Me){r.CHM(T);const Ke=r.oxw();return Ke.changeSecond(Ke.secondStep),Me.preventDefault()})("keydown.ArrowDown",function(Me){r.CHM(T);const Ke=r.oxw();return Ke.changeSecond(-Ke.secondStep),Me.preventDefault()}),r.qZA(),r.YNc(3,Pu,4,7,"button",3),r.qZA()}if(2&I){const T=r.oxw();r.xp6(1),r.Q6J("ngIf",T.spinners),r.xp6(1),r.ekj("form-control-sm",T.isSmallSize)("form-control-lg",T.isLargeSize),r.Q6J("value",T.formatMinSec(null==T.model?null:T.model.second))("readOnly",T.readonlyInputs)("disabled",T.disabled),r.xp6(1),r.Q6J("ngIf",T.spinners)}}function Zd(I,ne){1&I&&r._UZ(0,"div",5)}function _d(I,ne){if(1&I&&(r.ynx(0),r.SDv(1,27),r.BQk()),2&I){const T=r.oxw(2);r.xp6(1),r.pQV(T.i18n.getAfternoonPeriod()),r.QtT(1)}}function md(I,ne){if(1&I&&r.SDv(0,28),2&I){const T=r.oxw(2);r.pQV(T.i18n.getMorningPeriod()),r.QtT(0)}}function Hc(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"div",23)(1,"button",24),r.NdJ("click",function(){return r.CHM(T),r.oxw().toggleMeridian()}),r.YNc(2,_d,2,1,"ng-container",25),r.YNc(3,md,1,1,"ng-template",null,26,r.W1O),r.qZA()()}if(2&I){const T=r.MAs(4),z=r.oxw();r.xp6(1),r.ekj("btn-sm",z.isSmallSize)("btn-lg",z.isLargeSize)("disabled",z.disabled),r.Q6J("disabled",z.disabled),r.xp6(1),r.Q6J("ngIf",z.model&&z.model.hour>=12)("ngIfElse",T)}}function Mo(I,ne){if(1&I&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&I){const T=r.oxw().$implicit,z=r.oxw();r.Tol(z.highlightClass),r.xp6(1),r.Oqu(T)}}function wo(I,ne){if(1&I&&r._uU(0),2&I){const T=r.oxw().$implicit;r.Oqu(T)}}function Ta(I,ne){if(1&I&&(r.YNc(0,Mo,2,3,"span",1),r.YNc(1,wo,1,1,"ng-template",null,2,r.W1O)),2&I){const T=ne.odd,z=r.MAs(2);r.Q6J("ngIf",T)("ngIfElse",z)}}function Tl(I,ne){if(1&I&&r._UZ(0,"ngb-highlight",2),2&I){const z=ne.term;r.Q6J("result",(0,ne.formatter)(ne.result))("term",z)}}function ou(I,ne){}const Tu=function(I,ne,T){return{result:I,term:ne,formatter:T}};function gc(I,ne){if(1&I){const T=r.EpF();r.TgZ(0,"button",3),r.NdJ("mouseenter",function(){const Ke=r.CHM(T).index;return r.oxw().markActive(Ke)})("click",function(){const Ke=r.CHM(T).$implicit;return r.oxw().select(Ke)}),r.YNc(1,ou,0,0,"ng-template",4),r.qZA()}if(2&I){const T=ne.$implicit,z=ne.index,Me=r.oxw(),Ke=r.MAs(1);r.ekj("active",z===Me.activeIdx),r.Q6J("id",Me.id+"-"+z),r.xp6(1),r.Q6J("ngTemplateOutlet",Me.resultTemplate||Ke)("ngTemplateOutletContext",r.kEZ(5,Tu,T,Me.term,Me.formatter))}}function En(I){return parseInt(`${I}`,10)}function pa(I){return null!=I?`${I}`:""}function Ze(I){return"string"==typeof I}function Ae(I){return!isNaN(En(I))}function ge(I){return"number"==typeof I&&isFinite(I)&&Math.floor(I)===I}function ht(I){return null!=I}function sn(I){return Ae(I)?`0${I}`.slice(-2):""}function gr(I,ne){return I&&I.className&&I.className.split&&I.className.split(/\s+/).indexOf(ne)>=0}function Lo(I){return(I||document.body).getBoundingClientRect()}function ms(I){return I.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}const Ma={animation:!0,transitionTimerDelayMs:5},Nu=()=>{},{transitionTimerDelayMs:cc}=Ma,ka=new Map,rl=(I,ne,T,z)=>{let Me=z.context||{};const Ke=ka.get(ne);if(Ke)switch(z.runningTransition){case"continue":return u.E;case"stop":I.run(()=>Ke.transition$.complete()),Me=Object.assign(Ke.context,Me),ka.delete(ne)}const gn=T(ne,z.animation,Me)||Nu;if(!z.animation||"none"===window.getComputedStyle(ne).transitionProperty)return I.run(()=>gn()),(0,e.of)(void 0).pipe(function Ca(I){return ne=>new f.y(T=>ne.subscribe({next:gn=>I.run(()=>T.next(gn)),error:gn=>I.run(()=>T.error(gn)),complete:()=>I.run(()=>T.complete())}))}(I));const yr=new p.xQ,Nr=new p.xQ,vi=yr.pipe(function Pe(...I){return ne=>(0,He.z)(ne,(0,e.of)(...I))}(!0));ka.set(ne,{transition$:yr,complete:()=>{Nr.next(),Nr.complete()},context:Me});const di=function ha(I){const{transitionDelay:ne,transitionDuration:T}=window.getComputedStyle(I);return 1e3*(parseFloat(ne)+parseFloat(T))}(ne);return I.runOutsideAngular(()=>{const ts=(0,g.R)(ne,"transitionend").pipe((0,Ge.R)(vi),(0,Oe.h)(({target:Ss})=>Ss===ne));W((0,S.H)(di+cc).pipe((0,Ge.R)(vi)),ts,Nr).pipe((0,Ge.R)(vi)).subscribe(()=>{ka.delete(ne),I.run(()=>{gn(),yr.next(),yr.complete()})})}),yr.asObservable()},ju=(I,ne,T)=>{let{direction:z,maxHeight:Me}=T;const{classList:Ke}=I;function gn(){Ke.add("collapse"),"show"===z?Ke.add("show"):Ke.remove("show")}if(ne)return Me||(Me=function yc(I){if("undefined"==typeof navigator)return"0px";const{classList:ne}=I,T=ne.contains("show");T||ne.add("show"),I.style.height="";const z=I.getBoundingClientRect().height+"px";return T||ne.remove("show"),z}(I),T.maxHeight=Me,I.style.height="show"!==z?Me:"0px",Ke.remove("collapse"),Ke.remove("collapsing"),Ke.remove("show"),Lo(I),Ke.add("collapsing")),I.style.height="show"===z?Me:"0px",()=>{gn(),Ke.remove("collapsing"),I.style.height=""};gn()};let Ul=(()=>{class I{constructor(){this.animation=Ma.animation}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})();const Al=({classList:I})=>{I.remove("show")};let kl=(()=>{class I{constructor(T){this._ngbConfig=T,this.dismissible=!0,this.type="warning"}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(T){this._animation=T}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(Ul))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Gu=(()=>{class I{constructor(T,z,Me,Ke){this._renderer=z,this._element=Me,this._zone=Ke,this.closed=new r.vpe,this.dismissible=T.dismissible,this.type=T.type,this.animation=T.animation}close(){const T=rl(this._zone,this._element.nativeElement,Al,{animation:this.animation,runningTransition:"continue"});return T.subscribe(()=>this.closed.emit()),T}ngOnChanges(T){const z=T.type;z&&!z.firstChange&&(this._renderer.removeClass(this._element.nativeElement,`alert-${z.previousValue}`),this._renderer.addClass(this._element.nativeElement,`alert-${z.currentValue}`))}ngOnInit(){this._renderer.addClass(this._element.nativeElement,`alert-${this.type}`)}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(kl),r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-alert"]],hostAttrs:["role","alert",1,"alert","show"],hostVars:4,hostBindings:function(T,z){2&T&&r.ekj("fade",z.animation)("alert-dismissible",z.dismissible)},inputs:{animation:"animation",dismissible:"dismissible",type:"type"},outputs:{closed:"closed"},exportAs:["ngbAlert"],features:[r.TTD],ngContentSelectors:Xu,decls:2,vars:1,consts:function(){let ne;return ne="Close",[["type","button","class","btn-close","aria-label",ne,3,"click",4,"ngIf"],["type","button","aria-label",ne,1,"btn-close",3,"click"]]},template:function(T,z){1&T&&(r.F$t(),r.Hsn(0),r.YNc(1,Fl,1,0,"button",0)),2&T&&(r.xp6(1),r.Q6J("ngIf",z.dismissible))},directives:[a.O5],styles:["ngb-alert{display:block}\n"],encapsulation:2,changeDetection:0}),I})(),ul=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[[a.ez]]}),I})(),Fu=(()=>{class I{constructor(T){this._ngbConfig=T}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(T){this._animation=T}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(Ul))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),od=(()=>{class I{constructor(T,z,Me){this._element=T,this._zone=Me,this.collapsed=!1,this.ngbCollapseChange=new r.vpe,this.shown=new r.vpe,this.hidden=new r.vpe,this.animation=z.animation}ngOnInit(){this._runTransition(this.collapsed,!1)}ngOnChanges({collapsed:T}){T.firstChange||this._runTransitionWithEvents(this.collapsed,this.animation)}toggle(T=this.collapsed){this.collapsed=!T,this.ngbCollapseChange.next(this.collapsed),this._runTransitionWithEvents(this.collapsed,this.animation)}_runTransition(T,z){return rl(this._zone,this._element.nativeElement,ju,{animation:z,runningTransition:"stop",context:{direction:T?"hide":"show"}})}_runTransitionWithEvents(T,z){this._runTransition(T,z).subscribe(()=>{T?this.hidden.emit():this.shown.emit()})}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.SBq),r.Y36(Fu),r.Y36(r.R0b))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbCollapse",""]],inputs:{animation:"animation",collapsed:["ngbCollapse","collapsed"]},outputs:{ngbCollapseChange:"ngbCollapseChange",shown:"shown",hidden:"hidden"},exportAs:["ngbCollapse"],features:[r.TTD]}),I})(),nc=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({}),I})();class Aa{constructor(ne,T,z){this.year=ge(ne)?ne:null,this.month=ge(T)?T:null,this.day=ge(z)?z:null}static from(ne){return ne instanceof Aa?ne:ne?new Aa(ne.year,ne.month,ne.day):null}equals(ne){return null!=ne&&this.year===ne.year&&this.month===ne.month&&this.day===ne.day}before(ne){return!!ne&&(this.year===ne.year?this.month===ne.month?this.day!==ne.day&&this.day<ne.day:this.month<ne.month:this.year<ne.year)}after(ne){return!!ne&&(this.year===ne.year?this.month===ne.month?this.day!==ne.day&&this.day>ne.day:this.month>ne.month:this.year>ne.year)}}function Wc(I,ne){return!function lp(I,ne){return!I&&!ne||!!I&&!!ne&&I.equals(ne)}(I,ne)}function sd(I,ne){return!(!I&&!ne||I&&ne&&I.year===ne.year&&I.month===ne.month)}function vo(I,ne,T){return I&&ne&&I.before(ne)?ne:I&&T&&I.after(T)?T:I||null}function pu(I,ne){const{minDate:T,maxDate:z,disabled:Me,markDisabled:Ke}=ne;return!(null==I||Me||Ke&&Ke(I,{year:I.year,month:I.month})||T&&I.before(T)||z&&I.after(z))}function Ql(I){return new Aa(I.getFullYear(),I.getMonth()+1,I.getDate())}function Sc(I){const ne=new Date(I.year,I.month-1,I.day,12);return isNaN(ne.getTime())||ne.setFullYear(I.year),ne}let Zu=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:function(){return function Tc(){return new hu}()},providedIn:"root"}),I})(),hu=(()=>{class I extends Zu{getDaysPerWeek(){return 7}getMonths(){return[1,2,3,4,5,6,7,8,9,10,11,12]}getWeeksPerMonth(){return 6}getNext(T,z="d",Me=1){let Ke=Sc(T),gn=!0,yr=Ke.getMonth();switch(z){case"y":Ke.setFullYear(Ke.getFullYear()+Me);break;case"m":yr+=Me,Ke.setMonth(yr),yr%=12,yr<0&&(yr+=12);break;case"d":Ke.setDate(Ke.getDate()+Me),gn=!1;break;default:return T}return gn&&Ke.getMonth()!==yr&&Ke.setDate(0),Ql(Ke)}getPrev(T,z="d",Me=1){return this.getNext(T,z,-Me)}getWeekday(T){let Me=Sc(T).getDay();return 0===Me?7:Me}getWeekNumber(T,z){7===z&&(z=0);const gn=Sc(T[(11-z)%7]);gn.setDate(gn.getDate()+4-(gn.getDay()||7));const yr=gn.getTime();return gn.setMonth(0),gn.setDate(1),Math.floor(Math.round((yr-gn.getTime())/864e5)/7)+1}getToday(){return Ql(new Date)}isValid(T){if(!(T&&ge(T.year)&&ge(T.month)&&ge(T.day)&&0!==T.year))return!1;const z=Sc(T);return!isNaN(z.getTime())&&z.getFullYear()===T.year&&z.getMonth()+1===T.month&&z.getDate()===T.day}}return I.\u0275fac=function(){let ne;return function(z){return(ne||(ne=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),pc=(()=>{class I{getMonthLabel(T){return`${this.getMonthFullName(T.month,T.year)} ${this.getYearNumerals(T.year)}`}getDayNumerals(T){return`${T.day}`}getWeekNumerals(T){return`${T}`}getYearNumerals(T){return`${T}`}getWeekLabel(){return""}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:function(T){let z=null;return z=T?new T:function Uc(I){return new Jd(I)}(r.LFG(r.soG)),z},providedIn:"root"}),I})(),Jd=(()=>{class I extends pc{constructor(T){super(),this._locale=T,this._monthsShort=(0,a.UT)(T,a.x.Standalone,a.Tn.Abbreviated),this._monthsFull=(0,a.UT)(T,a.x.Standalone,a.Tn.Wide)}getWeekdayLabel(T,z){const Me=(0,a.Mn)(this._locale,a.x.Standalone,void 0===z?a.Tn.Short:z);return Me.map((gn,yr)=>Me[(yr+1)%7])[T-1]||""}getMonthShortName(T){return this._monthsShort[T-1]||""}getMonthFullName(T){return this._monthsFull[T-1]||""}getDayAriaLabel(T){const z=new Date(T.year,T.month-1,T.day);return(0,a.p6)(z,"fullDate",this._locale)}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(r.soG))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),Jc=(()=>{class I{constructor(T,z){this._calendar=T,this._i18n=z,this._VALIDATORS={dayTemplateData:Me=>{if(this._state.dayTemplateData!==Me)return{dayTemplateData:Me}},displayMonths:Me=>{if(ge(Me=En(Me))&&Me>0&&this._state.displayMonths!==Me)return{displayMonths:Me}},disabled:Me=>{if(this._state.disabled!==Me)return{disabled:Me}},firstDayOfWeek:Me=>{if(ge(Me=En(Me))&&Me>=0&&this._state.firstDayOfWeek!==Me)return{firstDayOfWeek:Me}},focusVisible:Me=>{if(this._state.focusVisible!==Me&&!this._state.disabled)return{focusVisible:Me}},markDisabled:Me=>{if(this._state.markDisabled!==Me)return{markDisabled:Me}},maxDate:Me=>{const Ke=this.toValidDate(Me,null);if(Wc(this._state.maxDate,Ke))return{maxDate:Ke}},minDate:Me=>{const Ke=this.toValidDate(Me,null);if(Wc(this._state.minDate,Ke))return{minDate:Ke}},navigation:Me=>{if(this._state.navigation!==Me)return{navigation:Me}},outsideDays:Me=>{if(this._state.outsideDays!==Me)return{outsideDays:Me}},weekdays:Me=>{const Ke=!0===Me||!1===Me?a.Tn.Short:Me,gn=!0!==Me&&!1!==Me||Me;if(this._state.weekdayWidth!==Ke||this._state.weekdaysVisible!==gn)return{weekdayWidth:Ke,weekdaysVisible:gn}}},this._model$=new p.xQ,this._dateSelect$=new p.xQ,this._state={dayTemplateData:null,markDisabled:null,maxDate:null,minDate:null,disabled:!1,displayMonths:1,firstDate:null,firstDayOfWeek:1,lastDate:null,focusDate:null,focusVisible:!1,months:[],navigation:"select",outsideDays:"visible",prevDisabled:!1,nextDisabled:!1,selectedDate:null,selectBoxes:{years:[],months:[]},weekdayWidth:a.Tn.Short,weekdaysVisible:!0}}get model$(){return this._model$.pipe((0,Oe.h)(T=>T.months.length>0))}get dateSelect$(){return this._dateSelect$.pipe((0,Oe.h)(T=>null!==T))}set(T){let z=Object.keys(T).map(Me=>this._VALIDATORS[Me](T[Me])).reduce((Me,Ke)=>Object.assign(Object.assign({},Me),Ke),{});Object.keys(z).length>0&&this._nextState(z)}focus(T){const z=this.toValidDate(T,null);null!=z&&!this._state.disabled&&Wc(this._state.focusDate,z)&&this._nextState({focusDate:T})}focusSelect(){pu(this._state.focusDate,this._state)&&this.select(this._state.focusDate,{emitEvent:!0})}open(T){const z=this.toValidDate(T,this._calendar.getToday());null!=z&&!this._state.disabled&&(!this._state.firstDate||sd(this._state.firstDate,z))&&this._nextState({firstDate:z})}select(T,z={}){const Me=this.toValidDate(T,null);null!=Me&&!this._state.disabled&&(Wc(this._state.selectedDate,Me)&&this._nextState({selectedDate:Me}),z.emitEvent&&pu(Me,this._state)&&this._dateSelect$.next(Me))}toValidDate(T,z){const Me=Aa.from(T);return void 0===z&&(z=this._calendar.getToday()),this._calendar.isValid(Me)?Me:z}getMonth(T){for(let z of this._state.months)if(T.month===z.number&&T.year===z.year)return z;throw new Error(`month ${T.month} of year ${T.year} not found`)}_nextState(T){const z=this._updateState(T);this._patchContexts(z),this._state=z,this._model$.next(this._state)}_patchContexts(T){const{months:z,displayMonths:Me,selectedDate:Ke,focusDate:gn,focusVisible:yr,disabled:Nr,outsideDays:vi}=T;T.months.forEach(di=>{di.weeks.forEach(ts=>{ts.days.forEach(Do=>{gn&&(Do.context.focused=gn.equals(Do.date)&&yr),Do.tabindex=!Nr&&gn&&Do.date.equals(gn)&&gn.month===di.number?0:-1,!0===Nr&&(Do.context.disabled=!0),void 0!==Ke&&(Do.context.selected=null!==Ke&&Ke.equals(Do.date)),di.number!==Do.date.month&&(Do.hidden="hidden"===vi||"collapsed"===vi||Me>1&&Do.date.after(z[0].firstDate)&&Do.date.before(z[Me-1].lastDate))})})})}_updateState(T){const z=Object.assign({},this._state,T);let Me=z.firstDate;if(("minDate"in T||"maxDate"in T)&&(function $d(I,ne){if(ne&&I&&ne.before(I))throw new Error(`'maxDate' ${ne} should be greater than 'minDate' ${I}`)}(z.minDate,z.maxDate),z.focusDate=vo(z.focusDate,z.minDate,z.maxDate),z.firstDate=vo(z.firstDate,z.minDate,z.maxDate),Me=z.focusDate),"disabled"in T&&(z.focusVisible=!1),"selectedDate"in T&&0===this._state.months.length&&(Me=z.selectedDate),"focusVisible"in T||"focusDate"in T&&(z.focusDate=vo(z.focusDate,z.minDate,z.maxDate),Me=z.focusDate,0!==z.months.length&&z.focusDate&&!z.focusDate.before(z.firstDate)&&!z.focusDate.after(z.lastDate)))return z;if("firstDate"in T&&(z.firstDate=vo(z.firstDate,z.minDate,z.maxDate),Me=z.firstDate),Me){const gn=function Lu(I,ne,T,z,Me){const{displayMonths:Ke,months:gn}=T,yr=gn.splice(0,gn.length);return Array.from({length:Ke},(vi,di)=>{const ts=Object.assign(I.getNext(ne,"m",di),{day:1});if(gn[di]=null,!Me){const Do=yr.findIndex(Ss=>Ss.firstDate.equals(ts));-1!==Do&&(gn[di]=yr.splice(Do,1)[0])}return ts}).forEach((vi,di)=>{null===gn[di]&&(gn[di]=function bc(I,ne,T,z,Me={}){const{dayTemplateData:Ke,minDate:gn,maxDate:yr,firstDayOfWeek:Nr,markDisabled:vi,outsideDays:di,weekdayWidth:ts,weekdaysVisible:Do}=T,Ss=I.getToday();Me.firstDate=null,Me.lastDate=null,Me.number=ne.month,Me.year=ne.year,Me.weeks=Me.weeks||[],Me.weekdays=Me.weekdays||[],ne=function rc(I,ne,T){const z=I.getDaysPerWeek(),Me=new Aa(ne.year,ne.month,1),Ke=I.getWeekday(Me)%z;return I.getPrev(Me,"d",(z+Ke-T)%z)}(I,ne,Nr),Do||(Me.weekdays.length=0);for(let jo=0;jo<I.getWeeksPerMonth();jo++){let ia=Me.weeks[jo];ia||(ia=Me.weeks[jo]={number:0,days:[],collapsed:!0});const y=ia.days;for(let D=0;D<I.getDaysPerWeek();D++){0===jo&&Do&&(Me.weekdays[D]=z.getWeekdayLabel(I.getWeekday(ne),ts));const Y=new Aa(ne.year,ne.month,ne.day),Ee=I.getNext(Y),ze=z.getDayAriaLabel(Y);let At=!!(gn&&Y.before(gn)||yr&&Y.after(yr));!At&&vi&&(At=vi(Y,{month:Me.number,year:Me.year}));let tn=Y.equals(Ss),Tn=Ke?Ke(Y,{month:Me.number,year:Me.year}):void 0;null===Me.firstDate&&Y.month===Me.number&&(Me.firstDate=Y),Y.month===Me.number&&Ee.month!==Me.number&&(Me.lastDate=Y);let ar=y[D];ar||(ar=y[D]={}),ar.date=Y,ar.context=Object.assign(ar.context||{},{$implicit:Y,date:Y,data:Tn,currentMonth:Me.number,currentYear:Me.year,disabled:At,focused:!1,selected:!1,today:tn}),ar.tabindex=-1,ar.ariaLabel=ze,ar.hidden=!1,ne=Ee}ia.number=I.getWeekNumber(y.map(D=>D.date),Nr),ia.collapsed="collapsed"===di&&y[0].date.month!==Me.number&&y[y.length-1].date.month!==Me.number}return Me}(I,vi,T,z,yr.shift()||{}))}),gn}(this._calendar,Me,z,this._i18n,"dayTemplateData"in T||"firstDayOfWeek"in T||"markDisabled"in T||"minDate"in T||"maxDate"in T||"disabled"in T||"outsideDays"in T||"weekdaysVisible"in T);z.months=gn,z.firstDate=gn[0].firstDate,z.lastDate=gn[gn.length-1].lastDate,"selectedDate"in T&&!pu(z.selectedDate,z)&&(z.selectedDate=null),"firstDate"in T&&(!z.focusDate||z.focusDate.before(z.firstDate)||z.focusDate.after(z.lastDate))&&(z.focusDate=Me);const yr=!this._state.firstDate||this._state.firstDate.year!==z.firstDate.year,Nr=!this._state.firstDate||this._state.firstDate.month!==z.firstDate.month;"select"===z.navigation?(("minDate"in T||"maxDate"in T||0===z.selectBoxes.years.length||yr)&&(z.selectBoxes.years=function Ac(I,ne,T){if(!I)return[];const z=ne?Math.max(ne.year,I.year-500):I.year-10,Ke=(T?Math.min(T.year,I.year+500):I.year+10)-z+1,gn=Array(Ke);for(let yr=0;yr<Ke;yr++)gn[yr]=z+yr;return gn}(z.firstDate,z.minDate,z.maxDate)),("minDate"in T||"maxDate"in T||0===z.selectBoxes.months.length||yr)&&(z.selectBoxes.months=function $l(I,ne,T,z){if(!ne)return[];let Me=I.getMonths(ne.year);if(T&&ne.year===T.year){const Ke=Me.findIndex(gn=>gn===T.month);Me=Me.slice(Ke)}if(z&&ne.year===z.year){const Ke=Me.findIndex(gn=>gn===z.month);Me=Me.slice(0,Ke+1)}return Me}(this._calendar,z.firstDate,z.minDate,z.maxDate))):z.selectBoxes={years:[],months:[]},("arrows"===z.navigation||"select"===z.navigation)&&(Nr||yr||"minDate"in T||"maxDate"in T||"disabled"in T)&&(z.prevDisabled=z.disabled||function Dc(I,ne,T){const z=Object.assign(I.getPrev(ne,"m"),{day:1});return null!=T&&(z.year===T.year&&z.month<T.month||z.year<T.year&&1===T.month)}(this._calendar,z.firstDate,z.minDate),z.nextDisabled=z.disabled||function ga(I,ne,T){const z=Object.assign(I.getNext(ne,"m"),{day:1});return null!=T&&z.after(T)}(this._calendar,z.lastDate,z.maxDate))}return z}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(Zu),r.LFG(pc))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})();var Nl=(()=>{return(I=Nl||(Nl={}))[I.PREV=0]="PREV",I[I.NEXT=1]="NEXT",Nl;var I})();let Yc=(()=>{class I{constructor(){this.displayMonths=1,this.firstDayOfWeek=1,this.navigation="select",this.outsideDays="visible",this.showWeekNumbers=!1,this.weekdays=a.Tn.Short}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),h=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:function(){return function ic(){return new E}()},providedIn:"root"}),I})(),E=(()=>{class I extends h{fromModel(T){return T&&ge(T.year)&&ge(T.month)&&ge(T.day)?{year:T.year,month:T.month,day:T.day}:null}toModel(T){return T&&ge(T.year)&&ge(T.month)&&ge(T.day)?{year:T.year,month:T.month,day:T.day}:null}}return I.\u0275fac=function(){let ne;return function(z){return(ne||(ne=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),P=(()=>{class I{constructor(T){this.i18n=T}isMuted(){return!this.selected&&(this.date.month!==this.currentMonth||this.disabled)}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(pc))},I.\u0275cmp=r.Xpm({type:I,selectors:[["","ngbDatepickerDayView",""]],hostAttrs:[1,"btn-light"],hostVars:10,hostBindings:function(T,z){2&T&&r.ekj("bg-primary",z.selected)("text-white",z.selected)("text-muted",z.isMuted())("outside",z.isMuted())("active",z.focused)},inputs:{currentMonth:"currentMonth",date:"date",disabled:"disabled",focused:"focused",selected:"selected"},attrs:Bl,decls:1,vars:1,template:function(T,z){1&T&&r._uU(0),2&T&&r.Oqu(z.i18n.getDayNumerals(z.date))},styles:["[ngbDatepickerDayView]{text-align:center;width:2rem;height:2rem;line-height:2rem;border-radius:.25rem;background:transparent}[ngbDatepickerDayView].outside{opacity:.5}\n"],encapsulation:2,changeDetection:0}),I})(),L=(()=>{class I{constructor(T,z){this.i18n=T,this._renderer=z,this.select=new r.vpe,this._month=-1,this._year=-1}changeMonth(T){this.select.emit(new Aa(this.date.year,En(T),1))}changeYear(T){this.select.emit(new Aa(En(T),this.date.month,1))}ngAfterViewChecked(){this.date&&(this.date.month!==this._month&&(this._month=this.date.month,this._renderer.setProperty(this.monthSelect.nativeElement,"value",this._month)),this.date.year!==this._year&&(this._year=this.date.year,this._renderer.setProperty(this.yearSelect.nativeElement,"value",this._year)))}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(pc),r.Y36(r.Qsj))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-datepicker-navigation-select"]],viewQuery:function(T,z){if(1&T&&(r.Gf(Ya,7,r.SBq),r.Gf(rt,7,r.SBq)),2&T){let Me;r.iGM(Me=r.CRH())&&(z.monthSelect=Me.first),r.iGM(Me=r.CRH())&&(z.yearSelect=Me.first)}},inputs:{date:"date",disabled:"disabled",months:"months",years:"years"},outputs:{select:"select"},decls:6,vars:4,consts:function(){let ne,T,z,Me;return ne="Select month",T="Select month",z="Select year",Me="Select year",[["aria-label",ne,"title",T,1,"form-select",3,"disabled","change"],["month",""],[3,"value",4,"ngFor","ngForOf"],["aria-label",z,"title",Me,1,"form-select",3,"disabled","change"],["year",""],[3,"value"]]},template:function(T,z){1&T&&(r.TgZ(0,"select",0,1),r.NdJ("change",function(Ke){return z.changeMonth(Ke.target.value)}),r.YNc(2,qt,2,3,"option",2),r.qZA(),r.TgZ(3,"select",3,4),r.NdJ("change",function(Ke){return z.changeYear(Ke.target.value)}),r.YNc(5,pt,2,2,"option",2),r.qZA()),2&T&&(r.Q6J("disabled",z.disabled),r.xp6(2),r.Q6J("ngForOf",z.months),r.xp6(1),r.Q6J("disabled",z.disabled),r.xp6(2),r.Q6J("ngForOf",z.years))},directives:[a.sg,hr.YN,hr.Kr],styles:["ngb-datepicker-navigation-select>.form-select{flex:1 1 auto;padding:0 .5rem;font-size:.875rem;height:1.85rem}ngb-datepicker-navigation-select>.form-select:focus{z-index:1}ngb-datepicker-navigation-select>.form-select::-ms-value{background-color:transparent!important}\n"],encapsulation:2,changeDetection:0}),I})(),X=(()=>{class I{constructor(T){this.i18n=T,this.navigation=Nl,this.months=[],this.navigate=new r.vpe,this.select=new r.vpe}onClickPrev(T){T.currentTarget.focus(),this.navigate.emit(this.navigation.PREV)}onClickNext(T){T.currentTarget.focus(),this.navigate.emit(this.navigation.NEXT)}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(pc))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-datepicker-navigation"]],inputs:{date:"date",disabled:"disabled",months:"months",showSelect:"showSelect",prevDisabled:"prevDisabled",nextDisabled:"nextDisabled",selectBoxes:"selectBoxes"},outputs:{navigate:"navigate",select:"select"},decls:8,vars:4,consts:function(){let ne,T,z,Me;return ne="Previous month",T="Previous month",z="Next month",Me="Next month",[[1,"ngb-dp-arrow"],["type","button","aria-label",ne,"title",T,1,"btn","btn-link","ngb-dp-arrow-btn",3,"disabled","click"],[1,"ngb-dp-navigation-chevron"],["class","ngb-dp-navigation-select",3,"date","disabled","months","years","select",4,"ngIf"],[4,"ngIf"],[1,"ngb-dp-arrow","right"],["type","button","aria-label",z,"title",Me,1,"btn","btn-link","ngb-dp-arrow-btn",3,"disabled","click"],[1,"ngb-dp-navigation-select",3,"date","disabled","months","years","select"],["ngFor","",3,"ngForOf"],["class","ngb-dp-arrow",4,"ngIf"],[1,"ngb-dp-month-name"]]},template:function(T,z){1&T&&(r.TgZ(0,"div",0)(1,"button",1),r.NdJ("click",function(Ke){return z.onClickPrev(Ke)}),r._UZ(2,"span",2),r.qZA()(),r.YNc(3,Kt,1,4,"ngb-datepicker-navigation-select",3),r.YNc(4,as,1,1,null,4),r.TgZ(5,"div",5)(6,"button",6),r.NdJ("click",function(Ke){return z.onClickNext(Ke)}),r._UZ(7,"span",2),r.qZA()()),2&T&&(r.xp6(1),r.Q6J("disabled",z.prevDisabled),r.xp6(2),r.Q6J("ngIf",z.showSelect),r.xp6(1),r.Q6J("ngIf",!z.showSelect),r.xp6(2),r.Q6J("disabled",z.nextDisabled))},directives:[L,a.O5,a.sg],styles:["ngb-datepicker-navigation{display:flex;align-items:center}.ngb-dp-navigation-chevron{border-style:solid;border-width:.2em .2em 0 0;display:inline-block;width:.75em;height:.75em;margin-left:.25em;margin-right:.15em;transform:rotate(-135deg)}.ngb-dp-arrow{display:flex;flex:1 1 auto;padding-right:0;padding-left:0;margin:0;width:2rem;height:2rem}.ngb-dp-arrow.right{justify-content:flex-end}.ngb-dp-arrow.right .ngb-dp-navigation-chevron{transform:rotate(45deg);margin-left:.15em;margin-right:.25em}.ngb-dp-arrow-btn{padding:0 .25rem;margin:0 .5rem;border:none;background-color:transparent;z-index:1}.ngb-dp-arrow-btn:focus{outline-width:1px;outline-style:auto}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ngb-dp-arrow-btn:focus{outline-style:solid}}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center}.ngb-dp-navigation-select{display:flex;flex:1 1 9rem}\n"],encapsulation:2,changeDetection:0}),I})();var de=(()=>{return(I=de||(de={}))[I.Tab=9]="Tab",I[I.Enter=13]="Enter",I[I.Escape=27]="Escape",I[I.Space=32]="Space",I[I.PageUp=33]="PageUp",I[I.PageDown=34]="PageDown",I[I.End=35]="End",I[I.Home=36]="Home",I[I.ArrowLeft=37]="ArrowLeft",I[I.ArrowUp=38]="ArrowUp",I[I.ArrowRight=39]="ArrowRight",I[I.ArrowDown=40]="ArrowDown",de;var I})();let ve=(()=>{class I{processKey(T,z){const{state:Me,calendar:Ke}=z;switch(T.which){case de.PageUp:z.focusDate(Ke.getPrev(Me.focusedDate,T.shiftKey?"y":"m",1));break;case de.PageDown:z.focusDate(Ke.getNext(Me.focusedDate,T.shiftKey?"y":"m",1));break;case de.End:z.focusDate(T.shiftKey?Me.maxDate:Me.lastDate);break;case de.Home:z.focusDate(T.shiftKey?Me.minDate:Me.firstDate);break;case de.ArrowLeft:z.focusDate(Ke.getPrev(Me.focusedDate,"d",1));break;case de.ArrowUp:z.focusDate(Ke.getPrev(Me.focusedDate,"d",Ke.getDaysPerWeek()));break;case de.ArrowRight:z.focusDate(Ke.getNext(Me.focusedDate,"d",1));break;case de.ArrowDown:z.focusDate(Ke.getNext(Me.focusedDate,"d",Ke.getDaysPerWeek()));break;case de.Enter:case de.Space:z.focusSelect();break;default:return}T.preventDefault(),T.stopPropagation()}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Ye=(()=>{class I{constructor(T){this.templateRef=T}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.Rgc))},I.\u0275dir=r.lG2({type:I,selectors:[["ng-template","ngbDatepickerContent",""]]}),I})(),xe=(()=>{class I{constructor(T,z,Me,Ke,gn,yr,Nr,vi){this._service=T,this._calendar=z,this.i18n=Me,this._elementRef=yr,this._ngbDateAdapter=Nr,this._ngZone=vi,this._controlValue=null,this._destroyed$=new p.xQ,this._publicState={},this.navigate=new r.vpe,this.dateSelect=new r.vpe,this.onChange=di=>{},this.onTouched=()=>{},["dayTemplate","dayTemplateData","displayMonths","firstDayOfWeek","footerTemplate","markDisabled","minDate","maxDate","navigation","outsideDays","showWeekNumbers","startDate","weekdays"].forEach(di=>this[di]=Ke[di]),T.dateSelect$.pipe((0,Ge.R)(this._destroyed$)).subscribe(di=>{this.dateSelect.emit(di)}),T.model$.pipe((0,Ge.R)(this._destroyed$)).subscribe(di=>{const ts=di.firstDate,Do=this.model?this.model.firstDate:null;this._publicState={maxDate:di.maxDate,minDate:di.minDate,firstDate:di.firstDate,lastDate:di.lastDate,focusedDate:di.focusDate,months:di.months.map(D=>D.firstDate)};let Ss=!1;if(!ts.equals(Do)&&(this.navigate.emit({current:Do?{year:Do.year,month:Do.month}:null,next:{year:ts.year,month:ts.month},preventDefault:()=>Ss=!0}),Ss&&null!==Do))return void this._service.open(Do);const jo=di.selectedDate,ia=di.focusDate,y=this.model?this.model.focusDate:null;this.model=di,Wc(jo,this._controlValue)&&(this._controlValue=jo,this.onTouched(),this.onChange(this._ngbDateAdapter.toModel(jo))),Wc(ia,y)&&y&&di.focusVisible&&this.focus(),gn.markForCheck()})}get state(){return this._publicState}get calendar(){return this._calendar}focusDate(T){this._service.focus(Aa.from(T))}focusSelect(){this._service.focusSelect()}focus(){this._ngZone.onStable.asObservable().pipe((0,Tt.q)(1)).subscribe(()=>{const T=this._elementRef.nativeElement.querySelector('div.ngb-dp-day[tabindex="0"]');T&&T.focus()})}navigateTo(T){this._service.open(Aa.from(T?T.day?T:Object.assign(Object.assign({},T),{day:1}):null))}ngAfterViewInit(){this._ngZone.runOutsideAngular(()=>{const T=(0,g.R)(this._contentEl.nativeElement,"focusin"),z=(0,g.R)(this._contentEl.nativeElement,"focusout"),{nativeElement:Me}=this._elementRef;(0,Xe.T)(T,z).pipe((0,Oe.h)(({target:Ke,relatedTarget:gn})=>!(gr(Ke,"ngb-dp-day")&&gr(gn,"ngb-dp-day")&&Me.contains(Ke)&&Me.contains(gn))),(0,Ge.R)(this._destroyed$)).subscribe(({type:Ke})=>this._ngZone.run(()=>this._service.set({focusVisible:"focusin"===Ke})))})}ngOnDestroy(){this._destroyed$.next()}ngOnInit(){if(void 0===this.model){const T={};["dayTemplateData","displayMonths","markDisabled","firstDayOfWeek","navigation","minDate","maxDate","outsideDays","weekdays"].forEach(z=>T[z]=this[z]),this._service.set(T),this.navigateTo(this.startDate)}this.dayTemplate||(this.dayTemplate=this._defaultDayTemplate)}ngOnChanges(T){const z={};if(["dayTemplateData","displayMonths","markDisabled","firstDayOfWeek","navigation","minDate","maxDate","outsideDays","weekdays"].filter(Me=>Me in T).forEach(Me=>z[Me]=this[Me]),this._service.set(z),"startDate"in T){const{currentValue:Me,previousValue:Ke}=T.startDate;sd(Ke,Me)&&this.navigateTo(this.startDate)}}onDateSelect(T){this._service.focus(T),this._service.select(T,{emitEvent:!0})}onNavigateDateSelect(T){this._service.open(T)}onNavigateEvent(T){switch(T){case Nl.PREV:this._service.open(this._calendar.getPrev(this.model.firstDate,"m",1));break;case Nl.NEXT:this._service.open(this._calendar.getNext(this.model.firstDate,"m",1))}}registerOnChange(T){this.onChange=T}registerOnTouched(T){this.onTouched=T}setDisabledState(T){this._service.set({disabled:T})}writeValue(T){this._controlValue=Aa.from(this._ngbDateAdapter.fromModel(T)),this._service.select(this._controlValue)}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(Jc),r.Y36(Zu),r.Y36(pc),r.Y36(Yc),r.Y36(r.sBO),r.Y36(r.SBq),r.Y36(h),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-datepicker"]],contentQueries:function(T,z,Me){if(1&T&&r.Suo(Me,Ye,7),2&T){let Ke;r.iGM(Ke=r.CRH())&&(z.contentTemplate=Ke.first)}},viewQuery:function(T,z){if(1&T&&(r.Gf(Gs,7),r.Gf(Os,7)),2&T){let Me;r.iGM(Me=r.CRH())&&(z._defaultDayTemplate=Me.first),r.iGM(Me=r.CRH())&&(z._contentEl=Me.first)}},inputs:{dayTemplate:"dayTemplate",dayTemplateData:"dayTemplateData",displayMonths:"displayMonths",firstDayOfWeek:"firstDayOfWeek",footerTemplate:"footerTemplate",markDisabled:"markDisabled",maxDate:"maxDate",minDate:"minDate",navigation:"navigation",outsideDays:"outsideDays",showWeekNumbers:"showWeekNumbers",startDate:"startDate",weekdays:"weekdays"},outputs:{navigate:"navigate",dateSelect:"dateSelect"},exportAs:["ngbDatepicker"],features:[r._Bn([{provide:hr.JU,useExisting:(0,r.Gpc)(()=>I),multi:!0},Jc]),r.TTD],decls:10,vars:5,consts:[["defaultDayTemplate",""],["defaultContentTemplate",""],[1,"ngb-dp-header"],[3,"date","months","disabled","showSelect","prevDisabled","nextDisabled","selectBoxes","navigate","select",4,"ngIf"],[1,"ngb-dp-content"],["content",""],[3,"ngTemplateOutlet"],["ngbDatepickerDayView","",3,"date","currentMonth","selected","disabled","focused"],["class","ngb-dp-month",4,"ngFor","ngForOf"],[1,"ngb-dp-month"],["class","ngb-dp-month-name",4,"ngIf"],[3,"month"],[1,"ngb-dp-month-name"],[3,"date","months","disabled","showSelect","prevDisabled","nextDisabled","selectBoxes","navigate","select"]],template:function(T,z){if(1&T&&(r.YNc(0,ws,1,5,"ng-template",null,0,r.W1O),r.YNc(2,al,1,1,"ng-template",null,1,r.W1O),r.TgZ(4,"div",2),r.YNc(5,Bs,1,7,"ngb-datepicker-navigation",3),r.qZA(),r.TgZ(6,"div",4,5),r.YNc(8,mt,0,0,"ng-template",6),r.qZA(),r.YNc(9,ot,0,0,"ng-template",6)),2&T){const Me=r.MAs(3);r.xp6(5),r.Q6J("ngIf","none"!==z.navigation),r.xp6(1),r.ekj("ngb-dp-months",!z.contentTemplate),r.xp6(2),r.Q6J("ngTemplateOutlet",(null==z.contentTemplate?null:z.contentTemplate.templateRef)||Me),r.xp6(1),r.Q6J("ngTemplateOutlet",z.footerTemplate)}},directives:function(){return[P,nt,X,a.sg,a.O5,a.tP]},styles:["ngb-datepicker{border:1px solid #dfdfdf;border-radius:.25rem;display:inline-block}ngb-datepicker-month{pointer-events:auto}ngb-datepicker.dropdown-menu{padding:0}.ngb-dp-body{z-index:1055}.ngb-dp-header{border-bottom:0;border-radius:.25rem .25rem 0 0;padding-top:.25rem;background-color:#f8f9fa;background-color:var(--bs-light)}.ngb-dp-months{display:flex}.ngb-dp-month{pointer-events:none}.ngb-dp-month-name{font-size:larger;height:2rem;line-height:2rem;text-align:center;background-color:#f8f9fa;background-color:var(--bs-light)}.ngb-dp-month+.ngb-dp-month .ngb-dp-month-name,.ngb-dp-month+.ngb-dp-month .ngb-dp-week{padding-left:1rem}.ngb-dp-month:last-child .ngb-dp-week{padding-right:.25rem}.ngb-dp-month:first-child .ngb-dp-week{padding-left:.25rem}.ngb-dp-month .ngb-dp-week:last-child{padding-bottom:.25rem}\n"],encapsulation:2,changeDetection:0}),I})(),nt=(()=>{class I{constructor(T,z,Me,Ke){this.i18n=T,this.datepicker=z,this._keyboardService=Me,this._service=Ke}set month(T){this.viewModel=this._service.getMonth(T)}onKeyDown(T){this._keyboardService.processKey(T,this.datepicker)}doSelect(T){!T.context.disabled&&!T.hidden&&this.datepicker.onDateSelect(T.date)}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(pc),r.Y36(xe),r.Y36(ve),r.Y36(Jc))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-datepicker-month"]],hostAttrs:["role","grid"],hostBindings:function(T,z){1&T&&r.NdJ("keydown",function(Ke){return z.onKeyDown(Ke)})},inputs:{month:"month"},decls:2,vars:2,consts:[["class","ngb-dp-week ngb-dp-weekdays","role","row",4,"ngIf"],["ngFor","",3,"ngForOf"],["role","row",1,"ngb-dp-week","ngb-dp-weekdays"],["class","ngb-dp-weekday ngb-dp-showweek small",4,"ngIf"],["class","ngb-dp-weekday small","role","columnheader",4,"ngFor","ngForOf"],[1,"ngb-dp-weekday","ngb-dp-showweek","small"],["role","columnheader",1,"ngb-dp-weekday","small"],["class","ngb-dp-week","role","row",4,"ngIf"],["role","row",1,"ngb-dp-week"],["class","ngb-dp-week-number small text-muted",4,"ngIf"],["class","ngb-dp-day","role","gridcell",3,"disabled","tabindex","hidden","ngb-dp-today","click",4,"ngFor","ngForOf"],[1,"ngb-dp-week-number","small","text-muted"],["role","gridcell",1,"ngb-dp-day",3,"tabindex","click"],[3,"ngIf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(T,z){1&T&&(r.YNc(0,Si,3,2,"div",0),r.YNc(1,hd,1,1,"ng-template",1)),2&T&&(r.Q6J("ngIf",z.viewModel.weekdays.length>0),r.xp6(1),r.Q6J("ngForOf",z.viewModel.weeks))},directives:[a.O5,a.sg,a.tP],styles:['ngb-datepicker-month{display:block}.ngb-dp-weekday,.ngb-dp-week-number{line-height:2rem;text-align:center;font-style:italic}.ngb-dp-weekday{color:#0dcaf0;color:var(--bs-info)}.ngb-dp-week{border-radius:.25rem;display:flex}.ngb-dp-weekdays{border-bottom:1px solid rgba(0,0,0,.125);border-radius:0;background-color:#f8f9fa;background-color:var(--bs-light)}.ngb-dp-day,.ngb-dp-weekday,.ngb-dp-week-number{width:2rem;height:2rem}.ngb-dp-day{cursor:pointer}.ngb-dp-day.disabled,.ngb-dp-day.hidden{cursor:default;pointer-events:none}.ngb-dp-day[tabindex="0"]{z-index:1}\n'],encapsulation:2}),I})();const St=(I,ne)=>!!ne&&ne.some(T=>T.contains(I)),Mt=(I,ne)=>!ne||null!=function gi(I,ne){return ne&&void 0!==I.closest?I.closest(ne):null}(I,ne),fn="undefined"!=typeof navigator&&!!navigator.userAgent&&(/iPad|iPhone|iPod/.test(navigator.userAgent)||/Macintosh/.test(navigator.userAgent)&&navigator.maxTouchPoints&&navigator.maxTouchPoints>2||/Android/.test(navigator.userAgent));function Vn(I,ne,T,z,Me,Ke,gn,yr){T&&I.runOutsideAngular((I=>fn?()=>setTimeout(()=>I(),100):I)(()=>{const vi=(0,g.R)(ne,"keydown").pipe((0,Ge.R)(Me),(0,Oe.h)(Do=>Do.which===de.Escape),(0,dn.b)(Do=>Do.preventDefault())),di=(0,g.R)(ne,"mousedown").pipe((0,We.U)(Do=>{const Ss=Do.target;return 2!==Do.button&&!St(Ss,gn)&&("inside"===T?St(Ss,Ke)&&Mt(Ss,yr):"outside"===T?!St(Ss,Ke):Mt(Ss,yr)||!St(Ss,Ke))}),(0,Ge.R)(Me)),ts=(0,g.R)(ne,"mouseup").pipe(rn(di),(0,Oe.h)(([Do,Ss])=>Ss),(0,Ct.g)(0),(0,Ge.R)(Me));W([vi.pipe((0,We.U)(Do=>0)),ts.pipe((0,We.U)(Do=>1))]).subscribe(Do=>I.run(()=>z(Do)))}))}const fr=["a[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","[contenteditable]",'[tabindex]:not([tabindex="-1"])'].join(", ");function $r(I){const ne=Array.from(I.querySelectorAll(fr)).filter(T=>-1!==T.tabIndex);return[ne[0],ne[ne.length-1]]}const Ui=(I,ne,T,z=!1)=>{I.runOutsideAngular(()=>{const Me=(0,g.R)(ne,"focusin").pipe((0,Ge.R)(T),(0,We.U)(Ke=>Ke.target));(0,g.R)(ne,"keydown").pipe((0,Ge.R)(T),(0,Oe.h)(Ke=>Ke.which===de.Tab),rn(Me)).subscribe(([Ke,gn])=>{const[yr,Nr]=$r(ne);(gn===yr||gn===ne)&&Ke.shiftKey&&(Nr.focus(),Ke.preventDefault()),gn===Nr&&!Ke.shiftKey&&(yr.focus(),Ke.preventDefault())}),z&&(0,g.R)(ne,"click").pipe((0,Ge.R)(T),rn(Me),(0,We.U)(Ke=>Ke[1])).subscribe(Ke=>Ke.focus())})},is=/\s+/,yo=/  +/gi,Vs=/^start/,qs=/^end/,el=/-(top|left)$/,$a=/-(bottom|right)$/,wa=/^left/,Gl=/^right/,_u=/^start/,Va=/^end/;function ku({placement:I,baseClass:ne}){let T=Array.isArray(I)?I:I.split(is),Me=T.findIndex(Nr=>"auto"===Nr);Me>=0&&["top","bottom","start","end","top-start","top-end","bottom-start","bottom-end","start-top","start-bottom","end-top","end-bottom"].forEach(function(Nr){null==T.find(vi=>-1!==vi.search("^"+Nr))&&T.splice(Me++,1,Nr)});const Ke=T.map(Nr=>function Ga(I){return I.replace(Vs,"left").replace(qs,"right").replace(el,"-start").replace($a,"-end")}(Nr));return{placement:Ke.shift(),modifiers:[{name:"bootstrapClasses",enabled:!!ne,phase:"write",fn({state:Nr}){const vi=new RegExp(ne+"(-[a-z]+)*","gi"),di=Nr.elements.popper,ts=Nr.placement;let Do=di.className;Do=Do.replace(vi,""),Do+=` ${function Mu(I,ne){let[T,z]=ne.split("-");const Me=T.replace(wa,"start").replace(Gl,"end");let Ke=[Me];if(z){let gn=z;("left"===T||"right"===T)&&(gn=gn.replace(_u,"top").replace(Va,"bottom")),Ke.push(`${Me}-${gn}`)}return I&&(Ke=Ke.map(gn=>`${I}-${gn}`)),Ke.join(" ")}(ne,ts)}`,Do=Do.trim().replace(yo," "),di.className=Do}},$n,Ys,Ea,{enabled:!0,name:"flip",options:{fallbackPlacements:Ke}},{enabled:!0,name:"preventOverflow",phase:"main",fn:function(){}}]}}function xc(I){return I}function Ou(){let I=null;return{createPopper(ne){if(!I){let z=(ne.updatePopperOptions||xc)(ku(ne));I=_s(ne.hostElement,ne.targetElement,z)}},update(){I&&I.update()},setOptions(ne){if(I){let z=(ne.updatePopperOptions||xc)(ku(ne));I.setOptions(z)}},destroy(){I&&(I.destroy(),I=null)}}}let Qd=(()=>{class I extends Yc{constructor(){super(...arguments),this.autoClose=!0,this.placement=["bottom-start","bottom-end","top-start","top-end"],this.restoreFocus=!0}}return I.\u0275fac=function(){let ne;return function(z){return(ne||(ne=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})();function il(I){return ne=>(ne.modifiers.push(Ks,{name:"offset",options:{offset:()=>I}}),ne)}let be=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:function(){return function K(){return new lt}()},providedIn:"root"}),I})(),lt=(()=>{class I extends be{parse(T){if(null!=T){const z=T.trim().split("-");if(1===z.length&&Ae(z[0]))return{year:En(z[0]),month:null,day:null};if(2===z.length&&Ae(z[0])&&Ae(z[1]))return{year:En(z[0]),month:En(z[1]),day:null};if(3===z.length&&Ae(z[0])&&Ae(z[1])&&Ae(z[2]))return{year:En(z[0]),month:En(z[1]),day:En(z[2])}}return null}format(T){return T?`${T.year}-${Ae(T.month)?sn(T.month):""}-${Ae(T.day)?sn(T.day):""}`:""}}return I.\u0275fac=function(){let ne;return function(z){return(ne||(ne=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),wt=(()=>{class I{constructor(T,z,Me,Ke,gn,yr,Nr,vi,di,ts){this._parserFormatter=T,this._elRef=z,this._vcRef=Me,this._renderer=Ke,this._ngZone=gn,this._calendar=yr,this._dateAdapter=Nr,this._document=vi,this._changeDetector=di,this._cRef=null,this._disabled=!1,this._elWithFocus=null,this._model=null,this._positioning=Ou(),this._destroyCloseHandlers$=new p.xQ,this.dateSelect=new r.vpe,this.navigate=new r.vpe,this.closed=new r.vpe,this._onChange=Do=>{},this._onTouched=()=>{},this._validatorChange=()=>{},["autoClose","container","positionTarget","placement"].forEach(Do=>this[Do]=ts[Do])}get disabled(){return this._disabled}set disabled(T){this._disabled=""===T||T&&"false"!==T,this.isOpen()&&this._cRef.instance.setDisabledState(this._disabled)}registerOnChange(T){this._onChange=T}registerOnTouched(T){this._onTouched=T}registerOnValidatorChange(T){this._validatorChange=T}setDisabledState(T){this.disabled=T}validate(T){const{value:z}=T;if(null!=z){const Me=this._fromDateStruct(this._dateAdapter.fromModel(z));if(!Me)return{ngbDate:{invalid:z}};if(this.minDate&&Me.before(Aa.from(this.minDate)))return{ngbDate:{minDate:{minDate:this.minDate,actual:z}}};if(this.maxDate&&Me.after(Aa.from(this.maxDate)))return{ngbDate:{maxDate:{maxDate:this.maxDate,actual:z}}}}return null}writeValue(T){this._model=this._fromDateStruct(this._dateAdapter.fromModel(T)),this._writeModelValue(this._model)}manualDateChange(T,z=!1){const Me=T!==this._inputValue;Me&&(this._inputValue=T,this._model=this._fromDateStruct(this._parserFormatter.parse(T))),(Me||!z)&&this._onChange(this._model?this._dateAdapter.toModel(this._model):""===T?null:T),z&&this._model&&this._writeModelValue(this._model)}isOpen(){return!!this._cRef}open(){if(!this.isOpen()){let T;if(this._cRef=this._vcRef.createComponent(xe),this._applyPopupStyling(this._cRef.location.nativeElement),this._applyDatepickerInputs(this._cRef.instance),this._subscribeForDatepickerOutputs(this._cRef.instance),this._cRef.instance.ngOnInit(),this._cRef.instance.writeValue(this._dateAdapter.toModel(this._model)),this._cRef.instance.registerOnChange(z=>{this.writeValue(z),this._onChange(z),this._onTouched()}),this._cRef.changeDetectorRef.detectChanges(),this._cRef.instance.setDisabledState(this.disabled),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._cRef.location.nativeElement),this._elWithFocus=this._document.activeElement,Ui(this._ngZone,this._cRef.location.nativeElement,this.closed,!0),setTimeout(()=>{var z;return null===(z=this._cRef)||void 0===z?void 0:z.instance.focus()}),T=Ze(this.positionTarget)?this._document.querySelector(this.positionTarget):this.positionTarget instanceof HTMLElement?this.positionTarget:this._elRef.nativeElement,this._ngZone.runOutsideAngular(()=>{this._cRef&&(this._positioning.createPopper({hostElement:T,targetElement:this._cRef.location.nativeElement,placement:this.placement,appendToBody:"body"===this.container,updatePopperOptions:il([0,2])}),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positioning.update()))}),this.positionTarget&&!T)throw new Error("ngbDatepicker could not find element declared in [positionTarget] to position against.");this._setCloseHandlers()}}close(){var T;if(this.isOpen()){this._vcRef.remove(this._vcRef.indexOf(this._cRef.hostView)),this._cRef=null,this._positioning.destroy(),null===(T=this._zoneSubscription)||void 0===T||T.unsubscribe(),this._destroyCloseHandlers$.next(),this.closed.emit(),this._changeDetector.markForCheck();let z=this._elWithFocus;Ze(this.restoreFocus)?z=this._document.querySelector(this.restoreFocus):void 0!==this.restoreFocus&&(z=this.restoreFocus),z&&z.focus?z.focus():this._document.body.focus()}}toggle(){this.isOpen()?this.close():this.open()}navigateTo(T){this.isOpen()&&this._cRef.instance.navigateTo(T)}onBlur(){this._onTouched()}onFocus(){this._elWithFocus=this._elRef.nativeElement}ngOnChanges(T){if((T.minDate||T.maxDate)&&(this._validatorChange(),this.isOpen()&&(T.minDate&&(this._cRef.instance.minDate=this.minDate),T.maxDate&&(this._cRef.instance.maxDate=this.maxDate),this._cRef.instance.ngOnChanges(T))),T.datepickerClass){const{currentValue:z,previousValue:Me}=T.datepickerClass;this._applyPopupClass(z,Me)}T.autoClose&&this.isOpen()&&this._setCloseHandlers()}ngOnDestroy(){this.close()}_applyDatepickerInputs(T){["dayTemplate","dayTemplateData","displayMonths","firstDayOfWeek","footerTemplate","markDisabled","minDate","maxDate","navigation","outsideDays","showNavigation","showWeekNumbers","weekdays"].forEach(z=>{void 0!==this[z]&&(T[z]=this[z])}),T.startDate=this.startDate||this._model}_applyPopupClass(T,z){var Me;const Ke=null===(Me=this._cRef)||void 0===Me?void 0:Me.location.nativeElement;Ke&&(T&&this._renderer.addClass(Ke,T),z&&this._renderer.removeClass(Ke,z))}_applyPopupStyling(T){this._renderer.addClass(T,"dropdown-menu"),this._renderer.addClass(T,"show"),"body"===this.container&&this._renderer.addClass(T,"ngb-dp-body"),this._applyPopupClass(this.datepickerClass)}_subscribeForDatepickerOutputs(T){T.navigate.subscribe(z=>this.navigate.emit(z)),T.dateSelect.subscribe(z=>{this.dateSelect.emit(z),(!0===this.autoClose||"inside"===this.autoClose)&&this.close()})}_writeModelValue(T){const z=this._parserFormatter.format(T);this._inputValue=z,this._renderer.setProperty(this._elRef.nativeElement,"value",z),this.isOpen()&&(this._cRef.instance.writeValue(this._dateAdapter.toModel(T)),this._onTouched())}_fromDateStruct(T){const z=T?new Aa(T.year,T.month,T.day):null;return this._calendar.isValid(z)?z:null}_setCloseHandlers(){this._destroyCloseHandlers$.next(),Vn(this._ngZone,this._document,this.autoClose,()=>this.close(),this._destroyCloseHandlers$,[],[this._elRef.nativeElement,this._cRef.location.nativeElement])}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(be),r.Y36(r.SBq),r.Y36(r.s_b),r.Y36(r.Qsj),r.Y36(r.R0b),r.Y36(Zu),r.Y36(h),r.Y36(a.K0),r.Y36(r.sBO),r.Y36(Qd))},I.\u0275dir=r.lG2({type:I,selectors:[["input","ngbDatepicker",""]],hostVars:1,hostBindings:function(T,z){1&T&&r.NdJ("input",function(Ke){return z.manualDateChange(Ke.target.value)})("change",function(Ke){return z.manualDateChange(Ke.target.value,!0)})("focus",function(){return z.onFocus()})("blur",function(){return z.onBlur()}),2&T&&r.Ikx("disabled",z.disabled)},inputs:{autoClose:"autoClose",datepickerClass:"datepickerClass",dayTemplate:"dayTemplate",dayTemplateData:"dayTemplateData",displayMonths:"displayMonths",firstDayOfWeek:"firstDayOfWeek",footerTemplate:"footerTemplate",markDisabled:"markDisabled",minDate:"minDate",maxDate:"maxDate",navigation:"navigation",outsideDays:"outsideDays",placement:"placement",restoreFocus:"restoreFocus",showWeekNumbers:"showWeekNumbers",startDate:"startDate",container:"container",positionTarget:"positionTarget",weekdays:"weekdays",disabled:"disabled"},outputs:{dateSelect:"dateSelect",navigate:"navigate",closed:"closed"},exportAs:["ngbDatepicker"],features:[r._Bn([{provide:hr.JU,useExisting:(0,r.Gpc)(()=>I),multi:!0},{provide:hr.Cf,useExisting:(0,r.Gpc)(()=>I),multi:!0},{provide:Yc,useExisting:Qd}]),r.TTD]}),I})();new Date(1882,10,12),new Date(2174,10,25);let Td=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[[a.ez,hr.u5]]}),I})(),__=(()=>{class I{constructor(){this.autoClose=!0,this.placement=["bottom-start","bottom-end","top-start","top-end"]}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Zh=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275dir=r.lG2({type:I,selectors:[["",8,"navbar"]]}),I})(),zh=(()=>{class I{constructor(T,z){this.elementRef=T,this._renderer=z,this._disabled=!1}set disabled(T){this._disabled=""===T||!0===T,this._renderer.setProperty(this.elementRef.nativeElement,"disabled",this._disabled)}get disabled(){return this._disabled}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.SBq),r.Y36(r.Qsj))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdownItem",""]],hostAttrs:[1,"dropdown-item"],hostVars:3,hostBindings:function(T,z){2&T&&(r.Ikx("tabIndex",z.disabled?-1:0),r.ekj("disabled",z.disabled))},inputs:{disabled:"disabled"}}),I})(),Cd=(()=>{class I{constructor(T,z){this.dropdown=T,this.placement="bottom",this.isOpen=!1,this.nativeElement=z.nativeElement}}return I.\u0275fac=function(T){return new(T||I)(r.Y36((0,r.Gpc)(()=>bp)),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdownMenu",""]],contentQueries:function(T,z,Me){if(1&T&&r.Suo(Me,zh,4),2&T){let Ke;r.iGM(Ke=r.CRH())&&(z.menuItems=Ke)}},hostVars:4,hostBindings:function(T,z){1&T&&r.NdJ("keydown.ArrowUp",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.ArrowDown",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.Home",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.End",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.Enter",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.Space",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.Tab",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.Shift.Tab",function(Ke){return z.dropdown.onKeyDown(Ke)}),2&T&&r.ekj("dropdown-menu",!0)("show",z.dropdown.isOpen())}}),I})(),mu=(()=>{class I{constructor(T,z){this.dropdown=T,this.nativeElement=z.nativeElement}}return I.\u0275fac=function(T){return new(T||I)(r.Y36((0,r.Gpc)(()=>bp)),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdownAnchor",""]],hostAttrs:[1,"dropdown-toggle"],hostVars:1,hostBindings:function(T,z){2&T&&r.uIk("aria-expanded",z.dropdown.isOpen())}}),I})(),Wh=(()=>{class I extends mu{constructor(T,z){super(T,z)}}return I.\u0275fac=function(T){return new(T||I)(r.Y36((0,r.Gpc)(()=>bp)),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdownToggle",""]],hostAttrs:[1,"dropdown-toggle"],hostVars:1,hostBindings:function(T,z){1&T&&r.NdJ("click",function(){return z.dropdown.toggle()})("keydown.ArrowUp",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.ArrowDown",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.Home",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.End",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.Tab",function(Ke){return z.dropdown.onKeyDown(Ke)})("keydown.Shift.Tab",function(Ke){return z.dropdown.onKeyDown(Ke)}),2&T&&r.uIk("aria-expanded",z.dropdown.isOpen())},features:[r._Bn([{provide:mu,useExisting:(0,r.Gpc)(()=>I)}]),r.qOj]}),I})(),bp=(()=>{class I{constructor(T,z,Me,Ke,gn,yr,Nr){this._changeDetector=T,this._document=Me,this._ngZone=Ke,this._elementRef=gn,this._renderer=yr,this._destroyCloseHandlers$=new p.xQ,this._bodyContainer=null,this._positioning=Ou(),this._open=!1,this.openChange=new r.vpe,this.placement=z.placement,this.container=z.container,this.autoClose=z.autoClose,this.display=Nr?"static":"dynamic"}ngAfterContentInit(){this._ngZone.onStable.pipe((0,Tt.q)(1)).subscribe(()=>{this._applyPlacementClasses(),this._open&&this._setCloseHandlers()})}ngOnChanges(T){if(T.container&&this._open&&this._applyContainer(this.container),T.placement&&!T.placement.firstChange&&(this._positioning.setOptions({hostElement:this._anchor.nativeElement,targetElement:this._bodyContainer||this._menu.nativeElement,placement:this.placement,appendToBody:"body"===this.container}),this._applyPlacementClasses()),T.dropdownClass){const{currentValue:z,previousValue:Me}=T.dropdownClass;this._applyCustomDropdownClass(z,Me)}T.autoClose&&this._open&&(this.autoClose=T.autoClose.currentValue,this._setCloseHandlers())}isOpen(){return this._open}open(){this._open||(this._open=!0,this._applyContainer(this.container),this.openChange.emit(!0),this._setCloseHandlers(),this._anchor&&(this._anchor.nativeElement.focus(),"dynamic"===this.display&&this._ngZone.runOutsideAngular(()=>{this._positioning.createPopper({hostElement:this._anchor.nativeElement,targetElement:this._bodyContainer||this._menu.nativeElement,placement:this.placement,appendToBody:"body"===this.container,updatePopperOptions:il([0,2])}),this._applyPlacementClasses(),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positionMenu())})))}_setCloseHandlers(){this._destroyCloseHandlers$.next(),Vn(this._ngZone,this._document,this.autoClose,T=>{this.close(),0===T&&this._anchor.nativeElement.focus()},this._destroyCloseHandlers$,this._menu?[this._menu.nativeElement]:[],this._anchor?[this._anchor.nativeElement]:[],".dropdown-item,.dropdown-divider")}close(){var T;this._open&&(this._open=!1,this._resetContainer(),this._positioning.destroy(),null===(T=this._zoneSubscription)||void 0===T||T.unsubscribe(),this._destroyCloseHandlers$.next(),this.openChange.emit(!1),this._changeDetector.markForCheck())}toggle(){this.isOpen()?this.close():this.open()}ngOnDestroy(){this.close()}onKeyDown(T){const z=T.which,Me=this._getMenuElements();let Ke=-1,gn=null;const yr=this._isEventFromToggle(T);if(!yr&&Me.length&&Me.forEach((Nr,vi)=>{Nr.contains(T.target)&&(gn=Nr),Nr===this._document.activeElement&&(Ke=vi)}),z!==de.Space&&z!==de.Enter){if(z!==de.Tab){if(yr||gn){if(this.open(),Me.length){switch(z){case de.ArrowDown:Ke=Math.min(Ke+1,Me.length-1);break;case de.ArrowUp:if(this._isDropup()&&-1===Ke){Ke=Me.length-1;break}Ke=Math.max(Ke-1,0);break;case de.Home:Ke=0;break;case de.End:Ke=Me.length-1}Me[Ke].focus()}T.preventDefault()}}else if(T.target&&this.isOpen()&&this.autoClose){if(this._anchor.nativeElement===T.target)return void("body"!==this.container||T.shiftKey?T.shiftKey&&this.close():(this._renderer.setAttribute(this._menu.nativeElement,"tabindex","0"),this._menu.nativeElement.focus(),this._renderer.removeAttribute(this._menu.nativeElement,"tabindex")));if("body"===this.container){const Nr=this._menu.nativeElement.querySelectorAll(fr);T.shiftKey&&T.target===Nr[0]?(this._anchor.nativeElement.focus(),T.preventDefault()):!T.shiftKey&&T.target===Nr[Nr.length-1]&&(this._anchor.nativeElement.focus(),this.close())}else(0,g.R)(T.target,"focusout").pipe((0,Tt.q)(1)).subscribe(({relatedTarget:Nr})=>{this._elementRef.nativeElement.contains(Nr)||this.close()})}}else gn&&(!0===this.autoClose||"inside"===this.autoClose)&&(0,g.R)(gn,"click").pipe((0,Tt.q)(1)).subscribe(()=>this.close())}_isDropup(){return this._elementRef.nativeElement.classList.contains("dropup")}_isEventFromToggle(T){return this._anchor.nativeElement.contains(T.target)}_getMenuElements(){const T=this._menu;return null==T?[]:T.menuItems.filter(z=>!z.disabled).map(z=>z.elementRef.nativeElement)}_positionMenu(){const T=this._menu;this.isOpen()&&T&&("dynamic"===this.display?(this._positioning.update(),this._applyPlacementClasses()):this._applyPlacementClasses(this._getFirstPlacement(this.placement)))}_getFirstPlacement(T){return Array.isArray(T)?T[0]:T.split(" ")[0]}_resetContainer(){const T=this._renderer;this._menu&&T.appendChild(this._elementRef.nativeElement,this._menu.nativeElement),this._bodyContainer&&(T.removeChild(this._document.body,this._bodyContainer),this._bodyContainer=null)}_applyContainer(T=null){if(this._resetContainer(),"body"===T){const z=this._renderer,Me=this._menu.nativeElement,Ke=this._bodyContainer=this._bodyContainer||z.createElement("div");z.setStyle(Ke,"position","absolute"),z.setStyle(Me,"position","static"),z.setStyle(Ke,"z-index","1055"),z.appendChild(Ke,Me),z.appendChild(this._document.body,Ke)}this._applyCustomDropdownClass(this.dropdownClass)}_applyCustomDropdownClass(T,z){const Me="body"===this.container?this._bodyContainer:this._elementRef.nativeElement;Me&&(z&&this._renderer.removeClass(Me,z),T&&this._renderer.addClass(Me,T))}_applyPlacementClasses(T){const z=this._menu;if(z){T||(T=this._getFirstPlacement(this.placement));const Me=this._renderer,Ke=this._elementRef.nativeElement;Me.removeClass(Ke,"dropup"),Me.removeClass(Ke,"dropdown");const{nativeElement:gn}=z;"static"===this.display?(z.placement=null,Me.setAttribute(gn,"data-bs-popper","static")):(z.placement=T,Me.removeAttribute(gn,"data-bs-popper"));const yr=-1!==T.search("^top")?"dropup":"dropdown";Me.addClass(Ke,yr);const Nr=this._bodyContainer;Nr&&(Me.removeClass(Nr,"dropup"),Me.removeClass(Nr,"dropdown"),Me.addClass(Nr,yr))}}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.sBO),r.Y36(__),r.Y36(a.K0),r.Y36(r.R0b),r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(Zh,8))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbDropdown",""]],contentQueries:function(T,z,Me){if(1&T&&(r.Suo(Me,Cd,5),r.Suo(Me,mu,5)),2&T){let Ke;r.iGM(Ke=r.CRH())&&(z._menu=Ke.first),r.iGM(Ke=r.CRH())&&(z._anchor=Ke.first)}},hostVars:2,hostBindings:function(T,z){2&T&&r.ekj("show",z.isOpen())},inputs:{autoClose:"autoClose",dropdownClass:"dropdownClass",_open:["open","_open"],placement:"placement",container:"container",display:"display"},outputs:{openChange:"openChange"},exportAs:["ngbDropdown"],features:[r.TTD]}),I})(),sc=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({}),I})();class qd{constructor(ne,T,z){this.nodes=ne,this.viewRef=T,this.componentRef=z}}class zf{constructor(ne,T,z,Me,Ke,gn){this._type=ne,this._injector=T,this._viewContainerRef=z,this._renderer=Me,this._ngZone=Ke,this._applicationRef=gn,this._windowRef=null,this._contentRef=null}open(ne,T,z=!1){this._windowRef||(this._contentRef=this._getContentRef(ne,T),this._windowRef=this._viewContainerRef.createComponent(this._type,{index:this._viewContainerRef.length,injector:this._injector,projectableNodes:this._contentRef.nodes}));const{nativeElement:Me}=this._windowRef.location,Ke=this._ngZone.onStable.pipe((0,Tt.q)(1),(0,Gt.zg)(()=>rl(this._ngZone,Me,({classList:gn})=>gn.add("show"),{animation:z,runningTransition:"continue"})));return{windowRef:this._windowRef,transition$:Ke}}close(ne=!1){return this._windowRef?rl(this._ngZone,this._windowRef.location.nativeElement,({classList:T})=>T.remove("show"),{animation:ne,runningTransition:"stop"}).pipe((0,dn.b)(()=>{var T;this._windowRef&&(this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)),this._windowRef=null),(null===(T=this._contentRef)||void 0===T?void 0:T.viewRef)&&(this._applicationRef.detachView(this._contentRef.viewRef),this._contentRef.viewRef.destroy(),this._contentRef=null)})):(0,e.of)(void 0)}_getContentRef(ne,T){if(ne){if(ne instanceof r.Rgc){const z=ne.createEmbeddedView(T);return this._applicationRef.attachView(z),new qd([z.rootNodes],z)}return new qd([[this._renderer.createText(`${ne}`)]])}return new qd([])}}let Qh=(()=>{class I{constructor(T,z){this._el=T,this._zone=z}ngOnInit(){this._zone.onStable.asObservable().pipe((0,Tt.q)(1)).subscribe(()=>{rl(this._zone,this._el.nativeElement,(T,z)=>{z&&Lo(T),T.classList.add("show")},{animation:this.animation,runningTransition:"continue"})})}hide(){return rl(this._zone,this._el.nativeElement,({classList:T})=>T.remove("show"),{animation:this.animation,runningTransition:"stop"})}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.SBq),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-modal-backdrop"]],hostAttrs:[2,"z-index","1055"],hostVars:6,hostBindings:function(T,z){2&T&&(r.Tol("modal-backdrop"+(z.backdropClass?" "+z.backdropClass:"")),r.ekj("show",!z.animation)("fade",z.animation))},inputs:{animation:"animation",backdropClass:"backdropClass"},decls:0,vars:0,template:function(T,z){},encapsulation:2}),I})();class Sp{close(ne){}dismiss(ne){}}class m_{constructor(ne,T,z,Me){this._windowCmptRef=ne,this._contentRef=T,this._backdropCmptRef=z,this._beforeDismiss=Me,this._closed=new p.xQ,this._dismissed=new p.xQ,this._hidden=new p.xQ,ne.instance.dismissEvent.subscribe(Ke=>{this.dismiss(Ke)}),this.result=new Promise((Ke,gn)=>{this._resolve=Ke,this._reject=gn}),this.result.then(null,()=>{})}get componentInstance(){if(this._contentRef&&this._contentRef.componentRef)return this._contentRef.componentRef.instance}get closed(){return this._closed.asObservable().pipe((0,Ge.R)(this._hidden))}get dismissed(){return this._dismissed.asObservable().pipe((0,Ge.R)(this._hidden))}get hidden(){return this._hidden.asObservable()}get shown(){return this._windowCmptRef.instance.shown.asObservable()}close(ne){this._windowCmptRef&&(this._closed.next(ne),this._resolve(ne),this._removeModalElements())}_dismiss(ne){this._dismissed.next(ne),this._reject(ne),this._removeModalElements()}dismiss(ne){if(this._windowCmptRef)if(this._beforeDismiss){const T=this._beforeDismiss();!function Ot(I){return I&&I.then}(T)?!1!==T&&this._dismiss(ne):T.then(z=>{!1!==z&&this._dismiss(ne)},()=>{})}else this._dismiss(ne)}_removeModalElements(){const ne=this._windowCmptRef.instance.hide(),T=this._backdropCmptRef?this._backdropCmptRef.instance.hide():(0,e.of)(void 0);ne.subscribe(()=>{const{nativeElement:z}=this._windowCmptRef.location;z.parentNode.removeChild(z),this._windowCmptRef.destroy(),this._contentRef&&this._contentRef.viewRef&&this._contentRef.viewRef.destroy(),this._windowCmptRef=null,this._contentRef=null}),T.subscribe(()=>{if(this._backdropCmptRef){const{nativeElement:z}=this._backdropCmptRef.location;z.parentNode.removeChild(z),this._backdropCmptRef.destroy(),this._backdropCmptRef=null}}),fe(ne,T).subscribe(()=>{this._hidden.next(),this._hidden.complete()})}}var Tp=(()=>{return(I=Tp||(Tp={}))[I.BACKDROP_CLICK=0]="BACKDROP_CLICK",I[I.ESC=1]="ESC",Tp;var I})();let mh=(()=>{class I{constructor(T,z,Me){this._document=T,this._elRef=z,this._zone=Me,this._closed$=new p.xQ,this._elWithFocus=null,this.backdrop=!0,this.keyboard=!0,this.dismissEvent=new r.vpe,this.shown=new p.xQ,this.hidden=new p.xQ}get fullscreenClass(){return!0===this.fullscreen?" modal-fullscreen":Ze(this.fullscreen)?` modal-fullscreen-${this.fullscreen}-down`:""}dismiss(T){this.dismissEvent.emit(T)}ngOnInit(){this._elWithFocus=this._document.activeElement,this._zone.onStable.asObservable().pipe((0,Tt.q)(1)).subscribe(()=>{this._show()})}ngOnDestroy(){this._disableEventHandling()}hide(){const{nativeElement:T}=this._elRef,z={animation:this.animation,runningTransition:"stop"},gn=fe(rl(this._zone,T,()=>T.classList.remove("show"),z),rl(this._zone,this._dialogEl.nativeElement,()=>{},z));return gn.subscribe(()=>{this.hidden.next(),this.hidden.complete()}),this._disableEventHandling(),this._restoreFocus(),gn}_show(){const T={animation:this.animation,runningTransition:"continue"};fe(rl(this._zone,this._elRef.nativeElement,(Ke,gn)=>{gn&&Lo(Ke),Ke.classList.add("show")},T),rl(this._zone,this._dialogEl.nativeElement,()=>{},T)).subscribe(()=>{this.shown.next(),this.shown.complete()}),this._enableEventHandling(),this._setFocus()}_enableEventHandling(){const{nativeElement:T}=this._elRef;this._zone.runOutsideAngular(()=>{(0,g.R)(T,"keydown").pipe((0,Ge.R)(this._closed$),(0,Oe.h)(Me=>Me.which===de.Escape)).subscribe(Me=>{this.keyboard?requestAnimationFrame(()=>{Me.defaultPrevented||this._zone.run(()=>this.dismiss(Tp.ESC))}):"static"===this.backdrop&&this._bumpBackdrop()});let z=!1;(0,g.R)(this._dialogEl.nativeElement,"mousedown").pipe((0,Ge.R)(this._closed$),(0,dn.b)(()=>z=!1),(0,Yt.w)(()=>(0,g.R)(T,"mouseup").pipe((0,Ge.R)(this._closed$),(0,Tt.q)(1))),(0,Oe.h)(({target:Me})=>T===Me)).subscribe(()=>{z=!0}),(0,g.R)(T,"click").pipe((0,Ge.R)(this._closed$)).subscribe(({target:Me})=>{T===Me&&("static"===this.backdrop?this._bumpBackdrop():!0===this.backdrop&&!z&&this._zone.run(()=>this.dismiss(Tp.BACKDROP_CLICK))),z=!1})})}_disableEventHandling(){this._closed$.next()}_setFocus(){const{nativeElement:T}=this._elRef;if(!T.contains(document.activeElement)){const z=T.querySelector("[ngbAutofocus]"),Me=$r(T)[0];(z||Me||T).focus()}}_restoreFocus(){const T=this._document.body,z=this._elWithFocus;let Me;Me=z&&z.focus&&T.contains(z)?z:T,this._zone.runOutsideAngular(()=>{setTimeout(()=>Me.focus()),this._elWithFocus=null})}_bumpBackdrop(){"static"===this.backdrop&&rl(this._zone,this._elRef.nativeElement,({classList:T})=>(T.add("modal-static"),()=>T.remove("modal-static")),{animation:this.animation,runningTransition:"continue"})}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(a.K0),r.Y36(r.SBq),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-modal-window"]],viewQuery:function(T,z){if(1&T&&r.Gf(Yi,7),2&T){let Me;r.iGM(Me=r.CRH())&&(z._dialogEl=Me.first)}},hostAttrs:["role","dialog","tabindex","-1"],hostVars:7,hostBindings:function(T,z){2&T&&(r.uIk("aria-modal",!0)("aria-labelledby",z.ariaLabelledBy)("aria-describedby",z.ariaDescribedBy),r.Tol("modal d-block"+(z.windowClass?" "+z.windowClass:"")),r.ekj("fade",z.animation))},inputs:{animation:"animation",ariaLabelledBy:"ariaLabelledBy",ariaDescribedBy:"ariaDescribedBy",backdrop:"backdrop",centered:"centered",fullscreen:"fullscreen",keyboard:"keyboard",scrollable:"scrollable",size:"size",windowClass:"windowClass",modalDialogClass:"modalDialogClass"},outputs:{dismissEvent:"dismiss"},ngContentSelectors:Xu,decls:4,vars:2,consts:[["role","document"],["dialog",""],[1,"modal-content"]],template:function(T,z){1&T&&(r.F$t(),r.TgZ(0,"div",0,1)(2,"div",2),r.Hsn(3),r.qZA()()),2&T&&r.Tol("modal-dialog"+(z.size?" modal-"+z.size:"")+(z.centered?" modal-dialog-centered":"")+z.fullscreenClass+(z.scrollable?" modal-dialog-scrollable":"")+(z.modalDialogClass?" "+z.modalDialogClass:""))},styles:["ngb-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\n"],encapsulation:2}),I})(),g_=(()=>{class I{constructor(T){this._document=T}hide(){const T=Math.abs(window.innerWidth-this._document.documentElement.clientWidth),z=this._document.body,Me=z.style,{overflow:Ke,paddingRight:gn}=Me;if(T>0){const yr=parseFloat(window.getComputedStyle(z).paddingRight);Me.paddingRight=`${yr+T}px`}return Me.overflow="hidden",()=>{T>0&&(Me.paddingRight=gn),Me.overflow=Ke}}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(a.K0))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),gh=(()=>{class I{constructor(T,z,Me,Ke,gn,yr){this._applicationRef=T,this._injector=z,this._document=Me,this._scrollBar=Ke,this._rendererFactory=gn,this._ngZone=yr,this._activeWindowCmptHasChanged=new p.xQ,this._ariaHiddenValues=new Map,this._scrollBarRestoreFn=null,this._backdropAttributes=["animation","backdropClass"],this._modalRefs=[],this._windowAttributes=["animation","ariaLabelledBy","ariaDescribedBy","backdrop","centered","fullscreen","keyboard","scrollable","size","windowClass","modalDialogClass"],this._windowCmpts=[],this._activeInstances=new r.vpe,this._activeWindowCmptHasChanged.subscribe(()=>{if(this._windowCmpts.length){const Nr=this._windowCmpts[this._windowCmpts.length-1];Ui(this._ngZone,Nr.location.nativeElement,this._activeWindowCmptHasChanged),this._revertAriaHidden(),this._setAriaHidden(Nr.location.nativeElement)}})}_restoreScrollBar(){const T=this._scrollBarRestoreFn;T&&(this._scrollBarRestoreFn=null,T())}_hideScrollBar(){this._scrollBarRestoreFn||(this._scrollBarRestoreFn=this._scrollBar.hide())}open(T,z,Me,Ke){const gn=Ke.container instanceof HTMLElement?Ke.container:ht(Ke.container)?this._document.querySelector(Ke.container):this._document.body,yr=this._rendererFactory.createRenderer(null,null);if(!gn)throw new Error(`The specified modal container "${Ke.container||"body"}" was not found in the DOM.`);this._hideScrollBar();const Nr=new Sp,vi=this._getContentRef(T,Ke.injector||z,Me,Nr,Ke);let di=!1!==Ke.backdrop?this._attachBackdrop(T,gn):void 0,ts=this._attachWindowComponent(T,gn,vi),Do=new m_(ts,vi,di,Ke.beforeDismiss);return this._registerModalRef(Do),this._registerWindowCmpt(ts),Do.hidden.pipe((0,Tt.q)(1)).subscribe(()=>Promise.resolve(!0).then(()=>{this._modalRefs.length||(yr.removeClass(this._document.body,"modal-open"),this._restoreScrollBar(),this._revertAriaHidden())})),Nr.close=Ss=>{Do.close(Ss)},Nr.dismiss=Ss=>{Do.dismiss(Ss)},this._applyWindowOptions(ts.instance,Ke),1===this._modalRefs.length&&yr.addClass(this._document.body,"modal-open"),di&&di.instance&&(this._applyBackdropOptions(di.instance,Ke),di.changeDetectorRef.detectChanges()),ts.changeDetectorRef.detectChanges(),Do}get activeInstances(){return this._activeInstances}dismissAll(T){this._modalRefs.forEach(z=>z.dismiss(T))}hasOpenModals(){return this._modalRefs.length>0}_attachBackdrop(T,z){let Ke=T.resolveComponentFactory(Qh).create(this._injector);return this._applicationRef.attachView(Ke.hostView),z.appendChild(Ke.location.nativeElement),Ke}_attachWindowComponent(T,z,Me){let gn=T.resolveComponentFactory(mh).create(this._injector,Me.nodes);return this._applicationRef.attachView(gn.hostView),z.appendChild(gn.location.nativeElement),gn}_applyWindowOptions(T,z){this._windowAttributes.forEach(Me=>{ht(z[Me])&&(T[Me]=z[Me])})}_applyBackdropOptions(T,z){this._backdropAttributes.forEach(Me=>{ht(z[Me])&&(T[Me]=z[Me])})}_getContentRef(T,z,Me,Ke,gn){return Me?Me instanceof r.Rgc?this._createFromTemplateRef(Me,Ke):Ze(Me)?this._createFromString(Me):this._createFromComponent(T,z,Me,Ke,gn):new qd([])}_createFromTemplateRef(T,z){const Ke=T.createEmbeddedView({$implicit:z,close(gn){z.close(gn)},dismiss(gn){z.dismiss(gn)}});return this._applicationRef.attachView(Ke),new qd([Ke.rootNodes],Ke)}_createFromString(T){const z=this._document.createTextNode(`${T}`);return new qd([[z]])}_createFromComponent(T,z,Me,Ke,gn){const yr=T.resolveComponentFactory(Me),Nr=r.zs3.create({providers:[{provide:Sp,useValue:Ke}],parent:z}),vi=yr.create(Nr),di=vi.location.nativeElement;return gn.scrollable&&di.classList.add("component-host-scrollable"),this._applicationRef.attachView(vi.hostView),new qd([[di]],vi.hostView,vi)}_setAriaHidden(T){const z=T.parentElement;z&&T!==this._document.body&&(Array.from(z.children).forEach(Me=>{Me!==T&&"SCRIPT"!==Me.nodeName&&(this._ariaHiddenValues.set(Me,Me.getAttribute("aria-hidden")),Me.setAttribute("aria-hidden","true"))}),this._setAriaHidden(z))}_revertAriaHidden(){this._ariaHiddenValues.forEach((T,z)=>{T?z.setAttribute("aria-hidden",T):z.removeAttribute("aria-hidden")}),this._ariaHiddenValues.clear()}_registerModalRef(T){const z=()=>{const Me=this._modalRefs.indexOf(T);Me>-1&&(this._modalRefs.splice(Me,1),this._activeInstances.emit(this._modalRefs))};this._modalRefs.push(T),this._activeInstances.emit(this._modalRefs),T.result.then(z,z)}_registerWindowCmpt(T){this._windowCmpts.push(T),this._activeWindowCmptHasChanged.next(),T.onDestroy(()=>{const z=this._windowCmpts.indexOf(T);z>-1&&(this._windowCmpts.splice(z,1),this._activeWindowCmptHasChanged.next())})}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(r.z2F),r.LFG(r.zs3),r.LFG(a.K0),r.LFG(g_),r.LFG(r.FYo),r.LFG(r.R0b))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),L_=(()=>{class I{constructor(T){this._ngbConfig=T,this.backdrop=!0,this.fullscreen=!1,this.keyboard=!0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(T){this._animation=T}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(Ul))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Xh=(()=>{class I{constructor(T,z,Me,Ke){this._moduleCFR=T,this._injector=z,this._modalStack=Me,this._config=Ke}open(T,z={}){const Me=Object.assign(Object.assign(Object.assign({},this._config),{animation:this._config.animation}),z);return this._modalStack.open(this._moduleCFR,this._injector,T,Me)}get activeInstances(){return this._modalStack.activeInstances}dismissAll(T){this._modalStack.dismissAll(T)}hasOpenModals(){return this._modalStack.hasOpenModals()}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(r._Vd),r.LFG(r.zs3),r.LFG(gh),r.LFG(L_))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Kh=(()=>{class I{constructor(T){this._ngbConfig=T,this.destroyOnHide=!0,this.orientation="horizontal",this.roles="tablist",this.keyboard=!1}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(T){this._animation=T}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(Ul))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})();const vh=I=>ht(I)&&""!==I;let qh=0,Wf=(()=>{class I{constructor(T){this.templateRef=T}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.Rgc))},I.\u0275dir=r.lG2({type:I,selectors:[["ng-template","ngbNavContent",""]]}),I})(),yh=(()=>{class I{constructor(T,z){this.elementRef=z,this.disabled=!1,this.shown=new r.vpe,this.hidden=new r.vpe,this._nav=T}ngAfterContentChecked(){this.contentTpl=this.contentTpls.first}ngOnInit(){ht(this.domId)||(this.domId="ngb-nav-"+qh++)}get active(){return this._nav.activeId===this.id}get id(){return vh(this._id)?this._id:this.domId}get panelDomId(){return`${this.domId}-panel`}isPanelInDom(){return(ht(this.destroyOnHide)?!this.destroyOnHide:!this._nav.destroyOnHide)||this.active}}return I.\u0275fac=function(T){return new(T||I)(r.Y36((0,r.Gpc)(()=>Cp)),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbNavItem",""]],contentQueries:function(T,z,Me){if(1&T&&r.Suo(Me,Wf,4),2&T){let Ke;r.iGM(Ke=r.CRH())&&(z.contentTpls=Ke)}},hostVars:2,hostBindings:function(T,z){2&T&&r.ekj("nav-item",!0)},inputs:{destroyOnHide:"destroyOnHide",disabled:"disabled",domId:"domId",_id:["ngbNavItem","_id"]},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbNavItem"]}),I})(),Cp=(()=>{class I{constructor(T,z,Me,Ke){this.role=T,this._cd=Me,this._document=Ke,this.activeIdChange=new r.vpe,this.shown=new r.vpe,this.hidden=new r.vpe,this.destroy$=new p.xQ,this.navItemChange$=new p.xQ,this.navChange=new r.vpe,this.animation=z.animation,this.destroyOnHide=z.destroyOnHide,this.orientation=z.orientation,this.roles=z.roles,this.keyboard=z.keyboard}click(T){T.disabled||this._updateActiveId(T.id)}onKeyDown(T){if("tablist"!==this.roles||!this.keyboard)return;const z=T.which,Me=this.links.filter(yr=>!yr.navItem.disabled),{length:Ke}=Me;let gn=-1;if(Me.forEach((yr,Nr)=>{yr.elRef.nativeElement===this._document.activeElement&&(gn=Nr)}),Ke){switch(z){case de.ArrowLeft:if("vertical"===this.orientation)return;gn=(gn-1+Ke)%Ke;break;case de.ArrowRight:if("vertical"===this.orientation)return;gn=(gn+1)%Ke;break;case de.ArrowDown:if("horizontal"===this.orientation)return;gn=(gn+1)%Ke;break;case de.ArrowUp:if("horizontal"===this.orientation)return;gn=(gn-1+Ke)%Ke;break;case de.Home:gn=0;break;case de.End:gn=Ke-1}"changeWithArrows"===this.keyboard&&this.select(Me[gn].navItem.id),Me[gn].elRef.nativeElement.focus(),T.preventDefault()}}select(T){this._updateActiveId(T,!1)}ngAfterContentInit(){if(!ht(this.activeId)){const T=this.items.first?this.items.first.id:null;vh(T)&&(this._updateActiveId(T,!1),this._cd.detectChanges())}this.items.changes.pipe((0,Ge.R)(this.destroy$)).subscribe(()=>this._notifyItemChanged(this.activeId))}ngOnChanges({activeId:T}){T&&!T.firstChange&&this._notifyItemChanged(T.currentValue)}ngOnDestroy(){this.destroy$.next()}_updateActiveId(T,z=!0){if(this.activeId!==T){let Me=!1;z&&this.navChange.emit({activeId:this.activeId,nextId:T,preventDefault:()=>{Me=!0}}),Me||(this.activeId=T,this.activeIdChange.emit(T),this._notifyItemChanged(T))}}_notifyItemChanged(T){this.navItemChange$.next(this._getItemById(T))}_getItemById(T){return this.items&&this.items.find(z=>z.id===T)||null}}return I.\u0275fac=function(T){return new(T||I)(r.$8M("role"),r.Y36(Kh),r.Y36(r.sBO),r.Y36(a.K0))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbNav",""]],contentQueries:function(T,z,Me){if(1&T&&(r.Suo(Me,yh,4),r.Suo(Me,Cf,5)),2&T){let Ke;r.iGM(Ke=r.CRH())&&(z.items=Ke),r.iGM(Ke=r.CRH())&&(z.links=Ke)}},hostVars:6,hostBindings:function(T,z){1&T&&r.NdJ("keydown.arrowLeft",function(Ke){return z.onKeyDown(Ke)})("keydown.arrowRight",function(Ke){return z.onKeyDown(Ke)})("keydown.arrowDown",function(Ke){return z.onKeyDown(Ke)})("keydown.arrowUp",function(Ke){return z.onKeyDown(Ke)})("keydown.Home",function(Ke){return z.onKeyDown(Ke)})("keydown.End",function(Ke){return z.onKeyDown(Ke)}),2&T&&(r.uIk("aria-orientation","vertical"===z.orientation&&"tablist"===z.roles?"vertical":void 0)("role",z.role?z.role:z.roles?"tablist":void 0),r.ekj("nav",!0)("flex-column","vertical"===z.orientation))},inputs:{activeId:"activeId",animation:"animation",destroyOnHide:"destroyOnHide",orientation:"orientation",roles:"roles",keyboard:"keyboard"},outputs:{activeIdChange:"activeIdChange",shown:"shown",hidden:"hidden",navChange:"navChange"},exportAs:["ngbNav"],features:[r.TTD]}),I})(),Cf=(()=>{class I{constructor(T,z,Me,Ke){this.role=T,this.navItem=z,this.nav=Me,this.elRef=Ke}hasNavItemClass(){return this.navItem.elementRef.nativeElement.nodeType===Node.COMMENT_NODE}}return I.\u0275fac=function(T){return new(T||I)(r.$8M("role"),r.Y36(yh),r.Y36(Cp),r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["a","ngbNavLink",""]],hostAttrs:["href",""],hostVars:14,hostBindings:function(T,z){1&T&&r.NdJ("click",function(Ke){return z.nav.click(z.navItem),Ke.preventDefault()}),2&T&&(r.Ikx("id",z.navItem.domId),r.uIk("role",z.role?z.role:z.nav.roles?"tab":void 0)("tabindex",z.navItem.disabled?-1:void 0)("aria-controls",z.navItem.isPanelInDom()?z.navItem.panelDomId:null)("aria-selected",z.navItem.active)("aria-disabled",z.navItem.disabled),r.ekj("nav-link",!0)("nav-item",z.hasNavItemClass())("active",z.navItem.active)("disabled",z.navItem.disabled))}}),I})();const Eh=({classList:I})=>(I.remove("show"),()=>I.remove("active")),bh=(I,ne)=>{ne&&Lo(I),I.classList.add("show")};let da=(()=>{class I{constructor(T){this.elRef=T}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.SBq))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbNavPane",""]],hostAttrs:[1,"tab-pane"],hostVars:5,hostBindings:function(T,z){2&T&&(r.Ikx("id",z.item.panelDomId),r.uIk("role",z.role?z.role:z.nav.roles?"tabpanel":void 0)("aria-labelledby",z.item.domId),r.ekj("fade",z.nav.animation))},inputs:{item:"item",nav:"nav",role:"role"}}),I})(),wc=(()=>{class I{constructor(T,z){this._cd=T,this._ngZone=z,this._activePane=null}isPanelTransitioning(T){var z;return(null===(z=this._activePane)||void 0===z?void 0:z.item)===T}ngAfterViewInit(){var T;this._updateActivePane(),this.nav.navItemChange$.pipe((0,Ge.R)(this.nav.destroy$),(0,Qt.O)((null===(T=this._activePane)||void 0===T?void 0:T.item)||null),(0,Nt.x)(),function Fn(I){return ne=>ne.lift(new pr(I))}(1)).subscribe(z=>{const Me={animation:this.nav.animation,runningTransition:"stop"};this._cd.detectChanges(),this._activePane?rl(this._ngZone,this._activePane.elRef.nativeElement,Eh,Me).subscribe(()=>{var Ke;const gn=null===(Ke=this._activePane)||void 0===Ke?void 0:Ke.item;this._activePane=this._getPaneForItem(z),this._cd.markForCheck(),this._activePane&&(this._activePane.elRef.nativeElement.classList.add("active"),rl(this._ngZone,this._activePane.elRef.nativeElement,bh,Me).subscribe(()=>{z&&(z.shown.emit(),this.nav.shown.emit(z.id))})),gn&&(gn.hidden.emit(),this.nav.hidden.emit(gn.id))}):this._updateActivePane()})}_updateActivePane(){var T,z;this._activePane=this._getActivePane(),null===(T=this._activePane)||void 0===T||T.elRef.nativeElement.classList.add("show"),null===(z=this._activePane)||void 0===z||z.elRef.nativeElement.classList.add("active")}_getPaneForItem(T){return this._panes&&this._panes.find(z=>z.item===T)||null}_getActivePane(){return this._panes&&this._panes.find(T=>T.item.active)||null}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.sBO),r.Y36(r.R0b))},I.\u0275cmp=r.Xpm({type:I,selectors:[["","ngbNavOutlet",""]],viewQuery:function(T,z){if(1&T&&r.Gf(da,5),2&T){let Me;r.iGM(Me=r.CRH())&&(z._panes=Me)}},hostVars:2,hostBindings:function(T,z){2&T&&r.ekj("tab-content",!0)},inputs:{paneRole:"paneRole",nav:["ngbNavOutlet","nav"]},attrs:aa,decls:1,vars:1,consts:[["ngFor","",3,"ngForOf"],["ngbNavPane","",3,"item","nav","role",4,"ngIf"],["ngbNavPane","",3,"item","nav","role"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(T,z){1&T&&r.YNc(0,Sl,1,1,"ng-template",0),2&T&&r.Q6J("ngForOf",z.nav.items)},directives:[a.sg,a.O5,da,a.tP],encapsulation:2,changeDetection:0}),I})(),Ts=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[[a.ez]]}),I})();class cp{constructor(ne,T){this.open=ne,this.close=T,T||(this.close=ne)}isManual(){return"manual"===this.open||"manual"===this.close}}const Ps={hover:["mouseenter","mouseleave"],focus:["focusin","focusout"]},Bu=I=>I>0?(0,Ct.g)(I):ne=>ne;function Qf(I,ne,T,z,Me,Ke,gn=0,yr=0){const Nr=function Md(I,ne=Ps){const T=(I||"").trim();if(0===T.length)return[];const z=T.split(/\s+/).map(Ke=>Ke.split(":")).map(Ke=>{let gn=ne[Ke[0]]||Ke;return new cp(gn[0],gn[1])}),Me=z.filter(Ke=>Ke.isManual());if(Me.length>1)throw"Triggers parse error: only one manual trigger is allowed";if(1===Me.length&&z.length>1)throw"Triggers parse error: manual trigger can't be mixed with other triggers";return z}(T);if(1===Nr.length&&Nr[0].isManual())return()=>{};const vi=function dp(I,ne,T,z){return new f.y(Me=>{const Ke=[],gn=()=>Me.next(!0),yr=()=>Me.next(!1),Nr=()=>Me.next(!z());return T.forEach(vi=>{vi.open===vi.close?Ke.push(I.listen(ne,vi.open,Nr)):Ke.push(I.listen(ne,vi.open,gn),I.listen(ne,vi.close,yr))}),()=>{Ke.forEach(vi=>vi())}})}(I,ne,Nr,z).pipe(function jl(I,ne,T){return z=>{let Me=null;const Ke=z.pipe((0,We.U)(Nr=>({open:Nr})),(0,Oe.h)(Nr=>{const vi=T();return vi===Nr.open||Me&&Me.open!==vi?(Me&&Me.open!==Nr.open&&(Me=null),!1):(Me=Nr,!0)}),(0,ci.B)()),gn=Ke.pipe((0,Oe.h)(Nr=>Nr.open),Bu(I)),yr=Ke.pipe((0,Oe.h)(Nr=>!Nr.open),Bu(ne));return(0,Xe.T)(gn,yr).pipe((0,Oe.h)(Nr=>Nr===Me&&(Me=null,Nr.open!==T())),(0,We.U)(Nr=>Nr.open))}}(gn,yr,z)).subscribe(di=>di?Me():Ke());return()=>vi.unsubscribe()}let kf=(()=>{class I{constructor(T){this._ngbConfig=T,this.autoClose=!0,this.placement="auto",this.triggers="click",this.disablePopover=!1,this.openDelay=0,this.closeDelay=0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(T){this._animation=T}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(Ul))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Gp=0,e_=(()=>{class I{isTitleTemplate(){return this.title instanceof r.Rgc}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-popover-window"]],hostAttrs:["role","tooltip"],hostVars:5,hostBindings:function(T,z){2&T&&(r.Ikx("id",z.id),r.Tol("popover"+(z.popoverClass?" "+z.popoverClass:"")),r.ekj("fade",z.animation))},inputs:{animation:"animation",title:"title",id:"id",popoverClass:"popoverClass",context:"context"},ngContentSelectors:Xu,decls:4,vars:1,consts:[["data-popper-arrow","",1,"popover-arrow"],["class","popover-header",4,"ngIf"],[1,"popover-body"],[1,"popover-header"],["simpleTitle",""],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(T,z){1&T&&(r.F$t(),r._UZ(0,"div",0),r.YNc(1,Pr,4,2,"h3",1),r.TgZ(2,"div",2),r.Hsn(3),r.qZA()),2&T&&(r.xp6(1),r.Q6J("ngIf",z.title))},directives:[a.O5,a.tP],encapsulation:2,changeDetection:0}),I})(),nf=(()=>{class I{constructor(T,z,Me,Ke,gn,yr,Nr,vi,di){this._elementRef=T,this._renderer=z,this._ngZone=yr,this._document=Nr,this._changeDetector=vi,this.shown=new r.vpe,this.hidden=new r.vpe,this._ngbPopoverWindowId="ngb-popover-"+Gp++,this._windowRef=null,this._positioning=Ou(),this.animation=gn.animation,this.autoClose=gn.autoClose,this.placement=gn.placement,this.triggers=gn.triggers,this.container=gn.container,this.disablePopover=gn.disablePopover,this.popoverClass=gn.popoverClass,this.openDelay=gn.openDelay,this.closeDelay=gn.closeDelay,this._popupService=new zf(e_,Me,Ke,z,this._ngZone,di)}_isDisabled(){return!(!this.disablePopover&&(this.ngbPopover||this.popoverTitle))}open(T){if(!this._windowRef&&!this._isDisabled()){const{windowRef:z,transition$:Me}=this._popupService.open(this.ngbPopover,T,this.animation);this._windowRef=z,this._windowRef.instance.animation=this.animation,this._windowRef.instance.title=this.popoverTitle,this._windowRef.instance.context=T,this._windowRef.instance.popoverClass=this.popoverClass,this._windowRef.instance.id=this._ngbPopoverWindowId,this._renderer.setAttribute(this._elementRef.nativeElement,"aria-describedby",this._ngbPopoverWindowId),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._windowRef.changeDetectorRef.detectChanges(),this._windowRef.changeDetectorRef.markForCheck(),this._ngZone.runOutsideAngular(()=>{this._positioning.createPopper({hostElement:this._elementRef.nativeElement,targetElement:this._windowRef.location.nativeElement,placement:this.placement,appendToBody:"body"===this.container,baseClass:"bs-popover",updatePopperOptions:il([0,8])}),Promise.resolve().then(()=>{this._positioning.update(),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positioning.update())})}),Vn(this._ngZone,this._document,this.autoClose,()=>this.close(),this.hidden,[this._windowRef.location.nativeElement]),Me.subscribe(()=>this.shown.emit())}}close(T=this.animation){this._windowRef&&(this._renderer.removeAttribute(this._elementRef.nativeElement,"aria-describedby"),this._popupService.close(T).subscribe(()=>{var z;this._windowRef=null,this._positioning.destroy(),null===(z=this._zoneSubscription)||void 0===z||z.unsubscribe(),this.hidden.emit(),this._changeDetector.markForCheck()}))}toggle(){this._windowRef?this.close():this.open()}isOpen(){return null!=this._windowRef}ngOnInit(){this._unregisterListenersFn=Qf(this._renderer,this._elementRef.nativeElement,this.triggers,this.isOpen.bind(this),this.open.bind(this),this.close.bind(this),+this.openDelay,+this.closeDelay)}ngOnChanges({ngbPopover:T,popoverTitle:z,disablePopover:Me,popoverClass:Ke}){Ke&&this.isOpen()&&(this._windowRef.instance.popoverClass=Ke.currentValue),(T||z||Me)&&this._isDisabled()&&this.close()}ngOnDestroy(){var T;this.close(!1),null===(T=this._unregisterListenersFn)||void 0===T||T.call(this)}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(r.s_b),r.Y36(kf),r.Y36(r.R0b),r.Y36(a.K0),r.Y36(r.sBO),r.Y36(r.z2F))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbPopover",""]],inputs:{animation:"animation",autoClose:"autoClose",ngbPopover:"ngbPopover",popoverTitle:"popoverTitle",placement:"placement",triggers:"triggers",container:"container",disablePopover:"disablePopover",popoverClass:"popoverClass",openDelay:"openDelay",closeDelay:"closeDelay"},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbPopover"],features:[r.TTD]}),I})(),rf=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[[a.ez]]}),I})(),Ch=(()=>{class I{constructor(){this.max=100,this.animated=!1,this.striped=!1,this.showValue=!1}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),t_=(()=>{class I{constructor(T){this.value=0,this.max=T.max,this.animated=T.animated,this.striped=T.striped,this.textType=T.textType,this.type=T.type,this.showValue=T.showValue,this.height=T.height}set max(T){this._max=!Ae(T)||T<=0?100:T}get max(){return this._max}getValue(){return function rd(I,ne,T=0){return Math.max(Math.min(I,ne),T)}(this.value,this.max)}getPercentValue(){return 100*this.getValue()/this.max}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(Ch))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-progressbar"]],hostAttrs:[1,"progress"],hostVars:2,hostBindings:function(T,z){2&T&&r.Udp("height",z.height)},inputs:{max:"max",animated:"animated",striped:"striped",showValue:"showValue",textType:"textType",type:"type",value:"value",height:"height"},ngContentSelectors:Xu,decls:3,vars:11,consts:function(){let ne;return ne="" + "\ufffd0\ufffd" + "",[["role","progressbar","aria-valuemin","0"],[4,"ngIf"],ne]},template:function(T,z){1&T&&(r.F$t(),r.TgZ(0,"div",0),r.YNc(1,Yn,3,3,"span",1),r.Hsn(2),r.qZA()),2&T&&(r.DjV("progress-bar",z.type?" bg-"+z.type:"","",z.textType?" text-"+z.textType:"","\n    ",z.animated?" progress-bar-animated":"","",z.striped?" progress-bar-striped":"",""),r.Udp("width",z.getPercentValue(),"%"),r.uIk("aria-valuenow",z.getValue())("aria-valuemax",z.max),r.xp6(1),r.Q6J("ngIf",z.showValue))},directives:[a.O5],pipes:[a.Zx],encapsulation:2,changeDetection:0}),I})(),ud=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[[a.ez]]}),I})();class Gc{constructor(ne,T,z){this.hour=En(ne),this.minute=En(T),this.second=En(z)}changeHour(ne=1){this.updateHour((isNaN(this.hour)?0:this.hour)+ne)}updateHour(ne){this.hour=Ae(ne)?(ne<0?24+ne:ne)%24:NaN}changeMinute(ne=1){this.updateMinute((isNaN(this.minute)?0:this.minute)+ne)}updateMinute(ne){Ae(ne)?(this.minute=ne%60<0?60+ne%60:ne%60,this.changeHour(Math.floor(ne/60))):this.minute=NaN}changeSecond(ne=1){this.updateSecond((isNaN(this.second)?0:this.second)+ne)}updateSecond(ne){Ae(ne)?(this.second=ne<0?60+ne%60:ne%60,this.changeMinute(Math.floor(ne/60))):this.second=NaN}isValid(ne=!0){return Ae(this.hour)&&Ae(this.minute)&&(!ne||Ae(this.second))}toString(){return`${this.hour||0}:${this.minute||0}:${this.second||0}`}}let Xf=(()=>{class I{constructor(){this.meridian=!1,this.spinners=!0,this.seconds=!1,this.hourStep=1,this.minuteStep=1,this.secondStep=1,this.disabled=!1,this.readonlyInputs=!1,this.size="medium"}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Op=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:function(){return function pp(){return new Od}()},providedIn:"root"}),I})(),Od=(()=>{class I extends Op{fromModel(T){return T&&ge(T.hour)&&ge(T.minute)?{hour:T.hour,minute:T.minute,second:ge(T.second)?T.second:null}:null}toModel(T){return T&&ge(T.hour)&&ge(T.minute)?{hour:T.hour,minute:T.minute,second:ge(T.second)?T.second:null}:null}}return I.\u0275fac=function(){let ne;return function(z){return(ne||(ne=r.n5z(I)))(z||I)}}(),I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})(),Kf=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:function(T){let z=null;return z=T?new T:function Vp(I){return new n_(I)}(r.LFG(r.soG)),z},providedIn:"root"}),I})(),n_=(()=>{class I extends Kf{constructor(T){super(),this._periods=(0,a.ol)(T,a.x.Standalone,a.Tn.Narrow)}getMorningPeriod(){return this._periods[0]}getAfternoonPeriod(){return this._periods[1]}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(r.soG))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac}),I})();const r_=/[^0-9]/g;let Ap=(()=>{class I{constructor(T,z,Me,Ke){this._config=T,this._ngbTimeAdapter=z,this._cd=Me,this.i18n=Ke,this.onChange=gn=>{},this.onTouched=()=>{},this.meridian=T.meridian,this.spinners=T.spinners,this.seconds=T.seconds,this.hourStep=T.hourStep,this.minuteStep=T.minuteStep,this.secondStep=T.secondStep,this.disabled=T.disabled,this.readonlyInputs=T.readonlyInputs,this.size=T.size}set hourStep(T){this._hourStep=ge(T)?T:this._config.hourStep}get hourStep(){return this._hourStep}set minuteStep(T){this._minuteStep=ge(T)?T:this._config.minuteStep}get minuteStep(){return this._minuteStep}set secondStep(T){this._secondStep=ge(T)?T:this._config.secondStep}get secondStep(){return this._secondStep}writeValue(T){const z=this._ngbTimeAdapter.fromModel(T);this.model=z?new Gc(z.hour,z.minute,z.second):new Gc,!this.seconds&&(!z||!Ae(z.second))&&(this.model.second=0),this._cd.markForCheck()}registerOnChange(T){this.onChange=T}registerOnTouched(T){this.onTouched=T}setDisabledState(T){this.disabled=T}changeHour(T){this.model.changeHour(T),this.propagateModelChange()}changeMinute(T){this.model.changeMinute(T),this.propagateModelChange()}changeSecond(T){this.model.changeSecond(T),this.propagateModelChange()}updateHour(T){const z=this.model.hour>=12,Me=En(T);this.model.updateHour(this.meridian&&(z&&Me<12||!z&&12===Me)?Me+12:Me),this.propagateModelChange()}updateMinute(T){this.model.updateMinute(En(T)),this.propagateModelChange()}updateSecond(T){this.model.updateSecond(En(T)),this.propagateModelChange()}toggleMeridian(){this.meridian&&this.changeHour(12)}formatInput(T){T.value=T.value.replace(r_,"")}formatHour(T){return Ae(T)?sn(this.meridian?T%12==0?12:T%12:T%24):sn(NaN)}formatMinSec(T){return sn(Ae(T)?T:NaN)}handleBlur(){this.onTouched()}get isSmallSize(){return"small"===this.size}get isLargeSize(){return"large"===this.size}ngOnChanges(T){T.seconds&&!this.seconds&&this.model&&!Ae(this.model.second)&&(this.model.second=0,this.propagateModelChange(!1))}propagateModelChange(T=!0){T&&this.onTouched(),this.model.isValid(this.seconds)?this.onChange(this._ngbTimeAdapter.toModel({hour:this.model.hour,minute:this.model.minute,second:this.model.second})):this.onChange(this._ngbTimeAdapter.toModel(null))}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(Xf),r.Y36(Op),r.Y36(r.sBO),r.Y36(Kf))},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-timepicker"]],inputs:{meridian:"meridian",spinners:"spinners",seconds:"seconds",hourStep:"hourStep",minuteStep:"minuteStep",secondStep:"secondStep",readonlyInputs:"readonlyInputs",size:"size"},features:[r._Bn([{provide:hr.JU,useExisting:(0,r.Gpc)(()=>I),multi:!0}]),r.TTD],decls:16,vars:25,consts:function(){let ne,T,z,Me,Ke,gn,yr,Nr,vi,di,ts,Do,Ss,jo;return ne="HH",T="Hours",z="MM",Me="Minutes",Ke="Increment hours",gn="Decrement hours",yr="Increment minutes",Nr="Decrement minutes",vi="SS",di="Seconds",ts="Increment seconds",Do="Decrement seconds",Ss="" + "\ufffd0\ufffd" + "",jo="" + "\ufffd0\ufffd" + "",[[3,"disabled"],[1,"ngb-tp"],[1,"ngb-tp-input-container","ngb-tp-hour"],["tabindex","-1","type","button","class","btn btn-link",3,"btn-sm","btn-lg","disabled","click",4,"ngIf"],["type","text","maxlength","2","inputmode","numeric","placeholder",ne,"aria-label",T,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],[1,"ngb-tp-spacer"],[1,"ngb-tp-input-container","ngb-tp-minute"],["type","text","maxlength","2","inputmode","numeric","placeholder",z,"aria-label",Me,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],["class","ngb-tp-spacer",4,"ngIf"],["class","ngb-tp-input-container ngb-tp-second",4,"ngIf"],["class","ngb-tp-meridian",4,"ngIf"],["tabindex","-1","type","button",1,"btn","btn-link",3,"disabled","click"],[1,"chevron","ngb-tp-chevron"],[1,"visually-hidden"],Ke,[1,"chevron","ngb-tp-chevron","bottom"],gn,yr,Nr,[1,"ngb-tp-input-container","ngb-tp-second"],["type","text","maxlength","2","inputmode","numeric","placeholder",vi,"aria-label",di,1,"ngb-tp-input","form-control",3,"value","readOnly","disabled","change","blur","input","keydown.ArrowUp","keydown.ArrowDown"],ts,Do,[1,"ngb-tp-meridian"],["type","button",1,"btn","btn-outline-primary",3,"disabled","click"],[4,"ngIf","ngIfElse"],["am",""],Ss,jo]},template:function(T,z){1&T&&(r.TgZ(0,"fieldset",0)(1,"div",1)(2,"div",2),r.YNc(3,$s,4,7,"button",3),r.TgZ(4,"input",4),r.NdJ("change",function(Ke){return z.updateHour(Ke.target.value)})("blur",function(){return z.handleBlur()})("input",function(Ke){return z.formatInput(Ke.target)})("keydown.ArrowUp",function(Ke){return z.changeHour(z.hourStep),Ke.preventDefault()})("keydown.ArrowDown",function(Ke){return z.changeHour(-z.hourStep),Ke.preventDefault()}),r.qZA(),r.YNc(5,ls,4,7,"button",3),r.qZA(),r.TgZ(6,"div",5),r._uU(7,":"),r.qZA(),r.TgZ(8,"div",6),r.YNc(9,_l,4,7,"button",3),r.TgZ(10,"input",7),r.NdJ("change",function(Ke){return z.updateMinute(Ke.target.value)})("blur",function(){return z.handleBlur()})("input",function(Ke){return z.formatInput(Ke.target)})("keydown.ArrowUp",function(Ke){return z.changeMinute(z.minuteStep),Ke.preventDefault()})("keydown.ArrowDown",function(Ke){return z.changeMinute(-z.minuteStep),Ke.preventDefault()}),r.qZA(),r.YNc(11,Us,4,7,"button",3),r.qZA(),r.YNc(12,zc,2,0,"div",8),r.YNc(13,Su,4,9,"div",9),r.YNc(14,Zd,1,0,"div",8),r.YNc(15,Hc,5,9,"div",10),r.qZA()()),2&T&&(r.ekj("disabled",z.disabled),r.Q6J("disabled",z.disabled),r.xp6(3),r.Q6J("ngIf",z.spinners),r.xp6(1),r.ekj("form-control-sm",z.isSmallSize)("form-control-lg",z.isLargeSize),r.Q6J("value",z.formatHour(null==z.model?null:z.model.hour))("readOnly",z.readonlyInputs)("disabled",z.disabled),r.xp6(1),r.Q6J("ngIf",z.spinners),r.xp6(4),r.Q6J("ngIf",z.spinners),r.xp6(1),r.ekj("form-control-sm",z.isSmallSize)("form-control-lg",z.isLargeSize),r.Q6J("value",z.formatMinSec(null==z.model?null:z.model.minute))("readOnly",z.readonlyInputs)("disabled",z.disabled),r.xp6(1),r.Q6J("ngIf",z.spinners),r.xp6(1),r.Q6J("ngIf",z.seconds),r.xp6(1),r.Q6J("ngIf",z.seconds),r.xp6(1),r.Q6J("ngIf",z.meridian),r.xp6(1),r.Q6J("ngIf",z.meridian))},directives:[a.O5],styles:['ngb-timepicker{font-size:1rem}.ngb-tp{display:flex;align-items:center}.ngb-tp-input-container{width:4em}.ngb-tp-chevron:before{border-style:solid;border-width:.29em .29em 0 0;content:"";display:inline-block;height:.69em;left:.05em;position:relative;top:.15em;transform:rotate(-45deg);vertical-align:middle;width:.69em}.ngb-tp-chevron.bottom:before{top:-.3em;transform:rotate(135deg)}.ngb-tp-input{text-align:center}.ngb-tp-hour,.ngb-tp-minute,.ngb-tp-second,.ngb-tp-meridian{display:flex;flex-direction:column;align-items:center;justify-content:space-around}.ngb-tp-spacer{width:1em;text-align:center}\n'],encapsulation:2}),I})(),Zp=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[[a.ez]]}),I})(),y_=(()=>{class I{constructor(T){this._ngbConfig=T,this.autoClose=!0,this.placement="auto",this.triggers="hover focus",this.disableTooltip=!1,this.openDelay=0,this.closeDelay=0}get animation(){return void 0===this._animation?this._ngbConfig.animation:this._animation}set animation(T){this._animation=T}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(Ul))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),nm=0,Ah=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-tooltip-window"]],hostAttrs:["role","tooltip"],hostVars:5,hostBindings:function(T,z){2&T&&(r.Ikx("id",z.id),r.Tol("tooltip"+(z.tooltipClass?" "+z.tooltipClass:"")),r.ekj("fade",z.animation))},inputs:{animation:"animation",id:"id",tooltipClass:"tooltipClass"},ngContentSelectors:Xu,decls:3,vars:0,consts:[["data-popper-arrow","",1,"tooltip-arrow"],[1,"tooltip-inner"]],template:function(T,z){1&T&&(r.F$t(),r._UZ(0,"div",0),r.TgZ(1,"div",1),r.Hsn(2),r.qZA())},encapsulation:2,changeDetection:0}),I})(),E_=(()=>{class I{constructor(T,z,Me,Ke,gn,yr,Nr,vi,di){this._elementRef=T,this._renderer=z,this._ngZone=yr,this._document=Nr,this._changeDetector=vi,this.shown=new r.vpe,this.hidden=new r.vpe,this._ngbTooltipWindowId="ngb-tooltip-"+nm++,this._windowRef=null,this._positioning=Ou(),this.animation=gn.animation,this.autoClose=gn.autoClose,this.placement=gn.placement,this.triggers=gn.triggers,this.container=gn.container,this.disableTooltip=gn.disableTooltip,this.tooltipClass=gn.tooltipClass,this.openDelay=gn.openDelay,this.closeDelay=gn.closeDelay,this._popupService=new zf(Ah,Me,Ke,z,this._ngZone,di)}set ngbTooltip(T){this._ngbTooltip=T,!T&&this._windowRef&&this.close()}get ngbTooltip(){return this._ngbTooltip}open(T){if(!this._windowRef&&this._ngbTooltip&&!this.disableTooltip){const{windowRef:z,transition$:Me}=this._popupService.open(this._ngbTooltip,T,this.animation);this._windowRef=z,this._windowRef.instance.animation=this.animation,this._windowRef.instance.tooltipClass=this.tooltipClass,this._windowRef.instance.id=this._ngbTooltipWindowId,this._renderer.setAttribute(this._elementRef.nativeElement,"aria-describedby",this._ngbTooltipWindowId),"body"===this.container&&this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement),this._windowRef.changeDetectorRef.detectChanges(),this._windowRef.changeDetectorRef.markForCheck(),this._ngZone.runOutsideAngular(()=>{this._positioning.createPopper({hostElement:this._elementRef.nativeElement,targetElement:this._windowRef.location.nativeElement,placement:this.placement,appendToBody:"body"===this.container,baseClass:"bs-tooltip"}),Promise.resolve().then(()=>{this._positioning.update(),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positioning.update())})}),Vn(this._ngZone,this._document,this.autoClose,()=>this.close(),this.hidden,[this._windowRef.location.nativeElement]),Me.subscribe(()=>this.shown.emit())}}close(T=this.animation){null!=this._windowRef&&(this._renderer.removeAttribute(this._elementRef.nativeElement,"aria-describedby"),this._popupService.close(T).subscribe(()=>{var z;this._windowRef=null,this._positioning.destroy(),null===(z=this._zoneSubscription)||void 0===z||z.unsubscribe(),this.hidden.emit(),this._changeDetector.markForCheck()}))}toggle(){this._windowRef?this.close():this.open()}isOpen(){return null!=this._windowRef}ngOnInit(){this._unregisterListenersFn=Qf(this._renderer,this._elementRef.nativeElement,this.triggers,this.isOpen.bind(this),this.open.bind(this),this.close.bind(this),+this.openDelay,+this.closeDelay)}ngOnChanges({tooltipClass:T}){T&&this.isOpen()&&(this._windowRef.instance.tooltipClass=T.currentValue)}ngOnDestroy(){var T;this.close(!1),null===(T=this._unregisterListenersFn)||void 0===T||T.call(this)}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.SBq),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(r.s_b),r.Y36(y_),r.Y36(r.R0b),r.Y36(a.K0),r.Y36(r.sBO),r.Y36(r.z2F))},I.\u0275dir=r.lG2({type:I,selectors:[["","ngbTooltip",""]],inputs:{animation:"animation",autoClose:"autoClose",placement:"placement",triggers:"triggers",container:"container",disableTooltip:"disableTooltip",tooltipClass:"tooltipClass",openDelay:"openDelay",closeDelay:"closeDelay",ngbTooltip:"ngbTooltip"},outputs:{shown:"shown",hidden:"hidden"},exportAs:["ngbTooltip"],features:[r.TTD]}),I})(),$f=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({}),I})(),$_=(()=>{class I{constructor(){this.highlightClass="ngb-highlight",this.accentSensitive=!0}ngOnChanges(T){!this.accentSensitive&&!String.prototype.normalize&&(console.warn("The `accentSensitive` input in `ngb-highlight` cannot be set to `false` in a browser that does not implement the `String.normalize` function. You will have to include a polyfill in your application to use this feature in the current browser."),this.accentSensitive=!0);const z=pa(this.result),Me=Array.isArray(this.term)?this.term:[this.term],Ke=vi=>this.accentSensitive?vi:ms(vi),gn=Me.map(vi=>function Un(I){return I.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}(Ke(pa(vi)))).filter(vi=>vi),yr=this.accentSensitive?z:ms(z),Nr=gn.length?yr.split(new RegExp(`(${gn.join("|")})`,"gmi")):[z];if(this.accentSensitive)this.parts=Nr;else{let vi=0;this.parts=Nr.map(di=>z.substring(vi,vi+=di.length))}}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-highlight"]],inputs:{highlightClass:"highlightClass",result:"result",term:"term",accentSensitive:"accentSensitive"},features:[r.TTD],decls:1,vars:1,consts:[["ngFor","",3,"ngForOf"],[3,"class",4,"ngIf","ngIfElse"],["even",""]],template:function(T,z){1&T&&r.YNc(0,Ta,3,2,"ng-template",0),2&T&&r.Q6J("ngForOf",z.parts)},directives:[a.sg,a.O5],styles:[".ngb-highlight{font-weight:700}\n"],encapsulation:2,changeDetection:0}),I})(),b_=(()=>{class I{constructor(){this.activeIdx=0,this.focusFirst=!0,this.formatter=pa,this.selectEvent=new r.vpe,this.activeChangeEvent=new r.vpe}hasActive(){return this.activeIdx>-1&&this.activeIdx<this.results.length}getActive(){return this.results[this.activeIdx]}markActive(T){this.activeIdx=T,this._activeChanged()}next(){this.activeIdx===this.results.length-1?this.activeIdx=this.focusFirst?(this.activeIdx+1)%this.results.length:-1:this.activeIdx++,this._activeChanged()}prev(){this.activeIdx<0?this.activeIdx=this.results.length-1:0===this.activeIdx?this.activeIdx=this.focusFirst?this.results.length-1:-1:this.activeIdx--,this._activeChanged()}resetActive(){this.activeIdx=this.focusFirst?0:-1,this._activeChanged()}select(T){this.selectEvent.emit(T)}ngOnInit(){this.resetActive()}_activeChanged(){this.activeChangeEvent.emit(this.activeIdx>=0?this.id+"-"+this.activeIdx:void 0)}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275cmp=r.Xpm({type:I,selectors:[["ngb-typeahead-window"]],hostAttrs:["role","listbox"],hostVars:3,hostBindings:function(T,z){1&T&&r.NdJ("mousedown",function(Ke){return Ke.preventDefault()}),2&T&&(r.Ikx("id",z.id),r.Tol("dropdown-menu show"+(z.popupClass?" "+z.popupClass:"")))},inputs:{id:"id",focusFirst:"focusFirst",results:"results",term:"term",formatter:"formatter",resultTemplate:"resultTemplate",popupClass:"popupClass"},outputs:{selectEvent:"select",activeChangeEvent:"activeChange"},exportAs:["ngbTypeaheadWindow"],decls:3,vars:1,consts:[["rt",""],["ngFor","",3,"ngForOf"],[3,"result","term"],["type","button","role","option",1,"dropdown-item",3,"id","mouseenter","click"],[3,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(T,z){1&T&&(r.YNc(0,Tl,1,2,"ng-template",null,0,r.W1O),r.YNc(2,gc,2,9,"ng-template",1)),2&T&&(r.xp6(2),r.Q6J("ngForOf",z.results))},directives:[$_,a.sg,a.tP],encapsulation:2}),I})(),Mf=(()=>{class I{constructor(){this.editable=!0,this.focusFirst=!0,this.showHint=!1,this.placement=["bottom-start","bottom-end","top-start","top-end"]}}return I.\u0275fac=function(T){return new(T||I)},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})();const H_=new r.OlP("live announcer delay",{providedIn:"root",factory:function tp(){return 100}});function Dp(I,ne=!1){let T=I.body.querySelector("#ngb-live");return null==T&&ne&&(T=I.createElement("div"),T.setAttribute("id","ngb-live"),T.setAttribute("aria-live","polite"),T.setAttribute("aria-atomic","true"),T.classList.add("visually-hidden"),I.body.appendChild(T)),T}let xp=(()=>{class I{constructor(T,z){this._document=T,this._delay=z}ngOnDestroy(){const T=Dp(this._document);T&&T.parentElement.removeChild(T)}say(T){const z=Dp(this._document,!0),Me=this._delay;if(null!=z){z.textContent="";const Ke=()=>z.textContent=T;null===Me?Ke():setTimeout(Ke,Me)}}}return I.\u0275fac=function(T){return new(T||I)(r.LFG(a.K0),r.LFG(H_))},I.\u0275prov=r.Yz7({token:I,factory:I.\u0275fac,providedIn:"root"}),I})(),Ud=0,Rp=(()=>{class I{constructor(T,z,Me,Ke,gn,yr,Nr,vi,di,ts,Do){this._elementRef=T,this._renderer=Me,this._live=Nr,this._document=vi,this._ngZone=di,this._changeDetector=ts,this._subscription=null,this._closed$=new p.xQ,this._inputValueBackup=null,this._windowRef=null,this._positioning=Ou(),this.autocomplete="off",this.placement="bottom-start",this.selectItem=new r.vpe,this.activeDescendant=null,this.popupId="ngb-typeahead-"+Ud++,this._onTouched=()=>{},this._onChange=Ss=>{},this.container=gn.container,this.editable=gn.editable,this.focusFirst=gn.focusFirst,this.showHint=gn.showHint,this.placement=gn.placement,this._valueChanges=(0,g.R)(T.nativeElement,"input").pipe((0,We.U)(Ss=>Ss.target.value)),this._resubscribeTypeahead=new ue.X(null),this._popupService=new zf(b_,Ke,z,Me,this._ngZone,Do)}ngOnInit(){this._subscribeToUserInput()}ngOnChanges({ngbTypeahead:T}){T&&!T.firstChange&&(this._unsubscribeFromUserInput(),this._subscribeToUserInput())}ngOnDestroy(){this._closePopup(),this._unsubscribeFromUserInput()}registerOnChange(T){this._onChange=T}registerOnTouched(T){this._onTouched=T}writeValue(T){this._writeInputValue(this._formatItemForInput(T)),this.showHint&&(this._inputValueBackup=T)}setDisabledState(T){this._renderer.setProperty(this._elementRef.nativeElement,"disabled",T)}dismissPopup(){this.isPopupOpen()&&(this._resubscribeTypeahead.next(null),this._closePopup(),this.showHint&&null!==this._inputValueBackup&&this._writeInputValue(this._inputValueBackup),this._changeDetector.markForCheck())}isPopupOpen(){return null!=this._windowRef}handleBlur(){this._resubscribeTypeahead.next(null),this._onTouched()}handleKeyDown(T){if(this.isPopupOpen())switch(T.which){case de.ArrowDown:T.preventDefault(),this._windowRef.instance.next(),this._showHint();break;case de.ArrowUp:T.preventDefault(),this._windowRef.instance.prev(),this._showHint();break;case de.Enter:case de.Tab:{const z=this._windowRef.instance.getActive();ht(z)&&(T.preventDefault(),T.stopPropagation(),this._selectResult(z)),this._closePopup();break}}}_openPopup(){if(!this.isPopupOpen()){this._inputValueBackup=this._elementRef.nativeElement.value;const{windowRef:T}=this._popupService.open();this._windowRef=T,this._windowRef.instance.id=this.popupId,this._windowRef.instance.selectEvent.subscribe(z=>this._selectResultClosePopup(z)),this._windowRef.instance.activeChangeEvent.subscribe(z=>this.activeDescendant=z),this._windowRef.instance.popupClass=this.popupClass,"body"===this.container&&(this._renderer.setStyle(this._windowRef.location.nativeElement,"z-index","1055"),this._document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement)),this._changeDetector.markForCheck(),this._ngZone.runOutsideAngular(()=>{this._windowRef&&(this._positioning.createPopper({hostElement:this._elementRef.nativeElement,targetElement:this._windowRef.location.nativeElement,placement:this.placement,appendToBody:"body"===this.container,updatePopperOptions:il([0,2])}),this._zoneSubscription=this._ngZone.onStable.subscribe(()=>this._positioning.update()))}),Vn(this._ngZone,this._document,"outside",()=>this.dismissPopup(),this._closed$,[this._elementRef.nativeElement,this._windowRef.location.nativeElement])}}_closePopup(){this._popupService.close().subscribe(()=>{var T;this._positioning.destroy(),null===(T=this._zoneSubscription)||void 0===T||T.unsubscribe(),this._closed$.next(),this._windowRef=null,this.activeDescendant=null})}_selectResult(T){let z=!1;this.selectItem.emit({item:T,preventDefault:()=>{z=!0}}),this._resubscribeTypeahead.next(null),z||(this.writeValue(T),this._onChange(T))}_selectResultClosePopup(T){this._selectResult(T),this._closePopup()}_showHint(){var T;if(this.showHint&&(null===(T=this._windowRef)||void 0===T?void 0:T.instance.hasActive())&&null!=this._inputValueBackup){const z=this._inputValueBackup.toLowerCase(),Me=this._formatItemForInput(this._windowRef.instance.getActive());z===Me.substr(0,this._inputValueBackup.length).toLowerCase()?(this._writeInputValue(this._inputValueBackup+Me.substr(this._inputValueBackup.length)),this._elementRef.nativeElement.setSelectionRange.apply(this._elementRef.nativeElement,[this._inputValueBackup.length,Me.length])):this._writeInputValue(Me)}}_formatItemForInput(T){return null!=T&&this.inputFormatter?this.inputFormatter(T):pa(T)}_writeInputValue(T){this._renderer.setProperty(this._elementRef.nativeElement,"value",pa(T))}_subscribeToUserInput(){const T=this._valueChanges.pipe((0,dn.b)(z=>{this._inputValueBackup=this.showHint?z:null,this._onChange(this.editable?z:void 0)}),this.ngbTypeahead?this.ngbTypeahead:()=>(0,e.of)([]));this._subscription=this._resubscribeTypeahead.pipe((0,Yt.w)(()=>T)).subscribe(z=>{z&&0!==z.length?(this._openPopup(),this._windowRef.instance.focusFirst=this.focusFirst,this._windowRef.instance.results=z,this._windowRef.instance.term=this._elementRef.nativeElement.value,this.resultFormatter&&(this._windowRef.instance.formatter=this.resultFormatter),this.resultTemplate&&(this._windowRef.instance.resultTemplate=this.resultTemplate),this._windowRef.instance.resetActive(),this._windowRef.changeDetectorRef.detectChanges(),this._showHint()):this._closePopup();const Me=z?z.length:0;this._live.say(0===Me?"No results available":`${Me} result${1===Me?"":"s"} available`)})}_unsubscribeFromUserInput(){this._subscription&&this._subscription.unsubscribe(),this._subscription=null}}return I.\u0275fac=function(T){return new(T||I)(r.Y36(r.SBq),r.Y36(r.s_b),r.Y36(r.Qsj),r.Y36(r.zs3),r.Y36(Mf),r.Y36(r.R0b),r.Y36(xp),r.Y36(a.K0),r.Y36(r.R0b),r.Y36(r.sBO),r.Y36(r.z2F))},I.\u0275dir=r.lG2({type:I,selectors:[["input","ngbTypeahead",""]],hostAttrs:["autocapitalize","off","autocorrect","off","role","combobox","aria-multiline","false"],hostVars:7,hostBindings:function(T,z){1&T&&r.NdJ("blur",function(){return z.handleBlur()})("keydown",function(Ke){return z.handleKeyDown(Ke)}),2&T&&(r.Ikx("autocomplete",z.autocomplete),r.uIk("aria-autocomplete",z.showHint?"both":"list")("aria-activedescendant",z.activeDescendant)("aria-owns",z.isPopupOpen()?z.popupId:null)("aria-expanded",z.isPopupOpen()),r.ekj("open",z.isPopupOpen()))},inputs:{autocomplete:"autocomplete",container:"container",editable:"editable",focusFirst:"focusFirst",inputFormatter:"inputFormatter",ngbTypeahead:"ngbTypeahead",resultFormatter:"resultFormatter",resultTemplate:"resultTemplate",showHint:"showHint",placement:"placement",popupClass:"popupClass"},outputs:{selectItem:"selectItem"},exportAs:["ngbTypeahead"],features:[r._Bn([{provide:hr.JU,useExisting:(0,r.Gpc)(()=>I),multi:!0}]),r.TTD]}),I})(),i_=(()=>{class I{}return I.\u0275fac=function(T){return new(T||I)},I.\u0275mod=r.oAB({type:I}),I.\u0275inj=r.cJS({imports:[[a.ez]]}),I})()},1851:(v,b,i)=>{"use strict";i.d(b,{z:()=>Re});var r=i(89724),a=i(11048),f=i(90645),u=i(1659);function e(Se,dt){1&Se&&(r.TgZ(0,"span",9),r._uU(1,"*"),r.qZA())}function p(Se,dt){if(1&Se&&(r.TgZ(0,"label",7),r._uU(1),r.YNc(2,e,2,0,"span",8),r.qZA()),2&Se){const st=r.oxw(2);r.uIk("for",st.id),r.xp6(1),r.hij(" ",st.props.label," "),r.xp6(1),r.Q6J("ngIf",st.props.required&&!0!==st.props.hideRequiredMarker)}}function g(Se,dt){if(1&Se&&r.YNc(0,p,3,3,"label",6),2&Se){const st=r.oxw();r.Q6J("ngIf",st.props.label&&!0!==st.props.hideLabel)}}function S(Se,dt){if(1&Se&&(r.ynx(0),r.GkF(1,10),r.BQk()),2&Se){r.oxw();const st=r.MAs(1);r.xp6(1),r.Q6J("ngTemplateOutlet",st)}}function M(Se,dt){}function w(Se,dt){if(1&Se&&(r.ynx(0),r.GkF(1,10),r.BQk()),2&Se){r.oxw();const st=r.MAs(1);r.xp6(1),r.Q6J("ngTemplateOutlet",st)}}function x(Se,dt){if(1&Se&&(r.TgZ(0,"div",11),r._UZ(1,"formly-validation-message",12),r.qZA()),2&Se){const st=r.oxw();r.Udp("display","block"),r.xp6(1),r.Q6J("field",st.field)}}function B(Se,dt){if(1&Se&&(r.TgZ(0,"small",13),r._uU(1),r.qZA()),2&Se){const st=r.oxw();r.xp6(1),r.Oqu(st.props.description)}}const W=["fieldTypeTemplate"];let j=(()=>{class Se extends f.n2{}return Se.\u0275fac=function(){let dt;return function(nn){return(dt||(dt=r.n5z(Se)))(nn||Se)}}(),Se.\u0275cmp=r.Xpm({type:Se,selectors:[["formly-wrapper-form-field"]],features:[r.qOj],decls:9,vars:8,consts:[["labelTemplate",""],[1,"mb-3"],[4,"ngIf"],["fieldComponent",""],["class","invalid-feedback",3,"display",4,"ngIf"],["class","form-text text-muted",4,"ngIf"],["class","form-label",4,"ngIf"],[1,"form-label"],["aria-hidden","true",4,"ngIf"],["aria-hidden","true"],[3,"ngTemplateOutlet"],[1,"invalid-feedback"],[3,"field"],[1,"form-text","text-muted"]],template:function(st,nn){1&st&&(r.YNc(0,g,1,1,"ng-template",null,0,r.W1O),r.TgZ(2,"div",1),r.YNc(3,S,2,1,"ng-container",2),r.YNc(4,M,0,0,"ng-template",null,3,r.W1O),r.YNc(6,w,2,1,"ng-container",2),r.YNc(7,x,2,3,"div",4),r.YNc(8,B,2,1,"small",5),r.qZA()),2&st&&(r.xp6(2),r.ekj("form-floating","floating"===nn.props.labelPosition)("has-error",nn.showError),r.xp6(1),r.Q6J("ngIf","floating"!==nn.props.labelPosition),r.xp6(3),r.Q6J("ngIf","floating"===nn.props.labelPosition),r.xp6(1),r.Q6J("ngIf",nn.showError),r.xp6(1),r.Q6J("ngIf",nn.props.description))},directives:[f.M2,a.O5,a.tP],encapsulation:2}),Se})(),q=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[a.ez,u.UX,f.X0.forChild({wrappers:[{name:"form-field",component:j}]})]]}),Se})(),ue=(()=>{class Se extends f.fS{constructor(st){super(),this.hostContainerRef=st}set content(st){st&&this.hostContainerRef&&this.hostContainerRef.createEmbeddedView(st)}}return Se.\u0275fac=function(st){return new(st||Se)(r.Y36(r.s_b,8))},Se.\u0275dir=r.lG2({type:Se,viewQuery:function(st,nn){if(1&st&&r.Gf(W,7),2&st){let Fe;r.iGM(Fe=r.CRH())&&(nn.content=Fe.first)}},features:[r.qOj]}),Se})();function re(Se,dt){if(1&Se&&r._UZ(0,"input",3),2&Se){const st=r.oxw(2);r.ekj("is-invalid",st.showError),r.Q6J("type",st.type)("formControl",st.formControl)("formlyAttributes",st.field)}}function H(Se,dt){if(1&Se&&r._UZ(0,"input",4),2&Se){const st=r.oxw(2);r.ekj("is-invalid",st.showError),r.Q6J("formControl",st.formControl)("formlyAttributes",st.field)}}function se(Se,dt){if(1&Se&&(r.YNc(0,re,1,5,"input",1),r.YNc(1,H,1,4,"ng-template",null,2,r.W1O)),2&Se){const st=r.MAs(2),nn=r.oxw();r.Q6J("ngIf","number"!==nn.type)("ngIfElse",st)}}let ae=(()=>{class Se extends ue{get type(){return this.props.type||"text"}}return Se.\u0275fac=function(){let dt;return function(nn){return(dt||(dt=r.n5z(Se)))(nn||Se)}}(),Se.\u0275cmp=r.Xpm({type:Se,selectors:[["formly-field-input"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],["class","form-control",3,"type","formControl","formlyAttributes","is-invalid",4,"ngIf","ngIfElse"],["numberTmp",""],[1,"form-control",3,"type","formControl","formlyAttributes"],["type","number",1,"form-control",3,"formControl","formlyAttributes"]],template:function(st,nn){1&st&&r.YNc(0,se,3,2,"ng-template",null,0,r.W1O)},directives:[a.O5,u.Fj,u.JJ,u.oH,f.JD,u.wV],encapsulation:2,changeDetection:0}),Se})(),ie=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[a.ez,u.UX,q,f.X0.forChild({types:[{name:"input",component:ae,wrappers:["form-field"]},{name:"string",extends:"input"},{name:"number",extends:"input",defaultOptions:{props:{type:"number"}}},{name:"integer",extends:"input",defaultOptions:{props:{type:"number"}}}]})]]}),Se})();function fe(Se,dt){if(1&Se&&(r.TgZ(0,"textarea",1),r._uU(1,"      "),r.qZA()),2&Se){const st=r.oxw();r.ekj("is-invalid",st.showError),r.Q6J("formControl",st.formControl)("cols",st.props.cols)("rows",st.props.rows)("formlyAttributes",st.field)}}let he=(()=>{class Se extends ue{constructor(){super(...arguments),this.defaultOptions={props:{cols:1,rows:1}}}}return Se.\u0275fac=function(){let dt;return function(nn){return(dt||(dt=r.n5z(Se)))(nn||Se)}}(),Se.\u0275cmp=r.Xpm({type:Se,selectors:[["formly-field-textarea"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],[1,"form-control",3,"formControl","cols","rows","formlyAttributes"]],template:function(st,nn){1&st&&r.YNc(0,fe,2,6,"ng-template",null,0,r.W1O)},directives:[u.Fj,u.JJ,u.oH,f.JD],encapsulation:2,changeDetection:0}),Se})(),Ce=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[a.ez,u.UX,q,f.X0.forChild({types:[{name:"textarea",component:he,wrappers:["form-field"]}]})]]}),Se})();var ce=i(70882),Be=i(26215),Ve=i(88002),Xe=i(45435),He=i(68307);let Pe=(()=>{class Se{transform(st,nn){return st instanceof ce.y?this.dispose():st=this.observableOf(st,nn),st.pipe((0,Ve.U)(Fe=>this.transformOptions(Fe,nn)))}ngOnDestroy(){this.dispose()}transformOptions(st,nn){const Fe=this.transformSelectProps(nn),Lr=[],ti={};return null==st||st.forEach(Ut=>{const Dn=this.transformOption(Ut,Fe);if(Dn.group){const Et=ti[Dn.label];void 0===Et?ti[Dn.label]=Lr.push(Dn)-1:Dn.group.forEach($t=>Lr[Et].group.push($t))}else Lr.push(Dn)}),Lr}transformOption(st,nn){const Fe=nn.groupProp(st);return Array.isArray(Fe)?{label:nn.labelProp(st),group:Fe.map(Lr=>this.transformOption(Lr,nn))}:(st={label:nn.labelProp(st),value:nn.valueProp(st),disabled:!!nn.disabledProp(st)},Fe?{label:Fe,group:[st]}:st)}transformSelectProps(st){const nn=(null==st?void 0:st.props)||(null==st?void 0:st.templateOptions)||{},Fe=Lr=>"function"==typeof Lr?Lr:ti=>ti[Lr];return{groupProp:Fe(nn.groupProp||"group"),labelProp:Fe(nn.labelProp||"label"),valueProp:Fe(nn.valueProp||"value"),disabledProp:Fe(nn.disabledProp||"disabled")}}dispose(){this._options&&(this._options.complete(),this._options=null),this._subscription&&(this._subscription.unsubscribe(),this._subscription=null)}observableOf(st,nn){return this.dispose(),nn&&nn.options&&nn.options.fieldChanges&&(this._subscription=nn.options.fieldChanges.pipe((0,Xe.h)(({property:Fe,type:Lr,field:ti})=>"expressionChanges"===Lr&&(0===Fe.indexOf("templateOptions.options")||0===Fe.indexOf("props.options"))&&ti===nn&&Array.isArray(ti.props.options)&&!!this._options),(0,He.b)(()=>this._options.next(nn.props.options))).subscribe()),this._options=new Be.X(st),this._options.asObservable()}}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275pipe=r.Yjl({name:"formlySelectOptions",type:Se,pure:!0}),Se})(),Ge=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({}),Se})();function Oe(Se,dt){if(1&Se&&(r.TgZ(0,"div",2),r._UZ(1,"input",3),r.TgZ(2,"label",4),r._uU(3),r.qZA()()),2&Se){const st=dt.$implicit,nn=dt.index,Fe=r.oxw(2);r.ekj("form-check-inline","inline"===Fe.props.formCheck),r.xp6(1),r.ekj("is-invalid",Fe.showError),r.Q6J("id",Fe.id+"_"+nn)("name",Fe.field.name||Fe.id)("value",st.value)("formControl",st.disabled?Fe.disabledControl:Fe.formControl)("formlyAttributes",Fe.field),r.uIk("value",st.value),r.xp6(1),r.Q6J("for",Fe.id+"_"+nn),r.xp6(1),r.hij(" ",st.label," ")}}function Tt(Se,dt){if(1&Se&&(r.YNc(0,Oe,4,12,"div",1),r.ALo(1,"async"),r.ALo(2,"formlySelectOptions")),2&Se){const st=r.oxw();r.Q6J("ngForOf",r.lcZ(1,1,r.xi3(2,3,st.props.options,st.field)))}}let We=(()=>{class Se extends ue{constructor(){super(...arguments),this.defaultOptions={props:{formCheck:"default"}}}get disabledControl(){return new u.NI({value:this.formControl.value,disabled:!0})}}return Se.\u0275fac=function(){let dt;return function(nn){return(dt||(dt=r.n5z(Se)))(nn||Se)}}(),Se.\u0275cmp=r.Xpm({type:Se,selectors:[["formly-field-radio"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],["class","form-check",3,"form-check-inline",4,"ngFor","ngForOf"],[1,"form-check"],["type","radio",1,"form-check-input",3,"id","name","value","formControl","formlyAttributes"],[1,"form-check-label",3,"for"]],template:function(st,nn){1&st&&r.YNc(0,Tt,3,6,"ng-template",null,0,r.W1O)},directives:[a.sg,u._,u.Fj,u.JJ,u.oH,f.JD],pipes:[a.Ov,Pe],encapsulation:2,changeDetection:0}),Se})(),Qt=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[a.ez,u.UX,q,Ge,f.X0.forChild({types:[{name:"radio",component:We,wrappers:["form-field"]}]})]]}),Se})();function Nt(Se,dt){1&Se&&(r.TgZ(0,"span",6),r._uU(1,"*"),r.qZA())}function Yt(Se,dt){if(1&Se&&(r.TgZ(0,"label",4),r._uU(1),r.YNc(2,Nt,2,0,"span",5),r.qZA()),2&Se){const st=r.oxw(2);r.Q6J("for",st.id),r.xp6(1),r.hij(" ",st.props.label," "),r.xp6(1),r.Q6J("ngIf",st.props.required&&!0!==st.props.hideRequiredMarker)}}const dn=function(Se,dt){return{"form-check-inline":Se,"form-switch":dt}};function rn(Se,dt){if(1&Se&&(r.TgZ(0,"div",1),r._UZ(1,"input",2),r.YNc(2,Yt,3,3,"label",3),r.qZA()),2&Se){const st=r.oxw();r.Q6J("ngClass",r.WLB(9,dn,"inline"===st.props.formCheck||"inline-switch"===st.props.formCheck,"switch"===st.props.formCheck||"inline-switch"===st.props.formCheck)),r.xp6(1),r.ekj("is-invalid",st.showError)("position-static","nolabel"===st.props.formCheck),r.Q6J("indeterminate",st.props.indeterminate&&null==st.formControl.value)("formControl",st.formControl)("formlyAttributes",st.field),r.xp6(1),r.Q6J("ngIf","nolabel"!==st.props.formCheck)}}let vt=(()=>{class Se extends ue{constructor(){super(...arguments),this.defaultOptions={props:{indeterminate:!0,hideLabel:!0,formCheck:"default"}}}}return Se.\u0275fac=function(){let dt;return function(nn){return(dt||(dt=r.n5z(Se)))(nn||Se)}}(),Se.\u0275cmp=r.Xpm({type:Se,selectors:[["formly-field-checkbox"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],[1,"form-check",3,"ngClass"],["type","checkbox",1,"form-check-input",3,"indeterminate","formControl","formlyAttributes"],["class","form-check-label",3,"for",4,"ngIf"],[1,"form-check-label",3,"for"],["aria-hidden","true",4,"ngIf"],["aria-hidden","true"]],template:function(st,nn){1&st&&r.YNc(0,rn,3,12,"ng-template",null,0,r.W1O)},directives:[a.mk,u.Wl,u.JJ,u.oH,f.JD,a.O5],encapsulation:2,changeDetection:0}),Se})(),xt=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[a.ez,u.UX,q,f.X0.forChild({types:[{name:"checkbox",component:vt,wrappers:["form-field"]},{name:"boolean",extends:"checkbox"}]})]]}),Se})();const Ct=function(Se,dt){return{"form-check-inline":Se,"form-switch":dt}};function Gt(Se,dt){if(1&Se){const st=r.EpF();r.TgZ(0,"div",2)(1,"input",3),r.NdJ("change",function(Fe){const ti=r.CHM(st).$implicit;return r.oxw(2).onChange(ti.value,Fe.target.checked)}),r.qZA(),r.TgZ(2,"label",4),r._uU(3),r.qZA()()}if(2&Se){const st=dt.$implicit,nn=dt.index,Fe=r.oxw(2);r.Q6J("ngClass",r.WLB(8,Ct,"inline"===Fe.props.formCheck||"inline-switch"===Fe.props.formCheck,"switch"===Fe.props.formCheck||"inline-switch"===Fe.props.formCheck)),r.xp6(1),r.Q6J("id",Fe.id+"_"+nn)("value",st.value)("checked",Fe.isChecked(st))("formlyAttributes",Fe.field)("disabled",Fe.formControl.disabled||st.disabled),r.xp6(1),r.Q6J("for",Fe.id+"_"+nn),r.xp6(1),r.hij(" ",st.label," ")}}function Fn(Se,dt){if(1&Se&&(r.YNc(0,Gt,4,11,"div",1),r.ALo(1,"async"),r.ALo(2,"formlySelectOptions")),2&Se){const st=r.oxw();r.Q6J("ngForOf",r.lcZ(1,1,r.xi3(2,3,st.props.options,st.field)))}}let pr=(()=>{class Se extends ue{constructor(){super(...arguments),this.defaultOptions={props:{formCheck:"default"}}}onChange(st,nn){this.formControl.markAsDirty(),this.formControl.patchValue("array"===this.props.type?nn?[...this.formControl.value||[],st]:[...this.formControl.value||[]].filter(Fe=>Fe!==st):Object.assign(Object.assign({},this.formControl.value),{[st]:nn})),this.formControl.markAsTouched()}isChecked(st){const nn=this.formControl.value;return nn&&("array"===this.props.type?-1!==nn.indexOf(st.value):nn[st.value])}}return Se.\u0275fac=function(){let dt;return function(nn){return(dt||(dt=r.n5z(Se)))(nn||Se)}}(),Se.\u0275cmp=r.Xpm({type:Se,selectors:[["formly-field-multicheckbox"]],features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],["class","form-check",3,"ngClass",4,"ngFor","ngForOf"],[1,"form-check",3,"ngClass"],["type","checkbox",1,"form-check-input",3,"id","value","checked","formlyAttributes","disabled","change"],[1,"form-check-label",3,"for"]],template:function(st,nn){1&st&&r.YNc(0,Fn,3,6,"ng-template",null,0,r.W1O)},directives:[a.sg,a.mk,f.JD],pipes:[a.Ov,Pe],encapsulation:2,changeDetection:0}),Se})(),mi=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[a.ez,u.UX,q,Ge,f.X0.forChild({types:[{name:"multicheckbox",component:pr,wrappers:["form-field"]}]})]]}),Se})();var ci=i(15257);function hr(Se,dt){if(1&Se&&(r.TgZ(0,"option",8),r._uU(1),r.qZA()),2&Se){const st=r.oxw().$implicit;r.Q6J("ngValue",st.value)("disabled",st.disabled),r.xp6(1),r.hij(" ",st.label," ")}}function Br(Se,dt){if(1&Se&&(r.TgZ(0,"option",8),r._uU(1),r.qZA()),2&Se){const st=dt.$implicit;r.Q6J("ngValue",st.value)("disabled",st.disabled),r.xp6(1),r.hij(" ",st.label," ")}}function Ur(Se,dt){if(1&Se&&(r.TgZ(0,"optgroup",9),r.YNc(1,Br,2,3,"option",10),r.qZA()),2&Se){const st=r.oxw().$implicit;r.Q6J("label",st.label),r.xp6(1),r.Q6J("ngForOf",st.group)}}function Hn(Se,dt){if(1&Se&&(r.ynx(0),r.YNc(1,hr,2,3,"option",6),r.YNc(2,Ur,2,2,"ng-template",null,7,r.W1O),r.BQk()),2&Se){const st=dt.$implicit,nn=r.MAs(3);r.xp6(1),r.Q6J("ngIf",!st.group)("ngIfElse",nn)}}function er(Se,dt){if(1&Se&&(r.ynx(0),r.YNc(1,Hn,4,2,"ng-container",5),r.BQk()),2&Se){const st=dt.ngIf;r.xp6(1),r.Q6J("ngForOf",st)}}function _r(Se,dt){if(1&Se&&(r.TgZ(0,"select",3),r.YNc(1,er,2,1,"ng-container",4),r.ALo(2,"async"),r.ALo(3,"formlySelectOptions"),r.qZA()),2&Se){const st=r.oxw(2);r.ekj("is-invalid",st.showError),r.Q6J("formControl",st.formControl)("compareWith",st.props.compareWith)("formlyAttributes",st.field),r.xp6(1),r.Q6J("ngIf",r.lcZ(2,6,r.xi3(3,8,st.props.options,st.field)))}}function ei(Se,dt){if(1&Se&&(r.TgZ(0,"option",13),r._uU(1),r.qZA()),2&Se){const st=r.oxw(3);r.Q6J("ngValue",void 0),r.xp6(1),r.Oqu(st.props.placeholder)}}function bi(Se,dt){if(1&Se&&(r.TgZ(0,"option",8),r._uU(1),r.qZA()),2&Se){const st=r.oxw().$implicit;r.Q6J("ngValue",st.value)("disabled",st.disabled),r.xp6(1),r.hij(" ",st.label," ")}}function fi(Se,dt){if(1&Se&&(r.TgZ(0,"option",8),r._uU(1),r.qZA()),2&Se){const st=dt.$implicit;r.Q6J("ngValue",st.value)("disabled",st.disabled),r.xp6(1),r.hij(" ",st.label," ")}}function no(Se,dt){if(1&Se&&(r.TgZ(0,"optgroup",9),r.YNc(1,fi,2,3,"option",10),r.qZA()),2&Se){const st=r.oxw().$implicit;r.Q6J("label",st.label),r.xp6(1),r.Q6J("ngForOf",st.group)}}function xo(Se,dt){if(1&Se&&(r.ynx(0),r.YNc(1,bi,2,3,"option",6),r.YNc(2,no,2,2,"ng-template",null,7,r.W1O),r.BQk()),2&Se){const st=dt.$implicit,nn=r.MAs(3);r.xp6(1),r.Q6J("ngIf",!st.group)("ngIfElse",nn)}}function Er(Se,dt){if(1&Se&&(r.ynx(0),r.YNc(1,xo,4,2,"ng-container",5),r.BQk()),2&Se){const st=dt.ngIf;r.xp6(1),r.Q6J("ngForOf",st)}}function an(Se,dt){if(1&Se&&(r.TgZ(0,"select",11),r.YNc(1,ei,2,2,"option",12),r.YNc(2,Er,2,1,"ng-container",4),r.ALo(3,"async"),r.ALo(4,"formlySelectOptions"),r.qZA()),2&Se){const st=r.oxw(2);r.ekj("is-invalid",st.showError),r.Q6J("formControl",st.formControl)("compareWith",st.props.compareWith)("formlyAttributes",st.field),r.xp6(1),r.Q6J("ngIf",st.props.placeholder),r.xp6(1),r.Q6J("ngIf",r.lcZ(3,7,r.xi3(4,9,st.props.options,st.field)))}}function vn(Se,dt){if(1&Se&&(r.YNc(0,_r,4,11,"select",1),r.YNc(1,an,5,12,"ng-template",null,2,r.W1O)),2&Se){const st=r.MAs(2),nn=r.oxw();r.Q6J("ngIf",nn.props.multiple)("ngIfElse",st)}}let Zn=(()=>{class Se extends ue{constructor(st,nn){super(nn),this.ngZone=st,this.defaultOptions={props:{compareWith:(Fe,Lr)=>Fe===Lr}}}set selectAccessor(st){if(!st)return;const nn=st.writeValue.bind(st);null===st._getOptionId(st.value)&&nn(st.value),st.writeValue=Fe=>{const Lr=st._idCounter;nn(Fe),null===Fe&&this.ngZone.onStable.asObservable().pipe((0,ci.q)(1)).subscribe(()=>{Lr!==st._idCounter&&null===st._getOptionId(Fe)&&-1!==st._elementRef.nativeElement.selectedIndex&&nn(Fe)})}}}return Se.\u0275fac=function(st){return new(st||Se)(r.Y36(r.R0b),r.Y36(r.s_b))},Se.\u0275cmp=r.Xpm({type:Se,selectors:[["formly-field-select"]],viewQuery:function(st,nn){if(1&st&&r.Gf(u.EJ,5),2&st){let Fe;r.iGM(Fe=r.CRH())&&(nn.selectAccessor=Fe.first)}},features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],["class","form-select","multiple","",3,"formControl","compareWith","is-invalid","formlyAttributes",4,"ngIf","ngIfElse"],["singleSelect",""],["multiple","",1,"form-select",3,"formControl","compareWith","formlyAttributes"],[4,"ngIf"],[4,"ngFor","ngForOf"],[3,"ngValue","disabled",4,"ngIf","ngIfElse"],["optgroup",""],[3,"ngValue","disabled"],[3,"label"],[3,"ngValue","disabled",4,"ngFor","ngForOf"],[1,"form-select",3,"formControl","compareWith","formlyAttributes"],[3,"ngValue",4,"ngIf"],[3,"ngValue"]],template:function(st,nn){1&st&&r.YNc(0,vn,3,2,"ng-template",null,0,r.W1O)},directives:[a.O5,u.K7,u.JJ,u.oH,f.JD,a.sg,u.YN,u.Kr,u.EJ],pipes:[a.Ov,Pe],encapsulation:2,changeDetection:0}),Se})(),Xn=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[a.ez,u.UX,q,Ge,f.X0.forChild({types:[{name:"select",component:Zn,wrappers:["form-field"]},{name:"enum",extends:"select"}]})]]}),Se})();const zn=["fieldTypeTemplate"];function ri(Se,dt){if(1&Se&&r._UZ(0,"i",7),2&Se){const st=r.oxw(3);r.Q6J("ngClass",st.props.addonLeft.class)}}function Gi(Se,dt){if(1&Se&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&Se){const st=r.oxw(3);r.xp6(1),r.Oqu(st.props.addonLeft.text)}}function ui(Se,dt){if(1&Se){const st=r.EpF();r.TgZ(0,"div",4),r.NdJ("click",function(Fe){return r.CHM(st),r.oxw(2).addonLeftClick(Fe)}),r.YNc(1,ri,1,1,"i",5),r.YNc(2,Gi,2,1,"span",6),r.qZA()}if(2&Se){const st=r.oxw(2);r.ekj("input-group-btn",st.props.addonLeft.onClick),r.xp6(1),r.Q6J("ngIf",st.props.addonLeft.class),r.xp6(1),r.Q6J("ngIf",st.props.addonLeft.text)}}function vr(Se,dt){if(1&Se&&r._UZ(0,"i",7),2&Se){const st=r.oxw(3);r.Q6J("ngClass",st.props.addonRight.class)}}function Ji(Se,dt){if(1&Se&&(r.TgZ(0,"span"),r._uU(1),r.qZA()),2&Se){const st=r.oxw(3);r.xp6(1),r.Oqu(st.props.addonRight.text)}}function mn(Se,dt){if(1&Se){const st=r.EpF();r.TgZ(0,"div",4),r.NdJ("click",function(Fe){return r.CHM(st),r.oxw(2).addonRightClick(Fe)}),r.YNc(1,vr,1,1,"i",5),r.YNc(2,Ji,2,1,"span",6),r.qZA()}if(2&Se){const st=r.oxw(2);r.ekj("input-group-btn",st.props.addonRight.onClick),r.xp6(1),r.Q6J("ngIf",st.props.addonRight.class),r.xp6(1),r.Q6J("ngIf",st.props.addonRight.text)}}function Rn(Se,dt){if(1&Se&&(r.TgZ(0,"div",1),r.YNc(1,ui,3,4,"div",2),r.GkF(2,null,3),r.YNc(4,mn,3,4,"div",2),r.qZA()),2&Se){const st=r.oxw();r.ekj("has-validation",st.showError),r.xp6(1),r.Q6J("ngIf",st.props.addonLeft),r.xp6(3),r.Q6J("ngIf",st.props.addonRight)}}let Wn=(()=>{class Se extends f.n2{constructor(st){super(),this.hostContainerRef=st}set content(st){st&&this.hostContainerRef&&this.hostContainerRef.createEmbeddedView(st)}addonRightClick(st){var nn,Fe;null===(Fe=(nn=this.props.addonRight).onClick)||void 0===Fe||Fe.call(nn,this.field,st)}addonLeftClick(st){var nn,Fe;null===(Fe=(nn=this.props.addonLeft).onClick)||void 0===Fe||Fe.call(nn,this.field,st)}}return Se.\u0275fac=function(st){return new(st||Se)(r.Y36(r.s_b))},Se.\u0275cmp=r.Xpm({type:Se,selectors:[["formly-wrapper-addons"]],viewQuery:function(st,nn){if(1&st&&r.Gf(zn,7),2&st){let Fe;r.iGM(Fe=r.CRH())&&(nn.content=Fe.first)}},features:[r.qOj],decls:2,vars:0,consts:[["fieldTypeTemplate",""],[1,"input-group"],["class","input-group-text",3,"input-group-btn","click",4,"ngIf"],["fieldComponent",""],[1,"input-group-text",3,"click"],[3,"ngClass",4,"ngIf"],[4,"ngIf"],[3,"ngClass"]],template:function(st,nn){1&st&&r.YNc(0,Rn,5,4,"ng-template",null,0,r.W1O)},directives:[a.O5,a.mk],styles:["formly-wrapper-form-field .input-group-btn{cursor:pointer}\n"],encapsulation:2}),Se})();function et(Se){!Se.props||Se.wrappers&&-1!==Se.wrappers.indexOf("addons")||(Se.props.addonLeft||Se.props.addonRight)&&(Se.wrappers=[...Se.wrappers||[],"addons"])}let Le=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[a.ez,u.UX,f.X0.forChild({wrappers:[{name:"addons",component:Wn}],extensions:[{name:"addons",extension:{postPopulate:et}}]})]]}),Se})(),Re=(()=>{class Se{}return Se.\u0275fac=function(st){return new(st||Se)},Se.\u0275mod=r.oAB({type:Se}),Se.\u0275inj=r.cJS({imports:[[q,ie,Ce,Qt,xt,mi,Xn,Le]]}),Se})()},90645:(v,b,i)=>{"use strict";i.d(b,{hv:()=>Zn,fS:()=>Er,n2:()=>Xn,cw:()=>fi,T7:()=>no,X0:()=>Wn,JD:()=>xo,M2:()=>vn,kg:()=>vt,Hl:()=>Ge,_S:()=>Be,Du:()=>Oe});var r=i(89724),a=i(1659),f=i(70882);function u(et){return!!et&&(et instanceof f.y||"function"==typeof et.lift&&"function"==typeof et.subscribe)}var e=i(66682),p=i(25917),g=i(79765),S=i(87519),M=i(39761),w=i(54395),x=i(45435),B=i(43190),W=i(15257),j=i(68307),q=i(88002),ue=i(11048),re=i(14800),H=i(64762);const se=["container"];function ae(et,Le){}function ie(et,Le){1&et&&r._UZ(0,"formly-field",1),2&et&&r.Q6J("field",Le.$implicit)}const fe=["*"],he=["fieldComponent"];function ce(et,Le,Re){if(Le.id)return Le.id;let Se=Le.type;return!Se&&Le.template&&(Se="template"),Se instanceof r.DyG&&(Se=Se.prototype.constructor.name),[et,Se,Le.key,Re].join("_")}function Be(et){return!Tt(et.key)&&""!==et.key}function Ve(et){var Le;if(!Be(et))return[];if((null===(Le=et._keyPath)||void 0===Le?void 0:Le.key)!==et.key){let Re=[];if("string"==typeof et.key){const Se=-1===et.key.indexOf("[")?et.key:et.key.replace(/\[(\w+)\]/g,".$1");Re=-1!==Se.indexOf(".")?Se.split("."):[Se]}else Re=Array.isArray(et.key)?et.key.slice(0):[`${et.key}`];xt(et,"_keyPath",{key:et.key,path:Re})}return et._keyPath.path.slice(0)}const Xe=["required","pattern","minLength","maxLength","min","max"];function He(et,Le){let Re=Ve(et);if(0===Re.length)return;let Se=et;for(;Se.parent;)Se=Se.parent,Re=[...Ve(Se),...Re];if(void 0===Le&&et.resetOnHide){const dt=Re.pop();delete Re.reduce((nn,Fe)=>nn[Fe]||{},Se.model)[dt]}else!function Pe(et,Le,Re){for(let Se=0;Se<Le.length-1;Se++){const dt=Le[Se];(!et[dt]||!dn(et[dt]))&&(et[dt]=/^\d+$/.test(Le[Se+1])?[]:{}),et=et[dt]}et[Le[Le.length-1]]=vt(Re)}(Se.model,Re,Le)}function Ge(et){let Le=et.parent?et.parent.model:et.model;for(const Re of Ve(et)){if(!Le)return Le;Le=Le[Re]}return Le}function Oe(et,...Le){return Le.forEach(Re=>{for(const Se in Re)Tt(et[Se])||Qt(et[Se])?et[Se]=vt(Re[Se]):Yt(et[Se],Re[Se])&&Oe(et[Se],Re[Se])}),et}function Tt(et){return null==et}function We(et){return void 0===et}function Qt(et){return""===et}function Nt(et){return"function"==typeof et}function Yt(et,Le){return dn(et)&&dn(Le)&&Object.getPrototypeOf(et)===Object.getPrototypeOf(Le)&&!(Array.isArray(et)||Array.isArray(Le))}function dn(et){return null!=et&&"object"==typeof et}function vt(et){if(!dn(et)||u(et)||et instanceof r.Rgc||et.changingThisBreaksApplicationSecurity||-1!==["RegExp","FileList","File","Blob"].indexOf(et.constructor.name))return et;if(et instanceof Set)return new Set(et);if(et instanceof Map)return new Map(et);if(et._isAMomentObject&&Nt(et.clone))return et.clone();if(et instanceof a.TO)return null;if(et instanceof Date)return new Date(et.getTime());if(Array.isArray(et))return et.slice(0).map(Se=>vt(Se));const Le=Object.getPrototypeOf(et);let Re=Object.create(Le);return Re=Object.setPrototypeOf(Re,Le),Object.keys(et).reduce((Se,dt)=>{const st=Object.getOwnPropertyDescriptor(et,dt);return st.get?Object.defineProperty(Se,dt,st):Se[dt]=vt(et[dt]),Se},Re)}function xt(et,Le,Re){Object.defineProperty(et,Le,{enumerable:!1,writable:!0,configurable:!0}),et[Le]=Re}function Ct(et,Le,Re){let Se=[];const dt=()=>{Se.forEach(nn=>nn()),Se=[]},st=Gt(et,Le,({firstChange:nn,currentValue:Fe})=>{!nn&&Re(),dt(),dn(Fe)&&"Object"===Fe.constructor.name&&Object.keys(Fe).forEach(Lr=>{Se.push(Ct(et,[...Le,Lr],Re))})});return()=>{st.unsubscribe(),dt()}}function Gt(et,Le,Re){et._observers||xt(et,"_observers",{});let Se=et;for(let Fe=0;Fe<Le.length-1;Fe++)(!Se[Le[Fe]]||!dn(Se[Le[Fe]]))&&(Se[Le[Fe]]=/^\d+$/.test(Le[Fe+1])?[]:{}),Se=Se[Le[Fe]];const dt=Le[Le.length-1],st=Le.join(".");et._observers[st]||(et._observers[st]={value:Se[dt],onChange:[]});const nn=et._observers[st];if(Se[dt]!==nn.value&&(nn.value=Se[dt]),-1===nn.onChange.indexOf(Re)&&(nn.onChange.push(Re),Re({currentValue:nn.value,firstChange:!0}),nn.onChange.length>=1)){const{enumerable:Fe}=Object.getOwnPropertyDescriptor(Se,dt)||{enumerable:!0};Object.defineProperty(Se,dt,{enumerable:Fe,configurable:!0,get:()=>nn.value,set:Lr=>{if(Lr!==nn.value){const ti=nn.value;nn.value=Lr,nn.onChange.forEach(Ut=>Ut({previousValue:ti,currentValue:Lr,firstChange:!1}))}}})}return{setValue(Fe){nn.value=Fe},unsubscribe(){nn.onChange=nn.onChange.filter(Fe=>Fe!==Re),0===nn.onChange.length&&delete et._observers[st]}}}function Fn(et,Le){if(Le=Array.isArray(Le)?Le.join("."):Le,et.fieldGroup)for(let Re=0,Se=et.fieldGroup.length;Re<Se;Re++){const dt=et.fieldGroup[Re],st=Array.isArray(dt.key)?dt.key.join("."):dt.key;if(st===Le)return dt;if(dt.fieldGroup&&(Tt(st)||0===Le.indexOf(`${st}.`))){const nn=Fn(dt,Tt(st)?Le:Le.slice(st.length+1));if(nn)return nn}}}function pr(et){var Le;null===(Le=et._componentRefs)||void 0===Le||Le.forEach(Re=>{Re instanceof r.UuU?Re.injector.get(r.sBO).markForCheck():Re.markForCheck()})}const mi=new r.OlP("FORMLY_CONFIG");let ci=(()=>{class et{constructor(){this.types={},this.validators={},this.wrappers={},this.messages={},this.extras={checkExpressionOn:"modelChange",lazyRender:!0,resetFieldOnHide:!0,renderFormlyFieldElement:!0,showError(Re){var Se,dt,st,nn;return(null===(Se=Re.formControl)||void 0===Se?void 0:Se.invalid)&&((null===(dt=Re.formControl)||void 0===dt?void 0:dt.touched)||(null===(st=Re.options.parentForm)||void 0===st?void 0:st.submitted)||!!(null===(nn=Re.field.validation)||void 0===nn?void 0:nn.show))}},this.extensions={},this.presets={},this.extensionsByPriority={}}addConfig(Re){Re.types&&Re.types.forEach(Se=>this.setType(Se)),Re.validators&&Re.validators.forEach(Se=>this.setValidator(Se)),Re.wrappers&&Re.wrappers.forEach(Se=>this.setWrapper(Se)),Re.validationMessages&&Re.validationMessages.forEach(Se=>this.addValidatorMessage(Se.name,Se.message)),Re.extensions&&this.setSortedExtensions(Re.extensions),Re.extras&&(this.extras=Object.assign(Object.assign({},this.extras),Re.extras)),Re.presets&&(this.presets=Object.assign(Object.assign({},this.presets),Re.presets.reduce((Se,dt)=>Object.assign(Object.assign({},Se),{[dt.name]:dt.config}),{})))}setType(Re){Array.isArray(Re)?Re.forEach(Se=>this.setType(Se)):(this.types[Re.name]||(this.types[Re.name]={name:Re.name}),["component","extends","defaultOptions","wrappers"].forEach(Se=>{Re.hasOwnProperty(Se)&&(this.types[Re.name][Se]=Re[Se])}))}getType(Re,Se=!1){if(Re instanceof r.DyG)return{component:Re,name:Re.prototype.constructor.name};if(!this.types[Re]){if(Se)throw new Error(`[Formly Error] The type "${Re}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);return null}return this.mergeExtendedType(Re),this.types[Re]}getMergedField(Re={}){var Se;const dt=this.getType(Re.type);if(!dt)return;dt.defaultOptions&&Oe(Re,dt.defaultOptions);const st=dt.extends&&this.getType(dt.extends).defaultOptions;st&&Oe(Re,st),(null==Re?void 0:Re.optionsTypes)&&Re.optionsTypes.forEach(Fe=>{const Lr=this.getType(Fe).defaultOptions;Lr&&Oe(Re,Lr)});const nn=this.resolveFieldTypeRef(Re);(null===(Se=null==nn?void 0:nn.instance)||void 0===Se?void 0:Se.defaultOptions)&&Oe(Re,nn.instance.defaultOptions),!Re.wrappers&&dt.wrappers&&(Re.wrappers=[...dt.wrappers])}resolveFieldTypeRef(Re={}){const Se=this.getType(Re.type);if(!Se)return null;if(!Se.component||Se._componentRef)return Se._componentRef;const{_viewContainerRef:dt,_injector:st}=Re.options;if(!dt||!st)return null;const nn=dt.createComponent(Se.component,{injector:st});xt(Se,"_componentRef",nn);try{nn.destroy()}catch(Fe){console.error(`An error occurred while destroying the Formly component type "${Re.type}"`,Fe)}return Se._componentRef}setWrapper(Re){this.wrappers[Re.name]=Re,Re.types&&Re.types.forEach(Se=>{this.setTypeWrapper(Se,Re.name)})}getWrapper(Re){if(Re instanceof r.DyG)return{component:Re,name:Re.prototype.constructor.name};if(!this.wrappers[Re])throw new Error(`[Formly Error] The wrapper "${Re}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);return this.wrappers[Re]}setTypeWrapper(Re,Se){this.types[Re]||(this.types[Re]={}),this.types[Re].wrappers||(this.types[Re].wrappers=[]),-1===this.types[Re].wrappers.indexOf(Se)&&this.types[Re].wrappers.push(Se)}setValidator(Re){this.validators[Re.name]=Re}getValidator(Re){if(!this.validators[Re])throw new Error(`[Formly Error] The validator "${Re}" could not be found. Please make sure that is registered through the FormlyModule declaration.`);return this.validators[Re]}addValidatorMessage(Re,Se){this.messages[Re]=Se}getValidatorMessage(Re){return this.messages[Re]}setSortedExtensions(Re){Re.forEach(Se=>{var dt;const st=null!==(dt=Se.priority)&&void 0!==dt?dt:1;this.extensionsByPriority[st]=Object.assign(Object.assign({},this.extensionsByPriority[st]),{[Se.name]:Se.extension})}),this.extensions=Object.keys(this.extensionsByPriority).map(Number).sort((Se,dt)=>Se-dt).reduce((Se,dt)=>Object.assign(Object.assign({},Se),this.extensionsByPriority[dt]),{})}mergeExtendedType(Re){if(!this.types[Re].extends)return;const Se=this.getType(this.types[Re].extends);this.types[Re].component||(this.types[Re].component=Se.component),this.types[Re].wrappers||(this.types[Re].wrappers=Se.wrappers)}}return et.\u0275fac=function(Re){return new(Re||et)},et.\u0275prov=r.Yz7({token:et,factory:et.\u0275fac,providedIn:"root"}),et})(),hr=(()=>{class et{constructor(Re,Se,dt,st){this.config=Re,this.injector=Se,this.viewContainerRef=dt,this.parentForm=st}buildForm(Re,Se=[],dt,st){this.build({fieldGroup:Se,model:dt,form:Re,options:st})}build(Re){if(!this.config.extensions.core)throw new Error("NgxFormly: missing `forRoot()` call. use `forRoot()` when registering the `FormlyModule`.");Re.parent?this._build(Re):(this._setOptions(Re),function Ce(et,Le){const Re=et._updateTreeValidity.bind(et);et._updateTreeValidity=()=>{},Le(),et._updateTreeValidity=Re}(Re.form,()=>{var Se,dt;this._build(Re);const st=Re.options;null===(Se=st.checkExpressions)||void 0===Se||Se.call(st,Re,!0),null===(dt=st.detectChanges)||void 0===dt||dt.call(st,Re)}))}_build(Re){var Se;if(!Re)return;const dt=Object.values(this.config.extensions);dt.forEach(st=>{var nn;return null===(nn=st.prePopulate)||void 0===nn?void 0:nn.call(st,Re)}),dt.forEach(st=>{var nn;return null===(nn=st.onPopulate)||void 0===nn?void 0:nn.call(st,Re)}),null===(Se=Re.fieldGroup)||void 0===Se||Se.forEach(st=>this._build(st)),dt.forEach(st=>{var nn;return null===(nn=st.postPopulate)||void 0===nn?void 0:nn.call(st,Re)})}_setOptions(Re){Re.form=Re.form||new a.cw({}),Re.model=Re.model||{},Re.options=Re.options||{};const Se=Re.options;Se._viewContainerRef||xt(Se,"_viewContainerRef",this.viewContainerRef),Se._injector||xt(Se,"_injector",this.injector),Se.build||(Se._buildForm=()=>{console.warn("Formly: 'options._buildForm' is deprecated since v6.0, use 'options.build' instead."),this.build(Re)},Se.build=(dt=Re)=>(this.build(dt),dt)),!Se.parentForm&&this.parentForm&&(xt(Se,"parentForm",this.parentForm),Gt(Se,["parentForm","submitted"],({firstChange:dt})=>{dt||(Se.checkExpressions(Re),Se.detectChanges(Re))}))}}return et.\u0275fac=function(Re){return new(Re||et)(r.LFG(ci),r.LFG(r.zs3),r.LFG(r.s_b,8),r.LFG(a.sg,8))},et.\u0275prov=r.Yz7({token:et,factory:et.\u0275fac,providedIn:"root"}),et})();function Br(et,Le=!1){const Re=et.formControl,Se=Re._fields?Re._fields.indexOf(et):-1;-1!==Se&&Re._fields.splice(Se,1);const dt=Re.parent;if(!dt)return;const st={emitEvent:Le};if(dt instanceof a.Oe){const nn=dt.controls.findIndex(Fe=>Fe===Re);-1!==nn&&dt.removeAt(nn,st)}else if(dt instanceof a.cw){const nn=Ve(et),Fe=nn[nn.length-1];dt.get([Fe])===Re&&dt.removeControl(Fe,st)}Re.setParent(null)}function Ur(et){var Le;return et.formControl?et.formControl:!1===et.shareFormControl?null:null===(Le=et.form)||void 0===Le?void 0:Le.get(Ve(et))}function Hn(et,Le,Re=!1){if((Le=Le||et.formControl)._fields||xt(Le,"_fields",[]),-1===Le._fields.indexOf(et)&&Le._fields.push(et),!et.formControl&&Le){xt(et,"formControl",Le),Le.setValidators(null),Le.setAsyncValidators(null),et.props.disabled=!!et.props.disabled;const Fe=Gt(et,["props","disabled"],({firstChange:Lr,currentValue:ti})=>{Lr||(ti?et.formControl.disable():et.formControl.enable())});Le instanceof a.NI&&Le.registerOnDisabledChange(Fe.setValue)}if(!et.form||!Be(et))return;let Se=et.form;const dt=Ve(et),st=Ge(et);(!Tt(Le.value)||!Tt(st))&&Le.value!==st&&Le instanceof a.NI&&Le.patchValue(st);for(let Fe=0;Fe<dt.length-1;Fe++){const Lr=dt[Fe];Se.get([Lr])||Se.setControl(Lr,new a.cw({}),{emitEvent:Re}),Se=Se.get([Lr])}const nn=dt[dt.length-1];!et._hide&&Se.get([nn])!==Le&&Se.setControl(nn,Le,{emitEvent:Re})}function er(et,Le=!1){const Re=et.status,Se=et.value;et.updateValueAndValidity({emitEvent:!1,onlySelf:Le}),Re!==et.status&&et.statusChanges.emit(et.status),Se!==et.value&&et.valueChanges.emit(et.value)}function _r(et){null==et||delete et._fields,et.setValidators(null),et.setAsyncValidators(null),(et instanceof a.cw||et instanceof a.Oe)&&Object.values(et.controls).forEach(Le=>_r(Le))}let ei=(()=>{class et{constructor(Re){this.ref=Re}ngOnChanges(){this.name=this.name||"formly-group"}}return et.\u0275fac=function(Re){return new(Re||et)(r.Y36(r.Rgc))},et.\u0275dir=r.lG2({type:et,selectors:[["","formlyTemplate",""]],inputs:{name:["formlyTemplate","name"]},features:[r.TTD]}),et})(),bi=(()=>{class et{}return et.\u0275fac=function(Re){return new(Re||et)},et.\u0275prov=r.Yz7({token:et,factory:et.\u0275fac}),et})(),fi=(()=>{class et{constructor(Re,Se,dt,st,nn){this.config=Re,this.renderer=Se,this._elementRef=dt,this.hostContainerRef=st,this.form=nn,this.hostObservers=[],this.componentRefs=[],this.hooksObservers=[],this.detectFieldBuild=!1,this.valueChangesUnsubscribe=()=>{}}get containerRef(){return this.config.extras.renderFormlyFieldElement?this.viewContainerRef:this.hostContainerRef}get elementRef(){var Re;return this.config.extras.renderFormlyFieldElement?this._elementRef:(null===(Re=this.componentRefs)||void 0===Re?void 0:Re[0])instanceof r.UuU?this.componentRefs[0].location:null}ngAfterContentInit(){this.triggerHook("afterContentInit")}ngAfterViewInit(){this.triggerHook("afterViewInit")}ngDoCheck(){this.detectFieldBuild&&this.field&&this.field.options&&this.render()}ngOnInit(){this.triggerHook("onInit")}ngOnChanges(Re){this.triggerHook("onChanges",Re)}ngOnDestroy(){this.resetRefs(this.field),this.hostObservers.forEach(Re=>Re.unsubscribe()),this.hooksObservers.forEach(Re=>Re()),this.valueChangesUnsubscribe(),this.triggerHook("onDestroy")}renderField(Re,Se,dt=[]){var st,nn,Fe;if(this.containerRef===Re&&(this.resetRefs(this.field),this.containerRef.clear(),dt=null===(st=this.field)||void 0===st?void 0:st.wrappers),(null==dt?void 0:dt.length)>0){const[Lr,...ti]=dt,{component:Ut}=this.config.getWrapper(Lr),Dn=Re.createComponent(Ut);this.attachComponentRef(Dn,Se),Gt(Dn.instance,["fieldComponent"],({currentValue:Et,previousValue:$t,firstChange:_t})=>{if(Et){if($t&&$t._lContainer===Et._lContainer)return;const yt=$t?$t.detach():null;yt&&!yt.destroyed?Et.insert(yt):this.renderField(Et,Se,ti),!_t&&Dn.changeDetectorRef.detectChanges()}})}else if(null==Se?void 0:Se.type){const Lr=null===(Fe=null===(nn=this.form)||void 0===nn?void 0:nn.templates)||void 0===Fe?void 0:Fe.find(Ut=>Ut.name===Se.type);let ti;if(Lr)ti=Re.createEmbeddedView(Lr.ref,{$implicit:Se});else{const{component:Ut}=this.config.getType(Se.type,!0);ti=Re.createComponent(Ut)}this.attachComponentRef(ti,Se)}}triggerHook(Re,Se){var dt,st;if(("onInit"===Re||"onChanges"===Re&&Se.field&&!Se.field.firstChange)&&(this.valueChangesUnsubscribe=this.fieldChanges(this.field)),(null===(st=null===(dt=this.field)||void 0===dt?void 0:dt.hooks)||void 0===st?void 0:st[Re])&&(!Se||Se.field)){const nn=this.field.hooks[Re](this.field);if(u(nn)&&-1!==["onInit","afterContentInit","afterViewInit"].indexOf(Re)){const Fe=nn.subscribe();this.hooksObservers.push(()=>Fe.unsubscribe())}}"onChanges"===Re&&Se.field&&(this.resetRefs(Se.field.previousValue),this.render())}attachComponentRef(Re,Se){this.componentRefs.push(Re),Se._componentRefs.push(Re),Re instanceof r.UuU&&Object.assign(Re.instance,{field:Se})}render(){if(this.field){if(!this.field.options)return void(this.detectFieldBuild=!0);this.detectFieldBuild=!1,this.hostObservers.forEach(Re=>Re.unsubscribe()),this.hostObservers=[Gt(this.field,["hide"],({firstChange:Re,currentValue:Se})=>{const dt=this.containerRef;!1===this.config.extras.lazyRender?(Re&&this.renderField(dt,this.field),(!Re||Re&&Se)&&this.elementRef&&this.renderer.setStyle(this.elementRef.nativeElement,"display",Se?"none":"")):Se?(dt.clear(),this.field.className&&this.renderer.removeAttribute(this.elementRef.nativeElement,"class")):(this.renderField(dt,this.field),this.field.className&&this.renderer.setAttribute(this.elementRef.nativeElement,"class",this.field.className)),!Re&&this.field.options.detectChanges(this.field)}),Gt(this.field,["className"],({firstChange:Re,currentValue:Se})=>{(!Re||Re&&Se)&&(!this.config.extras.lazyRender||!0!==this.field.hide)&&this.elementRef&&this.renderer.setAttribute(this.elementRef.nativeElement,"class",Se)}),...["touched","pristine","status"].map(Re=>Gt(this.field,["formControl",Re],({firstChange:Se})=>!Se&&pr(this.field)))]}}resetRefs(Re){Re&&(Re._componentRefs?Re._componentRefs=Re._componentRefs.filter(Se=>-1===this.componentRefs.indexOf(Se)):xt(this.field,"_componentRefs",[])),this.componentRefs=[]}fieldChanges(Re){if(this.valueChangesUnsubscribe(),!Re)return()=>{};const Se=[Ct(Re,["props"],()=>Re.options.detectChanges(Re)),Ct(Re.options,["formState"],()=>Re.options.detectChanges(Re))];for(const dt of Object.keys(Re._expressions)){const st=Gt(Re,["_expressions",dt],({currentValue:nn,previousValue:Fe})=>{(null==Fe?void 0:Fe.subscription)&&(Fe.subscription.unsubscribe(),Fe.subscription=null),u(nn.value$)&&(nn.subscription=nn.value$.subscribe())});Se.push(()=>{var nn;(null===(nn=Re._expressions[dt])||void 0===nn?void 0:nn.subscription)&&Re._expressions[dt].subscription.unsubscribe(),st.unsubscribe()})}for(const dt of[["template"],["fieldGroupClassName"],["validation","show"]]){const st=Gt(Re,dt,({firstChange:nn})=>!nn&&Re.options.detectChanges(Re));Se.push(()=>st.unsubscribe())}if(Re.formControl&&!Re.fieldGroup){const dt=Re.formControl;let st=dt.valueChanges.pipe((0,S.x)((ti,Ut)=>!(ti!==Ut||Array.isArray(ti)||dn(ti))));dt.value!==Ge(Re)&&(st=st.pipe((0,M.O)(dt.value)));const{updateOn:nn,debounce:Fe}=Re.modelOptions;(!nn||"change"===nn)&&(null==Fe?void 0:Fe.default)>0&&(st=dt.valueChanges.pipe((0,w.b)(Fe.default)));const Lr=st.subscribe(ti=>{var Ut,Dn;(null===(Ut=dt._fields)||void 0===Ut?void 0:Ut.length)>1&&dt instanceof a.NI&&dt.patchValue(ti,{emitEvent:!1,onlySelf:!0}),null===(Dn=Re.parsers)||void 0===Dn||Dn.forEach(Et=>ti=Et(ti)),ti===Re.formControl.value?(Be(Re)&&He(Re,ti),Re.options.fieldChanges.next({value:ti,field:Re,type:"valueChanges"})):Re.formControl.setValue(ti)});Se.push(()=>Lr.unsubscribe())}return()=>Se.forEach(dt=>dt())}}return et.\u0275fac=function(Re){return new(Re||et)(r.Y36(ci),r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(r.s_b),r.Y36(bi,8))},et.\u0275cmp=r.Xpm({type:et,selectors:[["formly-field"]],viewQuery:function(Re,Se){if(1&Re&&r.Gf(se,7,r.s_b),2&Re){let dt;r.iGM(dt=r.CRH())&&(Se.viewContainerRef=dt.first)}},inputs:{field:"field"},features:[r.TTD],decls:2,vars:0,consts:[["container",""]],template:function(Re,Se){1&Re&&r.YNc(0,ae,0,0,"ng-template",null,0,r.W1O)},styles:["[_nghost-%COMP%]:empty{display:none}"]}),et})(),no=(()=>{class et{constructor(Re,Se,dt,st){this.builder=Re,this.config=Se,this.ngZone=dt,this.fieldTemplates=st,this.modelChange=new r.vpe,this.field={type:"formly-group"},this._modelChangeValue={},this.valueChangesUnsubscribe=()=>{}}set form(Re){this.field.form=Re}get form(){return this.field.form}set model(Re){this.setField({model:Re})}get model(){return this.field.model}set fields(Re){this.setField({fieldGroup:Re})}get fields(){return this.field.fieldGroup}set options(Re){this.setField({options:Re})}get options(){return this.field.options}set templates(Re){this.fieldTemplates.templates=Re}ngDoCheck(){"changeDetectionCheck"===this.config.extras.checkExpressionOn&&this.checkExpressionChange()}ngOnChanges(Re){Re.fields&&this.form&&_r(this.form),(Re.fields||Re.form||Re.model&&this._modelChangeValue!==Re.model.currentValue)&&(this.valueChangesUnsubscribe(),this.builder.build(this.field),this.valueChangesUnsubscribe=this.valueChanges())}ngOnDestroy(){this.valueChangesUnsubscribe()}checkExpressionChange(){var Re,Se;null===(Se=(Re=this.field.options).checkExpressions)||void 0===Se||Se.call(Re,this.field)}valueChanges(){this.valueChangesUnsubscribe();const Re=this.field.options.fieldChanges.pipe((0,x.h)(({field:Se,type:dt})=>Be(Se)&&"valueChanges"===dt),(0,B.w)(()=>this.ngZone.onStable.asObservable().pipe((0,W.q)(1)))).subscribe(()=>this.ngZone.runGuarded(()=>{this.checkExpressionChange(),this.modelChange.emit(this._modelChangeValue=vt(this.model))}));return()=>Re.unsubscribe()}setField(Re){this.config.extras.immutable?this.field=Object.assign(Object.assign({},this.field),vt(Re)):Object.keys(Re).forEach(Se=>this.field[Se]=Re[Se])}}return et.\u0275fac=function(Re){return new(Re||et)(r.Y36(hr),r.Y36(ci),r.Y36(r.R0b),r.Y36(bi))},et.\u0275cmp=r.Xpm({type:et,selectors:[["formly-form"]],contentQueries:function(Re,Se,dt){if(1&Re&&r.Suo(dt,ei,4),2&Re){let st;r.iGM(st=r.CRH())&&(Se.templates=st)}},inputs:{form:"form",model:"model",fields:"fields",options:"options"},outputs:{modelChange:"modelChange"},features:[r._Bn([hr,bi]),r.TTD],decls:1,vars:1,consts:[[3,"field"]],template:function(Re,Se){1&Re&&r._UZ(0,"formly-field",0),2&Re&&r.Q6J("field",Se.field)},directives:[fi],encapsulation:2,changeDetection:0}),et})(),xo=(()=>{class et{constructor(Re,Se,dt){this.renderer=Re,this.elementRef=Se,this.uiAttributesCache={},this.uiEvents={listeners:[],events:["click","keyup","keydown","keypress","focus","blur","change"],callback:(st,nn)=>{switch(st){case"focus":return this.onFocus(nn);case"blur":return this.onBlur(nn);case"change":return this.onChange(nn);default:return this.props[st](this.field,nn)}}},this.document=dt}get props(){return this.field.props||{}}get fieldAttrElements(){var Re;return(null===(Re=this.field)||void 0===Re?void 0:Re._elementRefs)||[]}ngOnChanges(Re){var Se;Re.field&&(this.field.name&&this.setAttribute("name",this.field.name),this.uiEvents.listeners.forEach(dt=>dt()),this.uiEvents.events.forEach(dt=>{var st;((null===(st=this.props)||void 0===st?void 0:st[dt])||-1!==["focus","blur","change"].indexOf(dt))&&this.uiEvents.listeners.push(this.renderer.listen(this.elementRef.nativeElement,dt,nn=>this.uiEvents.callback(dt,nn)))}),(null===(Se=this.props)||void 0===Se?void 0:Se.attributes)&&Gt(this.field,["props","attributes"],({currentValue:dt,previousValue:st})=>{st&&Object.keys(st).forEach(nn=>this.removeAttribute(nn)),dt&&Object.keys(dt).forEach(nn=>{null!=dt[nn]&&this.setAttribute(nn,dt[nn])})}),this.detachElementRef(Re.field.previousValue),this.attachElementRef(Re.field.currentValue),1===this.fieldAttrElements.length&&(!this.id&&this.field.id&&this.setAttribute("id",this.field.id),this.focusObserver=Gt(this.field,["focus"],({currentValue:dt})=>{this.toggleFocus(dt)}))),Re.id&&this.setAttribute("id",this.id)}ngDoCheck(){if(!this.uiAttributes){const Re=this.elementRef.nativeElement;this.uiAttributes=[...Xe,"tabindex","placeholder","readonly","disabled","step"].filter(Se=>!Re.hasAttribute||!Re.hasAttribute(Se))}this.uiAttributes.forEach(Re=>{const Se=this.props[Re];this.uiAttributesCache[Re]!==Se&&(!this.props.attributes||!this.props.attributes.hasOwnProperty(Re.toLowerCase()))&&(this.uiAttributesCache[Re]=Se,Se||0===Se?this.setAttribute(Re,!0===Se?Re:`${Se}`):this.removeAttribute(Re))})}ngOnDestroy(){var Re;this.uiEvents.listeners.forEach(Se=>Se()),this.detachElementRef(this.field),null===(Re=this.focusObserver)||void 0===Re||Re.unsubscribe()}toggleFocus(Re){const Se=this.fieldAttrElements?this.fieldAttrElements[0]:null;if(!Se||!Se.nativeElement.focus)return;const dt=!!this.document.activeElement&&this.fieldAttrElements.some(({nativeElement:st})=>this.document.activeElement===st||st.contains(this.document.activeElement));Re&&!dt?Promise.resolve().then(()=>Se.nativeElement.focus()):!Re&&dt&&Promise.resolve().then(()=>Se.nativeElement.blur())}onFocus(Re){var Se,dt,st;null===(Se=this.focusObserver)||void 0===Se||Se.setValue(!0),null===(st=(dt=this.props).focus)||void 0===st||st.call(dt,this.field,Re)}onBlur(Re){var Se,dt,st;null===(Se=this.focusObserver)||void 0===Se||Se.setValue(!1),null===(st=(dt=this.props).blur)||void 0===st||st.call(dt,this.field,Re)}onHostChange(Re){Re instanceof Event||this.onChange(Re)}onChange(Re){var Se,dt,st;null===(dt=(Se=this.props).change)||void 0===dt||dt.call(Se,this.field,Re),null===(st=this.field.formControl)||void 0===st||st.markAsDirty()}attachElementRef(Re){var Se;!Re||(-1===(null===(Se=Re._elementRefs)||void 0===Se?void 0:Se.indexOf(this.elementRef))?Re._elementRefs.push(this.elementRef):xt(Re,"_elementRefs",[this.elementRef]))}detachElementRef(Re){const Se=(null==Re?void 0:Re._elementRefs)?this.fieldAttrElements.indexOf(this.elementRef):-1;-1!==Se&&Re._elementRefs.splice(Se,1)}setAttribute(Re,Se){this.renderer.setAttribute(this.elementRef.nativeElement,Re,Se)}removeAttribute(Re){this.renderer.removeAttribute(this.elementRef.nativeElement,Re)}}return et.\u0275fac=function(Re){return new(Re||et)(r.Y36(r.Qsj),r.Y36(r.SBq),r.Y36(ue.K0))},et.\u0275dir=r.lG2({type:et,selectors:[["","formlyAttributes",""]],hostBindings:function(Re,Se){1&Re&&r.NdJ("change",function(st){return Se.onHostChange(st)})},inputs:{field:["formlyAttributes","field"],id:"id"},features:[r.TTD]}),et})(),Er=(()=>{class et{get model(){return this.field.model}get form(){return this.field.form}get options(){return this.field.options}get key(){return this.field.key}get formControl(){return this.field.formControl}get props(){return this.field.props||{}}get to(){return this.props}get showError(){return this.options.showError(this)}get id(){return this.field.id}get formState(){return this.options.formState||{}}}return et.\u0275fac=function(Re){return new(Re||et)},et.\u0275dir=r.lG2({type:et,inputs:{field:"field"}}),et})(),an=(()=>{class et extends Er{}return et.\u0275fac=function(){let Le;return function(Se){return(Le||(Le=r.n5z(et)))(Se||et)}}(),et.\u0275cmp=r.Xpm({type:et,selectors:[["formly-group"]],hostVars:2,hostBindings:function(Re,Se){2&Re&&r.Tol(Se.field.fieldGroupClassName||"")},features:[r.qOj],ngContentSelectors:fe,decls:2,vars:1,consts:[[3,"field",4,"ngFor","ngForOf"],[3,"field"]],template:function(Re,Se){1&Re&&(r.F$t(),r.YNc(0,ie,1,1,"formly-field",0),r.Hsn(1)),2&Re&&r.Q6J("ngForOf",Se.field.fieldGroup)},directives:[fi,ue.sg],encapsulation:2,changeDetection:0}),et})(),vn=(()=>{class et{constructor(Re){this.config=Re}ngOnChanges(){const Re=Xe.map(Se=>`templateOptions.${Se}`);this.errorMessage$=(0,e.T)(this.field.formControl.statusChanges,this.field.options?this.field.options.fieldChanges.pipe((0,x.h)(({field:Se,type:dt,property:st})=>Se===this.field&&"expressionChanges"===dt&&(-1!==st.indexOf("validation")||-1!==Re.indexOf(st)))):(0,p.of)(null)).pipe((0,M.O)(null),(0,B.w)(()=>u(this.errorMessage)?this.errorMessage:(0,p.of)(this.errorMessage)))}get errorMessage(){var Re,Se,dt,st,nn,Fe;const Lr=this.field.formControl;for(const ti in Lr.errors)if(Lr.errors.hasOwnProperty(ti)){let Ut=this.config.getValidatorMessage(ti);if(dn(Lr.errors[ti])){if(Lr.errors[ti].errorPath)return;Lr.errors[ti].message&&(Ut=Lr.errors[ti].message)}return(null===(Se=null===(Re=this.field.validation)||void 0===Re?void 0:Re.messages)||void 0===Se?void 0:Se[ti])&&(Ut=this.field.validation.messages[ti]),(null===(st=null===(dt=this.field.validators)||void 0===dt?void 0:dt[ti])||void 0===st?void 0:st.message)&&(Ut=this.field.validators[ti].message),(null===(Fe=null===(nn=this.field.asyncValidators)||void 0===nn?void 0:nn[ti])||void 0===Fe?void 0:Fe.message)&&(Ut=this.field.asyncValidators[ti].message),"function"==typeof Ut?Ut(Lr.errors[ti],this.field):Ut}}}return et.\u0275fac=function(Re){return new(Re||et)(r.Y36(ci))},et.\u0275cmp=r.Xpm({type:et,selectors:[["formly-validation-message"]],inputs:{field:"field"},features:[r.TTD],decls:2,vars:3,template:function(Re,Se){1&Re&&(r._uU(0),r.ALo(1,"async")),2&Re&&r.Oqu(r.lcZ(1,1,Se.errorMessage$))},pipes:[ue.Ov],encapsulation:2,changeDetection:0}),et})(),Zn=(()=>{class et extends Er{onPopulate(Re){!Re.formControl&&Be(Re)&&Hn(Re,Ur(Re)||new a.Oe([],{updateOn:Re.modelOptions.updateOn})),Re.fieldGroup=Re.fieldGroup||[];const Se=Array.isArray(Re.model)?Re.model.length:0;if(Re.fieldGroup.length>Se)for(let dt=Re.fieldGroup.length-1;dt>=Se;--dt)Br(Re.fieldGroup[dt],!0),Re.fieldGroup.splice(dt,1);for(let dt=Re.fieldGroup.length;dt<Se;dt++){const st=Object.assign(Object.assign({},vt("function"==typeof Re.fieldArray?Re.fieldArray(Re):Re.fieldArray)),{key:`${dt}`});Re.fieldGroup.push(st)}}add(Re,Se,{markAsDirty:dt}={markAsDirty:!0}){Re=null==Re?this.field.fieldGroup.length:Re,this.model||He(this.field,[]),this.model.splice(Re,0,Se?vt(Se):void 0),this._build(),dt&&this.formControl.markAsDirty()}remove(Re,{markAsDirty:Se}={markAsDirty:!0}){this.model.splice(Re,1);const dt=this.field.fieldGroup[Re];this.field.fieldGroup.splice(Re,1),this.field.fieldGroup.forEach((st,nn)=>st.key=`${nn}`),Br(dt,!0),this._build(),Se&&this.formControl.markAsDirty()}_build(){var Re;(null!==(Re=this.field.formControl._fields)&&void 0!==Re?Re:[this.field]).forEach(dt=>this.options.build(dt)),this.options.fieldChanges.next({field:this.field,value:Ge(this.field),type:"valueChanges"})}}return et.\u0275fac=function(){let Le;return function(Se){return(Le||(Le=r.n5z(et)))(Se||et)}}(),et.\u0275dir=r.lG2({type:et,features:[r.qOj]}),et})(),Xn=(()=>{class et extends Er{set _staticContent(Re){this.fieldComponent=Re}}return et.\u0275fac=function(){let Le;return function(Se){return(Le||(Le=r.n5z(et)))(Se||et)}}(),et.\u0275dir=r.lG2({type:et,viewQuery:function(Re,Se){if(1&Re&&(r.Gf(he,5,r.s_b),r.Gf(he,7,r.s_b)),2&Re){let dt;r.iGM(dt=r.CRH())&&(Se.fieldComponent=dt.first),r.iGM(dt=r.CRH())&&(Se._staticContent=dt.first)}},features:[r.qOj]}),et})(),zn=(()=>{class et extends Er{constructor(Re){super(),this.sanitizer=Re,this.innerHtml={}}get template(){return this.field&&this.field.template!==this.innerHtml.template&&(this.innerHtml={template:this.field.template,content:this.props.safeHtml?this.sanitizer.bypassSecurityTrustHtml(this.field.template):this.field.template}),this.innerHtml.content}}return et.\u0275fac=function(Re){return new(Re||et)(r.Y36(re.H7))},et.\u0275cmp=r.Xpm({type:et,selectors:[["formly-template"]],features:[r.qOj],decls:1,vars:1,consts:[[3,"innerHtml"]],template:function(Re,Se){1&Re&&r._UZ(0,"div",0),2&Re&&r.Q6J("innerHtml",Se.template,r.oJD)},encapsulation:2,changeDetection:0}),et})();class ui{onPopulate(Le){if(Le._expressions)return;xt(Le,"_expressions",{}),Gt(Le,["hide"],({currentValue:Se,firstChange:dt})=>{xt(Le,"_hide",!!Se),(!dt||dt&&!0===Se)&&(Le.props.hidden=Se,Le.options._hiddenFieldsForCheck.push(Le))}),Le.hideExpression&&Gt(Le,["hideExpression"],({currentValue:Se})=>{Le._expressions.hide=this.parseExpressions(Le,"hide","boolean"==typeof Se?()=>Se:Se)});const Re=(Se,dt)=>{"string"==typeof dt||Nt(dt)?Le._expressions[Se]=this.parseExpressions(Le,Se,dt):dt instanceof f.y&&(Le._expressions[Se]={value$:dt.pipe((0,j.b)(st=>{this.evalExpr(Le,Se,st),Le.options.detectChanges(Le)}))})};Le.expressions=Le.expressions||{};for(const Se of Object.keys(Le.expressions))Gt(Le,["expressions",Se],({currentValue:dt})=>{Re(Se,Nt(dt)?(...st)=>dt(Le,st[3]):dt)});Le.expressionProperties=Le.expressionProperties||{};for(const Se of Object.keys(Le.expressionProperties))Gt(Le,["expressionProperties",Se],({currentValue:dt})=>Re(Se,dt))}postPopulate(Le){if(!Le.parent&&!Le.options.checkExpressions){let Re=!1;Le.options.checkExpressions=(Se,dt)=>{if(Re)return;Re=!0;const st=this.checkExpressions(Se,dt),nn=Le.options;nn._hiddenFieldsForCheck.sort(Fe=>Fe.hide?-1:1).forEach(Fe=>this.changeHideState(Fe,Fe.hide,!dt)),nn._hiddenFieldsForCheck=[],st&&(this.checkExpressions(Le),Le.options&&Le.options.detectChanges&&Le.options.detectChanges(Le)),Re=!1},Le.options._checkField=(Se,dt)=>{console.warn("Formly: 'options._checkField' is deprecated since v6.0, use 'options.checkExpressions' instead."),Le.options.checkExpressions(Se,dt)}}}parseExpressions(Le,Re,Se){let dt,st;if(Le.parent&&["hide","props.disabled"].includes(Re)){const nn=Fe=>"hide"===Re?Fe.hide:Fe.props.disabled;dt=()=>{let Fe=Le.parent;for(;Fe.parent&&!nn(Fe);)Fe=Fe.parent;return nn(Fe)}}return"string"==typeof(Se=Se||(()=>!1))&&(Se=function ri(et,Le){try{return Function(...Le,`return ${et};`)}catch(Re){console.error(Re)}}(Se,["model","formState","field"])),{callback:nn=>{try{const Fe=function Gi(et,Le,Re){return"function"==typeof et?et.apply(Le,Re):!!et}(dt?(...Lr)=>dt(Le)||Se(...Lr):Se,{field:Le},[Le.model,Le.options.formState,Le,nn]);return!(!nn&&(st===Fe||dn(Fe)&&!u(Fe)&&JSON.stringify(Fe)===JSON.stringify(st))||(st=Fe,this.evalExpr(Le,Re,Fe),0))}catch(Fe){throw Fe.message=`[Formly Error] [Expression "${Re}"] ${Fe.message}`,Fe}}}}checkExpressions(Le,Re=!1){var Se,dt,st;if(!Le)return!1;let nn=!1;if(Le._expressions)for(const Fe of Object.keys(Le._expressions))(null===(dt=(Se=Le._expressions[Fe]).callback)||void 0===dt?void 0:dt.call(Se,Re))&&(nn=!0);return null===(st=Le.fieldGroup)||void 0===st||st.forEach(Fe=>this.checkExpressions(Fe,Re)&&(nn=!0)),nn}changeDisabledState(Le,Re){Le.fieldGroup&&Le.fieldGroup.filter(Se=>!Se._expressions.hasOwnProperty("props.disabled")).forEach(Se=>this.changeDisabledState(Se,Re)),Be(Le)&&Le.props.disabled!==Re&&(Le.props.disabled=Re)}changeHideState(Le,Re,Se){var dt,st,nn;if(Le.fieldGroup&&Le.fieldGroup.filter(Fe=>!Fe._expressions.hide).forEach(Fe=>this.changeHideState(Fe,Re,Se)),Le.formControl&&Be(Le)){xt(Le,"_hide",!(!Re&&!Le.hide));const Fe=Le.formControl;(null===(dt=Fe._fields)||void 0===dt?void 0:dt.length)>1&&er(Fe),!0!==Re||Fe._fields&&!Fe._fields.every(Lr=>!!Lr._hide)?!1===Re&&(Le.resetOnHide&&!We(Le.defaultValue)&&We(Ge(Le))&&He(Le,Le.defaultValue),Hn(Le,void 0,!0),Le.resetOnHide&&Le.fieldArray&&(null===(st=Le.fieldGroup)||void 0===st?void 0:st.length)!==(null===(nn=Le.model)||void 0===nn?void 0:nn.length)&&Le.options.build(Le)):(Br(Le,!0),Se&&Le.resetOnHide&&(He(Le,void 0),Le.formControl.reset({value:void 0,disabled:Le.formControl.disabled}),Le.options.fieldChanges.next({value:void 0,field:Le,type:"valueChanges"}),Le.fieldGroup&&Le.formControl instanceof a.Oe&&(Le.fieldGroup.length=0)))}Le.options.fieldChanges&&Le.options.fieldChanges.next({field:Le,type:"hidden",value:Re})}evalExpr(Le,Re,Se){try{let dt=Le;const st=this._evalExpressionPath(Le,Re),nn=st.length-1;for(let Fe=0;Fe<nn;Fe++)dt=dt[st[Fe]];dt[st[nn]]=Se}catch(dt){throw dt.message=`[Formly Error] [Expression "${Re}"] ${dt.message}`,dt}if(["templateOptions.disabled","props.disabled"].includes(Re)&&Be(Le)&&this.changeDisabledState(Le,Se),0===Re.indexOf("model.")){const dt=Re.replace(/^model\./,""),st=(null==Le?void 0:Le.key)===dt?Le.formControl:Le.form.get(dt);st&&(!Tt(st.value)||!Tt(Se))&&st.value!==Se&&st.patchValue(Se)}this.emitExpressionChanges(Le,Re,Se)}emitExpressionChanges(Le,Re,Se){!Le.options.fieldChanges||Le.options.fieldChanges.next({field:Le,type:"expressionChanges",property:Re,value:Se})}_evalExpressionPath(Le,Re){if(Le._expressions[Re]&&Le._expressions[Re].paths)return Le._expressions[Re].paths;let Se=[];return-1===Re.indexOf("[")?Se=Re.split("."):Re.split(/[[\]]{1,2}/).filter(dt=>dt).forEach(dt=>{const st=dt.match(/['|"](.*?)['|"]/);st?Se.push(st[1]):Se.push(...dt.split(".").filter(nn=>nn))}),Le._expressions[Re]&&(Le._expressions[Re].paths=Se),Se}}class vr{constructor(Le){this.config=Le}onPopulate(Le){this.initFieldValidation(Le,"validators"),this.initFieldValidation(Le,"asyncValidators")}initFieldValidation(Le,Re){const Se=[];if("validators"===Re&&!(Le.hasOwnProperty("fieldGroup")&&!Be(Le))&&Se.push(this.getPredefinedFieldValidation(Le)),Le[Re])for(const dt of Object.keys(Le[Re]))"validation"===dt?Se.push(...Le[Re].validation.map(st=>this.wrapNgValidatorFn(Le,st))):Se.push(this.wrapNgValidatorFn(Le,Le[Re][dt],dt));xt(Le,"_"+Re,Se)}getPredefinedFieldValidation(Le){let Re=[];return Xe.forEach(Se=>Gt(Le,["props",Se],({currentValue:dt,firstChange:st})=>{Re=Re.filter(nn=>nn!==Se),null!=dt&&!1!==dt&&Re.push(Se),!st&&Le.formControl&&er(Le.formControl)})),Se=>0===Re.length?null:a.kI.compose(Re.map(dt=>()=>{var st,nn,Fe,Lr;const ti=Le.props[dt];switch(dt){case"required":return a.kI.required(Se);case"pattern":return a.kI.pattern(ti)(Se);case"minLength":const Ut=a.kI.minLength(ti)(Se),Dn=this.config.getValidatorMessage("minlength")||(null===(nn=null===(st=Le.validation)||void 0===st?void 0:st.messages)||void 0===nn?void 0:nn.minlength)?"minlength":"minLength";return Ut?{[Dn]:Ut.minlength}:null;case"maxLength":const Et=a.kI.maxLength(ti)(Se),$t=this.config.getValidatorMessage("maxlength")||(null===(Lr=null===(Fe=Le.validation)||void 0===Fe?void 0:Fe.messages)||void 0===Lr?void 0:Lr.maxlength)?"maxlength":"maxLength";return Et?{[$t]:Et.maxlength}:null;case"min":return a.kI.min(ti)(Se);case"max":return a.kI.max(ti)(Se);default:return null}}))(Se)}wrapNgValidatorFn(Le,Re,Se){let dt;if("string"==typeof Re&&(dt=vt(this.config.getValidator(Re))),"object"==typeof Re&&Re.name&&(dt=vt(this.config.getValidator(Re.name)),Re.options&&(dt.options=Re.options)),"object"==typeof Re&&Re.expression){const{expression:st}=Re,nn=(0,H._T)(Re,["expression"]);dt={name:Se,validation:st,options:Object.keys(nn).length>0?nn:null}}return"function"==typeof Re&&(dt={name:Se,validation:Re}),st=>{const nn=dt.validation(st,Le,dt.options);return function rn(et){return!!et&&"function"==typeof et.then}(nn)?nn.then(Fe=>this.handleAsyncResult(Le,Se?!!Fe:Fe,dt)):u(nn)?nn.pipe((0,q.U)(Fe=>this.handleAsyncResult(Le,Se?!!Fe:Fe,dt))):this.handleResult(Le,Se?!!nn:nn,dt)}}handleAsyncResult(Le,Re,Se){return Le.options.detectChanges(Le),this.handleResult(Le,Re,Se)}handleResult(Le,Re,{name:Se,options:dt}){var st,nn;"boolean"==typeof Re&&(Re=Re?null:{[Se]:dt||!0});const Fe=Le.formControl;return null===(nn=null===(st=null==Fe?void 0:Fe._childrenErrors)||void 0===st?void 0:st[Se])||void 0===nn||nn.call(st),dn(Re)&&Object.keys(Re).forEach(Lr=>{const ti=Re[Lr].errorPath?Re[Lr].errorPath:null==dt?void 0:dt.errorPath,Ut=ti?Le.formControl.get(ti):null;if(Ut){const $t=(0,H._T)(Re[Lr],["errorPath"]);Ut.setErrors(Object.assign(Object.assign({},Ut.errors||{}),{[Lr]:$t})),!Fe._childrenErrors&&xt(Fe,"_childrenErrors",{}),Fe._childrenErrors[Lr]=()=>{const yn=(0,H._T)(Ut.errors||{},["symbol"==typeof Lr?Lr:Lr+""]);Ut.setErrors(0===Object.keys(yn).length?null:yn)}}}),Re}}class Ji{prePopulate(Le){this.root||(this.root=Le),Le.parent&&Object.defineProperty(Le,"form",{get:()=>Le.parent.formControl,configurable:!0})}onPopulate(Le){Le.hasOwnProperty("fieldGroup")&&!Be(Le)?xt(Le,"formControl",Le.form):this.addFormControl(Le)}postPopulate(Le){if(this.root===Le&&(this.root=null,this.setValidators(Le)&&Le.parent)){let Se=Le.parent;for(;Se;)(Be(Se)||!Se.parent)&&er(Se.formControl,!0),Se=Se.parent}}addFormControl(Le){let Re=Ur(Le);if(!Re){const Se={updateOn:Le.modelOptions.updateOn};if(Le.fieldGroup)Re=new a.cw({},Se);else{const dt=Be(Le)?Ge(Le):Le.defaultValue;Re=new a.NI({value:dt,disabled:!1},Object.assign(Object.assign({},Se),{initialValueIsDefault:!0}))}}Hn(Le,Re)}setValidators(Le,Re=!1){var Se,dt;!1===Re&&Be(Le)&&(null===(Se=Le.props)||void 0===Se?void 0:Se.disabled)&&(Re=!0);let st=!1;if(null===(dt=Le.fieldGroup)||void 0===dt||dt.forEach(nn=>nn&&this.setValidators(nn,Re)&&(st=!0)),Be(Le)||!Le.parent||!Be(Le)&&!Le.fieldGroup){const{formControl:nn}=Le;if(nn&&(Be(Le)&&nn instanceof a.NI&&(Re&&nn.enabled&&(nn.disable({emitEvent:!1,onlySelf:!0}),st=!0),!Re&&nn.disabled&&(nn.enable({emitEvent:!1,onlySelf:!0}),st=!0)),(null===nn.validator||null===nn.asyncValidator)&&(nn.setValidators(()=>{const Fe=a.kI.compose(this.mergeValidators(Le,"_validators"));return Fe?Fe(nn):null}),nn.setAsyncValidators(()=>{const Fe=a.kI.composeAsync(this.mergeValidators(Le,"_asyncValidators"));return Fe?Fe(nn):(0,p.of)(null)}),st=!0),st)){er(nn,!0);let Fe=nn.parent;for(let Lr=1;Lr<Ve(Le).length;Lr++)Fe&&(er(Fe,!0),Fe=Fe.parent)}}return st}mergeValidators(Le,Re){var Se;const dt=[],st=Le.formControl;return(null===(Se=null==st?void 0:st._fields)||void 0===Se?void 0:Se.length)>1?st._fields.filter(nn=>!nn._hide).forEach(nn=>dt.push(...nn[Re])):Le[Re]&&dt.push(...Le[Re]),Le.fieldGroup&&Le.fieldGroup.filter(nn=>(null==nn?void 0:nn.fieldGroup)&&!Be(nn)).forEach(nn=>dt.push(...this.mergeValidators(nn,Re))),dt}}class mn{constructor(Le){this.config=Le,this.formId=0}prePopulate(Le){var Re,Se;const dt=Le.parent;this.initRootOptions(Le),this.initFieldProps(Le),dt&&(Object.defineProperty(Le,"options",{get:()=>dt.options,configurable:!0}),Object.defineProperty(Le,"model",{get:()=>Be(Le)&&Le.fieldGroup?Ge(Le):dt.model,configurable:!0})),Object.defineProperty(Le,"get",{value:st=>Fn(Le,st),configurable:!0}),null===(Se=(Re=this.getFieldComponentInstance(Le)).prePopulate)||void 0===Se||Se.call(Re,Le)}onPopulate(Le){var Re,Se;this.initFieldOptions(Le),null===(Se=(Re=this.getFieldComponentInstance(Le)).onPopulate)||void 0===Se||Se.call(Re,Le),Le.fieldGroup&&Le.fieldGroup.forEach((dt,st)=>{dt&&(Object.defineProperty(dt,"parent",{get:()=>Le,configurable:!0}),Object.defineProperty(dt,"index",{get:()=>st,configurable:!0})),this.formId++})}postPopulate(Le){var Re,Se;null===(Se=(Re=this.getFieldComponentInstance(Le)).postPopulate)||void 0===Se||Se.call(Re,Le)}initFieldProps(Le){var Re;null!==(Re=Le.props)&&void 0!==Re||(Le.props=Le.templateOptions),Object.defineProperty(Le,"templateOptions",{get:()=>Le.props,set:Se=>Le.props=Se,configurable:!0})}initRootOptions(Le){if(Le.parent)return;const Re=Le.options;Le.options.formState=Le.options.formState||{},Re.showError||(Re.showError=this.config.extras.showError),Re.fieldChanges||xt(Re,"fieldChanges",new g.xQ),Re._hiddenFieldsForCheck||(Re._hiddenFieldsForCheck=[]),Re._markForCheck=Se=>{console.warn("Formly: 'options._markForCheck' is deprecated since v6.0, use 'options.detectChanges' instead."),Re.detectChanges(Se)},Re.detectChanges=Se=>{var dt;Se._componentRefs&&(Se.options.checkExpressions(Se),pr(Se)),null===(dt=Se.fieldGroup)||void 0===dt||dt.forEach(st=>st&&Re.detectChanges(st))},Re.resetModel=Se=>{Se=vt(null!=Se?Se:Re._initialModel),Le.model&&(Object.keys(Le.model).forEach(dt=>delete Le.model[dt]),Object.assign(Le.model,Se||{})),Re.build(Le),Le.form.reset(Le.model),Re.parentForm&&Re.parentForm.control===Le.formControl&&(Re.parentForm.submitted=!1)},Re.updateInitialValue=Se=>Re._initialModel=vt(null!=Se?Se:Le.model),Le.options.updateInitialValue()}initFieldOptions(Le){var Re,Se;if(Oe(Le,{id:ce(`formly_${this.formId}`,Le,Le.index),hooks:{},modelOptions:{},validation:{messages:{}},props:Le.type&&Be(Le)?{label:"",placeholder:"",disabled:!1}:{}}),this.config.extras.resetFieldOnHide&&!1!==Le.resetOnHide&&(Le.resetOnHide=!0),"formly-template"!==Le.type&&(Le.template||(null===(Re=Le.expressions)||void 0===Re?void 0:Re.template)||(null===(Se=Le.expressionProperties)||void 0===Se?void 0:Se.template))&&(Le.type="formly-template"),!Le.type&&Le.fieldGroup&&(Le.type="formly-group"),Le.type&&this.config.getMergedField(Le),Be(Le)&&!We(Le.defaultValue)&&We(Ge(Le))){const dt=nn=>{var Fe;return nn.hide||(null===(Fe=nn.expressions)||void 0===Fe?void 0:Fe.hide)||nn.hideExpression};let st=!Le.resetOnHide||!dt(Le);if(!dt(Le)&&Le.resetOnHide){let nn=Le.parent;for(;nn&&!dt(nn);)nn=nn.parent;st=!nn||!dt(nn)}st&&He(Le,Le.defaultValue)}Le.wrappers=Le.wrappers||[]}getFieldComponentInstance(Le){const Re=()=>{var Se;let dt=this.config.resolveFieldTypeRef(Le);const st=null===(Se=Le._componentRefs)||void 0===Se?void 0:Se.slice(-1)[0];return st instanceof r.UuU&&(null==st?void 0:st.componentType)===(null==dt?void 0:dt.componentType)&&(dt=st),null==dt?void 0:dt.instance};return Le._proxyInstance||xt(Le,"_proxyInstance",new Proxy({},{get:(Se,dt)=>{var st;return null===(st=Re())||void 0===st?void 0:st[dt]},set:(Se,dt,st)=>Re()[dt]=st})),Le._proxyInstance}}function Rn(et){return{types:[{name:"formly-group",component:an},{name:"formly-template",component:zn}],extensions:[{name:"core",extension:new mn(et),priority:-250},{name:"field-validation",extension:new vr(et),priority:-200},{name:"field-form",extension:new Ji,priority:-150},{name:"field-expression",extension:new ui,priority:-100}]}}let Wn=(()=>{class et{constructor(Re,Se=[]){!Se||Se.forEach(dt=>Re.addConfig(dt))}static forRoot(Re={}){return{ngModule:et,providers:[{provide:mi,multi:!0,useFactory:Rn,deps:[ci]},{provide:mi,useValue:Re,multi:!0},ci,hr]}}static forChild(Re={}){return{ngModule:et,providers:[{provide:mi,multi:!0,useFactory:Rn,deps:[ci]},{provide:mi,useValue:Re,multi:!0},hr]}}}return et.\u0275fac=function(Re){return new(Re||et)(r.LFG(ci),r.LFG(mi,8))},et.\u0275mod=r.oAB({type:et}),et.\u0275inj=r.cJS({imports:[[ue.ez]]}),et})()},78160:(v,b,i)=>{"use strict";i.d(b,{Z:()=>re});var f=i(66224);const e=function u(H,se){for(var ae=H.length;ae--;)if((0,f.Z)(H[ae][0],se))return ae;return-1};var g=Array.prototype.splice;function ue(H){var se=-1,ae=null==H?0:H.length;for(this.clear();++se<ae;){var ie=H[se];this.set(ie[0],ie[1])}}ue.prototype.clear=function r(){this.__data__=[],this.size=0},ue.prototype.delete=function S(H){var se=this.__data__,ae=e(se,H);return!(ae<0||(ae==se.length-1?se.pop():g.call(se,ae,1),--this.size,0))},ue.prototype.get=function w(H){var se=this.__data__,ae=e(se,H);return ae<0?void 0:se[ae][1]},ue.prototype.has=function B(H){return e(this.__data__,H)>-1},ue.prototype.set=function j(H,se){var ae=this.__data__,ie=e(ae,H);return ie<0?(++this.size,ae.push([H,se])):ae[ie][1]=se,this};const re=ue},54673:(v,b,i)=>{"use strict";i.d(b,{Z:()=>u});var r=i(10259),a=i(40309);const u=(0,r.Z)(a.Z,"Map")},94013:(v,b,i)=>{"use strict";i.d(b,{Z:()=>rn});const f=(0,i(10259).Z)(Object,"create");var w=Object.prototype.hasOwnProperty;var j=Object.prototype.hasOwnProperty;function ae(vt){var xt=-1,Ct=null==vt?0:vt.length;for(this.clear();++xt<Ct;){var Gt=vt[xt];this.set(Gt[0],Gt[1])}}ae.prototype.clear=function u(){this.__data__=f?f(null):{},this.size=0},ae.prototype.delete=function p(vt){var xt=this.has(vt)&&delete this.__data__[vt];return this.size-=xt?1:0,xt},ae.prototype.get=function x(vt){var xt=this.__data__;if(f){var Ct=xt[vt];return"__lodash_hash_undefined__"===Ct?void 0:Ct}return w.call(xt,vt)?xt[vt]:void 0},ae.prototype.has=function q(vt){var xt=this.__data__;return f?void 0!==xt[vt]:j.call(xt,vt)},ae.prototype.set=function H(vt,xt){var Ct=this.__data__;return this.size+=this.has(vt)?0:1,Ct[vt]=f&&void 0===xt?"__lodash_hash_undefined__":xt,this};const ie=ae;var fe=i(78160),he=i(54673);const He=function Xe(vt,xt){var Ct=vt.__data__;return function Be(vt){var xt=typeof vt;return"string"==xt||"number"==xt||"symbol"==xt||"boolean"==xt?"__proto__"!==vt:null===vt}(xt)?Ct["string"==typeof xt?"string":"hash"]:Ct.map};function dn(vt){var xt=-1,Ct=null==vt?0:vt.length;for(this.clear();++xt<Ct;){var Gt=vt[xt];this.set(Gt[0],Gt[1])}}dn.prototype.clear=function Ce(){this.size=0,this.__data__={hash:new ie,map:new(he.Z||fe.Z),string:new ie}},dn.prototype.delete=function Pe(vt){var xt=He(this,vt).delete(vt);return this.size-=xt?1:0,xt},dn.prototype.get=function Oe(vt){return He(this,vt).get(vt)},dn.prototype.has=function We(vt){return He(this,vt).has(vt)},dn.prototype.set=function Nt(vt,xt){var Ct=He(this,vt),Gt=Ct.size;return Ct.set(vt,xt),this.size+=Ct.size==Gt?0:1,this};const rn=dn},15131:(v,b,i)=>{"use strict";i.d(b,{Z:()=>ue});var r=i(78160);var w=i(54673),x=i(94013);function q(re){var H=this.__data__=new r.Z(re);this.size=H.size}q.prototype.clear=function a(){this.__data__=new r.Z,this.size=0},q.prototype.delete=function u(re){var H=this.__data__,se=H.delete(re);return this.size=H.size,se},q.prototype.get=function p(re){return this.__data__.get(re)},q.prototype.has=function S(re){return this.__data__.has(re)},q.prototype.set=function W(re,H){var se=this.__data__;if(se instanceof r.Z){var ae=se.__data__;if(!w.Z||ae.length<199)return ae.push([re,H]),this.size=++se.size,this;se=this.__data__=new x.Z(ae)}return se.set(re,H),this.size=se.size,this};const ue=q},35770:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});const f=i(40309).Z.Symbol},83345:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});const f=i(40309).Z.Uint8Array},26438:(v,b,i)=>{"use strict";i.d(b,{Z:()=>x});var f=i(40591),u=i(34654),e=i(25014),p=i(28078),g=i(14803),M=Object.prototype.hasOwnProperty;const x=function w(B,W){var j=(0,u.Z)(B),q=!j&&(0,f.Z)(B),ue=!j&&!q&&(0,e.Z)(B),re=!j&&!q&&!ue&&(0,g.Z)(B),H=j||q||ue||re,se=H?function r(B,W){for(var j=-1,q=Array(B);++j<B;)q[j]=W(j);return q}(B.length,String):[],ae=se.length;for(var ie in B)(W||M.call(B,ie))&&(!H||!("length"==ie||ue&&("offset"==ie||"parent"==ie)||re&&("buffer"==ie||"byteLength"==ie||"byteOffset"==ie)||(0,p.Z)(ie,ae)))&&se.push(ie);return se}},57052:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=function r(f,u){for(var e=-1,p=u.length,g=f.length;++e<p;)f[g+e]=u[e];return f}},15427:(v,b,i)=>{"use strict";i.d(b,{Z:()=>p});var r=i(2951),a=i(66224),u=Object.prototype.hasOwnProperty;const p=function e(g,S,M){var w=g[S];(!u.call(g,S)||!(0,a.Z)(w,M)||void 0===M&&!(S in g))&&(0,r.Z)(g,S,M)}},2951:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});var r=i(99567);const f=function a(u,e,p){"__proto__"==e&&r.Z?(0,r.Z)(u,e,{configurable:!0,enumerable:!0,value:p,writable:!0}):u[e]=p}},65252:(v,b,i)=>{"use strict";i.d(b,{Z:()=>ua});var r=i(15131);var u=i(15427),e=i(57640),p=i(44409);var M=i(34673);var B=i(27672),W=i(36889),j=i(75694);var re=i(74202);var ae=i(22018),ie=i(23359),fe=i(17507),Ce=Object.prototype.hasOwnProperty;var Ve=i(80609);var Pe=/\w*$/;var Tt=i(35770),We=Tt.Z?Tt.Z.prototype:void 0,Qt=We?We.valueOf:void 0;var dn=i(1044);const Er=function xo(or,Mr,Ar){var cr=or.constructor;switch(Mr){case"[object ArrayBuffer]":return(0,Ve.Z)(or);case"[object Boolean]":case"[object Date]":return new cr(+or);case"[object DataView]":return function Xe(or,Mr){var Ar=Mr?(0,Ve.Z)(or.buffer):or.buffer;return new or.constructor(Ar,or.byteOffset,or.byteLength)}(or,Ar);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return(0,dn.Z)(or,Ar);case"[object Map]":case"[object Set]":return new cr;case"[object Number]":case"[object String]":return new cr(or);case"[object RegExp]":return function Ge(or){var Mr=new or.constructor(or.source,Pe.exec(or));return Mr.lastIndex=or.lastIndex,Mr}(or);case"[object Symbol]":return function Nt(or){return Qt?Object(Qt.call(or)):{}}(or)}};var an=i(42542),vn=i(34654),Zn=i(25014),Xn=i(6539);var ui=i(21162),vr=i(48514),Ji=vr.Z&&vr.Z.isMap;const Rn=Ji?(0,ui.Z)(Ji):function ri(or){return(0,Xn.Z)(or)&&"[object Map]"==(0,fe.Z)(or)};var Wn=i(4214);var Se=vr.Z&&vr.Z.isSet;const st=Se?(0,ui.Z)(Se):function Le(or){return(0,Xn.Z)(or)&&"[object Set]"==(0,fe.Z)(or)};var ti="[object Arguments]",_t="[object Function]",Cr="[object Object]",mo={};mo[ti]=mo["[object Array]"]=mo["[object ArrayBuffer]"]=mo["[object DataView]"]=mo["[object Boolean]"]=mo["[object Date]"]=mo["[object Float32Array]"]=mo["[object Float64Array]"]=mo["[object Int8Array]"]=mo["[object Int16Array]"]=mo["[object Int32Array]"]=mo["[object Map]"]=mo["[object Number]"]=mo[Cr]=mo["[object RegExp]"]=mo["[object Set]"]=mo["[object String]"]=mo["[object Symbol]"]=mo["[object Uint8Array]"]=mo["[object Uint8ClampedArray]"]=mo["[object Uint16Array]"]=mo["[object Uint32Array]"]=!0,mo["[object Error]"]=mo[_t]=mo["[object WeakMap]"]=!1;const ua=function Go(or,Mr,Ar,cr,pi,Sn){var $n,Jr=1&Mr,ro=2&Mr,go=4&Mr;if(Ar&&($n=pi?Ar(or,cr,pi,Sn):Ar(or)),void 0!==$n)return $n;if(!(0,Wn.Z)(or))return or;var Ro=(0,vn.Z)(or);if(Ro){if($n=function ce(or){var Mr=or.length,Ar=new or.constructor(Mr);return Mr&&"string"==typeof or[0]&&Ce.call(or,"index")&&(Ar.index=or.index,Ar.input=or.input),Ar}(or),!Jr)return(0,W.Z)(or,$n)}else{var Ys=(0,fe.Z)(or),ds=Ys==_t||"[object GeneratorFunction]"==Ys;if((0,Zn.Z)(or))return(0,B.Z)(or,Jr);if(Ys==Cr||Ys==ti||ds&&!pi){if($n=ro||ds?{}:(0,an.Z)(or),!Jr)return ro?function H(or,Mr){return(0,e.Z)(or,(0,re.Z)(or),Mr)}(or,function w(or,Mr){return or&&(0,e.Z)(Mr,(0,M.Z)(Mr),or)}($n,or)):function q(or,Mr){return(0,e.Z)(or,(0,j.Z)(or),Mr)}(or,function g(or,Mr){return or&&(0,e.Z)(Mr,(0,p.Z)(Mr),or)}($n,or))}else{if(!mo[Ys])return pi?or:{};$n=Er(or,Ys,Jr)}}Sn||(Sn=new r.Z);var es=Sn.get(or);if(es)return es;Sn.set(or,$n),st(or)?or.forEach(function(fa){$n.add(Go(fa,Mr,Ar,fa,or,Sn))}):Rn(or)&&or.forEach(function(fa,sa){$n.set(sa,Go(fa,Mr,Ar,sa,or,Sn))});var Ea=Ro?void 0:(go?ro?ie.Z:ae.Z:ro?M.Z:p.Z)(or);return function a(or,Mr){for(var Ar=-1,cr=null==or?0:or.length;++Ar<cr&&!1!==Mr(or[Ar],Ar,or););}(Ea||or,function(fa,sa){Ea&&(fa=or[sa=fa]),(0,u.Z)($n,sa,Go(fa,Mr,Ar,sa,or,Sn))}),$n}},49137:(v,b,i)=>{"use strict";i.d(b,{Z:()=>u});var r=i(57052),a=i(34654);const u=function f(e,p,g){var S=p(e);return(0,a.Z)(e)?S:(0,r.Z)(S,g(e))}},98286:(v,b,i)=>{"use strict";i.d(b,{Z:()=>ue});var r=i(35770),a=Object.prototype,f=a.hasOwnProperty,u=a.toString,e=r.Z?r.Z.toStringTag:void 0;var M=Object.prototype.toString;var j=r.Z?r.Z.toStringTag:void 0;const ue=function q(re){return null==re?void 0===re?"[object Undefined]":"[object Null]":j&&j in Object(re)?function p(re){var H=f.call(re,e),se=re[e];try{re[e]=void 0;var ae=!0}catch(fe){}var ie=u.call(re);return ae&&(H?re[e]=se:delete re[e]),ie}(re):function w(re){return M.call(re)}(re)}},21162:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=function r(f){return function(u){return f(u)}}},80609:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});var r=i(83345);const f=function a(u){var e=new u.constructor(u.byteLength);return new r.Z(e).set(new r.Z(u)),e}},27672:(v,b,i)=>{"use strict";i.d(b,{Z:()=>S});var r=i(40309),a="object"==typeof exports&&exports&&!exports.nodeType&&exports,f=a&&"object"==typeof module&&module&&!module.nodeType&&module,e=f&&f.exports===a?r.Z.Buffer:void 0,p=e?e.allocUnsafe:void 0;const S=function g(M,w){if(w)return M.slice();var x=M.length,B=p?p(x):new M.constructor(x);return M.copy(B),B}},1044:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});var r=i(80609);const f=function a(u,e){var p=e?(0,r.Z)(u.buffer):u.buffer;return new u.constructor(p,u.byteOffset,u.length)}},36889:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=function r(f,u){var e=-1,p=f.length;for(u||(u=Array(p));++e<p;)u[e]=f[e];return u}},57640:(v,b,i)=>{"use strict";i.d(b,{Z:()=>u});var r=i(15427),a=i(2951);const u=function f(e,p,g,S){var M=!g;g||(g={});for(var w=-1,x=p.length;++w<x;){var B=p[w],W=S?S(g[B],e[B],B,g,e):void 0;void 0===W&&(W=e[B]),M?(0,a.Z)(g,B,W):(0,r.Z)(g,B,W)}return g}},99567:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});var r=i(10259);const f=function(){try{var u=(0,r.Z)(Object,"defineProperty");return u({},"",{}),u}catch(e){}}()},7746:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a="object"==typeof global&&global&&global.Object===Object&&global},22018:(v,b,i)=>{"use strict";i.d(b,{Z:()=>e});var r=i(49137),a=i(75694),f=i(44409);const e=function u(p){return(0,r.Z)(p,f.Z,a.Z)}},23359:(v,b,i)=>{"use strict";i.d(b,{Z:()=>e});var r=i(49137),a=i(74202),f=i(34673);const e=function u(p){return(0,r.Z)(p,f.Z,a.Z)}},10259:(v,b,i)=>{"use strict";i.d(b,{Z:()=>fe});var he,r=i(58209),f=i(40309).Z["__core-js_shared__"],e=(he=/[^.]+$/.exec(f&&f.keys&&f.keys.IE_PROTO||""))?"Symbol(src)_1."+he:"";var S=i(4214),M=i(22035),x=/^\[object .+?Constructor\]$/,ue=RegExp("^"+Function.prototype.toString.call(Object.prototype.hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const H=function re(he){return!(!(0,S.Z)(he)||function p(he){return!!e&&e in he}(he))&&((0,r.Z)(he)?ue:x).test((0,M.Z)(he))},fe=function ie(he,Ce){var ce=function se(he,Ce){return null==he?void 0:he[Ce]}(he,Ce);return H(ce)?ce:void 0}},11595:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});const f=(0,i(24184).Z)(Object.getPrototypeOf,Object)},75694:(v,b,i)=>{"use strict";i.d(b,{Z:()=>S});var f=i(38387),e=Object.prototype.propertyIsEnumerable,p=Object.getOwnPropertySymbols;const S=p?function(M){return null==M?[]:(M=Object(M),function r(M,w){for(var x=-1,B=null==M?0:M.length,W=0,j=[];++x<B;){var q=M[x];w(q,x,M)&&(j[W++]=q)}return j}(p(M),function(w){return e.call(M,w)}))}:f.Z},74202:(v,b,i)=>{"use strict";i.d(b,{Z:()=>g});var r=i(57052),a=i(11595),f=i(75694),u=i(38387);const g=Object.getOwnPropertySymbols?function(S){for(var M=[];S;)(0,r.Z)(M,(0,f.Z)(S)),S=(0,a.Z)(S);return M}:u.Z},17507:(v,b,i)=>{"use strict";i.d(b,{Z:()=>Be});var r=i(10259),a=i(40309);const u=(0,r.Z)(a.Z,"DataView");var e=i(54673);const g=(0,r.Z)(a.Z,"Promise"),M=(0,r.Z)(a.Z,"Set"),x=(0,r.Z)(a.Z,"WeakMap");var B=i(98286),W=i(22035),j="[object Map]",ue="[object Promise]",re="[object Set]",H="[object WeakMap]",se="[object DataView]",ae=(0,W.Z)(u),ie=(0,W.Z)(e.Z),fe=(0,W.Z)(g),he=(0,W.Z)(M),Ce=(0,W.Z)(x),ce=B.Z;(u&&ce(new u(new ArrayBuffer(1)))!=se||e.Z&&ce(new e.Z)!=j||g&&ce(g.resolve())!=ue||M&&ce(new M)!=re||x&&ce(new x)!=H)&&(ce=function(Ve){var Xe=(0,B.Z)(Ve),He="[object Object]"==Xe?Ve.constructor:void 0,Pe=He?(0,W.Z)(He):"";if(Pe)switch(Pe){case ae:return se;case ie:return j;case fe:return ue;case he:return re;case Ce:return H}return Xe});const Be=ce},42542:(v,b,i)=>{"use strict";i.d(b,{Z:()=>S});var r=i(4214),a=Object.create;const u=function(){function M(){}return function(w){if(!(0,r.Z)(w))return{};if(a)return a(w);M.prototype=w;var x=new M;return M.prototype=void 0,x}}();var e=i(11595),p=i(31550);const S=function g(M){return"function"!=typeof M.constructor||(0,p.Z)(M)?{}:u((0,e.Z)(M))}},28078:(v,b,i)=>{"use strict";i.d(b,{Z:()=>u});var a=/^(?:0|[1-9]\d*)$/;const u=function f(e,p){var g=typeof e;return!!(p=null==p?9007199254740991:p)&&("number"==g||"symbol"!=g&&a.test(e))&&e>-1&&e%1==0&&e<p}},31550:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});var r=Object.prototype;const f=function a(u){var e=u&&u.constructor;return u===("function"==typeof e&&e.prototype||r)}},48514:(v,b,i)=>{"use strict";i.d(b,{Z:()=>g});var r=i(7746),a="object"==typeof exports&&exports&&!exports.nodeType&&exports,f=a&&"object"==typeof module&&module&&!module.nodeType&&module,e=f&&f.exports===a&&r.Z.process;const g=function(){try{return f&&f.require&&f.require("util").types||e&&e.binding&&e.binding("util")}catch(M){}}()},24184:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=function r(f,u){return function(e){return f(u(e))}}},40309:(v,b,i)=>{"use strict";i.d(b,{Z:()=>u});var r=i(7746),a="object"==typeof self&&self&&self.Object===Object&&self;const u=r.Z||a||Function("return this")()},22035:(v,b,i)=>{"use strict";i.d(b,{Z:()=>u});var a=Function.prototype.toString;const u=function f(e){if(null!=e){try{return a.call(e)}catch(p){}try{return e+""}catch(p){}}return""}},66224:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=function r(f,u){return f===u||f!=f&&u!=u}},40591:(v,b,i)=>{"use strict";i.d(b,{Z:()=>w});var r=i(98286),a=i(6539);const e=function u(x){return(0,a.Z)(x)&&"[object Arguments]"==(0,r.Z)(x)};var p=Object.prototype,g=p.hasOwnProperty,S=p.propertyIsEnumerable;const w=e(function(){return arguments}())?e:function(x){return(0,a.Z)(x)&&g.call(x,"callee")&&!S.call(x,"callee")}},34654:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=Array.isArray},18402:(v,b,i)=>{"use strict";i.d(b,{Z:()=>u});var r=i(58209),a=i(19238);const u=function f(e){return null!=e&&(0,a.Z)(e.length)&&!(0,r.Z)(e)}},25014:(v,b,i)=>{"use strict";i.d(b,{Z:()=>w});var r=i(40309),u="object"==typeof exports&&exports&&!exports.nodeType&&exports,e=u&&"object"==typeof module&&module&&!module.nodeType&&module,g=e&&e.exports===u?r.Z.Buffer:void 0;const w=(g?g.isBuffer:void 0)||function a(){return!1}},58209:(v,b,i)=>{"use strict";i.d(b,{Z:()=>S});var r=i(98286),a=i(4214);const S=function g(M){if(!(0,a.Z)(M))return!1;var w=(0,r.Z)(M);return"[object Function]"==w||"[object GeneratorFunction]"==w||"[object AsyncFunction]"==w||"[object Proxy]"==w}},19238:(v,b,i)=>{"use strict";i.d(b,{Z:()=>f});const f=function a(u){return"number"==typeof u&&u>-1&&u%1==0&&u<=9007199254740991}},4214:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=function r(f){var u=typeof f;return null!=f&&("object"==u||"function"==u)}},6539:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=function r(f){return null!=f&&"object"==typeof f}},14803:(v,b,i)=>{"use strict";i.d(b,{Z:()=>Qt});var r=i(98286),a=i(19238),f=i(6539),Xe={};Xe["[object Float32Array]"]=Xe["[object Float64Array]"]=Xe["[object Int8Array]"]=Xe["[object Int16Array]"]=Xe["[object Int32Array]"]=Xe["[object Uint8Array]"]=Xe["[object Uint8ClampedArray]"]=Xe["[object Uint16Array]"]=Xe["[object Uint32Array]"]=!0,Xe["[object Arguments]"]=Xe["[object Array]"]=Xe["[object ArrayBuffer]"]=Xe["[object Boolean]"]=Xe["[object DataView]"]=Xe["[object Date]"]=Xe["[object Error]"]=Xe["[object Function]"]=Xe["[object Map]"]=Xe["[object Number]"]=Xe["[object Object]"]=Xe["[object RegExp]"]=Xe["[object Set]"]=Xe["[object String]"]=Xe["[object WeakMap]"]=!1;var Ge=i(21162),Oe=i(48514),Tt=Oe.Z&&Oe.Z.isTypedArray;const Qt=Tt?(0,Ge.Z)(Tt):function He(Nt){return(0,f.Z)(Nt)&&(0,a.Z)(Nt.length)&&!!Xe[(0,r.Z)(Nt)]}},44409:(v,b,i)=>{"use strict";i.d(b,{Z:()=>B});var r=i(26438),a=i(31550);const e=(0,i(24184).Z)(Object.keys,Object);var g=Object.prototype.hasOwnProperty;var w=i(18402);const B=function x(W){return(0,w.Z)(W)?(0,r.Z)(W):function S(W){if(!(0,a.Z)(W))return e(W);var j=[];for(var q in Object(W))g.call(W,q)&&"constructor"!=q&&j.push(q);return j}(W)}},34673:(v,b,i)=>{"use strict";i.d(b,{Z:()=>B});var r=i(26438),a=i(4214),f=i(31550);var g=Object.prototype.hasOwnProperty;const M=function S(W){if(!(0,a.Z)(W))return function u(W){var j=[];if(null!=W)for(var q in Object(W))j.push(q);return j}(W);var j=(0,f.Z)(W),q=[];for(var ue in W)"constructor"==ue&&(j||!g.call(W,ue))||q.push(ue);return q};var w=i(18402);const B=function x(W){return(0,w.Z)(W)?(0,r.Z)(W,!0):M(W)}},38387:(v,b,i)=>{"use strict";i.d(b,{Z:()=>a});const a=function r(){return[]}},92870:(v,b,i)=>{"use strict";i.d(b,{Rh:()=>Qt,_W:()=>Oe});var r=i(89724),a=i(32019),f=i(79765),u=i(11048),e=i(14800);const p=["toast-component",""];function g(vt,xt){if(1&vt){const Ct=r.EpF();r.TgZ(0,"button",5),r.NdJ("click",function(){return r.CHM(Ct),r.oxw().remove()}),r.TgZ(1,"span",6),r._uU(2,"\xd7"),r.qZA()()}}function S(vt,xt){if(1&vt&&(r.ynx(0),r._uU(1),r.BQk()),2&vt){const Ct=r.oxw(2);r.xp6(1),r.hij("[",Ct.duplicatesCount+1,"]")}}function M(vt,xt){if(1&vt&&(r.TgZ(0,"div"),r._uU(1),r.YNc(2,S,2,1,"ng-container",4),r.qZA()),2&vt){const Ct=r.oxw();r.Tol(Ct.options.titleClass),r.uIk("aria-label",Ct.title),r.xp6(1),r.hij(" ",Ct.title," "),r.xp6(1),r.Q6J("ngIf",Ct.duplicatesCount)}}function w(vt,xt){if(1&vt&&r._UZ(0,"div",7),2&vt){const Ct=r.oxw();r.Tol(Ct.options.messageClass),r.Q6J("innerHTML",Ct.message,r.oJD)}}function x(vt,xt){if(1&vt&&(r.TgZ(0,"div",8),r._uU(1),r.qZA()),2&vt){const Ct=r.oxw();r.Tol(Ct.options.messageClass),r.uIk("aria-label",Ct.message),r.xp6(1),r.hij(" ",Ct.message," ")}}function B(vt,xt){if(1&vt&&(r.TgZ(0,"div"),r._UZ(1,"div",9),r.qZA()),2&vt){const Ct=r.oxw();r.xp6(1),r.Udp("width",Ct.width+"%")}}function W(vt,xt){if(1&vt){const Ct=r.EpF();r.TgZ(0,"button",5),r.NdJ("click",function(){return r.CHM(Ct),r.oxw().remove()}),r.TgZ(1,"span",6),r._uU(2,"\xd7"),r.qZA()()}}function j(vt,xt){if(1&vt&&(r.ynx(0),r._uU(1),r.BQk()),2&vt){const Ct=r.oxw(2);r.xp6(1),r.hij("[",Ct.duplicatesCount+1,"]")}}function q(vt,xt){if(1&vt&&(r.TgZ(0,"div"),r._uU(1),r.YNc(2,j,2,1,"ng-container",4),r.qZA()),2&vt){const Ct=r.oxw();r.Tol(Ct.options.titleClass),r.uIk("aria-label",Ct.title),r.xp6(1),r.hij(" ",Ct.title," "),r.xp6(1),r.Q6J("ngIf",Ct.duplicatesCount)}}function ue(vt,xt){if(1&vt&&r._UZ(0,"div",7),2&vt){const Ct=r.oxw();r.Tol(Ct.options.messageClass),r.Q6J("innerHTML",Ct.message,r.oJD)}}function re(vt,xt){if(1&vt&&(r.TgZ(0,"div",8),r._uU(1),r.qZA()),2&vt){const Ct=r.oxw();r.Tol(Ct.options.messageClass),r.uIk("aria-label",Ct.message),r.xp6(1),r.hij(" ",Ct.message," ")}}function H(vt,xt){if(1&vt&&(r.TgZ(0,"div"),r._UZ(1,"div",9),r.qZA()),2&vt){const Ct=r.oxw();r.xp6(1),r.Udp("width",Ct.width+"%")}}class ie{constructor(xt,Ct){this.component=xt,this.injector=Ct}attach(xt,Ct){return this._attachedHost=xt,xt.attach(this,Ct)}detach(){const xt=this._attachedHost;if(xt)return this._attachedHost=void 0,xt.detach()}get isAttached(){return null!=this._attachedHost}setAttachedHost(xt){this._attachedHost=xt}}class he{constructor(xt,Ct,Gt,Fn,pr,mi){this.toastId=xt,this.config=Ct,this.message=Gt,this.title=Fn,this.toastType=pr,this.toastRef=mi,this._onTap=new f.xQ,this._onAction=new f.xQ,this.toastRef.afterClosed().subscribe(()=>{this._onAction.complete(),this._onTap.complete()})}triggerTap(){this._onTap.next(),this.config.tapToDismiss&&this._onTap.complete()}onTap(){return this._onTap.asObservable()}triggerAction(xt){this._onAction.next(xt)}onAction(){return this._onAction.asObservable()}}const Ce={maxOpened:0,autoDismiss:!1,newestOnTop:!0,preventDuplicates:!1,countDuplicates:!1,resetTimeoutOnDuplicate:!1,includeTitleDuplicates:!1,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},closeButton:!1,disableTimeOut:!1,timeOut:5e3,extendedTimeOut:1e3,enableHtml:!1,progressBar:!1,toastClass:"ngx-toastr",positionClass:"toast-top-right",titleClass:"toast-title",messageClass:"toast-message",easing:"ease-in",easeTime:300,tapToDismiss:!0,onActivateTick:!1,progressAnimation:"decreasing",payload:null},ce=new r.OlP("ToastConfig");class Be{constructor(xt){this._overlayRef=xt,this.duplicatesCount=0,this._afterClosed=new f.xQ,this._activate=new f.xQ,this._manualClose=new f.xQ,this._resetTimeout=new f.xQ,this._countDuplicate=new f.xQ}manualClose(){this._manualClose.next(),this._manualClose.complete()}manualClosed(){return this._manualClose.asObservable()}timeoutReset(){return this._resetTimeout.asObservable()}countDuplicate(){return this._countDuplicate.asObservable()}close(){this._overlayRef.detach(),this._afterClosed.next(),this._manualClose.next(),this._afterClosed.complete(),this._manualClose.complete(),this._activate.complete(),this._resetTimeout.complete(),this._countDuplicate.complete()}afterClosed(){return this._afterClosed.asObservable()}isInactive(){return this._activate.isStopped}activate(){this._activate.next(),this._activate.complete()}afterActivate(){return this._activate.asObservable()}onDuplicate(xt,Ct){xt&&this._resetTimeout.next(),Ct&&this._countDuplicate.next(++this.duplicatesCount)}}class Ve{constructor(xt,Ct){this._toastPackage=xt,this._parentInjector=Ct}get(xt,Ct,Gt){return xt===he?this._toastPackage:this._parentInjector.get(xt,Ct,Gt)}}class Xe extends class fe{attach(xt,Ct){return this._attachedPortal=xt,this.attachComponentPortal(xt,Ct)}detach(){this._attachedPortal&&this._attachedPortal.setAttachedHost(),this._attachedPortal=void 0,this._disposeFn&&(this._disposeFn(),this._disposeFn=void 0)}setDisposeFn(xt){this._disposeFn=xt}}{constructor(xt,Ct,Gt){super(),this._hostDomElement=xt,this._componentFactoryResolver=Ct,this._appRef=Gt}attachComponentPortal(xt,Ct){const Gt=this._componentFactoryResolver.resolveComponentFactory(xt.component);let Fn;return Fn=Gt.create(xt.injector),this._appRef.attachView(Fn.hostView),this.setDisposeFn(()=>{this._appRef.detachView(Fn.hostView),Fn.destroy()}),Ct?this._hostDomElement.insertBefore(this._getComponentRootNode(Fn),this._hostDomElement.firstChild):this._hostDomElement.appendChild(this._getComponentRootNode(Fn)),Fn}_getComponentRootNode(xt){return xt.hostView.rootNodes[0]}}class He{constructor(xt){this._portalHost=xt}attach(xt,Ct=!0){return this._portalHost.attach(xt,Ct)}detach(){return this._portalHost.detach()}}let Pe=(()=>{class vt{constructor(Ct){this._document=Ct}ngOnDestroy(){this._containerElement&&this._containerElement.parentNode&&this._containerElement.parentNode.removeChild(this._containerElement)}getContainerElement(){return this._containerElement||this._createContainer(),this._containerElement}_createContainer(){const Ct=this._document.createElement("div");Ct.classList.add("overlay-container"),Ct.setAttribute("aria-live","polite"),this._document.body.appendChild(Ct),this._containerElement=Ct}}return vt.\u0275fac=function(Ct){return new(Ct||vt)(r.LFG(u.K0))},vt.\u0275prov=r.Yz7({token:vt,factory:vt.\u0275fac,providedIn:"root"}),vt})(),Ge=(()=>{class vt{constructor(Ct,Gt,Fn,pr){this._overlayContainer=Ct,this._componentFactoryResolver=Gt,this._appRef=Fn,this._document=pr,this._paneElements=new Map}create(Ct,Gt){return this._createOverlayRef(this.getPaneElement(Ct,Gt))}getPaneElement(Ct="",Gt){return this._paneElements.get(Gt)||this._paneElements.set(Gt,{}),this._paneElements.get(Gt)[Ct]||(this._paneElements.get(Gt)[Ct]=this._createPaneElement(Ct,Gt)),this._paneElements.get(Gt)[Ct]}_createPaneElement(Ct,Gt){const Fn=this._document.createElement("div");return Fn.id="toast-container",Fn.classList.add(Ct),Fn.classList.add("toast-container"),Gt?Gt.getContainerElement().appendChild(Fn):this._overlayContainer.getContainerElement().appendChild(Fn),Fn}_createPortalHost(Ct){return new Xe(Ct,this._componentFactoryResolver,this._appRef)}_createOverlayRef(Ct){return new He(this._createPortalHost(Ct))}}return vt.\u0275fac=function(Ct){return new(Ct||vt)(r.LFG(Pe),r.LFG(r._Vd),r.LFG(r.z2F),r.LFG(u.K0))},vt.\u0275prov=r.Yz7({token:vt,factory:vt.\u0275fac,providedIn:"root"}),vt})(),Oe=(()=>{class vt{constructor(Ct,Gt,Fn,pr,mi){this.overlay=Gt,this._injector=Fn,this.sanitizer=pr,this.ngZone=mi,this.currentlyActive=0,this.toasts=[],this.index=0,this.toastrConfig=Object.assign(Object.assign({},Ct.default),Ct.config),Ct.config.iconClasses&&(this.toastrConfig.iconClasses=Object.assign(Object.assign({},Ct.default.iconClasses),Ct.config.iconClasses))}show(Ct,Gt,Fn={},pr=""){return this._preBuildNotification(pr,Ct,Gt,this.applyConfig(Fn))}success(Ct,Gt,Fn={}){return this._preBuildNotification(this.toastrConfig.iconClasses.success||"",Ct,Gt,this.applyConfig(Fn))}error(Ct,Gt,Fn={}){return this._preBuildNotification(this.toastrConfig.iconClasses.error||"",Ct,Gt,this.applyConfig(Fn))}info(Ct,Gt,Fn={}){return this._preBuildNotification(this.toastrConfig.iconClasses.info||"",Ct,Gt,this.applyConfig(Fn))}warning(Ct,Gt,Fn={}){return this._preBuildNotification(this.toastrConfig.iconClasses.warning||"",Ct,Gt,this.applyConfig(Fn))}clear(Ct){for(const Gt of this.toasts)if(void 0!==Ct){if(Gt.toastId===Ct)return void Gt.toastRef.manualClose()}else Gt.toastRef.manualClose()}remove(Ct){const Gt=this._findToast(Ct);if(!Gt||(Gt.activeToast.toastRef.close(),this.toasts.splice(Gt.index,1),this.currentlyActive=this.currentlyActive-1,!this.toastrConfig.maxOpened||!this.toasts.length))return!1;if(this.currentlyActive<this.toastrConfig.maxOpened&&this.toasts[this.currentlyActive]){const Fn=this.toasts[this.currentlyActive].toastRef;Fn.isInactive()||(this.currentlyActive=this.currentlyActive+1,Fn.activate())}return!0}findDuplicate(Ct="",Gt="",Fn,pr){const{includeTitleDuplicates:mi}=this.toastrConfig;for(const ci of this.toasts){const hr=mi&&ci.title===Ct;if((!mi||hr)&&ci.message===Gt)return ci.toastRef.onDuplicate(Fn,pr),ci}return null}applyConfig(Ct={}){return Object.assign(Object.assign({},this.toastrConfig),Ct)}_findToast(Ct){for(let Gt=0;Gt<this.toasts.length;Gt++)if(this.toasts[Gt].toastId===Ct)return{index:Gt,activeToast:this.toasts[Gt]};return null}_preBuildNotification(Ct,Gt,Fn,pr){return pr.onActivateTick?this.ngZone.run(()=>this._buildNotification(Ct,Gt,Fn,pr)):this._buildNotification(Ct,Gt,Fn,pr)}_buildNotification(Ct,Gt,Fn,pr){if(!pr.toastComponent)throw new Error("toastComponent required");const mi=this.findDuplicate(Fn,Gt,this.toastrConfig.resetTimeoutOnDuplicate&&pr.timeOut>0,this.toastrConfig.countDuplicates);if((this.toastrConfig.includeTitleDuplicates&&Fn||Gt)&&this.toastrConfig.preventDuplicates&&null!==mi)return mi;this.previousToastMessage=Gt;let ci=!1;this.toastrConfig.maxOpened&&this.currentlyActive>=this.toastrConfig.maxOpened&&(ci=!0,this.toastrConfig.autoDismiss&&this.clear(this.toasts[0].toastId));const hr=this.overlay.create(pr.positionClass,this.overlayContainer);this.index=this.index+1;let Br=Gt;Gt&&pr.enableHtml&&(Br=this.sanitizer.sanitize(r.q3G.HTML,Gt));const Ur=new Be(hr),Hn=new he(this.index,pr,Br,Fn,Ct,Ur),er=new Ve(Hn,this._injector),_r=new ie(pr.toastComponent,er),ei=hr.attach(_r,this.toastrConfig.newestOnTop);Ur.componentInstance=ei.instance;const bi={toastId:this.index,title:Fn||"",message:Gt||"",toastRef:Ur,onShown:Ur.afterActivate(),onHidden:Ur.afterClosed(),onTap:Hn.onTap(),onAction:Hn.onAction(),portal:ei};return ci||(this.currentlyActive=this.currentlyActive+1,setTimeout(()=>{bi.toastRef.activate()})),this.toasts.push(bi),bi}}return vt.\u0275fac=function(Ct){return new(Ct||vt)(r.LFG(ce),r.LFG(Ge),r.LFG(r.zs3),r.LFG(e.H7),r.LFG(r.R0b))},vt.\u0275prov=r.Yz7({token:vt,factory:vt.\u0275fac,providedIn:"root"}),vt})(),Tt=(()=>{class vt{constructor(Ct,Gt,Fn){this.toastrService=Ct,this.toastPackage=Gt,this.ngZone=Fn,this.width=-1,this.toastClasses="",this.state={value:"inactive",params:{easeTime:this.toastPackage.config.easeTime,easing:"ease-in"}},this.message=Gt.message,this.title=Gt.title,this.options=Gt.config,this.originalTimeout=Gt.config.timeOut,this.toastClasses=`${Gt.toastType} ${Gt.config.toastClass}`,this.sub=Gt.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=Gt.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=Gt.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=Gt.toastRef.countDuplicate().subscribe(pr=>{this.duplicatesCount=pr})}get displayStyle(){if("inactive"===this.state.value)return"none"}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state=Object.assign(Object.assign({},this.state),{value:"active"}),!0!==this.options.disableTimeOut&&"timeOut"!==this.options.disableTimeOut&&this.options.timeOut&&(this.outsideTimeout(()=>this.remove(),this.options.timeOut),this.hideTime=(new Date).getTime()+this.options.timeOut,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}updateProgress(){if(0===this.width||100===this.width||!this.options.timeOut)return;const Ct=(new Date).getTime();this.width=(this.hideTime-Ct)/this.options.timeOut*100,"increasing"===this.options.progressAnimation&&(this.width=100-this.width),this.width<=0&&(this.width=0),this.width>=100&&(this.width=100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state=Object.assign(Object.assign({},this.state),{value:"active"}),this.outsideTimeout(()=>this.remove(),this.originalTimeout),this.options.timeOut=this.originalTimeout,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10)}remove(){"removed"!==this.state.value&&(clearTimeout(this.timeout),this.state=Object.assign(Object.assign({},this.state),{value:"removed"}),this.outsideTimeout(()=>this.toastrService.remove(this.toastPackage.toastId),+this.toastPackage.config.easeTime))}tapToast(){"removed"!==this.state.value&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){"removed"!==this.state.value&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width=0)}delayedHideToast(){!0===this.options.disableTimeOut||"extendedTimeOut"===this.options.disableTimeOut||0===this.options.extendedTimeOut||"removed"===this.state.value||(this.outsideTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&this.outsideInterval(()=>this.updateProgress(),10))}outsideTimeout(Ct,Gt){this.ngZone?this.ngZone.runOutsideAngular(()=>this.timeout=setTimeout(()=>this.runInsideAngular(Ct),Gt)):this.timeout=setTimeout(()=>Ct(),Gt)}outsideInterval(Ct,Gt){this.ngZone?this.ngZone.runOutsideAngular(()=>this.intervalId=setInterval(()=>this.runInsideAngular(Ct),Gt)):this.intervalId=setInterval(()=>Ct(),Gt)}runInsideAngular(Ct){this.ngZone?this.ngZone.run(()=>Ct()):Ct()}}return vt.\u0275fac=function(Ct){return new(Ct||vt)(r.Y36(Oe),r.Y36(he),r.Y36(r.R0b))},vt.\u0275cmp=r.Xpm({type:vt,selectors:[["","toast-component",""]],hostVars:5,hostBindings:function(Ct,Gt){1&Ct&&r.NdJ("click",function(){return Gt.tapToast()})("mouseenter",function(){return Gt.stickAround()})("mouseleave",function(){return Gt.delayedHideToast()}),2&Ct&&(r.d8E("@flyInOut",Gt.state),r.Tol(Gt.toastClasses),r.Udp("display",Gt.displayStyle))},attrs:p,decls:5,vars:5,consts:[["type","button","class","toast-close-button","aria-label","Close",3,"click",4,"ngIf"],[3,"class",4,"ngIf"],["role","alert",3,"class","innerHTML",4,"ngIf"],["role","alert",3,"class",4,"ngIf"],[4,"ngIf"],["type","button","aria-label","Close",1,"toast-close-button",3,"click"],["aria-hidden","true"],["role","alert",3,"innerHTML"],["role","alert"],[1,"toast-progress"]],template:function(Ct,Gt){1&Ct&&(r.YNc(0,g,3,0,"button",0),r.YNc(1,M,3,5,"div",1),r.YNc(2,w,1,3,"div",2),r.YNc(3,x,2,4,"div",3),r.YNc(4,B,2,2,"div",4)),2&Ct&&(r.Q6J("ngIf",Gt.options.closeButton),r.xp6(1),r.Q6J("ngIf",Gt.title),r.xp6(1),r.Q6J("ngIf",Gt.message&&Gt.options.enableHtml),r.xp6(1),r.Q6J("ngIf",Gt.message&&!Gt.options.enableHtml),r.xp6(1),r.Q6J("ngIf",Gt.options.progressBar))},directives:[u.O5],encapsulation:2,data:{animation:[(0,a.X$)("flyInOut",[(0,a.SB)("inactive",(0,a.oB)({opacity:0})),(0,a.SB)("active",(0,a.oB)({opacity:1})),(0,a.SB)("removed",(0,a.oB)({opacity:0})),(0,a.eR)("inactive => active",(0,a.jt)("{{ easeTime }}ms {{ easing }}")),(0,a.eR)("active => removed",(0,a.jt)("{{ easeTime }}ms {{ easing }}"))])]}}),vt})();const We=Object.assign(Object.assign({},Ce),{toastComponent:Tt});let Qt=(()=>{class vt{static forRoot(Ct={}){return{ngModule:vt,providers:[{provide:ce,useValue:{default:We,config:Ct}}]}}}return vt.\u0275fac=function(Ct){return new(Ct||vt)},vt.\u0275mod=r.oAB({type:vt}),vt.\u0275inj=r.cJS({imports:[[u.ez]]}),vt})(),Yt=(()=>{class vt{constructor(Ct,Gt,Fn){this.toastrService=Ct,this.toastPackage=Gt,this.appRef=Fn,this.width=-1,this.toastClasses="",this.state="inactive",this.message=Gt.message,this.title=Gt.title,this.options=Gt.config,this.originalTimeout=Gt.config.timeOut,this.toastClasses=`${Gt.toastType} ${Gt.config.toastClass}`,this.sub=Gt.toastRef.afterActivate().subscribe(()=>{this.activateToast()}),this.sub1=Gt.toastRef.manualClosed().subscribe(()=>{this.remove()}),this.sub2=Gt.toastRef.timeoutReset().subscribe(()=>{this.resetTimeout()}),this.sub3=Gt.toastRef.countDuplicate().subscribe(pr=>{this.duplicatesCount=pr})}get displayStyle(){if("inactive"===this.state)return"none"}ngOnDestroy(){this.sub.unsubscribe(),this.sub1.unsubscribe(),this.sub2.unsubscribe(),this.sub3.unsubscribe(),clearInterval(this.intervalId),clearTimeout(this.timeout)}activateToast(){this.state="active",!(!0===this.options.disableTimeOut||"timeOut"===this.options.disableTimeOut)&&this.options.timeOut&&(this.timeout=setTimeout(()=>{this.remove()},this.options.timeOut),this.hideTime=(new Date).getTime()+this.options.timeOut,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10))),this.options.onActivateTick&&this.appRef.tick()}updateProgress(){if(0===this.width||100===this.width||!this.options.timeOut)return;const Ct=(new Date).getTime();this.width=(this.hideTime-Ct)/this.options.timeOut*100,"increasing"===this.options.progressAnimation&&(this.width=100-this.width),this.width<=0&&(this.width=0),this.width>=100&&(this.width=100)}resetTimeout(){clearTimeout(this.timeout),clearInterval(this.intervalId),this.state="active",this.options.timeOut=this.originalTimeout,this.timeout=setTimeout(()=>this.remove(),this.originalTimeout),this.hideTime=(new Date).getTime()+(this.originalTimeout||0),this.width=-1,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10))}remove(){"removed"!==this.state&&(clearTimeout(this.timeout),this.state="removed",this.timeout=setTimeout(()=>this.toastrService.remove(this.toastPackage.toastId)))}tapToast(){"removed"!==this.state&&(this.toastPackage.triggerTap(),this.options.tapToDismiss&&this.remove())}stickAround(){"removed"!==this.state&&(clearTimeout(this.timeout),this.options.timeOut=0,this.hideTime=0,clearInterval(this.intervalId),this.width=0)}delayedHideToast(){!0===this.options.disableTimeOut||"extendedTimeOut"===this.options.disableTimeOut||0===this.options.extendedTimeOut||"removed"===this.state||(this.timeout=setTimeout(()=>this.remove(),this.options.extendedTimeOut),this.options.timeOut=this.options.extendedTimeOut,this.hideTime=(new Date).getTime()+(this.options.timeOut||0),this.width=-1,this.options.progressBar&&(this.intervalId=setInterval(()=>this.updateProgress(),10)))}}return vt.\u0275fac=function(Ct){return new(Ct||vt)(r.Y36(Oe),r.Y36(he),r.Y36(r.z2F))},vt.\u0275cmp=r.Xpm({type:vt,selectors:[["","toast-component",""]],hostVars:4,hostBindings:function(Ct,Gt){1&Ct&&r.NdJ("click",function(){return Gt.tapToast()})("mouseenter",function(){return Gt.stickAround()})("mouseleave",function(){return Gt.delayedHideToast()}),2&Ct&&(r.Tol(Gt.toastClasses),r.Udp("display",Gt.displayStyle))},attrs:p,decls:5,vars:5,consts:[["type","button","class","toast-close-button","aria-label","Close",3,"click",4,"ngIf"],[3,"class",4,"ngIf"],["role","alert",3,"class","innerHTML",4,"ngIf"],["role","alert",3,"class",4,"ngIf"],[4,"ngIf"],["type","button","aria-label","Close",1,"toast-close-button",3,"click"],["aria-hidden","true"],["role","alert",3,"innerHTML"],["role","alert"],[1,"toast-progress"]],template:function(Ct,Gt){1&Ct&&(r.YNc(0,W,3,0,"button",0),r.YNc(1,q,3,5,"div",1),r.YNc(2,ue,1,3,"div",2),r.YNc(3,re,2,4,"div",3),r.YNc(4,H,2,2,"div",4)),2&Ct&&(r.Q6J("ngIf",Gt.options.closeButton),r.xp6(1),r.Q6J("ngIf",Gt.title),r.xp6(1),r.Q6J("ngIf",Gt.message&&Gt.options.enableHtml),r.xp6(1),r.Q6J("ngIf",Gt.message&&!Gt.options.enableHtml),r.xp6(1),r.Q6J("ngIf",Gt.options.progressBar))},directives:[u.O5],encapsulation:2}),vt})();Object.assign(Object.assign({},Ce),{toastComponent:Yt})}},v=>{v(v.s=87830)}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.374f1f989f34e1be.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.374f1f989f34e1be.js
new file mode 100644 (file)
index 0000000..39a4c29
--- /dev/null
@@ -0,0 +1 @@
+(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[429],{99140:function(ke,Ce,me){"use strict";var ye,Le,se=this&&this.__spreadArray||function(le,fe,De){if(De||2===arguments.length)for(var ve,Te=0,Ve=fe.length;Te<Ve;Te++)(ve||!(Te in fe))&&(ve||(ve=Array.prototype.slice.call(fe,0,Te)),ve[Te]=fe[Te]);return le.concat(ve||Array.prototype.slice.call(fe))};ye=function(){!function(e){var r=e.performance;function t(v){r&&r.mark&&r.mark(v)}function n(v,o){r&&r.measure&&r.measure(v,o)}t("Zone");var u=e.__Zone_symbol_prefix||"__zone_symbol__";function c(v){return u+v}var f=!0===e[c("forceDuplicateZoneCheck")];if(e.Zone){if(f||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}var d=function(){function v(o,a){this._parent=o,this._name=a?a.name||"unnamed":"<root>",this._properties=a&&a.properties||{},this._zoneDelegate=new T(this,this._parent&&this._parent._zoneDelegate,a)}return v.assertZonePatched=function(){if(e.Promise!==S.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(v,"root",{get:function(){for(var o=v.current;o.parent;)o=o.parent;return o},enumerable:!1,configurable:!0}),Object.defineProperty(v,"current",{get:function(){return W.zone},enumerable:!1,configurable:!0}),Object.defineProperty(v,"currentTask",{get:function(){return ae},enumerable:!1,configurable:!0}),v.__load_patch=function(o,a,i){if(void 0===i&&(i=!1),S.hasOwnProperty(o)){if(!i&&f)throw Error("Already loaded patch: "+o)}else if(!e["__Zone_disable_"+o]){var P="Zone:"+o;t(P),S[o]=a(e,v,X),n(P,P)}},Object.defineProperty(v.prototype,"parent",{get:function(){return this._parent},enumerable:!1,configurable:!0}),Object.defineProperty(v.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),v.prototype.get=function(o){var a=this.getZoneWith(o);if(a)return a._properties[o]},v.prototype.getZoneWith=function(o){for(var a=this;a;){if(a._properties.hasOwnProperty(o))return a;a=a._parent}return null},v.prototype.fork=function(o){if(!o)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,o)},v.prototype.wrap=function(o,a){if("function"!=typeof o)throw new Error("Expecting function got: "+o);var i=this._zoneDelegate.intercept(this,o,a),P=this;return function(){return P.runGuarded(i,this,arguments,a)}},v.prototype.run=function(o,a,i,P){W={parent:W,zone:this};try{return this._zoneDelegate.invoke(this,o,a,i,P)}finally{W=W.parent}},v.prototype.runGuarded=function(o,a,i,P){void 0===a&&(a=null),W={parent:W,zone:this};try{try{return this._zoneDelegate.invoke(this,o,a,i,P)}catch(q){if(this._zoneDelegate.handleError(this,q))throw q}}finally{W=W.parent}},v.prototype.runTask=function(o,a,i){if(o.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(o.zone||b).name+"; Execution: "+this.name+")");if(o.state!==U||o.type!==N&&o.type!==O){var P=o.state!=F;P&&o._transitionTo(F,B),o.runCount++;var q=ae;ae=o,W={parent:W,zone:this};try{o.type==O&&o.data&&!o.data.isPeriodic&&(o.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,o,a,i)}catch(ce){if(this._zoneDelegate.handleError(this,ce))throw ce}}finally{o.state!==U&&o.state!==z&&(o.type==N||o.data&&o.data.isPeriodic?P&&o._transitionTo(B,F):(o.runCount=0,this._updateTaskCount(o,-1),P&&o._transitionTo(U,F,U))),W=W.parent,ae=q}}},v.prototype.scheduleTask=function(o){if(o.zone&&o.zone!==this)for(var a=this;a;){if(a===o.zone)throw Error("can not reschedule task to ".concat(this.name," which is descendants of the original zone ").concat(o.zone.name));a=a.parent}o._transitionTo(x,U);var i=[];o._zoneDelegates=i,o._zone=this;try{o=this._zoneDelegate.scheduleTask(this,o)}catch(P){throw o._transitionTo(z,x,U),this._zoneDelegate.handleError(this,P),P}return o._zoneDelegates===i&&this._updateTaskCount(o,1),o.state==x&&o._transitionTo(B,x),o},v.prototype.scheduleMicroTask=function(o,a,i,P){return this.scheduleTask(new p(Z,o,a,i,P,void 0))},v.prototype.scheduleMacroTask=function(o,a,i,P,q){return this.scheduleTask(new p(O,o,a,i,P,q))},v.prototype.scheduleEventTask=function(o,a,i,P,q){return this.scheduleTask(new p(N,o,a,i,P,q))},v.prototype.cancelTask=function(o){if(o.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(o.zone||b).name+"; Execution: "+this.name+")");o._transitionTo(k,B,F);try{this._zoneDelegate.cancelTask(this,o)}catch(a){throw o._transitionTo(z,k),this._zoneDelegate.handleError(this,a),a}return this._updateTaskCount(o,-1),o._transitionTo(U,k),o.runCount=0,o},v.prototype._updateTaskCount=function(o,a){var i=o._zoneDelegates;-1==a&&(o._zoneDelegates=null);for(var P=0;P<i.length;P++)i[P]._updateTaskCount(o.type,a)},v}();d.__symbol__=c;var $,E={name:"",onHasTask:function(v,o,a,i){return v.hasTask(a,i)},onScheduleTask:function(v,o,a,i){return v.scheduleTask(a,i)},onInvokeTask:function(v,o,a,i,P,q){return v.invokeTask(a,i,P,q)},onCancelTask:function(v,o,a,i){return v.cancelTask(a,i)}},T=function(){function v(o,a,i){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=o,this._parentDelegate=a,this._forkZS=i&&(i&&i.onFork?i:a._forkZS),this._forkDlgt=i&&(i.onFork?a:a._forkDlgt),this._forkCurrZone=i&&(i.onFork?this.zone:a._forkCurrZone),this._interceptZS=i&&(i.onIntercept?i:a._interceptZS),this._interceptDlgt=i&&(i.onIntercept?a:a._interceptDlgt),this._interceptCurrZone=i&&(i.onIntercept?this.zone:a._interceptCurrZone),this._invokeZS=i&&(i.onInvoke?i:a._invokeZS),this._invokeDlgt=i&&(i.onInvoke?a:a._invokeDlgt),this._invokeCurrZone=i&&(i.onInvoke?this.zone:a._invokeCurrZone),this._handleErrorZS=i&&(i.onHandleError?i:a._handleErrorZS),this._handleErrorDlgt=i&&(i.onHandleError?a:a._handleErrorDlgt),this._handleErrorCurrZone=i&&(i.onHandleError?this.zone:a._handleErrorCurrZone),this._scheduleTaskZS=i&&(i.onScheduleTask?i:a._scheduleTaskZS),this._scheduleTaskDlgt=i&&(i.onScheduleTask?a:a._scheduleTaskDlgt),this._scheduleTaskCurrZone=i&&(i.onScheduleTask?this.zone:a._scheduleTaskCurrZone),this._invokeTaskZS=i&&(i.onInvokeTask?i:a._invokeTaskZS),this._invokeTaskDlgt=i&&(i.onInvokeTask?a:a._invokeTaskDlgt),this._invokeTaskCurrZone=i&&(i.onInvokeTask?this.zone:a._invokeTaskCurrZone),this._cancelTaskZS=i&&(i.onCancelTask?i:a._cancelTaskZS),this._cancelTaskDlgt=i&&(i.onCancelTask?a:a._cancelTaskDlgt),this._cancelTaskCurrZone=i&&(i.onCancelTask?this.zone:a._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var P=i&&i.onHasTask;(P||a&&a._hasTaskZS)&&(this._hasTaskZS=P?i:E,this._hasTaskDlgt=a,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=o,i.onScheduleTask||(this._scheduleTaskZS=E,this._scheduleTaskDlgt=a,this._scheduleTaskCurrZone=this.zone),i.onInvokeTask||(this._invokeTaskZS=E,this._invokeTaskDlgt=a,this._invokeTaskCurrZone=this.zone),i.onCancelTask||(this._cancelTaskZS=E,this._cancelTaskDlgt=a,this._cancelTaskCurrZone=this.zone))}return v.prototype.fork=function(o,a){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,o,a):new d(o,a)},v.prototype.intercept=function(o,a,i){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,o,a,i):a},v.prototype.invoke=function(o,a,i,P,q){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,o,a,i,P,q):a.apply(i,P)},v.prototype.handleError=function(o,a){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,o,a)},v.prototype.scheduleTask=function(o,a){var i=a;if(this._scheduleTaskZS)this._hasTaskZS&&i._zoneDelegates.push(this._hasTaskDlgtOwner),(i=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,o,a))||(i=a);else if(a.scheduleFn)a.scheduleFn(a);else{if(a.type!=Z)throw new Error("Task is missing scheduleFn.");J(a)}return i},v.prototype.invokeTask=function(o,a,i,P){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,o,a,i,P):a.callback.apply(i,P)},v.prototype.cancelTask=function(o,a){var i;if(this._cancelTaskZS)i=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,o,a);else{if(!a.cancelFn)throw Error("Task is not cancelable");i=a.cancelFn(a)}return i},v.prototype.hasTask=function(o,a){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,o,a)}catch(i){this.handleError(o,i)}},v.prototype._updateTaskCount=function(o,a){var i=this._taskCounts,P=i[o],q=i[o]=P+a;if(q<0)throw new Error("More tasks executed then were scheduled.");0!=P&&0!=q||this.hasTask(this.zone,{microTask:i.microTask>0,macroTask:i.macroTask>0,eventTask:i.eventTask>0,change:o})},v}(),p=function(){function v(o,a,i,P,q,ce){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=o,this.source=a,this.data=P,this.scheduleFn=q,this.cancelFn=ce,!i)throw new Error("callback is not defined");this.callback=i;var l=this;this.invoke=o===N&&P&&P.useG?v.invokeTask:function(){return v.invokeTask.call(e,l,this,arguments)}}return v.invokeTask=function(o,a,i){o||(o=this),Q++;try{return o.runCount++,o.zone.runTask(o,a,i)}finally{1==Q&&A(),Q--}},Object.defineProperty(v.prototype,"zone",{get:function(){return this._zone},enumerable:!1,configurable:!0}),Object.defineProperty(v.prototype,"state",{get:function(){return this._state},enumerable:!1,configurable:!0}),v.prototype.cancelScheduleRequest=function(){this._transitionTo(U,x)},v.prototype._transitionTo=function(o,a,i){if(this._state!==a&&this._state!==i)throw new Error("".concat(this.type," '").concat(this.source,"': can not transition to '").concat(o,"', expecting state '").concat(a,"'").concat(i?" or '"+i+"'":"",", was '").concat(this._state,"'."));this._state=o,o==U&&(this._zoneDelegates=null)},v.prototype.toString=function(){return this.data&&typeof this.data.handleId<"u"?this.data.handleId.toString():Object.prototype.toString.call(this)},v.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}},v}(),m=c("setTimeout"),g=c("Promise"),C=c("then"),D=[],H=!1;function V(v){if($||e[g]&&($=e[g].resolve(0)),$){var o=$[C];o||(o=$.then),o.call($,v)}else e[m](v,0)}function J(v){0===Q&&0===D.length&&V(A),v&&D.push(v)}function A(){if(!H){for(H=!0;D.length;){var v=D;D=[];for(var o=0;o<v.length;o++){var a=v[o];try{a.zone.runTask(a,null,null)}catch(i){X.onUnhandledError(i)}}}X.microtaskDrainDone(),H=!1}}var b={name:"NO ZONE"},U="notScheduled",x="scheduling",B="scheduled",F="running",k="canceling",z="unknown",Z="microTask",O="macroTask",N="eventTask",S={},X={symbol:c,currentZoneFrame:function(){return W},onUnhandledError:Y,microtaskDrainDone:Y,scheduleMicroTask:J,showUncaughtError:function(){return!d[c("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:Y,patchMethod:function(){return Y},bindArguments:function(){return[]},patchThen:function(){return Y},patchMacroTask:function(){return Y},patchEventPrototype:function(){return Y},isIEOrEdge:function(){return!1},getGlobalObjects:function(){},ObjectDefineProperty:function(){return Y},ObjectGetOwnPropertyDescriptor:function(){},ObjectCreate:function(){},ArraySlice:function(){return[]},patchClass:function(){return Y},wrapWithCurrentZone:function(){return Y},filterProperties:function(){return[]},attachOriginToPatched:function(){return Y},_redefineProperty:function(){return Y},patchCallbacks:function(){return Y},nativeScheduleMicroTask:V},W={parent:null,zone:new d(null,null)},ae=null,Q=0;function Y(){}n("Zone","Zone"),e.Zone=d}(typeof window<"u"&&window||typeof self<"u"&&self||global);var le=Object.getOwnPropertyDescriptor,fe=Object.defineProperty,De=Object.getPrototypeOf,Te=Object.create,Ve=Array.prototype.slice,ve="addEventListener",Ue="removeEventListener",We=Zone.__symbol__(ve),ze=Zone.__symbol__(Ue),he="true",de="false",Ze=Zone.__symbol__("");function Xe(e,r){return Zone.current.wrap(e,r)}function Ye(e,r,t,n,u){return Zone.current.scheduleMacroTask(e,r,t,n,u)}var G=Zone.__symbol__,Ne=typeof window<"u",Pe=Ne?window:void 0,te=Ne&&Pe||"object"==typeof self&&self||global,Pr="removeAttribute";function qe(e,r){for(var t=e.length-1;t>=0;t--)"function"==typeof e[t]&&(e[t]=Xe(e[t],r+"_"+t));return e}function rr(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&typeof e.set>"u")}var tr=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope,Ae=!("nw"in te)&&typeof te.process<"u"&&"[object process]"==={}.toString.call(te.process),Ke=!Ae&&!tr&&!(!Ne||!Pe.HTMLElement),nr=typeof te.process<"u"&&"[object process]"==={}.toString.call(te.process)&&!tr&&!(!Ne||!Pe.HTMLElement),je={},or=function(e){if(e=e||te.event){var r=je[e.type];r||(r=je[e.type]=G("ON_PROPERTY"+e.type));var u,t=this||e.target||te,n=t[r];return Ke&&t===Pe&&"error"===e.type?!0===(u=n&&n.call(this,e.message,e.filename,e.lineno,e.colno,e.error))&&e.preventDefault():null!=(u=n&&n.apply(this,arguments))&&!u&&e.preventDefault(),u}};function ar(e,r,t){var n=le(e,r);if(!n&&t&&le(t,r)&&(n={enumerable:!0,configurable:!0}),n&&n.configurable){var c=G("on"+r+"patched");if(!e.hasOwnProperty(c)||!e[c]){delete n.writable,delete n.value;var f=n.get,d=n.set,E=r.slice(2),T=je[E];T||(T=je[E]=G("ON_PROPERTY"+E)),n.set=function(p){var m=this;!m&&e===te&&(m=te),m&&("function"==typeof m[T]&&m.removeEventListener(E,or),d&&d.call(m,null),m[T]=p,"function"==typeof p&&m.addEventListener(E,or,!1))},n.get=function(){var p=this;if(!p&&e===te&&(p=te),!p)return null;var m=p[T];if(m)return m;if(f){var g=f.call(this);if(g)return n.set.call(this,g),"function"==typeof p[Pr]&&p.removeAttribute(r),g}return null},fe(e,r,n),e[c]=!0}}}function ir(e,r,t){if(r)for(var n=0;n<r.length;n++)ar(e,"on"+r[n],t);else{var u=[];for(var c in e)"on"==c.slice(0,2)&&u.push(c);for(var f=0;f<u.length;f++)ar(e,u[f],t)}}var ue=G("originalInstance");function Me(e){var r=te[e];if(r){te[G(e)]=r,te[e]=function(){var u=qe(arguments,e);switch(u.length){case 0:this[ue]=new r;break;case 1:this[ue]=new r(u[0]);break;case 2:this[ue]=new r(u[0],u[1]);break;case 3:this[ue]=new r(u[0],u[1],u[2]);break;case 4:this[ue]=new r(u[0],u[1],u[2],u[3]);break;default:throw new Error("Arg list too long.")}},pe(te[e],r);var n,t=new r(function(){});for(n in t)"XMLHttpRequest"===e&&"responseBlob"===n||function(u){"function"==typeof t[u]?te[e].prototype[u]=function(){return this[ue][u].apply(this[ue],arguments)}:fe(te[e].prototype,u,{set:function(c){"function"==typeof c?(this[ue][u]=Xe(c,e+"."+u),pe(this[ue][u],c)):this[ue][u]=c},get:function(){return this[ue][u]}})}(n);for(n in r)"prototype"!==n&&r.hasOwnProperty(n)&&(te[e][n]=r[n])}}function _e(e,r,t){for(var n=e;n&&!n.hasOwnProperty(r);)n=De(n);!n&&e[r]&&(n=e);var u=G(r),c=null;if(n&&(!(c=n[u])||!n.hasOwnProperty(u))&&(c=n[u]=n[r],rr(n&&le(n,r)))){var d=t(c,u,r);n[r]=function(){return d(this,arguments)},pe(n[r],c)}return c}function Or(e,r,t){var n=null;function u(c){var f=c.data;return f.args[f.cbIdx]=function(){c.invoke.apply(this,arguments)},n.apply(f.target,f.args),c}n=_e(e,r,function(c){return function(f,d){var E=t(f,d);return E.cbIdx>=0&&"function"==typeof d[E.cbIdx]?Ye(E.name,d[E.cbIdx],E,u):c.apply(f,d)}})}function pe(e,r){e[G("OriginalDelegate")]=r}var ur=!1,Je=!1;function Rr(){if(ur)return Je;ur=!0;try{var e=Pe.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(Je=!0)}catch{}return Je}Zone.__load_patch("ZoneAwarePromise",function(e,r,t){var n=Object.getOwnPropertyDescriptor,u=Object.defineProperty;var f=t.symbol,d=[],E=!0===e[f("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],T=f("Promise"),p=f("then"),m="__creationTrace__";t.onUnhandledError=function(l){if(t.showUncaughtError()){var _=l&&l.rejection;_?console.error("Unhandled Promise rejection:",_ instanceof Error?_.message:_,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",_,_ instanceof Error?_.stack:void 0):console.error(l)}},t.microtaskDrainDone=function(){for(var l=function(){var _=d.shift();try{_.zone.runGuarded(function(){throw _.throwOriginal?_.rejection:_})}catch(h){!function C(l){t.onUnhandledError(l);try{var _=r[g];"function"==typeof _&&_.call(this,l)}catch{}}(h)}};d.length;)l()};var g=f("unhandledPromiseRejectionHandler");function D(l){return l&&l.then}function H(l){return l}function $(l){return a.reject(l)}var V=f("state"),J=f("value"),A=f("finally"),b=f("parentPromiseValue"),U=f("parentPromiseState"),x="Promise.then",B=null,F=!0,k=!1,z=0;function Z(l,_){return function(h){try{X(l,_,h)}catch(s){X(l,!1,s)}}}var O=function(){var l=!1;return function(h){return function(){l||(l=!0,h.apply(null,arguments))}}},N="Promise resolved with itself",S=f("currentTaskTrace");function X(l,_,h){var s=O();if(l===h)throw new TypeError(N);if(l[V]===B){var y=null;try{("object"==typeof h||"function"==typeof h)&&(y=h&&h.then)}catch(L){return s(function(){X(l,!1,L)})(),l}if(_!==k&&h instanceof a&&h.hasOwnProperty(V)&&h.hasOwnProperty(J)&&h[V]!==B)ae(h),X(l,h[V],h[J]);else if(_!==k&&"function"==typeof y)try{y.call(h,s(Z(l,_)),s(Z(l,!1)))}catch(L){s(function(){X(l,!1,L)})()}else{l[V]=_;var R=l[J];if(l[J]=h,l[A]===A&&_===F&&(l[V]=l[U],l[J]=l[b]),_===k&&h instanceof Error){var w=r.currentTask&&r.currentTask.data&&r.currentTask.data[m];w&&u(h,S,{configurable:!0,enumerable:!1,writable:!0,value:w})}for(var M=0;M<R.length;)Q(l,R[M++],R[M++],R[M++],R[M++]);if(0==R.length&&_==k){l[V]=z;var I=h;try{throw new Error("Uncaught (in promise): "+function c(l){return l&&l.toString===Object.prototype.toString?(l.constructor&&l.constructor.name||"")+": "+JSON.stringify(l):l?l.toString():Object.prototype.toString.call(l)}(h)+(h&&h.stack?"\n"+h.stack:""))}catch(L){I=L}E&&(I.throwOriginal=!0),I.rejection=h,I.promise=l,I.zone=r.current,I.task=r.currentTask,d.push(I),t.scheduleMicroTask()}}}return l}var W=f("rejectionHandledHandler");function ae(l){if(l[V]===z){try{var _=r[W];_&&"function"==typeof _&&_.call(this,{rejection:l[J],promise:l})}catch{}l[V]=k;for(var h=0;h<d.length;h++)l===d[h].promise&&d.splice(h,1)}}function Q(l,_,h,s,y){ae(l);var R=l[V],w=R?"function"==typeof s?s:H:"function"==typeof y?y:$;_.scheduleMicroTask(x,function(){try{var M=l[J],I=!!h&&A===h[A];I&&(h[b]=M,h[U]=R);var L=_.run(w,void 0,I&&w!==$&&w!==H?[]:[M]);X(h,!0,L)}catch(j){X(h,!1,j)}},h)}var v=function(){},o=e.AggregateError,a=function(){function l(_){var h=this;if(!(h instanceof l))throw new Error("Must be an instanceof Promise.");h[V]=B,h[J]=[];try{var s=O();_&&_(s(Z(h,F)),s(Z(h,k)))}catch(y){X(h,!1,y)}}return l.toString=function(){return"function ZoneAwarePromise() { [native code] }"},l.resolve=function(_){return X(new this(null),F,_)},l.reject=function(_){return X(new this(null),k,_)},l.any=function(_){if(!_||"function"!=typeof _[Symbol.iterator])return Promise.reject(new o([],"All promises were rejected"));var h=[],s=0;try{for(var y=0,R=_;y<R.length;y++)s++,h.push(l.resolve(R[y]))}catch{return Promise.reject(new o([],"All promises were rejected"))}if(0===s)return Promise.reject(new o([],"All promises were rejected"));var M=!1,I=[];return new l(function(L,j){for(var K=0;K<h.length;K++)h[K].then(function(oe){M||(M=!0,L(oe))},function(oe){I.push(oe),0==--s&&(M=!0,j(new o(I,"All promises were rejected")))})})},l.race=function(_){var h,s,y=new this(function(j,K){h=j,s=K});function R(j){h(j)}function w(j){s(j)}for(var M=0,I=_;M<I.length;M++){var L=I[M];D(L)||(L=this.resolve(L)),L.then(R,w)}return y},l.all=function(_){return l.allWithCallback(_)},l.allSettled=function(_){return(this&&this.prototype instanceof l?this:l).allWithCallback(_,{thenCallback:function(s){return{status:"fulfilled",value:s}},errorCallback:function(s){return{status:"rejected",reason:s}}})},l.allWithCallback=function(_,h){for(var s,y,R=new this(function(re,ne){s=re,y=ne}),w=2,M=0,I=[],L=function(re){D(re)||(re=j.resolve(re));var ne=M;try{re.then(function(ee){I[ne]=h?h.thenCallback(ee):ee,0==--w&&s(I)},function(ee){h?(I[ne]=h.errorCallback(ee),0==--w&&s(I)):y(ee)})}catch(ee){y(ee)}w++,M++},j=this,K=0,oe=_;K<oe.length;K++)L(oe[K]);return 0==(w-=2)&&s(I),R},Object.defineProperty(l.prototype,Symbol.toStringTag,{get:function(){return"Promise"},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,Symbol.species,{get:function(){return l},enumerable:!1,configurable:!0}),l.prototype.then=function(_,h){var s,y=null===(s=this.constructor)||void 0===s?void 0:s[Symbol.species];(!y||"function"!=typeof y)&&(y=this.constructor||l);var R=new y(v),w=r.current;return this[V]==B?this[J].push(w,R,_,h):Q(this,w,R,_,h),R},l.prototype.catch=function(_){return this.then(null,_)},l.prototype.finally=function(_){var h,s=null===(h=this.constructor)||void 0===h?void 0:h[Symbol.species];(!s||"function"!=typeof s)&&(s=l);var y=new s(v);y[A]=A;var R=r.current;return this[V]==B?this[J].push(R,y,_,_):Q(this,R,y,_,_),y},l}();a.resolve=a.resolve,a.reject=a.reject,a.race=a.race,a.all=a.all;var i=e[T]=e.Promise;e.Promise=a;var P=f("thenPatched");function q(l){var _=l.prototype,h=n(_,"then");if(!h||!1!==h.writable&&h.configurable){var s=_.then;_[p]=s,l.prototype.then=function(y,R){var w=this;return new a(function(I,L){s.call(w,I,L)}).then(y,R)},l[P]=!0}}return t.patchThen=q,i&&(q(i),_e(e,"fetch",function(l){return function ce(l){return function(_,h){var s=l.apply(_,h);if(s instanceof a)return s;var y=s.constructor;return y[P]||q(y),s}}(l)})),Promise[r.__symbol__("uncaughtPromiseErrors")]=d,a}),Zone.__load_patch("toString",function(e){var r=Function.prototype.toString,t=G("OriginalDelegate"),n=G("Promise"),u=G("Error"),c=function(){if("function"==typeof this){var T=this[t];if(T)return"function"==typeof T?r.call(T):Object.prototype.toString.call(T);if(this===Promise){var p=e[n];if(p)return r.call(p)}if(this===Error){var m=e[u];if(m)return r.call(m)}}return r.call(this)};c[t]=r,Function.prototype.toString=c;var f=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":f.call(this)}});var we=!1;if(typeof window<"u")try{var He=Object.defineProperty({},"passive",{get:function(){we=!0}});window.addEventListener("test",He,He),window.removeEventListener("test",He,He)}catch{we=!1}var xe,Be,_r,pr,be,Cr={useG:!0},ie={},cr={},sr=new RegExp("^"+Ze+"(\\w+)(true|false)$"),lr=G("propagationStopped");function fr(e,r){var t=(r?r(e):e)+de,n=(r?r(e):e)+he,u=Ze+t,c=Ze+n;ie[e]={},ie[e][de]=u,ie[e][he]=c}function Dr(e,r,t,n){var u=n&&n.add||ve,c=n&&n.rm||Ue,f=n&&n.listeners||"eventListeners",d=n&&n.rmAll||"removeAllListeners",E=G(u),T="."+u+":",p="prependListener",m="."+p+":",g=function(A,b,U){if(!A.isRemoved){var B,x=A.callback;"object"==typeof x&&x.handleEvent&&(A.callback=function(z){return x.handleEvent(z)},A.originalDelegate=x);try{A.invoke(A,b,[U])}catch(z){B=z}var F=A.options;return F&&"object"==typeof F&&F.once&&b[c].call(b,U.type,A.originalDelegate?A.originalDelegate:A.callback,F),B}};function C(A,b,U){if(b=b||e.event){var x=A||b.target||e,B=x[ie[b.type][U?he:de]];if(B){var F=[];if(1===B.length)(k=g(B[0],x,b))&&F.push(k);else for(var z=B.slice(),Z=0;Z<z.length&&(!b||!0!==b[lr]);Z++){var k;(k=g(z[Z],x,b))&&F.push(k)}if(1===F.length)throw F[0];var O=function(N){var S=F[N];r.nativeScheduleMicroTask(function(){throw S})};for(Z=0;Z<F.length;Z++)O(Z)}}}var D=function(A){return C(this,A,!1)},H=function(A){return C(this,A,!0)};function $(A,b){if(!A)return!1;var U=!0;b&&void 0!==b.useG&&(U=b.useG);var x=b&&b.vh,B=!0;b&&void 0!==b.chkDup&&(B=b.chkDup);var F=!1;b&&void 0!==b.rt&&(F=b.rt);for(var k=A;k&&!k.hasOwnProperty(u);)k=De(k);if(!k&&A[u]&&(k=A),!k||k[E])return!1;var W,z=b&&b.eventNameToString,Z={},O=k[E]=k[u],N=k[G(c)]=k[c],S=k[G(f)]=k[f],X=k[G(d)]=k[d];b&&b.prepend&&(W=k[G(b.prepend)]=k[b.prepend]);var i=U?function(s){if(!Z.isExisting)return O.call(Z.target,Z.eventName,Z.capture?H:D,Z.options)}:function(s){return O.call(Z.target,Z.eventName,s.invoke,Z.options)},P=U?function(s){if(!s.isRemoved){var y=ie[s.eventName],R=void 0;y&&(R=y[s.capture?he:de]);var w=R&&s.target[R];if(w)for(var M=0;M<w.length;M++)if(w[M]===s){w.splice(M,1),s.isRemoved=!0,0===w.length&&(s.allRemoved=!0,s.target[R]=null);break}}if(s.allRemoved)return N.call(s.target,s.eventName,s.capture?H:D,s.options)}:function(s){return N.call(s.target,s.eventName,s.invoke,s.options)},ce=b&&b.diff?b.diff:function(s,y){var R=typeof y;return"function"===R&&s.callback===y||"object"===R&&s.originalDelegate===y},l=Zone[G("UNPATCHED_EVENTS")],_=e[G("PASSIVE_EVENTS")],h=function(s,y,R,w,M,I){return void 0===M&&(M=!1),void 0===I&&(I=!1),function(){var L=this||e,j=arguments[0];b&&b.transferEventName&&(j=b.transferEventName(j));var K=arguments[1];if(!K)return s.apply(this,arguments);if(Ae&&"uncaughtException"===j)return s.apply(this,arguments);var oe=!1;if("function"!=typeof K){if(!K.handleEvent)return s.apply(this,arguments);oe=!0}if(!x||x(s,K,L,arguments)){var Ee=we&&!!_&&-1!==_.indexOf(j),re=function ae(s,y){return!we&&"object"==typeof s&&s?!!s.capture:we&&y?"boolean"==typeof s?{capture:s,passive:!0}:s?"object"==typeof s&&!1!==s.passive?Object.assign(Object.assign({},s),{passive:!0}):s:{passive:!0}:s}(arguments[2],Ee);if(l)for(var ne=0;ne<l.length;ne++)if(j===l[ne])return Ee?s.call(L,j,K,re):s.apply(this,arguments);var ee=!!re&&("boolean"==typeof re||re.capture),Se=!(!re||"object"!=typeof re)&&re.once,$r=Zone.current,er=ie[j];er||(fr(j,z),er=ie[j]);var gr=er[ee?he:de],Re=L[gr],mr=!1;if(Re){if(mr=!0,B)for(ne=0;ne<Re.length;ne++)if(ce(Re[ne],K))return}else Re=L[gr]=[];var Ge,br=L.constructor.name,kr=cr[br];kr&&(Ge=kr[j]),Ge||(Ge=br+y+(z?z(j):j)),Z.options=re,Se&&(Z.options.once=!1),Z.target=L,Z.capture=ee,Z.eventName=j,Z.isExisting=mr;var Ie=U?Cr:void 0;Ie&&(Ie.taskData=Z);var ge=$r.scheduleEventTask(Ge,K,Ie,R,w);if(Z.target=null,Ie&&(Ie.taskData=null),Se&&(re.once=!0),!we&&"boolean"==typeof ge.options||(ge.options=re),ge.target=L,ge.capture=ee,ge.eventName=j,oe&&(ge.originalDelegate=K),I?Re.unshift(ge):Re.push(ge),M)return L}}};return k[u]=h(O,T,i,P,F),W&&(k[p]=h(W,m,function(s){return W.call(Z.target,Z.eventName,s.invoke,Z.options)},P,F,!0)),k[c]=function(){var s=this||e,y=arguments[0];b&&b.transferEventName&&(y=b.transferEventName(y));var R=arguments[2],w=!!R&&("boolean"==typeof R||R.capture),M=arguments[1];if(!M)return N.apply(this,arguments);if(!x||x(N,M,s,arguments)){var L,I=ie[y];I&&(L=I[w?he:de]);var j=L&&s[L];if(j)for(var K=0;K<j.length;K++){var oe=j[K];if(ce(oe,M))return j.splice(K,1),oe.isRemoved=!0,0===j.length&&(oe.allRemoved=!0,s[L]=null,"string"==typeof y)&&(s[Ze+"ON_PROPERTY"+y]=null),oe.zone.cancelTask(oe),F?s:void 0}return N.apply(this,arguments)}},k[f]=function(){var s=this||e,y=arguments[0];b&&b.transferEventName&&(y=b.transferEventName(y));for(var R=[],w=vr(s,z?z(y):y),M=0;M<w.length;M++){var I=w[M];R.push(I.originalDelegate?I.originalDelegate:I.callback)}return R},k[d]=function(){var s=this||e,y=arguments[0];if(y){b&&b.transferEventName&&(y=b.transferEventName(y));var j=ie[y];if(j){var Ee=s[j[de]],re=s[j[he]];if(Ee)for(var ne=Ee.slice(),w=0;w<ne.length;w++)this[c].call(this,y,(ee=ne[w]).originalDelegate?ee.originalDelegate:ee.callback,ee.options);if(re)for(ne=re.slice(),w=0;w<ne.length;w++){var ee;this[c].call(this,y,(ee=ne[w]).originalDelegate?ee.originalDelegate:ee.callback,ee.options)}}}else{var R=Object.keys(s);for(w=0;w<R.length;w++){var I=sr.exec(R[w]),L=I&&I[1];L&&"removeListener"!==L&&this[d].call(this,L)}this[d].call(this,"removeListener")}if(F)return this},pe(k[u],O),pe(k[c],N),X&&pe(k[d],X),S&&pe(k[f],S),!0}for(var V=[],J=0;J<t.length;J++)V[J]=$(t[J],n);return V}function vr(e,r){if(!r){var t=[];for(var n in e){var u=sr.exec(n),c=u&&u[1];if(c&&(!r||c===r)){var f=e[n];if(f)for(var d=0;d<f.length;d++)t.push(f[d])}}return t}var E=ie[r];E||(fr(r),E=ie[r]);var T=e[E[de]],p=e[E[he]];return T?p?T.concat(p):T.slice():p?p.slice():[]}function Zr(e,r){var t=e.Event;t&&t.prototype&&r.patchMethod(t.prototype,"stopImmediatePropagation",function(n){return function(u,c){u[lr]=!0,n&&n.apply(u,c)}})}function Mr(e,r,t,n,u){var c=Zone.__symbol__(n);if(!r[c]){var f=r[c]=r[n];r[n]=function(d,E,T){return E&&E.prototype&&u.forEach(function(p){var m="".concat(t,".").concat(n,"::")+p,g=E.prototype;try{if(g.hasOwnProperty(p)){var C=e.ObjectGetOwnPropertyDescriptor(g,p);C&&C.value?(C.value=e.wrapWithCurrentZone(C.value,m),e._redefineProperty(E.prototype,p,C)):g[p]&&(g[p]=e.wrapWithCurrentZone(g[p],m))}else g[p]&&(g[p]=e.wrapWithCurrentZone(g[p],m))}catch{}}),f.call(r,d,E,T)},e.attachOriginToPatched(r[n],f)}}function hr(e,r,t){if(!t||0===t.length)return r;var n=t.filter(function(c){return c.target===e});if(!n||0===n.length)return r;var u=n[0].ignoreProperties;return r.filter(function(c){return-1===u.indexOf(c)})}function dr(e,r,t,n){e&&ir(e,hr(e,r,t),n)}function Qe(e){return Object.getOwnPropertyNames(e).filter(function(r){return r.startsWith("on")&&r.length>2}).map(function(r){return r.substring(2)})}function Ir(e,r){if((!Ae||nr)&&!Zone[e.symbol("patchEvents")]){var t=r.__Zone_ignore_on_properties,n=[];if(Ke){var u=window;n=n.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);var c=function Sr(){try{var e=Pe.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch{}return!1}()?[{target:u,ignoreProperties:["error"]}]:[];dr(u,Qe(u),t&&t.concat(c),De(u))}n=n.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(var f=0;f<n.length;f++){var d=r[n[f]];d&&d.prototype&&dr(d.prototype,Qe(d.prototype),t)}}}function Nr(e,r,t){var n=t.configurable;return yr(e,r,t=$e(e,r,t),n)}function Er(e,r){return e&&e[be]&&e[be][r]}function $e(e,r,t){return Object.isFrozen(t)||(t.configurable=!0),t.configurable||(!e[be]&&!Object.isFrozen(e)&&Be(e,be,{writable:!0,value:{}}),e[be]&&(e[be][r]=!0)),t}function yr(e,r,t,n){try{return Be(e,r,t)}catch(f){if(!t.configurable)throw f;typeof n>"u"?delete t.configurable:t.configurable=n;try{return Be(e,r,t)}catch(d){var u=!1;if(("createdCallback"===r||"attachedCallback"===r||"detachedCallback"===r||"attributeChangedCallback"===r)&&(u=!0),!u)throw d;var c=null;try{c=JSON.stringify(t)}catch{c=t.toString()}console.log("Attempting to configure '".concat(r,"' with descriptor '").concat(c,"' on object '").concat(e,"' and got error, giving up: ").concat(d))}}}function Hr(e,r){var t=e.getGlobalObjects();if((!t.isNode||t.isMix)&&!function xr(e,r){var t=e.getGlobalObjects();if((t.isBrowser||t.isMix)&&!e.ObjectGetOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&typeof Element<"u"){var c=e.ObjectGetOwnPropertyDescriptor(Element.prototype,"onclick");if(c&&!c.configurable)return!1;if(c){e.ObjectDefineProperty(Element.prototype,"onclick",{enumerable:!0,configurable:!0,get:function(){return!0}});var d=!!document.createElement("div").onclick;return e.ObjectDefineProperty(Element.prototype,"onclick",c),d}}var E=r.XMLHttpRequest;if(!E)return!1;var T="onreadystatechange",p=E.prototype,m=e.ObjectGetOwnPropertyDescriptor(p,T);if(m)return e.ObjectDefineProperty(p,T,{enumerable:!0,configurable:!0,get:function(){return!0}}),d=!!(g=new E).onreadystatechange,e.ObjectDefineProperty(p,T,m||{}),d;var C=e.symbol("fake");e.ObjectDefineProperty(p,T,{enumerable:!0,configurable:!0,get:function(){return this[C]},set:function(V){this[C]=V}});var g,D=function(){};return(g=new E).onreadystatechange=D,d=g[C]===D,g.onreadystatechange=null,d}(e,r)){var c=typeof WebSocket<"u";(function Yr(e){for(var r=e.symbol("unbound"),t=function(u){var c=Tr[u],f="on"+c;self.addEventListener(c,function(d){var T,p,E=d.target;for(p=E?E.constructor.name+"."+f:"unknown."+f;E;)E[f]&&!E[f][r]&&((T=e.wrapWithCurrentZone(E[f],p))[r]=E[f],E[f]=T),E=E.parentElement},!0)},n=0;n<Tr.length;n++)t(n)})(e),e.patchClass("XMLHttpRequest"),c&&function jr(e,r){var t=e.getGlobalObjects(),n=t.ADD_EVENT_LISTENER_STR,u=t.REMOVE_EVENT_LISTENER_STR,c=r.WebSocket;r.EventTarget||e.patchEventTarget(r,e,[c.prototype]),r.WebSocket=function(E,T){var m,g,p=arguments.length>1?new c(E,T):new c(E),C=e.ObjectGetOwnPropertyDescriptor(p,"onmessage");return C&&!1===C.configurable?(m=e.ObjectCreate(p),g=p,[n,u,"send","close"].forEach(function(D){m[D]=function(){var H=e.ArraySlice.call(arguments);if(D===n||D===u){var $=H.length>0?H[0]:void 0;if($){var V=Zone.__symbol__("ON_PROPERTY"+$);p[V]=m[V]}}return p[D].apply(p,H)}})):m=p,e.patchOnProperties(m,["close","error","message","open"],g),m};var f=r.WebSocket;for(var d in c)f[d]=c[d]}(e,r),Zone[e.symbol("patchEvents")]=!0}}Zone.__load_patch("util",function(e,r,t){var n=Qe(e);t.patchOnProperties=ir,t.patchMethod=_e,t.bindArguments=qe,t.patchMacroTask=Or;var u=r.__symbol__("BLACK_LISTED_EVENTS"),c=r.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[u]=e[c]),e[u]&&(r[u]=r[c]=e[u]),t.patchEventPrototype=Zr,t.patchEventTarget=Dr,t.isIEOrEdge=Rr,t.ObjectDefineProperty=fe,t.ObjectGetOwnPropertyDescriptor=le,t.ObjectCreate=Te,t.ArraySlice=Ve,t.patchClass=Me,t.wrapWithCurrentZone=Xe,t.filterProperties=hr,t.attachOriginToPatched=pe,t._redefineProperty=Object.defineProperty,t.patchCallbacks=Mr,t.getGlobalObjects=function(){return{globalSources:cr,zoneSymbolEventNames:ie,eventNames:n,isBrowser:Ke,isMix:nr,isNode:Ae,TRUE_STR:he,FALSE_STR:de,ZONE_SYMBOL_PREFIX:Ze,ADD_EVENT_LISTENER_STR:ve,REMOVE_EVENT_LISTENER_STR:Ue}}});var e,r,Tr=se(se(se(se(se(se(se(se([],["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"],!0),["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],!0),["autocomplete","autocompleteerror"],!0),["toggle"],!0),["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],!0),["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplayconnected","vrdisplaydisconnected","vrdisplaypresentchange"],!0),["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],!0),["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"],!0);e=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},r=e.__Zone_symbol_prefix||"__zone_symbol__",e[function t(n){return r+n}("legacyPatch")]=function(){var n=e.Zone;n.__load_patch("defineProperty",function(u,c,f){f._redefineProperty=Nr,function Lr(){xe=Zone.__symbol__,Be=Object[xe("defineProperty")]=Object.defineProperty,_r=Object[xe("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,pr=Object.create,be=xe("unconfigurables"),Object.defineProperty=function(e,r,t){if(Er(e,r))throw new TypeError("Cannot assign to read only property '"+r+"' of "+e);var n=t.configurable;return"prototype"!==r&&(t=$e(e,r,t)),yr(e,r,t,n)},Object.defineProperties=function(e,r){Object.keys(r).forEach(function(f){Object.defineProperty(e,f,r[f])});for(var t=0,n=Object.getOwnPropertySymbols(r);t<n.length;t++){var u=n[t];Object.getOwnPropertyDescriptor(r,u)?.enumerable&&Object.defineProperty(e,u,r[u])}return e},Object.create=function(e,r){return"object"==typeof r&&!Object.isFrozen(r)&&Object.keys(r).forEach(function(t){r[t]=$e(e,t,r[t])}),pr(e,r)},Object.getOwnPropertyDescriptor=function(e,r){var t=_r(e,r);return t&&Er(e,r)&&(t.configurable=!1),t}}()}),n.__load_patch("registerElement",function(u,c,f){!function qr(e,r){var t=r.getGlobalObjects();(t.isBrowser||t.isMix)&&"registerElement"in e.document&&r.patchCallbacks(r,document,"Document","registerElement",["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"])}(u,f)}),n.__load_patch("EventTargetLegacy",function(u,c,f){(function Ar(e,r){var t=r.getGlobalObjects(),n=t.eventNames,u=t.globalSources,c=t.zoneSymbolEventNames,f=t.TRUE_STR,d=t.FALSE_STR,E=t.ZONE_SYMBOL_PREFIX,p="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),m="EventTarget",g=[],C=e.wtf,D="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video".split(",");C?g=D.map(function(Q){return"HTML"+Q+"Element"}).concat(p):e[m]?g.push(m):g=p;for(var H=e.__Zone_disable_IE_check||!1,$=e.__Zone_enable_cross_context_check||!1,V=r.isIEOrEdge(),A="[object FunctionWrapper]",b="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",U={MSPointerCancel:"pointercancel",MSPointerDown:"pointerdown",MSPointerEnter:"pointerenter",MSPointerHover:"pointerhover",MSPointerLeave:"pointerleave",MSPointerMove:"pointermove",MSPointerOut:"pointerout",MSPointerOver:"pointerover",MSPointerUp:"pointerup"},x=0;x<n.length;x++){var z=E+((B=n[x])+d),Z=E+(B+f);c[B]={},c[B][d]=z,c[B][f]=Z}for(x=0;x<D.length;x++)for(var O=D[x],N=u[O]={},S=0;S<n.length;S++){var B;N[B=n[S]]=O+".addEventListener:"+B}var W=[];for(x=0;x<g.length;x++){var ae=e[g[x]];W.push(ae&&ae.prototype)}return r.patchEventTarget(e,r,W,{vh:function(Q,Y,v,o){if(!H&&V)if($)try{if((a=Y.toString())===A||a==b)return Q.apply(v,o),!1}catch{return Q.apply(v,o),!1}else{var a;if((a=Y.toString())===A||a==b)return Q.apply(v,o),!1}else if($)try{Y.toString()}catch{return Q.apply(v,o),!1}return!0},transferEventName:function(Q){return U[Q]||Q}}),Zone[r.symbol("patchEventTarget")]=!!e[m],!0})(u,f),Hr(f,u)})};var Fe=G("zoneTask");function Oe(e,r,t,n){var u=null,c=null;t+=n;var f={};function d(T){var p=T.data;return p.args[0]=function(){return T.invoke.apply(this,arguments)},p.handleId=u.apply(e,p.args),T}function E(T){return c.call(e,T.data.handleId)}u=_e(e,r+=n,function(T){return function(p,m){if("function"==typeof m[0]){var g={isPeriodic:"Interval"===n,delay:"Timeout"===n||"Interval"===n?m[1]||0:void 0,args:m},C=m[0];m[0]=function(){try{return C.apply(this,arguments)}finally{g.isPeriodic||("number"==typeof g.handleId?delete f[g.handleId]:g.handleId&&(g.handleId[Fe]=null))}};var D=Ye(r,m[0],g,d,E);if(!D)return D;var H=D.data.handleId;return"number"==typeof H?f[H]=D:H&&(H[Fe]=D),H&&H.ref&&H.unref&&"function"==typeof H.ref&&"function"==typeof H.unref&&(D.ref=H.ref.bind(H),D.unref=H.unref.bind(H)),"number"==typeof H||H?H:D}return T.apply(e,m)}}),c=_e(e,t,function(T){return function(p,m){var C,g=m[0];"number"==typeof g?C=f[g]:(C=g&&g[Fe])||(C=g),C&&"string"==typeof C.type?"notScheduled"!==C.state&&(C.cancelFn&&C.data.isPeriodic||0===C.runCount)&&("number"==typeof g?delete f[g]:g&&(g[Fe]=null),C.zone.cancelTask(C)):T.apply(e,m)}})}Zone.__load_patch("legacy",function(e){var r=e[Zone.__symbol__("legacyPatch")];r&&r()}),Zone.__load_patch("queueMicrotask",function(e,r,t){t.patchMethod(e,"queueMicrotask",function(n){return function(u,c){r.current.scheduleMicroTask("queueMicrotask",c[0])}})}),Zone.__load_patch("timers",function(e){var r="set",t="clear";Oe(e,r,t,"Timeout"),Oe(e,r,t,"Interval"),Oe(e,r,t,"Immediate")}),Zone.__load_patch("requestAnimationFrame",function(e){Oe(e,"request","cancel","AnimationFrame"),Oe(e,"mozRequest","mozCancel","AnimationFrame"),Oe(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,r){for(var t=["alert","prompt","confirm"],n=0;n<t.length;n++)_e(e,t[n],function(c,f,d){return function(E,T){return r.current.run(c,e,T,d)}})}),Zone.__load_patch("EventTarget",function(e,r,t){(function Qr(e,r){r.patchEventPrototype(e,r)})(e,t),function Jr(e,r){if(!Zone[r.symbol("patchEventTarget")]){for(var t=r.getGlobalObjects(),n=t.eventNames,u=t.zoneSymbolEventNames,c=t.TRUE_STR,f=t.FALSE_STR,d=t.ZONE_SYMBOL_PREFIX,E=0;E<n.length;E++){var T=n[E],g=d+(T+f),C=d+(T+c);u[T]={},u[T][f]=g,u[T][c]=C}var D=e.EventTarget;if(D&&D.prototype)return r.patchEventTarget(e,r,[D&&D.prototype]),!0}}(e,t);var n=e.XMLHttpRequestEventTarget;n&&n.prototype&&t.patchEventTarget(e,t,[n.prototype])}),Zone.__load_patch("MutationObserver",function(e,r,t){Me("MutationObserver"),Me("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",function(e,r,t){Me("IntersectionObserver")}),Zone.__load_patch("FileReader",function(e,r,t){Me("FileReader")}),Zone.__load_patch("on_property",function(e,r,t){Ir(t,e)}),Zone.__load_patch("customElements",function(e,r,t){!function Kr(e,r){var t=r.getGlobalObjects();(t.isBrowser||t.isMix)&&e.customElements&&"customElements"in e&&r.patchCallbacks(r,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,t)}),Zone.__load_patch("XHR",function(e,r){!function E(T){var p=T.XMLHttpRequest;if(p){var m=p.prototype,C=m[We],D=m[ze];if(!C){var H=T.XMLHttpRequestEventTarget;if(H){var $=H.prototype;C=$[We],D=$[ze]}}var V="readystatechange",J="scheduled",x=_e(m,"open",function(){return function(O,N){return O[n]=0==N[2],O[f]=N[1],x.apply(O,N)}}),F=G("fetchTaskAborting"),k=G("fetchTaskScheduling"),z=_e(m,"send",function(){return function(O,N){if(!0===r.current[k]||O[n])return z.apply(O,N);var S={target:O,url:O[f],isPeriodic:!1,args:N,aborted:!1},X=Ye("XMLHttpRequest.send",b,S,A,U);O&&!0===O[d]&&!S.aborted&&X.state===J&&X.invoke()}}),Z=_e(m,"abort",function(){return function(O,N){var S=function g(O){return O[t]}(O);if(S&&"string"==typeof S.type){if(null==S.cancelFn||S.data&&S.data.aborted)return;S.zone.cancelTask(S)}else if(!0===r.current[F])return Z.apply(O,N)}})}function A(O){var N=O.data,S=N.target;S[c]=!1,S[d]=!1;var X=S[u];C||(C=S[We],D=S[ze]),X&&D.call(S,V,X);var W=S[u]=function(){if(S.readyState===S.DONE)if(!N.aborted&&S[c]&&O.state===J){var Q=S[r.__symbol__("loadfalse")];if(0!==S.status&&Q&&Q.length>0){var Y=O.invoke;O.invoke=function(){for(var v=S[r.__symbol__("loadfalse")],o=0;o<v.length;o++)v[o]===O&&v.splice(o,1);!N.aborted&&O.state===J&&Y.call(O)},Q.push(O)}else O.invoke()}else!N.aborted&&!1===S[c]&&(S[d]=!0)};return C.call(S,V,W),S[t]||(S[t]=O),z.apply(S,N.args),S[c]=!0,O}function b(){}function U(O){var N=O.data;return N.aborted=!0,Z.apply(N.target,N.args)}}(e);var t=G("xhrTask"),n=G("xhrSync"),u=G("xhrListener"),c=G("xhrScheduled"),f=G("xhrURL"),d=G("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",function(e){e.navigator&&e.navigator.geolocation&&function wr(e,r){for(var t=e.constructor.name,n=function(c){var T,p,f=r[c],d=e[f];if(d){if(!rr(le(e,f)))return"continue";e[f]=(p=function(){return T.apply(this,qe(arguments,t+"."+f))},pe(p,T=d),p)}},u=0;u<r.length;u++)n(u)}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,r){function t(n){return function(u){vr(e,n).forEach(function(f){var d=e.PromiseRejectionEvent;if(d){var E=new d(n,{promise:u.promise,reason:u.rejection});f.invoke(E)}})}}e.PromiseRejectionEvent&&(r[G("unhandledPromiseRejectionHandler")]=t("unhandledrejection"),r[G("rejectionHandledHandler")]=t("rejectionhandled"))})},void 0!==(Le=ye.call(Ce,me,Ce,ke))&&(ke.exports=Le)},7435:(ke,Ce,me)=>{"use strict";me(16350),me(99140)},16350:()=>{}},ke=>{ke(ke.s=7435)}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.4b60b22744014b0b.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/polyfills.4b60b22744014b0b.js
deleted file mode 100644 (file)
index 66e5d2e..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[]).push([[429],{99140:function(ke,Ce,me){"use strict";var ye,Le,se=this&&this.__spreadArray||function(le,fe,De){if(De||2===arguments.length)for(var ve,Te=0,Ve=fe.length;Te<Ve;Te++)(ve||!(Te in fe))&&(ve||(ve=Array.prototype.slice.call(fe,0,Te)),ve[Te]=fe[Te]);return le.concat(ve||Array.prototype.slice.call(fe))};ye=function(){!function(e){var r=e.performance;function t(v){r&&r.mark&&r.mark(v)}function n(v,o){r&&r.measure&&r.measure(v,o)}t("Zone");var u=e.__Zone_symbol_prefix||"__zone_symbol__";function c(v){return u+v}var f=!0===e[c("forceDuplicateZoneCheck")];if(e.Zone){if(f||"function"!=typeof e.Zone.__symbol__)throw new Error("Zone already loaded.");return e.Zone}var d=function(){function v(o,a){this._parent=o,this._name=a?a.name||"unnamed":"<root>",this._properties=a&&a.properties||{},this._zoneDelegate=new T(this,this._parent&&this._parent._zoneDelegate,a)}return v.assertZonePatched=function(){if(e.Promise!==S.ZoneAwarePromise)throw new Error("Zone.js has detected that ZoneAwarePromise `(window|global).Promise` has been overwritten.\nMost likely cause is that a Promise polyfill has been loaded after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. If you must load one, do so before loading zone.js.)")},Object.defineProperty(v,"root",{get:function(){for(var o=v.current;o.parent;)o=o.parent;return o},enumerable:!1,configurable:!0}),Object.defineProperty(v,"current",{get:function(){return W.zone},enumerable:!1,configurable:!0}),Object.defineProperty(v,"currentTask",{get:function(){return ae},enumerable:!1,configurable:!0}),v.__load_patch=function(o,a,i){if(void 0===i&&(i=!1),S.hasOwnProperty(o)){if(!i&&f)throw Error("Already loaded patch: "+o)}else if(!e["__Zone_disable_"+o]){var P="Zone:"+o;t(P),S[o]=a(e,v,X),n(P,P)}},Object.defineProperty(v.prototype,"parent",{get:function(){return this._parent},enumerable:!1,configurable:!0}),Object.defineProperty(v.prototype,"name",{get:function(){return this._name},enumerable:!1,configurable:!0}),v.prototype.get=function(o){var a=this.getZoneWith(o);if(a)return a._properties[o]},v.prototype.getZoneWith=function(o){for(var a=this;a;){if(a._properties.hasOwnProperty(o))return a;a=a._parent}return null},v.prototype.fork=function(o){if(!o)throw new Error("ZoneSpec required!");return this._zoneDelegate.fork(this,o)},v.prototype.wrap=function(o,a){if("function"!=typeof o)throw new Error("Expecting function got: "+o);var i=this._zoneDelegate.intercept(this,o,a),P=this;return function(){return P.runGuarded(i,this,arguments,a)}},v.prototype.run=function(o,a,i,P){W={parent:W,zone:this};try{return this._zoneDelegate.invoke(this,o,a,i,P)}finally{W=W.parent}},v.prototype.runGuarded=function(o,a,i,P){void 0===a&&(a=null),W={parent:W,zone:this};try{try{return this._zoneDelegate.invoke(this,o,a,i,P)}catch(q){if(this._zoneDelegate.handleError(this,q))throw q}}finally{W=W.parent}},v.prototype.runTask=function(o,a,i){if(o.zone!=this)throw new Error("A task can only be run in the zone of creation! (Creation: "+(o.zone||b).name+"; Execution: "+this.name+")");if(o.state!==U||o.type!==N&&o.type!==O){var P=o.state!=F;P&&o._transitionTo(F,B),o.runCount++;var q=ae;ae=o,W={parent:W,zone:this};try{o.type==O&&o.data&&!o.data.isPeriodic&&(o.cancelFn=void 0);try{return this._zoneDelegate.invokeTask(this,o,a,i)}catch(ce){if(this._zoneDelegate.handleError(this,ce))throw ce}}finally{o.state!==U&&o.state!==z&&(o.type==N||o.data&&o.data.isPeriodic?P&&o._transitionTo(B,F):(o.runCount=0,this._updateTaskCount(o,-1),P&&o._transitionTo(U,F,U))),W=W.parent,ae=q}}},v.prototype.scheduleTask=function(o){if(o.zone&&o.zone!==this)for(var a=this;a;){if(a===o.zone)throw Error("can not reschedule task to ".concat(this.name," which is descendants of the original zone ").concat(o.zone.name));a=a.parent}o._transitionTo(x,U);var i=[];o._zoneDelegates=i,o._zone=this;try{o=this._zoneDelegate.scheduleTask(this,o)}catch(P){throw o._transitionTo(z,x,U),this._zoneDelegate.handleError(this,P),P}return o._zoneDelegates===i&&this._updateTaskCount(o,1),o.state==x&&o._transitionTo(B,x),o},v.prototype.scheduleMicroTask=function(o,a,i,P){return this.scheduleTask(new p(Z,o,a,i,P,void 0))},v.prototype.scheduleMacroTask=function(o,a,i,P,q){return this.scheduleTask(new p(O,o,a,i,P,q))},v.prototype.scheduleEventTask=function(o,a,i,P,q){return this.scheduleTask(new p(N,o,a,i,P,q))},v.prototype.cancelTask=function(o){if(o.zone!=this)throw new Error("A task can only be cancelled in the zone of creation! (Creation: "+(o.zone||b).name+"; Execution: "+this.name+")");o._transitionTo(k,B,F);try{this._zoneDelegate.cancelTask(this,o)}catch(a){throw o._transitionTo(z,k),this._zoneDelegate.handleError(this,a),a}return this._updateTaskCount(o,-1),o._transitionTo(U,k),o.runCount=0,o},v.prototype._updateTaskCount=function(o,a){var i=o._zoneDelegates;-1==a&&(o._zoneDelegates=null);for(var P=0;P<i.length;P++)i[P]._updateTaskCount(o.type,a)},v}();d.__symbol__=c;var $,E={name:"",onHasTask:function(v,o,a,i){return v.hasTask(a,i)},onScheduleTask:function(v,o,a,i){return v.scheduleTask(a,i)},onInvokeTask:function(v,o,a,i,P,q){return v.invokeTask(a,i,P,q)},onCancelTask:function(v,o,a,i){return v.cancelTask(a,i)}},T=function(){function v(o,a,i){this._taskCounts={microTask:0,macroTask:0,eventTask:0},this.zone=o,this._parentDelegate=a,this._forkZS=i&&(i&&i.onFork?i:a._forkZS),this._forkDlgt=i&&(i.onFork?a:a._forkDlgt),this._forkCurrZone=i&&(i.onFork?this.zone:a._forkCurrZone),this._interceptZS=i&&(i.onIntercept?i:a._interceptZS),this._interceptDlgt=i&&(i.onIntercept?a:a._interceptDlgt),this._interceptCurrZone=i&&(i.onIntercept?this.zone:a._interceptCurrZone),this._invokeZS=i&&(i.onInvoke?i:a._invokeZS),this._invokeDlgt=i&&(i.onInvoke?a:a._invokeDlgt),this._invokeCurrZone=i&&(i.onInvoke?this.zone:a._invokeCurrZone),this._handleErrorZS=i&&(i.onHandleError?i:a._handleErrorZS),this._handleErrorDlgt=i&&(i.onHandleError?a:a._handleErrorDlgt),this._handleErrorCurrZone=i&&(i.onHandleError?this.zone:a._handleErrorCurrZone),this._scheduleTaskZS=i&&(i.onScheduleTask?i:a._scheduleTaskZS),this._scheduleTaskDlgt=i&&(i.onScheduleTask?a:a._scheduleTaskDlgt),this._scheduleTaskCurrZone=i&&(i.onScheduleTask?this.zone:a._scheduleTaskCurrZone),this._invokeTaskZS=i&&(i.onInvokeTask?i:a._invokeTaskZS),this._invokeTaskDlgt=i&&(i.onInvokeTask?a:a._invokeTaskDlgt),this._invokeTaskCurrZone=i&&(i.onInvokeTask?this.zone:a._invokeTaskCurrZone),this._cancelTaskZS=i&&(i.onCancelTask?i:a._cancelTaskZS),this._cancelTaskDlgt=i&&(i.onCancelTask?a:a._cancelTaskDlgt),this._cancelTaskCurrZone=i&&(i.onCancelTask?this.zone:a._cancelTaskCurrZone),this._hasTaskZS=null,this._hasTaskDlgt=null,this._hasTaskDlgtOwner=null,this._hasTaskCurrZone=null;var P=i&&i.onHasTask;(P||a&&a._hasTaskZS)&&(this._hasTaskZS=P?i:E,this._hasTaskDlgt=a,this._hasTaskDlgtOwner=this,this._hasTaskCurrZone=o,i.onScheduleTask||(this._scheduleTaskZS=E,this._scheduleTaskDlgt=a,this._scheduleTaskCurrZone=this.zone),i.onInvokeTask||(this._invokeTaskZS=E,this._invokeTaskDlgt=a,this._invokeTaskCurrZone=this.zone),i.onCancelTask||(this._cancelTaskZS=E,this._cancelTaskDlgt=a,this._cancelTaskCurrZone=this.zone))}return v.prototype.fork=function(o,a){return this._forkZS?this._forkZS.onFork(this._forkDlgt,this.zone,o,a):new d(o,a)},v.prototype.intercept=function(o,a,i){return this._interceptZS?this._interceptZS.onIntercept(this._interceptDlgt,this._interceptCurrZone,o,a,i):a},v.prototype.invoke=function(o,a,i,P,q){return this._invokeZS?this._invokeZS.onInvoke(this._invokeDlgt,this._invokeCurrZone,o,a,i,P,q):a.apply(i,P)},v.prototype.handleError=function(o,a){return!this._handleErrorZS||this._handleErrorZS.onHandleError(this._handleErrorDlgt,this._handleErrorCurrZone,o,a)},v.prototype.scheduleTask=function(o,a){var i=a;if(this._scheduleTaskZS)this._hasTaskZS&&i._zoneDelegates.push(this._hasTaskDlgtOwner),(i=this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt,this._scheduleTaskCurrZone,o,a))||(i=a);else if(a.scheduleFn)a.scheduleFn(a);else{if(a.type!=Z)throw new Error("Task is missing scheduleFn.");J(a)}return i},v.prototype.invokeTask=function(o,a,i,P){return this._invokeTaskZS?this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt,this._invokeTaskCurrZone,o,a,i,P):a.callback.apply(i,P)},v.prototype.cancelTask=function(o,a){var i;if(this._cancelTaskZS)i=this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt,this._cancelTaskCurrZone,o,a);else{if(!a.cancelFn)throw Error("Task is not cancelable");i=a.cancelFn(a)}return i},v.prototype.hasTask=function(o,a){try{this._hasTaskZS&&this._hasTaskZS.onHasTask(this._hasTaskDlgt,this._hasTaskCurrZone,o,a)}catch(i){this.handleError(o,i)}},v.prototype._updateTaskCount=function(o,a){var i=this._taskCounts,P=i[o],q=i[o]=P+a;if(q<0)throw new Error("More tasks executed then were scheduled.");0!=P&&0!=q||this.hasTask(this.zone,{microTask:i.microTask>0,macroTask:i.macroTask>0,eventTask:i.eventTask>0,change:o})},v}(),p=function(){function v(o,a,i,P,q,ce){if(this._zone=null,this.runCount=0,this._zoneDelegates=null,this._state="notScheduled",this.type=o,this.source=a,this.data=P,this.scheduleFn=q,this.cancelFn=ce,!i)throw new Error("callback is not defined");this.callback=i;var l=this;this.invoke=o===N&&P&&P.useG?v.invokeTask:function(){return v.invokeTask.call(e,l,this,arguments)}}return v.invokeTask=function(o,a,i){o||(o=this),Q++;try{return o.runCount++,o.zone.runTask(o,a,i)}finally{1==Q&&A(),Q--}},Object.defineProperty(v.prototype,"zone",{get:function(){return this._zone},enumerable:!1,configurable:!0}),Object.defineProperty(v.prototype,"state",{get:function(){return this._state},enumerable:!1,configurable:!0}),v.prototype.cancelScheduleRequest=function(){this._transitionTo(U,x)},v.prototype._transitionTo=function(o,a,i){if(this._state!==a&&this._state!==i)throw new Error("".concat(this.type," '").concat(this.source,"': can not transition to '").concat(o,"', expecting state '").concat(a,"'").concat(i?" or '"+i+"'":"",", was '").concat(this._state,"'."));this._state=o,o==U&&(this._zoneDelegates=null)},v.prototype.toString=function(){return this.data&&void 0!==this.data.handleId?this.data.handleId.toString():Object.prototype.toString.call(this)},v.prototype.toJSON=function(){return{type:this.type,state:this.state,source:this.source,zone:this.zone.name,runCount:this.runCount}},v}(),m=c("setTimeout"),g=c("Promise"),C=c("then"),D=[],H=!1;function V(v){if($||e[g]&&($=e[g].resolve(0)),$){var o=$[C];o||(o=$.then),o.call($,v)}else e[m](v,0)}function J(v){0===Q&&0===D.length&&V(A),v&&D.push(v)}function A(){if(!H){for(H=!0;D.length;){var v=D;D=[];for(var o=0;o<v.length;o++){var a=v[o];try{a.zone.runTask(a,null,null)}catch(i){X.onUnhandledError(i)}}}X.microtaskDrainDone(),H=!1}}var b={name:"NO ZONE"},U="notScheduled",x="scheduling",B="scheduled",F="running",k="canceling",z="unknown",Z="microTask",O="macroTask",N="eventTask",S={},X={symbol:c,currentZoneFrame:function(){return W},onUnhandledError:Y,microtaskDrainDone:Y,scheduleMicroTask:J,showUncaughtError:function(){return!d[c("ignoreConsoleErrorUncaughtError")]},patchEventTarget:function(){return[]},patchOnProperties:Y,patchMethod:function(){return Y},bindArguments:function(){return[]},patchThen:function(){return Y},patchMacroTask:function(){return Y},patchEventPrototype:function(){return Y},isIEOrEdge:function(){return!1},getGlobalObjects:function(){},ObjectDefineProperty:function(){return Y},ObjectGetOwnPropertyDescriptor:function(){},ObjectCreate:function(){},ArraySlice:function(){return[]},patchClass:function(){return Y},wrapWithCurrentZone:function(){return Y},filterProperties:function(){return[]},attachOriginToPatched:function(){return Y},_redefineProperty:function(){return Y},patchCallbacks:function(){return Y},nativeScheduleMicroTask:V},W={parent:null,zone:new d(null,null)},ae=null,Q=0;function Y(){}n("Zone","Zone"),e.Zone=d}("undefined"!=typeof window&&window||"undefined"!=typeof self&&self||global);var le=Object.getOwnPropertyDescriptor,fe=Object.defineProperty,De=Object.getPrototypeOf,Te=Object.create,Ve=Array.prototype.slice,ve="addEventListener",Ue="removeEventListener",We=Zone.__symbol__(ve),ze=Zone.__symbol__(Ue),he="true",de="false",Ze=Zone.__symbol__("");function Xe(e,r){return Zone.current.wrap(e,r)}function Ye(e,r,t,n,u){return Zone.current.scheduleMacroTask(e,r,t,n,u)}var G=Zone.__symbol__,Ne="undefined"!=typeof window,Pe=Ne?window:void 0,te=Ne&&Pe||"object"==typeof self&&self||global;function qe(e,r){for(var t=e.length-1;t>=0;t--)"function"==typeof e[t]&&(e[t]=Xe(e[t],r+"_"+t));return e}function rr(e){return!e||!1!==e.writable&&!("function"==typeof e.get&&void 0===e.set)}var tr="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,Ae=!("nw"in te)&&void 0!==te.process&&"[object process]"==={}.toString.call(te.process),Ke=!Ae&&!tr&&!(!Ne||!Pe.HTMLElement),nr=void 0!==te.process&&"[object process]"==={}.toString.call(te.process)&&!tr&&!(!Ne||!Pe.HTMLElement),je={},or=function(e){if(e=e||te.event){var r=je[e.type];r||(r=je[e.type]=G("ON_PROPERTY"+e.type));var u,t=this||e.target||te,n=t[r];return Ke&&t===Pe&&"error"===e.type?!0===(u=n&&n.call(this,e.message,e.filename,e.lineno,e.colno,e.error))&&e.preventDefault():null!=(u=n&&n.apply(this,arguments))&&!u&&e.preventDefault(),u}};function ar(e,r,t){var n=le(e,r);if(!n&&t&&le(t,r)&&(n={enumerable:!0,configurable:!0}),n&&n.configurable){var c=G("on"+r+"patched");if(!e.hasOwnProperty(c)||!e[c]){delete n.writable,delete n.value;var f=n.get,d=n.set,E=r.slice(2),T=je[E];T||(T=je[E]=G("ON_PROPERTY"+E)),n.set=function(p){var m=this;!m&&e===te&&(m=te),m&&("function"==typeof m[T]&&m.removeEventListener(E,or),d&&d.call(m,null),m[T]=p,"function"==typeof p&&m.addEventListener(E,or,!1))},n.get=function(){var p=this;if(!p&&e===te&&(p=te),!p)return null;var m=p[T];if(m)return m;if(f){var g=f.call(this);if(g)return n.set.call(this,g),"function"==typeof p.removeAttribute&&p.removeAttribute(r),g}return null},fe(e,r,n),e[c]=!0}}}function ir(e,r,t){if(r)for(var n=0;n<r.length;n++)ar(e,"on"+r[n],t);else{var u=[];for(var c in e)"on"==c.slice(0,2)&&u.push(c);for(var f=0;f<u.length;f++)ar(e,u[f],t)}}var ue=G("originalInstance");function Me(e){var r=te[e];if(r){te[G(e)]=r,te[e]=function(){var u=qe(arguments,e);switch(u.length){case 0:this[ue]=new r;break;case 1:this[ue]=new r(u[0]);break;case 2:this[ue]=new r(u[0],u[1]);break;case 3:this[ue]=new r(u[0],u[1],u[2]);break;case 4:this[ue]=new r(u[0],u[1],u[2],u[3]);break;default:throw new Error("Arg list too long.")}},pe(te[e],r);var n,t=new r(function(){});for(n in t)"XMLHttpRequest"===e&&"responseBlob"===n||function(u){"function"==typeof t[u]?te[e].prototype[u]=function(){return this[ue][u].apply(this[ue],arguments)}:fe(te[e].prototype,u,{set:function(c){"function"==typeof c?(this[ue][u]=Xe(c,e+"."+u),pe(this[ue][u],c)):this[ue][u]=c},get:function(){return this[ue][u]}})}(n);for(n in r)"prototype"!==n&&r.hasOwnProperty(n)&&(te[e][n]=r[n])}}function _e(e,r,t){for(var n=e;n&&!n.hasOwnProperty(r);)n=De(n);!n&&e[r]&&(n=e);var u=G(r),c=null;if(n&&(!(c=n[u])||!n.hasOwnProperty(u))&&(c=n[u]=n[r],rr(n&&le(n,r)))){var d=t(c,u,r);n[r]=function(){return d(this,arguments)},pe(n[r],c)}return c}function Or(e,r,t){var n=null;function u(c){var f=c.data;return f.args[f.cbIdx]=function(){c.invoke.apply(this,arguments)},n.apply(f.target,f.args),c}n=_e(e,r,function(c){return function(f,d){var E=t(f,d);return E.cbIdx>=0&&"function"==typeof d[E.cbIdx]?Ye(E.name,d[E.cbIdx],E,u):c.apply(f,d)}})}function pe(e,r){e[G("OriginalDelegate")]=r}var ur=!1,Je=!1;function Rr(){if(ur)return Je;ur=!0;try{var e=Pe.navigator.userAgent;(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/")||-1!==e.indexOf("Edge/"))&&(Je=!0)}catch(r){}return Je}Zone.__load_patch("ZoneAwarePromise",function(e,r,t){var n=Object.getOwnPropertyDescriptor,u=Object.defineProperty;var f=t.symbol,d=[],E=!0===e[f("DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION")],T=f("Promise"),p=f("then");t.onUnhandledError=function(l){if(t.showUncaughtError()){var _=l&&l.rejection;_?console.error("Unhandled Promise rejection:",_ instanceof Error?_.message:_,"; Zone:",l.zone.name,"; Task:",l.task&&l.task.source,"; Value:",_,_ instanceof Error?_.stack:void 0):console.error(l)}},t.microtaskDrainDone=function(){for(var l=function(){var _=d.shift();try{_.zone.runGuarded(function(){throw _.throwOriginal?_.rejection:_})}catch(h){!function C(l){t.onUnhandledError(l);try{var _=r[g];"function"==typeof _&&_.call(this,l)}catch(h){}}(h)}};d.length;)l()};var g=f("unhandledPromiseRejectionHandler");function D(l){return l&&l.then}function H(l){return l}function $(l){return a.reject(l)}var V=f("state"),J=f("value"),A=f("finally"),b=f("parentPromiseValue"),U=f("parentPromiseState"),B=null,F=!0,k=!1;function Z(l,_){return function(h){try{X(l,_,h)}catch(s){X(l,!1,s)}}}var O=function(){var l=!1;return function(h){return function(){l||(l=!0,h.apply(null,arguments))}}},S=f("currentTaskTrace");function X(l,_,h){var s=O();if(l===h)throw new TypeError("Promise resolved with itself");if(l[V]===B){var y=null;try{("object"==typeof h||"function"==typeof h)&&(y=h&&h.then)}catch(L){return s(function(){X(l,!1,L)})(),l}if(_!==k&&h instanceof a&&h.hasOwnProperty(V)&&h.hasOwnProperty(J)&&h[V]!==B)ae(h),X(l,h[V],h[J]);else if(_!==k&&"function"==typeof y)try{y.call(h,s(Z(l,_)),s(Z(l,!1)))}catch(L){s(function(){X(l,!1,L)})()}else{l[V]=_;var R=l[J];if(l[J]=h,l[A]===A&&_===F&&(l[V]=l[U],l[J]=l[b]),_===k&&h instanceof Error){var w=r.currentTask&&r.currentTask.data&&r.currentTask.data.__creationTrace__;w&&u(h,S,{configurable:!0,enumerable:!1,writable:!0,value:w})}for(var M=0;M<R.length;)Q(l,R[M++],R[M++],R[M++],R[M++]);if(0==R.length&&_==k){l[V]=0;var I=h;try{throw new Error("Uncaught (in promise): "+function c(l){return l&&l.toString===Object.prototype.toString?(l.constructor&&l.constructor.name||"")+": "+JSON.stringify(l):l?l.toString():Object.prototype.toString.call(l)}(h)+(h&&h.stack?"\n"+h.stack:""))}catch(L){I=L}E&&(I.throwOriginal=!0),I.rejection=h,I.promise=l,I.zone=r.current,I.task=r.currentTask,d.push(I),t.scheduleMicroTask()}}}return l}var W=f("rejectionHandledHandler");function ae(l){if(0===l[V]){try{var _=r[W];_&&"function"==typeof _&&_.call(this,{rejection:l[J],promise:l})}catch(s){}l[V]=k;for(var h=0;h<d.length;h++)l===d[h].promise&&d.splice(h,1)}}function Q(l,_,h,s,y){ae(l);var R=l[V],w=R?"function"==typeof s?s:H:"function"==typeof y?y:$;_.scheduleMicroTask("Promise.then",function(){try{var M=l[J],I=!!h&&A===h[A];I&&(h[b]=M,h[U]=R);var L=_.run(w,void 0,I&&w!==$&&w!==H?[]:[M]);X(h,!0,L)}catch(j){X(h,!1,j)}},h)}var v=function(){},o=e.AggregateError,a=function(){function l(_){var h=this;if(!(h instanceof l))throw new Error("Must be an instanceof Promise.");h[V]=B,h[J]=[];try{var s=O();_&&_(s(Z(h,F)),s(Z(h,k)))}catch(y){X(h,!1,y)}}return l.toString=function(){return"function ZoneAwarePromise() { [native code] }"},l.resolve=function(_){return X(new this(null),F,_)},l.reject=function(_){return X(new this(null),k,_)},l.any=function(_){if(!_||"function"!=typeof _[Symbol.iterator])return Promise.reject(new o([],"All promises were rejected"));var h=[],s=0;try{for(var y=0,R=_;y<R.length;y++)s++,h.push(l.resolve(R[y]))}catch(L){return Promise.reject(new o([],"All promises were rejected"))}if(0===s)return Promise.reject(new o([],"All promises were rejected"));var M=!1,I=[];return new l(function(L,j){for(var K=0;K<h.length;K++)h[K].then(function(oe){M||(M=!0,L(oe))},function(oe){I.push(oe),0==--s&&(M=!0,j(new o(I,"All promises were rejected")))})})},l.race=function(_){var h,s,y=new this(function(j,K){h=j,s=K});function R(j){h(j)}function w(j){s(j)}for(var M=0,I=_;M<I.length;M++){var L=I[M];D(L)||(L=this.resolve(L)),L.then(R,w)}return y},l.all=function(_){return l.allWithCallback(_)},l.allSettled=function(_){return(this&&this.prototype instanceof l?this:l).allWithCallback(_,{thenCallback:function(s){return{status:"fulfilled",value:s}},errorCallback:function(s){return{status:"rejected",reason:s}}})},l.allWithCallback=function(_,h){for(var s,y,R=new this(function(re,ne){s=re,y=ne}),w=2,M=0,I=[],L=function(re){D(re)||(re=j.resolve(re));var ne=M;try{re.then(function(ee){I[ne]=h?h.thenCallback(ee):ee,0==--w&&s(I)},function(ee){h?(I[ne]=h.errorCallback(ee),0==--w&&s(I)):y(ee)})}catch(ee){y(ee)}w++,M++},j=this,K=0,oe=_;K<oe.length;K++)L(oe[K]);return 0==(w-=2)&&s(I),R},Object.defineProperty(l.prototype,Symbol.toStringTag,{get:function(){return"Promise"},enumerable:!1,configurable:!0}),Object.defineProperty(l.prototype,Symbol.species,{get:function(){return l},enumerable:!1,configurable:!0}),l.prototype.then=function(_,h){var s,y=null===(s=this.constructor)||void 0===s?void 0:s[Symbol.species];(!y||"function"!=typeof y)&&(y=this.constructor||l);var R=new y(v),w=r.current;return this[V]==B?this[J].push(w,R,_,h):Q(this,w,R,_,h),R},l.prototype.catch=function(_){return this.then(null,_)},l.prototype.finally=function(_){var h,s=null===(h=this.constructor)||void 0===h?void 0:h[Symbol.species];(!s||"function"!=typeof s)&&(s=l);var y=new s(v);y[A]=A;var R=r.current;return this[V]==B?this[J].push(R,y,_,_):Q(this,R,y,_,_),y},l}();a.resolve=a.resolve,a.reject=a.reject,a.race=a.race,a.all=a.all;var i=e[T]=e.Promise;e.Promise=a;var P=f("thenPatched");function q(l){var _=l.prototype,h=n(_,"then");if(!h||!1!==h.writable&&h.configurable){var s=_.then;_[p]=s,l.prototype.then=function(y,R){var w=this;return new a(function(I,L){s.call(w,I,L)}).then(y,R)},l[P]=!0}}return t.patchThen=q,i&&(q(i),_e(e,"fetch",function(l){return function ce(l){return function(_,h){var s=l.apply(_,h);if(s instanceof a)return s;var y=s.constructor;return y[P]||q(y),s}}(l)})),Promise[r.__symbol__("uncaughtPromiseErrors")]=d,a}),Zone.__load_patch("toString",function(e){var r=Function.prototype.toString,t=G("OriginalDelegate"),n=G("Promise"),u=G("Error"),c=function(){if("function"==typeof this){var T=this[t];if(T)return"function"==typeof T?r.call(T):Object.prototype.toString.call(T);if(this===Promise){var p=e[n];if(p)return r.call(p)}if(this===Error){var m=e[u];if(m)return r.call(m)}}return r.call(this)};c[t]=r,Function.prototype.toString=c;var f=Object.prototype.toString;Object.prototype.toString=function(){return"function"==typeof Promise&&this instanceof Promise?"[object Promise]":f.call(this)}});var we=!1;if("undefined"!=typeof window)try{var He=Object.defineProperty({},"passive",{get:function(){we=!0}});window.addEventListener("test",He,He),window.removeEventListener("test",He,He)}catch(e){we=!1}var xe,Be,_r,pr,be,Cr={useG:!0},ie={},cr={},sr=new RegExp("^"+Ze+"(\\w+)(true|false)$"),lr=G("propagationStopped");function fr(e,r){var t=(r?r(e):e)+de,n=(r?r(e):e)+he,u=Ze+t,c=Ze+n;ie[e]={},ie[e][de]=u,ie[e][he]=c}function Dr(e,r,t,n){var u=n&&n.add||ve,c=n&&n.rm||Ue,f=n&&n.listeners||"eventListeners",d=n&&n.rmAll||"removeAllListeners",E=G(u),T="."+u+":",p="prependListener",g=function(A,b,U){if(!A.isRemoved){var B,x=A.callback;"object"==typeof x&&x.handleEvent&&(A.callback=function(z){return x.handleEvent(z)},A.originalDelegate=x);try{A.invoke(A,b,[U])}catch(z){B=z}var F=A.options;return F&&"object"==typeof F&&F.once&&b[c].call(b,U.type,A.originalDelegate?A.originalDelegate:A.callback,F),B}};function C(A,b,U){if(b=b||e.event){var x=A||b.target||e,B=x[ie[b.type][U?he:de]];if(B){var F=[];if(1===B.length)(k=g(B[0],x,b))&&F.push(k);else for(var z=B.slice(),Z=0;Z<z.length&&(!b||!0!==b[lr]);Z++){var k;(k=g(z[Z],x,b))&&F.push(k)}if(1===F.length)throw F[0];var O=function(N){var S=F[N];r.nativeScheduleMicroTask(function(){throw S})};for(Z=0;Z<F.length;Z++)O(Z)}}}var D=function(A){return C(this,A,!1)},H=function(A){return C(this,A,!0)};function $(A,b){if(!A)return!1;var U=!0;b&&void 0!==b.useG&&(U=b.useG);var x=b&&b.vh,B=!0;b&&void 0!==b.chkDup&&(B=b.chkDup);var F=!1;b&&void 0!==b.rt&&(F=b.rt);for(var k=A;k&&!k.hasOwnProperty(u);)k=De(k);if(!k&&A[u]&&(k=A),!k||k[E])return!1;var W,z=b&&b.eventNameToString,Z={},O=k[E]=k[u],N=k[G(c)]=k[c],S=k[G(f)]=k[f],X=k[G(d)]=k[d];function ae(s,y){return!we&&"object"==typeof s&&s?!!s.capture:we&&y?"boolean"==typeof s?{capture:s,passive:!0}:s?"object"==typeof s&&!1!==s.passive?Object.assign(Object.assign({},s),{passive:!0}):s:{passive:!0}:s}b&&b.prepend&&(W=k[G(b.prepend)]=k[b.prepend]);var i=U?function(s){if(!Z.isExisting)return O.call(Z.target,Z.eventName,Z.capture?H:D,Z.options)}:function(s){return O.call(Z.target,Z.eventName,s.invoke,Z.options)},P=U?function(s){if(!s.isRemoved){var y=ie[s.eventName],R=void 0;y&&(R=y[s.capture?he:de]);var w=R&&s.target[R];if(w)for(var M=0;M<w.length;M++)if(w[M]===s){w.splice(M,1),s.isRemoved=!0,0===w.length&&(s.allRemoved=!0,s.target[R]=null);break}}if(s.allRemoved)return N.call(s.target,s.eventName,s.capture?H:D,s.options)}:function(s){return N.call(s.target,s.eventName,s.invoke,s.options)},ce=b&&b.diff?b.diff:function(s,y){var R=typeof y;return"function"===R&&s.callback===y||"object"===R&&s.originalDelegate===y},l=Zone[G("UNPATCHED_EVENTS")],_=e[G("PASSIVE_EVENTS")],h=function(s,y,R,w,M,I){return void 0===M&&(M=!1),void 0===I&&(I=!1),function(){var L=this||e,j=arguments[0];b&&b.transferEventName&&(j=b.transferEventName(j));var K=arguments[1];if(!K)return s.apply(this,arguments);if(Ae&&"uncaughtException"===j)return s.apply(this,arguments);var oe=!1;if("function"!=typeof K){if(!K.handleEvent)return s.apply(this,arguments);oe=!0}if(!x||x(s,K,L,arguments)){var Ee=we&&!!_&&-1!==_.indexOf(j),re=ae(arguments[2],Ee);if(l)for(var ne=0;ne<l.length;ne++)if(j===l[ne])return Ee?s.call(L,j,K,re):s.apply(this,arguments);var ee=!!re&&("boolean"==typeof re||re.capture),Se=!(!re||"object"!=typeof re)&&re.once,$r=Zone.current,er=ie[j];er||(fr(j,z),er=ie[j]);var gr=er[ee?he:de],Re=L[gr],mr=!1;if(Re){if(mr=!0,B)for(ne=0;ne<Re.length;ne++)if(ce(Re[ne],K))return}else Re=L[gr]=[];var Ge,br=L.constructor.name,kr=cr[br];kr&&(Ge=kr[j]),Ge||(Ge=br+y+(z?z(j):j)),Z.options=re,Se&&(Z.options.once=!1),Z.target=L,Z.capture=ee,Z.eventName=j,Z.isExisting=mr;var Ie=U?Cr:void 0;Ie&&(Ie.taskData=Z);var ge=$r.scheduleEventTask(Ge,K,Ie,R,w);if(Z.target=null,Ie&&(Ie.taskData=null),Se&&(re.once=!0),!we&&"boolean"==typeof ge.options||(ge.options=re),ge.target=L,ge.capture=ee,ge.eventName=j,oe&&(ge.originalDelegate=K),I?Re.unshift(ge):Re.push(ge),M)return L}}};return k[u]=h(O,T,i,P,F),W&&(k[p]=h(W,".prependListener:",function(s){return W.call(Z.target,Z.eventName,s.invoke,Z.options)},P,F,!0)),k[c]=function(){var s=this||e,y=arguments[0];b&&b.transferEventName&&(y=b.transferEventName(y));var R=arguments[2],w=!!R&&("boolean"==typeof R||R.capture),M=arguments[1];if(!M)return N.apply(this,arguments);if(!x||x(N,M,s,arguments)){var L,I=ie[y];I&&(L=I[w?he:de]);var j=L&&s[L];if(j)for(var K=0;K<j.length;K++){var oe=j[K];if(ce(oe,M))return j.splice(K,1),oe.isRemoved=!0,0===j.length&&(oe.allRemoved=!0,s[L]=null,"string"==typeof y)&&(s[Ze+"ON_PROPERTY"+y]=null),oe.zone.cancelTask(oe),F?s:void 0}return N.apply(this,arguments)}},k[f]=function(){var s=this||e,y=arguments[0];b&&b.transferEventName&&(y=b.transferEventName(y));for(var R=[],w=vr(s,z?z(y):y),M=0;M<w.length;M++){var I=w[M];R.push(I.originalDelegate?I.originalDelegate:I.callback)}return R},k[d]=function(){var s=this||e,y=arguments[0];if(y){b&&b.transferEventName&&(y=b.transferEventName(y));var j=ie[y];if(j){var Ee=s[j[de]],re=s[j[he]];if(Ee)for(var ne=Ee.slice(),w=0;w<ne.length;w++)this[c].call(this,y,(ee=ne[w]).originalDelegate?ee.originalDelegate:ee.callback,ee.options);if(re)for(ne=re.slice(),w=0;w<ne.length;w++){var ee;this[c].call(this,y,(ee=ne[w]).originalDelegate?ee.originalDelegate:ee.callback,ee.options)}}}else{var R=Object.keys(s);for(w=0;w<R.length;w++){var I=sr.exec(R[w]),L=I&&I[1];L&&"removeListener"!==L&&this[d].call(this,L)}this[d].call(this,"removeListener")}if(F)return this},pe(k[u],O),pe(k[c],N),X&&pe(k[d],X),S&&pe(k[f],S),!0}for(var V=[],J=0;J<t.length;J++)V[J]=$(t[J],n);return V}function vr(e,r){if(!r){var t=[];for(var n in e){var u=sr.exec(n),c=u&&u[1];if(c&&(!r||c===r)){var f=e[n];if(f)for(var d=0;d<f.length;d++)t.push(f[d])}}return t}var E=ie[r];E||(fr(r),E=ie[r]);var T=e[E[de]],p=e[E[he]];return T?p?T.concat(p):T.slice():p?p.slice():[]}function Zr(e,r){var t=e.Event;t&&t.prototype&&r.patchMethod(t.prototype,"stopImmediatePropagation",function(n){return function(u,c){u[lr]=!0,n&&n.apply(u,c)}})}function Mr(e,r,t,n,u){var c=Zone.__symbol__(n);if(!r[c]){var f=r[c]=r[n];r[n]=function(d,E,T){return E&&E.prototype&&u.forEach(function(p){var m="".concat(t,".").concat(n,"::")+p,g=E.prototype;try{if(g.hasOwnProperty(p)){var C=e.ObjectGetOwnPropertyDescriptor(g,p);C&&C.value?(C.value=e.wrapWithCurrentZone(C.value,m),e._redefineProperty(E.prototype,p,C)):g[p]&&(g[p]=e.wrapWithCurrentZone(g[p],m))}else g[p]&&(g[p]=e.wrapWithCurrentZone(g[p],m))}catch(D){}}),f.call(r,d,E,T)},e.attachOriginToPatched(r[n],f)}}function hr(e,r,t){if(!t||0===t.length)return r;var n=t.filter(function(c){return c.target===e});if(!n||0===n.length)return r;var u=n[0].ignoreProperties;return r.filter(function(c){return-1===u.indexOf(c)})}function dr(e,r,t,n){e&&ir(e,hr(e,r,t),n)}function Qe(e){return Object.getOwnPropertyNames(e).filter(function(r){return r.startsWith("on")&&r.length>2}).map(function(r){return r.substring(2)})}function Ir(e,r){if((!Ae||nr)&&!Zone[e.symbol("patchEvents")]){var t=r.__Zone_ignore_on_properties,n=[];if(Ke){var u=window;n=n.concat(["Document","SVGElement","Element","HTMLElement","HTMLBodyElement","HTMLMediaElement","HTMLFrameSetElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker"]);var c=function Sr(){try{var e=Pe.navigator.userAgent;if(-1!==e.indexOf("MSIE ")||-1!==e.indexOf("Trident/"))return!0}catch(r){}return!1}()?[{target:u,ignoreProperties:["error"]}]:[];dr(u,Qe(u),t&&t.concat(c),De(u))}n=n.concat(["XMLHttpRequest","XMLHttpRequestEventTarget","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","WebSocket"]);for(var f=0;f<n.length;f++){var d=r[n[f]];d&&d.prototype&&dr(d.prototype,Qe(d.prototype),t)}}}function Nr(e,r,t){var n=t.configurable;return yr(e,r,t=$e(e,r,t),n)}function Er(e,r){return e&&e[be]&&e[be][r]}function $e(e,r,t){return Object.isFrozen(t)||(t.configurable=!0),t.configurable||(!e[be]&&!Object.isFrozen(e)&&Be(e,be,{writable:!0,value:{}}),e[be]&&(e[be][r]=!0)),t}function yr(e,r,t,n){try{return Be(e,r,t)}catch(f){if(!t.configurable)throw f;void 0===n?delete t.configurable:t.configurable=n;try{return Be(e,r,t)}catch(d){var u=!1;if(("createdCallback"===r||"attachedCallback"===r||"detachedCallback"===r||"attributeChangedCallback"===r)&&(u=!0),!u)throw d;var c=null;try{c=JSON.stringify(t)}catch(E){c=t.toString()}console.log("Attempting to configure '".concat(r,"' with descriptor '").concat(c,"' on object '").concat(e,"' and got error, giving up: ").concat(d))}}}function Hr(e,r){var t=e.getGlobalObjects();if((!t.isNode||t.isMix)&&!function xr(e,r){var t=e.getGlobalObjects();if((t.isBrowser||t.isMix)&&!e.ObjectGetOwnPropertyDescriptor(HTMLElement.prototype,"onclick")&&"undefined"!=typeof Element){var c=e.ObjectGetOwnPropertyDescriptor(Element.prototype,"onclick");if(c&&!c.configurable)return!1;if(c){e.ObjectDefineProperty(Element.prototype,"onclick",{enumerable:!0,configurable:!0,get:function(){return!0}});var d=!!document.createElement("div").onclick;return e.ObjectDefineProperty(Element.prototype,"onclick",c),d}}var E=r.XMLHttpRequest;if(!E)return!1;var T="onreadystatechange",p=E.prototype,m=e.ObjectGetOwnPropertyDescriptor(p,T);if(m)return e.ObjectDefineProperty(p,T,{enumerable:!0,configurable:!0,get:function(){return!0}}),d=!!(g=new E).onreadystatechange,e.ObjectDefineProperty(p,T,m||{}),d;var C=e.symbol("fake");e.ObjectDefineProperty(p,T,{enumerable:!0,configurable:!0,get:function(){return this[C]},set:function(V){this[C]=V}});var g,D=function(){};return(g=new E).onreadystatechange=D,d=g[C]===D,g.onreadystatechange=null,d}(e,r)){var c="undefined"!=typeof WebSocket;(function Yr(e){for(var r=e.symbol("unbound"),t=function(u){var c=Tr[u],f="on"+c;self.addEventListener(c,function(d){var T,p,E=d.target;for(p=E?E.constructor.name+"."+f:"unknown."+f;E;)E[f]&&!E[f][r]&&((T=e.wrapWithCurrentZone(E[f],p))[r]=E[f],E[f]=T),E=E.parentElement},!0)},n=0;n<Tr.length;n++)t(n)})(e),e.patchClass("XMLHttpRequest"),c&&function jr(e,r){var t=e.getGlobalObjects(),n=t.ADD_EVENT_LISTENER_STR,u=t.REMOVE_EVENT_LISTENER_STR,c=r.WebSocket;r.EventTarget||e.patchEventTarget(r,e,[c.prototype]),r.WebSocket=function(E,T){var m,g,p=arguments.length>1?new c(E,T):new c(E),C=e.ObjectGetOwnPropertyDescriptor(p,"onmessage");return C&&!1===C.configurable?(m=e.ObjectCreate(p),g=p,[n,u,"send","close"].forEach(function(D){m[D]=function(){var H=e.ArraySlice.call(arguments);if(D===n||D===u){var $=H.length>0?H[0]:void 0;if($){var V=Zone.__symbol__("ON_PROPERTY"+$);p[V]=m[V]}}return p[D].apply(p,H)}})):m=p,e.patchOnProperties(m,["close","error","message","open"],g),m};var f=r.WebSocket;for(var d in c)f[d]=c[d]}(e,r),Zone[e.symbol("patchEvents")]=!0}}Zone.__load_patch("util",function(e,r,t){var n=Qe(e);t.patchOnProperties=ir,t.patchMethod=_e,t.bindArguments=qe,t.patchMacroTask=Or;var u=r.__symbol__("BLACK_LISTED_EVENTS"),c=r.__symbol__("UNPATCHED_EVENTS");e[c]&&(e[u]=e[c]),e[u]&&(r[u]=r[c]=e[u]),t.patchEventPrototype=Zr,t.patchEventTarget=Dr,t.isIEOrEdge=Rr,t.ObjectDefineProperty=fe,t.ObjectGetOwnPropertyDescriptor=le,t.ObjectCreate=Te,t.ArraySlice=Ve,t.patchClass=Me,t.wrapWithCurrentZone=Xe,t.filterProperties=hr,t.attachOriginToPatched=pe,t._redefineProperty=Object.defineProperty,t.patchCallbacks=Mr,t.getGlobalObjects=function(){return{globalSources:cr,zoneSymbolEventNames:ie,eventNames:n,isBrowser:Ke,isMix:nr,isNode:Ae,TRUE_STR:he,FALSE_STR:de,ZONE_SYMBOL_PREFIX:Ze,ADD_EVENT_LISTENER_STR:ve,REMOVE_EVENT_LISTENER_STR:Ue}}});var e,r,Tr=se(se(se(se(se(se(se(se([],["abort","animationcancel","animationend","animationiteration","auxclick","beforeinput","blur","cancel","canplay","canplaythrough","change","compositionstart","compositionupdate","compositionend","cuechange","click","close","contextmenu","curechange","dblclick","drag","dragend","dragenter","dragexit","dragleave","dragover","drop","durationchange","emptied","ended","error","focus","focusin","focusout","gotpointercapture","input","invalid","keydown","keypress","keyup","load","loadstart","loadeddata","loadedmetadata","lostpointercapture","mousedown","mouseenter","mouseleave","mousemove","mouseout","mouseover","mouseup","mousewheel","orientationchange","pause","play","playing","pointercancel","pointerdown","pointerenter","pointerleave","pointerlockchange","mozpointerlockchange","webkitpointerlockerchange","pointerlockerror","mozpointerlockerror","webkitpointerlockerror","pointermove","pointout","pointerover","pointerup","progress","ratechange","reset","resize","scroll","seeked","seeking","select","selectionchange","selectstart","show","sort","stalled","submit","suspend","timeupdate","volumechange","touchcancel","touchmove","touchstart","touchend","transitioncancel","transitionend","waiting","wheel"],!0),["webglcontextrestored","webglcontextlost","webglcontextcreationerror"],!0),["autocomplete","autocompleteerror"],!0),["toggle"],!0),["afterscriptexecute","beforescriptexecute","DOMContentLoaded","freeze","fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange","fullscreenerror","mozfullscreenerror","webkitfullscreenerror","msfullscreenerror","readystatechange","visibilitychange","resume"],!0),["absolutedeviceorientation","afterinput","afterprint","appinstalled","beforeinstallprompt","beforeprint","beforeunload","devicelight","devicemotion","deviceorientation","deviceorientationabsolute","deviceproximity","hashchange","languagechange","message","mozbeforepaint","offline","online","paint","pageshow","pagehide","popstate","rejectionhandled","storage","unhandledrejection","unload","userproximity","vrdisplayconnected","vrdisplaydisconnected","vrdisplaypresentchange"],!0),["beforecopy","beforecut","beforepaste","copy","cut","paste","dragstart","loadend","animationstart","search","transitionrun","transitionstart","webkitanimationend","webkitanimationiteration","webkitanimationstart","webkittransitionend"],!0),["activate","afterupdate","ariarequest","beforeactivate","beforedeactivate","beforeeditfocus","beforeupdate","cellchange","controlselect","dataavailable","datasetchanged","datasetcomplete","errorupdate","filterchange","layoutcomplete","losecapture","move","moveend","movestart","propertychange","resizeend","resizestart","rowenter","rowexit","rowsdelete","rowsinserted","command","compassneedscalibration","deactivate","help","mscontentzoom","msmanipulationstatechanged","msgesturechange","msgesturedoubletap","msgestureend","msgesturehold","msgesturestart","msgesturetap","msgotpointercapture","msinertiastart","mslostpointercapture","mspointercancel","mspointerdown","mspointerenter","mspointerhover","mspointerleave","mspointermove","mspointerout","mspointerover","mspointerup","pointerout","mssitemodejumplistitemremoved","msthumbnailclick","stop","storagecommit"],!0);e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},r=e.__Zone_symbol_prefix||"__zone_symbol__",e[function t(n){return r+n}("legacyPatch")]=function(){var n=e.Zone;n.__load_patch("defineProperty",function(u,c,f){f._redefineProperty=Nr,function Lr(){xe=Zone.__symbol__,Be=Object[xe("defineProperty")]=Object.defineProperty,_r=Object[xe("getOwnPropertyDescriptor")]=Object.getOwnPropertyDescriptor,pr=Object.create,be=xe("unconfigurables"),Object.defineProperty=function(e,r,t){if(Er(e,r))throw new TypeError("Cannot assign to read only property '"+r+"' of "+e);var n=t.configurable;return"prototype"!==r&&(t=$e(e,r,t)),yr(e,r,t,n)},Object.defineProperties=function(e,r){Object.keys(r).forEach(function(f){Object.defineProperty(e,f,r[f])});for(var t=0,n=Object.getOwnPropertySymbols(r);t<n.length;t++){var u=n[t],c=Object.getOwnPropertyDescriptor(r,u);(null==c?void 0:c.enumerable)&&Object.defineProperty(e,u,r[u])}return e},Object.create=function(e,r){return"object"==typeof r&&!Object.isFrozen(r)&&Object.keys(r).forEach(function(t){r[t]=$e(e,t,r[t])}),pr(e,r)},Object.getOwnPropertyDescriptor=function(e,r){var t=_r(e,r);return t&&Er(e,r)&&(t.configurable=!1),t}}()}),n.__load_patch("registerElement",function(u,c,f){!function qr(e,r){var t=r.getGlobalObjects();(t.isBrowser||t.isMix)&&"registerElement"in e.document&&r.patchCallbacks(r,document,"Document","registerElement",["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"])}(u,f)}),n.__load_patch("EventTargetLegacy",function(u,c,f){(function Ar(e,r){var t=r.getGlobalObjects(),n=t.eventNames,u=t.globalSources,c=t.zoneSymbolEventNames,f=t.TRUE_STR,d=t.FALSE_STR,E=t.ZONE_SYMBOL_PREFIX,p="ApplicationCache,EventSource,FileReader,InputMethodContext,MediaController,MessagePort,Node,Performance,SVGElementInstance,SharedWorker,TextTrack,TextTrackCue,TextTrackList,WebKitNamedFlow,Window,Worker,WorkerGlobalScope,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload,IDBRequest,IDBOpenDBRequest,IDBDatabase,IDBTransaction,IDBCursor,DBIndex,WebSocket".split(","),m="EventTarget",g=[],C=e.wtf,D="Anchor,Area,Audio,BR,Base,BaseFont,Body,Button,Canvas,Content,DList,Directory,Div,Embed,FieldSet,Font,Form,Frame,FrameSet,HR,Head,Heading,Html,IFrame,Image,Input,Keygen,LI,Label,Legend,Link,Map,Marquee,Media,Menu,Meta,Meter,Mod,OList,Object,OptGroup,Option,Output,Paragraph,Pre,Progress,Quote,Script,Select,Source,Span,Style,TableCaption,TableCell,TableCol,Table,TableRow,TableSection,TextArea,Title,Track,UList,Unknown,Video".split(",");C?g=D.map(function(Q){return"HTML"+Q+"Element"}).concat(p):e[m]?g.push(m):g=p;for(var H=e.__Zone_disable_IE_check||!1,$=e.__Zone_enable_cross_context_check||!1,V=r.isIEOrEdge(),A="[object FunctionWrapper]",b="function __BROWSERTOOLS_CONSOLE_SAFEFUNC() { [native code] }",U={MSPointerCancel:"pointercancel",MSPointerDown:"pointerdown",MSPointerEnter:"pointerenter",MSPointerHover:"pointerhover",MSPointerLeave:"pointerleave",MSPointerMove:"pointermove",MSPointerOut:"pointerout",MSPointerOver:"pointerover",MSPointerUp:"pointerup"},x=0;x<n.length;x++){var z=E+((B=n[x])+d),Z=E+(B+f);c[B]={},c[B][d]=z,c[B][f]=Z}for(x=0;x<D.length;x++)for(var O=D[x],N=u[O]={},S=0;S<n.length;S++){var B;N[B=n[S]]=O+".addEventListener:"+B}var W=[];for(x=0;x<g.length;x++){var ae=e[g[x]];W.push(ae&&ae.prototype)}return r.patchEventTarget(e,r,W,{vh:function(Q,Y,v,o){if(!H&&V)if($)try{if((a=Y.toString())===A||a==b)return Q.apply(v,o),!1}catch(i){return Q.apply(v,o),!1}else{var a;if((a=Y.toString())===A||a==b)return Q.apply(v,o),!1}else if($)try{Y.toString()}catch(i){return Q.apply(v,o),!1}return!0},transferEventName:function(Q){return U[Q]||Q}}),Zone[r.symbol("patchEventTarget")]=!!e[m],!0})(u,f),Hr(f,u)})};var Fe=G("zoneTask");function Oe(e,r,t,n){var u=null,c=null;t+=n;var f={};function d(T){var p=T.data;return p.args[0]=function(){return T.invoke.apply(this,arguments)},p.handleId=u.apply(e,p.args),T}function E(T){return c.call(e,T.data.handleId)}u=_e(e,r+=n,function(T){return function(p,m){if("function"==typeof m[0]){var g={isPeriodic:"Interval"===n,delay:"Timeout"===n||"Interval"===n?m[1]||0:void 0,args:m},C=m[0];m[0]=function(){try{return C.apply(this,arguments)}finally{g.isPeriodic||("number"==typeof g.handleId?delete f[g.handleId]:g.handleId&&(g.handleId[Fe]=null))}};var D=Ye(r,m[0],g,d,E);if(!D)return D;var H=D.data.handleId;return"number"==typeof H?f[H]=D:H&&(H[Fe]=D),H&&H.ref&&H.unref&&"function"==typeof H.ref&&"function"==typeof H.unref&&(D.ref=H.ref.bind(H),D.unref=H.unref.bind(H)),"number"==typeof H||H?H:D}return T.apply(e,m)}}),c=_e(e,t,function(T){return function(p,m){var C,g=m[0];"number"==typeof g?C=f[g]:(C=g&&g[Fe])||(C=g),C&&"string"==typeof C.type?"notScheduled"!==C.state&&(C.cancelFn&&C.data.isPeriodic||0===C.runCount)&&("number"==typeof g?delete f[g]:g&&(g[Fe]=null),C.zone.cancelTask(C)):T.apply(e,m)}})}Zone.__load_patch("legacy",function(e){var r=e[Zone.__symbol__("legacyPatch")];r&&r()}),Zone.__load_patch("queueMicrotask",function(e,r,t){t.patchMethod(e,"queueMicrotask",function(n){return function(u,c){r.current.scheduleMicroTask("queueMicrotask",c[0])}})}),Zone.__load_patch("timers",function(e){var r="set",t="clear";Oe(e,r,t,"Timeout"),Oe(e,r,t,"Interval"),Oe(e,r,t,"Immediate")}),Zone.__load_patch("requestAnimationFrame",function(e){Oe(e,"request","cancel","AnimationFrame"),Oe(e,"mozRequest","mozCancel","AnimationFrame"),Oe(e,"webkitRequest","webkitCancel","AnimationFrame")}),Zone.__load_patch("blocking",function(e,r){for(var t=["alert","prompt","confirm"],n=0;n<t.length;n++)_e(e,t[n],function(c,f,d){return function(E,T){return r.current.run(c,e,T,d)}})}),Zone.__load_patch("EventTarget",function(e,r,t){(function Qr(e,r){r.patchEventPrototype(e,r)})(e,t),function Jr(e,r){if(!Zone[r.symbol("patchEventTarget")]){for(var t=r.getGlobalObjects(),n=t.eventNames,u=t.zoneSymbolEventNames,c=t.TRUE_STR,f=t.FALSE_STR,d=t.ZONE_SYMBOL_PREFIX,E=0;E<n.length;E++){var T=n[E],g=d+(T+f),C=d+(T+c);u[T]={},u[T][f]=g,u[T][c]=C}var D=e.EventTarget;if(D&&D.prototype)return r.patchEventTarget(e,r,[D&&D.prototype]),!0}}(e,t);var n=e.XMLHttpRequestEventTarget;n&&n.prototype&&t.patchEventTarget(e,t,[n.prototype])}),Zone.__load_patch("MutationObserver",function(e,r,t){Me("MutationObserver"),Me("WebKitMutationObserver")}),Zone.__load_patch("IntersectionObserver",function(e,r,t){Me("IntersectionObserver")}),Zone.__load_patch("FileReader",function(e,r,t){Me("FileReader")}),Zone.__load_patch("on_property",function(e,r,t){Ir(t,e)}),Zone.__load_patch("customElements",function(e,r,t){!function Kr(e,r){var t=r.getGlobalObjects();(t.isBrowser||t.isMix)&&e.customElements&&"customElements"in e&&r.patchCallbacks(r,e.customElements,"customElements","define",["connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback"])}(e,t)}),Zone.__load_patch("XHR",function(e,r){!function E(T){var p=T.XMLHttpRequest;if(p){var m=p.prototype,C=m[We],D=m[ze];if(!C){var H=T.XMLHttpRequestEventTarget;if(H){var $=H.prototype;C=$[We],D=$[ze]}}var V="readystatechange",J="scheduled",x=_e(m,"open",function(){return function(O,N){return O[n]=0==N[2],O[f]=N[1],x.apply(O,N)}}),F=G("fetchTaskAborting"),k=G("fetchTaskScheduling"),z=_e(m,"send",function(){return function(O,N){if(!0===r.current[k]||O[n])return z.apply(O,N);var S={target:O,url:O[f],isPeriodic:!1,args:N,aborted:!1},X=Ye("XMLHttpRequest.send",b,S,A,U);O&&!0===O[d]&&!S.aborted&&X.state===J&&X.invoke()}}),Z=_e(m,"abort",function(){return function(O,N){var S=function g(O){return O[t]}(O);if(S&&"string"==typeof S.type){if(null==S.cancelFn||S.data&&S.data.aborted)return;S.zone.cancelTask(S)}else if(!0===r.current[F])return Z.apply(O,N)}})}function A(O){var N=O.data,S=N.target;S[c]=!1,S[d]=!1;var X=S[u];C||(C=S[We],D=S[ze]),X&&D.call(S,V,X);var W=S[u]=function(){if(S.readyState===S.DONE)if(!N.aborted&&S[c]&&O.state===J){var Q=S[r.__symbol__("loadfalse")];if(0!==S.status&&Q&&Q.length>0){var Y=O.invoke;O.invoke=function(){for(var v=S[r.__symbol__("loadfalse")],o=0;o<v.length;o++)v[o]===O&&v.splice(o,1);!N.aborted&&O.state===J&&Y.call(O)},Q.push(O)}else O.invoke()}else!N.aborted&&!1===S[c]&&(S[d]=!0)};return C.call(S,V,W),S[t]||(S[t]=O),z.apply(S,N.args),S[c]=!0,O}function b(){}function U(O){var N=O.data;return N.aborted=!0,Z.apply(N.target,N.args)}}(e);var t=G("xhrTask"),n=G("xhrSync"),u=G("xhrListener"),c=G("xhrScheduled"),f=G("xhrURL"),d=G("xhrErrorBeforeScheduled")}),Zone.__load_patch("geolocation",function(e){e.navigator&&e.navigator.geolocation&&function wr(e,r){for(var t=e.constructor.name,n=function(c){var T,p,f=r[c],d=e[f];if(d){if(!rr(le(e,f)))return"continue";e[f]=(p=function(){return T.apply(this,qe(arguments,t+"."+f))},pe(p,T=d),p)}},u=0;u<r.length;u++)n(u)}(e.navigator.geolocation,["getCurrentPosition","watchPosition"])}),Zone.__load_patch("PromiseRejectionEvent",function(e,r){function t(n){return function(u){vr(e,n).forEach(function(f){var d=e.PromiseRejectionEvent;if(d){var E=new d(n,{promise:u.promise,reason:u.rejection});f.invoke(E)}})}}e.PromiseRejectionEvent&&(r[G("unhandledPromiseRejectionHandler")]=t("unhandledrejection"),r[G("rejectionHandledHandler")]=t("rejectionhandled"))})},void 0!==(Le=ye.call(Ce,me,Ce,ke))&&(ke.exports=Le)},7435:(ke,Ce,me)=>{"use strict";me(16350),me(99140)},16350:()=>{}},ke=>{ke(ke.s=7435)}]);
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.4bd595c16d7c473d.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.4bd595c16d7c473d.js
deleted file mode 100644 (file)
index e5e4525..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{"use strict";var e,h={},v={};function r(e){var n=v[e];if(void 0!==n)return n.exports;var t=v[e]={id:e,loaded:!1,exports:{}};return h[e].call(t.exports,t,t.exports,r),t.loaded=!0,t.exports}r.m=h,e=[],r.O=(n,t,f,i)=>{if(!t){var a=1/0;for(o=0;o<e.length;o++){for(var[t,f,i]=e[o],l=!0,d=0;d<t.length;d++)(!1&i||a>=i)&&Object.keys(r.O).every(b=>r.O[b](t[d]))?t.splice(d--,1):(l=!1,i<a&&(a=i));if(l){e.splice(o--,1);var c=f();void 0!==c&&(n=c)}}return n}i=i||0;for(var o=e.length;o>0&&e[o-1][2]>i;o--)e[o]=e[o-1];e[o]=[t,f,i]},r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},(()=>{var n,e=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__;r.t=function(t,f){if(1&f&&(t=this(t)),8&f||"object"==typeof t&&t&&(4&f&&t.__esModule||16&f&&"function"==typeof t.then))return t;var i=Object.create(null);r.r(i);var o={};n=n||[null,e({}),e([]),e(e)];for(var a=2&f&&t;"object"==typeof a&&!~n.indexOf(a);a=e(a))Object.getOwnPropertyNames(a).forEach(l=>o[l]=()=>t[l]);return o.default=()=>t,r.d(i,o),i}})(),r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((n,t)=>(r.f[t](e,n),n),[])),r.u=e=>e+"."+{43:"cf51dac96ed4b14e",95:"1ae8f43a396d3fea",543:"eec5c8f9f29060da"}[e]+".js",r.miniCssF=e=>{},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e={},n="ceph-dashboard:";r.l=(t,f,i,o)=>{if(e[t])e[t].push(f);else{var a,l;if(void 0!==i)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var s=d[c];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==n+i){a=s;break}}a||(l=!0,(a=document.createElement("script")).type="module",a.charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",n+i),a.src=r.tu(t)),e[t]=[f];var u=(_,b)=>{a.onerror=a.onload=null,clearTimeout(p);var g=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),g&&g.forEach(y=>y(b)),_)return _(b)},p=setTimeout(u.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=u.bind(null,a.onerror),a.onload=u.bind(null,a.onload),l&&document.head.appendChild(a)}}})(),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:n=>n},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={666:0};r.f.j=(f,i)=>{var o=r.o(e,f)?e[f]:void 0;if(0!==o)if(o)i.push(o[2]);else if(666!=f){var a=new Promise((s,u)=>o=e[f]=[s,u]);i.push(o[2]=a);var l=r.p+r.u(f),d=new Error;r.l(l,s=>{if(r.o(e,f)&&(0!==(o=e[f])&&(e[f]=void 0),o)){var u=s&&("load"===s.type?"missing":s.type),p=s&&s.target&&s.target.src;d.message="Loading chunk "+f+" failed.\n("+u+": "+p+")",d.name="ChunkLoadError",d.type=u,d.request=p,o[1](d)}},"chunk-"+f,f)}else e[f]=0},r.O.j=f=>0===e[f];var n=(f,i)=>{var d,c,[o,a,l]=i,s=0;if(o.some(p=>0!==e[p])){for(d in a)r.o(a,d)&&(r.m[d]=a[d]);if(l)var u=l(r)}for(f&&f(i);s<o.length;s++)r.o(e,c=o[s])&&e[c]&&e[c][0](),e[c]=0;return r.O(u)},t=self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))})()})();
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.a53144ca583f6e2c.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/runtime.a53144ca583f6e2c.js
new file mode 100644 (file)
index 0000000..8b7fc82
--- /dev/null
@@ -0,0 +1 @@
+(()=>{"use strict";var e,h={},v={};function r(e){var n=v[e];if(void 0!==n)return n.exports;var t=v[e]={id:e,loaded:!1,exports:{}};return h[e].call(t.exports,t,t.exports,r),t.loaded=!0,t.exports}r.m=h,e=[],r.O=(n,t,f,i)=>{if(!t){var a=1/0;for(o=0;o<e.length;o++){for(var[t,f,i]=e[o],l=!0,d=0;d<t.length;d++)(!1&i||a>=i)&&Object.keys(r.O).every(b=>r.O[b](t[d]))?t.splice(d--,1):(l=!1,i<a&&(a=i));if(l){e.splice(o--,1);var c=f();void 0!==c&&(n=c)}}return n}i=i||0;for(var o=e.length;o>0&&e[o-1][2]>i;o--)e[o]=e[o-1];e[o]=[t,f,i]},r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},(()=>{var n,e=Object.getPrototypeOf?t=>Object.getPrototypeOf(t):t=>t.__proto__;r.t=function(t,f){if(1&f&&(t=this(t)),8&f||"object"==typeof t&&t&&(4&f&&t.__esModule||16&f&&"function"==typeof t.then))return t;var i=Object.create(null);r.r(i);var o={};n=n||[null,e({}),e([]),e(e)];for(var a=2&f&&t;"object"==typeof a&&!~n.indexOf(a);a=e(a))Object.getOwnPropertyNames(a).forEach(l=>o[l]=()=>t[l]);return o.default=()=>t,r.d(i,o),i}})(),r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((n,t)=>(r.f[t](e,n),n),[])),r.u=e=>e+"."+{25:"9d84971ea743706b",119:"066087561586659c",803:"08339784f3bb5d16"}[e]+".js",r.miniCssF=e=>{},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),(()=>{var e={},n="ceph-dashboard:";r.l=(t,f,i,o)=>{if(e[t])e[t].push(f);else{var a,l;if(void 0!==i)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var s=d[c];if(s.getAttribute("src")==t||s.getAttribute("data-webpack")==n+i){a=s;break}}a||(l=!0,(a=document.createElement("script")).type="module",a.charset="utf-8",a.timeout=120,r.nc&&a.setAttribute("nonce",r.nc),a.setAttribute("data-webpack",n+i),a.src=r.tu(t)),e[t]=[f];var u=(_,b)=>{a.onerror=a.onload=null,clearTimeout(p);var g=e[t];if(delete e[t],a.parentNode&&a.parentNode.removeChild(a),g&&g.forEach(y=>y(b)),_)return _(b)},p=setTimeout(u.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=u.bind(null,a.onerror),a.onload=u.bind(null,a.onload),l&&document.head.appendChild(a)}}})(),r.r=e=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:n=>n},typeof trustedTypes<"u"&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("angular#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="",(()=>{var e={666:0};r.f.j=(f,i)=>{var o=r.o(e,f)?e[f]:void 0;if(0!==o)if(o)i.push(o[2]);else if(666!=f){var a=new Promise((s,u)=>o=e[f]=[s,u]);i.push(o[2]=a);var l=r.p+r.u(f),d=new Error;r.l(l,s=>{if(r.o(e,f)&&(0!==(o=e[f])&&(e[f]=void 0),o)){var u=s&&("load"===s.type?"missing":s.type),p=s&&s.target&&s.target.src;d.message="Loading chunk "+f+" failed.\n("+u+": "+p+")",d.name="ChunkLoadError",d.type=u,d.request=p,o[1](d)}},"chunk-"+f,f)}else e[f]=0},r.O.j=f=>0===e[f];var n=(f,i)=>{var d,c,[o,a,l]=i,s=0;if(o.some(p=>0!==e[p])){for(d in a)r.o(a,d)&&(r.m[d]=a[d]);if(l)var u=l(r)}for(f&&f(i);s<o.length;s++)r.o(e,c=o[s])&&e[c]&&e[c][0](),e[c]=0;return r.O(u)},t=self.webpackChunkceph_dashboard=self.webpackChunkceph_dashboard||[];t.forEach(n.bind(null,0)),t.push=n.bind(null,t.push.bind(t))})()})();
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.177a7ad3f45b4499.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.177a7ad3f45b4499.js
new file mode 100644 (file)
index 0000000..ab26f34
--- /dev/null
@@ -0,0 +1 @@
+!function(St,Dt){"object"==typeof exports&&typeof module<"u"?module.exports=Dt():"function"==typeof define&&define.amd?define(Dt):(St=St||self).Chart=Dt()}(this,function(){"use strict";function za(e,t){return e(t={exports:{}},t.exports),t.exports}typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"&&self;var Xe={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},K=za(function(e){var t={};for(var r in Xe)Xe.hasOwnProperty(r)&&(t[Xe[r]]=r);var a=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var n in a)if(a.hasOwnProperty(n)){if(!("channels"in a[n]))throw new Error("missing channels property: "+n);if(!("labels"in a[n]))throw new Error("missing channel labels property: "+n);if(a[n].labels.length!==a[n].channels)throw new Error("channel and label counts mismatch: "+n);var o=a[n].channels,s=a[n].labels;delete a[n].channels,delete a[n].labels,Object.defineProperty(a[n],"channels",{value:o}),Object.defineProperty(a[n],"labels",{value:s})}function d(l,f){return Math.pow(l[0]-f[0],2)+Math.pow(l[1]-f[1],2)+Math.pow(l[2]-f[2],2)}a.rgb.hsl=function(l){var w,M,f=l[0]/255,c=l[1]/255,v=l[2]/255,p=Math.min(f,c,v),y=Math.max(f,c,v),_=y-p;return y===p?w=0:f===y?w=(c-v)/_:c===y?w=2+(v-f)/_:v===y&&(w=4+(f-c)/_),(w=Math.min(60*w,360))<0&&(w+=360),M=(p+y)/2,[w,100*(y===p?0:M<=.5?_/(y+p):_/(2-y-p)),100*M]},a.rgb.hsv=function(l){var f,c,v,p,y,_=l[0]/255,w=l[1]/255,x=l[2]/255,M=Math.max(_,w,x),T=M-Math.min(_,w,x),C=function(I){return(M-I)/6/T+.5};return 0===T?p=y=0:(y=T/M,f=C(_),c=C(w),v=C(x),_===M?p=v-c:w===M?p=1/3+f-v:x===M&&(p=2/3+c-f),p<0?p+=1:p>1&&(p-=1)),[360*p,100*y,100*M]},a.rgb.hwb=function(l){var f=l[0],c=l[1],v=l[2];return[a.rgb.hsl(l)[0],1/255*Math.min(f,Math.min(c,v))*100,100*(v=1-1/255*Math.max(f,Math.max(c,v)))]},a.rgb.cmyk=function(l){var w,f=l[0]/255,c=l[1]/255,v=l[2]/255;return[100*((1-f-(w=Math.min(1-f,1-c,1-v)))/(1-w)||0),100*((1-c-w)/(1-w)||0),100*((1-v-w)/(1-w)||0),100*w]},a.rgb.keyword=function(l){var f=t[l];if(f)return f;var v,c=1/0;for(var p in Xe)if(Xe.hasOwnProperty(p)){var _=d(l,Xe[p]);_<c&&(c=_,v=p)}return v},a.keyword.rgb=function(l){return Xe[l]},a.rgb.xyz=function(l){var f=l[0]/255,c=l[1]/255,v=l[2]/255;return[100*(.4124*(f=f>.04045?Math.pow((f+.055)/1.055,2.4):f/12.92)+.3576*(c=c>.04045?Math.pow((c+.055)/1.055,2.4):c/12.92)+.1805*(v=v>.04045?Math.pow((v+.055)/1.055,2.4):v/12.92)),100*(.2126*f+.7152*c+.0722*v),100*(.0193*f+.1192*c+.9505*v)]},a.rgb.lab=function(l){var f=a.rgb.xyz(l),c=f[0],v=f[1],p=f[2];return v/=100,p/=108.883,c=(c/=95.047)>.008856?Math.pow(c,1/3):7.787*c+16/116,[116*(v=v>.008856?Math.pow(v,1/3):7.787*v+16/116)-16,500*(c-v),200*(v-(p=p>.008856?Math.pow(p,1/3):7.787*p+16/116))]},a.hsl.rgb=function(l){var p,y,_,w,x,f=l[0]/360,c=l[1]/100,v=l[2]/100;if(0===c)return[x=255*v,x,x];p=2*v-(y=v<.5?v*(1+c):v+c-v*c),w=[0,0,0];for(var M=0;M<3;M++)(_=f+1/3*-(M-1))<0&&_++,_>1&&_--,w[M]=255*(x=6*_<1?p+6*(y-p)*_:2*_<1?y:3*_<2?p+(y-p)*(2/3-_)*6:p);return w},a.hsl.hsv=function(l){var f=l[0],c=l[1]/100,v=l[2]/100,p=c,y=Math.max(v,.01);return c*=(v*=2)<=1?v:2-v,p*=y<=1?y:2-y,[f,100*(0===v?2*p/(y+p):2*c/(v+c)),(v+c)/2*100]},a.hsv.rgb=function(l){var f=l[0]/60,c=l[1]/100,v=l[2]/100,p=Math.floor(f)%6,y=f-Math.floor(f),_=255*v*(1-c),w=255*v*(1-c*y),x=255*v*(1-c*(1-y));switch(v*=255,p){case 0:return[v,x,_];case 1:return[w,v,_];case 2:return[_,v,x];case 3:return[_,w,v];case 4:return[x,_,v];case 5:return[v,_,w]}},a.hsv.hsl=function(l){var y,_,w,f=l[0],c=l[1]/100,v=l[2]/100,p=Math.max(v,.01);return w=(2-c)*v,_=c*p,[f,100*(_=(_/=(y=(2-c)*p)<=1?y:2-y)||0),100*(w/=2)]},a.hwb.rgb=function(l){var y,_,w,x,M,T,C,f=l[0]/360,c=l[1]/100,v=l[2]/100,p=c+v;switch(p>1&&(c/=p,v/=p),w=6*f-(y=Math.floor(6*f)),1&y&&(w=1-w),x=c+w*((_=1-v)-c),y){default:case 6:case 0:M=_,T=x,C=c;break;case 1:M=x,T=_,C=c;break;case 2:M=c,T=_,C=x;break;case 3:M=c,T=x,C=_;break;case 4:M=x,T=c,C=_;break;case 5:M=_,T=c,C=x}return[255*M,255*T,255*C]},a.cmyk.rgb=function(l){var c=l[1]/100,v=l[2]/100,p=l[3]/100;return[255*(1-Math.min(1,l[0]/100*(1-p)+p)),255*(1-Math.min(1,c*(1-p)+p)),255*(1-Math.min(1,v*(1-p)+p))]},a.xyz.rgb=function(l){var p,y,_,f=l[0]/100,c=l[1]/100,v=l[2]/100;return y=-.9689*f+1.8758*c+.0415*v,_=.0557*f+-.204*c+1.057*v,p=(p=3.2406*f+-1.5372*c+-.4986*v)>.0031308?1.055*Math.pow(p,1/2.4)-.055:12.92*p,y=y>.0031308?1.055*Math.pow(y,1/2.4)-.055:12.92*y,_=_>.0031308?1.055*Math.pow(_,1/2.4)-.055:12.92*_,[255*(p=Math.min(Math.max(0,p),1)),255*(y=Math.min(Math.max(0,y),1)),255*(_=Math.min(Math.max(0,_),1))]},a.xyz.lab=function(l){var f=l[0],c=l[1],v=l[2];return c/=100,v/=108.883,f=(f/=95.047)>.008856?Math.pow(f,1/3):7.787*f+16/116,[116*(c=c>.008856?Math.pow(c,1/3):7.787*c+16/116)-16,500*(f-c),200*(c-(v=v>.008856?Math.pow(v,1/3):7.787*v+16/116))]},a.lab.xyz=function(l){var p,y,_;p=l[1]/500+(y=(l[0]+16)/116),_=y-l[2]/200;var w=Math.pow(y,3),x=Math.pow(p,3),M=Math.pow(_,3);return y=w>.008856?w:(y-16/116)/7.787,p=x>.008856?x:(p-16/116)/7.787,_=M>.008856?M:(_-16/116)/7.787,[p*=95.047,y*=100,_*=108.883]},a.lab.lch=function(l){var y,f=l[0],c=l[1],v=l[2];return(y=360*Math.atan2(v,c)/2/Math.PI)<0&&(y+=360),[f,Math.sqrt(c*c+v*v),y]},a.lch.lab=function(l){var _,c=l[1];return _=l[2]/360*2*Math.PI,[l[0],c*Math.cos(_),c*Math.sin(_)]},a.rgb.ansi16=function(l){var f=l[0],c=l[1],v=l[2],p=1 in arguments?arguments[1]:a.rgb.hsv(l)[2];if(0===(p=Math.round(p/50)))return 30;var y=30+(Math.round(v/255)<<2|Math.round(c/255)<<1|Math.round(f/255));return 2===p&&(y+=60),y},a.hsv.ansi16=function(l){return a.rgb.ansi16(a.hsv.rgb(l),l[2])},a.rgb.ansi256=function(l){var f=l[0],c=l[1],v=l[2];return f===c&&c===v?f<8?16:f>248?231:Math.round((f-8)/247*24)+232:16+36*Math.round(f/255*5)+6*Math.round(c/255*5)+Math.round(v/255*5)},a.ansi16.rgb=function(l){var f=l%10;if(0===f||7===f)return l>50&&(f+=3.5),[f=f/10.5*255,f,f];var c=.5*(1+~~(l>50));return[(1&f)*c*255,(f>>1&1)*c*255,(f>>2&1)*c*255]},a.ansi256.rgb=function(l){if(l>=232){var f=10*(l-232)+8;return[f,f,f]}var c;return l-=16,[Math.floor(l/36)/5*255,Math.floor((c=l%36)/6)/5*255,c%6/5*255]},a.rgb.hex=function(l){var c=(((255&Math.round(l[0]))<<16)+((255&Math.round(l[1]))<<8)+(255&Math.round(l[2]))).toString(16).toUpperCase();return"000000".substring(c.length)+c},a.hex.rgb=function(l){var f=l.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!f)return[0,0,0];var c=f[0];3===f[0].length&&(c=c.split("").map(function(w){return w+w}).join(""));var v=parseInt(c,16);return[v>>16&255,v>>8&255,255&v]},a.rgb.hcg=function(l){var x,f=l[0]/255,c=l[1]/255,v=l[2]/255,p=Math.max(Math.max(f,c),v),y=Math.min(Math.min(f,c),v),_=p-y;return x=_<=0?0:p===f?(c-v)/_%6:p===c?2+(v-f)/_:4+(f-c)/_+4,x/=6,[360*(x%=1),100*_,100*(_<1?y/(1-_):0)]},a.hsl.hcg=function(l){var v,f=l[1]/100,c=l[2]/100,p=0;return(v=c<.5?2*f*c:2*f*(1-c))<1&&(p=(c-.5*v)/(1-v)),[l[0],100*v,100*p]},a.hsv.hcg=function(l){var c=l[2]/100,v=l[1]/100*c,p=0;return v<1&&(p=(c-v)/(1-v)),[l[0],100*v,100*p]},a.hcg.rgb=function(l){var c=l[1]/100,v=l[2]/100;if(0===c)return[255*v,255*v,255*v];var x,p=[0,0,0],y=l[0]/360%1*6,_=y%1,w=1-_;switch(Math.floor(y)){case 0:p[0]=1,p[1]=_,p[2]=0;break;case 1:p[0]=w,p[1]=1,p[2]=0;break;case 2:p[0]=0,p[1]=1,p[2]=_;break;case 3:p[0]=0,p[1]=w,p[2]=1;break;case 4:p[0]=_,p[1]=0,p[2]=1;break;default:p[0]=1,p[1]=0,p[2]=w}return[255*(c*p[0]+(x=(1-c)*v)),255*(c*p[1]+x),255*(c*p[2]+x)]},a.hcg.hsv=function(l){var f=l[1]/100,v=f+l[2]/100*(1-f),p=0;return v>0&&(p=f/v),[l[0],100*p,100*v]},a.hcg.hsl=function(l){var f=l[1]/100,v=l[2]/100*(1-f)+.5*f,p=0;return v>0&&v<.5?p=f/(2*v):v>=.5&&v<1&&(p=f/(2*(1-v))),[l[0],100*p,100*v]},a.hcg.hwb=function(l){var f=l[1]/100,v=f+l[2]/100*(1-f);return[l[0],100*(v-f),100*(1-v)]},a.hwb.hcg=function(l){var v=1-l[2]/100,p=v-l[1]/100,y=0;return p<1&&(y=(v-p)/(1-p)),[l[0],100*p,100*y]},a.apple.rgb=function(l){return[l[0]/65535*255,l[1]/65535*255,l[2]/65535*255]},a.rgb.apple=function(l){return[l[0]/255*65535,l[1]/255*65535,l[2]/255*65535]},a.gray.rgb=function(l){return[l[0]/100*255,l[0]/100*255,l[0]/100*255]},a.gray.hsl=a.gray.hsv=function(l){return[0,0,l[0]]},a.gray.hwb=function(l){return[0,100,l[0]]},a.gray.cmyk=function(l){return[0,0,0,l[0]]},a.gray.lab=function(l){return[l[0],0,0]},a.gray.hex=function(l){var f=255&Math.round(l[0]/100*255),v=((f<<16)+(f<<8)+f).toString(16).toUpperCase();return"000000".substring(v.length)+v},a.rgb.gray=function(l){return[(l[0]+l[1]+l[2])/3/255*100]}});function Vi(e,t){return function(r){return t(e(r))}}function Ui(e,t){for(var r=[t[e].parent,e],a=K[t[e].parent][e],n=t[e].parent;t[n].parent;)r.unshift(t[n].parent),a=Vi(K[t[n].parent][n],a),n=t[n].parent;return a.conversion=r,a}var ft={};Object.keys(K).forEach(function(e){ft[e]={},Object.defineProperty(ft[e],"channels",{value:K[e].channels}),Object.defineProperty(ft[e],"labels",{value:K[e].labels});var t=function(e){for(var t=function Hi(e){var t=function Bi(){for(var e={},t=Object.keys(K),r=t.length,a=0;a<r;a++)e[t[a]]={distance:-1,parent:null};return e}(),r=[e];for(t[e].distance=0;r.length;)for(var a=r.pop(),n=Object.keys(K[a]),o=n.length,s=0;s<o;s++){var d=n[s],l=t[d];-1===l.distance&&(l.distance=t[a].distance+1,l.parent=a,r.unshift(d))}return t}(e),r={},a=Object.keys(t),n=a.length,o=0;o<n;o++){var s=a[o];null!==t[s].parent&&(r[s]=Ui(s,t))}return r}(e);Object.keys(t).forEach(function(a){var n=t[a];ft[e][a]=function qi(e){var t=function(r){if(null==r)return r;arguments.length>1&&(r=Array.prototype.slice.call(arguments));var a=e(r);if("object"==typeof a)for(var n=a.length,o=0;o<n;o++)a[o]=Math.round(a[o]);return a};return"conversion"in e&&(t.conversion=e.conversion),t}(n),ft[e][a].raw=function $i(e){var t=function(r){return null==r?r:(arguments.length>1&&(r=Array.prototype.slice.call(arguments)),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}(n)})});var Zi=ft,Fr={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_e={getRgba:Ar,getHsla:Ir,getRgb:function Xi(e){var t=Ar(e);return t&&t.slice(0,3)},getHsl:function Ki(e){var t=Ir(e);return t&&t.slice(0,3)},getHwb:Ba,getAlpha:function Ji(e){var t=Ar(e);return t||(t=Ir(e))||(t=Ba(e))?t[3]:void 0},hexString:function Qi(e,r){return r=void 0!==r&&3===e.length?r:e[3],"#"+Xt(e[0])+Xt(e[1])+Xt(e[2])+(r>=0&&r<1?Xt(Math.round(255*r)):"")},rgbString:function eo(e,t){return t<1||e[3]&&e[3]<1?Ha(e,t):"rgb("+e[0]+", "+e[1]+", "+e[2]+")"},rgbaString:Ha,percentString:function to(e,t){return t<1||e[3]&&e[3]<1?Va(e,t):"rgb("+Math.round(e[0]/255*100)+"%, "+Math.round(e[1]/255*100)+"%, "+Math.round(e[2]/255*100)+"%)"},percentaString:Va,hslString:function ro(e,t){return t<1||e[3]&&e[3]<1?Ua(e,t):"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)"},hslaString:Ua,hwbString:function ao(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+(void 0!==t&&1!==t?", "+t:"")+")"},keyword:function no(e){return ja[e.slice(0,3)]}};function Ar(e){if(e){var s=[0,0,0],d=1,l=e.match(/^#([a-fA-F0-9]{3,4})$/i),f="";if(l){f=(l=l[1])[3];for(var c=0;c<s.length;c++)s[c]=parseInt(l[c]+l[c],16);f&&(d=Math.round(parseInt(f+f,16)/255*100)/100)}else if(l=e.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){for(f=l[2],l=l[1],c=0;c<s.length;c++)s[c]=parseInt(l.slice(2*c,2*c+2),16);f&&(d=Math.round(parseInt(f,16)/255*100)/100)}else if(l=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(c=0;c<s.length;c++)s[c]=parseInt(l[c+1]);d=parseFloat(l[4])}else if(l=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(c=0;c<s.length;c++)s[c]=Math.round(2.55*parseFloat(l[c+1]));d=parseFloat(l[4])}else if(l=e.match(/(\w+)/)){if("transparent"==l[1])return[0,0,0,0];if(!(s=Fr[l[1]]))return}for(c=0;c<s.length;c++)s[c]=Se(s[c],0,255);return d=d||0==d?Se(d,0,1):1,s[3]=d,s}}function Ir(e){if(e){var r=e.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(r){var a=parseFloat(r[4]);return[Se(parseInt(r[1]),0,360),Se(parseFloat(r[2]),0,100),Se(parseFloat(r[3]),0,100),Se(isNaN(a)?1:a,0,1)]}}}function Ba(e){if(e){var r=e.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(r){var a=parseFloat(r[4]);return[Se(parseInt(r[1]),0,360),Se(parseFloat(r[2]),0,100),Se(parseFloat(r[3]),0,100),Se(isNaN(a)?1:a,0,1)]}}}function Ha(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"rgba("+e[0]+", "+e[1]+", "+e[2]+", "+t+")"}function Va(e,t){return"rgba("+Math.round(e[0]/255*100)+"%, "+Math.round(e[1]/255*100)+"%, "+Math.round(e[2]/255*100)+"%, "+(t||e[3]||1)+")"}function Ua(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+t+")"}function Se(e,t,r){return Math.min(Math.max(t,e),r)}function Xt(e){var t=e.toString(16).toUpperCase();return t.length<2?"0"+t:t}var ja={};for(var Ga in Fr)ja[Fr[Ga]]=Ga;var he=function(e){return e instanceof he?e:this instanceof he?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof e?(t=_e.getRgba(e))?this.setValues("rgb",t):(t=_e.getHsla(e))?this.setValues("hsl",t):(t=_e.getHwb(e))&&this.setValues("hwb",t):"object"==typeof e&&(void 0!==(t=e).r||void 0!==t.red?this.setValues("rgb",t):void 0!==t.l||void 0!==t.lightness?this.setValues("hsl",t):void 0!==t.v||void 0!==t.value?this.setValues("hsv",t):void 0!==t.w||void 0!==t.whiteness?this.setValues("hwb",t):(void 0!==t.c||void 0!==t.cyan)&&this.setValues("cmyk",t)))):new he(e);var t};he.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var e=this.values;return 1!==e.alpha?e.hwb.concat([e.alpha]):e.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var e=this.values;return e.rgb.concat([e.alpha])},hslaArray:function(){var e=this.values;return e.hsl.concat([e.alpha])},alpha:function(e){return void 0===e?this.values.alpha:(this.setValues("alpha",e),this)},red:function(e){return this.setChannel("rgb",0,e)},green:function(e){return this.setChannel("rgb",1,e)},blue:function(e){return this.setChannel("rgb",2,e)},hue:function(e){return e&&(e=(e%=360)<0?360+e:e),this.setChannel("hsl",0,e)},saturation:function(e){return this.setChannel("hsl",1,e)},lightness:function(e){return this.setChannel("hsl",2,e)},saturationv:function(e){return this.setChannel("hsv",1,e)},whiteness:function(e){return this.setChannel("hwb",1,e)},blackness:function(e){return this.setChannel("hwb",2,e)},value:function(e){return this.setChannel("hsv",2,e)},cyan:function(e){return this.setChannel("cmyk",0,e)},magenta:function(e){return this.setChannel("cmyk",1,e)},yellow:function(e){return this.setChannel("cmyk",2,e)},black:function(e){return this.setChannel("cmyk",3,e)},hexString:function(){return _e.hexString(this.values.rgb)},rgbString:function(){return _e.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return _e.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return _e.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return _e.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return _e.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return _e.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return _e.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var e=this.values.rgb;return e[0]<<16|e[1]<<8|e[2]},luminosity:function(){for(var e=this.values.rgb,t=[],r=0;r<e.length;r++){var a=e[r]/255;t[r]=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4)}return.2126*t[0]+.7152*t[1]+.0722*t[2]},contrast:function(e){var t=this.luminosity(),r=e.luminosity();return t>r?(t+.05)/(r+.05):(r+.05)/(t+.05)},level:function(e){var t=this.contrast(e);return t>=7.1?"AAA":t>=4.5?"AA":""},dark:function(){var e=this.values.rgb;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var e=[],t=0;t<3;t++)e[t]=255-this.values.rgb[t];return this.setValues("rgb",e),this},lighten:function(e){var t=this.values.hsl;return t[2]+=t[2]*e,this.setValues("hsl",t),this},darken:function(e){var t=this.values.hsl;return t[2]-=t[2]*e,this.setValues("hsl",t),this},saturate:function(e){var t=this.values.hsl;return t[1]+=t[1]*e,this.setValues("hsl",t),this},desaturate:function(e){var t=this.values.hsl;return t[1]-=t[1]*e,this.setValues("hsl",t),this},whiten:function(e){var t=this.values.hwb;return t[1]+=t[1]*e,this.setValues("hwb",t),this},blacken:function(e){var t=this.values.hwb;return t[2]+=t[2]*e,this.setValues("hwb",t),this},greyscale:function(){var e=this.values.rgb,t=.3*e[0]+.59*e[1]+.11*e[2];return this.setValues("rgb",[t,t,t]),this},clearer:function(e){var t=this.values.alpha;return this.setValues("alpha",t-t*e),this},opaquer:function(e){var t=this.values.alpha;return this.setValues("alpha",t+t*e),this},rotate:function(e){var t=this.values.hsl,r=(t[0]+e)%360;return t[0]=r<0?360+r:r,this.setValues("hsl",t),this},mix:function(e,t){var r=this,a=e,n=void 0===t?.5:t,o=2*n-1,s=r.alpha()-a.alpha(),d=((o*s==-1?o:(o+s)/(1+o*s))+1)/2,l=1-d;return this.rgb(d*r.red()+l*a.red(),d*r.green()+l*a.green(),d*r.blue()+l*a.blue()).alpha(r.alpha()*n+a.alpha()*(1-n))},toJSON:function(){return this.rgb()},clone:function(){var a,n,e=new he,t=this.values,r=e.values;for(var o in t)t.hasOwnProperty(o)&&("[object Array]"===(n={}.toString.call(a=t[o]))?r[o]=a.slice(0):"[object Number]"===n?r[o]=a:console.error("unexpected color value:",a));return e}},he.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},he.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},he.prototype.getValues=function(e){for(var t=this.values,r={},a=0;a<e.length;a++)r[e.charAt(a)]=t[e][a];return 1!==t.alpha&&(r.a=t.alpha),r},he.prototype.setValues=function(e,t){var s,l,r=this.values,a=this.spaces,n=this.maxes,o=1;if(this.valid=!0,"alpha"===e)o=t;else if(t.length)r[e]=t.slice(0,e.length),o=t[e.length];else if(void 0!==t[e.charAt(0)]){for(s=0;s<e.length;s++)r[e][s]=t[e.charAt(s)];o=t.a}else if(void 0!==t[a[e][0]]){var d=a[e];for(s=0;s<e.length;s++)r[e][s]=t[d[s]];o=t.alpha}if(r.alpha=Math.max(0,Math.min(1,void 0===o?r.alpha:o)),"alpha"===e)return!1;for(s=0;s<e.length;s++)l=Math.max(0,Math.min(n[e][s],r[e][s])),r[e][s]=Math.round(l);for(var f in a)f!==e&&(r[f]=Zi[e][f](r[e]));return!0},he.prototype.setSpace=function(e,t){var r=t[0];return void 0===r?this.getValues(e):("number"==typeof r&&(r=Array.prototype.slice.call(t)),this.setValues(e,r),this)},he.prototype.setChannel=function(e,t,r){var a=this.values[e];return void 0===r?a[t]:(r===a[t]||(a[t]=r,this.setValues(e,a)),this)},typeof window<"u"&&(window.Color=he);var Kt=he;function $a(e){return-1===["__proto__","prototype","constructor"].indexOf(e)}var e,B={noop:function(){},uid:(e=0,function(){return e++}),isNullOrUndef:function(e){return null===e||typeof e>"u"},isArray:function(e){if(Array.isArray&&Array.isArray(e))return!0;var t=Object.prototype.toString.call(e);return"[object"===t.substr(0,7)&&"Array]"===t.substr(-6)},isObject:function(e){return null!==e&&"[object Object]"===Object.prototype.toString.call(e)},isFinite:function(e){return("number"==typeof e||e instanceof Number)&&isFinite(e)},valueOrDefault:function(e,t){return typeof e>"u"?t:e},valueAtIndexOrDefault:function(e,t,r){return B.valueOrDefault(B.isArray(e)?e[t]:e,r)},callback:function(e,t,r){if(e&&"function"==typeof e.call)return e.apply(r,t)},each:function(e,t,r,a){var n,o,s;if(B.isArray(e))if(o=e.length,a)for(n=o-1;n>=0;n--)t.call(r,e[n],n);else for(n=0;n<o;n++)t.call(r,e[n],n);else if(B.isObject(e))for(o=(s=Object.keys(e)).length,n=0;n<o;n++)t.call(r,e[s[n]],s[n])},arrayEquals:function(e,t){var r,a,n,o;if(!e||!t||e.length!==t.length)return!1;for(r=0,a=e.length;r<a;++r)if(o=t[r],(n=e[r])instanceof Array&&o instanceof Array){if(!B.arrayEquals(n,o))return!1}else if(n!==o)return!1;return!0},clone:function(e){if(B.isArray(e))return e.map(B.clone);if(B.isObject(e)){for(var t=Object.create(e),r=Object.keys(e),a=r.length,n=0;n<a;++n)t[r[n]]=B.clone(e[r[n]]);return t}return e},_merger:function(e,t,r,a){if($a(e)){var n=t[e],o=r[e];B.isObject(n)&&B.isObject(o)?B.merge(n,o,a):t[e]=B.clone(o)}},_mergerIf:function(e,t,r){if($a(e)){var a=t[e],n=r[e];B.isObject(a)&&B.isObject(n)?B.mergeIf(a,n):t.hasOwnProperty(e)||(t[e]=B.clone(n))}},merge:function(e,t,r){var o,s,d,l,f,a=B.isArray(t)?t:[t],n=a.length;if(!B.isObject(e))return e;for(o=(r=r||{}).merger||B._merger,s=0;s<n;++s)if(B.isObject(t=a[s]))for(f=0,l=(d=Object.keys(t)).length;f<l;++f)o(d[f],e,t,r);return e},mergeIf:function(e,t){return B.merge(e,t,{merger:B._mergerIf})},extend:Object.assign||function(e){return B.merge(e,[].slice.call(arguments,1),{merger:function(t,r,a){r[t]=a[t]}})},inherits:function(e){var t=this,r=e&&e.hasOwnProperty("constructor")?e.constructor:function(){return t.apply(this,arguments)},a=function(){this.constructor=r};return a.prototype=t.prototype,r.prototype=new a,r.extend=B.inherits,e&&B.extend(r.prototype,e),r.__super__=t.prototype,r},_deprecated:function(e,t,r,a){void 0!==t&&console.warn(e+': "'+r+'" is deprecated. Please use "'+a+'" instead')}},ve=B;B.callCallback=B.callback,B.indexOf=function(e,t,r){return Array.prototype.indexOf.call(e,t,r)},B.getValueOrDefault=B.valueOrDefault,B.getValueAtIndexOrDefault=B.valueAtIndexOrDefault;var Tt={linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return-e*(e-2)},easeInOutQuad:function(e){return(e/=.5)<1?.5*e*e:-.5*(--e*(e-2)-1)},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return(e-=1)*e*e+1},easeInOutCubic:function(e){return(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return-((e-=1)*e*e*e-1)},easeInOutQuart:function(e){return(e/=.5)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return(e-=1)*e*e*e*e+1},easeInOutQuint:function(e){return(e/=.5)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},easeInSine:function(e){return 1-Math.cos(e*(Math.PI/2))},easeOutSine:function(e){return Math.sin(e*(Math.PI/2))},easeInOutSine:function(e){return-.5*(Math.cos(Math.PI*e)-1)},easeInExpo:function(e){return 0===e?0:Math.pow(2,10*(e-1))},easeOutExpo:function(e){return 1===e?1:1-Math.pow(2,-10*e)},easeInOutExpo:function(e){return 0===e?0:1===e?1:(e/=.5)<1?.5*Math.pow(2,10*(e-1)):.5*(2-Math.pow(2,-10*--e))},easeInCirc:function(e){return e>=1?e:-(Math.sqrt(1-e*e)-1)},easeOutCirc:function(e){return Math.sqrt(1-(e-=1)*e)},easeInOutCirc:function(e){return(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},easeInElastic:function(e){var t=1.70158,r=0,a=1;return 0===e?0:1===e?1:(r||(r=.3),a<1?(a=1,t=r/4):t=r/(2*Math.PI)*Math.asin(1/a),-a*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/r))},easeOutElastic:function(e){var t=1.70158,r=0,a=1;return 0===e?0:1===e?1:(r||(r=.3),a<1?(a=1,t=r/4):t=r/(2*Math.PI)*Math.asin(1/a),a*Math.pow(2,-10*e)*Math.sin((e-t)*(2*Math.PI)/r)+1)},easeInOutElastic:function(e){var t=1.70158,r=0,a=1;return 0===e?0:2==(e/=.5)?1:(r||(r=.45),a<1?(a=1,t=r/4):t=r/(2*Math.PI)*Math.asin(1/a),e<1?a*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/r)*-.5:a*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/r)*.5+1)},easeInBack:function(e){var t=1.70158;return e*e*((t+1)*e-t)},easeOutBack:function(e){var t=1.70158;return(e-=1)*e*((t+1)*e+t)+1},easeInOutBack:function(e){var t=1.70158;return(e/=.5)<1?e*e*((1+(t*=1.525))*e-t)*.5:.5*((e-=2)*e*((1+(t*=1.525))*e+t)+2)},easeInBounce:function(e){return 1-Tt.easeOutBounce(1-e)},easeOutBounce:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},easeInOutBounce:function(e){return e<.5?.5*Tt.easeInBounce(2*e):.5*Tt.easeOutBounce(2*e-1)+.5}},io={effects:Tt};ve.easingEffects=Tt;var oe=Math.PI,oo=oe/180,so=2*oe,ge=oe/2,Ct=oe/4,qa=2*oe/3,Jt={clear:function(e){e.ctx.clearRect(0,0,e.width,e.height)},roundedRect:function(e,t,r,a,n,o){if(o){var s=Math.min(o,n/2,a/2),d=t+s,l=r+s,f=t+a-s,c=r+n-s;e.moveTo(t,l),d<f&&l<c?(e.arc(d,l,s,-oe,-ge),e.arc(f,l,s,-ge,0),e.arc(f,c,s,0,ge),e.arc(d,c,s,ge,oe)):d<f?(e.moveTo(d,r),e.arc(f,l,s,-ge,ge),e.arc(d,l,s,ge,oe+ge)):l<c?(e.arc(d,l,s,-oe,0),e.arc(d,c,s,0,oe)):e.arc(d,l,s,-oe,oe),e.closePath(),e.moveTo(t,r)}else e.rect(t,r,a,n)},drawPoint:function(e,t,r,a,n,o){var s,d,l,f,c,v=(o||0)*oo;if(t&&"object"==typeof t&&("[object HTMLImageElement]"===(s=t.toString())||"[object HTMLCanvasElement]"===s))return e.save(),e.translate(a,n),e.rotate(v),e.drawImage(t,-t.width/2,-t.height/2,t.width,t.height),void e.restore();if(!(isNaN(r)||r<=0)){switch(e.beginPath(),t){default:e.arc(a,n,r,0,so),e.closePath();break;case"triangle":e.moveTo(a+Math.sin(v)*r,n-Math.cos(v)*r),v+=qa,e.lineTo(a+Math.sin(v)*r,n-Math.cos(v)*r),v+=qa,e.lineTo(a+Math.sin(v)*r,n-Math.cos(v)*r),e.closePath();break;case"rectRounded":f=r-(c=.516*r),d=Math.cos(v+Ct)*f,l=Math.sin(v+Ct)*f,e.arc(a-d,n-l,c,v-oe,v-ge),e.arc(a+l,n-d,c,v-ge,v),e.arc(a+d,n+l,c,v,v+ge),e.arc(a-l,n+d,c,v+ge,v+oe),e.closePath();break;case"rect":if(!o){f=Math.SQRT1_2*r,e.rect(a-f,n-f,2*f,2*f);break}v+=Ct;case"rectRot":d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+l,n-d),e.lineTo(a+d,n+l),e.lineTo(a-l,n+d),e.closePath();break;case"crossRot":v+=Ct;case"cross":d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+d,n+l),e.moveTo(a+l,n-d),e.lineTo(a-l,n+d);break;case"star":d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+d,n+l),e.moveTo(a+l,n-d),e.lineTo(a-l,n+d),v+=Ct,d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+d,n+l),e.moveTo(a+l,n-d),e.lineTo(a-l,n+d);break;case"line":d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+d,n+l);break;case"dash":e.moveTo(a,n),e.lineTo(a+Math.cos(v)*r,n+Math.sin(v)*r)}e.fill(),e.stroke()}},_isPointInArea:function(e,t){var r=1e-6;return e.x>t.left-r&&e.x<t.right+r&&e.y>t.top-r&&e.y<t.bottom+r},clipArea:function(e,t){e.save(),e.beginPath(),e.rect(t.left,t.top,t.right-t.left,t.bottom-t.top),e.clip()},unclipArea:function(e){e.restore()},lineTo:function(e,t,r,a){var n=r.steppedLine;if(n){if("middle"===n){var o=(t.x+r.x)/2;e.lineTo(o,a?r.y:t.y),e.lineTo(o,a?t.y:r.y)}else"after"===n&&!a||"after"!==n&&a?e.lineTo(t.x,r.y):e.lineTo(r.x,t.y);e.lineTo(r.x,r.y)}else r.tension?e.bezierCurveTo(a?t.controlPointPreviousX:t.controlPointNextX,a?t.controlPointPreviousY:t.controlPointNextY,a?r.controlPointNextX:r.controlPointPreviousX,a?r.controlPointNextY:r.controlPointPreviousY,r.x,r.y):e.lineTo(r.x,r.y)}},lo=Jt;ve.clear=Jt.clear,ve.drawRoundedRectangle=function(e){e.beginPath(),Jt.roundedRect.apply(Jt,arguments)};var Za={_set:function(e,t){return ve.merge(this[e]||(this[e]={}),t)}};Za._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var F=Za,Qt=ve.valueOrDefault,fo={toLineHeight:function(e,t){var r=(""+e).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!r||"normal"===r[1])return 1.2*t;switch(e=+r[2],r[3]){case"px":return e;case"%":e/=100}return t*e},toPadding:function(e){var t,r,a,n;return ve.isObject(e)?(t=+e.top||0,r=+e.right||0,a=+e.bottom||0,n=+e.left||0):t=r=a=n=+e||0,{top:t,right:r,bottom:a,left:n,height:t+a,width:n+r}},_parseFont:function(e){var t=F.global,r=Qt(e.fontSize,t.defaultFontSize),a={family:Qt(e.fontFamily,t.defaultFontFamily),lineHeight:ve.options.toLineHeight(Qt(e.lineHeight,t.defaultLineHeight),r),size:r,style:Qt(e.fontStyle,t.defaultFontStyle),weight:null,string:""};return a.string=function uo(e){return!e||ve.isNullOrUndef(e.size)||ve.isNullOrUndef(e.family)?null:(e.style?e.style+" ":"")+(e.weight?e.weight+" ":"")+e.size+"px "+e.family}(a),a},resolve:function(e,t,r,a){var o,s,d,n=!0;for(o=0,s=e.length;o<s;++o)if(void 0!==(d=e[o])&&(void 0!==t&&"function"==typeof d&&(d=d(t),n=!1),void 0!==r&&ve.isArray(d)&&(d=d[r],n=!1),void 0!==d))return a&&!n&&(a.cacheable=!1),d}},Xa={_factorize:function(e){var a,t=[],r=Math.sqrt(e);for(a=1;a<r;a++)e%a==0&&(t.push(a),t.push(e/a));return r===(0|r)&&t.push(r),t.sort(function(n,o){return n-o}).pop(),t},log10:Math.log10||function(e){var t=Math.log(e)*Math.LOG10E,r=Math.round(t);return e===Math.pow(10,r)?r:t}},ho=Xa;ve.log10=Xa.log10;var m=ve,_o=lo,xo=fo,wo=ho,ko={getRtlAdapter:function(e,t,r){return e?function(e,t){return{x:function(r){return e+e+t-r},setWidth:function(r){t=r},textAlign:function(r){return"center"===r?r:"right"===r?"left":"right"},xPlus:function(r,a){return r-a},leftForLtr:function(r,a){return r-a}}}(t,r):{x:function(e){return e},setWidth:function(e){},textAlign:function(e){return e},xPlus:function(e,t){return e+t},leftForLtr:function(e,t){return e}}},overrideTextDirection:function(e,t){var r,a;("ltr"===t||"rtl"===t)&&(a=[(r=e.canvas.style).getPropertyValue("direction"),r.getPropertyPriority("direction")],r.setProperty("direction",t,"important"),e.prevTextDirection=a)},restoreTextDirection:function(e){var t=e.prevTextDirection;void 0!==t&&(delete e.prevTextDirection,e.canvas.style.setProperty("direction",t[0],t[1]))}};m.easing=io,m.canvas=_o,m.options=xo,m.math=wo,m.rtl=ko;var Lr=function(e){m.extend(this,e),this.initialize.apply(this,arguments)};m.extend(Lr.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var e=this;return e._view||(e._view=m.extend({},e._model)),e._start={},e},transition:function(e){var t=this,r=t._model,a=t._start,n=t._view;return r&&1!==e?(n||(n=t._view={}),a||(a=t._start={}),function Mo(e,t,r,a){var o,s,d,l,f,c,v,p,y,n=Object.keys(r);for(o=0,s=n.length;o<s;++o)if(c=r[d=n[o]],t.hasOwnProperty(d)||(t[d]=c),(l=t[d])!==c&&"_"!==d[0]){if(e.hasOwnProperty(d)||(e[d]=l),(v=typeof c)==typeof(f=e[d]))if("string"===v){if((p=Kt(f)).valid&&(y=Kt(c)).valid){t[d]=y.mix(p,a).rgbString();continue}}else if(m.isFinite(f)&&m.isFinite(c)){t[d]=f+(c-f)*a;continue}t[d]=c}}(a,n,r,e),t):(t._view=m.extend({},r),t._start=null,t)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return m.isNumber(this._model.x)&&m.isNumber(this._model.y)}}),Lr.extend=m.inherits;var De=Lr,Rr=De.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),Wr=Rr;Object.defineProperty(Rr.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Rr.prototype,"chartInstance",{get:function(){return this.chart},set:function(e){this.chart=e}}),F._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:m.noop,onComplete:m.noop}});var Nr={animations:[],request:null,addAnimation:function(e,t,r,a){var o,s,n=this.animations;for(t.chart=e,t.startTime=Date.now(),t.duration=r,a||(e.animating=!0),o=0,s=n.length;o<s;++o)if(n[o].chart===e)return void(n[o]=t);n.push(t),1===n.length&&this.requestAnimationFrame()},cancelAnimation:function(e){var t=m.findIndex(this.animations,function(r){return r.chart===e});-1!==t&&(this.animations.splice(t,1),e.animating=!1)},requestAnimationFrame:function(){var e=this;null===e.request&&(e.request=m.requestAnimFrame.call(window,function(){e.request=null,e.startDigest()}))},startDigest:function(){var e=this;e.advance(),e.animations.length>0&&e.requestAnimationFrame()},advance:function(){for(var t,r,a,n,e=this.animations,o=0;o<e.length;)r=(t=e[o]).chart,a=t.numSteps,n=Math.floor((Date.now()-t.startTime)/t.duration*a)+1,t.currentStep=Math.min(n,a),m.callback(t.render,[r,t],r),m.callback(t.onAnimationProgress,[t],r),t.currentStep>=a?(m.callback(t.onAnimationComplete,[t],r),r.animating=!1,e.splice(o,1)):++o}},ht=m.options.resolve,Ka=["push","pop","shift","splice","unshift"];function Ja(e,t){var r=e._chartjs;if(r){var a=r.listeners,n=a.indexOf(t);-1!==n&&a.splice(n,1),!(a.length>0)&&(Ka.forEach(function(o){delete e[o]}),delete e._chartjs)}}var Yr=function(e,t){this.initialize(e,t)};m.extend(Yr.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(e,t){var r=this;r.chart=e,r.index=t,r.linkScales(),r.addElements(),r._type=r.getMeta().type},updateIndex:function(e){this.index=e},linkScales:function(){var e=this,t=e.getMeta(),r=e.chart,a=r.scales,n=e.getDataset(),o=r.options.scales;(null===t.xAxisID||!(t.xAxisID in a)||n.xAxisID)&&(t.xAxisID=n.xAxisID||o.xAxes[0].id),(null===t.yAxisID||!(t.yAxisID in a)||n.yAxisID)&&(t.yAxisID=n.yAxisID||o.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(e){return this.chart.scales[e]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&Ja(this._data,this)},createMetaDataset:function(){var e=this,t=e.datasetElementType;return t&&new t({_chart:e.chart,_datasetIndex:e.index})},createMetaData:function(e){var t=this,r=t.dataElementType;return r&&new r({_chart:t.chart,_datasetIndex:t.index,_index:e})},addElements:function(){var n,o,e=this,t=e.getMeta(),r=e.getDataset().data||[],a=t.data;for(n=0,o=r.length;n<o;++n)a[n]=a[n]||e.createMetaData(n);t.dataset=t.dataset||e.createMetaDataset()},addElementAndReset:function(e){var t=this.createMetaData(e);this.getMeta().data.splice(e,0,t),this.updateElement(t,e,!0)},buildOrUpdateElements:function(){var e=this,t=e.getDataset(),r=t.data||(t.data=[]);e._data!==r&&(e._data&&Ja(e._data,e),r&&Object.isExtensible(r)&&function So(e,t){e._chartjs?e._chartjs.listeners.push(t):(Object.defineProperty(e,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[t]}}),Ka.forEach(function(r){var a="onData"+r.charAt(0).toUpperCase()+r.slice(1),n=e[r];Object.defineProperty(e,r,{configurable:!0,enumerable:!1,value:function(){var o=Array.prototype.slice.call(arguments),s=n.apply(this,o);return m.each(e._chartjs.listeners,function(d){"function"==typeof d[a]&&d[a].apply(d,o)}),s}})}))}(r,e),e._data=r),e.resyncElements()},_configure:function(){var e=this;e._config=m.merge(Object.create(null),[e.chart.options.datasets[e._type],e.getDataset()],{merger:function(t,r,a){"_meta"!==t&&"data"!==t&&m._merger(t,r,a)}})},_update:function(e){var t=this;t._configure(),t._cachedDataOpts=null,t.update(e)},update:m.noop,transition:function(e){for(var t=this.getMeta(),r=t.data||[],a=r.length,n=0;n<a;++n)r[n].transition(e);t.dataset&&t.dataset.transition(e)},draw:function(){var e=this.getMeta(),t=e.data||[],r=t.length,a=0;for(e.dataset&&e.dataset.draw();a<r;++a)t[a].draw()},getStyle:function(e){var n,t=this,r=t.getMeta(),a=r.dataset;return t._configure(),(!1===(n=a&&void 0===e?t._resolveDatasetElementOptions(a||{}):t._resolveDataElementOptions(r.data[e=e||0]||{},e)).fill||null===n.fill)&&(n.backgroundColor=n.borderColor),n},_resolveDatasetElementOptions:function(e,t){var f,c,v,p,r=this,a=r.chart,n=r._config,o=e.custom||{},s=a.options.elements[r.datasetElementType.prototype._type]||{},d=r._datasetElementOptions,l={},y={chart:a,dataset:r.getDataset(),datasetIndex:r.index,hover:t};for(f=0,c=d.length;f<c;++f)v=d[f],p=t?"hover"+v.charAt(0).toUpperCase()+v.slice(1):v,l[v]=ht([o[p],n[p],s[p]],y);return l},_resolveDataElementOptions:function(e,t){var r=this,a=e&&e.custom,n=r._cachedDataOpts;if(n&&!a)return n;var p,y,_,w,o=r.chart,s=r._config,d=o.options.elements[r.dataElementType.prototype._type]||{},l=r._dataElementOptions,f={},c={chart:o,dataIndex:t,dataset:r.getDataset(),datasetIndex:r.index},v={cacheable:!a};if(a=a||{},m.isArray(l))for(y=0,_=l.length;y<_;++y)f[w=l[y]]=ht([a[w],s[w],d[w]],c,t,v);else for(y=0,_=(p=Object.keys(l)).length;y<_;++y)f[w=p[y]]=ht([a[w],s[l[w]],s[w],d[w]],c,t,v);return v.cacheable&&(r._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(e){m.merge(e._model,e.$previousStyle||{}),delete e.$previousStyle},setHoverStyle:function(e){var t=this.chart.data.datasets[e._datasetIndex],r=e._index,a=e.custom||{},n=e._model,o=m.getHoverColor;e.$previousStyle={backgroundColor:n.backgroundColor,borderColor:n.borderColor,borderWidth:n.borderWidth},n.backgroundColor=ht([a.hoverBackgroundColor,t.hoverBackgroundColor,o(n.backgroundColor)],void 0,r),n.borderColor=ht([a.hoverBorderColor,t.hoverBorderColor,o(n.borderColor)],void 0,r),n.borderWidth=ht([a.hoverBorderWidth,t.hoverBorderWidth,n.borderWidth],void 0,r)},_removeDatasetHoverStyle:function(){var e=this.getMeta().dataset;e&&this.removeHoverStyle(e)},_setDatasetHoverStyle:function(){var r,a,n,o,s,d,e=this.getMeta().dataset,t={};if(e){for(d=e._model,s=this._resolveDatasetElementOptions(e,!0),r=0,a=(o=Object.keys(s)).length;r<a;++r)t[n=o[r]]=d[n],d[n]=s[n];e.$previousStyle=t}},resyncElements:function(){var e=this,t=e.getMeta(),r=e.getDataset().data,a=t.data.length,n=r.length;n<a?t.data.splice(n,a-n):n>a&&e.insertElements(a,n-a)},insertElements:function(e,t){for(var r=0;r<t;++r)this.addElementAndReset(e+r)},onDataPush:function(){var e=arguments.length;this.insertElements(this.getDataset().data.length-e,e)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(e,t){this.getMeta().data.splice(e,t),this.insertElements(e,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),Yr.extend=m.inherits;var me=Yr,Te=2*Math.PI;function Qa(e,t){var r=t.startAngle,a=t.endAngle,n=t.pixelMargin,o=n/t.outerRadius,s=t.x,d=t.y;e.beginPath(),e.arc(s,d,t.outerRadius,r-o,a+o),t.innerRadius>n?e.arc(s,d,t.innerRadius-n,a+(o=n/t.innerRadius),r-o,!0):e.arc(s,d,n,a+Math.PI/2,r-Math.PI/2),e.closePath(),e.clip()}F._set("global",{elements:{arc:{backgroundColor:F.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var Co=De.extend({_type:"arc",inLabelRange:function(e){var t=this._view;return!!t&&Math.pow(e-t.x,2)<Math.pow(t.radius+t.hoverRadius,2)},inRange:function(e,t){var r=this._view;if(r){for(var a=m.getAngleFromPoint(r,{x:e,y:t}),n=a.angle,o=a.distance,s=r.startAngle,d=r.endAngle;d<s;)d+=Te;for(;n>d;)n-=Te;for(;n<s;)n+=Te;return n>=s&&n<=d&&o>=r.innerRadius&&o<=r.outerRadius}return!1},getCenterPoint:function(){var e=this._view,t=(e.startAngle+e.endAngle)/2,r=(e.innerRadius+e.outerRadius)/2;return{x:e.x+Math.cos(t)*r,y:e.y+Math.sin(t)*r}},getArea:function(){var e=this._view;return Math.PI*((e.endAngle-e.startAngle)/(2*Math.PI))*(Math.pow(e.outerRadius,2)-Math.pow(e.innerRadius,2))},tooltipPosition:function(){var e=this._view,t=e.startAngle+(e.endAngle-e.startAngle)/2,r=(e.outerRadius-e.innerRadius)/2+e.innerRadius;return{x:e.x+Math.cos(t)*r,y:e.y+Math.sin(t)*r}},draw:function(){var n,e=this._chart.ctx,t=this._view,r="inner"===t.borderAlign?.33:0,a={x:t.x,y:t.y,innerRadius:t.innerRadius,outerRadius:Math.max(t.outerRadius-r,0),pixelMargin:r,startAngle:t.startAngle,endAngle:t.endAngle,fullCircles:Math.floor(t.circumference/Te)};if(e.save(),e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+Te,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),n=0;n<a.fullCircles;++n)e.fill();a.endAngle=a.startAngle+t.circumference%Te}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),t.borderWidth&&function To(e,t,r){var a="inner"===t.borderAlign;a?(e.lineWidth=2*t.borderWidth,e.lineJoin="round"):(e.lineWidth=t.borderWidth,e.lineJoin="bevel"),r.fullCircles&&function Do(e,t,r,a){var o,n=r.endAngle;for(a&&(r.endAngle=r.startAngle+Te,Qa(e,r),r.endAngle=n,r.endAngle===r.startAngle&&r.fullCircles&&(r.endAngle+=Te,r.fullCircles--)),e.beginPath(),e.arc(r.x,r.y,r.innerRadius,r.startAngle+Te,r.startAngle,!0),o=0;o<r.fullCircles;++o)e.stroke();for(e.beginPath(),e.arc(r.x,r.y,t.outerRadius,r.startAngle,r.startAngle+Te),o=0;o<r.fullCircles;++o)e.stroke()}(e,t,r,a),a&&Qa(e,r),e.beginPath(),e.arc(r.x,r.y,t.outerRadius,r.startAngle,r.endAngle),e.arc(r.x,r.y,r.innerRadius,r.endAngle,r.startAngle,!0),e.closePath(),e.stroke()}(e,t,a),e.restore()}}),en=m.valueOrDefault,tn=F.global.defaultColor;F._set("global",{elements:{line:{tension:.4,backgroundColor:tn,borderWidth:3,borderColor:tn,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var Po=De.extend({_type:"line",draw:function(){var f,c,v,e=this,t=e._view,r=e._chart.ctx,a=t.spanGaps,n=e._children.slice(),o=F.global,s=o.elements.line,d=-1,l=e._loop;if(n.length){if(e._loop){for(f=0;f<n.length;++f)if(c=m.previousItem(n,f),!n[f]._view.skip&&c._view.skip){n=n.slice(f).concat(n.slice(0,f)),l=a;break}l&&n.push(n[0])}for(r.save(),r.lineCap=t.borderCapStyle||s.borderCapStyle,r.setLineDash&&r.setLineDash(t.borderDash||s.borderDash),r.lineDashOffset=en(t.borderDashOffset,s.borderDashOffset),r.lineJoin=t.borderJoinStyle||s.borderJoinStyle,r.lineWidth=en(t.borderWidth,s.borderWidth),r.strokeStyle=t.borderColor||o.defaultColor,r.beginPath(),(v=n[0]._view).skip||(r.moveTo(v.x,v.y),d=0),f=1;f<n.length;++f)v=n[f]._view,c=-1===d?m.previousItem(n,f):n[d],v.skip||(d!==f-1&&!a||-1===d?r.moveTo(v.x,v.y):m.canvas.lineTo(r,c._view,v),d=f);l&&r.closePath(),r.stroke(),r.restore()}}}),Oo=m.valueOrDefault,rn=F.global.defaultColor;function an(e){var t=this._view;return!!t&&Math.abs(e-t.x)<t.radius+t.hitRadius}F._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:rn,borderColor:rn,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var Ao=De.extend({_type:"point",inRange:function(e,t){var r=this._view;return!!r&&Math.pow(e-r.x,2)+Math.pow(t-r.y,2)<Math.pow(r.hitRadius+r.radius,2)},inLabelRange:an,inXRange:an,inYRange:function Fo(e){var t=this._view;return!!t&&Math.abs(e-t.y)<t.radius+t.hitRadius},getCenterPoint:function(){var e=this._view;return{x:e.x,y:e.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var e=this._view;return{x:e.x,y:e.y,padding:e.radius+e.borderWidth}},draw:function(e){var t=this._view,r=this._chart.ctx,a=t.pointStyle,n=t.rotation,o=t.radius,s=t.x,d=t.y,l=F.global,f=l.defaultColor;t.skip||(void 0===e||m.canvas._isPointInArea(t,e))&&(r.strokeStyle=t.borderColor||f,r.lineWidth=Oo(t.borderWidth,l.elements.point.borderWidth),r.fillStyle=t.backgroundColor||f,m.canvas.drawPoint(r,a,o,s,d,n))}}),nn=F.global.defaultColor;function er(e){return e&&void 0!==e.width}function on(e){var t,r,a,n,o;return er(e)?(t=e.x-(o=e.width/2),r=e.x+o,a=Math.min(e.y,e.base),n=Math.max(e.y,e.base)):(o=e.height/2,t=Math.min(e.x,e.base),r=Math.max(e.x,e.base),a=e.y-o,n=e.y+o),{left:t,top:a,right:r,bottom:n}}function sn(e,t,r){return e===t?r:e===r?t:e}function Pt(e,t,r){var a=null===t,n=null===r,o=!(!e||a&&n)&&on(e);return o&&(a||t>=o.left&&t<=o.right)&&(n||r>=o.top&&r<=o.bottom)}F._set("global",{elements:{rectangle:{backgroundColor:nn,borderColor:nn,borderSkipped:"bottom",borderWidth:0}}});var Wo=De.extend({_type:"rectangle",draw:function(){var e=this._chart.ctx,t=this._view,r=function Ro(e){var t=on(e),r=t.right-t.left,a=t.bottom-t.top,n=function Lo(e,t,r){var o,s,d,l,a=e.borderWidth,n=function Io(e){var t=e.borderSkipped,r={};return t&&(e.horizontal?e.base>e.x&&(t=sn(t,"left","right")):e.base<e.y&&(t=sn(t,"bottom","top")),r[t]=!0),r}(e);return m.isObject(a)?(o=+a.top||0,s=+a.right||0,d=+a.bottom||0,l=+a.left||0):o=s=d=l=+a||0,{t:n.top||o<0?0:o>r?r:o,r:n.right||s<0?0:s>t?t:s,b:n.bottom||d<0?0:d>r?r:d,l:n.left||l<0?0:l>t?t:l}}(e,r/2,a/2);return{outer:{x:t.left,y:t.top,w:r,h:a},inner:{x:t.left+n.l,y:t.top+n.t,w:r-n.l-n.r,h:a-n.t-n.b}}}(t),a=r.outer,n=r.inner;e.fillStyle=t.backgroundColor,e.fillRect(a.x,a.y,a.w,a.h),(a.w!==n.w||a.h!==n.h)&&(e.save(),e.beginPath(),e.rect(a.x,a.y,a.w,a.h),e.clip(),e.fillStyle=t.borderColor,e.rect(n.x,n.y,n.w,n.h),e.fill("evenodd"),e.restore())},height:function(){var e=this._view;return e.base-e.y},inRange:function(e,t){return Pt(this._view,e,t)},inLabelRange:function(e,t){var r=this._view;return er(r)?Pt(r,e,null):Pt(r,null,t)},inXRange:function(e){return Pt(this._view,e,null)},inYRange:function(e){return Pt(this._view,null,e)},getCenterPoint:function(){var t,r,e=this._view;return er(e)?(t=e.x,r=(e.y+e.base)/2):(t=(e.x+e.base)/2,r=e.y),{x:t,y:r}},getArea:function(){var e=this._view;return er(e)?e.width*Math.abs(e.y-e.base):e.height*Math.abs(e.x-e.base)},tooltipPosition:function(){var e=this._view;return{x:e.x,y:e.y}}}),se={},Yo=Po,Eo=Ao,zo=Wo;se.Arc=Co,se.Line=Yo,se.Point=Eo,se.Rectangle=zo;var Ot=m._deprecated,ct=m.valueOrDefault;F._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),F._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var ln=me.extend({dataElementType:se.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,r,e=this;me.prototype.initialize.apply(e,arguments),(t=e.getMeta()).stack=e.getDataset().stack,t.bar=!0,r=e._getIndexScale().options,Ot("bar chart",r.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Ot("bar chart",r.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Ot("bar chart",r.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Ot("bar chart",e._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Ot("bar chart",r.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(e){var a,n,t=this,r=t.getMeta().data;for(t._ruler=t.getRuler(),a=0,n=r.length;a<n;++a)t.updateElement(r[a],a,e)},updateElement:function(e,t,r){var a=this,n=a.getMeta(),o=a.getDataset(),s=a._resolveDataElementOptions(e,t);e._xScale=a.getScaleForId(n.xAxisID),e._yScale=a.getScaleForId(n.yAxisID),e._datasetIndex=a.index,e._index=t,e._model={backgroundColor:s.backgroundColor,borderColor:s.borderColor,borderSkipped:s.borderSkipped,borderWidth:s.borderWidth,datasetLabel:o.label,label:a.chart.data.labels[t]},m.isArray(o.data[t])&&(e._model.borderSkipped=null),a._updateElementGeometry(e,t,r,s),e.pivot()},_updateElementGeometry:function(e,t,r,a){var n=this,o=e._model,s=n._getValueScale(),d=s.getBasePixel(),l=s.isHorizontal(),f=n._ruler||n.getRuler(),c=n.calculateBarValuePixels(n.index,t,a),v=n.calculateBarIndexPixels(n.index,t,f,a);o.horizontal=l,o.base=r?d:c.base,o.x=l?r?d:c.head:v.center,o.y=l?v.center:r?d:c.head,o.height=l?v.size:void 0,o.width=l?void 0:v.size},_getStacks:function(e){var d,l,r=this._getIndexScale(),a=r._getMatchingVisibleMetas(this._type),n=r.options.stacked,o=a.length,s=[];for(d=0;d<o&&(l=a[d],(!1===n||-1===s.indexOf(l.stack)||void 0===n&&void 0===l.stack)&&s.push(l.stack),l.index!==e);++d);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(e,t){var r=this._getStacks(e),a=void 0!==t?r.indexOf(t):-1;return-1===a?r.length-1:a},getRuler:function(){var a,n,e=this,t=e._getIndexScale(),r=[];for(a=0,n=e.getMeta().data.length;a<n;++a)r.push(t.getPixelForValue(null,a,e.index));return{pixels:r,start:t._startPixel,end:t._endPixel,stackCount:e.getStackCount(),scale:t}},calculateBarValuePixels:function(e,t,r){var x,M,T,C,I,A,z,a=this,n=a.chart,o=a._getValueScale(),s=o.isHorizontal(),d=n.data.datasets,l=o._getMatchingVisibleMetas(a._type),f=o._parseValue(d[e].data[t]),c=r.minBarLength,v=o.options.stacked,p=a.getMeta().stack,y=void 0===f.start?0:f.max>=0&&f.min>=0?f.min:f.max,_=void 0===f.start?f.end:f.max>=0&&f.min>=0?f.max-f.min:f.min-f.max,w=l.length;if(v||void 0===v&&void 0!==p)for(x=0;x<w&&(M=l[x]).index!==e;++x)M.stack===p&&(T=void 0===(z=o._parseValue(d[M.index].data[t])).start?z.end:z.min>=0&&z.max>=0?z.max:z.min,(f.min<0&&T<0||f.max>=0&&T>0)&&(y+=T));return C=o.getPixelForValue(y),A=(I=o.getPixelForValue(y+_))-C,void 0!==c&&Math.abs(A)<c&&(A=c,I=_>=0&&!s||_<0&&s?C-c:C+c),{size:A,base:C,head:I,center:I+A/2}},calculateBarIndexPixels:function(e,t,r,a){var o="flex"===a.barThickness?function Vo(e,t,r){var l,a=t.pixels,n=a[e],o=e>0?a[e-1]:null,s=e<a.length-1?a[e+1]:null,d=r.categoryPercentage;return null===o&&(o=n-(null===s?t.end-t.start:s-n)),null===s&&(s=n+n-o),l=n-(n-Math.min(o,s))/2*d,{chunk:Math.abs(s-o)/2*d/t.stackCount,ratio:r.barPercentage,start:l}}(t,r,a):function Ho(e,t,r){var d,l,a=r.barThickness,n=t.stackCount,o=t.pixels[e],s=m.isNullOrUndef(a)?function Bo(e,t){var a,n,o,s,r=e._length;for(o=1,s=t.length;o<s;++o)r=Math.min(r,Math.abs(t[o]-t[o-1]));for(o=0,s=e.getTicks().length;o<s;++o)n=e.getPixelForTick(o),r=o>0?Math.min(r,Math.abs(n-a)):r,a=n;return r}(t.scale,t.pixels):-1;return m.isNullOrUndef(a)?(d=s*r.categoryPercentage,l=r.barPercentage):(d=a*n,l=1),{chunk:d/n,ratio:l,start:o-d/2}}(t,r,a),s=this.getStackIndex(e,this.getMeta().stack),d=o.start+o.chunk*s+o.chunk/2,l=Math.min(ct(a.maxBarThickness,1/0),o.chunk*o.ratio);return{base:d-l/2,head:d+l/2,center:d,size:l}},draw:function(){var e=this,t=e.chart,r=e._getValueScale(),a=e.getMeta().data,n=e.getDataset(),o=a.length,s=0;for(m.canvas.clipArea(t.ctx,t.chartArea);s<o;++s){var d=r._parseValue(n.data[s]);!isNaN(d.min)&&!isNaN(d.max)&&a[s].draw()}m.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var e=this,t=m.extend({},me.prototype._resolveDataElementOptions.apply(e,arguments)),r=e._getIndexScale().options,a=e._getValueScale().options;return t.barPercentage=ct(r.barPercentage,t.barPercentage),t.barThickness=ct(r.barThickness,t.barThickness),t.categoryPercentage=ct(r.categoryPercentage,t.categoryPercentage),t.maxBarThickness=ct(r.maxBarThickness,t.maxBarThickness),t.minBarLength=ct(a.minBarLength,t.minBarLength),t}}),Er=m.valueOrDefault,Uo=m.options.resolve;F._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(e,t){return(t.datasets[e.datasetIndex].label||"")+": ("+e.xLabel+", "+e.yLabel+", "+t.datasets[e.datasetIndex].data[e.index].r+")"}}}});var jo=me.extend({dataElementType:se.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(e){var t=this,r=t.getMeta();m.each(r.data,function(n,o){t.updateElement(n,o,e)})},updateElement:function(e,t,r){var a=this,n=a.getMeta(),o=e.custom||{},s=a.getScaleForId(n.xAxisID),d=a.getScaleForId(n.yAxisID),l=a._resolveDataElementOptions(e,t),f=a.getDataset().data[t],c=a.index,v=r?s.getPixelForDecimal(.5):s.getPixelForValue("object"==typeof f?f:NaN,t,c),p=r?d.getBasePixel():d.getPixelForValue(f,t,c);e._xScale=s,e._yScale=d,e._options=l,e._datasetIndex=c,e._index=t,e._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:r?0:l.radius,skip:o.skip||isNaN(v)||isNaN(p),x:v,y:p},e.pivot()},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth,radius:t.radius},t.backgroundColor=Er(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=Er(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=Er(r.hoverBorderWidth,r.borderWidth),t.radius=r.radius+r.hoverRadius},_resolveDataElementOptions:function(e,t){var r=this,a=r.chart,n=r.getDataset(),o=e.custom||{},s=n.data[t]||{},d=me.prototype._resolveDataElementOptions.apply(r,arguments),l={chart:a,dataIndex:t,dataset:n,datasetIndex:r.index};return r._cachedDataOpts===d&&(d=m.extend({},d)),d.radius=Uo([o.radius,s.r,r._config.radius,a.options.elements.point.radius],l,t),d}}),tr=m.valueOrDefault,Ke=Math.PI,Fe=2*Ke,Je=Ke/2;F._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(e){var o,s,d,t=document.createElement("ul"),r=e.data,a=r.datasets,n=r.labels;if(t.setAttribute("class",e.id+"-legend"),a.length)for(o=0,s=a[0].data.length;o<s;++o)(d=t.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=a[0].backgroundColor[o],n[o]&&d.appendChild(document.createTextNode(n[o]));return t.outerHTML},legend:{labels:{generateLabels:function(e){var t=e.data;return t.labels.length&&t.datasets.length?t.labels.map(function(r,a){var n=e.getDatasetMeta(0),o=n.controller.getStyle(a);return{text:r,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,hidden:isNaN(t.datasets[0].data[a])||n.data[a].hidden,index:a}}):[]}},onClick:function(e,t){var n,o,s,r=t.index,a=this.chart;for(n=0,o=(a.data.datasets||[]).length;n<o;++n)(s=a.getDatasetMeta(n)).data[r]&&(s.data[r].hidden=!s.data[r].hidden);a.update()}},cutoutPercentage:50,rotation:-Je,circumference:Fe,tooltips:{callbacks:{title:function(){return""},label:function(e,t){var r=t.labels[e.index],a=": "+t.datasets[e.datasetIndex].data[e.index];return m.isArray(r)?(r=r.slice())[0]+=a:r+=a,r}}}});var un=me.extend({dataElementType:se.Arc,linkScales:m.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(e){for(var t=0,r=0;r<e;++r)this.chart.isDatasetVisible(r)&&++t;return t},update:function(e){var x,M,t=this,r=t.chart,a=r.chartArea,n=r.options,o=1,s=1,d=0,l=0,f=t.getMeta(),c=f.data,v=n.cutoutPercentage/100||0,p=n.circumference,y=t._getRingWeight(t.index);if(p<Fe){var T=n.rotation%Fe,C=(T+=T>=Ke?-Fe:T<-Ke?Fe:0)+p,I=Math.cos(T),A=Math.sin(T),z=Math.cos(C),N=Math.sin(C),Y=T<=0&&C>=0||C>=Fe,E=T<=Je&&C>=Je||C>=Fe+Je,J=T<=-Je&&C>=-Je||C>=Ke+Je,X=T===-Ke||C>=Ke?-1:Math.min(I,I*v,z,z*v),U=J?-1:Math.min(A,A*v,N,N*v),We=Y?1:Math.max(I,I*v,z,z*v),Ne=E?1:Math.max(A,A*v,N,N*v);o=(We-X)/2,s=(Ne-U)/2,d=-(We+X)/2,l=-(Ne+U)/2}for(x=0,M=c.length;x<M;++x)c[x]._options=t._resolveDataElementOptions(c[x],x);for(r.borderWidth=t.getMaxBorderWidth(),r.outerRadius=Math.max(Math.min((a.right-a.left-r.borderWidth)/o,(a.bottom-a.top-r.borderWidth)/s)/2,0),r.innerRadius=Math.max(r.outerRadius*v,0),r.radiusLength=(r.outerRadius-r.innerRadius)/(t._getVisibleDatasetWeightTotal()||1),r.offsetX=d*r.outerRadius,r.offsetY=l*r.outerRadius,f.total=t.calculateTotal(),t.outerRadius=r.outerRadius-r.radiusLength*t._getRingWeightOffset(t.index),t.innerRadius=Math.max(t.outerRadius-r.radiusLength*y,0),x=0,M=c.length;x<M;++x)t.updateElement(c[x],x,e)},updateElement:function(e,t,r){var a=this,n=a.chart,o=n.chartArea,s=n.options,d=s.animation,l=(o.left+o.right)/2,f=(o.top+o.bottom)/2,c=s.rotation,v=s.rotation,p=a.getDataset(),y=r&&d.animateRotate||e.hidden?0:a.calculateCircumference(p.data[t])*(s.circumference/Fe),x=e._options||{};m.extend(e,{_datasetIndex:a.index,_index:t,_model:{backgroundColor:x.backgroundColor,borderColor:x.borderColor,borderWidth:x.borderWidth,borderAlign:x.borderAlign,x:l+n.offsetX,y:f+n.offsetY,startAngle:c,endAngle:v,circumference:y,outerRadius:r&&d.animateScale?0:a.outerRadius,innerRadius:r&&d.animateScale?0:a.innerRadius,label:m.valueAtIndexOrDefault(p.label,t,n.data.labels[t])}});var M=e._model;(!r||!d.animateRotate)&&(M.startAngle=0===t?s.rotation:a.getMeta().data[t-1]._model.endAngle,M.endAngle=M.startAngle+M.circumference),e.pivot()},calculateTotal:function(){var a,e=this.getDataset(),t=this.getMeta(),r=0;return m.each(t.data,function(n,o){a=e.data[o],!isNaN(a)&&!n.hidden&&(r+=Math.abs(a))}),r},calculateCircumference:function(e){var t=this.getMeta().total;return t>0&&!isNaN(e)?Fe*(Math.abs(e)/t):0},getMaxBorderWidth:function(e){var n,o,s,d,l,f,c,v,r=0,a=this.chart;if(!e)for(n=0,o=a.data.datasets.length;n<o;++n)if(a.isDatasetVisible(n)){e=(s=a.getDatasetMeta(n)).data,n!==this.index&&(l=s.controller);break}if(!e)return 0;for(n=0,o=e.length;n<o;++n)d=e[n],l?(l._configure(),f=l._resolveDataElementOptions(d,n)):f=d._options,"inner"!==f.borderAlign&&(r=(v=f.hoverBorderWidth)>(r=(c=f.borderWidth)>r?c:r)?v:r);return r},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth},t.backgroundColor=tr(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=tr(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=tr(r.hoverBorderWidth,r.borderWidth)},_getRingWeightOffset:function(e){for(var t=0,r=0;r<e;++r)this.chart.isDatasetVisible(r)&&(t+=this._getRingWeight(r));return t},_getRingWeight:function(e){return Math.max(tr(this.chart.data.datasets[e].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});F._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),F._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Go=ln.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Ae=m.valueOrDefault,$o=m.options.resolve,zr=m.canvas._isPointInArea;function dn(e,t){var r=e&&e.options.ticks||{},a=r.reverse,n=void 0===r.min?t:0,o=void 0===r.max?t:0;return{start:a?o:n,end:a?n:o}}F._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var fn=me.extend({datasetElementType:se.Line,dataElementType:se.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(e){var l,f,t=this,r=t.getMeta(),a=r.dataset,n=r.data||[],s=t._config,d=t._showLine=Ae(s.showLine,t.chart.options.showLines);for(t._xScale=t.getScaleForId(r.xAxisID),t._yScale=t.getScaleForId(r.yAxisID),d&&(void 0!==s.tension&&void 0===s.lineTension&&(s.lineTension=s.tension),a._scale=t._yScale,a._datasetIndex=t.index,a._children=n,a._model=t._resolveDatasetElementOptions(a),a.pivot()),l=0,f=n.length;l<f;++l)t.updateElement(n[l],l,e);for(d&&0!==a._model.tension&&t.updateBezierControlPoints(),l=0,f=n.length;l<f;++l)n[l].pivot()},updateElement:function(e,t,r){var p,y,a=this,n=a.getMeta(),o=e.custom||{},s=a.getDataset(),d=a.index,l=s.data[t],f=a._xScale,c=a._yScale,v=n.dataset._model,_=a._resolveDataElementOptions(e,t);p=f.getPixelForValue("object"==typeof l?l:NaN,t,d),y=r?c.getBasePixel():a.calculatePointY(l,t,d),e._xScale=f,e._yScale=c,e._options=_,e._datasetIndex=d,e._index=t,e._model={x:p,y,skip:o.skip||isNaN(p)||isNaN(y),radius:_.radius,pointStyle:_.pointStyle,rotation:_.rotation,backgroundColor:_.backgroundColor,borderColor:_.borderColor,borderWidth:_.borderWidth,tension:Ae(o.tension,v?v.tension:0),steppedLine:!!v&&v.steppedLine,hitRadius:_.hitRadius}},_resolveDatasetElementOptions:function(e){var t=this,r=t._config,a=e.custom||{},n=t.chart.options,o=n.elements.line,s=me.prototype._resolveDatasetElementOptions.apply(t,arguments);return s.spanGaps=Ae(r.spanGaps,n.spanGaps),s.tension=Ae(r.lineTension,o.tension),s.steppedLine=$o([a.steppedLine,r.steppedLine,o.stepped]),s.clip=function Zo(e){var t,r,a,n;return m.isObject(e)?(t=e.top,r=e.right,a=e.bottom,n=e.left):t=r=a=n=e,{top:t,right:r,bottom:a,left:n}}(Ae(r.clip,function qo(e,t,r){var a=r/2,n=dn(e,a),o=dn(t,a);return{top:o.end,right:n.end,bottom:o.start,left:n.start}}(t._xScale,t._yScale,s.borderWidth))),s},calculatePointY:function(e,t,r){var l,c,v,p,y,_,n=this.chart,o=this._yScale,s=0,d=0;if(o.options.stacked){for(p=+o.getRightValue(e),_=(y=n._getSortedVisibleDatasetMetas()).length,l=0;l<_&&(c=y[l]).index!==r;++l)"line"===c.type&&c.yAxisID===o.id&&((v=+o.getRightValue(n.data.datasets[c.index].data[t]))<0?d+=v||0:s+=v||0);return o.getPixelForValue(p<0?d+p:s+p)}return o.getPixelForValue(e)},updateBezierControlPoints:function(){var s,d,l,f,t=this.chart,r=this.getMeta(),a=r.dataset._model,n=t.chartArea,o=r.data||[];function c(v,p,y){return Math.max(Math.min(v,y),p)}if(a.spanGaps&&(o=o.filter(function(v){return!v._model.skip})),"monotone"===a.cubicInterpolationMode)m.splineCurveMonotone(o);else for(s=0,d=o.length;s<d;++s)l=o[s]._model,f=m.splineCurve(m.previousItem(o,s)._model,l,m.nextItem(o,s)._model,a.tension),l.controlPointPreviousX=f.previous.x,l.controlPointPreviousY=f.previous.y,l.controlPointNextX=f.next.x,l.controlPointNextY=f.next.y;if(t.options.elements.line.capBezierPoints)for(s=0,d=o.length;s<d;++s)zr(l=o[s]._model,n)&&(s>0&&zr(o[s-1]._model,n)&&(l.controlPointPreviousX=c(l.controlPointPreviousX,n.left,n.right),l.controlPointPreviousY=c(l.controlPointPreviousY,n.top,n.bottom)),s<o.length-1&&zr(o[s+1]._model,n)&&(l.controlPointNextX=c(l.controlPointNextX,n.left,n.right),l.controlPointNextY=c(l.controlPointNextY,n.top,n.bottom)))},draw:function(){var l,e=this,t=e.chart,r=e.getMeta(),a=r.data||[],n=t.chartArea,o=t.canvas,s=0,d=a.length;for(e._showLine&&(m.canvas.clipArea(t.ctx,{left:!1===(l=r.dataset._model.clip).left?0:n.left-l.left,right:!1===l.right?o.width:n.right+l.right,top:!1===l.top?0:n.top-l.top,bottom:!1===l.bottom?o.height:n.bottom+l.bottom}),r.dataset.draw(),m.canvas.unclipArea(t.ctx));s<d;++s)a[s].draw(n)},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth,radius:t.radius},t.backgroundColor=Ae(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=Ae(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=Ae(r.hoverBorderWidth,r.borderWidth),t.radius=Ae(r.hoverRadius,r.radius)}}),Xo=m.options.resolve;F._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(e){var o,s,d,t=document.createElement("ul"),r=e.data,a=r.datasets,n=r.labels;if(t.setAttribute("class",e.id+"-legend"),a.length)for(o=0,s=a[0].data.length;o<s;++o)(d=t.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=a[0].backgroundColor[o],n[o]&&d.appendChild(document.createTextNode(n[o]));return t.outerHTML},legend:{labels:{generateLabels:function(e){var t=e.data;return t.labels.length&&t.datasets.length?t.labels.map(function(r,a){var n=e.getDatasetMeta(0),o=n.controller.getStyle(a);return{text:r,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,hidden:isNaN(t.datasets[0].data[a])||n.data[a].hidden,index:a}}):[]}},onClick:function(e,t){var n,o,s,r=t.index,a=this.chart;for(n=0,o=(a.data.datasets||[]).length;n<o;++n)(s=a.getDatasetMeta(n)).data[r].hidden=!s.data[r].hidden;a.update()}},tooltips:{callbacks:{title:function(){return""},label:function(e,t){return t.labels[e.index]+": "+e.yLabel}}}});var Ko=me.extend({dataElementType:se.Arc,linkScales:m.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(e){var l,f,c,t=this,r=t.getDataset(),a=t.getMeta(),n=t.chart.options.startAngle||0,o=t._starts=[],s=t._angles=[],d=a.data;for(t._updateRadius(),a.count=t.countVisibleElements(),l=0,f=r.data.length;l<f;l++)o[l]=n,c=t._computeAngle(l),s[l]=c,n+=c;for(l=0,f=d.length;l<f;++l)d[l]._options=t._resolveDataElementOptions(d[l],l),t.updateElement(d[l],l,e)},_updateRadius:function(){var e=this,t=e.chart,r=t.chartArea,a=t.options,n=Math.min(r.right-r.left,r.bottom-r.top);t.outerRadius=Math.max(n/2,0),t.innerRadius=Math.max(a.cutoutPercentage?t.outerRadius/100*a.cutoutPercentage:1,0),t.radiusLength=(t.outerRadius-t.innerRadius)/t.getVisibleDatasetCount(),e.outerRadius=t.outerRadius-t.radiusLength*e.index,e.innerRadius=e.outerRadius-t.radiusLength},updateElement:function(e,t,r){var a=this,n=a.chart,o=a.getDataset(),s=n.options,d=s.animation,l=n.scale,f=n.data.labels,c=l.xCenter,v=l.yCenter,p=s.startAngle,y=e.hidden?0:l.getDistanceFromCenterForValue(o.data[t]),_=a._starts[t],w=_+(e.hidden?0:a._angles[t]),x=d.animateScale?0:l.getDistanceFromCenterForValue(o.data[t]),M=e._options||{};m.extend(e,{_datasetIndex:a.index,_index:t,_scale:l,_model:{backgroundColor:M.backgroundColor,borderColor:M.borderColor,borderWidth:M.borderWidth,borderAlign:M.borderAlign,x:c,y:v,innerRadius:0,outerRadius:r?x:y,startAngle:r&&d.animateRotate?p:_,endAngle:r&&d.animateRotate?p:w,label:m.valueAtIndexOrDefault(f,t,f[t])}}),e.pivot()},countVisibleElements:function(){var e=this.getDataset(),t=this.getMeta(),r=0;return m.each(t.data,function(a,n){!isNaN(e.data[n])&&!a.hidden&&r++}),r},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor,n=m.valueOrDefault;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth},t.backgroundColor=n(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=n(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=n(r.hoverBorderWidth,r.borderWidth)},_computeAngle:function(e){var t=this,r=this.getMeta().count,a=t.getDataset(),n=t.getMeta();return isNaN(a.data[e])||n.data[e].hidden?0:Xo([t.chart.options.elements.arc.angle,2*Math.PI/r],{chart:t.chart,dataIndex:e,dataset:a,datasetIndex:t.index},e)}});F._set("pie",m.clone(F.doughnut)),F._set("pie",{cutoutPercentage:0});var Jo=un,Qe=m.valueOrDefault;F._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var Qo=me.extend({datasetElementType:se.Line,dataElementType:se.Point,linkScales:m.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(e){var d,l,t=this,r=t.getMeta(),a=r.dataset,n=r.data||[],o=t.chart.scale,s=t._config;for(void 0!==s.tension&&void 0===s.lineTension&&(s.lineTension=s.tension),a._scale=o,a._datasetIndex=t.index,a._children=n,a._loop=!0,a._model=t._resolveDatasetElementOptions(a),a.pivot(),d=0,l=n.length;d<l;++d)t.updateElement(n[d],d,e);for(t.updateBezierControlPoints(),d=0,l=n.length;d<l;++d)n[d].pivot()},updateElement:function(e,t,r){var a=this,n=e.custom||{},o=a.getDataset(),s=a.chart.scale,d=s.getPointPositionForValue(t,o.data[t]),l=a._resolveDataElementOptions(e,t),f=a.getMeta().dataset._model,c=r?s.xCenter:d.x,v=r?s.yCenter:d.y;e._scale=s,e._options=l,e._datasetIndex=a.index,e._index=t,e._model={x:c,y:v,skip:n.skip||isNaN(c)||isNaN(v),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Qe(n.tension,f?f.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var e=this,t=e._config,r=e.chart.options,a=me.prototype._resolveDatasetElementOptions.apply(e,arguments);return a.spanGaps=Qe(t.spanGaps,r.spanGaps),a.tension=Qe(t.lineTension,r.elements.line.tension),a},updateBezierControlPoints:function(){var n,o,s,d,t=this.getMeta(),r=this.chart.chartArea,a=t.data||[];function l(f,c,v){return Math.max(Math.min(f,v),c)}for(t.dataset._model.spanGaps&&(a=a.filter(function(f){return!f._model.skip})),n=0,o=a.length;n<o;++n)s=a[n]._model,d=m.splineCurve(m.previousItem(a,n,!0)._model,s,m.nextItem(a,n,!0)._model,s.tension),s.controlPointPreviousX=l(d.previous.x,r.left,r.right),s.controlPointPreviousY=l(d.previous.y,r.top,r.bottom),s.controlPointNextX=l(d.next.x,r.left,r.right),s.controlPointNextY=l(d.next.y,r.top,r.bottom)},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth,radius:t.radius},t.backgroundColor=Qe(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=Qe(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=Qe(r.hoverBorderWidth,r.borderWidth),t.radius=Qe(r.hoverRadius,r.radius)}});F._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(e){return"("+e.xLabel+", "+e.yLabel+")"}}}}),F._set("global",{datasets:{scatter:{showLine:!1}}});var hn={bar:ln,bubble:jo,doughnut:un,horizontalBar:Go,line:fn,polarArea:Ko,pie:Jo,radar:Qo,scatter:fn};function et(e,t){return e.native?{x:e.x,y:e.y}:m.getRelativePosition(e,t)}function Ft(e,t){var a,n,o,s,d,l,r=e._getSortedVisibleDatasetMetas();for(n=0,s=r.length;n<s;++n)for(o=0,d=(a=r[n].data).length;o<d;++o)(l=a[o])._view.skip||t(l)}function Br(e,t){var r=[];return Ft(e,function(a){a.inRange(t.x,t.y)&&r.push(a)}),r}function Hr(e,t,r,a){var n=Number.POSITIVE_INFINITY,o=[];return Ft(e,function(s){if(!r||s.inRange(t.x,t.y)){var d=s.getCenterPoint(),l=a(t,d);l<n?(o=[s],n=l):l===n&&o.push(s)}}),o}function Vr(e){var t=-1!==e.indexOf("x"),r=-1!==e.indexOf("y");return function(a,n){var o=t?Math.abs(a.x-n.x):0,s=r?Math.abs(a.y-n.y):0;return Math.sqrt(Math.pow(o,2)+Math.pow(s,2))}}function Ur(e,t,r){var a=et(t,e);r.axis=r.axis||"x";var n=Vr(r.axis),o=r.intersect?Br(e,a):Hr(e,a,!1,n),s=[];return o.length?(e._getSortedVisibleDatasetMetas().forEach(function(d){var l=d.data[o[0]._index];l&&!l._view.skip&&s.push(l)}),s):[]}var vt={modes:{single:function(e,t){var r=et(t,e),a=[];return Ft(e,function(n){if(n.inRange(r.x,r.y))return a.push(n),a}),a.slice(0,1)},label:Ur,index:Ur,dataset:function(e,t,r){var a=et(t,e);r.axis=r.axis||"xy";var n=Vr(r.axis),o=r.intersect?Br(e,a):Hr(e,a,!1,n);return o.length>0&&(o=e.getDatasetMeta(o[0]._datasetIndex).data),o},"x-axis":function(e,t){return Ur(e,t,{intersect:!1})},point:function(e,t){return Br(e,et(t,e))},nearest:function(e,t,r){var a=et(t,e);r.axis=r.axis||"xy";var n=Vr(r.axis);return Hr(e,a,r.intersect,n)},x:function(e,t,r){var a=et(t,e),n=[],o=!1;return Ft(e,function(s){s.inXRange(a.x)&&n.push(s),s.inRange(a.x,a.y)&&(o=!0)}),r.intersect&&!o&&(n=[]),n},y:function(e,t,r){var a=et(t,e),n=[],o=!1;return Ft(e,function(s){s.inYRange(a.y)&&n.push(s),s.inRange(a.x,a.y)&&(o=!0)}),r.intersect&&!o&&(n=[]),n}}},jr=m.extend;function At(e,t){return m.where(e,function(r){return r.pos===t})}function rr(e,t){return e.sort(function(r,a){var n=t?a:r,o=t?r:a;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function cn(e,t,r,a){return Math.max(e[r],t[r])+Math.max(e[a],t[a])}function ns(e,t,r){var o,s,a=r.box,n=e.maxPadding;if(r.size&&(e[r.pos]-=r.size),r.size=r.horizontal?a.height:a.width,e[r.pos]+=r.size,a.getPadding){var d=a.getPadding();n.top=Math.max(n.top,d.top),n.left=Math.max(n.left,d.left),n.bottom=Math.max(n.bottom,d.bottom),n.right=Math.max(n.right,d.right)}if(o=t.outerWidth-cn(n,e,"left","right"),s=t.outerHeight-cn(n,e,"top","bottom"),o!==e.w||s!==e.h){e.w=o,e.h=s;var l=r.horizontal?[o,e.w]:[s,e.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function os(e,t){var r=t.maxPadding;return function a(n){var o={left:0,top:0,right:0,bottom:0};return n.forEach(function(s){o[s]=Math.max(t[s],r[s])}),o}(e?["left","right"]:["top","bottom"])}function ar(e,t,r){var n,o,s,d,l,f,a=[];for(n=0,o=e.length;n<o;++n)(d=(s=e[n]).box).update(s.width||t.w,s.height||t.h,os(s.horizontal,t)),ns(t,r,s)&&(f=!0,a.length&&(l=!0)),d.fullWidth||a.push(s);return l&&ar(a,t,r)||f}function vn(e,t,r){var s,d,l,f,a=r.padding,n=t.x,o=t.y;for(s=0,d=e.length;s<d;++s)f=(l=e[s]).box,l.horizontal?(f.left=f.fullWidth?a.left:t.left,f.right=f.fullWidth?r.outerWidth-a.right:t.left+t.w,f.top=o,f.bottom=o+f.height,f.width=f.right-f.left,o=f.bottom):(f.left=n,f.right=n+f.width,f.top=t.top,f.bottom=t.top+t.h,f.height=f.bottom-f.top,n=f.right);t.x=n,t.y=o}F._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var pe={defaults:{},addBox:function(e,t){e.boxes||(e.boxes=[]),t.fullWidth=t.fullWidth||!1,t.position=t.position||"top",t.weight=t.weight||0,t._layers=t._layers||function(){return[{z:0,draw:function(){t.draw.apply(t,arguments)}}]},e.boxes.push(t)},removeBox:function(e,t){var r=e.boxes?e.boxes.indexOf(t):-1;-1!==r&&e.boxes.splice(r,1)},configure:function(e,t,r){for(var s,a=["fullWidth","position","weight"],n=a.length,o=0;o<n;++o)r.hasOwnProperty(s=a[o])&&(t[s]=r[s])},update:function(e,t,r){if(e){var n=m.options.toPadding((e.options.layout||{}).padding),o=t-n.width,s=r-n.height,d=function as(e){var t=function ts(e){var r,a,n,t=[];for(r=0,a=(e||[]).length;r<a;++r)t.push({index:r,box:n=e[r],pos:n.position,horizontal:n.isHorizontal(),weight:n.weight});return t}(e),r=rr(At(t,"left"),!0),a=rr(At(t,"right")),n=rr(At(t,"top"),!0),o=rr(At(t,"bottom"));return{leftAndTop:r.concat(n),rightAndBottom:a.concat(o),chartArea:At(t,"chartArea"),vertical:r.concat(a),horizontal:n.concat(o)}}(e.boxes),l=d.vertical,f=d.horizontal,c=Object.freeze({outerWidth:t,outerHeight:r,padding:n,availableWidth:o,vBoxMaxWidth:o/2/l.length,hBoxMaxHeight:s/2}),v=jr({maxPadding:jr({},n),w:o,h:s,x:n.left,y:n.top},n);(function rs(e,t){var r,a,n;for(r=0,a=e.length;r<a;++r)(n=e[r]).width=n.horizontal?n.box.fullWidth&&t.availableWidth:t.vBoxMaxWidth,n.height=n.horizontal&&t.hBoxMaxHeight})(l.concat(f),c),ar(l,v,c),ar(f,v,c)&&ar(l,v,c),function is(e){var t=e.maxPadding;function r(a){var n=Math.max(t[a]-e[a],0);return e[a]+=n,n}e.y+=r("top"),e.x+=r("left"),r("right"),r("bottom")}(v),vn(d.leftAndTop,v,c),v.x+=v.w,v.y+=v.h,vn(d.rightAndBottom,v,c),e.chartArea={left:v.left,top:v.top,right:v.left+v.w,bottom:v.top+v.h},m.each(d.chartArea,function(p){var y=p.box;jr(y,e.chartArea),y.update(v.w,v.h)})}}},ds=function zi(e){return e&&e.default||e}(Object.freeze({__proto__:null,default:"/*\r\n * DOM element rendering detection\r\n * https://davidwalsh.name/detect-node-insertion\r\n */\r\n@keyframes chartjs-render-animation {\r\n\tfrom { opacity: 0.99; }\r\n\tto { opacity: 1; }\r\n}\r\n\r\n.chartjs-render-monitor {\r\n\tanimation: chartjs-render-animation 0.001s;\r\n}\r\n\r\n/*\r\n * DOM element resizing detection\r\n * https://github.com/marcj/css-element-queries\r\n */\r\n.chartjs-size-monitor,\r\n.chartjs-size-monitor-expand,\r\n.chartjs-size-monitor-shrink {\r\n\tposition: absolute;\r\n\tdirection: ltr;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\tvisibility: hidden;\r\n\tz-index: -1;\r\n}\r\n\r\n.chartjs-size-monitor-expand > div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n"})),ie="$chartjs",Gr="chartjs-",$r=Gr+"size-monitor",gn=Gr+"render-monitor",fs=Gr+"render-animation",mn=["animationstart","webkitAnimationStart"],hs={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function pn(e,t){var r=m.getStyle(e,t),a=r&&r.match(/^(\d+)(\.\d+)?px$/);return a?Number(a[1]):void 0}var vs=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("e",null,t)}catch{}return e}(),bn=!!vs&&{passive:!0};function It(e,t,r){e.addEventListener(t,r,bn)}function qr(e,t,r){e.removeEventListener(t,r,bn)}function Zr(e,t,r,a,n){return{type:e,chart:t,native:n||null,x:void 0!==r?r:null,y:void 0!==a?a:null}}function Lt(e){var t=document.createElement("div");return t.className=e||"",t}var yn={disableCSSInjection:!1,_enabled:typeof window<"u"&&typeof document<"u",_ensureLoaded:function(e){if(!this.disableCSSInjection){var t=e.getRootNode?e.getRootNode():document;!function ws(e,t){var r=e[ie]||(e[ie]={});if(!r.containsStyles){r.containsStyles=!0,t="/* Chart.js */\n"+t;var a=document.createElement("style");a.setAttribute("type","text/css"),a.appendChild(document.createTextNode(t)),e.appendChild(a)}}(t.host?t:document.head,ds)}},acquireContext:function(e,t){"string"==typeof e?e=document.getElementById(e):e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas);var r=e&&e.getContext&&e.getContext("2d");return r&&r.canvas===e?(this._ensureLoaded(e),function cs(e,t){var r=e.style,a=e.getAttribute("height"),n=e.getAttribute("width");if(e[ie]={initial:{height:a,width:n,style:{display:r.display,height:r.height,width:r.width}}},r.display=r.display||"block",null===n||""===n){var o=pn(e,"width");void 0!==o&&(e.width=o)}if(null===a||""===a)if(""===e.style.height)e.height=e.width/(t.options.aspectRatio||2);else{var s=pn(e,"height");void 0!==o&&(e.height=s)}}(e,t),r):null},releaseContext:function(e){var t=e.canvas;if(t[ie]){var r=t[ie].initial;["height","width"].forEach(function(a){var n=r[a];m.isNullOrUndef(n)?t.removeAttribute(a):t.setAttribute(a,n)}),m.each(r.style||{},function(a,n){t.style[n]=a}),t.width=t.width,delete t[ie]}},addEventListener:function(e,t,r){var a=e.canvas;if("resize"!==t){var n=r[ie]||(r[ie]={}),s=(n.proxies||(n.proxies={}))[e.id+"_"+t]=function(d){r(function gs(e,t){var r=hs[e.type]||e.type,a=m.getRelativePosition(e,t);return Zr(r,t,a.x,a.y,e)}(d,e))};It(a,t,s)}else!function _s(e,t,r){var a=e[ie]||(e[ie]={}),n=a.resizer=function ps(e){var t=1e6,r=Lt($r),a=Lt($r+"-expand"),n=Lt($r+"-shrink");a.appendChild(Lt()),n.appendChild(Lt()),r.appendChild(a),r.appendChild(n),r._reset=function(){a.scrollLeft=t,a.scrollTop=t,n.scrollLeft=t,n.scrollTop=t};var o=function(){r._reset(),e()};return It(a,"scroll",o.bind(a,"expand")),It(n,"scroll",o.bind(n,"shrink")),r}(function ms(e,t){var r=!1,a=[];return function(){a=Array.prototype.slice.call(arguments),t=t||this,r||(r=!0,m.requestAnimFrame.call(window,function(){r=!1,e.apply(t,a)}))}}(function(){if(a.resizer){var o=r.options.maintainAspectRatio&&e.parentNode,s=o?o.clientWidth:0;t(Zr("resize",r)),o&&o.clientWidth<s&&r.canvas&&t(Zr("resize",r))}}));!function bs(e,t){var r=e[ie]||(e[ie]={}),a=r.renderProxy=function(n){n.animationName===fs&&t()};m.each(mn,function(n){It(e,n,a)}),r.reflow=!!e.offsetParent,e.classList.add(gn)}(e,function(){if(a.resizer){var o=e.parentNode;o&&o!==n.parentNode&&o.insertBefore(n,o.firstChild),n._reset()}})}(a,r,e)},removeEventListener:function(e,t,r){var a=e.canvas;if("resize"!==t){var s=((r[ie]||{}).proxies||{})[e.id+"_"+t];s&&qr(a,t,s)}else!function xs(e){var t=e[ie]||{},r=t.resizer;delete t.resizer,function ys(e){var t=e[ie]||{},r=t.renderProxy;r&&(m.each(mn,function(a){qr(e,a,r)}),delete t.renderProxy),e.classList.remove(gn)}(e),r&&r.parentNode&&r.parentNode.removeChild(r)}(a)}};m.addEvent=It,m.removeEvent=qr;var ks=yn._enabled?yn:{acquireContext:function(e){return e&&e.canvas&&(e=e.canvas),e&&e.getContext("2d")||null}},gt=m.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},ks);F._set("global",{plugins:{}});var j={_plugins:[],_cacheId:0,register:function(e){var t=this._plugins;[].concat(e).forEach(function(r){-1===t.indexOf(r)&&t.push(r)}),this._cacheId++},unregister:function(e){var t=this._plugins;[].concat(e).forEach(function(r){var a=t.indexOf(r);-1!==a&&t.splice(a,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(e,t,r){var o,s,d,l,f,a=this.descriptors(e),n=a.length;for(o=0;o<n;++o)if("function"==typeof(f=(d=(s=a[o]).plugin)[t])&&((l=[e].concat(r||[])).push(s.options),!1===f.apply(d,l)))return!1;return!0},descriptors:function(e){var t=e.$plugins||(e.$plugins={});if(t.id===this._cacheId)return t.descriptors;var r=[],a=[],n=e&&e.config||{},o=n.options&&n.options.plugins||{};return this._plugins.concat(n.plugins||[]).forEach(function(s){if(-1===r.indexOf(s)){var l=s.id,f=o[l];!1!==f&&(!0===f&&(f=m.clone(F.global.plugins[l])),r.push(s),a.push({plugin:s,options:f||{}}))}}),t.descriptors=a,t.id=this._cacheId,a},_invalidate:function(e){delete e.$plugins}},Rt={constructors:{},defaults:{},registerScaleType:function(e,t,r){this.constructors[e]=t,this.defaults[e]=m.clone(r)},getScaleConstructor:function(e){return this.constructors.hasOwnProperty(e)?this.constructors[e]:void 0},getScaleDefaults:function(e){return this.defaults.hasOwnProperty(e)?m.merge(Object.create(null),[F.scale,this.defaults[e]]):{}},updateScaleDefaults:function(e,t){var r=this;r.defaults.hasOwnProperty(e)&&(r.defaults[e]=m.extend(r.defaults[e],t))},addScalesToLayout:function(e){m.each(e.scales,function(t){t.fullWidth=t.options.fullWidth,t.position=t.options.position,t.weight=t.options.weight,pe.addBox(e,t)})}},Ie=m.valueOrDefault,Xr=m.rtl.getRtlAdapter;F._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:m.noop,title:function(e,t){var r="",a=t.labels,n=a?a.length:0;if(e.length>0){var o=e[0];o.label?r=o.label:o.xLabel?r=o.xLabel:n>0&&o.index<n&&(r=a[o.index])}return r},afterTitle:m.noop,beforeBody:m.noop,beforeLabel:m.noop,label:function(e,t){var r=t.datasets[e.datasetIndex].label||"";return r&&(r+=": "),m.isNullOrUndef(e.value)?r+=e.yLabel:r+=e.value,r},labelColor:function(e,t){var n=t.getDatasetMeta(e.datasetIndex).data[e.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:m.noop,afterBody:m.noop,beforeFooter:m.noop,footer:m.noop,afterFooter:m.noop}}});var _n={average:function(e){if(!e.length)return!1;var t,r,a=0,n=0,o=0;for(t=0,r=e.length;t<r;++t){var s=e[t];if(s&&s.hasValue()){var d=s.tooltipPosition();a+=d.x,n+=d.y,++o}}return{x:a/o,y:n/o}},nearest:function(e,t){var o,s,d,r=t.x,a=t.y,n=Number.POSITIVE_INFINITY;for(o=0,s=e.length;o<s;++o){var l=e[o];if(l&&l.hasValue()){var f=l.getCenterPoint(),c=m.distanceBetweenPoints(t,f);c<n&&(n=c,d=l)}}if(d){var v=d.tooltipPosition();r=v.x,a=v.y}return{x:r,y:a}}};function Ce(e,t){return t&&(m.isArray(t)?Array.prototype.push.apply(e,t):e.push(t)),e}function Le(e){return("string"==typeof e||e instanceof String)&&e.indexOf("\n")>-1?e.split("\n"):e}function Ms(e){var t=e._xScale,r=e._yScale||e._scale,a=e._index,n=e._datasetIndex,o=e._chart.getDatasetMeta(n).controller,s=o._getIndexScale(),d=o._getValueScale();return{xLabel:t?t.getLabelForIndex(a,n):"",yLabel:r?r.getLabelForIndex(a,n):"",label:s?""+s.getLabelForIndex(a,n):"",value:d?""+d.getLabelForIndex(a,n):"",index:a,datasetIndex:n,x:e._model.x,y:e._model.y}}function xn(e){var t=F.global;return{xPadding:e.xPadding,yPadding:e.yPadding,xAlign:e.xAlign,yAlign:e.yAlign,rtl:e.rtl,textDirection:e.textDirection,bodyFontColor:e.bodyFontColor,_bodyFontFamily:Ie(e.bodyFontFamily,t.defaultFontFamily),_bodyFontStyle:Ie(e.bodyFontStyle,t.defaultFontStyle),_bodyAlign:e.bodyAlign,bodyFontSize:Ie(e.bodyFontSize,t.defaultFontSize),bodySpacing:e.bodySpacing,titleFontColor:e.titleFontColor,_titleFontFamily:Ie(e.titleFontFamily,t.defaultFontFamily),_titleFontStyle:Ie(e.titleFontStyle,t.defaultFontStyle),titleFontSize:Ie(e.titleFontSize,t.defaultFontSize),_titleAlign:e.titleAlign,titleSpacing:e.titleSpacing,titleMarginBottom:e.titleMarginBottom,footerFontColor:e.footerFontColor,_footerFontFamily:Ie(e.footerFontFamily,t.defaultFontFamily),_footerFontStyle:Ie(e.footerFontStyle,t.defaultFontStyle),footerFontSize:Ie(e.footerFontSize,t.defaultFontSize),_footerAlign:e.footerAlign,footerSpacing:e.footerSpacing,footerMarginTop:e.footerMarginTop,caretSize:e.caretSize,cornerRadius:e.cornerRadius,backgroundColor:e.backgroundColor,opacity:0,legendColorBackground:e.multiKeyBackground,displayColors:e.displayColors,borderColor:e.borderColor,borderWidth:e.borderWidth}}function nr(e,t){return"center"===t?e.x+e.width/2:"right"===t?e.x+e.width-e.xPadding:e.x+e.xPadding}function wn(e){return Ce([],Le(e))}var Cs=De.extend({initialize:function(){this._model=xn(this._options),this._lastActive=[]},getTitle:function(){var e=this,r=e._options.callbacks,a=r.beforeTitle.apply(e,arguments),n=r.title.apply(e,arguments),o=r.afterTitle.apply(e,arguments),s=[];return s=Ce(s,Le(a)),s=Ce(s,Le(n)),Ce(s,Le(o))},getBeforeBody:function(){return wn(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(e,t){var r=this,a=r._options.callbacks,n=[];return m.each(e,function(o){var s={before:[],lines:[],after:[]};Ce(s.before,Le(a.beforeLabel.call(r,o,t))),Ce(s.lines,a.label.call(r,o,t)),Ce(s.after,Le(a.afterLabel.call(r,o,t))),n.push(s)}),n},getAfterBody:function(){return wn(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var e=this,t=e._options.callbacks,r=t.beforeFooter.apply(e,arguments),a=t.footer.apply(e,arguments),n=t.afterFooter.apply(e,arguments),o=[];return o=Ce(o,Le(r)),o=Ce(o,Le(a)),Ce(o,Le(n))},update:function(e){var v,p,t=this,r=t._options,a=t._model,n=t._model=xn(r),o=t._active,s=t._data,d={xAlign:a.xAlign,yAlign:a.yAlign},l={x:a.x,y:a.y},f={width:a.width,height:a.height},c={x:a.caretX,y:a.caretY};if(o.length){n.opacity=1;var y=[],_=[];c=_n[r.position].call(t,o,t._eventPosition);var w=[];for(v=0,p=o.length;v<p;++v)w.push(Ms(o[v]));r.filter&&(w=w.filter(function(x){return r.filter(x,s)})),r.itemSort&&(w=w.sort(function(x,M){return r.itemSort(x,M,s)})),m.each(w,function(x){y.push(r.callbacks.labelColor.call(t,x,t._chart)),_.push(r.callbacks.labelTextColor.call(t,x,t._chart))}),n.title=t.getTitle(w,s),n.beforeBody=t.getBeforeBody(w,s),n.body=t.getBody(w,s),n.afterBody=t.getAfterBody(w,s),n.footer=t.getFooter(w,s),n.x=c.x,n.y=c.y,n.caretPadding=r.caretPadding,n.labelColors=y,n.labelTextColors=_,n.dataPoints=w,f=function Ss(e,t){var r=e._chart.ctx,a=2*t.yPadding,n=0,o=t.body,s=o.reduce(function(_,w){return _+w.before.length+w.lines.length+w.after.length},0),d=t.title.length,l=t.footer.length,f=t.titleFontSize,c=t.bodyFontSize,v=t.footerFontSize;a+=d*f,a+=d?(d-1)*t.titleSpacing:0,a+=d?t.titleMarginBottom:0,a+=(s+=t.beforeBody.length+t.afterBody.length)*c,a+=s?(s-1)*t.bodySpacing:0,a+=l?t.footerMarginTop:0,a+=l*v,a+=l?(l-1)*t.footerSpacing:0;var p=0,y=function(_){n=Math.max(n,r.measureText(_).width+p)};return r.font=m.fontString(f,t._titleFontStyle,t._titleFontFamily),m.each(t.title,y),r.font=m.fontString(c,t._bodyFontStyle,t._bodyFontFamily),m.each(t.beforeBody.concat(t.afterBody),y),p=t.displayColors?c+2:0,m.each(o,function(_){m.each(_.before,y),m.each(_.lines,y),m.each(_.after,y)}),p=0,r.font=m.fontString(v,t._footerFontStyle,t._footerFontFamily),m.each(t.footer,y),{width:n+=2*t.xPadding,height:a}}(this,n),d=function Ds(e,t){var r=e._model,a=e._chart,n=e._chart.chartArea,o="center",s="center";r.y<t.height?s="top":r.y>a.height-t.height&&(s="bottom");var d,l,f,c,v,p=(n.left+n.right)/2,y=(n.top+n.bottom)/2;"center"===s?(d=function(w){return w<=p},l=function(w){return w>p}):(d=function(w){return w<=t.width/2},l=function(w){return w>=a.width-t.width/2}),f=function(w){return w+t.width+r.caretSize+r.caretPadding>a.width},c=function(w){return w-t.width-r.caretSize-r.caretPadding<0},v=function(w){return w<=y?"top":"bottom"},d(r.x)?(o="left",f(r.x)&&(o="center",s=v(r.y))):l(r.x)&&(o="right",c(r.x)&&(o="center",s=v(r.y)));var _=e._options;return{xAlign:_.xAlign?_.xAlign:o,yAlign:_.yAlign?_.yAlign:s}}(this,f),l=function Ts(e,t,r,a){var n=e.x,o=e.y,d=e.caretPadding,f=r.xAlign,c=r.yAlign,v=e.caretSize+d,p=e.cornerRadius+d;return"right"===f?n-=t.width:"center"===f&&((n-=t.width/2)+t.width>a.width&&(n=a.width-t.width),n<0&&(n=0)),"top"===c?o+=v:o-="bottom"===c?t.height+v:t.height/2,"center"===c?"left"===f?n+=v:"right"===f&&(n-=v):"left"===f?n-=p:"right"===f&&(n+=p),{x:n,y:o}}(n,f,d,t._chart)}else n.opacity=0;return n.xAlign=d.xAlign,n.yAlign=d.yAlign,n.x=l.x,n.y=l.y,n.width=f.width,n.height=f.height,n.caretX=c.x,n.caretY=c.y,t._model=n,e&&r.custom&&r.custom.call(t,n),t},drawCaret:function(e,t){var r=this._chart.ctx,n=this.getCaretPosition(e,t,this._view);r.lineTo(n.x1,n.y1),r.lineTo(n.x2,n.y2),r.lineTo(n.x3,n.y3)},getCaretPosition:function(e,t,r){var a,n,o,s,d,l,f=r.caretSize,c=r.cornerRadius,v=r.xAlign,p=r.yAlign,y=e.x,_=e.y,w=t.width,x=t.height;if("center"===p)d=_+x/2,"left"===v?(n=(a=y)-f,o=a,s=d+f,l=d-f):(n=(a=y+w)+f,o=a,s=d-f,l=d+f);else if("left"===v?(a=(n=y+c+f)-f,o=n+f):"right"===v?(a=(n=y+w-c-f)-f,o=n+f):(a=(n=r.caretX)-f,o=n+f),"top"===p)d=(s=_)-f,l=s;else{d=(s=_+x)+f,l=s;var M=o;o=a,a=M}return{x1:a,x2:n,x3:o,y1:s,y2:d,y3:l}},drawTitle:function(e,t,r){var o,s,d,a=t.title,n=a.length;if(n){var l=Xr(t.rtl,t.x,t.width);for(e.x=nr(t,t._titleAlign),r.textAlign=l.textAlign(t._titleAlign),r.textBaseline="middle",o=t.titleFontSize,s=t.titleSpacing,r.fillStyle=t.titleFontColor,r.font=m.fontString(o,t._titleFontStyle,t._titleFontFamily),d=0;d<n;++d)r.fillText(a[d],l.x(e.x),e.y+o/2),e.y+=o+s,d+1===n&&(e.y+=t.titleMarginBottom-s)}},drawBody:function(e,t,r){var p,y,_,w,x,M,T,C,a=t.bodyFontSize,n=t.bodySpacing,o=t._bodyAlign,s=t.body,d=t.displayColors,l=0,f=d?nr(t,"left"):0,c=Xr(t.rtl,t.x,t.width),v=function(z){r.fillText(z,c.x(e.x+l),e.y+a/2),e.y+=a+n},I=c.textAlign(o);for(r.textAlign=o,r.textBaseline="middle",r.font=m.fontString(a,t._bodyFontStyle,t._bodyFontFamily),e.x=nr(t,I),r.fillStyle=t.bodyFontColor,m.each(t.beforeBody,v),l=d&&"right"!==I?"center"===o?a/2+1:a+2:0,x=0,T=s.length;x<T;++x){for(p=s[x],_=t.labelColors[x],r.fillStyle=y=t.labelTextColors[x],m.each(p.before,v),M=0,C=(w=p.lines).length;M<C;++M){if(d){var A=c.x(f);r.fillStyle=t.legendColorBackground,r.fillRect(c.leftForLtr(A,a),e.y,a,a),r.lineWidth=1,r.strokeStyle=_.borderColor,r.strokeRect(c.leftForLtr(A,a),e.y,a,a),r.fillStyle=_.backgroundColor,r.fillRect(c.leftForLtr(c.xPlus(A,1),a-2),e.y+1,a-2,a-2),r.fillStyle=y}v(w[M])}m.each(p.after,v)}l=0,m.each(t.afterBody,v),e.y-=n},drawFooter:function(e,t,r){var o,s,a=t.footer,n=a.length;if(n){var d=Xr(t.rtl,t.x,t.width);for(e.x=nr(t,t._footerAlign),e.y+=t.footerMarginTop,r.textAlign=d.textAlign(t._footerAlign),r.textBaseline="middle",o=t.footerFontSize,r.fillStyle=t.footerFontColor,r.font=m.fontString(o,t._footerFontStyle,t._footerFontFamily),s=0;s<n;++s)r.fillText(a[s],d.x(e.x),e.y+o/2),e.y+=o+t.footerSpacing}},drawBackground:function(e,t,r,a){r.fillStyle=t.backgroundColor,r.strokeStyle=t.borderColor,r.lineWidth=t.borderWidth;var n=t.xAlign,o=t.yAlign,s=e.x,d=e.y,l=a.width,f=a.height,c=t.cornerRadius;r.beginPath(),r.moveTo(s+c,d),"top"===o&&this.drawCaret(e,a),r.lineTo(s+l-c,d),r.quadraticCurveTo(s+l,d,s+l,d+c),"center"===o&&"right"===n&&this.drawCaret(e,a),r.lineTo(s+l,d+f-c),r.quadraticCurveTo(s+l,d+f,s+l-c,d+f),"bottom"===o&&this.drawCaret(e,a),r.lineTo(s+c,d+f),r.quadraticCurveTo(s,d+f,s,d+f-c),"center"===o&&"left"===n&&this.drawCaret(e,a),r.lineTo(s,d+c),r.quadraticCurveTo(s,d,s+c,d),r.closePath(),r.fill(),t.borderWidth>0&&r.stroke()},draw:function(){var e=this._chart.ctx,t=this._view;if(0!==t.opacity){var r={width:t.width,height:t.height},a={x:t.x,y:t.y},n=Math.abs(t.opacity<.001)?0:t.opacity;this._options.enabled&&(t.title.length||t.beforeBody.length||t.body.length||t.afterBody.length||t.footer.length)&&(e.save(),e.globalAlpha=n,this.drawBackground(a,t,e,r),a.y+=t.yPadding,m.rtl.overrideTextDirection(e,t.textDirection),this.drawTitle(a,t,e),this.drawBody(a,t,e),this.drawFooter(a,t,e),m.rtl.restoreTextDirection(e,t.textDirection),e.restore())}},handleEvent:function(e){var a,t=this,r=t._options;return t._lastActive=t._lastActive||[],"mouseout"===e.type?t._active=[]:(t._active=t._chart.getElementsAtEventForMode(e,r.mode,r),r.reverse&&t._active.reverse()),(a=!m.arrayEquals(t._active,t._lastActive))&&(t._lastActive=t._active,(r.enabled||r.custom)&&(t._eventPosition={x:e.x,y:e.y},t.update(!0),t.pivot())),a}}),Kr=Cs;Kr.positioners=_n;var Jr=m.valueOrDefault;function kn(){return m.merge(Object.create(null),[].slice.call(arguments),{merger:function(e,t,r,a){if("xAxes"===e||"yAxes"===e){var o,s,d,n=r[e].length;for(t[e]||(t[e]=[]),o=0;o<n;++o)s=Jr((d=r[e][o]).type,"xAxes"===e?"category":"linear"),o>=t[e].length&&t[e].push({}),m.merge(t[e][o],!t[e][o].type||d.type&&d.type!==t[e][o].type?[Rt.getScaleDefaults(s),d]:d)}else m._merger(e,t,r,a)}})}function Qr(){return m.merge(Object.create(null),[].slice.call(arguments),{merger:function(e,t,r,a){var n=t[e]||Object.create(null),o=r[e];"scales"===e?t[e]=kn(n,o):"scale"===e?t[e]=m.merge(n,[Rt.getScaleDefaults(o.type),o]):m._merger(e,t,r,a)}})}function Mn(e,t,r){var a,n=function(o){return o.id===a};do{a=t+r++}while(m.findIndex(e,n)>=0);return a}function Sn(e){return"top"===e||"bottom"===e}function Dn(e,t){return function(r,a){return r[e]===a[e]?r[t]-a[t]:r[e]-a[e]}}F._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Ve=function(e,t){return this.construct(e,t),this};m.extend(Ve.prototype,{construct:function(e,t){var r=this;t=function Os(e){var t=(e=e||Object.create(null)).data=e.data||{};return t.datasets=t.datasets||[],t.labels=t.labels||[],e.options=Qr(F.global,F[e.type],e.options||{}),e}(t);var a=gt.acquireContext(e,t),n=a&&a.canvas,o=n&&n.height,s=n&&n.width;r.id=m.uid(),r.ctx=a,r.canvas=n,r.config=t,r.width=s,r.height=o,r.aspectRatio=o?s/o:null,r.options=t.options,r._bufferedRender=!1,r._layers=[],r.chart=r,r.controller=r,Ve.instances[r.id]=r,Object.defineProperty(r,"data",{get:function(){return r.config.data},set:function(d){r.config.data=d}}),a&&n?(r.initialize(),r.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var e=this;return j.notify(e,"beforeInit"),m.retinaScale(e,e.options.devicePixelRatio),e.bindEvents(),e.options.responsive&&e.resize(!0),e.initToolTip(),j.notify(e,"afterInit"),e},clear:function(){return m.canvas.clear(this),this},stop:function(){return Nr.cancelAnimation(this),this},resize:function(e){var t=this,r=t.options,a=t.canvas,n=r.maintainAspectRatio&&t.aspectRatio||null,o=Math.max(0,Math.floor(m.getMaximumWidth(a))),s=Math.max(0,Math.floor(n?o/n:m.getMaximumHeight(a)));if((t.width!==o||t.height!==s)&&(a.width=t.width=o,a.height=t.height=s,a.style.width=o+"px",a.style.height=s+"px",m.retinaScale(t,r.devicePixelRatio),!e)){var d={width:o,height:s};j.notify(t,"resize",[d]),r.onResize&&r.onResize(t,d),t.stop(),t.update({duration:r.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var e=this.options,t=e.scales||{},r=e.scale;m.each(t.xAxes,function(a,n){a.id||(a.id=Mn(t.xAxes,"x-axis-",n))}),m.each(t.yAxes,function(a,n){a.id||(a.id=Mn(t.yAxes,"y-axis-",n))}),r&&(r.id=r.id||"scale")},buildOrUpdateScales:function(){var e=this,t=e.options,r=e.scales||{},a=[],n=Object.keys(r).reduce(function(o,s){return o[s]=!1,o},{});t.scales&&(a=a.concat((t.scales.xAxes||[]).map(function(o){return{options:o,dtype:"category",dposition:"bottom"}}),(t.scales.yAxes||[]).map(function(o){return{options:o,dtype:"linear",dposition:"left"}}))),t.scale&&a.push({options:t.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),m.each(a,function(o){var s=o.options,d=s.id,l=Jr(s.type,o.dtype);Sn(s.position)!==Sn(o.dposition)&&(s.position=o.dposition),n[d]=!0;var f=null;if(d in r&&r[d].type===l)(f=r[d]).options=s,f.ctx=e.ctx,f.chart=e;else{var c=Rt.getScaleConstructor(l);if(!c)return;f=new c({id:d,type:l,options:s,ctx:e.ctx,chart:e}),r[f.id]=f}f.mergeTicksOptions(),o.isDefault&&(e.scale=f)}),m.each(n,function(o,s){o||delete r[s]}),e.scales=r,Rt.addScalesToLayout(this)},buildOrUpdateControllers:function(){var a,n,e=this,t=[],r=e.data.datasets;for(a=0,n=r.length;a<n;a++){var o=r[a],s=e.getDatasetMeta(a),d=o.type||e.config.type;if(s.type&&s.type!==d&&(e.destroyDatasetMeta(a),s=e.getDatasetMeta(a)),s.type=d,s.order=o.order||0,s.index=a,s.controller)s.controller.updateIndex(a),s.controller.linkScales();else{var l=hn[s.type];if(void 0===l)throw new Error('"'+s.type+'" is not a chart type.');s.controller=new l(e,a),t.push(s.controller)}}return t},resetElements:function(){var e=this;m.each(e.data.datasets,function(t,r){e.getDatasetMeta(r).controller.reset()},e)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(e){var r,a,t=this;if((!e||"object"!=typeof e)&&(e={duration:e,lazy:arguments[1]}),function Fs(e){var t=e.options;m.each(e.scales,function(r){pe.removeBox(e,r)}),t=Qr(F.global,F[e.config.type],t),e.options=e.config.options=t,e.ensureScalesHaveIDs(),e.buildOrUpdateScales(),e.tooltip._options=t.tooltips,e.tooltip.initialize()}(t),j._invalidate(t),!1!==j.notify(t,"beforeUpdate")){t.tooltip._data=t.data;var n=t.buildOrUpdateControllers();for(r=0,a=t.data.datasets.length;r<a;r++)t.getDatasetMeta(r).controller.buildOrUpdateElements();t.updateLayout(),t.options.animation&&t.options.animation.duration&&m.each(n,function(o){o.reset()}),t.updateDatasets(),t.tooltip.initialize(),t.lastActive=[],j.notify(t,"afterUpdate"),t._layers.sort(Dn("z","_idx")),t._bufferedRender?t._bufferedRequest={duration:e.duration,easing:e.easing,lazy:e.lazy}:t.render(e)}},updateLayout:function(){var e=this;!1!==j.notify(e,"beforeLayout")&&(pe.update(this,this.width,this.height),e._layers=[],m.each(e.boxes,function(t){t._configure&&t._configure(),e._layers.push.apply(e._layers,t._layers())},e),e._layers.forEach(function(t,r){t._idx=r}),j.notify(e,"afterScaleUpdate"),j.notify(e,"afterLayout"))},updateDatasets:function(){var e=this;if(!1!==j.notify(e,"beforeDatasetsUpdate")){for(var t=0,r=e.data.datasets.length;t<r;++t)e.updateDataset(t);j.notify(e,"afterDatasetsUpdate")}},updateDataset:function(e){var t=this,r=t.getDatasetMeta(e),a={meta:r,index:e};!1!==j.notify(t,"beforeDatasetUpdate",[a])&&(r.controller._update(),j.notify(t,"afterDatasetUpdate",[a]))},render:function(e){var t=this;(!e||"object"!=typeof e)&&(e={duration:e,lazy:arguments[1]});var r=t.options.animation,a=Jr(e.duration,r&&r.duration),n=e.lazy;if(!1!==j.notify(t,"beforeRender")){var o=function(d){j.notify(t,"afterRender"),m.callback(r&&r.onComplete,[d],t)};if(r&&a){var s=new Wr({numSteps:a/16.66,easing:e.easing||r.easing,render:function(d,l){var c=l.currentStep,v=c/l.numSteps;d.draw((0,m.easing.effects[l.easing])(v),v,c)},onAnimationProgress:r.onProgress,onAnimationComplete:o});Nr.addAnimation(t,s,a,n)}else t.draw(),o(new Wr({numSteps:0,chart:t}));return t}},draw:function(e){var r,a,t=this;if(t.clear(),m.isNullOrUndef(e)&&(e=1),t.transition(e),!(t.width<=0||t.height<=0)&&!1!==j.notify(t,"beforeDraw",[e])){for(a=t._layers,r=0;r<a.length&&a[r].z<=0;++r)a[r].draw(t.chartArea);for(t.drawDatasets(e);r<a.length;++r)a[r].draw(t.chartArea);t._drawTooltip(e),j.notify(t,"afterDraw",[e])}},transition:function(e){for(var t=this,r=0,a=(t.data.datasets||[]).length;r<a;++r)t.isDatasetVisible(r)&&t.getDatasetMeta(r).controller.transition(e);t.tooltip.transition(e)},_getSortedDatasetMetas:function(e){var n,o,t=this,a=[];for(n=0,o=(t.data.datasets||[]).length;n<o;++n)(!e||t.isDatasetVisible(n))&&a.push(t.getDatasetMeta(n));return a.sort(Dn("order","index")),a},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(e){var r,a,t=this;if(!1!==j.notify(t,"beforeDatasetsDraw",[e])){for(a=(r=t._getSortedVisibleDatasetMetas()).length-1;a>=0;--a)t.drawDataset(r[a],e);j.notify(t,"afterDatasetsDraw",[e])}},drawDataset:function(e,t){var a={meta:e,index:e.index,easingValue:t};!1!==j.notify(this,"beforeDatasetDraw",[a])&&(e.controller.draw(t),j.notify(this,"afterDatasetDraw",[a]))},_drawTooltip:function(e){var t=this,r=t.tooltip,a={tooltip:r,easingValue:e};!1!==j.notify(t,"beforeTooltipDraw",[a])&&(r.draw(),j.notify(t,"afterTooltipDraw",[a]))},getElementAtEvent:function(e){return vt.modes.single(this,e)},getElementsAtEvent:function(e){return vt.modes.label(this,e,{intersect:!0})},getElementsAtXAxis:function(e){return vt.modes["x-axis"](this,e,{intersect:!0})},getElementsAtEventForMode:function(e,t,r){var a=vt.modes[t];return"function"==typeof a?a(this,e,r):[]},getDatasetAtEvent:function(e){return vt.modes.dataset(this,e,{intersect:!0})},getDatasetMeta:function(e){var t=this,r=t.data.datasets[e];r._meta||(r._meta={});var a=r._meta[t.id];return a||(a=r._meta[t.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:r.order||0,index:e}),a},getVisibleDatasetCount:function(){for(var e=0,t=0,r=this.data.datasets.length;t<r;++t)this.isDatasetVisible(t)&&e++;return e},isDatasetVisible:function(e){var t=this.getDatasetMeta(e);return"boolean"==typeof t.hidden?!t.hidden:!this.data.datasets[e].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(e){var t=this.id,r=this.data.datasets[e],a=r._meta&&r._meta[t];a&&(a.controller.destroy(),delete r._meta[t])},destroy:function(){var r,a,e=this,t=e.canvas;for(e.stop(),r=0,a=e.data.datasets.length;r<a;++r)e.destroyDatasetMeta(r);t&&(e.unbindEvents(),m.canvas.clear(e),gt.releaseContext(e.ctx),e.canvas=null,e.ctx=null),j.notify(e,"destroy"),delete Ve.instances[e.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var e=this;e.tooltip=new Kr({_chart:e,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e)},bindEvents:function(){var e=this,t=e._listeners={},r=function(){e.eventHandler.apply(e,arguments)};m.each(e.options.events,function(a){gt.addEventListener(e,a,r),t[a]=r}),e.options.responsive&&(r=function(){e.resize()},gt.addEventListener(e,"resize",r),t.resize=r)},unbindEvents:function(){var e=this,t=e._listeners;t&&(delete e._listeners,m.each(t,function(r,a){gt.removeEventListener(e,a,r)}))},updateHoverStyle:function(e,t,r){var n,o,s,a=r?"set":"remove";for(o=0,s=e.length;o<s;++o)(n=e[o])&&this.getDatasetMeta(n._datasetIndex).controller[a+"HoverStyle"](n);"dataset"===t&&this.getDatasetMeta(e[0]._datasetIndex).controller["_"+a+"DatasetHoverStyle"]()},eventHandler:function(e){var t=this,r=t.tooltip;if(!1!==j.notify(t,"beforeEvent",[e])){t._bufferedRender=!0,t._bufferedRequest=null;var a=t.handleEvent(e);r&&(a=r._start?r.handleEvent(e):a|r.handleEvent(e)),j.notify(t,"afterEvent",[e]);var n=t._bufferedRequest;return n?t.render(n):a&&!t.animating&&(t.stop(),t.render({duration:t.options.hover.animationDuration,lazy:!0})),t._bufferedRender=!1,t._bufferedRequest=null,t}},handleEvent:function(e){var n,t=this,r=t.options||{},a=r.hover;return t.lastActive=t.lastActive||[],t.active="mouseout"===e.type?[]:t.getElementsAtEventForMode(e,a.mode,a),m.callback(r.onHover||r.hover.onHover,[e.native,t.active],t),("mouseup"===e.type||"click"===e.type)&&r.onClick&&r.onClick.call(t,e.native,t.active),t.lastActive.length&&t.updateHoverStyle(t.lastActive,a.mode,!1),t.active.length&&a.mode&&t.updateHoverStyle(t.active,a.mode,!0),n=!m.arrayEquals(t.active,t.lastActive),t.lastActive=t.active,n}}),Ve.instances={};var W=Ve;function tt(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function ir(e){this.options=e||{}}Ve.Controller=Ve,Ve.types={},m.configMerge=Qr,m.scaleMerge=kn,m.extend(ir.prototype,{formats:tt,parse:tt,format:tt,add:tt,diff:tt,startOf:tt,endOf:tt,_create:function(e){return e}}),ir.override=function(e){m.extend(ir.prototype,e)};var ea={_date:ir},Wt={formatters:{values:function(e){return m.isArray(e)?e:""+e},linear:function(e,t,r){var a=r.length>3?r[2]-r[1]:r[1]-r[0];Math.abs(a)>1&&e!==Math.floor(e)&&(a=e-Math.floor(e));var n=m.log10(Math.abs(a)),o="";if(0!==e)if(Math.max(Math.abs(r[0]),Math.abs(r[r.length-1]))<1e-4){var d=m.log10(Math.abs(e)),l=Math.floor(d)-Math.floor(n);l=Math.max(Math.min(l,20),0),o=e.toExponential(l)}else{var f=-1*Math.floor(n);f=Math.max(Math.min(f,20),0),o=e.toFixed(f)}else o="0";return o},logarithmic:function(e,t,r){var a=e/Math.pow(10,Math.floor(m.log10(e)));return 0===e?"0":1===a||2===a||5===a||0===t||t===r.length-1?e.toExponential():""}}},rt=m.isArray,Nt=m.isNullOrUndef,at=m.valueOrDefault,mt=m.valueAtIndexOrDefault;function Rs(e,t,r){var f,a=e.getTicks().length,n=Math.min(t,a-1),o=e.getPixelForTick(n),s=e._startPixel,d=e._endPixel,l=1e-6;if(!(r&&(f=1===a?Math.max(o-s,d-o):0===t?(e.getPixelForTick(1)-o)/2:(o-e.getPixelForTick(n-1))/2,o+=n<t?f:-f,o<s-l||o>d+l)))return o}function Yt(e){return e.drawTicks?e.tickMarkLength:0}function ta(e){var t,r;return e.display?(t=m.options._parseFont(e),r=m.options.toPadding(e.padding),t.lineHeight+r.height):0}function Tn(e,t){return m.extend(m.options._parseFont({fontFamily:at(t.fontFamily,e.fontFamily),fontSize:at(t.fontSize,e.fontSize),fontStyle:at(t.fontStyle,e.fontStyle),lineHeight:at(t.lineHeight,e.lineHeight)}),{color:m.options.resolve([t.fontColor,e.fontColor,F.global.defaultFontColor])})}function ra(e){var t=Tn(e,e.minor);return{minor:t,major:e.major.enabled?Tn(e,e.major):t}}function aa(e){var r,a,n,t=[];for(a=0,n=e.length;a<n;++a)typeof(r=e[a])._index<"u"&&t.push(r);return t}function or(e,t,r,a){var d,l,f,c,n=at(r,0),o=Math.min(at(a,e.length),e.length),s=0;for(t=Math.ceil(t),a&&(t=(d=a-r)/Math.floor(d/t)),c=n;c<0;)s++,c=Math.round(n+s*t);for(l=Math.max(n,0);l<o;l++)f=e[l],l===c?(f._index=l,s++,c=Math.round(n+s*t)):delete f.label}F._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Wt.formatters.values,minor:{},major:{}}});var na=De.extend({zeroLineIndex:0,getPadding:function(){var e=this;return{left:e.paddingLeft||0,top:e.paddingTop||0,right:e.paddingRight||0,bottom:e.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){m.callback(this.options.beforeUpdate,[this])},update:function(e,t,r){var s,d,l,f,c,a=this,n=a.options.ticks,o=n.sampleSize;if(a.beforeUpdate(),a.maxWidth=e,a.maxHeight=t,a.margins=m.extend({left:0,right:0,top:0,bottom:0},r),a._ticks=null,a.ticks=null,a._labelSizes=null,a._maxLabelLines=0,a.longestLabelWidth=0,a.longestTextCache=a.longestTextCache||{},a._gridLineItems=null,a._labelItems=null,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeDataLimits(),a.determineDataLimits(),a.afterDataLimits(),a.beforeBuildTicks(),f=a.buildTicks()||[],(!(f=a.afterBuildTicks(f)||f)||!f.length)&&a.ticks)for(f=[],s=0,d=a.ticks.length;s<d;++s)f.push({value:a.ticks[s],major:!1});return a._ticks=f,l=a._convertTicksToLabels((c=o<f.length)?function Ls(e,t){for(var r=[],a=e.length/t,n=0,o=e.length;n<o;n+=a)r.push(e[Math.floor(n)]);return r}(f,o):f),a._configure(),a.beforeCalculateTickRotation(),a.calculateTickRotation(),a.afterCalculateTickRotation(),a.beforeFit(),a.fit(),a.afterFit(),a._ticksToDraw=n.display&&(n.autoSkip||"auto"===n.source)?a._autoSkip(f):f,c&&(l=a._convertTicksToLabels(a._ticksToDraw)),a.ticks=l,a.afterUpdate(),a.minSize},_configure:function(){var r,a,e=this,t=e.options.ticks.reverse;e.isHorizontal()?(r=e.left,a=e.right):(r=e.top,a=e.bottom,t=!t),e._startPixel=r,e._endPixel=a,e._reversePixels=t,e._length=a-r},afterUpdate:function(){m.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){m.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var e=this;e.isHorizontal()?(e.width=e.maxWidth,e.left=0,e.right=e.width):(e.height=e.maxHeight,e.top=0,e.bottom=e.height),e.paddingLeft=0,e.paddingTop=0,e.paddingRight=0,e.paddingBottom=0},afterSetDimensions:function(){m.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){m.callback(this.options.beforeDataLimits,[this])},determineDataLimits:m.noop,afterDataLimits:function(){m.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){m.callback(this.options.beforeBuildTicks,[this])},buildTicks:m.noop,afterBuildTicks:function(e){var t=this;return rt(e)&&e.length?m.callback(t.options.afterBuildTicks,[t,e]):(t.ticks=m.callback(t.options.afterBuildTicks,[t,t.ticks])||t.ticks,e)},beforeTickToLabelConversion:function(){m.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var e=this,t=e.options.ticks;e.ticks=e.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){m.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){m.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var d,l,f,c,v,p,y,e=this,t=e.options,r=t.ticks,a=e.getTicks().length,n=r.minRotation||0,o=r.maxRotation,s=n;!e._isVisible()||!r.display||n>=o||a<=1||!e.isHorizontal()?e.labelRotation=n:(l=(d=e._getLabelSizes()).widest.width,f=d.highest.height-d.highest.offset,c=Math.min(e.maxWidth,e.chart.width-l),l+6>(v=t.offset?e.maxWidth/a:c/(a-1))&&(v=c/(a-(t.offset?.5:1)),p=e.maxHeight-Yt(t.gridLines)-r.padding-ta(t.scaleLabel),y=Math.sqrt(l*l+f*f),s=m.toDegrees(Math.min(Math.asin(Math.min((d.highest.height+6)/v,1)),Math.asin(Math.min(p/y,1))-Math.asin(f/y))),s=Math.max(n,Math.min(o,s))),e.labelRotation=s)},afterCalculateTickRotation:function(){m.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){m.callback(this.options.beforeFit,[this])},fit:function(){var e=this,t=e.minSize={width:0,height:0},r=e.chart,a=e.options,n=a.ticks,o=a.scaleLabel,s=a.gridLines,d=e._isVisible(),l="bottom"===a.position,f=e.isHorizontal();if(f?t.width=e.maxWidth:d&&(t.width=Yt(s)+ta(o)),f?d&&(t.height=Yt(s)+ta(o)):t.height=e.maxHeight,n.display&&d){var c=ra(n),v=e._getLabelSizes(),p=v.first,y=v.last,_=v.widest,w=v.highest,x=.4*c.minor.lineHeight,M=n.padding;if(f){var T=0!==e.labelRotation,C=m.toRadians(e.labelRotation),I=Math.cos(C),A=Math.sin(C);t.height=Math.min(e.maxHeight,t.height+(A*_.width+I*(w.height-(T?w.offset:0))+(T?0:x))+M);var E,O,N=e.getPixelForTick(0)-e.left,Y=e.right-e.getPixelForTick(e.getTicks().length-1);T?(E=l?I*p.width+A*p.offset:A*(p.height-p.offset),O=l?A*(y.height-y.offset):I*y.width+A*y.offset):(E=p.width/2,O=y.width/2),e.paddingLeft=Math.max((E-N)*e.width/(e.width-N),0)+3,e.paddingRight=Math.max((O-Y)*e.width/(e.width-Y),0)+3}else t.width=Math.min(e.maxWidth,t.width+(n.mirror?0:_.width+M+x)),e.paddingTop=p.height/2,e.paddingBottom=y.height/2}e.handleMargins(),f?(e.width=e._length=r.width-e.margins.left-e.margins.right,e.height=t.height):(e.width=t.width,e.height=e._length=r.height-e.margins.top-e.margins.bottom)},handleMargins:function(){var e=this;e.margins&&(e.margins.left=Math.max(e.paddingLeft,e.margins.left),e.margins.top=Math.max(e.paddingTop,e.margins.top),e.margins.right=Math.max(e.paddingRight,e.margins.right),e.margins.bottom=Math.max(e.paddingBottom,e.margins.bottom))},afterFit:function(){m.callback(this.options.afterFit,[this])},isHorizontal:function(){var e=this.options.position;return"top"===e||"bottom"===e},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(e){if(Nt(e))return NaN;if(("number"==typeof e||e instanceof Number)&&!isFinite(e))return NaN;if(e)if(this.isHorizontal()){if(void 0!==e.x)return this.getRightValue(e.x)}else if(void 0!==e.y)return this.getRightValue(e.y);return e},_convertTicksToLabels:function(e){var r,a,n,t=this;for(t.ticks=e.map(function(o){return o.value}),t.beforeTickToLabelConversion(),r=t.convertTicksToLabels(e)||t.ticks,t.afterTickToLabelConversion(),a=0,n=e.length;a<n;++a)e[a].label=r[a];return r},_getLabelSizes:function(){var e=this,t=e._labelSizes;return t||(e._labelSizes=t=function Ns(e,t,r,a){var c,v,p,y,_,w,x,M,T,C,I,A,z,n=r.length,o=[],s=[],d=[],l=0,f=0;for(c=0;c<n;++c){if(y=r[c].label,e.font=w=(_=r[c].major?t.major:t.minor).string,x=a[w]=a[w]||{data:{},gc:[]},M=_.lineHeight,T=C=0,Nt(y)||rt(y)){if(rt(y))for(v=0,p=y.length;v<p;++v)!Nt(I=y[v])&&!rt(I)&&(T=m.measureText(e,x.data,x.gc,T,I),C+=M)}else T=m.measureText(e,x.data,x.gc,T,y),C=M;o.push(T),s.push(C),d.push(M/2),l=Math.max(T,l),f=Math.max(C,f)}function N(Y){return{width:o[Y]||0,height:s[Y]||0,offset:d[Y]||0}}return function Ws(e,t){m.each(e,function(r){var o,a=r.gc,n=a.length/2;if(n>t){for(o=0;o<n;++o)delete r.data[a[o]];a.splice(0,n)}})}(a,n),A=o.indexOf(l),z=s.indexOf(f),{first:N(0),last:N(n-1),widest:N(A),highest:N(z)}}(e.ctx,ra(e.options.ticks),e.getTicks(),e.longestTextCache),e.longestLabelWidth=t.widest.width),t},_parseValue:function(e){var t,r,a,n;return rt(e)?(t=+this.getRightValue(e[0]),r=+this.getRightValue(e[1]),a=Math.min(t,r),n=Math.max(t,r)):(t=void 0,r=e=+this.getRightValue(e),a=e,n=e),{min:a,max:n,start:t,end:r}},_getScaleLabel:function(e){var t=this._parseValue(e);return void 0!==t.start?"["+t.start+", "+t.end+"]":+this.getRightValue(e)},getLabelForIndex:m.noop,getPixelForValue:m.noop,getValueForPixel:m.noop,getPixelForTick:function(e){var t=this,r=t.options.offset,a=t._ticks.length,n=1/Math.max(a-(r?0:1),1);return e<0||e>a-1?null:t.getPixelForDecimal(e*n+(r?n/2:0))},getPixelForDecimal:function(e){var t=this;return t._reversePixels&&(e=1-e),t._startPixel+e*t._length},getDecimalForPixel:function(e){var t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var e=this,t=e.min,r=e.max;return e.beginAtZero?0:t<0&&r<0?r:t>0&&r>0?t:0},_autoSkip:function(e){var f,c,v,p,t=this,r=t.options.ticks,n=r.maxTicksLimit||t._length/t._tickSize()+1,o=r.major.enabled?function zs(e){var r,a,t=[];for(r=0,a=e.length;r<a;r++)e[r].major&&t.push(r);return t}(e):[],s=o.length,d=o[0],l=o[s-1];if(s>n)return function Bs(e,t,r){var o,s,a=0,n=t[0];for(r=Math.ceil(r),o=0;o<e.length;o++)s=e[o],o===n?(s._index=o,n=t[++a*r]):delete s.label}(e,o,s/n),aa(e);if(v=function Es(e,t,r,a){var s,d,l,f,n=function Ys(e){var r,a,t=e.length;if(t<2)return!1;for(a=e[0],r=1;r<t;++r)if(e[r]-e[r-1]!==a)return!1;return a}(e),o=(t.length-1)/a;if(!n)return Math.max(o,1);for(l=0,f=(s=m.math._factorize(n)).length-1;l<f;l++)if((d=s[l])>o)return d;return Math.max(o,1)}(o,e,0,n),s>0){for(f=0,c=s-1;f<c;f++)or(e,v,o[f],o[f+1]);return or(e,v,m.isNullOrUndef(p=s>1?(l-d)/(s-1):null)?0:d-p,d),or(e,v,l,m.isNullOrUndef(p)?e.length:l+p),aa(e)}return or(e,v),aa(e)},_tickSize:function(){var e=this,t=e.options.ticks,r=m.toRadians(e.labelRotation),a=Math.abs(Math.cos(r)),n=Math.abs(Math.sin(r)),o=e._getLabelSizes(),s=t.autoSkipPadding||0,d=o?o.widest.width+s:0,l=o?o.highest.height+s:0;return e.isHorizontal()?l*a>d*n?d/a:l/n:l*n<d*a?l/a:d/n},_isVisible:function(){var a,n,o,e=this,t=e.chart,r=e.options.display;if("auto"!==r)return!!r;for(a=0,n=t.data.datasets.length;a<n;++a)if(t.isDatasetVisible(a)&&((o=t.getDatasetMeta(a)).xAxisID===e.id||o.yAxisID===e.id))return!0;return!1},_computeGridLineItems:function(e){var x,M,T,C,I,A,z,N,Y,E,O,J,X,U,We,Ne,fe,t=this,r=t.chart,a=t.options,n=a.gridLines,o=a.position,s=n.offsetGridLines,d=t.isHorizontal(),l=t._ticksToDraw,f=l.length+(s?1:0),c=Yt(n),v=[],p=n.drawBorder?mt(n.lineWidth,0,0):0,y=p/2,_=m._alignPixel,w=function(ca){return _(r,ca,p)};for("top"===o?(x=w(t.bottom),z=t.bottom-c,Y=x-y,O=w(e.top)+y,X=e.bottom):"bottom"===o?(x=w(t.top),O=e.top,X=w(e.bottom)-y,z=x+y,Y=t.top+c):"left"===o?(x=w(t.right),A=t.right-c,N=x-y,E=w(e.left)+y,J=e.right):(x=w(t.left),E=e.left,J=w(e.right)-y,A=x+y,N=t.left+c),M=0;M<f;++M)!(Nt((T=l[M]||{}).label)&&M<l.length)&&(M===t.zeroLineIndex&&a.offset===s?(U=n.zeroLineWidth,We=n.zeroLineColor,Ne=n.zeroLineBorderDash||[],fe=n.zeroLineBorderDashOffset||0):(U=mt(n.lineWidth,M,1),We=mt(n.color,M,"rgba(0,0,0,0.1)"),Ne=n.borderDash||[],fe=n.borderDashOffset||0),void 0!==(C=Rs(t,T._index||M,s))&&(I=_(r,C,U),d?A=N=E=J=I:z=Y=O=X=I,v.push({tx1:A,ty1:z,tx2:N,ty2:Y,x1:E,y1:O,x2:J,y2:X,width:U,color:We,borderDash:Ne,borderDashOffset:fe})));return v.ticksLength=f,v.borderValue=x,v},_computeLabelItems:function(){var p,y,_,w,x,M,T,C,I,A,z,N,e=this,t=e.options,r=t.ticks,a=t.position,n=r.mirror,o=e.isHorizontal(),s=e._ticksToDraw,d=ra(r),l=r.padding,f=Yt(t.gridLines),c=-m.toRadians(e.labelRotation),v=[];for("top"===a?(M=e.bottom-f-l,T=c?"left":"center"):"bottom"===a?(M=e.top+f+l,T=c?"right":"center"):"left"===a?(x=e.right-(n?0:f)-l,T=n?"left":"right"):(x=e.left+(n?0:f)+l,T=n?"right":"left"),p=0,y=s.length;p<y;++p)!Nt(w=(_=s[p]).label)&&(C=e.getPixelForTick(_._index||p)+r.labelOffset,A=(I=_.major?d.major:d.minor).lineHeight,z=rt(w)?w.length:1,o?(x=C,N="top"===a?((c?1:.5)-z)*A:(c?0:.5)*A):(M=C,N=(1-z)*A/2),v.push({x,y:M,rotation:c,label:w,font:I,textOffset:N,textAlign:T}));return v},_drawGrid:function(e){var t=this,r=t.options.gridLines;if(r.display){var l,f,c,v,p,a=t.ctx,n=t.chart,o=m._alignPixel,s=r.drawBorder?mt(r.lineWidth,0,0):0,d=t._gridLineItems||(t._gridLineItems=t._computeGridLineItems(e));for(c=0,v=d.length;c<v;++c)f=(p=d[c]).color,(l=p.width)&&f&&(a.save(),a.lineWidth=l,a.strokeStyle=f,a.setLineDash&&(a.setLineDash(p.borderDash),a.lineDashOffset=p.borderDashOffset),a.beginPath(),r.drawTicks&&(a.moveTo(p.tx1,p.ty1),a.lineTo(p.tx2,p.ty2)),r.drawOnChartArea&&(a.moveTo(p.x1,p.y1),a.lineTo(p.x2,p.y2)),a.stroke(),a.restore());if(s){var x,M,T,C,y=s,_=mt(r.lineWidth,d.ticksLength-1,1),w=d.borderValue;t.isHorizontal()?(x=o(n,t.left,y)-y/2,M=o(n,t.right,_)+_/2,T=C=w):(T=o(n,t.top,y)-y/2,C=o(n,t.bottom,_)+_/2,x=M=w),a.lineWidth=s,a.strokeStyle=mt(r.color,0),a.beginPath(),a.moveTo(x,T),a.lineTo(M,C),a.stroke()}}},_drawLabels:function(){var e=this;if(e.options.ticks.display){var n,o,s,d,l,f,c,v,r=e.ctx,a=e._labelItems||(e._labelItems=e._computeLabelItems());for(n=0,s=a.length;n<s;++n){if(f=(l=a[n]).font,r.save(),r.translate(l.x,l.y),r.rotate(l.rotation),r.font=f.string,r.fillStyle=f.color,r.textBaseline="middle",r.textAlign=l.textAlign,v=l.textOffset,rt(c=l.label))for(o=0,d=c.length;o<d;++o)r.fillText(""+c[o],0,v),v+=f.lineHeight;else r.fillText(c,0,v);r.restore()}}},_drawTitle:function(){var e=this,t=e.ctx,r=e.options,a=r.scaleLabel;if(a.display){var c,v,n=at(a.fontColor,F.global.defaultFontColor),o=m.options._parseFont(a),s=m.options.toPadding(a.padding),d=o.lineHeight/2,l=r.position,f=0;if(e.isHorizontal())c=e.left+e.width/2,v="bottom"===l?e.bottom-d-s.bottom:e.top+d+s.top;else{var p="left"===l;c=p?e.left+d+s.top:e.right-d-s.top,v=e.top+e.height/2,f=p?-.5*Math.PI:.5*Math.PI}t.save(),t.translate(c,v),t.rotate(f),t.textAlign="center",t.textBaseline="middle",t.fillStyle=n,t.font=o.string,t.fillText(a.labelString,0,0),t.restore()}},draw:function(e){var t=this;t._isVisible()&&(t._drawGrid(e),t._drawTitle(),t._drawLabels())},_layers:function(){var e=this,t=e.options,r=t.ticks&&t.ticks.z||0,a=t.gridLines&&t.gridLines.z||0;return e._isVisible()&&r!==a&&e.draw===e._draw?[{z:a,draw:function(){e._drawGrid.apply(e,arguments),e._drawTitle.apply(e,arguments)}},{z:r,draw:function(){e._drawLabels.apply(e,arguments)}}]:[{z:r,draw:function(){e.draw.apply(e,arguments)}}]},_getMatchingVisibleMetas:function(e){var t=this,r=t.isHorizontal();return t.chart._getSortedVisibleDatasetMetas().filter(function(a){return(!e||a.type===e)&&(r?a.xAxisID===t.id:a.yAxisID===t.id)})}});na.prototype._draw=na.prototype.draw;var le=na,ia=m.isNullOrUndef,Cn=le.extend({determineDataLimits:function(){var d,e=this,t=e._getLabels(),r=e.options.ticks,a=r.min,n=r.max,o=0,s=t.length-1;void 0!==a&&(d=t.indexOf(a))>=0&&(o=d),void 0!==n&&(d=t.indexOf(n))>=0&&(s=d),e.minIndex=o,e.maxIndex=s,e.min=t[o],e.max=t[s]},buildTicks:function(){var e=this,t=e._getLabels(),r=e.minIndex,a=e.maxIndex;e.ticks=0===r&&a===t.length-1?t:t.slice(r,a+1)},getLabelForIndex:function(e,t){var r=this,a=r.chart;return a.getDatasetMeta(t).controller._getValueScaleId()===r.id?r.getRightValue(a.data.datasets[t].data[e]):r._getLabels()[e]},_configure:function(){var e=this,t=e.options.offset,r=e.ticks;le.prototype._configure.call(e),e.isHorizontal()||(e._reversePixels=!e._reversePixels),r&&(e._startValue=e.minIndex-(t?.5:0),e._valueRange=Math.max(r.length-(t?0:1),1))},getPixelForValue:function(e,t,r){var n,o,s,a=this;return!ia(t)&&!ia(r)&&(e=a.chart.data.datasets[r].data[t]),ia(e)||(n=a.isHorizontal()?e.x:e.y),(void 0!==n||void 0!==e&&isNaN(t))&&(o=a._getLabels(),e=m.valueOrDefault(n,e),t=-1!==(s=o.indexOf(e))?s:t,isNaN(t)&&(t=e)),a.getPixelForDecimal((t-a._startValue)/a._valueRange)},getPixelForTick:function(e){var t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e],e+this.minIndex)},getValueForPixel:function(e){var t=this,r=Math.round(t._startValue+t.getDecimalForPixel(e)*t._valueRange);return Math.min(Math.max(r,0),t.ticks.length-1)},getBasePixel:function(){return this.bottom}});Cn._defaults={position:"bottom"};var nt=m.isNullOrUndef,sr=le.extend({getRightValue:function(e){return"string"==typeof e?+e:le.prototype.getRightValue.call(this,e)},handleTickRangeOptions:function(){var e=this,r=e.options.ticks;if(r.beginAtZero){var a=m.sign(e.min),n=m.sign(e.max);a<0&&n<0?e.max=0:a>0&&n>0&&(e.min=0)}var o=void 0!==r.min||void 0!==r.suggestedMin,s=void 0!==r.max||void 0!==r.suggestedMax;void 0!==r.min?e.min=r.min:void 0!==r.suggestedMin&&(e.min=null===e.min?r.suggestedMin:Math.min(e.min,r.suggestedMin)),void 0!==r.max?e.max=r.max:void 0!==r.suggestedMax&&(e.max=null===e.max?r.suggestedMax:Math.max(e.max,r.suggestedMax)),o!==s&&e.min>=e.max&&(o?e.max=e.min+1:e.min=e.max-1),e.min===e.max&&(e.max++,r.beginAtZero||e.min--)},getTickLimit:function(){var n,e=this,t=e.options.ticks,r=t.stepSize,a=t.maxTicksLimit;return r?n=Math.ceil(e.max/r)-Math.floor(e.min/r)+1:(n=e._computeTickLimit(),a=a||11),a&&(n=Math.min(a,n)),n},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:m.noop,buildTicks:function(){var e=this,r=e.options.ticks,a=e.getTickLimit(),n={maxTicks:a=Math.max(2,a),min:r.min,max:r.max,precision:r.precision,stepSize:m.valueOrDefault(r.fixedStepSize,r.stepSize)},o=e.ticks=function js(e,t){var y,_,w,x,r=[],n=e.stepSize,o=n||1,s=e.maxTicks-1,d=e.min,l=e.max,f=e.precision,c=t.min,v=t.max,p=m.niceNum((v-c)/s/o)*o;if(p<1e-14&&nt(d)&&nt(l))return[c,v];(x=Math.ceil(v/p)-Math.floor(c/p))>s&&(p=m.niceNum(x*p/s/o)*o),n||nt(f)?y=Math.pow(10,m._decimalPlaces(p)):(y=Math.pow(10,f),p=Math.ceil(p*y)/y),_=Math.floor(c/p)*p,w=Math.ceil(v/p)*p,n&&(!nt(d)&&m.almostWhole(d/p,p/1e3)&&(_=d),!nt(l)&&m.almostWhole(l/p,p/1e3)&&(w=l)),x=m.almostEquals(x=(w-_)/p,Math.round(x),p/1e3)?Math.round(x):Math.ceil(x),_=Math.round(_*y)/y,w=Math.round(w*y)/y,r.push(nt(d)?_:d);for(var M=1;M<x;++M)r.push(Math.round((_+M*p)*y)/y);return r.push(nt(l)?w:l),r}(n,e);e.handleDirectionalChanges(),e.max=m.max(o),e.min=m.min(o),r.reverse?(o.reverse(),e.start=e.max,e.end=e.min):(e.start=e.min,e.end=e.max)},convertTicksToLabels:function(){var e=this;e.ticksAsNumbers=e.ticks.slice(),e.zeroLineIndex=e.ticks.indexOf(0),le.prototype.convertTicksToLabels.call(e)},_configure:function(){var n,e=this,t=e.getTicks(),r=e.min,a=e.max;le.prototype._configure.call(e),e.options.offset&&t.length&&(r-=n=(a-r)/Math.max(t.length-1,1)/2,a+=n),e._startValue=r,e._endValue=a,e._valueRange=a-r}}),Gs={position:"left",ticks:{callback:Wt.formatters.linear}};function Xs(e,t,r,a){var c,v,n=e.options,s=function Zs(e,t,r){var a=[r.type,void 0===t&&void 0===r.stack?r.index:"",r.stack].join(".");return void 0===e[a]&&(e[a]={pos:[],neg:[]}),e[a]}(t,n.stacked,r),d=s.pos,l=s.neg,f=a.length;for(c=0;c<f;++c)v=e._parseValue(a[c]),!(isNaN(v.min)||isNaN(v.max)||r.data[c].hidden)&&(d[c]=d[c]||0,l[c]=l[c]||0,n.relativePoints?d[c]=100:v.min<0||v.max<0?l[c]+=v.min:d[c]+=v.max)}function Ks(e,t,r){var n,o,a=r.length;for(n=0;n<a;++n)o=e._parseValue(r[n]),!(isNaN(o.min)||isNaN(o.max)||t.data[n].hidden)&&(e.min=Math.min(e.min,o.min),e.max=Math.max(e.max,o.max))}var Pn=sr.extend({determineDataLimits:function(){var l,f,c,v,e=this,t=e.options,a=e.chart.data.datasets,n=e._getMatchingVisibleMetas(),o=t.stacked,s={},d=n.length;if(e.min=Number.POSITIVE_INFINITY,e.max=Number.NEGATIVE_INFINITY,void 0===o)for(l=0;!o&&l<d;++l)o=void 0!==(f=n[l]).stack;for(l=0;l<d;++l)c=a[(f=n[l]).index].data,o?Xs(e,s,f,c):Ks(e,f,c);m.each(s,function(p){v=p.pos.concat(p.neg),e.min=Math.min(e.min,m.min(v)),e.max=Math.max(e.max,m.max(v))}),e.min=m.isFinite(e.min)&&!isNaN(e.min)?e.min:0,e.max=m.isFinite(e.max)&&!isNaN(e.max)?e.max:1,e.handleTickRangeOptions()},_computeTickLimit:function(){var t,e=this;return e.isHorizontal()?Math.ceil(e.width/40):(t=m.options._parseFont(e.options.ticks),Math.ceil(e.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(e,t){return this._getScaleLabel(this.chart.data.datasets[t].data[e])},getPixelForValue:function(e){var t=this;return t.getPixelForDecimal((+t.getRightValue(e)-t._startValue)/t._valueRange)},getValueForPixel:function(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange},getPixelForTick:function(e){var t=this.ticksAsNumbers;return e<0||e>t.length-1?null:this.getPixelForValue(t[e])}});Pn._defaults=Gs;var oa=m.valueOrDefault,ue=m.math.log10,el={position:"left",ticks:{callback:Wt.formatters.logarithmic}};function lr(e,t){return m.isFinite(e)&&e>=0?e:t}var On=le.extend({determineDataLimits:function(){var s,d,l,f,c,v,e=this,t=e.options,r=e.chart,a=r.data.datasets,n=e.isHorizontal();function o(x){return n?x.xAxisID===e.id:x.yAxisID===e.id}e.min=Number.POSITIVE_INFINITY,e.max=Number.NEGATIVE_INFINITY,e.minNotZero=Number.POSITIVE_INFINITY;var p=t.stacked;if(void 0===p)for(s=0;s<a.length;s++)if(d=r.getDatasetMeta(s),r.isDatasetVisible(s)&&o(d)&&void 0!==d.stack){p=!0;break}if(t.stacked||p){var y={};for(s=0;s<a.length;s++){var _=[(d=r.getDatasetMeta(s)).type,void 0===t.stacked&&void 0===d.stack?s:"",d.stack].join(".");if(r.isDatasetVisible(s)&&o(d))for(void 0===y[_]&&(y[_]=[]),c=0,v=(f=a[s].data).length;c<v;c++){var w=y[_];l=e._parseValue(f[c]),!(isNaN(l.min)||isNaN(l.max)||d.data[c].hidden||l.min<0||l.max<0)&&(w[c]=w[c]||0,w[c]+=l.max)}}m.each(y,function(x){if(x.length>0){var M=m.min(x),T=m.max(x);e.min=Math.min(e.min,M),e.max=Math.max(e.max,T)}})}else for(s=0;s<a.length;s++)if(d=r.getDatasetMeta(s),r.isDatasetVisible(s)&&o(d))for(c=0,v=(f=a[s].data).length;c<v;c++)l=e._parseValue(f[c]),!(isNaN(l.min)||isNaN(l.max)||d.data[c].hidden||l.min<0||l.max<0)&&(e.min=Math.min(l.min,e.min),e.max=Math.max(l.max,e.max),0!==l.min&&(e.minNotZero=Math.min(l.min,e.minNotZero)));e.min=m.isFinite(e.min)?e.min:null,e.max=m.isFinite(e.max)?e.max:null,e.minNotZero=m.isFinite(e.minNotZero)?e.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var e=this,t=e.options.ticks;e.min=lr(t.min,e.min),e.max=lr(t.max,e.max),e.min===e.max&&(0!==e.min&&null!==e.min?(e.min=Math.pow(10,Math.floor(ue(e.min))-1),e.max=Math.pow(10,Math.floor(ue(e.max))+1)):(e.min=1,e.max=10)),null===e.min&&(e.min=Math.pow(10,Math.floor(ue(e.max))-1)),null===e.max&&(e.max=0!==e.min?Math.pow(10,Math.floor(ue(e.min))+1):10),null===e.minNotZero&&(e.minNotZero=e.min>0?e.min:e.max<1?Math.pow(10,Math.floor(ue(e.max))):1)},buildTicks:function(){var e=this,t=e.options.ticks,r=!e.isHorizontal(),a={min:lr(t.min),max:lr(t.max)},n=e.ticks=function Qs(e,t){var s,d,r=[],a=oa(e.min,Math.pow(10,Math.floor(ue(t.min)))),n=Math.floor(ue(t.max)),o=Math.ceil(t.max/Math.pow(10,n));0===a?(s=Math.floor(ue(t.minNotZero)),d=Math.floor(t.minNotZero/Math.pow(10,s)),r.push(a),a=d*Math.pow(10,s)):(s=Math.floor(ue(a)),d=Math.floor(a/Math.pow(10,s)));var l=s<0?Math.pow(10,Math.abs(s)):1;do{r.push(a),10==++d&&(d=1,l=++s>=0?1:l),a=Math.round(d*Math.pow(10,s)*l)/l}while(s<n||s===n&&d<o);var f=oa(e.max,a);return r.push(f),r}(a,e);e.max=m.max(n),e.min=m.min(n),t.reverse?(r=!r,e.start=e.max,e.end=e.min):(e.start=e.min,e.end=e.max),r&&n.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),le.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(e,t){return this._getScaleLabel(this.chart.data.datasets[t].data[e])},getPixelForTick:function(e){var t=this.tickValues;return e<0||e>t.length-1?null:this.getPixelForValue(t[e])},_getFirstTickValue:function(e){var t=Math.floor(ue(e));return Math.floor(e/Math.pow(10,t))*Math.pow(10,t)},_configure:function(){var e=this,t=e.min,r=0;le.prototype._configure.call(e),0===t&&(t=e._getFirstTickValue(e.minNotZero),r=oa(e.options.ticks.fontSize,F.global.defaultFontSize)/e._length),e._startValue=ue(t),e._valueOffset=r,e._valueRange=(ue(e.max)-ue(t))/(1-r)},getPixelForValue:function(e){var t=this,r=0;return(e=+t.getRightValue(e))>t.min&&e>0&&(r=(ue(e)-t._startValue)/t._valueRange+t._valueOffset),t.getPixelForDecimal(r)},getValueForPixel:function(e){var t=this,r=t.getDecimalForPixel(e);return 0===r&&0===t.min?0:Math.pow(10,t._startValue+(r-t._valueOffset)*t._valueRange)}});On._defaults=el;var ur=m.valueOrDefault,sa=m.valueAtIndexOrDefault,Fn=m.options.resolve,rl={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Wt.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(e){return e}}};function la(e){var t=e.ticks;return t.display&&e.display?ur(t.fontSize,F.global.defaultFontSize)+2*t.backdropPaddingY:0}function al(e,t,r){return m.isArray(r)?{w:m.longestText(e,e.font,r),h:r.length*t}:{w:e.measureText(r).width,h:t}}function An(e,t,r,a,n){return e===a||e===n?{start:t-r/2,end:t+r/2}:e<a||e>n?{start:t-r,end:t}:{start:t,end:t+r}}function il(e){return 0===e||180===e?"center":e<180?"left":"right"}function ol(e,t,r,a){var o,s,n=r.y+a/2;if(m.isArray(t))for(o=0,s=t.length;o<s;++o)e.fillText(t[o],r.x,n),n+=a;else e.fillText(t,r.x,n)}function sl(e,t,r){90===e||270===e?r.y-=t.h/2:(e>270||e<90)&&(r.y-=t.h)}function dr(e){return m.isNumber(e)?e:0}var In=sr.extend({setDimensions:function(){var e=this;e.width=e.maxWidth,e.height=e.maxHeight,e.paddingTop=la(e.options)/2,e.xCenter=Math.floor(e.width/2),e.yCenter=Math.floor((e.height-e.paddingTop)/2),e.drawingArea=Math.min(e.height-e.paddingTop,e.width)/2},determineDataLimits:function(){var e=this,t=e.chart,r=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;m.each(t.data.datasets,function(n,o){if(t.isDatasetVisible(o)){var s=t.getDatasetMeta(o);m.each(n.data,function(d,l){var f=+e.getRightValue(d);isNaN(f)||s.data[l].hidden||(r=Math.min(f,r),a=Math.max(f,a))})}}),e.min=r===Number.POSITIVE_INFINITY?0:r,e.max=a===Number.NEGATIVE_INFINITY?0:a,e.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/la(this.options))},convertTicksToLabels:function(){var e=this;sr.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(function(){var t=m.callback(e.options.pointLabels.callback,arguments,e);return t||0===t?t:""})},getLabelForIndex:function(e,t){return+this.getRightValue(this.chart.data.datasets[t].data[e])},fit:function(){var e=this,t=e.options;t.display&&t.pointLabels.display?function nl(e){var n,o,s,t=m.options._parseFont(e.options.pointLabels),r={l:0,r:e.width,t:0,b:e.height-e.paddingTop},a={};e.ctx.font=t.string,e._pointLabelSizes=[];var d=e.chart.data.labels.length;for(n=0;n<d;n++){s=e.getPointPosition(n,e.drawingArea+5),o=al(e.ctx,t.lineHeight,e.pointLabels[n]),e._pointLabelSizes[n]=o;var l=e.getIndexAngle(n),f=m.toDegrees(l)%360,c=An(f,s.x,o.w,0,180),v=An(f,s.y,o.h,90,270);c.start<r.l&&(r.l=c.start,a.l=l),c.end>r.r&&(r.r=c.end,a.r=l),v.start<r.t&&(r.t=v.start,a.t=l),v.end>r.b&&(r.b=v.end,a.b=l)}e.setReductions(e.drawingArea,r,a)}(e):e.setCenterPoint(0,0,0,0)},setReductions:function(e,t,r){var a=this,n=t.l/Math.sin(r.l),o=Math.max(t.r-a.width,0)/Math.sin(r.r),s=-t.t/Math.cos(r.t),d=-Math.max(t.b-(a.height-a.paddingTop),0)/Math.cos(r.b);n=dr(n),o=dr(o),s=dr(s),d=dr(d),a.drawingArea=Math.min(Math.floor(e-(n+o)/2),Math.floor(e-(s+d)/2)),a.setCenterPoint(n,o,s,d)},setCenterPoint:function(e,t,r,a){var n=this,d=r+n.drawingArea,l=n.height-n.paddingTop-a-n.drawingArea;n.xCenter=Math.floor((e+n.drawingArea+(n.width-t-n.drawingArea))/2+n.left),n.yCenter=Math.floor((d+l)/2+n.top+n.paddingTop)},getIndexAngle:function(e){var t=this.chart,o=(e*(360/t.data.labels.length)+((t.options||{}).startAngle||0))%360;return(o<0?o+360:o)*Math.PI*2/360},getDistanceFromCenterForValue:function(e){var t=this;if(m.isNullOrUndef(e))return NaN;var r=t.drawingArea/(t.max-t.min);return t.options.ticks.reverse?(t.max-e)*r:(e-t.min)*r},getPointPosition:function(e,t){var r=this,a=r.getIndexAngle(e)-Math.PI/2;return{x:Math.cos(a)*t+r.xCenter,y:Math.sin(a)*t+r.yCenter}},getPointPositionForValue:function(e,t){return this.getPointPosition(e,this.getDistanceFromCenterForValue(t))},getBasePosition:function(e){var t=this,r=t.min,a=t.max;return t.getPointPositionForValue(e||0,t.beginAtZero?0:r<0&&a<0?a:r>0&&a>0?r:0)},_drawGrid:function(){var d,l,f,e=this,t=e.ctx,r=e.options,a=r.gridLines,n=r.angleLines,o=ur(n.lineWidth,a.lineWidth),s=ur(n.color,a.color);if(r.pointLabels.display&&function ll(e){var t=e.ctx,r=e.options,a=r.pointLabels,n=la(r),o=e.getDistanceFromCenterForValue(r.ticks.reverse?e.min:e.max),s=m.options._parseFont(a);t.save(),t.font=s.string,t.textBaseline="middle";for(var d=e.chart.data.labels.length-1;d>=0;d--){var f=e.getPointPosition(d,o+(0===d?n/2:0)+5),c=sa(a.fontColor,d,F.global.defaultFontColor);t.fillStyle=c;var v=e.getIndexAngle(d),p=m.toDegrees(v);t.textAlign=il(p),sl(p,e._pointLabelSizes[d],f),ol(t,e.pointLabels[d],f,s.lineHeight)}t.restore()}(e),a.display&&m.each(e.ticks,function(c,v){0!==v&&(l=e.getDistanceFromCenterForValue(e.ticksAsNumbers[v]),function ul(e,t,r,a){var f,n=e.ctx,o=t.circular,s=e.chart.data.labels.length,d=sa(t.color,a-1),l=sa(t.lineWidth,a-1);if((o||s)&&d&&l){if(n.save(),n.strokeStyle=d,n.lineWidth=l,n.setLineDash&&(n.setLineDash(t.borderDash||[]),n.lineDashOffset=t.borderDashOffset||0),n.beginPath(),o)n.arc(e.xCenter,e.yCenter,r,0,2*Math.PI);else{f=e.getPointPosition(0,r),n.moveTo(f.x,f.y);for(var c=1;c<s;c++)f=e.getPointPosition(c,r),n.lineTo(f.x,f.y)}n.closePath(),n.stroke(),n.restore()}}(e,a,l,v))}),n.display&&o&&s){for(t.save(),t.lineWidth=o,t.strokeStyle=s,t.setLineDash&&(t.setLineDash(Fn([n.borderDash,a.borderDash,[]])),t.lineDashOffset=Fn([n.borderDashOffset,a.borderDashOffset,0])),d=e.chart.data.labels.length-1;d>=0;d--)l=e.getDistanceFromCenterForValue(r.ticks.reverse?e.min:e.max),f=e.getPointPosition(d,l),t.beginPath(),t.moveTo(e.xCenter,e.yCenter),t.lineTo(f.x,f.y),t.stroke();t.restore()}},_drawLabels:function(){var e=this,t=e.ctx,a=e.options.ticks;if(a.display){var d,l,n=e.getIndexAngle(0),o=m.options._parseFont(a),s=ur(a.fontColor,F.global.defaultFontColor);t.save(),t.font=o.string,t.translate(e.xCenter,e.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",m.each(e.ticks,function(f,c){0===c&&!a.reverse||(d=e.getDistanceFromCenterForValue(e.ticksAsNumbers[c]),a.showLabelBackdrop&&(l=t.measureText(f).width,t.fillStyle=a.backdropColor,t.fillRect(-l/2-a.backdropPaddingX,-d-o.size/2-a.backdropPaddingY,l+2*a.backdropPaddingX,o.size+2*a.backdropPaddingY)),t.fillStyle=s,t.fillText(f,0,-d))}),t.restore()}},_drawTitle:m.noop});In._defaults=rl;var ua=m._deprecated,Ln=m.options.resolve,fl=m.valueOrDefault,Rn=Number.MIN_SAFE_INTEGER||-9007199254740991,da=Number.MAX_SAFE_INTEGER||9007199254740991,fr={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},de=Object.keys(fr);function Wn(e,t){return e-t}function Nn(e){return m.valueOrDefault(e.time.min,e.ticks.min)}function Yn(e){return m.valueOrDefault(e.time.max,e.ticks.max)}function pt(e,t,r,a){var n=function vl(e,t,r){for(var o,s,d,a=0,n=e.length-1;a>=0&&a<=n;){if(d=e[o=a+n>>1],!(s=e[o-1]||null))return{lo:null,hi:d};if(d[t]<r)a=o+1;else{if(!(s[t]>r))return{lo:s,hi:d};n=o-1}}return{lo:d,hi:null}}(e,t,r),o=n.lo?n.hi?n.lo:e[e.length-2]:e[0],s=n.lo?n.hi?n.hi:e[e.length-1]:e[1],d=s[t]-o[t];return o[a]+(s[a]-o[a])*(d?(r-o[t])/d:0)}function fa(e,t){var r=e._adapter,a=e.options.time,n=a.parser,o=n||a.format,s=t;return"function"==typeof n&&(s=n(s)),m.isFinite(s)||(s="string"==typeof o?r.parse(s,o):r.parse(s)),null!==s?+s:(!n&&"function"==typeof o&&(s=o(t),m.isFinite(s)||(s=r.parse(s))),s)}function it(e,t){if(m.isNullOrUndef(t))return null;var r=e.options.time,a=fa(e,e.getRightValue(t));return null===a||r.round&&(a=+e._adapter.startOf(a,r.round)),a}function En(e,t,r,a){var o,s,n=de.length;for(o=de.indexOf(e);o<n-1;++o)if((s=fr[de[o]]).common&&Math.ceil((r-t)/((s.steps?s.steps:da)*s.size))<=a)return de[o];return de[n-1]}function zn(e,t,r){var s,d,a=[],n={},o=t.length;for(s=0;s<o;++s)n[d=t[s]]=s,a.push({value:d,major:!1});return 0!==o&&r?function yl(e,t,r,a){var d,l,n=e._adapter,o=+n.startOf(t[0].value,a),s=t[t.length-1].value;for(d=o;d<=s;d=+n.add(d,1,a))(l=r[d])>=0&&(t[l].major=!0);return t}(e,a,n,r):a}var Bn=le.extend({initialize:function(){this.mergeTicksOptions(),le.prototype.initialize.call(this)},update:function(){var e=this,t=e.options,r=t.time||(t.time={}),a=e._adapter=new ea._date(t.adapters.date);return ua("time scale",r.format,"time.format","time.parser"),ua("time scale",r.min,"time.min","ticks.min"),ua("time scale",r.max,"time.max","ticks.max"),m.mergeIf(r.displayFormats,a.formats()),le.prototype.update.apply(e,arguments)},getRightValue:function(e){return e&&void 0!==e.t&&(e=e.t),le.prototype.getRightValue.call(this,e)},determineDataLimits:function(){var c,v,p,y,_,w,x,e=this,t=e.chart,r=e._adapter,a=e.options,n=a.time.unit||"day",o=da,s=Rn,d=[],l=[],f=[],M=e._getLabels();for(c=0,p=M.length;c<p;++c)f.push(it(e,M[c]));for(c=0,p=(t.data.datasets||[]).length;c<p;++c)if(t.isDatasetVisible(c))if(m.isObject((_=t.data.datasets[c].data)[0]))for(l[c]=[],v=0,y=_.length;v<y;++v)w=it(e,_[v]),d.push(w),l[c][v]=w;else l[c]=f.slice(0),x||(d=d.concat(f),x=!0);else l[c]=[];f.length&&(o=Math.min(o,f[0]),s=Math.max(s,f[f.length-1])),d.length&&(d=p>1?function hl(e){var a,n,o,t={},r=[];for(a=0,n=e.length;a<n;++a)t[o=e[a]]||(t[o]=!0,r.push(o));return r}(d).sort(Wn):d.sort(Wn),o=Math.min(o,d[0]),s=Math.max(s,d[d.length-1])),o=it(e,Nn(a))||o,s=it(e,Yn(a))||s,o=o===da?+r.startOf(Date.now(),n):o,s=s===Rn?+r.endOf(Date.now(),n)+1:s,e.min=Math.min(o,s),e.max=Math.max(o+1,s),e._table=[],e._timestamps={data:d,datasets:l,labels:f}},buildTicks:function(){var v,p,y,e=this,t=e.min,r=e.max,a=e.options,n=a.ticks,o=a.time,s=e._timestamps,d=[],l=e.getLabelCapacity(t),f=n.source,c=a.distribution;for(s="data"===f||"auto"===f&&"series"===c?s.data:"labels"===f?s.labels:function pl(e,t,r,a){var p,n=e._adapter,o=e.options,s=o.time,d=s.unit||En(s.minUnit,t,r,a),l=Ln([s.stepSize,s.unitStepSize,1]),f="week"===d&&s.isoWeekday,c=t,v=[];if(f&&(c=+n.startOf(c,"isoWeek",f)),c=+n.startOf(c,f?"day":d),n.diff(r,t,d)>1e5*l)throw t+" and "+r+" are too far apart with stepSize of "+l+" "+d;for(p=c;p<r;p=+n.add(p,l,d))v.push(p);return(p===r||"ticks"===o.bounds)&&v.push(p),v}(e,t,r,l),"ticks"===a.bounds&&s.length&&(t=s[0],r=s[s.length-1]),t=it(e,Nn(a))||t,r=it(e,Yn(a))||r,v=0,p=s.length;v<p;++v)(y=s[v])>=t&&y<=r&&d.push(y);return e.min=t,e.max=r,e._unit=o.unit||(n.autoSkip?En(o.minUnit,e.min,e.max,l):function gl(e,t,r,a,n){var o,s;for(o=de.length-1;o>=de.indexOf(r);o--)if(fr[s=de[o]].common&&e._adapter.diff(n,a,s)>=t-1)return s;return de[r?de.indexOf(r):0]}(e,d.length,o.minUnit,e.min,e.max)),e._majorUnit=n.major.enabled&&"year"!==e._unit?function ml(e){for(var t=de.indexOf(e)+1,r=de.length;t<r;++t)if(fr[de[t]].common)return de[t]}(e._unit):void 0,e._table=function cl(e,t,r,a){if("linear"===a||!e.length)return[{time:t,pos:0},{time:r,pos:1}];var s,d,l,f,c,n=[],o=[t];for(s=0,d=e.length;s<d;++s)(f=e[s])>t&&f<r&&o.push(f);for(o.push(r),s=0,d=o.length;s<d;++s)c=o[s+1],f=o[s],(void 0===(l=o[s-1])||void 0===c||Math.round((c+l)/2)!==f)&&n.push({time:f,pos:s/(d-1)});return n}(e._timestamps.data,t,r,c),e._offsets=function bl(e,t,r,a,n){var d,l,o=0,s=0;return n.offset&&t.length&&(d=pt(e,"time",t[0],"pos"),o=1===t.length?1-d:(pt(e,"time",t[1],"pos")-d)/2,l=pt(e,"time",t[t.length-1],"pos"),s=1===t.length?l:(l-pt(e,"time",t[t.length-2],"pos"))/2),{start:o,end:s,factor:1/(o+1+s)}}(e._table,d,0,0,a),n.reverse&&d.reverse(),zn(e,d,e._majorUnit)},getLabelForIndex:function(e,t){var r=this,a=r._adapter,n=r.chart.data,o=r.options.time,s=n.labels&&e<n.labels.length?n.labels[e]:"",d=n.datasets[t].data[e];return m.isObject(d)&&(s=r.getRightValue(d)),o.tooltipFormat?a.format(fa(r,s),o.tooltipFormat):"string"==typeof s?s:a.format(fa(r,s),o.displayFormats.datetime)},tickFormatFunction:function(e,t,r,a){var n=this,s=n.options,d=s.time.displayFormats,f=n._majorUnit,c=d[f],v=r[t],p=s.ticks,y=f&&c&&v&&v.major,_=n._adapter.format(e,a||(y?c:d[n._unit])),w=y?p.major:p.minor,x=Ln([w.callback,w.userCallback,p.callback,p.userCallback]);return x?x(_,t,r):_},convertTicksToLabels:function(e){var r,a,t=[];for(r=0,a=e.length;r<a;++r)t.push(this.tickFormatFunction(e[r].value,r,e));return t},getPixelForOffset:function(e){var t=this,r=t._offsets,a=pt(t._table,"time",e,"pos");return t.getPixelForDecimal((r.start+a)*r.factor)},getPixelForValue:function(e,t,r){var a=this,n=null;if(void 0!==t&&void 0!==r&&(n=a._timestamps.datasets[r][t]),null===n&&(n=it(a,e)),null!==n)return a.getPixelForOffset(n)},getPixelForTick:function(e){var t=this.getTicks();return e>=0&&e<t.length?this.getPixelForOffset(t[e].value):null},getValueForPixel:function(e){var t=this,r=t._offsets,a=t.getDecimalForPixel(e)/r.factor-r.end,n=pt(t._table,"pos",a,"time");return t._adapter._create(n)},_getLabelSize:function(e){var t=this,r=t.options.ticks,a=t.ctx.measureText(e).width,n=m.toRadians(t.isHorizontal()?r.maxRotation:r.minRotation),o=Math.cos(n),s=Math.sin(n),d=fl(r.fontSize,F.global.defaultFontSize);return{w:a*o+d*s,h:a*s+d*o}},getLabelWidth:function(e){return this._getLabelSize(e).w},getLabelCapacity:function(e){var t=this,r=t.options.time,a=r.displayFormats,n=a[r.unit]||a.millisecond,o=t.tickFormatFunction(e,0,zn(t,[e],t._majorUnit),n),s=t._getLabelSize(o),d=Math.floor(t.isHorizontal()?t.width/s.w:t.height/s.h);return t.options.offset&&d--,d>0?d:1}});Bn._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var wl={category:Cn,linear:Pn,logarithmic:On,radialLinear:In,time:Bn},xe=za(function(e,t){e.exports=function(){var r,M;function a(){return r.apply(null,arguments)}function o(i){return i instanceof Array||"[object Array]"===Object.prototype.toString.call(i)}function s(i){return null!=i&&"[object Object]"===Object.prototype.toString.call(i)}function l(i){return void 0===i}function f(i){return"number"==typeof i||"[object Number]"===Object.prototype.toString.call(i)}function c(i){return i instanceof Date||"[object Date]"===Object.prototype.toString.call(i)}function v(i,u){var g,h=[];for(g=0;g<i.length;++g)h.push(u(i[g],g));return h}function p(i,u){return Object.prototype.hasOwnProperty.call(i,u)}function y(i,u){for(var h in u)p(u,h)&&(i[h]=u[h]);return p(u,"toString")&&(i.toString=u.toString),p(u,"valueOf")&&(i.valueOf=u.valueOf),i}function _(i,u,h,g){return yi(i,u,h,g,!0).utc()}function x(i){return null==i._pf&&(i._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),i._pf}function T(i){if(null==i._isValid){var u=x(i),h=M.call(u.parsedDateParts,function(b){return null!=b}),g=!isNaN(i._d.getTime())&&u.overflow<0&&!u.empty&&!u.invalidMonth&&!u.invalidWeekday&&!u.weekdayMismatch&&!u.nullInput&&!u.invalidFormat&&!u.userInvalidated&&(!u.meridiem||u.meridiem&&h);if(i._strict&&(g=g&&0===u.charsLeftOver&&0===u.unusedTokens.length&&void 0===u.bigHour),null!=Object.isFrozen&&Object.isFrozen(i))return g;i._isValid=g}return i._isValid}function C(i){var u=_(NaN);return null!=i?y(x(u),i):x(u).userInvalidated=!0,u}M=Array.prototype.some?Array.prototype.some:function(i){for(var u=Object(this),h=u.length>>>0,g=0;g<h;g++)if(g in u&&i.call(this,u[g],g,u))return!0;return!1};var I=a.momentProperties=[];function A(i,u){var h,g,b;if(l(u._isAMomentObject)||(i._isAMomentObject=u._isAMomentObject),l(u._i)||(i._i=u._i),l(u._f)||(i._f=u._f),l(u._l)||(i._l=u._l),l(u._strict)||(i._strict=u._strict),l(u._tzm)||(i._tzm=u._tzm),l(u._isUTC)||(i._isUTC=u._isUTC),l(u._offset)||(i._offset=u._offset),l(u._pf)||(i._pf=x(u)),l(u._locale)||(i._locale=u._locale),I.length>0)for(h=0;h<I.length;h++)l(b=u[g=I[h]])||(i[g]=b);return i}var z=!1;function N(i){A(this,i),this._d=new Date(null!=i._d?i._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===z&&(z=!0,a.updateOffset(this),z=!1)}function Y(i){return i instanceof N||null!=i&&null!=i._isAMomentObject}function E(i){return i<0?Math.ceil(i)||0:Math.floor(i)}function O(i){var u=+i,h=0;return 0!==u&&isFinite(u)&&(h=E(u)),h}function J(i,u,h){var S,g=Math.min(i.length,u.length),b=Math.abs(i.length-u.length),k=0;for(S=0;S<g;S++)(h&&i[S]!==u[S]||!h&&O(i[S])!==O(u[S]))&&k++;return k+b}function X(i){!1===a.suppressDeprecationWarnings&&typeof console<"u"&&console.warn&&console.warn("Deprecation warning: "+i)}function U(i,u){var h=!0;return y(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,i),h){for(var b,g=[],k=0;k<arguments.length;k++){if(b="","object"==typeof arguments[k]){for(var S in b+="\n["+k+"] ",arguments[0])b+=S+": "+arguments[0][S]+", ";b=b.slice(0,-2)}else b=arguments[k];g.push(b)}X(i+"\nArguments: "+Array.prototype.slice.call(g).join("")+"\n"+(new Error).stack),h=!1}return u.apply(this,arguments)},u)}var ga,We={};function Ne(i,u){null!=a.deprecationHandler&&a.deprecationHandler(i,u),We[i]||(X(u),We[i]=!0)}function fe(i){return i instanceof Function||"[object Function]"===Object.prototype.toString.call(i)}function Zn(i,u){var g,h=y({},i);for(g in u)p(u,g)&&(s(i[g])&&s(u[g])?(h[g]={},y(h[g],i[g]),y(h[g],u[g])):null!=u[g]?h[g]=u[g]:delete h[g]);for(g in i)p(i,g)&&!p(u,g)&&s(i[g])&&(h[g]=y({},h[g]));return h}function va(i){null!=i&&this.set(i)}a.suppressDeprecationWarnings=!1,a.deprecationHandler=null,ga=Object.keys?Object.keys:function(i){var u,h=[];for(u in i)p(i,u)&&h.push(u);return h};var Et={};function ae(i,u){var h=i.toLowerCase();Et[h]=Et[h+"s"]=Et[u]=i}function be(i){return"string"==typeof i?Et[i]||Et[i.toLowerCase()]:void 0}function ma(i){var h,g,u={};for(g in i)p(i,g)&&(h=be(g))&&(u[h]=i[g]);return u}var Xn={};function ne(i,u){Xn[i]=u}function Ye(i,u,h){var g=""+Math.abs(i);return(i>=0?h?"+":"":"-")+Math.pow(10,Math.max(0,u-g.length)).toString().substr(1)+g}var Kn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,hr=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,pa={},bt={};function L(i,u,h,g){var b=g;"string"==typeof g&&(b=function(){return this[g]()}),i&&(bt[i]=b),u&&(bt[u[0]]=function(){return Ye(b.apply(this,arguments),u[1],u[2])}),h&&(bt[h]=function(){return this.localeData().ordinal(b.apply(this,arguments),i)})}function Ql(i){return i.match(/\[[\s\S]/)?i.replace(/^\[|\]$/g,""):i.replace(/\\/g,"")}function cr(i,u){return i.isValid()?(u=Jn(u,i.localeData()),pa[u]=pa[u]||function eu(i){var h,g,u=i.match(Kn);for(h=0,g=u.length;h<g;h++)u[h]=bt[u[h]]?bt[u[h]]:Ql(u[h]);return function(b){var S,k="";for(S=0;S<g;S++)k+=fe(u[S])?u[S].call(b,i):u[S];return k}}(u),pa[u](i)):i.localeData().invalidDate()}function Jn(i,u){var h=5;function g(b){return u.longDateFormat(b)||b}for(hr.lastIndex=0;h>=0&&hr.test(i);)i=i.replace(hr,g),hr.lastIndex=0,h-=1;return i}var Qn=/\d/,ce=/\d\d/,ei=/\d{3}/,ba=/\d{4}/,vr=/[+-]?\d{6}/,$=/\d\d?/,ti=/\d\d\d\d?/,ri=/\d\d\d\d\d\d?/,gr=/\d{1,3}/,ya=/\d{1,4}/,mr=/[+-]?\d{1,6}/,tu=/\d+/,pr=/[+-]?\d+/,ru=/Z|[+-]\d\d:?\d\d/gi,br=/Z|[+-]\d\d(?::?\d\d)?/gi,zt=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,_a={};function P(i,u,h){_a[i]=fe(u)?u:function(g,b){return g&&h?h:u}}function nu(i,u){return p(_a,i)?_a[i](u._strict,u._locale):new RegExp(function iu(i){return ot(i.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(u,h,g,b,k){return h||g||b||k}))}(i))}function ot(i){return i.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var xa={};function q(i,u){var h,g=u;for("string"==typeof i&&(i=[i]),f(u)&&(g=function(b,k){k[u]=O(b)}),h=0;h<i.length;h++)xa[i[h]]=g}function Bt(i,u){q(i,function(h,g,b,k){b._w=b._w||{},u(h,b._w,b,k)})}function ou(i,u,h){null!=u&&p(xa,i)&&xa[i](u,h._a,h,i)}var we=0,Ee=1,Pe=2,te=3,ke=4,ze=5,st=6,su=7,lu=8;function Ht(i){return yr(i)?366:365}function yr(i){return i%4==0&&i%100!=0||i%400==0}L("Y",0,0,function(){var i=this.year();return i<=9999?""+i:"+"+i}),L(0,["YY",2],0,function(){return this.year()%100}),L(0,["YYYY",4],0,"year"),L(0,["YYYYY",5],0,"year"),L(0,["YYYYYY",6,!0],0,"year"),ae("year","y"),ne("year",1),P("Y",pr),P("YY",$,ce),P("YYYY",ya,ba),P("YYYYY",mr,vr),P("YYYYYY",mr,vr),q(["YYYYY","YYYYYY"],we),q("YYYY",function(i,u){u[we]=2===i.length?a.parseTwoDigitYear(i):O(i)}),q("YY",function(i,u){u[we]=a.parseTwoDigitYear(i)}),q("Y",function(i,u){u[we]=parseInt(i,10)}),a.parseTwoDigitYear=function(i){return O(i)+(O(i)>68?1900:2e3)};var Q,ai=yt("FullYear",!0);function yt(i,u){return function(h){return null!=h?(ni(this,i,h),a.updateOffset(this,u),this):_r(this,i)}}function _r(i,u){return i.isValid()?i._d["get"+(i._isUTC?"UTC":"")+u]():NaN}function ni(i,u,h){i.isValid()&&!isNaN(h)&&("FullYear"===u&&yr(i.year())&&1===i.month()&&29===i.date()?i._d["set"+(i._isUTC?"UTC":"")+u](h,i.month(),xr(h,i.month())):i._d["set"+(i._isUTC?"UTC":"")+u](h))}function xr(i,u){if(isNaN(i)||isNaN(u))return NaN;var h=function hu(i,u){return(i%u+u)%u}(u,12);return i+=(u-h)/12,1===h?yr(i)?29:28:31-h%7%2}Q=Array.prototype.indexOf?Array.prototype.indexOf:function(i){var u;for(u=0;u<this.length;++u)if(this[u]===i)return u;return-1},L("M",["MM",2],"Mo",function(){return this.month()+1}),L("MMM",0,0,function(i){return this.localeData().monthsShort(this,i)}),L("MMMM",0,0,function(i){return this.localeData().months(this,i)}),ae("month","M"),ne("month",8),P("M",$),P("MM",$,ce),P("MMM",function(i,u){return u.monthsShortRegex(i)}),P("MMMM",function(i,u){return u.monthsRegex(i)}),q(["M","MM"],function(i,u){u[Ee]=O(i)-1}),q(["MMM","MMMM"],function(i,u,h,g){var b=h._locale.monthsParse(i,g,h._strict);null!=b?u[Ee]=b:x(h).invalidMonth=i});var ii=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,cu="January_February_March_April_May_June_July_August_September_October_November_December".split("_");var oi="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function mu(i,u,h){var g,b,k,S=i.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],g=0;g<12;++g)k=_([2e3,g]),this._shortMonthsParse[g]=this.monthsShort(k,"").toLocaleLowerCase(),this._longMonthsParse[g]=this.months(k,"").toLocaleLowerCase();return h?"MMM"===u?-1!==(b=Q.call(this._shortMonthsParse,S))?b:null:-1!==(b=Q.call(this._longMonthsParse,S))?b:null:"MMM"===u?-1!==(b=Q.call(this._shortMonthsParse,S))||-1!==(b=Q.call(this._longMonthsParse,S))?b:null:-1!==(b=Q.call(this._longMonthsParse,S))||-1!==(b=Q.call(this._shortMonthsParse,S))?b:null}function si(i,u){var h;if(!i.isValid())return i;if("string"==typeof u)if(/^\d+$/.test(u))u=O(u);else if(!f(u=i.localeData().monthsParse(u)))return i;return h=Math.min(i.date(),xr(i.year(),u)),i._d["set"+(i._isUTC?"UTC":"")+"Month"](u,h),i}function li(i){return null!=i?(si(this,i),a.updateOffset(this,!0),this):_r(this,"Month")}var yu=zt;var xu=zt;function ui(){function i(S,R){return R.length-S.length}var b,k,u=[],h=[],g=[];for(b=0;b<12;b++)k=_([2e3,b]),u.push(this.monthsShort(k,"")),h.push(this.months(k,"")),g.push(this.months(k,"")),g.push(this.monthsShort(k,""));for(u.sort(i),h.sort(i),g.sort(i),b=0;b<12;b++)u[b]=ot(u[b]),h[b]=ot(h[b]);for(b=0;b<24;b++)g[b]=ot(g[b]);this._monthsRegex=new RegExp("^("+g.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+u.join("|")+")","i")}function ku(i,u,h,g,b,k,S){var R;return i<100&&i>=0?(R=new Date(i+400,u,h,g,b,k,S),isFinite(R.getFullYear())&&R.setFullYear(i)):R=new Date(i,u,h,g,b,k,S),R}function Vt(i){var u;if(i<100&&i>=0){var h=Array.prototype.slice.call(arguments);h[0]=i+400,u=new Date(Date.UTC.apply(null,h)),isFinite(u.getUTCFullYear())&&u.setUTCFullYear(i)}else u=new Date(Date.UTC.apply(null,arguments));return u}function wr(i,u,h){var g=7+u-h;return-(7+Vt(i,0,g).getUTCDay()-u)%7+g-1}function di(i,u,h,g,b){var V,ee,R=1+7*(u-1)+(7+h-g)%7+wr(i,g,b);return R<=0?ee=Ht(V=i-1)+R:R>Ht(i)?(V=i+1,ee=R-Ht(i)):(V=i,ee=R),{year:V,dayOfYear:ee}}function Ut(i,u,h){var k,S,g=wr(i.year(),u,h),b=Math.floor((i.dayOfYear()-g-1)/7)+1;return b<1?k=b+lt(S=i.year()-1,u,h):b>lt(i.year(),u,h)?(k=b-lt(i.year(),u,h),S=i.year()+1):(S=i.year(),k=b),{week:k,year:S}}function lt(i,u,h){var g=wr(i,u,h),b=wr(i+1,u,h);return(Ht(i)-g+b)/7}L("w",["ww",2],"wo","week"),L("W",["WW",2],"Wo","isoWeek"),ae("week","w"),ae("isoWeek","W"),ne("week",5),ne("isoWeek",5),P("w",$),P("ww",$,ce),P("W",$),P("WW",$,ce),Bt(["w","ww","W","WW"],function(i,u,h,g){u[g.substr(0,1)]=O(i)});function wa(i,u){return i.slice(u,7).concat(i.slice(0,u))}L("d",0,"do","day"),L("dd",0,0,function(i){return this.localeData().weekdaysMin(this,i)}),L("ddd",0,0,function(i){return this.localeData().weekdaysShort(this,i)}),L("dddd",0,0,function(i){return this.localeData().weekdays(this,i)}),L("e",0,0,"weekday"),L("E",0,0,"isoWeekday"),ae("day","d"),ae("weekday","e"),ae("isoWeekday","E"),ne("day",11),ne("weekday",11),ne("isoWeekday",11),P("d",$),P("e",$),P("E",$),P("dd",function(i,u){return u.weekdaysMinRegex(i)}),P("ddd",function(i,u){return u.weekdaysShortRegex(i)}),P("dddd",function(i,u){return u.weekdaysRegex(i)}),Bt(["dd","ddd","dddd"],function(i,u,h,g){var b=h._locale.weekdaysParse(i,g,h._strict);null!=b?u.d=b:x(h).invalidWeekday=i}),Bt(["d","e","E"],function(i,u,h,g){u[g]=O(i)});var Au="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var fi="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var Ru="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Nu(i,u,h){var g,b,k,S=i.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],g=0;g<7;++g)k=_([2e3,1]).day(g),this._minWeekdaysParse[g]=this.weekdaysMin(k,"").toLocaleLowerCase(),this._shortWeekdaysParse[g]=this.weekdaysShort(k,"").toLocaleLowerCase(),this._weekdaysParse[g]=this.weekdays(k,"").toLocaleLowerCase();return h?"dddd"===u?-1!==(b=Q.call(this._weekdaysParse,S))?b:null:"ddd"===u?-1!==(b=Q.call(this._shortWeekdaysParse,S))?b:null:-1!==(b=Q.call(this._minWeekdaysParse,S))?b:null:"dddd"===u?-1!==(b=Q.call(this._weekdaysParse,S))||-1!==(b=Q.call(this._shortWeekdaysParse,S))||-1!==(b=Q.call(this._minWeekdaysParse,S))?b:null:"ddd"===u?-1!==(b=Q.call(this._shortWeekdaysParse,S))||-1!==(b=Q.call(this._weekdaysParse,S))||-1!==(b=Q.call(this._minWeekdaysParse,S))?b:null:-1!==(b=Q.call(this._minWeekdaysParse,S))||-1!==(b=Q.call(this._weekdaysParse,S))||-1!==(b=Q.call(this._shortWeekdaysParse,S))?b:null}var Hu=zt;var Uu=zt;var Gu=zt;function ka(){function i(ye,qt){return qt.length-ye.length}var k,S,R,V,ee,u=[],h=[],g=[],b=[];for(k=0;k<7;k++)S=_([2e3,1]).day(k),R=this.weekdaysMin(S,""),V=this.weekdaysShort(S,""),ee=this.weekdays(S,""),u.push(R),h.push(V),g.push(ee),b.push(R),b.push(V),b.push(ee);for(u.sort(i),h.sort(i),g.sort(i),b.sort(i),k=0;k<7;k++)h[k]=ot(h[k]),g[k]=ot(g[k]),b[k]=ot(b[k]);this._weekdaysRegex=new RegExp("^("+b.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+g.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+u.join("|")+")","i")}function Ma(){return this.hours()%12||12}function hi(i,u){L(i,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),u)})}function ci(i,u){return u._meridiemParse}L("H",["HH",2],0,"hour"),L("h",["hh",2],0,Ma),L("k",["kk",2],0,function qu(){return this.hours()||24}),L("hmm",0,0,function(){return""+Ma.apply(this)+Ye(this.minutes(),2)}),L("hmmss",0,0,function(){return""+Ma.apply(this)+Ye(this.minutes(),2)+Ye(this.seconds(),2)}),L("Hmm",0,0,function(){return""+this.hours()+Ye(this.minutes(),2)}),L("Hmmss",0,0,function(){return""+this.hours()+Ye(this.minutes(),2)+Ye(this.seconds(),2)}),hi("a",!0),hi("A",!1),ae("hour","h"),ne("hour",13),P("a",ci),P("A",ci),P("H",$),P("h",$),P("k",$),P("HH",$,ce),P("hh",$,ce),P("kk",$,ce),P("hmm",ti),P("hmmss",ri),P("Hmm",ti),P("Hmmss",ri),q(["H","HH"],te),q(["k","kk"],function(i,u,h){var g=O(i);u[te]=24===g?0:g}),q(["a","A"],function(i,u,h){h._isPm=h._locale.isPM(i),h._meridiem=i}),q(["h","hh"],function(i,u,h){u[te]=O(i),x(h).bigHour=!0}),q("hmm",function(i,u,h){var g=i.length-2;u[te]=O(i.substr(0,g)),u[ke]=O(i.substr(g)),x(h).bigHour=!0}),q("hmmss",function(i,u,h){var g=i.length-4,b=i.length-2;u[te]=O(i.substr(0,g)),u[ke]=O(i.substr(g,2)),u[ze]=O(i.substr(b)),x(h).bigHour=!0}),q("Hmm",function(i,u,h){var g=i.length-2;u[te]=O(i.substr(0,g)),u[ke]=O(i.substr(g))}),q("Hmmss",function(i,u,h){var g=i.length-4,b=i.length-2;u[te]=O(i.substr(0,g)),u[ke]=O(i.substr(g,2)),u[ze]=O(i.substr(b))});var Gt,Ju=yt("Hours",!0),vi={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:cu,monthsShort:oi,week:{dow:0,doy:6},weekdays:Au,weekdaysMin:Ru,weekdaysShort:fi,meridiemParse:/[ap]\.?m?\.?/i},re={},jt={};function gi(i){return i&&i.toLowerCase().replace("_","-")}function kr(i){var u=null;if(!re[i]&&e&&e.exports)try{u=Gt._abbr,function Dt(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}(),_t(u)}catch{}return re[i]}function _t(i,u){var h;return i&&((h=l(u)?$e(i):Sa(i,u))?Gt=h:typeof console<"u"&&console.warn&&console.warn("Locale "+i+" not found. Did you forget to load it?")),Gt._abbr}function Sa(i,u){if(null!==u){var h,g=vi;if(u.abbr=i,null!=re[i])Ne("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),g=re[i]._config;else if(null!=u.parentLocale)if(null!=re[u.parentLocale])g=re[u.parentLocale]._config;else{if(null==(h=kr(u.parentLocale)))return jt[u.parentLocale]||(jt[u.parentLocale]=[]),jt[u.parentLocale].push({name:i,config:u}),null;g=h._config}return re[i]=new va(Zn(g,u)),jt[i]&&jt[i].forEach(function(b){Sa(b.name,b.config)}),_t(i),re[i]}return delete re[i],null}function $e(i){var u;if(i&&i._locale&&i._locale._abbr&&(i=i._locale._abbr),!i)return Gt;if(!o(i)){if(u=kr(i))return u;i=[i]}return function Qu(i){for(var h,g,b,k,u=0;u<i.length;){for(h=(k=gi(i[u]).split("-")).length,g=(g=gi(i[u+1]))?g.split("-"):null;h>0;){if(b=kr(k.slice(0,h).join("-")))return b;if(g&&g.length>=h&&J(k,g,!0)>=h-1)break;h--}u++}return Gt}(i)}function Da(i){var u,h=i._a;return h&&-2===x(i).overflow&&(u=h[Ee]<0||h[Ee]>11?Ee:h[Pe]<1||h[Pe]>xr(h[we],h[Ee])?Pe:h[te]<0||h[te]>24||24===h[te]&&(0!==h[ke]||0!==h[ze]||0!==h[st])?te:h[ke]<0||h[ke]>59?ke:h[ze]<0||h[ze]>59?ze:h[st]<0||h[st]>999?st:-1,x(i)._overflowDayOfYear&&(u<we||u>Pe)&&(u=Pe),x(i)._overflowWeeks&&-1===u&&(u=su),x(i)._overflowWeekday&&-1===u&&(u=lu),x(i).overflow=u),i}function xt(i,u,h){return i??u??h}function Ta(i){var u,h,b,k,S,g=[];if(!i._d){for(b=function rd(i){var u=new Date(a.now());return i._useUTC?[u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()]:[u.getFullYear(),u.getMonth(),u.getDate()]}(i),i._w&&null==i._a[Pe]&&null==i._a[Ee]&&function ad(i){var u,h,g,b,k,S,R,V;if(null!=(u=i._w).GG||null!=u.W||null!=u.E)k=1,S=4,h=xt(u.GG,i._a[we],Ut(Z(),1,4).year),g=xt(u.W,1),((b=xt(u.E,1))<1||b>7)&&(V=!0);else{k=i._locale._week.dow,S=i._locale._week.doy;var ee=Ut(Z(),k,S);h=xt(u.gg,i._a[we],ee.year),g=xt(u.w,ee.week),null!=u.d?((b=u.d)<0||b>6)&&(V=!0):null!=u.e?(b=u.e+k,(u.e<0||u.e>6)&&(V=!0)):b=k}g<1||g>lt(h,k,S)?x(i)._overflowWeeks=!0:null!=V?x(i)._overflowWeekday=!0:(R=di(h,g,b,k,S),i._a[we]=R.year,i._dayOfYear=R.dayOfYear)}(i),null!=i._dayOfYear&&(S=xt(i._a[we],b[we]),(i._dayOfYear>Ht(S)||0===i._dayOfYear)&&(x(i)._overflowDayOfYear=!0),h=Vt(S,0,i._dayOfYear),i._a[Ee]=h.getUTCMonth(),i._a[Pe]=h.getUTCDate()),u=0;u<3&&null==i._a[u];++u)i._a[u]=g[u]=b[u];for(;u<7;u++)i._a[u]=g[u]=null==i._a[u]?2===u?1:0:i._a[u];24===i._a[te]&&0===i._a[ke]&&0===i._a[ze]&&0===i._a[st]&&(i._nextDay=!0,i._a[te]=0),i._d=(i._useUTC?Vt:ku).apply(null,g),k=i._useUTC?i._d.getUTCDay():i._d.getDay(),null!=i._tzm&&i._d.setUTCMinutes(i._d.getUTCMinutes()-i._tzm),i._nextDay&&(i._a[te]=24),i._w&&typeof i._w.d<"u"&&i._w.d!==k&&(x(i).weekdayMismatch=!0)}}var nd=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,id=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,od=/Z|[+-]\d\d(?::?\d\d)?/,Mr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ca=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],sd=/^\/?Date\((\-?\d+)/i;function mi(i){var u,h,k,S,R,V,g=i._i,b=nd.exec(g)||id.exec(g);if(b){for(x(i).iso=!0,u=0,h=Mr.length;u<h;u++)if(Mr[u][1].exec(b[1])){S=Mr[u][0],k=!1!==Mr[u][2];break}if(null==S)return void(i._isValid=!1);if(b[3]){for(u=0,h=Ca.length;u<h;u++)if(Ca[u][1].exec(b[3])){R=(b[2]||" ")+Ca[u][0];break}if(null==R)return void(i._isValid=!1)}if(!k&&null!=R)return void(i._isValid=!1);if(b[4]){if(!od.exec(b[4]))return void(i._isValid=!1);V="Z"}i._f=S+(R||"")+(V||""),Pa(i)}else i._isValid=!1}var ld=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function dd(i){var u=parseInt(i,10);return u<=49?2e3+u:u<=999?1900+u:u}var cd={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function pi(i){var u=ld.exec(function fd(i){return i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}(i._i));if(u){var h=function ud(i,u,h,g,b,k){var S=[dd(i),oi.indexOf(u),parseInt(h,10),parseInt(g,10),parseInt(b,10)];return k&&S.push(parseInt(k,10)),S}(u[4],u[3],u[2],u[5],u[6],u[7]);if(!function hd(i,u,h){return!i||fi.indexOf(i)===new Date(u[0],u[1],u[2]).getDay()||(x(h).weekdayMismatch=!0,h._isValid=!1,!1)}(u[1],h,i))return;i._a=h,i._tzm=function vd(i,u,h){if(i)return cd[i];if(u)return 0;var g=parseInt(h,10),b=g%100;return(g-b)/100*60+b}(u[8],u[9],u[10]),i._d=Vt.apply(null,i._a),i._d.setUTCMinutes(i._d.getUTCMinutes()-i._tzm),x(i).rfc2822=!0}else i._isValid=!1}function Pa(i){if(i._f!==a.ISO_8601)if(i._f!==a.RFC_2822){i._a=[],x(i).empty=!0;var h,g,b,k,S,u=""+i._i,R=u.length,V=0;for(b=Jn(i._f,i._locale).match(Kn)||[],h=0;h<b.length;h++)(g=(u.match(nu(k=b[h],i))||[])[0])&&((S=u.substr(0,u.indexOf(g))).length>0&&x(i).unusedInput.push(S),u=u.slice(u.indexOf(g)+g.length),V+=g.length),bt[k]?(g?x(i).empty=!1:x(i).unusedTokens.push(k),ou(k,g,i)):i._strict&&!g&&x(i).unusedTokens.push(k);x(i).charsLeftOver=R-V,u.length>0&&x(i).unusedInput.push(u),i._a[te]<=12&&!0===x(i).bigHour&&i._a[te]>0&&(x(i).bigHour=void 0),x(i).parsedDateParts=i._a.slice(0),x(i).meridiem=i._meridiem,i._a[te]=function md(i,u,h){var g;return null==h?u:null!=i.meridiemHour?i.meridiemHour(u,h):(null!=i.isPM&&((g=i.isPM(h))&&u<12&&(u+=12),!g&&12===u&&(u=0)),u)}(i._locale,i._a[te],i._meridiem),Ta(i),Da(i)}else pi(i);else mi(i)}function bi(i){var u=i._i,h=i._f;return i._locale=i._locale||$e(i._l),null===u||void 0===h&&""===u?C({nullInput:!0}):("string"==typeof u&&(i._i=u=i._locale.preparse(u)),Y(u)?new N(Da(u)):(c(u)?i._d=u:o(h)?function pd(i){var u,h,g,b,k;if(0===i._f.length)return x(i).invalidFormat=!0,void(i._d=new Date(NaN));for(b=0;b<i._f.length;b++)k=0,u=A({},i),null!=i._useUTC&&(u._useUTC=i._useUTC),u._f=i._f[b],Pa(u),T(u)&&(k+=x(u).charsLeftOver,k+=10*x(u).unusedTokens.length,x(u).score=k,(null==g||k<g)&&(g=k,h=u));y(i,h||u)}(i):h?Pa(i):function _d(i){var u=i._i;l(u)?i._d=new Date(a.now()):c(u)?i._d=new Date(u.valueOf()):"string"==typeof u?function gd(i){var u=sd.exec(i._i);null===u?(mi(i),!1===i._isValid&&(delete i._isValid,pi(i),!1===i._isValid&&(delete i._isValid,a.createFromInputFallback(i)))):i._d=new Date(+u[1])}(i):o(u)?(i._a=v(u.slice(0),function(h){return parseInt(h,10)}),Ta(i)):s(u)?function bd(i){if(!i._d){var u=ma(i._i);i._a=v([u.year,u.month,u.day||u.date,u.hour,u.minute,u.second,u.millisecond],function(h){return h&&parseInt(h,10)}),Ta(i)}}(i):f(u)?i._d=new Date(u):a.createFromInputFallback(i)}(i),T(i)||(i._d=null),i))}function yi(i,u,h,g,b){var k={};return(!0===h||!1===h)&&(g=h,h=void 0),(s(i)&&function d(i){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(i).length;var u;for(u in i)if(i.hasOwnProperty(u))return!1;return!0}(i)||o(i)&&0===i.length)&&(i=void 0),k._isAMomentObject=!0,k._useUTC=k._isUTC=b,k._l=h,k._i=i,k._f=u,k._strict=g,function yd(i){var u=new N(Da(bi(i)));return u._nextDay&&(u.add(1,"d"),u._nextDay=void 0),u}(k)}function Z(i,u,h,g){return yi(i,u,h,g,!1)}a.createFromInputFallback=U("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(i){i._d=new Date(i._i+(i._useUTC?" UTC":""))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var xd=U("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var i=Z.apply(null,arguments);return this.isValid()&&i.isValid()?i<this?this:i:C()}),wd=U("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var i=Z.apply(null,arguments);return this.isValid()&&i.isValid()?i>this?this:i:C()});function _i(i,u){var h,g;if(1===u.length&&o(u[0])&&(u=u[0]),!u.length)return Z();for(h=u[0],g=1;g<u.length;++g)(!u[g].isValid()||u[g][i](h))&&(h=u[g]);return h}var $t=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Sr(i){var u=ma(i),h=u.year||0,g=u.quarter||0,b=u.month||0,k=u.week||u.isoWeek||0,S=u.day||0,R=u.hour||0,V=u.minute||0,ee=u.second||0,ye=u.millisecond||0;this._isValid=function Dd(i){for(var u in i)if(-1===Q.call($t,u)||null!=i[u]&&isNaN(i[u]))return!1;for(var h=!1,g=0;g<$t.length;++g)if(i[$t[g]]){if(h)return!1;parseFloat(i[$t[g]])!==O(i[$t[g]])&&(h=!0)}return!0}(u),this._milliseconds=+ye+1e3*ee+6e4*V+1e3*R*60*60,this._days=+S+7*k,this._months=+b+3*g+12*h,this._data={},this._locale=$e(),this._bubble()}function Oa(i){return i instanceof Sr}function Fa(i){return i<0?-1*Math.round(-1*i):Math.round(i)}function xi(i,u){L(i,0,0,function(){var h=this.utcOffset(),g="+";return h<0&&(h=-h,g="-"),g+Ye(~~(h/60),2)+u+Ye(~~h%60,2)})}xi("Z",":"),xi("ZZ",""),P("Z",br),P("ZZ",br),q(["Z","ZZ"],function(i,u,h){h._useUTC=!0,h._tzm=Aa(br,i)});var Pd=/([\+\-]|\d\d)/gi;function Aa(i,u){var h=(u||"").match(i);if(null===h)return null;var b=((h[h.length-1]||[])+"").match(Pd)||["-",0,0],k=60*b[1]+O(b[2]);return 0===k?0:"+"===b[0]?k:-k}function Ia(i,u){var h,g;return u._isUTC?(h=u.clone(),g=(Y(i)||c(i)?i.valueOf():Z(i).valueOf())-h.valueOf(),h._d.setTime(h._d.valueOf()+g),a.updateOffset(h,!1),h):Z(i).local()}function La(i){return 15*-Math.round(i._d.getTimezoneOffset()/15)}function wi(){return!!this.isValid()&&this._isUTC&&0===this._offset}a.updateOffset=function(){};var zd=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Bd=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Me(i,u){var b,k,S,h=i,g=null;return Oa(i)?h={ms:i._milliseconds,d:i._days,M:i._months}:f(i)?(h={},u?h[u]=i:h.milliseconds=i):(g=zd.exec(i))?(b="-"===g[1]?-1:1,h={y:0,d:O(g[Pe])*b,h:O(g[te])*b,m:O(g[ke])*b,s:O(g[ze])*b,ms:O(Fa(1e3*g[st]))*b}):(g=Bd.exec(i))?h={y:ut(g[2],b="-"===g[1]?-1:1),M:ut(g[3],b),w:ut(g[4],b),d:ut(g[5],b),h:ut(g[6],b),m:ut(g[7],b),s:ut(g[8],b)}:null==h?h={}:"object"==typeof h&&("from"in h||"to"in h)&&(S=function Hd(i,u){var h;return i.isValid()&&u.isValid()?(u=Ia(u,i),i.isBefore(u)?h=ki(i,u):((h=ki(u,i)).milliseconds=-h.milliseconds,h.months=-h.months),h):{milliseconds:0,months:0}}(Z(h.from),Z(h.to)),(h={}).ms=S.milliseconds,h.M=S.months),k=new Sr(h),Oa(i)&&p(i,"_locale")&&(k._locale=i._locale),k}function ut(i,u){var h=i&&parseFloat(i.replace(",","."));return(isNaN(h)?0:h)*u}function ki(i,u){var h={};return h.months=u.month()-i.month()+12*(u.year()-i.year()),i.clone().add(h.months,"M").isAfter(u)&&--h.months,h.milliseconds=+u-+i.clone().add(h.months,"M"),h}function Mi(i,u){return function(h,g){var k;return null!==g&&!isNaN(+g)&&(Ne(u,"moment()."+u+"(period, number) is deprecated. Please use moment()."+u+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),k=h,h=g,g=k),Si(this,Me(h="string"==typeof h?+h:h,g),i),this}}function Si(i,u,h,g){var b=u._milliseconds,k=Fa(u._days),S=Fa(u._months);i.isValid()&&(g=g??!0,S&&si(i,_r(i,"Month")+S*h),k&&ni(i,"Date",_r(i,"Date")+k*h),b&&i._d.setTime(i._d.valueOf()+b*h),g&&a.updateOffset(i,k||S))}Me.fn=Sr.prototype,Me.invalid=function Cd(){return Me(NaN)};var Vd=Mi(1,"add"),Ud=Mi(-1,"subtract");function Ra(i,u){var h=12*(u.year()-i.year())+(u.month()-i.month()),g=i.clone().add(h,"months");return-(h+(u-g<0?(u-g)/(g-i.clone().add(h-1,"months")):(u-g)/(i.clone().add(h+1,"months")-g)))||0}function Di(i){var u;return void 0===i?this._locale._abbr:(null!=(u=$e(i))&&(this._locale=u),this)}a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ti=U("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(i){return void 0===i?this.localeData():this.locale(i)});function Ci(){return this._locale}var Dr=1e3,wt=60*Dr,Tr=60*wt,Pi=3506328*Tr;function kt(i,u){return(i%u+u)%u}function Oi(i,u,h){return i<100&&i>=0?new Date(i+400,u,h)-Pi:new Date(i,u,h).valueOf()}function Fi(i,u,h){return i<100&&i>=0?Date.UTC(i+400,u,h)-Pi:Date.UTC(i,u,h)}function Cr(i,u){L(0,[i,i.length],0,u)}function Ai(i,u,h,g,b){var k;return null==i?Ut(this,g,b).year:(u>(k=lt(i,g,b))&&(u=k),Df.call(this,i,u,h,g,b))}function Df(i,u,h,g,b){var k=di(i,u,h,g,b),S=Vt(k.year,0,k.dayOfYear);return this.year(S.getUTCFullYear()),this.month(S.getUTCMonth()),this.date(S.getUTCDate()),this}L(0,["gg",2],0,function(){return this.weekYear()%100}),L(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Cr("gggg","weekYear"),Cr("ggggg","weekYear"),Cr("GGGG","isoWeekYear"),Cr("GGGGG","isoWeekYear"),ae("weekYear","gg"),ae("isoWeekYear","GG"),ne("weekYear",1),ne("isoWeekYear",1),P("G",pr),P("g",pr),P("GG",$,ce),P("gg",$,ce),P("GGGG",ya,ba),P("gggg",ya,ba),P("GGGGG",mr,vr),P("ggggg",mr,vr),Bt(["gggg","ggggg","GGGG","GGGGG"],function(i,u,h,g){u[g.substr(0,2)]=O(i)}),Bt(["gg","GG"],function(i,u,h,g){u[g]=a.parseTwoDigitYear(i)}),L("Q",0,"Qo","quarter"),ae("quarter","Q"),ne("quarter",7),P("Q",Qn),q("Q",function(i,u){u[Ee]=3*(O(i)-1)}),L("D",["DD",2],"Do","date"),ae("date","D"),ne("date",9),P("D",$),P("DD",$,ce),P("Do",function(i,u){return i?u._dayOfMonthOrdinalParse||u._ordinalParse:u._dayOfMonthOrdinalParseLenient}),q(["D","DD"],Pe),q("Do",function(i,u){u[Pe]=O(i.match($)[0])});var Ii=yt("Date",!0);L("DDD",["DDDD",3],"DDDo","dayOfYear"),ae("dayOfYear","DDD"),ne("dayOfYear",4),P("DDD",gr),P("DDDD",ei),q(["DDD","DDDD"],function(i,u,h){h._dayOfYear=O(i)}),L("m",["mm",2],0,"minute"),ae("minute","m"),ne("minute",14),P("m",$),P("mm",$,ce),q(["m","mm"],ke);var Pf=yt("Minutes",!1);L("s",["ss",2],0,"second"),ae("second","s"),ne("second",15),P("s",$),P("ss",$,ce),q(["s","ss"],ze);var qe,Of=yt("Seconds",!1);for(L("S",0,0,function(){return~~(this.millisecond()/100)}),L(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),L(0,["SSS",3],0,"millisecond"),L(0,["SSSS",4],0,function(){return 10*this.millisecond()}),L(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),L(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),L(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),L(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),L(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),ae("millisecond","ms"),ne("millisecond",16),P("S",gr,Qn),P("SS",gr,ce),P("SSS",gr,ei),qe="SSSS";qe.length<=9;qe+="S")P(qe,tu);function Ff(i,u){u[st]=O(1e3*("0."+i))}for(qe="S";qe.length<=9;qe+="S")q(qe,Ff);var Af=yt("Milliseconds",!1);L("z",0,0,"zoneAbbr"),L("zz",0,0,"zoneName");var D=N.prototype;function Li(i){return i}D.add=Vd,D.calendar=function Gd(i,u){var h=i||Z(),g=Ia(h,this).startOf("day"),b=a.calendarFormat(this,g)||"sameElse",k=u&&(fe(u[b])?u[b].call(this,h):u[b]);return this.format(k||this.localeData().calendar(b,this,Z(h)))},D.clone=function $d(){return new N(this)},D.diff=function ef(i,u,h){var g,b,k;if(!this.isValid())return NaN;if(!(g=Ia(i,this)).isValid())return NaN;switch(b=6e4*(g.utcOffset()-this.utcOffset()),u=be(u)){case"year":k=Ra(this,g)/12;break;case"month":k=Ra(this,g);break;case"quarter":k=Ra(this,g)/3;break;case"second":k=(this-g)/1e3;break;case"minute":k=(this-g)/6e4;break;case"hour":k=(this-g)/36e5;break;case"day":k=(this-g-b)/864e5;break;case"week":k=(this-g-b)/6048e5;break;default:k=this-g}return h?k:E(k)},D.endOf=function ff(i){var u;if(void 0===(i=be(i))||"millisecond"===i||!this.isValid())return this;var h=this._isUTC?Fi:Oi;switch(i){case"year":u=h(this.year()+1,0,1)-1;break;case"quarter":u=h(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":u=h(this.year(),this.month()+1,1)-1;break;case"week":u=h(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":u=h(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":u=h(this.year(),this.month(),this.date()+1)-1;break;case"hour":u=this._d.valueOf(),u+=Tr-kt(u+(this._isUTC?0:this.utcOffset()*wt),Tr)-1;break;case"minute":u=this._d.valueOf(),u+=wt-kt(u,wt)-1;break;case"second":u=this._d.valueOf(),u+=Dr-kt(u,Dr)-1}return this._d.setTime(u),a.updateOffset(this,!0),this},D.format=function nf(i){i||(i=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var u=cr(this,i);return this.localeData().postformat(u)},D.from=function of(i,u){return this.isValid()&&(Y(i)&&i.isValid()||Z(i).isValid())?Me({to:this,from:i}).locale(this.locale()).humanize(!u):this.localeData().invalidDate()},D.fromNow=function sf(i){return this.from(Z(),i)},D.to=function lf(i,u){return this.isValid()&&(Y(i)&&i.isValid()||Z(i).isValid())?Me({from:this,to:i}).locale(this.locale()).humanize(!u):this.localeData().invalidDate()},D.toNow=function uf(i){return this.to(Z(),i)},D.get=function du(i){return fe(this[i=be(i)])?this[i]():this},D.invalidAt=function _f(){return x(this).overflow},D.isAfter=function qd(i,u){var h=Y(i)?i:Z(i);return!(!this.isValid()||!h.isValid())&&("millisecond"===(u=be(u)||"millisecond")?this.valueOf()>h.valueOf():h.valueOf()<this.clone().startOf(u).valueOf())},D.isBefore=function Zd(i,u){var h=Y(i)?i:Z(i);return!(!this.isValid()||!h.isValid())&&("millisecond"===(u=be(u)||"millisecond")?this.valueOf()<h.valueOf():this.clone().endOf(u).valueOf()<h.valueOf())},D.isBetween=function Xd(i,u,h,g){var b=Y(i)?i:Z(i),k=Y(u)?u:Z(u);return!!(this.isValid()&&b.isValid()&&k.isValid())&&("("===(g=g||"()")[0]?this.isAfter(b,h):!this.isBefore(b,h))&&(")"===g[1]?this.isBefore(k,h):!this.isAfter(k,h))},D.isSame=function Kd(i,u){var g,h=Y(i)?i:Z(i);return!(!this.isValid()||!h.isValid())&&("millisecond"===(u=be(u)||"millisecond")?this.valueOf()===h.valueOf():(g=h.valueOf(),this.clone().startOf(u).valueOf()<=g&&g<=this.clone().endOf(u).valueOf()))},D.isSameOrAfter=function Jd(i,u){return this.isSame(i,u)||this.isAfter(i,u)},D.isSameOrBefore=function Qd(i,u){return this.isSame(i,u)||this.isBefore(i,u)},D.isValid=function bf(){return T(this)},D.lang=Ti,D.locale=Di,D.localeData=Ci,D.max=wd,D.min=xd,D.parsingFlags=function yf(){return y({},x(this))},D.set=function fu(i,u){if("object"==typeof i)for(var h=function Jl(i){var u=[];for(var h in i)u.push({unit:h,priority:Xn[h]});return u.sort(function(g,b){return g.priority-b.priority}),u}(i=ma(i)),g=0;g<h.length;g++)this[h[g].unit](i[h[g].unit]);else if(fe(this[i=be(i)]))return this[i](u);return this},D.startOf=function df(i){var u;if(void 0===(i=be(i))||"millisecond"===i||!this.isValid())return this;var h=this._isUTC?Fi:Oi;switch(i){case"year":u=h(this.year(),0,1);break;case"quarter":u=h(this.year(),this.month()-this.month()%3,1);break;case"month":u=h(this.year(),this.month(),1);break;case"week":u=h(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":u=h(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":u=h(this.year(),this.month(),this.date());break;case"hour":u=this._d.valueOf(),u-=kt(u+(this._isUTC?0:this.utcOffset()*wt),Tr);break;case"minute":u=this._d.valueOf(),u-=kt(u,wt);break;case"second":u=this._d.valueOf(),u-=kt(u,Dr)}return this._d.setTime(u),a.updateOffset(this,!0),this},D.subtract=Ud,D.toArray=function gf(){var i=this;return[i.year(),i.month(),i.date(),i.hour(),i.minute(),i.second(),i.millisecond()]},D.toObject=function mf(){var i=this;return{years:i.year(),months:i.month(),date:i.date(),hours:i.hours(),minutes:i.minutes(),seconds:i.seconds(),milliseconds:i.milliseconds()}},D.toDate=function vf(){return new Date(this.valueOf())},D.toISOString=function rf(i){if(!this.isValid())return null;var u=!0!==i,h=u?this.clone().utc():this;return h.year()<0||h.year()>9999?cr(h,u?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):fe(Date.prototype.toISOString)?u?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",cr(h,"Z")):cr(h,u?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},D.inspect=function af(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var i="moment",u="";this.isLocal()||(i=0===this.utcOffset()?"moment.utc":"moment.parseZone",u="Z");var h="["+i+'("]',g=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";return this.format(h+g+"-MM-DD[T]HH:mm:ss.SSS"+u+'[")]')},D.toJSON=function pf(){return this.isValid()?this.toISOString():null},D.toString=function tf(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},D.unix=function cf(){return Math.floor(this.valueOf()/1e3)},D.valueOf=function hf(){return this._d.valueOf()-6e4*(this._offset||0)},D.creationData=function xf(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},D.year=ai,D.isLeapYear=function uu(){return yr(this.year())},D.weekYear=function wf(i){return Ai.call(this,i,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},D.isoWeekYear=function kf(i){return Ai.call(this,i,this.isoWeek(),this.isoWeekday(),1,4)},D.quarter=D.quarters=function Tf(i){return null==i?Math.ceil((this.month()+1)/3):this.month(3*(i-1)+this.month()%3)},D.month=li,D.daysInMonth=function bu(){return xr(this.year(),this.month())},D.week=D.weeks=function Cu(i){var u=this.localeData().week(this);return null==i?u:this.add(7*(i-u),"d")},D.isoWeek=D.isoWeeks=function Pu(i){var u=Ut(this,1,4).week;return null==i?u:this.add(7*(i-u),"d")},D.weeksInYear=function Sf(){var i=this.localeData()._week;return lt(this.year(),i.dow,i.doy)},D.isoWeeksInYear=function Mf(){return lt(this.year(),1,4)},D.date=Ii,D.day=D.days=function Eu(i){if(!this.isValid())return null!=i?this:NaN;var u=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=i?(i=function Ou(i,u){return"string"!=typeof i?i:isNaN(i)?"number"==typeof(i=u.weekdaysParse(i))?i:null:parseInt(i,10)}(i,this.localeData()),this.add(i-u,"d")):u},D.weekday=function zu(i){if(!this.isValid())return null!=i?this:NaN;var u=(this.day()+7-this.localeData()._week.dow)%7;return null==i?u:this.add(i-u,"d")},D.isoWeekday=function Bu(i){if(!this.isValid())return null!=i?this:NaN;if(null!=i){var u=function Fu(i,u){return"string"==typeof i?u.weekdaysParse(i)%7||7:isNaN(i)?null:i}(i,this.localeData());return this.day(this.day()%7?u:u-7)}return this.day()||7},D.dayOfYear=function Cf(i){var u=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==i?u:this.add(i-u,"d")},D.hour=D.hours=Ju,D.minute=D.minutes=Pf,D.second=D.seconds=Of,D.millisecond=D.milliseconds=Af,D.utcOffset=function Od(i,u,h){var b,g=this._offset||0;if(!this.isValid())return null!=i?this:NaN;if(null!=i){if("string"==typeof i){if(null===(i=Aa(br,i)))return this}else Math.abs(i)<16&&!h&&(i*=60);return!this._isUTC&&u&&(b=La(this)),this._offset=i,this._isUTC=!0,null!=b&&this.add(b,"m"),g!==i&&(!u||this._changeInProgress?Si(this,Me(i-g,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?g:La(this)},D.utc=function Ad(i){return this.utcOffset(0,i)},D.local=function Id(i){return this._isUTC&&(this.utcOffset(0,i),this._isUTC=!1,i&&this.subtract(La(this),"m")),this},D.parseZone=function Ld(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var i=Aa(ru,this._i);null!=i?this.utcOffset(i):this.utcOffset(0,!0)}return this},D.hasAlignedHourOffset=function Rd(i){return!!this.isValid()&&(i=i?Z(i).utcOffset():0,(this.utcOffset()-i)%60==0)},D.isDST=function Wd(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},D.isLocal=function Yd(){return!!this.isValid()&&!this._isUTC},D.isUtcOffset=function Ed(){return!!this.isValid()&&this._isUTC},D.isUtc=wi,D.isUTC=wi,D.zoneAbbr=function If(){return this._isUTC?"UTC":""},D.zoneName=function Lf(){return this._isUTC?"Coordinated Universal Time":""},D.dates=U("dates accessor is deprecated. Use date instead.",Ii),D.months=U("months accessor is deprecated. Use month instead",li),D.years=U("years accessor is deprecated. Use year instead",ai),D.zone=U("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function Fd(i,u){return null!=i?("string"!=typeof i&&(i=-i),this.utcOffset(i,u),this):-this.utcOffset()}),D.isDSTShifted=U("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function Nd(){if(!l(this._isDSTShifted))return this._isDSTShifted;var i={};if(A(i,this),(i=bi(i))._a){var u=i._isUTC?_(i._a):Z(i._a);this._isDSTShifted=this.isValid()&&J(i._a,u.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var G=va.prototype;function Pr(i,u,h,g){var b=$e(),k=_().set(g,u);return b[h](k,i)}function Ri(i,u,h){if(f(i)&&(u=i,i=void 0),i=i||"",null!=u)return Pr(i,u,h,"month");var g,b=[];for(g=0;g<12;g++)b[g]=Pr(i,g,h,"month");return b}function Wa(i,u,h,g){"boolean"==typeof i?(f(u)&&(h=u,u=void 0),u=u||""):(h=u=i,i=!1,f(u)&&(h=u,u=void 0),u=u||"");var b=$e(),k=i?b._week.dow:0;if(null!=h)return Pr(u,(h+k)%7,g,"day");var S,R=[];for(S=0;S<7;S++)R[S]=Pr(u,(S+k)%7,g,"day");return R}G.calendar=function Bl(i,u,h){var g=this._calendar[i]||this._calendar.sameElse;return fe(g)?g.call(u,h):g},G.longDateFormat=function Vl(i){var u=this._longDateFormat[i],h=this._longDateFormat[i.toUpperCase()];return u||!h?u:(this._longDateFormat[i]=h.replace(/MMMM|MM|DD|dddd/g,function(g){return g.slice(1)}),this._longDateFormat[i])},G.invalidDate=function jl(){return this._invalidDate},G.ordinal=function ql(i){return this._ordinal.replace("%d",i)},G.preparse=Li,G.postformat=Li,G.relativeTime=function Xl(i,u,h,g){var b=this._relativeTime[h];return fe(b)?b(i,u,h,g):b.replace(/%d/i,i)},G.pastFuture=function Kl(i,u){var h=this._relativeTime[i>0?"future":"past"];return fe(h)?h(u):h.replace(/%s/i,u)},G.set=function ca(i){var u,h;for(h in i)fe(u=i[h])?this[h]=u:this["_"+h]=u;this._config=i,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},G.months=function vu(i,u){return i?o(this._months)?this._months[i.month()]:this._months[(this._months.isFormat||ii).test(u)?"format":"standalone"][i.month()]:o(this._months)?this._months:this._months.standalone},G.monthsShort=function gu(i,u){return i?o(this._monthsShort)?this._monthsShort[i.month()]:this._monthsShort[ii.test(u)?"format":"standalone"][i.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},G.monthsParse=function pu(i,u,h){var g,b,k;if(this._monthsParseExact)return mu.call(this,i,u,h);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),g=0;g<12;g++){if(b=_([2e3,g]),h&&!this._longMonthsParse[g]&&(this._longMonthsParse[g]=new RegExp("^"+this.months(b,"").replace(".","")+"$","i"),this._shortMonthsParse[g]=new RegExp("^"+this.monthsShort(b,"").replace(".","")+"$","i")),!h&&!this._monthsParse[g]&&(k="^"+this.months(b,"")+"|^"+this.monthsShort(b,""),this._monthsParse[g]=new RegExp(k.replace(".",""),"i")),h&&"MMMM"===u&&this._longMonthsParse[g].test(i))return g;if(h&&"MMM"===u&&this._shortMonthsParse[g].test(i))return g;if(!h&&this._monthsParse[g].test(i))return g}},G.monthsRegex=function wu(i){return this._monthsParseExact?(p(this,"_monthsRegex")||ui.call(this),i?this._monthsStrictRegex:this._monthsRegex):(p(this,"_monthsRegex")||(this._monthsRegex=xu),this._monthsStrictRegex&&i?this._monthsStrictRegex:this._monthsRegex)},G.monthsShortRegex=function _u(i){return this._monthsParseExact?(p(this,"_monthsRegex")||ui.call(this),i?this._monthsShortStrictRegex:this._monthsShortRegex):(p(this,"_monthsShortRegex")||(this._monthsShortRegex=yu),this._monthsShortStrictRegex&&i?this._monthsShortStrictRegex:this._monthsShortRegex)},G.week=function Mu(i){return Ut(i,this._week.dow,this._week.doy).week},G.firstDayOfYear=function Tu(){return this._week.doy},G.firstDayOfWeek=function Du(){return this._week.dow},G.weekdays=function Iu(i,u){var h=o(this._weekdays)?this._weekdays:this._weekdays[i&&!0!==i&&this._weekdays.isFormat.test(u)?"format":"standalone"];return!0===i?wa(h,this._week.dow):i?h[i.day()]:h},G.weekdaysMin=function Wu(i){return!0===i?wa(this._weekdaysMin,this._week.dow):i?this._weekdaysMin[i.day()]:this._weekdaysMin},G.weekdaysShort=function Lu(i){return!0===i?wa(this._weekdaysShort,this._week.dow):i?this._weekdaysShort[i.day()]:this._weekdaysShort},G.weekdaysParse=function Yu(i,u,h){var g,b,k;if(this._weekdaysParseExact)return Nu.call(this,i,u,h);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),g=0;g<7;g++){if(b=_([2e3,1]).day(g),h&&!this._fullWeekdaysParse[g]&&(this._fullWeekdaysParse[g]=new RegExp("^"+this.weekdays(b,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[g]=new RegExp("^"+this.weekdaysShort(b,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[g]=new RegExp("^"+this.weekdaysMin(b,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[g]||(k="^"+this.weekdays(b,"")+"|^"+this.weekdaysShort(b,"")+"|^"+this.weekdaysMin(b,""),this._weekdaysParse[g]=new RegExp(k.replace(".",""),"i")),h&&"dddd"===u&&this._fullWeekdaysParse[g].test(i))return g;if(h&&"ddd"===u&&this._shortWeekdaysParse[g].test(i))return g;if(h&&"dd"===u&&this._minWeekdaysParse[g].test(i))return g;if(!h&&this._weekdaysParse[g].test(i))return g}},G.weekdaysRegex=function Vu(i){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||ka.call(this),i?this._weekdaysStrictRegex:this._weekdaysRegex):(p(this,"_weekdaysRegex")||(this._weekdaysRegex=Hu),this._weekdaysStrictRegex&&i?this._weekdaysStrictRegex:this._weekdaysRegex)},G.weekdaysShortRegex=function ju(i){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||ka.call(this),i?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(p(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Uu),this._weekdaysShortStrictRegex&&i?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},G.weekdaysMinRegex=function $u(i){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||ka.call(this),i?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(p(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Gu),this._weekdaysMinStrictRegex&&i?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},G.isPM=function Zu(i){return"p"===(i+"").toLowerCase().charAt(0)},G.meridiem=function Ku(i,u,h){return i>11?h?"pm":"PM":h?"am":"AM"},_t("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(i){var u=i%10;return i+(1===O(i%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")}}),a.lang=U("moment.lang is deprecated. Use moment.locale instead.",_t),a.langData=U("moment.langData is deprecated. Use moment.localeData instead.",$e);var Be=Math.abs;function Wi(i,u,h,g){var b=Me(u,h);return i._milliseconds+=g*b._milliseconds,i._days+=g*b._days,i._months+=g*b._months,i._bubble()}function Ni(i){return i<0?Math.floor(i):Math.ceil(i)}function Yi(i){return 4800*i/146097}function Na(i){return 146097*i/4800}function He(i){return function(){return this.as(i)}}var qf=He("ms"),Zf=He("s"),Xf=He("m"),Kf=He("h"),Jf=He("d"),Qf=He("w"),eh=He("M"),th=He("Q"),rh=He("y");function dt(i){return function(){return this.isValid()?this._data[i]:NaN}}var ih=dt("milliseconds"),oh=dt("seconds"),sh=dt("minutes"),lh=dt("hours"),uh=dt("days"),dh=dt("months"),fh=dt("years");var Ze=Math.round,Oe={ss:44,s:45,m:45,h:22,d:26,M:11};function ch(i,u,h,g,b){return b.relativeTime(u||1,!!h,i,g)}var Ya=Math.abs;function Mt(i){return(i>0)-(i<0)||+i}function Or(){if(!this.isValid())return this.localeData().invalidDate();var g,b,i=Ya(this._milliseconds)/1e3,u=Ya(this._days),h=Ya(this._months);g=E(i/60),b=E(g/60),i%=60,g%=60;var S=E(h/12),R=h%=12,V=u,ee=b,ye=g,qt=i?i.toFixed(3).replace(/\.?0+$/,""):"",Zt=this.asSeconds();if(!Zt)return"P0D";var bh=Zt<0?"-":"",Ei=Mt(this._months)!==Mt(Zt)?"-":"",yh=Mt(this._days)!==Mt(Zt)?"-":"",Ea=Mt(this._milliseconds)!==Mt(Zt)?"-":"";return bh+"P"+(S?Ei+S+"Y":"")+(R?Ei+R+"M":"")+(V?yh+V+"D":"")+(ee||ye||qt?"T":"")+(ee?Ea+ee+"H":"")+(ye?Ea+ye+"M":"")+(qt?Ea+qt+"S":"")}var H=Sr.prototype;return H.isValid=function Td(){return this._isValid},H.abs=function Hf(){var i=this._data;return this._milliseconds=Be(this._milliseconds),this._days=Be(this._days),this._months=Be(this._months),i.milliseconds=Be(i.milliseconds),i.seconds=Be(i.seconds),i.minutes=Be(i.minutes),i.hours=Be(i.hours),i.months=Be(i.months),i.years=Be(i.years),this},H.add=function Vf(i,u){return Wi(this,i,u,1)},H.subtract=function Uf(i,u){return Wi(this,i,u,-1)},H.as=function Gf(i){if(!this.isValid())return NaN;var u,h,g=this._milliseconds;if("month"===(i=be(i))||"quarter"===i||"year"===i)switch(u=this._days+g/864e5,h=this._months+Yi(u),i){case"month":return h;case"quarter":return h/3;case"year":return h/12}else switch(u=this._days+Math.round(Na(this._months)),i){case"week":return u/7+g/6048e5;case"day":return u+g/864e5;case"hour":return 24*u+g/36e5;case"minute":return 1440*u+g/6e4;case"second":return 86400*u+g/1e3;case"millisecond":return Math.floor(864e5*u)+g;default:throw new Error("Unknown unit "+i)}},H.asMilliseconds=qf,H.asSeconds=Zf,H.asMinutes=Xf,H.asHours=Kf,H.asDays=Jf,H.asWeeks=Qf,H.asMonths=eh,H.asQuarters=th,H.asYears=rh,H.valueOf=function $f(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*O(this._months/12):NaN},H._bubble=function jf(){var b,k,S,R,V,i=this._milliseconds,u=this._days,h=this._months,g=this._data;return i>=0&&u>=0&&h>=0||i<=0&&u<=0&&h<=0||(i+=864e5*Ni(Na(h)+u),u=0,h=0),g.milliseconds=i%1e3,b=E(i/1e3),g.seconds=b%60,k=E(b/60),g.minutes=k%60,S=E(k/60),g.hours=S%24,u+=E(S/24),h+=V=E(Yi(u)),u-=Ni(Na(V)),R=E(h/12),h%=12,g.days=u,g.months=h,g.years=R,this},H.clone=function ah(){return Me(this)},H.get=function nh(i){return i=be(i),this.isValid()?this[i+"s"]():NaN},H.milliseconds=ih,H.seconds=oh,H.minutes=sh,H.hours=lh,H.days=uh,H.weeks=function hh(){return E(this.days()/7)},H.months=dh,H.years=fh,H.humanize=function ph(i){if(!this.isValid())return this.localeData().invalidDate();var u=this.localeData(),h=function vh(i,u,h){var g=Me(i).abs(),b=Ze(g.as("s")),k=Ze(g.as("m")),S=Ze(g.as("h")),R=Ze(g.as("d")),V=Ze(g.as("M")),ee=Ze(g.as("y")),ye=b<=Oe.ss&&["s",b]||b<Oe.s&&["ss",b]||k<=1&&["m"]||k<Oe.m&&["mm",k]||S<=1&&["h"]||S<Oe.h&&["hh",S]||R<=1&&["d"]||R<Oe.d&&["dd",R]||V<=1&&["M"]||V<Oe.M&&["MM",V]||ee<=1&&["y"]||["yy",ee];return ye[2]=u,ye[3]=+i>0,ye[4]=h,ch.apply(null,ye)}(this,!i,u);return i&&(h=u.pastFuture(+this,h)),u.postformat(h)},H.toISOString=Or,H.toString=Or,H.toJSON=Or,H.locale=Di,H.localeData=Ci,H.toIsoString=U("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Or),H.lang=Ti,L("X",0,0,"unix"),L("x",0,0,"valueOf"),P("x",pr),P("X",/[+-]?\d+(\.\d{1,3})?/),q("X",function(i,u,h){h._d=new Date(1e3*parseFloat(i,10))}),q("x",function(i,u,h){h._d=new Date(O(i))}),a.version="2.24.0",function n(i){r=i}(Z),a.fn=D,a.min=function kd(){return _i("isBefore",[].slice.call(arguments,0))},a.max=function Md(){return _i("isAfter",[].slice.call(arguments,0))},a.now=function(){return Date.now?Date.now():+new Date},a.utc=_,a.unix=function Rf(i){return Z(1e3*i)},a.months=function Nf(i,u){return Ri(i,u,"months")},a.isDate=c,a.locale=_t,a.invalid=C,a.duration=Me,a.isMoment=Y,a.weekdays=function Ef(i,u,h){return Wa(i,u,h,"weekdays")},a.parseZone=function Wf(){return Z.apply(null,arguments).parseZone()},a.localeData=$e,a.isDuration=Oa,a.monthsShort=function Yf(i,u){return Ri(i,u,"monthsShort")},a.weekdaysMin=function Bf(i,u,h){return Wa(i,u,h,"weekdaysMin")},a.defineLocale=Sa,a.updateLocale=function ed(i,u){if(null!=u){var h,g,b=vi;null!=(g=kr(i))&&(b=g._config),(h=new va(u=Zn(b,u))).parentLocale=re[i],re[i]=h,_t(i)}else null!=re[i]&&(null!=re[i].parentLocale?re[i]=re[i].parentLocale:null!=re[i]&&delete re[i]);return re[i]},a.locales=function td(){return ga(re)},a.weekdaysShort=function zf(i,u,h){return Wa(i,u,h,"weekdaysShort")},a.normalizeUnits=be,a.relativeTimeRounding=function gh(i){return void 0===i?Ze:"function"==typeof i&&(Ze=i,!0)},a.relativeTimeThreshold=function mh(i,u){return void 0!==Oe[i]&&(void 0===u?Oe[i]:(Oe[i]=u,"s"===i&&(Oe.ss=u-1),!0))},a.calendarFormat=function jd(i,u){var h=i.diff(u,"days",!0);return h<-6?"sameElse":h<-1?"lastWeek":h<0?"lastDay":h<1?"sameDay":h<2?"nextDay":h<7?"nextWeek":"sameElse"},a.prototype=D,a.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},a}()}),kl={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};ea._date.override("function"==typeof xe?{_id:"moment",formats:function(){return kl},parse:function(e,t){return"string"==typeof e&&"string"==typeof t?e=xe(e,t):e instanceof xe||(e=xe(e)),e.isValid()?e.valueOf():null},format:function(e,t){return xe(e).format(t)},add:function(e,t,r){return xe(e).add(t,r).valueOf()},diff:function(e,t,r){return xe(e).diff(xe(t),r)},startOf:function(e,t,r){return e=xe(e),"isoWeek"===t?e.isoWeekday(r).valueOf():e.startOf(t).valueOf()},endOf:function(e,t){return xe(e).endOf(t).valueOf()},_create:function(e){return xe(e)}}:{}),F._set("global",{plugins:{filler:{propagate:!0}}});var Ml={dataset:function(e){var t=e.fill,r=e.chart,a=r.getDatasetMeta(t),o=a&&r.isDatasetVisible(t)&&a.dataset._children||[],s=o.length||0;return s?function(d,l){return l<s&&o[l]._view||null}:null},boundary:function(e){var t=e.boundary,r=t?t.x:null,a=t?t.y:null;return m.isArray(t)?function(n,o){return t[o]}:function(n){return{x:null===r?n.x:r,y:null===a?n.y:a}}}};function Sl(e,t,r){var o,a=e._model||{},n=a.fill;if(void 0===n&&(n=!!a.backgroundColor),!1===n||null===n)return!1;if(!0===n)return"origin";if(o=parseFloat(n,10),isFinite(o)&&Math.floor(o)===o)return("-"===n[0]||"+"===n[0])&&(o=t+o),!(o===t||o<0||o>=r)&&o;switch(n){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return n;default:return!1}}function Cl(e){return(e.el._scale||{}).getPointPositionForValue?function Tl(e){var s,d,l,f,c,t=e.el._scale,r=t.options,a=t.chart.data.labels.length,n=e.fill,o=[];if(!a)return null;for(d=r.ticks.reverse?t.min:t.max,l=t.getPointPositionForValue(0,s=r.ticks.reverse?t.max:t.min),f=0;f<a;++f)c="start"===n||"end"===n?t.getPointPositionForValue(f,"start"===n?s:d):t.getBasePosition(f),r.gridLines.circular&&(c.cx=l.x,c.cy=l.y,c.angle=t.getIndexAngle(f)-Math.PI/2),o.push(c);return o}(e):function Dl(e){var o,t=e.el._model||{},r=e.el._scale||{},a=e.fill,n=null;if(isFinite(a))return null;if("start"===a?n=void 0===t.scaleBottom?r.bottom:t.scaleBottom:"end"===a?n=void 0===t.scaleTop?r.top:t.scaleTop:void 0!==t.scaleZero?n=t.scaleZero:r.getBasePixel&&(n=r.getBasePixel()),null!=n){if(void 0!==n.x&&void 0!==n.y)return n;if(m.isFinite(n))return{x:(o=r.isHorizontal())?n:null,y:o?null:n}}return null}(e)}function Pl(e,t,r){var s,n=e[t].fill,o=[t];if(!r)return n;for(;!1!==n&&-1===o.indexOf(n);){if(!isFinite(n))return n;if(!(s=e[n]))return!1;if(s.visible)return n;o.push(n),n=s.fill}return!1}function Ol(e){var t=e.fill,r="dataset";return!1===t?null:(isFinite(t)||(r="boundary"),Ml[r](e))}function Hn(e){return e&&!e.skip}function Vn(e,t,r,a,n){var o,s,d,l;if(a&&n){for(e.moveTo(t[0].x,t[0].y),o=1;o<a;++o)m.canvas.lineTo(e,t[o-1],t[o]);if(void 0!==r[0].angle){for(s=r[0].cx,d=r[0].cy,l=Math.sqrt(Math.pow(r[0].x-s,2)+Math.pow(r[0].y-d,2)),o=n-1;o>0;--o)e.arc(s,d,l,r[o].angle,r[o-1].angle,!0);return}for(e.lineTo(r[n-1].x,r[n-1].y),o=n-1;o>0;--o)m.canvas.lineTo(e,r[o],r[o-1],!0)}}function Fl(e,t,r,a,n,o){var p,y,_,w,x,M,T,C,s=t.length,d=a.spanGaps,l=[],f=[],c=0,v=0;for(e.beginPath(),p=0,y=s;p<y;++p)x=r(w=t[_=p%s]._view,_,a),M=Hn(w),T=Hn(x),o&&void 0===C&&M&&(y=s+(C=p+1)),M&&T?(c=l.push(w),v=f.push(x)):c&&v&&(d?(M&&l.push(w),T&&f.push(x)):(Vn(e,l,f,c,v),c=v=0,l=[],f=[]));Vn(e,l,f,c,v),e.closePath(),e.fillStyle=n,e.fill()}var Al={id:"filler",afterDatasetsUpdate:function(e,t){var o,s,d,l,r=(e.data.datasets||[]).length,a=t.propagate,n=[];for(s=0;s<r;++s)l=null,(d=(o=e.getDatasetMeta(s)).dataset)&&d._model&&d instanceof se.Line&&(l={visible:e.isDatasetVisible(s),fill:Sl(d,s,r),chart:e,el:d}),o.$filler=l,n.push(l);for(s=0;s<r;++s)(l=n[s])&&(l.fill=Pl(n,s,a),l.boundary=Cl(l),l.mapper=Ol(l))},beforeDatasetsDraw:function(e){var a,n,o,s,d,l,f,t=e._getSortedVisibleDatasetMetas(),r=e.ctx;for(n=t.length-1;n>=0;--n)(a=t[n].$filler)&&a.visible&&(d=(o=a.el)._children||[],f=(s=o._view).backgroundColor||F.global.defaultColor,(l=a.mapper)&&f&&d.length&&(m.canvas.clipArea(r,e.chartArea),Fl(r,d,l,s,f,o._loop),m.canvas.unclipArea(r)))}},Il=m.rtl.getRtlAdapter,Ue=m.noop,je=m.valueOrDefault;function ha(e,t){return e.usePointStyle&&e.boxWidth>t?t:e.boxWidth}F._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(e,t){var r=t.datasetIndex,a=this.chart,n=a.getDatasetMeta(r);n.hidden=null===n.hidden?!a.data.datasets[r].hidden:null,a.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(e){var t=e.data.datasets,r=e.options.legend||{},a=r.labels&&r.labels.usePointStyle;return e._getSortedDatasetMetas().map(function(n){var o=n.controller.getStyle(a?0:void 0);return{text:t[n.index].label,fillStyle:o.backgroundColor,hidden:!e.isDatasetVisible(n.index),lineCap:o.borderCapStyle,lineDash:o.borderDash,lineDashOffset:o.borderDashOffset,lineJoin:o.borderJoinStyle,lineWidth:o.borderWidth,strokeStyle:o.borderColor,pointStyle:o.pointStyle,rotation:o.rotation,datasetIndex:n.index}},this)}}},legendCallback:function(e){var a,n,o,t=document.createElement("ul"),r=e.data.datasets;for(t.setAttribute("class",e.id+"-legend"),a=0,n=r.length;a<n;a++)(o=t.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[a].backgroundColor,r[a].label&&o.appendChild(document.createTextNode(r[a].label));return t.outerHTML}});var Un=De.extend({initialize:function(e){var t=this;m.extend(t,e),t.legendHitBoxes=[],t._hoveredItem=null,t.doughnutMode=!1},beforeUpdate:Ue,update:function(e,t,r){var a=this;return a.beforeUpdate(),a.maxWidth=e,a.maxHeight=t,a.margins=r,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeBuildLabels(),a.buildLabels(),a.afterBuildLabels(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:Ue,beforeSetDimensions:Ue,setDimensions:function(){var e=this;e.isHorizontal()?(e.width=e.maxWidth,e.left=0,e.right=e.width):(e.height=e.maxHeight,e.top=0,e.bottom=e.height),e.paddingLeft=0,e.paddingTop=0,e.paddingRight=0,e.paddingBottom=0,e.minSize={width:0,height:0}},afterSetDimensions:Ue,beforeBuildLabels:Ue,buildLabels:function(){var e=this,t=e.options.labels||{},r=m.callback(t.generateLabels,[e.chart],e)||[];t.filter&&(r=r.filter(function(a){return t.filter(a,e.chart.data)})),e.options.reverse&&r.reverse(),e.legendItems=r},afterBuildLabels:Ue,beforeFit:Ue,fit:function(){var e=this,t=e.options,r=t.labels,a=t.display,n=e.ctx,o=m.options._parseFont(r),s=o.size,d=e.legendHitBoxes=[],l=e.minSize,f=e.isHorizontal();if(f?(l.width=e.maxWidth,l.height=a?10:0):(l.width=a?10:0,l.height=e.maxHeight),a){if(n.font=o.string,f){var c=e.lineWidths=[0],v=0;n.textAlign="left",n.textBaseline="middle",m.each(e.legendItems,function(T,C){var A=ha(r,s)+s/2+n.measureText(T.text).width;(0===C||c[c.length-1]+A+2*r.padding>l.width)&&(v+=s+r.padding,c[c.length-(C>0?0:1)]=0),d[C]={left:0,top:0,width:A,height:s},c[c.length-1]+=A+r.padding}),l.height+=v}else{var p=r.padding,y=e.columnWidths=[],_=e.columnHeights=[],w=r.padding,x=0,M=0;m.each(e.legendItems,function(T,C){var A=ha(r,s)+s/2+n.measureText(T.text).width;C>0&&M+s+2*p>l.height&&(w+=x+r.padding,y.push(x),_.push(M),x=0,M=0),x=Math.max(x,A),M+=s+p,d[C]={left:0,top:0,width:A,height:s}}),w+=x,y.push(x),_.push(M),l.width+=w}e.width=l.width,e.height=l.height}else e.width=l.width=e.height=l.height=0},afterFit:Ue,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var e=this,t=e.options,r=t.labels,a=F.global,n=a.defaultColor,o=a.elements.line,s=e.height,d=e.columnHeights,l=e.width,f=e.lineWidths;if(t.display){var w,c=Il(t.rtl,e.left,e.minSize.width),v=e.ctx,p=je(r.fontColor,a.defaultFontColor),y=m.options._parseFont(r),_=y.size;v.textAlign=c.textAlign("left"),v.textBaseline="middle",v.lineWidth=.5,v.strokeStyle=p,v.fillStyle=p,v.font=y.string;var x=ha(r,_),M=e.legendHitBoxes,I=function(N,Y){switch(t.align){case"start":return r.padding;case"end":return N-Y;default:return(N-Y+r.padding)/2}},A=e.isHorizontal();w=A?{x:e.left+I(l,f[0]),y:e.top+r.padding,line:0}:{x:e.left+r.padding,y:e.top+I(s,d[0]),line:0},m.rtl.overrideTextDirection(e.ctx,t.textDirection);var z=_+r.padding;m.each(e.legendItems,function(N,Y){var E=v.measureText(N.text).width,O=x+_/2+E,J=w.x,X=w.y;c.setWidth(e.minSize.width),A?Y>0&&J+O+r.padding>e.left+e.minSize.width&&(X=w.y+=z,w.line++,J=w.x=e.left+I(l,f[w.line])):Y>0&&X+z>e.top+e.minSize.height&&(J=w.x=J+e.columnWidths[w.line]+r.padding,w.line++,X=w.y=e.top+I(s,d[w.line]));var U=c.x(J);(function(N,Y,E){if(!(isNaN(x)||x<=0)){v.save();var O=je(E.lineWidth,o.borderWidth);if(v.fillStyle=je(E.fillStyle,n),v.lineCap=je(E.lineCap,o.borderCapStyle),v.lineDashOffset=je(E.lineDashOffset,o.borderDashOffset),v.lineJoin=je(E.lineJoin,o.borderJoinStyle),v.lineWidth=O,v.strokeStyle=je(E.strokeStyle,n),v.setLineDash&&v.setLineDash(je(E.lineDash,o.borderDash)),r&&r.usePointStyle){var J=x*Math.SQRT2/2,X=c.xPlus(N,x/2);m.canvas.drawPoint(v,E.pointStyle,J,X,Y+_/2,E.rotation)}else v.fillRect(c.leftForLtr(N,x),Y,x,_),0!==O&&v.strokeRect(c.leftForLtr(N,x),Y,x,_);v.restore()}})(U,X,N),M[Y].left=c.leftForLtr(U,M[Y].width),M[Y].top=X,function(N,Y,E,O){var J=_/2,X=c.xPlus(N,x+J),U=Y+J;v.fillText(E.text,X,U),E.hidden&&(v.beginPath(),v.lineWidth=2,v.moveTo(X,U),v.lineTo(c.xPlus(X,O),U),v.stroke())}(U,X,N,E),A?w.x+=O+r.padding:w.y+=z}),m.rtl.restoreTextDirection(e.ctx,t.textDirection)}},_getLegendItemAt:function(e,t){var a,n,o,r=this;if(e>=r.left&&e<=r.right&&t>=r.top&&t<=r.bottom)for(o=r.legendHitBoxes,a=0;a<o.length;++a)if(e>=(n=o[a]).left&&e<=n.left+n.width&&t>=n.top&&t<=n.top+n.height)return r.legendItems[a];return null},handleEvent:function(e){var n,t=this,r=t.options,a="mouseup"===e.type?"click":e.type;if("mousemove"===a){if(!r.onHover&&!r.onLeave)return}else{if("click"!==a)return;if(!r.onClick)return}n=t._getLegendItemAt(e.x,e.y),"click"===a?n&&r.onClick&&r.onClick.call(t,e.native,n):(r.onLeave&&n!==t._hoveredItem&&(t._hoveredItem&&r.onLeave.call(t,e.native,t._hoveredItem),t._hoveredItem=n),r.onHover&&n&&r.onHover.call(t,e.native,n))}});function jn(e,t){var r=new Un({ctx:e.ctx,options:t,chart:e});pe.configure(e,r,t),pe.addBox(e,r),e.legend=r}var Ll={id:"legend",_element:Un,beforeInit:function(e){var t=e.options.legend;t&&jn(e,t)},beforeUpdate:function(e){var t=e.options.legend,r=e.legend;t?(m.mergeIf(t,F.global.legend),r?(pe.configure(e,r,t),r.options=t):jn(e,t)):r&&(pe.removeBox(e,r),delete e.legend)},afterEvent:function(e,t){var r=e.legend;r&&r.handleEvent(t)}},Re=m.noop;F._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Gn=De.extend({initialize:function(e){m.extend(this,e),this.legendHitBoxes=[]},beforeUpdate:Re,update:function(e,t,r){var a=this;return a.beforeUpdate(),a.maxWidth=e,a.maxHeight=t,a.margins=r,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeBuildLabels(),a.buildLabels(),a.afterBuildLabels(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:Re,beforeSetDimensions:Re,setDimensions:function(){var e=this;e.isHorizontal()?(e.width=e.maxWidth,e.left=0,e.right=e.width):(e.height=e.maxHeight,e.top=0,e.bottom=e.height),e.paddingLeft=0,e.paddingTop=0,e.paddingRight=0,e.paddingBottom=0,e.minSize={width:0,height:0}},afterSetDimensions:Re,beforeBuildLabels:Re,buildLabels:Re,afterBuildLabels:Re,beforeFit:Re,fit:function(){var o,e=this,t=e.options,r=e.minSize={},a=e.isHorizontal();t.display?(o=(m.isArray(t.text)?t.text.length:1)*m.options._parseFont(t).lineHeight+2*t.padding,e.width=r.width=a?e.maxWidth:o,e.height=r.height=a?o:e.maxHeight):e.width=r.width=e.height=r.height=0},afterFit:Re,isHorizontal:function(){var e=this.options.position;return"top"===e||"bottom"===e},draw:function(){var e=this,t=e.ctx,r=e.options;if(r.display){var v,p,y,a=m.options._parseFont(r),n=a.lineHeight,o=n/2+r.padding,s=0,d=e.top,l=e.left,f=e.bottom,c=e.right;t.fillStyle=m.valueOrDefault(r.fontColor,F.global.defaultFontColor),t.font=a.string,e.isHorizontal()?(p=l+(c-l)/2,y=d+o,v=c-l):(p="left"===r.position?l+o:c-o,y=d+(f-d)/2,v=f-d,s=Math.PI*("left"===r.position?-.5:.5)),t.save(),t.translate(p,y),t.rotate(s),t.textAlign="center",t.textBaseline="middle";var _=r.text;if(m.isArray(_))for(var w=0,x=0;x<_.length;++x)t.fillText(_[x],0,w,v),w+=n;else t.fillText(_,0,0,v);t.restore()}}});function $n(e,t){var r=new Gn({ctx:e.ctx,options:t,chart:e});pe.configure(e,r,t),pe.addBox(e,r),e.titleBlock=r}var Rl={id:"title",_element:Gn,beforeInit:function(e){var t=e.options.title;t&&$n(e,t)},beforeUpdate:function(e){var t=e.options.title,r=e.titleBlock;t?(m.mergeIf(t,F.global.title),r?(pe.configure(e,r,t),r.options=t):$n(e,t)):r&&(pe.removeBox(e,r),delete e.titleBlock)}},Ge={},Wl=Al,Nl=Ll,Yl=Rl;for(var qn in Ge.filler=Wl,Ge.legend=Nl,Ge.title=Yl,W.helpers=m,function(){function e(a,n,o){var s;return"string"==typeof a?(s=parseInt(a,10),-1!==a.indexOf("%")&&(s=s/100*n.parentNode[o])):s=a,s}function t(a){return null!=a&&"none"!==a}function r(a,n,o){var s=document.defaultView,d=m._getParentNode(a),l=s.getComputedStyle(a)[n],f=s.getComputedStyle(d)[n],c=t(l),v=t(f),p=Number.POSITIVE_INFINITY;return c||v?Math.min(c?e(l,a,o):p,v?e(f,d,o):p):"none"}m.where=function(a,n){if(m.isArray(a)&&Array.prototype.filter)return a.filter(n);var o=[];return m.each(a,function(s){n(s)&&o.push(s)}),o},m.findIndex=Array.prototype.findIndex?function(a,n,o){return a.findIndex(n,o)}:function(a,n,o){o=void 0===o?a:o;for(var s=0,d=a.length;s<d;++s)if(n.call(o,a[s],s,a))return s;return-1},m.findNextWhere=function(a,n,o){m.isNullOrUndef(o)&&(o=-1);for(var s=o+1;s<a.length;s++){var d=a[s];if(n(d))return d}},m.findPreviousWhere=function(a,n,o){m.isNullOrUndef(o)&&(o=a.length);for(var s=o-1;s>=0;s--){var d=a[s];if(n(d))return d}},m.isNumber=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},m.almostEquals=function(a,n,o){return Math.abs(a-n)<o},m.almostWhole=function(a,n){var o=Math.round(a);return o-n<=a&&o+n>=a},m.max=function(a){return a.reduce(function(n,o){return isNaN(o)?n:Math.max(n,o)},Number.NEGATIVE_INFINITY)},m.min=function(a){return a.reduce(function(n,o){return isNaN(o)?n:Math.min(n,o)},Number.POSITIVE_INFINITY)},m.sign=Math.sign?function(a){return Math.sign(a)}:function(a){return 0==(a=+a)||isNaN(a)?a:a>0?1:-1},m.toRadians=function(a){return a*(Math.PI/180)},m.toDegrees=function(a){return a*(180/Math.PI)},m._decimalPlaces=function(a){if(m.isFinite(a)){for(var n=1,o=0;Math.round(a*n)/n!==a;)n*=10,o++;return o}},m.getAngleFromPoint=function(a,n){var o=n.x-a.x,s=n.y-a.y,d=Math.sqrt(o*o+s*s),l=Math.atan2(s,o);return l<-.5*Math.PI&&(l+=2*Math.PI),{angle:l,distance:d}},m.distanceBetweenPoints=function(a,n){return Math.sqrt(Math.pow(n.x-a.x,2)+Math.pow(n.y-a.y,2))},m.aliasPixel=function(a){return a%2==0?0:.5},m._alignPixel=function(a,n,o){var s=a.currentDevicePixelRatio,d=o/2;return Math.round((n-d)*s)/s+d},m.splineCurve=function(a,n,o,s){var d=a.skip?n:a,l=n,f=o.skip?n:o,c=Math.sqrt(Math.pow(l.x-d.x,2)+Math.pow(l.y-d.y,2)),v=Math.sqrt(Math.pow(f.x-l.x,2)+Math.pow(f.y-l.y,2)),p=c/(c+v),y=v/(c+v),_=s*(p=isNaN(p)?0:p),w=s*(y=isNaN(y)?0:y);return{previous:{x:l.x-_*(f.x-d.x),y:l.y-_*(f.y-d.y)},next:{x:l.x+w*(f.x-d.x),y:l.y+w*(f.y-d.y)}}},m.EPSILON=Number.EPSILON||1e-14,m.splineCurveMonotone=function(a){var s,d,l,f,v,p,y,_,w,n=(a||[]).map(function(x){return{model:x._model,deltaK:0,mK:0}}),o=n.length;for(s=0;s<o;++s)if(!(l=n[s]).model.skip){if(d=s>0?n[s-1]:null,(f=s<o-1?n[s+1]:null)&&!f.model.skip){var c=f.model.x-l.model.x;l.deltaK=0!==c?(f.model.y-l.model.y)/c:0}l.mK=!d||d.model.skip?l.deltaK:!f||f.model.skip?d.deltaK:this.sign(d.deltaK)!==this.sign(l.deltaK)?0:(d.deltaK+l.deltaK)/2}for(s=0;s<o-1;++s)if(f=n[s+1],!(l=n[s]).model.skip&&!f.model.skip){if(m.almostEquals(l.deltaK,0,this.EPSILON)){l.mK=f.mK=0;continue}v=l.mK/l.deltaK,p=f.mK/l.deltaK,!((_=Math.pow(v,2)+Math.pow(p,2))<=9)&&(y=3/Math.sqrt(_),l.mK=v*y*l.deltaK,f.mK=p*y*l.deltaK)}for(s=0;s<o;++s)!(l=n[s]).model.skip&&(f=s<o-1?n[s+1]:null,(d=s>0?n[s-1]:null)&&!d.model.skip&&(l.model.controlPointPreviousX=l.model.x-(w=(l.model.x-d.model.x)/3),l.model.controlPointPreviousY=l.model.y-w*l.mK),f&&!f.model.skip&&(l.model.controlPointNextX=l.model.x+(w=(f.model.x-l.model.x)/3),l.model.controlPointNextY=l.model.y+w*l.mK))},m.nextItem=function(a,n,o){return o?n>=a.length-1?a[0]:a[n+1]:n>=a.length-1?a[a.length-1]:a[n+1]},m.previousItem=function(a,n,o){return o?n<=0?a[a.length-1]:a[n-1]:n<=0?a[0]:a[n-1]},m.niceNum=function(a,n){var o=Math.floor(m.log10(a)),s=a/Math.pow(10,o);return(n?s<1.5?1:s<3?2:s<7?5:10:s<=1?1:s<=2?2:s<=5?5:10)*Math.pow(10,o)},m.requestAnimFrame=typeof window>"u"?function(a){a()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)},m.getRelativePosition=function(a,n){var o,s,d=a.originalEvent||a,l=a.target||a.srcElement,f=l.getBoundingClientRect(),c=d.touches;c&&c.length>0?(o=c[0].clientX,s=c[0].clientY):(o=d.clientX,s=d.clientY);var v=parseFloat(m.getStyle(l,"padding-left")),p=parseFloat(m.getStyle(l,"padding-top")),y=parseFloat(m.getStyle(l,"padding-right")),_=parseFloat(m.getStyle(l,"padding-bottom")),x=f.bottom-f.top-p-_;return{x:o=Math.round((o-f.left-v)/(f.right-f.left-v-y)*l.width/n.currentDevicePixelRatio),y:s=Math.round((s-f.top-p)/x*l.height/n.currentDevicePixelRatio)}},m.getConstraintWidth=function(a){return r(a,"max-width","clientWidth")},m.getConstraintHeight=function(a){return r(a,"max-height","clientHeight")},m._calculatePadding=function(a,n,o){return(n=m.getStyle(a,n)).indexOf("%")>-1?o*parseInt(n,10)/100:parseInt(n,10)},m._getParentNode=function(a){var n=a.parentNode;return n&&"[object ShadowRoot]"===n.toString()&&(n=n.host),n},m.getMaximumWidth=function(a){var n=m._getParentNode(a);if(!n)return a.clientWidth;var o=n.clientWidth,l=o-m._calculatePadding(n,"padding-left",o)-m._calculatePadding(n,"padding-right",o),f=m.getConstraintWidth(a);return isNaN(f)?l:Math.min(l,f)},m.getMaximumHeight=function(a){var n=m._getParentNode(a);if(!n)return a.clientHeight;var o=n.clientHeight,l=o-m._calculatePadding(n,"padding-top",o)-m._calculatePadding(n,"padding-bottom",o),f=m.getConstraintHeight(a);return isNaN(f)?l:Math.min(l,f)},m.getStyle=function(a,n){return a.currentStyle?a.currentStyle[n]:document.defaultView.getComputedStyle(a,null).getPropertyValue(n)},m.retinaScale=function(a,n){var o=a.currentDevicePixelRatio=n||typeof window<"u"&&window.devicePixelRatio||1;if(1!==o){var s=a.canvas,d=a.height,l=a.width;s.height=d*o,s.width=l*o,a.ctx.scale(o,o),!s.style.height&&!s.style.width&&(s.style.height=d+"px",s.style.width=l+"px")}},m.fontString=function(a,n,o){return n+" "+a+"px "+o},m.longestText=function(a,n,o,s){var d=(s=s||{}).data=s.data||{},l=s.garbageCollect=s.garbageCollect||[];s.font!==n&&(d=s.data={},l=s.garbageCollect=[],s.font=n),a.font=n;var v,p,y,_,w,f=0,c=o.length;for(v=0;v<c;v++)if(null!=(_=o[v])&&!0!==m.isArray(_))f=m.measureText(a,d,l,f,_);else if(m.isArray(_))for(p=0,y=_.length;p<y;p++)null!=(w=_[p])&&!m.isArray(w)&&(f=m.measureText(a,d,l,f,w));var x=l.length/2;if(x>o.length){for(v=0;v<x;v++)delete d[l[v]];l.splice(0,x)}return f},m.measureText=function(a,n,o,s,d){var l=n[d];return l||(l=n[d]=a.measureText(d).width,o.push(d)),l>s&&(s=l),s},m.numberOfLabelLines=function(a){var n=1;return m.each(a,function(o){m.isArray(o)&&o.length>n&&(n=o.length)}),n},m.color=Kt?function(a){return a instanceof CanvasGradient&&(a=F.global.defaultColor),Kt(a)}:function(a){return console.error("Color.js not found!"),a},m.getHoverColor=function(a){return a instanceof CanvasPattern||a instanceof CanvasGradient?a:m.color(a).saturate(.5).darken(.1).rgbString()}}(),W._adapters=ea,W.Animation=Wr,W.animationService=Nr,W.controllers=hn,W.DatasetController=me,W.defaults=F,W.Element=De,W.elements=se,W.Interaction=vt,W.layouts=pe,W.platform=gt,W.plugins=j,W.Scale=le,W.scaleService=Rt,W.Ticks=Wt,W.Tooltip=Kr,W.helpers.each(wl,function(e,t){W.scaleService.registerScaleType(t,e,e._defaults)}),Ge)Ge.hasOwnProperty(qn)&&W.plugins.register(Ge[qn]);W.platform.initialize();var El=W;return typeof window<"u"&&(window.Chart=W),W.Chart=W,W.Legend=Ge.legend._element,W.Title=Ge.title._element,W.pluginService=W.plugins,W.PluginBase=W.Element.extend({}),W.canvasHelpers=W.helpers.canvas,W.layoutService=W.layouts,W.LinearScaleBase=sr,W.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],function(e){W[e]=function(t,r){return new W(t,W.helpers.merge(r||{},{type:e.charAt(0).toLowerCase()+e.slice(1)}))}}),El});
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.cfd741a72b67f696.js b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/scripts.cfd741a72b67f696.js
deleted file mode 100644 (file)
index 91c6ea3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-!function(St,Dt){"object"==typeof exports&&"undefined"!=typeof module?module.exports=Dt():"function"==typeof define&&define.amd?define(Dt):(St=St||self).Chart=Dt()}(this,function(){"use strict";function za(e,t){return e(t={exports:{}},t.exports),t.exports}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var Xe={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},K=za(function(e){var t={};for(var r in Xe)Xe.hasOwnProperty(r)&&(t[Xe[r]]=r);var a=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var n in a)if(a.hasOwnProperty(n)){if(!("channels"in a[n]))throw new Error("missing channels property: "+n);if(!("labels"in a[n]))throw new Error("missing channel labels property: "+n);if(a[n].labels.length!==a[n].channels)throw new Error("channel and label counts mismatch: "+n);var o=a[n].channels,s=a[n].labels;delete a[n].channels,delete a[n].labels,Object.defineProperty(a[n],"channels",{value:o}),Object.defineProperty(a[n],"labels",{value:s})}function d(l,f){return Math.pow(l[0]-f[0],2)+Math.pow(l[1]-f[1],2)+Math.pow(l[2]-f[2],2)}a.rgb.hsl=function(l){var w,M,f=l[0]/255,c=l[1]/255,v=l[2]/255,p=Math.min(f,c,v),y=Math.max(f,c,v),_=y-p;return y===p?w=0:f===y?w=(c-v)/_:c===y?w=2+(v-f)/_:v===y&&(w=4+(f-c)/_),(w=Math.min(60*w,360))<0&&(w+=360),M=(p+y)/2,[w,100*(y===p?0:M<=.5?_/(y+p):_/(2-y-p)),100*M]},a.rgb.hsv=function(l){var f,c,v,p,y,_=l[0]/255,w=l[1]/255,x=l[2]/255,M=Math.max(_,w,x),T=M-Math.min(_,w,x),C=function(I){return(M-I)/6/T+.5};return 0===T?p=y=0:(y=T/M,f=C(_),c=C(w),v=C(x),_===M?p=v-c:w===M?p=1/3+f-v:x===M&&(p=2/3+c-f),p<0?p+=1:p>1&&(p-=1)),[360*p,100*y,100*M]},a.rgb.hwb=function(l){var f=l[0],c=l[1],v=l[2];return[a.rgb.hsl(l)[0],1/255*Math.min(f,Math.min(c,v))*100,100*(v=1-1/255*Math.max(f,Math.max(c,v)))]},a.rgb.cmyk=function(l){var w,f=l[0]/255,c=l[1]/255,v=l[2]/255;return[100*((1-f-(w=Math.min(1-f,1-c,1-v)))/(1-w)||0),100*((1-c-w)/(1-w)||0),100*((1-v-w)/(1-w)||0),100*w]},a.rgb.keyword=function(l){var f=t[l];if(f)return f;var v,c=1/0;for(var p in Xe)if(Xe.hasOwnProperty(p)){var _=d(l,Xe[p]);_<c&&(c=_,v=p)}return v},a.keyword.rgb=function(l){return Xe[l]},a.rgb.xyz=function(l){var f=l[0]/255,c=l[1]/255,v=l[2]/255;return[100*(.4124*(f=f>.04045?Math.pow((f+.055)/1.055,2.4):f/12.92)+.3576*(c=c>.04045?Math.pow((c+.055)/1.055,2.4):c/12.92)+.1805*(v=v>.04045?Math.pow((v+.055)/1.055,2.4):v/12.92)),100*(.2126*f+.7152*c+.0722*v),100*(.0193*f+.1192*c+.9505*v)]},a.rgb.lab=function(l){var f=a.rgb.xyz(l),c=f[0],v=f[1],p=f[2];return v/=100,p/=108.883,c=(c/=95.047)>.008856?Math.pow(c,1/3):7.787*c+16/116,[116*(v=v>.008856?Math.pow(v,1/3):7.787*v+16/116)-16,500*(c-v),200*(v-(p=p>.008856?Math.pow(p,1/3):7.787*p+16/116))]},a.hsl.rgb=function(l){var p,y,_,w,x,f=l[0]/360,c=l[1]/100,v=l[2]/100;if(0===c)return[x=255*v,x,x];p=2*v-(y=v<.5?v*(1+c):v+c-v*c),w=[0,0,0];for(var M=0;M<3;M++)(_=f+1/3*-(M-1))<0&&_++,_>1&&_--,w[M]=255*(x=6*_<1?p+6*(y-p)*_:2*_<1?y:3*_<2?p+(y-p)*(2/3-_)*6:p);return w},a.hsl.hsv=function(l){var f=l[0],c=l[1]/100,v=l[2]/100,p=c,y=Math.max(v,.01);return c*=(v*=2)<=1?v:2-v,p*=y<=1?y:2-y,[f,100*(0===v?2*p/(y+p):2*c/(v+c)),(v+c)/2*100]},a.hsv.rgb=function(l){var f=l[0]/60,c=l[1]/100,v=l[2]/100,p=Math.floor(f)%6,y=f-Math.floor(f),_=255*v*(1-c),w=255*v*(1-c*y),x=255*v*(1-c*(1-y));switch(v*=255,p){case 0:return[v,x,_];case 1:return[w,v,_];case 2:return[_,v,x];case 3:return[_,w,v];case 4:return[x,_,v];case 5:return[v,_,w]}},a.hsv.hsl=function(l){var y,_,w,f=l[0],c=l[1]/100,v=l[2]/100,p=Math.max(v,.01);return w=(2-c)*v,_=c*p,[f,100*(_=(_/=(y=(2-c)*p)<=1?y:2-y)||0),100*(w/=2)]},a.hwb.rgb=function(l){var y,_,w,x,M,T,C,f=l[0]/360,c=l[1]/100,v=l[2]/100,p=c+v;switch(p>1&&(c/=p,v/=p),w=6*f-(y=Math.floor(6*f)),0!=(1&y)&&(w=1-w),x=c+w*((_=1-v)-c),y){default:case 6:case 0:M=_,T=x,C=c;break;case 1:M=x,T=_,C=c;break;case 2:M=c,T=_,C=x;break;case 3:M=c,T=x,C=_;break;case 4:M=x,T=c,C=_;break;case 5:M=_,T=c,C=x}return[255*M,255*T,255*C]},a.cmyk.rgb=function(l){var c=l[1]/100,v=l[2]/100,p=l[3]/100;return[255*(1-Math.min(1,l[0]/100*(1-p)+p)),255*(1-Math.min(1,c*(1-p)+p)),255*(1-Math.min(1,v*(1-p)+p))]},a.xyz.rgb=function(l){var p,y,_,f=l[0]/100,c=l[1]/100,v=l[2]/100;return y=-.9689*f+1.8758*c+.0415*v,_=.0557*f+-.204*c+1.057*v,p=(p=3.2406*f+-1.5372*c+-.4986*v)>.0031308?1.055*Math.pow(p,1/2.4)-.055:12.92*p,y=y>.0031308?1.055*Math.pow(y,1/2.4)-.055:12.92*y,_=_>.0031308?1.055*Math.pow(_,1/2.4)-.055:12.92*_,[255*(p=Math.min(Math.max(0,p),1)),255*(y=Math.min(Math.max(0,y),1)),255*(_=Math.min(Math.max(0,_),1))]},a.xyz.lab=function(l){var f=l[0],c=l[1],v=l[2];return c/=100,v/=108.883,f=(f/=95.047)>.008856?Math.pow(f,1/3):7.787*f+16/116,[116*(c=c>.008856?Math.pow(c,1/3):7.787*c+16/116)-16,500*(f-c),200*(c-(v=v>.008856?Math.pow(v,1/3):7.787*v+16/116))]},a.lab.xyz=function(l){var p,y,_;p=l[1]/500+(y=(l[0]+16)/116),_=y-l[2]/200;var w=Math.pow(y,3),x=Math.pow(p,3),M=Math.pow(_,3);return y=w>.008856?w:(y-16/116)/7.787,p=x>.008856?x:(p-16/116)/7.787,_=M>.008856?M:(_-16/116)/7.787,[p*=95.047,y*=100,_*=108.883]},a.lab.lch=function(l){var y,f=l[0],c=l[1],v=l[2];return(y=360*Math.atan2(v,c)/2/Math.PI)<0&&(y+=360),[f,Math.sqrt(c*c+v*v),y]},a.lch.lab=function(l){var _,c=l[1];return _=l[2]/360*2*Math.PI,[l[0],c*Math.cos(_),c*Math.sin(_)]},a.rgb.ansi16=function(l){var f=l[0],c=l[1],v=l[2],p=1 in arguments?arguments[1]:a.rgb.hsv(l)[2];if(0===(p=Math.round(p/50)))return 30;var y=30+(Math.round(v/255)<<2|Math.round(c/255)<<1|Math.round(f/255));return 2===p&&(y+=60),y},a.hsv.ansi16=function(l){return a.rgb.ansi16(a.hsv.rgb(l),l[2])},a.rgb.ansi256=function(l){var f=l[0],c=l[1],v=l[2];return f===c&&c===v?f<8?16:f>248?231:Math.round((f-8)/247*24)+232:16+36*Math.round(f/255*5)+6*Math.round(c/255*5)+Math.round(v/255*5)},a.ansi16.rgb=function(l){var f=l%10;if(0===f||7===f)return l>50&&(f+=3.5),[f=f/10.5*255,f,f];var c=.5*(1+~~(l>50));return[(1&f)*c*255,(f>>1&1)*c*255,(f>>2&1)*c*255]},a.ansi256.rgb=function(l){if(l>=232){var f=10*(l-232)+8;return[f,f,f]}var c;return l-=16,[Math.floor(l/36)/5*255,Math.floor((c=l%36)/6)/5*255,c%6/5*255]},a.rgb.hex=function(l){var c=(((255&Math.round(l[0]))<<16)+((255&Math.round(l[1]))<<8)+(255&Math.round(l[2]))).toString(16).toUpperCase();return"000000".substring(c.length)+c},a.hex.rgb=function(l){var f=l.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!f)return[0,0,0];var c=f[0];3===f[0].length&&(c=c.split("").map(function(w){return w+w}).join(""));var v=parseInt(c,16);return[v>>16&255,v>>8&255,255&v]},a.rgb.hcg=function(l){var x,f=l[0]/255,c=l[1]/255,v=l[2]/255,p=Math.max(Math.max(f,c),v),y=Math.min(Math.min(f,c),v),_=p-y;return x=_<=0?0:p===f?(c-v)/_%6:p===c?2+(v-f)/_:4+(f-c)/_+4,x/=6,[360*(x%=1),100*_,100*(_<1?y/(1-_):0)]},a.hsl.hcg=function(l){var v,f=l[1]/100,c=l[2]/100,p=0;return(v=c<.5?2*f*c:2*f*(1-c))<1&&(p=(c-.5*v)/(1-v)),[l[0],100*v,100*p]},a.hsv.hcg=function(l){var c=l[2]/100,v=l[1]/100*c,p=0;return v<1&&(p=(c-v)/(1-v)),[l[0],100*v,100*p]},a.hcg.rgb=function(l){var c=l[1]/100,v=l[2]/100;if(0===c)return[255*v,255*v,255*v];var x,p=[0,0,0],y=l[0]/360%1*6,_=y%1,w=1-_;switch(Math.floor(y)){case 0:p[0]=1,p[1]=_,p[2]=0;break;case 1:p[0]=w,p[1]=1,p[2]=0;break;case 2:p[0]=0,p[1]=1,p[2]=_;break;case 3:p[0]=0,p[1]=w,p[2]=1;break;case 4:p[0]=_,p[1]=0,p[2]=1;break;default:p[0]=1,p[1]=0,p[2]=w}return[255*(c*p[0]+(x=(1-c)*v)),255*(c*p[1]+x),255*(c*p[2]+x)]},a.hcg.hsv=function(l){var f=l[1]/100,v=f+l[2]/100*(1-f),p=0;return v>0&&(p=f/v),[l[0],100*p,100*v]},a.hcg.hsl=function(l){var f=l[1]/100,v=l[2]/100*(1-f)+.5*f,p=0;return v>0&&v<.5?p=f/(2*v):v>=.5&&v<1&&(p=f/(2*(1-v))),[l[0],100*p,100*v]},a.hcg.hwb=function(l){var f=l[1]/100,v=f+l[2]/100*(1-f);return[l[0],100*(v-f),100*(1-v)]},a.hwb.hcg=function(l){var v=1-l[2]/100,p=v-l[1]/100,y=0;return p<1&&(y=(v-p)/(1-p)),[l[0],100*p,100*y]},a.apple.rgb=function(l){return[l[0]/65535*255,l[1]/65535*255,l[2]/65535*255]},a.rgb.apple=function(l){return[l[0]/255*65535,l[1]/255*65535,l[2]/255*65535]},a.gray.rgb=function(l){return[l[0]/100*255,l[0]/100*255,l[0]/100*255]},a.gray.hsl=a.gray.hsv=function(l){return[0,0,l[0]]},a.gray.hwb=function(l){return[0,100,l[0]]},a.gray.cmyk=function(l){return[0,0,0,l[0]]},a.gray.lab=function(l){return[l[0],0,0]},a.gray.hex=function(l){var f=255&Math.round(l[0]/100*255),v=((f<<16)+(f<<8)+f).toString(16).toUpperCase();return"000000".substring(v.length)+v},a.rgb.gray=function(l){return[(l[0]+l[1]+l[2])/3/255*100]}});function Vi(e,t){return function(r){return t(e(r))}}function Ui(e,t){for(var r=[t[e].parent,e],a=K[t[e].parent][e],n=t[e].parent;t[n].parent;)r.unshift(t[n].parent),a=Vi(K[t[n].parent][n],a),n=t[n].parent;return a.conversion=r,a}var ft={};Object.keys(K).forEach(function(e){ft[e]={},Object.defineProperty(ft[e],"channels",{value:K[e].channels}),Object.defineProperty(ft[e],"labels",{value:K[e].labels});var t=function(e){for(var t=function Hi(e){var t=function Bi(){for(var e={},t=Object.keys(K),r=t.length,a=0;a<r;a++)e[t[a]]={distance:-1,parent:null};return e}(),r=[e];for(t[e].distance=0;r.length;)for(var a=r.pop(),n=Object.keys(K[a]),o=n.length,s=0;s<o;s++){var d=n[s],l=t[d];-1===l.distance&&(l.distance=t[a].distance+1,l.parent=a,r.unshift(d))}return t}(e),r={},a=Object.keys(t),n=a.length,o=0;o<n;o++){var s=a[o];null!==t[s].parent&&(r[s]=Ui(s,t))}return r}(e);Object.keys(t).forEach(function(a){var n=t[a];ft[e][a]=function qi(e){var t=function(r){if(null==r)return r;arguments.length>1&&(r=Array.prototype.slice.call(arguments));var a=e(r);if("object"==typeof a)for(var n=a.length,o=0;o<n;o++)a[o]=Math.round(a[o]);return a};return"conversion"in e&&(t.conversion=e.conversion),t}(n),ft[e][a].raw=function $i(e){var t=function(r){return null==r?r:(arguments.length>1&&(r=Array.prototype.slice.call(arguments)),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}(n)})});var Zi=ft,Fr={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_e={getRgba:Ar,getHsla:Ir,getRgb:function Xi(e){var t=Ar(e);return t&&t.slice(0,3)},getHsl:function Ki(e){var t=Ir(e);return t&&t.slice(0,3)},getHwb:Ba,getAlpha:function Ji(e){var t=Ar(e);return t||(t=Ir(e))||(t=Ba(e))?t[3]:void 0},hexString:function Qi(e,r){return r=void 0!==r&&3===e.length?r:e[3],"#"+Xt(e[0])+Xt(e[1])+Xt(e[2])+(r>=0&&r<1?Xt(Math.round(255*r)):"")},rgbString:function eo(e,t){return t<1||e[3]&&e[3]<1?Ha(e,t):"rgb("+e[0]+", "+e[1]+", "+e[2]+")"},rgbaString:Ha,percentString:function to(e,t){return t<1||e[3]&&e[3]<1?Va(e,t):"rgb("+Math.round(e[0]/255*100)+"%, "+Math.round(e[1]/255*100)+"%, "+Math.round(e[2]/255*100)+"%)"},percentaString:Va,hslString:function ro(e,t){return t<1||e[3]&&e[3]<1?Ua(e,t):"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)"},hslaString:Ua,hwbString:function ao(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+(void 0!==t&&1!==t?", "+t:"")+")"},keyword:function no(e){return ja[e.slice(0,3)]}};function Ar(e){if(e){var s=[0,0,0],d=1,l=e.match(/^#([a-fA-F0-9]{3,4})$/i),f="";if(l){f=(l=l[1])[3];for(var c=0;c<s.length;c++)s[c]=parseInt(l[c]+l[c],16);f&&(d=Math.round(parseInt(f+f,16)/255*100)/100)}else if(l=e.match(/^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i)){for(f=l[2],l=l[1],c=0;c<s.length;c++)s[c]=parseInt(l.slice(2*c,2*c+2),16);f&&(d=Math.round(parseInt(f,16)/255*100)/100)}else if(l=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(c=0;c<s.length;c++)s[c]=parseInt(l[c+1]);d=parseFloat(l[4])}else if(l=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i)){for(c=0;c<s.length;c++)s[c]=Math.round(2.55*parseFloat(l[c+1]));d=parseFloat(l[4])}else if(l=e.match(/(\w+)/)){if("transparent"==l[1])return[0,0,0,0];if(!(s=Fr[l[1]]))return}for(c=0;c<s.length;c++)s[c]=Se(s[c],0,255);return d=d||0==d?Se(d,0,1):1,s[3]=d,s}}function Ir(e){if(e){var r=e.match(/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(r){var a=parseFloat(r[4]);return[Se(parseInt(r[1]),0,360),Se(parseFloat(r[2]),0,100),Se(parseFloat(r[3]),0,100),Se(isNaN(a)?1:a,0,1)]}}}function Ba(e){if(e){var r=e.match(/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/);if(r){var a=parseFloat(r[4]);return[Se(parseInt(r[1]),0,360),Se(parseFloat(r[2]),0,100),Se(parseFloat(r[3]),0,100),Se(isNaN(a)?1:a,0,1)]}}}function Ha(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"rgba("+e[0]+", "+e[1]+", "+e[2]+", "+t+")"}function Va(e,t){return"rgba("+Math.round(e[0]/255*100)+"%, "+Math.round(e[1]/255*100)+"%, "+Math.round(e[2]/255*100)+"%, "+(t||e[3]||1)+")"}function Ua(e,t){return void 0===t&&(t=void 0!==e[3]?e[3]:1),"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+t+")"}function Se(e,t,r){return Math.min(Math.max(t,e),r)}function Xt(e){var t=e.toString(16).toUpperCase();return t.length<2?"0"+t:t}var ja={};for(var Ga in Fr)ja[Fr[Ga]]=Ga;var he=function(e){return e instanceof he?e:this instanceof he?(this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1},void("string"==typeof e?(t=_e.getRgba(e))?this.setValues("rgb",t):(t=_e.getHsla(e))?this.setValues("hsl",t):(t=_e.getHwb(e))&&this.setValues("hwb",t):"object"==typeof e&&(void 0!==(t=e).r||void 0!==t.red?this.setValues("rgb",t):void 0!==t.l||void 0!==t.lightness?this.setValues("hsl",t):void 0!==t.v||void 0!==t.value?this.setValues("hsv",t):void 0!==t.w||void 0!==t.whiteness?this.setValues("hwb",t):(void 0!==t.c||void 0!==t.cyan)&&this.setValues("cmyk",t)))):new he(e);var t};he.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var e=this.values;return 1!==e.alpha?e.hwb.concat([e.alpha]):e.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var e=this.values;return e.rgb.concat([e.alpha])},hslaArray:function(){var e=this.values;return e.hsl.concat([e.alpha])},alpha:function(e){return void 0===e?this.values.alpha:(this.setValues("alpha",e),this)},red:function(e){return this.setChannel("rgb",0,e)},green:function(e){return this.setChannel("rgb",1,e)},blue:function(e){return this.setChannel("rgb",2,e)},hue:function(e){return e&&(e=(e%=360)<0?360+e:e),this.setChannel("hsl",0,e)},saturation:function(e){return this.setChannel("hsl",1,e)},lightness:function(e){return this.setChannel("hsl",2,e)},saturationv:function(e){return this.setChannel("hsv",1,e)},whiteness:function(e){return this.setChannel("hwb",1,e)},blackness:function(e){return this.setChannel("hwb",2,e)},value:function(e){return this.setChannel("hsv",2,e)},cyan:function(e){return this.setChannel("cmyk",0,e)},magenta:function(e){return this.setChannel("cmyk",1,e)},yellow:function(e){return this.setChannel("cmyk",2,e)},black:function(e){return this.setChannel("cmyk",3,e)},hexString:function(){return _e.hexString(this.values.rgb)},rgbString:function(){return _e.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return _e.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return _e.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return _e.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return _e.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return _e.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return _e.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var e=this.values.rgb;return e[0]<<16|e[1]<<8|e[2]},luminosity:function(){for(var e=this.values.rgb,t=[],r=0;r<e.length;r++){var a=e[r]/255;t[r]=a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4)}return.2126*t[0]+.7152*t[1]+.0722*t[2]},contrast:function(e){var t=this.luminosity(),r=e.luminosity();return t>r?(t+.05)/(r+.05):(r+.05)/(t+.05)},level:function(e){var t=this.contrast(e);return t>=7.1?"AAA":t>=4.5?"AA":""},dark:function(){var e=this.values.rgb;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var e=[],t=0;t<3;t++)e[t]=255-this.values.rgb[t];return this.setValues("rgb",e),this},lighten:function(e){var t=this.values.hsl;return t[2]+=t[2]*e,this.setValues("hsl",t),this},darken:function(e){var t=this.values.hsl;return t[2]-=t[2]*e,this.setValues("hsl",t),this},saturate:function(e){var t=this.values.hsl;return t[1]+=t[1]*e,this.setValues("hsl",t),this},desaturate:function(e){var t=this.values.hsl;return t[1]-=t[1]*e,this.setValues("hsl",t),this},whiten:function(e){var t=this.values.hwb;return t[1]+=t[1]*e,this.setValues("hwb",t),this},blacken:function(e){var t=this.values.hwb;return t[2]+=t[2]*e,this.setValues("hwb",t),this},greyscale:function(){var e=this.values.rgb,t=.3*e[0]+.59*e[1]+.11*e[2];return this.setValues("rgb",[t,t,t]),this},clearer:function(e){var t=this.values.alpha;return this.setValues("alpha",t-t*e),this},opaquer:function(e){var t=this.values.alpha;return this.setValues("alpha",t+t*e),this},rotate:function(e){var t=this.values.hsl,r=(t[0]+e)%360;return t[0]=r<0?360+r:r,this.setValues("hsl",t),this},mix:function(e,t){var r=this,a=e,n=void 0===t?.5:t,o=2*n-1,s=r.alpha()-a.alpha(),d=((o*s==-1?o:(o+s)/(1+o*s))+1)/2,l=1-d;return this.rgb(d*r.red()+l*a.red(),d*r.green()+l*a.green(),d*r.blue()+l*a.blue()).alpha(r.alpha()*n+a.alpha()*(1-n))},toJSON:function(){return this.rgb()},clone:function(){var a,n,e=new he,t=this.values,r=e.values;for(var o in t)t.hasOwnProperty(o)&&("[object Array]"===(n={}.toString.call(a=t[o]))?r[o]=a.slice(0):"[object Number]"===n?r[o]=a:console.error("unexpected color value:",a));return e}},he.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},he.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},he.prototype.getValues=function(e){for(var t=this.values,r={},a=0;a<e.length;a++)r[e.charAt(a)]=t[e][a];return 1!==t.alpha&&(r.a=t.alpha),r},he.prototype.setValues=function(e,t){var s,l,r=this.values,a=this.spaces,n=this.maxes,o=1;if(this.valid=!0,"alpha"===e)o=t;else if(t.length)r[e]=t.slice(0,e.length),o=t[e.length];else if(void 0!==t[e.charAt(0)]){for(s=0;s<e.length;s++)r[e][s]=t[e.charAt(s)];o=t.a}else if(void 0!==t[a[e][0]]){var d=a[e];for(s=0;s<e.length;s++)r[e][s]=t[d[s]];o=t.alpha}if(r.alpha=Math.max(0,Math.min(1,void 0===o?r.alpha:o)),"alpha"===e)return!1;for(s=0;s<e.length;s++)l=Math.max(0,Math.min(n[e][s],r[e][s])),r[e][s]=Math.round(l);for(var f in a)f!==e&&(r[f]=Zi[e][f](r[e]));return!0},he.prototype.setSpace=function(e,t){var r=t[0];return void 0===r?this.getValues(e):("number"==typeof r&&(r=Array.prototype.slice.call(t)),this.setValues(e,r),this)},he.prototype.setChannel=function(e,t,r){var a=this.values[e];return void 0===r?a[t]:(r===a[t]||(a[t]=r,this.setValues(e,a)),this)},"undefined"!=typeof window&&(window.Color=he);var Kt=he;function $a(e){return-1===["__proto__","prototype","constructor"].indexOf(e)}var e,B={noop:function(){},uid:(e=0,function(){return e++}),isNullOrUndef:function(e){return null==e},isArray:function(e){if(Array.isArray&&Array.isArray(e))return!0;var t=Object.prototype.toString.call(e);return"[object"===t.substr(0,7)&&"Array]"===t.substr(-6)},isObject:function(e){return null!==e&&"[object Object]"===Object.prototype.toString.call(e)},isFinite:function(e){return("number"==typeof e||e instanceof Number)&&isFinite(e)},valueOrDefault:function(e,t){return void 0===e?t:e},valueAtIndexOrDefault:function(e,t,r){return B.valueOrDefault(B.isArray(e)?e[t]:e,r)},callback:function(e,t,r){if(e&&"function"==typeof e.call)return e.apply(r,t)},each:function(e,t,r,a){var n,o,s;if(B.isArray(e))if(o=e.length,a)for(n=o-1;n>=0;n--)t.call(r,e[n],n);else for(n=0;n<o;n++)t.call(r,e[n],n);else if(B.isObject(e))for(o=(s=Object.keys(e)).length,n=0;n<o;n++)t.call(r,e[s[n]],s[n])},arrayEquals:function(e,t){var r,a,n,o;if(!e||!t||e.length!==t.length)return!1;for(r=0,a=e.length;r<a;++r)if(o=t[r],(n=e[r])instanceof Array&&o instanceof Array){if(!B.arrayEquals(n,o))return!1}else if(n!==o)return!1;return!0},clone:function(e){if(B.isArray(e))return e.map(B.clone);if(B.isObject(e)){for(var t=Object.create(e),r=Object.keys(e),a=r.length,n=0;n<a;++n)t[r[n]]=B.clone(e[r[n]]);return t}return e},_merger:function(e,t,r,a){if($a(e)){var n=t[e],o=r[e];B.isObject(n)&&B.isObject(o)?B.merge(n,o,a):t[e]=B.clone(o)}},_mergerIf:function(e,t,r){if($a(e)){var a=t[e],n=r[e];B.isObject(a)&&B.isObject(n)?B.mergeIf(a,n):t.hasOwnProperty(e)||(t[e]=B.clone(n))}},merge:function(e,t,r){var o,s,d,l,f,a=B.isArray(t)?t:[t],n=a.length;if(!B.isObject(e))return e;for(o=(r=r||{}).merger||B._merger,s=0;s<n;++s)if(B.isObject(t=a[s]))for(f=0,l=(d=Object.keys(t)).length;f<l;++f)o(d[f],e,t,r);return e},mergeIf:function(e,t){return B.merge(e,t,{merger:B._mergerIf})},extend:Object.assign||function(e){return B.merge(e,[].slice.call(arguments,1),{merger:function(t,r,a){r[t]=a[t]}})},inherits:function(e){var t=this,r=e&&e.hasOwnProperty("constructor")?e.constructor:function(){return t.apply(this,arguments)},a=function(){this.constructor=r};return a.prototype=t.prototype,r.prototype=new a,r.extend=B.inherits,e&&B.extend(r.prototype,e),r.__super__=t.prototype,r},_deprecated:function(e,t,r,a){void 0!==t&&console.warn(e+': "'+r+'" is deprecated. Please use "'+a+'" instead')}},ve=B;B.callCallback=B.callback,B.indexOf=function(e,t,r){return Array.prototype.indexOf.call(e,t,r)},B.getValueOrDefault=B.valueOrDefault,B.getValueAtIndexOrDefault=B.valueAtIndexOrDefault;var Tt={linear:function(e){return e},easeInQuad:function(e){return e*e},easeOutQuad:function(e){return-e*(e-2)},easeInOutQuad:function(e){return(e/=.5)<1?.5*e*e:-.5*(--e*(e-2)-1)},easeInCubic:function(e){return e*e*e},easeOutCubic:function(e){return(e-=1)*e*e+1},easeInOutCubic:function(e){return(e/=.5)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},easeInQuart:function(e){return e*e*e*e},easeOutQuart:function(e){return-((e-=1)*e*e*e-1)},easeInOutQuart:function(e){return(e/=.5)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},easeInQuint:function(e){return e*e*e*e*e},easeOutQuint:function(e){return(e-=1)*e*e*e*e+1},easeInOutQuint:function(e){return(e/=.5)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},easeInSine:function(e){return 1-Math.cos(e*(Math.PI/2))},easeOutSine:function(e){return Math.sin(e*(Math.PI/2))},easeInOutSine:function(e){return-.5*(Math.cos(Math.PI*e)-1)},easeInExpo:function(e){return 0===e?0:Math.pow(2,10*(e-1))},easeOutExpo:function(e){return 1===e?1:1-Math.pow(2,-10*e)},easeInOutExpo:function(e){return 0===e?0:1===e?1:(e/=.5)<1?.5*Math.pow(2,10*(e-1)):.5*(2-Math.pow(2,-10*--e))},easeInCirc:function(e){return e>=1?e:-(Math.sqrt(1-e*e)-1)},easeOutCirc:function(e){return Math.sqrt(1-(e-=1)*e)},easeInOutCirc:function(e){return(e/=.5)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},easeInElastic:function(e){var t=1.70158,r=0,a=1;return 0===e?0:1===e?1:(r||(r=.3),a<1?(a=1,t=r/4):t=r/(2*Math.PI)*Math.asin(1/a),-a*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/r))},easeOutElastic:function(e){var t=1.70158,r=0,a=1;return 0===e?0:1===e?1:(r||(r=.3),a<1?(a=1,t=r/4):t=r/(2*Math.PI)*Math.asin(1/a),a*Math.pow(2,-10*e)*Math.sin((e-t)*(2*Math.PI)/r)+1)},easeInOutElastic:function(e){var t=1.70158,r=0,a=1;return 0===e?0:2==(e/=.5)?1:(r||(r=.45),a<1?(a=1,t=r/4):t=r/(2*Math.PI)*Math.asin(1/a),e<1?a*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/r)*-.5:a*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/r)*.5+1)},easeInBack:function(e){var t=1.70158;return e*e*((t+1)*e-t)},easeOutBack:function(e){var t=1.70158;return(e-=1)*e*((t+1)*e+t)+1},easeInOutBack:function(e){var t=1.70158;return(e/=.5)<1?e*e*((1+(t*=1.525))*e-t)*.5:.5*((e-=2)*e*((1+(t*=1.525))*e+t)+2)},easeInBounce:function(e){return 1-Tt.easeOutBounce(1-e)},easeOutBounce:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},easeInOutBounce:function(e){return e<.5?.5*Tt.easeInBounce(2*e):.5*Tt.easeOutBounce(2*e-1)+.5}},io={effects:Tt};ve.easingEffects=Tt;var oe=Math.PI,oo=oe/180,so=2*oe,ge=oe/2,Ct=oe/4,qa=2*oe/3,Jt={clear:function(e){e.ctx.clearRect(0,0,e.width,e.height)},roundedRect:function(e,t,r,a,n,o){if(o){var s=Math.min(o,n/2,a/2),d=t+s,l=r+s,f=t+a-s,c=r+n-s;e.moveTo(t,l),d<f&&l<c?(e.arc(d,l,s,-oe,-ge),e.arc(f,l,s,-ge,0),e.arc(f,c,s,0,ge),e.arc(d,c,s,ge,oe)):d<f?(e.moveTo(d,r),e.arc(f,l,s,-ge,ge),e.arc(d,l,s,ge,oe+ge)):l<c?(e.arc(d,l,s,-oe,0),e.arc(d,c,s,0,oe)):e.arc(d,l,s,-oe,oe),e.closePath(),e.moveTo(t,r)}else e.rect(t,r,a,n)},drawPoint:function(e,t,r,a,n,o){var s,d,l,f,c,v=(o||0)*oo;if(t&&"object"==typeof t&&("[object HTMLImageElement]"===(s=t.toString())||"[object HTMLCanvasElement]"===s))return e.save(),e.translate(a,n),e.rotate(v),e.drawImage(t,-t.width/2,-t.height/2,t.width,t.height),void e.restore();if(!(isNaN(r)||r<=0)){switch(e.beginPath(),t){default:e.arc(a,n,r,0,so),e.closePath();break;case"triangle":e.moveTo(a+Math.sin(v)*r,n-Math.cos(v)*r),v+=qa,e.lineTo(a+Math.sin(v)*r,n-Math.cos(v)*r),v+=qa,e.lineTo(a+Math.sin(v)*r,n-Math.cos(v)*r),e.closePath();break;case"rectRounded":f=r-(c=.516*r),d=Math.cos(v+Ct)*f,l=Math.sin(v+Ct)*f,e.arc(a-d,n-l,c,v-oe,v-ge),e.arc(a+l,n-d,c,v-ge,v),e.arc(a+d,n+l,c,v,v+ge),e.arc(a-l,n+d,c,v+ge,v+oe),e.closePath();break;case"rect":if(!o){f=Math.SQRT1_2*r,e.rect(a-f,n-f,2*f,2*f);break}v+=Ct;case"rectRot":d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+l,n-d),e.lineTo(a+d,n+l),e.lineTo(a-l,n+d),e.closePath();break;case"crossRot":v+=Ct;case"cross":d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+d,n+l),e.moveTo(a+l,n-d),e.lineTo(a-l,n+d);break;case"star":d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+d,n+l),e.moveTo(a+l,n-d),e.lineTo(a-l,n+d),v+=Ct,d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+d,n+l),e.moveTo(a+l,n-d),e.lineTo(a-l,n+d);break;case"line":d=Math.cos(v)*r,l=Math.sin(v)*r,e.moveTo(a-d,n-l),e.lineTo(a+d,n+l);break;case"dash":e.moveTo(a,n),e.lineTo(a+Math.cos(v)*r,n+Math.sin(v)*r)}e.fill(),e.stroke()}},_isPointInArea:function(e,t){var r=1e-6;return e.x>t.left-r&&e.x<t.right+r&&e.y>t.top-r&&e.y<t.bottom+r},clipArea:function(e,t){e.save(),e.beginPath(),e.rect(t.left,t.top,t.right-t.left,t.bottom-t.top),e.clip()},unclipArea:function(e){e.restore()},lineTo:function(e,t,r,a){var n=r.steppedLine;if(n){if("middle"===n){var o=(t.x+r.x)/2;e.lineTo(o,a?r.y:t.y),e.lineTo(o,a?t.y:r.y)}else"after"===n&&!a||"after"!==n&&a?e.lineTo(t.x,r.y):e.lineTo(r.x,t.y);e.lineTo(r.x,r.y)}else r.tension?e.bezierCurveTo(a?t.controlPointPreviousX:t.controlPointNextX,a?t.controlPointPreviousY:t.controlPointNextY,a?r.controlPointNextX:r.controlPointPreviousX,a?r.controlPointNextY:r.controlPointPreviousY,r.x,r.y):e.lineTo(r.x,r.y)}},lo=Jt;ve.clear=Jt.clear,ve.drawRoundedRectangle=function(e){e.beginPath(),Jt.roundedRect.apply(Jt,arguments)};var Za={_set:function(e,t){return ve.merge(this[e]||(this[e]={}),t)}};Za._set("global",{defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",defaultLineHeight:1.2,showLines:!0});var F=Za,Qt=ve.valueOrDefault,fo={toLineHeight:function(e,t){var r=(""+e).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!r||"normal"===r[1])return 1.2*t;switch(e=+r[2],r[3]){case"px":return e;case"%":e/=100}return t*e},toPadding:function(e){var t,r,a,n;return ve.isObject(e)?(t=+e.top||0,r=+e.right||0,a=+e.bottom||0,n=+e.left||0):t=r=a=n=+e||0,{top:t,right:r,bottom:a,left:n,height:t+a,width:n+r}},_parseFont:function(e){var t=F.global,r=Qt(e.fontSize,t.defaultFontSize),a={family:Qt(e.fontFamily,t.defaultFontFamily),lineHeight:ve.options.toLineHeight(Qt(e.lineHeight,t.defaultLineHeight),r),size:r,style:Qt(e.fontStyle,t.defaultFontStyle),weight:null,string:""};return a.string=function uo(e){return!e||ve.isNullOrUndef(e.size)||ve.isNullOrUndef(e.family)?null:(e.style?e.style+" ":"")+(e.weight?e.weight+" ":"")+e.size+"px "+e.family}(a),a},resolve:function(e,t,r,a){var o,s,d,n=!0;for(o=0,s=e.length;o<s;++o)if(void 0!==(d=e[o])&&(void 0!==t&&"function"==typeof d&&(d=d(t),n=!1),void 0!==r&&ve.isArray(d)&&(d=d[r],n=!1),void 0!==d))return a&&!n&&(a.cacheable=!1),d}},Xa={_factorize:function(e){var a,t=[],r=Math.sqrt(e);for(a=1;a<r;a++)e%a==0&&(t.push(a),t.push(e/a));return r===(0|r)&&t.push(r),t.sort(function(n,o){return n-o}).pop(),t},log10:Math.log10||function(e){var t=Math.log(e)*Math.LOG10E,r=Math.round(t);return e===Math.pow(10,r)?r:t}},ho=Xa;ve.log10=Xa.log10;var m=ve,_o=lo,xo=fo,wo=ho,ko={getRtlAdapter:function(e,t,r){return e?function(e,t){return{x:function(r){return e+e+t-r},setWidth:function(r){t=r},textAlign:function(r){return"center"===r?r:"right"===r?"left":"right"},xPlus:function(r,a){return r-a},leftForLtr:function(r,a){return r-a}}}(t,r):{x:function(e){return e},setWidth:function(e){},textAlign:function(e){return e},xPlus:function(e,t){return e+t},leftForLtr:function(e,t){return e}}},overrideTextDirection:function(e,t){var r,a;("ltr"===t||"rtl"===t)&&(a=[(r=e.canvas.style).getPropertyValue("direction"),r.getPropertyPriority("direction")],r.setProperty("direction",t,"important"),e.prevTextDirection=a)},restoreTextDirection:function(e){var t=e.prevTextDirection;void 0!==t&&(delete e.prevTextDirection,e.canvas.style.setProperty("direction",t[0],t[1]))}};m.easing=io,m.canvas=_o,m.options=xo,m.math=wo,m.rtl=ko;var Lr=function(e){m.extend(this,e),this.initialize.apply(this,arguments)};m.extend(Lr.prototype,{_type:void 0,initialize:function(){this.hidden=!1},pivot:function(){var e=this;return e._view||(e._view=m.extend({},e._model)),e._start={},e},transition:function(e){var t=this,r=t._model,a=t._start,n=t._view;return r&&1!==e?(n||(n=t._view={}),a||(a=t._start={}),function Mo(e,t,r,a){var o,s,d,l,f,c,v,p,y,n=Object.keys(r);for(o=0,s=n.length;o<s;++o)if(c=r[d=n[o]],t.hasOwnProperty(d)||(t[d]=c),(l=t[d])!==c&&"_"!==d[0]){if(e.hasOwnProperty(d)||(e[d]=l),(v=typeof c)==typeof(f=e[d]))if("string"===v){if((p=Kt(f)).valid&&(y=Kt(c)).valid){t[d]=y.mix(p,a).rgbString();continue}}else if(m.isFinite(f)&&m.isFinite(c)){t[d]=f+(c-f)*a;continue}t[d]=c}}(a,n,r,e),t):(t._view=m.extend({},r),t._start=null,t)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return m.isNumber(this._model.x)&&m.isNumber(this._model.y)}}),Lr.extend=m.inherits;var De=Lr,Rr=De.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),Wr=Rr;Object.defineProperty(Rr.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(Rr.prototype,"chartInstance",{get:function(){return this.chart},set:function(e){this.chart=e}}),F._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:m.noop,onComplete:m.noop}});var Nr={animations:[],request:null,addAnimation:function(e,t,r,a){var o,s,n=this.animations;for(t.chart=e,t.startTime=Date.now(),t.duration=r,a||(e.animating=!0),o=0,s=n.length;o<s;++o)if(n[o].chart===e)return void(n[o]=t);n.push(t),1===n.length&&this.requestAnimationFrame()},cancelAnimation:function(e){var t=m.findIndex(this.animations,function(r){return r.chart===e});-1!==t&&(this.animations.splice(t,1),e.animating=!1)},requestAnimationFrame:function(){var e=this;null===e.request&&(e.request=m.requestAnimFrame.call(window,function(){e.request=null,e.startDigest()}))},startDigest:function(){var e=this;e.advance(),e.animations.length>0&&e.requestAnimationFrame()},advance:function(){for(var t,r,a,n,e=this.animations,o=0;o<e.length;)r=(t=e[o]).chart,a=t.numSteps,n=Math.floor((Date.now()-t.startTime)/t.duration*a)+1,t.currentStep=Math.min(n,a),m.callback(t.render,[r,t],r),m.callback(t.onAnimationProgress,[t],r),t.currentStep>=a?(m.callback(t.onAnimationComplete,[t],r),r.animating=!1,e.splice(o,1)):++o}},ht=m.options.resolve,Ka=["push","pop","shift","splice","unshift"];function Ja(e,t){var r=e._chartjs;if(r){var a=r.listeners,n=a.indexOf(t);-1!==n&&a.splice(n,1),!(a.length>0)&&(Ka.forEach(function(o){delete e[o]}),delete e._chartjs)}}var Yr=function(e,t){this.initialize(e,t)};m.extend(Yr.prototype,{datasetElementType:null,dataElementType:null,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth"],_dataElementOptions:["backgroundColor","borderColor","borderWidth","pointStyle"],initialize:function(e,t){var r=this;r.chart=e,r.index=t,r.linkScales(),r.addElements(),r._type=r.getMeta().type},updateIndex:function(e){this.index=e},linkScales:function(){var e=this,t=e.getMeta(),r=e.chart,a=r.scales,n=e.getDataset(),o=r.options.scales;(null===t.xAxisID||!(t.xAxisID in a)||n.xAxisID)&&(t.xAxisID=n.xAxisID||o.xAxes[0].id),(null===t.yAxisID||!(t.yAxisID in a)||n.yAxisID)&&(t.yAxisID=n.yAxisID||o.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(e){return this.chart.scales[e]},_getValueScaleId:function(){return this.getMeta().yAxisID},_getIndexScaleId:function(){return this.getMeta().xAxisID},_getValueScale:function(){return this.getScaleForId(this._getValueScaleId())},_getIndexScale:function(){return this.getScaleForId(this._getIndexScaleId())},reset:function(){this._update(!0)},destroy:function(){this._data&&Ja(this._data,this)},createMetaDataset:function(){var e=this,t=e.datasetElementType;return t&&new t({_chart:e.chart,_datasetIndex:e.index})},createMetaData:function(e){var t=this,r=t.dataElementType;return r&&new r({_chart:t.chart,_datasetIndex:t.index,_index:e})},addElements:function(){var n,o,e=this,t=e.getMeta(),r=e.getDataset().data||[],a=t.data;for(n=0,o=r.length;n<o;++n)a[n]=a[n]||e.createMetaData(n);t.dataset=t.dataset||e.createMetaDataset()},addElementAndReset:function(e){var t=this.createMetaData(e);this.getMeta().data.splice(e,0,t),this.updateElement(t,e,!0)},buildOrUpdateElements:function(){var e=this,t=e.getDataset(),r=t.data||(t.data=[]);e._data!==r&&(e._data&&Ja(e._data,e),r&&Object.isExtensible(r)&&function So(e,t){e._chartjs?e._chartjs.listeners.push(t):(Object.defineProperty(e,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[t]}}),Ka.forEach(function(r){var a="onData"+r.charAt(0).toUpperCase()+r.slice(1),n=e[r];Object.defineProperty(e,r,{configurable:!0,enumerable:!1,value:function(){var o=Array.prototype.slice.call(arguments),s=n.apply(this,o);return m.each(e._chartjs.listeners,function(d){"function"==typeof d[a]&&d[a].apply(d,o)}),s}})}))}(r,e),e._data=r),e.resyncElements()},_configure:function(){var e=this;e._config=m.merge(Object.create(null),[e.chart.options.datasets[e._type],e.getDataset()],{merger:function(t,r,a){"_meta"!==t&&"data"!==t&&m._merger(t,r,a)}})},_update:function(e){var t=this;t._configure(),t._cachedDataOpts=null,t.update(e)},update:m.noop,transition:function(e){for(var t=this.getMeta(),r=t.data||[],a=r.length,n=0;n<a;++n)r[n].transition(e);t.dataset&&t.dataset.transition(e)},draw:function(){var e=this.getMeta(),t=e.data||[],r=t.length,a=0;for(e.dataset&&e.dataset.draw();a<r;++a)t[a].draw()},getStyle:function(e){var n,t=this,r=t.getMeta(),a=r.dataset;return t._configure(),(!1===(n=a&&void 0===e?t._resolveDatasetElementOptions(a||{}):t._resolveDataElementOptions(r.data[e=e||0]||{},e)).fill||null===n.fill)&&(n.backgroundColor=n.borderColor),n},_resolveDatasetElementOptions:function(e,t){var f,c,v,p,r=this,a=r.chart,n=r._config,o=e.custom||{},s=a.options.elements[r.datasetElementType.prototype._type]||{},d=r._datasetElementOptions,l={},y={chart:a,dataset:r.getDataset(),datasetIndex:r.index,hover:t};for(f=0,c=d.length;f<c;++f)v=d[f],p=t?"hover"+v.charAt(0).toUpperCase()+v.slice(1):v,l[v]=ht([o[p],n[p],s[p]],y);return l},_resolveDataElementOptions:function(e,t){var r=this,a=e&&e.custom,n=r._cachedDataOpts;if(n&&!a)return n;var p,y,_,w,o=r.chart,s=r._config,d=o.options.elements[r.dataElementType.prototype._type]||{},l=r._dataElementOptions,f={},c={chart:o,dataIndex:t,dataset:r.getDataset(),datasetIndex:r.index},v={cacheable:!a};if(a=a||{},m.isArray(l))for(y=0,_=l.length;y<_;++y)f[w=l[y]]=ht([a[w],s[w],d[w]],c,t,v);else for(y=0,_=(p=Object.keys(l)).length;y<_;++y)f[w=p[y]]=ht([a[w],s[l[w]],s[w],d[w]],c,t,v);return v.cacheable&&(r._cachedDataOpts=Object.freeze(f)),f},removeHoverStyle:function(e){m.merge(e._model,e.$previousStyle||{}),delete e.$previousStyle},setHoverStyle:function(e){var t=this.chart.data.datasets[e._datasetIndex],r=e._index,a=e.custom||{},n=e._model,o=m.getHoverColor;e.$previousStyle={backgroundColor:n.backgroundColor,borderColor:n.borderColor,borderWidth:n.borderWidth},n.backgroundColor=ht([a.hoverBackgroundColor,t.hoverBackgroundColor,o(n.backgroundColor)],void 0,r),n.borderColor=ht([a.hoverBorderColor,t.hoverBorderColor,o(n.borderColor)],void 0,r),n.borderWidth=ht([a.hoverBorderWidth,t.hoverBorderWidth,n.borderWidth],void 0,r)},_removeDatasetHoverStyle:function(){var e=this.getMeta().dataset;e&&this.removeHoverStyle(e)},_setDatasetHoverStyle:function(){var r,a,n,o,s,d,e=this.getMeta().dataset,t={};if(e){for(d=e._model,s=this._resolveDatasetElementOptions(e,!0),r=0,a=(o=Object.keys(s)).length;r<a;++r)t[n=o[r]]=d[n],d[n]=s[n];e.$previousStyle=t}},resyncElements:function(){var e=this,t=e.getMeta(),r=e.getDataset().data,a=t.data.length,n=r.length;n<a?t.data.splice(n,a-n):n>a&&e.insertElements(a,n-a)},insertElements:function(e,t){for(var r=0;r<t;++r)this.addElementAndReset(e+r)},onDataPush:function(){var e=arguments.length;this.insertElements(this.getDataset().data.length-e,e)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(e,t){this.getMeta().data.splice(e,t),this.insertElements(e,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),Yr.extend=m.inherits;var me=Yr,Te=2*Math.PI;function Qa(e,t){var r=t.startAngle,a=t.endAngle,n=t.pixelMargin,o=n/t.outerRadius,s=t.x,d=t.y;e.beginPath(),e.arc(s,d,t.outerRadius,r-o,a+o),t.innerRadius>n?e.arc(s,d,t.innerRadius-n,a+(o=n/t.innerRadius),r-o,!0):e.arc(s,d,n,a+Math.PI/2,r-Math.PI/2),e.closePath(),e.clip()}F._set("global",{elements:{arc:{backgroundColor:F.global.defaultColor,borderColor:"#fff",borderWidth:2,borderAlign:"center"}}});var Co=De.extend({_type:"arc",inLabelRange:function(e){var t=this._view;return!!t&&Math.pow(e-t.x,2)<Math.pow(t.radius+t.hoverRadius,2)},inRange:function(e,t){var r=this._view;if(r){for(var a=m.getAngleFromPoint(r,{x:e,y:t}),n=a.angle,o=a.distance,s=r.startAngle,d=r.endAngle;d<s;)d+=Te;for(;n>d;)n-=Te;for(;n<s;)n+=Te;return n>=s&&n<=d&&o>=r.innerRadius&&o<=r.outerRadius}return!1},getCenterPoint:function(){var e=this._view,t=(e.startAngle+e.endAngle)/2,r=(e.innerRadius+e.outerRadius)/2;return{x:e.x+Math.cos(t)*r,y:e.y+Math.sin(t)*r}},getArea:function(){var e=this._view;return Math.PI*((e.endAngle-e.startAngle)/(2*Math.PI))*(Math.pow(e.outerRadius,2)-Math.pow(e.innerRadius,2))},tooltipPosition:function(){var e=this._view,t=e.startAngle+(e.endAngle-e.startAngle)/2,r=(e.outerRadius-e.innerRadius)/2+e.innerRadius;return{x:e.x+Math.cos(t)*r,y:e.y+Math.sin(t)*r}},draw:function(){var n,e=this._chart.ctx,t=this._view,r="inner"===t.borderAlign?.33:0,a={x:t.x,y:t.y,innerRadius:t.innerRadius,outerRadius:Math.max(t.outerRadius-r,0),pixelMargin:r,startAngle:t.startAngle,endAngle:t.endAngle,fullCircles:Math.floor(t.circumference/Te)};if(e.save(),e.fillStyle=t.backgroundColor,e.strokeStyle=t.borderColor,a.fullCircles){for(a.endAngle=a.startAngle+Te,e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),n=0;n<a.fullCircles;++n)e.fill();a.endAngle=a.startAngle+t.circumference%Te}e.beginPath(),e.arc(a.x,a.y,a.outerRadius,a.startAngle,a.endAngle),e.arc(a.x,a.y,a.innerRadius,a.endAngle,a.startAngle,!0),e.closePath(),e.fill(),t.borderWidth&&function To(e,t,r){var a="inner"===t.borderAlign;a?(e.lineWidth=2*t.borderWidth,e.lineJoin="round"):(e.lineWidth=t.borderWidth,e.lineJoin="bevel"),r.fullCircles&&function Do(e,t,r,a){var o,n=r.endAngle;for(a&&(r.endAngle=r.startAngle+Te,Qa(e,r),r.endAngle=n,r.endAngle===r.startAngle&&r.fullCircles&&(r.endAngle+=Te,r.fullCircles--)),e.beginPath(),e.arc(r.x,r.y,r.innerRadius,r.startAngle+Te,r.startAngle,!0),o=0;o<r.fullCircles;++o)e.stroke();for(e.beginPath(),e.arc(r.x,r.y,t.outerRadius,r.startAngle,r.startAngle+Te),o=0;o<r.fullCircles;++o)e.stroke()}(e,t,r,a),a&&Qa(e,r),e.beginPath(),e.arc(r.x,r.y,t.outerRadius,r.startAngle,r.endAngle),e.arc(r.x,r.y,r.innerRadius,r.endAngle,r.startAngle,!0),e.closePath(),e.stroke()}(e,t,a),e.restore()}}),en=m.valueOrDefault,tn=F.global.defaultColor;F._set("global",{elements:{line:{tension:.4,backgroundColor:tn,borderWidth:3,borderColor:tn,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}});var Po=De.extend({_type:"line",draw:function(){var f,c,v,e=this,t=e._view,r=e._chart.ctx,a=t.spanGaps,n=e._children.slice(),o=F.global,s=o.elements.line,d=-1,l=e._loop;if(n.length){if(e._loop){for(f=0;f<n.length;++f)if(c=m.previousItem(n,f),!n[f]._view.skip&&c._view.skip){n=n.slice(f).concat(n.slice(0,f)),l=a;break}l&&n.push(n[0])}for(r.save(),r.lineCap=t.borderCapStyle||s.borderCapStyle,r.setLineDash&&r.setLineDash(t.borderDash||s.borderDash),r.lineDashOffset=en(t.borderDashOffset,s.borderDashOffset),r.lineJoin=t.borderJoinStyle||s.borderJoinStyle,r.lineWidth=en(t.borderWidth,s.borderWidth),r.strokeStyle=t.borderColor||o.defaultColor,r.beginPath(),(v=n[0]._view).skip||(r.moveTo(v.x,v.y),d=0),f=1;f<n.length;++f)v=n[f]._view,c=-1===d?m.previousItem(n,f):n[d],v.skip||(d!==f-1&&!a||-1===d?r.moveTo(v.x,v.y):m.canvas.lineTo(r,c._view,v),d=f);l&&r.closePath(),r.stroke(),r.restore()}}}),Oo=m.valueOrDefault,rn=F.global.defaultColor;function an(e){var t=this._view;return!!t&&Math.abs(e-t.x)<t.radius+t.hitRadius}F._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:rn,borderColor:rn,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}});var Ao=De.extend({_type:"point",inRange:function(e,t){var r=this._view;return!!r&&Math.pow(e-r.x,2)+Math.pow(t-r.y,2)<Math.pow(r.hitRadius+r.radius,2)},inLabelRange:an,inXRange:an,inYRange:function Fo(e){var t=this._view;return!!t&&Math.abs(e-t.y)<t.radius+t.hitRadius},getCenterPoint:function(){var e=this._view;return{x:e.x,y:e.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var e=this._view;return{x:e.x,y:e.y,padding:e.radius+e.borderWidth}},draw:function(e){var t=this._view,r=this._chart.ctx,a=t.pointStyle,n=t.rotation,o=t.radius,s=t.x,d=t.y,l=F.global,f=l.defaultColor;t.skip||(void 0===e||m.canvas._isPointInArea(t,e))&&(r.strokeStyle=t.borderColor||f,r.lineWidth=Oo(t.borderWidth,l.elements.point.borderWidth),r.fillStyle=t.backgroundColor||f,m.canvas.drawPoint(r,a,o,s,d,n))}}),nn=F.global.defaultColor;function er(e){return e&&void 0!==e.width}function on(e){var t,r,a,n,o;return er(e)?(t=e.x-(o=e.width/2),r=e.x+o,a=Math.min(e.y,e.base),n=Math.max(e.y,e.base)):(o=e.height/2,t=Math.min(e.x,e.base),r=Math.max(e.x,e.base),a=e.y-o,n=e.y+o),{left:t,top:a,right:r,bottom:n}}function sn(e,t,r){return e===t?r:e===r?t:e}function Pt(e,t,r){var a=null===t,n=null===r,o=!(!e||a&&n)&&on(e);return o&&(a||t>=o.left&&t<=o.right)&&(n||r>=o.top&&r<=o.bottom)}F._set("global",{elements:{rectangle:{backgroundColor:nn,borderColor:nn,borderSkipped:"bottom",borderWidth:0}}});var Wo=De.extend({_type:"rectangle",draw:function(){var e=this._chart.ctx,t=this._view,r=function Ro(e){var t=on(e),r=t.right-t.left,a=t.bottom-t.top,n=function Lo(e,t,r){var o,s,d,l,a=e.borderWidth,n=function Io(e){var t=e.borderSkipped,r={};return t&&(e.horizontal?e.base>e.x&&(t=sn(t,"left","right")):e.base<e.y&&(t=sn(t,"bottom","top")),r[t]=!0),r}(e);return m.isObject(a)?(o=+a.top||0,s=+a.right||0,d=+a.bottom||0,l=+a.left||0):o=s=d=l=+a||0,{t:n.top||o<0?0:o>r?r:o,r:n.right||s<0?0:s>t?t:s,b:n.bottom||d<0?0:d>r?r:d,l:n.left||l<0?0:l>t?t:l}}(e,r/2,a/2);return{outer:{x:t.left,y:t.top,w:r,h:a},inner:{x:t.left+n.l,y:t.top+n.t,w:r-n.l-n.r,h:a-n.t-n.b}}}(t),a=r.outer,n=r.inner;e.fillStyle=t.backgroundColor,e.fillRect(a.x,a.y,a.w,a.h),(a.w!==n.w||a.h!==n.h)&&(e.save(),e.beginPath(),e.rect(a.x,a.y,a.w,a.h),e.clip(),e.fillStyle=t.borderColor,e.rect(n.x,n.y,n.w,n.h),e.fill("evenodd"),e.restore())},height:function(){var e=this._view;return e.base-e.y},inRange:function(e,t){return Pt(this._view,e,t)},inLabelRange:function(e,t){var r=this._view;return er(r)?Pt(r,e,null):Pt(r,null,t)},inXRange:function(e){return Pt(this._view,e,null)},inYRange:function(e){return Pt(this._view,null,e)},getCenterPoint:function(){var t,r,e=this._view;return er(e)?(t=e.x,r=(e.y+e.base)/2):(t=(e.x+e.base)/2,r=e.y),{x:t,y:r}},getArea:function(){var e=this._view;return er(e)?e.width*Math.abs(e.y-e.base):e.height*Math.abs(e.x-e.base)},tooltipPosition:function(){var e=this._view;return{x:e.x,y:e.y}}}),se={},Yo=Po,Eo=Ao,zo=Wo;se.Arc=Co,se.Line=Yo,se.Point=Eo,se.Rectangle=zo;var Ot=m._deprecated,ct=m.valueOrDefault;F._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),F._set("global",{datasets:{bar:{categoryPercentage:.8,barPercentage:.9}}});var ln=me.extend({dataElementType:se.Rectangle,_dataElementOptions:["backgroundColor","borderColor","borderSkipped","borderWidth","barPercentage","barThickness","categoryPercentage","maxBarThickness","minBarLength"],initialize:function(){var t,r,e=this;me.prototype.initialize.apply(e,arguments),(t=e.getMeta()).stack=e.getDataset().stack,t.bar=!0,r=e._getIndexScale().options,Ot("bar chart",r.barPercentage,"scales.[x/y]Axes.barPercentage","dataset.barPercentage"),Ot("bar chart",r.barThickness,"scales.[x/y]Axes.barThickness","dataset.barThickness"),Ot("bar chart",r.categoryPercentage,"scales.[x/y]Axes.categoryPercentage","dataset.categoryPercentage"),Ot("bar chart",e._getValueScale().options.minBarLength,"scales.[x/y]Axes.minBarLength","dataset.minBarLength"),Ot("bar chart",r.maxBarThickness,"scales.[x/y]Axes.maxBarThickness","dataset.maxBarThickness")},update:function(e){var a,n,t=this,r=t.getMeta().data;for(t._ruler=t.getRuler(),a=0,n=r.length;a<n;++a)t.updateElement(r[a],a,e)},updateElement:function(e,t,r){var a=this,n=a.getMeta(),o=a.getDataset(),s=a._resolveDataElementOptions(e,t);e._xScale=a.getScaleForId(n.xAxisID),e._yScale=a.getScaleForId(n.yAxisID),e._datasetIndex=a.index,e._index=t,e._model={backgroundColor:s.backgroundColor,borderColor:s.borderColor,borderSkipped:s.borderSkipped,borderWidth:s.borderWidth,datasetLabel:o.label,label:a.chart.data.labels[t]},m.isArray(o.data[t])&&(e._model.borderSkipped=null),a._updateElementGeometry(e,t,r,s),e.pivot()},_updateElementGeometry:function(e,t,r,a){var n=this,o=e._model,s=n._getValueScale(),d=s.getBasePixel(),l=s.isHorizontal(),f=n._ruler||n.getRuler(),c=n.calculateBarValuePixels(n.index,t,a),v=n.calculateBarIndexPixels(n.index,t,f,a);o.horizontal=l,o.base=r?d:c.base,o.x=l?r?d:c.head:v.center,o.y=l?v.center:r?d:c.head,o.height=l?v.size:void 0,o.width=l?void 0:v.size},_getStacks:function(e){var d,l,r=this._getIndexScale(),a=r._getMatchingVisibleMetas(this._type),n=r.options.stacked,o=a.length,s=[];for(d=0;d<o&&(l=a[d],(!1===n||-1===s.indexOf(l.stack)||void 0===n&&void 0===l.stack)&&s.push(l.stack),l.index!==e);++d);return s},getStackCount:function(){return this._getStacks().length},getStackIndex:function(e,t){var r=this._getStacks(e),a=void 0!==t?r.indexOf(t):-1;return-1===a?r.length-1:a},getRuler:function(){var a,n,e=this,t=e._getIndexScale(),r=[];for(a=0,n=e.getMeta().data.length;a<n;++a)r.push(t.getPixelForValue(null,a,e.index));return{pixels:r,start:t._startPixel,end:t._endPixel,stackCount:e.getStackCount(),scale:t}},calculateBarValuePixels:function(e,t,r){var x,M,T,C,I,A,z,a=this,n=a.chart,o=a._getValueScale(),s=o.isHorizontal(),d=n.data.datasets,l=o._getMatchingVisibleMetas(a._type),f=o._parseValue(d[e].data[t]),c=r.minBarLength,v=o.options.stacked,p=a.getMeta().stack,y=void 0===f.start?0:f.max>=0&&f.min>=0?f.min:f.max,_=void 0===f.start?f.end:f.max>=0&&f.min>=0?f.max-f.min:f.min-f.max,w=l.length;if(v||void 0===v&&void 0!==p)for(x=0;x<w&&(M=l[x]).index!==e;++x)M.stack===p&&(T=void 0===(z=o._parseValue(d[M.index].data[t])).start?z.end:z.min>=0&&z.max>=0?z.max:z.min,(f.min<0&&T<0||f.max>=0&&T>0)&&(y+=T));return C=o.getPixelForValue(y),A=(I=o.getPixelForValue(y+_))-C,void 0!==c&&Math.abs(A)<c&&(A=c,I=_>=0&&!s||_<0&&s?C-c:C+c),{size:A,base:C,head:I,center:I+A/2}},calculateBarIndexPixels:function(e,t,r,a){var o="flex"===a.barThickness?function Vo(e,t,r){var l,a=t.pixels,n=a[e],o=e>0?a[e-1]:null,s=e<a.length-1?a[e+1]:null,d=r.categoryPercentage;return null===o&&(o=n-(null===s?t.end-t.start:s-n)),null===s&&(s=n+n-o),l=n-(n-Math.min(o,s))/2*d,{chunk:Math.abs(s-o)/2*d/t.stackCount,ratio:r.barPercentage,start:l}}(t,r,a):function Ho(e,t,r){var d,l,a=r.barThickness,n=t.stackCount,o=t.pixels[e],s=m.isNullOrUndef(a)?function Bo(e,t){var a,n,o,s,r=e._length;for(o=1,s=t.length;o<s;++o)r=Math.min(r,Math.abs(t[o]-t[o-1]));for(o=0,s=e.getTicks().length;o<s;++o)n=e.getPixelForTick(o),r=o>0?Math.min(r,Math.abs(n-a)):r,a=n;return r}(t.scale,t.pixels):-1;return m.isNullOrUndef(a)?(d=s*r.categoryPercentage,l=r.barPercentage):(d=a*n,l=1),{chunk:d/n,ratio:l,start:o-d/2}}(t,r,a),s=this.getStackIndex(e,this.getMeta().stack),d=o.start+o.chunk*s+o.chunk/2,l=Math.min(ct(a.maxBarThickness,1/0),o.chunk*o.ratio);return{base:d-l/2,head:d+l/2,center:d,size:l}},draw:function(){var e=this,t=e.chart,r=e._getValueScale(),a=e.getMeta().data,n=e.getDataset(),o=a.length,s=0;for(m.canvas.clipArea(t.ctx,t.chartArea);s<o;++s){var d=r._parseValue(n.data[s]);!isNaN(d.min)&&!isNaN(d.max)&&a[s].draw()}m.canvas.unclipArea(t.ctx)},_resolveDataElementOptions:function(){var e=this,t=m.extend({},me.prototype._resolveDataElementOptions.apply(e,arguments)),r=e._getIndexScale().options,a=e._getValueScale().options;return t.barPercentage=ct(r.barPercentage,t.barPercentage),t.barThickness=ct(r.barThickness,t.barThickness),t.categoryPercentage=ct(r.categoryPercentage,t.categoryPercentage),t.maxBarThickness=ct(r.maxBarThickness,t.maxBarThickness),t.minBarLength=ct(a.minBarLength,t.minBarLength),t}}),Er=m.valueOrDefault,Uo=m.options.resolve;F._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(e,t){return(t.datasets[e.datasetIndex].label||"")+": ("+e.xLabel+", "+e.yLabel+", "+t.datasets[e.datasetIndex].data[e.index].r+")"}}}});var jo=me.extend({dataElementType:se.Point,_dataElementOptions:["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle","rotation"],update:function(e){var t=this,r=t.getMeta();m.each(r.data,function(n,o){t.updateElement(n,o,e)})},updateElement:function(e,t,r){var a=this,n=a.getMeta(),o=e.custom||{},s=a.getScaleForId(n.xAxisID),d=a.getScaleForId(n.yAxisID),l=a._resolveDataElementOptions(e,t),f=a.getDataset().data[t],c=a.index,v=r?s.getPixelForDecimal(.5):s.getPixelForValue("object"==typeof f?f:NaN,t,c),p=r?d.getBasePixel():d.getPixelForValue(f,t,c);e._xScale=s,e._yScale=d,e._options=l,e._datasetIndex=c,e._index=t,e._model={backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,hitRadius:l.hitRadius,pointStyle:l.pointStyle,rotation:l.rotation,radius:r?0:l.radius,skip:o.skip||isNaN(v)||isNaN(p),x:v,y:p},e.pivot()},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth,radius:t.radius},t.backgroundColor=Er(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=Er(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=Er(r.hoverBorderWidth,r.borderWidth),t.radius=r.radius+r.hoverRadius},_resolveDataElementOptions:function(e,t){var r=this,a=r.chart,n=r.getDataset(),o=e.custom||{},s=n.data[t]||{},d=me.prototype._resolveDataElementOptions.apply(r,arguments),l={chart:a,dataIndex:t,dataset:n,datasetIndex:r.index};return r._cachedDataOpts===d&&(d=m.extend({},d)),d.radius=Uo([o.radius,s.r,r._config.radius,a.options.elements.point.radius],l,t),d}}),tr=m.valueOrDefault,Ke=Math.PI,Fe=2*Ke,Je=Ke/2;F._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(e){var o,s,d,t=document.createElement("ul"),r=e.data,a=r.datasets,n=r.labels;if(t.setAttribute("class",e.id+"-legend"),a.length)for(o=0,s=a[0].data.length;o<s;++o)(d=t.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=a[0].backgroundColor[o],n[o]&&d.appendChild(document.createTextNode(n[o]));return t.outerHTML},legend:{labels:{generateLabels:function(e){var t=e.data;return t.labels.length&&t.datasets.length?t.labels.map(function(r,a){var n=e.getDatasetMeta(0),o=n.controller.getStyle(a);return{text:r,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,hidden:isNaN(t.datasets[0].data[a])||n.data[a].hidden,index:a}}):[]}},onClick:function(e,t){var n,o,s,r=t.index,a=this.chart;for(n=0,o=(a.data.datasets||[]).length;n<o;++n)(s=a.getDatasetMeta(n)).data[r]&&(s.data[r].hidden=!s.data[r].hidden);a.update()}},cutoutPercentage:50,rotation:-Je,circumference:Fe,tooltips:{callbacks:{title:function(){return""},label:function(e,t){var r=t.labels[e.index],a=": "+t.datasets[e.datasetIndex].data[e.index];return m.isArray(r)?(r=r.slice())[0]+=a:r+=a,r}}}});var un=me.extend({dataElementType:se.Arc,linkScales:m.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],getRingIndex:function(e){for(var t=0,r=0;r<e;++r)this.chart.isDatasetVisible(r)&&++t;return t},update:function(e){var x,M,t=this,r=t.chart,a=r.chartArea,n=r.options,o=1,s=1,d=0,l=0,f=t.getMeta(),c=f.data,v=n.cutoutPercentage/100||0,p=n.circumference,y=t._getRingWeight(t.index);if(p<Fe){var T=n.rotation%Fe,C=(T+=T>=Ke?-Fe:T<-Ke?Fe:0)+p,I=Math.cos(T),A=Math.sin(T),z=Math.cos(C),N=Math.sin(C),Y=T<=0&&C>=0||C>=Fe,E=T<=Je&&C>=Je||C>=Fe+Je,J=T<=-Je&&C>=-Je||C>=Ke+Je,X=T===-Ke||C>=Ke?-1:Math.min(I,I*v,z,z*v),U=J?-1:Math.min(A,A*v,N,N*v),We=Y?1:Math.max(I,I*v,z,z*v),Ne=E?1:Math.max(A,A*v,N,N*v);o=(We-X)/2,s=(Ne-U)/2,d=-(We+X)/2,l=-(Ne+U)/2}for(x=0,M=c.length;x<M;++x)c[x]._options=t._resolveDataElementOptions(c[x],x);for(r.borderWidth=t.getMaxBorderWidth(),r.outerRadius=Math.max(Math.min((a.right-a.left-r.borderWidth)/o,(a.bottom-a.top-r.borderWidth)/s)/2,0),r.innerRadius=Math.max(r.outerRadius*v,0),r.radiusLength=(r.outerRadius-r.innerRadius)/(t._getVisibleDatasetWeightTotal()||1),r.offsetX=d*r.outerRadius,r.offsetY=l*r.outerRadius,f.total=t.calculateTotal(),t.outerRadius=r.outerRadius-r.radiusLength*t._getRingWeightOffset(t.index),t.innerRadius=Math.max(t.outerRadius-r.radiusLength*y,0),x=0,M=c.length;x<M;++x)t.updateElement(c[x],x,e)},updateElement:function(e,t,r){var a=this,n=a.chart,o=n.chartArea,s=n.options,d=s.animation,l=(o.left+o.right)/2,f=(o.top+o.bottom)/2,c=s.rotation,v=s.rotation,p=a.getDataset(),y=r&&d.animateRotate||e.hidden?0:a.calculateCircumference(p.data[t])*(s.circumference/Fe),x=e._options||{};m.extend(e,{_datasetIndex:a.index,_index:t,_model:{backgroundColor:x.backgroundColor,borderColor:x.borderColor,borderWidth:x.borderWidth,borderAlign:x.borderAlign,x:l+n.offsetX,y:f+n.offsetY,startAngle:c,endAngle:v,circumference:y,outerRadius:r&&d.animateScale?0:a.outerRadius,innerRadius:r&&d.animateScale?0:a.innerRadius,label:m.valueAtIndexOrDefault(p.label,t,n.data.labels[t])}});var M=e._model;(!r||!d.animateRotate)&&(M.startAngle=0===t?s.rotation:a.getMeta().data[t-1]._model.endAngle,M.endAngle=M.startAngle+M.circumference),e.pivot()},calculateTotal:function(){var a,e=this.getDataset(),t=this.getMeta(),r=0;return m.each(t.data,function(n,o){a=e.data[o],!isNaN(a)&&!n.hidden&&(r+=Math.abs(a))}),r},calculateCircumference:function(e){var t=this.getMeta().total;return t>0&&!isNaN(e)?Fe*(Math.abs(e)/t):0},getMaxBorderWidth:function(e){var n,o,s,d,l,f,c,v,r=0,a=this.chart;if(!e)for(n=0,o=a.data.datasets.length;n<o;++n)if(a.isDatasetVisible(n)){e=(s=a.getDatasetMeta(n)).data,n!==this.index&&(l=s.controller);break}if(!e)return 0;for(n=0,o=e.length;n<o;++n)d=e[n],l?(l._configure(),f=l._resolveDataElementOptions(d,n)):f=d._options,"inner"!==f.borderAlign&&(r=(v=f.hoverBorderWidth)>(r=(c=f.borderWidth)>r?c:r)?v:r);return r},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth},t.backgroundColor=tr(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=tr(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=tr(r.hoverBorderWidth,r.borderWidth)},_getRingWeightOffset:function(e){for(var t=0,r=0;r<e;++r)this.chart.isDatasetVisible(r)&&(t+=this._getRingWeight(r));return t},_getRingWeight:function(e){return Math.max(tr(this.chart.data.datasets[e].weight,1),0)},_getVisibleDatasetWeightTotal:function(){return this._getRingWeightOffset(this.chart.data.datasets.length)}});F._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{type:"category",position:"left",offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{mode:"index",axis:"y"}}),F._set("global",{datasets:{horizontalBar:{categoryPercentage:.8,barPercentage:.9}}});var Go=ln.extend({_getValueScaleId:function(){return this.getMeta().xAxisID},_getIndexScaleId:function(){return this.getMeta().yAxisID}}),Ae=m.valueOrDefault,$o=m.options.resolve,zr=m.canvas._isPointInArea;function dn(e,t){var r=e&&e.options.ticks||{},a=r.reverse,n=void 0===r.min?t:0,o=void 0===r.max?t:0;return{start:a?o:n,end:a?n:o}}function qo(e,t,r){var a=r/2,n=dn(e,a),o=dn(t,a);return{top:o.end,right:n.end,bottom:o.start,left:n.start}}function Zo(e){var t,r,a,n;return m.isObject(e)?(t=e.top,r=e.right,a=e.bottom,n=e.left):t=r=a=n=e,{top:t,right:r,bottom:a,left:n}}F._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}});var fn=me.extend({datasetElementType:se.Line,dataElementType:se.Point,_datasetElementOptions:["backgroundColor","borderCapStyle","borderColor","borderDash","borderDashOffset","borderJoinStyle","borderWidth","cubicInterpolationMode","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},update:function(e){var l,f,t=this,r=t.getMeta(),a=r.dataset,n=r.data||[],s=t._config,d=t._showLine=Ae(s.showLine,t.chart.options.showLines);for(t._xScale=t.getScaleForId(r.xAxisID),t._yScale=t.getScaleForId(r.yAxisID),d&&(void 0!==s.tension&&void 0===s.lineTension&&(s.lineTension=s.tension),a._scale=t._yScale,a._datasetIndex=t.index,a._children=n,a._model=t._resolveDatasetElementOptions(a),a.pivot()),l=0,f=n.length;l<f;++l)t.updateElement(n[l],l,e);for(d&&0!==a._model.tension&&t.updateBezierControlPoints(),l=0,f=n.length;l<f;++l)n[l].pivot()},updateElement:function(e,t,r){var p,y,a=this,n=a.getMeta(),o=e.custom||{},s=a.getDataset(),d=a.index,l=s.data[t],f=a._xScale,c=a._yScale,v=n.dataset._model,_=a._resolveDataElementOptions(e,t);p=f.getPixelForValue("object"==typeof l?l:NaN,t,d),y=r?c.getBasePixel():a.calculatePointY(l,t,d),e._xScale=f,e._yScale=c,e._options=_,e._datasetIndex=d,e._index=t,e._model={x:p,y,skip:o.skip||isNaN(p)||isNaN(y),radius:_.radius,pointStyle:_.pointStyle,rotation:_.rotation,backgroundColor:_.backgroundColor,borderColor:_.borderColor,borderWidth:_.borderWidth,tension:Ae(o.tension,v?v.tension:0),steppedLine:!!v&&v.steppedLine,hitRadius:_.hitRadius}},_resolveDatasetElementOptions:function(e){var t=this,r=t._config,a=e.custom||{},n=t.chart.options,o=n.elements.line,s=me.prototype._resolveDatasetElementOptions.apply(t,arguments);return s.spanGaps=Ae(r.spanGaps,n.spanGaps),s.tension=Ae(r.lineTension,o.tension),s.steppedLine=$o([a.steppedLine,r.steppedLine,o.stepped]),s.clip=Zo(Ae(r.clip,qo(t._xScale,t._yScale,s.borderWidth))),s},calculatePointY:function(e,t,r){var l,c,v,p,y,_,n=this.chart,o=this._yScale,s=0,d=0;if(o.options.stacked){for(p=+o.getRightValue(e),_=(y=n._getSortedVisibleDatasetMetas()).length,l=0;l<_&&(c=y[l]).index!==r;++l)"line"===c.type&&c.yAxisID===o.id&&((v=+o.getRightValue(n.data.datasets[c.index].data[t]))<0?d+=v||0:s+=v||0);return o.getPixelForValue(p<0?d+p:s+p)}return o.getPixelForValue(e)},updateBezierControlPoints:function(){var s,d,l,f,t=this.chart,r=this.getMeta(),a=r.dataset._model,n=t.chartArea,o=r.data||[];function c(v,p,y){return Math.max(Math.min(v,y),p)}if(a.spanGaps&&(o=o.filter(function(v){return!v._model.skip})),"monotone"===a.cubicInterpolationMode)m.splineCurveMonotone(o);else for(s=0,d=o.length;s<d;++s)l=o[s]._model,f=m.splineCurve(m.previousItem(o,s)._model,l,m.nextItem(o,s)._model,a.tension),l.controlPointPreviousX=f.previous.x,l.controlPointPreviousY=f.previous.y,l.controlPointNextX=f.next.x,l.controlPointNextY=f.next.y;if(t.options.elements.line.capBezierPoints)for(s=0,d=o.length;s<d;++s)zr(l=o[s]._model,n)&&(s>0&&zr(o[s-1]._model,n)&&(l.controlPointPreviousX=c(l.controlPointPreviousX,n.left,n.right),l.controlPointPreviousY=c(l.controlPointPreviousY,n.top,n.bottom)),s<o.length-1&&zr(o[s+1]._model,n)&&(l.controlPointNextX=c(l.controlPointNextX,n.left,n.right),l.controlPointNextY=c(l.controlPointNextY,n.top,n.bottom)))},draw:function(){var l,e=this,t=e.chart,r=e.getMeta(),a=r.data||[],n=t.chartArea,o=t.canvas,s=0,d=a.length;for(e._showLine&&(m.canvas.clipArea(t.ctx,{left:!1===(l=r.dataset._model.clip).left?0:n.left-l.left,right:!1===l.right?o.width:n.right+l.right,top:!1===l.top?0:n.top-l.top,bottom:!1===l.bottom?o.height:n.bottom+l.bottom}),r.dataset.draw(),m.canvas.unclipArea(t.ctx));s<d;++s)a[s].draw(n)},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth,radius:t.radius},t.backgroundColor=Ae(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=Ae(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=Ae(r.hoverBorderWidth,r.borderWidth),t.radius=Ae(r.hoverRadius,r.radius)}}),Xo=m.options.resolve;F._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(e){var o,s,d,t=document.createElement("ul"),r=e.data,a=r.datasets,n=r.labels;if(t.setAttribute("class",e.id+"-legend"),a.length)for(o=0,s=a[0].data.length;o<s;++o)(d=t.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=a[0].backgroundColor[o],n[o]&&d.appendChild(document.createTextNode(n[o]));return t.outerHTML},legend:{labels:{generateLabels:function(e){var t=e.data;return t.labels.length&&t.datasets.length?t.labels.map(function(r,a){var n=e.getDatasetMeta(0),o=n.controller.getStyle(a);return{text:r,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,lineWidth:o.borderWidth,hidden:isNaN(t.datasets[0].data[a])||n.data[a].hidden,index:a}}):[]}},onClick:function(e,t){var n,o,s,r=t.index,a=this.chart;for(n=0,o=(a.data.datasets||[]).length;n<o;++n)(s=a.getDatasetMeta(n)).data[r].hidden=!s.data[r].hidden;a.update()}},tooltips:{callbacks:{title:function(){return""},label:function(e,t){return t.labels[e.index]+": "+e.yLabel}}}});var Ko=me.extend({dataElementType:se.Arc,linkScales:m.noop,_dataElementOptions:["backgroundColor","borderColor","borderWidth","borderAlign","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth"],_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(e){var l,f,c,t=this,r=t.getDataset(),a=t.getMeta(),n=t.chart.options.startAngle||0,o=t._starts=[],s=t._angles=[],d=a.data;for(t._updateRadius(),a.count=t.countVisibleElements(),l=0,f=r.data.length;l<f;l++)o[l]=n,c=t._computeAngle(l),s[l]=c,n+=c;for(l=0,f=d.length;l<f;++l)d[l]._options=t._resolveDataElementOptions(d[l],l),t.updateElement(d[l],l,e)},_updateRadius:function(){var e=this,t=e.chart,r=t.chartArea,a=t.options,n=Math.min(r.right-r.left,r.bottom-r.top);t.outerRadius=Math.max(n/2,0),t.innerRadius=Math.max(a.cutoutPercentage?t.outerRadius/100*a.cutoutPercentage:1,0),t.radiusLength=(t.outerRadius-t.innerRadius)/t.getVisibleDatasetCount(),e.outerRadius=t.outerRadius-t.radiusLength*e.index,e.innerRadius=e.outerRadius-t.radiusLength},updateElement:function(e,t,r){var a=this,n=a.chart,o=a.getDataset(),s=n.options,d=s.animation,l=n.scale,f=n.data.labels,c=l.xCenter,v=l.yCenter,p=s.startAngle,y=e.hidden?0:l.getDistanceFromCenterForValue(o.data[t]),_=a._starts[t],w=_+(e.hidden?0:a._angles[t]),x=d.animateScale?0:l.getDistanceFromCenterForValue(o.data[t]),M=e._options||{};m.extend(e,{_datasetIndex:a.index,_index:t,_scale:l,_model:{backgroundColor:M.backgroundColor,borderColor:M.borderColor,borderWidth:M.borderWidth,borderAlign:M.borderAlign,x:c,y:v,innerRadius:0,outerRadius:r?x:y,startAngle:r&&d.animateRotate?p:_,endAngle:r&&d.animateRotate?p:w,label:m.valueAtIndexOrDefault(f,t,f[t])}}),e.pivot()},countVisibleElements:function(){var e=this.getDataset(),t=this.getMeta(),r=0;return m.each(t.data,function(a,n){!isNaN(e.data[n])&&!a.hidden&&r++}),r},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor,n=m.valueOrDefault;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth},t.backgroundColor=n(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=n(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=n(r.hoverBorderWidth,r.borderWidth)},_computeAngle:function(e){var t=this,r=this.getMeta().count,a=t.getDataset(),n=t.getMeta();return isNaN(a.data[e])||n.data[e].hidden?0:Xo([t.chart.options.elements.arc.angle,2*Math.PI/r],{chart:t.chart,dataIndex:e,dataset:a,datasetIndex:t.index},e)}});F._set("pie",m.clone(F.doughnut)),F._set("pie",{cutoutPercentage:0});var Jo=un,Qe=m.valueOrDefault;F._set("radar",{spanGaps:!1,scale:{type:"radialLinear"},elements:{line:{fill:"start",tension:0}}});var Qo=me.extend({datasetElementType:se.Line,dataElementType:se.Point,linkScales:m.noop,_datasetElementOptions:["backgroundColor","borderWidth","borderColor","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","fill"],_dataElementOptions:{backgroundColor:"pointBackgroundColor",borderColor:"pointBorderColor",borderWidth:"pointBorderWidth",hitRadius:"pointHitRadius",hoverBackgroundColor:"pointHoverBackgroundColor",hoverBorderColor:"pointHoverBorderColor",hoverBorderWidth:"pointHoverBorderWidth",hoverRadius:"pointHoverRadius",pointStyle:"pointStyle",radius:"pointRadius",rotation:"pointRotation"},_getIndexScaleId:function(){return this.chart.scale.id},_getValueScaleId:function(){return this.chart.scale.id},update:function(e){var d,l,t=this,r=t.getMeta(),a=r.dataset,n=r.data||[],o=t.chart.scale,s=t._config;for(void 0!==s.tension&&void 0===s.lineTension&&(s.lineTension=s.tension),a._scale=o,a._datasetIndex=t.index,a._children=n,a._loop=!0,a._model=t._resolveDatasetElementOptions(a),a.pivot(),d=0,l=n.length;d<l;++d)t.updateElement(n[d],d,e);for(t.updateBezierControlPoints(),d=0,l=n.length;d<l;++d)n[d].pivot()},updateElement:function(e,t,r){var a=this,n=e.custom||{},o=a.getDataset(),s=a.chart.scale,d=s.getPointPositionForValue(t,o.data[t]),l=a._resolveDataElementOptions(e,t),f=a.getMeta().dataset._model,c=r?s.xCenter:d.x,v=r?s.yCenter:d.y;e._scale=s,e._options=l,e._datasetIndex=a.index,e._index=t,e._model={x:c,y:v,skip:n.skip||isNaN(c)||isNaN(v),radius:l.radius,pointStyle:l.pointStyle,rotation:l.rotation,backgroundColor:l.backgroundColor,borderColor:l.borderColor,borderWidth:l.borderWidth,tension:Qe(n.tension,f?f.tension:0),hitRadius:l.hitRadius}},_resolveDatasetElementOptions:function(){var e=this,t=e._config,r=e.chart.options,a=me.prototype._resolveDatasetElementOptions.apply(e,arguments);return a.spanGaps=Qe(t.spanGaps,r.spanGaps),a.tension=Qe(t.lineTension,r.elements.line.tension),a},updateBezierControlPoints:function(){var n,o,s,d,t=this.getMeta(),r=this.chart.chartArea,a=t.data||[];function l(f,c,v){return Math.max(Math.min(f,v),c)}for(t.dataset._model.spanGaps&&(a=a.filter(function(f){return!f._model.skip})),n=0,o=a.length;n<o;++n)s=a[n]._model,d=m.splineCurve(m.previousItem(a,n,!0)._model,s,m.nextItem(a,n,!0)._model,s.tension),s.controlPointPreviousX=l(d.previous.x,r.left,r.right),s.controlPointPreviousY=l(d.previous.y,r.top,r.bottom),s.controlPointNextX=l(d.next.x,r.left,r.right),s.controlPointNextY=l(d.next.y,r.top,r.bottom)},setHoverStyle:function(e){var t=e._model,r=e._options,a=m.getHoverColor;e.$previousStyle={backgroundColor:t.backgroundColor,borderColor:t.borderColor,borderWidth:t.borderWidth,radius:t.radius},t.backgroundColor=Qe(r.hoverBackgroundColor,a(r.backgroundColor)),t.borderColor=Qe(r.hoverBorderColor,a(r.borderColor)),t.borderWidth=Qe(r.hoverBorderWidth,r.borderWidth),t.radius=Qe(r.hoverRadius,r.radius)}});F._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},tooltips:{callbacks:{title:function(){return""},label:function(e){return"("+e.xLabel+", "+e.yLabel+")"}}}}),F._set("global",{datasets:{scatter:{showLine:!1}}});var hn={bar:ln,bubble:jo,doughnut:un,horizontalBar:Go,line:fn,polarArea:Ko,pie:Jo,radar:Qo,scatter:fn};function et(e,t){return e.native?{x:e.x,y:e.y}:m.getRelativePosition(e,t)}function Ft(e,t){var a,n,o,s,d,l,r=e._getSortedVisibleDatasetMetas();for(n=0,s=r.length;n<s;++n)for(o=0,d=(a=r[n].data).length;o<d;++o)(l=a[o])._view.skip||t(l)}function Br(e,t){var r=[];return Ft(e,function(a){a.inRange(t.x,t.y)&&r.push(a)}),r}function Hr(e,t,r,a){var n=Number.POSITIVE_INFINITY,o=[];return Ft(e,function(s){if(!r||s.inRange(t.x,t.y)){var d=s.getCenterPoint(),l=a(t,d);l<n?(o=[s],n=l):l===n&&o.push(s)}}),o}function Vr(e){var t=-1!==e.indexOf("x"),r=-1!==e.indexOf("y");return function(a,n){var o=t?Math.abs(a.x-n.x):0,s=r?Math.abs(a.y-n.y):0;return Math.sqrt(Math.pow(o,2)+Math.pow(s,2))}}function Ur(e,t,r){var a=et(t,e);r.axis=r.axis||"x";var n=Vr(r.axis),o=r.intersect?Br(e,a):Hr(e,a,!1,n),s=[];return o.length?(e._getSortedVisibleDatasetMetas().forEach(function(d){var l=d.data[o[0]._index];l&&!l._view.skip&&s.push(l)}),s):[]}var vt={modes:{single:function(e,t){var r=et(t,e),a=[];return Ft(e,function(n){if(n.inRange(r.x,r.y))return a.push(n),a}),a.slice(0,1)},label:Ur,index:Ur,dataset:function(e,t,r){var a=et(t,e);r.axis=r.axis||"xy";var n=Vr(r.axis),o=r.intersect?Br(e,a):Hr(e,a,!1,n);return o.length>0&&(o=e.getDatasetMeta(o[0]._datasetIndex).data),o},"x-axis":function(e,t){return Ur(e,t,{intersect:!1})},point:function(e,t){return Br(e,et(t,e))},nearest:function(e,t,r){var a=et(t,e);r.axis=r.axis||"xy";var n=Vr(r.axis);return Hr(e,a,r.intersect,n)},x:function(e,t,r){var a=et(t,e),n=[],o=!1;return Ft(e,function(s){s.inXRange(a.x)&&n.push(s),s.inRange(a.x,a.y)&&(o=!0)}),r.intersect&&!o&&(n=[]),n},y:function(e,t,r){var a=et(t,e),n=[],o=!1;return Ft(e,function(s){s.inYRange(a.y)&&n.push(s),s.inRange(a.x,a.y)&&(o=!0)}),r.intersect&&!o&&(n=[]),n}}},jr=m.extend;function At(e,t){return m.where(e,function(r){return r.pos===t})}function rr(e,t){return e.sort(function(r,a){var n=t?a:r,o=t?r:a;return n.weight===o.weight?n.index-o.index:n.weight-o.weight})}function cn(e,t,r,a){return Math.max(e[r],t[r])+Math.max(e[a],t[a])}function ns(e,t,r){var o,s,a=r.box,n=e.maxPadding;if(r.size&&(e[r.pos]-=r.size),r.size=r.horizontal?a.height:a.width,e[r.pos]+=r.size,a.getPadding){var d=a.getPadding();n.top=Math.max(n.top,d.top),n.left=Math.max(n.left,d.left),n.bottom=Math.max(n.bottom,d.bottom),n.right=Math.max(n.right,d.right)}if(o=t.outerWidth-cn(n,e,"left","right"),s=t.outerHeight-cn(n,e,"top","bottom"),o!==e.w||s!==e.h){e.w=o,e.h=s;var l=r.horizontal?[o,e.w]:[s,e.h];return!(l[0]===l[1]||isNaN(l[0])&&isNaN(l[1]))}}function os(e,t){var r=t.maxPadding;return function a(n){var o={left:0,top:0,right:0,bottom:0};return n.forEach(function(s){o[s]=Math.max(t[s],r[s])}),o}(e?["left","right"]:["top","bottom"])}function ar(e,t,r){var n,o,s,d,l,f,a=[];for(n=0,o=e.length;n<o;++n)(d=(s=e[n]).box).update(s.width||t.w,s.height||t.h,os(s.horizontal,t)),ns(t,r,s)&&(f=!0,a.length&&(l=!0)),d.fullWidth||a.push(s);return l&&ar(a,t,r)||f}function vn(e,t,r){var s,d,l,f,a=r.padding,n=t.x,o=t.y;for(s=0,d=e.length;s<d;++s)f=(l=e[s]).box,l.horizontal?(f.left=f.fullWidth?a.left:t.left,f.right=f.fullWidth?r.outerWidth-a.right:t.left+t.w,f.top=o,f.bottom=o+f.height,f.width=f.right-f.left,o=f.bottom):(f.left=n,f.right=n+f.width,f.top=t.top,f.bottom=t.top+t.h,f.height=f.bottom-f.top,n=f.right);t.x=n,t.y=o}F._set("global",{layout:{padding:{top:0,right:0,bottom:0,left:0}}});var pe={defaults:{},addBox:function(e,t){e.boxes||(e.boxes=[]),t.fullWidth=t.fullWidth||!1,t.position=t.position||"top",t.weight=t.weight||0,t._layers=t._layers||function(){return[{z:0,draw:function(){t.draw.apply(t,arguments)}}]},e.boxes.push(t)},removeBox:function(e,t){var r=e.boxes?e.boxes.indexOf(t):-1;-1!==r&&e.boxes.splice(r,1)},configure:function(e,t,r){for(var s,a=["fullWidth","position","weight"],n=a.length,o=0;o<n;++o)r.hasOwnProperty(s=a[o])&&(t[s]=r[s])},update:function(e,t,r){if(e){var n=m.options.toPadding((e.options.layout||{}).padding),o=t-n.width,s=r-n.height,d=function as(e){var t=function ts(e){var r,a,n,t=[];for(r=0,a=(e||[]).length;r<a;++r)t.push({index:r,box:n=e[r],pos:n.position,horizontal:n.isHorizontal(),weight:n.weight});return t}(e),r=rr(At(t,"left"),!0),a=rr(At(t,"right")),n=rr(At(t,"top"),!0),o=rr(At(t,"bottom"));return{leftAndTop:r.concat(n),rightAndBottom:a.concat(o),chartArea:At(t,"chartArea"),vertical:r.concat(a),horizontal:n.concat(o)}}(e.boxes),l=d.vertical,f=d.horizontal,c=Object.freeze({outerWidth:t,outerHeight:r,padding:n,availableWidth:o,vBoxMaxWidth:o/2/l.length,hBoxMaxHeight:s/2}),v=jr({maxPadding:jr({},n),w:o,h:s,x:n.left,y:n.top},n);(function rs(e,t){var r,a,n;for(r=0,a=e.length;r<a;++r)(n=e[r]).width=n.horizontal?n.box.fullWidth&&t.availableWidth:t.vBoxMaxWidth,n.height=n.horizontal&&t.hBoxMaxHeight})(l.concat(f),c),ar(l,v,c),ar(f,v,c)&&ar(l,v,c),function is(e){var t=e.maxPadding;function r(a){var n=Math.max(t[a]-e[a],0);return e[a]+=n,n}e.y+=r("top"),e.x+=r("left"),r("right"),r("bottom")}(v),vn(d.leftAndTop,v,c),v.x+=v.w,v.y+=v.h,vn(d.rightAndBottom,v,c),e.chartArea={left:v.left,top:v.top,right:v.left+v.w,bottom:v.top+v.h},m.each(d.chartArea,function(p){var y=p.box;jr(y,e.chartArea),y.update(v.w,v.h)})}}},ds=function zi(e){return e&&e.default||e}(Object.freeze({__proto__:null,default:"/*\r\n * DOM element rendering detection\r\n * https://davidwalsh.name/detect-node-insertion\r\n */\r\n@keyframes chartjs-render-animation {\r\n\tfrom { opacity: 0.99; }\r\n\tto { opacity: 1; }\r\n}\r\n\r\n.chartjs-render-monitor {\r\n\tanimation: chartjs-render-animation 0.001s;\r\n}\r\n\r\n/*\r\n * DOM element resizing detection\r\n * https://github.com/marcj/css-element-queries\r\n */\r\n.chartjs-size-monitor,\r\n.chartjs-size-monitor-expand,\r\n.chartjs-size-monitor-shrink {\r\n\tposition: absolute;\r\n\tdirection: ltr;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\tvisibility: hidden;\r\n\tz-index: -1;\r\n}\r\n\r\n.chartjs-size-monitor-expand > div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n"})),ie="$chartjs",Gr="chartjs-",$r=Gr+"size-monitor",gn=Gr+"render-monitor",mn=["animationstart","webkitAnimationStart"],hs={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};function pn(e,t){var r=m.getStyle(e,t),a=r&&r.match(/^(\d+)(\.\d+)?px$/);return a?Number(a[1]):void 0}var vs=function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){e=!0}});window.addEventListener("e",null,t)}catch(r){}return e}(),bn=!!vs&&{passive:!0};function It(e,t,r){e.addEventListener(t,r,bn)}function qr(e,t,r){e.removeEventListener(t,r,bn)}function Zr(e,t,r,a,n){return{type:e,chart:t,native:n||null,x:void 0!==r?r:null,y:void 0!==a?a:null}}function Lt(e){var t=document.createElement("div");return t.className=e||"",t}var yn={disableCSSInjection:!1,_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,_ensureLoaded:function(e){if(!this.disableCSSInjection){var t=e.getRootNode?e.getRootNode():document;!function ws(e,t){var r=e[ie]||(e[ie]={});if(!r.containsStyles){r.containsStyles=!0,t="/* Chart.js */\n"+t;var a=document.createElement("style");a.setAttribute("type","text/css"),a.appendChild(document.createTextNode(t)),e.appendChild(a)}}(t.host?t:document.head,ds)}},acquireContext:function(e,t){"string"==typeof e?e=document.getElementById(e):e.length&&(e=e[0]),e&&e.canvas&&(e=e.canvas);var r=e&&e.getContext&&e.getContext("2d");return r&&r.canvas===e?(this._ensureLoaded(e),function cs(e,t){var r=e.style,a=e.getAttribute("height"),n=e.getAttribute("width");if(e[ie]={initial:{height:a,width:n,style:{display:r.display,height:r.height,width:r.width}}},r.display=r.display||"block",null===n||""===n){var o=pn(e,"width");void 0!==o&&(e.width=o)}if(null===a||""===a)if(""===e.style.height)e.height=e.width/(t.options.aspectRatio||2);else{var s=pn(e,"height");void 0!==o&&(e.height=s)}}(e,t),r):null},releaseContext:function(e){var t=e.canvas;if(t[ie]){var r=t[ie].initial;["height","width"].forEach(function(a){var n=r[a];m.isNullOrUndef(n)?t.removeAttribute(a):t.setAttribute(a,n)}),m.each(r.style||{},function(a,n){t.style[n]=a}),t.width=t.width,delete t[ie]}},addEventListener:function(e,t,r){var a=e.canvas;if("resize"!==t){var n=r[ie]||(r[ie]={}),s=(n.proxies||(n.proxies={}))[e.id+"_"+t]=function(d){r(function gs(e,t){var r=hs[e.type]||e.type,a=m.getRelativePosition(e,t);return Zr(r,t,a.x,a.y,e)}(d,e))};It(a,t,s)}else!function _s(e,t,r){var a=e[ie]||(e[ie]={}),n=a.resizer=function ps(e){var t=1e6,r=Lt($r),a=Lt($r+"-expand"),n=Lt($r+"-shrink");a.appendChild(Lt()),n.appendChild(Lt()),r.appendChild(a),r.appendChild(n),r._reset=function(){a.scrollLeft=t,a.scrollTop=t,n.scrollLeft=t,n.scrollTop=t};var o=function(){r._reset(),e()};return It(a,"scroll",o.bind(a,"expand")),It(n,"scroll",o.bind(n,"shrink")),r}(function ms(e,t){var r=!1,a=[];return function(){a=Array.prototype.slice.call(arguments),t=t||this,r||(r=!0,m.requestAnimFrame.call(window,function(){r=!1,e.apply(t,a)}))}}(function(){if(a.resizer){var o=r.options.maintainAspectRatio&&e.parentNode,s=o?o.clientWidth:0;t(Zr("resize",r)),o&&o.clientWidth<s&&r.canvas&&t(Zr("resize",r))}}));!function bs(e,t){var r=e[ie]||(e[ie]={}),a=r.renderProxy=function(n){"chartjs-render-animation"===n.animationName&&t()};m.each(mn,function(n){It(e,n,a)}),r.reflow=!!e.offsetParent,e.classList.add(gn)}(e,function(){if(a.resizer){var o=e.parentNode;o&&o!==n.parentNode&&o.insertBefore(n,o.firstChild),n._reset()}})}(a,r,e)},removeEventListener:function(e,t,r){var a=e.canvas;if("resize"!==t){var s=((r[ie]||{}).proxies||{})[e.id+"_"+t];!s||qr(a,t,s)}else!function xs(e){var t=e[ie]||{},r=t.resizer;delete t.resizer,function ys(e){var t=e[ie]||{},r=t.renderProxy;r&&(m.each(mn,function(a){qr(e,a,r)}),delete t.renderProxy),e.classList.remove(gn)}(e),r&&r.parentNode&&r.parentNode.removeChild(r)}(a)}};m.addEvent=It,m.removeEvent=qr;var ks=yn._enabled?yn:{acquireContext:function(e){return e&&e.canvas&&(e=e.canvas),e&&e.getContext("2d")||null}},gt=m.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},ks);F._set("global",{plugins:{}});var j={_plugins:[],_cacheId:0,register:function(e){var t=this._plugins;[].concat(e).forEach(function(r){-1===t.indexOf(r)&&t.push(r)}),this._cacheId++},unregister:function(e){var t=this._plugins;[].concat(e).forEach(function(r){var a=t.indexOf(r);-1!==a&&t.splice(a,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(e,t,r){var o,s,d,l,f,a=this.descriptors(e),n=a.length;for(o=0;o<n;++o)if("function"==typeof(f=(d=(s=a[o]).plugin)[t])&&((l=[e].concat(r||[])).push(s.options),!1===f.apply(d,l)))return!1;return!0},descriptors:function(e){var t=e.$plugins||(e.$plugins={});if(t.id===this._cacheId)return t.descriptors;var r=[],a=[],n=e&&e.config||{},o=n.options&&n.options.plugins||{};return this._plugins.concat(n.plugins||[]).forEach(function(s){if(-1===r.indexOf(s)){var l=s.id,f=o[l];!1!==f&&(!0===f&&(f=m.clone(F.global.plugins[l])),r.push(s),a.push({plugin:s,options:f||{}}))}}),t.descriptors=a,t.id=this._cacheId,a},_invalidate:function(e){delete e.$plugins}},Rt={constructors:{},defaults:{},registerScaleType:function(e,t,r){this.constructors[e]=t,this.defaults[e]=m.clone(r)},getScaleConstructor:function(e){return this.constructors.hasOwnProperty(e)?this.constructors[e]:void 0},getScaleDefaults:function(e){return this.defaults.hasOwnProperty(e)?m.merge(Object.create(null),[F.scale,this.defaults[e]]):{}},updateScaleDefaults:function(e,t){var r=this;r.defaults.hasOwnProperty(e)&&(r.defaults[e]=m.extend(r.defaults[e],t))},addScalesToLayout:function(e){m.each(e.scales,function(t){t.fullWidth=t.options.fullWidth,t.position=t.options.position,t.weight=t.options.weight,pe.addBox(e,t)})}},Ie=m.valueOrDefault,Xr=m.rtl.getRtlAdapter;F._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:m.noop,title:function(e,t){var r="",a=t.labels,n=a?a.length:0;if(e.length>0){var o=e[0];o.label?r=o.label:o.xLabel?r=o.xLabel:n>0&&o.index<n&&(r=a[o.index])}return r},afterTitle:m.noop,beforeBody:m.noop,beforeLabel:m.noop,label:function(e,t){var r=t.datasets[e.datasetIndex].label||"";return r&&(r+=": "),m.isNullOrUndef(e.value)?r+=e.yLabel:r+=e.value,r},labelColor:function(e,t){var n=t.getDatasetMeta(e.datasetIndex).data[e.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return this._options.bodyFontColor},afterLabel:m.noop,afterBody:m.noop,beforeFooter:m.noop,footer:m.noop,afterFooter:m.noop}}});var _n={average:function(e){if(!e.length)return!1;var t,r,a=0,n=0,o=0;for(t=0,r=e.length;t<r;++t){var s=e[t];if(s&&s.hasValue()){var d=s.tooltipPosition();a+=d.x,n+=d.y,++o}}return{x:a/o,y:n/o}},nearest:function(e,t){var o,s,d,r=t.x,a=t.y,n=Number.POSITIVE_INFINITY;for(o=0,s=e.length;o<s;++o){var l=e[o];if(l&&l.hasValue()){var f=l.getCenterPoint(),c=m.distanceBetweenPoints(t,f);c<n&&(n=c,d=l)}}if(d){var v=d.tooltipPosition();r=v.x,a=v.y}return{x:r,y:a}}};function Ce(e,t){return t&&(m.isArray(t)?Array.prototype.push.apply(e,t):e.push(t)),e}function Le(e){return("string"==typeof e||e instanceof String)&&e.indexOf("\n")>-1?e.split("\n"):e}function Ms(e){var t=e._xScale,r=e._yScale||e._scale,a=e._index,n=e._datasetIndex,o=e._chart.getDatasetMeta(n).controller,s=o._getIndexScale(),d=o._getValueScale();return{xLabel:t?t.getLabelForIndex(a,n):"",yLabel:r?r.getLabelForIndex(a,n):"",label:s?""+s.getLabelForIndex(a,n):"",value:d?""+d.getLabelForIndex(a,n):"",index:a,datasetIndex:n,x:e._model.x,y:e._model.y}}function xn(e){var t=F.global;return{xPadding:e.xPadding,yPadding:e.yPadding,xAlign:e.xAlign,yAlign:e.yAlign,rtl:e.rtl,textDirection:e.textDirection,bodyFontColor:e.bodyFontColor,_bodyFontFamily:Ie(e.bodyFontFamily,t.defaultFontFamily),_bodyFontStyle:Ie(e.bodyFontStyle,t.defaultFontStyle),_bodyAlign:e.bodyAlign,bodyFontSize:Ie(e.bodyFontSize,t.defaultFontSize),bodySpacing:e.bodySpacing,titleFontColor:e.titleFontColor,_titleFontFamily:Ie(e.titleFontFamily,t.defaultFontFamily),_titleFontStyle:Ie(e.titleFontStyle,t.defaultFontStyle),titleFontSize:Ie(e.titleFontSize,t.defaultFontSize),_titleAlign:e.titleAlign,titleSpacing:e.titleSpacing,titleMarginBottom:e.titleMarginBottom,footerFontColor:e.footerFontColor,_footerFontFamily:Ie(e.footerFontFamily,t.defaultFontFamily),_footerFontStyle:Ie(e.footerFontStyle,t.defaultFontStyle),footerFontSize:Ie(e.footerFontSize,t.defaultFontSize),_footerAlign:e.footerAlign,footerSpacing:e.footerSpacing,footerMarginTop:e.footerMarginTop,caretSize:e.caretSize,cornerRadius:e.cornerRadius,backgroundColor:e.backgroundColor,opacity:0,legendColorBackground:e.multiKeyBackground,displayColors:e.displayColors,borderColor:e.borderColor,borderWidth:e.borderWidth}}function nr(e,t){return"center"===t?e.x+e.width/2:"right"===t?e.x+e.width-e.xPadding:e.x+e.xPadding}function wn(e){return Ce([],Le(e))}var Cs=De.extend({initialize:function(){this._model=xn(this._options),this._lastActive=[]},getTitle:function(){var e=this,t=e._options,r=t.callbacks,a=r.beforeTitle.apply(e,arguments),n=r.title.apply(e,arguments),o=r.afterTitle.apply(e,arguments),s=[];return s=Ce(s,Le(a)),s=Ce(s,Le(n)),Ce(s,Le(o))},getBeforeBody:function(){return wn(this._options.callbacks.beforeBody.apply(this,arguments))},getBody:function(e,t){var r=this,a=r._options.callbacks,n=[];return m.each(e,function(o){var s={before:[],lines:[],after:[]};Ce(s.before,Le(a.beforeLabel.call(r,o,t))),Ce(s.lines,a.label.call(r,o,t)),Ce(s.after,Le(a.afterLabel.call(r,o,t))),n.push(s)}),n},getAfterBody:function(){return wn(this._options.callbacks.afterBody.apply(this,arguments))},getFooter:function(){var e=this,t=e._options.callbacks,r=t.beforeFooter.apply(e,arguments),a=t.footer.apply(e,arguments),n=t.afterFooter.apply(e,arguments),o=[];return o=Ce(o,Le(r)),o=Ce(o,Le(a)),Ce(o,Le(n))},update:function(e){var v,p,t=this,r=t._options,a=t._model,n=t._model=xn(r),o=t._active,s=t._data,d={xAlign:a.xAlign,yAlign:a.yAlign},l={x:a.x,y:a.y},f={width:a.width,height:a.height},c={x:a.caretX,y:a.caretY};if(o.length){n.opacity=1;var y=[],_=[];c=_n[r.position].call(t,o,t._eventPosition);var w=[];for(v=0,p=o.length;v<p;++v)w.push(Ms(o[v]));r.filter&&(w=w.filter(function(x){return r.filter(x,s)})),r.itemSort&&(w=w.sort(function(x,M){return r.itemSort(x,M,s)})),m.each(w,function(x){y.push(r.callbacks.labelColor.call(t,x,t._chart)),_.push(r.callbacks.labelTextColor.call(t,x,t._chart))}),n.title=t.getTitle(w,s),n.beforeBody=t.getBeforeBody(w,s),n.body=t.getBody(w,s),n.afterBody=t.getAfterBody(w,s),n.footer=t.getFooter(w,s),n.x=c.x,n.y=c.y,n.caretPadding=r.caretPadding,n.labelColors=y,n.labelTextColors=_,n.dataPoints=w,f=function Ss(e,t){var r=e._chart.ctx,a=2*t.yPadding,n=0,o=t.body,s=o.reduce(function(_,w){return _+w.before.length+w.lines.length+w.after.length},0),d=t.title.length,l=t.footer.length,f=t.titleFontSize,c=t.bodyFontSize,v=t.footerFontSize;a+=d*f,a+=d?(d-1)*t.titleSpacing:0,a+=d?t.titleMarginBottom:0,a+=(s+=t.beforeBody.length+t.afterBody.length)*c,a+=s?(s-1)*t.bodySpacing:0,a+=l?t.footerMarginTop:0,a+=l*v,a+=l?(l-1)*t.footerSpacing:0;var p=0,y=function(_){n=Math.max(n,r.measureText(_).width+p)};return r.font=m.fontString(f,t._titleFontStyle,t._titleFontFamily),m.each(t.title,y),r.font=m.fontString(c,t._bodyFontStyle,t._bodyFontFamily),m.each(t.beforeBody.concat(t.afterBody),y),p=t.displayColors?c+2:0,m.each(o,function(_){m.each(_.before,y),m.each(_.lines,y),m.each(_.after,y)}),p=0,r.font=m.fontString(v,t._footerFontStyle,t._footerFontFamily),m.each(t.footer,y),{width:n+=2*t.xPadding,height:a}}(this,n),d=function Ds(e,t){var r=e._model,a=e._chart,n=e._chart.chartArea,o="center",s="center";r.y<t.height?s="top":r.y>a.height-t.height&&(s="bottom");var d,l,f,c,v,p=(n.left+n.right)/2,y=(n.top+n.bottom)/2;"center"===s?(d=function(w){return w<=p},l=function(w){return w>p}):(d=function(w){return w<=t.width/2},l=function(w){return w>=a.width-t.width/2}),f=function(w){return w+t.width+r.caretSize+r.caretPadding>a.width},c=function(w){return w-t.width-r.caretSize-r.caretPadding<0},v=function(w){return w<=y?"top":"bottom"},d(r.x)?(o="left",f(r.x)&&(o="center",s=v(r.y))):l(r.x)&&(o="right",c(r.x)&&(o="center",s=v(r.y)));var _=e._options;return{xAlign:_.xAlign?_.xAlign:o,yAlign:_.yAlign?_.yAlign:s}}(this,f),l=function Ts(e,t,r,a){var n=e.x,o=e.y,d=e.caretPadding,f=r.xAlign,c=r.yAlign,v=e.caretSize+d,p=e.cornerRadius+d;return"right"===f?n-=t.width:"center"===f&&((n-=t.width/2)+t.width>a.width&&(n=a.width-t.width),n<0&&(n=0)),"top"===c?o+=v:o-="bottom"===c?t.height+v:t.height/2,"center"===c?"left"===f?n+=v:"right"===f&&(n-=v):"left"===f?n-=p:"right"===f&&(n+=p),{x:n,y:o}}(n,f,d,t._chart)}else n.opacity=0;return n.xAlign=d.xAlign,n.yAlign=d.yAlign,n.x=l.x,n.y=l.y,n.width=f.width,n.height=f.height,n.caretX=c.x,n.caretY=c.y,t._model=n,e&&r.custom&&r.custom.call(t,n),t},drawCaret:function(e,t){var r=this._chart.ctx,n=this.getCaretPosition(e,t,this._view);r.lineTo(n.x1,n.y1),r.lineTo(n.x2,n.y2),r.lineTo(n.x3,n.y3)},getCaretPosition:function(e,t,r){var a,n,o,s,d,l,f=r.caretSize,c=r.cornerRadius,v=r.xAlign,p=r.yAlign,y=e.x,_=e.y,w=t.width,x=t.height;if("center"===p)d=_+x/2,"left"===v?(n=(a=y)-f,o=a,s=d+f,l=d-f):(n=(a=y+w)+f,o=a,s=d-f,l=d+f);else if("left"===v?(a=(n=y+c+f)-f,o=n+f):"right"===v?(a=(n=y+w-c-f)-f,o=n+f):(a=(n=r.caretX)-f,o=n+f),"top"===p)d=(s=_)-f,l=s;else{d=(s=_+x)+f,l=s;var M=o;o=a,a=M}return{x1:a,x2:n,x3:o,y1:s,y2:d,y3:l}},drawTitle:function(e,t,r){var o,s,d,a=t.title,n=a.length;if(n){var l=Xr(t.rtl,t.x,t.width);for(e.x=nr(t,t._titleAlign),r.textAlign=l.textAlign(t._titleAlign),r.textBaseline="middle",o=t.titleFontSize,s=t.titleSpacing,r.fillStyle=t.titleFontColor,r.font=m.fontString(o,t._titleFontStyle,t._titleFontFamily),d=0;d<n;++d)r.fillText(a[d],l.x(e.x),e.y+o/2),e.y+=o+s,d+1===n&&(e.y+=t.titleMarginBottom-s)}},drawBody:function(e,t,r){var p,y,_,w,x,M,T,C,a=t.bodyFontSize,n=t.bodySpacing,o=t._bodyAlign,s=t.body,d=t.displayColors,l=0,f=d?nr(t,"left"):0,c=Xr(t.rtl,t.x,t.width),v=function(z){r.fillText(z,c.x(e.x+l),e.y+a/2),e.y+=a+n},I=c.textAlign(o);for(r.textAlign=o,r.textBaseline="middle",r.font=m.fontString(a,t._bodyFontStyle,t._bodyFontFamily),e.x=nr(t,I),r.fillStyle=t.bodyFontColor,m.each(t.beforeBody,v),l=d&&"right"!==I?"center"===o?a/2+1:a+2:0,x=0,T=s.length;x<T;++x){for(p=s[x],_=t.labelColors[x],r.fillStyle=y=t.labelTextColors[x],m.each(p.before,v),M=0,C=(w=p.lines).length;M<C;++M){if(d){var A=c.x(f);r.fillStyle=t.legendColorBackground,r.fillRect(c.leftForLtr(A,a),e.y,a,a),r.lineWidth=1,r.strokeStyle=_.borderColor,r.strokeRect(c.leftForLtr(A,a),e.y,a,a),r.fillStyle=_.backgroundColor,r.fillRect(c.leftForLtr(c.xPlus(A,1),a-2),e.y+1,a-2,a-2),r.fillStyle=y}v(w[M])}m.each(p.after,v)}l=0,m.each(t.afterBody,v),e.y-=n},drawFooter:function(e,t,r){var o,s,a=t.footer,n=a.length;if(n){var d=Xr(t.rtl,t.x,t.width);for(e.x=nr(t,t._footerAlign),e.y+=t.footerMarginTop,r.textAlign=d.textAlign(t._footerAlign),r.textBaseline="middle",o=t.footerFontSize,r.fillStyle=t.footerFontColor,r.font=m.fontString(o,t._footerFontStyle,t._footerFontFamily),s=0;s<n;++s)r.fillText(a[s],d.x(e.x),e.y+o/2),e.y+=o+t.footerSpacing}},drawBackground:function(e,t,r,a){r.fillStyle=t.backgroundColor,r.strokeStyle=t.borderColor,r.lineWidth=t.borderWidth;var n=t.xAlign,o=t.yAlign,s=e.x,d=e.y,l=a.width,f=a.height,c=t.cornerRadius;r.beginPath(),r.moveTo(s+c,d),"top"===o&&this.drawCaret(e,a),r.lineTo(s+l-c,d),r.quadraticCurveTo(s+l,d,s+l,d+c),"center"===o&&"right"===n&&this.drawCaret(e,a),r.lineTo(s+l,d+f-c),r.quadraticCurveTo(s+l,d+f,s+l-c,d+f),"bottom"===o&&this.drawCaret(e,a),r.lineTo(s+c,d+f),r.quadraticCurveTo(s,d+f,s,d+f-c),"center"===o&&"left"===n&&this.drawCaret(e,a),r.lineTo(s,d+c),r.quadraticCurveTo(s,d,s+c,d),r.closePath(),r.fill(),t.borderWidth>0&&r.stroke()},draw:function(){var e=this._chart.ctx,t=this._view;if(0!==t.opacity){var r={width:t.width,height:t.height},a={x:t.x,y:t.y},n=Math.abs(t.opacity<.001)?0:t.opacity;this._options.enabled&&(t.title.length||t.beforeBody.length||t.body.length||t.afterBody.length||t.footer.length)&&(e.save(),e.globalAlpha=n,this.drawBackground(a,t,e,r),a.y+=t.yPadding,m.rtl.overrideTextDirection(e,t.textDirection),this.drawTitle(a,t,e),this.drawBody(a,t,e),this.drawFooter(a,t,e),m.rtl.restoreTextDirection(e,t.textDirection),e.restore())}},handleEvent:function(e){var a,t=this,r=t._options;return t._lastActive=t._lastActive||[],"mouseout"===e.type?t._active=[]:(t._active=t._chart.getElementsAtEventForMode(e,r.mode,r),r.reverse&&t._active.reverse()),(a=!m.arrayEquals(t._active,t._lastActive))&&(t._lastActive=t._active,(r.enabled||r.custom)&&(t._eventPosition={x:e.x,y:e.y},t.update(!0),t.pivot())),a}}),Kr=Cs;Kr.positioners=_n;var Jr=m.valueOrDefault;function kn(){return m.merge(Object.create(null),[].slice.call(arguments),{merger:function(e,t,r,a){if("xAxes"===e||"yAxes"===e){var o,s,d,n=r[e].length;for(t[e]||(t[e]=[]),o=0;o<n;++o)s=Jr((d=r[e][o]).type,"xAxes"===e?"category":"linear"),o>=t[e].length&&t[e].push({}),m.merge(t[e][o],!t[e][o].type||d.type&&d.type!==t[e][o].type?[Rt.getScaleDefaults(s),d]:d)}else m._merger(e,t,r,a)}})}function Qr(){return m.merge(Object.create(null),[].slice.call(arguments),{merger:function(e,t,r,a){var n=t[e]||Object.create(null),o=r[e];"scales"===e?t[e]=kn(n,o):"scale"===e?t[e]=m.merge(n,[Rt.getScaleDefaults(o.type),o]):m._merger(e,t,r,a)}})}function Fs(e){var t=e.options;m.each(e.scales,function(r){pe.removeBox(e,r)}),t=Qr(F.global,F[e.config.type],t),e.options=e.config.options=t,e.ensureScalesHaveIDs(),e.buildOrUpdateScales(),e.tooltip._options=t.tooltips,e.tooltip.initialize()}function Mn(e,t,r){var a,n=function(o){return o.id===a};do{a=t+r++}while(m.findIndex(e,n)>=0);return a}function Sn(e){return"top"===e||"bottom"===e}function Dn(e,t){return function(r,a){return r[e]===a[e]?r[t]-a[t]:r[e]-a[e]}}F._set("global",{elements:{},events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,maintainAspectRatio:!0,responsive:!0,responsiveAnimationDuration:0});var Ve=function(e,t){return this.construct(e,t),this};m.extend(Ve.prototype,{construct:function(e,t){var r=this;t=function Os(e){var t=(e=e||Object.create(null)).data=e.data||{};return t.datasets=t.datasets||[],t.labels=t.labels||[],e.options=Qr(F.global,F[e.type],e.options||{}),e}(t);var a=gt.acquireContext(e,t),n=a&&a.canvas,o=n&&n.height,s=n&&n.width;r.id=m.uid(),r.ctx=a,r.canvas=n,r.config=t,r.width=s,r.height=o,r.aspectRatio=o?s/o:null,r.options=t.options,r._bufferedRender=!1,r._layers=[],r.chart=r,r.controller=r,Ve.instances[r.id]=r,Object.defineProperty(r,"data",{get:function(){return r.config.data},set:function(d){r.config.data=d}}),a&&n?(r.initialize(),r.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var e=this;return j.notify(e,"beforeInit"),m.retinaScale(e,e.options.devicePixelRatio),e.bindEvents(),e.options.responsive&&e.resize(!0),e.initToolTip(),j.notify(e,"afterInit"),e},clear:function(){return m.canvas.clear(this),this},stop:function(){return Nr.cancelAnimation(this),this},resize:function(e){var t=this,r=t.options,a=t.canvas,n=r.maintainAspectRatio&&t.aspectRatio||null,o=Math.max(0,Math.floor(m.getMaximumWidth(a))),s=Math.max(0,Math.floor(n?o/n:m.getMaximumHeight(a)));if((t.width!==o||t.height!==s)&&(a.width=t.width=o,a.height=t.height=s,a.style.width=o+"px",a.style.height=s+"px",m.retinaScale(t,r.devicePixelRatio),!e)){var d={width:o,height:s};j.notify(t,"resize",[d]),r.onResize&&r.onResize(t,d),t.stop(),t.update({duration:r.responsiveAnimationDuration})}},ensureScalesHaveIDs:function(){var e=this.options,t=e.scales||{},r=e.scale;m.each(t.xAxes,function(a,n){a.id||(a.id=Mn(t.xAxes,"x-axis-",n))}),m.each(t.yAxes,function(a,n){a.id||(a.id=Mn(t.yAxes,"y-axis-",n))}),r&&(r.id=r.id||"scale")},buildOrUpdateScales:function(){var e=this,t=e.options,r=e.scales||{},a=[],n=Object.keys(r).reduce(function(o,s){return o[s]=!1,o},{});t.scales&&(a=a.concat((t.scales.xAxes||[]).map(function(o){return{options:o,dtype:"category",dposition:"bottom"}}),(t.scales.yAxes||[]).map(function(o){return{options:o,dtype:"linear",dposition:"left"}}))),t.scale&&a.push({options:t.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),m.each(a,function(o){var s=o.options,d=s.id,l=Jr(s.type,o.dtype);Sn(s.position)!==Sn(o.dposition)&&(s.position=o.dposition),n[d]=!0;var f=null;if(d in r&&r[d].type===l)(f=r[d]).options=s,f.ctx=e.ctx,f.chart=e;else{var c=Rt.getScaleConstructor(l);if(!c)return;f=new c({id:d,type:l,options:s,ctx:e.ctx,chart:e}),r[f.id]=f}f.mergeTicksOptions(),o.isDefault&&(e.scale=f)}),m.each(n,function(o,s){o||delete r[s]}),e.scales=r,Rt.addScalesToLayout(this)},buildOrUpdateControllers:function(){var a,n,e=this,t=[],r=e.data.datasets;for(a=0,n=r.length;a<n;a++){var o=r[a],s=e.getDatasetMeta(a),d=o.type||e.config.type;if(s.type&&s.type!==d&&(e.destroyDatasetMeta(a),s=e.getDatasetMeta(a)),s.type=d,s.order=o.order||0,s.index=a,s.controller)s.controller.updateIndex(a),s.controller.linkScales();else{var l=hn[s.type];if(void 0===l)throw new Error('"'+s.type+'" is not a chart type.');s.controller=new l(e,a),t.push(s.controller)}}return t},resetElements:function(){var e=this;m.each(e.data.datasets,function(t,r){e.getDatasetMeta(r).controller.reset()},e)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(e){var r,a,t=this;if((!e||"object"!=typeof e)&&(e={duration:e,lazy:arguments[1]}),Fs(t),j._invalidate(t),!1!==j.notify(t,"beforeUpdate")){t.tooltip._data=t.data;var n=t.buildOrUpdateControllers();for(r=0,a=t.data.datasets.length;r<a;r++)t.getDatasetMeta(r).controller.buildOrUpdateElements();t.updateLayout(),t.options.animation&&t.options.animation.duration&&m.each(n,function(o){o.reset()}),t.updateDatasets(),t.tooltip.initialize(),t.lastActive=[],j.notify(t,"afterUpdate"),t._layers.sort(Dn("z","_idx")),t._bufferedRender?t._bufferedRequest={duration:e.duration,easing:e.easing,lazy:e.lazy}:t.render(e)}},updateLayout:function(){var e=this;!1!==j.notify(e,"beforeLayout")&&(pe.update(this,this.width,this.height),e._layers=[],m.each(e.boxes,function(t){t._configure&&t._configure(),e._layers.push.apply(e._layers,t._layers())},e),e._layers.forEach(function(t,r){t._idx=r}),j.notify(e,"afterScaleUpdate"),j.notify(e,"afterLayout"))},updateDatasets:function(){var e=this;if(!1!==j.notify(e,"beforeDatasetsUpdate")){for(var t=0,r=e.data.datasets.length;t<r;++t)e.updateDataset(t);j.notify(e,"afterDatasetsUpdate")}},updateDataset:function(e){var t=this,r=t.getDatasetMeta(e),a={meta:r,index:e};!1!==j.notify(t,"beforeDatasetUpdate",[a])&&(r.controller._update(),j.notify(t,"afterDatasetUpdate",[a]))},render:function(e){var t=this;(!e||"object"!=typeof e)&&(e={duration:e,lazy:arguments[1]});var r=t.options.animation,a=Jr(e.duration,r&&r.duration),n=e.lazy;if(!1!==j.notify(t,"beforeRender")){var o=function(d){j.notify(t,"afterRender"),m.callback(r&&r.onComplete,[d],t)};if(r&&a){var s=new Wr({numSteps:a/16.66,easing:e.easing||r.easing,render:function(d,l){var c=l.currentStep,v=c/l.numSteps;d.draw((0,m.easing.effects[l.easing])(v),v,c)},onAnimationProgress:r.onProgress,onAnimationComplete:o});Nr.addAnimation(t,s,a,n)}else t.draw(),o(new Wr({numSteps:0,chart:t}));return t}},draw:function(e){var r,a,t=this;if(t.clear(),m.isNullOrUndef(e)&&(e=1),t.transition(e),!(t.width<=0||t.height<=0)&&!1!==j.notify(t,"beforeDraw",[e])){for(a=t._layers,r=0;r<a.length&&a[r].z<=0;++r)a[r].draw(t.chartArea);for(t.drawDatasets(e);r<a.length;++r)a[r].draw(t.chartArea);t._drawTooltip(e),j.notify(t,"afterDraw",[e])}},transition:function(e){for(var t=this,r=0,a=(t.data.datasets||[]).length;r<a;++r)t.isDatasetVisible(r)&&t.getDatasetMeta(r).controller.transition(e);t.tooltip.transition(e)},_getSortedDatasetMetas:function(e){var n,o,t=this,a=[];for(n=0,o=(t.data.datasets||[]).length;n<o;++n)(!e||t.isDatasetVisible(n))&&a.push(t.getDatasetMeta(n));return a.sort(Dn("order","index")),a},_getSortedVisibleDatasetMetas:function(){return this._getSortedDatasetMetas(!0)},drawDatasets:function(e){var r,a,t=this;if(!1!==j.notify(t,"beforeDatasetsDraw",[e])){for(a=(r=t._getSortedVisibleDatasetMetas()).length-1;a>=0;--a)t.drawDataset(r[a],e);j.notify(t,"afterDatasetsDraw",[e])}},drawDataset:function(e,t){var a={meta:e,index:e.index,easingValue:t};!1!==j.notify(this,"beforeDatasetDraw",[a])&&(e.controller.draw(t),j.notify(this,"afterDatasetDraw",[a]))},_drawTooltip:function(e){var t=this,r=t.tooltip,a={tooltip:r,easingValue:e};!1!==j.notify(t,"beforeTooltipDraw",[a])&&(r.draw(),j.notify(t,"afterTooltipDraw",[a]))},getElementAtEvent:function(e){return vt.modes.single(this,e)},getElementsAtEvent:function(e){return vt.modes.label(this,e,{intersect:!0})},getElementsAtXAxis:function(e){return vt.modes["x-axis"](this,e,{intersect:!0})},getElementsAtEventForMode:function(e,t,r){var a=vt.modes[t];return"function"==typeof a?a(this,e,r):[]},getDatasetAtEvent:function(e){return vt.modes.dataset(this,e,{intersect:!0})},getDatasetMeta:function(e){var t=this,r=t.data.datasets[e];r._meta||(r._meta={});var a=r._meta[t.id];return a||(a=r._meta[t.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:r.order||0,index:e}),a},getVisibleDatasetCount:function(){for(var e=0,t=0,r=this.data.datasets.length;t<r;++t)this.isDatasetVisible(t)&&e++;return e},isDatasetVisible:function(e){var t=this.getDatasetMeta(e);return"boolean"==typeof t.hidden?!t.hidden:!this.data.datasets[e].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroyDatasetMeta:function(e){var t=this.id,r=this.data.datasets[e],a=r._meta&&r._meta[t];a&&(a.controller.destroy(),delete r._meta[t])},destroy:function(){var r,a,e=this,t=e.canvas;for(e.stop(),r=0,a=e.data.datasets.length;r<a;++r)e.destroyDatasetMeta(r);t&&(e.unbindEvents(),m.canvas.clear(e),gt.releaseContext(e.ctx),e.canvas=null,e.ctx=null),j.notify(e,"destroy"),delete Ve.instances[e.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var e=this;e.tooltip=new Kr({_chart:e,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e)},bindEvents:function(){var e=this,t=e._listeners={},r=function(){e.eventHandler.apply(e,arguments)};m.each(e.options.events,function(a){gt.addEventListener(e,a,r),t[a]=r}),e.options.responsive&&(r=function(){e.resize()},gt.addEventListener(e,"resize",r),t.resize=r)},unbindEvents:function(){var e=this,t=e._listeners;!t||(delete e._listeners,m.each(t,function(r,a){gt.removeEventListener(e,a,r)}))},updateHoverStyle:function(e,t,r){var n,o,s,a=r?"set":"remove";for(o=0,s=e.length;o<s;++o)(n=e[o])&&this.getDatasetMeta(n._datasetIndex).controller[a+"HoverStyle"](n);"dataset"===t&&this.getDatasetMeta(e[0]._datasetIndex).controller["_"+a+"DatasetHoverStyle"]()},eventHandler:function(e){var t=this,r=t.tooltip;if(!1!==j.notify(t,"beforeEvent",[e])){t._bufferedRender=!0,t._bufferedRequest=null;var a=t.handleEvent(e);r&&(a=r._start?r.handleEvent(e):a|r.handleEvent(e)),j.notify(t,"afterEvent",[e]);var n=t._bufferedRequest;return n?t.render(n):a&&!t.animating&&(t.stop(),t.render({duration:t.options.hover.animationDuration,lazy:!0})),t._bufferedRender=!1,t._bufferedRequest=null,t}},handleEvent:function(e){var n,t=this,r=t.options||{},a=r.hover;return t.lastActive=t.lastActive||[],t.active="mouseout"===e.type?[]:t.getElementsAtEventForMode(e,a.mode,a),m.callback(r.onHover||r.hover.onHover,[e.native,t.active],t),("mouseup"===e.type||"click"===e.type)&&r.onClick&&r.onClick.call(t,e.native,t.active),t.lastActive.length&&t.updateHoverStyle(t.lastActive,a.mode,!1),t.active.length&&a.mode&&t.updateHoverStyle(t.active,a.mode,!0),n=!m.arrayEquals(t.active,t.lastActive),t.lastActive=t.active,n}}),Ve.instances={};var W=Ve;function tt(){throw new Error("This method is not implemented: either no adapter can be found or an incomplete integration was provided.")}function ir(e){this.options=e||{}}Ve.Controller=Ve,Ve.types={},m.configMerge=Qr,m.scaleMerge=kn,m.extend(ir.prototype,{formats:tt,parse:tt,format:tt,add:tt,diff:tt,startOf:tt,endOf:tt,_create:function(e){return e}}),ir.override=function(e){m.extend(ir.prototype,e)};var ea={_date:ir},Wt={formatters:{values:function(e){return m.isArray(e)?e:""+e},linear:function(e,t,r){var a=r.length>3?r[2]-r[1]:r[1]-r[0];Math.abs(a)>1&&e!==Math.floor(e)&&(a=e-Math.floor(e));var n=m.log10(Math.abs(a)),o="";if(0!==e)if(Math.max(Math.abs(r[0]),Math.abs(r[r.length-1]))<1e-4){var d=m.log10(Math.abs(e)),l=Math.floor(d)-Math.floor(n);l=Math.max(Math.min(l,20),0),o=e.toExponential(l)}else{var f=-1*Math.floor(n);f=Math.max(Math.min(f,20),0),o=e.toFixed(f)}else o="0";return o},logarithmic:function(e,t,r){var a=e/Math.pow(10,Math.floor(m.log10(e)));return 0===e?"0":1===a||2===a||5===a||0===t||t===r.length-1?e.toExponential():""}}},rt=m.isArray,Nt=m.isNullOrUndef,at=m.valueOrDefault,mt=m.valueAtIndexOrDefault;function Rs(e,t,r){var f,a=e.getTicks().length,n=Math.min(t,a-1),o=e.getPixelForTick(n),s=e._startPixel,d=e._endPixel,l=1e-6;if(!(r&&(f=1===a?Math.max(o-s,d-o):0===t?(e.getPixelForTick(1)-o)/2:(o-e.getPixelForTick(n-1))/2,o+=n<t?f:-f,o<s-l||o>d+l)))return o}function Yt(e){return e.drawTicks?e.tickMarkLength:0}function ta(e){var t,r;return e.display?(t=m.options._parseFont(e),r=m.options.toPadding(e.padding),t.lineHeight+r.height):0}function Tn(e,t){return m.extend(m.options._parseFont({fontFamily:at(t.fontFamily,e.fontFamily),fontSize:at(t.fontSize,e.fontSize),fontStyle:at(t.fontStyle,e.fontStyle),lineHeight:at(t.lineHeight,e.lineHeight)}),{color:m.options.resolve([t.fontColor,e.fontColor,F.global.defaultFontColor])})}function ra(e){var t=Tn(e,e.minor);return{minor:t,major:e.major.enabled?Tn(e,e.major):t}}function aa(e){var r,a,n,t=[];for(a=0,n=e.length;a<n;++a)void 0!==(r=e[a])._index&&t.push(r);return t}function or(e,t,r,a){var d,l,f,c,n=at(r,0),o=Math.min(at(a,e.length),e.length),s=0;for(t=Math.ceil(t),a&&(t=(d=a-r)/Math.floor(d/t)),c=n;c<0;)s++,c=Math.round(n+s*t);for(l=Math.max(n,0);l<o;l++)f=e[l],l===c?(f._index=l,s++,c=Math.round(n+s*t)):delete f.label}F._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:Wt.formatters.values,minor:{},major:{}}});var na=De.extend({zeroLineIndex:0,getPadding:function(){var e=this;return{left:e.paddingLeft||0,top:e.paddingTop||0,right:e.paddingRight||0,bottom:e.paddingBottom||0}},getTicks:function(){return this._ticks},_getLabels:function(){var e=this.chart.data;return this.options.labels||(this.isHorizontal()?e.xLabels:e.yLabels)||e.labels||[]},mergeTicksOptions:function(){},beforeUpdate:function(){m.callback(this.options.beforeUpdate,[this])},update:function(e,t,r){var s,d,l,f,c,a=this,n=a.options.ticks,o=n.sampleSize;if(a.beforeUpdate(),a.maxWidth=e,a.maxHeight=t,a.margins=m.extend({left:0,right:0,top:0,bottom:0},r),a._ticks=null,a.ticks=null,a._labelSizes=null,a._maxLabelLines=0,a.longestLabelWidth=0,a.longestTextCache=a.longestTextCache||{},a._gridLineItems=null,a._labelItems=null,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeDataLimits(),a.determineDataLimits(),a.afterDataLimits(),a.beforeBuildTicks(),f=a.buildTicks()||[],(!(f=a.afterBuildTicks(f)||f)||!f.length)&&a.ticks)for(f=[],s=0,d=a.ticks.length;s<d;++s)f.push({value:a.ticks[s],major:!1});return a._ticks=f,l=a._convertTicksToLabels((c=o<f.length)?function Ls(e,t){for(var r=[],a=e.length/t,n=0,o=e.length;n<o;n+=a)r.push(e[Math.floor(n)]);return r}(f,o):f),a._configure(),a.beforeCalculateTickRotation(),a.calculateTickRotation(),a.afterCalculateTickRotation(),a.beforeFit(),a.fit(),a.afterFit(),a._ticksToDraw=n.display&&(n.autoSkip||"auto"===n.source)?a._autoSkip(f):f,c&&(l=a._convertTicksToLabels(a._ticksToDraw)),a.ticks=l,a.afterUpdate(),a.minSize},_configure:function(){var r,a,e=this,t=e.options.ticks.reverse;e.isHorizontal()?(r=e.left,a=e.right):(r=e.top,a=e.bottom,t=!t),e._startPixel=r,e._endPixel=a,e._reversePixels=t,e._length=a-r},afterUpdate:function(){m.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){m.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var e=this;e.isHorizontal()?(e.width=e.maxWidth,e.left=0,e.right=e.width):(e.height=e.maxHeight,e.top=0,e.bottom=e.height),e.paddingLeft=0,e.paddingTop=0,e.paddingRight=0,e.paddingBottom=0},afterSetDimensions:function(){m.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){m.callback(this.options.beforeDataLimits,[this])},determineDataLimits:m.noop,afterDataLimits:function(){m.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){m.callback(this.options.beforeBuildTicks,[this])},buildTicks:m.noop,afterBuildTicks:function(e){var t=this;return rt(e)&&e.length?m.callback(t.options.afterBuildTicks,[t,e]):(t.ticks=m.callback(t.options.afterBuildTicks,[t,t.ticks])||t.ticks,e)},beforeTickToLabelConversion:function(){m.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var e=this,t=e.options.ticks;e.ticks=e.ticks.map(t.userCallback||t.callback,this)},afterTickToLabelConversion:function(){m.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){m.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var d,l,f,c,v,p,y,e=this,t=e.options,r=t.ticks,a=e.getTicks().length,n=r.minRotation||0,o=r.maxRotation,s=n;!e._isVisible()||!r.display||n>=o||a<=1||!e.isHorizontal()?e.labelRotation=n:(l=(d=e._getLabelSizes()).widest.width,f=d.highest.height-d.highest.offset,c=Math.min(e.maxWidth,e.chart.width-l),l+6>(v=t.offset?e.maxWidth/a:c/(a-1))&&(v=c/(a-(t.offset?.5:1)),p=e.maxHeight-Yt(t.gridLines)-r.padding-ta(t.scaleLabel),y=Math.sqrt(l*l+f*f),s=m.toDegrees(Math.min(Math.asin(Math.min((d.highest.height+6)/v,1)),Math.asin(Math.min(p/y,1))-Math.asin(f/y))),s=Math.max(n,Math.min(o,s))),e.labelRotation=s)},afterCalculateTickRotation:function(){m.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){m.callback(this.options.beforeFit,[this])},fit:function(){var e=this,t=e.minSize={width:0,height:0},r=e.chart,a=e.options,n=a.ticks,o=a.scaleLabel,s=a.gridLines,d=e._isVisible(),l="bottom"===a.position,f=e.isHorizontal();if(f?t.width=e.maxWidth:d&&(t.width=Yt(s)+ta(o)),f?d&&(t.height=Yt(s)+ta(o)):t.height=e.maxHeight,n.display&&d){var c=ra(n),v=e._getLabelSizes(),p=v.first,y=v.last,_=v.widest,w=v.highest,x=.4*c.minor.lineHeight,M=n.padding;if(f){var T=0!==e.labelRotation,C=m.toRadians(e.labelRotation),I=Math.cos(C),A=Math.sin(C);t.height=Math.min(e.maxHeight,t.height+(A*_.width+I*(w.height-(T?w.offset:0))+(T?0:x))+M);var E,O,N=e.getPixelForTick(0)-e.left,Y=e.right-e.getPixelForTick(e.getTicks().length-1);T?(E=l?I*p.width+A*p.offset:A*(p.height-p.offset),O=l?A*(y.height-y.offset):I*y.width+A*y.offset):(E=p.width/2,O=y.width/2),e.paddingLeft=Math.max((E-N)*e.width/(e.width-N),0)+3,e.paddingRight=Math.max((O-Y)*e.width/(e.width-Y),0)+3}else t.width=Math.min(e.maxWidth,t.width+(n.mirror?0:_.width+M+x)),e.paddingTop=p.height/2,e.paddingBottom=y.height/2}e.handleMargins(),f?(e.width=e._length=r.width-e.margins.left-e.margins.right,e.height=t.height):(e.width=t.width,e.height=e._length=r.height-e.margins.top-e.margins.bottom)},handleMargins:function(){var e=this;e.margins&&(e.margins.left=Math.max(e.paddingLeft,e.margins.left),e.margins.top=Math.max(e.paddingTop,e.margins.top),e.margins.right=Math.max(e.paddingRight,e.margins.right),e.margins.bottom=Math.max(e.paddingBottom,e.margins.bottom))},afterFit:function(){m.callback(this.options.afterFit,[this])},isHorizontal:function(){var e=this.options.position;return"top"===e||"bottom"===e},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(e){if(Nt(e))return NaN;if(("number"==typeof e||e instanceof Number)&&!isFinite(e))return NaN;if(e)if(this.isHorizontal()){if(void 0!==e.x)return this.getRightValue(e.x)}else if(void 0!==e.y)return this.getRightValue(e.y);return e},_convertTicksToLabels:function(e){var r,a,n,t=this;for(t.ticks=e.map(function(o){return o.value}),t.beforeTickToLabelConversion(),r=t.convertTicksToLabels(e)||t.ticks,t.afterTickToLabelConversion(),a=0,n=e.length;a<n;++a)e[a].label=r[a];return r},_getLabelSizes:function(){var e=this,t=e._labelSizes;return t||(e._labelSizes=t=function Ns(e,t,r,a){var c,v,p,y,_,w,x,M,T,C,I,A,z,n=r.length,o=[],s=[],d=[],l=0,f=0;for(c=0;c<n;++c){if(y=r[c].label,e.font=w=(_=r[c].major?t.major:t.minor).string,x=a[w]=a[w]||{data:{},gc:[]},M=_.lineHeight,T=C=0,Nt(y)||rt(y)){if(rt(y))for(v=0,p=y.length;v<p;++v)!Nt(I=y[v])&&!rt(I)&&(T=m.measureText(e,x.data,x.gc,T,I),C+=M)}else T=m.measureText(e,x.data,x.gc,T,y),C=M;o.push(T),s.push(C),d.push(M/2),l=Math.max(T,l),f=Math.max(C,f)}function N(Y){return{width:o[Y]||0,height:s[Y]||0,offset:d[Y]||0}}return function Ws(e,t){m.each(e,function(r){var o,a=r.gc,n=a.length/2;if(n>t){for(o=0;o<n;++o)delete r.data[a[o]];a.splice(0,n)}})}(a,n),A=o.indexOf(l),z=s.indexOf(f),{first:N(0),last:N(n-1),widest:N(A),highest:N(z)}}(e.ctx,ra(e.options.ticks),e.getTicks(),e.longestTextCache),e.longestLabelWidth=t.widest.width),t},_parseValue:function(e){var t,r,a,n;return rt(e)?(t=+this.getRightValue(e[0]),r=+this.getRightValue(e[1]),a=Math.min(t,r),n=Math.max(t,r)):(t=void 0,r=e=+this.getRightValue(e),a=e,n=e),{min:a,max:n,start:t,end:r}},_getScaleLabel:function(e){var t=this._parseValue(e);return void 0!==t.start?"["+t.start+", "+t.end+"]":+this.getRightValue(e)},getLabelForIndex:m.noop,getPixelForValue:m.noop,getValueForPixel:m.noop,getPixelForTick:function(e){var t=this,r=t.options.offset,a=t._ticks.length,n=1/Math.max(a-(r?0:1),1);return e<0||e>a-1?null:t.getPixelForDecimal(e*n+(r?n/2:0))},getPixelForDecimal:function(e){var t=this;return t._reversePixels&&(e=1-e),t._startPixel+e*t._length},getDecimalForPixel:function(e){var t=(e-this._startPixel)/this._length;return this._reversePixels?1-t:t},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var e=this,t=e.min,r=e.max;return e.beginAtZero?0:t<0&&r<0?r:t>0&&r>0?t:0},_autoSkip:function(e){var f,c,v,p,t=this,r=t.options.ticks,n=r.maxTicksLimit||t._length/t._tickSize()+1,o=r.major.enabled?function zs(e){var r,a,t=[];for(r=0,a=e.length;r<a;r++)e[r].major&&t.push(r);return t}(e):[],s=o.length,d=o[0],l=o[s-1];if(s>n)return function Bs(e,t,r){var o,s,a=0,n=t[0];for(r=Math.ceil(r),o=0;o<e.length;o++)s=e[o],o===n?(s._index=o,n=t[++a*r]):delete s.label}(e,o,s/n),aa(e);if(v=function Es(e,t,r,a){var s,d,l,f,n=function Ys(e){var r,a,t=e.length;if(t<2)return!1;for(a=e[0],r=1;r<t;++r)if(e[r]-e[r-1]!==a)return!1;return a}(e),o=(t.length-1)/a;if(!n)return Math.max(o,1);for(l=0,f=(s=m.math._factorize(n)).length-1;l<f;l++)if((d=s[l])>o)return d;return Math.max(o,1)}(o,e,0,n),s>0){for(f=0,c=s-1;f<c;f++)or(e,v,o[f],o[f+1]);return or(e,v,m.isNullOrUndef(p=s>1?(l-d)/(s-1):null)?0:d-p,d),or(e,v,l,m.isNullOrUndef(p)?e.length:l+p),aa(e)}return or(e,v),aa(e)},_tickSize:function(){var e=this,t=e.options.ticks,r=m.toRadians(e.labelRotation),a=Math.abs(Math.cos(r)),n=Math.abs(Math.sin(r)),o=e._getLabelSizes(),s=t.autoSkipPadding||0,d=o?o.widest.width+s:0,l=o?o.highest.height+s:0;return e.isHorizontal()?l*a>d*n?d/a:l/n:l*n<d*a?l/a:d/n},_isVisible:function(){var a,n,o,e=this,t=e.chart,r=e.options.display;if("auto"!==r)return!!r;for(a=0,n=t.data.datasets.length;a<n;++a)if(t.isDatasetVisible(a)&&((o=t.getDatasetMeta(a)).xAxisID===e.id||o.yAxisID===e.id))return!0;return!1},_computeGridLineItems:function(e){var x,M,T,C,I,A,z,N,Y,E,O,J,X,U,We,Ne,fe,t=this,r=t.chart,a=t.options,n=a.gridLines,o=a.position,s=n.offsetGridLines,d=t.isHorizontal(),l=t._ticksToDraw,f=l.length+(s?1:0),c=Yt(n),v=[],p=n.drawBorder?mt(n.lineWidth,0,0):0,y=p/2,_=m._alignPixel,w=function(ca){return _(r,ca,p)};for("top"===o?(x=w(t.bottom),z=t.bottom-c,Y=x-y,O=w(e.top)+y,X=e.bottom):"bottom"===o?(x=w(t.top),O=e.top,X=w(e.bottom)-y,z=x+y,Y=t.top+c):"left"===o?(x=w(t.right),A=t.right-c,N=x-y,E=w(e.left)+y,J=e.right):(x=w(t.left),E=e.left,J=w(e.right)-y,A=x+y,N=t.left+c),M=0;M<f;++M)!(Nt((T=l[M]||{}).label)&&M<l.length)&&(M===t.zeroLineIndex&&a.offset===s?(U=n.zeroLineWidth,We=n.zeroLineColor,Ne=n.zeroLineBorderDash||[],fe=n.zeroLineBorderDashOffset||0):(U=mt(n.lineWidth,M,1),We=mt(n.color,M,"rgba(0,0,0,0.1)"),Ne=n.borderDash||[],fe=n.borderDashOffset||0),void 0!==(C=Rs(t,T._index||M,s))&&(I=_(r,C,U),d?A=N=E=J=I:z=Y=O=X=I,v.push({tx1:A,ty1:z,tx2:N,ty2:Y,x1:E,y1:O,x2:J,y2:X,width:U,color:We,borderDash:Ne,borderDashOffset:fe})));return v.ticksLength=f,v.borderValue=x,v},_computeLabelItems:function(){var p,y,_,w,x,M,T,C,I,A,z,N,e=this,t=e.options,r=t.ticks,a=t.position,n=r.mirror,o=e.isHorizontal(),s=e._ticksToDraw,d=ra(r),l=r.padding,f=Yt(t.gridLines),c=-m.toRadians(e.labelRotation),v=[];for("top"===a?(M=e.bottom-f-l,T=c?"left":"center"):"bottom"===a?(M=e.top+f+l,T=c?"right":"center"):"left"===a?(x=e.right-(n?0:f)-l,T=n?"left":"right"):(x=e.left+(n?0:f)+l,T=n?"right":"left"),p=0,y=s.length;p<y;++p)!Nt(w=(_=s[p]).label)&&(C=e.getPixelForTick(_._index||p)+r.labelOffset,A=(I=_.major?d.major:d.minor).lineHeight,z=rt(w)?w.length:1,o?(x=C,N="top"===a?((c?1:.5)-z)*A:(c?0:.5)*A):(M=C,N=(1-z)*A/2),v.push({x,y:M,rotation:c,label:w,font:I,textOffset:N,textAlign:T}));return v},_drawGrid:function(e){var t=this,r=t.options.gridLines;if(r.display){var l,f,c,v,p,a=t.ctx,n=t.chart,o=m._alignPixel,s=r.drawBorder?mt(r.lineWidth,0,0):0,d=t._gridLineItems||(t._gridLineItems=t._computeGridLineItems(e));for(c=0,v=d.length;c<v;++c)f=(p=d[c]).color,(l=p.width)&&f&&(a.save(),a.lineWidth=l,a.strokeStyle=f,a.setLineDash&&(a.setLineDash(p.borderDash),a.lineDashOffset=p.borderDashOffset),a.beginPath(),r.drawTicks&&(a.moveTo(p.tx1,p.ty1),a.lineTo(p.tx2,p.ty2)),r.drawOnChartArea&&(a.moveTo(p.x1,p.y1),a.lineTo(p.x2,p.y2)),a.stroke(),a.restore());if(s){var x,M,T,C,y=s,_=mt(r.lineWidth,d.ticksLength-1,1),w=d.borderValue;t.isHorizontal()?(x=o(n,t.left,y)-y/2,M=o(n,t.right,_)+_/2,T=C=w):(T=o(n,t.top,y)-y/2,C=o(n,t.bottom,_)+_/2,x=M=w),a.lineWidth=s,a.strokeStyle=mt(r.color,0),a.beginPath(),a.moveTo(x,T),a.lineTo(M,C),a.stroke()}}},_drawLabels:function(){var e=this;if(e.options.ticks.display){var n,o,s,d,l,f,c,v,r=e.ctx,a=e._labelItems||(e._labelItems=e._computeLabelItems());for(n=0,s=a.length;n<s;++n){if(f=(l=a[n]).font,r.save(),r.translate(l.x,l.y),r.rotate(l.rotation),r.font=f.string,r.fillStyle=f.color,r.textBaseline="middle",r.textAlign=l.textAlign,v=l.textOffset,rt(c=l.label))for(o=0,d=c.length;o<d;++o)r.fillText(""+c[o],0,v),v+=f.lineHeight;else r.fillText(c,0,v);r.restore()}}},_drawTitle:function(){var e=this,t=e.ctx,r=e.options,a=r.scaleLabel;if(a.display){var c,v,n=at(a.fontColor,F.global.defaultFontColor),o=m.options._parseFont(a),s=m.options.toPadding(a.padding),d=o.lineHeight/2,l=r.position,f=0;if(e.isHorizontal())c=e.left+e.width/2,v="bottom"===l?e.bottom-d-s.bottom:e.top+d+s.top;else{var p="left"===l;c=p?e.left+d+s.top:e.right-d-s.top,v=e.top+e.height/2,f=p?-.5*Math.PI:.5*Math.PI}t.save(),t.translate(c,v),t.rotate(f),t.textAlign="center",t.textBaseline="middle",t.fillStyle=n,t.font=o.string,t.fillText(a.labelString,0,0),t.restore()}},draw:function(e){var t=this;!t._isVisible()||(t._drawGrid(e),t._drawTitle(),t._drawLabels())},_layers:function(){var e=this,t=e.options,r=t.ticks&&t.ticks.z||0,a=t.gridLines&&t.gridLines.z||0;return e._isVisible()&&r!==a&&e.draw===e._draw?[{z:a,draw:function(){e._drawGrid.apply(e,arguments),e._drawTitle.apply(e,arguments)}},{z:r,draw:function(){e._drawLabels.apply(e,arguments)}}]:[{z:r,draw:function(){e.draw.apply(e,arguments)}}]},_getMatchingVisibleMetas:function(e){var t=this,r=t.isHorizontal();return t.chart._getSortedVisibleDatasetMetas().filter(function(a){return(!e||a.type===e)&&(r?a.xAxisID===t.id:a.yAxisID===t.id)})}});na.prototype._draw=na.prototype.draw;var le=na,ia=m.isNullOrUndef,Cn=le.extend({determineDataLimits:function(){var d,e=this,t=e._getLabels(),r=e.options.ticks,a=r.min,n=r.max,o=0,s=t.length-1;void 0!==a&&(d=t.indexOf(a))>=0&&(o=d),void 0!==n&&(d=t.indexOf(n))>=0&&(s=d),e.minIndex=o,e.maxIndex=s,e.min=t[o],e.max=t[s]},buildTicks:function(){var e=this,t=e._getLabels(),r=e.minIndex,a=e.maxIndex;e.ticks=0===r&&a===t.length-1?t:t.slice(r,a+1)},getLabelForIndex:function(e,t){var r=this,a=r.chart;return a.getDatasetMeta(t).controller._getValueScaleId()===r.id?r.getRightValue(a.data.datasets[t].data[e]):r._getLabels()[e]},_configure:function(){var e=this,t=e.options.offset,r=e.ticks;le.prototype._configure.call(e),e.isHorizontal()||(e._reversePixels=!e._reversePixels),r&&(e._startValue=e.minIndex-(t?.5:0),e._valueRange=Math.max(r.length-(t?0:1),1))},getPixelForValue:function(e,t,r){var n,o,s,a=this;return!ia(t)&&!ia(r)&&(e=a.chart.data.datasets[r].data[t]),ia(e)||(n=a.isHorizontal()?e.x:e.y),(void 0!==n||void 0!==e&&isNaN(t))&&(o=a._getLabels(),e=m.valueOrDefault(n,e),t=-1!==(s=o.indexOf(e))?s:t,isNaN(t)&&(t=e)),a.getPixelForDecimal((t-a._startValue)/a._valueRange)},getPixelForTick:function(e){var t=this.ticks;return e<0||e>t.length-1?null:this.getPixelForValue(t[e],e+this.minIndex)},getValueForPixel:function(e){var t=this,r=Math.round(t._startValue+t.getDecimalForPixel(e)*t._valueRange);return Math.min(Math.max(r,0),t.ticks.length-1)},getBasePixel:function(){return this.bottom}});Cn._defaults={position:"bottom"};var nt=m.isNullOrUndef,sr=le.extend({getRightValue:function(e){return"string"==typeof e?+e:le.prototype.getRightValue.call(this,e)},handleTickRangeOptions:function(){var e=this,r=e.options.ticks;if(r.beginAtZero){var a=m.sign(e.min),n=m.sign(e.max);a<0&&n<0?e.max=0:a>0&&n>0&&(e.min=0)}var o=void 0!==r.min||void 0!==r.suggestedMin,s=void 0!==r.max||void 0!==r.suggestedMax;void 0!==r.min?e.min=r.min:void 0!==r.suggestedMin&&(e.min=null===e.min?r.suggestedMin:Math.min(e.min,r.suggestedMin)),void 0!==r.max?e.max=r.max:void 0!==r.suggestedMax&&(e.max=null===e.max?r.suggestedMax:Math.max(e.max,r.suggestedMax)),o!==s&&e.min>=e.max&&(o?e.max=e.min+1:e.min=e.max-1),e.min===e.max&&(e.max++,r.beginAtZero||e.min--)},getTickLimit:function(){var n,e=this,t=e.options.ticks,r=t.stepSize,a=t.maxTicksLimit;return r?n=Math.ceil(e.max/r)-Math.floor(e.min/r)+1:(n=e._computeTickLimit(),a=a||11),a&&(n=Math.min(a,n)),n},_computeTickLimit:function(){return Number.POSITIVE_INFINITY},handleDirectionalChanges:m.noop,buildTicks:function(){var e=this,r=e.options.ticks,a=e.getTickLimit(),n={maxTicks:a=Math.max(2,a),min:r.min,max:r.max,precision:r.precision,stepSize:m.valueOrDefault(r.fixedStepSize,r.stepSize)},o=e.ticks=function js(e,t){var y,_,w,x,r=[],n=e.stepSize,o=n||1,s=e.maxTicks-1,d=e.min,l=e.max,f=e.precision,c=t.min,v=t.max,p=m.niceNum((v-c)/s/o)*o;if(p<1e-14&&nt(d)&&nt(l))return[c,v];(x=Math.ceil(v/p)-Math.floor(c/p))>s&&(p=m.niceNum(x*p/s/o)*o),n||nt(f)?y=Math.pow(10,m._decimalPlaces(p)):(y=Math.pow(10,f),p=Math.ceil(p*y)/y),_=Math.floor(c/p)*p,w=Math.ceil(v/p)*p,n&&(!nt(d)&&m.almostWhole(d/p,p/1e3)&&(_=d),!nt(l)&&m.almostWhole(l/p,p/1e3)&&(w=l)),x=m.almostEquals(x=(w-_)/p,Math.round(x),p/1e3)?Math.round(x):Math.ceil(x),_=Math.round(_*y)/y,w=Math.round(w*y)/y,r.push(nt(d)?_:d);for(var M=1;M<x;++M)r.push(Math.round((_+M*p)*y)/y);return r.push(nt(l)?w:l),r}(n,e);e.handleDirectionalChanges(),e.max=m.max(o),e.min=m.min(o),r.reverse?(o.reverse(),e.start=e.max,e.end=e.min):(e.start=e.min,e.end=e.max)},convertTicksToLabels:function(){var e=this;e.ticksAsNumbers=e.ticks.slice(),e.zeroLineIndex=e.ticks.indexOf(0),le.prototype.convertTicksToLabels.call(e)},_configure:function(){var n,e=this,t=e.getTicks(),r=e.min,a=e.max;le.prototype._configure.call(e),e.options.offset&&t.length&&(r-=n=(a-r)/Math.max(t.length-1,1)/2,a+=n),e._startValue=r,e._endValue=a,e._valueRange=a-r}}),Gs={position:"left",ticks:{callback:Wt.formatters.linear}};function Xs(e,t,r,a){var c,v,n=e.options,s=function Zs(e,t,r){var a=[r.type,void 0===t&&void 0===r.stack?r.index:"",r.stack].join(".");return void 0===e[a]&&(e[a]={pos:[],neg:[]}),e[a]}(t,n.stacked,r),d=s.pos,l=s.neg,f=a.length;for(c=0;c<f;++c)v=e._parseValue(a[c]),!(isNaN(v.min)||isNaN(v.max)||r.data[c].hidden)&&(d[c]=d[c]||0,l[c]=l[c]||0,n.relativePoints?d[c]=100:v.min<0||v.max<0?l[c]+=v.min:d[c]+=v.max)}function Ks(e,t,r){var n,o,a=r.length;for(n=0;n<a;++n)o=e._parseValue(r[n]),!(isNaN(o.min)||isNaN(o.max)||t.data[n].hidden)&&(e.min=Math.min(e.min,o.min),e.max=Math.max(e.max,o.max))}var Pn=sr.extend({determineDataLimits:function(){var l,f,c,v,e=this,t=e.options,a=e.chart.data.datasets,n=e._getMatchingVisibleMetas(),o=t.stacked,s={},d=n.length;if(e.min=Number.POSITIVE_INFINITY,e.max=Number.NEGATIVE_INFINITY,void 0===o)for(l=0;!o&&l<d;++l)o=void 0!==(f=n[l]).stack;for(l=0;l<d;++l)c=a[(f=n[l]).index].data,o?Xs(e,s,f,c):Ks(e,f,c);m.each(s,function(p){v=p.pos.concat(p.neg),e.min=Math.min(e.min,m.min(v)),e.max=Math.max(e.max,m.max(v))}),e.min=m.isFinite(e.min)&&!isNaN(e.min)?e.min:0,e.max=m.isFinite(e.max)&&!isNaN(e.max)?e.max:1,e.handleTickRangeOptions()},_computeTickLimit:function(){var t,e=this;return e.isHorizontal()?Math.ceil(e.width/40):(t=m.options._parseFont(e.options.ticks),Math.ceil(e.height/t.lineHeight))},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(e,t){return this._getScaleLabel(this.chart.data.datasets[t].data[e])},getPixelForValue:function(e){var t=this;return t.getPixelForDecimal((+t.getRightValue(e)-t._startValue)/t._valueRange)},getValueForPixel:function(e){return this._startValue+this.getDecimalForPixel(e)*this._valueRange},getPixelForTick:function(e){var t=this.ticksAsNumbers;return e<0||e>t.length-1?null:this.getPixelForValue(t[e])}});Pn._defaults=Gs;var oa=m.valueOrDefault,ue=m.math.log10,el={position:"left",ticks:{callback:Wt.formatters.logarithmic}};function lr(e,t){return m.isFinite(e)&&e>=0?e:t}var On=le.extend({determineDataLimits:function(){var s,d,l,f,c,v,e=this,t=e.options,r=e.chart,a=r.data.datasets,n=e.isHorizontal();function o(x){return n?x.xAxisID===e.id:x.yAxisID===e.id}e.min=Number.POSITIVE_INFINITY,e.max=Number.NEGATIVE_INFINITY,e.minNotZero=Number.POSITIVE_INFINITY;var p=t.stacked;if(void 0===p)for(s=0;s<a.length;s++)if(d=r.getDatasetMeta(s),r.isDatasetVisible(s)&&o(d)&&void 0!==d.stack){p=!0;break}if(t.stacked||p){var y={};for(s=0;s<a.length;s++){var _=[(d=r.getDatasetMeta(s)).type,void 0===t.stacked&&void 0===d.stack?s:"",d.stack].join(".");if(r.isDatasetVisible(s)&&o(d))for(void 0===y[_]&&(y[_]=[]),c=0,v=(f=a[s].data).length;c<v;c++){var w=y[_];l=e._parseValue(f[c]),!(isNaN(l.min)||isNaN(l.max)||d.data[c].hidden||l.min<0||l.max<0)&&(w[c]=w[c]||0,w[c]+=l.max)}}m.each(y,function(x){if(x.length>0){var M=m.min(x),T=m.max(x);e.min=Math.min(e.min,M),e.max=Math.max(e.max,T)}})}else for(s=0;s<a.length;s++)if(d=r.getDatasetMeta(s),r.isDatasetVisible(s)&&o(d))for(c=0,v=(f=a[s].data).length;c<v;c++)l=e._parseValue(f[c]),!(isNaN(l.min)||isNaN(l.max)||d.data[c].hidden||l.min<0||l.max<0)&&(e.min=Math.min(l.min,e.min),e.max=Math.max(l.max,e.max),0!==l.min&&(e.minNotZero=Math.min(l.min,e.minNotZero)));e.min=m.isFinite(e.min)?e.min:null,e.max=m.isFinite(e.max)?e.max:null,e.minNotZero=m.isFinite(e.minNotZero)?e.minNotZero:null,this.handleTickRangeOptions()},handleTickRangeOptions:function(){var e=this,t=e.options.ticks;e.min=lr(t.min,e.min),e.max=lr(t.max,e.max),e.min===e.max&&(0!==e.min&&null!==e.min?(e.min=Math.pow(10,Math.floor(ue(e.min))-1),e.max=Math.pow(10,Math.floor(ue(e.max))+1)):(e.min=1,e.max=10)),null===e.min&&(e.min=Math.pow(10,Math.floor(ue(e.max))-1)),null===e.max&&(e.max=0!==e.min?Math.pow(10,Math.floor(ue(e.min))+1):10),null===e.minNotZero&&(e.minNotZero=e.min>0?e.min:e.max<1?Math.pow(10,Math.floor(ue(e.max))):1)},buildTicks:function(){var e=this,t=e.options.ticks,r=!e.isHorizontal(),a={min:lr(t.min),max:lr(t.max)},n=e.ticks=function Qs(e,t){var s,d,r=[],a=oa(e.min,Math.pow(10,Math.floor(ue(t.min)))),n=Math.floor(ue(t.max)),o=Math.ceil(t.max/Math.pow(10,n));0===a?(s=Math.floor(ue(t.minNotZero)),d=Math.floor(t.minNotZero/Math.pow(10,s)),r.push(a),a=d*Math.pow(10,s)):(s=Math.floor(ue(a)),d=Math.floor(a/Math.pow(10,s)));var l=s<0?Math.pow(10,Math.abs(s)):1;do{r.push(a),10==++d&&(d=1,l=++s>=0?1:l),a=Math.round(d*Math.pow(10,s)*l)/l}while(s<n||s===n&&d<o);var f=oa(e.max,a);return r.push(f),r}(a,e);e.max=m.max(n),e.min=m.min(n),t.reverse?(r=!r,e.start=e.max,e.end=e.min):(e.start=e.min,e.end=e.max),r&&n.reverse()},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),le.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(e,t){return this._getScaleLabel(this.chart.data.datasets[t].data[e])},getPixelForTick:function(e){var t=this.tickValues;return e<0||e>t.length-1?null:this.getPixelForValue(t[e])},_getFirstTickValue:function(e){var t=Math.floor(ue(e));return Math.floor(e/Math.pow(10,t))*Math.pow(10,t)},_configure:function(){var e=this,t=e.min,r=0;le.prototype._configure.call(e),0===t&&(t=e._getFirstTickValue(e.minNotZero),r=oa(e.options.ticks.fontSize,F.global.defaultFontSize)/e._length),e._startValue=ue(t),e._valueOffset=r,e._valueRange=(ue(e.max)-ue(t))/(1-r)},getPixelForValue:function(e){var t=this,r=0;return(e=+t.getRightValue(e))>t.min&&e>0&&(r=(ue(e)-t._startValue)/t._valueRange+t._valueOffset),t.getPixelForDecimal(r)},getValueForPixel:function(e){var t=this,r=t.getDecimalForPixel(e);return 0===r&&0===t.min?0:Math.pow(10,t._startValue+(r-t._valueOffset)*t._valueRange)}});On._defaults=el;var ur=m.valueOrDefault,sa=m.valueAtIndexOrDefault,Fn=m.options.resolve,rl={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,0,0,0.1)",lineWidth:1,borderDash:[],borderDashOffset:0},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:Wt.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(e){return e}}};function la(e){var t=e.ticks;return t.display&&e.display?ur(t.fontSize,F.global.defaultFontSize)+2*t.backdropPaddingY:0}function al(e,t,r){return m.isArray(r)?{w:m.longestText(e,e.font,r),h:r.length*t}:{w:e.measureText(r).width,h:t}}function An(e,t,r,a,n){return e===a||e===n?{start:t-r/2,end:t+r/2}:e<a||e>n?{start:t-r,end:t}:{start:t,end:t+r}}function il(e){return 0===e||180===e?"center":e<180?"left":"right"}function ol(e,t,r,a){var o,s,n=r.y+a/2;if(m.isArray(t))for(o=0,s=t.length;o<s;++o)e.fillText(t[o],r.x,n),n+=a;else e.fillText(t,r.x,n)}function sl(e,t,r){90===e||270===e?r.y-=t.h/2:(e>270||e<90)&&(r.y-=t.h)}function dr(e){return m.isNumber(e)?e:0}var In=sr.extend({setDimensions:function(){var e=this;e.width=e.maxWidth,e.height=e.maxHeight,e.paddingTop=la(e.options)/2,e.xCenter=Math.floor(e.width/2),e.yCenter=Math.floor((e.height-e.paddingTop)/2),e.drawingArea=Math.min(e.height-e.paddingTop,e.width)/2},determineDataLimits:function(){var e=this,t=e.chart,r=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY;m.each(t.data.datasets,function(n,o){if(t.isDatasetVisible(o)){var s=t.getDatasetMeta(o);m.each(n.data,function(d,l){var f=+e.getRightValue(d);isNaN(f)||s.data[l].hidden||(r=Math.min(f,r),a=Math.max(f,a))})}}),e.min=r===Number.POSITIVE_INFINITY?0:r,e.max=a===Number.NEGATIVE_INFINITY?0:a,e.handleTickRangeOptions()},_computeTickLimit:function(){return Math.ceil(this.drawingArea/la(this.options))},convertTicksToLabels:function(){var e=this;sr.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(function(){var t=m.callback(e.options.pointLabels.callback,arguments,e);return t||0===t?t:""})},getLabelForIndex:function(e,t){return+this.getRightValue(this.chart.data.datasets[t].data[e])},fit:function(){var e=this,t=e.options;t.display&&t.pointLabels.display?function nl(e){var n,o,s,t=m.options._parseFont(e.options.pointLabels),r={l:0,r:e.width,t:0,b:e.height-e.paddingTop},a={};e.ctx.font=t.string,e._pointLabelSizes=[];var d=e.chart.data.labels.length;for(n=0;n<d;n++){s=e.getPointPosition(n,e.drawingArea+5),o=al(e.ctx,t.lineHeight,e.pointLabels[n]),e._pointLabelSizes[n]=o;var l=e.getIndexAngle(n),f=m.toDegrees(l)%360,c=An(f,s.x,o.w,0,180),v=An(f,s.y,o.h,90,270);c.start<r.l&&(r.l=c.start,a.l=l),c.end>r.r&&(r.r=c.end,a.r=l),v.start<r.t&&(r.t=v.start,a.t=l),v.end>r.b&&(r.b=v.end,a.b=l)}e.setReductions(e.drawingArea,r,a)}(e):e.setCenterPoint(0,0,0,0)},setReductions:function(e,t,r){var a=this,n=t.l/Math.sin(r.l),o=Math.max(t.r-a.width,0)/Math.sin(r.r),s=-t.t/Math.cos(r.t),d=-Math.max(t.b-(a.height-a.paddingTop),0)/Math.cos(r.b);n=dr(n),o=dr(o),s=dr(s),d=dr(d),a.drawingArea=Math.min(Math.floor(e-(n+o)/2),Math.floor(e-(s+d)/2)),a.setCenterPoint(n,o,s,d)},setCenterPoint:function(e,t,r,a){var n=this,d=r+n.drawingArea,l=n.height-n.paddingTop-a-n.drawingArea;n.xCenter=Math.floor((e+n.drawingArea+(n.width-t-n.drawingArea))/2+n.left),n.yCenter=Math.floor((d+l)/2+n.top+n.paddingTop)},getIndexAngle:function(e){var t=this.chart,o=(e*(360/t.data.labels.length)+((t.options||{}).startAngle||0))%360;return(o<0?o+360:o)*Math.PI*2/360},getDistanceFromCenterForValue:function(e){var t=this;if(m.isNullOrUndef(e))return NaN;var r=t.drawingArea/(t.max-t.min);return t.options.ticks.reverse?(t.max-e)*r:(e-t.min)*r},getPointPosition:function(e,t){var r=this,a=r.getIndexAngle(e)-Math.PI/2;return{x:Math.cos(a)*t+r.xCenter,y:Math.sin(a)*t+r.yCenter}},getPointPositionForValue:function(e,t){return this.getPointPosition(e,this.getDistanceFromCenterForValue(t))},getBasePosition:function(e){var t=this,r=t.min,a=t.max;return t.getPointPositionForValue(e||0,t.beginAtZero?0:r<0&&a<0?a:r>0&&a>0?r:0)},_drawGrid:function(){var d,l,f,e=this,t=e.ctx,r=e.options,a=r.gridLines,n=r.angleLines,o=ur(n.lineWidth,a.lineWidth),s=ur(n.color,a.color);if(r.pointLabels.display&&function ll(e){var t=e.ctx,r=e.options,a=r.pointLabels,n=la(r),o=e.getDistanceFromCenterForValue(r.ticks.reverse?e.min:e.max),s=m.options._parseFont(a);t.save(),t.font=s.string,t.textBaseline="middle";for(var d=e.chart.data.labels.length-1;d>=0;d--){var f=e.getPointPosition(d,o+(0===d?n/2:0)+5),c=sa(a.fontColor,d,F.global.defaultFontColor);t.fillStyle=c;var v=e.getIndexAngle(d),p=m.toDegrees(v);t.textAlign=il(p),sl(p,e._pointLabelSizes[d],f),ol(t,e.pointLabels[d],f,s.lineHeight)}t.restore()}(e),a.display&&m.each(e.ticks,function(c,v){0!==v&&(l=e.getDistanceFromCenterForValue(e.ticksAsNumbers[v]),function ul(e,t,r,a){var f,n=e.ctx,o=t.circular,s=e.chart.data.labels.length,d=sa(t.color,a-1),l=sa(t.lineWidth,a-1);if((o||s)&&d&&l){if(n.save(),n.strokeStyle=d,n.lineWidth=l,n.setLineDash&&(n.setLineDash(t.borderDash||[]),n.lineDashOffset=t.borderDashOffset||0),n.beginPath(),o)n.arc(e.xCenter,e.yCenter,r,0,2*Math.PI);else{f=e.getPointPosition(0,r),n.moveTo(f.x,f.y);for(var c=1;c<s;c++)f=e.getPointPosition(c,r),n.lineTo(f.x,f.y)}n.closePath(),n.stroke(),n.restore()}}(e,a,l,v))}),n.display&&o&&s){for(t.save(),t.lineWidth=o,t.strokeStyle=s,t.setLineDash&&(t.setLineDash(Fn([n.borderDash,a.borderDash,[]])),t.lineDashOffset=Fn([n.borderDashOffset,a.borderDashOffset,0])),d=e.chart.data.labels.length-1;d>=0;d--)l=e.getDistanceFromCenterForValue(r.ticks.reverse?e.min:e.max),f=e.getPointPosition(d,l),t.beginPath(),t.moveTo(e.xCenter,e.yCenter),t.lineTo(f.x,f.y),t.stroke();t.restore()}},_drawLabels:function(){var e=this,t=e.ctx,a=e.options.ticks;if(a.display){var d,l,n=e.getIndexAngle(0),o=m.options._parseFont(a),s=ur(a.fontColor,F.global.defaultFontColor);t.save(),t.font=o.string,t.translate(e.xCenter,e.yCenter),t.rotate(n),t.textAlign="center",t.textBaseline="middle",m.each(e.ticks,function(f,c){0===c&&!a.reverse||(d=e.getDistanceFromCenterForValue(e.ticksAsNumbers[c]),a.showLabelBackdrop&&(l=t.measureText(f).width,t.fillStyle=a.backdropColor,t.fillRect(-l/2-a.backdropPaddingX,-d-o.size/2-a.backdropPaddingY,l+2*a.backdropPaddingX,o.size+2*a.backdropPaddingY)),t.fillStyle=s,t.fillText(f,0,-d))}),t.restore()}},_drawTitle:m.noop});In._defaults=rl;var ua=m._deprecated,Ln=m.options.resolve,fl=m.valueOrDefault,Rn=Number.MIN_SAFE_INTEGER||-9007199254740991,da=Number.MAX_SAFE_INTEGER||9007199254740991,fr={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},de=Object.keys(fr);function Wn(e,t){return e-t}function Nn(e){return m.valueOrDefault(e.time.min,e.ticks.min)}function Yn(e){return m.valueOrDefault(e.time.max,e.ticks.max)}function pt(e,t,r,a){var n=function vl(e,t,r){for(var o,s,d,a=0,n=e.length-1;a>=0&&a<=n;){if(d=e[o=a+n>>1],!(s=e[o-1]||null))return{lo:null,hi:d};if(d[t]<r)a=o+1;else{if(!(s[t]>r))return{lo:s,hi:d};n=o-1}}return{lo:d,hi:null}}(e,t,r),o=n.lo?n.hi?n.lo:e[e.length-2]:e[0],s=n.lo?n.hi?n.hi:e[e.length-1]:e[1],d=s[t]-o[t];return o[a]+(s[a]-o[a])*(d?(r-o[t])/d:0)}function fa(e,t){var r=e._adapter,a=e.options.time,n=a.parser,o=n||a.format,s=t;return"function"==typeof n&&(s=n(s)),m.isFinite(s)||(s="string"==typeof o?r.parse(s,o):r.parse(s)),null!==s?+s:(!n&&"function"==typeof o&&(s=o(t),m.isFinite(s)||(s=r.parse(s))),s)}function it(e,t){if(m.isNullOrUndef(t))return null;var r=e.options.time,a=fa(e,e.getRightValue(t));return null===a||r.round&&(a=+e._adapter.startOf(a,r.round)),a}function En(e,t,r,a){var o,s,n=de.length;for(o=de.indexOf(e);o<n-1;++o)if((s=fr[de[o]]).common&&Math.ceil((r-t)/((s.steps?s.steps:da)*s.size))<=a)return de[o];return de[n-1]}function zn(e,t,r){var s,d,a=[],n={},o=t.length;for(s=0;s<o;++s)n[d=t[s]]=s,a.push({value:d,major:!1});return 0!==o&&r?function yl(e,t,r,a){var d,l,n=e._adapter,o=+n.startOf(t[0].value,a),s=t[t.length-1].value;for(d=o;d<=s;d=+n.add(d,1,a))(l=r[d])>=0&&(t[l].major=!0);return t}(e,a,n,r):a}var Bn=le.extend({initialize:function(){this.mergeTicksOptions(),le.prototype.initialize.call(this)},update:function(){var e=this,t=e.options,r=t.time||(t.time={}),a=e._adapter=new ea._date(t.adapters.date);return ua("time scale",r.format,"time.format","time.parser"),ua("time scale",r.min,"time.min","ticks.min"),ua("time scale",r.max,"time.max","ticks.max"),m.mergeIf(r.displayFormats,a.formats()),le.prototype.update.apply(e,arguments)},getRightValue:function(e){return e&&void 0!==e.t&&(e=e.t),le.prototype.getRightValue.call(this,e)},determineDataLimits:function(){var c,v,p,y,_,w,x,e=this,t=e.chart,r=e._adapter,a=e.options,n=a.time.unit||"day",o=da,s=Rn,d=[],l=[],f=[],M=e._getLabels();for(c=0,p=M.length;c<p;++c)f.push(it(e,M[c]));for(c=0,p=(t.data.datasets||[]).length;c<p;++c)if(t.isDatasetVisible(c))if(m.isObject((_=t.data.datasets[c].data)[0]))for(l[c]=[],v=0,y=_.length;v<y;++v)w=it(e,_[v]),d.push(w),l[c][v]=w;else l[c]=f.slice(0),x||(d=d.concat(f),x=!0);else l[c]=[];f.length&&(o=Math.min(o,f[0]),s=Math.max(s,f[f.length-1])),d.length&&(d=p>1?function hl(e){var a,n,o,t={},r=[];for(a=0,n=e.length;a<n;++a)t[o=e[a]]||(t[o]=!0,r.push(o));return r}(d).sort(Wn):d.sort(Wn),o=Math.min(o,d[0]),s=Math.max(s,d[d.length-1])),o=it(e,Nn(a))||o,s=it(e,Yn(a))||s,o=o===da?+r.startOf(Date.now(),n):o,s=s===Rn?+r.endOf(Date.now(),n)+1:s,e.min=Math.min(o,s),e.max=Math.max(o+1,s),e._table=[],e._timestamps={data:d,datasets:l,labels:f}},buildTicks:function(){var v,p,y,e=this,t=e.min,r=e.max,a=e.options,n=a.ticks,o=a.time,s=e._timestamps,d=[],l=e.getLabelCapacity(t),f=n.source,c=a.distribution;for(s="data"===f||"auto"===f&&"series"===c?s.data:"labels"===f?s.labels:function pl(e,t,r,a){var p,n=e._adapter,o=e.options,s=o.time,d=s.unit||En(s.minUnit,t,r,a),l=Ln([s.stepSize,s.unitStepSize,1]),f="week"===d&&s.isoWeekday,c=t,v=[];if(f&&(c=+n.startOf(c,"isoWeek",f)),c=+n.startOf(c,f?"day":d),n.diff(r,t,d)>1e5*l)throw t+" and "+r+" are too far apart with stepSize of "+l+" "+d;for(p=c;p<r;p=+n.add(p,l,d))v.push(p);return(p===r||"ticks"===o.bounds)&&v.push(p),v}(e,t,r,l),"ticks"===a.bounds&&s.length&&(t=s[0],r=s[s.length-1]),t=it(e,Nn(a))||t,r=it(e,Yn(a))||r,v=0,p=s.length;v<p;++v)(y=s[v])>=t&&y<=r&&d.push(y);return e.min=t,e.max=r,e._unit=o.unit||(n.autoSkip?En(o.minUnit,e.min,e.max,l):function gl(e,t,r,a,n){var o,s;for(o=de.length-1;o>=de.indexOf(r);o--)if(fr[s=de[o]].common&&e._adapter.diff(n,a,s)>=t-1)return s;return de[r?de.indexOf(r):0]}(e,d.length,o.minUnit,e.min,e.max)),e._majorUnit=n.major.enabled&&"year"!==e._unit?function ml(e){for(var t=de.indexOf(e)+1,r=de.length;t<r;++t)if(fr[de[t]].common)return de[t]}(e._unit):void 0,e._table=function cl(e,t,r,a){if("linear"===a||!e.length)return[{time:t,pos:0},{time:r,pos:1}];var s,d,l,f,c,n=[],o=[t];for(s=0,d=e.length;s<d;++s)(f=e[s])>t&&f<r&&o.push(f);for(o.push(r),s=0,d=o.length;s<d;++s)c=o[s+1],f=o[s],(void 0===(l=o[s-1])||void 0===c||Math.round((c+l)/2)!==f)&&n.push({time:f,pos:s/(d-1)});return n}(e._timestamps.data,t,r,c),e._offsets=function bl(e,t,r,a,n){var d,l,o=0,s=0;return n.offset&&t.length&&(d=pt(e,"time",t[0],"pos"),o=1===t.length?1-d:(pt(e,"time",t[1],"pos")-d)/2,l=pt(e,"time",t[t.length-1],"pos"),s=1===t.length?l:(l-pt(e,"time",t[t.length-2],"pos"))/2),{start:o,end:s,factor:1/(o+1+s)}}(e._table,d,0,0,a),n.reverse&&d.reverse(),zn(e,d,e._majorUnit)},getLabelForIndex:function(e,t){var r=this,a=r._adapter,n=r.chart.data,o=r.options.time,s=n.labels&&e<n.labels.length?n.labels[e]:"",d=n.datasets[t].data[e];return m.isObject(d)&&(s=r.getRightValue(d)),o.tooltipFormat?a.format(fa(r,s),o.tooltipFormat):"string"==typeof s?s:a.format(fa(r,s),o.displayFormats.datetime)},tickFormatFunction:function(e,t,r,a){var n=this,s=n.options,d=s.time.displayFormats,f=n._majorUnit,c=d[f],v=r[t],p=s.ticks,y=f&&c&&v&&v.major,_=n._adapter.format(e,a||(y?c:d[n._unit])),w=y?p.major:p.minor,x=Ln([w.callback,w.userCallback,p.callback,p.userCallback]);return x?x(_,t,r):_},convertTicksToLabels:function(e){var r,a,t=[];for(r=0,a=e.length;r<a;++r)t.push(this.tickFormatFunction(e[r].value,r,e));return t},getPixelForOffset:function(e){var t=this,r=t._offsets,a=pt(t._table,"time",e,"pos");return t.getPixelForDecimal((r.start+a)*r.factor)},getPixelForValue:function(e,t,r){var a=this,n=null;if(void 0!==t&&void 0!==r&&(n=a._timestamps.datasets[r][t]),null===n&&(n=it(a,e)),null!==n)return a.getPixelForOffset(n)},getPixelForTick:function(e){var t=this.getTicks();return e>=0&&e<t.length?this.getPixelForOffset(t[e].value):null},getValueForPixel:function(e){var t=this,r=t._offsets,a=t.getDecimalForPixel(e)/r.factor-r.end,n=pt(t._table,"pos",a,"time");return t._adapter._create(n)},_getLabelSize:function(e){var t=this,r=t.options.ticks,a=t.ctx.measureText(e).width,n=m.toRadians(t.isHorizontal()?r.maxRotation:r.minRotation),o=Math.cos(n),s=Math.sin(n),d=fl(r.fontSize,F.global.defaultFontSize);return{w:a*o+d*s,h:a*s+d*o}},getLabelWidth:function(e){return this._getLabelSize(e).w},getLabelCapacity:function(e){var t=this,r=t.options.time,a=r.displayFormats,n=a[r.unit]||a.millisecond,o=t.tickFormatFunction(e,0,zn(t,[e],t._majorUnit),n),s=t._getLabelSize(o),d=Math.floor(t.isHorizontal()?t.width/s.w:t.height/s.h);return t.options.offset&&d--,d>0?d:1}});Bn._defaults={position:"bottom",distribution:"linear",bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}};var wl={category:Cn,linear:Pn,logarithmic:On,radialLinear:In,time:Bn},xe=za(function(e,t){e.exports=function(){var r,M;function a(){return r.apply(null,arguments)}function o(i){return i instanceof Array||"[object Array]"===Object.prototype.toString.call(i)}function s(i){return null!=i&&"[object Object]"===Object.prototype.toString.call(i)}function l(i){return void 0===i}function f(i){return"number"==typeof i||"[object Number]"===Object.prototype.toString.call(i)}function c(i){return i instanceof Date||"[object Date]"===Object.prototype.toString.call(i)}function v(i,u){var g,h=[];for(g=0;g<i.length;++g)h.push(u(i[g],g));return h}function p(i,u){return Object.prototype.hasOwnProperty.call(i,u)}function y(i,u){for(var h in u)p(u,h)&&(i[h]=u[h]);return p(u,"toString")&&(i.toString=u.toString),p(u,"valueOf")&&(i.valueOf=u.valueOf),i}function _(i,u,h,g){return yi(i,u,h,g,!0).utc()}function x(i){return null==i._pf&&(i._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),i._pf}function T(i){if(null==i._isValid){var u=x(i),h=M.call(u.parsedDateParts,function(b){return null!=b}),g=!isNaN(i._d.getTime())&&u.overflow<0&&!u.empty&&!u.invalidMonth&&!u.invalidWeekday&&!u.weekdayMismatch&&!u.nullInput&&!u.invalidFormat&&!u.userInvalidated&&(!u.meridiem||u.meridiem&&h);if(i._strict&&(g=g&&0===u.charsLeftOver&&0===u.unusedTokens.length&&void 0===u.bigHour),null!=Object.isFrozen&&Object.isFrozen(i))return g;i._isValid=g}return i._isValid}function C(i){var u=_(NaN);return null!=i?y(x(u),i):x(u).userInvalidated=!0,u}M=Array.prototype.some?Array.prototype.some:function(i){for(var u=Object(this),h=u.length>>>0,g=0;g<h;g++)if(g in u&&i.call(this,u[g],g,u))return!0;return!1};var I=a.momentProperties=[];function A(i,u){var h,g,b;if(l(u._isAMomentObject)||(i._isAMomentObject=u._isAMomentObject),l(u._i)||(i._i=u._i),l(u._f)||(i._f=u._f),l(u._l)||(i._l=u._l),l(u._strict)||(i._strict=u._strict),l(u._tzm)||(i._tzm=u._tzm),l(u._isUTC)||(i._isUTC=u._isUTC),l(u._offset)||(i._offset=u._offset),l(u._pf)||(i._pf=x(u)),l(u._locale)||(i._locale=u._locale),I.length>0)for(h=0;h<I.length;h++)l(b=u[g=I[h]])||(i[g]=b);return i}var z=!1;function N(i){A(this,i),this._d=new Date(null!=i._d?i._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===z&&(z=!0,a.updateOffset(this),z=!1)}function Y(i){return i instanceof N||null!=i&&null!=i._isAMomentObject}function E(i){return i<0?Math.ceil(i)||0:Math.floor(i)}function O(i){var u=+i,h=0;return 0!==u&&isFinite(u)&&(h=E(u)),h}function J(i,u,h){var S,g=Math.min(i.length,u.length),b=Math.abs(i.length-u.length),k=0;for(S=0;S<g;S++)(h&&i[S]!==u[S]||!h&&O(i[S])!==O(u[S]))&&k++;return k+b}function X(i){!1===a.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+i)}function U(i,u){var h=!0;return y(function(){if(null!=a.deprecationHandler&&a.deprecationHandler(null,i),h){for(var b,g=[],k=0;k<arguments.length;k++){if(b="","object"==typeof arguments[k]){for(var S in b+="\n["+k+"] ",arguments[0])b+=S+": "+arguments[0][S]+", ";b=b.slice(0,-2)}else b=arguments[k];g.push(b)}X(i+"\nArguments: "+Array.prototype.slice.call(g).join("")+"\n"+(new Error).stack),h=!1}return u.apply(this,arguments)},u)}var ga,We={};function Ne(i,u){null!=a.deprecationHandler&&a.deprecationHandler(i,u),We[i]||(X(u),We[i]=!0)}function fe(i){return i instanceof Function||"[object Function]"===Object.prototype.toString.call(i)}function Zn(i,u){var g,h=y({},i);for(g in u)p(u,g)&&(s(i[g])&&s(u[g])?(h[g]={},y(h[g],i[g]),y(h[g],u[g])):null!=u[g]?h[g]=u[g]:delete h[g]);for(g in i)p(i,g)&&!p(u,g)&&s(i[g])&&(h[g]=y({},h[g]));return h}function va(i){null!=i&&this.set(i)}a.suppressDeprecationWarnings=!1,a.deprecationHandler=null,ga=Object.keys?Object.keys:function(i){var u,h=[];for(u in i)p(i,u)&&h.push(u);return h};var Et={};function ae(i,u){var h=i.toLowerCase();Et[h]=Et[h+"s"]=Et[u]=i}function be(i){return"string"==typeof i?Et[i]||Et[i.toLowerCase()]:void 0}function ma(i){var h,g,u={};for(g in i)p(i,g)&&(h=be(g))&&(u[h]=i[g]);return u}var Xn={};function ne(i,u){Xn[i]=u}function Ye(i,u,h){var g=""+Math.abs(i);return(i>=0?h?"+":"":"-")+Math.pow(10,Math.max(0,u-g.length)).toString().substr(1)+g}var Kn=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,hr=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,pa={},bt={};function L(i,u,h,g){var b=g;"string"==typeof g&&(b=function(){return this[g]()}),i&&(bt[i]=b),u&&(bt[u[0]]=function(){return Ye(b.apply(this,arguments),u[1],u[2])}),h&&(bt[h]=function(){return this.localeData().ordinal(b.apply(this,arguments),i)})}function Ql(i){return i.match(/\[[\s\S]/)?i.replace(/^\[|\]$/g,""):i.replace(/\\/g,"")}function cr(i,u){return i.isValid()?(u=Jn(u,i.localeData()),pa[u]=pa[u]||function eu(i){var h,g,u=i.match(Kn);for(h=0,g=u.length;h<g;h++)u[h]=bt[u[h]]?bt[u[h]]:Ql(u[h]);return function(b){var S,k="";for(S=0;S<g;S++)k+=fe(u[S])?u[S].call(b,i):u[S];return k}}(u),pa[u](i)):i.localeData().invalidDate()}function Jn(i,u){var h=5;function g(b){return u.longDateFormat(b)||b}for(hr.lastIndex=0;h>=0&&hr.test(i);)i=i.replace(hr,g),hr.lastIndex=0,h-=1;return i}var Qn=/\d/,ce=/\d\d/,ei=/\d{3}/,ba=/\d{4}/,vr=/[+-]?\d{6}/,$=/\d\d?/,ti=/\d\d\d\d?/,ri=/\d\d\d\d\d\d?/,gr=/\d{1,3}/,ya=/\d{1,4}/,mr=/[+-]?\d{1,6}/,tu=/\d+/,pr=/[+-]?\d+/,ru=/Z|[+-]\d\d:?\d\d/gi,br=/Z|[+-]\d\d(?::?\d\d)?/gi,zt=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,_a={};function P(i,u,h){_a[i]=fe(u)?u:function(g,b){return g&&h?h:u}}function nu(i,u){return p(_a,i)?_a[i](u._strict,u._locale):new RegExp(function iu(i){return ot(i.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(u,h,g,b,k){return h||g||b||k}))}(i))}function ot(i){return i.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var xa={};function q(i,u){var h,g=u;for("string"==typeof i&&(i=[i]),f(u)&&(g=function(b,k){k[u]=O(b)}),h=0;h<i.length;h++)xa[i[h]]=g}function Bt(i,u){q(i,function(h,g,b,k){b._w=b._w||{},u(h,b._w,b,k)})}function ou(i,u,h){null!=u&&p(xa,i)&&xa[i](u,h._a,h,i)}function Ht(i){return yr(i)?366:365}function yr(i){return i%4==0&&i%100!=0||i%400==0}L("Y",0,0,function(){var i=this.year();return i<=9999?""+i:"+"+i}),L(0,["YY",2],0,function(){return this.year()%100}),L(0,["YYYY",4],0,"year"),L(0,["YYYYY",5],0,"year"),L(0,["YYYYYY",6,!0],0,"year"),ae("year","y"),ne("year",1),P("Y",pr),P("YY",$,ce),P("YYYY",ya,ba),P("YYYYY",mr,vr),P("YYYYYY",mr,vr),q(["YYYYY","YYYYYY"],0),q("YYYY",function(i,u){u[0]=2===i.length?a.parseTwoDigitYear(i):O(i)}),q("YY",function(i,u){u[0]=a.parseTwoDigitYear(i)}),q("Y",function(i,u){u[0]=parseInt(i,10)}),a.parseTwoDigitYear=function(i){return O(i)+(O(i)>68?1900:2e3)};var Q,ai=yt("FullYear",!0);function yt(i,u){return function(h){return null!=h?(ni(this,i,h),a.updateOffset(this,u),this):_r(this,i)}}function _r(i,u){return i.isValid()?i._d["get"+(i._isUTC?"UTC":"")+u]():NaN}function ni(i,u,h){i.isValid()&&!isNaN(h)&&("FullYear"===u&&yr(i.year())&&1===i.month()&&29===i.date()?i._d["set"+(i._isUTC?"UTC":"")+u](h,i.month(),xr(h,i.month())):i._d["set"+(i._isUTC?"UTC":"")+u](h))}function xr(i,u){if(isNaN(i)||isNaN(u))return NaN;var h=function hu(i,u){return(i%u+u)%u}(u,12);return i+=(u-h)/12,1===h?yr(i)?29:28:31-h%7%2}Q=Array.prototype.indexOf?Array.prototype.indexOf:function(i){var u;for(u=0;u<this.length;++u)if(this[u]===i)return u;return-1},L("M",["MM",2],"Mo",function(){return this.month()+1}),L("MMM",0,0,function(i){return this.localeData().monthsShort(this,i)}),L("MMMM",0,0,function(i){return this.localeData().months(this,i)}),ae("month","M"),ne("month",8),P("M",$),P("MM",$,ce),P("MMM",function(i,u){return u.monthsShortRegex(i)}),P("MMMM",function(i,u){return u.monthsRegex(i)}),q(["M","MM"],function(i,u){u[1]=O(i)-1}),q(["MMM","MMMM"],function(i,u,h,g){var b=h._locale.monthsParse(i,g,h._strict);null!=b?u[1]=b:x(h).invalidMonth=i});var ii=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,cu="January_February_March_April_May_June_July_August_September_October_November_December".split("_");var oi="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function mu(i,u,h){var g,b,k,S=i.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],g=0;g<12;++g)k=_([2e3,g]),this._shortMonthsParse[g]=this.monthsShort(k,"").toLocaleLowerCase(),this._longMonthsParse[g]=this.months(k,"").toLocaleLowerCase();return h?"MMM"===u?-1!==(b=Q.call(this._shortMonthsParse,S))?b:null:-1!==(b=Q.call(this._longMonthsParse,S))?b:null:"MMM"===u?-1!==(b=Q.call(this._shortMonthsParse,S))||-1!==(b=Q.call(this._longMonthsParse,S))?b:null:-1!==(b=Q.call(this._longMonthsParse,S))||-1!==(b=Q.call(this._shortMonthsParse,S))?b:null}function si(i,u){var h;if(!i.isValid())return i;if("string"==typeof u)if(/^\d+$/.test(u))u=O(u);else if(!f(u=i.localeData().monthsParse(u)))return i;return h=Math.min(i.date(),xr(i.year(),u)),i._d["set"+(i._isUTC?"UTC":"")+"Month"](u,h),i}function li(i){return null!=i?(si(this,i),a.updateOffset(this,!0),this):_r(this,"Month")}var yu=zt;var xu=zt;function ui(){function i(S,R){return R.length-S.length}var b,k,u=[],h=[],g=[];for(b=0;b<12;b++)k=_([2e3,b]),u.push(this.monthsShort(k,"")),h.push(this.months(k,"")),g.push(this.months(k,"")),g.push(this.monthsShort(k,""));for(u.sort(i),h.sort(i),g.sort(i),b=0;b<12;b++)u[b]=ot(u[b]),h[b]=ot(h[b]);for(b=0;b<24;b++)g[b]=ot(g[b]);this._monthsRegex=new RegExp("^("+g.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+u.join("|")+")","i")}function ku(i,u,h,g,b,k,S){var R;return i<100&&i>=0?(R=new Date(i+400,u,h,g,b,k,S),isFinite(R.getFullYear())&&R.setFullYear(i)):R=new Date(i,u,h,g,b,k,S),R}function Vt(i){var u;if(i<100&&i>=0){var h=Array.prototype.slice.call(arguments);h[0]=i+400,u=new Date(Date.UTC.apply(null,h)),isFinite(u.getUTCFullYear())&&u.setUTCFullYear(i)}else u=new Date(Date.UTC.apply(null,arguments));return u}function wr(i,u,h){var g=7+u-h;return-(7+Vt(i,0,g).getUTCDay()-u)%7+g-1}function di(i,u,h,g,b){var V,ee,R=1+7*(u-1)+(7+h-g)%7+wr(i,g,b);return R<=0?ee=Ht(V=i-1)+R:R>Ht(i)?(V=i+1,ee=R-Ht(i)):(V=i,ee=R),{year:V,dayOfYear:ee}}function Ut(i,u,h){var k,S,g=wr(i.year(),u,h),b=Math.floor((i.dayOfYear()-g-1)/7)+1;return b<1?k=b+lt(S=i.year()-1,u,h):b>lt(i.year(),u,h)?(k=b-lt(i.year(),u,h),S=i.year()+1):(S=i.year(),k=b),{week:k,year:S}}function lt(i,u,h){var g=wr(i,u,h),b=wr(i+1,u,h);return(Ht(i)-g+b)/7}L("w",["ww",2],"wo","week"),L("W",["WW",2],"Wo","isoWeek"),ae("week","w"),ae("isoWeek","W"),ne("week",5),ne("isoWeek",5),P("w",$),P("ww",$,ce),P("W",$),P("WW",$,ce),Bt(["w","ww","W","WW"],function(i,u,h,g){u[g.substr(0,1)]=O(i)});function wa(i,u){return i.slice(u,7).concat(i.slice(0,u))}L("d",0,"do","day"),L("dd",0,0,function(i){return this.localeData().weekdaysMin(this,i)}),L("ddd",0,0,function(i){return this.localeData().weekdaysShort(this,i)}),L("dddd",0,0,function(i){return this.localeData().weekdays(this,i)}),L("e",0,0,"weekday"),L("E",0,0,"isoWeekday"),ae("day","d"),ae("weekday","e"),ae("isoWeekday","E"),ne("day",11),ne("weekday",11),ne("isoWeekday",11),P("d",$),P("e",$),P("E",$),P("dd",function(i,u){return u.weekdaysMinRegex(i)}),P("ddd",function(i,u){return u.weekdaysShortRegex(i)}),P("dddd",function(i,u){return u.weekdaysRegex(i)}),Bt(["dd","ddd","dddd"],function(i,u,h,g){var b=h._locale.weekdaysParse(i,g,h._strict);null!=b?u.d=b:x(h).invalidWeekday=i}),Bt(["d","e","E"],function(i,u,h,g){u[g]=O(i)});var Au="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_");var fi="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_");var Ru="Su_Mo_Tu_We_Th_Fr_Sa".split("_");function Nu(i,u,h){var g,b,k,S=i.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],g=0;g<7;++g)k=_([2e3,1]).day(g),this._minWeekdaysParse[g]=this.weekdaysMin(k,"").toLocaleLowerCase(),this._shortWeekdaysParse[g]=this.weekdaysShort(k,"").toLocaleLowerCase(),this._weekdaysParse[g]=this.weekdays(k,"").toLocaleLowerCase();return h?"dddd"===u?-1!==(b=Q.call(this._weekdaysParse,S))?b:null:"ddd"===u?-1!==(b=Q.call(this._shortWeekdaysParse,S))?b:null:-1!==(b=Q.call(this._minWeekdaysParse,S))?b:null:"dddd"===u?-1!==(b=Q.call(this._weekdaysParse,S))||-1!==(b=Q.call(this._shortWeekdaysParse,S))||-1!==(b=Q.call(this._minWeekdaysParse,S))?b:null:"ddd"===u?-1!==(b=Q.call(this._shortWeekdaysParse,S))||-1!==(b=Q.call(this._weekdaysParse,S))||-1!==(b=Q.call(this._minWeekdaysParse,S))?b:null:-1!==(b=Q.call(this._minWeekdaysParse,S))||-1!==(b=Q.call(this._weekdaysParse,S))||-1!==(b=Q.call(this._shortWeekdaysParse,S))?b:null}var Hu=zt;var Uu=zt;var Gu=zt;function ka(){function i(ye,qt){return qt.length-ye.length}var k,S,R,V,ee,u=[],h=[],g=[],b=[];for(k=0;k<7;k++)S=_([2e3,1]).day(k),R=this.weekdaysMin(S,""),V=this.weekdaysShort(S,""),ee=this.weekdays(S,""),u.push(R),h.push(V),g.push(ee),b.push(R),b.push(V),b.push(ee);for(u.sort(i),h.sort(i),g.sort(i),b.sort(i),k=0;k<7;k++)h[k]=ot(h[k]),g[k]=ot(g[k]),b[k]=ot(b[k]);this._weekdaysRegex=new RegExp("^("+b.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+g.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+h.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+u.join("|")+")","i")}function Ma(){return this.hours()%12||12}function hi(i,u){L(i,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),u)})}function ci(i,u){return u._meridiemParse}L("H",["HH",2],0,"hour"),L("h",["hh",2],0,Ma),L("k",["kk",2],0,function qu(){return this.hours()||24}),L("hmm",0,0,function(){return""+Ma.apply(this)+Ye(this.minutes(),2)}),L("hmmss",0,0,function(){return""+Ma.apply(this)+Ye(this.minutes(),2)+Ye(this.seconds(),2)}),L("Hmm",0,0,function(){return""+this.hours()+Ye(this.minutes(),2)}),L("Hmmss",0,0,function(){return""+this.hours()+Ye(this.minutes(),2)+Ye(this.seconds(),2)}),hi("a",!0),hi("A",!1),ae("hour","h"),ne("hour",13),P("a",ci),P("A",ci),P("H",$),P("h",$),P("k",$),P("HH",$,ce),P("hh",$,ce),P("kk",$,ce),P("hmm",ti),P("hmmss",ri),P("Hmm",ti),P("Hmmss",ri),q(["H","HH"],3),q(["k","kk"],function(i,u,h){var g=O(i);u[3]=24===g?0:g}),q(["a","A"],function(i,u,h){h._isPm=h._locale.isPM(i),h._meridiem=i}),q(["h","hh"],function(i,u,h){u[3]=O(i),x(h).bigHour=!0}),q("hmm",function(i,u,h){var g=i.length-2;u[3]=O(i.substr(0,g)),u[4]=O(i.substr(g)),x(h).bigHour=!0}),q("hmmss",function(i,u,h){var g=i.length-4,b=i.length-2;u[3]=O(i.substr(0,g)),u[4]=O(i.substr(g,2)),u[5]=O(i.substr(b)),x(h).bigHour=!0}),q("Hmm",function(i,u,h){var g=i.length-2;u[3]=O(i.substr(0,g)),u[4]=O(i.substr(g))}),q("Hmmss",function(i,u,h){var g=i.length-4,b=i.length-2;u[3]=O(i.substr(0,g)),u[4]=O(i.substr(g,2)),u[5]=O(i.substr(b))});var Gt,Ju=yt("Hours",!0),vi={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:cu,monthsShort:oi,week:{dow:0,doy:6},weekdays:Au,weekdaysMin:Ru,weekdaysShort:fi,meridiemParse:/[ap]\.?m?\.?/i},re={},jt={};function gi(i){return i&&i.toLowerCase().replace("_","-")}function kr(i){var u=null;if(!re[i]&&e&&e.exports)try{u=Gt._abbr,function Dt(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}(),_t(u)}catch(g){}return re[i]}function _t(i,u){var h;return i&&((h=l(u)?$e(i):Sa(i,u))?Gt=h:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+i+" not found. Did you forget to load it?")),Gt._abbr}function Sa(i,u){if(null!==u){var h,g=vi;if(u.abbr=i,null!=re[i])Ne("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),g=re[i]._config;else if(null!=u.parentLocale)if(null!=re[u.parentLocale])g=re[u.parentLocale]._config;else{if(null==(h=kr(u.parentLocale)))return jt[u.parentLocale]||(jt[u.parentLocale]=[]),jt[u.parentLocale].push({name:i,config:u}),null;g=h._config}return re[i]=new va(Zn(g,u)),jt[i]&&jt[i].forEach(function(b){Sa(b.name,b.config)}),_t(i),re[i]}return delete re[i],null}function $e(i){var u;if(i&&i._locale&&i._locale._abbr&&(i=i._locale._abbr),!i)return Gt;if(!o(i)){if(u=kr(i))return u;i=[i]}return function Qu(i){for(var h,g,b,k,u=0;u<i.length;){for(h=(k=gi(i[u]).split("-")).length,g=(g=gi(i[u+1]))?g.split("-"):null;h>0;){if(b=kr(k.slice(0,h).join("-")))return b;if(g&&g.length>=h&&J(k,g,!0)>=h-1)break;h--}u++}return Gt}(i)}function Da(i){var u,h=i._a;return h&&-2===x(i).overflow&&(u=h[1]<0||h[1]>11?1:h[2]<1||h[2]>xr(h[0],h[1])?2:h[3]<0||h[3]>24||24===h[3]&&(0!==h[4]||0!==h[5]||0!==h[6])?3:h[4]<0||h[4]>59?4:h[5]<0||h[5]>59?5:h[6]<0||h[6]>999?6:-1,x(i)._overflowDayOfYear&&(u<0||u>2)&&(u=2),x(i)._overflowWeeks&&-1===u&&(u=7),x(i)._overflowWeekday&&-1===u&&(u=8),x(i).overflow=u),i}function xt(i,u,h){return null!=i?i:null!=u?u:h}function Ta(i){var u,h,b,k,S,g=[];if(!i._d){for(b=function rd(i){var u=new Date(a.now());return i._useUTC?[u.getUTCFullYear(),u.getUTCMonth(),u.getUTCDate()]:[u.getFullYear(),u.getMonth(),u.getDate()]}(i),i._w&&null==i._a[2]&&null==i._a[1]&&function ad(i){var u,h,g,b,k,S,R,V;if(null!=(u=i._w).GG||null!=u.W||null!=u.E)k=1,S=4,h=xt(u.GG,i._a[0],Ut(Z(),1,4).year),g=xt(u.W,1),((b=xt(u.E,1))<1||b>7)&&(V=!0);else{k=i._locale._week.dow,S=i._locale._week.doy;var ee=Ut(Z(),k,S);h=xt(u.gg,i._a[0],ee.year),g=xt(u.w,ee.week),null!=u.d?((b=u.d)<0||b>6)&&(V=!0):null!=u.e?(b=u.e+k,(u.e<0||u.e>6)&&(V=!0)):b=k}g<1||g>lt(h,k,S)?x(i)._overflowWeeks=!0:null!=V?x(i)._overflowWeekday=!0:(R=di(h,g,b,k,S),i._a[0]=R.year,i._dayOfYear=R.dayOfYear)}(i),null!=i._dayOfYear&&(S=xt(i._a[0],b[0]),(i._dayOfYear>Ht(S)||0===i._dayOfYear)&&(x(i)._overflowDayOfYear=!0),h=Vt(S,0,i._dayOfYear),i._a[1]=h.getUTCMonth(),i._a[2]=h.getUTCDate()),u=0;u<3&&null==i._a[u];++u)i._a[u]=g[u]=b[u];for(;u<7;u++)i._a[u]=g[u]=null==i._a[u]?2===u?1:0:i._a[u];24===i._a[3]&&0===i._a[4]&&0===i._a[5]&&0===i._a[6]&&(i._nextDay=!0,i._a[3]=0),i._d=(i._useUTC?Vt:ku).apply(null,g),k=i._useUTC?i._d.getUTCDay():i._d.getDay(),null!=i._tzm&&i._d.setUTCMinutes(i._d.getUTCMinutes()-i._tzm),i._nextDay&&(i._a[3]=24),i._w&&void 0!==i._w.d&&i._w.d!==k&&(x(i).weekdayMismatch=!0)}}var nd=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,id=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,od=/Z|[+-]\d\d(?::?\d\d)?/,Mr=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Ca=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],sd=/^\/?Date\((\-?\d+)/i;function mi(i){var u,h,k,S,R,V,g=i._i,b=nd.exec(g)||id.exec(g);if(b){for(x(i).iso=!0,u=0,h=Mr.length;u<h;u++)if(Mr[u][1].exec(b[1])){S=Mr[u][0],k=!1!==Mr[u][2];break}if(null==S)return void(i._isValid=!1);if(b[3]){for(u=0,h=Ca.length;u<h;u++)if(Ca[u][1].exec(b[3])){R=(b[2]||" ")+Ca[u][0];break}if(null==R)return void(i._isValid=!1)}if(!k&&null!=R)return void(i._isValid=!1);if(b[4]){if(!od.exec(b[4]))return void(i._isValid=!1);V="Z"}i._f=S+(R||"")+(V||""),Pa(i)}else i._isValid=!1}var ld=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function dd(i){var u=parseInt(i,10);return u<=49?2e3+u:u<=999?1900+u:u}var cd={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function pi(i){var u=ld.exec(function fd(i){return i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}(i._i));if(u){var h=function ud(i,u,h,g,b,k){var S=[dd(i),oi.indexOf(u),parseInt(h,10),parseInt(g,10),parseInt(b,10)];return k&&S.push(parseInt(k,10)),S}(u[4],u[3],u[2],u[5],u[6],u[7]);if(!function hd(i,u,h){return!i||fi.indexOf(i)===new Date(u[0],u[1],u[2]).getDay()||(x(h).weekdayMismatch=!0,h._isValid=!1,!1)}(u[1],h,i))return;i._a=h,i._tzm=function vd(i,u,h){if(i)return cd[i];if(u)return 0;var g=parseInt(h,10),b=g%100;return(g-b)/100*60+b}(u[8],u[9],u[10]),i._d=Vt.apply(null,i._a),i._d.setUTCMinutes(i._d.getUTCMinutes()-i._tzm),x(i).rfc2822=!0}else i._isValid=!1}function Pa(i){if(i._f!==a.ISO_8601)if(i._f!==a.RFC_2822){i._a=[],x(i).empty=!0;var h,g,b,k,S,u=""+i._i,R=u.length,V=0;for(b=Jn(i._f,i._locale).match(Kn)||[],h=0;h<b.length;h++)(g=(u.match(nu(k=b[h],i))||[])[0])&&((S=u.substr(0,u.indexOf(g))).length>0&&x(i).unusedInput.push(S),u=u.slice(u.indexOf(g)+g.length),V+=g.length),bt[k]?(g?x(i).empty=!1:x(i).unusedTokens.push(k),ou(k,g,i)):i._strict&&!g&&x(i).unusedTokens.push(k);x(i).charsLeftOver=R-V,u.length>0&&x(i).unusedInput.push(u),i._a[3]<=12&&!0===x(i).bigHour&&i._a[3]>0&&(x(i).bigHour=void 0),x(i).parsedDateParts=i._a.slice(0),x(i).meridiem=i._meridiem,i._a[3]=function md(i,u,h){var g;return null==h?u:null!=i.meridiemHour?i.meridiemHour(u,h):(null!=i.isPM&&((g=i.isPM(h))&&u<12&&(u+=12),!g&&12===u&&(u=0)),u)}(i._locale,i._a[3],i._meridiem),Ta(i),Da(i)}else pi(i);else mi(i)}function bi(i){var u=i._i,h=i._f;return i._locale=i._locale||$e(i._l),null===u||void 0===h&&""===u?C({nullInput:!0}):("string"==typeof u&&(i._i=u=i._locale.preparse(u)),Y(u)?new N(Da(u)):(c(u)?i._d=u:o(h)?function pd(i){var u,h,g,b,k;if(0===i._f.length)return x(i).invalidFormat=!0,void(i._d=new Date(NaN));for(b=0;b<i._f.length;b++)k=0,u=A({},i),null!=i._useUTC&&(u._useUTC=i._useUTC),u._f=i._f[b],Pa(u),T(u)&&(k+=x(u).charsLeftOver,k+=10*x(u).unusedTokens.length,x(u).score=k,(null==g||k<g)&&(g=k,h=u));y(i,h||u)}(i):h?Pa(i):function _d(i){var u=i._i;l(u)?i._d=new Date(a.now()):c(u)?i._d=new Date(u.valueOf()):"string"==typeof u?function gd(i){var u=sd.exec(i._i);null===u?(mi(i),!1===i._isValid&&(delete i._isValid,pi(i),!1===i._isValid&&(delete i._isValid,a.createFromInputFallback(i)))):i._d=new Date(+u[1])}(i):o(u)?(i._a=v(u.slice(0),function(h){return parseInt(h,10)}),Ta(i)):s(u)?function bd(i){if(!i._d){var u=ma(i._i);i._a=v([u.year,u.month,u.day||u.date,u.hour,u.minute,u.second,u.millisecond],function(h){return h&&parseInt(h,10)}),Ta(i)}}(i):f(u)?i._d=new Date(u):a.createFromInputFallback(i)}(i),T(i)||(i._d=null),i))}function yi(i,u,h,g,b){var k={};return(!0===h||!1===h)&&(g=h,h=void 0),(s(i)&&function d(i){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(i).length;var u;for(u in i)if(i.hasOwnProperty(u))return!1;return!0}(i)||o(i)&&0===i.length)&&(i=void 0),k._isAMomentObject=!0,k._useUTC=k._isUTC=b,k._l=h,k._i=i,k._f=u,k._strict=g,function yd(i){var u=new N(Da(bi(i)));return u._nextDay&&(u.add(1,"d"),u._nextDay=void 0),u}(k)}function Z(i,u,h,g){return yi(i,u,h,g,!1)}a.createFromInputFallback=U("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(i){i._d=new Date(i._i+(i._useUTC?" UTC":""))}),a.ISO_8601=function(){},a.RFC_2822=function(){};var xd=U("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var i=Z.apply(null,arguments);return this.isValid()&&i.isValid()?i<this?this:i:C()}),wd=U("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var i=Z.apply(null,arguments);return this.isValid()&&i.isValid()?i>this?this:i:C()});function _i(i,u){var h,g;if(1===u.length&&o(u[0])&&(u=u[0]),!u.length)return Z();for(h=u[0],g=1;g<u.length;++g)(!u[g].isValid()||u[g][i](h))&&(h=u[g]);return h}var $t=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Sr(i){var u=ma(i),h=u.year||0,g=u.quarter||0,b=u.month||0,k=u.week||u.isoWeek||0,S=u.day||0,R=u.hour||0,V=u.minute||0,ee=u.second||0,ye=u.millisecond||0;this._isValid=function Dd(i){for(var u in i)if(-1===Q.call($t,u)||null!=i[u]&&isNaN(i[u]))return!1;for(var h=!1,g=0;g<$t.length;++g)if(i[$t[g]]){if(h)return!1;parseFloat(i[$t[g]])!==O(i[$t[g]])&&(h=!0)}return!0}(u),this._milliseconds=+ye+1e3*ee+6e4*V+1e3*R*60*60,this._days=+S+7*k,this._months=+b+3*g+12*h,this._data={},this._locale=$e(),this._bubble()}function Oa(i){return i instanceof Sr}function Fa(i){return i<0?-1*Math.round(-1*i):Math.round(i)}function xi(i,u){L(i,0,0,function(){var h=this.utcOffset(),g="+";return h<0&&(h=-h,g="-"),g+Ye(~~(h/60),2)+u+Ye(~~h%60,2)})}xi("Z",":"),xi("ZZ",""),P("Z",br),P("ZZ",br),q(["Z","ZZ"],function(i,u,h){h._useUTC=!0,h._tzm=Aa(br,i)});var Pd=/([\+\-]|\d\d)/gi;function Aa(i,u){var h=(u||"").match(i);if(null===h)return null;var b=((h[h.length-1]||[])+"").match(Pd)||["-",0,0],k=60*b[1]+O(b[2]);return 0===k?0:"+"===b[0]?k:-k}function Ia(i,u){var h,g;return u._isUTC?(h=u.clone(),g=(Y(i)||c(i)?i.valueOf():Z(i).valueOf())-h.valueOf(),h._d.setTime(h._d.valueOf()+g),a.updateOffset(h,!1),h):Z(i).local()}function La(i){return 15*-Math.round(i._d.getTimezoneOffset()/15)}function wi(){return!!this.isValid()&&this._isUTC&&0===this._offset}a.updateOffset=function(){};var zd=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Bd=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Me(i,u){var b,k,S,h=i,g=null;return Oa(i)?h={ms:i._milliseconds,d:i._days,M:i._months}:f(i)?(h={},u?h[u]=i:h.milliseconds=i):(g=zd.exec(i))?(b="-"===g[1]?-1:1,h={y:0,d:O(g[2])*b,h:O(g[3])*b,m:O(g[4])*b,s:O(g[5])*b,ms:O(Fa(1e3*g[6]))*b}):(g=Bd.exec(i))?h={y:ut(g[2],b="-"===g[1]?-1:1),M:ut(g[3],b),w:ut(g[4],b),d:ut(g[5],b),h:ut(g[6],b),m:ut(g[7],b),s:ut(g[8],b)}:null==h?h={}:"object"==typeof h&&("from"in h||"to"in h)&&(S=function Hd(i,u){var h;return i.isValid()&&u.isValid()?(u=Ia(u,i),i.isBefore(u)?h=ki(i,u):((h=ki(u,i)).milliseconds=-h.milliseconds,h.months=-h.months),h):{milliseconds:0,months:0}}(Z(h.from),Z(h.to)),(h={}).ms=S.milliseconds,h.M=S.months),k=new Sr(h),Oa(i)&&p(i,"_locale")&&(k._locale=i._locale),k}function ut(i,u){var h=i&&parseFloat(i.replace(",","."));return(isNaN(h)?0:h)*u}function ki(i,u){var h={};return h.months=u.month()-i.month()+12*(u.year()-i.year()),i.clone().add(h.months,"M").isAfter(u)&&--h.months,h.milliseconds=+u-+i.clone().add(h.months,"M"),h}function Mi(i,u){return function(h,g){var k;return null!==g&&!isNaN(+g)&&(Ne(u,"moment()."+u+"(period, number) is deprecated. Please use moment()."+u+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),k=h,h=g,g=k),Si(this,Me(h="string"==typeof h?+h:h,g),i),this}}function Si(i,u,h,g){var b=u._milliseconds,k=Fa(u._days),S=Fa(u._months);!i.isValid()||(g=null==g||g,S&&si(i,_r(i,"Month")+S*h),k&&ni(i,"Date",_r(i,"Date")+k*h),b&&i._d.setTime(i._d.valueOf()+b*h),g&&a.updateOffset(i,k||S))}Me.fn=Sr.prototype,Me.invalid=function Cd(){return Me(NaN)};var Vd=Mi(1,"add"),Ud=Mi(-1,"subtract");function Ra(i,u){var h=12*(u.year()-i.year())+(u.month()-i.month()),g=i.clone().add(h,"months");return-(h+(u-g<0?(u-g)/(g-i.clone().add(h-1,"months")):(u-g)/(i.clone().add(h+1,"months")-g)))||0}function Di(i){var u;return void 0===i?this._locale._abbr:(null!=(u=$e(i))&&(this._locale=u),this)}a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",a.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ti=U("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(i){return void 0===i?this.localeData():this.locale(i)});function Ci(){return this._locale}var wt=6e4,Tr=60*wt,Pi=3506328*Tr;function kt(i,u){return(i%u+u)%u}function Oi(i,u,h){return i<100&&i>=0?new Date(i+400,u,h)-Pi:new Date(i,u,h).valueOf()}function Fi(i,u,h){return i<100&&i>=0?Date.UTC(i+400,u,h)-Pi:Date.UTC(i,u,h)}function Cr(i,u){L(0,[i,i.length],0,u)}function Ai(i,u,h,g,b){var k;return null==i?Ut(this,g,b).year:(u>(k=lt(i,g,b))&&(u=k),Df.call(this,i,u,h,g,b))}function Df(i,u,h,g,b){var k=di(i,u,h,g,b),S=Vt(k.year,0,k.dayOfYear);return this.year(S.getUTCFullYear()),this.month(S.getUTCMonth()),this.date(S.getUTCDate()),this}L(0,["gg",2],0,function(){return this.weekYear()%100}),L(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Cr("gggg","weekYear"),Cr("ggggg","weekYear"),Cr("GGGG","isoWeekYear"),Cr("GGGGG","isoWeekYear"),ae("weekYear","gg"),ae("isoWeekYear","GG"),ne("weekYear",1),ne("isoWeekYear",1),P("G",pr),P("g",pr),P("GG",$,ce),P("gg",$,ce),P("GGGG",ya,ba),P("gggg",ya,ba),P("GGGGG",mr,vr),P("ggggg",mr,vr),Bt(["gggg","ggggg","GGGG","GGGGG"],function(i,u,h,g){u[g.substr(0,2)]=O(i)}),Bt(["gg","GG"],function(i,u,h,g){u[g]=a.parseTwoDigitYear(i)}),L("Q",0,"Qo","quarter"),ae("quarter","Q"),ne("quarter",7),P("Q",Qn),q("Q",function(i,u){u[1]=3*(O(i)-1)}),L("D",["DD",2],"Do","date"),ae("date","D"),ne("date",9),P("D",$),P("DD",$,ce),P("Do",function(i,u){return i?u._dayOfMonthOrdinalParse||u._ordinalParse:u._dayOfMonthOrdinalParseLenient}),q(["D","DD"],2),q("Do",function(i,u){u[2]=O(i.match($)[0])});var Ii=yt("Date",!0);L("DDD",["DDDD",3],"DDDo","dayOfYear"),ae("dayOfYear","DDD"),ne("dayOfYear",4),P("DDD",gr),P("DDDD",ei),q(["DDD","DDDD"],function(i,u,h){h._dayOfYear=O(i)}),L("m",["mm",2],0,"minute"),ae("minute","m"),ne("minute",14),P("m",$),P("mm",$,ce),q(["m","mm"],4);var Pf=yt("Minutes",!1);L("s",["ss",2],0,"second"),ae("second","s"),ne("second",15),P("s",$),P("ss",$,ce),q(["s","ss"],5);var qe,Of=yt("Seconds",!1);for(L("S",0,0,function(){return~~(this.millisecond()/100)}),L(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),L(0,["SSS",3],0,"millisecond"),L(0,["SSSS",4],0,function(){return 10*this.millisecond()}),L(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),L(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),L(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),L(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),L(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),ae("millisecond","ms"),ne("millisecond",16),P("S",gr,Qn),P("SS",gr,ce),P("SSS",gr,ei),qe="SSSS";qe.length<=9;qe+="S")P(qe,tu);function Ff(i,u){u[6]=O(1e3*("0."+i))}for(qe="S";qe.length<=9;qe+="S")q(qe,Ff);var Af=yt("Milliseconds",!1);L("z",0,0,"zoneAbbr"),L("zz",0,0,"zoneName");var D=N.prototype;function Li(i){return i}D.add=Vd,D.calendar=function Gd(i,u){var h=i||Z(),g=Ia(h,this).startOf("day"),b=a.calendarFormat(this,g)||"sameElse",k=u&&(fe(u[b])?u[b].call(this,h):u[b]);return this.format(k||this.localeData().calendar(b,this,Z(h)))},D.clone=function $d(){return new N(this)},D.diff=function ef(i,u,h){var g,b,k;if(!this.isValid())return NaN;if(!(g=Ia(i,this)).isValid())return NaN;switch(b=6e4*(g.utcOffset()-this.utcOffset()),u=be(u)){case"year":k=Ra(this,g)/12;break;case"month":k=Ra(this,g);break;case"quarter":k=Ra(this,g)/3;break;case"second":k=(this-g)/1e3;break;case"minute":k=(this-g)/6e4;break;case"hour":k=(this-g)/36e5;break;case"day":k=(this-g-b)/864e5;break;case"week":k=(this-g-b)/6048e5;break;default:k=this-g}return h?k:E(k)},D.endOf=function ff(i){var u;if(void 0===(i=be(i))||"millisecond"===i||!this.isValid())return this;var h=this._isUTC?Fi:Oi;switch(i){case"year":u=h(this.year()+1,0,1)-1;break;case"quarter":u=h(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":u=h(this.year(),this.month()+1,1)-1;break;case"week":u=h(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":u=h(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":u=h(this.year(),this.month(),this.date()+1)-1;break;case"hour":u=this._d.valueOf(),u+=Tr-kt(u+(this._isUTC?0:this.utcOffset()*wt),Tr)-1;break;case"minute":u=this._d.valueOf(),u+=wt-kt(u,wt)-1;break;case"second":u=this._d.valueOf(),u+=1e3-kt(u,1e3)-1}return this._d.setTime(u),a.updateOffset(this,!0),this},D.format=function nf(i){i||(i=this.isUtc()?a.defaultFormatUtc:a.defaultFormat);var u=cr(this,i);return this.localeData().postformat(u)},D.from=function of(i,u){return this.isValid()&&(Y(i)&&i.isValid()||Z(i).isValid())?Me({to:this,from:i}).locale(this.locale()).humanize(!u):this.localeData().invalidDate()},D.fromNow=function sf(i){return this.from(Z(),i)},D.to=function lf(i,u){return this.isValid()&&(Y(i)&&i.isValid()||Z(i).isValid())?Me({from:this,to:i}).locale(this.locale()).humanize(!u):this.localeData().invalidDate()},D.toNow=function uf(i){return this.to(Z(),i)},D.get=function du(i){return fe(this[i=be(i)])?this[i]():this},D.invalidAt=function _f(){return x(this).overflow},D.isAfter=function qd(i,u){var h=Y(i)?i:Z(i);return!(!this.isValid()||!h.isValid())&&("millisecond"===(u=be(u)||"millisecond")?this.valueOf()>h.valueOf():h.valueOf()<this.clone().startOf(u).valueOf())},D.isBefore=function Zd(i,u){var h=Y(i)?i:Z(i);return!(!this.isValid()||!h.isValid())&&("millisecond"===(u=be(u)||"millisecond")?this.valueOf()<h.valueOf():this.clone().endOf(u).valueOf()<h.valueOf())},D.isBetween=function Xd(i,u,h,g){var b=Y(i)?i:Z(i),k=Y(u)?u:Z(u);return!!(this.isValid()&&b.isValid()&&k.isValid())&&("("===(g=g||"()")[0]?this.isAfter(b,h):!this.isBefore(b,h))&&(")"===g[1]?this.isBefore(k,h):!this.isAfter(k,h))},D.isSame=function Kd(i,u){var g,h=Y(i)?i:Z(i);return!(!this.isValid()||!h.isValid())&&("millisecond"===(u=be(u)||"millisecond")?this.valueOf()===h.valueOf():(g=h.valueOf(),this.clone().startOf(u).valueOf()<=g&&g<=this.clone().endOf(u).valueOf()))},D.isSameOrAfter=function Jd(i,u){return this.isSame(i,u)||this.isAfter(i,u)},D.isSameOrBefore=function Qd(i,u){return this.isSame(i,u)||this.isBefore(i,u)},D.isValid=function bf(){return T(this)},D.lang=Ti,D.locale=Di,D.localeData=Ci,D.max=wd,D.min=xd,D.parsingFlags=function yf(){return y({},x(this))},D.set=function fu(i,u){if("object"==typeof i)for(var h=function Jl(i){var u=[];for(var h in i)u.push({unit:h,priority:Xn[h]});return u.sort(function(g,b){return g.priority-b.priority}),u}(i=ma(i)),g=0;g<h.length;g++)this[h[g].unit](i[h[g].unit]);else if(fe(this[i=be(i)]))return this[i](u);return this},D.startOf=function df(i){var u;if(void 0===(i=be(i))||"millisecond"===i||!this.isValid())return this;var h=this._isUTC?Fi:Oi;switch(i){case"year":u=h(this.year(),0,1);break;case"quarter":u=h(this.year(),this.month()-this.month()%3,1);break;case"month":u=h(this.year(),this.month(),1);break;case"week":u=h(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":u=h(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":u=h(this.year(),this.month(),this.date());break;case"hour":u=this._d.valueOf(),u-=kt(u+(this._isUTC?0:this.utcOffset()*wt),Tr);break;case"minute":u=this._d.valueOf(),u-=kt(u,wt);break;case"second":u=this._d.valueOf(),u-=kt(u,1e3)}return this._d.setTime(u),a.updateOffset(this,!0),this},D.subtract=Ud,D.toArray=function gf(){var i=this;return[i.year(),i.month(),i.date(),i.hour(),i.minute(),i.second(),i.millisecond()]},D.toObject=function mf(){var i=this;return{years:i.year(),months:i.month(),date:i.date(),hours:i.hours(),minutes:i.minutes(),seconds:i.seconds(),milliseconds:i.milliseconds()}},D.toDate=function vf(){return new Date(this.valueOf())},D.toISOString=function rf(i){if(!this.isValid())return null;var u=!0!==i,h=u?this.clone().utc():this;return h.year()<0||h.year()>9999?cr(h,u?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):fe(Date.prototype.toISOString)?u?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",cr(h,"Z")):cr(h,u?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},D.inspect=function af(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var i="moment",u="";this.isLocal()||(i=0===this.utcOffset()?"moment.utc":"moment.parseZone",u="Z");var h="["+i+'("]',g=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY";return this.format(h+g+"-MM-DD[T]HH:mm:ss.SSS"+u+'[")]')},D.toJSON=function pf(){return this.isValid()?this.toISOString():null},D.toString=function tf(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},D.unix=function cf(){return Math.floor(this.valueOf()/1e3)},D.valueOf=function hf(){return this._d.valueOf()-6e4*(this._offset||0)},D.creationData=function xf(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},D.year=ai,D.isLeapYear=function uu(){return yr(this.year())},D.weekYear=function wf(i){return Ai.call(this,i,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},D.isoWeekYear=function kf(i){return Ai.call(this,i,this.isoWeek(),this.isoWeekday(),1,4)},D.quarter=D.quarters=function Tf(i){return null==i?Math.ceil((this.month()+1)/3):this.month(3*(i-1)+this.month()%3)},D.month=li,D.daysInMonth=function bu(){return xr(this.year(),this.month())},D.week=D.weeks=function Cu(i){var u=this.localeData().week(this);return null==i?u:this.add(7*(i-u),"d")},D.isoWeek=D.isoWeeks=function Pu(i){var u=Ut(this,1,4).week;return null==i?u:this.add(7*(i-u),"d")},D.weeksInYear=function Sf(){var i=this.localeData()._week;return lt(this.year(),i.dow,i.doy)},D.isoWeeksInYear=function Mf(){return lt(this.year(),1,4)},D.date=Ii,D.day=D.days=function Eu(i){if(!this.isValid())return null!=i?this:NaN;var u=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=i?(i=function Ou(i,u){return"string"!=typeof i?i:isNaN(i)?"number"==typeof(i=u.weekdaysParse(i))?i:null:parseInt(i,10)}(i,this.localeData()),this.add(i-u,"d")):u},D.weekday=function zu(i){if(!this.isValid())return null!=i?this:NaN;var u=(this.day()+7-this.localeData()._week.dow)%7;return null==i?u:this.add(i-u,"d")},D.isoWeekday=function Bu(i){if(!this.isValid())return null!=i?this:NaN;if(null!=i){var u=function Fu(i,u){return"string"==typeof i?u.weekdaysParse(i)%7||7:isNaN(i)?null:i}(i,this.localeData());return this.day(this.day()%7?u:u-7)}return this.day()||7},D.dayOfYear=function Cf(i){var u=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==i?u:this.add(i-u,"d")},D.hour=D.hours=Ju,D.minute=D.minutes=Pf,D.second=D.seconds=Of,D.millisecond=D.milliseconds=Af,D.utcOffset=function Od(i,u,h){var b,g=this._offset||0;if(!this.isValid())return null!=i?this:NaN;if(null!=i){if("string"==typeof i){if(null===(i=Aa(br,i)))return this}else Math.abs(i)<16&&!h&&(i*=60);return!this._isUTC&&u&&(b=La(this)),this._offset=i,this._isUTC=!0,null!=b&&this.add(b,"m"),g!==i&&(!u||this._changeInProgress?Si(this,Me(i-g,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?g:La(this)},D.utc=function Ad(i){return this.utcOffset(0,i)},D.local=function Id(i){return this._isUTC&&(this.utcOffset(0,i),this._isUTC=!1,i&&this.subtract(La(this),"m")),this},D.parseZone=function Ld(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var i=Aa(ru,this._i);null!=i?this.utcOffset(i):this.utcOffset(0,!0)}return this},D.hasAlignedHourOffset=function Rd(i){return!!this.isValid()&&(i=i?Z(i).utcOffset():0,(this.utcOffset()-i)%60==0)},D.isDST=function Wd(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},D.isLocal=function Yd(){return!!this.isValid()&&!this._isUTC},D.isUtcOffset=function Ed(){return!!this.isValid()&&this._isUTC},D.isUtc=wi,D.isUTC=wi,D.zoneAbbr=function If(){return this._isUTC?"UTC":""},D.zoneName=function Lf(){return this._isUTC?"Coordinated Universal Time":""},D.dates=U("dates accessor is deprecated. Use date instead.",Ii),D.months=U("months accessor is deprecated. Use month instead",li),D.years=U("years accessor is deprecated. Use year instead",ai),D.zone=U("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function Fd(i,u){return null!=i?("string"!=typeof i&&(i=-i),this.utcOffset(i,u),this):-this.utcOffset()}),D.isDSTShifted=U("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function Nd(){if(!l(this._isDSTShifted))return this._isDSTShifted;var i={};if(A(i,this),(i=bi(i))._a){var u=i._isUTC?_(i._a):Z(i._a);this._isDSTShifted=this.isValid()&&J(i._a,u.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var G=va.prototype;function Pr(i,u,h,g){var b=$e(),k=_().set(g,u);return b[h](k,i)}function Ri(i,u,h){if(f(i)&&(u=i,i=void 0),i=i||"",null!=u)return Pr(i,u,h,"month");var g,b=[];for(g=0;g<12;g++)b[g]=Pr(i,g,h,"month");return b}function Wa(i,u,h,g){"boolean"==typeof i?(f(u)&&(h=u,u=void 0),u=u||""):(h=u=i,i=!1,f(u)&&(h=u,u=void 0),u=u||"");var b=$e(),k=i?b._week.dow:0;if(null!=h)return Pr(u,(h+k)%7,g,"day");var S,R=[];for(S=0;S<7;S++)R[S]=Pr(u,(S+k)%7,g,"day");return R}G.calendar=function Bl(i,u,h){var g=this._calendar[i]||this._calendar.sameElse;return fe(g)?g.call(u,h):g},G.longDateFormat=function Vl(i){var u=this._longDateFormat[i],h=this._longDateFormat[i.toUpperCase()];return u||!h?u:(this._longDateFormat[i]=h.replace(/MMMM|MM|DD|dddd/g,function(g){return g.slice(1)}),this._longDateFormat[i])},G.invalidDate=function jl(){return this._invalidDate},G.ordinal=function ql(i){return this._ordinal.replace("%d",i)},G.preparse=Li,G.postformat=Li,G.relativeTime=function Xl(i,u,h,g){var b=this._relativeTime[h];return fe(b)?b(i,u,h,g):b.replace(/%d/i,i)},G.pastFuture=function Kl(i,u){var h=this._relativeTime[i>0?"future":"past"];return fe(h)?h(u):h.replace(/%s/i,u)},G.set=function ca(i){var u,h;for(h in i)fe(u=i[h])?this[h]=u:this["_"+h]=u;this._config=i,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},G.months=function vu(i,u){return i?o(this._months)?this._months[i.month()]:this._months[(this._months.isFormat||ii).test(u)?"format":"standalone"][i.month()]:o(this._months)?this._months:this._months.standalone},G.monthsShort=function gu(i,u){return i?o(this._monthsShort)?this._monthsShort[i.month()]:this._monthsShort[ii.test(u)?"format":"standalone"][i.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},G.monthsParse=function pu(i,u,h){var g,b,k;if(this._monthsParseExact)return mu.call(this,i,u,h);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),g=0;g<12;g++){if(b=_([2e3,g]),h&&!this._longMonthsParse[g]&&(this._longMonthsParse[g]=new RegExp("^"+this.months(b,"").replace(".","")+"$","i"),this._shortMonthsParse[g]=new RegExp("^"+this.monthsShort(b,"").replace(".","")+"$","i")),!h&&!this._monthsParse[g]&&(k="^"+this.months(b,"")+"|^"+this.monthsShort(b,""),this._monthsParse[g]=new RegExp(k.replace(".",""),"i")),h&&"MMMM"===u&&this._longMonthsParse[g].test(i))return g;if(h&&"MMM"===u&&this._shortMonthsParse[g].test(i))return g;if(!h&&this._monthsParse[g].test(i))return g}},G.monthsRegex=function wu(i){return this._monthsParseExact?(p(this,"_monthsRegex")||ui.call(this),i?this._monthsStrictRegex:this._monthsRegex):(p(this,"_monthsRegex")||(this._monthsRegex=xu),this._monthsStrictRegex&&i?this._monthsStrictRegex:this._monthsRegex)},G.monthsShortRegex=function _u(i){return this._monthsParseExact?(p(this,"_monthsRegex")||ui.call(this),i?this._monthsShortStrictRegex:this._monthsShortRegex):(p(this,"_monthsShortRegex")||(this._monthsShortRegex=yu),this._monthsShortStrictRegex&&i?this._monthsShortStrictRegex:this._monthsShortRegex)},G.week=function Mu(i){return Ut(i,this._week.dow,this._week.doy).week},G.firstDayOfYear=function Tu(){return this._week.doy},G.firstDayOfWeek=function Du(){return this._week.dow},G.weekdays=function Iu(i,u){var h=o(this._weekdays)?this._weekdays:this._weekdays[i&&!0!==i&&this._weekdays.isFormat.test(u)?"format":"standalone"];return!0===i?wa(h,this._week.dow):i?h[i.day()]:h},G.weekdaysMin=function Wu(i){return!0===i?wa(this._weekdaysMin,this._week.dow):i?this._weekdaysMin[i.day()]:this._weekdaysMin},G.weekdaysShort=function Lu(i){return!0===i?wa(this._weekdaysShort,this._week.dow):i?this._weekdaysShort[i.day()]:this._weekdaysShort},G.weekdaysParse=function Yu(i,u,h){var g,b,k;if(this._weekdaysParseExact)return Nu.call(this,i,u,h);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),g=0;g<7;g++){if(b=_([2e3,1]).day(g),h&&!this._fullWeekdaysParse[g]&&(this._fullWeekdaysParse[g]=new RegExp("^"+this.weekdays(b,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[g]=new RegExp("^"+this.weekdaysShort(b,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[g]=new RegExp("^"+this.weekdaysMin(b,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[g]||(k="^"+this.weekdays(b,"")+"|^"+this.weekdaysShort(b,"")+"|^"+this.weekdaysMin(b,""),this._weekdaysParse[g]=new RegExp(k.replace(".",""),"i")),h&&"dddd"===u&&this._fullWeekdaysParse[g].test(i))return g;if(h&&"ddd"===u&&this._shortWeekdaysParse[g].test(i))return g;if(h&&"dd"===u&&this._minWeekdaysParse[g].test(i))return g;if(!h&&this._weekdaysParse[g].test(i))return g}},G.weekdaysRegex=function Vu(i){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||ka.call(this),i?this._weekdaysStrictRegex:this._weekdaysRegex):(p(this,"_weekdaysRegex")||(this._weekdaysRegex=Hu),this._weekdaysStrictRegex&&i?this._weekdaysStrictRegex:this._weekdaysRegex)},G.weekdaysShortRegex=function ju(i){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||ka.call(this),i?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(p(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Uu),this._weekdaysShortStrictRegex&&i?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},G.weekdaysMinRegex=function $u(i){return this._weekdaysParseExact?(p(this,"_weekdaysRegex")||ka.call(this),i?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(p(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Gu),this._weekdaysMinStrictRegex&&i?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},G.isPM=function Zu(i){return"p"===(i+"").toLowerCase().charAt(0)},G.meridiem=function Ku(i,u,h){return i>11?h?"pm":"PM":h?"am":"AM"},_t("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(i){var u=i%10;return i+(1===O(i%100/10)?"th":1===u?"st":2===u?"nd":3===u?"rd":"th")}}),a.lang=U("moment.lang is deprecated. Use moment.locale instead.",_t),a.langData=U("moment.langData is deprecated. Use moment.localeData instead.",$e);var Be=Math.abs;function Wi(i,u,h,g){var b=Me(u,h);return i._milliseconds+=g*b._milliseconds,i._days+=g*b._days,i._months+=g*b._months,i._bubble()}function Ni(i){return i<0?Math.floor(i):Math.ceil(i)}function Yi(i){return 4800*i/146097}function Na(i){return 146097*i/4800}function He(i){return function(){return this.as(i)}}var qf=He("ms"),Zf=He("s"),Xf=He("m"),Kf=He("h"),Jf=He("d"),Qf=He("w"),eh=He("M"),th=He("Q"),rh=He("y");function dt(i){return function(){return this.isValid()?this._data[i]:NaN}}var ih=dt("milliseconds"),oh=dt("seconds"),sh=dt("minutes"),lh=dt("hours"),uh=dt("days"),dh=dt("months"),fh=dt("years");var Ze=Math.round,Oe={ss:44,s:45,m:45,h:22,d:26,M:11};function ch(i,u,h,g,b){return b.relativeTime(u||1,!!h,i,g)}var Ya=Math.abs;function Mt(i){return(i>0)-(i<0)||+i}function Or(){if(!this.isValid())return this.localeData().invalidDate();var g,b,i=Ya(this._milliseconds)/1e3,u=Ya(this._days),h=Ya(this._months);g=E(i/60),b=E(g/60),i%=60,g%=60;var S=E(h/12),R=h%=12,V=u,ee=b,ye=g,qt=i?i.toFixed(3).replace(/\.?0+$/,""):"",Zt=this.asSeconds();if(!Zt)return"P0D";var bh=Zt<0?"-":"",Ei=Mt(this._months)!==Mt(Zt)?"-":"",yh=Mt(this._days)!==Mt(Zt)?"-":"",Ea=Mt(this._milliseconds)!==Mt(Zt)?"-":"";return bh+"P"+(S?Ei+S+"Y":"")+(R?Ei+R+"M":"")+(V?yh+V+"D":"")+(ee||ye||qt?"T":"")+(ee?Ea+ee+"H":"")+(ye?Ea+ye+"M":"")+(qt?Ea+qt+"S":"")}var H=Sr.prototype;return H.isValid=function Td(){return this._isValid},H.abs=function Hf(){var i=this._data;return this._milliseconds=Be(this._milliseconds),this._days=Be(this._days),this._months=Be(this._months),i.milliseconds=Be(i.milliseconds),i.seconds=Be(i.seconds),i.minutes=Be(i.minutes),i.hours=Be(i.hours),i.months=Be(i.months),i.years=Be(i.years),this},H.add=function Vf(i,u){return Wi(this,i,u,1)},H.subtract=function Uf(i,u){return Wi(this,i,u,-1)},H.as=function Gf(i){if(!this.isValid())return NaN;var u,h,g=this._milliseconds;if("month"===(i=be(i))||"quarter"===i||"year"===i)switch(u=this._days+g/864e5,h=this._months+Yi(u),i){case"month":return h;case"quarter":return h/3;case"year":return h/12}else switch(u=this._days+Math.round(Na(this._months)),i){case"week":return u/7+g/6048e5;case"day":return u+g/864e5;case"hour":return 24*u+g/36e5;case"minute":return 1440*u+g/6e4;case"second":return 86400*u+g/1e3;case"millisecond":return Math.floor(864e5*u)+g;default:throw new Error("Unknown unit "+i)}},H.asMilliseconds=qf,H.asSeconds=Zf,H.asMinutes=Xf,H.asHours=Kf,H.asDays=Jf,H.asWeeks=Qf,H.asMonths=eh,H.asQuarters=th,H.asYears=rh,H.valueOf=function $f(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*O(this._months/12):NaN},H._bubble=function jf(){var b,k,S,R,V,i=this._milliseconds,u=this._days,h=this._months,g=this._data;return i>=0&&u>=0&&h>=0||i<=0&&u<=0&&h<=0||(i+=864e5*Ni(Na(h)+u),u=0,h=0),g.milliseconds=i%1e3,b=E(i/1e3),g.seconds=b%60,k=E(b/60),g.minutes=k%60,S=E(k/60),g.hours=S%24,u+=E(S/24),h+=V=E(Yi(u)),u-=Ni(Na(V)),R=E(h/12),h%=12,g.days=u,g.months=h,g.years=R,this},H.clone=function ah(){return Me(this)},H.get=function nh(i){return i=be(i),this.isValid()?this[i+"s"]():NaN},H.milliseconds=ih,H.seconds=oh,H.minutes=sh,H.hours=lh,H.days=uh,H.weeks=function hh(){return E(this.days()/7)},H.months=dh,H.years=fh,H.humanize=function ph(i){if(!this.isValid())return this.localeData().invalidDate();var u=this.localeData(),h=function vh(i,u,h){var g=Me(i).abs(),b=Ze(g.as("s")),k=Ze(g.as("m")),S=Ze(g.as("h")),R=Ze(g.as("d")),V=Ze(g.as("M")),ee=Ze(g.as("y")),ye=b<=Oe.ss&&["s",b]||b<Oe.s&&["ss",b]||k<=1&&["m"]||k<Oe.m&&["mm",k]||S<=1&&["h"]||S<Oe.h&&["hh",S]||R<=1&&["d"]||R<Oe.d&&["dd",R]||V<=1&&["M"]||V<Oe.M&&["MM",V]||ee<=1&&["y"]||["yy",ee];return ye[2]=u,ye[3]=+i>0,ye[4]=h,ch.apply(null,ye)}(this,!i,u);return i&&(h=u.pastFuture(+this,h)),u.postformat(h)},H.toISOString=Or,H.toString=Or,H.toJSON=Or,H.locale=Di,H.localeData=Ci,H.toIsoString=U("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Or),H.lang=Ti,L("X",0,0,"unix"),L("x",0,0,"valueOf"),P("x",pr),P("X",/[+-]?\d+(\.\d{1,3})?/),q("X",function(i,u,h){h._d=new Date(1e3*parseFloat(i,10))}),q("x",function(i,u,h){h._d=new Date(O(i))}),a.version="2.24.0",function n(i){r=i}(Z),a.fn=D,a.min=function kd(){return _i("isBefore",[].slice.call(arguments,0))},a.max=function Md(){return _i("isAfter",[].slice.call(arguments,0))},a.now=function(){return Date.now?Date.now():+new Date},a.utc=_,a.unix=function Rf(i){return Z(1e3*i)},a.months=function Nf(i,u){return Ri(i,u,"months")},a.isDate=c,a.locale=_t,a.invalid=C,a.duration=Me,a.isMoment=Y,a.weekdays=function Ef(i,u,h){return Wa(i,u,h,"weekdays")},a.parseZone=function Wf(){return Z.apply(null,arguments).parseZone()},a.localeData=$e,a.isDuration=Oa,a.monthsShort=function Yf(i,u){return Ri(i,u,"monthsShort")},a.weekdaysMin=function Bf(i,u,h){return Wa(i,u,h,"weekdaysMin")},a.defineLocale=Sa,a.updateLocale=function ed(i,u){if(null!=u){var h,g,b=vi;null!=(g=kr(i))&&(b=g._config),(h=new va(u=Zn(b,u))).parentLocale=re[i],re[i]=h,_t(i)}else null!=re[i]&&(null!=re[i].parentLocale?re[i]=re[i].parentLocale:null!=re[i]&&delete re[i]);return re[i]},a.locales=function td(){return ga(re)},a.weekdaysShort=function zf(i,u,h){return Wa(i,u,h,"weekdaysShort")},a.normalizeUnits=be,a.relativeTimeRounding=function gh(i){return void 0===i?Ze:"function"==typeof i&&(Ze=i,!0)},a.relativeTimeThreshold=function mh(i,u){return void 0!==Oe[i]&&(void 0===u?Oe[i]:(Oe[i]=u,"s"===i&&(Oe.ss=u-1),!0))},a.calendarFormat=function jd(i,u){var h=i.diff(u,"days",!0);return h<-6?"sameElse":h<-1?"lastWeek":h<0?"lastDay":h<1?"sameDay":h<2?"nextDay":h<7?"nextWeek":"sameElse"},a.prototype=D,a.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},a}()}),kl={datetime:"MMM D, YYYY, h:mm:ss a",millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"};ea._date.override("function"==typeof xe?{_id:"moment",formats:function(){return kl},parse:function(e,t){return"string"==typeof e&&"string"==typeof t?e=xe(e,t):e instanceof xe||(e=xe(e)),e.isValid()?e.valueOf():null},format:function(e,t){return xe(e).format(t)},add:function(e,t,r){return xe(e).add(t,r).valueOf()},diff:function(e,t,r){return xe(e).diff(xe(t),r)},startOf:function(e,t,r){return e=xe(e),"isoWeek"===t?e.isoWeekday(r).valueOf():e.startOf(t).valueOf()},endOf:function(e,t){return xe(e).endOf(t).valueOf()},_create:function(e){return xe(e)}}:{}),F._set("global",{plugins:{filler:{propagate:!0}}});var Ml={dataset:function(e){var t=e.fill,r=e.chart,a=r.getDatasetMeta(t),o=a&&r.isDatasetVisible(t)&&a.dataset._children||[],s=o.length||0;return s?function(d,l){return l<s&&o[l]._view||null}:null},boundary:function(e){var t=e.boundary,r=t?t.x:null,a=t?t.y:null;return m.isArray(t)?function(n,o){return t[o]}:function(n){return{x:null===r?n.x:r,y:null===a?n.y:a}}}};function Sl(e,t,r){var o,a=e._model||{},n=a.fill;if(void 0===n&&(n=!!a.backgroundColor),!1===n||null===n)return!1;if(!0===n)return"origin";if(o=parseFloat(n,10),isFinite(o)&&Math.floor(o)===o)return("-"===n[0]||"+"===n[0])&&(o=t+o),!(o===t||o<0||o>=r)&&o;switch(n){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return n;default:return!1}}function Cl(e){return(e.el._scale||{}).getPointPositionForValue?function Tl(e){var s,d,l,f,c,t=e.el._scale,r=t.options,a=t.chart.data.labels.length,n=e.fill,o=[];if(!a)return null;for(d=r.ticks.reverse?t.min:t.max,l=t.getPointPositionForValue(0,s=r.ticks.reverse?t.max:t.min),f=0;f<a;++f)c="start"===n||"end"===n?t.getPointPositionForValue(f,"start"===n?s:d):t.getBasePosition(f),r.gridLines.circular&&(c.cx=l.x,c.cy=l.y,c.angle=t.getIndexAngle(f)-Math.PI/2),o.push(c);return o}(e):function Dl(e){var o,t=e.el._model||{},r=e.el._scale||{},a=e.fill,n=null;if(isFinite(a))return null;if("start"===a?n=void 0===t.scaleBottom?r.bottom:t.scaleBottom:"end"===a?n=void 0===t.scaleTop?r.top:t.scaleTop:void 0!==t.scaleZero?n=t.scaleZero:r.getBasePixel&&(n=r.getBasePixel()),null!=n){if(void 0!==n.x&&void 0!==n.y)return n;if(m.isFinite(n))return{x:(o=r.isHorizontal())?n:null,y:o?null:n}}return null}(e)}function Pl(e,t,r){var s,n=e[t].fill,o=[t];if(!r)return n;for(;!1!==n&&-1===o.indexOf(n);){if(!isFinite(n))return n;if(!(s=e[n]))return!1;if(s.visible)return n;o.push(n),n=s.fill}return!1}function Ol(e){var t=e.fill,r="dataset";return!1===t?null:(isFinite(t)||(r="boundary"),Ml[r](e))}function Hn(e){return e&&!e.skip}function Vn(e,t,r,a,n){var o,s,d,l;if(a&&n){for(e.moveTo(t[0].x,t[0].y),o=1;o<a;++o)m.canvas.lineTo(e,t[o-1],t[o]);if(void 0!==r[0].angle){for(s=r[0].cx,d=r[0].cy,l=Math.sqrt(Math.pow(r[0].x-s,2)+Math.pow(r[0].y-d,2)),o=n-1;o>0;--o)e.arc(s,d,l,r[o].angle,r[o-1].angle,!0);return}for(e.lineTo(r[n-1].x,r[n-1].y),o=n-1;o>0;--o)m.canvas.lineTo(e,r[o],r[o-1],!0)}}function Fl(e,t,r,a,n,o){var p,y,_,w,x,M,T,C,s=t.length,d=a.spanGaps,l=[],f=[],c=0,v=0;for(e.beginPath(),p=0,y=s;p<y;++p)x=r(w=t[_=p%s]._view,_,a),M=Hn(w),T=Hn(x),o&&void 0===C&&M&&(y=s+(C=p+1)),M&&T?(c=l.push(w),v=f.push(x)):c&&v&&(d?(M&&l.push(w),T&&f.push(x)):(Vn(e,l,f,c,v),c=v=0,l=[],f=[]));Vn(e,l,f,c,v),e.closePath(),e.fillStyle=n,e.fill()}var Al={id:"filler",afterDatasetsUpdate:function(e,t){var o,s,d,l,r=(e.data.datasets||[]).length,a=t.propagate,n=[];for(s=0;s<r;++s)l=null,(d=(o=e.getDatasetMeta(s)).dataset)&&d._model&&d instanceof se.Line&&(l={visible:e.isDatasetVisible(s),fill:Sl(d,s,r),chart:e,el:d}),o.$filler=l,n.push(l);for(s=0;s<r;++s)(l=n[s])&&(l.fill=Pl(n,s,a),l.boundary=Cl(l),l.mapper=Ol(l))},beforeDatasetsDraw:function(e){var a,n,o,s,d,l,f,t=e._getSortedVisibleDatasetMetas(),r=e.ctx;for(n=t.length-1;n>=0;--n)(a=t[n].$filler)&&a.visible&&(d=(o=a.el)._children||[],f=(s=o._view).backgroundColor||F.global.defaultColor,(l=a.mapper)&&f&&d.length&&(m.canvas.clipArea(r,e.chartArea),Fl(r,d,l,s,f,o._loop),m.canvas.unclipArea(r)))}},Il=m.rtl.getRtlAdapter,Ue=m.noop,je=m.valueOrDefault;function ha(e,t){return e.usePointStyle&&e.boxWidth>t?t:e.boxWidth}F._set("global",{legend:{display:!0,position:"top",align:"center",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(e,t){var r=t.datasetIndex,a=this.chart,n=a.getDatasetMeta(r);n.hidden=null===n.hidden?!a.data.datasets[r].hidden:null,a.update()},onHover:null,onLeave:null,labels:{boxWidth:40,padding:10,generateLabels:function(e){var t=e.data.datasets,r=e.options.legend||{},a=r.labels&&r.labels.usePointStyle;return e._getSortedDatasetMetas().map(function(n){var o=n.controller.getStyle(a?0:void 0);return{text:t[n.index].label,fillStyle:o.backgroundColor,hidden:!e.isDatasetVisible(n.index),lineCap:o.borderCapStyle,lineDash:o.borderDash,lineDashOffset:o.borderDashOffset,lineJoin:o.borderJoinStyle,lineWidth:o.borderWidth,strokeStyle:o.borderColor,pointStyle:o.pointStyle,rotation:o.rotation,datasetIndex:n.index}},this)}}},legendCallback:function(e){var a,n,o,t=document.createElement("ul"),r=e.data.datasets;for(t.setAttribute("class",e.id+"-legend"),a=0,n=r.length;a<n;a++)(o=t.appendChild(document.createElement("li"))).appendChild(document.createElement("span")).style.backgroundColor=r[a].backgroundColor,r[a].label&&o.appendChild(document.createTextNode(r[a].label));return t.outerHTML}});var Un=De.extend({initialize:function(e){var t=this;m.extend(t,e),t.legendHitBoxes=[],t._hoveredItem=null,t.doughnutMode=!1},beforeUpdate:Ue,update:function(e,t,r){var a=this;return a.beforeUpdate(),a.maxWidth=e,a.maxHeight=t,a.margins=r,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeBuildLabels(),a.buildLabels(),a.afterBuildLabels(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:Ue,beforeSetDimensions:Ue,setDimensions:function(){var e=this;e.isHorizontal()?(e.width=e.maxWidth,e.left=0,e.right=e.width):(e.height=e.maxHeight,e.top=0,e.bottom=e.height),e.paddingLeft=0,e.paddingTop=0,e.paddingRight=0,e.paddingBottom=0,e.minSize={width:0,height:0}},afterSetDimensions:Ue,beforeBuildLabels:Ue,buildLabels:function(){var e=this,t=e.options.labels||{},r=m.callback(t.generateLabels,[e.chart],e)||[];t.filter&&(r=r.filter(function(a){return t.filter(a,e.chart.data)})),e.options.reverse&&r.reverse(),e.legendItems=r},afterBuildLabels:Ue,beforeFit:Ue,fit:function(){var e=this,t=e.options,r=t.labels,a=t.display,n=e.ctx,o=m.options._parseFont(r),s=o.size,d=e.legendHitBoxes=[],l=e.minSize,f=e.isHorizontal();if(f?(l.width=e.maxWidth,l.height=a?10:0):(l.width=a?10:0,l.height=e.maxHeight),a){if(n.font=o.string,f){var c=e.lineWidths=[0],v=0;n.textAlign="left",n.textBaseline="middle",m.each(e.legendItems,function(T,C){var A=ha(r,s)+s/2+n.measureText(T.text).width;(0===C||c[c.length-1]+A+2*r.padding>l.width)&&(v+=s+r.padding,c[c.length-(C>0?0:1)]=0),d[C]={left:0,top:0,width:A,height:s},c[c.length-1]+=A+r.padding}),l.height+=v}else{var p=r.padding,y=e.columnWidths=[],_=e.columnHeights=[],w=r.padding,x=0,M=0;m.each(e.legendItems,function(T,C){var A=ha(r,s)+s/2+n.measureText(T.text).width;C>0&&M+s+2*p>l.height&&(w+=x+r.padding,y.push(x),_.push(M),x=0,M=0),x=Math.max(x,A),M+=s+p,d[C]={left:0,top:0,width:A,height:s}}),w+=x,y.push(x),_.push(M),l.width+=w}e.width=l.width,e.height=l.height}else e.width=l.width=e.height=l.height=0},afterFit:Ue,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var e=this,t=e.options,r=t.labels,a=F.global,n=a.defaultColor,o=a.elements.line,s=e.height,d=e.columnHeights,l=e.width,f=e.lineWidths;if(t.display){var w,c=Il(t.rtl,e.left,e.minSize.width),v=e.ctx,p=je(r.fontColor,a.defaultFontColor),y=m.options._parseFont(r),_=y.size;v.textAlign=c.textAlign("left"),v.textBaseline="middle",v.lineWidth=.5,v.strokeStyle=p,v.fillStyle=p,v.font=y.string;var x=ha(r,_),M=e.legendHitBoxes,I=function(N,Y){switch(t.align){case"start":return r.padding;case"end":return N-Y;default:return(N-Y+r.padding)/2}},A=e.isHorizontal();w=A?{x:e.left+I(l,f[0]),y:e.top+r.padding,line:0}:{x:e.left+r.padding,y:e.top+I(s,d[0]),line:0},m.rtl.overrideTextDirection(e.ctx,t.textDirection);var z=_+r.padding;m.each(e.legendItems,function(N,Y){var E=v.measureText(N.text).width,O=x+_/2+E,J=w.x,X=w.y;c.setWidth(e.minSize.width),A?Y>0&&J+O+r.padding>e.left+e.minSize.width&&(X=w.y+=z,w.line++,J=w.x=e.left+I(l,f[w.line])):Y>0&&X+z>e.top+e.minSize.height&&(J=w.x=J+e.columnWidths[w.line]+r.padding,w.line++,X=w.y=e.top+I(s,d[w.line]));var U=c.x(J);(function(N,Y,E){if(!(isNaN(x)||x<=0)){v.save();var O=je(E.lineWidth,o.borderWidth);if(v.fillStyle=je(E.fillStyle,n),v.lineCap=je(E.lineCap,o.borderCapStyle),v.lineDashOffset=je(E.lineDashOffset,o.borderDashOffset),v.lineJoin=je(E.lineJoin,o.borderJoinStyle),v.lineWidth=O,v.strokeStyle=je(E.strokeStyle,n),v.setLineDash&&v.setLineDash(je(E.lineDash,o.borderDash)),r&&r.usePointStyle){var J=x*Math.SQRT2/2,X=c.xPlus(N,x/2);m.canvas.drawPoint(v,E.pointStyle,J,X,Y+_/2,E.rotation)}else v.fillRect(c.leftForLtr(N,x),Y,x,_),0!==O&&v.strokeRect(c.leftForLtr(N,x),Y,x,_);v.restore()}})(U,X,N),M[Y].left=c.leftForLtr(U,M[Y].width),M[Y].top=X,function(N,Y,E,O){var J=_/2,X=c.xPlus(N,x+J),U=Y+J;v.fillText(E.text,X,U),E.hidden&&(v.beginPath(),v.lineWidth=2,v.moveTo(X,U),v.lineTo(c.xPlus(X,O),U),v.stroke())}(U,X,N,E),A?w.x+=O+r.padding:w.y+=z}),m.rtl.restoreTextDirection(e.ctx,t.textDirection)}},_getLegendItemAt:function(e,t){var a,n,o,r=this;if(e>=r.left&&e<=r.right&&t>=r.top&&t<=r.bottom)for(o=r.legendHitBoxes,a=0;a<o.length;++a)if(e>=(n=o[a]).left&&e<=n.left+n.width&&t>=n.top&&t<=n.top+n.height)return r.legendItems[a];return null},handleEvent:function(e){var n,t=this,r=t.options,a="mouseup"===e.type?"click":e.type;if("mousemove"===a){if(!r.onHover&&!r.onLeave)return}else{if("click"!==a)return;if(!r.onClick)return}n=t._getLegendItemAt(e.x,e.y),"click"===a?n&&r.onClick&&r.onClick.call(t,e.native,n):(r.onLeave&&n!==t._hoveredItem&&(t._hoveredItem&&r.onLeave.call(t,e.native,t._hoveredItem),t._hoveredItem=n),r.onHover&&n&&r.onHover.call(t,e.native,n))}});function jn(e,t){var r=new Un({ctx:e.ctx,options:t,chart:e});pe.configure(e,r,t),pe.addBox(e,r),e.legend=r}var Ll={id:"legend",_element:Un,beforeInit:function(e){var t=e.options.legend;t&&jn(e,t)},beforeUpdate:function(e){var t=e.options.legend,r=e.legend;t?(m.mergeIf(t,F.global.legend),r?(pe.configure(e,r,t),r.options=t):jn(e,t)):r&&(pe.removeBox(e,r),delete e.legend)},afterEvent:function(e,t){var r=e.legend;r&&r.handleEvent(t)}},Re=m.noop;F._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,padding:10,position:"top",text:"",weight:2e3}});var Gn=De.extend({initialize:function(e){m.extend(this,e),this.legendHitBoxes=[]},beforeUpdate:Re,update:function(e,t,r){var a=this;return a.beforeUpdate(),a.maxWidth=e,a.maxHeight=t,a.margins=r,a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeBuildLabels(),a.buildLabels(),a.afterBuildLabels(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:Re,beforeSetDimensions:Re,setDimensions:function(){var e=this;e.isHorizontal()?(e.width=e.maxWidth,e.left=0,e.right=e.width):(e.height=e.maxHeight,e.top=0,e.bottom=e.height),e.paddingLeft=0,e.paddingTop=0,e.paddingRight=0,e.paddingBottom=0,e.minSize={width:0,height:0}},afterSetDimensions:Re,beforeBuildLabels:Re,buildLabels:Re,afterBuildLabels:Re,beforeFit:Re,fit:function(){var o,e=this,t=e.options,r=e.minSize={},a=e.isHorizontal();t.display?(o=(m.isArray(t.text)?t.text.length:1)*m.options._parseFont(t).lineHeight+2*t.padding,e.width=r.width=a?e.maxWidth:o,e.height=r.height=a?o:e.maxHeight):e.width=r.width=e.height=r.height=0},afterFit:Re,isHorizontal:function(){var e=this.options.position;return"top"===e||"bottom"===e},draw:function(){var e=this,t=e.ctx,r=e.options;if(r.display){var v,p,y,a=m.options._parseFont(r),n=a.lineHeight,o=n/2+r.padding,s=0,d=e.top,l=e.left,f=e.bottom,c=e.right;t.fillStyle=m.valueOrDefault(r.fontColor,F.global.defaultFontColor),t.font=a.string,e.isHorizontal()?(p=l+(c-l)/2,y=d+o,v=c-l):(p="left"===r.position?l+o:c-o,y=d+(f-d)/2,v=f-d,s=Math.PI*("left"===r.position?-.5:.5)),t.save(),t.translate(p,y),t.rotate(s),t.textAlign="center",t.textBaseline="middle";var _=r.text;if(m.isArray(_))for(var w=0,x=0;x<_.length;++x)t.fillText(_[x],0,w,v),w+=n;else t.fillText(_,0,0,v);t.restore()}}});function $n(e,t){var r=new Gn({ctx:e.ctx,options:t,chart:e});pe.configure(e,r,t),pe.addBox(e,r),e.titleBlock=r}var Rl={id:"title",_element:Gn,beforeInit:function(e){var t=e.options.title;t&&$n(e,t)},beforeUpdate:function(e){var t=e.options.title,r=e.titleBlock;t?(m.mergeIf(t,F.global.title),r?(pe.configure(e,r,t),r.options=t):$n(e,t)):r&&(pe.removeBox(e,r),delete e.titleBlock)}},Ge={},Wl=Al,Nl=Ll,Yl=Rl;for(var qn in Ge.filler=Wl,Ge.legend=Nl,Ge.title=Yl,W.helpers=m,function(){function e(a,n,o){var s;return"string"==typeof a?(s=parseInt(a,10),-1!==a.indexOf("%")&&(s=s/100*n.parentNode[o])):s=a,s}function t(a){return null!=a&&"none"!==a}function r(a,n,o){var s=document.defaultView,d=m._getParentNode(a),l=s.getComputedStyle(a)[n],f=s.getComputedStyle(d)[n],c=t(l),v=t(f),p=Number.POSITIVE_INFINITY;return c||v?Math.min(c?e(l,a,o):p,v?e(f,d,o):p):"none"}m.where=function(a,n){if(m.isArray(a)&&Array.prototype.filter)return a.filter(n);var o=[];return m.each(a,function(s){n(s)&&o.push(s)}),o},m.findIndex=Array.prototype.findIndex?function(a,n,o){return a.findIndex(n,o)}:function(a,n,o){o=void 0===o?a:o;for(var s=0,d=a.length;s<d;++s)if(n.call(o,a[s],s,a))return s;return-1},m.findNextWhere=function(a,n,o){m.isNullOrUndef(o)&&(o=-1);for(var s=o+1;s<a.length;s++){var d=a[s];if(n(d))return d}},m.findPreviousWhere=function(a,n,o){m.isNullOrUndef(o)&&(o=a.length);for(var s=o-1;s>=0;s--){var d=a[s];if(n(d))return d}},m.isNumber=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},m.almostEquals=function(a,n,o){return Math.abs(a-n)<o},m.almostWhole=function(a,n){var o=Math.round(a);return o-n<=a&&o+n>=a},m.max=function(a){return a.reduce(function(n,o){return isNaN(o)?n:Math.max(n,o)},Number.NEGATIVE_INFINITY)},m.min=function(a){return a.reduce(function(n,o){return isNaN(o)?n:Math.min(n,o)},Number.POSITIVE_INFINITY)},m.sign=Math.sign?function(a){return Math.sign(a)}:function(a){return 0==(a=+a)||isNaN(a)?a:a>0?1:-1},m.toRadians=function(a){return a*(Math.PI/180)},m.toDegrees=function(a){return a*(180/Math.PI)},m._decimalPlaces=function(a){if(m.isFinite(a)){for(var n=1,o=0;Math.round(a*n)/n!==a;)n*=10,o++;return o}},m.getAngleFromPoint=function(a,n){var o=n.x-a.x,s=n.y-a.y,d=Math.sqrt(o*o+s*s),l=Math.atan2(s,o);return l<-.5*Math.PI&&(l+=2*Math.PI),{angle:l,distance:d}},m.distanceBetweenPoints=function(a,n){return Math.sqrt(Math.pow(n.x-a.x,2)+Math.pow(n.y-a.y,2))},m.aliasPixel=function(a){return a%2==0?0:.5},m._alignPixel=function(a,n,o){var s=a.currentDevicePixelRatio,d=o/2;return Math.round((n-d)*s)/s+d},m.splineCurve=function(a,n,o,s){var d=a.skip?n:a,l=n,f=o.skip?n:o,c=Math.sqrt(Math.pow(l.x-d.x,2)+Math.pow(l.y-d.y,2)),v=Math.sqrt(Math.pow(f.x-l.x,2)+Math.pow(f.y-l.y,2)),p=c/(c+v),y=v/(c+v),_=s*(p=isNaN(p)?0:p),w=s*(y=isNaN(y)?0:y);return{previous:{x:l.x-_*(f.x-d.x),y:l.y-_*(f.y-d.y)},next:{x:l.x+w*(f.x-d.x),y:l.y+w*(f.y-d.y)}}},m.EPSILON=Number.EPSILON||1e-14,m.splineCurveMonotone=function(a){var s,d,l,f,v,p,y,_,w,n=(a||[]).map(function(x){return{model:x._model,deltaK:0,mK:0}}),o=n.length;for(s=0;s<o;++s)if(!(l=n[s]).model.skip){if(d=s>0?n[s-1]:null,(f=s<o-1?n[s+1]:null)&&!f.model.skip){var c=f.model.x-l.model.x;l.deltaK=0!==c?(f.model.y-l.model.y)/c:0}l.mK=!d||d.model.skip?l.deltaK:!f||f.model.skip?d.deltaK:this.sign(d.deltaK)!==this.sign(l.deltaK)?0:(d.deltaK+l.deltaK)/2}for(s=0;s<o-1;++s)if(f=n[s+1],!(l=n[s]).model.skip&&!f.model.skip){if(m.almostEquals(l.deltaK,0,this.EPSILON)){l.mK=f.mK=0;continue}v=l.mK/l.deltaK,p=f.mK/l.deltaK,!((_=Math.pow(v,2)+Math.pow(p,2))<=9)&&(y=3/Math.sqrt(_),l.mK=v*y*l.deltaK,f.mK=p*y*l.deltaK)}for(s=0;s<o;++s)!(l=n[s]).model.skip&&(f=s<o-1?n[s+1]:null,(d=s>0?n[s-1]:null)&&!d.model.skip&&(l.model.controlPointPreviousX=l.model.x-(w=(l.model.x-d.model.x)/3),l.model.controlPointPreviousY=l.model.y-w*l.mK),f&&!f.model.skip&&(l.model.controlPointNextX=l.model.x+(w=(f.model.x-l.model.x)/3),l.model.controlPointNextY=l.model.y+w*l.mK))},m.nextItem=function(a,n,o){return o?n>=a.length-1?a[0]:a[n+1]:n>=a.length-1?a[a.length-1]:a[n+1]},m.previousItem=function(a,n,o){return o?n<=0?a[a.length-1]:a[n-1]:n<=0?a[0]:a[n-1]},m.niceNum=function(a,n){var o=Math.floor(m.log10(a)),s=a/Math.pow(10,o);return(n?s<1.5?1:s<3?2:s<7?5:10:s<=1?1:s<=2?2:s<=5?5:10)*Math.pow(10,o)},m.requestAnimFrame="undefined"==typeof window?function(a){a()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)},m.getRelativePosition=function(a,n){var o,s,d=a.originalEvent||a,l=a.target||a.srcElement,f=l.getBoundingClientRect(),c=d.touches;c&&c.length>0?(o=c[0].clientX,s=c[0].clientY):(o=d.clientX,s=d.clientY);var v=parseFloat(m.getStyle(l,"padding-left")),p=parseFloat(m.getStyle(l,"padding-top")),y=parseFloat(m.getStyle(l,"padding-right")),_=parseFloat(m.getStyle(l,"padding-bottom")),x=f.bottom-f.top-p-_;return{x:o=Math.round((o-f.left-v)/(f.right-f.left-v-y)*l.width/n.currentDevicePixelRatio),y:s=Math.round((s-f.top-p)/x*l.height/n.currentDevicePixelRatio)}},m.getConstraintWidth=function(a){return r(a,"max-width","clientWidth")},m.getConstraintHeight=function(a){return r(a,"max-height","clientHeight")},m._calculatePadding=function(a,n,o){return(n=m.getStyle(a,n)).indexOf("%")>-1?o*parseInt(n,10)/100:parseInt(n,10)},m._getParentNode=function(a){var n=a.parentNode;return n&&"[object ShadowRoot]"===n.toString()&&(n=n.host),n},m.getMaximumWidth=function(a){var n=m._getParentNode(a);if(!n)return a.clientWidth;var o=n.clientWidth,l=o-m._calculatePadding(n,"padding-left",o)-m._calculatePadding(n,"padding-right",o),f=m.getConstraintWidth(a);return isNaN(f)?l:Math.min(l,f)},m.getMaximumHeight=function(a){var n=m._getParentNode(a);if(!n)return a.clientHeight;var o=n.clientHeight,l=o-m._calculatePadding(n,"padding-top",o)-m._calculatePadding(n,"padding-bottom",o),f=m.getConstraintHeight(a);return isNaN(f)?l:Math.min(l,f)},m.getStyle=function(a,n){return a.currentStyle?a.currentStyle[n]:document.defaultView.getComputedStyle(a,null).getPropertyValue(n)},m.retinaScale=function(a,n){var o=a.currentDevicePixelRatio=n||"undefined"!=typeof window&&window.devicePixelRatio||1;if(1!==o){var s=a.canvas,d=a.height,l=a.width;s.height=d*o,s.width=l*o,a.ctx.scale(o,o),!s.style.height&&!s.style.width&&(s.style.height=d+"px",s.style.width=l+"px")}},m.fontString=function(a,n,o){return n+" "+a+"px "+o},m.longestText=function(a,n,o,s){var d=(s=s||{}).data=s.data||{},l=s.garbageCollect=s.garbageCollect||[];s.font!==n&&(d=s.data={},l=s.garbageCollect=[],s.font=n),a.font=n;var v,p,y,_,w,f=0,c=o.length;for(v=0;v<c;v++)if(null!=(_=o[v])&&!0!==m.isArray(_))f=m.measureText(a,d,l,f,_);else if(m.isArray(_))for(p=0,y=_.length;p<y;p++)null!=(w=_[p])&&!m.isArray(w)&&(f=m.measureText(a,d,l,f,w));var x=l.length/2;if(x>o.length){for(v=0;v<x;v++)delete d[l[v]];l.splice(0,x)}return f},m.measureText=function(a,n,o,s,d){var l=n[d];return l||(l=n[d]=a.measureText(d).width,o.push(d)),l>s&&(s=l),s},m.numberOfLabelLines=function(a){var n=1;return m.each(a,function(o){m.isArray(o)&&o.length>n&&(n=o.length)}),n},m.color=Kt?function(a){return a instanceof CanvasGradient&&(a=F.global.defaultColor),Kt(a)}:function(a){return console.error("Color.js not found!"),a},m.getHoverColor=function(a){return a instanceof CanvasPattern||a instanceof CanvasGradient?a:m.color(a).saturate(.5).darken(.1).rgbString()}}(),W._adapters=ea,W.Animation=Wr,W.animationService=Nr,W.controllers=hn,W.DatasetController=me,W.defaults=F,W.Element=De,W.elements=se,W.Interaction=vt,W.layouts=pe,W.platform=gt,W.plugins=j,W.Scale=le,W.scaleService=Rt,W.Ticks=Wt,W.Tooltip=Kr,W.helpers.each(wl,function(e,t){W.scaleService.registerScaleType(t,e,e._defaults)}),Ge)Ge.hasOwnProperty(qn)&&W.plugins.register(Ge[qn]);W.platform.initialize();var El=W;return"undefined"!=typeof window&&(window.Chart=W),W.Chart=W,W.Legend=Ge.legend._element,W.Title=Ge.title._element,W.pluginService=W.plugins,W.PluginBase=W.Element.extend({}),W.canvasHelpers=W.helpers.canvas,W.layoutService=W.layouts,W.LinearScaleBase=sr,W.helpers.each(["Bar","Bubble","Doughnut","Line","PolarArea","Radar","Scatter"],function(e){W[e]=function(t,r){return new W(t,W.helpers.merge(r||{},{type:e.charAt(0).toLowerCase()+e.slice(1)}))}}),El});
\ No newline at end of file
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.5f6140b407c420b8.css b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.5f6140b407c420b8.css
new file mode 100644 (file)
index 0000000..2b94372
--- /dev/null
@@ -0,0 +1,17 @@
+.swagger-ui{color:#3b4151;font-family:sans-serif}.swagger-ui html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.15}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure{margin:1em 40px}.swagger-ui hr{box-sizing:content-box;height:0;overflow:visible}.swagger-ui pre{font-family:monospace,monospace;font-size:1em}.swagger-ui a{-webkit-text-decoration-skip:objects;background-color:transparent}.swagger-ui abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}.swagger-ui b,.swagger-ui strong{font-weight:inherit;font-weight:bolder}.swagger-ui code,.swagger-ui kbd,.swagger-ui samp{font-family:monospace,monospace;font-size:1em}.swagger-ui dfn{font-style:italic}.swagger-ui mark{background-color:#ff0;color:#000}.swagger-ui small{font-size:80%}.swagger-ui sub,.swagger-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.swagger-ui sub{bottom:-.25em}.swagger-ui sup{top:-.5em}.swagger-ui audio,.swagger-ui video{display:inline-block}.swagger-ui audio:not([controls]){display:none;height:0}.swagger-ui img{border-style:none}.swagger-ui svg:not(:root){overflow:hidden}.swagger-ui button,.swagger-ui input,.swagger-ui optgroup,.swagger-ui select,.swagger-ui textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}.swagger-ui button,.swagger-ui input{overflow:visible}.swagger-ui button,.swagger-ui select{text-transform:none}.swagger-ui [type=reset],.swagger-ui [type=submit],.swagger-ui button,.swagger-ui html [type=button]{-webkit-appearance:button}.swagger-ui [type=button]::-moz-focus-inner,.swagger-ui [type=reset]::-moz-focus-inner,.swagger-ui [type=submit]::-moz-focus-inner,.swagger-ui button::-moz-focus-inner{border-style:none;padding:0}.swagger-ui [type=button]:-moz-focusring,.swagger-ui [type=reset]:-moz-focusring,.swagger-ui [type=submit]:-moz-focusring,.swagger-ui button:-moz-focusring{outline:1px dotted ButtonText}.swagger-ui fieldset{padding:.35em .75em .625em}.swagger-ui legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.swagger-ui progress{display:inline-block;vertical-align:baseline}.swagger-ui textarea{overflow:auto}.swagger-ui [type=checkbox],.swagger-ui [type=radio]{box-sizing:border-box;padding:0}.swagger-ui [type=number]::-webkit-inner-spin-button,.swagger-ui [type=number]::-webkit-outer-spin-button{height:auto}.swagger-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.swagger-ui [type=search]::-webkit-search-cancel-button,.swagger-ui [type=search]::-webkit-search-decoration{-webkit-appearance:none}.swagger-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.swagger-ui details,.swagger-ui menu{display:block}.swagger-ui summary{display:list-item}.swagger-ui canvas{display:inline-block}.swagger-ui [hidden],.swagger-ui template{display:none}.swagger-ui .debug *{outline:1px solid gold}.swagger-ui .debug-white *{outline:1px solid #fff}.swagger-ui .debug-black *{outline:1px solid #000}.swagger-ui .debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.swagger-ui .debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.swagger-ui .debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.swagger-ui .debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}.swagger-ui .border-box,.swagger-ui a,.swagger-ui article,.swagger-ui body,.swagger-ui code,.swagger-ui dd,.swagger-ui div,.swagger-ui dl,.swagger-ui dt,.swagger-ui fieldset,.swagger-ui footer,.swagger-ui form,.swagger-ui h1,.swagger-ui h2,.swagger-ui h3,.swagger-ui h4,.swagger-ui h5,.swagger-ui h6,.swagger-ui header,.swagger-ui html,.swagger-ui input[type=email],.swagger-ui input[type=number],.swagger-ui input[type=password],.swagger-ui input[type=tel],.swagger-ui input[type=text],.swagger-ui input[type=url],.swagger-ui legend,.swagger-ui li,.swagger-ui main,.swagger-ui ol,.swagger-ui p,.swagger-ui pre,.swagger-ui section,.swagger-ui table,.swagger-ui td,.swagger-ui textarea,.swagger-ui th,.swagger-ui tr,.swagger-ui ul{box-sizing:border-box}.swagger-ui .aspect-ratio{height:0;position:relative}.swagger-ui .aspect-ratio--16x9{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1{padding-bottom:100%}.swagger-ui .aspect-ratio--object{height:100%;inset:0;position:absolute;width:100%;z-index:100}@media screen and (min-width:30em){.swagger-ui .aspect-ratio-ns{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-ns{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-ns{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-ns{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-ns{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-ns{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-ns{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-ns{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-ns{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-ns{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-ns{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-ns{padding-bottom:100%}.swagger-ui .aspect-ratio--object-ns{height:100%;inset:0;position:absolute;width:100%;z-index:100}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .aspect-ratio-m{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-m{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-m{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-m{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-m{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-m{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-m{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-m{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-m{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-m{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-m{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-m{padding-bottom:100%}.swagger-ui .aspect-ratio--object-m{height:100%;inset:0;position:absolute;width:100%;z-index:100}}@media screen and (min-width:60em){.swagger-ui .aspect-ratio-l{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-l{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-l{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-l{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-l{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-l{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-l{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-l{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-l{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-l{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-l{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-l{padding-bottom:100%}.swagger-ui .aspect-ratio--object-l{height:100%;inset:0;position:absolute;width:100%;z-index:100}}.swagger-ui img{max-width:100%}.swagger-ui .cover{background-size:cover!important}.swagger-ui .contain{background-size:contain!important}@media screen and (min-width:30em){.swagger-ui .cover-ns{background-size:cover!important}.swagger-ui .contain-ns{background-size:contain!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cover-m{background-size:cover!important}.swagger-ui .contain-m{background-size:contain!important}}@media screen and (min-width:60em){.swagger-ui .cover-l{background-size:cover!important}.swagger-ui .contain-l{background-size:contain!important}}.swagger-ui .bg-center{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left{background-position:0;background-repeat:no-repeat}@media screen and (min-width:30em){.swagger-ui .bg-center-ns{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-ns{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-ns{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-ns{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-ns{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bg-center-m{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-m{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-m{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-m{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-m{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:60em){.swagger-ui .bg-center-l{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-l{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-l{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-l{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-l{background-position:0;background-repeat:no-repeat}}.swagger-ui .outline{outline:1px solid}.swagger-ui .outline-transparent{outline:1px solid transparent}.swagger-ui .outline-0{outline:0}@media screen and (min-width:30em){.swagger-ui .outline-ns{outline:1px solid}.swagger-ui .outline-transparent-ns{outline:1px solid transparent}.swagger-ui .outline-0-ns{outline:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .outline-m{outline:1px solid}.swagger-ui .outline-transparent-m{outline:1px solid transparent}.swagger-ui .outline-0-m{outline:0}}@media screen and (min-width:60em){.swagger-ui .outline-l{outline:1px solid}.swagger-ui .outline-transparent-l{outline:1px solid transparent}.swagger-ui .outline-0-l{outline:0}}.swagger-ui .ba{border-style:solid;border-width:1px}.swagger-ui .bt{border-top-style:solid;border-top-width:1px}.swagger-ui .br{border-right-style:solid;border-right-width:1px}.swagger-ui .bb{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl{border-left-style:solid;border-left-width:1px}.swagger-ui .bn{border-style:none;border-width:0}@media screen and (min-width:30em){.swagger-ui .ba-ns{border-style:solid;border-width:1px}.swagger-ui .bt-ns{border-top-style:solid;border-top-width:1px}.swagger-ui .br-ns{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-ns{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-ns{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ba-m{border-style:solid;border-width:1px}.swagger-ui .bt-m{border-top-style:solid;border-top-width:1px}.swagger-ui .br-m{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-m{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-m{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.swagger-ui .ba-l{border-style:solid;border-width:1px}.swagger-ui .bt-l{border-top-style:solid;border-top-width:1px}.swagger-ui .br-l{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-l{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-l{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-l{border-style:none;border-width:0}}.swagger-ui .b--black{border-color:#000}.swagger-ui .b--near-black{border-color:#111}.swagger-ui .b--dark-gray{border-color:#333}.swagger-ui .b--mid-gray{border-color:#555}.swagger-ui .b--gray{border-color:#777}.swagger-ui .b--silver{border-color:#999}.swagger-ui .b--light-silver{border-color:#aaa}.swagger-ui .b--moon-gray{border-color:#ccc}.swagger-ui .b--light-gray{border-color:#eee}.swagger-ui .b--near-white{border-color:#f4f4f4}.swagger-ui .b--white{border-color:#fff}.swagger-ui .b--white-90{border-color:#ffffffe6}.swagger-ui .b--white-80{border-color:#fffc}.swagger-ui .b--white-70{border-color:#ffffffb3}.swagger-ui .b--white-60{border-color:#fff9}.swagger-ui .b--white-50{border-color:#ffffff80}.swagger-ui .b--white-40{border-color:#fff6}.swagger-ui .b--white-30{border-color:#ffffff4d}.swagger-ui .b--white-20{border-color:#fff3}.swagger-ui .b--white-10{border-color:#ffffff1a}.swagger-ui .b--white-05{border-color:#ffffff0d}.swagger-ui .b--white-025{border-color:#ffffff06}.swagger-ui .b--white-0125{border-color:#ffffff03}.swagger-ui .b--black-90{border-color:#000000e6}.swagger-ui .b--black-80{border-color:#000c}.swagger-ui .b--black-70{border-color:#000000b3}.swagger-ui .b--black-60{border-color:#0009}.swagger-ui .b--black-50{border-color:#00000080}.swagger-ui .b--black-40{border-color:#0006}.swagger-ui .b--black-30{border-color:#0000004d}.swagger-ui .b--black-20{border-color:#0003}.swagger-ui .b--black-10{border-color:#0000001a}.swagger-ui .b--black-05{border-color:#0000000d}.swagger-ui .b--black-025{border-color:#00000006}.swagger-ui .b--black-0125{border-color:#00000003}.swagger-ui .b--dark-red{border-color:#e7040f}.swagger-ui .b--red{border-color:#ff4136}.swagger-ui .b--light-red{border-color:#ff725c}.swagger-ui .b--orange{border-color:#ff6300}.swagger-ui .b--gold{border-color:#ffb700}.swagger-ui .b--yellow{border-color:gold}.swagger-ui .b--light-yellow{border-color:#fbf1a9}.swagger-ui .b--purple{border-color:#5e2ca5}.swagger-ui .b--light-purple{border-color:#a463f2}.swagger-ui .b--dark-pink{border-color:#d5008f}.swagger-ui .b--hot-pink{border-color:#ff41b4}.swagger-ui .b--pink{border-color:#ff80cc}.swagger-ui .b--light-pink{border-color:#ffa3d7}.swagger-ui .b--dark-green{border-color:#137752}.swagger-ui .b--green{border-color:#19a974}.swagger-ui .b--light-green{border-color:#9eebcf}.swagger-ui .b--navy{border-color:#001b44}.swagger-ui .b--dark-blue{border-color:#00449e}.swagger-ui .b--blue{border-color:#357edd}.swagger-ui .b--light-blue{border-color:#96ccff}.swagger-ui .b--lightest-blue{border-color:#cdecff}.swagger-ui .b--washed-blue{border-color:#f6fffe}.swagger-ui .b--washed-green{border-color:#e8fdf5}.swagger-ui .b--washed-yellow{border-color:#fffceb}.swagger-ui .b--washed-red{border-color:#ffdfdf}.swagger-ui .b--transparent{border-color:transparent}.swagger-ui .b--inherit{border-color:inherit}.swagger-ui .br0{border-radius:0}.swagger-ui .br1{border-radius:.125rem}.swagger-ui .br2{border-radius:.25rem}.swagger-ui .br3{border-radius:.5rem}.swagger-ui .br4{border-radius:1rem}.swagger-ui .br-100{border-radius:100%}.swagger-ui .br-pill{border-radius:9999px}.swagger-ui .br--bottom{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left{border-bottom-right-radius:0;border-top-right-radius:0}@media screen and (min-width:30em){.swagger-ui .br0-ns{border-radius:0}.swagger-ui .br1-ns{border-radius:.125rem}.swagger-ui .br2-ns{border-radius:.25rem}.swagger-ui .br3-ns{border-radius:.5rem}.swagger-ui .br4-ns{border-radius:1rem}.swagger-ui .br-100-ns{border-radius:100%}.swagger-ui .br-pill-ns{border-radius:9999px}.swagger-ui .br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-ns{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-ns{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .br0-m{border-radius:0}.swagger-ui .br1-m{border-radius:.125rem}.swagger-ui .br2-m{border-radius:.25rem}.swagger-ui .br3-m{border-radius:.5rem}.swagger-ui .br4-m{border-radius:1rem}.swagger-ui .br-100-m{border-radius:100%}.swagger-ui .br-pill-m{border-radius:9999px}.swagger-ui .br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-m{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-m{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:60em){.swagger-ui .br0-l{border-radius:0}.swagger-ui .br1-l{border-radius:.125rem}.swagger-ui .br2-l{border-radius:.25rem}.swagger-ui .br3-l{border-radius:.5rem}.swagger-ui .br4-l{border-radius:1rem}.swagger-ui .br-100-l{border-radius:100%}.swagger-ui .br-pill-l{border-radius:9999px}.swagger-ui .br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-l{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-l{border-bottom-right-radius:0;border-top-right-radius:0}}.swagger-ui .b--dotted{border-style:dotted}.swagger-ui .b--dashed{border-style:dashed}.swagger-ui .b--solid{border-style:solid}.swagger-ui .b--none{border-style:none}@media screen and (min-width:30em){.swagger-ui .b--dotted-ns{border-style:dotted}.swagger-ui .b--dashed-ns{border-style:dashed}.swagger-ui .b--solid-ns{border-style:solid}.swagger-ui .b--none-ns{border-style:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .b--dotted-m{border-style:dotted}.swagger-ui .b--dashed-m{border-style:dashed}.swagger-ui .b--solid-m{border-style:solid}.swagger-ui .b--none-m{border-style:none}}@media screen and (min-width:60em){.swagger-ui .b--dotted-l{border-style:dotted}.swagger-ui .b--dashed-l{border-style:dashed}.swagger-ui .b--solid-l{border-style:solid}.swagger-ui .b--none-l{border-style:none}}.swagger-ui .bw0{border-width:0}.swagger-ui .bw1{border-width:.125rem}.swagger-ui .bw2{border-width:.25rem}.swagger-ui .bw3{border-width:.5rem}.swagger-ui .bw4{border-width:1rem}.swagger-ui .bw5{border-width:2rem}.swagger-ui .bt-0{border-top-width:0}.swagger-ui .br-0{border-right-width:0}.swagger-ui .bb-0{border-bottom-width:0}.swagger-ui .bl-0{border-left-width:0}@media screen and (min-width:30em){.swagger-ui .bw0-ns{border-width:0}.swagger-ui .bw1-ns{border-width:.125rem}.swagger-ui .bw2-ns{border-width:.25rem}.swagger-ui .bw3-ns{border-width:.5rem}.swagger-ui .bw4-ns{border-width:1rem}.swagger-ui .bw5-ns{border-width:2rem}.swagger-ui .bt-0-ns{border-top-width:0}.swagger-ui .br-0-ns{border-right-width:0}.swagger-ui .bb-0-ns{border-bottom-width:0}.swagger-ui .bl-0-ns{border-left-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bw0-m{border-width:0}.swagger-ui .bw1-m{border-width:.125rem}.swagger-ui .bw2-m{border-width:.25rem}.swagger-ui .bw3-m{border-width:.5rem}.swagger-ui .bw4-m{border-width:1rem}.swagger-ui .bw5-m{border-width:2rem}.swagger-ui .bt-0-m{border-top-width:0}.swagger-ui .br-0-m{border-right-width:0}.swagger-ui .bb-0-m{border-bottom-width:0}.swagger-ui .bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.swagger-ui .bw0-l{border-width:0}.swagger-ui .bw1-l{border-width:.125rem}.swagger-ui .bw2-l{border-width:.25rem}.swagger-ui .bw3-l{border-width:.5rem}.swagger-ui .bw4-l{border-width:1rem}.swagger-ui .bw5-l{border-width:2rem}.swagger-ui .bt-0-l{border-top-width:0}.swagger-ui .br-0-l{border-right-width:0}.swagger-ui .bb-0-l{border-bottom-width:0}.swagger-ui .bl-0-l{border-left-width:0}}.swagger-ui .shadow-1{box-shadow:0 0 4px 2px #0003}.swagger-ui .shadow-2{box-shadow:0 0 8px 2px #0003}.swagger-ui .shadow-3{box-shadow:2px 2px 4px 2px #0003}.swagger-ui .shadow-4{box-shadow:2px 2px 8px #0003}.swagger-ui .shadow-5{box-shadow:4px 4px 8px #0003}@media screen and (min-width:30em){.swagger-ui .shadow-1-ns{box-shadow:0 0 4px 2px #0003}.swagger-ui .shadow-2-ns{box-shadow:0 0 8px 2px #0003}.swagger-ui .shadow-3-ns{box-shadow:2px 2px 4px 2px #0003}.swagger-ui .shadow-4-ns{box-shadow:2px 2px 8px #0003}.swagger-ui .shadow-5-ns{box-shadow:4px 4px 8px #0003}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .shadow-1-m{box-shadow:0 0 4px 2px #0003}.swagger-ui .shadow-2-m{box-shadow:0 0 8px 2px #0003}.swagger-ui .shadow-3-m{box-shadow:2px 2px 4px 2px #0003}.swagger-ui .shadow-4-m{box-shadow:2px 2px 8px #0003}.swagger-ui .shadow-5-m{box-shadow:4px 4px 8px #0003}}@media screen and (min-width:60em){.swagger-ui .shadow-1-l{box-shadow:0 0 4px 2px #0003}.swagger-ui .shadow-2-l{box-shadow:0 0 8px 2px #0003}.swagger-ui .shadow-3-l{box-shadow:2px 2px 4px 2px #0003}.swagger-ui .shadow-4-l{box-shadow:2px 2px 8px #0003}.swagger-ui .shadow-5-l{box-shadow:4px 4px 8px #0003}}.swagger-ui .pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.swagger-ui .top-0{top:0}.swagger-ui .right-0{right:0}.swagger-ui .bottom-0{bottom:0}.swagger-ui .left-0{left:0}.swagger-ui .top-1{top:1rem}.swagger-ui .right-1{right:1rem}.swagger-ui .bottom-1{bottom:1rem}.swagger-ui .left-1{left:1rem}.swagger-ui .top-2{top:2rem}.swagger-ui .right-2{right:2rem}.swagger-ui .bottom-2{bottom:2rem}.swagger-ui .left-2{left:2rem}.swagger-ui .top--1{top:-1rem}.swagger-ui .right--1{right:-1rem}.swagger-ui .bottom--1{bottom:-1rem}.swagger-ui .left--1{left:-1rem}.swagger-ui .top--2{top:-2rem}.swagger-ui .right--2{right:-2rem}.swagger-ui .bottom--2{bottom:-2rem}.swagger-ui .left--2{left:-2rem}.swagger-ui .absolute--fill{inset:0}@media screen and (min-width:30em){.swagger-ui .top-0-ns{top:0}.swagger-ui .left-0-ns{left:0}.swagger-ui .right-0-ns{right:0}.swagger-ui .bottom-0-ns{bottom:0}.swagger-ui .top-1-ns{top:1rem}.swagger-ui .left-1-ns{left:1rem}.swagger-ui .right-1-ns{right:1rem}.swagger-ui .bottom-1-ns{bottom:1rem}.swagger-ui .top-2-ns{top:2rem}.swagger-ui .left-2-ns{left:2rem}.swagger-ui .right-2-ns{right:2rem}.swagger-ui .bottom-2-ns{bottom:2rem}.swagger-ui .top--1-ns{top:-1rem}.swagger-ui .right--1-ns{right:-1rem}.swagger-ui .bottom--1-ns{bottom:-1rem}.swagger-ui .left--1-ns{left:-1rem}.swagger-ui .top--2-ns{top:-2rem}.swagger-ui .right--2-ns{right:-2rem}.swagger-ui .bottom--2-ns{bottom:-2rem}.swagger-ui .left--2-ns{left:-2rem}.swagger-ui .absolute--fill-ns{inset:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .top-0-m{top:0}.swagger-ui .left-0-m{left:0}.swagger-ui .right-0-m{right:0}.swagger-ui .bottom-0-m{bottom:0}.swagger-ui .top-1-m{top:1rem}.swagger-ui .left-1-m{left:1rem}.swagger-ui .right-1-m{right:1rem}.swagger-ui .bottom-1-m{bottom:1rem}.swagger-ui .top-2-m{top:2rem}.swagger-ui .left-2-m{left:2rem}.swagger-ui .right-2-m{right:2rem}.swagger-ui .bottom-2-m{bottom:2rem}.swagger-ui .top--1-m{top:-1rem}.swagger-ui .right--1-m{right:-1rem}.swagger-ui .bottom--1-m{bottom:-1rem}.swagger-ui .left--1-m{left:-1rem}.swagger-ui .top--2-m{top:-2rem}.swagger-ui .right--2-m{right:-2rem}.swagger-ui .bottom--2-m{bottom:-2rem}.swagger-ui .left--2-m{left:-2rem}.swagger-ui .absolute--fill-m{inset:0}}@media screen and (min-width:60em){.swagger-ui .top-0-l{top:0}.swagger-ui .left-0-l{left:0}.swagger-ui .right-0-l{right:0}.swagger-ui .bottom-0-l{bottom:0}.swagger-ui .top-1-l{top:1rem}.swagger-ui .left-1-l{left:1rem}.swagger-ui .right-1-l{right:1rem}.swagger-ui .bottom-1-l{bottom:1rem}.swagger-ui .top-2-l{top:2rem}.swagger-ui .left-2-l{left:2rem}.swagger-ui .right-2-l{right:2rem}.swagger-ui .bottom-2-l{bottom:2rem}.swagger-ui .top--1-l{top:-1rem}.swagger-ui .right--1-l{right:-1rem}.swagger-ui .bottom--1-l{bottom:-1rem}.swagger-ui .left--1-l{left:-1rem}.swagger-ui .top--2-l{top:-2rem}.swagger-ui .right--2-l{right:-2rem}.swagger-ui .bottom--2-l{bottom:-2rem}.swagger-ui .left--2-l{left:-2rem}.swagger-ui .absolute--fill-l{inset:0}}.swagger-ui .cf:after,.swagger-ui .cf:before{content:" ";display:table}.swagger-ui .cf:after{clear:both}.swagger-ui .cf{*zoom:1}.swagger-ui .cl{clear:left}.swagger-ui .cr{clear:right}.swagger-ui .cb{clear:both}.swagger-ui .cn{clear:none}@media screen and (min-width:30em){.swagger-ui .cl-ns{clear:left}.swagger-ui .cr-ns{clear:right}.swagger-ui .cb-ns{clear:both}.swagger-ui .cn-ns{clear:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cl-m{clear:left}.swagger-ui .cr-m{clear:right}.swagger-ui .cb-m{clear:both}.swagger-ui .cn-m{clear:none}}@media screen and (min-width:60em){.swagger-ui .cl-l{clear:left}.swagger-ui .cr-l{clear:right}.swagger-ui .cb-l{clear:both}.swagger-ui .cn-l{clear:none}}.swagger-ui .flex{display:flex}.swagger-ui .inline-flex{display:inline-flex}.swagger-ui .flex-auto{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none{flex:none}.swagger-ui .flex-column{flex-direction:column}.swagger-ui .flex-row{flex-direction:row}.swagger-ui .flex-wrap{flex-wrap:wrap}.swagger-ui .flex-nowrap{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse{flex-direction:column-reverse}.swagger-ui .flex-row-reverse{flex-direction:row-reverse}.swagger-ui .items-start{align-items:flex-start}.swagger-ui .items-end{align-items:flex-end}.swagger-ui .items-center{align-items:center}.swagger-ui .items-baseline{align-items:baseline}.swagger-ui .items-stretch{align-items:stretch}.swagger-ui .self-start{align-self:flex-start}.swagger-ui .self-end{align-self:flex-end}.swagger-ui .self-center{align-self:center}.swagger-ui .self-baseline{align-self:baseline}.swagger-ui .self-stretch{align-self:stretch}.swagger-ui .justify-start{justify-content:flex-start}.swagger-ui .justify-end{justify-content:flex-end}.swagger-ui .justify-center{justify-content:center}.swagger-ui .justify-between{justify-content:space-between}.swagger-ui .justify-around{justify-content:space-around}.swagger-ui .content-start{align-content:flex-start}.swagger-ui .content-end{align-content:flex-end}.swagger-ui .content-center{align-content:center}.swagger-ui .content-between{align-content:space-between}.swagger-ui .content-around{align-content:space-around}.swagger-ui .content-stretch{align-content:stretch}.swagger-ui .order-0{order:0}.swagger-ui .order-1{order:1}.swagger-ui .order-2{order:2}.swagger-ui .order-3{order:3}.swagger-ui .order-4{order:4}.swagger-ui .order-5{order:5}.swagger-ui .order-6{order:6}.swagger-ui .order-7{order:7}.swagger-ui .order-8{order:8}.swagger-ui .order-last{order:99999}.swagger-ui .flex-grow-0{flex-grow:0}.swagger-ui .flex-grow-1{flex-grow:1}.swagger-ui .flex-shrink-0{flex-shrink:0}.swagger-ui .flex-shrink-1{flex-shrink:1}@media screen and (min-width:30em){.swagger-ui .flex-ns{display:flex}.swagger-ui .inline-flex-ns{display:inline-flex}.swagger-ui .flex-auto-ns{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-ns{flex:none}.swagger-ui .flex-column-ns{flex-direction:column}.swagger-ui .flex-row-ns{flex-direction:row}.swagger-ui .flex-wrap-ns{flex-wrap:wrap}.swagger-ui .flex-nowrap-ns{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-ns{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-ns{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-ns{flex-direction:row-reverse}.swagger-ui .items-start-ns{align-items:flex-start}.swagger-ui .items-end-ns{align-items:flex-end}.swagger-ui .items-center-ns{align-items:center}.swagger-ui .items-baseline-ns{align-items:baseline}.swagger-ui .items-stretch-ns{align-items:stretch}.swagger-ui .self-start-ns{align-self:flex-start}.swagger-ui .self-end-ns{align-self:flex-end}.swagger-ui .self-center-ns{align-self:center}.swagger-ui .self-baseline-ns{align-self:baseline}.swagger-ui .self-stretch-ns{align-self:stretch}.swagger-ui .justify-start-ns{justify-content:flex-start}.swagger-ui .justify-end-ns{justify-content:flex-end}.swagger-ui .justify-center-ns{justify-content:center}.swagger-ui .justify-between-ns{justify-content:space-between}.swagger-ui .justify-around-ns{justify-content:space-around}.swagger-ui .content-start-ns{align-content:flex-start}.swagger-ui .content-end-ns{align-content:flex-end}.swagger-ui .content-center-ns{align-content:center}.swagger-ui .content-between-ns{align-content:space-between}.swagger-ui .content-around-ns{align-content:space-around}.swagger-ui .content-stretch-ns{align-content:stretch}.swagger-ui .order-0-ns{order:0}.swagger-ui .order-1-ns{order:1}.swagger-ui .order-2-ns{order:2}.swagger-ui .order-3-ns{order:3}.swagger-ui .order-4-ns{order:4}.swagger-ui .order-5-ns{order:5}.swagger-ui .order-6-ns{order:6}.swagger-ui .order-7-ns{order:7}.swagger-ui .order-8-ns{order:8}.swagger-ui .order-last-ns{order:99999}.swagger-ui .flex-grow-0-ns{flex-grow:0}.swagger-ui .flex-grow-1-ns{flex-grow:1}.swagger-ui .flex-shrink-0-ns{flex-shrink:0}.swagger-ui .flex-shrink-1-ns{flex-shrink:1}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .flex-m{display:flex}.swagger-ui .inline-flex-m{display:inline-flex}.swagger-ui .flex-auto-m{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-m{flex:none}.swagger-ui .flex-column-m{flex-direction:column}.swagger-ui .flex-row-m{flex-direction:row}.swagger-ui .flex-wrap-m{flex-wrap:wrap}.swagger-ui .flex-nowrap-m{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-m{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-m{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-m{flex-direction:row-reverse}.swagger-ui .items-start-m{align-items:flex-start}.swagger-ui .items-end-m{align-items:flex-end}.swagger-ui .items-center-m{align-items:center}.swagger-ui .items-baseline-m{align-items:baseline}.swagger-ui .items-stretch-m{align-items:stretch}.swagger-ui .self-start-m{align-self:flex-start}.swagger-ui .self-end-m{align-self:flex-end}.swagger-ui .self-center-m{align-self:center}.swagger-ui .self-baseline-m{align-self:baseline}.swagger-ui .self-stretch-m{align-self:stretch}.swagger-ui .justify-start-m{justify-content:flex-start}.swagger-ui .justify-end-m{justify-content:flex-end}.swagger-ui .justify-center-m{justify-content:center}.swagger-ui .justify-between-m{justify-content:space-between}.swagger-ui .justify-around-m{justify-content:space-around}.swagger-ui .content-start-m{align-content:flex-start}.swagger-ui .content-end-m{align-content:flex-end}.swagger-ui .content-center-m{align-content:center}.swagger-ui .content-between-m{align-content:space-between}.swagger-ui .content-around-m{align-content:space-around}.swagger-ui .content-stretch-m{align-content:stretch}.swagger-ui .order-0-m{order:0}.swagger-ui .order-1-m{order:1}.swagger-ui .order-2-m{order:2}.swagger-ui .order-3-m{order:3}.swagger-ui .order-4-m{order:4}.swagger-ui .order-5-m{order:5}.swagger-ui .order-6-m{order:6}.swagger-ui .order-7-m{order:7}.swagger-ui .order-8-m{order:8}.swagger-ui .order-last-m{order:99999}.swagger-ui .flex-grow-0-m{flex-grow:0}.swagger-ui .flex-grow-1-m{flex-grow:1}.swagger-ui .flex-shrink-0-m{flex-shrink:0}.swagger-ui .flex-shrink-1-m{flex-shrink:1}}@media screen and (min-width:60em){.swagger-ui .flex-l{display:flex}.swagger-ui .inline-flex-l{display:inline-flex}.swagger-ui .flex-auto-l{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-l{flex:none}.swagger-ui .flex-column-l{flex-direction:column}.swagger-ui .flex-row-l{flex-direction:row}.swagger-ui .flex-wrap-l{flex-wrap:wrap}.swagger-ui .flex-nowrap-l{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-l{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-l{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-l{flex-direction:row-reverse}.swagger-ui .items-start-l{align-items:flex-start}.swagger-ui .items-end-l{align-items:flex-end}.swagger-ui .items-center-l{align-items:center}.swagger-ui .items-baseline-l{align-items:baseline}.swagger-ui .items-stretch-l{align-items:stretch}.swagger-ui .self-start-l{align-self:flex-start}.swagger-ui .self-end-l{align-self:flex-end}.swagger-ui .self-center-l{align-self:center}.swagger-ui .self-baseline-l{align-self:baseline}.swagger-ui .self-stretch-l{align-self:stretch}.swagger-ui .justify-start-l{justify-content:flex-start}.swagger-ui .justify-end-l{justify-content:flex-end}.swagger-ui .justify-center-l{justify-content:center}.swagger-ui .justify-between-l{justify-content:space-between}.swagger-ui .justify-around-l{justify-content:space-around}.swagger-ui .content-start-l{align-content:flex-start}.swagger-ui .content-end-l{align-content:flex-end}.swagger-ui .content-center-l{align-content:center}.swagger-ui .content-between-l{align-content:space-between}.swagger-ui .content-around-l{align-content:space-around}.swagger-ui .content-stretch-l{align-content:stretch}.swagger-ui .order-0-l{order:0}.swagger-ui .order-1-l{order:1}.swagger-ui .order-2-l{order:2}.swagger-ui .order-3-l{order:3}.swagger-ui .order-4-l{order:4}.swagger-ui .order-5-l{order:5}.swagger-ui .order-6-l{order:6}.swagger-ui .order-7-l{order:7}.swagger-ui .order-8-l{order:8}.swagger-ui .order-last-l{order:99999}.swagger-ui .flex-grow-0-l{flex-grow:0}.swagger-ui .flex-grow-1-l{flex-grow:1}.swagger-ui .flex-shrink-0-l{flex-shrink:0}.swagger-ui .flex-shrink-1-l{flex-shrink:1}}.swagger-ui .dn{display:none}.swagger-ui .di{display:inline}.swagger-ui .db{display:block}.swagger-ui .dib{display:inline-block}.swagger-ui .dit{display:inline-table}.swagger-ui .dt{display:table}.swagger-ui .dtc{display:table-cell}.swagger-ui .dt-row{display:table-row}.swagger-ui .dt-row-group{display:table-row-group}.swagger-ui .dt-column{display:table-column}.swagger-ui .dt-column-group{display:table-column-group}.swagger-ui .dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.swagger-ui .dn-ns{display:none}.swagger-ui .di-ns{display:inline}.swagger-ui .db-ns{display:block}.swagger-ui .dib-ns{display:inline-block}.swagger-ui .dit-ns{display:inline-table}.swagger-ui .dt-ns{display:table}.swagger-ui .dtc-ns{display:table-cell}.swagger-ui .dt-row-ns{display:table-row}.swagger-ui .dt-row-group-ns{display:table-row-group}.swagger-ui .dt-column-ns{display:table-column}.swagger-ui .dt-column-group-ns{display:table-column-group}.swagger-ui .dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .dn-m{display:none}.swagger-ui .di-m{display:inline}.swagger-ui .db-m{display:block}.swagger-ui .dib-m{display:inline-block}.swagger-ui .dit-m{display:inline-table}.swagger-ui .dt-m{display:table}.swagger-ui .dtc-m{display:table-cell}.swagger-ui .dt-row-m{display:table-row}.swagger-ui .dt-row-group-m{display:table-row-group}.swagger-ui .dt-column-m{display:table-column}.swagger-ui .dt-column-group-m{display:table-column-group}.swagger-ui .dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.swagger-ui .dn-l{display:none}.swagger-ui .di-l{display:inline}.swagger-ui .db-l{display:block}.swagger-ui .dib-l{display:inline-block}.swagger-ui .dit-l{display:inline-table}.swagger-ui .dt-l{display:table}.swagger-ui .dtc-l{display:table-cell}.swagger-ui .dt-row-l{display:table-row}.swagger-ui .dt-row-group-l{display:table-row-group}.swagger-ui .dt-column-l{display:table-column}.swagger-ui .dt-column-group-l{display:table-column-group}.swagger-ui .dt--fixed-l{table-layout:fixed;width:100%}}.swagger-ui .fl{_display:inline;float:left}.swagger-ui .fr{_display:inline;float:right}.swagger-ui .fn{float:none}@media screen and (min-width:30em){.swagger-ui .fl-ns{_display:inline;float:left}.swagger-ui .fr-ns{_display:inline;float:right}.swagger-ui .fn-ns{float:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .fl-m{_display:inline;float:left}.swagger-ui .fr-m{_display:inline;float:right}.swagger-ui .fn-m{float:none}}@media screen and (min-width:60em){.swagger-ui .fl-l{_display:inline;float:left}.swagger-ui .fr-l{_display:inline;float:right}.swagger-ui .fn-l{float:none}}.swagger-ui .sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.swagger-ui .serif{font-family:georgia,serif}.swagger-ui .system-sans-serif{font-family:sans-serif}.swagger-ui .system-serif{font-family:serif}.swagger-ui .code,.swagger-ui code{font-family:Consolas,monaco,monospace}.swagger-ui .courier{font-family:Courier Next,courier,monospace}.swagger-ui .helvetica{font-family:helvetica neue,helvetica,sans-serif}.swagger-ui .avenir{font-family:avenir next,avenir,sans-serif}.swagger-ui .athelas{font-family:athelas,georgia,serif}.swagger-ui .georgia{font-family:georgia,serif}.swagger-ui .times{font-family:times,serif}.swagger-ui .bodoni{font-family:Bodoni MT,serif}.swagger-ui .calisto{font-family:Calisto MT,serif}.swagger-ui .garamond{font-family:garamond,serif}.swagger-ui .baskerville{font-family:baskerville,serif}.swagger-ui .i{font-style:italic}.swagger-ui .fs-normal{font-style:normal}@media screen and (min-width:30em){.swagger-ui .i-ns{font-style:italic}.swagger-ui .fs-normal-ns{font-style:normal}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .i-m{font-style:italic}.swagger-ui .fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.swagger-ui .i-l{font-style:italic}.swagger-ui .fs-normal-l{font-style:normal}}.swagger-ui .normal{font-weight:400}.swagger-ui .b{font-weight:700}.swagger-ui .fw1{font-weight:100}.swagger-ui .fw2{font-weight:200}.swagger-ui .fw3{font-weight:300}.swagger-ui .fw4{font-weight:400}.swagger-ui .fw5{font-weight:500}.swagger-ui .fw6{font-weight:600}.swagger-ui .fw7{font-weight:700}.swagger-ui .fw8{font-weight:800}.swagger-ui .fw9{font-weight:900}@media screen and (min-width:30em){.swagger-ui .normal-ns{font-weight:400}.swagger-ui .b-ns{font-weight:700}.swagger-ui .fw1-ns{font-weight:100}.swagger-ui .fw2-ns{font-weight:200}.swagger-ui .fw3-ns{font-weight:300}.swagger-ui .fw4-ns{font-weight:400}.swagger-ui .fw5-ns{font-weight:500}.swagger-ui .fw6-ns{font-weight:600}.swagger-ui .fw7-ns{font-weight:700}.swagger-ui .fw8-ns{font-weight:800}.swagger-ui .fw9-ns{font-weight:900}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .normal-m{font-weight:400}.swagger-ui .b-m{font-weight:700}.swagger-ui .fw1-m{font-weight:100}.swagger-ui .fw2-m{font-weight:200}.swagger-ui .fw3-m{font-weight:300}.swagger-ui .fw4-m{font-weight:400}.swagger-ui .fw5-m{font-weight:500}.swagger-ui .fw6-m{font-weight:600}.swagger-ui .fw7-m{font-weight:700}.swagger-ui .fw8-m{font-weight:800}.swagger-ui .fw9-m{font-weight:900}}@media screen and (min-width:60em){.swagger-ui .normal-l{font-weight:400}.swagger-ui .b-l{font-weight:700}.swagger-ui .fw1-l{font-weight:100}.swagger-ui .fw2-l{font-weight:200}.swagger-ui .fw3-l{font-weight:300}.swagger-ui .fw4-l{font-weight:400}.swagger-ui .fw5-l{font-weight:500}.swagger-ui .fw6-l{font-weight:600}.swagger-ui .fw7-l{font-weight:700}.swagger-ui .fw8-l{font-weight:800}.swagger-ui .fw9-l{font-weight:900}}.swagger-ui .input-reset{-webkit-appearance:none;-moz-appearance:none}.swagger-ui .button-reset::-moz-focus-inner,.swagger-ui .input-reset::-moz-focus-inner{border:0;padding:0}.swagger-ui .h1{height:1rem}.swagger-ui .h2{height:2rem}.swagger-ui .h3{height:4rem}.swagger-ui .h4{height:8rem}.swagger-ui .h5{height:16rem}.swagger-ui .h-25{height:25%}.swagger-ui .h-50{height:50%}.swagger-ui .h-75{height:75%}.swagger-ui .h-100{height:100%}.swagger-ui .min-h-100{min-height:100%}.swagger-ui .vh-25{height:25vh}.swagger-ui .vh-50{height:50vh}.swagger-ui .vh-75{height:75vh}.swagger-ui .vh-100{height:100vh}.swagger-ui .min-vh-100{min-height:100vh}.swagger-ui .h-auto{height:auto}.swagger-ui .h-inherit{height:inherit}@media screen and (min-width:30em){.swagger-ui .h1-ns{height:1rem}.swagger-ui .h2-ns{height:2rem}.swagger-ui .h3-ns{height:4rem}.swagger-ui .h4-ns{height:8rem}.swagger-ui .h5-ns{height:16rem}.swagger-ui .h-25-ns{height:25%}.swagger-ui .h-50-ns{height:50%}.swagger-ui .h-75-ns{height:75%}.swagger-ui .h-100-ns{height:100%}.swagger-ui .min-h-100-ns{min-height:100%}.swagger-ui .vh-25-ns{height:25vh}.swagger-ui .vh-50-ns{height:50vh}.swagger-ui .vh-75-ns{height:75vh}.swagger-ui .vh-100-ns{height:100vh}.swagger-ui .min-vh-100-ns{min-height:100vh}.swagger-ui .h-auto-ns{height:auto}.swagger-ui .h-inherit-ns{height:inherit}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .h1-m{height:1rem}.swagger-ui .h2-m{height:2rem}.swagger-ui .h3-m{height:4rem}.swagger-ui .h4-m{height:8rem}.swagger-ui .h5-m{height:16rem}.swagger-ui .h-25-m{height:25%}.swagger-ui .h-50-m{height:50%}.swagger-ui .h-75-m{height:75%}.swagger-ui .h-100-m{height:100%}.swagger-ui .min-h-100-m{min-height:100%}.swagger-ui .vh-25-m{height:25vh}.swagger-ui .vh-50-m{height:50vh}.swagger-ui .vh-75-m{height:75vh}.swagger-ui .vh-100-m{height:100vh}.swagger-ui .min-vh-100-m{min-height:100vh}.swagger-ui .h-auto-m{height:auto}.swagger-ui .h-inherit-m{height:inherit}}@media screen and (min-width:60em){.swagger-ui .h1-l{height:1rem}.swagger-ui .h2-l{height:2rem}.swagger-ui .h3-l{height:4rem}.swagger-ui .h4-l{height:8rem}.swagger-ui .h5-l{height:16rem}.swagger-ui .h-25-l{height:25%}.swagger-ui .h-50-l{height:50%}.swagger-ui .h-75-l{height:75%}.swagger-ui .h-100-l{height:100%}.swagger-ui .min-h-100-l{min-height:100%}.swagger-ui .vh-25-l{height:25vh}.swagger-ui .vh-50-l{height:50vh}.swagger-ui .vh-75-l{height:75vh}.swagger-ui .vh-100-l{height:100vh}.swagger-ui .min-vh-100-l{min-height:100vh}.swagger-ui .h-auto-l{height:auto}.swagger-ui .h-inherit-l{height:inherit}}.swagger-ui .tracked{letter-spacing:.1em}.swagger-ui .tracked-tight{letter-spacing:-.05em}.swagger-ui .tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.swagger-ui .tracked-ns{letter-spacing:.1em}.swagger-ui .tracked-tight-ns{letter-spacing:-.05em}.swagger-ui .tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tracked-m{letter-spacing:.1em}.swagger-ui .tracked-tight-m{letter-spacing:-.05em}.swagger-ui .tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.swagger-ui .tracked-l{letter-spacing:.1em}.swagger-ui .tracked-tight-l{letter-spacing:-.05em}.swagger-ui .tracked-mega-l{letter-spacing:.25em}}.swagger-ui .lh-solid{line-height:1}.swagger-ui .lh-title{line-height:1.25}.swagger-ui .lh-copy{line-height:1.5}@media screen and (min-width:30em){.swagger-ui .lh-solid-ns{line-height:1}.swagger-ui .lh-title-ns{line-height:1.25}.swagger-ui .lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .lh-solid-m{line-height:1}.swagger-ui .lh-title-m{line-height:1.25}.swagger-ui .lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.swagger-ui .lh-solid-l{line-height:1}.swagger-ui .lh-title-l{line-height:1.25}.swagger-ui .lh-copy-l{line-height:1.5}}.swagger-ui .link{text-decoration:none}.swagger-ui .link,.swagger-ui .link:active,.swagger-ui .link:focus,.swagger-ui .link:hover,.swagger-ui .link:link,.swagger-ui .link:visited{transition:color .15s ease-in}.swagger-ui .link:focus{outline:1px dotted currentColor}.swagger-ui .list{list-style-type:none}.swagger-ui .mw-100{max-width:100%}.swagger-ui .mw1{max-width:1rem}.swagger-ui .mw2{max-width:2rem}.swagger-ui .mw3{max-width:4rem}.swagger-ui .mw4{max-width:8rem}.swagger-ui .mw5{max-width:16rem}.swagger-ui .mw6{max-width:32rem}.swagger-ui .mw7{max-width:48rem}.swagger-ui .mw8{max-width:64rem}.swagger-ui .mw9{max-width:96rem}.swagger-ui .mw-none{max-width:none}@media screen and (min-width:30em){.swagger-ui .mw-100-ns{max-width:100%}.swagger-ui .mw1-ns{max-width:1rem}.swagger-ui .mw2-ns{max-width:2rem}.swagger-ui .mw3-ns{max-width:4rem}.swagger-ui .mw4-ns{max-width:8rem}.swagger-ui .mw5-ns{max-width:16rem}.swagger-ui .mw6-ns{max-width:32rem}.swagger-ui .mw7-ns{max-width:48rem}.swagger-ui .mw8-ns{max-width:64rem}.swagger-ui .mw9-ns{max-width:96rem}.swagger-ui .mw-none-ns{max-width:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .mw-100-m{max-width:100%}.swagger-ui .mw1-m{max-width:1rem}.swagger-ui .mw2-m{max-width:2rem}.swagger-ui .mw3-m{max-width:4rem}.swagger-ui .mw4-m{max-width:8rem}.swagger-ui .mw5-m{max-width:16rem}.swagger-ui .mw6-m{max-width:32rem}.swagger-ui .mw7-m{max-width:48rem}.swagger-ui .mw8-m{max-width:64rem}.swagger-ui .mw9-m{max-width:96rem}.swagger-ui .mw-none-m{max-width:none}}@media screen and (min-width:60em){.swagger-ui .mw-100-l{max-width:100%}.swagger-ui .mw1-l{max-width:1rem}.swagger-ui .mw2-l{max-width:2rem}.swagger-ui .mw3-l{max-width:4rem}.swagger-ui .mw4-l{max-width:8rem}.swagger-ui .mw5-l{max-width:16rem}.swagger-ui .mw6-l{max-width:32rem}.swagger-ui .mw7-l{max-width:48rem}.swagger-ui .mw8-l{max-width:64rem}.swagger-ui .mw9-l{max-width:96rem}.swagger-ui .mw-none-l{max-width:none}}.swagger-ui .w1{width:1rem}.swagger-ui .w2{width:2rem}.swagger-ui .w3{width:4rem}.swagger-ui .w4{width:8rem}.swagger-ui .w5{width:16rem}.swagger-ui .w-10{width:10%}.swagger-ui .w-20{width:20%}.swagger-ui .w-25{width:25%}.swagger-ui .w-30{width:30%}.swagger-ui .w-33{width:33%}.swagger-ui .w-34{width:34%}.swagger-ui .w-40{width:40%}.swagger-ui .w-50{width:50%}.swagger-ui .w-60{width:60%}.swagger-ui .w-70{width:70%}.swagger-ui .w-75{width:75%}.swagger-ui .w-80{width:80%}.swagger-ui .w-90{width:90%}.swagger-ui .w-100{width:100%}.swagger-ui .w-third{width:33.3333333333%}.swagger-ui .w-two-thirds{width:66.6666666667%}.swagger-ui .w-auto{width:auto}@media screen and (min-width:30em){.swagger-ui .w1-ns{width:1rem}.swagger-ui .w2-ns{width:2rem}.swagger-ui .w3-ns{width:4rem}.swagger-ui .w4-ns{width:8rem}.swagger-ui .w5-ns{width:16rem}.swagger-ui .w-10-ns{width:10%}.swagger-ui .w-20-ns{width:20%}.swagger-ui .w-25-ns{width:25%}.swagger-ui .w-30-ns{width:30%}.swagger-ui .w-33-ns{width:33%}.swagger-ui .w-34-ns{width:34%}.swagger-ui .w-40-ns{width:40%}.swagger-ui .w-50-ns{width:50%}.swagger-ui .w-60-ns{width:60%}.swagger-ui .w-70-ns{width:70%}.swagger-ui .w-75-ns{width:75%}.swagger-ui .w-80-ns{width:80%}.swagger-ui .w-90-ns{width:90%}.swagger-ui .w-100-ns{width:100%}.swagger-ui .w-third-ns{width:33.3333333333%}.swagger-ui .w-two-thirds-ns{width:66.6666666667%}.swagger-ui .w-auto-ns{width:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .w1-m{width:1rem}.swagger-ui .w2-m{width:2rem}.swagger-ui .w3-m{width:4rem}.swagger-ui .w4-m{width:8rem}.swagger-ui .w5-m{width:16rem}.swagger-ui .w-10-m{width:10%}.swagger-ui .w-20-m{width:20%}.swagger-ui .w-25-m{width:25%}.swagger-ui .w-30-m{width:30%}.swagger-ui .w-33-m{width:33%}.swagger-ui .w-34-m{width:34%}.swagger-ui .w-40-m{width:40%}.swagger-ui .w-50-m{width:50%}.swagger-ui .w-60-m{width:60%}.swagger-ui .w-70-m{width:70%}.swagger-ui .w-75-m{width:75%}.swagger-ui .w-80-m{width:80%}.swagger-ui .w-90-m{width:90%}.swagger-ui .w-100-m{width:100%}.swagger-ui .w-third-m{width:33.3333333333%}.swagger-ui .w-two-thirds-m{width:66.6666666667%}.swagger-ui .w-auto-m{width:auto}}@media screen and (min-width:60em){.swagger-ui .w1-l{width:1rem}.swagger-ui .w2-l{width:2rem}.swagger-ui .w3-l{width:4rem}.swagger-ui .w4-l{width:8rem}.swagger-ui .w5-l{width:16rem}.swagger-ui .w-10-l{width:10%}.swagger-ui .w-20-l{width:20%}.swagger-ui .w-25-l{width:25%}.swagger-ui .w-30-l{width:30%}.swagger-ui .w-33-l{width:33%}.swagger-ui .w-34-l{width:34%}.swagger-ui .w-40-l{width:40%}.swagger-ui .w-50-l{width:50%}.swagger-ui .w-60-l{width:60%}.swagger-ui .w-70-l{width:70%}.swagger-ui .w-75-l{width:75%}.swagger-ui .w-80-l{width:80%}.swagger-ui .w-90-l{width:90%}.swagger-ui .w-100-l{width:100%}.swagger-ui .w-third-l{width:33.3333333333%}.swagger-ui .w-two-thirds-l{width:66.6666666667%}.swagger-ui .w-auto-l{width:auto}}.swagger-ui .overflow-visible{overflow:visible}.swagger-ui .overflow-hidden{overflow:hidden}.swagger-ui .overflow-scroll{overflow:scroll}.swagger-ui .overflow-auto{overflow:auto}.swagger-ui .overflow-x-visible{overflow-x:visible}.swagger-ui .overflow-x-hidden{overflow-x:hidden}.swagger-ui .overflow-x-scroll{overflow-x:scroll}.swagger-ui .overflow-x-auto{overflow-x:auto}.swagger-ui .overflow-y-visible{overflow-y:visible}.swagger-ui .overflow-y-hidden{overflow-y:hidden}.swagger-ui .overflow-y-scroll{overflow-y:scroll}.swagger-ui .overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.swagger-ui .overflow-visible-ns{overflow:visible}.swagger-ui .overflow-hidden-ns{overflow:hidden}.swagger-ui .overflow-scroll-ns{overflow:scroll}.swagger-ui .overflow-auto-ns{overflow:auto}.swagger-ui .overflow-x-visible-ns{overflow-x:visible}.swagger-ui .overflow-x-hidden-ns{overflow-x:hidden}.swagger-ui .overflow-x-scroll-ns{overflow-x:scroll}.swagger-ui .overflow-x-auto-ns{overflow-x:auto}.swagger-ui .overflow-y-visible-ns{overflow-y:visible}.swagger-ui .overflow-y-hidden-ns{overflow-y:hidden}.swagger-ui .overflow-y-scroll-ns{overflow-y:scroll}.swagger-ui .overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .overflow-visible-m{overflow:visible}.swagger-ui .overflow-hidden-m{overflow:hidden}.swagger-ui .overflow-scroll-m{overflow:scroll}.swagger-ui .overflow-auto-m{overflow:auto}.swagger-ui .overflow-x-visible-m{overflow-x:visible}.swagger-ui .overflow-x-hidden-m{overflow-x:hidden}.swagger-ui .overflow-x-scroll-m{overflow-x:scroll}.swagger-ui .overflow-x-auto-m{overflow-x:auto}.swagger-ui .overflow-y-visible-m{overflow-y:visible}.swagger-ui .overflow-y-hidden-m{overflow-y:hidden}.swagger-ui .overflow-y-scroll-m{overflow-y:scroll}.swagger-ui .overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.swagger-ui .overflow-visible-l{overflow:visible}.swagger-ui .overflow-hidden-l{overflow:hidden}.swagger-ui .overflow-scroll-l{overflow:scroll}.swagger-ui .overflow-auto-l{overflow:auto}.swagger-ui .overflow-x-visible-l{overflow-x:visible}.swagger-ui .overflow-x-hidden-l{overflow-x:hidden}.swagger-ui .overflow-x-scroll-l{overflow-x:scroll}.swagger-ui .overflow-x-auto-l{overflow-x:auto}.swagger-ui .overflow-y-visible-l{overflow-y:visible}.swagger-ui .overflow-y-hidden-l{overflow-y:hidden}.swagger-ui .overflow-y-scroll-l{overflow-y:scroll}.swagger-ui .overflow-y-auto-l{overflow-y:auto}}.swagger-ui .static{position:static}.swagger-ui .relative{position:relative}.swagger-ui .absolute{position:absolute}.swagger-ui .fixed{position:fixed}@media screen and (min-width:30em){.swagger-ui .static-ns{position:static}.swagger-ui .relative-ns{position:relative}.swagger-ui .absolute-ns{position:absolute}.swagger-ui .fixed-ns{position:fixed}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .static-m{position:static}.swagger-ui .relative-m{position:relative}.swagger-ui .absolute-m{position:absolute}.swagger-ui .fixed-m{position:fixed}}@media screen and (min-width:60em){.swagger-ui .static-l{position:static}.swagger-ui .relative-l{position:relative}.swagger-ui .absolute-l{position:absolute}.swagger-ui .fixed-l{position:fixed}}.swagger-ui .o-100{opacity:1}.swagger-ui .o-90{opacity:.9}.swagger-ui .o-80{opacity:.8}.swagger-ui .o-70{opacity:.7}.swagger-ui .o-60{opacity:.6}.swagger-ui .o-50{opacity:.5}.swagger-ui .o-40{opacity:.4}.swagger-ui .o-30{opacity:.3}.swagger-ui .o-20{opacity:.2}.swagger-ui .o-10{opacity:.1}.swagger-ui .o-05{opacity:.05}.swagger-ui .o-025{opacity:.025}.swagger-ui .o-0{opacity:0}.swagger-ui .rotate-45{transform:rotate(45deg)}.swagger-ui .rotate-90{transform:rotate(90deg)}.swagger-ui .rotate-135{transform:rotate(135deg)}.swagger-ui .rotate-180{transform:rotate(180deg)}.swagger-ui .rotate-225{transform:rotate(225deg)}.swagger-ui .rotate-270{transform:rotate(270deg)}.swagger-ui .rotate-315{transform:rotate(315deg)}@media screen and (min-width:30em){.swagger-ui .rotate-45-ns{transform:rotate(45deg)}.swagger-ui .rotate-90-ns{transform:rotate(90deg)}.swagger-ui .rotate-135-ns{transform:rotate(135deg)}.swagger-ui .rotate-180-ns{transform:rotate(180deg)}.swagger-ui .rotate-225-ns{transform:rotate(225deg)}.swagger-ui .rotate-270-ns{transform:rotate(270deg)}.swagger-ui .rotate-315-ns{transform:rotate(315deg)}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .rotate-45-m{transform:rotate(45deg)}.swagger-ui .rotate-90-m{transform:rotate(90deg)}.swagger-ui .rotate-135-m{transform:rotate(135deg)}.swagger-ui .rotate-180-m{transform:rotate(180deg)}.swagger-ui .rotate-225-m{transform:rotate(225deg)}.swagger-ui .rotate-270-m{transform:rotate(270deg)}.swagger-ui .rotate-315-m{transform:rotate(315deg)}}@media screen and (min-width:60em){.swagger-ui .rotate-45-l{transform:rotate(45deg)}.swagger-ui .rotate-90-l{transform:rotate(90deg)}.swagger-ui .rotate-135-l{transform:rotate(135deg)}.swagger-ui .rotate-180-l{transform:rotate(180deg)}.swagger-ui .rotate-225-l{transform:rotate(225deg)}.swagger-ui .rotate-270-l{transform:rotate(270deg)}.swagger-ui .rotate-315-l{transform:rotate(315deg)}}.swagger-ui .black-90{color:#000000e6}.swagger-ui .black-80{color:#000c}.swagger-ui .black-70{color:#000000b3}.swagger-ui .black-60{color:#0009}.swagger-ui .black-50{color:#00000080}.swagger-ui .black-40{color:#0006}.swagger-ui .black-30{color:#0000004d}.swagger-ui .black-20{color:#0003}.swagger-ui .black-10{color:#0000001a}.swagger-ui .black-05{color:#0000000d}.swagger-ui .white-90{color:#ffffffe6}.swagger-ui .white-80{color:#fffc}.swagger-ui .white-70{color:#ffffffb3}.swagger-ui .white-60{color:#fff9}.swagger-ui .white-50{color:#ffffff80}.swagger-ui .white-40{color:#fff6}.swagger-ui .white-30{color:#ffffff4d}.swagger-ui .white-20{color:#fff3}.swagger-ui .white-10{color:#ffffff1a}.swagger-ui .black{color:#000}.swagger-ui .near-black{color:#111}.swagger-ui .dark-gray{color:#333}.swagger-ui .mid-gray{color:#555}.swagger-ui .gray{color:#777}.swagger-ui .silver{color:#999}.swagger-ui .light-silver{color:#aaa}.swagger-ui .moon-gray{color:#ccc}.swagger-ui .light-gray{color:#eee}.swagger-ui .near-white{color:#f4f4f4}.swagger-ui .white{color:#fff}.swagger-ui .dark-red{color:#e7040f}.swagger-ui .red{color:#ff4136}.swagger-ui .light-red{color:#ff725c}.swagger-ui .orange{color:#ff6300}.swagger-ui .gold{color:#ffb700}.swagger-ui .yellow{color:gold}.swagger-ui .light-yellow{color:#fbf1a9}.swagger-ui .purple{color:#5e2ca5}.swagger-ui .light-purple{color:#a463f2}.swagger-ui .dark-pink{color:#d5008f}.swagger-ui .hot-pink{color:#ff41b4}.swagger-ui .pink{color:#ff80cc}.swagger-ui .light-pink{color:#ffa3d7}.swagger-ui .dark-green{color:#137752}.swagger-ui .green{color:#19a974}.swagger-ui .light-green{color:#9eebcf}.swagger-ui .navy{color:#001b44}.swagger-ui .dark-blue{color:#00449e}.swagger-ui .blue{color:#357edd}.swagger-ui .light-blue{color:#96ccff}.swagger-ui .lightest-blue{color:#cdecff}.swagger-ui .washed-blue{color:#f6fffe}.swagger-ui .washed-green{color:#e8fdf5}.swagger-ui .washed-yellow{color:#fffceb}.swagger-ui .washed-red{color:#ffdfdf}.swagger-ui .color-inherit{color:inherit}.swagger-ui .bg-black-90{background-color:#000000e6}.swagger-ui .bg-black-80{background-color:#000c}.swagger-ui .bg-black-70{background-color:#000000b3}.swagger-ui .bg-black-60{background-color:#0009}.swagger-ui .bg-black-50{background-color:#00000080}.swagger-ui .bg-black-40{background-color:#0006}.swagger-ui .bg-black-30{background-color:#0000004d}.swagger-ui .bg-black-20{background-color:#0003}.swagger-ui .bg-black-10{background-color:#0000001a}.swagger-ui .bg-black-05{background-color:#0000000d}.swagger-ui .bg-white-90{background-color:#ffffffe6}.swagger-ui .bg-white-80{background-color:#fffc}.swagger-ui .bg-white-70{background-color:#ffffffb3}.swagger-ui .bg-white-60{background-color:#fff9}.swagger-ui .bg-white-50{background-color:#ffffff80}.swagger-ui .bg-white-40{background-color:#fff6}.swagger-ui .bg-white-30{background-color:#ffffff4d}.swagger-ui .bg-white-20{background-color:#fff3}.swagger-ui .bg-white-10{background-color:#ffffff1a}.swagger-ui .bg-black{background-color:#000}.swagger-ui .bg-near-black{background-color:#111}.swagger-ui .bg-dark-gray{background-color:#333}.swagger-ui .bg-mid-gray{background-color:#555}.swagger-ui .bg-gray{background-color:#777}.swagger-ui .bg-silver{background-color:#999}.swagger-ui .bg-light-silver{background-color:#aaa}.swagger-ui .bg-moon-gray{background-color:#ccc}.swagger-ui .bg-light-gray{background-color:#eee}.swagger-ui .bg-near-white{background-color:#f4f4f4}.swagger-ui .bg-white{background-color:#fff}.swagger-ui .bg-transparent{background-color:transparent}.swagger-ui .bg-dark-red{background-color:#e7040f}.swagger-ui .bg-red{background-color:#ff4136}.swagger-ui .bg-light-red{background-color:#ff725c}.swagger-ui .bg-orange{background-color:#ff6300}.swagger-ui .bg-gold{background-color:#ffb700}.swagger-ui .bg-yellow{background-color:gold}.swagger-ui .bg-light-yellow{background-color:#fbf1a9}.swagger-ui .bg-purple{background-color:#5e2ca5}.swagger-ui .bg-light-purple{background-color:#a463f2}.swagger-ui .bg-dark-pink{background-color:#d5008f}.swagger-ui .bg-hot-pink{background-color:#ff41b4}.swagger-ui .bg-pink{background-color:#ff80cc}.swagger-ui .bg-light-pink{background-color:#ffa3d7}.swagger-ui .bg-dark-green{background-color:#137752}.swagger-ui .bg-green{background-color:#19a974}.swagger-ui .bg-light-green{background-color:#9eebcf}.swagger-ui .bg-navy{background-color:#001b44}.swagger-ui .bg-dark-blue{background-color:#00449e}.swagger-ui .bg-blue{background-color:#357edd}.swagger-ui .bg-light-blue{background-color:#96ccff}.swagger-ui .bg-lightest-blue{background-color:#cdecff}.swagger-ui .bg-washed-blue{background-color:#f6fffe}.swagger-ui .bg-washed-green{background-color:#e8fdf5}.swagger-ui .bg-washed-yellow{background-color:#fffceb}.swagger-ui .bg-washed-red{background-color:#ffdfdf}.swagger-ui .bg-inherit{background-color:inherit}.swagger-ui .hover-black:focus,.swagger-ui .hover-black:hover{color:#000}.swagger-ui .hover-near-black:focus,.swagger-ui .hover-near-black:hover{color:#111}.swagger-ui .hover-dark-gray:focus,.swagger-ui .hover-dark-gray:hover{color:#333}.swagger-ui .hover-mid-gray:focus,.swagger-ui .hover-mid-gray:hover{color:#555}.swagger-ui .hover-gray:focus,.swagger-ui .hover-gray:hover{color:#777}.swagger-ui .hover-silver:focus,.swagger-ui .hover-silver:hover{color:#999}.swagger-ui .hover-light-silver:focus,.swagger-ui .hover-light-silver:hover{color:#aaa}.swagger-ui .hover-moon-gray:focus,.swagger-ui .hover-moon-gray:hover{color:#ccc}.swagger-ui .hover-light-gray:focus,.swagger-ui .hover-light-gray:hover{color:#eee}.swagger-ui .hover-near-white:focus,.swagger-ui .hover-near-white:hover{color:#f4f4f4}.swagger-ui .hover-white:focus,.swagger-ui .hover-white:hover{color:#fff}.swagger-ui .hover-black-90:focus,.swagger-ui .hover-black-90:hover{color:#000000e6}.swagger-ui .hover-black-80:focus,.swagger-ui .hover-black-80:hover{color:#000c}.swagger-ui .hover-black-70:focus,.swagger-ui .hover-black-70:hover{color:#000000b3}.swagger-ui .hover-black-60:focus,.swagger-ui .hover-black-60:hover{color:#0009}.swagger-ui .hover-black-50:focus,.swagger-ui .hover-black-50:hover{color:#00000080}.swagger-ui .hover-black-40:focus,.swagger-ui .hover-black-40:hover{color:#0006}.swagger-ui .hover-black-30:focus,.swagger-ui .hover-black-30:hover{color:#0000004d}.swagger-ui .hover-black-20:focus,.swagger-ui .hover-black-20:hover{color:#0003}.swagger-ui .hover-black-10:focus,.swagger-ui .hover-black-10:hover{color:#0000001a}.swagger-ui .hover-white-90:focus,.swagger-ui .hover-white-90:hover{color:#ffffffe6}.swagger-ui .hover-white-80:focus,.swagger-ui .hover-white-80:hover{color:#fffc}.swagger-ui .hover-white-70:focus,.swagger-ui .hover-white-70:hover{color:#ffffffb3}.swagger-ui .hover-white-60:focus,.swagger-ui .hover-white-60:hover{color:#fff9}.swagger-ui .hover-white-50:focus,.swagger-ui .hover-white-50:hover{color:#ffffff80}.swagger-ui .hover-white-40:focus,.swagger-ui .hover-white-40:hover{color:#fff6}.swagger-ui .hover-white-30:focus,.swagger-ui .hover-white-30:hover{color:#ffffff4d}.swagger-ui .hover-white-20:focus,.swagger-ui .hover-white-20:hover{color:#fff3}.swagger-ui .hover-white-10:focus,.swagger-ui .hover-white-10:hover{color:#ffffff1a}.swagger-ui .hover-inherit:focus,.swagger-ui .hover-inherit:hover{color:inherit}.swagger-ui .hover-bg-black:focus,.swagger-ui .hover-bg-black:hover{background-color:#000}.swagger-ui .hover-bg-near-black:focus,.swagger-ui .hover-bg-near-black:hover{background-color:#111}.swagger-ui .hover-bg-dark-gray:focus,.swagger-ui .hover-bg-dark-gray:hover{background-color:#333}.swagger-ui .hover-bg-mid-gray:focus,.swagger-ui .hover-bg-mid-gray:hover{background-color:#555}.swagger-ui .hover-bg-gray:focus,.swagger-ui .hover-bg-gray:hover{background-color:#777}.swagger-ui .hover-bg-silver:focus,.swagger-ui .hover-bg-silver:hover{background-color:#999}.swagger-ui .hover-bg-light-silver:focus,.swagger-ui .hover-bg-light-silver:hover{background-color:#aaa}.swagger-ui .hover-bg-moon-gray:focus,.swagger-ui .hover-bg-moon-gray:hover{background-color:#ccc}.swagger-ui .hover-bg-light-gray:focus,.swagger-ui .hover-bg-light-gray:hover{background-color:#eee}.swagger-ui .hover-bg-near-white:focus,.swagger-ui .hover-bg-near-white:hover{background-color:#f4f4f4}.swagger-ui .hover-bg-white:focus,.swagger-ui .hover-bg-white:hover{background-color:#fff}.swagger-ui .hover-bg-transparent:focus,.swagger-ui .hover-bg-transparent:hover{background-color:transparent}.swagger-ui .hover-bg-black-90:focus,.swagger-ui .hover-bg-black-90:hover{background-color:#000000e6}.swagger-ui .hover-bg-black-80:focus,.swagger-ui .hover-bg-black-80:hover{background-color:#000c}.swagger-ui .hover-bg-black-70:focus,.swagger-ui .hover-bg-black-70:hover{background-color:#000000b3}.swagger-ui .hover-bg-black-60:focus,.swagger-ui .hover-bg-black-60:hover{background-color:#0009}.swagger-ui .hover-bg-black-50:focus,.swagger-ui .hover-bg-black-50:hover{background-color:#00000080}.swagger-ui .hover-bg-black-40:focus,.swagger-ui .hover-bg-black-40:hover{background-color:#0006}.swagger-ui .hover-bg-black-30:focus,.swagger-ui .hover-bg-black-30:hover{background-color:#0000004d}.swagger-ui .hover-bg-black-20:focus,.swagger-ui .hover-bg-black-20:hover{background-color:#0003}.swagger-ui .hover-bg-black-10:focus,.swagger-ui .hover-bg-black-10:hover{background-color:#0000001a}.swagger-ui .hover-bg-white-90:focus,.swagger-ui .hover-bg-white-90:hover{background-color:#ffffffe6}.swagger-ui .hover-bg-white-80:focus,.swagger-ui .hover-bg-white-80:hover{background-color:#fffc}.swagger-ui .hover-bg-white-70:focus,.swagger-ui .hover-bg-white-70:hover{background-color:#ffffffb3}.swagger-ui .hover-bg-white-60:focus,.swagger-ui .hover-bg-white-60:hover{background-color:#fff9}.swagger-ui .hover-bg-white-50:focus,.swagger-ui .hover-bg-white-50:hover{background-color:#ffffff80}.swagger-ui .hover-bg-white-40:focus,.swagger-ui .hover-bg-white-40:hover{background-color:#fff6}.swagger-ui .hover-bg-white-30:focus,.swagger-ui .hover-bg-white-30:hover{background-color:#ffffff4d}.swagger-ui .hover-bg-white-20:focus,.swagger-ui .hover-bg-white-20:hover{background-color:#fff3}.swagger-ui .hover-bg-white-10:focus,.swagger-ui .hover-bg-white-10:hover{background-color:#ffffff1a}.swagger-ui .hover-dark-red:focus,.swagger-ui .hover-dark-red:hover{color:#e7040f}.swagger-ui .hover-red:focus,.swagger-ui .hover-red:hover{color:#ff4136}.swagger-ui .hover-light-red:focus,.swagger-ui .hover-light-red:hover{color:#ff725c}.swagger-ui .hover-orange:focus,.swagger-ui .hover-orange:hover{color:#ff6300}.swagger-ui .hover-gold:focus,.swagger-ui .hover-gold:hover{color:#ffb700}.swagger-ui .hover-yellow:focus,.swagger-ui .hover-yellow:hover{color:gold}.swagger-ui .hover-light-yellow:focus,.swagger-ui .hover-light-yellow:hover{color:#fbf1a9}.swagger-ui .hover-purple:focus,.swagger-ui .hover-purple:hover{color:#5e2ca5}.swagger-ui .hover-light-purple:focus,.swagger-ui .hover-light-purple:hover{color:#a463f2}.swagger-ui .hover-dark-pink:focus,.swagger-ui .hover-dark-pink:hover{color:#d5008f}.swagger-ui .hover-hot-pink:focus,.swagger-ui .hover-hot-pink:hover{color:#ff41b4}.swagger-ui .hover-pink:focus,.swagger-ui .hover-pink:hover{color:#ff80cc}.swagger-ui .hover-light-pink:focus,.swagger-ui .hover-light-pink:hover{color:#ffa3d7}.swagger-ui .hover-dark-green:focus,.swagger-ui .hover-dark-green:hover{color:#137752}.swagger-ui .hover-green:focus,.swagger-ui .hover-green:hover{color:#19a974}.swagger-ui .hover-light-green:focus,.swagger-ui .hover-light-green:hover{color:#9eebcf}.swagger-ui .hover-navy:focus,.swagger-ui .hover-navy:hover{color:#001b44}.swagger-ui .hover-dark-blue:focus,.swagger-ui .hover-dark-blue:hover{color:#00449e}.swagger-ui .hover-blue:focus,.swagger-ui .hover-blue:hover{color:#357edd}.swagger-ui .hover-light-blue:focus,.swagger-ui .hover-light-blue:hover{color:#96ccff}.swagger-ui .hover-lightest-blue:focus,.swagger-ui .hover-lightest-blue:hover{color:#cdecff}.swagger-ui .hover-washed-blue:focus,.swagger-ui .hover-washed-blue:hover{color:#f6fffe}.swagger-ui .hover-washed-green:focus,.swagger-ui .hover-washed-green:hover{color:#e8fdf5}.swagger-ui .hover-washed-yellow:focus,.swagger-ui .hover-washed-yellow:hover{color:#fffceb}.swagger-ui .hover-washed-red:focus,.swagger-ui .hover-washed-red:hover{color:#ffdfdf}.swagger-ui .hover-bg-dark-red:focus,.swagger-ui .hover-bg-dark-red:hover{background-color:#e7040f}.swagger-ui .hover-bg-red:focus,.swagger-ui .hover-bg-red:hover{background-color:#ff4136}.swagger-ui .hover-bg-light-red:focus,.swagger-ui .hover-bg-light-red:hover{background-color:#ff725c}.swagger-ui .hover-bg-orange:focus,.swagger-ui .hover-bg-orange:hover{background-color:#ff6300}.swagger-ui .hover-bg-gold:focus,.swagger-ui .hover-bg-gold:hover{background-color:#ffb700}.swagger-ui .hover-bg-yellow:focus,.swagger-ui .hover-bg-yellow:hover{background-color:gold}.swagger-ui .hover-bg-light-yellow:focus,.swagger-ui .hover-bg-light-yellow:hover{background-color:#fbf1a9}.swagger-ui .hover-bg-purple:focus,.swagger-ui .hover-bg-purple:hover{background-color:#5e2ca5}.swagger-ui .hover-bg-light-purple:focus,.swagger-ui .hover-bg-light-purple:hover{background-color:#a463f2}.swagger-ui .hover-bg-dark-pink:focus,.swagger-ui .hover-bg-dark-pink:hover{background-color:#d5008f}.swagger-ui .hover-bg-hot-pink:focus,.swagger-ui .hover-bg-hot-pink:hover{background-color:#ff41b4}.swagger-ui .hover-bg-pink:focus,.swagger-ui .hover-bg-pink:hover{background-color:#ff80cc}.swagger-ui .hover-bg-light-pink:focus,.swagger-ui .hover-bg-light-pink:hover{background-color:#ffa3d7}.swagger-ui .hover-bg-dark-green:focus,.swagger-ui .hover-bg-dark-green:hover{background-color:#137752}.swagger-ui .hover-bg-green:focus,.swagger-ui .hover-bg-green:hover{background-color:#19a974}.swagger-ui .hover-bg-light-green:focus,.swagger-ui .hover-bg-light-green:hover{background-color:#9eebcf}.swagger-ui .hover-bg-navy:focus,.swagger-ui .hover-bg-navy:hover{background-color:#001b44}.swagger-ui .hover-bg-dark-blue:focus,.swagger-ui .hover-bg-dark-blue:hover{background-color:#00449e}.swagger-ui .hover-bg-blue:focus,.swagger-ui .hover-bg-blue:hover{background-color:#357edd}.swagger-ui .hover-bg-light-blue:focus,.swagger-ui .hover-bg-light-blue:hover{background-color:#96ccff}.swagger-ui .hover-bg-lightest-blue:focus,.swagger-ui .hover-bg-lightest-blue:hover{background-color:#cdecff}.swagger-ui .hover-bg-washed-blue:focus,.swagger-ui .hover-bg-washed-blue:hover{background-color:#f6fffe}.swagger-ui .hover-bg-washed-green:focus,.swagger-ui .hover-bg-washed-green:hover{background-color:#e8fdf5}.swagger-ui .hover-bg-washed-yellow:focus,.swagger-ui .hover-bg-washed-yellow:hover{background-color:#fffceb}.swagger-ui .hover-bg-washed-red:focus,.swagger-ui .hover-bg-washed-red:hover{background-color:#ffdfdf}.swagger-ui .hover-bg-inherit:focus,.swagger-ui .hover-bg-inherit:hover{background-color:inherit}.swagger-ui .pa0{padding:0}.swagger-ui .pa1{padding:.25rem}.swagger-ui .pa2{padding:.5rem}.swagger-ui .pa3{padding:1rem}.swagger-ui .pa4{padding:2rem}.swagger-ui .pa5{padding:4rem}.swagger-ui .pa6{padding:8rem}.swagger-ui .pa7{padding:16rem}.swagger-ui .pl0{padding-left:0}.swagger-ui .pl1{padding-left:.25rem}.swagger-ui .pl2{padding-left:.5rem}.swagger-ui .pl3{padding-left:1rem}.swagger-ui .pl4{padding-left:2rem}.swagger-ui .pl5{padding-left:4rem}.swagger-ui .pl6{padding-left:8rem}.swagger-ui .pl7{padding-left:16rem}.swagger-ui .pr0{padding-right:0}.swagger-ui .pr1{padding-right:.25rem}.swagger-ui .pr2{padding-right:.5rem}.swagger-ui .pr3{padding-right:1rem}.swagger-ui .pr4{padding-right:2rem}.swagger-ui .pr5{padding-right:4rem}.swagger-ui .pr6{padding-right:8rem}.swagger-ui .pr7{padding-right:16rem}.swagger-ui .pb0{padding-bottom:0}.swagger-ui .pb1{padding-bottom:.25rem}.swagger-ui .pb2{padding-bottom:.5rem}.swagger-ui .pb3{padding-bottom:1rem}.swagger-ui .pb4{padding-bottom:2rem}.swagger-ui .pb5{padding-bottom:4rem}.swagger-ui .pb6{padding-bottom:8rem}.swagger-ui .pb7{padding-bottom:16rem}.swagger-ui .pt0{padding-top:0}.swagger-ui .pt1{padding-top:.25rem}.swagger-ui .pt2{padding-top:.5rem}.swagger-ui .pt3{padding-top:1rem}.swagger-ui .pt4{padding-top:2rem}.swagger-ui .pt5{padding-top:4rem}.swagger-ui .pt6{padding-top:8rem}.swagger-ui .pt7{padding-top:16rem}.swagger-ui .pv0{padding-bottom:0;padding-top:0}.swagger-ui .pv1{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0{padding-left:0;padding-right:0}.swagger-ui .ph1{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0{margin:0}.swagger-ui .ma1{margin:.25rem}.swagger-ui .ma2{margin:.5rem}.swagger-ui .ma3{margin:1rem}.swagger-ui .ma4{margin:2rem}.swagger-ui .ma5{margin:4rem}.swagger-ui .ma6{margin:8rem}.swagger-ui .ma7{margin:16rem}.swagger-ui .ml0{margin-left:0}.swagger-ui .ml1{margin-left:.25rem}.swagger-ui .ml2{margin-left:.5rem}.swagger-ui .ml3{margin-left:1rem}.swagger-ui .ml4{margin-left:2rem}.swagger-ui .ml5{margin-left:4rem}.swagger-ui .ml6{margin-left:8rem}.swagger-ui .ml7{margin-left:16rem}.swagger-ui .mr0{margin-right:0}.swagger-ui .mr1{margin-right:.25rem}.swagger-ui .mr2{margin-right:.5rem}.swagger-ui .mr3{margin-right:1rem}.swagger-ui .mr4{margin-right:2rem}.swagger-ui .mr5{margin-right:4rem}.swagger-ui .mr6{margin-right:8rem}.swagger-ui .mr7{margin-right:16rem}.swagger-ui .mb0{margin-bottom:0}.swagger-ui .mb1{margin-bottom:.25rem}.swagger-ui .mb2{margin-bottom:.5rem}.swagger-ui .mb3{margin-bottom:1rem}.swagger-ui .mb4{margin-bottom:2rem}.swagger-ui .mb5{margin-bottom:4rem}.swagger-ui .mb6{margin-bottom:8rem}.swagger-ui .mb7{margin-bottom:16rem}.swagger-ui .mt0{margin-top:0}.swagger-ui .mt1{margin-top:.25rem}.swagger-ui .mt2{margin-top:.5rem}.swagger-ui .mt3{margin-top:1rem}.swagger-ui .mt4{margin-top:2rem}.swagger-ui .mt5{margin-top:4rem}.swagger-ui .mt6{margin-top:8rem}.swagger-ui .mt7{margin-top:16rem}.swagger-ui .mv0{margin-bottom:0;margin-top:0}.swagger-ui .mv1{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0{margin-left:0;margin-right:0}.swagger-ui .mh1{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.swagger-ui .pa0-ns{padding:0}.swagger-ui .pa1-ns{padding:.25rem}.swagger-ui .pa2-ns{padding:.5rem}.swagger-ui .pa3-ns{padding:1rem}.swagger-ui .pa4-ns{padding:2rem}.swagger-ui .pa5-ns{padding:4rem}.swagger-ui .pa6-ns{padding:8rem}.swagger-ui .pa7-ns{padding:16rem}.swagger-ui .pl0-ns{padding-left:0}.swagger-ui .pl1-ns{padding-left:.25rem}.swagger-ui .pl2-ns{padding-left:.5rem}.swagger-ui .pl3-ns{padding-left:1rem}.swagger-ui .pl4-ns{padding-left:2rem}.swagger-ui .pl5-ns{padding-left:4rem}.swagger-ui .pl6-ns{padding-left:8rem}.swagger-ui .pl7-ns{padding-left:16rem}.swagger-ui .pr0-ns{padding-right:0}.swagger-ui .pr1-ns{padding-right:.25rem}.swagger-ui .pr2-ns{padding-right:.5rem}.swagger-ui .pr3-ns{padding-right:1rem}.swagger-ui .pr4-ns{padding-right:2rem}.swagger-ui .pr5-ns{padding-right:4rem}.swagger-ui .pr6-ns{padding-right:8rem}.swagger-ui .pr7-ns{padding-right:16rem}.swagger-ui .pb0-ns{padding-bottom:0}.swagger-ui .pb1-ns{padding-bottom:.25rem}.swagger-ui .pb2-ns{padding-bottom:.5rem}.swagger-ui .pb3-ns{padding-bottom:1rem}.swagger-ui .pb4-ns{padding-bottom:2rem}.swagger-ui .pb5-ns{padding-bottom:4rem}.swagger-ui .pb6-ns{padding-bottom:8rem}.swagger-ui .pb7-ns{padding-bottom:16rem}.swagger-ui .pt0-ns{padding-top:0}.swagger-ui .pt1-ns{padding-top:.25rem}.swagger-ui .pt2-ns{padding-top:.5rem}.swagger-ui .pt3-ns{padding-top:1rem}.swagger-ui .pt4-ns{padding-top:2rem}.swagger-ui .pt5-ns{padding-top:4rem}.swagger-ui .pt6-ns{padding-top:8rem}.swagger-ui .pt7-ns{padding-top:16rem}.swagger-ui .pv0-ns{padding-bottom:0;padding-top:0}.swagger-ui .pv1-ns{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-ns{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-ns{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-ns{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-ns{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-ns{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-ns{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-ns{padding-left:0;padding-right:0}.swagger-ui .ph1-ns{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-ns{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-ns{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-ns{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-ns{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-ns{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-ns{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-ns{margin:0}.swagger-ui .ma1-ns{margin:.25rem}.swagger-ui .ma2-ns{margin:.5rem}.swagger-ui .ma3-ns{margin:1rem}.swagger-ui .ma4-ns{margin:2rem}.swagger-ui .ma5-ns{margin:4rem}.swagger-ui .ma6-ns{margin:8rem}.swagger-ui .ma7-ns{margin:16rem}.swagger-ui .ml0-ns{margin-left:0}.swagger-ui .ml1-ns{margin-left:.25rem}.swagger-ui .ml2-ns{margin-left:.5rem}.swagger-ui .ml3-ns{margin-left:1rem}.swagger-ui .ml4-ns{margin-left:2rem}.swagger-ui .ml5-ns{margin-left:4rem}.swagger-ui .ml6-ns{margin-left:8rem}.swagger-ui .ml7-ns{margin-left:16rem}.swagger-ui .mr0-ns{margin-right:0}.swagger-ui .mr1-ns{margin-right:.25rem}.swagger-ui .mr2-ns{margin-right:.5rem}.swagger-ui .mr3-ns{margin-right:1rem}.swagger-ui .mr4-ns{margin-right:2rem}.swagger-ui .mr5-ns{margin-right:4rem}.swagger-ui .mr6-ns{margin-right:8rem}.swagger-ui .mr7-ns{margin-right:16rem}.swagger-ui .mb0-ns{margin-bottom:0}.swagger-ui .mb1-ns{margin-bottom:.25rem}.swagger-ui .mb2-ns{margin-bottom:.5rem}.swagger-ui .mb3-ns{margin-bottom:1rem}.swagger-ui .mb4-ns{margin-bottom:2rem}.swagger-ui .mb5-ns{margin-bottom:4rem}.swagger-ui .mb6-ns{margin-bottom:8rem}.swagger-ui .mb7-ns{margin-bottom:16rem}.swagger-ui .mt0-ns{margin-top:0}.swagger-ui .mt1-ns{margin-top:.25rem}.swagger-ui .mt2-ns{margin-top:.5rem}.swagger-ui .mt3-ns{margin-top:1rem}.swagger-ui .mt4-ns{margin-top:2rem}.swagger-ui .mt5-ns{margin-top:4rem}.swagger-ui .mt6-ns{margin-top:8rem}.swagger-ui .mt7-ns{margin-top:16rem}.swagger-ui .mv0-ns{margin-bottom:0;margin-top:0}.swagger-ui .mv1-ns{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-ns{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-ns{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-ns{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-ns{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-ns{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-ns{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-ns{margin-left:0;margin-right:0}.swagger-ui .mh1-ns{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-ns{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-ns{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-ns{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-ns{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-ns{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .pa0-m{padding:0}.swagger-ui .pa1-m{padding:.25rem}.swagger-ui .pa2-m{padding:.5rem}.swagger-ui .pa3-m{padding:1rem}.swagger-ui .pa4-m{padding:2rem}.swagger-ui .pa5-m{padding:4rem}.swagger-ui .pa6-m{padding:8rem}.swagger-ui .pa7-m{padding:16rem}.swagger-ui .pl0-m{padding-left:0}.swagger-ui .pl1-m{padding-left:.25rem}.swagger-ui .pl2-m{padding-left:.5rem}.swagger-ui .pl3-m{padding-left:1rem}.swagger-ui .pl4-m{padding-left:2rem}.swagger-ui .pl5-m{padding-left:4rem}.swagger-ui .pl6-m{padding-left:8rem}.swagger-ui .pl7-m{padding-left:16rem}.swagger-ui .pr0-m{padding-right:0}.swagger-ui .pr1-m{padding-right:.25rem}.swagger-ui .pr2-m{padding-right:.5rem}.swagger-ui .pr3-m{padding-right:1rem}.swagger-ui .pr4-m{padding-right:2rem}.swagger-ui .pr5-m{padding-right:4rem}.swagger-ui .pr6-m{padding-right:8rem}.swagger-ui .pr7-m{padding-right:16rem}.swagger-ui .pb0-m{padding-bottom:0}.swagger-ui .pb1-m{padding-bottom:.25rem}.swagger-ui .pb2-m{padding-bottom:.5rem}.swagger-ui .pb3-m{padding-bottom:1rem}.swagger-ui .pb4-m{padding-bottom:2rem}.swagger-ui .pb5-m{padding-bottom:4rem}.swagger-ui .pb6-m{padding-bottom:8rem}.swagger-ui .pb7-m{padding-bottom:16rem}.swagger-ui .pt0-m{padding-top:0}.swagger-ui .pt1-m{padding-top:.25rem}.swagger-ui .pt2-m{padding-top:.5rem}.swagger-ui .pt3-m{padding-top:1rem}.swagger-ui .pt4-m{padding-top:2rem}.swagger-ui .pt5-m{padding-top:4rem}.swagger-ui .pt6-m{padding-top:8rem}.swagger-ui .pt7-m{padding-top:16rem}.swagger-ui .pv0-m{padding-bottom:0;padding-top:0}.swagger-ui .pv1-m{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-m{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-m{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-m{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-m{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-m{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-m{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-m{padding-left:0;padding-right:0}.swagger-ui .ph1-m{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-m{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-m{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-m{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-m{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-m{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-m{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-m{margin:0}.swagger-ui .ma1-m{margin:.25rem}.swagger-ui .ma2-m{margin:.5rem}.swagger-ui .ma3-m{margin:1rem}.swagger-ui .ma4-m{margin:2rem}.swagger-ui .ma5-m{margin:4rem}.swagger-ui .ma6-m{margin:8rem}.swagger-ui .ma7-m{margin:16rem}.swagger-ui .ml0-m{margin-left:0}.swagger-ui .ml1-m{margin-left:.25rem}.swagger-ui .ml2-m{margin-left:.5rem}.swagger-ui .ml3-m{margin-left:1rem}.swagger-ui .ml4-m{margin-left:2rem}.swagger-ui .ml5-m{margin-left:4rem}.swagger-ui .ml6-m{margin-left:8rem}.swagger-ui .ml7-m{margin-left:16rem}.swagger-ui .mr0-m{margin-right:0}.swagger-ui .mr1-m{margin-right:.25rem}.swagger-ui .mr2-m{margin-right:.5rem}.swagger-ui .mr3-m{margin-right:1rem}.swagger-ui .mr4-m{margin-right:2rem}.swagger-ui .mr5-m{margin-right:4rem}.swagger-ui .mr6-m{margin-right:8rem}.swagger-ui .mr7-m{margin-right:16rem}.swagger-ui .mb0-m{margin-bottom:0}.swagger-ui .mb1-m{margin-bottom:.25rem}.swagger-ui .mb2-m{margin-bottom:.5rem}.swagger-ui .mb3-m{margin-bottom:1rem}.swagger-ui .mb4-m{margin-bottom:2rem}.swagger-ui .mb5-m{margin-bottom:4rem}.swagger-ui .mb6-m{margin-bottom:8rem}.swagger-ui .mb7-m{margin-bottom:16rem}.swagger-ui .mt0-m{margin-top:0}.swagger-ui .mt1-m{margin-top:.25rem}.swagger-ui .mt2-m{margin-top:.5rem}.swagger-ui .mt3-m{margin-top:1rem}.swagger-ui .mt4-m{margin-top:2rem}.swagger-ui .mt5-m{margin-top:4rem}.swagger-ui .mt6-m{margin-top:8rem}.swagger-ui .mt7-m{margin-top:16rem}.swagger-ui .mv0-m{margin-bottom:0;margin-top:0}.swagger-ui .mv1-m{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-m{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-m{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-m{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-m{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-m{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-m{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-m{margin-left:0;margin-right:0}.swagger-ui .mh1-m{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-m{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-m{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-m{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-m{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-m{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.swagger-ui .pa0-l{padding:0}.swagger-ui .pa1-l{padding:.25rem}.swagger-ui .pa2-l{padding:.5rem}.swagger-ui .pa3-l{padding:1rem}.swagger-ui .pa4-l{padding:2rem}.swagger-ui .pa5-l{padding:4rem}.swagger-ui .pa6-l{padding:8rem}.swagger-ui .pa7-l{padding:16rem}.swagger-ui .pl0-l{padding-left:0}.swagger-ui .pl1-l{padding-left:.25rem}.swagger-ui .pl2-l{padding-left:.5rem}.swagger-ui .pl3-l{padding-left:1rem}.swagger-ui .pl4-l{padding-left:2rem}.swagger-ui .pl5-l{padding-left:4rem}.swagger-ui .pl6-l{padding-left:8rem}.swagger-ui .pl7-l{padding-left:16rem}.swagger-ui .pr0-l{padding-right:0}.swagger-ui .pr1-l{padding-right:.25rem}.swagger-ui .pr2-l{padding-right:.5rem}.swagger-ui .pr3-l{padding-right:1rem}.swagger-ui .pr4-l{padding-right:2rem}.swagger-ui .pr5-l{padding-right:4rem}.swagger-ui .pr6-l{padding-right:8rem}.swagger-ui .pr7-l{padding-right:16rem}.swagger-ui .pb0-l{padding-bottom:0}.swagger-ui .pb1-l{padding-bottom:.25rem}.swagger-ui .pb2-l{padding-bottom:.5rem}.swagger-ui .pb3-l{padding-bottom:1rem}.swagger-ui .pb4-l{padding-bottom:2rem}.swagger-ui .pb5-l{padding-bottom:4rem}.swagger-ui .pb6-l{padding-bottom:8rem}.swagger-ui .pb7-l{padding-bottom:16rem}.swagger-ui .pt0-l{padding-top:0}.swagger-ui .pt1-l{padding-top:.25rem}.swagger-ui .pt2-l{padding-top:.5rem}.swagger-ui .pt3-l{padding-top:1rem}.swagger-ui .pt4-l{padding-top:2rem}.swagger-ui .pt5-l{padding-top:4rem}.swagger-ui .pt6-l{padding-top:8rem}.swagger-ui .pt7-l{padding-top:16rem}.swagger-ui .pv0-l{padding-bottom:0;padding-top:0}.swagger-ui .pv1-l{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-l{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-l{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-l{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-l{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-l{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-l{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-l{padding-left:0;padding-right:0}.swagger-ui .ph1-l{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-l{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-l{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-l{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-l{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-l{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-l{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-l{margin:0}.swagger-ui .ma1-l{margin:.25rem}.swagger-ui .ma2-l{margin:.5rem}.swagger-ui .ma3-l{margin:1rem}.swagger-ui .ma4-l{margin:2rem}.swagger-ui .ma5-l{margin:4rem}.swagger-ui .ma6-l{margin:8rem}.swagger-ui .ma7-l{margin:16rem}.swagger-ui .ml0-l{margin-left:0}.swagger-ui .ml1-l{margin-left:.25rem}.swagger-ui .ml2-l{margin-left:.5rem}.swagger-ui .ml3-l{margin-left:1rem}.swagger-ui .ml4-l{margin-left:2rem}.swagger-ui .ml5-l{margin-left:4rem}.swagger-ui .ml6-l{margin-left:8rem}.swagger-ui .ml7-l{margin-left:16rem}.swagger-ui .mr0-l{margin-right:0}.swagger-ui .mr1-l{margin-right:.25rem}.swagger-ui .mr2-l{margin-right:.5rem}.swagger-ui .mr3-l{margin-right:1rem}.swagger-ui .mr4-l{margin-right:2rem}.swagger-ui .mr5-l{margin-right:4rem}.swagger-ui .mr6-l{margin-right:8rem}.swagger-ui .mr7-l{margin-right:16rem}.swagger-ui .mb0-l{margin-bottom:0}.swagger-ui .mb1-l{margin-bottom:.25rem}.swagger-ui .mb2-l{margin-bottom:.5rem}.swagger-ui .mb3-l{margin-bottom:1rem}.swagger-ui .mb4-l{margin-bottom:2rem}.swagger-ui .mb5-l{margin-bottom:4rem}.swagger-ui .mb6-l{margin-bottom:8rem}.swagger-ui .mb7-l{margin-bottom:16rem}.swagger-ui .mt0-l{margin-top:0}.swagger-ui .mt1-l{margin-top:.25rem}.swagger-ui .mt2-l{margin-top:.5rem}.swagger-ui .mt3-l{margin-top:1rem}.swagger-ui .mt4-l{margin-top:2rem}.swagger-ui .mt5-l{margin-top:4rem}.swagger-ui .mt6-l{margin-top:8rem}.swagger-ui .mt7-l{margin-top:16rem}.swagger-ui .mv0-l{margin-bottom:0;margin-top:0}.swagger-ui .mv1-l{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-l{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-l{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-l{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-l{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-l{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-l{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-l{margin-left:0;margin-right:0}.swagger-ui .mh1-l{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-l{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-l{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-l{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-l{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-l{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-l{margin-left:16rem;margin-right:16rem}}.swagger-ui .na1{margin:-.25rem}.swagger-ui .na2{margin:-.5rem}.swagger-ui .na3{margin:-1rem}.swagger-ui .na4{margin:-2rem}.swagger-ui .na5{margin:-4rem}.swagger-ui .na6{margin:-8rem}.swagger-ui .na7{margin:-16rem}.swagger-ui .nl1{margin-left:-.25rem}.swagger-ui .nl2{margin-left:-.5rem}.swagger-ui .nl3{margin-left:-1rem}.swagger-ui .nl4{margin-left:-2rem}.swagger-ui .nl5{margin-left:-4rem}.swagger-ui .nl6{margin-left:-8rem}.swagger-ui .nl7{margin-left:-16rem}.swagger-ui .nr1{margin-right:-.25rem}.swagger-ui .nr2{margin-right:-.5rem}.swagger-ui .nr3{margin-right:-1rem}.swagger-ui .nr4{margin-right:-2rem}.swagger-ui .nr5{margin-right:-4rem}.swagger-ui .nr6{margin-right:-8rem}.swagger-ui .nr7{margin-right:-16rem}.swagger-ui .nb1{margin-bottom:-.25rem}.swagger-ui .nb2{margin-bottom:-.5rem}.swagger-ui .nb3{margin-bottom:-1rem}.swagger-ui .nb4{margin-bottom:-2rem}.swagger-ui .nb5{margin-bottom:-4rem}.swagger-ui .nb6{margin-bottom:-8rem}.swagger-ui .nb7{margin-bottom:-16rem}.swagger-ui .nt1{margin-top:-.25rem}.swagger-ui .nt2{margin-top:-.5rem}.swagger-ui .nt3{margin-top:-1rem}.swagger-ui .nt4{margin-top:-2rem}.swagger-ui .nt5{margin-top:-4rem}.swagger-ui .nt6{margin-top:-8rem}.swagger-ui .nt7{margin-top:-16rem}@media screen and (min-width:30em){.swagger-ui .na1-ns{margin:-.25rem}.swagger-ui .na2-ns{margin:-.5rem}.swagger-ui .na3-ns{margin:-1rem}.swagger-ui .na4-ns{margin:-2rem}.swagger-ui .na5-ns{margin:-4rem}.swagger-ui .na6-ns{margin:-8rem}.swagger-ui .na7-ns{margin:-16rem}.swagger-ui .nl1-ns{margin-left:-.25rem}.swagger-ui .nl2-ns{margin-left:-.5rem}.swagger-ui .nl3-ns{margin-left:-1rem}.swagger-ui .nl4-ns{margin-left:-2rem}.swagger-ui .nl5-ns{margin-left:-4rem}.swagger-ui .nl6-ns{margin-left:-8rem}.swagger-ui .nl7-ns{margin-left:-16rem}.swagger-ui .nr1-ns{margin-right:-.25rem}.swagger-ui .nr2-ns{margin-right:-.5rem}.swagger-ui .nr3-ns{margin-right:-1rem}.swagger-ui .nr4-ns{margin-right:-2rem}.swagger-ui .nr5-ns{margin-right:-4rem}.swagger-ui .nr6-ns{margin-right:-8rem}.swagger-ui .nr7-ns{margin-right:-16rem}.swagger-ui .nb1-ns{margin-bottom:-.25rem}.swagger-ui .nb2-ns{margin-bottom:-.5rem}.swagger-ui .nb3-ns{margin-bottom:-1rem}.swagger-ui .nb4-ns{margin-bottom:-2rem}.swagger-ui .nb5-ns{margin-bottom:-4rem}.swagger-ui .nb6-ns{margin-bottom:-8rem}.swagger-ui .nb7-ns{margin-bottom:-16rem}.swagger-ui .nt1-ns{margin-top:-.25rem}.swagger-ui .nt2-ns{margin-top:-.5rem}.swagger-ui .nt3-ns{margin-top:-1rem}.swagger-ui .nt4-ns{margin-top:-2rem}.swagger-ui .nt5-ns{margin-top:-4rem}.swagger-ui .nt6-ns{margin-top:-8rem}.swagger-ui .nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .na1-m{margin:-.25rem}.swagger-ui .na2-m{margin:-.5rem}.swagger-ui .na3-m{margin:-1rem}.swagger-ui .na4-m{margin:-2rem}.swagger-ui .na5-m{margin:-4rem}.swagger-ui .na6-m{margin:-8rem}.swagger-ui .na7-m{margin:-16rem}.swagger-ui .nl1-m{margin-left:-.25rem}.swagger-ui .nl2-m{margin-left:-.5rem}.swagger-ui .nl3-m{margin-left:-1rem}.swagger-ui .nl4-m{margin-left:-2rem}.swagger-ui .nl5-m{margin-left:-4rem}.swagger-ui .nl6-m{margin-left:-8rem}.swagger-ui .nl7-m{margin-left:-16rem}.swagger-ui .nr1-m{margin-right:-.25rem}.swagger-ui .nr2-m{margin-right:-.5rem}.swagger-ui .nr3-m{margin-right:-1rem}.swagger-ui .nr4-m{margin-right:-2rem}.swagger-ui .nr5-m{margin-right:-4rem}.swagger-ui .nr6-m{margin-right:-8rem}.swagger-ui .nr7-m{margin-right:-16rem}.swagger-ui .nb1-m{margin-bottom:-.25rem}.swagger-ui .nb2-m{margin-bottom:-.5rem}.swagger-ui .nb3-m{margin-bottom:-1rem}.swagger-ui .nb4-m{margin-bottom:-2rem}.swagger-ui .nb5-m{margin-bottom:-4rem}.swagger-ui .nb6-m{margin-bottom:-8rem}.swagger-ui .nb7-m{margin-bottom:-16rem}.swagger-ui .nt1-m{margin-top:-.25rem}.swagger-ui .nt2-m{margin-top:-.5rem}.swagger-ui .nt3-m{margin-top:-1rem}.swagger-ui .nt4-m{margin-top:-2rem}.swagger-ui .nt5-m{margin-top:-4rem}.swagger-ui .nt6-m{margin-top:-8rem}.swagger-ui .nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.swagger-ui .na1-l{margin:-.25rem}.swagger-ui .na2-l{margin:-.5rem}.swagger-ui .na3-l{margin:-1rem}.swagger-ui .na4-l{margin:-2rem}.swagger-ui .na5-l{margin:-4rem}.swagger-ui .na6-l{margin:-8rem}.swagger-ui .na7-l{margin:-16rem}.swagger-ui .nl1-l{margin-left:-.25rem}.swagger-ui .nl2-l{margin-left:-.5rem}.swagger-ui .nl3-l{margin-left:-1rem}.swagger-ui .nl4-l{margin-left:-2rem}.swagger-ui .nl5-l{margin-left:-4rem}.swagger-ui .nl6-l{margin-left:-8rem}.swagger-ui .nl7-l{margin-left:-16rem}.swagger-ui .nr1-l{margin-right:-.25rem}.swagger-ui .nr2-l{margin-right:-.5rem}.swagger-ui .nr3-l{margin-right:-1rem}.swagger-ui .nr4-l{margin-right:-2rem}.swagger-ui .nr5-l{margin-right:-4rem}.swagger-ui .nr6-l{margin-right:-8rem}.swagger-ui .nr7-l{margin-right:-16rem}.swagger-ui .nb1-l{margin-bottom:-.25rem}.swagger-ui .nb2-l{margin-bottom:-.5rem}.swagger-ui .nb3-l{margin-bottom:-1rem}.swagger-ui .nb4-l{margin-bottom:-2rem}.swagger-ui .nb5-l{margin-bottom:-4rem}.swagger-ui .nb6-l{margin-bottom:-8rem}.swagger-ui .nb7-l{margin-bottom:-16rem}.swagger-ui .nt1-l{margin-top:-.25rem}.swagger-ui .nt2-l{margin-top:-.5rem}.swagger-ui .nt3-l{margin-top:-1rem}.swagger-ui .nt4-l{margin-top:-2rem}.swagger-ui .nt5-l{margin-top:-4rem}.swagger-ui .nt6-l{margin-top:-8rem}.swagger-ui .nt7-l{margin-top:-16rem}}.swagger-ui .collapse{border-collapse:collapse;border-spacing:0}.swagger-ui .striped--light-silver:nth-child(odd){background-color:#aaa}.swagger-ui .striped--moon-gray:nth-child(odd){background-color:#ccc}.swagger-ui .striped--light-gray:nth-child(odd){background-color:#eee}.swagger-ui .striped--near-white:nth-child(odd){background-color:#f4f4f4}.swagger-ui .stripe-light:nth-child(odd){background-color:#ffffff1a}.swagger-ui .stripe-dark:nth-child(odd){background-color:#0000001a}.swagger-ui .strike{text-decoration:line-through}.swagger-ui .underline{text-decoration:underline}.swagger-ui .no-underline{text-decoration:none}@media screen and (min-width:30em){.swagger-ui .strike-ns{text-decoration:line-through}.swagger-ui .underline-ns{text-decoration:underline}.swagger-ui .no-underline-ns{text-decoration:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .strike-m{text-decoration:line-through}.swagger-ui .underline-m{text-decoration:underline}.swagger-ui .no-underline-m{text-decoration:none}}@media screen and (min-width:60em){.swagger-ui .strike-l{text-decoration:line-through}.swagger-ui .underline-l{text-decoration:underline}.swagger-ui .no-underline-l{text-decoration:none}}.swagger-ui .tl{text-align:left}.swagger-ui .tr{text-align:right}.swagger-ui .tc{text-align:center}.swagger-ui .tj{text-align:justify}@media screen and (min-width:30em){.swagger-ui .tl-ns{text-align:left}.swagger-ui .tr-ns{text-align:right}.swagger-ui .tc-ns{text-align:center}.swagger-ui .tj-ns{text-align:justify}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tl-m{text-align:left}.swagger-ui .tr-m{text-align:right}.swagger-ui .tc-m{text-align:center}.swagger-ui .tj-m{text-align:justify}}@media screen and (min-width:60em){.swagger-ui .tl-l{text-align:left}.swagger-ui .tr-l{text-align:right}.swagger-ui .tc-l{text-align:center}.swagger-ui .tj-l{text-align:justify}}.swagger-ui .ttc{text-transform:capitalize}.swagger-ui .ttl{text-transform:lowercase}.swagger-ui .ttu{text-transform:uppercase}.swagger-ui .ttn{text-transform:none}@media screen and (min-width:30em){.swagger-ui .ttc-ns{text-transform:capitalize}.swagger-ui .ttl-ns{text-transform:lowercase}.swagger-ui .ttu-ns{text-transform:uppercase}.swagger-ui .ttn-ns{text-transform:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ttc-m{text-transform:capitalize}.swagger-ui .ttl-m{text-transform:lowercase}.swagger-ui .ttu-m{text-transform:uppercase}.swagger-ui .ttn-m{text-transform:none}}@media screen and (min-width:60em){.swagger-ui .ttc-l{text-transform:capitalize}.swagger-ui .ttl-l{text-transform:lowercase}.swagger-ui .ttu-l{text-transform:uppercase}.swagger-ui .ttn-l{text-transform:none}}.swagger-ui .f-6,.swagger-ui .f-headline{font-size:6rem}.swagger-ui .f-5,.swagger-ui .f-subheadline{font-size:5rem}.swagger-ui .f1{font-size:3rem}.swagger-ui .f2{font-size:2.25rem}.swagger-ui .f3{font-size:1.5rem}.swagger-ui .f4{font-size:1.25rem}.swagger-ui .f5{font-size:1rem}.swagger-ui .f6{font-size:.875rem}.swagger-ui .f7{font-size:.75rem}@media screen and (min-width:30em){.swagger-ui .f-6-ns,.swagger-ui .f-headline-ns{font-size:6rem}.swagger-ui .f-5-ns,.swagger-ui .f-subheadline-ns{font-size:5rem}.swagger-ui .f1-ns{font-size:3rem}.swagger-ui .f2-ns{font-size:2.25rem}.swagger-ui .f3-ns{font-size:1.5rem}.swagger-ui .f4-ns{font-size:1.25rem}.swagger-ui .f5-ns{font-size:1rem}.swagger-ui .f6-ns{font-size:.875rem}.swagger-ui .f7-ns{font-size:.75rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .f-6-m,.swagger-ui .f-headline-m{font-size:6rem}.swagger-ui .f-5-m,.swagger-ui .f-subheadline-m{font-size:5rem}.swagger-ui .f1-m{font-size:3rem}.swagger-ui .f2-m{font-size:2.25rem}.swagger-ui .f3-m{font-size:1.5rem}.swagger-ui .f4-m{font-size:1.25rem}.swagger-ui .f5-m{font-size:1rem}.swagger-ui .f6-m{font-size:.875rem}.swagger-ui .f7-m{font-size:.75rem}}@media screen and (min-width:60em){.swagger-ui .f-6-l,.swagger-ui .f-headline-l{font-size:6rem}.swagger-ui .f-5-l,.swagger-ui .f-subheadline-l{font-size:5rem}.swagger-ui .f1-l{font-size:3rem}.swagger-ui .f2-l{font-size:2.25rem}.swagger-ui .f3-l{font-size:1.5rem}.swagger-ui .f4-l{font-size:1.25rem}.swagger-ui .f5-l{font-size:1rem}.swagger-ui .f6-l{font-size:.875rem}.swagger-ui .f7-l{font-size:.75rem}}.swagger-ui .measure{max-width:30em}.swagger-ui .measure-wide{max-width:34em}.swagger-ui .measure-narrow{max-width:20em}.swagger-ui .indent{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (min-width:30em){.swagger-ui .measure-ns{max-width:30em}.swagger-ui .measure-wide-ns{max-width:34em}.swagger-ui .measure-narrow-ns{max-width:20em}.swagger-ui .indent-ns{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-ns{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-ns{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .measure-m{max-width:30em}.swagger-ui .measure-wide-m{max-width:34em}.swagger-ui .measure-narrow-m{max-width:20em}.swagger-ui .indent-m{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-m{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-m{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:60em){.swagger-ui .measure-l{max-width:30em}.swagger-ui .measure-wide-l{max-width:34em}.swagger-ui .measure-narrow-l{max-width:20em}.swagger-ui .indent-l{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-l{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.swagger-ui .overflow-container{overflow-y:scroll}.swagger-ui .center{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto{margin-right:auto}.swagger-ui .ml-auto{margin-left:auto}@media screen and (min-width:30em){.swagger-ui .center-ns{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-ns{margin-right:auto}.swagger-ui .ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .center-m{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-m{margin-right:auto}.swagger-ui .ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.swagger-ui .center-l{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-l{margin-right:auto}.swagger-ui .ml-auto-l{margin-left:auto}}.swagger-ui .clip{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}@media screen and (min-width:30em){.swagger-ui .clip-ns{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .clip-m{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:60em){.swagger-ui .clip-l{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}.swagger-ui .ws-normal{white-space:normal}.swagger-ui .nowrap{white-space:nowrap}.swagger-ui .pre{white-space:pre}@media screen and (min-width:30em){.swagger-ui .ws-normal-ns{white-space:normal}.swagger-ui .nowrap-ns{white-space:nowrap}.swagger-ui .pre-ns{white-space:pre}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ws-normal-m{white-space:normal}.swagger-ui .nowrap-m{white-space:nowrap}.swagger-ui .pre-m{white-space:pre}}@media screen and (min-width:60em){.swagger-ui .ws-normal-l{white-space:normal}.swagger-ui .nowrap-l{white-space:nowrap}.swagger-ui .pre-l{white-space:pre}}.swagger-ui .v-base{vertical-align:baseline}.swagger-ui .v-mid{vertical-align:middle}.swagger-ui .v-top{vertical-align:top}.swagger-ui .v-btm{vertical-align:bottom}@media screen and (min-width:30em){.swagger-ui .v-base-ns{vertical-align:baseline}.swagger-ui .v-mid-ns{vertical-align:middle}.swagger-ui .v-top-ns{vertical-align:top}.swagger-ui .v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .v-base-m{vertical-align:baseline}.swagger-ui .v-mid-m{vertical-align:middle}.swagger-ui .v-top-m{vertical-align:top}.swagger-ui .v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.swagger-ui .v-base-l{vertical-align:baseline}.swagger-ui .v-mid-l{vertical-align:middle}.swagger-ui .v-top-l{vertical-align:top}.swagger-ui .v-btm-l{vertical-align:bottom}}.swagger-ui .dim{opacity:1;transition:opacity .15s ease-in}.swagger-ui .dim:focus,.swagger-ui .dim:hover{opacity:.5;transition:opacity .15s ease-in}.swagger-ui .dim:active{opacity:.8;transition:opacity .15s ease-out}.swagger-ui .glow{transition:opacity .15s ease-in}.swagger-ui .glow:focus,.swagger-ui .glow:hover{opacity:1;transition:opacity .15s ease-in}.swagger-ui .hide-child .child{opacity:0;transition:opacity .15s ease-in}.swagger-ui .hide-child:active .child,.swagger-ui .hide-child:focus .child,.swagger-ui .hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.swagger-ui .underline-hover:focus,.swagger-ui .underline-hover:hover{text-decoration:underline}.swagger-ui .grow{-moz-osx-font-smoothing:grayscale;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-out}.swagger-ui .grow:focus,.swagger-ui .grow:hover{transform:scale(1.05)}.swagger-ui .grow:active{transform:scale(.9)}.swagger-ui .grow-large{-moz-osx-font-smoothing:grayscale;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-in-out}.swagger-ui .grow-large:focus,.swagger-ui .grow-large:hover{transform:scale(1.2)}.swagger-ui .grow-large:active{transform:scale(.95)}.swagger-ui .pointer:hover{cursor:pointer}.swagger-ui .shadow-hover{cursor:pointer;position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.swagger-ui .shadow-hover:after{border-radius:inherit;box-shadow:0 0 16px 2px #0003;content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .5s cubic-bezier(.165,.84,.44,1);width:100%;z-index:-1}.swagger-ui .shadow-hover:focus:after,.swagger-ui .shadow-hover:hover:after{opacity:1}.swagger-ui .bg-animate,.swagger-ui .bg-animate:focus,.swagger-ui .bg-animate:hover{transition:background-color .15s ease-in-out}.swagger-ui .z-0{z-index:0}.swagger-ui .z-1{z-index:1}.swagger-ui .z-2{z-index:2}.swagger-ui .z-3{z-index:3}.swagger-ui .z-4{z-index:4}.swagger-ui .z-5{z-index:5}.swagger-ui .z-999{z-index:999}.swagger-ui .z-9999{z-index:9999}.swagger-ui .z-max{z-index:2147483647}.swagger-ui .z-inherit{z-index:inherit}.swagger-ui .z-initial{z-index:auto}.swagger-ui .z-unset{z-index:unset}.swagger-ui .nested-copy-line-height ol,.swagger-ui .nested-copy-line-height p,.swagger-ui .nested-copy-line-height ul{line-height:1.5}.swagger-ui .nested-headline-line-height h1,.swagger-ui .nested-headline-line-height h2,.swagger-ui .nested-headline-line-height h3,.swagger-ui .nested-headline-line-height h4,.swagger-ui .nested-headline-line-height h5,.swagger-ui .nested-headline-line-height h6{line-height:1.25}.swagger-ui .nested-list-reset ol,.swagger-ui .nested-list-reset ul{list-style-type:none;margin-left:0;padding-left:0}.swagger-ui .nested-copy-indent p+p{margin-bottom:0;margin-top:0;text-indent:.1em}.swagger-ui .nested-copy-seperator p+p{margin-top:1.5em}.swagger-ui .nested-img img{display:block;max-width:100%;width:100%}.swagger-ui .nested-links a{color:#357edd;transition:color .15s ease-in}.swagger-ui .nested-links a:focus,.swagger-ui .nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.swagger-ui .wrapper{box-sizing:border-box;margin:0 auto;max-width:1460px;padding:0 20px;width:100%}.swagger-ui .opblock-tag-section{display:flex;flex-direction:column}.swagger-ui .try-out.btn-group{display:flex;flex:.1 2 auto;padding:0}.swagger-ui .try-out__btn{margin-left:1.25rem}.swagger-ui .opblock-tag{align-items:center;border-bottom:1px solid rgba(59,65,81,.3);cursor:pointer;display:flex;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui .opblock-tag:hover{background:rgba(0,0,0,.02)}.swagger-ui .opblock-tag{color:#3b4151;font-family:sans-serif;font-size:24px;margin:0 0 5px}.swagger-ui .opblock-tag.no-desc span{flex:1}.swagger-ui .opblock-tag svg{transition:all .4s}.swagger-ui .opblock-tag small{color:#3b4151;flex:2;font-family:sans-serif;font-size:14px;font-weight:400;padding:0 10px}.swagger-ui .opblock-tag>div{flex:1 1 150px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.swagger-ui .parameter__type{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;padding:5px 0}.swagger-ui .parameter-controls{margin-top:.75em}.swagger-ui .examples__title{display:block;font-size:1.1em;font-weight:700;margin-bottom:.75em}.swagger-ui .examples__section{margin-top:1.5em}.swagger-ui .examples__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .examples-select{display:inline-block;margin-bottom:.75em}.swagger-ui .examples-select .examples-select-element{width:100%}.swagger-ui .examples-select__section-label{font-size:.9rem;font-weight:700;margin-right:.5rem}.swagger-ui .example__section{margin-top:1.5em}.swagger-ui .example__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .view-line-link{cursor:pointer;margin:0 5px;position:relative;top:3px;transition:all .5s;width:20px}.swagger-ui .opblock{border:1px solid #000;border-radius:4px;box-shadow:0 0 3px #00000030;margin:0 0 15px}.swagger-ui .opblock .tab-header{display:flex;flex:1}.swagger-ui .opblock .tab-header .tab-item{cursor:pointer;padding:0 40px}.swagger-ui .opblock .tab-header .tab-item:first-of-type{padding:0 40px 0 0}.swagger-ui .opblock .tab-header .tab-item.active h4 span{position:relative}.swagger-ui .opblock .tab-header .tab-item.active h4 span:after{background:gray;bottom:-15px;content:"";height:4px;left:50%;position:absolute;transform:translate(-50%);width:120%}.swagger-ui .opblock.is-open .opblock-summary{border-bottom:1px solid #000}.swagger-ui .opblock .opblock-section-header{align-items:center;background:hsla(0,0%,100%,.8);box-shadow:0 1px 2px #0000001a;display:flex;min-height:50px;padding:8px 20px}.swagger-ui .opblock .opblock-section-header>label{align-items:center;color:#3b4151;display:flex;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 0 auto}.swagger-ui .opblock .opblock-section-header>label>span{padding:0 10px 0 0}.swagger-ui .opblock .opblock-section-header h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock .opblock-summary-method{background:#000;border-radius:3px;color:#fff;font-family:sans-serif;font-size:14px;font-weight:700;min-width:80px;padding:6px 0;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1)}.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{align-items:center;color:#3b4151;display:flex;font-family:monospace;font-size:16px;font-weight:600;padding:0 10px;word-break:break-word}@media (max-width:768px){.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{font-size:12px}}.swagger-ui .opblock .opblock-summary-path{flex-shrink:0;max-width:calc(100% - 110px - 15rem)}.swagger-ui .opblock .opblock-summary-path__deprecated{text-decoration:line-through}.swagger-ui .opblock .opblock-summary-operation-id{font-size:14px}.swagger-ui .opblock .opblock-summary-description{color:#3b4151;flex:1 1 auto;font-family:sans-serif;font-size:13px;word-break:break-word}.swagger-ui .opblock .opblock-summary{align-items:center;cursor:pointer;display:flex;padding:5px}.swagger-ui .opblock .opblock-summary .view-line-link{cursor:pointer;margin:0;position:relative;top:2px;transition:all .5s;width:0}.swagger-ui .opblock .opblock-summary:hover .view-line-link{margin:0 5px;width:18px}.swagger-ui .opblock.opblock-post{background:rgba(73,204,144,.1);border-color:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary-method{background:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary{border-color:#49cc90}.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span:after{background:#49cc90}.swagger-ui .opblock.opblock-put{background:rgba(252,161,48,.1);border-color:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary-method{background:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary{border-color:#fca130}.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span:after{background:#fca130}.swagger-ui .opblock.opblock-delete{background:rgba(249,62,62,.1);border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary{border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span:after{background:#f93e3e}.swagger-ui .opblock.opblock-get{background:rgba(97,175,254,.1);border-color:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary-method{background:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary{border-color:#61affe}.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span:after{background:#61affe}.swagger-ui .opblock.opblock-patch{background:rgba(80,227,194,.1);border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary{border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span:after{background:#50e3c2}.swagger-ui .opblock.opblock-head{background:rgba(144,18,254,.1);border-color:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary-method{background:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary{border-color:#9012fe}.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span:after{background:#9012fe}.swagger-ui .opblock.opblock-options{background:rgba(13,90,167,.1);border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary-method{background:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary{border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span:after{background:#0d5aa7}.swagger-ui .opblock.opblock-deprecated{background:hsla(0,0%,92%,.1);border-color:#ebebeb;opacity:.6}.swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#ebebeb}.swagger-ui .opblock.opblock-deprecated .opblock-summary{border-color:#ebebeb}.swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span:after{background:#ebebeb}.swagger-ui .opblock .opblock-schemes{padding:8px 20px}.swagger-ui .opblock .opblock-schemes .schemes-title{padding:0 10px 0 0}.swagger-ui .filter .operation-filter-input{border:2px solid #d8dde7;margin:20px 0;padding:10px;width:100%}.swagger-ui .download-url-wrapper .failed,.swagger-ui .filter .failed{color:red}.swagger-ui .download-url-wrapper .loading,.swagger-ui .filter .loading{color:#aaa}.swagger-ui .model-example{margin-top:1em}.swagger-ui .tab{display:flex;list-style:none;padding:0}.swagger-ui .tab li{color:#3b4151;cursor:pointer;font-family:sans-serif;font-size:12px;min-width:60px;padding:0}.swagger-ui .tab li:first-of-type{padding-left:0;padding-right:12px;position:relative}.swagger-ui .tab li:first-of-type:after{background:rgba(0,0,0,.2);content:"";height:100%;position:absolute;right:6px;top:0;width:1px}.swagger-ui .tab li.active{font-weight:700}.swagger-ui .tab li button.tablinks{background:none;border:0;color:inherit;font-family:inherit;font-weight:inherit;padding:0}.swagger-ui .opblock-description-wrapper,.swagger-ui .opblock-external-docs-wrapper,.swagger-ui .opblock-title_normal{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px;padding:15px 20px}.swagger-ui .opblock-description-wrapper h4,.swagger-ui .opblock-external-docs-wrapper h4,.swagger-ui .opblock-title_normal h4{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .opblock-description-wrapper p,.swagger-ui .opblock-external-docs-wrapper p,.swagger-ui .opblock-title_normal p{color:#3b4151;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock-external-docs-wrapper h4{padding-left:0}.swagger-ui .execute-wrapper{padding:20px;text-align:right}.swagger-ui .execute-wrapper .btn{padding:8px 40px;width:100%}.swagger-ui .body-param-options{display:flex;flex-direction:column}.swagger-ui .body-param-options .body-param-edit{padding:10px 0}.swagger-ui .body-param-options label{padding:8px 0}.swagger-ui .body-param-options label select{margin:3px 0 0}.swagger-ui .responses-inner{padding:20px}.swagger-ui .responses-inner h4,.swagger-ui .responses-inner h5{color:#3b4151;font-family:sans-serif;font-size:12px;margin:10px 0 5px}.swagger-ui .responses-inner .curl{white-space:normal}.swagger-ui .response-col_status{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .response-col_status .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links{color:#3b4151;font-family:sans-serif;font-size:14px;max-width:40em;padding-left:2em}.swagger-ui .response-col_links .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links .operation-link{margin-bottom:1.5em}.swagger-ui .response-col_links .operation-link .description{margin-bottom:.5em}.swagger-ui .opblock-body .opblock-loading-animation{display:block;margin:3em auto}.swagger-ui .opblock-body pre.microlight{word-wrap:break-word;background:#333;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;hyphens:auto;margin:0;padding:10px;white-space:pre-wrap;word-break:break-all;word-break:break-word}.swagger-ui .opblock-body pre.microlight .headerline{display:block}.swagger-ui .highlight-code{position:relative}.swagger-ui .highlight-code>.microlight{max-height:400px;min-height:6em;overflow-y:auto}.swagger-ui .highlight-code>.microlight code{white-space:pre-wrap!important;word-break:break-all}.swagger-ui .curl-command{position:relative}.swagger-ui .download-contents{align-items:center;background:#7d8293;border-radius:4px;bottom:10px;color:#fff;cursor:pointer;display:flex;font-family:sans-serif;font-size:14px;font-weight:600;height:30px;justify-content:center;padding:5px;position:absolute;right:10px;text-align:center}.swagger-ui .scheme-container{background:#fff;box-shadow:0 1px 2px #00000026;margin:0 0 20px;padding:30px 0}.swagger-ui .scheme-container .schemes{align-items:flex-end;display:flex}.swagger-ui .scheme-container .schemes>label{color:#3b4151;display:flex;flex-direction:column;font-family:sans-serif;font-size:12px;font-weight:700;margin:-20px 15px 0 0}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{align-items:center;display:flex;flex-direction:column;justify-content:center;margin-top:1em;min-height:1px;padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading:after{color:#3b4151;content:"loading";font-family:sans-serif;font-size:10px;font-weight:700;left:50%;position:absolute;text-transform:uppercase;top:50%;transform:translate(-50%,-50%)}.swagger-ui .loading-container .loading:before{animation:rotation 1s linear infinite,opacity .5s;backface-visibility:hidden;border:2px solid rgba(85,85,85,.1);border-radius:100%;border-top-color:#0009;content:"";display:block;height:60px;left:50%;margin:-30px;opacity:1;position:absolute;top:50%;width:60px}@keyframes rotation{to{transform:rotate(1turn)}}.swagger-ui .response-controls{display:flex;padding-top:1em}.swagger-ui .response-control-media-type{margin-right:1em}.swagger-ui .response-control-media-type--accept-controller select{border-color:green}.swagger-ui .response-control-media-type__accept-message{color:green;font-size:.7em}.swagger-ui .response-control-examples__title,.swagger-ui .response-control-media-type__title{display:block;font-size:.7em;margin-bottom:.2em}@keyframes blinker{50%{opacity:0}}.swagger-ui .hidden{display:none}.swagger-ui .no-margin{border:none;height:auto;margin:0;padding:0}.swagger-ui .float-right{float:right}.swagger-ui .svg-assets{height:0;position:absolute;width:0}.swagger-ui section h3{color:#3b4151;font-family:sans-serif}.swagger-ui a.nostyle{display:inline}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:inherit;cursor:pointer;text-decoration:inherit}.swagger-ui .fallback{color:#aaa;padding:1em}.swagger-ui .version-pragma{height:100%;padding:5em 0}.swagger-ui .version-pragma__message{display:flex;font-size:1.2em;height:100%;justify-content:center;line-height:1.5em;padding:0 .6em;text-align:center}.swagger-ui .version-pragma__message>div{flex:1;max-width:55ch}.swagger-ui .version-pragma__message code{background-color:#dedede;padding:4px 4px 2px;white-space:pre}.swagger-ui .opblock-link{font-weight:400}.swagger-ui .opblock-link.shown{font-weight:700}.swagger-ui span.token-string{color:#555}.swagger-ui span.token-not-formatted{color:#555;font-weight:700}.swagger-ui .btn{background:transparent;border:2px solid gray;border-radius:4px;box-shadow:0 1px 2px #0000001a;color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 23px;transition:all .3s}.swagger-ui .btn.btn-sm{font-size:12px;padding:4px 23px}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{box-shadow:0 0 5px #0000004d}.swagger-ui .btn.cancel{background-color:transparent;border-color:#ff6060;color:#ff6060;font-family:sans-serif}.swagger-ui .btn.authorize{background-color:transparent;border-color:#49cc90;color:#49cc90;display:inline;line-height:1}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{background-color:#4990e2;border-color:#4990e2;color:#fff}.swagger-ui .btn-group{display:flex;padding:30px}.swagger-ui .btn-group .btn{flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{background:none;border:none;padding:0 0 0 10px}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .model-box-control,.swagger-ui .models-control,.swagger-ui .opblock-summary-control{all:inherit;border-bottom:0;cursor:pointer;flex:1;padding:0}.swagger-ui .model-box-control:focus,.swagger-ui .models-control:focus,.swagger-ui .opblock-summary-control:focus{outline:auto}.swagger-ui .expand-methods,.swagger-ui .expand-operation{background:none;border:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{height:20px;width:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#404040}.swagger-ui .expand-methods svg{fill:#707070;transition:all .3s}.swagger-ui button{cursor:pointer}.swagger-ui button.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .copy-to-clipboard{align-items:center;background:#7d8293;border:none;border-radius:4px;bottom:10px;display:flex;height:30px;justify-content:center;position:absolute;right:100px;width:30px}.swagger-ui .copy-to-clipboard button{background:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="15" aria-hidden="true"><path fill="%23fff" fill-rule="evenodd" d="M4 12h4v1H4v-1zm5-6H4v1h5V6zm2 3V7l-3 3 3 3v-2h5V9h-5zM6.5 8H4v1h2.5V8zM4 11h2.5v-1H4v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H3c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V5H3v9h10v-2zM4 4h8c0-.55-.45-1-1-1h-1c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H5c-.55 0-1 .45-1 1z"/></svg>') 50% no-repeat;border:none;flex-grow:1;flex-shrink:1;height:25px}.swagger-ui .curl-command .copy-to-clipboard{bottom:5px;height:20px;right:10px;width:20px}.swagger-ui .curl-command .copy-to-clipboard button{height:18px}.swagger-ui select{appearance:none;background:#f7f7f7 url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M13.418 7.859a.695.695 0 0 1 .978 0 .68.68 0 0 1 0 .969l-3.908 3.83a.697.697 0 0 1-.979 0l-3.908-3.83a.68.68 0 0 1 0-.969.695.695 0 0 1 .978 0L10 11l3.418-3.141z"/></svg>') right 10px center no-repeat;background-size:20px;border:2px solid #41444e;border-radius:4px;box-shadow:0 1px 2px #00000040;color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 40px 5px 10px}.swagger-ui select[multiple]{background:#f7f7f7;margin:5px 0;padding:5px}.swagger-ui select.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .opblock-body select{min-width:230px}@media (max-width:768px){.swagger-ui .opblock-body select{min-width:180px}}.swagger-ui label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 5px}@media (max-width:768px){.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{max-width:175px}}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text],.swagger-ui textarea{background:#fff;border:1px solid #d9d9d9;border-radius:4px;margin:5px 0;min-width:100px;padding:8px 10px}.swagger-ui input[type=email].invalid,.swagger-ui input[type=file].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;transition:opacity .5s}.swagger-ui .checkbox label{display:flex}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:400!important;font-weight:600;margin:0!important}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url('data:image/svg+xml;charset=utf-8,<svg width="10" height="8" viewBox="3 7 10 8" xmlns="http://www.w3.org/2000/svg"><path fill="%2341474E" fill-rule="evenodd" d="M6.333 15 3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z"/></svg>') 50% no-repeat}.swagger-ui .dialog-ux{inset:0;position:fixed;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);inset:0;position:fixed}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;box-shadow:0 10px 30px #0003;left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{align-items:center;border-bottom:1px solid #ebebeb;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;transform:rotate(90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .model-toggle.collapsed{transform:rotate(0)}.swagger-ui .model-toggle:after{background:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>') 50% no-repeat;background-size:100%;content:"";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;padding:.1em .5em;position:absolute;top:-1.8em;visibility:hidden;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{align-items:center;color:#606060;cursor:pointer;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input[type=text]{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required:after{color:#f009;content:"required";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{align-items:center;display:flex}.swagger-ui .topbar a{color:#fff;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:flex;flex:3;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{align-items:center;color:#f0f0f0;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;box-shadow:none;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info pre{font-size:14px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300!important;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:flex;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:flex;flex:1;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{align-items:center;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;margin:0}@keyframes scaleUp{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block}.toast-center-center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-title{font-weight:700}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;text-shadow:0 1px 0 #ffffff}.toast-close-button:hover,.toast-close-button:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0}.toast-container{pointer-events:none;position:fixed;z-index:999999}.toast-container *{box-sizing:border-box}.toast-container .ngx-toastr{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;background-size:24px;box-shadow:0 0 12px #999;color:#fff}.toast-container .ngx-toastr:hover{box-shadow:0 0 12px #000;opacity:1;cursor:pointer}.toast-info{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTI1NiA4QzExOS4wNDMgOCA4IDExOS4wODMgOCAyNTZjMCAxMzYuOTk3IDExMS4wNDMgMjQ4IDI0OCAyNDhzMjQ4LTExMS4wMDMgMjQ4LTI0OEM1MDQgMTE5LjA4MyAzOTIuOTU3IDggMjU2IDh6bTAgMTEwYzIzLjE5NiAwIDQyIDE4LjgwNCA0MiA0MnMtMTguODA0IDQyLTQyIDQyLTQyLTE4LjgwNC00Mi00MiAxOC44MDQtNDIgNDItNDJ6bTU2IDI1NGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC04OGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxMnYtNjRoLTEyYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDY0YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MTAwaDEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjR6Jy8+PC9zdmc+)}.toast-error{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTI1NiA4QzExOSA4IDggMTE5IDggMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzkzIDggMjU2IDh6bTEyMS42IDMxMy4xYzQuNyA0LjcgNC43IDEyLjMgMCAxN0wzMzggMzc3LjZjLTQuNyA0LjctMTIuMyA0LjctMTcgMEwyNTYgMzEybC02NS4xIDY1LjZjLTQuNyA0LjctMTIuMyA0LjctMTcgMEwxMzQuNCAzMzhjLTQuNy00LjctNC43LTEyLjMgMC0xN2w2NS42LTY1LTY1LjYtNjUuMWMtNC43LTQuNy00LjctMTIuMyAwLTE3bDM5LjYtMzkuNmM0LjctNC43IDEyLjMtNC43IDE3IDBsNjUgNjUuNyA2NS4xLTY1LjZjNC43LTQuNyAxMi4zLTQuNyAxNyAwbDM5LjYgMzkuNmM0LjcgNC43IDQuNyAxMi4zIDAgMTdMMzEyIDI1Nmw2NS42IDY1LjF6Jy8+PC9zdmc+)}.toast-success{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTE3My44OTggNDM5LjQwNGwtMTY2LjQtMTY2LjRjLTkuOTk3LTkuOTk3LTkuOTk3LTI2LjIwNiAwLTM2LjIwNGwzNi4yMDMtMzYuMjA0YzkuOTk3LTkuOTk4IDI2LjIwNy05Ljk5OCAzNi4yMDQgMEwxOTIgMzEyLjY5IDQzMi4wOTUgNzIuNTk2YzkuOTk3LTkuOTk3IDI2LjIwNy05Ljk5NyAzNi4yMDQgMGwzNi4yMDMgMzYuMjA0YzkuOTk3IDkuOTk3IDkuOTk3IDI2LjIwNiAwIDM2LjIwNGwtMjk0LjQgMjk0LjQwMWMtOS45OTggOS45OTctMjYuMjA3IDkuOTk3LTM2LjIwNC0uMDAxeicvPjwvc3ZnPg==)}.toast-warning{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1NzYgNTEyJyB3aWR0aD0nNTc2JyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDZsNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eicvPjwvc3ZnPg==)}.toast-container.toast-top-center .ngx-toastr,.toast-container.toast-bottom-center .ngx-toastr{width:300px;margin-left:auto;margin-right:auto}.toast-container.toast-top-full-width .ngx-toastr,.toast-container.toast-bottom-full-width .ngx-toastr{width:96%;margin-left:auto;margin-right:auto}.ngx-toastr{background-color:#030303;pointer-events:auto}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}@media all and (max-width: 240px){.toast-container .ngx-toastr.div{padding:8px 8px 8px 50px;width:11em}.toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width: 241px) and (max-width: 480px){.toast-container .ngx-toastr.div{padding:8px 8px 8px 50px;width:18em}.toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width: 481px) and (max-width: 768px){.toast-container .ngx-toastr.div{padding:15px 15px 15px 50px;width:25em}}.tree-children.tree-children-no-padding{padding-left:0}.tree-children{padding-left:20px;overflow:hidden}.node-drop-slot{display:block;height:2px}.node-drop-slot.is-dragging-over{background:#ddffee;height:20px;border:2px dotted #888}.toggle-children-wrapper-expanded .toggle-children{transform:rotate(90deg)}.toggle-children-wrapper-collapsed .toggle-children{transform:rotate(0)}.toggle-children-wrapper{padding:2px 3px 5px 1px}.toggle-children{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABAhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ1dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYzRkRFQjcxODUzNTExRTU4RTQwRkQwODFEOUZEMEE3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYzRkRFQjcwODUzNTExRTU4RTQwRkQwODFEOUZEMEE3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTk5NzA1OGEtZDI3OC00NDZkLWE4ODgtNGM4MGQ4YWI1NzNmIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YzRkZmQxMGMtY2NlNS0xMTc4LWE5OGQtY2NkZmM5ODk5YWYwIi8+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+Z2x5cGhpY29uczwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6dGl0bGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+5iogFwAAAGhJREFUeNpiYGBgKABigf///zOQg0EARH4A4gZyDIIZ8B/JoAJKDIDhB0CcQIkBRBtEyABkgxwoMQCGD6AbRKoBGAYxQgXIBRuZGKgAKPIC3QLxArnRSHZCIjspk52ZKMrOFBUoAAEGAKnq593MQAZtAAAAAElFTkSuQmCC);height:8px;width:9px;background-size:contain;display:inline-block;position:relative;top:1px;background-repeat:no-repeat;background-position:center}.toggle-children-placeholder{display:inline-block;height:10px;width:10px;position:relative;top:1px;padding-right:3px}.node-content-wrapper{display:inline-block;padding:2px 5px;border-radius:2px;transition:background-color .15s,box-shadow .15s}.node-wrapper{display:flex;align-items:flex-start}.node-content-wrapper-active,.node-content-wrapper.node-content-wrapper-active:hover,.node-content-wrapper-active.node-content-wrapper-focused{background:#beebff}.node-content-wrapper-focused{background:#e7f4f9}.node-content-wrapper:hover{background:#f7fbff}.node-content-wrapper-active,.node-content-wrapper-focused,.node-content-wrapper:hover{box-shadow:inset 0 0 1px #999}.node-content-wrapper.is-dragging-over{background:#ddffee;box-shadow:inset 0 0 1px #999}.node-content-wrapper.is-dragging-over-disabled{opacity:.5}tree-viewport{-webkit-tap-highlight-color:transparent;height:100%;overflow:auto;display:block}.tree-children{padding-left:20px}.empty-tree-drop-slot .node-drop-slot{height:20px;min-width:100px}.angular-tree-component{width:100%;position:relative;display:inline-block;cursor:pointer;-webkit-touch-callout:none;user-select:none}tree-root .angular-tree-component-rtl{direction:rtl}tree-root .angular-tree-component-rtl .toggle-children-wrapper-collapsed .toggle-children{transform:rotate(180deg)!important}tree-root .angular-tree-component-rtl .tree-children{padding-right:20px;padding-left:0}tree-node-checkbox{padding:1px}@charset "UTF-8";:root{--white: #fff;--gray-100: #f8f9fa;--gray-200: #e9ecef;--gray-300: #dee2e6;--gray-400: #ced4da;--gray-500: #adb5bd;--gray-600: #6c757d;--gray-700: #495057;--gray-800: #343a40;--gray-900: #212529;--black: #000;--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #a94442;--red: #dc3545;--orange: #fd7e14;--yellow: #d48200;--green: #008a00;--teal: #20c997;--cyan: #17a2b8;--barley-white: #fcecba;--primary: #25828e;--primary-500: #2b99a8;--secondary: #374249;--success: #008a00;--info: #25828e;--warning: #d48200;--danger: #dc3545;--light: #f8f9fa;--dark: #343a40;--green-300: #6ec664;--cyan-300: #009596;--purple-300: #a18fff;--light-blue-300: #35caed;--gold-300: #f4c145;--light-green-300: #ace12e;--accent: #25828e;--warning-dark: #fd7e14;--fg-color-over-dark-bg: #fff;--fg-hover-color-over-dark-bg: #adb5bd;--body-color-bright: #f8f9fa;--body-bg: #fff;--body-color: #212529;--body-bg-alt: #e9ecef;--health-color-error: #dc3545;--health-color-healthy: #008a00;--health-color-warning: #d48200;--health-color-warning-800: #9d6d10;--chart-color-red: #dc3545;--chart-color-blue: #06c;--chart-color-orange: #ef9234;--chart-color-yellow: #f6d173;--chart-color-green: #008a00;--chart-color-gray: #ededed;--chart-color-cyan: #2b99a8;--chart-color-light-gray: #f0f0f0;--chart-color-slight-dark-gray: #d7d7d7;--chart-color-dark-gray: #afafaf;--chart-color-purple: #3c3d99;--chart-color-white: #fff;--chart-color-center-text: #151515;--chart-color-center-text-description: #72767b;--chart-color-tooltip-background: #000;--chart-danger: #c9190b;--chart-color-strong-blue: #0078c8;--chart-color-translucent-blue: rgba(0, 150, 220, .5019607843);--chart-color-border: rgba(0, 0, 0, .1254901961);--chart-color-translucent-yellow: rgba(239, 146, 52, .4470588235);--font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--card-cap-bg: #f8f9fa;--grid-gutter-width: 30px;--datatable-divider-color: rgba(0, 0, 0, .09);--nav-tabs-margin-bottom: 1rem;--tooltip-color: #fff;--tooltip-bg: #212529;--tooltip-opacity: 1;--screen-sm-min: 576px;--screen-md-min: 768px;--screen-lg-min: 992px;--screen-xl-min: 1200px;--tree-container-height: 200px;--screen-xs-max:575px;--screen-sm-max:767px;--screen-md-max:991px;--screen-lg-max:1199px;--navbar-height: 43px}/*!
+ * Bootstrap  v5.2.3 (https://getbootstrap.com/)
+ * Copyright 2011-2022 The Bootstrap Authors
+ * Copyright 2011-2022 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ */:root{--bs-blue: #007bff;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #a94442;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #d48200;--bs-green: #008a00;--bs-teal: #20c997;--bs-cyan: #17a2b8;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-accent: #25828e;--bs-warning-dark: #fd7e14;--bs-primary: #25828e;--bs-secondary: #374249;--bs-success: #008a00;--bs-info: #25828e;--bs-warning: #d48200;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #343a40;--bs-accent-rgb: 37, 130, 142;--bs-warning-dark-rgb: 253, 126, 20;--bs-primary-rgb: 37, 130, 142;--bs-secondary-rgb: 55, 66, 73;--bs-success-rgb: 0, 138, 0;--bs-info-rgb: 37, 130, 142;--bs-warning-rgb: 212, 130, 0;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 52, 58, 64;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size: 1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-bg: #fff;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, .175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-2xl: 2rem;--bs-border-radius-pill: 50rem;--bs-link-color: #25828e;--bs-link-hover-color: #1e6872;--bs-code-color: #a94442;--bs-highlight-bg: #f6e6cc}*,*:before,*:after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--bs-link-color);text-decoration:underline}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer:before{content:"\2014\a0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid var(--bs-border-color);border-radius:.375rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 30px;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}.container-2xl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}.row,cd-about dl{--bs-gutter-x: 30px;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*,cd-about dl>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4,cd-about dt{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8,cd-about dd{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12,.cd-col-form,cd-health cd-info-card{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8,.cd-col-form-input,.cd-col-form-offset{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12,cd-health cd-info-card{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4,.cd-col-form-offset{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6,cd-health cd-info-card{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8,.cd-col-form-input,.cd-col-form-offset{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12,cd-health cd-info-card.cd-chart-card{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label,cd-health cd-info-card.cd-capacity-card{flex:0 0 auto;width:25%}.col-lg-4,cd-modal .cd-col-form-label,cd-modal formly-form .form-label,formly-form cd-modal .form-label,cd-modal formly-form .custom-control-label,formly-form cd-modal .custom-control-label,cd-health cd-info-card{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6,cd-health cd-info-card.cd-chart-card,cd-health cd-info-card.cd-performance-card{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8,cd-modal .cd-col-form-input,cd-modal .cd-col-form-offset,.cd-col-form{flex:0 0 auto;width:66.66666667%}.col-lg-9,.cd-col-form-input,.cd-col-form-offset{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3,.cd-col-form-offset{margin-left:25%}.offset-lg-4,cd-modal .cd-col-form-offset{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl,cd-health cd-info-card.cd-performance-card,cd-health cd-info-card.cd-capacity-card{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3,cd-health cd-info-card.cd-status-card{flex:0 0 auto;width:25%}.col-xl-4,cd-health cd-info-card.cd-chart-card{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6,.cd-col-form{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1450px){.col-2xl{flex:1 0 0%}.row-cols-2xl-auto>*{flex:0 0 auto;width:auto}.row-cols-2xl-1>*{flex:0 0 auto;width:100%}.row-cols-2xl-2>*{flex:0 0 auto;width:50%}.row-cols-2xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-2xl-4>*{flex:0 0 auto;width:25%}.row-cols-2xl-5>*{flex:0 0 auto;width:20%}.row-cols-2xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-2xl-auto{flex:0 0 auto;width:auto}.col-2xl-1{flex:0 0 auto;width:8.33333333%}.col-2xl-2{flex:0 0 auto;width:16.66666667%}.col-2xl-3,cd-health cd-info-card.cd-chart-card{flex:0 0 auto;width:25%}.col-2xl-4{flex:0 0 auto;width:33.33333333%}.col-2xl-5{flex:0 0 auto;width:41.66666667%}.col-2xl-6{flex:0 0 auto;width:50%}.col-2xl-7{flex:0 0 auto;width:58.33333333%}.col-2xl-8{flex:0 0 auto;width:66.66666667%}.col-2xl-9{flex:0 0 auto;width:75%}.col-2xl-10{flex:0 0 auto;width:83.33333333%}.col-2xl-11{flex:0 0 auto;width:91.66666667%}.col-2xl-12{flex:0 0 auto;width:100%}.offset-2xl-0{margin-left:0}.offset-2xl-1{margin-left:8.33333333%}.offset-2xl-2{margin-left:16.66666667%}.offset-2xl-3{margin-left:25%}.offset-2xl-4{margin-left:33.33333333%}.offset-2xl-5{margin-left:41.66666667%}.offset-2xl-6{margin-left:50%}.offset-2xl-7{margin-left:58.33333333%}.offset-2xl-8{margin-left:66.66666667%}.offset-2xl-9{margin-left:75%}.offset-2xl-10{margin-left:83.33333333%}.offset-2xl-11{margin-left:91.66666667%}.g-2xl-0,.gx-2xl-0{--bs-gutter-x: 0}.g-2xl-0,.gy-2xl-0{--bs-gutter-y: 0}.g-2xl-1,.gx-2xl-1{--bs-gutter-x: .25rem}.g-2xl-1,.gy-2xl-1{--bs-gutter-y: .25rem}.g-2xl-2,.gx-2xl-2{--bs-gutter-x: .5rem}.g-2xl-2,.gy-2xl-2{--bs-gutter-y: .5rem}.g-2xl-3,.gx-2xl-3{--bs-gutter-x: 1rem}.g-2xl-3,.gy-2xl-3{--bs-gutter-y: 1rem}.g-2xl-4,.gx-2xl-4{--bs-gutter-x: 1.5rem}.g-2xl-4,.gy-2xl-4{--bs-gutter-y: 1.5rem}.g-2xl-5,.gx-2xl-5{--bs-gutter-x: 3rem}.g-2xl-5,.gy-2xl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color: var(--bs-body-color);--bs-table-bg: transparent;--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: transparent;--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0, 0, 0, .05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0, 0, 0, .1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0, 0, 0, .075);width:100%;margin-bottom:1rem;color:var(--bs-table-color);vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:2px solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-color: #000;--bs-table-bg: #d3e6e8;--bs-table-border-color: #becfd1;--bs-table-striped-bg: #c8dbdc;--bs-table-striped-color: #000;--bs-table-active-bg: #becfd1;--bs-table-active-color: #000;--bs-table-hover-bg: #c3d5d7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #d7d9db;--bs-table-border-color: #c2c3c5;--bs-table-striped-bg: #ccced0;--bs-table-striped-color: #000;--bs-table-active-bg: #c2c3c5;--bs-table-active-color: #000;--bs-table-hover-bg: #c7c9cb;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #cce8cc;--bs-table-border-color: #b8d1b8;--bs-table-striped-bg: #c2dcc2;--bs-table-striped-color: #000;--bs-table-active-bg: #b8d1b8;--bs-table-active-color: #000;--bs-table-hover-bg: #bdd7bd;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #d3e6e8;--bs-table-border-color: #becfd1;--bs-table-striped-bg: #c8dbdc;--bs-table-striped-color: #000;--bs-table-active-bg: #becfd1;--bs-table-active-color: #000;--bs-table-hover-bg: #c3d5d7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #f6e6cc;--bs-table-border-color: #ddcfb8;--bs-table-striped-bg: #eadbc2;--bs-table-striped-color: #000;--bs-table-active-bg: #ddcfb8;--bs-table-active-color: #000;--bs-table-hover-bg: #e4d5bd;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #343a40;--bs-table-border-color: #484e53;--bs-table-striped-bg: #3e444a;--bs-table-striped-color: #fff;--bs-table-active-bg: #484e53;--bs-table-active-color: #fff;--bs-table-hover-bg: #43494e;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1449.98px){.table-responsive-2xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.custom-control-label{margin-bottom:.5rem}.col-form-label,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control,.cd-form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control,.cd-form-control{transition:none}}.form-control[type=file],[type=file].cd-form-control{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]),[type=file].cd-form-control:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus,.cd-form-control:focus{color:#212529;background-color:#fff;border-color:#92c1c7;outline:0;box-shadow:0 0 0 .25rem #25828e40}.form-control::-webkit-date-and-time-value,.cd-form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder,.cd-form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.cd-form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button,.cd-form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button,.cd-form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button,.cd-form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control,textarea.cd-form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:calc(1.5em + .75rem + 2px);padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:.375rem}.form-control-color::-webkit-color-swatch{border-radius:.375rem}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + 2px)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + 2px)}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#92c1c7;outline:0;box-shadow:0 0 0 .25rem #25828e40}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.25rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.5rem}.form-check,.custom-radio,.custom-checkbox{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input,.custom-radio .form-check-input,.custom-checkbox .form-check-input,.custom-checkbox .custom-control-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input,.form-check-reverse .custom-checkbox .custom-control-input,.custom-checkbox .form-check-reverse .custom-control-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input,.custom-checkbox .custom-control-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);appearance:none;-webkit-print-color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox],.custom-checkbox [type=checkbox].custom-control-input{border-radius:.25em}.form-check-input[type=radio],.custom-checkbox [type=radio].custom-control-input{border-radius:50%}.form-check-input:active,.custom-checkbox .custom-control-input:active{filter:brightness(90%)}.form-check-input:focus,.custom-checkbox .custom-control-input:focus{border-color:#92c1c7;outline:0;box-shadow:0 0 0 .25rem #25828e40}.form-check-input:checked,.custom-checkbox .custom-control-input:checked{background-color:#25828e;border-color:#25828e}.form-check-input:checked[type=checkbox],.custom-checkbox .custom-control-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.custom-checkbox .custom-control-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.custom-checkbox [type=checkbox].custom-control-input:indeterminate{background-color:#25828e;border-color:#25828e;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.custom-checkbox .custom-control-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.custom-checkbox .form-check-input[disabled]~.custom-control-label,.custom-checkbox [disabled].custom-control-input~.form-check-label,.custom-checkbox [disabled].custom-control-input~.custom-control-label,.form-check-input:disabled~.form-check-label,.custom-checkbox .form-check-input:disabled~.custom-control-label,.custom-checkbox .custom-control-input:disabled~.form-check-label,.custom-checkbox .custom-control-input:disabled~.custom-control-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input,.form-switch .custom-checkbox .custom-control-input,.custom-checkbox .form-switch .custom-control-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input,.form-switch .custom-checkbox .custom-control-input,.custom-checkbox .form-switch .custom-control-input{transition:none}}.form-switch .form-check-input:focus,.form-switch .custom-checkbox .custom-control-input:focus,.custom-checkbox .form-switch .custom-control-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2392c1c7'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked,.form-switch .custom-checkbox .custom-control-input:checked,.custom-checkbox .form-switch .custom-control-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input,.form-switch.form-check-reverse .custom-checkbox .custom-control-input,.custom-checkbox .form-switch.form-check-reverse .custom-control-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #25828e40}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #25828e40}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#25828e;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#bedadd}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#25828e;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#bedadd}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.cd-form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;width:100%;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.cd-form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.cd-form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.cd-form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.cd-form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.cd-form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.cd-form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.cd-form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control:-webkit-autofill~label,.form-floating>.cd-form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.cd-form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.cd-form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.375rem}.input-group-lg>.form-control,.input-group-lg>.cd-form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.form-control,.input-group-sm>.cd-form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.cd-form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.cd-form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.cd-form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:100%;color:#008a00}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:#008a00;border-radius:.375rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,formly-form .ng-touched.ng-valid~.valid-feedback,.is-valid~.valid-tooltip,formly-form .ng-touched.ng-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.was-validated .cd-form-control:valid,.form-control.is-valid,formly-form .form-control.ng-touched.ng-valid,.is-valid.cd-form-control,formly-form .cd-form-control.ng-touched.ng-valid{border-color:#008a00;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23008a00' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.was-validated .cd-form-control:valid:focus,.form-control.is-valid:focus,formly-form .form-control.ng-touched.ng-valid:focus,.is-valid.cd-form-control:focus,formly-form .cd-form-control.ng-touched.ng-valid:focus{border-color:#008a00;box-shadow:0 0 0 .25rem #008a0040}.was-validated textarea.form-control:valid,.was-validated textarea.cd-form-control:valid,textarea.form-control.is-valid,formly-form textarea.form-control.ng-touched.ng-valid,textarea.is-valid.cd-form-control,formly-form textarea.cd-form-control.ng-touched.ng-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid,formly-form .form-select.ng-touched.ng-valid{border-color:#008a00}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),formly-form .form-select.ng-touched.ng-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],formly-form .form-select.ng-touched.ng-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23008a00' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus,formly-form .form-select.ng-touched.ng-valid:focus{border-color:#008a00;box-shadow:0 0 0 .25rem #008a0040}.was-validated .form-control-color:valid,.form-control-color.is-valid,formly-form .form-control-color.ng-touched.ng-valid{width:calc(3.75rem + 1.5em)}.was-validated .form-check-input:valid,.was-validated .custom-checkbox .custom-control-input:valid,.custom-checkbox .was-validated .custom-control-input:valid,.form-check-input.is-valid,formly-form .form-check-input.ng-touched.ng-valid,.custom-checkbox .is-valid.custom-control-input,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid{border-color:#008a00}.was-validated .form-check-input:valid:checked,.was-validated .custom-checkbox .custom-control-input:valid:checked,.custom-checkbox .was-validated .custom-control-input:valid:checked,.form-check-input.is-valid:checked,formly-form .form-check-input.ng-touched.ng-valid:checked,.custom-checkbox .is-valid.custom-control-input:checked,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:checked,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:checked{background-color:#008a00}.was-validated .form-check-input:valid:focus,.was-validated .custom-checkbox .custom-control-input:valid:focus,.custom-checkbox .was-validated .custom-control-input:valid:focus,.form-check-input.is-valid:focus,formly-form .form-check-input.ng-touched.ng-valid:focus,.custom-checkbox .is-valid.custom-control-input:focus,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:focus,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:focus{box-shadow:0 0 0 .25rem #008a0040}.was-validated .form-check-input:valid~.form-check-label,.was-validated .custom-checkbox .form-check-input:valid~.custom-control-label,.custom-checkbox .was-validated .form-check-input:valid~.custom-control-label,.was-validated .custom-checkbox .custom-control-input:valid~.form-check-label,.was-validated .custom-checkbox .custom-control-input:valid~.custom-control-label,.custom-checkbox .was-validated .custom-control-input:valid~.form-check-label,.custom-checkbox .was-validated .custom-control-input:valid~.custom-control-label,.form-check-input.is-valid~.form-check-label,formly-form .form-check-input.ng-touched.ng-valid~.form-check-label,.custom-checkbox .form-check-input.is-valid~.custom-control-label,.custom-checkbox formly-form .form-check-input.ng-touched.ng-valid~.custom-control-label,formly-form .custom-checkbox .form-check-input.ng-touched.ng-valid~.custom-control-label,.custom-checkbox .is-valid.custom-control-input~.form-check-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.form-check-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.form-check-label,.custom-checkbox .is-valid.custom-control-input~.custom-control-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.custom-control-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.custom-control-label{color:#008a00}.form-check-inline .form-check-input~.valid-feedback,.form-check-inline .custom-checkbox .custom-control-input~.valid-feedback,.custom-checkbox .form-check-inline .custom-control-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.cd-form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,formly-form .input-group>.form-control.ng-touched.ng-valid:not(:focus),.input-group>.cd-form-control:not(:focus).is-valid,formly-form .input-group>.cd-form-control.ng-touched.ng-valid:not(:focus),.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,formly-form .input-group>.form-select.ng-touched.ng-valid:not(:focus),.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid,formly-form .input-group>.form-floating.ng-touched.ng-valid:not(:focus-within){z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:100%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:#dc3545;border-radius:.375rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,formly-form .ng-touched.ng-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,formly-form .ng-touched.ng-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.was-validated .cd-form-control:invalid,.form-control.is-invalid,formly-form .form-control.ng-touched.ng-invalid,.is-invalid.cd-form-control,formly-form .cd-form-control.ng-touched.ng-invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.was-validated .cd-form-control:invalid:focus,.form-control.is-invalid:focus,formly-form .form-control.ng-touched.ng-invalid:focus,.is-invalid.cd-form-control:focus,formly-form .cd-form-control.ng-touched.ng-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem #dc354540}.was-validated textarea.form-control:invalid,.was-validated textarea.cd-form-control:invalid,textarea.form-control.is-invalid,formly-form textarea.form-control.ng-touched.ng-invalid,textarea.is-invalid.cd-form-control,formly-form textarea.cd-form-control.ng-touched.ng-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid,formly-form .form-select.ng-touched.ng-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),formly-form .form-select.ng-touched.ng-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],formly-form .form-select.ng-touched.ng-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus,formly-form .form-select.ng-touched.ng-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem #dc354540}.was-validated .form-control-color:invalid,.form-control-color.is-invalid,formly-form .form-control-color.ng-touched.ng-invalid{width:calc(3.75rem + 1.5em)}.was-validated .form-check-input:invalid,.was-validated .custom-checkbox .custom-control-input:invalid,.custom-checkbox .was-validated .custom-control-input:invalid,.form-check-input.is-invalid,formly-form .form-check-input.ng-touched.ng-invalid,.custom-checkbox .is-invalid.custom-control-input,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.was-validated .custom-checkbox .custom-control-input:invalid:checked,.custom-checkbox .was-validated .custom-control-input:invalid:checked,.form-check-input.is-invalid:checked,formly-form .form-check-input.ng-touched.ng-invalid:checked,.custom-checkbox .is-invalid.custom-control-input:checked,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid:checked,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.was-validated .custom-checkbox .custom-control-input:invalid:focus,.custom-checkbox .was-validated .custom-control-input:invalid:focus,.form-check-input.is-invalid:focus,formly-form .form-check-input.ng-touched.ng-invalid:focus,.custom-checkbox .is-invalid.custom-control-input:focus,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid:focus,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid:focus{box-shadow:0 0 0 .25rem #dc354540}.was-validated .form-check-input:invalid~.form-check-label,.was-validated .custom-checkbox .form-check-input:invalid~.custom-control-label,.custom-checkbox .was-validated .form-check-input:invalid~.custom-control-label,.was-validated .custom-checkbox .custom-control-input:invalid~.form-check-label,.was-validated .custom-checkbox .custom-control-input:invalid~.custom-control-label,.custom-checkbox .was-validated .custom-control-input:invalid~.form-check-label,.custom-checkbox .was-validated .custom-control-input:invalid~.custom-control-label,.form-check-input.is-invalid~.form-check-label,formly-form .form-check-input.ng-touched.ng-invalid~.form-check-label,.custom-checkbox .form-check-input.is-invalid~.custom-control-label,.custom-checkbox formly-form .form-check-input.ng-touched.ng-invalid~.custom-control-label,formly-form .custom-checkbox .form-check-input.ng-touched.ng-invalid~.custom-control-label,.custom-checkbox .is-invalid.custom-control-input~.form-check-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid~.form-check-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid~.form-check-label,.custom-checkbox .is-invalid.custom-control-input~.custom-control-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid~.custom-control-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid~.custom-control-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback,.form-check-inline .custom-checkbox .custom-control-input~.invalid-feedback,.custom-checkbox .form-check-inline .custom-control-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.cd-form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,formly-form .input-group>.form-control.ng-touched.ng-invalid:not(:focus),.input-group>.cd-form-control:not(:focus).is-invalid,formly-form .input-group>.cd-form-control.ng-touched.ng-invalid:not(:focus),.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,formly-form .input-group>.form-select.ng-touched.ng-invalid:not(:focus),.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid,formly-form .input-group>.form-floating.ng-touched.ng-invalid:not(:focus-within){z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size: 1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #212529;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: .375rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-accent,.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #25828e;--bs-btn-border-color: #25828e;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #1f6f79;--bs-btn-hover-border-color: #1e6872;--bs-btn-focus-shadow-rgb: 70, 149, 159;--bs-btn-active-color: #fff;--bs-btn-active-bg: #1e6872;--bs-btn-active-border-color: #1c626b;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #25828e;--bs-btn-disabled-border-color: #25828e}.btn-warning-dark{--bs-btn-color: #000;--bs-btn-bg: #fd7e14;--bs-btn-border-color: #fd7e14;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #fd9137;--bs-btn-hover-border-color: #fd8b2c;--bs-btn-focus-shadow-rgb: 215, 107, 17;--bs-btn-active-color: #000;--bs-btn-active-bg: #fd9843;--bs-btn-active-border-color: #fd8b2c;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #fd7e14;--bs-btn-disabled-border-color: #fd7e14}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #25828e;--bs-btn-border-color: #25828e;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #1f6f79;--bs-btn-hover-border-color: #1e6872;--bs-btn-focus-shadow-rgb: 70, 149, 159;--bs-btn-active-color: #fff;--bs-btn-active-bg: #1e6872;--bs-btn-active-border-color: #1c626b;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #25828e;--bs-btn-disabled-border-color: #25828e}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #374249;--bs-btn-border-color: #374249;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2f383e;--bs-btn-hover-border-color: #2c353a;--bs-btn-focus-shadow-rgb: 85, 94, 100;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2c353a;--bs-btn-active-border-color: #293237;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #374249;--bs-btn-disabled-border-color: #374249}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #008a00;--bs-btn-border-color: #008a00;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #007500;--bs-btn-hover-border-color: #006e00;--bs-btn-focus-shadow-rgb: 38, 156, 38;--bs-btn-active-color: #fff;--bs-btn-active-bg: #006e00;--bs-btn-active-border-color: #006800;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #008a00;--bs-btn-disabled-border-color: #008a00}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #25828e;--bs-btn-border-color: #25828e;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #1f6f79;--bs-btn-hover-border-color: #1e6872;--bs-btn-focus-shadow-rgb: 70, 149, 159;--bs-btn-active-color: #fff;--bs-btn-active-bg: #1e6872;--bs-btn-active-border-color: #1c626b;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #25828e;--bs-btn-disabled-border-color: #25828e}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #d48200;--bs-btn-border-color: #d48200;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #da9526;--bs-btn-hover-border-color: #d88f1a;--bs-btn-focus-shadow-rgb: 180, 111, 0;--bs-btn-active-color: #000;--bs-btn-active-bg: #dd9b33;--bs-btn-active-border-color: #d88f1a;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #d48200;--bs-btn-disabled-border-color: #d48200}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225, 83, 97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light,.btn-default{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #52585d;--bs-btn-hover-border-color: #484e53;--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: #5d6166;--bs-btn-active-border-color: #484e53;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-outline-accent{--bs-btn-color: #25828e;--bs-btn-border-color: #25828e;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #25828e;--bs-btn-hover-border-color: #25828e;--bs-btn-focus-shadow-rgb: 37, 130, 142;--bs-btn-active-color: #fff;--bs-btn-active-bg: #25828e;--bs-btn-active-border-color: #25828e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #25828e;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #25828e;--bs-gradient: none}.btn-outline-warning-dark{--bs-btn-color: #fd7e14;--bs-btn-border-color: #fd7e14;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #fd7e14;--bs-btn-hover-border-color: #fd7e14;--bs-btn-focus-shadow-rgb: 253, 126, 20;--bs-btn-active-color: #000;--bs-btn-active-bg: #fd7e14;--bs-btn-active-border-color: #fd7e14;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #fd7e14;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #fd7e14;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #25828e;--bs-btn-border-color: #25828e;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #25828e;--bs-btn-hover-border-color: #25828e;--bs-btn-focus-shadow-rgb: 37, 130, 142;--bs-btn-active-color: #fff;--bs-btn-active-bg: #25828e;--bs-btn-active-border-color: #25828e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #25828e;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #25828e;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #374249;--bs-btn-border-color: #374249;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #374249;--bs-btn-hover-border-color: #374249;--bs-btn-focus-shadow-rgb: 55, 66, 73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #374249;--bs-btn-active-border-color: #374249;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #374249;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #374249;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #008a00;--bs-btn-border-color: #008a00;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #008a00;--bs-btn-hover-border-color: #008a00;--bs-btn-focus-shadow-rgb: 0, 138, 0;--bs-btn-active-color: #fff;--bs-btn-active-bg: #008a00;--bs-btn-active-border-color: #008a00;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #008a00;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #008a00;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #25828e;--bs-btn-border-color: #25828e;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #25828e;--bs-btn-hover-border-color: #25828e;--bs-btn-focus-shadow-rgb: 37, 130, 142;--bs-btn-active-color: #fff;--bs-btn-active-bg: #25828e;--bs-btn-active-border-color: #25828e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #25828e;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #25828e;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #d48200;--bs-btn-border-color: #d48200;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d48200;--bs-btn-hover-border-color: #d48200;--bs-btn-focus-shadow-rgb: 212, 130, 0;--bs-btn-active-color: #000;--bs-btn-active-bg: #d48200;--bs-btn-active-border-color: #d48200;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #d48200;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #d48200;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220, 53, 69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: none;--bs-btn-focus-shadow-rgb: 70, 149, 159;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size: 1.25rem;--bs-btn-border-radius: .5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size: .875rem;--bs-btn-border-radius: .25rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size: 1rem;--bs-dropdown-color: #212529;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: .375rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius:calc(.375rem - 1px);--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);--bs-dropdown-link-color: #212529;--bs-dropdown-link-hover-color: #1e2125;--bs-dropdown-link-hover-bg: #e9ecef;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #25828e;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1450px){.dropdown-menu-2xl-start{--bs-position: start}.dropdown-menu-2xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-2xl-end{--bs-position: end}.dropdown-menu-2xl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle:after{display:none}.dropstart .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, .15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #25828e;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.375rem}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: #6c757d;display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: .375rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #495057;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));background:none;border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: .375rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #25828e}.nav-pills .nav-link{background:none;border:0;border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .5rem;--bs-navbar-color: rgba(0, 0, 0, .55);--bs-navbar-hover-color: rgba(0, 0, 0, .7);--bs-navbar-disabled-color: rgba(0, 0, 0, .3);--bs-navbar-active-color: rgba(0, 0, 0, .9);--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(0, 0, 0, .9);--bs-navbar-brand-hover-color: rgba(0, 0, 0, .9);--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(0, 0, 0, .1);--bs-navbar-toggler-border-radius: .375rem;--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow .15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .show>.nav-link,.navbar-nav .nav-link.active{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1450px){.navbar-expand-2xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-2xl .navbar-nav{flex-direction:row}.navbar-expand-2xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-2xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-2xl .navbar-nav-scroll{overflow:visible}.navbar-expand-2xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-2xl .navbar-toggler{display:none}.navbar-expand-2xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-2xl .offcanvas .offcanvas-header{display:none}.navbar-expand-2xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark{--bs-navbar-color: rgba(255, 255, 255, .55);--bs-navbar-hover-color: rgba(255, 255, 255, .75);--bs-navbar-disabled-color: rgba(255, 255, 255, .25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255, 255, 255, .1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-border-width: 1px;--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: .375rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(.375rem - 1px);--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: #f8f9fa;--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 15px;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;inset:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: #212529;--bs-accordion-bg: #fff;--bs-accordion-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out, border-radius .15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: 1px;--bs-accordion-border-radius: .375rem;--bs-accordion-inner-border-radius:calc(.375rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #212529;--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform .2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23217580'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #92c1c7;--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(37, 130, 142, .25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: #217580;--bs-accordion-active-bg: #e9f3f4}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed):after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button:after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: #6c757d;--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: #6c757d;display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination,cd-table .cd-datatable .datatable-footer .datatable-pager ul{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size: 1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: .375rem;--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: #e9ecef;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(37, 130, 142, .25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #25828e;--bs-pagination-active-border-color: #25828e;--bs-pagination-disabled-color: #6c757d;--bs-pagination-disabled-bg: #fff;--bs-pagination-disabled-border-color: #dee2e6;display:flex;padding-left:0;list-style:none}.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a{transition:none}}.page-link:hover,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a.active,.active>.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .active>a{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a.disabled,.disabled>.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .disabled>a{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link,.page-item:not(:first-child) cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:not(:first-child) a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:not(:first-child) .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:not(:first-child) a{margin-left:-1px}.page-item:first-child .page-link,.page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link,.page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size: 1.25rem;--bs-pagination-border-radius: .5rem}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size: .875rem;--bs-pagination-border-radius: .25rem}.badge,.badge-dark,.badge-light,.badge-warning,.badge-info,.badge-danger,.badge-success,.badge-secondary,.badge-primary{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size: 1rem;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: .375rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty,.badge-dark:empty,.badge-light:empty,.badge-warning:empty,.badge-info:empty,.badge-danger:empty,.badge-success:empty,.badge-secondary:empty,.badge-primary:empty{display:none}.btn .badge,.btn .badge-dark,.btn .badge-light,.btn .badge-warning,.btn .badge-info,.btn .badge-danger,.btn .badge-success,.btn .badge-secondary,.btn .badge-primary{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 1px solid var(--bs-alert-border-color);--bs-alert-border-radius: .375rem;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-accent{--bs-alert-color: #164e55;--bs-alert-bg: #d3e6e8;--bs-alert-border-color: #bedadd}.alert-accent .alert-link{color:#123e44}.alert-warning-dark{--bs-alert-color: #984c0c;--bs-alert-bg: #ffe5d0;--bs-alert-border-color: #fed8b9}.alert-warning-dark .alert-link{color:#7a3d0a}.alert-primary{--bs-alert-color: #164e55;--bs-alert-bg: #d3e6e8;--bs-alert-border-color: #bedadd}.alert-primary .alert-link{color:#123e44}.alert-secondary{--bs-alert-color: #21282c;--bs-alert-bg: #d7d9db;--bs-alert-border-color: #c3c6c8}.alert-secondary .alert-link{color:#1a2023}.alert-success{--bs-alert-color: #005300;--bs-alert-bg: #cce8cc;--bs-alert-border-color: #b3dcb3}.alert-success .alert-link{color:#004200}.alert-info{--bs-alert-color: #164e55;--bs-alert-bg: #d3e6e8;--bs-alert-border-color: #bedadd}.alert-info .alert-link{color:#123e44}.alert-warning{--bs-alert-color: #7f4e00;--bs-alert-bg: #f6e6cc;--bs-alert-border-color: #f2dab3}.alert-warning .alert-link{color:#663e00}.alert-danger{--bs-alert-color: #842029;--bs-alert-bg: #f8d7da;--bs-alert-border-color: #f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{--bs-alert-color: #636464;--bs-alert-bg: #fefefe;--bs-alert-border-color: #fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{--bs-alert-color: #1f2326;--bs-alert-bg: #d6d8d9;--bs-alert-border-color: #c2c4c6}.alert-dark .alert-link{color:#191c1e}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{--bs-progress-height: 1rem;--bs-progress-font-size: .75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: .375rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #25828e;--bs-progress-bar-transition: width .6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #212529;--bs-list-group-bg: #fff;--bs-list-group-border-color: rgba(0, 0, 0, .125);--bs-list-group-border-width: 1px;--bs-list-group-border-radius: .375rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: #495057;--bs-list-group-action-hover-color: #495057;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #212529;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: #6c757d;--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #25828e;--bs-list-group-active-border-color: #25828e;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1450px){.list-group-horizontal-2xl{flex-direction:row}.list-group-horizontal-2xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-2xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-2xl>.list-group-item.active{margin-top:0}.list-group-horizontal-2xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-2xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-accent{color:#164e55;background-color:#d3e6e8}.list-group-item-accent.list-group-item-action:hover,.list-group-item-accent.list-group-item-action:focus{color:#164e55;background-color:#becfd1}.list-group-item-accent.list-group-item-action.active{color:#fff;background-color:#164e55;border-color:#164e55}.list-group-item-warning-dark{color:#984c0c;background-color:#ffe5d0}.list-group-item-warning-dark.list-group-item-action:hover,.list-group-item-warning-dark.list-group-item-action:focus{color:#984c0c;background-color:#e6cebb}.list-group-item-warning-dark.list-group-item-action.active{color:#fff;background-color:#984c0c;border-color:#984c0c}.list-group-item-primary{color:#164e55;background-color:#d3e6e8}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#164e55;background-color:#becfd1}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#164e55;border-color:#164e55}.list-group-item-secondary{color:#21282c;background-color:#d7d9db}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#21282c;background-color:#c2c3c5}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#21282c;border-color:#21282c}.list-group-item-success{color:#005300;background-color:#cce8cc}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#005300;background-color:#b8d1b8}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#005300;border-color:#005300}.list-group-item-info{color:#164e55;background-color:#d3e6e8}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#164e55;background-color:#becfd1}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#164e55;border-color:#164e55}.list-group-item-warning{color:#7f4e00;background-color:#f6e6cc}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#7f4e00;background-color:#ddcfb8}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7f4e00;border-color:#7f4e00}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#1f2326;background-color:#d6d8d9}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1f2326;background-color:#c1c2c3}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1f2326;border-color:#1f2326}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem #25828e40;opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 30px;--bs-toast-max-width: 350px;--bs-toast-font-size: .875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255, 255, 255, .85);--bs-toast-border-width: 1px;--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: .375rem;--bs-toast-box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);--bs-toast-header-color: #6c757d;--bs-toast-header-bg: rgba(255, 255, 255, .85);--bs-toast-header-border-color: rgba(0, 0, 0, .05);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: 1px;--bs-modal-border-radius: .5rem;--bs-modal-box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075);--bs-modal-inner-border-radius:calc(.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1449.98px){.modal-fullscreen-2xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-2xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-2xl-down .modal-header,.modal-fullscreen-2xl-down .modal-footer{border-radius:0}.modal-fullscreen-2xl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size: .875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #212529;--bs-tooltip-border-radius: .375rem;--bs-tooltip-opacity: 1;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;padding:var(--bs-tooltip-arrow-height);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:0}.bs-tooltip-top .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:0}.bs-tooltip-bottom .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 350px;--bs-popover-font-size: 1rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: .5rem;--bs-popover-inner-border-radius:calc(.5rem - 1px);--bs-popover-box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size: 1rem;--bs-popover-header-color: ;--bs-popover-header-bg: #f0f0f0;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #212529;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow:before,.popover .popover-arrow:after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header:before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translate(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-2xl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: ;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .075)}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width: 575.98px){.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}}@media (max-width: 575.98px){.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width: 767.98px){.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}}@media (max-width: 767.98px){.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width: 991.98px){.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}}@media (max-width: 991.98px){.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width: 1199.98px){.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}}@media (max-width: 1199.98px){.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width: 1449.98px){.offcanvas-2xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 1449.98px) and (prefers-reduced-motion: reduce){.offcanvas-2xl{transition:none}}@media (max-width: 1449.98px){.offcanvas-2xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}}@media (max-width: 1449.98px){.offcanvas-2xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}}@media (max-width: 1449.98px){.offcanvas-2xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width: 1449.98px){.offcanvas-2xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width: 1449.98px){.offcanvas-2xl.showing,.offcanvas-2xl.show:not(.hiding){transform:none}}@media (max-width: 1449.98px){.offcanvas-2xl.showing,.offcanvas-2xl.hiding,.offcanvas-2xl.show{visibility:visible}}@media (min-width: 1450px){.offcanvas-2xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent!important}.offcanvas-2xl .offcanvas-header{display:none}.offcanvas-2xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translate(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn:before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix:after{display:block;clear:both;content:""}.text-bg-accent{color:#fff!important;background-color:RGBA(37,130,142,var(--bs-bg-opacity, 1))!important}.text-bg-warning-dark{color:#000!important;background-color:RGBA(253,126,20,var(--bs-bg-opacity, 1))!important}.text-bg-primary{color:#fff!important;background-color:RGBA(37,130,142,var(--bs-bg-opacity, 1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(55,66,73,var(--bs-bg-opacity, 1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(0,138,0,var(--bs-bg-opacity, 1))!important}.text-bg-info{color:#fff!important;background-color:RGBA(37,130,142,var(--bs-bg-opacity, 1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(212,130,0,var(--bs-bg-opacity, 1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity, 1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity, 1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(52,58,64,var(--bs-bg-opacity, 1))!important}.link-accent{color:#25828e!important}.link-accent:hover,.link-accent:focus{color:#1e6872!important}.link-warning-dark{color:#fd7e14!important}.link-warning-dark:hover,.link-warning-dark:focus{color:#fd9843!important}.link-primary{color:#25828e!important}.link-primary:hover,.link-primary:focus{color:#1e6872!important}.link-secondary{color:#374249!important}.link-secondary:hover,.link-secondary:focus{color:#2c353a!important}.link-success{color:#008a00!important}.link-success:hover,.link-success:focus{color:#006e00!important}.link-info{color:#25828e!important}.link-info:hover,.link-info:focus{color:#1e6872!important}.link-warning{color:#d48200!important}.link-warning:hover,.link-warning:focus{color:#dd9b33!important}.link-danger{color:#dc3545!important}.link-danger:hover,.link-danger:focus{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:hover,.link-light:focus{color:#f9fafb!important}.link-dark{color:#343a40!important}.link-dark:hover,.link-dark:focus{color:#2a2e33!important}.ratio{position:relative;width:100%}.ratio:before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1450px){.sticky-2xl-top{position:sticky;top:0;z-index:1020}.sticky-2xl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link:after{position:absolute;inset:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex,cd-health cd-info-card{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem #00000026!important}.shadow-sm{box-shadow:0 .125rem .25rem #00000013!important}.shadow-lg{box-shadow:0 1rem 3rem #0000002d!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translate(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom,.cd-header,legend{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-accent{--bs-border-opacity: 1;border-color:rgba(var(--bs-accent-rgb),var(--bs-border-opacity))!important}.border-warning-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-dark-rgb),var(--bs-border-opacity))!important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-1{--bs-border-width: 1px}.border-2{--bs-border-width: 2px}.border-3{--bs-border-width: 3px}.border-4{--bs-border-width: 4px}.border-5{--bs-border-width: 5px}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column,cd-health cd-info-card{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4,.cd-header,legend{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2,cd-logs label,.btn-toolbar cd-table-actions.btn-group{margin-right:.5rem!important}.me-3,cd-logs .form-inline>.form-group{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1,.badge,.badge-dark,.badge-light,.badge-warning,.badge-info,.badge-danger,.badge-success,.badge-secondary,.badge-primary{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3,.form-group,cd-logs .form-inline>.form-group{margin-bottom:1rem!important}.mb-4,.cd-header,legend,cd-health cd-info-card{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2,cd-table .cd-datatable .datatable-footer{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2,cd-info-card .card .card-body .card-text{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1,.cd-header,legend{padding-bottom:.25rem!important}.pb-2,cd-info-card .card{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2,cd-info-card .card .card-body .card-title{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold,cd-about dt{font-weight:700!important}.fw-semibold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-accent{--bs-text-opacity: 1;color:rgba(var(--bs-accent-rgb),var(--bs-text-opacity))!important}.text-warning-dark{--bs-text-opacity: 1;color:rgba(var(--bs-warning-dark-rgb),var(--bs-text-opacity))!important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark,.badge-light,.badge-warning{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity: 1;color:#6c757d!important}.text-black-50{--bs-text-opacity: 1;color:#00000080!important}.text-white-50{--bs-text-opacity: 1;color:#ffffff80!important}.text-reset{--bs-text-opacity: 1;color:inherit!important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.bg-accent{--bs-bg-opacity: 1;background-color:rgba(var(--bs-accent-rgb),var(--bs-bg-opacity))!important}.bg-warning-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-dark-rgb),var(--bs-bg-opacity))!important}.bg-primary,.badge-info,.badge-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary,.badge-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success,.badge-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning,.badge-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger,.badge-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light,.badge-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark,.badge-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity: 1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width: 576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width: 768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width: 992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width: 1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width: 1450px){.float-2xl-start{float:left!important}.float-2xl-end{float:right!important}.float-2xl-none{float:none!important}.d-2xl-inline{display:inline!important}.d-2xl-inline-block{display:inline-block!important}.d-2xl-block{display:block!important}.d-2xl-grid{display:grid!important}.d-2xl-table{display:table!important}.d-2xl-table-row{display:table-row!important}.d-2xl-table-cell{display:table-cell!important}.d-2xl-flex{display:flex!important}.d-2xl-inline-flex{display:inline-flex!important}.d-2xl-none{display:none!important}.flex-2xl-fill{flex:1 1 auto!important}.flex-2xl-row{flex-direction:row!important}.flex-2xl-column{flex-direction:column!important}.flex-2xl-row-reverse{flex-direction:row-reverse!important}.flex-2xl-column-reverse{flex-direction:column-reverse!important}.flex-2xl-grow-0{flex-grow:0!important}.flex-2xl-grow-1{flex-grow:1!important}.flex-2xl-shrink-0{flex-shrink:0!important}.flex-2xl-shrink-1{flex-shrink:1!important}.flex-2xl-wrap{flex-wrap:wrap!important}.flex-2xl-nowrap{flex-wrap:nowrap!important}.flex-2xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-2xl-start{justify-content:flex-start!important}.justify-content-2xl-end{justify-content:flex-end!important}.justify-content-2xl-center{justify-content:center!important}.justify-content-2xl-between{justify-content:space-between!important}.justify-content-2xl-around{justify-content:space-around!important}.justify-content-2xl-evenly{justify-content:space-evenly!important}.align-items-2xl-start{align-items:flex-start!important}.align-items-2xl-end{align-items:flex-end!important}.align-items-2xl-center{align-items:center!important}.align-items-2xl-baseline{align-items:baseline!important}.align-items-2xl-stretch{align-items:stretch!important}.align-content-2xl-start{align-content:flex-start!important}.align-content-2xl-end{align-content:flex-end!important}.align-content-2xl-center{align-content:center!important}.align-content-2xl-between{align-content:space-between!important}.align-content-2xl-around{align-content:space-around!important}.align-content-2xl-stretch{align-content:stretch!important}.align-self-2xl-auto{align-self:auto!important}.align-self-2xl-start{align-self:flex-start!important}.align-self-2xl-end{align-self:flex-end!important}.align-self-2xl-center{align-self:center!important}.align-self-2xl-baseline{align-self:baseline!important}.align-self-2xl-stretch{align-self:stretch!important}.order-2xl-first{order:-1!important}.order-2xl-0{order:0!important}.order-2xl-1{order:1!important}.order-2xl-2{order:2!important}.order-2xl-3{order:3!important}.order-2xl-4{order:4!important}.order-2xl-5{order:5!important}.order-2xl-last{order:6!important}.m-2xl-0{margin:0!important}.m-2xl-1{margin:.25rem!important}.m-2xl-2{margin:.5rem!important}.m-2xl-3{margin:1rem!important}.m-2xl-4{margin:1.5rem!important}.m-2xl-5{margin:3rem!important}.m-2xl-auto{margin:auto!important}.mx-2xl-0{margin-right:0!important;margin-left:0!important}.mx-2xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-2xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-2xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-2xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-2xl-auto{margin-right:auto!important;margin-left:auto!important}.my-2xl-0{margin-top:0!important;margin-bottom:0!important}.my-2xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-2xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-2xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-2xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-2xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-2xl-0{margin-top:0!important}.mt-2xl-1{margin-top:.25rem!important}.mt-2xl-2{margin-top:.5rem!important}.mt-2xl-3{margin-top:1rem!important}.mt-2xl-4{margin-top:1.5rem!important}.mt-2xl-5{margin-top:3rem!important}.mt-2xl-auto{margin-top:auto!important}.me-2xl-0{margin-right:0!important}.me-2xl-1{margin-right:.25rem!important}.me-2xl-2{margin-right:.5rem!important}.me-2xl-3{margin-right:1rem!important}.me-2xl-4{margin-right:1.5rem!important}.me-2xl-5{margin-right:3rem!important}.me-2xl-auto{margin-right:auto!important}.mb-2xl-0{margin-bottom:0!important}.mb-2xl-1{margin-bottom:.25rem!important}.mb-2xl-2{margin-bottom:.5rem!important}.mb-2xl-3{margin-bottom:1rem!important}.mb-2xl-4{margin-bottom:1.5rem!important}.mb-2xl-5{margin-bottom:3rem!important}.mb-2xl-auto{margin-bottom:auto!important}.ms-2xl-0{margin-left:0!important}.ms-2xl-1{margin-left:.25rem!important}.ms-2xl-2{margin-left:.5rem!important}.ms-2xl-3{margin-left:1rem!important}.ms-2xl-4{margin-left:1.5rem!important}.ms-2xl-5{margin-left:3rem!important}.ms-2xl-auto{margin-left:auto!important}.p-2xl-0{padding:0!important}.p-2xl-1{padding:.25rem!important}.p-2xl-2{padding:.5rem!important}.p-2xl-3{padding:1rem!important}.p-2xl-4{padding:1.5rem!important}.p-2xl-5{padding:3rem!important}.px-2xl-0{padding-right:0!important;padding-left:0!important}.px-2xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-2xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-2xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-2xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-2xl-0{padding-top:0!important;padding-bottom:0!important}.py-2xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-2xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-2xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-2xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-2xl-0{padding-top:0!important}.pt-2xl-1{padding-top:.25rem!important}.pt-2xl-2{padding-top:.5rem!important}.pt-2xl-3{padding-top:1rem!important}.pt-2xl-4{padding-top:1.5rem!important}.pt-2xl-5{padding-top:3rem!important}.pe-2xl-0{padding-right:0!important}.pe-2xl-1{padding-right:.25rem!important}.pe-2xl-2{padding-right:.5rem!important}.pe-2xl-3{padding-right:1rem!important}.pe-2xl-4{padding-right:1.5rem!important}.pe-2xl-5{padding-right:3rem!important}.pb-2xl-0{padding-bottom:0!important}.pb-2xl-1{padding-bottom:.25rem!important}.pb-2xl-2{padding-bottom:.5rem!important}.pb-2xl-3{padding-bottom:1rem!important}.pb-2xl-4{padding-bottom:1.5rem!important}.pb-2xl-5{padding-bottom:3rem!important}.ps-2xl-0{padding-left:0!important}.ps-2xl-1{padding-left:.25rem!important}.ps-2xl-2{padding-left:.5rem!important}.ps-2xl-3{padding-left:1rem!important}.ps-2xl-4{padding-left:1.5rem!important}.ps-2xl-5{padding-left:3rem!important}.gap-2xl-0{gap:0!important}.gap-2xl-1{gap:.25rem!important}.gap-2xl-2{gap:.5rem!important}.gap-2xl-3{gap:1rem!important}.gap-2xl-4{gap:1.5rem!important}.gap-2xl-5{gap:3rem!important}.text-2xl-start{text-align:left!important}.text-2xl-end{text-align:right!important}.text-2xl-center{text-align:center!important}}@media (min-width: 1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}/*!
+Fork Awesome 1.1.7
+License - https://forkaweso.me/Fork-Awesome/license
+
+Copyright 2018 Dave Gandy & Fork Awesome
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */@font-face{font-family:ForkAwesome;src:url(forkawesome-webfont.c0fee260bb6fd5fd.eot?v=1.1.7);src:url(forkawesome-webfont.c0fee260bb6fd5fd.eot?#iefix&v=1.1.7) format("embedded-opentype"),url(forkawesome-webfont.d0a4ad9e6369d510.woff2?v=1.1.7) format("woff2"),url(forkawesome-webfont.23671bdbd055fa7b.woff?v=1.1.7) format("woff"),url(forkawesome-webfont.3b3951dce6cf5d60.ttf?v=1.1.7) format("truetype"),url(forkawesome-webfont.3217b1b06e001045.svg?v=1.1.7#forkawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font: 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw,.fa{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scaleY(-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-sync:before,.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video:before,.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell-o:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-globe-e:before{content:"\f304"}.fa-globe-w:before{content:"\f305"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-community:before,.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus-g:before,.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-utensils:before,.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-pound:before,.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-down:before,.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-up:before,.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-down:before,.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-up:before,.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-down:before,.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-up:before,.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-utensil-spoon:before,.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-heading:before,.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-closed-captioning:before,.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-gem:before,.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-medium-square:before{content:"\f2f8"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo-v:before,.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.fa-mastodon:before{content:"\f2e1"}.fa-mastodon-alt:before{content:"\f2e2"}.fa-fork-circle:before,.fa-fork-awesome:before{content:"\f2e3"}.fa-peertube:before{content:"\f2e4"}.fa-diaspora:before{content:"\f2e5"}.fa-friendica:before{content:"\f2e6"}.fa-gnu-social:before{content:"\f2e7"}.fa-liberapay-square:before{content:"\f2e8"}.fa-liberapay:before{content:"\f2e9"}.fa-ssb:before,.fa-scuttlebutt:before{content:"\f2ea"}.fa-hubzilla:before{content:"\f2eb"}.fa-social-home:before{content:"\f2ec"}.fa-artstation:before{content:"\f2ed"}.fa-discord:before{content:"\f2ee"}.fa-discord-alt:before{content:"\f2ef"}.fa-patreon:before{content:"\f2f0"}.fa-snowdrift:before{content:"\f2f1"}.fa-activitypub:before{content:"\f2f2"}.fa-ethereum:before{content:"\f2f3"}.fa-keybase:before{content:"\f2f4"}.fa-shaarli:before{content:"\f2f5"}.fa-shaarli-o:before{content:"\f2f6"}.fa-cut-key:before,.fa-key-modern:before{content:"\f2f7"}.fa-xmpp:before{content:"\f2f9"}.fa-archive-org:before{content:"\f2fc"}.fa-freedombox:before{content:"\f2fd"}.fa-facebook-messenger:before{content:"\f2fe"}.fa-debian:before{content:"\f2ff"}.fa-mastodon-square:before{content:"\f300"}.fa-tipeee:before{content:"\f301"}.fa-react:before{content:"\f302"}.fa-dogmazic:before{content:"\f303"}.fa-zotero:before{content:"\f309"}.fa-nodejs:before{content:"\f308"}.fa-nextcloud:before{content:"\f306"}.fa-nextcloud-square:before{content:"\f307"}.fa-hackaday:before{content:"\f30a"}.fa-laravel:before{content:"\f30b"}.fa-signalapp:before{content:"\f30c"}.fa-gnupg:before{content:"\f30d"}.fa-php:before{content:"\f30e"}.fa-ffmpeg:before{content:"\f30f"}.fa-joplin:before{content:"\f310"}.fa-syncthing:before{content:"\f311"}.fa-inkscape:before{content:"\f312"}.fa-matrix-org:before{content:"\f313"}.fa-pixelfed:before{content:"\f314"}.fa-bootstrap:before{content:"\f315"}.fa-dev-to:before{content:"\f316"}.fa-hashnode:before{content:"\f317"}.fa-jirafeau:before{content:"\f318"}.fa-emby:before{content:"\f319"}.fa-wikidata:before{content:"\f31a"}.fa-gimp:before{content:"\f31b"}.fa-c:before{content:"\f31c"}.fa-digitalocean:before{content:"\f31d"}.fa-att:before{content:"\f31e"}.fa-gitea:before{content:"\f31f"}.fa-file-epub:before{content:"\f321"}.fa-python:before{content:"\f322"}.fa-archlinux:before{content:"\f323"}.fa-pleroma:before{content:"\f324"}.fa-unsplash:before{content:"\f325"}.fa-hackster:before{content:"\f326"}.fa-spell-check:before{content:"\f327"}.fa-moon:before{content:"\f328"}.fa-sun:before{content:"\f329"}.fa-f-droid:before{content:"\f32a"}.fa-biometric:before{content:"\f32b"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.info-card-popover-cluster-status{max-height:20vh;max-width:23vw}.info-card-popover-cluster-status .popover-body{font-size:1rem;max-height:19vh;max-width:100%;overflow:auto}.info-card-popover-cluster-status .popover-body li span{font-size:1.1em;font-weight:700}.info-card-popover-cluster-status .popover-body li span.health-warn-description{color:#9d6d10!important}@media (max-width: 1199px){.info-card-popover-cluster-status{max-width:31vw}}@media (max-width: 991px){.info-card-popover-cluster-status{max-width:46vw}}@media (max-width: 767px){.info-card-popover-cluster-status{max-width:83vw}}.info-card-content-clickable{border:1px solid #e9ecef;border-radius:3px;cursor:pointer;font-size:1.25em;padding:7px}.info-card-content-clickable:hover{background-color:#e9ecef;border-color:#ced4da}.rgw-overview-card-popover{max-height:600px;max-width:400px;word-break:break-all}.rgw-overview-card-popover .popover-body{font-size:1rem;max-height:600px;max-width:400px;overflow:auto}.rgw-overview-card-popover .popover-body li span{font-size:1.1em}html{background-color:#fff}html,body{font-size:12px;height:100%;width:100%}option{font-style:normal;font-weight:400}mark,.mark{background-color:#d48200;padding:0}.full-height{height:100vh}.full-width{width:100vw}.vertical-align{align-items:center;display:flex}.horizontal-align{display:flex;justify-content:center}.loading:not(cd-api-docs *){left:50%;position:absolute;top:50%}.margin-right-md{margin-right:15px}.no-border{border:0;box-shadow:0 0!important}.italic{font-style:italic}.bold{font-weight:700}.text-right{text-align:right}.text-monospace{font-family:monospace}.text-pre-wrap{white-space:pre-wrap}.text-pre{white-space:pre}.icon-danger-color{color:#dc3545}.icon-warning-color{color:#d48200}.border-warning{border-left:4px solid #d48200}.border-danger{border-left:4px solid #dc3545}.border-info{border-left:4px solid #25828e}.border-success{border-left:4px solid #008a00}.vertical-line{border-left:1px solid #ced4da}a.nav-link{color:#25828e}.was-validated .form-check-input:valid,.was-validated .custom-checkbox .custom-control-input:valid,.custom-checkbox .was-validated .custom-control-input:valid,.form-check-input.is-valid,formly-form .form-check-input.ng-touched.ng-valid,.custom-checkbox .is-valid.custom-control-input,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid{border-color:#25828ecc}.was-validated .form-check-input:valid:checked,.was-validated .custom-checkbox .custom-control-input:valid:checked,.custom-checkbox .was-validated .custom-control-input:valid:checked,.form-check-input.is-valid:checked,formly-form .form-check-input.ng-touched.ng-valid:checked,.custom-checkbox .is-valid.custom-control-input:checked,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:checked,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:checked{background-color:#25828e;border-color:#25828ecc;box-shadow:0 0 3px 2px #25828e80}.was-validated .form-check-input:valid:focus,.was-validated .custom-checkbox .custom-control-input:valid:focus,.custom-checkbox .was-validated .custom-control-input:valid:focus,.form-check-input.is-valid:focus,formly-form .form-check-input.ng-touched.ng-valid:focus,.custom-checkbox .is-valid.custom-control-input:focus,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:focus,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:focus{border-color:#25828ecc;box-shadow:0 0 3px 2px #25828e80}.was-validated .form-check-input:valid~.form-check-label,.was-validated .custom-checkbox .form-check-input:valid~.custom-control-label,.custom-checkbox .was-validated .form-check-input:valid~.custom-control-label,.was-validated .custom-checkbox .custom-control-input:valid~.form-check-label,.was-validated .custom-checkbox .custom-control-input:valid~.custom-control-label,.custom-checkbox .was-validated .custom-control-input:valid~.form-check-label,.custom-checkbox .was-validated .custom-control-input:valid~.custom-control-label,.form-check-input.is-valid~.form-check-label,formly-form .form-check-input.ng-touched.ng-valid~.form-check-label,.custom-checkbox .form-check-input.is-valid~.custom-control-label,.custom-checkbox formly-form .form-check-input.ng-touched.ng-valid~.custom-control-label,formly-form .custom-checkbox .form-check-input.ng-touched.ng-valid~.custom-control-label,.custom-checkbox .is-valid.custom-control-input~.form-check-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.form-check-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.form-check-label,.custom-checkbox .is-valid.custom-control-input~.custom-control-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.custom-control-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.custom-control-label{color:initial}.was-validated .form-check-input:valid:checked~.form-check-label:before,.was-validated .custom-checkbox .form-check-input:valid:checked~.custom-control-label:before,.custom-checkbox .was-validated .form-check-input:valid:checked~.custom-control-label:before,.was-validated .custom-checkbox .custom-control-input:valid:checked~.form-check-label:before,.was-validated .custom-checkbox .custom-control-input:valid:checked~.custom-control-label:before,.custom-checkbox .was-validated .custom-control-input:valid:checked~.form-check-label:before,.custom-checkbox .was-validated .custom-control-input:valid:checked~.custom-control-label:before,.form-check-input.is-valid:checked~.form-check-label:before,formly-form .form-check-input.ng-touched.ng-valid:checked~.form-check-label:before,.custom-checkbox .form-check-input.is-valid:checked~.custom-control-label:before,.custom-checkbox formly-form .form-check-input.ng-touched.ng-valid:checked~.custom-control-label:before,formly-form .custom-checkbox .form-check-input.ng-touched.ng-valid:checked~.custom-control-label:before,.custom-checkbox .is-valid.custom-control-input:checked~.form-check-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:checked~.form-check-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:checked~.form-check-label:before,.custom-checkbox .is-valid.custom-control-input:checked~.custom-control-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:checked~.custom-control-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:checked~.custom-control-label:before{background-color:#25828e}.was-validated .form-check-input:valid~.form-check-label:before,.was-validated .custom-checkbox .form-check-input:valid~.custom-control-label:before,.custom-checkbox .was-validated .form-check-input:valid~.custom-control-label:before,.was-validated .custom-checkbox .custom-control-input:valid~.form-check-label:before,.was-validated .custom-checkbox .custom-control-input:valid~.custom-control-label:before,.custom-checkbox .was-validated .custom-control-input:valid~.form-check-label:before,.custom-checkbox .was-validated .custom-control-input:valid~.custom-control-label:before,.form-check-input.is-valid~.form-check-label:before,formly-form .form-check-input.ng-touched.ng-valid~.form-check-label:before,.custom-checkbox .form-check-input.is-valid~.custom-control-label:before,.custom-checkbox formly-form .form-check-input.ng-touched.ng-valid~.custom-control-label:before,formly-form .custom-checkbox .form-check-input.ng-touched.ng-valid~.custom-control-label:before,.custom-checkbox .is-valid.custom-control-input~.form-check-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.form-check-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.form-check-label:before,.custom-checkbox .is-valid.custom-control-input~.custom-control-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.custom-control-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.custom-control-label:before{border-color:#25828ecc}.was-validated .form-check-input:valid:focus~.custom-control-label:before,.was-validated .custom-checkbox .custom-control-input:valid:focus~.custom-control-label:before,.custom-checkbox .was-validated .custom-control-input:valid:focus~.custom-control-label:before,.form-check-input.is-valid:focus~.custom-control-label:before,formly-form .form-check-input.ng-touched.ng-valid:focus~.custom-control-label:before,.custom-checkbox .is-valid.custom-control-input:focus~.custom-control-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:focus~.custom-control-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:focus~.custom-control-label:before{box-shadow:0 0 3px 2px #25828e80}.was-validated .form-check-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-checkbox .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.custom-checkbox .was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.form-check-input.is-valid:focus:not(:checked)~.custom-control-label:before,formly-form .form-check-input.ng-touched.ng-valid:focus:not(:checked)~.custom-control-label:before,.custom-checkbox .is-valid.custom-control-input:focus:not(:checked)~.custom-control-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:focus:not(:checked)~.custom-control-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:focus:not(:checked)~.custom-control-label:before{border-color:#25828ecc}.btn-light,.btn-default{background-color:#fff;border-color:#ced4da!important}.btn-light:hover,.btn-default:hover{background-color:#dee2e6;border-color:#6c757d!important}.btn-light:disabled,.btn-default:disabled{background-color:#e9ecef;border-color:#ced4da!important}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:0}.btn.disabled{border:0;box-shadow:none}.btn-primary .badge,.btn-primary .badge-dark,.btn-primary .badge-light,.btn-primary .badge-warning,.btn-primary .badge-info,.btn-primary .badge-danger,.btn-primary .badge-success,.btn-primary .badge-secondary,.btn-primary .badge-primary{background-color:#e9ecef;color:#25828e}.btn-group>.btn>i.fa,.cd-datatable-actions button.btn i.fa{margin-right:5px}.card-footer button.btn:not(:first-child){margin-left:5px}.dropdown-menu{min-width:50px;z-index:999999}.dropdown-menu button.dropdown-item:focus{outline:none}.dropdown-menu>li>a{cursor:pointer}.dropdown-menu>li>a>i.fa{margin-right:5px}.dropdown-menu>.active>a{background-color:#25828e;color:#e9ecef}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#1a5d66}.dataTables_wrapper .dropdown-menu>li.dropdown-divider{cursor:auto}.required:after{color:#dc3545;content:"*";font-size:1.167rem;padding-left:4px}.form-footer{display:flex;width:100%}.form-control,.cd-form-control,.form-select{display:table-cell}.form-control:focus,.cd-form-control:focus,.form-select:focus{border-color:#25828ecc;box-shadow:0 0 3px 2px #25828e80;outline:0}.custom-checkbox{padding-top:7px}.custom-radio{padding-top:5px}cd-modal .modal{background-color:#0006;display:block}cd-modal .modal-dialog{max-width:70vh}.invalid-feedback{display:block}.container-fluid,.container-sm,.container-md,.container-lg,.container-xl,.container-xxl{padding:0 30px}.ceph-icon{background:url(Ceph_Logo.beb815b55d2e7363.svg)}.prometheus-icon{background:url(prometheus_logo.8057911d27be9bb1.svg)}.custom-icon{background-clip:padding-box;background-repeat:no-repeat;background-size:contain;margin-right:8px;padding:10px}.nav-tabs{margin-bottom:1rem}#toast-container{margin-top:2vw}@media (max-width: 1600px){#toast-container{margin-top:2.5vw}}@media (max-width: 991px){#toast-container{margin-top:9vw}}@media (max-width: 900px){#toast-container{margin-top:10vw}}@media (max-width: 319px){#toast-container{margin-top:11vw}}@media (max-width: 260px){#toast-container{margin-top:14vw}}.toast-message>ul{margin:0;padding-left:1rem}.noscript{padding-top:5em}@media (min-width: 576px){.col-form-label,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{text-align:right}}.col-form-label,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{font-weight:700}.password-strength-level{flex:100%;margin-top:2px}.password-strength-level .weak,.password-strength-level .ok,.password-strength-level .strong,.password-strength-level .very-strong{border-radius:.25rem;height:13px}.password-strength-level .weak{background:#dc3545;width:25%}.password-strength-level .ok{background:#d48200;width:50%}.password-strength-level .strong{background:#008a00;width:75%}.password-strength-level .very-strong{background:#003e00;width:100%}.badge-background-gray,.badge-hdd{background-color:#6c757d;color:#fff}.badge-background-primary,.badge-ssd{background-color:#25828e;color:#fff}.badge-tab{background-color:#e9ecef;color:#495057}.badge-cd-label-green{background-color:#6ec664;color:#fff}.badge-cd-label-cyan{background-color:#009596;color:#fff}.badge-cd-label-purple{background-color:#a18fff;color:#fff}.badge-cd-label-light-blue{background-color:#35caed;color:#fff}.badge-cd-label-gold{background-color:#f4c145;color:#fff}.badge-cd-label-light-green{background-color:#ace12e;color:#fff;font-weight:bolder}tree-root tree-viewport{min-height:1em}tags-input .tags{border:1px solid #ced4da;border-radius:4px;box-shadow:inset 0 1px 1px #00000017}.card-header{font-size:1.3em}.card-body h2:first-child,.card-body .h2:first-child{margin-top:0}.disabled{pointer-events:none}a:hover{text-decoration:underline}.clickable,a{cursor:pointer;text-decoration:none}a.nav-link,a.btn-light,a.btn-default{text-decoration:none}formly-form .form-label,formly-form .custom-control-label{text-align:start;white-space:nowrap;width:-moz-fit-content;width:fit-content}formly-form .form-label span[aria-hidden=true],formly-form .custom-control-label span[aria-hidden=true]{color:#dc3545}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.84a45510313e718c.css b/ceph/src/pybind/mgr/dashboard/frontend/dist/en-US/styles.84a45510313e718c.css
deleted file mode 100644 (file)
index 302c6fb..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.swagger-ui{color:#3b4151;font-family:sans-serif}.swagger-ui html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.15}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure{margin:1em 40px}.swagger-ui hr{box-sizing:content-box;height:0;overflow:visible}.swagger-ui pre{font-family:monospace,monospace;font-size:1em}.swagger-ui a{-webkit-text-decoration-skip:objects;background-color:transparent}.swagger-ui abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}.swagger-ui b,.swagger-ui strong{font-weight:inherit;font-weight:bolder}.swagger-ui code,.swagger-ui kbd,.swagger-ui samp{font-family:monospace,monospace;font-size:1em}.swagger-ui dfn{font-style:italic}.swagger-ui mark{background-color:#ff0;color:#000}.swagger-ui small{font-size:80%}.swagger-ui sub,.swagger-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.swagger-ui sub{bottom:-.25em}.swagger-ui sup{top:-.5em}.swagger-ui audio,.swagger-ui video{display:inline-block}.swagger-ui audio:not([controls]){display:none;height:0}.swagger-ui img{border-style:none}.swagger-ui svg:not(:root){overflow:hidden}.swagger-ui button,.swagger-ui input,.swagger-ui optgroup,.swagger-ui select,.swagger-ui textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}.swagger-ui button,.swagger-ui input{overflow:visible}.swagger-ui button,.swagger-ui select{text-transform:none}.swagger-ui [type=reset],.swagger-ui [type=submit],.swagger-ui button,.swagger-ui html [type=button]{-webkit-appearance:button}.swagger-ui [type=button]::-moz-focus-inner,.swagger-ui [type=reset]::-moz-focus-inner,.swagger-ui [type=submit]::-moz-focus-inner,.swagger-ui button::-moz-focus-inner{border-style:none;padding:0}.swagger-ui [type=button]:-moz-focusring,.swagger-ui [type=reset]:-moz-focusring,.swagger-ui [type=submit]:-moz-focusring,.swagger-ui button:-moz-focusring{outline:1px dotted ButtonText}.swagger-ui fieldset{padding:.35em .75em .625em}.swagger-ui legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.swagger-ui progress{display:inline-block;vertical-align:baseline}.swagger-ui textarea{overflow:auto}.swagger-ui [type=checkbox],.swagger-ui [type=radio]{box-sizing:border-box;padding:0}.swagger-ui [type=number]::-webkit-inner-spin-button,.swagger-ui [type=number]::-webkit-outer-spin-button{height:auto}.swagger-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.swagger-ui [type=search]::-webkit-search-cancel-button,.swagger-ui [type=search]::-webkit-search-decoration{-webkit-appearance:none}.swagger-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.swagger-ui details,.swagger-ui menu{display:block}.swagger-ui summary{display:list-item}.swagger-ui canvas{display:inline-block}.swagger-ui [hidden],.swagger-ui template{display:none}.swagger-ui .debug *{outline:1px solid gold}.swagger-ui .debug-white *{outline:1px solid #fff}.swagger-ui .debug-black *{outline:1px solid #000}.swagger-ui .debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.swagger-ui .debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.swagger-ui .debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.swagger-ui .debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}.swagger-ui .border-box,.swagger-ui a,.swagger-ui article,.swagger-ui body,.swagger-ui code,.swagger-ui dd,.swagger-ui div,.swagger-ui dl,.swagger-ui dt,.swagger-ui fieldset,.swagger-ui footer,.swagger-ui form,.swagger-ui h1,.swagger-ui h2,.swagger-ui h3,.swagger-ui h4,.swagger-ui h5,.swagger-ui h6,.swagger-ui header,.swagger-ui html,.swagger-ui input[type=email],.swagger-ui input[type=number],.swagger-ui input[type=password],.swagger-ui input[type=tel],.swagger-ui input[type=text],.swagger-ui input[type=url],.swagger-ui legend,.swagger-ui li,.swagger-ui main,.swagger-ui ol,.swagger-ui p,.swagger-ui pre,.swagger-ui section,.swagger-ui table,.swagger-ui td,.swagger-ui textarea,.swagger-ui th,.swagger-ui tr,.swagger-ui ul{box-sizing:border-box}.swagger-ui .aspect-ratio{height:0;position:relative}.swagger-ui .aspect-ratio--16x9{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1{padding-bottom:100%}.swagger-ui .aspect-ratio--object{height:100%;inset:0;position:absolute;width:100%;z-index:100}@media screen and (min-width:30em){.swagger-ui .aspect-ratio-ns{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-ns{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-ns{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-ns{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-ns{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-ns{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-ns{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-ns{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-ns{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-ns{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-ns{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-ns{padding-bottom:100%}.swagger-ui .aspect-ratio--object-ns{height:100%;inset:0;position:absolute;width:100%;z-index:100}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .aspect-ratio-m{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-m{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-m{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-m{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-m{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-m{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-m{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-m{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-m{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-m{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-m{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-m{padding-bottom:100%}.swagger-ui .aspect-ratio--object-m{height:100%;inset:0;position:absolute;width:100%;z-index:100}}@media screen and (min-width:60em){.swagger-ui .aspect-ratio-l{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-l{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-l{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-l{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-l{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-l{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-l{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-l{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-l{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-l{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-l{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-l{padding-bottom:100%}.swagger-ui .aspect-ratio--object-l{height:100%;inset:0;position:absolute;width:100%;z-index:100}}.swagger-ui img{max-width:100%}.swagger-ui .cover{background-size:cover!important}.swagger-ui .contain{background-size:contain!important}@media screen and (min-width:30em){.swagger-ui .cover-ns{background-size:cover!important}.swagger-ui .contain-ns{background-size:contain!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cover-m{background-size:cover!important}.swagger-ui .contain-m{background-size:contain!important}}@media screen and (min-width:60em){.swagger-ui .cover-l{background-size:cover!important}.swagger-ui .contain-l{background-size:contain!important}}.swagger-ui .bg-center{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left{background-position:0;background-repeat:no-repeat}@media screen and (min-width:30em){.swagger-ui .bg-center-ns{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-ns{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-ns{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-ns{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-ns{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bg-center-m{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-m{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-m{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-m{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-m{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:60em){.swagger-ui .bg-center-l{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-l{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-l{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-l{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-l{background-position:0;background-repeat:no-repeat}}.swagger-ui .outline{outline:1px solid}.swagger-ui .outline-transparent{outline:1px solid transparent}.swagger-ui .outline-0{outline:0}@media screen and (min-width:30em){.swagger-ui .outline-ns{outline:1px solid}.swagger-ui .outline-transparent-ns{outline:1px solid transparent}.swagger-ui .outline-0-ns{outline:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .outline-m{outline:1px solid}.swagger-ui .outline-transparent-m{outline:1px solid transparent}.swagger-ui .outline-0-m{outline:0}}@media screen and (min-width:60em){.swagger-ui .outline-l{outline:1px solid}.swagger-ui .outline-transparent-l{outline:1px solid transparent}.swagger-ui .outline-0-l{outline:0}}.swagger-ui .ba{border-style:solid;border-width:1px}.swagger-ui .bt{border-top-style:solid;border-top-width:1px}.swagger-ui .br{border-right-style:solid;border-right-width:1px}.swagger-ui .bb{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl{border-left-style:solid;border-left-width:1px}.swagger-ui .bn{border-style:none;border-width:0}@media screen and (min-width:30em){.swagger-ui .ba-ns{border-style:solid;border-width:1px}.swagger-ui .bt-ns{border-top-style:solid;border-top-width:1px}.swagger-ui .br-ns{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-ns{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-ns{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ba-m{border-style:solid;border-width:1px}.swagger-ui .bt-m{border-top-style:solid;border-top-width:1px}.swagger-ui .br-m{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-m{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-m{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.swagger-ui .ba-l{border-style:solid;border-width:1px}.swagger-ui .bt-l{border-top-style:solid;border-top-width:1px}.swagger-ui .br-l{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-l{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-l{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-l{border-style:none;border-width:0}}.swagger-ui .b--black{border-color:#000}.swagger-ui .b--near-black{border-color:#111}.swagger-ui .b--dark-gray{border-color:#333}.swagger-ui .b--mid-gray{border-color:#555}.swagger-ui .b--gray{border-color:#777}.swagger-ui .b--silver{border-color:#999}.swagger-ui .b--light-silver{border-color:#aaa}.swagger-ui .b--moon-gray{border-color:#ccc}.swagger-ui .b--light-gray{border-color:#eee}.swagger-ui .b--near-white{border-color:#f4f4f4}.swagger-ui .b--white{border-color:#fff}.swagger-ui .b--white-90{border-color:#ffffffe6}.swagger-ui .b--white-80{border-color:#fffc}.swagger-ui .b--white-70{border-color:#ffffffb3}.swagger-ui .b--white-60{border-color:#fff9}.swagger-ui .b--white-50{border-color:#ffffff80}.swagger-ui .b--white-40{border-color:#fff6}.swagger-ui .b--white-30{border-color:#ffffff4d}.swagger-ui .b--white-20{border-color:#fff3}.swagger-ui .b--white-10{border-color:#ffffff1a}.swagger-ui .b--white-05{border-color:#ffffff0d}.swagger-ui .b--white-025{border-color:#ffffff06}.swagger-ui .b--white-0125{border-color:#ffffff03}.swagger-ui .b--black-90{border-color:#000000e6}.swagger-ui .b--black-80{border-color:#000c}.swagger-ui .b--black-70{border-color:#000000b3}.swagger-ui .b--black-60{border-color:#0009}.swagger-ui .b--black-50{border-color:#00000080}.swagger-ui .b--black-40{border-color:#0006}.swagger-ui .b--black-30{border-color:#0000004d}.swagger-ui .b--black-20{border-color:#0003}.swagger-ui .b--black-10{border-color:#0000001a}.swagger-ui .b--black-05{border-color:#0000000d}.swagger-ui .b--black-025{border-color:#00000006}.swagger-ui .b--black-0125{border-color:#00000003}.swagger-ui .b--dark-red{border-color:#e7040f}.swagger-ui .b--red{border-color:#ff4136}.swagger-ui .b--light-red{border-color:#ff725c}.swagger-ui .b--orange{border-color:#ff6300}.swagger-ui .b--gold{border-color:#ffb700}.swagger-ui .b--yellow{border-color:gold}.swagger-ui .b--light-yellow{border-color:#fbf1a9}.swagger-ui .b--purple{border-color:#5e2ca5}.swagger-ui .b--light-purple{border-color:#a463f2}.swagger-ui .b--dark-pink{border-color:#d5008f}.swagger-ui .b--hot-pink{border-color:#ff41b4}.swagger-ui .b--pink{border-color:#ff80cc}.swagger-ui .b--light-pink{border-color:#ffa3d7}.swagger-ui .b--dark-green{border-color:#137752}.swagger-ui .b--green{border-color:#19a974}.swagger-ui .b--light-green{border-color:#9eebcf}.swagger-ui .b--navy{border-color:#001b44}.swagger-ui .b--dark-blue{border-color:#00449e}.swagger-ui .b--blue{border-color:#357edd}.swagger-ui .b--light-blue{border-color:#96ccff}.swagger-ui .b--lightest-blue{border-color:#cdecff}.swagger-ui .b--washed-blue{border-color:#f6fffe}.swagger-ui .b--washed-green{border-color:#e8fdf5}.swagger-ui .b--washed-yellow{border-color:#fffceb}.swagger-ui .b--washed-red{border-color:#ffdfdf}.swagger-ui .b--transparent{border-color:transparent}.swagger-ui .b--inherit{border-color:inherit}.swagger-ui .br0{border-radius:0}.swagger-ui .br1{border-radius:.125rem}.swagger-ui .br2{border-radius:.25rem}.swagger-ui .br3{border-radius:.5rem}.swagger-ui .br4{border-radius:1rem}.swagger-ui .br-100{border-radius:100%}.swagger-ui .br-pill{border-radius:9999px}.swagger-ui .br--bottom{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left{border-bottom-right-radius:0;border-top-right-radius:0}@media screen and (min-width:30em){.swagger-ui .br0-ns{border-radius:0}.swagger-ui .br1-ns{border-radius:.125rem}.swagger-ui .br2-ns{border-radius:.25rem}.swagger-ui .br3-ns{border-radius:.5rem}.swagger-ui .br4-ns{border-radius:1rem}.swagger-ui .br-100-ns{border-radius:100%}.swagger-ui .br-pill-ns{border-radius:9999px}.swagger-ui .br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-ns{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-ns{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .br0-m{border-radius:0}.swagger-ui .br1-m{border-radius:.125rem}.swagger-ui .br2-m{border-radius:.25rem}.swagger-ui .br3-m{border-radius:.5rem}.swagger-ui .br4-m{border-radius:1rem}.swagger-ui .br-100-m{border-radius:100%}.swagger-ui .br-pill-m{border-radius:9999px}.swagger-ui .br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-m{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-m{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:60em){.swagger-ui .br0-l{border-radius:0}.swagger-ui .br1-l{border-radius:.125rem}.swagger-ui .br2-l{border-radius:.25rem}.swagger-ui .br3-l{border-radius:.5rem}.swagger-ui .br4-l{border-radius:1rem}.swagger-ui .br-100-l{border-radius:100%}.swagger-ui .br-pill-l{border-radius:9999px}.swagger-ui .br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-l{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-l{border-bottom-right-radius:0;border-top-right-radius:0}}.swagger-ui .b--dotted{border-style:dotted}.swagger-ui .b--dashed{border-style:dashed}.swagger-ui .b--solid{border-style:solid}.swagger-ui .b--none{border-style:none}@media screen and (min-width:30em){.swagger-ui .b--dotted-ns{border-style:dotted}.swagger-ui .b--dashed-ns{border-style:dashed}.swagger-ui .b--solid-ns{border-style:solid}.swagger-ui .b--none-ns{border-style:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .b--dotted-m{border-style:dotted}.swagger-ui .b--dashed-m{border-style:dashed}.swagger-ui .b--solid-m{border-style:solid}.swagger-ui .b--none-m{border-style:none}}@media screen and (min-width:60em){.swagger-ui .b--dotted-l{border-style:dotted}.swagger-ui .b--dashed-l{border-style:dashed}.swagger-ui .b--solid-l{border-style:solid}.swagger-ui .b--none-l{border-style:none}}.swagger-ui .bw0{border-width:0}.swagger-ui .bw1{border-width:.125rem}.swagger-ui .bw2{border-width:.25rem}.swagger-ui .bw3{border-width:.5rem}.swagger-ui .bw4{border-width:1rem}.swagger-ui .bw5{border-width:2rem}.swagger-ui .bt-0{border-top-width:0}.swagger-ui .br-0{border-right-width:0}.swagger-ui .bb-0{border-bottom-width:0}.swagger-ui .bl-0{border-left-width:0}@media screen and (min-width:30em){.swagger-ui .bw0-ns{border-width:0}.swagger-ui .bw1-ns{border-width:.125rem}.swagger-ui .bw2-ns{border-width:.25rem}.swagger-ui .bw3-ns{border-width:.5rem}.swagger-ui .bw4-ns{border-width:1rem}.swagger-ui .bw5-ns{border-width:2rem}.swagger-ui .bt-0-ns{border-top-width:0}.swagger-ui .br-0-ns{border-right-width:0}.swagger-ui .bb-0-ns{border-bottom-width:0}.swagger-ui .bl-0-ns{border-left-width:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .bw0-m{border-width:0}.swagger-ui .bw1-m{border-width:.125rem}.swagger-ui .bw2-m{border-width:.25rem}.swagger-ui .bw3-m{border-width:.5rem}.swagger-ui .bw4-m{border-width:1rem}.swagger-ui .bw5-m{border-width:2rem}.swagger-ui .bt-0-m{border-top-width:0}.swagger-ui .br-0-m{border-right-width:0}.swagger-ui .bb-0-m{border-bottom-width:0}.swagger-ui .bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.swagger-ui .bw0-l{border-width:0}.swagger-ui .bw1-l{border-width:.125rem}.swagger-ui .bw2-l{border-width:.25rem}.swagger-ui .bw3-l{border-width:.5rem}.swagger-ui .bw4-l{border-width:1rem}.swagger-ui .bw5-l{border-width:2rem}.swagger-ui .bt-0-l{border-top-width:0}.swagger-ui .br-0-l{border-right-width:0}.swagger-ui .bb-0-l{border-bottom-width:0}.swagger-ui .bl-0-l{border-left-width:0}}.swagger-ui .shadow-1{box-shadow:0 0 4px 2px #0003}.swagger-ui .shadow-2{box-shadow:0 0 8px 2px #0003}.swagger-ui .shadow-3{box-shadow:2px 2px 4px 2px #0003}.swagger-ui .shadow-4{box-shadow:2px 2px 8px #0003}.swagger-ui .shadow-5{box-shadow:4px 4px 8px #0003}@media screen and (min-width:30em){.swagger-ui .shadow-1-ns{box-shadow:0 0 4px 2px #0003}.swagger-ui .shadow-2-ns{box-shadow:0 0 8px 2px #0003}.swagger-ui .shadow-3-ns{box-shadow:2px 2px 4px 2px #0003}.swagger-ui .shadow-4-ns{box-shadow:2px 2px 8px #0003}.swagger-ui .shadow-5-ns{box-shadow:4px 4px 8px #0003}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .shadow-1-m{box-shadow:0 0 4px 2px #0003}.swagger-ui .shadow-2-m{box-shadow:0 0 8px 2px #0003}.swagger-ui .shadow-3-m{box-shadow:2px 2px 4px 2px #0003}.swagger-ui .shadow-4-m{box-shadow:2px 2px 8px #0003}.swagger-ui .shadow-5-m{box-shadow:4px 4px 8px #0003}}@media screen and (min-width:60em){.swagger-ui .shadow-1-l{box-shadow:0 0 4px 2px #0003}.swagger-ui .shadow-2-l{box-shadow:0 0 8px 2px #0003}.swagger-ui .shadow-3-l{box-shadow:2px 2px 4px 2px #0003}.swagger-ui .shadow-4-l{box-shadow:2px 2px 8px #0003}.swagger-ui .shadow-5-l{box-shadow:4px 4px 8px #0003}}.swagger-ui .pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.swagger-ui .top-0{top:0}.swagger-ui .right-0{right:0}.swagger-ui .bottom-0{bottom:0}.swagger-ui .left-0{left:0}.swagger-ui .top-1{top:1rem}.swagger-ui .right-1{right:1rem}.swagger-ui .bottom-1{bottom:1rem}.swagger-ui .left-1{left:1rem}.swagger-ui .top-2{top:2rem}.swagger-ui .right-2{right:2rem}.swagger-ui .bottom-2{bottom:2rem}.swagger-ui .left-2{left:2rem}.swagger-ui .top--1{top:-1rem}.swagger-ui .right--1{right:-1rem}.swagger-ui .bottom--1{bottom:-1rem}.swagger-ui .left--1{left:-1rem}.swagger-ui .top--2{top:-2rem}.swagger-ui .right--2{right:-2rem}.swagger-ui .bottom--2{bottom:-2rem}.swagger-ui .left--2{left:-2rem}.swagger-ui .absolute--fill{inset:0}@media screen and (min-width:30em){.swagger-ui .top-0-ns{top:0}.swagger-ui .left-0-ns{left:0}.swagger-ui .right-0-ns{right:0}.swagger-ui .bottom-0-ns{bottom:0}.swagger-ui .top-1-ns{top:1rem}.swagger-ui .left-1-ns{left:1rem}.swagger-ui .right-1-ns{right:1rem}.swagger-ui .bottom-1-ns{bottom:1rem}.swagger-ui .top-2-ns{top:2rem}.swagger-ui .left-2-ns{left:2rem}.swagger-ui .right-2-ns{right:2rem}.swagger-ui .bottom-2-ns{bottom:2rem}.swagger-ui .top--1-ns{top:-1rem}.swagger-ui .right--1-ns{right:-1rem}.swagger-ui .bottom--1-ns{bottom:-1rem}.swagger-ui .left--1-ns{left:-1rem}.swagger-ui .top--2-ns{top:-2rem}.swagger-ui .right--2-ns{right:-2rem}.swagger-ui .bottom--2-ns{bottom:-2rem}.swagger-ui .left--2-ns{left:-2rem}.swagger-ui .absolute--fill-ns{inset:0}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .top-0-m{top:0}.swagger-ui .left-0-m{left:0}.swagger-ui .right-0-m{right:0}.swagger-ui .bottom-0-m{bottom:0}.swagger-ui .top-1-m{top:1rem}.swagger-ui .left-1-m{left:1rem}.swagger-ui .right-1-m{right:1rem}.swagger-ui .bottom-1-m{bottom:1rem}.swagger-ui .top-2-m{top:2rem}.swagger-ui .left-2-m{left:2rem}.swagger-ui .right-2-m{right:2rem}.swagger-ui .bottom-2-m{bottom:2rem}.swagger-ui .top--1-m{top:-1rem}.swagger-ui .right--1-m{right:-1rem}.swagger-ui .bottom--1-m{bottom:-1rem}.swagger-ui .left--1-m{left:-1rem}.swagger-ui .top--2-m{top:-2rem}.swagger-ui .right--2-m{right:-2rem}.swagger-ui .bottom--2-m{bottom:-2rem}.swagger-ui .left--2-m{left:-2rem}.swagger-ui .absolute--fill-m{inset:0}}@media screen and (min-width:60em){.swagger-ui .top-0-l{top:0}.swagger-ui .left-0-l{left:0}.swagger-ui .right-0-l{right:0}.swagger-ui .bottom-0-l{bottom:0}.swagger-ui .top-1-l{top:1rem}.swagger-ui .left-1-l{left:1rem}.swagger-ui .right-1-l{right:1rem}.swagger-ui .bottom-1-l{bottom:1rem}.swagger-ui .top-2-l{top:2rem}.swagger-ui .left-2-l{left:2rem}.swagger-ui .right-2-l{right:2rem}.swagger-ui .bottom-2-l{bottom:2rem}.swagger-ui .top--1-l{top:-1rem}.swagger-ui .right--1-l{right:-1rem}.swagger-ui .bottom--1-l{bottom:-1rem}.swagger-ui .left--1-l{left:-1rem}.swagger-ui .top--2-l{top:-2rem}.swagger-ui .right--2-l{right:-2rem}.swagger-ui .bottom--2-l{bottom:-2rem}.swagger-ui .left--2-l{left:-2rem}.swagger-ui .absolute--fill-l{inset:0}}.swagger-ui .cf:after,.swagger-ui .cf:before{content:" ";display:table}.swagger-ui .cf:after{clear:both}.swagger-ui .cf{*zoom:1}.swagger-ui .cl{clear:left}.swagger-ui .cr{clear:right}.swagger-ui .cb{clear:both}.swagger-ui .cn{clear:none}@media screen and (min-width:30em){.swagger-ui .cl-ns{clear:left}.swagger-ui .cr-ns{clear:right}.swagger-ui .cb-ns{clear:both}.swagger-ui .cn-ns{clear:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .cl-m{clear:left}.swagger-ui .cr-m{clear:right}.swagger-ui .cb-m{clear:both}.swagger-ui .cn-m{clear:none}}@media screen and (min-width:60em){.swagger-ui .cl-l{clear:left}.swagger-ui .cr-l{clear:right}.swagger-ui .cb-l{clear:both}.swagger-ui .cn-l{clear:none}}.swagger-ui .flex{display:flex}.swagger-ui .inline-flex{display:inline-flex}.swagger-ui .flex-auto{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none{flex:none}.swagger-ui .flex-column{flex-direction:column}.swagger-ui .flex-row{flex-direction:row}.swagger-ui .flex-wrap{flex-wrap:wrap}.swagger-ui .flex-nowrap{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse{flex-direction:column-reverse}.swagger-ui .flex-row-reverse{flex-direction:row-reverse}.swagger-ui .items-start{align-items:flex-start}.swagger-ui .items-end{align-items:flex-end}.swagger-ui .items-center{align-items:center}.swagger-ui .items-baseline{align-items:baseline}.swagger-ui .items-stretch{align-items:stretch}.swagger-ui .self-start{align-self:flex-start}.swagger-ui .self-end{align-self:flex-end}.swagger-ui .self-center{align-self:center}.swagger-ui .self-baseline{align-self:baseline}.swagger-ui .self-stretch{align-self:stretch}.swagger-ui .justify-start{justify-content:flex-start}.swagger-ui .justify-end{justify-content:flex-end}.swagger-ui .justify-center{justify-content:center}.swagger-ui .justify-between{justify-content:space-between}.swagger-ui .justify-around{justify-content:space-around}.swagger-ui .content-start{align-content:flex-start}.swagger-ui .content-end{align-content:flex-end}.swagger-ui .content-center{align-content:center}.swagger-ui .content-between{align-content:space-between}.swagger-ui .content-around{align-content:space-around}.swagger-ui .content-stretch{align-content:stretch}.swagger-ui .order-0{order:0}.swagger-ui .order-1{order:1}.swagger-ui .order-2{order:2}.swagger-ui .order-3{order:3}.swagger-ui .order-4{order:4}.swagger-ui .order-5{order:5}.swagger-ui .order-6{order:6}.swagger-ui .order-7{order:7}.swagger-ui .order-8{order:8}.swagger-ui .order-last{order:99999}.swagger-ui .flex-grow-0{flex-grow:0}.swagger-ui .flex-grow-1{flex-grow:1}.swagger-ui .flex-shrink-0{flex-shrink:0}.swagger-ui .flex-shrink-1{flex-shrink:1}@media screen and (min-width:30em){.swagger-ui .flex-ns{display:flex}.swagger-ui .inline-flex-ns{display:inline-flex}.swagger-ui .flex-auto-ns{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-ns{flex:none}.swagger-ui .flex-column-ns{flex-direction:column}.swagger-ui .flex-row-ns{flex-direction:row}.swagger-ui .flex-wrap-ns{flex-wrap:wrap}.swagger-ui .flex-nowrap-ns{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-ns{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-ns{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-ns{flex-direction:row-reverse}.swagger-ui .items-start-ns{align-items:flex-start}.swagger-ui .items-end-ns{align-items:flex-end}.swagger-ui .items-center-ns{align-items:center}.swagger-ui .items-baseline-ns{align-items:baseline}.swagger-ui .items-stretch-ns{align-items:stretch}.swagger-ui .self-start-ns{align-self:flex-start}.swagger-ui .self-end-ns{align-self:flex-end}.swagger-ui .self-center-ns{align-self:center}.swagger-ui .self-baseline-ns{align-self:baseline}.swagger-ui .self-stretch-ns{align-self:stretch}.swagger-ui .justify-start-ns{justify-content:flex-start}.swagger-ui .justify-end-ns{justify-content:flex-end}.swagger-ui .justify-center-ns{justify-content:center}.swagger-ui .justify-between-ns{justify-content:space-between}.swagger-ui .justify-around-ns{justify-content:space-around}.swagger-ui .content-start-ns{align-content:flex-start}.swagger-ui .content-end-ns{align-content:flex-end}.swagger-ui .content-center-ns{align-content:center}.swagger-ui .content-between-ns{align-content:space-between}.swagger-ui .content-around-ns{align-content:space-around}.swagger-ui .content-stretch-ns{align-content:stretch}.swagger-ui .order-0-ns{order:0}.swagger-ui .order-1-ns{order:1}.swagger-ui .order-2-ns{order:2}.swagger-ui .order-3-ns{order:3}.swagger-ui .order-4-ns{order:4}.swagger-ui .order-5-ns{order:5}.swagger-ui .order-6-ns{order:6}.swagger-ui .order-7-ns{order:7}.swagger-ui .order-8-ns{order:8}.swagger-ui .order-last-ns{order:99999}.swagger-ui .flex-grow-0-ns{flex-grow:0}.swagger-ui .flex-grow-1-ns{flex-grow:1}.swagger-ui .flex-shrink-0-ns{flex-shrink:0}.swagger-ui .flex-shrink-1-ns{flex-shrink:1}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .flex-m{display:flex}.swagger-ui .inline-flex-m{display:inline-flex}.swagger-ui .flex-auto-m{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-m{flex:none}.swagger-ui .flex-column-m{flex-direction:column}.swagger-ui .flex-row-m{flex-direction:row}.swagger-ui .flex-wrap-m{flex-wrap:wrap}.swagger-ui .flex-nowrap-m{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-m{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-m{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-m{flex-direction:row-reverse}.swagger-ui .items-start-m{align-items:flex-start}.swagger-ui .items-end-m{align-items:flex-end}.swagger-ui .items-center-m{align-items:center}.swagger-ui .items-baseline-m{align-items:baseline}.swagger-ui .items-stretch-m{align-items:stretch}.swagger-ui .self-start-m{align-self:flex-start}.swagger-ui .self-end-m{align-self:flex-end}.swagger-ui .self-center-m{align-self:center}.swagger-ui .self-baseline-m{align-self:baseline}.swagger-ui .self-stretch-m{align-self:stretch}.swagger-ui .justify-start-m{justify-content:flex-start}.swagger-ui .justify-end-m{justify-content:flex-end}.swagger-ui .justify-center-m{justify-content:center}.swagger-ui .justify-between-m{justify-content:space-between}.swagger-ui .justify-around-m{justify-content:space-around}.swagger-ui .content-start-m{align-content:flex-start}.swagger-ui .content-end-m{align-content:flex-end}.swagger-ui .content-center-m{align-content:center}.swagger-ui .content-between-m{align-content:space-between}.swagger-ui .content-around-m{align-content:space-around}.swagger-ui .content-stretch-m{align-content:stretch}.swagger-ui .order-0-m{order:0}.swagger-ui .order-1-m{order:1}.swagger-ui .order-2-m{order:2}.swagger-ui .order-3-m{order:3}.swagger-ui .order-4-m{order:4}.swagger-ui .order-5-m{order:5}.swagger-ui .order-6-m{order:6}.swagger-ui .order-7-m{order:7}.swagger-ui .order-8-m{order:8}.swagger-ui .order-last-m{order:99999}.swagger-ui .flex-grow-0-m{flex-grow:0}.swagger-ui .flex-grow-1-m{flex-grow:1}.swagger-ui .flex-shrink-0-m{flex-shrink:0}.swagger-ui .flex-shrink-1-m{flex-shrink:1}}@media screen and (min-width:60em){.swagger-ui .flex-l{display:flex}.swagger-ui .inline-flex-l{display:inline-flex}.swagger-ui .flex-auto-l{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-l{flex:none}.swagger-ui .flex-column-l{flex-direction:column}.swagger-ui .flex-row-l{flex-direction:row}.swagger-ui .flex-wrap-l{flex-wrap:wrap}.swagger-ui .flex-nowrap-l{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-l{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-l{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-l{flex-direction:row-reverse}.swagger-ui .items-start-l{align-items:flex-start}.swagger-ui .items-end-l{align-items:flex-end}.swagger-ui .items-center-l{align-items:center}.swagger-ui .items-baseline-l{align-items:baseline}.swagger-ui .items-stretch-l{align-items:stretch}.swagger-ui .self-start-l{align-self:flex-start}.swagger-ui .self-end-l{align-self:flex-end}.swagger-ui .self-center-l{align-self:center}.swagger-ui .self-baseline-l{align-self:baseline}.swagger-ui .self-stretch-l{align-self:stretch}.swagger-ui .justify-start-l{justify-content:flex-start}.swagger-ui .justify-end-l{justify-content:flex-end}.swagger-ui .justify-center-l{justify-content:center}.swagger-ui .justify-between-l{justify-content:space-between}.swagger-ui .justify-around-l{justify-content:space-around}.swagger-ui .content-start-l{align-content:flex-start}.swagger-ui .content-end-l{align-content:flex-end}.swagger-ui .content-center-l{align-content:center}.swagger-ui .content-between-l{align-content:space-between}.swagger-ui .content-around-l{align-content:space-around}.swagger-ui .content-stretch-l{align-content:stretch}.swagger-ui .order-0-l{order:0}.swagger-ui .order-1-l{order:1}.swagger-ui .order-2-l{order:2}.swagger-ui .order-3-l{order:3}.swagger-ui .order-4-l{order:4}.swagger-ui .order-5-l{order:5}.swagger-ui .order-6-l{order:6}.swagger-ui .order-7-l{order:7}.swagger-ui .order-8-l{order:8}.swagger-ui .order-last-l{order:99999}.swagger-ui .flex-grow-0-l{flex-grow:0}.swagger-ui .flex-grow-1-l{flex-grow:1}.swagger-ui .flex-shrink-0-l{flex-shrink:0}.swagger-ui .flex-shrink-1-l{flex-shrink:1}}.swagger-ui .dn{display:none}.swagger-ui .di{display:inline}.swagger-ui .db{display:block}.swagger-ui .dib{display:inline-block}.swagger-ui .dit{display:inline-table}.swagger-ui .dt{display:table}.swagger-ui .dtc{display:table-cell}.swagger-ui .dt-row{display:table-row}.swagger-ui .dt-row-group{display:table-row-group}.swagger-ui .dt-column{display:table-column}.swagger-ui .dt-column-group{display:table-column-group}.swagger-ui .dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.swagger-ui .dn-ns{display:none}.swagger-ui .di-ns{display:inline}.swagger-ui .db-ns{display:block}.swagger-ui .dib-ns{display:inline-block}.swagger-ui .dit-ns{display:inline-table}.swagger-ui .dt-ns{display:table}.swagger-ui .dtc-ns{display:table-cell}.swagger-ui .dt-row-ns{display:table-row}.swagger-ui .dt-row-group-ns{display:table-row-group}.swagger-ui .dt-column-ns{display:table-column}.swagger-ui .dt-column-group-ns{display:table-column-group}.swagger-ui .dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .dn-m{display:none}.swagger-ui .di-m{display:inline}.swagger-ui .db-m{display:block}.swagger-ui .dib-m{display:inline-block}.swagger-ui .dit-m{display:inline-table}.swagger-ui .dt-m{display:table}.swagger-ui .dtc-m{display:table-cell}.swagger-ui .dt-row-m{display:table-row}.swagger-ui .dt-row-group-m{display:table-row-group}.swagger-ui .dt-column-m{display:table-column}.swagger-ui .dt-column-group-m{display:table-column-group}.swagger-ui .dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.swagger-ui .dn-l{display:none}.swagger-ui .di-l{display:inline}.swagger-ui .db-l{display:block}.swagger-ui .dib-l{display:inline-block}.swagger-ui .dit-l{display:inline-table}.swagger-ui .dt-l{display:table}.swagger-ui .dtc-l{display:table-cell}.swagger-ui .dt-row-l{display:table-row}.swagger-ui .dt-row-group-l{display:table-row-group}.swagger-ui .dt-column-l{display:table-column}.swagger-ui .dt-column-group-l{display:table-column-group}.swagger-ui .dt--fixed-l{table-layout:fixed;width:100%}}.swagger-ui .fl{_display:inline;float:left}.swagger-ui .fr{_display:inline;float:right}.swagger-ui .fn{float:none}@media screen and (min-width:30em){.swagger-ui .fl-ns{_display:inline;float:left}.swagger-ui .fr-ns{_display:inline;float:right}.swagger-ui .fn-ns{float:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .fl-m{_display:inline;float:left}.swagger-ui .fr-m{_display:inline;float:right}.swagger-ui .fn-m{float:none}}@media screen and (min-width:60em){.swagger-ui .fl-l{_display:inline;float:left}.swagger-ui .fr-l{_display:inline;float:right}.swagger-ui .fn-l{float:none}}.swagger-ui .sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.swagger-ui .serif{font-family:georgia,serif}.swagger-ui .system-sans-serif{font-family:sans-serif}.swagger-ui .system-serif{font-family:serif}.swagger-ui .code,.swagger-ui code{font-family:Consolas,monaco,monospace}.swagger-ui .courier{font-family:Courier Next,courier,monospace}.swagger-ui .helvetica{font-family:helvetica neue,helvetica,sans-serif}.swagger-ui .avenir{font-family:avenir next,avenir,sans-serif}.swagger-ui .athelas{font-family:athelas,georgia,serif}.swagger-ui .georgia{font-family:georgia,serif}.swagger-ui .times{font-family:times,serif}.swagger-ui .bodoni{font-family:Bodoni MT,serif}.swagger-ui .calisto{font-family:Calisto MT,serif}.swagger-ui .garamond{font-family:garamond,serif}.swagger-ui .baskerville{font-family:baskerville,serif}.swagger-ui .i{font-style:italic}.swagger-ui .fs-normal{font-style:normal}@media screen and (min-width:30em){.swagger-ui .i-ns{font-style:italic}.swagger-ui .fs-normal-ns{font-style:normal}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .i-m{font-style:italic}.swagger-ui .fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.swagger-ui .i-l{font-style:italic}.swagger-ui .fs-normal-l{font-style:normal}}.swagger-ui .normal{font-weight:400}.swagger-ui .b{font-weight:700}.swagger-ui .fw1{font-weight:100}.swagger-ui .fw2{font-weight:200}.swagger-ui .fw3{font-weight:300}.swagger-ui .fw4{font-weight:400}.swagger-ui .fw5{font-weight:500}.swagger-ui .fw6{font-weight:600}.swagger-ui .fw7{font-weight:700}.swagger-ui .fw8{font-weight:800}.swagger-ui .fw9{font-weight:900}@media screen and (min-width:30em){.swagger-ui .normal-ns{font-weight:400}.swagger-ui .b-ns{font-weight:700}.swagger-ui .fw1-ns{font-weight:100}.swagger-ui .fw2-ns{font-weight:200}.swagger-ui .fw3-ns{font-weight:300}.swagger-ui .fw4-ns{font-weight:400}.swagger-ui .fw5-ns{font-weight:500}.swagger-ui .fw6-ns{font-weight:600}.swagger-ui .fw7-ns{font-weight:700}.swagger-ui .fw8-ns{font-weight:800}.swagger-ui .fw9-ns{font-weight:900}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .normal-m{font-weight:400}.swagger-ui .b-m{font-weight:700}.swagger-ui .fw1-m{font-weight:100}.swagger-ui .fw2-m{font-weight:200}.swagger-ui .fw3-m{font-weight:300}.swagger-ui .fw4-m{font-weight:400}.swagger-ui .fw5-m{font-weight:500}.swagger-ui .fw6-m{font-weight:600}.swagger-ui .fw7-m{font-weight:700}.swagger-ui .fw8-m{font-weight:800}.swagger-ui .fw9-m{font-weight:900}}@media screen and (min-width:60em){.swagger-ui .normal-l{font-weight:400}.swagger-ui .b-l{font-weight:700}.swagger-ui .fw1-l{font-weight:100}.swagger-ui .fw2-l{font-weight:200}.swagger-ui .fw3-l{font-weight:300}.swagger-ui .fw4-l{font-weight:400}.swagger-ui .fw5-l{font-weight:500}.swagger-ui .fw6-l{font-weight:600}.swagger-ui .fw7-l{font-weight:700}.swagger-ui .fw8-l{font-weight:800}.swagger-ui .fw9-l{font-weight:900}}.swagger-ui .input-reset{-webkit-appearance:none;-moz-appearance:none}.swagger-ui .button-reset::-moz-focus-inner,.swagger-ui .input-reset::-moz-focus-inner{border:0;padding:0}.swagger-ui .h1{height:1rem}.swagger-ui .h2{height:2rem}.swagger-ui .h3{height:4rem}.swagger-ui .h4{height:8rem}.swagger-ui .h5{height:16rem}.swagger-ui .h-25{height:25%}.swagger-ui .h-50{height:50%}.swagger-ui .h-75{height:75%}.swagger-ui .h-100{height:100%}.swagger-ui .min-h-100{min-height:100%}.swagger-ui .vh-25{height:25vh}.swagger-ui .vh-50{height:50vh}.swagger-ui .vh-75{height:75vh}.swagger-ui .vh-100{height:100vh}.swagger-ui .min-vh-100{min-height:100vh}.swagger-ui .h-auto{height:auto}.swagger-ui .h-inherit{height:inherit}@media screen and (min-width:30em){.swagger-ui .h1-ns{height:1rem}.swagger-ui .h2-ns{height:2rem}.swagger-ui .h3-ns{height:4rem}.swagger-ui .h4-ns{height:8rem}.swagger-ui .h5-ns{height:16rem}.swagger-ui .h-25-ns{height:25%}.swagger-ui .h-50-ns{height:50%}.swagger-ui .h-75-ns{height:75%}.swagger-ui .h-100-ns{height:100%}.swagger-ui .min-h-100-ns{min-height:100%}.swagger-ui .vh-25-ns{height:25vh}.swagger-ui .vh-50-ns{height:50vh}.swagger-ui .vh-75-ns{height:75vh}.swagger-ui .vh-100-ns{height:100vh}.swagger-ui .min-vh-100-ns{min-height:100vh}.swagger-ui .h-auto-ns{height:auto}.swagger-ui .h-inherit-ns{height:inherit}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .h1-m{height:1rem}.swagger-ui .h2-m{height:2rem}.swagger-ui .h3-m{height:4rem}.swagger-ui .h4-m{height:8rem}.swagger-ui .h5-m{height:16rem}.swagger-ui .h-25-m{height:25%}.swagger-ui .h-50-m{height:50%}.swagger-ui .h-75-m{height:75%}.swagger-ui .h-100-m{height:100%}.swagger-ui .min-h-100-m{min-height:100%}.swagger-ui .vh-25-m{height:25vh}.swagger-ui .vh-50-m{height:50vh}.swagger-ui .vh-75-m{height:75vh}.swagger-ui .vh-100-m{height:100vh}.swagger-ui .min-vh-100-m{min-height:100vh}.swagger-ui .h-auto-m{height:auto}.swagger-ui .h-inherit-m{height:inherit}}@media screen and (min-width:60em){.swagger-ui .h1-l{height:1rem}.swagger-ui .h2-l{height:2rem}.swagger-ui .h3-l{height:4rem}.swagger-ui .h4-l{height:8rem}.swagger-ui .h5-l{height:16rem}.swagger-ui .h-25-l{height:25%}.swagger-ui .h-50-l{height:50%}.swagger-ui .h-75-l{height:75%}.swagger-ui .h-100-l{height:100%}.swagger-ui .min-h-100-l{min-height:100%}.swagger-ui .vh-25-l{height:25vh}.swagger-ui .vh-50-l{height:50vh}.swagger-ui .vh-75-l{height:75vh}.swagger-ui .vh-100-l{height:100vh}.swagger-ui .min-vh-100-l{min-height:100vh}.swagger-ui .h-auto-l{height:auto}.swagger-ui .h-inherit-l{height:inherit}}.swagger-ui .tracked{letter-spacing:.1em}.swagger-ui .tracked-tight{letter-spacing:-.05em}.swagger-ui .tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.swagger-ui .tracked-ns{letter-spacing:.1em}.swagger-ui .tracked-tight-ns{letter-spacing:-.05em}.swagger-ui .tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tracked-m{letter-spacing:.1em}.swagger-ui .tracked-tight-m{letter-spacing:-.05em}.swagger-ui .tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.swagger-ui .tracked-l{letter-spacing:.1em}.swagger-ui .tracked-tight-l{letter-spacing:-.05em}.swagger-ui .tracked-mega-l{letter-spacing:.25em}}.swagger-ui .lh-solid{line-height:1}.swagger-ui .lh-title{line-height:1.25}.swagger-ui .lh-copy{line-height:1.5}@media screen and (min-width:30em){.swagger-ui .lh-solid-ns{line-height:1}.swagger-ui .lh-title-ns{line-height:1.25}.swagger-ui .lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .lh-solid-m{line-height:1}.swagger-ui .lh-title-m{line-height:1.25}.swagger-ui .lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.swagger-ui .lh-solid-l{line-height:1}.swagger-ui .lh-title-l{line-height:1.25}.swagger-ui .lh-copy-l{line-height:1.5}}.swagger-ui .link{text-decoration:none}.swagger-ui .link,.swagger-ui .link:active,.swagger-ui .link:focus,.swagger-ui .link:hover,.swagger-ui .link:link,.swagger-ui .link:visited{transition:color .15s ease-in}.swagger-ui .link:focus{outline:1px dotted currentColor}.swagger-ui .list{list-style-type:none}.swagger-ui .mw-100{max-width:100%}.swagger-ui .mw1{max-width:1rem}.swagger-ui .mw2{max-width:2rem}.swagger-ui .mw3{max-width:4rem}.swagger-ui .mw4{max-width:8rem}.swagger-ui .mw5{max-width:16rem}.swagger-ui .mw6{max-width:32rem}.swagger-ui .mw7{max-width:48rem}.swagger-ui .mw8{max-width:64rem}.swagger-ui .mw9{max-width:96rem}.swagger-ui .mw-none{max-width:none}@media screen and (min-width:30em){.swagger-ui .mw-100-ns{max-width:100%}.swagger-ui .mw1-ns{max-width:1rem}.swagger-ui .mw2-ns{max-width:2rem}.swagger-ui .mw3-ns{max-width:4rem}.swagger-ui .mw4-ns{max-width:8rem}.swagger-ui .mw5-ns{max-width:16rem}.swagger-ui .mw6-ns{max-width:32rem}.swagger-ui .mw7-ns{max-width:48rem}.swagger-ui .mw8-ns{max-width:64rem}.swagger-ui .mw9-ns{max-width:96rem}.swagger-ui .mw-none-ns{max-width:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .mw-100-m{max-width:100%}.swagger-ui .mw1-m{max-width:1rem}.swagger-ui .mw2-m{max-width:2rem}.swagger-ui .mw3-m{max-width:4rem}.swagger-ui .mw4-m{max-width:8rem}.swagger-ui .mw5-m{max-width:16rem}.swagger-ui .mw6-m{max-width:32rem}.swagger-ui .mw7-m{max-width:48rem}.swagger-ui .mw8-m{max-width:64rem}.swagger-ui .mw9-m{max-width:96rem}.swagger-ui .mw-none-m{max-width:none}}@media screen and (min-width:60em){.swagger-ui .mw-100-l{max-width:100%}.swagger-ui .mw1-l{max-width:1rem}.swagger-ui .mw2-l{max-width:2rem}.swagger-ui .mw3-l{max-width:4rem}.swagger-ui .mw4-l{max-width:8rem}.swagger-ui .mw5-l{max-width:16rem}.swagger-ui .mw6-l{max-width:32rem}.swagger-ui .mw7-l{max-width:48rem}.swagger-ui .mw8-l{max-width:64rem}.swagger-ui .mw9-l{max-width:96rem}.swagger-ui .mw-none-l{max-width:none}}.swagger-ui .w1{width:1rem}.swagger-ui .w2{width:2rem}.swagger-ui .w3{width:4rem}.swagger-ui .w4{width:8rem}.swagger-ui .w5{width:16rem}.swagger-ui .w-10{width:10%}.swagger-ui .w-20{width:20%}.swagger-ui .w-25{width:25%}.swagger-ui .w-30{width:30%}.swagger-ui .w-33{width:33%}.swagger-ui .w-34{width:34%}.swagger-ui .w-40{width:40%}.swagger-ui .w-50{width:50%}.swagger-ui .w-60{width:60%}.swagger-ui .w-70{width:70%}.swagger-ui .w-75{width:75%}.swagger-ui .w-80{width:80%}.swagger-ui .w-90{width:90%}.swagger-ui .w-100{width:100%}.swagger-ui .w-third{width:33.3333333333%}.swagger-ui .w-two-thirds{width:66.6666666667%}.swagger-ui .w-auto{width:auto}@media screen and (min-width:30em){.swagger-ui .w1-ns{width:1rem}.swagger-ui .w2-ns{width:2rem}.swagger-ui .w3-ns{width:4rem}.swagger-ui .w4-ns{width:8rem}.swagger-ui .w5-ns{width:16rem}.swagger-ui .w-10-ns{width:10%}.swagger-ui .w-20-ns{width:20%}.swagger-ui .w-25-ns{width:25%}.swagger-ui .w-30-ns{width:30%}.swagger-ui .w-33-ns{width:33%}.swagger-ui .w-34-ns{width:34%}.swagger-ui .w-40-ns{width:40%}.swagger-ui .w-50-ns{width:50%}.swagger-ui .w-60-ns{width:60%}.swagger-ui .w-70-ns{width:70%}.swagger-ui .w-75-ns{width:75%}.swagger-ui .w-80-ns{width:80%}.swagger-ui .w-90-ns{width:90%}.swagger-ui .w-100-ns{width:100%}.swagger-ui .w-third-ns{width:33.3333333333%}.swagger-ui .w-two-thirds-ns{width:66.6666666667%}.swagger-ui .w-auto-ns{width:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .w1-m{width:1rem}.swagger-ui .w2-m{width:2rem}.swagger-ui .w3-m{width:4rem}.swagger-ui .w4-m{width:8rem}.swagger-ui .w5-m{width:16rem}.swagger-ui .w-10-m{width:10%}.swagger-ui .w-20-m{width:20%}.swagger-ui .w-25-m{width:25%}.swagger-ui .w-30-m{width:30%}.swagger-ui .w-33-m{width:33%}.swagger-ui .w-34-m{width:34%}.swagger-ui .w-40-m{width:40%}.swagger-ui .w-50-m{width:50%}.swagger-ui .w-60-m{width:60%}.swagger-ui .w-70-m{width:70%}.swagger-ui .w-75-m{width:75%}.swagger-ui .w-80-m{width:80%}.swagger-ui .w-90-m{width:90%}.swagger-ui .w-100-m{width:100%}.swagger-ui .w-third-m{width:33.3333333333%}.swagger-ui .w-two-thirds-m{width:66.6666666667%}.swagger-ui .w-auto-m{width:auto}}@media screen and (min-width:60em){.swagger-ui .w1-l{width:1rem}.swagger-ui .w2-l{width:2rem}.swagger-ui .w3-l{width:4rem}.swagger-ui .w4-l{width:8rem}.swagger-ui .w5-l{width:16rem}.swagger-ui .w-10-l{width:10%}.swagger-ui .w-20-l{width:20%}.swagger-ui .w-25-l{width:25%}.swagger-ui .w-30-l{width:30%}.swagger-ui .w-33-l{width:33%}.swagger-ui .w-34-l{width:34%}.swagger-ui .w-40-l{width:40%}.swagger-ui .w-50-l{width:50%}.swagger-ui .w-60-l{width:60%}.swagger-ui .w-70-l{width:70%}.swagger-ui .w-75-l{width:75%}.swagger-ui .w-80-l{width:80%}.swagger-ui .w-90-l{width:90%}.swagger-ui .w-100-l{width:100%}.swagger-ui .w-third-l{width:33.3333333333%}.swagger-ui .w-two-thirds-l{width:66.6666666667%}.swagger-ui .w-auto-l{width:auto}}.swagger-ui .overflow-visible{overflow:visible}.swagger-ui .overflow-hidden{overflow:hidden}.swagger-ui .overflow-scroll{overflow:scroll}.swagger-ui .overflow-auto{overflow:auto}.swagger-ui .overflow-x-visible{overflow-x:visible}.swagger-ui .overflow-x-hidden{overflow-x:hidden}.swagger-ui .overflow-x-scroll{overflow-x:scroll}.swagger-ui .overflow-x-auto{overflow-x:auto}.swagger-ui .overflow-y-visible{overflow-y:visible}.swagger-ui .overflow-y-hidden{overflow-y:hidden}.swagger-ui .overflow-y-scroll{overflow-y:scroll}.swagger-ui .overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.swagger-ui .overflow-visible-ns{overflow:visible}.swagger-ui .overflow-hidden-ns{overflow:hidden}.swagger-ui .overflow-scroll-ns{overflow:scroll}.swagger-ui .overflow-auto-ns{overflow:auto}.swagger-ui .overflow-x-visible-ns{overflow-x:visible}.swagger-ui .overflow-x-hidden-ns{overflow-x:hidden}.swagger-ui .overflow-x-scroll-ns{overflow-x:scroll}.swagger-ui .overflow-x-auto-ns{overflow-x:auto}.swagger-ui .overflow-y-visible-ns{overflow-y:visible}.swagger-ui .overflow-y-hidden-ns{overflow-y:hidden}.swagger-ui .overflow-y-scroll-ns{overflow-y:scroll}.swagger-ui .overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .overflow-visible-m{overflow:visible}.swagger-ui .overflow-hidden-m{overflow:hidden}.swagger-ui .overflow-scroll-m{overflow:scroll}.swagger-ui .overflow-auto-m{overflow:auto}.swagger-ui .overflow-x-visible-m{overflow-x:visible}.swagger-ui .overflow-x-hidden-m{overflow-x:hidden}.swagger-ui .overflow-x-scroll-m{overflow-x:scroll}.swagger-ui .overflow-x-auto-m{overflow-x:auto}.swagger-ui .overflow-y-visible-m{overflow-y:visible}.swagger-ui .overflow-y-hidden-m{overflow-y:hidden}.swagger-ui .overflow-y-scroll-m{overflow-y:scroll}.swagger-ui .overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.swagger-ui .overflow-visible-l{overflow:visible}.swagger-ui .overflow-hidden-l{overflow:hidden}.swagger-ui .overflow-scroll-l{overflow:scroll}.swagger-ui .overflow-auto-l{overflow:auto}.swagger-ui .overflow-x-visible-l{overflow-x:visible}.swagger-ui .overflow-x-hidden-l{overflow-x:hidden}.swagger-ui .overflow-x-scroll-l{overflow-x:scroll}.swagger-ui .overflow-x-auto-l{overflow-x:auto}.swagger-ui .overflow-y-visible-l{overflow-y:visible}.swagger-ui .overflow-y-hidden-l{overflow-y:hidden}.swagger-ui .overflow-y-scroll-l{overflow-y:scroll}.swagger-ui .overflow-y-auto-l{overflow-y:auto}}.swagger-ui .static{position:static}.swagger-ui .relative{position:relative}.swagger-ui .absolute{position:absolute}.swagger-ui .fixed{position:fixed}@media screen and (min-width:30em){.swagger-ui .static-ns{position:static}.swagger-ui .relative-ns{position:relative}.swagger-ui .absolute-ns{position:absolute}.swagger-ui .fixed-ns{position:fixed}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .static-m{position:static}.swagger-ui .relative-m{position:relative}.swagger-ui .absolute-m{position:absolute}.swagger-ui .fixed-m{position:fixed}}@media screen and (min-width:60em){.swagger-ui .static-l{position:static}.swagger-ui .relative-l{position:relative}.swagger-ui .absolute-l{position:absolute}.swagger-ui .fixed-l{position:fixed}}.swagger-ui .o-100{opacity:1}.swagger-ui .o-90{opacity:.9}.swagger-ui .o-80{opacity:.8}.swagger-ui .o-70{opacity:.7}.swagger-ui .o-60{opacity:.6}.swagger-ui .o-50{opacity:.5}.swagger-ui .o-40{opacity:.4}.swagger-ui .o-30{opacity:.3}.swagger-ui .o-20{opacity:.2}.swagger-ui .o-10{opacity:.1}.swagger-ui .o-05{opacity:.05}.swagger-ui .o-025{opacity:.025}.swagger-ui .o-0{opacity:0}.swagger-ui .rotate-45{transform:rotate(45deg)}.swagger-ui .rotate-90{transform:rotate(90deg)}.swagger-ui .rotate-135{transform:rotate(135deg)}.swagger-ui .rotate-180{transform:rotate(180deg)}.swagger-ui .rotate-225{transform:rotate(225deg)}.swagger-ui .rotate-270{transform:rotate(270deg)}.swagger-ui .rotate-315{transform:rotate(315deg)}@media screen and (min-width:30em){.swagger-ui .rotate-45-ns{transform:rotate(45deg)}.swagger-ui .rotate-90-ns{transform:rotate(90deg)}.swagger-ui .rotate-135-ns{transform:rotate(135deg)}.swagger-ui .rotate-180-ns{transform:rotate(180deg)}.swagger-ui .rotate-225-ns{transform:rotate(225deg)}.swagger-ui .rotate-270-ns{transform:rotate(270deg)}.swagger-ui .rotate-315-ns{transform:rotate(315deg)}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .rotate-45-m{transform:rotate(45deg)}.swagger-ui .rotate-90-m{transform:rotate(90deg)}.swagger-ui .rotate-135-m{transform:rotate(135deg)}.swagger-ui .rotate-180-m{transform:rotate(180deg)}.swagger-ui .rotate-225-m{transform:rotate(225deg)}.swagger-ui .rotate-270-m{transform:rotate(270deg)}.swagger-ui .rotate-315-m{transform:rotate(315deg)}}@media screen and (min-width:60em){.swagger-ui .rotate-45-l{transform:rotate(45deg)}.swagger-ui .rotate-90-l{transform:rotate(90deg)}.swagger-ui .rotate-135-l{transform:rotate(135deg)}.swagger-ui .rotate-180-l{transform:rotate(180deg)}.swagger-ui .rotate-225-l{transform:rotate(225deg)}.swagger-ui .rotate-270-l{transform:rotate(270deg)}.swagger-ui .rotate-315-l{transform:rotate(315deg)}}.swagger-ui .black-90{color:#000000e6}.swagger-ui .black-80{color:#000c}.swagger-ui .black-70{color:#000000b3}.swagger-ui .black-60{color:#0009}.swagger-ui .black-50{color:#00000080}.swagger-ui .black-40{color:#0006}.swagger-ui .black-30{color:#0000004d}.swagger-ui .black-20{color:#0003}.swagger-ui .black-10{color:#0000001a}.swagger-ui .black-05{color:#0000000d}.swagger-ui .white-90{color:#ffffffe6}.swagger-ui .white-80{color:#fffc}.swagger-ui .white-70{color:#ffffffb3}.swagger-ui .white-60{color:#fff9}.swagger-ui .white-50{color:#ffffff80}.swagger-ui .white-40{color:#fff6}.swagger-ui .white-30{color:#ffffff4d}.swagger-ui .white-20{color:#fff3}.swagger-ui .white-10{color:#ffffff1a}.swagger-ui .black{color:#000}.swagger-ui .near-black{color:#111}.swagger-ui .dark-gray{color:#333}.swagger-ui .mid-gray{color:#555}.swagger-ui .gray{color:#777}.swagger-ui .silver{color:#999}.swagger-ui .light-silver{color:#aaa}.swagger-ui .moon-gray{color:#ccc}.swagger-ui .light-gray{color:#eee}.swagger-ui .near-white{color:#f4f4f4}.swagger-ui .white{color:#fff}.swagger-ui .dark-red{color:#e7040f}.swagger-ui .red{color:#ff4136}.swagger-ui .light-red{color:#ff725c}.swagger-ui .orange{color:#ff6300}.swagger-ui .gold{color:#ffb700}.swagger-ui .yellow{color:gold}.swagger-ui .light-yellow{color:#fbf1a9}.swagger-ui .purple{color:#5e2ca5}.swagger-ui .light-purple{color:#a463f2}.swagger-ui .dark-pink{color:#d5008f}.swagger-ui .hot-pink{color:#ff41b4}.swagger-ui .pink{color:#ff80cc}.swagger-ui .light-pink{color:#ffa3d7}.swagger-ui .dark-green{color:#137752}.swagger-ui .green{color:#19a974}.swagger-ui .light-green{color:#9eebcf}.swagger-ui .navy{color:#001b44}.swagger-ui .dark-blue{color:#00449e}.swagger-ui .blue{color:#357edd}.swagger-ui .light-blue{color:#96ccff}.swagger-ui .lightest-blue{color:#cdecff}.swagger-ui .washed-blue{color:#f6fffe}.swagger-ui .washed-green{color:#e8fdf5}.swagger-ui .washed-yellow{color:#fffceb}.swagger-ui .washed-red{color:#ffdfdf}.swagger-ui .color-inherit{color:inherit}.swagger-ui .bg-black-90{background-color:#000000e6}.swagger-ui .bg-black-80{background-color:#000c}.swagger-ui .bg-black-70{background-color:#000000b3}.swagger-ui .bg-black-60{background-color:#0009}.swagger-ui .bg-black-50{background-color:#00000080}.swagger-ui .bg-black-40{background-color:#0006}.swagger-ui .bg-black-30{background-color:#0000004d}.swagger-ui .bg-black-20{background-color:#0003}.swagger-ui .bg-black-10{background-color:#0000001a}.swagger-ui .bg-black-05{background-color:#0000000d}.swagger-ui .bg-white-90{background-color:#ffffffe6}.swagger-ui .bg-white-80{background-color:#fffc}.swagger-ui .bg-white-70{background-color:#ffffffb3}.swagger-ui .bg-white-60{background-color:#fff9}.swagger-ui .bg-white-50{background-color:#ffffff80}.swagger-ui .bg-white-40{background-color:#fff6}.swagger-ui .bg-white-30{background-color:#ffffff4d}.swagger-ui .bg-white-20{background-color:#fff3}.swagger-ui .bg-white-10{background-color:#ffffff1a}.swagger-ui .bg-black{background-color:#000}.swagger-ui .bg-near-black{background-color:#111}.swagger-ui .bg-dark-gray{background-color:#333}.swagger-ui .bg-mid-gray{background-color:#555}.swagger-ui .bg-gray{background-color:#777}.swagger-ui .bg-silver{background-color:#999}.swagger-ui .bg-light-silver{background-color:#aaa}.swagger-ui .bg-moon-gray{background-color:#ccc}.swagger-ui .bg-light-gray{background-color:#eee}.swagger-ui .bg-near-white{background-color:#f4f4f4}.swagger-ui .bg-white{background-color:#fff}.swagger-ui .bg-transparent{background-color:transparent}.swagger-ui .bg-dark-red{background-color:#e7040f}.swagger-ui .bg-red{background-color:#ff4136}.swagger-ui .bg-light-red{background-color:#ff725c}.swagger-ui .bg-orange{background-color:#ff6300}.swagger-ui .bg-gold{background-color:#ffb700}.swagger-ui .bg-yellow{background-color:gold}.swagger-ui .bg-light-yellow{background-color:#fbf1a9}.swagger-ui .bg-purple{background-color:#5e2ca5}.swagger-ui .bg-light-purple{background-color:#a463f2}.swagger-ui .bg-dark-pink{background-color:#d5008f}.swagger-ui .bg-hot-pink{background-color:#ff41b4}.swagger-ui .bg-pink{background-color:#ff80cc}.swagger-ui .bg-light-pink{background-color:#ffa3d7}.swagger-ui .bg-dark-green{background-color:#137752}.swagger-ui .bg-green{background-color:#19a974}.swagger-ui .bg-light-green{background-color:#9eebcf}.swagger-ui .bg-navy{background-color:#001b44}.swagger-ui .bg-dark-blue{background-color:#00449e}.swagger-ui .bg-blue{background-color:#357edd}.swagger-ui .bg-light-blue{background-color:#96ccff}.swagger-ui .bg-lightest-blue{background-color:#cdecff}.swagger-ui .bg-washed-blue{background-color:#f6fffe}.swagger-ui .bg-washed-green{background-color:#e8fdf5}.swagger-ui .bg-washed-yellow{background-color:#fffceb}.swagger-ui .bg-washed-red{background-color:#ffdfdf}.swagger-ui .bg-inherit{background-color:inherit}.swagger-ui .hover-black:focus,.swagger-ui .hover-black:hover{color:#000}.swagger-ui .hover-near-black:focus,.swagger-ui .hover-near-black:hover{color:#111}.swagger-ui .hover-dark-gray:focus,.swagger-ui .hover-dark-gray:hover{color:#333}.swagger-ui .hover-mid-gray:focus,.swagger-ui .hover-mid-gray:hover{color:#555}.swagger-ui .hover-gray:focus,.swagger-ui .hover-gray:hover{color:#777}.swagger-ui .hover-silver:focus,.swagger-ui .hover-silver:hover{color:#999}.swagger-ui .hover-light-silver:focus,.swagger-ui .hover-light-silver:hover{color:#aaa}.swagger-ui .hover-moon-gray:focus,.swagger-ui .hover-moon-gray:hover{color:#ccc}.swagger-ui .hover-light-gray:focus,.swagger-ui .hover-light-gray:hover{color:#eee}.swagger-ui .hover-near-white:focus,.swagger-ui .hover-near-white:hover{color:#f4f4f4}.swagger-ui .hover-white:focus,.swagger-ui .hover-white:hover{color:#fff}.swagger-ui .hover-black-90:focus,.swagger-ui .hover-black-90:hover{color:#000000e6}.swagger-ui .hover-black-80:focus,.swagger-ui .hover-black-80:hover{color:#000c}.swagger-ui .hover-black-70:focus,.swagger-ui .hover-black-70:hover{color:#000000b3}.swagger-ui .hover-black-60:focus,.swagger-ui .hover-black-60:hover{color:#0009}.swagger-ui .hover-black-50:focus,.swagger-ui .hover-black-50:hover{color:#00000080}.swagger-ui .hover-black-40:focus,.swagger-ui .hover-black-40:hover{color:#0006}.swagger-ui .hover-black-30:focus,.swagger-ui .hover-black-30:hover{color:#0000004d}.swagger-ui .hover-black-20:focus,.swagger-ui .hover-black-20:hover{color:#0003}.swagger-ui .hover-black-10:focus,.swagger-ui .hover-black-10:hover{color:#0000001a}.swagger-ui .hover-white-90:focus,.swagger-ui .hover-white-90:hover{color:#ffffffe6}.swagger-ui .hover-white-80:focus,.swagger-ui .hover-white-80:hover{color:#fffc}.swagger-ui .hover-white-70:focus,.swagger-ui .hover-white-70:hover{color:#ffffffb3}.swagger-ui .hover-white-60:focus,.swagger-ui .hover-white-60:hover{color:#fff9}.swagger-ui .hover-white-50:focus,.swagger-ui .hover-white-50:hover{color:#ffffff80}.swagger-ui .hover-white-40:focus,.swagger-ui .hover-white-40:hover{color:#fff6}.swagger-ui .hover-white-30:focus,.swagger-ui .hover-white-30:hover{color:#ffffff4d}.swagger-ui .hover-white-20:focus,.swagger-ui .hover-white-20:hover{color:#fff3}.swagger-ui .hover-white-10:focus,.swagger-ui .hover-white-10:hover{color:#ffffff1a}.swagger-ui .hover-inherit:focus,.swagger-ui .hover-inherit:hover{color:inherit}.swagger-ui .hover-bg-black:focus,.swagger-ui .hover-bg-black:hover{background-color:#000}.swagger-ui .hover-bg-near-black:focus,.swagger-ui .hover-bg-near-black:hover{background-color:#111}.swagger-ui .hover-bg-dark-gray:focus,.swagger-ui .hover-bg-dark-gray:hover{background-color:#333}.swagger-ui .hover-bg-mid-gray:focus,.swagger-ui .hover-bg-mid-gray:hover{background-color:#555}.swagger-ui .hover-bg-gray:focus,.swagger-ui .hover-bg-gray:hover{background-color:#777}.swagger-ui .hover-bg-silver:focus,.swagger-ui .hover-bg-silver:hover{background-color:#999}.swagger-ui .hover-bg-light-silver:focus,.swagger-ui .hover-bg-light-silver:hover{background-color:#aaa}.swagger-ui .hover-bg-moon-gray:focus,.swagger-ui .hover-bg-moon-gray:hover{background-color:#ccc}.swagger-ui .hover-bg-light-gray:focus,.swagger-ui .hover-bg-light-gray:hover{background-color:#eee}.swagger-ui .hover-bg-near-white:focus,.swagger-ui .hover-bg-near-white:hover{background-color:#f4f4f4}.swagger-ui .hover-bg-white:focus,.swagger-ui .hover-bg-white:hover{background-color:#fff}.swagger-ui .hover-bg-transparent:focus,.swagger-ui .hover-bg-transparent:hover{background-color:transparent}.swagger-ui .hover-bg-black-90:focus,.swagger-ui .hover-bg-black-90:hover{background-color:#000000e6}.swagger-ui .hover-bg-black-80:focus,.swagger-ui .hover-bg-black-80:hover{background-color:#000c}.swagger-ui .hover-bg-black-70:focus,.swagger-ui .hover-bg-black-70:hover{background-color:#000000b3}.swagger-ui .hover-bg-black-60:focus,.swagger-ui .hover-bg-black-60:hover{background-color:#0009}.swagger-ui .hover-bg-black-50:focus,.swagger-ui .hover-bg-black-50:hover{background-color:#00000080}.swagger-ui .hover-bg-black-40:focus,.swagger-ui .hover-bg-black-40:hover{background-color:#0006}.swagger-ui .hover-bg-black-30:focus,.swagger-ui .hover-bg-black-30:hover{background-color:#0000004d}.swagger-ui .hover-bg-black-20:focus,.swagger-ui .hover-bg-black-20:hover{background-color:#0003}.swagger-ui .hover-bg-black-10:focus,.swagger-ui .hover-bg-black-10:hover{background-color:#0000001a}.swagger-ui .hover-bg-white-90:focus,.swagger-ui .hover-bg-white-90:hover{background-color:#ffffffe6}.swagger-ui .hover-bg-white-80:focus,.swagger-ui .hover-bg-white-80:hover{background-color:#fffc}.swagger-ui .hover-bg-white-70:focus,.swagger-ui .hover-bg-white-70:hover{background-color:#ffffffb3}.swagger-ui .hover-bg-white-60:focus,.swagger-ui .hover-bg-white-60:hover{background-color:#fff9}.swagger-ui .hover-bg-white-50:focus,.swagger-ui .hover-bg-white-50:hover{background-color:#ffffff80}.swagger-ui .hover-bg-white-40:focus,.swagger-ui .hover-bg-white-40:hover{background-color:#fff6}.swagger-ui .hover-bg-white-30:focus,.swagger-ui .hover-bg-white-30:hover{background-color:#ffffff4d}.swagger-ui .hover-bg-white-20:focus,.swagger-ui .hover-bg-white-20:hover{background-color:#fff3}.swagger-ui .hover-bg-white-10:focus,.swagger-ui .hover-bg-white-10:hover{background-color:#ffffff1a}.swagger-ui .hover-dark-red:focus,.swagger-ui .hover-dark-red:hover{color:#e7040f}.swagger-ui .hover-red:focus,.swagger-ui .hover-red:hover{color:#ff4136}.swagger-ui .hover-light-red:focus,.swagger-ui .hover-light-red:hover{color:#ff725c}.swagger-ui .hover-orange:focus,.swagger-ui .hover-orange:hover{color:#ff6300}.swagger-ui .hover-gold:focus,.swagger-ui .hover-gold:hover{color:#ffb700}.swagger-ui .hover-yellow:focus,.swagger-ui .hover-yellow:hover{color:gold}.swagger-ui .hover-light-yellow:focus,.swagger-ui .hover-light-yellow:hover{color:#fbf1a9}.swagger-ui .hover-purple:focus,.swagger-ui .hover-purple:hover{color:#5e2ca5}.swagger-ui .hover-light-purple:focus,.swagger-ui .hover-light-purple:hover{color:#a463f2}.swagger-ui .hover-dark-pink:focus,.swagger-ui .hover-dark-pink:hover{color:#d5008f}.swagger-ui .hover-hot-pink:focus,.swagger-ui .hover-hot-pink:hover{color:#ff41b4}.swagger-ui .hover-pink:focus,.swagger-ui .hover-pink:hover{color:#ff80cc}.swagger-ui .hover-light-pink:focus,.swagger-ui .hover-light-pink:hover{color:#ffa3d7}.swagger-ui .hover-dark-green:focus,.swagger-ui .hover-dark-green:hover{color:#137752}.swagger-ui .hover-green:focus,.swagger-ui .hover-green:hover{color:#19a974}.swagger-ui .hover-light-green:focus,.swagger-ui .hover-light-green:hover{color:#9eebcf}.swagger-ui .hover-navy:focus,.swagger-ui .hover-navy:hover{color:#001b44}.swagger-ui .hover-dark-blue:focus,.swagger-ui .hover-dark-blue:hover{color:#00449e}.swagger-ui .hover-blue:focus,.swagger-ui .hover-blue:hover{color:#357edd}.swagger-ui .hover-light-blue:focus,.swagger-ui .hover-light-blue:hover{color:#96ccff}.swagger-ui .hover-lightest-blue:focus,.swagger-ui .hover-lightest-blue:hover{color:#cdecff}.swagger-ui .hover-washed-blue:focus,.swagger-ui .hover-washed-blue:hover{color:#f6fffe}.swagger-ui .hover-washed-green:focus,.swagger-ui .hover-washed-green:hover{color:#e8fdf5}.swagger-ui .hover-washed-yellow:focus,.swagger-ui .hover-washed-yellow:hover{color:#fffceb}.swagger-ui .hover-washed-red:focus,.swagger-ui .hover-washed-red:hover{color:#ffdfdf}.swagger-ui .hover-bg-dark-red:focus,.swagger-ui .hover-bg-dark-red:hover{background-color:#e7040f}.swagger-ui .hover-bg-red:focus,.swagger-ui .hover-bg-red:hover{background-color:#ff4136}.swagger-ui .hover-bg-light-red:focus,.swagger-ui .hover-bg-light-red:hover{background-color:#ff725c}.swagger-ui .hover-bg-orange:focus,.swagger-ui .hover-bg-orange:hover{background-color:#ff6300}.swagger-ui .hover-bg-gold:focus,.swagger-ui .hover-bg-gold:hover{background-color:#ffb700}.swagger-ui .hover-bg-yellow:focus,.swagger-ui .hover-bg-yellow:hover{background-color:gold}.swagger-ui .hover-bg-light-yellow:focus,.swagger-ui .hover-bg-light-yellow:hover{background-color:#fbf1a9}.swagger-ui .hover-bg-purple:focus,.swagger-ui .hover-bg-purple:hover{background-color:#5e2ca5}.swagger-ui .hover-bg-light-purple:focus,.swagger-ui .hover-bg-light-purple:hover{background-color:#a463f2}.swagger-ui .hover-bg-dark-pink:focus,.swagger-ui .hover-bg-dark-pink:hover{background-color:#d5008f}.swagger-ui .hover-bg-hot-pink:focus,.swagger-ui .hover-bg-hot-pink:hover{background-color:#ff41b4}.swagger-ui .hover-bg-pink:focus,.swagger-ui .hover-bg-pink:hover{background-color:#ff80cc}.swagger-ui .hover-bg-light-pink:focus,.swagger-ui .hover-bg-light-pink:hover{background-color:#ffa3d7}.swagger-ui .hover-bg-dark-green:focus,.swagger-ui .hover-bg-dark-green:hover{background-color:#137752}.swagger-ui .hover-bg-green:focus,.swagger-ui .hover-bg-green:hover{background-color:#19a974}.swagger-ui .hover-bg-light-green:focus,.swagger-ui .hover-bg-light-green:hover{background-color:#9eebcf}.swagger-ui .hover-bg-navy:focus,.swagger-ui .hover-bg-navy:hover{background-color:#001b44}.swagger-ui .hover-bg-dark-blue:focus,.swagger-ui .hover-bg-dark-blue:hover{background-color:#00449e}.swagger-ui .hover-bg-blue:focus,.swagger-ui .hover-bg-blue:hover{background-color:#357edd}.swagger-ui .hover-bg-light-blue:focus,.swagger-ui .hover-bg-light-blue:hover{background-color:#96ccff}.swagger-ui .hover-bg-lightest-blue:focus,.swagger-ui .hover-bg-lightest-blue:hover{background-color:#cdecff}.swagger-ui .hover-bg-washed-blue:focus,.swagger-ui .hover-bg-washed-blue:hover{background-color:#f6fffe}.swagger-ui .hover-bg-washed-green:focus,.swagger-ui .hover-bg-washed-green:hover{background-color:#e8fdf5}.swagger-ui .hover-bg-washed-yellow:focus,.swagger-ui .hover-bg-washed-yellow:hover{background-color:#fffceb}.swagger-ui .hover-bg-washed-red:focus,.swagger-ui .hover-bg-washed-red:hover{background-color:#ffdfdf}.swagger-ui .hover-bg-inherit:focus,.swagger-ui .hover-bg-inherit:hover{background-color:inherit}.swagger-ui .pa0{padding:0}.swagger-ui .pa1{padding:.25rem}.swagger-ui .pa2{padding:.5rem}.swagger-ui .pa3{padding:1rem}.swagger-ui .pa4{padding:2rem}.swagger-ui .pa5{padding:4rem}.swagger-ui .pa6{padding:8rem}.swagger-ui .pa7{padding:16rem}.swagger-ui .pl0{padding-left:0}.swagger-ui .pl1{padding-left:.25rem}.swagger-ui .pl2{padding-left:.5rem}.swagger-ui .pl3{padding-left:1rem}.swagger-ui .pl4{padding-left:2rem}.swagger-ui .pl5{padding-left:4rem}.swagger-ui .pl6{padding-left:8rem}.swagger-ui .pl7{padding-left:16rem}.swagger-ui .pr0{padding-right:0}.swagger-ui .pr1{padding-right:.25rem}.swagger-ui .pr2{padding-right:.5rem}.swagger-ui .pr3{padding-right:1rem}.swagger-ui .pr4{padding-right:2rem}.swagger-ui .pr5{padding-right:4rem}.swagger-ui .pr6{padding-right:8rem}.swagger-ui .pr7{padding-right:16rem}.swagger-ui .pb0{padding-bottom:0}.swagger-ui .pb1{padding-bottom:.25rem}.swagger-ui .pb2{padding-bottom:.5rem}.swagger-ui .pb3{padding-bottom:1rem}.swagger-ui .pb4{padding-bottom:2rem}.swagger-ui .pb5{padding-bottom:4rem}.swagger-ui .pb6{padding-bottom:8rem}.swagger-ui .pb7{padding-bottom:16rem}.swagger-ui .pt0{padding-top:0}.swagger-ui .pt1{padding-top:.25rem}.swagger-ui .pt2{padding-top:.5rem}.swagger-ui .pt3{padding-top:1rem}.swagger-ui .pt4{padding-top:2rem}.swagger-ui .pt5{padding-top:4rem}.swagger-ui .pt6{padding-top:8rem}.swagger-ui .pt7{padding-top:16rem}.swagger-ui .pv0{padding-bottom:0;padding-top:0}.swagger-ui .pv1{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0{padding-left:0;padding-right:0}.swagger-ui .ph1{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0{margin:0}.swagger-ui .ma1{margin:.25rem}.swagger-ui .ma2{margin:.5rem}.swagger-ui .ma3{margin:1rem}.swagger-ui .ma4{margin:2rem}.swagger-ui .ma5{margin:4rem}.swagger-ui .ma6{margin:8rem}.swagger-ui .ma7{margin:16rem}.swagger-ui .ml0{margin-left:0}.swagger-ui .ml1{margin-left:.25rem}.swagger-ui .ml2{margin-left:.5rem}.swagger-ui .ml3{margin-left:1rem}.swagger-ui .ml4{margin-left:2rem}.swagger-ui .ml5{margin-left:4rem}.swagger-ui .ml6{margin-left:8rem}.swagger-ui .ml7{margin-left:16rem}.swagger-ui .mr0{margin-right:0}.swagger-ui .mr1{margin-right:.25rem}.swagger-ui .mr2{margin-right:.5rem}.swagger-ui .mr3{margin-right:1rem}.swagger-ui .mr4{margin-right:2rem}.swagger-ui .mr5{margin-right:4rem}.swagger-ui .mr6{margin-right:8rem}.swagger-ui .mr7{margin-right:16rem}.swagger-ui .mb0{margin-bottom:0}.swagger-ui .mb1{margin-bottom:.25rem}.swagger-ui .mb2{margin-bottom:.5rem}.swagger-ui .mb3{margin-bottom:1rem}.swagger-ui .mb4{margin-bottom:2rem}.swagger-ui .mb5{margin-bottom:4rem}.swagger-ui .mb6{margin-bottom:8rem}.swagger-ui .mb7{margin-bottom:16rem}.swagger-ui .mt0{margin-top:0}.swagger-ui .mt1{margin-top:.25rem}.swagger-ui .mt2{margin-top:.5rem}.swagger-ui .mt3{margin-top:1rem}.swagger-ui .mt4{margin-top:2rem}.swagger-ui .mt5{margin-top:4rem}.swagger-ui .mt6{margin-top:8rem}.swagger-ui .mt7{margin-top:16rem}.swagger-ui .mv0{margin-bottom:0;margin-top:0}.swagger-ui .mv1{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0{margin-left:0;margin-right:0}.swagger-ui .mh1{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.swagger-ui .pa0-ns{padding:0}.swagger-ui .pa1-ns{padding:.25rem}.swagger-ui .pa2-ns{padding:.5rem}.swagger-ui .pa3-ns{padding:1rem}.swagger-ui .pa4-ns{padding:2rem}.swagger-ui .pa5-ns{padding:4rem}.swagger-ui .pa6-ns{padding:8rem}.swagger-ui .pa7-ns{padding:16rem}.swagger-ui .pl0-ns{padding-left:0}.swagger-ui .pl1-ns{padding-left:.25rem}.swagger-ui .pl2-ns{padding-left:.5rem}.swagger-ui .pl3-ns{padding-left:1rem}.swagger-ui .pl4-ns{padding-left:2rem}.swagger-ui .pl5-ns{padding-left:4rem}.swagger-ui .pl6-ns{padding-left:8rem}.swagger-ui .pl7-ns{padding-left:16rem}.swagger-ui .pr0-ns{padding-right:0}.swagger-ui .pr1-ns{padding-right:.25rem}.swagger-ui .pr2-ns{padding-right:.5rem}.swagger-ui .pr3-ns{padding-right:1rem}.swagger-ui .pr4-ns{padding-right:2rem}.swagger-ui .pr5-ns{padding-right:4rem}.swagger-ui .pr6-ns{padding-right:8rem}.swagger-ui .pr7-ns{padding-right:16rem}.swagger-ui .pb0-ns{padding-bottom:0}.swagger-ui .pb1-ns{padding-bottom:.25rem}.swagger-ui .pb2-ns{padding-bottom:.5rem}.swagger-ui .pb3-ns{padding-bottom:1rem}.swagger-ui .pb4-ns{padding-bottom:2rem}.swagger-ui .pb5-ns{padding-bottom:4rem}.swagger-ui .pb6-ns{padding-bottom:8rem}.swagger-ui .pb7-ns{padding-bottom:16rem}.swagger-ui .pt0-ns{padding-top:0}.swagger-ui .pt1-ns{padding-top:.25rem}.swagger-ui .pt2-ns{padding-top:.5rem}.swagger-ui .pt3-ns{padding-top:1rem}.swagger-ui .pt4-ns{padding-top:2rem}.swagger-ui .pt5-ns{padding-top:4rem}.swagger-ui .pt6-ns{padding-top:8rem}.swagger-ui .pt7-ns{padding-top:16rem}.swagger-ui .pv0-ns{padding-bottom:0;padding-top:0}.swagger-ui .pv1-ns{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-ns{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-ns{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-ns{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-ns{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-ns{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-ns{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-ns{padding-left:0;padding-right:0}.swagger-ui .ph1-ns{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-ns{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-ns{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-ns{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-ns{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-ns{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-ns{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-ns{margin:0}.swagger-ui .ma1-ns{margin:.25rem}.swagger-ui .ma2-ns{margin:.5rem}.swagger-ui .ma3-ns{margin:1rem}.swagger-ui .ma4-ns{margin:2rem}.swagger-ui .ma5-ns{margin:4rem}.swagger-ui .ma6-ns{margin:8rem}.swagger-ui .ma7-ns{margin:16rem}.swagger-ui .ml0-ns{margin-left:0}.swagger-ui .ml1-ns{margin-left:.25rem}.swagger-ui .ml2-ns{margin-left:.5rem}.swagger-ui .ml3-ns{margin-left:1rem}.swagger-ui .ml4-ns{margin-left:2rem}.swagger-ui .ml5-ns{margin-left:4rem}.swagger-ui .ml6-ns{margin-left:8rem}.swagger-ui .ml7-ns{margin-left:16rem}.swagger-ui .mr0-ns{margin-right:0}.swagger-ui .mr1-ns{margin-right:.25rem}.swagger-ui .mr2-ns{margin-right:.5rem}.swagger-ui .mr3-ns{margin-right:1rem}.swagger-ui .mr4-ns{margin-right:2rem}.swagger-ui .mr5-ns{margin-right:4rem}.swagger-ui .mr6-ns{margin-right:8rem}.swagger-ui .mr7-ns{margin-right:16rem}.swagger-ui .mb0-ns{margin-bottom:0}.swagger-ui .mb1-ns{margin-bottom:.25rem}.swagger-ui .mb2-ns{margin-bottom:.5rem}.swagger-ui .mb3-ns{margin-bottom:1rem}.swagger-ui .mb4-ns{margin-bottom:2rem}.swagger-ui .mb5-ns{margin-bottom:4rem}.swagger-ui .mb6-ns{margin-bottom:8rem}.swagger-ui .mb7-ns{margin-bottom:16rem}.swagger-ui .mt0-ns{margin-top:0}.swagger-ui .mt1-ns{margin-top:.25rem}.swagger-ui .mt2-ns{margin-top:.5rem}.swagger-ui .mt3-ns{margin-top:1rem}.swagger-ui .mt4-ns{margin-top:2rem}.swagger-ui .mt5-ns{margin-top:4rem}.swagger-ui .mt6-ns{margin-top:8rem}.swagger-ui .mt7-ns{margin-top:16rem}.swagger-ui .mv0-ns{margin-bottom:0;margin-top:0}.swagger-ui .mv1-ns{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-ns{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-ns{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-ns{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-ns{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-ns{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-ns{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-ns{margin-left:0;margin-right:0}.swagger-ui .mh1-ns{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-ns{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-ns{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-ns{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-ns{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-ns{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .pa0-m{padding:0}.swagger-ui .pa1-m{padding:.25rem}.swagger-ui .pa2-m{padding:.5rem}.swagger-ui .pa3-m{padding:1rem}.swagger-ui .pa4-m{padding:2rem}.swagger-ui .pa5-m{padding:4rem}.swagger-ui .pa6-m{padding:8rem}.swagger-ui .pa7-m{padding:16rem}.swagger-ui .pl0-m{padding-left:0}.swagger-ui .pl1-m{padding-left:.25rem}.swagger-ui .pl2-m{padding-left:.5rem}.swagger-ui .pl3-m{padding-left:1rem}.swagger-ui .pl4-m{padding-left:2rem}.swagger-ui .pl5-m{padding-left:4rem}.swagger-ui .pl6-m{padding-left:8rem}.swagger-ui .pl7-m{padding-left:16rem}.swagger-ui .pr0-m{padding-right:0}.swagger-ui .pr1-m{padding-right:.25rem}.swagger-ui .pr2-m{padding-right:.5rem}.swagger-ui .pr3-m{padding-right:1rem}.swagger-ui .pr4-m{padding-right:2rem}.swagger-ui .pr5-m{padding-right:4rem}.swagger-ui .pr6-m{padding-right:8rem}.swagger-ui .pr7-m{padding-right:16rem}.swagger-ui .pb0-m{padding-bottom:0}.swagger-ui .pb1-m{padding-bottom:.25rem}.swagger-ui .pb2-m{padding-bottom:.5rem}.swagger-ui .pb3-m{padding-bottom:1rem}.swagger-ui .pb4-m{padding-bottom:2rem}.swagger-ui .pb5-m{padding-bottom:4rem}.swagger-ui .pb6-m{padding-bottom:8rem}.swagger-ui .pb7-m{padding-bottom:16rem}.swagger-ui .pt0-m{padding-top:0}.swagger-ui .pt1-m{padding-top:.25rem}.swagger-ui .pt2-m{padding-top:.5rem}.swagger-ui .pt3-m{padding-top:1rem}.swagger-ui .pt4-m{padding-top:2rem}.swagger-ui .pt5-m{padding-top:4rem}.swagger-ui .pt6-m{padding-top:8rem}.swagger-ui .pt7-m{padding-top:16rem}.swagger-ui .pv0-m{padding-bottom:0;padding-top:0}.swagger-ui .pv1-m{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-m{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-m{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-m{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-m{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-m{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-m{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-m{padding-left:0;padding-right:0}.swagger-ui .ph1-m{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-m{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-m{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-m{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-m{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-m{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-m{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-m{margin:0}.swagger-ui .ma1-m{margin:.25rem}.swagger-ui .ma2-m{margin:.5rem}.swagger-ui .ma3-m{margin:1rem}.swagger-ui .ma4-m{margin:2rem}.swagger-ui .ma5-m{margin:4rem}.swagger-ui .ma6-m{margin:8rem}.swagger-ui .ma7-m{margin:16rem}.swagger-ui .ml0-m{margin-left:0}.swagger-ui .ml1-m{margin-left:.25rem}.swagger-ui .ml2-m{margin-left:.5rem}.swagger-ui .ml3-m{margin-left:1rem}.swagger-ui .ml4-m{margin-left:2rem}.swagger-ui .ml5-m{margin-left:4rem}.swagger-ui .ml6-m{margin-left:8rem}.swagger-ui .ml7-m{margin-left:16rem}.swagger-ui .mr0-m{margin-right:0}.swagger-ui .mr1-m{margin-right:.25rem}.swagger-ui .mr2-m{margin-right:.5rem}.swagger-ui .mr3-m{margin-right:1rem}.swagger-ui .mr4-m{margin-right:2rem}.swagger-ui .mr5-m{margin-right:4rem}.swagger-ui .mr6-m{margin-right:8rem}.swagger-ui .mr7-m{margin-right:16rem}.swagger-ui .mb0-m{margin-bottom:0}.swagger-ui .mb1-m{margin-bottom:.25rem}.swagger-ui .mb2-m{margin-bottom:.5rem}.swagger-ui .mb3-m{margin-bottom:1rem}.swagger-ui .mb4-m{margin-bottom:2rem}.swagger-ui .mb5-m{margin-bottom:4rem}.swagger-ui .mb6-m{margin-bottom:8rem}.swagger-ui .mb7-m{margin-bottom:16rem}.swagger-ui .mt0-m{margin-top:0}.swagger-ui .mt1-m{margin-top:.25rem}.swagger-ui .mt2-m{margin-top:.5rem}.swagger-ui .mt3-m{margin-top:1rem}.swagger-ui .mt4-m{margin-top:2rem}.swagger-ui .mt5-m{margin-top:4rem}.swagger-ui .mt6-m{margin-top:8rem}.swagger-ui .mt7-m{margin-top:16rem}.swagger-ui .mv0-m{margin-bottom:0;margin-top:0}.swagger-ui .mv1-m{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-m{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-m{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-m{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-m{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-m{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-m{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-m{margin-left:0;margin-right:0}.swagger-ui .mh1-m{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-m{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-m{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-m{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-m{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-m{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.swagger-ui .pa0-l{padding:0}.swagger-ui .pa1-l{padding:.25rem}.swagger-ui .pa2-l{padding:.5rem}.swagger-ui .pa3-l{padding:1rem}.swagger-ui .pa4-l{padding:2rem}.swagger-ui .pa5-l{padding:4rem}.swagger-ui .pa6-l{padding:8rem}.swagger-ui .pa7-l{padding:16rem}.swagger-ui .pl0-l{padding-left:0}.swagger-ui .pl1-l{padding-left:.25rem}.swagger-ui .pl2-l{padding-left:.5rem}.swagger-ui .pl3-l{padding-left:1rem}.swagger-ui .pl4-l{padding-left:2rem}.swagger-ui .pl5-l{padding-left:4rem}.swagger-ui .pl6-l{padding-left:8rem}.swagger-ui .pl7-l{padding-left:16rem}.swagger-ui .pr0-l{padding-right:0}.swagger-ui .pr1-l{padding-right:.25rem}.swagger-ui .pr2-l{padding-right:.5rem}.swagger-ui .pr3-l{padding-right:1rem}.swagger-ui .pr4-l{padding-right:2rem}.swagger-ui .pr5-l{padding-right:4rem}.swagger-ui .pr6-l{padding-right:8rem}.swagger-ui .pr7-l{padding-right:16rem}.swagger-ui .pb0-l{padding-bottom:0}.swagger-ui .pb1-l{padding-bottom:.25rem}.swagger-ui .pb2-l{padding-bottom:.5rem}.swagger-ui .pb3-l{padding-bottom:1rem}.swagger-ui .pb4-l{padding-bottom:2rem}.swagger-ui .pb5-l{padding-bottom:4rem}.swagger-ui .pb6-l{padding-bottom:8rem}.swagger-ui .pb7-l{padding-bottom:16rem}.swagger-ui .pt0-l{padding-top:0}.swagger-ui .pt1-l{padding-top:.25rem}.swagger-ui .pt2-l{padding-top:.5rem}.swagger-ui .pt3-l{padding-top:1rem}.swagger-ui .pt4-l{padding-top:2rem}.swagger-ui .pt5-l{padding-top:4rem}.swagger-ui .pt6-l{padding-top:8rem}.swagger-ui .pt7-l{padding-top:16rem}.swagger-ui .pv0-l{padding-bottom:0;padding-top:0}.swagger-ui .pv1-l{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-l{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-l{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-l{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-l{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-l{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-l{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-l{padding-left:0;padding-right:0}.swagger-ui .ph1-l{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-l{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-l{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-l{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-l{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-l{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-l{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-l{margin:0}.swagger-ui .ma1-l{margin:.25rem}.swagger-ui .ma2-l{margin:.5rem}.swagger-ui .ma3-l{margin:1rem}.swagger-ui .ma4-l{margin:2rem}.swagger-ui .ma5-l{margin:4rem}.swagger-ui .ma6-l{margin:8rem}.swagger-ui .ma7-l{margin:16rem}.swagger-ui .ml0-l{margin-left:0}.swagger-ui .ml1-l{margin-left:.25rem}.swagger-ui .ml2-l{margin-left:.5rem}.swagger-ui .ml3-l{margin-left:1rem}.swagger-ui .ml4-l{margin-left:2rem}.swagger-ui .ml5-l{margin-left:4rem}.swagger-ui .ml6-l{margin-left:8rem}.swagger-ui .ml7-l{margin-left:16rem}.swagger-ui .mr0-l{margin-right:0}.swagger-ui .mr1-l{margin-right:.25rem}.swagger-ui .mr2-l{margin-right:.5rem}.swagger-ui .mr3-l{margin-right:1rem}.swagger-ui .mr4-l{margin-right:2rem}.swagger-ui .mr5-l{margin-right:4rem}.swagger-ui .mr6-l{margin-right:8rem}.swagger-ui .mr7-l{margin-right:16rem}.swagger-ui .mb0-l{margin-bottom:0}.swagger-ui .mb1-l{margin-bottom:.25rem}.swagger-ui .mb2-l{margin-bottom:.5rem}.swagger-ui .mb3-l{margin-bottom:1rem}.swagger-ui .mb4-l{margin-bottom:2rem}.swagger-ui .mb5-l{margin-bottom:4rem}.swagger-ui .mb6-l{margin-bottom:8rem}.swagger-ui .mb7-l{margin-bottom:16rem}.swagger-ui .mt0-l{margin-top:0}.swagger-ui .mt1-l{margin-top:.25rem}.swagger-ui .mt2-l{margin-top:.5rem}.swagger-ui .mt3-l{margin-top:1rem}.swagger-ui .mt4-l{margin-top:2rem}.swagger-ui .mt5-l{margin-top:4rem}.swagger-ui .mt6-l{margin-top:8rem}.swagger-ui .mt7-l{margin-top:16rem}.swagger-ui .mv0-l{margin-bottom:0;margin-top:0}.swagger-ui .mv1-l{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-l{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-l{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-l{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-l{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-l{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-l{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-l{margin-left:0;margin-right:0}.swagger-ui .mh1-l{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-l{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-l{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-l{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-l{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-l{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-l{margin-left:16rem;margin-right:16rem}}.swagger-ui .na1{margin:-.25rem}.swagger-ui .na2{margin:-.5rem}.swagger-ui .na3{margin:-1rem}.swagger-ui .na4{margin:-2rem}.swagger-ui .na5{margin:-4rem}.swagger-ui .na6{margin:-8rem}.swagger-ui .na7{margin:-16rem}.swagger-ui .nl1{margin-left:-.25rem}.swagger-ui .nl2{margin-left:-.5rem}.swagger-ui .nl3{margin-left:-1rem}.swagger-ui .nl4{margin-left:-2rem}.swagger-ui .nl5{margin-left:-4rem}.swagger-ui .nl6{margin-left:-8rem}.swagger-ui .nl7{margin-left:-16rem}.swagger-ui .nr1{margin-right:-.25rem}.swagger-ui .nr2{margin-right:-.5rem}.swagger-ui .nr3{margin-right:-1rem}.swagger-ui .nr4{margin-right:-2rem}.swagger-ui .nr5{margin-right:-4rem}.swagger-ui .nr6{margin-right:-8rem}.swagger-ui .nr7{margin-right:-16rem}.swagger-ui .nb1{margin-bottom:-.25rem}.swagger-ui .nb2{margin-bottom:-.5rem}.swagger-ui .nb3{margin-bottom:-1rem}.swagger-ui .nb4{margin-bottom:-2rem}.swagger-ui .nb5{margin-bottom:-4rem}.swagger-ui .nb6{margin-bottom:-8rem}.swagger-ui .nb7{margin-bottom:-16rem}.swagger-ui .nt1{margin-top:-.25rem}.swagger-ui .nt2{margin-top:-.5rem}.swagger-ui .nt3{margin-top:-1rem}.swagger-ui .nt4{margin-top:-2rem}.swagger-ui .nt5{margin-top:-4rem}.swagger-ui .nt6{margin-top:-8rem}.swagger-ui .nt7{margin-top:-16rem}@media screen and (min-width:30em){.swagger-ui .na1-ns{margin:-.25rem}.swagger-ui .na2-ns{margin:-.5rem}.swagger-ui .na3-ns{margin:-1rem}.swagger-ui .na4-ns{margin:-2rem}.swagger-ui .na5-ns{margin:-4rem}.swagger-ui .na6-ns{margin:-8rem}.swagger-ui .na7-ns{margin:-16rem}.swagger-ui .nl1-ns{margin-left:-.25rem}.swagger-ui .nl2-ns{margin-left:-.5rem}.swagger-ui .nl3-ns{margin-left:-1rem}.swagger-ui .nl4-ns{margin-left:-2rem}.swagger-ui .nl5-ns{margin-left:-4rem}.swagger-ui .nl6-ns{margin-left:-8rem}.swagger-ui .nl7-ns{margin-left:-16rem}.swagger-ui .nr1-ns{margin-right:-.25rem}.swagger-ui .nr2-ns{margin-right:-.5rem}.swagger-ui .nr3-ns{margin-right:-1rem}.swagger-ui .nr4-ns{margin-right:-2rem}.swagger-ui .nr5-ns{margin-right:-4rem}.swagger-ui .nr6-ns{margin-right:-8rem}.swagger-ui .nr7-ns{margin-right:-16rem}.swagger-ui .nb1-ns{margin-bottom:-.25rem}.swagger-ui .nb2-ns{margin-bottom:-.5rem}.swagger-ui .nb3-ns{margin-bottom:-1rem}.swagger-ui .nb4-ns{margin-bottom:-2rem}.swagger-ui .nb5-ns{margin-bottom:-4rem}.swagger-ui .nb6-ns{margin-bottom:-8rem}.swagger-ui .nb7-ns{margin-bottom:-16rem}.swagger-ui .nt1-ns{margin-top:-.25rem}.swagger-ui .nt2-ns{margin-top:-.5rem}.swagger-ui .nt3-ns{margin-top:-1rem}.swagger-ui .nt4-ns{margin-top:-2rem}.swagger-ui .nt5-ns{margin-top:-4rem}.swagger-ui .nt6-ns{margin-top:-8rem}.swagger-ui .nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .na1-m{margin:-.25rem}.swagger-ui .na2-m{margin:-.5rem}.swagger-ui .na3-m{margin:-1rem}.swagger-ui .na4-m{margin:-2rem}.swagger-ui .na5-m{margin:-4rem}.swagger-ui .na6-m{margin:-8rem}.swagger-ui .na7-m{margin:-16rem}.swagger-ui .nl1-m{margin-left:-.25rem}.swagger-ui .nl2-m{margin-left:-.5rem}.swagger-ui .nl3-m{margin-left:-1rem}.swagger-ui .nl4-m{margin-left:-2rem}.swagger-ui .nl5-m{margin-left:-4rem}.swagger-ui .nl6-m{margin-left:-8rem}.swagger-ui .nl7-m{margin-left:-16rem}.swagger-ui .nr1-m{margin-right:-.25rem}.swagger-ui .nr2-m{margin-right:-.5rem}.swagger-ui .nr3-m{margin-right:-1rem}.swagger-ui .nr4-m{margin-right:-2rem}.swagger-ui .nr5-m{margin-right:-4rem}.swagger-ui .nr6-m{margin-right:-8rem}.swagger-ui .nr7-m{margin-right:-16rem}.swagger-ui .nb1-m{margin-bottom:-.25rem}.swagger-ui .nb2-m{margin-bottom:-.5rem}.swagger-ui .nb3-m{margin-bottom:-1rem}.swagger-ui .nb4-m{margin-bottom:-2rem}.swagger-ui .nb5-m{margin-bottom:-4rem}.swagger-ui .nb6-m{margin-bottom:-8rem}.swagger-ui .nb7-m{margin-bottom:-16rem}.swagger-ui .nt1-m{margin-top:-.25rem}.swagger-ui .nt2-m{margin-top:-.5rem}.swagger-ui .nt3-m{margin-top:-1rem}.swagger-ui .nt4-m{margin-top:-2rem}.swagger-ui .nt5-m{margin-top:-4rem}.swagger-ui .nt6-m{margin-top:-8rem}.swagger-ui .nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.swagger-ui .na1-l{margin:-.25rem}.swagger-ui .na2-l{margin:-.5rem}.swagger-ui .na3-l{margin:-1rem}.swagger-ui .na4-l{margin:-2rem}.swagger-ui .na5-l{margin:-4rem}.swagger-ui .na6-l{margin:-8rem}.swagger-ui .na7-l{margin:-16rem}.swagger-ui .nl1-l{margin-left:-.25rem}.swagger-ui .nl2-l{margin-left:-.5rem}.swagger-ui .nl3-l{margin-left:-1rem}.swagger-ui .nl4-l{margin-left:-2rem}.swagger-ui .nl5-l{margin-left:-4rem}.swagger-ui .nl6-l{margin-left:-8rem}.swagger-ui .nl7-l{margin-left:-16rem}.swagger-ui .nr1-l{margin-right:-.25rem}.swagger-ui .nr2-l{margin-right:-.5rem}.swagger-ui .nr3-l{margin-right:-1rem}.swagger-ui .nr4-l{margin-right:-2rem}.swagger-ui .nr5-l{margin-right:-4rem}.swagger-ui .nr6-l{margin-right:-8rem}.swagger-ui .nr7-l{margin-right:-16rem}.swagger-ui .nb1-l{margin-bottom:-.25rem}.swagger-ui .nb2-l{margin-bottom:-.5rem}.swagger-ui .nb3-l{margin-bottom:-1rem}.swagger-ui .nb4-l{margin-bottom:-2rem}.swagger-ui .nb5-l{margin-bottom:-4rem}.swagger-ui .nb6-l{margin-bottom:-8rem}.swagger-ui .nb7-l{margin-bottom:-16rem}.swagger-ui .nt1-l{margin-top:-.25rem}.swagger-ui .nt2-l{margin-top:-.5rem}.swagger-ui .nt3-l{margin-top:-1rem}.swagger-ui .nt4-l{margin-top:-2rem}.swagger-ui .nt5-l{margin-top:-4rem}.swagger-ui .nt6-l{margin-top:-8rem}.swagger-ui .nt7-l{margin-top:-16rem}}.swagger-ui .collapse{border-collapse:collapse;border-spacing:0}.swagger-ui .striped--light-silver:nth-child(odd){background-color:#aaa}.swagger-ui .striped--moon-gray:nth-child(odd){background-color:#ccc}.swagger-ui .striped--light-gray:nth-child(odd){background-color:#eee}.swagger-ui .striped--near-white:nth-child(odd){background-color:#f4f4f4}.swagger-ui .stripe-light:nth-child(odd){background-color:#ffffff1a}.swagger-ui .stripe-dark:nth-child(odd){background-color:#0000001a}.swagger-ui .strike{text-decoration:line-through}.swagger-ui .underline{text-decoration:underline}.swagger-ui .no-underline{text-decoration:none}@media screen and (min-width:30em){.swagger-ui .strike-ns{text-decoration:line-through}.swagger-ui .underline-ns{text-decoration:underline}.swagger-ui .no-underline-ns{text-decoration:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .strike-m{text-decoration:line-through}.swagger-ui .underline-m{text-decoration:underline}.swagger-ui .no-underline-m{text-decoration:none}}@media screen and (min-width:60em){.swagger-ui .strike-l{text-decoration:line-through}.swagger-ui .underline-l{text-decoration:underline}.swagger-ui .no-underline-l{text-decoration:none}}.swagger-ui .tl{text-align:left}.swagger-ui .tr{text-align:right}.swagger-ui .tc{text-align:center}.swagger-ui .tj{text-align:justify}@media screen and (min-width:30em){.swagger-ui .tl-ns{text-align:left}.swagger-ui .tr-ns{text-align:right}.swagger-ui .tc-ns{text-align:center}.swagger-ui .tj-ns{text-align:justify}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .tl-m{text-align:left}.swagger-ui .tr-m{text-align:right}.swagger-ui .tc-m{text-align:center}.swagger-ui .tj-m{text-align:justify}}@media screen and (min-width:60em){.swagger-ui .tl-l{text-align:left}.swagger-ui .tr-l{text-align:right}.swagger-ui .tc-l{text-align:center}.swagger-ui .tj-l{text-align:justify}}.swagger-ui .ttc{text-transform:capitalize}.swagger-ui .ttl{text-transform:lowercase}.swagger-ui .ttu{text-transform:uppercase}.swagger-ui .ttn{text-transform:none}@media screen and (min-width:30em){.swagger-ui .ttc-ns{text-transform:capitalize}.swagger-ui .ttl-ns{text-transform:lowercase}.swagger-ui .ttu-ns{text-transform:uppercase}.swagger-ui .ttn-ns{text-transform:none}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ttc-m{text-transform:capitalize}.swagger-ui .ttl-m{text-transform:lowercase}.swagger-ui .ttu-m{text-transform:uppercase}.swagger-ui .ttn-m{text-transform:none}}@media screen and (min-width:60em){.swagger-ui .ttc-l{text-transform:capitalize}.swagger-ui .ttl-l{text-transform:lowercase}.swagger-ui .ttu-l{text-transform:uppercase}.swagger-ui .ttn-l{text-transform:none}}.swagger-ui .f-6,.swagger-ui .f-headline{font-size:6rem}.swagger-ui .f-5,.swagger-ui .f-subheadline{font-size:5rem}.swagger-ui .f1{font-size:3rem}.swagger-ui .f2{font-size:2.25rem}.swagger-ui .f3{font-size:1.5rem}.swagger-ui .f4{font-size:1.25rem}.swagger-ui .f5{font-size:1rem}.swagger-ui .f6{font-size:.875rem}.swagger-ui .f7{font-size:.75rem}@media screen and (min-width:30em){.swagger-ui .f-6-ns,.swagger-ui .f-headline-ns{font-size:6rem}.swagger-ui .f-5-ns,.swagger-ui .f-subheadline-ns{font-size:5rem}.swagger-ui .f1-ns{font-size:3rem}.swagger-ui .f2-ns{font-size:2.25rem}.swagger-ui .f3-ns{font-size:1.5rem}.swagger-ui .f4-ns{font-size:1.25rem}.swagger-ui .f5-ns{font-size:1rem}.swagger-ui .f6-ns{font-size:.875rem}.swagger-ui .f7-ns{font-size:.75rem}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .f-6-m,.swagger-ui .f-headline-m{font-size:6rem}.swagger-ui .f-5-m,.swagger-ui .f-subheadline-m{font-size:5rem}.swagger-ui .f1-m{font-size:3rem}.swagger-ui .f2-m{font-size:2.25rem}.swagger-ui .f3-m{font-size:1.5rem}.swagger-ui .f4-m{font-size:1.25rem}.swagger-ui .f5-m{font-size:1rem}.swagger-ui .f6-m{font-size:.875rem}.swagger-ui .f7-m{font-size:.75rem}}@media screen and (min-width:60em){.swagger-ui .f-6-l,.swagger-ui .f-headline-l{font-size:6rem}.swagger-ui .f-5-l,.swagger-ui .f-subheadline-l{font-size:5rem}.swagger-ui .f1-l{font-size:3rem}.swagger-ui .f2-l{font-size:2.25rem}.swagger-ui .f3-l{font-size:1.5rem}.swagger-ui .f4-l{font-size:1.25rem}.swagger-ui .f5-l{font-size:1rem}.swagger-ui .f6-l{font-size:.875rem}.swagger-ui .f7-l{font-size:.75rem}}.swagger-ui .measure{max-width:30em}.swagger-ui .measure-wide{max-width:34em}.swagger-ui .measure-narrow{max-width:20em}.swagger-ui .indent{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (min-width:30em){.swagger-ui .measure-ns{max-width:30em}.swagger-ui .measure-wide-ns{max-width:34em}.swagger-ui .measure-narrow-ns{max-width:20em}.swagger-ui .indent-ns{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-ns{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-ns{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .measure-m{max-width:30em}.swagger-ui .measure-wide-m{max-width:34em}.swagger-ui .measure-narrow-m{max-width:20em}.swagger-ui .indent-m{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-m{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-m{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:60em){.swagger-ui .measure-l{max-width:30em}.swagger-ui .measure-wide-l{max-width:34em}.swagger-ui .measure-narrow-l{max-width:20em}.swagger-ui .indent-l{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-l{font-feature-settings:"smcp";font-variant:small-caps}.swagger-ui .truncate-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.swagger-ui .overflow-container{overflow-y:scroll}.swagger-ui .center{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto{margin-right:auto}.swagger-ui .ml-auto{margin-left:auto}@media screen and (min-width:30em){.swagger-ui .center-ns{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-ns{margin-right:auto}.swagger-ui .ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .center-m{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-m{margin-right:auto}.swagger-ui .ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.swagger-ui .center-l{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-l{margin-right:auto}.swagger-ui .ml-auto-l{margin-left:auto}}.swagger-ui .clip{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}@media screen and (min-width:30em){.swagger-ui .clip-ns{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .clip-m{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}@media screen and (min-width:60em){.swagger-ui .clip-l{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);position:fixed!important;_position:absolute!important}}.swagger-ui .ws-normal{white-space:normal}.swagger-ui .nowrap{white-space:nowrap}.swagger-ui .pre{white-space:pre}@media screen and (min-width:30em){.swagger-ui .ws-normal-ns{white-space:normal}.swagger-ui .nowrap-ns{white-space:nowrap}.swagger-ui .pre-ns{white-space:pre}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .ws-normal-m{white-space:normal}.swagger-ui .nowrap-m{white-space:nowrap}.swagger-ui .pre-m{white-space:pre}}@media screen and (min-width:60em){.swagger-ui .ws-normal-l{white-space:normal}.swagger-ui .nowrap-l{white-space:nowrap}.swagger-ui .pre-l{white-space:pre}}.swagger-ui .v-base{vertical-align:baseline}.swagger-ui .v-mid{vertical-align:middle}.swagger-ui .v-top{vertical-align:top}.swagger-ui .v-btm{vertical-align:bottom}@media screen and (min-width:30em){.swagger-ui .v-base-ns{vertical-align:baseline}.swagger-ui .v-mid-ns{vertical-align:middle}.swagger-ui .v-top-ns{vertical-align:top}.swagger-ui .v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em) and (max-width:60em){.swagger-ui .v-base-m{vertical-align:baseline}.swagger-ui .v-mid-m{vertical-align:middle}.swagger-ui .v-top-m{vertical-align:top}.swagger-ui .v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.swagger-ui .v-base-l{vertical-align:baseline}.swagger-ui .v-mid-l{vertical-align:middle}.swagger-ui .v-top-l{vertical-align:top}.swagger-ui .v-btm-l{vertical-align:bottom}}.swagger-ui .dim{opacity:1;transition:opacity .15s ease-in}.swagger-ui .dim:focus,.swagger-ui .dim:hover{opacity:.5;transition:opacity .15s ease-in}.swagger-ui .dim:active{opacity:.8;transition:opacity .15s ease-out}.swagger-ui .glow{transition:opacity .15s ease-in}.swagger-ui .glow:focus,.swagger-ui .glow:hover{opacity:1;transition:opacity .15s ease-in}.swagger-ui .hide-child .child{opacity:0;transition:opacity .15s ease-in}.swagger-ui .hide-child:active .child,.swagger-ui .hide-child:focus .child,.swagger-ui .hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.swagger-ui .underline-hover:focus,.swagger-ui .underline-hover:hover{text-decoration:underline}.swagger-ui .grow{-moz-osx-font-smoothing:grayscale;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-out}.swagger-ui .grow:focus,.swagger-ui .grow:hover{transform:scale(1.05)}.swagger-ui .grow:active{transform:scale(.9)}.swagger-ui .grow-large{-moz-osx-font-smoothing:grayscale;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-in-out}.swagger-ui .grow-large:focus,.swagger-ui .grow-large:hover{transform:scale(1.2)}.swagger-ui .grow-large:active{transform:scale(.95)}.swagger-ui .pointer:hover{cursor:pointer}.swagger-ui .shadow-hover{cursor:pointer;position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.swagger-ui .shadow-hover:after{border-radius:inherit;box-shadow:0 0 16px 2px #0003;content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .5s cubic-bezier(.165,.84,.44,1);width:100%;z-index:-1}.swagger-ui .shadow-hover:focus:after,.swagger-ui .shadow-hover:hover:after{opacity:1}.swagger-ui .bg-animate,.swagger-ui .bg-animate:focus,.swagger-ui .bg-animate:hover{transition:background-color .15s ease-in-out}.swagger-ui .z-0{z-index:0}.swagger-ui .z-1{z-index:1}.swagger-ui .z-2{z-index:2}.swagger-ui .z-3{z-index:3}.swagger-ui .z-4{z-index:4}.swagger-ui .z-5{z-index:5}.swagger-ui .z-999{z-index:999}.swagger-ui .z-9999{z-index:9999}.swagger-ui .z-max{z-index:2147483647}.swagger-ui .z-inherit{z-index:inherit}.swagger-ui .z-initial{z-index:auto}.swagger-ui .z-unset{z-index:unset}.swagger-ui .nested-copy-line-height ol,.swagger-ui .nested-copy-line-height p,.swagger-ui .nested-copy-line-height ul{line-height:1.5}.swagger-ui .nested-headline-line-height h1,.swagger-ui .nested-headline-line-height h2,.swagger-ui .nested-headline-line-height h3,.swagger-ui .nested-headline-line-height h4,.swagger-ui .nested-headline-line-height h5,.swagger-ui .nested-headline-line-height h6{line-height:1.25}.swagger-ui .nested-list-reset ol,.swagger-ui .nested-list-reset ul{list-style-type:none;margin-left:0;padding-left:0}.swagger-ui .nested-copy-indent p+p{margin-bottom:0;margin-top:0;text-indent:.1em}.swagger-ui .nested-copy-seperator p+p{margin-top:1.5em}.swagger-ui .nested-img img{display:block;max-width:100%;width:100%}.swagger-ui .nested-links a{color:#357edd;transition:color .15s ease-in}.swagger-ui .nested-links a:focus,.swagger-ui .nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.swagger-ui .wrapper{box-sizing:border-box;margin:0 auto;max-width:1460px;padding:0 20px;width:100%}.swagger-ui .opblock-tag-section{display:flex;flex-direction:column}.swagger-ui .try-out.btn-group{display:flex;flex:.1 2 auto;padding:0}.swagger-ui .try-out__btn{margin-left:1.25rem}.swagger-ui .opblock-tag{align-items:center;border-bottom:1px solid rgba(59,65,81,.3);cursor:pointer;display:flex;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui .opblock-tag:hover{background:rgba(0,0,0,.02)}.swagger-ui .opblock-tag{color:#3b4151;font-family:sans-serif;font-size:24px;margin:0 0 5px}.swagger-ui .opblock-tag.no-desc span{flex:1}.swagger-ui .opblock-tag svg{transition:all .4s}.swagger-ui .opblock-tag small{color:#3b4151;flex:2;font-family:sans-serif;font-size:14px;font-weight:400;padding:0 10px}.swagger-ui .opblock-tag>div{flex:1 1 150px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.swagger-ui .parameter__type{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;padding:5px 0}.swagger-ui .parameter-controls{margin-top:.75em}.swagger-ui .examples__title{display:block;font-size:1.1em;font-weight:700;margin-bottom:.75em}.swagger-ui .examples__section{margin-top:1.5em}.swagger-ui .examples__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .examples-select{display:inline-block;margin-bottom:.75em}.swagger-ui .examples-select .examples-select-element{width:100%}.swagger-ui .examples-select__section-label{font-size:.9rem;font-weight:700;margin-right:.5rem}.swagger-ui .example__section{margin-top:1.5em}.swagger-ui .example__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .view-line-link{cursor:pointer;margin:0 5px;position:relative;top:3px;transition:all .5s;width:20px}.swagger-ui .opblock{border:1px solid #000;border-radius:4px;box-shadow:0 0 3px #00000030;margin:0 0 15px}.swagger-ui .opblock .tab-header{display:flex;flex:1}.swagger-ui .opblock .tab-header .tab-item{cursor:pointer;padding:0 40px}.swagger-ui .opblock .tab-header .tab-item:first-of-type{padding:0 40px 0 0}.swagger-ui .opblock .tab-header .tab-item.active h4 span{position:relative}.swagger-ui .opblock .tab-header .tab-item.active h4 span:after{background:gray;bottom:-15px;content:"";height:4px;left:50%;position:absolute;transform:translate(-50%);width:120%}.swagger-ui .opblock.is-open .opblock-summary{border-bottom:1px solid #000}.swagger-ui .opblock .opblock-section-header{align-items:center;background:hsla(0,0%,100%,.8);box-shadow:0 1px 2px #0000001a;display:flex;min-height:50px;padding:8px 20px}.swagger-ui .opblock .opblock-section-header>label{align-items:center;color:#3b4151;display:flex;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 0 auto}.swagger-ui .opblock .opblock-section-header>label>span{padding:0 10px 0 0}.swagger-ui .opblock .opblock-section-header h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock .opblock-summary-method{background:#000;border-radius:3px;color:#fff;font-family:sans-serif;font-size:14px;font-weight:700;min-width:80px;padding:6px 0;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1)}.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{align-items:center;color:#3b4151;display:flex;font-family:monospace;font-size:16px;font-weight:600;padding:0 10px;word-break:break-word}@media (max-width:768px){.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{font-size:12px}}.swagger-ui .opblock .opblock-summary-path{flex-shrink:0;max-width:calc(100% - 110px - 15rem)}.swagger-ui .opblock .opblock-summary-path__deprecated{text-decoration:line-through}.swagger-ui .opblock .opblock-summary-operation-id{font-size:14px}.swagger-ui .opblock .opblock-summary-description{color:#3b4151;flex:1 1 auto;font-family:sans-serif;font-size:13px;word-break:break-word}.swagger-ui .opblock .opblock-summary{align-items:center;cursor:pointer;display:flex;padding:5px}.swagger-ui .opblock .opblock-summary .view-line-link{cursor:pointer;margin:0;position:relative;top:2px;transition:all .5s;width:0}.swagger-ui .opblock .opblock-summary:hover .view-line-link{margin:0 5px;width:18px}.swagger-ui .opblock.opblock-post{background:rgba(73,204,144,.1);border-color:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary-method{background:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary{border-color:#49cc90}.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span:after{background:#49cc90}.swagger-ui .opblock.opblock-put{background:rgba(252,161,48,.1);border-color:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary-method{background:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary{border-color:#fca130}.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span:after{background:#fca130}.swagger-ui .opblock.opblock-delete{background:rgba(249,62,62,.1);border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary{border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span:after{background:#f93e3e}.swagger-ui .opblock.opblock-get{background:rgba(97,175,254,.1);border-color:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary-method{background:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary{border-color:#61affe}.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span:after{background:#61affe}.swagger-ui .opblock.opblock-patch{background:rgba(80,227,194,.1);border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary{border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span:after{background:#50e3c2}.swagger-ui .opblock.opblock-head{background:rgba(144,18,254,.1);border-color:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary-method{background:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary{border-color:#9012fe}.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span:after{background:#9012fe}.swagger-ui .opblock.opblock-options{background:rgba(13,90,167,.1);border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary-method{background:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary{border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span:after{background:#0d5aa7}.swagger-ui .opblock.opblock-deprecated{background:hsla(0,0%,92%,.1);border-color:#ebebeb;opacity:.6}.swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#ebebeb}.swagger-ui .opblock.opblock-deprecated .opblock-summary{border-color:#ebebeb}.swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span:after{background:#ebebeb}.swagger-ui .opblock .opblock-schemes{padding:8px 20px}.swagger-ui .opblock .opblock-schemes .schemes-title{padding:0 10px 0 0}.swagger-ui .filter .operation-filter-input{border:2px solid #d8dde7;margin:20px 0;padding:10px;width:100%}.swagger-ui .download-url-wrapper .failed,.swagger-ui .filter .failed{color:red}.swagger-ui .download-url-wrapper .loading,.swagger-ui .filter .loading{color:#aaa}.swagger-ui .model-example{margin-top:1em}.swagger-ui .tab{display:flex;list-style:none;padding:0}.swagger-ui .tab li{color:#3b4151;cursor:pointer;font-family:sans-serif;font-size:12px;min-width:60px;padding:0}.swagger-ui .tab li:first-of-type{padding-left:0;padding-right:12px;position:relative}.swagger-ui .tab li:first-of-type:after{background:rgba(0,0,0,.2);content:"";height:100%;position:absolute;right:6px;top:0;width:1px}.swagger-ui .tab li.active{font-weight:700}.swagger-ui .tab li button.tablinks{background:none;border:0;color:inherit;font-family:inherit;font-weight:inherit;padding:0}.swagger-ui .opblock-description-wrapper,.swagger-ui .opblock-external-docs-wrapper,.swagger-ui .opblock-title_normal{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px;padding:15px 20px}.swagger-ui .opblock-description-wrapper h4,.swagger-ui .opblock-external-docs-wrapper h4,.swagger-ui .opblock-title_normal h4{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .opblock-description-wrapper p,.swagger-ui .opblock-external-docs-wrapper p,.swagger-ui .opblock-title_normal p{color:#3b4151;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock-external-docs-wrapper h4{padding-left:0}.swagger-ui .execute-wrapper{padding:20px;text-align:right}.swagger-ui .execute-wrapper .btn{padding:8px 40px;width:100%}.swagger-ui .body-param-options{display:flex;flex-direction:column}.swagger-ui .body-param-options .body-param-edit{padding:10px 0}.swagger-ui .body-param-options label{padding:8px 0}.swagger-ui .body-param-options label select{margin:3px 0 0}.swagger-ui .responses-inner{padding:20px}.swagger-ui .responses-inner h4,.swagger-ui .responses-inner h5{color:#3b4151;font-family:sans-serif;font-size:12px;margin:10px 0 5px}.swagger-ui .responses-inner .curl{white-space:normal}.swagger-ui .response-col_status{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .response-col_status .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links{color:#3b4151;font-family:sans-serif;font-size:14px;max-width:40em;padding-left:2em}.swagger-ui .response-col_links .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links .operation-link{margin-bottom:1.5em}.swagger-ui .response-col_links .operation-link .description{margin-bottom:.5em}.swagger-ui .opblock-body .opblock-loading-animation{display:block;margin:3em auto}.swagger-ui .opblock-body pre.microlight{word-wrap:break-word;background:#333;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;hyphens:auto;margin:0;padding:10px;white-space:pre-wrap;word-break:break-all;word-break:break-word}.swagger-ui .opblock-body pre.microlight .headerline{display:block}.swagger-ui .highlight-code{position:relative}.swagger-ui .highlight-code>.microlight{max-height:400px;min-height:6em;overflow-y:auto}.swagger-ui .highlight-code>.microlight code{white-space:pre-wrap!important;word-break:break-all}.swagger-ui .curl-command{position:relative}.swagger-ui .download-contents{align-items:center;background:#7d8293;border-radius:4px;bottom:10px;color:#fff;cursor:pointer;display:flex;font-family:sans-serif;font-size:14px;font-weight:600;height:30px;justify-content:center;padding:5px;position:absolute;right:10px;text-align:center}.swagger-ui .scheme-container{background:#fff;box-shadow:0 1px 2px #00000026;margin:0 0 20px;padding:30px 0}.swagger-ui .scheme-container .schemes{align-items:flex-end;display:flex}.swagger-ui .scheme-container .schemes>label{color:#3b4151;display:flex;flex-direction:column;font-family:sans-serif;font-size:12px;font-weight:700;margin:-20px 15px 0 0}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{align-items:center;display:flex;flex-direction:column;justify-content:center;margin-top:1em;min-height:1px;padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading:after{color:#3b4151;content:"loading";font-family:sans-serif;font-size:10px;font-weight:700;left:50%;position:absolute;text-transform:uppercase;top:50%;transform:translate(-50%,-50%)}.swagger-ui .loading-container .loading:before{animation:rotation 1s linear infinite,opacity .5s;backface-visibility:hidden;border:2px solid rgba(85,85,85,.1);border-radius:100%;border-top-color:#0009;content:"";display:block;height:60px;left:50%;margin:-30px;opacity:1;position:absolute;top:50%;width:60px}@keyframes rotation{to{transform:rotate(1turn)}}.swagger-ui .response-controls{display:flex;padding-top:1em}.swagger-ui .response-control-media-type{margin-right:1em}.swagger-ui .response-control-media-type--accept-controller select{border-color:green}.swagger-ui .response-control-media-type__accept-message{color:green;font-size:.7em}.swagger-ui .response-control-examples__title,.swagger-ui .response-control-media-type__title{display:block;font-size:.7em;margin-bottom:.2em}@keyframes blinker{50%{opacity:0}}.swagger-ui .hidden{display:none}.swagger-ui .no-margin{border:none;height:auto;margin:0;padding:0}.swagger-ui .float-right{float:right}.swagger-ui .svg-assets{height:0;position:absolute;width:0}.swagger-ui section h3{color:#3b4151;font-family:sans-serif}.swagger-ui a.nostyle{display:inline}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:inherit;cursor:pointer;text-decoration:inherit}.swagger-ui .fallback{color:#aaa;padding:1em}.swagger-ui .version-pragma{height:100%;padding:5em 0}.swagger-ui .version-pragma__message{display:flex;font-size:1.2em;height:100%;justify-content:center;line-height:1.5em;padding:0 .6em;text-align:center}.swagger-ui .version-pragma__message>div{flex:1;max-width:55ch}.swagger-ui .version-pragma__message code{background-color:#dedede;padding:4px 4px 2px;white-space:pre}.swagger-ui .opblock-link{font-weight:400}.swagger-ui .opblock-link.shown{font-weight:700}.swagger-ui span.token-string{color:#555}.swagger-ui span.token-not-formatted{color:#555;font-weight:700}.swagger-ui .btn{background:transparent;border:2px solid gray;border-radius:4px;box-shadow:0 1px 2px #0000001a;color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 23px;transition:all .3s}.swagger-ui .btn.btn-sm{font-size:12px;padding:4px 23px}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{box-shadow:0 0 5px #0000004d}.swagger-ui .btn.cancel{background-color:transparent;border-color:#ff6060;color:#ff6060;font-family:sans-serif}.swagger-ui .btn.authorize{background-color:transparent;border-color:#49cc90;color:#49cc90;display:inline;line-height:1}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{background-color:#4990e2;border-color:#4990e2;color:#fff}.swagger-ui .btn-group{display:flex;padding:30px}.swagger-ui .btn-group .btn{flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{background:none;border:none;padding:0 0 0 10px}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .model-box-control,.swagger-ui .models-control,.swagger-ui .opblock-summary-control{all:inherit;border-bottom:0;cursor:pointer;flex:1;padding:0}.swagger-ui .model-box-control:focus,.swagger-ui .models-control:focus,.swagger-ui .opblock-summary-control:focus{outline:auto}.swagger-ui .expand-methods,.swagger-ui .expand-operation{background:none;border:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{height:20px;width:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#404040}.swagger-ui .expand-methods svg{fill:#707070;transition:all .3s}.swagger-ui button{cursor:pointer}.swagger-ui button.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .copy-to-clipboard{align-items:center;background:#7d8293;border:none;border-radius:4px;bottom:10px;display:flex;height:30px;justify-content:center;position:absolute;right:100px;width:30px}.swagger-ui .copy-to-clipboard button{background:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="15" aria-hidden="true"><path fill="%23fff" fill-rule="evenodd" d="M4 12h4v1H4v-1zm5-6H4v1h5V6zm2 3V7l-3 3 3 3v-2h5V9h-5zM6.5 8H4v1h2.5V8zM4 11h2.5v-1H4v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H3c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V5H3v9h10v-2zM4 4h8c0-.55-.45-1-1-1h-1c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H5c-.55 0-1 .45-1 1z"/></svg>') 50% no-repeat;border:none;flex-grow:1;flex-shrink:1;height:25px}.swagger-ui .curl-command .copy-to-clipboard{bottom:5px;height:20px;right:10px;width:20px}.swagger-ui .curl-command .copy-to-clipboard button{height:18px}.swagger-ui select{appearance:none;background:#f7f7f7 url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M13.418 7.859a.695.695 0 0 1 .978 0 .68.68 0 0 1 0 .969l-3.908 3.83a.697.697 0 0 1-.979 0l-3.908-3.83a.68.68 0 0 1 0-.969.695.695 0 0 1 .978 0L10 11l3.418-3.141z"/></svg>') right 10px center no-repeat;background-size:20px;border:2px solid #41444e;border-radius:4px;box-shadow:0 1px 2px #00000040;color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 40px 5px 10px}.swagger-ui select[multiple]{background:#f7f7f7;margin:5px 0;padding:5px}.swagger-ui select.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .opblock-body select{min-width:230px}@media (max-width:768px){.swagger-ui .opblock-body select{min-width:180px}}.swagger-ui label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 5px}@media (max-width:768px){.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{max-width:175px}}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text],.swagger-ui textarea{background:#fff;border:1px solid #d9d9d9;border-radius:4px;margin:5px 0;min-width:100px;padding:8px 10px}.swagger-ui input[type=email].invalid,.swagger-ui input[type=file].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@keyframes shake{10%,90%{transform:translate(-1px)}20%,80%{transform:translate(2px)}30%,50%,70%{transform:translate(-4px)}40%,60%{transform:translate(4px)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;transition:opacity .5s}.swagger-ui .checkbox label{display:flex}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:400!important;font-weight:600;margin:0!important}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url('data:image/svg+xml;charset=utf-8,<svg width="10" height="8" viewBox="3 7 10 8" xmlns="http://www.w3.org/2000/svg"><path fill="%2341474E" fill-rule="evenodd" d="M6.333 15 3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z"/></svg>') 50% no-repeat}.swagger-ui .dialog-ux{inset:0;position:fixed;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);inset:0;position:fixed}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;box-shadow:0 10px 30px #0003;left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{align-items:center;border-bottom:1px solid #ebebeb;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;transform:rotate(90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .model-toggle.collapsed{transform:rotate(0)}.swagger-ui .model-toggle:after{background:url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>') 50% no-repeat;background-size:100%;content:"";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;padding:.1em .5em;position:absolute;top:-1.8em;visibility:hidden;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{align-items:center;color:#606060;cursor:pointer;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input[type=text]{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required:after{color:#f009;content:"required";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{align-items:center;display:flex}.swagger-ui .topbar a{color:#fff;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:flex;flex:3;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{align-items:center;color:#f0f0f0;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;box-shadow:none;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info pre{font-size:14px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300!important;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:flex;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:flex;flex:1;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{align-items:center;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;margin:0}@keyframes scaleUp{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block}.toast-center-center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}.toast-title{font-weight:700}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;text-shadow:0 1px 0 #ffffff}.toast-close-button:hover,.toast-close-button:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.toast-close-button{padding:0;cursor:pointer;background:transparent;border:0}.toast-container{pointer-events:none;position:fixed;z-index:999999}.toast-container *{box-sizing:border-box}.toast-container .ngx-toastr{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;background-size:24px;box-shadow:0 0 12px #999;color:#fff}.toast-container .ngx-toastr:hover{box-shadow:0 0 12px #000;opacity:1;cursor:pointer}.toast-info{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTI1NiA4QzExOS4wNDMgOCA4IDExOS4wODMgOCAyNTZjMCAxMzYuOTk3IDExMS4wNDMgMjQ4IDI0OCAyNDhzMjQ4LTExMS4wMDMgMjQ4LTI0OEM1MDQgMTE5LjA4MyAzOTIuOTU3IDggMjU2IDh6bTAgMTEwYzIzLjE5NiAwIDQyIDE4LjgwNCA0MiA0MnMtMTguODA0IDQyLTQyIDQyLTQyLTE4LjgwNC00Mi00MiAxOC44MDQtNDIgNDItNDJ6bTU2IDI1NGMwIDYuNjI3LTUuMzczIDEyLTEyIDEyaC04OGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnYtMjRjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxMnYtNjRoLTEyYy02LjYyNyAwLTEyLTUuMzczLTEyLTEydi0yNGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDY0YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MTAwaDEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjR6Jy8+PC9zdmc+)}.toast-error{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTI1NiA4QzExOSA4IDggMTE5IDggMjU2czExMSAyNDggMjQ4IDI0OCAyNDgtMTExIDI0OC0yNDhTMzkzIDggMjU2IDh6bTEyMS42IDMxMy4xYzQuNyA0LjcgNC43IDEyLjMgMCAxN0wzMzggMzc3LjZjLTQuNyA0LjctMTIuMyA0LjctMTcgMEwyNTYgMzEybC02NS4xIDY1LjZjLTQuNyA0LjctMTIuMyA0LjctMTcgMEwxMzQuNCAzMzhjLTQuNy00LjctNC43LTEyLjMgMC0xN2w2NS42LTY1LTY1LjYtNjUuMWMtNC43LTQuNy00LjctMTIuMyAwLTE3bDM5LjYtMzkuNmM0LjctNC43IDEyLjMtNC43IDE3IDBsNjUgNjUuNyA2NS4xLTY1LjZjNC43LTQuNyAxMi4zLTQuNyAxNyAwbDM5LjYgMzkuNmM0LjcgNC43IDQuNyAxMi4zIDAgMTdMMzEyIDI1Nmw2NS42IDY1LjF6Jy8+PC9zdmc+)}.toast-success{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1MTIgNTEyJyB3aWR0aD0nNTEyJyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTE3My44OTggNDM5LjQwNGwtMTY2LjQtMTY2LjRjLTkuOTk3LTkuOTk3LTkuOTk3LTI2LjIwNiAwLTM2LjIwNGwzNi4yMDMtMzYuMjA0YzkuOTk3LTkuOTk4IDI2LjIwNy05Ljk5OCAzNi4yMDQgMEwxOTIgMzEyLjY5IDQzMi4wOTUgNzIuNTk2YzkuOTk3LTkuOTk3IDI2LjIwNy05Ljk5NyAzNi4yMDQgMGwzNi4yMDMgMzYuMjA0YzkuOTk3IDkuOTk3IDkuOTk3IDI2LjIwNiAwIDM2LjIwNGwtMjk0LjQgMjk0LjQwMWMtOS45OTggOS45OTctMjYuMjA3IDkuOTk3LTM2LjIwNC0uMDAxeicvPjwvc3ZnPg==)}.toast-warning{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCA1NzYgNTEyJyB3aWR0aD0nNTc2JyBoZWlnaHQ9JzUxMic+PHBhdGggZmlsbD0ncmdiKDI1NSwyNTUsMjU1KScgZD0nTTU2OS41MTcgNDQwLjAxM0M1ODcuOTc1IDQ3Mi4wMDcgNTY0LjgwNiA1MTIgNTI3Ljk0IDUxMkg0OC4wNTRjLTM2LjkzNyAwLTU5Ljk5OS00MC4wNTUtNDEuNTc3LTcxLjk4N0wyNDYuNDIzIDIzLjk4NWMxOC40NjctMzIuMDA5IDY0LjcyLTMxLjk1MSA4My4xNTQgMGwyMzkuOTQgNDE2LjAyOHpNMjg4IDM1NGMtMjUuNDA1IDAtNDYgMjAuNTk1LTQ2IDQ2czIwLjU5NSA0NiA0NiA0NiA0Ni0yMC41OTUgNDYtNDYtMjAuNTk1LTQ2LTQ2LTQ2em0tNDMuNjczLTE2NS4zNDZsNy40MTggMTM2Yy4zNDcgNi4zNjQgNS42MDkgMTEuMzQ2IDExLjk4MiAxMS4zNDZoNDguNTQ2YzYuMzczIDAgMTEuNjM1LTQuOTgyIDExLjk4Mi0xMS4zNDZsNy40MTgtMTM2Yy4zNzUtNi44NzQtNS4wOTgtMTIuNjU0LTExLjk4Mi0xMi42NTRoLTYzLjM4M2MtNi44ODQgMC0xMi4zNTYgNS43OC0xMS45ODEgMTIuNjU0eicvPjwvc3ZnPg==)}.toast-container.toast-top-center .ngx-toastr,.toast-container.toast-bottom-center .ngx-toastr{width:300px;margin-left:auto;margin-right:auto}.toast-container.toast-top-full-width .ngx-toastr,.toast-container.toast-bottom-full-width .ngx-toastr{width:96%;margin-left:auto;margin-right:auto}.ngx-toastr{background-color:#030303;pointer-events:auto}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}@media all and (max-width: 240px){.toast-container .ngx-toastr.div{padding:8px 8px 8px 50px;width:11em}.toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width: 241px) and (max-width: 480px){.toast-container .ngx-toastr.div{padding:8px 8px 8px 50px;width:18em}.toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width: 481px) and (max-width: 768px){.toast-container .ngx-toastr.div{padding:15px 15px 15px 50px;width:25em}}@charset "UTF-8";.tree-children.tree-children-no-padding{padding-left:0}.tree-children{padding-left:20px;overflow:hidden}.node-drop-slot{display:block;height:2px}.node-drop-slot.is-dragging-over{background:#ddffee;height:20px;border:2px dotted #888}.toggle-children-wrapper-expanded .toggle-children{transform:rotate(90deg)}.toggle-children-wrapper-collapsed .toggle-children{transform:rotate(0)}.toggle-children-wrapper{padding:2px 3px 5px 1px}.toggle-children{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAABAhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDY3IDc5LjE1Nzc0NywgMjAxNS8wMy8zMC0yMzo0MDo0MiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ1dWlkOjY1RTYzOTA2ODZDRjExREJBNkUyRDg4N0NFQUNCNDA3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkYzRkRFQjcxODUzNTExRTU4RTQwRkQwODFEOUZEMEE3IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkYzRkRFQjcwODUzNTExRTU4RTQwRkQwODFEOUZEMEE3IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTk5NzA1OGEtZDI3OC00NDZkLWE4ODgtNGM4MGQ4YWI1NzNmIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6YzRkZmQxMGMtY2NlNS0xMTc4LWE5OGQtY2NkZmM5ODk5YWYwIi8+IDxkYzp0aXRsZT4gPHJkZjpBbHQ+IDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+Z2x5cGhpY29uczwvcmRmOmxpPiA8L3JkZjpBbHQ+IDwvZGM6dGl0bGU+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+5iogFwAAAGhJREFUeNpiYGBgKABigf///zOQg0EARH4A4gZyDIIZ8B/JoAJKDIDhB0CcQIkBRBtEyABkgxwoMQCGD6AbRKoBGAYxQgXIBRuZGKgAKPIC3QLxArnRSHZCIjspk52ZKMrOFBUoAAEGAKnq593MQAZtAAAAAElFTkSuQmCC);height:8px;width:9px;background-size:contain;display:inline-block;position:relative;top:1px;background-repeat:no-repeat;background-position:center}.toggle-children-placeholder{display:inline-block;height:10px;width:10px;position:relative;top:1px;padding-right:3px}.node-content-wrapper{display:inline-block;padding:2px 5px;border-radius:2px;transition:background-color .15s,box-shadow .15s}.node-wrapper{display:flex;align-items:flex-start}.node-content-wrapper-active,.node-content-wrapper.node-content-wrapper-active:hover,.node-content-wrapper-active.node-content-wrapper-focused{background:#beebff}.node-content-wrapper-focused{background:#e7f4f9}.node-content-wrapper:hover{background:#f7fbff}.node-content-wrapper-active,.node-content-wrapper-focused,.node-content-wrapper:hover{box-shadow:inset 0 0 1px #999}.node-content-wrapper.is-dragging-over{background:#ddffee;box-shadow:inset 0 0 1px #999}.node-content-wrapper.is-dragging-over-disabled{opacity:.5}tree-viewport{-webkit-tap-highlight-color:transparent;height:100%;overflow:auto;display:block}.tree-children{padding-left:20px}.empty-tree-drop-slot .node-drop-slot{height:20px;min-width:100px}.angular-tree-component{width:100%;position:relative;display:inline-block;cursor:pointer;-webkit-touch-callout:none;user-select:none}tree-root .angular-tree-component-rtl{direction:rtl}tree-root .angular-tree-component-rtl .toggle-children-wrapper-collapsed .toggle-children{transform:rotate(180deg)!important}tree-root .angular-tree-component-rtl .tree-children{padding-right:20px;padding-left:0}tree-node-checkbox{padding:1px}:root{--white: #fff;--gray-100: #f8f9fa;--gray-200: #e9ecef;--gray-300: #dee2e6;--gray-400: #ced4da;--gray-500: #adb5bd;--gray-600: #6c757d;--gray-700: #495057;--gray-800: #343a40;--gray-900: #212529;--black: #000;--blue: #007bff;--indigo: #6610f2;--purple: #6f42c1;--pink: #a94442;--red: #dc3545;--orange: #fd7e14;--yellow: #d48200;--green: #008a00;--teal: #20c997;--cyan: #17a2b8;--barley-white: #fcecba;--primary: #25828e;--primary-500: #2b99a8;--secondary: #374249;--success: #008a00;--info: #25828e;--warning: #d48200;--danger: #dc3545;--light: #f8f9fa;--dark: #343a40;--green-300: #6ec664;--cyan-300: #009596;--purple-300: #a18fff;--light-blue-300: #35caed;--gold-300: #f4c145;--light-green-300: #ace12e;--accent: #25828e;--warning-dark: #fd7e14;--fg-color-over-dark-bg: #fff;--fg-hover-color-over-dark-bg: #adb5bd;--body-color-bright: #f8f9fa;--body-bg: #fff;--body-color: #212529;--body-bg-alt: #e9ecef;--health-color-error: #dc3545;--health-color-healthy: #008a00;--health-color-warning: #d48200;--health-color-warning-800: #9d6d10;--chart-color-red: #dc3545;--chart-color-blue: #06c;--chart-color-orange: #ef9234;--chart-color-yellow: #f6d173;--chart-color-green: #008a00;--chart-color-gray: #ededed;--chart-color-cyan: #2b99a8;--chart-color-light-gray: #f0f0f0;--chart-color-slight-dark-gray: #d7d7d7;--chart-color-dark-gray: #afafaf;--chart-color-purple: #3c3d99;--chart-color-white: #fff;--chart-color-center-text: #151515;--chart-color-center-text-description: #72767b;--chart-color-tooltip-background: #000;--chart-danger: #c9190b;--chart-color-strong-blue: #0078c8;--chart-color-translucent-blue: #0096dc80;--font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--card-cap-bg: #f8f9fa;--grid-gutter-width: 30px;--datatable-divider-color: rgba(0, 0, 0, .09);--nav-tabs-margin-bottom: 1rem;--tooltip-color: #fff;--tooltip-bg: #212529;--tooltip-opacity: 1;--screen-sm-min: 576px;--screen-md-min: 768px;--screen-lg-min: 992px;--screen-xl-min: 1200px;--screen-xs-max:575px;--screen-sm-max:767px;--screen-md-max:991px;--screen-lg-max:1199px;--navbar-height: 43px}/*!
- * Bootstrap v5.0.0 (https://getbootstrap.com/)
- * Copyright 2011-2021 The Bootstrap Authors
- * Copyright 2011-2021 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--bs-blue: #007bff;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #a94442;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #d48200;--bs-green: #008a00;--bs-teal: #20c997;--bs-cyan: #17a2b8;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-accent: #25828e;--bs-warning-dark: #fd7e14;--bs-primary: #25828e;--bs-secondary: #374249;--bs-success: #008a00;--bs-info: #25828e;--bs-warning: #d48200;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #343a40;--bs-font-sans-serif: "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, .15), rgba(255, 255, 255, 0))}*,*:before,*:after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-font-sans-serif);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#25828e;text-decoration:underline}a:hover{color:#1e6872}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#a94442;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled,.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer:before{content:"\2014\a0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, 15px);padding-left:var(--bs-gutter-x, 15px);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}.container-2xl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}.row,cd-about dl{--bs-gutter-x: 30px;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(var(--bs-gutter-y) * -1);margin-right:calc(var(--bs-gutter-x) / -2);margin-left:calc(var(--bs-gutter-x) / -2)}.row>*,cd-about dl>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) / 2);padding-left:calc(var(--bs-gutter-x) / 2);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.3333333333%}.col-2{flex:0 0 auto;width:16.6666666667%}.col-3{flex:0 0 auto;width:25%}.col-4,cd-about dt{flex:0 0 auto;width:33.3333333333%}.col-5{flex:0 0 auto;width:41.6666666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.3333333333%}.col-8,cd-about dd{flex:0 0 auto;width:66.6666666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.3333333333%}.col-11{flex:0 0 auto;width:91.6666666667%}.col-12,.cd-col-form,cd-health cd-info-card{flex:0 0 auto;width:100%}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.3333333333%}.col-sm-2{flex:0 0 auto;width:16.6666666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{flex:0 0 auto;width:33.3333333333%}.col-sm-5{flex:0 0 auto;width:41.6666666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.3333333333%}.col-sm-8,.cd-col-form-input,.cd-col-form-offset{flex:0 0 auto;width:66.6666666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.3333333333%}.col-sm-11{flex:0 0 auto;width:91.6666666667%}.col-sm-12,cd-health cd-info-card{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4,.cd-col-form-offset{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.3333333333%}.col-md-2{flex:0 0 auto;width:16.6666666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{flex:0 0 auto;width:33.3333333333%}.col-md-5{flex:0 0 auto;width:41.6666666667%}.col-md-6,cd-health cd-info-card{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.3333333333%}.col-md-8,.cd-col-form-input,.cd-col-form-offset{flex:0 0 auto;width:66.6666666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.3333333333%}.col-md-11{flex:0 0 auto;width:91.6666666667%}.col-md-12,cd-health cd-info-card.cd-chart-card{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.3333333333%}.col-lg-2{flex:0 0 auto;width:16.6666666667%}.col-lg-3,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label,cd-health cd-info-card.cd-capacity-card{flex:0 0 auto;width:25%}.col-lg-4,cd-modal .cd-col-form-label,cd-modal formly-form .form-label,formly-form cd-modal .form-label,cd-modal formly-form .custom-control-label,formly-form cd-modal .custom-control-label,cd-health cd-info-card{flex:0 0 auto;width:33.3333333333%}.col-lg-5{flex:0 0 auto;width:41.6666666667%}.col-lg-6,cd-health cd-info-card.cd-chart-card,cd-health cd-info-card.cd-performance-card{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.3333333333%}.col-lg-8,cd-modal .cd-col-form-input,cd-modal .cd-col-form-offset,.cd-col-form{flex:0 0 auto;width:66.6666666667%}.col-lg-9,.cd-col-form-input,.cd-col-form-offset{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.3333333333%}.col-lg-11{flex:0 0 auto;width:91.6666666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3,.cd-col-form-offset{margin-left:25%}.offset-lg-4,cd-modal .cd-col-form-offset{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl,cd-health cd-info-card.cd-performance-card,cd-health cd-info-card.cd-capacity-card{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.3333333333%}.col-xl-2{flex:0 0 auto;width:16.6666666667%}.col-xl-3,cd-health cd-info-card.cd-status-card{flex:0 0 auto;width:25%}.col-xl-4,cd-health cd-info-card.cd-chart-card{flex:0 0 auto;width:33.3333333333%}.col-xl-5{flex:0 0 auto;width:41.6666666667%}.col-xl-6,.cd-col-form{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.3333333333%}.col-xl-8{flex:0 0 auto;width:66.6666666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.3333333333%}.col-xl-11{flex:0 0 auto;width:91.6666666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1450px){.col-2xl{flex:1 0 0%}.row-cols-2xl-auto>*{flex:0 0 auto;width:auto}.row-cols-2xl-1>*{flex:0 0 auto;width:100%}.row-cols-2xl-2>*{flex:0 0 auto;width:50%}.row-cols-2xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-2xl-4>*{flex:0 0 auto;width:25%}.row-cols-2xl-5>*{flex:0 0 auto;width:20%}.row-cols-2xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-2xl-auto{flex:0 0 auto;width:auto}.col-2xl-1{flex:0 0 auto;width:8.3333333333%}.col-2xl-2{flex:0 0 auto;width:16.6666666667%}.col-2xl-3,cd-health cd-info-card.cd-chart-card{flex:0 0 auto;width:25%}.col-2xl-4{flex:0 0 auto;width:33.3333333333%}.col-2xl-5{flex:0 0 auto;width:41.6666666667%}.col-2xl-6{flex:0 0 auto;width:50%}.col-2xl-7{flex:0 0 auto;width:58.3333333333%}.col-2xl-8{flex:0 0 auto;width:66.6666666667%}.col-2xl-9{flex:0 0 auto;width:75%}.col-2xl-10{flex:0 0 auto;width:83.3333333333%}.col-2xl-11{flex:0 0 auto;width:91.6666666667%}.col-2xl-12{flex:0 0 auto;width:100%}.offset-2xl-0{margin-left:0}.offset-2xl-1{margin-left:8.3333333333%}.offset-2xl-2{margin-left:16.6666666667%}.offset-2xl-3{margin-left:25%}.offset-2xl-4{margin-left:33.3333333333%}.offset-2xl-5{margin-left:41.6666666667%}.offset-2xl-6{margin-left:50%}.offset-2xl-7{margin-left:58.3333333333%}.offset-2xl-8{margin-left:66.6666666667%}.offset-2xl-9{margin-left:75%}.offset-2xl-10{margin-left:83.3333333333%}.offset-2xl-11{margin-left:91.6666666667%}.g-2xl-0,.gx-2xl-0{--bs-gutter-x: 0}.g-2xl-0,.gy-2xl-0{--bs-gutter-y: 0}.g-2xl-1,.gx-2xl-1{--bs-gutter-x: .25rem}.g-2xl-1,.gy-2xl-1{--bs-gutter-y: .25rem}.g-2xl-2,.gx-2xl-2{--bs-gutter-x: .5rem}.g-2xl-2,.gy-2xl-2{--bs-gutter-y: .5rem}.g-2xl-3,.gx-2xl-3{--bs-gutter-x: 1rem}.g-2xl-3,.gy-2xl-3{--bs-gutter-y: 1rem}.g-2xl-4,.gx-2xl-4{--bs-gutter-x: 1.5rem}.g-2xl-4,.gy-2xl-4{--bs-gutter-y: 1.5rem}.g-2xl-5,.gx-2xl-5{--bs-gutter-x: 3rem}.g-2xl-5,.gy-2xl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-striped-color: #212529;--bs-table-striped-bg: rgba(0, 0, 0, .05);--bs-table-active-color: #212529;--bs-table-active-bg: rgba(0, 0, 0, .1);--bs-table-hover-color: #212529;--bs-table-hover-bg: rgba(0, 0, 0, .075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:last-child)>:last-child>*{border-bottom-color:currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-striped>tbody>tr:nth-of-type(odd){--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #d3e6e8;--bs-table-striped-bg: #c8dbdc;--bs-table-striped-color: #000;--bs-table-active-bg: #becfd1;--bs-table-active-color: #000;--bs-table-hover-bg: #c3d5d7;--bs-table-hover-color: #000;color:#000;border-color:#becfd1}.table-secondary{--bs-table-bg: #d7d9db;--bs-table-striped-bg: #ccced0;--bs-table-striped-color: #000;--bs-table-active-bg: #c2c3c5;--bs-table-active-color: #000;--bs-table-hover-bg: #c7c9cb;--bs-table-hover-color: #000;color:#000;border-color:#c2c3c5}.table-success{--bs-table-bg: #cce8cc;--bs-table-striped-bg: #c2dcc2;--bs-table-striped-color: #000;--bs-table-active-bg: #b8d1b8;--bs-table-active-color: #000;--bs-table-hover-bg: #bdd7bd;--bs-table-hover-color: #000;color:#000;border-color:#b8d1b8}.table-info{--bs-table-bg: #d3e6e8;--bs-table-striped-bg: #c8dbdc;--bs-table-striped-color: #000;--bs-table-active-bg: #becfd1;--bs-table-active-color: #000;--bs-table-hover-bg: #c3d5d7;--bs-table-hover-color: #000;color:#000;border-color:#becfd1}.table-warning{--bs-table-bg: #f6e6cc;--bs-table-striped-bg: #eadbc2;--bs-table-striped-color: #000;--bs-table-active-bg: #ddcfb8;--bs-table-active-color: #000;--bs-table-hover-bg: #e4d5bd;--bs-table-hover-color: #000;color:#000;border-color:#ddcfb8}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #343a40;--bs-table-striped-bg: #3e444a;--bs-table-striped-color: #fff;--bs-table-active-bg: #484e53;--bs-table-active-color: #fff;--bs-table-hover-bg: #43494e;--bs-table-hover-color: #fff;color:#fff;border-color:#484e53}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1449.98px){.table-responsive-2xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.custom-control-label{margin-bottom:.5rem}.col-form-label,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control,.cd-form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control,.cd-form-control{transition:none}}.form-control[type=file],[type=file].cd-form-control{overflow:hidden}.form-control[type=file]:not(:disabled):not(:read-only),[type=file].cd-form-control:not(:disabled):not(:read-only){cursor:pointer}.form-control:focus,.cd-form-control:focus{color:#212529;background-color:#fff;border-color:#92c1c7;outline:0;box-shadow:0 0 0 .25rem #25828e40}.form-control::-webkit-date-and-time-value,.cd-form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder,.cd-form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.cd-form-control:disabled,.form-control:read-only,.cd-form-control:read-only{background-color:#e9ecef;opacity:1}.form-control::file-selector-button,.cd-form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button,.cd-form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not(:read-only)::file-selector-button,.cd-form-control:hover:not(:disabled):not(:read-only)::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button,.cd-form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button,.cd-form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not(:read-only)::-webkit-file-upload-button,.cd-form-control:hover:not(:disabled):not(:read-only)::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control,textarea.cd-form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{max-width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not(:read-only){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.form-select:focus{border-color:#92c1c7;outline:0;box-shadow:0 0 0 .25rem #25828e40}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.form-check,.custom-radio,.custom-checkbox{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input,.custom-radio .form-check-input,.custom-checkbox .form-check-input,.custom-checkbox .custom-control-input{float:left;margin-left:-1.5em}.form-check-input,.custom-checkbox .custom-control-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox],.custom-checkbox [type=checkbox].custom-control-input{border-radius:.25em}.form-check-input[type=radio],.custom-checkbox [type=radio].custom-control-input{border-radius:50%}.form-check-input:active,.custom-checkbox .custom-control-input:active{filter:brightness(90%)}.form-check-input:focus,.custom-checkbox .custom-control-input:focus{border-color:#92c1c7;outline:0;box-shadow:0 0 0 .25rem #25828e40}.form-check-input:checked,.custom-checkbox .custom-control-input:checked{background-color:#25828e;border-color:#25828e}.form-check-input:checked[type=checkbox],.custom-checkbox .custom-control-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.custom-checkbox .custom-control-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.custom-checkbox [type=checkbox].custom-control-input:indeterminate{background-color:#25828e;border-color:#25828e;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.custom-checkbox .custom-control-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.custom-checkbox .form-check-input[disabled]~.custom-control-label,.custom-checkbox [disabled].custom-control-input~.form-check-label,.custom-checkbox [disabled].custom-control-input~.custom-control-label,.form-check-input:disabled~.form-check-label,.custom-checkbox .form-check-input:disabled~.custom-control-label,.custom-checkbox .custom-control-input:disabled~.form-check-label,.custom-checkbox .custom-control-input:disabled~.custom-control-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input,.form-switch .custom-checkbox .custom-control-input,.custom-checkbox .form-switch .custom-control-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input,.form-switch .custom-checkbox .custom-control-input,.custom-checkbox .form-switch .custom-control-input{transition:none}}.form-switch .form-check-input:focus,.form-switch .custom-checkbox .custom-control-input:focus,.custom-checkbox .form-switch .custom-control-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2392c1c7'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked,.form-switch .custom-checkbox .custom-control-input:checked,.custom-checkbox .form-switch .custom-control-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #25828e40}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem #25828e40}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#25828e;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#bedadd}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#25828e;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#bedadd}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.cd-form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);padding:1rem .75rem}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control::placeholder,.form-floating>.cd-form-control::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.cd-form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.cd-form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.cd-form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.cd-form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.cd-form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translate(.15rem)}.form-floating>.form-control:-webkit-autofill~label,.form-floating>.cd-form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translate(.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.cd-form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.cd-form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.cd-form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.cd-form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:100%;color:#008a00}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:#008a00;border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,formly-form .ng-touched.ng-valid~.valid-feedback,.is-valid~.valid-tooltip,formly-form .ng-touched.ng-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.was-validated .cd-form-control:valid,.form-control.is-valid,formly-form .form-control.ng-touched.ng-valid,.is-valid.cd-form-control,formly-form .cd-form-control.ng-touched.ng-valid{border-color:#008a00;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23008a00' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.was-validated .cd-form-control:valid:focus,.form-control.is-valid:focus,formly-form .form-control.ng-touched.ng-valid:focus,.is-valid.cd-form-control:focus,formly-form .cd-form-control.ng-touched.ng-valid:focus{border-color:#008a00;box-shadow:0 0 0 .25rem #008a0040}.was-validated textarea.form-control:valid,.was-validated textarea.cd-form-control:valid,textarea.form-control.is-valid,formly-form textarea.form-control.ng-touched.ng-valid,textarea.is-valid.cd-form-control,formly-form textarea.cd-form-control.ng-touched.ng-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid,formly-form .form-select.ng-touched.ng-valid{border-color:#008a00}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),formly-form .form-select.ng-touched.ng-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],formly-form .form-select.ng-touched.ng-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23008a00' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus,formly-form .form-select.ng-touched.ng-valid:focus{border-color:#008a00;box-shadow:0 0 0 .25rem #008a0040}.was-validated .form-check-input:valid,.was-validated .custom-checkbox .custom-control-input:valid,.custom-checkbox .was-validated .custom-control-input:valid,.form-check-input.is-valid,formly-form .form-check-input.ng-touched.ng-valid,.custom-checkbox .is-valid.custom-control-input,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid{border-color:#008a00}.was-validated .form-check-input:valid:checked,.was-validated .custom-checkbox .custom-control-input:valid:checked,.custom-checkbox .was-validated .custom-control-input:valid:checked,.form-check-input.is-valid:checked,formly-form .form-check-input.ng-touched.ng-valid:checked,.custom-checkbox .is-valid.custom-control-input:checked,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:checked,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:checked{background-color:#008a00}.was-validated .form-check-input:valid:focus,.was-validated .custom-checkbox .custom-control-input:valid:focus,.custom-checkbox .was-validated .custom-control-input:valid:focus,.form-check-input.is-valid:focus,formly-form .form-check-input.ng-touched.ng-valid:focus,.custom-checkbox .is-valid.custom-control-input:focus,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:focus,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:focus{box-shadow:0 0 0 .25rem #008a0040}.was-validated .form-check-input:valid~.form-check-label,.was-validated .custom-checkbox .form-check-input:valid~.custom-control-label,.custom-checkbox .was-validated .form-check-input:valid~.custom-control-label,.was-validated .custom-checkbox .custom-control-input:valid~.form-check-label,.was-validated .custom-checkbox .custom-control-input:valid~.custom-control-label,.custom-checkbox .was-validated .custom-control-input:valid~.form-check-label,.custom-checkbox .was-validated .custom-control-input:valid~.custom-control-label,.form-check-input.is-valid~.form-check-label,formly-form .form-check-input.ng-touched.ng-valid~.form-check-label,.custom-checkbox .form-check-input.is-valid~.custom-control-label,.custom-checkbox formly-form .form-check-input.ng-touched.ng-valid~.custom-control-label,formly-form .custom-checkbox .form-check-input.ng-touched.ng-valid~.custom-control-label,.custom-checkbox .is-valid.custom-control-input~.form-check-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.form-check-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.form-check-label,.custom-checkbox .is-valid.custom-control-input~.custom-control-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.custom-control-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.custom-control-label{color:#008a00}.form-check-inline .form-check-input~.valid-feedback,.form-check-inline .custom-checkbox .custom-control-input~.valid-feedback,.custom-checkbox .form-check-inline .custom-control-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.was-validated .input-group .cd-form-control:valid,.input-group .form-control.is-valid,.input-group formly-form .form-control.ng-touched.ng-valid,formly-form .input-group .form-control.ng-touched.ng-valid,.input-group .is-valid.cd-form-control,.input-group formly-form .cd-form-control.ng-touched.ng-valid,formly-form .input-group .cd-form-control.ng-touched.ng-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid,.input-group formly-form .form-select.ng-touched.ng-valid,formly-form .input-group .form-select.ng-touched.ng-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:100%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:#dc3545;border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,formly-form .ng-touched.ng-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,formly-form .ng-touched.ng-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.was-validated .cd-form-control:invalid,.form-control.is-invalid,formly-form .form-control.ng-touched.ng-invalid,.is-invalid.cd-form-control,formly-form .cd-form-control.ng-touched.ng-invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.was-validated .cd-form-control:invalid:focus,.form-control.is-invalid:focus,formly-form .form-control.ng-touched.ng-invalid:focus,.is-invalid.cd-form-control:focus,formly-form .cd-form-control.ng-touched.ng-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem #dc354540}.was-validated textarea.form-control:invalid,.was-validated textarea.cd-form-control:invalid,textarea.form-control.is-invalid,formly-form textarea.form-control.ng-touched.ng-invalid,textarea.is-invalid.cd-form-control,formly-form textarea.cd-form-control.ng-touched.ng-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid,formly-form .form-select.ng-touched.ng-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),formly-form .form-select.ng-touched.ng-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],formly-form .form-select.ng-touched.ng-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus,formly-form .form-select.ng-touched.ng-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem #dc354540}.was-validated .form-check-input:invalid,.was-validated .custom-checkbox .custom-control-input:invalid,.custom-checkbox .was-validated .custom-control-input:invalid,.form-check-input.is-invalid,formly-form .form-check-input.ng-touched.ng-invalid,.custom-checkbox .is-invalid.custom-control-input,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.was-validated .custom-checkbox .custom-control-input:invalid:checked,.custom-checkbox .was-validated .custom-control-input:invalid:checked,.form-check-input.is-invalid:checked,formly-form .form-check-input.ng-touched.ng-invalid:checked,.custom-checkbox .is-invalid.custom-control-input:checked,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid:checked,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.was-validated .custom-checkbox .custom-control-input:invalid:focus,.custom-checkbox .was-validated .custom-control-input:invalid:focus,.form-check-input.is-invalid:focus,formly-form .form-check-input.ng-touched.ng-invalid:focus,.custom-checkbox .is-invalid.custom-control-input:focus,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid:focus,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid:focus{box-shadow:0 0 0 .25rem #dc354540}.was-validated .form-check-input:invalid~.form-check-label,.was-validated .custom-checkbox .form-check-input:invalid~.custom-control-label,.custom-checkbox .was-validated .form-check-input:invalid~.custom-control-label,.was-validated .custom-checkbox .custom-control-input:invalid~.form-check-label,.was-validated .custom-checkbox .custom-control-input:invalid~.custom-control-label,.custom-checkbox .was-validated .custom-control-input:invalid~.form-check-label,.custom-checkbox .was-validated .custom-control-input:invalid~.custom-control-label,.form-check-input.is-invalid~.form-check-label,formly-form .form-check-input.ng-touched.ng-invalid~.form-check-label,.custom-checkbox .form-check-input.is-invalid~.custom-control-label,.custom-checkbox formly-form .form-check-input.ng-touched.ng-invalid~.custom-control-label,formly-form .custom-checkbox .form-check-input.ng-touched.ng-invalid~.custom-control-label,.custom-checkbox .is-invalid.custom-control-input~.form-check-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid~.form-check-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid~.form-check-label,.custom-checkbox .is-invalid.custom-control-input~.custom-control-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-invalid~.custom-control-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-invalid~.custom-control-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback,.form-check-inline .custom-checkbox .custom-control-input~.invalid-feedback,.custom-checkbox .form-check-inline .custom-control-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.was-validated .input-group .cd-form-control:invalid,.input-group .form-control.is-invalid,.input-group formly-form .form-control.ng-touched.ng-invalid,formly-form .input-group .form-control.ng-touched.ng-invalid,.input-group .is-invalid.cd-form-control,.input-group formly-form .cd-form-control.ng-touched.ng-invalid,formly-form .input-group .cd-form-control.ng-touched.ng-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid,.input-group formly-form .form-select.ng-touched.ng-invalid,formly-form .input-group .form-select.ng-touched.ng-invalid{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem #25828e40}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-accent,.btn-primary{color:#fff;background-color:#25828e;border-color:#25828e}.btn-accent:hover,.btn-primary:hover{color:#fff;background-color:#1f6f79;border-color:#1e6872}.btn-check:focus+.btn-accent,.btn-check:focus+.btn-primary,.btn-accent:focus,.btn-primary:focus{color:#fff;background-color:#1f6f79;border-color:#1e6872;box-shadow:0 0 0 .25rem #46959f80}.btn-check:checked+.btn-accent,.btn-check:checked+.btn-primary,.btn-check:active+.btn-accent,.btn-check:active+.btn-primary,.btn-accent:active,.btn-primary:active,.btn-accent.active,.active.btn-primary,.show>.btn-accent.dropdown-toggle,.show>.dropdown-toggle.btn-primary{color:#fff;background-color:#1e6872;border-color:#1c626b}.btn-check:checked+.btn-accent:focus,.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-accent:focus,.btn-check:active+.btn-primary:focus,.btn-accent:active:focus,.btn-primary:active:focus,.btn-accent.active:focus,.active.btn-primary:focus,.show>.btn-accent.dropdown-toggle:focus,.show>.dropdown-toggle.btn-primary:focus{box-shadow:0 0 0 .25rem #46959f80}.btn-accent:disabled,.btn-primary:disabled,.btn-accent.disabled,.disabled.btn-primary{color:#fff;background-color:#25828e;border-color:#25828e}.btn-warning-dark{color:#000;background-color:#fd7e14;border-color:#fd7e14}.btn-warning-dark:hover{color:#000;background-color:#fd9137;border-color:#fd8b2c}.btn-check:focus+.btn-warning-dark,.btn-warning-dark:focus{color:#000;background-color:#fd9137;border-color:#fd8b2c;box-shadow:0 0 0 .25rem #d76b1180}.btn-check:checked+.btn-warning-dark,.btn-check:active+.btn-warning-dark,.btn-warning-dark:active,.btn-warning-dark.active,.show>.btn-warning-dark.dropdown-toggle{color:#000;background-color:#fd9843;border-color:#fd8b2c}.btn-check:checked+.btn-warning-dark:focus,.btn-check:active+.btn-warning-dark:focus,.btn-warning-dark:active:focus,.btn-warning-dark.active:focus,.show>.btn-warning-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem #d76b1180}.btn-warning-dark:disabled,.btn-warning-dark.disabled{color:#000;background-color:#fd7e14;border-color:#fd7e14}.btn-primary{color:#fff;background-color:#25828e;border-color:#25828e}.btn-primary:hover{color:#fff;background-color:#1f6f79;border-color:#1e6872}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#1f6f79;border-color:#1e6872;box-shadow:0 0 0 .25rem #46959f80}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#1e6872;border-color:#1c626b}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem #46959f80}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#25828e;border-color:#25828e}.btn-secondary{color:#fff;background-color:#374249;border-color:#374249}.btn-secondary:hover{color:#fff;background-color:#2f383e;border-color:#2c353a}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#2f383e;border-color:#2c353a;box-shadow:0 0 0 .25rem #555e6480}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#2c353a;border-color:#293237}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem #555e6480}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#374249;border-color:#374249}.btn-success{color:#fff;background-color:#008a00;border-color:#008a00}.btn-success:hover{color:#fff;background-color:#007500;border-color:#006e00}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#007500;border-color:#006e00;box-shadow:0 0 0 .25rem #269c2680}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#006e00;border-color:#006800}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem #269c2680}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#008a00;border-color:#008a00}.btn-info{color:#fff;background-color:#25828e;border-color:#25828e}.btn-info:hover{color:#fff;background-color:#1f6f79;border-color:#1e6872}.btn-check:focus+.btn-info,.btn-info:focus{color:#fff;background-color:#1f6f79;border-color:#1e6872;box-shadow:0 0 0 .25rem #46959f80}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#1e6872;border-color:#1c626b}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem #46959f80}.btn-info:disabled,.btn-info.disabled{color:#fff;background-color:#25828e;border-color:#25828e}.btn-warning{color:#000;background-color:#d48200;border-color:#d48200}.btn-warning:hover{color:#000;background-color:#da9526;border-color:#d88f1a}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#da9526;border-color:#d88f1a;box-shadow:0 0 0 .25rem #b46f0080}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#dd9b33;border-color:#d88f1a}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem #b46f0080}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#d48200;border-color:#d48200}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem #e1536180}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem #e1536180}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light,.btn-default{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover,.btn-default:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-check:focus+.btn-default,.btn-light:focus,.btn-default:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem #d3d4d580}.btn-check:checked+.btn-light,.btn-check:checked+.btn-default,.btn-check:active+.btn-light,.btn-check:active+.btn-default,.btn-light:active,.btn-default:active,.btn-light.active,.active.btn-default,.show>.btn-light.dropdown-toggle,.show>.dropdown-toggle.btn-default{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:checked+.btn-default:focus,.btn-check:active+.btn-light:focus,.btn-check:active+.btn-default:focus,.btn-light:active:focus,.btn-default:active:focus,.btn-light.active:focus,.active.btn-default:focus,.show>.btn-light.dropdown-toggle:focus,.show>.dropdown-toggle.btn-default:focus{box-shadow:0 0 0 .25rem #d3d4d580}.btn-light:disabled,.btn-default:disabled,.btn-light.disabled,.disabled.btn-default{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#2c3136;border-color:#2a2e33}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#2c3136;border-color:#2a2e33;box-shadow:0 0 0 .25rem #52585d80}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#2a2e33;border-color:#272c30}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem #52585d80}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-accent{color:#25828e;border-color:#25828e}.btn-outline-accent:hover{color:#fff;background-color:#25828e;border-color:#25828e}.btn-check:focus+.btn-outline-accent,.btn-outline-accent:focus{box-shadow:0 0 0 .25rem #25828e80}.btn-check:checked+.btn-outline-accent,.btn-check:active+.btn-outline-accent,.btn-outline-accent:active,.btn-outline-accent.active,.btn-outline-accent.dropdown-toggle.show{color:#fff;background-color:#25828e;border-color:#25828e}.btn-check:checked+.btn-outline-accent:focus,.btn-check:active+.btn-outline-accent:focus,.btn-outline-accent:active:focus,.btn-outline-accent.active:focus,.btn-outline-accent.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #25828e80}.btn-outline-accent:disabled,.btn-outline-accent.disabled{color:#25828e;background-color:transparent}.btn-outline-warning-dark{color:#fd7e14;border-color:#fd7e14}.btn-outline-warning-dark:hover{color:#000;background-color:#fd7e14;border-color:#fd7e14}.btn-check:focus+.btn-outline-warning-dark,.btn-outline-warning-dark:focus{box-shadow:0 0 0 .25rem #fd7e1480}.btn-check:checked+.btn-outline-warning-dark,.btn-check:active+.btn-outline-warning-dark,.btn-outline-warning-dark:active,.btn-outline-warning-dark.active,.btn-outline-warning-dark.dropdown-toggle.show{color:#000;background-color:#fd7e14;border-color:#fd7e14}.btn-check:checked+.btn-outline-warning-dark:focus,.btn-check:active+.btn-outline-warning-dark:focus,.btn-outline-warning-dark:active:focus,.btn-outline-warning-dark.active:focus,.btn-outline-warning-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #fd7e1480}.btn-outline-warning-dark:disabled,.btn-outline-warning-dark.disabled{color:#fd7e14;background-color:transparent}.btn-outline-primary{color:#25828e;border-color:#25828e}.btn-outline-primary:hover{color:#fff;background-color:#25828e;border-color:#25828e}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem #25828e80}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#25828e;border-color:#25828e}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #25828e80}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#25828e;background-color:transparent}.btn-outline-secondary{color:#374249;border-color:#374249}.btn-outline-secondary:hover{color:#fff;background-color:#374249;border-color:#374249}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem #37424980}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#374249;border-color:#374249}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #37424980}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#374249;background-color:transparent}.btn-outline-success{color:#008a00;border-color:#008a00}.btn-outline-success:hover{color:#fff;background-color:#008a00;border-color:#008a00}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem #008a0080}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#008a00;border-color:#008a00}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #008a0080}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#008a00;background-color:transparent}.btn-outline-info{color:#25828e;border-color:#25828e}.btn-outline-info:hover{color:#fff;background-color:#25828e;border-color:#25828e}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem #25828e80}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#fff;background-color:#25828e;border-color:#25828e}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #25828e80}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#25828e;background-color:transparent}.btn-outline-warning{color:#d48200;border-color:#d48200}.btn-outline-warning:hover{color:#000;background-color:#d48200;border-color:#d48200}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem #d4820080}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#d48200;border-color:#d48200}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #d4820080}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#d48200;background-color:transparent}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem #dc354580}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #dc354580}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:transparent}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem #f8f9fa80}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #f8f9fa80}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:transparent}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem #343a4080}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#343a40;border-color:#343a40}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem #343a4080}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#343a40;background-color:transparent}.btn-link{font-weight:400;color:#25828e;text-decoration:underline}.btn-link:hover{color:#1e6872}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1450px){.dropdown-menu-2xl-start{--bs-position: start}.dropdown-menu-2xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-2xl-end{--bs-position: end}.dropdown-menu-2xl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty:after{margin-left:0}.dropend .dropdown-toggle:after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle:after{display:none}.dropstart .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty:after{margin-left:0}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#25828e}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:#00000026}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:#ffffff26}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#25828e}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:#00000026}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#25828e;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:#1e6872}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#25828e}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (min-width: 1450px){.navbar-expand-2xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-2xl .navbar-nav{flex-direction:row}.navbar-expand-2xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-2xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-2xl .navbar-nav-scroll{overflow:visible}.navbar-expand-2xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-2xl .navbar-toggler{display:none}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:#000000e6}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#000000e6}.navbar-light .navbar-nav .nav-link{color:#0000008c}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#000000b3}.navbar-light .navbar-nav .nav-link.disabled{color:#0000004d}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:#000000e6}.navbar-light .navbar-toggler{color:#0000008c;border-color:#0000001a}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#0000008c}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#000000e6}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:#ffffff8c}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:#ffffffbf}.navbar-dark .navbar-nav .nav-link.disabled{color:#ffffff40}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:#ffffff8c;border-color:#ffffff1a}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:#ffffff8c}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:#f8f9fa;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:#f8f9fa;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.5rem;margin-bottom:-.5rem;margin-left:-.5rem;border-bottom:0}.card-header-pills{margin-right:-.5rem;margin-left:-.5rem}.card-img-overlay{position:absolute;inset:0;padding:1rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#217580;background-color:#e9f3f4;box-shadow:inset 0 -1px #00000020}.accordion-button:not(.collapsed):after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23217580'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button:after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media (prefers-reduced-motion: reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#92c1c7;outline:0;box-shadow:0 0 0 .25rem #25828e40}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:#6c757d}.pagination,cd-table .cd-datatable .datatable-footer .datatable-pager ul{display:flex;padding-left:0;list-style:none}.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a{position:relative;display:block;color:#25828e;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a{transition:none}}.page-link:hover,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a:hover{z-index:2;color:#1e6872;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a:focus{z-index:3;color:#1e6872;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem #25828e40}.page-item:not(:first-child) .page-link,.page-item:not(:first-child) cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:not(:first-child) a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:not(:first-child) .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:not(:first-child) a{margin-left:-1px}.page-item.active .page-link,.page-item.active cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item.active a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.active .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.active a{z-index:3;color:#fff;background-color:#25828e;border-color:#25828e}.page-item.disabled .page-link,.page-item.disabled cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item.disabled a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.disabled .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li.disabled a{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li a{padding:.375rem .75rem}.page-item:first-child .page-link,.page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link,.page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .page-item:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg a{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link,.pagination-lg .page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg .page-item:first-child a,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:first-child a{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link,.pagination-lg .page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-lg .page-item:last-child a,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,.pagination-lg cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-lg li:last-child a{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm a{padding:.25rem .5rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link,.pagination-sm .page-item:first-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm .page-item:first-child a,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:first-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:first-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:first-child a{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link,.pagination-sm .page-item:last-child cd-table .cd-datatable .datatable-footer .datatable-pager ul li a,cd-table .cd-datatable .datatable-footer .datatable-pager ul li .pagination-sm .page-item:last-child a,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child .page-link,.pagination-sm cd-table .cd-datatable .datatable-footer .datatable-pager ul li:last-child a,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:last-child .page-link,cd-table .cd-datatable .datatable-footer .datatable-pager ul .pagination-sm li:last-child a{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge,.badge-dark,.badge-light,.badge-warning,.badge-info,.badge-danger,.badge-success,.badge-secondary,.badge-primary{display:inline-block;padding:.35em .65em;font-size:1rem;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty,.badge-dark:empty,.badge-light:empty,.badge-warning:empty,.badge-info:empty,.badge-danger:empty,.badge-success:empty,.badge-secondary:empty,.badge-primary:empty{display:none}.btn .badge,.btn .badge-dark,.btn .badge-light,.btn .badge-warning,.btn .badge-info,.btn .badge-danger,.btn .badge-success,.btn .badge-secondary,.btn .badge-primary{position:relative;top:-1px}.alert{position:relative;padding:1rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-accent{color:#164e55;background-color:#d3e6e8;border-color:#bedadd}.alert-accent .alert-link{color:#123e44}.alert-warning-dark{color:#984c0c;background-color:#ffe5d0;border-color:#fed8b9}.alert-warning-dark .alert-link{color:#7a3d0a}.alert-primary{color:#164e55;background-color:#d3e6e8;border-color:#bedadd}.alert-primary .alert-link{color:#123e44}.alert-secondary{color:#21282c;background-color:#d7d9db;border-color:#c3c6c8}.alert-secondary .alert-link{color:#1a2023}.alert-success{color:#005300;background-color:#cce8cc;border-color:#b3dcb3}.alert-success .alert-link{color:#004200}.alert-info{color:#164e55;background-color:#d3e6e8;border-color:#bedadd}.alert-info .alert-link{color:#123e44}.alert-warning{color:#7f4e00;background-color:#f6e6cc;border-color:#f2dab3}.alert-warning .alert-link{color:#663e00}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#1f2326;background-color:#d6d8d9;border-color:#c2c4c6}.alert-dark .alert-link{color:#191c1e}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#25828e;transition:width .6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#25828e;border-color:#25828e}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1450px){.list-group-horizontal-2xl{flex-direction:row}.list-group-horizontal-2xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-2xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-2xl>.list-group-item.active{margin-top:0}.list-group-horizontal-2xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-2xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-accent{color:#164e55;background-color:#d3e6e8}.list-group-item-accent.list-group-item-action:hover,.list-group-item-accent.list-group-item-action:focus{color:#164e55;background-color:#becfd1}.list-group-item-accent.list-group-item-action.active{color:#fff;background-color:#164e55;border-color:#164e55}.list-group-item-warning-dark{color:#984c0c;background-color:#ffe5d0}.list-group-item-warning-dark.list-group-item-action:hover,.list-group-item-warning-dark.list-group-item-action:focus{color:#984c0c;background-color:#e6cebb}.list-group-item-warning-dark.list-group-item-action.active{color:#fff;background-color:#984c0c;border-color:#984c0c}.list-group-item-primary{color:#164e55;background-color:#d3e6e8}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#164e55;background-color:#becfd1}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#164e55;border-color:#164e55}.list-group-item-secondary{color:#21282c;background-color:#d7d9db}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#21282c;background-color:#c2c3c5}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#21282c;border-color:#21282c}.list-group-item-success{color:#005300;background-color:#cce8cc}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#005300;background-color:#b8d1b8}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#005300;border-color:#005300}.list-group-item-info{color:#164e55;background-color:#d3e6e8}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#164e55;background-color:#becfd1}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#164e55;border-color:#164e55}.list-group-item-warning{color:#7f4e00;background-color:#f6e6cc}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#7f4e00;background-color:#ddcfb8}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7f4e00;border-color:#7f4e00}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#1f2326;background-color:#d6d8d9}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#1f2326;background-color:#c1c2c3}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1f2326;border-color:#1f2326}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem #25828e40;opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{width:350px;max-width:100%;font-size:.875rem;pointer-events:auto;background-color:#ffffffd9;background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .5rem 1rem #00000026;border-radius:.25rem}.toast:not(.showing):not(.show){opacity:0}.toast.hide{display:none}.toast-container{width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:15px}.toast-header{display:flex;align-items:center;padding:.5rem .75rem;color:#6c757d;background-color:#ffffffd9;background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-header .btn-close{margin-right:-.375rem;margin-left:.75rem}.toast-body{padding:.75rem;word-wrap:break-word}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1060;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .btn-close{padding:.5rem;margin:-.5rem -.5rem -.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media (max-width: 1449.98px){.modal-fullscreen-2xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-2xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-2xl-down .modal-header{border-radius:0}.modal-fullscreen-2xl-down .modal-body{overflow-y:auto}.modal-fullscreen-2xl-down .modal-footer{border-radius:0}}.tooltip{position:absolute;z-index:1080;display:block;margin:0;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:1}.tooltip .tooltip-arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .tooltip-arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[data-popper-placement^=top]{padding:.4rem 0}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:0}.bs-tooltip-top .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before{top:-1px;border-width:.4rem .4rem 0;border-top-color:#212529}.bs-tooltip-end,.bs-tooltip-auto[data-popper-placement^=right]{padding:0 .4rem}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-end .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before{right:-1px;border-width:.4rem .4rem .4rem 0;border-right-color:#212529}.bs-tooltip-bottom,.bs-tooltip-auto[data-popper-placement^=bottom]{padding:.4rem 0}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:0}.bs-tooltip-bottom .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before{bottom:-1px;border-width:0 .4rem .4rem;border-bottom-color:#212529}.bs-tooltip-start,.bs-tooltip-auto[data-popper-placement^=left]{padding:0 .4rem}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-start .tooltip-arrow:before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before{left:-1px;border-width:.4rem 0 .4rem .4rem;border-left-color:#212529}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#212529;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1070;display:block;max-width:350px;font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:1rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .popover-arrow{position:absolute;display:block;width:1rem;height:.5rem}.popover .popover-arrow:before,.popover .popover-arrow:after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-.5rem - 1px)}.bs-popover-top>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:#00000040}.bs-popover-top>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-end>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:#00000040}.bs-popover-end>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-.5rem - 1px)}.bs-popover-bottom>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:#00000040}.bs-popover-bottom>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-bottom .popover-header:before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f0f0f0}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem}.bs-popover-start>.popover-arrow:before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:#00000040}.bs-popover-start>.popover-arrow:after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem 1rem;margin-bottom:0;font-size:1rem;background-color:#f0f0f0;border-bottom:1px solid #d8d8d8;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:1rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translate(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translate(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-.125em;background-color:currentColor;border-radius:50%;opacity:0;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.offcanvas{position:fixed;bottom:0;z-index:1050;display:flex;flex-direction:column;max-width:100%;visibility:hidden;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:1rem}.offcanvas-header .btn-close{padding:.5rem;margin:-.5rem -.5rem -.5rem auto}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:1rem;overflow-y:auto}.offcanvas-start{top:0;left:0;width:400px;border-right:1px solid rgba(0,0,0,.2);transform:translate(-100%)}.offcanvas-end{top:0;right:0;width:400px;border-left:1px solid rgba(0,0,0,.2);transform:translate(100%)}.offcanvas-top{top:0;right:0;left:0;height:30vh;max-height:100%;border-bottom:1px solid rgba(0,0,0,.2);transform:translateY(-100%)}.offcanvas-bottom{right:0;left:0;height:30vh;max-height:100%;border-top:1px solid rgba(0,0,0,.2);transform:translateY(100%)}.offcanvas.show{transform:none}.clearfix:after{display:block;clear:both;content:""}.link-accent{color:#25828e}.link-accent:hover,.link-accent:focus{color:#1e6872}.link-warning-dark{color:#fd7e14}.link-warning-dark:hover,.link-warning-dark:focus{color:#fd9843}.link-primary{color:#25828e}.link-primary:hover,.link-primary:focus{color:#1e6872}.link-secondary{color:#374249}.link-secondary:hover,.link-secondary:focus{color:#2c353a}.link-success{color:#008a00}.link-success:hover,.link-success:focus{color:#006e00}.link-info{color:#25828e}.link-info:hover,.link-info:focus{color:#1e6872}.link-warning{color:#d48200}.link-warning:hover,.link-warning:focus{color:#dd9b33}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#343a40}.link-dark:hover,.link-dark:focus{color:#2a2e33}.ratio{position:relative;width:100%}.ratio:before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}}@media (min-width: 1450px){.sticky-2xl-top{position:sticky;top:0;z-index:1020}}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link:after{position:absolute;inset:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex,cd-health cd-info-card{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem #00000026!important}.shadow-sm{box-shadow:0 .125rem .25rem #00000013!important}.shadow-lg{box-shadow:0 1rem 3rem #0000002d!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translate(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:1px solid #dee2e6!important}.border-0{border:0!important}.border-top{border-top:1px solid #dee2e6!important}.border-top-0{border-top:0!important}.border-end{border-right:1px solid #dee2e6!important}.border-end-0{border-right:0!important}.border-bottom,.cd-header,legend{border-bottom:1px solid #dee2e6!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:1px solid #dee2e6!important}.border-start-0{border-left:0!important}.border-accent{border-color:#25828e!important}.border-warning-dark{border-color:#fd7e14!important}.border-primary{border-color:#25828e!important}.border-secondary{border-color:#374249!important}.border-success{border-color:#008a00!important}.border-info{border-color:#25828e!important}.border-warning{border-color:#d48200!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.border-1{border-width:1px!important}.border-2{border-width:2px!important}.border-3{border-width:3px!important}.border-4{border-width:4px!important}.border-5{border-width:5px!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column,cd-health cd-info-card{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4,.cd-header,legend{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2,cd-logs label,.btn-toolbar cd-table-actions.btn-group{margin-right:.5rem!important}.me-3,cd-logs .form-inline>.form-group{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1,.badge,.badge-dark,.badge-light,.badge-warning,.badge-info,.badge-danger,.badge-success,.badge-secondary,.badge-primary{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3,.form-group,cd-logs .form-inline>.form-group{margin-bottom:1rem!important}.mb-4,.cd-header,legend,cd-health cd-info-card{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2,cd-table .cd-datatable .datatable-footer{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2,cd-info-card .card .card-body .card-text{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1,.cd-header,legend{padding-bottom:.25rem!important}.pb-2,cd-info-card .card{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2,cd-info-card .card .card-body .card-title{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold,cd-about dt{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-accent{color:#25828e!important}.text-warning-dark{color:#fd7e14!important}.text-primary{color:#25828e!important}.text-secondary{color:#374249!important}.text-success{color:#008a00!important}.text-info{color:#25828e!important}.text-warning{color:#d48200!important}.text-danger{color:#dc3545!important}.text-light{color:#f8f9fa!important}.text-dark,.badge-light,.badge-warning{color:#343a40!important}.text-white{color:#fff!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:#00000080!important}.text-white-50{color:#ffffff80!important}.text-reset{color:inherit!important}.bg-accent{background-color:#25828e!important}.bg-warning-dark{background-color:#fd7e14!important}.bg-primary,.badge-info,.badge-primary{background-color:#25828e!important}.bg-secondary,.badge-secondary{background-color:#374249!important}.bg-success,.badge-success{background-color:#008a00!important}.bg-info{background-color:#25828e!important}.bg-warning,.badge-warning{background-color:#d48200!important}.bg-danger,.badge-danger{background-color:#dc3545!important}.bg-light,.badge-light{background-color:#f8f9fa!important}.bg-dark,.badge-dark{background-color:#343a40!important}.bg-body,.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:.25rem!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:.2rem!important}.rounded-2{border-radius:.25rem!important}.rounded-3{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill,.badge,.badge-dark,.badge-light,.badge-warning,.badge-info,.badge-danger,.badge-success,.badge-secondary,.badge-primary{border-radius:50rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-end{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-start{border-bottom-left-radius:.25rem!important;border-top-left-radius:.25rem!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width: 576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width: 768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width: 992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width: 1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width: 1450px){.float-2xl-start{float:left!important}.float-2xl-end{float:right!important}.float-2xl-none{float:none!important}.d-2xl-inline{display:inline!important}.d-2xl-inline-block{display:inline-block!important}.d-2xl-block{display:block!important}.d-2xl-grid{display:grid!important}.d-2xl-table{display:table!important}.d-2xl-table-row{display:table-row!important}.d-2xl-table-cell{display:table-cell!important}.d-2xl-flex{display:flex!important}.d-2xl-inline-flex{display:inline-flex!important}.d-2xl-none{display:none!important}.flex-2xl-fill{flex:1 1 auto!important}.flex-2xl-row{flex-direction:row!important}.flex-2xl-column{flex-direction:column!important}.flex-2xl-row-reverse{flex-direction:row-reverse!important}.flex-2xl-column-reverse{flex-direction:column-reverse!important}.flex-2xl-grow-0{flex-grow:0!important}.flex-2xl-grow-1{flex-grow:1!important}.flex-2xl-shrink-0{flex-shrink:0!important}.flex-2xl-shrink-1{flex-shrink:1!important}.flex-2xl-wrap{flex-wrap:wrap!important}.flex-2xl-nowrap{flex-wrap:nowrap!important}.flex-2xl-wrap-reverse{flex-wrap:wrap-reverse!important}.gap-2xl-0{gap:0!important}.gap-2xl-1{gap:.25rem!important}.gap-2xl-2{gap:.5rem!important}.gap-2xl-3{gap:1rem!important}.gap-2xl-4{gap:1.5rem!important}.gap-2xl-5{gap:3rem!important}.justify-content-2xl-start{justify-content:flex-start!important}.justify-content-2xl-end{justify-content:flex-end!important}.justify-content-2xl-center{justify-content:center!important}.justify-content-2xl-between{justify-content:space-between!important}.justify-content-2xl-around{justify-content:space-around!important}.justify-content-2xl-evenly{justify-content:space-evenly!important}.align-items-2xl-start{align-items:flex-start!important}.align-items-2xl-end{align-items:flex-end!important}.align-items-2xl-center{align-items:center!important}.align-items-2xl-baseline{align-items:baseline!important}.align-items-2xl-stretch{align-items:stretch!important}.align-content-2xl-start{align-content:flex-start!important}.align-content-2xl-end{align-content:flex-end!important}.align-content-2xl-center{align-content:center!important}.align-content-2xl-between{align-content:space-between!important}.align-content-2xl-around{align-content:space-around!important}.align-content-2xl-stretch{align-content:stretch!important}.align-self-2xl-auto{align-self:auto!important}.align-self-2xl-start{align-self:flex-start!important}.align-self-2xl-end{align-self:flex-end!important}.align-self-2xl-center{align-self:center!important}.align-self-2xl-baseline{align-self:baseline!important}.align-self-2xl-stretch{align-self:stretch!important}.order-2xl-first{order:-1!important}.order-2xl-0{order:0!important}.order-2xl-1{order:1!important}.order-2xl-2{order:2!important}.order-2xl-3{order:3!important}.order-2xl-4{order:4!important}.order-2xl-5{order:5!important}.order-2xl-last{order:6!important}.m-2xl-0{margin:0!important}.m-2xl-1{margin:.25rem!important}.m-2xl-2{margin:.5rem!important}.m-2xl-3{margin:1rem!important}.m-2xl-4{margin:1.5rem!important}.m-2xl-5{margin:3rem!important}.m-2xl-auto{margin:auto!important}.mx-2xl-0{margin-right:0!important;margin-left:0!important}.mx-2xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-2xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-2xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-2xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-2xl-auto{margin-right:auto!important;margin-left:auto!important}.my-2xl-0{margin-top:0!important;margin-bottom:0!important}.my-2xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-2xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-2xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-2xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-2xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-2xl-0{margin-top:0!important}.mt-2xl-1{margin-top:.25rem!important}.mt-2xl-2{margin-top:.5rem!important}.mt-2xl-3{margin-top:1rem!important}.mt-2xl-4{margin-top:1.5rem!important}.mt-2xl-5{margin-top:3rem!important}.mt-2xl-auto{margin-top:auto!important}.me-2xl-0{margin-right:0!important}.me-2xl-1{margin-right:.25rem!important}.me-2xl-2{margin-right:.5rem!important}.me-2xl-3{margin-right:1rem!important}.me-2xl-4{margin-right:1.5rem!important}.me-2xl-5{margin-right:3rem!important}.me-2xl-auto{margin-right:auto!important}.mb-2xl-0{margin-bottom:0!important}.mb-2xl-1{margin-bottom:.25rem!important}.mb-2xl-2{margin-bottom:.5rem!important}.mb-2xl-3{margin-bottom:1rem!important}.mb-2xl-4{margin-bottom:1.5rem!important}.mb-2xl-5{margin-bottom:3rem!important}.mb-2xl-auto{margin-bottom:auto!important}.ms-2xl-0{margin-left:0!important}.ms-2xl-1{margin-left:.25rem!important}.ms-2xl-2{margin-left:.5rem!important}.ms-2xl-3{margin-left:1rem!important}.ms-2xl-4{margin-left:1.5rem!important}.ms-2xl-5{margin-left:3rem!important}.ms-2xl-auto{margin-left:auto!important}.p-2xl-0{padding:0!important}.p-2xl-1{padding:.25rem!important}.p-2xl-2{padding:.5rem!important}.p-2xl-3{padding:1rem!important}.p-2xl-4{padding:1.5rem!important}.p-2xl-5{padding:3rem!important}.px-2xl-0{padding-right:0!important;padding-left:0!important}.px-2xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-2xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-2xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-2xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-2xl-0{padding-top:0!important;padding-bottom:0!important}.py-2xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-2xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-2xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-2xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-2xl-0{padding-top:0!important}.pt-2xl-1{padding-top:.25rem!important}.pt-2xl-2{padding-top:.5rem!important}.pt-2xl-3{padding-top:1rem!important}.pt-2xl-4{padding-top:1.5rem!important}.pt-2xl-5{padding-top:3rem!important}.pe-2xl-0{padding-right:0!important}.pe-2xl-1{padding-right:.25rem!important}.pe-2xl-2{padding-right:.5rem!important}.pe-2xl-3{padding-right:1rem!important}.pe-2xl-4{padding-right:1.5rem!important}.pe-2xl-5{padding-right:3rem!important}.pb-2xl-0{padding-bottom:0!important}.pb-2xl-1{padding-bottom:.25rem!important}.pb-2xl-2{padding-bottom:.5rem!important}.pb-2xl-3{padding-bottom:1rem!important}.pb-2xl-4{padding-bottom:1.5rem!important}.pb-2xl-5{padding-bottom:3rem!important}.ps-2xl-0{padding-left:0!important}.ps-2xl-1{padding-left:.25rem!important}.ps-2xl-2{padding-left:.5rem!important}.ps-2xl-3{padding-left:1rem!important}.ps-2xl-4{padding-left:1.5rem!important}.ps-2xl-5{padding-left:3rem!important}.text-2xl-start{text-align:left!important}.text-2xl-end{text-align:right!important}.text-2xl-center{text-align:center!important}}@media (min-width: 1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}/*!
-Fork Awesome 1.1.7
-License - https://forkaweso.me/Fork-Awesome/license
-
-Copyright 2018 Dave Gandy & Fork Awesome
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */@font-face{font-family:ForkAwesome;src:url(forkawesome-webfont.c0fee260bb6fd5fd.eot?v=1.1.7);src:url(forkawesome-webfont.c0fee260bb6fd5fd.eot?#iefix&v=1.1.7) format("embedded-opentype"),url(forkawesome-webfont.d0a4ad9e6369d510.woff2?v=1.1.7) format("woff2"),url(forkawesome-webfont.23671bdbd055fa7b.woff?v=1.1.7) format("woff"),url(forkawesome-webfont.3b3951dce6cf5d60.ttf?v=1.1.7) format("truetype"),url(forkawesome-webfont.3217b1b06e001045.svg?v=1.1.7#forkawesomeregular) format("svg");font-weight:400;font-style:normal}.fa{display:inline-block;font: 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw,.fa{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";transform:scaleY(-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-sync:before,.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video:before,.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell-o:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-globe-e:before{content:"\f304"}.fa-globe-w:before{content:"\f305"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-community:before,.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus-g:before,.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-utensils:before,.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-pound:before,.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-down:before,.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-up:before,.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-down:before,.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-up:before,.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-down:before,.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-up:before,.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-utensil-spoon:before,.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-heading:before,.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-closed-captioning:before,.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-gem:before,.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-medium-square:before{content:"\f2f8"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo-v:before,.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.fa-mastodon:before{content:"\f2e1"}.fa-mastodon-alt:before{content:"\f2e2"}.fa-fork-circle:before,.fa-fork-awesome:before{content:"\f2e3"}.fa-peertube:before{content:"\f2e4"}.fa-diaspora:before{content:"\f2e5"}.fa-friendica:before{content:"\f2e6"}.fa-gnu-social:before{content:"\f2e7"}.fa-liberapay-square:before{content:"\f2e8"}.fa-liberapay:before{content:"\f2e9"}.fa-ssb:before,.fa-scuttlebutt:before{content:"\f2ea"}.fa-hubzilla:before{content:"\f2eb"}.fa-social-home:before{content:"\f2ec"}.fa-artstation:before{content:"\f2ed"}.fa-discord:before{content:"\f2ee"}.fa-discord-alt:before{content:"\f2ef"}.fa-patreon:before{content:"\f2f0"}.fa-snowdrift:before{content:"\f2f1"}.fa-activitypub:before{content:"\f2f2"}.fa-ethereum:before{content:"\f2f3"}.fa-keybase:before{content:"\f2f4"}.fa-shaarli:before{content:"\f2f5"}.fa-shaarli-o:before{content:"\f2f6"}.fa-cut-key:before,.fa-key-modern:before{content:"\f2f7"}.fa-xmpp:before{content:"\f2f9"}.fa-archive-org:before{content:"\f2fc"}.fa-freedombox:before{content:"\f2fd"}.fa-facebook-messenger:before{content:"\f2fe"}.fa-debian:before{content:"\f2ff"}.fa-mastodon-square:before{content:"\f300"}.fa-tipeee:before{content:"\f301"}.fa-react:before{content:"\f302"}.fa-dogmazic:before{content:"\f303"}.fa-zotero:before{content:"\f309"}.fa-nodejs:before{content:"\f308"}.fa-nextcloud:before{content:"\f306"}.fa-nextcloud-square:before{content:"\f307"}.fa-hackaday:before{content:"\f30a"}.fa-laravel:before{content:"\f30b"}.fa-signalapp:before{content:"\f30c"}.fa-gnupg:before{content:"\f30d"}.fa-php:before{content:"\f30e"}.fa-ffmpeg:before{content:"\f30f"}.fa-joplin:before{content:"\f310"}.fa-syncthing:before{content:"\f311"}.fa-inkscape:before{content:"\f312"}.fa-matrix-org:before{content:"\f313"}.fa-pixelfed:before{content:"\f314"}.fa-bootstrap:before{content:"\f315"}.fa-dev-to:before{content:"\f316"}.fa-hashnode:before{content:"\f317"}.fa-jirafeau:before{content:"\f318"}.fa-emby:before{content:"\f319"}.fa-wikidata:before{content:"\f31a"}.fa-gimp:before{content:"\f31b"}.fa-c:before{content:"\f31c"}.fa-digitalocean:before{content:"\f31d"}.fa-att:before{content:"\f31e"}.fa-gitea:before{content:"\f31f"}.fa-file-epub:before{content:"\f321"}.fa-python:before{content:"\f322"}.fa-archlinux:before{content:"\f323"}.fa-pleroma:before{content:"\f324"}.fa-unsplash:before{content:"\f325"}.fa-hackster:before{content:"\f326"}.fa-spell-check:before{content:"\f327"}.fa-moon:before{content:"\f328"}.fa-sun:before{content:"\f329"}.fa-f-droid:before{content:"\f32a"}.fa-biometric:before{content:"\f32b"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.info-card-popover-cluster-status{max-height:20vh;max-width:23vw}.info-card-popover-cluster-status .popover-body{font-size:1rem;max-height:19vh;max-width:100%;overflow:auto}.info-card-popover-cluster-status .popover-body li span{font-size:1.1em;font-weight:700}.info-card-popover-cluster-status .popover-body li span.health-warn-description{color:#9d6d10!important}@media (max-width: 1199px){.info-card-popover-cluster-status{max-width:31vw}}@media (max-width: 991px){.info-card-popover-cluster-status{max-width:46vw}}@media (max-width: 767px){.info-card-popover-cluster-status{max-width:83vw}}.info-card-content-clickable{border:1px solid #e9ecef;border-radius:3px;cursor:pointer;font-size:1.25em;padding:7px}.info-card-content-clickable:hover{background-color:#e9ecef;border-color:#ced4da}html{background-color:#fff}html,body{font-size:12px;height:100%;width:100%}option{font-style:normal;font-weight:400}mark,.mark{background-color:#d48200;padding:0}.full-height{height:100vh}.full-width{width:100vw}.vertical-align{align-items:center;display:flex}.horizontal-align{display:flex;justify-content:center}.loading:not(cd-api-docs *){left:50%;position:absolute;top:50%}.margin-right-md{margin-right:15px}.no-border{border:0;box-shadow:0 0!important}.italic{font-style:italic}.bold{font-weight:700}.text-right{text-align:right}.text-monospace{font-family:monospace}.text-pre-wrap{white-space:pre-wrap}.text-pre{white-space:pre}.icon-danger-color{color:#dc3545}.icon-warning-color{color:#d48200}.border-warning{border-left:4px solid #d48200}.border-danger{border-left:4px solid #dc3545}.border-info{border-left:4px solid #25828e}.border-success{border-left:4px solid #008a00}.vertical-line{border-left:1px solid #ced4da}a.nav-link{color:#25828e}.was-validated .form-check-input:valid,.was-validated .custom-checkbox .custom-control-input:valid,.custom-checkbox .was-validated .custom-control-input:valid,.form-check-input.is-valid,formly-form .form-check-input.ng-touched.ng-valid,.custom-checkbox .is-valid.custom-control-input,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid{border-color:#25828ecc}.was-validated .form-check-input:valid:checked,.was-validated .custom-checkbox .custom-control-input:valid:checked,.custom-checkbox .was-validated .custom-control-input:valid:checked,.form-check-input.is-valid:checked,formly-form .form-check-input.ng-touched.ng-valid:checked,.custom-checkbox .is-valid.custom-control-input:checked,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:checked,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:checked{background-color:#25828e;border-color:#25828ecc;box-shadow:0 0 3px 2px #25828e80}.was-validated .form-check-input:valid:focus,.was-validated .custom-checkbox .custom-control-input:valid:focus,.custom-checkbox .was-validated .custom-control-input:valid:focus,.form-check-input.is-valid:focus,formly-form .form-check-input.ng-touched.ng-valid:focus,.custom-checkbox .is-valid.custom-control-input:focus,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:focus,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:focus{border-color:#25828ecc;box-shadow:0 0 3px 2px #25828e80}.was-validated .form-check-input:valid~.form-check-label,.was-validated .custom-checkbox .form-check-input:valid~.custom-control-label,.custom-checkbox .was-validated .form-check-input:valid~.custom-control-label,.was-validated .custom-checkbox .custom-control-input:valid~.form-check-label,.was-validated .custom-checkbox .custom-control-input:valid~.custom-control-label,.custom-checkbox .was-validated .custom-control-input:valid~.form-check-label,.custom-checkbox .was-validated .custom-control-input:valid~.custom-control-label,.form-check-input.is-valid~.form-check-label,formly-form .form-check-input.ng-touched.ng-valid~.form-check-label,.custom-checkbox .form-check-input.is-valid~.custom-control-label,.custom-checkbox formly-form .form-check-input.ng-touched.ng-valid~.custom-control-label,formly-form .custom-checkbox .form-check-input.ng-touched.ng-valid~.custom-control-label,.custom-checkbox .is-valid.custom-control-input~.form-check-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.form-check-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.form-check-label,.custom-checkbox .is-valid.custom-control-input~.custom-control-label,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.custom-control-label,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.custom-control-label{color:initial}.was-validated .form-check-input:valid:checked~.form-check-label:before,.was-validated .custom-checkbox .form-check-input:valid:checked~.custom-control-label:before,.custom-checkbox .was-validated .form-check-input:valid:checked~.custom-control-label:before,.was-validated .custom-checkbox .custom-control-input:valid:checked~.form-check-label:before,.was-validated .custom-checkbox .custom-control-input:valid:checked~.custom-control-label:before,.custom-checkbox .was-validated .custom-control-input:valid:checked~.form-check-label:before,.custom-checkbox .was-validated .custom-control-input:valid:checked~.custom-control-label:before,.form-check-input.is-valid:checked~.form-check-label:before,formly-form .form-check-input.ng-touched.ng-valid:checked~.form-check-label:before,.custom-checkbox .form-check-input.is-valid:checked~.custom-control-label:before,.custom-checkbox formly-form .form-check-input.ng-touched.ng-valid:checked~.custom-control-label:before,formly-form .custom-checkbox .form-check-input.ng-touched.ng-valid:checked~.custom-control-label:before,.custom-checkbox .is-valid.custom-control-input:checked~.form-check-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:checked~.form-check-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:checked~.form-check-label:before,.custom-checkbox .is-valid.custom-control-input:checked~.custom-control-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:checked~.custom-control-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:checked~.custom-control-label:before{background-color:#25828e}.was-validated .form-check-input:valid~.form-check-label:before,.was-validated .custom-checkbox .form-check-input:valid~.custom-control-label:before,.custom-checkbox .was-validated .form-check-input:valid~.custom-control-label:before,.was-validated .custom-checkbox .custom-control-input:valid~.form-check-label:before,.was-validated .custom-checkbox .custom-control-input:valid~.custom-control-label:before,.custom-checkbox .was-validated .custom-control-input:valid~.form-check-label:before,.custom-checkbox .was-validated .custom-control-input:valid~.custom-control-label:before,.form-check-input.is-valid~.form-check-label:before,formly-form .form-check-input.ng-touched.ng-valid~.form-check-label:before,.custom-checkbox .form-check-input.is-valid~.custom-control-label:before,.custom-checkbox formly-form .form-check-input.ng-touched.ng-valid~.custom-control-label:before,formly-form .custom-checkbox .form-check-input.ng-touched.ng-valid~.custom-control-label:before,.custom-checkbox .is-valid.custom-control-input~.form-check-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.form-check-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.form-check-label:before,.custom-checkbox .is-valid.custom-control-input~.custom-control-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid~.custom-control-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid~.custom-control-label:before{border-color:#25828ecc}.was-validated .form-check-input:valid:focus~.custom-control-label:before,.was-validated .custom-checkbox .custom-control-input:valid:focus~.custom-control-label:before,.custom-checkbox .was-validated .custom-control-input:valid:focus~.custom-control-label:before,.form-check-input.is-valid:focus~.custom-control-label:before,formly-form .form-check-input.ng-touched.ng-valid:focus~.custom-control-label:before,.custom-checkbox .is-valid.custom-control-input:focus~.custom-control-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:focus~.custom-control-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:focus~.custom-control-label:before{box-shadow:0 0 3px 2px #25828e80}.was-validated .form-check-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-checkbox .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.custom-checkbox .was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.form-check-input.is-valid:focus:not(:checked)~.custom-control-label:before,formly-form .form-check-input.ng-touched.ng-valid:focus:not(:checked)~.custom-control-label:before,.custom-checkbox .is-valid.custom-control-input:focus:not(:checked)~.custom-control-label:before,.custom-checkbox formly-form .custom-control-input.ng-touched.ng-valid:focus:not(:checked)~.custom-control-label:before,formly-form .custom-checkbox .custom-control-input.ng-touched.ng-valid:focus:not(:checked)~.custom-control-label:before{border-color:#25828ecc}.btn-light,.btn-default{background-color:#fff;border-color:#ced4da!important}.btn-light:hover,.btn-default:hover{background-color:#dee2e6;border-color:#6c757d!important}.btn-light:disabled,.btn-default:disabled{background-color:#e9ecef;border-color:#ced4da!important}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:0}.btn.disabled{border:0;box-shadow:none}.btn-primary .badge,.btn-primary .badge-dark,.btn-primary .badge-light,.btn-primary .badge-warning,.btn-primary .badge-info,.btn-primary .badge-danger,.btn-primary .badge-success,.btn-primary .badge-secondary,.btn-primary .badge-primary{background-color:#e9ecef;color:#25828e}.btn-group>.btn>i.fa,.cd-datatable-actions button.btn i.fa{margin-right:5px}.card-footer button.btn:not(:first-child){margin-left:5px}.dropdown-menu{min-width:50px;z-index:999999}.dropdown-menu button.dropdown-item:focus{outline:none}.dropdown-menu>li>a{cursor:pointer}.dropdown-menu>li>a>i.fa{margin-right:5px}.dropdown-menu>.active>a{background-color:#25828e;color:#e9ecef}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#1a5d66}.dataTables_wrapper .dropdown-menu>li.dropdown-divider{cursor:auto}.required:after{color:#dc3545;content:"*";font-size:1.167rem;padding-left:4px}.form-footer{display:flex;width:100%}.form-control,.cd-form-control,.form-select{display:table-cell}.form-control:focus,.cd-form-control:focus,.form-select:focus{border-color:#25828ecc;box-shadow:0 0 3px 2px #25828e80;outline:0}.custom-checkbox{padding-top:7px}.custom-radio{padding-top:5px}cd-modal .modal{background-color:#0006;display:block}cd-modal .modal-dialog{max-width:70vh}.invalid-feedback{display:block}.container-fluid,.container-sm,.container-md,.container-lg,.container-xl,.container-xxl{padding:0 30px}.ceph-icon{background:url(Ceph_Logo.beb815b55d2e7363.svg)}.prometheus-icon{background:url(prometheus_logo.8057911d27be9bb1.svg)}.custom-icon{background-clip:padding-box;background-repeat:no-repeat;background-size:contain;margin-right:8px;padding:10px}.nav-tabs{margin-bottom:1rem}#toast-container{margin-top:2vw}@media (max-width: 1600px){#toast-container{margin-top:2.5vw}}@media (max-width: 991px){#toast-container{margin-top:9vw}}@media (max-width: 900px){#toast-container{margin-top:10vw}}@media (max-width: 319px){#toast-container{margin-top:11vw}}@media (max-width: 260px){#toast-container{margin-top:14vw}}.toast-message>ul{margin:0;padding-left:1rem}.noscript{padding-top:5em}@media (min-width: 576px){.col-form-label,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{text-align:right}}.col-form-label,.cd-col-form-label,formly-form .form-label,formly-form .custom-control-label{font-weight:700}.password-strength-level{flex:100%;margin-top:2px}.password-strength-level .weak,.password-strength-level .ok,.password-strength-level .strong,.password-strength-level .very-strong{border-radius:.25rem;height:13px}.password-strength-level .weak{background:#dc3545;width:25%}.password-strength-level .ok{background:#d48200;width:50%}.password-strength-level .strong{background:#008a00;width:75%}.password-strength-level .very-strong{background:#003e00;width:100%}.badge-background-gray,.badge-hdd{background-color:#6c757d;color:#fff}.badge-background-primary,.badge-ssd{background-color:#25828e;color:#fff}.badge-tab{background-color:#e9ecef;color:#495057}.badge-cd-label-green{background-color:#6ec664;color:#fff}.badge-cd-label-cyan{background-color:#009596;color:#fff}.badge-cd-label-purple{background-color:#a18fff;color:#fff}.badge-cd-label-light-blue{background-color:#35caed;color:#fff}.badge-cd-label-gold{background-color:#f4c145;color:#fff}.badge-cd-label-light-green{background-color:#ace12e;color:#fff;font-weight:bolder}tree-root tree-viewport{min-height:1em}tags-input .tags{border:1px solid #ced4da;border-radius:4px;box-shadow:inset 0 1px 1px #00000017}.card-header{font-size:1.3em}.card-body h2:first-child,.card-body .h2:first-child{margin-top:0}.disabled{pointer-events:none}a:hover{text-decoration:underline}.clickable,a{cursor:pointer;text-decoration:none}a.nav-link,a.btn-light,a.btn-default{text-decoration:none}formly-form .form-label,formly-form .custom-control-label{text-align:start;white-space:nowrap;width:-moz-fit-content;width:fit-content}formly-form .form-label span[aria-hidden=true],formly-form .custom-control-label span[aria-hidden=true]{color:#dc3545}
index a08aaebc724bedc49fa4f409ae529fb9aa174991..9cdf6be4b46375ea0f40d19bcc08ddb8d0e42cdb 100644 (file)
@@ -1,44 +1,39 @@
-const esModules = ['@angular', '@ngrx', '@progress', 'simplebar', 'lodash-es', 'react-syntax-highlighter', 'swagger-client', '@ng-bootstrap'];
+const esModules = [
+  '@angular',
+  '@ngrx',
+  '@progress',
+  'simplebar',
+  'lodash-es',
+  'react-syntax-highlighter',
+  'swagger-client',
+  '@ng-bootstrap'
+];
 const jestConfig = {
-    globals: {
-        'ts-jest': {
-            useESM: true,
-            stringifyContentPathRegex: '\\.(html|svg)$',
-            tsconfig: '<rootDir>/tsconfig.spec.json',
-            isolatedModules: true
-        },
-    },
-    globalSetup: 'jest-preset-angular/global-setup',
-    moduleNameMapper: {
-        "\\.scss$": "identity-obj-proxy",
-        "~/(.*)$": "<rootDir>/src/$1"
-    },
-    moduleFileExtensions: ['ts', 'html', 'js', 'json', 'mjs', 'cjs'],
-    preset: "jest-preset-angular",
-    setupFilesAfterEnv: [
-        "<rootDir>/src/setupJest.ts"
-    ],
-    transformIgnorePatterns: [
-        "node_modules/(?!.*\\.mjs$|".concat(esModules.join('|'), ")")
-    ],
-    transform: {
-        "^.+\\.(ts|html|mjs)$": "jest-preset-angular",
-        "^.+\\.(js)$": "babel-jest"
-    },
-    setupFiles: [
-        "jest-canvas-mock"
-    ],
-    coverageReporters: [
-        "cobertura",
-        "html"
-    ],
-    modulePathIgnorePatterns: [
-        "<rootDir>/coverage/",
-        "<rootDir>/node_modules/simplebar-angular",
-    ],
-    testMatch: [
-        "**/*.spec.ts"
-    ],
-    testRunner: 'jest-jasmine2'
+  globals: {
+    'ts-jest': {
+      useESM: true,
+      stringifyContentPathRegex: '\\.(html|svg)$',
+      tsconfig: '<rootDir>/tsconfig.spec.json',
+      isolatedModules: true
+    }
+  },
+  globalSetup: 'jest-preset-angular/global-setup',
+  moduleNameMapper: {
+    '\\.scss$': 'identity-obj-proxy',
+    '~/(.*)$': '<rootDir>/src/$1'
+  },
+  moduleFileExtensions: ['ts', 'html', 'js', 'json', 'mjs', 'cjs'],
+  preset: 'jest-preset-angular',
+  setupFilesAfterEnv: ['<rootDir>/src/setupJest.ts'],
+  transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$|'.concat(esModules.join('|'), ')')],
+  transform: {
+    '^.+\\.(ts|html|mjs)$': 'jest-preset-angular',
+    '^.+\\.(js)$': 'babel-jest'
+  },
+  setupFiles: ['jest-canvas-mock'],
+  coverageReporters: ['cobertura', 'html'],
+  modulePathIgnorePatterns: ['<rootDir>/coverage/', '<rootDir>/node_modules/simplebar-angular'],
+  testMatch: ['**/*.spec.ts'],
+  testRunner: 'jest-jasmine2'
 };
 module.exports = jestConfig;
index bf30cb5a272b80b8852095de534be563de4e4e6a..d0eda6d8d22ff6fedf30b428d36c42859f655163 100644 (file)
 {
   "name": "ceph-dashboard",
   "version": "0.0.0",
-  "lockfileVersion": 1,
+  "lockfileVersion": 3,
   "requires": true,
-  "dependencies": {
-    "@aduh95/viz.js": {
+  "packages": {
+    "": {
+      "name": "ceph-dashboard",
+      "version": "0.0.0",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "@angular/animations": "15.2.9",
+        "@angular/common": "15.2.9",
+        "@angular/compiler": "15.2.9",
+        "@angular/core": "15.2.9",
+        "@angular/forms": "15.2.9",
+        "@angular/localize": "15.2.9",
+        "@angular/platform-browser": "15.2.9",
+        "@angular/platform-browser-dynamic": "15.2.9",
+        "@angular/router": "15.2.9",
+        "@circlon/angular-tree-component": "10.0.0",
+        "@ng-bootstrap/ng-bootstrap": "14.2.0",
+        "@ngx-formly/bootstrap": "6.1.1",
+        "@ngx-formly/core": "6.1.1",
+        "@popperjs/core": "2.10.2",
+        "@swimlane/ngx-datatable": "18.0.0",
+        "@types/file-saver": "2.0.1",
+        "async-mutex": "0.2.4",
+        "bootstrap": "5.2.3",
+        "chart.js": "2.9.4",
+        "detect-browser": "5.2.0",
+        "file-saver": "2.0.2",
+        "fork-awesome": "1.1.7",
+        "lodash": "4.17.21",
+        "moment": "2.29.4",
+        "ng-block-ui": "3.0.2",
+        "ng-click-outside": "7.0.0",
+        "ng2-charts": "2.4.2",
+        "ngx-pipe-function": "1.0.0",
+        "ngx-toastr": "17.0.2",
+        "rxjs": "6.6.3",
+        "simplebar-angular": "2.3.6",
+        "swagger-ui": "4.12.0",
+        "tslib": "2.3.1",
+        "zone.js": "0.11.8"
+      },
+      "devDependencies": {
+        "@angular-devkit/build-angular": "15.2.9",
+        "@angular-eslint/builder": "13.5.0",
+        "@angular-eslint/eslint-plugin": "13.5.0",
+        "@angular-eslint/eslint-plugin-template": "13.5.0",
+        "@angular-eslint/schematics": "13.5.0",
+        "@angular-eslint/template-parser": "13.5.0",
+        "@angular/cli": "15.2.9",
+        "@angular/compiler-cli": "15.2.9",
+        "@angular/language-service": "15.2.9",
+        "@applitools/eyes-cypress": "3.22.5",
+        "@compodoc/compodoc": "1.1.18",
+        "@cypress/browserify-preprocessor": "3.0.2",
+        "@types/brace-expansion": "1.1.0",
+        "@types/cypress-cucumber-preprocessor": "4.0.1",
+        "@types/jest": "29.5.4",
+        "@types/lodash": "4.14.161",
+        "@types/node": "18.17.12",
+        "@types/swagger-ui": "3.52.0",
+        "@typescript-eslint/eslint-plugin": "5.27.1",
+        "@typescript-eslint/parser": "5.27.1",
+        "axe-core": "4.4.3",
+        "cypress": "12.17.4",
+        "cypress-axe": "1.5.0",
+        "cypress-cucumber-preprocessor": "4.3.1",
+        "cypress-iframe": "1.0.1",
+        "cypress-multi-reporters": "1.5.0",
+        "eslint": "8.17.0",
+        "gherkin-lint": "4.2.2",
+        "html-linter": "1.1.1",
+        "htmllint-cli": "0.0.7",
+        "identity-obj-proxy": "3.0.0",
+        "isomorphic-form-data": "2.0.0",
+        "jest": "29.6.4",
+        "jest-canvas-mock": "2.4.0",
+        "jest-jasmine2": "28.1.3",
+        "jest-preset-angular": "13.1.1",
+        "jest-silent-reporter": "0.5.0",
+        "mocha-junit-reporter": "2.1.0",
+        "ng-mocks": "14.3.0",
+        "npm-run-all": "4.1.5",
+        "prettier": "2.1.2",
+        "pretty-quick": "3.0.2",
+        "start-server-and-test": "1.12.1",
+        "stylelint": "13.13.1",
+        "stylelint-config-sass-guidelines": "7.1.0",
+        "stylelint-declaration-use-variable": "1.7.3",
+        "table": "6.8.0",
+        "transifex-i18ntool": "1.1.0",
+        "ts-node": "9.0.0",
+        "typescript": "4.9.5"
+      }
+    },
+    "node_modules/@aashutoshrathi/word-wrap": {
+      "version": "1.2.6",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/@aduh95/viz.js": {
       "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz",
-      "integrity": "sha512-KI2nVf9JdwWCXqK6RVf+9/096G7VWN4Z84mnynlyZKao2xQENW8WNEjLmvdlxS5X8PNWXFC1zqwm7tveOXw/4A==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "@ampproject/remapping": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
-      "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
-      "requires": {
-        "@jridgewell/gen-mapping": "^0.3.0",
+    "node_modules/@ampproject/remapping": {
+      "version": "2.2.0",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.1.0",
         "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "@angular-devkit/architect": {
-      "version": "0.1303.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.11.tgz",
-      "integrity": "sha512-JwrWomNqNGjAeKlqV2pimUFlCgFxQy+Vioz9+QAPIrUkvvjbkQ1dZKOe8Ul8eosb1N3Ln282U6qzOpHKfJ4TOg==",
+    "node_modules/@angular-devkit/architect": {
+      "version": "0.1502.9",
       "dev": true,
-      "requires": {
-        "@angular-devkit/core": "13.3.11",
+      "license": "MIT",
+      "dependencies": {
+        "@angular-devkit/core": "15.2.9",
         "rxjs": "6.6.7"
       },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      }
+    },
+    "node_modules/@angular-devkit/architect/node_modules/rxjs": {
+      "version": "6.6.7",
+      "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "rxjs": {
-          "version": "6.6.7",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-          "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-          "dev": true,
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
-        }
+        "tslib": "^1.9.0"
+      },
+      "engines": {
+        "npm": ">=2.0.0"
       }
     },
-    "@angular-devkit/build-angular": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.3.11.tgz",
-      "integrity": "sha512-H4tpdmRu+6HSjsL+swV/8qj8v0YSDq6lpb31EYajlBB6fDj+YJQvHgaWvexSWl6eIqgDKXcujhNUjNi1enjwHw==",
+    "node_modules/@angular-devkit/architect/node_modules/tslib": {
+      "version": "1.14.1",
       "dev": true,
-      "requires": {
+      "license": "0BSD"
+    },
+    "node_modules/@angular-devkit/build-angular": {
+      "version": "15.2.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
         "@ampproject/remapping": "2.2.0",
-        "@angular-devkit/architect": "0.1303.11",
-        "@angular-devkit/build-webpack": "0.1303.11",
-        "@angular-devkit/core": "13.3.11",
-        "@babel/core": "7.16.12",
-        "@babel/generator": "7.16.8",
-        "@babel/helper-annotate-as-pure": "7.16.7",
-        "@babel/plugin-proposal-async-generator-functions": "7.16.8",
-        "@babel/plugin-transform-async-to-generator": "7.16.8",
-        "@babel/plugin-transform-runtime": "7.16.10",
-        "@babel/preset-env": "7.16.11",
-        "@babel/runtime": "7.16.7",
-        "@babel/template": "7.16.7",
-        "@discoveryjs/json-ext": "0.5.6",
-        "@ngtools/webpack": "13.3.11",
-        "ansi-colors": "4.1.1",
-        "babel-loader": "8.2.5",
+        "@angular-devkit/architect": "0.1502.9",
+        "@angular-devkit/build-webpack": "0.1502.9",
+        "@angular-devkit/core": "15.2.9",
+        "@babel/core": "7.20.12",
+        "@babel/generator": "7.20.14",
+        "@babel/helper-annotate-as-pure": "7.18.6",
+        "@babel/helper-split-export-declaration": "7.18.6",
+        "@babel/plugin-proposal-async-generator-functions": "7.20.7",
+        "@babel/plugin-transform-async-to-generator": "7.20.7",
+        "@babel/plugin-transform-runtime": "7.19.6",
+        "@babel/preset-env": "7.20.2",
+        "@babel/runtime": "7.20.13",
+        "@babel/template": "7.20.7",
+        "@discoveryjs/json-ext": "0.5.7",
+        "@ngtools/webpack": "15.2.9",
+        "ansi-colors": "4.1.3",
+        "autoprefixer": "10.4.13",
+        "babel-loader": "9.1.2",
         "babel-plugin-istanbul": "6.1.1",
-        "browserslist": "^4.9.1",
-        "cacache": "15.3.0",
-        "circular-dependency-plugin": "5.2.2",
-        "copy-webpack-plugin": "10.2.1",
-        "core-js": "3.20.3",
+        "browserslist": "4.21.5",
+        "cacache": "17.0.4",
+        "chokidar": "3.5.3",
+        "copy-webpack-plugin": "11.0.0",
         "critters": "0.0.16",
-        "css-loader": "6.5.1",
-        "esbuild": "0.14.22",
-        "esbuild-wasm": "0.14.22",
-        "glob": "7.2.0",
-        "https-proxy-agent": "5.0.0",
-        "inquirer": "8.2.0",
-        "jsonc-parser": "3.0.0",
+        "css-loader": "6.7.3",
+        "esbuild-wasm": "0.17.8",
+        "glob": "8.1.0",
+        "https-proxy-agent": "5.0.1",
+        "inquirer": "8.2.4",
+        "jsonc-parser": "3.2.0",
         "karma-source-map-support": "1.4.0",
-        "less": "4.1.2",
-        "less-loader": "10.2.0",
+        "less": "4.1.3",
+        "less-loader": "11.1.0",
         "license-webpack-plugin": "4.0.2",
         "loader-utils": "3.2.1",
-        "mini-css-extract-plugin": "2.5.3",
-        "minimatch": "3.0.5",
-        "open": "8.4.0",
+        "magic-string": "0.29.0",
+        "mini-css-extract-plugin": "2.7.2",
+        "open": "8.4.1",
         "ora": "5.4.1",
-        "parse5-html-rewriting-stream": "6.0.1",
+        "parse5-html-rewriting-stream": "7.0.0",
         "piscina": "3.2.0",
-        "postcss": "8.4.5",
-        "postcss-import": "14.0.2",
-        "postcss-loader": "6.2.1",
-        "postcss-preset-env": "7.2.3",
-        "regenerator-runtime": "0.13.9",
+        "postcss": "8.4.21",
+        "postcss-loader": "7.0.2",
         "resolve-url-loader": "5.0.0",
         "rxjs": "6.6.7",
-        "sass": "1.49.9",
-        "sass-loader": "12.4.0",
-        "semver": "7.3.5",
-        "source-map-loader": "3.0.1",
+        "sass": "1.58.1",
+        "sass-loader": "13.2.0",
+        "semver": "7.5.3",
+        "source-map-loader": "4.0.1",
         "source-map-support": "0.5.21",
-        "stylus": "0.56.0",
-        "stylus-loader": "6.2.0",
-        "terser": "5.14.2",
+        "terser": "5.16.3",
         "text-table": "0.2.0",
         "tree-kill": "1.2.2",
-        "tslib": "2.3.1",
+        "tslib": "2.5.0",
         "webpack": "5.76.1",
-        "webpack-dev-middleware": "5.3.0",
-        "webpack-dev-server": "4.7.3",
+        "webpack-dev-middleware": "6.0.1",
+        "webpack-dev-server": "4.11.1",
         "webpack-merge": "5.8.0",
         "webpack-subresource-integrity": "5.1.0"
       },
-      "dependencies": {
-        "@ampproject/remapping": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
-          "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
-          "dev": true,
-          "requires": {
-            "@jridgewell/gen-mapping": "^0.1.0",
-            "@jridgewell/trace-mapping": "^0.3.9"
-          }
-        },
-        "@babel/core": {
-          "version": "7.16.12",
-          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz",
-          "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==",
-          "dev": true,
-          "requires": {
-            "@babel/code-frame": "^7.16.7",
-            "@babel/generator": "^7.16.8",
-            "@babel/helper-compilation-targets": "^7.16.7",
-            "@babel/helper-module-transforms": "^7.16.7",
-            "@babel/helpers": "^7.16.7",
-            "@babel/parser": "^7.16.12",
-            "@babel/template": "^7.16.7",
-            "@babel/traverse": "^7.16.10",
-            "@babel/types": "^7.16.8",
-            "convert-source-map": "^1.7.0",
-            "debug": "^4.1.0",
-            "gensync": "^1.0.0-beta.2",
-            "json5": "^2.1.2",
-            "semver": "^6.3.0",
-            "source-map": "^0.5.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
-            }
-          }
-        },
-        "@babel/generator": {
-          "version": "7.16.8",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz",
-          "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.16.8",
-            "jsesc": "^2.5.1",
-            "source-map": "^0.5.0"
-          }
-        },
-        "@babel/runtime": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz",
-          "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==",
-          "dev": true,
-          "requires": {
-            "regenerator-runtime": "^0.13.4"
-          }
-        },
-        "@babel/template": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
-          "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
-          "dev": true,
-          "requires": {
-            "@babel/code-frame": "^7.16.7",
-            "@babel/parser": "^7.16.7",
-            "@babel/types": "^7.16.7"
-          }
-        },
-        "@jridgewell/gen-mapping": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
-          "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
-          "dev": true,
-          "requires": {
-            "@jridgewell/set-array": "^1.0.0",
-            "@jridgewell/sourcemap-codec": "^1.4.10"
-          }
-        },
-        "core-js": {
-          "version": "3.20.3",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.3.tgz",
-          "integrity": "sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==",
-          "dev": true
-        },
-        "esbuild": {
-          "version": "0.14.22",
-          "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.22.tgz",
-          "integrity": "sha512-CjFCFGgYtbFOPrwZNJf7wsuzesx8kqwAffOlbYcFDLFuUtP8xloK1GH+Ai13Qr0RZQf9tE7LMTHJ2iVGJ1SKZA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "esbuild-android-arm64": "0.14.22",
-            "esbuild-darwin-64": "0.14.22",
-            "esbuild-darwin-arm64": "0.14.22",
-            "esbuild-freebsd-64": "0.14.22",
-            "esbuild-freebsd-arm64": "0.14.22",
-            "esbuild-linux-32": "0.14.22",
-            "esbuild-linux-64": "0.14.22",
-            "esbuild-linux-arm": "0.14.22",
-            "esbuild-linux-arm64": "0.14.22",
-            "esbuild-linux-mips64le": "0.14.22",
-            "esbuild-linux-ppc64le": "0.14.22",
-            "esbuild-linux-riscv64": "0.14.22",
-            "esbuild-linux-s390x": "0.14.22",
-            "esbuild-netbsd-64": "0.14.22",
-            "esbuild-openbsd-64": "0.14.22",
-            "esbuild-sunos-64": "0.14.22",
-            "esbuild-windows-32": "0.14.22",
-            "esbuild-windows-64": "0.14.22",
-            "esbuild-windows-arm64": "0.14.22"
-          }
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      },
+      "optionalDependencies": {
+        "esbuild": "0.17.8"
+      },
+      "peerDependencies": {
+        "@angular/compiler-cli": "^15.0.0",
+        "@angular/localize": "^15.0.0",
+        "@angular/platform-server": "^15.0.0",
+        "@angular/service-worker": "^15.0.0",
+        "karma": "^6.3.0",
+        "ng-packagr": "^15.0.0",
+        "protractor": "^7.0.0",
+        "tailwindcss": "^2.0.0 || ^3.0.0",
+        "typescript": ">=4.8.2 <5.0"
+      },
+      "peerDependenciesMeta": {
+        "@angular/localize": {
+          "optional": true
         },
-        "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"
-          }
+        "@angular/platform-server": {
+          "optional": true
         },
-        "minimatch": {
-          "version": "3.0.5",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
-          "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
+        "@angular/service-worker": {
+          "optional": true
         },
-        "regenerator-runtime": {
-          "version": "0.13.9",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
-          "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
-          "dev": true
+        "karma": {
+          "optional": true
         },
-        "rxjs": {
-          "version": "6.6.7",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-          "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-          "dev": true,
-          "requires": {
-            "tslib": "^1.9.0"
-          },
-          "dependencies": {
-            "tslib": {
-              "version": "1.14.1",
-              "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-              "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-              "dev": true
-            }
-          }
+        "ng-packagr": {
+          "optional": 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"
-          }
+        "protractor": {
+          "optional": true
         },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
-          "dev": true
+        "tailwindcss": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/browserslist": {
+      "version": "4.21.5",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
         },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
         }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001449",
+        "electron-to-chromium": "^1.4.284",
+        "node-releases": "^2.0.8",
+        "update-browserslist-db": "^1.0.10"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/rxjs": {
+      "version": "6.6.7",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "^1.9.0"
+      },
+      "engines": {
+        "npm": ">=2.0.0"
       }
     },
-    "@angular-devkit/build-webpack": {
-      "version": "0.1303.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1303.11.tgz",
-      "integrity": "sha512-599pWAQLq7i/fmEZLb7PaNU6nmPC3EZbJk1nU/UBcpx7FWs9e0o2XQE2PCAs0buqtQxVjSgY6kMO8ex5dUmgUQ==",
+    "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": {
+      "version": "1.14.1",
+      "dev": true,
+      "license": "0BSD"
+    },
+    "node_modules/@angular-devkit/build-angular/node_modules/tslib": {
+      "version": "2.5.0",
+      "dev": true,
+      "license": "0BSD"
+    },
+    "node_modules/@angular-devkit/build-webpack": {
+      "version": "0.1502.9",
       "dev": true,
-      "requires": {
-        "@angular-devkit/architect": "0.1303.11",
+      "license": "MIT",
+      "dependencies": {
+        "@angular-devkit/architect": "0.1502.9",
         "rxjs": "6.6.7"
       },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      },
+      "peerDependencies": {
+        "webpack": "^5.30.0",
+        "webpack-dev-server": "^4.0.0"
+      }
+    },
+    "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": {
+      "version": "6.6.7",
+      "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "rxjs": {
-          "version": "6.6.7",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-          "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-          "dev": true,
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
-        }
+        "tslib": "^1.9.0"
+      },
+      "engines": {
+        "npm": ">=2.0.0"
       }
     },
-    "@angular-devkit/core": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.11.tgz",
-      "integrity": "sha512-rfqoLMRYhlz0wzKlHx7FfyIyQq8dKTsmbCoIVU1cEIH0gyTMVY7PbVzwRRcO6xp5waY+0hA+0Brriujpuhkm4w==",
+    "node_modules/@angular-devkit/build-webpack/node_modules/tslib": {
+      "version": "1.14.1",
       "dev": true,
-      "requires": {
-        "ajv": "8.9.0",
+      "license": "0BSD"
+    },
+    "node_modules/@angular-devkit/core": {
+      "version": "15.2.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "8.12.0",
         "ajv-formats": "2.1.1",
-        "fast-json-stable-stringify": "2.1.0",
-        "magic-string": "0.25.7",
+        "jsonc-parser": "3.2.0",
         "rxjs": "6.6.7",
-        "source-map": "0.7.3"
+        "source-map": "0.7.4"
       },
-      "dependencies": {
-        "rxjs": {
-          "version": "6.6.7",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-          "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-          "dev": true,
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      },
+      "peerDependencies": {
+        "chokidar": "^3.5.2"
+      },
+      "peerDependenciesMeta": {
+        "chokidar": {
+          "optional": true
         }
       }
     },
-    "@angular-devkit/schematics": {
-      "version": "13.3.9",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.9.tgz",
-      "integrity": "sha512-oNHLNtwbtEJ0dYPPXy1NpfRdSiFsYBl7+ozJklLgNV/AEOxlSi2qlVx6DoxNVjz5XgQ7Z+eoVDMw7ewGPnGSyA==",
+    "node_modules/@angular-devkit/core/node_modules/rxjs": {
+      "version": "6.6.7",
       "dev": true,
-      "requires": {
-        "@angular-devkit/core": "13.3.9",
-        "jsonc-parser": "3.0.0",
-        "magic-string": "0.25.7",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "^1.9.0"
+      },
+      "engines": {
+        "npm": ">=2.0.0"
+      }
+    },
+    "node_modules/@angular-devkit/core/node_modules/tslib": {
+      "version": "1.14.1",
+      "dev": true,
+      "license": "0BSD"
+    },
+    "node_modules/@angular-devkit/schematics": {
+      "version": "15.2.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@angular-devkit/core": "15.2.9",
+        "jsonc-parser": "3.2.0",
+        "magic-string": "0.29.0",
         "ora": "5.4.1",
         "rxjs": "6.6.7"
       },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      }
+    },
+    "node_modules/@angular-devkit/schematics/node_modules/rxjs": {
+      "version": "6.6.7",
+      "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "@angular-devkit/core": {
-          "version": "13.3.9",
-          "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.9.tgz",
-          "integrity": "sha512-XqCuIWyoqIsLABjV3GQL/+EiBCt3xVPPtNp3Mg4gjBsDLW7PEnvbb81yGkiZQmIsq4EIyQC/6fQa3VdjsCshGg==",
-          "dev": true,
-          "requires": {
-            "ajv": "8.9.0",
-            "ajv-formats": "2.1.1",
-            "fast-json-stable-stringify": "2.1.0",
-            "magic-string": "0.25.7",
-            "rxjs": "6.6.7",
-            "source-map": "0.7.3"
-          }
-        },
-        "rxjs": {
-          "version": "6.6.7",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-          "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-          "dev": true,
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
-        }
+        "tslib": "^1.9.0"
+      },
+      "engines": {
+        "npm": ">=2.0.0"
       }
     },
-    "@angular-eslint/builder": {
+    "node_modules/@angular-devkit/schematics/node_modules/tslib": {
+      "version": "1.14.1",
+      "dev": true,
+      "license": "0BSD"
+    },
+    "node_modules/@angular-eslint/builder": {
       "version": "13.5.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-13.5.0.tgz",
-      "integrity": "sha512-IYY/HYS4fSddJLs2pAkMkKhHL07driUILPxGnGLblfWuoJBhRspyrVL3uZc3Q4iJXc1RJfaOno9oRw11FGyL6Q==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@nrwl/devkit": "13.1.3"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0",
+        "typescript": "*"
       }
     },
-    "@angular-eslint/bundled-angular-compiler": {
+    "node_modules/@angular-eslint/bundled-angular-compiler": {
       "version": "13.5.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-13.5.0.tgz",
-      "integrity": "sha512-7M/5ilxqPD3ydgqqdLsYs3kBwZgNg2Y6C01B5SEHZNLqLT9kAJa7I4y6GlxCZqejCIh554kdXGeV3abIxFccSg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "@angular-eslint/eslint-plugin": {
+    "node_modules/@angular-eslint/eslint-plugin": {
       "version": "13.5.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-13.5.0.tgz",
-      "integrity": "sha512-k9o9WIqUkdO8tdYFCJ54PUWsNd9HHflih/GmA13EWciBYx8QxciwBh0u4NSAnbtOwp4Y7juGZ/Dta5ZrT/2VBA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@angular-eslint/utils": "13.5.0",
         "@typescript-eslint/experimental-utils": "5.27.1"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0",
+        "typescript": "*"
       }
     },
-    "@angular-eslint/eslint-plugin-template": {
+    "node_modules/@angular-eslint/eslint-plugin-template": {
       "version": "13.5.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-13.5.0.tgz",
-      "integrity": "sha512-ZVSXayn8MqYOhYomH2Cjc0azhuUQbY9fp9dKjJZOD64KhP8BYHw8+Ogc9E/FU5oZQ9fKw6A+23NAYKmLNqSAgA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@angular-eslint/bundled-angular-compiler": "13.5.0",
         "@typescript-eslint/experimental-utils": "5.27.1",
         "aria-query": "^4.2.2",
         "axobject-query": "^2.2.0"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0",
+        "typescript": "*"
       }
     },
-    "@angular-eslint/schematics": {
+    "node_modules/@angular-eslint/schematics": {
       "version": "13.5.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-13.5.0.tgz",
-      "integrity": "sha512-0LvdalNpYb0oWwptwkeK2PVokfQ9itMIp8/aMjbOLH1RQ3eHFZgBtVvVm3G5EpPKzbL0llaeTifZvH2z70qVYQ==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@angular-eslint/eslint-plugin": "13.5.0",
         "@angular-eslint/eslint-plugin-template": "13.5.0",
         "ignore": "5.2.0",
         "strip-json-comments": "3.1.1",
         "tmp": "0.2.1"
       },
-      "dependencies": {
-        "ignore": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-          "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
-          "dev": true
-        },
-        "strip-json-comments": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-          "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-          "dev": true
-        },
-        "tmp": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
-          "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
-          "dev": true,
-          "requires": {
-            "rimraf": "^3.0.0"
-          }
-        }
+      "peerDependencies": {
+        "@angular/cli": ">= 13.0.0 < 14.0.0"
       }
     },
-    "@angular-eslint/template-parser": {
+    "node_modules/@angular-eslint/template-parser": {
       "version": "13.5.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-13.5.0.tgz",
-      "integrity": "sha512-k+24+kBjaOuthfp9RBQB0zH6UqeizZuFQFEuZEQbvirPbdQ2SqNBw7IcmW2Qw1v7fjFe6/6gqK7wm2g7o9ZZvA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@angular-eslint/bundled-angular-compiler": "13.5.0",
         "eslint-scope": "^5.1.0"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0",
+        "typescript": "*"
       }
     },
-    "@angular-eslint/utils": {
+    "node_modules/@angular-eslint/utils": {
       "version": "13.5.0",
-      "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-13.5.0.tgz",
-      "integrity": "sha512-wX3W6STSDJDJ7ZyEsUdBp4HUPwmillMmKcdnFsy+qxbpJFzFOxOFpK1zet4ELsq1XpB89i9vRvC3vYbpHn3CSw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@angular-eslint/bundled-angular-compiler": "13.5.0",
         "@typescript-eslint/experimental-utils": "5.27.1"
+      },
+      "peerDependencies": {
+        "eslint": "^7.0.0 || ^8.0.0",
+        "typescript": "*"
       }
     },
-    "@angular/animations": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.3.11.tgz",
-      "integrity": "sha512-KE/3RuvixHIk9YTSwaUsezsUm9Ig9Y8rZMpHOT/8bRtzPiJ5ld2GnDHjrJgyZn7TdoP4wz4YCta5eC4ycu+KCw==",
-      "requires": {
+    "node_modules/@angular/animations": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/core": "15.2.9"
       }
     },
-    "@angular/cli": {
-      "version": "13.3.9",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.3.9.tgz",
-      "integrity": "sha512-b64mfB7A8vw5QmopEnkCVhGH8zDX5FrQVKKCRlK1dO3GEtAdfhFJb5J7TBbCOwp1XfYJ5jl+biNQy4HoX5HQPw==",
+    "node_modules/@angular/cli": {
+      "version": "15.2.9",
       "dev": true,
-      "requires": {
-        "@angular-devkit/architect": "0.1303.9",
-        "@angular-devkit/core": "13.3.9",
-        "@angular-devkit/schematics": "13.3.9",
-        "@schematics/angular": "13.3.9",
+      "license": "MIT",
+      "dependencies": {
+        "@angular-devkit/architect": "0.1502.9",
+        "@angular-devkit/core": "15.2.9",
+        "@angular-devkit/schematics": "15.2.9",
+        "@schematics/angular": "15.2.9",
         "@yarnpkg/lockfile": "1.1.0",
-        "ansi-colors": "4.1.1",
-        "debug": "4.3.3",
-        "ini": "2.0.0",
-        "inquirer": "8.2.0",
-        "jsonc-parser": "3.0.0",
-        "npm-package-arg": "8.1.5",
-        "npm-pick-manifest": "6.1.1",
-        "open": "8.4.0",
+        "ansi-colors": "4.1.3",
+        "ini": "3.0.1",
+        "inquirer": "8.2.4",
+        "jsonc-parser": "3.2.0",
+        "npm-package-arg": "10.1.0",
+        "npm-pick-manifest": "8.0.1",
+        "open": "8.4.1",
         "ora": "5.4.1",
-        "pacote": "12.0.3",
-        "resolve": "1.22.0",
-        "semver": "7.3.5",
+        "pacote": "15.1.0",
+        "resolve": "1.22.1",
+        "semver": "7.5.3",
         "symbol-observable": "4.0.0",
-        "uuid": "8.3.2"
-      },
-      "dependencies": {
-        "@angular-devkit/architect": {
-          "version": "0.1303.9",
-          "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1303.9.tgz",
-          "integrity": "sha512-RMHqCGDxbLqT+250A0a8vagsoTdqGjAxjhrvTeq7PJmClI7uJ/uA1Fs18+t85toIqVKn2hovdY9sNf42nBDD2Q==",
-          "dev": true,
-          "requires": {
-            "@angular-devkit/core": "13.3.9",
-            "rxjs": "6.6.7"
-          }
-        },
-        "@angular-devkit/core": {
-          "version": "13.3.9",
-          "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.9.tgz",
-          "integrity": "sha512-XqCuIWyoqIsLABjV3GQL/+EiBCt3xVPPtNp3Mg4gjBsDLW7PEnvbb81yGkiZQmIsq4EIyQC/6fQa3VdjsCshGg==",
-          "dev": true,
-          "requires": {
-            "ajv": "8.9.0",
-            "ajv-formats": "2.1.1",
-            "fast-json-stable-stringify": "2.1.0",
-            "magic-string": "0.25.7",
-            "rxjs": "6.6.7",
-            "source-map": "0.7.3"
-          }
-        },
-        "debug": {
-          "version": "4.3.3",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
-          "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "ini": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
-          "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
-          "dev": true
-        },
-        "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"
-          }
-        },
-        "resolve": {
-          "version": "1.22.0",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
-          "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
-          "dev": true,
-          "requires": {
-            "is-core-module": "^2.8.1",
-            "path-parse": "^1.0.7",
-            "supports-preserve-symlinks-flag": "^1.0.0"
-          }
-        },
-        "rxjs": {
-          "version": "6.6.7",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-          "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-          "dev": true,
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "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"
-          }
-        },
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "yargs": "17.6.2"
+      },
+      "bin": {
+        "ng": "bin/ng.js"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
       }
     },
-    "@angular/common": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.3.11.tgz",
-      "integrity": "sha512-gPMwDYIAag1izXm2tRQ6EOIx9FVEUqLdr+qYtRVoQtoBmfkoTSLGcpeBXqqlPVxVPbA6Li1WZZT5wxLLlLAN+Q==",
-      "requires": {
+    "node_modules/@angular/common": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/core": "15.2.9",
+        "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "@angular/compiler": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.3.11.tgz",
-      "integrity": "sha512-EV6JCBbXdHDHbPShWmymvuoxFYG0KVc8sDJpYp47WLHCY2zgZaXhvWs//Hrls3fmi+TGTekgRa2jOBBNce/Ggg==",
-      "requires": {
+    "node_modules/@angular/compiler": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/core": "15.2.9"
+      },
+      "peerDependenciesMeta": {
+        "@angular/core": {
+          "optional": true
+        }
       }
     },
-    "@angular/compiler-cli": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.3.11.tgz",
-      "integrity": "sha512-cl+3Wzxt8NRi2WY+RdsxuQ3yQRUp8pSlfSlJJnfaKE1BEqap6uem2DovuhnIbmrLhxZ5xt7o+I1szyO6sn6+ag==",
+    "node_modules/@angular/compiler-cli": {
+      "version": "15.2.9",
       "dev": true,
-      "requires": {
-        "@babel/core": "^7.17.2",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "7.19.3",
+        "@jridgewell/sourcemap-codec": "^1.4.14",
         "chokidar": "^3.0.0",
         "convert-source-map": "^1.5.1",
         "dependency-graph": "^0.11.0",
-        "magic-string": "^0.26.0",
+        "magic-string": "^0.27.0",
         "reflect-metadata": "^0.1.2",
         "semver": "^7.0.0",
-        "sourcemap-codec": "^1.4.8",
         "tslib": "^2.3.0",
         "yargs": "^17.2.1"
       },
+      "bin": {
+        "ng-xi18n": "bundles/src/bin/ng_xi18n.js",
+        "ngc": "bundles/src/bin/ngc.js",
+        "ngcc": "bundles/ngcc/main-ngcc.js"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/compiler": "15.2.9",
+        "typescript": ">=4.8.2 <5.0"
+      }
+    },
+    "node_modules/@angular/compiler-cli/node_modules/@babel/core": {
+      "version": "7.19.3",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        },
-        "magic-string": {
-          "version": "0.26.7",
-          "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz",
-          "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==",
-          "dev": true,
-          "requires": {
-            "sourcemap-codec": "^1.4.8"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "@ampproject/remapping": "^2.1.0",
+        "@babel/code-frame": "^7.18.6",
+        "@babel/generator": "^7.19.3",
+        "@babel/helper-compilation-targets": "^7.19.3",
+        "@babel/helper-module-transforms": "^7.19.0",
+        "@babel/helpers": "^7.19.0",
+        "@babel/parser": "^7.19.3",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.19.3",
+        "@babel/types": "^7.19.3",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.1",
+        "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
       }
     },
-    "@angular/core": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.3.11.tgz",
-      "integrity": "sha512-9BmE2CxyV0g+AkBeuc8IwjSOiJ8Y+kptXnqD/J8EAFT3B0/fLGVnjFdZC6Sev9L0SNZb6qdzebpfIOLqbUjReQ==",
-      "requires": {
+    "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": {
+      "version": "6.3.1",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@angular/compiler-cli/node_modules/magic-string": {
+      "version": "0.27.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.4.13"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@angular/core": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "rxjs": "^6.5.3 || ^7.4.0",
+        "zone.js": "~0.11.4 || ~0.12.0 || ~0.13.0"
       }
     },
-    "@angular/forms": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.3.11.tgz",
-      "integrity": "sha512-iMgTNB+Qc3TsfAZSk1FnUE6MVoddPzxhG9AKCfSlvpjFh8VmXkIjxPL3dun7J8OjayT3X+B8f7LZ9AkKNXtBKw==",
-      "requires": {
+    "node_modules/@angular/forms": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "15.2.9",
+        "@angular/core": "15.2.9",
+        "@angular/platform-browser": "15.2.9",
+        "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "@angular/language-service": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-13.3.11.tgz",
-      "integrity": "sha512-EDw8L0RKrRYUYWB2P0xS1WRazYvv5gOguX+IwPZlCpR95QLQPTTpmNaqvnYjmFlvQjGHJYc8wqtJJIIMiL6FSA==",
-      "dev": true
+    "node_modules/@angular/language-service": {
+      "version": "15.2.9",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      }
     },
-    "@angular/localize": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-13.3.11.tgz",
-      "integrity": "sha512-plMAkj07mcYYsidv7R4NFRYdxQEJJMK7IGp7BeaEwtrBbplqQORIMy2HOUDet/gWg/D1b/KFTjTAhlmNdczYtg==",
-      "requires": {
-        "@babel/core": "7.17.2",
-        "glob": "7.2.0",
+    "node_modules/@angular/localize": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "7.19.3",
+        "glob": "8.1.0",
         "yargs": "^17.2.1"
+      },
+      "bin": {
+        "localize-extract": "tools/bundles/src/extract/cli.js",
+        "localize-migrate": "tools/bundles/src/migrate/cli.js",
+        "localize-translate": "tools/bundles/src/translate/cli.js"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/compiler": "15.2.9",
+        "@angular/compiler-cli": "15.2.9"
       }
     },
-    "@angular/platform-browser": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.3.11.tgz",
-      "integrity": "sha512-PG3chCErARb6wNzkOed2NsZmgvTmbumRx/6sMXqGkDKXYQm0JULnl4X42Rn+JCgJ9DLJi5/jrd1dbcBCrKk9Vg==",
-      "requires": {
+    "node_modules/@angular/localize/node_modules/@babel/core": {
+      "version": "7.19.3",
+      "license": "MIT",
+      "dependencies": {
+        "@ampproject/remapping": "^2.1.0",
+        "@babel/code-frame": "^7.18.6",
+        "@babel/generator": "^7.19.3",
+        "@babel/helper-compilation-targets": "^7.19.3",
+        "@babel/helper-module-transforms": "^7.19.0",
+        "@babel/helpers": "^7.19.0",
+        "@babel/parser": "^7.19.3",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.19.3",
+        "@babel/types": "^7.19.3",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.1",
+        "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@angular/localize/node_modules/semver": {
+      "version": "6.3.1",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@angular/platform-browser": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/animations": "15.2.9",
+        "@angular/common": "15.2.9",
+        "@angular/core": "15.2.9"
+      },
+      "peerDependenciesMeta": {
+        "@angular/animations": {
+          "optional": true
+        }
       }
     },
-    "@angular/platform-browser-dynamic": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.3.11.tgz",
-      "integrity": "sha512-xM0VRC1Nw//SHO3gkghUHyjCaaQbk1UYMq4vIu3iKVq9KLqOSZgccv0NcOKHzXXN3S5RgX2auuyOUOCD6ny1Pg==",
-      "requires": {
+    "node_modules/@angular/platform-browser-dynamic": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "15.2.9",
+        "@angular/compiler": "15.2.9",
+        "@angular/core": "15.2.9",
+        "@angular/platform-browser": "15.2.9"
       }
     },
-    "@angular/router": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.3.11.tgz",
-      "integrity": "sha512-bJTcxDYKEyoqtsi1kJcDJWLmEN+dXpwhU07SsqUwfyN4V5fYF1ApDhpJ4c17hNdjEqe106srT9tiHXhmWayhmQ==",
-      "requires": {
+    "node_modules/@angular/router": {
+      "version": "15.2.9",
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "15.2.9",
+        "@angular/core": "15.2.9",
+        "@angular/platform-browser": "15.2.9",
+        "rxjs": "^6.5.3 || ^7.4.0"
       }
     },
-    "@applitools/dom-capture": {
+    "node_modules/@applitools/dom-capture": {
       "version": "11.0.1",
-      "resolved": "https://registry.npmjs.org/@applitools/dom-capture/-/dom-capture-11.0.1.tgz",
-      "integrity": "sha512-6W9qbm8Hvn2jzy0Y7LfVc4sOOHza8C8MvLFI/q60bjyti1lpaddZaePkdE+UJi/6cGkDaCQNjOJTLJAm2xvW8g==",
       "dev": true,
-      "requires": {
+      "license": "SEE LICENSE IN LICENSE",
+      "dependencies": {
         "@applitools/dom-shared": "1.0.5",
         "@applitools/functional-commons": "1.6.0"
       },
-      "dependencies": {
-        "@applitools/dom-shared": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/@applitools/dom-shared/-/dom-shared-1.0.5.tgz",
-          "integrity": "sha512-O2zgnnqVi3/Atq7EQjURLa73XNaDFJCj8wHht6WQtxIv1EWYnPutNTmnJSKwK7FnbJAg65OVjZylcz4EezyYZA==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=8.9.0"
+      }
+    },
+    "node_modules/@applitools/dom-capture/node_modules/@applitools/dom-shared": {
+      "version": "1.0.5",
+      "dev": true,
+      "license": "SEE LICENSE IN LICENSE",
+      "engines": {
+        "node": ">=8.9.0"
       }
     },
-    "@applitools/dom-shared": {
+    "node_modules/@applitools/dom-shared": {
       "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/@applitools/dom-shared/-/dom-shared-1.0.6.tgz",
-      "integrity": "sha512-GnMhI0aOea+WLSFQmlFqs0pFemT4JtdB0CBwNdxdS19t+X4FL4uKthkMU1A2e7JmxIhe0nn6iJchGWzlNsXyQQ==",
-      "dev": true
+      "dev": true,
+      "license": "SEE LICENSE IN LICENSE",
+      "engines": {
+        "node": ">=8.9.0"
+      }
     },
-    "@applitools/dom-snapshot": {
+    "node_modules/@applitools/dom-snapshot": {
       "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@applitools/dom-snapshot/-/dom-snapshot-4.5.8.tgz",
-      "integrity": "sha512-Fp52Wqnto9UqDltB9SVbcIvTqDXF0l78uAlZh0ddDbPY8Kcq7eT6YsfQjzyl3cO9uZW/c75OFEHVzUrLJkn6jA==",
       "dev": true,
-      "requires": {
+      "license": "SEE LICENSE IN LICENSE",
+      "dependencies": {
         "@applitools/dom-shared": "1.0.6",
         "@applitools/functional-commons": "1.6.0",
         "css-tree": "1.0.0-alpha.39",
         "pako": "1.0.11"
+      },
+      "engines": {
+        "node": ">=8.9.0"
       }
     },
-    "@applitools/driver": {
+    "node_modules/@applitools/driver": {
       "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/@applitools/driver/-/driver-1.2.4.tgz",
-      "integrity": "sha512-lbISIrocCEL28sFN31uU6vhWUJkbCLzfdH7YSYruM+wsjmJkW/WB2jAPlfRCOcWQObxpnTWPGVokGjnh4cIIzQ==",
       "dev": true,
-      "requires": {
+      "license": "SEE LICENSE IN LICENSE",
+      "dependencies": {
         "@applitools/snippets": "2.1.7",
         "@applitools/types": "1.0.14",
         "@applitools/utils": "1.2.3"
+      },
+      "engines": {
+        "node": ">= 8.9.0"
       }
     },
-    "@applitools/eyes-cypress": {
+    "node_modules/@applitools/eyes-cypress": {
       "version": "3.22.5",
-      "resolved": "https://registry.npmjs.org/@applitools/eyes-cypress/-/eyes-cypress-3.22.5.tgz",
-      "integrity": "sha512-UKTmfI87spyTMvL4G3q8I6yYP9UoJKLgF347Qdbjkg3MzFo20oVAgKchuZZc+RnG2vzPn59gD13RA3JvJKJfOA==",
       "dev": true,
-      "requires": {
+      "license": "SEE LICENSE IN LICENSE",
+      "dependencies": {
         "@applitools/dom-snapshot": "4.5.8",
         "@applitools/functional-commons": "1.6.0",
         "@applitools/visual-grid-client": "15.8.31",
         "express": "4.17.1",
         "lodash.flatten": "4.4.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"
-          }
-        },
-        "array-flatten": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-          "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
-          "dev": true
-        },
-        "body-parser": {
-          "version": "1.19.0",
-          "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
-          "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
-          "dev": true,
-          "requires": {
-            "bytes": "3.1.0",
-            "content-type": "~1.0.4",
-            "debug": "2.6.9",
-            "depd": "~1.1.2",
-            "http-errors": "1.7.2",
-            "iconv-lite": "0.4.24",
-            "on-finished": "~2.3.0",
-            "qs": "6.7.0",
-            "raw-body": "2.4.0",
-            "type-is": "~1.6.17"
-          }
-        },
-        "bytes": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
-          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
-          "dev": true
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        },
-        "cookie": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
-          "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
-          "dev": true
-        },
-        "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"
-          }
-        },
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-          "dev": true
-        },
-        "destroy": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
-          "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==",
-          "dev": true
-        },
-        "express": {
-          "version": "4.17.1",
-          "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
-          "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
-          "dev": true,
-          "requires": {
-            "accepts": "~1.3.7",
-            "array-flatten": "1.1.1",
-            "body-parser": "1.19.0",
-            "content-disposition": "0.5.3",
-            "content-type": "~1.0.4",
-            "cookie": "0.4.0",
-            "cookie-signature": "1.0.6",
-            "debug": "2.6.9",
-            "depd": "~1.1.2",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "etag": "~1.8.1",
-            "finalhandler": "~1.1.2",
-            "fresh": "0.5.2",
-            "merge-descriptors": "1.0.1",
-            "methods": "~1.1.2",
-            "on-finished": "~2.3.0",
-            "parseurl": "~1.3.3",
-            "path-to-regexp": "0.1.7",
-            "proxy-addr": "~2.0.5",
-            "qs": "6.7.0",
-            "range-parser": "~1.2.1",
-            "safe-buffer": "5.1.2",
-            "send": "0.17.1",
-            "serve-static": "1.14.1",
-            "setprototypeof": "1.1.1",
-            "statuses": "~1.5.0",
-            "type-is": "~1.6.18",
-            "utils-merge": "1.0.1",
-            "vary": "~1.1.2"
-          }
-        },
-        "finalhandler": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
-          "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
-          "dev": true,
-          "requires": {
-            "debug": "2.6.9",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "on-finished": "~2.3.0",
-            "parseurl": "~1.3.3",
-            "statuses": "~1.5.0",
-            "unpipe": "~1.0.0"
-          }
-        },
-        "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
-        },
-        "http-errors": {
-          "version": "1.7.2",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
-          "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
-          "dev": true,
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.1",
-            "statuses": ">= 1.5.0 < 2",
-            "toidentifier": "1.0.0"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-          "dev": true
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        },
-        "on-finished": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-          "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
-          "dev": true,
-          "requires": {
-            "ee-first": "1.1.1"
-          }
-        },
-        "qs": {
-          "version": "6.7.0",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
-          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
-          "dev": true
-        },
-        "raw-body": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
-          "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
-          "dev": true,
-          "requires": {
-            "bytes": "3.1.0",
-            "http-errors": "1.7.2",
-            "iconv-lite": "0.4.24",
-            "unpipe": "1.0.0"
-          }
-        },
-        "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
-        },
-        "send": {
-          "version": "0.17.1",
-          "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
-          "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
-          "dev": true,
-          "requires": {
-            "debug": "2.6.9",
-            "depd": "~1.1.2",
-            "destroy": "~1.0.4",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "etag": "~1.8.1",
-            "fresh": "0.5.2",
-            "http-errors": "~1.7.2",
-            "mime": "1.6.0",
-            "ms": "2.1.1",
-            "on-finished": "~2.3.0",
-            "range-parser": "~1.2.1",
-            "statuses": "~1.5.0"
-          },
-          "dependencies": {
-            "ms": {
-              "version": "2.1.1",
-              "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-              "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
-              "dev": true
-            }
-          }
-        },
-        "serve-static": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
-          "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
-          "dev": true,
-          "requires": {
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "parseurl": "~1.3.3",
-            "send": "0.17.1"
-          }
-        },
-        "setprototypeof": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
-          "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
-          "dev": true
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-          "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"
-          }
-        },
-        "toidentifier": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
-          "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
-          "dev": true
-        }
+      "bin": {
+        "eyes-setup": "bin/eyes-setup.js"
+      },
+      "engines": {
+        "node": ">=8.0.0"
       }
     },
-    "@applitools/eyes-sdk-core": {
+    "node_modules/@applitools/eyes-sdk-core": {
       "version": "12.23.12",
-      "resolved": "https://registry.npmjs.org/@applitools/eyes-sdk-core/-/eyes-sdk-core-12.23.12.tgz",
-      "integrity": "sha512-nVDWYe1VvUpCQrvjUgDASIDDgHMtIjxXrI52Tvdov1ya/jhyNn6vMYHW9ZgSmjwdrYAoq+p7B90qIdy/HEV5DA==",
       "dev": true,
-      "requires": {
+      "license": "SEE LICENSE IN LICENSE",
+      "dependencies": {
         "@applitools/dom-capture": "11.0.1",
         "@applitools/dom-snapshot": "4.5.8",
         "@applitools/driver": "1.2.4",
         "stack-trace": "0.0.10",
         "tunnel": "0.0.6"
       },
-      "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"
-          }
-        },
-        "axios": {
-          "version": "0.21.4",
-          "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
-          "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
-          "dev": true,
-          "requires": {
-            "follow-redirects": "^1.14.0"
-          }
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "cosmiconfig": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
-          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
-          "dev": true,
-          "requires": {
-            "@types/parse-json": "^4.0.0",
-            "import-fresh": "^3.1.0",
-            "parse-json": "^5.0.0",
-            "path-type": "^4.0.0",
-            "yaml": "^1.7.2"
-          }
-        },
-        "debug": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
-          "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+      "bin": {
+        "eyes-check-network": "bin/runCheckNetwork.js"
+      },
+      "engines": {
+        "node": ">= 8.9.0"
       }
     },
-    "@applitools/functional-commons": {
+    "node_modules/@applitools/functional-commons": {
       "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/@applitools/functional-commons/-/functional-commons-1.6.0.tgz",
-      "integrity": "sha512-fwiF0CbeYHDEOTD/NKaFgaI8LvRcGYG2GaJJiRwcedKko16sQ8F3TK5wXfj2Ytjf+8gjwHwsEEX550z3yvDWxA==",
-      "dev": true
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8.0.0"
+      }
     },
-    "@applitools/http-commons": {
+    "node_modules/@applitools/http-commons": {
       "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/@applitools/http-commons/-/http-commons-2.4.3.tgz",
-      "integrity": "sha512-MBhrHcjDxhkyiw9bRlwe6uhjYg7IsNrsAbDf3w8wfB6iFrCABxsTnPKbnLoT4pyf//s2NFJqFUmcJpwJeEjJmw==",
       "dev": true,
-      "requires": {
+      "license": "Apache-2.0",
+      "dependencies": {
         "@applitools/functional-commons": "^1.5.5",
         "@applitools/monitoring-commons": "^1.0.19",
         "agentkeepalive": "^4.1.0",
         "debug": "^4.1.1",
         "lodash.merge": "^4.6.2",
         "node-fetch": "^2.6.0"
+      },
+      "engines": {
+        "node": ">=8.0.0"
       }
     },
-    "@applitools/isomorphic-fetch": {
+    "node_modules/@applitools/isomorphic-fetch": {
       "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@applitools/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz",
-      "integrity": "sha512-7rutaN/2M5wYjOIOTKS/Zuc1Na90fJNEAqvo/jCxt7nSD1kYscHV3aCk9t7RD59gmzLMvUTIxFbjl4RUMV8qfg==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "node-fetch": "^2.3.0",
         "whatwg-fetch": ">=0.10.0"
       }
     },
-    "@applitools/jsdom": {
+    "node_modules/@applitools/jsdom": {
       "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/@applitools/jsdom/-/jsdom-1.0.3.tgz",
-      "integrity": "sha512-Iy/Sw7GCzbVYdhg/yveTnss6mNma1Gr+MtYQhcd4ahG7aDyiHXYAAx8XSqO56dozaRz5trJVjQ4K8vf7NS+R+A==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "abab": "^2.0.0",
         "acorn": "^7.4.1",
         "acorn-globals": "^4.3.2",
         "ws": "^7.0.0",
         "xml-name-validator": "^3.0.0"
       },
-      "dependencies": {
-        "acorn": {
-          "version": "7.4.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-          "dev": true
-        },
-        "parse5": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
-          "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
-          "dev": true
-        },
-        "punycode": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-          "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-          "dev": true
-        },
-        "tr46": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
-          "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
-          "dev": true,
-          "requires": {
-            "punycode": "^2.1.0"
-          }
-        },
-        "webidl-conversions": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-          "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-          "dev": true
-        },
-        "whatwg-url": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
-          "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
-          "dev": true,
-          "requires": {
-            "lodash.sortby": "^4.7.0",
-            "tr46": "^1.0.1",
-            "webidl-conversions": "^4.0.2"
-          }
-        },
-        "ws": {
-          "version": "7.5.9",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
-          "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=8"
       }
     },
-    "@applitools/logger": {
+    "node_modules/@applitools/logger": {
       "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@applitools/logger/-/logger-1.0.4.tgz",
-      "integrity": "sha512-GQ/OdEVUY4fnkNLXVswSxaBncIfQqsfy+H1JyI85XGTjWIH4LqV/GQqnaiet2o4SHabGe8vHs0eyoWyT0WgAnQ==",
       "dev": true,
-      "requires": {
+      "license": "SEE LICENSE IN LICENSE",
+      "dependencies": {
         "@applitools/utils": "1.2.3",
         "chalk": "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"
-          }
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+      "engines": {
+        "node": ">= 8.9.0"
       }
     },
-    "@applitools/monitoring-commons": {
+    "node_modules/@applitools/monitoring-commons": {
       "version": "1.0.19",
-      "resolved": "https://registry.npmjs.org/@applitools/monitoring-commons/-/monitoring-commons-1.0.19.tgz",
-      "integrity": "sha512-rzEOvGoiEF4KnK0PJ9I0btdwnaNlIPLYhjF1vTEG15PoucbbKpix9fYusxWlDG7kMiZya8ZycVPc0woVlNaHRQ==",
       "dev": true,
-      "requires": {
+      "license": "Apache-2.0",
+      "dependencies": {
         "debug": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8.0.0"
       }
     },
-    "@applitools/screenshoter": {
+    "node_modules/@applitools/screenshoter": {
       "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/@applitools/screenshoter/-/screenshoter-3.2.4.tgz",
-      "integrity": "sha512-v1lhUVMZYvjP2aFm2XTZmschRaPv0xJiVmi4tc7aWcWk4Gu4LgrmcV0yI6QqPkl5fGuK/VwvRBg9tyvX1eWZhA==",
       "dev": true,
-      "requires": {
+      "license": "SEE LICENSE IN LICENSE",
+      "dependencies": {
         "@applitools/snippets": "2.1.7",
         "@applitools/utils": "1.2.3",
         "png-async": "0.9.4"
+      },
+      "engines": {
+        "node": ">= 8.9.0"
       }
     },
-    "@applitools/snippets": {
+    "node_modules/@applitools/snippets": {
       "version": "2.1.7",
-      "resolved": "https://registry.npmjs.org/@applitools/snippets/-/snippets-2.1.7.tgz",
-      "integrity": "sha512-Tr4Gj7Qov/oPy+8WI4oVmmubxqpOzr8P3Wjzpl6rA57xKLg6/TiIg5oZNb4+jEmO2ShjNYLaEwRWHl7kPgb4fw==",
-      "dev": true
+      "dev": true,
+      "license": "SEE LICENSE IN LICENSE",
+      "engines": {
+        "node": ">=8.9.0"
+      }
     },
-    "@applitools/types": {
+    "node_modules/@applitools/types": {
       "version": "1.0.14",
-      "resolved": "https://registry.npmjs.org/@applitools/types/-/types-1.0.14.tgz",
-      "integrity": "sha512-Exfi8EOGGBwpRpaLizXmsUXInXGXNU26qup7AjLJSJLYETwn3Q3W+0aLHBUbdFA87w9fPCQjXJuZxJgqsNpVig==",
-      "dev": true
+      "dev": true,
+      "license": "SEE LICENSE IN LICENSE",
+      "engines": {
+        "node": ">= 8.9.0"
+      }
     },
-    "@applitools/utils": {
+    "node_modules/@applitools/utils": {
       "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/@applitools/utils/-/utils-1.2.3.tgz",
-      "integrity": "sha512-MZXsrzeHTvjFLzpfyKRDUmZWzNxH3gWd3reqYf+1kYimALKB3CO82VDNmkaGJykrRbxEP03Yqha7fHJj9eKslQ==",
-      "dev": true
+      "dev": true,
+      "license": "SEE LICENSE IN LICENSE",
+      "engines": {
+        "node": ">= 8.9.0"
+      }
     },
-    "@applitools/visual-grid-client": {
+    "node_modules/@applitools/visual-grid-client": {
       "version": "15.8.31",
-      "resolved": "https://registry.npmjs.org/@applitools/visual-grid-client/-/visual-grid-client-15.8.31.tgz",
-      "integrity": "sha512-DPkZ5ynlPcBKx8XMXGOtKjaxJkJs11Ui2SPRPwzGD4Soilq/ijcOfBbNBx89KC7TkntOVlInD/rZBIAfoElO/Q==",
       "dev": true,
-      "requires": {
+      "license": "SEE LICENSE IN LICENSE",
+      "dependencies": {
         "@applitools/eyes-sdk-core": "12.23.12",
         "@applitools/functional-commons": "1.6.0",
         "@applitools/http-commons": "2.4.3",
         "postcss-value-parser": "4.1.0",
         "throat": "5.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"
-          }
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "mime-db": {
-          "version": "1.44.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-          "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
-          "dev": true
-        },
-        "mime-types": {
-          "version": "2.1.27",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-          "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-          "dev": true,
-          "requires": {
-            "mime-db": "1.44.0"
-          }
-        },
-        "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-value-parser": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
-          "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
-          "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"
-          }
-        }
+      "engines": {
+        "node": ">=8.9.0"
       }
     },
-    "@apteco/ngth": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@apteco/ngth/-/ngth-1.5.0.tgz",
-      "integrity": "sha512-LBpdybaZbc5PFj8ifNIf6dXGeoQ8tlPhfbN2skcM12ojAe8qH2ymHx9f/ZggVs+KyBuVQLVuJ++jzukG13wryw==",
+    "node_modules/@assemblyscript/loader": {
+      "version": "0.10.1",
       "dev": true,
-      "requires": {
-        "tslib": "^2.3.0"
+      "license": "Apache-2.0"
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.22.13",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/highlight": "^7.22.13",
+        "chalk": "^2.4.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@assemblyscript/loader": {
-      "version": "0.10.1",
-      "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz",
-      "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==",
-      "dev": true
+    "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/chalk": {
+      "version": "2.4.2",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/color-convert": {
+      "version": "1.9.3",
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/color-name": {
+      "version": "1.1.3",
+      "license": "MIT"
     },
-    "@babel/code-frame": {
-      "version": "7.21.4",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
-      "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
-      "requires": {
-        "@babel/highlight": "^7.18.6"
-      }
-    },
-    "@babel/compat-data": {
-      "version": "7.21.9",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz",
-      "integrity": "sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ=="
-    },
-    "@babel/core": {
-      "version": "7.17.2",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz",
-      "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==",
-      "requires": {
-        "@ampproject/remapping": "^2.0.0",
-        "@babel/code-frame": "^7.16.7",
-        "@babel/generator": "^7.17.0",
-        "@babel/helper-compilation-targets": "^7.16.7",
-        "@babel/helper-module-transforms": "^7.16.7",
-        "@babel/helpers": "^7.17.2",
-        "@babel/parser": "^7.17.0",
-        "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.0",
-        "@babel/types": "^7.17.0",
+    "node_modules/@babel/code-frame/node_modules/has-flag": {
+      "version": "3.0.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/code-frame/node_modules/supports-color": {
+      "version": "5.5.0",
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.22.20",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.20.12",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@ampproject/remapping": "^2.1.0",
+        "@babel/code-frame": "^7.18.6",
+        "@babel/generator": "^7.20.7",
+        "@babel/helper-compilation-targets": "^7.20.7",
+        "@babel/helper-module-transforms": "^7.20.11",
+        "@babel/helpers": "^7.20.7",
+        "@babel/parser": "^7.20.7",
+        "@babel/template": "^7.20.7",
+        "@babel/traverse": "^7.20.12",
+        "@babel/types": "^7.20.7",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
-        "json5": "^2.1.2",
+        "json5": "^2.2.2",
         "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@babel/core/node_modules/semver": {
+      "version": "6.3.1",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "@babel/generator": {
-      "version": "7.21.9",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz",
-      "integrity": "sha512-F3fZga2uv09wFdEjEQIJxXALXfz0+JaOb7SabvVMmjHxeVTuGW8wgE8Vp1Hd7O+zMTYtcfEISGRzPkeiaPPsvg==",
-      "requires": {
-        "@babel/types": "^7.21.5",
+    "node_modules/@babel/generator": {
+      "version": "7.20.14",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.20.7",
         "@jridgewell/gen-mapping": "^0.3.2",
-        "@jridgewell/trace-mapping": "^0.3.17",
         "jsesc": "^2.5.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.3",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "@babel/helper-annotate-as-pure": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
-      "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
+    "node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.18.6",
       "dev": true,
-      "requires": {
-        "@babel/types": "^7.16.7"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.21.5.tgz",
-      "integrity": "sha512-uNrjKztPLkUk7bpCNC0jEKDJzzkvel/W+HguzbN8krA+LPfC1CEobJEvAvGka2A/M+ViOqXdcRL0GqPUJSjx9g==",
+    "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/types": "^7.21.5"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-compilation-targets": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.5.tgz",
-      "integrity": "sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==",
-      "requires": {
-        "@babel/compat-data": "^7.21.5",
-        "@babel/helper-validator-option": "^7.21.0",
-        "browserslist": "^4.21.3",
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.22.15",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.22.9",
+        "@babel/helper-validator-option": "^7.22.15",
+        "browserslist": "^4.21.9",
         "lru-cache": "^5.1.1",
-        "semver": "^6.3.0"
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+      "version": "6.3.1",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "@babel/helper-create-class-features-plugin": {
-      "version": "7.21.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz",
-      "integrity": "sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==",
+    "node_modules/@babel/helper-create-class-features-plugin": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.18.6",
-        "@babel/helper-environment-visitor": "^7.21.5",
-        "@babel/helper-function-name": "^7.21.0",
-        "@babel/helper-member-expression-to-functions": "^7.21.5",
-        "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-replace-supers": "^7.21.5",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
-        "@babel/helper-split-export-declaration": "^7.18.6",
-        "semver": "^6.3.0"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-member-expression-to-functions": "^7.22.15",
+        "@babel/helper-optimise-call-expression": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": {
-          "version": "7.18.6",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-          "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.18.6"
-          }
-        }
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.21.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.8.tgz",
-      "integrity": "sha512-zGuSdedkFtsFHGbexAvNuipg1hbtitDLo2XE8/uf6Y9sOQV1xsYX/2pNbtedp/X0eU1pIt+kGvaqHCowkRbS5g==",
+    "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": {
+      "version": "7.22.6",
       "dev": true,
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.18.6",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
+      "version": "6.3.1",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/helper-create-regexp-features-plugin": {
+      "version": "7.22.15",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
         "regexpu-core": "^5.3.1",
-        "semver": "^6.3.0"
+        "semver": "^6.3.1"
       },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": {
-          "version": "7.18.6",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-          "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.18.6"
-          }
-        }
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
+      "version": "6.3.1",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "@babel/helper-define-polyfill-provider": {
+    "node_modules/@babel/helper-define-polyfill-provider": {
       "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
-      "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-compilation-targets": "^7.17.7",
         "@babel/helper-plugin-utils": "^7.16.7",
         "debug": "^4.1.1",
         "lodash.debounce": "^4.0.8",
         "resolve": "^1.14.2",
         "semver": "^6.1.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.4.0-0"
       }
     },
-    "@babel/helper-environment-visitor": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz",
-      "integrity": "sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ=="
-    },
-    "@babel/helper-function-name": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
-      "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
-      "requires": {
-        "@babel/template": "^7.20.7",
-        "@babel/types": "^7.21.0"
+    "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": {
+      "version": "6.3.1",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "@babel/helper-hoist-variables": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
-      "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
-      "requires": {
-        "@babel/types": "^7.18.6"
+    "node_modules/@babel/helper-environment-visitor": {
+      "version": "7.22.20",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-member-expression-to-functions": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz",
-      "integrity": "sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.21.5"
+    "node_modules/@babel/helper-function-name": {
+      "version": "7.23.0",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.22.15",
+        "@babel/types": "^7.23.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-module-imports": {
-      "version": "7.21.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz",
-      "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==",
-      "requires": {
-        "@babel/types": "^7.21.4"
+    "node_modules/@babel/helper-function-name/node_modules/@babel/template": {
+      "version": "7.22.15",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.22.13",
+        "@babel/parser": "^7.22.15",
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-module-transforms": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz",
-      "integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==",
-      "requires": {
-        "@babel/helper-environment-visitor": "^7.21.5",
-        "@babel/helper-module-imports": "^7.21.4",
-        "@babel/helper-simple-access": "^7.21.5",
-        "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/helper-validator-identifier": "^7.19.1",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.5",
-        "@babel/types": "^7.21.5"
+    "node_modules/@babel/helper-hoist-variables": {
+      "version": "7.22.5",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-optimise-call-expression": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
-      "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
+    "node_modules/@babel/helper-member-expression-to-functions": {
+      "version": "7.23.0",
       "dev": true,
-      "requires": {
-        "@babel/types": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.23.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-plugin-utils": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz",
-      "integrity": "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==",
-      "dev": true
-    },
-    "@babel/helper-remap-async-to-generator": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
-      "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.18.6",
-        "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-wrap-function": "^7.18.9",
-        "@babel/types": "^7.18.9"
-      },
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": {
-          "version": "7.18.6",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-          "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.18.6"
-          }
-        }
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.22.15",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-replace-supers": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.21.5.tgz",
-      "integrity": "sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-environment-visitor": "^7.21.5",
-        "@babel/helper-member-expression-to-functions": "^7.21.5",
-        "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.5",
-        "@babel/types": "^7.21.5"
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.23.0",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-simple-access": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/helper-validator-identifier": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
-    "@babel/helper-simple-access": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz",
-      "integrity": "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==",
-      "requires": {
-        "@babel/types": "^7.21.5"
+    "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": {
+      "version": "7.22.6",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.20.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
-      "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
+    "node_modules/@babel/helper-optimise-call-expression": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/types": "^7.20.0"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-split-export-declaration": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
-      "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
-      "requires": {
-        "@babel/types": "^7.18.6"
+    "node_modules/@babel/helper-plugin-utils": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/helper-string-parser": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz",
-      "integrity": "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w=="
-    },
-    "@babel/helper-validator-identifier": {
-      "version": "7.19.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
-      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
-    },
-    "@babel/helper-validator-option": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
-      "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ=="
-    },
-    "@babel/helper-wrap-function": {
-      "version": "7.20.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
-      "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
+    "node_modules/@babel/helper-remap-async-to-generator": {
+      "version": "7.22.20",
       "dev": true,
-      "requires": {
-        "@babel/helper-function-name": "^7.19.0",
-        "@babel/template": "^7.18.10",
-        "@babel/traverse": "^7.20.5",
-        "@babel/types": "^7.20.5"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-wrap-function": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
-    "@babel/helpers": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.5.tgz",
-      "integrity": "sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==",
-      "requires": {
-        "@babel/template": "^7.20.7",
-        "@babel/traverse": "^7.21.5",
-        "@babel/types": "^7.21.5"
-      }
+    "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-replace-supers": {
+      "version": "7.22.20",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-member-expression-to-functions": "^7.22.15",
+        "@babel/helper-optimise-call-expression": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-simple-access": {
+      "version": "7.22.5",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
     },
-    "@babel/highlight": {
+    "node_modules/@babel/helper-split-export-declaration": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
-      "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
-      "requires": {
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "chalk": "^2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.22.5",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.22.20",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.22.15",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-wrap-function": {
+      "version": "7.22.20",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/template": "^7.22.15",
+        "@babel/types": "^7.22.19"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": {
+      "version": "7.22.15",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.22.13",
+        "@babel/parser": "^7.22.15",
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.23.1",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.22.15",
+        "@babel/traverse": "^7.23.0",
+        "@babel/types": "^7.23.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers/node_modules/@babel/template": {
+      "version": "7.22.15",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.22.13",
+        "@babel/parser": "^7.22.15",
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/highlight": {
+      "version": "7.22.20",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.22.20",
+        "chalk": "^2.4.2",
         "js-tokens": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/parser": {
-      "version": "7.21.9",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz",
-      "integrity": "sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g=="
+    "node_modules/@babel/highlight/node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
-      "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
+    "node_modules/@babel/highlight/node_modules/chalk": {
+      "version": "2.4.2",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/color-convert": {
+      "version": "1.9.3",
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/color-name": {
+      "version": "1.1.3",
+      "license": "MIT"
+    },
+    "node_modules/@babel/highlight/node_modules/has-flag": {
+      "version": "3.0.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/supports-color": {
+      "version": "5.5.0",
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.23.0",
+      "license": "MIT",
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
-    "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz",
-      "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==",
+    "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.20.2",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
-        "@babel/plugin-proposal-optional-chaining": "^7.20.7"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/plugin-transform-optional-chaining": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.13.0"
       }
     },
-    "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz",
-      "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==",
+    "node_modules/@babel/plugin-proposal-async-generator-functions": {
+      "version": "7.20.7",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-remap-async-to-generator": "^7.16.8",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.20.2",
+        "@babel/helper-remap-async-to-generator": "^7.18.9",
         "@babel/plugin-syntax-async-generators": "^7.8.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-class-properties": {
+    "node_modules/@babel/plugin-proposal-class-properties": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
-      "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-create-class-features-plugin": "^7.18.6",
         "@babel/helper-plugin-utils": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-class-static-block": {
+    "node_modules/@babel/plugin-proposal-class-static-block": {
       "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz",
-      "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-create-class-features-plugin": "^7.21.0",
         "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/plugin-syntax-class-static-block": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.12.0"
       }
     },
-    "@babel/plugin-proposal-dynamic-import": {
+    "node_modules/@babel/plugin-proposal-dynamic-import": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
-      "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-export-namespace-from": {
+    "node_modules/@babel/plugin-proposal-export-namespace-from": {
       "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
-      "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.18.9",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-json-strings": {
+    "node_modules/@babel/plugin-proposal-json-strings": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
-      "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-json-strings": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-logical-assignment-operators": {
+    "node_modules/@babel/plugin-proposal-logical-assignment-operators": {
       "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz",
-      "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-nullish-coalescing-operator": {
+    "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
-      "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-numeric-separator": {
+    "node_modules/@babel/plugin-proposal-numeric-separator": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
-      "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-object-rest-spread": {
+    "node_modules/@babel/plugin-proposal-object-rest-spread": {
       "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz",
-      "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/compat-data": "^7.20.5",
         "@babel/helper-compilation-targets": "^7.20.7",
         "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
         "@babel/plugin-transform-parameters": "^7.20.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-optional-catch-binding": {
+    "node_modules/@babel/plugin-proposal-optional-catch-binding": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
-      "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-optional-chaining": {
+    "node_modules/@babel/plugin-proposal-optional-chaining": {
       "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz",
-      "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
         "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-private-methods": {
+    "node_modules/@babel/plugin-proposal-private-methods": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
-      "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-create-class-features-plugin": "^7.18.6",
         "@babel/helper-plugin-utils": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-private-property-in-object": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz",
-      "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==",
+    "node_modules/@babel/plugin-proposal-private-property-in-object": {
+      "version": "7.21.11",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
         "@babel/helper-create-class-features-plugin": "^7.21.0",
         "@babel/helper-plugin-utils": "^7.20.2",
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
       },
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": {
-          "version": "7.18.6",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-          "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.18.6"
-          }
-        }
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-proposal-unicode-property-regex": {
+    "node_modules/@babel/plugin-proposal-unicode-property-regex": {
       "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
-      "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-create-regexp-features-plugin": "^7.18.6",
         "@babel/helper-plugin-utils": "^7.18.6"
+      },
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-async-generators": {
+    "node_modules/@babel/plugin-syntax-async-generators": {
       "version": "7.8.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
-      "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-bigint": {
+    "node_modules/@babel/plugin-syntax-bigint": {
       "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
-      "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-class-properties": {
+    "node_modules/@babel/plugin-syntax-class-properties": {
       "version": "7.12.13",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
-      "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.12.13"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-class-static-block": {
+    "node_modules/@babel/plugin-syntax-class-static-block": {
       "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
-      "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-dynamic-import": {
+    "node_modules/@babel/plugin-syntax-dynamic-import": {
       "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
-      "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-export-namespace-from": {
+    "node_modules/@babel/plugin-syntax-export-namespace-from": {
       "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
-      "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-syntax-import-assertions": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-import-meta": {
+    "node_modules/@babel/plugin-syntax-import-meta": {
       "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
-      "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-json-strings": {
+    "node_modules/@babel/plugin-syntax-json-strings": {
       "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
-      "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-jsx": {
-      "version": "7.21.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz",
-      "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==",
+    "node_modules/@babel/plugin-syntax-jsx": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.20.2"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-logical-assignment-operators": {
+    "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
       "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
-      "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-nullish-coalescing-operator": {
+    "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
       "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
-      "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-numeric-separator": {
+    "node_modules/@babel/plugin-syntax-numeric-separator": {
       "version": "7.10.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
-      "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.10.4"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-object-rest-spread": {
+    "node_modules/@babel/plugin-syntax-object-rest-spread": {
       "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-optional-catch-binding": {
+    "node_modules/@babel/plugin-syntax-optional-catch-binding": {
       "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-optional-chaining": {
+    "node_modules/@babel/plugin-syntax-optional-chaining": {
       "version": "7.8.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
-      "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.8.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-private-property-in-object": {
+    "node_modules/@babel/plugin-syntax-private-property-in-object": {
       "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
-      "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-top-level-await": {
+    "node_modules/@babel/plugin-syntax-top-level-await": {
       "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
-      "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.14.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-syntax-typescript": {
-      "version": "7.21.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz",
-      "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==",
+    "node_modules/@babel/plugin-syntax-typescript": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.20.2"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-arrow-functions": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz",
-      "integrity": "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==",
+    "node_modules/@babel/plugin-transform-arrow-functions": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.21.5"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-async-to-generator": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz",
-      "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==",
+    "node_modules/@babel/plugin-transform-async-to-generator": {
+      "version": "7.20.7",
       "dev": true,
-      "requires": {
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-remap-async-to-generator": "^7.16.8"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.20.2",
+        "@babel/helper-remap-async-to-generator": "^7.18.9"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
-      "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
+    "node_modules/@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-block-scoping": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz",
-      "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==",
+    "node_modules/@babel/plugin-transform-block-scoping": {
+      "version": "7.23.0",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.20.2"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-classes": {
-      "version": "7.21.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz",
-      "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==",
+    "node_modules/@babel/plugin-transform-classes": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.18.6",
-        "@babel/helper-compilation-targets": "^7.20.7",
-        "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.21.0",
-        "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.20.2",
-        "@babel/helper-replace-supers": "^7.20.7",
-        "@babel/helper-split-export-declaration": "^7.18.6",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-compilation-targets": "^7.22.15",
+        "@babel/helper-environment-visitor": "^7.22.5",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-optimise-call-expression": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.9",
+        "@babel/helper-split-export-declaration": "^7.22.6",
         "globals": "^11.1.0"
       },
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": {
-          "version": "7.18.6",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-          "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.18.6"
-          }
-        }
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-computed-properties": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz",
-      "integrity": "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==",
+    "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.21.5",
-        "@babel/template": "^7.20.7"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/plugin-transform-destructuring": {
-      "version": "7.21.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz",
-      "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==",
+    "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-split-export-declaration": {
+      "version": "7.22.6",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.20.2"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/plugin-transform-dotall-regex": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
-      "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
+    "node_modules/@babel/plugin-transform-computed-properties": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/template": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
-      "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
+    "node_modules/@babel/plugin-transform-computed-properties/node_modules/@babel/template": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.22.13",
+        "@babel/parser": "^7.22.15",
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
-      "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
+    "node_modules/@babel/plugin-transform-destructuring": {
+      "version": "7.23.0",
       "dev": true,
-      "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-for-of": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz",
-      "integrity": "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==",
+    "node_modules/@babel/plugin-transform-dotall-regex": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.21.5"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-function-name": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
-      "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
+    "node_modules/@babel/plugin-transform-duplicate-keys": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-compilation-targets": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-literals": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
-      "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
+    "node_modules/@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-member-expression-literals": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
-      "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
+    "node_modules/@babel/plugin-transform-for-of": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-modules-amd": {
-      "version": "7.20.11",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz",
-      "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==",
+    "node_modules/@babel/plugin-transform-function-name": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-module-transforms": "^7.20.11",
-        "@babel/helper-plugin-utils": "^7.20.2"
-      }
-    },
-    "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz",
-      "integrity": "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-compilation-targets": "^7.22.5",
+        "@babel/helper-function-name": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-literals": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-module-transforms": "^7.21.5",
-        "@babel/helper-plugin-utils": "^7.21.5",
-        "@babel/helper-simple-access": "^7.21.5"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.20.11",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz",
-      "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==",
+    "node_modules/@babel/plugin-transform-member-expression-literals": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-hoist-variables": "^7.18.6",
-        "@babel/helper-module-transforms": "^7.20.11",
-        "@babel/helper-plugin-utils": "^7.20.2",
-        "@babel/helper-validator-identifier": "^7.19.1"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-modules-umd": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
-      "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
+    "node_modules/@babel/plugin-transform-modules-amd": {
+      "version": "7.23.0",
       "dev": true,
-      "requires": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.23.0",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.20.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
-      "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
+    "node_modules/@babel/plugin-transform-modules-commonjs": {
+      "version": "7.23.0",
       "dev": true,
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.20.5",
-        "@babel/helper-plugin-utils": "^7.20.2"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.23.0",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-simple-access": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-new-target": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
-      "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
+    "node_modules/@babel/plugin-transform-modules-systemjs": {
+      "version": "7.23.0",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-module-transforms": "^7.23.0",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.20"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-object-super": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
-      "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
+    "node_modules/@babel/plugin-transform-modules-umd": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "@babel/helper-replace-supers": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-transforms": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-parameters": {
-      "version": "7.21.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz",
-      "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==",
+    "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.20.2"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
-    "@babel/plugin-transform-property-literals": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
-      "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
+    "node_modules/@babel/plugin-transform-new-target": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-react-display-name": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
-      "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
+    "node_modules/@babel/plugin-transform-object-super": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-replace-supers": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-react-jsx": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.5.tgz",
-      "integrity": "sha512-ELdlq61FpoEkHO6gFRpfj0kUgSwQTGoaEU8eMRoS8Dv3v6e7BjEAj5WMtIBRdHUeAioMhKP5HyxNzNnP+heKbA==",
+    "node_modules/@babel/plugin-transform-optional-chaining": {
+      "version": "7.23.0",
       "dev": true,
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.18.6",
-        "@babel/helper-module-imports": "^7.21.4",
-        "@babel/helper-plugin-utils": "^7.21.5",
-        "@babel/plugin-syntax-jsx": "^7.21.4",
-        "@babel/types": "^7.21.5"
-      },
-      "dependencies": {
-        "@babel/helper-annotate-as-pure": {
-          "version": "7.18.6",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-          "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.18.6"
-          }
-        }
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-react-jsx-development": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
-      "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+    "node_modules/@babel/plugin-transform-parameters": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/plugin-transform-react-jsx": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-react-pure-annotations": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
-      "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
+    "node_modules/@babel/plugin-transform-property-literals": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
       },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-react-display-name": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@babel/helper-annotate-as-pure": {
-          "version": "7.18.6",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
-          "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.18.6"
-          }
-        }
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-regenerator": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz",
-      "integrity": "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==",
+    "node_modules/@babel/plugin-transform-react-jsx": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.21.5",
-        "regenerator-transform": "^0.15.1"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-module-imports": "^7.22.15",
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/plugin-syntax-jsx": "^7.22.5",
+        "@babel/types": "^7.22.15"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-reserved-words": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
-      "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
+    "node_modules/@babel/plugin-transform-react-jsx-development": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/plugin-transform-react-jsx": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-runtime": {
-      "version": "7.16.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz",
-      "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==",
+    "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "babel-plugin-polyfill-corejs2": "^0.3.0",
-        "babel-plugin-polyfill-corejs3": "^0.5.0",
-        "babel-plugin-polyfill-regenerator": "^0.3.0",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-react-pure-annotations": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-regenerator": {
+      "version": "7.22.10",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "regenerator-transform": "^0.15.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-reserved-words": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-runtime": {
+      "version": "7.19.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "babel-plugin-polyfill-corejs2": "^0.3.3",
+        "babel-plugin-polyfill-corejs3": "^0.6.0",
+        "babel-plugin-polyfill-regenerator": "^0.4.1",
         "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
-      "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
+    "node_modules/@babel/plugin-transform-runtime/node_modules/semver": {
+      "version": "6.3.1",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "@babel/plugin-transform-spread": {
-      "version": "7.20.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz",
-      "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==",
+    "node_modules/@babel/plugin-transform-shorthand-properties": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.20.2",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-sticky-regex": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
-      "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
+    "node_modules/@babel/plugin-transform-spread": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-template-literals": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
-      "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
+    "node_modules/@babel/plugin-transform-sticky-regex": {
+      "version": "7.22.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/@babel/plugin-transform-template-literals": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
-      "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
+    "node_modules/@babel/plugin-transform-typeof-symbol": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-unicode-escapes": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz",
-      "integrity": "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==",
+    "node_modules/@babel/plugin-transform-unicode-escapes": {
+      "version": "7.22.10",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.21.5"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/plugin-transform-unicode-regex": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
-      "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
+    "node_modules/@babel/plugin-transform-unicode-regex": {
+      "version": "7.22.5",
       "dev": true,
-      "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+        "@babel/helper-plugin-utils": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/preset-env": {
-      "version": "7.16.11",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz",
-      "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==",
+    "node_modules/@babel/preset-env": {
+      "version": "7.20.2",
       "dev": true,
-      "requires": {
-        "@babel/compat-data": "^7.16.8",
-        "@babel/helper-compilation-targets": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-validator-option": "^7.16.7",
-        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7",
-        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7",
-        "@babel/plugin-proposal-async-generator-functions": "^7.16.8",
-        "@babel/plugin-proposal-class-properties": "^7.16.7",
-        "@babel/plugin-proposal-class-static-block": "^7.16.7",
-        "@babel/plugin-proposal-dynamic-import": "^7.16.7",
-        "@babel/plugin-proposal-export-namespace-from": "^7.16.7",
-        "@babel/plugin-proposal-json-strings": "^7.16.7",
-        "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7",
-        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7",
-        "@babel/plugin-proposal-numeric-separator": "^7.16.7",
-        "@babel/plugin-proposal-object-rest-spread": "^7.16.7",
-        "@babel/plugin-proposal-optional-catch-binding": "^7.16.7",
-        "@babel/plugin-proposal-optional-chaining": "^7.16.7",
-        "@babel/plugin-proposal-private-methods": "^7.16.11",
-        "@babel/plugin-proposal-private-property-in-object": "^7.16.7",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.16.7",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.20.1",
+        "@babel/helper-compilation-targets": "^7.20.0",
+        "@babel/helper-plugin-utils": "^7.20.2",
+        "@babel/helper-validator-option": "^7.18.6",
+        "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
+        "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
+        "@babel/plugin-proposal-async-generator-functions": "^7.20.1",
+        "@babel/plugin-proposal-class-properties": "^7.18.6",
+        "@babel/plugin-proposal-class-static-block": "^7.18.6",
+        "@babel/plugin-proposal-dynamic-import": "^7.18.6",
+        "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
+        "@babel/plugin-proposal-json-strings": "^7.18.6",
+        "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
+        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
+        "@babel/plugin-proposal-numeric-separator": "^7.18.6",
+        "@babel/plugin-proposal-object-rest-spread": "^7.20.2",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
+        "@babel/plugin-proposal-optional-chaining": "^7.18.9",
+        "@babel/plugin-proposal-private-methods": "^7.18.6",
+        "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
         "@babel/plugin-syntax-async-generators": "^7.8.4",
         "@babel/plugin-syntax-class-properties": "^7.12.13",
         "@babel/plugin-syntax-class-static-block": "^7.14.5",
         "@babel/plugin-syntax-dynamic-import": "^7.8.3",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+        "@babel/plugin-syntax-import-assertions": "^7.20.0",
         "@babel/plugin-syntax-json-strings": "^7.8.3",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
         "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
         "@babel/plugin-syntax-optional-chaining": "^7.8.3",
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
         "@babel/plugin-syntax-top-level-await": "^7.14.5",
-        "@babel/plugin-transform-arrow-functions": "^7.16.7",
-        "@babel/plugin-transform-async-to-generator": "^7.16.8",
-        "@babel/plugin-transform-block-scoped-functions": "^7.16.7",
-        "@babel/plugin-transform-block-scoping": "^7.16.7",
-        "@babel/plugin-transform-classes": "^7.16.7",
-        "@babel/plugin-transform-computed-properties": "^7.16.7",
-        "@babel/plugin-transform-destructuring": "^7.16.7",
-        "@babel/plugin-transform-dotall-regex": "^7.16.7",
-        "@babel/plugin-transform-duplicate-keys": "^7.16.7",
-        "@babel/plugin-transform-exponentiation-operator": "^7.16.7",
-        "@babel/plugin-transform-for-of": "^7.16.7",
-        "@babel/plugin-transform-function-name": "^7.16.7",
-        "@babel/plugin-transform-literals": "^7.16.7",
-        "@babel/plugin-transform-member-expression-literals": "^7.16.7",
-        "@babel/plugin-transform-modules-amd": "^7.16.7",
-        "@babel/plugin-transform-modules-commonjs": "^7.16.8",
-        "@babel/plugin-transform-modules-systemjs": "^7.16.7",
-        "@babel/plugin-transform-modules-umd": "^7.16.7",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8",
-        "@babel/plugin-transform-new-target": "^7.16.7",
-        "@babel/plugin-transform-object-super": "^7.16.7",
-        "@babel/plugin-transform-parameters": "^7.16.7",
-        "@babel/plugin-transform-property-literals": "^7.16.7",
-        "@babel/plugin-transform-regenerator": "^7.16.7",
-        "@babel/plugin-transform-reserved-words": "^7.16.7",
-        "@babel/plugin-transform-shorthand-properties": "^7.16.7",
-        "@babel/plugin-transform-spread": "^7.16.7",
-        "@babel/plugin-transform-sticky-regex": "^7.16.7",
-        "@babel/plugin-transform-template-literals": "^7.16.7",
-        "@babel/plugin-transform-typeof-symbol": "^7.16.7",
-        "@babel/plugin-transform-unicode-escapes": "^7.16.7",
-        "@babel/plugin-transform-unicode-regex": "^7.16.7",
+        "@babel/plugin-transform-arrow-functions": "^7.18.6",
+        "@babel/plugin-transform-async-to-generator": "^7.18.6",
+        "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
+        "@babel/plugin-transform-block-scoping": "^7.20.2",
+        "@babel/plugin-transform-classes": "^7.20.2",
+        "@babel/plugin-transform-computed-properties": "^7.18.9",
+        "@babel/plugin-transform-destructuring": "^7.20.2",
+        "@babel/plugin-transform-dotall-regex": "^7.18.6",
+        "@babel/plugin-transform-duplicate-keys": "^7.18.9",
+        "@babel/plugin-transform-exponentiation-operator": "^7.18.6",
+        "@babel/plugin-transform-for-of": "^7.18.8",
+        "@babel/plugin-transform-function-name": "^7.18.9",
+        "@babel/plugin-transform-literals": "^7.18.9",
+        "@babel/plugin-transform-member-expression-literals": "^7.18.6",
+        "@babel/plugin-transform-modules-amd": "^7.19.6",
+        "@babel/plugin-transform-modules-commonjs": "^7.19.6",
+        "@babel/plugin-transform-modules-systemjs": "^7.19.6",
+        "@babel/plugin-transform-modules-umd": "^7.18.6",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
+        "@babel/plugin-transform-new-target": "^7.18.6",
+        "@babel/plugin-transform-object-super": "^7.18.6",
+        "@babel/plugin-transform-parameters": "^7.20.1",
+        "@babel/plugin-transform-property-literals": "^7.18.6",
+        "@babel/plugin-transform-regenerator": "^7.18.6",
+        "@babel/plugin-transform-reserved-words": "^7.18.6",
+        "@babel/plugin-transform-shorthand-properties": "^7.18.6",
+        "@babel/plugin-transform-spread": "^7.19.0",
+        "@babel/plugin-transform-sticky-regex": "^7.18.6",
+        "@babel/plugin-transform-template-literals": "^7.18.9",
+        "@babel/plugin-transform-typeof-symbol": "^7.18.9",
+        "@babel/plugin-transform-unicode-escapes": "^7.18.10",
+        "@babel/plugin-transform-unicode-regex": "^7.18.6",
         "@babel/preset-modules": "^0.1.5",
-        "@babel/types": "^7.16.8",
-        "babel-plugin-polyfill-corejs2": "^0.3.0",
-        "babel-plugin-polyfill-corejs3": "^0.5.0",
-        "babel-plugin-polyfill-regenerator": "^0.3.0",
-        "core-js-compat": "^3.20.2",
+        "@babel/types": "^7.20.2",
+        "babel-plugin-polyfill-corejs2": "^0.3.3",
+        "babel-plugin-polyfill-corejs3": "^0.6.0",
+        "babel-plugin-polyfill-regenerator": "^0.4.1",
+        "core-js-compat": "^3.25.1",
         "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/preset-modules": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
-      "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+    "node_modules/@babel/preset-env/node_modules/semver": {
+      "version": "6.3.1",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/preset-modules": {
+      "version": "0.1.6",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/helper-plugin-utils": "^7.0.0",
         "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
         "@babel/plugin-transform-dotall-regex": "^7.4.4",
         "@babel/types": "^7.4.4",
         "esutils": "^2.0.2"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
       }
     },
-    "@babel/preset-react": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz",
-      "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==",
+    "node_modules/@babel/preset-react": {
+      "version": "7.22.15",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "@babel/helper-validator-option": "^7.18.6",
-        "@babel/plugin-transform-react-display-name": "^7.18.6",
-        "@babel/plugin-transform-react-jsx": "^7.18.6",
-        "@babel/plugin-transform-react-jsx-development": "^7.18.6",
-        "@babel/plugin-transform-react-pure-annotations": "^7.18.6"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.22.5",
+        "@babel/helper-validator-option": "^7.22.15",
+        "@babel/plugin-transform-react-display-name": "^7.22.5",
+        "@babel/plugin-transform-react-jsx": "^7.22.15",
+        "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+        "@babel/plugin-transform-react-pure-annotations": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "@babel/regjsgen": {
+    "node_modules/@babel/regjsgen": {
       "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
-      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "@babel/runtime": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz",
-      "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==",
-      "requires": {
+    "node_modules/@babel/runtime": {
+      "version": "7.20.13",
+      "license": "MIT",
+      "dependencies": {
         "regenerator-runtime": "^0.13.11"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/runtime-corejs3": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.5.tgz",
-      "integrity": "sha512-FRqFlFKNazWYykft5zvzuEl1YyTDGsIRrjV9rvxvYkUC7W/ueBng1X68Xd6uRMzAaJ0xMKn08/wem5YS1lpX8w==",
-      "requires": {
-        "core-js-pure": "^3.25.1",
-        "regenerator-runtime": "^0.13.11"
+    "node_modules/@babel/runtime-corejs3": {
+      "version": "7.23.1",
+      "license": "MIT",
+      "dependencies": {
+        "core-js-pure": "^3.30.2",
+        "regenerator-runtime": "^0.14.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/runtime-corejs3/node_modules/regenerator-runtime": {
+      "version": "0.14.0",
+      "license": "MIT"
+    },
+    "node_modules/@babel/template": {
+      "version": "7.20.7",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.18.6",
+        "@babel/parser": "^7.20.7",
+        "@babel/types": "^7.20.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@babel/template": {
-      "version": "7.21.9",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz",
-      "integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==",
-      "requires": {
-        "@babel/code-frame": "^7.21.4",
-        "@babel/parser": "^7.21.9",
-        "@babel/types": "^7.21.5"
-      }
-    },
-    "@babel/traverse": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz",
-      "integrity": "sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==",
-      "requires": {
-        "@babel/code-frame": "^7.21.4",
-        "@babel/generator": "^7.21.5",
-        "@babel/helper-environment-visitor": "^7.21.5",
-        "@babel/helper-function-name": "^7.21.0",
-        "@babel/helper-hoist-variables": "^7.18.6",
-        "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/parser": "^7.21.5",
-        "@babel/types": "^7.21.5",
+    "node_modules/@babel/traverse": {
+      "version": "7.23.0",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.22.13",
+        "@babel/generator": "^7.23.0",
+        "@babel/helper-environment-visitor": "^7.22.20",
+        "@babel/helper-function-name": "^7.23.0",
+        "@babel/helper-hoist-variables": "^7.22.5",
+        "@babel/helper-split-export-declaration": "^7.22.6",
+        "@babel/parser": "^7.23.0",
+        "@babel/types": "^7.23.0",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse/node_modules/@babel/generator": {
+      "version": "7.23.0",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.23.0",
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "@jridgewell/trace-mapping": "^0.3.17",
+        "jsesc": "^2.5.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": {
+      "version": "7.22.6",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.22.5"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.3",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "@babel/types": {
-      "version": "7.21.5",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz",
-      "integrity": "sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==",
-      "requires": {
-        "@babel/helper-string-parser": "^7.21.5",
-        "@babel/helper-validator-identifier": "^7.19.1",
+    "node_modules/@babel/types": {
+      "version": "7.23.0",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.22.5",
+        "@babel/helper-validator-identifier": "^7.22.20",
         "to-fast-properties": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
       }
     },
-    "@bcoe/v8-coverage": {
+    "node_modules/@bcoe/v8-coverage": {
       "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
-      "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "@braintree/sanitize-url": {
+    "node_modules/@braintree/sanitize-url": {
       "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz",
-      "integrity": "sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w=="
+      "license": "MIT"
     },
-    "@circlon/angular-tree-component": {
+    "node_modules/@circlon/angular-tree-component": {
       "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/@circlon/angular-tree-component/-/angular-tree-component-10.0.0.tgz",
-      "integrity": "sha512-3dRWLbOdMfIuvZjX6AMHmvzPtqhNFECMWMpNVXrZfZtTAa0n+Y4lxbuLST85q5QiedBZuC720p/7kkZ78PJ+iw==",
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "lodash-es": "^4.17.15",
         "mobx": "~4.14.1",
         "tslib": "^2.0.0"
+      },
+      "peerDependencies": {
+        "@angular/common": ">=10.0.0 <11.0.0",
+        "@angular/core": ">=10.0.0 <11.0.0"
       }
     },
-    "@colors/colors": {
+    "node_modules/@colors/colors": {
       "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
-      "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=0.1.90"
+      }
     },
-    "@compodoc/compodoc": {
+    "node_modules/@compodoc/compodoc": {
       "version": "1.1.18",
-      "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.18.tgz",
-      "integrity": "sha512-+AFtcj2U3AJq6r8a2+PTdajIlS7m3pgvDhqgoYZJ4Rg/Zp9xvuDvUJU+5oHu8iHCAWwda3NoLUDjOZMNR8uIKg==",
       "dev": true,
-      "requires": {
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
         "@angular-devkit/schematics": "^13.1.2",
         "@babel/core": "^7.16.7",
         "@babel/preset-env": "^7.16.7",
         "ts-morph": "^13.0.2",
         "uuid": "^8.3.2"
       },
-      "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "commander": {
-          "version": "8.3.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-          "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
-          "dev": true
-        },
-        "fs-extra": {
-          "version": "10.1.0",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
-          "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.2.0",
-            "jsonfile": "^6.0.1",
-            "universalify": "^2.0.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+      "bin": {
+        "compodoc": "bin/index-cli.js"
+      },
+      "engines": {
+        "node": ">= 12.0.0"
       }
     },
-    "@compodoc/live-server": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/@compodoc/live-server/-/live-server-1.2.3.tgz",
-      "integrity": "sha512-hDmntVCyjjaxuJzPzBx68orNZ7TW4BtHWMnXlIVn5dqhK7vuFF/11hspO1cMmc+2QTYgqde1TBcb3127S7Zrow==",
+    "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/core": {
+      "version": "13.3.11",
       "dev": true,
-      "requires": {
-        "chokidar": "^3.5.2",
-        "colors": "1.4.0",
-        "connect": "^3.7.0",
-        "cors": "^2.8.5",
-        "event-stream": "4.0.1",
-        "faye-websocket": "0.11.x",
-        "http-auth": "4.1.9",
-        "http-auth-connect": "^1.0.5",
-        "morgan": "^1.10.0",
-        "object-assign": "^4.1.1",
-        "open": "8.4.0",
-        "proxy-middleware": "^0.15.0",
-        "send": "^0.18.0",
-        "serve-index": "^1.9.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "cors": {
-          "version": "2.8.5",
-          "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-          "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
-          "dev": true,
-          "requires": {
-            "object-assign": "^4",
-            "vary": "^1"
-          }
-        },
-        "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"
-          },
-          "dependencies": {
-            "ms": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-              "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-              "dev": true
-            }
-          }
-        },
-        "ms": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-          "dev": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-          "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-          "dev": true
-        },
-        "send": {
-          "version": "0.18.0",
-          "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
-          "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
-          "dev": true,
-          "requires": {
-            "debug": "2.6.9",
-            "depd": "2.0.0",
-            "destroy": "1.2.0",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "etag": "~1.8.1",
-            "fresh": "0.5.2",
-            "http-errors": "2.0.0",
-            "mime": "1.6.0",
-            "ms": "2.1.3",
-            "on-finished": "2.4.1",
-            "range-parser": "~1.2.1",
-            "statuses": "2.0.1"
-          }
+        "ajv": "8.9.0",
+        "ajv-formats": "2.1.1",
+        "fast-json-stable-stringify": "2.1.0",
+        "magic-string": "0.25.7",
+        "rxjs": "6.6.7",
+        "source-map": "0.7.3"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      },
+      "peerDependencies": {
+        "chokidar": "^3.5.2"
+      },
+      "peerDependenciesMeta": {
+        "chokidar": {
+          "optional": true
         }
       }
     },
-    "@compodoc/ngd-core": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.1.1.tgz",
-      "integrity": "sha512-Z+wE6wWZYVnudRYg6qunDlyh3Orw39Ib66Gvrz5kX5u7So+iu3tr6sQJdqH6yGS3hAjig5avlfhWLlgsb6/x1Q==",
+    "node_modules/@compodoc/compodoc/node_modules/@angular-devkit/schematics": {
+      "version": "13.3.11",
       "dev": true,
-      "requires": {
-        "ansi-colors": "^4.1.3",
-        "fancy-log": "^2.0.0",
-        "typescript": "^5.0.4"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ansi-colors": {
-          "version": "4.1.3",
-          "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
-          "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
-          "dev": true
-        },
-        "typescript": {
-          "version": "5.0.4",
-          "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz",
-          "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==",
-          "dev": true
-        }
+        "@angular-devkit/core": "13.3.11",
+        "jsonc-parser": "3.0.0",
+        "magic-string": "0.25.7",
+        "ora": "5.4.1",
+        "rxjs": "6.6.7"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.15.0 || >=16.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      }
+    },
+    "node_modules/@compodoc/compodoc/node_modules/ajv": {
+      "version": "8.9.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/@compodoc/compodoc/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/@compodoc/compodoc/node_modules/cosmiconfig": {
+      "version": "7.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/parse-json": "^4.0.0",
+        "import-fresh": "^3.2.1",
+        "parse-json": "^5.0.0",
+        "path-type": "^4.0.0",
+        "yaml": "^1.10.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@compodoc/compodoc/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/@compodoc/compodoc/node_modules/jsonc-parser": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@compodoc/compodoc/node_modules/magic-string": {
+      "version": "0.25.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "sourcemap-codec": "^1.4.4"
+      }
+    },
+    "node_modules/@compodoc/compodoc/node_modules/rxjs": {
+      "version": "6.6.7",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "^1.9.0"
+      },
+      "engines": {
+        "npm": ">=2.0.0"
+      }
+    },
+    "node_modules/@compodoc/compodoc/node_modules/source-map": {
+      "version": "0.7.3",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@compodoc/compodoc/node_modules/tslib": {
+      "version": "1.14.1",
+      "dev": true,
+      "license": "0BSD"
+    },
+    "node_modules/@compodoc/live-server": {
+      "version": "1.2.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chokidar": "^3.5.2",
+        "colors": "1.4.0",
+        "connect": "^3.7.0",
+        "cors": "latest",
+        "event-stream": "4.0.1",
+        "faye-websocket": "0.11.x",
+        "http-auth": "4.1.9",
+        "http-auth-connect": "^1.0.5",
+        "morgan": "^1.10.0",
+        "object-assign": "latest",
+        "open": "8.4.0",
+        "proxy-middleware": "latest",
+        "send": "latest",
+        "serve-index": "^1.9.1"
+      },
+      "bin": {
+        "live-server": "live-server.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/@compodoc/live-server/node_modules/open": {
+      "version": "8.4.0",
+      "dev": true,
+      "license": "MIT",
+      "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/@compodoc/ngd-core": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-colors": "^4.1.3",
+        "fancy-log": "^2.0.0",
+        "typescript": "^5.0.4"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      }
+    },
+    "node_modules/@compodoc/ngd-core/node_modules/typescript": {
+      "version": "5.2.2",
+      "dev": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
       }
     },
-    "@compodoc/ngd-transformer": {
+    "node_modules/@compodoc/ngd-transformer": {
       "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.1.3.tgz",
-      "integrity": "sha512-oWxJza7CpWR8/FeWYfE6j+jgncnGBsTWnZLt5rD2GUpsGSQTuGrsFPnmbbaVLgRS5QIVWBJYke7QFBr/7qVMWg==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@aduh95/viz.js": "3.4.0",
         "@compodoc/ngd-core": "~2.1.1",
         "dot": "^2.0.0-beta.1",
         "fs-extra": "^11.1.1"
       },
-      "dependencies": {
-        "fs-extra": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
-          "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.2.0",
-            "jsonfile": "^6.0.1",
-            "universalify": "^2.0.0"
-          }
-        }
+      "engines": {
+        "node": ">= 10.0.0"
       }
     },
-    "@csstools/postcss-progressive-custom-properties": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz",
-      "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==",
+    "node_modules/@compodoc/ngd-transformer/node_modules/fs-extra": {
+      "version": "11.1.1",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=14.14"
       }
     },
-    "@csstools/selector-specificity": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz",
-      "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==",
-      "dev": true
-    },
-    "@cypress/browserify-preprocessor": {
+    "node_modules/@cypress/browserify-preprocessor": {
       "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/@cypress/browserify-preprocessor/-/browserify-preprocessor-3.0.2.tgz",
-      "integrity": "sha512-y6mlFR+IR2cqcm3HabSp7AEcX9QfF1EUL4eOaw/7xexdhmdQU8ez6piyRopZQob4BK8oKTsc9PkupsU2rzjqMA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/core": "^7.16.0",
         "@babel/plugin-proposal-class-properties": "^7.16.0",
         "@babel/plugin-proposal-object-rest-spread": "^7.16.0",
         "lodash.clonedeep": "^4.5.0",
         "through2": "^2.0.0",
         "watchify": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "@cypress/request": {
-      "version": "2.88.11",
-      "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.11.tgz",
-      "integrity": "sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w==",
+    "node_modules/@cypress/browserify-preprocessor/node_modules/debug": {
+      "version": "4.3.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@cypress/browserify-preprocessor/node_modules/fs-extra": {
+      "version": "9.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "at-least-node": "^1.0.0",
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@cypress/request": {
+      "version": "2.88.12",
       "dev": true,
-      "requires": {
+      "license": "Apache-2.0",
+      "dependencies": {
         "aws-sign2": "~0.7.0",
         "aws4": "^1.8.0",
         "caseless": "~0.12.0",
         "performance-now": "^2.1.0",
         "qs": "~6.10.3",
         "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.5.0",
+        "tough-cookie": "^4.1.3",
         "tunnel-agent": "^0.6.0",
         "uuid": "^8.3.2"
       },
-      "dependencies": {
-        "form-data": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-          "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
-          "dev": true,
-          "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.6",
-            "mime-types": "^2.1.12"
-          }
-        },
-        "http-signature": {
-          "version": "1.3.6",
-          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
-          "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==",
-          "dev": true,
-          "requires": {
-            "assert-plus": "^1.0.0",
-            "jsprim": "^2.0.2",
-            "sshpk": "^1.14.1"
-          }
-        },
-        "jsprim": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz",
-          "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==",
-          "dev": true,
-          "requires": {
-            "assert-plus": "1.0.0",
-            "extsprintf": "1.3.0",
-            "json-schema": "0.4.0",
-            "verror": "1.10.0"
-          }
-        },
-        "punycode": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-          "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-          "dev": true
-        },
-        "qs": {
-          "version": "6.10.4",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz",
-          "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==",
-          "dev": true,
-          "requires": {
-            "side-channel": "^1.0.4"
-          }
-        },
-        "tough-cookie": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-          "dev": true,
-          "requires": {
-            "psl": "^1.1.28",
-            "punycode": "^2.1.1"
-          }
-        }
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "@cypress/xvfb": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz",
-      "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==",
+    "node_modules/@cypress/request/node_modules/punycode": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "debug": "^3.1.0",
-        "lodash.once": "^4.1.1"
-      },
-      "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"
-          }
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "@discoveryjs/json-ext": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz",
-      "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==",
-      "dev": true
-    },
-    "@esbuild/android-arm": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
-      "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/android-arm64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
-      "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
+    "node_modules/@cypress/request/node_modules/qs": {
+      "version": "6.10.4",
       "dev": true,
-      "optional": true
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "@esbuild/android-x64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
-      "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
+    "node_modules/@cypress/request/node_modules/tough-cookie": {
+      "version": "4.1.3",
       "dev": true,
-      "optional": true
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "@esbuild/darwin-arm64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
-      "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
+    "node_modules/@cypress/request/node_modules/universalify": {
+      "version": "0.2.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4.0.0"
+      }
     },
-    "@esbuild/darwin-x64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
-      "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
+    "node_modules/@cypress/xvfb": {
+      "version": "1.2.4",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^3.1.0",
+        "lodash.once": "^4.1.1"
+      }
     },
-    "@esbuild/freebsd-arm64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
-      "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
+    "node_modules/@cypress/xvfb/node_modules/debug": {
+      "version": "3.2.7",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
     },
-    "@esbuild/freebsd-x64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
-      "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
+    "node_modules/@discoveryjs/json-ext": {
+      "version": "0.5.7",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.0.0"
+      }
     },
-    "@esbuild/linux-arm": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
-      "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.17.8",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "@esbuild/linux-arm64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
-      "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
+    "node_modules/@eslint/eslintrc": {
+      "version": "1.4.1",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.4.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
     },
-    "@esbuild/linux-ia32": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
-      "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
+    "node_modules/@eslint/eslintrc/node_modules/ajv": {
+      "version": "6.12.6",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
     },
-    "@esbuild/linux-loong64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
-      "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
+    "node_modules/@eslint/eslintrc/node_modules/argparse": {
+      "version": "2.0.1",
       "dev": true,
-      "optional": true
+      "license": "Python-2.0"
     },
-    "@esbuild/linux-mips64el": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
-      "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
+    "node_modules/@eslint/eslintrc/node_modules/debug": {
+      "version": "4.3.4",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
     },
-    "@esbuild/linux-ppc64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
-      "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "13.22.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "@esbuild/linux-riscv64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
-      "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
+    "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+      "version": "4.1.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
     },
-    "@esbuild/linux-s390x": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
-      "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
+    "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
       "dev": true,
-      "optional": true
+      "license": "MIT"
     },
-    "@esbuild/linux-x64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
-      "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
+    "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+      "version": "0.20.2",
       "dev": true,
-      "optional": true
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "@esbuild/netbsd-x64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
-      "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
+    "node_modules/@foliojs-fork/fontkit": {
+      "version": "1.9.1",
       "dev": true,
-      "optional": true
-    },
-    "@esbuild/openbsd-x64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
-      "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/sunos-x64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
-      "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/win32-arm64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
-      "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/win32-ia32": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
-      "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
-      "dev": true,
-      "optional": true
-    },
-    "@esbuild/win32-x64": {
-      "version": "0.17.19",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
-      "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
-      "dev": true,
-      "optional": true
-    },
-    "@eslint/eslintrc": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
-      "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
-      "dev": true,
-      "requires": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.4.0",
-        "globals": "^13.19.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ajv": {
-          "version": "6.12.6",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "globals": {
-          "version": "13.20.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-          "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
-          "dev": true,
-          "requires": {
-            "type-fest": "^0.20.2"
-          }
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        },
-        "strip-json-comments": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-          "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-          "dev": true
-        }
-      }
-    },
-    "@foliojs-fork/fontkit": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz",
-      "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==",
-      "dev": true,
-      "requires": {
         "@foliojs-fork/restructure": "^2.0.2",
         "brfs": "^2.0.0",
         "brotli": "^1.2.0",
         "unicode-trie": "^2.0.0"
       }
     },
-    "@foliojs-fork/linebreak": {
+    "node_modules/@foliojs-fork/linebreak": {
       "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz",
-      "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "base64-js": "1.3.1",
         "brfs": "^2.0.2",
         "unicode-trie": "^2.0.0"
-      },
-      "dependencies": {
-        "base64-js": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-          "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
-          "dev": true
-        }
       }
     },
-    "@foliojs-fork/pdfkit": {
+    "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": {
+      "version": "1.3.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@foliojs-fork/pdfkit": {
       "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz",
-      "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@foliojs-fork/fontkit": "^1.9.1",
         "@foliojs-fork/linebreak": "^1.1.1",
         "crypto-js": "^4.0.0",
         "png-js": "^1.0.0"
       }
     },
-    "@foliojs-fork/restructure": {
+    "node_modules/@foliojs-fork/restructure": {
       "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz",
-      "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==",
-      "dev": true
-    },
-    "@gar/promisify": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
-      "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "@hapi/hoek": {
+    "node_modules/@hapi/hoek": {
       "version": "9.3.0",
-      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
-      "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "@hapi/topo": {
+    "node_modules/@hapi/topo": {
       "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz",
-      "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==",
       "dev": true,
-      "requires": {
+      "license": "BSD-3-Clause",
+      "dependencies": {
         "@hapi/hoek": "^9.0.0"
       }
     },
-    "@humanwhocodes/config-array": {
+    "node_modules/@humanwhocodes/config-array": {
       "version": "0.9.5",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
-      "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
       "dev": true,
-      "requires": {
+      "license": "Apache-2.0",
+      "dependencies": {
         "@humanwhocodes/object-schema": "^1.2.1",
         "debug": "^4.1.1",
         "minimatch": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=10.10.0"
       }
     },
-    "@humanwhocodes/object-schema": {
+    "node_modules/@humanwhocodes/object-schema": {
       "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^5.1.2",
+        "string-width-cjs": "npm:string-width@^4.2.0",
+        "strip-ansi": "^7.0.1",
+        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+        "wrap-ansi": "^8.1.0",
+        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@isaacs/cliui/node_modules/string-width": {
+      "version": "5.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+      "version": "8.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^6.1.0",
+        "string-width": "^5.0.1",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
     },
-    "@istanbuljs/load-nyc-config": {
+    "node_modules/@istanbuljs/load-nyc-config": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
-      "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
       "dev": true,
-      "requires": {
+      "license": "ISC",
+      "dependencies": {
         "camelcase": "^5.3.1",
         "find-up": "^4.1.0",
         "get-package-type": "^0.1.0",
         "js-yaml": "^3.13.1",
         "resolve-from": "^5.0.0"
       },
-      "dependencies": {
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "dev": true,
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.1",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        }
+      "engines": {
+        "node": ">=8"
       }
     },
-    "@istanbuljs/schema": {
+    "node_modules/@istanbuljs/schema": {
       "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
-      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
-      "dev": true
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "@jest/console": {
+    "node_modules/@jest/console": {
       "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz",
-      "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@jest/types": "^28.1.3",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "jest-util": "^28.1.3",
         "slash": "^3.0.0"
       },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/@jest/console/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "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"
-          }
-        }
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "@jest/core": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz",
-      "integrity": "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==",
+    "node_modules/@jest/core": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@jest/console": "^28.1.3",
-        "@jest/reporters": "^28.1.3",
-        "@jest/test-result": "^28.1.3",
-        "@jest/transform": "^28.1.3",
-        "@jest/types": "^28.1.3",
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/reporters": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
         "ansi-escapes": "^4.2.1",
         "chalk": "^4.0.0",
         "ci-info": "^3.2.0",
         "exit": "^0.1.2",
         "graceful-fs": "^4.2.9",
-        "jest-changed-files": "^28.1.3",
-        "jest-config": "^28.1.3",
-        "jest-haste-map": "^28.1.3",
-        "jest-message-util": "^28.1.3",
-        "jest-regex-util": "^28.0.2",
-        "jest-resolve": "^28.1.3",
-        "jest-resolve-dependencies": "^28.1.3",
-        "jest-runner": "^28.1.3",
-        "jest-runtime": "^28.1.3",
-        "jest-snapshot": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "jest-validate": "^28.1.3",
-        "jest-watcher": "^28.1.3",
+        "jest-changed-files": "^29.7.0",
+        "jest-config": "^29.7.0",
+        "jest-haste-map": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-resolve-dependencies": "^29.7.0",
+        "jest-runner": "^29.7.0",
+        "jest-runtime": "^29.7.0",
+        "jest-snapshot": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "jest-watcher": "^29.7.0",
         "micromatch": "^4.0.4",
-        "pretty-format": "^28.1.3",
-        "rimraf": "^3.0.0",
+        "pretty-format": "^29.7.0",
         "slash": "^3.0.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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "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"
-          }
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
         }
       }
     },
-    "@jest/environment": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz",
-      "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==",
+    "node_modules/@jest/core/node_modules/@jest/console": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@jest/fake-timers": "^28.1.3",
-        "@jest/types": "^28.1.3",
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
         "@types/node": "*",
-        "jest-mock": "^28.1.3"
+        "chalk": "^4.0.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/expect": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz",
-      "integrity": "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==",
+    "node_modules/@jest/core/node_modules/@jest/environment": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "expect": "^28.1.3",
-        "jest-snapshot": "^28.1.3"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/expect-utils": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz",
-      "integrity": "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==",
+    "node_modules/@jest/core/node_modules/@jest/expect": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "jest-get-type": "^28.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "expect": "^29.7.0",
+        "jest-snapshot": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/fake-timers": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz",
-      "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==",
+    "node_modules/@jest/core/node_modules/@jest/expect-utils": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@jest/types": "^28.1.3",
-        "@sinonjs/fake-timers": "^9.1.2",
-        "@types/node": "*",
-        "jest-message-util": "^28.1.3",
-        "jest-mock": "^28.1.3",
-        "jest-util": "^28.1.3"
+      "license": "MIT",
+      "dependencies": {
+        "jest-get-type": "^29.6.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/globals": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz",
-      "integrity": "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==",
+    "node_modules/@jest/core/node_modules/@jest/fake-timers": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^28.1.3",
-        "@jest/expect": "^28.1.3",
-        "@jest/types": "^28.1.3"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@sinonjs/fake-timers": "^10.0.2",
+        "@types/node": "*",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/reporters": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz",
-      "integrity": "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==",
+    "node_modules/@jest/core/node_modules/@jest/globals": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@bcoe/v8-coverage": "^0.2.3",
-        "@jest/console": "^28.1.3",
-        "@jest/test-result": "^28.1.3",
-        "@jest/transform": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "@jridgewell/trace-mapping": "^0.3.13",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "collect-v8-coverage": "^1.0.0",
-        "exit": "^0.1.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "istanbul-lib-coverage": "^3.0.0",
-        "istanbul-lib-instrument": "^5.1.0",
-        "istanbul-lib-report": "^3.0.0",
-        "istanbul-lib-source-maps": "^4.0.0",
-        "istanbul-reports": "^3.1.3",
-        "jest-message-util": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "jest-worker": "^28.1.3",
-        "slash": "^3.0.0",
-        "string-length": "^4.0.1",
-        "strip-ansi": "^6.0.0",
-        "terminal-link": "^2.0.0",
-        "v8-to-istanbul": "^9.0.1"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "jest-worker": {
-          "version": "28.1.3",
-          "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
-          "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
-          "dev": true,
-          "requires": {
-            "@types/node": "*",
-            "merge-stream": "^2.0.0",
-            "supports-color": "^8.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "8.1.1",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-              "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-              "dev": true,
-              "requires": {
-                "has-flag": "^4.0.0"
-              }
-            }
-          }
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "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"
-          }
-        }
+        "@jest/environment": "^29.7.0",
+        "@jest/expect": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/schemas": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz",
-      "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==",
+    "node_modules/@jest/core/node_modules/@jest/schemas": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "@sinclair/typebox": "^0.24.1"
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/source-map": {
-      "version": "28.1.2",
-      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz",
-      "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==",
+    "node_modules/@jest/core/node_modules/@jest/source-map": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "@jridgewell/trace-mapping": "^0.3.13",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.18",
         "callsites": "^3.0.0",
         "graceful-fs": "^4.2.9"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/test-result": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz",
-      "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==",
+    "node_modules/@jest/core/node_modules/@jest/test-result": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@jest/console": "^28.1.3",
-        "@jest/types": "^28.1.3",
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/types": "^29.6.3",
         "@types/istanbul-lib-coverage": "^2.0.0",
         "collect-v8-coverage": "^1.0.0"
-      }
-    },
-    "@jest/test-sequencer": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz",
-      "integrity": "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==",
-      "dev": true,
-      "requires": {
-        "@jest/test-result": "^28.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^28.1.3",
-        "slash": "^3.0.0"
       },
-      "dependencies": {
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        }
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/transform": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz",
-      "integrity": "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==",
+    "node_modules/@jest/core/node_modules/@jest/transform": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "@babel/core": "^7.11.6",
-        "@jest/types": "^28.1.3",
-        "@jridgewell/trace-mapping": "^0.3.13",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
         "babel-plugin-istanbul": "^6.1.1",
         "chalk": "^4.0.0",
-        "convert-source-map": "^1.4.0",
-        "fast-json-stable-stringify": "^2.0.0",
+        "convert-source-map": "^2.0.0",
+        "fast-json-stable-stringify": "^2.1.0",
         "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^28.1.3",
-        "jest-regex-util": "^28.0.2",
-        "jest-util": "^28.1.3",
+        "jest-haste-map": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
         "micromatch": "^4.0.4",
         "pirates": "^4.0.4",
         "slash": "^3.0.0",
-        "write-file-atomic": "^4.0.1"
+        "write-file-atomic": "^4.0.2"
       },
-      "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "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"
-          }
-        }
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jest/types": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz",
-      "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==",
+    "node_modules/@jest/core/node_modules/@jest/types": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "@jest/schemas": "^28.1.3",
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
         "@types/istanbul-lib-coverage": "^2.0.0",
         "@types/istanbul-reports": "^3.0.0",
         "@types/node": "*",
         "@types/yargs": "^17.0.8",
         "chalk": "^4.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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
-      }
-    },
-    "@jridgewell/gen-mapping": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
-      "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
-      "requires": {
-        "@jridgewell/set-array": "^1.0.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.9"
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@jridgewell/resolve-uri": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-      "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
+    "node_modules/@jest/core/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
     },
-    "@jridgewell/set-array": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
-      "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
+    "node_modules/@jest/core/node_modules/@sinonjs/commons": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "type-detect": "4.0.8"
+      }
     },
-    "@jridgewell/source-map": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz",
-      "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==",
+    "node_modules/@jest/core/node_modules/@sinonjs/fake-timers": {
+      "version": "10.3.0",
       "dev": true,
-      "requires": {
-        "@jridgewell/gen-mapping": "^0.3.0",
-        "@jridgewell/trace-mapping": "^0.3.9"
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@sinonjs/commons": "^3.0.0"
       }
     },
-    "@jridgewell/sourcemap-codec": {
-      "version": "1.4.15",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
-      "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
-    },
-    "@jridgewell/trace-mapping": {
-      "version": "0.3.18",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
-      "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
-      "requires": {
-        "@jridgewell/resolve-uri": "3.1.0",
-        "@jridgewell/sourcemap-codec": "1.4.14"
-      },
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": {
-          "version": "1.4.14",
-          "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-          "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
-        }
+    "node_modules/@jest/core/node_modules/camelcase": {
+      "version": "6.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "@juggle/resize-observer": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
-      "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA=="
-    },
-    "@ng-bootstrap/ng-bootstrap": {
-      "version": "12.1.2",
-      "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-12.1.2.tgz",
-      "integrity": "sha512-p27c+mYVdHiJMYrj5hwClVJxLdiZxafAqlbw1sdJh2xJ1rGOe+H/kCf5YDRbhlHqRN+34Gr0RQqIUeD1I2V8hg==",
-      "requires": {
-        "tslib": "^2.3.0"
+    "node_modules/@jest/core/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "@ngtools/webpack": {
-      "version": "13.3.11",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.3.11.tgz",
-      "integrity": "sha512-gB33hTbc/RJmHyIgSUYj8ErPazhYYm7yfapOnvwHdYhCjrj1TKkR1ierOlhJtpfBYUQg6FChdl2YpyIQNPjWMA==",
-      "dev": true
+    "node_modules/@jest/core/node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "@ngx-formly/bootstrap": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/@ngx-formly/bootstrap/-/bootstrap-6.1.1.tgz",
-      "integrity": "sha512-yNzASqUrzvhMndERzoTBCvj1rtsgsmMXiXsqIP7PRJ4AdGtsTZvpxNYZAltdKEgJvc1hS/lDMJdS7IHg2qFN9Q==",
-      "requires": {
-        "tslib": "^2.0.0"
+    "node_modules/@jest/core/node_modules/diff-sequences": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@ngx-formly/core": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/@ngx-formly/core/-/core-6.1.1.tgz",
-      "integrity": "sha512-6Fg9TBcXXrnUkHqVlpCQbVE5BWJQBvCitQRngW7kiA/+86rhH5mkL19enULWKq7fEMi54uCVvWsz7l6VOaJhLA==",
-      "requires": {
-        "tslib": "^2.0.0"
+    "node_modules/@jest/core/node_modules/expect": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/expect-utils": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.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==",
+    "node_modules/@jest/core/node_modules/glob": {
+      "version": "7.2.3",
       "dev": true,
-      "requires": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "@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
+    "node_modules/@jest/core/node_modules/jest-diff": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^29.6.3",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
     },
-    "@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==",
+    "node_modules/@jest/core/node_modules/jest-get-type": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@npmcli/fs": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
-      "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+    "node_modules/@jest/core/node_modules/jest-haste-map": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@gar/promisify": "^1.0.1",
-        "semver": "^7.3.5"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
       }
     },
-    "@npmcli/git": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz",
-      "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==",
+    "node_modules/@jest/core/node_modules/jest-matcher-utils": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@npmcli/promise-spawn": "^1.3.2",
-        "lru-cache": "^6.0.0",
-        "mkdirp": "^1.0.4",
-        "npm-pick-manifest": "^6.1.1",
-        "promise-inflight": "^1.0.1",
-        "promise-retry": "^2.0.1",
-        "semver": "^7.3.5",
-        "which": "^2.0.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "chalk": "^4.0.0",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@npmcli/installed-package-contents": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz",
-      "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==",
+    "node_modules/@jest/core/node_modules/jest-message-util": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "npm-bundled": "^1.1.1",
-        "npm-normalize-package-bin": "^1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@npmcli/move-file": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
-      "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+    "node_modules/@jest/core/node_modules/jest-mock": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "mkdirp": "^1.0.4",
-        "rimraf": "^3.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@npmcli/node-gyp": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz",
-      "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==",
-      "dev": true
-    },
-    "@npmcli/promise-spawn": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz",
-      "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==",
+    "node_modules/@jest/core/node_modules/jest-regex-util": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "infer-owner": "^1.0.4"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@npmcli/run-script": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-2.0.0.tgz",
-      "integrity": "sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==",
+    "node_modules/@jest/core/node_modules/jest-resolve": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@npmcli/node-gyp": "^1.0.2",
-        "@npmcli/promise-spawn": "^1.3.2",
-        "node-gyp": "^8.2.0",
-        "read-package-json-fast": "^2.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-pnp-resolver": "^1.2.2",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "resolve": "^1.20.0",
+        "resolve.exports": "^2.0.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@nrwl/cli": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-15.9.3.tgz",
-      "integrity": "sha512-qiAKHkov3iBx6hroPTitUrkRSUZFQqVgNJiF9gXRFC6pNJe9RS4rlmcIaoUFOboi9CnH5jwblNJVcz8YSVYOvA==",
+    "node_modules/@jest/core/node_modules/jest-runtime": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "nx": "15.9.3"
-      },
+      "license": "MIT",
       "dependencies": {
-        "@nrwl/tao": {
-          "version": "15.9.3",
-          "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-15.9.3.tgz",
-          "integrity": "sha512-NcjFCbuMa53C3fBrK7qLUImUBySyr9EVwmiZuAv9sZZtm4eILK8w3qihjrB4FFUuLjPU/SViriYXi+hF2tbP4w==",
-          "dev": true,
-          "requires": {
-            "nx": "15.9.3"
-          }
-        },
-        "@zkochan/js-yaml": {
-          "version": "0.0.6",
-          "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz",
-          "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==",
-          "dev": true,
-          "requires": {
-            "argparse": "^2.0.1"
-          }
-        },
-        "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "cli-spinners": {
-          "version": "2.6.1",
-          "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
-          "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==",
-          "dev": true
-        },
-        "cliui": {
-          "version": "7.0.4",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
-          "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
-          "dev": true,
-          "requires": {
-            "string-width": "^4.2.0",
-            "strip-ansi": "^6.0.0",
-            "wrap-ansi": "^7.0.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        },
-        "fs-extra": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
-          "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.2.0",
-            "jsonfile": "^6.0.1",
-            "universalify": "^2.0.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.4",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
-          "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
-          "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"
-          }
-        },
-        "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
-        },
-        "jsonc-parser": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
-          "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
-          "dev": true
-        },
-        "lines-and-columns": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz",
-          "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==",
-          "dev": true
-        },
-        "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"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.5",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
-          "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "nx": {
-          "version": "15.9.3",
-          "resolved": "https://registry.npmjs.org/nx/-/nx-15.9.3.tgz",
-          "integrity": "sha512-GLwbykfTABc7/UZjQEEnV1bQbTVC53W+Zj4xWY640/45I4iZf/TUqKMBCgtLZ9v89gEsKOM4zsx55CqHT3bekA==",
-          "dev": true,
-          "requires": {
-            "@nrwl/cli": "15.9.3",
-            "@nrwl/nx-darwin-arm64": "15.9.3",
-            "@nrwl/nx-darwin-x64": "15.9.3",
-            "@nrwl/nx-linux-arm-gnueabihf": "15.9.3",
-            "@nrwl/nx-linux-arm64-gnu": "15.9.3",
-            "@nrwl/nx-linux-arm64-musl": "15.9.3",
-            "@nrwl/nx-linux-x64-gnu": "15.9.3",
-            "@nrwl/nx-linux-x64-musl": "15.9.3",
-            "@nrwl/nx-win32-arm64-msvc": "15.9.3",
-            "@nrwl/nx-win32-x64-msvc": "15.9.3",
-            "@nrwl/tao": "15.9.3",
-            "@parcel/watcher": "2.0.4",
-            "@yarnpkg/lockfile": "^1.1.0",
-            "@yarnpkg/parsers": "^3.0.0-rc.18",
-            "@zkochan/js-yaml": "0.0.6",
-            "axios": "^1.0.0",
-            "chalk": "^4.1.0",
-            "cli-cursor": "3.1.0",
-            "cli-spinners": "2.6.1",
-            "cliui": "^7.0.2",
-            "dotenv": "~10.0.0",
-            "enquirer": "~2.3.6",
-            "fast-glob": "3.2.7",
-            "figures": "3.2.0",
-            "flat": "^5.0.2",
-            "fs-extra": "^11.1.0",
-            "glob": "7.1.4",
-            "ignore": "^5.0.4",
-            "js-yaml": "4.1.0",
-            "jsonc-parser": "3.2.0",
-            "lines-and-columns": "~2.0.3",
-            "minimatch": "3.0.5",
-            "npm-run-path": "^4.0.1",
-            "open": "^8.4.0",
-            "semver": "7.3.4",
-            "string-width": "^4.2.3",
-            "strong-log-transformer": "^2.1.0",
-            "tar-stream": "~2.2.0",
-            "tmp": "~0.2.1",
-            "tsconfig-paths": "^4.1.2",
-            "tslib": "^2.3.0",
-            "v8-compile-cache": "2.3.0",
-            "yargs": "^17.6.2",
-            "yargs-parser": "21.1.1"
-          }
-        },
-        "semver": {
-          "version": "7.3.4",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
-          "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "tmp": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
-          "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
-          "dev": true,
-          "requires": {
-            "rimraf": "^3.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "@jest/environment": "^29.7.0",
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/globals": "^29.7.0",
+        "@jest/source-map": "^29.6.3",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "cjs-module-lexer": "^1.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-snapshot": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0",
+        "strip-bom": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@nrwl/devkit": {
-      "version": "13.1.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-13.1.3.tgz",
-      "integrity": "sha512-TAAsZJvVc/obeH0rZKY6miVhyM2GHGb8qIWp9MAIdLlXf4VDcNC7rxwb5OrGVSwuTTjqGYBGPUx0yEogOOJthA==",
+    "node_modules/@jest/core/node_modules/jest-snapshot": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@nrwl/tao": "13.1.3",
-        "ejs": "^3.1.5",
-        "ignore": "^5.0.4",
-        "rxjs": "^6.5.4",
-        "semver": "7.3.4",
-        "tslib": "^2.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.3.4",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
-          "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "@babel/core": "^7.11.6",
+        "@babel/generator": "^7.7.2",
+        "@babel/plugin-syntax-jsx": "^7.7.2",
+        "@babel/plugin-syntax-typescript": "^7.7.2",
+        "@babel/types": "^7.3.3",
+        "@jest/expect-utils": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "babel-preset-current-node-syntax": "^1.0.0",
+        "chalk": "^4.0.0",
+        "expect": "^29.7.0",
+        "graceful-fs": "^4.2.9",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^29.7.0",
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@nrwl/nx-darwin-arm64": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-arm64/-/nx-darwin-arm64-15.9.3.tgz",
-      "integrity": "sha512-2htJzVa+S/uLg5tj4nbO/tRz2SRMQIpT6EeWMgDGuEKQdpuRLVj2ez9hMpkRn9tl1tBUwR05hbV28DnOLRESVA==",
+    "node_modules/@jest/core/node_modules/jest-util": {
+      "version": "29.7.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
     },
-    "@nrwl/nx-darwin-x64": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-darwin-x64/-/nx-darwin-x64-15.9.3.tgz",
-      "integrity": "sha512-p+8UkfC6KTLOX4XRt7NSP8DoTzEgs73+SN0csoXT9VsNO35+F0Z5zMZxpEc7RVo5Wen/4PGh2OWA+8gtgntsJQ==",
+    "node_modules/@jest/core/node_modules/jest-validate": {
+      "version": "29.7.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "camelcase": "^6.2.0",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^29.6.3",
+        "leven": "^3.1.0",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
     },
-    "@nrwl/nx-linux-arm-gnueabihf": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-15.9.3.tgz",
-      "integrity": "sha512-xwW7bZtggrxhFbYvvWWArtcSWwoxWzi/4wNgP3wPbcZFNZiraahVQSpIyJXrS9aajGbdvuDBM8cbDsMj9v7mwg==",
+    "node_modules/@jest/core/node_modules/jest-worker": {
+      "version": "29.7.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "jest-util": "^29.7.0",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
     },
-    "@nrwl/nx-linux-arm64-gnu": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-15.9.3.tgz",
-      "integrity": "sha512-KNxDL2OAHxhFqztEjv2mNwXD6xrzoUury7NsYZYqlxJUNc3YYBfRSLEatnw491crvMBndbxfGVTWEO9S4YmRuw==",
+    "node_modules/@jest/core/node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
     },
-    "@nrwl/nx-linux-arm64-musl": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-arm64-musl/-/nx-linux-arm64-musl-15.9.3.tgz",
-      "integrity": "sha512-AxoZzfsXH7ZqDE+WrQtRumufIcSIBw4U/LikiDLaWWoGtNpAfKLkD/PHirZiNxHIeGy1Toi4ccMUolXbafLVFw==",
+    "node_modules/@jest/core/node_modules/pretty-format": {
+      "version": "29.7.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
     },
-    "@nrwl/nx-linux-x64-gnu": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-gnu/-/nx-linux-x64-gnu-15.9.3.tgz",
-      "integrity": "sha512-P8AOPRufvV4a5cSczNsw84zFAI7NgAiEBTybYcyymdNJmo0iArJXEmvj/G4mB20O8VCsCkwqMYAu6nQEnES1Kw==",
+    "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
     },
-    "@nrwl/nx-linux-x64-musl": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-linux-x64-musl/-/nx-linux-x64-musl-15.9.3.tgz",
-      "integrity": "sha512-4ZYDp7T319+xbw7Z7KVtRefzaXJipZfgrM49r+Y1FAfYDc8y18zvKz3slK26wfWz+EUZwKsa/DfA2KmyRG3DvQ==",
+    "node_modules/@jest/core/node_modules/resolve.exports": {
+      "version": "2.0.2",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
     },
-    "@nrwl/nx-win32-arm64-msvc": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-15.9.3.tgz",
-      "integrity": "sha512-UhgxIPgTZBKN1oxlLPSklkSzVL3hA4lAiVc9A0Utumpbp0ob/Xx+2vHzg3cnmNH3jWkZ+9OsC2dKyeMB6gAbSw==",
+    "node_modules/@jest/environment": {
+      "version": "28.1.3",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "@jest/fake-timers": "^28.1.3",
+        "@jest/types": "^28.1.3",
+        "@types/node": "*",
+        "jest-mock": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
     },
-    "@nrwl/nx-win32-x64-msvc": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/nx-win32-x64-msvc/-/nx-win32-x64-msvc-15.9.3.tgz",
-      "integrity": "sha512-gdnvqURKnu0EQGOFJ6NUKq6wSB+viNb7Z8qtKhzSmFwVjT8akOnLWn7ZhL9v28TAjLM7/s1Mwvmz/IMj1PGlcQ==",
+    "node_modules/@jest/expect": {
+      "version": "28.1.3",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "expect": "^28.1.3",
+        "jest-snapshot": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
     },
-    "@nrwl/tao": {
-      "version": "13.1.3",
-      "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-13.1.3.tgz",
-      "integrity": "sha512-/IwJgSgCBD1SaF+n8RuXX2OxDAh8ut/+P8pMswjm8063ac30UlAHjQ4XTYyskLH8uoUmNi2hNaGgHUrkwt7tQA==",
+    "node_modules/@jest/expect-utils": {
+      "version": "28.1.3",
       "dev": true,
-      "requires": {
-        "chalk": "4.1.0",
-        "enquirer": "~2.3.6",
-        "fs-extra": "^9.1.0",
-        "jsonc-parser": "3.0.0",
-        "nx": "13.1.3",
-        "rxjs": "^6.5.4",
-        "rxjs-for-await": "0.0.2",
-        "semver": "7.3.4",
-        "tmp": "~0.2.1",
-        "tslib": "^2.0.0",
-        "yargs-parser": "20.0.0"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.3.4",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
-          "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "tmp": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
-          "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
-          "dev": true,
-          "requires": {
-            "rimraf": "^3.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        },
-        "yargs-parser": {
-          "version": "20.0.0",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.0.0.tgz",
-          "integrity": "sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA==",
-          "dev": true
-        }
+        "jest-get-type": "^28.0.2"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
       }
     },
-    "@parcel/watcher": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz",
-      "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==",
+    "node_modules/@jest/fake-timers": {
+      "version": "28.1.3",
       "dev": true,
-      "requires": {
-        "node-addon-api": "^3.2.1",
-        "node-gyp-build": "^4.3.0"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^28.1.3",
+        "@sinonjs/fake-timers": "^9.1.2",
+        "@types/node": "*",
+        "jest-message-util": "^28.1.3",
+        "jest-mock": "^28.1.3",
+        "jest-util": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
       }
     },
-    "@popperjs/core": {
-      "version": "2.10.2",
-      "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.2.tgz",
-      "integrity": "sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ=="
-    },
-    "@protobufjs/aspromise": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
-      "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
-      "dev": true
-    },
-    "@protobufjs/base64": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
-      "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
-      "dev": true
-    },
-    "@protobufjs/codegen": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
-      "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
-      "dev": true
-    },
-    "@protobufjs/eventemitter": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
-      "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
-      "dev": true
-    },
-    "@protobufjs/fetch": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
-      "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
+    "node_modules/@jest/globals": {
+      "version": "28.1.3",
       "dev": true,
-      "requires": {
-        "@protobufjs/aspromise": "^1.1.1",
-        "@protobufjs/inquire": "^1.1.0"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^28.1.3",
+        "@jest/expect": "^28.1.3",
+        "@jest/types": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
       }
     },
-    "@protobufjs/float": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
-      "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
-      "dev": true
-    },
-    "@protobufjs/inquire": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
-      "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
-      "dev": true
-    },
-    "@protobufjs/path": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
-      "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
-      "dev": true
-    },
-    "@protobufjs/pool": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
-      "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
-      "dev": true
-    },
-    "@protobufjs/utf8": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
-      "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
-      "dev": true
-    },
-    "@schematics/angular": {
-      "version": "13.3.9",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.3.9.tgz",
-      "integrity": "sha512-tm5wst7+Z8cOgOJ/4JVlYKOFCCOVnqKYFtYf0BIWq6RFBXcw6QqbGW1wXH8ASmuev4QZXKgqc7YKALPpYAKCeQ==",
-      "dev": true,
-      "requires": {
-        "@angular-devkit/core": "13.3.9",
-        "@angular-devkit/schematics": "13.3.9",
-        "jsonc-parser": "3.0.0"
-      },
-      "dependencies": {
-        "@angular-devkit/core": {
-          "version": "13.3.9",
-          "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.9.tgz",
-          "integrity": "sha512-XqCuIWyoqIsLABjV3GQL/+EiBCt3xVPPtNp3Mg4gjBsDLW7PEnvbb81yGkiZQmIsq4EIyQC/6fQa3VdjsCshGg==",
-          "dev": true,
-          "requires": {
-            "ajv": "8.9.0",
-            "ajv-formats": "2.1.1",
-            "fast-json-stable-stringify": "2.1.0",
-            "magic-string": "0.25.7",
-            "rxjs": "6.6.7",
-            "source-map": "0.7.3"
-          }
-        },
-        "rxjs": {
-          "version": "6.6.7",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-          "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-          "dev": true,
-          "requires": {
-            "tslib": "^1.9.0"
-          }
-        },
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
+    "node_modules/@jest/reporters": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@bcoe/v8-coverage": "^0.2.3",
+        "@jest/console": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "exit": "^0.1.2",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "istanbul-lib-coverage": "^3.0.0",
+        "istanbul-lib-instrument": "^6.0.0",
+        "istanbul-lib-report": "^3.0.0",
+        "istanbul-lib-source-maps": "^4.0.0",
+        "istanbul-reports": "^3.1.3",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "slash": "^3.0.0",
+        "string-length": "^4.0.1",
+        "strip-ansi": "^6.0.0",
+        "v8-to-istanbul": "^9.0.1"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
         }
       }
     },
-    "@sideway/address": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
-      "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
+    "node_modules/@jest/reporters/node_modules/@jest/console": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@hapi/hoek": "^9.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@sideway/formula": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz",
-      "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==",
-      "dev": true
-    },
-    "@sideway/pinpoint": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
-      "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==",
-      "dev": true
-    },
-    "@sinclair/typebox": {
-      "version": "0.24.51",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
-      "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==",
-      "dev": true
-    },
-    "@sinonjs/commons": {
-      "version": "1.8.6",
-      "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
-      "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
+    "node_modules/@jest/reporters/node_modules/@jest/schemas": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "type-detect": "4.0.8"
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@sinonjs/fake-timers": {
-      "version": "9.1.2",
-      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
-      "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
+    "node_modules/@jest/reporters/node_modules/@jest/test-result": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@sinonjs/commons": "^1.7.0"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@stylelint/postcss-css-in-js": {
-      "version": "0.37.3",
-      "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz",
-      "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==",
+    "node_modules/@jest/reporters/node_modules/@jest/transform": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@babel/core": "^7.17.9"
-      },
+      "license": "MIT",
       "dependencies": {
-        "@babel/core": {
-          "version": "7.21.8",
-          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.8.tgz",
-          "integrity": "sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==",
-          "dev": true,
-          "requires": {
-            "@ampproject/remapping": "^2.2.0",
-            "@babel/code-frame": "^7.21.4",
-            "@babel/generator": "^7.21.5",
-            "@babel/helper-compilation-targets": "^7.21.5",
-            "@babel/helper-module-transforms": "^7.21.5",
-            "@babel/helpers": "^7.21.5",
-            "@babel/parser": "^7.21.8",
-            "@babel/template": "^7.20.7",
-            "@babel/traverse": "^7.21.5",
-            "@babel/types": "^7.21.5",
-            "convert-source-map": "^1.7.0",
-            "debug": "^4.1.0",
-            "gensync": "^1.0.0-beta.2",
-            "json5": "^2.2.2",
-            "semver": "^6.3.0"
-          }
-        }
+        "@babel/core": "^7.11.6",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "babel-plugin-istanbul": "^6.1.1",
+        "chalk": "^4.0.0",
+        "convert-source-map": "^2.0.0",
+        "fast-json-stable-stringify": "^2.1.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "pirates": "^4.0.4",
+        "slash": "^3.0.0",
+        "write-file-atomic": "^4.0.2"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@stylelint/postcss-markdown": {
-      "version": "0.36.2",
-      "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz",
-      "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==",
+    "node_modules/@jest/reporters/node_modules/@jest/types": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "remark": "^13.0.0",
-        "unist-util-find-all-after": "^3.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@swagger-api/apidom-ast": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-0.70.0.tgz",
-      "integrity": "sha512-zQ1RUkXjx5NPYv1bmkoXwlQi7oJC7DJqYi0syTQKswJZDbOkHCwz8cDP/YystOEOL+yyIN7i5EQBIHfy5yAMmA==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2",
-        "unraw": "^2.0.1"
-      }
+    "node_modules/@jest/reporters/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
     },
-    "@swagger-api/apidom-core": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-0.70.0.tgz",
-      "integrity": "sha512-nUw0aehnhm2BUd17pbCLUuyd4E5bsn+K3teYLGs8Z/LGo9gpjZ/BMTL3H/3+F42ZRux79/3b6QksDj4f9yeSpg==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-ast": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "minim": "~0.23.8",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "short-unique-id": "^4.4.4",
-        "stampit": "^4.3.2"
+    "node_modules/@jest/reporters/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "@swagger-api/apidom-json-pointer": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.70.0.tgz",
-      "integrity": "sha512-6MSgWgl1juBMiK4lFp/IBuWO21FB6dm+T9PnRIl2D8tSESndhNHfk3EPkfrfXDOtCK2gqij52w9JorRKEfxfWw==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
-      }
+    "node_modules/@jest/reporters/node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "@swagger-api/apidom-ns-api-design-systems": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.70.0.tgz",
-      "integrity": "sha512-CA/5cyLWr1lC4oqoEm3BNbQ7ZLXQWhCK6ddTGckgrFNj4j6TxJycC83JGFvt8K2M9uSNRTh7t6b1o1kRzQ+Scg==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-openapi-3-1": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2"
+    "node_modules/@jest/reporters/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "@swagger-api/apidom-ns-asyncapi-2": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.70.0.tgz",
-      "integrity": "sha512-P7r6LZR1o8BVGcY+j4HWWlIk1XhP8H2tL7XCHJ3fmYCgqrbdyo3pJxZujfddbvI/TT4/8YMfq2fat6MMu0DhfQ==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-json-schema-draft-7": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2"
+    "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
+      "version": "6.0.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@babel/core": "^7.12.3",
+        "@babel/parser": "^7.14.7",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-coverage": "^3.2.0",
+        "semver": "^7.5.4"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "@swagger-api/apidom-ns-json-schema-draft-4": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.70.0.tgz",
-      "integrity": "sha512-Y8O8Xl4P2cKDIunsvDV5Gvq+BVN/uIN5rJ5axHsZt0PL1D0c2Ypu6uCBDNb6iPdUZ3REpzemYNi2eZanL5gKtQ==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2"
+    "node_modules/@jest/reporters/node_modules/jest-haste-map": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
       }
     },
-    "@swagger-api/apidom-ns-json-schema-draft-6": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.70.0.tgz",
-      "integrity": "sha512-xaYZ7NeivNZreYzaufNLpxAqusjAXji8Ls+HArzgZWdpjddnN2wvHDEkF8gPBdYMRWiXWLKzXFey/ZhOSwLi9Q==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-json-schema-draft-4": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2"
+    "node_modules/@jest/reporters/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@swagger-api/apidom-ns-json-schema-draft-7": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.70.0.tgz",
-      "integrity": "sha512-yy1cha8GiIHBfhK31ycTSd3UwWzQGjWcSLAl7dfT/UpemcHn4wGzJtoFx+tqpGHwpUie3qpEm7ReLRrYzeg0Ew==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-json-schema-draft-6": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2"
+    "node_modules/@jest/reporters/node_modules/jest-regex-util": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@swagger-api/apidom-ns-openapi-3-0": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.70.0.tgz",
-      "integrity": "sha512-wEw5uHd1/XqgkwvGM1DrhwPsDWcMNedxHybq0b7Bp2ZE7QWI4V/OS1gOnYpBvB6OUpHkEc5c2z++hr6fd0FhHQ==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-json-schema-draft-4": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2"
+    "node_modules/@jest/reporters/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@swagger-api/apidom-ns-openapi-3-1": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.70.0.tgz",
-      "integrity": "sha512-0d8IPy7A9lCjscXsw260j07xTQu8ExG3OpFxSJPOwQsrZ6X2Oooaq/0e0hnK15ngaVQzv9Iq8pBXSpJ/oJD8Ww==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-openapi-3-0": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2"
+    "node_modules/@jest/reporters/node_modules/jest-worker": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "jest-util": "^29.7.0",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@swagger-api/apidom-parser-adapter-api-design-systems-json": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.70.0.tgz",
-      "integrity": "sha512-mXR+0EjOa+1trve5xGKmhDSXdIs8zMMJAN9KlnPvAVVezpoDLgg8s687qfPyNmfRmYcnO/18X8pn3/WhQCVFHA==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-api-design-systems": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-json": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
+    "node_modules/@jest/reporters/node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
       }
     },
-    "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.70.0.tgz",
-      "integrity": "sha512-sfQq2cetMAH9CWS9UINTDdZ+Hs735C6CojtG6dkeA+BJe0gJg+NmQI2qwePQ1jY9p9D+lHMMl56ispYQQnaCjg==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-api-design-systems": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
+    "node_modules/@jest/reporters/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "@swagger-api/apidom-parser-adapter-asyncapi-json-2": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.70.0.tgz",
-      "integrity": "sha512-u35roIPmq9zvXKfuGyMzY9gZMj1kTLmFSdCvOA5JvysEQLSx59s/Qs4um+BLvH2Z9/D5DYVb2cnyujTIVmoMYg==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-asyncapi-2": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-json": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
+    "node_modules/@jest/reporters/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.70.0.tgz",
-      "integrity": "sha512-NYxbr+BFDf6y92+o8sFaQ0UWxh72jNo8TkCl1/JYSrc5QuLSIu5UIMbjtLPGY+82okMRxCwjG7dCd8h62/KpiQ==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-asyncapi-2": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
+    "node_modules/@jest/reporters/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "@swagger-api/apidom-parser-adapter-json": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.70.0.tgz",
-      "integrity": "sha512-j0Pb4Xg1VdFaCwYInF9qQxCDpaznzgse4oSUy1uJkLK0W/eC6bLNHyDGJmxR/TAqxY4yzb5zNCJnlJkjZqKxkQ==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-ast": "^0.70.0",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2",
-        "tree-sitter": "=0.20.1",
-        "tree-sitter-json": "=0.20.0",
-        "web-tree-sitter": "=0.20.7"
+    "node_modules/@jest/reporters/node_modules/semver": {
+      "version": "7.5.4",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "@swagger-api/apidom-parser-adapter-openapi-json-3-0": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.70.0.tgz",
-      "integrity": "sha512-GsQH3GaOWVnGYtd+jajrsXjn1N0JqH1cQz/RoyxaD2zeI0LDW3efXGfa2zr3tFWqxTPrdOIMu6irH8aWtiC5sA==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-openapi-3-0": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-json": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
-      }
+    "node_modules/@jest/reporters/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
     },
-    "@swagger-api/apidom-parser-adapter-openapi-json-3-1": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.70.0.tgz",
-      "integrity": "sha512-e8bUiTa+q4xTS77hZC9pyg6U91rWlbfXBhzUGAn6fB+JF4PXxyep6sH+8JbJvGjI6DFvvuiwzRvVFt6DyKFhZg==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-openapi-3-1": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-json": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
+    "node_modules/@jest/schemas": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.24.1"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
       }
     },
-    "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.70.0.tgz",
-      "integrity": "sha512-4dwRV9uhjuIziV5Z9742RpVCo+QtrQDrGxh5pQaTbU8mNvXdrZ7ebFOxYQIPmxGcPAbxm1x6dvicUvhs97Lsrg==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-openapi-3-0": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
+    "node_modules/@jest/source-map": {
+      "version": "28.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.13",
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.2.9"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
       }
     },
-    "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.70.0.tgz",
-      "integrity": "sha512-u/JE8maz+PSm3prCTE9jx0XaK1/+kxoFT1v7l9AXqAyczsyQ/FMPNUvQ8Qyr/Jad5wHW6IcIIhqG79n4e819JQ==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-ns-openapi-3-1": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0"
+    "node_modules/@jest/test-result": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^28.1.3",
+        "@jest/types": "^28.1.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
       }
     },
-    "@swagger-api/apidom-parser-adapter-yaml-1-2": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.70.0.tgz",
-      "integrity": "sha512-DfJ9f7Qm6QdmGJMMHicksEZKRJYR0yY9KTF+UKPBGChakXxr9Gt6ZkxWwRz0ataPFJZbW+Q8/P56Mrp/ETH+WQ==",
-      "optional": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-ast": "^0.70.0",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2",
-        "tree-sitter": "=0.20.1",
-        "tree-sitter-yaml": "=0.5.0",
-        "web-tree-sitter": "=0.20.7"
+    "node_modules/@jest/test-sequencer": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/test-result": "^29.7.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@swagger-api/apidom-reference": {
-      "version": "0.70.0",
-      "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-0.70.0.tgz",
-      "integrity": "sha512-HKfDmfQQc/RmdSdOpN/WtGF+97WjgRmvIdt3FmuPTqFRM4CeGpDM/MXvcxa71sN1yUx/o6LkRRwYSqDlYfutIw==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.7",
-        "@swagger-api/apidom-core": "^0.70.0",
-        "@swagger-api/apidom-json-pointer": "^0.70.0",
-        "@swagger-api/apidom-ns-asyncapi-2": "^0.70.0",
-        "@swagger-api/apidom-ns-openapi-3-0": "^0.70.0",
-        "@swagger-api/apidom-ns-openapi-3-1": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-json": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^0.70.0",
-        "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.70.0",
-        "@types/ramda": "~0.29.1",
-        "axios": "^1.4.0",
-        "minimatch": "^7.4.3",
-        "process": "^0.11.10",
-        "ramda": "~0.29.0",
-        "ramda-adjunct": "^4.0.0",
-        "stampit": "^4.3.2"
-      },
+    "node_modules/@jest/test-sequencer/node_modules/@jest/console": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-          "requires": {
-            "balanced-match": "^1.0.0"
-          }
-        },
-        "minimatch": {
-          "version": "7.4.6",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz",
-          "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==",
-          "requires": {
-            "brace-expansion": "^2.0.1"
-          }
-        }
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@swimlane/ngx-datatable": {
-      "version": "18.0.0",
-      "resolved": "https://registry.npmjs.org/@swimlane/ngx-datatable/-/ngx-datatable-18.0.0.tgz",
-      "integrity": "sha512-secqjzlLpGJqoXjcoCoTf8ClnVlZAENJcXvuBfseGenOD+evGNXc4UTZhwCPDUBlJ4xnMZHUWK6IVk5sXe+WlQ==",
-      "requires": {
-        "tslib": "^2.0.0"
+    "node_modules/@jest/test-sequencer/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@tootallnate/once": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
-      "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
-      "dev": true
-    },
-    "@ts-morph/common": {
-      "version": "0.12.3",
-      "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.12.3.tgz",
-      "integrity": "sha512-4tUmeLyXJnJWvTFOKtcNJ1yh0a3SsTLi2MUoyj8iUNznFRN1ZquaNe7Oukqrnki2FzZkm0J9adCNLDZxUzvj+w==",
+    "node_modules/@jest/test-sequencer/node_modules/@jest/test-result": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "fast-glob": "^3.2.7",
-        "minimatch": "^3.0.4",
-        "mkdirp": "^1.0.4",
-        "path-browserify": "^1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@types/babel__core": {
-      "version": "7.20.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz",
-      "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==",
+    "node_modules/@jest/test-sequencer/node_modules/@jest/types": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "@babel/parser": "^7.20.7",
-        "@babel/types": "^7.20.7",
-        "@types/babel__generator": "*",
-        "@types/babel__template": "*",
-        "@types/babel__traverse": "*"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@types/babel__generator": {
-      "version": "7.6.4",
-      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz",
-      "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==",
+    "node_modules/@jest/test-sequencer/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
       "dev": true,
-      "requires": {
-        "@babel/types": "^7.0.0"
-      }
+      "license": "MIT"
     },
-    "@types/babel__template": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz",
-      "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==",
+    "node_modules/@jest/test-sequencer/node_modules/chalk": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "@babel/parser": "^7.1.0",
-        "@babel/types": "^7.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "@types/babel__traverse": {
-      "version": "7.20.0",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.0.tgz",
-      "integrity": "sha512-TBOjqAGf0hmaqRwpii5LLkJLg7c6OMm4nHLmpsUxwk9bBHtoTC6dAHdVWdGv4TBxj2CZOZY8Xfq8WmfoVi7n4Q==",
+    "node_modules/@jest/test-sequencer/node_modules/jest-haste-map": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@babel/types": "^7.20.7"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
       }
     },
-    "@types/body-parser": {
-      "version": "1.19.2",
-      "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz",
-      "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==",
+    "node_modules/@jest/test-sequencer/node_modules/jest-message-util": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@types/connect": "*",
-        "@types/node": "*"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@types/bonjour": {
-      "version": "3.5.10",
-      "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz",
-      "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==",
+    "node_modules/@jest/test-sequencer/node_modules/jest-regex-util": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "@types/node": "*"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@types/brace-expansion": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@types/brace-expansion/-/brace-expansion-1.1.0.tgz",
-      "integrity": "sha512-SaU/Kgp6z40CiF9JxlsrSrBEa+8YIry9IiCPhhYSNekeEhIAkY7iyu9aZ+5dSQIdo7mf86MUVvxWYm5GAzB/0g==",
-      "dev": true
-    },
-    "@types/chart.js": {
-      "version": "2.9.37",
-      "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.37.tgz",
-      "integrity": "sha512-9bosRfHhkXxKYfrw94EmyDQcdjMaQPkU1fH2tDxu8DWXxf1mjzWQAV4laJF51ZbC2ycYwNDvIm1rGez8Bug0vg==",
-      "requires": {
-        "moment": "^2.10.2"
+    "node_modules/@jest/test-sequencer/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@types/connect": {
-      "version": "3.4.35",
-      "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
-      "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
+    "node_modules/@jest/test-sequencer/node_modules/jest-worker": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@types/node": "*"
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "jest-util": "^29.7.0",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@types/connect-history-api-fallback": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz",
-      "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==",
+    "node_modules/@jest/test-sequencer/node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
       "dev": true,
-      "requires": {
-        "@types/express-serve-static-core": "*",
-        "@types/node": "*"
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
       }
     },
-    "@types/cypress-cucumber-preprocessor": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/cypress-cucumber-preprocessor/-/cypress-cucumber-preprocessor-4.0.1.tgz",
-      "integrity": "sha512-sK2/uU5CtmJ51zo0JF2Lc4iSw9Fy3xn9ewfewuooV5Qmeb5O+brAHuoXKMV7UWwRbBmd+txhAXAJoi4S5QLDRQ==",
-      "dev": true
-    },
-    "@types/eslint": {
-      "version": "8.40.0",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.0.tgz",
-      "integrity": "sha512-nbq2mvc/tBrK9zQQuItvjJl++GTN5j06DaPtp3hZCpngmG6Q3xoyEmd0TwZI0gAy/G1X0zhGBbr2imsGFdFV0g==",
+    "node_modules/@jest/test-sequencer/node_modules/pretty-format": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "@types/estree": "*",
-        "@types/json-schema": "*"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "@types/eslint-scope": {
-      "version": "3.7.4",
-      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
-      "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
+    "node_modules/@jest/test-sequencer/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
       "dev": true,
-      "requires": {
-        "@types/eslint": "*",
-        "@types/estree": "*"
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "@types/estree": {
-      "version": "0.0.51",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
-      "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
-      "dev": true
+    "node_modules/@jest/transform": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@jest/types": "^28.1.3",
+        "@jridgewell/trace-mapping": "^0.3.13",
+        "babel-plugin-istanbul": "^6.1.1",
+        "chalk": "^4.0.0",
+        "convert-source-map": "^1.4.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^28.1.3",
+        "jest-regex-util": "^28.0.2",
+        "jest-util": "^28.1.3",
+        "micromatch": "^4.0.4",
+        "pirates": "^4.0.4",
+        "slash": "^3.0.0",
+        "write-file-atomic": "^4.0.1"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
     },
-    "@types/express": {
-      "version": "4.17.17",
-      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz",
-      "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==",
+    "node_modules/@jest/transform/node_modules/chalk": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "@types/body-parser": "*",
-        "@types/express-serve-static-core": "^4.17.33",
-        "@types/qs": "*",
-        "@types/serve-static": "*"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "@types/express-serve-static-core": {
-      "version": "4.17.35",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz",
-      "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==",
+    "node_modules/@jest/types": {
+      "version": "28.1.3",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^28.1.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
         "@types/node": "*",
-        "@types/qs": "*",
-        "@types/range-parser": "*",
-        "@types/send": "*"
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
       }
     },
-    "@types/file-saver": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.1.tgz",
-      "integrity": "sha512-g1QUuhYVVAamfCifK7oB7G3aIl4BbOyzDOqVyUfEr4tfBKrXfeH+M+Tg7HKCXSrbzxYdhyCP7z9WbKo0R2hBCw=="
-    },
-    "@types/graceful-fs": {
-      "version": "4.1.6",
-      "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
-      "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+    "node_modules/@jest/types/node_modules/chalk": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "@types/node": "*"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "@types/hast": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
-      "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
-      "requires": {
-        "@types/unist": "*"
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.1.1",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.0",
+        "@jridgewell/sourcemap-codec": "^1.4.10"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "@types/hoist-non-react-statics": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
-      "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
-      "requires": {
-        "@types/react": "*",
-        "hoist-non-react-statics": "^3.3.0"
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "@types/http-proxy": {
-      "version": "1.17.11",
-      "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz",
-      "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*"
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.1.2",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "@types/istanbul-lib-coverage": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
-      "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
-      "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==",
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.5",
       "dev": true,
-      "requires": {
-        "@types/istanbul-lib-coverage": "*"
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
       }
     },
-    "@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==",
+    "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.3",
       "dev": true,
-      "requires": {
-        "@types/istanbul-lib-report": "*"
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "@types/jest": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.3.tgz",
-      "integrity": "sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw==",
-      "dev": true,
-      "requires": {
-        "jest-matcher-utils": "^28.0.0",
-        "pretty-format": "^28.0.0"
-      }
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.4.15",
+      "license": "MIT"
     },
-    "@types/jsdom": {
-      "version": "16.2.15",
-      "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz",
-      "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==",
-      "dev": true,
-      "requires": {
-        "@types/node": "*",
-        "@types/parse5": "^6.0.3",
-        "@types/tough-cookie": "*"
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.19",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
-    "@types/json-schema": {
-      "version": "7.0.12",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
-      "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
-      "dev": true
+    "node_modules/@juggle/resize-observer": {
+      "version": "3.4.0",
+      "license": "Apache-2.0"
     },
-    "@types/lodash": {
-      "version": "4.14.161",
-      "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.161.tgz",
-      "integrity": "sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA==",
-      "dev": true
+    "node_modules/@leichtgewicht/ip-codec": {
+      "version": "2.0.4",
+      "dev": true,
+      "license": "MIT"
     },
-    "@types/long": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
-      "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==",
-      "dev": true
+    "node_modules/@ng-bootstrap/ng-bootstrap": {
+      "version": "14.2.0",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.3.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "^15.0.0",
+        "@angular/core": "^15.0.0",
+        "@angular/forms": "^15.0.0",
+        "@angular/localize": "^15.0.0",
+        "@popperjs/core": "^2.11.6",
+        "rxjs": "^6.5.3 || ^7.4.0"
+      }
     },
-    "@types/mdast": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.11.tgz",
-      "integrity": "sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==",
+    "node_modules/@ngtools/webpack": {
+      "version": "15.2.9",
       "dev": true,
-      "requires": {
-        "@types/unist": "*"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
+      },
+      "peerDependencies": {
+        "@angular/compiler-cli": "^15.0.0",
+        "typescript": ">=4.8.2 <5.0",
+        "webpack": "^5.54.0"
       }
     },
-    "@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/minimatch": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-      "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
-      "dev": true
-    },
-    "@types/minimist": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz",
-      "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==",
-      "dev": true
-    },
-    "@types/node": {
-      "version": "12.12.62",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.62.tgz",
-      "integrity": "sha512-qAfo81CsD7yQIM9mVyh6B/U47li5g7cfpVQEDMfQeF8pSZVwzbhwU3crc0qG4DmpsebpJPR49AKOExQyJ05Cpg==",
-      "dev": true
-    },
-    "@types/normalize-package-data": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
-      "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
-      "dev": true
-    },
-    "@types/parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
-      "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
-      "dev": true
-    },
-    "@types/parse5": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
-      "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
-      "dev": true
-    },
-    "@types/prettier": {
-      "version": "2.7.2",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz",
-      "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==",
-      "dev": true
-    },
-    "@types/prop-types": {
-      "version": "15.7.5",
-      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
-      "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
-    },
-    "@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/ramda": {
-      "version": "0.29.2",
-      "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.2.tgz",
-      "integrity": "sha512-JxvBGR3G4gV3RTOBugVHAAOD6iiv2WjlJ8BHr0s7KALdPpx2l+didoTuoJMmrA0eqpUaCm/slKP4TmxMRihd8g==",
-      "requires": {
-        "types-ramda": "^0.29.3"
+    "node_modules/@ngx-formly/bootstrap": {
+      "version": "6.1.1",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "peerDependencies": {
+        "@ngx-formly/core": "6.1.1",
+        "bootstrap": "^5.0.0"
       }
     },
-    "@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/react": {
-      "version": "18.2.7",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz",
-      "integrity": "sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw==",
-      "requires": {
-        "@types/prop-types": "*",
-        "@types/scheduler": "*",
-        "csstype": "^3.0.2"
+    "node_modules/@ngx-formly/core": {
+      "version": "6.1.1",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "peerDependencies": {
+        "@angular/forms": ">=13.2.0",
+        "rxjs": "^6.5.3 || ^7.0.0"
       }
     },
-    "@types/react-redux": {
-      "version": "7.1.25",
-      "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.25.tgz",
-      "integrity": "sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg==",
-      "requires": {
-        "@types/hoist-non-react-statics": "^3.3.0",
-        "@types/react": "*",
-        "hoist-non-react-statics": "^3.3.0",
-        "redux": "^4.0.0"
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "@types/retry": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
-      "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
-      "dev": true
-    },
-    "@types/scheduler": {
-      "version": "0.16.3",
-      "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
-      "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
-    },
-    "@types/send": {
-      "version": "0.17.1",
-      "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz",
-      "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==",
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
       "dev": true,
-      "requires": {
-        "@types/mime": "^1",
-        "@types/node": "*"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "@types/serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==",
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
       "dev": true,
-      "requires": {
-        "@types/express": "*"
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "@types/serve-static": {
-      "version": "1.15.1",
-      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz",
-      "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==",
+    "node_modules/@npmcli/fs": {
+      "version": "3.1.0",
       "dev": true,
-      "requires": {
-        "@types/mime": "*",
-        "@types/node": "*"
+      "license": "ISC",
+      "dependencies": {
+        "semver": "^7.3.5"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "@types/sinonjs__fake-timers": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz",
-      "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==",
-      "dev": true
-    },
-    "@types/sizzle": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz",
-      "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==",
-      "dev": true
-    },
-    "@types/sockjs": {
-      "version": "0.3.33",
-      "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz",
-      "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==",
+    "node_modules/@npmcli/git": {
+      "version": "4.1.0",
       "dev": true,
-      "requires": {
-        "@types/node": "*"
+      "license": "ISC",
+      "dependencies": {
+        "@npmcli/promise-spawn": "^6.0.0",
+        "lru-cache": "^7.4.4",
+        "npm-pick-manifest": "^8.0.0",
+        "proc-log": "^3.0.0",
+        "promise-inflight": "^1.0.1",
+        "promise-retry": "^2.0.1",
+        "semver": "^7.3.5",
+        "which": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "@types/stack-utils": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
-      "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==",
-      "dev": true
-    },
-    "@types/swagger-ui": {
-      "version": "3.52.0",
-      "resolved": "https://registry.npmjs.org/@types/swagger-ui/-/swagger-ui-3.52.0.tgz",
-      "integrity": "sha512-SlufixEmh+8CLHNgTfAfCT1icNOF7bXboWabhHr1+hIolqlvfwYJGe7HgRcpI3ChE7HWASmEKLkMu34rxseJjQ==",
-      "dev": true
-    },
-    "@types/tough-cookie": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
-      "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==",
-      "dev": true
-    },
-    "@types/unist": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
-      "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ=="
-    },
-    "@types/uuid": {
-      "version": "3.4.10",
-      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz",
-      "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==",
-      "dev": true
-    },
-    "@types/ws": {
-      "version": "8.5.4",
-      "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz",
-      "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==",
+    "node_modules/@npmcli/git/node_modules/lru-cache": {
+      "version": "7.18.3",
       "dev": true,
-      "requires": {
-        "@types/node": "*"
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
       }
     },
-    "@types/yargs": {
-      "version": "17.0.24",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
-      "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+    "node_modules/@npmcli/git/node_modules/which": {
+      "version": "3.0.1",
       "dev": true,
-      "requires": {
-        "@types/yargs-parser": "*"
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/which.js"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "@types/yargs-parser": {
-      "version": "21.0.0",
-      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
-      "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
-      "dev": true
+    "node_modules/@npmcli/installed-package-contents": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "npm-bundled": "^3.0.0",
+        "npm-normalize-package-bin": "^3.0.0"
+      },
+      "bin": {
+        "installed-package-contents": "lib/index.js"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
     },
-    "@types/yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==",
+    "node_modules/@npmcli/node-gyp": {
+      "version": "3.0.0",
       "dev": true,
-      "optional": true,
-      "requires": {
-        "@types/node": "*"
+      "license": "ISC",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "@typescript-eslint/eslint-plugin": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.27.1.tgz",
-      "integrity": "sha512-6dM5NKT57ZduNnJfpY81Phe9nc9wolnMCnknb1im6brWi1RYv84nbMS3olJa27B6+irUVV1X/Wb+Am0FjJdGFw==",
+    "node_modules/@npmcli/promise-spawn": {
+      "version": "6.0.2",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/scope-manager": "5.27.1",
-        "@typescript-eslint/type-utils": "5.27.1",
-        "@typescript-eslint/utils": "5.27.1",
-        "debug": "^4.3.4",
-        "functional-red-black-tree": "^1.0.1",
-        "ignore": "^5.2.0",
-        "regexpp": "^3.2.0",
-        "semver": "^7.3.7",
-        "tsutils": "^3.21.0"
+      "license": "ISC",
+      "dependencies": {
+        "which": "^3.0.0"
       },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@npmcli/promise-spawn/node_modules/which": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "ISC",
       "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/which.js"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "@typescript-eslint/experimental-utils": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.27.1.tgz",
-      "integrity": "sha512-Vd8uewIixGP93sEnmTRIH6jHZYRQRkGPDPpapACMvitJKX8335VHNyqKTE+mZ+m3E2c5VznTZfSsSsS5IF7vUA==",
+    "node_modules/@npmcli/run-script": {
+      "version": "6.0.2",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/utils": "5.27.1"
+      "license": "ISC",
+      "dependencies": {
+        "@npmcli/node-gyp": "^3.0.0",
+        "@npmcli/promise-spawn": "^6.0.0",
+        "node-gyp": "^9.0.0",
+        "read-package-json-fast": "^3.0.0",
+        "which": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "@typescript-eslint/parser": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.27.1.tgz",
-      "integrity": "sha512-7Va2ZOkHi5NP+AZwb5ReLgNF6nWLGTeUJfxdkVUAPPSaAdbWNnFZzLZ4EGGmmiCTg+AwlbE1KyUYTBglosSLHQ==",
+    "node_modules/@npmcli/run-script/node_modules/which": {
+      "version": "3.0.1",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/scope-manager": "5.27.1",
-        "@typescript-eslint/types": "5.27.1",
-        "@typescript-eslint/typescript-estree": "5.27.1",
-        "debug": "^4.3.4"
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/which.js"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "@typescript-eslint/scope-manager": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.27.1.tgz",
-      "integrity": "sha512-fQEOSa/QroWE6fAEg+bJxtRZJTH8NTskggybogHt4H9Da8zd4cJji76gA5SBlR0MgtwF7rebxTbDKB49YUCpAg==",
+    "node_modules/@nrwl/cli": {
+      "version": "15.9.3",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.27.1",
-        "@typescript-eslint/visitor-keys": "5.27.1"
+      "license": "MIT",
+      "dependencies": {
+        "nx": "15.9.3"
       }
     },
-    "@typescript-eslint/type-utils": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.27.1.tgz",
-      "integrity": "sha512-+UC1vVUWaDHRnC2cQrCJ4QtVjpjjCgjNFpg8b03nERmkHv9JV9X5M19D7UFMd+/G7T/sgFwX2pGmWK38rqyvXw==",
+    "node_modules/@nrwl/cli/node_modules/@nrwl/tao": {
+      "version": "15.9.3",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/utils": "5.27.1",
-        "debug": "^4.3.4",
-        "tsutils": "^3.21.0"
+      "license": "MIT",
+      "dependencies": {
+        "nx": "15.9.3"
+      },
+      "bin": {
+        "tao": "index.js"
       }
     },
-    "@typescript-eslint/types": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.27.1.tgz",
-      "integrity": "sha512-LgogNVkBhCTZU/m8XgEYIWICD6m4dmEDbKXESCbqOXfKZxRKeqpiJXQIErv66sdopRKZPo5l32ymNqibYEH/xg==",
-      "dev": true
+    "node_modules/@nrwl/cli/node_modules/argparse": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "Python-2.0"
     },
-    "@typescript-eslint/typescript-estree": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.27.1.tgz",
-      "integrity": "sha512-DnZvvq3TAJ5ke+hk0LklvxwYsnXpRdqUY5gaVS0D4raKtbznPz71UJGnPTHEFo0GDxqLOLdMkkmVZjSpET1hFw==",
+    "node_modules/@nrwl/cli/node_modules/axios": {
+      "version": "1.5.0",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.27.1",
-        "@typescript-eslint/visitor-keys": "5.27.1",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "semver": "^7.3.7",
-        "tsutils": "^3.21.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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
-        },
-        "globby": {
-          "version": "11.1.0",
-          "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-          "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-          "dev": true,
-          "requires": {
-            "array-union": "^2.1.0",
-            "dir-glob": "^3.0.1",
-            "fast-glob": "^3.2.9",
-            "ignore": "^5.2.0",
-            "merge2": "^1.4.1",
-            "slash": "^3.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "follow-redirects": "^1.15.0",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
       }
     },
-    "@typescript-eslint/utils": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.27.1.tgz",
-      "integrity": "sha512-mZ9WEn1ZLDaVrhRaYgzbkXBkTPghPFsup8zDbbsYTxC5OmqrFE7skkKS/sraVsLP3TcT3Ki5CSyEFBRkLH/H/w==",
+    "node_modules/@nrwl/cli/node_modules/chalk": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "@types/json-schema": "^7.0.9",
-        "@typescript-eslint/scope-manager": "5.27.1",
-        "@typescript-eslint/types": "5.27.1",
-        "@typescript-eslint/typescript-estree": "5.27.1",
-        "eslint-scope": "^5.1.1",
-        "eslint-utils": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "@typescript-eslint/visitor-keys": {
-      "version": "5.27.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.27.1.tgz",
-      "integrity": "sha512-xYs6ffo01nhdJgPieyk7HAOpjhTsx7r/oB9LWEhwAXgwn33tkr+W8DI2ChboqhZlC4q3TC6geDYPoiX8ROqyOQ==",
+    "node_modules/@nrwl/cli/node_modules/cli-spinners": {
+      "version": "2.6.1",
       "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.27.1",
-        "eslint-visitor-keys": "^3.3.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "@webassemblyjs/ast": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
-      "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+    "node_modules/@nrwl/cli/node_modules/cliui": {
+      "version": "7.0.4",
       "dev": true,
-      "requires": {
-        "@webassemblyjs/helper-numbers": "1.11.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
       }
     },
-    "@webassemblyjs/floating-point-hex-parser": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
-      "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
-      "dev": true
-    },
-    "@webassemblyjs/helper-api-error": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
-      "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
-      "dev": true
-    },
-    "@webassemblyjs/helper-buffer": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
-      "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
-      "dev": true
-    },
-    "@webassemblyjs/helper-numbers": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
-      "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+    "node_modules/@nrwl/cli/node_modules/fast-glob": {
+      "version": "3.2.7",
       "dev": true,
-      "requires": {
-        "@webassemblyjs/floating-point-hex-parser": "1.11.1",
-        "@webassemblyjs/helper-api-error": "1.11.1",
-        "@xtuc/long": "4.2.2"
+      "license": "MIT",
+      "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"
       }
     },
-    "@webassemblyjs/helper-wasm-bytecode": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
-      "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
-      "dev": true
-    },
-    "@webassemblyjs/helper-wasm-section": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
-      "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+    "node_modules/@nrwl/cli/node_modules/form-data": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "@webassemblyjs/ast": "1.11.1",
-        "@webassemblyjs/helper-buffer": "1.11.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
-        "@webassemblyjs/wasm-gen": "1.11.1"
+      "license": "MIT",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "@webassemblyjs/ieee754": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
-      "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+    "node_modules/@nrwl/cli/node_modules/fs-extra": {
+      "version": "11.1.1",
       "dev": true,
-      "requires": {
-        "@xtuc/ieee754": "^1.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=14.14"
       }
     },
-    "@webassemblyjs/leb128": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
-      "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+    "node_modules/@nrwl/cli/node_modules/glob": {
+      "version": "7.1.4",
       "dev": true,
-      "requires": {
-        "@xtuc/long": "4.2.2"
+      "license": "ISC",
+      "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": "*"
       }
     },
-    "@webassemblyjs/utf8": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
-      "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
-      "dev": true
-    },
-    "@webassemblyjs/wasm-edit": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
-      "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+    "node_modules/@nrwl/cli/node_modules/js-yaml": {
+      "version": "4.1.0",
       "dev": true,
-      "requires": {
-        "@webassemblyjs/ast": "1.11.1",
-        "@webassemblyjs/helper-buffer": "1.11.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
-        "@webassemblyjs/helper-wasm-section": "1.11.1",
-        "@webassemblyjs/wasm-gen": "1.11.1",
-        "@webassemblyjs/wasm-opt": "1.11.1",
-        "@webassemblyjs/wasm-parser": "1.11.1",
-        "@webassemblyjs/wast-printer": "1.11.1"
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
       }
     },
-    "@webassemblyjs/wasm-gen": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
-      "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+    "node_modules/@nrwl/cli/node_modules/lines-and-columns": {
+      "version": "2.0.3",
       "dev": true,
-      "requires": {
-        "@webassemblyjs/ast": "1.11.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
-        "@webassemblyjs/ieee754": "1.11.1",
-        "@webassemblyjs/leb128": "1.11.1",
-        "@webassemblyjs/utf8": "1.11.1"
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       }
     },
-    "@webassemblyjs/wasm-opt": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
-      "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+    "node_modules/@nrwl/cli/node_modules/lru-cache": {
+      "version": "6.0.0",
       "dev": true,
-      "requires": {
-        "@webassemblyjs/ast": "1.11.1",
-        "@webassemblyjs/helper-buffer": "1.11.1",
-        "@webassemblyjs/wasm-gen": "1.11.1",
-        "@webassemblyjs/wasm-parser": "1.11.1"
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "@webassemblyjs/wasm-parser": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
-      "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+    "node_modules/@nrwl/cli/node_modules/minimatch": {
+      "version": "3.0.5",
       "dev": true,
-      "requires": {
-        "@webassemblyjs/ast": "1.11.1",
-        "@webassemblyjs/helper-api-error": "1.11.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
-        "@webassemblyjs/ieee754": "1.11.1",
-        "@webassemblyjs/leb128": "1.11.1",
-        "@webassemblyjs/utf8": "1.11.1"
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "@webassemblyjs/wast-printer": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
-      "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+    "node_modules/@nrwl/cli/node_modules/nx": {
+      "version": "15.9.3",
       "dev": true,
-      "requires": {
-        "@webassemblyjs/ast": "1.11.1",
-        "@xtuc/long": "4.2.2"
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nrwl/cli": "15.9.3",
+        "@nrwl/tao": "15.9.3",
+        "@parcel/watcher": "2.0.4",
+        "@yarnpkg/lockfile": "^1.1.0",
+        "@yarnpkg/parsers": "^3.0.0-rc.18",
+        "@zkochan/js-yaml": "0.0.6",
+        "axios": "^1.0.0",
+        "chalk": "^4.1.0",
+        "cli-cursor": "3.1.0",
+        "cli-spinners": "2.6.1",
+        "cliui": "^7.0.2",
+        "dotenv": "~10.0.0",
+        "enquirer": "~2.3.6",
+        "fast-glob": "3.2.7",
+        "figures": "3.2.0",
+        "flat": "^5.0.2",
+        "fs-extra": "^11.1.0",
+        "glob": "7.1.4",
+        "ignore": "^5.0.4",
+        "js-yaml": "4.1.0",
+        "jsonc-parser": "3.2.0",
+        "lines-and-columns": "~2.0.3",
+        "minimatch": "3.0.5",
+        "npm-run-path": "^4.0.1",
+        "open": "^8.4.0",
+        "semver": "7.3.4",
+        "string-width": "^4.2.3",
+        "strong-log-transformer": "^2.1.0",
+        "tar-stream": "~2.2.0",
+        "tmp": "~0.2.1",
+        "tsconfig-paths": "^4.1.2",
+        "tslib": "^2.3.0",
+        "v8-compile-cache": "2.3.0",
+        "yargs": "^17.6.2",
+        "yargs-parser": "21.1.1"
+      },
+      "bin": {
+        "nx": "bin/nx.js"
+      },
+      "optionalDependencies": {
+        "@nrwl/nx-darwin-arm64": "15.9.3",
+        "@nrwl/nx-darwin-x64": "15.9.3",
+        "@nrwl/nx-linux-arm-gnueabihf": "15.9.3",
+        "@nrwl/nx-linux-arm64-gnu": "15.9.3",
+        "@nrwl/nx-linux-arm64-musl": "15.9.3",
+        "@nrwl/nx-linux-x64-gnu": "15.9.3",
+        "@nrwl/nx-linux-x64-musl": "15.9.3",
+        "@nrwl/nx-win32-arm64-msvc": "15.9.3",
+        "@nrwl/nx-win32-x64-msvc": "15.9.3"
+      },
+      "peerDependencies": {
+        "@swc-node/register": "^1.4.2",
+        "@swc/core": "^1.2.173"
+      },
+      "peerDependenciesMeta": {
+        "@swc-node/register": {
+          "optional": true
+        },
+        "@swc/core": {
+          "optional": true
+        }
       }
     },
-    "@xtuc/ieee754": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-      "dev": true
-    },
-    "@xtuc/long": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
-      "dev": true
-    },
-    "@yarnpkg/lockfile": {
+    "node_modules/@nrwl/cli/node_modules/proxy-from-env": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
-      "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "@yarnpkg/parsers": {
-      "version": "3.0.0-rc.44",
-      "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.44.tgz",
-      "integrity": "sha512-UVAt9Icc8zfGXioeYJ8XMoSTxOYVmlal2TRNxy9Uh91taS72kQFalK7LpIslcvEBKy4XtarmfIwcFIU3ZY64lw==",
+    "node_modules/@nrwl/cli/node_modules/semver": {
+      "version": "7.3.4",
       "dev": true,
-      "requires": {
-        "js-yaml": "^3.10.0",
-        "tslib": "^2.4.0"
-      },
+      "license": "ISC",
       "dependencies": {
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "dev": true,
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.1",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "tslib": {
-          "version": "2.5.2",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz",
-          "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==",
-          "dev": true
-        }
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "JSONStream": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
-      "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+    "node_modules/@nrwl/cli/node_modules/v8-compile-cache": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "jsonparse": "^1.2.0",
-        "through": ">=2.2.7 <3"
-      }
-    },
-    "abab": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
-      "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==",
-      "dev": true
+      "license": "MIT"
     },
-    "abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-      "dev": true
+    "node_modules/@nrwl/cli/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
     },
-    "abort-controller": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
-      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
+    "node_modules/@nrwl/cli/node_modules/yargs-parser": {
+      "version": "21.1.1",
       "dev": true,
-      "requires": {
-        "event-target-shim": "^5.0.0"
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
       }
     },
-    "accepts": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
-      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+    "node_modules/@nrwl/devkit": {
+      "version": "13.1.3",
       "dev": true,
-      "requires": {
-        "mime-types": "~2.1.34",
-        "negotiator": "0.6.3"
+      "license": "MIT",
+      "dependencies": {
+        "@nrwl/tao": "13.1.3",
+        "ejs": "^3.1.5",
+        "ignore": "^5.0.4",
+        "rxjs": "^6.5.4",
+        "semver": "7.3.4",
+        "tslib": "^2.0.0"
       }
     },
-    "acorn": {
-      "version": "8.8.2",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
-      "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
-      "dev": true
-    },
-    "acorn-globals": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz",
-      "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==",
+    "node_modules/@nrwl/devkit/node_modules/lru-cache": {
+      "version": "6.0.0",
       "dev": true,
-      "requires": {
-        "acorn": "^6.0.1",
-        "acorn-walk": "^6.0.1"
-      },
+      "license": "ISC",
       "dependencies": {
-        "acorn": {
-          "version": "6.4.2",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
-          "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
-          "dev": true
-        }
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "acorn-import-assertions": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
-      "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
-      "dev": true
-    },
-    "acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true
-    },
-    "acorn-node": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz",
-      "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==",
+    "node_modules/@nrwl/devkit/node_modules/semver": {
+      "version": "7.3.4",
       "dev": true,
-      "requires": {
-        "acorn": "^7.0.0",
-        "acorn-walk": "^7.0.0",
-        "xtend": "^4.0.2"
-      },
+      "license": "ISC",
       "dependencies": {
-        "acorn": {
-          "version": "7.4.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-          "dev": true
-        },
-        "acorn-walk": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-          "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
-          "dev": true
-        }
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "acorn-walk": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
-      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==",
-      "dev": true
-    },
-    "adjust-sourcemap-loader": {
+    "node_modules/@nrwl/devkit/node_modules/yallist": {
       "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz",
-      "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==",
       "dev": true,
-      "requires": {
-        "loader-utils": "^2.0.0",
-        "regex-parser": "^2.2.11"
-      },
-      "dependencies": {
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        }
-      }
+      "license": "ISC"
     },
-    "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==",
+    "node_modules/@nrwl/nx-linux-x64-gnu": {
+      "version": "15.9.3",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "requires": {
-        "debug": "4"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
       }
     },
-    "agentkeepalive": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz",
-      "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==",
+    "node_modules/@nrwl/nx-linux-x64-musl": {
+      "version": "15.9.3",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "requires": {
-        "debug": "^4.1.0",
-        "depd": "^2.0.0",
-        "humanize-ms": "^1.2.1"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
       }
     },
-    "aggregate-error": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
-      "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+    "node_modules/@nrwl/tao": {
+      "version": "13.1.3",
       "dev": true,
-      "requires": {
-        "clean-stack": "^2.0.0",
-        "indent-string": "^4.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "4.1.0",
+        "enquirer": "~2.3.6",
+        "fs-extra": "^9.1.0",
+        "jsonc-parser": "3.0.0",
+        "nx": "13.1.3",
+        "rxjs": "^6.5.4",
+        "rxjs-for-await": "0.0.2",
+        "semver": "7.3.4",
+        "tmp": "~0.2.1",
+        "tslib": "^2.0.0",
+        "yargs-parser": "20.0.0"
+      },
+      "bin": {
+        "tao": "index.js"
       }
     },
-    "ajv": {
-      "version": "8.9.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz",
-      "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==",
+    "node_modules/@nrwl/tao/node_modules/chalk": {
+      "version": "4.1.0",
       "dev": true,
-      "requires": {
-        "fast-deep-equal": "^3.1.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "ajv-formats": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
-      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
+    "node_modules/@nrwl/tao/node_modules/fs-extra": {
+      "version": "9.1.0",
       "dev": true,
-      "requires": {
-        "ajv": "^8.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "at-least-node": "^1.0.0",
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "ajv-keywords": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-      "dev": true
-    },
-    "amdefine": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
-      "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==",
+    "node_modules/@nrwl/tao/node_modules/jsonc-parser": {
+      "version": "3.0.0",
       "dev": true,
-      "optional": true
-    },
-    "ansi-colors": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
-      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
-      "dev": true
+      "license": "MIT"
     },
-    "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==",
+    "node_modules/@nrwl/tao/node_modules/lru-cache": {
+      "version": "6.0.0",
       "dev": true,
-      "requires": {
-        "type-fest": "^0.21.3"
-      },
+      "license": "ISC",
       "dependencies": {
-        "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
-        }
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "ansi-html-community": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
-      "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==",
-      "dev": true
-    },
-    "ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
-    },
-    "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==",
-      "requires": {
-        "color-convert": "^1.9.0"
+    "node_modules/@nrwl/tao/node_modules/semver": {
+      "version": "7.3.4",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "any-promise": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
-      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
-      "dev": true
-    },
-    "anymatch": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
-      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+    "node_modules/@nrwl/tao/node_modules/yallist": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "normalize-path": "^3.0.0",
-        "picomatch": "^2.0.4"
-      }
+      "license": "ISC"
     },
-    "apache-crypt": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz",
-      "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==",
+    "node_modules/@parcel/watcher": {
+      "version": "2.0.4",
       "dev": true,
-      "requires": {
-        "unix-crypt-td-js": "^1.1.4"
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "node-addon-api": "^3.2.1",
+        "node-gyp-build": "^4.3.0"
+      },
+      "engines": {
+        "node": ">= 10.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "apache-md5": {
-      "version": "1.1.8",
-      "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz",
-      "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==",
-      "dev": true
-    },
-    "aproba": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
-    },
-    "arch": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
-      "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
-      "dev": true
-    },
-    "are-we-there-yet": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
-      "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "dev": true,
+      "license": "MIT",
       "optional": true,
-      "requires": {
-        "delegates": "^1.0.0",
-        "readable-stream": "^2.0.6"
+      "engines": {
+        "node": ">=14"
       }
     },
-    "arg": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
-      "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
-      "dev": true
+    "node_modules/@popperjs/core": {
+      "version": "2.10.2",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/popperjs"
+      }
     },
-    "argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+    "node_modules/@protobufjs/aspromise": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "aria-query": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
-      "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
+    "node_modules/@protobufjs/base64": {
+      "version": "1.1.2",
       "dev": true,
-      "requires": {
-        "@babel/runtime": "^7.10.2",
-        "@babel/runtime-corejs3": "^7.10.2"
-      }
+      "license": "BSD-3-Clause"
     },
-    "arr-diff": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-      "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
-      "dev": true
+    "node_modules/@protobufjs/codegen": {
+      "version": "2.0.4",
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "arr-flatten": {
+    "node_modules/@protobufjs/eventemitter": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
-      "dev": true
-    },
-    "arr-union": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-      "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "array-buffer-byte-length": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
-      "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+    "node_modules/@protobufjs/fetch": {
+      "version": "1.1.0",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "is-array-buffer": "^3.0.1"
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.1",
+        "@protobufjs/inquire": "^1.1.0"
       }
     },
-    "array-differ": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
-      "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
-      "dev": true
-    },
-    "array-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
-      "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==",
-      "dev": true
-    },
-    "array-equal": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
-      "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==",
-      "dev": true
-    },
-    "array-flatten": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
-      "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
-      "dev": true
-    },
-    "array-from": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
-      "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==",
-      "dev": true
+    "node_modules/@protobufjs/float": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "array-slice": {
+    "node_modules/@protobufjs/inquire": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
-      "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
-      "dev": true
-    },
-    "array-union": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz",
-      "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==",
-      "dev": true
-    },
-    "array-unique": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-      "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "arrify": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
-      "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
-      "dev": true
+    "node_modules/@protobufjs/path": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "asap": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
-      "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
-      "dev": true
+    "node_modules/@protobufjs/pool": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "asn1": {
-      "version": "0.2.6",
-      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
-      "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+    "node_modules/@protobufjs/utf8": {
+      "version": "1.1.0",
       "dev": true,
-      "requires": {
-        "safer-buffer": "~2.1.0"
-      }
+      "license": "BSD-3-Clause"
     },
-    "asn1.js": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
-      "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+    "node_modules/@schematics/angular": {
+      "version": "15.2.9",
       "dev": true,
-      "requires": {
-        "bn.js": "^4.0.0",
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0",
-        "safer-buffer": "^2.1.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "bn.js": {
-          "version": "4.12.0",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-          "dev": true
-        }
+        "@angular-devkit/core": "15.2.9",
+        "@angular-devkit/schematics": "15.2.9",
+        "jsonc-parser": "3.2.0"
+      },
+      "engines": {
+        "node": "^14.20.0 || ^16.13.0 || >=18.10.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
       }
     },
-    "assert": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
-      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+    "node_modules/@sideway/address": {
+      "version": "4.1.4",
       "dev": true,
-      "requires": {
-        "object-assign": "^4.1.1",
-        "util": "0.10.3"
-      },
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "inherits": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
-          "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==",
-          "dev": true
-        },
-        "util": {
-          "version": "0.10.3",
-          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
-          "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==",
-          "dev": true,
-          "requires": {
-            "inherits": "2.0.1"
-          }
-        }
+        "@hapi/hoek": "^9.0.0"
       }
     },
-    "assert-plus": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
-      "dev": true
+    "node_modules/@sideway/formula": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@sideway/pinpoint": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "assertion-error": {
+    "node_modules/@sigstore/bundle": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
-      "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
-      "dev": true
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@sigstore/protobuf-specs": "^0.2.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
     },
-    "assertion-error-formatter": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-2.0.1.tgz",
-      "integrity": "sha512-cjC3jUCh9spkroKue5PDSKH5RFQ/KNuZJhk3GwHYmB/8qqETxLOmMdLH+ohi/VukNzxDlMvIe7zScvLoOdhb6Q==",
+    "node_modules/@sigstore/protobuf-specs": {
+      "version": "0.2.1",
       "dev": true,
-      "requires": {
-        "diff": "^3.0.0",
-        "pad-right": "^0.2.2",
-        "repeat-string": "^1.6.1"
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "assign-symbols": {
+    "node_modules/@sigstore/sign": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-      "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
-      "dev": true
-    },
-    "ast-transform": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz",
-      "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==",
       "dev": true,
-      "requires": {
-        "escodegen": "~1.2.0",
-        "esprima": "~1.0.4",
-        "through": "~2.3.4"
-      },
+      "license": "Apache-2.0",
       "dependencies": {
-        "escodegen": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz",
-          "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==",
-          "dev": true,
-          "requires": {
-            "esprima": "~1.0.4",
-            "estraverse": "~1.5.0",
-            "esutils": "~1.0.0",
-            "source-map": "~0.1.30"
-          }
-        },
-        "esprima": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
-          "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==",
-          "dev": true
-        },
-        "estraverse": {
-          "version": "1.5.1",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz",
-          "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==",
-          "dev": true
-        },
-        "esutils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz",
-          "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.1.43",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
-          "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "amdefine": ">=0.0.4"
-          }
-        }
+        "@sigstore/bundle": "^1.1.0",
+        "@sigstore/protobuf-specs": "^0.2.0",
+        "make-fetch-happen": "^11.0.1"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "ast-types": {
-      "version": "0.7.8",
-      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz",
-      "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==",
-      "dev": true
+    "node_modules/@sigstore/tuf": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@sigstore/protobuf-specs": "^0.2.0",
+        "tuf-js": "^1.1.7"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
     },
-    "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
+    "node_modules/@sinclair/typebox": {
+      "version": "0.24.51",
+      "dev": true,
+      "license": "MIT"
     },
-    "async": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
-      "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+    "node_modules/@sinonjs/commons": {
+      "version": "1.8.6",
       "dev": true,
-      "requires": {
-        "lodash": "^4.17.14"
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "type-detect": "4.0.8"
       }
     },
-    "async-mutex": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.4.tgz",
-      "integrity": "sha512-fcQKOXUKMQc57JlmjBCHtkKNrfGpHyR7vu18RfuLfeTAf4hK9PgOadPR5cDrBQ682zasrLUhJFe7EKAHJOduDg==",
-      "requires": {
-        "tslib": "^2.0.0"
+    "node_modules/@sinonjs/fake-timers": {
+      "version": "9.1.2",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@sinonjs/commons": "^1.7.0"
       }
     },
-    "asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    "node_modules/@stylelint/postcss-css-in-js": {
+      "version": "0.37.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.17.9"
+      },
+      "peerDependencies": {
+        "postcss": ">=7.0.0",
+        "postcss-syntax": ">=0.36.2"
+      }
     },
-    "at-least-node": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
-      "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
-      "dev": true
+    "node_modules/@stylelint/postcss-markdown": {
+      "version": "0.36.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "remark": "^13.0.0",
+        "unist-util-find-all-after": "^3.0.2"
+      },
+      "peerDependencies": {
+        "postcss": ">=7.0.0",
+        "postcss-syntax": ">=0.36.2"
+      }
     },
-    "atob": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
-      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
-      "dev": true
+    "node_modules/@swagger-api/apidom-ast": {
+      "version": "0.76.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.20.7",
+        "@swagger-api/apidom-error": "^0.76.2",
+        "@types/ramda": "~0.29.3",
+        "ramda": "~0.29.0",
+        "ramda-adjunct": "^4.1.1",
+        "stampit": "^4.3.2",
+        "unraw": "^3.0.0"
+      }
     },
-    "autolinker": {
-      "version": "3.16.2",
-      "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz",
-      "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==",
-      "requires": {
-        "tslib": "^2.3.0"
+    "node_modules/@swagger-api/apidom-core": {
+      "version": "0.76.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.20.7",
+        "@swagger-api/apidom-ast": "^0.76.2",
+        "@swagger-api/apidom-error": "^0.76.2",
+        "@types/ramda": "~0.29.3",
+        "minim": "~0.23.8",
+        "ramda": "~0.29.0",
+        "ramda-adjunct": "^4.1.1",
+        "short-unique-id": "^5.0.2",
+        "stampit": "^4.3.2"
       }
     },
-    "autoprefixer": {
-      "version": "10.4.14",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
-      "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
-      "dev": true,
-      "requires": {
-        "browserslist": "^4.21.5",
-        "caniuse-lite": "^1.0.30001464",
-        "fraction.js": "^4.2.0",
-        "normalize-range": "^0.1.2",
-        "picocolors": "^1.0.0",
-        "postcss-value-parser": "^4.2.0"
+    "node_modules/@swagger-api/apidom-error": {
+      "version": "0.76.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.20.7",
+        "@types/ramda": "~0.29.3",
+        "ramda": "~0.29.0",
+        "ramda-adjunct": "^4.0.0"
       }
     },
-    "available-typed-arrays": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
-      "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
-      "dev": true
+    "node_modules/@swagger-api/apidom-json-pointer": {
+      "version": "0.76.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.20.7",
+        "@swagger-api/apidom-core": "^0.76.2",
+        "@swagger-api/apidom-error": "^0.76.2",
+        "@types/ramda": "~0.29.3",
+        "ramda": "~0.29.0",
+        "ramda-adjunct": "^4.0.0"
+      }
     },
-    "aws-sign2": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
-      "dev": true
+    "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": {
+      "version": "0.76.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.20.7",
+        "@swagger-api/apidom-ast": "^0.76.2",
+        "@swagger-api/apidom-core": "^0.76.2",
+        "@types/ramda": "~0.29.3",
+        "ramda": "~0.29.0",
+        "ramda-adjunct": "^4.1.1",
+        "stampit": "^4.3.2"
+      }
     },
-    "aws4": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
-      "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==",
-      "dev": true
+    "node_modules/@swagger-api/apidom-ns-openapi-3-0": {
+      "version": "0.76.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.20.7",
+        "@swagger-api/apidom-core": "^0.76.2",
+        "@swagger-api/apidom-ns-json-schema-draft-4": "^0.76.2",
+        "@types/ramda": "~0.29.3",
+        "ramda": "~0.29.0",
+        "ramda-adjunct": "^4.1.1",
+        "stampit": "^4.3.2"
+      }
     },
-    "axe-core": {
-      "version": "4.4.3",
-      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz",
-      "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==",
-      "dev": true
+    "node_modules/@swagger-api/apidom-ns-openapi-3-1": {
+      "version": "0.76.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.20.7",
+        "@swagger-api/apidom-ast": "^0.76.2",
+        "@swagger-api/apidom-core": "^0.76.2",
+        "@swagger-api/apidom-ns-openapi-3-0": "^0.76.2",
+        "@types/ramda": "~0.29.3",
+        "ramda": "~0.29.0",
+        "ramda-adjunct": "^4.1.1",
+        "stampit": "^4.3.2"
+      }
     },
-    "axios": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
-      "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
-      "requires": {
+    "node_modules/@swagger-api/apidom-reference": {
+      "version": "0.76.2",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.20.7",
+        "@swagger-api/apidom-core": "^0.76.2",
+        "@types/ramda": "~0.29.3",
+        "axios": "^1.4.0",
+        "minimatch": "^7.4.3",
+        "process": "^0.11.10",
+        "ramda": "~0.29.0",
+        "ramda-adjunct": "^4.1.1",
+        "stampit": "^4.3.2"
+      },
+      "optionalDependencies": {
+        "@swagger-api/apidom-error": "^0.76.2",
+        "@swagger-api/apidom-json-pointer": "^0.76.2",
+        "@swagger-api/apidom-ns-asyncapi-2": "^0.76.2",
+        "@swagger-api/apidom-ns-openapi-3-0": "^0.76.2",
+        "@swagger-api/apidom-ns-openapi-3-1": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-json": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^0.76.2",
+        "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.76.2"
+      }
+    },
+    "node_modules/@swagger-api/apidom-reference/node_modules/axios": {
+      "version": "1.5.0",
+      "license": "MIT",
+      "dependencies": {
         "follow-redirects": "^1.15.0",
         "form-data": "^4.0.0",
         "proxy-from-env": "^1.1.0"
       }
     },
-    "axobject-query": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
-      "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
-      "dev": true
+    "node_modules/@swagger-api/apidom-reference/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
     },
-    "babel-jest": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz",
-      "integrity": "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==",
-      "dev": true,
-      "requires": {
-        "@jest/transform": "^28.1.3",
-        "@types/babel__core": "^7.1.14",
-        "babel-plugin-istanbul": "^6.1.1",
-        "babel-preset-jest": "^28.1.3",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "slash": "^3.0.0"
+    "node_modules/@swagger-api/apidom-reference/node_modules/form-data": {
+      "version": "4.0.0",
+      "license": "MIT",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
       },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": {
+      "version": "7.4.6",
+      "license": "ISC",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "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"
-          }
-        }
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/@swagger-api/apidom-reference/node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "license": "MIT"
+    },
+    "node_modules/@swimlane/ngx-datatable": {
+      "version": "18.0.0",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "^10.0.0",
+        "@angular/core": "^10.0.0",
+        "@angular/platform-browser": "^10.0.0",
+        "rxjs": "^6.5.5"
       }
     },
-    "babel-loader": {
-      "version": "8.2.5",
-      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz",
-      "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==",
+    "node_modules/@tootallnate/once": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "find-cache-dir": "^3.3.1",
-        "loader-utils": "^2.0.0",
-        "make-dir": "^3.1.0",
-        "schema-utils": "^2.6.5"
-      },
-      "dependencies": {
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@ts-morph/common": {
+      "version": "0.12.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-glob": "^3.2.7",
+        "minimatch": "^3.0.4",
+        "mkdirp": "^1.0.4",
+        "path-browserify": "^1.0.1"
       }
     },
-    "babel-plugin-add-module-exports": {
+    "node_modules/@ts-morph/common/node_modules/mkdirp": {
       "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-1.0.4.tgz",
-      "integrity": "sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
     },
-    "babel-plugin-istanbul": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
-      "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
+    "node_modules/@ts-morph/common/node_modules/path-browserify": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@istanbuljs/load-nyc-config": "^1.0.0",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-instrument": "^5.0.4",
-        "test-exclude": "^6.0.0"
+      "license": "MIT"
+    },
+    "node_modules/@tufjs/canonical-json": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "babel-plugin-jest-hoist": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz",
-      "integrity": "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==",
+    "node_modules/@tufjs/models": {
+      "version": "1.0.4",
       "dev": true,
-      "requires": {
-        "@babel/template": "^7.3.3",
-        "@babel/types": "^7.3.3",
-        "@types/babel__core": "^7.1.14",
-        "@types/babel__traverse": "^7.0.6"
+      "license": "MIT",
+      "dependencies": {
+        "@tufjs/canonical-json": "1.0.0",
+        "minimatch": "^9.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "babel-plugin-polyfill-corejs2": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
-      "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
+    "node_modules/@tufjs/models/node_modules/brace-expansion": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "@babel/compat-data": "^7.17.7",
-        "@babel/helper-define-polyfill-provider": "^0.3.3",
-        "semver": "^6.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
       }
     },
-    "babel-plugin-polyfill-corejs3": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz",
-      "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==",
+    "node_modules/@tufjs/models/node_modules/minimatch": {
+      "version": "9.0.3",
       "dev": true,
-      "requires": {
-        "@babel/helper-define-polyfill-provider": "^0.3.2",
-        "core-js-compat": "^3.21.0"
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "babel-plugin-polyfill-regenerator": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
-      "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
+    "node_modules/@types/babel__core": {
+      "version": "7.20.2",
       "dev": true,
-      "requires": {
-        "@babel/helper-define-polyfill-provider": "^0.3.1"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.20.7",
+        "@babel/types": "^7.20.7",
+        "@types/babel__generator": "*",
+        "@types/babel__template": "*",
+        "@types/babel__traverse": "*"
       }
     },
-    "babel-preset-current-node-syntax": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
-      "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+    "node_modules/@types/babel__generator": {
+      "version": "7.6.5",
       "dev": true,
-      "requires": {
-        "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/plugin-syntax-bigint": "^7.8.3",
-        "@babel/plugin-syntax-class-properties": "^7.8.3",
-        "@babel/plugin-syntax-import-meta": "^7.8.3",
-        "@babel/plugin-syntax-json-strings": "^7.8.3",
-        "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
-        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
-        "@babel/plugin-syntax-numeric-separator": "^7.8.3",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
-        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
-        "@babel/plugin-syntax-top-level-await": "^7.8.3"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.0.0"
       }
     },
-    "babel-preset-jest": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz",
-      "integrity": "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==",
+    "node_modules/@types/babel__template": {
+      "version": "7.4.2",
       "dev": true,
-      "requires": {
-        "babel-plugin-jest-hoist": "^28.1.3",
-        "babel-preset-current-node-syntax": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0"
       }
     },
-    "babel-runtime": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-      "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
+    "node_modules/@types/babel__traverse": {
+      "version": "7.20.2",
       "dev": true,
-      "requires": {
-        "core-js": "^2.4.0",
-        "regenerator-runtime": "^0.11.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "core-js": {
-          "version": "2.6.12",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
-          "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
-          "dev": true
-        },
-        "regenerator-runtime": {
-          "version": "0.11.1",
-          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-          "dev": true
-        }
+        "@babel/types": "^7.20.7"
       }
     },
-    "babelify": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz",
-      "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==",
-      "dev": true
+    "node_modules/@types/body-parser": {
+      "version": "1.19.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/connect": "*",
+        "@types/node": "*"
+      }
     },
-    "bail": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
-      "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
-      "dev": true
+    "node_modules/@types/bonjour": {
+      "version": "3.5.11",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
     },
-    "balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+    "node_modules/@types/brace-expansion": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
-      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+    "node_modules/@types/chart.js": {
+      "version": "2.9.38",
+      "license": "MIT",
+      "dependencies": {
+        "moment": "^2.10.2"
+      }
+    },
+    "node_modules/@types/connect": {
+      "version": "3.4.36",
       "dev": true,
-      "requires": {
-        "cache-base": "^1.0.1",
-        "class-utils": "^0.3.5",
-        "component-emitter": "^1.2.1",
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.1",
-        "mixin-deep": "^1.2.0",
-        "pascalcase": "^0.1.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        }
+        "@types/node": "*"
       }
     },
-    "base64-js": {
+    "node_modules/@types/connect-history-api-fallback": {
       "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
-      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
-    },
-    "basic-auth": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
-      "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
       "dev": true,
-      "requires": {
-        "safe-buffer": "5.1.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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
-        }
+        "@types/express-serve-static-core": "*",
+        "@types/node": "*"
       }
     },
-    "batch": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-      "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
-      "dev": true
+    "node_modules/@types/cypress-cucumber-preprocessor": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "bcrypt-pbkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
-      "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+    "node_modules/@types/eslint": {
+      "version": "8.44.3",
       "dev": true,
-      "requires": {
-        "tweetnacl": "^0.14.3"
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "*",
+        "@types/json-schema": "*"
       }
     },
-    "bcryptjs": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
-      "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==",
-      "dev": true
-    },
-    "becke-ch--regex--s0-0-v1--base--pl--lib": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz",
-      "integrity": "sha512-FnWonOyaw7Vivg5nIkrUll9HSS5TjFbyuURAiDssuL6VxrBe3ERzudRxOcWRhZYlP89UArMDikz7SapRPQpmZQ==",
-      "dev": true
-    },
-    "big.js": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
-      "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==",
-      "requires": {
-        "buffer": "^5.5.0",
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.4.0"
-      },
+    "node_modules/@types/eslint-scope": {
+      "version": "3.7.5",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
+        "@types/eslint": "*",
+        "@types/estree": "*"
       }
     },
-    "blob-util": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz",
-      "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==",
-      "dev": true
-    },
-    "bluebird": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
-      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
-      "dev": true
-    },
-    "bn.js": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
-      "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
-      "dev": true
+    "node_modules/@types/estree": {
+      "version": "0.0.51",
+      "dev": true,
+      "license": "MIT"
     },
-    "body-parser": {
-      "version": "1.20.1",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
-      "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+    "node_modules/@types/express": {
+      "version": "4.17.18",
       "dev": true,
-      "requires": {
-        "bytes": "3.1.2",
-        "content-type": "~1.0.4",
-        "debug": "2.6.9",
-        "depd": "2.0.0",
-        "destroy": "1.2.0",
-        "http-errors": "2.0.0",
-        "iconv-lite": "0.4.24",
-        "on-finished": "2.4.1",
-        "qs": "6.11.0",
-        "raw-body": "2.5.1",
-        "type-is": "~1.6.18",
-        "unpipe": "1.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "bytes": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-          "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
-          "dev": true
-        },
-        "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        },
-        "qs": {
-          "version": "6.11.0",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
-          "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
-          "dev": true,
-          "requires": {
-            "side-channel": "^1.0.4"
-          }
-        }
+        "@types/body-parser": "*",
+        "@types/express-serve-static-core": "^4.17.33",
+        "@types/qs": "*",
+        "@types/serve-static": "*"
       }
     },
-    "bonjour": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
-      "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==",
+    "node_modules/@types/express-serve-static-core": {
+      "version": "4.17.37",
       "dev": true,
-      "requires": {
-        "array-flatten": "^2.1.0",
-        "deep-equal": "^1.0.1",
-        "dns-equal": "^1.0.0",
-        "dns-txt": "^2.0.2",
-        "multicast-dns": "^6.0.1",
-        "multicast-dns-service-types": "^1.1.0"
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*",
+        "@types/send": "*"
       }
     },
-    "boolbase": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
-      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
-      "dev": true
+    "node_modules/@types/file-saver": {
+      "version": "2.0.1",
+      "license": "MIT"
     },
-    "bootstrap": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.0.0.tgz",
-      "integrity": "sha512-tmhPET9B9qCl8dCofvHeiIhi49iBt0EehmIsziZib65k1erBW1rHhj2s/2JsuQh5Pq+xz2E9bEbzp9B7xHG+VA=="
+    "node_modules/@types/graceful-fs": {
+      "version": "4.1.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
     },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+    "node_modules/@types/hast": {
+      "version": "2.3.6",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^2"
       }
     },
-    "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"
+    "node_modules/@types/hoist-non-react-statics": {
+      "version": "3.3.2",
+      "license": "MIT",
+      "dependencies": {
+        "@types/react": "*",
+        "hoist-non-react-statics": "^3.3.0"
       }
     },
-    "brfs": {
+    "node_modules/@types/http-errors": {
       "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz",
-      "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==",
       "dev": true,
-      "requires": {
-        "quote-stream": "^1.0.1",
-        "resolve": "^1.1.5",
-        "static-module": "^3.0.2",
-        "through2": "^2.0.0"
+      "license": "MIT"
+    },
+    "node_modules/@types/http-proxy": {
+      "version": "1.17.12",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
       }
     },
-    "brorand": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
-      "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
-      "dev": true
+    "node_modules/@types/istanbul-lib-coverage": {
+      "version": "2.0.4",
+      "dev": true,
+      "license": "MIT"
     },
-    "brotli": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
-      "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+    "node_modules/@types/istanbul-lib-report": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "base64-js": "^1.1.2"
+      "license": "MIT",
+      "dependencies": {
+        "@types/istanbul-lib-coverage": "*"
       }
     },
-    "browser-pack": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz",
-      "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==",
+    "node_modules/@types/istanbul-reports": {
+      "version": "3.0.1",
       "dev": true,
-      "requires": {
-        "JSONStream": "^1.0.3",
-        "combine-source-map": "~0.8.0",
-        "defined": "^1.0.0",
-        "safe-buffer": "^5.1.1",
-        "through2": "^2.0.0",
-        "umd": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "@types/istanbul-lib-report": "*"
       }
     },
-    "browser-process-hrtime": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
-      "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
-      "dev": true
+    "node_modules/@types/jest": {
+      "version": "29.5.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "expect": "^29.0.0",
+        "pretty-format": "^29.0.0"
+      }
     },
-    "browser-resolve": {
-      "version": "1.11.3",
-      "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
-      "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+    "node_modules/@types/jest/node_modules/@jest/expect-utils": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "resolve": "1.1.7"
-      },
+      "license": "MIT",
       "dependencies": {
-        "resolve": {
-          "version": "1.1.7",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
-          "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==",
-          "dev": true
-        }
+        "jest-get-type": "^29.6.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "browserify": {
-      "version": "16.5.2",
-      "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz",
-      "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==",
+    "node_modules/@types/jest/node_modules/@jest/schemas": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "JSONStream": "^1.0.3",
-        "assert": "^1.4.0",
-        "browser-pack": "^6.0.1",
-        "browser-resolve": "^2.0.0",
-        "browserify-zlib": "~0.2.0",
-        "buffer": "~5.2.1",
-        "cached-path-relative": "^1.0.0",
-        "concat-stream": "^1.6.0",
-        "console-browserify": "^1.1.0",
-        "constants-browserify": "~1.0.0",
-        "crypto-browserify": "^3.0.0",
-        "defined": "^1.0.0",
-        "deps-sort": "^2.0.0",
-        "domain-browser": "^1.2.0",
-        "duplexer2": "~0.1.2",
-        "events": "^2.0.0",
-        "glob": "^7.1.0",
-        "has": "^1.0.0",
-        "htmlescape": "^1.1.0",
-        "https-browserify": "^1.0.0",
-        "inherits": "~2.0.1",
-        "insert-module-globals": "^7.0.0",
-        "labeled-stream-splicer": "^2.0.0",
-        "mkdirp-classic": "^0.5.2",
-        "module-deps": "^6.2.3",
-        "os-browserify": "~0.3.0",
-        "parents": "^1.0.1",
-        "path-browserify": "~0.0.0",
-        "process": "~0.11.0",
-        "punycode": "^1.3.2",
-        "querystring-es3": "~0.2.0",
-        "read-only-stream": "^2.0.0",
-        "readable-stream": "^2.0.2",
-        "resolve": "^1.1.4",
-        "shasum": "^1.0.0",
-        "shell-quote": "^1.6.1",
-        "stream-browserify": "^2.0.0",
-        "stream-http": "^3.0.0",
-        "string_decoder": "^1.1.1",
-        "subarg": "^1.0.0",
-        "syntax-error": "^1.1.1",
-        "through2": "^2.0.0",
-        "timers-browserify": "^1.0.1",
-        "tty-browserify": "0.0.1",
-        "url": "~0.11.0",
-        "util": "~0.10.1",
-        "vm-browserify": "^1.0.0",
-        "xtend": "^4.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
       },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@types/jest/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "browser-resolve": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz",
-          "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",
-          "dev": true,
-          "requires": {
-            "resolve": "^1.17.0"
-          }
-        },
-        "buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
-          "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
-          "dev": true,
-          "requires": {
-            "base64-js": "^1.0.2",
-            "ieee754": "^1.1.4"
-          }
-        },
-        "events": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz",
-          "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==",
-          "dev": true
-        },
-        "path-browserify": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
-          "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
-          "dev": true
-        }
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "browserify-aes": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
-      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+    "node_modules/@types/jest/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
       "dev": true,
-      "requires": {
-        "buffer-xor": "^1.0.3",
-        "cipher-base": "^1.0.0",
-        "create-hash": "^1.1.0",
-        "evp_bytestokey": "^1.0.3",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
+      "license": "MIT"
+    },
+    "node_modules/@types/jest/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "browserify-cipher": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
-      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+    "node_modules/@types/jest/node_modules/diff-sequences": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "browserify-aes": "^1.0.4",
-        "browserify-des": "^1.0.0",
-        "evp_bytestokey": "^1.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "browserify-des": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
-      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+    "node_modules/@types/jest/node_modules/expect": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "cipher-base": "^1.0.1",
-        "des.js": "^1.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/expect-utils": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "browserify-optional": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz",
-      "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==",
+    "node_modules/@types/jest/node_modules/jest-diff": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "ast-transform": "0.0.0",
-        "ast-types": "^0.7.0",
-        "browser-resolve": "^1.8.1"
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^29.6.3",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "browserify-rsa": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
-      "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
+    "node_modules/@types/jest/node_modules/jest-get-type": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "bn.js": "^5.0.0",
-        "randombytes": "^2.0.1"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "browserify-sign": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
-      "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
+    "node_modules/@types/jest/node_modules/jest-matcher-utils": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "bn.js": "^5.1.1",
-        "browserify-rsa": "^4.0.1",
-        "create-hash": "^1.2.0",
-        "create-hmac": "^1.1.7",
-        "elliptic": "^6.5.3",
-        "inherits": "^2.0.4",
-        "parse-asn1": "^5.1.5",
-        "readable-stream": "^3.6.0",
-        "safe-buffer": "^5.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
       },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/@types/jest/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "browserify-zlib": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
-      "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+    "node_modules/@types/jest/node_modules/jest-util": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "pako": "~1.0.5"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "browserslist": {
-      "version": "4.21.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
-      "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
-      "requires": {
-        "caniuse-lite": "^1.0.30001449",
-        "electron-to-chromium": "^1.4.284",
-        "node-releases": "^2.0.8",
-        "update-browserslist-db": "^1.0.10"
+    "node_modules/@types/jest/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "bs-logger": {
-      "version": "0.2.6",
-      "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
-      "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
+    "node_modules/@types/jest/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
       "dev": true,
-      "requires": {
-        "fast-json-stable-stringify": "2.x"
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "bser": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
-      "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+    "node_modules/@types/jsdom": {
+      "version": "20.0.1",
       "dev": true,
-      "requires": {
-        "node-int64": "^0.4.0"
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "@types/tough-cookie": "*",
+        "parse5": "^7.0.0"
       }
     },
-    "buffer": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
-      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
-      "requires": {
-        "base64-js": "^1.3.1",
-        "ieee754": "^1.1.13"
+    "node_modules/@types/jsdom/node_modules/parse5": {
+      "version": "7.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^4.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
-    "buffer-crc32": {
-      "version": "0.2.13",
-      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-      "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
-      "dev": true
+    "node_modules/@types/json-schema": {
+      "version": "7.0.13",
+      "dev": true,
+      "license": "MIT"
     },
-    "buffer-equal": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
-      "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==",
-      "dev": true
+    "node_modules/@types/lodash": {
+      "version": "4.14.161",
+      "dev": true,
+      "license": "MIT"
     },
-    "buffer-from": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "dev": true
+    "node_modules/@types/long": {
+      "version": "4.0.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "buffer-indexof": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
-      "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
-      "dev": true
+    "node_modules/@types/mdast": {
+      "version": "3.0.12",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^2"
+      }
     },
-    "buffer-xor": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
-      "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
-      "dev": true
+    "node_modules/@types/mime": {
+      "version": "1.3.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "builtin-status-codes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
-      "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
-      "dev": true
+    "node_modules/@types/minimatch": {
+      "version": "3.0.5",
+      "dev": true,
+      "license": "MIT"
     },
-    "builtins": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
-      "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==",
-      "dev": true
+    "node_modules/@types/minimist": {
+      "version": "1.2.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "bulk-require": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/bulk-require/-/bulk-require-1.0.1.tgz",
-      "integrity": "sha512-BLU9AMnm1FMr68fR0sYvOkMew4x2ZJ8YztshITlGArl6aLtfAazOWiFj/bwJJixRO8C0wXx9PnRNRWeoR03e8Q==",
+    "node_modules/@types/node": {
+      "version": "18.17.12",
       "dev": true,
-      "requires": {
-        "glob": "^7.1.1"
-      }
+      "license": "MIT"
     },
-    "bytes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
-      "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
-      "dev": true
+    "node_modules/@types/normalize-package-data": {
+      "version": "2.4.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "cacache": {
-      "version": "15.3.0",
-      "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
-      "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
+    "node_modules/@types/parse-json": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "@npmcli/fs": "^1.0.0",
-        "@npmcli/move-file": "^1.0.1",
-        "chownr": "^2.0.0",
-        "fs-minipass": "^2.0.0",
-        "glob": "^7.1.4",
-        "infer-owner": "^1.0.4",
-        "lru-cache": "^6.0.0",
-        "minipass": "^3.1.1",
-        "minipass-collect": "^1.0.2",
-        "minipass-flush": "^1.0.5",
-        "minipass-pipeline": "^1.2.2",
-        "mkdirp": "^1.0.3",
-        "p-map": "^4.0.0",
-        "promise-inflight": "^1.0.1",
-        "rimraf": "^3.0.2",
-        "ssri": "^8.0.1",
-        "tar": "^6.0.2",
-        "unique-filename": "^1.1.1"
-      },
-      "dependencies": {
-        "chownr": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
-          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
-          "dev": true
-        },
-        "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"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
-      }
+      "license": "MIT"
     },
-    "cache-base": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
-      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+    "node_modules/@types/prettier": {
+      "version": "2.7.3",
       "dev": true,
-      "requires": {
-        "collection-visit": "^1.0.0",
-        "component-emitter": "^1.2.1",
-        "get-value": "^2.0.6",
-        "has-value": "^1.0.0",
-        "isobject": "^3.0.1",
-        "set-value": "^2.0.0",
-        "to-object-path": "^0.3.0",
-        "union-value": "^1.0.0",
-        "unset-value": "^1.0.0"
-      }
+      "license": "MIT"
     },
-    "cached-path-relative": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz",
-      "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==",
-      "dev": true
+    "node_modules/@types/prop-types": {
+      "version": "15.7.7",
+      "license": "MIT"
     },
-    "cachedir": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz",
-      "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==",
-      "dev": true
+    "node_modules/@types/qs": {
+      "version": "6.9.8",
+      "dev": true,
+      "license": "MIT"
     },
-    "call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-      "requires": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
+    "node_modules/@types/ramda": {
+      "version": "0.29.4",
+      "license": "MIT",
+      "dependencies": {
+        "types-ramda": "^0.29.4"
       }
     },
-    "callsite": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
-      "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==",
-      "dev": true
+    "node_modules/@types/range-parser": {
+      "version": "1.2.5",
+      "dev": true,
+      "license": "MIT"
     },
-    "callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true
+    "node_modules/@types/react": {
+      "version": "18.2.22",
+      "license": "MIT",
+      "dependencies": {
+        "@types/prop-types": "*",
+        "@types/scheduler": "*",
+        "csstype": "^3.0.2"
+      }
     },
-    "camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true
+    "node_modules/@types/react-redux": {
+      "version": "7.1.26",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hoist-non-react-statics": "^3.3.0",
+        "@types/react": "*",
+        "hoist-non-react-statics": "^3.3.0",
+        "redux": "^4.0.0"
+      }
     },
-    "camelcase-keys": {
-      "version": "6.2.2",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz",
-      "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==",
+    "node_modules/@types/retry": {
+      "version": "0.12.0",
       "dev": true,
-      "requires": {
-        "camelcase": "^5.3.1",
-        "map-obj": "^4.0.0",
-        "quick-lru": "^4.0.1"
-      }
+      "license": "MIT"
     },
-    "can-use-dom": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/can-use-dom/-/can-use-dom-0.1.0.tgz",
-      "integrity": "sha512-ceOhN1DL7Y4O6M0j9ICgmTYziV89WMd96SvSl0REd8PMgrY0B/WBOPoed5S1KUmJqXgUXh8gzSe6E3ae27upsQ=="
-    },
-    "caniuse-lite": {
-      "version": "1.0.30001489",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz",
-      "integrity": "sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ=="
-    },
-    "caseless": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
-      "dev": true
+    "node_modules/@types/scheduler": {
+      "version": "0.16.4",
+      "license": "MIT"
     },
-    "chai": {
-      "version": "4.3.7",
-      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
-      "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
+    "node_modules/@types/send": {
+      "version": "0.17.2",
       "dev": true,
-      "requires": {
-        "assertion-error": "^1.1.0",
-        "check-error": "^1.0.2",
-        "deep-eql": "^4.1.2",
-        "get-func-name": "^2.0.0",
-        "loupe": "^2.3.1",
-        "pathval": "^1.1.1",
-        "type-detect": "^4.0.5"
+      "license": "MIT",
+      "dependencies": {
+        "@types/mime": "^1",
+        "@types/node": "*"
       }
     },
-    "chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "requires": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
+    "node_modules/@types/serve-index": {
+      "version": "1.9.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/express": "*"
       }
     },
-    "char-regex": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
-      "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
-      "dev": true
-    },
-    "character-entities": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
-      "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="
-    },
-    "character-entities-legacy": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
-      "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="
-    },
-    "character-reference-invalid": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
-      "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg=="
+    "node_modules/@types/serve-static": {
+      "version": "1.15.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/http-errors": "*",
+        "@types/mime": "*",
+        "@types/node": "*"
+      }
     },
-    "chardet": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
-      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
-      "dev": true
+    "node_modules/@types/sinonjs__fake-timers": {
+      "version": "8.1.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "charenc": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
-      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
-      "dev": true
+    "node_modules/@types/sizzle": {
+      "version": "2.3.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "chart.js": {
-      "version": "2.9.4",
-      "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz",
-      "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==",
-      "requires": {
-        "chartjs-color": "^2.1.0",
-        "moment": "^2.10.2"
+    "node_modules/@types/sockjs": {
+      "version": "0.3.34",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
       }
     },
-    "chartjs-color": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
-      "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
-      "requires": {
-        "chartjs-color-string": "^0.6.0",
-        "color-convert": "^1.9.3"
-      }
+    "node_modules/@types/stack-utils": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "chartjs-color-string": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
-      "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
-      "requires": {
-        "color-name": "^1.0.0"
-      }
+    "node_modules/@types/swagger-ui": {
+      "version": "3.52.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "check-error": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
-      "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
-      "dev": true
+    "node_modules/@types/tough-cookie": {
+      "version": "4.0.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "check-more-types": {
-      "version": "2.24.0",
-      "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz",
-      "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==",
-      "dev": true
+    "node_modules/@types/unist": {
+      "version": "2.0.8",
+      "license": "MIT"
     },
-    "cheerio": {
-      "version": "1.0.0-rc.12",
-      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
-      "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
+    "node_modules/@types/uuid": {
+      "version": "3.4.11",
       "dev": true,
-      "requires": {
-        "cheerio-select": "^2.1.0",
-        "dom-serializer": "^2.0.0",
-        "domhandler": "^5.0.3",
-        "domutils": "^3.0.1",
-        "htmlparser2": "^8.0.1",
-        "parse5": "^7.0.0",
-        "parse5-htmlparser2-tree-adapter": "^7.0.0"
-      },
-      "dependencies": {
-        "dom-serializer": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
-          "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.3.0",
-            "domhandler": "^5.0.2",
-            "entities": "^4.2.0"
-          }
-        },
-        "domhandler": {
-          "version": "5.0.3",
-          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
-          "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.3.0"
-          }
-        },
-        "domutils": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
-          "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
-          "dev": true,
-          "requires": {
-            "dom-serializer": "^2.0.0",
-            "domelementtype": "^2.3.0",
-            "domhandler": "^5.0.3"
-          }
-        },
-        "entities": {
-          "version": "4.5.0",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-          "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-          "dev": true
-        },
-        "parse5": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
-          "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
-          "dev": true,
-          "requires": {
-            "entities": "^4.4.0"
-          }
-        },
-        "parse5-htmlparser2-tree-adapter": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
-          "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
-          "dev": true,
-          "requires": {
-            "domhandler": "^5.0.2",
-            "parse5": "^7.0.0"
-          }
-        }
-      }
+      "license": "MIT"
     },
-    "cheerio-select": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
-      "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+    "node_modules/@types/ws": {
+      "version": "8.5.6",
       "dev": true,
-      "requires": {
-        "boolbase": "^1.0.0",
-        "css-select": "^5.1.0",
-        "css-what": "^6.1.0",
-        "domelementtype": "^2.3.0",
-        "domhandler": "^5.0.3",
-        "domutils": "^3.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "css-select": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
-          "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
-          "dev": true,
-          "requires": {
-            "boolbase": "^1.0.0",
-            "css-what": "^6.1.0",
-            "domhandler": "^5.0.2",
-            "domutils": "^3.0.1",
-            "nth-check": "^2.0.1"
-          }
-        },
-        "dom-serializer": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
-          "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.3.0",
-            "domhandler": "^5.0.2",
-            "entities": "^4.2.0"
-          }
-        },
-        "domhandler": {
-          "version": "5.0.3",
-          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
-          "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.3.0"
-          }
-        },
-        "domutils": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
-          "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
-          "dev": true,
-          "requires": {
-            "dom-serializer": "^2.0.0",
-            "domelementtype": "^2.3.0",
-            "domhandler": "^5.0.3"
-          }
-        },
-        "entities": {
-          "version": "4.5.0",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-          "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-          "dev": true
-        }
+        "@types/node": "*"
       }
     },
-    "chokidar": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+    "node_modules/@types/yargs": {
+      "version": "17.0.25",
       "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"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        }
+        "@types/yargs-parser": "*"
       }
     },
-    "chownr": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
-      "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
-      "optional": true
-    },
-    "chrome-trace-event": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
-      "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
-      "dev": true
-    },
-    "ci-info": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz",
-      "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==",
-      "dev": true
+    "node_modules/@types/yargs-parser": {
+      "version": "21.0.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "cipher-base": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
-      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+    "node_modules/@types/yauzl": {
+      "version": "2.10.1",
       "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@types/node": "*"
       }
     },
-    "circular-dependency-plugin": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz",
-      "integrity": "sha512-g38K9Cm5WRwlaH6g03B9OEz/0qRizI+2I7n+Gz+L5DxXJAPAiWQvwlYNm1V1jkdpUv95bOe/ASm2vfi/G560jQ==",
-      "dev": true
-    },
-    "cjs-module-lexer": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz",
-      "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==",
-      "dev": true
-    },
-    "cjson": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.5.0.tgz",
-      "integrity": "sha512-D3CKJU9YnZNyerUQ1IzNUvMnToP3MGC2XbIAPi/7yqunJJW3rBwCVapousoFtaR9IbejeEM0KIshxC1n4HQcXw==",
+    "node_modules/@typescript-eslint/eslint-plugin": {
+      "version": "5.27.1",
       "dev": true,
-      "requires": {
-        "json-parse-helpfulerror": "^1.0.3"
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/scope-manager": "5.27.1",
+        "@typescript-eslint/type-utils": "5.27.1",
+        "@typescript-eslint/utils": "5.27.1",
+        "debug": "^4.3.4",
+        "functional-red-black-tree": "^1.0.1",
+        "ignore": "^5.2.0",
+        "regexpp": "^3.2.0",
+        "semver": "^7.3.7",
+        "tsutils": "^3.21.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "@typescript-eslint/parser": "^5.0.0",
+        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "class-utils": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
-      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": {
+      "version": "4.3.4",
       "dev": true,
-      "requires": {
-        "arr-union": "^3.1.0",
-        "define-property": "^0.2.5",
-        "isobject": "^3.0.0",
-        "static-extend": "^0.1.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
         }
       }
     },
-    "classnames": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
-      "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
-    },
-    "clean-stack": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
-      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
-      "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==",
+    "node_modules/@typescript-eslint/experimental-utils": {
+      "version": "5.27.1",
       "dev": true,
-      "requires": {
-        "restore-cursor": "^3.1.0"
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/utils": "5.27.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "cli-spinners": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz",
-      "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==",
-      "dev": true
-    },
-    "cli-table": {
-      "version": "0.3.11",
-      "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.11.tgz",
-      "integrity": "sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==",
+    "node_modules/@typescript-eslint/parser": {
+      "version": "5.27.1",
       "dev": true,
-      "requires": {
-        "colors": "1.0.3"
-      },
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "colors": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
-          "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==",
-          "dev": true
+        "@typescript-eslint/scope-manager": "5.27.1",
+        "@typescript-eslint/types": "5.27.1",
+        "@typescript-eslint/typescript-estree": "5.27.1",
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
         }
       }
     },
-    "cli-table3": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
-      "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+    "node_modules/@typescript-eslint/parser/node_modules/debug": {
+      "version": "4.3.4",
       "dev": true,
-      "requires": {
-        "@colors/colors": "1.5.0",
-        "string-width": "^4.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
       }
     },
-    "cli-truncate": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
-      "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+    "node_modules/@typescript-eslint/scope-manager": {
+      "version": "5.27.1",
       "dev": true,
-      "requires": {
-        "slice-ansi": "^3.0.0",
-        "string-width": "^4.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "5.27.1",
+        "@typescript-eslint/visitor-keys": "5.27.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "cli-width": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
-      "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
-      "dev": true
-    },
-    "cliui": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
-      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
-      "requires": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.1",
-        "wrap-ansi": "^7.0.0"
+    "node_modules/@typescript-eslint/type-utils": {
+      "version": "5.27.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/utils": "5.27.1",
+        "debug": "^4.3.4",
+        "tsutils": "^3.21.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "*"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "clone": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
-      "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
-      "dev": true
-    },
-    "clone-deep": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
-      "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+    "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
+      "version": "4.3.4",
       "dev": true,
-      "requires": {
-        "is-plain-object": "^2.0.4",
-        "kind-of": "^6.0.2",
-        "shallow-clone": "^3.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "is-plain-object": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-          "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
         }
       }
     },
-    "clone-regexp": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz",
-      "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==",
+    "node_modules/@typescript-eslint/types": {
+      "version": "5.27.1",
       "dev": true,
-      "requires": {
-        "is-regexp": "^2.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
-      "dev": true
-    },
-    "code-block-writer": {
-      "version": "11.0.3",
-      "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz",
-      "integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==",
-      "dev": true
-    },
-    "code-point-at": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA=="
-    },
-    "coffeeify": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/coffeeify/-/coffeeify-3.0.1.tgz",
-      "integrity": "sha512-Qjnr7UX6ldK1PHV7wCnv7AuCd4q19KTUtwJnu/6JRJB4rfm12zvcXtKdacUoePOKr1I4ka/ydKiwWpNAdsQb0g==",
+    "node_modules/@typescript-eslint/typescript-estree": {
+      "version": "5.27.1",
       "dev": true,
-      "requires": {
-        "convert-source-map": "^1.3.0",
-        "through2": "^2.0.0"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@typescript-eslint/types": "5.27.1",
+        "@typescript-eslint/visitor-keys": "5.27.1",
+        "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "semver": "^7.3.7",
+        "tsutils": "^3.21.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "coffeescript": {
-      "version": "1.12.7",
-      "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz",
-      "integrity": "sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==",
-      "dev": true
-    },
-    "collect-v8-coverage": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
-      "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
-      "dev": true
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
+      "version": "4.3.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
     },
-    "collection-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-      "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
+    "node_modules/@typescript-eslint/utils": {
+      "version": "5.27.1",
       "dev": true,
-      "requires": {
-        "map-visit": "^1.0.0",
-        "object-visit": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "@types/json-schema": "^7.0.9",
+        "@typescript-eslint/scope-manager": "5.27.1",
+        "@typescript-eslint/types": "5.27.1",
+        "@typescript-eslint/typescript-estree": "5.27.1",
+        "eslint-scope": "^5.1.1",
+        "eslint-utils": "^3.0.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "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==",
-      "requires": {
-        "color-name": "1.1.3"
+    "node_modules/@typescript-eslint/visitor-keys": {
+      "version": "5.27.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "5.27.1",
+        "eslint-visitor-keys": "^3.3.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+    "node_modules/@webassemblyjs/ast": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/helper-numbers": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+      }
     },
-    "color-support": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
-      "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
-      "dev": true
+    "node_modules/@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "colorette": {
-      "version": "2.0.20",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
-      "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
-      "dev": true
+    "node_modules/@webassemblyjs/helper-api-error": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "colors": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
-      "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
-      "dev": true
+    "node_modules/@webassemblyjs/helper-buffer": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "combine-source-map": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz",
-      "integrity": "sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==",
+    "node_modules/@webassemblyjs/helper-numbers": {
+      "version": "1.11.1",
       "dev": true,
-      "requires": {
-        "convert-source-map": "~1.1.0",
-        "inline-source-map": "~0.6.0",
-        "lodash.memoize": "~3.0.3",
-        "source-map": "~0.5.3"
-      },
+      "license": "MIT",
       "dependencies": {
-        "convert-source-map": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz",
-          "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==",
-          "dev": true
-        },
-        "lodash.memoize": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz",
-          "integrity": "sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
-          "dev": true
-        }
-      }
-    },
-    "combined-stream": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "requires": {
-        "delayed-stream": "~1.0.0"
+        "@webassemblyjs/floating-point-hex-parser": "1.11.1",
+        "@webassemblyjs/helper-api-error": "1.11.1",
+        "@xtuc/long": "4.2.2"
       }
     },
-    "comma-separated-tokens": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
-      "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw=="
+    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true
+    "node_modules/@webassemblyjs/helper-wasm-section": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1"
+      }
     },
-    "common-tags": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz",
-      "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==",
-      "dev": true
+    "node_modules/@webassemblyjs/ieee754": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
     },
-    "commondir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
-      "dev": true
+    "node_modules/@webassemblyjs/leb128": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@xtuc/long": "4.2.2"
+      }
     },
-    "component-emitter": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
-      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
-      "dev": true
+    "node_modules/@webassemblyjs/utf8": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "compressible": {
-      "version": "2.0.18",
-      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
-      "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==",
+    "node_modules/@webassemblyjs/wasm-edit": {
+      "version": "1.11.1",
       "dev": true,
-      "requires": {
-        "mime-db": ">= 1.43.0 < 2"
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/helper-wasm-section": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1",
+        "@webassemblyjs/wasm-opt": "1.11.1",
+        "@webassemblyjs/wasm-parser": "1.11.1",
+        "@webassemblyjs/wast-printer": "1.11.1"
       }
     },
-    "compression": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
-      "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+    "node_modules/@webassemblyjs/wasm-gen": {
+      "version": "1.11.1",
       "dev": true,
-      "requires": {
-        "accepts": "~1.3.5",
-        "bytes": "3.0.0",
-        "compressible": "~2.0.16",
-        "debug": "2.6.9",
-        "on-headers": "~1.0.2",
-        "safe-buffer": "5.1.2",
-        "vary": "~1.1.2"
-      },
+      "license": "MIT",
       "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        },
-        "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
-        }
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/ieee754": "1.11.1",
+        "@webassemblyjs/leb128": "1.11.1",
+        "@webassemblyjs/utf8": "1.11.1"
       }
     },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
-    },
-    "concat-stream": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+    "node_modules/@webassemblyjs/wasm-opt": {
+      "version": "1.11.1",
       "dev": true,
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "inherits": "^2.0.3",
-        "readable-stream": "^2.2.2",
-        "typedarray": "^0.0.6"
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-buffer": "1.11.1",
+        "@webassemblyjs/wasm-gen": "1.11.1",
+        "@webassemblyjs/wasm-parser": "1.11.1"
       }
     },
-    "connect": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
-      "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+    "node_modules/@webassemblyjs/wasm-parser": {
+      "version": "1.11.1",
       "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "finalhandler": "1.1.2",
-        "parseurl": "~1.3.3",
-        "utils-merge": "1.0.1"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "finalhandler": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
-          "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
-          "dev": true,
-          "requires": {
-            "debug": "2.6.9",
-            "encodeurl": "~1.0.2",
-            "escape-html": "~1.0.3",
-            "on-finished": "~2.3.0",
-            "parseurl": "~1.3.3",
-            "statuses": "~1.5.0",
-            "unpipe": "~1.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        },
-        "on-finished": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-          "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
-          "dev": true,
-          "requires": {
-            "ee-first": "1.1.1"
-          }
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-          "dev": true
-        }
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/helper-api-error": "1.11.1",
+        "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
+        "@webassemblyjs/ieee754": "1.11.1",
+        "@webassemblyjs/leb128": "1.11.1",
+        "@webassemblyjs/utf8": "1.11.1"
       }
     },
-    "connect-history-api-fallback": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
-      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
-      "dev": true
+    "node_modules/@webassemblyjs/wast-printer": {
+      "version": "1.11.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@webassemblyjs/ast": "1.11.1",
+        "@xtuc/long": "4.2.2"
+      }
     },
-    "console-browserify": {
+    "node_modules/@xtuc/ieee754": {
       "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
-      "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "console-control-strings": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-      "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
+    "node_modules/@xtuc/long": {
+      "version": "4.2.2",
+      "dev": true,
+      "license": "Apache-2.0"
     },
-    "constants-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
-      "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
-      "dev": true
+    "node_modules/@yarnpkg/lockfile": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "BSD-2-Clause"
     },
-    "content-disposition": {
-      "version": "0.5.4",
-      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
-      "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+    "node_modules/@yarnpkg/parsers": {
+      "version": "3.0.0-rc.51",
       "dev": true,
-      "requires": {
-        "safe-buffer": "5.2.1"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "js-yaml": "^3.10.0",
+        "tslib": "^2.4.0"
+      },
+      "engines": {
+        "node": ">=18.12.0"
       }
     },
-    "content-type": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
-      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
-      "dev": true
-    },
-    "convert-source-map": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
-      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
+    "node_modules/@yarnpkg/parsers/node_modules/tslib": {
+      "version": "2.6.2",
+      "dev": true,
+      "license": "0BSD"
     },
-    "cookie": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
-      "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
+    "node_modules/@zkochan/js-yaml": {
+      "version": "0.0.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
     },
-    "cookie-signature": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
-      "dev": true
+    "node_modules/@zkochan/js-yaml/node_modules/argparse": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "Python-2.0"
     },
-    "copy-anything": {
+    "node_modules/abab": {
       "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz",
-      "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==",
       "dev": true,
-      "requires": {
-        "is-what": "^3.14.1"
-      }
+      "license": "BSD-3-Clause"
     },
-    "copy-descriptor": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
-      "dev": true
+    "node_modules/abbrev": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "ISC"
     },
-    "copy-to-clipboard": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz",
-      "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==",
-      "requires": {
-        "toggle-selection": "^1.0.6"
+    "node_modules/abort-controller": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "event-target-shim": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=6.5"
       }
     },
-    "copy-webpack-plugin": {
-      "version": "10.2.1",
-      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.1.tgz",
-      "integrity": "sha512-nr81NhCAIpAWXGCK5thrKmfCQ6GDY0L5RN0U+BnIn/7Us55+UCex5ANNsNKmIVtDRnk0Ecf+/kzp9SUVrrBMLg==",
+    "node_modules/accepts": {
+      "version": "1.3.8",
       "dev": true,
-      "requires": {
-        "fast-glob": "^3.2.7",
-        "glob-parent": "^6.0.1",
-        "globby": "^12.0.2",
-        "normalize-path": "^3.0.0",
-        "schema-utils": "^4.0.0",
-        "serialize-javascript": "^6.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ajv-keywords": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-          "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.3"
-          }
-        },
-        "schema-utils": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz",
-          "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==",
-          "dev": true,
-          "requires": {
-            "@types/json-schema": "^7.0.9",
-            "ajv": "^8.9.0",
-            "ajv-formats": "^2.1.1",
-            "ajv-keywords": "^5.1.0"
-          }
-        }
+        "mime-types": "~2.1.34",
+        "negotiator": "0.6.3"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "core-js": {
-      "version": "3.30.2",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz",
-      "integrity": "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg=="
-    },
-    "core-js-compat": {
-      "version": "3.30.2",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz",
-      "integrity": "sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==",
+    "node_modules/accepts/node_modules/mime-db": {
+      "version": "1.52.0",
       "dev": true,
-      "requires": {
-        "browserslist": "^4.21.5"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "core-js-pure": {
-      "version": "3.30.2",
-      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.30.2.tgz",
-      "integrity": "sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg=="
-    },
-    "core-util-is": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
-      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+    "node_modules/accepts/node_modules/mime-types": {
+      "version": "2.1.35",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "cors": {
-      "version": "2.8.5",
-      "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+    "node_modules/acorn": {
+      "version": "7.4.1",
       "dev": true,
-      "requires": {
-        "object-assign": "^4",
-        "vary": "^1"
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "cosmiconfig": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
-      "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
+    "node_modules/acorn-globals": {
+      "version": "4.3.4",
       "dev": true,
-      "requires": {
-        "@types/parse-json": "^4.0.0",
-        "import-fresh": "^3.2.1",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0",
-        "yaml": "^1.10.0"
+      "license": "MIT",
+      "dependencies": {
+        "acorn": "^6.0.1",
+        "acorn-walk": "^6.0.1"
       }
     },
-    "create-ecdh": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
-      "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+    "node_modules/acorn-globals/node_modules/acorn": {
+      "version": "6.4.2",
       "dev": true,
-      "requires": {
-        "bn.js": "^4.1.0",
-        "elliptic": "^6.5.3"
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
       },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.12.0",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "create-hash": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
-      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+    "node_modules/acorn-import-assertions": {
+      "version": "1.9.0",
       "dev": true,
-      "requires": {
-        "cipher-base": "^1.0.1",
-        "inherits": "^2.0.1",
-        "md5.js": "^1.3.4",
-        "ripemd160": "^2.0.1",
-        "sha.js": "^2.4.0"
+      "license": "MIT",
+      "peerDependencies": {
+        "acorn": "^8"
       }
     },
-    "create-hmac": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
-      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+    "node_modules/acorn-jsx": {
+      "version": "5.3.2",
       "dev": true,
-      "requires": {
-        "cipher-base": "^1.0.3",
-        "create-hash": "^1.1.0",
-        "inherits": "^2.0.1",
-        "ripemd160": "^2.0.0",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
+      "license": "MIT",
+      "peerDependencies": {
+        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "critters": {
-      "version": "0.0.16",
-      "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz",
-      "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==",
+    "node_modules/acorn-node": {
+      "version": "1.8.2",
       "dev": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "css-select": "^4.2.0",
-        "parse5": "^6.0.1",
-        "parse5-htmlparser2-tree-adapter": "^6.0.1",
-        "postcss": "^8.3.7",
-        "pretty-bytes": "^5.3.0"
-      },
+      "license": "Apache-2.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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+        "acorn": "^7.0.0",
+        "acorn-walk": "^7.0.0",
+        "xtend": "^4.0.2"
       }
     },
-    "cross-fetch": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz",
-      "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==",
-      "requires": {
-        "node-fetch": "^2.6.11"
+    "node_modules/acorn-node/node_modules/acorn-walk": {
+      "version": "7.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+    "node_modules/acorn-walk": {
+      "version": "6.2.0",
       "dev": true,
-      "requires": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "crypt": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
-      "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
-      "dev": true
-    },
-    "crypto-browserify": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
-      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+    "node_modules/adjust-sourcemap-loader": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "browserify-cipher": "^1.0.0",
-        "browserify-sign": "^4.0.0",
-        "create-ecdh": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.0",
-        "diffie-hellman": "^5.0.0",
-        "inherits": "^2.0.1",
-        "pbkdf2": "^3.0.3",
-        "public-encrypt": "^4.0.0",
-        "randombytes": "^2.0.0",
-        "randomfill": "^1.0.3"
+      "license": "MIT",
+      "dependencies": {
+        "loader-utils": "^2.0.0",
+        "regex-parser": "^2.2.11"
+      },
+      "engines": {
+        "node": ">=8.9"
       }
     },
-    "crypto-js": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
-      "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==",
-      "dev": true
-    },
-    "css": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz",
-      "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==",
+    "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": {
+      "version": "2.0.4",
       "dev": true,
-      "requires": {
-        "inherits": "^2.0.4",
-        "source-map": "^0.6.1",
-        "source-map-resolve": "^0.6.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=8.9.0"
       }
     },
-    "css-blank-pseudo": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz",
-      "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==",
+    "node_modules/agent-base": {
+      "version": "6.0.2",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.9"
+      "license": "MIT",
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
       }
     },
-    "css-has-pseudo": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz",
-      "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==",
+    "node_modules/agentkeepalive": {
+      "version": "4.5.0",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.9"
+      "license": "MIT",
+      "dependencies": {
+        "humanize-ms": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 8.0.0"
       }
     },
-    "css-loader": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz",
-      "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==",
+    "node_modules/aggregate-error": {
+      "version": "3.1.0",
       "dev": true,
-      "requires": {
-        "icss-utils": "^5.1.0",
-        "postcss": "^8.2.15",
-        "postcss-modules-extract-imports": "^3.0.0",
-        "postcss-modules-local-by-default": "^4.0.0",
-        "postcss-modules-scope": "^3.0.0",
-        "postcss-modules-values": "^4.0.0",
-        "postcss-value-parser": "^4.1.0",
-        "semver": "^7.3.5"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "css-prefers-color-scheme": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz",
-      "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==",
-      "dev": true
-    },
-    "css-select": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
-      "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+    "node_modules/aggregate-error/node_modules/indent-string": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "boolbase": "^1.0.0",
-        "css-what": "^6.0.1",
-        "domhandler": "^4.3.1",
-        "domutils": "^2.8.0",
-        "nth-check": "^2.0.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "css-tree": {
-      "version": "1.0.0-alpha.39",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
-      "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
+    "node_modules/ajv": {
+      "version": "8.12.0",
       "dev": true,
-      "requires": {
-        "mdn-data": "2.0.6",
-        "source-map": "^0.6.1"
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "json-schema-traverse": "^1.0.0",
+        "require-from-string": "^2.0.2",
+        "uri-js": "^4.2.2"
       },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/ajv-formats": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
+        "ajv": "^8.0.0"
+      },
+      "peerDependencies": {
+        "ajv": "^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "ajv": {
+          "optional": true
         }
       }
     },
-    "css-what": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
-      "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
-      "dev": true
-    },
-    "css.escape": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz",
-      "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg=="
-    },
-    "cssdb": {
+    "node_modules/ajv-keywords": {
       "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz",
-      "integrity": "sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw==",
-      "dev": true
-    },
-    "cssesc": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
-      "dev": true
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.3"
+      },
+      "peerDependencies": {
+        "ajv": "^8.8.2"
+      }
     },
-    "cssfontparser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz",
-      "integrity": "sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==",
-      "dev": true
+    "node_modules/amdefine": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "BSD-3-Clause OR MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=0.4.2"
+      }
     },
-    "cssom": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
-      "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
-      "dev": true
+    "node_modules/ansi-colors": {
+      "version": "4.1.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "cssstyle": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
-      "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+    "node_modules/ansi-escapes": {
+      "version": "4.3.2",
       "dev": true,
-      "requires": {
-        "cssom": "~0.3.6"
-      },
+      "license": "MIT",
       "dependencies": {
-        "cssom": {
-          "version": "0.3.8",
-          "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
-          "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
-          "dev": true
-        }
+        "type-fest": "^0.21.3"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "csstype": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
-      "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
-    },
-    "cucumber": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-4.2.1.tgz",
-      "integrity": "sha512-3gQ0Vv4kSHsvXEFC6b1c+TfLRDzWD1/kU7e5vm8Kh8j35b95k6favan9/4ixcBNqd7UsU1T6FYcawC87+DlNKw==",
+    "node_modules/ansi-html-community": {
+      "version": "0.0.8",
       "dev": true,
-      "requires": {
-        "assertion-error-formatter": "^2.0.1",
-        "babel-runtime": "^6.11.6",
-        "bluebird": "^3.4.1",
-        "cli-table": "^0.3.1",
-        "colors": "^1.1.2",
-        "commander": "^2.9.0",
-        "cucumber-expressions": "^5.0.13",
-        "cucumber-tag-expressions": "^1.1.1",
-        "duration": "^0.2.0",
-        "escape-string-regexp": "^1.0.5",
-        "figures": "2.0.0",
-        "gherkin": "^5.0.0",
-        "glob": "^7.0.0",
-        "indent-string": "^3.1.0",
-        "is-generator": "^1.0.2",
-        "is-stream": "^1.1.0",
-        "knuth-shuffle-seeded": "^1.0.6",
-        "lodash": "^4.17.4",
-        "mz": "^2.4.0",
-        "progress": "^2.0.0",
-        "resolve": "^1.3.3",
-        "serialize-error": "^2.1.0",
-        "stack-chain": "^2.0.0",
-        "stacktrace-js": "^2.0.0",
-        "string-argv": "0.0.2",
-        "title-case": "^2.1.1",
-        "util-arity": "^1.0.2",
-        "verror": "^1.9.0"
-      },
+      "engines": [
+        "node >= 0.8.0"
+      ],
+      "license": "Apache-2.0",
+      "bin": {
+        "ansi-html": "bin/ansi-html"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "license": "MIT",
       "dependencies": {
-        "cucumber-expressions": {
-          "version": "5.0.18",
-          "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-5.0.18.tgz",
-          "integrity": "sha512-cj9UKCEvsB7bN97THmowcZt8I3rYFbTAFBNeDpKmWW3vr43CLZeWBmbk7NlHijndLwPJ7+uiF72xWrRU+RLyZA==",
-          "dev": true,
-          "requires": {
-            "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.2.0"
-          }
-        },
-        "figures": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
-          "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
-          "dev": true,
-          "requires": {
-            "escape-string-regexp": "^1.0.5"
-          }
-        },
-        "indent-string": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
-          "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==",
-          "dev": true
-        },
-        "is-stream": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-          "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
-          "dev": true
-        },
-        "serialize-error": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz",
-          "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==",
-          "dev": true
-        }
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "cucumber-expressions": {
-      "version": "6.6.2",
-      "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-6.6.2.tgz",
-      "integrity": "sha512-WcFSVBiWNLJbIcAAC3t/ACU46vaOKfe1UIF5H3qveoq+Y4XQm9j3YwHurQNufRKBBg8nCnpU7Ttsx7egjS3hwA==",
+    "node_modules/any-promise": {
+      "version": "1.3.0",
       "dev": true,
-      "requires": {
-        "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.2.0"
-      }
+      "license": "MIT"
     },
-    "cucumber-messages": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/cucumber-messages/-/cucumber-messages-8.0.0.tgz",
-      "integrity": "sha512-lUnWRMjwA9+KhDec/5xRZV3Du67ISumHnVLywWQXyvzmc4P+Eqx8CoeQrBQoau3Pw1hs4kJLTDyV85hFBF00SQ==",
+    "node_modules/anymatch": {
+      "version": "3.1.3",
       "dev": true,
-      "requires": {
-        "@types/uuid": "^3.4.6",
-        "protobufjs": "^6.8.8",
-        "uuid": "^3.3.3"
-      },
+      "license": "ISC",
       "dependencies": {
-        "uuid": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-          "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-          "dev": true
-        }
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "cucumber-tag-expressions": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-1.1.1.tgz",
-      "integrity": "sha512-V9jv81sR/HaJ87FoidrvHkviXId7KmBcUi7aQPfi+W3nRO30N6GqH6lcp8K+nyiT1DgemRJBPDDeBMS93xJqMQ==",
-      "dev": true
+    "node_modules/apache-crypt": {
+      "version": "1.2.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "unix-crypt-td-js": "^1.1.4"
+      },
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "cypress": {
-      "version": "10.11.0",
-      "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.11.0.tgz",
-      "integrity": "sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA==",
+    "node_modules/apache-md5": {
+      "version": "1.1.8",
       "dev": true,
-      "requires": {
-        "@cypress/request": "^2.88.10",
-        "@cypress/xvfb": "^1.2.4",
-        "@types/node": "^14.14.31",
-        "@types/sinonjs__fake-timers": "8.1.1",
-        "@types/sizzle": "^2.3.2",
-        "arch": "^2.2.0",
-        "blob-util": "^2.0.2",
-        "bluebird": "^3.7.2",
-        "buffer": "^5.6.0",
-        "cachedir": "^2.3.0",
-        "chalk": "^4.1.0",
-        "check-more-types": "^2.24.0",
-        "cli-cursor": "^3.1.0",
-        "cli-table3": "~0.6.1",
-        "commander": "^5.1.0",
-        "common-tags": "^1.8.0",
-        "dayjs": "^1.10.4",
-        "debug": "^4.3.2",
-        "enquirer": "^2.3.6",
-        "eventemitter2": "6.4.7",
-        "execa": "4.1.0",
-        "executable": "^4.1.1",
-        "extract-zip": "2.0.1",
-        "figures": "^3.2.0",
-        "fs-extra": "^9.1.0",
-        "getos": "^3.2.1",
-        "is-ci": "^3.0.0",
-        "is-installed-globally": "~0.4.0",
-        "lazy-ass": "^1.6.0",
-        "listr2": "^3.8.3",
-        "lodash": "^4.17.21",
-        "log-symbols": "^4.0.0",
-        "minimist": "^1.2.6",
-        "ospath": "^1.2.2",
-        "pretty-bytes": "^5.6.0",
-        "proxy-from-env": "1.0.0",
-        "request-progress": "^3.0.0",
-        "semver": "^7.3.2",
-        "supports-color": "^8.1.1",
-        "tmp": "~0.2.1",
-        "untildify": "^4.0.0",
-        "yauzl": "^2.10.0"
-      },
-      "dependencies": {
-        "@types/node": {
-          "version": "14.18.48",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.48.tgz",
-          "integrity": "sha512-iL0PIMwejpmuVHgfibHpfDwOdsbmB50wr21X71VnF5d7SsBF7WK+ZvP/SCcFm7Iwb9iiYSap9rlrdhToNAWdxg==",
-          "dev": true
-        },
-        "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          },
-          "dependencies": {
-            "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"
-              }
-            }
-          }
-        },
-        "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
-        },
-        "commander": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
-          "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
-          "dev": true
-        },
-        "execa": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
-          "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^7.0.0",
-            "get-stream": "^5.0.0",
-            "human-signals": "^1.1.1",
-            "is-stream": "^2.0.0",
-            "merge-stream": "^2.0.0",
-            "npm-run-path": "^4.0.0",
-            "onetime": "^5.1.0",
-            "signal-exit": "^3.0.2",
-            "strip-final-newline": "^2.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "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
-        },
-        "human-signals": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
-          "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
-          "dev": true
-        },
-        "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"
-          }
-        },
-        "proxy-from-env": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
-          "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==",
-          "dev": true
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "8.1.1",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
-        "tmp": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
-          "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
-          "dev": true,
-          "requires": {
-            "rimraf": "^3.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "cypress-axe": {
-      "version": "0.14.0",
-      "resolved": "https://registry.npmjs.org/cypress-axe/-/cypress-axe-0.14.0.tgz",
-      "integrity": "sha512-7Rdjnko0MjggCmndc1wECAkvQBIhuy+DRtjF7bd5YPZRFvubfMNvrxfqD8PWQmxm7MZE0ffS4Xr43V6ZmvLopg==",
-      "dev": true
+    "node_modules/aproba": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "ISC"
     },
-    "cypress-cucumber-preprocessor": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/cypress-cucumber-preprocessor/-/cypress-cucumber-preprocessor-4.3.1.tgz",
-      "integrity": "sha512-BKUYXqoTeKzkPXohEczDtpAwRCY0ZPtIpfRwJut16yNLqdXQMV+aItwanxe3cbJTFlwg562NAjL4LMdiOhkAjg==",
+    "node_modules/arch": {
+      "version": "2.2.0",
       "dev": true,
-      "requires": {
-        "@cypress/browserify-preprocessor": "^3.0.2",
-        "chai": "^4.2.0",
-        "chokidar": "3.5.2",
-        "cosmiconfig": "^4.0.0",
-        "cucumber": "^4.2.1",
-        "cucumber-expressions": "^6.0.1",
-        "cucumber-tag-expressions": "^1.1.1",
-        "dargs": "^7.0.0",
-        "debug": "^3.0.1",
-        "gherkin": "^5.1.0",
-        "glob": "^7.1.2",
-        "js-string-escape": "^1.0.1",
-        "minimist": "^1.2.5",
-        "through": "^2.3.8"
-      },
-      "dependencies": {
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "dev": true,
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
         },
-        "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"
-          }
-        },
-        "cosmiconfig": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
-          "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
-          "dev": true,
-          "requires": {
-            "is-directory": "^0.3.1",
-            "js-yaml": "^3.9.0",
-            "parse-json": "^4.0.0",
-            "require-from-string": "^2.0.1"
-          }
-        },
-        "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"
-          }
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
         },
-        "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"
-          }
-        },
-        "js-yaml": {
-          "version": "3.14.1",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-          "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-          "dev": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "parse-json": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-          "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
-          }
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
         }
-      }
-    },
-    "cypress-iframe": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/cypress-iframe/-/cypress-iframe-1.0.1.tgz",
-      "integrity": "sha512-Ne+xkZmWMhfq3x6wbfzK/SzsVTCrJru3R3cLXsoSAZyfUtJDamXyaIieHXeea3pQDXF4wE2w4iUuvCYHhoD31g==",
-      "dev": true
+      ],
+      "license": "MIT"
     },
-    "cypress-multi-reporters": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/cypress-multi-reporters/-/cypress-multi-reporters-1.5.0.tgz",
-      "integrity": "sha512-6rJ1rk1RpjZwTeydCDc8r3iOmWj2ZEYo++oDTJHNEu7eetb3W1cYDNo5CdxF/r0bo7TLQsOEpBHOCYBZfPVt/g==",
+    "node_modules/are-we-there-yet": {
+      "version": "3.0.1",
       "dev": true,
-      "requires": {
-        "debug": "^4.1.1",
-        "lodash": "^4.17.15"
+      "license": "ISC",
+      "dependencies": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^3.6.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
       }
     },
-    "d": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
-      "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+    "node_modules/are-we-there-yet/node_modules/readable-stream": {
+      "version": "3.6.2",
       "dev": true,
-      "requires": {
-        "es5-ext": "^0.10.50",
-        "type": "^1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "dargs": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
-      "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==",
-      "dev": true
+    "node_modules/arg": {
+      "version": "4.1.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "dash-ast": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz",
-      "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==",
-      "dev": true
+    "node_modules/argparse": {
+      "version": "1.0.10",
+      "license": "MIT",
+      "dependencies": {
+        "sprintf-js": "~1.0.2"
+      }
     },
-    "dashdash": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
-      "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+    "node_modules/aria-query": {
+      "version": "4.2.2",
       "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime": "^7.10.2",
+        "@babel/runtime-corejs3": "^7.10.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      }
+    },
+    "node_modules/arr-diff": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "data-urls": {
+    "node_modules/arr-flatten": {
       "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
-      "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
       "dev": true,
-      "requires": {
-        "abab": "^2.0.0",
-        "whatwg-mimetype": "^2.2.0",
-        "whatwg-url": "^7.0.0"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-          "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-          "dev": true
-        },
-        "tr46": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
-          "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
-          "dev": true,
-          "requires": {
-            "punycode": "^2.1.0"
-          }
-        },
-        "webidl-conversions": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-          "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-          "dev": true
-        },
-        "whatwg-url": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
-          "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
-          "dev": true,
-          "requires": {
-            "lodash.sortby": "^4.7.0",
-            "tr46": "^1.0.1",
-            "webidl-conversions": "^4.0.2"
-          }
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "dateformat": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz",
-      "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==",
-      "dev": true
+    "node_modules/arr-union": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "dayjs": {
-      "version": "1.11.7",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
-      "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==",
-      "dev": true
+    "node_modules/array-buffer-byte-length": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "is-array-buffer": "^3.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "requires": {
-        "ms": "2.1.2"
+    "node_modules/array-differ": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "decache": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz",
-      "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==",
+    "node_modules/array-each": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "callsite": "^1.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "decamelize": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
-      "dev": true
+    "node_modules/array-equal": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "decamelize-keys": {
+    "node_modules/array-flatten": {
       "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
-      "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
       "dev": true,
-      "requires": {
-        "decamelize": "^1.1.0",
-        "map-obj": "^1.0.0"
-      },
-      "dependencies": {
-        "map-obj": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-          "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
-          "dev": true
-        }
-      }
+      "license": "MIT"
     },
-    "decimal.js": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
-      "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
-      "dev": true
-    },
-    "decode-uri-component": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
-      "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
-      "dev": true
+    "node_modules/array-from": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "decompress-response": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
-      "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
-      "optional": true,
-      "requires": {
-        "mimic-response": "^2.0.0"
+    "node_modules/array-slice": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "dedent": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
-      "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
-      "dev": true
-    },
-    "deep-eql": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
-      "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
+    "node_modules/array-union": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "type-detect": "^4.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "deep-equal": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz",
-      "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
+    "node_modules/array-unique": {
+      "version": "0.3.2",
       "dev": true,
-      "requires": {
-        "is-arguments": "^1.0.4",
-        "is-date-object": "^1.0.1",
-        "is-regex": "^1.0.4",
-        "object-is": "^1.0.1",
-        "object-keys": "^1.1.1",
-        "regexp.prototype.flags": "^1.2.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "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=="
-    },
-    "deep-is": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true
-    },
-    "deepmerge": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
-      "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="
-    },
-    "default-gateway": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz",
-      "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==",
+    "node_modules/arraybuffer.prototype.slice": {
+      "version": "1.0.2",
       "dev": true,
-      "requires": {
-        "execa": "^5.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.0",
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "get-intrinsic": "^1.2.1",
+        "is-array-buffer": "^3.0.2",
+        "is-shared-array-buffer": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "defaults": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
-      "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+    "node_modules/arrify": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "clone": "^1.0.2"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "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
+    "node_modules/asap": {
+      "version": "2.0.6",
+      "dev": true,
+      "license": "MIT"
     },
-    "define-properties": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
-      "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+    "node_modules/asn1": {
+      "version": "0.2.6",
       "dev": true,
-      "requires": {
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": "~2.1.0"
       }
     },
-    "define-property": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
-      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+    "node_modules/asn1.js": {
+      "version": "5.4.1",
       "dev": true,
-      "requires": {
-        "is-descriptor": "^1.0.2",
-        "isobject": "^3.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        }
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "safer-buffer": "^2.1.0"
       }
     },
-    "defined": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
-      "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
-      "dev": true
+    "node_modules/asn1.js/node_modules/bn.js": {
+      "version": "4.12.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "del": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
-      "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
+    "node_modules/assert": {
+      "version": "1.5.1",
       "dev": true,
-      "requires": {
-        "globby": "^11.0.1",
-        "graceful-fs": "^4.2.4",
-        "is-glob": "^4.0.1",
-        "is-path-cwd": "^2.2.0",
-        "is-path-inside": "^3.0.2",
-        "p-map": "^4.0.0",
-        "rimraf": "^3.0.2",
-        "slash": "^3.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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
-        },
-        "globby": {
-          "version": "11.1.0",
-          "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-          "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-          "dev": true,
-          "requires": {
-            "array-union": "^2.1.0",
-            "dir-glob": "^3.0.1",
-            "fast-glob": "^3.2.9",
-            "ignore": "^5.2.0",
-            "merge2": "^1.4.1",
-            "slash": "^3.0.0"
-          }
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        }
+        "object.assign": "^4.1.4",
+        "util": "^0.10.4"
       }
     },
-    "delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
-    },
-    "delegates": {
+    "node_modules/assert-plus": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-      "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8"
+      }
     },
-    "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
+    "node_modules/assertion-error": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
     },
-    "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
-    },
-    "deps-sort": {
+    "node_modules/assertion-error-formatter": {
       "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz",
-      "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==",
       "dev": true,
-      "requires": {
-        "JSONStream": "^1.0.3",
-        "shasum-object": "^1.0.0",
-        "subarg": "^1.0.0",
-        "through2": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "diff": "^3.0.0",
+        "pad-right": "^0.2.2",
+        "repeat-string": "^1.6.1"
       }
     },
-    "des.js": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
-      "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+    "node_modules/assign-symbols": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "destroy": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
-      "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
-      "dev": true
-    },
-    "detect-browser": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.2.0.tgz",
-      "integrity": "sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA=="
-    },
-    "detect-file": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
-      "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
-      "dev": true
-    },
-    "detect-libc": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
-      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
-      "optional": true
-    },
-    "detect-newline": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
-      "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
-      "dev": true
-    },
-    "detect-node": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
-      "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
-      "dev": true
-    },
-    "detective": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz",
-      "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==",
+    "node_modules/ast-transform": {
+      "version": "0.0.0",
       "dev": true,
-      "requires": {
-        "acorn-node": "^1.8.2",
-        "defined": "^1.0.0",
-        "minimist": "^1.2.6"
+      "license": "MIT",
+      "dependencies": {
+        "escodegen": "~1.2.0",
+        "esprima": "~1.0.4",
+        "through": "~2.3.4"
       }
     },
-    "dfa": {
+    "node_modules/ast-transform/node_modules/escodegen": {
       "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz",
-      "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==",
-      "dev": true
-    },
-    "diff": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
-      "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
-      "dev": true
-    },
-    "diff-sequences": {
-      "version": "28.1.1",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz",
-      "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==",
-      "dev": true
+      "dev": true,
+      "dependencies": {
+        "esprima": "~1.0.4",
+        "estraverse": "~1.5.0",
+        "esutils": "~1.0.0"
+      },
+      "bin": {
+        "escodegen": "bin/escodegen.js",
+        "esgenerate": "bin/esgenerate.js"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      },
+      "optionalDependencies": {
+        "source-map": "~0.1.30"
+      }
     },
-    "diffie-hellman": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
-      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+    "node_modules/ast-transform/node_modules/esprima": {
+      "version": "1.0.4",
       "dev": true,
-      "requires": {
-        "bn.js": "^4.1.0",
-        "miller-rabin": "^4.0.0",
-        "randombytes": "^2.0.0"
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
       },
-      "dependencies": {
-        "bn.js": {
-          "version": "4.12.0",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+    "node_modules/ast-transform/node_modules/estraverse": {
+      "version": "1.5.1",
       "dev": true,
-      "requires": {
-        "path-type": "^4.0.0"
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "dns-equal": {
+    "node_modules/ast-transform/node_modules/esutils": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
-      "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
-      "dev": true
-    },
-    "dns-packet": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz",
-      "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==",
       "dev": true,
-      "requires": {
-        "ip": "^1.1.0",
-        "safe-buffer": "^5.0.1"
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "dns-txt": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
-      "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==",
+    "node_modules/ast-transform/node_modules/source-map": {
+      "version": "0.1.43",
       "dev": true,
-      "requires": {
-        "buffer-indexof": "^1.0.0"
+      "optional": true,
+      "dependencies": {
+        "amdefine": ">=0.0.4"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+    "node_modules/ast-types": {
+      "version": "0.7.8",
       "dev": true,
-      "requires": {
-        "esutils": "^2.0.2"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "dom-serializer": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
-      "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+    "node_modules/astral-regex": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "domelementtype": "^2.0.1",
-        "domhandler": "^4.2.0",
-        "entities": "^2.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "domain-browser": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
-      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
-      "dev": true
-    },
-    "domelementtype": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
-      "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
-      "dev": true
-    },
-    "domexception": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
-      "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+    "node_modules/async": {
+      "version": "3.2.4",
       "dev": true,
-      "requires": {
-        "webidl-conversions": "^4.0.2"
-      },
+      "license": "MIT"
+    },
+    "node_modules/async-mutex": {
+      "version": "0.2.4",
+      "license": "MIT",
       "dependencies": {
-        "webidl-conversions": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-          "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-          "dev": true
-        }
+        "tslib": "^2.0.0"
       }
     },
-    "domhandler": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
-      "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "license": "MIT"
+    },
+    "node_modules/at-least-node": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "domelementtype": "^2.2.0"
+      "license": "ISC",
+      "engines": {
+        "node": ">= 4.0.0"
       }
     },
-    "dommatrix": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz",
-      "integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==",
-      "dev": true
-    },
-    "dompurify": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.3.tgz",
-      "integrity": "sha512-dqnqRkPMAjOZE0FogZ+ceJNM2dZ3V/yNOuFB7+39qpO93hHhfRpHw3heYQC7DPK9FqbQTfBKUJhiSfz4MvXYwg=="
-    },
-    "domutils": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
-      "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+    "node_modules/atob": {
+      "version": "2.1.2",
       "dev": true,
-      "requires": {
-        "dom-serializer": "^1.0.1",
-        "domelementtype": "^2.2.0",
-        "domhandler": "^4.2.0"
+      "license": "(MIT OR Apache-2.0)",
+      "bin": {
+        "atob": "bin/atob.js"
+      },
+      "engines": {
+        "node": ">= 4.5.0"
       }
     },
-    "dot": {
-      "version": "2.0.0-beta.1",
-      "resolved": "https://registry.npmjs.org/dot/-/dot-2.0.0-beta.1.tgz",
-      "integrity": "sha512-kxM7fSnNQTXOmaeGuBSXM8O3fEsBb7XSDBllkGbRwa0lJSJTxxDE/4eSNGLKZUmlFw0f1vJ5qSV2BljrgQtgIA==",
-      "dev": true
-    },
-    "dotenv": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
-      "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
-      "dev": true
-    },
-    "drange": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz",
-      "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA=="
-    },
-    "duplexer": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
-      "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
-      "dev": true
+    "node_modules/autolinker": {
+      "version": "3.16.2",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.3.0"
+      }
     },
-    "duplexer2": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
-      "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
+    "node_modules/autoprefixer": {
+      "version": "10.4.13",
       "dev": true,
-      "requires": {
-        "readable-stream": "^2.0.2"
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.21.4",
+        "caniuse-lite": "^1.0.30001426",
+        "fraction.js": "^4.2.0",
+        "normalize-range": "^0.1.2",
+        "picocolors": "^1.0.0",
+        "postcss-value-parser": "^4.2.0"
+      },
+      "bin": {
+        "autoprefixer": "bin/autoprefixer"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
       }
     },
-    "duration": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz",
-      "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==",
+    "node_modules/autoprefixer/node_modules/postcss-value-parser": {
+      "version": "4.2.0",
       "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "~0.10.46"
+      "license": "MIT"
+    },
+    "node_modules/available-typed-arrays": {
+      "version": "1.0.5",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "ecc-jsbn": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
-      "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+    "node_modules/aws-sign2": {
+      "version": "0.7.0",
       "dev": true,
-      "requires": {
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.1.0"
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "*"
       }
     },
-    "ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
-      "dev": true
+    "node_modules/aws4": {
+      "version": "1.12.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "ejs": {
-      "version": "3.1.9",
-      "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
-      "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
+    "node_modules/axe-core": {
+      "version": "4.4.3",
       "dev": true,
-      "requires": {
-        "jake": "^10.8.5"
+      "license": "MPL-2.0",
+      "engines": {
+        "node": ">=4"
       }
     },
-    "electron-to-chromium": {
-      "version": "1.4.408",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.408.tgz",
-      "integrity": "sha512-vjeaj0u/UYnzA/CIdGXzzcxRLCqRwREYc9YfaWInjIEr7/XPttZ6ShpyqapchEy0S2r6LpLjDBTnNj7ZxnxJKg=="
-    },
-    "elliptic": {
-      "version": "6.5.4",
-      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
-      "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+    "node_modules/axios": {
+      "version": "0.21.4",
       "dev": true,
-      "requires": {
-        "bn.js": "^4.11.9",
-        "brorand": "^1.1.0",
-        "hash.js": "^1.0.0",
-        "hmac-drbg": "^1.0.1",
-        "inherits": "^2.0.4",
-        "minimalistic-assert": "^1.0.1",
-        "minimalistic-crypto-utils": "^1.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "bn.js": {
-          "version": "4.12.0",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-          "dev": true
-        }
+        "follow-redirects": "^1.14.0"
       }
     },
-    "emittery": {
-      "version": "0.10.2",
-      "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz",
-      "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==",
-      "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=="
-    },
-    "emojis-list": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-      "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-      "dev": true
-    },
-    "encodeurl": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
-      "dev": true
+    "node_modules/axobject-query": {
+      "version": "2.2.0",
+      "dev": true,
+      "license": "Apache-2.0"
     },
-    "encoding": {
-      "version": "0.1.13",
-      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
-      "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+    "node_modules/babel-jest": {
+      "version": "29.7.0",
       "dev": true,
-      "optional": true,
-      "requires": {
-        "iconv-lite": "^0.6.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "iconv-lite": {
-          "version": "0.6.3",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-          "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3.0.0"
-          }
-        }
+        "@jest/transform": "^29.7.0",
+        "@types/babel__core": "^7.1.14",
+        "babel-plugin-istanbul": "^6.1.1",
+        "babel-preset-jest": "^29.6.3",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.8.0"
       }
     },
-    "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==",
-      "requires": {
-        "once": "^1.4.0"
+    "node_modules/babel-jest/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "enhanced-resolve": {
-      "version": "5.14.1",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz",
-      "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==",
+    "node_modules/babel-jest/node_modules/@jest/transform": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "graceful-fs": "^4.2.4",
-        "tapable": "^2.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "babel-plugin-istanbul": "^6.1.1",
+        "chalk": "^4.0.0",
+        "convert-source-map": "^2.0.0",
+        "fast-json-stable-stringify": "^2.1.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "pirates": "^4.0.4",
+        "slash": "^3.0.0",
+        "write-file-atomic": "^4.0.2"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "enquirer": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
-      "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+    "node_modules/babel-jest/node_modules/@jest/types": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "ansi-colors": "^4.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "entities": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
-      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
-      "dev": true
+    "node_modules/babel-jest/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
     },
-    "env-paths": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
-      "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
-      "dev": true
+    "node_modules/babel-jest/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
     },
-    "err-code": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
-      "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
-      "dev": true
+    "node_modules/babel-jest/node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "errno": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
-      "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+    "node_modules/babel-jest/node_modules/jest-haste-map": {
+      "version": "29.7.0",
       "dev": true,
-      "optional": true,
-      "requires": {
-        "prr": "~1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
       }
     },
-    "error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+    "node_modules/babel-jest/node_modules/jest-regex-util": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "is-arrayish": "^0.2.1"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "error-stack-parser": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
-      "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
+    "node_modules/babel-jest/node_modules/jest-util": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "stackframe": "^1.3.4"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "es-abstract": {
-      "version": "1.21.2",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
-      "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+    "node_modules/babel-jest/node_modules/jest-worker": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "array-buffer-byte-length": "^1.0.0",
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "es-set-tostringtag": "^2.0.1",
-        "es-to-primitive": "^1.2.1",
-        "function.prototype.name": "^1.1.5",
-        "get-intrinsic": "^1.2.0",
-        "get-symbol-description": "^1.0.0",
-        "globalthis": "^1.0.3",
-        "gopd": "^1.0.1",
-        "has": "^1.0.3",
-        "has-property-descriptors": "^1.0.0",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.5",
-        "is-array-buffer": "^3.0.2",
-        "is-callable": "^1.2.7",
-        "is-negative-zero": "^2.0.2",
-        "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
-        "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.10",
-        "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.3",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.4",
-        "regexp.prototype.flags": "^1.4.3",
-        "safe-regex-test": "^1.0.0",
-        "string.prototype.trim": "^1.2.7",
-        "string.prototype.trimend": "^1.0.6",
-        "string.prototype.trimstart": "^1.0.6",
-        "typed-array-length": "^1.0.4",
-        "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.9"
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "jest-util": "^29.7.0",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "es-module-lexer": {
-      "version": "0.9.3",
-      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
-      "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
-      "dev": true
+    "node_modules/babel-jest/node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
     },
-    "es-set-tostringtag": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
-      "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+    "node_modules/babel-loader": {
+      "version": "9.1.2",
       "dev": true,
-      "requires": {
-        "get-intrinsic": "^1.1.3",
-        "has": "^1.0.3",
-        "has-tostringtag": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "find-cache-dir": "^3.3.2",
+        "schema-utils": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.12.0",
+        "webpack": ">=5"
       }
     },
-    "es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+    "node_modules/babel-plugin-add-module-exports": {
+      "version": "1.0.4",
       "dev": true,
-      "requires": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
+      "license": "MIT"
+    },
+    "node_modules/babel-plugin-istanbul": {
+      "version": "6.1.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@istanbuljs/load-nyc-config": "^1.0.0",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-instrument": "^5.0.4",
+        "test-exclude": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "es5-ext": {
-      "version": "0.10.62",
-      "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
-      "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+    "node_modules/babel-plugin-jest-hoist": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "es6-iterator": "^2.0.3",
-        "es6-symbol": "^3.1.3",
-        "next-tick": "^1.1.0"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/template": "^7.3.3",
+        "@babel/types": "^7.3.3",
+        "@types/babel__core": "^7.1.14",
+        "@types/babel__traverse": "^7.0.6"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "es6-iterator": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
-      "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+    "node_modules/babel-plugin-polyfill-corejs2": {
+      "version": "0.3.3",
       "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "^0.10.35",
-        "es6-symbol": "^3.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/compat-data": "^7.17.7",
+        "@babel/helper-define-polyfill-provider": "^0.3.3",
+        "semver": "^6.1.1"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "es6-map": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
-      "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==",
+    "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+      "version": "6.3.1",
       "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "~0.10.14",
-        "es6-iterator": "~2.0.1",
-        "es6-set": "~0.1.5",
-        "es6-symbol": "~3.1.1",
-        "event-emitter": "~0.3.5"
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "es6-set": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz",
-      "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==",
+    "node_modules/babel-plugin-polyfill-corejs3": {
+      "version": "0.6.0",
       "dev": true,
-      "requires": {
-        "d": "^1.0.1",
-        "es5-ext": "^0.10.62",
-        "es6-iterator": "~2.0.3",
-        "es6-symbol": "^3.1.3",
-        "event-emitter": "^0.3.5",
-        "type": "^2.7.2"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-define-polyfill-provider": "^0.3.3",
+        "core-js-compat": "^3.25.1"
       },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
+      }
+    },
+    "node_modules/babel-plugin-polyfill-regenerator": {
+      "version": "0.4.1",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "type": {
-          "version": "2.7.2",
-          "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
-          "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
-          "dev": true
-        }
+        "@babel/helper-define-polyfill-provider": "^0.3.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0-0"
       }
     },
-    "es6-symbol": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
-      "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+    "node_modules/babel-preset-current-node-syntax": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "d": "^1.0.1",
-        "ext": "^1.1.2"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/plugin-syntax-async-generators": "^7.8.4",
+        "@babel/plugin-syntax-bigint": "^7.8.3",
+        "@babel/plugin-syntax-class-properties": "^7.8.3",
+        "@babel/plugin-syntax-import-meta": "^7.8.3",
+        "@babel/plugin-syntax-json-strings": "^7.8.3",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+        "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+        "@babel/plugin-syntax-top-level-await": "^7.8.3"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
-    "esbuild-android-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.22.tgz",
-      "integrity": "sha512-k1Uu4uC4UOFgrnTj2zuj75EswFSEBK+H6lT70/DdS4mTAOfs2ECv2I9ZYvr3w0WL0T4YItzJdK7fPNxcPw6YmQ==",
+    "node_modules/babel-preset-jest": {
+      "version": "29.6.3",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "babel-plugin-jest-hoist": "^29.6.3",
+        "babel-preset-current-node-syntax": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
     },
-    "esbuild-darwin-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.22.tgz",
-      "integrity": "sha512-d8Ceuo6Vw6HM3fW218FB6jTY6O3r2WNcTAU0SGsBkXZ3k8SDoRLd3Nrc//EqzdgYnzDNMNtrWegK2Qsss4THhw==",
+    "node_modules/babel-runtime": {
+      "version": "6.26.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      }
     },
-    "esbuild-darwin-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.22.tgz",
-      "integrity": "sha512-YAt9Tj3SkIUkswuzHxkaNlT9+sg0xvzDvE75LlBo4DI++ogSgSmKNR6B4eUhU5EUUepVXcXdRIdqMq9ppeRqfw==",
+    "node_modules/babel-runtime/node_modules/regenerator-runtime": {
+      "version": "0.11.1",
       "dev": true,
-      "optional": true
+      "license": "MIT"
     },
-    "esbuild-freebsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.22.tgz",
-      "integrity": "sha512-ek1HUv7fkXMy87Qm2G4IRohN+Qux4IcnrDBPZGXNN33KAL0pEJJzdTv0hB/42+DCYWylSrSKxk3KUXfqXOoH4A==",
+    "node_modules/babelify": {
+      "version": "10.0.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
     },
-    "esbuild-freebsd-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.22.tgz",
-      "integrity": "sha512-zPh9SzjRvr9FwsouNYTqgqFlsMIW07O8mNXulGeQx6O5ApgGUBZBgtzSlBQXkHi18WjrosYfsvp5nzOKiWzkjQ==",
+    "node_modules/bail": {
+      "version": "1.0.5",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
     },
-    "esbuild-linux-32": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.22.tgz",
-      "integrity": "sha512-SnpveoE4nzjb9t2hqCIzzTWBM0RzcCINDMBB67H6OXIuDa4KqFqaIgmTchNA9pJKOVLVIKd5FYxNiJStli21qg==",
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "license": "MIT"
+    },
+    "node_modules/base": {
+      "version": "0.11.2",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "esbuild-linux-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.22.tgz",
-      "integrity": "sha512-Zcl9Wg7gKhOWWNqAjygyqzB+fJa19glgl2JG7GtuxHyL1uEnWlpSMytTLMqtfbmRykIHdab797IOZeKwk5g0zg==",
+    "node_modules/base/node_modules/define-property": {
+      "version": "1.0.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
     },
-    "esbuild-linux-arm": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.22.tgz",
-      "integrity": "sha512-soPDdbpt/C0XvOOK45p4EFt8HbH5g+0uHs5nUKjHVExfgR7du734kEkXR/mE5zmjrlymk5AA79I0VIvj90WZ4g==",
+    "node_modules/basic-auth": {
+      "version": "2.0.1",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "5.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "esbuild-linux-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.22.tgz",
-      "integrity": "sha512-8q/FRBJtV5IHnQChO3LHh/Jf7KLrxJ/RCTGdBvlVZhBde+dk3/qS9fFsUy+rs3dEi49aAsyVitTwlKw1SUFm+A==",
+    "node_modules/basic-auth/node_modules/safe-buffer": {
+      "version": "5.1.2",
       "dev": true,
-      "optional": true
+      "license": "MIT"
     },
-    "esbuild-linux-mips64le": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.22.tgz",
-      "integrity": "sha512-SiNDfuRXhGh1JQLLA9JPprBgPVFOsGuQ0yDfSPTNxztmVJd8W2mX++c4FfLpAwxuJe183mLuKf7qKCHQs5ZnBQ==",
+    "node_modules/batch": {
+      "version": "0.6.1",
       "dev": true,
-      "optional": true
+      "license": "MIT"
     },
-    "esbuild-linux-ppc64le": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.22.tgz",
-      "integrity": "sha512-6t/GI9I+3o1EFm2AyN9+TsjdgWCpg2nwniEhjm2qJWtJyJ5VzTXGUU3alCO3evopu8G0hN2Bu1Jhz2YmZD0kng==",
+    "node_modules/bcrypt-pbkdf": {
+      "version": "1.0.2",
       "dev": true,
-      "optional": true
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "tweetnacl": "^0.14.3"
+      }
     },
-    "esbuild-linux-riscv64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.22.tgz",
-      "integrity": "sha512-AyJHipZKe88sc+tp5layovquw5cvz45QXw5SaDgAq2M911wLHiCvDtf/07oDx8eweCyzYzG5Y39Ih568amMTCQ==",
+    "node_modules/bcryptjs": {
+      "version": "2.4.3",
       "dev": true,
-      "optional": true
+      "license": "MIT"
     },
-    "esbuild-linux-s390x": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.22.tgz",
-      "integrity": "sha512-Sz1NjZewTIXSblQDZWEFZYjOK6p8tV6hrshYdXZ0NHTjWE+lwxpOpWeElUGtEmiPcMT71FiuA9ODplqzzSxkzw==",
+    "node_modules/becke-ch--regex--s0-0-v1--base--pl--lib": {
+      "version": "1.4.0",
       "dev": true,
-      "optional": true
+      "license": "SEE LICENSE IN LICENSE"
     },
-    "esbuild-netbsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.22.tgz",
-      "integrity": "sha512-TBbCtx+k32xydImsHxvFgsOCuFqCTGIxhzRNbgSL1Z2CKhzxwT92kQMhxort9N/fZM2CkRCPPs5wzQSamtzEHA==",
+    "node_modules/big.js": {
+      "version": "5.2.2",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
     },
-    "esbuild-openbsd-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.22.tgz",
-      "integrity": "sha512-vK912As725haT313ANZZZN+0EysEEQXWC/+YE4rQvOQzLuxAQc2tjbzlAFREx3C8+uMuZj/q7E5gyVB7TzpcTA==",
+    "node_modules/binary-extensions": {
+      "version": "2.2.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "esbuild-sunos-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.22.tgz",
-      "integrity": "sha512-/mbJdXTW7MTcsPhtfDsDyPEOju9EOABvCjeUU2OJ7fWpX/Em/H3WYDa86tzLUbcVg++BScQDzqV/7RYw5XNY0g==",
+    "node_modules/bl": {
+      "version": "4.1.0",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "buffer": "^5.5.0",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
     },
-    "esbuild-wasm": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.22.tgz",
-      "integrity": "sha512-FOSAM29GN1fWusw0oLMv6JYhoheDIh5+atC72TkJKfIUMID6yISlicoQSd9gsNSFsNBvABvtE2jR4JB1j4FkFw==",
-      "dev": true
+    "node_modules/bl/node_modules/buffer": {
+      "version": "5.7.1",
+      "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"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
     },
-    "esbuild-windows-32": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.22.tgz",
-      "integrity": "sha512-1vRIkuvPTjeSVK3diVrnMLSbkuE36jxA+8zGLUOrT4bb7E/JZvDRhvtbWXWaveUc/7LbhaNFhHNvfPuSw2QOQg==",
+    "node_modules/bl/node_modules/readable-stream": {
+      "version": "3.6.2",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
     },
-    "esbuild-windows-64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.22.tgz",
-      "integrity": "sha512-AxjIDcOmx17vr31C5hp20HIwz1MymtMjKqX4qL6whPj0dT9lwxPexmLj6G1CpR3vFhui6m75EnBEe4QL82SYqw==",
+    "node_modules/blob-util": {
+      "version": "2.0.2",
       "dev": true,
-      "optional": true
+      "license": "Apache-2.0"
     },
-    "esbuild-windows-arm64": {
-      "version": "0.14.22",
-      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.22.tgz",
-      "integrity": "sha512-5wvQ+39tHmRhNpu2Fx04l7QfeK3mQ9tKzDqqGR8n/4WUxsFxnVLfDRBGirIfk4AfWlxk60kqirlODPoT5LqMUg==",
+    "node_modules/bluebird": {
+      "version": "3.7.2",
       "dev": true,
-      "optional": true
+      "license": "MIT"
     },
-    "escalade": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
-      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+    "node_modules/bn.js": {
+      "version": "5.2.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
-      "dev": true
+    "node_modules/body-parser": {
+      "version": "1.19.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "3.1.0",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "on-finished": "~2.3.0",
+        "qs": "6.7.0",
+        "raw-body": "2.4.0",
+        "type-is": "~1.6.17"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+    "node_modules/body-parser/node_modules/debug": {
+      "version": "2.6.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
     },
-    "escodegen": {
-      "version": "1.14.3",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
-      "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
+    "node_modules/body-parser/node_modules/ms": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "esprima": "^4.0.1",
-        "estraverse": "^4.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1",
-        "source-map": "~0.6.1"
-      },
+      "license": "MIT"
+    },
+    "node_modules/bonjour-service": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true,
-          "optional": true
-        }
+        "array-flatten": "^2.1.2",
+        "dns-equal": "^1.0.0",
+        "fast-deep-equal": "^3.1.3",
+        "multicast-dns": "^7.2.5"
       }
     },
-    "eslint": {
-      "version": "8.17.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz",
-      "integrity": "sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==",
+    "node_modules/bonjour-service/node_modules/array-flatten": {
+      "version": "2.1.2",
       "dev": true,
-      "requires": {
-        "@eslint/eslintrc": "^1.3.0",
-        "@humanwhocodes/config-array": "^0.9.2",
-        "ajv": "^6.10.0",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.2",
-        "debug": "^4.3.2",
-        "doctrine": "^3.0.0",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.1.1",
-        "eslint-utils": "^3.0.0",
-        "eslint-visitor-keys": "^3.3.0",
-        "espree": "^9.3.2",
-        "esquery": "^1.4.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^6.0.1",
-        "globals": "^13.15.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "js-yaml": "^4.1.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.4.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.1",
-        "regexpp": "^3.2.0",
-        "strip-ansi": "^6.0.1",
-        "strip-json-comments": "^3.1.0",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.6",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "eslint-scope": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
-          "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
-          "dev": true,
-          "requires": {
-            "esrecurse": "^4.3.0",
-            "estraverse": "^5.2.0"
-          }
-        },
-        "estraverse": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-          "dev": true
-        },
-        "globals": {
-          "version": "13.20.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
-          "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
-          "dev": true,
-          "requires": {
-            "type-fest": "^0.20.2"
-          }
-        },
-        "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
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        },
-        "levn": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-          "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-          "dev": true,
-          "requires": {
-            "prelude-ls": "^1.2.1",
-            "type-check": "~0.4.0"
-          }
-        },
-        "optionator": {
-          "version": "0.9.1",
-          "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-          "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
-          "dev": true,
-          "requires": {
-            "deep-is": "^0.1.3",
-            "fast-levenshtein": "^2.0.6",
-            "levn": "^0.4.1",
-            "prelude-ls": "^1.2.1",
-            "type-check": "^0.4.0",
-            "word-wrap": "^1.2.3"
-          }
-        },
-        "prelude-ls": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-          "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-          "dev": true
-        },
-        "strip-json-comments": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-          "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-          "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"
-          }
+      "license": "MIT"
+    },
+    "node_modules/boolbase": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/bootstrap": {
+      "version": "5.2.3",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/twbs"
         },
-        "type-check": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-          "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-          "dev": true,
-          "requires": {
-            "prelude-ls": "^1.2.1"
-          }
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/bootstrap"
         }
+      ],
+      "license": "MIT",
+      "peerDependencies": {
+        "@popperjs/core": "^2.11.6"
       }
     },
-    "eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+    "node_modules/brace-expansion": {
+      "version": "1.1.11",
       "dev": true,
-      "requires": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+    "node_modules/braces": {
+      "version": "3.0.2",
       "dev": true,
-      "requires": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "eslint-visitor-keys": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-          "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-          "dev": true
-        }
+        "fill-range": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "eslint-visitor-keys": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
-      "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
-      "dev": true
-    },
-    "espree": {
-      "version": "9.5.2",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
-      "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
+    "node_modules/brfs": {
+      "version": "2.0.2",
       "dev": true,
-      "requires": {
-        "acorn": "^8.8.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
+      "license": "MIT",
+      "dependencies": {
+        "quote-stream": "^1.0.1",
+        "resolve": "^1.1.5",
+        "static-module": "^3.0.2",
+        "through2": "^2.0.0"
+      },
+      "bin": {
+        "brfs": "bin/cmd.js"
       }
     },
-    "esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "dev": true
+    "node_modules/brorand": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "esquery": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
-      "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+    "node_modules/brotli": {
+      "version": "1.3.3",
       "dev": true,
-      "requires": {
-        "estraverse": "^5.1.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "estraverse": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-          "dev": true
-        }
+        "base64-js": "^1.1.2"
       }
     },
-    "esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+    "node_modules/browser-pack": {
+      "version": "6.1.0",
       "dev": true,
-      "requires": {
-        "estraverse": "^5.2.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "estraverse": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-          "dev": true
-        }
+        "combine-source-map": "~0.8.0",
+        "defined": "^1.0.0",
+        "JSONStream": "^1.0.3",
+        "safe-buffer": "^5.1.1",
+        "through2": "^2.0.0",
+        "umd": "^3.0.0"
+      },
+      "bin": {
+        "browser-pack": "bin/cmd.js"
       }
     },
-    "estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true
-    },
-    "estree-is-function": {
+    "node_modules/browser-process-hrtime": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz",
-      "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==",
-      "dev": true
-    },
-    "esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true
-    },
-    "etag": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-2-Clause"
     },
-    "event-emitter": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
-      "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+    "node_modules/browser-resolve": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "d": "1",
-        "es5-ext": "~0.10.14"
+      "license": "MIT",
+      "dependencies": {
+        "resolve": "^1.17.0"
       }
     },
-    "event-stream": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz",
-      "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==",
+    "node_modules/browserify": {
+      "version": "16.5.2",
       "dev": true,
-      "requires": {
-        "duplexer": "^0.1.1",
-        "from": "^0.1.7",
-        "map-stream": "0.0.7",
-        "pause-stream": "^0.0.11",
-        "split": "^1.0.1",
-        "stream-combiner": "^0.2.2",
-        "through": "^2.3.8"
+      "license": "MIT",
+      "dependencies": {
+        "assert": "^1.4.0",
+        "browser-pack": "^6.0.1",
+        "browser-resolve": "^2.0.0",
+        "browserify-zlib": "~0.2.0",
+        "buffer": "~5.2.1",
+        "cached-path-relative": "^1.0.0",
+        "concat-stream": "^1.6.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "~1.0.0",
+        "crypto-browserify": "^3.0.0",
+        "defined": "^1.0.0",
+        "deps-sort": "^2.0.0",
+        "domain-browser": "^1.2.0",
+        "duplexer2": "~0.1.2",
+        "events": "^2.0.0",
+        "glob": "^7.1.0",
+        "has": "^1.0.0",
+        "htmlescape": "^1.1.0",
+        "https-browserify": "^1.0.0",
+        "inherits": "~2.0.1",
+        "insert-module-globals": "^7.0.0",
+        "JSONStream": "^1.0.3",
+        "labeled-stream-splicer": "^2.0.0",
+        "mkdirp-classic": "^0.5.2",
+        "module-deps": "^6.2.3",
+        "os-browserify": "~0.3.0",
+        "parents": "^1.0.1",
+        "path-browserify": "~0.0.0",
+        "process": "~0.11.0",
+        "punycode": "^1.3.2",
+        "querystring-es3": "~0.2.0",
+        "read-only-stream": "^2.0.0",
+        "readable-stream": "^2.0.2",
+        "resolve": "^1.1.4",
+        "shasum": "^1.0.0",
+        "shell-quote": "^1.6.1",
+        "stream-browserify": "^2.0.0",
+        "stream-http": "^3.0.0",
+        "string_decoder": "^1.1.1",
+        "subarg": "^1.0.0",
+        "syntax-error": "^1.1.1",
+        "through2": "^2.0.0",
+        "timers-browserify": "^1.0.1",
+        "tty-browserify": "0.0.1",
+        "url": "~0.11.0",
+        "util": "~0.10.1",
+        "vm-browserify": "^1.0.0",
+        "xtend": "^4.0.0"
+      },
+      "bin": {
+        "browserify": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "event-target-shim": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
-      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
-      "dev": true
-    },
-    "eventemitter-asyncresource": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz",
-      "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==",
-      "dev": true
-    },
-    "eventemitter2": {
-      "version": "6.4.7",
-      "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz",
-      "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==",
-      "dev": true
-    },
-    "eventemitter3": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
-      "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
-      "dev": true
-    },
-    "events": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
-      "dev": true
-    },
-    "evp_bytestokey": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
-      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+    "node_modules/browserify-aes": {
+      "version": "1.2.0",
       "dev": true,
-      "requires": {
-        "md5.js": "^1.3.4",
-        "safe-buffer": "^5.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
       }
     },
-    "execa": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
-      "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
+    "node_modules/browserify-cipher": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "cross-spawn": "^7.0.3",
-        "get-stream": "^6.0.0",
-        "human-signals": "^2.1.0",
-        "is-stream": "^2.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^4.0.1",
-        "onetime": "^5.1.2",
-        "signal-exit": "^3.0.3",
-        "strip-final-newline": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
       }
     },
-    "execall": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
-      "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==",
+    "node_modules/browserify-des": {
+      "version": "1.0.2",
       "dev": true,
-      "requires": {
-        "clone-regexp": "^2.1.0"
+      "license": "MIT",
+      "dependencies": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
-    "executable": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
-      "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==",
+    "node_modules/browserify-optional": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "pify": "^2.2.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-          "dev": true
-        }
+        "ast-transform": "0.0.0",
+        "ast-types": "^0.7.0",
+        "browser-resolve": "^1.8.1"
       }
     },
-    "exit": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
-      "dev": true
-    },
-    "expand-brackets": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-      "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
+    "node_modules/browserify-optional/node_modules/browser-resolve": {
+      "version": "1.11.3",
       "dev": true,
-      "requires": {
-        "debug": "^2.3.3",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "posix-character-classes": "^0.1.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        }
+        "resolve": "1.1.7"
       }
     },
-    "expand-template": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
-      "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
-      "optional": true
-    },
-    "expand-tilde": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
-      "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
+    "node_modules/browserify-optional/node_modules/resolve": {
+      "version": "1.1.7",
       "dev": true,
-      "requires": {
-        "homedir-polyfill": "^1.0.1"
-      }
+      "license": "MIT"
     },
-    "expect": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz",
-      "integrity": "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==",
+    "node_modules/browserify-rsa": {
+      "version": "4.1.0",
       "dev": true,
-      "requires": {
-        "@jest/expect-utils": "^28.1.3",
-        "jest-get-type": "^28.0.2",
-        "jest-matcher-utils": "^28.1.3",
-        "jest-message-util": "^28.1.3",
-        "jest-util": "^28.1.3"
+      "license": "MIT",
+      "dependencies": {
+        "bn.js": "^5.0.0",
+        "randombytes": "^2.0.1"
       }
     },
-    "express": {
-      "version": "4.18.2",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
-      "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+    "node_modules/browserify-sign": {
+      "version": "4.2.1",
       "dev": true,
-      "requires": {
-        "accepts": "~1.3.8",
-        "array-flatten": "1.1.1",
-        "body-parser": "1.20.1",
-        "content-disposition": "0.5.4",
-        "content-type": "~1.0.4",
-        "cookie": "0.5.0",
-        "cookie-signature": "1.0.6",
-        "debug": "2.6.9",
-        "depd": "2.0.0",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "finalhandler": "1.2.0",
-        "fresh": "0.5.2",
-        "http-errors": "2.0.0",
-        "merge-descriptors": "1.0.1",
-        "methods": "~1.1.2",
-        "on-finished": "2.4.1",
-        "parseurl": "~1.3.3",
-        "path-to-regexp": "0.1.7",
-        "proxy-addr": "~2.0.7",
-        "qs": "6.11.0",
-        "range-parser": "~1.2.1",
-        "safe-buffer": "5.2.1",
-        "send": "0.18.0",
-        "serve-static": "1.15.0",
-        "setprototypeof": "1.2.0",
-        "statuses": "2.0.1",
-        "type-is": "~1.6.18",
-        "utils-merge": "1.0.1",
-        "vary": "~1.1.2"
-      },
+      "license": "ISC",
       "dependencies": {
-        "array-flatten": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-          "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
-          "dev": true
-        },
-        "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        },
-        "qs": {
-          "version": "6.11.0",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
-          "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
-          "dev": true,
-          "requires": {
-            "side-channel": "^1.0.4"
-          }
-        }
+        "bn.js": "^5.1.1",
+        "browserify-rsa": "^4.0.1",
+        "create-hash": "^1.2.0",
+        "create-hmac": "^1.1.7",
+        "elliptic": "^6.5.3",
+        "inherits": "^2.0.4",
+        "parse-asn1": "^5.1.5",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
       }
     },
-    "ext": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
-      "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+    "node_modules/browserify-sign/node_modules/readable-stream": {
+      "version": "3.6.2",
       "dev": true,
-      "requires": {
-        "type": "^2.7.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "type": {
-          "version": "2.7.2",
-          "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
-          "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
-          "dev": true
-        }
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "extend": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
-      "dev": true
-    },
-    "extend-shallow": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-      "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+    "node_modules/browserify-zlib": {
+      "version": "0.2.0",
       "dev": true,
-      "requires": {
-        "assign-symbols": "^1.0.0",
-        "is-extendable": "^1.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "dev": true,
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        },
-        "is-plain-object": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-          "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        }
+        "pako": "~1.0.5"
       }
     },
-    "external-editor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
-      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+    "node_modules/browserify/node_modules/glob": {
+      "version": "7.2.3",
       "dev": true,
-      "requires": {
-        "chardet": "^0.7.0",
-        "iconv-lite": "^0.4.24",
-        "tmp": "^0.0.33"
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "extglob": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
-      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
-      "dev": true,
-      "requires": {
-        "array-unique": "^0.3.2",
-        "define-property": "^1.0.0",
-        "expand-brackets": "^2.1.4",
-        "extend-shallow": "^2.0.1",
-        "fragment-cache": "^0.2.1",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
+    "node_modules/browserslist": {
+      "version": "4.22.1",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
         },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
         },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001541",
+        "electron-to-chromium": "^1.4.535",
+        "node-releases": "^2.0.13",
+        "update-browserslist-db": "^1.0.13"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
       }
     },
-    "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==",
+    "node_modules/bs-logger": {
+      "version": "0.2.6",
       "dev": true,
-      "requires": {
-        "@types/yauzl": "^2.9.1",
-        "debug": "^4.1.1",
-        "get-stream": "^5.1.0",
-        "yauzl": "^2.10.0"
-      },
+      "license": "MIT",
       "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-json-stable-stringify": "2.x"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "extsprintf": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
-      "dev": true
-    },
-    "fancy-log": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-2.0.0.tgz",
-      "integrity": "sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==",
+    "node_modules/bser": {
+      "version": "2.1.1",
       "dev": true,
-      "requires": {
-        "color-support": "^1.1.3"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "node-int64": "^0.4.0"
       }
     },
-    "fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true
-    },
-    "fast-glob": {
-      "version": "3.2.12",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
-      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+    "node_modules/buffer": {
+      "version": "5.2.1",
       "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"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        }
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4"
       }
     },
-    "fast-json-patch": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz",
-      "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ=="
+    "node_modules/buffer-crc32": {
+      "version": "0.2.13",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
     },
-    "fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true
+    "node_modules/buffer-equal": {
+      "version": "0.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
     },
-    "fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-      "dev": true
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "fast-safe-stringify": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
-      "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
-      "dev": true
+    "node_modules/buffer-xor": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "fastest-levenshtein": {
-      "version": "1.0.16",
-      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
-      "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
-      "dev": true
+    "node_modules/builtin-status-codes": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "fastq": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
-      "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+    "node_modules/builtins": {
+      "version": "5.0.1",
       "dev": true,
-      "requires": {
-        "reusify": "^1.0.4"
+      "license": "MIT",
+      "dependencies": {
+        "semver": "^7.0.0"
       }
     },
-    "fault": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
-      "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
-      "requires": {
-        "format": "^0.2.0"
+    "node_modules/bulk-require": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "glob": "^7.1.1"
       }
     },
-    "faye-websocket": {
-      "version": "0.11.4",
-      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
-      "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==",
+    "node_modules/bulk-require/node_modules/glob": {
+      "version": "7.2.3",
       "dev": true,
-      "requires": {
-        "websocket-driver": ">=0.5.1"
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "fb-watchman": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
-      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
-      "dev": true,
-      "requires": {
-        "bser": "2.1.1"
+    "node_modules/busboy": {
+      "version": "1.6.0",
+      "dependencies": {
+        "streamsearch": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=10.16.0"
       }
     },
-    "fd-slicer": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+    "node_modules/bytes": {
+      "version": "3.1.0",
       "dev": true,
-      "requires": {
-        "pend": "~1.2.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "figures": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+    "node_modules/cacache": {
+      "version": "17.0.4",
       "dev": true,
-      "requires": {
-        "escape-string-regexp": "^1.0.5"
+      "license": "ISC",
+      "dependencies": {
+        "@npmcli/fs": "^3.1.0",
+        "fs-minipass": "^3.0.0",
+        "glob": "^8.0.1",
+        "lru-cache": "^7.7.1",
+        "minipass": "^4.0.0",
+        "minipass-collect": "^1.0.2",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        "p-map": "^4.0.0",
+        "promise-inflight": "^1.0.1",
+        "ssri": "^10.0.0",
+        "tar": "^6.1.11",
+        "unique-filename": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+    "node_modules/cacache/node_modules/lru-cache": {
+      "version": "7.18.3",
       "dev": true,
-      "requires": {
-        "flat-cache": "^3.0.4"
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
       }
     },
-    "file-saver": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.2.tgz",
-      "integrity": "sha512-Wz3c3XQ5xroCxd1G8b7yL0Ehkf0TC9oYC6buPFkNnU9EnaPlifeAFCyCh+iewXTyFRcg0a6j3J7FmJsIhlhBdw=="
-    },
-    "filelist": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
-      "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+    "node_modules/cache-base": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "minimatch": "^5.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-          "dev": true,
-          "requires": {
-            "balanced-match": "^1.0.0"
-          }
-        },
-        "minimatch": {
-          "version": "5.1.6",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-          "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^2.0.1"
-          }
-        }
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.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==",
+    "node_modules/cached-path-relative": {
+      "version": "1.1.0",
       "dev": true,
-      "requires": {
-        "to-regex-range": "^5.0.1"
-      }
+      "license": "MIT"
     },
-    "finalhandler": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
-      "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
+    "node_modules/cachedir": {
+      "version": "2.4.0",
       "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "on-finished": "2.4.1",
-        "parseurl": "~1.3.3",
-        "statuses": "2.0.1",
-        "unpipe": "~1.0.0"
-      },
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/call-bind": {
+      "version": "1.0.2",
+      "license": "MIT",
       "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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        }
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "find-cache-dir": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
-      "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+    "node_modules/callsite": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "commondir": "^1.0.1",
-        "make-dir": "^3.0.2",
-        "pkg-dir": "^4.1.0"
+      "engines": {
+        "node": "*"
       }
     },
-    "find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+    "node_modules/callsites": {
+      "version": "3.1.0",
       "dev": true,
-      "requires": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "findit2": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz",
-      "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==",
-      "dev": true
-    },
-    "findup-sync": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
-      "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==",
+    "node_modules/camelcase": {
+      "version": "5.3.1",
       "dev": true,
-      "requires": {
-        "detect-file": "^1.0.0",
-        "is-glob": "^3.1.0",
-        "micromatch": "^3.0.4",
-        "resolve-dir": "^1.0.1"
-      },
-      "dependencies": {
-        "braces": {
-          "version": "2.3.2",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
-          "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.1.0",
-            "array-unique": "^0.3.2",
-            "extend-shallow": "^2.0.1",
-            "fill-range": "^4.0.0",
-            "isobject": "^3.0.1",
-            "repeat-element": "^1.1.2",
-            "snapdragon": "^0.8.1",
-            "snapdragon-node": "^2.0.1",
-            "split-string": "^3.0.2",
-            "to-regex": "^3.0.1"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "fill-range": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-          "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
-          "dev": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1",
-            "to-regex-range": "^2.1.0"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "2.0.1",
-              "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-              "dev": true,
-              "requires": {
-                "is-extendable": "^0.1.0"
-              }
-            }
-          }
-        },
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
-          "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        },
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-          "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "micromatch": {
-          "version": "3.1.10",
-          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
-          "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
-          "dev": true,
-          "requires": {
-            "arr-diff": "^4.0.0",
-            "array-unique": "^0.3.2",
-            "braces": "^2.3.1",
-            "define-property": "^2.0.2",
-            "extend-shallow": "^3.0.2",
-            "extglob": "^2.0.4",
-            "fragment-cache": "^0.2.1",
-            "kind-of": "^6.0.2",
-            "nanomatch": "^1.2.9",
-            "object.pick": "^1.3.0",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.2"
-          }
-        },
-        "to-regex-range": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-          "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
-          "dev": true,
-          "requires": {
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1"
-          }
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "fined": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
-      "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+    "node_modules/camelcase-keys": {
+      "version": "6.2.2",
       "dev": true,
-      "requires": {
-        "expand-tilde": "^2.0.2",
-        "is-plain-object": "^2.0.3",
-        "object.defaults": "^1.1.0",
-        "object.pick": "^1.2.0",
-        "parse-filepath": "^1.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "is-plain-object": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-          "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        }
+        "camelcase": "^5.3.1",
+        "map-obj": "^4.0.0",
+        "quick-lru": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "flagged-respawn": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
-      "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
-      "dev": true
+    "node_modules/can-use-dom": {
+      "version": "0.1.0",
+      "license": "MIT"
     },
-    "flat": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
-      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
-      "dev": true
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001542",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
     },
-    "flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+    "node_modules/caseless": {
+      "version": "0.12.0",
       "dev": true,
-      "requires": {
-        "flatted": "^3.1.0",
-        "rimraf": "^3.0.2"
-      }
+      "license": "Apache-2.0"
     },
-    "flatted": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
-      "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
-      "dev": true
-    },
-    "follow-redirects": {
-      "version": "1.15.2",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
-      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+    "node_modules/chai": {
+      "version": "4.3.8",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "assertion-error": "^1.1.0",
+        "check-error": "^1.0.2",
+        "deep-eql": "^4.1.2",
+        "get-func-name": "^2.0.0",
+        "loupe": "^2.3.1",
+        "pathval": "^1.1.1",
+        "type-detect": "^4.0.5"
+      },
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "for-each": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
-      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+    "node_modules/chalk": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "is-callable": "^1.1.3"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "for-in": {
+    "node_modules/char-regex": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
-      "dev": true
-    },
-    "for-own": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
-      "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==",
       "dev": true,
-      "requires": {
-        "for-in": "^1.0.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
       }
     },
-    "forever-agent": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
-      "dev": true
+    "node_modules/character-entities": {
+      "version": "1.2.4",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
     },
-    "fork-awesome": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/fork-awesome/-/fork-awesome-1.1.7.tgz",
-      "integrity": "sha512-IHI7XCSXrKfUIWslse8c/PaaVDT1oBaYge+ju40ihL2ooiQeBpTr4wvIXhgTd2NuhntlvX+M5jYHAPTzNlmv0g=="
+    "node_modules/character-entities-legacy": {
+      "version": "1.1.4",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
     },
-    "form-data": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
-      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
-      "requires": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.8",
-        "mime-types": "^2.1.12"
+    "node_modules/character-reference-invalid": {
+      "version": "1.1.4",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "form-data-encoder": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.9.0.tgz",
-      "integrity": "sha512-rahaRMkN8P8d/tgK/BLPX+WBVM27NbvdXBxqQujBtkDAIFspaRqN7Od7lfdGQA6KAD+f82fYCLBq1ipvcu8qLw=="
+    "node_modules/chardet": {
+      "version": "0.7.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "format": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
-      "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="
+    "node_modules/charenc": {
+      "version": "0.0.2",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": "*"
+      }
     },
-    "formdata-node": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
-      "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
-      "requires": {
-        "node-domexception": "1.0.0",
-        "web-streams-polyfill": "4.0.0-beta.3"
+    "node_modules/chart.js": {
+      "version": "2.9.4",
+      "license": "MIT",
+      "dependencies": {
+        "chartjs-color": "^2.1.0",
+        "moment": "^2.10.2"
       }
     },
-    "forwarded": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
-      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
-      "dev": true
+    "node_modules/chartjs-color": {
+      "version": "2.4.1",
+      "license": "MIT",
+      "dependencies": {
+        "chartjs-color-string": "^0.6.0",
+        "color-convert": "^1.9.3"
+      }
     },
-    "fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
-      "dev": true
+    "node_modules/chartjs-color-string": {
+      "version": "0.6.0",
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "^1.0.0"
+      }
     },
-    "fragment-cache": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-      "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
-      "dev": true,
-      "requires": {
-        "map-cache": "^0.2.2"
+    "node_modules/chartjs-color/node_modules/color-convert": {
+      "version": "1.9.3",
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
       }
     },
-    "fresh": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
-      "dev": true
+    "node_modules/chartjs-color/node_modules/color-name": {
+      "version": "1.1.3",
+      "license": "MIT"
     },
-    "from": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
-      "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==",
-      "dev": true
+    "node_modules/check-error": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
     },
-    "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=="
+    "node_modules/check-more-types": {
+      "version": "2.24.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "fs-extra": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
-      "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+    "node_modules/cheerio": {
+      "version": "1.0.0-rc.12",
       "dev": true,
-      "requires": {
-        "at-least-node": "^1.0.0",
-        "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "cheerio-select": "^2.1.0",
+        "dom-serializer": "^2.0.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.0.1",
+        "htmlparser2": "^8.0.1",
+        "parse5": "^7.0.0",
+        "parse5-htmlparser2-tree-adapter": "^7.0.0"
+      },
+      "engines": {
+        "node": ">= 6"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
       }
     },
-    "fs-minipass": {
+    "node_modules/cheerio-select": {
       "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
-      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
       "dev": true,
-      "requires": {
-        "minipass": "^3.0.0"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0",
+        "css-select": "^5.1.0",
+        "css-what": "^6.1.0",
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
       }
     },
-    "fs-monkey": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
-      "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
-      "dev": true
+    "node_modules/cheerio/node_modules/parse5": {
+      "version": "7.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^4.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
     },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+    "node_modules/chokidar": {
+      "version": "3.5.3",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://paulmillr.com/funding/"
+        }
+      ],
+      "license": "MIT",
+      "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"
+      }
     },
-    "fsevents": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+    "node_modules/chownr": {
+      "version": "2.0.0",
       "dev": true,
-      "optional": true
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
     },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+    "node_modules/chrome-trace-event": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0"
+      }
     },
-    "function.prototype.name": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+    "node_modules/ci-info": {
+      "version": "3.8.0",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0",
-        "functions-have-names": "^1.2.2"
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/sibiraj-s"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
-      "dev": true
+    "node_modules/cipher-base": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
     },
-    "functions-have-names": {
+    "node_modules/cjs-module-lexer": {
       "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "gauge": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
-      "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
-      "optional": true,
-      "requires": {
-        "aproba": "^1.0.3",
-        "console-control-strings": "^1.0.0",
-        "has-unicode": "^2.0.0",
-        "object-assign": "^4.1.0",
-        "signal-exit": "^3.0.0",
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1",
-        "wide-align": "^1.1.0"
-      },
+    "node_modules/cjson": {
+      "version": "0.5.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
-          "optional": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
-          "optional": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-          "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
-          "optional": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        }
+        "json-parse-helpfulerror": "^1.0.3"
+      },
+      "engines": {
+        "node": ">= 0.3.0"
       }
     },
-    "gensync": {
-      "version": "1.0.0-beta.2",
-      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
-      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
-    },
-    "get-assigned-identifiers": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz",
-      "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==",
-      "dev": true
-    },
-    "get-caller-file": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
-    },
-    "get-func-name": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
-      "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
-      "dev": true
-    },
-    "get-intrinsic": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
-      "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
-      "requires": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-proto": "^1.0.1",
-        "has-symbols": "^1.0.3"
+    "node_modules/class-utils": {
+      "version": "0.3.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "get-package-type": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
-      "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
-      "dev": true
-    },
-    "get-stdin": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz",
-      "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==",
-      "dev": true
-    },
-    "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
-    },
-    "get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+    "node_modules/class-utils/node_modules/define-property": {
+      "version": "0.2.5",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-      "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
-      "dev": true
-    },
-    "getos": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz",
-      "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==",
+    "node_modules/class-utils/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
       "dev": true,
-      "requires": {
-        "async": "^3.2.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "async": {
-          "version": "3.2.4",
-          "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
-          "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
-          "dev": true
-        }
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+    "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
       "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "gherkin": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.1.0.tgz",
-      "integrity": "sha512-axTCsxH0m0cixijLvo7s9591h5pMb8ifQxFDun5FnfFhVsUhxgdnH0H7TSK7q8I4ASUU18DJ/tmlnMegMuLUUQ==",
-      "dev": true
-    },
-    "gherkin-lint": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/gherkin-lint/-/gherkin-lint-4.2.2.tgz",
-      "integrity": "sha512-+vu0wbrwxaaEdrheU9pH2MYR6zk38u2IkrCIg6IETUw1lkrNVAfIfOCihwrrL2NTJv5Iia/C7hZEBNwjGSkL2Q==",
+    "node_modules/class-utils/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
       "dev": true,
-      "requires": {
-        "commander": "5.0.0",
-        "core-js": "3.6.4",
-        "gherkin": "9.0.0",
-        "glob": "7.1.6",
-        "lodash": "4.17.21",
-        "strip-json-comments": "3.0.1",
-        "xml-js": "^1.6.11"
-      },
+      "license": "MIT",
       "dependencies": {
-        "commander": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-5.0.0.tgz",
-          "integrity": "sha512-JrDGPAKjMGSP1G0DUoaceEJ3DZgAfr/q6X7FVk4+U5KxUSKviYGM2k6zWkfyyBHy5rAtzgYJFa1ro2O9PtoxwQ==",
-          "dev": true
-        },
-        "core-js": {
-          "version": "3.6.4",
-          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz",
-          "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==",
-          "dev": true
-        },
-        "gherkin": {
-          "version": "9.0.0",
-          "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-9.0.0.tgz",
-          "integrity": "sha512-6xoAepoxo5vhkBXjB4RCfVnSKHu5z9SqXIQVUyj+Jw8BQX8odATlee5otXgdN8llZvyvHokuvNiBeB3naEnnIQ==",
-          "dev": true,
-          "requires": {
-            "commander": "^4.0.1",
-            "cucumber-messages": "8.0.0",
-            "source-map-support": "^0.5.16"
-          },
-          "dependencies": {
-            "commander": {
-              "version": "4.1.1",
-              "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
-              "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
-              "dev": true
-            }
-          }
-        },
-        "glob": {
-          "version": "7.1.6",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
-          "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-          "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"
-          }
-        },
-        "strip-json-comments": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
-          "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
-          "dev": true
-        }
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "github-from-package": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
-      "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
-      "optional": true
+    "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "glob": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
-      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
-      "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"
+    "node_modules/class-utils/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+    "node_modules/class-utils/node_modules/kind-of": {
+      "version": "5.1.0",
       "dev": true,
-      "requires": {
-        "is-glob": "^4.0.3"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "glob-to-regexp": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-      "dev": true
+    "node_modules/classnames": {
+      "version": "2.3.2",
+      "license": "MIT"
     },
-    "global-dirs": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
-      "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==",
+    "node_modules/clean-stack": {
+      "version": "2.2.0",
       "dev": true,
-      "requires": {
-        "ini": "2.0.0"
-      },
-      "dependencies": {
-        "ini": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
-          "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==",
-          "dev": true
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "global-modules": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
-      "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+    "node_modules/cli-cursor": {
+      "version": "3.1.0",
       "dev": true,
-      "requires": {
-        "global-prefix": "^1.0.1",
-        "is-windows": "^1.0.1",
-        "resolve-dir": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "restore-cursor": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "global-prefix": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
-      "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
+    "node_modules/cli-spinners": {
+      "version": "2.9.1",
       "dev": true,
-      "requires": {
-        "expand-tilde": "^2.0.2",
-        "homedir-polyfill": "^1.0.1",
-        "ini": "^1.3.4",
-        "is-windows": "^1.0.1",
-        "which": "^1.2.14"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       },
-      "dependencies": {
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+    "node_modules/cli-table": {
+      "version": "0.3.11",
+      "dev": true,
+      "dependencies": {
+        "colors": "1.0.3"
+      },
+      "engines": {
+        "node": ">= 0.2.0"
+      }
     },
-    "globalthis": {
+    "node_modules/cli-table/node_modules/colors": {
       "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
-      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
       "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.1.90"
       }
     },
-    "globby": {
-      "version": "12.2.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz",
-      "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==",
+    "node_modules/cli-table3": {
+      "version": "0.6.3",
       "dev": true,
-      "requires": {
-        "array-union": "^3.0.1",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.7",
-        "ignore": "^5.1.9",
-        "merge2": "^1.4.1",
-        "slash": "^4.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "string-width": "^4.2.0"
+      },
+      "engines": {
+        "node": "10.* || >= 12.*"
+      },
+      "optionalDependencies": {
+        "@colors/colors": "1.5.0"
       }
     },
-    "globjoin": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz",
-      "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
-      "dev": true
-    },
-    "gonzales-pe": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
-      "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
+    "node_modules/cli-truncate": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "minimist": "^1.2.5"
+      "license": "MIT",
+      "dependencies": {
+        "slice-ansi": "^3.0.0",
+        "string-width": "^4.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "gopd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+    "node_modules/cli-width": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "get-intrinsic": "^1.1.3"
+      "license": "ISC",
+      "engines": {
+        "node": ">= 10"
       }
     },
-    "graceful-fs": {
-      "version": "4.2.11",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-      "dev": true
+    "node_modules/cliui": {
+      "version": "8.0.1",
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "handle-thing": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
-      "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
-      "dev": true
+    "node_modules/clone": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8"
+      }
     },
-    "handlebars": {
-      "version": "4.7.7",
-      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
-      "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+    "node_modules/clone-deep": {
+      "version": "4.0.1",
       "dev": true,
-      "requires": {
-        "minimist": "^1.2.5",
-        "neo-async": "^2.6.0",
-        "source-map": "^0.6.1",
-        "uglify-js": "^3.1.4",
-        "wordwrap": "^1.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.2",
+        "shallow-clone": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
-      "dev": true
-    },
-    "har-validator": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
-      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+    "node_modules/clone-regexp": {
+      "version": "2.2.0",
       "dev": true,
-      "requires": {
-        "ajv": "^6.12.3",
-        "har-schema": "^2.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ajv": {
-          "version": "6.12.6",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        }
+        "is-regexp": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "hard-rejection": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
-      "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==",
-      "dev": true
-    },
-    "harmony-reflect": {
-      "version": "1.6.2",
-      "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz",
-      "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==",
-      "dev": true
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "requires": {
-        "function-bind": "^1.1.1"
+    "node_modules/co": {
+      "version": "4.6.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "iojs": ">= 1.0.0",
+        "node": ">= 0.12.0"
       }
     },
-    "has-bigints": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
-      "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-      "dev": true
-    },
-    "has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+    "node_modules/code-block-writer": {
+      "version": "11.0.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+    "node_modules/code-point-at": {
+      "version": "1.1.0",
       "dev": true,
-      "requires": {
-        "get-intrinsic": "^1.1.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "has-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
-      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
-    },
-    "has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
-    },
-    "has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+    "node_modules/coffeeify": {
+      "version": "3.0.1",
       "dev": true,
-      "requires": {
-        "has-symbols": "^1.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "convert-source-map": "^1.3.0",
+        "through2": "^2.0.0"
+      },
+      "peerDependencies": {
+        "coffeescript": ">1.9.2 <3"
       }
     },
-    "has-unicode": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-      "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
-    },
-    "has-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-      "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
+    "node_modules/coffeescript": {
+      "version": "1.12.7",
       "dev": true,
-      "requires": {
-        "get-value": "^2.0.6",
-        "has-values": "^1.0.0",
-        "isobject": "^3.0.0"
+      "license": "MIT",
+      "bin": {
+        "cake": "bin/cake",
+        "coffee": "bin/coffee"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "has-values": {
+    "node_modules/collect-v8-coverage": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/collection-visit": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-      "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
       "dev": true,
-      "requires": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "is-number": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-          "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "3.2.2",
-              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-              "dev": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "kind-of": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-          "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "hash-base": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
-      "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.6.0",
-        "safe-buffer": "^5.2.0"
-      },
+    "node_modules/color-convert": {
+      "version": "2.0.1",
+      "license": "MIT",
       "dependencies": {
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
       }
     },
-    "hash.js": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
-      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "license": "MIT"
+    },
+    "node_modules/color-support": {
+      "version": "1.1.3",
       "dev": true,
-      "requires": {
-        "inherits": "^2.0.3",
-        "minimalistic-assert": "^1.0.1"
+      "license": "ISC",
+      "bin": {
+        "color-support": "bin.js"
       }
     },
-    "hast-util-parse-selector": {
-      "version": "2.2.5",
-      "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
-      "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ=="
+    "node_modules/colorette": {
+      "version": "2.0.20",
+      "dev": true,
+      "license": "MIT"
     },
-    "hastscript": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
-      "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
-      "requires": {
-        "@types/hast": "^2.0.0",
-        "comma-separated-tokens": "^1.0.0",
-        "hast-util-parse-selector": "^2.0.0",
-        "property-information": "^5.0.0",
-        "space-separated-tokens": "^1.0.0"
+    "node_modules/colors": {
+      "version": "1.4.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.1.90"
       }
     },
-    "hdr-histogram-js": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz",
-      "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==",
+    "node_modules/combine-source-map": {
+      "version": "0.8.0",
       "dev": true,
-      "requires": {
-        "@assemblyscript/loader": "^0.10.1",
-        "base64-js": "^1.2.0",
-        "pako": "^1.0.3"
+      "license": "MIT",
+      "dependencies": {
+        "convert-source-map": "~1.1.0",
+        "inline-source-map": "~0.6.0",
+        "lodash.memoize": "~3.0.3",
+        "source-map": "~0.5.3"
       }
     },
-    "hdr-histogram-percentiles-obj": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz",
-      "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==",
-      "dev": true
-    },
-    "he": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
-      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
-      "dev": true
-    },
-    "highlight.js": {
-      "version": "10.7.3",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
-      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="
+    "node_modules/combine-source-map/node_modules/convert-source-map": {
+      "version": "1.1.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "hmac-drbg": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
-      "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+    "node_modules/combine-source-map/node_modules/source-map": {
+      "version": "0.5.7",
       "dev": true,
-      "requires": {
-        "hash.js": "^1.0.3",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.1"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "hoist-non-react-statics": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
-      "requires": {
-        "react-is": "^16.7.0"
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "license": "MIT",
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "homedir-polyfill": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
-      "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
-      "dev": true,
-      "requires": {
-        "parse-passwd": "^1.0.0"
+    "node_modules/comma-separated-tokens": {
+      "version": "1.0.8",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "hosted-git-info": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
-      "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+    "node_modules/commander": {
+      "version": "8.3.0",
       "dev": true,
-      "requires": {
-        "lru-cache": "^6.0.0"
-      },
-      "dependencies": {
-        "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"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">= 12"
       }
     },
-    "hpack.js": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
-      "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
+    "node_modules/common-tags": {
+      "version": "1.8.2",
       "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "obuf": "^1.0.0",
-        "readable-stream": "^2.0.1",
-        "wbuf": "^1.1.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0.0"
       }
     },
-    "html-encoding-sniffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
-      "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+    "node_modules/commondir": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "whatwg-encoding": "^1.0.1"
-      }
-    },
-    "html-entities": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz",
-      "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==",
-      "dev": true
-    },
-    "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
+      "license": "MIT"
     },
-    "html-linter": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/html-linter/-/html-linter-1.1.1.tgz",
-      "integrity": "sha512-DJfLevdq+YmY4R7yMdD0zaCAJOvWihg+eCe5o/jeTw86grvgmvSCIwBv1mDi+UdeJP9mDoi5rB6KtcFOn8StrA==",
+    "node_modules/component-emitter": {
+      "version": "1.3.0",
       "dev": true,
-      "requires": {
-        "chalk": "^2.4.1",
-        "commander": "^2.12.2",
-        "glob": "^7.1.2"
-      }
-    },
-    "html-tags": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz",
-      "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==",
-      "dev": true
-    },
-    "htmlescape": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz",
-      "integrity": "sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==",
-      "dev": true
+      "license": "MIT"
     },
-    "htmllint": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/htmllint/-/htmllint-0.7.3.tgz",
-      "integrity": "sha512-h8wfCu0CC0FVo18Jkygv7xqj0fa23Xlv4QsR2n34LDr8eqpf4glfbNg1HTbiCqpT3ONioMOfk8EkFUbZgrO1KA==",
+    "node_modules/compressible": {
+      "version": "2.0.18",
       "dev": true,
-      "requires": {
-        "bulk-require": "^1.0.1",
-        "htmlparser2": "^3.10.0",
-        "lodash": "^4.17.11",
-        "promise": "^8.0.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "dom-serializer": {
-          "version": "0.2.2",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
-          "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.0.1",
-            "entities": "^2.0.0"
-          },
-          "dependencies": {
-            "domelementtype": {
-              "version": "2.3.0",
-              "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
-              "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
-              "dev": true
-            },
-            "entities": {
-              "version": "2.2.0",
-              "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
-              "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
-              "dev": true
-            }
-          }
-        },
-        "domelementtype": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
-          "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
-          "dev": true
-        },
-        "domhandler": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
-          "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "1"
-          }
-        },
-        "domutils": {
-          "version": "1.7.0",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
-          "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
-          "dev": true,
-          "requires": {
-            "dom-serializer": "0",
-            "domelementtype": "1"
-          }
-        },
-        "entities": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-          "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
-          "dev": true
-        },
-        "htmlparser2": {
-          "version": "3.10.1",
-          "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
-          "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^1.3.1",
-            "domhandler": "^2.3.0",
-            "domutils": "^1.5.1",
-            "entities": "^1.1.1",
-            "inherits": "^2.0.1",
-            "readable-stream": "^3.1.1"
-          }
-        },
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
+        "mime-db": ">= 1.43.0 < 2"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "htmllint-cli": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/htmllint-cli/-/htmllint-cli-0.0.7.tgz",
-      "integrity": "sha512-JREMzimj1HGrOUcA/FMMweLpHD5YRD1E5RnzXa4dj5m1zQ+6YYLklAGdaTar+qAGaj1Jasb3mGhH6FuKuLGWAQ==",
+    "node_modules/compression": {
+      "version": "1.7.4",
       "dev": true,
-      "requires": {
-        "bluebird": "^3.5.1",
-        "chalk": "^2.4.0",
-        "cjson": "^0.5.0",
-        "glob": "^7.1.2",
-        "htmllint": "^0.7.2",
-        "liftoff": "^2.5.0",
-        "semver": "^5.5.0",
-        "yargs": "^11.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ansi-regex": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
-          "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
-          "dev": true
-        },
-        "camelcase": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
-          "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==",
-          "dev": true
-        },
-        "cliui": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
-          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
-          "dev": true,
-          "requires": {
-            "string-width": "^2.1.1",
-            "strip-ansi": "^4.0.0",
-            "wrap-ansi": "^2.0.0"
-          }
-        },
-        "find-up": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-          "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^2.0.0"
-          }
-        },
-        "get-caller-file": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
-          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
-          "dev": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-          "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
-          "dev": true
-        },
-        "locate-path": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-          "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^2.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-          "dev": true,
-          "requires": {
-            "p-try": "^1.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-          "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^1.1.0"
-          }
-        },
-        "p-try": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-          "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
-          "dev": true
-        },
-        "path-exists": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-          "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
-          "dev": true
-        },
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
-          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
-          "dev": true,
-          "requires": {
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^4.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
-          "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        },
-        "wrap-ansi": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
-          "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1"
-          },
-          "dependencies": {
-            "ansi-regex": {
-              "version": "2.1.1",
-              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-              "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
-              "dev": true
-            },
-            "is-fullwidth-code-point": {
-              "version": "1.0.0",
-              "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-              "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
-              "dev": true,
-              "requires": {
-                "number-is-nan": "^1.0.0"
-              }
-            },
-            "string-width": {
-              "version": "1.0.2",
-              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-              "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
-              "dev": true,
-              "requires": {
-                "code-point-at": "^1.0.0",
-                "is-fullwidth-code-point": "^1.0.0",
-                "strip-ansi": "^3.0.0"
-              }
-            },
-            "strip-ansi": {
-              "version": "3.0.1",
-              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-              "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
-              "dev": true,
-              "requires": {
-                "ansi-regex": "^2.0.0"
-              }
-            }
-          }
-        },
-        "y18n": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
-          "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz",
-          "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==",
-          "dev": true,
-          "requires": {
-            "cliui": "^4.0.0",
-            "decamelize": "^1.1.1",
-            "find-up": "^2.1.0",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^3.1.0",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
-            "set-blocking": "^2.0.0",
-            "string-width": "^2.0.0",
-            "which-module": "^2.0.0",
-            "y18n": "^3.2.1",
-            "yargs-parser": "^9.0.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "9.0.2",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
-          "integrity": "sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw==",
-          "dev": true,
-          "requires": {
-            "camelcase": "^4.1.0"
-          }
-        }
+        "accepts": "~1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "~2.0.16",
+        "debug": "2.6.9",
+        "on-headers": "~1.0.2",
+        "safe-buffer": "5.1.2",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "htmlparser2": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
-      "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
+    "node_modules/compression/node_modules/bytes": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "domelementtype": "^2.3.0",
-        "domhandler": "^5.0.3",
-        "domutils": "^3.0.1",
-        "entities": "^4.4.0"
-      },
-      "dependencies": {
-        "dom-serializer": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
-          "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.3.0",
-            "domhandler": "^5.0.2",
-            "entities": "^4.2.0"
-          }
-        },
-        "domhandler": {
-          "version": "5.0.3",
-          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
-          "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.3.0"
-          }
-        },
-        "domutils": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
-          "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
-          "dev": true,
-          "requires": {
-            "dom-serializer": "^2.0.0",
-            "domelementtype": "^2.3.0",
-            "domhandler": "^5.0.3"
-          }
-        },
-        "entities": {
-          "version": "4.5.0",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-          "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-          "dev": true
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "http-auth": {
-      "version": "4.1.9",
-      "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-4.1.9.tgz",
-      "integrity": "sha512-kvPYxNGc9EKGTXvOMnTBQw2RZfuiSihK/mLw/a4pbtRueTE45S55Lw/3k5CktIf7Ak0veMKEIteDj4YkNmCzmQ==",
+    "node_modules/compression/node_modules/debug": {
+      "version": "2.6.9",
       "dev": true,
-      "requires": {
-        "apache-crypt": "^1.1.2",
-        "apache-md5": "^1.0.6",
-        "bcryptjs": "^2.4.3",
-        "uuid": "^8.3.2"
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
       }
     },
-    "http-auth-connect": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/http-auth-connect/-/http-auth-connect-1.0.6.tgz",
-      "integrity": "sha512-yaO0QSCPqGCjPrl3qEEHjJP+lwZ6gMpXLuCBE06eWwcXomkI5TARtu0kxf9teFuBj6iaV3Ybr15jaWUvbzNzHw==",
-      "dev": true
+    "node_modules/compression/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "http-cache-semantics": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
-      "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
-      "dev": true
+    "node_modules/compression/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "http-deceiver": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
-      "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
-      "dev": true
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "http-errors": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
-      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+    "node_modules/concat-stream": {
+      "version": "1.6.2",
       "dev": true,
-      "requires": {
-        "depd": "2.0.0",
-        "inherits": "2.0.4",
-        "setprototypeof": "1.2.0",
-        "statuses": "2.0.1",
-        "toidentifier": "1.0.1"
+      "engines": [
+        "node >= 0.8"
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
       }
     },
-    "http-parser-js": {
-      "version": "0.5.8",
-      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
-      "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
-      "dev": true
-    },
-    "http-proxy": {
-      "version": "1.18.1",
-      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
-      "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
+    "node_modules/connect": {
+      "version": "3.7.0",
       "dev": true,
-      "requires": {
-        "eventemitter3": "^4.0.0",
-        "follow-redirects": "^1.0.0",
-        "requires-port": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "finalhandler": "1.1.2",
+        "parseurl": "~1.3.3",
+        "utils-merge": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
       }
     },
-    "http-proxy-agent": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
-      "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+    "node_modules/connect-history-api-fallback": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "@tootallnate/once": "1",
-        "agent-base": "6",
-        "debug": "4"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8"
       }
     },
-    "http-proxy-middleware": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
-      "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+    "node_modules/connect/node_modules/debug": {
+      "version": "2.6.9",
       "dev": true,
-      "requires": {
-        "@types/http-proxy": "^1.17.8",
-        "http-proxy": "^1.18.1",
-        "is-glob": "^4.0.1",
-        "is-plain-obj": "^3.0.0",
-        "micromatch": "^4.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
       }
     },
-    "http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
-      "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+    "node_modules/connect/node_modules/ms": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "jsprim": "^1.2.2",
-        "sshpk": "^1.7.0"
-      }
+      "license": "MIT"
     },
-    "https-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
-      "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
+    "node_modules/console-browserify": {
+      "version": "1.2.0",
       "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==",
+    "node_modules/console-control-strings": {
+      "version": "1.1.0",
       "dev": true,
-      "requires": {
-        "agent-base": "6",
-        "debug": "4"
-      }
+      "license": "ISC"
     },
-    "human-signals": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-      "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-      "dev": true
+    "node_modules/constants-browserify": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "humanize-ms": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
-      "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+    "node_modules/content-disposition": {
+      "version": "0.5.3",
       "dev": true,
-      "requires": {
-        "ms": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "5.1.2"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "i18next": {
-      "version": "21.10.0",
-      "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.10.0.tgz",
-      "integrity": "sha512-YeuIBmFsGjUfO3qBmMOc0rQaun4mIpGKET5WDwvu8lU7gvwpcariZLNtL0Fzj+zazcHUrlXHiptcFhBMFaxzfg==",
+    "node_modules/content-disposition/node_modules/safe-buffer": {
+      "version": "5.1.2",
       "dev": true,
-      "requires": {
-        "@babel/runtime": "^7.17.2"
-      }
+      "license": "MIT"
     },
-    "iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
-      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+    "node_modules/content-type": {
+      "version": "1.0.5",
       "dev": true,
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "icss-utils": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
-      "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
-      "dev": true
+    "node_modules/convert-source-map": {
+      "version": "1.9.0",
+      "license": "MIT"
     },
-    "identity-obj-proxy": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
-      "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==",
+    "node_modules/cookie": {
+      "version": "0.4.0",
       "dev": true,
-      "requires": {
-        "harmony-reflect": "^1.4.6"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "ieee754": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
-    },
-    "ignore": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
-      "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
-      "dev": true
+    "node_modules/cookie-signature": {
+      "version": "1.0.6",
+      "dev": true,
+      "license": "MIT"
     },
-    "ignore-walk": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-4.0.1.tgz",
-      "integrity": "sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==",
+    "node_modules/copy-anything": {
+      "version": "2.0.6",
       "dev": true,
-      "requires": {
-        "minimatch": "^3.0.4"
+      "license": "MIT",
+      "dependencies": {
+        "is-what": "^3.14.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mesqueeb"
       }
     },
-    "image-size": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
-      "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==",
+    "node_modules/copy-descriptor": {
+      "version": "0.1.1",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "immutable": {
-      "version": "3.8.2",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
-      "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg=="
+    "node_modules/copy-to-clipboard": {
+      "version": "3.3.3",
+      "license": "MIT",
+      "dependencies": {
+        "toggle-selection": "^1.0.6"
+      }
     },
-    "import-fresh": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+    "node_modules/copy-webpack-plugin": {
+      "version": "11.0.0",
       "dev": true,
-      "requires": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "resolve-from": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-          "dev": true
-        }
+        "fast-glob": "^3.2.11",
+        "glob-parent": "^6.0.1",
+        "globby": "^13.1.1",
+        "normalize-path": "^3.0.0",
+        "schema-utils": "^4.0.0",
+        "serialize-javascript": "^6.0.0"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.1.0"
       }
     },
-    "import-lazy": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz",
-      "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==",
-      "dev": true
+    "node_modules/copy-webpack-plugin/node_modules/glob-parent": {
+      "version": "6.0.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
     },
-    "import-local": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
-      "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
+    "node_modules/copy-webpack-plugin/node_modules/globby": {
+      "version": "13.2.2",
       "dev": true,
-      "requires": {
-        "pkg-dir": "^4.2.0",
-        "resolve-cwd": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.3.0",
+        "ignore": "^5.2.4",
+        "merge2": "^1.4.1",
+        "slash": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-      "dev": true
+    "node_modules/copy-webpack-plugin/node_modules/ignore": {
+      "version": "5.2.4",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
+      }
     },
-    "indent-string": {
+    "node_modules/copy-webpack-plugin/node_modules/slash": {
       "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
-      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
-      "dev": true
-    },
-    "infer-owner": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
-      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
-      "dev": true
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-    },
-    "ini": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
-      "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+    "node_modules/core-js": {
+      "version": "2.6.12",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT"
     },
-    "inline-source-map": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz",
-      "integrity": "sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==",
+    "node_modules/core-js-compat": {
+      "version": "3.32.2",
       "dev": true,
-      "requires": {
-        "source-map": "~0.5.3"
-      },
+      "license": "MIT",
       "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
-          "dev": true
-        }
+        "browserslist": "^4.21.10"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
       }
     },
-    "inquirer": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz",
-      "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==",
+    "node_modules/core-js-pure": {
+      "version": "3.32.2",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/core-util-is": {
+      "version": "1.0.3",
       "dev": true,
-      "requires": {
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.1.1",
-        "cli-cursor": "^3.1.0",
-        "cli-width": "^3.0.0",
-        "external-editor": "^3.0.3",
-        "figures": "^3.0.0",
-        "lodash": "^4.17.21",
-        "mute-stream": "0.0.8",
-        "ora": "^5.4.1",
-        "run-async": "^2.4.0",
-        "rxjs": "^7.2.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "through": "^2.3.6"
-      },
-      "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "rxjs": {
-          "version": "7.8.1",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
-          "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
-          "dev": true,
-          "requires": {
-            "tslib": "^2.1.0"
-          }
-        },
-        "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"
-          }
-        }
-      }
+      "license": "MIT"
     },
-    "insert-module-globals": {
-      "version": "7.2.1",
-      "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz",
-      "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==",
+    "node_modules/cors": {
+      "version": "2.8.5",
+      "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
       "dev": true,
-      "requires": {
-        "JSONStream": "^1.0.3",
-        "acorn-node": "^1.5.2",
-        "combine-source-map": "^0.8.0",
-        "concat-stream": "^1.6.1",
-        "is-buffer": "^1.1.0",
-        "path-is-absolute": "^1.0.1",
-        "process": "~0.11.0",
-        "through2": "^2.0.0",
-        "undeclared-identifiers": "^1.1.2",
-        "xtend": "^4.0.0"
+      "dependencies": {
+        "object-assign": "^4",
+        "vary": "^1"
+      },
+      "engines": {
+        "node": ">= 0.10"
       }
     },
-    "inside": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz",
-      "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==",
-      "dev": true
-    },
-    "internal-slot": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
-      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+    "node_modules/cosmiconfig": {
+      "version": "6.0.0",
       "dev": true,
-      "requires": {
-        "get-intrinsic": "^1.2.0",
-        "has": "^1.0.3",
-        "side-channel": "^1.0.4"
+      "license": "MIT",
+      "dependencies": {
+        "@types/parse-json": "^4.0.0",
+        "import-fresh": "^3.1.0",
+        "parse-json": "^5.0.0",
+        "path-type": "^4.0.0",
+        "yaml": "^1.7.2"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
-      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
-      "requires": {
-        "loose-envify": "^1.0.0"
+    "node_modules/create-ecdh": {
+      "version": "4.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.5.3"
       }
     },
-    "invert-kv": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
-      "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
-      "dev": true
-    },
-    "ip": {
-      "version": "1.1.8",
-      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
-      "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
-      "dev": true
-    },
-    "ip-regex": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
-      "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==",
-      "dev": true
-    },
-    "ipaddr.js": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
-      "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
-      "dev": true
+    "node_modules/create-ecdh/node_modules/bn.js": {
+      "version": "4.12.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "is-absolute": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
-      "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+    "node_modules/create-hash": {
+      "version": "1.2.0",
       "dev": true,
-      "requires": {
-        "is-relative": "^1.0.0",
-        "is-windows": "^1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
       }
     },
-    "is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+    "node_modules/create-hmac": {
+      "version": "1.1.7",
       "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
       }
     },
-    "is-alphabetical": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
-      "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="
-    },
-    "is-alphanumerical": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
-      "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
-      "requires": {
-        "is-alphabetical": "^1.0.0",
-        "is-decimal": "^1.0.0"
+    "node_modules/create-jest": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "chalk": "^4.0.0",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.9",
+        "jest-config": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "prompts": "^2.0.1"
+      },
+      "bin": {
+        "create-jest": "bin/create-jest.js"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "is-arguments": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
-      "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+    "node_modules/create-jest/node_modules/@jest/schemas": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "is-array-buffer": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
-      "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+    "node_modules/create-jest/node_modules/@jest/types": {
+      "version": "29.6.3",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.2.0",
-        "is-typed-array": "^1.1.10"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
-      "dev": true
+    "node_modules/create-jest/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
     },
-    "is-bigint": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+    "node_modules/create-jest/node_modules/chalk": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "has-bigints": "^1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "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==",
+    "node_modules/create-jest/node_modules/jest-util": {
+      "version": "29.7.0",
       "dev": true,
-      "requires": {
-        "binary-extensions": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "is-boolean-object": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+    "node_modules/critters": {
+      "version": "0.0.16",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "chalk": "^4.1.0",
+        "css-select": "^4.2.0",
+        "parse5": "^6.0.1",
+        "parse5-htmlparser2-tree-adapter": "^6.0.1",
+        "postcss": "^8.3.7",
+        "pretty-bytes": "^5.3.0"
       }
     },
-    "is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true
-    },
-    "is-callable": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-      "dev": true
-    },
-    "is-ci": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz",
-      "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==",
+    "node_modules/critters/node_modules/chalk": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "ci-info": "^3.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "is-core-module": {
-      "version": "2.12.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
-      "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+    "node_modules/critters/node_modules/css-select": {
+      "version": "4.3.0",
       "dev": true,
-      "requires": {
-        "has": "^1.0.3"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0",
+        "css-what": "^6.0.1",
+        "domhandler": "^4.3.1",
+        "domutils": "^2.8.0",
+        "nth-check": "^2.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
       }
     },
-    "is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+    "node_modules/critters/node_modules/dom-serializer": {
+      "version": "1.4.1",
       "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "domelementtype": "^2.0.1",
+        "domhandler": "^4.2.0",
+        "entities": "^2.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
       }
     },
-    "is-date-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+    "node_modules/critters/node_modules/domhandler": {
+      "version": "4.3.1",
       "dev": true,
-      "requires": {
-        "has-tostringtag": "^1.0.0"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "domelementtype": "^2.2.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domhandler?sponsor=1"
       }
     },
-    "is-decimal": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
-      "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw=="
-    },
-    "is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+    "node_modules/critters/node_modules/domutils": {
+      "version": "2.8.0",
       "dev": true,
-      "requires": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
-      },
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "kind-of": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-          "dev": true
-        }
+        "dom-serializer": "^1.0.1",
+        "domelementtype": "^2.2.0",
+        "domhandler": "^4.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domutils?sponsor=1"
       }
     },
-    "is-directory": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
-      "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==",
-      "dev": true
-    },
-    "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-dom": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz",
-      "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==",
-      "requires": {
-        "is-object": "^1.0.1",
-        "is-window": "^1.0.2"
+    "node_modules/critters/node_modules/entities": {
+      "version": "2.2.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
       }
     },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
-      "dev": true
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "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=="
-    },
-    "is-generator": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz",
-      "integrity": "sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==",
-      "dev": true
-    },
-    "is-generator-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
-      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
-      "dev": true
+    "node_modules/critters/node_modules/parse5": {
+      "version": "6.0.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "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==",
+    "node_modules/critters/node_modules/parse5-htmlparser2-tree-adapter": {
+      "version": "6.0.1",
       "dev": true,
-      "requires": {
-        "has-tostringtag": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "parse5": "^6.0.1"
       }
     },
-    "is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+    "node_modules/cross-spawn": {
+      "version": "7.0.3",
       "dev": true,
-      "requires": {
-        "is-extglob": "^2.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "is-hexadecimal": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
-      "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="
-    },
-    "is-installed-globally": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz",
-      "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==",
+    "node_modules/crypt": {
+      "version": "0.0.2",
       "dev": true,
-      "requires": {
-        "global-dirs": "^3.0.0",
-        "is-path-inside": "^3.0.2"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": "*"
       }
     },
-    "is-interactive": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
-      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
-      "dev": true
-    },
-    "is-lambda": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
-      "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
-      "dev": true
-    },
-    "is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-      "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-number-object": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+    "node_modules/crypto-browserify": {
+      "version": "3.12.0",
       "dev": true,
-      "requires": {
-        "has-tostringtag": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "is-object": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
-      "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA=="
-    },
-    "is-path-cwd": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
-      "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
-      "dev": true
-    },
-    "is-path-inside": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
-      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
-      "dev": true
-    },
-    "is-plain-obj": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
-      "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
-      "dev": true
-    },
-    "is-plain-object": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
-      "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q=="
-    },
-    "is-potential-custom-element-name": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
-      "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
-      "dev": true
-    },
-    "is-regex": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+    "node_modules/crypto-js": {
+      "version": "4.1.1",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      }
+      "license": "MIT"
     },
-    "is-regexp": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz",
-      "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
-      "dev": true
-    },
-    "is-relative": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
-      "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+    "node_modules/css-loader": {
+      "version": "6.7.3",
       "dev": true,
-      "requires": {
-        "is-unc-path": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "icss-utils": "^5.1.0",
+        "postcss": "^8.4.19",
+        "postcss-modules-extract-imports": "^3.0.0",
+        "postcss-modules-local-by-default": "^4.0.0",
+        "postcss-modules-scope": "^3.0.0",
+        "postcss-modules-values": "^4.0.0",
+        "postcss-value-parser": "^4.2.0",
+        "semver": "^7.3.8"
+      },
+      "engines": {
+        "node": ">= 12.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.0.0"
       }
     },
-    "is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+    "node_modules/css-loader/node_modules/postcss-value-parser": {
+      "version": "4.2.0",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2"
-      }
-    },
-    "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
+      "license": "MIT"
     },
-    "is-string": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+    "node_modules/css-select": {
+      "version": "5.1.0",
       "dev": true,
-      "requires": {
-        "has-tostringtag": "^1.0.0"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0",
+        "css-what": "^6.1.0",
+        "domhandler": "^5.0.2",
+        "domutils": "^3.0.1",
+        "nth-check": "^2.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
       }
     },
-    "is-symbol": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+    "node_modules/css-tree": {
+      "version": "1.0.0-alpha.39",
       "dev": true,
-      "requires": {
-        "has-symbols": "^1.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "mdn-data": "2.0.6",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
       }
     },
-    "is-typed-array": {
-      "version": "1.1.10",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
-      "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+    "node_modules/css-tree/node_modules/source-map": {
+      "version": "0.6.1",
       "dev": true,
-      "requires": {
-        "available-typed-arrays": "^1.0.5",
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
-      "dev": true
-    },
-    "is-unc-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
-      "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+    "node_modules/css-what": {
+      "version": "6.1.0",
       "dev": true,
-      "requires": {
-        "unc-path-regex": "^0.1.2"
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">= 6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
       }
     },
-    "is-unicode-supported": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
-      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
-      "dev": true
+    "node_modules/css.escape": {
+      "version": "1.5.1",
+      "license": "MIT"
     },
-    "is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+    "node_modules/cssesc": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2"
+      "license": "MIT",
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "is-what": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
-      "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
-      "dev": true
-    },
-    "is-window": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz",
-      "integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg=="
-    },
-    "is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
-      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
-      "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==",
+    "node_modules/cssfontparser": {
+      "version": "1.2.1",
       "dev": true,
-      "requires": {
-        "is-docker": "^2.0.0"
-      }
-    },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true
+      "license": "MIT"
     },
-    "isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
-      "dev": true
+    "node_modules/cssom": {
+      "version": "0.4.4",
+      "dev": true,
+      "license": "MIT"
     },
-    "isomorphic-form-data": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isomorphic-form-data/-/isomorphic-form-data-2.0.0.tgz",
-      "integrity": "sha512-TYgVnXWeESVmQSg4GLVbalmQ+B4NPi/H4eWxqALKj63KsUrcu301YDjBqaOw3h+cbak7Na4Xyps3BiptHtxTfg==",
+    "node_modules/cssstyle": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "form-data": "^2.3.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "form-data": {
-          "version": "2.5.1",
-          "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
-          "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
-          "dev": true,
-          "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.6",
-            "mime-types": "^2.1.12"
-          }
-        }
+        "cssom": "~0.3.6"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
-      "dev": true
+    "node_modules/cssstyle/node_modules/cssom": {
+      "version": "0.3.8",
+      "dev": true,
+      "license": "MIT"
     },
-    "istanbul-lib-coverage": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
-      "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
-      "dev": true
+    "node_modules/csstype": {
+      "version": "3.1.2",
+      "license": "MIT"
     },
-    "istanbul-lib-instrument": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
-      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
+    "node_modules/cucumber": {
+      "version": "4.2.1",
       "dev": true,
-      "requires": {
-        "@babel/core": "^7.12.3",
-        "@babel/parser": "^7.14.7",
-        "@istanbuljs/schema": "^0.1.2",
-        "istanbul-lib-coverage": "^3.2.0",
-        "semver": "^6.3.0"
+      "license": "MIT",
+      "dependencies": {
+        "assertion-error-formatter": "^2.0.1",
+        "babel-runtime": "^6.11.6",
+        "bluebird": "^3.4.1",
+        "cli-table": "^0.3.1",
+        "colors": "^1.1.2",
+        "commander": "^2.9.0",
+        "cucumber-expressions": "^5.0.13",
+        "cucumber-tag-expressions": "^1.1.1",
+        "duration": "^0.2.0",
+        "escape-string-regexp": "^1.0.5",
+        "figures": "2.0.0",
+        "gherkin": "^5.0.0",
+        "glob": "^7.0.0",
+        "indent-string": "^3.1.0",
+        "is-generator": "^1.0.2",
+        "is-stream": "^1.1.0",
+        "knuth-shuffle-seeded": "^1.0.6",
+        "lodash": "^4.17.4",
+        "mz": "^2.4.0",
+        "progress": "^2.0.0",
+        "resolve": "^1.3.3",
+        "serialize-error": "^2.1.0",
+        "stack-chain": "^2.0.0",
+        "stacktrace-js": "^2.0.0",
+        "string-argv": "0.0.2",
+        "title-case": "^2.1.1",
+        "util-arity": "^1.0.2",
+        "verror": "^1.9.0"
+      },
+      "bin": {
+        "cucumber-js": "bin/cucumber-js"
+      },
+      "engines": {
+        "node": ">=0.10"
       }
     },
-    "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==",
+    "node_modules/cucumber-expressions": {
+      "version": "6.6.2",
       "dev": true,
-      "requires": {
-        "istanbul-lib-coverage": "^3.0.0",
-        "make-dir": "^3.0.0",
-        "supports-color": "^7.1.0"
-      },
+      "license": "MIT",
       "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"
-          }
-        }
+        "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.2.0"
       }
     },
-    "istanbul-lib-source-maps": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
-      "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+    "node_modules/cucumber-messages": {
+      "version": "8.0.0",
       "dev": true,
-      "requires": {
-        "debug": "^4.1.1",
-        "istanbul-lib-coverage": "^3.0.0",
-        "source-map": "^0.6.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "@types/uuid": "^3.4.6",
+        "protobufjs": "^6.8.8",
+        "uuid": "^3.3.3"
       }
     },
-    "istanbul-reports": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
-      "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
+    "node_modules/cucumber-messages/node_modules/uuid": {
+      "version": "3.4.0",
       "dev": true,
-      "requires": {
-        "html-escaper": "^2.0.0",
-        "istanbul-lib-report": "^3.0.0"
+      "license": "MIT",
+      "bin": {
+        "uuid": "bin/uuid"
       }
     },
-    "jake": {
-      "version": "10.8.6",
-      "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.6.tgz",
-      "integrity": "sha512-G43Ub9IYEFfu72sua6rzooi8V8Gz2lkfk48rW20vEWCGizeaEPlKB1Kh8JIA84yQbiAEfqlPmSpGgCKKxH3rDA==",
+    "node_modules/cucumber-tag-expressions": {
+      "version": "1.1.1",
       "dev": true,
-      "requires": {
-        "async": "^3.2.3",
-        "chalk": "^4.0.2",
-        "filelist": "^1.0.4",
-        "minimatch": "^3.1.2"
-      },
-      "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"
-          }
-        },
-        "async": {
-          "version": "3.2.4",
-          "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
-          "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
-          "dev": true
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
-      }
+      "license": "MIT"
     },
-    "jest": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz",
-      "integrity": "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==",
+    "node_modules/cucumber/node_modules/commander": {
+      "version": "2.20.3",
       "dev": true,
-      "requires": {
-        "@jest/core": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "import-local": "^3.0.2",
-        "jest-cli": "^28.1.3"
-      },
+      "license": "MIT"
+    },
+    "node_modules/cucumber/node_modules/cucumber-expressions": {
+      "version": "5.0.18",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "jest-cli": {
-          "version": "28.1.3",
-          "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz",
-          "integrity": "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==",
-          "dev": true,
-          "requires": {
-            "@jest/core": "^28.1.3",
-            "@jest/test-result": "^28.1.3",
-            "@jest/types": "^28.1.3",
-            "chalk": "^4.0.0",
-            "exit": "^0.1.2",
-            "graceful-fs": "^4.2.9",
-            "import-local": "^3.0.2",
-            "jest-config": "^28.1.3",
-            "jest-util": "^28.1.3",
-            "jest-validate": "^28.1.3",
-            "prompts": "^2.0.1",
-            "yargs": "^17.3.1"
-          }
-        },
-        "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"
-          }
-        }
+        "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.2.0"
       }
     },
-    "jest-canvas-mock": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.4.0.tgz",
-      "integrity": "sha512-mmMpZzpmLzn5vepIaHk5HoH3Ka4WykbSoLuG/EKoJd0x0ID/t+INo1l8ByfcUJuDM+RIsL4QDg/gDnBbrj2/IQ==",
+    "node_modules/cucumber/node_modules/figures": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "cssfontparser": "^1.2.1",
-        "moo-color": "^1.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "escape-string-regexp": "^1.0.5"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "jest-changed-files": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz",
-      "integrity": "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==",
+    "node_modules/cucumber/node_modules/glob": {
+      "version": "7.2.3",
       "dev": true,
-      "requires": {
-        "execa": "^5.0.0",
-        "p-limit": "^3.1.0"
-      },
+      "license": "ISC",
       "dependencies": {
-        "p-limit": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-          "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-          "dev": true,
-          "requires": {
-            "yocto-queue": "^0.1.0"
-          }
-        }
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "jest-circus": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz",
-      "integrity": "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==",
+    "node_modules/cypress": {
+      "version": "12.17.4",
+      "resolved": "https://registry.npmjs.org/cypress/-/cypress-12.17.4.tgz",
+      "integrity": "sha512-gAN8Pmns9MA5eCDFSDJXWKUpaL3IDd89N9TtIupjYnzLSmlpVr+ZR+vb4U/qaMp+lB6tBvAmt7504c3Z4RU5KQ==",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^28.1.3",
-        "@jest/expect": "^28.1.3",
-        "@jest/test-result": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "co": "^4.6.0",
-        "dedent": "^0.7.0",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^28.1.3",
-        "jest-matcher-utils": "^28.1.3",
-        "jest-message-util": "^28.1.3",
-        "jest-runtime": "^28.1.3",
-        "jest-snapshot": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "p-limit": "^3.1.0",
-        "pretty-format": "^28.1.3",
-        "slash": "^3.0.0",
-        "stack-utils": "^2.0.3"
-      },
+      "hasInstallScript": true,
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "p-limit": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-          "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-          "dev": true,
-          "requires": {
-            "yocto-queue": "^0.1.0"
-          }
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "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"
-          }
-        }
+        "@cypress/request": "2.88.12",
+        "@cypress/xvfb": "^1.2.4",
+        "@types/node": "^16.18.39",
+        "@types/sinonjs__fake-timers": "8.1.1",
+        "@types/sizzle": "^2.3.2",
+        "arch": "^2.2.0",
+        "blob-util": "^2.0.2",
+        "bluebird": "^3.7.2",
+        "buffer": "^5.6.0",
+        "cachedir": "^2.3.0",
+        "chalk": "^4.1.0",
+        "check-more-types": "^2.24.0",
+        "cli-cursor": "^3.1.0",
+        "cli-table3": "~0.6.1",
+        "commander": "^6.2.1",
+        "common-tags": "^1.8.0",
+        "dayjs": "^1.10.4",
+        "debug": "^4.3.4",
+        "enquirer": "^2.3.6",
+        "eventemitter2": "6.4.7",
+        "execa": "4.1.0",
+        "executable": "^4.1.1",
+        "extract-zip": "2.0.1",
+        "figures": "^3.2.0",
+        "fs-extra": "^9.1.0",
+        "getos": "^3.2.1",
+        "is-ci": "^3.0.0",
+        "is-installed-globally": "~0.4.0",
+        "lazy-ass": "^1.6.0",
+        "listr2": "^3.8.3",
+        "lodash": "^4.17.21",
+        "log-symbols": "^4.0.0",
+        "minimist": "^1.2.8",
+        "ospath": "^1.2.2",
+        "pretty-bytes": "^5.6.0",
+        "process": "^0.11.10",
+        "proxy-from-env": "1.0.0",
+        "request-progress": "^3.0.0",
+        "semver": "^7.5.3",
+        "supports-color": "^8.1.1",
+        "tmp": "~0.2.1",
+        "untildify": "^4.0.0",
+        "yauzl": "^2.10.0"
+      },
+      "bin": {
+        "cypress": "bin/cypress"
+      },
+      "engines": {
+        "node": "^14.0.0 || ^16.0.0 || >=18.0.0"
       }
     },
-    "jest-config": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz",
-      "integrity": "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==",
+    "node_modules/cypress-axe": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/cypress-axe/-/cypress-axe-1.5.0.tgz",
+      "integrity": "sha512-Hy/owCjfj+25KMsecvDgo4fC/781ccL+e8p+UUYoadGVM2ogZF9XIKbiM6KI8Y3cEaSreymdD6ZzccbI2bY0lQ==",
       "dev": true,
-      "requires": {
-        "@babel/core": "^7.11.6",
-        "@jest/test-sequencer": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "babel-jest": "^28.1.3",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "deepmerge": "^4.2.2",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-circus": "^28.1.3",
-        "jest-environment-node": "^28.1.3",
-        "jest-get-type": "^28.0.2",
-        "jest-regex-util": "^28.0.2",
-        "jest-resolve": "^28.1.3",
-        "jest-runner": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "jest-validate": "^28.1.3",
-        "micromatch": "^4.0.4",
-        "parse-json": "^5.2.0",
-        "pretty-format": "^28.1.3",
-        "slash": "^3.0.0",
-        "strip-json-comments": "^3.1.1"
+      "engines": {
+        "node": ">=10"
       },
+      "peerDependencies": {
+        "axe-core": "^3 || ^4",
+        "cypress": "^10 || ^11 || ^12 || ^13"
+      }
+    },
+    "node_modules/cypress-cucumber-preprocessor": {
+      "version": "4.3.1",
+      "dev": true,
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
-        "strip-json-comments": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-          "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-          "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"
-          }
-        }
+        "@cypress/browserify-preprocessor": "^3.0.2",
+        "chai": "^4.2.0",
+        "chokidar": "3.5.2",
+        "cosmiconfig": "^4.0.0",
+        "cucumber": "^4.2.1",
+        "cucumber-expressions": "^6.0.1",
+        "cucumber-tag-expressions": "^1.1.1",
+        "dargs": "^7.0.0",
+        "debug": "^3.0.1",
+        "gherkin": "^5.1.0",
+        "glob": "^7.1.2",
+        "js-string-escape": "^1.0.1",
+        "minimist": "^1.2.5",
+        "through": "^2.3.8"
+      },
+      "bin": {
+        "cypress-tags": "cypress-tags.js"
       }
     },
-    "jest-diff": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz",
-      "integrity": "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==",
+    "node_modules/cypress-cucumber-preprocessor/node_modules/chokidar": {
+      "version": "3.5.2",
       "dev": true,
-      "requires": {
-        "chalk": "^4.0.0",
-        "diff-sequences": "^28.1.1",
-        "jest-get-type": "^28.0.2",
-        "pretty-format": "^28.1.3"
+      "license": "MIT",
+      "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/cypress-cucumber-preprocessor/node_modules/cosmiconfig": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.9.0",
+        "parse-json": "^4.0.0",
+        "require-from-string": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "jest-docblock": {
-      "version": "28.1.1",
-      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz",
-      "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==",
+    "node_modules/cypress-cucumber-preprocessor/node_modules/debug": {
+      "version": "3.2.7",
       "dev": true,
-      "requires": {
-        "detect-newline": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
       }
     },
-    "jest-each": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz",
-      "integrity": "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==",
+    "node_modules/cypress-cucumber-preprocessor/node_modules/glob": {
+      "version": "7.2.3",
       "dev": true,
-      "requires": {
-        "@jest/types": "^28.1.3",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^28.0.2",
-        "jest-util": "^28.1.3",
-        "pretty-format": "^28.1.3"
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
       },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/cypress-cucumber-preprocessor/node_modules/parse-json": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+        "error-ex": "^1.3.1",
+        "json-parse-better-errors": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "jest-environment-jsdom": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz",
-      "integrity": "sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg==",
+    "node_modules/cypress-iframe": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^28.1.3",
-        "@jest/fake-timers": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "@types/jsdom": "^16.2.4",
-        "@types/node": "*",
-        "jest-mock": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "jsdom": "^19.0.0"
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/cypress": "^1.1.0"
       }
     },
-    "jest-environment-node": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz",
-      "integrity": "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==",
+    "node_modules/cypress-multi-reporters": {
+      "version": "1.5.0",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^28.1.3",
-        "@jest/fake-timers": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "@types/node": "*",
-        "jest-mock": "^28.1.3",
-        "jest-util": "^28.1.3"
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^4.1.1",
+        "lodash": "^4.17.15"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "peerDependencies": {
+        "mocha": ">=3.1.2"
       }
     },
-    "jest-get-type": {
-      "version": "28.0.2",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz",
-      "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==",
+    "node_modules/cypress/node_modules/@types/node": {
+      "version": "16.18.57",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.57.tgz",
+      "integrity": "sha512-piPoDozdPaX1hNWFJQzzgWqE40gh986VvVx/QO9RU4qYRE55ld7iepDVgZ3ccGUw0R4wge0Oy1dd+3xOQNkkUQ==",
       "dev": true
     },
-    "jest-haste-map": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz",
-      "integrity": "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==",
+    "node_modules/cypress/node_modules/buffer": {
+      "version": "5.7.1",
       "dev": true,
-      "requires": {
-        "@jest/types": "^28.1.3",
-        "@types/graceful-fs": "^4.1.3",
-        "@types/node": "*",
-        "anymatch": "^3.0.3",
-        "fb-watchman": "^2.0.0",
-        "fsevents": "^2.3.2",
-        "graceful-fs": "^4.2.9",
-        "jest-regex-util": "^28.0.2",
-        "jest-util": "^28.1.3",
-        "jest-worker": "^28.1.3",
-        "micromatch": "^4.0.4",
-        "walker": "^1.0.8"
-      },
-      "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
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
         },
-        "jest-worker": {
-          "version": "28.1.3",
-          "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
-          "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
-          "dev": true,
-          "requires": {
-            "@types/node": "*",
-            "merge-stream": "^2.0.0",
-            "supports-color": "^8.0.0"
-          }
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
         },
-        "supports-color": {
-          "version": "8.1.1",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
         }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
       }
     },
-    "jest-jasmine2": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-28.1.3.tgz",
-      "integrity": "sha512-nlNWJY1u62w+WAVgnXOQTdxFdZhqlxpKvMTn1cOK1QHX2oRrkPV3JcIcJfXwcGcifttOJZhExcgDUqSHrYQ6Dw==",
+    "node_modules/cypress/node_modules/chalk": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^28.1.3",
-        "@jest/expect": "^28.1.3",
-        "@jest/source-map": "^28.1.2",
-        "@jest/test-result": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "co": "^4.6.0",
-        "is-generator-fn": "^2.0.0",
-        "jest-each": "^28.1.3",
-        "jest-matcher-utils": "^28.1.3",
-        "jest-message-util": "^28.1.3",
-        "jest-runtime": "^28.1.3",
-        "jest-snapshot": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "p-limit": "^3.1.0",
-        "pretty-format": "^28.1.3"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "p-limit": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-          "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-          "dev": true,
-          "requires": {
-            "yocto-queue": "^0.1.0"
-          }
-        },
-        "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"
-          }
-        }
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "jest-leak-detector": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz",
-      "integrity": "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==",
+    "node_modules/cypress/node_modules/chalk/node_modules/supports-color": {
+      "version": "7.2.0",
       "dev": true,
-      "requires": {
-        "jest-get-type": "^28.0.2",
-        "pretty-format": "^28.1.3"
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "jest-matcher-utils": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz",
-      "integrity": "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==",
+    "node_modules/cypress/node_modules/commander": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+      "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
       "dev": true,
-      "requires": {
-        "chalk": "^4.0.0",
-        "jest-diff": "^28.1.3",
-        "jest-get-type": "^28.0.2",
-        "pretty-format": "^28.1.3"
-      },
-      "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "jest-message-util": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz",
-      "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==",
+    "node_modules/cypress/node_modules/debug": {
+      "version": "4.3.4",
       "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.12.13",
-        "@jest/types": "^28.1.3",
-        "@types/stack-utils": "^2.0.0",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "micromatch": "^4.0.4",
-        "pretty-format": "^28.1.3",
-        "slash": "^3.0.0",
-        "stack-utils": "^2.0.3"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
         "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"
-          }
+          "optional": true
         }
       }
     },
-    "jest-mock": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz",
-      "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==",
+    "node_modules/cypress/node_modules/fs-extra": {
+      "version": "9.1.0",
       "dev": true,
-      "requires": {
-        "@jest/types": "^28.1.3",
-        "@types/node": "*"
+      "license": "MIT",
+      "dependencies": {
+        "at-least-node": "^1.0.0",
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "jest-pnp-resolver": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
-      "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
-      "dev": true
-    },
-    "jest-preset-angular": {
-      "version": "12.0.0",
-      "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-12.0.0.tgz",
-      "integrity": "sha512-xJmnvilwMo0+4QV3xfYLxhVW+nrmH6oTa0yUlR0LCgIYNavwR9rPkHnpeXRszFRXOqQu7th2weYOAsXSj38pNg==",
+    "node_modules/cypress/node_modules/supports-color": {
+      "version": "8.1.1",
       "dev": true,
-      "requires": {
-        "bs-logger": "^0.2.6",
-        "esbuild": ">=0.13.8",
-        "esbuild-wasm": ">=0.13.8",
-        "jest-environment-jsdom": "^28.0.0",
-        "pretty-format": "^28.0.0",
-        "ts-jest": "^28.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/d": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "ISC",
       "dependencies": {
-        "esbuild": {
-          "version": "0.17.19",
-          "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
-          "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "@esbuild/android-arm": "0.17.19",
-            "@esbuild/android-arm64": "0.17.19",
-            "@esbuild/android-x64": "0.17.19",
-            "@esbuild/darwin-arm64": "0.17.19",
-            "@esbuild/darwin-x64": "0.17.19",
-            "@esbuild/freebsd-arm64": "0.17.19",
-            "@esbuild/freebsd-x64": "0.17.19",
-            "@esbuild/linux-arm": "0.17.19",
-            "@esbuild/linux-arm64": "0.17.19",
-            "@esbuild/linux-ia32": "0.17.19",
-            "@esbuild/linux-loong64": "0.17.19",
-            "@esbuild/linux-mips64el": "0.17.19",
-            "@esbuild/linux-ppc64": "0.17.19",
-            "@esbuild/linux-riscv64": "0.17.19",
-            "@esbuild/linux-s390x": "0.17.19",
-            "@esbuild/linux-x64": "0.17.19",
-            "@esbuild/netbsd-x64": "0.17.19",
-            "@esbuild/openbsd-x64": "0.17.19",
-            "@esbuild/sunos-x64": "0.17.19",
-            "@esbuild/win32-arm64": "0.17.19",
-            "@esbuild/win32-ia32": "0.17.19",
-            "@esbuild/win32-x64": "0.17.19"
-          }
-        }
+        "es5-ext": "^0.10.50",
+        "type": "^1.0.1"
       }
     },
-    "jest-regex-util": {
-      "version": "28.0.2",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz",
-      "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==",
-      "dev": true
+    "node_modules/dargs": {
+      "version": "7.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "jest-resolve": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz",
-      "integrity": "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==",
+    "node_modules/dash-ast": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^28.1.3",
-        "jest-pnp-resolver": "^1.2.2",
-        "jest-util": "^28.1.3",
-        "jest-validate": "^28.1.3",
-        "resolve": "^1.20.0",
-        "resolve.exports": "^1.1.0",
-        "slash": "^3.0.0"
+      "license": "Apache-2.0"
+    },
+    "node_modules/dashdash": {
+      "version": "1.14.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "assert-plus": "^1.0.0"
       },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/data-urls": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "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"
-          }
-        }
+        "abab": "^2.0.0",
+        "whatwg-mimetype": "^2.2.0",
+        "whatwg-url": "^7.0.0"
       }
     },
-    "jest-resolve-dependencies": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz",
-      "integrity": "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==",
+    "node_modules/dateformat": {
+      "version": "3.0.3",
       "dev": true,
-      "requires": {
-        "jest-regex-util": "^28.0.2",
-        "jest-snapshot": "^28.1.3"
+      "license": "MIT",
+      "engines": {
+        "node": "*"
       }
     },
-    "jest-runner": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz",
-      "integrity": "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==",
+    "node_modules/dayjs": {
+      "version": "1.11.10",
       "dev": true,
-      "requires": {
-        "@jest/console": "^28.1.3",
-        "@jest/environment": "^28.1.3",
-        "@jest/test-result": "^28.1.3",
-        "@jest/transform": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "emittery": "^0.10.2",
-        "graceful-fs": "^4.2.9",
-        "jest-docblock": "^28.1.1",
-        "jest-environment-node": "^28.1.3",
-        "jest-haste-map": "^28.1.3",
-        "jest-leak-detector": "^28.1.3",
-        "jest-message-util": "^28.1.3",
-        "jest-resolve": "^28.1.3",
-        "jest-runtime": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "jest-watcher": "^28.1.3",
-        "jest-worker": "^28.1.3",
-        "p-limit": "^3.1.0",
-        "source-map-support": "0.5.13"
-      },
+      "license": "MIT"
+    },
+    "node_modules/debug": {
+      "version": "4.2.0",
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "jest-worker": {
-          "version": "28.1.3",
-          "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz",
-          "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==",
-          "dev": true,
-          "requires": {
-            "@types/node": "*",
-            "merge-stream": "^2.0.0",
-            "supports-color": "^8.0.0"
-          },
-          "dependencies": {
-            "supports-color": {
-              "version": "8.1.1",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-              "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-              "dev": true,
-              "requires": {
-                "has-flag": "^4.0.0"
-              }
-            }
-          }
-        },
-        "p-limit": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-          "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-          "dev": true,
-          "requires": {
-            "yocto-queue": "^0.1.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        },
-        "source-map-support": {
-          "version": "0.5.13",
-          "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
-          "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
-          "dev": true,
-          "requires": {
-            "buffer-from": "^1.0.0",
-            "source-map": "^0.6.0"
-          }
-        },
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
         "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"
-          }
+          "optional": true
         }
       }
     },
-    "jest-runtime": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz",
-      "integrity": "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==",
+    "node_modules/decache": {
+      "version": "4.6.2",
       "dev": true,
-      "requires": {
-        "@jest/environment": "^28.1.3",
-        "@jest/fake-timers": "^28.1.3",
-        "@jest/globals": "^28.1.3",
-        "@jest/source-map": "^28.1.2",
-        "@jest/test-result": "^28.1.3",
-        "@jest/transform": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "chalk": "^4.0.0",
-        "cjs-module-lexer": "^1.0.0",
-        "collect-v8-coverage": "^1.0.0",
-        "execa": "^5.0.0",
-        "glob": "^7.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-haste-map": "^28.1.3",
-        "jest-message-util": "^28.1.3",
-        "jest-mock": "^28.1.3",
-        "jest-regex-util": "^28.0.2",
-        "jest-resolve": "^28.1.3",
-        "jest-snapshot": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "slash": "^3.0.0",
-        "strip-bom": "^4.0.0"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
-        "strip-bom": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
-          "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
-          "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"
-          }
-        }
+        "callsite": "^1.0.0"
       }
     },
-    "jest-silent-reporter": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jest-silent-reporter/-/jest-silent-reporter-0.5.0.tgz",
-      "integrity": "sha512-epdLt8Oj0a1AyRiR6F8zx/1SVT1Mi7VU3y4wB2uOBHs/ohIquC7v2eeja7UN54uRPyHInIKWdL+RdG228n5pJQ==",
+    "node_modules/decamelize": {
+      "version": "1.2.0",
       "dev": true,
-      "requires": {
-        "chalk": "^4.0.0",
-        "jest-util": "^26.0.0"
-      },
-      "dependencies": {
-        "@jest/types": {
-          "version": "26.6.2",
-          "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
-          "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
-          "dev": true,
-          "requires": {
-            "@types/istanbul-lib-coverage": "^2.0.0",
-            "@types/istanbul-reports": "^3.0.0",
-            "@types/node": "*",
-            "@types/yargs": "^15.0.0",
-            "chalk": "^4.0.0"
-          }
-        },
-        "@types/yargs": {
-          "version": "15.0.15",
-          "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz",
-          "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==",
-          "dev": true,
-          "requires": {
-            "@types/yargs-parser": "*"
-          }
-        },
-        "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "ci-info": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
-          "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
-          "dev": true
-        },
-        "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
-        },
-        "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
-        },
-        "is-ci": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
-          "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
-          "dev": true,
-          "requires": {
-            "ci-info": "^2.0.0"
-          }
-        },
-        "jest-util": {
-          "version": "26.6.2",
-          "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
-          "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
-          "dev": true,
-          "requires": {
-            "@jest/types": "^26.6.2",
-            "@types/node": "*",
-            "chalk": "^4.0.0",
-            "graceful-fs": "^4.2.4",
-            "is-ci": "^2.0.0",
-            "micromatch": "^4.0.2"
-          }
-        },
-        "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"
-          }
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "jest-snapshot": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz",
-      "integrity": "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==",
+    "node_modules/decamelize-keys": {
+      "version": "1.1.1",
       "dev": true,
-      "requires": {
-        "@babel/core": "^7.11.6",
-        "@babel/generator": "^7.7.2",
-        "@babel/plugin-syntax-typescript": "^7.7.2",
-        "@babel/traverse": "^7.7.2",
-        "@babel/types": "^7.3.3",
-        "@jest/expect-utils": "^28.1.3",
-        "@jest/transform": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "@types/babel__traverse": "^7.0.6",
-        "@types/prettier": "^2.1.5",
-        "babel-preset-current-node-syntax": "^1.0.0",
-        "chalk": "^4.0.0",
-        "expect": "^28.1.3",
-        "graceful-fs": "^4.2.9",
-        "jest-diff": "^28.1.3",
-        "jest-get-type": "^28.0.2",
-        "jest-haste-map": "^28.1.3",
-        "jest-matcher-utils": "^28.1.3",
-        "jest-message-util": "^28.1.3",
-        "jest-util": "^28.1.3",
-        "natural-compare": "^1.4.0",
-        "pretty-format": "^28.1.3",
-        "semver": "^7.3.5"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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
-        },
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "decamelize": "^1.1.0",
+        "map-obj": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "jest-util": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz",
-      "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==",
+    "node_modules/decamelize-keys/node_modules/map-obj": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "@jest/types": "^28.1.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "graceful-fs": "^4.2.9",
-        "picomatch": "^2.2.3"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/decimal.js": {
+      "version": "10.4.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/decode-uri-component": {
+      "version": "0.2.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/dedent": {
+      "version": "1.5.1",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "babel-plugin-macros": "^3.1.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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
+      "peerDependenciesMeta": {
+        "babel-plugin-macros": {
+          "optional": true
         }
       }
     },
-    "jest-validate": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz",
-      "integrity": "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==",
+    "node_modules/deep-eql": {
+      "version": "4.1.3",
       "dev": true,
-      "requires": {
-        "@jest/types": "^28.1.3",
-        "camelcase": "^6.2.0",
-        "chalk": "^4.0.0",
-        "jest-get-type": "^28.0.2",
-        "leven": "^3.1.0",
-        "pretty-format": "^28.1.3"
+      "license": "MIT",
+      "dependencies": {
+        "type-detect": "^4.0.0"
       },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/deep-equal": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "MIT",
       "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"
-          }
-        },
-        "camelcase": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-          "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-          "dev": true
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
+        "is-arguments": "^1.0.4",
+        "is-date-object": "^1.0.1",
+        "is-regex": "^1.0.4",
+        "object-is": "^1.0.1",
+        "object-keys": "^1.1.1",
+        "regexp.prototype.flags": "^1.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/deep-extend": {
+      "version": "0.6.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/deep-is": {
+      "version": "0.1.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/deepmerge": {
+      "version": "4.2.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/default-gateway": {
+      "version": "6.0.3",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "execa": "^5.0.0"
+      },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/default-gateway/node_modules/execa": {
+      "version": "5.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.0",
+        "human-signals": "^2.1.0",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.1",
+        "onetime": "^5.1.2",
+        "signal-exit": "^3.0.3",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/default-gateway/node_modules/get-stream": {
+      "version": "6.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/default-gateway/node_modules/human-signals": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/default-gateway/node_modules/is-stream": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/defaults": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "clone": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/define-data-property": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-intrinsic": "^1.2.1",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/define-lazy-prop": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/define-properties": {
+      "version": "1.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-data-property": "^1.0.1",
+        "has-property-descriptors": "^1.0.0",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/define-property": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/defined": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/delegates": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/depd": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/dependency-graph": {
+      "version": "0.11.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/deps-sort": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "JSONStream": "^1.0.3",
+        "shasum-object": "^1.0.0",
+        "subarg": "^1.0.0",
+        "through2": "^2.0.0"
+      },
+      "bin": {
+        "deps-sort": "bin/cmd.js"
+      }
+    },
+    "node_modules/des.js": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "node_modules/destroy": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
+      }
+    },
+    "node_modules/detect-browser": {
+      "version": "5.2.0",
+      "license": "MIT"
+    },
+    "node_modules/detect-file": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/detect-newline": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/detect-node": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/detective": {
+      "version": "5.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "acorn-node": "^1.8.2",
+        "defined": "^1.0.0",
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "detective": "bin/detective.js"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/dfa": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/diff": {
+      "version": "3.5.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.3.1"
+      }
+    },
+    "node_modules/diff-sequences": {
+      "version": "28.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/diffie-hellman": {
+      "version": "5.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      }
+    },
+    "node_modules/diffie-hellman/node_modules/bn.js": {
+      "version": "4.12.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/dir-glob": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/dns-equal": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/dns-packet": {
+      "version": "5.6.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@leichtgewicht/ip-codec": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/doctrine": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/dom-serializer": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.2",
+        "entities": "^4.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+      }
+    },
+    "node_modules/domain-browser": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4",
+        "npm": ">=1.2"
+      }
+    },
+    "node_modules/domelementtype": {
+      "version": "2.3.0",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
         }
+      ],
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/domexception": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "webidl-conversions": "^4.0.2"
+      }
+    },
+    "node_modules/domhandler": {
+      "version": "5.0.3",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "domelementtype": "^2.3.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domhandler?sponsor=1"
+      }
+    },
+    "node_modules/dommatrix": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/dompurify": {
+      "version": "2.3.3",
+      "license": "(MPL-2.0 OR Apache-2.0)"
+    },
+    "node_modules/domutils": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "dom-serializer": "^2.0.0",
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domutils?sponsor=1"
+      }
+    },
+    "node_modules/dot": {
+      "version": "2.0.0-beta.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/dotenv": {
+      "version": "10.0.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/drange": {
+      "version": "1.1.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/duplexer": {
+      "version": "0.1.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/duplexer2": {
+      "version": "0.1.4",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "node_modules/duration": {
+      "version": "0.2.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "~0.10.46"
+      }
+    },
+    "node_modules/eastasianwidth": {
+      "version": "0.2.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/ecc-jsbn": {
+      "version": "0.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "node_modules/ee-first": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/ejs": {
+      "version": "3.1.9",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "jake": "^10.8.5"
+      },
+      "bin": {
+        "ejs": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.4.539",
+      "license": "ISC"
+    },
+    "node_modules/elliptic": {
+      "version": "6.5.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "node_modules/elliptic/node_modules/bn.js": {
+      "version": "4.12.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/emittery": {
+      "version": "0.13.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+      }
+    },
+    "node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "license": "MIT"
+    },
+    "node_modules/emojis-list": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/encodeurl": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/encoding": {
+      "version": "0.1.13",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "iconv-lite": "^0.6.2"
+      }
+    },
+    "node_modules/encoding/node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/end-of-stream": {
+      "version": "1.4.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "once": "^1.4.0"
+      }
+    },
+    "node_modules/enhanced-resolve": {
+      "version": "5.15.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/enquirer": {
+      "version": "2.3.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-colors": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/entities": {
+      "version": "4.5.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/env-paths": {
+      "version": "2.2.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/err-code": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/errno": {
+      "version": "0.1.8",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "prr": "~1.0.1"
+      },
+      "bin": {
+        "errno": "cli.js"
+      }
+    },
+    "node_modules/error-ex": {
+      "version": "1.3.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "node_modules/error-stack-parser": {
+      "version": "2.1.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "stackframe": "^1.3.4"
+      }
+    },
+    "node_modules/es-abstract": {
+      "version": "1.22.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.0",
+        "arraybuffer.prototype.slice": "^1.0.2",
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.2",
+        "es-set-tostringtag": "^2.0.1",
+        "es-to-primitive": "^1.2.1",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.1",
+        "get-symbol-description": "^1.0.0",
+        "globalthis": "^1.0.3",
+        "gopd": "^1.0.1",
+        "has": "^1.0.3",
+        "has-property-descriptors": "^1.0.0",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "internal-slot": "^1.0.5",
+        "is-array-buffer": "^3.0.2",
+        "is-callable": "^1.2.7",
+        "is-negative-zero": "^2.0.2",
+        "is-regex": "^1.1.4",
+        "is-shared-array-buffer": "^1.0.2",
+        "is-string": "^1.0.7",
+        "is-typed-array": "^1.1.12",
+        "is-weakref": "^1.0.2",
+        "object-inspect": "^1.12.3",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.4",
+        "regexp.prototype.flags": "^1.5.1",
+        "safe-array-concat": "^1.0.1",
+        "safe-regex-test": "^1.0.0",
+        "string.prototype.trim": "^1.2.8",
+        "string.prototype.trimend": "^1.0.7",
+        "string.prototype.trimstart": "^1.0.7",
+        "typed-array-buffer": "^1.0.0",
+        "typed-array-byte-length": "^1.0.0",
+        "typed-array-byte-offset": "^1.0.0",
+        "typed-array-length": "^1.0.4",
+        "unbox-primitive": "^1.0.2",
+        "which-typed-array": "^1.1.11"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "0.9.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-intrinsic": "^1.1.3",
+        "has": "^1.0.3",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-to-primitive": {
+      "version": "1.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/es5-ext": {
+      "version": "0.10.62",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "ISC",
+      "dependencies": {
+        "es6-iterator": "^2.0.3",
+        "es6-symbol": "^3.1.3",
+        "next-tick": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/es6-iterator": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "node_modules/es6-map": {
+      "version": "0.1.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "~0.10.14",
+        "es6-iterator": "~2.0.1",
+        "es6-set": "~0.1.5",
+        "es6-symbol": "~3.1.1",
+        "event-emitter": "~0.3.5"
+      }
+    },
+    "node_modules/es6-set": {
+      "version": "0.1.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "d": "^1.0.1",
+        "es5-ext": "^0.10.62",
+        "es6-iterator": "~2.0.3",
+        "es6-symbol": "^3.1.3",
+        "event-emitter": "^0.3.5",
+        "type": "^2.7.2"
+      },
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
+    "node_modules/es6-set/node_modules/type": {
+      "version": "2.7.2",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/es6-symbol": {
+      "version": "3.1.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "d": "^1.0.1",
+        "ext": "^1.1.2"
+      }
+    },
+    "node_modules/esbuild": {
+      "version": "0.17.8",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/android-arm": "0.17.8",
+        "@esbuild/android-arm64": "0.17.8",
+        "@esbuild/android-x64": "0.17.8",
+        "@esbuild/darwin-arm64": "0.17.8",
+        "@esbuild/darwin-x64": "0.17.8",
+        "@esbuild/freebsd-arm64": "0.17.8",
+        "@esbuild/freebsd-x64": "0.17.8",
+        "@esbuild/linux-arm": "0.17.8",
+        "@esbuild/linux-arm64": "0.17.8",
+        "@esbuild/linux-ia32": "0.17.8",
+        "@esbuild/linux-loong64": "0.17.8",
+        "@esbuild/linux-mips64el": "0.17.8",
+        "@esbuild/linux-ppc64": "0.17.8",
+        "@esbuild/linux-riscv64": "0.17.8",
+        "@esbuild/linux-s390x": "0.17.8",
+        "@esbuild/linux-x64": "0.17.8",
+        "@esbuild/netbsd-x64": "0.17.8",
+        "@esbuild/openbsd-x64": "0.17.8",
+        "@esbuild/sunos-x64": "0.17.8",
+        "@esbuild/win32-arm64": "0.17.8",
+        "@esbuild/win32-ia32": "0.17.8",
+        "@esbuild/win32-x64": "0.17.8"
+      }
+    },
+    "node_modules/esbuild-wasm": {
+      "version": "0.17.8",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.1.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-html": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/escodegen": {
+      "version": "1.14.3",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esprima": "^4.0.1",
+        "estraverse": "^4.2.0",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1"
+      },
+      "bin": {
+        "escodegen": "bin/escodegen.js",
+        "esgenerate": "bin/esgenerate.js"
+      },
+      "engines": {
+        "node": ">=4.0"
+      },
+      "optionalDependencies": {
+        "source-map": "~0.6.1"
+      }
+    },
+    "node_modules/escodegen/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/eslint": {
+      "version": "8.17.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint/eslintrc": "^1.3.0",
+        "@humanwhocodes/config-array": "^0.9.2",
+        "ajv": "^6.10.0",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
+        "doctrine": "^3.0.0",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.1.1",
+        "eslint-utils": "^3.0.0",
+        "eslint-visitor-keys": "^3.3.0",
+        "espree": "^9.3.2",
+        "esquery": "^1.4.0",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
+        "functional-red-black-tree": "^1.0.1",
+        "glob-parent": "^6.0.1",
+        "globals": "^13.15.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.0.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "js-yaml": "^4.1.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.1",
+        "regexpp": "^3.2.0",
+        "strip-ansi": "^6.0.1",
+        "strip-json-comments": "^3.1.0",
+        "text-table": "^0.2.0",
+        "v8-compile-cache": "^2.0.3"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/eslint-utils": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eslint-visitor-keys": "^2.0.0"
+      },
+      "engines": {
+        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mysticatea"
+      },
+      "peerDependencies": {
+        "eslint": ">=5"
+      }
+    },
+    "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/ajv": {
+      "version": "6.12.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/eslint/node_modules/argparse": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "Python-2.0"
+    },
+    "node_modules/eslint/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/eslint/node_modules/debug": {
+      "version": "4.3.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint/node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/eslint-scope": {
+      "version": "7.2.2",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/estraverse": {
+      "version": "5.3.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/eslint/node_modules/glob-parent": {
+      "version": "6.0.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/eslint/node_modules/globals": {
+      "version": "13.22.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/js-yaml": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/eslint/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/eslint/node_modules/optionator": {
+      "version": "0.9.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@aashutoshrathi/word-wrap": "^1.2.3",
+        "deep-is": "^0.1.3",
+        "fast-levenshtein": "^2.0.6",
+        "levn": "^0.4.1",
+        "prelude-ls": "^1.2.1",
+        "type-check": "^0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/eslint/node_modules/type-fest": {
+      "version": "0.20.2",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/espree": {
+      "version": "9.6.1",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/espree/node_modules/acorn": {
+      "version": "8.10.0",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/esprima": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/esquery": {
+      "version": "1.5.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "estraverse": "^5.1.0"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/esquery/node_modules/estraverse": {
+      "version": "5.3.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/esrecurse/node_modules/estraverse": {
+      "version": "5.3.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estraverse": {
+      "version": "4.3.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estree-is-function": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/etag": {
+      "version": "1.8.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/event-emitter": {
+      "version": "0.3.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "d": "1",
+        "es5-ext": "~0.10.14"
+      }
+    },
+    "node_modules/event-stream": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "duplexer": "^0.1.1",
+        "from": "^0.1.7",
+        "map-stream": "0.0.7",
+        "pause-stream": "^0.0.11",
+        "split": "^1.0.1",
+        "stream-combiner": "^0.2.2",
+        "through": "^2.3.8"
+      }
+    },
+    "node_modules/event-target-shim": {
+      "version": "5.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/eventemitter-asyncresource": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/eventemitter2": {
+      "version": "6.4.7",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/eventemitter3": {
+      "version": "4.0.7",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/events": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.x"
+      }
+    },
+    "node_modules/evp_bytestokey": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "node_modules/execa": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.0",
+        "get-stream": "^5.0.0",
+        "human-signals": "^1.1.1",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.0",
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/execa/node_modules/is-stream": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/execall": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "clone-regexp": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/executable": {
+      "version": "4.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "pify": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/exit": {
+      "version": "0.1.2",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/expand-brackets": {
+      "version": "2.1.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^2.3.3",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "posix-character-classes": "^0.1.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/debug": {
+      "version": "2.6.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/define-property": {
+      "version": "0.2.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/extend-shallow": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extendable": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/kind-of": {
+      "version": "5.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/expand-tilde": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "homedir-polyfill": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expect": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/expect-utils": "^28.1.3",
+        "jest-get-type": "^28.0.2",
+        "jest-matcher-utils": "^28.1.3",
+        "jest-message-util": "^28.1.3",
+        "jest-util": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/exponential-backoff": {
+      "version": "3.1.1",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/express": {
+      "version": "4.17.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "accepts": "~1.3.7",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.19.0",
+        "content-disposition": "0.5.3",
+        "content-type": "~1.0.4",
+        "cookie": "0.4.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "~1.1.2",
+        "fresh": "0.5.2",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.5",
+        "qs": "6.7.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.1.2",
+        "send": "0.17.1",
+        "serve-static": "1.14.1",
+        "setprototypeof": "1.1.1",
+        "statuses": "~1.5.0",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/express/node_modules/debug": {
+      "version": "2.6.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/express/node_modules/destroy": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/express/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/express/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/express/node_modules/send": {
+      "version": "0.17.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "~1.7.2",
+        "mime": "1.6.0",
+        "ms": "2.1.1",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.1",
+        "statuses": "~1.5.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/express/node_modules/send/node_modules/ms": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/ext": {
+      "version": "1.7.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "type": "^2.7.2"
+      }
+    },
+    "node_modules/ext/node_modules/type": {
+      "version": "2.7.2",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/extend": {
+      "version": "3.0.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/extend-shallow": {
+      "version": "3.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/external-editor": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/external-editor/node_modules/tmp": {
+      "version": "0.0.33",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "os-tmpdir": "~1.0.2"
+      },
+      "engines": {
+        "node": ">=0.6.0"
+      }
+    },
+    "node_modules/extglob": {
+      "version": "2.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "expand-brackets": "^2.1.4",
+        "extend-shallow": "^2.0.1",
+        "fragment-cache": "^0.2.1",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/extglob/node_modules/define-property": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/extglob/node_modules/extend-shallow": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extendable": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/extglob/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/extract-zip": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "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/extsprintf": {
+      "version": "1.3.0",
+      "dev": true,
+      "engines": [
+        "node >=0.6.0"
+      ],
+      "license": "MIT"
+    },
+    "node_modules/fancy-log": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-support": "^1.1.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.1",
+      "dev": true,
+      "license": "MIT",
+      "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.6.0"
+      }
+    },
+    "node_modules/fast-json-patch": {
+      "version": "3.1.1",
+      "license": "MIT"
+    },
+    "node_modules/fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-levenshtein": {
+      "version": "2.0.6",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-safe-stringify": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fastest-levenshtein": {
+      "version": "1.0.16",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4.9.1"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.15.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fault": {
+      "version": "1.0.4",
+      "license": "MIT",
+      "dependencies": {
+        "format": "^0.2.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/faye-websocket": {
+      "version": "0.11.4",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "websocket-driver": ">=0.5.1"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/fb-watchman": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "bser": "2.1.1"
+      }
+    },
+    "node_modules/fd-slicer": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "pend": "~1.2.0"
+      }
+    },
+    "node_modules/figures": {
+      "version": "3.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "escape-string-regexp": "^1.0.5"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/file-entry-cache": {
+      "version": "6.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "flat-cache": "^3.0.4"
+      },
+      "engines": {
+        "node": "^10.12.0 || >=12.0.0"
+      }
+    },
+    "node_modules/file-saver": {
+      "version": "2.0.2",
+      "license": "MIT"
+    },
+    "node_modules/filelist": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "minimatch": "^5.0.1"
+      }
+    },
+    "node_modules/filelist/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/filelist/node_modules/minimatch": {
+      "version": "5.1.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/finalhandler": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "statuses": "~1.5.0",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/finalhandler/node_modules/debug": {
+      "version": "2.6.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/finalhandler/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/find-cache-dir": {
+      "version": "3.3.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "commondir": "^1.0.1",
+        "make-dir": "^3.0.2",
+        "pkg-dir": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+      }
+    },
+    "node_modules/find-up": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/findit2": {
+      "version": "2.2.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.22"
+      }
+    },
+    "node_modules/findup-sync": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "detect-file": "^1.0.0",
+        "is-glob": "^3.1.0",
+        "micromatch": "^3.0.4",
+        "resolve-dir": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/findup-sync/node_modules/braces": {
+      "version": "2.3.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extendable": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/fill-range": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "extend-shallow": "^2.0.1",
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extendable": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/is-glob": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/is-number": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": {
+      "version": "3.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/micromatch": {
+      "version": "3.1.10",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "braces": "^2.3.1",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "extglob": "^2.0.4",
+        "fragment-cache": "^0.2.1",
+        "kind-of": "^6.0.2",
+        "nanomatch": "^1.2.9",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/findup-sync/node_modules/to-regex-range": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/fined": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "expand-tilde": "^2.0.2",
+        "is-plain-object": "^2.0.3",
+        "object.defaults": "^1.1.0",
+        "object.pick": "^1.2.0",
+        "parse-filepath": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/flagged-respawn": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/flat": {
+      "version": "5.0.2",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "bin": {
+        "flat": "cli.js"
+      }
+    },
+    "node_modules/flat-cache": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "flatted": "^3.2.7",
+        "keyv": "^4.5.3",
+        "rimraf": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/flatted": {
+      "version": "3.2.9",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.15.3",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/for-each": {
+      "version": "0.3.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-callable": "^1.1.3"
+      }
+    },
+    "node_modules/for-in": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/for-own": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "for-in": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/foreground-child": {
+      "version": "3.1.1",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "cross-spawn": "^7.0.0",
+        "signal-exit": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/foreground-child/node_modules/signal-exit": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/forever-agent": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/fork-awesome": {
+      "version": "1.1.7",
+      "license": "(OFL-1.1 AND MIT)",
+      "engines": {
+        "node": ">=0.10.3"
+      }
+    },
+    "node_modules/form-data": {
+      "version": "2.3.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 0.12"
+      }
+    },
+    "node_modules/format": {
+      "version": "0.2.2",
+      "engines": {
+        "node": ">=0.4.x"
+      }
+    },
+    "node_modules/forwarded": {
+      "version": "0.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/fraction.js": {
+      "version": "4.3.6",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "type": "patreon",
+        "url": "https://github.com/sponsors/rawify"
+      }
+    },
+    "node_modules/fragment-cache": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "map-cache": "^0.2.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/fresh": {
+      "version": "0.5.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/from": {
+      "version": "0.1.7",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fs-constants": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fs-extra": {
+      "version": "10.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/fs-minipass": {
+      "version": "3.0.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^7.0.3"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/fs-minipass/node_modules/minipass": {
+      "version": "7.0.4",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/fs-monkey": {
+      "version": "1.0.5",
+      "dev": true,
+      "license": "Unlicense"
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "license": "ISC"
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.1",
+      "license": "MIT"
+    },
+    "node_modules/function.prototype.name": {
+      "version": "1.1.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/functional-red-black-tree": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/functions-have-names": {
+      "version": "1.2.3",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/gauge": {
+      "version": "4.0.4",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "aproba": "^1.0.3 || ^2.0.0",
+        "color-support": "^1.1.3",
+        "console-control-strings": "^1.1.0",
+        "has-unicode": "^2.0.1",
+        "signal-exit": "^3.0.7",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1",
+        "wide-align": "^1.1.5"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/get-assigned-identifiers": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "license": "ISC",
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
+    "node_modules/get-func-name": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.1",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-package-type": {
+      "version": "0.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/get-stdin": {
+      "version": "8.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/get-stream": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "pump": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/get-symbol-description": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-value": {
+      "version": "2.0.6",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/getos": {
+      "version": "3.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "async": "^3.2.0"
+      }
+    },
+    "node_modules/getpass": {
+      "version": "0.1.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "node_modules/gherkin": {
+      "version": "5.1.0",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "gherkin-javascript": "bin/gherkin"
+      }
+    },
+    "node_modules/gherkin-lint": {
+      "version": "4.2.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "commander": "5.0.0",
+        "core-js": "3.6.4",
+        "gherkin": "9.0.0",
+        "glob": "7.1.6",
+        "lodash": "4.17.21",
+        "strip-json-comments": "3.0.1",
+        "xml-js": "^1.6.11"
+      },
+      "bin": {
+        "gherkin-lint": "dist/main.js"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/gherkin-lint/node_modules/commander": {
+      "version": "5.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/gherkin-lint/node_modules/core-js": {
+      "version": "3.6.4",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
+      }
+    },
+    "node_modules/gherkin-lint/node_modules/gherkin": {
+      "version": "9.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "commander": "^4.0.1",
+        "cucumber-messages": "8.0.0",
+        "source-map-support": "^0.5.16"
+      },
+      "bin": {
+        "gherkin-javascript": "bin/gherkin"
+      }
+    },
+    "node_modules/gherkin-lint/node_modules/gherkin/node_modules/commander": {
+      "version": "4.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/gherkin-lint/node_modules/glob": {
+      "version": "7.1.6",
+      "dev": true,
+      "license": "ISC",
+      "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/gherkin-lint/node_modules/strip-json-comments": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/glob": {
+      "version": "8.1.0",
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/glob-to-regexp": {
+      "version": "0.4.1",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/glob/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/glob/node_modules/minimatch": {
+      "version": "5.1.6",
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/global-dirs": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ini": "2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/global-dirs/node_modules/ini": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/global-modules": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "global-prefix": "^1.0.1",
+        "is-windows": "^1.0.1",
+        "resolve-dir": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/global-prefix": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "expand-tilde": "^2.0.2",
+        "homedir-polyfill": "^1.0.1",
+        "ini": "^1.3.4",
+        "is-windows": "^1.0.1",
+        "which": "^1.2.14"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/global-prefix/node_modules/ini": {
+      "version": "1.3.8",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/global-prefix/node_modules/which": {
+      "version": "1.3.1",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
+    },
+    "node_modules/globals": {
+      "version": "11.12.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/globalthis": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-properties": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/globby": {
+      "version": "11.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/globjoin": {
+      "version": "0.1.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/gonzales-pe": {
+      "version": "4.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minimist": "^1.2.5"
+      },
+      "bin": {
+        "gonzales": "bin/gonzales.js"
+      },
+      "engines": {
+        "node": ">=0.6.0"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-intrinsic": "^1.1.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/handle-thing": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/handlebars": {
+      "version": "4.7.8",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minimist": "^1.2.5",
+        "neo-async": "^2.6.2",
+        "source-map": "^0.6.1",
+        "wordwrap": "^1.0.0"
+      },
+      "bin": {
+        "handlebars": "bin/handlebars"
+      },
+      "engines": {
+        "node": ">=0.4.7"
+      },
+      "optionalDependencies": {
+        "uglify-js": "^3.1.4"
+      }
+    },
+    "node_modules/handlebars/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/har-schema": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/har-validator": {
+      "version": "5.1.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.3",
+        "har-schema": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/har-validator/node_modules/ajv": {
+      "version": "6.12.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/har-validator/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/hard-rejection": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/harmony-reflect": {
+      "version": "1.6.2",
+      "dev": true,
+      "license": "(Apache-2.0 OR MPL-1.1)"
+    },
+    "node_modules/has": {
+      "version": "1.0.3",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/has-bigints": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-flag": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-intrinsic": "^1.1.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-proto": {
+      "version": "1.0.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.0.3",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-tostringtag": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-symbols": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-unicode": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/has-value": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/has-values": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/has-values/node_modules/is-number": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
+      "version": "3.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/has-values/node_modules/kind-of": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/hash-base": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/hash-base/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/hash.js": {
+      "version": "1.1.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "node_modules/hast-util-parse-selector": {
+      "version": "2.2.5",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hastscript": {
+      "version": "6.0.0",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^2.0.0",
+        "comma-separated-tokens": "^1.0.0",
+        "hast-util-parse-selector": "^2.0.0",
+        "property-information": "^5.0.0",
+        "space-separated-tokens": "^1.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hdr-histogram-js": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "BSD",
+      "dependencies": {
+        "@assemblyscript/loader": "^0.10.1",
+        "base64-js": "^1.2.0",
+        "pako": "^1.0.3"
+      }
+    },
+    "node_modules/hdr-histogram-percentiles-obj": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/he": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "he": "bin/he"
+      }
+    },
+    "node_modules/highlight.js": {
+      "version": "10.7.3",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/hmac-drbg": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "node_modules/hoist-non-react-statics": {
+      "version": "3.3.2",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "react-is": "^16.7.0"
+      }
+    },
+    "node_modules/hoist-non-react-statics/node_modules/react-is": {
+      "version": "16.13.1",
+      "license": "MIT"
+    },
+    "node_modules/homedir-polyfill": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "parse-passwd": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/hosted-git-info": {
+      "version": "6.1.1",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "lru-cache": "^7.5.1"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/hosted-git-info/node_modules/lru-cache": {
+      "version": "7.18.3",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/hpack.js": {
+      "version": "2.1.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
+      }
+    },
+    "node_modules/html-encoding-sniffer": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "whatwg-encoding": "^1.0.1"
+      }
+    },
+    "node_modules/html-entities": {
+      "version": "2.4.0",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/mdevils"
+        },
+        {
+          "type": "patreon",
+          "url": "https://patreon.com/mdevils"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/html-escaper": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/html-linter": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "chalk": "^2.4.1",
+        "commander": "^2.12.2",
+        "glob": "^7.1.2"
+      },
+      "bin": {
+        "html-linter": "bin/html-linter.js"
+      }
+    },
+    "node_modules/html-linter/node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/html-linter/node_modules/chalk": {
+      "version": "2.4.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/html-linter/node_modules/color-convert": {
+      "version": "1.9.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/html-linter/node_modules/color-name": {
+      "version": "1.1.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/html-linter/node_modules/commander": {
+      "version": "2.20.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/html-linter/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/html-linter/node_modules/has-flag": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/html-linter/node_modules/supports-color": {
+      "version": "5.5.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/html-tags": {
+      "version": "3.3.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/htmlescape": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/htmllint": {
+      "version": "0.7.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "bulk-require": "^1.0.1",
+        "htmlparser2": "^3.10.0",
+        "lodash": "^4.17.11",
+        "promise": "^8.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli": {
+      "version": "0.0.7",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "bluebird": "^3.5.1",
+        "chalk": "^2.4.0",
+        "cjson": "^0.5.0",
+        "glob": "^7.1.2",
+        "htmllint": "^0.7.2",
+        "liftoff": "^2.5.0",
+        "semver": "^5.5.0",
+        "yargs": "^11.0.0"
+      },
+      "bin": {
+        "htmllint": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/ansi-regex": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/camelcase": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/chalk": {
+      "version": "2.4.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/cliui": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^2.1.1",
+        "strip-ansi": "^4.0.0",
+        "wrap-ansi": "^2.0.0"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/color-convert": {
+      "version": "1.9.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/color-name": {
+      "version": "1.1.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/htmllint-cli/node_modules/find-up": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/get-caller-file": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/htmllint-cli/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/has-flag": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/is-fullwidth-code-point": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/locate-path": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/p-limit": {
+      "version": "1.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-try": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/p-locate": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/path-exists": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/semver": {
+      "version": "5.7.2",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/string-width": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-fullwidth-code-point": "^2.0.0",
+        "strip-ansi": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/strip-ansi": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/supports-color": {
+      "version": "5.5.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/wrap-ansi": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/wrap-ansi/node_modules/ansi-regex": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "number-is-nan": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/wrap-ansi/node_modules/string-width": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "code-point-at": "^1.0.0",
+        "is-fullwidth-code-point": "^1.0.0",
+        "strip-ansi": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/wrap-ansi/node_modules/strip-ansi": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/y18n": {
+      "version": "3.2.2",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/htmllint-cli/node_modules/yargs": {
+      "version": "11.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cliui": "^4.0.0",
+        "decamelize": "^1.1.1",
+        "find-up": "^2.1.0",
+        "get-caller-file": "^1.0.1",
+        "os-locale": "^3.1.0",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^1.0.1",
+        "set-blocking": "^2.0.0",
+        "string-width": "^2.0.0",
+        "which-module": "^2.0.0",
+        "y18n": "^3.2.1",
+        "yargs-parser": "^9.0.2"
+      }
+    },
+    "node_modules/htmllint-cli/node_modules/yargs-parser": {
+      "version": "9.0.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "camelcase": "^4.1.0"
+      }
+    },
+    "node_modules/htmllint/node_modules/dom-serializer": {
+      "version": "0.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.0.1",
+        "entities": "^2.0.0"
+      }
+    },
+    "node_modules/htmllint/node_modules/dom-serializer/node_modules/domelementtype": {
+      "version": "2.3.0",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/htmllint/node_modules/dom-serializer/node_modules/entities": {
+      "version": "2.2.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/htmllint/node_modules/domelementtype": {
+      "version": "1.3.1",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/htmllint/node_modules/domhandler": {
+      "version": "2.4.2",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "domelementtype": "1"
+      }
+    },
+    "node_modules/htmllint/node_modules/domutils": {
+      "version": "1.7.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "node_modules/htmllint/node_modules/entities": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/htmllint/node_modules/htmlparser2": {
+      "version": "3.10.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
+      }
+    },
+    "node_modules/htmllint/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/htmlparser2": {
+      "version": "8.0.2",
+      "dev": true,
+      "funding": [
+        "https://github.com/fb55/htmlparser2?sponsor=1",
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3",
+        "domutils": "^3.0.1",
+        "entities": "^4.4.0"
+      }
+    },
+    "node_modules/http-auth": {
+      "version": "4.1.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "apache-crypt": "^1.1.2",
+        "apache-md5": "^1.0.6",
+        "bcryptjs": "^2.4.3",
+        "uuid": "^8.3.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/http-auth-connect": {
+      "version": "1.0.6",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/http-cache-semantics": {
+      "version": "4.1.1",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/http-deceiver": {
+      "version": "1.2.7",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/http-errors": {
+      "version": "1.7.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.1",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/http-errors/node_modules/inherits": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/http-parser-js": {
+      "version": "0.5.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/http-proxy": {
+      "version": "1.18.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eventemitter3": "^4.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/http-proxy-agent": {
+      "version": "5.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@tootallnate/once": "2",
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/http-proxy-middleware": {
+      "version": "2.0.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/http-proxy": "^1.17.8",
+        "http-proxy": "^1.18.1",
+        "is-glob": "^4.0.1",
+        "is-plain-obj": "^3.0.0",
+        "micromatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "peerDependencies": {
+        "@types/express": "^4.17.13"
+      },
+      "peerDependenciesMeta": {
+        "@types/express": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/http-proxy-middleware/node_modules/is-plain-obj": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/http-signature": {
+      "version": "1.3.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^2.0.2",
+        "sshpk": "^1.14.1"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/https-browserify": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/human-signals": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8.12.0"
+      }
+    },
+    "node_modules/humanize-ms": {
+      "version": "1.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.0.0"
+      }
+    },
+    "node_modules/i18next": {
+      "version": "21.10.0",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://locize.com"
+        },
+        {
+          "type": "individual",
+          "url": "https://locize.com/i18next.html"
+        },
+        {
+          "type": "individual",
+          "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.17.2"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/icss-utils": {
+      "version": "5.1.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/identity-obj-proxy": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "harmony-reflect": "^1.4.6"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/ignore": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/ignore-walk": {
+      "version": "6.0.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minimatch": "^9.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/ignore-walk/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/ignore-walk/node_modules/minimatch": {
+      "version": "9.0.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/image-size": {
+      "version": "0.5.5",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "bin": {
+        "image-size": "bin/image-size.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/immutable": {
+      "version": "4.3.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/import-fresh": {
+      "version": "3.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/import-fresh/node_modules/resolve-from": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/import-lazy": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/import-local": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "pkg-dir": "^4.2.0",
+        "resolve-cwd": "^3.0.0"
+      },
+      "bin": {
+        "import-local-fixture": "fixtures/cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/imurmurhash": {
+      "version": "0.1.4",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.19"
+      }
+    },
+    "node_modules/indent-string": {
+      "version": "3.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/inflight": {
+      "version": "1.0.6",
+      "license": "ISC",
+      "dependencies": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "license": "ISC"
+    },
+    "node_modules/ini": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/inline-source-map": {
+      "version": "0.6.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "source-map": "~0.5.3"
+      }
+    },
+    "node_modules/inline-source-map/node_modules/source-map": {
+      "version": "0.5.7",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/inquirer": {
+      "version": "8.2.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.1.1",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^3.0.0",
+        "external-editor": "^3.0.3",
+        "figures": "^3.0.0",
+        "lodash": "^4.17.21",
+        "mute-stream": "0.0.8",
+        "ora": "^5.4.1",
+        "run-async": "^2.4.0",
+        "rxjs": "^7.5.5",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0",
+        "through": "^2.3.6",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/inquirer/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/inquirer/node_modules/rxjs": {
+      "version": "7.8.1",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/insert-module-globals": {
+      "version": "7.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "acorn-node": "^1.5.2",
+        "combine-source-map": "^0.8.0",
+        "concat-stream": "^1.6.1",
+        "is-buffer": "^1.1.0",
+        "JSONStream": "^1.0.3",
+        "path-is-absolute": "^1.0.1",
+        "process": "~0.11.0",
+        "through2": "^2.0.0",
+        "undeclared-identifiers": "^1.1.2",
+        "xtend": "^4.0.0"
+      },
+      "bin": {
+        "insert-module-globals": "bin/cmd.js"
+      }
+    },
+    "node_modules/inside": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "Public Domain"
+    },
+    "node_modules/internal-slot": {
+      "version": "1.0.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-intrinsic": "^1.2.0",
+        "has": "^1.0.3",
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/invariant": {
+      "version": "2.2.4",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "node_modules/invert-kv": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/ip": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/ip-regex": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/is-absolute": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-relative": "^1.0.0",
+        "is-windows": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-accessor-descriptor": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-alphabetical": {
+      "version": "1.0.4",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/is-alphanumerical": {
+      "version": "1.0.4",
+      "license": "MIT",
+      "dependencies": {
+        "is-alphabetical": "^1.0.0",
+        "is-decimal": "^1.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/is-arguments": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-array-buffer": {
+      "version": "3.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.2.0",
+        "is-typed-array": "^1.1.10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-arrayish": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-bigint": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-bigints": "^1.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-boolean-object": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-buffer": {
+      "version": "1.1.6",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-callable": {
+      "version": "1.2.7",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-ci": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ci-info": "^3.2.0"
+      },
+      "bin": {
+        "is-ci": "bin.js"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.13.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-data-descriptor": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-date-object": {
+      "version": "1.0.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-decimal": {
+      "version": "1.0.4",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/is-descriptor": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-accessor-descriptor": "^1.0.0",
+        "is-data-descriptor": "^1.0.0",
+        "kind-of": "^6.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-directory": {
+      "version": "0.3.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-docker": {
+      "version": "2.2.1",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-dom": {
+      "version": "1.1.0",
+      "license": "MIT",
+      "dependencies": {
+        "is-object": "^1.0.1",
+        "is-window": "^1.0.2"
+      }
+    },
+    "node_modules/is-extendable": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-plain-object": "^2.0.4"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-generator": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-generator-fn": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/is-generator-function": {
+      "version": "1.0.10",
+      "dev": true,
+      "license": "MIT",
+      "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",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-hexadecimal": {
+      "version": "1.0.4",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/is-installed-globally": {
+      "version": "0.4.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "global-dirs": "^3.0.0",
+        "is-path-inside": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-interactive": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-lambda": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-negative-zero": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/is-number-object": {
+      "version": "1.0.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-object": {
+      "version": "1.0.2",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-path-inside": {
+      "version": "3.0.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-plain-object": {
+      "version": "2.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "isobject": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-potential-custom-element-name": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-regex": {
+      "version": "1.1.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-regexp": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/is-relative": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-unc-path": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-shared-array-buffer": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-stream": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-string": {
+      "version": "1.0.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-symbol": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-symbols": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-typed-array": {
+      "version": "1.1.12",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "which-typed-array": "^1.1.11"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-typedarray": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-unc-path": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "unc-path-regex": "^0.1.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-unicode-supported": {
+      "version": "0.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-weakref": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-what": {
+      "version": "3.14.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/is-window": {
+      "version": "1.0.2",
+      "license": "MIT"
+    },
+    "node_modules/is-windows": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-wsl": {
+      "version": "2.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-docker": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/isarray": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/isobject": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/isomorphic-form-data": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "form-data": "^2.3.2"
+      }
+    },
+    "node_modules/isstream": {
+      "version": "0.1.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/istanbul-lib-coverage": {
+      "version": "3.2.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/istanbul-lib-instrument": {
+      "version": "5.2.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@babel/core": "^7.12.3",
+        "@babel/parser": "^7.14.7",
+        "@istanbuljs/schema": "^0.1.2",
+        "istanbul-lib-coverage": "^3.2.0",
+        "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/istanbul-lib-instrument/node_modules/semver": {
+      "version": "6.3.1",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/istanbul-lib-report": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "istanbul-lib-coverage": "^3.0.0",
+        "make-dir": "^4.0.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/istanbul-lib-report/node_modules/make-dir": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/istanbul-lib-source-maps": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "debug": "^4.1.1",
+        "istanbul-lib-coverage": "^3.0.0",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/istanbul-lib-source-maps/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/istanbul-reports": {
+      "version": "3.1.6",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "html-escaper": "^2.0.0",
+        "istanbul-lib-report": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jackspeak": {
+      "version": "2.3.6",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/jake": {
+      "version": "10.8.7",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "async": "^3.2.3",
+        "chalk": "^4.0.2",
+        "filelist": "^1.0.4",
+        "minimatch": "^3.1.2"
+      },
+      "bin": {
+        "jake": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jake/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest": {
+      "version": "29.6.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/core": "^29.6.4",
+        "@jest/types": "^29.6.3",
+        "import-local": "^3.0.2",
+        "jest-cli": "^29.6.4"
+      },
+      "bin": {
+        "jest": "bin/jest.js"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-canvas-mock": {
+      "version": "2.4.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cssfontparser": "^1.2.1",
+        "moo-color": "^1.0.2"
+      }
+    },
+    "node_modules/jest-changed-files": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "execa": "^5.0.0",
+        "jest-util": "^29.7.0",
+        "p-limit": "^3.1.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-changed-files/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-changed-files/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-changed-files/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-changed-files/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-changed-files/node_modules/execa": {
+      "version": "5.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.0",
+        "human-signals": "^2.1.0",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.1",
+        "onetime": "^5.1.2",
+        "signal-exit": "^3.0.3",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/jest-changed-files/node_modules/get-stream": {
+      "version": "6.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-changed-files/node_modules/human-signals": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/jest-changed-files/node_modules/is-stream": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-changed-files/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/expect": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "co": "^4.6.0",
+        "dedent": "^1.0.0",
+        "is-generator-fn": "^2.0.0",
+        "jest-each": "^29.7.0",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-runtime": "^29.7.0",
+        "jest-snapshot": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "p-limit": "^3.1.0",
+        "pretty-format": "^29.7.0",
+        "pure-rand": "^6.0.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/console": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/environment": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/expect": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "expect": "^29.7.0",
+        "jest-snapshot": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/expect-utils": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jest-get-type": "^29.6.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/fake-timers": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@sinonjs/fake-timers": "^10.0.2",
+        "@types/node": "*",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/globals": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/expect": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/source-map": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.2.9"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/test-result": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/transform": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "babel-plugin-istanbul": "^6.1.1",
+        "chalk": "^4.0.0",
+        "convert-source-map": "^2.0.0",
+        "fast-json-stable-stringify": "^2.1.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "pirates": "^4.0.4",
+        "slash": "^3.0.0",
+        "write-file-atomic": "^4.0.2"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-circus/node_modules/@sinonjs/commons": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "type-detect": "4.0.8"
+      }
+    },
+    "node_modules/jest-circus/node_modules/@sinonjs/fake-timers": {
+      "version": "10.3.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@sinonjs/commons": "^3.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/camelcase": {
+      "version": "6.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-circus/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-circus/node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-circus/node_modules/diff-sequences": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/expect": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/expect-utils": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-diff": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^29.6.3",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-each": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-get-type": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-haste-map": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-matcher-utils": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-mock": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-regex-util": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-resolve": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-pnp-resolver": "^1.2.2",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "resolve": "^1.20.0",
+        "resolve.exports": "^2.0.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-runtime": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/globals": "^29.7.0",
+        "@jest/source-map": "^29.6.3",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "cjs-module-lexer": "^1.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-snapshot": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0",
+        "strip-bom": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-snapshot": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@babel/generator": "^7.7.2",
+        "@babel/plugin-syntax-jsx": "^7.7.2",
+        "@babel/plugin-syntax-typescript": "^7.7.2",
+        "@babel/types": "^7.3.3",
+        "@jest/expect-utils": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "babel-preset-current-node-syntax": "^1.0.0",
+        "chalk": "^4.0.0",
+        "expect": "^29.7.0",
+        "graceful-fs": "^4.2.9",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^29.7.0",
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-validate": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "camelcase": "^6.2.0",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^29.6.3",
+        "leven": "^3.1.0",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-worker": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "jest-util": "^29.7.0",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/jest-circus/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-circus/node_modules/resolve.exports": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-cli": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/core": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "chalk": "^4.0.0",
+        "create-jest": "^29.7.0",
+        "exit": "^0.1.2",
+        "import-local": "^3.0.2",
+        "jest-config": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "yargs": "^17.3.1"
+      },
+      "bin": {
+        "jest": "bin/jest.js"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+      },
+      "peerDependenciesMeta": {
+        "node-notifier": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-cli/node_modules/@jest/console": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/@jest/test-result": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-cli/node_modules/camelcase": {
+      "version": "6.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-cli/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-cli/node_modules/jest-get-type": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/jest-validate": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "camelcase": "^6.2.0",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^29.6.3",
+        "leven": "^3.1.0",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-config": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@jest/test-sequencer": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "babel-jest": "^29.7.0",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "deepmerge": "^4.2.2",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-circus": "^29.7.0",
+        "jest-environment-node": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-runner": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "parse-json": "^5.2.0",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "@types/node": "*",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-config/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-config/node_modules/camelcase": {
+      "version": "6.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-config/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-config/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/jest-config/node_modules/jest-get-type": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/jest-haste-map": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
+      }
+    },
+    "node_modules/jest-config/node_modules/jest-regex-util": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/jest-resolve": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-pnp-resolver": "^1.2.2",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "resolve": "^1.20.0",
+        "resolve.exports": "^2.0.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/jest-validate": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "camelcase": "^6.2.0",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^29.6.3",
+        "leven": "^3.1.0",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/jest-worker": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "jest-util": "^29.7.0",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/jest-config/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-config/node_modules/resolve.exports": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-diff": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^28.1.1",
+        "jest-get-type": "^28.0.2",
+        "pretty-format": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-diff/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-docblock": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "detect-newline": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-each": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^28.1.3",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^28.0.2",
+        "jest-util": "^28.1.3",
+        "pretty-format": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-each/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-environment-jsdom": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/jsdom": "^20.0.0",
+        "@types/node": "*",
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jsdom": "^20.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "canvas": "^2.5.0"
+      },
+      "peerDependenciesMeta": {
+        "canvas": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/@jest/environment": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/@jest/fake-timers": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@sinonjs/fake-timers": "^10.0.2",
+        "@types/node": "*",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-environment-jsdom/node_modules/@sinonjs/commons": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "type-detect": "4.0.8"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/@sinonjs/fake-timers": {
+      "version": "10.3.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@sinonjs/commons": "^3.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/jest-mock": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-jsdom/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-environment-node": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/@jest/environment": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/@jest/fake-timers": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@sinonjs/fake-timers": "^10.0.2",
+        "@types/node": "*",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-environment-node/node_modules/@sinonjs/commons": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "type-detect": "4.0.8"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/@sinonjs/fake-timers": {
+      "version": "10.3.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@sinonjs/commons": "^3.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/jest-mock": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-environment-node/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-get-type": {
+      "version": "28.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-haste-map": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^28.1.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^28.0.2",
+        "jest-util": "^28.1.3",
+        "jest-worker": "^28.1.3",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
+      }
+    },
+    "node_modules/jest-jasmine2": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^28.1.3",
+        "@jest/expect": "^28.1.3",
+        "@jest/source-map": "^28.1.2",
+        "@jest/test-result": "^28.1.3",
+        "@jest/types": "^28.1.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "co": "^4.6.0",
+        "is-generator-fn": "^2.0.0",
+        "jest-each": "^28.1.3",
+        "jest-matcher-utils": "^28.1.3",
+        "jest-message-util": "^28.1.3",
+        "jest-runtime": "^28.1.3",
+        "jest-snapshot": "^28.1.3",
+        "jest-util": "^28.1.3",
+        "p-limit": "^3.1.0",
+        "pretty-format": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-jasmine2/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-leak-detector": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-leak-detector/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-leak-detector/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-leak-detector/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-leak-detector/node_modules/jest-get-type": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-leak-detector/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-matcher-utils": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "jest-diff": "^28.1.3",
+        "jest-get-type": "^28.0.2",
+        "pretty-format": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-matcher-utils/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-message-util": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^28.1.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^28.1.3",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-message-util/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-mock": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^28.1.3",
+        "@types/node": "*"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-pnp-resolver": {
+      "version": "1.2.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      },
+      "peerDependencies": {
+        "jest-resolve": "*"
+      },
+      "peerDependenciesMeta": {
+        "jest-resolve": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jest-preset-angular": {
+      "version": "13.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bs-logger": "^0.2.6",
+        "esbuild-wasm": ">=0.13.8",
+        "jest-environment-jsdom": "^29.0.0",
+        "jest-util": "^29.0.0",
+        "pretty-format": "^29.0.0",
+        "ts-jest": "^29.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || >=16.10.0"
+      },
+      "optionalDependencies": {
+        "esbuild": ">=0.13.8"
+      },
+      "peerDependencies": {
+        "@angular-devkit/build-angular": ">=13.0.0 <17.0.0",
+        "@angular/compiler-cli": ">=13.0.0 <17.0.0",
+        "@angular/core": ">=13.0.0 <17.0.0",
+        "@angular/platform-browser-dynamic": ">=13.0.0 <17.0.0",
+        "jest": "^29.0.0",
+        "typescript": ">=4.4"
+      }
+    },
+    "node_modules/jest-preset-angular/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-preset-angular/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-preset-angular/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-preset-angular/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-preset-angular/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-preset-angular/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-preset-angular/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-regex-util": {
+      "version": "28.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-resolve": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^28.1.3",
+        "jest-pnp-resolver": "^1.2.2",
+        "jest-util": "^28.1.3",
+        "jest-validate": "^28.1.3",
+        "resolve": "^1.20.0",
+        "resolve.exports": "^1.1.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jest-regex-util": "^29.6.3",
+        "jest-snapshot": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/@jest/expect-utils": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jest-get-type": "^29.6.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/@jest/transform": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "babel-plugin-istanbul": "^6.1.1",
+        "chalk": "^4.0.0",
+        "convert-source-map": "^2.0.0",
+        "fast-json-stable-stringify": "^2.1.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "pirates": "^4.0.4",
+        "slash": "^3.0.0",
+        "write-file-atomic": "^4.0.2"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/diff-sequences": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/expect": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/expect-utils": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-diff": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^29.6.3",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-get-type": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-haste-map": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-matcher-utils": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-snapshot": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@babel/generator": "^7.7.2",
+        "@babel/plugin-syntax-jsx": "^7.7.2",
+        "@babel/plugin-syntax-typescript": "^7.7.2",
+        "@babel/types": "^7.3.3",
+        "@jest/expect-utils": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "babel-preset-current-node-syntax": "^1.0.0",
+        "chalk": "^4.0.0",
+        "expect": "^29.7.0",
+        "graceful-fs": "^4.2.9",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^29.7.0",
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-worker": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "jest-util": "^29.7.0",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-resolve-dependencies/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-resolve/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-runner": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/environment": "^29.7.0",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "emittery": "^0.13.1",
+        "graceful-fs": "^4.2.9",
+        "jest-docblock": "^29.7.0",
+        "jest-environment-node": "^29.7.0",
+        "jest-haste-map": "^29.7.0",
+        "jest-leak-detector": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-resolve": "^29.7.0",
+        "jest-runtime": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "jest-watcher": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "p-limit": "^3.1.0",
+        "source-map-support": "0.5.13"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/console": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/environment": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/expect": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "expect": "^29.7.0",
+        "jest-snapshot": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/expect-utils": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jest-get-type": "^29.6.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/fake-timers": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@sinonjs/fake-timers": "^10.0.2",
+        "@types/node": "*",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/globals": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/expect": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "jest-mock": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/source-map": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.2.9"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/test-result": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/transform": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@jest/types": "^29.6.3",
+        "@jridgewell/trace-mapping": "^0.3.18",
+        "babel-plugin-istanbul": "^6.1.1",
+        "chalk": "^4.0.0",
+        "convert-source-map": "^2.0.0",
+        "fast-json-stable-stringify": "^2.1.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "pirates": "^4.0.4",
+        "slash": "^3.0.0",
+        "write-file-atomic": "^4.0.2"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-runner/node_modules/@sinonjs/commons": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "type-detect": "4.0.8"
+      }
+    },
+    "node_modules/jest-runner/node_modules/@sinonjs/fake-timers": {
+      "version": "10.3.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@sinonjs/commons": "^3.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/camelcase": {
+      "version": "6.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-runner/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-runner/node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-runner/node_modules/diff-sequences": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/expect": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/expect-utils": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-diff": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "diff-sequences": "^29.6.3",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-get-type": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-haste-map": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/graceful-fs": "^4.1.3",
+        "@types/node": "*",
+        "anymatch": "^3.0.3",
+        "fb-watchman": "^2.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-regex-util": "^29.6.3",
+        "jest-util": "^29.7.0",
+        "jest-worker": "^29.7.0",
+        "micromatch": "^4.0.4",
+        "walker": "^1.0.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "^2.3.2"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-matcher-utils": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-mock": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "jest-util": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-regex-util": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-resolve": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-pnp-resolver": "^1.2.2",
+        "jest-util": "^29.7.0",
+        "jest-validate": "^29.7.0",
+        "resolve": "^1.20.0",
+        "resolve.exports": "^2.0.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-runtime": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^29.7.0",
+        "@jest/fake-timers": "^29.7.0",
+        "@jest/globals": "^29.7.0",
+        "@jest/source-map": "^29.6.3",
+        "@jest/test-result": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "cjs-module-lexer": "^1.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-mock": "^29.7.0",
+        "jest-regex-util": "^29.6.3",
+        "jest-resolve": "^29.7.0",
+        "jest-snapshot": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0",
+        "strip-bom": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-snapshot": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@babel/generator": "^7.7.2",
+        "@babel/plugin-syntax-jsx": "^7.7.2",
+        "@babel/plugin-syntax-typescript": "^7.7.2",
+        "@babel/types": "^7.3.3",
+        "@jest/expect-utils": "^29.7.0",
+        "@jest/transform": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "babel-preset-current-node-syntax": "^1.0.0",
+        "chalk": "^4.0.0",
+        "expect": "^29.7.0",
+        "graceful-fs": "^4.2.9",
+        "jest-diff": "^29.7.0",
+        "jest-get-type": "^29.6.3",
+        "jest-matcher-utils": "^29.7.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^29.7.0",
+        "semver": "^7.5.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-validate": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "camelcase": "^6.2.0",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^29.6.3",
+        "leven": "^3.1.0",
+        "pretty-format": "^29.7.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-worker": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "jest-util": "^29.7.0",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/jest-runner/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-runner/node_modules/resolve.exports": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jest-runner/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/jest-runner/node_modules/source-map-support": {
+      "version": "0.5.13",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
+      }
+    },
+    "node_modules/jest-runtime": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/environment": "^28.1.3",
+        "@jest/fake-timers": "^28.1.3",
+        "@jest/globals": "^28.1.3",
+        "@jest/source-map": "^28.1.2",
+        "@jest/test-result": "^28.1.3",
+        "@jest/transform": "^28.1.3",
+        "@jest/types": "^28.1.3",
+        "chalk": "^4.0.0",
+        "cjs-module-lexer": "^1.0.0",
+        "collect-v8-coverage": "^1.0.0",
+        "execa": "^5.0.0",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-haste-map": "^28.1.3",
+        "jest-message-util": "^28.1.3",
+        "jest-mock": "^28.1.3",
+        "jest-regex-util": "^28.0.2",
+        "jest-resolve": "^28.1.3",
+        "jest-snapshot": "^28.1.3",
+        "jest-util": "^28.1.3",
+        "slash": "^3.0.0",
+        "strip-bom": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/execa": {
+      "version": "5.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^6.0.0",
+        "human-signals": "^2.1.0",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.1",
+        "onetime": "^5.1.2",
+        "signal-exit": "^3.0.3",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/get-stream": {
+      "version": "6.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/human-signals": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10.17.0"
+      }
+    },
+    "node_modules/jest-runtime/node_modules/is-stream": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-silent-reporter": {
+      "version": "0.5.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "jest-util": "^26.0.0"
+      }
+    },
+    "node_modules/jest-silent-reporter/node_modules/@jest/types": {
+      "version": "26.6.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^15.0.0",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 10.14.2"
+      }
+    },
+    "node_modules/jest-silent-reporter/node_modules/@types/yargs": {
+      "version": "15.0.16",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/yargs-parser": "*"
+      }
+    },
+    "node_modules/jest-silent-reporter/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-silent-reporter/node_modules/ci-info": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-silent-reporter/node_modules/is-ci": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ci-info": "^2.0.0"
+      },
+      "bin": {
+        "is-ci": "bin.js"
+      }
+    },
+    "node_modules/jest-silent-reporter/node_modules/jest-util": {
+      "version": "26.6.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^26.6.2",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.4",
+        "is-ci": "^2.0.0",
+        "micromatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">= 10.14.2"
+      }
+    },
+    "node_modules/jest-snapshot": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.11.6",
+        "@babel/generator": "^7.7.2",
+        "@babel/plugin-syntax-typescript": "^7.7.2",
+        "@babel/traverse": "^7.7.2",
+        "@babel/types": "^7.3.3",
+        "@jest/expect-utils": "^28.1.3",
+        "@jest/transform": "^28.1.3",
+        "@jest/types": "^28.1.3",
+        "@types/babel__traverse": "^7.0.6",
+        "@types/prettier": "^2.1.5",
+        "babel-preset-current-node-syntax": "^1.0.0",
+        "chalk": "^4.0.0",
+        "expect": "^28.1.3",
+        "graceful-fs": "^4.2.9",
+        "jest-diff": "^28.1.3",
+        "jest-get-type": "^28.0.2",
+        "jest-haste-map": "^28.1.3",
+        "jest-matcher-utils": "^28.1.3",
+        "jest-message-util": "^28.1.3",
+        "jest-util": "^28.1.3",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^28.1.3",
+        "semver": "^7.3.5"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-snapshot/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-util": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^28.1.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-util/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-validate": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^28.1.3",
+        "camelcase": "^6.2.0",
+        "chalk": "^4.0.0",
+        "jest-get-type": "^28.0.2",
+        "leven": "^3.1.0",
+        "pretty-format": "^28.1.3"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-validate/node_modules/camelcase": {
+      "version": "6.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-validate/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-watcher": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/test-result": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.0.0",
+        "emittery": "^0.13.1",
+        "jest-util": "^29.7.0",
+        "string-length": "^4.0.1"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/@jest/console": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "jest-message-util": "^29.7.0",
+        "jest-util": "^29.7.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/@jest/test-result": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/console": "^29.7.0",
+        "@jest/types": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "collect-v8-coverage": "^1.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest-watcher/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/jest-message-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.12.13",
+        "@jest/types": "^29.6.3",
+        "@types/stack-utils": "^2.0.0",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.9",
+        "micromatch": "^4.0.4",
+        "pretty-format": "^29.7.0",
+        "slash": "^3.0.0",
+        "stack-utils": "^2.0.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/pretty-format": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest-watcher/node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/jest-worker": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/jest-worker/node_modules/supports-color": {
+      "version": "8.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/jest/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
+    },
+    "node_modules/jest/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jest/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jju": {
+      "version": "1.4.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/joi": {
+      "version": "17.10.2",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@hapi/hoek": "^9.0.0",
+        "@hapi/topo": "^5.0.0",
+        "@sideway/address": "^4.1.3",
+        "@sideway/formula": "^3.0.1",
+        "@sideway/pinpoint": "^2.0.0"
+      }
+    },
+    "node_modules/js-file-download": {
+      "version": "0.4.12",
+      "license": "MIT"
+    },
+    "node_modules/js-string-escape": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "license": "MIT"
+    },
+    "node_modules/js-yaml": {
+      "version": "3.14.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/jsbn": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jsdom": {
+      "version": "20.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "abab": "^2.0.6",
+        "acorn": "^8.8.1",
+        "acorn-globals": "^7.0.0",
+        "cssom": "^0.5.0",
+        "cssstyle": "^2.3.0",
+        "data-urls": "^3.0.2",
+        "decimal.js": "^10.4.2",
+        "domexception": "^4.0.0",
+        "escodegen": "^2.0.0",
+        "form-data": "^4.0.0",
+        "html-encoding-sniffer": "^3.0.0",
+        "http-proxy-agent": "^5.0.0",
+        "https-proxy-agent": "^5.0.1",
+        "is-potential-custom-element-name": "^1.0.1",
+        "nwsapi": "^2.2.2",
+        "parse5": "^7.1.1",
+        "saxes": "^6.0.0",
+        "symbol-tree": "^3.2.4",
+        "tough-cookie": "^4.1.2",
+        "w3c-xmlserializer": "^4.0.0",
+        "webidl-conversions": "^7.0.0",
+        "whatwg-encoding": "^2.0.0",
+        "whatwg-mimetype": "^3.0.0",
+        "whatwg-url": "^11.0.0",
+        "ws": "^8.11.0",
+        "xml-name-validator": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "canvas": "^2.5.0"
+      },
+      "peerDependenciesMeta": {
+        "canvas": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jsdom/node_modules/acorn": {
+      "version": "8.10.0",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/jsdom/node_modules/acorn-globals": {
+      "version": "7.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "acorn": "^8.1.0",
+        "acorn-walk": "^8.0.2"
+      }
+    },
+    "node_modules/jsdom/node_modules/acorn-walk": {
+      "version": "8.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/jsdom/node_modules/cssom": {
+      "version": "0.5.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jsdom/node_modules/data-urls": {
+      "version": "3.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "abab": "^2.0.6",
+        "whatwg-mimetype": "^3.0.0",
+        "whatwg-url": "^11.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsdom/node_modules/domexception": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "webidl-conversions": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsdom/node_modules/escodegen": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esprima": "^4.0.1",
+        "estraverse": "^5.2.0",
+        "esutils": "^2.0.2"
+      },
+      "bin": {
+        "escodegen": "bin/escodegen.js",
+        "esgenerate": "bin/esgenerate.js"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "optionalDependencies": {
+        "source-map": "~0.6.1"
+      }
+    },
+    "node_modules/jsdom/node_modules/estraverse": {
+      "version": "5.3.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/jsdom/node_modules/form-data": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/jsdom/node_modules/html-encoding-sniffer": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "whatwg-encoding": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsdom/node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/jsdom/node_modules/parse5": {
+      "version": "7.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^4.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/jsdom/node_modules/punycode": {
+      "version": "2.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jsdom/node_modules/saxes": {
+      "version": "6.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "xmlchars": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=v12.22.7"
+      }
+    },
+    "node_modules/jsdom/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/jsdom/node_modules/tough-cookie": {
+      "version": "4.1.3",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jsdom/node_modules/tr46": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "punycode": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsdom/node_modules/universalify": {
+      "version": "0.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/jsdom/node_modules/w3c-xmlserializer": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "xml-name-validator": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/jsdom/node_modules/webidl-conversions": {
+      "version": "7.0.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsdom/node_modules/whatwg-encoding": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "iconv-lite": "0.6.3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsdom/node_modules/whatwg-mimetype": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsdom/node_modules/whatwg-url": {
+      "version": "11.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "tr46": "^3.0.0",
+        "webidl-conversions": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsdom/node_modules/ws": {
+      "version": "8.14.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/jsdom/node_modules/xml-name-validator": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/jsesc": {
+      "version": "2.5.2",
+      "license": "MIT",
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/json-buffer": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-parse-better-errors": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-parse-helpfulerror": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jju": "^1.1.0"
+      }
+    },
+    "node_modules/json-schema": {
+      "version": "0.4.0",
+      "dev": true,
+      "license": "(AFL-2.1 OR BSD-3-Clause)"
+    },
+    "node_modules/json-schema-traverse": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-stable-stringify": {
+      "version": "0.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jsonify": "~0.0.0"
+      }
+    },
+    "node_modules/json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-stringify-safe": {
+      "version": "5.0.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "license": "MIT",
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jsonc-parser": {
+      "version": "3.2.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jsonfile": {
+      "version": "6.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "universalify": "^2.0.0"
+      },
+      "optionalDependencies": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "node_modules/jsonify": {
+      "version": "0.0.1",
+      "dev": true,
+      "license": "Public Domain",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/jsonparse": {
+      "version": "1.3.1",
+      "dev": true,
+      "engines": [
+        "node >= 0.2.0"
+      ],
+      "license": "MIT"
+    },
+    "node_modules/JSONStream": {
+      "version": "1.3.5",
+      "dev": true,
+      "license": "(MIT OR Apache-2.0)",
+      "dependencies": {
+        "jsonparse": "^1.2.0",
+        "through": ">=2.2.7 <3"
+      },
+      "bin": {
+        "JSONStream": "bin.js"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/jsprim": {
+      "version": "2.0.2",
+      "dev": true,
+      "engines": [
+        "node >=0.6.0"
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.4.0",
+        "verror": "1.10.0"
+      }
+    },
+    "node_modules/jsprim/node_modules/core-util-is": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/jsprim/node_modules/verror": {
+      "version": "1.10.0",
+      "dev": true,
+      "engines": [
+        "node >=0.6.0"
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "node_modules/karma-source-map-support": {
+      "version": "1.4.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "source-map-support": "^0.5.5"
+      }
+    },
+    "node_modules/keyv": {
+      "version": "4.5.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "json-buffer": "3.0.1"
+      }
+    },
+    "node_modules/kind-of": {
+      "version": "6.0.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/kleur": {
+      "version": "3.0.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/klona": {
+      "version": "2.0.6",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/known-css-properties": {
+      "version": "0.21.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/knuth-shuffle-seeded": {
+      "version": "1.0.6",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "seed-random": "~2.2.0"
+      }
+    },
+    "node_modules/labeled-stream-splicer": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "stream-splicer": "^2.0.0"
+      }
+    },
+    "node_modules/lazy-ass": {
+      "version": "1.6.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "> 0.8"
+      }
+    },
+    "node_modules/lcid": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "invert-kv": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/less": {
+      "version": "4.1.3",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "copy-anything": "^2.0.1",
+        "parse-node-version": "^1.0.1",
+        "tslib": "^2.3.0"
+      },
+      "bin": {
+        "lessc": "bin/lessc"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "optionalDependencies": {
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "make-dir": "^2.1.0",
+        "mime": "^1.4.1",
+        "needle": "^3.1.0",
+        "source-map": "~0.6.0"
+      }
+    },
+    "node_modules/less-loader": {
+      "version": "11.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "klona": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "less": "^3.5.0 || ^4.0.0",
+        "webpack": "^5.0.0"
+      }
+    },
+    "node_modules/less/node_modules/make-dir": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/less/node_modules/pify": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/less/node_modules/semver": {
+      "version": "5.7.2",
+      "dev": true,
+      "license": "ISC",
+      "optional": true,
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/less/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/leven": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/levn": {
+      "version": "0.4.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/license-webpack-plugin": {
+      "version": "4.0.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "webpack-sources": "^3.0.0"
+      },
+      "peerDependenciesMeta": {
+        "webpack": {
+          "optional": true
+        },
+        "webpack-sources": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/liftoff": {
+      "version": "2.5.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "extend": "^3.0.0",
+        "findup-sync": "^2.0.0",
+        "fined": "^1.0.1",
+        "flagged-respawn": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "object.map": "^1.0.0",
+        "rechoir": "^0.6.2",
+        "resolve": "^1.1.7"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/listr2": {
+      "version": "3.14.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cli-truncate": "^2.1.0",
+        "colorette": "^2.0.16",
+        "log-update": "^4.0.0",
+        "p-map": "^4.0.0",
+        "rfdc": "^1.3.0",
+        "rxjs": "^7.5.1",
+        "through": "^2.3.8",
+        "wrap-ansi": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "enquirer": ">= 2.3.0 < 3"
+      },
+      "peerDependenciesMeta": {
+        "enquirer": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/listr2/node_modules/rxjs": {
+      "version": "7.8.1",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/load-json-file": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^4.0.0",
+        "pify": "^3.0.0",
+        "strip-bom": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/load-json-file/node_modules/parse-json": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "error-ex": "^1.3.1",
+        "json-parse-better-errors": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/load-json-file/node_modules/pify": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/load-json-file/node_modules/strip-bom": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/loader-runner": {
+      "version": "4.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.11.5"
+      }
+    },
+    "node_modules/loader-utils": {
+      "version": "3.2.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 12.13.0"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "5.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "license": "MIT"
+    },
+    "node_modules/lodash-es": {
+      "version": "4.17.21",
+      "license": "MIT"
+    },
+    "node_modules/lodash.clonedeep": {
+      "version": "4.5.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.debounce": {
+      "version": "4.0.8",
+      "license": "MIT"
+    },
+    "node_modules/lodash.flatten": {
+      "version": "4.4.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.mapvalues": {
+      "version": "4.6.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.memoize": {
+      "version": "3.0.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.once": {
+      "version": "4.1.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.sortby": {
+      "version": "4.7.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lodash.throttle": {
+      "version": "4.1.1",
+      "license": "MIT"
+    },
+    "node_modules/lodash.truncate": {
+      "version": "4.4.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/log-symbols": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^4.1.0",
+        "is-unicode-supported": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/log-symbols/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/log-update": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "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/log-update/node_modules/slice-ansi": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "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/log-update/node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/loglevel": {
+      "version": "1.8.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      },
+      "funding": {
+        "type": "tidelift",
+        "url": "https://tidelift.com/funding/github/npm/loglevel"
+      }
+    },
+    "node_modules/loglevel-plugin-prefix": {
+      "version": "0.8.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/long": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/longest-streak": {
+      "version": "2.0.4",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "license": "MIT",
+      "dependencies": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      },
+      "bin": {
+        "loose-envify": "cli.js"
+      }
+    },
+    "node_modules/loupe": {
+      "version": "2.3.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-func-name": "^2.0.0"
+      }
+    },
+    "node_modules/lower-case": {
+      "version": "1.1.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/lowlight": {
+      "version": "1.20.0",
+      "license": "MIT",
+      "dependencies": {
+        "fault": "^1.0.0",
+        "highlight.js": "~10.7.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "node_modules/lunr": {
+      "version": "2.3.9",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/macos-release": {
+      "version": "2.5.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.29.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.4.13"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/make-dir": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "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.1",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/make-error": {
+      "version": "1.3.6",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/make-fetch-happen": {
+      "version": "11.1.1",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "agentkeepalive": "^4.2.1",
+        "cacache": "^17.0.0",
+        "http-cache-semantics": "^4.1.1",
+        "http-proxy-agent": "^5.0.0",
+        "https-proxy-agent": "^5.0.0",
+        "is-lambda": "^1.0.1",
+        "lru-cache": "^7.7.1",
+        "minipass": "^5.0.0",
+        "minipass-fetch": "^3.0.0",
+        "minipass-flush": "^1.0.5",
+        "minipass-pipeline": "^1.2.4",
+        "negotiator": "^0.6.3",
+        "promise-retry": "^2.0.1",
+        "socks-proxy-agent": "^7.0.0",
+        "ssri": "^10.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/make-fetch-happen/node_modules/lru-cache": {
+      "version": "7.18.3",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/make-fetch-happen/node_modules/minipass": {
+      "version": "5.0.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/make-iterator": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^6.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/makeerror": {
+      "version": "1.0.12",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "tmpl": "1.0.5"
+      }
+    },
+    "node_modules/map-age-cleaner": {
+      "version": "0.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-defer": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/map-cache": {
+      "version": "0.2.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/map-obj": {
+      "version": "4.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/map-stream": {
+      "version": "0.0.7",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/map-visit": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "object-visit": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/marked": {
+      "version": "4.3.0",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "marked": "bin/marked.js"
+      },
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/mathml-tag-names": {
+      "version": "2.1.3",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/md5": {
+      "version": "2.3.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "charenc": "0.0.2",
+        "crypt": "0.0.2",
+        "is-buffer": "~1.1.6"
+      }
+    },
+    "node_modules/md5.js": {
+      "version": "1.3.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "node_modules/mdast-util-from-markdown": {
+      "version": "0.8.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^3.0.0",
+        "mdast-util-to-string": "^2.0.0",
+        "micromark": "~2.11.0",
+        "parse-entities": "^2.0.0",
+        "unist-util-stringify-position": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-to-markdown": {
+      "version": "0.6.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^2.0.0",
+        "longest-streak": "^2.0.0",
+        "mdast-util-to-string": "^2.0.0",
+        "parse-entities": "^2.0.0",
+        "repeat-string": "^1.0.0",
+        "zwitch": "^1.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-to-string": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdn-data": {
+      "version": "2.0.6",
+      "dev": true,
+      "license": "CC0-1.0"
+    },
+    "node_modules/media-typer": {
+      "version": "0.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mem": {
+      "version": "4.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "map-age-cleaner": "^0.1.1",
+        "mimic-fn": "^2.0.0",
+        "p-is-promise": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/memfs": {
+      "version": "3.5.3",
+      "dev": true,
+      "license": "Unlicense",
+      "dependencies": {
+        "fs-monkey": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/memorystream": {
+      "version": "0.3.1",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.10.0"
+      }
+    },
+    "node_modules/meow": {
+      "version": "9.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/minimist": "^1.2.0",
+        "camelcase-keys": "^6.2.2",
+        "decamelize": "^1.2.0",
+        "decamelize-keys": "^1.1.0",
+        "hard-rejection": "^2.1.0",
+        "minimist-options": "4.1.0",
+        "normalize-package-data": "^3.0.0",
+        "read-pkg-up": "^7.0.1",
+        "redent": "^3.0.0",
+        "trim-newlines": "^3.0.0",
+        "type-fest": "^0.18.0",
+        "yargs-parser": "^20.2.3"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/hosted-git-info": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/normalize-package-data": {
+      "version": "3.0.3",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "hosted-git-info": "^4.0.1",
+        "is-core-module": "^2.5.0",
+        "semver": "^7.3.4",
+        "validate-npm-package-license": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/meow/node_modules/type-fest": {
+      "version": "0.18.1",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/meow/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/meow/node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/merge-descriptors": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/merge-source-map": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "source-map": "^0.5.6"
+      }
+    },
+    "node_modules/merge-source-map/node_modules/source-map": {
+      "version": "0.5.7",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/merge-stream": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/methods": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/micromark": {
+      "version": "2.11.4",
+      "dev": true,
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^4.0.0",
+        "parse-entities": "^2.0.0"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "braces": "^3.0.2",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/miller-rabin": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      },
+      "bin": {
+        "miller-rabin": "bin/miller-rabin"
+      }
+    },
+    "node_modules/miller-rabin/node_modules/bn.js": {
+      "version": "4.12.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/mime": {
+      "version": "1.6.0",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mime-db": {
+      "version": "1.44.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.27",
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.44.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mimic-fn": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/min-indent": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/mini-css-extract-plugin": {
+      "version": "2.7.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "schema-utils": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 12.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.0.0"
+      }
+    },
+    "node_modules/minim": {
+      "version": "0.23.8",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.15.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/minimalistic-assert": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/minimatch": {
+      "version": "3.1.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/minimist-options": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "arrify": "^1.0.1",
+        "is-plain-obj": "^1.1.0",
+        "kind-of": "^6.0.3"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/minimist-options/node_modules/arrify": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "4.2.8",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-collect": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minipass-collect/node_modules/minipass": {
+      "version": "3.3.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-collect/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minipass-fetch": {
+      "version": "3.0.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minipass": "^7.0.3",
+        "minipass-sized": "^1.0.3",
+        "minizlib": "^2.1.2"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      },
+      "optionalDependencies": {
+        "encoding": "^0.1.13"
+      }
+    },
+    "node_modules/minipass-fetch/node_modules/minipass": {
+      "version": "7.0.4",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/minipass-flush": {
+      "version": "1.0.5",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minipass-flush/node_modules/minipass": {
+      "version": "3.3.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-flush/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minipass-json-stream": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "jsonparse": "^1.3.1",
+        "minipass": "^3.0.0"
+      }
+    },
+    "node_modules/minipass-json-stream/node_modules/minipass": {
+      "version": "3.3.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-json-stream/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minipass-pipeline": {
+      "version": "1.2.4",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-pipeline/node_modules/minipass": {
+      "version": "3.3.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-pipeline/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minipass-sized": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-sized/node_modules/minipass": {
+      "version": "3.3.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minipass-sized/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/minizlib": {
+      "version": "2.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/minizlib/node_modules/minipass": {
+      "version": "3.3.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/minizlib/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/mixin-deep": {
+      "version": "1.3.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "0.5.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minimist": "^1.2.5"
+      },
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      }
+    },
+    "node_modules/mkdirp-classic": {
+      "version": "0.5.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/mobx": {
+      "version": "4.14.1",
+      "license": "MIT"
+    },
+    "node_modules/mocha-junit-reporter": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^2.2.0",
+        "md5": "^2.1.0",
+        "mkdirp": "~0.5.1",
+        "strip-ansi": "^6.0.1",
+        "xml": "^1.0.0"
+      },
+      "peerDependencies": {
+        "mocha": ">=2.2.5"
+      }
+    },
+    "node_modules/mocha-junit-reporter/node_modules/debug": {
+      "version": "2.6.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/mocha-junit-reporter/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/module-deps": {
+      "version": "6.2.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "browser-resolve": "^2.0.0",
+        "cached-path-relative": "^1.0.2",
+        "concat-stream": "~1.6.0",
+        "defined": "^1.0.0",
+        "detective": "^5.2.0",
+        "duplexer2": "^0.1.2",
+        "inherits": "^2.0.1",
+        "JSONStream": "^1.0.3",
+        "parents": "^1.0.0",
+        "readable-stream": "^2.0.2",
+        "resolve": "^1.4.0",
+        "stream-combiner2": "^1.1.1",
+        "subarg": "^1.0.0",
+        "through2": "^2.0.0",
+        "xtend": "^4.0.0"
+      },
+      "bin": {
+        "module-deps": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/moment": {
+      "version": "2.29.4",
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/moo-color": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "^1.1.4"
+      }
+    },
+    "node_modules/morgan": {
+      "version": "1.10.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "basic-auth": "~2.0.1",
+        "debug": "2.6.9",
+        "depd": "~2.0.0",
+        "on-finished": "~2.3.0",
+        "on-headers": "~1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/morgan/node_modules/debug": {
+      "version": "2.6.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
+    },
+    "node_modules/morgan/node_modules/depd": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/morgan/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/mri": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "license": "MIT"
+    },
+    "node_modules/multicast-dns": {
+      "version": "7.2.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "dns-packet": "^5.2.2",
+        "thunky": "^1.0.2"
+      },
+      "bin": {
+        "multicast-dns": "cli.js"
+      }
+    },
+    "node_modules/multimatch": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/minimatch": "^3.0.3",
+        "array-differ": "^3.0.0",
+        "array-union": "^2.1.0",
+        "arrify": "^2.0.1",
+        "minimatch": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/mute-stream": {
+      "version": "0.0.8",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/mz": {
+      "version": "2.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.6",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/nanomatch": {
+      "version": "1.2.13",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/natural-compare": {
+      "version": "1.4.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/needle": {
+      "version": "3.2.0",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "debug": "^3.2.6",
+        "iconv-lite": "^0.6.3",
+        "sax": "^1.2.4"
+      },
+      "bin": {
+        "needle": "bin/needle"
+      },
+      "engines": {
+        "node": ">= 4.4.x"
+      }
+    },
+    "node_modules/needle/node_modules/debug": {
+      "version": "3.2.7",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/needle/node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/negotiator": {
+      "version": "0.6.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/neo-async": {
+      "version": "2.6.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/next-tick": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/ng-block-ui": {
+      "version": "3.0.2",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^1.10.0"
+      }
+    },
+    "node_modules/ng-block-ui/node_modules/tslib": {
+      "version": "1.14.1",
+      "license": "0BSD"
+    },
+    "node_modules/ng-click-outside": {
+      "version": "7.0.0",
+      "license": "MIT",
+      "peerDependencies": {
+        "@angular/common": ">=10.0.0",
+        "@angular/core": ">=10.0.0"
+      }
+    },
+    "node_modules/ng-mocks": {
+      "version": "14.3.0",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/satanTime"
+      },
+      "peerDependencies": {
+        "@angular/common": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15",
+        "@angular/core": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15",
+        "@angular/forms": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15",
+        "@angular/platform-browser": "5.0.0-alpha - 5 || 6.0.0-alpha - 6 || 7.0.0-alpha - 7 || 8.0.0-alpha - 8 || 9.0.0-alpha - 9 || 10.0.0-alpha - 10 || 11.0.0-alpha - 11 || 12.0.0-alpha - 12 || 13.0.0-alpha - 13 || 14.0.0-alpha - 14 || 15.0.0-alpha - 15"
+      }
+    },
+    "node_modules/ng2-charts": {
+      "version": "2.4.2",
+      "license": "ISC",
+      "dependencies": {
+        "@types/chart.js": "^2.9.24",
+        "lodash-es": "^4.17.15",
+        "tslib": "^2.0.0"
+      },
+      "peerDependencies": {
+        "@angular/common": ">=7.2.0",
+        "@angular/core": ">=7.2.0",
+        "chart.js": "^2.9.3",
+        "rxjs": "^6.3.3"
+      }
+    },
+    "node_modules/ngx-pipe-function": {
+      "version": "1.0.0",
+      "dependencies": {
+        "tslib": "^1.9.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "^7.1.0",
+        "@angular/core": "^7.1.0"
+      }
+    },
+    "node_modules/ngx-pipe-function/node_modules/tslib": {
+      "version": "1.14.1",
+      "license": "0BSD"
+    },
+    "node_modules/ngx-toastr": {
+      "version": "17.0.2",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.3.0"
+      },
+      "peerDependencies": {
+        "@angular/common": ">=16.0.0-0",
+        "@angular/core": ">=16.0.0-0",
+        "@angular/platform-browser": ">=16.0.0-0"
+      }
+    },
+    "node_modules/nice-napi": {
+      "version": "1.0.2",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "!win32"
+      ],
+      "dependencies": {
+        "node-addon-api": "^3.0.0",
+        "node-gyp-build": "^4.2.2"
+      }
+    },
+    "node_modules/nice-try": {
+      "version": "1.0.5",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/no-case": {
+      "version": "2.3.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "lower-case": "^1.1.1"
+      }
+    },
+    "node_modules/node-abort-controller": {
+      "version": "3.1.1",
+      "license": "MIT"
+    },
+    "node_modules/node-addon-api": {
+      "version": "3.2.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/node-domexception": {
+      "version": "1.0.0",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/jimmywarting"
+        },
+        {
+          "type": "github",
+          "url": "https://paypal.me/jimmywarting"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.5.0"
+      }
+    },
+    "node_modules/node-fetch": {
+      "version": "2.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "whatwg-url": "^5.0.0"
+      },
+      "engines": {
+        "node": "4.x || >=6.0.0"
+      },
+      "peerDependencies": {
+        "encoding": "^0.1.0"
+      },
+      "peerDependenciesMeta": {
+        "encoding": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/node-fetch-commonjs": {
+      "version": "3.3.2",
+      "license": "MIT",
+      "dependencies": {
+        "node-domexception": "^1.0.0",
+        "web-streams-polyfill": "^3.0.3"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/node-fetch"
+      }
+    },
+    "node_modules/node-fetch/node_modules/tr46": {
+      "version": "0.0.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/node-fetch/node_modules/webidl-conversions": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/node-fetch/node_modules/whatwg-url": {
+      "version": "5.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "tr46": "~0.0.3",
+        "webidl-conversions": "^3.0.0"
+      }
+    },
+    "node_modules/node-forge": {
+      "version": "1.3.1",
+      "dev": true,
+      "license": "(BSD-3-Clause OR GPL-2.0)",
+      "engines": {
+        "node": ">= 6.13.0"
+      }
+    },
+    "node_modules/node-gyp": {
+      "version": "9.4.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "env-paths": "^2.2.0",
+        "exponential-backoff": "^3.1.1",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.2.6",
+        "make-fetch-happen": "^11.0.3",
+        "nopt": "^6.0.0",
+        "npmlog": "^6.0.0",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.5",
+        "tar": "^6.1.2",
+        "which": "^2.0.2"
+      },
+      "bin": {
+        "node-gyp": "bin/node-gyp.js"
+      },
+      "engines": {
+        "node": "^12.13 || ^14.13 || >=16"
+      }
+    },
+    "node_modules/node-gyp-build": {
+      "version": "4.6.1",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "node-gyp-build": "bin.js",
+        "node-gyp-build-optional": "optional.js",
+        "node-gyp-build-test": "build-test.js"
+      }
+    },
+    "node_modules/node-gyp/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/node-int64": {
+      "version": "0.4.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.13",
+      "license": "MIT"
+    },
+    "node_modules/nopt": {
+      "version": "6.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "abbrev": "^1.0.0"
+      },
+      "bin": {
+        "nopt": "bin/nopt.js"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/normalize-package-data": {
+      "version": "5.0.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "hosted-git-info": "^6.0.0",
+        "is-core-module": "^2.8.1",
+        "semver": "^7.3.5",
+        "validate-npm-package-license": "^3.0.4"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/normalize-range": {
+      "version": "0.1.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/normalize-selector": {
+      "version": "0.2.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/npm-bundled": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "npm-normalize-package-bin": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/npm-install-checks": {
+      "version": "6.2.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "semver": "^7.1.1"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/npm-normalize-package-bin": {
+      "version": "3.0.1",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/npm-package-arg": {
+      "version": "10.1.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "hosted-git-info": "^6.0.0",
+        "proc-log": "^3.0.0",
+        "semver": "^7.3.5",
+        "validate-npm-package-name": "^5.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/npm-packlist": {
+      "version": "7.0.4",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "ignore-walk": "^6.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/npm-pick-manifest": {
+      "version": "8.0.1",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "npm-install-checks": "^6.0.0",
+        "npm-normalize-package-bin": "^3.0.0",
+        "npm-package-arg": "^10.0.0",
+        "semver": "^7.3.5"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/npm-registry-fetch": {
+      "version": "14.0.5",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "make-fetch-happen": "^11.0.0",
+        "minipass": "^5.0.0",
+        "minipass-fetch": "^3.0.0",
+        "minipass-json-stream": "^1.0.1",
+        "minizlib": "^2.1.2",
+        "npm-package-arg": "^10.0.0",
+        "proc-log": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/npm-registry-fetch/node_modules/minipass": {
+      "version": "5.0.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/npm-run-all": {
+      "version": "4.1.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "chalk": "^2.4.1",
+        "cross-spawn": "^6.0.5",
+        "memorystream": "^0.3.1",
+        "minimatch": "^3.0.4",
+        "pidtree": "^0.3.0",
+        "read-pkg": "^3.0.0",
+        "shell-quote": "^1.6.1",
+        "string.prototype.padend": "^3.0.0"
+      },
+      "bin": {
+        "npm-run-all": "bin/npm-run-all/index.js",
+        "run-p": "bin/run-p/index.js",
+        "run-s": "bin/run-s/index.js"
+      },
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/chalk": {
+      "version": "2.4.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/color-convert": {
+      "version": "1.9.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/color-name": {
+      "version": "1.1.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/npm-run-all/node_modules/cross-spawn": {
+      "version": "6.0.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      },
+      "engines": {
+        "node": ">=4.8"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/has-flag": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/path-key": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/semver": {
+      "version": "5.7.2",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/shebang-command": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/shebang-regex": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/supports-color": {
+      "version": "5.5.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/npm-run-all/node_modules/which": {
+      "version": "1.3.1",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
+    },
+    "node_modules/npm-run-path": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/npmlog": {
+      "version": "6.0.2",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "are-we-there-yet": "^3.0.0",
+        "console-control-strings": "^1.1.0",
+        "gauge": "^4.0.3",
+        "set-blocking": "^2.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+      }
+    },
+    "node_modules/nth-check": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/nth-check?sponsor=1"
+      }
+    },
+    "node_modules/num2fraction": {
+      "version": "1.2.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/number-is-nan": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/nwsapi": {
+      "version": "2.2.7",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/nx": {
+      "version": "13.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nrwl/cli": "*"
+      },
+      "bin": {
+        "nx": "bin/nx.js"
+      }
+    },
+    "node_modules/oauth-sign": {
+      "version": "0.9.0",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy": {
+      "version": "0.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy/node_modules/define-property": {
+      "version": "0.2.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
+      "version": "5.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy/node_modules/kind-of": {
+      "version": "3.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-inspect": {
+      "version": "1.12.3",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object-is": {
+      "version": "1.1.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object-keys": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object-visit": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "isobject": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object.assign": {
+      "version": "4.1.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "has-symbols": "^1.0.3",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object.defaults": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-each": "^1.0.1",
+        "array-slice": "^1.0.0",
+        "for-own": "^1.0.0",
+        "isobject": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object.map": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "for-own": "^1.0.0",
+        "make-iterator": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object.pick": {
+      "version": "1.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "isobject": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/obuf": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/on-finished": {
+      "version": "2.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/on-headers": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "license": "ISC",
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/onetime": {
+      "version": "5.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mimic-fn": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/open": {
+      "version": "8.4.1",
+      "dev": true,
+      "license": "MIT",
+      "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/opencollective-postinstall": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "opencollective-postinstall": "index.js"
+      }
+    },
+    "node_modules/optionator": {
+      "version": "0.8.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.6",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "word-wrap": "~1.2.3"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/optionator/node_modules/levn": {
+      "version": "0.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/optionator/node_modules/prelude-ls": {
+      "version": "1.1.2",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/optionator/node_modules/type-check": {
+      "version": "0.3.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "prelude-ls": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/ora": {
+      "version": "5.4.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bl": "^4.1.0",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-spinners": "^2.5.0",
+        "is-interactive": "^1.0.0",
+        "is-unicode-supported": "^0.1.0",
+        "log-symbols": "^4.1.0",
+        "strip-ansi": "^6.0.0",
+        "wcwidth": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/os-browserify": {
+      "version": "0.3.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/os-locale": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "execa": "^1.0.0",
+        "lcid": "^2.0.0",
+        "mem": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/os-locale/node_modules/cross-spawn": {
+      "version": "6.0.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      },
+      "engines": {
+        "node": ">=4.8"
+      }
+    },
+    "node_modules/os-locale/node_modules/execa": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/os-locale/node_modules/get-stream": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "pump": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/os-locale/node_modules/npm-run-path": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/os-locale/node_modules/path-key": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/os-locale/node_modules/semver": {
+      "version": "5.7.2",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/os-locale/node_modules/shebang-command": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/os-locale/node_modules/shebang-regex": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/os-locale/node_modules/which": {
+      "version": "1.3.1",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
+    },
+    "node_modules/os-name": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "macos-release": "^2.5.0",
+        "windows-release": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/os-tmpdir": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/ospath": {
+      "version": "1.2.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/outpipe": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "shell-quote": "^1.4.2"
+      }
+    },
+    "node_modules/p-defer": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/p-finally": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/p-is-promise": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/p-limit": {
+      "version": "3.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-locate": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/p-locate/node_modules/p-limit": {
+      "version": "2.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-locate/node_modules/p-try": {
+      "version": "2.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/p-map": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "aggregate-error": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-retry": {
+      "version": "4.6.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/retry": "0.12.0",
+        "retry": "^0.13.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/p-retry/node_modules/retry": {
+      "version": "0.13.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/p-try": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/pacote": {
+      "version": "15.1.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@npmcli/git": "^4.0.0",
+        "@npmcli/installed-package-contents": "^2.0.1",
+        "@npmcli/promise-spawn": "^6.0.1",
+        "@npmcli/run-script": "^6.0.0",
+        "cacache": "^17.0.0",
+        "fs-minipass": "^3.0.0",
+        "minipass": "^4.0.0",
+        "npm-package-arg": "^10.0.0",
+        "npm-packlist": "^7.0.0",
+        "npm-pick-manifest": "^8.0.0",
+        "npm-registry-fetch": "^14.0.0",
+        "proc-log": "^3.0.0",
+        "promise-retry": "^2.0.1",
+        "read-package-json": "^6.0.0",
+        "read-package-json-fast": "^3.0.0",
+        "sigstore": "^1.0.0",
+        "ssri": "^10.0.0",
+        "tar": "^6.1.11"
+      },
+      "bin": {
+        "pacote": "lib/bin.js"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/pad-right": {
+      "version": "0.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "repeat-string": "^1.5.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pako": {
+      "version": "1.0.11",
+      "dev": true,
+      "license": "(MIT AND Zlib)"
+    },
+    "node_modules/parent-module": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "callsites": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/parents": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-platform": "~0.11.15"
+      }
+    },
+    "node_modules/parse-asn1": {
+      "version": "5.1.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "asn1.js": "^5.2.0",
+        "browserify-aes": "^1.0.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "node_modules/parse-entities": {
+      "version": "2.0.0",
+      "license": "MIT",
+      "dependencies": {
+        "character-entities": "^1.0.0",
+        "character-entities-legacy": "^1.0.0",
+        "character-reference-invalid": "^1.0.0",
+        "is-alphanumerical": "^1.0.0",
+        "is-decimal": "^1.0.0",
+        "is-hexadecimal": "^1.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/parse-filepath": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-absolute": "^1.0.0",
+        "map-cache": "^0.2.0",
+        "path-root": "^0.1.1"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/parse-json": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/parse-node-version": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/parse-passwd": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/parse5": {
+      "version": "5.1.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/parse5-html-rewriting-stream": {
+      "version": "7.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^4.3.0",
+        "parse5": "^7.0.0",
+        "parse5-sax-parser": "^7.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5-html-rewriting-stream/node_modules/parse5": {
+      "version": "7.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^4.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5-htmlparser2-tree-adapter": {
+      "version": "7.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "domhandler": "^5.0.2",
+        "parse5": "^7.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": {
+      "version": "7.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^4.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5-sax-parser": {
+      "version": "7.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "parse5": "^7.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5-sax-parser/node_modules/parse5": {
+      "version": "7.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^4.4.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/pascalcase": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-browserify": {
+      "version": "0.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/path-platform": {
+      "version": "0.11.15",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/path-root": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "path-root-regex": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-root-regex": {
+      "version": "0.1.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-scurry": {
+      "version": "1.10.1",
+      "dev": true,
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "lru-cache": "^9.1.1 || ^10.0.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/path-scurry/node_modules/lru-cache": {
+      "version": "10.0.1",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "14 || >=16.14"
+      }
+    },
+    "node_modules/path-scurry/node_modules/minipass": {
+      "version": "7.0.4",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/path-to-regexp": {
+      "version": "0.1.7",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/path-type": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pathval": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/pause-stream": {
+      "version": "0.0.11",
+      "dev": true,
+      "license": [
+        "MIT",
+        "Apache2"
+      ],
+      "dependencies": {
+        "through": "~2.3"
+      }
+    },
+    "node_modules/pbkdf2": {
+      "version": "3.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      },
+      "engines": {
+        "node": ">=0.12"
+      }
+    },
+    "node_modules/pdfjs-dist": {
+      "version": "2.16.105",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "dommatrix": "^1.0.3",
+        "web-streams-polyfill": "^3.2.1"
+      },
+      "peerDependencies": {
+        "worker-loader": "^3.0.8"
+      },
+      "peerDependenciesMeta": {
+        "worker-loader": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/pdfmake": {
+      "version": "0.2.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@foliojs-fork/linebreak": "^1.1.1",
+        "@foliojs-fork/pdfkit": "^0.13.0",
+        "iconv-lite": "^0.6.3",
+        "xmldoc": "^1.1.2"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/pdfmake/node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pend": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/performance-now": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.0",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pidtree": {
+      "version": "0.3.1",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "pidtree": "bin/pidtree.js"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/pify": {
+      "version": "2.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pirates": {
+      "version": "4.0.6",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/piscina": {
+      "version": "3.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eventemitter-asyncresource": "^1.0.0",
+        "hdr-histogram-js": "^2.0.1",
+        "hdr-histogram-percentiles-obj": "^3.0.0"
+      },
+      "optionalDependencies": {
+        "nice-napi": "^1.0.2"
+      }
+    },
+    "node_modules/pkg-dir": {
+      "version": "4.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "find-up": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/pn": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/png-async": {
+      "version": "0.9.4",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/png-js": {
+      "version": "1.0.0",
+      "dev": true
+    },
+    "node_modules/posix-character-classes": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.21",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.4",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-html": {
+      "version": "0.36.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "htmlparser2": "^3.10.0"
+      },
+      "peerDependencies": {
+        "postcss": ">=5.0.0",
+        "postcss-syntax": ">=0.36.0"
+      }
+    },
+    "node_modules/postcss-html/node_modules/dom-serializer": {
+      "version": "0.2.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.0.1",
+        "entities": "^2.0.0"
+      }
+    },
+    "node_modules/postcss-html/node_modules/dom-serializer/node_modules/domelementtype": {
+      "version": "2.3.0",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/postcss-html/node_modules/dom-serializer/node_modules/entities": {
+      "version": "2.2.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/postcss-html/node_modules/domelementtype": {
+      "version": "1.3.1",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/postcss-html/node_modules/domhandler": {
+      "version": "2.4.2",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "domelementtype": "1"
+      }
+    },
+    "node_modules/postcss-html/node_modules/domutils": {
+      "version": "1.7.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "node_modules/postcss-html/node_modules/entities": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/postcss-html/node_modules/htmlparser2": {
+      "version": "3.10.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
+      }
+    },
+    "node_modules/postcss-html/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/postcss-less": {
+      "version": "3.1.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "postcss": "^7.0.14"
+      },
+      "engines": {
+        "node": ">=6.14.4"
+      }
+    },
+    "node_modules/postcss-less/node_modules/picocolors": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/postcss-less/node_modules/postcss": {
+      "version": "7.0.39",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      }
+    },
+    "node_modules/postcss-less/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/postcss-loader": {
+      "version": "7.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cosmiconfig": "^7.0.0",
+        "klona": "^2.0.5",
+        "semver": "^7.3.8"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "postcss": "^7.0.0 || ^8.0.1",
+        "webpack": "^5.0.0"
+      }
+    },
+    "node_modules/postcss-loader/node_modules/cosmiconfig": {
+      "version": "7.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/parse-json": "^4.0.0",
+        "import-fresh": "^3.2.1",
+        "parse-json": "^5.0.0",
+        "path-type": "^4.0.0",
+        "yaml": "^1.10.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/postcss-media-query-parser": {
+      "version": "0.2.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/postcss-modules-extract-imports": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-local-by-default": {
+      "version": "4.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "icss-utils": "^5.0.0",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-scope": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "postcss-selector-parser": "^6.0.4"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-modules-values": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "icss-utils": "^5.0.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >= 14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/postcss-resolve-nested-selector": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/postcss-safe-parser": {
+      "version": "4.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "postcss": "^7.0.26"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/postcss-safe-parser/node_modules/picocolors": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/postcss-safe-parser/node_modules/postcss": {
+      "version": "7.0.39",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      }
+    },
+    "node_modules/postcss-safe-parser/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/postcss-sass": {
+      "version": "0.4.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "gonzales-pe": "^4.3.0",
+        "postcss": "^7.0.21"
+      }
+    },
+    "node_modules/postcss-sass/node_modules/picocolors": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/postcss-sass/node_modules/postcss": {
+      "version": "7.0.39",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      }
+    },
+    "node_modules/postcss-sass/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/postcss-scss": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "postcss": "^7.0.6"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/postcss-scss/node_modules/picocolors": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/postcss-scss/node_modules/postcss": {
+      "version": "7.0.39",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      }
+    },
+    "node_modules/postcss-scss/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.0.13",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-sorting": {
+      "version": "5.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.14",
+        "postcss": "^7.0.17"
+      },
+      "engines": {
+        "node": ">=8.7.0"
+      }
+    },
+    "node_modules/postcss-sorting/node_modules/picocolors": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/postcss-sorting/node_modules/postcss": {
+      "version": "7.0.39",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      }
+    },
+    "node_modules/postcss-sorting/node_modules/source-map": {
+      "version": "0.6.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/postcss-syntax": {
+      "version": "0.36.2",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "postcss": ">=5.0.0"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/prelude-ls": {
+      "version": "1.2.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/prettier": {
+      "version": "2.1.2",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "prettier": "bin-prettier.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/pretty-bytes": {
+      "version": "5.6.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/pretty-format": {
+      "version": "28.1.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^28.1.3",
+        "ansi-regex": "^5.0.1",
+        "ansi-styles": "^5.0.0",
+        "react-is": "^18.0.0"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0"
+      }
+    },
+    "node_modules/pretty-format/node_modules/ansi-styles": {
+      "version": "5.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/pretty-quick": {
+      "version": "3.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "chalk": "^3.0.0",
+        "execa": "^4.0.0",
+        "find-up": "^4.1.0",
+        "ignore": "^5.1.4",
+        "mri": "^1.1.5",
+        "multimatch": "^4.0.0"
+      },
+      "bin": {
+        "pretty-quick": "bin/pretty-quick.js"
+      },
+      "engines": {
+        "node": ">=10.13"
+      },
+      "peerDependencies": {
+        "prettier": ">=2.0.0"
+      }
+    },
+    "node_modules/prismjs": {
+      "version": "1.29.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/proc-log": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/process": {
+      "version": "0.11.10",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
+    "node_modules/process-nextick-args": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/progress": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/promise": {
+      "version": "8.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "asap": "~2.0.6"
+      }
+    },
+    "node_modules/promise-inflight": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/promise-retry": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "err-code": "^2.0.2",
+        "retry": "^0.12.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/prompts": {
+      "version": "2.4.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "kleur": "^3.0.3",
+        "sisteransi": "^1.0.5"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/prop-types": {
+      "version": "15.8.1",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.13.1"
+      }
+    },
+    "node_modules/prop-types/node_modules/react-is": {
+      "version": "16.13.1",
+      "license": "MIT"
+    },
+    "node_modules/property-information": {
+      "version": "5.6.0",
+      "license": "MIT",
+      "dependencies": {
+        "xtend": "^4.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/protobufjs": {
+      "version": "6.11.4",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "@protobufjs/aspromise": "^1.1.2",
+        "@protobufjs/base64": "^1.1.2",
+        "@protobufjs/codegen": "^2.0.4",
+        "@protobufjs/eventemitter": "^1.1.0",
+        "@protobufjs/fetch": "^1.1.0",
+        "@protobufjs/float": "^1.0.2",
+        "@protobufjs/inquire": "^1.1.0",
+        "@protobufjs/path": "^1.1.2",
+        "@protobufjs/pool": "^1.1.0",
+        "@protobufjs/utf8": "^1.1.0",
+        "@types/long": "^4.0.1",
+        "@types/node": ">=13.7.0",
+        "long": "^4.0.0"
+      },
+      "bin": {
+        "pbjs": "bin/pbjs",
+        "pbts": "bin/pbts"
+      }
+    },
+    "node_modules/protobufjs/node_modules/@types/node": {
+      "version": "20.8.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/proxy-addr": {
+      "version": "2.0.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "forwarded": "0.2.0",
+        "ipaddr.js": "1.9.1"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/proxy-from-env": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/proxy-middleware": {
+      "version": "0.15.0",
+      "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz",
+      "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/prr": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/ps-tree": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "event-stream": "=3.3.4"
+      },
+      "bin": {
+        "ps-tree": "bin/ps-tree.js"
+      },
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
+    "node_modules/ps-tree/node_modules/event-stream": {
+      "version": "3.3.4",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "duplexer": "~0.1.1",
+        "from": "~0",
+        "map-stream": "~0.1.0",
+        "pause-stream": "0.0.11",
+        "split": "0.3",
+        "stream-combiner": "~0.0.4",
+        "through": "~2.3.1"
       }
     },
-    "jest-watcher": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz",
-      "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==",
+    "node_modules/ps-tree/node_modules/map-stream": {
+      "version": "0.1.0",
+      "dev": true
+    },
+    "node_modules/ps-tree/node_modules/split": {
+      "version": "0.3.3",
       "dev": true,
-      "requires": {
-        "@jest/test-result": "^28.1.3",
-        "@jest/types": "^28.1.3",
-        "@types/node": "*",
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.0.0",
-        "emittery": "^0.10.2",
-        "jest-util": "^28.1.3",
-        "string-length": "^4.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "through": "2"
       },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/ps-tree/node_modules/stream-combiner": {
+      "version": "0.0.4",
+      "dev": true,
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+        "duplexer": "~0.1.1"
       }
     },
-    "jest-worker": {
-      "version": "27.5.1",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
-      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+    "node_modules/psl": {
+      "version": "1.9.0",
       "dev": true,
-      "requires": {
-        "@types/node": "*",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
+      "license": "MIT"
+    },
+    "node_modules/public-encrypt": {
+      "version": "4.0.3",
+      "dev": true,
+      "license": "MIT",
       "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": "8.1.1",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
       }
     },
-    "jju": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz",
-      "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==",
-      "dev": true
+    "node_modules/public-encrypt/node_modules/bn.js": {
+      "version": "4.12.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "joi": {
-      "version": "17.9.2",
-      "resolved": "https://registry.npmjs.org/joi/-/joi-17.9.2.tgz",
-      "integrity": "sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==",
+    "node_modules/pump": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "@hapi/hoek": "^9.0.0",
-        "@hapi/topo": "^5.0.0",
-        "@sideway/address": "^4.1.3",
-        "@sideway/formula": "^3.0.1",
-        "@sideway/pinpoint": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
       }
     },
-    "js-file-download": {
-      "version": "0.4.12",
-      "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz",
-      "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg=="
+    "node_modules/punycode": {
+      "version": "1.4.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "js-string-escape": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
-      "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==",
-      "dev": true
+    "node_modules/pure-rand": {
+      "version": "6.0.4",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/dubzzz"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/fast-check"
+        }
+      ],
+      "license": "MIT"
     },
-    "js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    "node_modules/qs": {
+      "version": "6.7.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.6"
+      }
     },
-    "js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "requires": {
-        "argparse": "^2.0.1"
+    "node_modules/querystring-es3": {
+      "version": "0.2.1",
+      "dev": true,
+      "engines": {
+        "node": ">=0.4.x"
       }
     },
-    "jsbn": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
-      "dev": true
+    "node_modules/querystringify": {
+      "version": "2.2.0",
+      "license": "MIT"
     },
-    "jsdom": {
-      "version": "19.0.0",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz",
-      "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==",
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
       "dev": true,
-      "requires": {
-        "abab": "^2.0.5",
-        "acorn": "^8.5.0",
-        "acorn-globals": "^6.0.0",
-        "cssom": "^0.5.0",
-        "cssstyle": "^2.3.0",
-        "data-urls": "^3.0.1",
-        "decimal.js": "^10.3.1",
-        "domexception": "^4.0.0",
-        "escodegen": "^2.0.0",
-        "form-data": "^4.0.0",
-        "html-encoding-sniffer": "^3.0.0",
-        "http-proxy-agent": "^5.0.0",
-        "https-proxy-agent": "^5.0.0",
-        "is-potential-custom-element-name": "^1.0.1",
-        "nwsapi": "^2.2.0",
-        "parse5": "6.0.1",
-        "saxes": "^5.0.1",
-        "symbol-tree": "^3.2.4",
-        "tough-cookie": "^4.0.0",
-        "w3c-hr-time": "^1.0.2",
-        "w3c-xmlserializer": "^3.0.0",
-        "webidl-conversions": "^7.0.0",
-        "whatwg-encoding": "^2.0.0",
-        "whatwg-mimetype": "^3.0.0",
-        "whatwg-url": "^10.0.0",
-        "ws": "^8.2.3",
-        "xml-name-validator": "^4.0.0"
-      },
-      "dependencies": {
-        "@tootallnate/once": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
-          "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
-          "dev": true
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
         },
-        "acorn-globals": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
-          "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
-          "dev": true,
-          "requires": {
-            "acorn": "^7.1.1",
-            "acorn-walk": "^7.1.1"
-          },
-          "dependencies": {
-            "acorn": {
-              "version": "7.4.1",
-              "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-              "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
-              "dev": true
-            }
-          }
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
         },
-        "acorn-walk": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
-          "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
-          "dev": true
-        },
-        "cssom": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
-          "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==",
-          "dev": true
-        },
-        "data-urls": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz",
-          "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==",
-          "dev": true,
-          "requires": {
-            "abab": "^2.0.6",
-            "whatwg-mimetype": "^3.0.0",
-            "whatwg-url": "^11.0.0"
-          },
-          "dependencies": {
-            "whatwg-url": {
-              "version": "11.0.0",
-              "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
-              "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
-              "dev": true,
-              "requires": {
-                "tr46": "^3.0.0",
-                "webidl-conversions": "^7.0.0"
-              }
-            }
-          }
-        },
-        "domexception": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz",
-          "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==",
-          "dev": true,
-          "requires": {
-            "webidl-conversions": "^7.0.0"
-          }
-        },
-        "escodegen": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
-          "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
-          "dev": true,
-          "requires": {
-            "esprima": "^4.0.1",
-            "estraverse": "^5.2.0",
-            "esutils": "^2.0.2",
-            "optionator": "^0.8.1",
-            "source-map": "~0.6.1"
-          }
-        },
-        "estraverse": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-          "dev": true
-        },
-        "html-encoding-sniffer": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
-          "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
-          "dev": true,
-          "requires": {
-            "whatwg-encoding": "^2.0.0"
-          }
-        },
-        "http-proxy-agent": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
-          "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
-          "dev": true,
-          "requires": {
-            "@tootallnate/once": "2",
-            "agent-base": "6",
-            "debug": "4"
-          }
-        },
-        "iconv-lite": {
-          "version": "0.6.3",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-          "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-          "dev": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3.0.0"
-          }
-        },
-        "punycode": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-          "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-          "dev": true
-        },
-        "saxes": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
-          "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
-          "dev": true,
-          "requires": {
-            "xmlchars": "^2.2.0"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true,
-          "optional": true
-        },
-        "tough-cookie": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
-          "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==",
-          "dev": true,
-          "requires": {
-            "psl": "^1.1.33",
-            "punycode": "^2.1.1",
-            "universalify": "^0.2.0",
-            "url-parse": "^1.5.3"
-          }
-        },
-        "tr46": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
-          "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
-          "dev": true,
-          "requires": {
-            "punycode": "^2.1.1"
-          }
-        },
-        "universalify": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
-          "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
-          "dev": true
-        },
-        "w3c-xmlserializer": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz",
-          "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==",
-          "dev": true,
-          "requires": {
-            "xml-name-validator": "^4.0.0"
-          }
-        },
-        "webidl-conversions": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
-          "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
-          "dev": true
-        },
-        "whatwg-encoding": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
-          "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
-          "dev": true,
-          "requires": {
-            "iconv-lite": "0.6.3"
-          }
-        },
-        "whatwg-mimetype": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
-          "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==",
-          "dev": true
-        },
-        "whatwg-url": {
-          "version": "10.0.0",
-          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz",
-          "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==",
-          "dev": true,
-          "requires": {
-            "tr46": "^3.0.0",
-            "webidl-conversions": "^7.0.0"
-          }
-        },
-        "xml-name-validator": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
-          "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
-          "dev": true
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
         }
-      }
+      ],
+      "license": "MIT"
     },
-    "jsesc": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
-      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+    "node_modules/quick-lru": {
+      "version": "4.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "json-parse-better-errors": {
+    "node_modules/quote-stream": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "buffer-equal": "0.0.1",
+        "minimist": "^1.1.3",
+        "through2": "^2.0.0"
+      },
+      "bin": {
+        "quote-stream": "bin/cmd.js"
+      }
     },
-    "json-parse-even-better-errors": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
-      "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
-      "dev": true
+    "node_modules/ramda": {
+      "version": "0.29.0",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/ramda"
+      }
     },
-    "json-parse-helpfulerror": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
-      "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==",
-      "dev": true,
-      "requires": {
-        "jju": "^1.1.0"
+    "node_modules/ramda-adjunct": {
+      "version": "4.1.1",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.3"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/ramda-adjunct"
+      },
+      "peerDependencies": {
+        "ramda": ">= 0.29.0"
       }
     },
-    "json-schema": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
-      "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
-      "dev": true
+    "node_modules/randexp": {
+      "version": "0.5.3",
+      "license": "MIT",
+      "dependencies": {
+        "drange": "^1.0.2",
+        "ret": "^0.2.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
     },
-    "json-stable-stringify": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
-      "integrity": "sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw==",
+    "node_modules/randomfill": {
+      "version": "1.0.4",
       "dev": true,
-      "requires": {
-        "jsonify": "~0.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
       }
     },
-    "json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-      "dev": true
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
     },
-    "json-stringify-safe": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
-      "dev": true
+    "node_modules/raw-body": {
+      "version": "2.4.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
     },
-    "json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
+    "node_modules/react": {
+      "version": "17.0.2",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "jsonc-parser": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
-      "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
-      "dev": true
+    "node_modules/react-copy-to-clipboard": {
+      "version": "5.0.4",
+      "license": "MIT",
+      "dependencies": {
+        "copy-to-clipboard": "^3",
+        "prop-types": "^15.5.8"
+      },
+      "peerDependencies": {
+        "react": "^15.3.0 || ^16.0.0 || ^17.0.0"
+      }
     },
-    "jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.6",
-        "universalify": "^2.0.0"
+    "node_modules/react-debounce-input": {
+      "version": "3.2.4",
+      "license": "MIT",
+      "dependencies": {
+        "lodash.debounce": "^4",
+        "prop-types": "^15.7.2"
+      },
+      "peerDependencies": {
+        "react": "^15.3.0 || ^16.0.0 || ^17.0.0"
       }
     },
-    "jsonify": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
-      "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
-      "dev": true
+    "node_modules/react-dom": {
+      "version": "17.0.2",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "scheduler": "^0.20.2"
+      },
+      "peerDependencies": {
+        "react": "17.0.2"
+      }
     },
-    "jsonparse": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
-      "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
-      "dev": true
+    "node_modules/react-immutable-proptypes": {
+      "version": "2.2.0",
+      "license": "MIT",
+      "dependencies": {
+        "invariant": "^2.2.2"
+      },
+      "peerDependencies": {
+        "immutable": ">=3.6.2"
+      }
     },
-    "jsprim": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
-      "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+    "node_modules/react-immutable-pure-component": {
+      "version": "2.2.2",
+      "license": "MIT",
+      "peerDependencies": {
+        "immutable": ">= 2 || >= 4.0.0-rc",
+        "react": ">= 16.6",
+        "react-dom": ">= 16.6"
+      }
+    },
+    "node_modules/react-inspector": {
+      "version": "5.1.1",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.0.0",
+        "is-dom": "^1.0.0",
+        "prop-types": "^15.0.0"
+      },
+      "peerDependencies": {
+        "react": "^16.8.4 || ^17.0.0"
+      }
+    },
+    "node_modules/react-is": {
+      "version": "18.2.0",
       "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.4.0",
-        "verror": "1.10.0"
+      "license": "MIT"
+    },
+    "node_modules/react-redux": {
+      "version": "7.2.9",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.15.4",
+        "@types/react-redux": "^7.1.20",
+        "hoist-non-react-statics": "^3.3.2",
+        "loose-envify": "^1.4.0",
+        "prop-types": "^15.7.2",
+        "react-is": "^17.0.2"
+      },
+      "peerDependencies": {
+        "react": "^16.8.3 || ^17 || ^18"
+      },
+      "peerDependenciesMeta": {
+        "react-dom": {
+          "optional": true
+        },
+        "react-native": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-redux/node_modules/react-is": {
+      "version": "17.0.2",
+      "license": "MIT"
+    },
+    "node_modules/react-syntax-highlighter": {
+      "version": "15.5.0",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.3.1",
+        "highlight.js": "^10.4.1",
+        "lowlight": "^1.17.0",
+        "prismjs": "^1.27.0",
+        "refractor": "^3.6.0"
+      },
+      "peerDependencies": {
+        "react": ">= 0.14.0"
       }
     },
-    "karma-source-map-support": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz",
-      "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==",
+    "node_modules/read-only-stream": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "source-map-support": "^0.5.5"
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "^2.0.2"
       }
     },
-    "kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-      "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-      "dev": true
-    },
-    "kleur": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
-      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
-      "dev": true
-    },
-    "klona": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz",
-      "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==",
-      "dev": true
-    },
-    "known-css-properties": {
-      "version": "0.21.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz",
-      "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==",
-      "dev": true
-    },
-    "knuth-shuffle-seeded": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz",
-      "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==",
+    "node_modules/read-package-json": {
+      "version": "6.0.4",
       "dev": true,
-      "requires": {
-        "seed-random": "~2.2.0"
+      "license": "ISC",
+      "dependencies": {
+        "glob": "^10.2.2",
+        "json-parse-even-better-errors": "^3.0.0",
+        "normalize-package-data": "^5.0.0",
+        "npm-normalize-package-bin": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "labeled-stream-splicer": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz",
-      "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==",
+    "node_modules/read-package-json-fast": {
+      "version": "3.0.2",
       "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "stream-splicer": "^2.0.0"
+      "license": "ISC",
+      "dependencies": {
+        "json-parse-even-better-errors": "^3.0.0",
+        "npm-normalize-package-bin": "^3.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "lazy-ass": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz",
-      "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==",
-      "dev": true
-    },
-    "lcid": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
-      "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+    "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "invert-kv": "^2.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "less": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz",
-      "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==",
+    "node_modules/read-package-json/node_modules/brace-expansion": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "copy-anything": "^2.0.1",
-        "errno": "^0.1.1",
-        "graceful-fs": "^4.1.2",
-        "image-size": "~0.5.0",
-        "make-dir": "^2.1.0",
-        "mime": "^1.4.1",
-        "needle": "^2.5.2",
-        "parse-node-version": "^1.0.1",
-        "source-map": "~0.6.0",
-        "tslib": "^2.3.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "make-dir": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "pify": "^4.0.1",
-            "semver": "^5.6.0"
-          }
-        },
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true,
-          "optional": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true,
-          "optional": true
-        }
+        "balanced-match": "^1.0.0"
       }
     },
-    "less-loader": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz",
-      "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==",
+    "node_modules/read-package-json/node_modules/glob": {
+      "version": "10.3.10",
       "dev": true,
-      "requires": {
-        "klona": "^2.0.4"
+      "license": "ISC",
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^2.3.5",
+        "minimatch": "^9.0.1",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+        "path-scurry": "^1.10.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "leven": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
-      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
-      "dev": true
-    },
-    "levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+    "node_modules/read-package-json/node_modules/json-parse-even-better-errors": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
+      "license": "MIT",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "license-webpack-plugin": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz",
-      "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==",
+    "node_modules/read-package-json/node_modules/minimatch": {
+      "version": "9.0.3",
       "dev": true,
-      "requires": {
-        "webpack-sources": "^3.0.0"
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "liftoff": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
-      "integrity": "sha512-01zfGFqfORP1CGmZZP2Zn51zsqz4RltDi0RDOhbGoLYdUT5Lw+I2gX6QdwXhPITF6hPOHEOp+At6/L24hIg9WQ==",
+    "node_modules/read-package-json/node_modules/minipass": {
+      "version": "7.0.4",
       "dev": true,
-      "requires": {
-        "extend": "^3.0.0",
-        "findup-sync": "^2.0.0",
-        "fined": "^1.0.1",
-        "flagged-respawn": "^1.0.0",
-        "is-plain-object": "^2.0.4",
-        "object.map": "^1.0.0",
-        "rechoir": "^0.6.2",
-        "resolve": "^1.1.7"
-      },
-      "dependencies": {
-        "is-plain-object": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-          "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        }
+      "license": "ISC",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
       }
     },
-    "lines-and-columns": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
-      "dev": true
-    },
-    "listr2": {
-      "version": "3.14.0",
-      "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
-      "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
+    "node_modules/read-pkg": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "cli-truncate": "^2.1.0",
-        "colorette": "^2.0.16",
-        "log-update": "^4.0.0",
-        "p-map": "^4.0.0",
-        "rfdc": "^1.3.0",
-        "rxjs": "^7.5.1",
-        "through": "^2.3.8",
-        "wrap-ansi": "^7.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "rxjs": {
-          "version": "7.8.1",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
-          "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
-          "dev": true,
-          "requires": {
-            "tslib": "^2.1.0"
-          }
-        }
+        "load-json-file": "^4.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "load-json-file": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
-      "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
+    "node_modules/read-pkg-up": {
+      "version": "7.0.1",
       "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^4.0.0",
-        "pify": "^3.0.0",
-        "strip-bom": "^3.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "parse-json": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-          "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
-          }
-        },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
-          "dev": true
-        }
+        "find-up": "^4.1.0",
+        "read-pkg": "^5.2.0",
+        "type-fest": "^0.8.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "loader-runner": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
-      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
-      "dev": true
-    },
-    "loader-utils": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz",
-      "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==",
-      "dev": true
-    },
-    "locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+    "node_modules/read-pkg-up/node_modules/hosted-git-info": {
+      "version": "2.8.9",
       "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=="
-    },
-    "lodash-es": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
-      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
-    },
-    "lodash.clonedeep": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
-      "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
-      "dev": true
-    },
-    "lodash.debounce": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
-    },
-    "lodash.flatten": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz",
-      "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==",
-      "dev": true
-    },
-    "lodash.mapvalues": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz",
-      "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==",
-      "dev": true
-    },
-    "lodash.memoize": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
-      "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
-    },
-    "lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "lodash.once": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
-      "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
-      "dev": true
-    },
-    "lodash.sortby": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
-      "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
-      "dev": true
-    },
-    "lodash.throttle": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
-      "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ=="
-    },
-    "lodash.truncate": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
-      "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
-      "dev": true
+      "license": "ISC"
     },
-    "log-symbols": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
-      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+    "node_modules/read-pkg-up/node_modules/normalize-package-data": {
+      "version": "2.5.0",
       "dev": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "is-unicode-supported": "^0.1.0"
-      },
+      "license": "BSD-2-Clause",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
       }
     },
-    "log-update": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
-      "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==",
+    "node_modules/read-pkg-up/node_modules/read-pkg": {
+      "version": "5.2.0",
       "dev": true,
-      "requires": {
-        "ansi-escapes": "^4.3.0",
-        "cli-cursor": "^3.1.0",
-        "slice-ansi": "^4.0.0",
-        "wrap-ansi": "^6.2.0"
-      },
+      "license": "MIT",
       "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
-        },
-        "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"
-          }
-        },
-        "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"
-          }
-        }
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "loglevel": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz",
-      "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==",
-      "dev": true
-    },
-    "loglevel-plugin-prefix": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz",
-      "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==",
-      "dev": true
-    },
-    "long": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
-      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==",
-      "dev": true
-    },
-    "longest-streak": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
-      "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
-      "dev": true
+    "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": {
+      "version": "0.6.0",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-      "requires": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
+    "node_modules/read-pkg-up/node_modules/semver": {
+      "version": "5.7.2",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver"
       }
     },
-    "loupe": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
-      "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
+    "node_modules/read-pkg-up/node_modules/type-fest": {
+      "version": "0.8.1",
       "dev": true,
-      "requires": {
-        "get-func-name": "^2.0.0"
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "lower-case": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
-      "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==",
-      "dev": true
+    "node_modules/read-pkg/node_modules/hosted-git-info": {
+      "version": "2.8.9",
+      "dev": true,
+      "license": "ISC"
     },
-    "lowlight": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
-      "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
-      "requires": {
-        "fault": "^1.0.0",
-        "highlight.js": "~10.7.0"
+    "node_modules/read-pkg/node_modules/normalize-package-data": {
+      "version": "2.5.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
       }
     },
-    "lru-cache": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
-      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
-      "requires": {
-        "yallist": "^3.0.2"
+    "node_modules/read-pkg/node_modules/path-type": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "pify": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "lunr": {
-      "version": "2.3.9",
-      "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
-      "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
-      "dev": true
-    },
-    "macos-release": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
-      "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==",
-      "dev": true
-    },
-    "magic-string": {
-      "version": "0.25.7",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
-      "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
+    "node_modules/read-pkg/node_modules/pify": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "sourcemap-codec": "^1.4.4"
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
       }
     },
-    "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==",
+    "node_modules/read-pkg/node_modules/semver": {
+      "version": "5.7.2",
       "dev": true,
-      "requires": {
-        "semver": "^6.0.0"
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver"
       }
     },
-    "make-error": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-      "dev": true
-    },
-    "make-fetch-happen": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
-      "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
-      "dev": true,
-      "requires": {
-        "agentkeepalive": "^4.1.3",
-        "cacache": "^15.2.0",
-        "http-cache-semantics": "^4.1.0",
-        "http-proxy-agent": "^4.0.1",
-        "https-proxy-agent": "^5.0.0",
-        "is-lambda": "^1.0.1",
-        "lru-cache": "^6.0.0",
-        "minipass": "^3.1.3",
-        "minipass-collect": "^1.0.2",
-        "minipass-fetch": "^1.3.2",
-        "minipass-flush": "^1.0.5",
-        "minipass-pipeline": "^1.2.4",
-        "negotiator": "^0.6.2",
-        "promise-retry": "^2.0.1",
-        "socks-proxy-agent": "^6.0.0",
-        "ssri": "^8.0.0"
-      },
-      "dependencies": {
-        "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"
-          }
-        },
-        "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/readable-stream": {
+      "version": "2.3.8",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
       }
     },
-    "make-iterator": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
-      "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+    "node_modules/readable-stream/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/readable-stream/node_modules/string_decoder": {
+      "version": "1.1.1",
       "dev": true,
-      "requires": {
-        "kind-of": "^6.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
       }
     },
-    "makeerror": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
-      "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
+    "node_modules/readdirp": {
+      "version": "3.6.0",
       "dev": true,
-      "requires": {
-        "tmpl": "1.0.5"
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
       }
     },
-    "map-age-cleaner": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
-      "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+    "node_modules/rechoir": {
+      "version": "0.6.2",
       "dev": true,
-      "requires": {
-        "p-defer": "^1.0.0"
+      "dependencies": {
+        "resolve": "^1.1.6"
+      },
+      "engines": {
+        "node": ">= 0.10"
       }
     },
-    "map-cache": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-      "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
-      "dev": true
-    },
-    "map-obj": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz",
-      "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==",
-      "dev": true
-    },
-    "map-stream": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz",
-      "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==",
-      "dev": true
-    },
-    "map-visit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-      "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
+    "node_modules/redent": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "object-visit": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "indent-string": "^4.0.0",
+        "strip-indent": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "marked": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
-      "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
-      "dev": true
-    },
-    "mathml-tag-names": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz",
-      "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==",
-      "dev": true
-    },
-    "md5": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
-      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+    "node_modules/redent/node_modules/indent-string": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "charenc": "0.0.2",
-        "crypt": "0.0.2",
-        "is-buffer": "~1.1.6"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "md5.js": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
-      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
-      "dev": true,
-      "requires": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.1.2"
+    "node_modules/redux": {
+      "version": "4.2.1",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.9.2"
       }
     },
-    "mdast-util-from-markdown": {
-      "version": "0.8.5",
-      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz",
-      "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==",
-      "dev": true,
-      "requires": {
-        "@types/mdast": "^3.0.0",
-        "mdast-util-to-string": "^2.0.0",
-        "micromark": "~2.11.0",
-        "parse-entities": "^2.0.0",
-        "unist-util-stringify-position": "^2.0.0"
+    "node_modules/redux-immutable": {
+      "version": "4.0.0",
+      "license": "BSD-3-Clause",
+      "peerDependencies": {
+        "immutable": "^3.8.1 || ^4.0.0-rc.1"
       }
     },
-    "mdast-util-to-markdown": {
-      "version": "0.6.5",
-      "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
-      "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
+    "node_modules/reflect-metadata": {
+      "version": "0.1.13",
       "dev": true,
-      "requires": {
-        "@types/unist": "^2.0.0",
-        "longest-streak": "^2.0.0",
-        "mdast-util-to-string": "^2.0.0",
+      "license": "Apache-2.0"
+    },
+    "node_modules/refractor": {
+      "version": "3.6.0",
+      "license": "MIT",
+      "dependencies": {
+        "hastscript": "^6.0.0",
         "parse-entities": "^2.0.0",
-        "repeat-string": "^1.0.0",
-        "zwitch": "^1.0.0"
+        "prismjs": "~1.27.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "mdast-util-to-string": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
-      "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==",
-      "dev": true
-    },
-    "mdn-data": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
-      "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==",
-      "dev": true
+    "node_modules/refractor/node_modules/prismjs": {
+      "version": "1.27.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "media-typer": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
-      "dev": true
+    "node_modules/regenerate": {
+      "version": "1.4.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "mem": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
-      "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+    "node_modules/regenerate-unicode-properties": {
+      "version": "10.1.1",
       "dev": true,
-      "requires": {
-        "map-age-cleaner": "^0.1.1",
-        "mimic-fn": "^2.0.0",
-        "p-is-promise": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "regenerate": "^1.4.2"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "memfs": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.1.tgz",
-      "integrity": "sha512-UWbFJKvj5k+nETdteFndTpYxdeTMox/ULeqX5k/dpaQJCCFmj5EeKv3dBcyO2xmkRAx2vppRu5dVG7SOtsGOzA==",
+    "node_modules/regenerator-runtime": {
+      "version": "0.13.11",
+      "license": "MIT"
+    },
+    "node_modules/regenerator-transform": {
+      "version": "0.15.2",
       "dev": true,
-      "requires": {
-        "fs-monkey": "^1.0.3"
+      "license": "MIT",
+      "dependencies": {
+        "@babel/runtime": "^7.8.4"
       }
     },
-    "memorystream": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
-      "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
-      "dev": true
-    },
-    "meow": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz",
-      "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==",
+    "node_modules/regex-not": {
+      "version": "1.0.2",
       "dev": true,
-      "requires": {
-        "@types/minimist": "^1.2.0",
-        "camelcase-keys": "^6.2.2",
-        "decamelize": "^1.2.0",
-        "decamelize-keys": "^1.1.0",
-        "hard-rejection": "^2.1.0",
-        "minimist-options": "4.1.0",
-        "normalize-package-data": "^3.0.0",
-        "read-pkg-up": "^7.0.1",
-        "redent": "^3.0.0",
-        "trim-newlines": "^3.0.0",
-        "type-fest": "^0.18.0",
-        "yargs-parser": "^20.2.3"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        },
-        "normalize-package-data": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
-          "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==",
-          "dev": true,
-          "requires": {
-            "hosted-git-info": "^4.0.1",
-            "is-core-module": "^2.5.0",
-            "semver": "^7.3.4",
-            "validate-npm-package-license": "^3.0.1"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "type-fest": {
-          "version": "0.18.1",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz",
-          "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==",
-          "dev": true
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        },
-        "yargs-parser": {
-          "version": "20.2.9",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
-          "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
-          "dev": true
-        }
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "merge-descriptors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
-      "dev": true
+    "node_modules/regex-parser": {
+      "version": "2.2.11",
+      "dev": true,
+      "license": "MIT"
     },
-    "merge-source-map": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
-      "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==",
+    "node_modules/regexp.prototype.flags": {
+      "version": "1.5.1",
       "dev": true,
-      "requires": {
-        "source-map": "^0.5.6"
-      },
+      "license": "MIT",
       "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
-          "dev": true
-        }
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "set-function-name": "^2.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "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
+    "node_modules/regexpp": {
+      "version": "3.2.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mysticatea"
+      }
     },
-    "methods": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
-      "dev": true
+    "node_modules/regexpu-core": {
+      "version": "5.3.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/regjsgen": "^0.8.0",
+        "regenerate": "^1.4.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsparser": "^0.9.1",
+        "unicode-match-property-ecmascript": "^2.0.0",
+        "unicode-match-property-value-ecmascript": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "micromark": {
-      "version": "2.11.4",
-      "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
-      "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
+    "node_modules/regjsparser": {
+      "version": "0.9.1",
       "dev": true,
-      "requires": {
-        "debug": "^4.0.0",
-        "parse-entities": "^2.0.0"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "jsesc": "~0.5.0"
+      },
+      "bin": {
+        "regjsparser": "bin/parser"
       }
     },
-    "micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+    "node_modules/regjsparser/node_modules/jsesc": {
+      "version": "0.5.0",
       "dev": true,
-      "requires": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
+      "bin": {
+        "jsesc": "bin/jsesc"
       }
     },
-    "miller-rabin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+    "node_modules/remark": {
+      "version": "13.0.0",
       "dev": true,
-      "requires": {
-        "bn.js": "^4.0.0",
-        "brorand": "^1.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "bn.js": {
-          "version": "4.12.0",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-          "dev": true
-        }
+        "remark-parse": "^9.0.0",
+        "remark-stringify": "^9.0.0",
+        "unified": "^9.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
-      "dev": true
-    },
-    "mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+    "node_modules/remark-parse": {
+      "version": "9.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mdast-util-from-markdown": "^0.8.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
     },
-    "mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "requires": {
-        "mime-db": "1.52.0"
+    "node_modules/remark-stringify": {
+      "version": "9.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "mdast-util-to-markdown": "^0.6.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "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
+    "node_modules/remarkable": {
+      "version": "2.0.1",
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^1.0.10",
+        "autolinker": "^3.11.0"
+      },
+      "bin": {
+        "remarkable": "bin/remarkable.js"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
     },
-    "mimic-response": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
-      "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
-      "optional": true
+    "node_modules/repeat-element": {
+      "version": "1.1.4",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "min-indent": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
-      "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==",
-      "dev": true
+    "node_modules/repeat-string": {
+      "version": "1.6.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10"
+      }
     },
-    "mini-css-extract-plugin": {
-      "version": "2.5.3",
-      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.5.3.tgz",
-      "integrity": "sha512-YseMB8cs8U/KCaAGQoqYmfUuhhGW0a9p9XvWXrxVOkE3/IiISTLw4ALNt7JR5B2eYauFM+PQGSbXMDmVbR7Tfw==",
+    "node_modules/request": {
+      "version": "2.88.2",
       "dev": true,
-      "requires": {
-        "schema-utils": "^4.0.0"
-      },
+      "license": "Apache-2.0",
       "dependencies": {
-        "ajv-keywords": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-          "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.3"
-          }
-        },
-        "schema-utils": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz",
-          "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==",
-          "dev": true,
-          "requires": {
-            "@types/json-schema": "^7.0.9",
-            "ajv": "^8.9.0",
-            "ajv-formats": "^2.1.1",
-            "ajv-keywords": "^5.1.0"
-          }
-        }
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.3",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.5.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "minim": {
-      "version": "0.23.8",
-      "resolved": "https://registry.npmjs.org/minim/-/minim-0.23.8.tgz",
-      "integrity": "sha512-bjdr2xW1dBCMsMGGsUeqM4eFI60m94+szhxWys+B1ztIt6gWSfeGBdSVCIawezeHYLYn0j6zrsXdQS/JllBzww==",
-      "requires": {
-        "lodash": "^4.15.0"
+    "node_modules/request-progress": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "throttleit": "^1.0.0"
       }
     },
-    "minimalistic-assert": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
-      "dev": true
-    },
-    "minimalistic-crypto-utils": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
-      "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
-      "dev": true
-    },
-    "minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "requires": {
-        "brace-expansion": "^1.1.7"
+    "node_modules/request-promise-core": {
+      "version": "1.1.4",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "lodash": "^4.17.19"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      },
+      "peerDependencies": {
+        "request": "^2.34"
       }
     },
-    "minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
-    },
-    "minimist-options": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz",
-      "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==",
+    "node_modules/request-promise-native": {
+      "version": "1.0.9",
       "dev": true,
-      "requires": {
-        "arrify": "^1.0.1",
-        "is-plain-obj": "^1.1.0",
-        "kind-of": "^6.0.3"
-      },
+      "license": "ISC",
       "dependencies": {
-        "arrify": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
-          "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==",
-          "dev": true
-        },
-        "is-plain-obj": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-          "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
-          "dev": true
-        }
+        "request-promise-core": "1.1.4",
+        "stealthy-require": "^1.1.1",
+        "tough-cookie": "^2.3.3"
+      },
+      "engines": {
+        "node": ">=0.12.0"
+      },
+      "peerDependencies": {
+        "request": "^2.34"
       }
     },
-    "minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+    "node_modules/request-promise-native/node_modules/punycode": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "yallist": "^4.0.0"
-      },
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/request-promise-native/node_modules/tough-cookie": {
+      "version": "2.5.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.8"
       }
     },
-    "minipass-collect": {
+    "node_modules/request/node_modules/core-util-is": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
-      "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
       "dev": true,
-      "requires": {
-        "minipass": "^3.0.0"
+      "license": "MIT"
+    },
+    "node_modules/request/node_modules/http-signature": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      },
+      "engines": {
+        "node": ">=0.8",
+        "npm": ">=1.3.7"
       }
     },
-    "minipass-fetch": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
-      "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
+    "node_modules/request/node_modules/jsprim": {
+      "version": "1.4.2",
       "dev": true,
-      "requires": {
-        "encoding": "^0.1.12",
-        "minipass": "^3.1.0",
-        "minipass-sized": "^1.0.3",
-        "minizlib": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.4.0",
+        "verror": "1.10.0"
+      },
+      "engines": {
+        "node": ">=0.6.0"
       }
     },
-    "minipass-flush": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
-      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+    "node_modules/request/node_modules/punycode": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "minipass": "^3.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "minipass-json-stream": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz",
-      "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==",
+    "node_modules/request/node_modules/qs": {
+      "version": "6.5.3",
       "dev": true,
-      "requires": {
-        "jsonparse": "^1.3.1",
-        "minipass": "^3.0.0"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.6"
       }
     },
-    "minipass-pipeline": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
-      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+    "node_modules/request/node_modules/tough-cookie": {
+      "version": "2.5.0",
       "dev": true,
-      "requires": {
-        "minipass": "^3.0.0"
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.8"
       }
     },
-    "minipass-sized": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
-      "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+    "node_modules/request/node_modules/uuid": {
+      "version": "3.4.0",
       "dev": true,
-      "requires": {
-        "minipass": "^3.0.0"
+      "license": "MIT",
+      "bin": {
+        "uuid": "bin/uuid"
       }
     },
-    "minizlib": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
-      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+    "node_modules/request/node_modules/verror": {
+      "version": "1.10.0",
       "dev": true,
-      "requires": {
-        "minipass": "^3.0.0",
-        "yallist": "^4.0.0"
-      },
+      "engines": [
+        "node >=0.6.0"
+      ],
+      "license": "MIT",
       "dependencies": {
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
       }
     },
-    "mixin-deep": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
-      "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/require-from-string": {
+      "version": "2.0.2",
       "dev": true,
-      "requires": {
-        "for-in": "^1.0.2",
-        "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "dev": true,
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        },
-        "is-plain-object": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-          "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
-      "dev": true
+    "node_modules/require-main-filename": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "ISC"
     },
-    "mkdirp-classic": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
-      "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+    "node_modules/requires-port": {
+      "version": "1.0.0",
+      "license": "MIT"
     },
-    "mobx": {
-      "version": "4.14.1",
-      "resolved": "https://registry.npmjs.org/mobx/-/mobx-4.14.1.tgz",
-      "integrity": "sha512-Oyg7Sr7r78b+QPYLufJyUmxTWcqeQ96S1nmtyur3QL8SeI6e0TqcKKcxbG+sVJLWANhHQkBW/mDmgG5DDC4fdw=="
+    "node_modules/reselect": {
+      "version": "4.1.8",
+      "license": "MIT"
     },
-    "mocha-junit-reporter": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.1.0.tgz",
-      "integrity": "sha512-Zhz1J+XqJUaAOuSFtHgi2+b+W3rP1SZtaU3HHNNp1iEKMSeoC1/EQUVkGknkLNOBxJhXJ4xLgOr8TbYAZOkUIw==",
+    "node_modules/resolve": {
+      "version": "1.22.1",
       "dev": true,
-      "requires": {
-        "debug": "^2.2.0",
-        "md5": "^2.1.0",
-        "mkdirp": "~0.5.1",
-        "strip-ansi": "^6.0.1",
-        "xml": "^1.0.0"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.6",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-          "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
-          "dev": true,
-          "requires": {
-            "minimist": "^1.2.6"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        }
+        "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"
       }
     },
-    "module-deps": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz",
-      "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==",
+    "node_modules/resolve-cwd": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "JSONStream": "^1.0.3",
-        "browser-resolve": "^2.0.0",
-        "cached-path-relative": "^1.0.2",
-        "concat-stream": "~1.6.0",
-        "defined": "^1.0.0",
-        "detective": "^5.2.0",
-        "duplexer2": "^0.1.2",
-        "inherits": "^2.0.1",
-        "parents": "^1.0.0",
-        "readable-stream": "^2.0.2",
-        "resolve": "^1.4.0",
-        "stream-combiner2": "^1.1.1",
-        "subarg": "^1.0.0",
-        "through2": "^2.0.0",
-        "xtend": "^4.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "browser-resolve": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz",
-          "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",
-          "dev": true,
-          "requires": {
-            "resolve": "^1.17.0"
-          }
-        }
+        "resolve-from": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "moment": {
-      "version": "2.29.4",
-      "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
-      "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
-    },
-    "moo-color": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz",
-      "integrity": "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==",
+    "node_modules/resolve-dir": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "color-name": "^1.1.4"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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
-        }
+        "expand-tilde": "^2.0.0",
+        "global-modules": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "morgan": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
-      "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
+    "node_modules/resolve-from": {
+      "version": "5.0.0",
       "dev": true,
-      "requires": {
-        "basic-auth": "~2.0.1",
-        "debug": "2.6.9",
-        "depd": "~2.0.0",
-        "on-finished": "~2.3.0",
-        "on-headers": "~1.0.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": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        },
-        "on-finished": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
-          "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
-          "dev": true,
-          "requires": {
-            "ee-first": "1.1.1"
-          }
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "mri": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
-      "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
-      "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=="
+    "node_modules/resolve-url": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "multicast-dns": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
-      "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+    "node_modules/resolve-url-loader": {
+      "version": "5.0.0",
       "dev": true,
-      "requires": {
-        "dns-packet": "^1.3.1",
-        "thunky": "^1.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "adjust-sourcemap-loader": "^4.0.0",
+        "convert-source-map": "^1.7.0",
+        "loader-utils": "^2.0.0",
+        "postcss": "^8.2.14",
+        "source-map": "0.6.1"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "multicast-dns-service-types": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
-      "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==",
-      "dev": true
-    },
-    "multimatch": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
-      "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
+    "node_modules/resolve-url-loader/node_modules/loader-utils": {
+      "version": "2.0.4",
       "dev": true,
-      "requires": {
-        "@types/minimatch": "^3.0.3",
-        "array-differ": "^3.0.0",
-        "array-union": "^2.1.0",
-        "arrify": "^2.0.1",
-        "minimatch": "^3.0.4"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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
-        }
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=8.9.0"
       }
     },
-    "mute-stream": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
-      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
-      "dev": true
-    },
-    "mz": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
-      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+    "node_modules/resolve-url-loader/node_modules/source-map": {
+      "version": "0.6.1",
       "dev": true,
-      "requires": {
-        "any-promise": "^1.0.0",
-        "object-assign": "^4.0.1",
-        "thenify-all": "^1.0.0"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "nan": {
-      "version": "2.17.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
-      "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
-      "optional": true
-    },
-    "nanoid": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
-      "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
-      "dev": true
-    },
-    "nanomatch": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
-      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+    "node_modules/resolve.exports": {
+      "version": "1.1.1",
       "dev": true,
-      "requires": {
-        "arr-diff": "^4.0.0",
-        "array-unique": "^0.3.2",
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "fragment-cache": "^0.2.1",
-        "is-windows": "^1.0.2",
-        "kind-of": "^6.0.2",
-        "object.pick": "^1.3.0",
-        "regex-not": "^1.0.0",
-        "snapdragon": "^0.8.1",
-        "to-regex": "^3.0.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
       }
     },
-    "napi-build-utils": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
-      "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
-      "optional": true
-    },
-    "natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
-      "dev": true
-    },
-    "needle": {
-      "version": "2.9.1",
-      "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz",
-      "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==",
+    "node_modules/restore-cursor": {
+      "version": "3.1.0",
       "dev": true,
-      "optional": true,
-      "requires": {
-        "debug": "^3.2.6",
-        "iconv-lite": "^0.4.4",
-        "sax": "^1.2.4"
-      },
+      "license": "MIT",
       "dependencies": {
-        "debug": {
-          "version": "3.2.7",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        }
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "negotiator": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
-      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
-      "dev": true
+    "node_modules/ret": {
+      "version": "0.2.2",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "neo-async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-      "dev": true
+    "node_modules/retry": {
+      "version": "0.12.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
+      }
     },
-    "next-tick": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
-      "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
-      "dev": true
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rfdc": {
+      "version": "1.3.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "ng-block-ui": {
+    "node_modules/rimraf": {
       "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/ng-block-ui/-/ng-block-ui-3.0.2.tgz",
-      "integrity": "sha512-EP3IXP8WSoKQOAwunf/v77aydcBCSLkEm5K8duRMSXFsnrcTdNqUiaLDKCf9U3COHY52IVBJcLb9PGhMBCWVSA==",
-      "requires": {
-        "tslib": "^1.10.0"
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "glob": "^7.1.3"
       },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/rimraf/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
       "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "ng-click-outside": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/ng-click-outside/-/ng-click-outside-7.0.0.tgz",
-      "integrity": "sha512-5QgqABb8ULqQtHNvCNXnBlzjKfILXrdZkq/xcnGL1aM1EmrY7xlUQQ/WLYnxno0gw/QQwCE5tH7sFfFUhIn8CA=="
+    "node_modules/ripemd160": {
+      "version": "2.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
     },
-    "ng-mocks": {
-      "version": "14.3.0",
-      "resolved": "https://registry.npmjs.org/ng-mocks/-/ng-mocks-14.3.0.tgz",
-      "integrity": "sha512-Nwjwj/EUjOjYRT/2sqJmeNNzn3FIZwPTPuZkv0G6yBfOl2NusDMhQl815HkA7XGQcdUGbb1eMqmRz0zlsaUrww==",
-      "dev": true
+    "node_modules/run-async": {
+      "version": "2.4.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12.0"
+      }
     },
-    "ng2-charts": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-2.4.2.tgz",
-      "integrity": "sha512-mY3C2uKCaApHCQizS2YxEOqQ7sSZZLxdV6N1uM9u/VvUgVtYvlPtdcXbKpN52ak93ZE22I73DiLWVDnDNG4/AQ==",
-      "requires": {
-        "@types/chart.js": "^2.9.24",
-        "lodash-es": "^4.17.15",
-        "tslib": "^2.0.0"
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "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"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
       }
     },
-    "ngx-pipe-function": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/ngx-pipe-function/-/ngx-pipe-function-1.0.0.tgz",
-      "integrity": "sha512-AFWZ3icsq+0/nxFZtqRGZ03nRFoHcxVkZNGIi4ZQbdl5QLP3FmNTHGMmigohSeCV785l3YmPDUEx+6qwdGynMw==",
-      "requires": {
+    "node_modules/rxjs": {
+      "version": "6.6.3",
+      "license": "Apache-2.0",
+      "dependencies": {
         "tslib": "^1.9.0"
       },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
+      "engines": {
+        "npm": ">=2.0.0"
       }
     },
-    "ngx-toastr": {
-      "version": "14.3.0",
-      "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-14.3.0.tgz",
-      "integrity": "sha512-d8j/sOr60w5U7rGlcKQ0Ff4u+m2NzhqU5ZdJXn7QW3aR3Zf/rY7/Fd14BmUindTOWVr2NeTYcQXCjLpir0ldpA==",
-      "requires": {
-        "tslib": "^2.3.0"
+    "node_modules/rxjs-for-await": {
+      "version": "0.0.2",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "rxjs": "^6.0.0"
       }
     },
-    "nice-napi": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz",
-      "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==",
+    "node_modules/rxjs/node_modules/tslib": {
+      "version": "1.14.1",
+      "license": "0BSD"
+    },
+    "node_modules/safe-array-concat": {
+      "version": "1.0.1",
       "dev": true,
-      "optional": true,
-      "requires": {
-        "node-addon-api": "^3.0.0",
-        "node-gyp-build": "^4.2.2"
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.2.1",
+        "has-symbols": "^1.0.3",
+        "isarray": "^2.0.5"
+      },
+      "engines": {
+        "node": ">=0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "nice-try": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-      "dev": true
+    "node_modules/safe-array-concat/node_modules/isarray": {
+      "version": "2.0.5",
+      "dev": true,
+      "license": "MIT"
     },
-    "no-case": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
-      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/safe-regex": {
+      "version": "1.1.0",
       "dev": true,
-      "requires": {
-        "lower-case": "^1.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "ret": "~0.1.10"
       }
     },
-    "node-abi": {
-      "version": "2.30.1",
-      "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz",
-      "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
-      "optional": true,
-      "requires": {
-        "semver": "^5.4.1"
-      },
+    "node_modules/safe-regex-test": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "optional": true
-        }
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.3",
+        "is-regex": "^1.1.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node-addon-api": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
-      "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
-      "dev": true
-    },
-    "node-domexception": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
-      "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
-    },
-    "node-fetch": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
-      "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
-      "requires": {
-        "whatwg-url": "^5.0.0"
+    "node_modules/safe-regex/node_modules/ret": {
+      "version": "0.1.15",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12"
       }
     },
-    "node-forge": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
-      "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==",
-      "dev": true
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "node-gyp": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
-      "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
+    "node_modules/sass": {
+      "version": "1.58.1",
       "dev": true,
-      "requires": {
-        "env-paths": "^2.2.0",
-        "glob": "^7.1.4",
-        "graceful-fs": "^4.2.6",
-        "make-fetch-happen": "^9.1.0",
-        "nopt": "^5.0.0",
-        "npmlog": "^6.0.0",
-        "rimraf": "^3.0.2",
-        "semver": "^7.3.5",
-        "tar": "^6.1.2",
-        "which": "^2.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "chokidar": ">=3.0.0 <4.0.0",
+        "immutable": "^4.0.0",
+        "source-map-js": ">=0.6.2 <2.0.0"
       },
+      "bin": {
+        "sass": "sass.js"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/sass-loader": {
+      "version": "13.2.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "are-we-there-yet": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
-          "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
-          "dev": true,
-          "requires": {
-            "delegates": "^1.0.0",
-            "readable-stream": "^3.6.0"
-          }
-        },
-        "gauge": {
-          "version": "4.0.4",
-          "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
-          "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
-          "dev": true,
-          "requires": {
-            "aproba": "^1.0.3 || ^2.0.0",
-            "color-support": "^1.1.3",
-            "console-control-strings": "^1.1.0",
-            "has-unicode": "^2.0.1",
-            "signal-exit": "^3.0.7",
-            "string-width": "^4.2.3",
-            "strip-ansi": "^6.0.1",
-            "wide-align": "^1.1.5"
-          }
-        },
-        "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"
-          }
-        },
-        "npmlog": {
-          "version": "6.0.2",
-          "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
-          "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
-          "dev": true,
-          "requires": {
-            "are-we-there-yet": "^3.0.0",
-            "console-control-strings": "^1.1.0",
-            "gauge": "^4.0.3",
-            "set-blocking": "^2.0.0"
-          }
+        "klona": "^2.0.4",
+        "neo-async": "^2.6.2"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "fibers": ">= 3.1.0",
+        "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+        "sass": "^1.3.0",
+        "sass-embedded": "*",
+        "webpack": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "fibers": {
+          "optional": true
         },
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
+        "node-sass": {
+          "optional": true
         },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
+        "sass": {
+          "optional": true
         },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
+        "sass-embedded": {
+          "optional": true
         }
       }
     },
-    "node-gyp-build": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
-      "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
-      "dev": true
+    "node_modules/sax": {
+      "version": "1.2.4",
+      "dev": true,
+      "license": "ISC"
     },
-    "node-int64": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
-      "dev": true
+    "node_modules/saxes": {
+      "version": "3.1.11",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "xmlchars": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "node-releases": {
-      "version": "2.0.12",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
-      "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ=="
+    "node_modules/scheduler": {
+      "version": "0.20.2",
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
+      }
     },
-    "nopt": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
-      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+    "node_modules/schema-utils": {
+      "version": "4.2.0",
       "dev": true,
-      "requires": {
-        "abbrev": "1"
+      "license": "MIT",
+      "dependencies": {
+        "@types/json-schema": "^7.0.9",
+        "ajv": "^8.9.0",
+        "ajv-formats": "^2.1.1",
+        "ajv-keywords": "^5.1.0"
+      },
+      "engines": {
+        "node": ">= 12.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
       }
     },
-    "normalize-package-data": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+    "node_modules/scope-analyzer": {
+      "version": "2.1.2",
       "dev": true,
-      "requires": {
-        "hosted-git-info": "^2.1.4",
-        "resolve": "^1.10.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      },
+      "license": "Apache-2.0",
       "dependencies": {
-        "hosted-git-info": {
-          "version": "2.8.9",
-          "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-          "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-          "dev": true
-        },
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true
-        }
+        "array-from": "^2.1.1",
+        "dash-ast": "^2.0.1",
+        "es6-map": "^0.1.5",
+        "es6-set": "^0.1.5",
+        "es6-symbol": "^3.1.1",
+        "estree-is-function": "^1.0.0",
+        "get-assigned-identifiers": "^1.1.0"
       }
     },
-    "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
-    },
-    "normalize-range": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
-      "dev": true
+    "node_modules/seed-random": {
+      "version": "2.2.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "normalize-selector": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz",
-      "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==",
-      "dev": true
+    "node_modules/select-hose": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "npm-bundled": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz",
-      "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==",
+    "node_modules/selfsigned": {
+      "version": "2.1.1",
       "dev": true,
-      "requires": {
-        "npm-normalize-package-bin": "^1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "node-forge": "^1"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "npm-install-checks": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz",
-      "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==",
+    "node_modules/semver": {
+      "version": "7.5.3",
       "dev": true,
-      "requires": {
-        "semver": "^7.1.1"
+      "license": "ISC",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
       },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/semver/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "dev": true,
+      "license": "ISC",
       "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "npm-normalize-package-bin": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
-      "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==",
-      "dev": true
+    "node_modules/semver/node_modules/yallist": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC"
     },
-    "npm-package-arg": {
-      "version": "8.1.5",
-      "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz",
-      "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==",
+    "node_modules/send": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
       "dev": true,
-      "requires": {
-        "hosted-git-info": "^4.0.1",
-        "semver": "^7.3.4",
-        "validate-npm-package-name": "^3.0.0"
-      },
       "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "npm-packlist": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-3.0.0.tgz",
-      "integrity": "sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==",
+    "node_modules/send/node_modules/debug": {
+      "version": "2.6.9",
       "dev": true,
-      "requires": {
-        "glob": "^7.1.6",
-        "ignore-walk": "^4.0.1",
-        "npm-bundled": "^1.1.1",
-        "npm-normalize-package-bin": "^1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
       }
     },
-    "npm-pick-manifest": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz",
-      "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==",
-      "dev": true,
-      "requires": {
-        "npm-install-checks": "^4.0.0",
-        "npm-normalize-package-bin": "^1.0.1",
-        "npm-package-arg": "^8.1.2",
-        "semver": "^7.3.4"
-      },
-      "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "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/send/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "npm-registry-fetch": {
-      "version": "12.0.2",
-      "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-12.0.2.tgz",
-      "integrity": "sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==",
+    "node_modules/send/node_modules/depd": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "make-fetch-happen": "^10.0.1",
-        "minipass": "^3.1.6",
-        "minipass-fetch": "^1.4.1",
-        "minipass-json-stream": "^1.0.1",
-        "minizlib": "^2.1.2",
-        "npm-package-arg": "^8.1.5"
-      },
-      "dependencies": {
-        "@npmcli/fs": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz",
-          "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==",
-          "dev": true,
-          "requires": {
-            "@gar/promisify": "^1.1.3",
-            "semver": "^7.3.5"
-          }
-        },
-        "@npmcli/move-file": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz",
-          "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==",
-          "dev": true,
-          "requires": {
-            "mkdirp": "^1.0.4",
-            "rimraf": "^3.0.2"
-          }
-        },
-        "@tootallnate/once": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
-          "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
-          "dev": true
-        },
-        "brace-expansion": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-          "dev": true,
-          "requires": {
-            "balanced-match": "^1.0.0"
-          }
-        },
-        "cacache": {
-          "version": "16.1.3",
-          "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz",
-          "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==",
-          "dev": true,
-          "requires": {
-            "@npmcli/fs": "^2.1.0",
-            "@npmcli/move-file": "^2.0.0",
-            "chownr": "^2.0.0",
-            "fs-minipass": "^2.1.0",
-            "glob": "^8.0.1",
-            "infer-owner": "^1.0.4",
-            "lru-cache": "^7.7.1",
-            "minipass": "^3.1.6",
-            "minipass-collect": "^1.0.2",
-            "minipass-flush": "^1.0.5",
-            "minipass-pipeline": "^1.2.4",
-            "mkdirp": "^1.0.4",
-            "p-map": "^4.0.0",
-            "promise-inflight": "^1.0.1",
-            "rimraf": "^3.0.2",
-            "ssri": "^9.0.0",
-            "tar": "^6.1.11",
-            "unique-filename": "^2.0.0"
-          }
-        },
-        "chownr": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
-          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
-          "dev": true
-        },
-        "glob": {
-          "version": "8.1.0",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-          "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^5.0.1",
-            "once": "^1.3.0"
-          }
-        },
-        "http-proxy-agent": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
-          "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
-          "dev": true,
-          "requires": {
-            "@tootallnate/once": "2",
-            "agent-base": "6",
-            "debug": "4"
-          }
-        },
-        "lru-cache": {
-          "version": "7.18.3",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
-          "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
-          "dev": true
-        },
-        "make-fetch-happen": {
-          "version": "10.2.1",
-          "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz",
-          "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==",
-          "dev": true,
-          "requires": {
-            "agentkeepalive": "^4.2.1",
-            "cacache": "^16.1.0",
-            "http-cache-semantics": "^4.1.0",
-            "http-proxy-agent": "^5.0.0",
-            "https-proxy-agent": "^5.0.0",
-            "is-lambda": "^1.0.1",
-            "lru-cache": "^7.7.1",
-            "minipass": "^3.1.6",
-            "minipass-collect": "^1.0.2",
-            "minipass-fetch": "^2.0.3",
-            "minipass-flush": "^1.0.5",
-            "minipass-pipeline": "^1.2.4",
-            "negotiator": "^0.6.3",
-            "promise-retry": "^2.0.1",
-            "socks-proxy-agent": "^7.0.0",
-            "ssri": "^9.0.0"
-          },
-          "dependencies": {
-            "minipass-fetch": {
-              "version": "2.1.2",
-              "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz",
-              "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==",
-              "dev": true,
-              "requires": {
-                "encoding": "^0.1.13",
-                "minipass": "^3.1.6",
-                "minipass-sized": "^1.0.3",
-                "minizlib": "^2.1.2"
-              }
-            }
-          }
-        },
-        "minimatch": {
-          "version": "5.1.6",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-          "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^2.0.1"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          },
-          "dependencies": {
-            "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"
-              }
-            }
-          }
-        },
-        "socks-proxy-agent": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz",
-          "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==",
-          "dev": true,
-          "requires": {
-            "agent-base": "^6.0.2",
-            "debug": "^4.3.3",
-            "socks": "^2.6.2"
-          }
-        },
-        "ssri": {
-          "version": "9.0.1",
-          "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz",
-          "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==",
-          "dev": true,
-          "requires": {
-            "minipass": "^3.1.1"
-          }
-        },
-        "unique-filename": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz",
-          "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==",
-          "dev": true,
-          "requires": {
-            "unique-slug": "^3.0.0"
-          }
-        },
-        "unique-slug": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz",
-          "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==",
-          "dev": true,
-          "requires": {
-            "imurmurhash": "^0.1.4"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "npm-run-all": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
-      "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+    "node_modules/send/node_modules/http-errors": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "ansi-styles": "^3.2.1",
-        "chalk": "^2.4.1",
-        "cross-spawn": "^6.0.5",
-        "memorystream": "^0.3.1",
-        "minimatch": "^3.0.4",
-        "pidtree": "^0.3.0",
-        "read-pkg": "^3.0.0",
-        "shell-quote": "^1.6.1",
-        "string.prototype.padend": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "depd": "2.0.0",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "toidentifier": "1.0.1"
       },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/send/node_modules/ms": {
+      "version": "2.1.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/send/node_modules/on-finished": {
+      "version": "2.4.1",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "path-key": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-          "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
-          "dev": true
-        },
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true
-        },
-        "shebang-command": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-          "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
-          "dev": true,
-          "requires": {
-            "shebang-regex": "^1.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-          "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
-          "dev": true
-        },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        }
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "npm-run-path": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+    "node_modules/send/node_modules/setprototypeof": {
+      "version": "1.2.0",
       "dev": true,
-      "requires": {
-        "path-key": "^3.0.0"
+      "license": "ISC"
+    },
+    "node_modules/send/node_modules/statuses": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "npmlog": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
-      "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
-      "optional": true,
-      "requires": {
-        "are-we-there-yet": "~1.1.2",
-        "console-control-strings": "~1.1.0",
-        "gauge": "~2.7.3",
-        "set-blocking": "~2.0.0"
+    "node_modules/send/node_modules/toidentifier": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6"
       }
     },
-    "nth-check": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
-      "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+    "node_modules/serialize-error": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "boolbase": "^1.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "num2fraction": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
-      "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==",
-      "dev": true
+    "node_modules/serialize-javascript": {
+      "version": "6.0.1",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "randombytes": "^2.1.0"
+      }
     },
-    "number-is-nan": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ=="
+    "node_modules/serve-index": {
+      "version": "1.9.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "nwsapi": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz",
-      "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==",
-      "dev": true
+    "node_modules/serve-index/node_modules/debug": {
+      "version": "2.6.9",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
+      }
     },
-    "nx": {
-      "version": "13.1.3",
-      "resolved": "https://registry.npmjs.org/nx/-/nx-13.1.3.tgz",
-      "integrity": "sha512-clM0NQhQKYkqcNz2E3uYRMLwhp2L/9dBhJhQi9XBX4IAyA2gWAomhRIlLm5Xxg3g4h1xwSpP3eJ5t89VikY8Pw==",
+    "node_modules/serve-index/node_modules/http-errors": {
+      "version": "1.6.3",
       "dev": true,
-      "requires": {
-        "@nrwl/cli": "*"
+      "license": "MIT",
+      "dependencies": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": ">= 1.4.0 < 2"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "oauth-sign": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
-      "dev": true
+    "node_modules/serve-index/node_modules/inherits": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "ISC"
     },
-    "object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
+    "node_modules/serve-index/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "object-copy": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
+    "node_modules/serve-index/node_modules/setprototypeof": {
+      "version": "1.1.0",
       "dev": true,
-      "requires": {
-        "copy-descriptor": "^0.1.0",
-        "define-property": "^0.2.5",
-        "kind-of": "^3.0.3"
+      "license": "ISC"
+    },
+    "node_modules/serve-static": {
+      "version": "1.14.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.17.1"
       },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/serve-static/node_modules/debug": {
+      "version": "2.6.9",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "ms": "2.0.0"
       }
     },
-    "object-inspect": {
-      "version": "1.12.3",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
-      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+    "node_modules/serve-static/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "object-is": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
-      "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+    "node_modules/serve-static/node_modules/destroy": {
+      "version": "1.0.4",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3"
-      }
+      "license": "MIT"
     },
-    "object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
+    "node_modules/serve-static/node_modules/ms": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "object-visit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
+    "node_modules/serve-static/node_modules/send": {
+      "version": "0.17.1",
       "dev": true,
-      "requires": {
-        "isobject": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "~1.7.2",
+        "mime": "1.6.0",
+        "ms": "2.1.1",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.1",
+        "statuses": "~1.5.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "object.assign": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
-      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+    "node_modules/set-blocking": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "has-symbols": "^1.0.3",
-        "object-keys": "^1.1.1"
+      "license": "ISC"
+    },
+    "node_modules/set-function-name": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-data-property": "^1.0.1",
+        "functions-have-names": "^1.2.3",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "object.defaults": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
-      "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==",
+    "node_modules/set-value": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "array-each": "^1.0.1",
-        "array-slice": "^1.0.0",
-        "for-own": "^1.0.0",
-        "isobject": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "object.map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
-      "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==",
+    "node_modules/set-value/node_modules/extend-shallow": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "for-own": "^1.0.0",
-        "make-iterator": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "is-extendable": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "object.pick": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-      "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
+    "node_modules/set-value/node_modules/is-extendable": {
+      "version": "0.1.1",
       "dev": true,
-      "requires": {
-        "isobject": "^3.0.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "obuf": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
-      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
-      "dev": true
+    "node_modules/setprototypeof": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "ISC"
     },
-    "on-finished": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
-      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+    "node_modules/sha.js": {
+      "version": "2.4.11",
+      "license": "(MIT AND BSD-3-Clause)",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      },
+      "bin": {
+        "sha.js": "bin.js"
+      }
+    },
+    "node_modules/shallow-clone": {
+      "version": "3.0.1",
       "dev": true,
-      "requires": {
-        "ee-first": "1.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^6.0.2"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "on-headers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
-      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
-      "dev": true
+    "node_modules/shallow-copy": {
+      "version": "0.0.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "requires": {
-        "wrappy": "1"
+    "node_modules/shasum": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "json-stable-stringify": "~0.0.0",
+        "sha.js": "~2.4.4"
       }
     },
-    "onetime": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
-      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+    "node_modules/shasum-object": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "mimic-fn": "^2.1.0"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "fast-safe-stringify": "^2.0.7"
       }
     },
-    "open": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
-      "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "define-lazy-prop": "^2.0.0",
-        "is-docker": "^2.1.1",
-        "is-wsl": "^2.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "opencollective-postinstall": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
-      "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
-      "dev": true
-    },
-    "optionator": {
-      "version": "0.8.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.6",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "word-wrap": "~1.2.3"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "ora": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
-      "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+    "node_modules/shell-quote": {
+      "version": "1.8.1",
       "dev": true,
-      "requires": {
-        "bl": "^4.1.0",
-        "chalk": "^4.1.0",
-        "cli-cursor": "^3.1.0",
-        "cli-spinners": "^2.5.0",
-        "is-interactive": "^1.0.0",
-        "is-unicode-supported": "^0.1.0",
-        "log-symbols": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "wcwidth": "^1.0.1"
-      },
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/short-unique-id": {
+      "version": "5.0.3",
+      "license": "Apache-2.0",
+      "bin": {
+        "short-unique-id": "bin/short-unique-id",
+        "suid": "bin/short-unique-id"
+      }
+    },
+    "node_modules/side-channel": {
+      "version": "1.0.4",
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "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"
-          }
-        }
+        "call-bind": "^1.0.0",
+        "get-intrinsic": "^1.0.2",
+        "object-inspect": "^1.9.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "os-browserify": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
-      "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
-      "dev": true
+    "node_modules/signal-exit": {
+      "version": "3.0.7",
+      "dev": true,
+      "license": "ISC"
     },
-    "os-locale": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
-      "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+    "node_modules/sigstore": {
+      "version": "1.9.0",
       "dev": true,
-      "requires": {
-        "execa": "^1.0.0",
-        "lcid": "^2.0.0",
-        "mem": "^4.0.0"
-      },
+      "license": "Apache-2.0",
       "dependencies": {
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
-          "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "is-stream": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-          "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
-          "dev": true
-        },
-        "npm-run-path": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-          "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
-          "dev": true,
-          "requires": {
-            "path-key": "^2.0.0"
-          }
-        },
-        "path-key": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-          "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
-          "dev": true
-        },
-        "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
-          "dev": true
-        },
-        "shebang-command": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-          "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
-          "dev": true,
-          "requires": {
-            "shebang-regex": "^1.0.0"
-          }
+        "@sigstore/bundle": "^1.1.0",
+        "@sigstore/protobuf-specs": "^0.2.0",
+        "@sigstore/sign": "^1.0.0",
+        "@sigstore/tuf": "^1.0.3",
+        "make-fetch-happen": "^11.0.1"
+      },
+      "bin": {
+        "sigstore": "bin/sigstore.js"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/simple-concat": {
+      "version": "1.0.1",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
         },
-        "shebang-regex": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-          "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
-          "dev": true
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
         },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
         }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/simplebar": {
+      "version": "5.3.9",
+      "license": "MIT",
+      "dependencies": {
+        "@juggle/resize-observer": "^3.3.1",
+        "can-use-dom": "^0.1.0",
+        "core-js": "^3.0.1",
+        "lodash.debounce": "^4.0.8",
+        "lodash.memoize": "^4.1.2",
+        "lodash.throttle": "^4.1.1"
       }
     },
-    "os-name": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz",
-      "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==",
-      "dev": true,
-      "requires": {
-        "macos-release": "^2.5.0",
-        "windows-release": "^4.0.0"
+    "node_modules/simplebar-angular": {
+      "version": "2.3.6",
+      "dependencies": {
+        "simplebar": "^5.3.6",
+        "tslib": "^1.9.0"
+      },
+      "peerDependencies": {
+        "@angular/common": "^8.1.3",
+        "@angular/core": "^8.1.3"
       }
     },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
-      "dev": true
-    },
-    "ospath": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz",
-      "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==",
-      "dev": true
+    "node_modules/simplebar-angular/node_modules/tslib": {
+      "version": "1.14.1",
+      "license": "0BSD"
     },
-    "outpipe": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz",
-      "integrity": "sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==",
-      "dev": true,
-      "requires": {
-        "shell-quote": "^1.4.2"
+    "node_modules/simplebar/node_modules/core-js": {
+      "version": "3.32.2",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/core-js"
       }
     },
-    "p-defer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
-      "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
-      "dev": true
-    },
-    "p-finally": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-      "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
-      "dev": true
+    "node_modules/simplebar/node_modules/lodash.memoize": {
+      "version": "4.1.2",
+      "license": "MIT"
     },
-    "p-is-promise": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
-      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
-      "dev": true
+    "node_modules/sisteransi": {
+      "version": "1.0.5",
+      "dev": true,
+      "license": "MIT"
     },
-    "p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+    "node_modules/slash": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "p-try": "^2.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "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==",
+    "node_modules/slice-ansi": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "p-limit": "^2.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "astral-regex": "^2.0.0",
+        "is-fullwidth-code-point": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "p-map": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
-      "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+    "node_modules/smart-buffer": {
+      "version": "4.2.0",
       "dev": true,
-      "requires": {
-        "aggregate-error": "^3.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6.0.0",
+        "npm": ">= 3.0.0"
       }
     },
-    "p-retry": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz",
-      "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",
+    "node_modules/snapdragon": {
+      "version": "0.8.2",
       "dev": true,
-      "requires": {
-        "@types/retry": "0.12.0",
-        "retry": "^0.13.1"
+      "license": "MIT",
+      "dependencies": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.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
-    },
-    "pacote": {
-      "version": "12.0.3",
-      "resolved": "https://registry.npmjs.org/pacote/-/pacote-12.0.3.tgz",
-      "integrity": "sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==",
-      "dev": true,
-      "requires": {
-        "@npmcli/git": "^2.1.0",
-        "@npmcli/installed-package-contents": "^1.0.6",
-        "@npmcli/promise-spawn": "^1.2.0",
-        "@npmcli/run-script": "^2.0.0",
-        "cacache": "^15.0.5",
-        "chownr": "^2.0.0",
-        "fs-minipass": "^2.1.0",
-        "infer-owner": "^1.0.4",
-        "minipass": "^3.1.3",
-        "mkdirp": "^1.0.3",
-        "npm-package-arg": "^8.0.1",
-        "npm-packlist": "^3.0.0",
-        "npm-pick-manifest": "^6.0.0",
-        "npm-registry-fetch": "^12.0.0",
-        "promise-retry": "^2.0.1",
-        "read-package-json-fast": "^2.0.1",
-        "rimraf": "^3.0.2",
-        "ssri": "^8.0.1",
-        "tar": "^6.1.0"
-      },
+    "node_modules/snapdragon-node": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "chownr": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
-          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
-          "dev": true
-        }
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^3.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "pad-right": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz",
-      "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==",
+    "node_modules/snapdragon-node/node_modules/define-property": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "repeat-string": "^1.5.2"
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "pako": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
-      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
-      "dev": true
-    },
-    "parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+    "node_modules/snapdragon-util": {
+      "version": "3.0.1",
       "dev": true,
-      "requires": {
-        "callsites": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.2.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "parents": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
-      "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==",
+    "node_modules/snapdragon-util/node_modules/kind-of": {
+      "version": "3.2.2",
       "dev": true,
-      "requires": {
-        "path-platform": "~0.11.15"
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "parse-asn1": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
-      "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
+    "node_modules/snapdragon/node_modules/debug": {
+      "version": "2.6.9",
       "dev": true,
-      "requires": {
-        "asn1.js": "^5.2.0",
-        "browserify-aes": "^1.0.0",
-        "evp_bytestokey": "^1.0.0",
-        "pbkdf2": "^3.0.3",
-        "safe-buffer": "^5.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.0.0"
       }
     },
-    "parse-entities": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
-      "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
-      "requires": {
-        "character-entities": "^1.0.0",
-        "character-entities-legacy": "^1.0.0",
-        "character-reference-invalid": "^1.0.0",
-        "is-alphanumerical": "^1.0.0",
-        "is-decimal": "^1.0.0",
-        "is-hexadecimal": "^1.0.0"
+    "node_modules/snapdragon/node_modules/define-property": {
+      "version": "0.2.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "parse-filepath": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
-      "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==",
+    "node_modules/snapdragon/node_modules/extend-shallow": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "is-absolute": "^1.0.0",
-        "map-cache": "^0.2.0",
-        "path-root": "^0.1.1"
+      "license": "MIT",
+      "dependencies": {
+        "is-extendable": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "parse-json": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+    "node_modules/snapdragon/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
       "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "error-ex": "^1.3.1",
-        "json-parse-even-better-errors": "^2.3.0",
-        "lines-and-columns": "^1.1.6"
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "parse-node-version": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
-      "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
-      "dev": true
-    },
-    "parse-passwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
-      "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
-      "dev": true
-    },
-    "parse5": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
-      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
-      "dev": true
-    },
-    "parse5-html-rewriting-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz",
-      "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==",
+    "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
       "dev": true,
-      "requires": {
-        "parse5": "^6.0.1",
-        "parse5-sax-parser": "^6.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "parse5-htmlparser2-tree-adapter": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
-      "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+    "node_modules/snapdragon/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
       "dev": true,
-      "requires": {
-        "parse5": "^6.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "parse5-sax-parser": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz",
-      "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==",
+    "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
       "dev": true,
-      "requires": {
-        "parse5": "^6.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "parseurl": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-      "dev": true
-    },
-    "pascalcase": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
-      "dev": true
-    },
-    "path-browserify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
-      "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
-      "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
-    },
-    "path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "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-platform": {
-      "version": "0.11.15",
-      "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
-      "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==",
-      "dev": true
+    "node_modules/snapdragon/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "path-root": {
+    "node_modules/snapdragon/node_modules/is-extendable": {
       "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
-      "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
       "dev": true,
-      "requires": {
-        "path-root-regex": "^0.1.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "path-root-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
-      "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==",
-      "dev": true
-    },
-    "path-to-regexp": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-      "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
-      "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
+    "node_modules/snapdragon/node_modules/kind-of": {
+      "version": "5.1.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "pathval": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
-      "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
-      "dev": true
+    "node_modules/snapdragon/node_modules/ms": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "pause-stream": {
-      "version": "0.0.11",
-      "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
-      "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==",
+    "node_modules/snapdragon/node_modules/source-map": {
+      "version": "0.5.7",
       "dev": true,
-      "requires": {
-        "through": "~2.3"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "pbkdf2": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
-      "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+    "node_modules/sockjs": {
+      "version": "0.3.24",
       "dev": true,
-      "requires": {
-        "create-hash": "^1.1.2",
-        "create-hmac": "^1.1.4",
-        "ripemd160": "^2.0.1",
-        "safe-buffer": "^5.0.1",
-        "sha.js": "^2.4.8"
+      "license": "MIT",
+      "dependencies": {
+        "faye-websocket": "^0.11.3",
+        "uuid": "^8.3.2",
+        "websocket-driver": "^0.7.4"
       }
     },
-    "pdfjs-dist": {
-      "version": "2.16.105",
-      "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz",
-      "integrity": "sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==",
+    "node_modules/socks": {
+      "version": "2.7.1",
       "dev": true,
-      "requires": {
-        "dommatrix": "^1.0.3",
-        "web-streams-polyfill": "^3.2.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "web-streams-polyfill": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz",
-          "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==",
-          "dev": true
-        }
+        "ip": "^2.0.0",
+        "smart-buffer": "^4.2.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0",
+        "npm": ">= 3.0.0"
       }
     },
-    "pdfmake": {
-      "version": "0.2.7",
-      "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.7.tgz",
-      "integrity": "sha512-ClLpgx30H5G3EDvRW1MrA1Xih6YxEaSgIVFrOyBMgAAt62V+hxsyWAi6JNP7u1Fc5JKYAbpb4RRVw8Rhvmz5cQ==",
+    "node_modules/socks-proxy-agent": {
+      "version": "7.0.0",
       "dev": true,
-      "requires": {
-        "@foliojs-fork/linebreak": "^1.1.1",
-        "@foliojs-fork/pdfkit": "^0.13.0",
-        "iconv-lite": "^0.6.3",
-        "xmldoc": "^1.1.2"
+      "license": "MIT",
+      "dependencies": {
+        "agent-base": "^6.0.2",
+        "debug": "^4.3.3",
+        "socks": "^2.6.2"
       },
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/socks-proxy-agent/node_modules/debug": {
+      "version": "4.3.4",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "iconv-lite": {
-          "version": "0.6.3",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-          "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-          "dev": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3.0.0"
-          }
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
         }
       }
     },
-    "pend": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
-      "dev": true
-    },
-    "performance-now": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
-      "dev": true
-    },
-    "picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-    },
-    "picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true
+    "node_modules/source-map": {
+      "version": "0.7.4",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">= 8"
+      }
     },
-    "pidtree": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
-      "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
-      "dev": true
+    "node_modules/source-map-js": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "pify": {
+    "node_modules/source-map-loader": {
       "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-      "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
       "dev": true,
-      "optional": true
-    },
-    "pirates": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
-      "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
-      "dev": true
+      "license": "MIT",
+      "dependencies": {
+        "abab": "^2.0.6",
+        "iconv-lite": "^0.6.3",
+        "source-map-js": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.72.1"
+      }
     },
-    "piscina": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz",
-      "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==",
+    "node_modules/source-map-loader/node_modules/iconv-lite": {
+      "version": "0.6.3",
       "dev": true,
-      "requires": {
-        "eventemitter-asyncresource": "^1.0.0",
-        "hdr-histogram-js": "^2.0.1",
-        "hdr-histogram-percentiles-obj": "^3.0.0",
-        "nice-napi": "^1.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "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==",
+    "node_modules/source-map-resolve": {
+      "version": "0.5.3",
       "dev": true,
-      "requires": {
-        "find-up": "^4.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "atob": "^2.1.2",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
       }
     },
-    "pn": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
-      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==",
-      "dev": true
-    },
-    "png-async": {
-      "version": "0.9.4",
-      "resolved": "https://registry.npmjs.org/png-async/-/png-async-0.9.4.tgz",
-      "integrity": "sha512-B//AXX9TkneKfgtOpT1mdUnnhk2BImGD+a98vImsMU8uo1dBeHyW/kM2erWZ/CsYteTPU/xKG+t6T62heHkC3A==",
-      "dev": true
-    },
-    "png-js": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz",
-      "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==",
-      "dev": true
-    },
-    "portfinder": {
-      "version": "1.0.32",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
-      "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
       "dev": true,
-      "requires": {
-        "async": "^2.6.4",
-        "debug": "^3.2.7",
-        "mkdirp": "^0.5.6"
-      },
+      "license": "MIT",
       "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.6",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-          "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
-          "dev": true,
-          "requires": {
-            "minimist": "^1.2.6"
-          }
-        }
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
       }
     },
-    "posix-character-classes": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
-      "dev": true
-    },
-    "postcss": {
-      "version": "8.4.5",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
-      "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
+    "node_modules/source-map-support/node_modules/source-map": {
+      "version": "0.6.1",
       "dev": true,
-      "requires": {
-        "nanoid": "^3.1.30",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.1"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-attribute-case-insensitive": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz",
-      "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==",
+    "node_modules/source-map-url": {
+      "version": "0.4.1",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.10"
-      }
+      "license": "MIT"
     },
-    "postcss-color-functional-notation": {
-      "version": "4.2.4",
-      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz",
-      "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==",
+    "node_modules/sourcemap-codec": {
+      "version": "1.4.8",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
+      "license": "MIT"
+    },
+    "node_modules/space-separated-tokens": {
+      "version": "1.1.5",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "postcss-color-hex-alpha": {
-      "version": "8.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz",
-      "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==",
+    "node_modules/spdx-correct": {
+      "version": "3.2.0",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
-    "postcss-color-rebeccapurple": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz",
-      "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==",
+    "node_modules/spdx-exceptions": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
-      }
+      "license": "CC-BY-3.0"
     },
-    "postcss-custom-media": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz",
-      "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==",
+    "node_modules/spdx-expression-parse": {
+      "version": "3.0.1",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
-    "postcss-custom-properties": {
-      "version": "12.1.11",
-      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz",
-      "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==",
+    "node_modules/spdx-license-ids": {
+      "version": "3.0.15",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
-      }
+      "license": "CC0-1.0"
     },
-    "postcss-custom-selectors": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz",
-      "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==",
+    "node_modules/spdy": {
+      "version": "4.0.2",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.4"
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "postcss-dir-pseudo-class": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz",
-      "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==",
+    "node_modules/spdy-transport": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.10"
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^4.1.0",
+        "detect-node": "^2.0.4",
+        "hpack.js": "^2.1.6",
+        "obuf": "^1.1.2",
+        "readable-stream": "^3.0.6",
+        "wbuf": "^1.7.3"
       }
     },
-    "postcss-double-position-gradients": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz",
-      "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==",
+    "node_modules/spdy-transport/node_modules/readable-stream": {
+      "version": "3.6.2",
       "dev": true,
-      "requires": {
-        "@csstools/postcss-progressive-custom-properties": "^1.1.0",
-        "postcss-value-parser": "^4.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "postcss-env-function": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz",
-      "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==",
+    "node_modules/specificity": {
+      "version": "0.4.1",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
+      "license": "MIT",
+      "bin": {
+        "specificity": "bin/specificity"
       }
     },
-    "postcss-focus-visible": {
-      "version": "6.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz",
-      "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==",
+    "node_modules/split": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.9"
+      "license": "MIT",
+      "dependencies": {
+        "through": "2"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "postcss-focus-within": {
-      "version": "5.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz",
-      "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==",
+    "node_modules/split-string": {
+      "version": "3.1.0",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.9"
+      "license": "MIT",
+      "dependencies": {
+        "extend-shallow": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-font-variant": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz",
-      "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==",
-      "dev": true
-    },
-    "postcss-gap-properties": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz",
-      "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==",
-      "dev": true
+    "node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "license": "BSD-3-Clause"
     },
-    "postcss-html": {
-      "version": "0.36.0",
-      "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz",
-      "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==",
+    "node_modules/sshpk": {
+      "version": "1.17.0",
       "dev": true,
-      "requires": {
-        "htmlparser2": "^3.10.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "dom-serializer": {
-          "version": "0.2.2",
-          "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz",
-          "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^2.0.1",
-            "entities": "^2.0.0"
-          },
-          "dependencies": {
-            "domelementtype": {
-              "version": "2.3.0",
-              "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
-              "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
-              "dev": true
-            },
-            "entities": {
-              "version": "2.2.0",
-              "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
-              "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
-              "dev": true
-            }
-          }
-        },
-        "domelementtype": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
-          "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
-          "dev": true
-        },
-        "domhandler": {
-          "version": "2.4.2",
-          "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
-          "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "1"
-          }
-        },
-        "domutils": {
-          "version": "1.7.0",
-          "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
-          "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
-          "dev": true,
-          "requires": {
-            "dom-serializer": "0",
-            "domelementtype": "1"
-          }
-        },
-        "entities": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
-          "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
-          "dev": true
-        },
-        "htmlparser2": {
-          "version": "3.10.1",
-          "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
-          "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
-          "dev": true,
-          "requires": {
-            "domelementtype": "^1.3.1",
-            "domhandler": "^2.3.0",
-            "domutils": "^1.5.1",
-            "entities": "^1.1.1",
-            "inherits": "^2.0.1",
-            "readable-stream": "^3.1.1"
-          }
-        },
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      },
+      "bin": {
+        "sshpk-conv": "bin/sshpk-conv",
+        "sshpk-sign": "bin/sshpk-sign",
+        "sshpk-verify": "bin/sshpk-verify"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-image-set-function": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz",
-      "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==",
+    "node_modules/ssri": {
+      "version": "10.0.5",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^7.0.3"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "postcss-import": {
-      "version": "14.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz",
-      "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==",
+    "node_modules/ssri/node_modules/minipass": {
+      "version": "7.0.4",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.0.0",
-        "read-cache": "^1.0.0",
-        "resolve": "^1.1.7"
+      "license": "ISC",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
       }
     },
-    "postcss-initial": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz",
-      "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==",
-      "dev": true
+    "node_modules/stack-chain": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "postcss-lab-function": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz",
-      "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==",
+    "node_modules/stack-generator": {
+      "version": "2.0.10",
       "dev": true,
-      "requires": {
-        "@csstools/postcss-progressive-custom-properties": "^1.1.0",
-        "postcss-value-parser": "^4.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "stackframe": "^1.3.4"
       }
     },
-    "postcss-less": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz",
-      "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==",
+    "node_modules/stack-trace": {
+      "version": "0.0.10",
       "dev": true,
-      "requires": {
-        "postcss": "^7.0.14"
-      },
-      "dependencies": {
-        "picocolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-          "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.39",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-          "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-          "dev": true,
-          "requires": {
-            "picocolors": "^0.2.1",
-            "source-map": "^0.6.1"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+      "license": "MIT",
+      "engines": {
+        "node": "*"
       }
     },
-    "postcss-loader": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz",
-      "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==",
+    "node_modules/stack-utils": {
+      "version": "2.0.6",
       "dev": true,
-      "requires": {
-        "cosmiconfig": "^7.0.0",
-        "klona": "^2.0.5",
-        "semver": "^7.3.5"
-      },
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
-        },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "escape-string-regexp": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "postcss-logical": {
-      "version": "5.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz",
-      "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==",
-      "dev": true
-    },
-    "postcss-media-minmax": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz",
-      "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==",
-      "dev": true
-    },
-    "postcss-media-query-parser": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz",
-      "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==",
-      "dev": true
+    "node_modules/stack-utils/node_modules/escape-string-regexp": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "postcss-modules-extract-imports": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
-      "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
-      "dev": true
+    "node_modules/stackframe": {
+      "version": "1.3.4",
+      "dev": true,
+      "license": "MIT"
     },
-    "postcss-modules-local-by-default": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz",
-      "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==",
+    "node_modules/stacktrace-gps": {
+      "version": "3.1.2",
       "dev": true,
-      "requires": {
-        "icss-utils": "^5.0.0",
-        "postcss-selector-parser": "^6.0.2",
-        "postcss-value-parser": "^4.1.0"
+      "license": "MIT",
+      "dependencies": {
+        "source-map": "0.5.6",
+        "stackframe": "^1.3.4"
       }
     },
-    "postcss-modules-scope": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
-      "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
+    "node_modules/stacktrace-gps/node_modules/source-map": {
+      "version": "0.5.6",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.4"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-modules-values": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
-      "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
+    "node_modules/stacktrace-js": {
+      "version": "2.0.2",
       "dev": true,
-      "requires": {
-        "icss-utils": "^5.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "error-stack-parser": "^2.0.6",
+        "stack-generator": "^2.0.5",
+        "stacktrace-gps": "^3.0.4"
       }
     },
-    "postcss-nesting": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz",
-      "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==",
+    "node_modules/stampit": {
+      "version": "4.3.2",
+      "license": "MIT"
+    },
+    "node_modules/start-server-and-test": {
+      "version": "1.12.1",
       "dev": true,
-      "requires": {
-        "@csstools/selector-specificity": "^2.0.0",
-        "postcss-selector-parser": "^6.0.10"
+      "license": "MIT",
+      "dependencies": {
+        "bluebird": "3.7.2",
+        "check-more-types": "2.24.0",
+        "debug": "4.3.1",
+        "execa": "3.4.0",
+        "lazy-ass": "1.6.0",
+        "ps-tree": "1.2.0",
+        "wait-on": "5.3.0"
+      },
+      "bin": {
+        "server-test": "src/bin/start.js",
+        "start-server-and-test": "src/bin/start.js",
+        "start-test": "src/bin/start.js"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "postcss-overflow-shorthand": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz",
-      "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==",
+    "node_modules/start-server-and-test/node_modules/debug": {
+      "version": "4.3.1",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
       }
     },
-    "postcss-page-break": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz",
-      "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==",
-      "dev": true
-    },
-    "postcss-place": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz",
-      "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==",
+    "node_modules/start-server-and-test/node_modules/execa": {
+      "version": "3.4.0",
       "dev": true,
-      "requires": {
-        "postcss-value-parser": "^4.2.0"
+      "license": "MIT",
+      "dependencies": {
+        "cross-spawn": "^7.0.0",
+        "get-stream": "^5.0.0",
+        "human-signals": "^1.1.1",
+        "is-stream": "^2.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^4.0.0",
+        "onetime": "^5.1.0",
+        "p-finally": "^2.0.0",
+        "signal-exit": "^3.0.2",
+        "strip-final-newline": "^2.0.0"
+      },
+      "engines": {
+        "node": "^8.12.0 || >=9.7.0"
       }
     },
-    "postcss-preset-env": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz",
-      "integrity": "sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA==",
-      "dev": true,
-      "requires": {
-        "autoprefixer": "^10.4.2",
-        "browserslist": "^4.19.1",
-        "caniuse-lite": "^1.0.30001299",
-        "css-blank-pseudo": "^3.0.2",
-        "css-has-pseudo": "^3.0.3",
-        "css-prefers-color-scheme": "^6.0.2",
-        "cssdb": "^5.0.0",
-        "postcss-attribute-case-insensitive": "^5.0.0",
-        "postcss-color-functional-notation": "^4.2.1",
-        "postcss-color-hex-alpha": "^8.0.2",
-        "postcss-color-rebeccapurple": "^7.0.2",
-        "postcss-custom-media": "^8.0.0",
-        "postcss-custom-properties": "^12.1.2",
-        "postcss-custom-selectors": "^6.0.0",
-        "postcss-dir-pseudo-class": "^6.0.3",
-        "postcss-double-position-gradients": "^3.0.4",
-        "postcss-env-function": "^4.0.4",
-        "postcss-focus-visible": "^6.0.3",
-        "postcss-focus-within": "^5.0.3",
-        "postcss-font-variant": "^5.0.0",
-        "postcss-gap-properties": "^3.0.2",
-        "postcss-image-set-function": "^4.0.4",
-        "postcss-initial": "^4.0.1",
-        "postcss-lab-function": "^4.0.3",
-        "postcss-logical": "^5.0.3",
-        "postcss-media-minmax": "^5.0.0",
-        "postcss-nesting": "^10.1.2",
-        "postcss-overflow-shorthand": "^3.0.2",
-        "postcss-page-break": "^3.0.4",
-        "postcss-place": "^7.0.3",
-        "postcss-pseudo-class-any-link": "^7.0.2",
-        "postcss-replace-overflow-wrap": "^4.0.0",
-        "postcss-selector-not": "^5.0.0"
-      }
-    },
-    "postcss-pseudo-class-any-link": {
-      "version": "7.1.6",
-      "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz",
-      "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==",
+    "node_modules/start-server-and-test/node_modules/is-stream": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "postcss-selector-parser": "^6.0.10"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "postcss-replace-overflow-wrap": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz",
-      "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==",
-      "dev": true
-    },
-    "postcss-resolve-nested-selector": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz",
-      "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==",
-      "dev": true
+    "node_modules/start-server-and-test/node_modules/p-finally": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "postcss-safe-parser": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz",
-      "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==",
+    "node_modules/static-eval": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "postcss": "^7.0.26"
-      },
+      "license": "MIT",
       "dependencies": {
-        "picocolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-          "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.39",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-          "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-          "dev": true,
-          "requires": {
-            "picocolors": "^0.2.1",
-            "source-map": "^0.6.1"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "escodegen": "^1.11.1"
       }
     },
-    "postcss-sass": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz",
-      "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==",
+    "node_modules/static-extend": {
+      "version": "0.1.2",
       "dev": true,
-      "requires": {
-        "gonzales-pe": "^4.3.0",
-        "postcss": "^7.0.21"
-      },
+      "license": "MIT",
       "dependencies": {
-        "picocolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-          "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.39",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-          "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-          "dev": true,
-          "requires": {
-            "picocolors": "^0.2.1",
-            "source-map": "^0.6.1"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-scss": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz",
-      "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==",
+    "node_modules/static-extend/node_modules/define-property": {
+      "version": "0.2.5",
       "dev": true,
-      "requires": {
-        "postcss": "^7.0.6"
-      },
-      "dependencies": {
-        "picocolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-          "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.39",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-          "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-          "dev": true,
-          "requires": {
-            "picocolors": "^0.2.1",
-            "source-map": "^0.6.1"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+      "license": "MIT",
+      "dependencies": {
+        "is-descriptor": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-selector-not": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz",
-      "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==",
+    "node_modules/static-extend/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
       "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-selector-parser": {
-      "version": "6.0.13",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
-      "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+    "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
       "dev": true,
-      "requires": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-sorting": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz",
-      "integrity": "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA==",
+    "node_modules/static-extend/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
       "dev": true,
-      "requires": {
-        "lodash": "^4.17.14",
-        "postcss": "^7.0.17"
-      },
+      "license": "MIT",
       "dependencies": {
-        "picocolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-          "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.39",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-          "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-          "dev": true,
-          "requires": {
-            "picocolors": "^0.2.1",
-            "source-map": "^0.6.1"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "postcss-syntax": {
-      "version": "0.36.2",
-      "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz",
-      "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==",
-      "dev": true
-    },
-    "postcss-value-parser": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
-      "dev": true
-    },
-    "prebuild-install": {
-      "version": "6.1.4",
-      "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz",
-      "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==",
-      "optional": true,
-      "requires": {
-        "detect-libc": "^1.0.3",
-        "expand-template": "^2.0.3",
-        "github-from-package": "0.0.0",
-        "minimist": "^1.2.3",
-        "mkdirp-classic": "^0.5.3",
-        "napi-build-utils": "^1.0.1",
-        "node-abi": "^2.21.0",
-        "npmlog": "^4.0.1",
-        "pump": "^3.0.0",
-        "rc": "^1.2.7",
-        "simple-get": "^3.0.3",
-        "tar-fs": "^2.0.0",
-        "tunnel-agent": "^0.6.0"
-      }
-    },
-    "prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
-      "dev": true
-    },
-    "prettier": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz",
-      "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==",
-      "dev": true
-    },
-    "pretty-bytes": {
-      "version": "5.6.0",
-      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz",
-      "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==",
-      "dev": true
-    },
-    "pretty-format": {
-      "version": "28.1.3",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz",
-      "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==",
+    "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
       "dev": true,
-      "requires": {
-        "@jest/schemas": "^28.1.3",
-        "ansi-regex": "^5.0.1",
-        "ansi-styles": "^5.0.0",
-        "react-is": "^18.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ansi-styles": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
-          "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
-          "dev": true
-        },
-        "react-is": {
-          "version": "18.2.0",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
-          "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
-          "dev": true
-        }
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "pretty-quick": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.0.2.tgz",
-      "integrity": "sha512-4rWOs/Ifdkg7G/YX7Xbco4jZkuXPx445KdhuMI6REnl3nXRDb9+zysb29c76R59jsJzcnkcpAaGi8D/RjAVfSQ==",
+    "node_modules/static-extend/node_modules/is-descriptor": {
+      "version": "0.1.6",
       "dev": true,
-      "requires": {
-        "chalk": "^3.0.0",
-        "execa": "^4.0.0",
-        "find-up": "^4.1.0",
-        "ignore": "^5.1.4",
-        "mri": "^1.1.5",
-        "multimatch": "^4.0.0"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "chalk": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
-          "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "execa": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
-          "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^7.0.0",
-            "get-stream": "^5.0.0",
-            "human-signals": "^1.1.1",
-            "is-stream": "^2.0.0",
-            "merge-stream": "^2.0.0",
-            "npm-run-path": "^4.0.0",
-            "onetime": "^5.1.0",
-            "signal-exit": "^3.0.2",
-            "strip-final-newline": "^2.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "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
-        },
-        "human-signals": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
-          "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
-          "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"
-          }
-        }
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "prismjs": {
-      "version": "1.29.0",
-      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
-      "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q=="
-    },
-    "process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
-    },
-    "process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
-    },
-    "progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
-      "dev": true
-    },
-    "promise": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
-      "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+    "node_modules/static-extend/node_modules/kind-of": {
+      "version": "5.1.0",
       "dev": true,
-      "requires": {
-        "asap": "~2.0.6"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "promise-inflight": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
-      "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
-      "dev": true
-    },
-    "promise-retry": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
-      "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+    "node_modules/static-module": {
+      "version": "3.0.4",
       "dev": true,
-      "requires": {
-        "err-code": "^2.0.2",
-        "retry": "^0.12.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "retry": {
-          "version": "0.12.0",
-          "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
-          "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
-          "dev": true
-        }
+        "acorn-node": "^1.3.0",
+        "concat-stream": "~1.6.0",
+        "convert-source-map": "^1.5.1",
+        "duplexer2": "~0.1.4",
+        "escodegen": "^1.11.1",
+        "has": "^1.0.1",
+        "magic-string": "0.25.1",
+        "merge-source-map": "1.0.4",
+        "object-inspect": "^1.6.0",
+        "readable-stream": "~2.3.3",
+        "scope-analyzer": "^2.0.1",
+        "shallow-copy": "~0.0.1",
+        "static-eval": "^2.0.5",
+        "through2": "~2.0.3"
       }
     },
-    "prompts": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
-      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+    "node_modules/static-module/node_modules/magic-string": {
+      "version": "0.25.1",
       "dev": true,
-      "requires": {
-        "kleur": "^3.0.3",
-        "sisteransi": "^1.0.5"
+      "license": "MIT",
+      "dependencies": {
+        "sourcemap-codec": "^1.4.1"
       }
     },
-    "prop-types": {
-      "version": "15.8.1",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
-      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
-      "requires": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.13.1"
+    "node_modules/statuses": {
+      "version": "1.5.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "property-information": {
-      "version": "5.6.0",
-      "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
-      "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
-      "requires": {
-        "xtend": "^4.0.0"
+    "node_modules/stealthy-require": {
+      "version": "1.1.1",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "protobufjs": {
-      "version": "6.11.3",
-      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
-      "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
+    "node_modules/stream-browserify": {
+      "version": "2.0.2",
       "dev": true,
-      "requires": {
-        "@protobufjs/aspromise": "^1.1.2",
-        "@protobufjs/base64": "^1.1.2",
-        "@protobufjs/codegen": "^2.0.4",
-        "@protobufjs/eventemitter": "^1.1.0",
-        "@protobufjs/fetch": "^1.1.0",
-        "@protobufjs/float": "^1.0.2",
-        "@protobufjs/inquire": "^1.1.0",
-        "@protobufjs/path": "^1.1.2",
-        "@protobufjs/pool": "^1.1.0",
-        "@protobufjs/utf8": "^1.1.0",
-        "@types/long": "^4.0.1",
-        "@types/node": ">=13.7.0",
-        "long": "^4.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "@types/node": {
-          "version": "20.2.4",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.4.tgz",
-          "integrity": "sha512-ni5f8Xlf4PwnT/Z3f0HURc3ZSw8UyrqMqmM3L5ysa7VjHu8c3FOmIo1nKCcLrV/OAmtf3N4kFna/aJqxsfEtnA==",
-          "dev": true
-        }
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
       }
     },
-    "proxy-addr": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
-      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+    "node_modules/stream-combiner": {
+      "version": "0.2.2",
       "dev": true,
-      "requires": {
-        "forwarded": "0.2.0",
-        "ipaddr.js": "1.9.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ipaddr.js": {
-          "version": "1.9.1",
-          "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-          "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
-          "dev": true
-        }
+        "duplexer": "~0.1.1",
+        "through": "~2.3.4"
       }
     },
-    "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=="
-    },
-    "proxy-middleware": {
-      "version": "0.15.0",
-      "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz",
-      "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==",
-      "dev": true
-    },
-    "prr": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-      "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+    "node_modules/stream-combiner2": {
+      "version": "1.1.1",
       "dev": true,
-      "optional": true
+      "license": "MIT",
+      "dependencies": {
+        "duplexer2": "~0.1.0",
+        "readable-stream": "^2.0.2"
+      }
     },
-    "ps-tree": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
-      "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==",
+    "node_modules/stream-http": {
+      "version": "3.2.0",
       "dev": true,
-      "requires": {
-        "event-stream": "=3.3.4"
-      },
+      "license": "MIT",
       "dependencies": {
-        "event-stream": {
-          "version": "3.3.4",
-          "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
-          "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==",
-          "dev": true,
-          "requires": {
-            "duplexer": "~0.1.1",
-            "from": "~0",
-            "map-stream": "~0.1.0",
-            "pause-stream": "0.0.11",
-            "split": "0.3",
-            "stream-combiner": "~0.0.4",
-            "through": "~2.3.1"
-          }
-        },
-        "map-stream": {
-          "version": "0.1.0",
-          "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
-          "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==",
-          "dev": true
-        },
-        "split": {
-          "version": "0.3.3",
-          "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
-          "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==",
-          "dev": true,
-          "requires": {
-            "through": "2"
-          }
-        },
-        "stream-combiner": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
-          "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==",
-          "dev": true,
-          "requires": {
-            "duplexer": "~0.1.1"
-          }
-        }
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "xtend": "^4.0.2"
       }
     },
-    "psl": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
-      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
-      "dev": true
-    },
-    "public-encrypt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+    "node_modules/stream-http/node_modules/readable-stream": {
+      "version": "3.6.2",
       "dev": true,
-      "requires": {
-        "bn.js": "^4.1.0",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "parse-asn1": "^5.0.0",
-        "randombytes": "^2.0.1",
-        "safe-buffer": "^5.1.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "bn.js": {
-          "version": "4.12.0",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
-          "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
-          "dev": true
-        }
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
-      "requires": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
+    "node_modules/stream-splicer": {
+      "version": "2.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.2"
       }
     },
-    "punycode": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-      "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
-    },
-    "qs": {
-      "version": "6.11.2",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
-      "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
-      "requires": {
-        "side-channel": "^1.0.4"
+    "node_modules/streamsearch": {
+      "version": "1.1.0",
+      "engines": {
+        "node": ">=10.0.0"
       }
     },
-    "querystring": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-      "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g=="
-    },
-    "querystring-es3": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
-      "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
-      "dev": true
-    },
-    "querystringify": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
-      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
-    },
-    "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
-    },
-    "quick-lru": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz",
-      "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==",
-      "dev": true
-    },
-    "quote-stream": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
-      "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==",
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
       "dev": true,
-      "requires": {
-        "buffer-equal": "0.0.1",
-        "minimist": "^1.1.3",
-        "through2": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
       }
     },
-    "ramda": {
-      "version": "0.29.0",
-      "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz",
-      "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA=="
-    },
-    "ramda-adjunct": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-4.0.0.tgz",
-      "integrity": "sha512-W/NiJAlZdwZ/iUkWEQQgRdH5Szqqet1WoVH9cdqDVjFbVaZHuJfJRvsxqHhvq6tZse+yVbFatLDLdVa30wBlGQ=="
+    "node_modules/string-argv": {
+      "version": "0.0.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6.19"
+      }
     },
-    "randexp": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz",
-      "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==",
-      "requires": {
-        "drange": "^1.0.2",
-        "ret": "^0.2.0"
+    "node_modules/string-length": {
+      "version": "4.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "char-regex": "^1.0.2",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-      "requires": {
-        "safe-buffer": "^5.1.0"
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "randomfill": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
-      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
       "dev": true,
-      "requires": {
-        "randombytes": "^2.0.5",
-        "safe-buffer": "^5.1.0"
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "range-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-      "dev": true
-    },
-    "raw-body": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
-      "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+    "node_modules/string.prototype.padend": {
+      "version": "3.1.5",
       "dev": true,
-      "requires": {
-        "bytes": "3.1.2",
-        "http-errors": "2.0.0",
-        "iconv-lite": "0.4.24",
-        "unpipe": "1.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "bytes": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-          "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
-          "dev": true
-        }
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "rc": {
+    "node_modules/string.prototype.trim": {
       "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
-      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
-      "optional": true,
-      "requires": {
-        "deep-extend": "^0.6.0",
-        "ini": "~1.3.0",
-        "minimist": "^1.2.0",
-        "strip-json-comments": "~2.0.1"
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "react": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
-      "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1"
+    "node_modules/string.prototype.trimend": {
+      "version": "1.0.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "react-copy-to-clipboard": {
-      "version": "5.0.4",
-      "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz",
-      "integrity": "sha512-IeVAiNVKjSPeGax/Gmkqfa/+PuMTBhutEvFUaMQLwE2tS0EXrAdgOpWDX26bWTXF3HrioorR7lr08NqeYUWQCQ==",
-      "requires": {
-        "copy-to-clipboard": "^3",
-        "prop-types": "^15.5.8"
+    "node_modules/string.prototype.trimstart": {
+      "version": "1.0.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "react-debounce-input": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.2.4.tgz",
-      "integrity": "sha512-fX70bNj0fLEYO2Zcvuh7eh9wOUQ29GIx6r8IxIJlc0i0mpUH++9ax0BhfAYfzndADli3RAMROrZQ014J01owrg==",
-      "requires": {
-        "lodash.debounce": "^4",
-        "prop-types": "^15.7.2"
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "react-dom": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
-      "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1",
-        "scheduler": "^0.20.2"
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "react-immutable-proptypes": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.2.0.tgz",
-      "integrity": "sha512-Vf4gBsePlwdGvSZoLSBfd4HAP93HDauMY4fDjXhreg/vg6F3Fj/MXDNyTbltPC/xZKmZc+cjLu3598DdYK6sgQ==",
-      "requires": {
-        "invariant": "^2.2.2"
+    "node_modules/strip-bom": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "react-immutable-pure-component": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/react-immutable-pure-component/-/react-immutable-pure-component-2.2.2.tgz",
-      "integrity": "sha512-vkgoMJUDqHZfXXnjVlG3keCxSO/U6WeDQ5/Sl0GK2cH8TOxEzQ5jXqDXHEL/jqk6fsNxV05oH5kD7VNMUE2k+A=="
-    },
-    "react-inspector": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz",
-      "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==",
-      "requires": {
-        "@babel/runtime": "^7.0.0",
-        "is-dom": "^1.0.0",
-        "prop-types": "^15.0.0"
+    "node_modules/strip-eof": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+    "node_modules/strip-final-newline": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "react-redux": {
-      "version": "7.2.9",
-      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz",
-      "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==",
-      "requires": {
-        "@babel/runtime": "^7.15.4",
-        "@types/react-redux": "^7.1.20",
-        "hoist-non-react-statics": "^3.3.2",
-        "loose-envify": "^1.4.0",
-        "prop-types": "^15.7.2",
-        "react-is": "^17.0.2"
-      },
+    "node_modules/strip-indent": {
+      "version": "3.0.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "react-is": {
-          "version": "17.0.2",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
-          "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
-        }
+        "min-indent": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "react-syntax-highlighter": {
-      "version": "15.5.0",
-      "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz",
-      "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==",
-      "requires": {
-        "@babel/runtime": "^7.3.1",
-        "highlight.js": "^10.4.1",
-        "lowlight": "^1.17.0",
-        "prismjs": "^1.27.0",
-        "refractor": "^3.6.0"
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "read-cache": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
-      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+    "node_modules/strong-log-transformer": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "pify": "^2.3.0"
-      },
+      "license": "Apache-2.0",
       "dependencies": {
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-          "dev": true
-        }
+        "duplexer": "^0.1.1",
+        "minimist": "^1.2.0",
+        "through": "^2.3.4"
+      },
+      "bin": {
+        "sl-log-transformer": "bin/sl-log-transformer.js"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "read-only-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz",
-      "integrity": "sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==",
+    "node_modules/style-search": {
+      "version": "0.1.0",
       "dev": true,
-      "requires": {
-        "readable-stream": "^2.0.2"
-      }
+      "license": "ISC"
     },
-    "read-package-json-fast": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz",
-      "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==",
+    "node_modules/stylelint": {
+      "version": "13.13.1",
       "dev": true,
-      "requires": {
-        "json-parse-even-better-errors": "^2.3.0",
-        "npm-normalize-package-bin": "^1.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "@stylelint/postcss-css-in-js": "^0.37.2",
+        "@stylelint/postcss-markdown": "^0.36.2",
+        "autoprefixer": "^9.8.6",
+        "balanced-match": "^2.0.0",
+        "chalk": "^4.1.1",
+        "cosmiconfig": "^7.0.0",
+        "debug": "^4.3.1",
+        "execall": "^2.0.0",
+        "fast-glob": "^3.2.5",
+        "fastest-levenshtein": "^1.0.12",
+        "file-entry-cache": "^6.0.1",
+        "get-stdin": "^8.0.0",
+        "global-modules": "^2.0.0",
+        "globby": "^11.0.3",
+        "globjoin": "^0.1.4",
+        "html-tags": "^3.1.0",
+        "ignore": "^5.1.8",
+        "import-lazy": "^4.0.0",
+        "imurmurhash": "^0.1.4",
+        "known-css-properties": "^0.21.0",
+        "lodash": "^4.17.21",
+        "log-symbols": "^4.1.0",
+        "mathml-tag-names": "^2.1.3",
+        "meow": "^9.0.0",
+        "micromatch": "^4.0.4",
+        "normalize-selector": "^0.2.0",
+        "postcss": "^7.0.35",
+        "postcss-html": "^0.36.0",
+        "postcss-less": "^3.1.4",
+        "postcss-media-query-parser": "^0.2.3",
+        "postcss-resolve-nested-selector": "^0.1.1",
+        "postcss-safe-parser": "^4.0.2",
+        "postcss-sass": "^0.4.4",
+        "postcss-scss": "^2.1.1",
+        "postcss-selector-parser": "^6.0.5",
+        "postcss-syntax": "^0.36.2",
+        "postcss-value-parser": "^4.1.0",
+        "resolve-from": "^5.0.0",
+        "slash": "^3.0.0",
+        "specificity": "^0.4.1",
+        "string-width": "^4.2.2",
+        "strip-ansi": "^6.0.0",
+        "style-search": "^0.1.0",
+        "sugarss": "^2.0.0",
+        "svg-tags": "^1.0.0",
+        "table": "^6.6.0",
+        "v8-compile-cache": "^2.3.0",
+        "write-file-atomic": "^3.0.3"
+      },
+      "bin": {
+        "stylelint": "bin/stylelint.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/stylelint"
       }
     },
-    "read-pkg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
-      "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
+    "node_modules/stylelint-config-sass-guidelines": {
+      "version": "7.1.0",
       "dev": true,
-      "requires": {
-        "load-json-file": "^4.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^3.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "path-type": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-          "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-          "dev": true,
-          "requires": {
-            "pify": "^3.0.0"
-          }
-        },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
-          "dev": true
-        }
+        "stylelint-order": "^4.0.0",
+        "stylelint-scss": "^3.18.0"
+      },
+      "peerDependencies": {
+        "stylelint": "^13.7.0"
       }
     },
-    "read-pkg-up": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
-      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+    "node_modules/stylelint-declaration-use-variable": {
+      "version": "1.7.3",
       "dev": true,
-      "requires": {
-        "find-up": "^4.1.0",
-        "read-pkg": "^5.2.0",
-        "type-fest": "^0.8.1"
-      },
-      "dependencies": {
-        "read-pkg": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
-          "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
-          "dev": true,
-          "requires": {
-            "@types/normalize-package-data": "^2.4.0",
-            "normalize-package-data": "^2.5.0",
-            "parse-json": "^5.0.0",
-            "type-fest": "^0.6.0"
-          },
-          "dependencies": {
-            "type-fest": {
-              "version": "0.6.0",
-              "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
-              "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
-              "dev": true
-            }
-          }
-        },
-        "type-fest": {
-          "version": "0.8.1",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-          "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
-          "dev": true
-        }
+      "license": "MIT",
+      "peerDependencies": {
+        "stylelint": "^13.13.0"
       }
     },
-    "readable-stream": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
-      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
-      "requires": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      },
+    "node_modules/stylelint-order": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "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=="
-        }
+        "lodash": "^4.17.15",
+        "postcss": "^7.0.31",
+        "postcss-sorting": "^5.0.1"
+      },
+      "peerDependencies": {
+        "stylelint": "^10.0.1 || ^11.0.0 || ^12.0.0 || ^13.0.0"
       }
     },
-    "readdirp": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+    "node_modules/stylelint-order/node_modules/picocolors": {
+      "version": "0.2.1",
       "dev": true,
-      "requires": {
-        "picomatch": "^2.2.1"
+      "license": "ISC"
+    },
+    "node_modules/stylelint-order/node_modules/postcss": {
+      "version": "7.0.39",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
       }
     },
-    "rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
-      "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+    "node_modules/stylelint-order/node_modules/source-map": {
+      "version": "0.6.1",
       "dev": true,
-      "requires": {
-        "resolve": "^1.1.6"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "redent": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
-      "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==",
+    "node_modules/stylelint-scss": {
+      "version": "3.21.0",
       "dev": true,
-      "requires": {
-        "indent-string": "^4.0.0",
-        "strip-indent": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.15",
+        "postcss-media-query-parser": "^0.2.3",
+        "postcss-resolve-nested-selector": "^0.1.1",
+        "postcss-selector-parser": "^6.0.2",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "peerDependencies": {
+        "stylelint": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0"
       }
     },
-    "redux": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
-      "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
-      "requires": {
-        "@babel/runtime": "^7.9.2"
+    "node_modules/stylelint/node_modules/autoprefixer": {
+      "version": "9.8.8",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.12.0",
+        "caniuse-lite": "^1.0.30001109",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "picocolors": "^0.2.1",
+        "postcss": "^7.0.32",
+        "postcss-value-parser": "^4.1.0"
+      },
+      "bin": {
+        "autoprefixer": "bin/autoprefixer"
+      },
+      "funding": {
+        "type": "tidelift",
+        "url": "https://tidelift.com/funding/github/npm/autoprefixer"
       }
     },
-    "redux-immutable": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz",
-      "integrity": "sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg=="
+    "node_modules/stylelint/node_modules/balanced-match": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "reflect-metadata": {
-      "version": "0.1.13",
-      "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
-      "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
-      "dev": true
+    "node_modules/stylelint/node_modules/chalk": {
+      "version": "4.1.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
     },
-    "refractor": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
-      "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
-      "requires": {
-        "hastscript": "^6.0.0",
-        "parse-entities": "^2.0.0",
-        "prismjs": "~1.27.0"
+    "node_modules/stylelint/node_modules/cosmiconfig": {
+      "version": "7.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/parse-json": "^4.0.0",
+        "import-fresh": "^3.2.1",
+        "parse-json": "^5.0.0",
+        "path-type": "^4.0.0",
+        "yaml": "^1.10.0"
       },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/stylelint/node_modules/debug": {
+      "version": "4.3.4",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "prismjs": {
-          "version": "1.27.0",
-          "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
-          "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA=="
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
         }
       }
     },
-    "regenerate": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
-      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
-      "dev": true
-    },
-    "regenerate-unicode-properties": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
-      "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
+    "node_modules/stylelint/node_modules/global-modules": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "regenerate": "^1.4.2"
+      "license": "MIT",
+      "dependencies": {
+        "global-prefix": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "regenerator-runtime": {
-      "version": "0.13.11",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
-      "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
-    },
-    "regenerator-transform": {
-      "version": "0.15.1",
-      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
-      "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
+    "node_modules/stylelint/node_modules/global-prefix": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "@babel/runtime": "^7.8.4"
+      "license": "MIT",
+      "dependencies": {
+        "ini": "^1.3.5",
+        "kind-of": "^6.0.2",
+        "which": "^1.3.1"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "regex-not": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
-      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+    "node_modules/stylelint/node_modules/ini": {
+      "version": "1.3.8",
       "dev": true,
-      "requires": {
-        "extend-shallow": "^3.0.2",
-        "safe-regex": "^1.1.0"
-      }
+      "license": "ISC"
     },
-    "regex-parser": {
-      "version": "2.2.11",
-      "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz",
-      "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==",
-      "dev": true
+    "node_modules/stylelint/node_modules/picocolors": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "ISC"
     },
-    "regexp.prototype.flags": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
-      "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
+    "node_modules/stylelint/node_modules/postcss": {
+      "version": "7.0.39",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "functions-have-names": "^1.2.3"
+      "license": "MIT",
+      "dependencies": {
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
       }
     },
-    "regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true
-    },
-    "regexpu-core": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
-      "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
+    "node_modules/stylelint/node_modules/source-map": {
+      "version": "0.6.1",
       "dev": true,
-      "requires": {
-        "@babel/regjsgen": "^0.8.0",
-        "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.1.0",
-        "regjsparser": "^0.9.1",
-        "unicode-match-property-ecmascript": "^2.0.0",
-        "unicode-match-property-value-ecmascript": "^2.1.0"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "regjsparser": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
-      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+    "node_modules/stylelint/node_modules/which": {
+      "version": "1.3.1",
       "dev": true,
-      "requires": {
-        "jsesc": "~0.5.0"
-      },
+      "license": "ISC",
       "dependencies": {
-        "jsesc": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-          "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
-          "dev": true
-        }
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
       }
     },
-    "remark": {
-      "version": "13.0.0",
-      "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz",
-      "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==",
+    "node_modules/stylelint/node_modules/write-file-atomic": {
+      "version": "3.0.3",
       "dev": true,
-      "requires": {
-        "remark-parse": "^9.0.0",
-        "remark-stringify": "^9.0.0",
-        "unified": "^9.1.0"
+      "license": "ISC",
+      "dependencies": {
+        "imurmurhash": "^0.1.4",
+        "is-typedarray": "^1.0.0",
+        "signal-exit": "^3.0.2",
+        "typedarray-to-buffer": "^3.1.5"
       }
     },
-    "remark-parse": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz",
-      "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==",
+    "node_modules/subarg": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "mdast-util-from-markdown": "^0.8.0"
+      "license": "MIT",
+      "dependencies": {
+        "minimist": "^1.1.0"
       }
     },
-    "remark-stringify": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz",
-      "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==",
+    "node_modules/sugarss": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "mdast-util-to-markdown": "^0.6.0"
-      }
-    },
-    "remarkable": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz",
-      "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==",
-      "requires": {
-        "argparse": "^1.0.10",
-        "autolinker": "^3.11.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        }
+        "postcss": "^7.0.2"
       }
     },
-    "repeat-element": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
-      "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
-      "dev": true
-    },
-    "repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w=="
+    "node_modules/sugarss/node_modules/picocolors": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "ISC"
     },
-    "request": {
-      "version": "2.88.2",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
-      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+    "node_modules/sugarss/node_modules/postcss": {
+      "version": "7.0.39",
       "dev": true,
-      "requires": {
-        "aws-sign2": "~0.7.0",
-        "aws4": "^1.8.0",
-        "caseless": "~0.12.0",
-        "combined-stream": "~1.0.6",
-        "extend": "~3.0.2",
-        "forever-agent": "~0.6.1",
-        "form-data": "~2.3.2",
-        "har-validator": "~5.1.3",
-        "http-signature": "~1.2.0",
-        "is-typedarray": "~1.0.0",
-        "isstream": "~0.1.2",
-        "json-stringify-safe": "~5.0.1",
-        "mime-types": "~2.1.19",
-        "oauth-sign": "~0.9.0",
-        "performance-now": "^2.1.0",
-        "qs": "~6.5.2",
-        "safe-buffer": "^5.1.2",
-        "tough-cookie": "~2.5.0",
-        "tunnel-agent": "^0.6.0",
-        "uuid": "^3.3.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "form-data": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-          "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
-          "dev": true,
-          "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.6",
-            "mime-types": "^2.1.12"
-          }
-        },
-        "punycode": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-          "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-          "dev": true
-        },
-        "qs": {
-          "version": "6.5.3",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
-          "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
-          "dev": true
-        },
-        "tough-cookie": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-          "dev": true,
-          "requires": {
-            "psl": "^1.1.28",
-            "punycode": "^2.1.1"
-          }
-        },
-        "uuid": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-          "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-          "dev": true
-        }
+        "picocolors": "^0.2.1",
+        "source-map": "^0.6.1"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
       }
     },
-    "request-progress": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz",
-      "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==",
+    "node_modules/sugarss/node_modules/source-map": {
+      "version": "0.6.1",
       "dev": true,
-      "requires": {
-        "throttleit": "^1.0.0"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "request-promise-core": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
-      "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
+    "node_modules/supports-color": {
+      "version": "7.2.0",
       "dev": true,
-      "requires": {
-        "lodash": "^4.17.19"
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "request-promise-native": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
-      "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "request-promise-core": "1.1.4",
-        "stealthy-require": "^1.1.1",
-        "tough-cookie": "^2.3.3"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
       },
-      "dependencies": {
-        "punycode": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-          "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-          "dev": true
-        },
-        "tough-cookie": {
-          "version": "2.5.0",
-          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
-          "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
-          "dev": true,
-          "requires": {
-            "psl": "^1.1.28",
-            "punycode": "^2.1.1"
-          }
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
-    },
-    "require-from-string": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "dev": true
-    },
-    "require-main-filename": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
-      "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
-      "dev": true
-    },
-    "requires-port": {
+    "node_modules/svg-tags": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
-    },
-    "reselect": {
-      "version": "4.1.8",
-      "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
-      "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ=="
+      "dev": true
     },
-    "resolve": {
-      "version": "1.22.2",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
-      "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
-      "dev": true,
-      "requires": {
-        "is-core-module": "^2.11.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
+    "node_modules/swagger-client": {
+      "version": "3.22.3",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.22.15",
+        "@swagger-api/apidom-core": ">=0.76.2 <1.0.0",
+        "@swagger-api/apidom-json-pointer": ">=0.76.2 <1.0.0",
+        "@swagger-api/apidom-ns-openapi-3-1": ">=0.76.2 <1.0.0",
+        "@swagger-api/apidom-reference": ">=0.76.2 <1.0.0",
+        "cookie": "~0.5.0",
+        "deepmerge": "~4.3.0",
+        "fast-json-patch": "^3.0.0-1",
+        "is-plain-object": "^5.0.0",
+        "js-yaml": "^4.1.0",
+        "node-abort-controller": "^3.1.1",
+        "node-fetch-commonjs": "^3.3.1",
+        "qs": "^6.10.2",
+        "traverse": "~0.6.6",
+        "undici": "^5.24.0"
       }
     },
-    "resolve-cwd": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
-      "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
-      "dev": true,
-      "requires": {
-        "resolve-from": "^5.0.0"
+    "node_modules/swagger-client/node_modules/argparse": {
+      "version": "2.0.1",
+      "license": "Python-2.0"
+    },
+    "node_modules/swagger-client/node_modules/cookie": {
+      "version": "0.5.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "resolve-dir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
-      "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
-      "dev": true,
-      "requires": {
-        "expand-tilde": "^2.0.0",
-        "global-modules": "^1.0.0"
+    "node_modules/swagger-client/node_modules/deepmerge": {
+      "version": "4.3.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "resolve-from": {
+    "node_modules/swagger-client/node_modules/is-plain-object": {
       "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-      "dev": true
-    },
-    "resolve-url": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-      "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
-      "dev": true
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "resolve-url-loader": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz",
-      "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==",
-      "dev": true,
-      "requires": {
-        "adjust-sourcemap-loader": "^4.0.0",
-        "convert-source-map": "^1.7.0",
-        "loader-utils": "^2.0.0",
-        "postcss": "^8.2.14",
-        "source-map": "0.6.1"
-      },
+    "node_modules/swagger-client/node_modules/js-yaml": {
+      "version": "4.1.0",
+      "license": "MIT",
       "dependencies": {
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
       }
     },
-    "resolve.exports": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz",
-      "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==",
-      "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"
+    "node_modules/swagger-client/node_modules/qs": {
+      "version": "6.11.2",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "ret": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz",
-      "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ=="
+    "node_modules/swagger-ui": {
+      "version": "4.12.0",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@babel/runtime-corejs3": "^7.16.8",
+        "@braintree/sanitize-url": "=6.0.0",
+        "base64-js": "^1.5.1",
+        "classnames": "^2.3.1",
+        "css.escape": "1.5.1",
+        "deep-extend": "0.6.0",
+        "dompurify": "=2.3.3",
+        "ieee754": "^1.2.1",
+        "immutable": "^3.x.x",
+        "js-file-download": "^0.4.12",
+        "js-yaml": "=4.1.0",
+        "lodash": "^4.17.21",
+        "prop-types": "^15.8.1",
+        "randexp": "^0.5.3",
+        "randombytes": "^2.1.0",
+        "react": "=17.0.2",
+        "react-copy-to-clipboard": "5.0.4",
+        "react-debounce-input": "=3.2.4",
+        "react-dom": "=17.0.2",
+        "react-immutable-proptypes": "2.2.0",
+        "react-immutable-pure-component": "^2.2.0",
+        "react-inspector": "^5.1.1",
+        "react-redux": "^7.2.4",
+        "react-syntax-highlighter": "^15.4.5",
+        "redux": "^4.1.2",
+        "redux-immutable": "^4.0.0",
+        "remarkable": "^2.0.1",
+        "reselect": "^4.1.5",
+        "serialize-error": "^8.1.0",
+        "sha.js": "^2.4.11",
+        "swagger-client": "^3.18.5",
+        "url-parse": "^1.5.8",
+        "xml": "=1.0.1",
+        "xml-but-prettier": "^1.0.1",
+        "zenscroll": "^4.0.2"
+      }
     },
-    "retry": {
-      "version": "0.13.1",
-      "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
-      "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
-      "dev": true
+    "node_modules/swagger-ui/node_modules/argparse": {
+      "version": "2.0.1",
+      "license": "Python-2.0"
     },
-    "reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "dev": true
+    "node_modules/swagger-ui/node_modules/immutable": {
+      "version": "3.8.2",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "rfdc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
-      "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
-      "dev": true
+    "node_modules/swagger-ui/node_modules/js-yaml": {
+      "version": "4.1.0",
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
     },
-    "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"
+    "node_modules/swagger-ui/node_modules/serialize-error": {
+      "version": "8.1.0",
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/swagger-ui/node_modules/type-fest": {
+      "version": "0.20.2",
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "ripemd160": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
-      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+    "node_modules/symbol-observable": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "hash-base": "^3.0.0",
-        "inherits": "^2.0.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10"
       }
     },
-    "run-async": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
-      "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
-      "dev": true
+    "node_modules/symbol-tree": {
+      "version": "3.2.4",
+      "dev": true,
+      "license": "MIT"
     },
-    "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==",
+    "node_modules/syntax-error": {
+      "version": "1.4.0",
       "dev": true,
-      "requires": {
-        "queue-microtask": "^1.2.2"
+      "license": "MIT",
+      "dependencies": {
+        "acorn-node": "^1.2.0"
       }
     },
-    "rxjs": {
-      "version": "6.6.3",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
-      "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
-      "requires": {
-        "tslib": "^1.9.0"
-      },
+    "node_modules/table": {
+      "version": "6.8.0",
+      "dev": true,
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
+        "ajv": "^8.0.1",
+        "lodash.truncate": "^4.4.2",
+        "slice-ansi": "^4.0.0",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=10.0.0"
       }
     },
-    "rxjs-for-await": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz",
-      "integrity": "sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw==",
-      "dev": true
-    },
-    "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=="
-    },
-    "safe-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-      "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
+    "node_modules/table/node_modules/slice-ansi": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "ret": "~0.1.10"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ret": {
-          "version": "0.1.15",
-          "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
-          "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
-          "dev": true
-        }
+        "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"
       }
     },
-    "safe-regex-test": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
-      "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+    "node_modules/tapable": {
+      "version": "2.2.1",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.3",
-        "is-regex": "^1.1.4"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "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/tar": {
+      "version": "6.2.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^5.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
     },
-    "sass": {
-      "version": "1.49.9",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.9.tgz",
-      "integrity": "sha512-YlYWkkHP9fbwaFRZQRXgDi3mXZShslVmmo+FVK3kHLUELHHEYrCmL1x6IUjC7wLS6VuJSAFXRQS/DxdsC4xL1A==",
+    "node_modules/tar-stream": {
+      "version": "2.2.0",
       "dev": true,
-      "requires": {
-        "chokidar": ">=3.0.0 <4.0.0",
-        "immutable": "^4.0.0",
-        "source-map-js": ">=0.6.2 <2.0.0"
+      "license": "MIT",
+      "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/tar-stream/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "immutable": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz",
-          "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==",
-          "dev": true
-        }
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "sass-loader": {
-      "version": "12.4.0",
-      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz",
-      "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==",
+    "node_modules/tar/node_modules/fs-minipass": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "klona": "^2.0.4",
-        "neo-async": "^2.6.2"
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^3.0.0"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
-      "dev": true
+    "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
+      "version": "3.3.6",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "saxes": {
-      "version": "3.1.11",
-      "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
-      "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
+    "node_modules/tar/node_modules/minipass": {
+      "version": "5.0.0",
       "dev": true,
-      "requires": {
-        "xmlchars": "^2.1.1"
+      "license": "ISC",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "scheduler": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
-      "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "object-assign": "^4.1.1"
+    "node_modules/tar/node_modules/mkdirp": {
+      "version": "1.0.4",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "schema-utils": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
-      "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+    "node_modules/tar/node_modules/yallist": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "@types/json-schema": "^7.0.5",
-        "ajv": "^6.12.4",
-        "ajv-keywords": "^3.5.2"
+      "license": "ISC"
+    },
+    "node_modules/terser": {
+      "version": "5.16.3",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@jridgewell/source-map": "^0.3.2",
+        "acorn": "^8.5.0",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
       },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/terser-webpack-plugin": {
+      "version": "5.3.9",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "ajv": {
-          "version": "6.12.6",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
+        "@jridgewell/trace-mapping": "^0.3.17",
+        "jest-worker": "^27.4.5",
+        "schema-utils": "^3.1.1",
+        "serialize-javascript": "^6.0.1",
+        "terser": "^5.16.8"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.1.0"
+      },
+      "peerDependenciesMeta": {
+        "@swc/core": {
+          "optional": true
+        },
+        "esbuild": {
+          "optional": true
         },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
+        "uglify-js": {
+          "optional": true
         }
       }
     },
-    "scope-analyzer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz",
-      "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==",
+    "node_modules/terser-webpack-plugin/node_modules/acorn": {
+      "version": "8.10.0",
       "dev": true,
-      "requires": {
-        "array-from": "^2.1.1",
-        "dash-ast": "^2.0.1",
-        "es6-map": "^0.1.5",
-        "es6-set": "^0.1.5",
-        "es6-symbol": "^3.1.1",
-        "estree-is-function": "^1.0.0",
-        "get-assigned-identifiers": "^1.1.0"
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "seed-random": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz",
-      "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==",
-      "dev": true
-    },
-    "select-hose": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
-      "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
-      "dev": true
+    "node_modules/terser-webpack-plugin/node_modules/ajv": {
+      "version": "6.12.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
     },
-    "selfsigned": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz",
-      "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==",
+    "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": {
+      "version": "3.5.2",
       "dev": true,
-      "requires": {
-        "node-forge": "^1"
+      "license": "MIT",
+      "peerDependencies": {
+        "ajv": "^6.9.1"
       }
     },
-    "semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+    "node_modules/terser-webpack-plugin/node_modules/commander": {
+      "version": "2.20.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "send": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
-      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+    "node_modules/terser-webpack-plugin/node_modules/jest-worker": {
+      "version": "27.5.1",
       "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "depd": "2.0.0",
-        "destroy": "1.2.0",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "fresh": "0.5.2",
-        "http-errors": "2.0.0",
-        "mime": "1.6.0",
-        "ms": "2.1.3",
-        "on-finished": "2.4.1",
-        "range-parser": "~1.2.1",
-        "statuses": "2.0.1"
-      },
+      "license": "MIT",
       "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"
-          },
-          "dependencies": {
-            "ms": {
-              "version": "2.0.0",
-              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-              "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-              "dev": true
-            }
-          }
-        },
-        "ms": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-          "dev": true
-        }
+        "@types/node": "*",
+        "merge-stream": "^2.0.0",
+        "supports-color": "^8.0.0"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
       }
     },
-    "serialize-error": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz",
-      "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==",
-      "requires": {
-        "type-fest": "^0.20.2"
-      }
+    "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "serialize-javascript": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
-      "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
+    "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
+      "version": "3.3.0",
       "dev": true,
-      "requires": {
-        "randombytes": "^2.1.0"
+      "license": "MIT",
+      "dependencies": {
+        "@types/json-schema": "^7.0.8",
+        "ajv": "^6.12.5",
+        "ajv-keywords": "^3.5.2"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
       }
     },
-    "serve-index": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
+    "node_modules/terser-webpack-plugin/node_modules/supports-color": {
+      "version": "8.1.1",
       "dev": true,
-      "requires": {
-        "accepts": "~1.3.4",
-        "batch": "0.6.1",
-        "debug": "2.6.9",
-        "escape-html": "~1.0.3",
-        "http-errors": "~1.6.2",
-        "mime-types": "~2.1.17",
-        "parseurl": "~1.3.2"
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
       },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/terser-webpack-plugin/node_modules/terser": {
+      "version": "5.20.0",
+      "dev": true,
+      "license": "BSD-2-Clause",
       "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"
-          }
-        },
-        "depd": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
-          "dev": true
-        },
-        "http-errors": {
-          "version": "1.6.3",
-          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-          "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
-          "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": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-          "dev": true
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "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
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-          "dev": true
-        }
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
+      },
+      "bin": {
+        "terser": "bin/terser"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
-    "serve-static": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
-      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+    "node_modules/terser/node_modules/acorn": {
+      "version": "8.10.0",
       "dev": true,
-      "requires": {
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.3",
-        "send": "0.18.0"
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
+    "node_modules/terser/node_modules/commander": {
+      "version": "2.20.3",
+      "dev": true,
+      "license": "MIT"
     },
-    "set-value": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
-      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+    "node_modules/test-exclude": {
+      "version": "6.0.0",
       "dev": true,
-      "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-extendable": "^0.1.1",
-        "is-plain-object": "^2.0.3",
-        "split-string": "^3.0.1"
-      },
+      "license": "ISC",
       "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "is-plain-object": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-          "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-          "dev": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        }
+        "@istanbuljs/schema": "^0.1.2",
+        "glob": "^7.1.4",
+        "minimatch": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=8"
       }
     },
-    "setprototypeof": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
-      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
-      "dev": true
-    },
-    "sha.js": {
-      "version": "2.4.11",
-      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
-      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
+    "node_modules/test-exclude/node_modules/glob": {
+      "version": "7.2.3",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "shallow-clone": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
-      "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+    "node_modules/text-table": {
+      "version": "0.2.0",
       "dev": true,
-      "requires": {
-        "kind-of": "^6.0.2"
-      }
-    },
-    "shallow-copy": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
-      "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==",
-      "dev": true
+      "license": "MIT"
     },
-    "shasum": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz",
-      "integrity": "sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw==",
+    "node_modules/thenify": {
+      "version": "3.3.1",
       "dev": true,
-      "requires": {
-        "json-stable-stringify": "~0.0.0",
-        "sha.js": "~2.4.4"
+      "license": "MIT",
+      "dependencies": {
+        "any-promise": "^1.0.0"
       }
     },
-    "shasum-object": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz",
-      "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==",
+    "node_modules/thenify-all": {
+      "version": "1.6.0",
       "dev": true,
-      "requires": {
-        "fast-safe-stringify": "^2.0.7"
+      "license": "MIT",
+      "dependencies": {
+        "thenify": ">= 3.1.0 < 4"
+      },
+      "engines": {
+        "node": ">=0.8"
       }
     },
-    "shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+    "node_modules/throat": {
+      "version": "5.0.0",
       "dev": true,
-      "requires": {
-        "shebang-regex": "^3.0.0"
-      }
+      "license": "MIT"
     },
-    "shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true
-    },
-    "shell-quote": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
-      "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
-      "dev": true
+    "node_modules/throttleit": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "short-unique-id": {
-      "version": "4.4.4",
-      "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-4.4.4.tgz",
-      "integrity": "sha512-oLF1NCmtbiTWl2SqdXZQbo5KM1b7axdp0RgQLq8qCBBLoq+o3A5wmLrNM6bZIh54/a8BJ3l69kTXuxwZ+XCYuw=="
+    "node_modules/through": {
+      "version": "2.3.8",
+      "dev": true,
+      "license": "MIT"
     },
-    "side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-      "requires": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
+    "node_modules/through2": {
+      "version": "2.0.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
       }
     },
-    "signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
-    },
-    "simple-concat": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
-      "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="
+    "node_modules/thunky": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "simple-get": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
-      "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
-      "optional": true,
-      "requires": {
-        "decompress-response": "^4.2.0",
-        "once": "^1.3.1",
-        "simple-concat": "^1.0.0"
+    "node_modules/timers-browserify": {
+      "version": "1.4.2",
+      "dev": true,
+      "dependencies": {
+        "process": "~0.11.0"
+      },
+      "engines": {
+        "node": ">=0.6.0"
       }
     },
-    "simplebar": {
-      "version": "5.3.9",
-      "resolved": "https://registry.npmjs.org/simplebar/-/simplebar-5.3.9.tgz",
-      "integrity": "sha512-1vIIpjDvY9sVH14e0LGeiCiTFU3ILqAghzO6OI9axeG+mvU/vMSrvXeAXkBolqFFz3XYaY8n5ahH9MeP3sp2Ag==",
-      "requires": {
-        "@juggle/resize-observer": "^3.3.1",
-        "can-use-dom": "^0.1.0",
-        "core-js": "^3.0.1",
-        "lodash.debounce": "^4.0.8",
-        "lodash.memoize": "^4.1.2",
-        "lodash.throttle": "^4.1.1"
+    "node_modules/tiny-inflate": {
+      "version": "1.0.3",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/title-case": {
+      "version": "2.1.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.0.3"
       }
     },
-    "simplebar-angular": {
-      "version": "2.3.6",
-      "resolved": "https://registry.npmjs.org/simplebar-angular/-/simplebar-angular-2.3.6.tgz",
-      "integrity": "sha512-chSUdCYCLOdajbCA73oL/OU+H/YFNGGdAYkcYx76YDY81C3sj3vMePjuW8cPgZZHwSCGI+opcl6xoBsCK56fJA==",
-      "requires": {
-        "simplebar": "^5.3.6",
-        "tslib": "^1.9.0"
-      },
+    "node_modules/tmp": {
+      "version": "0.2.1",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-        }
+        "rimraf": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8.17.0"
       }
     },
-    "sisteransi": {
+    "node_modules/tmpl": {
       "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
-      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
-      "dev": true
+      "dev": true,
+      "license": "BSD-3-Clause"
     },
-    "slash": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
-      "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
-      "dev": true
+    "node_modules/to-fast-properties": {
+      "version": "2.0.0",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "slice-ansi": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
-      "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+    "node_modules/to-object-path": {
+      "version": "0.3.0",
       "dev": true,
-      "requires": {
-        "ansi-styles": "^4.0.0",
-        "astral-regex": "^2.0.0",
-        "is-fullwidth-code-point": "^3.0.0"
-      },
+      "license": "MIT",
       "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
-        }
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "smart-buffer": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
-      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
-      "dev": true
-    },
-    "snapdragon": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
-      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+    "node_modules/to-object-path/node_modules/kind-of": {
+      "version": "3.2.2",
       "dev": true,
-      "requires": {
-        "base": "^0.11.1",
-        "debug": "^2.2.0",
-        "define-property": "^0.2.5",
-        "extend-shallow": "^2.0.1",
-        "map-cache": "^0.2.2",
-        "source-map": "^0.5.6",
-        "source-map-resolve": "^0.5.0",
-        "use": "^3.1.0"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-          "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
-          "dev": true
-        },
-        "source-map-resolve": {
-          "version": "0.5.3",
-          "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
-          "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
-          "dev": true,
-          "requires": {
-            "atob": "^2.1.2",
-            "decode-uri-component": "^0.2.0",
-            "resolve-url": "^0.2.1",
-            "source-map-url": "^0.4.0",
-            "urix": "^0.1.0"
-          }
-        }
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "snapdragon-node": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
-      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+    "node_modules/to-regex": {
+      "version": "3.0.2",
       "dev": true,
-      "requires": {
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.0",
-        "snapdragon-util": "^3.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
       },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        }
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/toggle-selection": {
+      "version": "1.0.6",
+      "license": "MIT"
+    },
+    "node_modules/toidentifier": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6"
       }
     },
-    "snapdragon-util": {
+    "node_modules/tough-cookie": {
       "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
-      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
       "dev": true,
-      "requires": {
-        "kind-of": "^3.2.0"
-      },
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "ip-regex": "^2.1.0",
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "sockjs": {
-      "version": "0.3.24",
-      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
-      "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==",
+    "node_modules/tough-cookie/node_modules/punycode": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "faye-websocket": "^0.11.3",
-        "uuid": "^8.3.2",
-        "websocket-driver": "^0.7.4"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "socks": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
-      "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+    "node_modules/tr46": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "ip": "^2.0.0",
-        "smart-buffer": "^4.2.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ip": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
-          "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
-          "dev": true
-        }
+        "punycode": "^2.1.0"
       }
     },
-    "socks-proxy-agent": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
-      "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
+    "node_modules/tr46/node_modules/punycode": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "agent-base": "^6.0.2",
-        "debug": "^4.3.3",
-        "socks": "^2.6.2"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "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
+    "node_modules/transifex-i18ntool": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "colors": "^1.0.3",
+        "minimist": "^1.2.0",
+        "prompts": "^2.0.4",
+        "request": "^2.88.0",
+        "request-promise-native": "^1.0.7",
+        "xliff": "^4.2.0"
+      },
+      "bin": {
+        "i18ntool": "bin/i18ntool.js"
+      }
     },
-    "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
+    "node_modules/traverse": {
+      "version": "0.6.7",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tree-kill": {
+      "version": "1.2.2",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "tree-kill": "cli.js"
+      }
     },
-    "source-map-loader": {
+    "node_modules/trim-newlines": {
       "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz",
-      "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==",
       "dev": true,
-      "requires": {
-        "abab": "^2.0.5",
-        "iconv-lite": "^0.6.3",
-        "source-map-js": "^1.0.1"
-      },
-      "dependencies": {
-        "iconv-lite": {
-          "version": "0.6.3",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-          "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-          "dev": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3.0.0"
-          }
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "source-map-resolve": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
-      "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
+    "node_modules/trough": {
+      "version": "1.0.5",
       "dev": true,
-      "requires": {
-        "atob": "^2.1.2",
-        "decode-uri-component": "^0.2.0"
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "source-map-support": {
-      "version": "0.5.21",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
-      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+    "node_modules/ts-jest": {
+      "version": "29.1.1",
       "dev": true,
-      "requires": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
+        "bs-logger": "0.x",
+        "fast-json-stable-stringify": "2.x",
+        "jest-util": "^29.0.0",
+        "json5": "^2.2.3",
+        "lodash.memoize": "4.x",
+        "make-error": "1.x",
+        "semver": "^7.5.3",
+        "yargs-parser": "^21.0.1"
+      },
+      "bin": {
+        "ts-jest": "cli.js"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": ">=7.0.0-beta.0 <8",
+        "@jest/types": "^29.0.0",
+        "babel-jest": "^29.0.0",
+        "jest": "^29.0.0",
+        "typescript": ">=4.3 <6"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        },
+        "@jest/types": {
+          "optional": true
+        },
+        "babel-jest": {
+          "optional": true
+        },
+        "esbuild": {
+          "optional": true
         }
       }
     },
-    "source-map-url": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
-      "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
-      "dev": true
+    "node_modules/ts-jest/node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@sinclair/typebox": "^0.27.8"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
     },
-    "sourcemap-codec": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
-      "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
-      "dev": true
+    "node_modules/ts-jest/node_modules/@jest/types": {
+      "version": "29.6.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/schemas": "^29.6.3",
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^3.0.0",
+        "@types/node": "*",
+        "@types/yargs": "^17.0.8",
+        "chalk": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+      }
     },
-    "space-separated-tokens": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
-      "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA=="
+    "node_modules/ts-jest/node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "dev": true,
+      "license": "MIT"
     },
-    "spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+    "node_modules/ts-jest/node_modules/chalk": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/ts-jest/node_modules/jest-util": {
+      "version": "29.7.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jest/types": "^29.6.3",
+        "@types/node": "*",
+        "chalk": "^4.0.0",
+        "ci-info": "^3.2.0",
+        "graceful-fs": "^4.2.9",
+        "picomatch": "^2.2.3"
+      },
+      "engines": {
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "spdx-exceptions": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
-      "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
-      "dev": true
-    },
-    "spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+    "node_modules/ts-jest/node_modules/lodash.memoize": {
+      "version": "4.1.2",
       "dev": true,
-      "requires": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "spdx-license-ids": {
-      "version": "3.0.13",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
-      "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
-      "dev": true
+      "license": "MIT"
     },
-    "spdy": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
-      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
+    "node_modules/ts-jest/node_modules/yargs-parser": {
+      "version": "21.1.1",
       "dev": true,
-      "requires": {
-        "debug": "^4.1.0",
-        "handle-thing": "^2.0.0",
-        "http-deceiver": "^1.2.7",
-        "select-hose": "^2.0.0",
-        "spdy-transport": "^3.0.0"
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
       }
     },
-    "spdy-transport": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
-      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+    "node_modules/ts-morph": {
+      "version": "13.0.3",
       "dev": true,
-      "requires": {
-        "debug": "^4.1.0",
-        "detect-node": "^2.0.4",
-        "hpack.js": "^2.1.6",
-        "obuf": "^1.1.2",
-        "readable-stream": "^3.0.6",
-        "wbuf": "^1.7.3"
-      },
+      "license": "MIT",
       "dependencies": {
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
+        "@ts-morph/common": "~0.12.3",
+        "code-block-writer": "^11.0.0"
       }
     },
-    "specificity": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz",
-      "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==",
-      "dev": true
-    },
-    "split": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
-      "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+    "node_modules/ts-node": {
+      "version": "9.0.0",
       "dev": true,
-      "requires": {
-        "through": "2"
+      "license": "MIT",
+      "dependencies": {
+        "arg": "^4.1.0",
+        "diff": "^4.0.1",
+        "make-error": "^1.1.1",
+        "source-map-support": "^0.5.17",
+        "yn": "3.1.1"
+      },
+      "bin": {
+        "ts-node": "dist/bin.js",
+        "ts-node-script": "dist/bin-script.js",
+        "ts-node-transpile-only": "dist/bin-transpile.js",
+        "ts-script": "dist/bin-script-deprecated.js"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "typescript": ">=2.7"
       }
     },
-    "split-string": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
-      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+    "node_modules/ts-node/node_modules/diff": {
+      "version": "4.0.2",
       "dev": true,
-      "requires": {
-        "extend-shallow": "^3.0.0"
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.3.1"
       }
     },
-    "sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+    "node_modules/ts-toolbelt": {
+      "version": "9.6.0",
+      "license": "Apache-2.0"
     },
-    "sshpk": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
-      "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+    "node_modules/tsconfig-paths": {
+      "version": "4.2.0",
       "dev": true,
-      "requires": {
-        "asn1": "~0.2.3",
-        "assert-plus": "^1.0.0",
-        "bcrypt-pbkdf": "^1.0.0",
-        "dashdash": "^1.12.0",
-        "ecc-jsbn": "~0.1.1",
-        "getpass": "^0.1.1",
-        "jsbn": "~0.1.0",
-        "safer-buffer": "^2.0.2",
-        "tweetnacl": "~0.14.0"
+      "license": "MIT",
+      "dependencies": {
+        "json5": "^2.2.2",
+        "minimist": "^1.2.6",
+        "strip-bom": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "ssri": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
-      "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+    "node_modules/tsconfig-paths/node_modules/strip-bom": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "minipass": "^3.1.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
       }
     },
-    "stack-chain": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz",
-      "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==",
-      "dev": true
+    "node_modules/tslib": {
+      "version": "2.3.1",
+      "license": "0BSD"
     },
-    "stack-generator": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz",
-      "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==",
+    "node_modules/tsutils": {
+      "version": "3.21.0",
       "dev": true,
-      "requires": {
-        "stackframe": "^1.3.4"
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^1.8.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      },
+      "peerDependencies": {
+        "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
       }
     },
-    "stack-trace": {
-      "version": "0.0.10",
-      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
-      "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
-      "dev": true
+    "node_modules/tsutils/node_modules/tslib": {
+      "version": "1.14.1",
+      "dev": true,
+      "license": "0BSD"
     },
-    "stack-utils": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
-      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+    "node_modules/tty-browserify": {
+      "version": "0.0.1",
       "dev": true,
-      "requires": {
-        "escape-string-regexp": "^2.0.0"
+      "license": "MIT"
+    },
+    "node_modules/tuf-js": {
+      "version": "1.1.7",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@tufjs/models": "1.0.4",
+        "debug": "^4.3.4",
+        "make-fetch-happen": "^11.1.1"
       },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/tuf-js/node_modules/debug": {
+      "version": "4.3.4",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "escape-string-regexp": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
-          "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
-          "dev": true
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
         }
       }
     },
-    "stackframe": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
-      "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
-      "dev": true
+    "node_modules/tunnel": {
+      "version": "0.0.6",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+      }
     },
-    "stacktrace-gps": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz",
-      "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==",
+    "node_modules/tunnel-agent": {
+      "version": "0.6.0",
       "dev": true,
-      "requires": {
-        "source-map": "0.5.6",
-        "stackframe": "^1.3.4"
-      },
+      "license": "Apache-2.0",
       "dependencies": {
-        "source-map": {
-          "version": "0.5.6",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
-          "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==",
-          "dev": true
-        }
+        "safe-buffer": "^5.0.1"
+      },
+      "engines": {
+        "node": "*"
       }
     },
-    "stacktrace-js": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz",
-      "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==",
+    "node_modules/tweetnacl": {
+      "version": "0.14.5",
       "dev": true,
-      "requires": {
-        "error-stack-parser": "^2.0.6",
-        "stack-generator": "^2.0.5",
-        "stacktrace-gps": "^3.0.4"
-      }
+      "license": "Unlicense"
     },
-    "stampit": {
-      "version": "4.3.2",
-      "resolved": "https://registry.npmjs.org/stampit/-/stampit-4.3.2.tgz",
-      "integrity": "sha512-pE2org1+ZWQBnIxRPrBM2gVupkuDD0TTNIo1H6GdT/vO82NXli2z8lRE8cu/nBIHrcOCXFBAHpb9ZldrB2/qOA=="
+    "node_modules/type": {
+      "version": "1.2.0",
+      "dev": true,
+      "license": "ISC"
     },
-    "start-server-and-test": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.12.1.tgz",
-      "integrity": "sha512-qGQ2HQiF2yDIfyaHsXkHfoE5UOl4zJUbJ/gx2xOkfX7iPMXW9qHmoFyaMfIDJVLNkxCK7RxSrvWEI9hNVKQluw==",
+    "node_modules/type-check": {
+      "version": "0.4.0",
       "dev": true,
-      "requires": {
-        "bluebird": "3.7.2",
-        "check-more-types": "2.24.0",
-        "debug": "4.3.1",
-        "execa": "3.4.0",
-        "lazy-ass": "1.6.0",
-        "ps-tree": "1.2.0",
-        "wait-on": "5.3.0"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "execa": {
-          "version": "3.4.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
-          "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^7.0.0",
-            "get-stream": "^5.0.0",
-            "human-signals": "^1.1.1",
-            "is-stream": "^2.0.0",
-            "merge-stream": "^2.0.0",
-            "npm-run-path": "^4.0.0",
-            "onetime": "^5.1.0",
-            "p-finally": "^2.0.0",
-            "signal-exit": "^3.0.2",
-            "strip-final-newline": "^2.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "human-signals": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
-          "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
-          "dev": true
-        },
-        "p-finally": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
-          "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
-          "dev": true
-        }
+        "prelude-ls": "^1.2.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "static-eval": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz",
-      "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==",
+    "node_modules/type-detect": {
+      "version": "4.0.8",
       "dev": true,
-      "requires": {
-        "escodegen": "^1.11.1"
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
       }
     },
-    "static-extend": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-      "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
+    "node_modules/type-fest": {
+      "version": "0.21.3",
       "dev": true,
-      "requires": {
-        "define-property": "^0.2.5",
-        "object-copy": "^0.1.0"
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
       },
-      "dependencies": {
-        "define-property": {
-          "version": "0.2.5",
-          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "static-module": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz",
-      "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==",
+    "node_modules/type-is": {
+      "version": "1.6.18",
       "dev": true,
-      "requires": {
-        "acorn-node": "^1.3.0",
-        "concat-stream": "~1.6.0",
-        "convert-source-map": "^1.5.1",
-        "duplexer2": "~0.1.4",
-        "escodegen": "^1.11.1",
-        "has": "^1.0.1",
-        "magic-string": "0.25.1",
-        "merge-source-map": "1.0.4",
-        "object-inspect": "^1.6.0",
-        "readable-stream": "~2.3.3",
-        "scope-analyzer": "^2.0.1",
-        "shallow-copy": "~0.0.1",
-        "static-eval": "^2.0.5",
-        "through2": "~2.0.3"
-      },
+      "license": "MIT",
       "dependencies": {
-        "magic-string": {
-          "version": "0.25.1",
-          "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz",
-          "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==",
-          "dev": true,
-          "requires": {
-            "sourcemap-codec": "^1.4.1"
-          }
-        }
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "statuses": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
-      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
-      "dev": true
-    },
-    "stealthy-require": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
-      "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==",
-      "dev": true
-    },
-    "stream-browserify": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
-      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+    "node_modules/typed-array-buffer": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "inherits": "~2.0.1",
-        "readable-stream": "^2.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.2.1",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "stream-combiner": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz",
-      "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==",
+    "node_modules/typed-array-byte-length": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "duplexer": "~0.1.1",
-        "through": "~2.3.4"
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "has-proto": "^1.0.1",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "stream-combiner2": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
-      "integrity": "sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==",
+    "node_modules/typed-array-byte-offset": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "duplexer2": "~0.1.0",
-        "readable-stream": "^2.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "has-proto": "^1.0.1",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "stream-http": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz",
-      "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==",
+    "node_modules/typed-array-length": {
+      "version": "1.0.4",
       "dev": true,
-      "requires": {
-        "builtin-status-codes": "^3.0.0",
-        "inherits": "^2.0.4",
-        "readable-stream": "^3.6.0",
-        "xtend": "^4.0.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "is-typed-array": "^1.1.9"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "stream-splicer": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz",
-      "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==",
+    "node_modules/typed-assert": {
+      "version": "1.0.9",
       "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "readable-stream": "^2.0.2"
+      "license": "MIT"
+    },
+    "node_modules/typedarray": {
+      "version": "0.0.6",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/typedarray-to-buffer": {
+      "version": "3.1.5",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-typedarray": "^1.0.0"
       }
     },
-    "string-argv": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz",
-      "integrity": "sha512-p6/Mqq0utTQWUeGMi/m0uBtlLZEwXSY3+mXzeRRqw7fz5ezUb28Wr0R99NlfbWaMmL/jCyT9be4jpn7Yz8IO8w==",
-      "dev": true
+    "node_modules/types-ramda": {
+      "version": "0.29.4",
+      "license": "MIT",
+      "dependencies": {
+        "ts-toolbelt": "^9.6.0"
+      }
     },
-    "string-length": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
-      "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
+    "node_modules/typescript": {
+      "version": "4.9.5",
       "dev": true,
-      "requires": {
-        "char-regex": "^1.0.2",
-        "strip-ansi": "^6.0.0"
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=4.2.0"
       }
     },
-    "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==",
-      "requires": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
+    "node_modules/uglify-js": {
+      "version": "3.17.4",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "optional": true,
+      "bin": {
+        "uglifyjs": "bin/uglifyjs"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "string.prototype.padend": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz",
-      "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==",
+    "node_modules/umd": {
+      "version": "3.0.3",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+      "license": "MIT",
+      "bin": {
+        "umd": "bin/cli.js"
       }
     },
-    "string.prototype.trim": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
-      "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+    "node_modules/unbox-primitive": {
+      "version": "1.0.2",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+        "has-bigints": "^1.0.2",
+        "has-symbols": "^1.0.3",
+        "which-boxed-primitive": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "string.prototype.trimend": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
-      "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+    "node_modules/unc-path-regex": {
+      "version": "0.1.2",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "string.prototype.trimstart": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
-      "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+    "node_modules/undeclared-identifiers": {
+      "version": "1.1.3",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.20.4"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "acorn-node": "^1.3.0",
+        "dash-ast": "^1.0.0",
+        "get-assigned-identifiers": "^1.2.0",
+        "simple-concat": "^1.0.0",
+        "xtend": "^4.0.1"
+      },
+      "bin": {
+        "undeclared-identifiers": "bin.js"
       }
     },
-    "string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "requires": {
-        "safe-buffer": "~5.1.0"
-      },
+    "node_modules/undeclared-identifiers/node_modules/dash-ast": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/undici": {
+      "version": "5.25.2",
+      "license": "MIT",
       "dependencies": {
-        "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=="
-        }
+        "busboy": "^1.6.0"
+      },
+      "engines": {
+        "node": ">=14.0"
       }
     },
-    "strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "requires": {
-        "ansi-regex": "^5.0.1"
+    "node_modules/unicode-canonical-property-names-ecmascript": {
+      "version": "2.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
       }
     },
-    "strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-      "dev": true
-    },
-    "strip-eof": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-      "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
-      "dev": true
-    },
-    "strip-final-newline": {
+    "node_modules/unicode-match-property-ecmascript": {
       "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-      "dev": true
-    },
-    "strip-indent": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
-      "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
       "dev": true,
-      "requires": {
-        "min-indent": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "unicode-canonical-property-names-ecmascript": "^2.0.0",
+        "unicode-property-aliases-ecmascript": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "strip-json-comments": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
-      "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
-      "optional": true
-    },
-    "strong-log-transformer": {
+    "node_modules/unicode-match-property-value-ecmascript": {
       "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz",
-      "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==",
       "dev": true,
-      "requires": {
-        "duplexer": "^0.1.1",
-        "minimist": "^1.2.0",
-        "through": "^2.3.4"
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
       }
     },
-    "style-search": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
-      "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
-      "dev": true
-    },
-    "stylelint": {
-      "version": "13.13.1",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz",
-      "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==",
+    "node_modules/unicode-properties": {
+      "version": "1.4.1",
       "dev": true,
-      "requires": {
-        "@stylelint/postcss-css-in-js": "^0.37.2",
-        "@stylelint/postcss-markdown": "^0.36.2",
-        "autoprefixer": "^9.8.6",
-        "balanced-match": "^2.0.0",
-        "chalk": "^4.1.1",
-        "cosmiconfig": "^7.0.0",
-        "debug": "^4.3.1",
-        "execall": "^2.0.0",
-        "fast-glob": "^3.2.5",
-        "fastest-levenshtein": "^1.0.12",
-        "file-entry-cache": "^6.0.1",
-        "get-stdin": "^8.0.0",
-        "global-modules": "^2.0.0",
-        "globby": "^11.0.3",
-        "globjoin": "^0.1.4",
-        "html-tags": "^3.1.0",
-        "ignore": "^5.1.8",
-        "import-lazy": "^4.0.0",
-        "imurmurhash": "^0.1.4",
-        "known-css-properties": "^0.21.0",
-        "lodash": "^4.17.21",
-        "log-symbols": "^4.1.0",
-        "mathml-tag-names": "^2.1.3",
-        "meow": "^9.0.0",
-        "micromatch": "^4.0.4",
-        "normalize-selector": "^0.2.0",
-        "postcss": "^7.0.35",
-        "postcss-html": "^0.36.0",
-        "postcss-less": "^3.1.4",
-        "postcss-media-query-parser": "^0.2.3",
-        "postcss-resolve-nested-selector": "^0.1.1",
-        "postcss-safe-parser": "^4.0.2",
-        "postcss-sass": "^0.4.4",
-        "postcss-scss": "^2.1.1",
-        "postcss-selector-parser": "^6.0.5",
-        "postcss-syntax": "^0.36.2",
-        "postcss-value-parser": "^4.1.0",
-        "resolve-from": "^5.0.0",
-        "slash": "^3.0.0",
-        "specificity": "^0.4.1",
-        "string-width": "^4.2.2",
-        "strip-ansi": "^6.0.0",
-        "style-search": "^0.1.0",
-        "sugarss": "^2.0.0",
-        "svg-tags": "^1.0.0",
-        "table": "^6.6.0",
-        "v8-compile-cache": "^2.3.0",
-        "write-file-atomic": "^3.0.3"
-      },
+      "license": "MIT",
       "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"
-          }
-        },
-        "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
-        },
-        "autoprefixer": {
-          "version": "9.8.8",
-          "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
-          "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
-          "dev": true,
-          "requires": {
-            "browserslist": "^4.12.0",
-            "caniuse-lite": "^1.0.30001109",
-            "normalize-range": "^0.1.2",
-            "num2fraction": "^1.2.2",
-            "picocolors": "^0.2.1",
-            "postcss": "^7.0.32",
-            "postcss-value-parser": "^4.1.0"
-          }
-        },
-        "balanced-match": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
-          "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-          "dev": true
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "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
-        },
-        "global-modules": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
-          "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
-          "dev": true,
-          "requires": {
-            "global-prefix": "^3.0.0"
-          }
-        },
-        "global-prefix": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
-          "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
-          "dev": true,
-          "requires": {
-            "ini": "^1.3.5",
-            "kind-of": "^6.0.2",
-            "which": "^1.3.1"
-          }
-        },
-        "globby": {
-          "version": "11.1.0",
-          "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-          "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-          "dev": true,
-          "requires": {
-            "array-union": "^2.1.0",
-            "dir-glob": "^3.0.1",
-            "fast-glob": "^3.2.9",
-            "ignore": "^5.2.0",
-            "merge2": "^1.4.1",
-            "slash": "^3.0.0"
-          }
-        },
-        "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
-        },
-        "picocolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-          "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.39",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-          "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-          "dev": true,
-          "requires": {
-            "picocolors": "^0.2.1",
-            "source-map": "^0.6.1"
-          }
-        },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "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"
-          }
-        },
-        "which": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        },
-        "write-file-atomic": {
-          "version": "3.0.3",
-          "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
-          "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
-          "dev": true,
-          "requires": {
-            "imurmurhash": "^0.1.4",
-            "is-typedarray": "^1.0.0",
-            "signal-exit": "^3.0.2",
-            "typedarray-to-buffer": "^3.1.5"
-          }
-        }
+        "base64-js": "^1.3.0",
+        "unicode-trie": "^2.0.0"
       }
     },
-    "stylelint-config-sass-guidelines": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-7.1.0.tgz",
-      "integrity": "sha512-WvC9nRdlYknftPcUaJCajrPYKg6d2CKffrr7BPPkN/i/Mt8Qsm1hNQ9lqC1sKoCIKdH051SCEZi10qwFLgDbbg==",
+    "node_modules/unicode-property-aliases-ecmascript": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "stylelint-order": "^4.0.0",
-        "stylelint-scss": "^3.18.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
       }
     },
-    "stylelint-declaration-use-variable": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/stylelint-declaration-use-variable/-/stylelint-declaration-use-variable-1.7.3.tgz",
-      "integrity": "sha512-6aH9aJcjT4QAzwgqcE+0td507lqBeSZGWbRf8nX7VJRNm8SQT//b2uoshQ4sNxKfJBH3S8RUWeVP37DgCjzZmQ==",
-      "dev": true
-    },
-    "stylelint-order": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-4.1.0.tgz",
-      "integrity": "sha512-sVTikaDvMqg2aJjh4r48jsdfmqLT+nqB1MOsaBnvM3OwLx4S+WXcsxsgk5w18h/OZoxZCxuyXMh61iBHcj9Qiw==",
+    "node_modules/unicode-trie": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "lodash": "^4.17.15",
-        "postcss": "^7.0.31",
-        "postcss-sorting": "^5.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "picocolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-          "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.39",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-          "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-          "dev": true,
-          "requires": {
-            "picocolors": "^0.2.1",
-            "source-map": "^0.6.1"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "pako": "^0.2.5",
+        "tiny-inflate": "^1.0.0"
       }
     },
-    "stylelint-scss": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.21.0.tgz",
-      "integrity": "sha512-CMI2wSHL+XVlNExpauy/+DbUcB/oUZLARDtMIXkpV/5yd8nthzylYd1cdHeDMJVBXeYHldsnebUX6MoV5zPW4A==",
+    "node_modules/unicode-trie/node_modules/pako": {
+      "version": "0.2.9",
       "dev": true,
-      "requires": {
-        "lodash": "^4.17.15",
-        "postcss-media-query-parser": "^0.2.3",
-        "postcss-resolve-nested-selector": "^0.1.1",
-        "postcss-selector-parser": "^6.0.2",
-        "postcss-value-parser": "^4.1.0"
-      }
+      "license": "MIT"
     },
-    "stylus": {
-      "version": "0.56.0",
-      "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.56.0.tgz",
-      "integrity": "sha512-Ev3fOb4bUElwWu4F9P9WjnnaSpc8XB9OFHSFZSKMFL1CE1oM+oFXWEgAqPmmZIyhBihuqIQlFsVTypiiS9RxeA==",
+    "node_modules/unified": {
+      "version": "9.2.2",
       "dev": true,
-      "requires": {
-        "css": "^3.0.0",
-        "debug": "^4.3.2",
-        "glob": "^7.1.6",
-        "safer-buffer": "^2.1.2",
-        "sax": "~1.2.4",
-        "source-map": "^0.7.3"
+      "license": "MIT",
+      "dependencies": {
+        "bail": "^1.0.0",
+        "extend": "^3.0.0",
+        "is-buffer": "^2.0.0",
+        "is-plain-obj": "^2.0.0",
+        "trough": "^1.0.0",
+        "vfile": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "stylus-loader": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz",
-      "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==",
+    "node_modules/unified/node_modules/is-buffer": {
+      "version": "2.0.5",
       "dev": true,
-      "requires": {
-        "fast-glob": "^3.2.7",
-        "klona": "^2.0.4",
-        "normalize-path": "^3.0.0"
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
       }
     },
-    "subarg": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz",
-      "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==",
+    "node_modules/unified/node_modules/is-plain-obj": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "minimist": "^1.1.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "sugarss": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz",
-      "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==",
+    "node_modules/union-value": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "postcss": "^7.0.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "picocolors": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
-          "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
-          "dev": true
-        },
-        "postcss": {
-          "version": "7.0.39",
-          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
-          "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
-          "dev": true,
-          "requires": {
-            "picocolors": "^0.2.1",
-            "source-map": "^0.6.1"
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        }
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "requires": {
-        "has-flag": "^3.0.0"
+    "node_modules/union-value/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "supports-hyperlinks": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
-      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
+    "node_modules/unique-filename": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "has-flag": "^4.0.0",
-        "supports-color": "^7.0.0"
-      },
+      "license": "ISC",
       "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"
-          }
-        }
+        "unique-slug": "^4.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.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
-    },
-    "svg-tags": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
-      "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==",
-      "dev": true
-    },
-    "swagger-client": {
-      "version": "3.19.8",
-      "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.19.8.tgz",
-      "integrity": "sha512-+zfLp+1U6kOK+o9QyYDWMXxMYGKiOK20LFjNDtZsVzscbg1S3REKW5BaH9zioWKtK1x2zZWeiqnhNKDL8WgLTQ==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.20.13",
-        "@swagger-api/apidom-core": ">=0.70.0 <1.0.0",
-        "@swagger-api/apidom-json-pointer": ">=0.70.0 <1.0.0",
-        "@swagger-api/apidom-ns-openapi-3-1": ">=0.70.0 <1.0.0",
-        "@swagger-api/apidom-reference": ">=0.70.0 <1.0.0",
-        "cookie": "~0.5.0",
-        "cross-fetch": "^3.1.5",
-        "deepmerge": "~4.3.0",
-        "fast-json-patch": "^3.0.0-1",
-        "form-data-encoder": "^1.4.3",
-        "formdata-node": "^4.0.0",
-        "is-plain-object": "^5.0.0",
-        "js-yaml": "^4.1.0",
-        "lodash": "^4.17.21",
-        "qs": "^6.10.2",
-        "traverse": "~0.6.6",
-        "url": "~0.11.0"
+    "node_modules/unique-slug": {
+      "version": "4.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "imurmurhash": "^0.1.4"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "swagger-ui": {
-      "version": "4.12.0",
-      "resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-4.12.0.tgz",
-      "integrity": "sha512-ffNcDTQFWu5dEzJywQ4QEcgQZlBaHaeYCjifuWePds8anzqCZXVpeJSD7RCirUs+8D051YevRSu3ZjqNUNyvrQ==",
-      "requires": {
-        "@babel/runtime-corejs3": "^7.16.8",
-        "@braintree/sanitize-url": "=6.0.0",
-        "base64-js": "^1.5.1",
-        "classnames": "^2.3.1",
-        "css.escape": "1.5.1",
-        "deep-extend": "0.6.0",
-        "dompurify": "=2.3.3",
-        "ieee754": "^1.2.1",
-        "immutable": "^3.x.x",
-        "js-file-download": "^0.4.12",
-        "js-yaml": "=4.1.0",
-        "lodash": "^4.17.21",
-        "prop-types": "^15.8.1",
-        "randexp": "^0.5.3",
-        "randombytes": "^2.1.0",
-        "react": "=17.0.2",
-        "react-copy-to-clipboard": "5.0.4",
-        "react-debounce-input": "=3.2.4",
-        "react-dom": "=17.0.2",
-        "react-immutable-proptypes": "2.2.0",
-        "react-immutable-pure-component": "^2.2.0",
-        "react-inspector": "^5.1.1",
-        "react-redux": "^7.2.4",
-        "react-syntax-highlighter": "^15.4.5",
-        "redux": "^4.1.2",
-        "redux-immutable": "^4.0.0",
-        "remarkable": "^2.0.1",
-        "reselect": "^4.1.5",
-        "serialize-error": "^8.1.0",
-        "sha.js": "^2.4.11",
-        "swagger-client": "^3.18.5",
-        "url-parse": "^1.5.8",
-        "xml": "=1.0.1",
-        "xml-but-prettier": "^1.0.1",
-        "zenscroll": "^4.0.2"
+    "node_modules/unist-util-find-all-after": {
+      "version": "3.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "unist-util-is": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "symbol-observable": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
-      "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==",
-      "dev": true
+    "node_modules/unist-util-is": {
+      "version": "4.1.0",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
     },
-    "symbol-tree": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
-      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
-      "dev": true
+    "node_modules/unist-util-stringify-position": {
+      "version": "2.0.3",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^2.0.2"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
     },
-    "syntax-error": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz",
-      "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==",
+    "node_modules/universalify": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "acorn-node": "^1.2.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10.0.0"
       }
     },
-    "table": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
-      "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
+    "node_modules/unix-crypt-td-js": {
+      "version": "1.1.4",
       "dev": true,
-      "requires": {
-        "ajv": "^8.0.1",
-        "lodash.truncate": "^4.4.2",
-        "slice-ansi": "^4.0.0",
-        "string-width": "^4.2.3",
-        "strip-ansi": "^6.0.1"
-      },
-      "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
-        },
-        "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"
-          }
-        }
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "tapable": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
-      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
-      "dev": true
+    "node_modules/unraw": {
+      "version": "3.0.0",
+      "license": "MIT"
     },
-    "tar": {
-      "version": "6.1.15",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz",
-      "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==",
+    "node_modules/unset-value": {
+      "version": "1.0.0",
       "dev": true,
-      "requires": {
-        "chownr": "^2.0.0",
-        "fs-minipass": "^2.0.0",
-        "minipass": "^5.0.0",
-        "minizlib": "^2.1.1",
-        "mkdirp": "^1.0.3",
-        "yallist": "^4.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "chownr": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
-          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
-          "dev": true
-        },
-        "minipass": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
-          "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
-          "dev": true
-        },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
-        }
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "tar-fs": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
-      "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
-      "optional": true,
-      "requires": {
-        "chownr": "^1.1.1",
-        "mkdirp-classic": "^0.5.2",
-        "pump": "^3.0.0",
-        "tar-stream": "^2.1.4"
+    "node_modules/unset-value/node_modules/has-value": {
+      "version": "0.3.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "get-value": "^2.0.3",
+        "has-values": "^0.1.4",
+        "isobject": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "tar-stream": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
-      "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
-      "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"
-      },
+    "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+      "version": "2.1.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "readable-stream": {
-          "version": "3.6.2",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-          "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
+        "isarray": "1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "terminal-link": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
-      "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
+    "node_modules/unset-value/node_modules/has-values": {
+      "version": "0.1.4",
       "dev": true,
-      "requires": {
-        "ansi-escapes": "^4.2.1",
-        "supports-hyperlinks": "^2.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "terser": {
-      "version": "5.14.2",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
-      "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
+    "node_modules/untildify": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "@jridgewell/source-map": "^0.3.2",
-        "acorn": "^8.5.0",
-        "commander": "^2.20.0",
-        "source-map-support": "~0.5.20"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
-    "terser-webpack-plugin": {
-      "version": "5.3.9",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
-      "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/trace-mapping": "^0.3.17",
-        "jest-worker": "^27.4.5",
-        "schema-utils": "^3.1.1",
-        "serialize-javascript": "^6.0.1",
-        "terser": "^5.16.8"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "6.12.6",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
+    "node_modules/update-browserslist-db": {
+      "version": "1.0.13",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
         },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
         },
-        "schema-utils": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz",
-          "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==",
-          "dev": true,
-          "requires": {
-            "@types/json-schema": "^7.0.8",
-            "ajv": "^6.12.5",
-            "ajv-keywords": "^3.5.2"
-          }
-        },
-        "terser": {
-          "version": "5.17.6",
-          "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.6.tgz",
-          "integrity": "sha512-V8QHcs8YuyLkLHsJO5ucyff1ykrLVsR4dNnS//L5Y3NiSXpbK1J+WMVUs67eI0KTxs9JtHhgEQpXQVHlHI92DQ==",
-          "dev": true,
-          "requires": {
-            "@jridgewell/source-map": "^0.3.2",
-            "acorn": "^8.5.0",
-            "commander": "^2.20.0",
-            "source-map-support": "~0.5.20"
-          }
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
       }
     },
-    "test-exclude": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
-      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+    "node_modules/upper-case": {
+      "version": "1.1.3",
       "dev": true,
-      "requires": {
-        "@istanbuljs/schema": "^0.1.2",
-        "glob": "^7.1.4",
-        "minimatch": "^3.0.4"
-      }
+      "license": "MIT"
     },
-    "text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
-      "dev": true
-    },
-    "thenify": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
-      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+    "node_modules/uri-js": {
+      "version": "4.4.1",
       "dev": true,
-      "requires": {
-        "any-promise": "^1.0.0"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "punycode": "^2.1.0"
       }
     },
-    "thenify-all": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
-      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+    "node_modules/uri-js/node_modules/punycode": {
+      "version": "2.3.0",
       "dev": true,
-      "requires": {
-        "thenify": ">= 3.1.0 < 4"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
       }
     },
-    "throat": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
-      "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
-      "dev": true
-    },
-    "throttleit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
-      "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==",
-      "dev": true
-    },
-    "through": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
-      "dev": true
+    "node_modules/urix": {
+      "version": "0.1.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "through2": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+    "node_modules/url": {
+      "version": "0.11.3",
       "dev": true,
-      "requires": {
-        "readable-stream": "~2.3.6",
-        "xtend": "~4.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "punycode": "^1.4.1",
+        "qs": "^6.11.2"
       }
     },
-    "thunky": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
-      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
-      "dev": true
+    "node_modules/url-parse": {
+      "version": "1.5.10",
+      "license": "MIT",
+      "dependencies": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
     },
-    "timers-browserify": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz",
-      "integrity": "sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==",
+    "node_modules/url/node_modules/qs": {
+      "version": "6.11.2",
       "dev": true,
-      "requires": {
-        "process": "~0.11.0"
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "tiny-inflate": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
-      "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
-      "dev": true
-    },
-    "title-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz",
-      "integrity": "sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==",
+    "node_modules/use": {
+      "version": "3.1.1",
       "dev": true,
-      "requires": {
-        "no-case": "^2.2.0",
-        "upper-case": "^1.0.3"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "tmp": {
-      "version": "0.0.33",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+    "node_modules/util": {
+      "version": "0.10.4",
       "dev": true,
-      "requires": {
-        "os-tmpdir": "~1.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "2.0.3"
       }
     },
-    "tmpl": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
-      "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
-      "dev": true
+    "node_modules/util-arity": {
+      "version": "1.1.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "to-fast-properties": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "to-object-path": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-      "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
+    "node_modules/util/node_modules/inherits": {
+      "version": "2.0.3",
       "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
+      "license": "ISC"
     },
-    "to-regex": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
-      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "define-property": "^2.0.2",
-        "extend-shallow": "^3.0.2",
-        "regex-not": "^1.0.2",
-        "safe-regex": "^1.1.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4.0"
       }
     },
-    "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==",
+    "node_modules/uuid": {
+      "version": "8.3.2",
       "dev": true,
-      "requires": {
-        "is-number": "^7.0.0"
+      "license": "MIT",
+      "bin": {
+        "uuid": "dist/bin/uuid"
       }
     },
-    "toggle-selection": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
-      "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ=="
-    },
-    "toidentifier": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
-      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
-      "dev": true
+    "node_modules/v8-compile-cache": {
+      "version": "2.4.0",
+      "dev": true,
+      "license": "MIT"
     },
-    "tough-cookie": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
-      "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
+    "node_modules/v8-to-istanbul": {
+      "version": "9.1.0",
       "dev": true,
-      "requires": {
-        "ip-regex": "^2.1.0",
-        "psl": "^1.1.28",
-        "punycode": "^2.1.1"
-      },
+      "license": "ISC",
       "dependencies": {
-        "punycode": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-          "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-          "dev": true
-        }
+        "@jridgewell/trace-mapping": "^0.3.12",
+        "@types/istanbul-lib-coverage": "^2.0.1",
+        "convert-source-map": "^1.6.0"
+      },
+      "engines": {
+        "node": ">=10.12.0"
       }
     },
-    "tr46": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
-    },
-    "transifex-i18ntool": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/transifex-i18ntool/-/transifex-i18ntool-1.1.0.tgz",
-      "integrity": "sha512-W1FIGosZJ3cxbYk238QgsJvKPq12dPDIMn3rg37ZHNtoNAGrUAV6wKp+YSFwnMcqk3igZcAEPlLW1jFjBFC95Q==",
+    "node_modules/validate-npm-package-license": {
+      "version": "3.0.4",
       "dev": true,
-      "requires": {
-        "colors": "^1.0.3",
-        "minimist": "^1.2.0",
-        "prompts": "^2.0.4",
-        "request": "^2.88.0",
-        "request-promise-native": "^1.0.7",
-        "xliff": "^4.2.0"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
       }
     },
-    "traverse": {
-      "version": "0.6.7",
-      "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz",
-      "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg=="
-    },
-    "tree-kill": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
-      "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
-      "dev": true
-    },
-    "tree-sitter": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.20.1.tgz",
-      "integrity": "sha512-Cmb8V0ocamHbgWMVhZIa+78k/7r8VCQ6+ePG8eYEAO7AccwWi06Ct4ATNiI94KwhIkRl0+OwZ42/5nk3GnEMpQ==",
-      "optional": true,
-      "requires": {
-        "nan": "^2.14.0",
-        "prebuild-install": "^6.0.1"
+    "node_modules/validate-npm-package-name": {
+      "version": "5.0.0",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "builtins": "^5.0.0"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "tree-sitter-json": {
-      "version": "0.20.0",
-      "resolved": "https://registry.npmjs.org/tree-sitter-json/-/tree-sitter-json-0.20.0.tgz",
-      "integrity": "sha512-PteOLH+Tx6Bz4ZA/d40/DbkiSXXRM/gKahhHI8hQ1lWNfFvdknnz9k3Mz84ol5srRyLboJ8wp8GSkhZ6ht9EGQ==",
-      "optional": true,
-      "requires": {
-        "nan": "^2.14.1"
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "tree-sitter-yaml": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/tree-sitter-yaml/-/tree-sitter-yaml-0.5.0.tgz",
-      "integrity": "sha512-POJ4ZNXXSWIG/W4Rjuyg36MkUD4d769YRUGKRqN+sVaj/VCo6Dh6Pkssn1Rtewd5kybx+jT1BWMyWN0CijXnMA==",
-      "optional": true,
-      "requires": {
-        "nan": "^2.14.0"
+    "node_modules/verror": {
+      "version": "1.10.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      },
+      "engines": {
+        "node": ">=0.6.0"
       }
     },
-    "trim-newlines": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz",
-      "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
-      "dev": true
-    },
-    "trough": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
-      "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
-      "dev": true
+    "node_modules/verror/node_modules/core-util-is": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT"
     },
-    "ts-jest": {
-      "version": "28.0.8",
-      "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-28.0.8.tgz",
-      "integrity": "sha512-5FaG0lXmRPzApix8oFG8RKjAz4ehtm8yMKOTy5HX3fY6W8kmvOrmcY0hKDElW52FJov+clhUbrKAqofnj4mXTg==",
+    "node_modules/vfile": {
+      "version": "4.2.1",
       "dev": true,
-      "requires": {
-        "bs-logger": "0.x",
-        "fast-json-stable-stringify": "2.x",
-        "jest-util": "^28.0.0",
-        "json5": "^2.2.1",
-        "lodash.memoize": "4.x",
-        "make-error": "1.x",
-        "semver": "7.x",
-        "yargs-parser": "^21.0.1"
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^2.0.0",
+        "is-buffer": "^2.0.0",
+        "unist-util-stringify-position": "^2.0.0",
+        "vfile-message": "^2.0.0"
       },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vfile-message": {
+      "version": "2.0.4",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "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"
-          }
+        "@types/unist": "^2.0.0",
+        "unist-util-stringify-position": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vfile/node_modules/is-buffer": {
+      "version": "2.0.5",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
         },
-        "semver": {
-          "version": "7.5.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
-          "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
         },
-        "yallist": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-          "dev": true
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
         }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/vm-browserify": {
+      "version": "1.1.2",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/w3c-hr-time": {
+      "version": "1.0.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "browser-process-hrtime": "^1.0.0"
       }
     },
-    "ts-morph": {
-      "version": "13.0.3",
-      "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-13.0.3.tgz",
-      "integrity": "sha512-pSOfUMx8Ld/WUreoSzvMFQG5i9uEiWIsBYjpU9+TTASOeUa89j5HykomeqVULm1oqWtBdleI3KEFRLrlA3zGIw==",
+    "node_modules/w3c-xmlserializer": {
+      "version": "1.1.2",
       "dev": true,
-      "requires": {
-        "@ts-morph/common": "~0.12.3",
-        "code-block-writer": "^11.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "domexception": "^1.0.1",
+        "webidl-conversions": "^4.0.2",
+        "xml-name-validator": "^3.0.0"
       }
     },
-    "ts-node": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz",
-      "integrity": "sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg==",
+    "node_modules/wait-on": {
+      "version": "5.3.0",
       "dev": true,
-      "requires": {
-        "arg": "^4.1.0",
-        "diff": "^4.0.1",
-        "make-error": "^1.1.1",
-        "source-map-support": "^0.5.17",
-        "yn": "3.1.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "diff": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
-          "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
-          "dev": true
-        }
+        "axios": "^0.21.1",
+        "joi": "^17.3.0",
+        "lodash": "^4.17.21",
+        "minimist": "^1.2.5",
+        "rxjs": "^6.6.3"
+      },
+      "bin": {
+        "wait-on": "bin/wait-on"
+      },
+      "engines": {
+        "node": ">=8.9.0"
       }
     },
-    "ts-toolbelt": {
-      "version": "9.6.0",
-      "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz",
-      "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w=="
-    },
-    "tsconfig-paths": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
-      "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
+    "node_modules/walker": {
+      "version": "1.0.8",
       "dev": true,
-      "requires": {
-        "json5": "^2.2.2",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "makeerror": "1.0.12"
       }
     },
-    "tslib": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
-      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
-    },
-    "tsutils": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-      "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+    "node_modules/watchify": {
+      "version": "4.0.0",
       "dev": true,
-      "requires": {
-        "tslib": "^1.8.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
-        }
+        "anymatch": "^3.1.0",
+        "browserify": "^17.0.0",
+        "chokidar": "^3.4.0",
+        "defined": "^1.0.0",
+        "outpipe": "^1.1.0",
+        "through2": "^4.0.2",
+        "xtend": "^4.0.2"
+      },
+      "bin": {
+        "watchify": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
       }
     },
-    "tty-browserify": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz",
-      "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
-      "dev": true
-    },
-    "tunnel": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
-      "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
-      "dev": true
-    },
-    "tunnel-agent": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
-      "requires": {
-        "safe-buffer": "^5.0.1"
+    "node_modules/watchify/node_modules/browserify": {
+      "version": "17.0.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "assert": "^1.4.0",
+        "browser-pack": "^6.0.1",
+        "browser-resolve": "^2.0.0",
+        "browserify-zlib": "~0.2.0",
+        "buffer": "~5.2.1",
+        "cached-path-relative": "^1.0.0",
+        "concat-stream": "^1.6.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "~1.0.0",
+        "crypto-browserify": "^3.0.0",
+        "defined": "^1.0.0",
+        "deps-sort": "^2.0.1",
+        "domain-browser": "^1.2.0",
+        "duplexer2": "~0.1.2",
+        "events": "^3.0.0",
+        "glob": "^7.1.0",
+        "has": "^1.0.0",
+        "htmlescape": "^1.1.0",
+        "https-browserify": "^1.0.0",
+        "inherits": "~2.0.1",
+        "insert-module-globals": "^7.2.1",
+        "JSONStream": "^1.0.3",
+        "labeled-stream-splicer": "^2.0.0",
+        "mkdirp-classic": "^0.5.2",
+        "module-deps": "^6.2.3",
+        "os-browserify": "~0.3.0",
+        "parents": "^1.0.1",
+        "path-browserify": "^1.0.0",
+        "process": "~0.11.0",
+        "punycode": "^1.3.2",
+        "querystring-es3": "~0.2.0",
+        "read-only-stream": "^2.0.0",
+        "readable-stream": "^2.0.2",
+        "resolve": "^1.1.4",
+        "shasum-object": "^1.0.0",
+        "shell-quote": "^1.6.1",
+        "stream-browserify": "^3.0.0",
+        "stream-http": "^3.0.0",
+        "string_decoder": "^1.1.1",
+        "subarg": "^1.0.0",
+        "syntax-error": "^1.1.1",
+        "through2": "^2.0.0",
+        "timers-browserify": "^1.0.1",
+        "tty-browserify": "0.0.1",
+        "url": "~0.11.0",
+        "util": "~0.12.0",
+        "vm-browserify": "^1.0.0",
+        "xtend": "^4.0.0"
+      },
+      "bin": {
+        "browserify": "bin/cmd.js"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "tweetnacl": {
-      "version": "0.14.5",
-      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
-      "dev": true
-    },
-    "type": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
-      "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
-      "dev": true
-    },
-    "type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+    "node_modules/watchify/node_modules/browserify/node_modules/through2": {
+      "version": "2.0.5",
       "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2"
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
       }
     },
-    "type-detect": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
-      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
-      "dev": true
-    },
-    "type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
-    },
-    "type-is": {
-      "version": "1.6.18",
-      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+    "node_modules/watchify/node_modules/events": {
+      "version": "3.3.0",
       "dev": true,
-      "requires": {
-        "media-typer": "0.3.0",
-        "mime-types": "~2.1.24"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.x"
       }
     },
-    "typed-array-length": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
-      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+    "node_modules/watchify/node_modules/glob": {
+      "version": "7.2.3",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "for-each": "^0.3.3",
-        "is-typed-array": "^1.1.9"
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "typed-assert": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
-      "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==",
-      "dev": true
-    },
-    "typedarray": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
-      "dev": true
+    "node_modules/watchify/node_modules/path-browserify": {
+      "version": "1.0.1",
+      "dev": true,
+      "license": "MIT"
     },
-    "typedarray-to-buffer": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
-      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+    "node_modules/watchify/node_modules/stream-browserify": {
+      "version": "3.0.0",
       "dev": true,
-      "requires": {
-        "is-typedarray": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "~2.0.4",
+        "readable-stream": "^3.5.0"
       }
     },
-    "types-ramda": {
-      "version": "0.29.3",
-      "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.29.3.tgz",
-      "integrity": "sha512-6z8/UCI5/kRorQ91Mo+TUXImHpGAhmhg8ZIdT/tNrG+xSQvDwJXYyT5Nlw2U5VpoKetUZVqQXYYLQyq5Bzccsg==",
-      "requires": {
-        "ts-toolbelt": "^9.6.0"
+    "node_modules/watchify/node_modules/stream-browserify/node_modules/readable-stream": {
+      "version": "3.6.2",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "typescript": {
-      "version": "4.6.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz",
-      "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==",
-      "dev": true
-    },
-    "uglify-js": {
-      "version": "3.17.4",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
-      "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+    "node_modules/watchify/node_modules/through2": {
+      "version": "4.0.2",
       "dev": true,
-      "optional": true
-    },
-    "umd": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
-      "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==",
-      "dev": true
+      "license": "MIT",
+      "dependencies": {
+        "readable-stream": "3"
+      }
     },
-    "unbox-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+    "node_modules/watchify/node_modules/through2/node_modules/readable-stream": {
+      "version": "3.6.2",
       "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.0.3",
-        "which-boxed-primitive": "^1.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "unc-path-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
-      "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
-      "dev": true
-    },
-    "undeclared-identifiers": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz",
-      "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==",
+    "node_modules/watchify/node_modules/util": {
+      "version": "0.12.5",
       "dev": true,
-      "requires": {
-        "acorn-node": "^1.3.0",
-        "dash-ast": "^1.0.0",
-        "get-assigned-identifiers": "^1.2.0",
-        "simple-concat": "^1.0.0",
-        "xtend": "^4.0.1"
-      },
+      "license": "MIT",
       "dependencies": {
-        "dash-ast": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz",
-          "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==",
-          "dev": true
-        }
+        "inherits": "^2.0.3",
+        "is-arguments": "^1.0.4",
+        "is-generator-function": "^1.0.7",
+        "is-typed-array": "^1.1.3",
+        "which-typed-array": "^1.1.2"
       }
     },
-    "unicode-canonical-property-names-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
-      "dev": true
-    },
-    "unicode-match-property-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+    "node_modules/watchpack": {
+      "version": "2.4.0",
       "dev": true,
-      "requires": {
-        "unicode-canonical-property-names-ecmascript": "^2.0.0",
-        "unicode-property-aliases-ecmascript": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.1.2"
+      },
+      "engines": {
+        "node": ">=10.13.0"
       }
     },
-    "unicode-match-property-value-ecmascript": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
-      "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
-      "dev": true
-    },
-    "unicode-properties": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz",
-      "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
+    "node_modules/wbuf": {
+      "version": "1.7.3",
       "dev": true,
-      "requires": {
-        "base64-js": "^1.3.0",
-        "unicode-trie": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "minimalistic-assert": "^1.0.0"
       }
     },
-    "unicode-property-aliases-ecmascript": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
-      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
-      "dev": true
-    },
-    "unicode-trie": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
-      "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
+    "node_modules/wcwidth": {
+      "version": "1.0.1",
       "dev": true,
-      "requires": {
-        "pako": "^0.2.5",
-        "tiny-inflate": "^1.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "pako": {
-          "version": "0.2.9",
-          "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
-          "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
-          "dev": true
-        }
+        "defaults": "^1.0.3"
       }
     },
-    "unified": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz",
-      "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==",
+    "node_modules/web-streams-polyfill": {
+      "version": "3.2.1",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/webidl-conversions": {
+      "version": "4.0.2",
       "dev": true,
-      "requires": {
-        "bail": "^1.0.0",
-        "extend": "^3.0.0",
-        "is-buffer": "^2.0.0",
-        "is-plain-obj": "^2.0.0",
-        "trough": "^1.0.0",
-        "vfile": "^4.0.0"
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/webpack": {
+      "version": "5.76.1",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/eslint-scope": "^3.7.3",
+        "@types/estree": "^0.0.51",
+        "@webassemblyjs/ast": "1.11.1",
+        "@webassemblyjs/wasm-edit": "1.11.1",
+        "@webassemblyjs/wasm-parser": "1.11.1",
+        "acorn": "^8.7.1",
+        "acorn-import-assertions": "^1.7.6",
+        "browserslist": "^4.14.5",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^5.10.0",
+        "es-module-lexer": "^0.9.0",
+        "eslint-scope": "5.1.1",
+        "events": "^3.2.0",
+        "glob-to-regexp": "^0.4.1",
+        "graceful-fs": "^4.2.9",
+        "json-parse-even-better-errors": "^2.3.1",
+        "loader-runner": "^4.2.0",
+        "mime-types": "^2.1.27",
+        "neo-async": "^2.6.2",
+        "schema-utils": "^3.1.0",
+        "tapable": "^2.1.1",
+        "terser-webpack-plugin": "^5.1.3",
+        "watchpack": "^2.4.0",
+        "webpack-sources": "^3.2.3"
       },
-      "dependencies": {
-        "is-buffer": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
-          "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
-          "dev": true
-        },
-        "is-plain-obj": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
-          "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
-          "dev": true
+      "bin": {
+        "webpack": "bin/webpack.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependenciesMeta": {
+        "webpack-cli": {
+          "optional": true
         }
       }
     },
-    "union-value": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
-      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
-      "dev": true,
-      "requires": {
-        "arr-union": "^3.1.0",
-        "get-value": "^2.0.6",
-        "is-extendable": "^0.1.1",
-        "set-value": "^2.0.1"
-      }
-    },
-    "unique-filename": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
-      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+    "node_modules/webpack-dev-middleware": {
+      "version": "6.0.1",
       "dev": true,
-      "requires": {
-        "unique-slug": "^2.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "colorette": "^2.0.10",
+        "memfs": "^3.4.12",
+        "mime-types": "^2.1.31",
+        "range-parser": "^1.2.1",
+        "schema-utils": "^4.0.0"
+      },
+      "engines": {
+        "node": ">= 14.15.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.0.0"
       }
     },
-    "unique-slug": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
-      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+    "node_modules/webpack-dev-middleware/node_modules/mime-db": {
+      "version": "1.52.0",
       "dev": true,
-      "requires": {
-        "imurmurhash": "^0.1.4"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "unist-util-find-all-after": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz",
-      "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==",
+    "node_modules/webpack-dev-middleware/node_modules/mime-types": {
+      "version": "2.1.35",
       "dev": true,
-      "requires": {
-        "unist-util-is": "^4.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "unist-util-is": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
-      "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
-      "dev": true
-    },
-    "unist-util-stringify-position": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
-      "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
+    "node_modules/webpack-dev-server": {
+      "version": "4.11.1",
       "dev": true,
-      "requires": {
-        "@types/unist": "^2.0.2"
+      "license": "MIT",
+      "dependencies": {
+        "@types/bonjour": "^3.5.9",
+        "@types/connect-history-api-fallback": "^1.3.5",
+        "@types/express": "^4.17.13",
+        "@types/serve-index": "^1.9.1",
+        "@types/serve-static": "^1.13.10",
+        "@types/sockjs": "^0.3.33",
+        "@types/ws": "^8.5.1",
+        "ansi-html-community": "^0.0.8",
+        "bonjour-service": "^1.0.11",
+        "chokidar": "^3.5.3",
+        "colorette": "^2.0.10",
+        "compression": "^1.7.4",
+        "connect-history-api-fallback": "^2.0.0",
+        "default-gateway": "^6.0.3",
+        "express": "^4.17.3",
+        "graceful-fs": "^4.2.6",
+        "html-entities": "^2.3.2",
+        "http-proxy-middleware": "^2.0.3",
+        "ipaddr.js": "^2.0.1",
+        "open": "^8.0.9",
+        "p-retry": "^4.5.0",
+        "rimraf": "^3.0.2",
+        "schema-utils": "^4.0.0",
+        "selfsigned": "^2.1.1",
+        "serve-index": "^1.9.1",
+        "sockjs": "^0.3.24",
+        "spdy": "^4.0.2",
+        "webpack-dev-middleware": "^5.3.1",
+        "ws": "^8.4.2"
+      },
+      "bin": {
+        "webpack-dev-server": "bin/webpack-dev-server.js"
+      },
+      "engines": {
+        "node": ">= 12.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^4.37.0 || ^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "webpack-cli": {
+          "optional": true
+        }
       }
     },
-    "universalify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-      "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
-      "dev": true
-    },
-    "unix-crypt-td-js": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz",
-      "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==",
-      "dev": true
-    },
-    "unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
-      "dev": true
-    },
-    "unraw": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/unraw/-/unraw-2.0.1.tgz",
-      "integrity": "sha512-tdOvLfRzHolwYcHS6HIX860MkK9LQ4+oLuNwFYL7bpgTEO64PZrcQxkisgwJYCfF8sKiWLwwu1c83DvMkbefIQ=="
-    },
-    "unset-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-      "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
+    "node_modules/webpack-dev-server/node_modules/body-parser": {
+      "version": "1.20.1",
       "dev": true,
-      "requires": {
-        "has-value": "^0.3.1",
-        "isobject": "^3.0.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "has-value": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-          "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
-          "dev": true,
-          "requires": {
-            "get-value": "^2.0.3",
-            "has-values": "^0.1.4",
-            "isobject": "^2.0.0"
-          },
-          "dependencies": {
-            "isobject": {
-              "version": "2.1.0",
-              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-              "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
-              "dev": true,
-              "requires": {
-                "isarray": "1.0.0"
-              }
-            }
-          }
-        },
-        "has-values": {
-          "version": "0.1.4",
-          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-          "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
-          "dev": true
-        }
+        "bytes": "3.1.2",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "on-finished": "2.4.1",
+        "qs": "6.11.0",
+        "raw-body": "2.5.1",
+        "type-is": "~1.6.18",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8",
+        "npm": "1.2.8000 || >= 1.4.16"
       }
     },
-    "untildify": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
-      "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
-      "dev": true
-    },
-    "update-browserslist-db": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
-      "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
-      "requires": {
-        "escalade": "^3.1.1",
-        "picocolors": "^1.0.0"
+    "node_modules/webpack-dev-server/node_modules/bytes": {
+      "version": "3.1.2",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "upper-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
-      "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==",
-      "dev": true
-    },
-    "uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+    "node_modules/webpack-dev-server/node_modules/content-disposition": {
+      "version": "0.5.4",
       "dev": true,
-      "requires": {
-        "punycode": "^2.1.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "punycode": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
-          "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
-          "dev": true
-        }
-      }
-    },
-    "urix": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-      "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
-      "dev": true
-    },
-    "url": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
-      "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
-      "requires": {
-        "punycode": "1.3.2",
-        "querystring": "0.2.0"
+        "safe-buffer": "5.2.1"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "url-parse": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
-      "requires": {
-        "querystringify": "^2.1.1",
-        "requires-port": "^1.0.0"
+    "node_modules/webpack-dev-server/node_modules/cookie": {
+      "version": "0.5.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "use": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
-      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
-      "dev": true
-    },
-    "util": {
-      "version": "0.10.4",
-      "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
-      "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+    "node_modules/webpack-dev-server/node_modules/debug": {
+      "version": "2.6.9",
       "dev": true,
-      "requires": {
-        "inherits": "2.0.3"
-      },
+      "license": "MIT",
       "dependencies": {
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-          "dev": true
-        }
+        "ms": "2.0.0"
       }
     },
-    "util-arity": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz",
-      "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==",
-      "dev": true
-    },
-    "util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
-    },
-    "utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
-      "dev": true
-    },
-    "uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-      "dev": true
-    },
-    "v8-compile-cache": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
-      "dev": true
-    },
-    "v8-to-istanbul": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz",
-      "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==",
+    "node_modules/webpack-dev-server/node_modules/depd": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "@jridgewell/trace-mapping": "^0.3.12",
-        "@types/istanbul-lib-coverage": "^2.0.1",
-        "convert-source-map": "^1.6.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+    "node_modules/webpack-dev-server/node_modules/express": {
+      "version": "4.18.2",
       "dev": true,
-      "requires": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "accepts": "~1.3.8",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.20.1",
+        "content-disposition": "0.5.4",
+        "content-type": "~1.0.4",
+        "cookie": "0.5.0",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "1.2.0",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.7",
+        "qs": "6.11.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.2.1",
+        "send": "0.18.0",
+        "serve-static": "1.15.0",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.10.0"
       }
     },
-    "validate-npm-package-name": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz",
-      "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==",
+    "node_modules/webpack-dev-server/node_modules/finalhandler": {
+      "version": "1.2.0",
       "dev": true,
-      "requires": {
-        "builtins": "^1.0.3"
+      "license": "MIT",
+      "dependencies": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "2.4.1",
+        "parseurl": "~1.3.3",
+        "statuses": "2.0.1",
+        "unpipe": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
-      "dev": true
-    },
-    "verror": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
-      "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+    "node_modules/webpack-dev-server/node_modules/http-errors": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "core-util-is": "1.0.2",
-        "extsprintf": "^1.2.0"
-      },
+      "license": "MIT",
       "dependencies": {
-        "core-util-is": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-          "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
-          "dev": true
-        }
+        "depd": "2.0.0",
+        "inherits": "2.0.4",
+        "setprototypeof": "1.2.0",
+        "statuses": "2.0.1",
+        "toidentifier": "1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "vfile": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
-      "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
+    "node_modules/webpack-dev-server/node_modules/ipaddr.js": {
+      "version": "2.1.0",
       "dev": true,
-      "requires": {
-        "@types/unist": "^2.0.0",
-        "is-buffer": "^2.0.0",
-        "unist-util-stringify-position": "^2.0.0",
-        "vfile-message": "^2.0.0"
-      },
-      "dependencies": {
-        "is-buffer": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
-          "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
-          "dev": true
-        }
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10"
       }
     },
-    "vfile-message": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
-      "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
+    "node_modules/webpack-dev-server/node_modules/mime-db": {
+      "version": "1.52.0",
       "dev": true,
-      "requires": {
-        "@types/unist": "^2.0.0",
-        "unist-util-stringify-position": "^2.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "vm-browserify": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
-      "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
-      "dev": true
-    },
-    "w3c-hr-time": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
-      "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+    "node_modules/webpack-dev-server/node_modules/mime-types": {
+      "version": "2.1.35",
       "dev": true,
-      "requires": {
-        "browser-process-hrtime": "^1.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "w3c-xmlserializer": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
-      "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
+    "node_modules/webpack-dev-server/node_modules/ms": {
+      "version": "2.0.0",
       "dev": true,
-      "requires": {
-        "domexception": "^1.0.1",
-        "webidl-conversions": "^4.0.2",
-        "xml-name-validator": "^3.0.0"
-      },
+      "license": "MIT"
+    },
+    "node_modules/webpack-dev-server/node_modules/on-finished": {
+      "version": "2.4.1",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "webidl-conversions": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-          "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-          "dev": true
-        }
+        "ee-first": "1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "wait-on": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz",
-      "integrity": "sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==",
+    "node_modules/webpack-dev-server/node_modules/qs": {
+      "version": "6.11.0",
       "dev": true,
-      "requires": {
-        "axios": "^0.21.1",
-        "joi": "^17.3.0",
-        "lodash": "^4.17.21",
-        "minimist": "^1.2.5",
-        "rxjs": "^6.6.3"
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "side-channel": "^1.0.4"
       },
-      "dependencies": {
-        "axios": {
-          "version": "0.21.4",
-          "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
-          "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
-          "dev": true,
-          "requires": {
-            "follow-redirects": "^1.14.0"
-          }
-        }
+      "engines": {
+        "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "walker": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
-      "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
+    "node_modules/webpack-dev-server/node_modules/raw-body": {
+      "version": "2.5.1",
       "dev": true,
-      "requires": {
-        "makeerror": "1.0.12"
+      "license": "MIT",
+      "dependencies": {
+        "bytes": "3.1.2",
+        "http-errors": "2.0.0",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "watchify": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/watchify/-/watchify-4.0.0.tgz",
-      "integrity": "sha512-2Z04dxwoOeNxa11qzWumBTgSAohTC0+ScuY7XMenPnH+W2lhTcpEOJP4g2EIG/SWeLadPk47x++Yh+8BqPM/lA==",
+    "node_modules/webpack-dev-server/node_modules/serve-static": {
+      "version": "1.15.0",
       "dev": true,
-      "requires": {
-        "anymatch": "^3.1.0",
-        "browserify": "^17.0.0",
-        "chokidar": "^3.4.0",
-        "defined": "^1.0.0",
-        "outpipe": "^1.1.0",
-        "through2": "^4.0.2",
-        "xtend": "^4.0.2"
-      },
+      "license": "MIT",
       "dependencies": {
-        "browser-resolve": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz",
-          "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==",
-          "dev": true,
-          "requires": {
-            "resolve": "^1.17.0"
-          }
-        },
-        "browserify": {
-          "version": "17.0.0",
-          "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz",
-          "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==",
-          "dev": true,
-          "requires": {
-            "JSONStream": "^1.0.3",
-            "assert": "^1.4.0",
-            "browser-pack": "^6.0.1",
-            "browser-resolve": "^2.0.0",
-            "browserify-zlib": "~0.2.0",
-            "buffer": "~5.2.1",
-            "cached-path-relative": "^1.0.0",
-            "concat-stream": "^1.6.0",
-            "console-browserify": "^1.1.0",
-            "constants-browserify": "~1.0.0",
-            "crypto-browserify": "^3.0.0",
-            "defined": "^1.0.0",
-            "deps-sort": "^2.0.1",
-            "domain-browser": "^1.2.0",
-            "duplexer2": "~0.1.2",
-            "events": "^3.0.0",
-            "glob": "^7.1.0",
-            "has": "^1.0.0",
-            "htmlescape": "^1.1.0",
-            "https-browserify": "^1.0.0",
-            "inherits": "~2.0.1",
-            "insert-module-globals": "^7.2.1",
-            "labeled-stream-splicer": "^2.0.0",
-            "mkdirp-classic": "^0.5.2",
-            "module-deps": "^6.2.3",
-            "os-browserify": "~0.3.0",
-            "parents": "^1.0.1",
-            "path-browserify": "^1.0.0",
-            "process": "~0.11.0",
-            "punycode": "^1.3.2",
-            "querystring-es3": "~0.2.0",
-            "read-only-stream": "^2.0.0",
-            "readable-stream": "^2.0.2",
-            "resolve": "^1.1.4",
-            "shasum-object": "^1.0.0",
-            "shell-quote": "^1.6.1",
-            "stream-browserify": "^3.0.0",
-            "stream-http": "^3.0.0",
-            "string_decoder": "^1.1.1",
-            "subarg": "^1.0.0",
-            "syntax-error": "^1.1.1",
-            "through2": "^2.0.0",
-            "timers-browserify": "^1.0.1",
-            "tty-browserify": "0.0.1",
-            "url": "~0.11.0",
-            "util": "~0.12.0",
-            "vm-browserify": "^1.0.0",
-            "xtend": "^4.0.0"
-          },
-          "dependencies": {
-            "through2": {
-              "version": "2.0.5",
-              "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-              "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-              "dev": true,
-              "requires": {
-                "readable-stream": "~2.3.6",
-                "xtend": "~4.0.1"
-              }
-            }
-          }
-        },
-        "buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
-          "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==",
-          "dev": true,
-          "requires": {
-            "base64-js": "^1.0.2",
-            "ieee754": "^1.1.4"
-          }
-        },
-        "stream-browserify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
-          "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
-          "dev": true,
-          "requires": {
-            "inherits": "~2.0.4",
-            "readable-stream": "^3.5.0"
-          },
-          "dependencies": {
-            "readable-stream": {
-              "version": "3.6.2",
-              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-              "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-              "dev": true,
-              "requires": {
-                "inherits": "^2.0.3",
-                "string_decoder": "^1.1.1",
-                "util-deprecate": "^1.0.1"
-              }
-            }
-          }
-        },
-        "through2": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
-          "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
-          "dev": true,
-          "requires": {
-            "readable-stream": "3"
-          },
-          "dependencies": {
-            "readable-stream": {
-              "version": "3.6.2",
-              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-              "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-              "dev": true,
-              "requires": {
-                "inherits": "^2.0.3",
-                "string_decoder": "^1.1.1",
-                "util-deprecate": "^1.0.1"
-              }
-            }
-          }
-        },
-        "util": {
-          "version": "0.12.5",
-          "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
-          "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "is-arguments": "^1.0.4",
-            "is-generator-function": "^1.0.7",
-            "is-typed-array": "^1.1.3",
-            "which-typed-array": "^1.1.2"
-          }
-        }
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.18.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "watchpack": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
-      "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+    "node_modules/webpack-dev-server/node_modules/setprototypeof": {
+      "version": "1.2.0",
       "dev": true,
-      "requires": {
-        "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.1.2"
-      }
+      "license": "ISC"
     },
-    "wbuf": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
-      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+    "node_modules/webpack-dev-server/node_modules/statuses": {
+      "version": "2.0.1",
       "dev": true,
-      "requires": {
-        "minimalistic-assert": "^1.0.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8"
       }
     },
-    "wcwidth": {
+    "node_modules/webpack-dev-server/node_modules/toidentifier": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
-      "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
       "dev": true,
-      "requires": {
-        "defaults": "^1.0.3"
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.6"
       }
     },
-    "web-streams-polyfill": {
-      "version": "4.0.0-beta.3",
-      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
-      "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug=="
-    },
-    "web-tree-sitter": {
-      "version": "0.20.7",
-      "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.7.tgz",
-      "integrity": "sha512-flC9JJmTII9uAeeYpWF8hxDJ7bfY+leldQryetll8Nv4WgI+MXc6h7TiyAZASWl9uC9TvmfdgOjZn1DAQecb3A==",
-      "optional": true
-    },
-    "webidl-conversions": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
-    },
-    "webpack": {
-      "version": "5.76.1",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz",
-      "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==",
+    "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": {
+      "version": "5.3.3",
       "dev": true,
-      "requires": {
-        "@types/eslint-scope": "^3.7.3",
-        "@types/estree": "^0.0.51",
-        "@webassemblyjs/ast": "1.11.1",
-        "@webassemblyjs/wasm-edit": "1.11.1",
-        "@webassemblyjs/wasm-parser": "1.11.1",
-        "acorn": "^8.7.1",
-        "acorn-import-assertions": "^1.7.6",
-        "browserslist": "^4.14.5",
-        "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.10.0",
-        "es-module-lexer": "^0.9.0",
-        "eslint-scope": "5.1.1",
-        "events": "^3.2.0",
-        "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.2.9",
-        "json-parse-even-better-errors": "^2.3.1",
-        "loader-runner": "^4.2.0",
-        "mime-types": "^2.1.27",
-        "neo-async": "^2.6.2",
-        "schema-utils": "^3.1.0",
-        "tapable": "^2.1.1",
-        "terser-webpack-plugin": "^5.1.3",
-        "watchpack": "^2.4.0",
-        "webpack-sources": "^3.2.3"
-      },
+      "license": "MIT",
       "dependencies": {
-        "ajv": {
-          "version": "6.12.6",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-          "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
-        "json-schema-traverse": {
-          "version": "0.4.1",
-          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-          "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz",
-          "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==",
-          "dev": true,
-          "requires": {
-            "@types/json-schema": "^7.0.8",
-            "ajv": "^6.12.5",
-            "ajv-keywords": "^3.5.2"
-          }
-        }
-      }
-    },
-    "webpack-dev-middleware": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz",
-      "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==",
-      "dev": true,
-      "requires": {
         "colorette": "^2.0.10",
-        "memfs": "^3.2.2",
+        "memfs": "^3.4.3",
         "mime-types": "^2.1.31",
         "range-parser": "^1.2.1",
         "schema-utils": "^4.0.0"
       },
-      "dependencies": {
-        "ajv-keywords": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-          "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.3"
-          }
-        },
-        "schema-utils": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz",
-          "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==",
-          "dev": true,
-          "requires": {
-            "@types/json-schema": "^7.0.9",
-            "ajv": "^8.9.0",
-            "ajv-formats": "^2.1.1",
-            "ajv-keywords": "^5.1.0"
-          }
-        }
+      "engines": {
+        "node": ">= 12.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^4.0.0 || ^5.0.0"
       }
     },
-    "webpack-dev-server": {
-      "version": "4.7.3",
-      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz",
-      "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==",
+    "node_modules/webpack-dev-server/node_modules/ws": {
+      "version": "8.14.2",
       "dev": true,
-      "requires": {
-        "@types/bonjour": "^3.5.9",
-        "@types/connect-history-api-fallback": "^1.3.5",
-        "@types/serve-index": "^1.9.1",
-        "@types/sockjs": "^0.3.33",
-        "@types/ws": "^8.2.2",
-        "ansi-html-community": "^0.0.8",
-        "bonjour": "^3.5.0",
-        "chokidar": "^3.5.2",
-        "colorette": "^2.0.10",
-        "compression": "^1.7.4",
-        "connect-history-api-fallback": "^1.6.0",
-        "default-gateway": "^6.0.3",
-        "del": "^6.0.0",
-        "express": "^4.17.1",
-        "graceful-fs": "^4.2.6",
-        "html-entities": "^2.3.2",
-        "http-proxy-middleware": "^2.0.0",
-        "ipaddr.js": "^2.0.1",
-        "open": "^8.0.9",
-        "p-retry": "^4.5.0",
-        "portfinder": "^1.0.28",
-        "schema-utils": "^4.0.0",
-        "selfsigned": "^2.0.0",
-        "serve-index": "^1.9.1",
-        "sockjs": "^0.3.21",
-        "spdy": "^4.0.2",
-        "strip-ansi": "^7.0.0",
-        "webpack-dev-middleware": "^5.3.0",
-        "ws": "^8.1.0"
-      },
-      "dependencies": {
-        "ajv-keywords": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-          "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-          "dev": true,
-          "requires": {
-            "fast-deep-equal": "^3.1.3"
-          }
-        },
-        "ansi-regex": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-          "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
-          "dev": true
-        },
-        "schema-utils": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz",
-          "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==",
-          "dev": true,
-          "requires": {
-            "@types/json-schema": "^7.0.9",
-            "ajv": "^8.9.0",
-            "ajv-formats": "^2.1.1",
-            "ajv-keywords": "^5.1.0"
-          }
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.0.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": ">=5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
         },
-        "strip-ansi": {
-          "version": "7.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
-          "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^6.0.1"
-          }
+        "utf-8-validate": {
+          "optional": true
         }
       }
     },
-    "webpack-merge": {
+    "node_modules/webpack-merge": {
       "version": "5.8.0",
-      "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
-      "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "clone-deep": "^4.0.1",
         "wildcard": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10.0.0"
       }
     },
-    "webpack-sources": {
+    "node_modules/webpack-sources": {
       "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
-      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
-      "dev": true
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10.13.0"
+      }
     },
-    "webpack-subresource-integrity": {
+    "node_modules/webpack-subresource-integrity": {
       "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz",
-      "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "typed-assert": "^1.0.8"
+      },
+      "engines": {
+        "node": ">= 12"
+      },
+      "peerDependencies": {
+        "html-webpack-plugin": ">= 5.0.0-beta.1 < 6",
+        "webpack": "^5.12.0"
+      },
+      "peerDependenciesMeta": {
+        "html-webpack-plugin": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/webpack/node_modules/acorn": {
+      "version": "8.10.0",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/webpack/node_modules/ajv": {
+      "version": "6.12.6",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
+      }
+    },
+    "node_modules/webpack/node_modules/ajv-keywords": {
+      "version": "3.5.2",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "ajv": "^6.9.1"
+      }
+    },
+    "node_modules/webpack/node_modules/events": {
+      "version": "3.3.0",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
+    "node_modules/webpack/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/webpack/node_modules/schema-utils": {
+      "version": "3.3.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/json-schema": "^7.0.8",
+        "ajv": "^6.12.5",
+        "ajv-keywords": "^3.5.2"
+      },
+      "engines": {
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
       }
     },
-    "websocket-driver": {
+    "node_modules/websocket-driver": {
       "version": "0.7.4",
-      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
-      "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
       "dev": true,
-      "requires": {
+      "license": "Apache-2.0",
+      "dependencies": {
         "http-parser-js": ">=0.5.1",
         "safe-buffer": ">=5.1.0",
         "websocket-extensions": ">=0.1.1"
+      },
+      "engines": {
+        "node": ">=0.8.0"
       }
     },
-    "websocket-extensions": {
+    "node_modules/websocket-extensions": {
       "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
-      "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
-      "dev": true
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=0.8.0"
+      }
     },
-    "whatwg-encoding": {
+    "node_modules/whatwg-encoding": {
       "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
-      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "iconv-lite": "0.4.24"
       }
     },
-    "whatwg-fetch": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz",
-      "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==",
-      "dev": true
+    "node_modules/whatwg-fetch": {
+      "version": "3.6.19",
+      "dev": true,
+      "license": "MIT"
     },
-    "whatwg-mimetype": {
+    "node_modules/whatwg-mimetype": {
       "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
-      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "whatwg-url": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-      "requires": {
-        "tr46": "~0.0.3",
-        "webidl-conversions": "^3.0.0"
+    "node_modules/whatwg-url": {
+      "version": "7.1.0",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "lodash.sortby": "^4.7.0",
+        "tr46": "^1.0.1",
+        "webidl-conversions": "^4.0.2"
       }
     },
-    "which": {
+    "node_modules/which": {
       "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
       "dev": true,
-      "requires": {
+      "license": "ISC",
+      "dependencies": {
         "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "which-boxed-primitive": {
+    "node_modules/which-boxed-primitive": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "is-bigint": "^1.0.1",
         "is-boolean-object": "^1.1.0",
         "is-number-object": "^1.0.4",
         "is-string": "^1.0.5",
         "is-symbol": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "which-module": {
+    "node_modules/which-module": {
       "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
-      "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
-      "dev": true
+      "dev": true,
+      "license": "ISC"
     },
-    "which-typed-array": {
-      "version": "1.1.9",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
-      "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+    "node_modules/which-typed-array": {
+      "version": "1.1.11",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "available-typed-arrays": "^1.0.5",
         "call-bind": "^1.0.2",
         "for-each": "^0.3.3",
         "gopd": "^1.0.1",
-        "has-tostringtag": "^1.0.0",
-        "is-typed-array": "^1.1.10"
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "wide-align": {
+    "node_modules/wide-align": {
       "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
-      "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
-      "requires": {
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
         "string-width": "^1.0.2 || 2 || 3 || 4"
       }
     },
-    "wildcard": {
+    "node_modules/wildcard": {
       "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
-      "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "windows-release": {
+    "node_modules/windows-release": {
       "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz",
-      "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "execa": "^4.0.2"
       },
-      "dependencies": {
-        "execa": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
-          "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^7.0.0",
-            "get-stream": "^5.0.0",
-            "human-signals": "^1.1.1",
-            "is-stream": "^2.0.0",
-            "merge-stream": "^2.0.0",
-            "npm-run-path": "^4.0.0",
-            "onetime": "^5.1.0",
-            "signal-exit": "^3.0.2",
-            "strip-final-newline": "^2.0.0"
-          }
-        },
-        "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"
-          }
-        },
-        "human-signals": {
-          "version": "1.1.1",
-          "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
-          "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
-          "dev": true
-        }
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "word-wrap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-      "dev": true
+    "node_modules/word-wrap": {
+      "version": "1.2.5",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "wordwrap": {
+    "node_modules/wordwrap": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
-      "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "wrap-ansi": {
+    "node_modules/wrap-ansi": {
       "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "ansi-styles": "^4.0.0",
         "string-width": "^4.1.0",
         "strip-ansi": "^6.0.0"
       },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi-cjs": {
+      "name": "wrap-ansi",
+      "version": "7.0.0",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "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==",
-          "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=="
-        }
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
-    "wrappy": {
+    "node_modules/wrappy": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+      "license": "ISC"
     },
-    "write-file-atomic": {
+    "node_modules/write-file-atomic": {
       "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
-      "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
       "dev": true,
-      "requires": {
+      "license": "ISC",
+      "dependencies": {
         "imurmurhash": "^0.1.4",
         "signal-exit": "^3.0.7"
+      },
+      "engines": {
+        "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
       }
     },
-    "ws": {
-      "version": "8.13.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
-      "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
-      "dev": true
+    "node_modules/ws": {
+      "version": "7.5.9",
+      "dev": true,
+      "license": "MIT",
+      "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
+        }
+      }
     },
-    "xliff": {
+    "node_modules/xliff": {
       "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/xliff/-/xliff-4.4.0.tgz",
-      "integrity": "sha512-SVzjB3hTHJ/CbsIJtbQg2BAxhvVJqbZ3OluMS7u6JnCbf0/twuj2KASghYHiKHz2sJqZo42dGjydp0URKmWWoA==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "xml-js": "1.6.11"
+      },
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "xml": {
+    "node_modules/xml": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
-      "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw=="
+      "license": "MIT"
     },
-    "xml-but-prettier": {
+    "node_modules/xml-but-prettier": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz",
-      "integrity": "sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==",
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "repeat-string": "^1.5.2"
       }
     },
-    "xml-js": {
+    "node_modules/xml-js": {
       "version": "1.6.11",
-      "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz",
-      "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "sax": "^1.2.4"
+      },
+      "bin": {
+        "xml-js": "bin/cli.js"
       }
     },
-    "xml-name-validator": {
+    "node_modules/xml-name-validator": {
       "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
-      "dev": true
+      "dev": true,
+      "license": "Apache-2.0"
     },
-    "xmlchars": {
+    "node_modules/xmlchars": {
       "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
-      "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT"
     },
-    "xmldoc": {
+    "node_modules/xmldoc": {
       "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz",
-      "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "sax": "^1.2.4"
       }
     },
-    "xtend": {
+    "node_modules/xtend": {
       "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.4"
+      }
     },
-    "y18n": {
+    "node_modules/y18n": {
       "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
-      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
     },
-    "yallist": {
+    "node_modules/yallist": {
       "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
-      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+      "license": "ISC"
     },
-    "yaml": {
+    "node_modules/yaml": {
       "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
-      "dev": true
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">= 6"
+      }
     },
-    "yargs": {
-      "version": "17.7.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
-      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
-      "requires": {
+    "node_modules/yargs": {
+      "version": "17.6.2",
+      "license": "MIT",
+      "dependencies": {
         "cliui": "^8.0.1",
         "escalade": "^3.1.1",
         "get-caller-file": "^2.0.5",
         "string-width": "^4.2.3",
         "y18n": "^5.0.5",
         "yargs-parser": "^21.1.1"
+      },
+      "engines": {
+        "node": ">=12"
       }
     },
-    "yargs-parser": {
+    "node_modules/yargs-parser": {
+      "version": "20.0.0",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs/node_modules/yargs-parser": {
       "version": "21.1.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
-      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
     },
-    "yauzl": {
+    "node_modules/yauzl": {
       "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
       "dev": true,
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "buffer-crc32": "~0.2.3",
         "fd-slicer": "~1.1.0"
       }
     },
-    "yn": {
+    "node_modules/yn": {
       "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
-      "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
-      "dev": true
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "yocto-queue": {
+    "node_modules/yocto-queue": {
       "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-      "dev": true
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "zenscroll": {
+    "node_modules/zenscroll": {
       "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/zenscroll/-/zenscroll-4.0.2.tgz",
-      "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg=="
+      "license": "Unlicense"
     },
-    "zone.js": {
+    "node_modules/zone.js": {
       "version": "0.11.8",
-      "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz",
-      "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==",
-      "requires": {
+      "license": "MIT",
+      "dependencies": {
         "tslib": "^2.3.0"
       }
     },
-    "zwitch": {
+    "node_modules/zwitch": {
       "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
-      "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
-      "dev": true
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
     }
   }
 }
index e55cb39bc0434f41ec2a428b8055589ba705dca8..3205888f570823469dd3c00eaa09301417d94b64 100644 (file)
   },
   "private": true,
   "dependencies": {
-    "@angular/animations": "13.3.11",
-    "@angular/common": "13.3.11",
-    "@angular/compiler": "13.3.11",
-    "@angular/core": "13.3.11",
-    "@angular/forms": "13.3.11",
-    "@angular/localize": "13.3.11",
-    "@angular/platform-browser": "13.3.11",
-    "@angular/platform-browser-dynamic": "13.3.11",
-    "@angular/router": "13.3.11",
+    "@angular/animations": "15.2.9",
+    "@angular/common": "15.2.9",
+    "@angular/compiler": "15.2.9",
+    "@angular/core": "15.2.9",
+    "@angular/forms": "15.2.9",
+    "@angular/localize": "15.2.9",
+    "@angular/platform-browser": "15.2.9",
+    "@angular/platform-browser-dynamic": "15.2.9",
+    "@angular/router": "15.2.9",
     "@circlon/angular-tree-component": "10.0.0",
-    "@ng-bootstrap/ng-bootstrap": "12.1.2",
+    "@ng-bootstrap/ng-bootstrap": "14.2.0",
     "@ngx-formly/bootstrap": "6.1.1",
     "@ngx-formly/core": "6.1.1",
     "@popperjs/core": "2.10.2",
     "@swimlane/ngx-datatable": "18.0.0",
     "@types/file-saver": "2.0.1",
     "async-mutex": "0.2.4",
-    "bootstrap": "5.0.0",
+    "bootstrap": "5.2.3",
     "chart.js": "2.9.4",
     "detect-browser": "5.2.0",
     "file-saver": "2.0.2",
@@ -72,7 +72,7 @@
     "ng-click-outside": "7.0.0",
     "ng2-charts": "2.4.2",
     "ngx-pipe-function": "1.0.0",
-    "ngx-toastr": "14.3.0",
+    "ngx-toastr": "17.0.2",
     "rxjs": "6.6.3",
     "simplebar-angular": "2.3.6",
     "swagger-ui": "4.12.0",
     "zone.js": "0.11.8"
   },
   "devDependencies": {
-    "@angular-devkit/build-angular": "13.3.11",
+    "@angular-devkit/build-angular": "15.2.9",
     "@angular-eslint/builder": "13.5.0",
     "@angular-eslint/eslint-plugin": "13.5.0",
     "@angular-eslint/eslint-plugin-template": "13.5.0",
     "@angular-eslint/schematics": "13.5.0",
     "@angular-eslint/template-parser": "13.5.0",
-    "@angular/cli": "13.3.9",
-    "@angular/compiler-cli": "13.3.11",
-    "@angular/language-service": "13.3.11",
+    "@angular/cli": "15.2.9",
+    "@angular/compiler-cli": "15.2.9",
+    "@angular/language-service": "15.2.9",
     "@applitools/eyes-cypress": "3.22.5",
-    "@apteco/ngth": "1.5.0",
     "@compodoc/compodoc": "1.1.18",
     "@cypress/browserify-preprocessor": "3.0.2",
     "@types/brace-expansion": "1.1.0",
     "@types/cypress-cucumber-preprocessor": "4.0.1",
-    "@types/jest": "28.1.3",
+    "@types/jest": "29.5.4",
     "@types/lodash": "4.14.161",
-    "@types/node": "12.12.62",
+    "@types/node": "18.17.12",
     "@types/swagger-ui": "3.52.0",
     "@typescript-eslint/eslint-plugin": "5.27.1",
     "@typescript-eslint/parser": "5.27.1",
     "axe-core": "4.4.3",
-    "cypress": "10.11.0",
-    "cypress-axe": "0.14.0",
+    "cypress": "12.17.4",
+    "cypress-axe": "1.5.0",
     "cypress-cucumber-preprocessor": "4.3.1",
     "cypress-iframe": "1.0.1",
     "cypress-multi-reporters": "1.5.0",
     "htmllint-cli": "0.0.7",
     "identity-obj-proxy": "3.0.0",
     "isomorphic-form-data": "2.0.0",
-    "jest": "28.1.3",
+    "jest": "29.6.4",
     "jest-canvas-mock": "2.4.0",
     "jest-jasmine2": "28.1.3",
-    "jest-preset-angular": "12.0.0",
+    "jest-preset-angular": "13.1.1",
     "jest-silent-reporter": "0.5.0",
     "mocha-junit-reporter": "2.1.0",
     "ng-mocks": "14.3.0",
     "table": "6.8.0",
     "transifex-i18ntool": "1.1.0",
     "ts-node": "9.0.0",
-    "typescript": "4.6.4"
+    "typescript": "4.9.5"
   },
   "cypress-cucumber-preprocessor": {
     "stepDefinitions": "cypress/e2e/common"
index f15a6b2faf9014ddaa236f1d7f419e1525ab3405..63a58d8ee203a6fcb9f0e587afcb0bb879245cb2 100644 (file)
@@ -45,6 +45,9 @@ import { ChangePasswordGuardService } from './shared/services/change-password-gu
 import { FeatureTogglesGuardService } from './shared/services/feature-toggles-guard.service';
 import { ModuleStatusGuardService } from './shared/services/module-status-guard.service';
 import { NoSsoGuardService } from './shared/services/no-sso-guard.service';
+import { CephfsVolumeFormComponent } from './ceph/cephfs/cephfs-form/cephfs-form.component';
+import { UpgradeComponent } from './ceph/cluster/upgrade/upgrade.component';
+import { UpgradeProgressComponent } from './ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component';
 
 @Injectable()
 export class PerformanceCounterBreadcrumbsResolver extends BreadcrumbsResolver {
@@ -282,6 +285,32 @@ const routes: Routes = [
           }
         ]
       },
+      {
+        path: 'upgrade',
+        canActivate: [ModuleStatusGuardService],
+        data: {
+          moduleStatusGuardConfig: {
+            uiApiPath: 'orchestrator',
+            redirectTo: 'error',
+            backend: 'cephadm',
+            section: 'orch',
+            section_info: 'Orchestrator',
+            header: 'Orchestrator is not available'
+          },
+          breadcrumbs: 'Cluster/Upgrade'
+        },
+        children: [
+          {
+            path: '',
+            component: UpgradeComponent
+          },
+          {
+            path: 'progress',
+            component: UpgradeProgressComponent,
+            data: { breadcrumbs: 'Progress' }
+          }
+        ]
+      },
       {
         path: 'perf_counters/:type/:id',
         component: PerformanceCounterComponent,
@@ -322,14 +351,26 @@ const routes: Routes = [
       // File Systems
       {
         path: 'cephfs',
-        component: CephfsListComponent,
         canActivate: [FeatureTogglesGuardService],
-        data: { breadcrumbs: 'File Systems' }
+        data: { breadcrumbs: 'File Systems' },
+        children: [
+          { path: '', component: CephfsListComponent },
+          {
+            path: URLVerbs.CREATE,
+            component: CephfsVolumeFormComponent,
+            data: { breadcrumbs: ActionLabels.CREATE }
+          },
+          {
+            path: `${URLVerbs.EDIT}/:name`,
+            component: CephfsVolumeFormComponent,
+            data: { breadcrumbs: ActionLabels.EDIT }
+          }
+        ]
       },
       // Object Gateway
       {
         path: 'rgw',
-        canActivateChild: [FeatureTogglesGuardService, ModuleStatusGuardService],
+        canActivate: [FeatureTogglesGuardService, ModuleStatusGuardService],
         data: {
           moduleStatusGuardConfig: {
             uiApiPath: 'rgw',
@@ -416,8 +457,7 @@ const routes: Routes = [
   imports: [
     RouterModule.forRoot(routes, {
       useHash: true,
-      preloadingStrategy: PreloadAllModules,
-      relativeLinkResolution: 'legacy'
+      preloadingStrategy: PreloadAllModules
     })
   ],
   exports: [RouterModule],
index fbbd28b202b95447431f7c8f81ca7ae692c5a572..52b1aa79bc052cac2e5c938dd3e1cecb7048db67 100644 (file)
@@ -21,10 +21,10 @@ export class IscsiSettingComponent implements OnInit {
   ngOnInit() {
     const validators: ValidatorFn[] = [];
     if ('min' in this.limits) {
-      validators.push(Validators.min(this.limits['min']));
+      validators.push(Validators.min(Number(this.limits['min'])));
     }
     if ('max' in this.limits) {
-      validators.push(Validators.max(this.limits['max']));
+      validators.push(Validators.max(Number(this.limits['max'])));
     }
     this.settingsForm.get(this.setting).setValidators(validators);
   }
index 68958cfaa2b01ed0bd4bc63fb079aebe5f850357..d20525fdd43d98bad3bc4566ea0ff04278a018ff 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 
@@ -45,10 +45,10 @@ export class IscsiTargetDiscoveryModalComponent implements OnInit {
 
   createForm() {
     this.discoveryForm = new CdFormGroup({
-      user: new FormControl({ value: '', disabled: !this.hasPermission }),
-      password: new FormControl({ value: '', disabled: !this.hasPermission }),
-      mutual_user: new FormControl({ value: '', disabled: !this.hasPermission }),
-      mutual_password: new FormControl({ value: '', disabled: !this.hasPermission })
+      user: new UntypedFormControl({ value: '', disabled: !this.hasPermission }),
+      password: new UntypedFormControl({ value: '', disabled: !this.hasPermission }),
+      mutual_user: new UntypedFormControl({ value: '', disabled: !this.hasPermission }),
+      mutual_password: new UntypedFormControl({ value: '', disabled: !this.hasPermission })
     });
 
     CdValidators.validateIf(
index e993468c80d891368bd938e29637e1ae099d1b63..59aac44272851998114ac0b6009b701bc166b289 100644 (file)
@@ -167,7 +167,7 @@ describe('IscsiTargetFormComponent', () => {
     httpTesting.expectOne('ui-api/iscsi/settings').flush(SETTINGS);
     httpTesting.expectOne('ui-api/iscsi/portals').flush(PORTALS);
     httpTesting.expectOne('ui-api/iscsi/version').flush(VERSION);
-    httpTesting.expectOne('api/block/image?offset=0&limit=-1&search=&sort=+name').flush(RBD_LIST);
+    httpTesting.expectOne('api/block/image?offset=0&limit=-1&search=&sort=%2Bname').flush(RBD_LIST);
     httpTesting.expectOne('api/iscsi/target').flush(LIST_TARGET);
     httpTesting.verify();
   });
index ff77665ce98429fdc2a54588a90db1d460202cb0..21caa0b2e7035d22d897cb657eaf63b1646b36c3 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormArray, FormControl, Validators } from '@angular/forms';
+import { UntypedFormArray, UntypedFormControl, Validators } from '@angular/forms';
 import { ActivatedRoute, Router } from '@angular/router';
 
 import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
@@ -179,11 +179,11 @@ export class IscsiTargetFormComponent extends CdForm implements OnInit {
 
   createForm() {
     this.targetForm = new CdFormGroup({
-      target_iqn: new FormControl('iqn.2001-07.com.ceph:' + Date.now(), {
+      target_iqn: new UntypedFormControl('iqn.2001-07.com.ceph:' + Date.now(), {
         validators: [Validators.required, Validators.pattern(this.IQN_REGEX)]
       }),
-      target_controls: new FormControl({}),
-      portals: new FormControl([], {
+      target_controls: new UntypedFormControl({}),
+      portals: new UntypedFormControl([], {
         validators: [
           CdValidators.custom('minGateways', (value: any[]) => {
             const gateways = _.uniq(value.map((elem) => elem.split(':')[0]));
@@ -191,7 +191,7 @@ export class IscsiTargetFormComponent extends CdForm implements OnInit {
           })
         ]
       }),
-      disks: new FormControl([], {
+      disks: new UntypedFormControl([], {
         validators: [
           CdValidators.custom('dupLunId', (value: any[]) => {
             const lunIds = this.getLunIds(value);
@@ -203,17 +203,17 @@ export class IscsiTargetFormComponent extends CdForm implements OnInit {
           })
         ]
       }),
-      initiators: new FormArray([]),
-      groups: new FormArray([]),
-      acl_enabled: new FormControl(false)
+      initiators: new UntypedFormArray([]),
+      groups: new UntypedFormArray([]),
+      acl_enabled: new UntypedFormControl(false)
     });
     // Target level authentication was introduced in ceph-iscsi config v11
     if (this.cephIscsiConfigVersion > 10) {
       const authFormGroup = new CdFormGroup({
-        user: new FormControl(''),
-        password: new FormControl(''),
-        mutual_user: new FormControl(''),
-        mutual_password: new FormControl('')
+        user: new UntypedFormControl(''),
+        password: new UntypedFormControl(''),
+        mutual_user: new UntypedFormControl(''),
+        mutual_password: new UntypedFormControl('')
       });
       this.setAuthValidator(authFormGroup);
       this.targetForm.addControl('auth', authFormGroup);
@@ -285,7 +285,7 @@ export class IscsiTargetFormComponent extends CdForm implements OnInit {
 
   // Portals
   get portals() {
-    return this.targetForm.get('portals') as FormControl;
+    return this.targetForm.get('portals') as UntypedFormControl;
   }
 
   onPortalSelection() {
@@ -306,7 +306,7 @@ export class IscsiTargetFormComponent extends CdForm implements OnInit {
 
   // Images
   get disks() {
-    return this.targetForm.get('disks') as FormControl;
+    return this.targetForm.get('disks') as UntypedFormControl;
   }
 
   removeImage(index: number, image: string) {
@@ -412,12 +412,12 @@ export class IscsiTargetFormComponent extends CdForm implements OnInit {
 
   // Initiators
   get initiators() {
-    return this.targetForm.get('initiators') as FormArray;
+    return this.targetForm.get('initiators') as UntypedFormArray;
   }
 
   addInitiator() {
     const fg = new CdFormGroup({
-      client_iqn: new FormControl('', {
+      client_iqn: new UntypedFormControl('', {
         validators: [
           Validators.required,
           CdValidators.custom('notUnique', (client_iqn: string) => {
@@ -431,13 +431,13 @@ export class IscsiTargetFormComponent extends CdForm implements OnInit {
         ]
       }),
       auth: new CdFormGroup({
-        user: new FormControl(''),
-        password: new FormControl(''),
-        mutual_user: new FormControl(''),
-        mutual_password: new FormControl('')
+        user: new UntypedFormControl(''),
+        password: new UntypedFormControl(''),
+        mutual_user: new UntypedFormControl(''),
+        mutual_password: new UntypedFormControl('')
       }),
-      luns: new FormControl([]),
-      cdIsInGroup: new FormControl(false)
+      luns: new UntypedFormControl([]),
+      cdIsInGroup: new UntypedFormControl(false)
     });
 
     this.setAuthValidator(fg);
@@ -554,14 +554,14 @@ export class IscsiTargetFormComponent extends CdForm implements OnInit {
 
   // Groups
   get groups() {
-    return this.targetForm.get('groups') as FormArray;
+    return this.targetForm.get('groups') as UntypedFormArray;
   }
 
   addGroup() {
     const fg = new CdFormGroup({
-      group_id: new FormControl('', { validators: [Validators.required] }),
-      members: new FormControl([]),
-      disks: new FormControl([])
+      group_id: new UntypedFormControl('', { validators: [Validators.required] }),
+      members: new UntypedFormControl([]),
+      disks: new UntypedFormControl([])
     });
 
     this.groups.push(fg);
index e9c9c7d90daae3e8a2918383e58d3d027c668c2c..b16de82618bfe542b657c92f8d54bc1acc1eb097 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { AbstractControl, FormControl } from '@angular/forms';
+import { AbstractControl, UntypedFormControl } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -31,15 +31,15 @@ export class IscsiTargetImageSettingsModalComponent implements OnInit {
   ) {}
 
   ngOnInit() {
-    const fg: Record<string, FormControl> = {
-      backstore: new FormControl(this.imagesSettings[this.image]['backstore']),
-      lun: new FormControl(this.imagesSettings[this.image]['lun']),
-      wwn: new FormControl(this.imagesSettings[this.image]['wwn'])
+    const fg: Record<string, UntypedFormControl> = {
+      backstore: new UntypedFormControl(this.imagesSettings[this.image]['backstore']),
+      lun: new UntypedFormControl(this.imagesSettings[this.image]['lun']),
+      wwn: new UntypedFormControl(this.imagesSettings[this.image]['wwn'])
     };
     _.forEach(this.backstores, (backstore) => {
       const model = this.imagesSettings[this.image][backstore] || {};
       _.forIn(this.disk_default_controls[backstore], (_value, key) => {
-        fg[key] = new FormControl(model[key]);
+        fg[key] = new UntypedFormControl(model[key]);
       });
     });
 
index 36fdb9026c3a9b4e51d5d86c680bc9ad9771b242..2930c0ffc27863d222df1d87f328da3feabf1fd3 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormControl } from '@angular/forms';
+import { UntypedFormControl } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -14,7 +14,7 @@ import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
   styleUrls: ['./iscsi-target-iqn-settings-modal.component.scss']
 })
 export class IscsiTargetIqnSettingsModalComponent implements OnInit {
-  target_controls: FormControl;
+  target_controls: UntypedFormControl;
   target_default_controls: any;
   target_controls_limits: any;
 
@@ -27,9 +27,9 @@ export class IscsiTargetIqnSettingsModalComponent implements OnInit {
   ) {}
 
   ngOnInit() {
-    const fg: Record<string, FormControl> = {};
+    const fg: Record<string, UntypedFormControl> = {};
     _.forIn(this.target_default_controls, (_value, key) => {
-      fg[key] = new FormControl(this.target_controls.value[key]);
+      fg[key] = new UntypedFormControl(this.target_controls.value[key]);
     });
 
     this.settingsForm = new CdFormGroup(fg);
index 380b636c3b24dfa5a2a6415d610a1b9d9052c536..cbcf9fa0e7d51ed7f713f7c944366ef2c0e5541c 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';
+import { UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -36,16 +36,16 @@ export class BootstrapCreateModalComponent implements OnDestroy, OnInit {
 
   createForm() {
     this.createBootstrapForm = new CdFormGroup({
-      siteName: new FormControl('', {
+      siteName: new UntypedFormControl('', {
         validators: [Validators.required]
       }),
-      pools: new FormGroup(
+      pools: new UntypedFormGroup(
         {},
         {
           validators: [this.validatePools()]
         }
       ),
-      token: new FormControl('', {})
+      token: new UntypedFormControl('', {})
     });
   }
 
@@ -65,7 +65,7 @@ export class BootstrapCreateModalComponent implements OnDestroy, OnInit {
         return acc;
       }, []);
 
-      const poolsControl = this.createBootstrapForm.get('pools') as FormGroup;
+      const poolsControl = this.createBootstrapForm.get('pools') as UntypedFormGroup;
       _.each(this.pools, (pool) => {
         const poolName = pool['name'];
         const mirroring_disabled = pool['mirror_mode'] === 'disabled';
@@ -80,7 +80,7 @@ export class BootstrapCreateModalComponent implements OnDestroy, OnInit {
         } else {
           poolsControl.addControl(
             poolName,
-            new FormControl({ value: !mirroring_disabled, disabled: !mirroring_disabled })
+            new UntypedFormControl({ value: !mirroring_disabled, disabled: !mirroring_disabled })
           );
         }
       });
@@ -94,7 +94,7 @@ export class BootstrapCreateModalComponent implements OnDestroy, OnInit {
   }
 
   validatePools(): ValidatorFn {
-    return (poolsControl: FormGroup): { [key: string]: any } => {
+    return (poolsControl: UntypedFormGroup): { [key: string]: any } => {
       let checkedCount = 0;
       _.each(poolsControl.controls, (control) => {
         if (control.value === true) {
@@ -115,7 +115,7 @@ export class BootstrapCreateModalComponent implements OnDestroy, OnInit {
 
     let bootstrapPoolName = '';
     const poolNames: string[] = [];
-    const poolsControl = this.createBootstrapForm.get('pools') as FormGroup;
+    const poolsControl = this.createBootstrapForm.get('pools') as UntypedFormGroup;
     _.each(poolsControl.controls, (control, poolName) => {
       if (control.value === true) {
         bootstrapPoolName = poolName;
index d79096f6be6fea81ef934a762028d0f4d2ddda8e..5960abc1594f2e08e8c8a890ffbb3c6e18e1f8b6 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { FormControl, FormGroup, ValidatorFn, Validators } from '@angular/forms';
+import { UntypedFormControl, UntypedFormGroup, ValidatorFn, Validators } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -43,17 +43,17 @@ export class BootstrapImportModalComponent implements OnInit, OnDestroy {
 
   createForm() {
     this.importBootstrapForm = new CdFormGroup({
-      siteName: new FormControl('', {
+      siteName: new UntypedFormControl('', {
         validators: [Validators.required]
       }),
-      direction: new FormControl('rx-tx', {}),
-      pools: new FormGroup(
+      direction: new UntypedFormControl('rx-tx', {}),
+      pools: new UntypedFormGroup(
         {},
         {
           validators: [this.validatePools()]
         }
       ),
-      token: new FormControl('', {
+      token: new UntypedFormControl('', {
         validators: [Validators.required, this.validateToken()]
       })
     });
@@ -74,7 +74,7 @@ export class BootstrapImportModalComponent implements OnInit, OnDestroy {
         return acc;
       }, []);
 
-      const poolsControl = this.importBootstrapForm.get('pools') as FormGroup;
+      const poolsControl = this.importBootstrapForm.get('pools') as UntypedFormGroup;
       _.each(this.pools, (pool) => {
         const poolName = pool['name'];
         const mirroring_disabled = pool['mirror_mode'] === 'disabled';
@@ -89,7 +89,7 @@ export class BootstrapImportModalComponent implements OnInit, OnDestroy {
         } else {
           poolsControl.addControl(
             poolName,
-            new FormControl({ value: !mirroring_disabled, disabled: !mirroring_disabled })
+            new UntypedFormControl({ value: !mirroring_disabled, disabled: !mirroring_disabled })
           );
         }
       });
@@ -103,7 +103,7 @@ export class BootstrapImportModalComponent implements OnInit, OnDestroy {
   }
 
   validatePools(): ValidatorFn {
-    return (poolsControl: FormGroup): { [key: string]: any } => {
+    return (poolsControl: UntypedFormGroup): { [key: string]: any } => {
       let checkedCount = 0;
       _.each(poolsControl.controls, (control) => {
         if (control.value === true) {
@@ -120,7 +120,7 @@ export class BootstrapImportModalComponent implements OnInit, OnDestroy {
   }
 
   validateToken(): ValidatorFn {
-    return (token: FormControl): { [key: string]: any } => {
+    return (token: UntypedFormControl): { [key: string]: any } => {
       try {
         if (JSON.parse(atob(token.value))) {
           return null;
@@ -133,7 +133,7 @@ export class BootstrapImportModalComponent implements OnInit, OnDestroy {
   import() {
     const bootstrapPoolNames: string[] = [];
     const poolNames: string[] = [];
-    const poolsControl = this.importBootstrapForm.get('pools') as FormGroup;
+    const poolsControl = this.importBootstrapForm.get('pools') as UntypedFormGroup;
     _.each(poolsControl.controls, (control, poolName) => {
       if (control.value === true) {
         bootstrapPoolNames.push(poolName);
index 1a92315101170ff1648fd690738a3611c6671fcb..45056ab357036d3ed851ed57205ee1cdeddc3399 100644 (file)
                      [showValue]="true"></ngb-progressbar>
   </div>
 </ng-template>
+
+<ng-template #entriesBehindPrimaryTpl
+             let-row="row"
+             let-value="value">
+  <span *ngIf="row.mirror_mode === 'journal'">
+    {{ value }}
+  </span>
+  <span *ngIf="row.mirror_mode === 'snapshot'"
+        ngbTooltip="Not available with mirroring snapshot mode">-</span>
+</ng-template>
index babd46542e533c2f24169724e73d767b4321df70..c022f21c30e286908370bff0ef2b862ccdbb0576 100644 (file)
@@ -17,6 +17,8 @@ export class ImageListComponent implements OnInit, OnDestroy {
   syncTmpl: TemplateRef<any>;
   @ViewChild('progressTmpl', { static: true })
   progressTmpl: TemplateRef<any>;
+  @ViewChild('entriesBehindPrimaryTpl', { static: true })
+  entriesBehindPrimaryTpl: TemplateRef<any>;
 
   subs: Subscription;
 
@@ -66,7 +68,12 @@ export class ImageListComponent implements OnInit, OnDestroy {
         flexGrow: 2
       },
       { prop: 'bytes_per_second', name: $localize`Bytes per second`, flexGrow: 2 },
-      { prop: 'entries_behind_primary', name: $localize`Entries behind primary`, flexGrow: 2 }
+      {
+        prop: 'entries_behind_primary',
+        name: $localize`Entries behind primary`,
+        cellTemplate: this.entriesBehindPrimaryTpl,
+        flexGrow: 2
+      }
     ];
 
     this.image_ready.columns = [
index 8000751df5f671270d8bea6dd9fb770bd03bd4e9..ffc28127fd07dbb5e3443ab9c9730c4c8c643966 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { FormControl } from '@angular/forms';
+import { UntypedFormControl } from '@angular/forms';
 
 import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
 import { Subscription } from 'rxjs';
@@ -81,7 +81,7 @@ export class OverviewComponent implements OnInit, OnDestroy {
 
   private createForm() {
     this.rbdmirroringForm = new CdFormGroup({
-      siteName: new FormControl({ value: '', disabled: true })
+      siteName: new UntypedFormControl({ value: '', disabled: true })
     });
   }
 
index ef30c888c8ba6207be4ff0a0ec9f2756d3d477fc..9b462874c1d4c12a2b64e89150a4b5ee932826df 100644 (file)
@@ -1,6 +1,6 @@
 import { Location } from '@angular/common';
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { AbstractControl, FormControl, Validators } from '@angular/forms';
+import { AbstractControl, UntypedFormControl, Validators } from '@angular/forms';
 import { ActivatedRoute } from '@angular/router';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
@@ -51,7 +51,7 @@ export class PoolEditModeModalComponent implements OnInit, OnDestroy {
 
   createForm() {
     this.editModeForm = new CdFormGroup({
-      mirrorMode: new FormControl('', {
+      mirrorMode: new UntypedFormControl('', {
         validators: [Validators.required, this.validateMode.bind(this)]
       })
     });
index 6569c3b24b0480c8aa43cef782e3916fc33aa3bd..5a32764c9f22febd6d716202c087176d4538cb8b 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { AbstractControl, FormControl, Validators } from '@angular/forms';
+import { AbstractControl, UntypedFormControl, Validators } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 
@@ -39,16 +39,16 @@ export class PoolEditPeerModalComponent implements OnInit {
 
   createForm() {
     this.editPeerForm = new CdFormGroup({
-      clusterName: new FormControl('', {
+      clusterName: new UntypedFormControl('', {
         validators: [Validators.required, this.validateClusterName]
       }),
-      clientID: new FormControl('', {
+      clientID: new UntypedFormControl('', {
         validators: [Validators.required, this.validateClientID]
       }),
-      monAddr: new FormControl('', {
+      monAddr: new UntypedFormControl('', {
         validators: [this.validateMonAddr]
       }),
-      key: new FormControl('', {
+      key: new UntypedFormControl('', {
         validators: [this.validateKey]
       })
     });
index 3ced71f0264825bc9c04b40dbca0be46e88dbd73..7b5fe992f283e68102bbfc98364f2103d856d49c 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 
 import _ from 'lodash';
 import { ReplaySubject } from 'rxjs';
@@ -113,7 +113,7 @@ export class RbdConfigurationFormComponent implements OnInit {
     const configFormGroup = new CdFormGroup({});
 
     this.rbdConfigurationService.getWritableOptionFields().forEach((c) => {
-      let control: FormControl;
+      let control: UntypedFormControl;
       if (
         c.type === RbdConfigurationType.milliseconds ||
         c.type === RbdConfigurationType.iops ||
@@ -125,7 +125,7 @@ export class RbdConfigurationFormComponent implements OnInit {
             initialValue = configList['value'];
           }
         });
-        control = new FormControl(initialValue, Validators.min(0));
+        control = new UntypedFormControl(initialValue, Validators.min(0));
       } else {
         throw new Error(
           `Type ${c.type} is unknown, you may need to add it to RbdConfiguration class`
index c12975f05f1fa144b03be03613dffeac0a2bd16e..825b1d2bb39b3a6183768f86a3cf9119645fc855 100644 (file)
@@ -6,4 +6,5 @@ export interface RbdImageFeature {
   interlockedWith?: string;
   key?: string;
   initDisabled?: boolean;
+  helperHtml?: string;
 }
index 017456cb4d2a6fcd12d965d833ce7f49fed7ba5c..df0d0b8da3d0dee79adc6471b06d2e6f0aaf460a 100644 (file)
             <span class="invalid-feedback"
                   *ngIf="rbdForm.showError('size', formDir, 'invalidSizeObject')"
                   i18n>You have to increase the size.</span>
+            <span *ngIf="rbdForm.showError('size', formDir, 'pattern')"
+                  class="invalid-feedback"
+                  i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
           </div>
         </div>
 
index 7bf543f1af729b12f721ef6f5779a00dd3a86265..33b512e4d9ee9231eb367aeca9a39da5fde7c652 100644 (file)
@@ -142,7 +142,6 @@ describe('RbdFormComponent', () => {
       expect(component['rbdImage'].observers.length).toEqual(0);
       component.ngOnInit(); // Subscribes to image once during init
       component.submit();
-      expect(component['rbdImage'].observers.length).toEqual(1);
       expect(createAction).toHaveBeenCalledTimes(0);
       expect(editAction).toHaveBeenCalledTimes(1);
       expect(cloneAction).toHaveBeenCalledTimes(0);
index 28f77e0da08bf915c1dddedd7a63caa0e95f49bb..33e67b09bbf76c2a3a7390f72caeaad5f629da80 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormControl, ValidatorFn, Validators } from '@angular/forms';
+import { UntypedFormControl, ValidatorFn, Validators } from '@angular/forms';
 import { ActivatedRoute, Router } from '@angular/router';
 
 import _ from 'lodash';
@@ -133,13 +133,15 @@ export class RbdFormComponent extends CdForm implements OnInit {
         desc: $localize`Deep flatten`,
         requires: null,
         allowEnable: false,
-        allowDisable: true
+        allowDisable: true,
+        helperHtml: $localize`Feature can be disabled but can't be re-enabled later`
       },
       layering: {
         desc: $localize`Layering`,
         requires: null,
         allowEnable: false,
-        allowDisable: false
+        allowDisable: false,
+        helperHtml: $localize`Feature flag can't be manipulated after the image is created. Disabling this option will also disable the Protect and Clone actions on Snapshot`
       },
       'exclusive-lock': {
         desc: $localize`Exclusive lock`,
@@ -174,33 +176,33 @@ export class RbdFormComponent extends CdForm implements OnInit {
   createForm() {
     this.rbdForm = new CdFormGroup(
       {
-        parent: new FormControl(''),
-        name: new FormControl('', {
+        parent: new UntypedFormControl(''),
+        name: new UntypedFormControl('', {
           validators: [Validators.required, Validators.pattern(/^[^@/]+?$/)]
         }),
-        pool: new FormControl(null, {
+        pool: new UntypedFormControl(null, {
           validators: [Validators.required]
         }),
-        namespace: new FormControl(null),
-        useDataPool: new FormControl(false),
-        dataPool: new FormControl(null),
-        size: new FormControl(null, {
+        namespace: new UntypedFormControl(null),
+        useDataPool: new UntypedFormControl(false),
+        dataPool: new UntypedFormControl(null),
+        size: new UntypedFormControl(null, {
           updateOn: 'blur'
         }),
-        obj_size: new FormControl(this.defaultObjectSize),
+        obj_size: new UntypedFormControl(this.defaultObjectSize),
         features: new CdFormGroup(
           this.featuresList.reduce((acc: object, e) => {
-            acc[e.key] = new FormControl({ value: false, disabled: !!e.initDisabled });
+            acc[e.key] = new UntypedFormControl({ value: false, disabled: !!e.initDisabled });
             return acc;
           }, {})
         ),
-        mirroring: new FormControl(''),
-        schedule: new FormControl('', {
+        mirroring: new UntypedFormControl(''),
+        schedule: new UntypedFormControl('', {
           validators: [Validators.pattern(/^([0-9]+)d|([0-9]+)h|([0-9]+)m$/)] // check schedule interval to be in format - 1d or 1h or 1m
         }),
-        mirroringMode: new FormControl(''),
-        stripingUnit: new FormControl(this.defaultStripingUnit),
-        stripingCount: new FormControl(this.defaultStripingCount, {
+        mirroringMode: new UntypedFormControl(''),
+        stripingUnit: new UntypedFormControl(this.defaultStripingUnit),
+        stripingCount: new UntypedFormControl(this.defaultStripingCount, {
           updateOn: 'blur'
         })
       },
@@ -224,6 +226,11 @@ export class RbdFormComponent extends CdForm implements OnInit {
         this.rbdForm.get('deep-flatten').disable();
         this.rbdForm.get('layering').disable();
         this.rbdForm.get('exclusive-lock').disable();
+      } else {
+        if (!this.rbdForm.get('deep-flatten').value) {
+          this.rbdForm.get('deep-flatten').disable();
+        }
+        this.rbdForm.get('layering').disable();
       }
     });
   }
index b16fc4190d87f79ad9b41527d1466a37da11c375..6f85bf6db77d59e36e1bee0361bd740cc0b95a10 100644 (file)
   </cd-rbd-details>
 </cd-table>
 
-<ng-template #scheduleStatus>
-  <div i18n
-       [innerHtml]="'Only available for RBD images with <strong>fast-diff</strong> enabled'"></div>
-</ng-template>
-
-<ng-template #provisionedNotAvailableTooltipTpl
-             let-row="row">
-  <span *ngIf="row.disk_usage === null && !row.features_name.includes('fast-diff'); else provisioned"
-        [ngbTooltip]="usageNotAvailableTooltipTpl"
-        placement="top"
-        i18n>N/A</span>
-  <ng-template #provisioned
-               i18n>{{row.disk_usage | dimlessBinary}}</ng-template>
-</ng-template>
-
-<ng-template #totalProvisionedNotAvailableTooltipTpl
-             let-row="row">
-  <span *ngIf="row.total_disk_usage === null && !row.features_name.includes('fast-diff'); else totalProvisioned"
-        [ngbTooltip]="usageNotAvailableTooltipTpl"
-        placement="top"
-        i18n>N/A</span>
-  <ng-template #totalProvisioned
-               i18n>{{row.total_disk_usage | dimlessBinary}}</ng-template>
-</ng-template>
-
 <ng-template #parentTpl
              let-value="value">
   <span *ngIf="value">{{ value.pool_name }}<span
     </strong>
   </div>
 </ng-template>
+
+<ng-template #imageUsageTpl
+             let-row="row">
+  <span *ngIf="row.features_name && (!row.features_name.includes('fast-diff') || row.mirror_mode === 'snapshot') ; else usageBar"
+        [ngbTooltip]="usageTooltip">
+    <span>-</span>
+  </span>
+  <ng-template #usageBar>
+    <cd-usage-bar *ngIf="row"
+                  [total]="row.size"
+                  [used]="row.disk_usage"
+                  [title]="row.name"
+                  decimals="2">
+  </cd-usage-bar>
+  </ng-template>
+
+</ng-template>
+
+<ng-template #usageTooltip>
+  <div i18n
+       [innerHtml]="'Only available for RBD images with <strong>fast-diff</strong> enabled and without snapshot mirroring'"></div>
+</ng-template>
index fa7a772f02239654f975a54bbb6330c6dc8a5bce..cff6042a980b2325335b4ad65c72fce607a4b4a0 100644 (file)
@@ -92,60 +92,6 @@ describe('RbdListComponent', () => {
     });
   });
 
-  describe('handling of provisioned columns', () => {
-    let rbdServiceListSpy: jasmine.Spy;
-
-    const images = [
-      {
-        name: 'img1',
-        pool_name: 'rbd',
-        features_name: ['layering', 'exclusive-lock'],
-        disk_usage: null,
-        total_disk_usage: null
-      },
-      {
-        name: 'img2',
-        pool_name: 'rbd',
-        features_name: ['layering', 'exclusive-lock', 'object-map', 'fast-diff'],
-        disk_usage: 1024,
-        total_disk_usage: 1024
-      }
-    ];
-
-    beforeEach(() => {
-      component.images = images;
-      refresh({ executing_tasks: [], finished_tasks: [] });
-      rbdServiceListSpy = spyOn(rbdService, 'list');
-    });
-
-    it('should display N/A for Provisioned & Total Provisioned columns if disk usage is null', () => {
-      rbdServiceListSpy.and.callFake(() =>
-        of([{ pool_name: 'rbd', value: images, headers: headers }])
-      );
-      fixture.detectChanges();
-      const spanWithoutFastDiff = fixture.debugElement.nativeElement.querySelectorAll(
-        '.datatable-body-cell-label span'
-      );
-      // check image with disk usage = null & fast-diff disabled
-      expect(spanWithoutFastDiff[6].textContent).toBe('N/A');
-
-      images[0]['features_name'] = ['layering', 'exclusive-lock', 'object-map', 'fast-diff'];
-      component.images = images;
-      refresh({ executing_tasks: [], finished_tasks: [] });
-
-      rbdServiceListSpy.and.callFake(() =>
-        of([{ pool_name: 'rbd', value: images, headers: headers }])
-      );
-      fixture.detectChanges();
-
-      const spanWithFastDiff = fixture.debugElement.nativeElement.querySelectorAll(
-        '.datatable-body-cell-label span'
-      );
-      // check image with disk usage = null & fast-diff changed to enabled
-      expect(spanWithFastDiff[6].textContent).toBe('-');
-    });
-  });
-
   describe('handling of deletion', () => {
     beforeEach(() => {
       fixture.detectChanges();
index 10230035d29887709f4fffd7e0f7eeec28fb0d93..8fc36a4cb479d64fb3680f4fb5815fb1c9f90038 100644 (file)
@@ -63,12 +63,14 @@ export class RbdListComponent extends ListWithDetails implements OnInit {
   deleteTpl: TemplateRef<any>;
   @ViewChild('removingStatTpl', { static: true })
   removingStatTpl: TemplateRef<any>;
-  @ViewChild('provisionedNotAvailableTooltipTpl', { static: true })
-  provisionedNotAvailableTooltipTpl: TemplateRef<any>;
-  @ViewChild('totalProvisionedNotAvailableTooltipTpl', { static: true })
-  totalProvisionedNotAvailableTooltipTpl: TemplateRef<any>;
   @ViewChild('forcePromoteConfirmation', { static: true })
   forcePromoteConfirmation: TemplateRef<any>;
+  @ViewChild('usedTmpl', { static: true })
+  usedTmpl: TemplateRef<any>;
+  @ViewChild('totalUsedTmpl', { static: true })
+  totalUsedTmpl: TemplateRef<any>;
+  @ViewChild('imageUsageTpl', { static: true })
+  imageUsageTpl: TemplateRef<any>;
 
   permission: Permission;
   tableActions: CdTableAction[];
@@ -214,14 +216,22 @@ export class RbdListComponent extends ListWithDetails implements OnInit {
       icon: Icons.edit,
       click: () => this.actionPrimary(true),
       name: this.actionLabels.PROMOTE,
-      visible: () => this.selection.first() != null && !this.selection.first().primary
+      visible: () => this.selection.first() != null && !this.selection.first().primary,
+      disable: () =>
+        this.selection.first().mirror_mode === 'Disabled'
+          ? 'Mirroring needs to be enabled on the image to perform this action'
+          : ''
     };
     const demoteAction: CdTableAction = {
       permission: 'update',
       icon: Icons.edit,
       click: () => this.actionPrimary(false),
       name: this.actionLabels.DEMOTE,
-      visible: () => this.selection.first() != null && this.selection.first().primary
+      visible: () => this.selection.first() != null && this.selection.first().primary,
+      disable: () =>
+        this.selection.first().mirror_mode === 'Disabled'
+          ? 'Mirroring needs to be enabled on the image to perform this action'
+          : ''
     };
     this.tableActions = [
       addAction,
@@ -263,6 +273,12 @@ export class RbdListComponent extends ListWithDetails implements OnInit {
         sortable: false,
         pipe: this.dimlessBinaryPipe
       },
+      {
+        name: $localize`Usage`,
+        prop: 'usage',
+        cellTemplate: this.imageUsageTpl,
+        flexGrow: 1.5
+      },
       {
         name: $localize`Objects`,
         prop: 'num_objs',
@@ -279,24 +295,6 @@ export class RbdListComponent extends ListWithDetails implements OnInit {
         sortable: false,
         pipe: this.dimlessBinaryPipe
       },
-      {
-        name: $localize`Provisioned`,
-        prop: 'disk_usage',
-        cellClass: 'text-center',
-        flexGrow: 1,
-        pipe: this.dimlessBinaryPipe,
-        sortable: false,
-        cellTemplate: this.provisionedNotAvailableTooltipTpl
-      },
-      {
-        name: $localize`Total provisioned`,
-        prop: 'total_disk_usage',
-        cellClass: 'text-center',
-        flexGrow: 1,
-        pipe: this.dimlessBinaryPipe,
-        sortable: false,
-        cellTemplate: this.totalProvisionedNotAvailableTooltipTpl
-      },
       {
         name: $localize`Parent`,
         prop: 'parent',
index bad32c3c554cacb949240db26b01716e285c6f81..584caa88442f4f3bfc69960982ad124c1fd0d0e2 100644 (file)
@@ -2,7 +2,7 @@ import { Component, OnInit } from '@angular/core';
 import {
   AbstractControl,
   AsyncValidatorFn,
-  FormControl,
+  UntypedFormControl,
   ValidationErrors,
   ValidatorFn
 } from '@angular/forms';
@@ -53,8 +53,8 @@ export class RbdNamespaceFormModalComponent implements OnInit {
   createForm() {
     this.namespaceForm = new CdFormGroup(
       {
-        pool: new FormControl(''),
-        namespace: new FormControl('')
+        pool: new UntypedFormControl(''),
+        namespace: new UntypedFormControl('')
       },
       this.validator(),
       this.asyncValidator()
index 5e7b04b9f25af244604c280ff83b2537fcf5fb25..8c1d12fe3cbe991a4dde515d251114ecdf3bb397 100644 (file)
@@ -73,12 +73,14 @@ describe('RbdSnapshotFormModalComponent', () => {
     expect(radio.disabled).toBe(false);
   });
 
-  it('should disable the mirror image snapshot creation when peer is not configured', () => {
-    spyOn(rbdMirrorService, 'getPeerForPool').and.returnValue(of([]));
-    component.mirroring = 'snapshot';
-    component.ngOnInit();
-    fixture.detectChanges();
-    const radio = fixture.debugElement.nativeElement.querySelector('#mirrorImageSnapshot');
-    expect(radio.disabled).toBe(true);
-  });
+  // TODO: Fix this test. It is failing after updating the jest.
+  // It looks like it is not recognizing if radio button is disabled or not
+  // it('should disable the mirror image snapshot creation when peer is not configured', () => {
+  //   spyOn(rbdMirrorService, 'getPeerForPool').and.returnValue(of([]));
+  //   component.mirroring = 'snapshot';
+  //   component.ngOnInit();
+  //   fixture.detectChanges();
+  //   const radio = fixture.debugElement.nativeElement.querySelector('#mirrorImageSnapshot');
+  //   expect(radio.disabled).toBe(true);
+  // });
 });
index f3665f6d0495e8ee9896aedff800409b6d3b8bf8..a9fb074261e445e3e6bbb94c29c091717b8c43a5 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import { Observable, Subject } from 'rxjs';
@@ -50,10 +50,10 @@ export class RbdSnapshotFormModalComponent implements OnInit {
 
   createForm() {
     this.snapshotForm = new CdFormGroup({
-      snapshotName: new FormControl('', {
+      snapshotName: new UntypedFormControl('', {
         validators: [Validators.required]
       }),
-      mirrorImageSnapshot: new FormControl(false, {})
+      mirrorImageSnapshot: new UntypedFormControl(false, {})
     });
   }
 
@@ -73,6 +73,7 @@ export class RbdSnapshotFormModalComponent implements OnInit {
     } else {
       this.snapshotForm.get('snapshotName').setValue(this.snapName);
       this.snapshotForm.get('snapshotName').setValidators([Validators.required]);
+      this.snapshotForm.get('snapshotName').updateValueAndValidity();
     }
   }
 
index 8b40111b8c8cb655586b4ea90c863ada4af02ea0..9b3b7d1d6cdd0d1ce849876c58076c57da9e03f3 100644 (file)
@@ -44,7 +44,9 @@ export class RbdSnapshotActionsModel {
       visible: (selection: CdTableSelection) =>
         selection.hasSingleSelection && !selection.first().is_protected,
       name: actionLabels.PROTECT,
-      disable: (selection: CdTableSelection) => this.disableForMirrorSnapshot(selection)
+      disable: (selection: CdTableSelection) =>
+        this.disableForMirrorSnapshot(selection) ||
+        this.getProtectDisableDesc(selection, this.featuresName)
     };
     this.unprotect = {
       permission: 'update',
@@ -58,8 +60,7 @@ export class RbdSnapshotActionsModel {
       permission: 'create',
       canBePrimary: (selection: CdTableSelection) => selection.hasSingleSelection,
       disable: (selection: CdTableSelection) =>
-        this.getCloneDisableDesc(selection, this.featuresName) ||
-        this.disableForMirrorSnapshot(selection),
+        this.getCloneDisableDesc(selection) || this.disableForMirrorSnapshot(selection),
       icon: Icons.clone,
       name: actionLabels.CLONE
     };
@@ -107,19 +108,23 @@ export class RbdSnapshotActionsModel {
     ];
   }
 
-  getCloneDisableDesc(selection: CdTableSelection, featuresName: string[]): boolean | string {
+  getProtectDisableDesc(selection: CdTableSelection, featuresName: string[]): boolean | string {
     if (selection.hasSingleSelection && !selection.first().cdExecuting) {
       if (!featuresName?.includes('layering')) {
-        return $localize`Parent image must support Layering`;
+        return $localize`The layering feature needs to be enabled on parent image`;
       }
+      return false;
+    }
+    return true;
+  }
 
+  getCloneDisableDesc(selection: CdTableSelection): boolean | string {
+    if (selection.hasSingleSelection && !selection.first().cdExecuting) {
       if (this.cloneFormatVersion === 1 && !selection.first().is_protected) {
         return $localize`Snapshot must be protected in order to clone.`;
       }
-
       return false;
     }
-
     return true;
   }
 
index 797fc35a11c6394a27a20b0b28784a3aa392d63e..1b9b3854665109dd580b1bb428b03dd3527c4728 100644 (file)
@@ -288,7 +288,7 @@ describe('RbdSnapshotListComponent', () => {
 
     it('should be disabled with version 1 and protected false', () => {
       const selection = new CdTableSelection([{ name: 'someName', is_protected: false }]);
-      const disableDesc = actions.getCloneDisableDesc(selection, ['layering']);
+      const disableDesc = actions.getCloneDisableDesc(selection);
       expect(disableDesc).toBe('Snapshot must be protected in order to clone.');
     });
 
@@ -299,8 +299,25 @@ describe('RbdSnapshotListComponent', () => {
     ])('should be enabled with version %d and protected %s', (version, is_protected) => {
       actions.cloneFormatVersion = version;
       const selection = new CdTableSelection([{ name: 'someName', is_protected: is_protected }]);
-      const disableDesc = actions.getCloneDisableDesc(selection, ['layering']);
+      const disableDesc = actions.getCloneDisableDesc(selection);
       expect(disableDesc).toBe(false);
     });
   });
+
+  describe('protect button disable state', () => {
+    let actions: RbdSnapshotActionsModel;
+
+    beforeEach(() => {
+      fixture.detectChanges();
+      const rbdService = TestBed.inject(RbdService);
+      const actionLabelsI18n = TestBed.inject(ActionLabelsI18n);
+      actions = new RbdSnapshotActionsModel(actionLabelsI18n, [], rbdService);
+    });
+
+    it('should be disabled if layering not supported', () => {
+      const selection = new CdTableSelection([{ name: 'someName', is_protected: false }]);
+      const disableDesc = actions.getProtectDisableDesc(selection, ['deep-flatten', 'fast-diff']);
+      expect(disableDesc).toBe('The layering feature needs to be enabled on parent image');
+    });
+  });
 });
index 579b687917389fa4697c061e88f959b5dbdfa1af..da8a185ea1cb7739358e2dbbe1265a678ad7b880 100644 (file)
@@ -118,7 +118,7 @@ export class RbdSnapshotListComponent implements OnInit, OnChanges {
         pipe: this.dimlessBinaryPipe
       },
       {
-        name: $localize`Provisioned`,
+        name: $localize`Used`,
         prop: 'disk_usage',
         flexGrow: 1,
         cellClass: 'text-right',
index 4ae8a159a0559111fa49c1f3164772733f58cfcd..841d635b1a0957c1b8d067952397b784ff3589ac 100644 (file)
@@ -208,6 +208,11 @@ export class CephfsDirectoriesComponent implements OnInit, OnChanges {
           name: $localize`Created`,
           flexGrow: 1,
           pipe: this.cdDatePipe
+        },
+        {
+          prop: 'created',
+          name: $localize`Capacity`,
+          flexGrow: 1
         }
       ],
       selection: new CdTableSelection(),
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.html
new file mode 100644 (file)
index 0000000..05235d1
--- /dev/null
@@ -0,0 +1,105 @@
+<div class="cd-col-form"
+     *ngIf="orchStatus$ | async as orchStatus">
+  <form #frm="ngForm"
+        #formDir="ngForm"
+        [formGroup]="form"
+        novalidate>
+    <div class="card">
+      <div i18n="form title|Example: Create Volume@@formTitle"
+           class="card-header">{{ action | titlecase }} {{ resource | upperFirst }}</div>
+
+      <ng-container *ngIf="!orchStatus.available">
+        <cd-alert-panel type="info"
+                        class="m-3"
+                        spacingClass="mt-3"
+                        i18n
+                        *ngIf="!editing">Orchestrator is not configured. Deploy MDS daemons manually after creating the volume.</cd-alert-panel>
+      </ng-container>
+      <div class="card-body">
+        <!-- Name -->
+        <div class="form-group row">
+          <label class="cd-col-form-label required"
+                 for="name"
+                 i18n>Name</label>
+          <div class="cd-col-form-input">
+            <input id="name"
+                   name="name"
+                   type="text"
+                   class="form-control"
+                   placeholder="Name..."
+                   i18n-placeholder
+                   formControlName="name"
+                   autofocus>
+            <span class="invalid-feedback"
+                  *ngIf="form.showError('name', formDir, 'required')"
+                  i18n>This field is required!</span>
+            <span *ngIf="form.showError('name', formDir, 'pattern')"
+                  class="invalid-feedback"
+                  i18n>File System name should start with a letter and can only contain letters, numbers, '.', '-' or '_'</span>
+          </div>
+        </div>
+
+        <ng-container *ngIf="orchStatus.available">
+          <!-- Placement -->
+          <div class="form-group row"
+               *ngIf="!editing">
+            <label class="cd-col-form-label"
+                   for="placement"
+                   i18n>Placement</label>
+            <div class="cd-col-form-input">
+              <select id="placement"
+                      class="form-select"
+                      formControlName="placement">
+                <option i18n
+                        value="hosts">Hosts</option>
+                <option i18n
+                        value="label">Label</option>
+              </select>
+            </div>
+          </div>
+
+          <!-- Label -->
+          <div *ngIf="form.controls.placement.value === 'label' && !editing"
+               class="form-group row">
+            <label i18n
+                   class="cd-col-form-label"
+                   for="label">Label</label>
+            <div class="cd-col-form-input">
+              <input id="label"
+                     class="form-control"
+                     type="text"
+                     formControlName="label"
+                     [ngbTypeahead]="searchLabels"
+                     (focus)="labelFocus.next($any($event).target.value)"
+                     (click)="labelClick.next($any($event).target.value)">
+              <span class="invalid-feedback"
+                    *ngIf="form.showError('label', frm, 'required')"
+                    i18n>This field is required.</span>
+            </div>
+          </div>
+
+          <!-- Hosts -->
+          <div *ngIf="form.controls.placement.value === 'hosts' && !editing"
+               class="form-group row">
+            <label class="cd-col-form-label"
+                   for="hosts"
+                   i18n>Hosts</label>
+            <div class="cd-col-form-input">
+              <cd-select-badges id="hosts"
+                                [data]="form.controls.hosts.value"
+                                [options]="hosts.options"
+                                [messages]="hosts.messages">
+              </cd-select-badges>
+            </div>
+          </div>
+        </ng-container>
+      </div>
+      <div class="card-footer">
+        <cd-form-button-panel (submitActionEvent)="submit()"
+                              [form]="form"
+                              [submitText]="(action | titlecase) + ' ' + (resource | upperFirst)"
+                              wrappingClass="text-right"></cd-form-button-panel>
+      </div>
+    </div>
+  </form>
+</div>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.spec.ts
new file mode 100644 (file)
index 0000000..461f4bc
--- /dev/null
@@ -0,0 +1,82 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing';
+import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { RouterTestingModule } from '@angular/router/testing';
+import { CephfsVolumeFormComponent } from './cephfs-form.component';
+import { FormHelper, configureTestBed } from '~/testing/unit-test-helper';
+import { SharedModule } from '~/app/shared/shared.module';
+import { ToastrModule } from 'ngx-toastr';
+import { ReactiveFormsModule } from '@angular/forms';
+import { By } from '@angular/platform-browser';
+import { OrchestratorService } from '~/app/shared/api/orchestrator.service';
+import { of } from 'rxjs';
+
+describe('CephfsVolumeFormComponent', () => {
+  let component: CephfsVolumeFormComponent;
+  let fixture: ComponentFixture<CephfsVolumeFormComponent>;
+  let formHelper: FormHelper;
+  let orchService: OrchestratorService;
+
+  configureTestBed({
+    imports: [
+      BrowserAnimationsModule,
+      SharedModule,
+      HttpClientTestingModule,
+      RouterTestingModule,
+      ReactiveFormsModule,
+      ToastrModule.forRoot()
+    ],
+    declarations: [CephfsVolumeFormComponent]
+  });
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CephfsVolumeFormComponent);
+    component = fixture.componentInstance;
+    formHelper = new FormHelper(component.form);
+    orchService = TestBed.inject(OrchestratorService);
+    spyOn(orchService, 'status').and.returnValue(of({ available: true }));
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('should validate proper names', fakeAsync(() => {
+    const validNames = ['test', 'test1234', 'test_1234', 'test-1234', 'test.1234', 'test12test'];
+    const invalidNames = ['1234', 'test@', 'test)'];
+
+    for (const validName of validNames) {
+      formHelper.setValue('name', validName, true);
+      tick();
+      formHelper.expectValid('name');
+    }
+
+    for (const invalidName of invalidNames) {
+      formHelper.setValue('name', invalidName, true);
+      tick();
+      formHelper.expectError('name', 'pattern');
+    }
+  }));
+
+  it('should show placement when orchestrator is available', () => {
+    const placement = fixture.debugElement.query(By.css('#placement'));
+    expect(placement).not.toBeNull();
+  });
+
+  describe('when editing', () => {
+    beforeEach(() => {
+      component.editing = true;
+      component.ngOnInit();
+      fixture.detectChanges();
+    });
+
+    it('should not show placement while editing even if orch is available', () => {
+      const placement = fixture.debugElement.query(By.css('#placement'));
+      const label = fixture.debugElement.query(By.css('#label'));
+      const hosts = fixture.debugElement.query(By.css('#hosts'));
+      expect(placement).toBeNull();
+      expect(label).toBeNull();
+      expect(hosts).toBeNull();
+    });
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-form/cephfs-form.component.ts
new file mode 100644 (file)
index 0000000..6d84e33
--- /dev/null
@@ -0,0 +1,197 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { ActivatedRoute, Router } from '@angular/router';
+import _ from 'lodash';
+
+import { NgbNav, NgbTooltip, NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
+import { merge, Observable, Subject } from 'rxjs';
+import { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';
+
+import { CephfsService } from '~/app/shared/api/cephfs.service';
+import { HostService } from '~/app/shared/api/host.service';
+import { OrchestratorService } from '~/app/shared/api/orchestrator.service';
+import { SelectMessages } from '~/app/shared/components/select/select-messages.model';
+import { SelectOption } from '~/app/shared/components/select/select-option.model';
+import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { CdForm } from '~/app/shared/forms/cd-form';
+import { CdFormBuilder } from '~/app/shared/forms/cd-form-builder';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { FinishedTask } from '~/app/shared/models/finished-task';
+import { Permission } from '~/app/shared/models/permissions';
+import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
+import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
+
+@Component({
+  selector: 'cd-cephfs-form',
+  templateUrl: './cephfs-form.component.html',
+  styleUrls: ['./cephfs-form.component.scss']
+})
+export class CephfsVolumeFormComponent extends CdForm implements OnInit {
+  @ViewChild('crushInfoTabs') crushInfoTabs: NgbNav;
+  @ViewChild('crushDeletionBtn') crushDeletionBtn: NgbTooltip;
+  @ViewChild('ecpInfoTabs') ecpInfoTabs: NgbNav;
+  @ViewChild('ecpDeletionBtn') ecpDeletionBtn: NgbTooltip;
+  @ViewChild(NgbTypeahead, { static: false })
+  typeahead: NgbTypeahead;
+
+  labelFocus = new Subject<string>();
+  labelClick = new Subject<string>();
+
+  orchStatus$: Observable<any>;
+
+  permission: Permission;
+  form: CdFormGroup;
+  action: string;
+  resource: string;
+  editing: boolean;
+  icons = Icons;
+  hosts: any;
+  labels: string[];
+  hasOrchestrator: boolean;
+  currentVolumeName: string;
+
+  constructor(
+    private router: Router,
+    private taskWrapperService: TaskWrapperService,
+    private orchService: OrchestratorService,
+    private formBuilder: CdFormBuilder,
+    public actionLabels: ActionLabelsI18n,
+    private hostService: HostService,
+    private cephfsService: CephfsService,
+    private route: ActivatedRoute
+  ) {
+    super();
+    this.editing = this.router.url.startsWith(`/cephfs/${URLVerbs.EDIT}`);
+    this.action = this.editing ? this.actionLabels.EDIT : this.actionLabels.CREATE;
+    this.resource = $localize`File System`;
+    this.hosts = {
+      options: [],
+      messages: new SelectMessages({
+        empty: $localize`There are no hosts.`,
+        filter: $localize`Filter hosts`
+      })
+    };
+    this.createForm();
+  }
+
+  private createForm() {
+    this.orchService.status().subscribe((status) => {
+      this.hasOrchestrator = status.available;
+    });
+    this.form = this.formBuilder.group({
+      name: new FormControl('', {
+        validators: [Validators.pattern(/^[a-zA-Z][.A-Za-z0-9_-]+$/), Validators.required]
+      }),
+      placement: ['hosts'],
+      hosts: [[]],
+      label: [
+        null,
+        [
+          CdValidators.requiredIf({
+            placement: 'label',
+            unmanaged: false
+          })
+        ]
+      ],
+      unmanaged: [false]
+    });
+  }
+
+  ngOnInit() {
+    if (this.editing) {
+      this.route.params.subscribe((params: { name: string }) => {
+        this.currentVolumeName = params.name;
+        this.form.get('name').setValue(this.currentVolumeName);
+      });
+    } else {
+      const hostContext = new CdTableFetchDataContext(() => undefined);
+      this.hostService.list(hostContext.toParams(), 'false').subscribe((resp: object[]) => {
+        const options: SelectOption[] = [];
+        _.forEach(resp, (host: object) => {
+          if (_.get(host, 'sources.orchestrator', false)) {
+            const option = new SelectOption(false, _.get(host, 'hostname'), '');
+            options.push(option);
+          }
+        });
+        this.hosts.options = [...options];
+      });
+      this.hostService.getLabels().subscribe((resp: string[]) => {
+        this.labels = resp;
+      });
+    }
+    this.orchStatus$ = this.orchService.status();
+  }
+
+  searchLabels = (text$: Observable<string>) => {
+    return merge(
+      text$.pipe(debounceTime(200), distinctUntilChanged()),
+      this.labelFocus,
+      this.labelClick.pipe(filter(() => !this.typeahead.isPopupOpen()))
+    ).pipe(
+      map((value) =>
+        this.labels
+          .filter((label: string) => label.toLowerCase().indexOf(value.toLowerCase()) > -1)
+          .slice(0, 10)
+      )
+    );
+  };
+
+  submit() {
+    const volumeName = this.form.get('name').value;
+    const BASE_URL = 'cephfs';
+
+    if (this.editing) {
+      this.taskWrapperService
+        .wrapTaskAroundCall({
+          task: new FinishedTask(`${BASE_URL}/${URLVerbs.EDIT}`, {
+            volumeName: volumeName
+          }),
+          call: this.cephfsService.rename(this.currentVolumeName, volumeName)
+        })
+        .subscribe({
+          error: () => {
+            this.form.setErrors({ cdSubmitButton: true });
+          },
+          complete: () => {
+            this.router.navigate([BASE_URL]);
+          }
+        });
+    } else {
+      let values = this.form.getRawValue();
+      const serviceSpec: object = {
+        placement: {},
+        unmanaged: values['unmanaged']
+      };
+      switch (values['placement']) {
+        case 'hosts':
+          if (values['hosts'].length > 0) {
+            serviceSpec['placement']['hosts'] = values['hosts'];
+          }
+          break;
+        case 'label':
+          serviceSpec['placement']['label'] = values['label'];
+          break;
+      }
+
+      const self = this;
+      let taskUrl = `${BASE_URL}/${URLVerbs.CREATE}`;
+      this.taskWrapperService
+        .wrapTaskAroundCall({
+          task: new FinishedTask(taskUrl, {
+            volumeName: volumeName
+          }),
+          call: this.cephfsService.create(this.form.get('name').value, serviceSpec)
+        })
+        .subscribe({
+          error() {
+            self.form.setErrors({ cdSubmitButton: true });
+          },
+          complete: () => {
+            this.router.navigate([BASE_URL]);
+          }
+        });
+    }
+  }
+}
index 05960e87fa1975065b17cd2621dd4f636ca7a58e..cf5c0a51c633d419f39616ab22bb1f02d6b72e7c 100644 (file)
   <cd-cephfs-tabs cdTableDetail
                   [selection]="expandedRow">
   </cd-cephfs-tabs>
+  <div class="table-actions btn-toolbar">
+    <cd-table-actions [permission]="permissions.cephfs"
+                      [selection]="selection"
+                      class="btn-group"
+                      id="cephfs-actions"
+                      [tableActions]="tableActions">
+    </cd-table-actions>
+  </div>
 </cd-table>
index 793651081dc89c683ed10f252692649f0ba69b1c..5659f131c99147246ffc2b94345fb1f513bafa3d 100644 (file)
@@ -2,11 +2,19 @@ import { HttpClientTestingModule } from '@angular/common/http/testing';
 import { Component, Input } from '@angular/core';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { RouterTestingModule } from '@angular/router/testing';
+
+import { ToastrModule } from 'ngx-toastr';
 
 import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
 import { SharedModule } from '~/app/shared/shared.module';
 import { configureTestBed } from '~/testing/unit-test-helper';
+import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { CephfsVolumeFormComponent } from '../cephfs-form/cephfs-form.component';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
 import { CephfsListComponent } from './cephfs-list.component';
+import { CephfsService } from '~/app/shared/api/cephfs.service';
 
 @Component({ selector: 'cd-cephfs-tabs', template: '' })
 class CephfsTabsStubComponent {
@@ -17,19 +25,73 @@ class CephfsTabsStubComponent {
 describe('CephfsListComponent', () => {
   let component: CephfsListComponent;
   let fixture: ComponentFixture<CephfsListComponent>;
+  let cephfsService: CephfsService;
 
   configureTestBed({
-    imports: [BrowserAnimationsModule, SharedModule, HttpClientTestingModule],
-    declarations: [CephfsListComponent, CephfsTabsStubComponent]
+    imports: [
+      BrowserAnimationsModule,
+      SharedModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot(),
+      RouterTestingModule
+    ],
+    declarations: [CephfsListComponent, CephfsTabsStubComponent, CephfsVolumeFormComponent]
   });
 
   beforeEach(() => {
     fixture = TestBed.createComponent(CephfsListComponent);
     component = fixture.componentInstance;
+    cephfsService = TestBed.inject(CephfsService);
     fixture.detectChanges();
   });
 
   it('should create', () => {
     expect(component).toBeTruthy();
   });
+
+  describe('volume deletion', () => {
+    let taskWrapper: TaskWrapperService;
+    let modalRef: any;
+
+    const setSelectedVolume = (volName: string) =>
+      (component.selection.selected = [{ mdsmap: { fs_name: volName } }]);
+
+    const callDeletion = () => {
+      component.removeVolumeModal();
+      expect(modalRef).toBeTruthy();
+      const deletion: CriticalConfirmationModalComponent = modalRef && modalRef.componentInstance;
+      deletion.submitActionObservable();
+    };
+
+    const testVolumeDeletion = (volName: string) => {
+      setSelectedVolume(volName);
+      callDeletion();
+      expect(cephfsService.remove).toHaveBeenCalledWith(volName);
+      expect(taskWrapper.wrapTaskAroundCall).toHaveBeenCalledWith({
+        task: {
+          name: 'cephfs/remove',
+          metadata: {
+            volumeName: volName
+          }
+        },
+        call: undefined // because of stub
+      });
+    };
+
+    beforeEach(() => {
+      spyOn(TestBed.inject(ModalService), 'show').and.callFake((deletionClass, initialState) => {
+        modalRef = {
+          componentInstance: Object.assign(new deletionClass(), initialState)
+        };
+        return modalRef;
+      });
+      spyOn(cephfsService, 'remove').and.stub();
+      taskWrapper = TestBed.inject(TaskWrapperService);
+      spyOn(taskWrapper, 'wrapTaskAroundCall').and.callThrough();
+    });
+
+    it('should delete cephfs volume', () => {
+      testVolumeDeletion('somevolumeName');
+    });
+  });
 });
index 8d19d394c3455de717aeee7ac9b09daa1468ca71..0d55845ab594912a7a1b2690fc3d195f9ea0150c 100644 (file)
@@ -1,25 +1,57 @@
 import { Component, OnInit } from '@angular/core';
+import { Permissions } from '~/app/shared/models/permissions';
+import { Router } from '@angular/router';
+
+import _ from 'lodash';
 
 import { CephfsService } from '~/app/shared/api/cephfs.service';
+import { ConfigurationService } from '~/app/shared/api/configuration.service';
 import { ListWithDetails } from '~/app/shared/classes/list-with-details.class';
 import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { CdTableAction } from '~/app/shared/models/cd-table-action';
 import { CdTableColumn } from '~/app/shared/models/cd-table-column';
 import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
 import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
-import { CdDatePipe } from '~/app/shared/pipes/cd-date.pipe';
+import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { URLBuilderService } from '~/app/shared/services/url-builder.service';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
+import { FinishedTask } from '~/app/shared/models/finished-task';
+import { NotificationService } from '~/app/shared/services/notification.service';
+
+const BASE_URL = 'cephfs';
 
 @Component({
   selector: 'cd-cephfs-list',
   templateUrl: './cephfs-list.component.html',
-  styleUrls: ['./cephfs-list.component.scss']
+  styleUrls: ['./cephfs-list.component.scss'],
+  providers: [{ provide: URLBuilderService, useValue: new URLBuilderService(BASE_URL) }]
 })
 export class CephfsListComponent extends ListWithDetails implements OnInit {
   columns: CdTableColumn[];
   filesystems: any = [];
   selection = new CdTableSelection();
+  tableActions: CdTableAction[];
+  permissions: Permissions;
+  icons = Icons;
+  monAllowPoolDelete = false;
 
-  constructor(private cephfsService: CephfsService, private cdDatePipe: CdDatePipe) {
+  constructor(
+    private authStorageService: AuthStorageService,
+    private cephfsService: CephfsService,
+    public actionLabels: ActionLabelsI18n,
+    private router: Router,
+    private urlBuilder: URLBuilderService,
+    private configurationService: ConfigurationService,
+    private modalService: ModalService,
+    private taskWrapper: TaskWrapperService,
+    public notificationService: NotificationService
+  ) {
     super();
+    this.permissions = this.authStorageService.getPermissions();
   }
 
   ngOnInit() {
@@ -30,18 +62,52 @@ export class CephfsListComponent extends ListWithDetails implements OnInit {
         flexGrow: 2
       },
       {
-        name: $localize`Created`,
-        prop: 'mdsmap.created',
+        name: $localize`Enabled`,
+        prop: 'mdsmap.enabled',
         flexGrow: 2,
-        pipe: this.cdDatePipe
+        cellTransformation: CellTemplate.checkIcon
       },
       {
-        name: $localize`Enabled`,
-        prop: 'mdsmap.enabled',
+        name: $localize`Created`,
+        prop: 'mdsmap.created',
         flexGrow: 1,
-        cellTransformation: CellTemplate.checkIcon
+        cellTransformation: CellTemplate.timeAgo
       }
     ];
+    this.tableActions = [
+      {
+        name: this.actionLabels.CREATE,
+        permission: 'create',
+        icon: Icons.add,
+        click: () => this.router.navigate([this.urlBuilder.getCreate()]),
+        canBePrimary: (selection: CdTableSelection) => !selection.hasSelection
+      },
+      {
+        name: this.actionLabels.EDIT,
+        permission: 'update',
+        icon: Icons.edit,
+        click: () =>
+          this.router.navigate([this.urlBuilder.getEdit(this.selection.first().mdsmap.fs_name)])
+      },
+      {
+        permission: 'delete',
+        icon: Icons.destroy,
+        click: () => this.removeVolumeModal(),
+        name: this.actionLabels.REMOVE,
+        disable: this.getDisableDesc.bind(this)
+      }
+    ];
+
+    if (this.permissions.configOpt.read) {
+      this.configurationService.get('mon_allow_pool_delete').subscribe((data: any) => {
+        if (_.has(data, 'value')) {
+          const monSection = _.find(data.value, (v) => {
+            return v.section === 'mon';
+          }) || { value: false };
+          this.monAllowPoolDelete = monSection.value === 'true' ? true : false;
+        }
+      });
+    }
   }
 
   loadFilesystems(context: CdTableFetchDataContext) {
@@ -58,4 +124,30 @@ export class CephfsListComponent extends ListWithDetails implements OnInit {
   updateSelection(selection: CdTableSelection) {
     this.selection = selection;
   }
+
+  removeVolumeModal() {
+    const volName = this.selection.first().mdsmap['fs_name'];
+    this.modalService.show(CriticalConfirmationModalComponent, {
+      itemDescription: 'File System',
+      itemNames: [volName],
+      actionDescription: 'remove',
+      submitActionObservable: () =>
+        this.taskWrapper.wrapTaskAroundCall({
+          task: new FinishedTask('cephfs/remove', { volumeName: volName }),
+          call: this.cephfsService.remove(volName)
+        })
+    });
+  }
+
+  getDisableDesc(): boolean | string {
+    if (this.selection?.hasSelection) {
+      if (!this.monAllowPoolDelete) {
+        return $localize`File System deletion is disabled by the mon_allow_pool_delete configuration setting.`;
+      }
+
+      return false;
+    }
+
+    return true;
+  }
 }
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.html
new file mode 100644 (file)
index 0000000..a810b7e
--- /dev/null
@@ -0,0 +1,186 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">{{ action | titlecase }} {{ resource | upperFirst }}</ng-container>
+
+  <ng-container class="modal-content"
+                *cdFormLoading="loading">
+    <form name="subvolumeForm"
+          #formDir="ngForm"
+          [formGroup]="subvolumeForm"
+          novalidate>
+      <div class="modal-body">
+        <div class="form-group row">
+          <label class="cd-col-form-label required"
+                 for="subvolumeName"
+                 i18n>Name</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="text"
+                   placeholder="Subvolume name..."
+                   id="subvolumeName"
+                   name="subvolumeName"
+                   formControlName="subvolumeName"
+                   autofocus>
+            <span class="invalid-feedback"
+                  *ngIf="subvolumeForm.showError('subvolumeName', formDir, 'required')"
+                  i18n>This field is required.</span>
+            <span class="invalid-feedback"
+                  *ngIf="subvolumeForm.showError('subvolumeName', formDir, 'notUnique')"
+                  i18n>The subvolume already exists.</span>
+            <span *ngIf="subvolumeForm.showError('subvolumeName', formDir, 'pattern')"
+                  class="invalid-feedback"
+                  i18n>Subvolume name can only contain letters, numbers, '.', '-' or '_'</span>
+          </div>
+        </div>
+
+        <!-- Volume name -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="volumeName"
+                 i18n>Volume name</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   id="volumeName"
+                   name="volumeName"
+                   formControlName="volumeName">
+          </div>
+        </div>
+
+          <!--Subvolume Group name -->
+          <div class="form-group row">
+            <label class="cd-col-form-label"
+                   for="subvolumeGroupName"
+                   i18n>Subvolume group
+            </label>
+            <div class="cd-col-form-input">
+              <select class="form-select"
+                      id="subvolumeGroupName"
+                      name="subvolumeGroupName"
+                      formControlName="subvolumeGroupName"
+                      *ngIf="subVolumeGroups$ | async as subvolumeGroups">
+                <option value=""
+                        i18n>Default</option>
+                <option *ngFor="let subvolumegroup of subvolumeGroups"
+                        [value]="subvolumegroup.name">{{ subvolumegroup.name }}</option>
+              </select>
+            </div>
+          </div>
+
+        <!-- Size -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="size"
+                 i18n>Size
+          <cd-helper>The size of the subvolume is specified by setting a quota on it.
+            If left blank or put 0, then quota will be infinite</cd-helper>
+          </label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="text"
+                   id="size"
+                   name="size"
+                   formControlName="size"
+                   i18n-placeholder
+                   placeholder="e.g., 10GiB"
+                   defaultUnit="GiB"
+                   cdDimlessBinary>
+            <span *ngIf="subvolumeForm.showError('size', formDir, 'pattern')"
+                  class="invalid-feedback"
+                  i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
+          </div>
+        </div>
+
+        <!-- CephFS Pools -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="pool"
+                 i18n>Pool
+            <cd-helper>By default, the data_pool_layout of the parent directory is selected.</cd-helper>
+          </label>
+          <div class="cd-col-form-input">
+            <select class="form-select"
+                    id="pool"
+                    name="pool"
+                    formControlName="pool">
+              <option *ngFor="let pool of dataPools"
+                      [value]="pool.pool">{{ pool.pool }}</option>
+            </select>
+          </div>
+        </div>
+
+        <!-- UID -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="uid"
+                 i18n>UID</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="number"
+                   placeholder="Subvolume UID..."
+                   id="uid"
+                   name="uid"
+                   formControlName="uid">
+          </div>
+        </div>
+
+        <!-- GID -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="gid"
+                 i18n>GID</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="number"
+                   placeholder="Subvolume GID..."
+                   id="gid"
+                   name="gid"
+                   formControlName="gid">
+          </div>
+        </div>
+
+        <!-- Mode -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="mode"
+                 i18n>Mode
+            <cd-helper>Permissions for the directory. Default mode is 755 which is rwxr-xr-x</cd-helper>
+          </label>
+          <div class="cd-col-form-input">
+            <cd-checked-table-form [data]="scopePermissions"
+                                   [columns]="columns"
+                                   [form]="subvolumeForm"
+                                   inputField="mode"
+                                   [isTableForOctalMode]="true"
+                                   [initialValue]="initialMode"
+                                   [scopes]="scopes"
+                                   [isDisabled]="isEdit"></cd-checked-table-form>
+          </div>
+          </div>
+
+        <!-- Is namespace-isolated -->
+        <div class="form-group row">
+          <div class="cd-col-form-offset">
+            <div class="custom-control custom-checkbox">
+              <input class="custom-control-input"
+                     type="checkbox"
+                     id="isolatedNamespace"
+                     name="isolatedNamespace"
+                     formControlName="isolatedNamespace">
+              <label class="custom-control-label"
+                     for="isolatedNamespace"
+                     i18n>Isolated Namespace
+                <cd-helper>To create subvolume in a separate RADOS namespace.</cd-helper>
+              </label>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <div class="modal-footer">
+        <cd-form-button-panel (submitActionEvent)="submit()"
+                              [form]="subvolumeForm"
+                              [submitText]="(action | titlecase) + ' ' + (resource | upperFirst)"></cd-form-button-panel>
+      </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.spec.ts
new file mode 100644 (file)
index 0000000..68157d1
--- /dev/null
@@ -0,0 +1,77 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CephfsSubvolumeFormComponent } from './cephfs-subvolume-form.component';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+import { RouterTestingModule } from '@angular/router/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { FormHelper, configureTestBed } from '~/testing/unit-test-helper';
+import { CephfsSubvolumeService } from '~/app/shared/api/cephfs-subvolume.service';
+
+describe('CephfsSubvolumeFormComponent', () => {
+  let component: CephfsSubvolumeFormComponent;
+  let fixture: ComponentFixture<CephfsSubvolumeFormComponent>;
+  let formHelper: FormHelper;
+  let createSubVolumeSpy: jasmine.Spy;
+  let editSubVolumeSpy: jasmine.Spy;
+
+  configureTestBed({
+    declarations: [CephfsSubvolumeFormComponent],
+    providers: [NgbActiveModal],
+    imports: [
+      SharedModule,
+      ToastrModule.forRoot(),
+      ReactiveFormsModule,
+      HttpClientTestingModule,
+      RouterTestingModule
+    ]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CephfsSubvolumeFormComponent);
+    component = fixture.componentInstance;
+    component.fsName = 'test_volume';
+    component.pools = [];
+    component.ngOnInit();
+    formHelper = new FormHelper(component.subvolumeForm);
+    createSubVolumeSpy = spyOn(TestBed.inject(CephfsSubvolumeService), 'create').and.stub();
+    editSubVolumeSpy = spyOn(TestBed.inject(CephfsSubvolumeService), 'update').and.stub();
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('should have a form open in modal', () => {
+    const nativeEl = fixture.debugElement.nativeElement;
+    expect(nativeEl.querySelector('cd-modal')).not.toBe(null);
+  });
+
+  it('should have the volume name prefilled', () => {
+    component.ngOnInit();
+    expect(component.subvolumeForm.get('volumeName').value).toBe('test_volume');
+  });
+
+  it('should submit the form', () => {
+    formHelper.setValue('subvolumeName', 'test_subvolume');
+    formHelper.setValue('size', 10);
+    component.submit();
+
+    expect(createSubVolumeSpy).toHaveBeenCalled();
+    expect(editSubVolumeSpy).not.toHaveBeenCalled();
+  });
+
+  it('should edit the subvolume', () => {
+    component.isEdit = true;
+    component.ngOnInit();
+    formHelper.setValue('subvolumeName', 'test_subvolume');
+    formHelper.setValue('size', 10);
+    component.submit();
+
+    expect(editSubVolumeSpy).toHaveBeenCalled();
+    expect(createSubVolumeSpy).not.toHaveBeenCalled();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.ts
new file mode 100644 (file)
index 0000000..2c2fe8f
--- /dev/null
@@ -0,0 +1,216 @@
+import { Component, OnInit } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { CephfsSubvolumeService } from '~/app/shared/api/cephfs-subvolume.service';
+import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { FinishedTask } from '~/app/shared/models/finished-task';
+import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
+import { Pool } from '../../pool/pool';
+import { FormatterService } from '~/app/shared/services/formatter.service';
+import { CdTableColumn } from '~/app/shared/models/cd-table-column';
+import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { CephfsSubvolumeInfo } from '~/app/shared/models/cephfs-subvolume.model';
+import { DimlessBinaryPipe } from '~/app/shared/pipes/dimless-binary.pipe';
+import { OctalToHumanReadablePipe } from '~/app/shared/pipes/octal-to-human-readable.pipe';
+import { CdForm } from '~/app/shared/forms/cd-form';
+import { CephfsSubvolumeGroupService } from '~/app/shared/api/cephfs-subvolume-group.service';
+import { CephfsSubvolumeGroup } from '~/app/shared/models/cephfs-subvolume-group.model';
+import { Observable } from 'rxjs';
+
+@Component({
+  selector: 'cd-cephfs-subvolume-form',
+  templateUrl: './cephfs-subvolume-form.component.html',
+  styleUrls: ['./cephfs-subvolume-form.component.scss']
+})
+export class CephfsSubvolumeFormComponent extends CdForm implements OnInit {
+  fsName: string;
+  subVolumeName: string;
+  subVolumeGroupName: string;
+  pools: Pool[];
+  isEdit = false;
+
+  subvolumeForm: CdFormGroup;
+
+  action: string;
+  resource: string;
+
+  subVolumeGroups$: Observable<CephfsSubvolumeGroup[]>;
+  subVolumeGroups: CephfsSubvolumeGroup[];
+  dataPools: Pool[];
+
+  columns: CdTableColumn[];
+  scopePermissions: Array<any> = [];
+  initialMode = {
+    owner: ['read', 'write', 'execute'],
+    group: ['read', 'execute'],
+    others: ['read', 'execute']
+  };
+  scopes: string[] = ['owner', 'group', 'others'];
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    private actionLabels: ActionLabelsI18n,
+    private taskWrapper: TaskWrapperService,
+    private cephFsSubvolumeService: CephfsSubvolumeService,
+    private cephFsSubvolumeGroupService: CephfsSubvolumeGroupService,
+    private formatter: FormatterService,
+    private dimlessBinary: DimlessBinaryPipe,
+    private octalToHumanReadable: OctalToHumanReadablePipe
+  ) {
+    super();
+    this.resource = $localize`Subvolume`;
+  }
+
+  ngOnInit(): void {
+    this.action = this.actionLabels.CREATE;
+    this.columns = [
+      {
+        prop: 'scope',
+        name: $localize`All`,
+        flexGrow: 0.5
+      },
+      {
+        prop: 'read',
+        name: $localize`Read`,
+        flexGrow: 0.5,
+        cellClass: 'text-center'
+      },
+      {
+        prop: 'write',
+        name: $localize`Write`,
+        flexGrow: 0.5,
+        cellClass: 'text-center'
+      },
+      {
+        prop: 'execute',
+        name: $localize`Execute`,
+        flexGrow: 0.5,
+        cellClass: 'text-center'
+      }
+    ];
+
+    this.subVolumeGroups$ = this.cephFsSubvolumeGroupService.get(this.fsName);
+    this.dataPools = this.pools.filter((pool) => pool.type === 'data');
+    this.createForm();
+
+    this.isEdit ? this.populateForm() : this.loadingReady();
+  }
+
+  createForm() {
+    this.subvolumeForm = new CdFormGroup({
+      volumeName: new FormControl({ value: this.fsName, disabled: true }),
+      subvolumeName: new FormControl('', {
+        validators: [Validators.required, Validators.pattern(/^[.A-Za-z0-9_-]+$/)],
+        asyncValidators: [
+          CdValidators.unique(
+            this.cephFsSubvolumeService.exists,
+            this.cephFsSubvolumeService,
+            null,
+            null,
+            this.fsName
+          )
+        ]
+      }),
+      subvolumeGroupName: new FormControl(this.subVolumeGroupName),
+      pool: new FormControl(this.dataPools[0]?.pool, {
+        validators: [Validators.required]
+      }),
+      size: new FormControl(null, {
+        updateOn: 'blur'
+      }),
+      uid: new FormControl(null),
+      gid: new FormControl(null),
+      mode: new FormControl({}),
+      isolatedNamespace: new FormControl(false)
+    });
+  }
+
+  populateForm() {
+    this.action = this.actionLabels.EDIT;
+    this.cephFsSubvolumeService
+      .info(this.fsName, this.subVolumeName, this.subVolumeGroupName)
+      .subscribe((resp: CephfsSubvolumeInfo) => {
+        // Disabled these fields since its not editable
+        this.subvolumeForm.get('subvolumeName').disable();
+        this.subvolumeForm.get('subvolumeGroupName').disable();
+        this.subvolumeForm.get('pool').disable();
+        this.subvolumeForm.get('uid').disable();
+        this.subvolumeForm.get('gid').disable();
+
+        this.subvolumeForm.get('isolatedNamespace').disable();
+        this.subvolumeForm.get('subvolumeName').setValue(this.subVolumeName);
+        this.subvolumeForm.get('subvolumeGroupName').setValue(this.subVolumeGroupName);
+        if (resp.bytes_quota !== 'infinite') {
+          this.subvolumeForm.get('size').setValue(this.dimlessBinary.transform(resp.bytes_quota));
+        }
+        this.subvolumeForm.get('uid').setValue(resp.uid);
+        this.subvolumeForm.get('gid').setValue(resp.gid);
+        this.subvolumeForm.get('isolatedNamespace').setValue(resp.pool_namespace);
+        this.initialMode = this.octalToHumanReadable.transform(resp.mode, true);
+
+        this.loadingReady();
+      });
+  }
+
+  submit() {
+    const subVolumeName = this.subvolumeForm.getValue('subvolumeName');
+    const subVolumeGroupName = this.subvolumeForm.getValue('subvolumeGroupName');
+    const pool = this.subvolumeForm.getValue('pool');
+    const size = this.formatter.toBytes(this.subvolumeForm.getValue('size')) || 0;
+    const uid = this.subvolumeForm.getValue('uid');
+    const gid = this.subvolumeForm.getValue('gid');
+    const mode = this.formatter.toOctalPermission(this.subvolumeForm.getValue('mode'));
+    const isolatedNamespace = this.subvolumeForm.getValue('isolatedNamespace');
+
+    if (this.isEdit) {
+      const editSize = size === 0 ? 'infinite' : size;
+      this.taskWrapper
+        .wrapTaskAroundCall({
+          task: new FinishedTask('cephfs/subvolume/' + URLVerbs.EDIT, {
+            subVolumeName: subVolumeName
+          }),
+          call: this.cephFsSubvolumeService.update(
+            this.fsName,
+            subVolumeName,
+            String(editSize),
+            subVolumeGroupName
+          )
+        })
+        .subscribe({
+          error: () => {
+            this.subvolumeForm.setErrors({ cdSubmitButton: true });
+          },
+          complete: () => {
+            this.activeModal.close();
+          }
+        });
+    } else {
+      this.taskWrapper
+        .wrapTaskAroundCall({
+          task: new FinishedTask('cephfs/subvolume/' + URLVerbs.CREATE, {
+            subVolumeName: subVolumeName
+          }),
+          call: this.cephFsSubvolumeService.create(
+            this.fsName,
+            subVolumeName,
+            subVolumeGroupName,
+            pool,
+            String(size),
+            uid,
+            gid,
+            mode,
+            isolatedNamespace
+          )
+        })
+        .subscribe({
+          error: () => {
+            this.subvolumeForm.setErrors({ cdSubmitButton: true });
+          },
+          complete: () => {
+            this.activeModal.close();
+          }
+        });
+    }
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.html
new file mode 100644 (file)
index 0000000..8b88c47
--- /dev/null
@@ -0,0 +1,54 @@
+
+<ng-container *ngIf="subvolumeGroup$ | async as subvolumeGroup">
+  <cd-table *ngIf="subvolumeGroup"
+            [data]="subvolumeGroup"
+            columnMode="flex"
+            [columns]="columns"
+            selectionType="single"
+            [hasDetails]="false"
+            (fetchData)="fetchData()"
+            (updateSelection)="updateSelection($event)">
+
+    <div class="table-actions btn-toolbar">
+      <cd-table-actions [permission]="permissions.cephfs"
+                        [selection]="selection"
+                        class="btn-group"
+                        id="cephfs-subvolumegropup-actions"
+                        [tableActions]="tableActions">
+      </cd-table-actions>
+    </div>
+  </cd-table>
+</ng-container>
+
+<ng-template #quotaUsageTpl
+             let-row="row">
+  <cd-usage-bar *ngIf="row.info.bytes_pcent && row.info.bytes_pcent !== 'undefined'; else noLimitTpl"
+                [total]="row.info.bytes_quota"
+                [used]="row.info.bytes_used"
+                [title]="row.name"
+                [showFreeToolTip]="false"
+                customLegend="Quota"
+                [customLegendValue]="row.info.bytes_quota"
+                decimals="2"></cd-usage-bar>
+
+  <ng-template #noLimitTpl>
+    <span ngbTooltip="Quota limit is not set"
+          *ngIf="row.info.bytes_pcent === 'undefined'"
+          i18n-ngbTooltip>
+      {{row.info.bytes_used | dimlessBinary}}</span>
+  </ng-template>
+</ng-template>
+
+<ng-template #typeTpl
+             let-value="value">
+  <cd-label [value]="value"></cd-label>
+</ng-template>
+
+<ng-template #modeToHumanReadableTpl
+             let-value="value">
+  <span *ngFor="let result of (value | octalToHumanReadable)"
+        [ngClass]="result.class"
+        [ngbTooltip]="result.toolTip">
+    {{ result.content }}
+  </span>
+</ng-template>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.spec.ts
new file mode 100644 (file)
index 0000000..0d84a13
--- /dev/null
@@ -0,0 +1,28 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CephfsSubvolumeGroupComponent } from './cephfs-subvolume-group.component';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ToastrModule } from 'ngx-toastr';
+import { RouterTestingModule } from '@angular/router/testing';
+import { SharedModule } from '~/app/shared/shared.module';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('CephfsSubvolumeGroupComponent', () => {
+  let component: CephfsSubvolumeGroupComponent;
+  let fixture: ComponentFixture<CephfsSubvolumeGroupComponent>;
+
+  configureTestBed({
+    declarations: [CephfsSubvolumeGroupComponent],
+    imports: [HttpClientTestingModule, SharedModule, ToastrModule.forRoot(), RouterTestingModule]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CephfsSubvolumeGroupComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-group/cephfs-subvolume-group.component.ts
new file mode 100644 (file)
index 0000000..3807ae6
--- /dev/null
@@ -0,0 +1,178 @@
+import { Component, Input, OnChanges, OnInit, ViewChild } from '@angular/core';
+import { Observable, ReplaySubject, of } from 'rxjs';
+import { catchError, shareReplay, switchMap } from 'rxjs/operators';
+
+import { CephfsSubvolumeGroupService } from '~/app/shared/api/cephfs-subvolume-group.service';
+import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { CdTableAction } from '~/app/shared/models/cd-table-action';
+import { CdTableColumn } from '~/app/shared/models/cd-table-column';
+import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
+import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
+import { CephfsSubvolumeGroup } from '~/app/shared/models/cephfs-subvolumegroup.model';
+import { CephfsSubvolumegroupFormComponent } from '../cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { Permissions } from '~/app/shared/models/permissions';
+import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { FinishedTask } from '~/app/shared/models/finished-task';
+import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
+
+@Component({
+  selector: 'cd-cephfs-subvolume-group',
+  templateUrl: './cephfs-subvolume-group.component.html',
+  styleUrls: ['./cephfs-subvolume-group.component.scss']
+})
+export class CephfsSubvolumeGroupComponent implements OnInit, OnChanges {
+  @ViewChild('quotaUsageTpl', { static: true })
+  quotaUsageTpl: any;
+
+  @ViewChild('typeTpl', { static: true })
+  typeTpl: any;
+
+  @ViewChild('modeToHumanReadableTpl', { static: true })
+  modeToHumanReadableTpl: any;
+
+  @ViewChild('nameTpl', { static: true })
+  nameTpl: any;
+
+  @ViewChild('quotaSizeTpl', { static: true })
+  quotaSizeTpl: any;
+
+  @Input()
+  fsName: any;
+  @Input() pools: any[];
+
+  columns: CdTableColumn[];
+  tableActions: CdTableAction[];
+  context: CdTableFetchDataContext;
+  selection = new CdTableSelection();
+  icons = Icons;
+  permissions: Permissions;
+
+  subvolumeGroup$: Observable<CephfsSubvolumeGroup[]>;
+  subject = new ReplaySubject<CephfsSubvolumeGroup[]>();
+
+  constructor(
+    private cephfsSubvolumeGroup: CephfsSubvolumeGroupService,
+    private actionLabels: ActionLabelsI18n,
+    private modalService: ModalService,
+    private authStorageService: AuthStorageService,
+    private taskWrapper: TaskWrapperService
+  ) {
+    this.permissions = this.authStorageService.getPermissions();
+  }
+
+  ngOnInit(): void {
+    this.columns = [
+      {
+        name: $localize`Name`,
+        prop: 'name',
+        flexGrow: 0.6,
+        cellTransformation: CellTemplate.bold
+      },
+      {
+        name: $localize`Data Pool`,
+        prop: 'info.data_pool',
+        flexGrow: 0.7,
+        cellTransformation: CellTemplate.badge,
+        customTemplateConfig: {
+          class: 'badge-background-primary'
+        }
+      },
+      {
+        name: $localize`Usage`,
+        prop: 'info.bytes_pcent',
+        flexGrow: 0.7,
+        cellTemplate: this.quotaUsageTpl,
+        cellClass: 'text-right'
+      },
+      {
+        name: $localize`Mode`,
+        prop: 'info.mode',
+        flexGrow: 0.5,
+        cellTemplate: this.modeToHumanReadableTpl
+      },
+      {
+        name: $localize`Created`,
+        prop: 'info.created_at',
+        flexGrow: 0.5,
+        cellTransformation: CellTemplate.timeAgo
+      }
+    ];
+
+    this.tableActions = [
+      {
+        name: this.actionLabels.CREATE,
+        permission: 'create',
+        icon: Icons.add,
+        click: () => this.openModal(),
+        canBePrimary: (selection: CdTableSelection) => !selection.hasSelection
+      },
+      {
+        name: this.actionLabels.EDIT,
+        permission: 'update',
+        icon: Icons.edit,
+        click: () => this.openModal(true)
+      },
+      {
+        name: this.actionLabels.REMOVE,
+        permission: 'delete',
+        icon: Icons.destroy,
+        click: () => this.removeSubVolumeModal()
+      }
+    ];
+
+    this.subvolumeGroup$ = this.subject.pipe(
+      switchMap(() =>
+        this.cephfsSubvolumeGroup.get(this.fsName).pipe(
+          catchError(() => {
+            this.context.error();
+            return of(null);
+          })
+        )
+      ),
+      shareReplay(1)
+    );
+  }
+
+  fetchData() {
+    this.subject.next();
+  }
+
+  ngOnChanges() {
+    this.subject.next();
+  }
+
+  updateSelection(selection: CdTableSelection) {
+    this.selection = selection;
+  }
+
+  openModal(edit = false) {
+    this.modalService.show(
+      CephfsSubvolumegroupFormComponent,
+      {
+        fsName: this.fsName,
+        subvolumegroupName: this.selection?.first()?.name,
+        pools: this.pools,
+        isEdit: edit
+      },
+      { size: 'lg' }
+    );
+  }
+
+  removeSubVolumeModal() {
+    const name = this.selection.first().name;
+    this.modalService.show(CriticalConfirmationModalComponent, {
+      itemDescription: 'subvolume group',
+      itemNames: [name],
+      actionDescription: 'remove',
+      submitActionObservable: () =>
+        this.taskWrapper.wrapTaskAroundCall({
+          task: new FinishedTask('cephfs/subvolume/group/remove', { subvolumegroupName: name }),
+          call: this.cephfsSubvolumeGroup.remove(this.fsName, name)
+        })
+    });
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.html
new file mode 100644 (file)
index 0000000..29731bb
--- /dev/null
@@ -0,0 +1,123 @@
+<div class="row">
+  <div class="col-sm-1">
+    <h3 i18n>Groups</h3>
+    <ng-container *ngIf="subVolumeGroups$ | async as subVolumeGroups">
+      <ul class="nav flex-column nav-pills">
+        <li class="nav-item">
+          <a class="nav-link"
+             [class.active]="!activeGroupName"
+             (click)="selectSubVolumeGroup()">Default</a>
+        </li>
+        <li class="nav-item"
+            *ngFor="let subVolumeGroup of subVolumeGroups">
+          <a class="nav-link text-decoration-none text-break"
+             [class.active]="subVolumeGroup.name === activeGroupName"
+             (click)="selectSubVolumeGroup(subVolumeGroup.name)">{{subVolumeGroup.name}}</a>
+        </li>
+      </ul>
+    </ng-container>
+  </div>
+  <div class="col-11 vertical-line">
+    <cd-table [data]="subVolumes$ | async"
+              columnMode="flex"
+              [columns]="columns"
+              selectionType="single"
+              [hasDetails]="false"
+              (fetchData)="fetchData()"
+              (updateSelection)="updateSelection($event)">
+
+      <div class="table-actions btn-toolbar">
+        <cd-table-actions [permission]="permissions.cephfs"
+                          [selection]="selection"
+                          class="btn-group"
+                          id="cephfs-subvolume-actions"
+                          [tableActions]="tableActions">
+        </cd-table-actions>
+      </div>
+    </cd-table>
+  </div>
+</div>
+
+<ng-template #quotaUsageTpl
+             let-row="row">
+  <cd-usage-bar *ngIf="row.info.bytes_pcent && row.info.bytes_pcent !== 'undefined'; else noLimitTpl"
+                [total]="row.info.bytes_quota"
+                [used]="row.info.bytes_used"
+                [title]="row.name"
+                [showFreeToolTip]="false"
+                customLegend="Quota"
+                [customLegendValue]="row.info.bytes_quota"
+                decimals="2"></cd-usage-bar>
+
+  <ng-template #noLimitTpl>
+    <span ngbTooltip="Quota limit is not set"
+          *ngIf="row.info.bytes_pcent === 'undefined'"
+          i18n-ngbTooltip>
+      {{row.info.bytes_used | dimlessBinary}}</span>
+  </ng-template>
+</ng-template>
+
+<ng-template #typeTpl
+             let-value="value">
+  <cd-label [value]="value"></cd-label>
+</ng-template>
+
+<ng-template #modeToHumanReadableTpl
+             let-value="value">
+  <span *ngFor="let result of (value | octalToHumanReadable)"
+        [ngClass]="result.class"
+        [ngbTooltip]="result.toolTip">
+    {{ result.content }}
+  </span>
+</ng-template>
+
+<ng-template #nameTpl
+             let-row="row">
+  <span class="fw-bold">{{row.name}}</span>
+
+  <span *ngIf="row.info.state === 'complete'; else snapshotRetainedTpl">
+    <i [ngClass]="[icons.success, icons.large]"
+       ngbTooltip="{{row.name}} is ready to use"
+       class="text-success"></i>
+  </span>
+
+  <ng-template #snapshotRetainedTpl>
+    <i [ngClass]="[icons.warning, icons.large]"
+       class="text-warning"
+       ngbTooltip="{{row.name}} is removed after retaining the snapshots"></i>
+  </ng-template>
+
+  <cd-label [value]="row.info.type"
+            *ngIf="row.info.type !== 'subvolume'"></cd-label>
+
+  <cd-label value="namespaced"
+            *ngIf="row.info.pool_namespace"
+            [tooltipText]="row.info.pool_namespace"></cd-label>
+</ng-template>
+
+<ng-template #removeTmpl
+             let-form="form">
+  <ng-container [formGroup]="form">
+    <ng-container formGroupName="child">
+      <cd-alert-panel *ngIf="errorMessage.length > 1"
+                      type="error">
+              {{errorMessage}}
+      </cd-alert-panel>
+      <div class="form-group">
+        <div class="custom-control custom-checkbox">
+          <input type="checkbox"
+                 class="custom-control-input"
+                 name="retainSnapshots"
+                 id="retainSnapshots"
+                 formControlName="retainSnapshots">
+          <label class="custom-control-label"
+                 for="retainSnapshots"
+                 i18n>Retain snapshots <cd-helper>The subvolume can be removed retaining
+                  existing snapshots using this option.
+                   If snapshots are retained, the subvolume is considered empty for all
+                    operations not involving the retained snapshots.</cd-helper></label>
+        </div>
+      </div>
+    </ng-container>
+  </ng-container>
+</ng-template>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.spec.ts
new file mode 100644 (file)
index 0000000..5adc9e6
--- /dev/null
@@ -0,0 +1,30 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CephfsSubvolumeListComponent } from './cephfs-subvolume-list.component';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { SharedModule } from '~/app/shared/shared.module';
+import { ToastrModule } from 'ngx-toastr';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('CephfsSubvolumeListComponent', () => {
+  let component: CephfsSubvolumeListComponent;
+  let fixture: ComponentFixture<CephfsSubvolumeListComponent>;
+
+  configureTestBed({
+    declarations: [CephfsSubvolumeListComponent],
+    imports: [HttpClientTestingModule, SharedModule, ToastrModule.forRoot(), RouterTestingModule],
+    providers: [NgbActiveModal]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CephfsSubvolumeListComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-list/cephfs-subvolume-list.component.ts
new file mode 100644 (file)
index 0000000..3f679d2
--- /dev/null
@@ -0,0 +1,241 @@
+import { Component, Input, OnChanges, OnInit, TemplateRef, ViewChild } from '@angular/core';
+import { Observable, ReplaySubject, of } from 'rxjs';
+import { catchError, shareReplay, switchMap } from 'rxjs/operators';
+import { CephfsSubvolumeService } from '~/app/shared/api/cephfs-subvolume.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { CellTemplate } from '~/app/shared/enum/cell-template.enum';
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { CdTableAction } from '~/app/shared/models/cd-table-action';
+import { CdTableColumn } from '~/app/shared/models/cd-table-column';
+import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
+import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
+import { CephfsSubvolume } from '~/app/shared/models/cephfs-subvolume.model';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { CephfsSubvolumeFormComponent } from '../cephfs-subvolume-form/cephfs-subvolume-form.component';
+import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { Permissions } from '~/app/shared/models/permissions';
+import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
+import { FinishedTask } from '~/app/shared/models/finished-task';
+import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
+import { FormControl } from '@angular/forms';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { CdForm } from '~/app/shared/forms/cd-form';
+import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { CephfsSubvolumeGroupService } from '~/app/shared/api/cephfs-subvolume-group.service';
+import { CephfsSubvolumeGroup } from '~/app/shared/models/cephfs-subvolumegroup.model';
+
+@Component({
+  selector: 'cd-cephfs-subvolume-list',
+  templateUrl: './cephfs-subvolume-list.component.html',
+  styleUrls: ['./cephfs-subvolume-list.component.scss']
+})
+export class CephfsSubvolumeListComponent extends CdForm implements OnInit, OnChanges {
+  @ViewChild('quotaUsageTpl', { static: true })
+  quotaUsageTpl: any;
+
+  @ViewChild('typeTpl', { static: true })
+  typeTpl: any;
+
+  @ViewChild('modeToHumanReadableTpl', { static: true })
+  modeToHumanReadableTpl: any;
+
+  @ViewChild('nameTpl', { static: true })
+  nameTpl: any;
+
+  @ViewChild('quotaSizeTpl', { static: true })
+  quotaSizeTpl: any;
+
+  @ViewChild('removeTmpl', { static: true })
+  removeTmpl: TemplateRef<any>;
+
+  @Input() fsName: string;
+  @Input() pools: any[];
+
+  columns: CdTableColumn[] = [];
+  tableActions: CdTableAction[];
+  context: CdTableFetchDataContext;
+  selection = new CdTableSelection();
+  removeForm: CdFormGroup;
+  icons = Icons;
+  permissions: Permissions;
+  modalRef: NgbModalRef;
+  errorMessage: string = '';
+  selectedName: string = '';
+
+  subVolumes$: Observable<CephfsSubvolume[]>;
+  subVolumeGroups$: Observable<CephfsSubvolumeGroup[]>;
+  subject = new ReplaySubject<CephfsSubvolume[]>();
+  groupsSubject = new ReplaySubject<CephfsSubvolume[]>();
+
+  activeGroupName: string = '';
+
+  constructor(
+    private cephfsSubVolume: CephfsSubvolumeService,
+    private actionLabels: ActionLabelsI18n,
+    private modalService: ModalService,
+    private authStorageService: AuthStorageService,
+    private taskWrapper: TaskWrapperService,
+    private cephfsSubvolumeGroupService: CephfsSubvolumeGroupService
+  ) {
+    super();
+    this.permissions = this.authStorageService.getPermissions();
+  }
+
+  ngOnInit(): void {
+    this.columns = [
+      {
+        name: $localize`Name`,
+        prop: 'name',
+        flexGrow: 1,
+        cellTemplate: this.nameTpl
+      },
+      {
+        name: $localize`Data Pool`,
+        prop: 'info.data_pool',
+        flexGrow: 0.7,
+        cellTransformation: CellTemplate.badge,
+        customTemplateConfig: {
+          class: 'badge-background-primary'
+        }
+      },
+      {
+        name: $localize`Usage`,
+        prop: 'info.bytes_pcent',
+        flexGrow: 0.7,
+        cellTemplate: this.quotaUsageTpl,
+        cellClass: 'text-right'
+      },
+      {
+        name: $localize`Path`,
+        prop: 'info.path',
+        flexGrow: 1,
+        cellTransformation: CellTemplate.path
+      },
+      {
+        name: $localize`Mode`,
+        prop: 'info.mode',
+        flexGrow: 0.5,
+        cellTemplate: this.modeToHumanReadableTpl
+      },
+      {
+        name: $localize`Created`,
+        prop: 'info.created_at',
+        flexGrow: 0.5,
+        cellTransformation: CellTemplate.timeAgo
+      }
+    ];
+
+    this.tableActions = [
+      {
+        name: this.actionLabels.CREATE,
+        permission: 'create',
+        icon: Icons.add,
+        click: () => this.openModal()
+      },
+      {
+        name: this.actionLabels.EDIT,
+        permission: 'update',
+        icon: Icons.edit,
+        click: () => this.openModal(true)
+      },
+      {
+        name: this.actionLabels.REMOVE,
+        permission: 'delete',
+        icon: Icons.destroy,
+        click: () => this.removeSubVolumeModal()
+      }
+    ];
+
+    this.getSubVolumes();
+
+    this.subVolumeGroups$ = this.groupsSubject.pipe(
+      switchMap(() =>
+        this.cephfsSubvolumeGroupService.get(this.fsName).pipe(
+          catchError(() => {
+            this.context.error();
+            return of(null);
+          })
+        )
+      )
+    );
+  }
+
+  fetchData() {
+    this.subject.next();
+  }
+
+  ngOnChanges() {
+    this.subject.next();
+    this.groupsSubject.next();
+  }
+
+  updateSelection(selection: CdTableSelection) {
+    this.selection = selection;
+  }
+
+  openModal(edit = false) {
+    this.modalService.show(
+      CephfsSubvolumeFormComponent,
+      {
+        fsName: this.fsName,
+        subVolumeName: this.selection?.first()?.name,
+        subVolumeGroupName: this.activeGroupName,
+        pools: this.pools,
+        isEdit: edit
+      },
+      { size: 'lg' }
+    );
+  }
+
+  removeSubVolumeModal() {
+    this.removeForm = new CdFormGroup({
+      retainSnapshots: new FormControl(false)
+    });
+    this.errorMessage = '';
+    this.selectedName = this.selection.first().name;
+    this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+      actionDescription: 'Remove',
+      itemNames: [this.selectedName],
+      itemDescription: 'Subvolume',
+      childFormGroup: this.removeForm,
+      childFormGroupTemplate: this.removeTmpl,
+      submitAction: () =>
+        this.taskWrapper
+          .wrapTaskAroundCall({
+            task: new FinishedTask('cephfs/subvolume/remove', { subVolumeName: this.selectedName }),
+            call: this.cephfsSubVolume.remove(
+              this.fsName,
+              this.selectedName,
+              this.activeGroupName,
+              this.removeForm.getValue('retainSnapshots')
+            )
+          })
+          .subscribe({
+            complete: () => this.modalRef.close(),
+            error: (error) => {
+              this.modalRef.componentInstance.stopLoadingSpinner();
+              this.errorMessage = error.error.detail;
+            }
+          })
+    });
+  }
+
+  selectSubVolumeGroup(subVolumeGroupName: string) {
+    this.activeGroupName = subVolumeGroupName;
+    this.getSubVolumes(subVolumeGroupName);
+  }
+
+  getSubVolumes(subVolumeGroupName = '') {
+    this.subVolumes$ = this.subject.pipe(
+      switchMap(() =>
+        this.cephfsSubVolume.get(this.fsName, subVolumeGroupName).pipe(
+          catchError(() => {
+            this.context.error();
+            return of(null);
+          })
+        )
+      ),
+      shareReplay(1)
+    );
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.html
new file mode 100644 (file)
index 0000000..58bb860
--- /dev/null
@@ -0,0 +1,148 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">{{ action | titlecase }} {{ resource | upperFirst }}</ng-container>
+
+  <ng-container class="modal-content"
+                *cdFormLoading="loading">
+    <form name="subvolumegroupForm"
+          #formDir="ngForm"
+          [formGroup]="subvolumegroupForm"
+          novalidate>
+      <div class="modal-body">
+        <div class="form-group row">
+          <label class="cd-col-form-label required"
+                 for="subvolumegroupName"
+                 i18n>Name</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="text"
+                   placeholder="subvolumegroup name..."
+                   id="subvolumegroupName"
+                   name="subvolumegroupName"
+                   formControlName="subvolumegroupName"
+                   autofocus>
+            <span class="invalid-feedback"
+                  *ngIf="subvolumegroupForm.showError('subvolumegroupName', formDir, 'required')"
+                  i18n>This field is required.</span>
+            <span class="invalid-feedback"
+                  *ngIf="subvolumegroupForm.showError('subvolumegroupName', formDir, 'notUnique')"
+                  i18n>The subvolume group already exists.</span>
+            <span *ngIf="subvolumegroupForm.showError('subvolumegroupName', formDir, 'pattern')"
+                  class="invalid-feedback"
+                  i18n>Subvolume name can only contain letters, numbers, '.', '-' or '_'</span>
+          </div>
+        </div>
+
+        <!-- Volume name -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="volumeName"
+                 i18n>Volume name</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   id="volumeName"
+                   name="volumeName"
+                   formControlName="volumeName">
+          </div>
+        </div>
+
+        <!-- Size -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="size"
+                 i18n>Size
+            <cd-helper>The size of the subvolume group is specified by setting a quota on it.
+            If left blank or put 0, then quota will be infinite</cd-helper>
+          </label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="text"
+                   id="size"
+                   name="size"
+                   formControlName="size"
+                   i18n-placeholder
+                   placeholder="e.g., 10GiB"
+                   defaultUnit="GiB"
+                   cdDimlessBinary>
+            <span *ngIf="subvolumegroupForm.showError('size', formDir, 'pattern')"
+                  class="invalid-feedback"
+                  i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
+          </div>
+        </div>
+
+        <!-- CephFS Pools -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="pool"
+                 i18n>Pool
+            <cd-helper>By default, the data_pool_layout of the parent directory is selected.</cd-helper>
+          </label>
+          <div class="cd-col-form-input">
+            <select class="form-select"
+                    id="pool"
+                    name="pool"
+                    formControlName="pool">
+              <option *ngFor="let pool of dataPools"
+                      [value]="pool.pool">{{ pool.pool }}</option>
+            </select>
+          </div>
+        </div>
+
+        <!-- UID -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="uid"
+                 i18n>UID</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="number"
+                   placeholder="subvolumegroup UID..."
+                   id="uid"
+                   name="uid"
+                   formControlName="uid">
+          </div>
+        </div>
+
+        <!-- GID -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="gid"
+                 i18n>GID</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="number"
+                   placeholder="subvolumegroup GID..."
+                   id="gid"
+                   name="gid"
+                   formControlName="gid">
+          </div>
+        </div>
+
+        <!-- Mode -->
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="mode"
+                 i18n>Mode
+            <cd-helper>Permissions for the directory. Default mode is 755 which is rwxr-xr-x</cd-helper>
+          </label>
+          <div class="cd-col-form-input">
+            <cd-checked-table-form [data]="scopePermissions"
+                                   [columns]="columns"
+                                   [form]="subvolumegroupForm"
+                                   inputField="mode"
+                                   [isTableForOctalMode]="true"
+                                   [initialValue]="initialMode"
+                                   [scopes]="scopes"
+                                   [isDisabled]="isEdit"></cd-checked-table-form>
+          </div>
+        </div>
+      </div>
+
+      <div class="modal-footer">
+        <cd-form-button-panel (submitActionEvent)="submit()"
+                              [form]="subvolumegroupForm"
+                              [submitText]="(action | titlecase) + ' ' + (resource | upperFirst)"></cd-form-button-panel>
+      </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.spec.ts
new file mode 100644 (file)
index 0000000..cf9993b
--- /dev/null
@@ -0,0 +1,38 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CephfsSubvolumegroupFormComponent } from './cephfs-subvolumegroup-form.component';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('CephfsSubvolumegroupFormComponent', () => {
+  let component: CephfsSubvolumegroupFormComponent;
+  let fixture: ComponentFixture<CephfsSubvolumegroupFormComponent>;
+
+  configureTestBed({
+    declarations: [CephfsSubvolumegroupFormComponent],
+    providers: [NgbActiveModal],
+    imports: [
+      SharedModule,
+      ToastrModule.forRoot(),
+      ReactiveFormsModule,
+      HttpClientTestingModule,
+      RouterTestingModule
+    ]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CephfsSubvolumegroupFormComponent);
+    component = fixture.componentInstance;
+    component.pools = [];
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component.ts
new file mode 100644 (file)
index 0000000..8ecf1ea
--- /dev/null
@@ -0,0 +1,198 @@
+import { Component, OnInit } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { CephfsSubvolumeGroupService } from '~/app/shared/api/cephfs-subvolume-group.service';
+import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { FinishedTask } from '~/app/shared/models/finished-task';
+import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
+import { Pool } from '../../pool/pool';
+import { FormatterService } from '~/app/shared/services/formatter.service';
+import { CdTableColumn } from '~/app/shared/models/cd-table-column';
+import _ from 'lodash';
+import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { CdForm } from '~/app/shared/forms/cd-form';
+import { DimlessBinaryPipe } from '~/app/shared/pipes/dimless-binary.pipe';
+import { OctalToHumanReadablePipe } from '~/app/shared/pipes/octal-to-human-readable.pipe';
+
+@Component({
+  selector: 'cd-cephfs-subvolumegroup-form',
+  templateUrl: './cephfs-subvolumegroup-form.component.html',
+  styleUrls: ['./cephfs-subvolumegroup-form.component.scss']
+})
+export class CephfsSubvolumegroupFormComponent extends CdForm implements OnInit {
+  fsName: string;
+  subvolumegroupName: string;
+  pools: Pool[];
+  isEdit: boolean = false;
+
+  subvolumegroupForm: CdFormGroup;
+
+  action: string;
+  resource: string;
+
+  dataPools: Pool[];
+
+  columns: CdTableColumn[];
+  scopePermissions: Array<any> = [];
+  initialMode = {
+    owner: ['read', 'write', 'execute'],
+    group: ['read', 'execute'],
+    others: ['read', 'execute']
+  };
+  scopes: string[] = ['owner', 'group', 'others'];
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    private actionLabels: ActionLabelsI18n,
+    private taskWrapper: TaskWrapperService,
+    private cephfsSubvolumeGroupService: CephfsSubvolumeGroupService,
+    private formatter: FormatterService,
+    private dimlessBinary: DimlessBinaryPipe,
+    private octalToHumanReadable: OctalToHumanReadablePipe
+  ) {
+    super();
+    this.resource = $localize`subvolume group`;
+  }
+
+  ngOnInit(): void {
+    this.action = this.actionLabels.CREATE;
+    this.columns = [
+      {
+        prop: 'scope',
+        name: $localize`All`,
+        flexGrow: 0.5
+      },
+      {
+        prop: 'read',
+        name: $localize`Read`,
+        flexGrow: 0.5,
+        cellClass: 'text-center'
+      },
+      {
+        prop: 'write',
+        name: $localize`Write`,
+        flexGrow: 0.5,
+        cellClass: 'text-center'
+      },
+      {
+        prop: 'execute',
+        name: $localize`Execute`,
+        flexGrow: 0.5,
+        cellClass: 'text-center'
+      }
+    ];
+
+    this.dataPools = this.pools.filter((pool) => pool.type === 'data');
+    this.createForm();
+
+    this.isEdit ? this.populateForm() : this.loadingReady();
+  }
+
+  createForm() {
+    this.subvolumegroupForm = new CdFormGroup({
+      volumeName: new FormControl({ value: this.fsName, disabled: true }),
+      subvolumegroupName: new FormControl('', {
+        validators: [Validators.required, Validators.pattern(/^[.A-Za-z0-9_-]+$/)],
+        asyncValidators: [
+          CdValidators.unique(
+            this.cephfsSubvolumeGroupService.exists,
+            this.cephfsSubvolumeGroupService,
+            null,
+            null,
+            this.fsName
+          )
+        ]
+      }),
+      pool: new FormControl(this.dataPools[0]?.pool, {
+        validators: [Validators.required]
+      }),
+      size: new FormControl(null, {
+        updateOn: 'blur'
+      }),
+      uid: new FormControl(null),
+      gid: new FormControl(null),
+      mode: new FormControl({})
+    });
+  }
+
+  populateForm() {
+    this.action = this.actionLabels.EDIT;
+    this.cephfsSubvolumeGroupService
+      .info(this.fsName, this.subvolumegroupName)
+      .subscribe((resp: any) => {
+        // Disabled these fields since its not editable
+        this.subvolumegroupForm.get('subvolumegroupName').disable();
+        this.subvolumegroupForm.get('pool').disable();
+        this.subvolumegroupForm.get('uid').disable();
+        this.subvolumegroupForm.get('gid').disable();
+
+        this.subvolumegroupForm.get('subvolumegroupName').setValue(this.subvolumegroupName);
+        if (resp.bytes_quota !== 'infinite') {
+          this.subvolumegroupForm
+            .get('size')
+            .setValue(this.dimlessBinary.transform(resp.bytes_quota));
+        }
+        this.subvolumegroupForm.get('uid').setValue(resp.uid);
+        this.subvolumegroupForm.get('gid').setValue(resp.gid);
+        this.initialMode = this.octalToHumanReadable.transform(resp.mode, true);
+
+        this.loadingReady();
+      });
+  }
+
+  submit() {
+    const subvolumegroupName = this.subvolumegroupForm.getValue('subvolumegroupName');
+    const pool = this.subvolumegroupForm.getValue('pool');
+    const size = this.formatter.toBytes(this.subvolumegroupForm.getValue('size')) || 0;
+    const uid = this.subvolumegroupForm.getValue('uid');
+    const gid = this.subvolumegroupForm.getValue('gid');
+    const mode = this.formatter.toOctalPermission(this.subvolumegroupForm.getValue('mode'));
+    if (this.isEdit) {
+      const editSize = size === 0 ? 'infinite' : size;
+      this.taskWrapper
+        .wrapTaskAroundCall({
+          task: new FinishedTask('cephfs/subvolume/group/' + URLVerbs.EDIT, {
+            subvolumegroupName: subvolumegroupName
+          }),
+          call: this.cephfsSubvolumeGroupService.update(
+            this.fsName,
+            subvolumegroupName,
+            String(editSize)
+          )
+        })
+        .subscribe({
+          error: () => {
+            this.subvolumegroupForm.setErrors({ cdSubmitButton: true });
+          },
+          complete: () => {
+            this.activeModal.close();
+          }
+        });
+    } else {
+      this.taskWrapper
+        .wrapTaskAroundCall({
+          task: new FinishedTask('cephfs/subvolume/group/' + URLVerbs.CREATE, {
+            subvolumegroupName: subvolumegroupName
+          }),
+          call: this.cephfsSubvolumeGroupService.create(
+            this.fsName,
+            subvolumegroupName,
+            pool,
+            String(size),
+            uid,
+            gid,
+            mode
+          )
+        })
+        .subscribe({
+          error: () => {
+            this.subvolumegroupForm.setErrors({ cdSubmitButton: true });
+          },
+          complete: () => {
+            this.activeModal.close();
+          }
+        });
+    }
+  }
+}
index b8db2e6b327be19a9908de9da6fb8d3894a24349..0ad69ccf50a335f2577247d4d88073a0aa1ed61a 100644 (file)
         </cd-cephfs-detail>
       </ng-template>
     </ng-container>
+    <ng-container ngbNavItem="subvolumes">
+      <a ngbNavLink
+         i18n>Subvolumes</a>
+      <ng-template ngbNavContent>
+        <cd-cephfs-subvolume-list [fsName]="selection.mdsmap.fs_name"
+                                  [pools]="details.pools"></cd-cephfs-subvolume-list>
+      </ng-template>
+    </ng-container>
+    <ng-container ngbNavItem="subvolume-groups">
+      <a ngbNavLink
+         i18n>Subvolume groups</a>
+      <ng-template ngbNavContent>
+        <cd-cephfs-subvolume-group [fsName]="selection.mdsmap.fs_name"
+                                   [pools]="details.pools">
+        </cd-cephfs-subvolume-group>
+      </ng-template>
+    </ng-container>
     <ng-container ngbNavItem="clients">
       <a ngbNavLink>
         <ng-container i18n>Clients</ng-container>
index 41b58a0a36b124e14fa2d499175a39cbef99fa11..a83e0f16870fcef7737f0f4c389b64232041dacf 100644 (file)
@@ -1,8 +1,9 @@
 import { CommonModule } from '@angular/common';
 import { NgModule } from '@angular/core';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 
 import { TreeModule } from '@circlon/angular-tree-component';
-import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
+import { NgbNavModule, NgbTooltipModule, NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
 import { ChartsModule } from 'ng2-charts';
 
 import { AppRoutingModule } from '~/app/app-routing.module';
@@ -11,18 +12,40 @@ import { CephfsChartComponent } from './cephfs-chart/cephfs-chart.component';
 import { CephfsClientsComponent } from './cephfs-clients/cephfs-clients.component';
 import { CephfsDetailComponent } from './cephfs-detail/cephfs-detail.component';
 import { CephfsDirectoriesComponent } from './cephfs-directories/cephfs-directories.component';
+import { CephfsVolumeFormComponent } from './cephfs-form/cephfs-form.component';
 import { CephfsListComponent } from './cephfs-list/cephfs-list.component';
 import { CephfsTabsComponent } from './cephfs-tabs/cephfs-tabs.component';
+import { CephfsSubvolumeListComponent } from './cephfs-subvolume-list/cephfs-subvolume-list.component';
+import { CephfsSubvolumeFormComponent } from './cephfs-subvolume-form/cephfs-subvolume-form.component';
+import { CephfsSubvolumeGroupComponent } from './cephfs-subvolume-group/cephfs-subvolume-group.component';
+import { CephfsSubvolumegroupFormComponent } from './cephfs-subvolumegroup-form/cephfs-subvolumegroup-form.component';
 
 @NgModule({
-  imports: [CommonModule, SharedModule, AppRoutingModule, ChartsModule, TreeModule, NgbNavModule],
+  imports: [
+    CommonModule,
+    SharedModule,
+    AppRoutingModule,
+    ChartsModule,
+    TreeModule,
+    NgbNavModule,
+    FormsModule,
+    ReactiveFormsModule,
+    NgbTypeaheadModule,
+    NgbTooltipModule
+  ],
   declarations: [
     CephfsDetailComponent,
     CephfsClientsComponent,
     CephfsChartComponent,
     CephfsListComponent,
     CephfsTabsComponent,
-    CephfsDirectoriesComponent
+    CephfsVolumeFormComponent,
+    CephfsDirectoriesComponent,
+    CephfsSubvolumeListComponent,
+    CephfsSubvolumeFormComponent,
+    CephfsDirectoriesComponent,
+    CephfsSubvolumeGroupComponent,
+    CephfsSubvolumegroupFormComponent
   ]
 })
 export class CephfsModule {}
index 610bb79baebc781eea8a1f2e4f78a40b04ea007d..74657ec4010f0ef58c20cf9a9b0732ab86e9cbc8 100644 (file)
@@ -10,6 +10,7 @@ import {
   NgbDropdownModule,
   NgbNavModule,
   NgbPopoverModule,
+  NgbProgressbarModule,
   NgbTimepickerModule,
   NgbTooltipModule,
   NgbTypeaheadModule
@@ -57,6 +58,9 @@ import { ServiceDetailsComponent } from './services/service-details/service-deta
 import { ServiceFormComponent } from './services/service-form/service-form.component';
 import { ServicesComponent } from './services/services.component';
 import { TelemetryComponent } from './telemetry/telemetry.component';
+import { UpgradeComponent } from './upgrade/upgrade.component';
+import { UpgradeStartModalComponent } from './upgrade/upgrade-form/upgrade-start-modal.component';
+import { UpgradeProgressComponent } from './upgrade/upgrade-progress/upgrade-progress.component';
 
 @NgModule({
   imports: [
@@ -76,7 +80,8 @@ import { TelemetryComponent } from './telemetry/telemetry.component';
     NgbDatepickerModule,
     NgbPopoverModule,
     NgbDropdownModule,
-    NgxPipeFunctionModule
+    NgxPipeFunctionModule,
+    NgbProgressbarModule
   ],
   declarations: [
     HostsComponent,
@@ -116,7 +121,10 @@ import { TelemetryComponent } from './telemetry/telemetry.component';
     OsdFlagsIndivModalComponent,
     PlacementPipe,
     CreateClusterComponent,
-    CreateClusterReviewComponent
+    CreateClusterReviewComponent,
+    UpgradeComponent,
+    UpgradeStartModalComponent,
+    UpgradeProgressComponent
   ],
   providers: [NgbActiveModal]
 })
index 18099109d5db4e162a5193e056ddfc1e6f020f4e..b6e9e700be464250c91d66dd7f6380ba0a46bdb8 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormControl, FormGroup, ValidatorFn } from '@angular/forms';
+import { UntypedFormControl, UntypedFormGroup, ValidatorFn } from '@angular/forms';
 import { ActivatedRoute, Router } from '@angular/router';
 
 import _ from 'lodash';
@@ -43,17 +43,17 @@ export class ConfigurationFormComponent extends CdForm implements OnInit {
 
   createForm() {
     const formControls = {
-      name: new FormControl({ value: null }),
-      desc: new FormControl({ value: null }),
-      long_desc: new FormControl({ value: null }),
-      values: new FormGroup({}),
-      default: new FormControl({ value: null }),
-      daemon_default: new FormControl({ value: null }),
-      services: new FormControl([])
+      name: new UntypedFormControl({ value: null }),
+      desc: new UntypedFormControl({ value: null }),
+      long_desc: new UntypedFormControl({ value: null }),
+      values: new UntypedFormGroup({}),
+      default: new UntypedFormControl({ value: null }),
+      daemon_default: new UntypedFormControl({ value: null }),
+      services: new UntypedFormControl([])
     };
 
     this.availSections.forEach((section) => {
-      formControls.values.addControl(section, new FormControl(null));
+      formControls.values.addControl(section, new UntypedFormControl(null));
     });
 
     this.configForm = new CdFormGroup(formControls);
index 4490b4e441c9942188ef417a13b755c36a0f661c..964fd7594e79cb01be44f990e245c6825b896f2d 100644 (file)
@@ -5,6 +5,7 @@ import _ from 'lodash';
 import { CephServiceService } from '~/app/shared/api/ceph-service.service';
 import { HostService } from '~/app/shared/api/host.service';
 import { OsdService } from '~/app/shared/api/osd.service';
+import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
 import { CephServiceSpec } from '~/app/shared/models/service.interface';
 import { DimlessBinaryPipe } from '~/app/shared/pipes/dimless-binary.pipe';
 import { WizardStepsService } from '~/app/shared/services/wizard-steps.service';
@@ -39,7 +40,8 @@ export class CreateClusterReviewComponent implements OnInit {
     let dbDevices = 0;
     let dbDeviceCapacity = 0;
 
-    this.hostService.list('true').subscribe((resp: object[]) => {
+    const hostContext = new CdTableFetchDataContext(() => undefined);
+    this.hostService.list(hostContext.toParams(), 'true').subscribe((resp: object[]) => {
       this.hosts = resp;
       this.hostsCount = this.hosts.length;
       _.forEach(this.hosts, (hostKey) => {
index dc455ca0629aa6a8813449c540cd6bd03b50db34..670a3e00dfe5bbcee3b47c2fd16b5b3560bed637 100644 (file)
@@ -20,6 +20,7 @@ import { OsdService } from '~/app/shared/api/osd.service';
 import { ConfirmationModalComponent } from '~/app/shared/components/confirmation-modal/confirmation-modal.component';
 import { ActionLabelsI18n, AppConstants, URLVerbs } from '~/app/shared/constants/app.constants';
 import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
 import { FinishedTask } from '~/app/shared/models/finished-task';
 import { DeploymentOptions } from '~/app/shared/models/osd-deployment-options';
 import { Permissions } from '~/app/shared/models/permissions';
@@ -119,7 +120,8 @@ export class CreateClusterComponent implements OnInit, OnDestroy {
 
   onSubmit() {
     if (!this.stepsToSkip['Add Hosts']) {
-      this.hostService.list('false').subscribe((hosts) => {
+      const hostContext = new CdTableFetchDataContext(() => undefined);
+      this.hostService.list(hostContext.toParams(), 'false').subscribe((hosts) => {
         hosts.forEach((host) => {
           const index = host['labels'].indexOf('_no_schedule', 0);
           if (index > -1) {
index 9031ca5f78ad08c992d6c2684dad18b8dc179b54..240a0a7bebbd1306779c1f2157f25efa99382913 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 import { Router } from '@angular/router';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
@@ -12,6 +12,7 @@ import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants
 import { CdForm } from '~/app/shared/forms/cd-form';
 import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
 import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
 import { FinishedTask } from '~/app/shared/models/finished-task';
 import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
 
@@ -57,7 +58,8 @@ export class HostFormComponent extends CdForm implements OnInit {
       this.pageURL = 'hosts';
     }
     this.createForm();
-    this.hostService.list('false').subscribe((resp: any[]) => {
+    const hostContext = new CdTableFetchDataContext(() => undefined);
+    this.hostService.list(hostContext.toParams(), 'false').subscribe((resp: any[]) => {
       this.hostnames = resp.map((host) => {
         return host['hostname'];
       });
@@ -80,7 +82,7 @@ export class HostFormComponent extends CdForm implements OnInit {
 
   private createForm() {
     this.hostForm = new CdFormGroup({
-      hostname: new FormControl('', {
+      hostname: new UntypedFormControl('', {
         validators: [
           Validators.required,
           CdValidators.custom('uniqueName', (hostname: string) => {
@@ -88,11 +90,11 @@ export class HostFormComponent extends CdForm implements OnInit {
           })
         ]
       }),
-      addr: new FormControl('', {
+      addr: new UntypedFormControl('', {
         validators: [CdValidators.ip()]
       }),
-      labels: new FormControl([]),
-      maintenance: new FormControl(false)
+      labels: new UntypedFormControl([]),
+      maintenance: new UntypedFormControl(false)
     });
   }
 
index 1aeaef1f95fb3758fbc47dbae7614e6043ff692a..9b997ce2f6bbc548f9752f1c3aeeb42d1900c7a0 100644 (file)
@@ -13,6 +13,9 @@
                 selectionType="single"
                 [searchableObjects]="true"
                 [hasDetails]="hasTableDetails"
+                [serverSide]="true"
+                [count]="count"
+                [maxLimit]="25"
                 (setExpandedRow)="setExpandedRow($event)"
                 (updateSelection)="updateSelection($event)"
                 [toolHeader]="!hideToolHeader">
index 2e76d1f43ed63645d9e1497d9883b76690ac9bd1..43be6e8c758227d52aa6e7fb6dddca8c38920e17 100644 (file)
@@ -1,3 +1,4 @@
+import { HttpHeaders } from '@angular/common/http';
 import { HttpClientTestingModule } from '@angular/common/http/testing';
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
@@ -45,6 +46,7 @@ describe('HostsComponent', () => {
   let hostListSpy: jasmine.Spy;
   let orchService: OrchestratorService;
   let showForceMaintenanceModal: MockShowForceMaintenanceModal;
+  let headers: HttpHeaders;
 
   const fakeAuthStorageService = {
     getPermissions: () => {
@@ -75,6 +77,7 @@ describe('HostsComponent', () => {
     component = fixture.componentInstance;
     hostListSpy = spyOn(TestBed.inject(HostService), 'list');
     orchService = TestBed.inject(OrchestratorService);
+    headers = new HttpHeaders().set('x-total-count', '10');
   });
 
   it('should create', () => {
@@ -100,11 +103,13 @@ describe('HostsComponent', () => {
           }
         ],
         hostname: hostname,
-        labels: ['foo', 'bar']
+        labels: ['foo', 'bar'],
+        headers: headers
       }
     ];
 
     OrchestratorHelper.mockStatus(false);
+    fixture.detectChanges();
     hostListSpy.and.callFake(() => of(payload));
     fixture.detectChanges();
 
@@ -136,11 +141,13 @@ describe('HostsComponent', () => {
           }
         ],
         hostname: hostname,
-        labels: ['foo', 'bar']
+        labels: ['foo', 'bar'],
+        headers: headers
       }
     ];
 
     OrchestratorHelper.mockStatus(false);
+    fixture.detectChanges();
     hostListSpy.and.callFake(() => of(payload));
     fixture.detectChanges();
 
@@ -173,10 +180,12 @@ describe('HostsComponent', () => {
         hdd_capacity_bytes: 1024,
         flash_count: 4,
         flash_capacity_bytes: 1024,
-        nic_count: 1
+        nic_count: 1,
+        headers: headers
       }
     ];
     OrchestratorHelper.mockStatus(true, features);
+    fixture.detectChanges();
     hostListSpy.and.callFake(() => of(payload));
     fixture.detectChanges();
 
@@ -200,10 +209,12 @@ describe('HostsComponent', () => {
             type: 'osd',
             id: '0'
           }
-        ]
+        ],
+        headers: headers
       }
     ];
     OrchestratorHelper.mockStatus(false);
+    fixture.detectChanges();
     hostListSpy.and.callFake(() => of(payload));
     fixture.detectChanges();
 
@@ -225,10 +236,12 @@ describe('HostsComponent', () => {
             type: 'osd',
             id: '0'
           }
-        ]
+        ],
+        headers: headers
       }
     ];
     OrchestratorHelper.mockStatus(true);
+    fixture.detectChanges();
     hostListSpy.and.callFake(() => of(payload));
     fixture.detectChanges();
 
@@ -260,10 +273,12 @@ describe('HostsComponent', () => {
         hdd_capacity_bytes: undefined,
         flash_count: 4,
         flash_capacity_bytes: undefined,
-        nic_count: 1
+        nic_count: 1,
+        headers: headers
       }
     ];
     OrchestratorHelper.mockStatus(true, features);
+    fixture.detectChanges();
     hostListSpy.and.callFake(() => of(hostPayload));
     fixture.detectChanges();
 
@@ -307,7 +322,10 @@ describe('HostsComponent', () => {
     const fakeHosts = require('./fixtures/host_list_response.json');
 
     beforeEach(() => {
-      hostListSpy.and.callFake(() => of(fakeHosts));
+      let headers = new HttpHeaders().set('x-total-count', '10');
+      headers = headers.set('x-total-count', '10');
+      fakeHosts[0].headers = headers;
+      fakeHosts[1].headers = headers;
     });
 
     const testTableActions = async (
@@ -319,6 +337,9 @@ describe('HostsComponent', () => {
       fixture.detectChanges();
       await fixture.whenStable();
 
+      component.getHosts(new CdTableFetchDataContext(() => undefined));
+      hostListSpy.and.callFake(() => of(fakeHosts));
+      fixture.detectChanges();
       for (const test of tests) {
         if (test.selectRow) {
           component.selection = new CdTableSelection();
index 3bdda8aca3ef4d79ddfd2e35ed241969f105977a..0caeac9f2eb8f797bffc7d58f3dd89fa4bc777d1 100644 (file)
@@ -29,6 +29,7 @@ import { Permissions } from '~/app/shared/models/permissions';
 import { DimlessBinaryPipe } from '~/app/shared/pipes/dimless-binary.pipe';
 import { EmptyPipe } from '~/app/shared/pipes/empty.pipe';
 import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { CdTableServerSideService } from '~/app/shared/services/cd-table-server-side.service';
 import { ModalService } from '~/app/shared/services/modal.service';
 import { NotificationService } from '~/app/shared/services/notification.service';
 import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
@@ -89,6 +90,8 @@ export class HostsComponent extends ListWithDetails implements OnDestroy, OnInit
   bsModalRef: NgbModalRef;
 
   icons = Icons;
+  private tableContext: CdTableFetchDataContext = null;
+  count = 5;
 
   messages = {
     nonOrchHost: $localize`The feature is disabled because the selected host is not managed by Orchestrator.`
@@ -483,6 +486,12 @@ export class HostsComponent extends ListWithDetails implements OnDestroy, OnInit
   }
 
   getHosts(context: CdTableFetchDataContext) {
+    if (context !== null) {
+      this.tableContext = context;
+    }
+    if (this.tableContext == null) {
+      this.tableContext = new CdTableFetchDataContext(() => undefined);
+    }
     if (this.isLoadingHosts) {
       return;
     }
@@ -493,11 +502,11 @@ export class HostsComponent extends ListWithDetails implements OnDestroy, OnInit
         mergeMap((orchStatus) => {
           this.orchStatus = orchStatus;
           const factsAvailable = this.checkHostsFactsAvailable();
-          return this.hostService.list(`${factsAvailable}`);
+          return this.hostService.list(this.tableContext?.toParams(), factsAvailable.toString());
         })
       )
       .subscribe(
-        (hostList) => {
+        (hostList: any[]) => {
           this.hosts = hostList;
           this.hosts.forEach((host: object) => {
             if (host['status'] === '') {
@@ -506,6 +515,11 @@ export class HostsComponent extends ListWithDetails implements OnDestroy, OnInit
           });
           this.transformHostsData();
           this.isLoadingHosts = false;
+          if (this.hosts.length > 0) {
+            this.count = CdTableServerSideService.getCount(hostList[0]);
+          } else {
+            this.count = 0;
+          }
         },
         () => {
           this.isLoadingHosts = false;
index cd03f04d55383d86037ed2764e287a726e58e991..202e937af3a5a4f47ad78680b2bbcb23ea388cfc 100644 (file)
@@ -4,7 +4,9 @@
   <nav ngbNav
        #nav="ngbNav"
        class="nav-tabs"
-       cdStatefulTab="logs">
+       cdStatefulTab="logs"
+       [cdStatefulTabDefault]="defaultTab"
+       [hidden]="!showNavLinks">
     <ng-container ngbNavItem="cluster-logs">
       <a ngbNavLink
          i18n>Cluster Logs</a>
              *ngIf="clog">
           <div class="btn-group"
                role="group"
-               *ngIf="clog.length">
+               *ngIf="clog.length && showClusterLogs">
             <cd-download-button [objectItem]="clog"
                                 [textItem]="clogText"
-                                fileName="cluster_log">
+                                fileName="cluster_log"
+                                *ngIf="showDownloadCopyButton">
             </cd-download-button>
             <cd-copy-2-clipboard-button
                     [source]="clogText"
-                    [byId]="false">
+                    [byId]="false"
+                    *ngIf="showDownloadCopyButton">
             </cd-copy-2-clipboard-button>
           </div>
-          <div class="card-body">
+          <div class="card-body"
+               [ngClass]="{'overflow-auto': scrollable}">
             <p *ngFor="let line of clog">
               <span class="timestamp">{{ line.stamp | cdDate }}</span>
               <span class="priority {{ line.priority | logPriority }}">{{ line.priority }}</span>
          i18n>Audit Logs</a>
       <ng-template ngbNavContent>
         <div class="card bg-light mb-3"
-             *ngIf="audit_log">
+             *ngIf="audit_log && showAuditLogs">
           <div class="btn-group"
                role="group"
                *ngIf="audit_log.length">
             <cd-download-button [objectItem]="audit_log"
                                 [textItem]="auditLogText"
-                                fileName="audit_log">
+                                fileName="audit_log"
+                                *ngIf="showDownloadCopyButton">
             </cd-download-button>
             <cd-copy-2-clipboard-button
                     [source]="auditLogText"
-                    [byId]="false">
+                    [byId]="false"
+                    *ngIf="showDownloadCopyButton">
             </cd-copy-2-clipboard-button>
           </div>
           <div class="card-body">
@@ -71,7 +78,7 @@
       <a ngbNavLink
          i18n>Daemon Logs</a>
       <ng-template ngbNavContent>
-        <ng-container *ngIf="lokiServiceStatus$ | async as lokiServiceStatus; else daemonLogsTpl">
+        <ng-container *ngIf="showDaemonLogs && lokiServiceStatus$ | async as lokiServiceStatus ; else daemonLogsTpl ">
           <div *ngIf="promtailServiceStatus$ | async as promtailServiceStatus; else daemonLogsTpl">
             <cd-grafana i18n-title
                         title="Daemon logs"
@@ -90,7 +97,8 @@
 </div>
 
 <ng-template #logFiltersTpl>
-  <div class="row mb-3">
+  <div class="row mb-3"
+       *ngIf="showFilterTools">
   <div class="col-lg-10 d-flex">
     <div class="col-sm-1 me-3">
       <label for="logs-priority"
index 54ab44250603c09cb7b73bfa70a8e97f0caf7a1b..56580e515193078d1f8e4c2f68f1dfd71718aeed 100644 (file)
@@ -52,3 +52,7 @@ p {
 ::ng-deep cd-logs ngb-timepicker input.ngb-tp-input {
   width: 3.5rem !important;
 }
+
+.card-body.overflow-auto {
+  height: 50vh;
+}
index ed8c721eaf3e1f6b3440d091c4c829dc01edf366..4c381eab037e7fd725c0f82c9b7b30925c085e24 100644 (file)
@@ -1,5 +1,5 @@
 import { DatePipe } from '@angular/common';
-import { Component, NgZone, OnDestroy, OnInit } from '@angular/core';
+import { Component, Input, NgZone, OnDestroy, OnInit } from '@angular/core';
 
 import { NgbDateStruct } from '@ng-bootstrap/ng-bootstrap';
 import { Observable } from 'rxjs';
@@ -15,6 +15,23 @@ import { Icons } from '~/app/shared/enum/icons.enum';
   styleUrls: ['./logs.component.scss']
 })
 export class LogsComponent implements OnInit, OnDestroy {
+  @Input()
+  showClusterLogs = true;
+  @Input()
+  showAuditLogs = true;
+  @Input()
+  showDaemonLogs = true;
+  @Input()
+  showNavLinks = true;
+  @Input()
+  showFilterTools = true;
+  @Input()
+  showDownloadCopyButton = true;
+  @Input()
+  defaultTab = '';
+  @Input()
+  scrollable = false;
+
   contentData: any;
   clog: Array<any>;
   audit_log: Array<any>;
index e9e0b876f3bd896914d96c6bd5254233f838a756..1a7fd431c9107bb1dbb66ec305b134b46530a8c6 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
+import { UntypedFormGroup } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -21,7 +21,7 @@ export class OsdFlagsIndivModalComponent implements OnInit {
   permissions: Permissions;
   selected: object[];
   initialSelection: Flag[] = [];
-  osdFlagsForm = new FormGroup({});
+  osdFlagsForm = new UntypedFormGroup({});
   flags: Flag[] = [
     {
       code: 'noup',
index 640719382b42ee62ee7e0d5a8e9536812337558f..9def291ff670c526399e6ce576f4e3cc6ab5bc93 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
+import { UntypedFormGroup } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -19,7 +19,7 @@ import { NotificationService } from '~/app/shared/services/notification.service'
 export class OsdFlagsModalComponent implements OnInit {
   permissions: Permissions;
 
-  osdFlagsForm = new FormGroup({});
+  osdFlagsForm = new UntypedFormGroup({});
 
   allFlags = {
     noin: {
index e2085548f0f51e8afe844a3c0b610c0345e0c827..00a162dac1e2f0b3e6f064dbd53d6a3b49c6904a 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
-import { FormControl } from '@angular/forms';
+import { UntypedFormControl } from '@angular/forms';
 import { Router } from '@angular/router';
 
 import _ from 'lodash';
@@ -139,16 +139,16 @@ export class OsdFormComponent extends CdForm implements OnInit {
 
   createForm() {
     this.form = new CdFormGroup({
-      walSlots: new FormControl(0),
-      dbSlots: new FormControl(0),
+      walSlots: new UntypedFormControl(0),
+      dbSlots: new UntypedFormControl(0),
       features: new CdFormGroup(
         this.featureList.reduce((acc: object, e) => {
           // disable initially because no data devices are selected
-          acc[e.key] = new FormControl({ value: false, disabled: true });
+          acc[e.key] = new UntypedFormControl({ value: false, disabled: true });
           return acc;
         }, {})
       ),
-      deploymentOption: new FormControl(0)
+      deploymentOption: new UntypedFormControl(0)
     });
   }
 
index ec8268d8b040550cdd8e5182a7faa6ec560e5098..0c580fcb8a4f8b6ba2af1c4e2b5c63308e855bc2 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
-import { FormControl } from '@angular/forms';
+import { UntypedFormControl } from '@angular/forms';
 import { Router } from '@angular/router';
 
 import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
@@ -523,7 +523,7 @@ export class OsdListComponent extends ListWithDetails implements OnInit {
 
   delete() {
     const deleteFormGroup = new CdFormGroup({
-      preserve: new FormControl(false)
+      preserve: new UntypedFormControl(false)
     });
 
     this.showCriticalConfirmationModal(
index 6546e086569edd56381f1563e1ec558c0b47ff91..e8545fe91904aaaf77bacc910bcf51b59edb6177 100755 (executable)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -37,8 +37,8 @@ export class OsdRecvSpeedModalComponent implements OnInit {
     this.permissions = this.authStorageService.getPermissions();
     this.priorities = this.osdService.osdRecvSpeedModalPriorities.KNOWN_PRIORITIES;
     this.osdRecvSpeedForm = new CdFormGroup({
-      priority: new FormControl(null, { validators: [Validators.required] }),
-      customizePriority: new FormControl(false)
+      priority: new UntypedFormControl(null, { validators: [Validators.required] }),
+      customizePriority: new UntypedFormControl(false)
     });
     this.priorityAttrs = {
       osd_max_backfills: {
@@ -74,7 +74,7 @@ export class OsdRecvSpeedModalComponent implements OnInit {
     Object.keys(this.priorityAttrs).forEach((configOptionName) => {
       this.osdRecvSpeedForm.addControl(
         configOptionName,
-        new FormControl(null, { validators: [Validators.required] })
+        new UntypedFormControl(null, { validators: [Validators.required] })
       );
     });
   }
index b2f636708b97063c4508873a0dc94a22a7925097..8eda0f34c1ac5108fc9eca3a3b584df5f416bc5e 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormGroup } from '@angular/forms';
+import { UntypedFormGroup } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import { forkJoin } from 'rxjs';
@@ -17,7 +17,7 @@ import { NotificationService } from '~/app/shared/services/notification.service'
 })
 export class OsdScrubModalComponent implements OnInit {
   deep: boolean;
-  scrubForm: FormGroup;
+  scrubForm: UntypedFormGroup;
   selected: any[] = [];
 
   constructor(
@@ -29,7 +29,7 @@ export class OsdScrubModalComponent implements OnInit {
   ) {}
 
   ngOnInit() {
-    this.scrubForm = new FormGroup({});
+    this.scrubForm = new UntypedFormGroup({});
   }
 
   scrub() {
index bdca7a1b70242338fa62ddd91966398bd8bfcb00..e2f36b7edaae0fbad1c2c83af77d6c88a8b90b54 100644 (file)
@@ -18,7 +18,7 @@ import { PrometheusAlertService } from '~/app/shared/services/prometheus-alert.s
 })
 export class RulesListComponent extends PrometheusListHelper implements OnInit {
   columns: CdTableColumn[];
-  expandedRow: PrometheusRule;
+  declare expandedRow: PrometheusRule;
   selection = new CdTableSelection();
 
   /**
index bdd616ce9c60f9de1d8ad8e04854a4389dd1ad6c..2ec8630d122a8a1e4f3ccbde48cc83db35780c14 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, EventEmitter, Output, ViewChild } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 
 import { NgbActiveModal, NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -66,7 +66,7 @@ export class SilenceMatcherModalComponent {
     this.form = this.formBuilder.group({
       name: [null, [Validators.required]],
       value: [{ value: '', disabled: true }, [Validators.required]],
-      isRegex: new FormControl(false)
+      isRegex: new UntypedFormControl(false)
     });
   }
 
index 6c465d46998d8b682e2dc63ed9b473c9e84ea0ae..b95f9353db35207b13719b6f52b3c91bf903972f 100644 (file)
@@ -7,7 +7,14 @@
           [formGroup]="serviceForm"
           novalidate>
       <div class="modal-body">
-
+        <cd-alert-panel *ngIf="serviceForm.controls.service_type.value === 'rgw' && showRealmCreationForm"
+                        type="info"
+                        spacingClass="mb-3"
+                        i18n>
+          <a class="text-decoration-underline"
+             (click)="createMultisiteSetup()">
+             Click here</a> to create a new Realm/Zone Group/Zone
+        </cd-alert-panel>
         <!-- Service type -->
         <div class="form-group row">
           <label class="cd-col-form-label required"
             <span class="invalid-feedback"
                   *ngIf="serviceForm.showError('service_id', frm, 'uniqueName')"
                   i18n>This service id is already in use.</span>
-            <span class="invalid-feedback"
-                  *ngIf="serviceForm.showError('service_id', frm, 'rgwPattern')"
-                  i18n>The value does not match the pattern <strong>&lt;service_id&gt;[.&lt;realm_name&gt;.&lt;zone_name&gt;]</strong>.</span>
             <span class="invalid-feedback"
                   *ngIf="serviceForm.showError('service_id', frm, 'mdsPattern')"
                   i18n>MDS service id must start with a letter and contain alphanumeric characters or '.', '-', and '_'</span>
           </div>
         </div>
 
+        <div class="form-group row"
+             *ngIf="serviceForm.controls.service_type.value === 'rgw'">
+          <label class="cd-col-form-label"
+                 for="realm_name"
+                 i18n>Realm</label>
+          <div class="cd-col-form-input">
+            <select class="form-select"
+                    id="realm_name"
+                    formControlName="realm_name"
+                    name="realm_name"
+                    [attr.disabled]="realmList.length === 0  || editing ? true : null">
+            <option *ngIf="realmList.length === 0"
+                    i18n
+                    selected>-- No realm available --</option>
+            <option *ngFor="let realm of realmList"
+                    [value]="realm.name">
+                  {{ realm.name }}
+            </option>
+            </select>
+          </div>
+        </div>
+
+        <div class="form-group row"
+             *ngIf="serviceForm.controls.service_type.value === 'rgw'">
+          <label class="cd-col-form-label"
+                 for="zonegroup_name"
+                 i18n>Zone Group</label>
+          <div class="cd-col-form-input">
+            <select class="form-select"
+                    id="zonegroup_name"
+                    formControlName="zonegroup_name"
+                    name="zonegroup_name"
+                    [attr.disabled]="zonegroupList.length === 0  || editing ? true : null">
+              <option *ngFor="let zonegroup of zonegroupList"
+                      [value]="zonegroup.name">
+              {{ zonegroup.name }}
+              </option>
+            </select>
+          </div>
+        </div>
+
+        <div class="form-group row"
+             *ngIf="serviceForm.controls.service_type.value === 'rgw'">
+          <label class="cd-col-form-label"
+                 for="zone_name"
+                 i18n>Zone</label>
+          <div class="cd-col-form-input">
+            <select class="form-select"
+                    id="zone_name"
+                    formControlName="zone_name"
+                    name="zone_name"
+                    [attr.disabled]="zoneList.length === 0  || editing ? true : null">
+              <option *ngFor="let zone of zoneList"
+                      [value]="zone.name">
+              {{ zone.name }}
+              </option>
+            </select>
+          </div>
+        </div>
+
         <!-- unmanaged -->
         <div class="form-group row">
           <div class="cd-col-form-offset">
index b2c965ee71b96a2d185ffe010175c715f35da83f..ebecec5cc3854e31fc36f5b1f61df1b509e01159 100644 (file)
@@ -191,29 +191,18 @@ describe('ServiceFormComponent', () => {
         formHelper.expectValid('service_id');
       });
 
-      it('should test rgw invalid service id', () => {
-        formHelper.setValue('service_id', '.');
-        formHelper.expectError('service_id', 'rgwPattern');
-        formHelper.setValue('service_id', 'svc.');
-        formHelper.expectError('service_id', 'rgwPattern');
-        formHelper.setValue('service_id', 'svc.realm');
-        formHelper.expectError('service_id', 'rgwPattern');
-        formHelper.setValue('service_id', 'svc.realm.');
-        formHelper.expectError('service_id', 'rgwPattern');
-        formHelper.setValue('service_id', '.svc.realm');
-        formHelper.expectError('service_id', 'rgwPattern');
-        formHelper.setValue('service_id', 'svc.realm.zone.');
-        formHelper.expectError('service_id', 'rgwPattern');
-      });
-
-      it('should submit rgw with realm and zone', () => {
-        formHelper.setValue('service_id', 'svc.my-realm.my-zone');
+      it('should submit rgw with realm, zonegroup and zone', () => {
+        formHelper.setValue('service_id', 'svc');
+        formHelper.setValue('realm_name', 'my-realm');
+        formHelper.setValue('zone_name', 'my-zone');
+        formHelper.setValue('zonegroup_name', 'my-zonegroup');
         component.onSubmit();
         expect(cephServiceService.create).toHaveBeenCalledWith({
           service_type: 'rgw',
           service_id: 'svc',
           rgw_realm: 'my-realm',
           rgw_zone: 'my-zone',
+          rgw_zonegroup: 'my-zonegroup',
           placement: {},
           unmanaged: false,
           ssl: false
@@ -227,6 +216,9 @@ describe('ServiceFormComponent', () => {
         expect(cephServiceService.create).toHaveBeenCalledWith({
           service_type: 'rgw',
           service_id: 'svc',
+          rgw_realm: null,
+          rgw_zone: null,
+          rgw_zonegroup: null,
           placement: {},
           unmanaged: false,
           rgw_frontend_port: 1234,
@@ -271,6 +263,9 @@ describe('ServiceFormComponent', () => {
         expect(cephServiceService.create).toHaveBeenCalledWith({
           service_type: 'rgw',
           service_id: 'svc',
+          rgw_realm: null,
+          rgw_zone: null,
+          rgw_zonegroup: null,
           placement: {},
           unmanaged: false,
           ssl: false
index 5ae2dfa50b4c14e464163d0f78d9574289c76eb0..564c364426e9a80c37804bfdf78a96bfe0e68d5b 100644 (file)
@@ -3,24 +3,37 @@ import { Component, Input, OnInit, ViewChild } from '@angular/core';
 import { AbstractControl, Validators } from '@angular/forms';
 import { ActivatedRoute, Router } from '@angular/router';
 
-import { NgbActiveModal, NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
+import { NgbActiveModal, NgbModalRef, NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
-import { merge, Observable, Subject } from 'rxjs';
+import { forkJoin, merge, Observable, Subject, Subscription } from 'rxjs';
 import { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';
+import { CreateRgwServiceEntitiesComponent } from '~/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component';
+import { RgwRealm, RgwZonegroup, RgwZone } from '~/app/ceph/rgw/models/rgw-multisite';
 
 import { CephServiceService } from '~/app/shared/api/ceph-service.service';
 import { HostService } from '~/app/shared/api/host.service';
 import { PoolService } from '~/app/shared/api/pool.service';
+import { RgwMultisiteService } from '~/app/shared/api/rgw-multisite.service';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
 import { SelectMessages } from '~/app/shared/components/select/select-messages.model';
 import { SelectOption } from '~/app/shared/components/select/select-option.model';
-import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
+import {
+  ActionLabelsI18n,
+  TimerServiceInterval,
+  URLVerbs
+} from '~/app/shared/constants/app.constants';
 import { CdForm } from '~/app/shared/forms/cd-form';
 import { CdFormBuilder } from '~/app/shared/forms/cd-form-builder';
 import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
 import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
 import { FinishedTask } from '~/app/shared/models/finished-task';
 import { CephServiceSpec } from '~/app/shared/models/service.interface';
+import { ModalService } from '~/app/shared/services/modal.service';
 import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
+import { TimerService } from '~/app/shared/services/timer.service';
 
 @Component({
   selector: 'cd-service-form',
@@ -28,7 +41,8 @@ import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
   styleUrls: ['./service-form.component.scss']
 })
 export class ServiceFormComponent extends CdForm implements OnInit {
-  readonly RGW_SVC_ID_PATTERN = /^([^.]+)(\.([^.]+)\.([^.]+))?$/;
+  public sub = new Subscription();
+
   readonly MDS_SVC_ID_PATTERN = /^[a-zA-Z_.-][a-zA-Z0-9_.-]*$/;
   readonly SNMP_DESTINATION_PATTERN = /^[^\:]+:[0-9]/;
   readonly SNMP_ENGINE_ID_PATTERN = /^[0-9A-Fa-f]{10,64}/g;
@@ -57,6 +71,20 @@ export class ServiceFormComponent extends CdForm implements OnInit {
   services: Array<CephServiceSpec> = [];
   pageURL: string;
   serviceList: CephServiceSpec[];
+  multisiteInfo: object[] = [];
+  defaultRealmId = '';
+  defaultZonegroupId = '';
+  defaultZoneId = '';
+  realmList: RgwRealm[] = [];
+  zonegroupList: RgwZonegroup[] = [];
+  zoneList: RgwZone[] = [];
+  bsModalRef: NgbModalRef;
+  defaultZonegroup: RgwZonegroup;
+  showRealmCreationForm = false;
+  defaultsInfo: { defaultRealmName: string; defaultZonegroupName: string; defaultZoneName: string };
+  realmNames: string[];
+  zonegroupNames: string[];
+  zoneNames: string[];
 
   constructor(
     public actionLabels: ActionLabelsI18n,
@@ -66,8 +94,15 @@ export class ServiceFormComponent extends CdForm implements OnInit {
     private poolService: PoolService,
     private router: Router,
     private taskWrapperService: TaskWrapperService,
+    public timerService: TimerService,
+    public timerServiceVariable: TimerServiceInterval,
+    public rgwRealmService: RgwRealmService,
+    public rgwZonegroupService: RgwZonegroupService,
+    public rgwZoneService: RgwZoneService,
+    public rgwMultisiteService: RgwMultisiteService,
     private route: ActivatedRoute,
-    public activeModal: NgbActiveModal
+    public activeModal: NgbActiveModal,
+    public modalService: ModalService
   ) {
     super();
     this.resource = $localize`service`;
@@ -115,15 +150,7 @@ export class ServiceFormComponent extends CdForm implements OnInit {
             {
               service_type: 'rgw'
             },
-            [
-              Validators.required,
-              CdValidators.custom('rgwPattern', (value: string) => {
-                if (_.isEmpty(value)) {
-                  return false;
-                }
-                return !this.RGW_SVC_ID_PATTERN.test(value);
-              })
-            ]
+            [Validators.required]
           ),
           CdValidators.custom('uniqueName', (service_id: string) => {
             return this.serviceIds && this.serviceIds.includes(service_id);
@@ -154,6 +181,9 @@ export class ServiceFormComponent extends CdForm implements OnInit {
       ],
       // RGW
       rgw_frontend_port: [null, [CdValidators.number(false)]],
+      realm_name: [null],
+      zonegroup_name: [null],
+      zone_name: [null],
       // iSCSI
       trusted_ip_list: [null],
       api_port: [null, [CdValidators.number(false)]],
@@ -370,7 +400,8 @@ export class ServiceFormComponent extends CdForm implements OnInit {
 
       this.serviceTypes = _.difference(resp, this.hiddenServices).sort();
     });
-    this.hostService.list('false').subscribe((resp: object[]) => {
+    const hostContext = new CdTableFetchDataContext(() => undefined);
+    this.hostService.list(hostContext.toParams(), 'false').subscribe((resp: object[]) => {
       const options: SelectOption[] = [];
       _.forEach(resp, (host: object) => {
         if (_.get(host, 'sources.orchestrator', false)) {
@@ -425,6 +456,12 @@ export class ServiceFormComponent extends CdForm implements OnInit {
               this.serviceForm
                 .get('rgw_frontend_port')
                 .setValue(response[0].spec?.rgw_frontend_port);
+              this.getServiceIds(
+                'rgw',
+                response[0].spec?.rgw_realm,
+                response[0].spec?.rgw_zonegroup,
+                response[0].spec?.rgw_zone
+              );
               this.serviceForm.get('ssl').setValue(response[0].spec?.ssl);
               if (response[0].spec?.ssl) {
                 this.serviceForm
@@ -493,10 +530,131 @@ export class ServiceFormComponent extends CdForm implements OnInit {
     }
   }
 
-  getServiceIds(selectedServiceType: string) {
+  getDefaultsEntities(
+    defaultRealmId: string,
+    defaultZonegroupId: string,
+    defaultZoneId: string
+  ): { defaultRealmName: string; defaultZonegroupName: string; defaultZoneName: string } {
+    const defaultRealm = this.realmList.find((x: { id: string }) => x.id === defaultRealmId);
+    const defaultZonegroup = this.zonegroupList.find(
+      (x: { id: string }) => x.id === defaultZonegroupId
+    );
+    const defaultZone = this.zoneList.find((x: { id: string }) => x.id === defaultZoneId);
+    const defaultRealmName = defaultRealm !== undefined ? defaultRealm.name : null;
+    const defaultZonegroupName = defaultZonegroup !== undefined ? defaultZonegroup.name : 'default';
+    const defaultZoneName = defaultZone !== undefined ? defaultZone.name : 'default';
+    if (defaultZonegroupName === 'default' && !this.zonegroupNames.includes(defaultZonegroupName)) {
+      const defaultZonegroup = new RgwZonegroup();
+      defaultZonegroup.name = 'default';
+      this.zonegroupList.push(defaultZonegroup);
+    }
+    if (defaultZoneName === 'default' && !this.zoneNames.includes(defaultZoneName)) {
+      const defaultZone = new RgwZone();
+      defaultZone.name = 'default';
+      this.zoneList.push(defaultZone);
+    }
+    return {
+      defaultRealmName: defaultRealmName,
+      defaultZonegroupName: defaultZonegroupName,
+      defaultZoneName: defaultZoneName
+    };
+  }
+
+  getServiceIds(
+    selectedServiceType: string,
+    realm_name?: string,
+    zonegroup_name?: string,
+    zone_name?: string
+  ) {
     this.serviceIds = this.serviceList
       ?.filter((service) => service['service_type'] === selectedServiceType)
       .map((service) => service['service_id']);
+
+    if (selectedServiceType === 'rgw') {
+      const observables = [
+        this.rgwRealmService.getAllRealmsInfo(),
+        this.rgwZonegroupService.getAllZonegroupsInfo(),
+        this.rgwZoneService.getAllZonesInfo()
+      ];
+      this.sub = forkJoin(observables).subscribe(
+        (multisiteInfo: [object, object, object]) => {
+          this.multisiteInfo = multisiteInfo;
+          this.realmList =
+            this.multisiteInfo[0] !== undefined && this.multisiteInfo[0].hasOwnProperty('realms')
+              ? this.multisiteInfo[0]['realms']
+              : [];
+          this.zonegroupList =
+            this.multisiteInfo[1] !== undefined &&
+            this.multisiteInfo[1].hasOwnProperty('zonegroups')
+              ? this.multisiteInfo[1]['zonegroups']
+              : [];
+          this.zoneList =
+            this.multisiteInfo[2] !== undefined && this.multisiteInfo[2].hasOwnProperty('zones')
+              ? this.multisiteInfo[2]['zones']
+              : [];
+          this.realmNames = this.realmList.map((realm) => {
+            return realm['name'];
+          });
+          this.zonegroupNames = this.zonegroupList.map((zonegroup) => {
+            return zonegroup['name'];
+          });
+          this.zoneNames = this.zoneList.map((zone) => {
+            return zone['name'];
+          });
+          this.defaultRealmId = multisiteInfo[0]['default_realm'];
+          this.defaultZonegroupId = multisiteInfo[1]['default_zonegroup'];
+          this.defaultZoneId = multisiteInfo[2]['default_zone'];
+          this.defaultsInfo = this.getDefaultsEntities(
+            this.defaultRealmId,
+            this.defaultZonegroupId,
+            this.defaultZoneId
+          );
+          if (!this.editing) {
+            this.serviceForm.get('realm_name').setValue(this.defaultsInfo['defaultRealmName']);
+            this.serviceForm
+              .get('zonegroup_name')
+              .setValue(this.defaultsInfo['defaultZonegroupName']);
+            this.serviceForm.get('zone_name').setValue(this.defaultsInfo['defaultZoneName']);
+          } else {
+            if (realm_name && !this.realmNames.includes(realm_name)) {
+              const realm = new RgwRealm();
+              realm.name = realm_name;
+              this.realmList.push(realm);
+            }
+            if (zonegroup_name && !this.zonegroupNames.includes(zonegroup_name)) {
+              const zonegroup = new RgwZonegroup();
+              zonegroup.name = zonegroup_name;
+              this.zonegroupList.push(zonegroup);
+            }
+            if (zone_name && !this.zoneNames.includes(zone_name)) {
+              const zone = new RgwZone();
+              zone.name = zone_name;
+              this.zoneList.push(zone);
+            }
+            if (zonegroup_name === undefined && zone_name === undefined) {
+              zonegroup_name = 'default';
+              zone_name = 'default';
+            }
+            this.serviceForm.get('realm_name').setValue(realm_name);
+            this.serviceForm.get('zonegroup_name').setValue(zonegroup_name);
+            this.serviceForm.get('zone_name').setValue(zone_name);
+          }
+          if (this.realmList.length === 0) {
+            this.showRealmCreationForm = true;
+          } else {
+            this.showRealmCreationForm = false;
+          }
+        },
+        (_error) => {
+          const defaultZone = new RgwZone();
+          defaultZone.name = 'default';
+          const defaultZonegroup = new RgwZonegroup();
+          defaultZonegroup.name = 'default';
+          this.zoneList.push(defaultZone);
+          this.zonegroupList.push(defaultZonegroup);
+        }
+      );
+    }
   }
 
   disableForEditing(serviceType: string) {
@@ -559,12 +717,11 @@ export class ServiceFormComponent extends CdForm implements OnInit {
     };
     let svcId: string;
     if (serviceType === 'rgw') {
-      const svcIdMatch = values['service_id'].match(this.RGW_SVC_ID_PATTERN);
-      svcId = svcIdMatch[1];
-      if (svcIdMatch[3]) {
-        serviceSpec['rgw_realm'] = svcIdMatch[3];
-        serviceSpec['rgw_zone'] = svcIdMatch[4];
-      }
+      serviceSpec['rgw_realm'] = values['realm_name'] ? values['realm_name'] : null;
+      serviceSpec['rgw_zonegroup'] =
+        values['zonegroup_name'] !== 'default' ? values['zonegroup_name'] : null;
+      serviceSpec['rgw_zone'] = values['zone_name'] !== 'default' ? values['zone_name'] : null;
+      svcId = values['service_id'];
     } else {
       svcId = values['service_id'];
     }
@@ -705,4 +862,13 @@ export class ServiceFormComponent extends CdForm implements OnInit {
       this.serviceForm.get('snmp_v3_priv_password').clearValidators();
     }
   }
+
+  createMultisiteSetup() {
+    this.bsModalRef = this.modalService.show(CreateRgwServiceEntitiesComponent, {
+      size: 'lg'
+    });
+    this.bsModalRef.componentInstance.submitAction.subscribe(() => {
+      this.getServiceIds('rgw');
+    });
+  }
 }
index 1234a684e6c9d16fac11de4da2a5af33dc3438ad..82a975c9df47ed58f6de09ec861a47b4e5a8ee0e 100644 (file)
@@ -90,8 +90,8 @@ export class ServicesComponent extends ListWithDetails implements OnChanges, OnI
         icon: Icons.add,
         click: () => this.openModal(),
         name: this.actionLabels.CREATE,
-        canBePrimary: (selection: CdTableSelection) => !selection.hasSelection,
-        disable: (selection: CdTableSelection) => this.getDisable('create', selection)
+        canBePrimary: (selection: CdTableSelection) => !selection.hasSelection
+        // disable: (selection: CdTableSelection) => this.getDisable('create', selection)
       },
       {
         permission: 'update',
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.html
new file mode 100644 (file)
index 0000000..aa8ab7e
--- /dev/null
@@ -0,0 +1,89 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container class="modal-title">
+    <ng-container i18n>Upgrade Cluster</ng-container>&nbsp;
+  </ng-container>
+
+  <ng-container class="modal-content">
+    <form name="upgradeForm"
+          class="form"
+          #formDir="ngForm"
+          [formGroup]="upgradeForm"
+          novalidate>
+      <div class="modal-body">
+        <cd-alert-panel type="warning"
+                        spacingClass="mb-3"
+                        *ngIf="showImageField"
+                        i18n>Make sure to put the correct image. Passing an incorrect image can lead the cluster into an undesired state.</cd-alert-panel>
+        <div *ngIf="versions"
+             class="form-group row">
+          <label class="cd-col-form-label"
+                 [ngClass]="{'required': !showImageField}"
+                 for="availableVersions"
+                 i18n>New Version</label>
+          <div class="cd-col-form-input">
+            <select id="availableVersions"
+                    name="availableVersions"
+                    class="form-select"
+                    formControlName="availableVersions">
+              <option *ngIf="versions === null"
+                      ngValue="null"
+                      i18n>Loading...</option>
+              <option *ngIf="versions !== null && versions.length === 0"
+                      [ngValue]="null"
+                      i18n>-- No version available --</option>
+              <option *ngIf="versions !== null && versions.length > 0"
+                      [ngValue]="null"
+                      i18n>-- Select a version --</option>
+              <option *ngFor="let version of versions"
+                      [value]="version">{{ version }}</option>
+            </select>
+            <span class="invalid-feedback"
+                  *ngIf="upgradeForm.showError('availableVersions', formDir, 'required')"
+                  i18n>This field is required!</span>
+          </div>
+        </div>
+
+        <div *ngIf="versions"
+             class="form-group row">
+          <div class="cd-col-form-offset">
+            <div class="custom-control custom-checkbox">
+              <input type="checkbox"
+                     class="custom-control-input"
+                     id="useImage"
+                     name="useImage"
+                     formControlName="useImage"
+                     (click)="useImage()">
+              <label class="custom-control-label"
+                     for="useImage"
+                     i18n>Use image</label>
+            </div>
+          </div>
+        </div>
+
+        <!-- Custom image name input-->
+        <div class="form-group row"
+             *ngIf="showImageField || !versions">
+          <label class="cd-col-form-label required"
+                 for="customImageName"
+                 i18n>Image</label>
+          <div class="cd-col-form-input">
+            <input type="text"
+                   class="form-control"
+                   id="customImageName"
+                   name="customImageName"
+                   formControlName="customImageName">
+            <span class="invalid-feedback"
+                  *ngIf="upgradeForm.showError('customImageName', formDir, 'required')"
+                  i18n>This field is required!</span>
+          </div>
+        </div>
+      </div>
+
+      <div class="modal-footer">
+        <cd-form-button-panel (submitActionEvent)="startUpgrade()"
+                              [form]="upgradeForm"
+                              [submitText]="actionLabels.START_UPGRADE"></cd-form-button-panel>
+      </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.spec.ts
new file mode 100644 (file)
index 0000000..1fe7ffb
--- /dev/null
@@ -0,0 +1,32 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { UpgradeComponent } from '../upgrade.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+import { UpgradeService } from '~/app/shared/api/upgrade.service';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { NO_ERRORS_SCHEMA } from '@angular/core';
+import { SharedModule } from '~/app/shared/shared.module';
+import { ToastrModule } from 'ngx-toastr';
+import { RouterTestingModule } from '@angular/router/testing';
+
+describe('UpgradeComponent', () => {
+  let component: UpgradeComponent;
+  let fixture: ComponentFixture<UpgradeComponent>;
+
+  configureTestBed({
+    imports: [HttpClientTestingModule, SharedModule, ToastrModule.forRoot(), RouterTestingModule],
+    schemas: [NO_ERRORS_SCHEMA],
+    declarations: [UpgradeComponent],
+    providers: [UpgradeService]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(UpgradeComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-form/upgrade-start-modal.component.ts
new file mode 100644 (file)
index 0000000..8622fe9
--- /dev/null
@@ -0,0 +1,99 @@
+import { Component, OnInit } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { Observable } from 'rxjs';
+
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { Permission } from '~/app/shared/models/permissions';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { UpgradeService } from '~/app/shared/api/upgrade.service';
+import { UpgradeInfoInterface } from '~/app/shared/models/upgrade.interface';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { NotificationService } from '~/app/shared/services/notification.service';
+
+@Component({
+  selector: 'cd-upgrade-start-modal.component',
+  templateUrl: './upgrade-start-modal.component.html',
+  styleUrls: ['./upgrade-start-modal.component.scss']
+})
+export class UpgradeStartModalComponent implements OnInit {
+  permission: Permission;
+  upgradeInfoError$: Observable<any>;
+  upgradeInfo$: Observable<UpgradeInfoInterface>;
+  upgradeForm: CdFormGroup;
+  icons = Icons;
+  versions: string[];
+
+  showImageField = false;
+
+  constructor(
+    public actionLabels: ActionLabelsI18n,
+    private authStorageService: AuthStorageService,
+    public activeModal: NgbActiveModal,
+    private upgradeService: UpgradeService,
+    private notificationService: NotificationService
+  ) {
+    this.permission = this.authStorageService.getPermissions().configOpt;
+  }
+
+  ngOnInit() {
+    this.upgradeForm = new CdFormGroup({
+      availableVersions: new FormControl(null, [Validators.required]),
+      useImage: new FormControl(false),
+      customImageName: new FormControl(null)
+    });
+    if (this.versions === undefined) {
+      const availableVersionsControl = this.upgradeForm.get('availableVersions');
+      availableVersionsControl.clearValidators();
+      const customImageNameControl = this.upgradeForm.get('customImageName');
+      customImageNameControl.setValidators(Validators.required);
+      customImageNameControl.updateValueAndValidity();
+    }
+  }
+
+  startUpgrade() {
+    const version = this.upgradeForm.getValue('availableVersions');
+    const image = this.upgradeForm.getValue('customImageName');
+    this.upgradeService.start(version, image).subscribe({
+      next: () => {
+        this.notificationService.show(
+          NotificationType.success,
+          $localize`Started upgrading the cluster`
+        );
+      },
+      error: (error) => {
+        this.upgradeForm.setErrors({ cdSubmitButton: true });
+        this.notificationService.show(
+          NotificationType.error,
+          $localize`Failed to start the upgrade`,
+          error
+        );
+      },
+      complete: () => {
+        this.activeModal.close();
+      }
+    });
+  }
+
+  useImage() {
+    this.showImageField = !this.showImageField;
+    const availableVersionsControl = this.upgradeForm.get('availableVersions');
+    const customImageNameControl = this.upgradeForm.get('customImageName');
+
+    if (this.showImageField) {
+      availableVersionsControl.disable();
+      availableVersionsControl.clearValidators();
+
+      customImageNameControl.setValidators(Validators.required);
+      customImageNameControl.updateValueAndValidity();
+    } else {
+      availableVersionsControl.enable();
+      availableVersionsControl.setValidators(Validators.required);
+      availableVersionsControl.updateValueAndValidity();
+
+      customImageNameControl.clearValidators();
+    }
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.html
new file mode 100644 (file)
index 0000000..c683eee
--- /dev/null
@@ -0,0 +1,89 @@
+<div class="d-flex flex-column justify-content-center align-items-center bold"
+     *ngIf="upgradeStatus$ | async as upgradeStatus">
+  <ng-container *ngIf="upgradeStatus.in_progress && !upgradeStatus.is_paused; else upgradePaused">
+    <h3 class="text-center"
+        i18n>
+    <i [ngClass]="[icons.large, icons.spin, icons.spinner]"></i>
+  </h3>
+
+  <h3 class="text-center mt-2">
+    {{ executingTask?.description }}
+  </h3>
+
+  <h5 class="text-center mt-3"
+      i18n>{{ upgradeStatus.which }}</h5>
+  </ng-container>
+
+  <div class="w-50 row h-100 d-flex justify-content-center align-items-center mt-4">
+    <div class="text-center w-75">
+      <ng-container *ngIf="upgradeStatus.services_complete.length > 0">
+        Finished upgrading:
+        <span class="text-success">
+          {{ upgradeStatus.services_complete }}
+        </span>
+      </ng-container>
+      <div class="mt-2">
+        <ngb-progressbar type="info"
+                         [value]="executingTask?.progress"
+                         [striped]="true"
+                         [animated]="!upgradeStatus.is_paused"></ngb-progressbar>
+      </div>
+
+    <p class="card-text text-muted">
+      <span class="float-end">
+        {{ executingTask?.progress || 0 }} %
+      </span>
+    </p>
+    </div>
+    <h4 class="text-center m-2"
+        i18n>{{ upgradeStatus.progress}}</h4>
+
+    <h5 *ngIf="upgradeStatus.in_progress"
+        class="text-center mt-2"
+        i18n>
+    {{ upgradeStatus.message }}
+    </h5>
+
+    <div class="text-center mt-3">
+      <button class="btn btn-light"
+              aria-label="Go back"
+              routerLink="/upgrade"
+              i18n>Back</button>
+      <button *ngIf="upgradeStatus.in_progress && !upgradeStatus.is_paused"
+              (click)="pauseUpgrade()"
+              class="btn btn-light m-2"
+              aria-label="Pause Upgrade"
+              i18n>Pause</button>
+      <button *ngIf="upgradeStatus.in_progress && upgradeStatus.is_paused"
+              (click)="resumeUpgrade()"
+              class="btn btn-light m-2"
+              aria-label="Resume Upgrade"
+              i18n>Resume</button>
+      <button *ngIf="upgradeStatus.in_progress"
+              (click)="stopUpgradeModal()"
+              class="btn btn-danger"
+              aria-label="Stop Upgrade"
+              i18n>Stop</button>
+    </div>
+  </div>
+</div>
+
+<legend class="cd-header"
+        i18n>Cluster logs</legend>
+  <cd-logs [showAuditLogs]="false"
+           [showDaemonLogs]="false"
+           [showNavLinks]="false"
+           [showFilterTools]="false"
+           [showDownloadCopyButton]="false"
+           defaultTab="cluster-logs"
+           [scrollable]="true"></cd-logs>
+
+<ng-template #upgradePaused>
+  <h3 class="text-center mt-3">
+    <i [ngClass]="[icons.large, icons.spinner]"></i>
+  </h3>
+
+  <h3 class="text-center mt-3 mb-4">
+    {{ executingTask?.description }}
+  </h3>
+</ng-template>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.spec.ts
new file mode 100644 (file)
index 0000000..b96e7f4
--- /dev/null
@@ -0,0 +1,29 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { UpgradeProgressComponent } from './upgrade-progress.component';
+import { ToastrModule } from 'ngx-toastr';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { SharedModule } from '~/app/shared/shared.module';
+import { RouterTestingModule } from '@angular/router/testing';
+import { LogsComponent } from '../../logs/logs.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('UpgradeProgressComponent', () => {
+  let component: UpgradeProgressComponent;
+  let fixture: ComponentFixture<UpgradeProgressComponent>;
+
+  configureTestBed({
+    declarations: [UpgradeProgressComponent, LogsComponent],
+    imports: [ToastrModule.forRoot(), HttpClientTestingModule, SharedModule, RouterTestingModule]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(UpgradeProgressComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade-progress/upgrade-progress.component.ts
new file mode 100644 (file)
index 0000000..03bb6ed
--- /dev/null
@@ -0,0 +1,140 @@
+import { Component, OnDestroy, OnInit } from '@angular/core';
+
+import { Observable, ReplaySubject, Subscription } from 'rxjs';
+import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
+
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { Permission } from '~/app/shared/models/permissions';
+import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { UpgradeService } from '~/app/shared/api/upgrade.service';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { SummaryService } from '~/app/shared/services/summary.service';
+import { ExecutingTask } from '~/app/shared/models/executing-task';
+import { shareReplay, switchMap, tap } from 'rxjs/operators';
+import { Router } from '@angular/router';
+import { RefreshIntervalService } from '~/app/shared/services/refresh-interval.service';
+import { UpgradeStatusInterface } from '~/app/shared/models/upgrade.interface';
+
+@Component({
+  selector: 'cd-upgrade-progress',
+  templateUrl: './upgrade-progress.component.html',
+  styleUrls: ['./upgrade-progress.component.scss']
+})
+export class UpgradeProgressComponent implements OnInit, OnDestroy {
+  permission: Permission;
+  icons = Icons;
+  modalRef: NgbModalRef;
+  interval = new Subscription();
+  executingTask: ExecutingTask;
+
+  upgradeStatus$: Observable<UpgradeStatusInterface>;
+  subject = new ReplaySubject<UpgradeStatusInterface>();
+
+  constructor(
+    private authStorageService: AuthStorageService,
+    private upgradeService: UpgradeService,
+    private notificationService: NotificationService,
+    private modalService: ModalService,
+    private summaryService: SummaryService,
+    private router: Router,
+    private refreshIntervalService: RefreshIntervalService
+  ) {
+    this.permission = this.authStorageService.getPermissions().configOpt;
+  }
+
+  ngOnInit() {
+    this.upgradeStatus$ = this.subject.pipe(
+      switchMap(() => this.upgradeService.status()),
+      tap((status: UpgradeStatusInterface) => {
+        if (!status.in_progress) {
+          this.router.navigate(['/upgrade']);
+        }
+      }),
+      shareReplay(1)
+    );
+
+    this.interval = this.refreshIntervalService.intervalData$.subscribe(() => {
+      this.fetchStatus();
+    });
+
+    this.summaryService.subscribe((summary) => {
+      this.executingTask = summary.executing_tasks.filter((tasks) =>
+        tasks.name.includes('progress/Upgrade')
+      )[0];
+    });
+  }
+
+  pauseUpgrade() {
+    this.upgradeService.pause().subscribe({
+      error: (error) => {
+        this.notificationService.show(
+          NotificationType.error,
+          $localize`Failed to pause the upgrade`,
+          error
+        );
+      },
+      complete: () => {
+        this.notificationService.show(NotificationType.success, $localize`The upgrade is paused`);
+        this.fetchStatus();
+      }
+    });
+  }
+
+  fetchStatus() {
+    this.subject.next();
+  }
+
+  resumeUpgrade(modal = false) {
+    this.upgradeService.resume().subscribe({
+      error: (error) => {
+        this.notificationService.show(
+          NotificationType.error,
+          $localize`Failed to resume the upgrade`,
+          error
+        );
+      },
+      complete: () => {
+        this.fetchStatus();
+        this.notificationService.show(NotificationType.success, $localize`Upgrade is resumed`);
+        if (modal) {
+          this.modalRef.close();
+        }
+      }
+    });
+  }
+
+  stopUpgradeModal() {
+    // pause the upgrade meanwhile we get stop confirmation from user
+    this.pauseUpgrade();
+    this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+      itemDescription: 'Upgrade',
+      actionDescription: 'stop',
+      submitAction: () => this.stopUpgrade(),
+      callBackAtionObservable: () => this.resumeUpgrade(true)
+    });
+  }
+
+  stopUpgrade() {
+    this.modalRef.close();
+    this.upgradeService.stop().subscribe({
+      error: (error) => {
+        this.notificationService.show(
+          NotificationType.error,
+          $localize`Failed to stop the upgrade`,
+          error
+        );
+      },
+      complete: () => {
+        this.notificationService.show(NotificationType.success, $localize`The upgrade is stopped`);
+        this.router.navigate(['/upgrade']);
+      }
+    });
+  }
+
+  ngOnDestroy() {
+    this.interval?.unsubscribe();
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.html
new file mode 100644 (file)
index 0000000..b1867c3
--- /dev/null
@@ -0,0 +1,233 @@
+<div class="row h-25"
+     *cdScope="'configOpt'">
+  <ng-container *ngIf="healthData$ | async as healthData">
+    <cd-card class="col-sm-3 px-3 d-flex"
+             cardTitle="New Version"
+             i18n-cardTitle
+             aria-label="New Version"
+             i18n-aria-label
+             id="newVersionAvailable"
+             *ngIf="upgradeStatus$ | async as status">
+      <ng-container *ngIf="status.in_progress; else upgradeStatusTpl">
+        <div class="d-flex flex-column justify-content-center align-items-center mt-2">
+          <h5 i18n
+              *ngIf="status.is_paused; else inProgress">
+            <i [ngClass]="[icons.spinner]"></i>
+            Upgrade is paused {{executingTasks?.progress}}%</h5>
+          <a class="mt-2 link-primary mb-2"
+             routerLink="/upgrade/progress"
+             i18n>View Details...</a>
+        </div>
+
+        <ng-template #inProgress>
+          <h5 i18n>
+            <i [ngClass]="[icons.spin, icons.spinner]"></i>
+              Upgrade in progress {{executingTasks?.progress}}%
+          </h5>
+        </ng-template>
+      </ng-container>
+    </cd-card>
+
+    <cd-card class="col-sm-3 px-3 d-flex"
+             cardTitle="Current Version"
+             i18n-cardTitle
+             aria-label="Current Version"
+             i18n-aria-label
+             id="currentVersion">
+      <div class="d-flex flex-column justify-content-center align-items-center">
+        <h5>{{ version }}</h5>
+      </div>
+    </cd-card>
+
+    <cd-card class="col-sm-3 px-3 d-flex"
+             cardTitle="Cluster Status"
+             i18n-cardTitle
+             aria-label="Cluster Status"
+             i18n-aria-label
+             id="clusterStatus">
+      <div class="d-flex flex-column justify-content-center align-items-center">
+        <ng-template #healthChecks>
+          <ul>
+            <li *ngFor="let check of healthData.health.checks">
+              <span [ngStyle]="check.severity | healthColor"
+                    [class.health-warn-description]="check.severity === 'HEALTH_WARN'">
+              {{ check.type }}</span>: {{ check.summary.message }}
+            </li>
+          </ul>
+        </ng-template>
+        <ng-template #healthWarningAndError>
+        <div class="info-card-content-clickable mt-1"
+             [ngStyle]="healthData.health.status | healthColor"
+             [ngbPopover]="healthChecks"
+             popoverClass="info-card-popover-cluster-status">
+            {{ healthData.health.status | healthLabel | uppercase }}
+          <i *ngIf="healthData.health?.status !== 'HEALTH_OK'"
+             class="fa fa-exclamation-triangle"></i>
+        </div></ng-template>
+
+      <ng-container *ngIf="!healthData.health?.checks?.length; else healthWarningAndError">
+        <div [ngStyle]="healthData.health.status | healthColor">
+          {{ healthData.health.status | healthLabel | uppercase }}
+        </div>
+      </ng-container>
+      </div>
+    </cd-card>
+
+    <cd-card class="col-sm-3 px-3 d-flex"
+             cardTitle="MGR Count"
+             i18n-cardTitle
+             aria-label="MGR Count"
+             i18n-aria-label
+             id="mgrCount">
+      <div class="d-flex flex-column justify-content-center align-items-center">
+        <h5>
+          <i class="text-success"
+             [ngClass]="[icons.success]"
+             *ngIf="(healthData.mgr_map | mgrSummary).total > 1; else warningIcon">
+          </i>
+          {{ (healthData.mgr_map | mgrSummary).total }}
+        </h5>
+      </div>
+    </cd-card>
+
+    <div class="d-flex mt-3">
+      <dl class="w-50"
+          *ngIf="fsid$ | async as fsid">
+        <dt class="bold mt-5"
+            i18n>Cluster FSID</dt>
+        <dd class="mt-2">{{ fsid }}</dd>
+
+        <ng-container *ngIf="info$ | async as info; else loadingDetails">
+          <dt class="bold mt-5"
+              i18n>Release Image</dt>
+          <dd class="mt-2">{{ info.image }}</dd>
+          <dt class="bold mt-5"
+              i18n>Registry</dt>
+          <dd class="mt-2">{{ info.registry }}</dd>
+        </ng-container>
+      </dl>
+      <div class="w-50">
+        <ng-container *ngIf="daemons$ | async as daemons">
+          <legend class="cd-header"
+                  i18n>Daemon versions</legend>
+          <div>
+            <cd-table #daemonsTable
+                      [data]="daemons"
+                      selectionType="single"
+                      [columns]="columns"
+                      columnMode="flex"
+                      [limit]="5">
+            </cd-table>
+          </div>
+        </ng-container>
+      </div>
+    </div>
+
+    <legend class="cd-header"
+            i18n>Cluster logs</legend>
+    <cd-logs [showAuditLogs]="false"
+             [showDaemonLogs]="false"
+             [showNavLinks]="false"
+             [showFilterTools]="false"
+             [showDownloadCopyButton]="false"
+             defaultTab="cluster-logs"
+             [scrollable]="true"></cd-logs>
+
+
+    <ng-template #upgradeStatusTpl>
+      <div class="d-flex flex-column justify-content-center align-items-center"
+           *ngIf="info$ | async as info; else checkingForUpgradeStatus">
+        <ng-container *ngIf="info.versions.length > 0; else noUpgradesAvailable">
+          <div i18n-ngbTooltip
+               [ngbTooltip]="(healthData.mgr_map | mgrSummary).total <= 1 ? 'To upgrade, you need minimum 2 mgr daemons.' : ''">
+            <button class="btn btn-accent mt-2"
+                    id="upgrade"
+                    aria-label="Upgrade now"
+                    (click)="upgradeNow(info.versions[info.versions.length - 1])"
+                    [disabled]="(healthData.mgr_map | mgrSummary).total <= 1"
+                    i18n>Upgrade to {{ info.versions[info.versions.length - 1] }}</button>
+          </div>
+          <a class="mt-2 link-primary mb-2"
+             (click)="startUpgradeModal()"
+             i18n>Select another version...</a>
+        </ng-container>
+      </div>
+    </ng-template>
+  </ng-container>
+</div>
+
+<ng-template #noUpgradesAvailable>
+  <span class="mt-1"
+        id="no-upgrades-available"
+        i18n>
+    <i [ngClass]="[icons.success]"
+       class="text-success"></i>
+    Cluster is up-to-date
+  </span>
+  <a class="link-primary mb-2"
+     (click)="startUpgradeModal()"
+     i18n>Upgrade using custom image...</a>
+</ng-template>
+
+<ng-template #warningIcon>
+  <i class="text-warning"
+     [ngClass]="[icons.warning]"
+     title="To upgrade, you need minimum 2 mgr daemons.">
+  </i>
+</ng-template>
+
+<ng-template #checkingForUpgradeStatus>
+  <div class="d-flex flex-column justify-content-center align-items-center"
+       *ngIf="!errorMessage; else upgradeStatusError">
+    <button class="btn btn-accent mt-2 mb-4"
+            id="upgrade"
+            aria-label="Upgrade now"
+            [disabled]="true"
+            i18n>Checking for upgrades
+      <i [ngClass]="[icons.spin, icons.spinner]"></i>
+    </button>
+  </div>
+</ng-template>
+
+<ng-template #loadingDetails>
+  <div class="w-50"
+       *ngIf="!errorMessage; else upgradeInfoError">
+    <span class="text-info justify-content-center align-items-center"
+          i18n>Fetching registry informations
+      <i [ngClass]="[icons.spin, icons.spinner]"></i>
+    </span>
+  </div>
+</ng-template>
+
+<ng-template #upgradeStatusError>
+  <div class="d-flex flex-column justify-content-center align-items-center">
+    <span class="text-danger mt-2 mb-4"
+          id="upgrade-status-error"
+          i18n>
+      <i [ngClass]="[icons.danger]"></i>
+      {{ errorMessage }}
+    </span>
+    <a class="link-primary mb-2"
+       (click)="startUpgradeModal()"
+       i18n>Upgrade using custom image...</a>
+  </div>
+</ng-template>
+
+<ng-template #upgradeInfoError>
+  <span class="text-danger justify-content-center align-items-center"
+        i18n>
+    <i [ngClass]="[icons.danger]"></i>
+    Failed to fetch registry informations
+  </span>
+</ng-template>
+
+<ng-template #upgradeProgress>
+  <div class="d-flex flex-column justify-content-center align-items-center mt-2">
+    <h5 i18n>
+      <i [ngClass]="[icons.spin, icons.spinner]"></i>
+      Upgrade in progress {{executingTasks?.progress}}%</h5>
+    <a class="mt-2 link-primary mb-2"
+       routerLink="/upgrade/progress"
+       i18n>View Details...</a>
+  </div>
+</ng-template>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.spec.ts
new file mode 100644 (file)
index 0000000..46b1d99
--- /dev/null
@@ -0,0 +1,230 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { UpgradeComponent } from './upgrade.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+import { SummaryService } from '~/app/shared/services/summary.service';
+import { BehaviorSubject, of } from 'rxjs';
+import { UpgradeService } from '~/app/shared/api/upgrade.service';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { UpgradeInfoInterface } from '~/app/shared/models/upgrade.interface';
+import { HealthService } from '~/app/shared/api/health.service';
+import { SharedModule } from '~/app/shared/shared.module';
+import { LogsComponent } from '../logs/logs.component';
+import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap';
+import { NO_ERRORS_SCHEMA } from '@angular/core';
+import { ToastrModule } from 'ngx-toastr';
+import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { RouterTestingModule } from '@angular/router/testing';
+
+export class SummaryServiceMock {
+  summaryDataSource = new BehaviorSubject({
+    version:
+      'ceph version 17.0.0-12222-gcd0cd7cb ' +
+      '(b8193bb4cda16ccc5b028c3e1df62bc72350a15d) quincy (dev)'
+  });
+  summaryData$ = this.summaryDataSource.asObservable();
+
+  subscribe(call: any) {
+    return this.summaryData$.subscribe(call);
+  }
+}
+
+describe('UpgradeComponent', () => {
+  let component: UpgradeComponent;
+  let fixture: ComponentFixture<UpgradeComponent>;
+  let upgradeInfoSpy: jasmine.Spy;
+  let getHealthSpy: jasmine.Spy;
+  let upgradeStatusSpy: jasmine.Spy;
+
+  const healthPayload: Record<string, any> = {
+    health: { status: 'HEALTH_OK' },
+    mon_status: { monmap: { mons: [] }, quorum: [] },
+    osd_map: { osds: [] },
+    mgr_map: { active_name: 'test_mgr', standbys: [] },
+    hosts: 0,
+    rgw: 0,
+    fs_map: { filesystems: [], standbys: [] },
+    iscsi_daemons: 1,
+    client_perf: {},
+    scrub_status: 'Inactive',
+    pools: [],
+    df: { stats: {} },
+    pg_info: { object_stats: { num_objects: 1 } }
+  };
+
+  configureTestBed({
+    imports: [
+      HttpClientTestingModule,
+      SharedModule,
+      NgbNavModule,
+      ToastrModule.forRoot(),
+      RouterTestingModule
+    ],
+    declarations: [UpgradeComponent, LogsComponent],
+    schemas: [NO_ERRORS_SCHEMA],
+    providers: [UpgradeService, { provide: SummaryService, useClass: SummaryServiceMock }]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(UpgradeComponent);
+    component = fixture.componentInstance;
+    upgradeInfoSpy = spyOn(TestBed.inject(UpgradeService), 'list').and.callFake(() => of(null));
+    getHealthSpy = spyOn(TestBed.inject(HealthService), 'getMinimalHealth');
+    upgradeStatusSpy = spyOn(TestBed.inject(UpgradeService), 'status');
+    getHealthSpy.and.returnValue(of(healthPayload));
+    const upgradeInfoPayload = {
+      image: 'quay.io/ceph-test/ceph',
+      registry: 'quay.io',
+      versions: ['18.1.0', '18.1.1', '18.1.2']
+    };
+    upgradeInfoSpy.and.returnValue(of(upgradeInfoPayload));
+    upgradeStatusSpy.and.returnValue(of({}));
+    component.fetchStatus();
+    spyOn(TestBed.inject(AuthStorageService), 'getPermissions').and.callFake(() => ({
+      configOpt: { read: true }
+    }));
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('should load the view once check for upgrade is done', () => {
+    component.ngOnInit();
+    fixture.detectChanges();
+    const firstCellSpan = fixture.debugElement.nativeElement.querySelector(
+      'cd-card[cardTitle="New Version"] .card-title'
+    );
+    expect(firstCellSpan.textContent).toContain('New Version');
+  });
+
+  it('should show button to Upgrade if a new version is available', () => {
+    const upgradeInfoPayload = {
+      image: 'quay.io/ceph-test/ceph',
+      registry: 'quay.io',
+      versions: ['18.1.0', '18.1.1', '18.1.2']
+    };
+    upgradeInfoSpy.and.returnValue(of(upgradeInfoPayload));
+    component.ngOnInit();
+    fixture.detectChanges();
+    const upgradeNowBtn = fixture.debugElement.nativeElement.querySelector('#upgrade');
+    expect(upgradeNowBtn).not.toBeNull();
+  });
+
+  it('should not show the upgrade button if there are no new version available', () => {
+    const upgradeInfoPayload: UpgradeInfoInterface = {
+      image: 'quay.io/ceph-test/ceph',
+      registry: 'quay.io',
+      versions: []
+    };
+    upgradeInfoSpy.and.returnValue(of(upgradeInfoPayload));
+    component.ngOnInit();
+    fixture.detectChanges();
+    const noUpgradesSpan = fixture.debugElement.nativeElement.querySelector(
+      '#no-upgrades-available'
+    );
+    expect(noUpgradesSpan.textContent).toBe(' Cluster is up-to-date ');
+  });
+
+  it('should show the loading screen while the api call is pending', () => {
+    upgradeInfoSpy.and.returnValue(of(null));
+    component.ngOnInit();
+    fixture.detectChanges();
+    const loading = fixture.debugElement.nativeElement.querySelector('#newVersionAvailable');
+    expect(loading.textContent).toContain('Checking for upgrade');
+  });
+
+  it('should upgrade only when there are more than 1 mgr', () => {
+    // Only one mgr in payload
+    const upgradeInfoPayload = {
+      image: 'quay.io/ceph-test/ceph',
+      registry: 'quay.io',
+      versions: ['18.1.0', '18.1.1', '18.1.2']
+    };
+    upgradeInfoSpy.and.returnValue(of(upgradeInfoPayload));
+    component.ngOnInit();
+    fixture.detectChanges();
+    const upgradeBtn = fixture.debugElement.nativeElement.querySelector('#upgrade');
+    expect(upgradeBtn.disabled).toBeTruthy();
+
+    // Add a standby mgr to the payload
+    const healthPayload2: Record<string, any> = {
+      health: { status: 'HEALTH_OK' },
+      mon_status: { monmap: { mons: [] }, quorum: [] },
+      osd_map: { osds: [] },
+      mgr_map: { active_name: 'test_mgr', standbys: ['mgr1'] },
+      hosts: 0,
+      rgw: 0,
+      fs_map: { filesystems: [], standbys: [] },
+      iscsi_daemons: 1,
+      client_perf: {},
+      scrub_status: 'Inactive',
+      pools: [],
+      df: { stats: {} },
+      pg_info: { object_stats: { num_objects: 1 } }
+    };
+
+    getHealthSpy.and.returnValue(of(healthPayload2));
+    component.ngOnInit();
+    fixture.detectChanges();
+    expect(upgradeBtn.disabled).toBeFalsy();
+  });
+
+  it('should show the error message when the upgrade fetch fails', () => {
+    upgradeInfoSpy.and.returnValue(of(null));
+    component.errorMessage = 'Failed to retrieve';
+    component.ngOnInit();
+    fixture.detectChanges();
+    const loading = fixture.debugElement.nativeElement.querySelector('#upgrade-status-error');
+    expect(loading.textContent).toContain('Failed to retrieve');
+  });
+
+  it('should show popover when health warning is present', () => {
+    const healthPayload: Record<string, any> = {
+      health: {
+        status: 'HEALTH_WARN',
+        checks: [
+          {
+            severity: 'HEALTH_WARN',
+            summary: { message: '1 pool(s) do not have an application enabled', count: 1 },
+            detail: [
+              { message: "application not enabled on pool 'scbench'" },
+              {
+                message:
+                  "use 'ceph osd pool application enable <pool-name> <app-name>', where <app-name> is 'cephfs', 'rbd', 'rgw', or freeform for custom applications."
+              }
+            ],
+            muted: false,
+            type: 'POOL_APP_NOT_ENABLED'
+          }
+        ],
+        mutes: []
+      }
+    };
+
+    getHealthSpy.and.returnValue(of(healthPayload));
+    component.ngOnInit();
+    fixture.detectChanges();
+
+    const popover = fixture.debugElement.nativeElement.querySelector(
+      '.info-card-content-clickable'
+    );
+    expect(popover).not.toBeNull();
+  });
+
+  it('should not show popover when health warning is not present', () => {
+    const healthPayload: Record<string, any> = {
+      health: {
+        status: 'HEALTH_OK'
+      }
+    };
+    getHealthSpy.and.returnValue(of(healthPayload));
+    component.ngOnInit();
+    fixture.detectChanges();
+    const popover = fixture.debugElement.nativeElement.querySelector(
+      '.info-card-content-clickable'
+    );
+    expect(popover).toBeNull();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/upgrade/upgrade.component.ts
new file mode 100644 (file)
index 0000000..0f1f231
--- /dev/null
@@ -0,0 +1,145 @@
+import { Component, OnDestroy, OnInit } from '@angular/core';
+import { Observable, ReplaySubject, Subscription, of } from 'rxjs';
+import { catchError, publishReplay, refCount, shareReplay, switchMap, tap } from 'rxjs/operators';
+import { DaemonService } from '~/app/shared/api/daemon.service';
+import { HealthService } from '~/app/shared/api/health.service';
+import { UpgradeService } from '~/app/shared/api/upgrade.service';
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdTableColumn } from '~/app/shared/models/cd-table-column';
+import { Daemon } from '~/app/shared/models/daemon.interface';
+import { Permission } from '~/app/shared/models/permissions';
+import { UpgradeInfoInterface } from '~/app/shared/models/upgrade.interface';
+import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { SummaryService } from '~/app/shared/services/summary.service';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { UpgradeStartModalComponent } from './upgrade-form/upgrade-start-modal.component';
+import { ExecutingTask } from '~/app/shared/models/executing-task';
+import { Router } from '@angular/router';
+import { RefreshIntervalService } from '~/app/shared/services/refresh-interval.service';
+
+@Component({
+  selector: 'cd-upgrade',
+  templateUrl: './upgrade.component.html',
+  styleUrls: ['./upgrade.component.scss']
+})
+export class UpgradeComponent implements OnInit, OnDestroy {
+  version: string;
+  info$: Observable<UpgradeInfoInterface>;
+  permission: Permission;
+  healthData$: Observable<any>;
+  daemons$: Observable<Daemon[]>;
+  fsid$: Observable<any>;
+  modalRef: NgbModalRef;
+  upgradableVersions: string[];
+  errorMessage: string;
+  executingTasks: ExecutingTask;
+  interval = new Subscription();
+
+  columns: CdTableColumn[] = [];
+
+  icons = Icons;
+
+  upgradeStatus$: Observable<any>;
+  subject = new ReplaySubject<any>();
+
+  constructor(
+    private modalService: ModalService,
+    private summaryService: SummaryService,
+    private upgradeService: UpgradeService,
+    private healthService: HealthService,
+    private daemonService: DaemonService,
+    private notificationService: NotificationService,
+    private router: Router,
+    private refreshIntervalService: RefreshIntervalService
+  ) {}
+
+  ngOnInit(): void {
+    this.upgradeStatus$ = this.subject.pipe(
+      switchMap(() => this.upgradeService.status()),
+      shareReplay(1)
+    );
+
+    this.columns = [
+      {
+        name: $localize`Daemon name`,
+        prop: 'daemon_name',
+        flexGrow: 1,
+        filterable: true
+      },
+      {
+        name: $localize`Version`,
+        prop: 'version',
+        flexGrow: 1,
+        filterable: true
+      }
+    ];
+
+    this.summaryService.subscribe((summary) => {
+      const version = summary.version.replace('ceph version ', '').split('-');
+      this.version = version[0];
+      this.executingTasks = summary.executing_tasks.filter((tasks) =>
+        tasks.name.includes('progress/Upgrade')
+      )[0];
+    });
+
+    this.interval = this.refreshIntervalService.intervalData$.subscribe(() => {
+      this.fetchStatus();
+    });
+
+    this.info$ = this.upgradeService.list().pipe(
+      tap((upgradeInfo: UpgradeInfoInterface) => (this.upgradableVersions = upgradeInfo.versions)),
+      publishReplay(1),
+      refCount(),
+      catchError((err) => {
+        err.preventDefault();
+        this.errorMessage = $localize`Not retrieving upgrades`;
+        this.notificationService.show(
+          NotificationType.error,
+          this.errorMessage,
+          err.error.detail || err.error.message
+        );
+        return of(null);
+      })
+    );
+
+    this.healthData$ = this.healthService.getMinimalHealth();
+    this.daemons$ = this.daemonService.list(this.upgradeService.upgradableServiceTypes);
+    this.fsid$ = this.healthService.getClusterFsid();
+  }
+
+  startUpgradeModal() {
+    this.modalRef = this.modalService.show(UpgradeStartModalComponent, {
+      versions: this.upgradableVersions
+    });
+  }
+
+  fetchStatus() {
+    this.subject.next();
+  }
+
+  upgradeNow(version: string) {
+    this.upgradeService.start(version).subscribe({
+      error: (error) => {
+        this.notificationService.show(
+          NotificationType.error,
+          $localize`Failed to start the upgrade`,
+          error
+        );
+      },
+      complete: () => {
+        this.notificationService.show(
+          NotificationType.success,
+          $localize`Started upgrading the cluster`
+        );
+        this.fetchStatus();
+        this.router.navigate(['/upgrade/progress']);
+      }
+    });
+  }
+
+  ngOnDestroy() {
+    this.interval?.unsubscribe();
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.html
deleted file mode 100644 (file)
index 9b7bf03..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-<div class="d-flex pl-1 pb-2 pt-2">
-  <div class="ms-2 me-auto">
-    <a [routerLink]="link"
-       *ngIf="link && total > 0; else noLinkTitle"
-       [ngPlural]="total"
-       i18n>
-        {{ total }}
-      <ng-template ngPluralCase="=0">{{ title }}</ng-template>
-      <ng-template ngPluralCase="=1">{{ title }}</ng-template>
-      <ng-template ngPluralCase="other">{{ title }}s</ng-template>
-    </a>
-  </div>
-
-  <ng-container [ngSwitch]="summaryType">
-    <ng-container *ngSwitchCase="'iscsi'">
-      <ng-container *ngTemplateOutlet="iscsiSummary"></ng-container>
-    </ng-container>
-    <ng-container *ngSwitchCase="'osd'">
-      <ng-container *ngTemplateOutlet="osdSummary"></ng-container>
-    </ng-container>
-    <ng-container *ngSwitchCase="'simplified'">
-      <ng-container *ngTemplateOutlet="simplifiedSummary"></ng-container>
-    </ng-container>
-    <ng-container *ngSwitchDefault>
-      <ng-container *ngTemplateOutlet="defaultSummary"></ng-container>
-    </ng-container>
-  </ng-container>
-</div>
-
-<ng-template #defaultSummary>
-  <span *ngIf="data.success || data.categoryPgAmount?.clean || (data.success === 0 && data.total === 0)">
-    <span *ngIf="data.success || (data.success === 0 && data.total === 0)">
-      {{ data.success }}
-    </span>
-    <span *ngIf="data.categoryPgAmount?.clean">
-      {{ data.categoryPgAmount?.clean }}
-    </span>
-    <i class="text-success"
-       [ngClass]="[icons.success]">
-    </i>
-  </span>
-  <span *ngIf="data.info"
-        class="ms-2">
-    <span *ngIf="data.info">
-      {{ data.info }}
-    </span>
-    <i class="text-info"
-       [ngClass]="[icons.danger]">
-    </i>
-  </span>
-  <span *ngIf="data.warn || data.categoryPgAmount?.warning"
-        class="ms-2">
-    <span *ngIf="data.warn">
-      {{ data.warn }}
-    </span>
-    <span *ngIf="data.categoryPgAmount?.warning">
-      {{ data.categoryPgAmount?.warning }}
-    </span>
-    <i class="text-warning"
-       [ngClass]="[icons.warning]">
-    </i>
-  </span>
-  <span *ngIf="data.error || data.categoryPgAmount?.unknown"
-        class="ms-2">
-    <span *ngIf="data.error">
-      {{ data.error }}
-    </span>
-    <span *ngIf="data.categoryPgAmount?.unknown">
-      {{ data.categoryPgAmount?.unknown }}
-    </span>
-    <i class="text-danger"
-       [ngClass]="[icons.danger]">
-    </i>
-  </span>
-  <span *ngIf="data.categoryPgAmount?.working"
-        class="ms-2">
-    <span *ngIf="data.categoryPgAmount?.working">
-      {{ data.categoryPgAmount?.working }}
-    </span>
-    <i class="text-warning"
-       [ngClass]="[icons.spinner, icons.spin]">
-    </i>
-  </span>
-</ng-template>
-
-<ng-template #osdSummary>
-  <span *ngIf="data.up === data.in">
-    {{ data.up }}
-    <i class="text-success"
-       [ngClass]="[icons.success]">
-    </i>
-  </span>
-  <span *ngIf="data.up !== data.in">
-    {{ data.up }}
-    <span class="fw-bold text-success">
-        up
-    </span>
-  </span>
-  <span *ngIf="data.in !== data.up"
-        class="ms-2">
-    {{ data.in }}
-    <span class="fw-bold text-success">
-        in
-    </span>
-  </span>
-  <span *ngIf="data.down"
-        class="ms-2">
-    {{ data.down }}
-    <span class="fw-bold text-danger me-2">
-        down
-    </span>
-  </span>
-  <span *ngIf="data.out"
-        class="ms-2">
-    {{ data.out }}
-    <span class="fw-bold text-danger me-2">
-        out
-    </span>
-  </span>
-  <span *ngIf="data.nearfull"
-        class="ms-2">
-        {{ data.nearfull }}
-    <span class="fw-bold text-warning me-2">
-      nearfull</span></span>
-  <span *ngIf="data.full"
-        class="ms-2">
-        {{ data.full }}
-    <span class="fw-bold text-danger">
-      full
-    </span>
-  </span>
-</ng-template>
-
-<ng-template #iscsiSummary>
-  <span>
-    {{ data.up }}
-    <i class="text-success"
-       *ngIf="data.up || data.up === 0"
-       [ngClass]="[icons.success]">
-    </i>
-  </span>
-  <span *ngIf="data.down"
-        class="ms-2">
-        {{ data.down }}
-    <i class="text-danger"
-       [ngClass]="[icons.danger]">
-    </i>
-  </span>
-</ng-template>
-
-<ng-template #simplifiedSummary>
-  <span>
-    {{ data }}
-    <i class="text-success"
-       [ngClass]="[icons.success]"></i>
-  </span>
-</ng-template>
-
-<ng-template #noLinkTitle>
-  <span *ngIf="total || total === 0"
-        [ngPlural]="total">
-    {{ total }}
-    <ng-template ngPluralCase="=0">{{ title }}</ng-template>
-    <ng-template ngPluralCase="=1">{{ title }}</ng-template>
-    <ng-template ngPluralCase="other">{{ title }}s</ng-template>
-  </span>
-</ng-template>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.scss
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.spec.ts
deleted file mode 100644 (file)
index 8932e67..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { CardRowComponent } from './card-row.component';
-
-describe('CardRowComponent', () => {
-  let component: CardRowComponent;
-  let fixture: ComponentFixture<CardRowComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [CardRowComponent]
-    }).compileComponents();
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(CardRowComponent);
-    component = fixture.componentInstance;
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card-row/card-row.component.ts
deleted file mode 100644 (file)
index 90c9391..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-import { Component, Input, OnChanges } from '@angular/core';
-import { Icons } from '~/app/shared/enum/icons.enum';
-
-@Component({
-  selector: 'cd-card-row',
-  templateUrl: './card-row.component.html',
-  styleUrls: ['./card-row.component.scss']
-})
-export class CardRowComponent implements OnChanges {
-  @Input()
-  title: string;
-
-  @Input()
-  link: string;
-
-  @Input()
-  data: any;
-
-  @Input()
-  summaryType = 'default';
-
-  icons = Icons;
-  total: number;
-
-  ngOnChanges(): void {
-    if (this.data.total || this.data.total === 0) {
-      this.total = this.data.total;
-    } else if (this.summaryType === 'iscsi') {
-      this.total = this.data.up + this.data.down || 0;
-    } else {
-      this.total = this.data;
-    }
-  }
-}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.html
deleted file mode 100644 (file)
index a2f5b9d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<div class="card shadow-sm flex-fill">
-  <h4 class="card-title mt-4 ms-4 mb-0">
-    {{ cardTitle }}
-  </h4>
-  <div class="card-body ps-0 pe-0">
-    <ng-content></ng-content>
-  </div>
-</div>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.scss
deleted file mode 100644 (file)
index fdf19a0..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-.card-body {
-  display: flex;
-  flex-direction: column;
-  justify-content: space-evenly;
-}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.spec.ts
deleted file mode 100644 (file)
index 287e1cf..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { RouterTestingModule } from '@angular/router/testing';
-
-import { configureTestBed } from '~/testing/unit-test-helper';
-import { CardComponent } from './card.component';
-
-describe('CardComponent', () => {
-  let component: CardComponent;
-  let fixture: ComponentFixture<CardComponent>;
-
-  configureTestBed({
-    imports: [RouterTestingModule],
-    declarations: [CardComponent]
-  });
-
-  beforeEach(() => {
-    fixture = TestBed.createComponent(CardComponent);
-    component = fixture.componentInstance;
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-
-  it('Setting cards title makes title visible', () => {
-    const title = 'Card Title';
-    component.cardTitle = title;
-    fixture.detectChanges();
-    const titleDiv = fixture.debugElement.nativeElement.querySelector('.card-title');
-
-    expect(titleDiv.textContent).toContain(title);
-  });
-});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/dashboard-v3/card/card.component.ts
deleted file mode 100644 (file)
index 8e93cc8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-import { Component, Input } from '@angular/core';
-
-@Component({
-  selector: 'cd-card',
-  templateUrl: './card.component.html',
-  styleUrls: ['./card.component.scss']
-})
-export class CardComponent {
-  @Input()
-  cardTitle: string;
-}
index 6ac991fd58c5603ab6b23ad1b206437a035c057d..cb8b9dadb28376b79811933b5156d7b8b44a884a 100644 (file)
@@ -1,17 +1,33 @@
-<div class="row">
-  <div class="col-3 center-text">
+<div class="row mt-2">
+  <div class="col-3 d-flex flex-column align-self-center">
     <br>
-    <b class="chartTitle"
+    <b class="chartTitle pb-2"
        i18n>{{ chartTitle }}</b>
-    <br>
-    <span [ngbTooltip]="label"
-          i18n>{{currentData}} {{ currentDataUnits }}</span>
-    <br>
-    <span [ngbTooltip]="label2"
-          i18n>{{currentData2}} {{ currentDataUnits2 }}</span>
+    <div
+         i18n>
+      <div class="d-inline-flex align-items-center gap-1">
+        <div *ngIf="!maxValue"
+             class="blue-box">
+      </div>
+        <div *ngIf="label2">{{ label }}:
+        </div>
+        {{ currentData || 'N/A' }} {{ currentDataUnits }}
+        <div *ngIf="maxValue && currentData"> used of
+          {{ maxConvertedValue }} {{ maxConvertedValueUnits }}
+        </div>
+      </div>
+    </div>
+    <div *ngIf="label2"
+         i18n>
+      <div class="d-inline-flex align-items-center gap-1">
+        <div class="yellow-box"></div>
+        <div *ngIf="label2 !== chartTitle" >{{ label2 }}: </div>
+        <div>{{ currentData2 || 'N/A' }} {{ currentDataUnits2 }}</div>
+      </div>
+    </div>
   </div>
-  <div class="col-9">
-    <div class="chart">
+  <div class="col-9 d-flex flex-column">
+    <div class="chart mt-3">
       <canvas baseChart
               [datasets]="chartData.dataset"
               [options]="options"
index 12e9b9c1c6a5e1f2d1074f9e8a0ab110367b226d..02310e37e1b3512a653840257591b2bf42b439f4 100644 (file)
@@ -1,9 +1,19 @@
-.center-text {
-  margin-top: 1.2vw;
-  position: relative;
-}
+@use './src/styles/vendor/variables' as vv;
 
 .chart {
-  height: 8vh;
-  margin-top: 15px;
+  height: 9vh;
+}
+
+.blue-box {
+  background-color: vv.$chart-color-strong-blue;
+  border: 2px double vv.$chart-color-light-gray;
+  height: 13px;
+  width: 13px;
+}
+
+.yellow-box {
+  background-color: vv.$chart-color-orange;
+  border: 2px double vv.$chart-color-light-gray;
+  height: 13px;
+  width: 13px;
 }
index 0a4f2ae1e966737fcf9f256eaddfcdb2d4ec1cfa..c2ed2f35b4fd2f33ac6d76822b5804931315095f 100644 (file)
@@ -30,98 +30,19 @@ export class DashboardAreaChartComponent implements OnChanges, AfterViewInit {
   label: string;
   @Input()
   label2?: string;
+  @Input()
+  decimals?: number = 1;
 
   currentDataUnits: string;
   currentData: number;
   currentDataUnits2?: string;
   currentData2?: number;
+  maxConvertedValue?: number;
+  maxConvertedValueUnits?: string;
 
   chartDataUnits: string;
-
-  chartData: any = {
-    dataset: [
-      {
-        label: '',
-        data: [{ x: 0, y: 0 }],
-        tension: 0,
-        pointBackgroundColor: this.cssHelper.propertyValue('chart-color-strong-blue'),
-        backgroundColor: this.cssHelper.propertyValue('chart-color-translucent-blue'),
-        borderColor: this.cssHelper.propertyValue('chart-color-strong-blue')
-      },
-      {
-        label: '',
-        data: [],
-        tension: 0,
-        pointBackgroundColor: this.cssHelper.propertyValue('chart-color-orange'),
-        backgroundColor: this.cssHelper.propertyValue('chart-color-yellow'),
-        borderColor: this.cssHelper.propertyValue('chart-color-orange')
-      }
-    ]
-  };
-
-  options: any = {
-    responsive: true,
-    maintainAspectRatio: false,
-    elements: {
-      point: {
-        radius: 0
-      }
-    },
-    legend: {
-      display: false
-    },
-    tooltips: {
-      intersect: false,
-      displayColors: true,
-      backgroundColor: this.cssHelper.propertyValue('chart-color-tooltip-background'),
-      callbacks: {
-        title: function (tooltipItem: any): any {
-          return tooltipItem[0].xLabel;
-        }
-      }
-    },
-    hover: {
-      intersect: false
-    },
-    scales: {
-      xAxes: [
-        {
-          display: false,
-          type: 'time',
-          gridLines: {
-            display: false
-          },
-          time: {
-            tooltipFormat: 'YYYY/MM/DD hh:mm:ss'
-          }
-        }
-      ],
-      yAxes: [
-        {
-          gridLines: {
-            display: false
-          },
-          ticks: {
-            beginAtZero: true,
-            maxTicksLimit: 3,
-            callback: (value: any) => {
-              if (value === 0) {
-                return null;
-              }
-              return this.fillString(this.convertUnits(value));
-            }
-          }
-        }
-      ]
-    },
-    plugins: {
-      borderArea: true,
-      chartAreaBorder: {
-        borderColor: this.cssHelper.propertyValue('chart-color-slight-dark-gray'),
-        borderWidth: 2
-      }
-    }
-  };
+  chartData: any = {};
+  options: any = {};
 
   public chartAreaBorderPlugin: PluginServiceGlobalRegistrationAndOptions[] = [
     {
@@ -151,7 +72,111 @@ export class DashboardAreaChartComponent implements OnChanges, AfterViewInit {
     private dimlessPipe: DimlessPipe,
     private formatter: FormatterService,
     private numberFormatter: NumberFormatterService
-  ) {}
+  ) {
+    this.chartData = {
+      dataset: [
+        {
+          label: '',
+          data: [{ x: 0, y: 0 }],
+          tension: 0.2,
+          pointBackgroundColor: this.cssHelper.propertyValue('chart-color-strong-blue'),
+          backgroundColor: this.cssHelper.propertyValue('chart-color-translucent-blue'),
+          borderColor: this.cssHelper.propertyValue('chart-color-strong-blue'),
+          borderWidth: 1
+        },
+        {
+          label: '',
+          data: [],
+          tension: 0.2,
+          pointBackgroundColor: this.cssHelper.propertyValue('chart-color-orange'),
+          backgroundColor: this.cssHelper.propertyValue('chart-color-translucent-yellow'),
+          borderColor: this.cssHelper.propertyValue('chart-color-orange'),
+          borderWidth: 1
+        }
+      ]
+    };
+
+    this.options = {
+      responsive: true,
+      maintainAspectRatio: false,
+      animation: false,
+      elements: {
+        point: {
+          radius: 0
+        }
+      },
+      legend: {
+        display: false
+      },
+      tooltips: {
+        mode: 'index',
+        custom: function (tooltipModel: { x: number; y: number }) {
+          tooltipModel.x = 10;
+          tooltipModel.y = 0;
+        }.bind(this),
+        intersect: false,
+        displayColors: true,
+        backgroundColor: this.cssHelper.propertyValue('chart-color-tooltip-background'),
+        callbacks: {
+          title: function (tooltipItem: any): any {
+            return tooltipItem[0].xLabel;
+          },
+          label: (tooltipItems: any, data: any) => {
+            return (
+              ' ' +
+              data.datasets[tooltipItems.datasetIndex].label +
+              ' - ' +
+              tooltipItems.value +
+              ' ' +
+              this.chartDataUnits
+            );
+          }
+        }
+      },
+      hover: {
+        intersect: false
+      },
+      scales: {
+        xAxes: [
+          {
+            display: false,
+            type: 'time',
+            gridLines: {
+              display: false
+            },
+            time: {
+              tooltipFormat: 'DD/MM/YYYY - HH:mm:ss'
+            }
+          }
+        ],
+        yAxes: [
+          {
+            afterFit: (scaleInstance: any) => (scaleInstance.width = 100),
+            gridLines: {
+              display: false
+            },
+            ticks: {
+              beginAtZero: true,
+              maxTicksLimit: 4,
+              callback: (value: any) => {
+                if (value === 0) {
+                  return null;
+                }
+                return this.convertUnits(value);
+              }
+            }
+          }
+        ]
+      },
+      plugins: {
+        borderArea: true,
+        chartAreaBorder: {
+          borderColor: this.cssHelper.propertyValue('chart-color-slight-dark-gray'),
+          borderWidth: 1
+        }
+      }
+    };
+  }
 
   ngOnChanges(): void {
     this.updateChartData();
@@ -162,17 +187,20 @@ export class DashboardAreaChartComponent implements OnChanges, AfterViewInit {
   }
 
   private updateChartData(): void {
+    this.chartData.dataset[0].label = this.label;
+    this.chartData.dataset[1].label = this.label2;
+    this.setChartTicks();
     if (this.data) {
-      this.setChartTicks();
       this.chartData.dataset[0].data = this.formatData(this.data);
-      this.chartData.dataset[0].label = this.label;
       [this.currentData, this.currentDataUnits] = this.convertUnits(
         this.data[this.data.length - 1][1]
       ).split(' ');
+      [this.maxConvertedValue, this.maxConvertedValueUnits] = this.convertUnits(
+        this.maxValue
+      ).split(' ');
     }
     if (this.data2) {
       this.chartData.dataset[1].data = this.formatData(this.data2);
-      this.chartData.dataset[1].label = this.label2;
       [this.currentData2, this.currentDataUnits2] = this.convertUnits(
         this.data2[this.data2.length - 1][1]
       ).split(' ');
@@ -193,30 +221,34 @@ export class DashboardAreaChartComponent implements OnChanges, AfterViewInit {
 
   private convertToChartDataUnits(data: any): any {
     let dataWithUnits: string = '';
-    if (this.chartDataUnits) {
+    if (this.chartDataUnits !== null) {
       if (this.dataUnits === 'B') {
         dataWithUnits = this.numberFormatter.formatBytesFromTo(
           data,
           this.dataUnits,
-          this.chartDataUnits
+          this.chartDataUnits,
+          this.decimals
         );
       } else if (this.dataUnits === 'B/s') {
         dataWithUnits = this.numberFormatter.formatBytesPerSecondFromTo(
           data,
           this.dataUnits,
-          this.chartDataUnits
+          this.chartDataUnits,
+          this.decimals
         );
       } else if (this.dataUnits === 'ms') {
         dataWithUnits = this.numberFormatter.formatSecondsFromTo(
           data,
           this.dataUnits,
-          this.chartDataUnits
+          this.chartDataUnits,
+          this.decimals
         );
       } else {
         dataWithUnits = this.numberFormatter.formatUnitlessFromTo(
           data,
           this.dataUnits,
-          this.chartDataUnits
+          this.chartDataUnits,
+          this.decimals
         );
       }
     }
@@ -226,29 +258,17 @@ export class DashboardAreaChartComponent implements OnChanges, AfterViewInit {
   private convertUnits(data: any): any {
     let dataWithUnits: string = '';
     if (this.dataUnits === 'B') {
-      dataWithUnits = this.dimlessBinary.transform(data);
+      dataWithUnits = this.dimlessBinary.transform(data, this.decimals);
     } else if (this.dataUnits === 'B/s') {
-      dataWithUnits = this.dimlessBinaryPerSecond.transform(data);
+      dataWithUnits = this.dimlessBinaryPerSecond.transform(data, this.decimals);
     } else if (this.dataUnits === 'ms') {
-      dataWithUnits = this.formatter.format_number(data, 1000, ['ms', 's']);
+      dataWithUnits = this.formatter.format_number(data, 1000, ['ms', 's'], this.decimals);
     } else {
-      dataWithUnits = this.dimlessPipe.transform(data);
+      dataWithUnits = this.dimlessPipe.transform(data, this.decimals);
     }
     return dataWithUnits;
   }
 
-  private fillString(str: string): string {
-    let maxNumberOfChar: number = 8;
-    let numberOfChars: number = str.length;
-    if (str.length < 4) {
-      maxNumberOfChar = 11;
-    }
-    for (; numberOfChars < maxNumberOfChar; numberOfChars++) {
-      str = '\u00A0' + str;
-    }
-    return str + '\u00A0\u00A0';
-  }
-
   private setChartTicks() {
     if (!this.chart) {
       return;
@@ -258,11 +278,7 @@ export class DashboardAreaChartComponent implements OnChanges, AfterViewInit {
     let maxValueDataUnits = '';
     let extraRoom = 1.2;
 
-    if (this.maxValue) {
-      extraRoom = 1.0;
-      [maxValue, maxValueDataUnits] = this.convertUnits(this.maxValue).split(' ');
-    } else if (this.data) {
-      extraRoom = 1.2;
+    if (this.data) {
       let maxValueData = Math.max(...this.data.map((values: any) => values[1]));
       if (this.data2) {
         let maxValueData2 = Math.max(...this.data2.map((values: any) => values[1]));
@@ -276,15 +292,14 @@ export class DashboardAreaChartComponent implements OnChanges, AfterViewInit {
     const yAxesTicks = this.chart.chart.options.scales.yAxes[0].ticks;
     yAxesTicks.suggestedMax = maxValue * extraRoom;
     yAxesTicks.suggestedMin = 0;
-    yAxesTicks.stepSize = Number((yAxesTicks.suggestedMax / 2).toFixed(0));
     yAxesTicks.callback = (value: any) => {
       if (value === 0) {
         return null;
       }
       if (!maxValueDataUnits) {
-        return this.fillString(`${value}`);
+        return `${value}`;
       }
-      return this.fillString(`${value} ${maxValueDataUnits}`);
+      return `${value} ${maxValueDataUnits}`;
     };
     this.chartDataUnits = maxValueDataUnits || '';
     this.chart.chart.update();
index ba8176beab3b505aa95e9916011fceb0a22666cc..c013ab5404b4b20b1519dfb6848e41a5de49b12f 100644 (file)
@@ -1,4 +1,4 @@
-<div class="chart-container">
+<div class="chart-container d-flex align-items-center justify-content-center">
   <canvas baseChart
           #chartCanvas
           [datasets]="chartConfig.dataset"
index 4aaabb6eb4a0116f36608cfaa63fe39d4137eb97..716ca3500ba020c56c9bb37f5fd2083ce4d4c139 100644 (file)
@@ -22,91 +22,7 @@ export class DashboardPieComponent implements OnChanges, OnInit {
 
   color: string;
 
-  chartConfig: any = {
-    chartType: 'doughnut',
-    labels: ['', '', ''],
-    dataset: [
-      {
-        label: null,
-        backgroundColor: [
-          this.cssHelper.propertyValue('chart-color-light-gray'),
-          this.cssHelper.propertyValue('chart-color-slight-dark-gray'),
-          this.cssHelper.propertyValue('chart-color-dark-gray')
-        ]
-      },
-      {
-        label: null,
-        borderWidth: 0,
-        backgroundColor: [
-          this.cssHelper.propertyValue('chart-color-blue'),
-          this.cssHelper.propertyValue('chart-color-white')
-        ]
-      }
-    ],
-    options: {
-      cutoutPercentage: 70,
-      events: ['click', 'mouseout', 'touchstart'],
-      legend: {
-        display: true,
-        position: 'right',
-        labels: {
-          boxWidth: 10,
-          usePointStyle: false,
-          generateLabels: (chart: any) => {
-            const labels = { 0: {}, 1: {}, 2: {} };
-            labels[0] = {
-              text: $localize`Used: ${chart.data.datasets[1].data[2]}`,
-              fillStyle: chart.data.datasets[1].backgroundColor[0],
-              strokeStyle: chart.data.datasets[1].backgroundColor[0]
-            };
-            labels[1] = {
-              text: $localize`Warning: ${chart.data.datasets[0].data[0]}%`,
-              fillStyle: chart.data.datasets[0].backgroundColor[1],
-              strokeStyle: chart.data.datasets[0].backgroundColor[1]
-            };
-            labels[2] = {
-              text: $localize`Danger: ${
-                chart.data.datasets[0].data[0] + chart.data.datasets[0].data[1]
-              }%`,
-              fillStyle: chart.data.datasets[0].backgroundColor[2],
-              strokeStyle: chart.data.datasets[0].backgroundColor[2]
-            };
-
-            return labels;
-          }
-        }
-      },
-      plugins: {
-        center_text: true
-      },
-      tooltips: {
-        enabled: true,
-        displayColors: false,
-        backgroundColor: this.cssHelper.propertyValue('chart-color-tooltip-background'),
-        cornerRadius: 0,
-        bodyFontSize: 14,
-        bodyFontStyle: '600',
-        position: 'nearest',
-        xPadding: 12,
-        yPadding: 12,
-        filter: (tooltipItem: any) => {
-          return tooltipItem.datasetIndex === 1;
-        },
-        callbacks: {
-          label: (item: Record<string, any>, data: Record<string, any>) => {
-            let text = data.labels[item.index];
-            if (!text.includes('%')) {
-              text = `${text} (${data.datasets[item.datasetIndex].data[item.index]}%)`;
-            }
-            return text;
-          }
-        }
-      },
-      title: {
-        display: false
-      }
-    }
-  };
+  chartConfig: any = {};
 
   public doughnutChartPlugins: PluginServiceGlobalRegistrationAndOptions[] = [
     {
@@ -141,7 +57,93 @@ export class DashboardPieComponent implements OnChanges, OnInit {
     }
   ];
 
-  constructor(private cssHelper: CssHelper, private dimlessBinary: DimlessBinaryPipe) {}
+  constructor(private cssHelper: CssHelper, private dimlessBinary: DimlessBinaryPipe) {
+    this.chartConfig = {
+      chartType: 'doughnut',
+      labels: ['', '', ''],
+      dataset: [
+        {
+          label: null,
+          backgroundColor: [
+            this.cssHelper.propertyValue('chart-color-light-gray'),
+            this.cssHelper.propertyValue('chart-color-slight-dark-gray'),
+            this.cssHelper.propertyValue('chart-color-dark-gray')
+          ]
+        },
+        {
+          label: null,
+          borderWidth: 0,
+          backgroundColor: [
+            this.cssHelper.propertyValue('chart-color-blue'),
+            this.cssHelper.propertyValue('chart-color-white')
+          ]
+        }
+      ],
+      options: {
+        cutoutPercentage: 70,
+        events: ['click', 'mouseout', 'touchstart'],
+        legend: {
+          display: true,
+          position: 'right',
+          labels: {
+            boxWidth: 10,
+            usePointStyle: false,
+            generateLabels: (chart: any) => {
+              const labels = { 0: {}, 1: {}, 2: {} };
+              labels[0] = {
+                text: $localize`Used: ${chart.data.datasets[1].data[2]}`,
+                fillStyle: chart.data.datasets[1].backgroundColor[0],
+                strokeStyle: chart.data.datasets[1].backgroundColor[0]
+              };
+              labels[1] = {
+                text: $localize`Warning: ${chart.data.datasets[0].data[0]}%`,
+                fillStyle: chart.data.datasets[0].backgroundColor[1],
+                strokeStyle: chart.data.datasets[0].backgroundColor[1]
+              };
+              labels[2] = {
+                text: $localize`Danger: ${
+                  chart.data.datasets[0].data[0] + chart.data.datasets[0].data[1]
+                }%`,
+                fillStyle: chart.data.datasets[0].backgroundColor[2],
+                strokeStyle: chart.data.datasets[0].backgroundColor[2]
+              };
+
+              return labels;
+            }
+          }
+        },
+        plugins: {
+          center_text: true
+        },
+        tooltips: {
+          enabled: true,
+          displayColors: false,
+          backgroundColor: this.cssHelper.propertyValue('chart-color-tooltip-background'),
+          cornerRadius: 0,
+          bodyFontSize: 14,
+          bodyFontStyle: '600',
+          position: 'nearest',
+          xPadding: 12,
+          yPadding: 12,
+          filter: (tooltipItem: any) => {
+            return tooltipItem.datasetIndex === 1;
+          },
+          callbacks: {
+            label: (item: Record<string, any>, data: Record<string, any>) => {
+              let text = data.labels[item.index];
+              if (!text.includes('%')) {
+                text = `${text} (${data.datasets[item.datasetIndex].data[item.index]}%)`;
+              }
+              return text;
+            }
+          }
+        },
+        title: {
+          display: false
+        }
+      }
+    };
+  }
 
   ngOnInit() {
     this.prepareRawUsage(this.chartConfig, this.data);
index 3b0915232b665648cd791c380675ec81c662a82d..9e368efc7f0c90d7ef71841f7ea32e1b1ca66cc1 100644 (file)
@@ -26,35 +26,27 @@ export class DashboardTimeSelectorComponent {
       },
       {
         name: $localize`Last 30 minutes`,
-        value: this.timeToDate(30 * 60, 6)
+        value: this.timeToDate(30 * 60, 7)
       },
       {
         name: $localize`Last 1 hour`,
-        value: this.timeToDate(3600, 12)
+        value: this.timeToDate(3600, 14)
       },
       {
         name: $localize`Last 3 hours`,
-        value: this.timeToDate(3 * 3600, 36)
+        value: this.timeToDate(3 * 3600, 42)
       },
       {
         name: $localize`Last 6 hours`,
-        value: this.timeToDate(6 * 3600, 72)
+        value: this.timeToDate(6 * 3600, 84)
       },
       {
         name: $localize`Last 12 hours`,
-        value: this.timeToDate(12 * 3600, 144)
+        value: this.timeToDate(12 * 3600, 168)
       },
       {
         name: $localize`Last 24 hours`,
-        value: this.timeToDate(24 * 3600, 288)
-      },
-      {
-        name: $localize`Last 2 days`,
-        value: this.timeToDate(48 * 3600, 576)
-      },
-      {
-        name: $localize`Last 7 days`,
-        value: this.timeToDate(168 * 3600, 2016)
+        value: this.timeToDate(24 * 3600, 336)
       }
     ];
     this.time = this.times[3].value;
@@ -64,7 +56,7 @@ export class DashboardTimeSelectorComponent {
     this.selectedTime.emit(this.timeToDate(this.time.end - this.time.start, this.time.step));
   }
 
-  private timeToDate(secondsAgo: number, step: number): any {
+  public timeToDate(secondsAgo: number, step: number): any {
     const date: number = moment().unix() - secondsAgo;
     const dateNow: number = moment().unix();
     const formattedDate: any = {
index 2c3b4cc369fc73dd64d3c75c10958ad015170b73..50db430906e273d4e358032fde85cd3c548b22dc 100644 (file)
@@ -9,12 +9,10 @@ import { SimplebarAngularModule } from 'simplebar-angular';
 
 import { SharedModule } from '~/app/shared/shared.module';
 import { CephSharedModule } from '../shared/ceph-shared.module';
-import { CardComponent } from './card/card.component';
 import { DashboardAreaChartComponent } from './dashboard-area-chart/dashboard-area-chart.component';
 import { DashboardPieComponent } from './dashboard-pie/dashboard-pie.component';
 import { DashboardTimeSelectorComponent } from './dashboard-time-selector/dashboard-time-selector.component';
 import { DashboardV3Component } from './dashboard/dashboard-v3.component';
-import { CardRowComponent } from './card-row/card-row.component';
 import { PgSummaryPipe } from './pg-summary.pipe';
 
 @NgModule({
@@ -34,14 +32,12 @@ import { PgSummaryPipe } from './pg-summary.pipe';
 
   declarations: [
     DashboardV3Component,
-    CardComponent,
     DashboardPieComponent,
-    CardRowComponent,
     PgSummaryPipe,
     DashboardAreaChartComponent,
     DashboardTimeSelectorComponent
   ],
 
-  exports: [DashboardV3Component]
+  exports: [DashboardV3Component, DashboardAreaChartComponent, DashboardTimeSelectorComponent]
 })
 export class DashboardV3Module {}
index 062e33f002b610bd639228691c32f35066ec5d5b..faf040366fd357deb219af9c86c222c5d95da006 100644 (file)
-<div class="container-fluid"
+<div class="container-fluid p-4"
      *ngIf="healthData && enabledFeature$ | async as enabledFeature">
-  <div class="row mx-0">
-    <cd-card cardTitle="Details"
-             i18n-title
-             class="col-sm-3 px-3"
-             [ngClass]="{'d-flex': flexHeight}"
-             aria-label="Details card">
-      <dl class="ms-4 me-4">
-        <dt>FSID</dt>
-        <dd>{{ detailsCardData.fsid }}</dd>
-        <dt>Orchestrator</dt>
-        <dd i18n>{{ detailsCardData.orchestrator || 'Orchestrator is not available' }}</dd>
-        <dt>Ceph version</dt>
-        <dd>{{ detailsCardData.cephVersion }}</dd>
-      </dl>
-    </cd-card>
 
-    <cd-card cardTitle="Status"
-             i18n-title
-             class="col-sm-6 px-3 d-flex"
-             aria-label="Status card">
-      <div class="d-flex ms-4 me-4 mb-5 center-content">
-        <ng-template #healthChecks>
-          <ng-container *ngTemplateOutlet="logsLink"></ng-container>
-          <ul>
-            <li *ngFor="let check of healthData.health.checks">
-              <span [ngStyle]="check.severity | healthColor"
-                    [class.health-warn-description]="check.severity === 'HEALTH_WARN'">
-              {{ check.type }}</span>: {{ check.summary.message }}
-            </li>
-          </ul>
-        </ng-template>
-        <i *ngIf="healthData.health?.status"
-           [ngClass]="[healthData.health.status | healthIcon, icons.large2x]"
-           [ngStyle]="healthData.health.status | healthColor"
-           [title]="healthData.health.status"></i>
-        <a class="ms-2 mt-n1 lead text-primary"
-           [ngbPopover]="healthChecks"
-           popoverClass="info-card-popover-cluster-status"
-           *ngIf="healthData.health?.checks?.length"
-           i18n>Cluster</a>
-        <span class="ms-2 mt-n1 lead"
-              *ngIf="!healthData.health?.checks?.length"
-              i18n>Cluster</span>
-      </div>
-      <section class="border-top mt-5"
-               *ngIf="isAlertmanagerConfigured && (prometheusAlertService.activeCriticalAlerts || prometheusAlertService.activeWarningAlerts)">
-        <div class="d-flex flex-wrap ms-4 me-4">
-          <span class="pt-2"
-                i18n>Alerts</span>
-          <!-- Potentially make widget component -->
-          <button class="btn btn-outline-danger rounded-pill ms-2"
-                  [ngClass]="{'active': showAlerts && alertType === 'critical'}"
-                  title="Danger"
-                  (click)="toggleAlertsWindow('danger')"
-                  id="dangerAlerts"
-                  i18n-title
-                  *ngIf="prometheusAlertService?.activeCriticalAlerts > 0">
-            <i [ngClass]="[icons.danger]"></i>
-            <span>{{ prometheusAlertService.activeCriticalAlerts }}</span>
-          </button>
+  <div class="row d-flex flex-row ps-3">
 
-          <button class="btn btn-outline-warning rounded-pill ms-2"
-                  [ngClass]="{'active': showAlerts && alertType === 'warning'}"
-                  title="Warning"
-                  (click)="toggleAlertsWindow('warning')"
-                  id="warningAlerts"
-                  i18n-title
-                  *ngIf="prometheusAlertService?.activeWarningAlerts > 0">
-            <i [ngClass]="[icons.infoCircle]"></i>
-            <span>{{ prometheusAlertService.activeWarningAlerts }}</span>
-          </button>
+    <!-- First Grid to hold Details and Inventory Card-->
+    <div class="col-sm-3 d-flex flex-column ps-2 pe-4">
 
-          <div class="pt-0 position-right">
-            <button class="btn btn-block dropdown-toggle"
-                    data-toggle="collapse"
-                    aria-label="toggle alert window"
-                    [attr.aria-expanded]="showAlerts"
-                    (click)="toggleAlertsWindow('danger', 'true')"></button>
+      <!-- Details Card-->
+      <cd-card cardTitle="Details"
+               i18n-title
+               class="details"
+               aria-label="Details card">
+        <dl class="ms-4 me-4">
+          <dt>Cluster ID</dt>
+          <dd>{{ detailsCardData.fsid }}</dd>
+          <dt>Orchestrator</dt>
+          <dd i18n>{{ detailsCardData.orchestrator || 'Orchestrator is not available' }}</dd>
+          <dt>Ceph version</dt>
+          <dd>{{ detailsCardData.cephVersion }}</dd>
+          <dt>Cluster API</dt>
+          <dd>
+            <a routerLink="/api-docs"
+               target="_blank">
+               {{ origin }}/api-docs
+              <i class="fa fa-external-link"></i>
+            </a>
+          </dd>
+          <ng-container>
+            <dt>Telemetry Dashboard
+              <span
+                class="badge"
+                [ngClass]="telemetryEnabled ? 'badge-success' : 'badge-secondary'"
+                [ngbTooltip]="getTelemetryText()" >
+                {{ telemetryEnabled ? 'Active' : 'Inactive' }}
+              </span>
+            </dt>
+            <dd>
+              <a target="_blank"
+                 [href]="telemetryURL">
+                 {{ telemetryURL }}
+                <i class="fa fa-external-link"></i>
+              </a>
+            </dd>
+          </ng-container>
+        </dl>
+      </cd-card>
 
-          </div>
-        </div>
-        <div class="alerts pt-0"
-             *ngIf="showAlerts">
-          <hr class="mt-4">
-          <ngx-simplebar [options]="simplebar">
-            <div class="card-body ps-0 pe-1 pt-1">
-              <ng-container *ngTemplateOutlet="alertsCard"></ng-container>
-            </div>
-          </ngx-simplebar>
-        </div>
-      </section>
-    </cd-card>
-
-    <cd-card cardTitle="Capacity"
-             i18n-title
-             class="col-sm-3 px-3"
-             [ngClass]="{'d-flex': flexHeight}"
-             aria-label="Capacity card">
-      <ng-container class="ms-4 me-4"
-                    *ngIf="capacity && osdSettings">
-        <cd-dashboard-pie [data]="{max: capacity.total_bytes, current: capacity.total_used_raw_bytes}"
-                          [lowThreshold]="osdSettings.nearfull_ratio"
-                          [highThreshold]="osdSettings.full_ratio">
-        </cd-dashboard-pie>
-      </ng-container>
-    </cd-card>
-  </div>
-  <!-- Second row -->
-  <div class="row mx-0">
-    <!-- Inventory Card -->
-    <cd-card cardTitle="Inventory"
-             i18n-title
-             class="col-sm-3 px-3 d-flex"
-             aria-label="Inventory card">
-      <hr>
-      <!-- Hosts -->
-      <li class="list-group-item">
+      <!-- Inventory Card-->
+      <cd-card cardTitle="Inventory"
+               i18n-title
+               class="pt-4"
+               aria-label="Inventory card">
+        <!-- Hosts -->
         <cd-card-row [data]="healthData.hosts"
                      link="/hosts"
                      title="Host"
                      summaryType="simplified"
                      *ngIf="healthData.hosts != null"></cd-card-row>
-      </li>
-      <hr>
-      <!-- Monitors -->
-      <li class="list-group-item">
+        <!-- Monitors -->
         <cd-card-row [data]="healthData.mon_status.monmap.mons.length"
                      link="/monitor"
                      title="Monitor"
                      summaryType="simplified"
                      *ngIf="healthData.mon_status"></cd-card-row>
-      </li>
-      <hr>
-      <!-- Managers -->
-      <li *ngIf="healthData.mgr_map"
-          class="list-group-item">
+        <!-- Managers -->
         <cd-card-row [data]="healthData.mgr_map | mgrSummary"
                      title="Manager"
                      *ngIf="healthData.mgr_map"></cd-card-row>
-      </li>
-      <hr>
-      <!-- OSDs -->
-      <li class="list-group-item">
+
+        <!-- OSDs -->
         <cd-card-row [data]="healthData.osd_map | osdSummary"
                      link="/osd"
                      title="OSD"
                      summaryType="osd"
                      *ngIf="healthData.osd_map"></cd-card-row>
-      </li>
-      <hr>
-      <!-- Pools -->
-      <li *ngIf="healthData.pools"
-          class="list-group-item">
+
+        <!-- Pools -->
         <cd-card-row [data]="healthData.pools.length"
                      link="/pool"
                      title="Pool"
                      summaryType="simplified"
                      *ngIf="healthData.pools"></cd-card-row>
-      </li>
-      <hr>
-      <!-- PG Info -->
-      <li class="list-group-item">
+
+        <!-- PG Info -->
         <cd-card-row [data]="healthData.pg_info | pgSummary"
                      title="PG"
                      *ngIf="healthData.pg_info"></cd-card-row>
-      </li>
-      <hr>
-      <!-- Object gateways -->
-      <li *ngIf="enabledFeature.rgw && healthData.rgw != null"
-          class="list-group-item"
-          id="rgw-item">
+
+        <!-- Object gateways -->
         <cd-card-row [data]="healthData.rgw"
                      link="/rgw/daemon"
                      title="Object Gateway"
                      summaryType="simplified"
-                     *ngIf="healthData.rgw || healthData.rgw === 0 "></cd-card-row>
-      </li>
-      <hr>
-      <!-- Metadata Servers -->
-      <li *ngIf="enabledFeature.cephfs && healthData.fs_map"
-          class="list-group-item"
-          id="mds-item">
+                     id="rgw-item"
+                     *ngIf="enabledFeature.rgw && healthData.rgw || healthData.rgw === 0 "></cd-card-row>
+
+        <!-- Metadata Servers -->
         <cd-card-row [data]="healthData.fs_map | mdsSummary"
                      title="Metadata Server"
-                     *ngIf="healthData.fs_map"></cd-card-row>
-      </li>
-      <hr>
-      <!-- iSCSI Gateways -->
-      <li *ngIf="enabledFeature.iscsi && healthData.iscsi_daemons != null"
-          class="list-group-item"
-          id="iscsi-item">
+                     id="mds-item"
+                     *ngIf="enabledFeature.cephfs && healthData.fs_map"></cd-card-row>
+        <!-- iSCSI Gateways -->
         <cd-card-row [data]="healthData.iscsi_daemons"
                      link="/iscsi/daemon"
                      title="iSCSI Gateway"
                      summaryType="iscsi"
-                     *ngIf="healthData.iscsi_daemons"></cd-card-row>
-      </li>
-    </cd-card>
+                     id="iscsi-item"
+                     *ngIf="enabledFeature.iscsi && healthData.iscsi_daemons"></cd-card-row>
+      </cd-card>
+    </div>
 
-    <cd-card cardTitle="Cluster utilization"
-             i18n-title
-             class="col-sm-9 px-3 d-flex"
-             aria-label="Cluster utilization card">
-      <div class="ms-4 me-4 mt-0">
-        <cd-dashboard-time-selector (selectedTime)="getPrometheusData($event)">
-        </cd-dashboard-time-selector>
-        <ng-container *ngIf="capacity">
-          <cd-dashboard-area-chart chartTitle="Used Capacity"
-                                   [maxValue]="capacity.total_bytes"
-                                   dataUnits="B"
-                                   label="Used Capacity"
-                                   [data]="queriesResults.USEDCAPACITY">
-          </cd-dashboard-area-chart>
-        </ng-container>
-        <cd-dashboard-area-chart chartTitle="IOPS"
-                                 dataUnits=""
-                                 label="OPS"
-                                 label2="IPS"
-                                 [data]="queriesResults.OPS"
-                                 [data2]="queriesResults.IPS">
-        </cd-dashboard-area-chart>
-        <cd-dashboard-area-chart chartTitle="Latency"
-                                 dataUnits="ms"
-                                 label="Read"
-                                 label2="Write"
-                                 [data]="queriesResults.READLATENCY"
-                                 [data2]="queriesResults.WRITELATENCY">
-        </cd-dashboard-area-chart>
-        <cd-dashboard-area-chart chartTitle="Client Throughput"
-                                 dataUnits="B/s"
-                                 label="Read"
-                                 label2="Write"
-                                 [data]="queriesResults.READCLIENTTHROUGHPUT"
-                                 [data2]="queriesResults.WRITECLIENTTHROUGHPUT">
-        </cd-dashboard-area-chart>
-        <cd-dashboard-area-chart chartTitle="Recovery Throughput"
-                                 dataUnits="B/s"
-                                 label="Recovery Throughput"
-                                 [data]="queriesResults.RECOVERYBYTES">
-        </cd-dashboard-area-chart>
+    <!-- Second Grid to hold Status Capacity and Cluster Utilization Cards-->
+    <div class="col-sm-9 ps-0">
+      <div class="row">
+        <!-- This column will hold Status and Capacity cards-->
+        <div class="col-sm-8">
+          <cd-card cardTitle="Status"
+                   i18n-title
+                   aria-label="Status card"
+                   class="status"
+                   [alignItemsCenter]="true"
+                   [cardFooter]="isAlertmanagerConfigured && prometheusAlertService.alerts.length"
+                   [fullHeight]="true">
+            <div class="viewAlert"
+                 *ngIf="prometheusAlertService.alerts.length">
+              <a href="#/monitoring/active-alerts"
+                 i18n>
+                View alerts
+              </a>
+            </div>
+            <div class="d-flex flex-column ms-4 me-4 mt-4 mb-4">
+              <ng-template #healthChecks>
+                <ng-container *ngTemplateOutlet="logsLink"></ng-container>
+                <ul>
+                  <li *ngFor="let check of healthData.health.checks">
+                    <span [ngStyle]="check.severity | healthColor"
+                          [class.health-warn-description]="check.severity === 'HEALTH_WARN'">
+                    {{ check.type }}</span>: {{ check.summary.message }}
+                  </li>
+                </ul>
+              </ng-template>
+
+              <div class="d-flex flex-row">
+                <i *ngIf="healthData.health?.status"
+                   [ngClass]="[healthData.health.status | healthIcon, icons.large2x]"
+                   [ngStyle]="healthData.health.status | healthColor"
+                   [title]="healthData.health.status"></i>
+                <a class="ms-2 mt-n1 lead text-primary"
+                   [ngbPopover]="healthChecks"
+                   popoverClass="info-card-popover-cluster-status"
+                   [openDelay]="300"
+                   [closeDelay]="500"
+                   triggers="mouseenter:mouseleave"
+                   *ngIf="healthData.health?.checks?.length"
+                   i18n>Cluster</a>
+                <span class="ms-2 mt-n1 lead"
+                      *ngIf="!healthData.health?.checks?.length"
+                      i18n>Cluster</span>
+              </div>
+            </div>
+            <section class="footer alerts"
+                     *ngIf="isAlertmanagerConfigured && prometheusAlertService.alerts.length">
+              <div class="d-flex flex-wrap ms-4 me-4 mb-3 mt-3">
+                <span class="pt-2"
+                      i18n>Alerts</span>
+
+                <!-- Potentially make widget component -->
+                <button class="btn btn-outline-danger rounded-pill ms-2"
+                        [ngClass]="{'active': true && alertType === 'critical'}"
+                        title="Danger"
+                        (click)="toggleAlertsWindow('critical')"
+                        id="dangerAlerts"
+                        i18n-title
+                        *ngIf="prometheusAlertService?.activeCriticalAlerts">
+                  <i [ngClass]="[icons.danger]"></i>
+                  <span>{{ prometheusAlertService.activeCriticalAlerts }}</span>
+                </button>
+
+                <button class="btn btn-outline-warning rounded-pill ms-2"
+                        [ngClass]="{'active': true && alertType === 'warning'}"
+                        title="Warning"
+                        (click)="toggleAlertsWindow('warning')"
+                        id="warningAlerts"
+                        i18n-title
+                        *ngIf="prometheusAlertService?.activeWarningAlerts">
+                  <i [ngClass]="[icons.infoCircle]"></i>
+                  <span>{{ prometheusAlertService.activeWarningAlerts }}</span>
+                </button>
+              </div>
+
+              <div class="alerts-section pt-0">
+                <hr class="mt-1 mb-0">
+                <ngx-simplebar [options]="simplebar">
+                  <div class="card-body p-0">
+                    <ng-container *ngTemplateOutlet="alertsCard"></ng-container>
+                  </div>
+                </ngx-simplebar>
+              </div>
+            </section>
+          </cd-card>
+        </div>
+        <div class="col-sm-4 ps-0">
+          <cd-card cardTitle="Capacity"
+                   i18n-title
+                   [fullHeight]="true"
+                   aria-label="Capacity card">
+            <ng-container class="ms-4 me-4"
+                          *ngIf="capacity && osdSettings">
+              <cd-dashboard-pie [data]="{max: capacity.total_bytes, current: capacity.total_used_raw_bytes}"
+                                [lowThreshold]="osdSettings.nearfull_ratio"
+                                [highThreshold]="osdSettings.full_ratio">
+              </cd-dashboard-pie>
+            </ng-container>
+          </cd-card>
+        </div>
+
+      <!-- This column will hold Cluster Utlization card -->
+        <div class="col-sm-12 d-flex flex-column pt-4">
+          <cd-card cardTitle="Cluster Utilization"
+                   i18n-title
+                   aria-label="Cluster utilization card">
+            <div class="ms-4 me-4 mt-0">
+              <cd-dashboard-time-selector (selectedTime)="getPrometheusData($event)">
+              </cd-dashboard-time-selector>
+              <ng-container *ngIf="capacity">
+                <cd-dashboard-area-chart chartTitle="Used Capacity (RAW)"
+                                         [maxValue]="capacity.total_bytes"
+                                         dataUnits="B"
+                                         label="Used Capacity"
+                                         [data]="queriesResults.USEDCAPACITY">
+                </cd-dashboard-area-chart>
+              </ng-container>
+              <cd-dashboard-area-chart chartTitle="IOPS"
+                                       dataUnits=""
+                                       decimals="0"
+                                       label="Reads"
+                                       label2="Writes"
+                                       [data]="queriesResults.READIOPS"
+                                       [data2]="queriesResults.WRITEIOPS">
+              </cd-dashboard-area-chart>
+              <cd-dashboard-area-chart chartTitle="OSD Latencies"
+                                       dataUnits="ms"
+                                       decimals="2"
+                                       label="Apply"
+                                       label2="Commit"
+                                       [data]="queriesResults.READLATENCY"
+                                       [data2]="queriesResults.WRITELATENCY">
+              </cd-dashboard-area-chart>
+              <cd-dashboard-area-chart chartTitle="Client Throughput"
+                                       dataUnits="B/s"
+                                       decimals="2"
+                                       label="Reads"
+                                       label2="Writes"
+                                       [data]="queriesResults.READCLIENTTHROUGHPUT"
+                                       [data2]="queriesResults.WRITECLIENTTHROUGHPUT">
+              </cd-dashboard-area-chart>
+              <cd-dashboard-area-chart chartTitle="Recovery Throughput"
+                                       dataUnits="B/s"
+                                       decimals="2"
+                                       label="Recovery Throughput"
+                                       [data]="queriesResults.RECOVERYBYTES">
+              </cd-dashboard-area-chart>
+            </div>
+          </cd-card>
+        </div>
       </div>
-    </cd-card>
+    </div>
   </div>
 </div>
 
 <ng-template #alertsCard>
-  <ng-container *ngFor="let alert of alerts; let i = index">
-    <div [ngClass]="borderClass"
-         *ngIf="alertType === alert.labels.severity">
+  <ng-container *ngFor="let alert of prometheusAlertService.alerts; let i = index;  trackBy: trackByFn">
+    <div [ngClass]="['border-'+alertClass[alert.labels.severity]]"
+         *ngIf="alert.labels.severity === alertType || !alertType">
       <div class="card tc_alerts border-0 pt-3">
-        <div class="row no-gutters">
+        <div class="row no-gutters ps-2">
           <div class="col-sm-1 text-center">
-            <span [ngClass]="[icons.stack, icons.large, textClass]">
+            <span [ngClass]="[icons.stack, icons.large, 'text-'+alertClass[alert.labels.severity]]">
               <i [ngClass]="[icons.circle, icons.stack2x]"></i>
               <i [ngClass]="[icons.stack1x, icons.inverse, icons.warning]"></i>
             </span>
           </div>
-          <div class="col-md-11">
-            <div class="card-body ps-0 pe-1 pt-1">
+          <div class="col-md-11 ps-0">
+            <div class="card-body ps-0 pe-1 pb-1 pt-0">
               <h6 class="card-title bold">{{ alert.labels.alertname }}</h6>
-              <p class="card-text me-3"
-                 [innerHtml]="alert.annotations.summary"></p>
+              <p class="card-text me-3 mb-0 text-truncate"
+                 [innerHtml]="alert.annotations.description"
+                 [ngbTooltip]="alert.annotations.description"></p>
               <p class="card-text text-muted me-3">
                 <small class="date"
                        [title]="alert.startsAt | cdDate"
           </div>
         </div>
       </div>
-      <hr>
+      <hr class="mt-0 mb-0">
     </div>
   </ng-container>
 </ng-template>
index 140f5f78fa4ad842ce31feef75cf27e1d5d658a4..49ab49bc81b55003998883df0f8b3b5ebc9e9944 100644 (file)
@@ -1,67 +1,33 @@
-.alerts {
-  height: 17rem;
+.details {
+  font-size: larger;
 
-  div {
-    padding-top: 0;
+  dt {
+    margin-bottom: 0.3rem;
   }
-}
-
-div {
-  padding-top: 20px;
-}
-
-ngx-simplebar {
-  height: 18rem;
-}
-
-hr {
-  margin-bottom: 2px;
-  margin-top: 2px;
-}
 
-.position-right {
-  margin-left: auto;
-  order: 2;
-}
-
-.center-content {
-  align-items: center;
-  margin-top: 30px;
-  position: relative;
+  dd {
+    margin-bottom: 0.8rem;
+  }
 }
 
-button.dropdown-toggle {
-  position: relative;
-
-  &::after {
-    border: 0;
-    content: '\f054';
-    font-family: 'ForkAwesome';
-    font-size: 1rem;
+.status {
+  .viewAlert {
     position: absolute;
-    right: 20px;
-    transition: transform 0.3s ease-in-out;
+    right: 2rem;
+    top: 2rem;
   }
+}
 
-  &[aria-expanded='true']::after {
-    transform: rotate(90deg);
+.alerts {
+  ngx-simplebar {
+    height: 13.5rem;
+    overflow-x: hidden;
   }
 
-  &:focus {
-    box-shadow: none;
+  .text-truncate {
+    -webkit-box-orient: vertical; /* stylelint-disable-line property-no-vendor-prefix */
+    display: -webkit-box; /* stylelint-disable-line value-no-vendor-prefix */
+    -webkit-line-clamp: 2;
+    white-space: normal;
   }
 }
-
-.list-group-item {
-  border: 0;
-}
-
-dt {
-  font-size: larger;
-  margin-bottom: 0.3rem;
-}
-
-dd {
-  font-size: larger;
-  margin-bottom: 0.8rem;
-}
index f2f5d0bb50832cc94c7ab14e70e1c679d6e94642..60a30456ef711d6f3f301e31014c3b4b7e2ab5db 100644 (file)
@@ -18,12 +18,11 @@ import { SummaryService } from '~/app/shared/services/summary.service';
 import { SharedModule } from '~/app/shared/shared.module';
 import { configureTestBed } from '~/testing/unit-test-helper';
 import { PgCategoryService } from '../../shared/pg-category.service';
-import { CardRowComponent } from '../card-row/card-row.component';
-import { CardComponent } from '../card/card.component';
 import { DashboardPieComponent } from '../dashboard-pie/dashboard-pie.component';
 import { PgSummaryPipe } from '../pg-summary.pipe';
 import { DashboardV3Component } from './dashboard-v3.component';
 import { OrchestratorService } from '~/app/shared/api/orchestrator.service';
+import { AlertClass } from '~/app/shared/enum/health-icon.enum';
 
 export class SummaryServiceMock {
   summaryDataSource = new BehaviorSubject({
@@ -138,13 +137,7 @@ describe('Dashbord Component', () => {
 
   configureTestBed({
     imports: [RouterTestingModule, HttpClientTestingModule, ToastrModule.forRoot(), SharedModule],
-    declarations: [
-      DashboardV3Component,
-      CardComponent,
-      DashboardPieComponent,
-      CardRowComponent,
-      PgSummaryPipe
-    ],
+    declarations: [DashboardV3Component, DashboardPieComponent, PgSummaryPipe],
     schemas: [NO_ERRORS_SCHEMA],
     providers: [
       { provide: SummaryService, useClass: SummaryServiceMock },
@@ -179,6 +172,8 @@ describe('Dashbord Component', () => {
     spyOn(TestBed.inject(PrometheusService), 'ifAlertmanagerConfigured').and.callFake((fn) => fn());
     getAlertsSpy = spyOn(TestBed.inject(PrometheusService), 'getAlerts');
     getAlertsSpy.and.returnValue(of(alertsPayload));
+    component.prometheusAlertService.alerts = alertsPayload;
+    component.isAlertmanagerConfigured = true;
   });
 
   it('should create', () => {
@@ -248,7 +243,7 @@ describe('Dashbord Component', () => {
 
   it('should show the critical alerts window and its content', () => {
     const payload = _.cloneDeep(alertsPayload[0]);
-    component.toggleAlertsWindow('danger');
+    component.toggleAlertsWindow(AlertClass[0]);
     fixture.detectChanges();
 
     const cardTitle = fixture.debugElement.query(By.css('.tc_alerts h6.card-title'));
@@ -259,7 +254,7 @@ describe('Dashbord Component', () => {
 
   it('should show the warning alerts window and its content', () => {
     const payload = _.cloneDeep(alertsPayload[2]);
-    component.toggleAlertsWindow('warning');
+    component.toggleAlertsWindow(AlertClass.warning);
     fixture.detectChanges();
 
     const cardTitle = fixture.debugElement.query(By.css('.tc_alerts h6.card-title'));
@@ -269,8 +264,7 @@ describe('Dashbord Component', () => {
   });
 
   it('should only show the pills when the alerts are not empty', () => {
-    spyOn(TestBed.inject(PrometheusAlertService), 'activeCriticalAlerts').and.returnValue(0);
-    spyOn(TestBed.inject(PrometheusAlertService), 'activeWarningAlerts').and.returnValue(0);
+    spyOn(TestBed.inject(PrometheusAlertService), 'alerts').and.returnValue(0);
     fixture.detectChanges();
 
     const warningAlerts = fixture.debugElement.query(By.css('button[id=warningAlerts]'));
index a3bd264c6843507d1766d802b1c1d293372ae11c..7ec0cd4495be846e7f6be1360840c0bdc869bcca 100644 (file)
@@ -1,9 +1,8 @@
 import { Component, OnDestroy, OnInit } from '@angular/core';
 
 import _ from 'lodash';
-import { Observable, Subscription, timer } from 'rxjs';
+import { Observable, Subscription } from 'rxjs';
 import { take } from 'rxjs/operators';
-import moment from 'moment';
 
 import { HealthService } from '~/app/shared/api/health.service';
 import { OsdService } from '~/app/shared/api/osd.service';
@@ -23,6 +22,8 @@ import { SummaryService } from '~/app/shared/services/summary.service';
 import { PrometheusListHelper } from '~/app/shared/helpers/prometheus-list-helper';
 import { PrometheusAlertService } from '~/app/shared/services/prometheus-alert.service';
 import { OrchestratorService } from '~/app/shared/api/orchestrator.service';
+import { MgrModuleService } from '~/app/shared/api/mgr-module.service';
+import { AlertClass } from '~/app/shared/enum/health-icon.enum';
 
 @Component({
   selector: 'cd-dashboard-v3',
@@ -43,15 +44,13 @@ export class DashboardV3Component extends PrometheusListHelper implements OnInit
   prometheusAlerts$: Observable<AlertmanagerAlert[]>;
 
   icons = Icons;
-  showAlerts = false;
   flexHeight = true;
   simplebar = {
-    autoHide: false
+    autoHide: true
   };
-  textClass: string;
   borderClass: string;
   alertType: string;
-  alerts: AlertmanagerAlert[];
+  alertClass = AlertClass;
   healthData: any;
   categoryPgAmount: Record<string, number> = {};
   totalPgs = 0;
@@ -65,13 +64,9 @@ export class DashboardV3Component extends PrometheusListHelper implements OnInit
     WRITECLIENTTHROUGHPUT: '',
     RECOVERYBYTES: ''
   };
-  timerGetPrometheusDataSub: Subscription;
-  timerTime = 30000;
-  readonly lastHourDateObject = {
-    start: moment().unix() - 3600,
-    end: moment().unix(),
-    step: 12
-  };
+  telemetryEnabled: boolean;
+  telemetryURL = 'https://telemetry-public.ceph.com/';
+  origin = window.location.origin;
 
   constructor(
     private summaryService: SummaryService,
@@ -81,6 +76,7 @@ export class DashboardV3Component extends PrometheusListHelper implements OnInit
     private featureToggles: FeatureTogglesService,
     private healthService: HealthService,
     public prometheusService: PrometheusService,
+    private mgrModuleService: MgrModuleService,
     private refreshIntervalService: RefreshIntervalService,
     public prometheusAlertService: PrometheusAlertService
   ) {
@@ -95,15 +91,21 @@ export class DashboardV3Component extends PrometheusListHelper implements OnInit
       this.getHealth();
       this.getCapacityCardData();
     });
-    this.getPrometheusData(this.lastHourDateObject);
+    this.getPrometheusData(this.prometheusService.lastHourDateObject);
     this.getDetailsCardData();
+    this.getTelemetryReport();
   }
 
+  getTelemetryText(): string {
+    return this.telemetryEnabled
+      ? 'Cluster telemetry is active'
+      : 'Cluster telemetry is inactive. To Activate the Telemetry, \
+       click settings icon on top navigation bar and select \
+       Telemetry configration.';
+  }
   ngOnDestroy() {
     this.interval.unsubscribe();
-    if (this.timerGetPrometheusDataSub) {
-      this.timerGetPrometheusDataSub.unsubscribe();
-    }
+    this.prometheusService.unsubscribe();
   }
 
   getHealth() {
@@ -112,23 +114,8 @@ export class DashboardV3Component extends PrometheusListHelper implements OnInit
     });
   }
 
-  toggleAlertsWindow(type: string, isToggleButton: boolean = false) {
-    this.triggerPrometheusAlerts();
-    if (isToggleButton) {
-      this.showAlerts = !this.showAlerts;
-      this.flexHeight = !this.flexHeight;
-    } else if (
-      !this.showAlerts ||
-      (this.alertType === type && type !== 'danger') ||
-      (this.alertType !== 'warning' && type === 'danger')
-    ) {
-      this.showAlerts = !this.showAlerts;
-      this.flexHeight = !this.flexHeight;
-    }
-
-    type === 'danger' ? (this.alertType = 'critical') : (this.alertType = type);
-    this.textClass = `text-${type}`;
-    this.borderClass = `border-${type}`;
+  toggleAlertsWindow(type: AlertClass) {
+    this.alertType === type ? (this.alertType = null) : (this.alertType = type);
   }
 
   getDetailsCardData() {
@@ -157,62 +144,21 @@ export class DashboardV3Component extends PrometheusListHelper implements OnInit
     });
   }
 
-  triggerPrometheusAlerts() {
-    this.prometheusService.ifAlertmanagerConfigured(() => {
-      this.prometheusService.getAlerts().subscribe((alerts) => {
-        this.alerts = alerts;
-      });
-    });
+  public getPrometheusData(selectedTime: any) {
+    this.queriesResults = this.prometheusService.getPrometheusQueriesData(
+      selectedTime,
+      queries,
+      this.queriesResults
+    );
   }
 
-  getPrometheusData(selectedTime: any) {
-    this.prometheusService.ifPrometheusConfigured(() => {
-      if (this.timerGetPrometheusDataSub) {
-        this.timerGetPrometheusDataSub.unsubscribe();
-      }
-      this.timerGetPrometheusDataSub = timer(0, this.timerTime).subscribe(() => {
-        selectedTime = this.updateTimeStamp(selectedTime);
-
-        for (const queryName in queries) {
-          if (queries.hasOwnProperty(queryName)) {
-            const query = queries[queryName];
-            let interval = selectedTime.step;
-
-            if (query.includes('rate') && selectedTime.step < 20) {
-              interval = 20;
-            } else if (query.includes('rate')) {
-              interval = selectedTime.step * 2;
-            }
-
-            const intervalAdjustedQuery = query.replace(/\[(.*?)\]/g, `[${interval}s]`);
-
-            this.prometheusService
-              .getPrometheusData({
-                params: intervalAdjustedQuery,
-                start: selectedTime['start'],
-                end: selectedTime['end'],
-                step: selectedTime['step']
-              })
-              .subscribe((data: any) => {
-                if (data.result.length) {
-                  this.queriesResults[queryName] = data.result[0].values;
-                }
-              });
-          }
-        }
-      });
+  private getTelemetryReport() {
+    this.mgrModuleService.getConfig('telemetry').subscribe((resp: any) => {
+      this.telemetryEnabled = resp?.enabled;
     });
   }
 
-  private updateTimeStamp(selectedTime: any): any {
-    let formattedDate = {};
-    const date: number = selectedTime['start'] + this.timerTime / 1000;
-    const dateNow: number = selectedTime['end'] + this.timerTime / 1000;
-    formattedDate = {
-      start: date,
-      end: dateNow,
-      step: selectedTime['step']
-    };
-    return formattedDate;
+  trackByFn(index: any) {
+    return index;
   }
 }
index fc119b6e2904bad935c1af901efc99e056901803..3b04714c55bd215342b93efdcc71d61cbb7039c7 100644 (file)
@@ -42,64 +42,7 @@ export class HealthPieComponent implements OnChanges, OnInit {
   @Output()
   prepareFn = new EventEmitter();
 
-  chartConfig: any = {
-    chartType: 'doughnut',
-    dataset: [
-      {
-        label: null,
-        borderWidth: 0
-      }
-    ],
-    colors: [
-      {
-        backgroundColor: [
-          this.cssHelper.propertyValue('chart-color-green'),
-          this.cssHelper.propertyValue('chart-color-yellow'),
-          this.cssHelper.propertyValue('chart-color-orange'),
-          this.cssHelper.propertyValue('chart-color-red'),
-          this.cssHelper.propertyValue('chart-color-blue')
-        ]
-      }
-    ],
-    options: {
-      cutoutPercentage: 90,
-      events: ['click', 'mouseout', 'touchstart'],
-      legend: {
-        display: true,
-        position: 'right',
-        labels: {
-          boxWidth: 10,
-          usePointStyle: false
-        }
-      },
-      plugins: {
-        center_text: true
-      },
-      tooltips: {
-        enabled: true,
-        displayColors: false,
-        backgroundColor: this.cssHelper.propertyValue('chart-color-tooltip-background'),
-        cornerRadius: 0,
-        bodyFontSize: 14,
-        bodyFontStyle: '600',
-        position: 'nearest',
-        xPadding: 12,
-        yPadding: 12,
-        callbacks: {
-          label: (item: Record<string, any>, data: Record<string, any>) => {
-            let text = data.labels[item.index];
-            if (!text.includes('%')) {
-              text = `${text} (${data.datasets[item.datasetIndex].data[item.index]}%)`;
-            }
-            return text;
-          }
-        }
-      },
-      title: {
-        display: false
-      }
-    }
-  };
+  chartConfig: any = {};
 
   public doughnutChartPlugins: PluginServiceGlobalRegistrationAndOptions[] = [
     {
@@ -139,7 +82,66 @@ export class HealthPieComponent implements OnChanges, OnInit {
     private dimlessBinary: DimlessBinaryPipe,
     private dimless: DimlessPipe,
     private cssHelper: CssHelper
-  ) {}
+  ) {
+    this.chartConfig = {
+      chartType: 'doughnut',
+      dataset: [
+        {
+          label: null,
+          borderWidth: 0
+        }
+      ],
+      colors: [
+        {
+          backgroundColor: [
+            this.cssHelper.propertyValue('chart-color-green'),
+            this.cssHelper.propertyValue('chart-color-yellow'),
+            this.cssHelper.propertyValue('chart-color-orange'),
+            this.cssHelper.propertyValue('chart-color-red'),
+            this.cssHelper.propertyValue('chart-color-blue')
+          ]
+        }
+      ],
+      options: {
+        cutoutPercentage: 90,
+        events: ['click', 'mouseout', 'touchstart'],
+        legend: {
+          display: true,
+          position: 'right',
+          labels: {
+            boxWidth: 10,
+            usePointStyle: false
+          }
+        },
+        plugins: {
+          center_text: true
+        },
+        tooltips: {
+          enabled: true,
+          displayColors: false,
+          backgroundColor: this.cssHelper.propertyValue('chart-color-tooltip-background'),
+          cornerRadius: 0,
+          bodyFontSize: 14,
+          bodyFontStyle: '600',
+          position: 'nearest',
+          xPadding: 12,
+          yPadding: 12,
+          callbacks: {
+            label: (item: Record<string, any>, data: Record<string, any>) => {
+              let text = data.labels[item.index];
+              if (!text.includes('%')) {
+                text = `${text} (${data.datasets[item.datasetIndex].data[item.index]}%)`;
+              }
+              return text;
+            }
+          }
+        },
+        title: {
+          display: false
+        }
+      }
+    };
+  }
 
   ngOnInit() {
     const getStyleTop = (tooltip: any, positionY: number) => {
index 4d1dac769a4b3a2e12ab995e48b28e7c29c2960f..b11d12e496902378a9bb306a46411b5398392c3e 100644 (file)
@@ -34,27 +34,8 @@ export class HealthComponent implements OnInit, OnDestroy {
   icons = Icons;
   color: string;
 
-  clientStatsConfig = {
-    colors: [
-      {
-        backgroundColor: [
-          this.cssHelper.propertyValue('chart-color-cyan'),
-          this.cssHelper.propertyValue('chart-color-purple')
-        ]
-      }
-    ]
-  };
-
-  rawCapacityChartConfig = {
-    colors: [
-      {
-        backgroundColor: [
-          this.cssHelper.propertyValue('chart-color-blue'),
-          this.cssHelper.propertyValue('chart-color-gray')
-        ]
-      }
-    ]
-  };
+  clientStatsConfig: any = {};
+  rawCapacityChartConfig: any = {};
 
   pgStatusChartConfig = {
     options: {
@@ -78,6 +59,27 @@ export class HealthComponent implements OnInit, OnDestroy {
   }
 
   ngOnInit() {
+    this.clientStatsConfig = {
+      colors: [
+        {
+          backgroundColor: [
+            this.cssHelper.propertyValue('chart-color-cyan'),
+            this.cssHelper.propertyValue('chart-color-purple')
+          ]
+        }
+      ]
+    };
+
+    this.rawCapacityChartConfig = {
+      colors: [
+        {
+          backgroundColor: [
+            this.cssHelper.propertyValue('chart-color-blue'),
+            this.cssHelper.propertyValue('chart-color-gray')
+          ]
+        }
+      ]
+    };
     this.interval = this.refreshIntervalService.intervalData$.subscribe(() => {
       this.getHealth();
     });
index 15e7d7d5ccebbd56512f1dc524c59548ef35845f..f7b4cc0fdf883ae3137e3fcf6189e19b9c97f1a7 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, ContentChild, Input, OnInit, TemplateRef } from '@angular/core';
-import { FormArray, FormControl, NgForm, Validators } from '@angular/forms';
+import { UntypedFormArray, UntypedFormControl, NgForm, Validators } from '@angular/forms';
 
 import _ from 'lodash';
 
@@ -21,19 +21,21 @@ export class NfsFormClientComponent implements OnInit {
 
   @ContentChild('squashHelper', { static: true }) squashHelperTpl: TemplateRef<any>;
 
-  nfsSquash: any[] = Object.keys(this.nfsService.nfsSquash);
-  nfsAccessType: any[] = this.nfsService.nfsAccessType;
+  nfsSquash: any[] = [];
+  nfsAccessType: any[] = [];
   icons = Icons;
-  clientsFormArray: FormArray;
+  clientsFormArray: UntypedFormArray;
 
   constructor(private nfsService: NfsService) {}
 
   ngOnInit() {
+    this.nfsSquash = Object.keys(this.nfsService.nfsSquash);
+    this.nfsAccessType = this.nfsService.nfsAccessType;
     _.forEach(this.clients, (client) => {
       const fg = this.addClient();
       fg.patchValue(client);
     });
-    this.clientsFormArray = this.form.get('clients') as FormArray;
+    this.clientsFormArray = this.form.get('clients') as UntypedFormArray;
   }
 
   getNoAccessTypeDescr() {
@@ -58,16 +60,16 @@ export class NfsFormClientComponent implements OnInit {
   }
 
   addClient() {
-    this.clientsFormArray = this.form.get('clients') as FormArray;
+    this.clientsFormArray = this.form.get('clients') as UntypedFormArray;
 
     const REGEX_IP = `(([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\.([0-9]{1,3})([/](\\d|[1-2]\\d|3[0-2]))?)`;
     const REGEX_LIST_IP = `${REGEX_IP}([ ,]{1,2}${REGEX_IP})*`;
     const fg = new CdFormGroup({
-      addresses: new FormControl('', {
+      addresses: new UntypedFormControl('', {
         validators: [Validators.required, Validators.pattern(REGEX_LIST_IP)]
       }),
-      access_type: new FormControl(''),
-      squash: new FormControl('')
+      access_type: new UntypedFormControl(''),
+      squash: new UntypedFormControl('')
     });
 
     this.clientsFormArray.push(fg);
@@ -75,7 +77,7 @@ export class NfsFormClientComponent implements OnInit {
   }
 
   removeClient(index: number) {
-    this.clientsFormArray = this.form.get('clients') as FormArray;
+    this.clientsFormArray = this.form.get('clients') as UntypedFormArray;
     this.clientsFormArray.removeAt(index);
   }
 
@@ -84,7 +86,7 @@ export class NfsFormClientComponent implements OnInit {
   }
 
   getValue(index: number, control: string) {
-    this.clientsFormArray = this.form.get('clients') as FormArray;
+    this.clientsFormArray = this.form.get('clients') as UntypedFormArray;
     const client = this.clientsFormArray.at(index) as CdFormGroup;
     return client.getValue(control);
   }
index 595b3b7fe7c39514b898047650fc1f65fcbefa00..540b7bfe64bee69b4d8df3168507564c6770715d 100644 (file)
@@ -2,7 +2,7 @@ import { ChangeDetectorRef, Component, OnInit, ViewChild } from '@angular/core';
 import {
   AbstractControl,
   AsyncValidatorFn,
-  FormControl,
+  UntypedFormControl,
   ValidationErrors,
   Validators
 } from '@angular/forms';
@@ -55,8 +55,8 @@ export class NfsFormComponent extends CdForm implements OnInit {
   fsalAvailabilityError: string = null;
 
   defaultAccessType = { RGW: 'RO' };
-  nfsAccessType: any[] = this.nfsService.nfsAccessType;
-  nfsSquash: any[] = Object.keys(this.nfsService.nfsSquash);
+  nfsAccessType: any[] = [];
+  nfsSquash: any[] = [];
 
   action: string;
   resource: string;
@@ -93,10 +93,12 @@ export class NfsFormComponent extends CdForm implements OnInit {
     super();
     this.permission = this.authStorageService.getPermissions().pool;
     this.resource = $localize`NFS export`;
-    this.createForm();
   }
 
   ngOnInit() {
+    this.nfsAccessType = this.nfsService.nfsAccessType;
+    this.nfsSquash = Object.keys(this.nfsService.nfsSquash);
+    this.createForm();
     const promises: Observable<any>[] = [
       this.nfsService.listClusters(),
       this.nfsService.fsals(),
@@ -138,14 +140,14 @@ export class NfsFormComponent extends CdForm implements OnInit {
 
   createForm() {
     this.nfsForm = new CdFormGroup({
-      cluster_id: new FormControl('', {
+      cluster_id: new UntypedFormControl('', {
         validators: [Validators.required]
       }),
       fsal: new CdFormGroup({
-        name: new FormControl('', {
+        name: new UntypedFormControl('', {
           validators: [Validators.required]
         }),
-        fs_name: new FormControl('', {
+        fs_name: new UntypedFormControl('', {
           validators: [
             CdValidators.requiredIf({
               name: 'CEPH'
@@ -153,24 +155,24 @@ export class NfsFormComponent extends CdForm implements OnInit {
           ]
         })
       }),
-      path: new FormControl('/'),
-      protocolNfsv4: new FormControl(true),
-      pseudo: new FormControl('', {
+      path: new UntypedFormControl('/'),
+      protocolNfsv4: new UntypedFormControl(true),
+      pseudo: new UntypedFormControl('', {
         validators: [
           CdValidators.requiredIf({ protocolNfsv4: true }),
           Validators.pattern('^/[^><|&()]*$')
         ]
       }),
-      access_type: new FormControl('RW'),
-      squash: new FormControl(this.nfsSquash[0]),
-      transportUDP: new FormControl(true, {
+      access_type: new UntypedFormControl('RW'),
+      squash: new UntypedFormControl(this.nfsSquash[0]),
+      transportUDP: new UntypedFormControl(true, {
         validators: [
           CdValidators.requiredIf({ transportTCP: false }, (value: boolean) => {
             return !value;
           })
         ]
       }),
-      transportTCP: new FormControl(true, {
+      transportTCP: new UntypedFormControl(true, {
         validators: [
           CdValidators.requiredIf({ transportUDP: false }, (value: boolean) => {
             return !value;
@@ -178,8 +180,8 @@ export class NfsFormComponent extends CdForm implements OnInit {
         ]
       }),
       clients: this.formBuilder.array([]),
-      security_label: new FormControl(false),
-      sec_label_xattr: new FormControl(
+      security_label: new UntypedFormControl(false),
+      sec_label_xattr: new UntypedFormControl(
         'security.selinux',
         CdValidators.requiredIf({ security_label: true, 'fsal.name': 'CEPH' })
       )
index b159f12530d04d28383d7fc82414c03ff0140aad..13103da324aab5cc3194e57701c93b96773942d7 100644 (file)
                 <span class="invalid-feedback"
                       *ngIf="form.showError('minBlobSize', formDir, 'maximum')"
                       i18n>Value should be less than the maximum blob size</span>
+                <span *ngIf="form.showError('minBlobSize', formDir, 'pattern')"
+                      class="invalid-feedback"
+                      i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
               </div>
             </div>
 
                 <span class="invalid-feedback"
                       *ngIf="form.showError('maxBlobSize', formDir, 'minimum')"
                       i18n>Value should be greater than the minimum blob size</span>
+                <span *ngIf="form.showError('maxBlobSize', formDir, 'pattern')"
+                      class="invalid-feedback"
+                      i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
               </div>
             </div>
 
                      placeholder="e.g., 10GiB"
                      defaultUnit="GiB"
                      cdDimlessBinary>
+              <span *ngIf="form.showError('max_bytes', formDir, 'pattern')"
+                    class="invalid-feedback"
+                    i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
             </div>
           </div>
 
index 5f0bc095628bd8611e0c3d56811906a93b6d86ae..c91ca765367259823e54c319d21b824b0a121d18 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit, Type, ViewChild } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 import { ActivatedRoute, Router } from '@angular/router';
 
 import { NgbNav, NgbTooltip } from '@ng-bootstrap/ng-bootstrap';
@@ -120,22 +120,22 @@ export class PoolFormComponent extends CdForm implements OnInit {
 
   private createForm() {
     const compressionForm = new CdFormGroup({
-      mode: new FormControl('none'),
-      algorithm: new FormControl(''),
-      minBlobSize: new FormControl('', {
+      mode: new UntypedFormControl('none'),
+      algorithm: new UntypedFormControl(''),
+      minBlobSize: new UntypedFormControl('', {
         updateOn: 'blur'
       }),
-      maxBlobSize: new FormControl('', {
+      maxBlobSize: new UntypedFormControl('', {
         updateOn: 'blur'
       }),
-      ratio: new FormControl('', {
+      ratio: new UntypedFormControl('', {
         updateOn: 'blur'
       })
     });
 
     this.form = new CdFormGroup(
       {
-        name: new FormControl('', {
+        name: new UntypedFormControl('', {
           validators: [
             Validators.pattern(/^[.A-Za-z0-9_/-]+$/),
             Validators.required,
@@ -149,10 +149,10 @@ export class PoolFormComponent extends CdForm implements OnInit {
             })
           ]
         }),
-        poolType: new FormControl('', {
+        poolType: new UntypedFormControl('', {
           validators: [Validators.required]
         }),
-        crushRule: new FormControl(null, {
+        crushRule: new UntypedFormControl(null, {
           validators: [
             CdValidators.custom(
               'tooFewOsds',
@@ -165,18 +165,18 @@ export class PoolFormComponent extends CdForm implements OnInit {
             )
           ]
         }),
-        size: new FormControl('', {
+        size: new UntypedFormControl('', {
           updateOn: 'blur'
         }),
-        erasureProfile: new FormControl(null),
-        pgNum: new FormControl('', {
+        erasureProfile: new UntypedFormControl(null),
+        pgNum: new UntypedFormControl('', {
           validators: [Validators.required]
         }),
-        pgAutoscaleMode: new FormControl(null),
-        ecOverwrites: new FormControl(false),
+        pgAutoscaleMode: new UntypedFormControl(null),
+        ecOverwrites: new UntypedFormControl(false),
         compression: compressionForm,
-        max_bytes: new FormControl(''),
-        max_objects: new FormControl(0)
+        max_bytes: new UntypedFormControl(''),
+        max_objects: new UntypedFormControl(0)
       },
       [CdValidators.custom('form', (): null => null)]
     );
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.html
new file mode 100644 (file)
index 0000000..140f314
--- /dev/null
@@ -0,0 +1,70 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">Create Realm/Zone Group/Zone
+  </ng-container>
+
+  <ng-container class="modal-content">
+    <form name="createMultisiteEntitiesForm"
+          #formDir="ngForm"
+          [formGroup]="createMultisiteEntitiesForm"
+          novalidate>
+    <div class="modal-body">
+      <cd-alert-panel type="info"
+                      spacingClass="mb-3">The realm/zone group/zone created will be set as default and master.
+      </cd-alert-panel>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="realmName"
+               i18n>Realm Name</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Realm name..."
+                 id="realmName"
+                 name="realmName"
+                 formControlName="realmName">
+          <span class="invalid-feedback"
+                *ngIf="createMultisiteEntitiesForm.showError('realmName', formDir, 'required')"
+                i18n>This field is required.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zonegroupName"
+               i18n>Zone Group Name</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Zone group name..."
+                 id="zonegroupName"
+                 name="zonegroupName"
+                 formControlName="zonegroupName">
+          <span class="invalid-feedback"
+                *ngIf="createMultisiteEntitiesForm.showError('zonegroupName', formDir, 'required')"
+                i18n>This field is required.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zoneName"
+               i18n>Zone Name</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Zone name..."
+                 id="zoneName"
+                 name="zoneName"
+                 formControlName="zoneName">
+          <span class="invalid-feedback"
+                *ngIf="createMultisiteEntitiesForm.showError('zoneName', formDir, 'required')"
+                i18n>This field is required.</span>
+        </div>
+      </div>
+    </div>
+    <div class="modal-footer">
+      <cd-form-button-panel (submitActionEvent)="submit()"
+                            [form]="createMultisiteEntitiesForm"></cd-form-button-panel>
+    </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.spec.ts
new file mode 100644 (file)
index 0000000..72268ba
--- /dev/null
@@ -0,0 +1,37 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+
+import { CreateRgwServiceEntitiesComponent } from './create-rgw-service-entities.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('CreateRgwServiceEntitiesComponent', () => {
+  let component: CreateRgwServiceEntitiesComponent;
+  let fixture: ComponentFixture<CreateRgwServiceEntitiesComponent>;
+
+  configureTestBed({
+    imports: [
+      SharedModule,
+      ReactiveFormsModule,
+      RouterTestingModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot()
+    ],
+    providers: [NgbActiveModal],
+    declarations: [CreateRgwServiceEntitiesComponent]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CreateRgwServiceEntitiesComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/create-rgw-service-entities/create-rgw-service-entities.component.ts
new file mode 100644 (file)
index 0000000..0419151
--- /dev/null
@@ -0,0 +1,99 @@
+import { Component, EventEmitter, Output } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { RgwMultisiteService } from '~/app/shared/api/rgw-multisite.service';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { RgwRealm, RgwZonegroup, RgwZone, SystemKey } from '../models/rgw-multisite';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { Subscription } from 'rxjs';
+
+@Component({
+  selector: 'cd-create-rgw-service-entities',
+  templateUrl: './create-rgw-service-entities.component.html',
+  styleUrls: ['./create-rgw-service-entities.component.scss']
+})
+export class CreateRgwServiceEntitiesComponent {
+  public sub = new Subscription();
+  createMultisiteEntitiesForm: CdFormGroup;
+  realm: RgwRealm;
+  zonegroup: RgwZonegroup;
+  zone: RgwZone;
+
+  @Output()
+  submitAction = new EventEmitter();
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public actionLabels: ActionLabelsI18n,
+    public rgwMultisiteService: RgwMultisiteService,
+    public rgwZoneService: RgwZoneService,
+    public notificationService: NotificationService,
+    public rgwZonegroupService: RgwZonegroupService,
+    public rgwRealmService: RgwRealmService,
+    public modalService: ModalService
+  ) {
+    this.createForm();
+  }
+
+  createForm() {
+    this.createMultisiteEntitiesForm = new CdFormGroup({
+      realmName: new FormControl(null, {
+        validators: [Validators.required]
+      }),
+      zonegroupName: new FormControl(null, {
+        validators: [Validators.required]
+      }),
+      zoneName: new FormControl(null, {
+        validators: [Validators.required]
+      })
+    });
+  }
+
+  submit() {
+    const values = this.createMultisiteEntitiesForm.value;
+    this.realm = new RgwRealm();
+    this.realm.name = values['realmName'];
+    this.zonegroup = new RgwZonegroup();
+    this.zonegroup.name = values['zonegroupName'];
+    this.zonegroup.endpoints = '';
+    this.zone = new RgwZone();
+    this.zone.name = values['zoneName'];
+    this.zone.endpoints = '';
+    this.zone.system_key = new SystemKey();
+    this.zone.system_key.access_key = '';
+    this.zone.system_key.secret_key = '';
+    this.rgwRealmService
+      .create(this.realm, true)
+      .toPromise()
+      .then(() => {
+        this.rgwZonegroupService
+          .create(this.realm, this.zonegroup, true, true)
+          .toPromise()
+          .then(() => {
+            this.rgwZoneService
+              .create(this.zone, this.zonegroup, true, true, this.zone.endpoints)
+              .toPromise()
+              .then(() => {
+                this.notificationService.show(
+                  NotificationType.success,
+                  $localize`Realm/Zonegroup/Zone created successfully`
+                );
+                this.submitAction.emit();
+                this.activeModal.close();
+              })
+              .catch(() => {
+                this.notificationService.show(
+                  NotificationType.error,
+                  $localize`Realm/Zonegroup/Zone creation failed`
+                );
+              });
+          });
+      });
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.html
new file mode 100644 (file)
index 0000000..9793d2b
--- /dev/null
@@ -0,0 +1,54 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">Delete Zone</ng-container>
+
+  <ng-container class="modal-content">
+    <form name="zoneForm"
+          [formGroup]="zoneForm"
+          novalidate>
+      <div class="modal-body ms-4">
+        <label i18n>
+          This will delete your <strong>{{zone?.name}}</strong> Zone.
+        </label>
+        <ng-container *ngIf="includedPools.size">
+          <label class="mt-3"
+                 i18n>
+              Do you want to delete the associated pools with the <strong>{{zone?.name}}</strong> Zone?</label>
+          <label class="mb-4"
+                 i18n>
+              This will delete the following pools and any data stored in these pools:</label>
+            <strong *ngFor="let pool of includedPools"
+                    class="block">{{ pool }}</strong>
+          <div class="form-group">
+            <div class="custom-control custom-checkbox mt-2">
+              <input type="checkbox"
+                     class="custom-control-input"
+                     name="deletePools"
+                     id="deletePools"
+                     formControlName="deletePools"
+                     (change)="showDangerText()">
+              <label class="custom-control-label"
+                     for="deletePools"
+                     i18n>Yes, I want to delete the pools.</label>
+            </div>
+            <div *ngIf="displayText"
+                 class="me-4">
+              <cd-alert-panel type="danger"
+                              i18n>
+                              This will delete all the data in the pools!
+              </cd-alert-panel>
+            </div>
+          </div>
+        </ng-container>
+      </div>
+
+      <div class="modal-footer">
+        <cd-form-button-panel (submitActionEvent)="submit()"
+                              [form]="zoneForm"
+                              [submitText]="actionLabels.DELETE">
+        </cd-form-button-panel>
+      </div>
+    </form>
+  </ng-container>
+
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.scss
new file mode 100644 (file)
index 0000000..55a52c0
--- /dev/null
@@ -0,0 +1,9 @@
+.block {
+  display: block;
+}
+
+#scroll {
+  height: 100%;
+  max-height: 10rem;
+  overflow: auto;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.spec.ts
new file mode 100644 (file)
index 0000000..8cdd79e
--- /dev/null
@@ -0,0 +1,32 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+import { configureTestBed } from '~/testing/unit-test-helper';
+import { RgwZone } from '../rgw-multisite';
+
+import { RgwMultisiteZoneDeletionFormComponent } from './rgw-multisite-zone-deletion-form.component';
+
+describe('RgwMultisiteZoneDeletionFormComponent', () => {
+  let component: RgwMultisiteZoneDeletionFormComponent;
+  let fixture: ComponentFixture<RgwMultisiteZoneDeletionFormComponent>;
+
+  configureTestBed({
+    declarations: [RgwMultisiteZoneDeletionFormComponent],
+    imports: [SharedModule, HttpClientTestingModule, ToastrModule.forRoot(), RouterTestingModule],
+    providers: [NgbActiveModal]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteZoneDeletionFormComponent);
+    component = fixture.componentInstance;
+    component.zone = new RgwZone();
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component.ts
new file mode 100644 (file)
index 0000000..44e832d
--- /dev/null
@@ -0,0 +1,99 @@
+import { AfterViewInit, Component, OnInit } from '@angular/core';
+import { UntypedFormControl } from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { PoolService } from '~/app/shared/api/pool.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { NotificationService } from '~/app/shared/services/notification.service';
+
+@Component({
+  selector: 'cd-rgw-multisite-zone-deletion-form',
+  templateUrl: './rgw-multisite-zone-deletion-form.component.html',
+  styleUrls: ['./rgw-multisite-zone-deletion-form.component.scss']
+})
+export class RgwMultisiteZoneDeletionFormComponent implements OnInit, AfterViewInit {
+  zoneData$: any;
+  poolList$: any;
+  zone: any;
+  zoneForm: CdFormGroup;
+  displayText: boolean = false;
+  includedPools: Set<string> = new Set<string>();
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public actionLabels: ActionLabelsI18n,
+    public notificationService: NotificationService,
+    private rgwZoneService: RgwZoneService,
+    private poolService: PoolService
+  ) {
+    this.createForm();
+  }
+
+  ngOnInit(): void {
+    this.zoneData$ = this.rgwZoneService.get(this.zone);
+    this.poolList$ = this.poolService.getList();
+  }
+
+  ngAfterViewInit(): void {
+    this.updateIncludedPools();
+  }
+
+  createForm() {
+    this.zoneForm = new CdFormGroup({
+      deletePools: new UntypedFormControl(false)
+    });
+  }
+
+  submit() {
+    this.rgwZoneService
+      .delete(this.zone.name, this.zoneForm.value.deletePools, this.includedPools, this.zone.parent)
+      .subscribe(
+        () => {
+          this.notificationService.show(
+            NotificationType.success,
+            $localize`Zone: '${this.zone.name}' deleted successfully`
+          );
+          this.activeModal.close();
+        },
+        () => {
+          this.zoneForm.setErrors({ cdSubmitButton: true });
+        }
+      );
+  }
+
+  showDangerText() {
+    this.displayText = !this.displayText;
+  }
+
+  updateIncludedPools(): void {
+    if (!this.zoneData$ || !this.poolList$) {
+      return;
+    }
+    this.zoneData$.subscribe((data: any) => {
+      this.poolList$.subscribe((poolList: any) => {
+        for (const pool of poolList) {
+          for (const zonePool of Object.values(data)) {
+            if (typeof zonePool === 'string' && zonePool.includes(pool.pool_name)) {
+              this.includedPools.add(pool.pool_name);
+            } else if (Array.isArray(zonePool) && zonePool[0].val) {
+              for (const item of zonePool) {
+                const val = item.val;
+                if (val.storage_classes.STANDARD.data_pool === pool.pool_name) {
+                  this.includedPools.add(val.storage_classes.STANDARD.data_pool);
+                }
+                if (val.data_extra_pool === pool.pool_name) {
+                  this.includedPools.add(val.data_extra_pool);
+                }
+                if (val.index_pool === pool.pool_name) {
+                  this.includedPools.add(val.index_pool);
+                }
+              }
+            }
+          }
+        }
+      });
+    });
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.html
new file mode 100644 (file)
index 0000000..f23e017
--- /dev/null
@@ -0,0 +1,75 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">Delete Zone Group</ng-container>
+
+  <ng-container class="modal-content">
+    <form name="zonegroupForm"
+          [formGroup]="zonegroupForm"
+          novalidate>
+      <div class="modal-body ms-4">
+        <label i18n>
+          This will delete your <strong>{{zonegroup?.name}}</strong> Zone Group.
+        </label>
+        <ng-container *ngIf="zonesList.length > 0">
+          <label class="mt-3"
+                 i18n>
+              Do you want to delete the associated zones and pools with the <strong>{{zonegroup?.name}}</strong> Zone Group?</label>
+          <ng-container *ngIf="includedPools.size > 0">
+            <label i18n>
+              This will delete the following:</label>
+          </ng-container>
+          <strong class="mt-3 mb-2 h5 block">Zones:</strong>
+          <div id="scroll">
+            <strong *ngFor="let zone of zonesList"
+                    class="block">{{zone}}</strong>
+          </div>
+          <ng-container *ngIf="includedPools.size > 0">
+            <strong class="mt-3 mb-2 h5 block">Pools:</strong>
+            <div id="scroll"
+                 class="mb-2">
+              <strong *ngFor="let pool of includedPools"
+                      class="block">{{ pool }}</strong>
+            </div>
+          </ng-container>
+
+          <div class="form-group">
+            <div class="custom-control custom-checkbox mt-2">
+              <input type="checkbox"
+                     class="custom-control-input"
+                     name="deletePools"
+                     id="deletePools"
+                     formControlName="deletePools"
+                     (change)="showDangerText()">
+              <ng-container *ngIf="includedPools.size > 0 else noPoolsConfirmation">
+                <label class="custom-control-label"
+                       for="deletePools"
+                       i18n>Yes, I want to delete the zones and their pools.</label>
+              </ng-container>
+            </div>
+            <div *ngIf="displayText"
+                 class="me-4">
+              <cd-alert-panel type="danger"
+                              i18n>
+                              This will delete all the data in the pools!
+              </cd-alert-panel>
+            </div>
+          </div>
+        </ng-container>
+      </div>
+
+      <div class="modal-footer">
+        <cd-form-button-panel (submitActionEvent)="submit()"
+                              [form]="zonegroupForm"
+                              [submitText]="actionLabels.DELETE ">
+        </cd-form-button-panel>
+      </div>
+    </form>
+  </ng-container>
+
+</cd-modal>
+
+<ng-template #noPoolsConfirmation>
+  <label class="custom-control-label"
+         for="deletePools"
+         i18n>Yes, I want to delete the zones.</label>
+</ng-template>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.scss
new file mode 100644 (file)
index 0000000..55a52c0
--- /dev/null
@@ -0,0 +1,9 @@
+.block {
+  display: block;
+}
+
+#scroll {
+  height: 100%;
+  max-height: 10rem;
+  overflow: auto;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.spec.ts
new file mode 100644 (file)
index 0000000..2c4059f
--- /dev/null
@@ -0,0 +1,32 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+import { configureTestBed } from '~/testing/unit-test-helper';
+import { RgwZonegroup } from '../rgw-multisite';
+
+import { RgwMultisiteZonegroupDeletionFormComponent } from './rgw-multisite-zonegroup-deletion-form.component';
+
+describe('RgwMultisiteZonegroupDeletionFormComponent', () => {
+  let component: RgwMultisiteZonegroupDeletionFormComponent;
+  let fixture: ComponentFixture<RgwMultisiteZonegroupDeletionFormComponent>;
+
+  configureTestBed({
+    declarations: [RgwMultisiteZonegroupDeletionFormComponent],
+    imports: [SharedModule, HttpClientTestingModule, ToastrModule.forRoot(), RouterTestingModule],
+    providers: [NgbActiveModal]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteZonegroupDeletionFormComponent);
+    component = fixture.componentInstance;
+    component.zonegroup = new RgwZonegroup();
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component.ts
new file mode 100644 (file)
index 0000000..3e146ef
--- /dev/null
@@ -0,0 +1,106 @@
+import { AfterViewInit, Component, OnInit } from '@angular/core';
+import { UntypedFormControl } from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { PoolService } from '~/app/shared/api/pool.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { NotificationService } from '~/app/shared/services/notification.service';
+
+@Component({
+  selector: 'cd-rgw-multisite-zonegroup-deletion-form',
+  templateUrl: './rgw-multisite-zonegroup-deletion-form.component.html',
+  styleUrls: ['./rgw-multisite-zonegroup-deletion-form.component.scss']
+})
+export class RgwMultisiteZonegroupDeletionFormComponent implements OnInit, AfterViewInit {
+  zonegroupData$: any;
+  poolList$: any;
+  zonesPools: Array<any> = [];
+  zonegroup: any;
+  zonesList: Array<any> = [];
+  zonegroupForm: CdFormGroup;
+  displayText: boolean = false;
+  includedPools: Set<string> = new Set<string>();
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public actionLabels: ActionLabelsI18n,
+    public notificationService: NotificationService,
+    private rgwZonegroupService: RgwZonegroupService,
+    private poolService: PoolService,
+    private rgwZoneService: RgwZoneService
+  ) {
+    this.createForm();
+  }
+
+  ngOnInit(): void {
+    this.zonegroupData$ = this.rgwZonegroupService.get(this.zonegroup);
+    this.poolList$ = this.poolService.getList();
+  }
+
+  ngAfterViewInit(): void {
+    this.updateIncludedPools();
+  }
+
+  createForm() {
+    this.zonegroupForm = new CdFormGroup({
+      deletePools: new UntypedFormControl(false)
+    });
+  }
+
+  submit() {
+    this.rgwZonegroupService
+      .delete(this.zonegroup.name, this.zonegroupForm.value.deletePools, this.includedPools)
+      .subscribe(() => {
+        this.notificationService.show(
+          NotificationType.success,
+          $localize`Zone: '${this.zonegroup.name}' deleted successfully`
+        );
+        this.activeModal.close();
+      });
+  }
+
+  showDangerText() {
+    if (this.includedPools.size > 0) {
+      this.displayText = !this.displayText;
+    }
+  }
+
+  updateIncludedPools(): void {
+    if (!this.zonegroupData$ || !this.poolList$) {
+      return;
+    }
+
+    this.zonegroupData$.subscribe((zgData: any) => {
+      for (const zone of zgData.zones) {
+        this.zonesList.push(zone.name);
+        this.rgwZoneService.get(zone).subscribe((zonesPools: any) => {
+          this.poolList$.subscribe((poolList: any) => {
+            for (const zonePool of Object.values(zonesPools)) {
+              for (const pool of poolList) {
+                if (typeof zonePool === 'string' && zonePool.includes(pool.pool_name)) {
+                  this.includedPools.add(pool.pool_name);
+                } else if (Array.isArray(zonePool) && zonePool[0].val) {
+                  for (const item of zonePool) {
+                    const val = item.val;
+                    if (val.storage_classes.STANDARD.data_pool === pool.pool_name) {
+                      this.includedPools.add(val.storage_classes.STANDARD.data_pool);
+                    }
+                    if (val.data_extra_pool === pool.pool_name) {
+                      this.includedPools.add(val.data_extra_pool);
+                    }
+                    if (val.index_pool === pool.pool_name) {
+                      this.includedPools.add(val.index_pool);
+                    }
+                  }
+                }
+              }
+            }
+          });
+        });
+      }
+    });
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts
new file mode 100644 (file)
index 0000000..1729f64
--- /dev/null
@@ -0,0 +1,52 @@
+export class RgwRealm {
+  id: string;
+  name: string;
+  current_period: string;
+  epoch: number;
+}
+
+export class RgwZonegroup {
+  id: string;
+  name: string;
+  api_name: string;
+  is_master: boolean;
+  endpoints: string;
+  hostnames: string[];
+  hostnames_s3website: string[];
+  master_zone: string;
+  zones: RgwZone[];
+  placement_targets: any[];
+  default_placement: string;
+  realm_id: string;
+  sync_policy: object;
+  enabled_features: string[];
+}
+
+export class RgwZone {
+  id: string;
+  name: string;
+  domain_root: string;
+  control_pool: string;
+  gc_pool: string;
+  lc_pool: string;
+  log_pool: string;
+  intent_log_pool: string;
+  usage_log_pool: string;
+  roles_pool: string;
+  reshard_pool: string;
+  user_keys_pool: string;
+  user_email_pool: string;
+  user_swift_pool: string;
+  user_uid_pool: string;
+  otp_pool: string;
+  system_key: SystemKey;
+  placement_pools: any[];
+  realm_id: string;
+  notif_pool: string;
+  endpoints: string;
+}
+
+export class SystemKey {
+  access_key: string;
+  secret_key: string;
+}
index 15b33e141229d47c0bc1d7587498420712704adc..c947e4490625b9e94b64df826170f83f736903af 100644 (file)
@@ -3,18 +3,18 @@
     <tbody>
       <tr>
         <td i18n
-            class="bold w-25">Name</td>
-        <td class="w-75">{{ selection.bid }}</td>
+            class="bold w-25">Versioning</td>
+        <td class="w-75">{{ selection.versioning }}</td>
       </tr>
       <tr>
         <td i18n
-            class="bold">ID</td>
-        <td>{{ selection.id }}</td>
+            class="bold">Encryption</td>
+        <td>{{ selection.encryption }}</td>
       </tr>
       <tr>
         <td i18n
-            class="bold">Owner</td>
-        <td>{{ selection.owner }}</td>
+            class="bold">MFA Delete</td>
+        <td>{{ selection.mfa_delete }}</td>
       </tr>
       <tr>
         <td i18n
       </tr>
       <tr>
         <td i18n
-            class="bold">Marker</td>
-        <td>{{ selection.marker }}</td>
-      </tr>
-      <tr>
-        <td i18n
-            class="bold">Maximum marker</td>
-        <td>{{ selection.max_marker }}</td>
-      </tr>
-      <tr>
-        <td i18n
-            class="bold">Version</td>
-        <td>{{ selection.ver }}</td>
-      </tr>
-      <tr>
-        <td i18n
-            class="bold">Master version</td>
-        <td>{{ selection.master_ver }}</td>
-      </tr>
-      <tr>
-        <td i18n
-            class="bold">Modification time</td>
+            class="bold">Last modification time</td>
         <td>{{ selection.mtime | cdDate }}</td>
       </tr>
-      <tr>
-        <td i18n
-            class="bold">Zonegroup</td>
-        <td>{{ selection.zonegroup }}</td>
-      </tr>
-      <tr>
-        <td i18n
-            class="bold">Versioning</td>
-        <td>{{ selection.versioning }}</td>
-      </tr>
-      <tr>
-        <td i18n
-            class="bold">Encryption</td>
-        <td>{{ selection.encryption }}</td>
-      </tr>
-      <tr>
-        <td i18n
-            class="bold">MFA Delete</td>
-        <td>{{ selection.mfa_delete }}</td>
-      </tr>
     </tbody>
   </table>
 
   <!-- Bucket quota -->
-  <div *ngIf="selection.bucket_quota">
+  <div>
     <legend i18n>Bucket quota</legend>
     <table class="table table-striped table-bordered">
       <tbody>
               class="bold w-25">Enabled</td>
           <td class="w-75">{{ selection.bucket_quota.enabled | booleanText }}</td>
         </tr>
-        <tr>
-          <td i18n
-              class="bold">Maximum size</td>
-          <td *ngIf="selection.bucket_quota.max_size <= -1"
-              i18n>Unlimited</td>
-          <td *ngIf="selection.bucket_quota.max_size > -1">
-            {{ selection.bucket_quota.max_size | dimless }}
-          </td>
-        </tr>
-        <tr>
-          <td i18n
-              class="bold">Maximum objects</td>
-          <td *ngIf="selection.bucket_quota.max_objects <= -1"
-              i18n>Unlimited</td>
-          <td *ngIf="selection.bucket_quota.max_objects > -1">
-            {{ selection.bucket_quota.max_objects }}
-          </td>
-        </tr>
+        <ng-container *ngIf="selection.bucket_quota.enabled">
+          <tr>
+            <td i18n
+                class="bold">Maximum size</td>
+            <td *ngIf="selection.bucket_quota.max_size <= -1"
+                i18n>Unlimited</td>
+            <td *ngIf="selection.bucket_quota.max_size > -1">
+              {{ selection.bucket_quota.max_size | dimless }}
+            </td>
+          </tr>
+          <tr>
+            <td i18n
+                class="bold">Maximum objects</td>
+            <td *ngIf="selection.bucket_quota.max_objects <= -1"
+                i18n>Unlimited</td>
+            <td *ngIf="selection.bucket_quota.max_objects > -1">
+              {{ selection.bucket_quota.max_objects }}
+            </td>
+          </tr>
+        </ng-container>
       </tbody>
     </table>
   </div>
index ca6e09f0cec7254bd9c384147f227bae0e4f4d7f..59f62952a5075b8dcc46a09d06ef4bc5cde54784 100644 (file)
@@ -27,6 +27,7 @@ describe('RgwBucketDetailsComponent', () => {
     fixture = TestBed.createComponent(RgwBucketDetailsComponent);
     component = fixture.componentInstance;
     component.selection = new CdTableSelection();
+    component.selection = { bid: 'bucket', bucket_quota: { enabled: false, max_size: 0 } };
     fixture.detectChanges();
   });
 
index 479da864a44a6d4e8c049be00f7efa92a3b7f262..58adf6ab08fa48e9665acbd0a612ee44d0da7b1b 100644 (file)
@@ -41,7 +41,7 @@ export class RgwBucketListComponent extends ListWithDetails implements OnInit {
   columns: CdTableColumn[] = [];
   buckets: object[] = [];
   selection: CdTableSelection = new CdTableSelection();
-  staleTimeout: number;
+  declare staleTimeout: number;
 
   constructor(
     private authStorageService: AuthStorageService,
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html
new file mode 100644 (file)
index 0000000..5274cf7
--- /dev/null
@@ -0,0 +1,121 @@
+<div class="row">
+  <div class="col-sm-12 col-lg-12">
+    <div>
+      <cd-alert-panel   *ngIf="!rgwModuleStatus"
+                        type="info"
+                        spacingClass="mb-3"
+                        i18n>In order to access the import/export feature, the rgw module must be enabled
+        <a class="text-decoration-underline"
+           (click)="enableRgwModule()">
+           Enable the Object Gateway Module</a>
+      </cd-alert-panel>
+      <cd-alert-panel   *ngIf="restartGatewayMessage"
+                        type="warning"
+                        spacingClass="mb-3"
+                        i18n>Please restart all Ceph Object Gateway instances in all zones to ensure consistent multisite configuration updates.
+        <a class="text-decoration-underline"
+           routerLink="/services">
+           Cluster->Services</a>
+      </cd-alert-panel>
+      <cd-table-actions class="btn-group mb-4 me-2"
+                        [permission]="permission"
+                        [selection]="selection"
+                        [tableActions]="createTableActions">
+      </cd-table-actions>
+      <span *ngIf="showMigrateAction">
+        <cd-table-actions class="btn-group mb-4 me-2 secondary"
+                          [permission]="permission"
+                          [btnColor]="'light'"
+                          [selection]="selection"
+                          [tableActions]="migrateTableAction">
+        </cd-table-actions>
+      </span>
+      <cd-table-actions class="btn-group mb-4 me-2"
+                        [permission]="permission"
+                        [btnColor]="'light'"
+                        [selection]="selection"
+                        [tableActions]="importAction">
+      </cd-table-actions>
+      <cd-table-actions class="btn-group mb-4 me-2"
+                        [permission]="permission"
+                        [btnColor]="'light'"
+                        [selection]="selection"
+                        [tableActions]="exportAction">
+      </cd-table-actions>
+    </div>
+    <div class="card">
+      <div class="card-header"
+           i18n>Topology Viewer</div>
+      <div class="card-body">
+        <div class="row">
+          <div class="col-sm-6 col-lg-6 tree-container">
+            <i *ngIf="loadingIndicator"
+               [ngClass]="[icons.large, icons.spinner, icons.spin]"></i>
+            <tree-root #tree
+                       [nodes]="nodes"
+                       [options]="treeOptions"
+                       (updateData)="onUpdateData()">
+              <ng-template #treeNodeTemplate
+                           let-node>
+                <span *ngIf="node.data.name"
+                      class="me-3">
+                  <span *ngIf="(node.data.show_warning)">
+                    <i  class="text-danger"
+                        i18n-title
+                        [title]="node.data.warning_message"
+                        [ngClass]="icons.danger"></i>
+                  </span>
+                  <i [ngClass]="node.data.icon"></i>
+                    {{ node.data.name }}
+                </span>
+                <span class="badge badge-success me-2"
+                      *ngIf="node.data.is_default">
+                  default
+                </span>
+                <span class="badge badge-warning me-2"
+                      *ngIf="node.data.is_master">
+                  master
+                </span>
+                <span class="badge badge-warning me-2"
+                      *ngIf="node.data.secondary_zone">
+                  secondary-zone
+                </span>
+                <div class="btn-group align-inline-btns"
+                     *ngIf="node.isFocused"
+                     role="group">
+                  <div [title]="editTitle"
+                       i18n-title>
+                    <button type="button"
+                            class="btn btn-light dropdown-toggle-split ms-1"
+                            (click)="openModal(node, true)"
+                            [disabled]="getDisable() || node.data.secondary_zone">
+                      <i [ngClass]="[icons.edit]"></i>
+                    </button>
+                  </div>
+                  <div [title]="deleteTitle"
+                       i18n-title>
+                    <button type="button"
+                            class="btn btn-light ms-1"
+                            [disabled]="isDeleteDisabled(node) || node.data.secondary_zone"
+                            (click)="delete(node)">
+                      <i [ngClass]="[icons.destroy]"></i>
+                    </button>
+                  </div>
+                </div>
+              </ng-template>
+            </tree-root>
+          </div>
+          <div class="col-sm-6 col-lg-6 metadata"
+               *ngIf="metadata">
+            <legend>{{ metadataTitle }}</legend>
+            <div>
+              <cd-table-key-value cdTableDetail
+                                  [data]="metadata">
+              </cd-table-key-value>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.scss
new file mode 100644 (file)
index 0000000..537b53a
--- /dev/null
@@ -0,0 +1,13 @@
+@use './src/styles/vendor/variables' as vv;
+
+.tree-container {
+  height: calc(100vh - vv.$tree-container-height);
+}
+
+.align-inline-btns {
+  margin-left: 5em;
+}
+
+.btn:disabled {
+  pointer-events: none;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.spec.ts
new file mode 100644 (file)
index 0000000..be65424
--- /dev/null
@@ -0,0 +1,43 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { DebugElement } from '@angular/core';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { TreeModule } from '@circlon/angular-tree-component';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+
+import { RgwMultisiteDetailsComponent } from './rgw-multisite-details.component';
+import { RouterTestingModule } from '@angular/router/testing';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwMultisiteDetailsComponent', () => {
+  let component: RgwMultisiteDetailsComponent;
+  let fixture: ComponentFixture<RgwMultisiteDetailsComponent>;
+  let debugElement: DebugElement;
+
+  configureTestBed({
+    declarations: [RgwMultisiteDetailsComponent],
+    imports: [
+      HttpClientTestingModule,
+      TreeModule,
+      SharedModule,
+      ToastrModule.forRoot(),
+      RouterTestingModule
+    ]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteDetailsComponent);
+    component = fixture.componentInstance;
+    debugElement = fixture.debugElement;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('should display right title', () => {
+    const span = debugElement.nativeElement.querySelector('.card-header');
+    expect(span.textContent).toBe('Topology Viewer');
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.ts
new file mode 100644 (file)
index 0000000..6e898e7
--- /dev/null
@@ -0,0 +1,592 @@
+import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';
+import {
+  TreeComponent,
+  ITreeOptions,
+  TreeModel,
+  TreeNode,
+  TREE_ACTIONS
+} from '@circlon/angular-tree-component';
+import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
+import _ from 'lodash';
+
+import { forkJoin, Subscription, timer as observableTimer } from 'rxjs';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { CriticalConfirmationModalComponent } from '~/app/shared/components/critical-confirmation-modal/critical-confirmation-modal.component';
+import { ActionLabelsI18n, TimerServiceInterval } from '~/app/shared/constants/app.constants';
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdTableAction } from '~/app/shared/models/cd-table-action';
+import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
+import { Permission } from '~/app/shared/models/permissions';
+import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { TimerService } from '~/app/shared/services/timer.service';
+import { RgwRealm, RgwZone, RgwZonegroup } from '../models/rgw-multisite';
+import { RgwMultisiteMigrateComponent } from '../rgw-multisite-migrate/rgw-multisite-migrate.component';
+import { RgwMultisiteZoneDeletionFormComponent } from '../models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component';
+import { RgwMultisiteZonegroupDeletionFormComponent } from '../models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component';
+import { RgwMultisiteExportComponent } from '../rgw-multisite-export/rgw-multisite-export.component';
+import { RgwMultisiteImportComponent } from '../rgw-multisite-import/rgw-multisite-import.component';
+import { RgwMultisiteRealmFormComponent } from '../rgw-multisite-realm-form/rgw-multisite-realm-form.component';
+import { RgwMultisiteZoneFormComponent } from '../rgw-multisite-zone-form/rgw-multisite-zone-form.component';
+import { RgwMultisiteZonegroupFormComponent } from '../rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component';
+import { RgwDaemonService } from '~/app/shared/api/rgw-daemon.service';
+import { MgrModuleService } from '~/app/shared/api/mgr-module.service';
+import { BlockUI, NgBlockUI } from 'ng-block-ui';
+import { Router } from '@angular/router';
+
+@Component({
+  selector: 'cd-rgw-multisite-details',
+  templateUrl: './rgw-multisite-details.component.html',
+  styleUrls: ['./rgw-multisite-details.component.scss']
+})
+export class RgwMultisiteDetailsComponent implements OnDestroy, OnInit {
+  private sub = new Subscription();
+
+  @ViewChild('tree') tree: TreeComponent;
+
+  messages = {
+    noDefaultRealm: $localize`Please create a default realm first to enable this feature`,
+    noMasterZone: $localize`Please create a master zone for each zone group to enable this feature`,
+    noRealmExists: $localize`No realm exists`,
+    disableExport: $localize`Please create master zone group and master zone for each of the realms`
+  };
+
+  @BlockUI()
+  blockUI: NgBlockUI;
+
+  icons = Icons;
+  permission: Permission;
+  selection = new CdTableSelection();
+  createTableActions: CdTableAction[];
+  migrateTableAction: CdTableAction[];
+  importAction: CdTableAction[];
+  exportAction: CdTableAction[];
+  loadingIndicator = true;
+  nodes: object[] = [];
+  treeOptions: ITreeOptions = {
+    useVirtualScroll: true,
+    nodeHeight: 22,
+    levelPadding: 20,
+    actionMapping: {
+      mouse: {
+        click: this.onNodeSelected.bind(this)
+      }
+    }
+  };
+  modalRef: NgbModalRef;
+
+  realms: RgwRealm[] = [];
+  zonegroups: RgwZonegroup[] = [];
+  zones: RgwZone[] = [];
+  metadata: any;
+  metadataTitle: string;
+  bsModalRef: NgbModalRef;
+  realmIds: string[] = [];
+  zoneIds: string[] = [];
+  defaultRealmId = '';
+  defaultZonegroupId = '';
+  defaultZoneId = '';
+  multisiteInfo: object[] = [];
+  defaultsInfo: string[] = [];
+  showMigrateAction: boolean = false;
+  editTitle: string = 'Edit';
+  deleteTitle: string = 'Delete';
+  disableExport = true;
+  rgwModuleStatus: boolean;
+  restartGatewayMessage = false;
+  rgwModuleData: string | any[] = [];
+
+  constructor(
+    private modalService: ModalService,
+    private timerService: TimerService,
+    private authStorageService: AuthStorageService,
+    public actionLabels: ActionLabelsI18n,
+    public timerServiceVariable: TimerServiceInterval,
+    public router: Router,
+    public rgwRealmService: RgwRealmService,
+    public rgwZonegroupService: RgwZonegroupService,
+    public rgwZoneService: RgwZoneService,
+    public rgwDaemonService: RgwDaemonService,
+    public mgrModuleService: MgrModuleService,
+    private notificationService: NotificationService
+  ) {
+    this.permission = this.authStorageService.getPermissions().rgw;
+  }
+
+  openModal(entity: any, edit = false) {
+    const entityName = edit ? entity.data.type : entity;
+    const action = edit ? 'edit' : 'create';
+    const initialState = {
+      resource: entityName,
+      action: action,
+      info: entity,
+      defaultsInfo: this.defaultsInfo,
+      multisiteInfo: this.multisiteInfo
+    };
+    if (entityName === 'realm') {
+      this.bsModalRef = this.modalService.show(RgwMultisiteRealmFormComponent, initialState, {
+        size: 'lg'
+      });
+    } else if (entityName === 'zonegroup') {
+      this.bsModalRef = this.modalService.show(RgwMultisiteZonegroupFormComponent, initialState, {
+        size: 'lg'
+      });
+    } else {
+      this.bsModalRef = this.modalService.show(RgwMultisiteZoneFormComponent, initialState, {
+        size: 'lg'
+      });
+    }
+  }
+
+  openMigrateModal() {
+    const initialState = {
+      multisiteInfo: this.multisiteInfo
+    };
+    this.bsModalRef = this.modalService.show(RgwMultisiteMigrateComponent, initialState, {
+      size: 'lg'
+    });
+  }
+
+  openImportModal() {
+    const initialState = {
+      multisiteInfo: this.multisiteInfo
+    };
+    this.bsModalRef = this.modalService.show(RgwMultisiteImportComponent, initialState, {
+      size: 'lg'
+    });
+  }
+
+  openExportModal() {
+    const initialState = {
+      defaultsInfo: this.defaultsInfo,
+      multisiteInfo: this.multisiteInfo
+    };
+    this.bsModalRef = this.modalService.show(RgwMultisiteExportComponent, initialState, {
+      size: 'lg'
+    });
+  }
+
+  getDisableExport() {
+    this.realms.forEach((realm: any) => {
+      this.zonegroups.forEach((zonegroup) => {
+        if (realm.id === zonegroup.realm_id) {
+          if (zonegroup.is_master && zonegroup.master_zone !== '') {
+            this.disableExport = false;
+          }
+        }
+      });
+    });
+    if (!this.rgwModuleStatus) {
+      return true;
+    }
+    if (this.realms.length < 1) {
+      return this.messages.noRealmExists;
+    } else if (this.disableExport) {
+      return this.messages.disableExport;
+    } else {
+      return false;
+    }
+  }
+
+  getDisableImport() {
+    if (!this.rgwModuleStatus) {
+      return true;
+    } else {
+      return false;
+    }
+  }
+
+  ngOnInit() {
+    const createRealmAction: CdTableAction = {
+      permission: 'create',
+      icon: Icons.add,
+      name: this.actionLabels.CREATE + ' Realm',
+      click: () => this.openModal('realm')
+    };
+    const createZonegroupAction: CdTableAction = {
+      permission: 'create',
+      icon: Icons.add,
+      name: this.actionLabels.CREATE + ' Zone Group',
+      click: () => this.openModal('zonegroup'),
+      disable: () => this.getDisable()
+    };
+    const createZoneAction: CdTableAction = {
+      permission: 'create',
+      icon: Icons.add,
+      name: this.actionLabels.CREATE + ' Zone',
+      click: () => this.openModal('zone')
+    };
+    const migrateMultsiteAction: CdTableAction = {
+      permission: 'read',
+      icon: Icons.exchange,
+      name: this.actionLabels.MIGRATE,
+      click: () => this.openMigrateModal()
+    };
+    const importMultsiteAction: CdTableAction = {
+      permission: 'read',
+      icon: Icons.download,
+      name: this.actionLabels.IMPORT,
+      click: () => this.openImportModal(),
+      disable: () => this.getDisableImport()
+    };
+    const exportMultsiteAction: CdTableAction = {
+      permission: 'read',
+      icon: Icons.upload,
+      name: this.actionLabels.EXPORT,
+      click: () => this.openExportModal(),
+      disable: () => this.getDisableExport()
+    };
+    this.createTableActions = [createRealmAction, createZonegroupAction, createZoneAction];
+    this.migrateTableAction = [migrateMultsiteAction];
+    this.importAction = [importMultsiteAction];
+    this.exportAction = [exportMultsiteAction];
+
+    const observables = [
+      this.rgwRealmService.getAllRealmsInfo(),
+      this.rgwZonegroupService.getAllZonegroupsInfo(),
+      this.rgwZoneService.getAllZonesInfo()
+    ];
+    this.sub = this.timerService
+      .get(() => forkJoin(observables), this.timerServiceVariable.TIMER_SERVICE_PERIOD * 2)
+      .subscribe(
+        (multisiteInfo: [object, object, object]) => {
+          this.multisiteInfo = multisiteInfo;
+          this.loadingIndicator = false;
+          this.nodes = this.abstractTreeData(multisiteInfo);
+        },
+        (_error) => {}
+      );
+    this.mgrModuleService.list().subscribe((moduleData: any) => {
+      this.rgwModuleData = moduleData.filter((module: object) => module['name'] === 'rgw');
+      if (this.rgwModuleData.length > 0) {
+        this.rgwModuleStatus = this.rgwModuleData[0].enabled;
+      }
+    });
+  }
+
+  /* setConfigValues() {
+    this.rgwDaemonService
+      .setMultisiteConfig(
+        this.defaultsInfo['defaultRealmName'],
+        this.defaultsInfo['defaultZonegroupName'],
+        this.defaultsInfo['defaultZoneName']
+      )
+      .subscribe(() => {});
+  }*/
+
+  ngOnDestroy() {
+    this.sub.unsubscribe();
+  }
+
+  private abstractTreeData(multisiteInfo: [object, object, object]): any[] {
+    let allNodes: object[] = [];
+    let rootNodes = {};
+    let firstChildNodes = {};
+    let allFirstChildNodes = [];
+    let secondChildNodes = {};
+    let allSecondChildNodes: {}[] = [];
+    this.realms = multisiteInfo[0]['realms'];
+    this.zonegroups = multisiteInfo[1]['zonegroups'];
+    this.zones = multisiteInfo[2]['zones'];
+    this.defaultRealmId = multisiteInfo[0]['default_realm'];
+    this.defaultZonegroupId = multisiteInfo[1]['default_zonegroup'];
+    this.defaultZoneId = multisiteInfo[2]['default_zone'];
+    this.defaultsInfo = this.getDefaultsEntities(
+      this.defaultRealmId,
+      this.defaultZonegroupId,
+      this.defaultZoneId
+    );
+    if (this.realms.length > 0) {
+      // get tree for realm -> zonegroup -> zone
+      for (const realm of this.realms) {
+        const result = this.rgwRealmService.getRealmTree(realm, this.defaultRealmId);
+        rootNodes = result['nodes'];
+        this.realmIds = this.realmIds.concat(result['realmIds']);
+        for (const zonegroup of this.zonegroups) {
+          if (zonegroup.realm_id === realm.id) {
+            firstChildNodes = this.rgwZonegroupService.getZonegroupTree(
+              zonegroup,
+              this.defaultZonegroupId,
+              realm
+            );
+            for (const zone of zonegroup.zones) {
+              const zoneResult = this.rgwZoneService.getZoneTree(
+                zone,
+                this.defaultZoneId,
+                this.zones,
+                zonegroup,
+                realm
+              );
+              secondChildNodes = zoneResult['nodes'];
+              this.zoneIds = this.zoneIds.concat(zoneResult['zoneIds']);
+              allSecondChildNodes.push(secondChildNodes);
+              secondChildNodes = {};
+            }
+            firstChildNodes['children'] = allSecondChildNodes;
+            allSecondChildNodes = [];
+            allFirstChildNodes.push(firstChildNodes);
+            firstChildNodes = {};
+          }
+        }
+        rootNodes['children'] = allFirstChildNodes;
+        allNodes.push(rootNodes);
+        firstChildNodes = {};
+        secondChildNodes = {};
+        rootNodes = {};
+        allFirstChildNodes = [];
+        allSecondChildNodes = [];
+      }
+    }
+    if (this.zonegroups.length > 0) {
+      // get tree for zonegroup -> zone (standalone zonegroups that don't match a realm eg(initial default))
+      for (const zonegroup of this.zonegroups) {
+        if (!this.realmIds.includes(zonegroup.realm_id)) {
+          rootNodes = this.rgwZonegroupService.getZonegroupTree(zonegroup, this.defaultZonegroupId);
+          for (const zone of zonegroup.zones) {
+            const zoneResult = this.rgwZoneService.getZoneTree(
+              zone,
+              this.defaultZoneId,
+              this.zones,
+              zonegroup
+            );
+            firstChildNodes = zoneResult['nodes'];
+            this.zoneIds = this.zoneIds.concat(zoneResult['zoneIds']);
+            allFirstChildNodes.push(firstChildNodes);
+            firstChildNodes = {};
+          }
+          rootNodes['children'] = allFirstChildNodes;
+          allNodes.push(rootNodes);
+          firstChildNodes = {};
+          rootNodes = {};
+          allFirstChildNodes = [];
+        }
+      }
+    }
+    if (this.zones.length > 0) {
+      // get tree for standalone zones(zones that do not belong to a zonegroup)
+      for (const zone of this.zones) {
+        if (this.zoneIds.length > 0 && !this.zoneIds.includes(zone.id)) {
+          const zoneResult = this.rgwZoneService.getZoneTree(zone, this.defaultZoneId, this.zones);
+          rootNodes = zoneResult['nodes'];
+          allNodes.push(rootNodes);
+          rootNodes = {};
+        }
+      }
+    }
+    if (this.realms.length < 1 && this.zonegroups.length < 1 && this.zones.length < 1) {
+      return [
+        {
+          name: 'No nodes!'
+        }
+      ];
+    }
+    this.realmIds = [];
+    this.zoneIds = [];
+    this.getDisableMigrate();
+    this.rgwDaemonService.list().subscribe((data: any) => {
+      const realmName = data.map((item: { [x: string]: any }) => item['realm_name']);
+      if (
+        this.defaultRealmId != '' &&
+        this.defaultZonegroupId != '' &&
+        this.defaultZoneId != '' &&
+        realmName.includes('')
+      ) {
+        this.restartGatewayMessage = true;
+      }
+    });
+    return allNodes;
+  }
+
+  getDefaultsEntities(
+    defaultRealmId: string,
+    defaultZonegroupId: string,
+    defaultZoneId: string
+  ): any {
+    const defaultRealm = this.realms.find((x: { id: string }) => x.id === defaultRealmId);
+    const defaultZonegroup = this.zonegroups.find(
+      (x: { id: string }) => x.id === defaultZonegroupId
+    );
+    const defaultZone = this.zones.find((x: { id: string }) => x.id === defaultZoneId);
+    const defaultRealmName = defaultRealm !== undefined ? defaultRealm.name : null;
+    const defaultZonegroupName = defaultZonegroup !== undefined ? defaultZonegroup.name : null;
+    const defaultZoneName = defaultZone !== undefined ? defaultZone.name : null;
+    return {
+      defaultRealmName: defaultRealmName,
+      defaultZonegroupName: defaultZonegroupName,
+      defaultZoneName: defaultZoneName
+    };
+  }
+
+  onNodeSelected(tree: TreeModel, node: TreeNode) {
+    TREE_ACTIONS.ACTIVATE(tree, node, true);
+    this.metadataTitle = node.data.name;
+    this.metadata = node.data.info;
+    node.data.show = true;
+  }
+
+  onUpdateData() {
+    this.tree.treeModel.expandAll();
+  }
+
+  getDisable() {
+    let isMasterZone = true;
+    if (this.defaultRealmId === '') {
+      return this.messages.noDefaultRealm;
+    } else {
+      this.zonegroups.forEach((zgp: any) => {
+        if (_.isEmpty(zgp.master_zone)) {
+          isMasterZone = false;
+        }
+      });
+      if (!isMasterZone) {
+        this.editTitle =
+          'Please create a master zone for each existing zonegroup to enable this feature';
+        return this.messages.noMasterZone;
+      } else {
+        this.editTitle = 'Edit';
+        return false;
+      }
+    }
+  }
+
+  getDisableMigrate() {
+    if (
+      this.realms.length === 0 &&
+      this.zonegroups.length === 1 &&
+      this.zonegroups[0].name === 'default' &&
+      this.zones.length === 1 &&
+      this.zones[0].name === 'default'
+    ) {
+      this.showMigrateAction = true;
+    } else {
+      this.showMigrateAction = false;
+    }
+    return this.showMigrateAction;
+  }
+
+  isDeleteDisabled(node: TreeNode): boolean {
+    let disable: boolean = false;
+    let masterZonegroupCount: number = 0;
+    if (node.data.type === 'realm' && node.data.is_default && this.realms.length < 2) {
+      disable = true;
+    }
+
+    if (node.data.type === 'zonegroup') {
+      if (this.zonegroups.length < 2) {
+        this.deleteTitle = 'You can not delete the only zonegroup available';
+        disable = true;
+      } else if (node.data.is_default) {
+        this.deleteTitle = 'You can not delete the default zonegroup';
+        disable = true;
+      } else if (node.data.is_master) {
+        for (let zonegroup of this.zonegroups) {
+          if (zonegroup.is_master === true) {
+            masterZonegroupCount++;
+            if (masterZonegroupCount > 1) break;
+          }
+        }
+        if (masterZonegroupCount < 2) {
+          this.deleteTitle = 'You can not delete the only master zonegroup available';
+          disable = true;
+        }
+      }
+    }
+
+    if (node.data.type === 'zone') {
+      if (this.zones.length < 2) {
+        this.deleteTitle = 'You can not delete the only zone available';
+        disable = true;
+      } else if (node.data.is_default) {
+        this.deleteTitle = 'You can not delete the default zone';
+        disable = true;
+      } else if (node.data.is_master && node.data.zone_zonegroup.zones.length < 2) {
+        this.deleteTitle =
+          'You can not delete the master zone as there are no more zones in this zonegroup';
+        disable = true;
+      }
+    }
+
+    if (!disable) {
+      this.deleteTitle = 'Delete';
+    }
+
+    return disable;
+  }
+
+  delete(node: TreeNode) {
+    if (node.data.type === 'realm') {
+      this.modalRef = this.modalService.show(CriticalConfirmationModalComponent, {
+        itemDescription: $localize`${node.data.type} ${node.data.name}`,
+        itemNames: [`${node.data.name}`],
+        submitAction: () => {
+          this.rgwRealmService.delete(node.data.name).subscribe(
+            () => {
+              this.modalRef.close();
+              this.notificationService.show(
+                NotificationType.success,
+                $localize`Realm: '${node.data.name}' deleted successfully`
+              );
+            },
+            () => {
+              this.modalRef.componentInstance.stopLoadingSpinner();
+            }
+          );
+        }
+      });
+    } else if (node.data.type === 'zonegroup') {
+      this.modalRef = this.modalService.show(RgwMultisiteZonegroupDeletionFormComponent, {
+        zonegroup: node.data
+      });
+    } else if (node.data.type === 'zone') {
+      this.modalRef = this.modalService.show(RgwMultisiteZoneDeletionFormComponent, {
+        zone: node.data
+      });
+    }
+  }
+
+  enableRgwModule() {
+    let $obs;
+    const fnWaitUntilReconnected = () => {
+      observableTimer(2000).subscribe(() => {
+        // Trigger an API request to check if the connection is
+        // re-established.
+        this.mgrModuleService.list().subscribe(
+          () => {
+            // Resume showing the notification toasties.
+            this.notificationService.suspendToasties(false);
+            // Unblock the whole UI.
+            this.blockUI.stop();
+            // Reload the data table content.
+            this.notificationService.show(NotificationType.success, $localize`Enabled RGW Module`);
+            this.router.navigateByUrl('/', { skipLocationChange: true }).then(() => {
+              this.router.navigate(['/rgw/multisite']);
+            });
+            // Reload the data table content.
+          },
+          () => {
+            fnWaitUntilReconnected();
+          }
+        );
+      });
+    };
+
+    if (!this.rgwModuleStatus) {
+      $obs = this.mgrModuleService.enable('rgw');
+    }
+    $obs.subscribe(
+      () => undefined,
+      () => {
+        // Suspend showing the notification toasties.
+        this.notificationService.suspendToasties(true);
+        // Block the whole UI to prevent user interactions until
+        // the connection to the backend is reestablished
+        this.blockUI.start($localize`Reconnecting, please wait ...`);
+        fnWaitUntilReconnected();
+      }
+    );
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.html
new file mode 100644 (file)
index 0000000..b399f93
--- /dev/null
@@ -0,0 +1,65 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">Export Multi-Site Realm Token</ng-container>
+
+  <ng-container class="modal-content">
+    <form name="exportTokenForm"
+          #frm="ngForm"
+          [formGroup]="exportTokenForm">
+    <span *ngIf="loading"
+          class="d-flex justify-content-center">
+    <i [ngClass]="[icons.large3x, icons.spinner, icons.spin]"></i></span>
+    <div class="modal-body"
+         *ngIf="!loading">
+      <cd-alert-panel *ngIf="!tokenValid"
+                      type="warning"
+                      class="mx-3"
+                      i18n>
+      <div *ngFor="let realminfo of realms">
+        <b>{{realminfo.realm}}</b> -
+        {{realminfo.token}}
+      </div>
+      </cd-alert-panel>
+      <div *ngFor="let realminfo of realms">
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="realmName"
+                 i18n>Realm Name
+          </label>
+          <div class="cd-col-form-input">
+            <input id="realmName"
+                   name="realmName"
+                   type="text"
+                   value="{{ realminfo.realm }}"
+                   readonly>
+          </div>
+        </div>
+        <div class="form-group row">
+          <label class="cd-col-form-label"
+                 for="token"
+                 i18n>Token
+          </label>
+          <div class="cd-col-form-input">
+            <input id="realmToken"
+                   name="realmToken"
+                   type="text"
+                   value="{{ realminfo.token }}"
+                   class="me-2 mb-4"
+                   readonly>
+            <cd-copy-2-clipboard-button
+                      source="{{ realminfo.token }}"
+                      [byId]="false">
+            </cd-copy-2-clipboard-button>
+          </div>
+          <hr *ngIf="realms.length > 1">
+        </div>
+      </div>
+    </div>
+    <div class="modal-footer">
+      <cd-back-button class="m-2 float-end"
+                      aria-label="Close"
+                      (backAction)="activeModal.close()"></cd-back-button>
+    </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.spec.ts
new file mode 100644 (file)
index 0000000..bca0ddf
--- /dev/null
@@ -0,0 +1,37 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+
+import { RgwMultisiteExportComponent } from './rgw-multisite-export.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwMultisiteExportComponent', () => {
+  let component: RgwMultisiteExportComponent;
+  let fixture: ComponentFixture<RgwMultisiteExportComponent>;
+
+  configureTestBed({
+    imports: [
+      SharedModule,
+      ReactiveFormsModule,
+      RouterTestingModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot()
+    ],
+    declarations: [RgwMultisiteExportComponent],
+    providers: [NgbActiveModal]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteExportComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-export/rgw-multisite-export.component.ts
new file mode 100644 (file)
index 0000000..0b1b242
--- /dev/null
@@ -0,0 +1,62 @@
+import { AfterViewChecked, ChangeDetectorRef, Component, OnInit } from '@angular/core';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { RgwRealm } from '../models/rgw-multisite';
+import { Icons } from '~/app/shared/enum/icons.enum';
+
+@Component({
+  selector: 'cd-rgw-multisite-export',
+  templateUrl: './rgw-multisite-export.component.html',
+  styleUrls: ['./rgw-multisite-export.component.scss']
+})
+export class RgwMultisiteExportComponent implements OnInit, AfterViewChecked {
+  exportTokenForm: CdFormGroup;
+  realms: any;
+  realmList: RgwRealm[];
+  multisiteInfo: any;
+  tokenValid = false;
+  loading = true;
+  icons = Icons;
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public rgwRealmService: RgwRealmService,
+    public actionLabels: ActionLabelsI18n,
+    public notificationService: NotificationService,
+    private readonly changeDetectorRef: ChangeDetectorRef
+  ) {
+    this.createForm();
+  }
+
+  createForm() {
+    this.exportTokenForm = new CdFormGroup({});
+  }
+
+  onSubmit() {
+    this.activeModal.close();
+  }
+
+  ngOnInit(): void {
+    this.rgwRealmService.getRealmTokens().subscribe((data: object[]) => {
+      this.loading = false;
+      this.realms = data;
+      var base64Matcher = new RegExp(
+        '^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$'
+      );
+      this.realms.forEach((realmInfo: any) => {
+        if (base64Matcher.test(realmInfo.token)) {
+          this.tokenValid = true;
+        } else {
+          this.tokenValid = false;
+        }
+      });
+    });
+  }
+
+  ngAfterViewChecked(): void {
+    this.changeDetectorRef.detectChanges();
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.html
new file mode 100644 (file)
index 0000000..70c07e8
--- /dev/null
@@ -0,0 +1,182 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">Import Multi-Site Token</ng-container>
+
+  <ng-container class="modal-content">
+    <form name="importTokenForm"
+          #frm="ngForm"
+          [formGroup]="importTokenForm">
+    <div class="modal-body">
+      <cd-alert-panel type="info"
+                      spacingClass="mb-3">
+        <ul>
+          <li>This feature allows you to configure a connection between your primary and secondary Ceph clusters for data replication. By importing a token, you establish a link between the clusters, enabling data synchronization.</li>
+          <li>To obtain the token, generate it from your primary Ceph cluster. This token includes encoded information about the primary cluster's endpoint, access key, and secret key.</li>
+          <li>The secondary zone represents the destination cluster where your data will be replicated.</li>
+        </ul>
+      </cd-alert-panel>
+      <legend i18n>Zone Details</legend>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="realmToken"
+               i18n>Token
+        </label>
+        <div class="cd-col-form-input">
+          <input id="realmToken"
+                 name="realmToken"
+                 class="form-control"
+                 type="text"
+                 formControlName="realmToken">
+          <span class="invalid-feedback"
+                *ngIf="importTokenForm.showError('realmToken', frm, 'required')"
+                i18n>This field is required.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zoneName"
+               i18n>Secondary Zone Name</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Zone name..."
+                 id="zoneName"
+                 name="zoneName"
+                 formControlName="zoneName">
+          <span class="invalid-feedback"
+                *ngIf="importTokenForm.showError('zoneName', frm, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="importTokenForm.showError('zoneName', frm, 'uniqueName')"
+                i18n>The chosen zone name is already in use.</span>
+        </div>
+      </div>
+
+      <legend i18n>Service Details</legend>
+      <div class="form-group row">
+        <div class="cd-col-form-offset">
+          <div class="custom-control custom-checkbox">
+            <input class="custom-control-input"
+                   id="unmanaged"
+                   type="checkbox"
+                   formControlName="unmanaged">
+            <label class="custom-control-label"
+                   for="unmanaged"
+                   i18n>Unmanaged</label>
+            <cd-helper i18n>If set to true, the orchestrator will not start nor stop any daemon associated with this service.
+               Placement and all other properties will be ignored.</cd-helper>
+          </div>
+        </div>
+      </div>
+
+      <!-- Placement -->
+      <div *ngIf="!importTokenForm.controls.unmanaged.value"
+           class="form-group row">
+        <label class="cd-col-form-label"
+               for="placement"
+               i18n>Placement</label>
+        <div class="cd-col-form-input">
+          <select id="placement"
+                  class="form-select"
+                  formControlName="placement">
+            <option i18n
+                    value="hosts">Hosts</option>
+            <option i18n
+                    value="label">Label</option>
+          </select>
+        </div>
+      </div>
+
+      <!-- Label -->
+      <div *ngIf="!importTokenForm.controls.unmanaged.value && importTokenForm.controls.placement.value === 'label'"
+           class="form-group row">
+        <label i18n
+               class="cd-col-form-label"
+               for="label">Label</label>
+        <div class="cd-col-form-input">
+          <input id="label"
+                 class="form-control"
+                 type="text"
+                 formControlName="label"
+                 [ngbTypeahead]="searchLabels"
+                 (focus)="labelFocus.next($any($event).target.value)"
+                 (click)="labelClick.next($any($event).target.value)">
+          <span class="invalid-feedback"
+                *ngIf="importTokenForm.showError('label', frm, 'required')"
+                i18n>This field is required.</span>
+        </div>
+      </div>
+
+      <!-- Hosts -->
+      <div *ngIf="!importTokenForm.controls.unmanaged.value && importTokenForm.controls.placement.value === 'hosts'"
+           class="form-group row">
+        <label class="cd-col-form-label"
+               for="hosts"
+               i18n>Hosts</label>
+        <div class="cd-col-form-input">
+          <cd-select-badges id="hosts"
+                            [data]="importTokenForm.controls.hosts.value"
+                            [options]="hosts.options"
+                            [messages]="hosts.messages">
+          </cd-select-badges>
+        </div>
+      </div>
+
+      <!-- count -->
+      <div *ngIf="!importTokenForm.controls.unmanaged.value"
+           class="form-group row">
+        <label class="cd-col-form-label"
+               for="count">
+          <span i18n>Count</span>
+          <cd-helper i18n>Only that number of daemons will be created.</cd-helper>
+        </label>
+        <div class="cd-col-form-input">
+          <input id="count"
+                 class="form-control"
+                 type="number"
+                 formControlName="count"
+                 min="1">
+          <span class="invalid-feedback"
+                *ngIf="importTokenForm.showError('count', frm, 'min')"
+                i18n>The value must be at least 1.</span>
+          <span class="invalid-feedback"
+                *ngIf="importTokenForm.showError('count', frm, 'pattern')"
+                i18n>The entered value needs to be a number.</span>
+        </div>
+      </div>
+
+      <!-- RGW -->
+      <ng-container *ngIf="!importTokenForm.controls.unmanaged.value">
+        <!-- rgw_frontend_port -->
+        <div class="form-group row">
+          <label i18n
+                 class="cd-col-form-label"
+                 for="rgw_frontend_port">Port</label>
+          <div class="cd-col-form-input">
+            <input id="rgw_frontend_port"
+                   class="form-control"
+                   type="number"
+                   formControlName="rgw_frontend_port"
+                   min="1"
+                   max="65535">
+            <span class="invalid-feedback"
+                  *ngIf="importTokenForm.showError('rgw_frontend_port', frm, 'pattern')"
+                  i18n>The entered value needs to be a number.</span>
+            <span class="invalid-feedback"
+                  *ngIf="importTokenForm.showError('rgw_frontend_port', frm, 'min')"
+                  i18n>The value must be at least 1.</span>
+            <span class="invalid-feedback"
+                  *ngIf="importTokenForm.showError('rgw_frontend_port', frm, 'max')"
+                  i18n>The value cannot exceed 65535.</span>
+          </div>
+        </div>
+      </ng-container>
+    </div>
+    <div class="modal-footer">
+      <cd-form-button-panel (submitActionEvent)="onSubmit()"
+                            [submitText]="actionLabels.IMPORT"
+                            [form]="importTokenForm"></cd-form-button-panel>
+    </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.spec.ts
new file mode 100644 (file)
index 0000000..817c6a4
--- /dev/null
@@ -0,0 +1,37 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+
+import { RgwMultisiteImportComponent } from './rgw-multisite-import.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwMultisiteImportComponent', () => {
+  let component: RgwMultisiteImportComponent;
+  let fixture: ComponentFixture<RgwMultisiteImportComponent>;
+
+  configureTestBed({
+    imports: [
+      SharedModule,
+      ReactiveFormsModule,
+      RouterTestingModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot()
+    ],
+    declarations: [RgwMultisiteImportComponent],
+    providers: [NgbActiveModal]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteImportComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-import/rgw-multisite-import.component.ts
new file mode 100644 (file)
index 0000000..deda890
--- /dev/null
@@ -0,0 +1,164 @@
+import { Component, OnInit, ViewChild } from '@angular/core';
+import { FormControl, Validators } from '@angular/forms';
+import { NgbActiveModal, NgbTypeahead } from '@ng-bootstrap/ng-bootstrap';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { RgwZone } from '../models/rgw-multisite';
+import _ from 'lodash';
+import { SelectMessages } from '~/app/shared/components/select/select-messages.model';
+import { HostService } from '~/app/shared/api/host.service';
+import { CdTableFetchDataContext } from '~/app/shared/models/cd-table-fetch-data-context';
+import { SelectOption } from '~/app/shared/components/select/select-option.model';
+import { Observable, Subject, merge } from 'rxjs';
+import { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';
+
+@Component({
+  selector: 'cd-rgw-multisite-import',
+  templateUrl: './rgw-multisite-import.component.html',
+  styleUrls: ['./rgw-multisite-import.component.scss']
+})
+export class RgwMultisiteImportComponent implements OnInit {
+  readonly endpoints = /^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{2,4}$/;
+  readonly ipv4Rgx = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i;
+  readonly ipv6Rgx = /^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i;
+  @ViewChild(NgbTypeahead, { static: false })
+  typeahead: NgbTypeahead;
+
+  importTokenForm: CdFormGroup;
+  multisiteInfo: object[] = [];
+  zoneList: RgwZone[] = [];
+  zoneNames: string[];
+  hosts: any;
+  labels: string[];
+  labelClick = new Subject<string>();
+  labelFocus = new Subject<string>();
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public hostService: HostService,
+
+    public rgwRealmService: RgwRealmService,
+    public actionLabels: ActionLabelsI18n,
+    public notificationService: NotificationService
+  ) {
+    this.hosts = {
+      options: [],
+      messages: new SelectMessages({
+        empty: $localize`There are no hosts.`,
+        filter: $localize`Filter hosts`
+      })
+    };
+    this.createForm();
+  }
+  ngOnInit(): void {
+    this.zoneList =
+      this.multisiteInfo[2] !== undefined && this.multisiteInfo[2].hasOwnProperty('zones')
+        ? this.multisiteInfo[2]['zones']
+        : [];
+    this.zoneNames = this.zoneList.map((zone) => {
+      return zone['name'];
+    });
+    const hostContext = new CdTableFetchDataContext(() => undefined);
+    this.hostService.list(hostContext.toParams(), 'false').subscribe((resp: object[]) => {
+      const options: SelectOption[] = [];
+      _.forEach(resp, (host: object) => {
+        if (_.get(host, 'sources.orchestrator', false)) {
+          const option = new SelectOption(false, _.get(host, 'hostname'), '');
+          options.push(option);
+        }
+      });
+      this.hosts.options = [...options];
+    });
+    this.hostService.getLabels().subscribe((resp: string[]) => {
+      this.labels = resp;
+    });
+  }
+
+  createForm() {
+    this.importTokenForm = new CdFormGroup({
+      realmToken: new FormControl('', {
+        validators: [Validators.required]
+      }),
+      zoneName: new FormControl(null, {
+        validators: [
+          Validators.required,
+          CdValidators.custom('uniqueName', (zoneName: string) => {
+            return this.zoneNames && this.zoneNames.indexOf(zoneName) !== -1;
+          })
+        ]
+      }),
+      rgw_frontend_port: new FormControl(null, {
+        validators: [Validators.required, Validators.pattern('^[0-9]*$')]
+      }),
+      placement: new FormControl('hosts'),
+      label: new FormControl(null, [
+        CdValidators.requiredIf({
+          placement: 'label',
+          unmanaged: false
+        })
+      ]),
+      hosts: new FormControl([]),
+      count: new FormControl(null, [CdValidators.number(false)]),
+      unmanaged: new FormControl(false)
+    });
+  }
+
+  onSubmit() {
+    const values = this.importTokenForm.value;
+    const placementSpec: object = {
+      placement: {}
+    };
+    if (!values['unmanaged']) {
+      switch (values['placement']) {
+        case 'hosts':
+          if (values['hosts'].length > 0) {
+            placementSpec['placement']['hosts'] = values['hosts'];
+          }
+          break;
+        case 'label':
+          placementSpec['placement']['label'] = values['label'];
+          break;
+      }
+      if (_.isNumber(values['count']) && values['count'] > 0) {
+        placementSpec['placement']['count'] = values['count'];
+      }
+    }
+    this.rgwRealmService
+      .importRealmToken(
+        values['realmToken'],
+        values['zoneName'],
+        values['rgw_frontend_port'],
+        placementSpec
+      )
+      .subscribe(
+        () => {
+          this.notificationService.show(
+            NotificationType.success,
+            $localize`Realm token import successfull`
+          );
+          this.activeModal.close();
+        },
+        () => {
+          this.importTokenForm.setErrors({ cdSubmitButton: true });
+        }
+      );
+  }
+
+  searchLabels = (text$: Observable<string>) => {
+    return merge(
+      text$.pipe(debounceTime(200), distinctUntilChanged()),
+      this.labelFocus,
+      this.labelClick.pipe(filter(() => !this.typeahead.isPopupOpen()))
+    ).pipe(
+      map((value) =>
+        this.labels
+          .filter((label: string) => label.toLowerCase().indexOf(value.toLowerCase()) > -1)
+          .slice(0, 10)
+      )
+    );
+  };
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.html
new file mode 100644 (file)
index 0000000..f3f23fe
--- /dev/null
@@ -0,0 +1,154 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">Migrate Single Site to Multi-Site
+    <cd-helper>
+      <span>Migrate from a single-site deployment with a default zone group and zone to a multi-site system</span>
+    </cd-helper>
+  </ng-container>
+
+  <ng-container class="modal-content">
+    <form name="multisiteMigrateForm"
+          #formDir="ngForm"
+          [formGroup]="multisiteMigrateForm"
+          novalidate>
+    <div class="modal-body">
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="realmName"
+               i18n>Realm Name</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Realm name..."
+                 id="realmName"
+                 name="realmName"
+                 formControlName="realmName">
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('realmName', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('realmName', formDir, 'uniqueName')"
+                i18n>The chosen realm name is already in use.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zonegroupName"
+               i18n>Rename default zone group</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Zone group name..."
+                 id="zonegroupName"
+                 name="zonegroupName"
+                 formControlName="zonegroupName">
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('zonegroupName', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('zonegroupName', formDir, 'uniqueName')"
+                i18n>The chosen zone group name is already in use.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zonegroup_endpoints"
+               i18n>Zone group Endpoints
+        </label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="e.g, http://ceph-node-00.com:80"
+                 id="zonegroup_endpoints"
+                 name="zonegroup_endpoints"
+                 formControlName="zonegroup_endpoints">
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('zonegroup_endpoints', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('zonegroup_endpoints', formDir, 'endpoint')"
+                i18n>Please enter a valid IP address.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zoneName"
+               i18n>Rename default zone</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Zone name..."
+                 id="zoneName"
+                 name="zoneName"
+                 formControlName="zoneName">
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('zoneName', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('zoneName', formDir, 'uniqueName')"
+                i18n>The chosen zone name is already in use.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zone_endpoints"
+               i18n>Zone Endpoints
+        </label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="e.g, http://ceph-node-00.com:80"
+                 id="zone_endpoints"
+                 name="zone_endpoints"
+                 formControlName="zone_endpoints">
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('zone_endpoints', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteMigrateForm.showError('zone_endpoints', formDir, 'endpoint')"
+                i18n>Please enter a valid IP address.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="access_key"
+               i18n>S3 access key
+          <cd-helper>
+            <span>To see or copy your S3 access key, go to <b>Object Gateway > Users</b> and click on your user name. In <b>Keys</b>, click <b>Show</b>. View the access key by clicking Show and copy the key by clicking <b>Copy to Clipboard</b>.</span>
+          </cd-helper>
+        </label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="e.g."
+                 id="access_key"
+                 name="access_key"
+                 formControlName="access_key">
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="access_key"
+               i18n>S3 secret key
+          <cd-helper>
+            <span>To see or copy your S3 access key, go to <b>Object Gateway > Users</b> and click on your user name. In <b>Keys</b>, click <b>Show</b>. View the secret key by clicking Show and copy the key by clicking <b>Copy to Clipboard</b>.</span>
+          </cd-helper>
+        </label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="e.g."
+                 id="secret_key"
+                 name="secret_key"
+                 formControlName="secret_key">
+        </div>
+      </div>
+    </div>
+    <div class="modal-footer">
+      <cd-form-button-panel (submitActionEvent)="submit()"
+                            [submitText]="actionLabels.MIGRATE"
+                            [form]="multisiteMigrateForm"></cd-form-button-panel>
+    </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.spec.ts
new file mode 100644 (file)
index 0000000..2134e7f
--- /dev/null
@@ -0,0 +1,37 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RgwMultisiteMigrateComponent } from './rgw-multisite-migrate.component';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwMultisiteMigrateComponent', () => {
+  let component: RgwMultisiteMigrateComponent;
+  let fixture: ComponentFixture<RgwMultisiteMigrateComponent>;
+
+  configureTestBed({
+    imports: [
+      SharedModule,
+      ReactiveFormsModule,
+      RouterTestingModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot()
+    ],
+    declarations: [RgwMultisiteMigrateComponent],
+    providers: [NgbActiveModal]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteMigrateComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-migrate/rgw-multisite-migrate.component.ts
new file mode 100644 (file)
index 0000000..4c2f53b
--- /dev/null
@@ -0,0 +1,194 @@
+import { Component, EventEmitter, OnInit, Output } from '@angular/core';
+import { UntypedFormControl, Validators } from '@angular/forms';
+import { NgbActiveModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
+import _ from 'lodash';
+import { RgwMultisiteService } from '~/app/shared/api/rgw-multisite.service';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { RgwRealm, RgwZone, RgwZonegroup, SystemKey } from '../models/rgw-multisite';
+import { ModalService } from '~/app/shared/services/modal.service';
+import { RgwDaemonService } from '~/app/shared/api/rgw-daemon.service';
+
+@Component({
+  selector: 'cd-rgw-multisite-migrate',
+  templateUrl: './rgw-multisite-migrate.component.html',
+  styleUrls: ['./rgw-multisite-migrate.component.scss']
+})
+export class RgwMultisiteMigrateComponent implements OnInit {
+  readonly endpoints = /^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{2,4}$/;
+  readonly ipv4Rgx = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i;
+  readonly ipv6Rgx = /^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i;
+
+  @Output()
+  submitAction = new EventEmitter();
+
+  multisiteMigrateForm: CdFormGroup;
+  zoneNames: string[];
+  realmList: RgwRealm[];
+  multisiteInfo: object[] = [];
+  realmNames: string[];
+  zonegroupList: RgwZonegroup[];
+  zonegroupNames: string[];
+  zoneList: RgwZone[];
+  realm: RgwRealm;
+  zonegroup: RgwZonegroup;
+  zone: RgwZone;
+  newZonegroupName: any;
+  newZoneName: any;
+  bsModalRef: NgbModalRef;
+  users: any;
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public actionLabels: ActionLabelsI18n,
+    public rgwMultisiteService: RgwMultisiteService,
+    public rgwZoneService: RgwZoneService,
+    public notificationService: NotificationService,
+    public rgwZonegroupService: RgwZonegroupService,
+    public rgwRealmService: RgwRealmService,
+    public rgwDaemonService: RgwDaemonService,
+    public modalService: ModalService
+  ) {
+    this.createForm();
+  }
+
+  createForm() {
+    this.multisiteMigrateForm = new CdFormGroup({
+      realmName: new UntypedFormControl(null, {
+        validators: [
+          Validators.required,
+          CdValidators.custom('uniqueName', (realmName: string) => {
+            return this.realmNames && this.zoneNames.indexOf(realmName) !== -1;
+          })
+        ]
+      }),
+      zonegroupName: new UntypedFormControl(null, {
+        validators: [
+          Validators.required,
+          CdValidators.custom('uniqueName', (zonegroupName: string) => {
+            return this.zonegroupNames && this.zoneNames.indexOf(zonegroupName) !== -1;
+          })
+        ]
+      }),
+      zoneName: new UntypedFormControl(null, {
+        validators: [
+          Validators.required,
+          CdValidators.custom('uniqueName', (zoneName: string) => {
+            return this.zoneNames && this.zoneNames.indexOf(zoneName) !== -1;
+          })
+        ]
+      }),
+      zone_endpoints: new UntypedFormControl([], {
+        validators: [
+          CdValidators.custom('endpoint', (value: string) => {
+            if (_.isEmpty(value)) {
+              return false;
+            } else {
+              if (value.includes(',')) {
+                value.split(',').forEach((url: string) => {
+                  return (
+                    !this.endpoints.test(url) && !this.ipv4Rgx.test(url) && !this.ipv6Rgx.test(url)
+                  );
+                });
+              } else {
+                return (
+                  !this.endpoints.test(value) &&
+                  !this.ipv4Rgx.test(value) &&
+                  !this.ipv6Rgx.test(value)
+                );
+              }
+              return false;
+            }
+          }),
+          Validators.required
+        ]
+      }),
+      zonegroup_endpoints: new UntypedFormControl(
+        [],
+        [
+          CdValidators.custom('endpoint', (value: string) => {
+            if (_.isEmpty(value)) {
+              return false;
+            } else {
+              if (value.includes(',')) {
+                value.split(',').forEach((url: string) => {
+                  return (
+                    !this.endpoints.test(url) && !this.ipv4Rgx.test(url) && !this.ipv6Rgx.test(url)
+                  );
+                });
+              } else {
+                return (
+                  !this.endpoints.test(value) &&
+                  !this.ipv4Rgx.test(value) &&
+                  !this.ipv6Rgx.test(value)
+                );
+              }
+              return false;
+            }
+          }),
+          Validators.required
+        ]
+      ),
+      access_key: new UntypedFormControl(null),
+      secret_key: new UntypedFormControl(null)
+    });
+  }
+
+  ngOnInit(): void {
+    this.realmList =
+      this.multisiteInfo[0] !== undefined && this.multisiteInfo[0].hasOwnProperty('realms')
+        ? this.multisiteInfo[0]['realms']
+        : [];
+    this.realmNames = this.realmList.map((realm) => {
+      return realm['name'];
+    });
+    this.zonegroupList =
+      this.multisiteInfo[1] !== undefined && this.multisiteInfo[1].hasOwnProperty('zonegroups')
+        ? this.multisiteInfo[1]['zonegroups']
+        : [];
+    this.zonegroupNames = this.zonegroupList.map((zonegroup) => {
+      return zonegroup['name'];
+    });
+    this.zoneList =
+      this.multisiteInfo[2] !== undefined && this.multisiteInfo[2].hasOwnProperty('zones')
+        ? this.multisiteInfo[2]['zones']
+        : [];
+    this.zoneNames = this.zoneList.map((zone) => {
+      return zone['name'];
+    });
+  }
+
+  submit() {
+    const values = this.multisiteMigrateForm.value;
+    this.realm = new RgwRealm();
+    this.realm.name = values['realmName'];
+    this.zonegroup = new RgwZonegroup();
+    this.zonegroup.name = values['zonegroupName'];
+    this.zonegroup.endpoints = values['zonegroup_endpoints'];
+    this.zone = new RgwZone();
+    this.zone.name = values['zoneName'];
+    this.zone.endpoints = values['zone_endpoints'];
+    this.zone.system_key = new SystemKey();
+    this.zone.system_key.access_key = values['access_key'];
+    this.zone.system_key.secret_key = values['secret_key'];
+    this.rgwMultisiteService.migrate(this.realm, this.zonegroup, this.zone).subscribe(
+      () => {
+        this.notificationService.show(
+          NotificationType.success,
+          $localize`${this.actionLabels.MIGRATE} done successfully`
+        );
+        this.submitAction.emit();
+        this.activeModal.close();
+      },
+      () => {
+        this.notificationService.show(NotificationType.error, $localize`Migration failed`);
+      }
+    );
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.html
new file mode 100644 (file)
index 0000000..0bcf88b
--- /dev/null
@@ -0,0 +1,58 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">{{ action | titlecase }} {{ resource | upperFirst }}</ng-container>
+
+  <ng-container class="modal-content">
+    <form name="multisiteRealmForm"
+          #formDir="ngForm"
+          [formGroup]="multisiteRealmForm"
+          novalidate>
+    <div class="modal-body">
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="realmName"
+               i18n>Realm Name</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Realm name..."
+                 id="realmName"
+                 name="realmName"
+                 formControlName="realmName">
+          <span class="invalid-feedback"
+                *ngIf="multisiteRealmForm.showError('realmName', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteRealmForm.showError('realmName', formDir, 'uniqueName')"
+                i18n>The chosen realm name is already in use.</span>
+          <div class="custom-control custom-checkbox">
+            <input class="form-check-input"
+                   id="default_realm"
+                   name="default_realm"
+                   formControlName="default_realm"
+                   [attr.disabled]="action === 'edit' ? true: null"
+                   type="checkbox">
+            <label class="form-check-label"
+                   for="default_realm"
+                   i18n>Default</label>
+            <cd-helper *ngIf="action === 'edit' && info.data.is_default">
+              <span i18n>You cannot unset the default flag.</span>
+            </cd-helper>
+            <cd-helper *ngIf="action === 'edit' && !info.data.is_default">
+              <span i18n>Please consult the <a href="{{ docUrl }}">documentation</a> to follow the failover mechanism</span>
+            </cd-helper>
+            <cd-helper *ngIf="defaultRealmDisabled && action === 'create'">
+              <span i18n>Default realm already exists.</span>
+            </cd-helper>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="modal-footer">
+      <cd-form-button-panel (submitActionEvent)="submit()"
+                            [form]="multisiteRealmForm"
+                            [submitText]="(action | titlecase) + ' ' + (resource | upperFirst)"></cd-form-button-panel>
+    </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.spec.ts
new file mode 100644 (file)
index 0000000..becb156
--- /dev/null
@@ -0,0 +1,94 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { Router } from '@angular/router';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import _ from 'lodash';
+import { of as observableOf } from 'rxjs';
+import { ToastrModule } from 'ngx-toastr';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { SharedModule } from '~/app/shared/shared.module';
+
+import { RgwMultisiteRealmFormComponent } from './rgw-multisite-realm-form.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwMultisiteRealmFormComponent', () => {
+  let component: RgwMultisiteRealmFormComponent;
+  let fixture: ComponentFixture<RgwMultisiteRealmFormComponent>;
+  let rgwRealmService: RgwRealmService;
+
+  configureTestBed({
+    imports: [
+      SharedModule,
+      ReactiveFormsModule,
+      RouterTestingModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot()
+    ],
+    providers: [NgbActiveModal],
+    declarations: [RgwMultisiteRealmFormComponent]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteRealmFormComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  describe('submit form', () => {
+    let notificationService: NotificationService;
+
+    beforeEach(() => {
+      spyOn(TestBed.inject(Router), 'navigate').and.stub();
+      notificationService = TestBed.inject(NotificationService);
+      spyOn(notificationService, 'show');
+      rgwRealmService = TestBed.inject(RgwRealmService);
+    });
+
+    it('should validate name', () => {
+      component.action = 'create';
+      component.createForm();
+      const control = component.multisiteRealmForm.get('realmName');
+      expect(_.isFunction(control.validator)).toBeTruthy();
+    });
+
+    it('should not validate name', () => {
+      component.action = 'edit';
+      component.createForm();
+      const control = component.multisiteRealmForm.get('realmName');
+      expect(control.asyncValidator).toBeNull();
+    });
+
+    it('tests create success notification', () => {
+      spyOn(rgwRealmService, 'create').and.returnValue(observableOf([]));
+      component.action = 'create';
+      component.multisiteRealmForm.markAsDirty();
+      component.submit();
+      expect(notificationService.show).toHaveBeenCalledWith(
+        NotificationType.success,
+        "Realm: 'null' created successfully"
+      );
+    });
+
+    it('tests update success notification', () => {
+      spyOn(rgwRealmService, 'update').and.returnValue(observableOf([]));
+      component.action = 'edit';
+      component.info = {
+        data: { name: 'null' }
+      };
+      component.multisiteRealmForm.markAsDirty();
+      component.submit();
+      expect(notificationService.show).toHaveBeenCalledWith(
+        NotificationType.success,
+        "Realm: 'null' updated successfully"
+      );
+    });
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-realm-form/rgw-multisite-realm-form.component.ts
new file mode 100644 (file)
index 0000000..20cd203
--- /dev/null
@@ -0,0 +1,131 @@
+import { Component, OnInit } from '@angular/core';
+import { UntypedFormControl, Validators } from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { RgwRealm } from '../models/rgw-multisite';
+import { DocService } from '~/app/shared/services/doc.service';
+
+@Component({
+  selector: 'cd-rgw-multisite-realm-form',
+  templateUrl: './rgw-multisite-realm-form.component.html',
+  styleUrls: ['./rgw-multisite-realm-form.component.scss']
+})
+export class RgwMultisiteRealmFormComponent implements OnInit {
+  action: string;
+  multisiteRealmForm: CdFormGroup;
+  info: any;
+  editing = false;
+  resource: string;
+  multisiteInfo: object[] = [];
+  realm: RgwRealm;
+  realmList: RgwRealm[] = [];
+  zonegroupList: RgwRealm[] = [];
+  realmNames: string[];
+  newRealmName: string;
+  isMaster: boolean;
+  defaultsInfo: string[];
+  defaultRealmDisabled = false;
+  docUrl: string;
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public actionLabels: ActionLabelsI18n,
+    public rgwRealmService: RgwRealmService,
+    public notificationService: NotificationService,
+    public docService: DocService
+  ) {
+    this.action = this.editing
+      ? this.actionLabels.EDIT + this.resource
+      : this.actionLabels.CREATE + this.resource;
+    this.createForm();
+  }
+
+  createForm() {
+    this.multisiteRealmForm = new CdFormGroup({
+      realmName: new UntypedFormControl(null, {
+        validators: [
+          Validators.required,
+          CdValidators.custom('uniqueName', (realmName: string) => {
+            return (
+              this.action === 'create' &&
+              this.realmNames &&
+              this.realmNames.indexOf(realmName) !== -1
+            );
+          })
+        ]
+      }),
+      default_realm: new UntypedFormControl(false)
+    });
+  }
+
+  ngOnInit(): void {
+    this.realmList =
+      this.multisiteInfo[0] !== undefined && this.multisiteInfo[0].hasOwnProperty('realms')
+        ? this.multisiteInfo[0]['realms']
+        : [];
+    this.realmNames = this.realmList.map((realm) => {
+      return realm['name'];
+    });
+    if (this.action === 'edit') {
+      this.zonegroupList =
+        this.multisiteInfo[1] !== undefined && this.multisiteInfo[1].hasOwnProperty('zonegroups')
+          ? this.multisiteInfo[1]['zonegroups']
+          : [];
+      this.multisiteRealmForm.get('realmName').setValue(this.info.data.name);
+      this.multisiteRealmForm.get('default_realm').setValue(this.info.data.is_default);
+      if (this.info.data.is_default) {
+        this.multisiteRealmForm.get('default_realm').disable();
+      }
+    }
+    this.zonegroupList.forEach((zgp: any) => {
+      if (zgp.is_master === true && zgp.realm_id === this.info.data.id) {
+        this.isMaster = true;
+      }
+    });
+    if (this.defaultsInfo && this.defaultsInfo['defaultRealmName'] !== null) {
+      this.multisiteRealmForm.get('default_realm').disable();
+      this.defaultRealmDisabled = true;
+    }
+    this.docUrl = this.docService.urlGenerator('rgw-multisite');
+  }
+
+  submit() {
+    const values = this.multisiteRealmForm.getRawValue();
+    this.realm = new RgwRealm();
+    if (this.action === 'create') {
+      this.realm.name = values['realmName'];
+      this.rgwRealmService.create(this.realm, values['default_realm']).subscribe(
+        () => {
+          this.notificationService.show(
+            NotificationType.success,
+            $localize`Realm: '${values['realmName']}' created successfully`
+          );
+          this.activeModal.close();
+        },
+        () => {
+          this.multisiteRealmForm.setErrors({ cdSubmitButton: true });
+        }
+      );
+    } else if (this.action === 'edit') {
+      this.realm.name = this.info.data.name;
+      this.newRealmName = values['realmName'];
+      this.rgwRealmService.update(this.realm, values['default_realm'], this.newRealmName).subscribe(
+        () => {
+          this.notificationService.show(
+            NotificationType.success,
+            $localize`Realm: '${values['realmName']}' updated successfully`
+          );
+          this.activeModal.close();
+        },
+        () => {
+          this.multisiteRealmForm.setErrors({ cdSubmitButton: true });
+        }
+      );
+    }
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.html
new file mode 100644 (file)
index 0000000..3856c42
--- /dev/null
@@ -0,0 +1,283 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">{{ action | titlecase }} {{ resource | upperFirst }}</ng-container>
+
+  <ng-container class="modal-content">
+    <form name="multisiteZoneForm"
+          #formDir="ngForm"
+          [formGroup]="multisiteZoneForm"
+          novalidate>
+    <div class="modal-body">
+      <div class="form-group row">
+        <label class="cd-col-form-label"
+               for="selectedZonegroup"
+               i18n>Select Zone Group</label>
+        <div class="cd-col-form-input">
+          <select class="form-select"
+                  id="selectedZonegroup"
+                  [attr.disabled]="action === 'edit' ? true : null"
+                  formControlName="selectedZonegroup"
+                  name="selectedZonegroup"
+                  (change)="onZoneGroupChange($event.target.value)">
+            <option *ngFor="let zonegroupName of zonegroupList"
+                    [value]="zonegroupName.name"
+                    [selected]="zonegroupName.name === multisiteZoneForm.getValue('selectedZonegroup')">
+            {{ zonegroupName.name }}
+            </option>
+          </select>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zonegroupName"
+               i18n>Zone Name</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Zone name..."
+                 id="zoneName"
+                 name="zoneName"
+                 formControlName="zoneName">
+          <span class="invalid-feedback"
+                *ngIf="multisiteZoneForm.showError('zoneName', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteZoneForm.showError('zoneName', formDir, 'uniqueName')"
+                i18n>The chosen zone name is already in use.</span>
+          <div class="custom-control custom-checkbox">
+            <input class="form-check-input"
+                   id="default_zone"
+                   name="default_zone"
+                   formControlName="default_zone"
+                   [attr.disabled]="action === 'edit' ? true : null"
+                   type="checkbox">
+            <label class="form-check-label"
+                   for="default_zone"
+                   i18n>Default</label>
+            <span *ngIf="disableDefault && action === 'create'">
+              <cd-helper i18n>Default zone can only exist in a default zone group.
+              </cd-helper>
+            </span>
+            <span *ngIf="isDefaultZone">
+              <cd-helper i18n>You cannot unset the default flag.
+              </cd-helper>
+            </span>
+            <cd-helper *ngIf="action === 'edit' && !isDefaultZone">
+              <span i18n>Please consult the <a href="{{ docUrl }}">documentation</a> to follow the failover mechanism</span>
+            </cd-helper><br>
+          </div>
+          <div class="custom-control custom-checkbox">
+            <input class="form-check-input"
+                   id="master_zone"
+                   name="master_zone"
+                   formControlName="master_zone"
+                   [attr.disabled]="action === 'edit' ? true : null"
+                   type="checkbox">
+            <label class="form-check-label"
+                   for="master_zone"
+                   i18n>Master</label>
+            <span *ngIf="disableMaster">
+              <cd-helper i18n>Master zone already exists for the selected zone group.
+              </cd-helper>
+            </span>
+            <span *ngIf="isMasterZone">
+              <cd-helper i18n>You cannot unset the master flag.
+              </cd-helper>
+            </span>
+            <cd-helper *ngIf="action === 'edit' && !isMasterZone">
+              <span i18n>Please consult the <a href="{{ docUrl }}">documentation</a> to follow the failover mechanism</span>
+            </cd-helper>
+          </div>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zone_endpoints"
+               i18n>Endpoints</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="e.g, http://ceph-node-00.com:80"
+                 id="zone_endpoints"
+                 name="zone_endpoints"
+                 formControlName="zone_endpoints">
+          <span class="invalid-feedback"
+                *ngIf="multisiteZoneForm.showError('zone_endpoints', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteZoneForm.showError('zone_endpoints', formDir, 'endpoint')"
+                i18n>Please enter a valid IP address.</span>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="access_key"
+               i18n>S3 access key
+          <cd-helper>
+            <span>To see or copy your S3 access key, go to <b>Object Gateway > Users</b> and click on your user name. In <b>Keys</b>, click <b>Show</b>. View the access key by clicking Show and copy the key by clicking <b>Copy to Clipboard</b>.</span>
+          </cd-helper>
+        </label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="DiPt4V7WWvy2njL1z6aC"
+                 id="access_key"
+                 name="access_key"
+                 formControlName="access_key">
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="access_key"
+               i18n>S3 secret key
+          <cd-helper>
+            <span>To see or copy your S3 access key, go to <b>Object Gateway > Users</b> and click on your user name. In <b>Keys</b>, click <b>Show</b>. View the secret key by clicking Show and copy the key by clicking <b>Copy to Clipboard</b>.</span>
+          </cd-helper>
+        </label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="xSZUdYky0bTctAdCEEW8ikhfBVKsBV5LFYL82vvh"
+                 id="secret_key"
+                 name="secret_key"
+                 formControlName="secret_key">
+        </div>
+      </div>
+      <div class="form-group row"
+           *ngIf="action === 'edit'">
+        <div *ngIf="action === 'edit'">
+          <legend>Placement Targets</legend>
+          <div class="form-group row">
+            <label class="cd-col-form-label"
+                   for="placementTarget"
+                   i18n>Placement target</label>
+            <div class="cd-col-form-input">
+              <select class="form-select"
+                      id="placementTarget"
+                      formControlName="placementTarget"
+                      name="placementTarget"
+                      (change)="getZonePlacementData($event.target.value)">
+                <option *ngFor="let placement of placementTargets"
+                        [value]="placement.name"
+                        [selected]="placement.name === multisiteZoneForm.getValue('placementTarget')">
+                {{ placement.name }}
+                </option>
+              </select>
+            </div>
+          </div>
+          <div class="form-group row">
+            <label class="cd-col-form-label"
+                   for="placementDataPool"
+                   i18n>Data pool</label>
+            <div class="cd-col-form-input">
+              <select class="form-select"
+                      id="placementDataPool"
+                      formControlName="placementDataPool"
+                      [value]="placementDataPool"
+                      name="placementDataPool">
+                <option *ngFor="let pool of poolList"
+                        [value]="pool.poolname"
+                        [selected]="pool.poolname === multisiteZoneForm.getValue('placementDataPool')">
+                {{ pool.poolname }}
+                </option>
+              </select>
+            </div>
+          </div>
+          <div class="form-group row">
+            <label class="cd-col-form-label"
+                   for="placementIndexPool"
+                   i18n>Index pool</label>
+            <div class="cd-col-form-input">
+              <select class="form-select"
+                      id="placementIndexPool"
+                      formControlName="placementIndexPool"
+                      name="placementIndexPool">
+                <option *ngFor="let pool of poolList"
+                        [value]="pool.poolname"
+                        [selected]="pool.poolname === multisiteZoneForm.getValue('placementIndexPool')">
+                {{ pool.poolname }}
+                </option>
+              </select>
+            </div>
+          </div>
+          <div class="form-group row">
+            <label class="cd-col-form-label"
+                   for="placementDataExtraPool"
+                   i18n>Data extra pool</label>
+            <div class="cd-col-form-input">
+              <select class="form-select"
+                      id="placementDataExtraPool"
+                      formControlName="placementDataExtraPool"
+                      name="placementDataExtraPool">
+                <option *ngFor="let pool of poolList"
+                        [value]="pool.poolname"
+                        [selected]="pool.poolname === multisiteZoneForm.getValue('placementDataExtraPool')">
+                {{ pool.poolname }}
+                </option>
+              </select>
+            </div>
+          </div>
+          <div>
+            <legend>Storage Classes</legend>
+            <div class="form-group row">
+              <label class="cd-col-form-label"
+                     for="storageClass"
+                     i18n>Storage Class</label>
+              <div class="cd-col-form-input">
+                <select class="form-select"
+                        id="storageClass"
+                        formControlName="storageClass"
+                        (change)="getStorageClassData($event.target.value)"
+                        name="storageClass">
+                  <option *ngFor="let str of storageClassList"
+                          [value]="str.value">
+                  {{ str.value }}
+                  </option>
+                </select>
+              </div>
+            </div>
+            <div class="form-group row">
+              <label class="cd-col-form-label"
+                     for="storageDataPool"
+                     i18n>Data pool</label>
+              <div class="cd-col-form-input">
+                <select class="form-select"
+                        id="storageDataPool"
+                        formControlName="storageDataPool"
+                        name="storageDataPool">
+                  <option *ngFor="let pool of poolList"
+                          [value]="pool.poolname"
+                          [selected]="pool.poolname === multisiteZoneForm.getValue('storageDataPool')">
+                  {{ pool.poolname }}
+                  </option>
+                </select>
+              </div>
+            </div>
+            <div class="form-group row">
+              <label class="cd-col-form-label"
+                     for="storageCompression"
+                     i18n>Compression</label>
+              <div class="cd-col-form-input">
+                <select class="form-select"
+                        id="storageCompression"
+                        formControlName="storageCompression"
+                        name="storageCompression">
+                  <option *ngFor="let compression of compressionTypes"
+                          [value]="compression">
+                  {{ compression }}
+                  </option>
+                </select>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="modal-footer">
+      <cd-form-button-panel (submitActionEvent)="submit()"
+                            [form]="multisiteZoneForm"
+                            [submitText]="(action | titlecase) + ' ' + (resource | upperFirst)"></cd-form-button-panel>
+    </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.spec.ts
new file mode 100644 (file)
index 0000000..e9da2f4
--- /dev/null
@@ -0,0 +1,37 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+
+import { RgwMultisiteZoneFormComponent } from './rgw-multisite-zone-form.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwMultisiteZoneFormComponent', () => {
+  let component: RgwMultisiteZoneFormComponent;
+  let fixture: ComponentFixture<RgwMultisiteZoneFormComponent>;
+
+  configureTestBed({
+    imports: [
+      SharedModule,
+      ReactiveFormsModule,
+      RouterTestingModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot()
+    ],
+    providers: [NgbActiveModal],
+    declarations: [RgwMultisiteZoneFormComponent]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteZoneFormComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zone-form/rgw-multisite-zone-form.component.ts
new file mode 100644 (file)
index 0000000..76e2970
--- /dev/null
@@ -0,0 +1,328 @@
+import { Component, OnInit } from '@angular/core';
+import { UntypedFormControl, Validators } from '@angular/forms';
+import { NgbActiveModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap';
+import _ from 'lodash';
+import { RgwMultisiteService } from '~/app/shared/api/rgw-multisite.service';
+import { RgwUserService } from '~/app/shared/api/rgw-user.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { RgwRealm, RgwZone, RgwZonegroup, SystemKey } from '../models/rgw-multisite';
+import { ModalService } from '~/app/shared/services/modal.service';
+
+@Component({
+  selector: 'cd-rgw-multisite-zone-form',
+  templateUrl: './rgw-multisite-zone-form.component.html',
+  styleUrls: ['./rgw-multisite-zone-form.component.scss']
+})
+export class RgwMultisiteZoneFormComponent implements OnInit {
+  readonly endpoints = /^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{2,4}$/;
+  readonly ipv4Rgx = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i;
+  readonly ipv6Rgx = /^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i;
+  action: string;
+  info: any;
+  multisiteZoneForm: CdFormGroup;
+  editing = false;
+  resource: string;
+  realm: RgwRealm;
+  zonegroup: RgwZonegroup;
+  zone: RgwZone;
+  defaultsInfo: string[] = [];
+  multisiteInfo: object[] = [];
+  zonegroupList: RgwZonegroup[] = [];
+  zoneList: RgwZone[] = [];
+  zoneNames: string[];
+  users: any;
+  placementTargets: any;
+  zoneInfo: RgwZone;
+  poolList: object[] = [];
+  storageClassList: object[] = [];
+  disableDefault: boolean = false;
+  disableMaster: boolean = false;
+  isMetadataSync: boolean = false;
+  isMasterZone: boolean;
+  isDefaultZone: boolean;
+  syncStatusTimedOut: boolean = false;
+  bsModalRef: NgbModalRef;
+  createSystemUser: boolean = false;
+  master_zone_of_master_zonegroup: RgwZone;
+  masterZoneUser: any;
+  access_key: any;
+  master_zonegroup_of_realm: RgwZonegroup;
+  compressionTypes = ['lz4', 'zlib', 'snappy'];
+  userListReady: boolean = false;
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public actionLabels: ActionLabelsI18n,
+    public rgwMultisiteService: RgwMultisiteService,
+    public rgwZoneService: RgwZoneService,
+    public rgwZoneGroupService: RgwZonegroupService,
+    public notificationService: NotificationService,
+    public rgwUserService: RgwUserService,
+    public modalService: ModalService
+  ) {
+    this.action = this.editing
+      ? this.actionLabels.EDIT + this.resource
+      : this.actionLabels.CREATE + this.resource;
+    this.createForm();
+  }
+
+  createForm() {
+    this.multisiteZoneForm = new CdFormGroup({
+      zoneName: new UntypedFormControl(null, {
+        validators: [
+          Validators.required,
+          CdValidators.custom('uniqueName', (zoneName: string) => {
+            return (
+              this.action === 'create' && this.zoneNames && this.zoneNames.indexOf(zoneName) !== -1
+            );
+          })
+        ]
+      }),
+      default_zone: new UntypedFormControl(false),
+      master_zone: new UntypedFormControl(false),
+      selectedZonegroup: new UntypedFormControl(null),
+      zone_endpoints: new UntypedFormControl(null, {
+        validators: [
+          CdValidators.custom('endpoint', (value: string) => {
+            if (_.isEmpty(value)) {
+              return false;
+            } else {
+              if (value.includes(',')) {
+                value.split(',').forEach((url: string) => {
+                  return (
+                    !this.endpoints.test(url) && !this.ipv4Rgx.test(url) && !this.ipv6Rgx.test(url)
+                  );
+                });
+              } else {
+                return (
+                  !this.endpoints.test(value) &&
+                  !this.ipv4Rgx.test(value) &&
+                  !this.ipv6Rgx.test(value)
+                );
+              }
+              return false;
+            }
+          }),
+          Validators.required
+        ]
+      }),
+      access_key: new UntypedFormControl(null, Validators.required),
+      secret_key: new UntypedFormControl(null, Validators.required),
+      placementTarget: new UntypedFormControl(null),
+      placementDataPool: new UntypedFormControl(''),
+      placementIndexPool: new UntypedFormControl(null),
+      placementDataExtraPool: new UntypedFormControl(null),
+      storageClass: new UntypedFormControl(null),
+      storageDataPool: new UntypedFormControl(null),
+      storageCompression: new UntypedFormControl(null)
+    });
+  }
+
+  onZoneGroupChange(zonegroupName: string) {
+    let zg = new RgwZonegroup();
+    zg.name = zonegroupName;
+    this.rgwZoneGroupService.get(zg).subscribe((zonegroup: RgwZonegroup) => {
+      if (_.isEmpty(zonegroup.master_zone)) {
+        this.multisiteZoneForm.get('master_zone').setValue(true);
+        this.multisiteZoneForm.get('master_zone').disable();
+        this.disableMaster = false;
+      } else if (!_.isEmpty(zonegroup.master_zone) && this.action === 'create') {
+        this.multisiteZoneForm.get('master_zone').setValue(false);
+        this.multisiteZoneForm.get('master_zone').disable();
+        this.disableMaster = true;
+      }
+    });
+    if (
+      this.multisiteZoneForm.getValue('selectedZonegroup') !==
+      this.defaultsInfo['defaultZonegroupName']
+    ) {
+      this.disableDefault = true;
+      this.multisiteZoneForm.get('default_zone').disable();
+    }
+  }
+
+  ngOnInit(): void {
+    this.zonegroupList =
+      this.multisiteInfo[1] !== undefined && this.multisiteInfo[1].hasOwnProperty('zonegroups')
+        ? this.multisiteInfo[1]['zonegroups']
+        : [];
+    this.zoneList =
+      this.multisiteInfo[2] !== undefined && this.multisiteInfo[2].hasOwnProperty('zones')
+        ? this.multisiteInfo[2]['zones']
+        : [];
+    this.zoneNames = this.zoneList.map((zone) => {
+      return zone['name'];
+    });
+    if (this.action === 'create') {
+      if (this.defaultsInfo['defaultZonegroupName'] !== undefined) {
+        this.multisiteZoneForm
+          .get('selectedZonegroup')
+          .setValue(this.defaultsInfo['defaultZonegroupName']);
+        this.onZoneGroupChange(this.defaultsInfo['defaultZonegroupName']);
+      }
+    }
+    if (this.action === 'edit') {
+      this.placementTargets = this.info.parent ? this.info.parent.data.placement_targets : [];
+      this.rgwZoneService.getPoolNames().subscribe((pools: object[]) => {
+        this.poolList = pools;
+      });
+      this.multisiteZoneForm.get('zoneName').setValue(this.info.data.name);
+      this.multisiteZoneForm.get('selectedZonegroup').setValue(this.info.data.parent);
+      this.multisiteZoneForm.get('default_zone').setValue(this.info.data.is_default);
+      this.multisiteZoneForm.get('master_zone').setValue(this.info.data.is_master);
+      this.multisiteZoneForm.get('zone_endpoints').setValue(this.info.data.endpoints.toString());
+      this.multisiteZoneForm.get('access_key').setValue(this.info.data.access_key);
+      this.multisiteZoneForm.get('secret_key').setValue(this.info.data.secret_key);
+      this.multisiteZoneForm
+        .get('placementTarget')
+        .setValue(this.info.parent.data.default_placement);
+      this.getZonePlacementData(this.multisiteZoneForm.getValue('placementTarget'));
+      if (this.info.data.is_default) {
+        this.isDefaultZone = true;
+        this.multisiteZoneForm.get('default_zone').disable();
+      }
+      if (this.info.data.is_master) {
+        this.isMasterZone = true;
+        this.multisiteZoneForm.get('master_zone').disable();
+      }
+      const zone = new RgwZone();
+      zone.name = this.info.data.name;
+      this.onZoneGroupChange(this.info.data.parent);
+    }
+    if (
+      this.multisiteZoneForm.getValue('selectedZonegroup') !==
+      this.defaultsInfo['defaultZonegroupName']
+    ) {
+      this.disableDefault = true;
+      this.multisiteZoneForm.get('default_zone').disable();
+    }
+  }
+
+  getZonePlacementData(placementTarget: string) {
+    this.zone = new RgwZone();
+    this.zone.name = this.info.data.name;
+    if (this.placementTargets) {
+      this.placementTargets.forEach((placement: any) => {
+        if (placement.name === placementTarget) {
+          let storageClasses = placement.storage_classes;
+          this.storageClassList = Object.entries(storageClasses).map(([key, value]) => ({
+            key,
+            value
+          }));
+        }
+      });
+    }
+    this.rgwZoneService.get(this.zone).subscribe((zoneInfo: RgwZone) => {
+      this.zoneInfo = zoneInfo;
+      if (this.zoneInfo && this.zoneInfo['placement_pools']) {
+        this.zoneInfo['placement_pools'].forEach((plc_pool) => {
+          if (plc_pool.key === placementTarget) {
+            let storageClasses = plc_pool.val.storage_classes;
+            let placementDataPool = storageClasses['STANDARD']
+              ? storageClasses['STANDARD']['data_pool']
+              : '';
+            let placementIndexPool = plc_pool.val.index_pool;
+            let placementDataExtraPool = plc_pool.val.data_extra_pool;
+            this.poolList.push({ poolname: placementDataPool });
+            this.poolList.push({ poolname: placementIndexPool });
+            this.poolList.push({ poolname: placementDataExtraPool });
+            this.multisiteZoneForm.get('storageClass').setValue(this.storageClassList[0]['value']);
+            this.multisiteZoneForm.get('storageDataPool').setValue(placementDataPool);
+            this.multisiteZoneForm.get('storageCompression').setValue(this.compressionTypes[0]);
+            this.multisiteZoneForm.get('placementDataPool').setValue(placementDataPool);
+            this.multisiteZoneForm.get('placementIndexPool').setValue(placementIndexPool);
+            this.multisiteZoneForm.get('placementDataExtraPool').setValue(placementDataExtraPool);
+          }
+        });
+      }
+    });
+  }
+
+  getStorageClassData(storageClass: string) {
+    let storageClassSelected = this.storageClassList.find((x) => x['value'] == storageClass)[
+      'value'
+    ];
+    this.poolList.push({ poolname: storageClassSelected.data_pool });
+    this.multisiteZoneForm.get('storageDataPool').setValue(storageClassSelected.data_pool);
+    this.multisiteZoneForm
+      .get('storageCompression')
+      .setValue(storageClassSelected.compression_type);
+  }
+
+  submit() {
+    const values = this.multisiteZoneForm.getRawValue();
+    if (this.action === 'create') {
+      this.zonegroup = new RgwZonegroup();
+      this.zonegroup.name = values['selectedZonegroup'];
+      this.zone = new RgwZone();
+      this.zone.name = values['zoneName'];
+      this.zone.endpoints = values['zone_endpoints'];
+      this.zone.system_key = new SystemKey();
+      this.zone.system_key.access_key = values['access_key'];
+      this.zone.system_key.secret_key = values['secret_key'];
+      this.rgwZoneService
+        .create(
+          this.zone,
+          this.zonegroup,
+          values['default_zone'],
+          values['master_zone'],
+          this.zone.endpoints
+        )
+        .subscribe(
+          () => {
+            this.notificationService.show(
+              NotificationType.success,
+              $localize`Zone: '${values['zoneName']}' created successfully`
+            );
+            this.activeModal.close();
+          },
+          () => {
+            this.multisiteZoneForm.setErrors({ cdSubmitButton: true });
+          }
+        );
+    } else if (this.action === 'edit') {
+      this.zonegroup = new RgwZonegroup();
+      this.zonegroup.name = values['selectedZonegroup'];
+      this.zone = new RgwZone();
+      this.zone.name = this.info.data.name;
+      this.zone.endpoints = values['zone_endpoints'];
+      this.zone.system_key = new SystemKey();
+      this.zone.system_key.access_key = values['access_key'];
+      this.zone.system_key.secret_key = values['secret_key'];
+      this.rgwZoneService
+        .update(
+          this.zone,
+          this.zonegroup,
+          values['zoneName'],
+          values['default_zone'],
+          values['master_zone'],
+          this.zone.endpoints,
+          values['placementTarget'],
+          values['placementDataPool'],
+          values['placementIndexPool'],
+          values['placementDataExtraPool'],
+          values['storageClass'],
+          values['storageDataPool'],
+          values['storageCompression']
+        )
+        .subscribe(
+          () => {
+            this.notificationService.show(
+              NotificationType.success,
+              $localize`Zone: '${values['zoneName']}' updated successfully`
+            );
+            this.activeModal.close();
+          },
+          () => {
+            this.multisiteZoneForm.setErrors({ cdSubmitButton: true });
+          }
+        );
+    }
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.html
new file mode 100644 (file)
index 0000000..88f8bcb
--- /dev/null
@@ -0,0 +1,205 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">{{ action | titlecase }} Zone Group</ng-container>
+
+  <ng-container class="modal-content">
+    <form name="multisiteZonegroupForm"
+          #formDir="ngForm"
+          [formGroup]="multisiteZonegroupForm"
+          novalidate>
+    <div class="modal-body">
+      <div class="form-group row">
+        <label class="cd-col-form-label"
+               for="selectedRealm"
+               i18n>Select Realm</label>
+        <div class="cd-col-form-input">
+          <select class="form-select"
+                  id="selectedRealm"
+                  formControlName="selectedRealm"
+                  name="selectedRealm">
+          <option ngValue=""
+                  i18n>-- Select a realm --</option>
+          <option *ngFor="let realmName of realmList"
+                  [value]="realmName.name"
+                  [selected]="realmName.name === multisiteZonegroupForm.getValue('selectedRealm')">
+                {{ realmName.name }}
+          </option>
+          </select>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zonegroupName"
+               i18n>Zone Group Name</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="Zone group name..."
+                 id="zonegroupName"
+                 name="zonegroupName"
+                 formControlName="zonegroupName">
+          <span class="invalid-feedback"
+                *ngIf="multisiteZonegroupForm.showError('zonegroupName', formDir, 'required')"
+                i18n>This field is required.</span>
+          <span class="invalid-feedback"
+                *ngIf="multisiteZonegroupForm.showError('zonegroupName', formDir, 'uniqueName')"
+                i18n>The chosen zone group name is already in use.</span>
+        <div class="custom-control custom-checkbox">
+          <input class="form-check-input"
+                 id="default_zonegroup"
+                 name="default_zonegroup"
+                 formControlName="default_zonegroup"
+                 [attr.disabled]="action === 'edit' ? true : null"
+                 type="checkbox">
+          <label class="form-check-label"
+                 for="default_zonegroup"
+                 i18n>Default</label>
+          <span *ngIf="disableDefault && action === 'create'">
+            <cd-helper i18n>Zone group doesn't belong to the default realm.</cd-helper>
+          </span>
+          <cd-helper *ngIf="action === 'edit' && !info.data.is_default">
+            <span i18n>Please consult the <a href="{{ docUrl }}">documentation</a> to follow the failover mechanism</span>
+          </cd-helper>
+          <cd-helper *ngIf="action === 'edit' && info.data.is_default">
+            <span i18n>You cannot unset the default flag.</span>
+          </cd-helper><br>
+          <input class="form-check-input"
+                 id="master_zonegroup"
+                 name="master_zonegroup"
+                 formControlName="master_zonegroup"
+                 [attr.disabled]="action === 'edit' ? true : null"
+                 type="checkbox">
+          <label class="form-check-label"
+                 for="master_zonegroup"
+                 i18n>Master</label>
+          <span *ngIf="disableMaster && action === 'create'">
+            <cd-helper i18n>Multiple master zone groups can't be configured. If you want to create a new zone group and make it the master zone group, you must delete the default zone group.</cd-helper>
+          </span>
+          <cd-helper *ngIf="action === 'edit' && !info.data.is_master">
+            <span i18n>Please consult the <a href="{{ docUrl }}">documentation</a> to follow the failover mechanism</span>
+          </cd-helper>
+          <cd-helper *ngIf="action === 'edit' && info.data.is_master">
+            <span i18n>You cannot unset the master flag.</span>
+          </cd-helper>
+        </div>
+        </div>
+      </div>
+      <div class="form-group row">
+        <label class="cd-col-form-label required"
+               for="zonegroup_endpoints"
+               i18n>Endpoints</label>
+        <div class="cd-col-form-input">
+          <input class="form-control"
+                 type="text"
+                 placeholder="e.g, http://ceph-node-00.com:80"
+                 id="zonegroup_endpoints"
+                 name="zonegroup_endpoints"
+                 formControlName="zonegroup_endpoints">
+        <span class="invalid-feedback"
+              *ngIf="multisiteZonegroupForm.showError('zonegroup_endpoints', formDir, 'required')"
+              i18n>This field is required.</span>
+        <span class="invalid-feedback"
+              *ngIf="multisiteZonegroupForm.showError('zonegroup_endpoints', formDir, 'endpoint')"
+              i18n>Please enter a valid IP address.</span>
+        </div>
+      </div>
+      <div class="form-group row"
+           *ngIf="action === 'edit'">
+        <label i18n
+               for="zones"
+               class="cd-col-form-label">Zones</label>
+        <div class="cd-col-form-input">
+          <cd-select-badges id="zones"
+                            [data]="zonegroupZoneNames"
+                            [options]="labelsOption"
+                            [customBadges]="true">
+          </cd-select-badges><br>
+          <span class="invalid-feedback"
+                *ngIf="isRemoveMasterZone"
+                i18n>Cannot remove master zone.</span>
+        </div>
+      </div>
+      <div *ngIf="action === 'edit'">
+        <legend>Placement targets</legend>
+        <ng-container formArrayName="placementTargets">
+          <div *ngFor="let item of placementTargets.controls; let index = index; trackBy: trackByFn">
+            <div class="card"
+                 [formGroup]="item">
+              <div class="card-header">
+                {{ (index + 1) | ordinal }}
+                <span class="float-end clickable"
+                      name="remove_placement_target"
+                      (click)="removePlacementTarget(index)"
+                      ngbTooltip="Remove">&times;</span>
+              </div>
+
+              <div class="card-body">
+                <!-- Placement Id -->
+                <div class="form-group row">
+                  <label i18n
+                         class="cd-col-form-label required"
+                         for="placement_id">Placement Id</label>
+                  <div class="cd-col-form-input">
+                    <input type="text"
+                           class="form-control"
+                           name="placement_id"
+                           id="placement_id"
+                           formControlName="placement_id"
+                           placeholder="eg. default-placement">
+                    <span class="invalid-feedback">
+                      <span *ngIf="showError(index, 'placement_id', formDir, 'required')"
+                            i18n>This field is required.</span>
+                    </span>
+                  </div>
+                </div>
+
+                <!-- Tags-->
+                <div class="form-group row">
+                  <label i18n
+                         class="cd-col-form-label"
+                         for="tags">Tags</label>
+                  <div class="cd-col-form-input">
+                    <input type="text"
+                           class="form-control"
+                           name="tags"
+                           id="tags"
+                           formControlName="tags"
+                           placeholder="comma separated tags, eg. default-placement, ssd">
+                  </div>
+                </div>
+
+                <!-- Storage Class -->
+                <div class="form-group row">
+                  <label i18n
+                         class="cd-col-form-label"
+                         for="storage_class">Storage Class</label>
+                  <div class="cd-col-form-input">
+                    <input type="text"
+                           class="form-control"
+                           name="storage_class"
+                           id="storage_class"
+                           formControlName="storage_class"
+                           placeholder="eg. Standard-tier">
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </ng-container>
+        <button type="button"
+                id="add-plc"
+                class="btn btn-light float-end my-3"
+                (click)="addPlacementTarget()">
+          <i [ngClass]="[icons.add]"></i>
+          <ng-container i18n>Add placement target</ng-container>
+        </button>
+      </div>
+    </div>
+    <div class="modal-footer">
+      <cd-form-button-panel (submitActionEvent)="submit()"
+                            [form]="multisiteZonegroupForm"
+                            [submitText]="(action | titlecase) + ' ' + 'Zone Group'"></cd-form-button-panel>
+    </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.spec.ts
new file mode 100644 (file)
index 0000000..6fbdf09
--- /dev/null
@@ -0,0 +1,102 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { Router } from '@angular/router';
+import { RouterTestingModule } from '@angular/router/testing';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import _ from 'lodash';
+import { ToastrModule } from 'ngx-toastr';
+import { of as observableOf } from 'rxjs';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { SharedModule } from '~/app/shared/shared.module';
+
+import { RgwMultisiteZonegroupFormComponent } from './rgw-multisite-zonegroup-form.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwMultisiteZonegroupFormComponent', () => {
+  let component: RgwMultisiteZonegroupFormComponent;
+  let fixture: ComponentFixture<RgwMultisiteZonegroupFormComponent>;
+  let rgwZonegroupService: RgwZonegroupService;
+
+  configureTestBed({
+    imports: [
+      SharedModule,
+      ReactiveFormsModule,
+      RouterTestingModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot()
+    ],
+    providers: [NgbActiveModal],
+    declarations: [RgwMultisiteZonegroupFormComponent]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwMultisiteZonegroupFormComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  describe('submit form', () => {
+    let notificationService: NotificationService;
+
+    beforeEach(() => {
+      spyOn(TestBed.inject(Router), 'navigate').and.stub();
+      notificationService = TestBed.inject(NotificationService);
+      spyOn(notificationService, 'show');
+      rgwZonegroupService = TestBed.inject(RgwZonegroupService);
+    });
+
+    it('should validate name', () => {
+      component.action = 'create';
+      component.createForm();
+      const control = component.multisiteZonegroupForm.get('zonegroupName');
+      expect(_.isFunction(control.validator)).toBeTruthy();
+    });
+
+    it('should not validate name', () => {
+      component.action = 'edit';
+      component.createForm();
+      const control = component.multisiteZonegroupForm.get('zonegroupName');
+      expect(control.asyncValidator).toBeNull();
+    });
+
+    it('tests create success notification', () => {
+      spyOn(rgwZonegroupService, 'create').and.returnValue(observableOf([]));
+      component.action = 'create';
+      component.multisiteZonegroupForm.markAsDirty();
+      component.multisiteZonegroupForm._get('zonegroupName').setValue('zg-1');
+      component.multisiteZonegroupForm
+        ._get('zonegroup_endpoints')
+        .setValue('http://192.1.1.1:8004');
+      component.submit();
+      expect(notificationService.show).toHaveBeenCalledWith(
+        NotificationType.success,
+        "Zonegroup: 'zg-1' created successfully"
+      );
+    });
+
+    it('tests update success notification', () => {
+      spyOn(rgwZonegroupService, 'update').and.returnValue(observableOf([]));
+      component.action = 'edit';
+      component.info = {
+        data: { name: 'zg-1', zones: ['z1'] }
+      };
+      component.multisiteZonegroupForm._get('zonegroupName').setValue('zg-1');
+      component.multisiteZonegroupForm
+        ._get('zonegroup_endpoints')
+        .setValue('http://192.1.1.1:8004,http://192.12.12.12:8004');
+      component.multisiteZonegroupForm.markAsDirty();
+      component.submit();
+      expect(notificationService.show).toHaveBeenCalledWith(
+        NotificationType.success,
+        "Zonegroup: 'zg-1' updated successfully"
+      );
+    });
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component.ts
new file mode 100644 (file)
index 0000000..bf1054e
--- /dev/null
@@ -0,0 +1,313 @@
+import { Component, OnInit } from '@angular/core';
+import {
+  UntypedFormArray,
+  UntypedFormBuilder,
+  UntypedFormControl,
+  NgForm,
+  Validators
+} from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import _ from 'lodash';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { CdValidators } from '~/app/shared/forms/cd-validators';
+import { NotificationService } from '~/app/shared/services/notification.service';
+import { RgwRealm, RgwZone, RgwZonegroup } from '../models/rgw-multisite';
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { SelectOption } from '~/app/shared/components/select/select-option.model';
+
+@Component({
+  selector: 'cd-rgw-multisite-zonegroup-form',
+  templateUrl: './rgw-multisite-zonegroup-form.component.html',
+  styleUrls: ['./rgw-multisite-zonegroup-form.component.scss']
+})
+export class RgwMultisiteZonegroupFormComponent implements OnInit {
+  readonly endpoints = /^((https?:\/\/)|(www.))(?:([a-zA-Z]+)|(\d+\.\d+.\d+.\d+)):\d{2,4}$/;
+  readonly ipv4Rgx = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i;
+  readonly ipv6Rgx = /^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i;
+  action: string;
+  icons = Icons;
+  multisiteZonegroupForm: CdFormGroup;
+  editing = false;
+  resource: string;
+  realm: RgwRealm;
+  zonegroup: RgwZonegroup;
+  info: any;
+  defaultsInfo: string[] = [];
+  multisiteInfo: object[] = [];
+  realmList: RgwRealm[] = [];
+  zonegroupList: RgwZonegroup[] = [];
+  zonegroupNames: string[];
+  isMaster = false;
+  placementTargets: UntypedFormArray;
+  newZonegroupName: string;
+  zonegroupZoneNames: string[];
+  labelsOption: Array<SelectOption> = [];
+  zoneList: RgwZone[] = [];
+  allZoneNames: string[];
+  zgZoneNames: string[];
+  zgZoneIds: string[];
+  removedZones: string[];
+  isRemoveMasterZone = false;
+  addedZones: string[];
+  disableDefault = false;
+  disableMaster = false;
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public actionLabels: ActionLabelsI18n,
+    public rgwZonegroupService: RgwZonegroupService,
+    public notificationService: NotificationService,
+    private formBuilder: UntypedFormBuilder
+  ) {
+    this.action = this.editing
+      ? this.actionLabels.EDIT + this.resource
+      : this.actionLabels.CREATE + this.resource;
+    this.createForm();
+  }
+
+  createForm() {
+    this.multisiteZonegroupForm = new CdFormGroup({
+      default_zonegroup: new UntypedFormControl(false),
+      zonegroupName: new UntypedFormControl(null, {
+        validators: [
+          Validators.required,
+          CdValidators.custom('uniqueName', (zonegroupName: string) => {
+            return (
+              this.action === 'create' &&
+              this.zonegroupNames &&
+              this.zonegroupNames.indexOf(zonegroupName) !== -1
+            );
+          })
+        ]
+      }),
+      master_zonegroup: new UntypedFormControl(false),
+      selectedRealm: new UntypedFormControl(null),
+      zonegroup_endpoints: new UntypedFormControl(null, [
+        CdValidators.custom('endpoint', (value: string) => {
+          if (_.isEmpty(value)) {
+            return false;
+          } else {
+            if (value.includes(',')) {
+              value.split(',').forEach((url: string) => {
+                return (
+                  !this.endpoints.test(url) && !this.ipv4Rgx.test(url) && !this.ipv6Rgx.test(url)
+                );
+              });
+            } else {
+              return (
+                !this.endpoints.test(value) &&
+                !this.ipv4Rgx.test(value) &&
+                !this.ipv6Rgx.test(value)
+              );
+            }
+            return false;
+          }
+        }),
+        Validators.required
+      ]),
+      placementTargets: this.formBuilder.array([])
+    });
+  }
+
+  ngOnInit(): void {
+    _.forEach(this.multisiteZonegroupForm.get('placementTargets'), (placementTarget) => {
+      const fg = this.addPlacementTarget();
+      fg.patchValue(placementTarget);
+    });
+    this.placementTargets = this.multisiteZonegroupForm.get('placementTargets') as UntypedFormArray;
+    this.realmList =
+      this.multisiteInfo[0] !== undefined && this.multisiteInfo[0].hasOwnProperty('realms')
+        ? this.multisiteInfo[0]['realms']
+        : [];
+    this.zonegroupList =
+      this.multisiteInfo[1] !== undefined && this.multisiteInfo[1].hasOwnProperty('zonegroups')
+        ? this.multisiteInfo[1]['zonegroups']
+        : [];
+    this.zonegroupList.forEach((zgp: any) => {
+      if (zgp.is_master === true && !_.isEmpty(zgp.realm_id)) {
+        this.isMaster = true;
+        this.disableMaster = true;
+      }
+    });
+    if (!this.isMaster) {
+      this.multisiteZonegroupForm.get('master_zonegroup').setValue(true);
+      this.multisiteZonegroupForm.get('master_zonegroup').disable();
+    }
+    this.zoneList =
+      this.multisiteInfo[2] !== undefined && this.multisiteInfo[2].hasOwnProperty('zones')
+        ? this.multisiteInfo[2]['zones']
+        : [];
+    this.zonegroupNames = this.zonegroupList.map((zonegroup) => {
+      return zonegroup['name'];
+    });
+    let allZonegroupZonesList = this.zonegroupList.map((zonegroup: RgwZonegroup) => {
+      return zonegroup['zones'];
+    });
+    const allZonegroupZonesInfo = allZonegroupZonesList.reduce(
+      (accumulator, value) => accumulator.concat(value),
+      []
+    );
+    const allZonegroupZonesNames = allZonegroupZonesInfo.map((zone) => {
+      return zone['name'];
+    });
+    this.allZoneNames = this.zoneList.map((zone: RgwZone) => {
+      return zone['name'];
+    });
+    this.allZoneNames = _.difference(this.allZoneNames, allZonegroupZonesNames);
+    if (this.action === 'create' && this.defaultsInfo['defaultRealmName'] !== null) {
+      this.multisiteZonegroupForm
+        .get('selectedRealm')
+        .setValue(this.defaultsInfo['defaultRealmName']);
+      if (this.disableMaster) {
+        this.multisiteZonegroupForm.get('master_zonegroup').disable();
+      }
+    }
+    if (this.action === 'edit') {
+      this.multisiteZonegroupForm.get('zonegroupName').setValue(this.info.data.name);
+      this.multisiteZonegroupForm.get('selectedRealm').setValue(this.info.data.parent);
+      this.multisiteZonegroupForm.get('default_zonegroup').setValue(this.info.data.is_default);
+      this.multisiteZonegroupForm.get('master_zonegroup').setValue(this.info.data.is_master);
+      this.multisiteZonegroupForm.get('zonegroup_endpoints').setValue(this.info.data.endpoints);
+
+      if (this.info.data.is_default) {
+        this.multisiteZonegroupForm.get('default_zonegroup').disable();
+      }
+      if (
+        !this.info.data.is_default &&
+        this.multisiteZonegroupForm.getValue('selectedRealm') !==
+          this.defaultsInfo['defaultRealmName']
+      ) {
+        this.multisiteZonegroupForm.get('default_zonegroup').disable();
+        this.disableDefault = true;
+      }
+      if (this.info.data.is_master || this.disableMaster) {
+        this.multisiteZonegroupForm.get('master_zonegroup').disable();
+      }
+
+      this.zonegroupZoneNames = this.info.data.zones.map((zone: { [x: string]: any }) => {
+        return zone['name'];
+      });
+      this.zgZoneNames = this.info.data.zones.map((zone: { [x: string]: any }) => {
+        return zone['name'];
+      });
+      this.zgZoneIds = this.info.data.zones.map((zone: { [x: string]: any }) => {
+        return zone['id'];
+      });
+      const uniqueZones = new Set(this.allZoneNames);
+      this.labelsOption = Array.from(uniqueZones).map((zone) => {
+        return { enabled: true, name: zone, selected: false, description: null };
+      });
+
+      this.info.data.placement_targets.forEach((target: object) => {
+        const fg = this.addPlacementTarget();
+        let data = {
+          placement_id: target['name'],
+          tags: target['tags'].join(','),
+          storage_class:
+            typeof target['storage_classes'] === 'string'
+              ? target['storage_classes']
+              : target['storage_classes'].join(',')
+        };
+        fg.patchValue(data);
+      });
+    }
+  }
+
+  submit() {
+    const values = this.multisiteZonegroupForm.getRawValue();
+    if (this.action === 'create') {
+      this.realm = new RgwRealm();
+      this.realm.name = values['selectedRealm'];
+      this.zonegroup = new RgwZonegroup();
+      this.zonegroup.name = values['zonegroupName'];
+      this.zonegroup.endpoints = values['zonegroup_endpoints'];
+      this.rgwZonegroupService
+        .create(this.realm, this.zonegroup, values['default_zonegroup'], values['master_zonegroup'])
+        .subscribe(
+          () => {
+            this.notificationService.show(
+              NotificationType.success,
+              $localize`Zonegroup: '${values['zonegroupName']}' created successfully`
+            );
+            this.activeModal.close();
+          },
+          () => {
+            this.multisiteZonegroupForm.setErrors({ cdSubmitButton: true });
+          }
+        );
+    } else if (this.action === 'edit') {
+      this.removedZones = _.difference(this.zgZoneNames, this.zonegroupZoneNames);
+      const masterZoneName = this.info.data.zones.filter(
+        (zone: any) => zone.id === this.info.data.master_zone
+      );
+      this.isRemoveMasterZone = this.removedZones.includes(masterZoneName[0].name);
+      if (this.isRemoveMasterZone) {
+        this.multisiteZonegroupForm.setErrors({ cdSubmitButton: true });
+        return;
+      }
+      this.addedZones = _.difference(this.zonegroupZoneNames, this.zgZoneNames);
+      this.realm = new RgwRealm();
+      this.realm.name = values['selectedRealm'];
+      this.zonegroup = new RgwZonegroup();
+      this.zonegroup.name = this.info.data.name;
+      this.newZonegroupName = values['zonegroupName'];
+      this.zonegroup.endpoints = values['zonegroup_endpoints'].toString();
+      this.zonegroup.placement_targets = values['placementTargets'];
+      this.rgwZonegroupService
+        .update(
+          this.realm,
+          this.zonegroup,
+          this.newZonegroupName,
+          values['default_zonegroup'],
+          values['master_zonegroup'],
+          this.removedZones,
+          this.addedZones
+        )
+        .subscribe(
+          () => {
+            this.notificationService.show(
+              NotificationType.success,
+              $localize`Zonegroup: '${values['zonegroupName']}' updated successfully`
+            );
+            this.activeModal.close();
+          },
+          () => {
+            this.multisiteZonegroupForm.setErrors({ cdSubmitButton: true });
+          }
+        );
+    }
+  }
+
+  addPlacementTarget() {
+    this.placementTargets = this.multisiteZonegroupForm.get('placementTargets') as UntypedFormArray;
+    const fg = new CdFormGroup({
+      placement_id: new UntypedFormControl('', {
+        validators: [Validators.required]
+      }),
+      tags: new UntypedFormControl(''),
+      storage_class: new UntypedFormControl([])
+    });
+    this.placementTargets.push(fg);
+    return fg;
+  }
+
+  trackByFn(index: number) {
+    return index;
+  }
+
+  removePlacementTarget(index: number) {
+    this.placementTargets = this.multisiteZonegroupForm.get('placementTargets') as UntypedFormArray;
+    this.placementTargets.removeAt(index);
+  }
+
+  showError(index: number, control: string, formDir: NgForm, x: string) {
+    return (<any>this.multisiteZonegroupForm.controls.placementTargets).controls[index].showError(
+      control,
+      formDir,
+      x
+    );
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-card-popover.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-card-popover.scss
new file mode 100644 (file)
index 0000000..9192d4e
--- /dev/null
@@ -0,0 +1,20 @@
+@use './src/styles/vendor/variables' as vv;
+
+.rgw-overview-card-popover {
+  max-height: 600px;
+  max-width: 400px;
+  word-break: break-all;
+
+  .popover-body {
+    font-size: 1rem;
+    max-height: 600px;
+    max-width: 400px;
+    overflow: auto;
+
+    li {
+      span {
+        font-size: 1.1em;
+      }
+    }
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.html
new file mode 100644 (file)
index 0000000..0bcc48b
--- /dev/null
@@ -0,0 +1,185 @@
+<div class="container-fluid">
+  <div class="row">
+    <cd-card cardTitle="Inventory"
+             i18n-title
+             class="col-sm-3 px-3 d-flex"
+             aria-label="Inventory card">
+
+      <cd-card-row [data]="rgwDaemonCount"
+                   link="/rgw/daemon"
+                   title="Gateway"
+                   summaryType="simplified"
+                   *ngIf="rgwDaemonCount != null"></cd-card-row>
+
+      <cd-card-row [data]="rgwRealmCount"
+                   link="/rgw/multisite"
+                   title="Realm"
+                   summaryType="simplified"
+                   *ngIf="rgwRealmCount != null"></cd-card-row>
+
+      <cd-card-row [data]="rgwZonegroupCount"
+                   link="/rgw/multisite"
+                   title="Zone Group"
+                   summaryType="simplified"
+                   *ngIf="rgwZonegroupCount != null"></cd-card-row>
+
+      <cd-card-row [data]="rgwZoneCount"
+                   link="/rgw/multisite"
+                   title="Zone"
+                   summaryType="simplified"
+                   *ngIf="rgwZoneCount != null"></cd-card-row>
+
+      <cd-card-row [data]="rgwBucketCount"
+                   link="/rgw/bucket"
+                   title="Bucket"
+                   summaryType="simplified"
+                   *ngIf="rgwBucketCount != null"></cd-card-row>
+
+      <cd-card-row [data]="UserCount"
+                   link="/rgw/user"
+                   title="User"
+                   summaryType="simplified"
+                   *ngIf="UserCount != null"></cd-card-row>
+
+      <cd-card-row [data]="objectCount"
+                   title="Object"
+                   summaryType="simplified"
+                   *ngIf="objectCount != null"></cd-card-row>
+    </cd-card>
+    <cd-card cardTitle="Performance Statistics"
+             i18n-title
+             class="col-sm-6 d-flex"
+             ria-label="Performance Statistics card">
+      <div class="ms-4 me-4 mt-0">
+        <cd-dashboard-time-selector (selectedTime)="getPrometheusData($event)">
+        </cd-dashboard-time-selector>
+        <cd-dashboard-area-chart chartTitle="Requests/sec"
+                                 dataUnits=""
+                                 label="Requests/sec"
+                                 [data]="queriesResults.RGW_REQUEST_PER_SECOND">
+        </cd-dashboard-area-chart>
+        <cd-dashboard-area-chart chartTitle="Latency"
+                                 dataUnits="ms"
+                                 label="GET"
+                                 label2="PUT"
+                                 [data]="queriesResults.AVG_GET_LATENCY"
+                                 [data2]="queriesResults.AVG_PUT_LATENCY">
+        </cd-dashboard-area-chart>
+        <cd-dashboard-area-chart chartTitle="Bandwidth"
+                                 dataUnits="B"
+                                 label="GET"
+                                 label2="PUT"
+                                 [data]="queriesResults.GET_BANDWIDTH"
+                                 [data2]="queriesResults.PUT_BANDWIDTH">
+        </cd-dashboard-area-chart>
+      </div>
+    </cd-card>
+    <div class="col-lg-3">
+      <cd-card cardTitle="Used Capacity"
+               i18n-title
+               class="col-sm-2 d-flex w-100 h-50 pb-3"
+               aria-label="Used Capacity"
+               [alignItemsCenter]="true"
+               [justifyContentCenter]="true">
+        <span  class="ms-4 me-4 text-center">
+          <h1>{{ totalPoolUsedBytes | dimlessBinary}}</h1>
+        </span>
+      </cd-card>
+      <cd-card cardTitle="Average Object Size"
+               i18n-title
+               class="col-sm-2 d-flex w-100 h-50 pt-3"
+               aria-label="Avg Object Size"
+               [alignItemsCenter]="true"
+               [justifyContentCenter]="true">
+        <span class="ms-4 me-4 text-center">
+          <h1>{{ averageObjectSize | dimlessBinary}}</h1>
+        </span>
+      </cd-card>
+    </div>
+  </div>
+
+  <div class="row pt-4 pb-4">
+    <cd-card cardTitle="Multi-Site Sync Status"
+             i18n-title>
+      <ng-template #notConfigured>
+        <span class="pe-5 ps-5">
+          <cd-alert-panel type="info"
+                          i18n>
+            Multi-site needs to be configured in order to see the multi-site sync status.
+            Please consult the <cd-doc section="multisite"></cd-doc> on how to configure and enable the multi-site functionality.
+          </cd-alert-panel>
+        </span>
+      </ng-template>
+      <span *ngIf="loading"
+            class="d-flex justify-content-center">
+        <i [ngClass]="[icons.large3x, icons.spinner, icons.spin]"></i>
+      </span>
+      <div class="row"
+           *ngIf="multisiteSyncStatus$ | async">
+        <div class="row pt-2"
+             *ngIf="showMultisiteCard; else notConfigured">
+          <cd-card cardTitle="Primary Source Zone"
+                   class="col-lg-3 d-flex justify-content-center align-primary-zone"
+                   [alignItemsCenter]="true"
+                   [justifyContentCenter]="true">
+            <span *ngIf="loading"
+                  class="d-flex justify-content-center">
+              <i [ngClass]="[icons.large3x, icons.spinner, icons.spin]"></i>
+            </span>
+            <span *ngIf="!loading"
+                  class="d-flex justify-content-center">
+              <cd-rgw-sync-primary-zone [realm]="realm"
+                                        [zonegroup]="zonegroup"
+                                        [zone]="zone">
+              </cd-rgw-sync-primary-zone>
+            </span>
+          </cd-card>
+          <div class="col-lg-9">
+            <cd-card cardTitle="Source Zones"
+                     class="d-flex h-100">
+              <span *ngIf="loading"
+                    class="d-flex justify-content-center">
+                <i [ngClass]="[icons.large3x, icons.spinner, icons.spin]"></i>
+              </span>
+              <div class="row"
+                   *ngIf="!loading">
+                <cd-card *ngFor="let zone of replicaZonesInfo; trackBy: trackByFn"
+                         cardTitle="{{zone.name}}"
+                         cardType="zone"
+                         shadowClass="true"
+                         i18n-title
+                         class="col-sm-9 col-lg-6 align-replica-zones d-flex pt-4"
+                         aria-label="Source Zones Card">
+                  <div class="row pb-4 ps-3 pe-3">
+                    <cd-card *ngFor="let title of chartTitles"
+                             [cardTitle]="title"
+                             i18n-title
+                             cardType="syncCards"
+                             removeBorder="true"
+                             class="col-sm-9 col-lg-6"
+                             [ngClass]="{ 'border-left': title === 'Data Sync' }"
+                             aria-label="Charts Card"
+                             [alignItemsCenter]="true"
+                             [justifyContentCenter]="true">
+                      <span class="me-2 text-center"
+                            *ngIf="title === 'Metadata Sync'">
+                        <cd-rgw-sync-metadata-info [metadataSyncInfo]="metadataSyncInfo">
+                        </cd-rgw-sync-metadata-info>
+                      </span>
+                      <span class="me-2"
+                            *ngIf="title === 'Data Sync'">
+                        <cd-rgw-sync-data-info [zone]="zone">
+                        </cd-rgw-sync-data-info>
+                      </span>
+                    </cd-card>
+                  </div>
+                </cd-card>
+              </div>
+            </cd-card>
+          </div>
+        </div>
+      </div>
+    </cd-card>
+  </div>
+</div>
+
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.scss
new file mode 100644 (file)
index 0000000..b735edd
--- /dev/null
@@ -0,0 +1,32 @@
+@use './src/styles/vendor/variables' as vv;
+
+hr {
+  margin-bottom: 2px;
+  margin-top: 2px;
+}
+
+.list-group-item {
+  border: 0;
+}
+
+.align-replica-zones {
+  margin-left: auto;
+  margin-right: auto;
+  padding-left: 2em;
+  padding-right: 2em;
+}
+
+ul {
+  align-items: center;
+  display: flex;
+  flex-direction: column;
+  list-style-type: none;
+}
+
+.align-primary-zone {
+  padding-left: 4em;
+}
+
+.border-left {
+  border-left: 1px solid vv.$chart-color-border;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.spec.ts
new file mode 100644 (file)
index 0000000..fca5355
--- /dev/null
@@ -0,0 +1,140 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RgwOverviewDashboardComponent } from './rgw-overview-dashboard.component';
+import { of } from 'rxjs';
+import { RgwDaemonService } from '~/app/shared/api/rgw-daemon.service';
+import { RgwDaemon } from '../models/rgw-daemon';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { DimlessBinaryPipe } from '~/app/shared/pipes/dimless-binary.pipe';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { RgwBucketService } from '~/app/shared/api/rgw-bucket.service';
+import { HealthService } from '~/app/shared/api/health.service';
+import { CardComponent } from '~/app/shared/components/card/card.component';
+import { CardRowComponent } from '~/app/shared/components/card-row/card-row.component';
+import { NO_ERRORS_SCHEMA } from '@angular/core';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwOverviewDashboardComponent', () => {
+  let component: RgwOverviewDashboardComponent;
+  let fixture: ComponentFixture<RgwOverviewDashboardComponent>;
+  const daemon: RgwDaemon = {
+    id: '8000',
+    service_map_id: '4803',
+    version: 'ceph version',
+    server_hostname: 'ceph',
+    realm_name: 'realm1',
+    zonegroup_name: 'zg1-realm1',
+    zone_name: 'zone1-zg1-realm1',
+    default: true,
+    port: 80
+  };
+
+  const realmList = {
+    default_info: '20f61d29-7e45-4418-8e19-b7e962e4860b',
+    realms: ['realm2', 'realm1']
+  };
+
+  const zonegroupList = {
+    default_info: '20f61d29-7e45-4418-8e19-b7e962e4860b',
+    zonegroups: ['zg-1', 'zg-2', 'zg-3']
+  };
+
+  const zoneList = {
+    default_info: '20f61d29-7e45-4418-8e19-b7e962e4860b',
+    zones: ['zone4', 'zone5', 'zone6', 'zone7']
+  };
+
+  const bucketAndUserList = {
+    buckets_count: 2,
+    users_count: 2
+  };
+
+  const healthData = {
+    total_objects: '290',
+    total_pool_bytes_used: 9338880
+  };
+
+  let listDaemonsSpy: jest.SpyInstance;
+  let listZonesSpy: jest.SpyInstance;
+  let listZonegroupsSpy: jest.SpyInstance;
+  let listRealmsSpy: jest.SpyInstance;
+  let listBucketsSpy: jest.SpyInstance;
+  let healthDataSpy: jest.SpyInstance;
+
+  configureTestBed({
+    declarations: [
+      RgwOverviewDashboardComponent,
+      CardComponent,
+      CardRowComponent,
+      DimlessBinaryPipe
+    ],
+    schemas: [NO_ERRORS_SCHEMA],
+    imports: [HttpClientTestingModule]
+  });
+
+  beforeEach(() => {
+    listDaemonsSpy = jest
+      .spyOn(TestBed.inject(RgwDaemonService), 'list')
+      .mockReturnValue(of([daemon]));
+    listRealmsSpy = jest
+      .spyOn(TestBed.inject(RgwRealmService), 'list')
+      .mockReturnValue(of(realmList));
+    listZonegroupsSpy = jest
+      .spyOn(TestBed.inject(RgwZonegroupService), 'list')
+      .mockReturnValue(of(zonegroupList));
+    listZonesSpy = jest.spyOn(TestBed.inject(RgwZoneService), 'list').mockReturnValue(of(zoneList));
+    listBucketsSpy = jest
+      .spyOn(TestBed.inject(RgwBucketService), 'getTotalBucketsAndUsersLength')
+      .mockReturnValue(of(bucketAndUserList));
+    healthDataSpy = jest
+      .spyOn(TestBed.inject(HealthService), 'getClusterCapacity')
+      .mockReturnValue(of(healthData));
+    fixture = TestBed.createComponent(RgwOverviewDashboardComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('should render all cards', () => {
+    fixture.detectChanges();
+    const dashboardCards = fixture.debugElement.nativeElement.querySelectorAll('cd-card');
+    expect(dashboardCards.length).toBe(5);
+  });
+
+  it('should get corresponding data into Daemons', () => {
+    expect(listDaemonsSpy).toHaveBeenCalled();
+    expect(component.rgwDaemonCount).toEqual(1);
+  });
+
+  it('should get corresponding data into Realms', () => {
+    expect(listRealmsSpy).toHaveBeenCalled();
+    expect(component.rgwRealmCount).toEqual(2);
+  });
+
+  it('should get corresponding data into Zonegroups', () => {
+    expect(listZonegroupsSpy).toHaveBeenCalled();
+    expect(component.rgwZonegroupCount).toEqual(3);
+  });
+
+  it('should get corresponding data into Zones', () => {
+    expect(listZonesSpy).toHaveBeenCalled();
+    expect(component.rgwZoneCount).toEqual(4);
+  });
+
+  it('should get corresponding data into Buckets', () => {
+    expect(listBucketsSpy).toHaveBeenCalled();
+    expect(component.rgwBucketCount).toEqual(2);
+    expect(component.UserCount).toEqual(2);
+  });
+
+  it('should get corresponding data into Objects and capacity', () => {
+    expect(healthDataSpy).toHaveBeenCalled();
+    expect(component.objectCount).toEqual('290');
+    expect(component.totalPoolUsedBytes).toEqual(9338880);
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-overview-dashboard/rgw-overview-dashboard.component.ts
new file mode 100644 (file)
index 0000000..00537b3
--- /dev/null
@@ -0,0 +1,166 @@
+import { Component, OnDestroy, OnInit } from '@angular/core';
+
+import _ from 'lodash';
+import { Observable, ReplaySubject, Subscription, of } from 'rxjs';
+
+import { Permissions } from '~/app/shared/models/permissions';
+import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { RefreshIntervalService } from '~/app/shared/services/refresh-interval.service';
+import { RgwDaemonService } from '~/app/shared/api/rgw-daemon.service';
+import { RgwRealmService } from '~/app/shared/api/rgw-realm.service';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { RgwZonegroupService } from '~/app/shared/api/rgw-zonegroup.service';
+import { RgwBucketService } from '~/app/shared/api/rgw-bucket.service';
+import { PrometheusService } from '~/app/shared/api/prometheus.service';
+
+import { RgwPromqls as queries } from '~/app/shared/enum/dashboard-promqls.enum';
+import { HealthService } from '~/app/shared/api/health.service';
+import { Icons } from '~/app/shared/enum/icons.enum';
+import { RgwMultisiteService } from '~/app/shared/api/rgw-multisite.service';
+import { catchError, shareReplay, switchMap, tap } from 'rxjs/operators';
+
+@Component({
+  selector: 'cd-rgw-overview-dashboard',
+  templateUrl: './rgw-overview-dashboard.component.html',
+  styleUrls: ['./rgw-overview-dashboard.component.scss']
+})
+export class RgwOverviewDashboardComponent implements OnInit, OnDestroy {
+  icons = Icons;
+
+  interval = new Subscription();
+  permissions: Permissions;
+  rgwDaemonCount = 0;
+  rgwRealmCount = 0;
+  rgwZonegroupCount = 0;
+  rgwZoneCount = 0;
+  rgwBucketCount = 0;
+  objectCount = 0;
+  UserCount = 0;
+  totalPoolUsedBytes = 0;
+  averageObjectSize = 0;
+  realmData: any;
+  daemonSub: Subscription;
+  realmSub: Subscription;
+  multisiteInfo: object[] = [];
+  ZonegroupSub: Subscription;
+  ZoneSUb: Subscription;
+  HealthSub: Subscription;
+  BucketSub: Subscription;
+  queriesResults: any = {
+    RGW_REQUEST_PER_SECOND: '',
+    BANDWIDTH: '',
+    AVG_GET_LATENCY: '',
+    AVG_PUT_LATENCY: ''
+  };
+  timerGetPrometheusDataSub: Subscription;
+  chartTitles = ['Metadata Sync', 'Data Sync'];
+  realm: string;
+  zonegroup: string;
+  zone: string;
+  metadataSyncInfo: string;
+  replicaZonesInfo: any = [];
+  metadataSyncData: {};
+  showMultisiteCard = true;
+  loading = true;
+  multisiteSyncStatus$: Observable<any>;
+  subject = new ReplaySubject<any>();
+  syncCardLoading = true;
+
+  constructor(
+    private authStorageService: AuthStorageService,
+    private healthService: HealthService,
+    private refreshIntervalService: RefreshIntervalService,
+    private rgwDaemonService: RgwDaemonService,
+    private rgwRealmService: RgwRealmService,
+    private rgwZonegroupService: RgwZonegroupService,
+    private rgwZoneService: RgwZoneService,
+    private rgwBucketService: RgwBucketService,
+    private prometheusService: PrometheusService,
+    private rgwMultisiteService: RgwMultisiteService
+  ) {
+    this.permissions = this.authStorageService.getPermissions();
+  }
+
+  ngOnInit() {
+    this.interval = this.refreshIntervalService.intervalData$.subscribe(() => {
+      this.daemonSub = this.rgwDaemonService.list().subscribe((data: any) => {
+        this.rgwDaemonCount = data.length;
+      });
+      this.HealthSub = this.healthService.getClusterCapacity().subscribe((data: any) => {
+        this.objectCount = data['total_objects'];
+        this.totalPoolUsedBytes = data['total_pool_bytes_used'];
+        this.averageObjectSize = data['average_object_size'];
+      });
+      this.getSyncStatus();
+    });
+    this.BucketSub = this.rgwBucketService
+      .getTotalBucketsAndUsersLength()
+      .subscribe((data: any) => {
+        this.rgwBucketCount = data['buckets_count'];
+        this.UserCount = data['users_count'];
+      });
+    this.realmSub = this.rgwRealmService.list().subscribe((data: any) => {
+      this.rgwRealmCount = data['realms'].length;
+    });
+    this.ZonegroupSub = this.rgwZonegroupService.list().subscribe((data: any) => {
+      this.rgwZonegroupCount = data['zonegroups'].length;
+    });
+    this.ZoneSUb = this.rgwZoneService.list().subscribe((data: any) => {
+      this.rgwZoneCount = data['zones'].length;
+    });
+    this.getPrometheusData(this.prometheusService.lastHourDateObject);
+    this.multisiteSyncStatus$ = this.subject.pipe(
+      switchMap(() =>
+        this.rgwMultisiteService.getSyncStatus().pipe(
+          tap((data: any) => {
+            this.loading = false;
+            this.replicaZonesInfo = data['dataSyncInfo'];
+            this.metadataSyncInfo = data['metadataSyncInfo'];
+            if (this.replicaZonesInfo.length === 0) {
+              this.showMultisiteCard = false;
+              this.syncCardLoading = false;
+              this.loading = false;
+            }
+            [this.realm, this.zonegroup, this.zone] = data['primaryZoneData'];
+          }),
+          catchError((err) => {
+            this.showMultisiteCard = false;
+            this.syncCardLoading = false;
+            this.loading = false;
+            err.preventDefault();
+            return of(true);
+          })
+        )
+      ),
+      shareReplay(1)
+    );
+  }
+
+  ngOnDestroy() {
+    this.interval.unsubscribe();
+    this.daemonSub.unsubscribe();
+    this.realmSub.unsubscribe();
+    this.ZonegroupSub.unsubscribe();
+    this.ZoneSUb.unsubscribe();
+    this.BucketSub.unsubscribe();
+    this.HealthSub.unsubscribe();
+    this.prometheusService.unsubscribe();
+  }
+
+  getPrometheusData(selectedTime: any) {
+    this.queriesResults = this.prometheusService.getPrometheusQueriesData(
+      selectedTime,
+      queries,
+      this.queriesResults,
+      true
+    );
+  }
+
+  getSyncStatus() {
+    this.subject.next();
+  }
+
+  trackByFn(zone: any) {
+    return zone;
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.html
new file mode 100644 (file)
index 0000000..e8c7f9f
--- /dev/null
@@ -0,0 +1,51 @@
+<ng-template #syncPopover>
+  <ul class="text-center">
+    <li><h5><b>Sync Status:</b></h5></li>
+    <li *ngFor="let status of zone.fullSyncStatus">
+      <span *ngIf="!status?.includes(zone.name) && !status?.includes(zone.syncstatus) && !status?.includes('failed') && !status?.includes('error')">
+        <span *ngIf="status?.includes(':')">
+          <b>{{ status.split(': ')[0] | titlecase }}</b>:{{ status.split(': ')[1] | titlecase}}
+        </span>
+        <span *ngIf="!status?.includes(':')">
+          <b>{{ status | titlecase }}</b>
+        </span>
+      </span>
+      <span *ngIf="status?.includes('failed') || status?.includes('error')">
+        {{ status | titlecase }}
+      </span>
+    </li>
+  </ul>
+</ng-template>
+<ul class="me-2">
+  <ng-template #upToDateTpl>
+    <li class="badge badge-success">Up to Date</li>
+  </ng-template>
+  <ng-template #showStatus>
+    <a *ngIf="zone.syncstatus !== 'Not Syncing From Zone'"
+       class="lead text-primary"
+       [ngbPopover]="syncPopover"
+       placement="top"
+       popoverClass="rgw-overview-card-popover"
+       i18n>{{ zone.syncstatus | titlecase }}</a>
+    <a *ngIf="zone.syncstatus === 'Not Syncing From Zone'"
+       class="lead text-primary"
+       [ngbPopover]="syncPopover"
+       placement="top"
+       popoverClass="rgw-overview-card-popover"
+       i18n>Not Syncing</a>
+  </ng-template>
+  <li><b>Status:</b></li>
+  <li *ngIf="zone.syncstatus?.includes('failed') || zone.syncstatus?.includes('error'); else showStatus">
+    <i [ngClass]="[icons.danger]"
+       class="text-danger"></i>
+    <a class="lead text-danger"
+       [ngbPopover]="syncPopover"
+       placement="top"
+       popoverClass="rgw-overview-card-popover"
+       i18n>Error</a></li>
+  <li class="mt-4 fw-bold">
+    Last Synced:
+  </li>
+  <li class="badge badge-info"
+      *ngIf="zone.timestamp; else upToDateTpl">{{ zone.timestamp | relativeDate }}</li>
+</ul>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.scss
new file mode 100644 (file)
index 0000000..4386b0c
--- /dev/null
@@ -0,0 +1,8 @@
+@use './src/styles/vendor/variables' as vv;
+
+ul {
+  align-items: center;
+  display: flex;
+  flex-direction: column;
+  list-style-type: none;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.spec.ts
new file mode 100644 (file)
index 0000000..1c7ce8a
--- /dev/null
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RgwSyncDataInfoComponent } from './rgw-sync-data-info.component';
+import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwSyncDataInfoComponent', () => {
+  let component: RgwSyncDataInfoComponent;
+  let fixture: ComponentFixture<RgwSyncDataInfoComponent>;
+
+  configureTestBed({
+    declarations: [RgwSyncDataInfoComponent],
+    imports: [NgbPopoverModule]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwSyncDataInfoComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-data-info/rgw-sync-data-info.component.ts
new file mode 100644 (file)
index 0000000..a7ec87d
--- /dev/null
@@ -0,0 +1,16 @@
+import { Component, Input } from '@angular/core';
+import { Icons } from '~/app/shared/enum/icons.enum';
+
+@Component({
+  selector: 'cd-rgw-sync-data-info',
+  templateUrl: './rgw-sync-data-info.component.html',
+  styleUrls: ['./rgw-sync-data-info.component.scss']
+})
+export class RgwSyncDataInfoComponent {
+  icons = Icons;
+
+  @Input()
+  zone: any = {};
+
+  constructor() {}
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.html
new file mode 100644 (file)
index 0000000..9b489e1
--- /dev/null
@@ -0,0 +1,59 @@
+<span *ngIf="metadataSyncInfo === 'no sync (zone is master)'">
+  <ul class="me-2">
+    <li><b>Status:</b></li>
+    <li>No Sync</li>
+  </ul>
+</span>
+<span *ngIf="metadataSyncInfo !== 'no sync (zone is master)'">
+  <ng-template #metadataSyncPopover>
+    <ul class="text-center">
+      <li><h5><b>Metadata Sync Status:</b></h5></li>
+      <li *ngFor="let status of metadataSyncInfo.fullSyncStatus">
+        <span *ngIf="!status?.includes(metadataSyncInfo.syncstatus) && !status?.includes('failed') && !status?.includes('error')">
+          <span *ngIf="status?.includes(':')">
+            <b>{{ status.split(':')[0] | titlecase }}</b>:{{ status.split(':')[1] | titlecase}}
+          </span>
+          <span *ngIf="!status?.includes(':')">
+            <b>{{ status | titlecase }}</b>
+          </span>
+        </span>
+        <span *ngIf="status?.includes('failed') || status?.includes('error')">
+            {{ status | titlecase }}
+        </span>
+      </li>
+    </ul>
+  </ng-template>
+  <ul class="me-2">
+    <ng-template #upToDateTpl>
+      <li class="badge badge-success">Up to Date</li>
+    </ng-template>
+    <ng-template #showMetadataStatus>
+      <a *ngIf="metadataSyncInfo.syncstatus !== 'Not Syncing From Zone'"
+         class="lead text-primary"
+         [ngbPopover]="metadataSyncPopover"
+         placement="top"
+         popoverClass="rgw-overview-card-popover"
+         i18n>{{ metadataSyncInfo.syncstatus | titlecase }}</a>
+      <a *ngIf="metadataSyncInfo.syncstatus === 'Not Syncing From Zone'"
+         class="lead text-primary"
+         [ngbPopover]="metadataSyncPopover"
+         placement="top"
+         popoverClass="rgw-overview-card-popover"
+         i18n>Not Syncing</a>
+    </ng-template>
+    <li><b>Status:</b></li>
+    <li *ngIf="metadataSyncInfo.syncstatus?.includes('failed') || metadataSyncInfo.syncstatus?.includes('error'); else showMetadataStatus">
+      <i class="text-danger"
+         [ngClass]="[icons.danger]"></i>
+      <a class="lead text-danger"
+         [ngbPopover]="metadataSyncPopover"
+         placement="top"
+         popoverClass="rgw-overview-card-popover"
+         i18n>Error</a></li>
+    <li class="mt-4 fw-bold">
+      Last Synced:
+    </li>
+    <li class="badge badge-info"
+        *ngIf="metadataSyncInfo.timestamp; else upToDateTpl">{{ metadataSyncInfo.timestamp | relativeDate }}</li>
+  </ul>
+</span>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.scss
new file mode 100644 (file)
index 0000000..4386b0c
--- /dev/null
@@ -0,0 +1,8 @@
+@use './src/styles/vendor/variables' as vv;
+
+ul {
+  align-items: center;
+  display: flex;
+  flex-direction: column;
+  list-style-type: none;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.spec.ts
new file mode 100644 (file)
index 0000000..df3748b
--- /dev/null
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RgwSyncMetadataInfoComponent } from './rgw-sync-metadata-info.component';
+import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwSyncMetadataInfoComponent', () => {
+  let component: RgwSyncMetadataInfoComponent;
+  let fixture: ComponentFixture<RgwSyncMetadataInfoComponent>;
+
+  configureTestBed({
+    declarations: [RgwSyncMetadataInfoComponent],
+    imports: [NgbPopoverModule]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwSyncMetadataInfoComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-metadata-info/rgw-sync-metadata-info.component.ts
new file mode 100644 (file)
index 0000000..bf05c19
--- /dev/null
@@ -0,0 +1,16 @@
+import { Component, Input } from '@angular/core';
+import { Icons } from '~/app/shared/enum/icons.enum';
+
+@Component({
+  selector: 'cd-rgw-sync-metadata-info',
+  templateUrl: './rgw-sync-metadata-info.component.html',
+  styleUrls: ['./rgw-sync-metadata-info.component.scss']
+})
+export class RgwSyncMetadataInfoComponent {
+  icons = Icons;
+
+  @Input()
+  metadataSyncInfo: any = {};
+
+  constructor() {}
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.html
new file mode 100644 (file)
index 0000000..f0e0457
--- /dev/null
@@ -0,0 +1,15 @@
+<ul class="pb-5">
+  <li><i [ngClass]="[icons.large2x, icons.reweight]"
+         class="pt-2"></i></li>
+  <li class="badge badge-info mt-2">{{realm}}</li>
+  <li><i [ngClass]="[icons.large2x, icons.down]"
+         class="mt-2"></i></li>
+  <li><i [ngClass]="[icons.large2x, icons.cubes]"
+         class="mt-2"></i></li>
+  <p class="badge badge-info mt-2">{{zonegroup}}</p>
+  <li><i [ngClass]="[icons.large2x, icons.down]"
+         class="mt-2"></i></li>
+  <li><i [ngClass]="[icons.large2x, icons.deploy]"
+         class="mt-2"></i></li>
+  <li class="badge badge-info mt-2">{{zone}}</li>
+</ul>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.scss
new file mode 100644 (file)
index 0000000..795ecec
--- /dev/null
@@ -0,0 +1,12 @@
+@use './src/styles/vendor/variables' as vv;
+
+ul {
+  align-items: center;
+  display: flex;
+  flex-direction: column;
+  list-style-type: none;
+}
+
+.align-primary-zone {
+  padding-left: 4em;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.spec.ts
new file mode 100644 (file)
index 0000000..aefb327
--- /dev/null
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RgwSyncPrimaryZoneComponent } from './rgw-sync-primary-zone.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwSyncPrimaryZoneComponent', () => {
+  let component: RgwSyncPrimaryZoneComponent;
+  let fixture: ComponentFixture<RgwSyncPrimaryZoneComponent>;
+
+  configureTestBed({
+    declarations: [RgwSyncPrimaryZoneComponent]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwSyncPrimaryZoneComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-sync-primary-zone/rgw-sync-primary-zone.component.ts
new file mode 100644 (file)
index 0000000..483ac1f
--- /dev/null
@@ -0,0 +1,22 @@
+import { Component, Input } from '@angular/core';
+import { Icons } from '~/app/shared/enum/icons.enum';
+
+@Component({
+  selector: 'cd-rgw-sync-primary-zone',
+  templateUrl: './rgw-sync-primary-zone.component.html',
+  styleUrls: ['./rgw-sync-primary-zone.component.scss']
+})
+export class RgwSyncPrimaryZoneComponent {
+  icons = Icons;
+
+  @Input()
+  realm: string;
+
+  @Input()
+  zonegroup: string;
+
+  @Input()
+  zone: string;
+
+  constructor() {}
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.html
new file mode 100644 (file)
index 0000000..86aa3d2
--- /dev/null
@@ -0,0 +1,37 @@
+<cd-modal [modalRef]="activeModal">
+  <ng-container i18n="form title"
+                class="modal-title">Create System User</ng-container>
+
+  <ng-container class="modal-content">
+    <form name="multisiteSystemUserForm"
+          #formDir="ngForm"
+          [formGroup]="multisiteSystemUserForm"
+          novalidate>
+      <div class="modal-body">
+        <div class="form-group row">
+          <label class="cd-col-form-label required"
+                 for="userName"
+                 i18n>User Name</label>
+          <div class="cd-col-form-input">
+            <input class="form-control"
+                   type="text"
+                   placeholder="User name..."
+                   id="userName"
+                   name="userName"
+                   formControlName="userName">
+            <span class="invalid-feedback"
+                  *ngIf="multisiteSystemUserForm.showError('userName', formDir, 'required')"
+                  i18n>This field is required.</span>
+            <span class="invalid-feedback"
+                  *ngIf="multisiteSystemUserForm.showError('userName', formDir, 'uniqueName')"
+                  i18n>The chosen realm name is already in use.</span>
+          </div>
+        </div>
+      </div>
+      <div class="modal-footer">
+        <cd-form-button-panel (submitActionEvent)="submit()"
+                              [form]="multisiteSystemUserForm"></cd-form-button-panel>
+      </div>
+    </form>
+  </ng-container>
+</cd-modal>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.spec.ts
new file mode 100644 (file)
index 0000000..a08996f
--- /dev/null
@@ -0,0 +1,37 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { RgwSystemUserComponent } from './rgw-system-user.component';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { ReactiveFormsModule } from '@angular/forms';
+import { RouterTestingModule } from '@angular/router/testing';
+import { ToastrModule } from 'ngx-toastr';
+import { SharedModule } from '~/app/shared/shared.module';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('RgwSystemUserComponent', () => {
+  let component: RgwSystemUserComponent;
+  let fixture: ComponentFixture<RgwSystemUserComponent>;
+
+  configureTestBed({
+    imports: [
+      SharedModule,
+      ReactiveFormsModule,
+      RouterTestingModule,
+      HttpClientTestingModule,
+      ToastrModule.forRoot()
+    ],
+    declarations: [RgwSystemUserComponent],
+    providers: [NgbActiveModal]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(RgwSystemUserComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-system-user/rgw-system-user.component.ts
new file mode 100644 (file)
index 0000000..856bc07
--- /dev/null
@@ -0,0 +1,50 @@
+import { Component, EventEmitter, Output } from '@angular/core';
+import { UntypedFormControl, Validators } from '@angular/forms';
+import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
+import { RgwZoneService } from '~/app/shared/api/rgw-zone.service';
+import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
+import { NotificationType } from '~/app/shared/enum/notification-type.enum';
+import { CdFormGroup } from '~/app/shared/forms/cd-form-group';
+import { NotificationService } from '~/app/shared/services/notification.service';
+
+@Component({
+  selector: 'cd-rgw-system-user',
+  templateUrl: './rgw-system-user.component.html',
+  styleUrls: ['./rgw-system-user.component.scss']
+})
+export class RgwSystemUserComponent {
+  multisiteSystemUserForm: CdFormGroup;
+  zoneName: string;
+
+  @Output()
+  submitAction = new EventEmitter();
+
+  constructor(
+    public activeModal: NgbActiveModal,
+    public actionLabels: ActionLabelsI18n,
+    public rgwZoneService: RgwZoneService,
+    public notificationService: NotificationService
+  ) {
+    this.createForm();
+  }
+
+  createForm() {
+    this.multisiteSystemUserForm = new CdFormGroup({
+      userName: new UntypedFormControl(null, {
+        validators: [Validators.required]
+      })
+    });
+  }
+
+  submit() {
+    const userName = this.multisiteSystemUserForm.getValue('userName');
+    this.rgwZoneService.createSystemUser(userName, this.zoneName).subscribe(() => {
+      this.submitAction.emit();
+      this.notificationService.show(
+        NotificationType.success,
+        $localize`User: '${this.multisiteSystemUserForm.getValue('userName')}' created successfully`
+      );
+      this.activeModal.close();
+    });
+  }
+}
index b708f47dbab1d4a7dc137404fe59c13ec6132d70..9fec45dfe01a8900766b75365d9ee497979b6bb4 100644 (file)
               <span class="invalid-feedback"
                     *ngIf="userForm.showError('user_quota_max_size', frm, 'quotaMaxSize')"
                     i18n>The value is not valid.</span>
+              <span *ngIf="userForm.showError('user_quota_max_size', formDir, 'pattern')"
+                    class="invalid-feedback"
+                    i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
             </div>
           </div>
 
               <span class="invalid-feedback"
                     *ngIf="userForm.showError('bucket_quota_max_size', frm, 'quotaMaxSize')"
                     i18n>The value is not valid.</span>
+              <span *ngIf="userForm.showError('bucket_quota_max_size', formDir, 'pattern')"
+                    class="invalid-feedback"
+                    i18n>Size must be a number or in a valid format. eg: 5 GiB</span>
             </div>
           </div>
 
index 34cccb9409d6bcc595c55c03e497061ef9574957..3c0f9264d80168de705554c9189048bafdbccb04 100644 (file)
@@ -38,7 +38,7 @@ export class RgwUserListComponent extends ListWithDetails implements OnInit {
   columns: CdTableColumn[] = [];
   users: object[] = [];
   selection: CdTableSelection = new CdTableSelection();
-  staleTimeout: number;
+  declare staleTimeout: number;
 
   constructor(
     private authStorageService: AuthStorageService,
index 3b81e718dc43c8b5fbaa9ae917591b7a53ca340a..43a0d296c35345a8d1d90b24eb887a6f675ec8a9 100644 (file)
@@ -1,15 +1,14 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { RgwUserTabsComponent } from './rgw-user-tabs.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 describe('RgwUserTabsComponent', () => {
   let component: RgwUserTabsComponent;
   let fixture: ComponentFixture<RgwUserTabsComponent>;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [RgwUserTabsComponent]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [RgwUserTabsComponent]
   });
 
   beforeEach(() => {
index d9fbd2b6d2e563f1e9a03dc62372bf1a11d8eb25..8668f8d03b786ce6933fd29b8bd972f7b31ea6e1 100644 (file)
@@ -3,11 +3,12 @@ import { NgModule } from '@angular/core';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { RouterModule, Routes } from '@angular/router';
 
-import { NgbNavModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
+import { NgbNavModule, NgbPopoverModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
 import { NgxPipeFunctionModule } from 'ngx-pipe-function';
 
 import { ActionLabels, URLVerbs } from '~/app/shared/constants/app.constants';
 import { CRUDTableComponent } from '~/app/shared/datatable/crud-table/crud-table.component';
+
 import { SharedModule } from '~/app/shared/shared.module';
 import { PerformanceCounterModule } from '../performance-counter/performance-counter.module';
 import { RgwBucketDetailsComponent } from './rgw-bucket-details/rgw-bucket-details.component';
@@ -25,6 +26,24 @@ import { RgwUserSubuserModalComponent } from './rgw-user-subuser-modal/rgw-user-
 import { RgwUserSwiftKeyModalComponent } from './rgw-user-swift-key-modal/rgw-user-swift-key-modal.component';
 import { RgwUserTabsComponent } from './rgw-user-tabs/rgw-user-tabs.component';
 import { CrudFormComponent } from '~/app/shared/forms/crud-form/crud-form.component';
+import { RgwMultisiteDetailsComponent } from './rgw-multisite-details/rgw-multisite-details.component';
+import { TreeModule } from '@circlon/angular-tree-component';
+import { DataTableModule } from '~/app/shared/datatable/datatable.module';
+import { RgwMultisiteRealmFormComponent } from './rgw-multisite-realm-form/rgw-multisite-realm-form.component';
+import { RgwMultisiteZonegroupFormComponent } from './rgw-multisite-zonegroup-form/rgw-multisite-zonegroup-form.component';
+import { RgwMultisiteZoneFormComponent } from './rgw-multisite-zone-form/rgw-multisite-zone-form.component';
+import { RgwMultisiteZoneDeletionFormComponent } from './models/rgw-multisite-zone-deletion-form/rgw-multisite-zone-deletion-form.component';
+import { RgwMultisiteZonegroupDeletionFormComponent } from './models/rgw-multisite-zonegroup-deletion-form/rgw-multisite-zonegroup-deletion-form.component';
+import { RgwSystemUserComponent } from './rgw-system-user/rgw-system-user.component';
+import { RgwMultisiteMigrateComponent } from './rgw-multisite-migrate/rgw-multisite-migrate.component';
+import { RgwMultisiteImportComponent } from './rgw-multisite-import/rgw-multisite-import.component';
+import { RgwMultisiteExportComponent } from './rgw-multisite-export/rgw-multisite-export.component';
+import { CreateRgwServiceEntitiesComponent } from './create-rgw-service-entities/create-rgw-service-entities.component';
+import { RgwOverviewDashboardComponent } from './rgw-overview-dashboard/rgw-overview-dashboard.component';
+import { DashboardV3Module } from '../dashboard-v3/dashboard-v3.module';
+import { RgwSyncPrimaryZoneComponent } from './rgw-sync-primary-zone/rgw-sync-primary-zone.component';
+import { RgwSyncMetadataInfoComponent } from './rgw-sync-metadata-info/rgw-sync-metadata-info.component';
+import { RgwSyncDataInfoComponent } from './rgw-sync-data-info/rgw-sync-data-info.component';
 
 @NgModule({
   imports: [
@@ -36,7 +55,11 @@ import { CrudFormComponent } from '~/app/shared/forms/crud-form/crud-form.compon
     NgbNavModule,
     RouterModule,
     NgbTooltipModule,
-    NgxPipeFunctionModule
+    NgbPopoverModule,
+    NgxPipeFunctionModule,
+    TreeModule,
+    DataTableModule,
+    DashboardV3Module
   ],
   exports: [
     RgwDaemonListComponent,
@@ -62,14 +85,31 @@ import { CrudFormComponent } from '~/app/shared/forms/crud-form/crud-form.compon
     RgwUserCapabilityModalComponent,
     RgwUserSubuserModalComponent,
     RgwConfigModalComponent,
-    RgwUserTabsComponent
+    RgwUserTabsComponent,
+    RgwMultisiteDetailsComponent,
+    RgwMultisiteRealmFormComponent,
+    RgwMultisiteZonegroupFormComponent,
+    RgwMultisiteZoneFormComponent,
+    RgwMultisiteZoneDeletionFormComponent,
+    RgwMultisiteZonegroupDeletionFormComponent,
+    RgwSystemUserComponent,
+    RgwMultisiteMigrateComponent,
+    RgwMultisiteImportComponent,
+    RgwMultisiteExportComponent,
+    CreateRgwServiceEntitiesComponent,
+    RgwOverviewDashboardComponent,
+    RgwSyncPrimaryZoneComponent,
+    RgwSyncMetadataInfoComponent,
+    RgwSyncDataInfoComponent
   ]
 })
 export class RgwModule {}
 
 const routes: Routes = [
   {
-    path: '' // Required for a clean reload on daemon selection.
+    path: '',
+    redirectTo: 'rbd',
+    pathMatch: 'full' // Required for a clean reload on daemon selection.
   },
   { path: 'daemon', component: RgwDaemonListComponent, data: { breadcrumbs: 'Gateways' } },
   {
@@ -135,6 +175,15 @@ const routes: Routes = [
         data: { breadcrumbs: ActionLabels.EDIT }
       }
     ]
+  },
+  {
+    path: 'overview',
+    data: { breadcrumbs: 'Overview' },
+    children: [{ path: '', component: RgwOverviewDashboardComponent }]
+  },
+  {
+    path: 'multisite',
+    children: [{ path: '', component: RgwMultisiteDetailsComponent }]
   }
 ];
 
index 91a49a1bd45b7000bf8f2c3c273128366caa96f3..ac53edef28b8f6a865ef5dbda0d1e1d1ae5070a6 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 import { Router } from '@angular/router';
 
 import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap';
@@ -63,11 +63,11 @@ export class FeedbackComponent implements OnInit, OnDestroy {
 
   private createForm() {
     this.feedbackForm = new CdFormGroup({
-      project: new FormControl('', Validators.required),
-      tracker: new FormControl('', Validators.required),
-      subject: new FormControl('', Validators.required),
-      description: new FormControl('', Validators.required),
-      api_key: new FormControl('', Validators.required)
+      project: new UntypedFormControl('', Validators.required),
+      tracker: new UntypedFormControl('', Validators.required),
+      subject: new UntypedFormControl('', Validators.required),
+      description: new UntypedFormControl('', Validators.required),
+      api_key: new UntypedFormControl('', Validators.required)
     });
   }
 
index 15addd1e8216273866704bb5d007f8c15305b94d..9d16a710e3dd02bad88870df1567c3f93419cfc7 100755 (executable)
@@ -66,3 +66,8 @@ input:-webkit-autofill {
 .is-invalid.cd-form-control {
   border-color: transparent;
 }
+
+#oldpassword.is-valid {
+  background-image: unset;
+  border-color: transparent;
+}
index 0fafe12f8274973b7ab90bd2e0402ccfcba31407..505c12059ce9517e864bb2ab9087405c62e95670 100644 (file)
@@ -8,7 +8,7 @@
 
     <!-- Username -->
     <div class="form-group has-feedback d-flex flex-column py-3">
-      <label class="placeholder ps-3"
+      <label class="ps-3"
              for="username"
              i18n>Username</label>
       <input id="username"
@@ -31,7 +31,7 @@
          id="password-div">
       <div class="input-group d-flex flex-nowrap">
         <div class="d-flex flex-column flex-grow-1 py-3">
-          <label class="placeholder ps-3"
+          <label class="ps-3"
                  for="password"
                  i18n>Password</label>
           <input id="password"
index ce8b21cbc7686bbba02f498fafe543c5cedf247b..cc8d81016af68d0e7fa4aa17c85f68802dc2aff4 100644 (file)
@@ -27,7 +27,7 @@ $dark-secondary: darken(vv.$secondary, 4%);
     outline: none;
   }
 
-  .placeholder {
+  label {
     color: vv.$gray-500;
   }
 
index 08904c1c2b3366fed37bf5c6c06fe3290af31d8c..9b792d127f125719cff80750938943ac33e05917 100644 (file)
           <label i18n
                  class="cd-col-form-label">Permissions</label>
           <div class="cd-col-form-input">
-            <cd-table [data]="scopes_permissions"
-                      [columns]="columns"
-                      columnMode="flex"
-                      [toolHeader]="false"
-                      [autoReload]="false"
-                      [autoSave]="false"
-                      [footer]="false"
-                      [limit]="0">
-            </cd-table>
+            <cd-checked-table-form [data]="scopes_permissions"
+                                   [columns]="columns"
+                                   [form]="roleForm"
+                                   inputField="scopes_permissions"
+                                   [scopes]="scopes"
+                                   [initialValue]="initialValue"></cd-checked-table-form>
           </div>
         </div>
 
     </div>
   </form>
 </div>
-
-<ng-template #cellScopeCheckboxTpl
-             let-column="column"
-             let-row="row"
-             let-value="value">
-  <div class="custom-control custom-checkbox">
-    <input class="custom-control-input"
-           id="scope_{{ row.scope }}"
-           type="checkbox"
-           [checked]="isRowChecked(row.scope)"
-           (change)="onClickCellCheckbox(row.scope, column.prop, $event)">
-    <label class="datatable-permissions-scope-cell-label custom-control-label"
-           for="scope_{{ row.scope }}">{{ value }}</label>
-  </div>
-</ng-template>
-
-<ng-template #cellPermissionCheckboxTpl
-             let-column="column"
-             let-row="row"
-             let-value="value">
-  <div class="custom-control custom-checkbox">
-    <input class="custom-control-input"
-           type="checkbox"
-           [checked]="value"
-           [id]="row.scope + '-' + column.prop"
-           (change)="onClickCellCheckbox(row.scope, column.prop, $event)">
-    <label class="custom-control-label"
-           [for]="row.scope + '-' + column.prop"></label>
-  </div>
-</ng-template>
-
-<ng-template #headerPermissionCheckboxTpl
-             let-column="column">
-  <div class="custom-control custom-checkbox">
-    <input class="custom-control-input"
-           id="header_{{ column.prop }}"
-           type="checkbox"
-           [checked]="isHeaderChecked(column.prop)"
-           (change)="onClickHeaderCheckbox(column.prop, $event)">
-    <label class="datatable-permissions-header-cell-label custom-control-label"
-           for="header_{{ column.prop }}">{{ column.name }}</label>
-  </div>
-</ng-template>
index 7552f594bf3524f476b347165d64e30552cb498a..f4e8e1d0bce0fa37a26e219da8d938f056a2e21b 100644 (file)
@@ -101,72 +101,11 @@ describe('RoleFormComponent', () => {
       roleReq.flush({});
       expect(router.navigate).toHaveBeenCalledWith(['/user-management/roles']);
     });
-
-    it('should check all perms for a scope', () => {
-      formHelper.setValue('scopes_permissions', { cephfs: ['read'] });
-      component.onClickCellCheckbox('grafana', 'scope');
-      const scopes_permissions = form.getValue('scopes_permissions');
-      expect(Object.keys(scopes_permissions)).toContain('grafana');
-      expect(scopes_permissions['grafana']).toEqual(['create', 'delete', 'read', 'update']);
-    });
-
-    it('should uncheck all perms for a scope', () => {
-      formHelper.setValue('scopes_permissions', { cephfs: ['read', 'create', 'update', 'delete'] });
-      component.onClickCellCheckbox('cephfs', 'scope');
-      const scopes_permissions = form.getValue('scopes_permissions');
-      expect(Object.keys(scopes_permissions)).not.toContain('cephfs');
-    });
-
-    it('should uncheck all scopes and perms', () => {
-      component.scopes = ['cephfs', 'grafana'];
-      formHelper.setValue('scopes_permissions', {
-        cephfs: ['read', 'delete'],
-        grafana: ['update']
-      });
-      component.onClickHeaderCheckbox('scope', ({
-        target: { checked: false }
-      } as unknown) as Event);
-      const scopes_permissions = form.getValue('scopes_permissions');
-      expect(scopes_permissions).toEqual({});
-    });
-
-    it('should check all scopes and perms', () => {
-      component.scopes = ['cephfs', 'grafana'];
-      formHelper.setValue('scopes_permissions', {
-        cephfs: ['create', 'update'],
-        grafana: ['delete']
-      });
-      component.onClickHeaderCheckbox('scope', ({ target: { checked: true } } as unknown) as Event);
-      const scopes_permissions = form.getValue('scopes_permissions');
-      const keys = Object.keys(scopes_permissions);
-      expect(keys).toEqual(['cephfs', 'grafana']);
-      keys.forEach((key) => {
-        expect(scopes_permissions[key].sort()).toEqual(['create', 'delete', 'read', 'update']);
-      });
-    });
-
-    it('should check if column is checked', () => {
-      component.scopes_permissions = [
-        { scope: 'a', read: true, create: true, update: true, delete: true },
-        { scope: 'b', read: false, create: true, update: false, delete: true }
-      ];
-      expect(component.isRowChecked('a')).toBeTruthy();
-      expect(component.isRowChecked('b')).toBeFalsy();
-      expect(component.isRowChecked('c')).toBeFalsy();
-    });
-
-    it('should check if header is checked', () => {
-      component.scopes_permissions = [
-        { scope: 'a', read: true, create: true, update: false, delete: true },
-        { scope: 'b', read: false, create: true, update: false, delete: true }
-      ];
-      expect(component.isHeaderChecked('read')).toBeFalsy();
-      expect(component.isHeaderChecked('create')).toBeTruthy();
-      expect(component.isHeaderChecked('update')).toBeFalsy();
-    });
   });
 
   describe('edit mode', () => {
+    let formHelper: FormHelper;
+
     const role: RoleFormModel = {
       name: 'role1',
       description: 'Role 1',
@@ -174,6 +113,7 @@ describe('RoleFormComponent', () => {
     };
     const scopes = ['osd', 'user'];
     beforeEach(() => {
+      formHelper = new FormHelper(form);
       spyOn(roleService, 'get').and.callFake(() => of(role));
       spyOn(TestBed.inject(ScopeService), 'list').and.callFake(() => of(scopes));
       setUrl('/user-management/roles/edit/role1');
@@ -204,9 +144,10 @@ describe('RoleFormComponent', () => {
     });
 
     it('should submit', () => {
-      component.onClickCellCheckbox('osd', 'update');
-      component.onClickCellCheckbox('osd', 'create');
-      component.onClickCellCheckbox('user', 'read');
+      formHelper.setValue('scopes_permissions', {
+        osd: ['read', 'update'],
+        user: ['read']
+      });
       component.submit();
       const roleReq = httpTesting.expectOne(`api/role/${role.name}`);
       expect(roleReq.request.method).toBe('PUT');
index 21dff1c85af67770b28c7db483b3f5982353ade0..b0fed2bf680028dc889905b60559c9717b0ae8b0 100644 (file)
@@ -1,5 +1,5 @@
-import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { Component, OnInit } from '@angular/core';
+import { UntypedFormControl, Validators } from '@angular/forms';
 import { ActivatedRoute, Router } from '@angular/router';
 
 import _ from 'lodash';
@@ -23,19 +23,13 @@ import { RoleFormModel } from './role-form.model';
   styleUrls: ['./role-form.component.scss']
 })
 export class RoleFormComponent extends CdForm implements OnInit {
-  @ViewChild('headerPermissionCheckboxTpl', { static: true })
-  headerPermissionCheckboxTpl: TemplateRef<any>;
-  @ViewChild('cellScopeCheckboxTpl', { static: true })
-  cellScopeCheckboxTpl: TemplateRef<any>;
-  @ViewChild('cellPermissionCheckboxTpl', { static: true })
-  cellPermissionCheckboxTpl: TemplateRef<any>;
-
   roleForm: CdFormGroup;
   response: RoleFormModel;
 
   columns: CdTableColumn[];
   scopes: Array<string> = [];
   scopes_permissions: Array<any> = [];
+  initialValue = {};
 
   roleFormMode = RoleFormMode;
   mode: RoleFormMode;
@@ -54,17 +48,17 @@ export class RoleFormComponent extends CdForm implements OnInit {
     super();
     this.resource = $localize`role`;
     this.createForm();
-    this.listenToChanges();
+    // this.listenToChanges();
   }
 
   createForm() {
     this.roleForm = new CdFormGroup({
-      name: new FormControl('', {
+      name: new UntypedFormControl('', {
         validators: [Validators.required],
         asyncValidators: [CdValidators.unique(this.roleService.exists, this.roleService)]
       }),
-      description: new FormControl(''),
-      scopes_permissions: new FormControl({})
+      description: new UntypedFormControl(''),
+      scopes_permissions: new UntypedFormControl({})
     });
   }
 
@@ -73,41 +67,31 @@ export class RoleFormComponent extends CdForm implements OnInit {
       {
         prop: 'scope',
         name: $localize`All`,
-        flexGrow: 2,
-        cellTemplate: this.cellScopeCheckboxTpl,
-        headerTemplate: this.headerPermissionCheckboxTpl
+        flexGrow: 2
       },
       {
         prop: 'read',
         name: $localize`Read`,
         flexGrow: 1,
-        cellClass: 'text-center',
-        cellTemplate: this.cellPermissionCheckboxTpl,
-        headerTemplate: this.headerPermissionCheckboxTpl
+        cellClass: 'text-center'
       },
       {
         prop: 'create',
         name: $localize`Create`,
         flexGrow: 1,
-        cellClass: 'text-center',
-        cellTemplate: this.cellPermissionCheckboxTpl,
-        headerTemplate: this.headerPermissionCheckboxTpl
+        cellClass: 'text-center'
       },
       {
         prop: 'update',
         name: $localize`Update`,
         flexGrow: 1,
-        cellClass: 'text-center',
-        cellTemplate: this.cellPermissionCheckboxTpl,
-        headerTemplate: this.headerPermissionCheckboxTpl
+        cellClass: 'text-center'
       },
       {
         prop: 'delete',
         name: $localize`Delete`,
         flexGrow: 1,
-        cellClass: 'text-center',
-        cellTemplate: this.cellPermissionCheckboxTpl,
-        headerTemplate: this.headerPermissionCheckboxTpl
+        cellClass: 'text-center'
       }
     ];
     if (this.router.url.startsWith('/user-management/roles/edit')) {
@@ -127,7 +111,6 @@ export class RoleFormComponent extends CdForm implements OnInit {
     // Load the scopes and initialize the default scopes/permissions data.
     this.scopeService.list().subscribe((scopes: Array<string>) => {
       this.scopes = scopes;
-      this.roleForm.get('scopes_permissions').setValue({});
 
       this.loadingReady();
     });
@@ -146,125 +129,13 @@ export class RoleFormComponent extends CdForm implements OnInit {
         ['name', 'description', 'scopes_permissions'].forEach((key) =>
           this.roleForm.get(key).setValue(resp[1][key])
         );
+        this.initialValue = resp[1]['scopes_permissions'];
 
         this.loadingReady();
       });
     });
   }
 
-  listenToChanges() {
-    // Create/Update the data which is used by the data table to display the
-    // scopes/permissions every time the form field value has been changed.
-    this.roleForm.get('scopes_permissions').valueChanges.subscribe((value) => {
-      const scopes_permissions: any[] = [];
-      _.each(this.scopes, (scope) => {
-        // Set the defaults values.
-        const scope_permission: any = { read: false, create: false, update: false, delete: false };
-        scope_permission['scope'] = scope;
-        // Apply settings from the given value if they exist.
-        if (scope in value) {
-          _.each(value[scope], (permission) => {
-            scope_permission[permission] = true;
-          });
-        }
-        scopes_permissions.push(scope_permission);
-      });
-      this.scopes_permissions = scopes_permissions;
-    });
-  }
-
-  /**
-   * Checks if the specified row checkbox needs to be rendered as checked.
-   * @param {string} scope The scope to be checked, e.g. 'cephfs', 'grafana',
-   *   'osd', 'pool' ...
-   * @return Returns true if all permissions (read, create, update, delete)
-   *   are checked for the specified scope, otherwise false.
-   */
-  isRowChecked(scope: string) {
-    const scope_permission = _.find(this.scopes_permissions, (o) => {
-      return o['scope'] === scope;
-    });
-    if (_.isUndefined(scope_permission)) {
-      return false;
-    }
-    return (
-      scope_permission['read'] &&
-      scope_permission['create'] &&
-      scope_permission['update'] &&
-      scope_permission['delete']
-    );
-  }
-
-  /**
-   * Checks if the specified header checkbox needs to be rendered as checked.
-   * @param {string} property The property/permission (read, create,
-   *   update, delete) to be checked. If 'scope' is given, all permissions
-   *   are checked.
-   * @return Returns true if specified property/permission is selected
-   *   for all scopes, otherwise false.
-   */
-  isHeaderChecked(property: string) {
-    let permissions = [property];
-    if ('scope' === property) {
-      permissions = ['read', 'create', 'update', 'delete'];
-    }
-    return permissions.every((permission) => {
-      return this.scopes_permissions.every((scope_permission) => {
-        return scope_permission[permission];
-      });
-    });
-  }
-
-  onClickCellCheckbox(scope: string, property: string, event: any = null) {
-    // Use a copy of the form field data to do not trigger the redrawing of the
-    // data table with every change.
-    const scopes_permissions = _.cloneDeep(this.roleForm.getValue('scopes_permissions'));
-    let permissions = [property];
-    if ('scope' === property) {
-      permissions = ['read', 'create', 'update', 'delete'];
-    }
-    if (!(scope in scopes_permissions)) {
-      scopes_permissions[scope] = [];
-    }
-    // Add or remove the given permission(s) depending on the click event or if no
-    // click event is given then add/remove them if they are absent/exist.
-    if (
-      (event && event.target['checked']) ||
-      !_.isEqual(permissions.sort(), _.intersection(scopes_permissions[scope], permissions).sort())
-    ) {
-      scopes_permissions[scope] = _.union(scopes_permissions[scope], permissions);
-    } else {
-      scopes_permissions[scope] = _.difference(scopes_permissions[scope], permissions);
-      if (_.isEmpty(scopes_permissions[scope])) {
-        _.unset(scopes_permissions, scope);
-      }
-    }
-    this.roleForm.get('scopes_permissions').setValue(scopes_permissions);
-  }
-
-  onClickHeaderCheckbox(property: 'scope' | 'read' | 'create' | 'update' | 'delete', event: any) {
-    // Use a copy of the form field data to do not trigger the redrawing of the
-    // data table with every change.
-    const scopes_permissions = _.cloneDeep(this.roleForm.getValue('scopes_permissions'));
-    let permissions = [property];
-    if ('scope' === property) {
-      permissions = ['read', 'create', 'update', 'delete'];
-    }
-    _.each(permissions, (permission) => {
-      _.each(this.scopes, (scope) => {
-        if (event.target['checked']) {
-          scopes_permissions[scope] = _.union(scopes_permissions[scope], [permission]);
-        } else {
-          scopes_permissions[scope] = _.difference(scopes_permissions[scope], [permission]);
-          if (_.isEmpty(scopes_permissions[scope])) {
-            _.unset(scopes_permissions, scope);
-          }
-        }
-      });
-    });
-    this.roleForm.get('scopes_permissions').setValue(scopes_permissions);
-  }
-
   getRequest(): RoleFormModel {
     const roleFormModel = new RoleFormModel();
     ['name', 'description', 'scopes_permissions'].forEach(
index 164c181dab4bb76ad865ad9ed1c2dea5746a23bf..674aaf983494fb2ee011db03ec83c8e68e5122ef 100644 (file)
       <div class="mt-4">
         <div class="text-center"
              *ngIf="(buttonName && buttonRoute) || uiConfig; else dashboardButton">
-          <button class="btn btn-primary"
+          <button class="btn btn-primary ms-1"
                   [routerLink]="buttonRoute"
                   *ngIf="!uiConfig; else configureButtonTpl"
                   i18n>{{ buttonName }}</button>
+          <button class="btn btn-light ms-1"
+                  [routerLink]="secondaryButtonRoute"
+                  *ngIf="secondaryButtonName && secondaryButtonRoute"
+                  i18n>{{ secondaryButtonName }}</button>
         </div>
       </div>
     </div>
index d26bc6db43b764ee518383e4cfb866cd80814afa..ce959e13d0bd11064a80d3d1a82648d2b0fee6b3 100644 (file)
@@ -28,6 +28,9 @@ export class ErrorComponent implements OnDestroy, OnInit {
   buttonRoute: string;
   buttonName: string;
   buttonTitle: string;
+  secondaryButtonRoute: string;
+  secondaryButtonName: string;
+  secondaryButtonTitle: string;
   component: string;
 
   constructor(
@@ -81,6 +84,9 @@ export class ErrorComponent implements OnDestroy, OnInit {
       this.buttonRoute = history.state.button_route;
       this.buttonName = history.state.button_name;
       this.buttonTitle = history.state.button_title;
+      this.secondaryButtonRoute = history.state.secondary_button_route;
+      this.secondaryButtonName = history.state.secondary_button_name;
+      this.secondaryButtonTitle = history.state.secondary_button_title;
       this.component = history.state.component;
       this.docUrl = this.docService.urlGenerator(this.section);
     } catch (error) {
index d8c1891fc2129f79c88885d536f395a8dc3def63..fe3bfc6acf9ea639f657791daa325b36d32d1e84 100644 (file)
@@ -1,7 +1,7 @@
 <block-ui>
   <cd-navigation>
     <div class="container-fluid h-100"
-         [ngClass]="{'dashboard': (router.url == '/dashboard' || router.url == '/dashboard_3')}">
+         [ngClass]="{'dashboard': (router.url == '/dashboard' || router.url == '/dashboard_3'), 'rgw-dashboard': (router.url == '/rgw/overview')}">
     <cd-context></cd-context>
       <cd-breadcrumbs></cd-breadcrumbs>
       <router-outlet></router-outlet>
index aaa369a098eaa888e997e3e5a6e702b490eb7936..9c436f7044d586dad6725ca6c93ce8bfebc498a8 100644 (file)
                      class="badge badge-warning ms-1">{{ prometheusAlertService.activeWarningAlerts }}</small>
             </a>
           </li>
+          <li routerLinkActive="active"
+              class="tc_submenuitem tc_submenuitem_upgrade"
+              *ngIf="permissions.configOpt.read">
+            <a i18n
+               routerLink="/upgrade">Upgrade</a>
+          </li>
         </ul>
       </li>
 
         <ul class="list-unstyled"
             id="gateway-nav"
             [ngbCollapse]="displayedSubMenu !== 'rgw'">
+          <li routerLinkActive="active"
+              class="tc_submenuitem tc_submenuitem_rgw_overview">
+            <a i18n
+               routerLink="/rgw/overview">Overview</a>
+          </li>
           <li routerLinkActive="active"
               class="tc_submenuitem tc_submenuitem_rgw_daemons">
             <a i18n
             <a i18n
                routerLink="/rgw/bucket">Buckets</a>
           </li>
+          <li routerLinkActive="active"
+              class="tc_submenuitem tc_submenuitem_rgw_buckets">
+            <a i18n
+               routerLink="/rgw/multisite">Multi-Site</a>
+          </li>
         </ul>
       </li>
     </ng-container>
index 64aaca65b5a4e568fc06b38fac89afef5015643c..c8873186eb84f2e4596a6e546c3c25341dd43e0c 100644 (file)
@@ -111,7 +111,12 @@ describe('NavigationComponent', () => {
       [['osd'], ['.tc_submenuitem_osds', '.tc_submenuitem_crush']],
       [
         ['configOpt'],
-        ['.tc_submenuitem_configuration', '.tc_submenuitem_modules', '.tc_submenuitem_users']
+        [
+          '.tc_submenuitem_configuration',
+          '.tc_submenuitem_modules',
+          '.tc_submenuitem_users',
+          '.tc_submenuitem_upgrade'
+        ]
       ],
       [['log'], ['.tc_submenuitem_log']],
       [['prometheus'], ['.tc_submenuitem_monitoring']],
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume-group.service.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume-group.service.spec.ts
new file mode 100644 (file)
index 0000000..13dad14
--- /dev/null
@@ -0,0 +1,23 @@
+import { TestBed } from '@angular/core/testing';
+
+import { configureTestBed } from '~/testing/unit-test-helper';
+import { CephfsSubvolumeGroupService } from './cephfs-subvolume-group.service';
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+
+describe('CephfsSubvolumeGroupService', () => {
+  let service: CephfsSubvolumeGroupService;
+
+  configureTestBed({
+    imports: [HttpClientTestingModule],
+    providers: [CephfsSubvolumeGroupService]
+  });
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({});
+    service = TestBed.inject(CephfsSubvolumeGroupService);
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume-group.service.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume-group.service.ts
new file mode 100644 (file)
index 0000000..db7fcfa
--- /dev/null
@@ -0,0 +1,79 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable, of } from 'rxjs';
+import { CephfsSubvolumeGroup } from '../models/cephfs-subvolumegroup.model';
+import _ from 'lodash';
+import { mapTo, catchError } from 'rxjs/operators';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class CephfsSubvolumeGroupService {
+  baseURL = 'api/cephfs/subvolume/group';
+
+  constructor(private http: HttpClient) {}
+
+  get(volName: string): Observable<CephfsSubvolumeGroup[]> {
+    return this.http.get<CephfsSubvolumeGroup[]>(`${this.baseURL}/${volName}`);
+  }
+
+  create(
+    volName: string,
+    groupName: string,
+    poolName: string,
+    size: string,
+    uid: number,
+    gid: number,
+    mode: string
+  ) {
+    return this.http.post(
+      this.baseURL,
+      {
+        vol_name: volName,
+        group_name: groupName,
+        pool_layout: poolName,
+        size: size,
+        uid: uid,
+        gid: gid,
+        mode: mode
+      },
+      { observe: 'response' }
+    );
+  }
+
+  info(volName: string, groupName: string) {
+    return this.http.get(`${this.baseURL}/${volName}/info`, {
+      params: {
+        group_name: groupName
+      }
+    });
+  }
+
+  exists(groupName: string, volName: string) {
+    return this.info(volName, groupName).pipe(
+      mapTo(true),
+      catchError((error: Event) => {
+        if (_.isFunction(error.preventDefault)) {
+          error.preventDefault();
+        }
+        return of(false);
+      })
+    );
+  }
+
+  update(volName: string, groupName: string, size: string) {
+    return this.http.put(`${this.baseURL}/${volName}`, {
+      group_name: groupName,
+      size: size
+    });
+  }
+
+  remove(volName: string, groupName: string) {
+    return this.http.delete(`${this.baseURL}/${volName}`, {
+      params: {
+        group_name: groupName
+      },
+      observe: 'response'
+    });
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume.service.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume.service.spec.ts
new file mode 100644 (file)
index 0000000..e40e9a5
--- /dev/null
@@ -0,0 +1,43 @@
+import { TestBed } from '@angular/core/testing';
+
+import { CephfsSubvolumeService } from './cephfs-subvolume.service';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('CephfsSubvolumeService', () => {
+  let service: CephfsSubvolumeService;
+  let httpTesting: HttpTestingController;
+
+  configureTestBed({
+    imports: [HttpClientTestingModule],
+    providers: [CephfsSubvolumeService]
+  });
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({});
+    service = TestBed.inject(CephfsSubvolumeService);
+    httpTesting = TestBed.inject(HttpTestingController);
+  });
+
+  afterEach(() => {
+    httpTesting.verify();
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+
+  it('should call get', () => {
+    service.get('testFS').subscribe();
+    const req = httpTesting.expectOne('api/cephfs/subvolume/testFS?group_name=');
+    expect(req.request.method).toBe('GET');
+  });
+
+  it('should call remove', () => {
+    service.remove('testFS', 'testSubvol').subscribe();
+    const req = httpTesting.expectOne(
+      'api/cephfs/subvolume/testFS?subvol_name=testSubvol&group_name=&retain_snapshots=false'
+    );
+    expect(req.request.method).toBe('DELETE');
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume.service.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/cephfs-subvolume.service.ts
new file mode 100644 (file)
index 0000000..4c16772
--- /dev/null
@@ -0,0 +1,96 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { CephfsSubvolume } from '../models/cephfs-subvolume.model';
+import { Observable, of } from 'rxjs';
+import { catchError, mapTo } from 'rxjs/operators';
+import _ from 'lodash';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class CephfsSubvolumeService {
+  baseURL = 'api/cephfs/subvolume';
+
+  constructor(private http: HttpClient) {}
+
+  get(fsName: string, subVolumeGroupName: string = ''): Observable<CephfsSubvolume[]> {
+    return this.http.get<CephfsSubvolume[]>(`${this.baseURL}/${fsName}`, {
+      params: {
+        group_name: subVolumeGroupName
+      }
+    });
+  }
+
+  create(
+    fsName: string,
+    subVolumeName: string,
+    subVolumeGroupName: string,
+    poolName: string,
+    size: string,
+    uid: number,
+    gid: number,
+    mode: string,
+    namespace: boolean
+  ) {
+    return this.http.post(
+      this.baseURL,
+      {
+        vol_name: fsName,
+        subvol_name: subVolumeName,
+        group_name: subVolumeGroupName,
+        pool_layout: poolName,
+        size: size,
+        uid: uid,
+        gid: gid,
+        mode: mode,
+        namespace_isolated: namespace
+      },
+      { observe: 'response' }
+    );
+  }
+
+  info(fsName: string, subVolumeName: string, subVolumeGroupName: string = '') {
+    return this.http.get(`${this.baseURL}/${fsName}/info`, {
+      params: {
+        subvol_name: subVolumeName,
+        group_name: subVolumeGroupName
+      }
+    });
+  }
+
+  remove(
+    fsName: string,
+    subVolumeName: string,
+    subVolumeGroupName: string = '',
+    retainSnapshots: boolean = false
+  ) {
+    return this.http.delete(`${this.baseURL}/${fsName}`, {
+      params: {
+        subvol_name: subVolumeName,
+        group_name: subVolumeGroupName,
+        retain_snapshots: retainSnapshots
+      },
+      observe: 'response'
+    });
+  }
+
+  exists(subVolumeName: string, fsName: string) {
+    return this.info(fsName, subVolumeName).pipe(
+      mapTo(true),
+      catchError((error: Event) => {
+        if (_.isFunction(error.preventDefault)) {
+          error.preventDefault();
+        }
+        return of(false);
+      })
+    );
+  }
+
+  update(fsName: string, subVolumeName: string, size: string, subVolumeGroupName: string = '') {
+    return this.http.put(`${this.baseURL}/${fsName}`, {
+      subvol_name: subVolumeName,
+      size: size,
+      group_name: subVolumeGroupName
+    });
+  }
+}
index 58395cd6705f6ca52fc2ea85f6f617d71956ded4..90fa98845b439649e507da5e23b30ec21934c7d0 100644 (file)
@@ -95,4 +95,20 @@ describe('CephfsService', () => {
     expect(req.request.method).toBe('PUT');
     expect(req.request.body).toEqual({ max_bytes: 1024, max_files: 10 });
   });
+
+  it('should rename the cephfs volume', () => {
+    const volName = 'testvol';
+    const newVolName = 'newtestvol';
+    service.rename(volName, newVolName).subscribe();
+    const req = httpTesting.expectOne('api/cephfs/rename');
+    expect(req.request.method).toBe('PUT');
+    expect(req.request.body).toEqual({ name: 'testvol', new_name: 'newtestvol' });
+  });
+
+  it('should remove the cephfs volume', () => {
+    const volName = 'testvol';
+    service.remove(volName).subscribe();
+    const req = httpTesting.expectOne(`api/cephfs/remove/${volName}`);
+    expect(req.request.method).toBe('DELETE');
+  });
 });
index 02f31ca7b56b82ac45f899efe289aa7c9d28889e..6142d7359de26614225c8d2476dd1772f41d3e73 100644 (file)
@@ -73,4 +73,34 @@ export class CephfsService {
       params
     });
   }
+
+  create(name: string, serviceSpec: object) {
+    return this.http.post(
+      this.baseURL,
+      { name: name, service_spec: serviceSpec },
+      {
+        observe: 'response'
+      }
+    );
+  }
+
+  isCephFsPool(pool: any) {
+    return _.indexOf(pool.application_metadata, 'cephfs') !== -1 && !pool.pool_name.includes('/');
+  }
+
+  remove(name: string) {
+    return this.http.delete(`${this.baseURL}/remove/${name}`, {
+      observe: 'response'
+    });
+  }
+
+  rename(vol_name: string, new_vol_name: string) {
+    let requestBody = {
+      name: vol_name,
+      new_name: new_vol_name
+    };
+    return this.http.put(`${this.baseURL}/rename`, requestBody, {
+      observe: 'response'
+    });
+  }
 }
index a66ed7edb1983d1a144eeab89d6dd4aea4825f8b..0912e693139f5d8687cb30a8485d55e98d2f7113 100644 (file)
@@ -1,7 +1,9 @@
 import { HttpClient } from '@angular/common/http';
 import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
 
 import { cdEncode } from '~/app/shared/decorators/cd-encode';
+import { Daemon } from '../models/daemon.interface';
 
 @cdEncode
 @Injectable({
@@ -25,4 +27,10 @@ export class DaemonService {
       }
     );
   }
+
+  list(daemonTypes: string[]): Observable<Daemon[]> {
+    return this.http.get<Daemon[]>(this.url, {
+      params: { daemon_types: daemonTypes }
+    });
+  }
 }
index e4b6476f2c08b49379d9db292542fba40b680e98..49b48cd6cfcfc614acafe96edd95b50ef6d0a081 100644 (file)
@@ -2,6 +2,7 @@ import { HttpClientTestingModule, HttpTestingController } from '@angular/common/
 import { fakeAsync, TestBed, tick } from '@angular/core/testing';
 
 import { configureTestBed } from '~/testing/unit-test-helper';
+import { CdTableFetchDataContext } from '../models/cd-table-fetch-data-context';
 import { HostService } from './host.service';
 
 describe('HostService', () => {
@@ -27,13 +28,15 @@ describe('HostService', () => {
   });
 
   it('should call list', fakeAsync(() => {
-    let result;
-    service.list('true').subscribe((resp) => (result = resp));
-    const req = httpTesting.expectOne('api/host?facts=true');
+    let result: any[] = [{}, {}];
+    const hostContext = new CdTableFetchDataContext(() => undefined);
+    service.list(hostContext.toParams(), 'true').subscribe((resp) => (result = resp));
+    const req = httpTesting.expectOne('api/host?offset=0&limit=10&search=&sort=%2Bname&facts=true');
     expect(req.request.method).toBe('GET');
-    req.flush(['foo', 'bar']);
+    req.flush([{ foo: 1 }, { bar: 2 }]);
     tick();
-    expect(result).toEqual(['foo', 'bar']);
+    expect(result[0].foo).toEqual(1);
+    expect(result[1].bar).toEqual(2);
   }));
 
   it('should make a GET request on the devices endpoint when requesting devices', () => {
index 7adbd0b104c27b83d1031b83105dd03f5131ef8e..3bb569575836e4aec8d3f41b5fd7bf3ee3d3e824 100644 (file)
@@ -27,11 +27,22 @@ export class HostService extends ApiClient {
     super();
   }
 
-  list(facts: string): Observable<object[]> {
-    return this.http.get<object[]>(this.baseURL, {
-      headers: { Accept: this.getVersionHeaderValue(1, 2) },
-      params: { facts: facts }
-    });
+  list(params: any, facts: string): Observable<object[]> {
+    params = params.set('facts', facts);
+    return this.http
+      .get<object[]>(this.baseURL, {
+        headers: { Accept: this.getVersionHeaderValue(1, 2) },
+        params: params,
+        observe: 'response'
+      })
+      .pipe(
+        map((response: any) => {
+          return response['body'].map((host: any) => {
+            host['headers'] = response.headers;
+            return host;
+          });
+        })
+      );
   }
 
   create(hostname: string, addr: string, labels: string[], status: string) {
index 340f89ca38f8ff9f9d7d5d83ac5de8f18ce8f4a5..6917b37662a6f7cc3913c9bfb7b865a1059201cc 100644 (file)
@@ -1,7 +1,7 @@
 import { HttpClient } from '@angular/common/http';
 import { Injectable } from '@angular/core';
 
-import { Observable } from 'rxjs';
+import { Observable, Subscription, timer } from 'rxjs';
 import { map } from 'rxjs/operators';
 
 import { AlertmanagerSilence } from '../models/alertmanager-silence';
@@ -10,11 +10,19 @@ import {
   AlertmanagerNotification,
   PrometheusRuleGroup
 } from '../models/prometheus-alerts';
+import moment from 'moment';
 
 @Injectable({
   providedIn: 'root'
 })
 export class PrometheusService {
+  timerGetPrometheusDataSub: Subscription;
+  timerTime = 30000;
+  readonly lastHourDateObject = {
+    start: moment().unix() - 3600,
+    end: moment().unix(),
+    step: 14
+  };
   private baseURL = 'api/prometheus';
   private settingsKey = {
     alertmanager: 'ui-api/prometheus/alertmanager-api-host',
@@ -24,6 +32,12 @@ export class PrometheusService {
 
   constructor(private http: HttpClient) {}
 
+  unsubscribe() {
+    if (this.timerGetPrometheusDataSub) {
+      this.timerGetPrometheusDataSub.unsubscribe();
+    }
+  }
+
   getPrometheusData(params: any): any {
     return this.http.get<any>(`${this.baseURL}/data`, { params });
   }
@@ -115,4 +129,64 @@ export class PrometheusService {
   private getSettingsValue(data: any): string {
     return data.value || data.instance || '';
   }
+
+  getPrometheusQueriesData(
+    selectedTime: any,
+    queries: any,
+    queriesResults: any,
+    checkNan?: boolean
+  ) {
+    this.ifPrometheusConfigured(() => {
+      if (this.timerGetPrometheusDataSub) {
+        this.timerGetPrometheusDataSub.unsubscribe();
+      }
+      this.timerGetPrometheusDataSub = timer(0, this.timerTime).subscribe(() => {
+        selectedTime = this.updateTimeStamp(selectedTime);
+
+        for (const queryName in queries) {
+          if (queries.hasOwnProperty(queryName)) {
+            const query = queries[queryName];
+            this.getPrometheusData({
+              params: encodeURIComponent(query),
+              start: selectedTime['start'],
+              end: selectedTime['end'],
+              step: selectedTime['step']
+            }).subscribe((data: any) => {
+              if (data.result.length) {
+                queriesResults[queryName] = data.result[0].values;
+              }
+              if (
+                queriesResults[queryName] !== undefined &&
+                queriesResults[queryName] !== '' &&
+                checkNan
+              ) {
+                queriesResults[queryName].forEach((valueArray: string[]) => {
+                  if (valueArray.includes('NaN')) {
+                    const index = valueArray.indexOf('NaN');
+                    if (index !== -1) {
+                      valueArray[index] = '0';
+                    }
+                  }
+                });
+              }
+            });
+          }
+        }
+      });
+    });
+    return queriesResults;
+  }
+
+  private updateTimeStamp(selectedTime: any): any {
+    let formattedDate = {};
+    let secondsAgo = selectedTime['end'] - selectedTime['start'];
+    const date: number = moment().unix() - secondsAgo;
+    const dateNow: number = moment().unix();
+    formattedDate = {
+      start: date,
+      end: dateNow,
+      step: selectedTime['step']
+    };
+    return formattedDate;
+  }
 }
index 5bafc9e63d37119da657b6a40fc67b05b182d8c6..25b8733d079eac80d4f6c1656741cf14578e16ae 100644 (file)
@@ -59,7 +59,9 @@ describe('RbdService', () => {
     /* tslint:disable:no-empty */
     const context = new CdTableFetchDataContext(() => {});
     service.list(context.toParams()).subscribe();
-    const req = httpTesting.expectOne('api/block/image?offset=0&limit=10&search=&sort=+name');
+    const req = httpTesting.expectOne((req) => {
+      return 'api/block/image?offset=0&limit=-1&search=&sort=+name' && req.method === 'GET';
+    });
     expect(req.request.method).toBe('GET');
   });
 
index 315c8b7560f1718f24091cc08e15b7bd86ec7bb7..7207d0b5ca72c88dd89102117239b6c0e1f27929 100644 (file)
@@ -43,6 +43,12 @@ export class RgwBucketService extends ApiClient {
     });
   }
 
+  getTotalBucketsAndUsersLength() {
+    return this.rgwDaemonService.request((params: HttpParams) => {
+      return this.http.get(`ui-${this.url}/buckets_and_users_count`, { params: params });
+    });
+  }
+
   create(
     bucket: string,
     uid: string,
index 5c513c7f1fa1c894790c8007bf35488d4d8a6fa8..a6007404681d1032ac52ffa7bc50fd509e38d060 100644 (file)
@@ -79,4 +79,15 @@ export class RgwDaemonService {
       })
     );
   }
+
+  setMultisiteConfig(realm_name: string, zonegroup_name: string, zone_name: string) {
+    return this.request((params: HttpParams) => {
+      params = params.appendAll({
+        realm_name: realm_name,
+        zonegroup_name: zonegroup_name,
+        zone_name: zone_name
+      });
+      return this.http.put(`${this.url}/set_multisite_config`, null, { params: params });
+    });
+  }
 }
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-multisite.service.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-multisite.service.ts
new file mode 100644 (file)
index 0000000..d36c3a2
--- /dev/null
@@ -0,0 +1,32 @@
+import { HttpClient, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { RgwRealm, RgwZone, RgwZonegroup } from '~/app/ceph/rgw/models/rgw-multisite';
+import { RgwDaemonService } from './rgw-daemon.service';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class RgwMultisiteService {
+  private url = 'ui-api/rgw/multisite';
+
+  constructor(private http: HttpClient, public rgwDaemonService: RgwDaemonService) {}
+
+  migrate(realm: RgwRealm, zonegroup: RgwZonegroup, zone: RgwZone) {
+    return this.rgwDaemonService.request((params: HttpParams) => {
+      params = params.appendAll({
+        realm_name: realm.name,
+        zonegroup_name: zonegroup.name,
+        zone_name: zone.name,
+        zonegroup_endpoints: zonegroup.endpoints,
+        zone_endpoints: zone.endpoints,
+        access_key: zone.system_key.access_key,
+        secret_key: zone.system_key.secret_key
+      });
+      return this.http.put(`${this.url}/migrate`, null, { params: params });
+    });
+  }
+
+  getSyncStatus() {
+    return this.http.get(`${this.url}/sync_status`);
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.spec.ts
new file mode 100644 (file)
index 0000000..3595514
--- /dev/null
@@ -0,0 +1,22 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { TestBed } from '@angular/core/testing';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+import { RgwRealmService } from './rgw-realm.service';
+
+describe('RgwRealmService', () => {
+  let service: RgwRealmService;
+
+  configureTestBed({
+    imports: [HttpClientTestingModule]
+  });
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({});
+    service = TestBed.inject(RgwRealmService);
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-realm.service.ts
new file mode 100644 (file)
index 0000000..e81731c
--- /dev/null
@@ -0,0 +1,84 @@
+import { HttpClient, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+import { RgwRealm } from '~/app/ceph/rgw/models/rgw-multisite';
+import { Icons } from '../enum/icons.enum';
+import { RgwDaemonService } from './rgw-daemon.service';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class RgwRealmService {
+  private url = 'api/rgw/realm';
+
+  constructor(private http: HttpClient, public rgwDaemonService: RgwDaemonService) {}
+
+  create(realm: RgwRealm, defaultRealm: boolean) {
+    let requestBody = {
+      realm_name: realm.name,
+      default: defaultRealm
+    };
+    return this.http.post(`${this.url}`, requestBody);
+  }
+
+  update(realm: RgwRealm, defaultRealm: boolean, newRealmName: string) {
+    let requestBody = {
+      realm_name: realm.name,
+      default: defaultRealm,
+      new_realm_name: newRealmName
+    };
+    return this.http.put(`${this.url}/${realm.name}`, requestBody);
+  }
+
+  list(): Observable<object> {
+    return this.http.get<object>(`${this.url}`);
+  }
+
+  get(realm: RgwRealm): Observable<object> {
+    return this.http.get(`${this.url}/${realm.name}`);
+  }
+
+  getAllRealmsInfo(): Observable<object> {
+    return this.http.get(`${this.url}/get_all_realms_info`);
+  }
+
+  delete(realmName: string): Observable<any> {
+    let params = new HttpParams();
+    params = params.appendAll({
+      realm_name: realmName
+    });
+    return this.http.delete(`${this.url}/${realmName}`, { params: params });
+  }
+
+  getRealmTree(realm: RgwRealm, defaultRealmId: string) {
+    let nodes = {};
+    let realmIds = [];
+    nodes['id'] = realm.id;
+    realmIds.push(realm.id);
+    nodes['name'] = realm.name;
+    nodes['info'] = realm;
+    nodes['is_default'] = realm.id === defaultRealmId ? true : false;
+    nodes['icon'] = Icons.reweight;
+    nodes['type'] = 'realm';
+    return {
+      nodes: nodes,
+      realmIds: realmIds
+    };
+  }
+
+  importRealmToken(realm_token: string, zone_name: string, port: number, placementSpec: object) {
+    let requestBody = {
+      realm_token: realm_token,
+      zone_name: zone_name,
+      port: port,
+      placement_spec: placementSpec
+    };
+    return this.http.post(`${this.url}/import_realm_token`, requestBody);
+  }
+
+  getRealmTokens() {
+    return this.rgwDaemonService.request(() => {
+      return this.http.get(`${this.url}/get_realm_tokens`);
+    });
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zone.service.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zone.service.spec.ts
new file mode 100644 (file)
index 0000000..24cbcc5
--- /dev/null
@@ -0,0 +1,22 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { TestBed } from '@angular/core/testing';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+import { RgwZoneService } from './rgw-zone.service';
+
+describe('RgwZoneService', () => {
+  let service: RgwZoneService;
+
+  configureTestBed({
+    imports: [HttpClientTestingModule]
+  });
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({});
+    service = TestBed.inject(RgwZoneService);
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zone.service.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zone.service.ts
new file mode 100644 (file)
index 0000000..0287781
--- /dev/null
@@ -0,0 +1,168 @@
+import { HttpClient, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+import { RgwRealm, RgwZone, RgwZonegroup } from '~/app/ceph/rgw/models/rgw-multisite';
+import { Icons } from '../enum/icons.enum';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class RgwZoneService {
+  private url = 'api/rgw/zone';
+
+  constructor(private http: HttpClient) {}
+
+  create(
+    zone: RgwZone,
+    zonegroup: RgwZonegroup,
+    defaultZone: boolean,
+    master: boolean,
+    endpoints: string
+  ) {
+    let params = new HttpParams();
+    params = params.appendAll({
+      zone_name: zone.name,
+      zonegroup_name: zonegroup.name,
+      default: defaultZone,
+      master: master,
+      zone_endpoints: endpoints,
+      access_key: zone.system_key.access_key,
+      secret_key: zone.system_key.secret_key
+    });
+    return this.http.post(`${this.url}`, null, { params: params });
+  }
+
+  list(): Observable<object> {
+    return this.http.get<object>(`${this.url}`);
+  }
+
+  get(zone: RgwZone): Observable<object> {
+    return this.http.get(`${this.url}/${zone.name}`);
+  }
+
+  getAllZonesInfo(): Observable<object> {
+    return this.http.get(`${this.url}/get_all_zones_info`);
+  }
+
+  delete(
+    zoneName: string,
+    deletePools: boolean,
+    pools: Set<string>,
+    zonegroupName: string
+  ): Observable<any> {
+    let params = new HttpParams();
+    params = params.appendAll({
+      zone_name: zoneName,
+      delete_pools: deletePools,
+      pools: Array.from(pools.values()),
+      zonegroup_name: zonegroupName
+    });
+    return this.http.delete(`${this.url}/${zoneName}`, { params: params });
+  }
+
+  update(
+    zone: RgwZone,
+    zonegroup: RgwZonegroup,
+    newZoneName: string,
+    defaultZone?: boolean,
+    master?: boolean,
+    endpoints?: string,
+    placementTarget?: string,
+    dataPool?: string,
+    indexPool?: string,
+    dataExtraPool?: string,
+    storageClass?: string,
+    dataPoolClass?: string,
+    compression?: string
+  ) {
+    let requestBody = {
+      zone_name: zone.name,
+      zonegroup_name: zonegroup.name,
+      new_zone_name: newZoneName,
+      default: defaultZone,
+      master: master,
+      zone_endpoints: endpoints,
+      access_key: zone.system_key.access_key,
+      secret_key: zone.system_key.secret_key,
+      placement_target: placementTarget,
+      data_pool: dataPool,
+      index_pool: indexPool,
+      data_extra_pool: dataExtraPool,
+      storage_class: storageClass,
+      data_pool_class: dataPoolClass,
+      compression: compression
+    };
+    return this.http.put(`${this.url}/${zone.name}`, requestBody);
+  }
+
+  getZoneTree(
+    zone: RgwZone,
+    defaultZoneId: string,
+    zones: RgwZone[],
+    zonegroup?: RgwZonegroup,
+    realm?: RgwRealm
+  ) {
+    let nodes = {};
+    let zoneIds = [];
+    nodes['id'] = zone.id;
+    zoneIds.push(zone.id);
+    nodes['name'] = zone.name;
+    nodes['type'] = 'zone';
+    nodes['name'] = zone.name;
+    nodes['info'] = zone;
+    nodes['icon'] = Icons.deploy;
+    nodes['zone_zonegroup'] = zonegroup;
+    nodes['parent'] = zonegroup ? zonegroup.name : '';
+    nodes['second_parent'] = realm ? realm.name : '';
+    nodes['is_default'] = zone.id === defaultZoneId ? true : false;
+    nodes['endpoints'] = zone.endpoints;
+    nodes['is_master'] = zonegroup && zonegroup.master_zone === zone.id ? true : false;
+    nodes['type'] = 'zone';
+    const zoneNames = zones.map((zone: RgwZone) => {
+      return zone['name'];
+    });
+    nodes['secondary_zone'] = !zoneNames.includes(zone.name) ? true : false;
+    const zoneInfo = zones.filter((zoneInfo) => zoneInfo.name === zone.name);
+    if (zoneInfo && zoneInfo.length > 0) {
+      const access_key = zoneInfo[0].system_key['access_key'];
+      const secret_key = zoneInfo[0].system_key['secret_key'];
+      nodes['access_key'] = access_key ? access_key : '';
+      nodes['secret_key'] = secret_key ? secret_key : '';
+      nodes['user'] = access_key && access_key !== '' ? true : false;
+    }
+    if (nodes['access_key'] === '' || nodes['access_key'] === 'null') {
+      nodes['show_warning'] = true;
+      nodes['warning_message'] = 'Access/Secret keys not found';
+    } else {
+      nodes['show_warning'] = false;
+    }
+    if (nodes['endpoints'] && nodes['endpoints'].length === 0) {
+      nodes['show_warning'] = true;
+      nodes['warning_message'] = nodes['warning_message'] + '\n' + 'Endpoints not configured';
+    }
+    return {
+      nodes: nodes,
+      zoneIds: zoneIds
+    };
+  }
+
+  getPoolNames() {
+    return this.http.get(`${this.url}/get_pool_names`);
+  }
+
+  createSystemUser(userName: string, zone: string) {
+    let requestBody = {
+      userName: userName,
+      zoneName: zone
+    };
+    return this.http.put(`${this.url}/create_system_user`, requestBody);
+  }
+
+  getUserList(zoneName: string) {
+    let params = new HttpParams();
+    params = params.appendAll({
+      zoneName: zoneName
+    });
+    return this.http.get(`${this.url}/get_user_list`, { params: params });
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zonegroup.service.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zonegroup.service.spec.ts
new file mode 100644 (file)
index 0000000..aec80e0
--- /dev/null
@@ -0,0 +1,22 @@
+import { HttpClientTestingModule } from '@angular/common/http/testing';
+import { TestBed } from '@angular/core/testing';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+import { RgwZonegroupService } from './rgw-zonegroup.service';
+
+describe('RgwZonegroupService', () => {
+  let service: RgwZonegroupService;
+
+  configureTestBed({
+    imports: [HttpClientTestingModule]
+  });
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({});
+    service = TestBed.inject(RgwZonegroupService);
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zonegroup.service.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-zonegroup.service.ts
new file mode 100644 (file)
index 0000000..7f795c1
--- /dev/null
@@ -0,0 +1,93 @@
+import { HttpClient, HttpParams } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+import { RgwRealm, RgwZonegroup } from '~/app/ceph/rgw/models/rgw-multisite';
+import { Icons } from '../enum/icons.enum';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class RgwZonegroupService {
+  private url = 'api/rgw/zonegroup';
+
+  constructor(private http: HttpClient) {}
+
+  create(realm: RgwRealm, zonegroup: RgwZonegroup, defaultZonegroup: boolean, master: boolean) {
+    let params = new HttpParams();
+    params = params.appendAll({
+      realm_name: realm.name,
+      zonegroup_name: zonegroup.name,
+      default: defaultZonegroup,
+      master: master,
+      zonegroup_endpoints: zonegroup.endpoints
+    });
+    return this.http.post(`${this.url}`, null, { params: params });
+  }
+
+  update(
+    realm: RgwRealm,
+    zonegroup: RgwZonegroup,
+    newZonegroupName: string,
+    defaultZonegroup?: boolean,
+    master?: boolean,
+    removedZones?: string[],
+    addedZones?: string[]
+  ) {
+    let requestBody = {
+      zonegroup_name: zonegroup.name,
+      realm_name: realm.name,
+      new_zonegroup_name: newZonegroupName,
+      default: defaultZonegroup,
+      master: master,
+      zonegroup_endpoints: zonegroup.endpoints,
+      placement_targets: zonegroup.placement_targets,
+      remove_zones: removedZones,
+      add_zones: addedZones
+    };
+    return this.http.put(`${this.url}/${zonegroup.name}`, requestBody);
+  }
+
+  list(): Observable<object> {
+    return this.http.get<object>(`${this.url}`);
+  }
+
+  get(zonegroup: RgwZonegroup): Observable<object> {
+    return this.http.get(`${this.url}/${zonegroup.name}`);
+  }
+
+  getAllZonegroupsInfo(): Observable<object> {
+    return this.http.get(`${this.url}/get_all_zonegroups_info`);
+  }
+
+  delete(zonegroupName: string, deletePools: boolean, pools: Set<string>): Observable<any> {
+    let params = new HttpParams();
+    params = params.appendAll({
+      zonegroup_name: zonegroupName,
+      delete_pools: deletePools,
+      pools: Array.from(pools.values())
+    });
+    return this.http.delete(`${this.url}/${zonegroupName}`, { params: params });
+  }
+
+  getZonegroupTree(zonegroup: RgwZonegroup, defaultZonegroupId: string, realm?: RgwRealm) {
+    let nodes = {};
+    nodes['id'] = zonegroup.id;
+    nodes['name'] = zonegroup.name;
+    nodes['info'] = zonegroup;
+    nodes['icon'] = Icons.cubes;
+    nodes['is_master'] = zonegroup.is_master;
+    nodes['parent'] = realm ? realm.name : '';
+    nodes['is_default'] = zonegroup.id === defaultZonegroupId ? true : false;
+    nodes['type'] = 'zonegroup';
+    nodes['endpoints'] = zonegroup.endpoints;
+    nodes['master_zone'] = zonegroup.master_zone;
+    nodes['zones'] = zonegroup.zones;
+    nodes['placement_targets'] = zonegroup.placement_targets;
+    nodes['default_placement'] = zonegroup.default_placement;
+    if (nodes['endpoints'].length === 0) {
+      nodes['show_warning'] = true;
+      nodes['warning_message'] = 'Endpoints not configured';
+    }
+    return nodes;
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/upgrade.service.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/upgrade.service.spec.ts
new file mode 100644 (file)
index 0000000..5acd490
--- /dev/null
@@ -0,0 +1,67 @@
+import { UpgradeService } from './upgrade.service';
+import { configureTestBed } from '~/testing/unit-test-helper';
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
+import { TestBed } from '@angular/core/testing';
+import { SummaryService } from '../services/summary.service';
+import { BehaviorSubject } from 'rxjs';
+
+export class SummaryServiceMock {
+  summaryDataSource = new BehaviorSubject({
+    version:
+      'ceph version 18.1.3-12222-gcd0cd7cb ' +
+      '(b8193bb4cda16ccc5b028c3e1df62bc72350a15d) reef (dev)'
+  });
+  summaryData$ = this.summaryDataSource.asObservable();
+
+  subscribe(call: any) {
+    return this.summaryData$.subscribe(call);
+  }
+}
+
+describe('UpgradeService', () => {
+  let service: UpgradeService;
+  let httpTesting: HttpTestingController;
+
+  configureTestBed({
+    imports: [HttpClientTestingModule],
+    providers: [UpgradeService, { provide: SummaryService, useClass: SummaryServiceMock }]
+  });
+
+  beforeEach(() => {
+    service = TestBed.inject(UpgradeService);
+    httpTesting = TestBed.inject(HttpTestingController);
+  });
+
+  afterEach(() => {
+    httpTesting.verify();
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+
+  it('should call upgrade list', () => {
+    service.list().subscribe();
+    const req = httpTesting.expectOne('api/cluster/upgrade');
+    expect(req.request.method).toBe('GET');
+  });
+
+  it('should not show any version if the registry versions are older than the cluster version', () => {
+    const upgradeInfoPayload = {
+      image: 'quay.io/ceph-test/ceph',
+      registry: 'quay.io',
+      versions: ['18.1.0', '18.1.1', '18.1.2']
+    };
+    const expectedVersions: string[] = [];
+    expect(service.versionAvailableForUpgrades(upgradeInfoPayload).versions).toEqual(
+      expectedVersions
+    );
+  });
+
+  it('should start the upgrade', () => {
+    service.start('18.1.0').subscribe();
+    const req = httpTesting.expectOne('api/cluster/upgrade/start');
+    expect(req.request.method).toBe('POST');
+    expect(req.request.body).toEqual({ version: '18.1.0' });
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/upgrade.service.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/upgrade.service.ts
new file mode 100644 (file)
index 0000000..9aa25aa
--- /dev/null
@@ -0,0 +1,78 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { ApiClient } from './api-client';
+import { map } from 'rxjs/operators';
+import { SummaryService } from '../services/summary.service';
+import { UpgradeInfoInterface, UpgradeStatusInterface } from '../models/upgrade.interface';
+import { Observable } from 'rxjs';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class UpgradeService extends ApiClient {
+  baseURL = 'api/cluster/upgrade';
+
+  upgradableServiceTypes = [
+    'mgr',
+    'mon',
+    'crash',
+    'osd',
+    'mds',
+    'rgw',
+    'rbd-mirror',
+    'cephfs-mirror',
+    'iscsi',
+    'nfs'
+  ];
+
+  constructor(private http: HttpClient, private summaryService: SummaryService) {
+    super();
+  }
+
+  list() {
+    return this.http.get(this.baseURL).pipe(
+      map((resp: UpgradeInfoInterface) => {
+        return this.versionAvailableForUpgrades(resp);
+      })
+    );
+  }
+
+  // Filter out versions that are older than the current cluster version
+  // Only allow upgrades to the same major version
+  versionAvailableForUpgrades(upgradeInfo: UpgradeInfoInterface): UpgradeInfoInterface {
+    let version = '';
+    this.summaryService.subscribe((summary) => {
+      version = summary.version.replace('ceph version ', '').split('-')[0];
+    });
+
+    const upgradableVersions = upgradeInfo.versions.filter((targetVersion) => {
+      const cVersion = version.split('.');
+      const tVersion = targetVersion.split('.');
+      return (
+        cVersion[0] === tVersion[0] && (cVersion[1] < tVersion[1] || cVersion[2] < tVersion[2])
+      );
+    });
+    upgradeInfo.versions = upgradableVersions.sort();
+    return upgradeInfo;
+  }
+
+  start(version?: string, image?: string) {
+    return this.http.post(`${this.baseURL}/start`, { image: image, version: version });
+  }
+
+  pause() {
+    return this.http.put(`${this.baseURL}/pause`, null);
+  }
+
+  resume() {
+    return this.http.put(`${this.baseURL}/resume`, null);
+  }
+
+  stop() {
+    return this.http.put(`${this.baseURL}/stop`, null);
+  }
+
+  status(): Observable<UpgradeStatusInterface> {
+    return this.http.get<UpgradeStatusInterface>(`${this.baseURL}/status`);
+  }
+}
index be8096427a6c442eccb793b05a8f4c913816ec35..30f8b530a59c5fc170688e0462f15f58dbbaf74f 100644 (file)
@@ -1,6 +1,7 @@
 <ngb-alert type="{{ bootstrapClass }}"
            [dismissible]="dismissible"
-           (closed)="onClose()">
+           (closed)="onClose()"
+           [ngClass]="spacingClass">
   <table>
     <ng-container *ngIf="size === 'normal'; else slim">
       <tr>
index 51088840e3334f82f895553c935152abeb1bbf74..cc2024baa23359f5a83e88c7bec5e0dd40891738 100644 (file)
@@ -24,6 +24,8 @@ export class AlertPanelComponent implements OnInit {
   showTitle = true;
   @Input()
   dismissible = false;
+  @Input()
+  spacingClass = '';
 
   /**
    * The event that is triggered when the close button (x) has been
index a578f03940273e2f679b0f199b2b82cabe58818a..64563ea2c3bbe76a6b2a8012b56605583a8bcc42 100644 (file)
@@ -1,5 +1,5 @@
 import { Location } from '@angular/common';
-import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
 
 import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
 
@@ -8,12 +8,16 @@ import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
   templateUrl: './back-button.component.html',
   styleUrls: ['./back-button.component.scss']
 })
-export class BackButtonComponent {
+export class BackButtonComponent implements OnInit {
   @Output() backAction = new EventEmitter();
-  @Input() name: string = this.actionLabels.CANCEL;
+  @Input() name?: string;
 
   constructor(private location: Location, private actionLabels: ActionLabelsI18n) {}
 
+  ngOnInit(): void {
+    this.name = this.name || this.actionLabels.CANCEL;
+  }
+
   back() {
     if (this.backAction.observers.length === 0) {
       this.location.back();
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.html
new file mode 100644 (file)
index 0000000..4e19371
--- /dev/null
@@ -0,0 +1,171 @@
+<hr>
+<li class="list-group-item">
+  <div class="d-flex pl-1 pb-2 pt-2">
+    <div class="ms-4 me-auto">
+      <a [routerLink]="link"
+         *ngIf="link && total > 0; else noLinkTitle"
+         [ngPlural]="total"
+        i18n>
+          {{ total }}
+        <ng-template ngPluralCase="=0">{{ title }}</ng-template>
+        <ng-template ngPluralCase="=1">{{ title }}</ng-template>
+        <ng-template ngPluralCase="other">{{ title }}s</ng-template>
+      </a>
+    </div>
+    <span class="me-3">
+      <ng-container [ngSwitch]="summaryType">
+        <ng-container *ngSwitchCase="'iscsi'">
+          <ng-container *ngTemplateOutlet="iscsiSummary"></ng-container>
+        </ng-container>
+        <ng-container *ngSwitchCase="'osd'">
+          <ng-container *ngTemplateOutlet="osdSummary"></ng-container>
+        </ng-container>
+        <ng-container *ngSwitchCase="'simplified'">
+          <ng-container *ngTemplateOutlet="simplifiedSummary"></ng-container>
+        </ng-container>
+        <ng-container *ngSwitchDefault>
+          <ng-container *ngTemplateOutlet="defaultSummary"></ng-container>
+        </ng-container>
+      </ng-container>
+    </span>
+  </div>
+</li>
+
+<ng-template #defaultSummary>
+  <span *ngIf="data.success || data.categoryPgAmount?.clean || (data.success === 0 && data.total === 0)">
+    <span *ngIf="data.success || (data.success === 0 && data.total === 0)">
+      {{ data.success }}
+    </span>
+    <span *ngIf="data.categoryPgAmount?.clean">
+      {{ data.categoryPgAmount?.clean }}
+    </span>
+    <i class="text-success"
+       [ngClass]="[icons.success]">
+    </i>
+  </span>
+  <span *ngIf="data.info"
+        class="ms-2">
+    <span *ngIf="data.info">
+      {{ data.info }}
+    </span>
+    <i class="text-info"
+       [ngClass]="[icons.danger]">
+    </i>
+  </span>
+  <span *ngIf="data.warn || data.categoryPgAmount?.warning"
+        class="ms-2">
+    <span *ngIf="data.warn">
+      {{ data.warn }}
+    </span>
+    <span *ngIf="data.categoryPgAmount?.warning">
+      {{ data.categoryPgAmount?.warning }}
+    </span>
+    <i class="text-warning"
+       [ngClass]="[icons.warning]">
+    </i>
+  </span>
+  <span *ngIf="data.error || data.categoryPgAmount?.unknown"
+        class="ms-2">
+    <span *ngIf="data.error">
+      {{ data.error }}
+    </span>
+    <span *ngIf="data.categoryPgAmount?.unknown">
+      {{ data.categoryPgAmount?.unknown }}
+    </span>
+    <i class="text-danger"
+       [ngClass]="[icons.danger]">
+    </i>
+  </span>
+  <span *ngIf="data.categoryPgAmount?.working"
+        class="ms-2">
+    <span *ngIf="data.categoryPgAmount?.working">
+      {{ data.categoryPgAmount?.working }}
+    </span>
+    <i class="text-warning"
+       [ngClass]="[icons.spinner, icons.spin]">
+    </i>
+  </span>
+</ng-template>
+
+<ng-template #osdSummary>
+  <span *ngIf="data.up === data.in">
+    {{ data.up }}
+    <i class="text-success"
+       [ngClass]="[icons.success]">
+    </i>
+  </span>
+  <span *ngIf="data.up !== data.in">
+    {{ data.up }}
+    <span class="fw-bold text-success">
+        up
+    </span>
+  </span>
+  <span *ngIf="data.in !== data.up"
+        class="ms-2">
+    {{ data.in }}
+    <span class="fw-bold text-success">
+        in
+    </span>
+  </span>
+  <span *ngIf="data.down"
+        class="ms-2">
+    {{ data.down }}
+    <span class="fw-bold text-danger me-2">
+        down
+    </span>
+  </span>
+  <span *ngIf="data.out"
+        class="ms-2">
+    {{ data.out }}
+    <span class="fw-bold text-danger me-2">
+        out
+    </span>
+  </span>
+  <span *ngIf="data.nearfull"
+        class="ms-2">
+        {{ data.nearfull }}
+    <span class="fw-bold text-warning me-2">
+      nearfull</span></span>
+  <span *ngIf="data.full"
+        class="ms-2">
+        {{ data.full }}
+    <span class="fw-bold text-danger">
+      full
+    </span>
+  </span>
+</ng-template>
+
+<ng-template #iscsiSummary>
+  <span>
+    {{ data.up }}
+    <i class="text-success"
+       *ngIf="data.up || data.up === 0"
+       [ngClass]="[icons.success]">
+    </i>
+  </span>
+  <span *ngIf="data.down"
+        class="ms-2">
+        {{ data.down }}
+    <i class="text-danger"
+       [ngClass]="[icons.danger]">
+    </i>
+  </span>
+</ng-template>
+
+<ng-template #simplifiedSummary>
+  <span>
+    {{ data }}
+    <i class="text-success"
+       [ngClass]="[icons.success]"></i>
+  </span>
+</ng-template>
+
+<ng-template #noLinkTitle>
+  <span *ngIf="total || total === 0"
+        [ngPlural]="total">
+    {{ total }}
+    <ng-template ngPluralCase="=0">{{ title }}</ng-template>
+    <ng-template ngPluralCase="=1">{{ title }}</ng-template>
+    <ng-template ngPluralCase="other">{{ title }}s</ng-template>
+  </span>
+</ng-template>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.scss
new file mode 100644 (file)
index 0000000..29901b8
--- /dev/null
@@ -0,0 +1,4 @@
+.list-group-item {
+  border: 0;
+  font-size: 14px;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.spec.ts
new file mode 100644 (file)
index 0000000..6208445
--- /dev/null
@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CardRowComponent } from './card-row.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
+
+describe('CardRowComponent', () => {
+  let component: CardRowComponent;
+  let fixture: ComponentFixture<CardRowComponent>;
+
+  configureTestBed({
+    declarations: [CardRowComponent]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CardRowComponent);
+    component = fixture.componentInstance;
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card-row/card-row.component.ts
new file mode 100644 (file)
index 0000000..90c9391
--- /dev/null
@@ -0,0 +1,34 @@
+import { Component, Input, OnChanges } from '@angular/core';
+import { Icons } from '~/app/shared/enum/icons.enum';
+
+@Component({
+  selector: 'cd-card-row',
+  templateUrl: './card-row.component.html',
+  styleUrls: ['./card-row.component.scss']
+})
+export class CardRowComponent implements OnChanges {
+  @Input()
+  title: string;
+
+  @Input()
+  link: string;
+
+  @Input()
+  data: any;
+
+  @Input()
+  summaryType = 'default';
+
+  icons = Icons;
+  total: number;
+
+  ngOnChanges(): void {
+    if (this.data.total || this.data.total === 0) {
+      this.total = this.data.total;
+    } else if (this.summaryType === 'iscsi') {
+      this.total = this.data.up + this.data.down || 0;
+    } else {
+      this.total = this.data;
+    }
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.html
new file mode 100644 (file)
index 0000000..60c0af6
--- /dev/null
@@ -0,0 +1,24 @@
+<div class="card flex-fill"
+     [ngClass]="{'border-0': removeBorder, 'bg-color': cardType === 'Sync Status Card', 'shadow': shadow, 'shadow-sm': !shadow && cardType !== 'syncCards', 'h-100': fullHeight}">
+  <h4 class="card-title mt-4 ms-4 mb-0"
+      *ngIf="cardType !== 'zone'">
+    <span *ngIf="cardType === ''">{{ cardTitle }}</span>
+  </h4>
+  <h4 *ngIf="cardType === 'zone'"
+      class="text-center mt-4 mb-0">
+    <i [ngClass]="icons.deploy"></i>
+    <span class="badge badge-info">{{ cardTitle }}</span>
+  </h4>
+  <h5 *ngIf="cardType === 'syncCards'"
+      class="text-center card-title">
+      {{ cardTitle }}
+  </h5>
+  <div class="card-body ps-0 pe-0"
+       [ngClass]="{'d-flex align-items-center': alignItemsCenter, 'justify-content-center': justifyContentCenter}">
+    <ng-content></ng-content>
+  </div>
+  <div class="card-footer p-0 bg-white"
+       *ngIf="cardFooter">
+    <ng-content select=".footer"></ng-content>
+  </div>
+</div>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.spec.ts
new file mode 100644 (file)
index 0000000..287e1cf
--- /dev/null
@@ -0,0 +1,33 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { RouterTestingModule } from '@angular/router/testing';
+
+import { configureTestBed } from '~/testing/unit-test-helper';
+import { CardComponent } from './card.component';
+
+describe('CardComponent', () => {
+  let component: CardComponent;
+  let fixture: ComponentFixture<CardComponent>;
+
+  configureTestBed({
+    imports: [RouterTestingModule],
+    declarations: [CardComponent]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CardComponent);
+    component = fixture.componentInstance;
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('Setting cards title makes title visible', () => {
+    const title = 'Card Title';
+    component.cardTitle = title;
+    fixture.detectChanges();
+    const titleDiv = fixture.debugElement.nativeElement.querySelector('.card-title');
+
+    expect(titleDiv.textContent).toContain(title);
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/components/card/card.component.ts
new file mode 100644 (file)
index 0000000..03d403f
--- /dev/null
@@ -0,0 +1,28 @@
+import { Component, Input } from '@angular/core';
+import { Icons } from '~/app/shared/enum/icons.enum';
+
+@Component({
+  selector: 'cd-card',
+  templateUrl: './card.component.html',
+  styleUrls: ['./card.component.scss']
+})
+export class CardComponent {
+  icons = Icons;
+
+  @Input()
+  cardTitle: string;
+  @Input()
+  cardType: string = '';
+  @Input()
+  removeBorder = false;
+  @Input()
+  shadow = false;
+  @Input()
+  cardFooter = false;
+  @Input()
+  fullHeight = false;
+  @Input()
+  alignItemsCenter = false;
+  @Input()
+  justifyContentCenter = false;
+}
index 41cfae743f2f64c21febd40832664b8b470ed7df..1e92028823c3eb0e4b449dd8836811c704ec44b4 100644 (file)
@@ -1,6 +1,7 @@
 <span *ngIf="!key; else key_value"
       class="badge badge-{{value}}"
-      ngClass="{{value | colorClassFromText}}">
+      ngClass="{{value | colorClassFromText}}"
+      [ngbTooltip]="tooltipText">
   {{ value }}
 </span>
 
index 61472cde4c8e5e1303735f5645089ce2f7d008e4..e308fec1b63dfe34a4d06d885e97a11799c986a9 100644 (file)
@@ -2,15 +2,14 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { CdLabelComponent } from './cd-label.component';
 import { ColorClassFromTextPipe } from './color-class-from-text.pipe';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 describe('CdLabelComponent', () => {
   let component: CdLabelComponent;
   let fixture: ComponentFixture<CdLabelComponent>;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [CdLabelComponent, ColorClassFromTextPipe]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [CdLabelComponent, ColorClassFromTextPipe]
   });
 
   beforeEach(() => {
index ae0471bf6f7938edd75b0b91b7844b8e4220beb2..149dbb4ea1db77761669eb8512cd4efb01b9e378 100644 (file)
@@ -8,4 +8,5 @@ import { Component, Input } from '@angular/core';
 export class CdLabelComponent {
   @Input() key?: string;
   @Input() value?: string;
+  @Input() tooltipText?: string;
 }
index 5350e2bd50b00b0ddc5299ada572c2a00600a7be..17f418d1e148f707dfc011dcf27d5fdd4e02dec5 100644 (file)
@@ -49,6 +49,8 @@ import { SubmitButtonComponent } from './submit-button/submit-button.component';
 import { TelemetryNotificationComponent } from './telemetry-notification/telemetry-notification.component';
 import { UsageBarComponent } from './usage-bar/usage-bar.component';
 import { WizardComponent } from './wizard/wizard.component';
+import { CardComponent } from './card/card.component';
+import { CardRowComponent } from './card-row/card-row.component';
 
 @NgModule({
   imports: [
@@ -101,7 +103,9 @@ import { WizardComponent } from './wizard/wizard.component';
     WizardComponent,
     CustomLoginBannerComponent,
     CdLabelComponent,
-    ColorClassFromTextPipe
+    ColorClassFromTextPipe,
+    CardComponent,
+    CardRowComponent
   ],
   providers: [],
   exports: [
@@ -131,7 +135,9 @@ import { WizardComponent } from './wizard/wizard.component';
     MotdComponent,
     WizardComponent,
     CustomLoginBannerComponent,
-    CdLabelComponent
+    CdLabelComponent,
+    CardComponent,
+    CardRowComponent
   ]
 })
 export class ComponentsModule {}
index 2ac8e569adf7227d5b356cc2e982c15f4c0a6dc6..89d7f310fe081bd95acdbb9c954a644cc5779952 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, Input, OnInit } from '@angular/core';
-import { FormControl, NgForm } from '@angular/forms';
+import { UntypedFormControl, NgForm } from '@angular/forms';
 
 import _ from 'lodash';
 
@@ -48,7 +48,7 @@ export class ConfigOptionComponent implements OnInit {
   private createForm() {
     this.optionsForm.addControl(this.optionsFormGroupName, this.optionsFormGroup);
     this.optionNames.forEach((optionName) => {
-      this.optionsFormGroup.addControl(optionName, new FormControl(null));
+      this.optionsFormGroup.addControl(optionName, new UntypedFormControl(null));
     });
   }
 
index b98cea93846f6f01c65082448ee1c66bf13ec8a1..608f9b76245960521c2eb46ca3f43f905115290f 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnDestroy, OnInit, TemplateRef } from '@angular/core';
-import { FormGroup } from '@angular/forms';
+import { UntypedFormGroup } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 
@@ -28,11 +28,11 @@ export class ConfirmationModalComponent implements OnInit, OnDestroy {
 
   // Component only
   boundCancel = this.cancel.bind(this);
-  confirmationForm: FormGroup;
+  confirmationForm: UntypedFormGroup;
   private canceled = false;
 
   constructor(public activeModal: NgbActiveModal) {
-    this.confirmationForm = new FormGroup({});
+    this.confirmationForm = new UntypedFormGroup({});
   }
 
   ngOnInit() {
index 25a3f3cfe252ff7fa700e0ed53c966819101cc9c..655364eefc0c6c6a935f3862f9a20339d1afc815 100644 (file)
@@ -1,7 +1,15 @@
-<button (click)="onClick()"
-        type="button"
-        class="btn btn-light"
-        i18n-title
-        title="Copy to Clipboard">
-  <i [ngClass]="[icons.clipboard]"></i>
-</button>
+<i [ngClass]="[icons.clipboard, icons.large]"
+   (click)="onClick()"
+   class="text-primary ms-2"
+   title="Copy to Clipboard"
+   *ngIf="showIconOnly; else withButtonTpl"></i>
+
+<ng-template #withButtonTpl>
+  <button (click)="onClick()"
+          type="button"
+          class="btn btn-light"
+          i18n-title
+          title="Copy to Clipboard">
+    <i [ngClass]="[icons.clipboard]"></i>
+  </button>
+</ng-template>
index 2cc656bfccbe48e2703a1c6df3f3e72793806c89..80c7acbf28aeae227a012cd1ede7b5ab90dcadad 100644 (file)
@@ -17,6 +17,9 @@ export class Copy2ClipboardButtonComponent {
   @Input()
   byId = true;
 
+  @Input()
+  showIconOnly = false;
+
   icons = Icons;
 
   constructor(private toastr: ToastrService) {}
index 29b669b141f3bf5e78f2b179f80c5779d5e57300..cc2eded0e3b8f79d9b0d9d36924c2306eea6c15d 100644 (file)
@@ -43,6 +43,7 @@
       </div>
       <div class="modal-footer">
         <cd-form-button-panel (submitActionEvent)="callSubmitAction()"
+                              (backActionEvent)="backAction ? callBackAction() : hideModal()"
                               [form]="deletionForm"
                               [submitText]="(actionDescription | titlecase) + ' ' + itemDescription"></cd-form-button-panel>
       </div>
index 4c634f8ca2559b3be7423104f3c32ede94484eb2..406f992a9df22a7aeed2ea3264044b8023e013d1 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
-import { FormControl, Validators } from '@angular/forms';
+import { UntypedFormControl, Validators } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import { Observable } from 'rxjs';
@@ -18,7 +18,9 @@ export class CriticalConfirmationModalComponent implements OnInit {
   bodyTemplate: TemplateRef<any>;
   bodyContext: object;
   submitActionObservable: () => Observable<any>;
+  callBackAtionObservable: () => Observable<any>;
   submitAction: Function;
+  backAction: Function;
   deletionForm: CdFormGroup;
   itemDescription: 'entry';
   itemNames: string[];
@@ -31,7 +33,7 @@ export class CriticalConfirmationModalComponent implements OnInit {
 
   ngOnInit() {
     const controls = {
-      confirmation: new FormControl(false, [Validators.requiredTrue])
+      confirmation: new UntypedFormControl(false, [Validators.requiredTrue])
     };
     if (this.childFormGroup) {
       controls['child'] = this.childFormGroup;
@@ -53,6 +55,17 @@ export class CriticalConfirmationModalComponent implements OnInit {
     }
   }
 
+  callBackAction() {
+    if (this.callBackAtionObservable) {
+      this.callBackAtionObservable().subscribe({
+        error: this.stopLoadingSpinner.bind(this),
+        complete: this.hideModal.bind(this)
+      });
+    } else {
+      this.backAction();
+    }
+  }
+
   hideModal() {
     this.activeModal.close();
   }
index 390edbfd84a4cdc7b058ee7e6a4c3dca32866aff..b05c7f28ce4b7a5f030439e30c8bd590e61aead4 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, Input, OnInit } from '@angular/core';
-import { FormControl } from '@angular/forms';
+import { UntypedFormControl } from '@angular/forms';
 
 import { NgbCalendar, NgbDateStruct, NgbTimeStruct } from '@ng-bootstrap/ng-bootstrap';
 import moment from 'moment';
@@ -12,7 +12,7 @@ import { Subscription } from 'rxjs';
 })
 export class DateTimePickerComponent implements OnInit {
   @Input()
-  control: FormControl;
+  control: UntypedFormControl;
 
   @Input()
   hasSeconds = true;
index fa0483b182d8c60caf8c8c74f08219b1eaeee3f5..17f6001146f0361db2515a4af5ff0dc7a6fe95c0 100644 (file)
@@ -1,6 +1,6 @@
 import { Location } from '@angular/common';
-import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
-import { FormGroup, NgForm } from '@angular/forms';
+import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
+import { UntypedFormGroup, NgForm } from '@angular/forms';
 
 import { ActionLabelsI18n } from '~/app/shared/constants/app.constants';
 import { ModalService } from '~/app/shared/services/modal.service';
@@ -11,7 +11,7 @@ import { SubmitButtonComponent } from '../submit-button/submit-button.component'
   templateUrl: './form-button-panel.component.html',
   styleUrls: ['./form-button-panel.component.scss']
 })
-export class FormButtonPanelComponent {
+export class FormButtonPanelComponent implements OnInit {
   @ViewChild(SubmitButtonComponent)
   submitButton: SubmitButtonComponent;
 
@@ -21,7 +21,7 @@ export class FormButtonPanelComponent {
   backActionEvent = new EventEmitter();
 
   @Input()
-  form: FormGroup | NgForm;
+  form: UntypedFormGroup | NgForm;
   @Input()
   showSubmit = true;
   @Input()
@@ -31,9 +31,9 @@ export class FormButtonPanelComponent {
   @Input()
   btnClass = '';
   @Input()
-  submitText: string = this.actionLabels.CREATE;
+  submitText?: string;
   @Input()
-  cancelText: string = this.actionLabels.CANCEL;
+  cancelText?: string;
   @Input()
   disabled = false;
 
@@ -43,6 +43,11 @@ export class FormButtonPanelComponent {
     private modalService: ModalService
   ) {}
 
+  ngOnInit() {
+    this.submitText = this.submitText || this.actionLabels.CREATE;
+    this.cancelText = this.cancelText || this.actionLabels.CANCEL;
+  }
+
   submitAction() {
     this.submitActionEvent.emit();
   }
index 46dd942e909fbf3094f708dbca3ec71547740451..59b0d2a8560a13060ba3284905b45b8ec5b6ddd4 100755 (executable)
@@ -1,5 +1,5 @@
 import { Component, OnInit } from '@angular/core';
-import { FormControl, ValidatorFn, Validators } from '@angular/forms';
+import { UntypedFormControl, ValidatorFn, Validators } from '@angular/forms';
 
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
@@ -38,14 +38,14 @@ export class FormModalComponent implements OnInit {
   }
 
   createForm() {
-    const controlsConfig: Record<string, FormControl> = {};
+    const controlsConfig: Record<string, UntypedFormControl> = {};
     this.fields.forEach((field) => {
       controlsConfig[field.name] = this.createFormControl(field);
     });
     this.formGroup = this.formBuilder.group(controlsConfig);
   }
 
-  private createFormControl(field: CdFormModalFieldConfig): FormControl {
+  private createFormControl(field: CdFormModalFieldConfig): UntypedFormControl {
     let validators: ValidatorFn[] = [];
     if (_.isBoolean(field.required) && field.required) {
       validators.push(Validators.required);
@@ -53,7 +53,7 @@ export class FormModalComponent implements OnInit {
     if (field.validators) {
       validators = validators.concat(field.validators);
     }
-    return new FormControl(
+    return new UntypedFormControl(
       _.defaultTo(
         field.type === 'binary' ? this.dimlessBinaryPipe.transform(field.value) : field.value,
         null
@@ -89,6 +89,9 @@ export class FormModalComponent implements OnInit {
     if (error === 'required') {
       return $localize`This field is required.`;
     }
+    if (error === 'pattern') {
+      return $localize`Size must be a number or in a valid format. eg: 5 GiB`;
+    }
     return $localize`An error occurred.`;
   }
 
index 3ff19fe04c238fb4debf1eba264ee8d9972d4de4..e83312e911ff489aebac05f0ded034d3734e346e 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';
-import { FormControl, ValidatorFn } from '@angular/forms';
+import { UntypedFormControl, ValidatorFn } from '@angular/forms';
 
 import _ from 'lodash';
 
@@ -33,7 +33,7 @@ export class SelectComponent implements OnInit, OnChanges {
   selection = new EventEmitter();
 
   form: CdFormGroup;
-  filter: FormControl;
+  filter: UntypedFormControl;
   Object = Object;
   filteredOptions: Array<SelectOption> = [];
   icons = Icons;
@@ -48,7 +48,7 @@ export class SelectComponent implements OnInit, OnChanges {
   }
 
   private initFilter() {
-    this.filter = new FormControl('', { validators: this.customBadgeValidators });
+    this.filter = new UntypedFormControl('', { validators: this.customBadgeValidators });
     this.form = new CdFormGroup({ filter: this.filter });
     this.filteredOptions = [...(this.options || [])];
   }
index 595fb667b764b7985b858c08ad52fa27621b2cdb..2678b1a54fade273a9c5865131fbdc9b4a033c19 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, ElementRef, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { AbstractControl, FormGroup, FormGroupDirective, NgForm } from '@angular/forms';
+import { AbstractControl, UntypedFormGroup, FormGroupDirective, NgForm } from '@angular/forms';
 
 import _ from 'lodash';
 
@@ -30,7 +30,7 @@ import { Icons } from '~/app/shared/enum/icons.enum';
 })
 export class SubmitButtonComponent implements OnInit {
   @Input()
-  form: FormGroup | NgForm;
+  form: UntypedFormGroup | NgForm;
 
   @Input()
   type = 'submit';
index 7068744e9f02882f04fa79c36a8d13371d58ad54..e7d7b17f0791c81c663f251bc55e49014e0337ac 100644 (file)
@@ -1,13 +1,27 @@
 <ng-template #usageTooltipTpl>
-  <table>
+  <table *ngIf="!showMultisiteTooltip">
     <tr>
-      <td class="text-left">Used:&nbsp;</td>
+      <td class="text-left me-1">Used:</td>
       <td class="text-right"><strong> {{ isBinary ? (used | dimlessBinary) : (used | dimless) }}</strong></td>
     </tr>
-    <tr *ngIf="calculatePerc">
-      <td class="text-left">Free:&nbsp;</td>
+    <tr *ngIf="calculatePerc && showFreeToolTip">
+      <td class="text-left me-1">Free:</td>
       <td class="'text-right"><strong>{{ isBinary ? (total - used | dimlessBinary) : (total - used | dimless) }}</strong></td>
     </tr>
+    <tr *ngIf="customLegend">
+      <td class="text-left me-1">{{ customLegend }}:</td>
+      <td class="text-right"><strong>{{ isBinary ? (customLegendValue | dimlessBinary) : (customLegend[1] | dimless) }}</strong></td>
+    </tr>
+  </table>
+  <table *ngIf="showMultisiteTooltip">
+    <tr>
+      <td class="text-left">Total Shards:&nbsp;</td>
+      <td class="text-right"><strong> {{ total }}</strong></td>
+    </tr>
+    <tr *ngIf="calculatePerc">
+      <td class="text-left">Transferred Shards:&nbsp;</td>
+      <td class="'text-right"><strong>{{ used }}</strong></td>
+    </tr>
   </table>
 </ng-template>
 
@@ -20,7 +34,7 @@
        [attr.aria-label]="{ title }"
        i18n-aria-label="The title of this usage bar is { title }"
        [style.width]="usedPercentage + '%'">
-    <span>{{ usedPercentage | number: '1.0-' + decimals }}%</span>
+    <span [style.color]="usedPercentage < 60 ? 'black' : 'white'">{{ usedPercentage | number: '1.0-' + decimals }}%</span>
   </div>
   <div class="progress-bar bg-freespace"
        role="progressbar"
index e9d6d24984db1af9ece937bddd0d72dd9a7411a0..3c57015fec799f2421c59c1244f75c6a66e3490e 100644 (file)
@@ -26,7 +26,7 @@
   }
 
   span {
-    color: vv.$black;
+    color: vv.$white;
     display: block;
     font-weight: normal;
     position: absolute;
index 4877e891e1f124d015b47430e7eff0226c8f13a7..58bd7d4a46dde15064ed90f9e76b9e2d2eb35a91 100644 (file)
@@ -24,6 +24,14 @@ export class UsageBarComponent implements OnChanges {
   calculatePerc = true;
   @Input()
   title = $localize`usage`;
+  @Input()
+  customLegend?: string;
+  @Input()
+  customLegendValue?: string;
+  @Input()
+  showFreeToolTip = true;
+  @Input()
+  showMultisiteTooltip = false;
 
   usedPercentage: number;
   freePercentage: number;
index 4248be8f59c20121fec34d7f3f341f9f6754e113..d299f59fefd0e206c3b45d9fcb856dd48082288a 100644 (file)
@@ -137,11 +137,21 @@ export class ActionLabelsI18n {
   REDEPLOY: string;
   RESTART: string;
   RESYNC: string;
+  EXPORT: string;
+  IMPORT: any;
+  MIGRATE: string;
+  START_UPGRADE: string;
 
   constructor() {
     /* Create a new item */
     this.CREATE = $localize`Create`;
 
+    this.EXPORT = $localize`Export`;
+
+    this.IMPORT = $localize`Import`;
+
+    this.MIGRATE = $localize`Migrate to Multi-Site`;
+
     /* Destroy an existing item */
     this.DELETE = $localize`Delete`;
 
@@ -206,6 +216,8 @@ export class ActionLabelsI18n {
     this.REMOVE_SCHEDULING = $localize`Remove Scheduling`;
     this.PROMOTE = $localize`Promote`;
     this.DEMOTE = $localize`Demote`;
+
+    this.START_UPGRADE = $localize`Start Upgrade`;
   }
 }
 
@@ -224,6 +236,8 @@ export class SucceededActionLabelsI18n {
   CANCELED: string;
   PREVIEWED: string;
   MOVED: string;
+  EXPORT: string;
+  IMPORT: string;
   COPIED: string;
   CLONED: string;
   DEEP_SCRUBBED: string;
@@ -303,3 +317,14 @@ export class SucceededActionLabelsI18n {
     this.RESTART = $localize`Restart`;
   }
 }
+
+@Injectable({
+  providedIn: 'root'
+})
+export class TimerServiceInterval {
+  TIMER_SERVICE_PERIOD: number;
+
+  constructor() {
+    this.TIMER_SERVICE_PERIOD = 5000;
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.html b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.html
new file mode 100644 (file)
index 0000000..dae4985
--- /dev/null
@@ -0,0 +1,55 @@
+<cd-table [data]="data"
+          [columns]="columns"
+          columnMode="flex"
+          [toolHeader]="false"
+          [autoReload]="false"
+          [autoSave]="false"
+          [footer]="false"
+          [limit]="0">
+</cd-table>
+
+<ng-template #cellScopeCheckboxTpl
+             let-column="column"
+             let-row="row"
+             let-value="value">
+  <div class="custom-control custom-checkbox">
+    <input class="custom-control-input"
+           id="scope_{{ row.scope }}"
+           type="checkbox"
+           [checked]="isRowChecked(row.scope)"
+           [disabled]="isDisabled"
+           (change)="onClickCellCheckbox(row.scope, column.prop, $event)">
+    <label class="datatable-permissions-scope-cell-label custom-control-label"
+           for="scope_{{ row.scope }}">{{ value }}</label>
+  </div>
+</ng-template>
+
+<ng-template #cellPermissionCheckboxTpl
+             let-column="column"
+             let-row="row"
+             let-value="value">
+  <div class="custom-control custom-checkbox">
+    <input class="custom-control-input"
+           type="checkbox"
+           [checked]="value"
+           [disabled]="isDisabled"
+           [id]="row.scope + '-' + column.prop"
+           (change)="onClickCellCheckbox(row.scope, column.prop, $event)">
+    <label class="custom-control-label"
+           [for]="row.scope + '-' + column.prop"></label>
+  </div>
+</ng-template>
+
+<ng-template #headerPermissionCheckboxTpl
+             let-column="column">
+  <div class="custom-control custom-checkbox">
+    <input class="custom-control-input"
+           id="header_{{ column.prop }}"
+           type="checkbox"
+           [disabled]="isDisabled"
+           [checked]="isHeaderChecked(column.prop)"
+           (change)="onClickHeaderCheckbox(column.prop, $event)">
+    <label class="datatable-permissions-header-cell-label custom-control-label"
+           for="header_{{ column.prop }}">{{ column.name }}</label>
+  </div>
+</ng-template>
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.scss b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.scss
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.spec.ts
new file mode 100644 (file)
index 0000000..21ef3a4
--- /dev/null
@@ -0,0 +1,138 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { CheckedTableFormComponent } from './checked-table-form.component';
+import { TableComponent } from '../table/table.component';
+import { TableKeyValueComponent } from '../table-key-value/table-key-value.component';
+import { TablePaginationComponent } from '../table-pagination/table-pagination.component';
+import { NgxDatatableModule } from '@swimlane/ngx-datatable';
+import { FormHelper, configureTestBed } from '~/testing/unit-test-helper';
+import { CdFormGroup } from '../../forms/cd-form-group';
+import { FormControl } from '@angular/forms';
+
+describe('CheckedTableFormComponent', () => {
+  let component: CheckedTableFormComponent;
+  let fixture: ComponentFixture<CheckedTableFormComponent>;
+  let formHelper: FormHelper;
+  let form: CdFormGroup;
+
+  let fakeColumns = [
+    {
+      prop: 'scope',
+      name: $localize`All`,
+      flexGrow: 1
+    },
+    {
+      prop: 'read',
+      name: $localize`Read`,
+      flexGrow: 1
+    },
+    {
+      prop: 'write',
+      name: $localize`Write`,
+      flexGrow: 1
+    },
+    {
+      prop: 'execute',
+      name: $localize`Execute`,
+      flexGrow: 1
+    }
+  ];
+
+  configureTestBed({
+    declarations: [
+      CheckedTableFormComponent,
+      TableComponent,
+      TableKeyValueComponent,
+      TablePaginationComponent
+    ],
+    imports: [NgxDatatableModule]
+  });
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(CheckedTableFormComponent);
+    component = fixture.componentInstance;
+    component.columns = fakeColumns;
+    component.data = [
+      { scope: 'owner', read: true, write: true, execute: true },
+      { scope: 'group', read: true, write: true, execute: true },
+      { scope: 'other', read: true, write: true, execute: true }
+    ];
+    component.scopes = ['owner', 'group', 'others'];
+    component.form = new CdFormGroup({
+      scopes_permissions: new FormControl({})
+    });
+    component.inputField = 'scopes_permissions';
+    component.isTableForOctalMode = true;
+    form = component.form;
+    formHelper = new FormHelper(form);
+    component.ngOnInit();
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  it('should check all perms for a scope', () => {
+    formHelper.setValue('scopes_permissions', { owner: ['read'] });
+    component.onClickCellCheckbox('group', 'scope');
+    const scopes_permissions = form.getValue('scopes_permissions');
+    expect(Object.keys(scopes_permissions)).toContain('group');
+    expect(scopes_permissions['group']).toEqual(['read', 'write', 'execute'].sort());
+  });
+
+  it('should uncheck all perms for a scope', () => {
+    formHelper.setValue('scopes_permissions', { owner: ['read', 'write', 'execute'] });
+    component.onClickCellCheckbox('owner', 'scope');
+    const scopes_permissions = form.getValue('scopes_permissions');
+    expect(Object.keys(scopes_permissions)).not.toContain('owner');
+  });
+
+  it('should uncheck all scopes and perms', () => {
+    component.scopes = ['owner', 'group'];
+    formHelper.setValue('scopes_permissions', {
+      owner: ['read', 'execute'],
+      group: ['write']
+    });
+    component.onClickHeaderCheckbox('scope', ({
+      target: { checked: false }
+    } as unknown) as Event);
+    const scopes_permissions = form.getValue('scopes_permissions');
+    expect(scopes_permissions).toEqual({});
+  });
+
+  it('should check all scopes and perms', () => {
+    component.scopes = ['owner', 'group'];
+    formHelper.setValue('scopes_permissions', {
+      owner: ['read', 'write'],
+      group: ['execute']
+    });
+    component.onClickHeaderCheckbox('scope', ({ target: { checked: true } } as unknown) as Event);
+    const scopes_permissions = form.getValue('scopes_permissions');
+    const keys = Object.keys(scopes_permissions);
+    expect(keys).toEqual(['owner', 'group']);
+    keys.forEach((key) => {
+      expect(scopes_permissions[key].sort()).toEqual(['execute', 'read', 'write']);
+    });
+  });
+
+  it('should check if column is checked', () => {
+    component.data = [
+      { scope: 'a', read: true, write: true, execute: true },
+      { scope: 'b', read: false, write: true, execute: false }
+    ];
+    expect(component.isRowChecked('a')).toBeTruthy();
+    expect(component.isRowChecked('b')).toBeFalsy();
+    expect(component.isRowChecked('c')).toBeFalsy();
+  });
+
+  it('should check if header is checked', () => {
+    component.data = [
+      { scope: 'a', read: true, write: true, execute: true },
+      { scope: 'b', read: false, write: true, execute: false }
+    ];
+    expect(component.isHeaderChecked('read')).toBeFalsy();
+    expect(component.isHeaderChecked('write')).toBeTruthy();
+    expect(component.isHeaderChecked('execute')).toBeFalsy();
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/checked-table-form/checked-table-form.component.ts
new file mode 100644 (file)
index 0000000..743b0fd
--- /dev/null
@@ -0,0 +1,165 @@
+import { Component, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';
+import { CdTableColumn } from '../../models/cd-table-column';
+import { CdFormGroup } from '../../forms/cd-form-group';
+import _ from 'lodash';
+
+@Component({
+  selector: 'cd-checked-table-form',
+  templateUrl: './checked-table-form.component.html',
+  styleUrls: ['./checked-table-form.component.scss']
+})
+export class CheckedTableFormComponent implements OnInit {
+  @Input() data: Array<any>;
+  @Input() columns: CdTableColumn[];
+  @Input() form: CdFormGroup;
+  @Input() inputField: string;
+  @Input() scopes: Array<string> = [];
+  @Input() isTableForOctalMode = false;
+  @Input() initialValue = {};
+  @Input() isDisabled = false;
+
+  @ViewChild('headerPermissionCheckboxTpl', { static: true })
+  headerPermissionCheckboxTpl: TemplateRef<any>;
+  @ViewChild('cellScopeCheckboxTpl', { static: true })
+  cellScopeCheckboxTpl: TemplateRef<any>;
+  @ViewChild('cellPermissionCheckboxTpl', { static: true })
+  cellPermissionCheckboxTpl: TemplateRef<any>;
+
+  constructor() {}
+
+  ngOnInit(): void {
+    this.columns.forEach((column) => {
+      if (column.name === 'All') {
+        column.cellTemplate = this.cellScopeCheckboxTpl;
+        column.headerTemplate = this.headerPermissionCheckboxTpl;
+      } else {
+        column.cellTemplate = this.cellPermissionCheckboxTpl;
+        column.headerTemplate = this.headerPermissionCheckboxTpl;
+      }
+    });
+    this.listenToChanges();
+    this.form.get(this.inputField).setValue(this.initialValue);
+  }
+
+  listenToChanges() {
+    // Create/Update the data which is used by the data table to display the
+    // scopes/permissions every time the form field value has been changed.
+    this.form.get(this.inputField).valueChanges.subscribe((value) => {
+      const scopesPermissions: any[] = [];
+      _.each(this.scopes, (scope) => {
+        // Set the defaults values.
+        const scopePermission: any = { read: false, write: false, execute: false };
+        scopePermission['scope'] = scope;
+        // Apply settings from the given value if they exist.
+        if (scope in value) {
+          _.each(value[scope], (permission) => {
+            scopePermission[permission] = true;
+          });
+        }
+        scopesPermissions.push(scopePermission);
+      });
+      this.data = scopesPermissions;
+    });
+  }
+
+  /**
+   * Checks if the specified row checkbox needs to be rendered as checked.
+   * @param {string} scope The scope to be checked, e.g. 'cephfs', 'grafana',
+   *   'osd', 'pool' ...
+   * @return Returns true if all permissions (read, create, update, delete)
+   *   are checked for the specified scope, otherwise false.
+   */
+  isRowChecked(scope: string) {
+    const scope_permission = _.find(this.data, (o) => {
+      return o['scope'] === scope;
+    });
+    if (_.isUndefined(scope_permission)) {
+      return false;
+    }
+    if (this.isTableForOctalMode) {
+      return scope_permission['read'] && scope_permission['write'] && scope_permission['execute'];
+    }
+    return (
+      scope_permission['read'] &&
+      scope_permission['create'] &&
+      scope_permission['update'] &&
+      scope_permission['delete']
+    );
+  }
+
+  /**
+   * Checks if the specified header checkbox needs to be rendered as checked.
+   * @param {string} property The property/permission (read, create,
+   *   update, delete) to be checked. If 'scope' is given, all permissions
+   *   are checked.
+   * @return Returns true if specified property/permission is selected
+   *   for all scopes, otherwise false.
+   */
+  isHeaderChecked(property: string) {
+    let permissions = [property];
+    if ('scope' === property && this.isTableForOctalMode) {
+      permissions = ['read', 'write', 'execute'];
+    } else if ('scope' === property) {
+      permissions = ['read', 'create', 'update', 'delete'];
+    }
+    return permissions.every((permission) => {
+      return this.data.every((scope_permission) => {
+        return scope_permission[permission];
+      });
+    });
+  }
+
+  onClickCellCheckbox(scope: string, property: string, event: any = null) {
+    // Use a copy of the form field data to do not trigger the redrawing of the
+    // data table with every change.
+    const scopes_permissions = _.cloneDeep(this.form.getValue(this.inputField));
+    let permissions = [property];
+    if ('scope' === property && this.isTableForOctalMode) {
+      permissions = ['read', 'write', 'execute'];
+    } else if ('scope' === property) {
+      permissions = ['read', 'create', 'update', 'delete'];
+    }
+    if (!(scope in scopes_permissions)) {
+      scopes_permissions[scope] = [];
+    }
+    // Add or remove the given permission(s) depending on the click event or if no
+    // click event is given then add/remove them if they are absent/exist.
+    if (
+      (event && event.target['checked']) ||
+      !_.isEqual(permissions.sort(), _.intersection(scopes_permissions[scope], permissions).sort())
+    ) {
+      scopes_permissions[scope] = _.union(scopes_permissions[scope], permissions);
+    } else {
+      scopes_permissions[scope] = _.difference(scopes_permissions[scope], permissions);
+      if (_.isEmpty(scopes_permissions[scope])) {
+        _.unset(scopes_permissions, scope);
+      }
+    }
+    this.form.get(this.inputField).setValue(scopes_permissions);
+  }
+
+  onClickHeaderCheckbox(property: string, event: any) {
+    // Use a copy of the form field data to do not trigger the redrawing of the
+    // data table with every change.
+    const scopes_permissions = _.cloneDeep(this.form.getValue(this.inputField));
+    let permissions = [property];
+    if ('scope' === property && this.isTableForOctalMode) {
+      permissions = ['read', 'write', 'execute'];
+    } else if ('scope' === property) {
+      permissions = ['read', 'create', 'update', 'delete'];
+    }
+    _.each(permissions, (permission) => {
+      _.each(this.scopes, (scope) => {
+        if (event.target['checked']) {
+          scopes_permissions[scope] = _.union(scopes_permissions[scope], [permission]);
+        } else {
+          scopes_permissions[scope] = _.difference(scopes_permissions[scope], [permission]);
+          if (_.isEmpty(scopes_permissions[scope])) {
+            _.unset(scopes_permissions, scope);
+          }
+        }
+      });
+    });
+    this.form.get(this.inputField).setValue(scopes_permissions);
+  }
+}
index 71c5d8f72e12d658b89441b97ba4b45d3aa4cf72..37e94f236be967b838f13b857de39f8507e26cb3 100644 (file)
@@ -24,6 +24,7 @@ import { FormlyTextareaTypeComponent } from '../forms/crud-form/formly-textarea-
 import { FormlyInputWrapperComponent } from '../forms/crud-form/formly-input-wrapper/formly-input-wrapper.component';
 import { FormlyFileTypeComponent } from '../forms/crud-form/formly-file-type/formly-file-type.component';
 import { FormlyFileValueAccessorDirective } from '../forms/crud-form/formly-file-type/formly-file-type-accessor';
+import { CheckedTableFormComponent } from './checked-table-form/checked-table-form.component';
 
 @NgModule({
   imports: [
@@ -78,7 +79,8 @@ import { FormlyFileValueAccessorDirective } from '../forms/crud-form/formly-file
     FormlyObjectTypeComponent,
     FormlyInputWrapperComponent,
     FormlyFileTypeComponent,
-    FormlyFileValueAccessorDirective
+    FormlyFileValueAccessorDirective,
+    CheckedTableFormComponent
   ],
   exports: [
     TableComponent,
@@ -86,7 +88,8 @@ import { FormlyFileValueAccessorDirective } from '../forms/crud-form/formly-file
     TableKeyValueComponent,
     TableActionsComponent,
     CRUDTableComponent,
-    TablePaginationComponent
+    TablePaginationComponent,
+    CheckedTableFormComponent
   ]
 })
 export class DataTableModule {}
index ef2a4481dbe25dd9d63dad89e2356022960634a0..f30aa77281dbbe377e4ee738a6c9a4d8bdebd8dd 100644 (file)
@@ -19,7 +19,7 @@
        *ngIf="dropDownActions.length > 1"
        aria-label="Button group with nested dropdown">
     <button aria-label="dropdown-menu-toggle"
-            class="btn btn-{{btnColor}} dropdown-toggle-split"
+            class="btn btn-{{btnColor}} dropdown-toggle"
             ngbDropdownToggle>
       <ng-container *ngIf="dropDownOnly">{{ dropDownOnly }} </ng-container>
       <span *ngIf="!dropDownOnly"
index b220b59e6333720b4c5a70504ce06fbb978d6e27..41ae483308343b53cd823e4567ad3be221d60bb9 100644 (file)
@@ -1,16 +1,15 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { TablePaginationComponent } from './table-pagination.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 describe('TablePaginationComponent', () => {
   let component: TablePaginationComponent;
   let fixture: ComponentFixture<TablePaginationComponent>;
   let element: HTMLElement;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [TablePaginationComponent]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [TablePaginationComponent]
   });
 
   beforeEach(() => {
index fc7b9f6e54ea291b86d3410521a8621dc6a6a1a9..01cc1fbc8d92d01995340e976e2661020ce001f6 100644 (file)
           </span>
 
           <ng-template #serverSideTpl>
-            {{ data?.length || 0 }} <ng-container i18n="X found">found</ng-container> /
-            {{ rowCount }} <ng-container i18n="X total">total</ng-container>
+            <span>
+              {{ data?.length || 0 }} <ng-container i18n="X found">found</ng-container> /
+              {{ rowCount }} <ng-container i18n="X total">total</ng-container>
+            </span>
           </ng-template>
         </div>
         <cd-table-pagination [page]="curPage"
   <span data-toggle="tooltip"
         [title]="value | cdDate">{{ value | relativeDate }}</span>
 </ng-template>
+
+<ng-template #pathTpl
+             let-value="value">
+  <span data-toggle="tooltip"
+        [title]="value"
+        class="font-monospace">{{ value | path }}
+    <cd-copy-2-clipboard-button *ngIf="value"
+                                [source]="value"
+                                [byId]="false"
+                                [showIconOnly]="true">
+    </cd-copy-2-clipboard-button>
+  </span>
+</ng-template>
index 3fc62a9d673857f68f506f1ee5635a279ddafbbc..6e39f4bff138eabe8172f34be07f33192474ab50 100644 (file)
@@ -37,6 +37,7 @@ import { CdTableSelection } from '~/app/shared/models/cd-table-selection';
 import { CdUserConfig } from '~/app/shared/models/cd-user-config';
 import { TimerService } from '~/app/shared/services/timer.service';
 
+const TABLE_LIST_LIMIT = 10;
 @Component({
   selector: 'cd-table',
   templateUrl: './table.component.html',
@@ -72,6 +73,8 @@ export class TableComponent implements AfterContentChecked, OnInit, OnChanges, O
   rowDetailsTpl: TemplateRef<any>;
   @ViewChild('rowSelectionTpl', { static: true })
   rowSelectionTpl: TemplateRef<any>;
+  @ViewChild('pathTpl', { static: true })
+  pathTpl: TemplateRef<any>;
 
   // This is the array with the items to be shown.
   @Input()
@@ -102,7 +105,7 @@ export class TableComponent implements AfterContentChecked, OnInit, OnChanges, O
   footer? = true;
   // Page size to show. Set to 0 to show unlimited number of rows.
   @Input()
-  limit? = 10;
+  limit? = TABLE_LIST_LIMIT;
   @Input()
   maxLimit? = 9999;
   // Has the row details?
@@ -341,7 +344,7 @@ export class TableComponent implements AfterContentChecked, OnInit, OnChanges, O
       this._loadUserConfig();
       this._initUserConfigAutoSave();
     }
-    if (!this.userConfig.limit) {
+    if (this.limit !== TABLE_LIST_LIMIT || !this.userConfig.limit) {
       this.userConfig.limit = this.limit;
     }
     if (!(this.userConfig.offset >= 0)) {
@@ -608,6 +611,7 @@ export class TableComponent implements AfterContentChecked, OnInit, OnChanges, O
     this.cellTemplates.map = this.mapTpl;
     this.cellTemplates.truncate = this.truncateTpl;
     this.cellTemplates.timeAgo = this.timeAgoTpl;
+    this.cellTemplates.path = this.pathTpl;
   }
 
   useCustomClass(value: any): string {
index 1c27ae1cecf42c5b3f888f2d9270383839e4ada9..12db3ad0b6f036b5ba418e7dd787d5062db1c8f1 100644 (file)
@@ -7,7 +7,7 @@ import {
   OnInit,
   Output
 } from '@angular/core';
-import { NgControl } from '@angular/forms';
+import { NgControl, Validators } from '@angular/forms';
 
 import _ from 'lodash';
 
@@ -86,6 +86,12 @@ export class DimlessBinaryDirective implements OnInit {
   setValue(value: string) {
     if (/^[\d.]+$/.test(value)) {
       value += this.defaultUnit || 'm';
+    } else {
+      if (value) {
+        this.control.control.setValue(value);
+        this.control.control.addValidators(Validators.pattern(/^[a-zA-Z\d. ]+$/));
+        this.control.control.updateValueAndValidity();
+      }
     }
     const size = this.formatter.toBytes(value);
     const roundedSize = this.round(size);
index c88afa69a58e02c1529cd5f71c0a6319c8fdba24..8e37f7ddd636c7e6ea076b1d6720167d6faee309 100644 (file)
@@ -26,7 +26,7 @@
  */
 
 import { Directive, Host, HostBinding, Input, Optional, SkipSelf } from '@angular/core';
-import { ControlContainer, FormControl } from '@angular/forms';
+import { ControlContainer, UntypedFormControl } from '@angular/forms';
 
 export function controlPath(name: string, parent: ControlContainer): string[] {
   // tslint:disable-next-line:no-non-null-assertion
@@ -63,7 +63,7 @@ export class CdFormControlDirective {
     return controlPath(this.formControlName, this.parent);
   }
 
-  get control(): FormControl {
+  get control(): UntypedFormControl {
     return this.formDirective && this.formDirective.getControl(this);
   }
 
index 4cb4f4dfef799f18c688a633450f6e0f1962162f..5f37f8583c0d8da998d49cffd76b5a452ef67d72 100644 (file)
  */
 
 import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
-import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/forms';
+import {
+  AbstractControl,
+  UntypedFormArray,
+  UntypedFormControl,
+  UntypedFormGroup
+} from '@angular/forms';
 
 @Directive({
   // eslint-disable-next-line
@@ -34,7 +39,7 @@ import { AbstractControl, FormArray, FormControl, FormGroup } from '@angular/for
 })
 export class CdFormValidationDirective {
   @Input()
-  formGroup: FormGroup;
+  formGroup: UntypedFormGroup;
   @Output()
   validSubmit = new EventEmitter<any>();
 
@@ -47,13 +52,13 @@ export class CdFormValidationDirective {
   }
 
   markAsTouchedAndDirty(control: AbstractControl) {
-    if (control instanceof FormGroup) {
+    if (control instanceof UntypedFormGroup) {
       Object.keys(control.controls).forEach((key) =>
         this.markAsTouchedAndDirty(control.controls[key])
       );
-    } else if (control instanceof FormArray) {
+    } else if (control instanceof UntypedFormArray) {
       control.controls.forEach((c) => this.markAsTouchedAndDirty(c));
-    } else if (control instanceof FormControl && control.enabled) {
+    } else if (control instanceof UntypedFormControl && control.enabled) {
       control.markAsDirty();
       control.markAsTouched();
       control.updateValueAndValidity();
index 5cebefbc98a76f7fd4eaae5556afaeda3e06afed..295bb008c36174df82e3a6ae3723c6c9a35ec98d 100644 (file)
@@ -25,4 +25,14 @@ describe('StatefulTabDirective', () => {
     directive.onNavChange(event);
     expect(window.localStorage.getItem('tabset_bar')).toBe('xyz');
   });
+
+  it('should select the default tab if provided', () => {
+    const nav = new NgbNav('tablist', new NgbNavConfig(new NgbConfig()), <any>null, null);
+    spyOn(nav, 'select');
+    const directive = new StatefulTabDirective(nav);
+    directive.cdStatefulTab = 'bar';
+    directive.cdStatefulTabDefault = 'defaultTab';
+    directive.ngOnInit();
+    expect(nav.select).toHaveBeenCalledWith('defaultTab');
+  });
 });
index cf6f27e9592d473073ef838b974f2233ba46908b..67d6d0b68f6176f4894bd0bdddfc53a08be6d3bf 100644 (file)
@@ -8,6 +8,8 @@ import { NgbNav, NgbNavChangeEvent } from '@ng-bootstrap/ng-bootstrap';
 export class StatefulTabDirective implements OnInit {
   @Input()
   cdStatefulTab: string;
+  @Input()
+  cdStatefulTabDefault = '';
 
   private localStorage = window.localStorage;
 
@@ -15,7 +17,8 @@ export class StatefulTabDirective implements OnInit {
 
   ngOnInit() {
     // Is an activate tab identifier stored in the local storage?
-    const activeId = this.localStorage.getItem(`tabset_${this.cdStatefulTab}`);
+    const activeId =
+      this.cdStatefulTabDefault || this.localStorage.getItem(`tabset_${this.cdStatefulTab}`);
     if (activeId) {
       this.nav.select(activeId);
     }
index 066cc9930adce977811161e45d708f33c84bad14..2790f974978597c799b97c28e9837b2583bcf65f 100644 (file)
@@ -55,5 +55,10 @@ export enum CellTemplate {
   This templace replaces a time, datetime or timestamp with a user-friendly "X {seconds,minutes,hours,days,...} ago",
   but the tooltip still displays the absolute timestamp
   */
-  timeAgo = 'timeAgo'
+  timeAgo = 'timeAgo',
+  /*
+  This template truncates a path to a shorter format and shows the whole path in a tooltip
+  eg: /var/lib/ceph/osd/ceph-0 -> /var/.../ceph-0
+  */
+  path = 'path'
 }
index 7afd069978d6a36ab75541ba040020a393ed7063..515fefcdb6107ff88a496b55050c558b78593447 100644 (file)
@@ -1,10 +1,18 @@
 export enum Promqls {
   USEDCAPACITY = 'ceph_cluster_total_used_bytes',
-  IPS = 'sum(rate(ceph_osd_op_w_in_bytes[$interval]))',
-  OPS = 'sum(rate(ceph_osd_op_r_out_bytes[$interval]))',
-  READLATENCY = 'avg_over_time(ceph_osd_apply_latency_ms[$interval])',
-  WRITELATENCY = 'avg_over_time(ceph_osd_commit_latency_ms[$interval])',
-  READCLIENTTHROUGHPUT = 'sum(rate(ceph_pool_rd_bytes[$interval]))',
-  WRITECLIENTTHROUGHPUT = 'sum(rate(ceph_pool_wr_bytes[$interval]))',
-  RECOVERYBYTES = 'sum(rate(ceph_osd_recovery_bytes[$interval]))'
+  WRITEIOPS = 'sum(rate(ceph_pool_wr[1m]))',
+  READIOPS = 'sum(rate(ceph_pool_rd[1m]))',
+  READLATENCY = 'avg_over_time(ceph_osd_apply_latency_ms[1m])',
+  WRITELATENCY = 'avg_over_time(ceph_osd_commit_latency_ms[1m])',
+  READCLIENTTHROUGHPUT = 'sum(rate(ceph_pool_rd_bytes[1m]))',
+  WRITECLIENTTHROUGHPUT = 'sum(rate(ceph_pool_wr_bytes[1m]))',
+  RECOVERYBYTES = 'sum(rate(ceph_osd_recovery_bytes[1m]))'
+}
+
+export enum RgwPromqls {
+  RGW_REQUEST_PER_SECOND = 'sum(rate(ceph_rgw_req[1m]))',
+  AVG_GET_LATENCY = 'sum(rate(ceph_rgw_get_initial_lat_sum[1m])) / sum(rate(ceph_rgw_get_initial_lat_count[1m]))',
+  AVG_PUT_LATENCY = 'sum(rate(ceph_rgw_put_initial_lat_sum[1m])) / sum(rate(ceph_rgw_put_initial_lat_count[1m]))',
+  GET_BANDWIDTH = 'sum(rate(ceph_rgw_get_b[1m]))',
+  PUT_BANDWIDTH = 'sum(rate(ceph_rgw_put_b[1m]))'
 }
index 7330a250bde6017975ec5da2d31a898b09fa29b3..f741c396705a0173a23c3cb3ac581829afe98ef1 100644 (file)
@@ -3,3 +3,9 @@ export enum HealthIcon {
   HEALTH_WARN = 'fa fa-exclamation-triangle',
   HEALTH_OK = 'fa fa-check-circle'
 }
+
+export enum AlertClass {
+  critical = 'danger',
+  warning = 'warning',
+  info = 'info'
+}
index dfeecc52c088abcb6d333fb108b4a64d93045ff5..2e59f9e9be9c8ec86615ab4bfd64118113043a53 100644 (file)
@@ -74,6 +74,7 @@ export enum Icons {
   exit = 'fa fa-sign-out', // Exit
   restart = 'fa fa-history', // Restart
   deploy = 'fa fa-cube', // Deploy, Redeploy
+  cubes = 'fa fa-cubes',
 
   /* Icons for special effect */
   large = 'fa fa-lg', // icon becomes 33% larger
index 9741b1e6377b82b471ab5081a30feced20284b9b..03ad947eeb569438b3f4c633c32be5a19d7c8a85 100644 (file)
@@ -1,15 +1,15 @@
 import { Injectable } from '@angular/core';
-import { AbstractControlOptions, FormBuilder } from '@angular/forms';
+import { AbstractControlOptions, UntypedFormBuilder } from '@angular/forms';
 
 import { CdFormGroup } from './cd-form-group';
 
 /**
- * CdFormBuilder extends FormBuilder to create an CdFormGroup based form.
+ * CdFormBuilder extends FormBuilder to create a CdFormGroup based form.
  */
 @Injectable({
   providedIn: 'root'
 })
-export class CdFormBuilder extends FormBuilder {
+export class CdFormBuilder extends UntypedFormBuilder {
   group(
     controlsConfig: { [key: string]: any },
     extra: AbstractControlOptions | null = null
index 9869f398c82da442ced73848a1703be2ceeb7400..09aac7136c46aa8af8098dd2bf0032b2eaf761da 100644 (file)
@@ -2,7 +2,7 @@ import {
   AbstractControl,
   AbstractControlOptions,
   AsyncValidatorFn,
-  FormGroup,
+  UntypedFormGroup,
   NgForm,
   ValidatorFn
 } from '@angular/forms';
@@ -10,7 +10,7 @@ import {
 /**
  * CdFormGroup extends FormGroup with a few new methods that will help form development.
  */
-export class CdFormGroup extends FormGroup {
+export class CdFormGroup extends UntypedFormGroup {
   constructor(
     public controls: { [key: string]: AbstractControl },
     validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,
@@ -68,7 +68,7 @@ export class CdFormGroup extends FormGroup {
   showError(controlName: string, form: NgForm, errorName?: string): boolean {
     const control = this.get(controlName);
     return (
-      (form.submitted || control.dirty) &&
+      (form?.submitted || control.dirty) &&
       (errorName ? control.hasError(errorName) : control.invalid)
     );
   }
index 22371a50f71ecd0b85b65dd54842443c54a5ee65..bea426724e0736d396dac2f50048b0ca9dc85a5c 100644 (file)
@@ -18,7 +18,7 @@ export function isEmptyInputValue(value: any): boolean {
   return value == null || value.length === 0;
 }
 
-export type existsServiceFn = (value: any) => Observable<boolean>;
+export type existsServiceFn = (value: any, args?: any) => Observable<boolean>;
 
 export class CdValidators {
   /**
@@ -358,7 +358,8 @@ export class CdValidators {
     serviceFn: existsServiceFn,
     serviceFnThis: any = null,
     usernameFn?: Function,
-    uidField = false
+    uidField = false,
+    extraArgs = ''
   ): AsyncValidatorFn {
     let uName: string;
     return (control: AbstractControl): Observable<ValidationErrors | null> => {
@@ -377,7 +378,7 @@ export class CdValidators {
       }
 
       return observableTimer().pipe(
-        switchMapTo(serviceFn.call(serviceFnThis, uName)),
+        switchMapTo(serviceFn.call(serviceFnThis, uName, extraArgs)),
         map((resp: boolean) => {
           if (!resp) {
             return null;
index 7a6faa7e8aceb2e35bcfaa1ba115200d04ded1ef..50c6bb1998f88c3a9948726156421eaf999e9b00 100644 (file)
@@ -24,10 +24,8 @@ describe('CrudFormComponent', () => {
     ]
   });
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [CrudFormComponent]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [CrudFormComponent]
   });
 
   beforeEach(() => {
index 9f03ec4a6de8dabb5676d61f39a113b0452c632f..244500478efd36af647d19746aa980c00ff51b64 100644 (file)
@@ -4,7 +4,7 @@ import { DataGatewayService } from '~/app/shared/services/data-gateway.service';
 import { TaskWrapperService } from '~/app/shared/services/task-wrapper.service';
 import { FinishedTask } from '~/app/shared/models/finished-task';
 import { Location } from '@angular/common';
-import { FormGroup } from '@angular/forms';
+import { UntypedFormGroup } from '@angular/forms';
 import { mergeMap } from 'rxjs/operators';
 import { CrudTaskInfo, JsonFormUISchema } from './crud-form.model';
 import { Observable } from 'rxjs';
@@ -20,7 +20,7 @@ export class CrudFormComponent implements OnInit {
   model: any = {};
   resource: string;
   task: { message: string; id: string } = { message: '', id: '' };
-  form = new FormGroup({});
+  form = new UntypedFormGroup({});
   formUISchema$: Observable<JsonFormUISchema>;
   methodType: string;
   urlFormName: string;
index 58a20e2c391b89df00f1047591df5e67a03e35fa..2582569767258b037810105139c7bb1ac38c8e50 100644 (file)
@@ -4,6 +4,7 @@ import { FormGroup } from '@angular/forms';
 import { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';
 
 import { FormlyArrayTypeComponent } from './formly-array-type.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 @Component({
   template: ` <form [formGroup]="form">
@@ -23,15 +24,13 @@ describe('FormlyArrayTypeComponent', () => {
   let component: MockFormComponent;
   let fixture: ComponentFixture<MockFormComponent>;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [FormlyArrayTypeComponent],
-      imports: [
-        FormlyModule.forRoot({
-          types: [{ name: 'array', component: FormlyArrayTypeComponent }]
-        })
-      ]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [FormlyArrayTypeComponent],
+    imports: [
+      FormlyModule.forRoot({
+        types: [{ name: 'array', component: FormlyArrayTypeComponent }]
+      })
+    ]
   });
 
   beforeEach(() => {
index cd8b3a243ee417d761da4fcba3655019834e8d51..d2c34818dd4ce176bbfe631ed126f7cc81b68390 100644 (file)
@@ -3,16 +3,15 @@ import { FormControl } from '@angular/forms';
 import { FormlyModule } from '@ngx-formly/core';
 
 import { FormlyFileTypeComponent } from './formly-file-type.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 describe('FormlyFileTypeComponent', () => {
   let component: FormlyFileTypeComponent;
   let fixture: ComponentFixture<FormlyFileTypeComponent>;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      imports: [FormlyModule.forRoot()],
-      declarations: [FormlyFileTypeComponent]
-    }).compileComponents();
+  configureTestBed({
+    imports: [FormlyModule.forRoot()],
+    declarations: [FormlyFileTypeComponent]
   });
 
   beforeEach(() => {
index 0a36356dc23977a06eaf43ab36af0dff6200cb7a..0818807d08c67ac54bce46525cf4ac9ac8c466e7 100644 (file)
@@ -4,6 +4,7 @@ import { FormGroup } from '@angular/forms';
 import { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';
 
 import { FormlyInputTypeComponent } from './formly-input-type.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 @Component({
   template: ` <form [formGroup]="form">
@@ -24,15 +25,13 @@ describe('FormlyInputTypeComponent', () => {
   let component: MockFormComponent;
   let fixture: ComponentFixture<MockFormComponent>;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [FormlyInputTypeComponent],
-      imports: [
-        FormlyModule.forRoot({
-          types: [{ name: 'input', component: FormlyInputTypeComponent }]
-        })
-      ]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [FormlyInputTypeComponent],
+    imports: [
+      FormlyModule.forRoot({
+        types: [{ name: 'input', component: FormlyInputTypeComponent }]
+      })
+    ]
   });
 
   beforeEach(() => {
index db93615cd94772c93e44f7493978333d9423e021..52358d66002ae30727de79cd84858888411c6f1b 100644 (file)
@@ -4,6 +4,7 @@ import { FormGroup } from '@angular/forms';
 import { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';
 
 import { FormlyInputWrapperComponent } from './formly-input-wrapper.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 @Component({
   template: ` <form [formGroup]="form">
@@ -24,15 +25,13 @@ describe('FormlyInputWrapperComponent', () => {
   let component: MockFormComponent;
   let fixture: ComponentFixture<MockFormComponent>;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [FormlyInputWrapperComponent],
-      imports: [
-        FormlyModule.forRoot({
-          types: [{ name: 'input', component: FormlyInputWrapperComponent }]
-        })
-      ]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [FormlyInputWrapperComponent],
+    imports: [
+      FormlyModule.forRoot({
+        types: [{ name: 'input', component: FormlyInputWrapperComponent }]
+      })
+    ]
   });
 
   beforeEach(() => {
index b6c4dff059bd2c4963fd0b03f6e156ce13656dd9..37756ad52ffb726870b71fa61b0c6a913f98c075 100644 (file)
@@ -4,6 +4,7 @@ import { FormlyObjectTypeComponent } from './formly-object-type.component';
 import { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';
 import { Component } from '@angular/core';
 import { FormGroup } from '@angular/forms';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 @Component({
   template: ` <form [formGroup]="form">
@@ -24,15 +25,13 @@ describe('FormlyObjectTypeComponent', () => {
   let fixture: ComponentFixture<MockFormComponent>;
   let mockComponent: MockFormComponent;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [FormlyObjectTypeComponent],
-      imports: [
-        FormlyModule.forRoot({
-          types: [{ name: 'object', component: FormlyObjectTypeComponent }]
-        })
-      ]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [FormlyObjectTypeComponent],
+    imports: [
+      FormlyModule.forRoot({
+        types: [{ name: 'object', component: FormlyObjectTypeComponent }]
+      })
+    ]
   });
 
   beforeEach(() => {
index f3271785bad3d6c7995666be4d94b0ad1ac0ab5c..11eaa20755c6ec6fd180ad7456674fdda2b2597e 100644 (file)
@@ -4,6 +4,7 @@ import { FormGroup } from '@angular/forms';
 import { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';
 
 import { FormlyTextareaTypeComponent } from './formly-textarea-type.component';
+import { configureTestBed } from '~/testing/unit-test-helper';
 
 @Component({
   template: ` <form [formGroup]="form">
@@ -20,19 +21,18 @@ class MockFormComponent {
     }
   ];
 }
+
 describe('FormlyTextareaTypeComponent', () => {
   let component: MockFormComponent;
   let fixture: ComponentFixture<MockFormComponent>;
 
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [FormlyTextareaTypeComponent],
-      imports: [
-        FormlyModule.forRoot({
-          types: [{ name: 'input', component: FormlyTextareaTypeComponent }]
-        })
-      ]
-    }).compileComponents();
+  configureTestBed({
+    declarations: [FormlyTextareaTypeComponent],
+    imports: [
+      FormlyModule.forRoot({
+        types: [{ name: 'input', component: FormlyTextareaTypeComponent }]
+      })
+    ]
   });
 
   beforeEach(() => {
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolume-group.model.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolume-group.model.ts
new file mode 100644 (file)
index 0000000..fc087ab
--- /dev/null
@@ -0,0 +1,13 @@
+export interface CephfsSubvolumeGroup {
+  name: string;
+  info: CephfsSubvolumeGroupInfo;
+}
+
+export interface CephfsSubvolumeGroupInfo {
+  mode: number;
+  bytes_pcent: number;
+  bytes_quota: number;
+  data_pool: string;
+  state: string;
+  created_at: string;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolume.model.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolume.model.ts
new file mode 100644 (file)
index 0000000..41858be
--- /dev/null
@@ -0,0 +1,18 @@
+export interface CephfsSubvolume {
+  name: string;
+  info: CephfsSubvolumeInfo;
+}
+
+export interface CephfsSubvolumeInfo {
+  mode: number;
+  type: string;
+  bytes_pcent: string;
+  bytes_quota: string;
+  data_pool: string;
+  path: string;
+  state: string;
+  created_at: string;
+  uid: number;
+  gid: number;
+  pool_namespace: string;
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolumegroup.model.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/cephfs-subvolumegroup.model.ts
new file mode 100644 (file)
index 0000000..fc087ab
--- /dev/null
@@ -0,0 +1,13 @@
+export interface CephfsSubvolumeGroup {
+  name: string;
+  info: CephfsSubvolumeGroupInfo;
+}
+
+export interface CephfsSubvolumeGroupInfo {
+  mode: number;
+  bytes_pcent: number;
+  bytes_quota: number;
+  data_pool: string;
+  state: string;
+  created_at: string;
+}
index f271c364c2673aa625a9bef2d35e0f6f50a3922e..177382c5350595624a60c3b82b8b24089bfee315 100644 (file)
@@ -37,6 +37,9 @@ export interface CephServiceAdditionalSpec {
   ssl_key: string;
   port: number;
   initial_admin_password: string;
+  rgw_realm: string;
+  rgw_zonegroup: string;
+  rgw_zone: string;
 }
 
 export interface CephServicePlacement {
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/upgrade.interface.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/models/upgrade.interface.ts
new file mode 100644 (file)
index 0000000..2a853d5
--- /dev/null
@@ -0,0 +1,15 @@
+export interface UpgradeInfoInterface {
+  image: string;
+  registry: string;
+  versions: string[];
+}
+
+export interface UpgradeStatusInterface {
+  target_image: string;
+  in_progress: boolean;
+  which: string;
+  services_complete: string;
+  progress: string;
+  message: string;
+  is_paused: boolean;
+}
index cbd57fd2643a7b92126d2cee2efe2ccc82306eed..7fdb304717bd557d1066a1576c1143a169e37de2 100644 (file)
@@ -8,17 +8,12 @@ import { FormatterService } from '../services/formatter.service';
 export class DimlessBinaryPerSecondPipe implements PipeTransform {
   constructor(private formatter: FormatterService) {}
 
-  transform(value: any): any {
-    return this.formatter.format_number(value, 1024, [
-      'B/s',
-      'KiB/s',
-      'MiB/s',
-      'GiB/s',
-      'TiB/s',
-      'PiB/s',
-      'EiB/s',
-      'ZiB/s',
-      'YiB/s'
-    ]);
+  transform(value: any, decimals: number = 1): any {
+    return this.formatter.format_number(
+      value,
+      1024,
+      ['B/s', 'KiB/s', 'MiB/s', 'GiB/s', 'TiB/s', 'PiB/s', 'EiB/s', 'ZiB/s', 'YiB/s'],
+      decimals
+    );
   }
 }
index cf5d2cdec24b13eff1c65f26fe7688e54c803c78..f4cfd259e77139a062a424dc8013193b9e1db32a 100644 (file)
@@ -8,17 +8,12 @@ import { FormatterService } from '../services/formatter.service';
 export class DimlessBinaryPipe implements PipeTransform {
   constructor(private formatter: FormatterService) {}
 
-  transform(value: any): any {
-    return this.formatter.format_number(value, 1024, [
-      'B',
-      'KiB',
-      'MiB',
-      'GiB',
-      'TiB',
-      'PiB',
-      'EiB',
-      'ZiB',
-      'YiB'
-    ]);
+  transform(value: any, decimals: number = 1): any {
+    return this.formatter.format_number(
+      value,
+      1024,
+      ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'],
+      decimals
+    );
   }
 }
index 1be11590dc4a7f980a78e03867301503c0fe3a53..a79942d6aaad49efc48281b2726af976dea10535 100644 (file)
@@ -8,7 +8,12 @@ import { FormatterService } from '../services/formatter.service';
 export class DimlessPipe implements PipeTransform {
   constructor(private formatter: FormatterService) {}
 
-  transform(value: any): any {
-    return this.formatter.format_number(value, 1000, ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y']);
+  transform(value: any, decimals: number = 1): any {
+    return this.formatter.format_number(
+      value,
+      1000,
+      ['', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'],
+      decimals
+    );
   }
 }
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/octal-to-human-readable.pipe.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/octal-to-human-readable.pipe.spec.ts
new file mode 100644 (file)
index 0000000..265365b
--- /dev/null
@@ -0,0 +1,32 @@
+import { OctalToHumanReadablePipe } from './octal-to-human-readable.pipe';
+
+describe('OctalToHumanReadablePipe', () => {
+  const testPipeResults = (value: any, expected: any) => {
+    // eslint-disable-next-line
+    for (let r in value) {
+      expect(value[r].content).toEqual(expected[r].content);
+    }
+  };
+
+  it('create an instance', () => {
+    const pipe = new OctalToHumanReadablePipe();
+    expect(pipe).toBeTruthy();
+  });
+
+  it('should transform decimal values to octal mode human readable', () => {
+    const values = [16877, 16868, 16804];
+
+    const expected = [
+      [{ content: 'owner: rwx' }, { content: 'group: r-x' }, { content: 'others: r-x' }],
+      [{ content: 'owner: rwx' }, { content: 'group: r--' }, { content: 'others: r--' }],
+      [{ content: 'owner: rw-' }, { content: 'group: r--' }, { content: 'others: r--' }]
+    ];
+
+    const pipe = new OctalToHumanReadablePipe();
+    // eslint-disable-next-line
+    for (let index in values) {
+      const summary = pipe.transform(values[index]);
+      testPipeResults(summary, expected[index]);
+    }
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/octal-to-human-readable.pipe.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/octal-to-human-readable.pipe.ts
new file mode 100644 (file)
index 0000000..54e7279
--- /dev/null
@@ -0,0 +1,96 @@
+import { Pipe, PipeTransform } from '@angular/core';
+
+@Pipe({
+  name: 'octalToHumanReadable'
+})
+export class OctalToHumanReadablePipe implements PipeTransform {
+  transform(value: number, toTableArray = false): any {
+    if (!value) {
+      return [];
+    }
+    const permissionSummary = [];
+    const permissions = ['---', '--x', '-w-', '-wx', 'r--', 'r-x', 'rw-', 'rwx'];
+    const octal = value.toString(8).padStart(7, '0');
+    const digits = octal.split('');
+
+    const fileType = this.getFileTypeSymbol(parseInt(digits[1] + digits[2]));
+    const owner = permissions[parseInt(digits[4])];
+    const group = permissions[parseInt(digits[5])];
+    const others = permissions[parseInt(digits[6])];
+
+    if (toTableArray) {
+      return {
+        owner: this.getItem(owner),
+        group: this.getItem(group),
+        others: this.getItem(others)
+      };
+    }
+
+    if (fileType !== 'directory') {
+      permissionSummary.push({
+        content: fileType,
+        class: 'badge-primary me-1'
+      });
+    }
+
+    if (owner !== '---') {
+      permissionSummary.push({
+        content: `owner: ${owner}`,
+        class: 'badge-primary me-1'
+      });
+    }
+
+    if (group !== '---') {
+      permissionSummary.push({
+        content: `group: ${group}`,
+        class: 'badge-primary me-1'
+      });
+    }
+
+    if (others !== '---') {
+      permissionSummary.push({
+        content: `others: ${others}`,
+        class: 'badge-primary me-1'
+      });
+    }
+
+    if (permissionSummary.length === 0) {
+      return [
+        {
+          content: 'no permissions',
+          class: 'badge-warning me-1',
+          toolTip: `owner: ${owner}, group: ${group}, others: ${others}`
+        }
+      ];
+    }
+
+    return permissionSummary;
+  }
+
+  private getFileTypeSymbol(fileType: number): string {
+    switch (fileType) {
+      case 1:
+        return 'fifo';
+      case 2:
+        return 'character';
+      case 4:
+        return 'directory';
+      case 6:
+        return 'block';
+      case 10:
+        return 'regular';
+      case 12:
+        return 'symbolic-link';
+      default:
+        return '-';
+    }
+  }
+
+  private getItem(item: string) {
+    const returnlist = [];
+    if (item.includes('r')) returnlist.push('read');
+    if (item.includes('w')) returnlist.push('write');
+    if (item.includes('x')) returnlist.push('execute');
+    return returnlist;
+  }
+}
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/path.pipe.spec.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/path.pipe.spec.ts
new file mode 100644 (file)
index 0000000..49375f8
--- /dev/null
@@ -0,0 +1,18 @@
+import { PathPipe } from './path.pipe';
+
+describe('PathPipe', () => {
+  it('create an instance', () => {
+    const pipe = new PathPipe();
+    expect(pipe).toBeTruthy();
+  });
+
+  it('should transform the path', () => {
+    const pipe = new PathPipe();
+    expect(pipe.transform('/a/b/c/d')).toBe('/a/.../d');
+  });
+
+  it('should transform the path with no slash at beginning', () => {
+    const pipe = new PathPipe();
+    expect(pipe.transform('a/b/c/d')).toBe('a/.../d');
+  });
+});
diff --git a/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/path.pipe.ts b/ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/pipes/path.pipe.ts
new file mode 100644 (file)
index 0000000..4f75864
--- /dev/null
@@ -0,0 +1,17 @@
+import { Pipe, PipeTransform } from '@angular/core';
+
+@Pipe({
+  name: 'path'
+})
+export class PathPipe implements PipeTransform {
+  transform(value: unknown): string {
+    if (!value) return '';
+    const splittedPath = value.toString().split('/');
+
+    if (splittedPath[0] === '') {
+      splittedPath.shift();
+      return `/${splittedPath[0]}/.../${splittedPath[splittedPath.length - 1]}`;
+    }
+    return `${splittedPath[0]}/.../${splittedPath[splittedPath.length - 1]}`;
+  }
+}
index 4abc029533ac39f993d63c397f49c29bcc4c4477..b5267aa71216d2c516baa8cd9a6708cd341ae9ec 100755 (executable)
@@ -35,6 +35,8 @@ import { SanitizeHtmlPipe } from './sanitize-html.pipe';
 import { SearchHighlightPipe } from './search-highlight.pipe';
 import { TruncatePipe } from './truncate.pipe';
 import { UpperFirstPipe } from './upper-first.pipe';
+import { OctalToHumanReadablePipe } from './octal-to-human-readable.pipe';
+import { PathPipe } from './path.pipe';
 
 @NgModule({
   imports: [CommonModule],
@@ -72,7 +74,9 @@ import { UpperFirstPipe } from './upper-first.pipe';
     HealthIconPipe,
     MgrSummaryPipe,
     MdsSummaryPipe,
-    OsdSummaryPipe
+    OsdSummaryPipe,
+    OctalToHumanReadablePipe,
+    PathPipe
   ],
   exports: [
     ArrayPipe,
@@ -108,7 +112,9 @@ import { UpperFirstPipe } from './upper-first.pipe';
     HealthIconPipe,
     MgrSummaryPipe,
     MdsSummaryPipe,
-    OsdSummaryPipe
+    OsdSummaryPipe,
+    OctalToHumanReadablePipe,
+    PathPipe
   ],
   providers: [
     ArrayPipe,
@@ -139,7 +145,8 @@ import { UpperFirstPipe } from './upper-first.pipe';
     HealthIconPipe,
     MgrSummaryPipe,
     MdsSummaryPipe,
-    OsdSummaryPipe
+    OsdSummaryPipe,
+    OctalToHumanReadablePipe
   ]
 })
 export class PipesModule {}
index f802b6b2add174a0124dad8eb1a20c3bc9b7b24c..251ab055e951609a68952f31865f2707cc0eec88 100644 (file)
@@ -40,10 +40,11 @@ export class RelativeDatePipe implements PipeTransform {
    */
   transform(value: Date | string | number, upperFirst = true): string {
     let date: moment.Moment;
+    const offset = moment().utcOffset();
     if (_.isNumber(value)) {
-      date = moment.unix(value);
+      date = moment.parseZone(moment.unix(value)).utc().utcOffset(offset).local();
     } else {
-      date = moment(value);
+      date = moment.parseZone(value).utc().utcOffset(offset).local();
     }
     if (!date.isValid()) {
       return '';
index 22f2230cbd41677e4d8e3358cbbcebb50074a488..d5bcbb1f06abd90e537600a0c08d85ce54293faf 100644 (file)
@@ -35,6 +35,8 @@ export class DocService {
       'nfs-ganesha': `${domain}mgr/dashboard/#configuring-nfs-ganesha-in-the-dashboard`,
       'rgw-nfs': `${domain}radosgw/nfs`,
       rgw: `${domain}mgr/dashboard/#enabling-the-object-gateway-management-frontend`,
+      'rgw-multisite': `${domain}/radosgw/multisite/#failover-and-disaster-recovery`,
+      multisite: `${domain}/radosgw/multisite`,
       dashboard: `${domain}mgr/dashboard`,
       grafana: `${domain}mgr/dashboard/#enabling-the-embedding-of-grafana-dashboards`,
       orch: `${domain}mgr/orchestrator`,
index b212004d2b1bd2fec8764e52a628e1fed1792f2a..b5e0b9475a44533830fd71ec69d49886434074cf 100644 (file)
@@ -41,7 +41,7 @@ export class FormatterService {
   formatNumberFromTo(
     n: any,
     units: any,
-    targetedUnits: string,
+    targetedUnits: string = '',
     conversionFactor: number,
     unitsArray: string[],
     decimals: number = 1
@@ -120,4 +120,22 @@ export class FormatterService {
 
     return 0;
   }
+
+  toOctalPermission(modes: any) {
+    const scopes = ['owner', 'group', 'others'];
+    let octalMode = '';
+    for (const scope of scopes) {
+      let scopeValue = 0;
+      const mode = modes[scope];
+
+      if (mode) {
+        if (mode.includes('read')) scopeValue += 4;
+        if (mode.includes('write')) scopeValue += 2;
+        if (mode.includes('execute')) scopeValue += 1;
+      }
+
+      octalMode += scopeValue.toString();
+    }
+    return octalMode;
+  }
 }
index df6f4854e1967d45090387c48ffdd0fb65521016..a4d50287595547b3c9409967994af32ad27bc9b6 100644 (file)
@@ -83,6 +83,9 @@ export class ModuleStatusGuardService implements CanActivate, CanActivateChild {
               button_name: config.button_name,
               button_route: config.button_route,
               button_title: config.button_title,
+              secondary_button_name: config.secondary_button_name,
+              secondary_button_route: config.secondary_button_route,
+              secondary_button_title: config.secondary_button_title,
               uiConfig: config.uiConfig,
               uiApiPath: config.uiApiPath,
               icon: Icons.wrench,
index 7f02d66db99fb5d59768328e42be59d59cf86e9e..16b9587e23abae828b7383383e606907394fb57f 100644 (file)
@@ -25,26 +25,44 @@ export class NumberFormatterService {
   formatFromTo(
     value: any,
     units: string,
-    targetedUnits: string,
+    targetedUnits: string = '',
     factor: number,
-    labels: string[]
+    labels: string[],
+    decimals: number = 1
   ): any {
-    return this.formatter.formatNumberFromTo(value, units, targetedUnits, factor, labels);
+    return this.formatter.formatNumberFromTo(value, units, targetedUnits, factor, labels, decimals);
   }
 
-  formatBytesFromTo(value: any, units: string, targetedUnits: string): any {
-    return this.formatFromTo(value, units, targetedUnits, 1024, this.bytesLabels);
+  formatBytesFromTo(value: any, units: string, targetedUnits: string, decimals: number = 1): any {
+    return this.formatFromTo(value, units, targetedUnits, 1024, this.bytesLabels, decimals);
   }
 
-  formatBytesPerSecondFromTo(value: any, units: string, targetedUnits: string): any {
-    return this.formatFromTo(value, units, targetedUnits, 1024, this.bytesPerSecondLabels);
+  formatBytesPerSecondFromTo(
+    value: any,
+    units: string,
+    targetedUnits: string,
+    decimals: number = 1
+  ): any {
+    return this.formatFromTo(
+      value,
+      units,
+      targetedUnits,
+      1024,
+      this.bytesPerSecondLabels,
+      decimals
+    );
   }
 
-  formatSecondsFromTo(value: any, units: string, targetedUnits: string): any {
-    return this.formatFromTo(value, units, targetedUnits, 1000, this.secondsLabels);
+  formatSecondsFromTo(value: any, units: string, targetedUnits: string, decimals: number = 1): any {
+    return this.formatFromTo(value, units, targetedUnits, 1000, this.secondsLabels, decimals);
   }
 
-  formatUnitlessFromTo(value: any, units: string, targetedUnits: string): any {
-    return this.formatFromTo(value, units, targetedUnits, 1000, this.unitlessLabels);
+  formatUnitlessFromTo(
+    value: any,
+    units: string,
+    targetedUnits: string = '',
+    decimals: number = 1
+  ): any {
+    return this.formatFromTo(value, units, targetedUnits, 1000, this.unitlessLabels, decimals);
   }
 }
index f26b80629b9206f61496dc4bcf513ef6eaa90e94..be6c27da6e2a77603531ca644eb4e486324cbe2e 100644 (file)
@@ -64,23 +64,25 @@ export class PrometheusAlertService {
       this.notifyOnAlertChanges(alerts, this.alerts);
     }
     this.activeAlerts = _.reduce<AlertmanagerAlert, number>(
-      this.alerts,
+      alerts,
       (result, alert) => (alert.status.state === 'active' ? ++result : result),
       0
     );
     this.activeCriticalAlerts = _.reduce<AlertmanagerAlert, number>(
-      this.alerts,
+      alerts,
       (result, alert) =>
         alert.status.state === 'active' && alert.labels.severity === 'critical' ? ++result : result,
       0
     );
     this.activeWarningAlerts = _.reduce<AlertmanagerAlert, number>(
-      this.alerts,
+      alerts,
       (result, alert) =>
         alert.status.state === 'active' && alert.labels.severity === 'warning' ? ++result : result,
       0
     );
-    this.alerts = alerts;
+    this.alerts = alerts.reverse().sort((a, b) => {
+      return a.labels.severity.localeCompare(b.labels.severity);
+    });
     this.canAlertsBeNotified = true;
   }
 
index bc11a0be39cac07b4d5dc7ce9a9deb38f2e2d98c..f6969c2e8e1b48a627f0c933b26f2b8b34289145 100644 (file)
@@ -352,6 +352,33 @@ export class TaskMessageService {
     ),
     'crud-component/id': this.newTaskMessage(this.commonOperations.delete, (id) =>
       this.crudMessageId(id)
+    ),
+    'cephfs/create': this.newTaskMessage(this.commonOperations.create, (metadata) =>
+      this.volume(metadata)
+    ),
+    'cephfs/edit': this.newTaskMessage(this.commonOperations.update, (metadata) =>
+      this.volume(metadata)
+    ),
+    'cephfs/remove': this.newTaskMessage(this.commonOperations.remove, (metadata) =>
+      this.volume(metadata)
+    ),
+    'cephfs/subvolume/create': this.newTaskMessage(this.commonOperations.create, (metadata) =>
+      this.subvolume(metadata)
+    ),
+    'cephfs/subvolume/edit': this.newTaskMessage(this.commonOperations.update, (metadata) =>
+      this.subvolume(metadata)
+    ),
+    'cephfs/subvolume/remove': this.newTaskMessage(this.commonOperations.remove, (metadata) =>
+      this.subvolume(metadata)
+    ),
+    'cephfs/subvolume/group/create': this.newTaskMessage(this.commonOperations.create, (metadata) =>
+      this.subvolumegroup(metadata)
+    ),
+    'cephfs/subvolume/group/edit': this.newTaskMessage(this.commonOperations.update, (metadata) =>
+      this.subvolumegroup(metadata)
+    ),
+    'cephfs/subvolume/group/remove': this.newTaskMessage(this.commonOperations.remove, (metadata) =>
+      this.subvolumegroup(metadata)
     )
   };
 
@@ -408,6 +435,18 @@ export class TaskMessageService {
     return $localize`${message}`;
   }
 
+  volume(metadata: any) {
+    return $localize`'${metadata.volumeName}'`;
+  }
+
+  subvolume(metadata: any) {
+    return $localize`subvolume '${metadata.subVolumeName}'`;
+  }
+
+  subvolumegroup(metadata: any) {
+    return $localize`subvolume group '${metadata.subvolumegroupName}'`;
+  }
+
   crudMessageId(id: string) {
     return $localize`${id}`;
   }
index 1f7770aec46063828e46e2a6bc04b25b7dcdff5b..646213554841a016248bf073ce0f968c46049b4f 100644 (file)
@@ -4,6 +4,10 @@ import 'jest-preset-angular/setup-jest';
 
 import './jestGlobalMocks';
 
+import { TextEncoder, TextDecoder } from 'util';
+
+Object.assign(global, { TextDecoder, TextEncoder });
+
 process.on('unhandledRejection', (error) => {
   const stack = error['stack'] || '';
   // Avoid potential hang on test failure when running tests in parallel.
index fc6a9a25446780f6e8b53f3866b3a1a53ba0a494..47dfaf0d4512f7260c1499f96db07bfd15c4e4db 100644 (file)
@@ -2,7 +2,7 @@
 @use './src/styles/defaults' as *;
 
 // Angular2-Tree Component
-@import '~@circlon/angular-tree-component/css/angular-tree-component.css';
+@import '@circlon/angular-tree-component/css/angular-tree-component.css';
 
 // Fork-Awesome
 $fa-font-path: '~fork-awesome/fonts';
@@ -23,9 +23,10 @@ $grid-breakpoints: (
   2xl: 1450px
 );
 
-@import '~bootstrap/scss/bootstrap';
-@import '~fork-awesome/scss/fork-awesome';
+@import 'bootstrap/scss/bootstrap';
+@import 'fork-awesome/scss/fork-awesome';
 @import 'app/ceph/dashboard/info-card/info-card-popover.scss';
+@import 'app/ceph/rgw/rgw-overview-dashboard/rgw-overview-card-popover.scss';
 @import './src/styles/bootstrap-extends';
 
 @import './src/styles/ceph-custom/basics';
@@ -182,7 +183,7 @@ a.btn-light {
 
 // Overrides the badge to rounded-pill
 .badge {
-  @extend .badge, .rounded-pill, .mb-1;
+  @extend .badge, .mb-1;
 }
 
 // Overriding badges to match the class name of badges in Bootstrap v5
index 1272c3c77ce62a11d074f43eacb48aca4d0caab5..e9c8a595620a8be9e19435d98646115254e26c65 100644 (file)
@@ -93,6 +93,8 @@ $chart-color-tooltip-background: $black !default;
 $chart-danger: #c9190b !default;
 $chart-color-strong-blue: #0078c8 !default;
 $chart-color-translucent-blue: #0096dc80 !default;
+$chart-color-border: #00000020 !default;
+$chart-color-translucent-yellow: #ef923472 !default;
 
 // Typography
 
@@ -127,6 +129,7 @@ $screen-sm-min: 576px !default;
 $screen-md-min: 768px !default;
 $screen-lg-min: 992px !default;
 $screen-xl-min: 1200px !default;
+$tree-container-height: 200px !default;
 
 $screen-xs-max: calc(#{$screen-sm-min} - 1px) !default;
 $screen-sm-max: calc(#{$screen-md-min} - 1px) !default;
index 12bef83cc58a6cf1419f09b94cf1c100fa3868a5..ca74ee21ecaef16ea13223eb038cb3900230a5b6 100644 (file)
@@ -6,7 +6,6 @@ import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/t
 
 import { NgbModal, NgbNav, NgbNavItem, NgbNavLink } from '@ng-bootstrap/ng-bootstrap';
 import _ from 'lodash';
-import { configureSuite } from '@apteco/ngth';
 import { of } from 'rxjs';
 
 import { InventoryDevice } from '~/app/ceph/cluster/inventory/inventory-devices/inventory-device.model';
@@ -31,15 +30,18 @@ import {
 } from '~/app/shared/models/prometheus-alerts';
 
 export function configureTestBed(configuration: any, entryComponents?: any) {
-  configureSuite(() => {
+  beforeEach(async () => {
     if (entryComponents) {
       // Declare entryComponents without having to add them to a module
       // This is needed since Jest doesn't yet support not declaring entryComponents
-      TestBed.configureTestingModule(configuration).overrideModule(BrowserDynamicTestingModule, {
-        set: { entryComponents: entryComponents }
-      });
+      await TestBed.configureTestingModule(configuration).overrideModule(
+        BrowserDynamicTestingModule,
+        {
+          set: { entryComponents: entryComponents }
+        }
+      );
     } else {
-      TestBed.configureTestingModule(configuration);
+      await TestBed.configureTestingModule(configuration);
     }
   });
 }
index cf9a49a689050a5e0477eabd0c15f0f2f209e1fc..e0cf323fd54f46959784e129f822190faaaea795 100644 (file)
     "noImplicitReturns": true,
     "noImplicitAny": true,
     "suppressImplicitAnyIndexErrors": true,
-    "target": "es2015",
+    "target": "ES2020",
     "module": "es2020",
     "baseUrl": "./",
     "resolveJsonModule": true,
     "paths": {
       "~/*": ["src/*"]
     },
-    "typeRoots": [
-      "node_modules/@types"
-    ],
-    "lib": [
-      "es2017",
-      "dom"
-    ],
+    "typeRoots": ["node_modules/@types"],
+    "lib": ["es2017", "dom"],
     "allowJs": true
   },
-  "exclude": [
-    "coverage",
-    "dist",
-    "node_modules",
-    "cypress"
-  ]
+  "exclude": ["coverage", "dist", "node_modules", "cypress"]
 }
index e50bb2adb5f69fff3159636f751bdeb81c71b858..68725be6e3559c435ccb66719ae2681013ee23e8 100644 (file)
@@ -33,7 +33,7 @@ from .services.auth import AuthManager, AuthManagerTool, JwtManager
 from .services.exception import dashboard_exception_handler
 from .services.rgw_client import configure_rgw_credentials
 from .services.sso import SSO_COMMANDS, handle_sso_command
-from .settings import handle_option_command, options_command_list, options_schema_list
+from .settings import Settings, handle_option_command, options_command_list, options_schema_list
 from .tools import NotificationQueue, RequestLoggingTool, TaskManager, \
     prepare_url_prefix, str_to_bool
 
@@ -178,9 +178,15 @@ class CherryPyConfig(object):
             context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
             context.load_cert_chain(cert_fname, pkey_fname)
             if sys.version_info >= (3, 7):
-                context.minimum_version = ssl.TLSVersion.TLSv1_3
+                if Settings.UNSAFE_TLS_v1_2:
+                    context.minimum_version = ssl.TLSVersion.TLSv1_2
+                else:
+                    context.minimum_version = ssl.TLSVersion.TLSv1_3
             else:
-                context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2
+                if Settings.UNSAFE_TLS_v1_2:
+                    context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1
+                else:
+                    context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2
 
             config['server.ssl_module'] = 'builtin'
             config['server.ssl_certificate'] = cert_fname
@@ -261,7 +267,7 @@ class CherryPyConfig(object):
                 resp_head['Access-Control-Allow-Origin'] = req_header_origin_url
             ac_method = req_head.get('Access-Control-Request-Method', None)
 
-            allowed_methods = ['GET', 'POST']
+            allowed_methods = ['GET', 'POST', 'PUT']
             allowed_headers = [
                 'Content-Type',
                 'Authorization',
index 3729c87331d827b8f615c72557090d846542aede..aeb5d94643903f3e4154946dfc0998d5a7b5e9d5 100644 (file)
@@ -1619,20 +1619,32 @@ paths:
       - jwt: []
       tags:
       - Cephfs
-  /api/cephfs/{fs_id}:
-    get:
-      parameters:
-      - in: path
-        name: fs_id
-        required: true
-        schema:
-          type: string
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                name:
+                  type: string
+                service_spec:
+                  type: string
+              required:
+              - name
+              - service_spec
+              type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -1646,16 +1658,12 @@ paths:
       - jwt: []
       tags:
       - Cephfs
-  /api/cephfs/{fs_id}/client/{client_id}:
+  /api/cephfs/remove/{name}:
     delete:
       parameters:
-      - in: path
-        name: fs_id
-        required: true
-        schema:
-          type: string
-      - in: path
-        name: client_id
+      - description: File System Name
+        in: path
+        name: name
         required: true
         schema:
           type: string
@@ -1681,22 +1689,38 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Remove CephFS Volume
       tags:
       - Cephfs
-  /api/cephfs/{fs_id}/clients:
-    get:
-      parameters:
-      - in: path
-        name: fs_id
-        required: true
-        schema:
-          type: string
+  /api/cephfs/rename:
+    put:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                name:
+                  description: Existing FS Name
+                  type: string
+                new_name:
+                  description: New FS Name
+                  type: string
+              required:
+              - name
+              - new_name
+              type: object
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -1708,25 +1732,36 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Rename CephFS Volume
       tags:
       - Cephfs
-  /api/cephfs/{fs_id}/get_root_directory:
-    get:
-      description: "\n        The root directory that can't be fetched using ls_dir\
-        \ (api).\n        :param fs_id: The filesystem identifier.\n        :return:\
-        \ The root directory\n        :rtype: dict\n        "
-      parameters:
-      - in: path
-        name: fs_id
-        required: true
-        schema:
-          type: string
+  /api/cephfs/subvolume:
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                subvol_name:
+                  type: string
+                vol_name:
+                  type: string
+              required:
+              - vol_name
+              - subvol_name
+              type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -1739,38 +1774,34 @@ paths:
       security:
       - jwt: []
       tags:
-      - Cephfs
-  /api/cephfs/{fs_id}/ls_dir:
-    get:
-      description: "\n        List directories of specified path.\n        :param\
-        \ fs_id: The filesystem identifier.\n        :param path: The path where to\
-        \ start listing the directory content.\n        Defaults to '/' if not set.\n\
-        \        :type path: str | bytes\n        :param depth: The number of steps\
-        \ to go down the directory tree.\n        :type depth: int | str\n       \
-        \ :return: The names of the directories below the specified path.\n      \
-        \  :rtype: list\n        "
-      parameters:
-      - in: path
-        name: fs_id
-        required: true
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: path
-        schema:
-          type: string
-      - default: 1
-        in: query
-        name: depth
-        schema:
-          type: integer
+      - CephFSSubvolume
+  /api/cephfs/subvolume/group:
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                group_name:
+                  type: string
+                vol_name:
+                  type: string
+              required:
+              - vol_name
+              - group_name
+              type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -1783,26 +1814,31 @@ paths:
       security:
       - jwt: []
       tags:
-      - Cephfs
-  /api/cephfs/{fs_id}/mds_counters:
-    get:
+      - CephfsSubvolumeGroup
+  /api/cephfs/subvolume/group/{vol_name}:
+    delete:
       parameters:
       - in: path
-        name: fs_id
+        name: vol_name
         required: true
         schema:
           type: string
-      - allowEmptyValue: true
-        in: query
-        name: counters
+      - in: query
+        name: group_name
+        required: true
         schema:
-          type: integer
+          type: string
       responses:
-        '200':
+        '202':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -1815,23 +1851,11 @@ paths:
       security:
       - jwt: []
       tags:
-      - Cephfs
-  /api/cephfs/{fs_id}/quota:
+      - CephfsSubvolumeGroup
     get:
-      description: "\n        Get the quotas of the specified path.\n        :param\
-        \ fs_id: The filesystem identifier.\n        :param path: The path of the\
-        \ directory/file.\n        :return: Returns a dictionary containing 'max_bytes'\n\
-        \        and 'max_files'.\n        :rtype: dict\n        "
       parameters:
-      - description: File System Identifier
-        in: path
-        name: fs_id
-        required: true
-        schema:
-          type: string
-      - description: File System Path
-        in: query
-        name: path
+      - in: path
+        name: vol_name
         required: true
         schema:
           type: string
@@ -1839,18 +1863,7 @@ paths:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  max_bytes:
-                    description: ''
-                    type: integer
-                  max_files:
-                    description: ''
-                    type: integer
-                required:
-                - max_bytes
-                - max_files
-                type: object
+              type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -1863,17 +1876,12 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Get Cephfs Quotas of the specified path
       tags:
-      - Cephfs
+      - CephfsSubvolumeGroup
     put:
-      description: "\n        Set the quotas of the specified path.\n        :param\
-        \ fs_id: The filesystem identifier.\n        :param path: The path of the\
-        \ directory/file.\n        :param max_bytes: The byte limit.\n        :param\
-        \ max_files: The file limit.\n        "
       parameters:
       - in: path
-        name: fs_id
+        name: vol_name
         required: true
         schema:
           type: string
@@ -1882,14 +1890,13 @@ paths:
           application/json:
             schema:
               properties:
-                max_bytes:
-                  type: string
-                max_files:
-                  type: string
-                path:
+                group_name:
                   type: string
+                size:
+                  type: integer
               required:
-              - path
+              - group_name
+              - size
               type: object
       responses:
         '200':
@@ -1914,39 +1921,26 @@ paths:
       security:
       - jwt: []
       tags:
-      - Cephfs
-  /api/cephfs/{fs_id}/snapshot:
-    delete:
-      description: "\n        Remove a snapshot.\n        :param fs_id: The filesystem\
-        \ identifier.\n        :param path: The path of the directory.\n        :param\
-        \ name: The name of the snapshot.\n        "
+      - CephfsSubvolumeGroup
+  /api/cephfs/subvolume/group/{vol_name}/info:
+    get:
       parameters:
       - in: path
-        name: fs_id
-        required: true
-        schema:
-          type: string
-      - in: query
-        name: path
+        name: vol_name
         required: true
         schema:
           type: string
       - in: query
-        name: name
+        name: group_name
         required: true
         schema:
           type: string
       responses:
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '204':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource deleted.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -1959,42 +1953,41 @@ paths:
       security:
       - jwt: []
       tags:
-      - Cephfs
-    post:
-      description: "\n        Create a snapshot.\n        :param fs_id: The filesystem\
-        \ identifier.\n        :param path: The path of the directory.\n        :param\
-        \ name: The name of the snapshot. If not specified, a name using the\n   \
-        \     current time in RFC3339 UTC format will be generated.\n        :return:\
-        \ The name of the snapshot.\n        :rtype: str\n        "
+      - CephfsSubvolumeGroup
+  /api/cephfs/subvolume/{vol_name}:
+    delete:
       parameters:
       - in: path
-        name: fs_id
+        name: vol_name
         required: true
         schema:
           type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                name:
-                  type: string
-                path:
-                  type: string
-              required:
-              - path
-              type: object
+      - in: query
+        name: subvol_name
+        required: true
+        schema:
+          type: string
+      - default: ''
+        in: query
+        name: group_name
+        schema:
+          type: string
+      - default: false
+        in: query
+        name: retain_snapshots
+        schema:
+          type: boolean
       responses:
-        '201':
+        '202':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
-        '202':
+          description: Operation is still executing. Please check the task queue.
+        '204':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
+          description: Resource deleted.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2007,33 +2000,25 @@ paths:
       security:
       - jwt: []
       tags:
-      - Cephfs
-  /api/cephfs/{fs_id}/tree:
-    delete:
-      description: "\n        Remove a directory.\n        :param fs_id: The filesystem\
-        \ identifier.\n        :param path: The path of the directory.\n        "
+      - CephFSSubvolume
+    get:
       parameters:
       - in: path
-        name: fs_id
+        name: vol_name
         required: true
         schema:
           type: string
-      - in: query
-        name: path
-        required: true
+      - default: ''
+        in: query
+        name: group_name
         schema:
           type: string
       responses:
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '204':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource deleted.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2046,13 +2031,11 @@ paths:
       security:
       - jwt: []
       tags:
-      - Cephfs
-    post:
-      description: "\n        Create a directory.\n        :param fs_id: The filesystem\
-        \ identifier.\n        :param path: The path of the directory.\n        "
+      - CephFSSubvolume
+    put:
       parameters:
       - in: path
-        name: fs_id
+        name: vol_name
         required: true
         schema:
           type: string
@@ -2061,17 +2044,23 @@ paths:
           application/json:
             schema:
               properties:
-                path:
+                group_name:
+                  default: ''
+                  type: string
+                size:
+                  type: integer
+                subvol_name:
                   type: string
               required:
-              - path
+              - subvol_name
+              - size
               type: object
       responses:
-        '201':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
+          description: Resource updated.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -2089,14 +2078,29 @@ paths:
       security:
       - jwt: []
       tags:
-      - Cephfs
-  /api/cluster:
+      - CephFSSubvolume
+  /api/cephfs/subvolume/{vol_name}/info:
     get:
-      parameters: []
+      parameters:
+      - in: path
+        name: vol_name
+        required: true
+        schema:
+          type: string
+      - in: query
+        name: subvol_name
+        required: true
+        schema:
+          type: string
+      - default: ''
+        in: query
+        name: group_name
+        schema:
+          type: string
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: OK
         '400':
@@ -2110,33 +2114,59 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Get the cluster status
       tags:
-      - Cluster
-    put:
-      parameters: []
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                status:
-                  description: Cluster Status
-                  type: string
-              required:
-              - status
-              type: object
+      - CephFSSubvolume
+  /api/cephfs/{fs_id}:
+    get:
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource updated.
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Cephfs
+  /api/cephfs/{fs_id}/client/{client_id}:
+    delete:
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
+      - in: path
+        name: client_id
+        required: true
+        schema:
+          type: string
+      responses:
         '202':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2148,14 +2178,16 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Update the cluster status
       tags:
-      - Cluster
-  /api/cluster/user:
+      - Cephfs
+  /api/cephfs/{fs_id}/clients:
     get:
-      description: "\n        Get list of ceph users and its respective data\n   \
-        \     "
-      parameters: []
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
@@ -2173,39 +2205,25 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Get Ceph Users
       tags:
-      - Cluster
-    post:
-      description: "\n        Add a ceph user with its defined capabilities.\n   \
-        \     :param user_entity: Entity to change\n        :param capabilities: List\
-        \ of capabilities to add to user_entity\n        "
-      parameters: []
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                capabilities:
-                  type: string
-                import_data:
-                  default: ''
-                  type: string
-                user_entity:
-                  default: ''
-                  type: string
-              type: object
+      - Cephfs
+  /api/cephfs/{fs_id}/get_root_directory:
+    get:
+      description: "\n        The root directory that can't be fetched using ls_dir\
+        \ (api).\n        :param fs_id: The filesystem identifier.\n        :return:\
+        \ The root directory\n        :rtype: dict\n        "
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
       responses:
-        '201':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource created.
-        '202':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2217,37 +2235,39 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Create Ceph User
       tags:
-      - Cluster
-    put:
-      description: "\n        Change the ceph user capabilities.\n        Setting\
-        \ new capabilities will overwrite current ones.\n        :param user_entity:\
-        \ Entity to change\n        :param capabilities: List of updated capabilities\
-        \ to user_entity\n        "
-      parameters: []
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                capabilities:
-                  type: string
-                user_entity:
-                  default: ''
-                  type: string
-              type: object
+      - Cephfs
+  /api/cephfs/{fs_id}/ls_dir:
+    get:
+      description: "\n        List directories of specified path.\n        :param\
+        \ fs_id: The filesystem identifier.\n        :param path: The path where to\
+        \ start listing the directory content.\n        Defaults to '/' if not set.\n\
+        \        :type path: str | bytes\n        :param depth: The number of steps\
+        \ to go down the directory tree.\n        :type depth: int | str\n       \
+        \ :return: The names of the directories below the specified path.\n      \
+        \  :rtype: list\n        "
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: path
+        schema:
+          type: string
+      - default: 1
+        in: query
+        name: depth
+        schema:
+          type: integer
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource updated.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2259,33 +2279,76 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Edit Ceph User
       tags:
-      - Cluster
-  /api/cluster/user/export:
-    post:
-      parameters: []
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                entities:
-                  type: string
-              required:
-              - entities
-              type: object
+      - Cephfs
+  /api/cephfs/{fs_id}/mds_counters:
+    get:
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: counters
+        schema:
+          type: integer
       responses:
-        '201':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
-        '202':
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Cephfs
+  /api/cephfs/{fs_id}/quota:
+    get:
+      description: "\n        Get the quotas of the specified path.\n        :param\
+        \ fs_id: The filesystem identifier.\n        :param path: The path of the\
+        \ directory/file.\n        :return: Returns a dictionary containing 'max_bytes'\n\
+        \        and 'max_files'.\n        :rtype: dict\n        "
+      parameters:
+      - description: File System Identifier
+        in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
+      - description: File System Path
+        in: query
+        name: path
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
+              schema:
+                properties:
+                  max_bytes:
+                    description: ''
+                    type: integer
+                  max_files:
+                    description: ''
+                    type: integer
+                required:
+                - max_bytes
+                - max_files
+                type: object
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2297,30 +2360,45 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Export Ceph Users
+      summary: Get Cephfs Quotas of the specified path
       tags:
-      - Cluster
-  /api/cluster/user/{user_entity}:
-    delete:
-      description: "\n        Delete a ceph user and it's defined capabilities.\n\
-        \        :param user_entity: Entity to delete\n        "
+      - Cephfs
+    put:
+      description: "\n        Set the quotas of the specified path.\n        :param\
+        \ fs_id: The filesystem identifier.\n        :param path: The path of the\
+        \ directory/file.\n        :param max_bytes: The byte limit.\n        :param\
+        \ max_files: The file limit.\n        "
       parameters:
       - in: path
-        name: user_entity
+        name: fs_id
         required: true
         schema:
           type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                max_bytes:
+                  type: string
+                max_files:
+                  type: string
+                path:
+                  type: string
+              required:
+              - path
+              type: object
       responses:
-        '202':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
-        '204':
+          description: Resource updated.
+        '202':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource deleted.
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2332,18 +2410,40 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Delete Ceph User
       tags:
-      - Cluster
-  /api/cluster_conf:
-    get:
-      parameters: []
+      - Cephfs
+  /api/cephfs/{fs_id}/snapshot:
+    delete:
+      description: "\n        Remove a snapshot.\n        :param fs_id: The filesystem\
+        \ identifier.\n        :param path: The path of the directory.\n        :param\
+        \ name: The name of the snapshot.\n        "
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
+      - in: query
+        name: path
+        required: true
+        schema:
+          type: string
+      - in: query
+        name: name
+        required: true
+        schema:
+          type: string
       responses:
-        '200':
+        '202':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2356,9 +2456,19 @@ paths:
       security:
       - jwt: []
       tags:
-      - ClusterConfiguration
+      - Cephfs
     post:
-      parameters: []
+      description: "\n        Create a snapshot.\n        :param fs_id: The filesystem\
+        \ identifier.\n        :param path: The path of the directory.\n        :param\
+        \ name: The name of the snapshot. If not specified, a name using the\n   \
+        \     current time in RFC3339 UTC format will be generated.\n        :return:\
+        \ The name of the snapshot.\n        :rtype: str\n        "
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
       requestBody:
         content:
           application/json:
@@ -2366,11 +2476,10 @@ paths:
               properties:
                 name:
                   type: string
-                value:
+                path:
                   type: string
               required:
-              - name
-              - value
+              - path
               type: object
       responses:
         '201':
@@ -2395,25 +2504,71 @@ paths:
       security:
       - jwt: []
       tags:
-      - ClusterConfiguration
-    put:
-      parameters: []
+      - Cephfs
+  /api/cephfs/{fs_id}/tree:
+    delete:
+      description: "\n        Remove a directory.\n        :param fs_id: The filesystem\
+        \ identifier.\n        :param path: The path of the directory.\n        "
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
+      - in: query
+        name: path
+        required: true
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Cephfs
+    post:
+      description: "\n        Create a directory.\n        :param fs_id: The filesystem\
+        \ identifier.\n        :param path: The path of the directory.\n        "
+      parameters:
+      - in: path
+        name: fs_id
+        required: true
+        schema:
+          type: string
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                options:
+                path:
                   type: string
               required:
-              - options
+              - path
               type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource updated.
+          description: Resource created.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -2431,96 +2586,15 @@ paths:
       security:
       - jwt: []
       tags:
-      - ClusterConfiguration
-  /api/cluster_conf/filter:
+      - Cephfs
+  /api/cluster:
     get:
-      parameters:
-      - allowEmptyValue: true
-        description: Config option names
-        in: query
-        name: names
-        schema:
-          type: string
+      parameters: []
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.0+json:
-              schema:
-                items:
-                  properties:
-                    can_update_at_runtime:
-                      description: Check if can update at runtime
-                      type: boolean
-                    daemon_default:
-                      description: Daemon specific default value
-                      type: string
-                    default:
-                      description: Default value for the config option
-                      type: string
-                    desc:
-                      description: Description of the configuration
-                      type: string
-                    enum_values:
-                      description: List of enums allowed
-                      items:
-                        type: string
-                      type: array
-                    flags:
-                      description: List of flags associated
-                      items:
-                        type: string
-                      type: array
-                    level:
-                      description: Config option level
-                      type: string
-                    long_desc:
-                      description: Elaborated description
-                      type: string
-                    max:
-                      description: Maximum value
-                      type: string
-                    min:
-                      description: Minimum value
-                      type: string
-                    name:
-                      description: Name of the config option
-                      type: string
-                    see_also:
-                      description: Related config options
-                      items:
-                        type: string
-                      type: array
-                    services:
-                      description: Services associated with the config option
-                      items:
-                        type: string
-                      type: array
-                    tags:
-                      description: Tags associated with the cluster
-                      items:
-                        type: string
-                      type: array
-                    type:
-                      description: Config option type
-                      type: string
-                  type: object
-                required:
-                - name
-                - type
-                - level
-                - desc
-                - long_desc
-                - default
-                - daemon_default
-                - tags
-                - services
-                - see_also
-                - enum_values
-                - min
-                - max
-                - can_update_at_runtime
-                - flags
-                type: array
+            application/vnd.ceph.api.v0.1+json:
+              type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -2533,33 +2607,33 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Get Cluster Configuration by name
+      summary: Get the cluster status
       tags:
-      - ClusterConfiguration
-  /api/cluster_conf/{name}:
-    delete:
-      parameters:
-      - in: path
-        name: name
-        required: true
-        schema:
-          type: string
-      - in: query
-        name: section
-        required: true
-        schema:
-          type: string
+      - Cluster
+    put:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                status:
+                  description: Cluster Status
+                  type: string
+              required:
+              - status
+              type: object
       responses:
-        '202':
+        '200':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
-        '204':
+          description: Resource updated.
+        '202':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
-          description: Resource deleted.
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2571,15 +2645,30 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Update the cluster status
       tags:
-      - ClusterConfiguration
+      - Cluster
+  /api/cluster/upgrade:
     get:
       parameters:
-      - in: path
-        name: name
-        required: true
+      - default: false
+        description: Show all image tags
+        in: query
+        name: tags
+        schema:
+          type: boolean
+      - allowEmptyValue: true
+        description: Ceph Image
+        in: query
+        name: image
         schema:
           type: string
+      - default: false
+        description: Show all available versions
+        in: query
+        name: show_all_versions
+        schema:
+          type: boolean
       responses:
         '200':
           content:
@@ -2597,50 +2686,23 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Get the available versions to upgrade
       tags:
-      - ClusterConfiguration
-  /api/crush_rule:
-    get:
+      - Upgrade
+  /api/cluster/upgrade/pause:
+    put:
       parameters: []
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v2.0+json:
-              schema:
-                properties:
-                  max_size:
-                    description: Maximum size of Rule
-                    type: integer
-                  min_size:
-                    description: Minimum size of Rule
-                    type: integer
-                  rule_id:
-                    description: Rule ID
-                    type: integer
-                  rule_name:
-                    description: Rule Name
-                    type: string
-                  ruleset:
-                    description: RuleSet related to the rule
-                    type: integer
-                  steps:
-                    description: Steps included in the rule
-                    items:
-                      type: object
-                    type: array
-                  type:
-                    description: Type of Rule
-                    type: integer
-                required:
-                - rule_id
-                - rule_name
-                - ruleset
-                - type
-                - min_size
-                - max_size
-                - steps
-                type: object
-          description: OK
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2652,9 +2714,38 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: List Crush Rule Configuration
+      summary: Pause the cluster upgrade
       tags:
-      - CrushRule
+      - Upgrade
+  /api/cluster/upgrade/resume:
+    put:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Resume the cluster upgrade
+      tags:
+      - Upgrade
+  /api/cluster/upgrade/start:
     post:
       parameters: []
       requestBody:
@@ -2662,18 +2753,18 @@ paths:
           application/json:
             schema:
               properties:
-                device_class:
+                daemon_types:
                   type: string
-                failure_domain:
+                host_placement:
                   type: string
-                name:
+                image:
                   type: string
-                root:
+                limit:
+                  type: string
+                services:
+                  type: string
+                version:
                   type: string
-              required:
-              - name
-              - root
-              - failure_domain
               type: object
       responses:
         '201':
@@ -2697,27 +2788,18 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Start the cluster upgrade
       tags:
-      - CrushRule
-  /api/crush_rule/{name}:
-    delete:
-      parameters:
-      - in: path
-        name: name
-        required: true
-        schema:
-          type: string
+      - Upgrade
+  /api/cluster/upgrade/status:
+    get:
+      parameters: []
       responses:
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '204':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource deleted.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2729,21 +2811,23 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Get the cluster upgrade status
       tags:
-      - CrushRule
-    get:
-      parameters:
-      - in: path
-        name: name
-        required: true
-        schema:
-          type: string
+      - Upgrade
+  /api/cluster/upgrade/stop:
+    put:
+      parameters: []
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v2.0+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2755,36 +2839,62 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Stop the cluster upgrade
       tags:
-      - CrushRule
-  /api/daemon/{daemon_name}:
-    put:
-      parameters:
-      - in: path
-        name: daemon_name
-        required: true
-        schema:
-          type: string
-      requestBody:
-        content:
-          application/json:
+      - Upgrade
+  /api/cluster/user:
+    get:
+      description: "\n        Get list of ceph users and its respective data\n   \
+        \     "
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Get Ceph Users
+      tags:
+      - Cluster
+    post:
+      description: "\n        Add a ceph user with its defined capabilities.\n   \
+        \     :param user_entity: Entity to change\n        :param capabilities: List\
+        \ of capabilities to add to user_entity\n        "
+      parameters: []
+      requestBody:
+        content:
+          application/json:
             schema:
               properties:
-                action:
+                capabilities:
+                  type: string
+                import_data:
                   default: ''
                   type: string
-                container_image:
+                user_entity:
+                  default: ''
                   type: string
               type: object
       responses:
-        '200':
+        '201':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource updated.
+          description: Resource created.
         '202':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: Operation is still executing. Please check the task queue.
         '400':
@@ -2798,46 +2908,37 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Create Ceph User
       tags:
-      - Daemon
-  /api/erasure_code_profile:
-    get:
+      - Cluster
+    put:
+      description: "\n        Change the ceph user capabilities.\n        Setting\
+        \ new capabilities will overwrite current ones.\n        :param user_entity:\
+        \ Entity to change\n        :param capabilities: List of updated capabilities\
+        \ to user_entity\n        "
       parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                capabilities:
+                  type: string
+                user_entity:
+                  default: ''
+                  type: string
+              type: object
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                items:
-                  properties:
-                    crush-failure-domain:
-                      description: ''
-                      type: string
-                    k:
-                      description: Number of data chunks
-                      type: integer
-                    m:
-                      description: Number of coding chunks
-                      type: integer
-                    name:
-                      description: Name of the profile
-                      type: string
-                    plugin:
-                      description: Plugin Info
-                      type: string
-                    technique:
-                      description: ''
-                      type: string
-                  type: object
-                required:
-                - crush-failure-domain
-                - k
-                - m
-                - plugin
-                - technique
-                - name
-                type: array
-          description: OK
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -2849,9 +2950,10 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: List Erasure Code Profile Information
+      summary: Edit Ceph User
       tags:
-      - ErasureCodeProfile
+      - Cluster
+  /api/cluster/user/export:
     post:
       parameters: []
       requestBody:
@@ -2859,10 +2961,10 @@ paths:
           application/json:
             schema:
               properties:
-                name:
+                entities:
                   type: string
               required:
-              - name
+              - entities
               type: object
       responses:
         '201':
@@ -2886,13 +2988,16 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Export Ceph Users
       tags:
-      - ErasureCodeProfile
-  /api/erasure_code_profile/{name}:
+      - Cluster
+  /api/cluster/user/{user_entity}:
     delete:
+      description: "\n        Delete a ceph user and it's defined capabilities.\n\
+        \        :param user_entity: Entity to delete\n        "
       parameters:
       - in: path
-        name: name
+        name: user_entity
         required: true
         schema:
           type: string
@@ -2918,15 +3023,12 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Delete Ceph User
       tags:
-      - ErasureCodeProfile
+      - Cluster
+  /api/cluster_conf:
     get:
-      parameters:
-      - in: path
-        name: name
-        required: true
-        schema:
-          type: string
+      parameters: []
       responses:
         '200':
           content:
@@ -2945,71 +3047,33 @@ paths:
       security:
       - jwt: []
       tags:
-      - ErasureCodeProfile
-  /api/feature_toggles:
-    get:
+      - ClusterConfiguration
+    post:
       parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                name:
+                  type: string
+                value:
+                  type: string
+              required:
+              - name
+              - value
+              type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  cephfs:
-                    description: ''
-                    type: boolean
-                  dashboard:
-                    description: ''
-                    type: boolean
-                  iscsi:
-                    description: ''
-                    type: boolean
-                  mirroring:
-                    description: ''
-                    type: boolean
-                  nfs:
-                    description: ''
-                    type: boolean
-                  rbd:
-                    description: ''
-                    type: boolean
-                  rgw:
-                    description: ''
-                    type: boolean
-                required:
-                - rbd
-                - mirroring
-                - iscsi
-                - cephfs
-                - rgw
-                - nfs
-                - dashboard
-                type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      summary: Get List Of Features
-      tags:
-      - FeatureTogglesEndpoint
-  /api/feedback:
-    get:
-      description: "\n        List all issues details.\n        "
-      parameters: []
-      responses:
-        '200':
+              type: object
+          description: Resource created.
+        '202':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -3022,43 +3086,28 @@ paths:
       security:
       - jwt: []
       tags:
-      - Report
-    post:
-      description: "\n        Create an issue.\n        :param project: The affected\
-        \ ceph component.\n        :param tracker: The tracker type.\n        :param\
-        \ subject: The title of the issue.\n        :param description: The description\
-        \ of the issue.\n        :param api_key: Ceph tracker api key.\n        "
+      - ClusterConfiguration
+    put:
       parameters: []
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                api_key:
-                  type: string
-                description:
-                  type: string
-                project:
-                  type: string
-                subject:
-                  type: string
-                tracker:
+                options:
                   type: string
               required:
-              - project
-              - tracker
-              - subject
-              - description
+              - options
               type: object
       responses:
-        '201':
+        '200':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
+          description: Resource updated.
         '202':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: Operation is still executing. Please check the task queue.
         '400':
@@ -3073,20 +3122,133 @@ paths:
       security:
       - jwt: []
       tags:
-      - Report
-  /api/feedback/api_key:
-    delete:
-      description: "\n        Deletes Ceph tracker API key.\n        "
-      parameters: []
-      responses:
-        '202':
-          content:
-            application/vnd.ceph.api.v0.1+json:
+      - ClusterConfiguration
+  /api/cluster_conf/filter:
+    get:
+      parameters:
+      - allowEmptyValue: true
+        description: Config option names
+        in: query
+        name: names
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                items:
+                  properties:
+                    can_update_at_runtime:
+                      description: Check if can update at runtime
+                      type: boolean
+                    daemon_default:
+                      description: Daemon specific default value
+                      type: string
+                    default:
+                      description: Default value for the config option
+                      type: string
+                    desc:
+                      description: Description of the configuration
+                      type: string
+                    enum_values:
+                      description: List of enums allowed
+                      items:
+                        type: string
+                      type: array
+                    flags:
+                      description: List of flags associated
+                      items:
+                        type: string
+                      type: array
+                    level:
+                      description: Config option level
+                      type: string
+                    long_desc:
+                      description: Elaborated description
+                      type: string
+                    max:
+                      description: Maximum value
+                      type: string
+                    min:
+                      description: Minimum value
+                      type: string
+                    name:
+                      description: Name of the config option
+                      type: string
+                    see_also:
+                      description: Related config options
+                      items:
+                        type: string
+                      type: array
+                    services:
+                      description: Services associated with the config option
+                      items:
+                        type: string
+                      type: array
+                    tags:
+                      description: Tags associated with the cluster
+                      items:
+                        type: string
+                      type: array
+                    type:
+                      description: Config option type
+                      type: string
+                  type: object
+                required:
+                - name
+                - type
+                - level
+                - desc
+                - long_desc
+                - default
+                - daemon_default
+                - tags
+                - services
+                - see_also
+                - enum_values
+                - min
+                - max
+                - can_update_at_runtime
+                - flags
+                type: array
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Get Cluster Configuration by name
+      tags:
+      - ClusterConfiguration
+  /api/cluster_conf/{name}:
+    delete:
+      parameters:
+      - in: path
+        name: name
+        required: true
+        schema:
+          type: string
+      - in: query
+        name: section
+        required: true
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: Operation is still executing. Please check the task queue.
         '204':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: Resource deleted.
         '400':
@@ -3101,14 +3263,18 @@ paths:
       security:
       - jwt: []
       tags:
-      - Report
+      - ClusterConfiguration
     get:
-      description: "\n        Returns Ceph tracker API key.\n        "
-      parameters: []
+      parameters:
+      - in: path
+        name: name
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: OK
         '400':
@@ -3123,30 +3289,92 @@ paths:
       security:
       - jwt: []
       tags:
-      - Report
+      - ClusterConfiguration
+  /api/crush_rule:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v2.0+json:
+              schema:
+                properties:
+                  max_size:
+                    description: Maximum size of Rule
+                    type: integer
+                  min_size:
+                    description: Minimum size of Rule
+                    type: integer
+                  rule_id:
+                    description: Rule ID
+                    type: integer
+                  rule_name:
+                    description: Rule Name
+                    type: string
+                  ruleset:
+                    description: RuleSet related to the rule
+                    type: integer
+                  steps:
+                    description: Steps included in the rule
+                    items:
+                      type: object
+                    type: array
+                  type:
+                    description: Type of Rule
+                    type: integer
+                required:
+                - rule_id
+                - rule_name
+                - ruleset
+                - type
+                - min_size
+                - max_size
+                - steps
+                type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: List Crush Rule Configuration
+      tags:
+      - CrushRule
     post:
-      description: "\n        Sets Ceph tracker API key.\n        :param api_key:\
-        \ The Ceph tracker API key.\n        "
       parameters: []
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                api_key:
+                device_class:
+                  type: string
+                failure_domain:
+                  type: string
+                name:
+                  type: string
+                root:
                   type: string
               required:
-              - api_key
+              - name
+              - root
+              - failure_domain
               type: object
       responses:
         '201':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: Resource created.
         '202':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: Operation is still executing. Please check the task queue.
         '400':
@@ -3161,21 +3389,26 @@ paths:
       security:
       - jwt: []
       tags:
-      - Report
-  /api/grafana/dashboards:
-    post:
-      parameters: []
+      - CrushRule
+  /api/crush_rule/{name}:
+    delete:
+      parameters:
+      - in: path
+        name: name
+        required: true
+        schema:
+          type: string
       responses:
-        '201':
+        '202':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
-        '202':
+          description: Operation is still executing. Please check the task queue.
+        '204':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
+          description: Resource deleted.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -3188,22 +3421,19 @@ paths:
       security:
       - jwt: []
       tags:
-      - Grafana
-  /api/grafana/url:
+      - CrushRule
     get:
-      parameters: []
+      parameters:
+      - in: path
+        name: name
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  instance:
-                    description: grafana instance
-                    type: string
-                required:
-                - instance
-                type: object
+            application/vnd.ceph.api.v2.0+json:
+              type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -3216,15 +3446,18 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: List Grafana URL Instance
       tags:
-      - Grafana
-  /api/grafana/validation/{params}:
+      - CrushRule
+  /api/daemon:
     get:
+      description: "List all daemons in the cluster. Also filter by the daemon types\
+        \ specified\n\n        :param daemon_types: List of daemon types to filter\
+        \ by.\n        :return: Returns list of daemons.\n        :rtype: list\n \
+        \       "
       parameters:
-      - in: path
-        name: params
-        required: true
+      - allowEmptyValue: true
+        in: query
+        name: daemon_types
         schema:
           type: string
       responses:
@@ -3245,15 +3478,87 @@ paths:
       security:
       - jwt: []
       tags:
-      - Grafana
-  /api/health/full:
+      - Daemon
+  /api/daemon/{daemon_name}:
+    put:
+      parameters:
+      - in: path
+        name: daemon_name
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                action:
+                  default: ''
+                  type: string
+                container_image:
+                  type: string
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v0.1+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v0.1+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Daemon
+  /api/erasure_code_profile:
     get:
       parameters: []
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              type: object
+              schema:
+                items:
+                  properties:
+                    crush-failure-domain:
+                      description: ''
+                      type: string
+                    k:
+                      description: Number of data chunks
+                      type: integer
+                    m:
+                      description: Number of coding chunks
+                      type: integer
+                    name:
+                      description: Name of the profile
+                      type: string
+                    plugin:
+                      description: Plugin Info
+                      type: string
+                    technique:
+                      description: ''
+                      type: string
+                  type: object
+                required:
+                - crush-failure-domain
+                - k
+                - m
+                - plugin
+                - technique
+                - name
+                type: array
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -3266,17 +3571,32 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: List Erasure Code Profile Information
       tags:
-      - Health
-  /api/health/get_cluster_capacity:
-    get:
+      - ErasureCodeProfile
+    post:
       parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                name:
+                  type: string
+              required:
+              - name
+              type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -3289,10 +3609,46 @@ paths:
       security:
       - jwt: []
       tags:
-      - Health
-  /api/health/get_cluster_fsid:
+      - ErasureCodeProfile
+  /api/erasure_code_profile/{name}:
+    delete:
+      parameters:
+      - in: path
+        name: name
+        required: true
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - ErasureCodeProfile
     get:
-      parameters: []
+      parameters:
+      - in: path
+        name: name
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
@@ -3311,8 +3667,8 @@ paths:
       security:
       - jwt: []
       tags:
-      - Health
-  /api/health/minimal:
+      - ErasureCodeProfile
+  /api/feature_toggles:
     get:
       parameters: []
       responses:
@@ -3321,363 +3677,35 @@ paths:
             application/vnd.ceph.api.v1.0+json:
               schema:
                 properties:
-                  client_perf:
+                  cephfs:
                     description: ''
-                    properties:
-                      read_bytes_sec:
-                        description: ''
-                        type: integer
-                      read_op_per_sec:
-                        description: ''
-                        type: integer
-                      recovering_bytes_per_sec:
-                        description: ''
-                        type: integer
-                      write_bytes_sec:
-                        description: ''
-                        type: integer
-                      write_op_per_sec:
-                        description: ''
-                        type: integer
-                    required:
-                    - read_bytes_sec
-                    - read_op_per_sec
-                    - recovering_bytes_per_sec
-                    - write_bytes_sec
-                    - write_op_per_sec
-                    type: object
-                  df:
+                    type: boolean
+                  dashboard:
                     description: ''
-                    properties:
-                      stats:
-                        description: ''
-                        properties:
-                          total_avail_bytes:
-                            description: ''
-                            type: integer
-                          total_bytes:
-                            description: ''
-                            type: integer
-                          total_used_raw_bytes:
-                            description: ''
-                            type: integer
-                        required:
-                        - total_avail_bytes
-                        - total_bytes
-                        - total_used_raw_bytes
-                        type: object
-                    required:
-                    - stats
-                    type: object
-                  fs_map:
+                    type: boolean
+                  iscsi:
                     description: ''
-                    properties:
-                      filesystems:
-                        description: ''
-                        items:
-                          properties:
-                            mdsmap:
-                              description: ''
-                              properties:
-                                balancer:
-                                  description: ''
-                                  type: string
-                                compat:
-                                  description: ''
-                                  properties:
-                                    compat:
-                                      description: ''
-                                      type: string
-                                    incompat:
-                                      description: ''
-                                      type: string
-                                    ro_compat:
-                                      description: ''
-                                      type: string
-                                  required:
-                                  - compat
-                                  - ro_compat
-                                  - incompat
-                                  type: object
-                                created:
-                                  description: ''
-                                  type: string
-                                damaged:
-                                  description: ''
-                                  items:
-                                    type: integer
-                                  type: array
-                                data_pools:
-                                  description: ''
-                                  items:
-                                    type: integer
-                                  type: array
-                                enabled:
-                                  description: ''
-                                  type: boolean
-                                epoch:
-                                  description: ''
-                                  type: integer
-                                ever_allowed_features:
-                                  description: ''
-                                  type: integer
-                                explicitly_allowed_features:
-                                  description: ''
-                                  type: integer
-                                failed:
-                                  description: ''
-                                  items:
-                                    type: integer
-                                  type: array
-                                flags:
-                                  description: ''
-                                  type: integer
-                                fs_name:
-                                  description: ''
-                                  type: string
-                                in:
-                                  description: ''
-                                  items:
-                                    type: integer
-                                  type: array
-                                info:
-                                  description: ''
-                                  type: string
-                                last_failure:
-                                  description: ''
-                                  type: integer
-                                last_failure_osd_epoch:
-                                  description: ''
-                                  type: integer
-                                max_file_size:
-                                  description: ''
-                                  type: integer
-                                max_mds:
-                                  description: ''
-                                  type: integer
-                                metadata_pool:
-                                  description: ''
-                                  type: integer
-                                modified:
-                                  description: ''
-                                  type: string
-                                required_client_features:
-                                  description: ''
-                                  type: string
-                                root:
-                                  description: ''
-                                  type: integer
-                                session_autoclose:
-                                  description: ''
-                                  type: integer
-                                session_timeout:
-                                  description: ''
-                                  type: integer
-                                standby_count_wanted:
-                                  description: ''
-                                  type: integer
-                                stopped:
-                                  description: ''
-                                  items:
-                                    type: integer
-                                  type: array
-                                tableserver:
-                                  description: ''
-                                  type: integer
-                                up:
-                                  description: ''
-                                  type: string
-                              required:
-                              - session_autoclose
-                              - balancer
-                              - up
-                              - last_failure_osd_epoch
-                              - in
-                              - last_failure
-                              - max_file_size
-                              - explicitly_allowed_features
-                              - damaged
-                              - tableserver
-                              - failed
-                              - metadata_pool
-                              - epoch
-                              - stopped
-                              - max_mds
-                              - compat
-                              - required_client_features
-                              - data_pools
-                              - info
-                              - fs_name
-                              - created
-                              - standby_count_wanted
-                              - enabled
-                              - modified
-                              - session_timeout
-                              - flags
-                              - ever_allowed_features
-                              - root
-                              type: object
-                            standbys:
-                              description: ''
-                              type: string
-                          required:
-                          - mdsmap
-                          - standbys
-                          type: object
-                        type: array
-                    required:
-                    - filesystems
-                    type: object
-                  health:
-                    description: ''
-                    properties:
-                      checks:
-                        description: ''
-                        type: string
-                      mutes:
-                        description: ''
-                        type: string
-                      status:
-                        description: ''
-                        type: string
-                    required:
-                    - checks
-                    - mutes
-                    - status
-                    type: object
-                  hosts:
-                    description: ''
-                    type: integer
-                  iscsi_daemons:
-                    description: ''
-                    properties:
-                      down:
-                        description: ''
-                        type: integer
-                      up:
-                        description: ''
-                        type: integer
-                    required:
-                    - up
-                    - down
-                    type: object
-                  mgr_map:
-                    description: ''
-                    properties:
-                      active_name:
-                        description: ''
-                        type: string
-                      standbys:
-                        description: ''
-                        type: string
-                    required:
-                    - active_name
-                    - standbys
-                    type: object
-                  mon_status:
-                    description: ''
-                    properties:
-                      monmap:
-                        description: ''
-                        properties:
-                          mons:
-                            description: ''
-                            type: string
-                        required:
-                        - mons
-                        type: object
-                      quorum:
-                        description: ''
-                        items:
-                          type: integer
-                        type: array
-                    required:
-                    - monmap
-                    - quorum
-                    type: object
-                  osd_map:
+                    type: boolean
+                  mirroring:
                     description: ''
-                    properties:
-                      osds:
-                        description: ''
-                        items:
-                          properties:
-                            in:
-                              description: ''
-                              type: integer
-                            up:
-                              description: ''
-                              type: integer
-                          required:
-                          - in
-                          - up
-                          type: object
-                        type: array
-                    required:
-                    - osds
-                    type: object
-                  pg_info:
+                    type: boolean
+                  nfs:
                     description: ''
-                    properties:
-                      object_stats:
-                        description: ''
-                        properties:
-                          num_object_copies:
-                            description: ''
-                            type: integer
-                          num_objects:
-                            description: ''
-                            type: integer
-                          num_objects_degraded:
-                            description: ''
-                            type: integer
-                          num_objects_misplaced:
-                            description: ''
-                            type: integer
-                          num_objects_unfound:
-                            description: ''
-                            type: integer
-                        required:
-                        - num_objects
-                        - num_object_copies
-                        - num_objects_degraded
-                        - num_objects_misplaced
-                        - num_objects_unfound
-                        type: object
-                      pgs_per_osd:
-                        description: ''
-                        type: integer
-                      statuses:
-                        description: ''
-                        type: string
-                    required:
-                    - object_stats
-                    - pgs_per_osd
-                    - statuses
-                    type: object
-                  pools:
+                    type: boolean
+                  rbd:
                     description: ''
-                    type: string
+                    type: boolean
                   rgw:
                     description: ''
-                    type: integer
-                  scrub_status:
-                    description: ''
-                    type: string
+                    type: boolean
                 required:
-                - client_perf
-                - df
-                - fs_map
-                - health
-                - hosts
-                - iscsi_daemons
-                - mgr_map
-                - mon_status
-                - osd_map
-                - pg_info
-                - pools
+                - rbd
+                - mirroring
+                - iscsi
+                - cephfs
                 - rgw
-                - scrub_status
+                - nfs
+                - dashboard
                 type: object
           description: OK
         '400':
@@ -3691,104 +3719,18 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Get Cluster's minimal health report
+      summary: Get List Of Features
       tags:
-      - Health
-  /api/host:
+      - FeatureTogglesEndpoint
+  /api/feedback:
     get:
-      parameters:
-      - allowEmptyValue: true
-        description: Host Sources
-        in: query
-        name: sources
-        schema:
-          type: string
-      - default: false
-        description: Host Facts
-        in: query
-        name: facts
-        schema:
-          type: boolean
+      description: "\n        List all issues details.\n        "
+      parameters: []
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.2+json:
-              schema:
-                properties:
-                  addr:
-                    description: Host address
-                    type: string
-                  ceph_version:
-                    description: Ceph version
-                    type: string
-                  hostname:
-                    description: Hostname
-                    type: string
-                  labels:
-                    description: Labels related to the host
-                    items:
-                      type: string
-                    type: array
-                  service_instances:
-                    description: Service instances related to the host
-                    items:
-                      properties:
-                        count:
-                          description: Number of instances of the service
-                          type: integer
-                        type:
-                          description: type of service
-                          type: string
-                      required:
-                      - type
-                      - count
-                      type: object
-                    type: array
-                  service_type:
-                    description: ''
-                    type: string
-                  services:
-                    description: Services related to the host
-                    items:
-                      properties:
-                        id:
-                          description: Service Id
-                          type: string
-                        type:
-                          description: type of service
-                          type: string
-                      required:
-                      - type
-                      - id
-                      type: object
-                    type: array
-                  sources:
-                    description: Host Sources
-                    properties:
-                      ceph:
-                        description: ''
-                        type: boolean
-                      orchestrator:
-                        description: ''
-                        type: boolean
-                    required:
-                    - ceph
-                    - orchestrator
-                    type: object
-                  status:
-                    description: ''
-                    type: string
-                required:
-                - hostname
-                - services
-                - service_instances
-                - ceph_version
-                - addr
-                - labels
-                - service_type
-                - sources
-                - status
-                type: object
+            application/vnd.ceph.api.v0.1+json:
+              type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -3801,32 +3743,34 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: List Host Specifications
       tags:
-      - Host
+      - Report
     post:
+      description: "\n        Create an issue.\n        :param project: The affected\
+        \ ceph component.\n        :param tracker: The tracker type.\n        :param\
+        \ subject: The title of the issue.\n        :param description: The description\
+        \ of the issue.\n        :param api_key: Ceph tracker api key.\n        "
       parameters: []
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                addr:
-                  description: Network Address
+                api_key:
                   type: string
-                hostname:
-                  description: Hostname
+                description:
                   type: string
-                labels:
-                  description: Host Labels
-                  items:
-                    type: string
-                  type: array
-                status:
-                  description: Host Status
+                project:
+                  type: string
+                subject:
+                  type: string
+                tracker:
                   type: string
               required:
-              - hostname
+              - project
+              - tracker
+              - subject
+              - description
               type: object
       responses:
         '201':
@@ -3851,24 +3795,20 @@ paths:
       security:
       - jwt: []
       tags:
-      - Host
-  /api/host/{hostname}:
+      - Report
+  /api/feedback/api_key:
     delete:
-      parameters:
-      - in: path
-        name: hostname
-        required: true
-        schema:
-          type: string
+      description: "\n        Deletes Ceph tracker API key.\n        "
+      parameters: []
       responses:
         '202':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
           description: Operation is still executing. Please check the task queue.
         '204':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
           description: Resource deleted.
         '400':
@@ -3883,20 +3823,14 @@ paths:
       security:
       - jwt: []
       tags:
-      - Host
+      - Report
     get:
-      description: "\n        Get the specified host.\n        :raises: cherrypy.HTTPError:\
-        \ If host not found.\n        "
-      parameters:
-      - in: path
-        name: hostname
-        required: true
-        schema:
-          type: string
+      description: "\n        Returns Ceph tracker API key.\n        "
+      parameters: []
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
           description: OK
         '400':
@@ -3911,56 +3845,27 @@ paths:
       security:
       - jwt: []
       tags:
-      - Host
-    put:
-      description: "\n        Update the specified host.\n        Note, this is only\
-        \ supported when Ceph Orchestrator is enabled.\n        :param hostname: The\
-        \ name of the host to be processed.\n        :param update_labels: To update\
-        \ the labels.\n        :param labels: List of labels.\n        :param maintenance:\
-        \ Enter/Exit maintenance mode.\n        :param force: Force enter maintenance\
-        \ mode.\n        :param drain: Drain host\n        "
-      parameters:
-      - description: Hostname
-        in: path
-        name: hostname
-        required: true
-        schema:
-          type: string
+      - Report
+    post:
+      description: "\n        Sets Ceph tracker API key.\n        :param api_key:\
+        \ The Ceph tracker API key.\n        "
+      parameters: []
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                drain:
-                  default: false
-                  description: Drain Host
-                  type: boolean
-                force:
-                  default: false
-                  description: Force Enter Maintenance
-                  type: boolean
-                labels:
-                  description: Host Labels
-                  items:
-                    type: string
-                  type: array
-                maintenance:
-                  default: false
-                  description: Enter/Exit Maintenance
-                  type: boolean
-                update_labels:
-                  default: false
-                  description: Update Labels
-                  type: boolean
+                api_key:
+                  type: string
+              required:
+              - api_key
               type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v0.1+json:
-              schema:
-                properties: {}
-                type: object
-          description: Resource updated.
+              type: object
+          description: Resource created.
         '202':
           content:
             application/vnd.ceph.api.v0.1+json:
@@ -3978,21 +3883,21 @@ paths:
       security:
       - jwt: []
       tags:
-      - Host
-  /api/host/{hostname}/daemons:
-    get:
-      parameters:
-      - in: path
-        name: hostname
-        required: true
-        schema:
-          type: string
+      - Report
+  /api/grafana/dashboards:
+    post:
+      parameters: []
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -4005,20 +3910,22 @@ paths:
       security:
       - jwt: []
       tags:
-      - Host
-  /api/host/{hostname}/devices:
+      - Grafana
+  /api/grafana/url:
     get:
-      parameters:
-      - in: path
-        name: hostname
-        required: true
-        schema:
-          type: string
+      parameters: []
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              type: object
+              schema:
+                properties:
+                  instance:
+                    description: grafana instance
+                    type: string
+                required:
+                - instance
+                type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -4031,45 +3938,67 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: List Grafana URL Instance
       tags:
-      - Host
-  /api/host/{hostname}/identify_device:
-    post:
-      description: "\n        Identify a device by switching on the device light for\
-        \ N seconds.\n        :param hostname: The hostname of the device to process.\n\
-        \        :param device: The device identifier to process, e.g. ``/dev/dm-0``\
-        \ or\n        ``ABC1234DEF567-1R1234_ABC8DE0Q``.\n        :param duration:\
-        \ The duration in seconds how long the LED should flash.\n        "
+      - Grafana
+  /api/grafana/validation/{params}:
+    get:
       parameters:
       - in: path
-        name: hostname
+        name: params
         required: true
         schema:
           type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                device:
-                  type: string
-                duration:
-                  type: string
-              required:
-              - device
-              - duration
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
               type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Grafana
+  /api/health/full:
+    get:
+      parameters: []
       responses:
-        '201':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
-        '202':
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Health
+  /api/health/get_cluster_capacity:
+    get:
+      parameters: []
+      responses:
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -4082,289 +4011,395 @@ paths:
       security:
       - jwt: []
       tags:
-      - Host
-  /api/host/{hostname}/inventory:
+      - Health
+  /api/health/get_cluster_fsid:
     get:
-      parameters:
-      - description: Hostname
-        in: path
-        name: hostname
-        required: true
-        schema:
-          type: string
-      - allowEmptyValue: true
-        description: Trigger asynchronous refresh
-        in: query
-        name: refresh
-        schema:
-          type: string
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Health
+  /api/health/minimal:
+    get:
+      parameters: []
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               schema:
                 properties:
-                  addr:
-                    description: Host address
-                    type: string
-                  devices:
-                    description: Host devices
-                    items:
-                      properties:
-                        available:
-                          description: If the device can be provisioned to an OSD
-                          type: boolean
-                        device_id:
-                          description: Device's udev ID
-                          type: string
-                        human_readable_type:
-                          description: Device type. ssd or hdd
-                          type: string
-                        lsm_data:
-                          description: ''
+                  client_perf:
+                    description: ''
+                    properties:
+                      read_bytes_sec:
+                        description: ''
+                        type: integer
+                      read_op_per_sec:
+                        description: ''
+                        type: integer
+                      recovering_bytes_per_sec:
+                        description: ''
+                        type: integer
+                      write_bytes_sec:
+                        description: ''
+                        type: integer
+                      write_op_per_sec:
+                        description: ''
+                        type: integer
+                    required:
+                    - read_bytes_sec
+                    - read_op_per_sec
+                    - recovering_bytes_per_sec
+                    - write_bytes_sec
+                    - write_op_per_sec
+                    type: object
+                  df:
+                    description: ''
+                    properties:
+                      stats:
+                        description: ''
+                        properties:
+                          total_avail_bytes:
+                            description: ''
+                            type: integer
+                          total_bytes:
+                            description: ''
+                            type: integer
+                          total_used_raw_bytes:
+                            description: ''
+                            type: integer
+                        required:
+                        - total_avail_bytes
+                        - total_bytes
+                        - total_used_raw_bytes
+                        type: object
+                    required:
+                    - stats
+                    type: object
+                  fs_map:
+                    description: ''
+                    properties:
+                      filesystems:
+                        description: ''
+                        items:
                           properties:
-                            errors:
-                              description: ''
-                              items:
-                                type: string
-                              type: array
-                            health:
-                              description: ''
-                              type: string
-                            ledSupport:
+                            mdsmap:
                               description: ''
                               properties:
-                                FAILstatus:
+                                balancer:
                                   description: ''
                                   type: string
-                                FAILsupport:
+                                compat:
                                   description: ''
-                                  type: string
-                                IDENTstatus:
+                                  properties:
+                                    compat:
+                                      description: ''
+                                      type: string
+                                    incompat:
+                                      description: ''
+                                      type: string
+                                    ro_compat:
+                                      description: ''
+                                      type: string
+                                  required:
+                                  - compat
+                                  - ro_compat
+                                  - incompat
+                                  type: object
+                                created:
                                   description: ''
                                   type: string
-                                IDENTsupport:
+                                damaged:
                                   description: ''
-                                  type: string
-                              required:
-                              - IDENTsupport
-                              - IDENTstatus
-                              - FAILsupport
-                              - FAILstatus
-                              type: object
-                            linkSpeed:
-                              description: ''
-                              type: string
-                            mediaType:
-                              description: ''
-                              type: string
-                            rpm:
-                              description: ''
-                              type: string
-                            serialNum:
-                              description: ''
-                              type: string
-                            transport:
-                              description: ''
-                              type: string
-                          required:
-                          - serialNum
-                          - transport
-                          - mediaType
-                          - rpm
-                          - linkSpeed
-                          - health
-                          - ledSupport
-                          - errors
-                          type: object
-                        lvs:
-                          description: ''
-                          items:
-                            properties:
-                              block_uuid:
-                                description: ''
-                                type: string
-                              cluster_fsid:
-                                description: ''
-                                type: string
-                              cluster_name:
-                                description: ''
-                                type: string
-                              name:
-                                description: ''
-                                type: string
-                              osd_fsid:
-                                description: ''
-                                type: string
-                              osd_id:
-                                description: ''
-                                type: string
-                              osdspec_affinity:
-                                description: ''
-                                type: string
-                              type:
-                                description: ''
-                                type: string
-                            required:
-                            - name
-                            - osd_id
-                            - cluster_name
-                            - type
-                            - osd_fsid
-                            - cluster_fsid
-                            - osdspec_affinity
-                            - block_uuid
-                            type: object
-                          type: array
-                        osd_ids:
-                          description: Device OSD IDs
-                          items:
-                            type: integer
-                          type: array
-                        path:
-                          description: Device path
-                          type: string
-                        rejected_reasons:
-                          description: ''
-                          items:
-                            type: string
-                          type: array
-                        sys_api:
-                          description: ''
-                          properties:
-                            human_readable_size:
-                              description: ''
-                              type: string
-                            locked:
-                              description: ''
-                              type: integer
-                            model:
-                              description: ''
-                              type: string
-                            nr_requests:
-                              description: ''
-                              type: string
-                            partitions:
-                              description: ''
-                              properties:
-                                partition_name:
+                                  items:
+                                    type: integer
+                                  type: array
+                                data_pools:
                                   description: ''
-                                  properties:
-                                    holders:
-                                      description: ''
-                                      items:
-                                        type: string
-                                      type: array
-                                    human_readable_size:
-                                      description: ''
-                                      type: string
-                                    sectors:
-                                      description: ''
-                                      type: string
-                                    sectorsize:
-                                      description: ''
-                                      type: integer
-                                    size:
-                                      description: ''
-                                      type: integer
-                                    start:
-                                      description: ''
-                                      type: string
-                                  required:
-                                  - start
-                                  - sectors
-                                  - sectorsize
-                                  - size
-                                  - human_readable_size
-                                  - holders
-                                  type: object
+                                  items:
+                                    type: integer
+                                  type: array
+                                enabled:
+                                  description: ''
+                                  type: boolean
+                                epoch:
+                                  description: ''
+                                  type: integer
+                                ever_allowed_features:
+                                  description: ''
+                                  type: integer
+                                explicitly_allowed_features:
+                                  description: ''
+                                  type: integer
+                                failed:
+                                  description: ''
+                                  items:
+                                    type: integer
+                                  type: array
+                                flags:
+                                  description: ''
+                                  type: integer
+                                fs_name:
+                                  description: ''
+                                  type: string
+                                in:
+                                  description: ''
+                                  items:
+                                    type: integer
+                                  type: array
+                                info:
+                                  description: ''
+                                  type: string
+                                last_failure:
+                                  description: ''
+                                  type: integer
+                                last_failure_osd_epoch:
+                                  description: ''
+                                  type: integer
+                                max_file_size:
+                                  description: ''
+                                  type: integer
+                                max_mds:
+                                  description: ''
+                                  type: integer
+                                metadata_pool:
+                                  description: ''
+                                  type: integer
+                                modified:
+                                  description: ''
+                                  type: string
+                                required_client_features:
+                                  description: ''
+                                  type: string
+                                root:
+                                  description: ''
+                                  type: integer
+                                session_autoclose:
+                                  description: ''
+                                  type: integer
+                                session_timeout:
+                                  description: ''
+                                  type: integer
+                                standby_count_wanted:
+                                  description: ''
+                                  type: integer
+                                stopped:
+                                  description: ''
+                                  items:
+                                    type: integer
+                                  type: array
+                                tableserver:
+                                  description: ''
+                                  type: integer
+                                up:
+                                  description: ''
+                                  type: string
                               required:
-                              - partition_name
+                              - session_autoclose
+                              - balancer
+                              - up
+                              - last_failure_osd_epoch
+                              - in
+                              - last_failure
+                              - max_file_size
+                              - explicitly_allowed_features
+                              - damaged
+                              - tableserver
+                              - failed
+                              - metadata_pool
+                              - epoch
+                              - stopped
+                              - max_mds
+                              - compat
+                              - required_client_features
+                              - data_pools
+                              - info
+                              - fs_name
+                              - created
+                              - standby_count_wanted
+                              - enabled
+                              - modified
+                              - session_timeout
+                              - flags
+                              - ever_allowed_features
+                              - root
                               type: object
-                            path:
-                              description: ''
-                              type: string
-                            removable:
-                              description: ''
-                              type: string
-                            rev:
-                              description: ''
-                              type: string
-                            ro:
-                              description: ''
-                              type: string
-                            rotational:
-                              description: ''
-                              type: string
-                            sas_address:
-                              description: ''
-                              type: string
-                            sas_device_handle:
-                              description: ''
-                              type: string
-                            scheduler_mode:
-                              description: ''
-                              type: string
-                            sectors:
-                              description: ''
-                              type: integer
-                            sectorsize:
-                              description: ''
-                              type: string
-                            size:
-                              description: ''
-                              type: integer
-                            support_discard:
-                              description: ''
-                              type: string
-                            vendor:
+                            standbys:
                               description: ''
                               type: string
                           required:
-                          - removable
-                          - ro
-                          - vendor
-                          - model
-                          - rev
-                          - sas_address
-                          - sas_device_handle
-                          - support_discard
-                          - rotational
-                          - nr_requests
-                          - scheduler_mode
-                          - partitions
-                          - sectors
-                          - sectorsize
-                          - size
-                          - human_readable_size
-                          - path
-                          - locked
+                          - mdsmap
+                          - standbys
                           type: object
-                      required:
-                      - rejected_reasons
-                      - available
-                      - path
-                      - sys_api
-                      - lvs
-                      - human_readable_type
-                      - device_id
-                      - lsm_data
-                      - osd_ids
-                      type: object
-                    type: array
-                  labels:
-                    description: Host labels
-                    items:
-                      type: string
-                    type: array
-                  name:
-                    description: Hostname
+                        type: array
+                    required:
+                    - filesystems
+                    type: object
+                  health:
+                    description: ''
+                    properties:
+                      checks:
+                        description: ''
+                        type: string
+                      mutes:
+                        description: ''
+                        type: string
+                      status:
+                        description: ''
+                        type: string
+                    required:
+                    - checks
+                    - mutes
+                    - status
+                    type: object
+                  hosts:
+                    description: ''
+                    type: integer
+                  iscsi_daemons:
+                    description: ''
+                    properties:
+                      down:
+                        description: ''
+                        type: integer
+                      up:
+                        description: ''
+                        type: integer
+                    required:
+                    - up
+                    - down
+                    type: object
+                  mgr_map:
+                    description: ''
+                    properties:
+                      active_name:
+                        description: ''
+                        type: string
+                      standbys:
+                        description: ''
+                        type: string
+                    required:
+                    - active_name
+                    - standbys
+                    type: object
+                  mon_status:
+                    description: ''
+                    properties:
+                      monmap:
+                        description: ''
+                        properties:
+                          mons:
+                            description: ''
+                            type: string
+                        required:
+                        - mons
+                        type: object
+                      quorum:
+                        description: ''
+                        items:
+                          type: integer
+                        type: array
+                    required:
+                    - monmap
+                    - quorum
+                    type: object
+                  osd_map:
+                    description: ''
+                    properties:
+                      osds:
+                        description: ''
+                        items:
+                          properties:
+                            in:
+                              description: ''
+                              type: integer
+                            up:
+                              description: ''
+                              type: integer
+                          required:
+                          - in
+                          - up
+                          type: object
+                        type: array
+                    required:
+                    - osds
+                    type: object
+                  pg_info:
+                    description: ''
+                    properties:
+                      object_stats:
+                        description: ''
+                        properties:
+                          num_object_copies:
+                            description: ''
+                            type: integer
+                          num_objects:
+                            description: ''
+                            type: integer
+                          num_objects_degraded:
+                            description: ''
+                            type: integer
+                          num_objects_misplaced:
+                            description: ''
+                            type: integer
+                          num_objects_unfound:
+                            description: ''
+                            type: integer
+                        required:
+                        - num_objects
+                        - num_object_copies
+                        - num_objects_degraded
+                        - num_objects_misplaced
+                        - num_objects_unfound
+                        type: object
+                      pgs_per_osd:
+                        description: ''
+                        type: integer
+                      statuses:
+                        description: ''
+                        type: string
+                    required:
+                    - object_stats
+                    - pgs_per_osd
+                    - statuses
+                    type: object
+                  pools:
+                    description: ''
+                    type: string
+                  rgw:
+                    description: ''
+                    type: integer
+                  scrub_status:
+                    description: ''
                     type: string
                 required:
-                - name
-                - addr
-                - devices
-                - labels
+                - client_perf
+                - df
+                - fs_map
+                - health
+                - hosts
+                - iscsi_daemons
+                - mgr_map
+                - mon_status
+                - osd_map
+                - pg_info
+                - pools
+                - rgw
+                - scrub_status
                 type: object
           description: OK
         '400':
@@ -4378,162 +4413,124 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Get inventory of a host
+      summary: Get Cluster's minimal health report
       tags:
-      - Host
-  /api/host/{hostname}/smart:
+      - Health
+  /api/host:
     get:
       parameters:
-      - in: path
-        name: hostname
-        required: true
+      - allowEmptyValue: true
+        description: Host Sources
+        in: query
+        name: sources
+        schema:
+          type: string
+      - default: false
+        description: Host Facts
+        in: query
+        name: facts
+        schema:
+          type: boolean
+      - default: 0
+        in: query
+        name: offset
+        schema:
+          type: integer
+      - default: 5
+        in: query
+        name: limit
+        schema:
+          type: integer
+      - default: ''
+        in: query
+        name: search
+        schema:
+          type: string
+      - default: ''
+        in: query
+        name: sort
         schema:
           type: string
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - Host
-  /api/iscsi/discoveryauth:
-    get:
-      parameters: []
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v1.3+json:
               schema:
-                items:
-                  properties:
-                    mutual_password:
-                      description: ''
-                      type: string
-                    mutual_user:
-                      description: ''
-                      type: string
-                    password:
-                      description: password
-                      type: string
-                    user:
-                      description: username
+                properties:
+                  addr:
+                    description: Host address
+                    type: string
+                  ceph_version:
+                    description: Ceph version
+                    type: string
+                  hostname:
+                    description: Hostname
+                    type: string
+                  labels:
+                    description: Labels related to the host
+                    items:
                       type: string
-                  type: object
+                    type: array
+                  service_instances:
+                    description: Service instances related to the host
+                    items:
+                      properties:
+                        count:
+                          description: Number of instances of the service
+                          type: integer
+                        type:
+                          description: type of service
+                          type: string
+                      required:
+                      - type
+                      - count
+                      type: object
+                    type: array
+                  service_type:
+                    description: ''
+                    type: string
+                  services:
+                    description: Services related to the host
+                    items:
+                      properties:
+                        id:
+                          description: Service Id
+                          type: string
+                        type:
+                          description: type of service
+                          type: string
+                      required:
+                      - type
+                      - id
+                      type: object
+                    type: array
+                  sources:
+                    description: Host Sources
+                    properties:
+                      ceph:
+                        description: ''
+                        type: boolean
+                      orchestrator:
+                        description: ''
+                        type: boolean
+                    required:
+                    - ceph
+                    - orchestrator
+                    type: object
+                  status:
+                    description: ''
+                    type: string
                 required:
-                - user
-                - password
-                - mutual_user
-                - mutual_password
-                type: array
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      summary: Get Iscsi discoveryauth Details
-      tags:
-      - Iscsi
-    put:
-      parameters:
-      - description: Username
-        in: query
-        name: user
-        required: true
-        schema:
-          type: string
-      - description: Password
-        in: query
-        name: password
-        required: true
-        schema:
-          type: string
-      - description: Mutual UserName
-        in: query
-        name: mutual_user
-        required: true
-        schema:
-          type: string
-      - description: Mutual Password
-        in: query
-        name: mutual_password
-        required: true
-        schema:
-          type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                mutual_password:
-                  description: Mutual Password
-                  type: string
-                mutual_user:
-                  description: Mutual UserName
-                  type: string
-                password:
-                  description: Password
-                  type: string
-                user:
-                  description: Username
-                  type: string
-              required:
-              - user
-              - password
-              - mutual_user
-              - mutual_password
-              type: object
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource updated.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      summary: Set Iscsi discoveryauth
-      tags:
-      - Iscsi
-  /api/iscsi/target:
-    get:
-      parameters: []
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
+                - hostname
+                - services
+                - service_instances
+                - ceph_version
+                - addr
+                - labels
+                - service_type
+                - sources
+                - status
+                type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -4546,8 +4543,9 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: List Host Specifications
       tags:
-      - IscsiTarget
+      - Host
     post:
       parameters: []
       requestBody:
@@ -4555,32 +4553,32 @@ paths:
           application/json:
             schema:
               properties:
-                acl_enabled:
-                  type: string
-                auth:
-                  type: string
-                clients:
-                  type: string
-                disks:
-                  type: string
-                groups:
-                  type: string
-                portals:
+                addr:
+                  description: Network Address
                   type: string
-                target_controls:
+                hostname:
+                  description: Hostname
                   type: string
-                target_iqn:
+                labels:
+                  description: Host Labels
+                  items:
+                    type: string
+                  type: array
+                status:
+                  description: Host Status
                   type: string
+              required:
+              - hostname
               type: object
       responses:
         '201':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
           description: Resource created.
         '202':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
           description: Operation is still executing. Please check the task queue.
         '400':
@@ -4595,12 +4593,12 @@ paths:
       security:
       - jwt: []
       tags:
-      - IscsiTarget
-  /api/iscsi/target/{target_iqn}:
+      - Host
+  /api/host/{hostname}:
     delete:
       parameters:
       - in: path
-        name: target_iqn
+        name: hostname
         required: true
         schema:
           type: string
@@ -4627,18 +4625,20 @@ paths:
       security:
       - jwt: []
       tags:
-      - IscsiTarget
+      - Host
     get:
+      description: "\n        Get the specified host.\n        :raises: cherrypy.HTTPError:\
+        \ If host not found.\n        "
       parameters:
       - in: path
-        name: target_iqn
+        name: hostname
         required: true
         schema:
           type: string
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v1.2+json:
               type: object
           description: OK
         '400':
@@ -4653,11 +4653,18 @@ paths:
       security:
       - jwt: []
       tags:
-      - IscsiTarget
+      - Host
     put:
+      description: "\n        Update the specified host.\n        Note, this is only\
+        \ supported when Ceph Orchestrator is enabled.\n        :param hostname: The\
+        \ name of the host to be processed.\n        :param update_labels: To update\
+        \ the labels.\n        :param labels: List of labels.\n        :param maintenance:\
+        \ Enter/Exit maintenance mode.\n        :param force: Force enter maintenance\
+        \ mode.\n        :param drain: Drain host\n        "
       parameters:
-      - in: path
-        name: target_iqn
+      - description: Hostname
+        in: path
+        name: hostname
         required: true
         schema:
           type: string
@@ -4666,32 +4673,39 @@ paths:
           application/json:
             schema:
               properties:
-                acl_enabled:
-                  type: string
-                auth:
-                  type: string
-                clients:
-                  type: string
-                disks:
-                  type: string
-                groups:
-                  type: string
-                new_target_iqn:
-                  type: string
-                portals:
-                  type: string
-                target_controls:
-                  type: string
+                drain:
+                  default: false
+                  description: Drain Host
+                  type: boolean
+                force:
+                  default: false
+                  description: Force Enter Maintenance
+                  type: boolean
+                labels:
+                  description: Host Labels
+                  items:
+                    type: string
+                  type: array
+                maintenance:
+                  default: false
+                  description: Enter/Exit Maintenance
+                  type: boolean
+                update_labels:
+                  default: false
+                  description: Update Labels
+                  type: boolean
               type: object
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
+            application/vnd.ceph.api.v0.1+json:
+              schema:
+                properties: {}
+                type: object
           description: Resource updated.
         '202':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
           description: Operation is still executing. Please check the task queue.
         '400':
@@ -4706,195 +4720,20 @@ paths:
       security:
       - jwt: []
       tags:
-      - IscsiTarget
-  /api/logs/all:
-    get:
-      parameters: []
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  audit_log:
-                    description: Audit log
-                    items:
-                      properties:
-                        addrs:
-                          description: ''
-                          properties:
-                            addrvec:
-                              description: ''
-                              items:
-                                properties:
-                                  addr:
-                                    description: IP Address
-                                    type: string
-                                  nonce:
-                                    description: ''
-                                    type: integer
-                                  type:
-                                    description: ''
-                                    type: string
-                                required:
-                                - type
-                                - addr
-                                - nonce
-                                type: object
-                              type: array
-                          required:
-                          - addrvec
-                          type: object
-                        channel:
-                          description: ''
-                          type: string
-                        message:
-                          description: ''
-                          type: string
-                        name:
-                          description: ''
-                          type: string
-                        priority:
-                          description: ''
-                          type: string
-                        rank:
-                          description: ''
-                          type: string
-                        seq:
-                          description: ''
-                          type: integer
-                        stamp:
-                          description: ''
-                          type: string
-                      required:
-                      - name
-                      - rank
-                      - addrs
-                      - stamp
-                      - seq
-                      - channel
-                      - priority
-                      - message
-                      type: object
-                    type: array
-                  clog:
-                    description: ''
-                    items:
-                      type: string
-                    type: array
-                required:
-                - clog
-                - audit_log
-                type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      summary: Display Logs Configuration
-      tags:
-      - Logs
-  /api/mgr/module:
+      - Host
+  /api/host/{hostname}/daemons:
     get:
-      description: "\n        Get the list of managed modules.\n        :return: A\
-        \ list of objects with the fields 'enabled', 'name' and 'options'.\n     \
-        \   :rtype: list\n        "
-      parameters: []
+      parameters:
+      - in: path
+        name: hostname
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                items:
-                  properties:
-                    always_on:
-                      description: Is it an always on module?
-                      type: boolean
-                    enabled:
-                      description: Is Module Enabled
-                      type: boolean
-                    name:
-                      description: Module Name
-                      type: string
-                    options:
-                      description: Module Options
-                      properties:
-                        Option_name:
-                          description: Options
-                          properties:
-                            default_value:
-                              description: Default value for the option
-                              type: integer
-                            desc:
-                              description: Description of the option
-                              type: string
-                            enum_allowed:
-                              description: ''
-                              items:
-                                type: string
-                              type: array
-                            flags:
-                              description: List of flags associated
-                              type: integer
-                            level:
-                              description: Option level
-                              type: string
-                            long_desc:
-                              description: Elaborated description
-                              type: string
-                            max:
-                              description: Maximum value
-                              type: string
-                            min:
-                              description: Minimum value
-                              type: string
-                            name:
-                              description: Name of the option
-                              type: string
-                            see_also:
-                              description: Related options
-                              items:
-                                type: string
-                              type: array
-                            tags:
-                              description: Tags associated with the option
-                              items:
-                                type: string
-                              type: array
-                            type:
-                              description: Type of the option
-                              type: string
-                          required:
-                          - name
-                          - type
-                          - level
-                          - flags
-                          - default_value
-                          - min
-                          - max
-                          - enum_allowed
-                          - desc
-                          - long_desc
-                          - tags
-                          - see_also
-                          type: object
-                      required:
-                      - Option_name
-                      type: object
-                  type: object
-                required:
-                - name
-                - enabled
-                - always_on
-                - options
-                type: array
+              type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -4907,18 +4746,13 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: List Mgr modules
       tags:
-      - MgrModule
-  /api/mgr/module/{module_name}:
+      - Host
+  /api/host/{hostname}/devices:
     get:
-      description: "\n        Retrieve the values of the persistent configuration\
-        \ settings.\n        :param module_name: The name of the Ceph Mgr module.\n\
-        \        :type module_name: str\n        :return: The values of the module\
-        \ options.\n        :rtype: dict\n        "
       parameters:
       - in: path
-        name: module_name
+        name: hostname
         required: true
         schema:
           type: string
@@ -4940,15 +4774,17 @@ paths:
       security:
       - jwt: []
       tags:
-      - MgrModule
-    put:
-      description: "\n        Set the values of the persistent configuration settings.\n\
-        \        :param module_name: The name of the Ceph Mgr module.\n        :type\
-        \ module_name: str\n        :param config: The values of the module options\
-        \ to be stored.\n        :type config: dict\n        "
+      - Host
+  /api/host/{hostname}/identify_device:
+    post:
+      description: "\n        Identify a device by switching on the device light for\
+        \ N seconds.\n        :param hostname: The hostname of the device to process.\n\
+        \        :param device: The device identifier to process, e.g. ``/dev/dm-0``\
+        \ or\n        ``ABC1234DEF567-1R1234_ABC8DE0Q``.\n        :param duration:\
+        \ The duration in seconds how long the LED should flash.\n        "
       parameters:
       - in: path
-        name: module_name
+        name: hostname
         required: true
         schema:
           type: string
@@ -4957,46 +4793,14 @@ paths:
           application/json:
             schema:
               properties:
-                config:
+                device:
+                  type: string
+                duration:
                   type: string
               required:
-              - config
-              type: object
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource updated.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
+              - device
+              - duration
               type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - MgrModule
-  /api/mgr/module/{module_name}/disable:
-    post:
-      description: "\n        Disable the specified Ceph Mgr module.\n        :param\
-        \ module_name: The name of the Ceph Mgr module.\n        :type module_name:\
-        \ str\n        "
-      parameters:
-      - in: path
-        name: module_name
-        required: true
-        schema:
-          type: string
       responses:
         '201':
           content:
@@ -5020,439 +4824,289 @@ paths:
       security:
       - jwt: []
       tags:
-      - MgrModule
-  /api/mgr/module/{module_name}/enable:
-    post:
-      description: "\n        Enable the specified Ceph Mgr module.\n        :param\
-        \ module_name: The name of the Ceph Mgr module.\n        :type module_name:\
-        \ str\n        "
+      - Host
+  /api/host/{hostname}/inventory:
+    get:
       parameters:
-      - in: path
-        name: module_name
+      - description: Hostname
+        in: path
+        name: hostname
         required: true
         schema:
           type: string
-      responses:
-        '201':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource created.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - MgrModule
-  /api/mgr/module/{module_name}/options:
-    get:
-      description: "\n        Get the module options of the specified Ceph Mgr module.\n\
-        \        :param module_name: The name of the Ceph Mgr module.\n        :type\
-        \ module_name: str\n        :return: The module options as list of dicts.\n\
-        \        :rtype: list\n        "
-      parameters:
-      - in: path
-        name: module_name
-        required: true
+      - allowEmptyValue: true
+        description: Trigger asynchronous refresh
+        in: query
+        name: refresh
         schema:
           type: string
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - MgrModule
-  /api/monitor:
-    get:
-      parameters: []
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               schema:
                 properties:
-                  in_quorum:
-                    description: ''
+                  addr:
+                    description: Host address
+                    type: string
+                  devices:
+                    description: Host devices
                     items:
                       properties:
-                        addr:
-                          description: ''
-                          type: string
-                        name:
-                          description: ''
+                        available:
+                          description: If the device can be provisioned to an OSD
+                          type: boolean
+                        device_id:
+                          description: Device's udev ID
                           type: string
-                        priority:
-                          description: ''
-                          type: integer
-                        public_addr:
-                          description: ''
+                        human_readable_type:
+                          description: Device type. ssd or hdd
                           type: string
-                        public_addrs:
+                        lsm_data:
                           description: ''
                           properties:
-                            addrvec:
+                            errors:
                               description: ''
                               items:
-                                properties:
-                                  addr:
-                                    description: ''
-                                    type: string
-                                  nonce:
-                                    description: ''
-                                    type: integer
-                                  type:
-                                    description: ''
-                                    type: string
-                                required:
-                                - type
-                                - addr
-                                - nonce
-                                type: object
+                                type: string
                               type: array
-                          required:
-                          - addrvec
-                          type: object
-                        rank:
-                          description: ''
-                          type: integer
-                        stats:
-                          description: ''
-                          properties:
-                            num_sessions:
+                            health:
+                              description: ''
+                              type: string
+                            ledSupport:
                               description: ''
-                              items:
-                                type: integer
-                              type: array
-                          required:
-                          - num_sessions
-                          type: object
-                        weight:
-                          description: ''
-                          type: integer
-                      required:
-                      - rank
-                      - name
-                      - public_addrs
-                      - addr
-                      - public_addr
-                      - priority
-                      - weight
-                      - stats
-                      type: object
-                    type: array
-                  mon_status:
-                    description: ''
-                    properties:
-                      election_epoch:
-                        description: ''
-                        type: integer
-                      extra_probe_peers:
-                        description: ''
-                        items:
-                          type: string
-                        type: array
-                      feature_map:
-                        description: ''
-                        properties:
-                          client:
-                            description: ''
-                            items:
                               properties:
-                                features:
+                                FAILstatus:
                                   description: ''
                                   type: string
-                                num:
-                                  description: ''
-                                  type: integer
-                                release:
+                                FAILsupport:
                                   description: ''
                                   type: string
-                              required:
-                              - features
-                              - release
-                              - num
-                              type: object
-                            type: array
-                          mds:
-                            description: ''
-                            items:
-                              properties:
-                                features:
+                                IDENTstatus:
                                   description: ''
                                   type: string
-                                num:
-                                  description: ''
-                                  type: integer
-                                release:
+                                IDENTsupport:
                                   description: ''
                                   type: string
                               required:
-                              - features
-                              - release
-                              - num
+                              - IDENTsupport
+                              - IDENTstatus
+                              - FAILsupport
+                              - FAILstatus
                               type: object
-                            type: array
-                          mgr:
-                            description: ''
-                            items:
-                              properties:
-                                features:
-                                  description: ''
-                                  type: string
-                                num:
-                                  description: ''
-                                  type: integer
-                                release:
-                                  description: ''
-                                  type: string
-                              required:
-                              - features
-                              - release
-                              - num
-                              type: object
-                            type: array
-                          mon:
-                            description: ''
-                            items:
-                              properties:
-                                features:
-                                  description: ''
-                                  type: string
-                                num:
-                                  description: ''
-                                  type: integer
-                                release:
-                                  description: ''
-                                  type: string
-                              required:
-                              - features
-                              - release
-                              - num
-                              type: object
-                            type: array
-                        required:
-                        - mon
-                        - mds
-                        - client
-                        - mgr
-                        type: object
-                      features:
-                        description: ''
-                        properties:
-                          quorum_con:
-                            description: ''
-                            type: string
-                          quorum_mon:
-                            description: ''
-                            items:
+                            linkSpeed:
+                              description: ''
                               type: string
-                            type: array
-                          required_con:
-                            description: ''
-                            type: string
-                          required_mon:
-                            description: ''
-                            items:
-                              type: integer
-                            type: array
-                        required:
-                        - required_con
-                        - required_mon
-                        - quorum_con
-                        - quorum_mon
-                        type: object
-                      monmap:
-                        description: ''
-                        properties:
-                          created:
-                            description: ''
-                            type: string
-                          epoch:
-                            description: ''
-                            type: integer
-                          features:
-                            description: ''
+                            mediaType:
+                              description: ''
+                              type: string
+                            rpm:
+                              description: ''
+                              type: string
+                            serialNum:
+                              description: ''
+                              type: string
+                            transport:
+                              description: ''
+                              type: string
+                          required:
+                          - serialNum
+                          - transport
+                          - mediaType
+                          - rpm
+                          - linkSpeed
+                          - health
+                          - ledSupport
+                          - errors
+                          type: object
+                        lvs:
+                          description: ''
+                          items:
                             properties:
-                              optional:
+                              block_uuid:
                                 description: ''
-                                items:
-                                  type: string
-                                type: array
-                              persistent:
+                                type: string
+                              cluster_fsid:
                                 description: ''
-                                items:
-                                  type: string
-                                type: array
+                                type: string
+                              cluster_name:
+                                description: ''
+                                type: string
+                              name:
+                                description: ''
+                                type: string
+                              osd_fsid:
+                                description: ''
+                                type: string
+                              osd_id:
+                                description: ''
+                                type: string
+                              osdspec_affinity:
+                                description: ''
+                                type: string
+                              type:
+                                description: ''
+                                type: string
                             required:
-                            - persistent
-                            - optional
+                            - name
+                            - osd_id
+                            - cluster_name
+                            - type
+                            - osd_fsid
+                            - cluster_fsid
+                            - osdspec_affinity
+                            - block_uuid
                             type: object
-                          fsid:
-                            description: ''
-                            type: string
-                          min_mon_release:
-                            description: ''
+                          type: array
+                        osd_ids:
+                          description: Device OSD IDs
+                          items:
                             type: integer
-                          min_mon_release_name:
-                            description: ''
-                            type: string
-                          modified:
-                            description: ''
+                          type: array
+                        path:
+                          description: Device path
+                          type: string
+                        rejected_reasons:
+                          description: ''
+                          items:
                             type: string
-                          mons:
-                            description: ''
-                            items:
+                          type: array
+                        sys_api:
+                          description: ''
+                          properties:
+                            human_readable_size:
+                              description: ''
+                              type: string
+                            locked:
+                              description: ''
+                              type: integer
+                            model:
+                              description: ''
+                              type: string
+                            nr_requests:
+                              description: ''
+                              type: string
+                            partitions:
+                              description: ''
                               properties:
-                                addr:
-                                  description: ''
-                                  type: string
-                                name:
-                                  description: ''
-                                  type: string
-                                priority:
-                                  description: ''
-                                  type: integer
-                                public_addr:
-                                  description: ''
-                                  type: string
-                                public_addrs:
+                                partition_name:
                                   description: ''
                                   properties:
-                                    addrvec:
+                                    holders:
                                       description: ''
                                       items:
-                                        properties:
-                                          addr:
-                                            description: ''
-                                            type: string
-                                          nonce:
-                                            description: ''
-                                            type: integer
-                                          type:
-                                            description: ''
-                                            type: string
-                                        required:
-                                        - type
-                                        - addr
-                                        - nonce
-                                        type: object
+                                        type: string
                                       type: array
-                                  required:
-                                  - addrvec
-                                  type: object
-                                rank:
-                                  description: ''
-                                  type: integer
-                                stats:
-                                  description: ''
-                                  properties:
-                                    num_sessions:
+                                    human_readable_size:
                                       description: ''
-                                      items:
-                                        type: integer
-                                      type: array
+                                      type: string
+                                    sectors:
+                                      description: ''
+                                      type: string
+                                    sectorsize:
+                                      description: ''
+                                      type: integer
+                                    size:
+                                      description: ''
+                                      type: integer
+                                    start:
+                                      description: ''
+                                      type: string
                                   required:
-                                  - num_sessions
+                                  - start
+                                  - sectors
+                                  - sectorsize
+                                  - size
+                                  - human_readable_size
+                                  - holders
                                   type: object
-                                weight:
-                                  description: ''
-                                  type: integer
                               required:
-                              - rank
-                              - name
-                              - public_addrs
-                              - addr
-                              - public_addr
-                              - priority
-                              - weight
-                              - stats
+                              - partition_name
                               type: object
-                            type: array
-                        required:
-                        - epoch
-                        - fsid
-                        - modified
-                        - created
-                        - min_mon_release
-                        - min_mon_release_name
-                        - features
-                        - mons
-                        type: object
-                      name:
-                        description: ''
-                        type: string
-                      outside_quorum:
-                        description: ''
-                        items:
-                          type: string
-                        type: array
-                      quorum:
-                        description: ''
-                        items:
-                          type: integer
-                        type: array
-                      quorum_age:
-                        description: ''
-                        type: integer
-                      rank:
-                        description: ''
-                        type: integer
-                      state:
-                        description: ''
-                        type: string
-                      sync_provider:
-                        description: ''
-                        items:
-                          type: string
-                        type: array
-                    required:
-                    - name
-                    - rank
-                    - state
-                    - election_epoch
-                    - quorum
-                    - quorum_age
-                    - features
-                    - outside_quorum
-                    - extra_probe_peers
-                    - sync_provider
-                    - monmap
-                    - feature_map
-                    type: object
-                  out_quorum:
-                    description: ''
+                            path:
+                              description: ''
+                              type: string
+                            removable:
+                              description: ''
+                              type: string
+                            rev:
+                              description: ''
+                              type: string
+                            ro:
+                              description: ''
+                              type: string
+                            rotational:
+                              description: ''
+                              type: string
+                            sas_address:
+                              description: ''
+                              type: string
+                            sas_device_handle:
+                              description: ''
+                              type: string
+                            scheduler_mode:
+                              description: ''
+                              type: string
+                            sectors:
+                              description: ''
+                              type: integer
+                            sectorsize:
+                              description: ''
+                              type: string
+                            size:
+                              description: ''
+                              type: integer
+                            support_discard:
+                              description: ''
+                              type: string
+                            vendor:
+                              description: ''
+                              type: string
+                          required:
+                          - removable
+                          - ro
+                          - vendor
+                          - model
+                          - rev
+                          - sas_address
+                          - sas_device_handle
+                          - support_discard
+                          - rotational
+                          - nr_requests
+                          - scheduler_mode
+                          - partitions
+                          - sectors
+                          - sectorsize
+                          - size
+                          - human_readable_size
+                          - path
+                          - locked
+                          type: object
+                      required:
+                      - rejected_reasons
+                      - available
+                      - path
+                      - sys_api
+                      - lvs
+                      - human_readable_type
+                      - device_id
+                      - lsm_data
+                      - osd_ids
+                      type: object
+                    type: array
+                  labels:
+                    description: Host labels
                     items:
-                      type: integer
+                      type: string
                     type: array
+                  name:
+                    description: Hostname
+                    type: string
                 required:
-                - mon_status
-                - in_quorum
-                - out_quorum
+                - name
+                - addr
+                - devices
+                - labels
                 type: object
           description: OK
         '400':
@@ -5466,16 +5120,21 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Get Monitor Details
+      summary: Get inventory of a host
       tags:
-      - Monitor
-  /api/nfs-ganesha/cluster:
+      - Host
+  /api/host/{hostname}/smart:
     get:
-      parameters: []
+      parameters:
+      - in: path
+        name: hostname
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v0.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: OK
         '400':
@@ -5490,8 +5149,8 @@ paths:
       security:
       - jwt: []
       tags:
-      - NFS-Ganesha
-  /api/nfs-ganesha/export:
+      - Host
+  /api/iscsi/discoveryauth:
     get:
       parameters: []
       responses:
@@ -5501,89 +5160,24 @@ paths:
               schema:
                 items:
                   properties:
-                    access_type:
-                      description: Export access type
-                      type: string
-                    clients:
-                      description: List of client configurations
-                      items:
-                        properties:
-                          access_type:
-                            description: Client access type
-                            type: string
-                          addresses:
-                            description: list of IP addresses
-                            items:
-                              type: string
-                            type: array
-                          squash:
-                            description: Client squash policy
-                            type: string
-                        required:
-                        - addresses
-                        - access_type
-                        - squash
-                        type: object
-                      type: array
-                    cluster_id:
-                      description: Cluster identifier
-                      type: string
-                    export_id:
-                      description: Export ID
-                      type: integer
-                    fsal:
-                      description: FSAL configuration
-                      properties:
-                        fs_name:
-                          description: CephFS filesystem name
-                          type: string
-                        name:
-                          description: name of FSAL
-                          type: string
-                        sec_label_xattr:
-                          description: Name of xattr for security label
-                          type: string
-                        user_id:
-                          description: User id
-                          type: string
-                      required:
-                      - name
-                      type: object
-                    path:
-                      description: Export path
+                    mutual_password:
+                      description: ''
                       type: string
-                    protocols:
-                      description: List of protocol types
-                      items:
-                        type: integer
-                      type: array
-                    pseudo:
-                      description: Pseudo FS path
+                    mutual_user:
+                      description: ''
                       type: string
-                    security_label:
-                      description: Security label
+                    password:
+                      description: password
                       type: string
-                    squash:
-                      description: Export squash policy
+                    user:
+                      description: username
                       type: string
-                    transports:
-                      description: List of transport types
-                      items:
-                        type: string
-                      type: array
                   type: object
                 required:
-                - export_id
-                - path
-                - cluster_id
-                - pseudo
-                - access_type
-                - squash
-                - security_label
-                - protocols
-                - transports
-                - fsal
-                - clients
+                - user
+                - password
+                - mutual_user
+                - mutual_password
                 type: array
           description: OK
         '400':
@@ -5597,185 +5191,67 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: List all NFS-Ganesha exports
+      summary: Get Iscsi discoveryauth Details
       tags:
-      - NFS-Ganesha
-    post:
-      parameters: []
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                access_type:
-                  description: Export access type
-                  type: string
-                clients:
-                  description: List of client configurations
-                  items:
-                    properties:
-                      access_type:
-                        description: Client access type
-                        type: string
-                      addresses:
-                        description: list of IP addresses
-                        items:
-                          type: string
-                        type: array
-                      squash:
-                        description: Client squash policy
-                        type: string
-                    required:
-                    - addresses
-                    - access_type
-                    - squash
-                    type: object
-                  type: array
-                cluster_id:
-                  description: Cluster identifier
-                  type: string
-                fsal:
-                  description: FSAL configuration
-                  properties:
-                    fs_name:
-                      description: CephFS filesystem name
-                      type: string
-                    name:
-                      description: name of FSAL
-                      type: string
-                    sec_label_xattr:
-                      description: Name of xattr for security label
-                      type: string
-                  required:
-                  - name
-                  type: object
-                path:
-                  description: Export path
+      - Iscsi
+    put:
+      parameters:
+      - description: Username
+        in: query
+        name: user
+        required: true
+        schema:
+          type: string
+      - description: Password
+        in: query
+        name: password
+        required: true
+        schema:
+          type: string
+      - description: Mutual UserName
+        in: query
+        name: mutual_user
+        required: true
+        schema:
+          type: string
+      - description: Mutual Password
+        in: query
+        name: mutual_password
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                mutual_password:
+                  description: Mutual Password
                   type: string
-                protocols:
-                  description: List of protocol types
-                  items:
-                    type: integer
-                  type: array
-                pseudo:
-                  description: Pseudo FS path
+                mutual_user:
+                  description: Mutual UserName
                   type: string
-                security_label:
-                  description: Security label
+                password:
+                  description: Password
                   type: string
-                squash:
-                  description: Export squash policy
+                user:
+                  description: Username
                   type: string
-                transports:
-                  description: List of transport types
-                  items:
-                    type: string
-                  type: array
               required:
-              - path
-              - cluster_id
-              - pseudo
-              - access_type
-              - squash
-              - security_label
-              - protocols
-              - transports
-              - fsal
-              - clients
+              - user
+              - password
+              - mutual_user
+              - mutual_password
               type: object
       responses:
-        '201':
+        '200':
           content:
-            application/vnd.ceph.api.v2.0+json:
-              schema:
-                properties:
-                  access_type:
-                    description: Export access type
-                    type: string
-                  clients:
-                    description: List of client configurations
-                    items:
-                      properties:
-                        access_type:
-                          description: Client access type
-                          type: string
-                        addresses:
-                          description: list of IP addresses
-                          items:
-                            type: string
-                          type: array
-                        squash:
-                          description: Client squash policy
-                          type: string
-                      required:
-                      - addresses
-                      - access_type
-                      - squash
-                      type: object
-                    type: array
-                  cluster_id:
-                    description: Cluster identifier
-                    type: string
-                  export_id:
-                    description: Export ID
-                    type: integer
-                  fsal:
-                    description: FSAL configuration
-                    properties:
-                      fs_name:
-                        description: CephFS filesystem name
-                        type: string
-                      name:
-                        description: name of FSAL
-                        type: string
-                      sec_label_xattr:
-                        description: Name of xattr for security label
-                        type: string
-                      user_id:
-                        description: User id
-                        type: string
-                    required:
-                    - name
-                    type: object
-                  path:
-                    description: Export path
-                    type: string
-                  protocols:
-                    description: List of protocol types
-                    items:
-                      type: integer
-                    type: array
-                  pseudo:
-                    description: Pseudo FS path
-                    type: string
-                  security_label:
-                    description: Security label
-                    type: string
-                  squash:
-                    description: Export squash policy
-                    type: string
-                  transports:
-                    description: List of transport types
-                    items:
-                      type: string
-                    type: array
-                required:
-                - export_id
-                - path
-                - cluster_id
-                - pseudo
-                - access_type
-                - squash
-                - security_label
-                - protocols
-                - transports
-                - fsal
-                - clients
-                type: object
-          description: Resource created.
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
         '202':
           content:
-            application/vnd.ceph.api.v2.0+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
           description: Operation is still executing. Please check the task queue.
         '400':
@@ -5789,35 +5265,18 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Creates a new NFS-Ganesha export
+      summary: Set Iscsi discoveryauth
       tags:
-      - NFS-Ganesha
-  /api/nfs-ganesha/export/{cluster_id}/{export_id}:
-    delete:
-      parameters:
-      - description: Cluster identifier
-        in: path
-        name: cluster_id
-        required: true
-        schema:
-          type: string
-      - description: Export ID
-        in: path
-        name: export_id
-        required: true
-        schema:
-          type: integer
+      - Iscsi
+  /api/iscsi/target:
+    get:
+      parameters: []
       responses:
-        '202':
-          content:
-            application/vnd.ceph.api.v2.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '204':
+        '200':
           content:
-            application/vnd.ceph.api.v2.0+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource deleted.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -5829,113 +5288,43 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Deletes an NFS-Ganesha export
       tags:
-      - NFS-Ganesha
-    get:
-      parameters:
-      - description: Cluster identifier
-        in: path
-        name: cluster_id
-        required: true
-        schema:
-          type: string
-      - description: Export ID
-        in: path
-        name: export_id
-        required: true
-        schema:
-          type: string
-      responses:
-        '200':
+      - IscsiTarget
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                acl_enabled:
+                  type: string
+                auth:
+                  type: string
+                clients:
+                  type: string
+                disks:
+                  type: string
+                groups:
+                  type: string
+                portals:
+                  type: string
+                target_controls:
+                  type: string
+                target_iqn:
+                  type: string
+              type: object
+      responses:
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  access_type:
-                    description: Export access type
-                    type: string
-                  clients:
-                    description: List of client configurations
-                    items:
-                      properties:
-                        access_type:
-                          description: Client access type
-                          type: string
-                        addresses:
-                          description: list of IP addresses
-                          items:
-                            type: string
-                          type: array
-                        squash:
-                          description: Client squash policy
-                          type: string
-                      required:
-                      - addresses
-                      - access_type
-                      - squash
-                      type: object
-                    type: array
-                  cluster_id:
-                    description: Cluster identifier
-                    type: string
-                  export_id:
-                    description: Export ID
-                    type: integer
-                  fsal:
-                    description: FSAL configuration
-                    properties:
-                      fs_name:
-                        description: CephFS filesystem name
-                        type: string
-                      name:
-                        description: name of FSAL
-                        type: string
-                      sec_label_xattr:
-                        description: Name of xattr for security label
-                        type: string
-                      user_id:
-                        description: User id
-                        type: string
-                    required:
-                    - name
-                    type: object
-                  path:
-                    description: Export path
-                    type: string
-                  protocols:
-                    description: List of protocol types
-                    items:
-                      type: integer
-                    type: array
-                  pseudo:
-                    description: Pseudo FS path
-                    type: string
-                  security_label:
-                    description: Security label
-                    type: string
-                  squash:
-                    description: Export squash policy
-                    type: string
-                  transports:
-                    description: List of transport types
-                    items:
-                      type: string
-                    type: array
-                required:
-                - export_id
-                - path
-                - cluster_id
-                - pseudo
-                - access_type
-                - squash
-                - security_label
-                - protocols
-                - transports
-                - fsal
-                - clients
-                type: object
-          description: OK
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -5947,255 +5336,101 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Get an NFS-Ganesha export
       tags:
-      - NFS-Ganesha
-    put:
+      - IscsiTarget
+  /api/iscsi/target/{target_iqn}:
+    delete:
       parameters:
-      - description: Cluster identifier
-        in: path
-        name: cluster_id
+      - in: path
+        name: target_iqn
         required: true
         schema:
           type: string
-      - description: Export ID
-        in: path
-        name: export_id
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - IscsiTarget
+    get:
+      parameters:
+      - in: path
+        name: target_iqn
         required: true
         schema:
-          type: integer
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - IscsiTarget
+    put:
+      parameters:
+      - in: path
+        name: target_iqn
+        required: true
+        schema:
+          type: string
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                access_type:
-                  description: Export access type
+                acl_enabled:
+                  type: string
+                auth:
                   type: string
                 clients:
-                  description: List of client configurations
-                  items:
-                    properties:
-                      access_type:
-                        description: Client access type
-                        type: string
-                      addresses:
-                        description: list of IP addresses
-                        items:
-                          type: string
-                        type: array
-                      squash:
-                        description: Client squash policy
-                        type: string
-                    required:
-                    - addresses
-                    - access_type
-                    - squash
-                    type: object
-                  type: array
-                fsal:
-                  description: FSAL configuration
-                  properties:
-                    fs_name:
-                      description: CephFS filesystem name
-                      type: string
-                    name:
-                      description: name of FSAL
-                      type: string
-                    sec_label_xattr:
-                      description: Name of xattr for security label
-                      type: string
-                  required:
-                  - name
-                  type: object
-                path:
-                  description: Export path
                   type: string
-                protocols:
-                  description: List of protocol types
-                  items:
-                    type: integer
-                  type: array
-                pseudo:
-                  description: Pseudo FS path
+                disks:
                   type: string
-                security_label:
-                  description: Security label
+                groups:
                   type: string
-                squash:
-                  description: Export squash policy
+                new_target_iqn:
                   type: string
-                transports:
-                  description: List of transport types
-                  items:
-                    type: string
-                  type: array
-              required:
-              - path
-              - pseudo
-              - access_type
-              - squash
-              - security_label
-              - protocols
-              - transports
-              - fsal
-              - clients
-              type: object
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v2.0+json:
-              schema:
-                properties:
-                  access_type:
-                    description: Export access type
-                    type: string
-                  clients:
-                    description: List of client configurations
-                    items:
-                      properties:
-                        access_type:
-                          description: Client access type
-                          type: string
-                        addresses:
-                          description: list of IP addresses
-                          items:
-                            type: string
-                          type: array
-                        squash:
-                          description: Client squash policy
-                          type: string
-                      required:
-                      - addresses
-                      - access_type
-                      - squash
-                      type: object
-                    type: array
-                  cluster_id:
-                    description: Cluster identifier
-                    type: string
-                  export_id:
-                    description: Export ID
-                    type: integer
-                  fsal:
-                    description: FSAL configuration
-                    properties:
-                      fs_name:
-                        description: CephFS filesystem name
-                        type: string
-                      name:
-                        description: name of FSAL
-                        type: string
-                      sec_label_xattr:
-                        description: Name of xattr for security label
-                        type: string
-                      user_id:
-                        description: User id
-                        type: string
-                    required:
-                    - name
-                    type: object
-                  path:
-                    description: Export path
-                    type: string
-                  protocols:
-                    description: List of protocol types
-                    items:
-                      type: integer
-                    type: array
-                  pseudo:
-                    description: Pseudo FS path
-                    type: string
-                  security_label:
-                    description: Security label
-                    type: string
-                  squash:
-                    description: Export squash policy
-                    type: string
-                  transports:
-                    description: List of transport types
-                    items:
-                      type: string
-                    type: array
-                required:
-                - export_id
-                - path
-                - cluster_id
-                - pseudo
-                - access_type
-                - squash
-                - security_label
-                - protocols
-                - transports
-                - fsal
-                - clients
-                type: object
-          description: Resource updated.
-        '202':
-          content:
-            application/vnd.ceph.api.v2.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      summary: Updates an NFS-Ganesha export
-      tags:
-      - NFS-Ganesha
-  /api/osd:
-    get:
-      parameters: []
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-    post:
-      parameters: []
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                data:
-                  type: string
-                method:
+                portals:
                   type: string
-                tracking_id:
+                target_controls:
                   type: string
-              required:
-              - method
-              - data
-              - tracking_id
               type: object
       responses:
-        '201':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
+          description: Resource updated.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -6213,8 +5448,8 @@ paths:
       security:
       - jwt: []
       tags:
-      - OSD
-  /api/osd/flags:
+      - IscsiTarget
+  /api/logs/all:
     get:
       parameters: []
       responses:
@@ -6223,13 +5458,75 @@ paths:
             application/vnd.ceph.api.v1.0+json:
               schema:
                 properties:
-                  list_of_flags:
+                  audit_log:
+                    description: Audit log
+                    items:
+                      properties:
+                        addrs:
+                          description: ''
+                          properties:
+                            addrvec:
+                              description: ''
+                              items:
+                                properties:
+                                  addr:
+                                    description: IP Address
+                                    type: string
+                                  nonce:
+                                    description: ''
+                                    type: integer
+                                  type:
+                                    description: ''
+                                    type: string
+                                required:
+                                - type
+                                - addr
+                                - nonce
+                                type: object
+                              type: array
+                          required:
+                          - addrvec
+                          type: object
+                        channel:
+                          description: ''
+                          type: string
+                        message:
+                          description: ''
+                          type: string
+                        name:
+                          description: ''
+                          type: string
+                        priority:
+                          description: ''
+                          type: string
+                        rank:
+                          description: ''
+                          type: string
+                        seq:
+                          description: ''
+                          type: integer
+                        stamp:
+                          description: ''
+                          type: string
+                      required:
+                      - name
+                      - rank
+                      - addrs
+                      - stamp
+                      - seq
+                      - channel
+                      - priority
+                      - message
+                      type: object
+                    type: array
+                  clog:
                     description: ''
                     items:
                       type: string
                     type: array
                 required:
-                - list_of_flags
+                - clog
+                - audit_log
                 type: object
           description: OK
         '400':
@@ -6243,50 +5540,104 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Display OSD Flags
+      summary: Display Logs Configuration
       tags:
-      - OSD
-    put:
-      description: "\n        The `recovery_deletes`, `sortbitwise` and `pglog_hardlimit`\
-        \ flags cannot be unset.\n        `purged_snapshots` cannot even be set. It\
-        \ is therefore required to at\n        least include those four flags for\
-        \ a successful operation.\n        "
+      - Logs
+  /api/mgr/module:
+    get:
+      description: "\n        Get the list of managed modules.\n        :return: A\
+        \ list of objects with the fields 'enabled', 'name' and 'options'.\n     \
+        \   :rtype: list\n        "
       parameters: []
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                flags:
-                  description: List of flags to set. The flags `recovery_deletes`,
-                    `sortbitwise` and `pglog_hardlimit` cannot be unset. Additionally
-                    `purged_snapshots` cannot even be set.
-                  items:
-                    type: string
-                  type: array
-              required:
-              - flags
-              type: object
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               schema:
-                properties:
-                  list_of_flags:
-                    description: ''
-                    items:
+                items:
+                  properties:
+                    always_on:
+                      description: Is it an always on module?
+                      type: boolean
+                    enabled:
+                      description: Is Module Enabled
+                      type: boolean
+                    name:
+                      description: Module Name
                       type: string
-                    type: array
+                    options:
+                      description: Module Options
+                      properties:
+                        Option_name:
+                          description: Options
+                          properties:
+                            default_value:
+                              description: Default value for the option
+                              type: integer
+                            desc:
+                              description: Description of the option
+                              type: string
+                            enum_allowed:
+                              description: ''
+                              items:
+                                type: string
+                              type: array
+                            flags:
+                              description: List of flags associated
+                              type: integer
+                            level:
+                              description: Option level
+                              type: string
+                            long_desc:
+                              description: Elaborated description
+                              type: string
+                            max:
+                              description: Maximum value
+                              type: string
+                            min:
+                              description: Minimum value
+                              type: string
+                            name:
+                              description: Name of the option
+                              type: string
+                            see_also:
+                              description: Related options
+                              items:
+                                type: string
+                              type: array
+                            tags:
+                              description: Tags associated with the option
+                              items:
+                                type: string
+                              type: array
+                            type:
+                              description: Type of the option
+                              type: string
+                          required:
+                          - name
+                          - type
+                          - level
+                          - flags
+                          - default_value
+                          - min
+                          - max
+                          - enum_allowed
+                          - desc
+                          - long_desc
+                          - tags
+                          - see_also
+                          type: object
+                      required:
+                      - Option_name
+                      type: object
+                  type: object
                 required:
-                - list_of_flags
-                type: object
-          description: Resource updated.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
+                - name
+                - enabled
+                - always_on
+                - options
+                type: array
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -6298,30 +5649,26 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Sets OSD flags for the entire cluster.
+      summary: List Mgr modules
       tags:
-      - OSD
-  /api/osd/flags/individual:
+      - MgrModule
+  /api/mgr/module/{module_name}:
     get:
-      parameters: []
+      description: "\n        Retrieve the values of the persistent configuration\
+        \ settings.\n        :param module_name: The name of the Ceph Mgr module.\n\
+        \        :type module_name: str\n        :return: The values of the module\
+        \ options.\n        :rtype: dict\n        "
+      parameters:
+      - in: path
+        name: module_name
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  flags:
-                    description: List of active flags
-                    items:
-                      type: string
-                    type: array
-                  osd:
-                    description: OSD ID
-                    type: integer
-                required:
-                - osd
-                - flags
-                type: object
+              type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -6334,70 +5681,34 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Displays individual OSD flags
       tags:
-      - OSD
+      - MgrModule
     put:
-      description: "\n        Updates flags (`noout`, `noin`, `nodown`, `noup`) for\
-        \ an individual\n        subset of OSDs.\n        "
-      parameters: []
+      description: "\n        Set the values of the persistent configuration settings.\n\
+        \        :param module_name: The name of the Ceph Mgr module.\n        :type\
+        \ module_name: str\n        :param config: The values of the module options\
+        \ to be stored.\n        :type config: dict\n        "
+      parameters:
+      - in: path
+        name: module_name
+        required: true
+        schema:
+          type: string
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                flags:
-                  description: Directory of flags to set or unset. The flags `noin`,
-                    `noout`, `noup` and `nodown` are going to be considered only.
-                  properties:
-                    nodown:
-                      description: Sets/unsets `nodown`
-                      type: boolean
-                    noin:
-                      description: Sets/unsets `noin`
-                      type: boolean
-                    noout:
-                      description: Sets/unsets `noout`
-                      type: boolean
-                    noup:
-                      description: Sets/unsets `noup`
-                      type: boolean
-                  type: object
-                ids:
-                  description: List of OSD ids the flags should be applied to.
-                  items:
-                    type: integer
-                  type: array
+                config:
+                  type: string
               required:
-              - flags
-              - ids
+              - config
               type: object
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  added:
-                    description: List of added flags
-                    items:
-                      type: string
-                    type: array
-                  ids:
-                    description: List of updated OSDs
-                    items:
-                      type: integer
-                    type: array
-                  removed:
-                    description: List of removed flags
-                    items:
-                      type: string
-                    type: array
-                required:
-                - added
-                - removed
-                - ids
-                type: object
+              type: object
           description: Resource updated.
         '202':
           content:
@@ -6415,24 +5726,30 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Sets OSD flags for a subset of individual OSDs.
       tags:
-      - OSD
-  /api/osd/safe_to_delete:
-    get:
-      description: "\n        :type ids: int|[int]\n        "
+      - MgrModule
+  /api/mgr/module/{module_name}/disable:
+    post:
+      description: "\n        Disable the specified Ceph Mgr module.\n        :param\
+        \ module_name: The name of the Ceph Mgr module.\n        :type module_name:\
+        \ str\n        "
       parameters:
-      - in: query
-        name: svc_ids
+      - in: path
+        name: module_name
         required: true
         schema:
           type: string
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -6445,215 +5762,20 @@ paths:
       security:
       - jwt: []
       tags:
-      - OSD
-  /api/osd/safe_to_destroy:
-    get:
-      description: "\n        :type ids: int|[int]\n        "
+      - MgrModule
+  /api/mgr/module/{module_name}/enable:
+    post:
+      description: "\n        Enable the specified Ceph Mgr module.\n        :param\
+        \ module_name: The name of the Ceph Mgr module.\n        :type module_name:\
+        \ str\n        "
       parameters:
-      - description: OSD Service Identifier
-        in: query
-        name: ids
+      - in: path
+        name: module_name
         required: true
         schema:
           type: string
       responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  active:
-                    description: ''
-                    items:
-                      type: integer
-                    type: array
-                  is_safe_to_destroy:
-                    description: Is OSD safe to destroy?
-                    type: boolean
-                  missing_stats:
-                    description: ''
-                    items:
-                      type: string
-                    type: array
-                  safe_to_destroy:
-                    description: Is OSD safe to destroy?
-                    items:
-                      type: string
-                    type: array
-                  stored_pgs:
-                    description: Stored Pool groups in Osd
-                    items:
-                      type: string
-                    type: array
-                required:
-                - safe_to_destroy
-                - active
-                - missing_stats
-                - stored_pgs
-                - is_safe_to_destroy
-                type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      summary: Check If OSD is Safe to Destroy
-      tags:
-      - OSD
-  /api/osd/settings:
-    get:
-      parameters: []
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v0.1+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-  /api/osd/{svc_id}:
-    delete:
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: preserve_id
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: force
-        schema:
-          type: string
-      responses:
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '204':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource deleted.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-    get:
-      description: "\n        Returns collected data about an OSD.\n\n        :return:\
-        \ Returns the requested data.\n        "
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-    put:
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                device_class:
-                  type: string
-              required:
-              - device_class
-              type: object
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource updated.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-  /api/osd/{svc_id}/destroy:
-    post:
-      description: "\n        Mark osd as being destroyed. Keeps the ID intact (allowing\
-        \ reuse), but\n        removes cephx keys, config-key data and lockbox keys,\
-        \ rendering data\n        permanently unreadable.\n\n        The osd must\
-        \ be marked down before being destroyed.\n        "
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      responses:
-        '201':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
@@ -6675,12 +5797,16 @@ paths:
       security:
       - jwt: []
       tags:
-      - OSD
-  /api/osd/{svc_id}/devices:
+      - MgrModule
+  /api/mgr/module/{module_name}/options:
     get:
+      description: "\n        Get the module options of the specified Ceph Mgr module.\n\
+        \        :param module_name: The name of the Ceph Mgr module.\n        :type\
+        \ module_name: str\n        :return: The module options as list of dicts.\n\
+        \        :rtype: list\n        "
       parameters:
       - in: path
-        name: svc_id
+        name: module_name
         required: true
         schema:
           type: string
@@ -6702,284 +5828,373 @@ paths:
       security:
       - jwt: []
       tags:
-      - OSD
-  /api/osd/{svc_id}/histogram:
+      - MgrModule
+  /api/monitor:
     get:
-      description: "\n        :return: Returns the histogram data.\n        "
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-  /api/osd/{svc_id}/mark:
-    put:
-      description: "\n        Note: osd must be marked `down` before marking lost.\n\
-        \        "
-      parameters:
-      - description: SVC ID
-        in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                action:
-                  type: string
-              required:
-              - action
-              type: object
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource updated.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      summary: Mark OSD flags (out, in, down, lost, ...)
-      tags:
-      - OSD
-  /api/osd/{svc_id}/purge:
-    post:
-      description: "\n        Note: osd must be marked `down` before removal.\n  \
-        \      "
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      responses:
-        '201':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource created.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-  /api/osd/{svc_id}/reweight:
-    post:
-      description: "\n        Reweights the OSD temporarily.\n\n        Note that\
-        \ \u2018ceph osd reweight\u2019 is not a persistent setting. When an OSD\n\
-        \        gets marked out, the osd weight will be set to 0. When it gets marked\n\
-        \        in again, the weight will be changed to 1.\n\n        Because of\
-        \ this \u2018ceph osd reweight\u2019 is a temporary solution. You should\n\
-        \        only use it to keep your cluster running while you\u2019re ordering\
-        \ more\n        hardware.\n\n        - Craig Lewis (http://lists.ceph.com/pipermail/ceph-users-ceph.com/2014-June/040967.html)\n\
-        \        "
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                weight:
-                  type: string
-              required:
-              - weight
-              type: object
-      responses:
-        '201':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource created.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-  /api/osd/{svc_id}/scrub:
-    post:
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      - default: false
-        in: query
-        name: deep
-        schema:
-          type: boolean
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                deep:
-                  default: false
-                  type: boolean
-              type: object
-      responses:
-        '201':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource created.
-        '202':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Operation is still executing. Please check the task queue.
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-  /api/osd/{svc_id}/smart:
-    get:
-      parameters:
-      - in: path
-        name: svc_id
-        required: true
-        schema:
-          type: string
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - OSD
-  /api/perf_counters:
-    get:
-      parameters: []
+      parameters: []
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               schema:
                 properties:
-                  mon.a:
-                    description: Service ID
+                  in_quorum:
+                    description: ''
+                    items:
+                      properties:
+                        addr:
+                          description: ''
+                          type: string
+                        name:
+                          description: ''
+                          type: string
+                        priority:
+                          description: ''
+                          type: integer
+                        public_addr:
+                          description: ''
+                          type: string
+                        public_addrs:
+                          description: ''
+                          properties:
+                            addrvec:
+                              description: ''
+                              items:
+                                properties:
+                                  addr:
+                                    description: ''
+                                    type: string
+                                  nonce:
+                                    description: ''
+                                    type: integer
+                                  type:
+                                    description: ''
+                                    type: string
+                                required:
+                                - type
+                                - addr
+                                - nonce
+                                type: object
+                              type: array
+                          required:
+                          - addrvec
+                          type: object
+                        rank:
+                          description: ''
+                          type: integer
+                        stats:
+                          description: ''
+                          properties:
+                            num_sessions:
+                              description: ''
+                              items:
+                                type: integer
+                              type: array
+                          required:
+                          - num_sessions
+                          type: object
+                        weight:
+                          description: ''
+                          type: integer
+                      required:
+                      - rank
+                      - name
+                      - public_addrs
+                      - addr
+                      - public_addr
+                      - priority
+                      - weight
+                      - stats
+                      type: object
+                    type: array
+                  mon_status:
+                    description: ''
                     properties:
-                      .cache_bytes:
+                      election_epoch:
+                        description: ''
+                        type: integer
+                      extra_probe_peers:
+                        description: ''
+                        items:
+                          type: string
+                        type: array
+                      feature_map:
                         description: ''
                         properties:
-                          description:
-                            description: ''
-                            type: string
-                          nick:
+                          client:
                             description: ''
-                            type: string
-                          priority:
+                            items:
+                              properties:
+                                features:
+                                  description: ''
+                                  type: string
+                                num:
+                                  description: ''
+                                  type: integer
+                                release:
+                                  description: ''
+                                  type: string
+                              required:
+                              - features
+                              - release
+                              - num
+                              type: object
+                            type: array
+                          mds:
                             description: ''
-                            type: integer
-                          type:
+                            items:
+                              properties:
+                                features:
+                                  description: ''
+                                  type: string
+                                num:
+                                  description: ''
+                                  type: integer
+                                release:
+                                  description: ''
+                                  type: string
+                              required:
+                              - features
+                              - release
+                              - num
+                              type: object
+                            type: array
+                          mgr:
                             description: ''
-                            type: integer
-                          units:
+                            items:
+                              properties:
+                                features:
+                                  description: ''
+                                  type: string
+                                num:
+                                  description: ''
+                                  type: integer
+                                release:
+                                  description: ''
+                                  type: string
+                              required:
+                              - features
+                              - release
+                              - num
+                              type: object
+                            type: array
+                          mon:
+                            description: ''
+                            items:
+                              properties:
+                                features:
+                                  description: ''
+                                  type: string
+                                num:
+                                  description: ''
+                                  type: integer
+                                release:
+                                  description: ''
+                                  type: string
+                              required:
+                              - features
+                              - release
+                              - num
+                              type: object
+                            type: array
+                        required:
+                        - mon
+                        - mds
+                        - client
+                        - mgr
+                        type: object
+                      features:
+                        description: ''
+                        properties:
+                          quorum_con:
+                            description: ''
+                            type: string
+                          quorum_mon:
+                            description: ''
+                            items:
+                              type: string
+                            type: array
+                          required_con:
+                            description: ''
+                            type: string
+                          required_mon:
+                            description: ''
+                            items:
+                              type: integer
+                            type: array
+                        required:
+                        - required_con
+                        - required_mon
+                        - quorum_con
+                        - quorum_mon
+                        type: object
+                      monmap:
+                        description: ''
+                        properties:
+                          created:
+                            description: ''
+                            type: string
+                          epoch:
                             description: ''
                             type: integer
-                          value:
+                          features:
+                            description: ''
+                            properties:
+                              optional:
+                                description: ''
+                                items:
+                                  type: string
+                                type: array
+                              persistent:
+                                description: ''
+                                items:
+                                  type: string
+                                type: array
+                            required:
+                            - persistent
+                            - optional
+                            type: object
+                          fsid:
+                            description: ''
+                            type: string
+                          min_mon_release:
                             description: ''
                             type: integer
+                          min_mon_release_name:
+                            description: ''
+                            type: string
+                          modified:
+                            description: ''
+                            type: string
+                          mons:
+                            description: ''
+                            items:
+                              properties:
+                                addr:
+                                  description: ''
+                                  type: string
+                                name:
+                                  description: ''
+                                  type: string
+                                priority:
+                                  description: ''
+                                  type: integer
+                                public_addr:
+                                  description: ''
+                                  type: string
+                                public_addrs:
+                                  description: ''
+                                  properties:
+                                    addrvec:
+                                      description: ''
+                                      items:
+                                        properties:
+                                          addr:
+                                            description: ''
+                                            type: string
+                                          nonce:
+                                            description: ''
+                                            type: integer
+                                          type:
+                                            description: ''
+                                            type: string
+                                        required:
+                                        - type
+                                        - addr
+                                        - nonce
+                                        type: object
+                                      type: array
+                                  required:
+                                  - addrvec
+                                  type: object
+                                rank:
+                                  description: ''
+                                  type: integer
+                                stats:
+                                  description: ''
+                                  properties:
+                                    num_sessions:
+                                      description: ''
+                                      items:
+                                        type: integer
+                                      type: array
+                                  required:
+                                  - num_sessions
+                                  type: object
+                                weight:
+                                  description: ''
+                                  type: integer
+                              required:
+                              - rank
+                              - name
+                              - public_addrs
+                              - addr
+                              - public_addr
+                              - priority
+                              - weight
+                              - stats
+                              type: object
+                            type: array
                         required:
-                        - description
-                        - nick
-                        - type
-                        - priority
-                        - units
-                        - value
+                        - epoch
+                        - fsid
+                        - modified
+                        - created
+                        - min_mon_release
+                        - min_mon_release_name
+                        - features
+                        - mons
                         type: object
+                      name:
+                        description: ''
+                        type: string
+                      outside_quorum:
+                        description: ''
+                        items:
+                          type: string
+                        type: array
+                      quorum:
+                        description: ''
+                        items:
+                          type: integer
+                        type: array
+                      quorum_age:
+                        description: ''
+                        type: integer
+                      rank:
+                        description: ''
+                        type: integer
+                      state:
+                        description: ''
+                        type: string
+                      sync_provider:
+                        description: ''
+                        items:
+                          type: string
+                        type: array
                     required:
-                    - .cache_bytes
-                    type: object
-                required:
-                - mon.a
+                    - name
+                    - rank
+                    - state
+                    - election_epoch
+                    - quorum
+                    - quorum_age
+                    - features
+                    - outside_quorum
+                    - extra_probe_peers
+                    - sync_provider
+                    - monmap
+                    - feature_map
+                    type: object
+                  out_quorum:
+                    description: ''
+                    items:
+                      type: integer
+                    type: array
+                required:
+                - mon_status
+                - in_quorum
+                - out_quorum
                 type: object
           description: OK
         '400':
@@ -6993,21 +6208,16 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Display Perf Counters
+      summary: Get Monitor Details
       tags:
-      - PerfCounters
-  /api/perf_counters/mds/{service_id}:
+      - Monitor
+  /api/nfs-ganesha/cluster:
     get:
-      parameters:
-      - in: path
-        name: service_id
-        required: true
-        schema:
-          type: string
+      parameters: []
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v0.1+json:
               type: object
           description: OK
         '400':
@@ -7022,20 +6232,101 @@ paths:
       security:
       - jwt: []
       tags:
-      - MdsPerfCounter
-  /api/perf_counters/mgr/{service_id}:
+      - NFS-Ganesha
+  /api/nfs-ganesha/export:
     get:
-      parameters:
-      - in: path
-        name: service_id
-        required: true
-        schema:
-          type: string
+      parameters: []
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              type: object
+              schema:
+                items:
+                  properties:
+                    access_type:
+                      description: Export access type
+                      type: string
+                    clients:
+                      description: List of client configurations
+                      items:
+                        properties:
+                          access_type:
+                            description: Client access type
+                            type: string
+                          addresses:
+                            description: list of IP addresses
+                            items:
+                              type: string
+                            type: array
+                          squash:
+                            description: Client squash policy
+                            type: string
+                        required:
+                        - addresses
+                        - access_type
+                        - squash
+                        type: object
+                      type: array
+                    cluster_id:
+                      description: Cluster identifier
+                      type: string
+                    export_id:
+                      description: Export ID
+                      type: integer
+                    fsal:
+                      description: FSAL configuration
+                      properties:
+                        fs_name:
+                          description: CephFS filesystem name
+                          type: string
+                        name:
+                          description: name of FSAL
+                          type: string
+                        sec_label_xattr:
+                          description: Name of xattr for security label
+                          type: string
+                        user_id:
+                          description: User id
+                          type: string
+                      required:
+                      - name
+                      type: object
+                    path:
+                      description: Export path
+                      type: string
+                    protocols:
+                      description: List of protocol types
+                      items:
+                        type: integer
+                      type: array
+                    pseudo:
+                      description: Pseudo FS path
+                      type: string
+                    security_label:
+                      description: Security label
+                      type: string
+                    squash:
+                      description: Export squash policy
+                      type: string
+                    transports:
+                      description: List of transport types
+                      items:
+                        type: string
+                      type: array
+                  type: object
+                required:
+                - export_id
+                - path
+                - cluster_id
+                - pseudo
+                - access_type
+                - squash
+                - security_label
+                - protocols
+                - transports
+                - fsal
+                - clients
+                type: array
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -7048,49 +6339,187 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: List all NFS-Ganesha exports
       tags:
-      - MgrPerfCounter
-  /api/perf_counters/mon/{service_id}:
-    get:
-      parameters:
-      - in: path
-        name: service_id
-        required: true
-        schema:
-          type: string
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
+      - NFS-Ganesha
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                access_type:
+                  description: Export access type
+                  type: string
+                clients:
+                  description: List of client configurations
+                  items:
+                    properties:
+                      access_type:
+                        description: Client access type
+                        type: string
+                      addresses:
+                        description: list of IP addresses
+                        items:
+                          type: string
+                        type: array
+                      squash:
+                        description: Client squash policy
+                        type: string
+                    required:
+                    - addresses
+                    - access_type
+                    - squash
+                    type: object
+                  type: array
+                cluster_id:
+                  description: Cluster identifier
+                  type: string
+                fsal:
+                  description: FSAL configuration
+                  properties:
+                    fs_name:
+                      description: CephFS filesystem name
+                      type: string
+                    name:
+                      description: name of FSAL
+                      type: string
+                    sec_label_xattr:
+                      description: Name of xattr for security label
+                      type: string
+                  required:
+                  - name
+                  type: object
+                path:
+                  description: Export path
+                  type: string
+                protocols:
+                  description: List of protocol types
+                  items:
+                    type: integer
+                  type: array
+                pseudo:
+                  description: Pseudo FS path
+                  type: string
+                security_label:
+                  description: Security label
+                  type: string
+                squash:
+                  description: Export squash policy
+                  type: string
+                transports:
+                  description: List of transport types
+                  items:
+                    type: string
+                  type: array
+              required:
+              - path
+              - cluster_id
+              - pseudo
+              - access_type
+              - squash
+              - security_label
+              - protocols
+              - transports
+              - fsal
+              - clients
               type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - MonPerfCounter
-  /api/perf_counters/osd/{service_id}:
-    get:
-      parameters:
-      - in: path
-        name: service_id
-        required: true
-        schema:
-          type: string
       responses:
-        '200':
+        '201':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v2.0+json:
+              schema:
+                properties:
+                  access_type:
+                    description: Export access type
+                    type: string
+                  clients:
+                    description: List of client configurations
+                    items:
+                      properties:
+                        access_type:
+                          description: Client access type
+                          type: string
+                        addresses:
+                          description: list of IP addresses
+                          items:
+                            type: string
+                          type: array
+                        squash:
+                          description: Client squash policy
+                          type: string
+                      required:
+                      - addresses
+                      - access_type
+                      - squash
+                      type: object
+                    type: array
+                  cluster_id:
+                    description: Cluster identifier
+                    type: string
+                  export_id:
+                    description: Export ID
+                    type: integer
+                  fsal:
+                    description: FSAL configuration
+                    properties:
+                      fs_name:
+                        description: CephFS filesystem name
+                        type: string
+                      name:
+                        description: name of FSAL
+                        type: string
+                      sec_label_xattr:
+                        description: Name of xattr for security label
+                        type: string
+                      user_id:
+                        description: User id
+                        type: string
+                    required:
+                    - name
+                    type: object
+                  path:
+                    description: Export path
+                    type: string
+                  protocols:
+                    description: List of protocol types
+                    items:
+                      type: integer
+                    type: array
+                  pseudo:
+                    description: Pseudo FS path
+                    type: string
+                  security_label:
+                    description: Security label
+                    type: string
+                  squash:
+                    description: Export squash policy
+                    type: string
+                  transports:
+                    description: List of transport types
+                    items:
+                      type: string
+                    type: array
+                required:
+                - export_id
+                - path
+                - cluster_id
+                - pseudo
+                - access_type
+                - squash
+                - security_label
+                - protocols
+                - transports
+                - fsal
+                - clients
+                type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v2.0+json:
               type: object
-          description: OK
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -7102,22 +6531,35 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Creates a new NFS-Ganesha export
       tags:
-      - OsdPerfCounter
-  /api/perf_counters/rbd-mirror/{service_id}:
-    get:
+      - NFS-Ganesha
+  /api/nfs-ganesha/export/{cluster_id}/{export_id}:
+    delete:
       parameters:
-      - in: path
-        name: service_id
+      - description: Cluster identifier
+        in: path
+        name: cluster_id
         required: true
         schema:
           type: string
+      - description: Export ID
+        in: path
+        name: export_id
+        required: true
+        schema:
+          type: integer
       responses:
-        '200':
+        '202':
           content:
-            application/vnd.ceph.api.v1.0+json:
+            application/vnd.ceph.api.v2.0+json:
               type: object
-          description: OK
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v2.0+json:
+              type: object
+          description: Resource deleted.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -7129,40 +6571,20 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Deletes an NFS-Ganesha export
       tags:
-      - RgwMirrorPerfCounter
-  /api/perf_counters/rgw/{service_id}:
+      - NFS-Ganesha
     get:
       parameters:
-      - in: path
-        name: service_id
+      - description: Cluster identifier
+        in: path
+        name: cluster_id
         required: true
         schema:
           type: string
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
-      tags:
-      - RgwPerfCounter
-  /api/perf_counters/tcmu-runner/{service_id}:
-    get:
-      parameters:
-      - in: path
-        name: service_id
+      - description: Export ID
+        in: path
+        name: export_id
         required: true
         schema:
           type: string
@@ -7170,7 +6592,91 @@ paths:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              type: object
+              schema:
+                properties:
+                  access_type:
+                    description: Export access type
+                    type: string
+                  clients:
+                    description: List of client configurations
+                    items:
+                      properties:
+                        access_type:
+                          description: Client access type
+                          type: string
+                        addresses:
+                          description: list of IP addresses
+                          items:
+                            type: string
+                          type: array
+                        squash:
+                          description: Client squash policy
+                          type: string
+                      required:
+                      - addresses
+                      - access_type
+                      - squash
+                      type: object
+                    type: array
+                  cluster_id:
+                    description: Cluster identifier
+                    type: string
+                  export_id:
+                    description: Export ID
+                    type: integer
+                  fsal:
+                    description: FSAL configuration
+                    properties:
+                      fs_name:
+                        description: CephFS filesystem name
+                        type: string
+                      name:
+                        description: name of FSAL
+                        type: string
+                      sec_label_xattr:
+                        description: Name of xattr for security label
+                        type: string
+                      user_id:
+                        description: User id
+                        type: string
+                    required:
+                    - name
+                    type: object
+                  path:
+                    description: Export path
+                    type: string
+                  protocols:
+                    description: List of protocol types
+                    items:
+                      type: integer
+                    type: array
+                  pseudo:
+                    description: Pseudo FS path
+                    type: string
+                  security_label:
+                    description: Security label
+                    type: string
+                  squash:
+                    description: Export squash policy
+                    type: string
+                  transports:
+                    description: List of transport types
+                    items:
+                      type: string
+                    type: array
+                required:
+                - export_id
+                - path
+                - cluster_id
+                - pseudo
+                - access_type
+                - squash
+                - security_label
+                - protocols
+                - transports
+                - fsal
+                - clients
+                type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -7183,283 +6689,1519 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Get an NFS-Ganesha export
       tags:
-      - TcmuRunnerPerfCounter
-  /api/pool:
-    get:
+      - NFS-Ganesha
+    put:
       parameters:
-      - allowEmptyValue: true
-        description: Pool Attributes
-        in: query
-        name: attrs
-        schema:
+      - description: Cluster identifier
+        in: path
+        name: cluster_id
+        required: true
+        schema:
           type: string
-      - default: false
-        description: Pool Stats
-        in: query
-        name: stats
+      - description: Export ID
+        in: path
+        name: export_id
+        required: true
         schema:
-          type: boolean
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              schema:
-                items:
-                  properties:
-                    application_metadata:
-                      description: ''
-                      items:
-                        type: string
-                      type: array
-                    auid:
-                      description: ''
-                      type: integer
-                    cache_min_evict_age:
-                      description: ''
-                      type: integer
-                    cache_min_flush_age:
-                      description: ''
-                      type: integer
-                    cache_mode:
-                      description: ''
-                      type: string
-                    cache_target_dirty_high_ratio_micro:
-                      description: ''
-                      type: integer
-                    cache_target_dirty_ratio_micro:
-                      description: ''
-                      type: integer
-                    cache_target_full_ratio_micro:
-                      description: ''
-                      type: integer
-                    create_time:
-                      description: ''
-                      type: string
-                    crush_rule:
-                      description: ''
-                      type: string
-                    erasure_code_profile:
-                      description: ''
-                      type: string
-                    expected_num_objects:
-                      description: ''
-                      type: integer
-                    fast_read:
-                      description: ''
-                      type: boolean
-                    flags:
-                      description: ''
-                      type: integer
-                    flags_names:
-                      description: flags name
-                      type: string
-                    grade_table:
-                      description: ''
-                      items:
+          type: integer
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                access_type:
+                  description: Export access type
+                  type: string
+                clients:
+                  description: List of client configurations
+                  items:
+                    properties:
+                      access_type:
+                        description: Client access type
                         type: string
-                      type: array
-                    hit_set_count:
-                      description: ''
-                      type: integer
-                    hit_set_grade_decay_rate:
-                      description: ''
-                      type: integer
-                    hit_set_params:
-                      description: ''
-                      properties:
-                        type:
-                          description: ''
+                      addresses:
+                        description: list of IP addresses
+                        items:
                           type: string
-                      required:
-                      - type
-                      type: object
-                    hit_set_period:
-                      description: ''
-                      type: integer
-                    hit_set_search_last_n:
-                      description: ''
-                      type: integer
-                    last_change:
-                      description: ''
-                      type: string
-                    last_force_op_resend:
-                      description: ''
+                        type: array
+                      squash:
+                        description: Client squash policy
+                        type: string
+                    required:
+                    - addresses
+                    - access_type
+                    - squash
+                    type: object
+                  type: array
+                fsal:
+                  description: FSAL configuration
+                  properties:
+                    fs_name:
+                      description: CephFS filesystem name
                       type: string
-                    last_force_op_resend_preluminous:
-                      description: ''
+                    name:
+                      description: name of FSAL
                       type: string
-                    last_force_op_resend_prenautilus:
-                      description: ''
+                    sec_label_xattr:
+                      description: Name of xattr for security label
                       type: string
-                    last_pg_merge_meta:
-                      description: ''
+                  required:
+                  - name
+                  type: object
+                path:
+                  description: Export path
+                  type: string
+                protocols:
+                  description: List of protocol types
+                  items:
+                    type: integer
+                  type: array
+                pseudo:
+                  description: Pseudo FS path
+                  type: string
+                security_label:
+                  description: Security label
+                  type: string
+                squash:
+                  description: Export squash policy
+                  type: string
+                transports:
+                  description: List of transport types
+                  items:
+                    type: string
+                  type: array
+              required:
+              - path
+              - pseudo
+              - access_type
+              - squash
+              - security_label
+              - protocols
+              - transports
+              - fsal
+              - clients
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v2.0+json:
+              schema:
+                properties:
+                  access_type:
+                    description: Export access type
+                    type: string
+                  clients:
+                    description: List of client configurations
+                    items:
                       properties:
-                        last_epoch_clean:
-                          description: ''
-                          type: integer
-                        last_epoch_started:
-                          description: ''
-                          type: integer
-                        ready_epoch:
-                          description: ''
-                          type: integer
-                        source_pgid:
-                          description: ''
-                          type: string
-                        source_version:
-                          description: ''
+                        access_type:
+                          description: Client access type
                           type: string
-                        target_version:
-                          description: ''
+                        addresses:
+                          description: list of IP addresses
+                          items:
+                            type: string
+                          type: array
+                        squash:
+                          description: Client squash policy
                           type: string
                       required:
-                      - ready_epoch
-                      - last_epoch_started
-                      - last_epoch_clean
-                      - source_pgid
-                      - source_version
-                      - target_version
+                      - addresses
+                      - access_type
+                      - squash
                       type: object
-                    min_read_recency_for_promote:
-                      description: ''
+                    type: array
+                  cluster_id:
+                    description: Cluster identifier
+                    type: string
+                  export_id:
+                    description: Export ID
+                    type: integer
+                  fsal:
+                    description: FSAL configuration
+                    properties:
+                      fs_name:
+                        description: CephFS filesystem name
+                        type: string
+                      name:
+                        description: name of FSAL
+                        type: string
+                      sec_label_xattr:
+                        description: Name of xattr for security label
+                        type: string
+                      user_id:
+                        description: User id
+                        type: string
+                    required:
+                    - name
+                    type: object
+                  path:
+                    description: Export path
+                    type: string
+                  protocols:
+                    description: List of protocol types
+                    items:
                       type: integer
-                    min_size:
-                      description: ''
-                      type: integer
-                    min_write_recency_for_promote:
-                      description: ''
-                      type: integer
-                    object_hash:
-                      description: ''
-                      type: integer
-                    options:
-                      description: ''
-                      properties:
-                        pg_num_max:
-                          description: ''
-                          type: integer
-                        pg_num_min:
-                          description: ''
-                          type: integer
-                      required:
-                      - pg_num_min
-                      - pg_num_max
-                      type: object
-                    pg_autoscale_mode:
-                      description: ''
-                      type: string
-                    pg_num:
-                      description: ''
-                      type: integer
-                    pg_num_pending:
-                      description: ''
-                      type: integer
-                    pg_num_target:
-                      description: ''
-                      type: integer
-                    pg_placement_num:
-                      description: ''
-                      type: integer
-                    pg_placement_num_target:
-                      description: ''
-                      type: integer
-                    pool:
-                      description: pool id
-                      type: integer
-                    pool_name:
-                      description: pool name
-                      type: string
-                    pool_snaps:
-                      description: ''
-                      items:
-                        type: string
-                      type: array
-                    quota_max_bytes:
-                      description: ''
-                      type: integer
-                    quota_max_objects:
-                      description: ''
-                      type: integer
-                    read_tier:
-                      description: ''
-                      type: integer
-                    removed_snaps:
-                      description: ''
-                      items:
-                        type: string
-                      type: array
-                    size:
-                      description: pool size
-                      type: integer
-                    snap_epoch:
-                      description: ''
-                      type: integer
-                    snap_mode:
-                      description: ''
+                    type: array
+                  pseudo:
+                    description: Pseudo FS path
+                    type: string
+                  security_label:
+                    description: Security label
+                    type: string
+                  squash:
+                    description: Export squash policy
+                    type: string
+                  transports:
+                    description: List of transport types
+                    items:
                       type: string
-                    snap_seq:
-                      description: ''
-                      type: integer
-                    stripe_width:
-                      description: ''
-                      type: integer
-                    target_max_bytes:
-                      description: ''
-                      type: integer
-                    target_max_objects:
-                      description: ''
-                      type: integer
-                    tier_of:
-                      description: ''
-                      type: integer
-                    tiers:
-                      description: ''
-                      items:
-                        type: string
-                      type: array
-                    type:
-                      description: type of pool
+                    type: array
+                required:
+                - export_id
+                - path
+                - cluster_id
+                - pseudo
+                - access_type
+                - squash
+                - security_label
+                - protocols
+                - transports
+                - fsal
+                - clients
+                type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v2.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Updates an NFS-Ganesha export
+      tags:
+      - NFS-Ganesha
+  /api/osd:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                data:
+                  type: string
+                method:
+                  type: string
+                tracking_id:
+                  type: string
+              required:
+              - method
+              - data
+              - tracking_id
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/flags:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                properties:
+                  list_of_flags:
+                    description: ''
+                    items:
                       type: string
-                    use_gmt_hitset:
-                      description: ''
-                      type: boolean
-                    write_tier:
-                      description: ''
-                      type: integer
-                  type: object
+                    type: array
                 required:
-                - pool
-                - pool_name
-                - flags
-                - flags_names
-                - type
-                - size
-                - min_size
-                - crush_rule
-                - object_hash
-                - pg_autoscale_mode
-                - pg_num
-                - pg_placement_num
-                - pg_placement_num_target
-                - pg_num_target
-                - pg_num_pending
-                - last_pg_merge_meta
-                - auid
-                - snap_mode
-                - snap_seq
-                - snap_epoch
-                - pool_snaps
-                - quota_max_bytes
-                - quota_max_objects
-                - tiers
-                - tier_of
-                - read_tier
-                - write_tier
-                - cache_mode
-                - target_max_bytes
-                - target_max_objects
-                - cache_target_dirty_ratio_micro
+                - list_of_flags
+                type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Display OSD Flags
+      tags:
+      - OSD
+    put:
+      description: "\n        The `recovery_deletes`, `sortbitwise` and `pglog_hardlimit`\
+        \ flags cannot be unset.\n        `purged_snapshots` cannot even be set. It\
+        \ is therefore required to at\n        least include those four flags for\
+        \ a successful operation.\n        "
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                flags:
+                  description: List of flags to set. The flags `recovery_deletes`,
+                    `sortbitwise` and `pglog_hardlimit` cannot be unset. Additionally
+                    `purged_snapshots` cannot even be set.
+                  items:
+                    type: string
+                  type: array
+              required:
+              - flags
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                properties:
+                  list_of_flags:
+                    description: ''
+                    items:
+                      type: string
+                    type: array
+                required:
+                - list_of_flags
+                type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Sets OSD flags for the entire cluster.
+      tags:
+      - OSD
+  /api/osd/flags/individual:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                properties:
+                  flags:
+                    description: List of active flags
+                    items:
+                      type: string
+                    type: array
+                  osd:
+                    description: OSD ID
+                    type: integer
+                required:
+                - osd
+                - flags
+                type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Displays individual OSD flags
+      tags:
+      - OSD
+    put:
+      description: "\n        Updates flags (`noout`, `noin`, `nodown`, `noup`) for\
+        \ an individual\n        subset of OSDs.\n        "
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                flags:
+                  description: Directory of flags to set or unset. The flags `noin`,
+                    `noout`, `noup` and `nodown` are going to be considered only.
+                  properties:
+                    nodown:
+                      description: Sets/unsets `nodown`
+                      type: boolean
+                    noin:
+                      description: Sets/unsets `noin`
+                      type: boolean
+                    noout:
+                      description: Sets/unsets `noout`
+                      type: boolean
+                    noup:
+                      description: Sets/unsets `noup`
+                      type: boolean
+                  type: object
+                ids:
+                  description: List of OSD ids the flags should be applied to.
+                  items:
+                    type: integer
+                  type: array
+              required:
+              - flags
+              - ids
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                properties:
+                  added:
+                    description: List of added flags
+                    items:
+                      type: string
+                    type: array
+                  ids:
+                    description: List of updated OSDs
+                    items:
+                      type: integer
+                    type: array
+                  removed:
+                    description: List of removed flags
+                    items:
+                      type: string
+                    type: array
+                required:
+                - added
+                - removed
+                - ids
+                type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Sets OSD flags for a subset of individual OSDs.
+      tags:
+      - OSD
+  /api/osd/safe_to_delete:
+    get:
+      description: "\n        :type ids: int|[int]\n        "
+      parameters:
+      - in: query
+        name: svc_ids
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/safe_to_destroy:
+    get:
+      description: "\n        :type ids: int|[int]\n        "
+      parameters:
+      - description: OSD Service Identifier
+        in: query
+        name: ids
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                properties:
+                  active:
+                    description: ''
+                    items:
+                      type: integer
+                    type: array
+                  is_safe_to_destroy:
+                    description: Is OSD safe to destroy?
+                    type: boolean
+                  missing_stats:
+                    description: ''
+                    items:
+                      type: string
+                    type: array
+                  safe_to_destroy:
+                    description: Is OSD safe to destroy?
+                    items:
+                      type: string
+                    type: array
+                  stored_pgs:
+                    description: Stored Pool groups in Osd
+                    items:
+                      type: string
+                    type: array
+                required:
+                - safe_to_destroy
+                - active
+                - missing_stats
+                - stored_pgs
+                - is_safe_to_destroy
+                type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Check If OSD is Safe to Destroy
+      tags:
+      - OSD
+  /api/osd/settings:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v0.1+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/{svc_id}:
+    delete:
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: preserve_id
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: force
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+    get:
+      description: "\n        Returns collected data about an OSD.\n\n        :return:\
+        \ Returns the requested data.\n        "
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+    put:
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                device_class:
+                  type: string
+              required:
+              - device_class
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/{svc_id}/destroy:
+    post:
+      description: "\n        Mark osd as being destroyed. Keeps the ID intact (allowing\
+        \ reuse), but\n        removes cephx keys, config-key data and lockbox keys,\
+        \ rendering data\n        permanently unreadable.\n\n        The osd must\
+        \ be marked down before being destroyed.\n        "
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/{svc_id}/devices:
+    get:
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/{svc_id}/histogram:
+    get:
+      description: "\n        :return: Returns the histogram data.\n        "
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/{svc_id}/mark:
+    put:
+      description: "\n        Note: osd must be marked `down` before marking lost.\n\
+        \        "
+      parameters:
+      - description: SVC ID
+        in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                action:
+                  type: string
+              required:
+              - action
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Mark OSD flags (out, in, down, lost, ...)
+      tags:
+      - OSD
+  /api/osd/{svc_id}/purge:
+    post:
+      description: "\n        Note: osd must be marked `down` before removal.\n  \
+        \      "
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/{svc_id}/reweight:
+    post:
+      description: "\n        Reweights the OSD temporarily.\n\n        Note that\
+        \ \u2018ceph osd reweight\u2019 is not a persistent setting. When an OSD\n\
+        \        gets marked out, the osd weight will be set to 0. When it gets marked\n\
+        \        in again, the weight will be changed to 1.\n\n        Because of\
+        \ this \u2018ceph osd reweight\u2019 is a temporary solution. You should\n\
+        \        only use it to keep your cluster running while you\u2019re ordering\
+        \ more\n        hardware.\n\n        - Craig Lewis (http://lists.ceph.com/pipermail/ceph-users-ceph.com/2014-June/040967.html)\n\
+        \        "
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                weight:
+                  type: string
+              required:
+              - weight
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/{svc_id}/scrub:
+    post:
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      - default: false
+        in: query
+        name: deep
+        schema:
+          type: boolean
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                deep:
+                  default: false
+                  type: boolean
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/osd/{svc_id}/smart:
+    get:
+      parameters:
+      - in: path
+        name: svc_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OSD
+  /api/perf_counters:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                properties:
+                  mon.a:
+                    description: Service ID
+                    properties:
+                      .cache_bytes:
+                        description: ''
+                        properties:
+                          description:
+                            description: ''
+                            type: string
+                          nick:
+                            description: ''
+                            type: string
+                          priority:
+                            description: ''
+                            type: integer
+                          type:
+                            description: ''
+                            type: integer
+                          units:
+                            description: ''
+                            type: integer
+                          value:
+                            description: ''
+                            type: integer
+                        required:
+                        - description
+                        - nick
+                        - type
+                        - priority
+                        - units
+                        - value
+                        type: object
+                    required:
+                    - .cache_bytes
+                    type: object
+                required:
+                - mon.a
+                type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Display Perf Counters
+      tags:
+      - PerfCounters
+  /api/perf_counters/mds/{service_id}:
+    get:
+      parameters:
+      - in: path
+        name: service_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - MdsPerfCounter
+  /api/perf_counters/mgr/{service_id}:
+    get:
+      parameters:
+      - in: path
+        name: service_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - MgrPerfCounter
+  /api/perf_counters/mon/{service_id}:
+    get:
+      parameters:
+      - in: path
+        name: service_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - MonPerfCounter
+  /api/perf_counters/osd/{service_id}:
+    get:
+      parameters:
+      - in: path
+        name: service_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - OsdPerfCounter
+  /api/perf_counters/rbd-mirror/{service_id}:
+    get:
+      parameters:
+      - in: path
+        name: service_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwMirrorPerfCounter
+  /api/perf_counters/rgw/{service_id}:
+    get:
+      parameters:
+      - in: path
+        name: service_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwPerfCounter
+  /api/perf_counters/tcmu-runner/{service_id}:
+    get:
+      parameters:
+      - in: path
+        name: service_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - TcmuRunnerPerfCounter
+  /api/pool:
+    get:
+      parameters:
+      - allowEmptyValue: true
+        description: Pool Attributes
+        in: query
+        name: attrs
+        schema:
+          type: string
+      - default: false
+        description: Pool Stats
+        in: query
+        name: stats
+        schema:
+          type: boolean
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                items:
+                  properties:
+                    application_metadata:
+                      description: ''
+                      items:
+                        type: string
+                      type: array
+                    auid:
+                      description: ''
+                      type: integer
+                    cache_min_evict_age:
+                      description: ''
+                      type: integer
+                    cache_min_flush_age:
+                      description: ''
+                      type: integer
+                    cache_mode:
+                      description: ''
+                      type: string
+                    cache_target_dirty_high_ratio_micro:
+                      description: ''
+                      type: integer
+                    cache_target_dirty_ratio_micro:
+                      description: ''
+                      type: integer
+                    cache_target_full_ratio_micro:
+                      description: ''
+                      type: integer
+                    create_time:
+                      description: ''
+                      type: string
+                    crush_rule:
+                      description: ''
+                      type: string
+                    erasure_code_profile:
+                      description: ''
+                      type: string
+                    expected_num_objects:
+                      description: ''
+                      type: integer
+                    fast_read:
+                      description: ''
+                      type: boolean
+                    flags:
+                      description: ''
+                      type: integer
+                    flags_names:
+                      description: flags name
+                      type: string
+                    grade_table:
+                      description: ''
+                      items:
+                        type: string
+                      type: array
+                    hit_set_count:
+                      description: ''
+                      type: integer
+                    hit_set_grade_decay_rate:
+                      description: ''
+                      type: integer
+                    hit_set_params:
+                      description: ''
+                      properties:
+                        type:
+                          description: ''
+                          type: string
+                      required:
+                      - type
+                      type: object
+                    hit_set_period:
+                      description: ''
+                      type: integer
+                    hit_set_search_last_n:
+                      description: ''
+                      type: integer
+                    last_change:
+                      description: ''
+                      type: string
+                    last_force_op_resend:
+                      description: ''
+                      type: string
+                    last_force_op_resend_preluminous:
+                      description: ''
+                      type: string
+                    last_force_op_resend_prenautilus:
+                      description: ''
+                      type: string
+                    last_pg_merge_meta:
+                      description: ''
+                      properties:
+                        last_epoch_clean:
+                          description: ''
+                          type: integer
+                        last_epoch_started:
+                          description: ''
+                          type: integer
+                        ready_epoch:
+                          description: ''
+                          type: integer
+                        source_pgid:
+                          description: ''
+                          type: string
+                        source_version:
+                          description: ''
+                          type: string
+                        target_version:
+                          description: ''
+                          type: string
+                      required:
+                      - ready_epoch
+                      - last_epoch_started
+                      - last_epoch_clean
+                      - source_pgid
+                      - source_version
+                      - target_version
+                      type: object
+                    min_read_recency_for_promote:
+                      description: ''
+                      type: integer
+                    min_size:
+                      description: ''
+                      type: integer
+                    min_write_recency_for_promote:
+                      description: ''
+                      type: integer
+                    object_hash:
+                      description: ''
+                      type: integer
+                    options:
+                      description: ''
+                      properties:
+                        pg_num_max:
+                          description: ''
+                          type: integer
+                        pg_num_min:
+                          description: ''
+                          type: integer
+                      required:
+                      - pg_num_min
+                      - pg_num_max
+                      type: object
+                    pg_autoscale_mode:
+                      description: ''
+                      type: string
+                    pg_num:
+                      description: ''
+                      type: integer
+                    pg_num_pending:
+                      description: ''
+                      type: integer
+                    pg_num_target:
+                      description: ''
+                      type: integer
+                    pg_placement_num:
+                      description: ''
+                      type: integer
+                    pg_placement_num_target:
+                      description: ''
+                      type: integer
+                    pool:
+                      description: pool id
+                      type: integer
+                    pool_name:
+                      description: pool name
+                      type: string
+                    pool_snaps:
+                      description: ''
+                      items:
+                        type: string
+                      type: array
+                    quota_max_bytes:
+                      description: ''
+                      type: integer
+                    quota_max_objects:
+                      description: ''
+                      type: integer
+                    read_tier:
+                      description: ''
+                      type: integer
+                    removed_snaps:
+                      description: ''
+                      items:
+                        type: string
+                      type: array
+                    size:
+                      description: pool size
+                      type: integer
+                    snap_epoch:
+                      description: ''
+                      type: integer
+                    snap_mode:
+                      description: ''
+                      type: string
+                    snap_seq:
+                      description: ''
+                      type: integer
+                    stripe_width:
+                      description: ''
+                      type: integer
+                    target_max_bytes:
+                      description: ''
+                      type: integer
+                    target_max_objects:
+                      description: ''
+                      type: integer
+                    tier_of:
+                      description: ''
+                      type: integer
+                    tiers:
+                      description: ''
+                      items:
+                        type: string
+                      type: array
+                    type:
+                      description: type of pool
+                      type: string
+                    use_gmt_hitset:
+                      description: ''
+                      type: boolean
+                    write_tier:
+                      description: ''
+                      type: integer
+                  type: object
+                required:
+                - pool
+                - pool_name
+                - flags
+                - flags_names
+                - type
+                - size
+                - min_size
+                - crush_rule
+                - object_hash
+                - pg_autoscale_mode
+                - pg_num
+                - pg_placement_num
+                - pg_placement_num_target
+                - pg_num_target
+                - pg_num_pending
+                - last_pg_merge_meta
+                - auid
+                - snap_mode
+                - snap_seq
+                - snap_epoch
+                - pool_snaps
+                - quota_max_bytes
+                - quota_max_objects
+                - tiers
+                - tier_of
+                - read_tier
+                - write_tier
+                - cache_mode
+                - target_max_bytes
+                - target_max_objects
+                - cache_target_dirty_ratio_micro
                 - cache_target_dirty_high_ratio_micro
                 - cache_target_full_ratio_micro
                 - cache_min_flush_age
@@ -7498,26 +8240,603 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Display Pool List
+      summary: Display Pool List
+      tags:
+      - Pool
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                pool:
+                  default: rbd-mirror
+                  type: string
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Pool
+  /api/pool/{pool_name}:
+    delete:
+      parameters:
+      - in: path
+        name: pool_name
+        required: true
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Pool
+    get:
+      parameters:
+      - in: path
+        name: pool_name
+        required: true
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: attrs
+        schema:
+          type: string
+      - default: false
+        in: query
+        name: stats
+        schema:
+          type: boolean
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Pool
+    put:
+      parameters:
+      - in: path
+        name: pool_name
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                application_metadata:
+                  type: string
+                configuration:
+                  type: string
+                flags:
+                  type: string
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Pool
+  /api/pool/{pool_name}/configuration:
+    get:
+      parameters:
+      - in: path
+        name: pool_name
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Pool
+  /api/prometheus:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Prometheus
+  /api/prometheus/data:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Prometheus
+  /api/prometheus/notifications:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - PrometheusNotifications
+  /api/prometheus/rules:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Prometheus
+  /api/prometheus/silence:
+    post:
+      parameters: []
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Prometheus
+  /api/prometheus/silence/{s_id}:
+    delete:
+      parameters:
+      - in: path
+        name: s_id
+        required: true
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Prometheus
+  /api/prometheus/silences:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - Prometheus
+  /api/rgw/bucket:
+    get:
+      parameters:
+      - default: false
+        in: query
+        name: stats
+        schema:
+          type: boolean
+      - allowEmptyValue: true
+        in: query
+        name: daemon_name
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: uid
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.1+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwBucket
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                bucket:
+                  type: string
+                daemon_name:
+                  type: string
+                encryption_state:
+                  default: 'false'
+                  type: string
+                encryption_type:
+                  type: string
+                key_id:
+                  type: string
+                lock_enabled:
+                  default: 'false'
+                  type: string
+                lock_mode:
+                  type: string
+                lock_retention_period_days:
+                  type: string
+                lock_retention_period_years:
+                  type: string
+                placement_target:
+                  type: string
+                uid:
+                  type: string
+                zonegroup:
+                  type: string
+              required:
+              - bucket
+              - uid
+              type: object
+      responses:
+        '201':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwBucket
+  /api/rgw/bucket/deleteEncryption:
+    delete:
+      parameters:
+      - in: query
+        name: bucket_name
+        required: true
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: daemon_name
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: owner
+        schema:
+          type: string
+      responses:
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwBucket
+  /api/rgw/bucket/getEncryption:
+    get:
+      parameters:
+      - in: query
+        name: bucket_name
+        required: true
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: daemon_name
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: owner
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwBucket
+  /api/rgw/bucket/getEncryptionConfig:
+    get:
+      parameters:
+      - allowEmptyValue: true
+        in: query
+        name: daemon_name
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: owner
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
       tags:
-      - Pool
-    post:
+      - RgwBucket
+  /api/rgw/bucket/setEncryptionConfig:
+    put:
       parameters: []
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                pool:
-                  default: rbd-mirror
+                address:
+                  type: string
+                auth_method:
+                  type: string
+                client_cert:
+                  type: string
+                client_key:
+                  type: string
+                daemon_name:
+                  type: string
+                encryption_type:
+                  type: string
+                kms_provider:
+                  type: string
+                namespace:
+                  default: ''
+                  type: string
+                owner:
+                  type: string
+                secret_engine:
+                  type: string
+                secret_path:
+                  default: ''
+                  type: string
+                ssl_cert:
+                  type: string
+                token:
                   type: string
               type: object
       responses:
-        '201':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
+          description: Resource updated.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -7535,15 +8854,25 @@ paths:
       security:
       - jwt: []
       tags:
-      - Pool
-  /api/pool/{pool_name}:
+      - RgwBucket
+  /api/rgw/bucket/{bucket}:
     delete:
       parameters:
       - in: path
-        name: pool_name
+        name: bucket
         required: true
         schema:
           type: string
+      - default: 'true'
+        in: query
+        name: purge_objects
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: daemon_name
+        schema:
+          type: string
       responses:
         '202':
           content:
@@ -7567,24 +8896,19 @@ paths:
       security:
       - jwt: []
       tags:
-      - Pool
+      - RgwBucket
     get:
       parameters:
       - in: path
-        name: pool_name
+        name: bucket
         required: true
         schema:
           type: string
       - allowEmptyValue: true
         in: query
-        name: attrs
+        name: daemon_name
         schema:
           type: string
-      - default: false
-        in: query
-        name: stats
-        schema:
-          type: boolean
       responses:
         '200':
           content:
@@ -7603,11 +8927,11 @@ paths:
       security:
       - jwt: []
       tags:
-      - Pool
+      - RgwBucket
     put:
       parameters:
       - in: path
-        name: pool_name
+        name: bucket
         required: true
         schema:
           type: string
@@ -7616,11 +8940,128 @@ paths:
           application/json:
             schema:
               properties:
-                application_metadata:
+                bucket_id:
                   type: string
-                configuration:
+                daemon_name:
                   type: string
-                flags:
+                encryption_state:
+                  default: 'false'
+                  type: string
+                encryption_type:
+                  type: string
+                key_id:
+                  type: string
+                lock_mode:
+                  type: string
+                lock_retention_period_days:
+                  type: string
+                lock_retention_period_years:
+                  type: string
+                mfa_delete:
+                  type: string
+                mfa_token_pin:
+                  type: string
+                mfa_token_serial:
+                  type: string
+                uid:
+                  type: string
+                versioning_state:
+                  type: string
+              required:
+              - bucket_id
+              - uid
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwBucket
+  /api/rgw/daemon:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              schema:
+                items:
+                  properties:
+                    id:
+                      description: Daemon ID
+                      type: string
+                    port:
+                      description: Port
+                      type: integer
+                    server_hostname:
+                      description: ''
+                      type: string
+                    version:
+                      description: Ceph Version
+                      type: string
+                    zone_name:
+                      description: Zone
+                      type: string
+                    zonegroup_name:
+                      description: Zone Group
+                      type: string
+                  type: object
+                required:
+                - id
+                - version
+                - server_hostname
+                - zonegroup_name
+                - zone_name
+                - port
+                type: array
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Display RGW Daemons
+      tags:
+      - RgwDaemon
+  /api/rgw/daemon/set_multisite_config:
+    put:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                daemon_name:
+                  type: string
+                realm_name:
+                  type: string
+                zone_name:
+                  type: string
+                zonegroup_name:
                   type: string
               type: object
       responses:
@@ -7646,12 +9087,12 @@ paths:
       security:
       - jwt: []
       tags:
-      - Pool
-  /api/pool/{pool_name}/configuration:
+      - RgwDaemon
+  /api/rgw/daemon/{svc_id}:
     get:
       parameters:
       - in: path
-        name: pool_name
+        name: svc_id
         required: true
         schema:
           type: string
@@ -7673,8 +9114,8 @@ paths:
       security:
       - jwt: []
       tags:
-      - Pool
-  /api/prometheus:
+      - RgwDaemon
+  /api/rgw/realm:
     get:
       parameters: []
       responses:
@@ -7695,16 +9136,33 @@ paths:
       security:
       - jwt: []
       tags:
-      - Prometheus
-  /api/prometheus/data:
-    get:
+      - RgwRealm
+    post:
       parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                default:
+                  type: string
+                realm_name:
+                  type: string
+              required:
+              - realm_name
+              - default
+              type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -7717,8 +9175,8 @@ paths:
       security:
       - jwt: []
       tags:
-      - Prometheus
-  /api/prometheus/notifications:
+      - RgwRealm
+  /api/rgw/realm/get_all_realms_info:
     get:
       parameters: []
       responses:
@@ -7739,8 +9197,8 @@ paths:
       security:
       - jwt: []
       tags:
-      - PrometheusNotifications
-  /api/prometheus/rules:
+      - RgwRealm
+  /api/rgw/realm/get_realm_tokens:
     get:
       parameters: []
       responses:
@@ -7761,10 +9219,29 @@ paths:
       security:
       - jwt: []
       tags:
-      - Prometheus
-  /api/prometheus/silence:
+      - RgwRealm
+  /api/rgw/realm/import_realm_token:
     post:
       parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                placement_spec:
+                  type: string
+                port:
+                  type: string
+                realm_token:
+                  type: string
+                zone_name:
+                  type: string
+              required:
+              - realm_token
+              - zone_name
+              - port
+              - placement_spec
+              type: object
       responses:
         '201':
           content:
@@ -7788,12 +9265,12 @@ paths:
       security:
       - jwt: []
       tags:
-      - Prometheus
-  /api/prometheus/silence/{s_id}:
+      - RgwRealm
+  /api/rgw/realm/{realm_name}:
     delete:
       parameters:
       - in: path
-        name: s_id
+        name: realm_name
         required: true
         schema:
           type: string
@@ -7820,10 +9297,14 @@ paths:
       security:
       - jwt: []
       tags:
-      - Prometheus
-  /api/prometheus/silences:
+      - RgwRealm
     get:
-      parameters: []
+      parameters:
+      - in: path
+        name: realm_name
+        required: true
+        schema:
+          type: string
       responses:
         '200':
           content:
@@ -7842,31 +9323,38 @@ paths:
       security:
       - jwt: []
       tags:
-      - Prometheus
-  /api/rgw/bucket:
-    get:
+      - RgwRealm
+    put:
       parameters:
-      - default: false
-        in: query
-        name: stats
-        schema:
-          type: boolean
-      - allowEmptyValue: true
-        in: query
-        name: daemon_name
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: uid
+      - in: path
+        name: realm_name
+        required: true
         schema:
           type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                default:
+                  default: ''
+                  type: string
+                new_realm_name:
+                  type: string
+              required:
+              - new_realm_name
+              type: object
       responses:
         '200':
           content:
-            application/vnd.ceph.api.v1.1+json:
+            application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -7879,55 +9367,16 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwBucket
-    post:
+      - RgwRealm
+  /api/rgw/roles:
+    get:
       parameters: []
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                bucket:
-                  type: string
-                daemon_name:
-                  type: string
-                encryption_state:
-                  default: 'false'
-                  type: string
-                encryption_type:
-                  type: string
-                key_id:
-                  type: string
-                lock_enabled:
-                  default: 'false'
-                  type: string
-                lock_mode:
-                  type: string
-                lock_retention_period_days:
-                  type: string
-                lock_retention_period_years:
-                  type: string
-                placement_target:
-                  type: string
-                uid:
-                  type: string
-                zonegroup:
-                  type: string
-              required:
-              - bucket
-              - uid
-              type: object
       responses:
-        '201':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource created.
-        '202':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -7939,37 +9388,37 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: List RGW roles
       tags:
-      - RgwBucket
-  /api/rgw/bucket/deleteEncryption:
-    delete:
-      parameters:
-      - in: query
-        name: bucket_name
-        required: true
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: daemon_name
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: owner
-        schema:
-          type: string
+      - RGW
+    post:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                role_assume_policy_doc:
+                  default: ''
+                  type: string
+                role_name:
+                  default: ''
+                  type: string
+                role_path:
+                  default: ''
+                  type: string
+              type: object
       responses:
-        '202':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
-        '204':
+          description: Resource created.
+        '202':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource deleted.
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -7981,24 +9430,20 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Create Ceph User
       tags:
-      - RgwBucket
-  /api/rgw/bucket/getEncryption:
+      - RGW
+  /api/rgw/site:
     get:
       parameters:
-      - in: query
-        name: bucket_name
-        required: true
-        schema:
-          type: string
       - allowEmptyValue: true
         in: query
-        name: daemon_name
+        name: query
         schema:
           type: string
       - allowEmptyValue: true
         in: query
-        name: owner
+        name: daemon_name
         schema:
           type: string
       responses:
@@ -8019,8 +9464,8 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwBucket
-  /api/rgw/bucket/getEncryptionConfig:
+      - RgwSite
+  /api/rgw/user:
     get:
       parameters:
       - allowEmptyValue: true
@@ -8028,16 +9473,20 @@ paths:
         name: daemon_name
         schema:
           type: string
-      - allowEmptyValue: true
-        in: query
-        name: owner
-        schema:
-          type: string
       responses:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              type: object
+              schema:
+                properties:
+                  list_of_users:
+                    description: list of rgw users
+                    items:
+                      type: string
+                    type: array
+                required:
+                - list_of_users
+                type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -8050,51 +9499,44 @@ paths:
             trace.
       security:
       - jwt: []
+      summary: Display RGW Users
       tags:
-      - RgwBucket
-  /api/rgw/bucket/setEncryptionConfig:
-    put:
+      - RgwUser
+    post:
       parameters: []
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                address:
-                  type: string
-                auth_method:
-                  type: string
-                client_cert:
-                  type: string
-                client_key:
+                access_key:
                   type: string
                 daemon_name:
                   type: string
-                encryption_type:
-                  type: string
-                kms_provider:
+                display_name:
                   type: string
-                namespace:
-                  default: ''
+                email:
                   type: string
-                owner:
+                generate_key:
                   type: string
-                secret_engine:
+                max_buckets:
                   type: string
-                secret_path:
-                  default: ''
+                secret_key:
                   type: string
-                ssl_cert:
+                suspended:
                   type: string
-                token:
+                uid:
                   type: string
+              required:
+              - uid
+              - display_name
               type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource updated.
+          description: Resource created.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -8112,20 +9554,42 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwBucket
-  /api/rgw/bucket/{bucket}:
+      - RgwUser
+  /api/rgw/user/get_emails:
+    get:
+      parameters:
+      - allowEmptyValue: true
+        in: query
+        name: daemon_name
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwUser
+  /api/rgw/user/{uid}:
     delete:
       parameters:
       - in: path
-        name: bucket
+        name: uid
         required: true
         schema:
           type: string
-      - default: 'true'
-        in: query
-        name: purge_objects
-        schema:
-          type: string
       - allowEmptyValue: true
         in: query
         name: daemon_name
@@ -8154,11 +9618,11 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwBucket
+      - RgwUser
     get:
       parameters:
       - in: path
-        name: bucket
+        name: uid
         required: true
         schema:
           type: string
@@ -8167,6 +9631,11 @@ paths:
         name: daemon_name
         schema:
           type: string
+      - default: true
+        in: query
+        name: stats
+        schema:
+          type: boolean
       responses:
         '200':
           content:
@@ -8185,11 +9654,11 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwBucket
+      - RgwUser
     put:
       parameters:
       - in: path
-        name: bucket
+        name: uid
         required: true
         schema:
           type: string
@@ -8198,36 +9667,16 @@ paths:
           application/json:
             schema:
               properties:
-                bucket_id:
-                  type: string
                 daemon_name:
                   type: string
-                encryption_state:
-                  default: 'false'
-                  type: string
-                encryption_type:
-                  type: string
-                key_id:
-                  type: string
-                lock_mode:
-                  type: string
-                lock_retention_period_days:
-                  type: string
-                lock_retention_period_years:
-                  type: string
-                mfa_delete:
-                  type: string
-                mfa_token_pin:
+                display_name:
                   type: string
-                mfa_token_serial:
+                email:
                   type: string
-                uid:
+                max_buckets:
                   type: string
-                versioning_state:
+                suspended:
                   type: string
-              required:
-              - bucket_id
-              - uid
               type: object
       responses:
         '200':
@@ -8252,45 +9701,41 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwBucket
-  /api/rgw/daemon:
-    get:
-      parameters: []
+      - RgwUser
+  /api/rgw/user/{uid}/capability:
+    delete:
+      parameters:
+      - in: path
+        name: uid
+        required: true
+        schema:
+          type: string
+      - in: query
+        name: type
+        required: true
+        schema:
+          type: string
+      - in: query
+        name: perm
+        required: true
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: daemon_name
+        schema:
+          type: string
       responses:
-        '200':
+        '202':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                items:
-                  properties:
-                    id:
-                      description: Daemon ID
-                      type: string
-                    port:
-                      description: Port
-                      type: integer
-                    server_hostname:
-                      description: ''
-                      type: string
-                    version:
-                      description: Ceph Version
-                      type: string
-                    zone_name:
-                      description: Zone
-                      type: string
-                    zonegroup_name:
-                      description: Zone Group
-                      type: string
-                  type: object
-                required:
-                - id
-                - version
-                - server_hostname
-                - zonegroup_name
-                - zone_name
-                - port
-                type: array
-          description: OK
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -8302,23 +9747,41 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Display RGW Daemons
       tags:
-      - RgwDaemon
-  /api/rgw/daemon/{svc_id}:
-    get:
+      - RgwUser
+    post:
       parameters:
       - in: path
-        name: svc_id
+        name: uid
         required: true
         schema:
           type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                daemon_name:
+                  type: string
+                perm:
+                  type: string
+                type:
+                  type: string
+              required:
+              - type
+              - perm
+              type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -8331,16 +9794,46 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwDaemon
-  /api/rgw/roles:
-    get:
-      parameters: []
+      - RgwUser
+  /api/rgw/user/{uid}/key:
+    delete:
+      parameters:
+      - in: path
+        name: uid
+        required: true
+        schema:
+          type: string
+      - default: s3
+        in: query
+        name: key_type
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: subuser
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: access_key
+        schema:
+          type: string
+      - allowEmptyValue: true
+        in: query
+        name: daemon_name
+        schema:
+          type: string
       responses:
-        '200':
+        '202':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Operation is still executing. Please check the task queue.
+        '204':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource deleted.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -8352,24 +9845,33 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: List RGW roles
       tags:
-      - RGW
+      - RgwUser
     post:
-      parameters: []
+      parameters:
+      - in: path
+        name: uid
+        required: true
+        schema:
+          type: string
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                role_assume_policy_doc:
-                  default: ''
+                access_key:
                   type: string
-                role_name:
-                  default: ''
+                daemon_name:
                   type: string
-                role_path:
-                  default: ''
+                generate_key:
+                  default: 'true'
+                  type: string
+                key_type:
+                  default: s3
+                  type: string
+                secret_key:
+                  type: string
+                subuser:
                   type: string
               type: object
       responses:
@@ -8394,44 +9896,16 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Create Ceph User
-      tags:
-      - RGW
-  /api/rgw/site:
-    get:
-      parameters:
-      - allowEmptyValue: true
-        in: query
-        name: query
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: daemon_name
-        schema:
-          type: string
-      responses:
-        '200':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: OK
-        '400':
-          description: Operation exception. Please check the response body for details.
-        '401':
-          description: Unauthenticated access. Please login first.
-        '403':
-          description: Unauthorized access. Please check your permissions.
-        '500':
-          description: Unexpected error. Please check the response body for the stack
-            trace.
-      security:
-      - jwt: []
       tags:
-      - RgwSite
-  /api/rgw/user:
+      - RgwUser
+  /api/rgw/user/{uid}/quota:
     get:
       parameters:
+      - in: path
+        name: uid
+        required: true
+        schema:
+          type: string
       - allowEmptyValue: true
         in: query
         name: daemon_name
@@ -8441,16 +9915,7 @@ paths:
         '200':
           content:
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                properties:
-                  list_of_users:
-                    description: list of rgw users
-                    items:
-                      type: string
-                    type: array
-                required:
-                - list_of_users
-                type: object
+              type: object
           description: OK
         '400':
           description: Operation exception. Please check the response body for details.
@@ -8463,44 +9928,42 @@ paths:
             trace.
       security:
       - jwt: []
-      summary: Display RGW Users
       tags:
       - RgwUser
-    post:
-      parameters: []
+    put:
+      parameters:
+      - in: path
+        name: uid
+        required: true
+        schema:
+          type: string
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                access_key:
-                  type: string
                 daemon_name:
                   type: string
-                display_name:
-                  type: string
-                email:
-                  type: string
-                generate_key:
-                  type: string
-                max_buckets:
-                  type: string
-                secret_key:
+                enabled:
                   type: string
-                suspended:
+                max_objects:
                   type: string
-                uid:
+                max_size_kb:
+                  type: integer
+                quota_type:
                   type: string
               required:
-              - uid
-              - display_name
+              - quota_type
+              - enabled
+              - max_size_kb
+              - max_objects
               type: object
       responses:
-        '201':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
+          description: Resource updated.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -8519,20 +9982,50 @@ paths:
       - jwt: []
       tags:
       - RgwUser
-  /api/rgw/user/get_emails:
-    get:
+  /api/rgw/user/{uid}/subuser:
+    post:
       parameters:
-      - allowEmptyValue: true
-        in: query
-        name: daemon_name
+      - in: path
+        name: uid
+        required: true
         schema:
           type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                access:
+                  type: string
+                access_key:
+                  type: string
+                daemon_name:
+                  type: string
+                generate_secret:
+                  default: 'true'
+                  type: string
+                key_type:
+                  default: s3
+                  type: string
+                secret_key:
+                  type: string
+                subuser:
+                  type: string
+              required:
+              - subuser
+              - access
+              type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: OK
+          description: Resource created.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -8546,14 +10039,27 @@ paths:
       - jwt: []
       tags:
       - RgwUser
-  /api/rgw/user/{uid}:
+  /api/rgw/user/{uid}/subuser/{subuser}:
     delete:
+      description: "\n        :param purge_keys: Set to False to do not purge the\
+        \ keys.\n                           Note, this only works for s3 subusers.\n\
+        \        "
       parameters:
       - in: path
         name: uid
         required: true
         schema:
           type: string
+      - in: path
+        name: subuser
+        required: true
+        schema:
+          type: string
+      - default: 'true'
+        in: query
+        name: purge_keys
+        schema:
+          type: string
       - allowEmptyValue: true
         in: query
         name: daemon_name
@@ -8583,23 +10089,9 @@ paths:
       - jwt: []
       tags:
       - RgwUser
+  /api/rgw/zone:
     get:
-      parameters:
-      - in: path
-        name: uid
-        required: true
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: daemon_name
-        schema:
-          type: string
-      - default: true
-        in: query
-        name: stats
-        schema:
-          type: boolean
+      parameters: []
       responses:
         '200':
           content:
@@ -8618,36 +10110,39 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-    put:
-      parameters:
-      - in: path
-        name: uid
-        required: true
-        schema:
-          type: string
+      - RgwZone
+    post:
+      parameters: []
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                daemon_name:
+                access_key:
                   type: string
-                display_name:
+                default:
+                  default: false
+                  type: boolean
+                master:
+                  default: false
+                  type: boolean
+                secret_key:
                   type: string
-                email:
+                zone_endpoints:
                   type: string
-                max_buckets:
+                zone_name:
                   type: string
-                suspended:
+                zonegroup_name:
                   type: string
+              required:
+              - zone_name
               type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource updated.
+          description: Resource created.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -8665,41 +10160,56 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-  /api/rgw/user/{uid}/capability:
-    delete:
-      parameters:
-      - in: path
-        name: uid
-        required: true
-        schema:
-          type: string
-      - in: query
-        name: type
-        required: true
-        schema:
-          type: string
-      - in: query
-        name: perm
-        required: true
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: daemon_name
-        schema:
-          type: string
+      - RgwZone
+  /api/rgw/zone/create_system_user:
+    put:
+      parameters: []
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                userName:
+                  type: string
+                zoneName:
+                  type: string
+              required:
+              - userName
+              - zoneName
+              type: object
       responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
           description: Operation is still executing. Please check the task queue.
-        '204':
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwZone
+  /api/rgw/zone/get_all_zones_info:
+    get:
+      parameters: []
+      responses:
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource deleted.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -8712,40 +10222,43 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-    post:
+      - RgwZone
+  /api/rgw/zone/get_pool_names:
+    get:
+      parameters: []
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwZone
+  /api/rgw/zone/get_user_list:
+    get:
       parameters:
-      - in: path
-        name: uid
-        required: true
+      - allowEmptyValue: true
+        in: query
+        name: zoneName
         schema:
           type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                daemon_name:
-                  type: string
-                perm:
-                  type: string
-                type:
-                  type: string
-              required:
-              - type
-              - perm
-              type: object
       responses:
-        '201':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource created.
-        '202':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -8758,33 +10271,28 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-  /api/rgw/user/{uid}/key:
+      - RgwZone
+  /api/rgw/zone/{zone_name}:
     delete:
       parameters:
       - in: path
-        name: uid
+        name: zone_name
         required: true
         schema:
           type: string
-      - default: s3
-        in: query
-        name: key_type
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: subuser
+      - in: query
+        name: delete_pools
+        required: true
         schema:
           type: string
       - allowEmptyValue: true
         in: query
-        name: access_key
+        name: pools
         schema:
           type: string
       - allowEmptyValue: true
         in: query
-        name: daemon_name
+        name: zonegroup_name
         schema:
           type: string
       responses:
@@ -8810,11 +10318,37 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-    post:
+      - RgwZone
+    get:
       parameters:
       - in: path
-        name: uid
+        name: zone_name
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwZone
+    put:
+      parameters:
+      - in: path
+        name: zone_name
         required: true
         schema:
           type: string
@@ -8824,26 +10358,55 @@ paths:
             schema:
               properties:
                 access_key:
+                  default: ''
                   type: string
-                daemon_name:
+                compression:
+                  default: ''
                   type: string
-                generate_key:
-                  default: 'true'
+                data_extra_pool:
+                  default: ''
                   type: string
-                key_type:
-                  default: s3
+                data_pool:
+                  default: ''
+                  type: string
+                data_pool_class:
+                  default: ''
+                  type: string
+                default:
+                  default: ''
+                  type: string
+                index_pool:
+                  default: ''
+                  type: string
+                master:
+                  default: ''
+                  type: string
+                new_zone_name:
+                  type: string
+                placement_target:
+                  default: ''
                   type: string
                 secret_key:
+                  default: ''
                   type: string
-                subuser:
+                storage_class:
+                  default: ''
+                  type: string
+                zone_endpoints:
+                  default: ''
+                  type: string
+                zonegroup_name:
                   type: string
+              required:
+              - new_zone_name
+              - zonegroup_name
               type: object
       responses:
-        '201':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource created.
+          description: Resource updated.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -8861,20 +10424,10 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-  /api/rgw/user/{uid}/quota:
+      - RgwZone
+  /api/rgw/zonegroup:
     get:
-      parameters:
-      - in: path
-        name: uid
-        required: true
-        schema:
-          type: string
-      - allowEmptyValue: true
-        in: query
-        name: daemon_name
-        schema:
-          type: string
+      parameters: []
       responses:
         '200':
           content:
@@ -8893,41 +10446,34 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-    put:
-      parameters:
-      - in: path
-        name: uid
-        required: true
-        schema:
-          type: string
+      - RgwZonegroup
+    post:
+      parameters: []
       requestBody:
         content:
           application/json:
             schema:
               properties:
-                daemon_name:
+                default:
                   type: string
-                enabled:
+                master:
                   type: string
-                max_objects:
+                realm_name:
                   type: string
-                max_size_kb:
-                  type: integer
-                quota_type:
+                zonegroup_endpoints:
+                  type: string
+                zonegroup_name:
                   type: string
               required:
-              - quota_type
-              - enabled
-              - max_size_kb
-              - max_objects
+              - realm_name
+              - zonegroup_name
               type: object
       responses:
-        '200':
+        '201':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Resource updated.
+          description: Resource created.
         '202':
           content:
             application/vnd.ceph.api.v1.0+json:
@@ -8945,51 +10491,16 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-  /api/rgw/user/{uid}/subuser:
-    post:
-      parameters:
-      - in: path
-        name: uid
-        required: true
-        schema:
-          type: string
-      requestBody:
-        content:
-          application/json:
-            schema:
-              properties:
-                access:
-                  type: string
-                access_key:
-                  type: string
-                daemon_name:
-                  type: string
-                generate_secret:
-                  default: 'true'
-                  type: string
-                key_type:
-                  default: s3
-                  type: string
-                secret_key:
-                  type: string
-                subuser:
-                  type: string
-              required:
-              - subuser
-              - access
-              type: object
+      - RgwZonegroup
+  /api/rgw/zonegroup/get_all_zonegroups_info:
+    get:
+      parameters: []
       responses:
-        '201':
-          content:
-            application/vnd.ceph.api.v1.0+json:
-              type: object
-          description: Resource created.
-        '202':
+        '200':
           content:
             application/vnd.ceph.api.v1.0+json:
               type: object
-          description: Operation is still executing. Please check the task queue.
+          description: OK
         '400':
           description: Operation exception. Please check the response body for details.
         '401':
@@ -9002,31 +10513,23 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
-  /api/rgw/user/{uid}/subuser/{subuser}:
+      - RgwZonegroup
+  /api/rgw/zonegroup/{zonegroup_name}:
     delete:
-      description: "\n        :param purge_keys: Set to False to do not purge the\
-        \ keys.\n                           Note, this only works for s3 subusers.\n\
-        \        "
       parameters:
       - in: path
-        name: uid
+        name: zonegroup_name
         required: true
         schema:
           type: string
-      - in: path
-        name: subuser
+      - in: query
+        name: delete_pools
         required: true
         schema:
           type: string
-      - default: 'true'
-        in: query
-        name: purge_keys
-        schema:
-          type: string
       - allowEmptyValue: true
         in: query
-        name: daemon_name
+        name: pools
         schema:
           type: string
       responses:
@@ -9052,7 +10555,95 @@ paths:
       security:
       - jwt: []
       tags:
-      - RgwUser
+      - RgwZonegroup
+    get:
+      parameters:
+      - in: path
+        name: zonegroup_name
+        required: true
+        schema:
+          type: string
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: OK
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwZonegroup
+    put:
+      parameters:
+      - in: path
+        name: zonegroup_name
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                add_zones:
+                  default: []
+                  type: string
+                default:
+                  default: ''
+                  type: string
+                master:
+                  default: ''
+                  type: string
+                new_zonegroup_name:
+                  type: string
+                placement_targets:
+                  default: []
+                  type: string
+                realm_name:
+                  type: string
+                remove_zones:
+                  default: []
+                  type: string
+                zonegroup_endpoints:
+                  default: ''
+                  type: string
+              required:
+              - realm_name
+              - new_zonegroup_name
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      tags:
+      - RgwZonegroup
   /api/role:
     get:
       parameters: []
@@ -11014,8 +12605,12 @@ servers:
 tags:
 - description: Initiate a session with Ceph
   name: Auth
+- description: CephFS Subvolume Management API
+  name: CephFSSubvolume
 - description: Cephfs Management API
   name: Cephfs
+- description: Cephfs Subvolume Group Management API
+  name: CephfsSubvolumeGroup
 - description: Get Cluster Details
   name: Cluster
 - description: Manage Cluster Configurations
@@ -11094,10 +12689,16 @@ tags:
   name: RgwMirrorPerfCounter
 - description: Rgw Perf Counters Management API
   name: RgwPerfCounter
+- description: '*No description available*'
+  name: RgwRealm
 - description: RGW Site Management API
   name: RgwSite
 - description: RGW User Management API
   name: RgwUser
+- description: '*No description available*'
+  name: RgwZone
+- description: '*No description available*'
+  name: RgwZonegroup
 - description: Role Management API
   name: Role
 - description: Service Management API
@@ -11112,6 +12713,8 @@ tags:
   name: TcmuRunnerPerfCounter
 - description: Display Telemetry Report
   name: Telemetry
+- description: Upgrade Management API
+  name: Upgrade
 - description: Display User Details
   name: User
 - description: Change User Password
index ad3c36d1198dc1dda88231b186539391f7f9bbc6..78221547acc3a065cadb2c8df220dbf9c0198fef 100644 (file)
@@ -4,10 +4,12 @@ This is a minimal implementation of TTL-ed lru_cache function.
 Based on Python 3 functools and backports.functools_lru_cache.
 """
 
+import os
 from collections import OrderedDict
 from functools import wraps
 from threading import RLock
 from time import time
+from typing import Any, Dict
 
 try:
     from typing import Tuple
@@ -15,42 +17,103 @@ except ImportError:
     pass  # For typing only
 
 
-def ttl_cache(ttl, maxsize=128, typed=False):
+class TTLCache:
+    class CachedValue:
+        def __init__(self, value, timestamp):
+            self.value = value
+            self.timestamp = timestamp
+
+    def __init__(self, reference, ttl, maxsize=128):
+        self.reference = reference
+        self.ttl: int = ttl
+        self.maxsize = maxsize
+        self.cache: OrderedDict[Tuple[Any], TTLCache.CachedValue] = OrderedDict()
+        self.hits = 0
+        self.misses = 0
+        self.expired = 0
+        self.rlock = RLock()
+
+    def __getitem__(self, key):
+        with self.rlock:
+            if key not in self.cache:
+                self.misses += 1
+                raise KeyError(f'"{key}" is not set')
+
+            cached_value = self.cache[key]
+            if time() - cached_value.timestamp >= self.ttl:
+                del self.cache[key]
+                self.expired += 1
+                self.misses += 1
+                raise KeyError(f'"{key}" is not set')
+
+            self.hits += 1
+            return cached_value.value
+
+    def __setitem__(self, key, value):
+        with self.rlock:
+            if key in self.cache:
+                cached_value = self.cache[key]
+                if time() - cached_value.timestamp >= self.ttl:
+                    self.expired += 1
+            if len(self.cache) == self.maxsize:
+                self.cache.popitem(last=False)
+
+            self.cache[key] = TTLCache.CachedValue(value, time())
+
+    def clear(self):
+        with self.rlock:
+            self.cache.clear()
+
+    def info(self) -> str:
+        return (f'cache={self.reference} hits={self.hits}, misses={self.misses},'
+                f'expired={self.expired}, maxsize={self.maxsize}, currsize={len(self.cache)}')
+
+
+class CacheManager:
+    caches: Dict[str, TTLCache] = {}
+
+    @classmethod
+    def get(cls, reference: str, ttl=30, maxsize=128):
+        if reference in cls.caches:
+            return cls.caches[reference]
+        cls.caches[reference] = TTLCache(reference, ttl, maxsize)
+        return cls.caches[reference]
+
+
+def ttl_cache(ttl, maxsize=128, typed=False, label: str = ''):
     if typed is not False:
         raise NotImplementedError("typed caching not supported")
 
+    # disable caching while running unit tests
+    if 'UNITTEST' in os.environ:
+        ttl = 0
+
     def decorating_function(function):
-        cache = OrderedDict()  # type: OrderedDict[object, Tuple[bool, float]]
-        stats = [0, 0, 0]
-        rlock = RLock()
-        setattr(function, 'cache_info', lambda:
-                "hits={}, misses={}, expired={}, maxsize={}, currsize={}".format(
-                    stats[0], stats[1], stats[2], maxsize, len(cache)))
+        cache_name = label
+        if not cache_name:
+            cache_name = function.__name__
+        cache = CacheManager.get(cache_name, ttl, maxsize)
 
         @wraps(function)
         def wrapper(*args, **kwargs):
             key = args + tuple(kwargs.items())
-            with rlock:
-                refresh = True
-                if key in cache:
-                    (ret, ts) = cache[key]
-                    del cache[key]
-                    if time() - ts < ttl:
-                        refresh = False
-                        stats[0] += 1
-                    else:
-                        stats[2] += 1
-
-                if refresh:
-                    ret = function(*args, **kwargs)
-                    ts = time()
-                    if len(cache) == maxsize:
-                        cache.popitem(last=False)
-                    stats[1] += 1
-
-                cache[key] = (ret, ts)
+            try:
+                return cache[key]
+            except KeyError:
+                ret = function(*args, **kwargs)
+                cache[key] = ret
+                return ret
 
-            return ret
+        return wrapper
+    return decorating_function
 
+
+def ttl_cache_invalidator(label: str):
+    def decorating_function(function):
+        @wraps(function)
+        def wrapper(*args, **kwargs):
+            ret = function(*args, **kwargs)
+            CacheManager.get(label).clear()
+            return ret
         return wrapper
     return decorating_function
index 4e925e8616f1ae63c5128278337c71aa7530bb92..d2566bab59f61a27474d227f62fa6f534fdd5697 100644 (file)
@@ -1,4 +1,4 @@
 pytest-cov
 pytest-instafail
 pyfakefs==4.5.0
-jsonschema==4.16.0
+jsonschema
index 2c28835887272c0f7e9a3e13c091c9a88ab080be..a481a983f40bb0f74a6f1c47ea40742eb377d92f 100755 (executable)
@@ -39,7 +39,7 @@ start_ceph() {
     # start rbd-mirror daemon in the cluster
     KEY=$(ceph auth get client.admin --format=json | jq -r .[0].key)
     MON_CLUSTER_1=$(grep "mon host" ${FULL_PATH_BUILD_DIR}/run/1/ceph.conf | awk '{print $4}')
-    ${FULL_PATH_BUILD_DIR}/bin/rbd-mirror --mon_host $MON_CLUSTER_1 --key $KEY -c ${FULL_PATH_BUILD_DIR}/run/1/ceph.conf &
+    ${FULL_PATH_BUILD_DIR}/bin/rbd-mirror --mon_host $MON_CLUSTER_1 --key $KEY -c ${FULL_PATH_BUILD_DIR}/run/1/ceph.conf
 
     set +x
 }
@@ -50,6 +50,11 @@ stop() {
         for cluster in ${CLUSTERS[@]}; do
             ../src/mstop.sh $cluster
         done
+        pids=$(pgrep rbd-mirror)
+        if [ -n "$pids" ]; then
+            echo Killing rbd-mirror processes: $pids
+            kill -9 $pids
+        fi
     fi
     exit $1
 }
index 8ae897cebd8d4997116c01672a4a7c3cc76df15b..f13963abffdd48341974232bec58dc39d3ba117d 100644 (file)
@@ -183,6 +183,16 @@ class AuthManagerTool(cherrypy.Tool):
             if user:
                 self._check_authorization(user.username)
                 return
+
+        resp_head = cherrypy.response.headers
+        req_head = cherrypy.request.headers
+        req_header_cross_origin_url = req_head.get('Access-Control-Allow-Origin')
+        cross_origin_urls = mgr.get_module_option('cross_origin_url', '')
+        cross_origin_url_list = [url.strip() for url in cross_origin_urls.split(',')]
+
+        if req_header_cross_origin_url in cross_origin_url_list:
+            resp_head['Access-Control-Allow-Origin'] = req_header_cross_origin_url
+
         self.logger.debug('Unauthorized access to %s',
                           cherrypy.url(relative='server'))
         raise cherrypy.HTTPError(401, 'You are not authorized to access '
index f0e21c598989d692c11a525f82adc7ab4a070049..53cd0e7ad936a124a73239a0e915e1fcf7568570 100644 (file)
@@ -293,6 +293,36 @@ class CephService(object):
 
         return {}
 
+    @classmethod
+    def set_multisite_config(cls, realm_name, zonegroup_name, zone_name, daemon_name):
+        full_daemon_name = 'rgw.' + daemon_name
+
+        KMS_CONFIG = [
+            ['rgw_realm', realm_name],
+            ['rgw_zonegroup', zonegroup_name],
+            ['rgw_zone', zone_name]
+        ]
+
+        for (key, value) in KMS_CONFIG:
+            if value == 'null':
+                continue
+            CephService.send_command('mon', 'config set',
+                                     who=name_to_config_section(full_daemon_name),
+                                     name=key, value=value)
+        return {}
+
+    @classmethod
+    def get_realm_tokens(cls):
+        tokens_info = mgr.remote('rgw', 'get_realm_tokens')
+        return tokens_info
+
+    @classmethod
+    def import_realm_token(cls, realm_token, zone_name, port, placement_spec):
+        tokens_info = mgr.remote('rgw', 'import_realm_token', zone_name=zone_name,
+                                 realm_token=realm_token, port=port, placement=placement_spec,
+                                 start_radosgw=True)
+        return tokens_info
+
     @classmethod
     def get_pool_pg_status(cls, pool_name):
         # type: (str) -> dict
index fbb00bc7370703c5a3095aa0b470e98fc79fd0e9..9caaf1963366b978b5ed7e3236500c8363e559d9 100644 (file)
@@ -9,6 +9,9 @@ class ClusterCapacity(NamedTuple):
     total_avail_bytes: int
     total_bytes: int
     total_used_raw_bytes: int
+    total_objects: int
+    total_pool_bytes_used: int
+    average_object_size: int
 
 
 class ClusterModel:
@@ -44,6 +47,41 @@ class ClusterModel:
     @classmethod
     def get_capacity(cls) -> ClusterCapacity:
         df = mgr.get('df')
-        return ClusterCapacity(total_avail_bytes=df['stats']['total_avail_bytes'],
-                               total_bytes=df['stats']['total_bytes'],
-                               total_used_raw_bytes=df['stats']['total_used_raw_bytes'])._asdict()
+        total_pool_bytes_used = 0
+        average_object_size = 0
+        total_data_pool_objects = 0
+        total_data_pool_bytes_used = 0
+        rgw_pools_data = cls.get_rgw_pools()
+
+        for pool in df['pools']:
+            pool_name = str(pool['name'])
+            if pool_name in rgw_pools_data:
+                if pool_name.endswith('.data'):
+                    objects = pool['stats']['objects']
+                    pool_bytes_used = pool['stats']['bytes_used']
+                    total_pool_bytes_used += pool_bytes_used
+                    total_data_pool_objects += objects
+                    replica = rgw_pools_data[pool_name]
+                    total_data_pool_bytes_used += pool_bytes_used / replica
+
+        average_object_size = total_data_pool_bytes_used / total_data_pool_objects if total_data_pool_objects != 0 else 0  # noqa E501  #pylint: disable=line-too-long
+
+        return ClusterCapacity(
+            total_avail_bytes=df['stats']['total_avail_bytes'],
+            total_bytes=df['stats']['total_bytes'],
+            total_used_raw_bytes=df['stats']['total_used_raw_bytes'],
+            total_objects=total_data_pool_objects,
+            total_pool_bytes_used=total_pool_bytes_used,
+            average_object_size=average_object_size
+        )._asdict()
+
+    @classmethod
+    def get_rgw_pools(cls):
+        rgw_pool_size = {}
+
+        osd_map = mgr.get('osd_map')
+        for pool in osd_map['pools']:
+            if 'rgw' in pool.get('application_metadata', {}):
+                name = pool['pool_name']
+                rgw_pool_size[name] = pool['size']
+        return rgw_pool_size
index 1818164d6c96cbe3d30379e8783b03212b4548be..e49ab80bfc5dc359b94138cb581f7d6a63e7bceb 100644 (file)
@@ -170,6 +170,36 @@ class DaemonManager(ResourceManager):
         return self.api.daemon_action(daemon_name=daemon_name, action=action, image=image)
 
 
+class UpgradeManager(ResourceManager):
+    @wait_api_result
+    def list(self, image: Optional[str], tags: bool,
+             show_all_versions: Optional[bool]) -> Dict[Any, Any]:
+        return self.api.upgrade_ls(image, tags, show_all_versions)
+
+    @wait_api_result
+    def status(self):
+        return self.api.upgrade_status()
+
+    @wait_api_result
+    def start(self, image: str, version: str, daemon_types: Optional[List[str]] = None,
+              host_placement: Optional[str] = None, services: Optional[List[str]] = None,
+              limit: Optional[int] = None) -> str:
+        return self.api.upgrade_start(image, version, daemon_types, host_placement, services,
+                                      limit)
+
+    @wait_api_result
+    def pause(self) -> str:
+        return self.api.upgrade_pause()
+
+    @wait_api_result
+    def resume(self) -> str:
+        return self.api.upgrade_resume()
+
+    @wait_api_result
+    def stop(self) -> str:
+        return self.api.upgrade_stop()
+
+
 class OrchClient(object):
 
     _instance = None
@@ -189,6 +219,7 @@ class OrchClient(object):
         self.services = ServiceManager(self.api)
         self.osds = OsdManager(self.api)
         self.daemons = DaemonManager(self.api)
+        self.upgrades = UpgradeManager(self.api)
 
     def available(self, features: Optional[List[str]] = None) -> bool:
         available = self.status()['available']
@@ -240,3 +271,10 @@ class OrchFeature(object):
     DEVICE_BLINK_LIGHT = 'blink_device_light'
 
     DAEMON_ACTION = 'daemon_action'
+
+    UPGRADE_LIST = 'upgrade_ls'
+    UPGRADE_STATUS = 'upgrade_status'
+    UPGRADE_START = 'upgrade_start'
+    UPGRADE_PAUSE = 'upgrade_pause'
+    UPGRADE_RESUME = 'upgrade_resume'
+    UPGRADE_STOP = 'upgrade_stop'
index 98fbba832573e8383aa01f62d944e2e12ee31e29..bb769ce194653fa0c327272346a5ea7ccebbd500 100644 (file)
@@ -2,6 +2,7 @@
 # pylint: disable=unused-argument
 import errno
 import json
+import math
 from enum import IntEnum
 
 import cherrypy
@@ -10,7 +11,7 @@ import rbd
 
 from .. import mgr
 from ..exceptions import DashboardException
-from ..plugins.ttl_cache import ttl_cache
+from ..plugins.ttl_cache import ttl_cache, ttl_cache_invalidator
 from ._paginate import ListPaginator
 from .ceph_service import CephService
 
@@ -32,6 +33,10 @@ RBD_FEATURES_NAME_MAPPING = {
     rbd.RBD_FEATURE_OPERATIONS: "operations",
 }
 
+RBD_IMAGE_REFS_CACHE_REFERENCE = 'rbd_image_refs'
+GET_IOCTX_CACHE = 'get_ioctx'
+POOL_NAMESPACES_CACHE = 'pool_namespaces'
+
 
 class MIRROR_IMAGE_MODE(IntEnum):
     journal = rbd.RBD_MIRROR_IMAGE_MODE_JOURNAL
@@ -86,6 +91,25 @@ def format_features(features):
     return res
 
 
+def _sort_features(features, enable=True):
+    """
+    Sorts image features according to feature dependencies:
+
+    object-map depends on exclusive-lock
+    journaling depends on exclusive-lock
+    fast-diff depends on object-map
+    """
+    ORDER = ['exclusive-lock', 'journaling', 'object-map', 'fast-diff']  # noqa: N806
+
+    def key_func(feat):
+        try:
+            return ORDER.index(feat)
+        except ValueError:
+            return id(feat)
+
+    features.sort(key=key_func, reverse=not enable)
+
+
 def get_image_spec(pool_name, namespace, rbd_name):
     namespace = '{}/'.format(namespace) if namespace else ''
     return '{}/{}{}'.format(pool_name, namespace, rbd_name)
@@ -244,6 +268,13 @@ class RbdConfiguration(object):
 class RbdService(object):
     _rbd_inst = rbd.RBD()
 
+    # set of image features that can be enable on existing images
+    ALLOW_ENABLE_FEATURES = {"exclusive-lock", "object-map", "fast-diff", "journaling"}
+
+    # set of image features that can be disabled on existing images
+    ALLOW_DISABLE_FEATURES = {"exclusive-lock", "object-map", "fast-diff", "deep-flatten",
+                              "journaling"}
+
     @classmethod
     def _rbd_disk_usage(cls, image, snaps, whole_object=True):
         class DUCallback(object):
@@ -393,14 +424,14 @@ class RbdService(object):
         return stat_parent
 
     @classmethod
-    @ttl_cache(10)
+    @ttl_cache(10, label=GET_IOCTX_CACHE)
     def get_ioctx(cls, pool_name, namespace=''):
         ioctx = mgr.rados.open_ioctx(pool_name)
         ioctx.set_namespace(namespace)
         return ioctx
 
     @classmethod
-    @ttl_cache(30)
+    @ttl_cache(30, label=RBD_IMAGE_REFS_CACHE_REFERENCE)
     def _rbd_image_refs(cls, pool_name, namespace=''):
         # We add and set the namespace here so that we cache by ioctx and namespace.
         images = []
@@ -409,7 +440,7 @@ class RbdService(object):
         return images
 
     @classmethod
-    @ttl_cache(30)
+    @ttl_cache(30, label=POOL_NAMESPACES_CACHE)
     def _pool_namespaces(cls, pool_name, namespace=None):
         namespaces = []
         if namespace:
@@ -491,6 +522,167 @@ class RbdService(object):
         except rbd.ImageNotFound:
             raise cherrypy.HTTPError(404, 'Image not found')
 
+    @classmethod
+    @ttl_cache_invalidator(RBD_IMAGE_REFS_CACHE_REFERENCE)
+    def create(cls, name, pool_name, size, namespace=None,
+               obj_size=None, features=None, stripe_unit=None, stripe_count=None,
+               data_pool=None, configuration=None, metadata=None):
+        size = int(size)
+
+        def _create(ioctx):
+            rbd_inst = cls._rbd_inst
+
+            # Set order
+            l_order = None
+            if obj_size and obj_size > 0:
+                l_order = int(round(math.log(float(obj_size), 2)))
+
+            # Set features
+            feature_bitmask = format_features(features)
+
+            rbd_inst.create(ioctx, name, size, order=l_order, old_format=False,
+                            features=feature_bitmask, stripe_unit=stripe_unit,
+                            stripe_count=stripe_count, data_pool=data_pool)
+            RbdConfiguration(pool_ioctx=ioctx, namespace=namespace,
+                             image_name=name).set_configuration(configuration)
+            if metadata:
+                with rbd.Image(ioctx, name) as image:
+                    RbdImageMetadataService(image).set_metadata(metadata)
+        rbd_call(pool_name, namespace, _create)
+
+    @classmethod
+    @ttl_cache_invalidator(RBD_IMAGE_REFS_CACHE_REFERENCE)
+    def set(cls, image_spec, name=None, size=None, features=None,
+            configuration=None, metadata=None, enable_mirror=None, primary=None,
+            force=False, resync=False, mirror_mode=None, schedule_interval='',
+            remove_scheduling=False):
+        # pylint: disable=too-many-branches
+        pool_name, namespace, image_name = parse_image_spec(image_spec)
+
+        def _edit(ioctx, image):
+            rbd_inst = cls._rbd_inst
+            # check rename image
+            if name and name != image_name:
+                rbd_inst.rename(ioctx, image_name, name)
+
+            # check resize
+            if size and size != image.size():
+                image.resize(size)
+
+            mirror_image_info = image.mirror_image_get_info()
+            if enable_mirror and mirror_image_info['state'] == rbd.RBD_MIRROR_IMAGE_DISABLED:
+                RbdMirroringService.enable_image(
+                    image_name, pool_name, namespace,
+                    MIRROR_IMAGE_MODE[mirror_mode])
+            elif (enable_mirror is False
+                  and mirror_image_info['state'] == rbd.RBD_MIRROR_IMAGE_ENABLED):
+                RbdMirroringService.disable_image(
+                    image_name, pool_name, namespace)
+
+            # check enable/disable features
+            if features is not None:
+                curr_features = format_bitmask(image.features())
+                # check disabled features
+                _sort_features(curr_features, enable=False)
+                for feature in curr_features:
+                    if (feature not in features
+                       and feature in cls.ALLOW_DISABLE_FEATURES
+                       and feature in format_bitmask(image.features())):
+                        f_bitmask = format_features([feature])
+                        image.update_features(f_bitmask, False)
+                # check enabled features
+                _sort_features(features)
+                for feature in features:
+                    if (feature not in curr_features
+                       and feature in cls.ALLOW_ENABLE_FEATURES
+                       and feature not in format_bitmask(image.features())):
+                        f_bitmask = format_features([feature])
+                        image.update_features(f_bitmask, True)
+
+            RbdConfiguration(pool_ioctx=ioctx, image_name=image_name).set_configuration(
+                configuration)
+            if metadata:
+                RbdImageMetadataService(image).set_metadata(metadata)
+
+            if primary and not mirror_image_info['primary']:
+                RbdMirroringService.promote_image(
+                    image_name, pool_name, namespace, force)
+            elif primary is False and mirror_image_info['primary']:
+                RbdMirroringService.demote_image(
+                    image_name, pool_name, namespace)
+
+            if resync:
+                RbdMirroringService.resync_image(image_name, pool_name, namespace)
+
+            if schedule_interval:
+                RbdMirroringService.snapshot_schedule_add(image_spec, schedule_interval)
+
+            if remove_scheduling:
+                RbdMirroringService.snapshot_schedule_remove(image_spec)
+
+        return rbd_image_call(pool_name, namespace, image_name, _edit)
+
+    @classmethod
+    @ttl_cache_invalidator(RBD_IMAGE_REFS_CACHE_REFERENCE)
+    def delete(cls, image_spec):
+        pool_name, namespace, image_name = parse_image_spec(image_spec)
+
+        image = RbdService.get_image(image_spec)
+        snapshots = image['snapshots']
+        for snap in snapshots:
+            RbdSnapshotService.remove_snapshot(image_spec, snap['name'], snap['is_protected'])
+
+        rbd_inst = rbd.RBD()
+        return rbd_call(pool_name, namespace, rbd_inst.remove, image_name)
+
+    @classmethod
+    @ttl_cache_invalidator(RBD_IMAGE_REFS_CACHE_REFERENCE)
+    def copy(cls, image_spec, dest_pool_name, dest_namespace, dest_image_name,
+             snapshot_name=None, obj_size=None, features=None,
+             stripe_unit=None, stripe_count=None, data_pool=None,
+             configuration=None, metadata=None):
+        pool_name, namespace, image_name = parse_image_spec(image_spec)
+
+        def _src_copy(s_ioctx, s_img):
+            def _copy(d_ioctx):
+                # Set order
+                l_order = None
+                if obj_size and obj_size > 0:
+                    l_order = int(round(math.log(float(obj_size), 2)))
+
+                # Set features
+                feature_bitmask = format_features(features)
+
+                if snapshot_name:
+                    s_img.set_snap(snapshot_name)
+
+                s_img.copy(d_ioctx, dest_image_name, feature_bitmask, l_order,
+                           stripe_unit, stripe_count, data_pool)
+                RbdConfiguration(pool_ioctx=d_ioctx, image_name=dest_image_name).set_configuration(
+                    configuration)
+                if metadata:
+                    with rbd.Image(d_ioctx, dest_image_name) as image:
+                        RbdImageMetadataService(image).set_metadata(metadata)
+
+            return rbd_call(dest_pool_name, dest_namespace, _copy)
+
+        return rbd_image_call(pool_name, namespace, image_name, _src_copy)
+
+    @classmethod
+    @ttl_cache_invalidator(RBD_IMAGE_REFS_CACHE_REFERENCE)
+    def flatten(cls, image_spec):
+        def _flatten(ioctx, image):
+            image.flatten()
+
+        pool_name, namespace, image_name = parse_image_spec(image_spec)
+        return rbd_image_call(pool_name, namespace, image_name, _flatten)
+
+    @classmethod
+    def move_image_to_trash(cls, image_spec, delay):
+        pool_name, namespace, image_name = parse_image_spec(image_spec)
+        rbd_inst = cls._rbd_inst
+        return rbd_call(pool_name, namespace, rbd_inst.trash_move, image_name, delay)
+
 
 class RbdSnapshotService(object):
 
index eca5c7913aae3c55039b2c364da75634a2104529..5120806d89c1eb6e1c178e3228c580218c374c2f 100644 (file)
@@ -1,4 +1,7 @@
 # -*- coding: utf-8 -*-
+# pylint: disable=C0302
+# pylint: disable=too-many-branches
+# pylint: disable=too-many-lines
 
 import ipaddress
 import json
@@ -8,14 +11,15 @@ import re
 import xml.etree.ElementTree as ET  # noqa: N814
 from subprocess import SubprocessError
 
-from mgr_util import build_url
+from mgr_util import build_url, name_to_config_section
 
 from .. import mgr
 from ..awsauth import S3Auth
 from ..exceptions import DashboardException
 from ..rest_client import RequestException, RestClient
 from ..settings import Settings
-from ..tools import dict_contains_path, dict_get, json_str_to_object
+from ..tools import dict_contains_path, dict_get, json_str_to_object, str_to_bool
+from .ceph_service import CephService
 
 try:
     from typing import Any, Dict, List, Optional, Tuple, Union
@@ -84,9 +88,19 @@ def _determine_rgw_addr(daemon_info: Dict[str, Any]) -> RgwDaemon:
     Parse RGW daemon info to determine the configured host (IP address) and port.
     """
     daemon = RgwDaemon()
-    daemon.host = daemon_info['metadata']['hostname']
+    rgw_dns_name = CephService.send_command('mon', 'config get',
+                                            who=name_to_config_section('rgw.' + daemon_info['metadata']['id']),  # noqa E501 #pylint: disable=line-too-long
+                                            key='rgw_dns_name').rstrip()
+
     daemon.port, daemon.ssl = _parse_frontend_config(daemon_info['metadata']['frontend_config#0'])
 
+    if rgw_dns_name:
+        daemon.host = rgw_dns_name
+    elif daemon.ssl:
+        daemon.host = daemon_info['metadata']['hostname']
+    else:
+        daemon.host = _parse_addr(daemon_info['addr'])
+
     return daemon
 
 
@@ -580,18 +594,15 @@ class RgwClient(RestClient):
         realms_info = self._get_realms_info()
         if 'realms' in realms_info and realms_info['realms']:
             return realms_info['realms']
-
         return []
 
-    def get_default_realm(self) -> str:
+    def get_default_realm(self):
         realms_info = self._get_realms_info()
         if 'default_info' in realms_info and realms_info['default_info']:
             realm_info = self._get_realm_info(realms_info['default_info'])
             if 'name' in realm_info and realm_info['name']:
                 return realm_info['name']
-        raise DashboardException(msg='Default realm not found.',
-                                 http_status_code=404,
-                                 component='rgw')
+        return None
 
     @RestClient.api_get('/{bucket_name}?versioning')
     def get_bucket_versioning(self, bucket_name, request=None):
@@ -863,3 +874,765 @@ class RgwClient(RestClient):
             msg = "Retention mode must be either COMPLIANCE or GOVERNANCE."
             raise DashboardException(msg=msg, component='rgw')
         return retention_period_days, retention_period_years
+
+
+class RgwMultisite:
+    def migrate_to_multisite(self, realm_name: str, zonegroup_name: str, zone_name: str,
+                             zonegroup_endpoints: str, zone_endpoints: str, access_key: str,
+                             secret_key: str):
+        rgw_realm_create_cmd = ['realm', 'create', '--rgw-realm', realm_name, '--default']
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_realm_create_cmd, False)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to create realm',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+        rgw_zonegroup_edit_cmd = ['zonegroup', 'rename', '--rgw-zonegroup', 'default',
+                                  '--zonegroup-new-name', zonegroup_name]
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_zonegroup_edit_cmd, False)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to rename zonegroup to {}'.format(zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+        rgw_zone_edit_cmd = ['zone', 'rename', '--rgw-zone',
+                             'default', '--zone-new-name', zone_name,
+                             '--rgw-zonegroup', zonegroup_name]
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_edit_cmd, False)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to rename zone to {}'.format(zone_name),  # noqa E501 #pylint: disable=line-too-long
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+        rgw_zonegroup_modify_cmd = ['zonegroup', 'modify',
+                                    '--rgw-realm', realm_name,
+                                    '--rgw-zonegroup', zonegroup_name]
+        if zonegroup_endpoints:
+            rgw_zonegroup_modify_cmd.append('--endpoints')
+            rgw_zonegroup_modify_cmd.append(zonegroup_endpoints)
+        rgw_zonegroup_modify_cmd.append('--master')
+        rgw_zonegroup_modify_cmd.append('--default')
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_zonegroup_modify_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to modify zonegroup {}'.format(zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+        rgw_zone_modify_cmd = ['zone', 'modify', '--rgw-realm', realm_name,
+                               '--rgw-zonegroup', zonegroup_name,
+                               '--rgw-zone', zone_name]
+        if zone_endpoints:
+            rgw_zone_modify_cmd.append('--endpoints')
+            rgw_zone_modify_cmd.append(zone_endpoints)
+        rgw_zone_modify_cmd.append('--master')
+        rgw_zone_modify_cmd.append('--default')
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_modify_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to modify zone',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+        if access_key and secret_key:
+            rgw_zone_modify_cmd = ['zone', 'modify', '--rgw-zone', zone_name,
+                                   '--access-key', access_key, '--secret', secret_key]
+            try:
+                exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_modify_cmd)
+                if exit_code > 0:
+                    raise DashboardException(e=err, msg='Unable to modify zone',
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+
+    def create_realm(self, realm_name: str, default: bool):
+        rgw_realm_create_cmd = ['realm', 'create']
+        cmd_create_realm_options = ['--rgw-realm', realm_name]
+        if default != 'false':
+            cmd_create_realm_options.append('--default')
+        rgw_realm_create_cmd += cmd_create_realm_options
+        try:
+            exit_code, _, _ = mgr.send_rgwadmin_command(rgw_realm_create_cmd)
+            if exit_code > 0:
+                raise DashboardException(msg='Unable to create realm',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+    def list_realms(self):
+        rgw_realm_list = {}
+        rgw_realm_list_cmd = ['realm', 'list']
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_realm_list_cmd)
+            if exit_code > 0:
+                raise DashboardException(msg='Unable to fetch realm list',
+                                         http_status_code=500, component='rgw')
+            rgw_realm_list = out
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return rgw_realm_list
+
+    def get_realm(self, realm_name: str):
+        realm_info = {}
+        rgw_realm_info_cmd = ['realm', 'get', '--rgw-realm', realm_name]
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_realm_info_cmd)
+            if exit_code > 0:
+                raise DashboardException('Unable to get realm info',
+                                         http_status_code=500, component='rgw')
+            realm_info = out
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return realm_info
+
+    def get_all_realms_info(self):
+        all_realms_info = {}
+        realms_info = []
+        rgw_realm_list = self.list_realms()
+        if 'realms' in rgw_realm_list:
+            if rgw_realm_list['realms'] != []:
+                for rgw_realm in rgw_realm_list['realms']:
+                    realm_info = self.get_realm(rgw_realm)
+                    realms_info.append(realm_info)
+                    all_realms_info['realms'] = realms_info  # type: ignore
+            else:
+                all_realms_info['realms'] = []  # type: ignore
+        if 'default_info' in rgw_realm_list and rgw_realm_list['default_info'] != '':
+            all_realms_info['default_realm'] = rgw_realm_list['default_info']  # type: ignore
+        else:
+            all_realms_info['default_realm'] = ''  # type: ignore
+        return all_realms_info
+
+    def edit_realm(self, realm_name: str, new_realm_name: str, default: str = ''):
+        rgw_realm_edit_cmd = []
+        if new_realm_name != realm_name:
+            rgw_realm_edit_cmd = ['realm', 'rename', '--rgw-realm',
+                                  realm_name, '--realm-new-name', new_realm_name]
+            try:
+                exit_code, _, err = mgr.send_rgwadmin_command(rgw_realm_edit_cmd, False)
+                if exit_code > 0:
+                    raise DashboardException(e=err, msg='Unable to edit realm',
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+        if default and str_to_bool(default):
+            rgw_realm_edit_cmd = ['realm', 'default', '--rgw-realm', new_realm_name]
+            try:
+                exit_code, _, _ = mgr.send_rgwadmin_command(rgw_realm_edit_cmd, False)
+                if exit_code > 0:
+                    raise DashboardException(msg='Unable to set {} as default realm'.format(new_realm_name),  # noqa E501  #pylint: disable=line-too-long
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+
+    def delete_realm(self, realm_name: str):
+        rgw_delete_realm_cmd = ['realm', 'rm', '--rgw-realm', realm_name]
+        try:
+            exit_code, _, _ = mgr.send_rgwadmin_command(rgw_delete_realm_cmd)
+            if exit_code > 0:
+                raise DashboardException(msg='Unable to delete realm',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+    def create_zonegroup(self, realm_name: str, zonegroup_name: str,
+                         default: bool, master: bool, endpoints: str):
+        rgw_zonegroup_create_cmd = ['zonegroup', 'create']
+        cmd_create_zonegroup_options = ['--rgw-zonegroup', zonegroup_name]
+        if realm_name != 'null':
+            cmd_create_zonegroup_options.append('--rgw-realm')
+            cmd_create_zonegroup_options.append(realm_name)
+        if default != 'false':
+            cmd_create_zonegroup_options.append('--default')
+        if master != 'false':
+            cmd_create_zonegroup_options.append('--master')
+        if endpoints:
+            cmd_create_zonegroup_options.append('--endpoints')
+            cmd_create_zonegroup_options.append(endpoints)
+        rgw_zonegroup_create_cmd += cmd_create_zonegroup_options
+        try:
+            exit_code, out, err = mgr.send_rgwadmin_command(rgw_zonegroup_create_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to get realm info',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return out
+
+    def list_zonegroups(self):
+        rgw_zonegroup_list = {}
+        rgw_zonegroup_list_cmd = ['zonegroup', 'list']
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_zonegroup_list_cmd)
+            if exit_code > 0:
+                raise DashboardException(msg='Unable to fetch zonegroup list',
+                                         http_status_code=500, component='rgw')
+            rgw_zonegroup_list = out
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return rgw_zonegroup_list
+
+    def get_zonegroup(self, zonegroup_name: str):
+        zonegroup_info = {}
+        if zonegroup_name != 'default':
+            rgw_zonegroup_info_cmd = ['zonegroup', 'get', '--rgw-zonegroup', zonegroup_name]
+        else:
+            rgw_zonegroup_info_cmd = ['zonegroup', 'get', '--rgw-zonegroup',
+                                      zonegroup_name, '--rgw-realm', 'default']
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_zonegroup_info_cmd)
+            if exit_code > 0:
+                raise DashboardException('Unable to get zonegroup info',
+                                         http_status_code=500, component='rgw')
+            zonegroup_info = out
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return zonegroup_info
+
+    def get_all_zonegroups_info(self):
+        all_zonegroups_info = {}
+        zonegroups_info = []
+        rgw_zonegroup_list = self.list_zonegroups()
+        if 'zonegroups' in rgw_zonegroup_list:
+            if rgw_zonegroup_list['zonegroups'] != []:
+                for rgw_zonegroup in rgw_zonegroup_list['zonegroups']:
+                    zonegroup_info = self.get_zonegroup(rgw_zonegroup)
+                    zonegroups_info.append(zonegroup_info)
+                all_zonegroups_info['zonegroups'] = zonegroups_info  # type: ignore
+            else:
+                all_zonegroups_info['zonegroups'] = []  # type: ignore
+        if 'default_info' in rgw_zonegroup_list and rgw_zonegroup_list['default_info'] != '':
+            all_zonegroups_info['default_zonegroup'] = rgw_zonegroup_list['default_info']
+        else:
+            all_zonegroups_info['default_zonegroup'] = ''  # type: ignore
+        return all_zonegroups_info
+
+    def delete_zonegroup(self, zonegroup_name: str, delete_pools: str, pools: List[str]):
+        if delete_pools == 'true':
+            zonegroup_info = self.get_zonegroup(zonegroup_name)
+        rgw_delete_zonegroup_cmd = ['zonegroup', 'delete', '--rgw-zonegroup', zonegroup_name]
+        try:
+            exit_code, _, _ = mgr.send_rgwadmin_command(rgw_delete_zonegroup_cmd)
+            if exit_code > 0:
+                raise DashboardException(msg='Unable to delete zonegroup',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        self.update_period()
+        if delete_pools == 'true':
+            for zone in zonegroup_info['zones']:
+                self.delete_zone(zone['name'], 'true', pools)
+
+    def modify_zonegroup(self, realm_name: str, zonegroup_name: str, default: str, master: str,
+                         endpoints: str):
+
+        rgw_zonegroup_modify_cmd = ['zonegroup', 'modify',
+                                    '--rgw-realm', realm_name,
+                                    '--rgw-zonegroup', zonegroup_name]
+        if endpoints:
+            rgw_zonegroup_modify_cmd.append('--endpoints')
+            rgw_zonegroup_modify_cmd.append(endpoints)
+        if master and str_to_bool(master):
+            rgw_zonegroup_modify_cmd.append('--master')
+        if default and str_to_bool(default):
+            rgw_zonegroup_modify_cmd.append('--default')
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_zonegroup_modify_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to modify zonegroup {}'.format(zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        self.update_period()
+
+    def add_or_remove_zone(self, zonegroup_name: str, zone_name: str, action: str):
+        if action == 'add':
+            rgw_zonegroup_add_zone_cmd = ['zonegroup', 'add', '--rgw-zonegroup',
+                                          zonegroup_name, '--rgw-zone', zone_name]
+            try:
+                exit_code, _, err = mgr.send_rgwadmin_command(rgw_zonegroup_add_zone_cmd)
+                if exit_code > 0:
+                    raise DashboardException(e=err, msg='Unable to add zone {} to zonegroup {}'.format(zone_name, zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+            self.update_period()
+        if action == 'remove':
+            rgw_zonegroup_rm_zone_cmd = ['zonegroup', 'remove',
+                                         '--rgw-zonegroup', zonegroup_name, '--rgw-zone', zone_name]
+            try:
+                exit_code, _, err = mgr.send_rgwadmin_command(rgw_zonegroup_rm_zone_cmd)
+                if exit_code > 0:
+                    raise DashboardException(e=err, msg='Unable to remove zone {} from zonegroup {}'.format(zone_name, zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+            self.update_period()
+
+    def get_placement_targets_by_zonegroup(self, zonegroup_name: str):
+        rgw_get_placement_cmd = ['zonegroup', 'placement',
+                                 'list', '--rgw-zonegroup', zonegroup_name]
+        try:
+            exit_code, out, err = mgr.send_rgwadmin_command(rgw_get_placement_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to get placement targets',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return out
+
+    def add_placement_targets(self, zonegroup_name: str, placement_targets: List[Dict]):
+        rgw_add_placement_cmd = ['zonegroup', 'placement', 'add']
+        for placement_target in placement_targets:
+            cmd_add_placement_options = ['--rgw-zonegroup', zonegroup_name,
+                                         '--placement-id', placement_target['placement_id']]
+            if placement_target['tags']:
+                cmd_add_placement_options += ['--tags', placement_target['tags']]
+            rgw_add_placement_cmd += cmd_add_placement_options
+            try:
+                exit_code, _, err = mgr.send_rgwadmin_command(rgw_add_placement_cmd)
+                if exit_code > 0:
+                    raise DashboardException(e=err,
+                                             msg='Unable to add placement target {} to zonegroup {}'.format(placement_target['placement_id'], zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+            self.update_period()
+            storage_classes = placement_target['storage_class'].split(",") if placement_target['storage_class'] else []  # noqa E501  #pylint: disable=line-too-long
+            if storage_classes:
+                for sc in storage_classes:
+                    cmd_add_placement_options = ['--storage-class', sc]
+                    try:
+                        exit_code, _, err = mgr.send_rgwadmin_command(
+                            rgw_add_placement_cmd + cmd_add_placement_options)
+                        if exit_code > 0:
+                            raise DashboardException(e=err,
+                                                     msg='Unable to add placement target {} to zonegroup {}'.format(placement_target['placement_id'], zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                                     http_status_code=500, component='rgw')
+                    except SubprocessError as error:
+                        raise DashboardException(error, http_status_code=500, component='rgw')
+                    self.update_period()
+
+    def modify_placement_targets(self, zonegroup_name: str, placement_targets: List[Dict]):
+        rgw_add_placement_cmd = ['zonegroup', 'placement', 'modify']
+        for placement_target in placement_targets:
+            cmd_add_placement_options = ['--rgw-zonegroup', zonegroup_name,
+                                         '--placement-id', placement_target['placement_id']]
+            if placement_target['tags']:
+                cmd_add_placement_options += ['--tags', placement_target['tags']]
+            rgw_add_placement_cmd += cmd_add_placement_options
+            storage_classes = placement_target['storage_class'].split(",") if placement_target['storage_class'] else []  # noqa E501  #pylint: disable=line-too-long
+            if storage_classes:
+                for sc in storage_classes:
+                    cmd_add_placement_options = []
+                    cmd_add_placement_options = ['--storage-class', sc]
+                    try:
+                        exit_code, _, err = mgr.send_rgwadmin_command(
+                            rgw_add_placement_cmd + cmd_add_placement_options)
+                        if exit_code > 0:
+                            raise DashboardException(e=err,
+                                                     msg='Unable to add placement target {} to zonegroup {}'.format(placement_target['placement_id'], zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                                     http_status_code=500, component='rgw')
+                    except SubprocessError as error:
+                        raise DashboardException(error, http_status_code=500, component='rgw')
+                    self.update_period()
+            else:
+                try:
+                    exit_code, _, err = mgr.send_rgwadmin_command(rgw_add_placement_cmd)
+                    if exit_code > 0:
+                        raise DashboardException(e=err,
+                                                 msg='Unable to add placement target {} to zonegroup {}'.format(placement_target['placement_id'], zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                                 http_status_code=500, component='rgw')
+                except SubprocessError as error:
+                    raise DashboardException(error, http_status_code=500, component='rgw')
+                self.update_period()
+
+    # pylint: disable=W0102
+    def edit_zonegroup(self, realm_name: str, zonegroup_name: str, new_zonegroup_name: str,
+                       default: str = '', master: str = '', endpoints: str = '',
+                       add_zones: List[str] = [], remove_zones: List[str] = [],
+                       placement_targets: List[Dict[str, str]] = []):
+        rgw_zonegroup_edit_cmd = []
+        if new_zonegroup_name != zonegroup_name:
+            rgw_zonegroup_edit_cmd = ['zonegroup', 'rename', '--rgw-zonegroup', zonegroup_name,
+                                      '--zonegroup-new-name', new_zonegroup_name]
+            try:
+                exit_code, _, err = mgr.send_rgwadmin_command(rgw_zonegroup_edit_cmd, False)
+                if exit_code > 0:
+                    raise DashboardException(e=err, msg='Unable to rename zonegroup to {}'.format(new_zonegroup_name),  # noqa E501  #pylint: disable=line-too-long
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+            self.update_period()
+        self.modify_zonegroup(realm_name, new_zonegroup_name, default, master, endpoints)
+        if add_zones:
+            for zone_name in add_zones:
+                self.add_or_remove_zone(new_zonegroup_name, zone_name, 'add')
+        if remove_zones:
+            for zone_name in remove_zones:
+                self.add_or_remove_zone(new_zonegroup_name, zone_name, 'remove')
+        existing_placement_targets = self.get_placement_targets_by_zonegroup(new_zonegroup_name)
+        existing_placement_targets_ids = [pt['key'] for pt in existing_placement_targets]
+        if placement_targets:
+            for pt in placement_targets:
+                if pt['placement_id'] in existing_placement_targets_ids:
+                    self.modify_placement_targets(new_zonegroup_name, placement_targets)
+                else:
+                    self.add_placement_targets(new_zonegroup_name, placement_targets)
+
+    def update_period(self):
+        rgw_update_period_cmd = ['period', 'update', '--commit']
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_update_period_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to update period',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+    def create_zone(self, zone_name, zonegroup_name, default, master, endpoints, access_key,
+                    secret_key):
+        rgw_zone_create_cmd = ['zone', 'create']
+        cmd_create_zone_options = ['--rgw-zone', zone_name]
+        if zonegroup_name != 'null':
+            cmd_create_zone_options.append('--rgw-zonegroup')
+            cmd_create_zone_options.append(zonegroup_name)
+        if default != 'false':
+            cmd_create_zone_options.append('--default')
+        if master != 'false':
+            cmd_create_zone_options.append('--master')
+        if endpoints != 'null':
+            cmd_create_zone_options.append('--endpoints')
+            cmd_create_zone_options.append(endpoints)
+        if access_key is not None:
+            cmd_create_zone_options.append('--access-key')
+            cmd_create_zone_options.append(access_key)
+        if secret_key is not None:
+            cmd_create_zone_options.append('--secret')
+            cmd_create_zone_options.append(secret_key)
+        rgw_zone_create_cmd += cmd_create_zone_options
+        try:
+            exit_code, out, err = mgr.send_rgwadmin_command(rgw_zone_create_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to create zone',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+        self.update_period()
+        return out
+
+    def parse_secrets(self, user, data):
+        for key in data.get('keys', []):
+            if key.get('user') == user:
+                access_key = key.get('access_key')
+                secret_key = key.get('secret_key')
+                return access_key, secret_key
+        return '', ''
+
+    def modify_zone(self, zone_name: str, zonegroup_name: str, default: str, master: str,
+                    endpoints: str, access_key: str, secret_key: str):
+        rgw_zone_modify_cmd = ['zone', 'modify', '--rgw-zonegroup',
+                               zonegroup_name, '--rgw-zone', zone_name]
+        if endpoints:
+            rgw_zone_modify_cmd.append('--endpoints')
+            rgw_zone_modify_cmd.append(endpoints)
+        if default and str_to_bool(default):
+            rgw_zone_modify_cmd.append('--default')
+        if master and str_to_bool(master):
+            rgw_zone_modify_cmd.append('--master')
+        if access_key is not None:
+            rgw_zone_modify_cmd.append('--access-key')
+            rgw_zone_modify_cmd.append(access_key)
+        if secret_key is not None:
+            rgw_zone_modify_cmd.append('--secret')
+            rgw_zone_modify_cmd.append(secret_key)
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_modify_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to modify zone',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        self.update_period()
+
+    def add_placement_targets_zone(self, zone_name: str, placement_target: str, data_pool: str,
+                                   index_pool: str, data_extra_pool: str):
+        rgw_zone_add_placement_cmd = ['zone', 'placement', 'add', '--rgw-zone', zone_name,
+                                      '--placement-id', placement_target, '--data-pool', data_pool,
+                                      '--index-pool', index_pool,
+                                      '--data-extra-pool', data_extra_pool]
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_add_placement_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to add placement target {} to zone {}'.format(placement_target, zone_name),  # noqa E501 #pylint: disable=line-too-long
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        self.update_period()
+
+    def add_storage_class_zone(self, zone_name: str, placement_target: str, storage_class: str,
+                               data_pool: str, compression: str):
+        rgw_zone_add_storage_class_cmd = ['zone', 'placement', 'add', '--rgw-zone', zone_name,
+                                          '--placement-id', placement_target,
+                                          '--storage-class', storage_class,
+                                          '--data-pool', data_pool,
+                                          '--compression', compression]
+        try:
+            exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_add_storage_class_cmd)
+            if exit_code > 0:
+                raise DashboardException(e=err, msg='Unable to add storage class {} to zone {}'.format(storage_class, zone_name),  # noqa E501 #pylint: disable=line-too-long
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        self.update_period()
+
+    def edit_zone(self, zone_name: str, new_zone_name: str, zonegroup_name: str, default: str = '',
+                  master: str = '', endpoints: str = '', access_key: str = '', secret_key: str = '',
+                  placement_target: str = '', data_pool: str = '', index_pool: str = '',
+                  data_extra_pool: str = '', storage_class: str = '', data_pool_class: str = '',
+                  compression: str = ''):
+        if new_zone_name != zone_name:
+            rgw_zone_rename_cmd = ['zone', 'rename', '--rgw-zone',
+                                   zone_name, '--zone-new-name', new_zone_name]
+            try:
+                exit_code, _, err = mgr.send_rgwadmin_command(rgw_zone_rename_cmd, False)
+                if exit_code > 0:
+                    raise DashboardException(e=err, msg='Unable to rename zone to {}'.format(new_zone_name),  # noqa E501 #pylint: disable=line-too-long
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+            self.update_period()
+        self.modify_zone(new_zone_name, zonegroup_name, default, master, endpoints, access_key,
+                         secret_key)
+        self.add_placement_targets_zone(new_zone_name, placement_target,
+                                        data_pool, index_pool, data_extra_pool)
+        self.add_storage_class_zone(new_zone_name, placement_target, storage_class,
+                                    data_pool_class, compression)
+
+    def list_zones(self):
+        rgw_zone_list = {}
+        rgw_zone_list_cmd = ['zone', 'list']
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_zone_list_cmd)
+            if exit_code > 0:
+                raise DashboardException(msg='Unable to fetch zone list',
+                                         http_status_code=500, component='rgw')
+            rgw_zone_list = out
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return rgw_zone_list
+
+    def get_zone(self, zone_name: str):
+        zone_info = {}
+        rgw_zone_info_cmd = ['zone', 'get', '--rgw-zone', zone_name]
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_zone_info_cmd)
+            if exit_code > 0:
+                raise DashboardException('Unable to get zone info',
+                                         http_status_code=500, component='rgw')
+            zone_info = out
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return zone_info
+
+    def get_all_zones_info(self):
+        all_zones_info = {}
+        zones_info = []
+        rgw_zone_list = self.list_zones()
+        if 'zones' in rgw_zone_list:
+            if rgw_zone_list['zones'] != []:
+                for rgw_zone in rgw_zone_list['zones']:
+                    zone_info = self.get_zone(rgw_zone)
+                    zones_info.append(zone_info)
+                    all_zones_info['zones'] = zones_info  # type: ignore
+            else:
+                all_zones_info['zones'] = []
+        if 'default_info' in rgw_zone_list and rgw_zone_list['default_info'] != '':
+            all_zones_info['default_zone'] = rgw_zone_list['default_info']  # type: ignore
+        else:
+            all_zones_info['default_zone'] = ''  # type: ignore
+        return all_zones_info
+
+    def delete_zone(self, zone_name: str, delete_pools: str, pools: List[str],
+                    zonegroup_name: str = '',):
+        rgw_remove_zone_from_zonegroup_cmd = ['zonegroup', 'remove', '--rgw-zonegroup',
+                                              zonegroup_name, '--rgw-zone', zone_name]
+        rgw_delete_zone_cmd = ['zone', 'delete', '--rgw-zone', zone_name]
+        if zonegroup_name:
+            try:
+                exit_code, _, _ = mgr.send_rgwadmin_command(rgw_remove_zone_from_zonegroup_cmd)
+                if exit_code > 0:
+                    raise DashboardException(msg='Unable to remove zone from zonegroup',
+                                             http_status_code=500, component='rgw')
+            except SubprocessError as error:
+                raise DashboardException(error, http_status_code=500, component='rgw')
+            self.update_period()
+        try:
+            exit_code, _, _ = mgr.send_rgwadmin_command(rgw_delete_zone_cmd)
+            if exit_code > 0:
+                raise DashboardException(msg='Unable to delete zone',
+                                         http_status_code=500, component='rgw')
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        self.update_period()
+        if delete_pools == 'true':
+            self.delete_pools(pools)
+
+    def delete_pools(self, pools):
+        for pool in pools:
+            if mgr.rados.pool_exists(pool):
+                mgr.rados.delete_pool(pool)
+
+    def create_system_user(self, userName: str, zoneName: str):
+        rgw_user_create_cmd = ['user', 'create', '--uid', userName,
+                               '--display-name', userName, '--rgw-zone', zoneName, '--system']
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_user_create_cmd)
+            if exit_code > 0:
+                raise DashboardException(msg='Unable to create system user',
+                                         http_status_code=500, component='rgw')
+            return out
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+    def get_user_list(self, zoneName: str):
+        all_users_info = []
+        user_list = []
+        rgw_user_list_cmd = ['user', 'list', '--rgw-zone', zoneName]
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_user_list_cmd)
+            if exit_code > 0:
+                raise DashboardException('Unable to get user list',
+                                         http_status_code=500, component='rgw')
+            user_list = out
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+
+        if len(user_list) > 0:
+            for user_name in user_list:
+                rgw_user_info_cmd = ['user', 'info', '--uid', user_name, '--rgw-zone', zoneName]
+                try:
+                    exit_code, out, _ = mgr.send_rgwadmin_command(rgw_user_info_cmd)
+                    if exit_code > 0:
+                        raise DashboardException('Unable to get user info',
+                                                 http_status_code=500, component='rgw')
+                    all_users_info.append(out)
+                except SubprocessError as error:
+                    raise DashboardException(error, http_status_code=500, component='rgw')
+        return all_users_info
+
+    def get_multisite_status(self):
+        is_multisite_configured = True
+        rgw_realm_list = self.list_realms()
+        rgw_zonegroup_list = self.list_zonegroups()
+        rgw_zone_list = self.list_zones()
+        if len(rgw_realm_list['realms']) < 1 and len(rgw_zonegroup_list['zonegroups']) < 1 \
+                and len(rgw_zone_list['zones']) < 1:
+            is_multisite_configured = False
+        return is_multisite_configured
+
+    def get_multisite_sync_status(self):
+        rgw_multisite_sync_status_cmd = ['sync', 'status']
+        try:
+            exit_code, out, _ = mgr.send_rgwadmin_command(rgw_multisite_sync_status_cmd, False)
+            if exit_code > 0:
+                raise DashboardException('Unable to get sync status',
+                                         http_status_code=500, component='rgw')
+            if out:
+                return self.process_data(out)
+        except SubprocessError as error:
+            raise DashboardException(error, http_status_code=500, component='rgw')
+        return {}
+
+    def process_data(self, data):
+        primary_zone_data, metadata_sync_data = self.extract_metadata_and_primary_zone_data(data)
+        replica_zones_info = []
+        if metadata_sync_data != {}:
+            datasync_info = self.extract_datasync_info(data)
+            replica_zones_info = [self.extract_replica_zone_data(item) for item in datasync_info]
+
+        replica_zones_info_object = {
+            'metadataSyncInfo': metadata_sync_data,
+            'dataSyncInfo': replica_zones_info,
+            'primaryZoneData': primary_zone_data
+        }
+
+        return replica_zones_info_object
+
+    def extract_metadata_and_primary_zone_data(self, data):
+        primary_zone_info, metadata_sync_infoormation = self.extract_zones_data(data)
+
+        primary_zone_tree = primary_zone_info.split('\n') if primary_zone_info else []
+        realm = self.get_primary_zonedata(primary_zone_tree[0])
+        zonegroup = self.get_primary_zonedata(primary_zone_tree[1])
+        zone = self.get_primary_zonedata(primary_zone_tree[2])
+
+        primary_zone_data = [realm, zonegroup, zone]
+        zonegroup_info = self.get_zonegroup(zonegroup)
+        metadata_sync_data = {}
+        if len(zonegroup_info['zones']) > 1:
+            metadata_sync_data = self.extract_metadata_sync_data(metadata_sync_infoormation)
+
+        return primary_zone_data, metadata_sync_data
+
+    def extract_zones_data(self, data):
+        result = data
+        primary_zone_info = result.split('metadata sync')[0] if 'metadata sync' in result else None
+        metadata_sync_infoormation = result.split('metadata sync')[1] if 'metadata sync' in result else None  # noqa E501  #pylint: disable=line-too-long
+        return primary_zone_info, metadata_sync_infoormation
+
+    def extract_metadata_sync_data(self, metadata_sync_infoormation):
+        metadata_sync_info = metadata_sync_infoormation.split('data sync source')[0].strip() if 'data sync source' in metadata_sync_infoormation else None  # noqa E501  #pylint: disable=line-too-long
+
+        if metadata_sync_info == 'no sync (zone is master)':
+            return metadata_sync_info
+
+        metadata_sync_data = {}
+        metadata_sync_info_array = metadata_sync_info.split('\n') if metadata_sync_info else []
+        metadata_sync_data['syncstatus'] = metadata_sync_info_array[0].strip() if len(metadata_sync_info_array) > 0 else None  # noqa E501  #pylint: disable=line-too-long
+
+        for item in metadata_sync_info_array:
+            self.extract_metadata_sync_info(metadata_sync_data, item)
+
+        metadata_sync_data['fullSyncStatus'] = metadata_sync_info_array
+        return metadata_sync_data
+
+    def extract_metadata_sync_info(self, metadata_sync_data, item):
+        if 'oldest incremental change not applied:' in item:
+            metadata_sync_data['timestamp'] = item.split('applied:')[1].split()[0].strip()
+
+    def extract_datasync_info(self, data):
+        metadata_sync_infoormation = data.split('metadata sync')[1] if 'metadata sync' in data else None  # noqa E501  #pylint: disable=line-too-long
+        if 'data sync source' in metadata_sync_infoormation:
+            datasync_info = metadata_sync_infoormation.split('data sync source')[1].split('source:')
+            return datasync_info
+        return []
+
+    def extract_replica_zone_data(self, datasync_item):
+        replica_zone_data = {}
+        datasync_info_array = datasync_item.split('\n')
+        replica_zone_name = self.get_primary_zonedata(datasync_info_array[0])
+        replica_zone_data['name'] = replica_zone_name.strip()
+        replica_zone_data['syncstatus'] = datasync_info_array[1].strip()
+        replica_zone_data['fullSyncStatus'] = datasync_info_array
+        for item in datasync_info_array:
+            self.extract_metadata_sync_info(replica_zone_data, item)
+        return replica_zone_data
+
+    def get_primary_zonedata(self, data):
+        regex = r'\(([^)]+)\)'
+        match = re.search(regex, data)
+
+        if match and match.group(1):
+            return match.group(1)
+
+        return ''
index 6018f0d7f9c73facc52097e0efe1db1df6e33ef3..d4e06a9cc8dc4d844bb3229a07fda01705dda6d3 100644 (file)
@@ -119,6 +119,8 @@ class Options(object):
                                                   'gateway', 'logs', 'crush', 'maps']),
                                         [str])
 
+    UNSAFE_TLS_v1_2 = Setting(False, [bool])
+
     @staticmethod
     def has_default_value(name):
         return getattr(Settings, name, None) is None or \
diff --git a/ceph/src/pybind/mgr/dashboard/tests/test_cache.py b/ceph/src/pybind/mgr/dashboard/tests/test_cache.py
new file mode 100644 (file)
index 0000000..f767676
--- /dev/null
@@ -0,0 +1,48 @@
+
+import unittest
+
+from ..plugins.ttl_cache import CacheManager, TTLCache
+
+
+class TTLCacheTest(unittest.TestCase):
+    def test_get(self):
+        ref = 'testcache'
+        cache = TTLCache(ref, 30)
+        with self.assertRaises(KeyError):
+            val = cache['foo']
+        cache['foo'] = 'var'
+        val = cache['foo']
+        self.assertEqual(val, 'var')
+        self.assertEqual(cache.hits, 1)
+        self.assertEqual(cache.misses, 1)
+
+    def test_ttl(self):
+        ref = 'testcache'
+        cache = TTLCache(ref, 0.0000001)
+        cache['foo'] = 'var'
+        # pylint: disable=pointless-statement
+        with self.assertRaises(KeyError):
+            cache['foo']
+        self.assertEqual(cache.hits, 0)
+        self.assertEqual(cache.misses, 1)
+        self.assertEqual(cache.expired, 1)
+
+    def test_maxsize_fifo(self):
+        ref = 'testcache'
+        cache = TTLCache(ref, 30, 2)
+        cache['foo0'] = 'var0'
+        cache['foo1'] = 'var1'
+        cache['foo2'] = 'var2'
+        # pylint: disable=pointless-statement
+        with self.assertRaises(KeyError):
+            cache['foo0']
+        self.assertEqual(cache.hits, 0)
+        self.assertEqual(cache.misses, 1)
+
+
+class TTLCacheManagerTest(unittest.TestCase):
+    def test_get(self):
+        ref = 'testcache'
+        cache0 = CacheManager.get(ref)
+        cache1 = CacheManager.get(ref)
+        self.assertEqual(id(cache0), id(cache1))
diff --git a/ceph/src/pybind/mgr/dashboard/tests/test_cluster_upgrade.py b/ceph/src/pybind/mgr/dashboard/tests/test_cluster_upgrade.py
new file mode 100644 (file)
index 0000000..9e21587
--- /dev/null
@@ -0,0 +1,61 @@
+from ..controllers.cluster import ClusterUpgrade
+from ..tests import ControllerTestCase, patch_orch
+from ..tools import NotificationQueue, TaskManager
+
+
+class ClusterUpgradeControllerTest(ControllerTestCase):
+    URL_CLUSTER_UPGRADE = '/api/cluster/upgrade'
+
+    @classmethod
+    def setup_server(cls):
+        NotificationQueue.start_queue()
+        TaskManager.init()
+        cls.setup_controllers([ClusterUpgrade])
+
+    @classmethod
+    def tearDownClass(cls):
+        NotificationQueue.stop()
+
+    def test_upgrade_list(self):
+        result = ['17.1.0', '16.2.7', '16.2.6', '16.2.5', '16.1.4', '16.1.3']
+        with patch_orch(True) as fake_client:
+            fake_client.upgrades.list.return_value = result
+            self._get('{}?image=quay.io/ceph/ceph:v16.1.0&tags=False&show_all_versions=False'
+                      .format(self.URL_CLUSTER_UPGRADE))
+            self.assertStatus(200)
+            self.assertJsonBody(result)
+
+    def test_start_upgrade(self):
+        msg = "Initiating upgrade to 17.2.6"
+        with patch_orch(True) as fake_client:
+            fake_client.upgrades.start.return_value = msg
+            payload = {
+                'version': '17.2.6'
+            }
+            self._post('{}/start'.format(self.URL_CLUSTER_UPGRADE), payload)
+            self.assertStatus(200)
+            self.assertJsonBody(msg)
+
+    def test_pause_upgrade(self):
+        msg = "Paused upgrade to 17.2.6"
+        with patch_orch(True) as fake_client:
+            fake_client.upgrades.pause.return_value = msg
+            self._put('{}/pause'.format(self.URL_CLUSTER_UPGRADE))
+            self.assertStatus(200)
+            self.assertJsonBody(msg)
+
+    def test_resume_upgrade(self):
+        msg = "Resumed upgrade to 17.2.6"
+        with patch_orch(True) as fake_client:
+            fake_client.upgrades.resume.return_value = msg
+            self._put('{}/resume'.format(self.URL_CLUSTER_UPGRADE))
+            self.assertStatus(200)
+            self.assertJsonBody(msg)
+
+    def test_stop_upgrade(self):
+        msg = "Stopped upgrade to 17.2.6"
+        with patch_orch(True) as fake_client:
+            fake_client.upgrades.stop.return_value = msg
+            self._put('{}/stop'.format(self.URL_CLUSTER_UPGRADE))
+            self.assertStatus(200)
+            self.assertJsonBody(msg)
index 2008c8630f51dc3eb44873b34aa3f01637bd8ab4..4ba23866d076a2fc961ea9a481e678f3d4854444 100644 (file)
@@ -39,3 +39,8 @@ class DaemonTest(ControllerTestCase):
                 'component': None
             })
             self.assertStatus(400)
+
+    def test_daemon_list(self):
+        with patch_orch(True):
+            self._get(f'{self.URL_DAEMON}')
+            self.assertStatus(200)
index a41d33e713c600d19c759de85fbef24532f05e4f..8a86d3b4ba522ca959b83a7bb1c5e62bfe709fcf 100644 (file)
@@ -47,30 +47,31 @@ class HostControllerTest(ControllerTestCase):
 
         def _get_hosts(sources=None):
             if sources == 'ceph':
-                return hosts[0]
+                return [hosts[0]]
             if sources == 'orchestrator':
                 return hosts[1:]
             if sources == 'ceph, orchestrator':
-                return hosts[2]
+                return [hosts[2]]
             return hosts
 
-        mock_get_hosts.side_effect = _get_hosts
-
-        self._get(self.URL_HOST, version=APIVersion(1, 1))
-        self.assertStatus(200)
-        self.assertJsonBody(hosts)
+        with patch_orch(True, hosts=hosts):
+            mock_get_hosts.side_effect = _get_hosts
+            self._get(self.URL_HOST, version=APIVersion(1, 1))
+            self.assertStatus(200)
+            self.assertJsonBody(hosts)
 
-        self._get('{}?sources=ceph'.format(self.URL_HOST), version=APIVersion(1, 1))
-        self.assertStatus(200)
-        self.assertJsonBody(hosts[0])
+            self._get('{}?sources=ceph'.format(self.URL_HOST), version=APIVersion(1, 1))
+            self.assertStatus(200)
+            self.assertJsonBody([hosts[0]])
 
-        self._get('{}?sources=orchestrator'.format(self.URL_HOST), version=APIVersion(1, 1))
-        self.assertStatus(200)
-        self.assertJsonBody(hosts[1:])
+            self._get('{}?sources=orchestrator'.format(self.URL_HOST), version=APIVersion(1, 1))
+            self.assertStatus(200)
+            self.assertJsonBody(hosts[1:])
 
-        self._get('{}?sources=ceph,orchestrator'.format(self.URL_HOST), version=APIVersion(1, 1))
-        self.assertStatus(200)
-        self.assertJsonBody(hosts)
+            self._get('{}?sources=ceph,orchestrator'.format(self.URL_HOST),
+                      version=APIVersion(1, 1))
+            self.assertStatus(200)
+            self.assertJsonBody(hosts)
 
     @mock.patch('dashboard.controllers.host.get_hosts')
     def test_host_list_with_facts(self, mock_get_hosts):
@@ -105,7 +106,9 @@ class HostControllerTest(ControllerTestCase):
                 'orchestrator': False
             },
             'cpu_count': 1,
-            'memory_total_kb': 1024
+            'memory_total_kb': 1024,
+            'services': [],
+            'service_instances': [{'type': 'mon', 'count': 1}]
         }, {
             'hostname': 'host-1',
             'sources': {
@@ -113,31 +116,38 @@ class HostControllerTest(ControllerTestCase):
                 'orchestrator': True
             },
             'cpu_count': 2,
-            'memory_total_kb': 1024
+            'memory_total_kb': 1024,
+            'services': [],
+            'service_instances': [{'type': 'mon', 'count': 1}]
         }]
         # test with orchestrator available
         with patch_orch(True, hosts=hosts_without_facts) as fake_client:
             mock_get_hosts.return_value = hosts_without_facts
-            fake_client.hosts.get_facts.return_value = hosts_facts
+
+            def get_facts_mock(hostname: str):
+                if hostname == 'host-0':
+                    return [hosts_facts[0]]
+                return [hosts_facts[1]]
+            fake_client.hosts.get_facts.side_effect = get_facts_mock
             # test with ?facts=true
-            self._get('{}?facts=true'.format(self.URL_HOST), version=APIVersion(1, 1))
+            self._get('{}?facts=true'.format(self.URL_HOST), version=APIVersion(1, 3))
             self.assertStatus(200)
             self.assertHeader('Content-Type',
-                              APIVersion(1, 2).to_mime_type())
+                              APIVersion(1, 3).to_mime_type())
             self.assertJsonBody(hosts_with_facts)
 
             # test with ?facts=false
-            self._get('{}?facts=false'.format(self.URL_HOST), version=APIVersion(1, 1))
+            self._get('{}?facts=false'.format(self.URL_HOST), version=APIVersion(1, 3))
             self.assertStatus(200)
             self.assertHeader('Content-Type',
-                              APIVersion(1, 2).to_mime_type())
+                              APIVersion(1, 3).to_mime_type())
             self.assertJsonBody(hosts_without_facts)
 
         # test with orchestrator available but orch backend!=cephadm
         with patch_orch(True, missing_features=['get_facts']) as fake_client:
             mock_get_hosts.return_value = hosts_without_facts
             # test with ?facts=true
-            self._get('{}?facts=true'.format(self.URL_HOST), version=APIVersion(1, 1))
+            self._get('{}?facts=true'.format(self.URL_HOST), version=APIVersion(1, 3))
             self.assertStatus(400)
 
         # test with no orchestrator available
@@ -145,14 +155,14 @@ class HostControllerTest(ControllerTestCase):
             mock_get_hosts.return_value = hosts_without_facts
 
             # test with ?facts=true
-            self._get('{}?facts=true'.format(self.URL_HOST), version=APIVersion(1, 1))
+            self._get('{}?facts=true'.format(self.URL_HOST), version=APIVersion(1, 3))
             self.assertStatus(400)
 
             # test with ?facts=false
-            self._get('{}?facts=false'.format(self.URL_HOST), version=APIVersion(1, 1))
+            self._get('{}?facts=false'.format(self.URL_HOST), version=APIVersion(1, 3))
             self.assertStatus(200)
             self.assertHeader('Content-Type',
-                              APIVersion(1, 2).to_mime_type())
+                              APIVersion(1, 3).to_mime_type())
             self.assertJsonBody(hosts_without_facts)
 
     def test_get_1(self):
@@ -472,21 +482,14 @@ class TestHosts(unittest.TestCase):
 
         with patch_orch(True, hosts=orch_hosts):
             hosts = get_hosts()
-            self.assertEqual(len(hosts), 3)
+            self.assertEqual(len(hosts), 2)
             checks = {
-                'localhost': {
-                    'sources': {
-                        'ceph': True,
-                        'orchestrator': False
-                    },
-                    'labels': []
-                },
                 'node1': {
                     'sources': {
-                        'ceph': True,
+                        'ceph': False,
                         'orchestrator': True
                     },
-                    'labels': ['bar', 'foo']
+                    'labels': ['foo', 'bar']
                 },
                 'node2': {
                     'sources': {
index 21c4a0b10e9ce4ebec709a8d185895d0e5c82118..10aa8669ec0ee84dd7bb0eae0b61a9d3828d51c9 100644 (file)
@@ -26,28 +26,53 @@ class PrometheusControllerTest(ControllerTestCase):
         mgr.get_module_option.side_effect = settings.get
         cls.setup_controllers([Prometheus, PrometheusNotifications, PrometheusReceiver])
 
-    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c: False)
-    def test_rules(self):
-        with patch('requests.request') as mock_request:
-            self._get('/api/prometheus/rules')
-            mock_request.assert_called_with('GET', self.prometheus_host_api + '/rules',
-                                            json=None, params={}, verify=True, auth=None)
-
-    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c: False)
+    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", return_value='cephadm')
+    @patch("dashboard.controllers.prometheus.mgr.mon_command", return_value=(1, {}, None))
+    @patch('requests.request')
+    def test_rules_cephadm(self, mock_request, mock_mon_command, mock_get_module_option_ex):
+        # in this test we use:
+        # in the first call to get_module_option_ex we return 'cephadm' as backend
+        # in the second call we return 'True' for 'secure_monitoring_stack' option
+        mock_get_module_option_ex.side_effect = lambda module, key, default=None: 'cephadm' \
+            if module == 'orchestrator' else True
+        self._get('/api/prometheus/rules')
+        mock_request.assert_called_with('GET',
+                                        self.prometheus_host_api + '/rules',
+                                        json=None, params={},
+                                        verify=True, auth=None)
+        assert mock_mon_command.called
+
+    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", return_value='cephadm')
+    @patch("dashboard.controllers.prometheus.mgr.mon_command", return_value=(1, {}, None))
+    @patch('requests.request')
+    def test_rules_rook(self, mock_request, mock_mon_command, mock_get_module_option_ex):
+        # in this test we use:
+        # in the first call to get_module_option_ex we return 'rook' as backend
+        mock_get_module_option_ex.side_effect = lambda module, key, default=None: 'rook' \
+            if module == 'orchestrator' else None
+        self._get('/api/prometheus/rules')
+        mock_request.assert_called_with('GET',
+                                        self.prometheus_host_api + '/rules',
+                                        json=None,
+                                        params={},
+                                        verify=True, auth=None)
+        assert not mock_mon_command.called
+
+    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c=None: None)
     def test_list(self):
         with patch('requests.request') as mock_request:
             self._get('/api/prometheus')
             mock_request.assert_called_with('GET', self.alert_host_api + '/alerts',
                                             json=None, params={}, verify=True, auth=None)
 
-    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c: False)
+    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c=None: None)
     def test_get_silences(self):
         with patch('requests.request') as mock_request:
             self._get('/api/prometheus/silences')
             mock_request.assert_called_with('GET', self.alert_host_api + '/silences',
                                             json=None, params={}, verify=True, auth=None)
 
-    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c: False)
+    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c=None: None)
     def test_add_silence(self):
         with patch('requests.request') as mock_request:
             self._post('/api/prometheus/silence', {'id': 'new-silence'})
@@ -55,7 +80,7 @@ class PrometheusControllerTest(ControllerTestCase):
                                             params=None, json={'id': 'new-silence'},
                                             verify=True, auth=None)
 
-    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c: False)
+    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c=None: None)
     def test_update_silence(self):
         with patch('requests.request') as mock_request:
             self._post('/api/prometheus/silence', {'id': 'update-silence'})
@@ -63,7 +88,7 @@ class PrometheusControllerTest(ControllerTestCase):
                                             params=None, json={'id': 'update-silence'},
                                             verify=True, auth=None)
 
-    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c: False)
+    @patch("dashboard.controllers.prometheus.mgr.get_module_option_ex", lambda a, b, c=None: None)
     def test_expire_silence(self):
         with patch('requests.request') as mock_request:
             self._delete('/api/prometheus/silence/0')
index 5c543cd817ad20c8a37396e7490a4d7af731aabe..bfb1dbc70355a0e4b765a7cd81e4317cbf6fabcc 100644 (file)
@@ -19,7 +19,9 @@ class RgwControllerTestCase(ControllerTestCase):
     @patch.object(RgwClient, '_get_user_id', Mock(return_value='fake-user'))
     @patch.object(RgwClient, 'is_service_online', Mock(return_value=True))
     @patch.object(RgwClient, '_is_system_user', Mock(return_value=True))
-    def test_status_available(self):
+    @patch('dashboard.services.ceph_service.CephService.send_command')
+    def test_status_available(self, send_command):
+        send_command.return_value = ''
         self._get('/test/ui-api/rgw/status')
         self.assertStatus(200)
         self.assertJsonBody({'available': True, 'message': None})
@@ -27,7 +29,9 @@ class RgwControllerTestCase(ControllerTestCase):
     @patch.object(RgwClient, '_get_user_id', Mock(return_value='fake-user'))
     @patch.object(RgwClient, 'is_service_online', Mock(
         side_effect=RequestException('My test error')))
-    def test_status_online_check_error(self):
+    @patch('dashboard.services.ceph_service.CephService.send_command')
+    def test_status_online_check_error(self, send_command):
+        send_command.return_value = ''
         self._get('/test/ui-api/rgw/status')
         self.assertStatus(200)
         self.assertJsonBody({'available': False,
@@ -35,7 +39,9 @@ class RgwControllerTestCase(ControllerTestCase):
 
     @patch.object(RgwClient, '_get_user_id', Mock(return_value='fake-user'))
     @patch.object(RgwClient, 'is_service_online', Mock(return_value=False))
-    def test_status_not_online(self):
+    @patch('dashboard.services.ceph_service.CephService.send_command')
+    def test_status_not_online(self, send_command):
+        send_command.return_value = ''
         self._get('/test/ui-api/rgw/status')
         self.assertStatus(200)
         self.assertJsonBody({'available': False,
@@ -44,7 +50,9 @@ class RgwControllerTestCase(ControllerTestCase):
     @patch.object(RgwClient, '_get_user_id', Mock(return_value='fake-user'))
     @patch.object(RgwClient, 'is_service_online', Mock(return_value=True))
     @patch.object(RgwClient, '_is_system_user', Mock(return_value=False))
-    def test_status_not_system_user(self):
+    @patch('dashboard.services.ceph_service.CephService.send_command')
+    def test_status_not_system_user(self, send_command):
+        send_command.return_value = ''
         self._get('/test/ui-api/rgw/status')
         self.assertStatus(200)
         self.assertJsonBody({'available': False,
@@ -64,7 +72,9 @@ class RgwDaemonControllerTestCase(ControllerTestCase):
 
     @patch('dashboard.services.rgw_client.RgwClient._get_user_id', Mock(
         return_value='dummy_admin'))
-    def test_list(self):
+    @patch('dashboard.services.ceph_service.CephService.send_command')
+    def test_list(self, send_command):
+        send_command.return_value = ''
         RgwStub.get_daemons()
         RgwStub.get_settings()
         mgr.list_servers.return_value = [{
@@ -86,7 +96,7 @@ class RgwDaemonControllerTestCase(ControllerTestCase):
                 'realm_name': 'realm2',
                 'zonegroup_name': 'zg2',
                 'zone_name': 'zone2',
-                'frontend_config#0': 'beast port=80'
+                'frontend_config#0': 'beast port=80 ssl_port=443 ssl_certificate=config:/config'
             }]
         self._get('/test/api/rgw/daemon')
         self.assertStatus(200)
@@ -159,7 +169,9 @@ class RgwUserControllerTestCase(ControllerTestCase):
         self.assertJsonBody(['test1', 'test2', 'test3', 'admin'])
 
     @patch('dashboard.controllers.rgw.RgwRESTController.proxy')
-    def test_user_list_duplicate_marker(self, mock_proxy):
+    @patch('dashboard.services.ceph_service.CephService.send_command')
+    def test_user_list_duplicate_marker(self, mock_proxy, send_command):
+        send_command.return_value = ''
         mock_proxy.side_effect = [{
             'count': 3,
             'keys': ['test1', 'test2', 'test3'],
index d23bdec2ca5133927dee6432cd3205a7b802bf50..4949ba36bf211cd54a4284482001cc6d66fa6b72 100644 (file)
@@ -14,6 +14,8 @@ from ..tests import CLICommandTestMixin, RgwStub
 
 @patch('dashboard.services.rgw_client.RgwClient._get_user_id', Mock(
     return_value='dummy_admin'))
+@patch('dashboard.services.ceph_service.CephService.send_command', Mock(
+    return_value=''))
 class RgwClientTest(TestCase, CLICommandTestMixin):
     _dashboard_user_realm1_access_key = 'VUOFXZFK24H81ISTVBTR'
     _dashboard_user_realm1_secret_key = '0PGsCvXPGWS3AGgibUZEcd9efLrbbshlUkY3jruR'
index 04986bb17b1bbf446ffe47b339a7ad90c5e52f3b..07768db756565a1341ac75ef8e0a624c463807db 100644 (file)
@@ -4,7 +4,7 @@ Device health monitoring
 
 import errno
 import json
-from mgr_module import MgrModule, CommandResult, CLIRequiresDB, CLICommand, CLIReadCommand, Option
+from mgr_module import MgrModule, CommandResult, MgrModuleRecoverDB, CLIRequiresDB, CLICommand, CLIReadCommand, Option, MgrDBNotReady
 import operator
 import rados
 import re
@@ -182,6 +182,7 @@ CREATE TABLE DeviceHealthMetrics (
 
     @CLIRequiresDB
     @CLIReadCommand('device scrape-daemon-health-metrics')
+    @MgrModuleRecoverDB
     def do_scrape_daemon_health_metrics(self, who: str) -> Tuple[int, str, str]:
         '''
         Scrape and store device health metrics for a given daemon
@@ -193,6 +194,7 @@ CREATE TABLE DeviceHealthMetrics (
 
     @CLIRequiresDB
     @CLIReadCommand('device scrape-health-metrics')
+    @MgrModuleRecoverDB
     def do_scrape_health_metrics(self, devid: Optional[str] = None) -> Tuple[int, str, str]:
         '''
         Scrape and store device health metrics
@@ -204,6 +206,7 @@ CREATE TABLE DeviceHealthMetrics (
 
     @CLIRequiresDB
     @CLIReadCommand('device get-health-metrics')
+    @MgrModuleRecoverDB
     def do_get_health_metrics(self, devid: str, sample: Optional[str] = None) -> Tuple[int, str, str]:
         '''
         Show stored device metrics for the device
@@ -212,6 +215,7 @@ CREATE TABLE DeviceHealthMetrics (
 
     @CLIRequiresDB
     @CLICommand('device check-health')
+    @MgrModuleRecoverDB
     def do_check_health(self) -> Tuple[int, str, str]:
         '''
         Check life expectancy of devices
@@ -238,6 +242,7 @@ CREATE TABLE DeviceHealthMetrics (
 
     @CLIRequiresDB
     @CLIReadCommand('device predict-life-expectancy')
+    @MgrModuleRecoverDB
     def do_predict_life_expectancy(self, devid: str) -> Tuple[int, str, str]:
         '''
         Predict life expectancy with local predictor
@@ -328,13 +333,20 @@ CREATE TABLE DeviceHealthMetrics (
         self.log.debug(f"finished reading legacy pool, complete = {done}")
         return done
 
-    def serve(self) -> None:
-        self.log.info("Starting")
-        self.config_notify()
-
+    @MgrModuleRecoverDB
+    def _do_serve(self) -> None:
         last_scrape = None
         finished_loading_legacy = False
+
         while self.run:
+            # sleep first, in case of exceptions causing retry:
+            sleep_interval = self.sleep_interval or 60
+            if not finished_loading_legacy:
+                sleep_interval = 2
+            self.log.debug('Sleeping for %d seconds', sleep_interval)
+            self.event.wait(sleep_interval)
+            self.event.clear()
+
             if self.db_ready() and self.enable_monitoring:
                 self.log.debug('Running')
 
@@ -375,13 +387,11 @@ CREATE TABLE DeviceHealthMetrics (
                     last_scrape = now
                     self.set_kv('last_scrape', last_scrape.strftime(TIME_FORMAT))
 
-            # sleep
-            sleep_interval = self.sleep_interval or 60
-            if not finished_loading_legacy:
-                sleep_interval = 2
-            self.log.debug('Sleeping for %d seconds', sleep_interval)
-            self.event.wait(sleep_interval)
-            self.event.clear()
+    def serve(self) -> None:
+        self.log.info("Starting")
+        self.config_notify()
+
+        self._do_serve()
 
     def shutdown(self) -> None:
         self.log.info('Stopping')
@@ -761,7 +771,10 @@ CREATE TABLE DeviceHealthMetrics (
             return -1, '', 'unable to invoke diskprediction local or remote plugin'
 
     def get_recent_device_metrics(self, devid: str, min_sample: str) -> Dict[str, Dict[str, Any]]:
-        return self._get_device_metrics(devid, min_sample=min_sample)
+        try:
+            return self._get_device_metrics(devid, min_sample=min_sample)
+        except MgrDBNotReady:
+            return dict()
 
     def get_time_format(self) -> str:
         return TIME_FORMAT
index f88261b20b14badd070562b6ee91700fee223eb1..6818783b341a8bc7d8533dc9f6ca662ce1365b54 100644 (file)
@@ -253,7 +253,7 @@ class Module(MgrModule):
                 }
 
     def get_daemon_stats(self, now: str) -> Iterator[Dict[str, Any]]:
-        for daemon, counters in self.get_all_perf_counters().items():
+        for daemon, counters in self.get_unlabeled_perf_counters().items():
             svc_type, svc_id = daemon.split(".", 1)
             metadata = self.get_metadata(svc_type, svc_id)
             if metadata is not None:
index 2fabbae87c52ea60a926d5e248e3e23a2d89ddf0..5a7b9bfc6f6c8671be6cb72252296e5a844d7f9c 100644 (file)
@@ -512,6 +512,28 @@ def CLICheckNonemptyFileInput(desc: str) -> Callable[[HandlerFuncType], HandlerF
         return check
     return CheckFileInput
 
+# If the mgr loses its lock on the database because e.g. the pgs were
+# transiently down, then close it and allow it to be reopened.
+MAX_DBCLEANUP_RETRIES = 3
+def MgrModuleRecoverDB(func: Callable) -> Callable:
+    @functools.wraps(func)
+    def check(self: MgrModule, *args: Any, **kwargs: Any) -> Any:
+        retries = 0
+        while True:
+            try:
+                return func(self, *args, **kwargs)
+            except sqlite3.DatabaseError as e:
+                self.log.error(f"Caught fatal database error: {e}")
+                retries = retries+1
+                if retries > MAX_DBCLEANUP_RETRIES:
+                    raise
+                self.log.debug(f"attempting reopen of database")
+                self.close_db()
+                self.open_db();
+                # allow retry of func(...)
+    check.__signature__ = inspect.signature(func)  # type: ignore[attr-defined]
+    return check
+
 def CLIRequiresDB(func: HandlerFuncType) -> HandlerFuncType:
     @functools.wraps(func)
     def check(self: MgrModule, *args: Any, **kwargs: Any) -> Tuple[int, str, str]:
@@ -1182,7 +1204,7 @@ class MgrModule(ceph_module.BaseMgrModule, MgrModuleLoggingMixin):
         if version <= 0:
             self.log.info(f"creating main.db for {self.module_name}")
             assert self.SCHEMA is not None
-            cur = db.executescript(self.SCHEMA)
+            db.executescript(self.SCHEMA)
             self.update_schema_version(db, 1)
         else:
             assert self.SCHEMA_VERSIONED is not None
@@ -1218,6 +1240,12 @@ class MgrModule(ceph_module.BaseMgrModule, MgrModuleLoggingMixin):
         db.row_factory = sqlite3.Row
         self.load_schema(db)
 
+    def close_db(self) -> None:
+        with self._db_lock:
+            if self._db is not None:
+                self._db.close()
+                self._db = None
+
     def open_db(self) -> Optional[sqlite3.Connection]:
         if not self.pool_exists(self.MGR_POOL_NAME):
             if not self.have_enough_osds():
@@ -1226,6 +1254,13 @@ class MgrModule(ceph_module.BaseMgrModule, MgrModuleLoggingMixin):
         uri = f"file:///{self.MGR_POOL_NAME}:{self.module_name}/main.db?vfs=ceph";
         self.log.debug(f"using uri {uri}")
         db = sqlite3.connect(uri, check_same_thread=False, uri=True)
+        # if libcephsqlite reconnects, update the addrv for blocklist
+        with db:
+            cur = db.execute('SELECT json_extract(ceph_status(), "$.addr");')
+            (addrv,) = cur.fetchone()
+            assert addrv is not None
+            self.log.debug(f"new libcephsqlite addrv = {addrv}")
+            self._ceph_register_client("libcephsqlite", addrv, True)
         self.configure_db(db)
         return db
 
@@ -1341,7 +1376,7 @@ class MgrModule(ceph_module.BaseMgrModule, MgrModuleLoggingMixin):
         if self._rados:
             addrs = self._rados.get_addrs()
             self._rados.shutdown()
-            self._ceph_unregister_client(addrs)
+            self._ceph_unregister_client(None, addrs)
             self._rados = None
 
     @API.expose
@@ -2022,7 +2057,7 @@ class MgrModule(ceph_module.BaseMgrModule, MgrModuleLoggingMixin):
 
     @API.expose
     @profile_method()
-    def get_all_perf_counters(self, prio_limit: int = PRIO_USEFUL,
+    def get_unlabeled_perf_counters(self, prio_limit: int = PRIO_USEFUL,
                               services: Sequence[str] = ("mds", "mon", "osd",
                                                          "rbd-mirror", "rgw",
                                                          "tcmu-runner")) -> Dict[str, dict]:
@@ -2148,7 +2183,7 @@ class MgrModule(ceph_module.BaseMgrModule, MgrModuleLoggingMixin):
         ctx_capsule = self.get_context()
         self._rados = rados.Rados(context=ctx_capsule)
         self._rados.connect()
-        self._ceph_register_client(self._rados.get_addrs())
+        self._ceph_register_client(None, self._rados.get_addrs(), False)
         return self._rados
 
     @staticmethod
index 0e7c8cb2fb58b3bbb62c106642e941ad6a115c39..8684f8013184e18f548254d873f4b8d77625cecf 100644 (file)
@@ -167,7 +167,7 @@ class CephfsConnectionPool(object):
             logger.debug("CephFS mounting...")
             self.fs.mount(filesystem_name=self.fs_name.encode('utf-8'))
             logger.debug("Connection to cephfs '{0}' complete".format(self.fs_name))
-            self.mgr._ceph_register_client(self.fs.get_addrs())
+            self.mgr._ceph_register_client(None, self.fs.get_addrs(), False)
 
         def disconnect(self) -> None:
             try:
@@ -176,7 +176,7 @@ class CephfsConnectionPool(object):
                 logger.info("disconnecting from cephfs '{0}'".format(self.fs_name))
                 addrs = self.fs.get_addrs()
                 self.fs.shutdown()
-                self.mgr._ceph_unregister_client(addrs)
+                self.mgr._ceph_unregister_client(None, addrs)
                 self.fs = None
             except Exception as e:
                 logger.debug("disconnect: ({0})".format(e))
index 3bd36ff3e9958f5f879dd03ef6b8cfdc8adf69c3..d558a3a37a1f329fc3674221974db7b8606517d9 100644 (file)
@@ -73,25 +73,42 @@ class NFSCluster:
             # run NFS on non-standard port
             if not ingress_mode:
                 ingress_mode = IngressType.default
+            ingress_mode = ingress_mode.canonicalize()
             pspec = PlacementSpec.from_string(placement)
             if ingress_mode == IngressType.keepalive_only:
                 # enforce count=1 for nfs over keepalive only
                 pspec.count = 1
+
+            ganesha_port = 10000 + port  # semi-arbitrary, fix me someday
+            frontend_port: Optional[int] = port
+            virtual_ip_for_ganesha: Optional[str] = None
+            keepalive_only: bool = False
+            enable_haproxy_protocol: bool = False
+            if ingress_mode == IngressType.haproxy_protocol:
+                enable_haproxy_protocol = True
+            elif ingress_mode == IngressType.keepalive_only:
+                keepalive_only = True
+                virtual_ip_for_ganesha = virtual_ip.split('/')[0]
+                ganesha_port = port
+                frontend_port = None
+
             spec = NFSServiceSpec(service_type='nfs', service_id=cluster_id,
                                   placement=pspec,
                                   # use non-default port so we don't conflict with ingress
-                                  port=10000 + port if ingress_mode != IngressType.keepalive_only else port,  # semi-arbitrary, fix me someday
-                                  virtual_ip=virtual_ip.split('/')[0] if ingress_mode == IngressType.keepalive_only else None)
+                                  port=ganesha_port,
+                                  virtual_ip=virtual_ip_for_ganesha,
+                                  enable_haproxy_protocol=enable_haproxy_protocol)
             completion = self.mgr.apply_nfs(spec)
             orchestrator.raise_if_exception(completion)
             ispec = IngressSpec(service_type='ingress',
                                 service_id='nfs.' + cluster_id,
                                 backend_service='nfs.' + cluster_id,
                                 placement=pspec,
-                                frontend_port=port if ingress_mode != IngressType.keepalive_only else None,
+                                frontend_port=frontend_port,
                                 monitor_port=7000 + port,   # semi-arbitrary, fix me someday
                                 virtual_ip=virtual_ip,
-                                keepalive_only=(ingress_mode == IngressType.keepalive_only))
+                                keepalive_only=keepalive_only,
+                                enable_haproxy_protocol=enable_haproxy_protocol)
             completion = self.mgr.apply_ingress(ispec)
             orchestrator.raise_if_exception(completion)
         else:
index 733e1cdcb5fac499a5912571cc6f22d400ac991f..e9a6c3f07cb2f0f233f247ba5020b770d894ea60 100644 (file)
@@ -30,8 +30,20 @@ except ImportError:
 import yaml
 
 from ceph.deployment import inventory
-from ceph.deployment.service_spec import ServiceSpec, NFSServiceSpec, RGWSpec, \
-    IscsiServiceSpec, IngressSpec, SNMPGatewaySpec, MDSSpec, TunedProfileSpec
+from ceph.deployment.service_spec import (
+    ArgumentList,
+    ArgumentSpec,
+    GeneralArgList,
+    IngressSpec,
+    IscsiServiceSpec,
+    MDSSpec,
+    NFSServiceSpec,
+    RGWSpec,
+    SNMPGatewaySpec,
+    ServiceSpec,
+    TunedProfileSpec,
+    NvmeofServiceSpec
+)
 from ceph.deployment.drive_group import DriveGroupSpec
 from ceph.deployment.hostspec import HostSpec, SpecValidationError
 from ceph.utils import datetime_to_str, str_to_datetime
@@ -355,7 +367,7 @@ class Orchestrator(object):
         """
         raise NotImplementedError()
 
-    def drain_host(self, hostname: str, force: bool = False) -> OrchResult[str]:
+    def drain_host(self, hostname: str, force: bool = False, keep_conf_keyring: bool = False, zap_osd_devices: bool = False) -> OrchResult[str]:
         """
         drain all daemons from a host
 
@@ -478,6 +490,7 @@ class Orchestrator(object):
             'crash': self.apply_crash,
             'grafana': self.apply_grafana,
             'iscsi': self.apply_iscsi,
+            'nvmeof': self.apply_nvmeof,
             'mds': self.apply_mds,
             'mgr': self.apply_mgr,
             'mon': self.apply_mon,
@@ -666,6 +679,10 @@ class Orchestrator(object):
         """Update iscsi cluster"""
         raise NotImplementedError()
 
+    def apply_nvmeof(self, spec: NvmeofServiceSpec) -> OrchResult[str]:
+        """Update nvmeof cluster"""
+        raise NotImplementedError()
+
     def apply_prometheus(self, spec: ServiceSpec) -> OrchResult[str]:
         """Update prometheus cluster"""
         raise NotImplementedError()
@@ -674,6 +691,14 @@ class Orchestrator(object):
         """get prometheus access information"""
         raise NotImplementedError()
 
+    def set_alertmanager_access_info(self, user: str, password: str) -> OrchResult[str]:
+        """set alertmanager access information"""
+        raise NotImplementedError()
+
+    def set_prometheus_access_info(self, user: str, password: str) -> OrchResult[str]:
+        """set prometheus access information"""
+        raise NotImplementedError()
+
     def get_alertmanager_access_info(self) -> OrchResult[Dict[str, str]]:
         """get alertmanager access information"""
         raise NotImplementedError()
@@ -788,6 +813,7 @@ def daemon_type_to_service(dtype: str) -> str:
         'haproxy': 'ingress',
         'keepalived': 'ingress',
         'iscsi': 'iscsi',
+        'nvmeof': 'nvmeof',
         'rbd-mirror': 'rbd-mirror',
         'cephfs-mirror': 'cephfs-mirror',
         'nfs': 'nfs',
@@ -820,6 +846,7 @@ def service_to_daemon_types(stype: str) -> List[str]:
         'osd': ['osd'],
         'ingress': ['haproxy', 'keepalived'],
         'iscsi': ['iscsi'],
+        'nvmeof': ['nvmeof'],
         'rbd-mirror': ['rbd-mirror'],
         'cephfs-mirror': ['cephfs-mirror'],
         'nfs': ['nfs'],
@@ -858,6 +885,17 @@ class UpgradeStatusSpec(object):
         self.message = ""  # Freeform description
         self.is_paused: bool = False  # Is the upgrade paused?
 
+    def to_json(self) -> dict:
+        return {
+            'in_progress': self.in_progress,
+            'target_image': self.target_image,
+            'which': self.which,
+            'services_complete': self.services_complete,
+            'progress': self.progress,
+            'message': self.message,
+            'is_paused': self.is_paused,
+        }
+
 
 def handle_type_error(method: FuncT) -> FuncT:
     @wraps(method)
@@ -932,8 +970,8 @@ class DaemonDescription(object):
                  deployed_by: Optional[List[str]] = None,
                  rank: Optional[int] = None,
                  rank_generation: Optional[int] = None,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  ) -> None:
 
         #: Host is at the same granularity as InventoryHost
@@ -998,8 +1036,14 @@ class DaemonDescription(object):
 
         self.is_active = is_active
 
-        self.extra_container_args = extra_container_args
-        self.extra_entrypoint_args = extra_entrypoint_args
+        self.extra_container_args: Optional[ArgumentList] = None
+        self.extra_entrypoint_args: Optional[ArgumentList] = None
+        if extra_container_args:
+            self.extra_container_args = ArgumentSpec.from_general_args(
+                extra_container_args)
+        if extra_entrypoint_args:
+            self.extra_entrypoint_args = ArgumentSpec.from_general_args(
+                extra_entrypoint_args)
 
     @property
     def status(self) -> Optional[DaemonDescriptionStatus]:
index 7d8703bde7b4f565b58d2093790e46845da115d8..de4777e0defa48ff63b34f044054a41989e736e1 100644 (file)
@@ -1,7 +1,7 @@
 import enum
 import errno
 import json
-from typing import List, Set, Optional, Iterator, cast, Dict, Any, Union, Sequence, Mapping
+from typing import List, Set, Optional, Iterator, cast, Dict, Any, Union, Sequence, Mapping, Tuple
 import re
 import datetime
 import math
@@ -19,6 +19,7 @@ from ceph.deployment.inventory import Device  # noqa: F401; pylint: disable=unus
 from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection, OSDMethod
 from ceph.deployment.service_spec import PlacementSpec, ServiceSpec, service_spec_allow_invalid_from_json, TracingSpec
 from ceph.deployment.hostspec import SpecValidationError
+from ceph.deployment.utils import unwrap_ipv6
 from ceph.utils import datetime_now
 
 from mgr_util import to_pretty_timedelta, format_bytes
@@ -30,7 +31,8 @@ from ._interface import OrchestratorClientMixin, DeviceLightLoc, _cli_read_comma
     NoOrchestrator, OrchestratorValidationError, NFSServiceSpec, \
     RGWSpec, InventoryFilter, InventoryHost, HostSpec, CLICommandMeta, \
     ServiceDescription, DaemonDescription, IscsiServiceSpec, json_to_generic_spec, \
-    GenericSpec, DaemonDescriptionStatus, SNMPGatewaySpec, MDSSpec, TunedProfileSpec
+    GenericSpec, DaemonDescriptionStatus, SNMPGatewaySpec, MDSSpec, TunedProfileSpec, \
+    NvmeofServiceSpec
 
 
 def nice_delta(now: datetime.datetime, t: Optional[datetime.datetime], suffix: str = '') -> str:
@@ -46,6 +48,10 @@ def nice_bytes(v: Optional[int]) -> str:
     return format_bytes(v, 5)
 
 
+class ArgumentError(Exception):
+    pass
+
+
 class HostDetails:
     def __init__(self,
                  host: Optional[HostSpec] = None,
@@ -129,6 +135,19 @@ class HostDetails:
 yaml.add_representer(HostDetails, HostDetails.yaml_representer)
 
 
+class DaemonFields(enum.Enum):
+    service_name = 'service_name'
+    daemon_type = 'daemon_type'
+    name = 'name'
+    host = 'host'
+    status = 'status'
+    refreshed = 'refreshed'
+    age = 'age'
+    mem_use = 'mem_use'
+    mem_lim = 'mem_lim'
+    image = 'image'
+
+
 class ServiceType(enum.Enum):
     mon = 'mon'
     mgr = 'mgr'
@@ -146,6 +165,7 @@ class ServiceType(enum.Enum):
     rgw = 'rgw'
     nfs = 'nfs'
     iscsi = 'iscsi'
+    nvmeof = 'nvmeof'
     snmp_gateway = 'snmp-gateway'
     elasticsearch = 'elasticsearch'
     jaeger_agent = 'jaeger-agent'
@@ -173,6 +193,13 @@ class DaemonAction(enum.Enum):
 class IngressType(enum.Enum):
     default = 'default'
     keepalive_only = 'keepalive-only'
+    haproxy_standard = 'haproxy-standard'
+    haproxy_protocol = 'haproxy-protocol'
+
+    def canonicalize(self) -> "IngressType":
+        if self == self.default:
+            return IngressType(self.haproxy_standard)
+        return IngressType(self)
 
 
 def to_format(what: Any, format: Format, many: bool, cls: Any) -> Any:
@@ -453,6 +480,9 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule,
         if labels and len(labels) == 1:
             labels = labels[0].split(',')
 
+        if addr is not None:
+            addr = unwrap_ipv6(addr)
+
         s = HostSpec(hostname=hostname, addr=addr, labels=labels, status=_status)
 
         return self._apply_misc([s], False, Format.plain)
@@ -465,9 +495,9 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule,
         return HandleCommandResult(stdout=completion.result_str())
 
     @_cli_write_command('orch host drain')
-    def _drain_host(self, hostname: str, force: bool = False) -> HandleCommandResult:
+    def _drain_host(self, hostname: str, force: bool = False, keep_conf_keyring: bool = False, zap_osd_devices: bool = False) -> HandleCommandResult:
         """drain all daemons from a host"""
-        completion = self.drain_host(hostname, force)
+        completion = self.drain_host(hostname, force, keep_conf_keyring, zap_osd_devices)
         raise_if_exception(completion)
         return HandleCommandResult(stdout=completion.result_str())
 
@@ -801,6 +831,7 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule,
                       service_name: Optional[str] = None,
                       daemon_type: Optional[str] = None,
                       daemon_id: Optional[str] = None,
+                      sort_by: Optional[DaemonFields] = DaemonFields.name,
                       format: Format = Format.plain,
                       refresh: bool = False) -> HandleCommandResult:
         """
@@ -816,6 +847,31 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule,
 
         def ukn(s: Optional[str]) -> str:
             return '<unknown>' if s is None else s
+
+        def sort_by_field(d: DaemonDescription) -> Any:
+            if sort_by == DaemonFields.name:
+                return d.name()
+            elif sort_by == DaemonFields.host:
+                return d.hostname
+            elif sort_by == DaemonFields.status:
+                return d.status.name if d.status else None
+            elif sort_by == DaemonFields.refreshed:
+                return d.last_refresh
+            elif sort_by == DaemonFields.age:
+                return d.created
+            elif sort_by == DaemonFields.mem_use:
+                return d.memory_usage
+            elif sort_by == DaemonFields.mem_lim:
+                return d.memory_request
+            elif sort_by == DaemonFields.image:
+                return d.container_image_id
+            elif sort_by == DaemonFields.daemon_type:
+                return d.daemon_type
+            elif sort_by == DaemonFields.service_name:
+                return d.service_name()
+            else:
+                return None
+
         # Sort the list for display
         daemons.sort(key=lambda s: (ukn(s.daemon_type), ukn(s.hostname), ukn(s.daemon_id)))
 
@@ -839,7 +895,7 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule,
             table._align['MEM LIM'] = 'r'
             table.left_padding_width = 0
             table.right_padding_width = 2
-            for s in natsorted(daemons, key=lambda d: d.name()):
+            for s in natsorted(daemons, key=lambda d: sort_by_field(d)):
                 if s.status_desc:
                     status = s.status_desc
                 else:
@@ -874,13 +930,57 @@ class OrchestratorCli(OrchestratorClientMixin, MgrModule,
 
             return HandleCommandResult(stdout=table.get_string())
 
-    @_cli_write_command('orch prometheus access info')
+    def _get_credentials(self, username: Optional[str] = None, password: Optional[str] = None, inbuf: Optional[str] = None) -> Tuple[str, str]:
+
+        _username = username
+        _password = password
+        if inbuf:
+            try:
+                credentials = json.loads(inbuf)
+                _username = credentials['username'].strip()
+                _password = credentials['password'].strip()
+            except (KeyError, json.JSONDecodeError):
+                raise ArgumentError("""
+                json provided for credentials did not include all necessary fields. Please setup json file as:
+
+                {
+                   "username": "USERNAME",
+                   "password": "PASSWORD"
+                }
+                """)
+
+        if not _username or not _password:
+            raise ArgumentError("Invalid arguments. Please provide arguments <username> <password> or -i <credentials_json_file>")
+
+        return _username, _password
+
+    @_cli_write_command('orch prometheus set-credentials')
+    def _set_prometheus_access_info(self, username: Optional[str] = None, password: Optional[str] = None, inbuf: Optional[str] = None) -> HandleCommandResult:
+        try:
+            username, password = self._get_credentials(username, password, inbuf)
+            completion = self.set_prometheus_access_info(username, password)
+            result = raise_if_exception(completion)
+            return HandleCommandResult(stdout=json.dumps(result))
+        except ArgumentError as e:
+            return HandleCommandResult(-errno.EINVAL, "", (str(e)))
+
+    @_cli_write_command('orch alertmanager set-credentials')
+    def _set_alertmanager_access_info(self, username: Optional[str] = None, password: Optional[str] = None, inbuf: Optional[str] = None) -> HandleCommandResult:
+        try:
+            username, password = self._get_credentials(username, password, inbuf)
+            completion = self.set_alertmanager_access_info(username, password)
+            result = raise_if_exception(completion)
+            return HandleCommandResult(stdout=json.dumps(result))
+        except ArgumentError as e:
+            return HandleCommandResult(-errno.EINVAL, "", (str(e)))
+
+    @_cli_write_command('orch prometheus get-credentials')
     def _get_prometheus_access_info(self) -> HandleCommandResult:
         completion = self.get_prometheus_access_info()
         access_info = raise_if_exception(completion)
         return HandleCommandResult(stdout=json.dumps(access_info))
 
-    @_cli_write_command('orch alertmanager access info')
+    @_cli_write_command('orch alertmanager get-credentials')
     def _get_alertmanager_access_info(self) -> HandleCommandResult:
         completion = self.get_alertmanager_access_info()
         access_info = raise_if_exception(completion)
@@ -1148,6 +1248,22 @@ Usage:
         )
         return self._daemon_add_misc(spec)
 
+    @_cli_write_command('orch daemon add nvmeof')
+    def _nvmeof_add(self,
+                    pool: str,
+                    placement: Optional[str] = None,
+                    inbuf: Optional[str] = None) -> HandleCommandResult:
+        """Start nvmeof daemon(s)"""
+        if inbuf:
+            raise OrchestratorValidationError('unrecognized command -i; -h or --help for usage')
+
+        spec = NvmeofServiceSpec(
+            service_id='nvmeof',
+            pool=pool,
+            placement=PlacementSpec.from_string(placement),
+        )
+        return self._daemon_add_misc(spec)
+
     @_cli_write_command('orch')
     def _service_action(self, action: ServiceAction, service_name: str) -> HandleCommandResult:
         """Start, stop, restart, redeploy, or reconfig an entire service (i.e. all daemons)"""
@@ -1296,6 +1412,7 @@ Usage:
                    realm: Optional[str] = None,
                    zonegroup: Optional[str] = None,
                    zone: Optional[str] = None,
+                   networks: Optional[List[str]] = None,
                    port: Optional[int] = None,
                    ssl: bool = False,
                    dry_run: bool = False,
@@ -1319,6 +1436,7 @@ Usage:
             rgw_realm=realm,
             rgw_zonegroup=zonegroup,
             rgw_zone=zone,
+            networks=networks,
             rgw_frontend_port=port,
             ssl=ssl,
             placement=PlacementSpec.from_string(placement),
@@ -1387,6 +1505,31 @@ Usage:
 
         return self._apply_misc([spec], dry_run, format, no_overwrite)
 
+    @_cli_write_command('orch apply nvmeof')
+    def _apply_nvmeof(self,
+                      pool: str,
+                      placement: Optional[str] = None,
+                      unmanaged: bool = False,
+                      dry_run: bool = False,
+                      format: Format = Format.plain,
+                      no_overwrite: bool = False,
+                      inbuf: Optional[str] = None) -> HandleCommandResult:
+        """Scale an nvmeof service"""
+        if inbuf:
+            raise OrchestratorValidationError('unrecognized command -i; -h or --help for usage')
+
+        spec = NvmeofServiceSpec(
+            service_id=pool,
+            pool=pool,
+            placement=PlacementSpec.from_string(placement),
+            unmanaged=unmanaged,
+            preview_only=dry_run
+        )
+
+        spec.validate()  # force any validation exceptions to be caught correctly
+
+        return self._apply_misc([spec], dry_run, format, no_overwrite)
+
     @_cli_write_command('orch apply snmp-gateway')
     def _apply_snmp_gateway(self,
                             snmp_version: SNMPGatewaySpec.SNMPVersion,
index b7a95fc7b97b64e146ccdfcf8ac652a500ed5743..ea7c4b00b4c68e4c5c6189bde7df7785dd83230f 100644 (file)
@@ -135,12 +135,6 @@ class PgAutoscaler(MgrModule):
                        '`PG_NUM` before being accepted. Cannot be less than 1.0'),
             default=3.0,
             min=1.0),
-        Option(
-            name='noautoscale',
-            type='bool',
-            desc='global autoscale flag',
-            long_desc=('Option to turn on/off the autoscaler for all pools'),
-            default=False),
     ]
 
     def __init__(self, *args: Any, **kwargs: Any) -> None:
@@ -155,7 +149,6 @@ class PgAutoscaler(MgrModule):
             self.sleep_interval = 60
             self.mon_target_pg_per_osd = 0
             self.threshold = 3.0
-            self.noautoscale = False
 
     def config_notify(self) -> None:
         for opt in self.NATIVE_OPTIONS:
@@ -238,7 +231,7 @@ class PgAutoscaler(MgrModule):
                     p['pg_num_target'],
 #                    p['pg_num_ideal'],
                     final,
-                    p['pg_autoscale_mode'],
+                    'off' if self.has_noautoscale_flag() else p['pg_autoscale_mode'],
                     str(p['bulk'])
                 ])
             return 0, table.get_string(), ''
@@ -260,16 +253,13 @@ class PgAutoscaler(MgrModule):
             self.remote('progress', 'complete', ev.ev_id)
             del self._event[pool_id]
 
-    def set_autoscale_mode_all_pools(self, status: str) -> None:
-        osdmap = self.get_osdmap()
-        pools = osdmap.get_pools_by_name()
-        for pool_name, _ in pools.items():
-            self.mon_command({
-                'prefix': 'osd pool set',
-                'pool': pool_name,
-                'var': 'pg_autoscale_mode',
-                'val': status
-            })
+    def has_noautoscale_flag(self) -> bool:
+        flags = self.get_osdmap().dump().get('flags', '')
+        if 'noautoscale' in flags:
+            return True
+        else:
+            return False
+
     @CLIWriteCommand("osd pool get noautoscale")
     def get_noautoscale(self) -> Tuple[int, str, str]:
         """
@@ -277,10 +267,7 @@ class PgAutoscaler(MgrModule):
         are setting the autoscaler on or off as well
         as newly created pools in the future.
         """
-
-        if self.noautoscale == None:
-            raise TypeError("noautoscale cannot be None")
-        elif self.noautoscale:
+        if self.has_noautoscale_flag():
             return 0, "", "noautoscale is on"
         else:
             return 0, "", "noautoscale is off"
@@ -289,21 +276,23 @@ class PgAutoscaler(MgrModule):
     def unset_noautoscale(self) -> Tuple[int, str, str]:
         """
         Unset the noautoscale flag so all pools will
-        have autoscale enabled (including newly created
-        pools in the future).
+        go back to its previous mode. Newly created
+        pools in the future will autoscaler on by default.
         """
-        if not self.noautoscale:
+        if not self.has_noautoscale_flag():
             return 0, "", "noautoscale is already unset!"
         else:
-            self.set_module_option("noautoscale", False)
             self.mon_command({
                 'prefix': 'config set',
                 'who': 'global',
                 'name': 'osd_pool_default_pg_autoscale_mode',
                 'value': 'on'
             })
-            self.set_autoscale_mode_all_pools("on")
-            return 0, "", "noautoscale is unset, all pools now have autoscale on"
+            self.mon_command({
+                'prefix': 'osd unset',
+                'key': 'noautoscale'
+            })
+            return 0, "", "noautoscale is unset, all pools now back to its previous mode"
 
     @CLIWriteCommand("osd pool set noautoscale")
     def set_noautoscale(self) -> Tuple[int, str, str]:
@@ -313,25 +302,30 @@ class PgAutoscaler(MgrModule):
         and complete all on-going progress events
         regarding PG-autoscaling.
         """
-        if self.noautoscale:
+        if self.has_noautoscale_flag():
             return 0, "", "noautoscale is already set!"
         else:
-            self.set_module_option("noautoscale", True)
             self.mon_command({
                 'prefix': 'config set',
                 'who': 'global',
                 'name': 'osd_pool_default_pg_autoscale_mode',
                 'value': 'off'
             })
-            self.set_autoscale_mode_all_pools("off")
+            self.mon_command({
+                'prefix': 'osd set',
+                'key': 'noautoscale'
+            })
             self.complete_all_progress_events()
             return 0, "", "noautoscale is set, all pools now have autoscale off"
 
     def serve(self) -> None:
         self.config_notify()
         while not self._shutdown.is_set():
-            self._maybe_adjust()
-            self._update_progress_events()
+            if not self.has_noautoscale_flag():
+                osdmap = self.get_osdmap()
+                pools = osdmap.get_pools_by_name()
+                self._maybe_adjust(osdmap, pools)
+                self._update_progress_events(osdmap, pools)
             self._shutdown.wait(timeout=self.sleep_interval)
 
     def shutdown(self) -> None:
@@ -340,6 +334,7 @@ class PgAutoscaler(MgrModule):
 
     def identify_subtrees_and_overlaps(self,
                                        osdmap: OSDMap,
+                                       pools: Dict[str, Dict[str, Any]],
                                        crush: CRUSHMap,
                                        result: Dict[int, CrushSubtreeResourceStatus],
                                        overlapped_roots: Set[int],
@@ -348,7 +343,7 @@ class PgAutoscaler(MgrModule):
               Set[int]]:
 
         # We identify subtrees and overlapping roots from osdmap
-        for pool_id, pool in osdmap.get_pools().items():
+        for pool_name, pool in pools.items():
             crush_rule = crush.get_rule_by_id(pool['crush_rule'])
             assert crush_rule is not None
             cr_name = crush_rule['rule_name']
@@ -365,7 +360,7 @@ class PgAutoscaler(MgrModule):
                         overlapped_roots.add(prev_root_id)
                         overlapped_roots.add(root_id)
                         self.log.warning("pool %s won't scale due to overlapping roots: %s",
-                                       pool['pool_name'], overlapped_roots)
+                                      pool_name, overlapped_roots)
                         self.log.warning("Please See: https://docs.ceph.com/en/"
                                          "latest/rados/operations/placement-groups"
                                          "/#automated-scaling")
@@ -376,8 +371,8 @@ class PgAutoscaler(MgrModule):
             result[root_id] = s
             s.root_ids.append(root_id)
             s.osds |= osds
-            s.pool_ids.append(pool_id)
-            s.pool_names.append(pool['pool_name'])
+            s.pool_ids.append(pool['pool'])
+            s.pool_names.append(pool_name)
             s.pg_current += pool['pg_num_target'] * pool['size']
             target_ratio = pool['options'].get('target_size_ratio', 0.0)
             if target_ratio:
@@ -385,11 +380,12 @@ class PgAutoscaler(MgrModule):
             else:
                 target_bytes = pool['options'].get('target_size_bytes', 0)
                 if target_bytes:
-                    s.total_target_bytes += target_bytes * osdmap.pool_raw_used_rate(pool_id)
+                    s.total_target_bytes += target_bytes * osdmap.pool_raw_used_rate(pool['pool'])
         return roots, overlapped_roots
 
     def get_subtree_resource_status(self,
                                     osdmap: OSDMap,
+                                    pools: Dict[str, Dict[str, Any]],
                                     crush: CRUSHMap) -> Tuple[Dict[int, CrushSubtreeResourceStatus],
                                                               Set[int]]:
         """
@@ -402,8 +398,9 @@ class PgAutoscaler(MgrModule):
         roots: List[CrushSubtreeResourceStatus] = []
         overlapped_roots: Set[int] = set()
         # identify subtrees and overlapping roots
-        roots, overlapped_roots = self.identify_subtrees_and_overlaps(osdmap,
-                                                                      crush, result, overlapped_roots, roots)
+        roots, overlapped_roots = self.identify_subtrees_and_overlaps(
+            osdmap, pools, crush, result, overlapped_roots, roots
+        )
         # finish subtrees
         all_stats = self.get('osd_stats')
         for s in roots:
@@ -561,7 +558,6 @@ class PgAutoscaler(MgrModule):
 
             raw_used_rate = osdmap.pool_raw_used_rate(pool_id)
 
-            pool_logical_used = pool_stats[pool_id]['stored']
             bias = p['options'].get('pg_autoscale_bias', 1.0)
             target_bytes = 0
             # ratio takes precedence if both are set
@@ -569,10 +565,10 @@ class PgAutoscaler(MgrModule):
                 target_bytes = p['options'].get('target_size_bytes', 0)
 
             # What proportion of space are we using?
-            actual_raw_used = pool_logical_used * raw_used_rate
+            actual_raw_used = pool_stats[pool_id]['bytes_used']
             actual_capacity_ratio = float(actual_raw_used) / capacity
 
-            pool_raw_used = max(pool_logical_used, target_bytes) * raw_used_rate
+            pool_raw_used = max(actual_raw_used, target_bytes * raw_used_rate)
             capacity_ratio = float(pool_raw_used) / capacity
 
             self.log.info("effective_target_ratio {0} {1} {2} {3}".format(
@@ -616,7 +612,7 @@ class PgAutoscaler(MgrModule):
                 'crush_root_id': root_id,
                 'pg_autoscale_mode': p['pg_autoscale_mode'],
                 'pg_num_target': p['pg_num_target'],
-                'logical_used': pool_logical_used,
+                'logical_used': float(actual_raw_used)/raw_used_rate,
                 'target_bytes': target_bytes,
                 'raw_used_rate': raw_used_rate,
                 'subtree_capacity': capacity,
@@ -645,7 +641,7 @@ class PgAutoscaler(MgrModule):
         assert threshold >= 1.0
 
         crush_map = osdmap.get_crush()
-        root_map, overlapped_roots = self.get_subtree_resource_status(osdmap, crush_map)
+        root_map, overlapped_roots = self.get_subtree_resource_status(osdmap, pools, crush_map)
         df = self.get('df')
         pool_stats = dict([(p['id'], p['stats']) for p in df['pools']])
 
@@ -669,31 +665,51 @@ class PgAutoscaler(MgrModule):
 
         return (ret, root_map)
 
-    def _update_progress_events(self) -> None:
-        if self.noautoscale:
+    def _get_pool_by_id(self,
+                     pools: Dict[str, Dict[str, Any]],
+                     pool_id: int) -> Optional[Dict[str, Any]]:
+        # Helper for getting pool data by pool_id
+        for pool_name, p in pools.items():
+            if p['pool'] == pool_id:
+                return p
+        self.log.debug('pool not found')
+        return None
+
+    def _update_progress_events(self,
+                                osdmap: OSDMap,
+                                pools: Dict[str, Dict[str, Any]]) -> None:
+        # Update progress events if necessary
+        if self.has_noautoscale_flag():
+            self.log.debug("noautoscale_flag is set.")
             return
-        osdmap = self.get_osdmap()
-        pools = osdmap.get_pools()
         for pool_id in list(self._event):
             ev = self._event[pool_id]
-            pool_data = pools.get(pool_id)
-            if pool_data is None or pool_data['pg_num'] == pool_data['pg_num_target'] or ev.pg_num == ev.pg_num_target:
+            pool_data = self._get_pool_by_id(pools, pool_id)
+            if (
+                pool_data is None
+                or pool_data["pg_num"] == pool_data["pg_num_target"]
+                or ev.pg_num == ev.pg_num_target
+            ):
                 # pool is gone or we've reached our target
                 self.remote('progress', 'complete', ev.ev_id)
                 del self._event[pool_id]
                 continue
             ev.update(self, (ev.pg_num - pool_data['pg_num']) / (ev.pg_num - ev.pg_num_target))
 
-    def _maybe_adjust(self) -> None:
-        if self.noautoscale:
-            return
+    def _maybe_adjust(self,
+                      osdmap: OSDMap,
+                      pools: Dict[str, Dict[str, Any]]) -> None:
+        # Figure out which pool needs pg adjustments
         self.log.info('_maybe_adjust')
-        osdmap = self.get_osdmap()
+        if self.has_noautoscale_flag():
+            self.log.debug("noautoscale_flag is set.")
+            return
         if osdmap.get_require_osd_release() < 'nautilus':
             return
-        pools = osdmap.get_pools_by_name()
+
         self.log.debug("pool: {0}".format(json.dumps(pools, indent=4,
                                 sort_keys=True)))
+
         ps, root_map = self._get_pool_status(osdmap, pools)
 
         # Anyone in 'warn', set the health message for them and then
@@ -719,8 +735,6 @@ class PgAutoscaler(MgrModule):
             if p['target_bytes'] > 0:
                 total_target_bytes[p['crush_root_id']] += p['target_bytes'] * p['raw_used_rate']
                 target_bytes_pools[p['crush_root_id']].append(p['pool_name'])
-            if not p['would_adjust']:
-                continue
             if p['pg_autoscale_mode'] == 'warn':
                 msg = 'Pool %s has %d placement groups, should have %d' % (
                     p['pool_name'],
@@ -728,9 +742,10 @@ class PgAutoscaler(MgrModule):
                     p['pg_num_final'])
                 if p['pg_num_final'] > p['pg_num_target']:
                     too_few.append(msg)
-                else:
+                elif p['pg_num_final'] < p['pg_num_target']:
                     too_many.append(msg)
-
+            if not p['would_adjust']:
+                continue
             if p['pg_autoscale_mode'] == 'on':
                 # Note that setting pg_num actually sets pg_num_target (see
                 # OSDMonitor.cc)
index 009019707ec84608acebe0118561c0bcc07f4d6d..b82146f7fc09409b0d2671c7324e1602c3b5801d 100644 (file)
@@ -52,8 +52,9 @@ class TestPgAutoscaler(object):
         overlapped_roots = set()
         osdmap = OSDMAP(pools)
         crush = CRUSH(rules, osd_dic)
-        roots, overlapped_roots = self.autoscaler.identify_subtrees_and_overlaps(osdmap,
-                                                                                 crush, result, overlapped_roots, roots)
+        roots, overlapped_roots = self.autoscaler.identify_subtrees_and_overlaps(
+            osdmap, pools, crush, result, overlapped_roots, roots
+        )
         assert overlapped_roots == expected_overlapped_roots
 
     def test_subtrees_and_overlaps(self):
@@ -93,7 +94,8 @@ class TestPgAutoscaler(object):
             },
         ]
         pools = {
-            0: {
+            "data": {
+                "pool": 0,
                 "pool_name": "data",
                 "pg_num_target": 1024,
                 "size": 3,
@@ -104,7 +106,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 1024,
             },
-            1: {
+            "metadata": {
+                "pool": 1,
                 "pool_name": "metadata",
                 "pg_num_target": 64,
                 "size": 3,
@@ -115,7 +118,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 64,
             },
-            4: {
+            "libvirt-pool": {
+                "pool": 4,
                 "pool_name": "libvirt-pool",
                 "pg_num_target": 32,
                 "size": 3,
@@ -124,7 +128,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 128,
             },
-            93: {
+            ".rgw.root": {
+                "pool": 93,
                 "pool_name": ".rgw.root",
                 "pg_num_target": 32,
                 "size": 3,
@@ -133,7 +138,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            94: {
+            "default.rgw.control": {
+                "pool": 94,
                 "pool_name": "default.rgw.control",
                 "pg_num_target": 32,
                 "size": 3,
@@ -142,7 +148,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            95: {
+            "default.rgw.meta": {
+                "pool": 95,
                 "pool_name": "default.rgw.meta",
                 "pg_num_target": 32,
                 "size": 3,
@@ -151,7 +158,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            96: {
+            "default.rgw.log": {
+                "pool": 96,
                 "pool_name": "default.rgw.log",
                 "pg_num_target": 32,
                 "size": 3,
@@ -160,7 +168,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            97: {
+            "default.rgw.buckets.index": {
+                "pool": 97,
                 "pool_name": "default.rgw.buckets.index",
                 "pg_num_target": 32,
                 "size": 3,
@@ -169,7 +178,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            98: {
+            "default.rgw.buckets.data": {
+                "pool": 98,
                 "pool_name": "default.rgw.buckets.data",
                 "pg_num_target": 32,
                 "size": 3,
@@ -178,7 +188,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 128,
             },
-            99: {
+            "default.rgw.buckets.non-ec": {
+                "pool": 99,
                 "pool_name": "default.rgw.buckets.non-ec",
                 "pg_num_target": 32,
                 "size": 3,
@@ -187,7 +198,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            100: {
+            "device_health_metrics": {
+                "pool": 100,
                 "pool_name": "device_health_metrics",
                 "pg_num_target": 1,
                 "size": 3,
@@ -198,7 +210,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 1,
             },
-            113: {
+            "cephfs.teuthology.meta": {
+                "pool": 113,
                 "pool_name": "cephfs.teuthology.meta",
                 "pg_num_target": 64,
                 "size": 3,
@@ -210,7 +223,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 512,
             },
-            114: {
+            "cephfs.teuthology.data": {
+                "pool": 114,
                 "pool_name": "cephfs.teuthology.data",
                 "pg_num_target": 256,
                 "size": 3,
@@ -222,7 +236,8 @@ class TestPgAutoscaler(object):
                 "expected_final_pg_target": 1024,
                 "expected_final_pg_target": 256,
             },
-            117: {
+            "cephfs.scratch.meta": {
+                "pool": 117,
                 "pool_name": "cephfs.scratch.meta",
                 "pg_num_target": 32,
                 "size": 3,
@@ -234,7 +249,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 64,
             },
-            118: {
+            "cephfs.scratch.data": {
+                "pool": 118,
                 "pool_name": "cephfs.scratch.data",
                 "pg_num_target": 32,
                 "size": 3,
@@ -243,7 +259,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 128,
             },
-            119: {
+            "cephfs.teuthology.data-ec": {
+                "pool": 119,
                 "pool_name": "cephfs.teuthology.data-ec",
                 "pg_num_target": 1024,
                 "size": 6,
@@ -254,7 +271,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 1024,
             },
-            121: {
+            "cephsqlite": {
+                "pool": 121,
                 "pool_name": "cephsqlite",
                 "pg_num_target": 32,
                 "size": 3,
@@ -304,7 +322,8 @@ class TestPgAutoscaler(object):
             },
         ]
         pools = {
-            0: {
+            "data": {
+                "pool": 0,
                 "pool_name": "data",
                 "pg_num_target": 1024,
                 "size": 3,
@@ -315,7 +334,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 1024,
             },
-            1: {
+            "metadata": {
+                "pool": 1,
                 "pool_name": "metadata",
                 "pg_num_target": 64,
                 "size": 3,
@@ -326,7 +346,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 64,
             },
-            4: {
+            "libvirt-pool": {
+                "pool": 4,
                 "pool_name": "libvirt-pool",
                 "pg_num_target": 32,
                 "size": 3,
@@ -335,7 +356,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 128,
             },
-            93: {
+            ".rgw.root": {
+                "pool": 93,
                 "pool_name": ".rgw.root",
                 "pg_num_target": 32,
                 "size": 3,
@@ -344,7 +366,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            94: {
+            "default.rgw.control": {
+                "pool": 94,
                 "pool_name": "default.rgw.control",
                 "pg_num_target": 32,
                 "size": 3,
@@ -353,7 +376,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            95: {
+            "default.rgw.meta": {
+                "pool": 95,
                 "pool_name": "default.rgw.meta",
                 "pg_num_target": 32,
                 "size": 3,
@@ -362,7 +386,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            96: {
+            "default.rgw.log": {
+                "pool": 96,
                 "pool_name": "default.rgw.log",
                 "pg_num_target": 32,
                 "size": 3,
@@ -371,7 +396,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            97: {
+            "default.rgw.buckets.index": {
+                "pool": 97,
                 "pool_name": "default.rgw.buckets.index",
                 "pg_num_target": 32,
                 "size": 3,
@@ -380,7 +406,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            98: {
+            "default.rgw.buckets.data": {
+                "pool": 98,
                 "pool_name": "default.rgw.buckets.data",
                 "pg_num_target": 32,
                 "size": 3,
@@ -389,7 +416,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 128,
             },
-            99: {
+            "default.rgw.buckets.non-ec": {
+                "pool": 99,
                 "pool_name": "default.rgw.buckets.non-ec",
                 "pg_num_target": 32,
                 "size": 3,
@@ -398,7 +426,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 32,
             },
-            100: {
+            "device_health_metrics": {
+                "pool": 100,
                 "pool_name": "device_health_metrics",
                 "pg_num_target": 1,
                 "size": 3,
@@ -409,7 +438,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 1,
             },
-            113: {
+            "cephfs.teuthology.meta": {
+                "pool": 113,
                 "pool_name": "cephfs.teuthology.meta",
                 "pg_num_target": 64,
                 "size": 3,
@@ -421,7 +451,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 512,
             },
-            114: {
+            "cephfs.teuthology.data": {
+                "pool": 114,
                 "pool_name": "cephfs.teuthology.data",
                 "pg_num_target": 256,
                 "size": 3,
@@ -433,7 +464,8 @@ class TestPgAutoscaler(object):
                 "expected_final_pg_target": 1024,
                 "expected_final_pg_target": 256,
             },
-            117: {
+            "cephfs.scratch.meta": {
+                "pool": 117,
                 "pool_name": "cephfs.scratch.meta",
                 "pg_num_target": 32,
                 "size": 3,
@@ -445,7 +477,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 64,
             },
-            118: {
+            "cephfs.scratch.data": {
+                "pool": 118,
                 "pool_name": "cephfs.scratch.data",
                 "pg_num_target": 32,
                 "size": 3,
@@ -454,7 +487,8 @@ class TestPgAutoscaler(object):
                 "options": {},
                 "expected_final_pg_target": 128,
             },
-            119: {
+            "cephfs.teuthology.data-ec": {
+                "pool": 119,
                 "pool_name": "cephfs.teuthology.data-ec",
                 "pg_num_target": 1024,
                 "size": 6,
@@ -465,7 +499,8 @@ class TestPgAutoscaler(object):
                 },
                 "expected_final_pg_target": 1024,
             },
-            121: {
+            "cephsqlite": {
+                "pool": 121,
                 "pool_name": "cephsqlite",
                 "pg_num_target": 32,
                 "size": 3,
index 3467c3080a70dca31d3d931c5b96b4bd6eec0b84..96f08f027a9ecc81ad03fed76a4ab881250d75f3 100644 (file)
@@ -13,6 +13,7 @@ from collections import namedtuple
 
 from mgr_module import CLIReadCommand, MgrModule, MgrStandbyModule, PG_STATES, Option, ServiceInfoT, HandleCommandResult, CLIWriteCommand
 from mgr_util import get_default_addr, profile_method, build_url
+from orchestrator import OrchestratorClientMixin, raise_if_exception, NoOrchestrator
 from rbd import RBD
 
 from typing import DefaultDict, Optional, Dict, Any, Set, cast, Tuple, Union, List, Callable
@@ -548,7 +549,7 @@ class MetricCollectionThread(threading.Thread):
         self.event.set()
 
 
-class Module(MgrModule):
+class Module(MgrModule, OrchestratorClientMixin):
     MODULE_OPTIONS = [
         Option(
             'server_addr',
@@ -599,6 +600,14 @@ class Module(MgrModule):
             min=400,
             max=599,
             runtime=True
+        ),
+        Option(
+            name='exclude_perf_counters',
+            type='bool',
+            default=True,
+            desc='Do not include perf-counters in the metrics output',
+            long_desc='Gathering perf-counters from a single Prometheus exporter can degrade ceph-mgr performance, especially in large clusters. Instead, Ceph-exporter daemons are now used by default for perf-counter gathering. This should only be disabled when no ceph-exporters are deployed.',
+            runtime=True
         )
     ]
 
@@ -637,6 +646,8 @@ class Module(MgrModule):
         _global_instance = self
         self.metrics_thread = MetricCollectionThread(_global_instance)
         self.health_history = HealthHistory(self)
+        self.modify_instance_id = self.get_orch_status() and self.get_module_option(
+            'exclude_perf_counters')
 
     def _setup_static_metrics(self) -> Dict[str, Metric]:
         metrics = {}
@@ -853,6 +864,12 @@ class Module(MgrModule):
 
         return metrics
 
+    def get_orch_status(self) -> bool:
+        try:
+            return self.available()[0]
+        except NoOrchestrator:
+            return False
+
     def get_server_addr(self) -> str:
         """
         Return the current mgr server IP.
@@ -1273,9 +1290,20 @@ class Module(MgrModule):
             )
 
         # Populate other servers metadata
+        # If orchestrator is available and ceph-exporter is running modify rgw instance id
+        # to match the one from exporter
+        if self.modify_instance_id:
+            daemons = raise_if_exception(self.list_daemons(daemon_type='rgw'))
+            for daemon in daemons:
+                self.metrics['rgw_metadata'].set(1,
+                                                 ('{}.{}'.format(str(daemon.daemon_type),
+                                                                 str(daemon.daemon_id)),
+                                                  str(daemon.hostname),
+                                                  str(daemon.version),
+                                                  str(daemon.daemon_id).split(".")[2]))
         for key, value in servers.items():
             service_id, service_type = key
-            if service_type == 'rgw':
+            if service_type == 'rgw' and not self.modify_instance_id:
                 hostname, version, name = value
                 self.metrics['rgw_metadata'].set(
                     1,
@@ -1620,27 +1648,11 @@ class Module(MgrModule):
                 self.metrics[path].set(health_metric['value'], labelvalues=(
                     health_metric['type'], daemon_name,))
 
-    @profile_method(True)
-    def collect(self) -> str:
-        # Clear the metrics before scraping
-        for k in self.metrics.keys():
-            self.metrics[k].clear()
-
-        self.get_health()
-        self.get_df()
-        self.get_osd_blocklisted_entries()
-        self.get_pool_stats()
-        self.get_fs()
-        self.get_osd_stats()
-        self.get_quorum_status()
-        self.get_mgr_status()
-        self.get_metadata_and_osd_status()
-        self.get_pg_status()
-        self.get_pool_repaired_objects()
-        self.get_num_objects()
-        self.get_all_daemon_health_metrics()
-
-        for daemon, counters in self.get_all_perf_counters().items():
+    def get_perf_counters(self) -> None:
+        """
+        Get the perf counters for all daemons
+        """
+        for daemon, counters in self.get_unlabeled_perf_counters().items():
             for path, counter_info in counters.items():
                 # Skip histograms, they are represented by long running avgs
                 stattype = self._stattype_to_str(counter_info['type'])
@@ -1666,7 +1678,6 @@ class Module(MgrModule):
                             label_names,
                         )
                     self.metrics[_path].set(value, labels)
-
                     _path = path + '_count'
                     if _path not in self.metrics:
                         self.metrics[_path] = Metric(
@@ -1685,8 +1696,30 @@ class Module(MgrModule):
                             label_names,
                         )
                     self.metrics[path].set(value, labels)
-
         self.add_fixed_name_metrics()
+
+    @profile_method(True)
+    def collect(self) -> str:
+        # Clear the metrics before scraping
+        for k in self.metrics.keys():
+            self.metrics[k].clear()
+
+        self.get_health()
+        self.get_df()
+        self.get_osd_blocklisted_entries()
+        self.get_pool_stats()
+        self.get_fs()
+        self.get_osd_stats()
+        self.get_quorum_status()
+        self.get_mgr_status()
+        self.get_metadata_and_osd_status()
+        self.get_pg_status()
+        self.get_pool_repaired_objects()
+        self.get_num_objects()
+        self.get_all_daemon_health_metrics()
+
+        if not self.get_module_option('exclude_perf_counters'):
+            self.get_perf_counters()
         self.get_rbd_stats()
 
         self.get_collect_time_metrics()
index 122a3cd3997b9e60a277ef689d4759f75b68b260..e5b19f36228d3a48f9bc221014c4c566f93e69a5 100644 (file)
@@ -33,10 +33,9 @@ class ImageSpec(NamedTuple):
 
 class CreateSnapshotRequests:
 
-    lock = Lock()
-    condition = Condition(lock)
-
     def __init__(self, handler: Any) -> None:
+        self.lock = Lock()
+        self.condition = Condition(self.lock)
         self.handler = handler
         self.rados = handler.module.rados
         self.log = handler.log
@@ -44,9 +43,6 @@ class CreateSnapshotRequests:
         self.queue: List[ImageSpec] = []
         self.ioctxs: Dict[Tuple[str, str], Tuple[rados.Ioctx, Set[ImageSpec]]] = {}
 
-    def __del__(self) -> None:
-        self.wait_for_pending()
-
     def wait_for_pending(self) -> None:
         with self.lock:
             while self.pending:
@@ -125,7 +121,7 @@ class CreateSnapshotRequests:
         self.log.debug("CreateSnapshotRequests.get_mirror_mode: {}/{}/{}".format(
             pool_id, namespace, image_id))
 
-        def cb(comp: rados.Completion, mode: int) -> None:
+        def cb(comp: rados.Completion, mode: Optional[int]) -> None:
             self.handle_get_mirror_mode(image_spec, image, comp, mode)
 
         try:
@@ -140,14 +136,14 @@ class CreateSnapshotRequests:
                                image_spec: ImageSpec,
                                image: rbd.Image,
                                comp: rados.Completion,
-                               mode: int) -> None:
+                               mode: Optional[int]) -> None:
         pool_id, namespace, image_id = image_spec
 
         self.log.debug(
             "CreateSnapshotRequests.handle_get_mirror_mode {}/{}/{}: r={} mode={}".format(
                 pool_id, namespace, image_id, comp.get_return_value(), mode))
 
-        if comp.get_return_value() < 0:
+        if mode is None:
             if comp.get_return_value() != -errno.ENOENT:
                 self.log.error(
                     "error when getting mirror mode for {}/{}/{}: {}".format(
@@ -171,7 +167,7 @@ class CreateSnapshotRequests:
         self.log.debug("CreateSnapshotRequests.get_mirror_info: {}/{}/{}".format(
             pool_id, namespace, image_id))
 
-        def cb(comp: rados.Completion, info: Dict[str, Union[str, int]]) -> None:
+        def cb(comp: rados.Completion, info: Optional[Dict[str, Union[str, int]]]) -> None:
             self.handle_get_mirror_info(image_spec, image, comp, info)
 
         try:
@@ -186,14 +182,14 @@ class CreateSnapshotRequests:
                                image_spec: ImageSpec,
                                image: rbd.Image,
                                comp: rados.Completion,
-                               info: Dict[str, Union[str, int]]) -> None:
+                               info: Optional[Dict[str, Union[str, int]]]) -> None:
         pool_id, namespace, image_id = image_spec
 
         self.log.debug(
             "CreateSnapshotRequests.handle_get_mirror_info {}/{}/{}: r={} info={}".format(
                 pool_id, namespace, image_id, comp.get_return_value(), info))
 
-        if comp.get_return_value() < 0:
+        if info is None:
             if comp.get_return_value() != -errno.ENOENT:
                 self.log.error(
                     "error when getting mirror info for {}/{}/{}: {}".format(
@@ -218,7 +214,7 @@ class CreateSnapshotRequests:
             "CreateSnapshotRequests.create_snapshot for {}/{}/{}".format(
                 pool_id, namespace, image_id))
 
-        def cb(comp: rados.Completion, snap_id: int) -> None:
+        def cb(comp: rados.Completion, snap_id: Optional[int]) -> None:
             self.handle_create_snapshot(image_spec, image, comp, snap_id)
 
         try:
@@ -233,15 +229,14 @@ class CreateSnapshotRequests:
                                image_spec: ImageSpec,
                                image: rbd.Image,
                                comp: rados.Completion,
-                               snap_id: int) -> None:
+                               snap_id: Optional[int]) -> None:
         pool_id, namespace, image_id = image_spec
 
         self.log.debug(
             "CreateSnapshotRequests.handle_create_snapshot for {}/{}/{}: r={}, snap_id={}".format(
                 pool_id, namespace, image_id, comp.get_return_value(), snap_id))
 
-        if comp.get_return_value() < 0 and \
-           comp.get_return_value() != -errno.ENOENT:
+        if snap_id is None and comp.get_return_value() != -errno.ENOENT:
             self.log.error(
                 "error when creating snapshot for {}/{}/{}: {}".format(
                     pool_id, namespace, image_id, comp.get_return_value()))
@@ -332,10 +327,9 @@ class MirrorSnapshotScheduleHandler:
     SCHEDULE_OID = "rbd_mirror_snapshot_schedule"
     REFRESH_DELAY_SECONDS = 60.0
 
-    lock = Lock()
-    condition = Condition(lock)
-
     def __init__(self, module: Any) -> None:
+        self.lock = Lock()
+        self.condition = Condition(self.lock)
         self.module = module
         self.log = module.log
         self.last_refresh_images = datetime(1970, 1, 1)
index 68cbbd3b5f48b42fa0fd61f4f05ae327965744df..20815721de50ff9d6913d9968b54661f033aef78 100644 (file)
@@ -65,15 +65,6 @@ ExtractDataFuncT = Callable[[int, Optional[RawImageCounterT], SumImageCounterT],
 
 
 class PerfHandler:
-    user_queries: Dict[PoolKeyT, Dict[str, Any]] = {}
-    image_cache: Dict[str, str] = {}
-
-    lock = Lock()
-    query_condition = Condition(lock)
-    refresh_condition = Condition(lock)
-
-    image_name_cache: Dict[Tuple[int, str], Dict[str, str]] = {}
-    image_name_refresh_time = datetime.fromtimestamp(0)
 
     @classmethod
     def prepare_regex(cls, value: Any) -> str:
@@ -114,6 +105,16 @@ class PerfHandler:
                 and (pool_key[0] == search_key[0] or not search_key[0]))
 
     def __init__(self, module: Any) -> None:
+        self.user_queries: Dict[PoolKeyT, Dict[str, Any]] = {}
+        self.image_cache: Dict[str, str] = {}
+
+        self.lock = Lock()
+        self.query_condition = Condition(self.lock)
+        self.refresh_condition = Condition(self.lock)
+
+        self.image_name_cache: Dict[Tuple[int, str], Dict[str, str]] = {}
+        self.image_name_refresh_time = datetime.fromtimestamp(0)
+
         self.module = module
         self.log = module.log
 
index b2f7b1614f1325e3964d206ae4d84d0428be60ef..abc50ec394f48bafce237eb8d48825df60517193 100644 (file)
@@ -16,10 +16,9 @@ class TrashPurgeScheduleHandler:
     SCHEDULE_OID = "rbd_trash_purge_schedule"
     REFRESH_DELAY_SECONDS = 60.0
 
-    lock = Lock()
-    condition = Condition(lock)
-
     def __init__(self, module: Any) -> None:
+        self.lock = Lock()
+        self.condition = Condition(self.lock)
         self.module = module
         self.log = module.log
         self.last_refresh_pools = datetime(1970, 1, 1)
index 4224599f66995ae480cfd20855064ddd8cd05a02..c484ac55e445fd136583692d8423f4220df6cc46 100644 (file)
@@ -18,7 +18,7 @@ class Perf(RestController):
          - 'daemon' -- filter by daemon, accepts Python regexp
         """
 
-        counters = context.instance.get_all_perf_counters()
+        counters = context.instance.get_unlabeled_perf_counters()
 
         if 'daemon' in kwargs:
             _re = re.compile(kwargs['daemon'])
index bb1f9460025780c9726d604d645af67de95cd759..f48e2e09fc32350592cc9c7bb4c335ea1ce744ae 100644 (file)
@@ -249,26 +249,30 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
     @CLICommand('rgw realm tokens', perm='r')
     def list_realm_tokens(self) -> HandleCommandResult:
         try:
-            realms_info = []
-            for realm_info in RGWAM(self.env).get_realms_info():
-                if not realm_info['master_zone_id']:
-                    realms_info.append({'realm': realm_info['realm_name'], 'token': 'realm has no master zone'})
-                elif not realm_info['endpoint']:
-                    realms_info.append({'realm': realm_info['realm_name'], 'token': 'master zone has no endpoint'})
-                elif not (realm_info['access_key'] and realm_info['secret']):
-                    realms_info.append({'realm': realm_info['realm_name'], 'token': 'master zone has no access/secret keys'})
-                else:
-                    keys = ['realm_name', 'realm_id', 'endpoint', 'access_key', 'secret']
-                    realm_token = RealmToken(**{k: realm_info[k] for k in keys})
-                    realm_token_b = realm_token.to_json().encode('utf-8')
-                    realm_token_s = base64.b64encode(realm_token_b).decode('utf-8')
-                    realms_info.append({'realm': realm_info['realm_name'], 'token': realm_token_s})
+            realms_info = self.get_realm_tokens()
         except RGWAMException as e:
             self.log.error(f'cmd run exception: ({e.retcode}) {e.message}')
             return HandleCommandResult(retval=e.retcode, stdout=e.stdout, stderr=e.stderr)
 
         return HandleCommandResult(retval=0, stdout=json.dumps(realms_info, indent=4), stderr='')
 
+    def get_realm_tokens(self) -> List[Dict]:
+        realms_info = []
+        for realm_info in RGWAM(self.env).get_realms_info():
+            if not realm_info['master_zone_id']:
+                realms_info.append({'realm': realm_info['realm_name'], 'token': 'realm has no master zone'})
+            elif not realm_info['endpoint']:
+                realms_info.append({'realm': realm_info['realm_name'], 'token': 'master zone has no endpoint'})
+            elif not (realm_info['access_key'] and realm_info['secret']):
+                realms_info.append({'realm': realm_info['realm_name'], 'token': 'master zone has no access/secret keys'})
+            else:
+                keys = ['realm_name', 'realm_id', 'endpoint', 'access_key', 'secret']
+                realm_token = RealmToken(**{k: realm_info[k] for k in keys})
+                realm_token_b = realm_token.to_json().encode('utf-8')
+                realm_token_s = base64.b64encode(realm_token_b).decode('utf-8')
+                realms_info.append({'realm': realm_info['realm_name'], 'token': realm_token_s})
+        return realms_info
+
     @CLICommand('rgw zone modify', perm='rw')
     def update_zone_info(self, realm_name: str, zonegroup_name: str, zone_name: str, realm_token: str, zone_endpoints: List[str]) -> HandleCommandResult:
         try:
@@ -294,6 +298,20 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
                              inbuf: Optional[str] = None) -> HandleCommandResult:
         """Bootstrap new rgw zone that syncs with zone on another cluster in the same realm"""
 
+        created_zones = self.rgw_zone_create(zone_name, realm_token, port, placement,
+                                             start_radosgw, zone_endpoints, inbuf)
+
+        return HandleCommandResult(retval=0, stdout=f"Zones {', '.join(created_zones)} created successfully")
+
+    def rgw_zone_create(self,
+                        zone_name: Optional[str] = None,
+                        realm_token: Optional[str] = None,
+                        port: Optional[int] = None,
+                        placement: Optional[Union[str, Dict[str, Any]]] = None,
+                        start_radosgw: Optional[bool] = True,
+                        zone_endpoints: Optional[str] = None,
+                        inbuf: Optional[str] = None) -> Any:
+
         if inbuf:
             try:
                 rgw_specs = self._parse_rgw_specs(inbuf)
@@ -301,7 +319,10 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
                 return HandleCommandResult(retval=-errno.EINVAL, stderr=f'{e}')
         elif (zone_name and realm_token):
             token = RealmToken.from_base64_str(realm_token)
-            placement_spec = PlacementSpec.from_string(placement) if placement else None
+            if isinstance(placement, dict):
+                placement_spec = PlacementSpec.from_json(placement) if placement else None
+            elif isinstance(placement, str):
+                placement_spec = PlacementSpec.from_string(placement) if placement else None
             rgw_specs = [RGWSpec(rgw_realm=token.realm_name,
                                  rgw_zone=zone_name,
                                  rgw_realm_token=realm_token,
@@ -318,11 +339,11 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
                 RGWAM(self.env).zone_create(rgw_spec, start_radosgw)
                 if rgw_spec.rgw_zone is not None:
                     created_zones.append(rgw_spec.rgw_zone)
+                    return created_zones
         except RGWAMException as e:
             self.log.error('cmd run exception: (%d) %s' % (e.retcode, e.message))
             return HandleCommandResult(retval=e.retcode, stdout=e.stdout, stderr=e.stderr)
-
-        return HandleCommandResult(retval=0, stdout=f"Zones {', '.join(created_zones)} created successfully")
+        return created_zones
 
     @CLICommand('rgw realm reconcile', perm='rw')
     def _cmd_rgw_realm_reconcile(self,
@@ -349,3 +370,14 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule):
         self.log.info('Stopping')
         self.run = False
         self.event.set()
+
+    def import_realm_token(self,
+                           zone_name: Optional[str] = None,
+                           realm_token: Optional[str] = None,
+                           port: Optional[int] = None,
+                           placement: Optional[dict] = None,
+                           start_radosgw: Optional[bool] = True,
+                           zone_endpoints: Optional[str] = None) -> None:
+        placement_spec = placement.get('placement') if placement else None
+        self.rgw_zone_create(zone_name, realm_token, port, placement_spec, start_radosgw,
+                             zone_endpoints)
diff --git a/ceph/src/pybind/mgr/rook/ci/Dockerfile b/ceph/src/pybind/mgr/rook/ci/Dockerfile
new file mode 100644 (file)
index 0000000..30ebea5
--- /dev/null
@@ -0,0 +1,3 @@
+FROM quay.io/ceph/daemon-base:latest-main
+COPY ./tmp_build/orchestrator /usr/share/ceph/mgr/orchestrator
+COPY ./tmp_build/rook /usr/share/ceph/mgr/rook
diff --git a/ceph/src/pybind/mgr/rook/ci/run-rook-e2e-tests.sh b/ceph/src/pybind/mgr/rook/ci/run-rook-e2e-tests.sh
new file mode 100755 (executable)
index 0000000..a43e01a
--- /dev/null
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+
+set -ex
+
+# Execute tests
+: ${CEPH_DEV_FOLDER:=${PWD}}
+${CEPH_DEV_FOLDER}/src/pybind/mgr/rook/ci/scripts/bootstrap-rook-cluster.sh
+cd ${CEPH_DEV_FOLDER}/src/pybind/mgr/rook/ci/tests
+behave
diff --git a/ceph/src/pybind/mgr/rook/ci/scripts/bootstrap-rook-cluster.sh b/ceph/src/pybind/mgr/rook/ci/scripts/bootstrap-rook-cluster.sh
new file mode 100755 (executable)
index 0000000..4b97df6
--- /dev/null
@@ -0,0 +1,135 @@
+#!/usr/bin/env bash
+
+set -eEx
+
+: ${CEPH_DEV_FOLDER:=${PWD}}
+KUBECTL="minikube kubectl --"
+
+# We build a local ceph image that contains the latest code
+# plus changes from the PR. This image will be used by the docker
+# running inside the minikube to start the different ceph pods
+LOCAL_CEPH_IMG="local/ceph"
+
+on_error() {
+    echo "on error"
+    minikube delete
+}
+
+configure_libvirt(){
+    sudo usermod -aG libvirt $(id -un)
+    sudo su -l $USER  # Avoid having to log out and log in for group addition to take effect.
+    sudo systemctl enable --now libvirtd
+    sudo systemctl restart libvirtd
+    sleep 10 # wait some time for libvirtd service to restart
+}
+
+setup_minikube_env() {
+
+    # Check if Minikube is running
+    if minikube status > /dev/null 2>&1; then
+       echo "Minikube is running"
+       minikube stop
+       minikube delete
+    else
+       echo "Minikube is not running"
+    fi
+
+    rm -rf ~/.minikube
+    minikube start --memory="4096" --cpus="2" --disk-size=10g --extra-disks=1 --driver kvm2
+    # point Docker env to use docker daemon running on minikube
+    eval $(minikube docker-env -p minikube)
+}
+
+build_ceph_image() {
+    wget -q -O cluster-test.yaml https://raw.githubusercontent.com/rook/rook/master/deploy/examples/cluster-test.yaml
+    CURR_CEPH_IMG=$(grep -E '^\s*image:\s+' cluster-test.yaml | sed 's/.*image: *\([^ ]*\)/\1/')
+
+    cd ${CEPH_DEV_FOLDER}/src/pybind/mgr/rook/ci
+    mkdir -p tmp_build/rook
+    mkdir -p tmp_build/orchestrator
+    cp ./../../orchestrator/*.py tmp_build/orchestrator
+    cp ../*.py tmp_build/rook
+
+    # we use the following tag to trick the Docker
+    # running inside minikube so it uses this image instead
+    # of pulling it from the registry
+    docker build --tag ${LOCAL_CEPH_IMG} .
+    docker tag ${LOCAL_CEPH_IMG} ${CURR_CEPH_IMG}
+
+    # cleanup
+    rm -rf tmp_build
+    cd ${CEPH_DEV_FOLDER}
+}
+
+create_rook_cluster() {
+    wget -q -O cluster-test.yaml https://raw.githubusercontent.com/rook/rook/master/deploy/examples/cluster-test.yaml
+    $KUBECTL create -f https://raw.githubusercontent.com/rook/rook/master/deploy/examples/crds.yaml
+    $KUBECTL create -f https://raw.githubusercontent.com/rook/rook/master/deploy/examples/common.yaml
+    $KUBECTL create -f https://raw.githubusercontent.com/rook/rook/master/deploy/examples/operator.yaml
+    $KUBECTL create -f cluster-test.yaml
+    $KUBECTL create -f https://raw.githubusercontent.com/rook/rook/master/deploy/examples/dashboard-external-http.yaml
+    $KUBECTL create -f https://raw.githubusercontent.com/rook/rook/master/deploy/examples/toolbox.yaml
+}
+
+wait_for_rook_operator() {
+    local max_attempts=10
+    local sleep_interval=20
+    local attempts=0
+    $KUBECTL rollout status deployment rook-ceph-operator -n rook-ceph --timeout=180s
+    PHASE=$($KUBECTL get cephclusters.ceph.rook.io -n rook-ceph -o jsonpath='{.items[?(@.kind == "CephCluster")].status.phase}')
+    echo "PHASE: $PHASE"
+    while ! $KUBECTL get cephclusters.ceph.rook.io -n rook-ceph -o jsonpath='{.items[?(@.kind == "CephCluster")].status.phase}' | grep -q "Ready"; do
+       echo "Waiting for cluster to be ready..."
+       sleep $sleep_interval
+       attempts=$((attempts+1))
+        if [ $attempts -ge $max_attempts ]; then
+            echo "Maximum number of attempts ($max_attempts) reached. Exiting..."
+            return 1
+        fi
+    done
+}
+
+wait_for_ceph_cluster() {
+    local max_attempts=10
+    local sleep_interval=20
+    local attempts=0
+    $KUBECTL rollout status deployment rook-ceph-tools -n rook-ceph --timeout=30s
+    while ! $KUBECTL get cephclusters.ceph.rook.io -n rook-ceph -o jsonpath='{.items[?(@.kind == "CephCluster")].status.ceph.health}' | grep -q "HEALTH_OK"; do
+       echo "Waiting for Ceph cluster installed"
+       sleep $sleep_interval
+       attempts=$((attempts+1))
+        if [ $attempts -ge $max_attempts ]; then
+            echo "Maximum number of attempts ($max_attempts) reached. Exiting..."
+            return 1
+        fi
+    done
+    echo "Ceph cluster installed and running"
+}
+
+show_info() {
+    DASHBOARD_PASSWORD=$($KUBECTL -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo)
+    IP_ADDR=$($KUBECTL get po --selector="app=rook-ceph-mgr" -n rook-ceph --output jsonpath='{.items[*].status.hostIP}')
+    PORT="$($KUBECTL -n rook-ceph -o=jsonpath='{.spec.ports[?(@.name == "dashboard")].nodePort}' get services rook-ceph-mgr-dashboard-external-http)"
+    BASE_URL="http://$IP_ADDR:$PORT"
+    echo "==========================="
+    echo "Ceph Dashboard:  "
+    echo "   IP_ADDRESS: $BASE_URL"
+    echo "   PASSWORD: $DASHBOARD_PASSWORD"
+    echo "==========================="
+}
+
+####################################################################
+####################################################################
+
+trap 'on_error $? $LINENO' ERR
+
+configure_libvirt
+setup_minikube_env
+build_ceph_image
+create_rook_cluster
+wait_for_rook_operator
+wait_for_ceph_cluster
+show_info
+
+####################################################################
+####################################################################
diff --git a/ceph/src/pybind/mgr/rook/ci/tests/features/rook.feature b/ceph/src/pybind/mgr/rook/ci/tests/features/rook.feature
new file mode 100644 (file)
index 0000000..ae0478f
--- /dev/null
@@ -0,0 +1,12 @@
+Feature: Testing Rook orchestrator commands
+    Ceph has been installed using the cluster CRD available in deploy/examples/cluster-test.yaml and
+
+    Scenario: Verify ceph cluster health
+      When I run
+          """
+          ceph health | grep HEALTH
+          """
+      Then I get
+          """
+          HEALTH_OK
+          """
diff --git a/ceph/src/pybind/mgr/rook/ci/tests/features/steps/implementation.py b/ceph/src/pybind/mgr/rook/ci/tests/features/steps/implementation.py
new file mode 100644 (file)
index 0000000..adde61a
--- /dev/null
@@ -0,0 +1,21 @@
+from behave import *
+from utils import *
+import re
+
+@when("I run")
+def run_step(context):
+    context.output = run_commands(context.text)
+
+@then("I get")
+def verify_result_step(context):
+    print(f"Output is:\n{context.output}\n--------------\n")
+    assert context.text == context.output
+
+@then("I get something like")
+def verify_fuzzy_result_step(context):
+    output_lines = context.output.split("\n")
+    expected_lines = context.text.split("\n")
+    num_lines = min(len(output_lines), len(expected_lines))
+    for n in range(num_lines):
+        if not re.match(expected_lines[n], output_lines[n]):
+            raise
diff --git a/ceph/src/pybind/mgr/rook/ci/tests/features/steps/utils.py b/ceph/src/pybind/mgr/rook/ci/tests/features/steps/utils.py
new file mode 100644 (file)
index 0000000..41a71d0
--- /dev/null
@@ -0,0 +1,29 @@
+import subprocess
+
+ROOK_CEPH_COMMAND = "minikube kubectl -- -n rook-ceph exec -it deploy/rook-ceph-tools -- "
+CLUSTER_COMMAND = "minikube kubectl -- "
+
+
+def execute_command(command: str) -> str:
+    output = ""
+    try:
+        proc = subprocess.run(command, shell=True, capture_output=True, text=True)
+        output = proc.stdout
+    except Exception as ex:
+        output = f"Error executing command: {ex}"
+
+    return output
+
+
+def run_commands(commands: str) -> str:
+    commands_list = commands.split("\n")
+    output = ""
+    for cmd in commands_list:
+        if cmd.startswith("ceph"):
+            prefix = ROOK_CEPH_COMMAND
+        else:
+            prefix = CLUSTER_COMMAND
+        command = prefix + cmd
+        output = execute_command(command)
+
+    return output.strip("\n")
index b67349d1bff6229ba3f76f7b4cd896475c4d1622..fa75db2cf9cf73a0585c52105c6df653e54ec8dd 100644 (file)
@@ -130,7 +130,7 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
 
         self._load_drive_groups()
         self._shutdown = threading.Event()
-        
+
     def config_notify(self) -> None:
         """
         This method is called whenever one of our config options is changed.
@@ -147,7 +147,7 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
         assert isinstance(self.drive_group_interval, float)
 
         if self._rook_cluster:
-            self._rook_cluster.storage_class = self.storage_class
+            self._rook_cluster.storage_class_name = self.storage_class
 
     def shutdown(self) -> None:
         self._shutdown.set()
@@ -457,7 +457,17 @@ class RookOrchestrator(MgrModule, orchestrator.Orchestrator):
         for p in pods:
             sd = orchestrator.DaemonDescription()
             sd.hostname = p['hostname']
-            sd.daemon_type = p['labels']['app'].replace('rook-ceph-', '')
+
+            # In Rook environments, the 'ceph-exporter' daemon is named 'exporter' whereas
+            # in the orchestrator interface, it is named 'ceph-exporter'. The purpose of the
+            # following adjustment is to ensure that the 'daemon_type' is correctly set.
+            # Without this adjustment, the 'service_to_daemon_types' lookup would fail, as
+            # it would be searching for a non-existent entry called 'exporter
+            if p['labels']['app'] == 'rook-ceph-exporter':
+                sd.daemon_type = 'ceph-exporter'
+            else:
+                sd.daemon_type = p['labels']['app'].replace('rook-ceph-', '')
+
             status = {
                 'Pending': orchestrator.DaemonDescriptionStatus.starting,
                 'Running': orchestrator.DaemonDescriptionStatus.running,
index c89b38f8d86816948bda56aabdd4c515fa4892bc..5c7c9fc0477f903824cabcfd8653aa20289d8cc5 100644 (file)
@@ -97,13 +97,15 @@ def threaded(f: Callable[..., None]) -> Callable[..., threading.Thread]:
 
 
 class DefaultFetcher():
-    def __init__(self, storage_class: str, coreV1_api: 'client.CoreV1Api'):
-        self.storage_class = storage_class
+    def __init__(self, storage_class_name: str, coreV1_api: 'client.CoreV1Api', rook_env: 'RookEnv'):
+        self.storage_class_name = storage_class_name
         self.coreV1_api = coreV1_api
+        self.rook_env = rook_env
+        self.pvs_in_sc: List[client.V1PersistentVolumeList] = []
 
     def fetch(self) -> None:
         self.inventory: KubernetesResource[client.V1PersistentVolumeList] = KubernetesResource(self.coreV1_api.list_persistent_volume)
-        self.pvs_in_sc = [i for i in self.inventory.items if i.spec.storage_class_name == self.storage_class]
+        self.pvs_in_sc = [i for i in self.inventory.items if i.spec.storage_class_name == self.storage_class_name]
 
     def convert_size(self, size_str: str) -> int:
         units = ("", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "", "K", "M", "G", "T", "P", "E")
@@ -148,11 +150,11 @@ class DefaultFetcher():
                 available = state,
         )
         return (node, device)
-        
+
 
 class LSOFetcher(DefaultFetcher):
-    def __init__(self, storage_class: 'str', coreV1_api: 'client.CoreV1Api', customObjects_api: 'client.CustomObjectsApi', nodenames: 'Optional[List[str]]' = None):
-        super().__init__(storage_class, coreV1_api)
+    def __init__(self, storage_class: 'str', coreV1_api: 'client.CoreV1Api', rook_env: 'RookEnv', customObjects_api: 'client.CustomObjectsApi', nodenames: 'Optional[List[str]]' = None):
+        super().__init__(storage_class, coreV1_api, rook_env)
         self.customObjects_api = customObjects_api
         self.nodenames = nodenames
 
@@ -219,13 +221,13 @@ class LSOFetcher(DefaultFetcher):
 
 class PDFetcher(DefaultFetcher):
     """ Physical Devices Fetcher"""
-    def __init__(self, coreV1_api: 'client.CoreV1Api'):
-        self.coreV1_api = coreV1_api
+    def __init__(self, coreV1_api: 'client.CoreV1Api', rook_env: 'RookEnv'):
+        super().__init__('', coreV1_api, rook_env)
 
     def fetch(self) -> None:
         """ Collect the devices information from k8s configmaps"""
         self.dev_cms: KubernetesResource = KubernetesResource(self.coreV1_api.list_namespaced_config_map,
-                                                              namespace='rook-ceph',
+                                                              namespace=self.rook_env.operator_namespace,
                                                               label_selector='app=rook-discover')
 
     def devices(self) -> Dict[str, List[Device]]:
@@ -371,9 +373,9 @@ class KubernetesCustomResource(KubernetesResource):
                             self.api_func))
 
 class DefaultCreator():
-    def __init__(self, inventory: 'Dict[str, List[Device]]', coreV1_api: 'client.CoreV1Api', storage_class: 'str'):
+    def __init__(self, inventory: 'Dict[str, List[Device]]', coreV1_api: 'client.CoreV1Api', storage_class_name: 'str'):
         self.coreV1_api = coreV1_api
-        self.storage_class = storage_class
+        self.storage_class_name = storage_class_name
         self.inventory = inventory
 
     def device_to_device_set(self, drive_group: DriveGroupSpec, d: Device) -> ccl.StorageClassDeviceSetsItem:
@@ -390,7 +392,7 @@ class DefaultCreator():
                     name="data"
                 ),
                 spec=ccl.Spec(
-                    storageClassName=self.storage_class,
+                    storageClassName=self.storage_class_name,
                     volumeMode="Block",
                     accessModes=ccl.CrdObjectList(["ReadWriteOnce"]),
                     resources={
@@ -699,7 +701,7 @@ class RookCluster(object):
         storageV1_api: 'client.StorageV1Api',
         appsV1_api: 'client.AppsV1Api',
         rook_env: 'RookEnv',
-        storage_class: 'str'
+        storage_class_name: 'str'
     ):
         self.rook_env = rook_env  # type: RookEnv
         self.coreV1_api = coreV1_api  # client.CoreV1Api
@@ -707,10 +709,11 @@ class RookCluster(object):
         self.customObjects_api = customObjects_api
         self.storageV1_api = storageV1_api  # client.StorageV1Api
         self.appsV1_api = appsV1_api  # client.AppsV1Api
-        self.storage_class = storage_class # type: str
+        self.storage_class_name = storage_class_name # type: str
 
         #  TODO: replace direct k8s calls with Rook API calls
-        self.storage_classes : KubernetesResource = KubernetesResource(self.storageV1_api.list_storage_class)
+        self.available_storage_classes : KubernetesResource = KubernetesResource(self.storageV1_api.list_storage_class)
+        self.configured_storage_classes = self.list_storage_classes()
 
         self.rook_pods: KubernetesResource[client.V1Pod] = KubernetesResource(self.coreV1_api.list_namespaced_pod,
                                                                               namespace=self.rook_env.namespace,
@@ -750,34 +753,57 @@ class RookCluster(object):
     def rook_api_post(self, path: str, **kwargs: Any) -> Any:
         return self.rook_api_call("POST", path, **kwargs)
 
+    def list_storage_classes(self) -> List[str]:
+        try:
+            crd = self.customObjects_api.get_namespaced_custom_object(
+                group="ceph.rook.io",
+                version="v1",
+                namespace=self.rook_env.namespace,
+                plural="cephclusters",
+                name=self.rook_env.cluster_name)
+
+            sc_devicesets = crd['spec']['storage']['storageClassDeviceSets']
+            sc_names = [vct['spec']['storageClassName'] for sc in sc_devicesets for vct in sc['volumeClaimTemplates']]
+            log.info(f"the cluster has the following configured sc: {sc_names}")
+            return sc_names
+        except Exception as e:
+            log.error(f"unable to list storage classes: {e}")
+            return []
+
+    # TODO: remove all the calls to code that uses rook_cluster.storage_class_name
     def get_storage_class(self) -> 'client.V1StorageClass':
-        matching_sc = [i for i in self.storage_classes.items if self.storage_class == i.metadata.name]
+        matching_sc = [i for i in self.available_storage_classes.items if self.storage_class_name == i.metadata.name]
         if len(matching_sc) == 0:
-            log.error(f"No storage class exists matching configured Rook orchestrator storage class which currently is <{self.storage_class}>. This storage class can be set in ceph config (mgr/rook/storage_class)")
+            log.error(f"No storage class exists matching configured Rook orchestrator storage class which currently is <{self.storage_class_name}>. This storage class can be set in ceph config (mgr/rook/storage_class)")
             raise Exception('No storage class exists matching name provided in ceph config at mgr/rook/storage_class')
         return matching_sc[0]
 
     def get_discovered_devices(self, nodenames: Optional[List[str]] = None) -> Dict[str, List[Device]]:
-        self.fetcher: Optional[DefaultFetcher] = None
-        op_settings = self.coreV1_api.read_namespaced_config_map(name="rook-ceph-operator-config", namespace='rook-ceph').data
+        discovered_devices: Dict[str, List[Device]] = {}
+        op_settings = self.coreV1_api.read_namespaced_config_map(name="rook-ceph-operator-config", namespace=self.rook_env.operator_namespace).data
+        fetcher: Optional[DefaultFetcher] = None
         if op_settings.get('ROOK_ENABLE_DISCOVERY_DAEMON', 'false').lower() == 'true':
-            self.fetcher = PDFetcher(self.coreV1_api)
+            fetcher = PDFetcher(self.coreV1_api, self.rook_env)
+            fetcher.fetch()
+            discovered_devices = fetcher.devices()
         else:
-            storage_class = self.get_storage_class()
-            if storage_class.metadata.labels and ('local.storage.openshift.io/owner-name' in storage_class.metadata.labels):
-                self.fetcher = LSOFetcher(self.storage_class, self.coreV1_api, self.customObjects_api, nodenames)
-            else:
-                self.fetcher = DefaultFetcher(self.storage_class, self.coreV1_api)
+            active_storage_classes = [sc for sc in self.available_storage_classes.items if sc.metadata.name in self.configured_storage_classes]
+            for sc in active_storage_classes:
+                if sc.metadata.labels and ('local.storage.openshift.io/owner-name' in sc.metadata.labels):
+                    fetcher = LSOFetcher(sc.metadata.name, self.coreV1_api, self.customObjects_api, nodenames)
+                else:
+                    fetcher = DefaultFetcher(sc.metadata.name, self.coreV1_api, self.rook_env)
+                fetcher.fetch()
+                discovered_devices.update(fetcher.devices())
 
-        self.fetcher.fetch()
-        return self.fetcher.devices()
+        return discovered_devices
 
     def get_osds(self) -> List:
         osd_pods: KubernetesResource = KubernetesResource(self.coreV1_api.list_namespaced_pod,
                                                           namespace=self.rook_env.namespace,
                                                           label_selector='app=rook-ceph-osd')
         return list(osd_pods.items)
-        
+
     def get_nfs_conf_url(self, nfs_cluster: str, instance: str) -> Optional[str]:
         #
         # Fetch cephnfs object for "nfs_cluster" and then return a rados://
@@ -1173,9 +1199,9 @@ class RookCluster(object):
             storage_class.metadata.labels
             and 'local.storage.openshift.io/owner-name' in storage_class.metadata.labels
         ):
-            creator = LSOCreator(inventory, self.coreV1_api, self.storage_class)    
+            creator = LSOCreator(inventory, self.coreV1_api, self.storage_class_name)
         else:
-            creator = DefaultCreator(inventory, self.coreV1_api, self.storage_class)
+            creator = DefaultCreator(inventory, self.coreV1_api, self.storage_class_name)
         return self._patch(
             ccl.CephCluster,
             'cephclusters',
diff --git a/ceph/src/pybind/mgr/rook/tests/fixtures.py b/ceph/src/pybind/mgr/rook/tests/fixtures.py
new file mode 100644 (file)
index 0000000..65a5197
--- /dev/null
@@ -0,0 +1,11 @@
+from rook.module import RookOrchestrator
+from orchestrator import raise_if_exception, OrchResult
+
+try:
+    from typing import Any
+except ImportError:
+    pass
+
+
+def wait(m: RookOrchestrator, c: OrchResult) -> Any:
+    return raise_if_exception(c)
diff --git a/ceph/src/pybind/mgr/rook/tests/test_rook.py b/ceph/src/pybind/mgr/rook/tests/test_rook.py
new file mode 100644 (file)
index 0000000..08028ba
--- /dev/null
@@ -0,0 +1,120 @@
+import orchestrator
+from .fixtures import wait
+import pytest
+from unittest.mock import patch, PropertyMock
+
+from rook.module import RookOrchestrator
+from rook.rook_cluster import RookCluster
+
+
+# we use this intermediate class as .rook_cluster property
+# is read only in the paretn class RookCluster
+class FakeRookCluster(RookCluster):
+    def __init__(self):
+        pass
+
+
+class TestRook(object):
+
+    @pytest.mark.parametrize("pods, expected_daemon_types", [
+        (
+            [
+                {
+                    'name': 'ceph-rook-exporter',
+                    'hostname': 'host1',
+                    "labels": {'app': 'rook-ceph-exporter',
+                               'ceph_daemon_id': 'exporter'},
+                    'phase': 'Pending',
+                    'container_image_name': 'quay.io/ceph/ceph:v18',
+                    'container_image_id': 'docker-pullable://quay.io/ceph/ceph@sha256:f239715e1c7756e32a202a572e2763a4ce15248e09fc6e8990985f8a09ffa784',
+                    'refreshed': 'pod1_ts',
+                    'started': 'pod1_ts',
+                    'created': 'pod1_1ts',
+                },
+                {
+                    'name': 'rook-ceph-mgr-a-68c7b9b6d8-vjjhl',
+                    'hostname': 'host1',
+                    "labels": {'app': 'rook-ceph-mgr',
+                               'ceph_daemon_type': 'mgr',
+                               'ceph_daemon_id': 'a'},
+                    'phase': 'Failed',
+                    'container_image_name': 'quay.io/ceph/ceph:v18',
+                    'container_image_id': '',
+                    'refreshed': 'pod2_ts',
+                    'started': 'pod2_ts',
+                    'created': 'pod2_1ts',
+                },
+                {
+                    'name': 'rook-ceph-mon-a-65fb8694b4-mmtl5',
+                    'hostname': 'host1',
+                    "labels": {'app': 'rook-ceph-mon',
+                               'ceph_daemon_type': 'mon',
+                               'ceph_daemon_id': 'b'},
+                    'phase': 'Running',
+                    'container_image_name': 'quay.io/ceph/ceph:v18',
+                    'container_image_id': '',
+                    'refreshed': 'pod3_ts',
+                    'started': 'pod3_ts',
+                    'created': 'pod3_1ts',
+                },
+                {
+                    'name': 'rook-ceph-osd-0-58cbd7b65c-6cjnr',
+                    'hostname': 'host1',
+                    "labels": {'app': 'rook-ceph-osd',
+                               'ceph-osd-id': '0',
+                               'ceph_daemon_type': 'osd',
+                               'ceph_daemon_id': '0'},
+                    'phase': 'Succeeded',
+                    'container_image_name': 'quay.io/ceph/ceph:v18',
+                    'container_image_id': '',
+                    'refreshed': 'pod4_ts',
+                    'started': 'pod4_ts',
+                    'created': 'pod4_1ts',
+                },
+                # unknown pod: has no labels are provided, it shouldn't
+                #  be part of the output
+                {
+                    'name': 'unknown-pod',
+                    'hostname': '',
+                    "labels": {'app': 'unkwon'},
+                    'phase': 'Pending',
+                    'container_image_name': 'quay.io/ceph/ceph:v18',
+                    'container_image_id': '',
+                    'refreshed': '',
+                    'started': '',
+                    'created': '',
+                }
+            ],
+            ['ceph-exporter', 'mgr', 'mon', 'osd']
+        )
+    ])
+    def test_list_daemons(self, pods, expected_daemon_types):
+
+        status = {
+            'Pending': orchestrator.DaemonDescriptionStatus.starting,
+            'Running': orchestrator.DaemonDescriptionStatus.running,
+            'Succeeded': orchestrator.DaemonDescriptionStatus.stopped,
+            'Failed': orchestrator.DaemonDescriptionStatus.error,
+            'Unknown': orchestrator.DaemonDescriptionStatus.unknown,
+        }
+
+        fake_rook_cluster = FakeRookCluster()
+        ro = RookOrchestrator('rook', None, self)
+        with patch('rook.RookOrchestrator.rook_cluster',
+                   new_callable=PropertyMock,
+                   return_value=fake_rook_cluster):
+            with patch.object(fake_rook_cluster, 'describe_pods') as mock_describe_pods:
+                mock_describe_pods.return_value = pods
+                dds = wait(ro, ro.list_daemons())
+                assert len(dds) == len(expected_daemon_types)
+                for i in range(0, len(dds)):
+                    assert dds[i].daemon_type == expected_daemon_types[i]
+                    assert dds[i].hostname == pods[i]['hostname']
+                    assert dds[i].status == status[pods[i]['phase']]
+                    assert dds[i].container_image_name == pods[i]['container_image_name']
+                    assert dds[i].container_image_id == pods[i]['container_image_id']
+                    assert dds[i].created == pods[i]['created']
+                    assert dds[i].last_configured == pods[i]['created']
+                    assert dds[i].last_deployed == pods[i]['created']
+                    assert dds[i].started == pods[i]['started']
+                    assert dds[i].last_refresh == pods[i]['refreshed']
index fae4491bdd9e798a7ebb8445e86d861f310736dc..28d54639a3e0ae913264ff6e5983a28e4845cd55 100644 (file)
@@ -19,7 +19,6 @@ from .schedule import Schedule
 import traceback
 
 
-MAX_SNAPS_PER_PATH = 50
 SNAP_SCHEDULE_NAMESPACE = 'cephfs-snap-schedule'
 SNAP_DB_PREFIX = 'snap_db'
 # increment this every time the db schema changes and provide upgrade code
@@ -72,7 +71,8 @@ def updates_schedule_db(func: FuncT) -> FuncT:
 
 
 def get_prune_set(candidates: Set[Tuple[cephfs.DirEntry, datetime]],
-                  retention: Dict[str, int]) -> Set:
+                  retention: Dict[str, int],
+                  max_snaps_to_retain: int) -> Set:
     PRUNING_PATTERNS = OrderedDict([
         # n is for keep last n snapshots, uses the snapshot name timestamp
         # format for lowest granularity
@@ -88,8 +88,8 @@ def get_prune_set(candidates: Set[Tuple[cephfs.DirEntry, datetime]],
     ])
     keep = []
     if not retention:
-        log.info(f'no retention set, assuming n: {MAX_SNAPS_PER_PATH}')
-        retention = {'n': MAX_SNAPS_PER_PATH}
+        log.info(f'no retention set, assuming n: {max_snaps_to_retain}')
+        retention = {'n': max_snaps_to_retain}
     for period, date_pattern in PRUNING_PATTERNS.items():
         log.debug(f'compiling keep set for period {period}')
         period_count = retention.get(period, 0)
@@ -111,10 +111,10 @@ def get_prune_set(candidates: Set[Tuple[cephfs.DirEntry, datetime]],
                         log.debug(('found enough snapshots for '
                                    f'{period_count}{period}'))
                         break
-    if len(keep) > MAX_SNAPS_PER_PATH:
-        log.info((f'Would keep more then {MAX_SNAPS_PER_PATH}, '
-                  'pruning keep set'))
-        keep = keep[:MAX_SNAPS_PER_PATH]
+    if len(keep) > max_snaps_to_retain:
+        log.info(f'Pruning keep set; would retain first {max_snaps_to_retain}'
+                 f' out of {len(keep)} snaps')
+        keep = keep[:max_snaps_to_retain]
     return candidates - set(keep)
 
 def snap_name_to_timestamp(scheduled_snap_name: str) -> str:
@@ -324,6 +324,7 @@ class SnapSchedClient(CephfsClient):
             path = sched.path
             prune_candidates = set()
             time = datetime.now(timezone.utc)
+            mds_max_snaps_per_dir = self.mgr.get_ceph_option('mds_max_snaps_per_dir')
             with open_filesystem(self, sched.fs) as fs_handle:
                 snap_dir = self.mgr.rados.conf_get('client_snapdir')
                 with fs_handle.opendir(f'{path}/{snap_dir}') as d_handle:
@@ -337,7 +338,9 @@ class SnapSchedClient(CephfsClient):
                         else:
                             log.debug(f'skipping dir entry {dir_.d_name}')
                         dir_ = fs_handle.readdir(d_handle)
-                to_prune = get_prune_set(prune_candidates, ret)
+                # Limit ourselves to one snapshot less than allowed by config to allow for
+                # snapshot creation before pruning
+                to_prune = get_prune_set(prune_candidates, ret, mds_max_snaps_per_dir - 1)
                 for k in to_prune:
                     dirname = k[0].d_name.decode('utf-8')
                     log.debug(f'rmdir on {dirname}')
index 572e26815c00e057c85db9bf2a52b2d84b85cb50..b691572b64f64aa4e7b570c4999a5471d618b007 100644 (file)
@@ -38,14 +38,24 @@ class Module(MgrModule):
         self.client = SnapSchedClient(self)
 
     @property
-    def default_fs(self) -> str:
+    def _default_fs(self) -> Tuple[int, str, str]:
         fs_map = self.get('fs_map')
-        if fs_map['filesystems']:
-            return fs_map['filesystems'][0]['mdsmap']['fs_name']
+        if len(fs_map['filesystems']) > 1:
+            return -errno.EINVAL, '', "filesystem argument is required when there is more than one file system"
+        elif len(fs_map['filesystems']) == 1:
+            return 0, fs_map['filesystems'][0]['mdsmap']['fs_name'], "Success"
         else:
             self.log.error('No filesystem instance could be found.')
-            raise CephfsConnectionException(
-                -errno.ENOENT, "no filesystem found")
+            return -errno.ENOENT, "", "no filesystem found"
+
+    def _validate_fs(self, fs: Optional[str]) -> Tuple[int, str, str]:
+        if not fs:
+            rc, fs, err = self._default_fs
+            if rc < 0:
+                return rc, fs, err
+        if not self.has_fs(fs):
+            return -errno.EINVAL, '', f"no such file system: {fs}"
+        return 0, fs, 'Success'
 
     def has_fs(self, fs_name: str) -> bool:
         return fs_name in self.client.get_all_filesystems()
@@ -65,11 +75,11 @@ class Module(MgrModule):
         '''
         List current snapshot schedules
         '''
-        use_fs = fs if fs else self.default_fs
-        if not self.has_fs(use_fs):
-            return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
+        rc, fs, err = self._validate_fs(fs)
+        if rc < 0:
+            return rc, fs, err
         try:
-            ret_scheds = self.client.get_snap_schedules(use_fs, path)
+            ret_scheds = self.client.get_snap_schedules(fs, path)
         except CephfsConnectionException as e:
             return e.to_tuple()
         if format == 'json':
@@ -85,11 +95,11 @@ class Module(MgrModule):
         '''
         Get current snapshot schedule for <path>
         '''
+        rc, fs, err = self._validate_fs(fs)
+        if rc < 0:
+            return rc, fs, err
         try:
-            use_fs = fs if fs else self.default_fs
-            if not self.has_fs(use_fs):
-                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
-            scheds = self.client.list_snap_schedules(use_fs, path, recursive)
+            scheds = self.client.list_snap_schedules(fs, path, recursive)
             self.log.debug(f'recursive is {recursive}')
         except CephfsConnectionException as e:
             return e.to_tuple()
@@ -115,19 +125,19 @@ class Module(MgrModule):
         '''
         Set a snapshot schedule for <path>
         '''
+        rc, fs, err = self._validate_fs(fs)
+        if rc < 0:
+            return rc, fs, err
         try:
-            use_fs = fs if fs else self.default_fs
-            if not self.has_fs(use_fs):
-                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = path
             subvol = None
-            self.client.store_snap_schedule(use_fs,
+            self.client.store_snap_schedule(fs,
                                             abs_path,
                                             (abs_path, snap_schedule,
-                                             use_fs, path, start, subvol))
+                                             fs, path, start, subvol))
             suc_msg = f'Schedule set for path {path}'
         except sqlite3.IntegrityError:
-            existing_scheds = self.client.get_snap_schedules(use_fs, path)
+            existing_scheds = self.client.get_snap_schedules(fs, path)
             report = [s.report() for s in existing_scheds]
             error_msg = f'Found existing schedule {report}'
             self.log.error(error_msg)
@@ -147,16 +157,16 @@ class Module(MgrModule):
         '''
         Remove a snapshot schedule for <path>
         '''
+        rc, fs, err = self._validate_fs(fs)
+        if rc < 0:
+            return rc, fs, err
         try:
-            use_fs = fs if fs else self.default_fs
-            if not self.has_fs(use_fs):
-                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = path
-            self.client.rm_snap_schedule(use_fs, abs_path, repeat, start)
-        except CephfsConnectionException as e:
-            return e.to_tuple()
+            self.client.rm_snap_schedule(fs, abs_path, repeat, start)
         except ValueError as e:
             return -errno.ENOENT, '', str(e)
+        except CephfsConnectionException as e:
+            return e.to_tuple()
         return 0, 'Schedule removed for path {}'.format(path), ''
 
     @CLIWriteCommand('fs snap-schedule retention add')
@@ -168,18 +178,18 @@ class Module(MgrModule):
         '''
         Set a retention specification for <path>
         '''
+        rc, fs, err = self._validate_fs(fs)
+        if rc < 0:
+            return rc, fs, err
         try:
-            use_fs = fs if fs else self.default_fs
-            if not self.has_fs(use_fs):
-                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = path
-            self.client.add_retention_spec(use_fs, abs_path,
-                                          retention_spec_or_period,
-                                          retention_count)
-        except CephfsConnectionException as e:
-            return e.to_tuple()
+            self.client.add_retention_spec(fs, abs_path,
+                                           retention_spec_or_period,
+                                           retention_count)
         except ValueError as e:
             return -errno.ENOENT, '', str(e)
+        except CephfsConnectionException as e:
+            return e.to_tuple()
         return 0, 'Retention added to path {}'.format(path), ''
 
     @CLIWriteCommand('fs snap-schedule retention remove')
@@ -191,12 +201,12 @@ class Module(MgrModule):
         '''
         Remove a retention specification for <path>
         '''
+        rc, fs, err = self._validate_fs(fs)
+        if rc < 0:
+            return rc, fs, err
         try:
-            use_fs = fs if fs else self.default_fs
-            if not self.has_fs(use_fs):
-                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = path
-            self.client.rm_retention_spec(use_fs, abs_path,
+            self.client.rm_retention_spec(fs, abs_path,
                                           retention_spec_or_period,
                                           retention_count)
         except CephfsConnectionException as e:
@@ -214,16 +224,16 @@ class Module(MgrModule):
         '''
         Activate a snapshot schedule for <path>
         '''
+        rc, fs, err = self._validate_fs(fs)
+        if rc < 0:
+            return rc, fs, err
         try:
-            use_fs = fs if fs else self.default_fs
-            if not self.has_fs(use_fs):
-                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = path
-            self.client.activate_snap_schedule(use_fs, abs_path, repeat, start)
-        except CephfsConnectionException as e:
-            return e.to_tuple()
+            self.client.activate_snap_schedule(fs, abs_path, repeat, start)
         except ValueError as e:
             return -errno.ENOENT, '', str(e)
+        except CephfsConnectionException as e:
+            return e.to_tuple()
         return 0, 'Schedule activated for path {}'.format(path), ''
 
     @CLIWriteCommand('fs snap-schedule deactivate')
@@ -235,14 +245,14 @@ class Module(MgrModule):
         '''
         Deactivate a snapshot schedule for <path>
         '''
+        rc, fs, err = self._validate_fs(fs)
+        if rc < 0:
+            return rc, fs, err
         try:
-            use_fs = fs if fs else self.default_fs
-            if not self.has_fs(use_fs):
-                return -errno.EINVAL, '', f"no such filesystem: {use_fs}"
             abs_path = path
-            self.client.deactivate_snap_schedule(use_fs, abs_path, repeat, start)
-        except CephfsConnectionException as e:
-            return e.to_tuple()
+            self.client.deactivate_snap_schedule(fs, abs_path, repeat, start)
         except ValueError as e:
             return -errno.ENOENT, '', str(e)
+        except CephfsConnectionException as e:
+            return e.to_tuple()
         return 0, 'Schedule deactivated for path {}'.format(path), ''
index 02996146b2698c867659ab01d2c1efd977d89a97..177e8cd9f3ba4807a31b5d47c120c9ea920d5b1b 100644 (file)
@@ -15,7 +15,7 @@ class TestScheduleClient(object):
             fake_dir.d_name = f'scheduled-{ts.strftime(SNAPSHOT_TS_FORMAT)}'
             candidates.add((fake_dir, ts))
         ret = {}
-        prune_set = get_prune_set(candidates, ret)
+        prune_set = get_prune_set(candidates, ret, 99)
         assert prune_set == set(), 'candidates are pruned despite empty retention'
 
     def test_get_prune_set_two_retention_specs(self):
@@ -33,5 +33,5 @@ class TestScheduleClient(object):
             candidates.add((fake_dir, ts))
         # should keep 8 snapshots
         ret = {'h': 6, 'd': 2}
-        prune_set = get_prune_set(candidates, ret)
+        prune_set = get_prune_set(candidates, ret, 99)
         assert len(prune_set) == len(candidates) - 8, 'wrong size of prune set'
index f640f1d3a0fd82f5ec1768472bb36e0155bde7ce..541ddba4f0737ed544156e7b8787f146ce2f0230 100644 (file)
@@ -72,7 +72,7 @@ class Module(MgrModule):
                 }
 
     def get_daemon_stats(self) -> Iterable[Dict[str, Any]]:
-        for daemon, counters in self.get_all_perf_counters().items():
+        for daemon, counters in self.get_unlabeled_perf_counters().items():
             svc_type, svc_id = daemon.split('.', 1)
             metadata = self.get_metadata(svc_type, svc_id)
             if not metadata:
index cd431a2e1cc697e5ce4c0d5fbadd654dc2ce11f6..f729b9180cfb64538f5f036dc79b8e4fe7bbf4ce 100644 (file)
@@ -794,7 +794,7 @@ class Module(MgrModule):
         return crashlist
 
     def gather_perf_counters(self, mode: str = 'separated') -> Dict[str, dict]:
-        # Extract perf counter data with get_all_perf_counters(), a method
+        # Extract perf counter data with get_unlabeled_perf_counters(), a method
         # from mgr/mgr_module.py. This method returns a nested dictionary that
         # looks a lot like perf schema, except with some additional fields.
         #
@@ -810,7 +810,7 @@ class Module(MgrModule):
         #           "value": 88814109
         #       },
         #   },
-        all_perf_counters = self.get_all_perf_counters()
+        perf_counters = self.get_unlabeled_perf_counters()
 
         # Initialize 'result' dict
         result: Dict[str, dict] = defaultdict(lambda: defaultdict(
@@ -819,7 +819,7 @@ class Module(MgrModule):
         # 'separated' mode
         anonymized_daemon_dict = {}
 
-        for daemon, all_perf_counters_by_daemon in all_perf_counters.items():
+        for daemon, perf_counters_by_daemon in perf_counters.items():
             daemon_type = daemon[0:3] # i.e. 'mds', 'osd', 'rgw'
 
             if mode == 'separated':
@@ -836,7 +836,7 @@ class Module(MgrModule):
                 else:
                     result[daemon_type]['num_combined_daemons'] += 1
 
-            for collection in all_perf_counters_by_daemon:
+            for collection in perf_counters_by_daemon:
                 # Split the collection to avoid redundancy in final report; i.e.:
                 #   bluestore.kv_flush_lat, bluestore.kv_final_lat -->
                 #   bluestore: kv_flush_lat, kv_final_lat
@@ -856,12 +856,12 @@ class Module(MgrModule):
                 if mode == 'separated':
                     # Add value to result
                     result[daemon][col_0][col_1]['value'] = \
-                            all_perf_counters_by_daemon[collection]['value']
+                            perf_counters_by_daemon[collection]['value']
 
                     # Check that 'count' exists, as not all counters have a count field.
-                    if 'count' in all_perf_counters_by_daemon[collection]:
+                    if 'count' in perf_counters_by_daemon[collection]:
                         result[daemon][col_0][col_1]['count'] = \
-                                all_perf_counters_by_daemon[collection]['count']
+                                perf_counters_by_daemon[collection]['count']
                 elif mode == 'aggregated':
                     # Not every rgw daemon has the same schema. Specifically, each rgw daemon
                     # has a uniquely-named collection that starts off identically (i.e.
@@ -875,14 +875,14 @@ class Module(MgrModule):
                     # the files are of type 'pair' (real-integer-pair, integer-integer pair).
                     # In those cases, the value is a dictionary, and not a number.
                     #   i.e. throttle-msgr_dispatch_throttler-hbserver["wait"]
-                    if isinstance(all_perf_counters_by_daemon[collection]['value'], numbers.Number):
+                    if isinstance(perf_counters_by_daemon[collection]['value'], numbers.Number):
                         result[daemon_type][col_0][col_1]['value'] += \
-                                all_perf_counters_by_daemon[collection]['value']
+                                perf_counters_by_daemon[collection]['value']
 
                     # Check that 'count' exists, as not all counters have a count field.
-                    if 'count' in all_perf_counters_by_daemon[collection]:
+                    if 'count' in perf_counters_by_daemon[collection]:
                         result[daemon_type][col_0][col_1]['count'] += \
-                                all_perf_counters_by_daemon[collection]['count']
+                                perf_counters_by_daemon[collection]['count']
                 else:
                     self.log.error('Incorrect mode specified in gather_perf_counters: {}'.format(mode))
                     return {}
index b781d1be67feceb0f3d185a740a9e7c2afa2997c..6270dbdca51e3b1cbcee059a5d68295d0b5e5141 100644 (file)
@@ -49,6 +49,7 @@ setenv =
     UNITTEST = true
     PYTHONPATH = $PYTHONPATH:..
 deps =
+    behave
     -rrequirements.txt
     -rrook/requirements.txt
 commands =
@@ -59,7 +60,7 @@ setenv =
     UNITTEST = true
     PYTHONPATH = $PYTHONPATH:..
 deps =
-    -rrequirements-required.txt
+    -rrequirements.txt
 commands =
     pytest {posargs:cephadm/tests/test_ssh.py}
 
index a91764e76fe247607b02c03bf05892afe296fec2..f1d998c85b8ff3686ba87bd557990b05155d53f1 100644 (file)
@@ -35,7 +35,7 @@ class JobThread(threading.Thread):
             vol_job = None
             try:
                 # fetch next job to execute
-                with self.async_job.lock:
+                with lock_timeout_log(self.async_job.lock):
                     while True:
                         if self.should_reconfigure_num_threads():
                             log.info("thread [{0}] terminating due to reconfigure".format(thread_name))
@@ -64,12 +64,12 @@ class JobThread(threading.Thread):
             finally:
                 # when done, unregister the job
                 if vol_job:
-                    with self.async_job.lock:
+                    with lock_timeout_log(self.async_job.lock):
                         self.async_job.unregister_async_job(vol_job[0], vol_job[1], thread_id)
                 time.sleep(1)
         log.error("thread [{0}] reached exception limit, bailing out...".format(thread_name))
         self.vc.cluster_log("thread {0} bailing out due to exception".format(thread_name))
-        with self.async_job.lock:
+        with lock_timeout_log(self.async_job.lock):
             self.async_job.threads.remove(self)
 
     def should_reconfigure_num_threads(self):
@@ -150,7 +150,7 @@ class AsyncJobs(threading.Thread):
     def shutdown(self):
         self.stopping.set()
         self.cancel_all_jobs()
-        with self.lock:
+        with lock_timeout_log(self.lock):
             self.cv.notifyAll()
         self.join()
 
index be0a06acdd8997d2d7de06dffe653038e6d58c39..e37bfe29d06b7e2c650b629b20b7439936c1381e 100644 (file)
@@ -11,9 +11,10 @@ from .exception import VolumeException
 
 log = logging.getLogger(__name__)
 
-def create_pool(mgr, pool_name):
+def create_pool(mgr, pool_name, **extra_args):
     # create the given pool
-    command = {'prefix': 'osd pool create', 'pool': pool_name}
+    command = extra_args
+    command.update({'prefix': 'osd pool create', 'pool': pool_name})
     return mgr.mon_command(command)
 
 def remove_pool(mgr, pool_name):
@@ -68,11 +69,12 @@ def volume_exists(mgr, fs_name):
             return True
     return False
 
-def listdir(fs, dirpath, filter_entries=None):
+def listdir(fs, dirpath, filter_entries=None, filter_files=True):
     """
-    Get the directory names (only dirs) for a given path
+    Get the directory entries for a given path. List only dirs if 'filter_files' is True.
+    Don't list the entries passed in 'filter_entries'
     """
-    dirs = []
+    entries = []
     if filter_entries is None:
         filter_entries = [b".", b".."]
     else:
@@ -81,12 +83,15 @@ def listdir(fs, dirpath, filter_entries=None):
         with fs.opendir(dirpath) as dir_handle:
             d = fs.readdir(dir_handle)
             while d:
-                if (d.d_name not in filter_entries) and d.is_dir():
-                    dirs.append(d.d_name)
+                if (d.d_name not in filter_entries):
+                    if not filter_files:
+                        entries.append(d.d_name)
+                    elif d.is_dir():
+                        entries.append(d.d_name)
                 d = fs.readdir(dir_handle)
     except cephfs.Error as e:
         raise VolumeException(-e.args[0], e.args[1])
-    return dirs
+    return entries
 
 
 def has_subdir(fs, dirpath, filter_entries=None):
index e6e374992fb0bf6bd090a117bfaf870743f7cfed..395a3fb4ea07265e10f1fc409b304bcae9b31ecd 100644 (file)
@@ -11,7 +11,7 @@ import orchestrator
 from .lock import GlobalLock
 from ..exception import VolumeException
 from ..fs_util import create_pool, remove_pool, rename_pool, create_filesystem, \
-    remove_filesystem, rename_filesystem, create_mds, volume_exists
+    remove_filesystem, rename_filesystem, create_mds, volume_exists, listdir
 from .trash import Trash
 from mgr_util import open_filesystem, CephfsConnectionException
 
@@ -80,7 +80,9 @@ def create_volume(mgr, volname, placement):
     r, outb, outs = create_pool(mgr, metadata_pool)
     if r != 0:
         return r, outb, outs
-    r, outb, outs = create_pool(mgr, data_pool)
+    # default to a bulk pool for data. In case autoscaling has been disabled
+    # for the cluster with `ceph osd pool set noautoscale`, this will have no effect.
+    r, outb, outs = create_pool(mgr, data_pool, bulk=True)
     if r != 0:
         #cleanup
         remove_pool(mgr, metadata_pool)
@@ -244,15 +246,15 @@ def list_volumes(mgr):
     return result
 
 
-def get_pending_subvol_deletions_count(path):
+def get_pending_subvol_deletions_count(fs, path):
     """
     Get the number of pending subvolumes deletions.
     """
     trashdir = os.path.join(path, Trash.GROUP_NAME)
     try:
-        num_pending_subvol_del = len(os.listdir(trashdir))
-    except OSError as e:
-        if e.errno == errno.ENOENT:
+        num_pending_subvol_del = len(listdir(fs, trashdir, filter_entries=None, filter_files=False))
+    except VolumeException as ve:
+        if ve.errno == -errno.ENOENT:
             num_pending_subvol_del = 0
 
     return {'pending_subvolume_deletions': num_pending_subvol_del}
index 99764bfcfd2c31c8a87cace688c71584f662d369..5c6642444b116b2f4b4f4cc109c3a356ee5190f7 100644 (file)
@@ -152,7 +152,7 @@ class VolumeClient(CephfsClient["Module"]):
                                          cephfs.AT_SYMLINK_NOFOLLOW)
 
                     usedbytes = st['size']
-                    vol_info_dict = get_pending_subvol_deletions_count(path)
+                    vol_info_dict = get_pending_subvol_deletions_count(fs_handle, path)
                     if human_readable:
                         vol_info_dict['used_size'] = mgr_util.format_bytes(int(usedbytes), 5)
                     else:
index 5e14e38c919754c2b7d36e82816a3c5271862266..4ef3922eb6167a7af8e9b29e9c36dfc705e39fd9 100644 (file)
@@ -4511,13 +4511,18 @@ written." % (self.name, ret, length))
         def oncomplete_(completion_v):
             cdef:
                 Completion _completion_v = completion_v
-                rbd_mirror_image_info_t *c_info = <rbd_mirror_image_info_t *>_completion_v.buf
-            info = {
-                'global_id' : decode_cstr(c_info[0].global_id),
-                'state'     : int(c_info[0].state),
-                'primary'   : c_info[0].primary,
-            }
-            rbd_mirror_image_get_info_cleanup(c_info)
+                rbd_mirror_image_info_t *c_info
+            return_value = _completion_v.get_return_value()
+            if return_value == 0:
+                c_info = <rbd_mirror_image_info_t *>_completion_v.buf
+                info = {
+                    'global_id' : decode_cstr(c_info[0].global_id),
+                    'state'     : int(c_info[0].state),
+                    'primary'   : c_info[0].primary,
+                }
+                rbd_mirror_image_get_info_cleanup(c_info)
+            else:
+                info = None
             return oncomplete(_completion_v, info)
 
         completion = self.__get_completion(oncomplete_)
index 7ac9759523dd8bb9f1b321d4a46915a9de97b858..cf24fc0efa7589050607664b384c9d1f5a88bd41 100644 (file)
@@ -2,7 +2,12 @@ import enum
 import yaml
 
 from ceph.deployment.inventory import Device
-from ceph.deployment.service_spec import ServiceSpec, PlacementSpec, CustomConfig
+from ceph.deployment.service_spec import (
+    CustomConfig,
+    GeneralArgList,
+    PlacementSpec,
+    ServiceSpec,
+)
 from ceph.deployment.hostspec import SpecValidationError
 
 try:
@@ -190,8 +195,8 @@ class DriveGroupSpec(ServiceSpec):
                  unmanaged=False,  # type: bool
                  filter_logic='AND',  # type: str
                  preview_only=False,  # type: bool
-                 extra_container_args=None,  # type: Optional[List[str]]
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  data_allocate_fraction=None,  # type: Optional[float]
                  method=None,  # type: Optional[OSDMethod]
                  config=None,  # type: Optional[Dict[str, str]]
@@ -288,8 +293,8 @@ class DriveGroupSpec(ServiceSpec):
         # spec: was not mandatory in octopus
         if 'spec' in args:
             args['spec'].update(cls._drive_group_spec_from_json(s_id, args['spec']))
-        else:
-            args.update(cls._drive_group_spec_from_json(s_id, args))
+        args.update(cls._drive_group_spec_from_json(
+                    s_id, {k: v for k, v in args.items() if k != 'spec'}))
 
         return super(DriveGroupSpec, cls)._from_json_impl(args)
 
index d6556dd2c0a557c73d231bf8147093f7dc44a401..1b3bfbb4ee3c5772bb61a9d6cd502b83b49d1e28 100644 (file)
@@ -71,7 +71,7 @@ class DriveSelection(object):
         limit = device_filter.limit or 0
 
         if limit > 0 and (len_devices + self.existing_daemons >= limit):
-            logger.info("Refuse to add {} due to limit policy of <{}>".format(
+            logger.debug("Refuse to add {} due to limit policy of <{}>".format(
                 disk_path, limit))
             return True
         return False
@@ -131,9 +131,10 @@ class DriveSelection(object):
             if not disk.available and disk.ceph_device and disk.lvs:
                 other_osdspec_affinity = ''
                 for lv in disk.lvs:
-                    if lv['osdspec_affinity'] != self.spec.service_id:
-                        other_osdspec_affinity = lv['osdspec_affinity']
-                        break
+                    if 'osdspec_affinity' in lv.keys():
+                        if lv['osdspec_affinity'] != self.spec.service_id:
+                            other_osdspec_affinity = lv['osdspec_affinity']
+                            break
                 if other_osdspec_affinity:
                     logger.debug("{} is already used in spec {}, "
                                  "skipping it.".format(disk.path, other_osdspec_affinity))
index df99e3bbee201e51b200bb35db309ce81649edd7..be9f3e8ea584ebb6c2f879db79af6bf551b2f50b 100644 (file)
@@ -486,21 +486,147 @@ def service_spec_allow_invalid_from_json() -> Iterator[None]:
     _service_spec_from_json_validate = True
 
 
+class ArgumentSpec:
+    """The ArgumentSpec type represents an argument that can be
+    passed to an underyling subsystem, like a container engine or
+    another command line tool.
+
+    The ArgumentSpec aims to be backwards compatible with the previous
+    form of argument, a single string. The string was always assumed
+    to be indentended to be split on spaces. For example:
+    `--cpus 8` becomes `["--cpus", "8"]`. This type is converted from
+    either a string or an json/yaml object. In the object form you
+    can choose if the string part should be split so an argument like
+    `--migrate-from=//192.168.5.22/My Documents` can be expressed.
+    """
+    _fields = ['argument', 'split']
+
+    class OriginalType(enum.Enum):
+        OBJECT = 0
+        STRING = 1
+
+    def __init__(
+        self,
+        argument: str,
+        split: bool = False,
+        *,
+        origin: OriginalType = OriginalType.OBJECT,
+    ) -> None:
+        self.argument = argument
+        self.split = bool(split)
+        # origin helps with round-tripping between inputs that
+        # are simple strings or objects (dicts)
+        self._origin = origin
+        self.validate()
+
+    def to_json(self) -> Union[str, Dict[str, Any]]:
+        """Return a json-safe represenation of the ArgumentSpec."""
+        if self._origin == self.OriginalType.STRING:
+            return self.argument
+        return {
+            'argument': self.argument,
+            'split': self.split,
+        }
+
+    def to_args(self) -> List[str]:
+        """Convert this ArgumentSpec into a list of arguments suitable for
+        adding to an argv-style command line.
+        """
+        if not self.split:
+            return [self.argument]
+        return [part for part in self.argument.split(" ") if part]
+
+    def __eq__(self, other: Any) -> bool:
+        if isinstance(other, ArgumentSpec):
+            return (
+                self.argument == other.argument
+                and self.split == other.split
+            )
+        if isinstance(other, object):
+            # This is a workaround for silly ceph mgr object/type identity
+            # mismatches due to multiple python interpreters in use.
+            try:
+                argument = getattr(other, 'argument')
+                split = getattr(other, 'split')
+                return (self.argument == argument and self.split == split)
+            except AttributeError:
+                pass
+        return NotImplemented
+
+    def __repr__(self) -> str:
+        return f'ArgumentSpec({self.argument!r}, {self.split!r})'
+
+    def validate(self) -> None:
+        if not isinstance(self.argument, str):
+            raise SpecValidationError(
+                    f'ArgumentSpec argument must be a string. Got {type(self.argument)}')
+        if not isinstance(self.split, bool):
+            raise SpecValidationError(
+                    f'ArgumentSpec split must be a boolean. Got {type(self.split)}')
+
+    @classmethod
+    def from_json(cls, data: Union[str, Dict[str, Any]]) -> "ArgumentSpec":
+        """Convert a json-object (dict) to an ArgumentSpec."""
+        if isinstance(data, str):
+            return cls(data, split=True, origin=cls.OriginalType.STRING)
+        if 'argument' not in data:
+            raise SpecValidationError(f'ArgumentSpec must have an "argument" field')
+        for k in data.keys():
+            if k not in cls._fields:
+                raise SpecValidationError(f'ArgumentSpec got an unknown field {k!r}')
+        return cls(**data)
+
+    @staticmethod
+    def map_json(
+        values: Optional["ArgumentList"]
+    ) -> Optional[List[Union[str, Dict[str, Any]]]]:
+        """Given a list of ArgumentSpec objects return a json-safe
+        representation.of them."""
+        if values is None:
+            return None
+        return [v.to_json() for v in values]
+
+    @classmethod
+    def from_general_args(cls, data: "GeneralArgList") -> "ArgumentList":
+        """Convert a list of strs, dicts, or existing ArgumentSpec objects
+        to a list of only ArgumentSpec objects.
+        """
+        out: ArgumentList = []
+        for item in data:
+            if isinstance(item, (str, dict)):
+                out.append(cls.from_json(item))
+            elif isinstance(item, cls):
+                out.append(item)
+            elif hasattr(item, 'to_json'):
+                # This is a workaround for silly ceph mgr object/type identity
+                # mismatches due to multiple python interpreters in use.
+                # It should be safe because we already have to be able to
+                # round-trip between json/yaml.
+                out.append(cls.from_json(item.to_json()))
+            else:
+                raise SpecValidationError(f"Unknown type for argument: {type(item)}")
+        return out
+
+
+ArgumentList = List[ArgumentSpec]
+GeneralArgList = List[Union[str, Dict[str, Any], "ArgumentSpec"]]
+
+
 class ServiceSpec(object):
     """
     Details of service creation.
 
     Request to the orchestrator for a cluster of daemons
-    such as MDS, RGW, iscsi gateway, MONs, MGRs, Prometheus
+    such as MDS, RGW, iscsi gateway, nvmeof gateway, MONs, MGRs, Prometheus
 
     This structure is supposed to be enough information to
     start the services.
     """
-    KNOWN_SERVICE_TYPES = 'alertmanager crash grafana iscsi loki promtail mds mgr mon nfs ' \
+    KNOWN_SERVICE_TYPES = 'alertmanager crash grafana iscsi nvmeof loki promtail mds mgr mon nfs ' \
                           'node-exporter osd prometheus rbd-mirror rgw agent ceph-exporter ' \
                           'container ingress cephfs-mirror snmp-gateway jaeger-tracing ' \
                           'elasticsearch jaeger-agent jaeger-collector jaeger-query'.split()
-    REQUIRES_SERVICE_ID = 'iscsi mds nfs rgw container ingress '.split()
+    REQUIRES_SERVICE_ID = 'iscsi nvmeof mds nfs rgw container ingress '.split()
     MANAGED_CONFIG_OPTIONS = [
         'mds_join_fs',
     ]
@@ -516,6 +642,7 @@ class ServiceSpec(object):
             'osd': DriveGroupSpec,
             'mds': MDSSpec,
             'iscsi': IscsiServiceSpec,
+            'nvmeof': NvmeofServiceSpec,
             'alertmanager': AlertManagerSpec,
             'ingress': IngressSpec,
             'container': CustomContainerSpec,
@@ -560,8 +687,8 @@ class ServiceSpec(object):
                  unmanaged: bool = False,
                  preview_only: bool = False,
                  networks: Optional[List[str]] = None,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
 
@@ -576,8 +703,8 @@ class ServiceSpec(object):
         #: ``prometheus``) or (``container``) for custom containers.
         self.service_type = service_type
 
-        #: The name of the service. Required for ``iscsi``, ``mds``, ``nfs``, ``osd``, ``rgw``,
-        #: ``container``, ``ingress``
+        #: The name of the service. Required for ``iscsi``, ``nvmeof``, ``mds``, ``nfs``, ``osd``,
+        #: ``rgw``, ``container``, ``ingress``
         self.service_id = None
 
         if self.service_type in self.REQUIRES_SERVICE_ID or self.service_type == 'osd':
@@ -601,8 +728,14 @@ class ServiceSpec(object):
         if config:
             self.config = {k.replace(' ', '_'): v for k, v in config.items()}
 
-        self.extra_container_args: Optional[List[str]] = extra_container_args
-        self.extra_entrypoint_args: Optional[List[str]] = extra_entrypoint_args
+        self.extra_container_args: Optional[ArgumentList] = None
+        self.extra_entrypoint_args: Optional[ArgumentList] = None
+        if extra_container_args:
+            self.extra_container_args = ArgumentSpec.from_general_args(
+                extra_container_args)
+        if extra_entrypoint_args:
+            self.extra_entrypoint_args = ArgumentSpec.from_general_args(
+                extra_entrypoint_args)
         self.custom_configs: Optional[List[CustomConfig]] = custom_configs
 
     @classmethod
@@ -730,9 +863,13 @@ class ServiceSpec(object):
         if self.networks:
             ret['networks'] = self.networks
         if self.extra_container_args:
-            ret['extra_container_args'] = self.extra_container_args
+            ret['extra_container_args'] = ArgumentSpec.map_json(
+                self.extra_container_args
+            )
         if self.extra_entrypoint_args:
-            ret['extra_entrypoint_args'] = self.extra_entrypoint_args
+            ret['extra_entrypoint_args'] = ArgumentSpec.map_json(
+                self.extra_entrypoint_args
+            )
         if self.custom_configs:
             ret['custom_configs'] = [c.to_json() for c in self.custom_configs]
 
@@ -811,8 +948,9 @@ class NFSServiceSpec(ServiceSpec):
                  networks: Optional[List[str]] = None,
                  port: Optional[int] = None,
                  virtual_ip: Optional[str] = None,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
+                 enable_haproxy_protocol: bool = False,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'nfs'
@@ -824,6 +962,7 @@ class NFSServiceSpec(ServiceSpec):
 
         self.port = port
         self.virtual_ip = virtual_ip
+        self.enable_haproxy_protocol = enable_haproxy_protocol
 
     def get_port_start(self) -> List[int]:
         if self.port:
@@ -882,8 +1021,8 @@ class RGWSpec(ServiceSpec):
                  config: Optional[Dict[str, str]] = None,
                  networks: Optional[List[str]] = None,
                  subcluster: Optional[str] = None,  # legacy, only for from_json on upgrade
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  rgw_realm_token: Optional[str] = None,
                  update_endpoints: Optional[bool] = False,
@@ -959,6 +1098,100 @@ class RGWSpec(ServiceSpec):
 yaml.add_representer(RGWSpec, ServiceSpec.yaml_representer)
 
 
+class NvmeofServiceSpec(ServiceSpec):
+    def __init__(self,
+                 service_type: str = 'nvmeof',
+                 service_id: Optional[str] = None,
+                 name: Optional[str] = None,
+                 group: Optional[str] = None,
+                 port: Optional[int] = None,
+                 pool: Optional[str] = None,
+                 enable_auth: bool = False,
+                 server_key: Optional[str] = None,
+                 server_cert: Optional[str] = None,
+                 client_key: Optional[str] = None,
+                 client_cert: Optional[str] = None,
+                 spdk_path: Optional[str] = None,
+                 tgt_path: Optional[str] = None,
+                 timeout: Optional[int] = 60,
+                 conn_retries: Optional[int] = 10,
+                 transports: Optional[str] = 'tcp',
+                 transport_tcp_options: Optional[Dict[str, int]] =
+                 {"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7},
+                 tgt_cmd_extra_args: Optional[str] = None,
+                 placement: Optional[PlacementSpec] = None,
+                 unmanaged: bool = False,
+                 preview_only: bool = False,
+                 config: Optional[Dict[str, str]] = None,
+                 networks: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
+                 custom_configs: Optional[List[CustomConfig]] = None,
+                 ):
+        assert service_type == 'nvmeof'
+        super(NvmeofServiceSpec, self).__init__('nvmeof', service_id=service_id,
+                                                placement=placement, unmanaged=unmanaged,
+                                                preview_only=preview_only,
+                                                config=config, networks=networks,
+                                                extra_container_args=extra_container_args,
+                                                extra_entrypoint_args=extra_entrypoint_args,
+                                                custom_configs=custom_configs)
+
+        #: RADOS pool where ceph-nvmeof config data is stored.
+        self.pool = pool
+        #: ``port`` port of the nvmeof gateway
+        self.port = port or 5500
+        #: ``name`` name of the nvmeof gateway
+        self.name = name
+        #: ``group`` name of the nvmeof gateway
+        self.group = group
+        #: ``enable_auth`` enables user authentication on nvmeof gateway
+        self.enable_auth = enable_auth
+        #: ``server_key`` gateway server key
+        self.server_key = server_key or './server.key'
+        #: ``server_cert`` gateway server certificate
+        self.server_cert = server_cert or './server.crt'
+        #: ``client_key`` client key
+        self.client_key = client_key or './client.key'
+        #: ``client_cert`` client certificate
+        self.client_cert = client_cert or './client.crt'
+        #: ``spdk_path`` path to SPDK
+        self.spdk_path = spdk_path or '/usr/local/bin/nvmf_tgt'
+        #: ``tgt_path`` nvmeof target path
+        self.tgt_path = tgt_path or '/usr/local/bin/nvmf_tgt'
+        #: ``timeout`` ceph connectivity timeout
+        self.timeout = timeout
+        #: ``conn_retries`` ceph connection retries number
+        self.conn_retries = conn_retries
+        #: ``transports`` tcp
+        self.transports = transports
+        #: List of extra arguments for transports in the form opt=value
+        self.transport_tcp_options: Optional[Dict[str, int]] = transport_tcp_options
+        #: ``tgt_cmd_extra_args`` extra arguments for the nvmf_tgt process
+        self.tgt_cmd_extra_args = tgt_cmd_extra_args
+
+    def get_port_start(self) -> List[int]:
+        return [5500, 4420, 8009]
+
+    def validate(self) -> None:
+        #  TODO: what other parameters should be validated as part of this function?
+        super(NvmeofServiceSpec, self).validate()
+
+        if not self.pool:
+            raise SpecValidationError('Cannot add NVMEOF: No Pool specified')
+
+        if self.enable_auth:
+            if not any([self.server_key, self.server_cert, self.client_key, self.client_cert]):
+                raise SpecValidationError(
+                    'enable_auth is true but client/server certificates are missing')
+
+        if self.transports not in ['tcp']:
+            raise SpecValidationError('Invalid transport. Valid values are tcp')
+
+
+yaml.add_representer(NvmeofServiceSpec, ServiceSpec.yaml_representer)
+
+
 class IscsiServiceSpec(ServiceSpec):
     def __init__(self,
                  service_type: str = 'iscsi',
@@ -976,8 +1209,8 @@ class IscsiServiceSpec(ServiceSpec):
                  preview_only: bool = False,
                  config: Optional[Dict[str, str]] = None,
                  networks: Optional[List[str]] = None,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'iscsi'
@@ -1051,11 +1284,15 @@ class IngressSpec(ServiceSpec):
                  virtual_ip: Optional[str] = None,
                  virtual_ips_list: Optional[List[str]] = None,
                  virtual_interface_networks: Optional[List[str]] = [],
+                 use_keepalived_multicast: Optional[bool] = False,
+                 vrrp_interface_network: Optional[str] = None,
+                 first_virtual_router_id: Optional[int] = 50,
                  unmanaged: bool = False,
                  ssl: bool = False,
                  keepalive_only: bool = False,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
+                 enable_haproxy_protocol: bool = False,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'ingress'
@@ -1082,9 +1319,13 @@ class IngressSpec(ServiceSpec):
         self.virtual_ip = virtual_ip
         self.virtual_ips_list = virtual_ips_list
         self.virtual_interface_networks = virtual_interface_networks or []
+        self.use_keepalived_multicast = use_keepalived_multicast
+        self.vrrp_interface_network = vrrp_interface_network
+        self.first_virtual_router_id = first_virtual_router_id
         self.unmanaged = unmanaged
         self.ssl = ssl
         self.keepalive_only = keepalive_only
+        self.enable_haproxy_protocol = enable_haproxy_protocol
 
     def get_port_start(self) -> List[int]:
         ports = []
@@ -1131,11 +1372,12 @@ class CustomContainerSpec(ServiceSpec):
                  preview_only: bool = False,
                  image: Optional[str] = None,
                  entrypoint: Optional[str] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  uid: Optional[int] = None,
                  gid: Optional[int] = None,
                  volume_mounts: Optional[Dict[str, str]] = {},
-                 args: Optional[List[str]] = [],  # args for the container runtime, not entrypoint
+                 # args are for the container runtime, not entrypoint
+                 args: Optional[GeneralArgList] = [],
                  envs: Optional[List[str]] = [],
                  privileged: Optional[bool] = False,
                  bind_mounts: Optional[List[List[str]]] = None,
@@ -1198,8 +1440,8 @@ class MonitoringSpec(ServiceSpec):
                  unmanaged: bool = False,
                  preview_only: bool = False,
                  port: Optional[int] = None,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type in ['grafana', 'node-exporter', 'prometheus', 'alertmanager',
@@ -1246,8 +1488,8 @@ class AlertManagerSpec(MonitoringSpec):
                  networks: Optional[List[str]] = None,
                  port: Optional[int] = None,
                  secure: bool = False,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'alertmanager'
@@ -1302,8 +1544,8 @@ class GrafanaSpec(MonitoringSpec):
                  protocol: Optional[str] = 'https',
                  initial_admin_password: Optional[str] = None,
                  anonymous_access: Optional[bool] = True,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'grafana'
@@ -1346,8 +1588,8 @@ class PrometheusSpec(MonitoringSpec):
                  port: Optional[int] = None,
                  retention_time: Optional[str] = None,
                  retention_size: Optional[str] = None,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'prometheus'
@@ -1420,8 +1662,8 @@ class SNMPGatewaySpec(ServiceSpec):
                  unmanaged: bool = False,
                  preview_only: bool = False,
                  port: Optional[int] = None,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'snmp-gateway'
@@ -1543,8 +1785,8 @@ class MDSSpec(ServiceSpec):
                  config: Optional[Dict[str, str]] = None,
                  unmanaged: bool = False,
                  preview_only: bool = False,
-                 extra_container_args: Optional[List[str]] = None,
-                 extra_entrypoint_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
+                 extra_entrypoint_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  ):
         assert service_type == 'mds'
@@ -1577,7 +1819,7 @@ class MONSpec(ServiceSpec):
                  unmanaged: bool = False,
                  preview_only: bool = False,
                  networks: Optional[List[str]] = None,
-                 extra_container_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
                  custom_configs: Optional[List[CustomConfig]] = None,
                  crush_locations: Optional[Dict[str, List[str]]] = None,
                  ):
@@ -1737,7 +1979,7 @@ class CephExporterSpec(ServiceSpec):
                  placement: Optional[PlacementSpec] = None,
                  unmanaged: bool = False,
                  preview_only: bool = False,
-                 extra_container_args: Optional[List[str]] = None,
+                 extra_container_args: Optional[GeneralArgList] = None,
                  ):
         assert service_type == 'ceph-exporter'
 
index faa001a0233ab2df72a36122e0f185f7c63a305c..77e9b4083d495d44e0582878b092d97946c7c154 100644 (file)
@@ -35,6 +35,18 @@ data_devices:
   - path: /dev/sda
     crush_device_class: ssd"""
     ),
+    (
+        """service_type: osd
+service_id: testing_drivegroup
+placement:
+  host_pattern: hostname
+spec:
+  osds_per_device: 2
+data_devices:
+  paths:
+  - path: /dev/sda
+    crush_device_class: hdd"""
+    ),
 ])
 def test_DriveGroup(test_input):
 
index a0e0be2aa815be6c84cb67e5b7b588766469829f..502057f5ca3b6c90b86bdd49fe5a3b4375a1f363 100644 (file)
@@ -6,9 +6,19 @@ import yaml
 
 import pytest
 
-from ceph.deployment.service_spec import HostPlacementSpec, PlacementSpec, \
-    ServiceSpec, RGWSpec, NFSServiceSpec, IscsiServiceSpec, AlertManagerSpec, \
-    CustomContainerSpec, GrafanaSpec, PrometheusSpec
+from ceph.deployment.service_spec import (
+    AlertManagerSpec,
+    ArgumentSpec,
+    CustomContainerSpec,
+    GrafanaSpec,
+    HostPlacementSpec,
+    IscsiServiceSpec,
+    NFSServiceSpec,
+    PlacementSpec,
+    PrometheusSpec,
+    RGWSpec,
+    ServiceSpec,
+)
 from ceph.deployment.drive_group import DriveGroupSpec
 from ceph.deployment.hostspec import SpecValidationError
 
@@ -365,6 +375,7 @@ placement:
   - host3
 spec:
   backend_service: rgw.foo
+  first_virtual_router_id: 50
   frontend_port: 8080
   monitor_port: 8081
   virtual_ip: 192.168.20.1/24
@@ -964,3 +975,296 @@ def test_service_spec_validation_error(y, error_match):
     with pytest.raises(SpecValidationError) as err:
         specObj = ServiceSpec.from_json(data)
     assert err.match(error_match)
+
+
+@pytest.mark.parametrize("y, ec_args, ee_args, ec_final_args, ee_final_args", [
+    pytest.param("""
+service_type: container
+service_id: hello-world
+service_name: container.hello-world
+spec:
+  args:
+  - --foo
+  bind_mounts:
+  - - type=bind
+    - source=lib/modules
+    - destination=/lib/modules
+    - ro=true
+  dirs:
+  - foo
+  - bar
+  entrypoint: /usr/bin/bash
+  envs:
+  - FOO=0815
+  files:
+    bar.conf:
+    - foo
+    - bar
+    foo.conf: 'foo
+
+      bar'
+  gid: 2000
+  image: docker.io/library/hello-world:latest
+  ports:
+  - 8080
+  - 8443
+  uid: 1000
+  volume_mounts:
+    foo: /foo
+""",
+    None,
+    None,
+    None,
+    None,
+    id="no_extra_args"),
+    pytest.param("""
+service_type: container
+service_id: hello-world
+service_name: container.hello-world
+spec:
+  args:
+  - --foo
+  extra_entrypoint_args:
+  - "--lasers=blue"
+  - "--enable-confetti"
+  bind_mounts:
+  - - type=bind
+    - source=lib/modules
+    - destination=/lib/modules
+    - ro=true
+  dirs:
+  - foo
+  - bar
+  entrypoint: /usr/bin/bash
+  envs:
+  - FOO=0815
+  files:
+    bar.conf:
+    - foo
+    - bar
+    foo.conf: 'foo
+
+      bar'
+  gid: 2000
+  image: docker.io/library/hello-world:latest
+  ports:
+  - 8080
+  - 8443
+  uid: 1000
+  volume_mounts:
+    foo: /foo
+""",
+    None,
+    ["--lasers=blue", "--enable-confetti"],
+    None,
+    ["--lasers=blue", "--enable-confetti"],
+    id="only_extra_entrypoint_args_spec"),
+    pytest.param("""
+service_type: container
+service_id: hello-world
+service_name: container.hello-world
+spec:
+  args:
+  - --foo
+  bind_mounts:
+  - - type=bind
+    - source=lib/modules
+    - destination=/lib/modules
+    - ro=true
+  dirs:
+  - foo
+  - bar
+  entrypoint: /usr/bin/bash
+  envs:
+  - FOO=0815
+  files:
+    bar.conf:
+    - foo
+    - bar
+    foo.conf: 'foo
+
+      bar'
+  gid: 2000
+  image: docker.io/library/hello-world:latest
+  ports:
+  - 8080
+  - 8443
+  uid: 1000
+  volume_mounts:
+    foo: /foo
+extra_entrypoint_args:
+- "--lasers blue"
+- "--enable-confetti"
+""",
+    None,
+    ["--lasers blue", "--enable-confetti"],
+    None,
+    ["--lasers", "blue", "--enable-confetti"],
+    id="only_extra_entrypoint_args_toplevel"),
+    pytest.param("""
+service_type: nfs
+service_id: mynfs
+service_name: nfs.mynfs
+spec:
+  port: 1234
+  extra_entrypoint_args:
+  - "--lasers=blue"
+  - "--title=Custom NFS Options"
+  extra_container_args:
+  - "--cap-add=CAP_NET_BIND_SERVICE"
+  - "--oom-score-adj=12"
+""",
+    ["--cap-add=CAP_NET_BIND_SERVICE", "--oom-score-adj=12"],
+    ["--lasers=blue", "--title=Custom NFS Options"],
+    ["--cap-add=CAP_NET_BIND_SERVICE", "--oom-score-adj=12"],
+    ["--lasers=blue", "--title=Custom", "NFS", "Options"],
+    id="both_kinds_nfs"),
+    pytest.param("""
+service_type: container
+service_id: hello-world
+service_name: container.hello-world
+spec:
+  args:
+  - --foo
+  bind_mounts:
+  - - type=bind
+    - source=lib/modules
+    - destination=/lib/modules
+    - ro=true
+  dirs:
+  - foo
+  - bar
+  entrypoint: /usr/bin/bash
+  envs:
+  - FOO=0815
+  files:
+    bar.conf:
+    - foo
+    - bar
+    foo.conf: 'foo
+
+      bar'
+  gid: 2000
+  image: docker.io/library/hello-world:latest
+  ports:
+  - 8080
+  - 8443
+  uid: 1000
+  volume_mounts:
+    foo: /foo
+extra_entrypoint_args:
+- argument: "--lasers=blue"
+  split: true
+- argument: "--enable-confetti"
+""",
+    None,
+    [
+        {"argument": "--lasers=blue", "split": True},
+        {"argument": "--enable-confetti", "split": False},
+    ],
+    None,
+    [
+        "--lasers=blue",
+        "--enable-confetti",
+    ],
+    id="only_extra_entrypoint_args_obj_toplevel"),
+    pytest.param("""
+service_type: container
+service_id: hello-world
+service_name: container.hello-world
+spec:
+  args:
+  - --foo
+  bind_mounts:
+  - - type=bind
+    - source=lib/modules
+    - destination=/lib/modules
+    - ro=true
+  dirs:
+  - foo
+  - bar
+  entrypoint: /usr/bin/bash
+  envs:
+  - FOO=0815
+  files:
+    bar.conf:
+    - foo
+    - bar
+    foo.conf: 'foo
+
+      bar'
+  gid: 2000
+  image: docker.io/library/hello-world:latest
+  ports:
+  - 8080
+  - 8443
+  uid: 1000
+  volume_mounts:
+    foo: /foo
+  extra_entrypoint_args:
+  - argument: "--lasers=blue"
+    split: true
+  - argument: "--enable-confetti"
+""",
+    None,
+    [
+        {"argument": "--lasers=blue", "split": True},
+        {"argument": "--enable-confetti", "split": False},
+    ],
+    None,
+    [
+        "--lasers=blue",
+        "--enable-confetti",
+    ],
+    id="only_extra_entrypoint_args_obj_indented"),
+    pytest.param("""
+service_type: nfs
+service_id: mynfs
+service_name: nfs.mynfs
+spec:
+  port: 1234
+extra_entrypoint_args:
+- argument: "--lasers=blue"
+- argument: "--title=Custom NFS Options"
+extra_container_args:
+- argument: "--cap-add=CAP_NET_BIND_SERVICE"
+- argument: "--oom-score-adj=12"
+""",
+    [
+        {"argument": "--cap-add=CAP_NET_BIND_SERVICE", "split": False},
+        {"argument": "--oom-score-adj=12", "split": False},
+    ],
+    [
+        {"argument": "--lasers=blue", "split": False},
+        {"argument": "--title=Custom NFS Options", "split": False},
+    ],
+    [
+        "--cap-add=CAP_NET_BIND_SERVICE",
+        "--oom-score-adj=12",
+    ],
+    [
+        "--lasers=blue",
+        "--title=Custom NFS Options",
+    ],
+    id="both_kinds_obj_nfs"),
+])
+def test_extra_args_handling(y, ec_args, ee_args, ec_final_args, ee_final_args):
+    data = yaml.safe_load(y)
+    spec_obj = ServiceSpec.from_json(data)
+
+    assert ArgumentSpec.map_json(spec_obj.extra_container_args) == ec_args
+    assert ArgumentSpec.map_json(spec_obj.extra_entrypoint_args) == ee_args
+    if ec_final_args is None:
+        assert spec_obj.extra_container_args is None
+    else:
+        ec_res = []
+        for args in spec_obj.extra_container_args:
+            ec_res.extend(args.to_args())
+        assert ec_res == ec_final_args
+    if ee_final_args is None:
+        assert spec_obj.extra_entrypoint_args is None
+    else:
+        ee_res = []
+        for args in spec_obj.extra_entrypoint_args:
+            ee_res.extend(args.to_args())
+        assert ee_res == ee_final_args
index 70e5581b1f122ba1a5414edda7fc3af7cdccf7fa..32cd1ccf95166c63dd45bd376a74d30bb9672aff 100644 (file)
@@ -28,6 +28,14 @@ constexpr uint64_t BUCKET_TAG_QUICK_TIMEOUT = 30;
 
 using namespace std;
 
+// these values are copied from cls/rgw/cls_rgw.cc
+static const string BI_OLH_ENTRY_NS_START = "\x80" "1001_";
+static const string BI_INSTANCE_ENTRY_NS_START = "\x80" "1000_";
+
+// number of characters that we should allow to be buffered by the formatter
+// before flushing (used by index check methods with dump_keys=true)
+static constexpr int FORMATTER_LEN_FLUSH_THRESHOLD = 4 * 1024 * 1024;
+
 // default number of entries to list with each bucket listing call
 // (use marker to bridge between calls)
 static constexpr size_t listing_max_entries = 1000;
@@ -463,6 +471,380 @@ int RGWBucket::check_object_index(const DoutPrefixProvider *dpp,
   return 0;
 }
 
+/**
+ * Loops over all olh entries in a bucket shard and finds ones with
+ * exists=false and pending_removal=true. If the pending log is empty on
+ * these entries, they were left behind after the last remaining version of
+ * an object was deleted or after an incomplete upload. This was known to
+ * happen historically due to concurrency conflicts among requests referencing
+ * the same object key. If op_state.fix_index is true, we continue where the
+ * request left off by calling RGWRados::clear_olh. If the pending log is not
+ * empty, we attempt to apply it.
+ */
+static int check_index_olh(rgw::sal::RadosStore* const rados_store,
+                           rgw::sal::Bucket* const bucket,
+                           const DoutPrefixProvider *dpp,
+                           RGWBucketAdminOpState& op_state,
+                           RGWFormatterFlusher& flusher,
+                           const int shard, 
+                           uint64_t* const count_out,
+                           optional_yield y)
+{
+  string marker = BI_OLH_ENTRY_NS_START;
+  bool is_truncated = true;
+  list<rgw_cls_bi_entry> entries;
+
+  RGWObjectCtx obj_ctx(rados_store);
+  RGWRados* store = rados_store->getRados();
+  RGWRados::BucketShard bs(store);
+
+  int ret = bs.init(dpp, bucket->get_info(), bucket->get_info().layout.current_index, shard);
+  if (ret < 0) {
+    ldpp_dout(dpp, -1) << "ERROR bs.init(bucket=" << bucket << "): " << cpp_strerror(-ret) << dendl;
+    return ret;
+  }
+  
+  *count_out = 0;
+  do {
+    entries.clear();
+    ret = store->bi_list(bs, "", marker, -1, &entries, &is_truncated);
+    if (ret < 0) {
+      ldpp_dout(dpp, -1) << "ERROR bi_list(): " << cpp_strerror(-ret) << dendl;
+      break;
+    }
+    list<rgw_cls_bi_entry>::iterator iter;
+    for (iter = entries.begin(); iter != entries.end(); ++iter) {
+      rgw_cls_bi_entry& entry = *iter;
+      marker = entry.idx;
+      if (entry.type != BIIndexType::OLH) {
+        is_truncated = false;
+        break;
+      }
+      rgw_bucket_olh_entry olh_entry;
+      auto iiter = entry.data.cbegin();
+      try {
+        decode(olh_entry, iiter);
+      } catch (buffer::error& err) {
+        ldpp_dout(dpp, -1) << "ERROR failed to decode olh entry for key: " << entry.idx << dendl;
+        continue;
+      }
+      if (olh_entry.exists || !olh_entry.pending_removal) {
+        continue;
+      }
+      if (op_state.will_fix_index()) {
+        rgw_obj obj(bucket->get_key(), olh_entry.key.name);
+        if (olh_entry.pending_log.empty()) {
+          ret = store->clear_olh(dpp, obj_ctx, obj, bucket->get_info(), olh_entry.tag, olh_entry.epoch, y);
+          if (ret < 0) {
+            ldpp_dout(dpp, -1) << "ERROR failed to clear olh for: " << olh_entry.key.name << " clear_olh(): " << cpp_strerror(-ret) << dendl;
+            continue;
+          }
+        } else {
+          std::unique_ptr<rgw::sal::Object> object = bucket->get_object({olh_entry.key.name});
+          RGWObjState *state;
+          ret = object->get_obj_state(dpp, &state, y, false);
+          if (ret < 0) {
+            ldpp_dout(dpp, -1) << "ERROR failed to get state for: " << olh_entry.key.name << " get_obj_state(): " << cpp_strerror(-ret) << dendl;
+            continue;
+          }
+          ret = store->update_olh(dpp, obj_ctx, state, bucket->get_info(), obj);
+          if (ret < 0) {
+            ldpp_dout(dpp, -1) << "ERROR failed to update olh for: " << olh_entry.key.name << " update_olh(): " << cpp_strerror(-ret) << dendl;
+            continue;
+          }
+        }
+      }
+      if (op_state.dump_keys) {
+        flusher.get_formatter()->dump_string("", olh_entry.key.name);
+        if (flusher.get_formatter()->get_len() > FORMATTER_LEN_FLUSH_THRESHOLD) {
+          flusher.flush();
+        }
+      }
+      *count_out += 1;
+    }
+  } while (is_truncated);
+  flusher.flush();
+  return 0;
+}
+
+
+/**
+ * Spawns separate coroutines to check each bucket shard for leftover
+ * olh entries (and remove them if op_state.fix_index is true).
+ */
+int RGWBucket::check_index_olh(rgw::sal::RadosStore* const rados_store,
+                               const DoutPrefixProvider *dpp,
+                               RGWBucketAdminOpState& op_state,
+                               RGWFormatterFlusher& flusher)
+{
+  const RGWBucketInfo& bucket_info = get_bucket_info();
+  if ((bucket_info.versioning_status() & BUCKET_VERSIONED) == 0) {
+    ldpp_dout(dpp, 0) << "WARNING: this command is only applicable to versioned buckets" << dendl;
+    return 0;
+  }
+  
+  Formatter* formatter = flusher.get_formatter();
+  if (op_state.dump_keys) {
+    formatter->open_array_section("");
+  }
+
+  const int max_shards = rgw::num_shards(bucket_info.layout.current_index);
+  std::string verb = op_state.will_fix_index() ? "removed" : "found";
+  uint64_t count_out = 0;
+  
+  boost::asio::io_context context;
+  int next_shard = 0;
+  
+  const int max_aio = std::max(1, op_state.get_max_aio());
+
+  for (int i=0; i<max_aio; i++) {
+    spawn::spawn(context, [&](yield_context yield) {
+      while (true) {
+        int shard = next_shard;
+        next_shard += 1;
+        if (shard >= max_shards) {
+          return;
+        }
+        optional_yield y(context, yield);
+        uint64_t shard_count;
+        int r = ::check_index_olh(rados_store, &*bucket, dpp, op_state, flusher, shard, &shard_count, y);
+        if (r < 0) {
+          ldpp_dout(dpp, -1) << "NOTICE: error processing shard " << shard << 
+            " check_index_olh(): " << r << dendl;
+        }
+        count_out += shard_count;
+        if (!op_state.hide_progress) {
+          ldpp_dout(dpp, 1) << "NOTICE: finished shard " << shard << " (" << shard_count <<
+            " entries " << verb << ")" << dendl;
+        }
+      }
+    });
+  }
+  try {
+    context.run();
+  } catch (const std::system_error& e) {
+    return -e.code().value();
+  }
+  if (!op_state.hide_progress) {
+    ldpp_dout(dpp, 1) << "NOTICE: finished all shards (" << count_out <<
+      " entries " << verb << ")" << dendl;
+  }
+  if (op_state.dump_keys) {
+    formatter->close_section();
+    flusher.flush();
+  }
+  return 0;
+}
+
+/**
+ * Indicates whether a versioned bucket instance entry is listable in the
+ * index. It does this by looping over all plain entries with prefix equal to
+ * the key name, and checking whether any have an instance ID matching the one
+ * on the specified key. The existence of an instance entry without a matching
+ * plain entry indicates that the object was uploaded successfully, but the
+ * request exited prior to linking the object into the index (via the creation
+ * of a plain entry).
+ */
+static int is_versioned_instance_listable(const DoutPrefixProvider *dpp,
+                                          RGWRados::BucketShard& bs,
+                                          const cls_rgw_obj_key& key,
+                                          bool& listable,
+                                          optional_yield y)
+{
+  const std::string empty_delim;
+  cls_rgw_obj_key marker;
+  rgw_cls_list_ret result;
+  listable = false;
+
+  do {
+    librados::ObjectReadOperation op;
+    cls_rgw_bucket_list_op(op, marker, key.name, empty_delim, 1000,
+                           true, &result);
+    bufferlist ibl;
+    int r = bs.bucket_obj.operate(dpp, &op, &ibl, y);
+    if (r < 0) {
+      return r;
+    }
+
+    for (auto const& entry : result.dir.m) {
+      if (entry.second.key == key) {
+        listable = true;
+        return 0;
+      }
+      marker = entry.second.key;
+    }
+  } while (result.is_truncated);
+  return 0;
+}
+
+/**
+ * Loops over all instance entries in a bucket shard and finds ones with
+ * versioned_epoch=0 and an mtime that is earlier than op_state.min_age
+ * relative to the current time. These entries represent objects that were
+ * uploaded successfully but were not successfully linked into the object
+ * index. As an extra precaution, we also verify that these entries are indeed
+ * non listable (have no corresponding plain entry in the index). We can assume
+ * that clients received an error response for the associated upload requests
+ * since the bucket index linking transaction did not complete. Therefore, if
+ * op_state.fix_index is true, we remove the object that is associated with the
+ * instance entry.
+ */
+static int check_index_unlinked(rgw::sal::RadosStore* const rados_store,
+                                rgw::sal::Bucket* const bucket,
+                                const DoutPrefixProvider *dpp,
+                                RGWBucketAdminOpState& op_state,
+                                RGWFormatterFlusher& flusher,
+                                const int shard, 
+                                uint64_t* const count_out,
+                                optional_yield y)
+{
+  string marker = BI_INSTANCE_ENTRY_NS_START;
+  bool is_truncated = true;
+  list<rgw_cls_bi_entry> entries;
+
+  RGWObjectCtx obj_ctx(rados_store);
+  RGWRados* store = rados_store->getRados();
+  RGWRados::BucketShard bs(store);
+
+  int ret = bs.init(dpp, bucket->get_info(), bucket->get_info().layout.current_index, shard);
+  if (ret < 0) {
+    ldpp_dout(dpp, -1) << "ERROR bs.init(bucket=" << bucket << "): " << cpp_strerror(-ret) << dendl;
+    return ret;
+  }
+
+  ceph::real_clock::time_point now = ceph::real_clock::now();
+  ceph::real_clock::time_point not_after = now - op_state.min_age;
+  
+  *count_out = 0;
+  do {
+    entries.clear();
+    ret = store->bi_list(bs, "", marker, -1, &entries, &is_truncated);
+    if (ret < 0) {
+      ldpp_dout(dpp, -1) << "ERROR bi_list(): " << cpp_strerror(-ret) << dendl;
+      break;
+    }
+    list<rgw_cls_bi_entry>::iterator iter;
+    for (iter = entries.begin(); iter != entries.end(); ++iter) {
+      rgw_cls_bi_entry& entry = *iter;
+      marker = entry.idx;
+      if (entry.type != BIIndexType::Instance) {
+        is_truncated = false;
+        break;
+      }
+      rgw_bucket_dir_entry dir_entry;
+      auto iiter = entry.data.cbegin();
+      try {
+        decode(dir_entry, iiter);
+      } catch (buffer::error& err) {
+        ldpp_dout(dpp, -1) << "ERROR failed to decode instance entry for key: " <<
+          entry.idx << dendl;
+        continue;
+      }
+      if (dir_entry.versioned_epoch != 0 || dir_entry.meta.mtime > not_after) {
+        continue;
+      }
+      bool listable;
+      ret = is_versioned_instance_listable(dpp, bs, dir_entry.key, listable, y);
+      if (ret < 0) {
+        ldpp_dout(dpp, -1) << "ERROR is_versioned_instance_listable(key='" <<
+          dir_entry.key << "'): " << cpp_strerror(-ret) << dendl;
+        continue;
+      }
+      if (listable) {
+        continue;
+      }
+      if (op_state.will_fix_index()) {
+        rgw_obj_key key(dir_entry.key.name, dir_entry.key.instance);
+        ret = rgw_remove_object(dpp, rados_store, bucket, key);
+        if (ret < 0) {
+          ldpp_dout(dpp, -1) << "ERROR rgw_remove_obj(key='" <<
+            dir_entry.key << "'): " << cpp_strerror(-ret) << dendl;
+          continue;
+        }
+      }
+      if (op_state.dump_keys) {
+        Formatter* const formatter = flusher.get_formatter();
+        formatter->open_object_section("object_instance");
+        formatter->dump_string("name", dir_entry.key.name);
+        formatter->dump_string("instance", dir_entry.key.instance);
+        formatter->close_section();
+        if (formatter->get_len() > FORMATTER_LEN_FLUSH_THRESHOLD) {
+          flusher.flush();
+        }
+      }
+      *count_out += 1;
+    }
+  } while (is_truncated);
+  flusher.flush();
+  return 0;
+}
+
+/**
+ * Spawns separate coroutines to check each bucket shard for unlinked
+ * instance entries (and remove them if op_state.fix_index is true).
+ */
+int RGWBucket::check_index_unlinked(rgw::sal::RadosStore* const rados_store,
+                                    const DoutPrefixProvider *dpp,
+                                    RGWBucketAdminOpState& op_state,
+                                    RGWFormatterFlusher& flusher)
+{
+  const RGWBucketInfo& bucket_info = get_bucket_info();
+  if ((bucket_info.versioning_status() & BUCKET_VERSIONED) == 0) {
+    ldpp_dout(dpp, 0) << "WARNING: this command is only applicable to versioned buckets" << dendl;
+    return 0;
+  }
+  
+  Formatter* formatter = flusher.get_formatter();
+  if (op_state.dump_keys) {
+    formatter->open_array_section("");
+  }
+
+  const int max_shards = rgw::num_shards(bucket_info.layout.current_index);
+  std::string verb = op_state.will_fix_index() ? "removed" : "found";
+  uint64_t count_out = 0;
+  
+  int max_aio = std::max(1, op_state.get_max_aio());
+  int next_shard = 0;
+  boost::asio::io_context context;
+  for (int i=0; i<max_aio; i++) {
+    spawn::spawn(context, [&](yield_context yield) {
+      while (true) {
+        int shard = next_shard;
+        next_shard += 1;
+        if (shard >= max_shards) {
+          return;
+        }
+        uint64_t shard_count;
+        optional_yield y {context, yield};
+        int r = ::check_index_unlinked(rados_store, &*bucket, dpp, op_state, flusher, shard, &shard_count, y);
+        if (r < 0) {
+          ldpp_dout(dpp, -1) << "ERROR: error processing shard " << shard << 
+            " check_index_unlinked(): " << r << dendl;
+        }
+        count_out += shard_count;
+        if (!op_state.hide_progress) {
+          ldpp_dout(dpp, 1) << "NOTICE: finished shard " << shard << " (" << shard_count <<
+            " entries " << verb << ")" << dendl;
+        }
+      }
+    });
+  }
+  try {
+    context.run();
+  } catch (const std::system_error& e) {
+    return -e.code().value();
+  }
+
+  if (!op_state.hide_progress) {
+    ldpp_dout(dpp, 1) << "NOTICE: finished all shards (" << count_out <<
+      " entries " << verb << ")" << dendl;
+  }
+  if (op_state.dump_keys) {
+    formatter->close_section();
+    flusher.flush();
+  }
+  return 0;
+}
 
 int RGWBucket::check_index(const DoutPrefixProvider *dpp,
         RGWBucketAdminOpState& op_state,
@@ -783,6 +1165,46 @@ int RGWBucketAdminOp::chown(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_
 
 }
 
+int RGWBucketAdminOp::check_index_olh(rgw::sal::RadosStore* store, RGWBucketAdminOpState& op_state,
+                  RGWFormatterFlusher& flusher, const DoutPrefixProvider *dpp)
+{
+  RGWBucket bucket;
+  int ret = bucket.init(store, op_state, null_yield, dpp);
+  if (ret < 0) {
+    ldpp_dout(dpp, -1) << "bucket.init(): " << ret << dendl;
+    return ret;
+  }
+  flusher.start(0);
+  ret = bucket.check_index_olh(store, dpp, op_state, flusher);
+  if (ret < 0) {
+    ldpp_dout(dpp, -1) << "check_index_olh(): " << ret << dendl;
+    return ret;
+  }
+  flusher.flush();
+  return 0;
+}
+
+int RGWBucketAdminOp::check_index_unlinked(rgw::sal::RadosStore* store,
+                                           RGWBucketAdminOpState& op_state,
+                                           RGWFormatterFlusher& flusher,
+                                           const DoutPrefixProvider *dpp)
+{
+  flusher.start(0);
+  RGWBucket bucket;
+  int ret = bucket.init(store, op_state, null_yield, dpp);
+  if (ret < 0) {
+    ldpp_dout(dpp, -1) << "bucket.init(): " << ret << dendl;
+    return ret;
+  }
+  ret = bucket.check_index_unlinked(store, dpp, op_state, flusher);
+  if (ret < 0) {
+    ldpp_dout(dpp, -1) << "check_index_unlinked(): " << ret << dendl;
+    return ret;
+  }
+  flusher.flush();
+  return 0;
+}
+
 int RGWBucketAdminOp::check_index(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state,
                   RGWFormatterFlusher& flusher, optional_yield y, const DoutPrefixProvider *dpp)
 {
@@ -799,20 +1221,25 @@ int RGWBucketAdminOp::check_index(rgw::sal::Driver* driver, RGWBucketAdminOpStat
 
   Formatter *formatter = flusher.get_formatter();
   flusher.start(0);
+  formatter->open_object_section("bucket_check");
 
   ret = bucket.check_bad_index_multipart(op_state, flusher, dpp);
   if (ret < 0)
     return ret;
 
-  ret = bucket.check_object_index(dpp, op_state, flusher, y);
-  if (ret < 0)
-    return ret;
+  if (op_state.will_check_objects()) {
+    ret = bucket.check_object_index(dpp, op_state, flusher, y);
+    if (ret < 0)
+      return ret;
+  }
 
   ret = bucket.check_index(dpp, op_state, existing_stats, calculated_stats);
   if (ret < 0)
     return ret;
 
   dump_index_check(existing_stats, calculated_stats, formatter);
+  
+  formatter->close_section();
   flusher.flush();
 
   return 0;
@@ -875,6 +1302,8 @@ static int bucket_stats(rgw::sal::Driver* driver,
     return ret;
   }
 
+  const RGWBucketInfo& bucket_info = bucket->get_info();
+
   const auto& index = bucket->get_info().get_current_index();
   if (is_layout_indexless(index)) {
     cerr << "error, indexless buckets do not maintain stats; bucket=" <<
@@ -904,6 +1333,10 @@ static int bucket_stats(rgw::sal::Driver* driver,
   formatter->dump_string("id", bucket->get_bucket_id());
   formatter->dump_string("marker", bucket->get_marker());
   formatter->dump_stream("index_type") << bucket->get_info().layout.current_index.layout.type;
+  formatter->dump_bool("versioned", bucket_info.versioned());
+  formatter->dump_bool("versioning_enabled", bucket_info.versioning_enabled());
+  formatter->dump_bool("object_lock_enabled", bucket_info.obj_lock_enabled());
+  formatter->dump_bool("mfa_enabled", bucket_info.mfa_enabled());
   ::encode_json("owner", bucket->get_info().owner, formatter);
   formatter->dump_string("ver", bucket_ver);
   formatter->dump_string("master_ver", master_ver);
@@ -1863,7 +2296,7 @@ public:
 
     new_be.bucket.name = new_bucket_name;
 
-    ret = ctl.bucket->store_bucket_instance_info(be.bucket, new_bi, y, dpp, RGWBucketCtl::BucketInstance::PutParams()
+    ret = ctl.bucket->store_bucket_instance_info(new_be.bucket, new_bi, y, dpp, RGWBucketCtl::BucketInstance::PutParams()
                                                                     .set_exclusive(false)
                                                                     .set_mtime(orig_mtime)
                                                                     .set_attrs(&attrs_m)
index c6aafd3be1a8c63100444007018beaaeb2f121de..c13e737ce0218b1cf3b1394d9a604f3a5c753502 100644 (file)
@@ -230,7 +230,10 @@ struct RGWBucketAdminOpState {
   bool delete_child_objects;
   bool bucket_stored;
   bool sync_bucket;
+  bool dump_keys;
+  bool hide_progress;
   int max_aio = 0;
+  ceph::timespan min_age = std::chrono::hours::zero();
 
   std::unique_ptr<rgw::sal::Bucket>  bucket;
 
@@ -241,8 +244,11 @@ struct RGWBucketAdminOpState {
   void set_check_objects(bool value) { check_objects = value; }
   void set_fix_index(bool value) { fix_index = value; }
   void set_delete_children(bool value) { delete_child_objects = value; }
+  void set_hide_progress(bool value) { hide_progress = value; }
+  void set_dump_keys(bool value) { dump_keys = value; }
 
   void set_max_aio(int value) { max_aio = value; }
+  void set_min_age(ceph::timespan value) { min_age = value; }
 
   void set_user_id(const rgw_user& user_id) {
     if (!user_id.empty())
@@ -299,7 +305,8 @@ struct RGWBucketAdminOpState {
 
   RGWBucketAdminOpState() : list_buckets(false), stat_buckets(false), check_objects(false), 
                             fix_index(false), delete_child_objects(false),
-                            bucket_stored(false), sync_bucket(true)  {}
+                            bucket_stored(false), sync_bucket(true),
+                            dump_keys(false), hide_progress(false) {}
 };
 
 
@@ -332,6 +339,10 @@ public:
                          RGWFormatterFlusher& flusher,
                          optional_yield y,
                          std::string *err_msg = NULL);
+  int check_index_olh(rgw::sal::RadosStore* rados_store, const DoutPrefixProvider *dpp, RGWBucketAdminOpState& op_state,
+                      RGWFormatterFlusher& flusher);
+  int check_index_unlinked(rgw::sal::RadosStore* rados_store, const DoutPrefixProvider *dpp, RGWBucketAdminOpState& op_state,
+                           RGWFormatterFlusher& flusher);
 
   int check_index(const DoutPrefixProvider *dpp,
           RGWBucketAdminOpState& op_state,
@@ -368,6 +379,10 @@ public:
 
   static int check_index(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state,
                   RGWFormatterFlusher& flusher, optional_yield y, const DoutPrefixProvider *dpp);
+  static int check_index_olh(rgw::sal::RadosStore* driver, RGWBucketAdminOpState& op_state,
+                             RGWFormatterFlusher& flusher, const DoutPrefixProvider *dpp);
+  static int check_index_unlinked(rgw::sal::RadosStore* driver, RGWBucketAdminOpState& op_state,
+                                  RGWFormatterFlusher& flusher, const DoutPrefixProvider *dpp);
 
   static int remove_bucket(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state, optional_yield y,
                           const DoutPrefixProvider *dpp, bool bypass_gc = false, bool keep_index_consistent = true);
index 25d1e9a9dca282a9ea8373c7a8aacb5481848cff..d8e0ecba63e18a25fb0c35e29fdd16da31b87e7e 100644 (file)
@@ -814,7 +814,7 @@ int RGWAsyncFetchRemoteObj::_send_request(const DoutPrefixProvider *dpp)
           ldpp_dout(dpp, 1) << "ERROR: reserving notification failed, with error: " << ret << dendl;
           // no need to return, the sync already happened
         } else {
-          ret = rgw::notify::publish_commit(&dest_obj, dest_obj.get_obj_size(), ceph::real_clock::now(), etag, dest_obj.get_instance(), rgw::notify::ObjectSyncedCreate, notify_res, dpp);
+          ret = rgw::notify::publish_commit(&dest_obj, *bytes_transferred, ceph::real_clock::now(), etag, dest_obj.get_instance(), rgw::notify::ObjectSyncedCreate, notify_res, dpp);
           if (ret < 0) {
             ldpp_dout(dpp, 1) << "ERROR: publishing notification failed, with error: " << ret << dendl;
           }
index 0821e69a9391127daacd1f2c2253fb4375d5396b..b1835016ec0eef21b9adc01ace1e43c67f74fc50 100644 (file)
@@ -52,6 +52,8 @@ auto make_stack_allocator() {
   return boost::context::protected_fixedsize_stack{128*1024};
 }
 
+const std::string Q_LIST_OBJECT_NAME = "queues_list_object";
+
 class Manager : public DoutPrefixProvider {
   const size_t max_queue_size;
   const uint32_t queues_update_period_ms;
@@ -59,7 +61,6 @@ class Manager : public DoutPrefixProvider {
   const uint32_t queue_idle_sleep_us;
   const utime_t failover_time;
   CephContext* const cct;
-  librados::IoCtx& rados_ioctx;
   static constexpr auto COOKIE_LEN = 16;
   const std::string lock_cookie;
   boost::asio::io_context io_context;
@@ -68,8 +69,9 @@ class Manager : public DoutPrefixProvider {
   std::vector<std::thread> workers;
   const uint32_t stale_reservations_period_s;
   const uint32_t reservations_cleanup_period_s;
-  const std::string Q_LIST_OBJECT_NAME = "queues_list_object";
+public:
+  librados::IoCtx& rados_ioctx;
+private:
 
   CephContext *get_cct() const override { return cct; }
   unsigned get_subsys() const override { return dout_subsys; }
@@ -481,12 +483,12 @@ public:
     queue_idle_sleep_us(_queue_idle_sleep_us),
     failover_time(std::chrono::milliseconds(failover_time_ms)),
     cct(_cct),
-    rados_ioctx(store->getRados()->get_notif_pool_ctx()),
     lock_cookie(gen_rand_alphanumeric(cct, COOKIE_LEN)),
     work_guard(boost::asio::make_work_guard(io_context)),
     worker_count(_worker_count),
     stale_reservations_period_s(_stale_reservations_period_s),
-    reservations_cleanup_period_s(_reservations_cleanup_period_s)
+    reservations_cleanup_period_s(_reservations_cleanup_period_s),
+    rados_ioctx(store->getRados()->get_notif_pool_ctx())
     {
       spawn::spawn(io_context, [this] (yield_context yield) {
             process_queues(yield);
@@ -541,32 +543,6 @@ public:
     ldpp_dout(this, 20) << "INFO: queue: " << topic_name << " added to queue list"  << dendl;
     return 0;
   }
-  
-  int remove_persistent_topic(const std::string& topic_name, optional_yield y) {
-    librados::ObjectWriteOperation op;
-    op.remove();
-    auto ret = rgw_rados_operate(this, rados_ioctx, topic_name, &op, y);
-    if (ret == -ENOENT) {
-      // queue already removed - nothing to do
-      ldpp_dout(this, 20) << "INFO: queue for topic: " << topic_name << " already removed. nothing to do" << dendl;
-      return 0;
-    }
-    if (ret < 0) {
-      // failed to remove queue
-      ldpp_dout(this, 1) << "ERROR: failed to remove queue for topic: " << topic_name << ". error: " << ret << dendl;
-      return ret;
-    }
-  
-    std::set<std::string> topic_to_remove{{topic_name}};
-    op.omap_rm_keys(topic_to_remove);
-    ret = rgw_rados_operate(this, rados_ioctx, Q_LIST_OBJECT_NAME, &op, y);
-    if (ret < 0) {
-      ldpp_dout(this, 1) << "ERROR: failed to remove queue: " << topic_name << " from queue list. error: " << ret << dendl;
-      return ret;
-    } 
-    ldpp_dout(this, 20) << "INFO: queue: " << topic_name << " removed from queue list"  << dendl;
-    return 0;
-  }
 };
 
 // singleton manager
@@ -609,11 +585,37 @@ int add_persistent_topic(const std::string& topic_name, optional_yield y) {
   return s_manager->add_persistent_topic(topic_name, y);
 }
 
+int remove_persistent_topic(const DoutPrefixProvider* dpp, librados::IoCtx& rados_ioctx, const std::string& topic_name, optional_yield y) {
+  librados::ObjectWriteOperation op;
+  op.remove();
+  auto ret = rgw_rados_operate(dpp, rados_ioctx, topic_name, &op, y);
+  if (ret == -ENOENT) {
+    // queue already removed - nothing to do
+    ldpp_dout(dpp, 20) << "INFO: queue for topic: " << topic_name << " already removed. nothing to do" << dendl;
+    return 0;
+  }
+  if (ret < 0) {
+    // failed to remove queue
+    ldpp_dout(dpp, 1) << "ERROR: failed to remove queue for topic: " << topic_name << ". error: " << ret << dendl;
+    return ret;
+  }
+
+  std::set<std::string> topic_to_remove{{topic_name}};
+  op.omap_rm_keys(topic_to_remove);
+  ret = rgw_rados_operate(dpp, rados_ioctx, Q_LIST_OBJECT_NAME, &op, y);
+  if (ret < 0) {
+    ldpp_dout(dpp, 1) << "ERROR: failed to remove queue: " << topic_name << " from queue list. error: " << ret << dendl;
+    return ret;
+  }
+  ldpp_dout(dpp, 20) << "INFO: queue: " << topic_name << " removed from queue list"  << dendl;
+  return 0;
+}
+
 int remove_persistent_topic(const std::string& topic_name, optional_yield y) {
   if (!s_manager) {
     return -EAGAIN;
   }
-  return s_manager->remove_persistent_topic(topic_name, y);
+  return remove_persistent_topic(s_manager, s_manager->rados_ioctx, topic_name, y);
 }
 
 rgw::sal::Object* get_object_with_atttributes(
@@ -634,6 +636,15 @@ rgw::sal::Object* get_object_with_atttributes(
   return src_obj;
 }
 
+static inline void filter_amz_meta(meta_map_t& dest, const meta_map_t& src) {
+  std::copy_if(src.cbegin(), src.cend(),
+               std::inserter(dest, dest.end()),
+               [](const auto& m) {
+                 return (boost::algorithm::starts_with(m.first, RGW_AMZ_META_PREFIX));
+               });
+}
+
+
 static inline void metadata_from_attributes(
   reservation_t& res, rgw::sal::Object* obj) {
   auto& metadata = res.x_meta_map;
@@ -690,7 +701,8 @@ static inline void populate_event(reservation_t& res,
   event.x_amz_id_2 = res.store->getRados()->host_id; // RGW on which the change was made
   // configurationId is filled from notification configuration
   event.bucket_name = res.bucket->get_name();
-  event.bucket_ownerIdentity = res.bucket->get_owner() ? res.bucket->get_owner()->get_id().id : "";
+  event.bucket_ownerIdentity = res.bucket->get_owner() ?
+    res.bucket->get_owner()->get_id().id : res.bucket->get_info().owner.id;
   const auto region = res.store->get_zone()->get_zonegroup().get_api_name();
   rgw::ARN bucket_arn(res.bucket->get_key());
   bucket_arn.region = region; 
@@ -739,7 +751,7 @@ static inline bool notification_match(reservation_t& res,
   if (!filter.s3_filter.metadata_filter.kv.empty()) {
     // metadata filter exists
     if (res.s) {
-      res.x_meta_map = res.s->info.x_meta_map;
+      filter_amz_meta(res.x_meta_map, res.s->info.x_meta_map);
     }
     metadata_from_attributes(res, obj);
     if (!match(filter.s3_filter.metadata_filter, res.x_meta_map)) {
@@ -976,13 +988,14 @@ reservation_t::reservation_t(const DoutPrefixProvider* _dpp,
   object(_object), src_object(_src_object), bucket(_s->bucket.get()),
   object_name(_object_name),
   tagset(_s->tagset),
-  x_meta_map(_s->info.x_meta_map),
   metadata_fetched_from_attributes(false),
   user_id(_s->user->get_id().id),
   user_tenant(_s->user->get_id().tenant),
   req_id(_s->req_id),
   yield(y)
-{}
+{
+  filter_amz_meta(x_meta_map, _s->info.x_meta_map);
+}
 
 reservation_t::reservation_t(const DoutPrefixProvider* _dpp,
                             rgw::sal::RadosStore* _store,
index dd2d69c5fdb19d7292492891b9f6f8e60b936336..9269611e4a6f3a1ae539ad6c2c54a2d72044bdf0 100644 (file)
@@ -38,6 +38,9 @@ int add_persistent_topic(const std::string& topic_name, optional_yield y);
 // this operation also remove the topic name from the common (to all RGWs) list of all topics
 int remove_persistent_topic(const std::string& topic_name, optional_yield y);
 
+// same as the above, expect you need to provide the IoCtx, the above uses rgw::notify::Manager::rados_ioctx
+int remove_persistent_topic(const DoutPrefixProvider* dpp, librados::IoCtx& rados_ioctx, const std::string& topic_name, optional_yield y);
+
 // struct holding reservation information
 // populated in the publish_reserve call
 // then used to commit or abort the reservation
index 3442cdc8425ad61618e87104d3fb7e0acff80e1b..6984184aa5ed2860308cd116623907d64c2476c0 100644 (file)
@@ -545,6 +545,10 @@ public:
       return ofs;
     }
 
+    int get_cur_part_id() const {
+      return cur_part_id;
+    }
+
     /* stripe number */
     int get_cur_stripe() const {
       return cur_stripe;
index f15aa3bcc693d9b8c7d0b1dccf1df35d938d8ebc..bdb24ce9ad10326d2e4438d20e14c1ede6d9d6a2 100644 (file)
@@ -128,7 +128,7 @@ private:
   const std::string topic;
   const std::string exchange;
   ack_level_t ack_level;
-  amqp::connection_ptr_t conn;
+  amqp::connection_id_t conn_id;
 
   bool get_verify_ssl(const RGWHTTPArgs& args) {
     bool exists;
@@ -181,9 +181,8 @@ public:
         endpoint(_endpoint), 
         topic(_topic),
         exchange(get_exchange(args)),
-        ack_level(get_ack_level(args)),
-        conn(amqp::connect(endpoint, exchange, (ack_level == ack_level_t::Broker), get_verify_ssl(args), args.get_optional("ca-location"))) {
-    if (!conn) { 
+        ack_level(get_ack_level(args)) {
+    if (!amqp::connect(conn_id, endpoint, exchange, (ack_level == ack_level_t::Broker), get_verify_ssl(args), args.get_optional("ca-location"))) {
       throw configuration_error("AMQP: failed to create connection to: " + endpoint);
     }
   }
@@ -243,14 +242,13 @@ public:
   };
 
   int send_to_completion_async(CephContext* cct, const rgw_pubsub_s3_event& event, optional_yield y) override {
-    ceph_assert(conn);
     if (ack_level == ack_level_t::None) {
-      return amqp::publish(conn, topic, json_format_pubsub_event(event));
+      return amqp::publish(conn_id, topic, json_format_pubsub_event(event));
     } else {
       // TODO: currently broker and routable are the same - this will require different flags but the same mechanism
       // note: dynamic allocation of Waiter is needed when this is invoked from a beast coroutine
       auto w = std::unique_ptr<Waiter>(new Waiter);
-      const auto rc = amqp::publish_with_confirm(conn, 
+      const auto rc = amqp::publish_with_confirm(conn_id
         topic,
         json_format_pubsub_event(event),
         std::bind(&Waiter::finish, w.get(), std::placeholders::_1));
index df334e99e3998a350be490f0007cac501c95b500..10018d4a68a0c30acab2c7dab624d49742897c17 100644 (file)
@@ -45,6 +45,7 @@
 #include "rgw_tools.h"
 #include "rgw_coroutine.h"
 #include "rgw_compression.h"
+#include "rgw_crypt.h"
 #include "rgw_etag_verifier.h"
 #include "rgw_worker.h"
 #include "rgw_notify.h"
@@ -1342,13 +1343,7 @@ int RGWRados::init_ctl(const DoutPrefixProvider *dpp)
  */
 int RGWRados::init_begin(const DoutPrefixProvider *dpp)
 {
-  int ret;
-
-  inject_notify_timeout_probability =
-    cct->_conf.get_val<double>("rgw_inject_notify_timeout_probability");
-  max_notify_retries = cct->_conf.get_val<uint64_t>("rgw_max_notify_retries");
-
-  ret = init_svc(false, dpp);
+  int ret = init_svc(false, dpp);
   if (ret < 0) {
     ldpp_dout(dpp, 0) << "ERROR: failed to init services (ret=" << cpp_strerror(-ret) << ")" << dendl;
     return ret;
@@ -3417,11 +3412,30 @@ public:
           }
         }
       }
+
       /* We need the manifest to recompute the ETag for verification */
       iter = src_attrs.find(RGW_ATTR_MANIFEST);
       if (iter != src_attrs.end()) {
         manifest_bl = std::move(iter->second);
         src_attrs.erase(iter);
+
+        // if the source object was encrypted, preserve the part lengths from
+        // the original object's manifest in RGW_ATTR_CRYPT_PARTS. if the object
+        // already replicated and has the RGW_ATTR_CRYPT_PARTS attr, preserve it
+        if (src_attrs.count(RGW_ATTR_CRYPT_MODE) &&
+            !src_attrs.count(RGW_ATTR_CRYPT_PARTS)) {
+          std::vector<size_t> parts_len;
+          int r = RGWGetObj_BlockDecrypt::read_manifest_parts(dpp, manifest_bl,
+                                                              parts_len);
+          if (r < 0) {
+            ldpp_dout(dpp, 4) << "failed to read part lengths from the manifest" << dendl;
+          } else {
+            // store the encoded part lenghts in RGW_ATTR_CRYPT_PARTS
+            bufferlist parts_bl;
+            encode(parts_len, parts_bl);
+            src_attrs[RGW_ATTR_CRYPT_PARTS] = std::move(parts_bl);
+          }
+        }
       }
 
       // filter out olh attributes
@@ -3976,7 +3990,7 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx,
 
   string etag;
   real_time set_mtime;
-  uint64_t expected_size = 0;
+  uint64_t accounted_size = 0;
 
   RGWObjState *dest_state = NULL;
   RGWObjManifest *manifest = nullptr;
@@ -4015,7 +4029,7 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx,
   }
 
   ret = conn->complete_request(in_stream_req, &etag, &set_mtime,
-                               &expected_size, nullptr, nullptr, null_yield);
+                               &accounted_size, nullptr, nullptr, null_yield);
   if (ret < 0) {
     goto set_err_state;
   }
@@ -4023,21 +4037,36 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx,
   if (ret < 0) {
     goto set_err_state;
   }
-  if (cb.get_data_len() != expected_size) {
+  if (cb.get_data_len() != accounted_size) {
     ret = -EIO;
     ldpp_dout(dpp, 0) << "ERROR: object truncated during fetching, expected "
-        << expected_size << " bytes but received " << cb.get_data_len() << dendl;
+        << accounted_size << " bytes but received " << cb.get_data_len() << dendl;
     goto set_err_state;
   }
+
   if (compressor && compressor->is_compressed()) {
     bufferlist tmp;
     RGWCompressionInfo cs_info;
     cs_info.compression_type = plugin->get_type_name();
-    cs_info.orig_size = cb.get_data_len();
+    cs_info.orig_size = accounted_size;
     cs_info.compressor_message = compressor->get_compressor_message();
     cs_info.blocks = move(compressor->get_compression_blocks());
     encode(cs_info, tmp);
     cb.get_attrs()[RGW_ATTR_COMPRESSION] = tmp;
+  } else if (auto c = cb.get_attrs().find(RGW_ATTR_COMPRESSION);
+             c != cb.get_attrs().end()) {
+    // if the object was transferred in its compressed+encrypted form, use its
+    // original uncompressed size
+    try {
+      RGWCompressionInfo info;
+      auto p = c->second.cbegin();
+      decode(info, p);
+      accounted_size = info.orig_size;
+    } catch (const buffer::error&) {
+      ldpp_dout(dpp, 0) << "ERROR: could not decode compression attr for "
+          "replicated object " << dest_obj << dendl;
+      // decode error isn't fatal, but we might put the wrong size in the index
+    }
   }
 
   if (override_owner) {
@@ -4167,7 +4196,7 @@ int RGWRados::fetch_remote_obj(RGWObjectCtx& obj_ctx,
 #define MAX_COMPLETE_RETRY 100
   for (i = 0; i < MAX_COMPLETE_RETRY; i++) {
     bool canceled = false;
-    ret = processor.complete(cb.get_data_len(), etag, mtime, set_mtime,
+    ret = processor.complete(accounted_size, etag, mtime, set_mtime,
                              attrs, delete_at, nullptr, nullptr, nullptr,
                              zones_trace, &canceled, null_yield);
     if (ret < 0) {
@@ -5084,6 +5113,140 @@ int RGWRados::bucket_rebuild_index(const DoutPrefixProvider *dpp, RGWBucketInfo&
   return CLSRGWIssueBucketRebuild(index_pool.ioctx(), bucket_objs, cct->_conf->rgw_bucket_index_max_aio)();
 }
 
+static int resync_encrypted_multipart(const DoutPrefixProvider* dpp,
+                                      optional_yield y, RGWRados* store,
+                                      RGWBucketInfo& bucket_info,
+                                      RGWObjectCtx& obj_ctx,
+                                      const RGWObjState& state)
+{
+  // only overwrite if the tag hasn't changed
+  obj_ctx.set_atomic(state.obj);
+
+  // make a tiny adjustment to the existing mtime so that fetch_remote_obj()
+  // won't return ERR_NOT_MODIFIED when resyncing the object
+  const auto set_mtime = state.mtime + std::chrono::nanoseconds(1);
+
+  // use set_attrs() to update the mtime in a bucket index transaction so the
+  // change is recorded in bilog and datalog entries. this will cause any peer
+  // zones to resync the object
+  auto add_attrs = std::map<std::string, bufferlist>{
+    { RGW_ATTR_PREFIX "resync-encrypted-multipart", bufferlist{} },
+  };
+
+  return store->set_attrs(dpp, &obj_ctx, bucket_info, state.obj,
+                          add_attrs, nullptr, y, set_mtime);
+}
+
+static void try_resync_encrypted_multipart(const DoutPrefixProvider* dpp,
+                                           optional_yield y, RGWRados* store,
+                                           RGWBucketInfo& bucket_info,
+                                           RGWObjectCtx& obj_ctx,
+                                           const rgw_bucket_dir_entry& dirent,
+                                           Formatter* f)
+{
+  const auto obj = rgw_obj{bucket_info.bucket, dirent.key};
+
+  RGWObjState* astate = nullptr;
+  RGWObjManifest* manifest = nullptr;
+  constexpr bool follow_olh = false; // dirent will have version ids
+  int ret = store->get_obj_state(dpp, &obj_ctx, bucket_info, obj,
+                                 &astate, &manifest, follow_olh, y);
+  if (ret < 0) {
+    ldpp_dout(dpp, 4) << obj << " does not exist" << dendl;
+    return;
+  }
+
+  // check whether the object is encrypted
+  if (auto i = astate->attrset.find(RGW_ATTR_CRYPT_MODE);
+      i == astate->attrset.end()) {
+    ldpp_dout(dpp, 4) << obj << " is not encrypted" << dendl;
+    return;
+  }
+
+  // check whether the object is multipart
+  if (!manifest) {
+    ldpp_dout(dpp, 4) << obj << " has no manifest so is not multipart" << dendl;
+    return;
+  }
+  const RGWObjManifest::obj_iterator end = manifest->obj_end(dpp);
+  if (end.get_cur_part_id() == 0) {
+    ldpp_dout(dpp, 4) << obj << " manifest is not multipart" << dendl;
+    return;
+  }
+
+  ret = resync_encrypted_multipart(dpp, y, store, bucket_info,
+                                   obj_ctx, *astate);
+  if (ret < 0) {
+    ldpp_dout(dpp, 0) << "ERROR: failed to update " << obj
+        << ": " << cpp_strerror(ret) << dendl;
+    return;
+  }
+
+  f->open_object_section("object");
+  encode_json("name", obj.key.name, f);
+  if (!obj.key.instance.empty()) {
+    encode_json("version", obj.key.instance, f);
+  }
+  encode_json("mtime", astate->mtime, f);
+  f->close_section(); // "object"
+}
+
+int RGWRados::bucket_resync_encrypted_multipart(const DoutPrefixProvider* dpp,
+                                                optional_yield y,
+                                                rgw::sal::RadosStore* driver,
+                                                RGWBucketInfo& bucket_info,
+                                                const std::string& marker,
+                                                RGWFormatterFlusher& flusher)
+{
+  RGWRados::Bucket target(this, bucket_info);
+  RGWRados::Bucket::List list_op(&target);
+
+  list_op.params.marker.name = marker;
+  list_op.params.enforce_ns = true; // only empty ns
+  list_op.params.list_versions = true;
+  list_op.params.allow_unordered = true;
+
+  /* List bucket entries in chunks. */
+  static constexpr int MAX_LIST_OBJS = 100;
+  std::vector<rgw_bucket_dir_entry> entries;
+  entries.reserve(MAX_LIST_OBJS);
+
+  int processed = 0;
+  bool is_truncated = true;
+
+  Formatter* f = flusher.get_formatter();
+  f->open_array_section("progress");
+
+  do {
+    int ret = list_op.list_objects(dpp, MAX_LIST_OBJS, &entries, nullptr,
+                                   &is_truncated, y);
+    if (ret < 0) {
+      return ret;
+    }
+
+    f->open_object_section("batch");
+    f->open_array_section("modified");
+
+    for (const auto& dirent : entries) {
+      RGWObjectCtx obj_ctx{driver};
+      try_resync_encrypted_multipart(dpp, y, this, bucket_info,
+                                     obj_ctx, dirent, f);
+    }
+
+    f->close_section(); // "modified"
+
+    processed += entries.size();
+    encode_json("total processed", processed, f);
+    encode_json("marker", list_op.get_next_marker().name, f);
+    f->close_section(); // "batch"
+
+    flusher.flush(); // flush after each 'chunk'
+  } while (is_truncated);
+
+  f->close_section(); // "progress" array
+  return 0;
+}
+
 int RGWRados::bucket_set_reshard(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const cls_rgw_bucket_instance_entry& entry)
 {
   RGWSI_RADOS::Pool index_pool;
@@ -5952,7 +6115,8 @@ int RGWRados::set_attr(const DoutPrefixProvider *dpp, RGWObjectCtx* rctx, RGWBuc
 int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* rctx, RGWBucketInfo& bucket_info, const rgw_obj& src_obj,
                         map<string, bufferlist>& attrs,
                         map<string, bufferlist>* rmattrs,
-                        optional_yield y)
+                        optional_yield y,
+                        ceph::real_time set_mtime /* = zero() */)
 {
   rgw_obj obj = src_obj;
   if (obj.key.instance == "null") {
@@ -6038,6 +6202,9 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* rctx, RGWBu
    * set the metadata.
    * Hence do not update mtime for any other attr changes */
   real_time mtime = state->mtime;
+  if (set_mtime != ceph::real_clock::zero()) {
+    mtime = set_mtime;
+  }
   struct timespec mtime_ts = real_clock::to_timespec(mtime);
   op.mtime2(&mtime_ts);
   auto& ioctx = ref.pool.ioctx();
@@ -6091,6 +6258,8 @@ int RGWRados::set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* rctx, RGWBu
     if (iter != state->attrset.end()) {
       iter->second = state->obj_tag;
     }
+
+    state->mtime = mtime;
   }
 
   return 0;
@@ -7514,6 +7683,7 @@ int RGWRados::apply_olh_log(const DoutPrefixProvider *dpp,
     return r;
   }
 
+
   if (need_to_remove) {
     string olh_tag(state.olh_tag.c_str(), state.olh_tag.length());
     r = clear_olh(dpp, obj_ctx, obj, bucket_info, ref, olh_tag, last_ver, null_yield);
@@ -7521,12 +7691,12 @@ int RGWRados::apply_olh_log(const DoutPrefixProvider *dpp,
       ldpp_dout(dpp, 0) << "ERROR: could not clear olh, r=" << r << dendl;
       return r;
     }
-  }
-
-  r = bucket_index_trim_olh_log(dpp, bucket_info, state, obj, last_ver);
-  if (r < 0 && r != -ECANCELED) {
-    ldpp_dout(dpp, 0) << "ERROR: could not trim olh log, r=" << r << dendl;
-    return r;
+  } else {
+    r = bucket_index_trim_olh_log(dpp, bucket_info, state, obj, last_ver);
+    if (r < 0 && r != -ECANCELED) {
+      ldpp_dout(dpp, 0) << "ERROR: could not trim olh log, r=" << r << dendl;
+      return r;
+    }
   }
 
   return 0;
@@ -7547,7 +7717,6 @@ int RGWRados::clear_olh(const DoutPrefixProvider *dpp,
   return clear_olh(dpp, obj_ctx, obj, bucket_info, ref, tag, ver, y);
 }
 
-
 int RGWRados::clear_olh(const DoutPrefixProvider *dpp,
                         RGWObjectCtx& obj_ctx,
                         const rgw_obj& obj,
@@ -7681,6 +7850,13 @@ int RGWRados::set_olh(const DoutPrefixProvider *dpp, RGWObjectCtx& obj_ctx,
         }
         continue;
       }
+      // it's possible that the pending xattr from this op prevented the olh
+      // object from being cleaned by another thread that was deleting the last
+      // existing version. We invoke a best-effort update_olh here to handle this case.
+      int r = update_olh(dpp, obj_ctx, state, bucket_info, olh_obj);
+      if (r < 0 && r != -ECANCELED) {
+        ldpp_dout(dpp, 20) << "update_olh() target_obj=" << olh_obj << " returned " << r << dendl;
+      }
       return ret;
     }
     break;
@@ -7744,6 +7920,13 @@ int RGWRados::unlink_obj_instance(const DoutPrefixProvider *dpp, RGWObjectCtx& o
       if (ret == -ECANCELED) {
         continue;
       }
+      // it's possible that the pending xattr from this op prevented the olh
+      // object from being cleaned by another thread that was deleting the last
+      // existing version. We invoke a best-effort update_olh here to handle this case.
+      int r = update_olh(dpp, obj_ctx, state, bucket_info, olh_obj, zones_trace);
+      if (r < 0 && r != -ECANCELED) {
+        ldpp_dout(dpp, 20) << "update_olh() target_obj=" << olh_obj << " returned " << r << dendl;
+      }
       return ret;
     }
     break;
index 3c6b8bc25ddf2bc19718cb686d56ea8edd52f76e..75a5e1b5455890d11b898b5f1e57bcf09049d4ef 100644 (file)
@@ -382,12 +382,7 @@ class RGWRados
 
   librados::IoCtx root_pool_ctx;      // .rgw
 
-  double inject_notify_timeout_probability = 0;
-  unsigned max_notify_retries = 0;
-
-  friend class RGWWatcher;
-
-  ceph::mutex bucket_id_lock = ceph::make_mutex("rados_bucket_id");
+  ceph::mutex bucket_id_lock{ceph::make_mutex("rados_bucket_id")};
 
   // This field represents the number of bucket index object shards
   uint32_t bucket_index_max_shards;
@@ -1260,7 +1255,8 @@ public:
   int set_attrs(const DoutPrefixProvider *dpp, RGWObjectCtx* ctx, RGWBucketInfo& bucket_info, const rgw_obj& obj,
                         std::map<std::string, bufferlist>& attrs,
                         std::map<std::string, bufferlist>* rmattrs,
-                        optional_yield y);
+                        optional_yield y,
+                        ceph::real_time set_mtime = ceph::real_clock::zero());
 
   int get_obj_state(const DoutPrefixProvider *dpp, RGWObjectCtx *rctx, RGWBucketInfo& bucket_info, const rgw_obj& obj, RGWObjState **state, RGWObjManifest** manifest,
                     bool follow_olh, optional_yield y, bool assume_noent = false);
@@ -1511,6 +1507,17 @@ public:
                          std::map<RGWObjCategory, RGWStorageStats> *existing_stats,
                          std::map<RGWObjCategory, RGWStorageStats> *calculated_stats);
   int bucket_rebuild_index(const DoutPrefixProvider *dpp, RGWBucketInfo& bucket_info);
+
+  // Search the bucket for encrypted multipart uploads, and increase their mtime
+  // slightly to generate a bilog entry to trigger a resync to repair any
+  // corrupted replicas. See https://tracker.ceph.com/issues/46062
+  int bucket_resync_encrypted_multipart(const DoutPrefixProvider* dpp,
+                                        optional_yield y,
+                                        rgw::sal::RadosStore* driver,
+                                        RGWBucketInfo& bucket_info,
+                                        const std::string& marker,
+                                        RGWFormatterFlusher& flusher);
+
   int bucket_set_reshard(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const cls_rgw_bucket_instance_entry& entry);
   int remove_objs_from_index(const DoutPrefixProvider *dpp,
                             RGWBucketInfo& bucket_info,
index 608367b8a85dd4994af01f8d6d30d1194b60520f..9acdb79d387539e6b738378817ee3e4fc119b1ee 100644 (file)
@@ -3191,13 +3191,11 @@ bool RadosZoneGroup::placement_target_exists(std::string& target) const
   return !!group.placement_targets.count(target);
 }
 
-int RadosZoneGroup::get_placement_target_names(std::set<std::string>& names) const
+void RadosZoneGroup::get_placement_target_names(std::set<std::string>& names) const
 {
   for (const auto& target : group.placement_targets) {
     names.emplace(target.second.name);
   }
-
-  return 0;
 }
 
 int RadosZoneGroup::get_placement_tier(const rgw_placement_rule& rule,
index d2ba6300e814194455f34072465510f8954c3bf5..4d2dc97091ef4efb727aa75fa3f73f4bbad973f3 100644 (file)
@@ -70,7 +70,7 @@ public:
     return group.is_master_zonegroup();
   };
   virtual const std::string& get_api_name() const override { return group.api_name; };
-  virtual int get_placement_target_names(std::set<std::string>& names) const override;
+  virtual void get_placement_target_names(std::set<std::string>& names) const override;
   virtual const std::string& get_default_placement_name() const override {
     return group.default_placement.name; };
   virtual int get_hostnames(std::list<std::string>& names) const override {
index e6880c7778e65325898ee303eba14b8a7a6bda28..73b0736b18feca10abef6072ffe57d800eac04f7 100644 (file)
@@ -6,6 +6,7 @@
 #include <sstream>
 #include <string>
 
+#include <boost/asio.hpp>
 #include <boost/optional.hpp>
 
 extern "C" {
@@ -155,7 +156,9 @@ void usage()
   cout << "  bucket unlink              unlink bucket from specified user\n";
   cout << "  bucket stats               returns bucket statistics\n";
   cout << "  bucket rm                  remove bucket\n";
-  cout << "  bucket check               check bucket index\n";
+  cout << "  bucket check               check bucket index by verifying size and object count stats\n";
+  cout << "  bucket check olh           check for olh index entries and objects that are pending removal\n";
+  cout << "  bucket check unlinked      check for object versions that are not visible in a bucket listing \n";
   cout << "  bucket chown               link bucket to specified user and update its object ACLs\n";
   cout << "  bucket reshard             reshard bucket\n";
   cout << "  bucket rewrite             rewrite all objects in the specified bucket\n";
@@ -318,6 +321,9 @@ void usage()
   cout << "  script-package add         add a lua package to the scripts allowlist\n";
   cout << "  script-package rm          remove a lua package from the scripts allowlist\n";
   cout << "  script-package list        get the lua packages allowlist\n";
+  cout << "  notification list          list bucket notifications configuration\n";
+  cout << "  notification get           get a bucket notifications configuration\n";
+  cout << "  notification rm            remove a bucket notifications configuration\n";
   cout << "options:\n";
   cout << "   --tenant=<tenant>         tenant name\n";
   cout << "   --user_ns=<namespace>     namespace of user (oidc in case of users authenticated with oidc provider)\n";
@@ -483,10 +489,15 @@ void usage()
   cout << "   --totp-pin                the valid value of a TOTP token at a certain time\n";
   cout << "\nBucket notifications options:\n";
   cout << "   --topic                   bucket notifications topic name\n";
+  cout << "   --notification-id         bucket notifications id\n";
   cout << "\nScript options:\n";
   cout << "   --context                 context in which the script runs. one of: "+LUA_CONTEXT_LIST+"\n";
   cout << "   --package                 name of the lua package that should be added/removed to/from the allowlist\n";
   cout << "   --allow-compilation       package is allowed to compile C code as part of its installation\n";
+  cout << "\nBucket check olh/unlinked options:\n";
+  cout << "   --min-age-hours           minimum age of unlinked objects to consider for bucket check unlinked (default: 1)\n";
+  cout << "   --dump-keys               when specified, all keys identified as problematic are printed to stdout\n";
+  cout << "   --hide-progress           when specified, per-shard progress details are not printed to stderr\n";
   cout << "\nradoslist options:\n";
   cout << "   --rgw-obj-fs              the field separator that will separate the rados\n";
   cout << "                             object name from the rgw object name;\n";
@@ -655,6 +666,8 @@ enum class OPT {
   BUCKET_LAYOUT,
   BUCKET_STATS,
   BUCKET_CHECK,
+  BUCKET_CHECK_OLH,
+  BUCKET_CHECK_UNLINKED,
   BUCKET_SYNC_CHECKPOINT,
   BUCKET_SYNC_INFO,
   BUCKET_SYNC_STATUS,
@@ -670,6 +683,7 @@ enum class OPT {
   BUCKET_RADOS_LIST,
   BUCKET_SHARD_OBJECTS,
   BUCKET_OBJECT_SHARD,
+  BUCKET_RESYNC_ENCRYPTED_MULTIPART,
   POLICY,
   POOL_ADD,
   POOL_RM,
@@ -830,9 +844,12 @@ enum class OPT {
   MFA_RESYNC,
   RESHARD_STALE_INSTANCES_LIST,
   RESHARD_STALE_INSTANCES_DELETE,
-  PUBSUB_TOPICS_LIST,
+  PUBSUB_TOPIC_LIST,
   PUBSUB_TOPIC_GET,
   PUBSUB_TOPIC_RM,
+  PUBSUB_NOTIFICATION_LIST,
+  PUBSUB_NOTIFICATION_GET,
+  PUBSUB_NOTIFICATION_RM,
   SCRIPT_PUT,
   SCRIPT_GET,
   SCRIPT_RM,
@@ -869,6 +886,8 @@ static SimpleCmd::Commands all_cmds = {
   { "bucket layout", OPT::BUCKET_LAYOUT },
   { "bucket stats", OPT::BUCKET_STATS },
   { "bucket check", OPT::BUCKET_CHECK },
+  { "bucket check olh", OPT::BUCKET_CHECK_OLH },
+  { "bucket check unlinked", OPT::BUCKET_CHECK_UNLINKED },
   { "bucket sync checkpoint", OPT::BUCKET_SYNC_CHECKPOINT },
   { "bucket sync info", OPT::BUCKET_SYNC_INFO },
   { "bucket sync status", OPT::BUCKET_SYNC_STATUS },
@@ -886,6 +905,7 @@ static SimpleCmd::Commands all_cmds = {
   { "bucket shard objects", OPT::BUCKET_SHARD_OBJECTS },
   { "bucket shard object", OPT::BUCKET_SHARD_OBJECTS },
   { "bucket object shard", OPT::BUCKET_OBJECT_SHARD },
+  { "bucket resync encrypted multipart", OPT::BUCKET_RESYNC_ENCRYPTED_MULTIPART },
   { "policy", OPT::POLICY },
   { "pool add", OPT::POOL_ADD },
   { "pool rm", OPT::POOL_RM },
@@ -1061,9 +1081,12 @@ static SimpleCmd::Commands all_cmds = {
   { "reshard stale list", OPT::RESHARD_STALE_INSTANCES_LIST },
   { "reshard stale-instances delete", OPT::RESHARD_STALE_INSTANCES_DELETE },
   { "reshard stale delete", OPT::RESHARD_STALE_INSTANCES_DELETE },
-  { "topic list", OPT::PUBSUB_TOPICS_LIST },
+  { "topic list", OPT::PUBSUB_TOPIC_LIST },
   { "topic get", OPT::PUBSUB_TOPIC_GET },
   { "topic rm", OPT::PUBSUB_TOPIC_RM },
+  { "notification list", OPT::PUBSUB_NOTIFICATION_LIST },
+  { "notification get", OPT::PUBSUB_NOTIFICATION_GET },
+  { "notification rm", OPT::PUBSUB_NOTIFICATION_RM },
   { "script put", OPT::SCRIPT_PUT },
   { "script get", OPT::SCRIPT_GET },
   { "script rm", OPT::SCRIPT_RM },
@@ -2268,7 +2291,7 @@ static void get_data_sync_status(const rgw_zone_id& source_zone, list<string>& s
     return;
   }
 
-  if (!static_cast<rgw::sal::RadosStore*>(driver)->svc()->zone->zone_syncs_from(static_cast<rgw::sal::RadosStore*>(driver)->svc()->zone->get_zone(), *sz)) {
+  if (!static_cast<rgw::sal::RadosStore*>(driver)->svc()->zone->zone_syncs_from(*sz)) {
     push_ss(ss, status, tab) << string("not syncing from zone");
     flush_ss(ss, status);
     return;
@@ -3455,6 +3478,9 @@ int main(int argc, const char **argv)
   std::optional<int> bucket_index_max_shards;
 
   int max_concurrent_ios = 32;
+  ceph::timespan min_age = std::chrono::hours(1);
+  bool hide_progress = false;
+  bool dump_keys = false;
   uint64_t orphan_stale_secs = (24 * 3600);
   int detail = false;
 
@@ -3488,6 +3514,7 @@ int main(int argc, const char **argv)
   int trim_delay_ms = 0;
 
   string topic_name;
+  string notification_id;
   string sub_name;
   string event_id;
 
@@ -3718,6 +3745,8 @@ int main(int argc, const char **argv)
         cerr << "ERROR: failed to parse max concurrent ios: " << err << std::endl;
         return EINVAL;
       }
+    } else if (ceph_argparse_witharg(args, i, &val, "--min-age-hours", (char*)NULL)) {
+      min_age = std::chrono::hours(atoi(val.c_str()));
     } else if (ceph_argparse_witharg(args, i, &val, "--orphan-stale-secs", (char*)NULL)) {
       orphan_stale_secs = (uint64_t)strict_strtoll(val.c_str(), 10, &err);
       if (!err.empty()) {
@@ -3800,6 +3829,10 @@ int main(int argc, const char **argv)
      // do nothing
     } else if (ceph_argparse_binary_flag(args, i, &inconsistent_index, NULL, "--inconsistent-index", (char*)NULL)) {
      // do nothing
+    } else if (ceph_argparse_flag(args, i, "--hide-progress", (char*)NULL)) {
+      hide_progress = true;
+    } else if (ceph_argparse_flag(args, i, "--dump-keys", (char*)NULL)) {
+      dump_keys = true;
     } else if (ceph_argparse_binary_flag(args, i, &placement_inline_data, NULL, "--placement-inline-data", (char*)NULL)) {
       placement_inline_data_specified = true;
      // do nothing
@@ -3963,6 +3996,8 @@ int main(int argc, const char **argv)
       trim_delay_ms = atoi(val.c_str());
     } else if (ceph_argparse_witharg(args, i, &val, "--topic", (char*)NULL)) {
       topic_name = val;
+    } else if (ceph_argparse_witharg(args, i, &val, "--notification-id", (char*)NULL)) {
+      notification_id = val;
     } else if (ceph_argparse_witharg(args, i, &val, "--subscription", (char*)NULL)) {
       sub_name = val;
     } else if (ceph_argparse_witharg(args, i, &val, "--event-id", (char*)NULL)) {
@@ -4209,8 +4244,10 @@ int main(int argc, const char **argv)
                         OPT::ROLE_POLICY_GET,
                         OPT::RESHARD_LIST,
                         OPT::RESHARD_STATUS,
-                        OPT::PUBSUB_TOPICS_LIST,
+                        OPT::PUBSUB_TOPIC_LIST,
+       OPT::PUBSUB_NOTIFICATION_LIST,
                         OPT::PUBSUB_TOPIC_GET,
+       OPT::PUBSUB_NOTIFICATION_GET,
                         OPT::SCRIPT_GET,
     };
 
@@ -4290,9 +4327,12 @@ int main(int argc, const char **argv)
                           && opt_cmd != OPT::RESHARD_ADD
                           && opt_cmd != OPT::RESHARD_CANCEL
                           && opt_cmd != OPT::RESHARD_STATUS
-                          && opt_cmd != OPT::PUBSUB_TOPICS_LIST
+                          && opt_cmd != OPT::PUBSUB_TOPIC_LIST
+                          && opt_cmd != OPT::PUBSUB_NOTIFICATION_LIST
                           && opt_cmd != OPT::PUBSUB_TOPIC_GET
-                          && opt_cmd != OPT::PUBSUB_TOPIC_RM) {
+                          && opt_cmd != OPT::PUBSUB_NOTIFICATION_GET
+                          && opt_cmd != OPT::PUBSUB_TOPIC_RM
+                          && opt_cmd != OPT::PUBSUB_NOTIFICATION_RM) {
         cerr << "ERROR: --tenant is set, but there's no user ID" << std::endl;
         return EINVAL;
       }
@@ -6443,6 +6483,9 @@ int main(int argc, const char **argv)
   bucket_op.set_delete_children(delete_child_objects);
   bucket_op.set_fix_index(fix);
   bucket_op.set_max_aio(max_concurrent_ios);
+  bucket_op.set_min_age(min_age);
+  bucket_op.set_dump_keys(dump_keys);
+  bucket_op.set_hide_progress(hide_progress);
 
   // required to gather errors from operations
   std::string err_msg;
@@ -7177,6 +7220,47 @@ int main(int argc, const char **argv)
     formatter->flush(cout);
   }
 
+  if (opt_cmd == OPT::BUCKET_RESYNC_ENCRYPTED_MULTIPART) {
+    // repair logic for replication of encrypted multipart uploads:
+    // https://tracker.ceph.com/issues/46062
+    if (bucket_name.empty()) {
+      cerr << "ERROR: bucket not specified" << std::endl;
+      return EINVAL;
+    }
+    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    if (ret < 0) {
+      return -ret;
+    }
+
+    auto rados_driver = dynamic_cast<rgw::sal::RadosStore*>(driver);
+    if (!rados_driver) {
+      cerr << "ERROR: this command can only work when the cluster "
+          "has a RADOS backing store." << std::endl;
+      return EPERM;
+    }
+
+    // fail if recovery wouldn't generate replication log entries
+    if (!rados_driver->svc()->zone->need_to_log_data() && !yes_i_really_mean_it) {
+      cerr << "This command is only necessary for replicated buckets." << std::endl;
+      cerr << "do you really mean it? (requires --yes-i-really-mean-it)" << std::endl;
+      return EPERM;
+    }
+
+    formatter->open_object_section("modified");
+    encode_json("bucket", bucket->get_name(), formatter.get());
+    encode_json("bucket_id", bucket->get_bucket_id(), formatter.get());
+
+    ret = rados_driver->getRados()->bucket_resync_encrypted_multipart(
+        dpp(), null_yield, rados_driver, bucket->get_info(),
+        marker, stream_flusher);
+    if (ret < 0) {
+      return -ret;
+    }
+    formatter->close_section();
+    formatter->flush(cout);
+    return 0;
+  }
+
   if (opt_cmd == OPT::BUCKET_CHOWN) {
     if (bucket_name.empty()) {
       cerr << "ERROR: bucket name not specified" << std::endl;
@@ -8313,6 +8397,28 @@ next:
     }
   }
 
+  if (opt_cmd == OPT::BUCKET_CHECK_OLH) {
+    rgw::sal::RadosStore* store = dynamic_cast<rgw::sal::RadosStore*>(driver);
+    if (!store) {
+      cerr <<
+             "WARNING: this command is only relevant when the cluster has a RADOS backing store." <<
+             std::endl;
+      return 0;
+    }
+    RGWBucketAdminOp::check_index_olh(store, bucket_op, stream_flusher, dpp());
+  }
+
+  if (opt_cmd == OPT::BUCKET_CHECK_UNLINKED) {
+    rgw::sal::RadosStore* store = dynamic_cast<rgw::sal::RadosStore*>(driver);
+    if (!store) {
+      cerr <<
+             "WARNING: this command is only relevant when the cluster has a RADOS backing store." <<
+             std::endl;
+      return 0;
+    }
+    RGWBucketAdminOp::check_index_unlinked(store, bucket_op, stream_flusher, dpp());
+  }
+
   if (opt_cmd == OPT::BUCKET_RM) {
     if (!inconsistent_index) {
       RGWBucketAdminOp::remove_bucket(driver, bucket_op, null_yield, dpp(), bypass_gc, true);
@@ -9474,7 +9580,7 @@ next:
 
   if (opt_cmd == OPT::SYNC_GROUP_CREATE ||
       opt_cmd == OPT::SYNC_GROUP_MODIFY) {
-    CHECK_TRUE(require_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
     CHECK_TRUE(require_opt(opt_status), "ERROR: --status is not specified (options: forbidden, allowed, enabled)", EINVAL);
 
     SyncPolicyContext sync_policy_ctx(cfgstore.get(), opt_bucket);
@@ -9534,7 +9640,7 @@ next:
   }
 
   if (opt_cmd == OPT::SYNC_GROUP_REMOVE) {
-    CHECK_TRUE(require_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
 
     SyncPolicyContext sync_policy_ctx(cfgstore.get(), opt_bucket);
     ret = sync_policy_ctx.init(zonegroup_id, zonegroup_name);
@@ -9559,8 +9665,8 @@ next:
   }
 
   if (opt_cmd == OPT::SYNC_GROUP_FLOW_CREATE) {
-    CHECK_TRUE(require_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
-    CHECK_TRUE(require_opt(opt_flow_id), "ERROR: --flow-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_flow_id), "ERROR: --flow-id not specified", EINVAL);
     CHECK_TRUE(require_opt(opt_flow_type),
                            "ERROR: --flow-type not specified (options: symmetrical, directional)", EINVAL);
     CHECK_TRUE((symmetrical_flow_opt(*opt_flow_type) ||
@@ -9610,8 +9716,8 @@ next:
   }
 
   if (opt_cmd == OPT::SYNC_GROUP_FLOW_REMOVE) {
-    CHECK_TRUE(require_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
-    CHECK_TRUE(require_opt(opt_flow_id), "ERROR: --flow-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_flow_id), "ERROR: --flow-id not specified", EINVAL);
     CHECK_TRUE(require_opt(opt_flow_type),
                            "ERROR: --flow-type not specified (options: symmetrical, directional)", EINVAL);
     CHECK_TRUE((symmetrical_flow_opt(*opt_flow_type) ||
@@ -9652,8 +9758,8 @@ next:
 
   if (opt_cmd == OPT::SYNC_GROUP_PIPE_CREATE ||
       opt_cmd == OPT::SYNC_GROUP_PIPE_MODIFY) {
-    CHECK_TRUE(require_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
-    CHECK_TRUE(require_opt(opt_pipe_id), "ERROR: --pipe-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_pipe_id), "ERROR: --pipe-id not specified", EINVAL);
     if (opt_cmd == OPT::SYNC_GROUP_PIPE_CREATE) {
       CHECK_TRUE(require_non_empty_opt(opt_source_zone_ids), "ERROR: --source-zones not provided or is empty; should be list of zones or '*'", EINVAL);
       CHECK_TRUE(require_non_empty_opt(opt_dest_zone_ids), "ERROR: --dest-zones not provided or is empty; should be list of zones or '*'", EINVAL);
@@ -9738,8 +9844,8 @@ next:
   }
 
   if (opt_cmd == OPT::SYNC_GROUP_PIPE_REMOVE) {
-    CHECK_TRUE(require_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
-    CHECK_TRUE(require_opt(opt_pipe_id), "ERROR: --pipe-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_group_id), "ERROR: --group-id not specified", EINVAL);
+    CHECK_TRUE(require_non_empty_opt(opt_pipe_id), "ERROR: --pipe-id not specified", EINVAL);
 
     SyncPolicyContext sync_policy_ctx(cfgstore.get(), opt_bucket);
     ret = sync_policy_ctx.init(zonegroup_id, zonegroup_name);
@@ -10407,34 +10513,41 @@ next:
    }
  }
 
-  if (opt_cmd == OPT::PUBSUB_TOPICS_LIST) {
+  if (opt_cmd == OPT::PUBSUB_NOTIFICATION_LIST) {
+    if (bucket_name.empty()) {
+      cerr << "ERROR: bucket name was not provided (via --bucket)" << std::endl;
+      return EINVAL;
+    }
 
     RGWPubSub ps(driver, tenant);
 
-    if (!bucket_name.empty()) {
-      rgw_pubsub_bucket_topics result;
-      int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
-      if (ret < 0) {
-        cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
-        return -ret;
-      }
+    rgw_pubsub_bucket_topics result;
+    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    if (ret < 0) {
+      cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
+    }
 
-      const RGWPubSub::Bucket b(ps, bucket.get());
-      ret = b.get_topics(dpp(), result, null_yield);
-      if (ret < 0 && ret != -ENOENT) {
-        cerr << "ERROR: could not get topics: " << cpp_strerror(-ret) << std::endl;
-        return -ret;
-      }
-      encode_json("result", result, formatter.get());
-    } else {
-      rgw_pubsub_topics result;
-      int ret = ps.get_topics(dpp(), result, null_yield);
-      if (ret < 0 && ret != -ENOENT) {
-        cerr << "ERROR: could not get topics: " << cpp_strerror(-ret) << std::endl;
-        return -ret;
-      }
-      encode_json("result", result, formatter.get());
+    const RGWPubSub::Bucket b(ps, bucket.get());
+    ret = b.get_topics(dpp(), result, null_yield);
+    if (ret < 0 && ret != -ENOENT) {
+      cerr << "ERROR: could not get topics: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
     }
+    encode_json("result", result, formatter.get());
+    formatter->flush(cout);
+  }
+
+  if (opt_cmd == OPT::PUBSUB_TOPIC_LIST) {
+    RGWPubSub ps(driver, tenant);
+
+    rgw_pubsub_topics result;
+    int ret = ps.get_topics(dpp(), result, null_yield);
+    if (ret < 0 && ret != -ENOENT) {
+      cerr << "ERROR: could not get topics: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
+    }
+    encode_json("result", result, formatter.get());
     formatter->flush(cout);
   }
 
@@ -10456,12 +10569,54 @@ next:
     formatter->flush(cout);
   }
 
+  if (opt_cmd == OPT::PUBSUB_NOTIFICATION_GET) {
+    if (notification_id.empty()) {
+      cerr << "ERROR: notification-id was not provided (via --notification-id)" << std::endl;
+      return EINVAL;
+    }
+    if (bucket_name.empty()) {
+      cerr << "ERROR: bucket name was not provided (via --bucket)" << std::endl;
+      return EINVAL;
+    }
+
+    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    if (ret < 0) {
+      cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
+    }
+
+    RGWPubSub ps(driver, tenant);
+
+    rgw_pubsub_bucket_topics bucket_topics;
+    const RGWPubSub::Bucket b(ps, bucket.get());
+    ret = b.get_topics(dpp(), bucket_topics, null_yield);
+    if (ret < 0 && ret != -ENOENT) {
+      cerr << "ERROR: could not get bucket notifications: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
+    }
+
+    rgw_pubsub_topic_filter bucket_topic;
+    ret = b.get_notification_by_id(dpp(), notification_id, bucket_topic, null_yield);
+    if (ret < 0) {
+      cerr << "ERROR: could not get notification: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
+    }
+    encode_json("notification", bucket_topic, formatter.get());
+    formatter->flush(cout);
+  }
+
   if (opt_cmd == OPT::PUBSUB_TOPIC_RM) {
     if (topic_name.empty()) {
       cerr << "ERROR: topic name was not provided (via --topic)" << std::endl;
       return EINVAL;
     }
 
+    ret = rgw::notify::remove_persistent_topic(dpp(), static_cast<rgw::sal::RadosStore*>(driver)->getRados()->get_notif_pool_ctx(), topic_name, null_yield);
+    if (ret < 0) {
+      cerr << "ERROR: could not remove persistent topic: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
+    }
+
     RGWPubSub ps(driver, tenant);
 
     ret = ps.remove_topic(dpp(), topic_name, null_yield);
@@ -10471,6 +10626,36 @@ next:
     }
   }
 
+  if (opt_cmd == OPT::PUBSUB_NOTIFICATION_RM) {
+    if (bucket_name.empty()) {
+      cerr << "ERROR: bucket name was not provided (via --bucket)" << std::endl;
+      return EINVAL;
+    }
+
+    int ret = init_bucket(user.get(), tenant, bucket_name, bucket_id, &bucket);
+    if (ret < 0) {
+      cerr << "ERROR: could not init bucket: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
+    }
+
+    RGWPubSub ps(driver, tenant);
+
+    rgw_pubsub_bucket_topics bucket_topics;
+    const RGWPubSub::Bucket b(ps, bucket.get());
+    ret = b.get_topics(dpp(), bucket_topics, null_yield);
+    if (ret < 0 && ret != -ENOENT) {
+      cerr << "ERROR: could not get bucket notifications: " << cpp_strerror(-ret) << std::endl;
+      return -ret;
+    }
+
+    rgw_pubsub_topic_filter bucket_topic;
+    if(notification_id.empty()) {
+      ret = b.remove_notifications(dpp(), null_yield);
+    } else {
+      ret = b.remove_notification_by_id(dpp(), notification_id, null_yield);
+    }
+  }
+
   if (opt_cmd == OPT::SCRIPT_PUT) {
     if (!str_script_ctx) {
       cerr << "ERROR: context was not provided (via --context)" << std::endl;
index 186bdd54ad6fe4271912633c6ba5fd334cc3452b..3014edd1db09dbfeb34621f9da0f1661896ce4e6 100644 (file)
@@ -1,4 +1,4 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
 // vim: ts=8 sw=2 smarttab ft=cpp
 
 #include "rgw_amqp.h"
@@ -16,6 +16,7 @@
 #include <atomic>
 #include <mutex>
 #include <boost/lockfree/queue.hpp>
+#include <boost/functional/hash.hpp>
 #include "common/dout.h"
 #include <openssl/ssl.h>
 
@@ -50,49 +51,49 @@ static const int RGW_AMQP_STATUS_SOCKET_CACERT_FAILED =   -0x2010;
 static const int RGW_AMQP_RESPONSE_SOCKET_ERROR =         -0x3008;
 static const int RGW_AMQP_NO_REPLY_CODE =                 0x0;
 
-// key class for the connection list
-struct connection_id_t {
-  const std::string host;
-  const int port;
-  const std::string vhost;
-  // constructed from amqp_connection_info struct
-  connection_id_t(const amqp_connection_info& info) 
-    : host(info.host), port(info.port), vhost(info.vhost) {}
-
-  // equality operator and hasher functor are needed 
-  // so that connection_id_t could be used as key in unordered_map
-  bool operator==(const connection_id_t& other) const {
-    return host == other.host && port == other.port && vhost == other.vhost;
+// the amqp_connection_info struct does not hold any memory and just points to the URL string
+// so, strings are copied into connection_id_t
+connection_id_t::connection_id_t(const amqp_connection_info& info, const std::string& _exchange)
+    : host(info.host), port(info.port), vhost(info.vhost), exchange(_exchange), ssl(info.ssl) {}
+
+// equality operator and hasher functor are needed
+// so that connection_id_t could be used as key in unordered_map
+bool operator==(const connection_id_t& lhs, const connection_id_t& rhs) {
+  return lhs.host == rhs.host && lhs.port == rhs.port &&
+    lhs.vhost == rhs.vhost && lhs.exchange == rhs.exchange;
+}
+
+struct connection_id_hasher {
+  std::size_t operator()(const connection_id_t& k) const {
+    std::size_t h = 0;
+    boost::hash_combine(h, k.host);
+    boost::hash_combine(h, k.port);
+    boost::hash_combine(h, k.vhost);
+    boost::hash_combine(h, k.exchange);
+    return h;
   }
-  
-  struct hasher {
-    std::size_t operator()(const connection_id_t& k) const {
-       return ((std::hash<std::string>()(k.host)
-             ^ (std::hash<int>()(k.port) << 1)) >> 1)
-             ^ (std::hash<std::string>()(k.vhost) << 1); 
-    }
-  };
 };
 
 std::string to_string(const connection_id_t& id) {
-    return id.host+":"+std::to_string(id.port)+id.vhost;
+  return fmt::format("{}://{}:{}{}?exchange={}",
+      id.ssl ? "amqps" : "amqp",
+      id.host, id.port, id.vhost, id.exchange);
 }
 
-// connection_t state cleaner
-// could be used for automatic cleanup when getting out of scope
+// automatically cleans amqp state when gets out of scope
 class ConnectionCleaner {
   private:
-    amqp_connection_state_t conn;
+    amqp_connection_state_t state;
   public:
-    ConnectionCleaner(amqp_connection_state_t _conn) : conn(_conn) {}
+    ConnectionCleaner(amqp_connection_state_t _state) : state(_state) {}
     ~ConnectionCleaner() {
-      if (conn) {
-        amqp_destroy_connection(conn);
+      if (state) {
+        amqp_destroy_connection(state);
       }
     }
     // call reset() if cleanup is not needed anymore
     void reset() {
-      conn = nullptr;
+      state = nullptr;
     }
 };
 
@@ -100,9 +101,9 @@ class ConnectionCleaner {
 struct reply_callback_with_tag_t {
   uint64_t tag;
   reply_callback_t cb;
-  
+
   reply_callback_with_tag_t(uint64_t _tag, reply_callback_t _cb) : tag(_tag), cb(_cb) {}
-  
+
   bool operator==(uint64_t rhs) {
     return tag == rhs;
   }
@@ -111,44 +112,26 @@ struct reply_callback_with_tag_t {
 typedef std::vector<reply_callback_with_tag_t> CallbackList;
 
 // struct for holding the connection state object as well as the exchange
-// it is used inside an intrusive ref counted pointer (boost::intrusive_ptr)
-// since references to deleted objects may still exist in the calling code
 struct connection_t {
-  std::atomic<amqp_connection_state_t> state;
-  std::string exchange;
+  CephContext* cct = nullptr;
+  amqp_connection_state_t state = nullptr;
+  amqp_bytes_t reply_to_queue = amqp_empty_bytes;
+  uint64_t delivery_tag = 1;
+  int status = AMQP_STATUS_OK;
+  int reply_type = AMQP_RESPONSE_NORMAL;
+  int reply_code = RGW_AMQP_NO_REPLY_CODE;
+  CallbackList callbacks;
+  ceph::coarse_real_clock::time_point next_reconnect = ceph::coarse_real_clock::now();
+  bool mandatory = false;
+  const bool use_ssl = false;
   std::string user;
   std::string password;
-  amqp_bytes_t reply_to_queue;
-  uint64_t delivery_tag;
-  int status;
-  int reply_type;
-  int reply_code;
-  mutable std::atomic<int> ref_count;
-  CephContext* cct;
-  CallbackList callbacks;
-  ceph::coarse_real_clock::time_point next_reconnect;
-  bool mandatory;
-  bool use_ssl;
-  bool verify_ssl;
+  bool verify_ssl = true;
   boost::optional<std::string> ca_location;
   utime_t timestamp = ceph_clock_now();
 
-  // default ctor
-  connection_t() :
-    state(nullptr),
-    reply_to_queue(amqp_empty_bytes),
-    delivery_tag(1),
-    status(AMQP_STATUS_OK),
-    reply_type(AMQP_RESPONSE_NORMAL),
-    reply_code(RGW_AMQP_NO_REPLY_CODE),
-    ref_count(0),
-    cct(nullptr),
-    next_reconnect(ceph::coarse_real_clock::now()),
-    mandatory(false),
-    use_ssl(false),
-    verify_ssl(false),
-    ca_location(boost::none)
-  {}
+  connection_t(CephContext* _cct, const amqp_connection_info& info, bool _verify_ssl, boost::optional<const std::string&> _ca_location) :
+    cct(_cct), use_ssl(info.ssl), user(info.user), password(info.password), verify_ssl(_verify_ssl), ca_location(_ca_location) {}
 
   // cleanup of all internal connection resource
   // the object can still remain, and internal connection
@@ -176,28 +159,15 @@ struct connection_t {
   ~connection_t() {
     destroy(RGW_AMQP_STATUS_CONNECTION_CLOSED);
   }
-
-  friend void intrusive_ptr_add_ref(const connection_t* p);
-  friend void intrusive_ptr_release(const connection_t* p);
 };
 
-// these are required interfaces so that connection_t could be used inside boost::intrusive_ptr
-void intrusive_ptr_add_ref(const connection_t* p) {
-  ++p->ref_count;
-}
-void intrusive_ptr_release(const connection_t* p) {
-  if (--p->ref_count == 0) {
-    delete p;
-  }
-}
-
 // convert connection info to string
 std::string to_string(const amqp_connection_info& info) {
   std::stringstream ss;
   ss << "connection info:" <<
         "\nHost: " << info.host <<
         "\nPort: " << info.port <<
-        "\nUser: " << info.user << 
+        "\nUser: " << info.user <<
         "\nPassword: " << info.password <<
         "\nvhost: " << info.vhost <<
         "\nSSL support: " << info.ssl << std::endl;
@@ -212,7 +182,7 @@ int reply_to_code(const amqp_rpc_reply_t& reply) {
       return RGW_AMQP_NO_REPLY_CODE;
     case AMQP_RESPONSE_LIBRARY_EXCEPTION:
       return reply.library_error;
-    case AMQP_RESPONSE_SERVER_EXCEPTION: 
+    case AMQP_RESPONSE_SERVER_EXCEPTION:
       if (reply.reply.decoded) {
         const amqp_connection_close_t* m = (amqp_connection_close_t*)reply.reply.decoded;
         return m->reply_code;
@@ -232,7 +202,7 @@ std::string to_string(const amqp_rpc_reply_t& reply) {
       return "missing RPC reply type";
     case AMQP_RESPONSE_LIBRARY_EXCEPTION:
       return amqp_error_string2(reply.library_error);
-    case AMQP_RESPONSE_SERVER_EXCEPTION: 
+    case AMQP_RESPONSE_SERVER_EXCEPTION:
       {
         switch (reply.reply.id) {
           case AMQP_CONNECTION_CLOSE_METHOD:
@@ -281,7 +251,7 @@ std::string to_string(amqp_status_enum s) {
     case AMQP_STATUS_SOCKET_ERROR:
       return "AMQP_STATUS_SOCKET_ERROR";
     case AMQP_STATUS_INVALID_PARAMETER:
-      return "AMQP_STATUS_INVALID_PARAMETER"; 
+      return "AMQP_STATUS_INVALID_PARAMETER";
     case AMQP_STATUS_TABLE_TOO_BIG:
       return "AMQP_STATUS_TABLE_TOO_BIG";
     case AMQP_STATUS_WRONG_METHOD:
@@ -305,13 +275,13 @@ std::string to_string(amqp_status_enum s) {
       return "AMQP_STATUS_UNSUPPORTED";
 #endif
     case _AMQP_STATUS_NEXT_VALUE:
-      return "AMQP_STATUS_INTERNAL"; 
+      return "AMQP_STATUS_INTERNAL";
     case AMQP_STATUS_TCP_ERROR:
         return "AMQP_STATUS_TCP_ERROR";
     case AMQP_STATUS_TCP_SOCKETLIB_INIT_ERROR:
       return "AMQP_STATUS_TCP_SOCKETLIB_INIT_ERROR";
     case _AMQP_STATUS_TCP_NEXT_VALUE:
-      return "AMQP_STATUS_INTERNAL"; 
+      return "AMQP_STATUS_INTERNAL";
     case AMQP_STATUS_SSL_ERROR:
       return "AMQP_STATUS_SSL_ERROR";
     case AMQP_STATUS_SSL_HOSTNAME_VERIFY_FAILED:
@@ -321,7 +291,7 @@ std::string to_string(amqp_status_enum s) {
     case AMQP_STATUS_SSL_CONNECTION_FAILED:
       return "AMQP_STATUS_SSL_CONNECTION_FAILED";
     case _AMQP_STATUS_SSL_NEXT_VALUE:
-      return "AMQP_STATUS_INTERNAL"; 
+      return "AMQP_STATUS_INTERNAL";
 #if AMQP_VERSION >= AMQP_VERSION_CODE(0, 11, 0, 0)
     case AMQP_STATUS_SSL_SET_ENGINE_FAILED:
       return "AMQP_STATUS_SSL_SET_ENGINE_FAILED";
@@ -374,7 +344,7 @@ std::string status_to_string(int s) {
 #define RETURN_ON_ERROR(C, S, OK) \
   if (!OK) { \
     C->status = S; \
-    return C; \
+    return false; \
   }
 
 // in case of RPC calls, getting the RPC reply and return if an error is detected
@@ -384,7 +354,7 @@ std::string status_to_string(int s) {
         C->status = S; \
         C->reply_type = reply.reply_type; \
         C->reply_code = reply_to_code(reply); \
-        return C; \
+        return false; \
       } \
     }
 
@@ -392,25 +362,25 @@ static const amqp_channel_t CHANNEL_ID = 1;
 static const amqp_channel_t CONFIRMING_CHANNEL_ID = 2;
 
 // utility function to create a connection, when the connection object already exists
-connection_ptr_t& create_connection(connection_ptr_t& conn, const amqp_connection_info& info) {
-  ceph_assert(conn);
-
+bool new_state(connection_t* conn, const connection_id_t& conn_id) {
+  // state must be null at this point
+  ceph_assert(!conn->state);
   // reset all status codes
-  conn->status = AMQP_STATUS_OK; 
+  conn->status = AMQP_STATUS_OK;
   conn->reply_type = AMQP_RESPONSE_NORMAL;
   conn->reply_code = RGW_AMQP_NO_REPLY_CODE;
 
   auto state = amqp_new_connection();
   if (!state) {
     conn->status = RGW_AMQP_STATUS_CONN_ALLOC_FAILED;
-    return conn;
+    return false;
   }
   // make sure that the connection state is cleaned up in case of error
   ConnectionCleaner state_guard(state);
 
   // create and open socket
   amqp_socket_t *socket = nullptr;
-  if (info.ssl) {
+  if (conn->use_ssl) {
     socket = amqp_ssl_socket_new(state);
 #if AMQP_VERSION >= AMQP_VERSION_CODE(0, 10, 0, 1)
     SSL_CTX* ssl_ctx = reinterpret_cast<SSL_CTX*>(amqp_ssl_socket_get_context(socket));
@@ -433,9 +403,9 @@ connection_ptr_t& create_connection(connection_ptr_t& conn, const amqp_connectio
 
   if (!socket) {
     conn->status = RGW_AMQP_STATUS_SOCKET_ALLOC_FAILED;
-    return conn;
+    return false;
   }
-  if (info.ssl) {
+  if (conn->use_ssl) {
     if (!conn->verify_ssl) {
       amqp_ssl_socket_set_verify_peer(socket, 0);
       amqp_ssl_socket_set_verify_hostname(socket, 0);
@@ -445,32 +415,32 @@ connection_ptr_t& create_connection(connection_ptr_t& conn, const amqp_connectio
       if (s != AMQP_STATUS_OK) {
         conn->status = RGW_AMQP_STATUS_SOCKET_CACERT_FAILED;
         conn->reply_code = s;
-        return conn;
+        return false;
       }
     }
   }
-  const auto s = amqp_socket_open(socket, info.host, info.port);
+  const auto s = amqp_socket_open(socket, conn_id.host.c_str(), conn_id.port);
   if (s < 0) {
     conn->status = RGW_AMQP_STATUS_SOCKET_OPEN_FAILED;
     conn->reply_type = RGW_AMQP_RESPONSE_SOCKET_ERROR;
     conn->reply_code = s;
-    return conn;
+    return false;
   }
 
   // login to broker
   const auto reply = amqp_login(state,
-      info.vhost, 
+      conn_id.vhost.c_str(),
       AMQP_DEFAULT_MAX_CHANNELS,
       AMQP_DEFAULT_FRAME_SIZE,
       0,                        // no heartbeat TODO: add conf
       AMQP_SASL_METHOD_PLAIN,   // TODO: add other types of security
-      info.user,
-      info.password);
+      conn->user.c_str(),
+      conn->password.c_str());
   if (reply.reply_type != AMQP_RESPONSE_NORMAL) {
     conn->status = RGW_AMQP_STATUS_LOGIN_FAILED;
     conn->reply_type = reply.reply_type;
     conn->reply_code = reply_to_code(reply);
-    return conn;
+    return false;
   }
 
   // open channels
@@ -493,9 +463,9 @@ connection_ptr_t& create_connection(connection_ptr_t& conn, const amqp_connectio
   // verify that the topic exchange is there
   // TODO: make this step optional
   {
-    const auto ok = amqp_exchange_declare(state, 
+    const auto ok = amqp_exchange_declare(state,
       CHANNEL_ID,
-      amqp_cstring_bytes(conn->exchange.c_str()),
+      amqp_cstring_bytes(conn_id.exchange.c_str()),
       amqp_cstring_bytes("topic"),
       1, // passive - exchange must already exist on broker
       1, // durable
@@ -507,12 +477,12 @@ connection_ptr_t& create_connection(connection_ptr_t& conn, const amqp_connectio
   }
   {
     // create queue for confirmations
-    const auto queue_ok = amqp_queue_declare(state, 
+    const auto queue_ok = amqp_queue_declare(state,
         CHANNEL_ID,         // use the regular channel for this call
         amqp_empty_bytes,   // let broker allocate queue name
-        0,                  // not passive - create the queue 
-        0,                  // not durable 
-        1,                  // exclusive 
+        0,                  // not passive - create the queue
+        0,                  // not durable
+        1,                  // exclusive
         1,                  // auto-delete
         amqp_empty_table    // not args TODO add args from conf: TTL, max length etc.
         );
@@ -520,8 +490,8 @@ connection_ptr_t& create_connection(connection_ptr_t& conn, const amqp_connectio
     RETURN_ON_REPLY_ERROR(conn, state, RGW_AMQP_STATUS_Q_DECLARE_FAILED);
 
     // define consumption for connection
-    const auto consume_ok = amqp_basic_consume(state, 
-        CONFIRMING_CHANNEL_ID, 
+    const auto consume_ok = amqp_basic_consume(state,
+        CONFIRMING_CHANNEL_ID,
         queue_ok->queue,
         amqp_empty_bytes, // broker will generate consumer tag
         1,                // messages sent from client are never routed back
@@ -533,45 +503,30 @@ connection_ptr_t& create_connection(connection_ptr_t& conn, const amqp_connectio
     RETURN_ON_ERROR(conn, RGW_AMQP_STATUS_CONSUME_DECLARE_FAILED, consume_ok);
     RETURN_ON_REPLY_ERROR(conn, state, RGW_AMQP_STATUS_CONSUME_DECLARE_FAILED);
     // broker generated consumer_tag could be used to cancel sending of n/acks from broker - not needed
-    
+
     state_guard.reset();
     conn->state = state;
     conn->reply_to_queue = amqp_bytes_malloc_dup(queue_ok->queue);
-    return conn;
   }
-}
-
-// utility function to create a new connection
-connection_ptr_t create_new_connection(const amqp_connection_info& info, 
-    const std::string& exchange, bool mandatory_delivery, CephContext* cct, bool verify_ssl, boost::optional<const std::string&> ca_location) { 
-  // create connection state
-  connection_ptr_t conn = new connection_t;
-  conn->exchange = exchange;
-  conn->user.assign(info.user);
-  conn->password.assign(info.password);
-  conn->mandatory = mandatory_delivery;
-  conn->cct = cct;
-  conn->use_ssl = info.ssl;
-  conn->verify_ssl = verify_ssl;
-  conn->ca_location = ca_location;
-  return create_connection(conn, info);
+  return true;
 }
 
 /// struct used for holding messages in the message queue
 struct message_wrapper_t {
-  connection_ptr_t conn; 
+  connection_id_t conn_id;
   std::string topic;
   std::string message;
   reply_callback_t cb;
-  
-  message_wrapper_t(connection_ptr_t& _conn,
+
+  message_wrapper_t(const connection_id_t& _conn_id,
       const std::string& _topic,
       const std::string& _message,
-      reply_callback_t _cb) : conn(_conn), topic(_topic), message(_message), cb(_cb) {}
+      reply_callback_t _cb) : conn_id(_conn_id), topic(_topic), message(_message), cb(_cb) {}
 };
 
+using connection_t_ptr = std::unique_ptr<connection_t>;
 
-typedef std::unordered_map<connection_id_t, connection_ptr_t, connection_id_t::hasher> ConnectionList;
+typedef std::unordered_map<connection_id_t, connection_t_ptr, connection_id_hasher> ConnectionList;
 typedef boost::lockfree::queue<message_wrapper_t*, boost::lockfree::fixed_sized<true>> MessageQueue;
 
 // macros used inside a loop where an iterator is either incremented or erased
@@ -606,14 +561,23 @@ private:
 
   void publish_internal(message_wrapper_t* message) {
     const std::unique_ptr<message_wrapper_t> msg_owner(message);
-    auto& conn = message->conn;
+    const auto& conn_id = message->conn_id;
+    auto conn_it = connections.find(conn_id);
+    if (conn_it == connections.end()) {
+      ldout(cct, 1) << "AMQP publish: connection '" << to_string(conn_id) << "' not found" << dendl;
+      if (message->cb) {
+        message->cb(RGW_AMQP_STATUS_CONNECTION_CLOSED);
+      }
+      return;
+    }
+
+    auto& conn = conn_it->second;
 
     conn->timestamp = ceph_clock_now();
 
     if (!conn->is_ok()) {
       // connection had an issue while message was in the queue
-      // TODO add error stats
-      ldout(conn->cct, 1) << "AMQP publish: connection had an issue while message was in the queue" << dendl;
+      ldout(cct, 1) << "AMQP publish: connection '" << to_string(conn_id) << "' is closed" << dendl;
       if (message->cb) {
         message->cb(RGW_AMQP_STATUS_CONNECTION_CLOSED);
       }
@@ -621,20 +585,19 @@ private:
     }
 
     if (message->cb == nullptr) {
-      // TODO add error stats
       const auto rc = amqp_basic_publish(conn->state,
         CHANNEL_ID,
-        amqp_cstring_bytes(conn->exchange.c_str()),
+        amqp_cstring_bytes(conn_id.exchange.c_str()),
         amqp_cstring_bytes(message->topic.c_str()),
         0, // does not have to be routable
         0, // not immediate
         nullptr, // no properties needed
         amqp_cstring_bytes(message->message.c_str()));
       if (rc == AMQP_STATUS_OK) {
-        ldout(conn->cct, 20) << "AMQP publish (no callback): OK" << dendl;
+        ldout(cct, 20) << "AMQP publish (no callback): OK" << dendl;
         return;
       }
-      ldout(conn->cct, 1) << "AMQP publish (no callback): failed with error " << status_to_string(rc) << dendl;
+      ldout(cct, 1) << "AMQP publish (no callback): failed with error " << status_to_string(rc) << dendl;
       // an error occurred, close connection
       // it will be retied by the main loop
       conn->destroy(rc);
@@ -642,15 +605,15 @@ private:
     }
 
     amqp_basic_properties_t props;
-    props._flags = 
-      AMQP_BASIC_DELIVERY_MODE_FLAG | 
+    props._flags =
+      AMQP_BASIC_DELIVERY_MODE_FLAG |
       AMQP_BASIC_REPLY_TO_FLAG;
     props.delivery_mode = 2; // persistent delivery TODO take from conf
     props.reply_to = conn->reply_to_queue;
 
     const auto rc = amqp_basic_publish(conn->state,
       CONFIRMING_CHANNEL_ID,
-      amqp_cstring_bytes(conn->exchange.c_str()),
+      amqp_cstring_bytes(conn_id.exchange.c_str()),
       amqp_cstring_bytes(message->topic.c_str()),
       conn->mandatory,
       0, // not immediate
@@ -660,17 +623,17 @@ private:
     if (rc == AMQP_STATUS_OK) {
       auto const q_len = conn->callbacks.size();
       if (q_len < max_inflight) {
-        ldout(conn->cct, 20) << "AMQP publish (with callback, tag=" << conn->delivery_tag << "): OK. Queue has: " << q_len << " callbacks" << dendl;
+        ldout(cct, 20) << "AMQP publish (with callback, tag=" << conn->delivery_tag << "): OK. Queue has: " << q_len << " callbacks" << dendl;
         conn->callbacks.emplace_back(conn->delivery_tag++, message->cb);
       } else {
         // immediately invoke callback with error
-        ldout(conn->cct, 1) << "AMQP publish (with callback): failed with error: callback queue full" << dendl;
+        ldout(cct, 1) << "AMQP publish (with callback): failed with error: callback queue full" << dendl;
         message->cb(RGW_AMQP_STATUS_MAX_INFLIGHT);
       }
     } else {
       // an error occurred, close connection
       // it will be retied by the main loop
-      ldout(conn->cct, 1) << "AMQP publish (with callback): failed with error: " << status_to_string(rc) << dendl;
+      ldout(cct, 1) << "AMQP publish (with callback): failed with error: " << status_to_string(rc) << dendl;
       conn->destroy(rc);
       // immediately invoke callback with error
       message->cb(rc);
@@ -702,12 +665,12 @@ private:
       auto incoming_message = false;
       // loop over all connections to read acks
       for (;conn_it != end_it;) {
-        
+
+        const auto& conn_id = conn_it->first;
         auto& conn = conn_it->second;
-        const auto& conn_key = conn_it->first;
 
         if(conn->timestamp.sec() + max_idle_time < ceph_clock_now()) {
-          ldout(conn->cct, 20) << "Time for deleting a connection due to idle behaviour: " << ceph_clock_now() << dendl;
+          ldout(cct, 20) << "AMQP run: Time for deleting a connection due to idle behaviour: " << ceph_clock_now() << dendl;
           ERASE_AND_CONTINUE(conn_it, connections);
         }
 
@@ -717,22 +680,15 @@ private:
           if (now >= conn->next_reconnect) {
             // pointers are used temporarily inside the amqp_connection_info object
             // as read-only values, hence the assignment, and const_cast are safe here
-            amqp_connection_info info;
-            info.host = const_cast<char*>(conn_key.host.c_str());
-            info.port = conn_key.port;
-            info.vhost = const_cast<char*>(conn_key.vhost.c_str());
-            info.user = const_cast<char*>(conn->user.c_str());
-            info.password = const_cast<char*>(conn->password.c_str());
-            info.ssl = conn->use_ssl;
-            ldout(conn->cct, 20) << "AMQP run: retry connection" << dendl;
-            if (create_connection(conn, info)->is_ok() == false) {
-              ldout(conn->cct, 10) << "AMQP run: connection (" << to_string(conn_key) << ") retry failed. error: " <<
+            ldout(cct, 20) << "AMQP run: retry connection" << dendl;
+            if (!new_state(conn.get(), conn_id)) {
+              ldout(cct, 10) << "AMQP run: connection '" << to_string(conn_id) << "' retry failed. error: " <<
                 status_to_string(conn->status) << " (" << conn->reply_code << ")"  << dendl;
               // TODO: add error counter for failed retries
               // TODO: add exponential backoff for retries
               conn->next_reconnect = now + reconnect_time;
             } else {
-              ldout(conn->cct, 10) << "AMQP run: connection (" << to_string(conn_key) << ") retry successfull" << dendl;
+              ldout(cct, 10) << "AMQP run: connection '" << to_string(conn_id) << "' retry successfull" << dendl;
             }
           }
           INCREMENT_AND_CONTINUE(conn_it);
@@ -744,7 +700,7 @@ private:
           // TODO mark connection as idle
           INCREMENT_AND_CONTINUE(conn_it);
         }
-       
+
         // this is just to prevent spinning idle, does not indicate that a message
         // was successfully processed or not
         incoming_message = true;
@@ -753,13 +709,13 @@ private:
         if (rc != AMQP_STATUS_OK) {
           // an error occurred, close connection
           // it will be retied by the main loop
-          ldout(conn->cct, 1) << "AMQP run: connection read error: " << status_to_string(rc) << dendl;
+          ldout(cct, 1) << "AMQP run: connection read error: " << status_to_string(rc) << dendl;
           conn->destroy(rc);
           INCREMENT_AND_CONTINUE(conn_it);
         }
 
         if (frame.frame_type != AMQP_FRAME_METHOD) {
-          ldout(conn->cct, 10) << "AMQP run: ignoring non n/ack messages. frame type: " 
+          ldout(cct, 10) << "AMQP run: ignoring non n/ack messages. frame type: "
             << unsigned(frame.frame_type) << dendl;
           // handler is for publish confirmation only - handle only method frames
           INCREMENT_AND_CONTINUE(conn_it);
@@ -770,7 +726,7 @@ private:
         int result;
 
         switch (frame.payload.method.id) {
-          case AMQP_BASIC_ACK_METHOD: 
+          case AMQP_BASIC_ACK_METHOD:
             {
               result = AMQP_STATUS_OK;
               const auto ack = (amqp_basic_ack_t*)frame.payload.method.decoded;
@@ -788,12 +744,12 @@ private:
               multiple = nack->multiple;
               break;
             }
-          case AMQP_BASIC_REJECT_METHOD:                                                   
-            {                                                                              
-              result = RGW_AMQP_STATUS_BROKER_NACK;                                        
-              const auto reject = (amqp_basic_reject_t*)frame.payload.method.decoded;      
-              tag = reject->delivery_tag;                                                  
-              multiple = false;                                                            
+          case AMQP_BASIC_REJECT_METHOD:
+            {
+              result = RGW_AMQP_STATUS_BROKER_NACK;
+              const auto reject = (amqp_basic_reject_t*)frame.payload.method.decoded;
+              tag = reject->delivery_tag;
+              multiple = false;
               break;
             }
           case AMQP_CONNECTION_CLOSE_METHOD:
@@ -801,42 +757,40 @@ private:
           case AMQP_CHANNEL_CLOSE_METHOD:
             {
               // other side closed the connection, no need to continue
-              ldout(conn->cct, 10) << "AMQP run: connection was closed by broker" << dendl;
+              ldout(cct, 10) << "AMQP run: connection was closed by broker" << dendl;
               conn->destroy(rc);
               INCREMENT_AND_CONTINUE(conn_it);
             }
           case AMQP_BASIC_RETURN_METHOD:
             // message was not delivered, returned to sender
-            ldout(conn->cct, 10) << "AMQP run: message was not routable" << dendl;
+            ldout(cct, 10) << "AMQP run: message was not routable" << dendl;
             INCREMENT_AND_CONTINUE(conn_it);
             break;
           default:
             // unexpected method
-            ldout(conn->cct, 10) << "AMQP run: unexpected message" << dendl;
+            ldout(cct, 10) << "AMQP run: unexpected message" << dendl;
             INCREMENT_AND_CONTINUE(conn_it);
         }
 
-        const auto& callbacks_end = conn->callbacks.end();
-        const auto& callbacks_begin = conn->callbacks.begin();
-        const auto tag_it = std::find(callbacks_begin, callbacks_end, tag);
-        if (tag_it != callbacks_end) {
+        const auto tag_it = std::find(conn->callbacks.begin(), conn->callbacks.end(), tag);
+        if (tag_it != conn->callbacks.end()) {
           if (multiple) {
             // n/ack all up to (and including) the tag
-            ldout(conn->cct, 20) << "AMQP run: multiple n/acks received with tag=" << tag << " and result=" << result << dendl;
-            auto it = callbacks_begin;
+            ldout(cct, 20) << "AMQP run: multiple n/acks received with tag=" << tag << " and result=" << result << dendl;
+            auto it = conn->callbacks.begin();
             while (it->tag <= tag && it != conn->callbacks.end()) {
-              ldout(conn->cct, 20) << "AMQP run: invoking callback with tag=" << it->tag << dendl;
+              ldout(cct, 20) << "AMQP run: invoking callback with tag=" << it->tag << dendl;
               it->cb(result);
               it = conn->callbacks.erase(it);
             }
           } else {
             // n/ack a specific tag
-            ldout(conn->cct, 20) << "AMQP run: n/ack received, invoking callback with tag=" << tag << " and result=" << result << dendl;
+            ldout(cct, 20) << "AMQP run: n/ack received, invoking callback with tag=" << tag << " and result=" << result << dendl;
             tag_it->cb(result);
             conn->callbacks.erase(tag_it);
           }
         } else {
-          ldout(conn->cct, 10) << "AMQP run: unsolicited n/ack received with tag=" << tag << dendl;
+          ldout(cct, 10) << "AMQP run: unsolicited n/ack received with tag=" << tag << dendl;
         }
         // just increment the iterator
         ++conn_it;
@@ -856,11 +810,11 @@ private:
 public:
   Manager(size_t _max_connections,
       size_t _max_inflight,
-      size_t _max_queue, 
+      size_t _max_queue,
       long _usec_timeout,
       unsigned reconnect_time_ms,
       unsigned idle_time_ms,
-      CephContext* _cct) : 
+      CephContext* _cct) :
     max_connections(_max_connections),
     max_inflight(_max_inflight),
     max_queue(_max_queue),
@@ -876,9 +830,9 @@ public:
     idle_time(std::chrono::milliseconds(idle_time_ms)),
     reconnect_time(std::chrono::milliseconds(reconnect_time_ms)),
     runner(&Manager::run, this) {
-      // The hashmap has "max connections" as the initial number of buckets, 
+      // The hashmap has "max connections" as the initial number of buckets,
       // and allows for 10 collisions per bucket before rehash.
-      // This is to prevent rehashing so that iterators are not invalidated 
+      // This is to prevent rehashing so that iterators are not invalidated
       // when a new connection is added.
       connections.max_load_factor(10.0);
       // give the runner thread a name for easier debugging
@@ -896,76 +850,68 @@ public:
   }
 
   // connect to a broker, or reuse an existing connection if already connected
-  connection_ptr_t connect(const std::string& url, const std::string& exchange, bool mandatory_delivery, bool verify_ssl,
+  bool connect(connection_id_t& id, const std::string& url, const std::string& exchange, bool mandatory_delivery, bool verify_ssl,
         boost::optional<const std::string&> ca_location) {
     if (stopped) {
       ldout(cct, 1) << "AMQP connect: manager is stopped" << dendl;
-      return nullptr;
+      return false;
     }
 
-    struct amqp_connection_info info;
+    amqp_connection_info info;
     // cache the URL so that parsing could happen in-place
     std::vector<char> url_cache(url.c_str(), url.c_str()+url.size()+1);
     const auto retcode = amqp_parse_url(url_cache.data(), &info);
     if (AMQP_STATUS_OK != retcode) {
       ldout(cct, 1) << "AMQP connect: URL parsing failed. error: " << retcode << dendl;
-      return nullptr;
+      return false;
     }
+    connection_id_t tmp_id(info, exchange);
 
-    const connection_id_t id(info);
     std::lock_guard lock(connections_lock);
-    const auto it = connections.find(id);
+    const auto it = connections.find(tmp_id);
     if (it != connections.end()) {
-      if (it->second->exchange != exchange) {
-        ldout(cct, 1) << "AMQP connect: exchange mismatch" << dendl;
-        return nullptr;
-      }
       // connection found - return even if non-ok
       ldout(cct, 20) << "AMQP connect: connection found" << dendl;
-      return it->second;
+      id = it->first;
+      return true;
     }
 
     // connection not found, creating a new one
     if (connection_count >= max_connections) {
       ldout(cct, 1) << "AMQP connect: max connections exceeded" << dendl;
-      return nullptr;
+      return false;
     }
-    const auto conn = create_new_connection(info, exchange, mandatory_delivery, cct, verify_ssl, ca_location);
-    if (!conn->is_ok()) {
-      ldout(cct, 10) << "AMQP connect: connection (" << to_string(id) << ") creation failed. error:" <<
-              status_to_string(conn->status) << "(" << conn->reply_code << ")" << dendl;
-    }
-    // create_new_connection must always return a connection object
-    // even if error occurred during creation. 
-    // in such a case the creation will be retried in the main thread
-    ceph_assert(conn);
+    // if error occurred during creation the creation will be retried in the main thread
     ++connection_count;
+    auto conn = connections.emplace(tmp_id, std::make_unique<connection_t>(cct, info, verify_ssl, ca_location)).first->second.get();
     ldout(cct, 10) << "AMQP connect: new connection is created. Total connections: " << connection_count << dendl;
-    ldout(cct, 10) << "AMQP connect: new connection status is: " << status_to_string(conn->status) << dendl;
-    return connections.emplace(id, conn).first->second;
+    if (!new_state(conn, tmp_id)) {
+      ldout(cct, 1) << "AMQP connect: new connection '" << to_string(tmp_id) << "' is created. but state creation failed (will retry). error: " <<
+        status_to_string(conn->status) << " (" << conn->reply_code << ")"  << dendl;
+    }
+    id = std::move(tmp_id);
+    return true;
   }
 
   // TODO publish with confirm is needed in "none" case as well, cb should be invoked publish is ok (no ack)
-  int publish(connection_ptr_t& conn, 
+  int publish(const connection_id_t& conn_id,
     const std::string& topic,
     const std::string& message) {
     if (stopped) {
       ldout(cct, 1) << "AMQP publish: manager is not running" << dendl;
       return RGW_AMQP_STATUS_MANAGER_STOPPED;
     }
-    if (!conn || !conn->is_ok()) {
-      ldout(cct, 1) << "AMQP publish: no connection" << dendl;
-      return RGW_AMQP_STATUS_CONNECTION_CLOSED;
-    }
-    if (messages.push(new message_wrapper_t(conn, topic, message, nullptr))) {
+    auto wrapper = std::make_unique<message_wrapper_t>(conn_id, topic, message, nullptr);
+    if (messages.push(wrapper.get())) {
+      std::ignore = wrapper.release();
       ++queued;
       return AMQP_STATUS_OK;
     }
     ldout(cct, 1) << "AMQP publish: queue is full" << dendl;
     return RGW_AMQP_STATUS_QUEUE_FULL;
   }
-  
-  int publish_with_confirm(connection_ptr_t& conn, 
+
+  int publish_with_confirm(const connection_id_t& conn_id,
     const std::string& topic,
     const std::string& message,
     reply_callback_t cb) {
@@ -973,11 +919,9 @@ public:
       ldout(cct, 1) << "AMQP publish_with_confirm: manager is not running" << dendl;
       return RGW_AMQP_STATUS_MANAGER_STOPPED;
     }
-    if (!conn || !conn->is_ok()) {
-      ldout(cct, 1) << "AMQP publish_with_confirm: no connection" << dendl;
-      return RGW_AMQP_STATUS_CONNECTION_CLOSED;
-    }
-    if (messages.push(new message_wrapper_t(conn, topic, message, cb))) {
+    auto wrapper = std::make_unique<message_wrapper_t>(conn_id, topic, message, cb);
+    if (messages.push(wrapper.get())) {
+      std::ignore = wrapper.release();
       ++queued;
       return AMQP_STATUS_OK;
     }
@@ -997,7 +941,7 @@ public:
   size_t get_connection_count() const {
     return connection_count;
   }
-  
+
   // get the number of in-flight messages
   size_t get_inflight() const {
     size_t sum = 0;
@@ -1026,7 +970,7 @@ public:
 static Manager* s_manager = nullptr;
 
 static const size_t MAX_CONNECTIONS_DEFAULT = 256;
-static const size_t MAX_INFLIGHT_DEFAULT = 8192; 
+static const size_t MAX_INFLIGHT_DEFAULT = 8192;
 static const size_t MAX_QUEUE_DEFAULT = 8192;
 static const long READ_TIMEOUT_USEC = 100;
 static const unsigned IDLE_TIME_MS = 100;
@@ -1037,7 +981,7 @@ bool init(CephContext* cct) {
     return false;
   }
   // TODO: take conf from CephContext
-  s_manager = new Manager(MAX_CONNECTIONS_DEFAULT, MAX_INFLIGHT_DEFAULT, MAX_QUEUE_DEFAULT, 
+  s_manager = new Manager(MAX_CONNECTIONS_DEFAULT, MAX_INFLIGHT_DEFAULT, MAX_QUEUE_DEFAULT,
       READ_TIMEOUT_USEC, IDLE_TIME_MS, RECONNECT_TIME_MS, cct);
   return true;
 }
@@ -1047,32 +991,32 @@ void shutdown() {
   s_manager = nullptr;
 }
 
-connection_ptr_t connect(const std::string& url, const std::string& exchange, bool mandatory_delivery, bool verify_ssl,
+bool connect(connection_id_t& conn_id, const std::string& url, const std::string& exchange, bool mandatory_delivery, bool verify_ssl,
         boost::optional<const std::string&> ca_location) {
-  if (!s_manager) return nullptr;
-  return s_manager->connect(url, exchange, mandatory_delivery, verify_ssl, ca_location);
+  if (!s_manager) return false;
+  return s_manager->connect(conn_id, url, exchange, mandatory_delivery, verify_ssl, ca_location);
 }
 
-int publish(connection_ptr_t& conn, 
+int publish(const connection_id_t& conn_id,
     const std::string& topic,
     const std::string& message) {
   if (!s_manager) return RGW_AMQP_STATUS_MANAGER_STOPPED;
-  return s_manager->publish(conn, topic, message);
+  return s_manager->publish(conn_id, topic, message);
 }
 
-int publish_with_confirm(connection_ptr_t& conn, 
+int publish_with_confirm(const connection_id_t& conn_id,
     const std::string& topic,
     const std::string& message,
     reply_callback_t cb) {
   if (!s_manager) return RGW_AMQP_STATUS_MANAGER_STOPPED;
-  return s_manager->publish_with_confirm(conn, topic, message, cb);
+  return s_manager->publish_with_confirm(conn_id, topic, message, cb);
 }
 
 size_t get_connection_count() {
   if (!s_manager) return 0;
   return s_manager->get_connection_count();
 }
-  
+
 size_t get_inflight() {
   if (!s_manager) return 0;
   return s_manager->get_inflight();
index 84d0650731c53139a032000b64911a25705faf24..c363f4d740348208d7566f284fe3500a09839106 100644 (file)
@@ -6,19 +6,12 @@
 #include <string>
 #include <functional>
 #include <boost/optional.hpp>
-#include <boost/smart_ptr/intrusive_ptr.hpp>
 
 #include "include/common_fwd.h"
 
-namespace rgw::amqp {
-// forward declaration of connection object
-struct connection_t;
-
-typedef boost::intrusive_ptr<connection_t> connection_ptr_t;
+struct amqp_connection_info;
 
-// required interfaces needed so that connection_t could be used inside boost::intrusive_ptr
-void intrusive_ptr_add_ref(const connection_t* p);
-void intrusive_ptr_release(const connection_t* p);
+namespace rgw::amqp {
 
 // the reply callback is expected to get an integer parameter
 // indicating the result, and not to return anything
@@ -30,19 +23,32 @@ bool init(CephContext* cct);
 // shutdown the amqp manager
 void shutdown();
 
+// key class for the connection list
+struct connection_id_t {
+  std::string host;
+  int port;
+  std::string vhost;
+  std::string exchange;
+  bool ssl;
+  connection_id_t() = default;
+  connection_id_t(const amqp_connection_info& info, const std::string& _exchange);
+};
+
+std::string to_string(const connection_id_t& id);
+
 // connect to an amqp endpoint
-connection_ptr_t connect(const std::string& url, const std::string& exchange, bool mandatory_delivery, bool verify_ssl,
+bool connect(connection_id_t& conn_id, const std::string& url, const std::string& exchange, bool mandatory_delivery, bool verify_ssl,
         boost::optional<const std::string&> ca_location);
 
 // publish a message over a connection that was already created
-int publish(connection_ptr_t& conn,
+int publish(const connection_id_t& conn_id,
     const std::string& topic,
     const std::string& message);
 
 // publish a message over a connection that was already created
 // and pass a callback that will be invoked (async) when broker confirms
 // receiving the message
-int publish_with_confirm(connection_ptr_t& conn
+int publish_with_confirm(const connection_id_t& conn_id
     const std::string& topic,
     const std::string& message,
     reply_callback_t cb);
index 4930a06bea88ed6c77e8cbe9b2cd880079d6d6a5..81588d50c4fc949275af6fab173a566b8864c7ed 100644 (file)
@@ -80,9 +80,6 @@ TokenEngine::get_from_keystone(const DoutPrefixProvider* dpp, const std::string&
   validate.set_url(url);
 
   int ret = validate.process(null_yield);
-  if (ret < 0) {
-    throw ret;
-  }
 
   /* NULL terminate for debug output. */
   token_body_bl.append(static_cast<char>(0));
@@ -101,6 +98,10 @@ TokenEngine::get_from_keystone(const DoutPrefixProvider* dpp, const std::string&
                   << validate.get_http_status() << dendl;
     return boost::none;
   }
+  // throw any other http or connection errors
+  if (ret < 0) {
+    throw ret;
+  }
 
   ldpp_dout(dpp, 20) << "received response status=" << validate.get_http_status()
                  << ", body=" << token_body_bl.c_str() << dendl;
@@ -425,11 +426,6 @@ EC2Engine::get_from_keystone(const DoutPrefixProvider* dpp, const std::string_vi
 
   /* send request */
   ret = validate.process(null_yield);
-  if (ret < 0) {
-    ldpp_dout(dpp, 2) << "s3 keystone: token validation ERROR: "
-                  << token_body_bl.c_str() << dendl;
-    throw ret;
-  }
 
   /* if the supplied signature is wrong, we will get 401 from Keystone */
   if (validate.get_http_status() ==
@@ -439,6 +435,12 @@ EC2Engine::get_from_keystone(const DoutPrefixProvider* dpp, const std::string_vi
           decltype(validate)::HTTP_STATUS_NOTFOUND) {
     return std::make_pair(boost::none, -ERR_INVALID_ACCESS_KEY);
   }
+  // throw any other http or connection errors
+  if (ret < 0) {
+    ldpp_dout(dpp, 2) << "s3 keystone: token validation ERROR: "
+                  << token_body_bl.c_str() << dendl;
+    throw ret;
+  }
 
   /* now parse response */
   rgw::keystone::TokenEnvelope token_envelope;
@@ -501,18 +503,19 @@ std::pair<boost::optional<std::string>, int> EC2Engine::get_secret_from_keystone
 
   /* send request */
   ret = secret.process(null_yield);
+
+  /* if the supplied access key isn't found, we will get 404 from Keystone */
+  if (secret.get_http_status() ==
+          decltype(secret)::HTTP_STATUS_NOTFOUND) {
+    return make_pair(boost::none, -ERR_INVALID_ACCESS_KEY);
+  }
+  // return any other http or connection errors
   if (ret < 0) {
     ldpp_dout(dpp, 2) << "s3 keystone: secret fetching error: "
                   << token_body_bl.c_str() << dendl;
     return make_pair(boost::none, ret);
   }
 
-  /* if the supplied signature is wrong, we will get 401 from Keystone */
-  if (secret.get_http_status() ==
-          decltype(secret)::HTTP_STATUS_NOTFOUND) {
-    return make_pair(boost::none, -EINVAL);
-  }
-
   /* now parse response */
 
   JSONParser parser;
@@ -659,6 +662,12 @@ rgw::auth::Engine::result_t EC2Engine::authenticate(
   auto [t, secret_key, failure_reason] =
     get_access_token(dpp, access_key_id, string_to_sign, signature, signature_factory);
   if (! t) {
+    if (failure_reason == -ERR_SIGNATURE_NO_MATCH) {
+      // we looked up a secret but it didn't generate the same signature as
+      // the client. since we found this access key in keystone, we should
+      // reject the request instead of trying other engines
+      return result_t::reject(failure_reason);
+    }
     return result_t::deny(failure_reason);
   }
 
index 00d05798533de8068dfe7f3bb2fbef09b26c01d0..0797f8184aad8790d2023e3b579e5c50fc310ae3 100644 (file)
@@ -434,9 +434,13 @@ static inline int parse_v4_auth_header(const req_info& info,               /* in
   /* grab date */
 
   const char *d = info.env->get("HTTP_X_AMZ_DATE");
+
   struct tm t;
-  if (!parse_iso8601(d, &t, NULL, false)) {
-    ldpp_dout(dpp, 10) << "error reading date via http_x_amz_date" << dendl;
+  if (unlikely(d == NULL)) {
+    d = info.env->get("HTTP_DATE");
+  }
+  if (!d || !parse_iso8601(d, &t, NULL, false)) {
+    ldpp_dout(dpp, 10) << "error reading date via http_x_amz_date and http_date" << dendl;
     return -EACCES;
   }
   date = d;
@@ -445,8 +449,9 @@ static inline int parse_v4_auth_header(const req_info& info,               /* in
     return -ERR_REQUEST_TIME_SKEWED;
   }
 
-  if (info.env->exists("HTTP_X_AMZ_SECURITY_TOKEN")) {
-    sessiontoken = info.env->get("HTTP_X_AMZ_SECURITY_TOKEN");
+  auto token = info.env->get_optional("HTTP_X_AMZ_SECURITY_TOKEN");
+  if (token) {
+    sessiontoken = *token;
   }
 
   return 0;
@@ -654,6 +659,35 @@ std::string gen_v4_canonical_qs(const req_info& info, bool is_non_s3_op)
   return canonical_qs;
 }
 
+std::string get_v4_canonical_method(const req_state* s)
+{
+  /* If this is a OPTIONS request we need to compute the v4 signature for the
+   * intended HTTP method and not the OPTIONS request itself. */
+  if (s->op_type == RGW_OP_OPTIONS_CORS) {
+    const char *cors_method = s->info.env->get("HTTP_ACCESS_CONTROL_REQUEST_METHOD");
+
+    if (cors_method) {
+      /* Validate request method passed in access-control-request-method is valid. */
+      auto cors_flags = get_cors_method_flags(cors_method);
+      if (!cors_flags) {
+          ldpp_dout(s, 1) << "invalid access-control-request-method header = "
+                          << cors_method << dendl;
+          throw -EINVAL;
+      }
+
+      ldpp_dout(s, 10) << "canonical req method = " << cors_method
+                       << ", due to access-control-request-method header" << dendl;
+      return cors_method;
+    } else {
+      ldpp_dout(s, 1) << "invalid http options req missing "
+                      << "access-control-request-method header" << dendl;
+      throw -EINVAL;
+    }
+  }
+
+  return s->info.method;
+}
+
 boost::optional<std::string>
 get_v4_canonical_headers(const req_info& info,
                          const std::string_view& signedheaders,
@@ -1107,7 +1141,7 @@ bool AWSv4ComplMulti::is_signature_mismatched()
   }
 }
 
-size_t AWSv4ComplMulti::recv_body(char* const buf, const size_t buf_max)
+size_t AWSv4ComplMulti::recv_chunk(char* const buf, const size_t buf_max, bool& eof)
 {
   /* Buffer stores only parsed stream. Raw values reflect the stream
    * we're getting from a client. */
@@ -1132,6 +1166,7 @@ size_t AWSv4ComplMulti::recv_body(char* const buf, const size_t buf_max)
                                                    to_extract);
       parsing_buf.resize(parsing_buf.size() - (to_extract - received));
       if (received == 0) {
+        eof = true;
         break;
       }
 
@@ -1181,6 +1216,7 @@ size_t AWSv4ComplMulti::recv_body(char* const buf, const size_t buf_max)
     dout(30) << "AWSv4ComplMulti: to_extract=" << to_extract << ", received=" << received << dendl;
 
     if (received == 0) {
+      eof = true;
       break;
     }
 
@@ -1195,6 +1231,19 @@ size_t AWSv4ComplMulti::recv_body(char* const buf, const size_t buf_max)
   return buf_pos;
 }
 
+size_t AWSv4ComplMulti::recv_body(char* const buf, const size_t buf_max)
+{
+  bool eof = false;
+  size_t total = 0;
+
+  while (total < buf_max && !eof) {
+    const size_t received = recv_chunk(buf + total, buf_max - total, eof);
+    total += received;
+  }
+  dout(20) << "AWSv4ComplMulti: received=" << total << dendl;
+  return total;
+}
+
 void AWSv4ComplMulti::modify_request_state(const DoutPrefixProvider* dpp, req_state* const s_rw)
 {
   const char* const decoded_length = \
index a4471467b860edd6e9b52c0286226eb7ec871804..c03dfad825dd2abddd0b655f9238589fa8188714 100644 (file)
@@ -331,6 +331,7 @@ class AWSv4ComplMulti : public rgw::auth::Completer,
 
   bool is_signature_mismatched();
   std::string calc_chunk_signature(const std::string& payload_hash) const;
+  size_t recv_chunk(char* buf, size_t max, bool& eof);
 
 public:
   /* We need the constructor to be public because of the std::make_shared that
@@ -602,6 +603,8 @@ std::string get_v4_canonical_qs(const req_info& info, bool using_qs);
 
 std::string gen_v4_canonical_qs(const req_info& info, bool is_non_s3_op);
 
+std::string get_v4_canonical_method(const req_state* s);
+
 boost::optional<std::string>
 get_v4_canonical_headers(const req_info& info,
                          const std::string_view& signedheaders,
index 5868268c5e1b174a4e1b5a5349b581e0f7208ae1..f5d7912ea5be3d7bf5059d38aac00b82c0463810 100644 (file)
@@ -385,13 +385,13 @@ struct str_len {
 
 #define STR_LEN_ENTRY(s) { s, sizeof(s) - 1 }
 
-struct str_len meta_prefixes[] = { STR_LEN_ENTRY("HTTP_X_AMZ"),
-                                   STR_LEN_ENTRY("HTTP_X_GOOG"),
-                                   STR_LEN_ENTRY("HTTP_X_DHO"),
-                                   STR_LEN_ENTRY("HTTP_X_RGW"),
-                                   STR_LEN_ENTRY("HTTP_X_OBJECT"),
-                                   STR_LEN_ENTRY("HTTP_X_CONTAINER"),
-                                   STR_LEN_ENTRY("HTTP_X_ACCOUNT"),
+struct str_len meta_prefixes[] = { STR_LEN_ENTRY("HTTP_X_AMZ_"),
+                                   STR_LEN_ENTRY("HTTP_X_GOOG_"),
+                                   STR_LEN_ENTRY("HTTP_X_DHO_"),
+                                   STR_LEN_ENTRY("HTTP_X_RGW_"),
+                                   STR_LEN_ENTRY("HTTP_X_OBJECT_"),
+                                   STR_LEN_ENTRY("HTTP_X_CONTAINER_"),
+                                   STR_LEN_ENTRY("HTTP_X_ACCOUNT_"),
                                    {NULL, 0} };
 
 void req_info::init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_meta)
@@ -411,7 +411,7 @@ void req_info::init_meta_info(const DoutPrefixProvider *dpp, bool *found_bad_met
         const char *name = p+len; /* skip the prefix */
         int name_len = header_name.size() - len;
 
-        if (found_bad_meta && strncmp(name, "_META_", name_len) == 0)
+        if (found_bad_meta && strncmp(name, "META_", name_len) == 0)
           *found_bad_meta = true;
 
         char name_low[meta_prefixes[0].len + name_len + 1];
@@ -2723,8 +2723,8 @@ void RGWRateLimitInfo::decode_json(JSONObj *obj)
 {
   JSONDecoder::decode_json("max_read_ops", max_read_ops, obj);
   JSONDecoder::decode_json("max_write_ops", max_write_ops, obj);
-  JSONDecoder::decode_json("max_read_bytes", max_read_ops, obj);
-  JSONDecoder::decode_json("max_write_bytes", max_write_ops, obj);
+  JSONDecoder::decode_json("max_read_bytes", max_read_bytes, obj);
+  JSONDecoder::decode_json("max_write_bytes", max_write_bytes, obj);
   JSONDecoder::decode_json("enabled", enabled, obj);
 }
 
index d0bd47253a847480cbb642169e95ca8d26d3d920..648b2e087b491ea0e1b1379c2ca7557af2d09311 100644 (file)
@@ -161,6 +161,7 @@ using ceph::crypto::MD5;
 #define RGW_ATTR_CRYPT_KEYSEL   RGW_ATTR_CRYPT_PREFIX "keysel"
 #define RGW_ATTR_CRYPT_CONTEXT  RGW_ATTR_CRYPT_PREFIX "context"
 #define RGW_ATTR_CRYPT_DATAKEY  RGW_ATTR_CRYPT_PREFIX "datakey"
+#define RGW_ATTR_CRYPT_PARTS    RGW_ATTR_CRYPT_PREFIX "part-lengths"
 
 /* SSE-S3 Encryption Attributes */
 #define RGW_ATTR_BUCKET_ENCRYPTION_PREFIX RGW_ATTR_PREFIX "sse-s3."
@@ -423,6 +424,7 @@ class RGWHTTPArgs {
 }; // RGWHTTPArgs
 
 const char *rgw_conf_get(const std::map<std::string, std::string, ltstr_nocase>& conf_map, const char *name, const char *def_val);
+boost::optional<const std::string&> rgw_conf_get_optional(const std::map<std::string, std::string, ltstr_nocase>& conf_map, const std::string& name);
 int rgw_conf_get_int(const std::map<std::string, std::string, ltstr_nocase>& conf_map, const char *name, int def_val);
 bool rgw_conf_get_bool(const std::map<std::string, std::string, ltstr_nocase>& conf_map, const char *name, bool def_val);
 
@@ -450,6 +452,8 @@ public:
   void init(CephContext *cct, char **envp);
   void set(std::string name, std::string val);
   const char *get(const char *name, const char *def_val = nullptr) const;
+  boost::optional<const std::string&>
+  get_optional(const std::string& name) const;
   int get_int(const char *name, int def_val = 0) const;
   bool get_bool(const char *name, bool def_val = 0);
   size_t get_size(const char *name, size_t def_val = 0) const;
index 17eaeeb82301c561c1364fd7c9cabe6e56d59ef0..c7a2ed5bd69c6d97ea3ce9efd910f817447f4554 100644 (file)
@@ -132,3 +132,15 @@ static inline int validate_name_string(std::string_view o) {
     return -1;
   return 0;
 }
+
+static inline uint8_t get_cors_method_flags(const char *req_meth) {
+  uint8_t flags = 0;
+
+  if (strcmp(req_meth, "GET") == 0) flags = RGW_CORS_GET;
+  else if (strcmp(req_meth, "POST") == 0) flags = RGW_CORS_POST;
+  else if (strcmp(req_meth, "PUT") == 0) flags = RGW_CORS_PUT;
+  else if (strcmp(req_meth, "DELETE") == 0) flags = RGW_CORS_DELETE;
+  else if (strcmp(req_meth, "HEAD") == 0) flags = RGW_CORS_HEAD;
+
+  return flags;
+}
index e4fd0616855755c75cb1f26646c136e65bee5728..69b1b8bc6f383ce19a9e3f51229765907b4b83fa 100644 (file)
@@ -635,7 +635,8 @@ bool AES_256_ECB_encrypt(const DoutPrefixProvider* dpp,
 RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp,
                                                CephContext* cct,
                                                RGWGetObj_Filter* next,
-                                               std::unique_ptr<BlockCrypt> crypt)
+                                               std::unique_ptr<BlockCrypt> crypt,
+                                               std::vector<size_t> parts_len)
     :
     RGWGetObj_Filter(next),
     dpp(dpp),
@@ -644,7 +645,8 @@ RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp,
     enc_begin_skip(0),
     ofs(0),
     end(0),
-    cache()
+    cache(),
+    parts_len(std::move(parts_len))
 {
   block_size = this->crypt->get_block_size();
 }
@@ -652,8 +654,10 @@ RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp,
 RGWGetObj_BlockDecrypt::~RGWGetObj_BlockDecrypt() {
 }
 
-int RGWGetObj_BlockDecrypt::read_manifest(const DoutPrefixProvider *dpp, bufferlist& manifest_bl) {
-  parts_len.clear();
+int RGWGetObj_BlockDecrypt::read_manifest_parts(const DoutPrefixProvider *dpp,
+                                                const bufferlist& manifest_bl,
+                                                std::vector<size_t>& parts_len)
+{
   RGWObjManifest manifest;
   if (manifest_bl.length()) {
     auto miter = manifest_bl.cbegin();
@@ -670,10 +674,8 @@ int RGWGetObj_BlockDecrypt::read_manifest(const DoutPrefixProvider *dpp, bufferl
       }
       parts_len.back() += mi.get_stripe_size();
     }
-    if (cct->_conf->subsys.should_gather<ceph_subsys_rgw, 20>()) {
-      for (size_t i = 0; i<parts_len.size(); i++) {
-        ldpp_dout(dpp, 20) << "Manifest part " << i << ", size=" << parts_len[i] << dendl;
-      }
+    for (size_t i = 0; i<parts_len.size(); i++) {
+      ldpp_dout(dpp, 20) << "Manifest part " << i << ", size=" << parts_len[i] << dendl;
     }
   }
   return 0;
@@ -1162,23 +1164,20 @@ int rgw_s3_prepare_encrypt(req_state* s,
         crypt_http_responses["x-amz-server-side-encryption-aws-kms-key-id"] = std::string(key_id);
         crypt_http_responses["x-amz-server-side-encryption-context"] = std::move(cooked_context);
         return 0;
-      } else if (req_sse == "AES256") {
-        /* SSE-S3: fall through to logic to look for vault or test key */
-      } else {
+      } else if (req_sse != "AES256") {
         ldpp_dout(s, 5) << "ERROR: Invalid value for header x-amz-server-side-encryption"
                          << dendl;
         s->err.message = "Server Side Encryption with KMS managed key requires "
           "HTTP header x-amz-server-side-encryption : aws:kms or AES256";
         return -EINVAL;
       }
-    } else {
-  /*no encryption*/
-      return 0;
-    }
 
-    /* from here on we are only handling SSE-S3 (req_sse=="AES256") */
+      if (s->cct->_conf->rgw_crypt_sse_s3_backend != "vault") {
+        s->err.message = "Request specifies Server Side Encryption "
+            "but server configuration does not support this.";
+        return -EINVAL;
+      }
 
-    if (s->cct->_conf->rgw_crypt_sse_s3_backend == "vault") {
       ldpp_dout(s, 5) << "RGW_ATTR_BUCKET_ENCRYPTION ALGO: "
               <<  req_sse << dendl;
       std::string_view context = "";
@@ -1221,10 +1220,7 @@ int rgw_s3_prepare_encrypt(req_state* s,
       crypt_http_responses["x-amz-server-side-encryption"] = "AES256";
 
       return 0;
-    }
-
-    /* SSE-S3 and no backend, check if there is a test key */
-    if (s->cct->_conf->rgw_crypt_default_encryption_key != "") {
+    } else if (s->cct->_conf->rgw_crypt_default_encryption_key != "") {
       std::string master_encryption_key;
       try {
         master_encryption_key = from_base64(s->cct->_conf->rgw_crypt_default_encryption_key);
@@ -1263,10 +1259,8 @@ int rgw_s3_prepare_encrypt(req_state* s,
       ::ceph::crypto::zeroize_for_security(actual_key, sizeof(actual_key));
       return 0;
     }
-    s->err.message = "Request specifies Server Side Encryption "
-                     "but server configuration does not support this.";
-    return -EINVAL;
   }
+  return 0;
 }
 
 
index 6008dd05eaea61afd0e6f7df8b3f686d5c5a83de..d8f561eca58f550e5e9a33489b0cc6d7a03b9b32 100644 (file)
@@ -97,16 +97,16 @@ class RGWGetObj_BlockDecrypt : public RGWGetObj_Filter {
   off_t end; /**< stream offset of last byte that is requested */
   bufferlist cache; /**< stores extra data that could not (yet) be processed by BlockCrypt */
   size_t block_size; /**< snapshot of \ref BlockCrypt.get_block_size() */
+  std::vector<size_t> parts_len; /**< size of parts of multipart object, parsed from manifest */
 
   int process(bufferlist& cipher, size_t part_ofs, size_t size);
 
-protected:
-  std::vector<size_t> parts_len; /**< size of parts of multipart object, parsed from manifest */
 public:
   RGWGetObj_BlockDecrypt(const DoutPrefixProvider *dpp,
                          CephContext* cct,
                          RGWGetObj_Filter* next,
-                         std::unique_ptr<BlockCrypt> crypt);
+                         std::unique_ptr<BlockCrypt> crypt,
+                         std::vector<size_t> parts_len);
   virtual ~RGWGetObj_BlockDecrypt();
 
   virtual int fixup_range(off_t& bl_ofs,
@@ -116,7 +116,9 @@ public:
                           off_t bl_len) override;
   virtual int flush() override;
 
-  int read_manifest(const DoutPrefixProvider *dpp, bufferlist& manifest_bl);
+  static int read_manifest_parts(const DoutPrefixProvider *dpp,
+                                 const bufferlist& manifest_bl,
+                                 std::vector<size_t>& parts_len);
 }; /* RGWGetObj_BlockDecrypt */
 
 
index bb45ee8d36aa18d231f1d30a13db2d0c36421bf9..d528f0e6d479a85b8e8f63897904d2ccf94c5a4d 100644 (file)
@@ -52,11 +52,26 @@ const char *rgw_conf_get(const map<string, string, ltstr_nocase>& conf_map, cons
   return iter->second.c_str();
 }
 
+boost::optional<const std::string&> rgw_conf_get_optional(const map<string, string, ltstr_nocase>& conf_map, const std::string& name)
+{
+  auto iter = conf_map.find(name);
+  if (iter == conf_map.end())
+    return boost::none;
+
+  return boost::optional<const std::string&>(iter->second);
+}
+
 const char *RGWEnv::get(const char *name, const char *def_val) const
 {
   return rgw_conf_get(env_map, name, def_val);
 }
 
+boost::optional<const std::string&>
+RGWEnv::get_optional(const std::string& name) const
+{
+  return rgw_conf_get_optional(env_map, name);
+}
+
 int rgw_conf_get_int(const map<string, string, ltstr_nocase>& conf_map, const char *name, int def_val)
 {
   auto iter = conf_map.find(name);
index 3affb5f1414250c66771538eb3febe0396098aa0..7ff3128021da3e52d72556921426fc7d35bfc4b0 100644 (file)
@@ -113,6 +113,11 @@ void RGWFormatter_Plain::close_section()
   stack.pop_back();
 }
 
+void RGWFormatter_Plain::dump_null(std::string_view name)
+{
+  dump_value_int(name, "null"); /* I feel a little bad about this. */
+}
+
 void RGWFormatter_Plain::dump_unsigned(std::string_view name, uint64_t u)
 {
   dump_value_int(name, "%" PRIu64, u);
index 12ad224a3dbbe6a3d30709003f8bba2131640487..e645d3ec2cff4038fcdf6f9594218b8129756429 100644 (file)
@@ -37,6 +37,7 @@ public:
   void open_object_section(std::string_view name) override;
   void open_object_section_in_ns(std::string_view name, const char *ns) override;
   void close_section() override;
+  void dump_null(std::string_view name) override;
   void dump_unsigned(std::string_view name, uint64_t u) override;
   void dump_int(std::string_view name, int64_t u) override;
   void dump_float(std::string_view name, double d) override;
index 651d7099ebc58bedc7f9132e952e1dbbe4fcc0ec..642787a38cf17b38600dec777ed0fc98ca4214f2 100644 (file)
@@ -35,6 +35,7 @@ static const int STATUS_CONNECTION_CLOSED =      -0x1002;
 static const int STATUS_QUEUE_FULL =             -0x1003;
 static const int STATUS_MAX_INFLIGHT =           -0x1004;
 static const int STATUS_MANAGER_STOPPED =        -0x1005;
+static const int STATUS_CONNECTION_IDLE =        -0x1006;
 // status code for connection opening
 static const int STATUS_CONF_ALLOC_FAILED      = -0x2001;
 static const int STATUS_CONF_REPLCACE          = -0x2002;
@@ -85,19 +86,26 @@ struct connection_t {
         rd_kafka_conf_destroy(temp_conf);
         return;
     }
+    if (!is_ok()) {
+      // no producer, nothing to destroy
+      return;
+    }
     // wait for all remaining acks/nacks
     rd_kafka_flush(producer, 5*1000 /* wait for max 5 seconds */);
     // destroy all topics
     std::for_each(topics.begin(), topics.end(), [](auto topic) {rd_kafka_topic_destroy(topic);});
     // destroy producer
     rd_kafka_destroy(producer);
+    producer = nullptr;
     // fire all remaining callbacks (if not fired by rd_kafka_flush)
     std::for_each(callbacks.begin(), callbacks.end(), [this](auto& cb_tag) {
         cb_tag.cb(status);
-        ldout(cct, 20) << "Kafka destroy: invoking callback with tag=" << cb_tag.tag << dendl;
+        ldout(cct, 20) << "Kafka destroy: invoking callback with tag=" << cb_tag.tag << 
+          " for: " << broker << dendl;
       });
     callbacks.clear();
     delivery_tag = 1;
+    ldout(cct, 20) << "Kafka destroy: complete for: " << broker << dendl;
   }
 
   bool is_ok() const {
@@ -112,7 +120,7 @@ struct connection_t {
 
   // dtor also destroys the internals
   ~connection_t() {
-    destroy(STATUS_CONNECTION_CLOSED);
+    destroy(status);
   }
 };
 
@@ -133,6 +141,8 @@ std::string status_to_string(int s) {
       return "RGW_KAFKA_STATUS_CONF_ALLOC_FAILED";
     case STATUS_CONF_REPLCACE:
       return "RGW_KAFKA_STATUS_CONF_REPLCACE";
+    case STATUS_CONNECTION_IDLE:
+      return "RGW_KAFKA_STATUS_CONNECTION_IDLE";
   }
   return std::string(rd_kafka_err2str((rd_kafka_resp_err_t)s));
 }
@@ -257,6 +267,8 @@ bool new_producer(connection_t* conn) {
 
   // redirect kafka logs to RGW
   rd_kafka_conf_set_log_cb(conn->temp_conf, log_callback);
+  // define poll callback to allow reconnect
+  rd_kafka_conf_set_error_cb(conn->temp_conf, poll_err_callback);
   // create the producer
   if (conn->producer) {
     ldout(conn->cct, 5) << "Kafka connect: producer already exists. detroying the existing before creating a new one" << dendl;
@@ -308,16 +320,6 @@ struct message_wrapper_t {
 typedef std::unordered_map<std::string, connection_t_ptr> ConnectionList;
 typedef boost::lockfree::queue<message_wrapper_t*, boost::lockfree::fixed_sized<true>> MessageQueue;
 
-// macros used inside a loop where an iterator is either incremented or erased
-#define INCREMENT_AND_CONTINUE(IT) \
-          ++IT; \
-          continue;
-
-#define ERASE_AND_CONTINUE(IT,CONTAINER) \
-          IT=CONTAINER.erase(IT); \
-          --connection_count; \
-          continue;
-
 class Manager {
 public:
   const size_t max_connections;
@@ -458,9 +460,12 @@ private:
 
         // Checking the connection idlesness
         if(conn->timestamp.sec() + max_idle_time < ceph_clock_now()) {
-          ldout(conn->cct, 20) << "Time for deleting a connection due to idle behaviour: " << ceph_clock_now() << dendl;
+          ldout(conn->cct, 20) << "kafka run: deleting a connection due to idle behaviour: " << ceph_clock_now() << dendl;
           std::lock_guard lock(connections_lock);
-          ERASE_AND_CONTINUE(conn_it, connections);
+          conn->destroy(STATUS_CONNECTION_IDLE);
+          conn_it = connections.erase(conn_it);
+          --connection_count; \
+          continue;
         }
 
         // try to reconnect the connection if it has an error
@@ -475,7 +480,8 @@ private:
           } else {
             ldout(conn->cct, 10) << "Kafka run: connection (" << broker << ") retry successfull" << dendl;
           }
-          INCREMENT_AND_CONTINUE(conn_it);
+          ++conn_it;
+          continue;
         }
 
         reply_count += rd_kafka_poll(conn->producer, read_timeout_ms);
index eec5d80daab136f1b140afeecfa13ead2cdd6714..936580276680d7000ae7b5b7aaae1d3e8b2efe68 100644 (file)
@@ -306,16 +306,17 @@ protected:
     }
 
     res = secret_req.process(null_yield);
-    if (res < 0) {
-      ldpp_dout(dpp, 0) << "ERROR: Request to Vault failed with error " << res << dendl;
-      return res;
-    }
 
+    // map 401 to EACCES instead of EPERM
     if (secret_req.get_http_status() ==
         RGWHTTPTransceiver::HTTP_STATUS_UNAUTHORIZED) {
       ldpp_dout(dpp, 0) << "ERROR: Vault request failed authorization" << dendl;
       return -EACCES;
     }
+    if (res < 0) {
+      ldpp_dout(dpp, 0) << "ERROR: Request to Vault failed with error " << res << dendl;
+      return res;
+    }
 
     ldpp_dout(dpp, 20) << "Request to Vault returned " << res << " and HTTP status "
       << secret_req.get_http_status() << dendl;
@@ -925,13 +926,14 @@ static int request_key_from_barbican(const DoutPrefixProvider *dpp,
   secret_req.append_header("X-Auth-Token", barbican_token);
 
   res = secret_req.process(null_yield);
-  if (res < 0) {
-    return res;
-  }
+  // map 401 to EACCES instead of EPERM
   if (secret_req.get_http_status() ==
       RGWHTTPTransceiver::HTTP_STATUS_UNAUTHORIZED) {
     return -EACCES;
   }
+  if (res < 0) {
+    return res;
+  }
 
   if (secret_req.get_http_status() >=200 &&
       secret_req.get_http_status() < 300 &&
index 0c57793fec952fc3b07ef7bfef8f0182445d27fe..1d44328fe696c812fb59bdbe0d3e84e1cf29a39b 100644 (file)
@@ -58,11 +58,10 @@ ceph::real_time RGWObjectLock::get_lock_until_date(const ceph::real_time& mtime)
   if (!rule_exist) {
     return ceph::real_time();
   }
-  int days = get_days();
-  if (days <= 0) {
-    days = get_years()*365;
+  if (int days = get_days(); days > 0) {
+    return mtime + std::chrono::days(days);
   }
-  return mtime + make_timespan(days*24*60*60);
+  return mtime + std::chrono::years(get_years());
 }
 
 void RGWObjectRetention::decode_xml(XMLObj *obj) {
index 79d7e93969444b5ceac908776942b38b91b730bf..71fb198f3622bee3ac05c0cf8adefd37bd3fc52e 100644 (file)
@@ -1430,18 +1430,12 @@ int RGWOp::init_quota()
 }
 
 static bool validate_cors_rule_method(const DoutPrefixProvider *dpp, RGWCORSRule *rule, const char *req_meth) {
-  uint8_t flags = 0;
-
   if (!req_meth) {
     ldpp_dout(dpp, 5) << "req_meth is null" << dendl;
     return false;
   }
 
-  if (strcmp(req_meth, "GET") == 0) flags = RGW_CORS_GET;
-  else if (strcmp(req_meth, "POST") == 0) flags = RGW_CORS_POST;
-  else if (strcmp(req_meth, "PUT") == 0) flags = RGW_CORS_PUT;
-  else if (strcmp(req_meth, "DELETE") == 0) flags = RGW_CORS_DELETE;
-  else if (strcmp(req_meth, "HEAD") == 0) flags = RGW_CORS_HEAD;
+  uint8_t flags = get_cors_method_flags(req_meth);
 
   if (rule->get_allowed_methods() & flags) {
     ldpp_dout(dpp, 10) << "Method " << req_meth << " is supported" << dendl;
@@ -2535,10 +2529,9 @@ void RGWListBuckets::execute(optional_yield y)
      * isn't actually used in a given account. In such situation its usage
      * stats would be simply full of zeros. */
     std::set<std::string> targets;
-    if (driver->get_zone()->get_zonegroup().get_placement_target_names(targets)) {
-      for (const auto& policy : targets) {
-       policies_stats.emplace(policy, decltype(policies_stats)::mapped_type());
-      }
+    driver->get_zone()->get_zonegroup().get_placement_target_names(targets);
+    for (const auto& policy : targets) {
+      policies_stats.emplace(policy, decltype(policies_stats)::mapped_type());
     }
 
     std::map<std::string, std::unique_ptr<rgw::sal::Bucket>>& m = buckets.get_buckets();
@@ -6632,6 +6625,9 @@ void RGWCompleteMultipart::complete()
       ldpp_dout(this, 0) << "WARNING: failed to unlock " << *serializer.get() << dendl;
     }
   }
+
+  etag = s->object->get_attrs()[RGW_ATTR_ETAG].to_str();
+
   send_response();
 }
 
@@ -7113,7 +7109,7 @@ void RGWDeleteMultiObj::execute(optional_yield y)
   vector<rgw_obj_key>::iterator iter;
   RGWMultiDelXMLParser parser;
   uint32_t aio_count = 0;
-  const uint32_t max_aio = s->cct->_conf->rgw_multi_obj_del_max_aio;
+  const uint32_t max_aio = std::max<uint32_t>(1, s->cct->_conf->rgw_multi_obj_del_max_aio);
   char* buf;
   std::optional<boost::asio::deadline_timer> formatter_flush_cond;
   if (y) {
@@ -7180,7 +7176,7 @@ void RGWDeleteMultiObj::execute(optional_yield y)
         iter != multi_delete->objects.end();
         ++iter) {
     rgw_obj_key obj_key = *iter;
-    if (y && max_aio > 1) {
+    if (y) {
       wait_flush(y, &*formatter_flush_cond, [&aio_count, max_aio] {
         return aio_count < max_aio;
       });
@@ -7190,7 +7186,7 @@ void RGWDeleteMultiObj::execute(optional_yield y)
         aio_count--;
       }); 
     } else {
-      handle_individual_object(obj_key, y, &*formatter_flush_cond);
+      handle_individual_object(obj_key, y, nullptr);
     }
   }
   if (formatter_flush_cond) {
index dfd3f4f8e1bd26060e449ed6ef0b3f0af5e752ac..7422615aec9082882760b26a89ed34946f7fa59d 100644 (file)
@@ -42,7 +42,10 @@ int rgw_opa_authorize(RGWOp *& op,
   JSONFormatter jf;
   jf.open_object_section("");
   jf.open_object_section("input");
-  jf.dump_string("method", s->info.env->get("REQUEST_METHOD"));
+  const char *request_method = s->info.env->get("REQUEST_METHOD");
+  if (request_method) {
+    jf.dump_string("method", request_method);
+  }
   jf.dump_string("relative_uri", s->relative_uri.c_str());
   jf.dump_string("decoded_uri", s->decoded_uri.c_str());
   jf.dump_string("params", s->info.request_params.c_str());
index 6ebd87e3fe434ff574e5d2f989c31fcb554aa473..2b0cffd47c1fb72d74d24b257c773dd337eecfc9 100644 (file)
@@ -22,6 +22,27 @@ void set_event_id(std::string& id, const std::string& hash, const utime_t& ts) {
   }
 }
 
+void rgw_s3_key_filter::dump(Formatter *f) const {
+  if (!prefix_rule.empty()) {
+    f->open_object_section("FilterRule");
+    ::encode_json("Name", "prefix", f);
+    ::encode_json("Value", prefix_rule, f);
+    f->close_section();
+  }
+  if (!suffix_rule.empty()) {
+    f->open_object_section("FilterRule");
+    ::encode_json("Name", "suffix", f);
+    ::encode_json("Value", suffix_rule, f);
+    f->close_section();
+  }
+  if (!regex_rule.empty()) {
+    f->open_object_section("FilterRule");
+    ::encode_json("Name", "regex", f);
+    ::encode_json("Value", regex_rule, f);
+    f->close_section();
+  }
+}
+
 bool rgw_s3_key_filter::decode_xml(XMLObj* obj) {
   XMLObjIter iter = obj->find("FilterRule");
   XMLObj *o;
@@ -75,6 +96,15 @@ bool rgw_s3_key_filter::has_content() const {
     return !(prefix_rule.empty() && suffix_rule.empty() && regex_rule.empty());
 }
 
+void rgw_s3_key_value_filter::dump(Formatter *f) const {
+  for (const auto& key_value : kv) {
+    f->open_object_section("FilterRule");
+    ::encode_json("Name", key_value.first, f);
+    ::encode_json("Value", key_value.second, f);
+    f->close_section();
+  }
+}
+
 bool rgw_s3_key_value_filter::decode_xml(XMLObj* obj) {
   kv.clear();
   XMLObjIter iter = obj->find("FilterRule");
@@ -106,6 +136,12 @@ bool rgw_s3_key_value_filter::has_content() const {
     return !kv.empty();
 }
 
+void rgw_s3_filter::dump(Formatter *f) const {
+  encode_json("S3Key", key_filter, f);
+  encode_json("S3Metadata", metadata_filter, f);
+  encode_json("S3Tags", tag_filter, f);
+}
+
 bool rgw_s3_filter::decode_xml(XMLObj* obj) {
     RGWXMLDecoder::decode_xml("S3Key", key_filter, obj);
     RGWXMLDecoder::decode_xml("S3Metadata", metadata_filter, obj);
@@ -343,13 +379,15 @@ void encode_json(const char *name, const rgw::notify::EventTypeList& l, Formatte
 
 void rgw_pubsub_topic_filter::dump(Formatter *f) const
 {
-  encode_json("topic", topic, f);
-  encode_json("events", events, f);
+  encode_json("TopicArn", topic.arn, f);
+  encode_json("Id", s3_id, f);
+  encode_json("Events", events, f);
+  encode_json("Filter", s3_filter, f);
 }
 
 void rgw_pubsub_bucket_topics::dump(Formatter *f) const
 {
-  Formatter::ArraySection s(*f, "topics");
+  Formatter::ArraySection s(*f, "notifications");
   for (auto& t : topics) {
     encode_json(t.first.c_str(), t.second, f);
   }
@@ -359,7 +397,10 @@ void rgw_pubsub_topics::dump(Formatter *f) const
 {
   Formatter::ArraySection s(*f, "topics");
   for (auto& t : topics) {
-    encode_json(t.first.c_str(), t.second, f);
+    auto& topic = t.second;
+    if (topic.name == topic.dest.arn_topic) {
+      encode_json(t.first.c_str(), topic, f);
+    }
   }
 }
 
@@ -472,6 +513,35 @@ int RGWPubSub::get_topic(const DoutPrefixProvider *dpp, const std::string& name,
   return 0;
 }
 
+// from list of bucket topics, find the one that was auto-generated by a notification
+auto find_unique_topic(const rgw_pubsub_bucket_topics &bucket_topics, const std::string &notification_id) {
+  auto it = std::find_if(bucket_topics.topics.begin(), bucket_topics.topics.end(),
+                         [&](const auto& val) { return notification_id == val.second.s3_id; });
+  return it != bucket_topics.topics.end() ?
+         std::optional<std::reference_wrapper<const rgw_pubsub_topic_filter>>(it->second):
+         std::nullopt;
+}
+
+int RGWPubSub::Bucket::get_notification_by_id(const DoutPrefixProvider *dpp, const std::string& notification_id,
+                                              rgw_pubsub_topic_filter& result, optional_yield y) const {
+  rgw_pubsub_bucket_topics bucket_topics;
+  const int ret = read_topics(dpp, bucket_topics, nullptr, y);
+  if (ret < 0) {
+    ldpp_dout(dpp, 1) << "ERROR: failed to read bucket_topics info: ret=" << ret << dendl;
+    return ret;
+  }
+
+  auto iter = find_unique_topic(bucket_topics, notification_id);
+  if (!iter) {
+    ldpp_dout(dpp, 1) << "ERROR: notification was not found" << dendl;
+    return -ENOENT;
+  }
+
+  result = iter->get();
+  return 0;
+}
+
+
 int RGWPubSub::Bucket::create_notification(const DoutPrefixProvider *dpp, const std::string& topic_name, 
     const rgw::notify::EventTypeList& events, optional_yield y) const {
   return create_notification(dpp, topic_name, events, std::nullopt, "", y);
@@ -520,6 +590,12 @@ int RGWPubSub::Bucket::create_notification(const DoutPrefixProvider *dpp, const
 }
 
 int RGWPubSub::Bucket::remove_notification(const DoutPrefixProvider *dpp, const std::string& topic_name, optional_yield y) const
+{
+  return remove_notification_inner(dpp, topic_name, false, y);
+}
+
+int RGWPubSub::Bucket::remove_notification_inner(const DoutPrefixProvider *dpp, const std::string& notification_id,
+                                  bool is_notification_id, optional_yield y) const
 {
   RGWObjVersionTracker objv_tracker;
   rgw_pubsub_bucket_topics bucket_topics;
@@ -530,7 +606,18 @@ int RGWPubSub::Bucket::remove_notification(const DoutPrefixProvider *dpp, const
     return ret;
   }
 
-  if (bucket_topics.topics.erase(topic_name) == 0) {
+
+  std::unique_ptr<std::string> topic_name = std::make_unique<std::string>(notification_id);
+  if(is_notification_id) {
+    auto iter = find_unique_topic(bucket_topics, notification_id);
+    if (!iter) {
+      ldpp_dout(dpp, 1) << "ERROR: notification was not found" << dendl;
+      return -ENOENT;
+    }
+    topic_name = std::make_unique<std::string>(iter->get().topic.name);
+  }
+
+  if (bucket_topics.topics.erase(*topic_name) == 0) {
     ldpp_dout(dpp, 1) << "INFO: no need to remove, topic does not exist" << dendl;
     return 0;
   }
@@ -555,6 +642,11 @@ int RGWPubSub::Bucket::remove_notification(const DoutPrefixProvider *dpp, const
   return 0;
 }
 
+int RGWPubSub::Bucket::remove_notification_by_id(const DoutPrefixProvider *dpp, const std::string& notif_id, optional_yield y) const
+{
+  return remove_notification_inner(dpp, notif_id, true, y);
+}
+
 int RGWPubSub::Bucket::remove_notifications(const DoutPrefixProvider *dpp, optional_yield y) const
 {
   // get all topics on a bucket
index 974581ce3d9175d124c4eea6f7d03ebcd233c7a1..290c52c2b8fe58044c6a3a241cb83eb01641cba1 100644 (file)
@@ -18,6 +18,7 @@ struct rgw_s3_key_filter {
 
   bool has_content() const;
 
+  void dump(Formatter *f) const;
   bool decode_xml(XMLObj *obj);
   void dump_xml(Formatter *f) const;
   
@@ -46,7 +47,8 @@ struct rgw_s3_key_value_filter {
   KeyValueMap kv;
   
   bool has_content() const;
-  
+
+  void dump(Formatter *f) const;
   bool decode_xml(XMLObj *obj);
   void dump_xml(Formatter *f) const;
   
@@ -69,7 +71,8 @@ struct rgw_s3_filter {
   rgw_s3_key_value_filter tag_filter;
 
   bool has_content() const;
-  
+
+  void dump(Formatter *f) const;
   bool decode_xml(XMLObj *obj);
   void dump_xml(Formatter *f) const;
   
@@ -563,6 +566,8 @@ public:
     // return 0 on success, error code otherwise
     int write_topics(const DoutPrefixProvider *dpp, const rgw_pubsub_bucket_topics& topics,
                     RGWObjVersionTracker* objv_tracker, optional_yield y) const;
+    int remove_notification_inner(const DoutPrefixProvider *dpp, const std::string& notification_id,
+                                  bool notif_id_or_topic, optional_yield y) const;
   public:
     Bucket(const RGWPubSub& _ps, rgw::sal::Bucket* _bucket) : 
       ps(_ps), bucket(_bucket)
@@ -573,6 +578,10 @@ public:
     int get_topics(const DoutPrefixProvider *dpp, rgw_pubsub_bucket_topics& result, optional_yield y) const {
       return read_topics(dpp, result, nullptr, y);
     }
+    // get a bucket_topic with by its name and populate it into "result"
+    // return -ENOENT if the topic does not exists
+    // return 0 on success, error code otherwise
+    int get_notification_by_id(const DoutPrefixProvider *dpp, const std::string& notification_id, rgw_pubsub_topic_filter& result, optional_yield y) const;
     // adds a topic + filter (event list, and possibly name metadata or tags filters) to a bucket
     // assigning a notification name is optional (needed for S3 compatible notifications)
     // if the topic already exist on the bucket, the filter event list may be updated
@@ -585,8 +594,9 @@ public:
         const rgw::notify::EventTypeList& events, OptionalFilter s3_filter, const std::string& notif_name, optional_yield y) const;
     // remove a topic and filter from bucket
     // if the topic does not exists on the bucket it is a no-op (considered success)
-    // return -ENOENT if the topic does not exists
+    // return -ENOENT if the notification-id/topic does not exists
     // return 0 on success, error code otherwise
+    int remove_notification_by_id(const DoutPrefixProvider *dpp, const std::string& notif_id, optional_yield y) const;
     int remove_notification(const DoutPrefixProvider *dpp, const std::string& topic_name, optional_yield y) const;
     // remove all notifications (and autogenerated topics) associated with the bucket
     // return 0 on success or if no topic was associated with the bucket, error code otherwise
index 5ab22e63775effc201628946a3a799f81b0c65c9..79323286601417ebc98f823cf63bb36c2406c409 100644 (file)
@@ -647,9 +647,11 @@ void RGWPSCreateNotifOp::execute(optional_yield y) {
 
   std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  op_ret = driver->get_bucket(this, user.get(), s->owner.get_id().tenant, s->bucket_name, &bucket, y);
+  op_ret = driver->get_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
   if (op_ret < 0) {
-    ldpp_dout(this, 1) << "failed to get bucket '" << s->bucket_name << "' info, ret = " << op_ret << dendl;
+    ldpp_dout(this, 1) << "failed to get bucket '" << 
+      (s->bucket_tenant.empty() ? s->bucket_name : s->bucket_tenant + ":" + s->bucket_name) << 
+      "' info, ret = " << op_ret << dendl;
     return;
   }
 
@@ -782,9 +784,11 @@ void RGWPSDeleteNotifOp::execute(optional_yield y) {
 
   std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  op_ret = driver->get_bucket(this, user.get(), s->owner.get_id().tenant, s->bucket_name, &bucket, y);
+  op_ret = driver->get_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
   if (op_ret < 0) {
-    ldpp_dout(this, 1) << "failed to get bucket '" << s->bucket_name << "' info, ret = " << op_ret << dendl;
+    ldpp_dout(this, 1) << "failed to get bucket '" << 
+      (s->bucket_tenant.empty() ? s->bucket_name : s->bucket_tenant + ":" + s->bucket_name) << 
+      "' info, ret = " << op_ret << dendl;
     return;
   }
 
@@ -877,9 +881,11 @@ void RGWPSListNotifsOp::execute(optional_yield y) {
 
   std::unique_ptr<rgw::sal::User> user = driver->get_user(s->owner.get_id());
   std::unique_ptr<rgw::sal::Bucket> bucket;
-  op_ret = driver->get_bucket(this, user.get(), s->owner.get_id().tenant, s->bucket_name, &bucket, y);
+  op_ret = driver->get_bucket(this, user.get(), s->bucket_tenant, s->bucket_name, &bucket, y);
   if (op_ret < 0) {
-    ldpp_dout(this, 1) << "failed to get bucket '" << s->bucket_name << "' info, ret = " << op_ret << dendl;
+    ldpp_dout(this, 1) << "failed to get bucket '" << 
+      (s->bucket_tenant.empty() ? s->bucket_name : s->bucket_tenant + ":" + s->bucket_name) << 
+      "' info, ret = " << op_ret << dendl;
     return;
   }
 
index 56d00dae3ca9b449a6af9fda650ed272c0d09c51..0b997f30b10e275c0e94e9de20440ca223e7649e 100644 (file)
@@ -592,21 +592,42 @@ int RGWGetObj_ObjStore_S3::get_decrypt_filter(std::unique_ptr<RGWGetObj_Filter>
     return 0;
   }
 
-  int res = 0;
   std::unique_ptr<BlockCrypt> block_crypt;
-  res = rgw_s3_prepare_decrypt(s, attrs, &block_crypt, crypt_http_responses);
-  if (res == 0) {
-    if (block_crypt != nullptr) {
-      auto f = std::make_unique<RGWGetObj_BlockDecrypt>(s, s->cct, cb, std::move(block_crypt));
-      if (manifest_bl != nullptr) {
-        res = f->read_manifest(this, *manifest_bl);
-        if (res == 0) {
-          *filter = std::move(f);
-        }
-      }
+  int res = rgw_s3_prepare_decrypt(s, attrs, &block_crypt, crypt_http_responses);
+  if (res < 0) {
+    return res;
+  }
+  if (block_crypt == nullptr) {
+    return 0;
+  }
+
+  // in case of a multipart upload, we need to know the part lengths to
+  // correctly decrypt across part boundaries
+  std::vector<size_t> parts_len;
+
+  // for replicated objects, the original part lengths are preserved in an xattr
+  if (auto i = attrs.find(RGW_ATTR_CRYPT_PARTS); i != attrs.end()) {
+    try {
+      auto p = i->second.cbegin();
+      using ceph::decode;
+      decode(parts_len, p);
+    } catch (const buffer::error&) {
+      ldpp_dout(this, 1) << "failed to decode RGW_ATTR_CRYPT_PARTS" << dendl;
+      return -EIO;
+    }
+  } else if (manifest_bl) {
+    // otherwise, we read the part lengths from the manifest
+    res = RGWGetObj_BlockDecrypt::read_manifest_parts(this, *manifest_bl,
+                                                      parts_len);
+    if (res < 0) {
+      return res;
     }
   }
-  return res;
+
+  *filter = std::make_unique<RGWGetObj_BlockDecrypt>(
+      s, s->cct, cb, std::move(block_crypt),
+      std::move(parts_len));
+  return 0;
 }
 int RGWGetObj_ObjStore_S3::verify_requester(const rgw::auth::StrategyRegistry& auth_registry, optional_yield y) 
 {
@@ -1951,7 +1972,7 @@ void RGWListBucket_ObjStore_S3v2::send_versioned_response()
         s->formatter->dump_string("StorageClass", storage_class.c_str());
       }
       if (fetchOwner == true) {
-        dump_owner(s, s->user->get_id(), s->user->get_display_name());
+        dump_owner(s, rgw_user(iter->meta.owner), iter->meta.owner_display_name);
       }
       s->formatter->close_section();
     }
@@ -2030,7 +2051,7 @@ void RGWListBucket_ObjStore_S3v2::send_response()
       auto& storage_class = rgw_placement_rule::get_canonical_storage_class(iter->meta.storage_class);
       s->formatter->dump_string("StorageClass", storage_class.c_str());
       if (fetchOwner == true) {
-        dump_owner(s, s->user->get_id(), s->user->get_display_name());
+        dump_owner(s, rgw_user(iter->meta.owner), iter->meta.owner_display_name);
       }
       if (s->system_request) {
         s->formatter->dump_string("RgwxTag", iter->tag);
@@ -2324,11 +2345,12 @@ static void dump_bucket_metadata(req_state *s, rgw::sal::Bucket* bucket)
   // only bucket's owner is allowed to get the quota settings of the account
   if (bucket->is_owner(s->user.get())) {
     auto user_info = s->user->get_info();
+    auto bucket_quota = s->bucket->get_info().quota; // bucket quota
     dump_header(s, "X-RGW-Quota-User-Size", static_cast<long long>(user_info.quota.user_quota.max_size));
     dump_header(s, "X-RGW-Quota-User-Objects", static_cast<long long>(user_info.quota.user_quota.max_objects));
     dump_header(s, "X-RGW-Quota-Max-Buckets", static_cast<long long>(user_info.max_buckets));
-    dump_header(s, "X-RGW-Quota-Bucket-Size", static_cast<long long>(user_info.quota.bucket_quota.max_size));
-    dump_header(s, "X-RGW-Quota-Bucket-Objects", static_cast<long long>(user_info.quota.bucket_quota.max_objects));
+    dump_header(s, "X-RGW-Quota-Bucket-Size", static_cast<long long>(bucket_quota.max_size));
+    dump_header(s, "X-RGW-Quota-Bucket-Objects", static_cast<long long>(bucket_quota.max_objects));
   }
 }
 
@@ -2744,24 +2766,42 @@ int RGWPutObj_ObjStore_S3::get_decrypt_filter(
 {
   std::map<std::string, std::string> crypt_http_responses_unused;
 
-  int res = 0;
   std::unique_ptr<BlockCrypt> block_crypt;
-  res = rgw_s3_prepare_decrypt(s, attrs, &block_crypt, crypt_http_responses_unused);
-  if (res == 0) {
-    if (block_crypt != nullptr) {
-      auto f = std::unique_ptr<RGWGetObj_BlockDecrypt>(new RGWGetObj_BlockDecrypt(s, s->cct, cb, std::move(block_crypt)));
-      //RGWGetObj_BlockDecrypt* f = new RGWGetObj_BlockDecrypt(s->cct, cb, std::move(block_crypt));
-      if (f != nullptr) {
-        if (manifest_bl != nullptr) {
-          res = f->read_manifest(this, *manifest_bl);
-          if (res == 0) {
-            *filter = std::move(f);
-          }
-        }
-      }
+  int res = rgw_s3_prepare_decrypt(s, attrs, &block_crypt, crypt_http_responses_unused);
+  if (res < 0) {
+    return res;
+  }
+  if (block_crypt == nullptr) {
+    return 0;
+  }
+
+  // in case of a multipart upload, we need to know the part lengths to
+  // correctly decrypt across part boundaries
+  std::vector<size_t> parts_len;
+
+  // for replicated objects, the original part lengths are preserved in an xattr
+  if (auto i = attrs.find(RGW_ATTR_CRYPT_PARTS); i != attrs.end()) {
+    try {
+      auto p = i->second.cbegin();
+      using ceph::decode;
+      decode(parts_len, p);
+    } catch (const buffer::error&) {
+      ldpp_dout(this, 1) << "failed to decode RGW_ATTR_CRYPT_PARTS" << dendl;
+      return -EIO;
+    }
+  } else if (manifest_bl) {
+    // otherwise, we read the part lengths from the manifest
+    res = RGWGetObj_BlockDecrypt::read_manifest_parts(this, *manifest_bl,
+                                                      parts_len);
+    if (res < 0) {
+      return res;
     }
   }
-  return res;
+
+  *filter = std::make_unique<RGWGetObj_BlockDecrypt>(
+      s, s->cct, cb, std::move(block_crypt),
+      std::move(parts_len));
+  return 0;
 }
 
 int RGWPutObj_ObjStore_S3::get_encrypt_filter(
@@ -2831,10 +2871,6 @@ int RGWPostObj_ObjStore_S3::get_params(optional_yield y)
 
   map_qs_metadata(s, false);
 
-  ldpp_dout(this, 20) << "adding bucket to policy env: " << s->bucket->get_name()
-                   << dendl;
-  env.add_var("bucket", s->bucket->get_name());
-
   bool done;
   do {
     struct post_form_part part;
@@ -2899,6 +2935,10 @@ int RGWPostObj_ObjStore_S3::get_params(optional_yield y)
     return r;
   }
 
+  ldpp_dout(this, 20) << "adding bucket to policy env: " << s->bucket->get_name()
+                   << dendl;
+  env.add_var("bucket", s->bucket->get_name());
+
   string object_str;
   if (!part_str(parts, "key", &object_str)) {
     err_msg = "Key not specified";
@@ -3446,7 +3486,10 @@ int RGWCopyObj_ObjStore_S3::get_params(optional_yield y)
     s->info.args.get_bool(RGW_SYS_PARAM_PREFIX "copy-if-newer", &copy_if_newer, false);
   }
 
-  copy_source = s->info.env->get("HTTP_X_AMZ_COPY_SOURCE");
+  const char *copy_source_temp = s->info.env->get("HTTP_X_AMZ_COPY_SOURCE");
+  if (copy_source_temp) {
+    copy_source = copy_source_temp;
+  }
   auto tmp_md_d = s->info.env->get("HTTP_X_AMZ_METADATA_DIRECTIVE");
   if (tmp_md_d) {
     if (strcasecmp(tmp_md_d, "COPY") == 0) {
@@ -5240,7 +5283,6 @@ bool RGWHandler_REST_S3Website::web_dir() const {
   std::unique_ptr<rgw::sal::Object> obj = s->bucket->get_object(rgw_obj_key(subdir_name));
 
   obj->set_atomic();
-  obj->set_prefetch_data();
 
   RGWObjState* state = nullptr;
   if (obj->get_obj_state(s, &state, s->yield) < 0) {
@@ -5728,10 +5770,13 @@ AWSGeneralAbstractor::get_auth_data_v4(const req_state* const s,
   /* Craft canonical query string. std::moving later so non-const here. */
   auto canonical_qs = rgw::auth::s3::get_v4_canonical_qs(s->info, using_qs);
 
+  /* Craft canonical method. */
+  auto canonical_method = rgw::auth::s3::get_v4_canonical_method(s);
+
   /* Craft canonical request. */
   auto canonical_req_hash = \
     rgw::auth::s3::get_v4_canon_req_hash(s->cct,
-                                         s->info.method,
+                                         std::move(canonical_method),
                                          std::move(canonical_uri),
                                          std::move(canonical_qs),
                                          std::move(*canonical_headers),
@@ -5945,8 +5990,9 @@ AWSGeneralAbstractor::get_auth_data_v2(const req_state* const s) const
       signature = auth_str.substr(pos + 1);
     }
 
-    if (s->info.env->exists("HTTP_X_AMZ_SECURITY_TOKEN")) {
-      session_token = s->info.env->get("HTTP_X_AMZ_SECURITY_TOKEN");
+    auto token = s->info.env->get_optional("HTTP_X_AMZ_SECURITY_TOKEN");
+    if (token) {
+      session_token = *token;
       if (session_token.size() == 0) {
         throw -EPERM;
       }
@@ -6417,14 +6463,15 @@ rgw::auth::s3::STSEngine::authenticate(
 bool rgw::auth::s3::S3AnonymousEngine::is_applicable(
   const req_state* s
 ) const noexcept {
-  if (s->op == OP_OPTIONS) {
-    return true;
-  }
-
   AwsVersion version;
   AwsRoute route;
   std::tie(version, route) = discover_aws_flavour(s->info);
 
+  /* If HTTP OPTIONS and no authentication provided using the
+   * anonymous engine is applicable */
+  if (s->op == OP_OPTIONS && version == AwsVersion::UNKNOWN) {
+    return true;
+  }
+
   return route == AwsRoute::QUERY_STRING && version == AwsVersion::UNKNOWN;
 }
-
index a9565817005dd37916106b1d4e9deb2dc956bbea..ee943ea44ff2b2f100f32ab899acf41e9ad5c5fb 100644 (file)
@@ -945,8 +945,9 @@ int RGWPutObj_ObjStore_SWIFT::get_params(optional_yield y)
 
   if (!s->cct->_conf->rgw_swift_custom_header.empty()) {
     string custom_header = s->cct->_conf->rgw_swift_custom_header;
-    if (s->info.env->exists(custom_header.c_str())) {
-      user_data = s->info.env->get(custom_header.c_str());
+    auto data = s->info.env->get_optional(custom_header);
+    if (data) {
+      user_data = *data;
     }
   }
 
@@ -1897,14 +1898,13 @@ void RGWInfo_ObjStore_SWIFT::list_swift_data(Formatter& formatter,
   const rgw::sal::ZoneGroup& zonegroup = driver->get_zone()->get_zonegroup();
 
   std::set<std::string> targets;
-  if (zonegroup.get_placement_target_names(targets)) {
-    for (const auto& placement_targets : targets) {
-      formatter.open_object_section("policy");
-      if (placement_targets.compare(zonegroup.get_default_placement_name()) == 0)
-       formatter.dump_bool("default", true);
-      formatter.dump_string("name", placement_targets.c_str());
-      formatter.close_section();
-    }
+  zonegroup.get_placement_target_names(targets);
+  for (const auto& placement_targets : targets) {
+    formatter.open_object_section("policy");
+    if (placement_targets.compare(zonegroup.get_default_placement_name()) == 0)
+      formatter.dump_bool("default", true);
+    formatter.dump_string("name", placement_targets.c_str());
+    formatter.close_section();
   }
   formatter.close_section();
 
index 7d93569f3a4cf1fa2223354d14f64cd2e83b8751..c7eaa69842f3d9207a9ad76948137f8efb55bd6e 100644 (file)
@@ -445,6 +445,7 @@ int RGWSelectObj_ObjStore_S3::run_s3select_on_csv(const char* query, const char*
   } else {
     m_aws_response_handler.send_continuation_response();
   }
+  ldpp_dout(this, 10) << "s3-select: complete chunk processing : chunk length = " << input_length << dendl;
   if (enable_progress == true) {
     fp_chunked_transfer_encoding();
     m_aws_response_handler.init_progress_response();
@@ -458,7 +459,7 @@ int RGWSelectObj_ObjStore_S3::run_s3select_on_parquet(const char* query)
   int status = 0;
 #ifdef _ARROW_EXIST
   if (!m_s3_parquet_object.is_set()) {
-    //parsing the SQL statement
+    //parsing the SQL statement.
     s3select_syntax.parse_query(m_sql_query.c_str());
     //m_s3_parquet_object.set_external_debug_system(fp_debug_mesg);
     try {
index 9b379572d8c2b80cffb7c31aa30cd429caedd0d5..944737dee7fb11541f61e4a7cd8e10849e8f1327 100644 (file)
@@ -1483,7 +1483,7 @@ public:
   /** Get the API name of this zonegroup */
   virtual const std::string& get_api_name() const = 0;
   /** Get the list of placement target names for this zone */
-  virtual int get_placement_target_names(std::set<std::string>& names) const = 0;
+  virtual void get_placement_target_names(std::set<std::string>& names) const = 0;
   /** Get the name of the default placement target for this zone */
   virtual const std::string& get_default_placement_name() const = 0;
   /** Get the list of hostnames from this zone */
index 88b1173e5605dcc72a587dcfc291c1270570e84b..4b0234b1f30fc2fb547a8202484c6b900bc72b13 100644 (file)
@@ -826,13 +826,11 @@ bool DaosZoneGroup::placement_target_exists(std::string& target) const {
   return !!group.placement_targets.count(target);
 }
 
-int DaosZoneGroup::get_placement_target_names(
+void DaosZoneGroup::get_placement_target_names(
     std::set<std::string>& names) const {
   for (const auto& target : group.placement_targets) {
     names.emplace(target.second.name);
   }
-
-  return 0;
 }
 
 int DaosZoneGroup::get_placement_tier(const rgw_placement_rule& rule,
index b381156f99318f34175986ad0c779a668098e5e8..64bf49c7c2528bb0ac6f6cdb26b525bb8b639e47 100644 (file)
@@ -414,7 +414,7 @@ class DaosZoneGroup : public StoreZoneGroup {
   virtual const std::string& get_api_name() const override {
     return group.api_name;
   };
-  virtual int get_placement_target_names(
+  virtual void get_placement_target_names(
       std::set<std::string>& names) const override;
   virtual const std::string& get_default_placement_name() const override {
     return group.default_placement.name;
index d9f44dbaf711ca0f1db04294b49dc351d9b671c3..5100dc41efe5cbb60b92392c9d89c81c548c5905 100644 (file)
@@ -531,12 +531,10 @@ namespace rgw::sal {
     return !!group->placement_targets.count(target);
   }
 
-  int DBZoneGroup::get_placement_target_names(std::set<std::string>& names) const {
+  void DBZoneGroup::get_placement_target_names(std::set<std::string>& names) const {
     for (const auto& target : group->placement_targets) {
       names.emplace(target.second.name);
     }
-
-    return 0;
   }
 
   ZoneGroup& DBZone::get_zonegroup()
index 7fefd20afbdfaade01492c7401504a58ff50f6d2..3acdb4ba3add17d33eef5996872b759f0ade49c4 100644 (file)
@@ -271,7 +271,7 @@ protected:
       return group->is_master_zonegroup();
     };
     virtual const std::string& get_api_name() const override { return group->api_name; };
-    virtual int get_placement_target_names(std::set<std::string>& names) const override;
+    virtual void get_placement_target_names(std::set<std::string>& names) const override;
     virtual const std::string& get_default_placement_name() const override {
       return group->default_placement.name; };
     virtual int get_hostnames(std::list<std::string>& names) const override {
index a01c1e56c6ed4c510a40403d68eeba7a382b61cd..951a1de5fc40ba6c347051695569e214aa68a674 100644 (file)
@@ -68,8 +68,8 @@ public:
     { return next->is_master_zonegroup(); }
   virtual const std::string& get_api_name() const override
     { return next->get_api_name(); }
-  virtual int get_placement_target_names(std::set<std::string>& names) const override
-    { return next->get_placement_target_names(names); }
+  virtual void get_placement_target_names(std::set<std::string>& names) const override
+    { next->get_placement_target_names(names); }
   virtual const std::string& get_default_placement_name() const override
     { return next->get_default_placement_name(); }
   virtual int get_hostnames(std::list<std::string>& names) const override
index cc7869627a66669a75c4856b5cd8232ba232d16f..de18ba9447c9418cf36f7f58429e51baf16b0e73 100644 (file)
@@ -1081,13 +1081,11 @@ bool MotrZoneGroup::placement_target_exists(std::string& target) const
   return !!group.placement_targets.count(target);
 }
 
-int MotrZoneGroup::get_placement_target_names(std::set<std::string>& names) const
+void MotrZoneGroup::get_placement_target_names(std::set<std::string>& names) const
 {
   for (const auto& target : group.placement_targets) {
     names.emplace(target.second.name);
   }
-
-  return 0;
 }
 
 int MotrZoneGroup::get_placement_tier(const rgw_placement_rule& rule,
index f2dfda2c510cb3983de94a981136fb8ea83d3402..b7230f7e1fd3ee60891d22b9ae09b72079d3c0d4 100644 (file)
@@ -445,7 +445,7 @@ public:
     return group.is_master_zonegroup();
   };
   virtual const std::string& get_api_name() const override { return group.api_name; };
-  virtual int get_placement_target_names(std::set<std::string>& names) const override;
+  virtual void get_placement_target_names(std::set<std::string>& names) const override;
   virtual const std::string& get_default_placement_name() const override {
     return group.default_placement.name; };
   virtual int get_hostnames(std::list<std::string>& names) const override {
index 197c4e19dd689d5046cf0e71541e3b27d9aa1eb3..05d4b28c124ee28e18bd95c2032a2cb12622b4a9 100644 (file)
@@ -667,14 +667,16 @@ void RGW_SWIFT_Auth_Get::execute(optional_yield y)
 
   if (swift_url.size() == 0) {
     bool add_port = false;
-    const char *server_port = s->info.env->get("SERVER_PORT_SECURE");
+    auto server_port = s->info.env->get_optional("SERVER_PORT_SECURE");
     const char *protocol;
     if (server_port) {
-      add_port = (strcmp(server_port, "443") != 0);
+      add_port = (*server_port != "443");
       protocol = "https";
     } else {
-      server_port = s->info.env->get("SERVER_PORT");
-      add_port = (strcmp(server_port, "80") != 0);
+      server_port = s->info.env->get_optional("SERVER_PORT");
+      if (server_port) {
+        add_port = (*server_port != "80");
+      }
       protocol = "http";
     }
     const char *host = s->info.env->get("HTTP_HOST");
@@ -688,7 +690,7 @@ void RGW_SWIFT_Auth_Get::execute(optional_yield y)
     swift_url.append(host);
     if (add_port && !strchr(host, ':')) {
       swift_url.append(":");
-      swift_url.append(server_port);
+      swift_url.append(*server_port);
     }
   }
 
index ff0080083f12c6b6d9adc75b510965159c6afcfd..43f84ed0a4f7e425383126de64f4f343f823317c 100644 (file)
@@ -253,7 +253,8 @@ void RGWSI_Notify::finalize_watch()
 {
   for (int i = 0; i < num_watchers; i++) {
     RGWWatcher *watcher = watchers[i];
-    watcher->unregister_watch();
+    if (watchers_set.find(i) != watchers_set.end())
+      watcher->unregister_watch();
     delete watcher;
   }
 
@@ -278,6 +279,10 @@ int RGWSI_Notify::do_start(optional_yield y, const DoutPrefixProvider *dpp)
     return r;
   }
 
+  inject_notify_timeout_probability =
+    cct->_conf.get_val<double>("rgw_inject_notify_timeout_probability");
+  max_notify_retries = cct->_conf.get_val<uint64_t>("rgw_max_notify_retries");
+
   control_pool = zone_svc->get_zone_params().control_pool;
 
   int ret = init_watch(dpp, y);
@@ -396,19 +401,69 @@ int RGWSI_Notify::distribute(const DoutPrefixProvider *dpp, const string& key,
   return 0;
 }
 
+namespace librados {
+
+static std::ostream& operator<<(std::ostream& out, const notify_timeout_t& t)
+{
+  return out << t.notifier_id << ':' << t.cookie;
+}
+
+} // namespace librados
+
+using timeout_vector = std::vector<librados::notify_timeout_t>;
+
+static timeout_vector decode_timeouts(const bufferlist& bl)
+{
+  using ceph::decode;
+  auto p = bl.begin();
+
+  // decode and discard the acks
+  uint32_t num_acks;
+  decode(num_acks, p);
+  for (auto i = 0u; i < num_acks; ++i) {
+    std::pair<uint64_t, uint64_t> id;
+    decode(id, p);
+    // discard the payload
+    uint32_t blen;
+    decode(blen, p);
+    p += blen;
+  }
+
+  // decode and return the timeouts
+  uint32_t num_timeouts;
+  decode(num_timeouts, p);
+
+  timeout_vector timeouts;
+  for (auto i = 0u; i < num_timeouts; ++i) {
+    std::pair<uint64_t, uint64_t> id;
+    decode(id, p);
+    timeouts.push_back({id.first, id.second});
+  }
+  return timeouts;
+}
+
 int RGWSI_Notify::robust_notify(const DoutPrefixProvider *dpp,
                                 RGWSI_RADOS::Obj& notify_obj,
                                const RGWCacheNotifyInfo& cni,
                                 optional_yield y)
 {
-  bufferlist bl;
+  bufferlist bl, rbl;
   encode(cni, bl);
 
   // First, try to send, without being fancy about it.
-  auto r = notify_obj.notify(dpp, bl, 0, nullptr, y);
+  auto r = notify_obj.notify(dpp, bl, 0, &rbl, y);
 
   if (r < 0) {
+    timeout_vector timeouts;
+    try {
+      timeouts = decode_timeouts(rbl);
+    } catch (const buffer::error& e) {
+      ldpp_dout(dpp, 0) << "robust_notify failed to decode notify response: "
+          << e.what() << dendl;
+    }
+
     ldpp_dout(dpp, 1) << __PRETTY_FUNCTION__ << ":" << __LINE__
+                     << " Watchers " << timeouts << " did not respond."
                      << " Notify failed on object " << cni.obj << ": "
                      << cpp_strerror(-r) << dendl;
   }
@@ -427,10 +482,19 @@ int RGWSI_Notify::robust_notify(const DoutPrefixProvider *dpp,
       ldpp_dout(dpp, 1) << __PRETTY_FUNCTION__ << ":" << __LINE__
                        << " Invalidating obj=" << info.obj << " tries="
                        << tries << dendl;
-      r = notify_obj.notify(dpp, bl, 0, nullptr, y);
+      r = notify_obj.notify(dpp, retrybl, 0, &rbl, y);
       if (r < 0) {
+        timeout_vector timeouts;
+        try {
+          timeouts = decode_timeouts(rbl);
+        } catch (const buffer::error& e) {
+          ldpp_dout(dpp, 0) << "robust_notify failed to decode notify response: "
+              << e.what() << dendl;
+        }
+
        ldpp_dout(dpp, 1) << __PRETTY_FUNCTION__ << ":" << __LINE__
-                         << " invalidation attempt " << tries << " failed: "
+                         << " Watchers " << timeouts << " did not respond."
+                         << " Invalidation attempt " << tries << " failed: "
                          << cpp_strerror(-r) << dendl;
       }
     }
index 38d2ab50964c54593f18c5775d8a78dfb28d1877..f7329136ece1718d6951700bd3b1cd65711e0066 100644 (file)
@@ -42,7 +42,7 @@ private:
   bool enabled{false};
 
   double inject_notify_timeout_probability{0};
-  static constexpr unsigned max_notify_retries = 10;
+  uint64_t max_notify_retries = 10;
 
   std::string get_control_oid(int i);
   RGWSI_RADOS::Obj pick_control_obj(const std::string& key);
index 3f810d7acd24510ddf008d2e4dbe919115522eeb..180d9371222bf490934d6daed12c7d3ab12cd2ff 100644 (file)
@@ -65,6 +65,21 @@ bool RGWSI_Zone::zone_syncs_from(const RGWZone& target_zone, const RGWZone& sour
          sync_modules_svc->get_manager()->supports_data_export(source_zone.tier_type);
 }
 
+bool RGWSI_Zone::zone_syncs_from(const RGWZone& source_zone) const
+{
+  auto target_zone = get_zone();
+  bool found = false;
+
+  for (auto s : data_sync_source_zones) {
+    if (s->id == source_zone.id) {
+      found = true;
+      break;
+    }
+  }
+  return found && target_zone.syncs_from(source_zone.name) &&
+         sync_modules_svc->get_manager()->supports_data_export(source_zone.tier_type);
+}
+
 int RGWSI_Zone::search_realm_with_zone(const DoutPrefixProvider *dpp,
                                        const rgw_zone_id& zid,
                                        RGWRealm *prealm,
index 00d4c0f4992e0f3ad37195b7a407770262b59b51..7b0a277c439fd5d6466c8bf7634675e040e18985 100644 (file)
@@ -103,6 +103,7 @@ public:
 
   bool zone_is_writeable();
   bool zone_syncs_from(const RGWZone& target_zone, const RGWZone& source_zone) const;
+  bool zone_syncs_from(const RGWZone& source_zone) const;
   bool get_redirect_zone_endpoint(std::string *endpoint);
   bool sync_module_supports_writes() const { return writeable_zone; }
   bool sync_module_exports_data() const { return exports_data; }
diff --git a/ceph/src/s3select/TPCDS/ddl/create_tpcds_tables.sql b/ceph/src/s3select/TPCDS/ddl/create_tpcds_tables.sql
new file mode 100644 (file)
index 0000000..692539b
--- /dev/null
@@ -0,0 +1,651 @@
+-- this DDL can be run from Trino client  ( trino --schema XXXX --catalog HHHH -f <create_tables_file> )
+-- the external_location should be modified according to generated data-set
+
+
+-- Table<store_sales (23 cols)  partition=ss_sold_date_sk>
+
+drop table if exists store_sales;
+create table store_sales(
+      ss_sold_date_sk bigint
+,     ss_sold_time_sk bigint
+,     ss_item_sk bigint
+,     ss_customer_sk bigint
+,     ss_cdemo_sk bigint
+,     ss_hdemo_sk bigint
+,     ss_addr_sk bigint
+,     ss_store_sk bigint
+,     ss_promo_sk bigint
+,     ss_ticket_number bigint
+,     ss_quantity int
+,     ss_wholesale_cost decimal(7,2)
+,     ss_list_price decimal(7,2)
+,     ss_sales_price decimal(7,2)
+,     ss_ext_discount_amt decimal(7,2)
+,     ss_ext_sales_price decimal(7,2)
+,     ss_ext_wholesale_cost decimal(7,2)
+,     ss_ext_list_price decimal(7,2)
+,     ss_ext_tax decimal(7,2)
+,     ss_coupon_amt decimal(7,2)
+,     ss_net_paid decimal(7,2)
+,     ss_net_paid_inc_tax decimal(7,2)
+,     ss_net_profit decimal(7,2)  
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/store_sales');
+;
+
+-- Table<store_returns (20 cols)  partition=sr_returned_date_sk>
+
+drop table if exists store_returns;
+create table store_returns(
+      sr_returned_date_sk bigint
+,     sr_return_time_sk bigint
+,     sr_item_sk bigint
+,     sr_customer_sk bigint
+,     sr_cdemo_sk bigint
+,     sr_hdemo_sk bigint
+,     sr_addr_sk bigint
+,     sr_store_sk bigint
+,     sr_reason_sk bigint
+,     sr_ticket_number bigint
+,     sr_return_quantity int
+,     sr_return_amt decimal(7,2)
+,     sr_return_tax decimal(7,2)
+,     sr_return_amt_inc_tax decimal(7,2)
+,     sr_fee decimal(7,2)
+,     sr_return_ship_cost decimal(7,2)
+,     sr_refunded_cash decimal(7,2)
+,     sr_reversed_charge decimal(7,2)
+,     sr_store_credit decimal(7,2)
+,     sr_net_loss decimal(7,2)
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/store_returns');
+;
+
+-- Table<catalog_sales (34 cols)  partition=cs_sold_date_sk>
+
+drop table if exists catalog_sales;
+create table catalog_sales(
+      cs_sold_date_sk bigint
+,     cs_sold_time_sk bigint
+,     cs_ship_date_sk bigint
+,     cs_bill_customer_sk bigint
+,     cs_bill_cdemo_sk bigint
+,     cs_bill_hdemo_sk bigint
+,     cs_bill_addr_sk bigint
+,     cs_ship_customer_sk bigint
+,     cs_ship_cdemo_sk bigint
+,     cs_ship_hdemo_sk bigint
+,     cs_ship_addr_sk bigint
+,     cs_call_center_sk bigint
+,     cs_catalog_page_sk bigint
+,     cs_ship_mode_sk bigint
+,     cs_warehouse_sk bigint
+,     cs_item_sk bigint
+,     cs_promo_sk bigint
+,     cs_order_number bigint
+,     cs_quantity int
+,     cs_wholesale_cost decimal(7,2)
+,     cs_list_price decimal(7,2)
+,     cs_sales_price decimal(7,2)
+,     cs_ext_discount_amt decimal(7,2)
+,     cs_ext_sales_price decimal(7,2)
+,     cs_ext_wholesale_cost decimal(7,2)
+,     cs_ext_list_price decimal(7,2)
+,     cs_ext_tax decimal(7,2)
+,     cs_coupon_amt decimal(7,2)
+,     cs_ext_ship_cost decimal(7,2)
+,     cs_net_paid decimal(7,2)
+,     cs_net_paid_inc_tax decimal(7,2)
+,     cs_net_paid_inc_ship decimal(7,2)
+,     cs_net_paid_inc_ship_tax decimal(7,2)
+,     cs_net_profit decimal(7,2)
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/catalog_sales');
+;
+
+-- Table<catalog_returns (27 cols)  partition=cr_returned_date_sk>
+
+drop table if exists catalog_returns;
+create table catalog_returns(
+      cr_returned_date_sk bigint
+,     cr_returned_time_sk bigint
+,     cr_item_sk bigint
+,     cr_refunded_customer_sk bigint
+,     cr_refunded_cdemo_sk bigint
+,     cr_refunded_hdemo_sk bigint
+,     cr_refunded_addr_sk bigint
+,     cr_returning_customer_sk bigint
+,     cr_returning_cdemo_sk bigint
+,     cr_returning_hdemo_sk bigint
+,     cr_returning_addr_sk bigint
+,     cr_call_center_sk bigint
+,     cr_catalog_page_sk bigint
+,     cr_ship_mode_sk bigint
+,     cr_warehouse_sk bigint
+,     cr_reason_sk bigint
+,     cr_order_number bigint
+,     cr_return_quantity int
+,     cr_return_amount decimal(7,2)
+,     cr_return_tax decimal(7,2)
+,     cr_return_amt_inc_tax decimal(7,2)
+,     cr_fee decimal(7,2)
+,     cr_return_ship_cost decimal(7,2)
+,     cr_refunded_cash decimal(7,2)
+,     cr_reversed_charge decimal(7,2)
+,     cr_store_credit decimal(7,2)
+,     cr_net_loss decimal(7,2)  
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/catalog_returns');
+;
+
+-- Table<web_sales (34 cols)  partition=ws_sold_date_sk>
+
+drop table if exists web_sales;
+create table web_sales(
+      ws_sold_date_sk bigint
+,     ws_sold_time_sk bigint
+,     ws_ship_date_sk bigint
+,     ws_item_sk bigint
+,     ws_bill_customer_sk bigint
+,     ws_bill_cdemo_sk bigint
+,     ws_bill_hdemo_sk bigint
+,     ws_bill_addr_sk bigint
+,     ws_ship_customer_sk bigint
+,     ws_ship_cdemo_sk bigint
+,     ws_ship_hdemo_sk bigint
+,     ws_ship_addr_sk bigint
+,     ws_web_page_sk bigint
+,     ws_web_site_sk bigint
+,     ws_ship_mode_sk bigint
+,     ws_warehouse_sk bigint
+,     ws_promo_sk bigint
+,     ws_order_number bigint
+,     ws_quantity int
+,     ws_wholesale_cost decimal(7,2)
+,     ws_list_price decimal(7,2)
+,     ws_sales_price decimal(7,2)
+,     ws_ext_discount_amt decimal(7,2)
+,     ws_ext_sales_price decimal(7,2)
+,     ws_ext_wholesale_cost decimal(7,2)
+,     ws_ext_list_price decimal(7,2)
+,     ws_ext_tax decimal(7,2)
+,     ws_coupon_amt decimal(7,2)
+,     ws_ext_ship_cost decimal(7,2)
+,     ws_net_paid decimal(7,2)
+,     ws_net_paid_inc_tax decimal(7,2)
+,     ws_net_paid_inc_ship decimal(7,2)
+,     ws_net_paid_inc_ship_tax decimal(7,2)
+,     ws_net_profit decimal(7,2)
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/web_sales');
+;
+
+-- Table<web_returns (24 cols)  partition=wr_returned_date_sk>
+
+drop table if exists web_returns;
+create table web_returns(
+      wr_returned_date_sk bigint
+,     wr_returned_time_sk bigint
+,     wr_item_sk bigint
+,     wr_refunded_customer_sk bigint
+,     wr_refunded_cdemo_sk bigint
+,     wr_refunded_hdemo_sk bigint
+,     wr_refunded_addr_sk bigint
+,     wr_returning_customer_sk bigint
+,     wr_returning_cdemo_sk bigint
+,     wr_returning_hdemo_sk bigint
+,     wr_returning_addr_sk bigint
+,     wr_web_page_sk bigint
+,     wr_reason_sk bigint
+,     wr_order_number bigint
+,     wr_return_quantity int
+,     wr_return_amt decimal(7,2)
+,     wr_return_tax decimal(7,2)
+,     wr_return_amt_inc_tax decimal(7,2)
+,     wr_fee decimal(7,2)
+,     wr_return_ship_cost decimal(7,2)
+,     wr_refunded_cash decimal(7,2)
+,     wr_reversed_charge decimal(7,2)
+,     wr_account_credit decimal(7,2)
+,     wr_net_loss decimal(7,2) 
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/web_returns');
+;
+
+-- Table<inventory (4 cols)>
+
+drop table if exists inventory;
+create table inventory(
+      inv_date_sk bigint
+,     inv_item_sk bigint
+,     inv_warehouse_sk bigint
+,     inv_quantity_on_hand int
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/inventory');
+
+-- Table<store (29 cols)>
+
+drop table if exists store;
+create table store(
+      s_store_sk bigint
+,     s_store_id varchar
+,     s_rec_start_date date
+,     s_rec_end_date date
+,     s_closed_date_sk bigint
+,     s_store_name varchar
+,     s_number_employees int
+,     s_floor_space int
+,     s_hours varchar
+,     S_manager varchar
+,     S_market_id int
+,     S_geography_class varchar
+,     S_market_desc varchar
+,     s_market_manager varchar
+,     s_division_id int
+,     s_division_name varchar
+,     s_company_id int
+,     s_company_name varchar
+,     s_street_number varchar
+,     s_street_name varchar
+,     s_street_type varchar
+,     s_suite_number varchar
+,     s_city varchar
+,     s_county varchar
+,     s_state varchar
+,     s_zip varchar
+,     s_country varchar
+,     s_gmt_offset decimal(5,2)
+,     s_tax_percentage decimal(5,2)
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/store');
+
+-- Table<call_center (31 cols)>
+
+drop table if exists call_center;
+create table call_center(
+      cc_call_center_sk bigint
+,     cc_call_center_id varchar
+,     cc_rec_start_date date
+,     cc_rec_end_date date
+,     cc_closed_date_sk bigint
+,     cc_open_date_sk bigint
+,     cc_name varchar
+,     cc_class varchar
+,     cc_employees int
+,     cc_sq_ft int
+,     cc_hours varchar
+,     cc_manager varchar
+,     cc_mkt_id int
+,     cc_mkt_class varchar
+,     cc_mkt_desc varchar
+,     cc_market_manager varchar
+,     cc_division int
+,     cc_division_name varchar
+,     cc_company int
+,     cc_company_name varchar
+,     cc_street_number varchar
+,     cc_street_name varchar
+,     cc_street_type varchar
+,     cc_suite_number varchar
+,     cc_city varchar
+,     cc_county varchar
+,     cc_state varchar
+,     cc_zip varchar
+,     cc_country varchar
+,     cc_gmt_offset decimal(5,2)
+,     cc_tax_percentage decimal(5,2)
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/call_center');
+
+-- Table<catalog_page (9 cols)>
+
+drop table if exists catalog_page;
+create table catalog_page(
+      cp_catalog_page_sk bigint
+,     cp_catalog_page_id varchar
+,     cp_start_date_sk bigint
+,     cp_end_date_sk bigint
+,     cp_department varchar
+,     cp_catalog_number int
+,     cp_catalog_page_number int
+,     cp_description varchar
+,     cp_type varchar
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/catalog_page');
+
+-- Table<web_site (26 cols)>
+
+drop table if exists web_site;
+create table web_site(
+      web_site_sk bigint
+,     web_site_id varchar
+,     web_rec_start_date date
+,     web_rec_end_date date
+,     web_name varchar
+,     web_open_date_sk bigint
+,     web_close_date_sk bigint
+,     web_class varchar
+,     web_manager varchar
+,     web_mkt_id int
+,     web_mkt_class varchar
+,     web_mkt_desc varchar
+,     web_market_manager varchar
+,     web_company_id int
+,     web_company_name varchar
+,     web_street_number varchar
+,     web_street_name varchar
+,     web_street_type varchar
+,     web_suite_number varchar
+,     web_city varchar
+,     web_county varchar
+,     web_state varchar
+,     web_zip varchar
+,     web_country varchar
+,     web_gmt_offset decimal(5,2)  
+,     web_tax_percentage decimal(5,2)
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/web_site');
+
+-- Table<web_page (14 cols)>
+
+drop table if exists web_page;
+create table web_page(
+      wp_web_page_sk bigint
+,     wp_web_page_id varchar
+,     wp_rec_start_date date
+,     wp_rec_end_date date
+,     wp_creation_date_sk bigint
+,     wp_access_date_sk bigint
+,     wp_autogen_flag varchar
+,     wp_customer_sk bigint
+,     wp_url varchar
+,     wp_type varchar
+,     wp_char_count int
+,     wp_link_count int
+,     wp_image_count int
+,     wp_max_ad_count int
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/web_page');
+
+-- Table<warehouse (14 cols)>
+
+drop table if exists warehouse;
+create table warehouse(
+      w_warehouse_sk bigint
+,     w_warehouse_id varchar
+,     w_warehouse_name varchar
+,     w_warehouse_sq_ft int
+,     w_street_number varchar
+,     w_street_name varchar
+,     w_street_type varchar
+,     w_suite_number varchar
+,     w_city varchar
+,     w_county varchar
+,     w_state varchar
+,     w_zip varchar
+,     w_country varchar
+,     w_gmt_offset decimal(5,2)
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/warehouse');
+
+-- Table<customer (18 cols)>
+
+drop table if exists customer;
+create table customer(
+      c_customer_sk bigint
+,     c_customer_id varchar
+,     c_current_cdemo_sk bigint
+,     c_current_hdemo_sk bigint
+,     c_current_addr_sk bigint
+,     c_first_shipto_date_sk bigint
+,     c_first_sales_date_sk bigint
+,     c_salutation varchar
+,     c_first_name varchar
+,     c_last_name varchar
+,     c_preferred_cust_flag varchar
+,     c_birth_day int
+,     c_birth_month int
+,     c_birth_year int
+,     c_birth_country varchar
+,     c_login varchar
+,     c_email_address varchar
+,     c_last_review_date_sk bigint
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/customer');
+
+-- Table<customer_address (13 cols)>
+
+drop table if exists customer_address;
+create table customer_address(
+      ca_address_sk bigint
+,     ca_address_id varchar
+,     ca_street_number varchar
+,     ca_street_name varchar
+,     ca_street_type varchar
+,     ca_suite_number varchar
+,     ca_city varchar
+,     ca_county varchar
+,     ca_state varchar
+,     ca_zip varchar
+,     ca_country varchar
+,     ca_gmt_offset decimal(5,2)
+,     ca_location_type varchar
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/customer_address');
+
+-- Table<customer_demographics (9 cols)>
+
+drop table if exists customer_demographics;
+create table customer_demographics(
+      cd_demo_sk bigint
+,     cd_gender varchar
+,     cd_marital_status varchar
+,     cd_education_status varchar
+,     cd_purchase_estimate int
+,     cd_credit_rating varchar
+,     cd_dep_count int
+,     cd_dep_employed_count int
+,     cd_dep_college_count int
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/customer_demographics');
+
+-- Table<date_dim (28 cols)>
+
+drop table if exists date_dim;
+create table date_dim(
+      d_date_sk bigint
+,     d_date_id varchar
+,     d_date date
+,     d_month_seq int
+,     d_week_seq int
+,     d_quarter_seq int
+,     d_year int
+,     d_dow int
+,     d_moy int
+,     d_dom int
+,     d_qoy int
+,     d_fy_year int
+,     d_fy_quarter_seq int
+,     d_fy_week_seq int
+,     d_day_name varchar
+,     d_quarter_name varchar
+,     d_holiday varchar
+,     d_weekend varchar
+,     d_following_holiday varchar
+,     d_first_dom int
+,     d_last_dom int
+,     d_same_day_ly int
+,     d_same_day_lq int
+,     d_current_day varchar
+,     d_current_week varchar
+,     d_current_month varchar
+,     d_current_quarter varchar
+,     d_current_year varchar
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/date_dim');
+
+-- Table<household_demographics (5 cols)>
+
+drop table if exists household_demographics;
+create table household_demographics(
+      hd_demo_sk bigint
+,     hd_income_band_sk bigint
+,     hd_buy_potential varchar
+,     hd_dep_count int
+,     hd_vehicle_count int
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/household_demographics');
+
+-- Table<item (22 cols)>
+
+drop table if exists item;
+create table item(
+      i_item_sk bigint
+,     i_item_id varchar
+,     i_rec_start_date date
+,     i_rec_end_date date
+,     i_item_desc varchar
+,     i_current_price decimal(7,2)
+,     i_wholesale_cost decimal(7,2)
+,     i_brand_id int
+,     i_brand varchar
+,     i_class_id int
+,     i_class varchar
+,     i_category_id int
+,     i_category varchar
+,     i_manufact_id int
+,     i_manufact varchar
+,     i_size varchar
+,     i_formulation varchar
+,     i_color varchar
+,     i_units varchar
+,     i_container varchar
+,     i_manager_id int
+,     i_product_name varchar
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/item');
+
+-- Table<income_band (3 cols)>
+
+drop table if exists income_band;
+create table income_band(
+      ib_income_band_sk bigint
+,     ib_lower_bound int
+,     ib_upper_bound int
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/income_band');
+
+-- Table<promotion (19 cols)>
+
+drop table if exists promotion;
+create table promotion(
+      p_promo_sk bigint
+,     p_promo_id varchar
+,     p_start_date_sk bigint
+,     p_end_date_sk bigint
+,     p_item_sk bigint
+,     p_cost decimal(15,2)
+,     p_response_target int
+,     p_promo_name varchar
+,     p_channel_dmail varchar
+,     p_channel_email varchar
+,     p_channel_catalog varchar
+,     p_channel_tv varchar
+,     p_channel_radio varchar
+,     p_channel_press varchar
+,     p_channel_event varchar
+,     p_channel_demo varchar
+,     p_channel_details varchar
+,     p_purpose varchar
+,     p_discount_active varchar
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/promotion');
+
+-- Table<reason (3 cols)>
+
+drop table if exists reason;
+create table reason(
+      r_reason_sk bigint
+,     r_reason_id varchar
+,     r_reason_desc varchar
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/reason');
+
+-- Table<ship_mode (6 cols)>
+
+drop table if exists ship_mode;
+create table ship_mode(
+      sm_ship_mode_sk bigint
+,     sm_ship_mode_id varchar
+,     sm_type varchar
+,     sm_code varchar
+,     sm_carrier varchar
+,     sm_contract varchar
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/ship_mode');
+
+-- Table<time_dim (10 cols)>
+
+drop table if exists time_dim;
+create table time_dim(
+      t_time_sk bigint
+,     t_time_id varchar
+,     t_time int
+,     t_hour int
+,     t_minute int
+,     t_second int
+,     t_am_pm varchar
+,     t_shift varchar
+,     t_sub_shift varchar
+,     t_meal_time varchar
+)
+with( format = 'TEXTFILE',
+textfile_field_separator = '|',
+external_location = 's3a://tpcds2/4/time_dim');
+
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/README.md b/ceph/src/s3select/TPCDS/sample-queries-tpcds/README.md
new file mode 100644 (file)
index 0000000..3fc71c5
--- /dev/null
@@ -0,0 +1,4 @@
+Sample TPC-DS Queries
+=====================
+
+This directory contains sample TPC-DS queries you can run once you have generated your data. Queries are compatible with HDP 2.6 and up.
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query1.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query1.sql
new file mode 100644 (file)
index 0000000..c201f73
--- /dev/null
@@ -0,0 +1,25 @@
+-- start query 1 in stream 0 using template query1.tpl and seed 2031708268
+with customer_total_return as
+(select sr_customer_sk as ctr_customer_sk
+,sr_store_sk as ctr_store_sk
+,sum(SR_FEE) as ctr_total_return
+from store_returns
+,date_dim
+where sr_returned_date_sk = d_date_sk
+and d_year =2000
+group by sr_customer_sk
+,sr_store_sk)
+ select  c_customer_id
+from customer_total_return ctr1
+,store
+,customer
+where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2
+from customer_total_return ctr2
+where ctr1.ctr_store_sk = ctr2.ctr_store_sk)
+and s_store_sk = ctr1.ctr_store_sk
+and s_state = 'NM'
+and ctr1.ctr_customer_sk = c_customer_sk
+order by c_customer_id
+limit 100;
+
+-- end query 1 in stream 0 using template query1.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query10.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query10.sql
new file mode 100644 (file)
index 0000000..c5b4ac2
--- /dev/null
@@ -0,0 +1,59 @@
+-- start query 1 in stream 0 using template query10.tpl and seed 797269820
+select  
+  cd_gender,
+  cd_marital_status,
+  cd_education_status,
+  count(*) cnt1,
+  cd_purchase_estimate,
+  count(*) cnt2,
+  cd_credit_rating,
+  count(*) cnt3,
+  cd_dep_count,
+  count(*) cnt4,
+  cd_dep_employed_count,
+  count(*) cnt5,
+  cd_dep_college_count,
+  count(*) cnt6
+ from
+  customer c,customer_address ca,customer_demographics
+ where
+  c.c_current_addr_sk = ca.ca_address_sk and
+  ca_county in ('Fillmore County','McPherson County','Bonneville County','Boone County','Brown County') and
+  cd_demo_sk = c.c_current_cdemo_sk and 
+  exists (select *
+          from store_sales,date_dim
+          where c.c_customer_sk = ss_customer_sk and
+                ss_sold_date_sk = d_date_sk and
+                d_year = 2000 and
+                d_moy between 3 and 3+3) and
+   (exists (select *
+            from web_sales,date_dim
+            where c.c_customer_sk = ws_bill_customer_sk and
+                  ws_sold_date_sk = d_date_sk and
+                  d_year = 2000 and
+                  d_moy between 3 ANd 3+3) or 
+    exists (select * 
+            from catalog_sales,date_dim
+            where c.c_customer_sk = cs_ship_customer_sk and
+                  cs_sold_date_sk = d_date_sk and
+                  d_year = 2000 and
+                  d_moy between 3 and 3+3))
+ group by cd_gender,
+          cd_marital_status,
+          cd_education_status,
+          cd_purchase_estimate,
+          cd_credit_rating,
+          cd_dep_count,
+          cd_dep_employed_count,
+          cd_dep_college_count
+ order by cd_gender,
+          cd_marital_status,
+          cd_education_status,
+          cd_purchase_estimate,
+          cd_credit_rating,
+          cd_dep_count,
+          cd_dep_employed_count,
+          cd_dep_college_count
+limit 100;
+
+-- end query 1 in stream 0 using template query10.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query11.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query11.sql
new file mode 100644 (file)
index 0000000..156d9da
--- /dev/null
@@ -0,0 +1,81 @@
+-- start query 1 in stream 0 using template query11.tpl and seed 1819994127
+with year_total as (
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       ,sum(ss_ext_list_price-ss_ext_discount_amt) year_total
+       ,'s' sale_type
+ from customer
+     ,store_sales
+     ,date_dim
+ where c_customer_sk = ss_customer_sk
+   and ss_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag 
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year 
+ union all
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       ,sum(ws_ext_list_price-ws_ext_discount_amt) year_total
+       ,'w' sale_type
+ from customer
+     ,web_sales
+     ,date_dim
+ where c_customer_sk = ws_bill_customer_sk
+   and ws_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag 
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year
+         )
+  select  
+                  t_s_secyear.customer_id
+                 ,t_s_secyear.customer_first_name
+                 ,t_s_secyear.customer_last_name
+                 ,t_s_secyear.customer_birth_country
+ from year_total t_s_firstyear
+     ,year_total t_s_secyear
+     ,year_total t_w_firstyear
+     ,year_total t_w_secyear
+ where t_s_secyear.customer_id = t_s_firstyear.customer_id
+         and t_s_firstyear.customer_id = t_w_secyear.customer_id
+         and t_s_firstyear.customer_id = t_w_firstyear.customer_id
+         and t_s_firstyear.sale_type = 's'
+         and t_w_firstyear.sale_type = 'w'
+         and t_s_secyear.sale_type = 's'
+         and t_w_secyear.sale_type = 'w'
+         and t_s_firstyear.dyear = 1999
+         and t_s_secyear.dyear = 1999+1
+         and t_w_firstyear.dyear = 1999
+         and t_w_secyear.dyear = 1999+1
+         and t_s_firstyear.year_total > 0
+         and t_w_firstyear.year_total > 0
+         and case when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / t_w_firstyear.year_total else 0.0 end
+             > case when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / t_s_firstyear.year_total else 0.0 end
+ order by t_s_secyear.customer_id
+         ,t_s_secyear.customer_first_name
+         ,t_s_secyear.customer_last_name
+         ,t_s_secyear.customer_birth_country
+limit 100;
+
+-- end query 1 in stream 0 using template query11.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query12.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query12.sql
new file mode 100644 (file)
index 0000000..077223c
--- /dev/null
@@ -0,0 +1,34 @@
+-- start query 1 in stream 0 using template query12.tpl and seed 345591136
+select  i_item_id
+      ,i_item_desc 
+      ,i_category 
+      ,i_class 
+      ,i_current_price
+      ,sum(ws_ext_sales_price) as itemrevenue 
+      ,sum(ws_ext_sales_price)*100/sum(sum(ws_ext_sales_price)) over
+          (partition by i_class) as revenueratio
+from   
+       web_sales
+       ,item 
+       ,date_dim
+where 
+       ws_item_sk = i_item_sk 
+       and i_category in ('Electronics', 'Books', 'Women')
+       and ws_sold_date_sk = d_date_sk
+       and d_date between cast('1998-01-06' as date) 
+                               and (cast('1998-01-06' as date) + interval '30' day)
+group by 
+       i_item_id
+        ,i_item_desc 
+        ,i_category
+        ,i_class
+        ,i_current_price
+order by 
+       i_category
+        ,i_class
+        ,i_item_id
+        ,i_item_desc
+        ,revenueratio
+limit 100;
+
+-- end query 1 in stream 0 using template query12.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query13.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query13.sql
new file mode 100644 (file)
index 0000000..cdef846
--- /dev/null
@@ -0,0 +1,52 @@
+-- start query 1 in stream 0 using template query13.tpl and seed 622697896
+select avg(ss_quantity)
+       ,avg(ss_ext_sales_price)
+       ,avg(ss_ext_wholesale_cost)
+       ,sum(ss_ext_wholesale_cost)
+ from store_sales
+     ,store
+     ,customer_demographics
+     ,household_demographics
+     ,customer_address
+     ,date_dim
+ where s_store_sk = ss_store_sk
+ and  ss_sold_date_sk = d_date_sk and d_year = 2001
+ and((ss_hdemo_sk=hd_demo_sk
+  and cd_demo_sk = ss_cdemo_sk
+  and cd_marital_status = 'U'
+  and cd_education_status = 'Secondary'
+  and ss_sales_price between 100.00 and 150.00
+  and hd_dep_count = 3   
+     )or
+     (ss_hdemo_sk=hd_demo_sk
+  and cd_demo_sk = ss_cdemo_sk
+  and cd_marital_status = 'W'
+  and cd_education_status = 'College'
+  and ss_sales_price between 50.00 and 100.00   
+  and hd_dep_count = 1
+     ) or 
+     (ss_hdemo_sk=hd_demo_sk
+  and cd_demo_sk = ss_cdemo_sk
+  and cd_marital_status = 'D'
+  and cd_education_status = 'Primary'
+  and ss_sales_price between 150.00 and 200.00 
+  and hd_dep_count = 1  
+     ))
+ and((ss_addr_sk = ca_address_sk
+  and ca_country = 'United States'
+  and ca_state in ('TX', 'OK', 'MI')
+  and ss_net_profit between 100 and 200  
+     ) or
+     (ss_addr_sk = ca_address_sk
+  and ca_country = 'United States'
+  and ca_state in ('WA', 'NC', 'OH')
+  and ss_net_profit between 150 and 300  
+     ) or
+     (ss_addr_sk = ca_address_sk
+  and ca_country = 'United States'
+  and ca_state in ('MT', 'FL', 'GA')
+  and ss_net_profit between 50 and 250  
+     ))
+;
+
+-- end query 1 in stream 0 using template query13.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query14.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query14.sql
new file mode 100644 (file)
index 0000000..9238144
--- /dev/null
@@ -0,0 +1,210 @@
+-- start query 1 in stream 0 using template query14.tpl and seed 1819994127
+with  cross_items as
+ (select i_item_sk ss_item_sk
+ from item,
+ (select iss.i_brand_id brand_id
+     ,iss.i_class_id class_id
+     ,iss.i_category_id category_id
+ from store_sales
+     ,item iss
+     ,date_dim d1
+ where ss_item_sk = iss.i_item_sk
+   and ss_sold_date_sk = d1.d_date_sk
+   and d1.d_year between 2000 AND 2000 + 2
+ intersect 
+ select ics.i_brand_id
+     ,ics.i_class_id
+     ,ics.i_category_id
+ from catalog_sales
+     ,item ics
+     ,date_dim d2
+ where cs_item_sk = ics.i_item_sk
+   and cs_sold_date_sk = d2.d_date_sk
+   and d2.d_year between 2000 AND 2000 + 2
+ intersect
+ select iws.i_brand_id
+     ,iws.i_class_id
+     ,iws.i_category_id
+ from web_sales
+     ,item iws
+     ,date_dim d3
+ where ws_item_sk = iws.i_item_sk
+   and ws_sold_date_sk = d3.d_date_sk
+   and d3.d_year between 2000 AND 2000 + 2) x
+ where i_brand_id = brand_id
+      and i_class_id = class_id
+      and i_category_id = category_id
+),
+ avg_sales as
+ (select avg(quantity*list_price) average_sales
+  from (select ss_quantity quantity
+             ,ss_list_price list_price
+       from store_sales
+           ,date_dim
+       where ss_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2
+       union all 
+       select cs_quantity quantity 
+             ,cs_list_price list_price
+       from catalog_sales
+           ,date_dim
+       where cs_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2 
+       union all
+       select ws_quantity quantity
+             ,ws_list_price list_price
+       from web_sales
+           ,date_dim
+       where ws_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2) x)
+  select  channel, i_brand_id,i_class_id,i_category_id,sum(sales), sum(number_sales)
+ from(
+       select 'store' channel, i_brand_id,i_class_id
+             ,i_category_id,sum(ss_quantity*ss_list_price) sales
+             , count(*) number_sales
+       from store_sales
+           ,item
+           ,date_dim
+       where ss_item_sk in (select ss_item_sk from cross_items)
+         and ss_item_sk = i_item_sk
+         and ss_sold_date_sk = d_date_sk
+         and d_year = 2000+2 
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(ss_quantity*ss_list_price) > (select average_sales from avg_sales)
+       union all
+       select 'catalog' channel, i_brand_id,i_class_id,i_category_id, sum(cs_quantity*cs_list_price) sales, count(*) number_sales
+       from catalog_sales
+           ,item
+           ,date_dim
+       where cs_item_sk in (select ss_item_sk from cross_items)
+         and cs_item_sk = i_item_sk
+         and cs_sold_date_sk = d_date_sk
+         and d_year = 2000+2 
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(cs_quantity*cs_list_price) > (select average_sales from avg_sales)
+       union all
+       select 'web' channel, i_brand_id,i_class_id,i_category_id, sum(ws_quantity*ws_list_price) sales , count(*) number_sales
+       from web_sales
+           ,item
+           ,date_dim
+       where ws_item_sk in (select ss_item_sk from cross_items)
+         and ws_item_sk = i_item_sk
+         and ws_sold_date_sk = d_date_sk
+         and d_year = 2000+2
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(ws_quantity*ws_list_price) > (select average_sales from avg_sales)
+ ) y
+ group by rollup (channel, i_brand_id,i_class_id,i_category_id)
+ order by channel,i_brand_id,i_class_id,i_category_id
+ limit 100;
+with  cross_items as
+ (select i_item_sk ss_item_sk
+ from item,
+ (select iss.i_brand_id brand_id
+     ,iss.i_class_id class_id
+     ,iss.i_category_id category_id
+ from store_sales
+     ,item iss
+     ,date_dim d1
+ where ss_item_sk = iss.i_item_sk
+   and ss_sold_date_sk = d1.d_date_sk
+   and d1.d_year between 2000 AND 2000 + 2
+ intersect
+ select ics.i_brand_id
+     ,ics.i_class_id
+     ,ics.i_category_id
+ from catalog_sales
+     ,item ics
+     ,date_dim d2
+ where cs_item_sk = ics.i_item_sk
+   and cs_sold_date_sk = d2.d_date_sk
+   and d2.d_year between 2000 AND 2000 + 2
+ intersect
+ select iws.i_brand_id
+     ,iws.i_class_id
+     ,iws.i_category_id
+ from web_sales
+     ,item iws
+     ,date_dim d3
+ where ws_item_sk = iws.i_item_sk
+   and ws_sold_date_sk = d3.d_date_sk
+   and d3.d_year between 2000 AND 2000 + 2) x
+ where i_brand_id = brand_id
+      and i_class_id = class_id
+      and i_category_id = category_id
+),
+ avg_sales as
+(select avg(quantity*list_price) average_sales
+  from (select ss_quantity quantity
+             ,ss_list_price list_price
+       from store_sales
+           ,date_dim
+       where ss_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2
+       union all
+       select cs_quantity quantity
+             ,cs_list_price list_price
+       from catalog_sales
+           ,date_dim
+       where cs_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2
+       union all
+       select ws_quantity quantity
+             ,ws_list_price list_price
+       from web_sales
+           ,date_dim
+       where ws_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2) x)
+  select  this_year.channel ty_channel
+                           ,this_year.i_brand_id ty_brand
+                           ,this_year.i_class_id ty_class
+                           ,this_year.i_category_id ty_category
+                           ,this_year.sales ty_sales
+                           ,this_year.number_sales ty_number_sales
+                           ,last_year.channel ly_channel
+                           ,last_year.i_brand_id ly_brand
+                           ,last_year.i_class_id ly_class
+                           ,last_year.i_category_id ly_category
+                           ,last_year.sales ly_sales
+                           ,last_year.number_sales ly_number_sales 
+ from
+ (select 'store' channel, i_brand_id,i_class_id,i_category_id
+        ,sum(ss_quantity*ss_list_price) sales, count(*) number_sales
+ from store_sales 
+     ,item
+     ,date_dim
+ where ss_item_sk in (select ss_item_sk from cross_items)
+   and ss_item_sk = i_item_sk
+   and ss_sold_date_sk = d_date_sk
+   and d_week_seq = (select d_week_seq
+                     from date_dim
+                     where d_year = 2000 + 1
+                       and d_moy = 12
+                       and d_dom = 15)
+ group by i_brand_id,i_class_id,i_category_id
+ having sum(ss_quantity*ss_list_price) > (select average_sales from avg_sales)) this_year,
+ (select 'store' channel, i_brand_id,i_class_id
+        ,i_category_id, sum(ss_quantity*ss_list_price) sales, count(*) number_sales
+ from store_sales
+     ,item
+     ,date_dim
+ where ss_item_sk in (select ss_item_sk from cross_items)
+   and ss_item_sk = i_item_sk
+   and ss_sold_date_sk = d_date_sk
+   and d_week_seq = (select d_week_seq
+                     from date_dim
+                     where d_year = 2000
+                       and d_moy = 12
+                       and d_dom = 15)
+ group by i_brand_id,i_class_id,i_category_id
+ having sum(ss_quantity*ss_list_price) > (select average_sales from avg_sales)) last_year
+ where this_year.i_brand_id= last_year.i_brand_id
+   and this_year.i_class_id = last_year.i_class_id
+   and this_year.i_category_id = last_year.i_category_id
+ order by this_year.channel, this_year.i_brand_id, this_year.i_class_id, this_year.i_category_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query14.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query15.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query15.sql
new file mode 100644 (file)
index 0000000..cb489cf
--- /dev/null
@@ -0,0 +1,20 @@
+-- start query 1 in stream 0 using template query15.tpl and seed 1819994127
+select  ca_zip
+       ,sum(cs_sales_price)
+ from catalog_sales
+     ,customer
+     ,customer_address
+     ,date_dim
+ where cs_bill_customer_sk = c_customer_sk
+       and c_current_addr_sk = ca_address_sk 
+       and ( substr(ca_zip,1,5) in ('85669', '86197','88274','83405','86475',
+                                   '85392', '85460', '80348', '81792')
+             or ca_state in ('CA','WA','GA')
+             or cs_sales_price > 500)
+       and cs_sold_date_sk = d_date_sk
+       and d_qoy = 2 and d_year = 1998
+ group by ca_zip
+ order by ca_zip
+ limit 100;
+
+-- end query 1 in stream 0 using template query15.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query16.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query16.sql
new file mode 100644 (file)
index 0000000..f942c73
--- /dev/null
@@ -0,0 +1,31 @@
+-- start query 1 in stream 0 using template query16.tpl and seed 171719422
+select  
+   count(distinct cs_order_number) as "order count"
+  ,sum(cs_ext_ship_cost) as "total shipping cost"
+  ,sum(cs_net_profit) as "total net profit"
+from
+   catalog_sales cs1
+  ,date_dim
+  ,customer_address
+  ,call_center
+where
+    d_date between cast('1999-4-01' as date) and 
+           (cast('1999-4-01' as date) + interval '60' day)
+and cs1.cs_ship_date_sk = d_date_sk
+and cs1.cs_ship_addr_sk = ca_address_sk
+and ca_state = 'IL'
+and cs1.cs_call_center_sk = cc_call_center_sk
+and cc_county in ('Richland County','Bronx County','Maverick County','Mesa County',
+                  'Raleigh County'
+)
+and exists (select *
+            from catalog_sales cs2
+            where cs1.cs_order_number = cs2.cs_order_number
+              and cs1.cs_warehouse_sk <> cs2.cs_warehouse_sk)
+and not exists(select *
+               from catalog_returns cr1
+               where cs1.cs_order_number = cr1.cr_order_number)
+order by count(distinct cs_order_number)
+limit 100;
+
+-- end query 1 in stream 0 using template query16.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query17.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query17.sql
new file mode 100644 (file)
index 0000000..b369def
--- /dev/null
@@ -0,0 +1,45 @@
+-- start query 1 in stream 0 using template query17.tpl and seed 1819994127
+select  i_item_id
+       ,i_item_desc
+       ,s_state
+       ,count(ss_quantity) as store_sales_quantitycount
+       ,avg(ss_quantity) as store_sales_quantityave
+       ,stddev_samp(ss_quantity) as store_sales_quantitystdev
+       ,stddev_samp(ss_quantity)/avg(ss_quantity) as store_sales_quantitycov
+       ,count(sr_return_quantity) as store_returns_quantitycount
+       ,avg(sr_return_quantity) as store_returns_quantityave
+       ,stddev_samp(sr_return_quantity) as store_returns_quantitystdev
+       ,stddev_samp(sr_return_quantity)/avg(sr_return_quantity) as store_returns_quantitycov
+       ,count(cs_quantity) as catalog_sales_quantitycount ,avg(cs_quantity) as catalog_sales_quantityave
+       ,stddev_samp(cs_quantity) as catalog_sales_quantitystdev
+       ,stddev_samp(cs_quantity)/avg(cs_quantity) as catalog_sales_quantitycov
+ from store_sales
+     ,store_returns
+     ,catalog_sales
+     ,date_dim d1
+     ,date_dim d2
+     ,date_dim d3
+     ,store
+     ,item
+ where d1.d_quarter_name = '2000Q1'
+   and d1.d_date_sk = ss_sold_date_sk
+   and i_item_sk = ss_item_sk
+   and s_store_sk = ss_store_sk
+   and ss_customer_sk = sr_customer_sk
+   and ss_item_sk = sr_item_sk
+   and ss_ticket_number = sr_ticket_number
+   and sr_returned_date_sk = d2.d_date_sk
+   and d2.d_quarter_name in ('2000Q1','2000Q2','2000Q3')
+   and sr_customer_sk = cs_bill_customer_sk
+   and sr_item_sk = cs_item_sk
+   and cs_sold_date_sk = d3.d_date_sk
+   and d3.d_quarter_name in ('2000Q1','2000Q2','2000Q3')
+ group by i_item_id
+         ,i_item_desc
+         ,s_state
+ order by i_item_id
+         ,i_item_desc
+         ,s_state
+limit 100;
+
+-- end query 1 in stream 0 using template query17.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query18.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query18.sql
new file mode 100644 (file)
index 0000000..ee3b5b6
--- /dev/null
@@ -0,0 +1,34 @@
+-- start query 1 in stream 0 using template query18.tpl and seed 1978355063
+select  i_item_id,
+        ca_country,
+        ca_state, 
+        ca_county,
+        avg( cast(cs_quantity as decimal(12,2))) agg1,
+        avg( cast(cs_list_price as decimal(12,2))) agg2,
+        avg( cast(cs_coupon_amt as decimal(12,2))) agg3,
+        avg( cast(cs_sales_price as decimal(12,2))) agg4,
+        avg( cast(cs_net_profit as decimal(12,2))) agg5,
+        avg( cast(c_birth_year as decimal(12,2))) agg6,
+        avg( cast(cd1.cd_dep_count as decimal(12,2))) agg7
+ from catalog_sales, customer_demographics cd1, 
+      customer_demographics cd2, customer, customer_address, date_dim, item
+ where cs_sold_date_sk = d_date_sk and
+       cs_item_sk = i_item_sk and
+       cs_bill_cdemo_sk = cd1.cd_demo_sk and
+       cs_bill_customer_sk = c_customer_sk and
+       cd1.cd_gender = 'M' and 
+       cd1.cd_education_status = 'Unknown' and
+       c_current_cdemo_sk = cd2.cd_demo_sk and
+       c_current_addr_sk = ca_address_sk and
+       c_birth_month in (5,1,4,7,8,9) and
+       d_year = 2002 and
+       ca_state in ('AR','TX','NC'
+                   ,'GA','MS','WV','AL')
+ group by rollup (i_item_id, ca_country, ca_state, ca_county)
+ order by ca_country,
+        ca_state, 
+        ca_county,
+       i_item_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query18.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query19.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query19.sql
new file mode 100644 (file)
index 0000000..e4c6541
--- /dev/null
@@ -0,0 +1,25 @@
+-- start query 1 in stream 0 using template query19.tpl and seed 1930872976
+select  i_brand_id brand_id, i_brand brand, i_manufact_id, i_manufact,
+       sum(ss_ext_sales_price) ext_price
+ from date_dim, store_sales, item,customer,customer_address,store
+ where d_date_sk = ss_sold_date_sk
+   and ss_item_sk = i_item_sk
+   and i_manager_id=16
+   and d_moy=12
+   and d_year=1998
+   and ss_customer_sk = c_customer_sk 
+   and c_current_addr_sk = ca_address_sk
+   and substr(ca_zip,1,5) <> substr(s_zip,1,5) 
+   and ss_store_sk = s_store_sk 
+ group by i_brand
+      ,i_brand_id
+      ,i_manufact_id
+      ,i_manufact
+ order by ext_price desc
+         ,i_brand
+         ,i_brand_id
+         ,i_manufact_id
+         ,i_manufact
+limit 100 ;
+
+-- end query 1 in stream 0 using template query19.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query2.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query2.sql
new file mode 100644 (file)
index 0000000..cb6f026
--- /dev/null
@@ -0,0 +1,60 @@
+-- start query 1 in stream 0 using template query2.tpl and seed 1819994127
+with wscs as
+ (select sold_date_sk
+        ,sales_price
+  from (select ws_sold_date_sk sold_date_sk
+              ,ws_ext_sales_price sales_price
+        from web_sales) x 
+        union all
+        (select cs_sold_date_sk sold_date_sk
+              ,cs_ext_sales_price sales_price
+        from catalog_sales)),
+ wswscs as 
+ (select d_week_seq,
+        sum(case when (d_day_name='Sunday') then sales_price else null end) sun_sales,
+        sum(case when (d_day_name='Monday') then sales_price else null end) mon_sales,
+        sum(case when (d_day_name='Tuesday') then sales_price else  null end) tue_sales,
+        sum(case when (d_day_name='Wednesday') then sales_price else null end) wed_sales,
+        sum(case when (d_day_name='Thursday') then sales_price else null end) thu_sales,
+        sum(case when (d_day_name='Friday') then sales_price else null end) fri_sales,
+        sum(case when (d_day_name='Saturday') then sales_price else null end) sat_sales
+ from wscs
+     ,date_dim
+ where d_date_sk = sold_date_sk
+ group by d_week_seq)
+ select d_week_seq1
+       ,round(sun_sales1/sun_sales2,2)
+       ,round(mon_sales1/mon_sales2,2)
+       ,round(tue_sales1/tue_sales2,2)
+       ,round(wed_sales1/wed_sales2,2)
+       ,round(thu_sales1/thu_sales2,2)
+       ,round(fri_sales1/fri_sales2,2)
+       ,round(sat_sales1/sat_sales2,2)
+ from
+ (select wswscs.d_week_seq d_week_seq1
+        ,sun_sales sun_sales1
+        ,mon_sales mon_sales1
+        ,tue_sales tue_sales1
+        ,wed_sales wed_sales1
+        ,thu_sales thu_sales1
+        ,fri_sales fri_sales1
+        ,sat_sales sat_sales1
+  from wswscs,date_dim 
+  where date_dim.d_week_seq = wswscs.d_week_seq and
+        d_year = 1998) y,
+ (select wswscs.d_week_seq d_week_seq2
+        ,sun_sales sun_sales2
+        ,mon_sales mon_sales2
+        ,tue_sales tue_sales2
+        ,wed_sales wed_sales2
+        ,thu_sales thu_sales2
+        ,fri_sales fri_sales2
+        ,sat_sales sat_sales2
+  from wswscs
+      ,date_dim 
+  where date_dim.d_week_seq = wswscs.d_week_seq and
+        d_year = 1998+1) z
+ where d_week_seq1=d_week_seq2-53
+ order by d_week_seq1;
+
+-- end query 1 in stream 0 using template query2.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query20.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query20.sql
new file mode 100644 (file)
index 0000000..abe7e08
--- /dev/null
@@ -0,0 +1,30 @@
+-- start query 1 in stream 0 using template query20.tpl and seed 345591136
+select  i_item_id
+       ,i_item_desc 
+       ,i_category 
+       ,i_class 
+       ,i_current_price
+       ,sum(cs_ext_sales_price) as itemrevenue 
+       ,sum(cs_ext_sales_price)*100/sum(sum(cs_ext_sales_price)) over
+           (partition by i_class) as revenueratio
+ from  catalog_sales
+     ,item 
+     ,date_dim
+ where cs_item_sk = i_item_sk 
+   and i_category in ('Shoes', 'Electronics', 'Children')
+   and cs_sold_date_sk = d_date_sk
+ and d_date between cast('2001-03-14' as date) 
+                               and (cast('2001-03-14' as date) + interval '30' day)
+ group by i_item_id
+         ,i_item_desc 
+         ,i_category
+         ,i_class
+         ,i_current_price
+ order by i_category
+         ,i_class
+         ,i_item_id
+         ,i_item_desc
+         ,revenueratio
+limit 100;
+
+-- end query 1 in stream 0 using template query20.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query21.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query21.sql
new file mode 100644 (file)
index 0000000..2d7a0f9
--- /dev/null
@@ -0,0 +1,30 @@
+-- start query 1 in stream 0 using template query21.tpl and seed 1819994127
+select  *
+ from(select w_warehouse_name
+            ,i_item_id
+            ,sum(case when (cast(d_date as date) < cast ('1999-03-20' as date))
+                       then inv_quantity_on_hand 
+                      else 0 end) as inv_before
+            ,sum(case when (cast(d_date as date) >= cast ('1999-03-20' as date))
+                      then inv_quantity_on_hand 
+                      else 0 end) as inv_after
+   from inventory
+       ,warehouse
+       ,item
+       ,date_dim
+   where i_current_price between 0.99 and 1.49
+     and i_item_sk          = inv_item_sk
+     and inv_warehouse_sk   = w_warehouse_sk
+     and inv_date_sk    = d_date_sk
+     and d_date between (cast ('1999-03-20' as date) - interval '30' day)
+                    and (cast ('1999-03-20' as date) + interval '30' day)
+   group by w_warehouse_name, i_item_id) x
+ where (case when inv_before > 0 
+             then inv_after / inv_before 
+             else null
+             end) between 2.0/3.0 and 3.0/2.0
+ order by w_warehouse_name
+         ,i_item_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query21.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query22.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query22.sql
new file mode 100644 (file)
index 0000000..07c4869
--- /dev/null
@@ -0,0 +1,20 @@
+-- start query 1 in stream 0 using template query22.tpl and seed 1819994127
+select  i_product_name
+             ,i_brand
+             ,i_class
+             ,i_category
+             ,avg(inv_quantity_on_hand) qoh
+       from inventory
+           ,date_dim
+           ,item
+       where inv_date_sk=d_date_sk
+              and inv_item_sk=i_item_sk
+              and d_month_seq between 1186 and 1186 + 11
+       group by rollup(i_product_name
+                       ,i_brand
+                       ,i_class
+                       ,i_category)
+order by qoh, i_product_name, i_brand, i_class, i_category
+limit 100;
+
+-- end query 1 in stream 0 using template query22.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query23.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query23.sql
new file mode 100644 (file)
index 0000000..80526b1
--- /dev/null
@@ -0,0 +1,107 @@
+-- start query 1 in stream 0 using template query23.tpl and seed 2031708268
+with frequent_ss_items as 
+ (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date solddate,count(*) cnt
+  from store_sales
+      ,date_dim 
+      ,item
+  where ss_sold_date_sk = d_date_sk
+    and ss_item_sk = i_item_sk 
+    and d_year in (2000,2000+1,2000+2,2000+3)
+  group by substr(i_item_desc,1,30),i_item_sk,d_date
+  having count(*) >4),
+ max_store_sales as
+ (select max(csales) tpcds_cmax 
+  from (select c_customer_sk,sum(ss_quantity*ss_sales_price) csales
+        from store_sales
+            ,customer
+            ,date_dim 
+        where ss_customer_sk = c_customer_sk
+         and ss_sold_date_sk = d_date_sk
+         and d_year in (2000,2000+1,2000+2,2000+3) 
+        group by c_customer_sk) x),
+ best_ss_customer as
+ (select c_customer_sk,sum(ss_quantity*ss_sales_price) ssales
+  from store_sales
+      ,customer
+  where ss_customer_sk = c_customer_sk
+  group by c_customer_sk
+  having sum(ss_quantity*ss_sales_price) > (95/100.0) * (select
+  *
+from
+ max_store_sales))
+  select  sum(sales)
+ from (select cs_quantity*cs_list_price sales
+       from catalog_sales
+           ,date_dim 
+       where d_year = 2000 
+         and d_moy = 3 
+         and cs_sold_date_sk = d_date_sk 
+         and cs_item_sk in (select item_sk from frequent_ss_items)
+         and cs_bill_customer_sk in (select c_customer_sk from best_ss_customer)
+      union all
+      select ws_quantity*ws_list_price sales
+       from web_sales 
+           ,date_dim 
+       where d_year = 2000 
+         and d_moy = 3 
+         and ws_sold_date_sk = d_date_sk 
+         and ws_item_sk in (select item_sk from frequent_ss_items)
+         and ws_bill_customer_sk in (select c_customer_sk from best_ss_customer)) y 
+ limit 100;
+with frequent_ss_items as
+ (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date solddate,count(*) cnt
+  from store_sales
+      ,date_dim
+      ,item
+  where ss_sold_date_sk = d_date_sk
+    and ss_item_sk = i_item_sk
+    and d_year in (2000,2000 + 1,2000 + 2,2000 + 3)
+  group by substr(i_item_desc,1,30),i_item_sk,d_date
+  having count(*) >4),
+ max_store_sales as
+ (select max(csales) tpcds_cmax
+  from (select c_customer_sk,sum(ss_quantity*ss_sales_price) csales
+        from store_sales
+            ,customer
+            ,date_dim 
+        where ss_customer_sk = c_customer_sk
+         and ss_sold_date_sk = d_date_sk
+         and d_year in (2000,2000+1,2000+2,2000+3)
+        group by c_customer_sk) x),
+ best_ss_customer as
+ (select c_customer_sk,sum(ss_quantity*ss_sales_price) ssales
+  from store_sales
+      ,customer
+  where ss_customer_sk = c_customer_sk
+  group by c_customer_sk
+  having sum(ss_quantity*ss_sales_price) > (95/100.0) * (select
+  *
+ from max_store_sales))
+  select  c_last_name,c_first_name,sales
+ from (select c_last_name,c_first_name,sum(cs_quantity*cs_list_price) sales
+        from catalog_sales
+            ,customer
+            ,date_dim 
+        where d_year = 2000 
+         and d_moy = 3 
+         and cs_sold_date_sk = d_date_sk 
+         and cs_item_sk in (select item_sk from frequent_ss_items)
+         and cs_bill_customer_sk in (select c_customer_sk from best_ss_customer)
+         and cs_bill_customer_sk = c_customer_sk 
+       group by c_last_name,c_first_name
+      union all
+      select c_last_name,c_first_name,sum(ws_quantity*ws_list_price) sales
+       from web_sales
+           ,customer
+           ,date_dim 
+       where d_year = 2000 
+         and d_moy = 3 
+         and ws_sold_date_sk = d_date_sk 
+         and ws_item_sk in (select item_sk from frequent_ss_items)
+         and ws_bill_customer_sk in (select c_customer_sk from best_ss_customer)
+         and ws_bill_customer_sk = c_customer_sk
+       group by c_last_name,c_first_name
+     order by c_last_name,c_first_name,sales) y
+  limit 100;
+
+-- end query 1 in stream 0 using template query23.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query24.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query24.sql
new file mode 100644 (file)
index 0000000..034b9cf
--- /dev/null
@@ -0,0 +1,107 @@
+-- start query 1 in stream 0 using template query24.tpl and seed 1220860970
+with ssales as
+(select c_last_name
+      ,c_first_name
+      ,s_store_name
+      ,ca_state
+      ,s_state
+      ,i_color
+      ,i_current_price
+      ,i_manager_id
+      ,i_units
+      ,i_size
+      ,sum(ss_sales_price) netpaid
+from store_sales
+    ,store_returns
+    ,store
+    ,item
+    ,customer
+    ,customer_address
+where ss_ticket_number = sr_ticket_number
+  and ss_item_sk = sr_item_sk
+  and ss_customer_sk = c_customer_sk
+  and ss_item_sk = i_item_sk
+  and ss_store_sk = s_store_sk
+  and c_current_addr_sk = ca_address_sk
+  and c_birth_country <> upper(ca_country)
+  and s_zip = ca_zip
+and s_market_id=10
+group by c_last_name
+        ,c_first_name
+        ,s_store_name
+        ,ca_state
+        ,s_state
+        ,i_color
+        ,i_current_price
+        ,i_manager_id
+        ,i_units
+        ,i_size)
+select c_last_name
+      ,c_first_name
+      ,s_store_name
+      ,sum(netpaid) paid
+from ssales
+where i_color = 'snow'
+group by c_last_name
+        ,c_first_name
+        ,s_store_name
+having sum(netpaid) > (select 0.05*avg(netpaid)
+                                 from ssales)
+order by c_last_name
+        ,c_first_name
+        ,s_store_name
+;
+with ssales as
+(select c_last_name
+      ,c_first_name
+      ,s_store_name
+      ,ca_state
+      ,s_state
+      ,i_color
+      ,i_current_price
+      ,i_manager_id
+      ,i_units
+      ,i_size
+      ,sum(ss_sales_price) netpaid
+from store_sales
+    ,store_returns
+    ,store
+    ,item
+    ,customer
+    ,customer_address
+where ss_ticket_number = sr_ticket_number
+  and ss_item_sk = sr_item_sk
+  and ss_customer_sk = c_customer_sk
+  and ss_item_sk = i_item_sk
+  and ss_store_sk = s_store_sk
+  and c_current_addr_sk = ca_address_sk
+  and c_birth_country <> upper(ca_country)
+  and s_zip = ca_zip
+  and s_market_id = 10
+group by c_last_name
+        ,c_first_name
+        ,s_store_name
+        ,ca_state
+        ,s_state
+        ,i_color
+        ,i_current_price
+        ,i_manager_id
+        ,i_units
+        ,i_size)
+select c_last_name
+      ,c_first_name
+      ,s_store_name
+      ,sum(netpaid) paid
+from ssales
+where i_color = 'chiffon'
+group by c_last_name
+        ,c_first_name
+        ,s_store_name
+having sum(netpaid) > (select 0.05*avg(netpaid)
+                           from ssales)
+order by c_last_name
+        ,c_first_name
+        ,s_store_name
+;
+
+-- end query 1 in stream 0 using template query24.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query25.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query25.sql
new file mode 100644 (file)
index 0000000..3e2624c
--- /dev/null
@@ -0,0 +1,48 @@
+-- start query 1 in stream 0 using template query25.tpl and seed 1819994127
+select  
+ i_item_id
+ ,i_item_desc
+ ,s_store_id
+ ,s_store_name
+ ,sum(ss_net_profit) as store_sales_profit
+ ,sum(sr_net_loss) as store_returns_loss
+ ,sum(cs_net_profit) as catalog_sales_profit
+ from
+ store_sales
+ ,store_returns
+ ,catalog_sales
+ ,date_dim d1
+ ,date_dim d2
+ ,date_dim d3
+ ,store
+ ,item
+ where
+ d1.d_moy = 4
+ and d1.d_year = 2000
+ and d1.d_date_sk = ss_sold_date_sk
+ and i_item_sk = ss_item_sk
+ and s_store_sk = ss_store_sk
+ and ss_customer_sk = sr_customer_sk
+ and ss_item_sk = sr_item_sk
+ and ss_ticket_number = sr_ticket_number
+ and sr_returned_date_sk = d2.d_date_sk
+ and d2.d_moy               between 4 and  10
+ and d2.d_year              = 2000
+ and sr_customer_sk = cs_bill_customer_sk
+ and sr_item_sk = cs_item_sk
+ and cs_sold_date_sk = d3.d_date_sk
+ and d3.d_moy               between 4 and  10 
+ and d3.d_year              = 2000
+ group by
+ i_item_id
+ ,i_item_desc
+ ,s_store_id
+ ,s_store_name
+ order by
+ i_item_id
+ ,i_item_desc
+ ,s_store_id
+ ,s_store_name
+ limit 100;
+
+-- end query 1 in stream 0 using template query25.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query26.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query26.sql
new file mode 100644 (file)
index 0000000..7298126
--- /dev/null
@@ -0,0 +1,21 @@
+-- start query 1 in stream 0 using template query26.tpl and seed 1930872976
+select  i_item_id, 
+        avg(cs_quantity) agg1,
+        avg(cs_list_price) agg2,
+        avg(cs_coupon_amt) agg3,
+        avg(cs_sales_price) agg4 
+ from catalog_sales, customer_demographics, date_dim, item, promotion
+ where cs_sold_date_sk = d_date_sk and
+       cs_item_sk = i_item_sk and
+       cs_bill_cdemo_sk = cd_demo_sk and
+       cs_promo_sk = p_promo_sk and
+       cd_gender = 'F' and 
+       cd_marital_status = 'S' and
+       cd_education_status = 'College' and
+       (p_channel_email = 'N' or p_channel_event = 'N') and
+       d_year = 1998 
+ group by i_item_id
+ order by i_item_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query26.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query27.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query27.sql
new file mode 100644 (file)
index 0000000..9a906c4
--- /dev/null
@@ -0,0 +1,23 @@
+-- start query 1 in stream 0 using template query27.tpl and seed 2017787633
+select  i_item_id,
+        s_state, grouping(s_state) g_state,
+        avg(ss_quantity) agg1,
+        avg(ss_list_price) agg2,
+        avg(ss_coupon_amt) agg3,
+        avg(ss_sales_price) agg4
+ from store_sales, customer_demographics, date_dim, store, item
+ where ss_sold_date_sk = d_date_sk and
+       ss_item_sk = i_item_sk and
+       ss_store_sk = s_store_sk and
+       ss_cdemo_sk = cd_demo_sk and
+       cd_gender = 'F' and
+       cd_marital_status = 'U' and
+       cd_education_status = '2 yr Degree' and
+       d_year = 2000 and
+       s_state in ('AL','IN', 'SC', 'NY', 'OH', 'FL')
+ group by rollup (i_item_id, s_state)
+ order by i_item_id
+         ,s_state
+ limit 100;
+
+-- end query 1 in stream 0 using template query27.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query28.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query28.sql
new file mode 100644 (file)
index 0000000..17133f9
--- /dev/null
@@ -0,0 +1,53 @@
+-- start query 1 in stream 0 using template query28.tpl and seed 444293455
+select  *
+from (select avg(ss_list_price) B1_LP
+            ,count(ss_list_price) B1_CNT
+            ,count(distinct ss_list_price) B1_CNTD
+      from store_sales
+      where ss_quantity between 0 and 5
+        and (ss_list_price between 73 and 73+10 
+             or ss_coupon_amt between 7826 and 7826+1000
+             or ss_wholesale_cost between 70 and 70+20)) B1,
+     (select avg(ss_list_price) B2_LP
+            ,count(ss_list_price) B2_CNT
+            ,count(distinct ss_list_price) B2_CNTD
+      from store_sales
+      where ss_quantity between 6 and 10
+        and (ss_list_price between 152 and 152+10
+          or ss_coupon_amt between 2196 and 2196+1000
+          or ss_wholesale_cost between 56 and 56+20)) B2,
+     (select avg(ss_list_price) B3_LP
+            ,count(ss_list_price) B3_CNT
+            ,count(distinct ss_list_price) B3_CNTD
+      from store_sales
+      where ss_quantity between 11 and 15
+        and (ss_list_price between 53 and 53+10
+          or ss_coupon_amt between 3430 and 3430+1000
+          or ss_wholesale_cost between 13 and 13+20)) B3,
+     (select avg(ss_list_price) B4_LP
+            ,count(ss_list_price) B4_CNT
+            ,count(distinct ss_list_price) B4_CNTD
+      from store_sales
+      where ss_quantity between 16 and 20
+        and (ss_list_price between 182 and 182+10
+          or ss_coupon_amt between 3262 and 3262+1000
+          or ss_wholesale_cost between 20 and 20+20)) B4,
+     (select avg(ss_list_price) B5_LP
+            ,count(ss_list_price) B5_CNT
+            ,count(distinct ss_list_price) B5_CNTD
+      from store_sales
+      where ss_quantity between 21 and 25
+        and (ss_list_price between 85 and 85+10
+          or ss_coupon_amt between 3310 and 3310+1000
+          or ss_wholesale_cost between 37 and 37+20)) B5,
+     (select avg(ss_list_price) B6_LP
+            ,count(ss_list_price) B6_CNT
+            ,count(distinct ss_list_price) B6_CNTD
+      from store_sales
+      where ss_quantity between 26 and 30
+        and (ss_list_price between 180 and 180+10
+          or ss_coupon_amt between 12592 and 12592+1000
+          or ss_wholesale_cost between 22 and 22+20)) B6
+limit 100;
+
+-- end query 1 in stream 0 using template query28.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query29.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query29.sql
new file mode 100644 (file)
index 0000000..4491e53
--- /dev/null
@@ -0,0 +1,47 @@
+-- start query 1 in stream 0 using template query29.tpl and seed 2031708268
+select   
+     i_item_id
+    ,i_item_desc
+    ,s_store_id
+    ,s_store_name
+    ,stddev_samp(ss_quantity)        as store_sales_quantity
+    ,stddev_samp(sr_return_quantity) as store_returns_quantity
+    ,stddev_samp(cs_quantity)        as catalog_sales_quantity
+ from
+    store_sales
+   ,store_returns
+   ,catalog_sales
+   ,date_dim             d1
+   ,date_dim             d2
+   ,date_dim             d3
+   ,store
+   ,item
+ where
+     d1.d_moy               = 4 
+ and d1.d_year              = 1998
+ and d1.d_date_sk           = ss_sold_date_sk
+ and i_item_sk              = ss_item_sk
+ and s_store_sk             = ss_store_sk
+ and ss_customer_sk         = sr_customer_sk
+ and ss_item_sk             = sr_item_sk
+ and ss_ticket_number       = sr_ticket_number
+ and sr_returned_date_sk    = d2.d_date_sk
+ and d2.d_moy               between 4 and  4 + 3 
+ and d2.d_year              = 1998
+ and sr_customer_sk         = cs_bill_customer_sk
+ and sr_item_sk             = cs_item_sk
+ and cs_sold_date_sk        = d3.d_date_sk     
+ and d3.d_year              in (1998,1998+1,1998+2)
+ group by
+    i_item_id
+   ,i_item_desc
+   ,s_store_id
+   ,s_store_name
+ order by
+    i_item_id 
+   ,i_item_desc
+   ,s_store_id
+   ,s_store_name
+ limit 100;
+
+-- end query 1 in stream 0 using template query29.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query3.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query3.sql
new file mode 100644 (file)
index 0000000..1944edb
--- /dev/null
@@ -0,0 +1,21 @@
+-- start query 1 in stream 0 using template query3.tpl and seed 2031708268
+select  dt.d_year 
+       ,item.i_brand_id brand_id 
+       ,item.i_brand brand
+       ,sum(ss_sales_price) sum_agg
+ from  date_dim dt 
+      ,store_sales
+      ,item
+ where dt.d_date_sk = store_sales.ss_sold_date_sk
+   and store_sales.ss_item_sk = item.i_item_sk
+   and item.i_manufact_id = 816
+   and dt.d_moy=11
+ group by dt.d_year
+      ,item.i_brand
+      ,item.i_brand_id
+ order by dt.d_year
+         ,sum_agg desc
+         ,brand_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query3.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query30.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query30.sql
new file mode 100644 (file)
index 0000000..a1702d1
--- /dev/null
@@ -0,0 +1,31 @@
+-- start query 1 in stream 0 using template query30.tpl and seed 1819994127
+with customer_total_return as
+ (select wr_returning_customer_sk as ctr_customer_sk
+        ,ca_state as ctr_state, 
+       sum(wr_return_amt) as ctr_total_return
+ from web_returns
+     ,date_dim
+     ,customer_address
+ where wr_returned_date_sk = d_date_sk 
+   and d_year =2000
+   and wr_returning_addr_sk = ca_address_sk 
+ group by wr_returning_customer_sk
+         ,ca_state)
+  select  c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag
+       ,c_birth_day,c_birth_month,c_birth_year,c_birth_country,c_login,c_email_address
+       ,c_last_review_date_sk,ctr_total_return
+ from customer_total_return ctr1
+     ,customer_address
+     ,customer
+ where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2
+                         from customer_total_return ctr2 
+                         where ctr1.ctr_state = ctr2.ctr_state)
+       and ca_address_sk = c_current_addr_sk
+       and ca_state = 'GA'
+       and ctr1.ctr_customer_sk = c_customer_sk
+ order by c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag
+                  ,c_birth_day,c_birth_month,c_birth_year,c_birth_country,c_login,c_email_address
+                  ,c_last_review_date_sk,ctr_total_return
+limit 100;
+
+-- end query 1 in stream 0 using template query30.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query31.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query31.sql
new file mode 100644 (file)
index 0000000..1c89b65
--- /dev/null
@@ -0,0 +1,52 @@
+-- start query 1 in stream 0 using template query31.tpl and seed 1819994127
+with ss as
+ (select ca_county,d_qoy, d_year,sum(ss_ext_sales_price) as store_sales
+ from store_sales,date_dim,customer_address
+ where ss_sold_date_sk = d_date_sk
+  and ss_addr_sk=ca_address_sk
+ group by ca_county,d_qoy, d_year),
+ ws as
+ (select ca_county,d_qoy, d_year,sum(ws_ext_sales_price) as web_sales
+ from web_sales,date_dim,customer_address
+ where ws_sold_date_sk = d_date_sk
+  and ws_bill_addr_sk=ca_address_sk
+ group by ca_county,d_qoy, d_year)
+ select 
+        ss1.ca_county
+       ,ss1.d_year
+       ,ws2.web_sales/ws1.web_sales web_q1_q2_increase
+       ,ss2.store_sales/ss1.store_sales store_q1_q2_increase
+       ,ws3.web_sales/ws2.web_sales web_q2_q3_increase
+       ,ss3.store_sales/ss2.store_sales store_q2_q3_increase
+ from
+        ss ss1
+       ,ss ss2
+       ,ss ss3
+       ,ws ws1
+       ,ws ws2
+       ,ws ws3
+ where
+    ss1.d_qoy = 1
+    and ss1.d_year = 1999
+    and ss1.ca_county = ss2.ca_county
+    and ss2.d_qoy = 2
+    and ss2.d_year = 1999
+ and ss2.ca_county = ss3.ca_county
+    and ss3.d_qoy = 3
+    and ss3.d_year = 1999
+    and ss1.ca_county = ws1.ca_county
+    and ws1.d_qoy = 1
+    and ws1.d_year = 1999
+    and ws1.ca_county = ws2.ca_county
+    and ws2.d_qoy = 2
+    and ws2.d_year = 1999
+    and ws1.ca_county = ws3.ca_county
+    and ws3.d_qoy = 3
+    and ws3.d_year =1999
+    and case when ws1.web_sales > 0 then ws2.web_sales/ws1.web_sales else null end 
+       > case when ss1.store_sales > 0 then ss2.store_sales/ss1.store_sales else null end
+    and case when ws2.web_sales > 0 then ws3.web_sales/ws2.web_sales else null end
+       > case when ss2.store_sales > 0 then ss3.store_sales/ss2.store_sales else null end
+ order by ss1.d_year;
+
+-- end query 1 in stream 0 using template query31.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query32.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query32.sql
new file mode 100644 (file)
index 0000000..604557a
--- /dev/null
@@ -0,0 +1,28 @@
+-- start query 1 in stream 0 using template query32.tpl and seed 2031708268
+select  sum(cs_ext_discount_amt)  as "excess discount amount" 
+from 
+   catalog_sales 
+   ,item 
+   ,date_dim
+where
+i_manufact_id = 66
+and i_item_sk = cs_item_sk 
+and d_date between cast('2002-03-29' as date) and 
+        (cast('2002-03-29' as date) + interval '90' day)
+and d_date_sk = cs_sold_date_sk 
+and cs_ext_discount_amt  
+     > ( 
+         select 
+            1.3 * avg(cs_ext_discount_amt) 
+         from 
+            catalog_sales 
+           ,date_dim
+         where 
+              cs_item_sk = i_item_sk 
+          and d_date between cast('2002-03-29' as date) and
+                             (cast('2002-03-29' as date) + interval '90' day)
+          and d_date_sk = cs_sold_date_sk 
+      ) 
+limit 100;
+
+-- end query 1 in stream 0 using template query32.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query33.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query33.sql
new file mode 100644 (file)
index 0000000..d075de4
--- /dev/null
@@ -0,0 +1,75 @@
+-- start query 1 in stream 0 using template query33.tpl and seed 1930872976
+with ss as (
+ select
+          i_manufact_id,sum(ss_ext_sales_price) total_sales
+ from
+       store_sales,
+       date_dim,
+         customer_address,
+         item
+ where
+         i_manufact_id in (select
+  i_manufact_id
+from
+ item
+where i_category in ('Home'))
+ and     ss_item_sk              = i_item_sk
+ and     ss_sold_date_sk         = d_date_sk
+ and     d_year                  = 1998
+ and     d_moy                   = 5
+ and     ss_addr_sk              = ca_address_sk
+ and     ca_gmt_offset           = -6 
+ group by i_manufact_id),
+ cs as (
+ select
+          i_manufact_id,sum(cs_ext_sales_price) total_sales
+ from
+       catalog_sales,
+       date_dim,
+         customer_address,
+         item
+ where
+         i_manufact_id               in (select
+  i_manufact_id
+from
+ item
+where i_category in ('Home'))
+ and     cs_item_sk              = i_item_sk
+ and     cs_sold_date_sk         = d_date_sk
+ and     d_year                  = 1998
+ and     d_moy                   = 5
+ and     cs_bill_addr_sk         = ca_address_sk
+ and     ca_gmt_offset           = -6 
+ group by i_manufact_id),
+ ws as (
+ select
+          i_manufact_id,sum(ws_ext_sales_price) total_sales
+ from
+       web_sales,
+       date_dim,
+         customer_address,
+         item
+ where
+         i_manufact_id               in (select
+  i_manufact_id
+from
+ item
+where i_category in ('Home'))
+ and     ws_item_sk              = i_item_sk
+ and     ws_sold_date_sk         = d_date_sk
+ and     d_year                  = 1998
+ and     d_moy                   = 5
+ and     ws_bill_addr_sk         = ca_address_sk
+ and     ca_gmt_offset           = -6
+ group by i_manufact_id)
+  select  i_manufact_id ,sum(total_sales) total_sales
+ from  (select * from ss 
+        union all
+        select * from cs 
+        union all
+        select * from ws) tmp1
+ group by i_manufact_id
+ order by total_sales
+limit 100;
+
+-- end query 1 in stream 0 using template query33.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query34.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query34.sql
new file mode 100644 (file)
index 0000000..e5ddc4c
--- /dev/null
@@ -0,0 +1,31 @@
+-- start query 1 in stream 0 using template query34.tpl and seed 1971067816
+select c_last_name
+       ,c_first_name
+       ,c_salutation
+       ,c_preferred_cust_flag
+       ,ss_ticket_number
+       ,cnt from
+   (select ss_ticket_number
+          ,ss_customer_sk
+          ,count(*) cnt
+    from store_sales,date_dim,store,household_demographics
+    where store_sales.ss_sold_date_sk = date_dim.d_date_sk
+    and store_sales.ss_store_sk = store.s_store_sk  
+    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
+    and (date_dim.d_dom between 1 and 3 or date_dim.d_dom between 25 and 28)
+    and (household_demographics.hd_buy_potential = '>10000' or
+         household_demographics.hd_buy_potential = 'Unknown')
+    and household_demographics.hd_vehicle_count > 0
+    and (case when household_demographics.hd_vehicle_count > 0 
+       then household_demographics.hd_dep_count/ household_demographics.hd_vehicle_count 
+       else null 
+       end)  > 1.2
+    and date_dim.d_year in (2000,2000+1,2000+2)
+    and store.s_county in ('Salem County','Terrell County','Arthur County','Oglethorpe County',
+                           'Lunenburg County','Perry County','Halifax County','Sumner County')
+    group by ss_ticket_number,ss_customer_sk) dn,customer
+    where ss_customer_sk = c_customer_sk
+      and cnt between 15 and 20
+    order by c_last_name,c_first_name,c_salutation,c_preferred_cust_flag desc, ss_ticket_number;
+
+-- end query 1 in stream 0 using template query34.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query35.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query35.sql
new file mode 100644 (file)
index 0000000..ef7cdf0
--- /dev/null
@@ -0,0 +1,58 @@
+-- start query 1 in stream 0 using template query35.tpl and seed 1930872976
+select   
+  ca_state,
+  cd_gender,
+  cd_marital_status,
+  cd_dep_count,
+  count(*) cnt1,
+  avg(cd_dep_count),
+  min(cd_dep_count),
+  stddev_samp(cd_dep_count),
+  cd_dep_employed_count,
+  count(*) cnt2,
+  avg(cd_dep_employed_count),
+  min(cd_dep_employed_count),
+  stddev_samp(cd_dep_employed_count),
+  cd_dep_college_count,
+  count(*) cnt3,
+  avg(cd_dep_college_count),
+  min(cd_dep_college_count),
+  stddev_samp(cd_dep_college_count)
+ from
+  customer c,customer_address ca,customer_demographics
+ where
+  c.c_current_addr_sk = ca.ca_address_sk and
+  cd_demo_sk = c.c_current_cdemo_sk and 
+  exists (select *
+          from store_sales,date_dim
+          where c.c_customer_sk = ss_customer_sk and
+                ss_sold_date_sk = d_date_sk and
+                d_year = 2001 and
+                d_qoy < 4) and
+   (exists (select *
+            from web_sales,date_dim
+            where c.c_customer_sk = ws_bill_customer_sk and
+                  ws_sold_date_sk = d_date_sk and
+                  d_year = 2001 and
+                  d_qoy < 4) or 
+    exists (select * 
+            from catalog_sales,date_dim
+            where c.c_customer_sk = cs_ship_customer_sk and
+                  cs_sold_date_sk = d_date_sk and
+                  d_year = 2001 and
+                  d_qoy < 4))
+ group by ca_state,
+          cd_gender,
+          cd_marital_status,
+          cd_dep_count,
+          cd_dep_employed_count,
+          cd_dep_college_count
+ order by ca_state,
+          cd_gender,
+          cd_marital_status,
+          cd_dep_count,
+          cd_dep_employed_count,
+          cd_dep_college_count
+ limit 100;
+
+-- end query 1 in stream 0 using template query35.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query36.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query36.sql
new file mode 100644 (file)
index 0000000..8456fc8
--- /dev/null
@@ -0,0 +1,30 @@
+-- start query 1 in stream 0 using template query36.tpl and seed 1544728811
+select  
+    sum(ss_net_profit)/sum(ss_ext_sales_price) as gross_margin
+   ,i_category
+   ,i_class
+   ,grouping(i_category)+grouping(i_class) as lochierarchy
+   ,rank() over (
+       partition by grouping(i_category)+grouping(i_class),
+       case when grouping(i_class) = 0 then i_category end 
+       order by sum(ss_net_profit)/sum(ss_ext_sales_price) asc) as rank_within_parent
+ from
+    store_sales
+   ,date_dim       d1
+   ,item
+   ,store
+ where
+    d1.d_year = 1999 
+ and d1.d_date_sk = ss_sold_date_sk
+ and i_item_sk  = ss_item_sk 
+ and s_store_sk  = ss_store_sk
+ and s_state in ('IN','AL','MI','MN',
+                 'TN','LA','FL','NM')
+ group by rollup(i_category,i_class)
+ order by
+   lochierarchy desc
+  ,case when lochierarchy = 0 then i_category end
+  ,rank_within_parent
+  limit 100;
+
+-- end query 1 in stream 0 using template query36.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query37.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query37.sql
new file mode 100644 (file)
index 0000000..dc799dc
--- /dev/null
@@ -0,0 +1,17 @@
+-- start query 1 in stream 0 using template query37.tpl and seed 301843662
+select  i_item_id
+       ,i_item_desc
+       ,i_current_price
+ from item, inventory, date_dim, catalog_sales
+ where i_current_price between 39 and 39 + 30
+ and inv_item_sk = i_item_sk
+ and d_date_sk=inv_date_sk
+ and d_date between cast('2001-01-16' as date) and (cast('2001-01-16' as date) +  interval '60' day)
+ and i_manufact_id in (765,886,889,728)
+ and inv_quantity_on_hand between 100 and 500
+ and cs_item_sk = i_item_sk
+ group by i_item_id,i_item_desc,i_current_price
+ order by i_item_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query37.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query38.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query38.sql
new file mode 100644 (file)
index 0000000..5570ae2
--- /dev/null
@@ -0,0 +1,23 @@
+-- start query 1 in stream 0 using template query38.tpl and seed 1819994127
+select  count(*) from (
+    select distinct c_last_name, c_first_name, d_date
+    from store_sales, date_dim, customer
+          where store_sales.ss_sold_date_sk = date_dim.d_date_sk
+      and store_sales.ss_customer_sk = customer.c_customer_sk
+      and d_month_seq between 1186 and 1186 + 11
+  intersect
+    select distinct c_last_name, c_first_name, d_date
+    from catalog_sales, date_dim, customer
+          where catalog_sales.cs_sold_date_sk = date_dim.d_date_sk
+      and catalog_sales.cs_bill_customer_sk = customer.c_customer_sk
+      and d_month_seq between 1186 and 1186 + 11
+  intersect
+    select distinct c_last_name, c_first_name, d_date
+    from web_sales, date_dim, customer
+          where web_sales.ws_sold_date_sk = date_dim.d_date_sk
+      and web_sales.ws_bill_customer_sk = customer.c_customer_sk
+      and d_month_seq between 1186 and 1186 + 11
+) hot_cust
+limit 100;
+
+-- end query 1 in stream 0 using template query38.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query39.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query39.sql
new file mode 100644 (file)
index 0000000..9c714fc
--- /dev/null
@@ -0,0 +1,54 @@
+-- start query 1 in stream 0 using template query39.tpl and seed 1327317894
+with inv as
+(select w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy
+       ,stdev,mean, case mean when 0 then null else stdev/mean end cov
+ from(select w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy
+            ,stddev_samp(inv_quantity_on_hand) stdev,avg(inv_quantity_on_hand) mean
+      from inventory
+          ,item
+          ,warehouse
+          ,date_dim
+      where inv_item_sk = i_item_sk
+        and inv_warehouse_sk = w_warehouse_sk
+        and inv_date_sk = d_date_sk
+        and d_year =2000
+      group by w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy) foo
+ where case mean when 0 then 0 else stdev/mean end > 1)
+select inv1.w_warehouse_sk,inv1.i_item_sk,inv1.d_moy,inv1.mean, inv1.cov
+        ,inv2.w_warehouse_sk,inv2.i_item_sk,inv2.d_moy,inv2.mean, inv2.cov
+from inv inv1,inv inv2
+where inv1.i_item_sk = inv2.i_item_sk
+  and inv1.w_warehouse_sk =  inv2.w_warehouse_sk
+  and inv1.d_moy=2
+  and inv2.d_moy=2+1
+order by inv1.w_warehouse_sk,inv1.i_item_sk,inv1.d_moy,inv1.mean,inv1.cov
+        ,inv2.d_moy,inv2.mean, inv2.cov
+;
+with inv as
+(select w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy
+       ,stdev,mean, case mean when 0 then null else stdev/mean end cov
+ from(select w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy
+            ,stddev_samp(inv_quantity_on_hand) stdev,avg(inv_quantity_on_hand) mean
+      from inventory
+          ,item
+          ,warehouse
+          ,date_dim
+      where inv_item_sk = i_item_sk
+        and inv_warehouse_sk = w_warehouse_sk
+        and inv_date_sk = d_date_sk
+        and d_year =2000
+      group by w_warehouse_name,w_warehouse_sk,i_item_sk,d_moy) foo
+ where case mean when 0 then 0 else stdev/mean end > 1)
+select inv1.w_warehouse_sk,inv1.i_item_sk,inv1.d_moy,inv1.mean, inv1.cov
+        ,inv2.w_warehouse_sk,inv2.i_item_sk,inv2.d_moy,inv2.mean, inv2.cov
+from inv inv1,inv inv2
+where inv1.i_item_sk = inv2.i_item_sk
+  and inv1.w_warehouse_sk =  inv2.w_warehouse_sk
+  and inv1.d_moy=2
+  and inv2.d_moy=2+1
+  and inv1.cov > 1.5
+order by inv1.w_warehouse_sk,inv1.i_item_sk,inv1.d_moy,inv1.mean,inv1.cov
+        ,inv2.d_moy,inv2.mean, inv2.cov
+;
+
+-- end query 1 in stream 0 using template query39.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query4.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query4.sql
new file mode 100644 (file)
index 0000000..b4fd65b
--- /dev/null
@@ -0,0 +1,116 @@
+-- start query 1 in stream 0 using template query4.tpl and seed 1819994127
+with year_total as (
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       ,sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2) year_total
+       ,'s' sale_type
+ from customer
+     ,store_sales
+     ,date_dim
+ where c_customer_sk = ss_customer_sk
+   and ss_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year
+ union all
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       ,sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2) ) year_total
+       ,'c' sale_type
+ from customer
+     ,catalog_sales
+     ,date_dim
+ where c_customer_sk = cs_bill_customer_sk
+   and cs_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year
+union all
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       ,sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2) ) year_total
+       ,'w' sale_type
+ from customer
+     ,web_sales
+     ,date_dim
+ where c_customer_sk = ws_bill_customer_sk
+   and ws_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year
+         )
+  select  
+                  t_s_secyear.customer_id
+                 ,t_s_secyear.customer_first_name
+                 ,t_s_secyear.customer_last_name
+                 ,t_s_secyear.customer_birth_country
+ from year_total t_s_firstyear
+     ,year_total t_s_secyear
+     ,year_total t_c_firstyear
+     ,year_total t_c_secyear
+     ,year_total t_w_firstyear
+     ,year_total t_w_secyear
+ where t_s_secyear.customer_id = t_s_firstyear.customer_id
+   and t_s_firstyear.customer_id = t_c_secyear.customer_id
+   and t_s_firstyear.customer_id = t_c_firstyear.customer_id
+   and t_s_firstyear.customer_id = t_w_firstyear.customer_id
+   and t_s_firstyear.customer_id = t_w_secyear.customer_id
+   and t_s_firstyear.sale_type = 's'
+   and t_c_firstyear.sale_type = 'c'
+   and t_w_firstyear.sale_type = 'w'
+   and t_s_secyear.sale_type = 's'
+   and t_c_secyear.sale_type = 'c'
+   and t_w_secyear.sale_type = 'w'
+   and t_s_firstyear.dyear =  1999
+   and t_s_secyear.dyear = 1999+1
+   and t_c_firstyear.dyear =  1999
+   and t_c_secyear.dyear =  1999+1
+   and t_w_firstyear.dyear = 1999
+   and t_w_secyear.dyear = 1999+1
+   and t_s_firstyear.year_total > 0
+   and t_c_firstyear.year_total > 0
+   and t_w_firstyear.year_total > 0
+   and case when t_c_firstyear.year_total > 0 then t_c_secyear.year_total / t_c_firstyear.year_total else null end
+           > case when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / t_s_firstyear.year_total else null end
+   and case when t_c_firstyear.year_total > 0 then t_c_secyear.year_total / t_c_firstyear.year_total else null end
+           > case when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / t_w_firstyear.year_total else null end
+ order by t_s_secyear.customer_id
+         ,t_s_secyear.customer_first_name
+         ,t_s_secyear.customer_last_name
+         ,t_s_secyear.customer_birth_country
+limit 100;
+
+-- end query 1 in stream 0 using template query4.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query40.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query40.sql
new file mode 100644 (file)
index 0000000..f5e72e5
--- /dev/null
@@ -0,0 +1,28 @@
+-- start query 1 in stream 0 using template query40.tpl and seed 1819994127
+select  
+   w_state
+  ,i_item_id
+  ,sum(case when (cast(d_date as date) < cast ('2000-03-18' as date)) 
+               then cs_sales_price - coalesce(cr_refunded_cash,0) else 0 end) as sales_before
+  ,sum(case when (cast(d_date as date) >= cast ('2000-03-18' as date)) 
+               then cs_sales_price - coalesce(cr_refunded_cash,0) else 0 end) as sales_after
+ from
+   catalog_sales left outer join catalog_returns on
+       (cs_order_number = cr_order_number 
+        and cs_item_sk = cr_item_sk)
+  ,warehouse 
+  ,item
+  ,date_dim
+ where
+     i_current_price between 0.99 and 1.49
+ and i_item_sk          = cs_item_sk
+ and cs_warehouse_sk    = w_warehouse_sk 
+ and cs_sold_date_sk    = d_date_sk
+ and d_date between (cast ('2000-03-18' as date) - interval '30' day)
+                and (cast ('2000-03-18' as date) + interval '30' day) 
+ group by
+    w_state,i_item_id
+ order by w_state,i_item_id
+limit 100;
+
+-- end query 1 in stream 0 using template query40.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query41.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query41.sql
new file mode 100644 (file)
index 0000000..6eb01d5
--- /dev/null
@@ -0,0 +1,52 @@
+-- start query 1 in stream 0 using template query41.tpl and seed 1581015815
+select  distinct(i_product_name)
+ from item i1
+ where i_manufact_id between 970 and 970+40 
+   and (select count(*) as item_cnt
+        from item
+        where (i_manufact = i1.i_manufact and
+        ((i_category = 'Women' and 
+        (i_color = 'frosted' or i_color = 'rose') and 
+        (i_units = 'Lb' or i_units = 'Gross') and
+        (i_size = 'medium' or i_size = 'large')
+        ) or
+        (i_category = 'Women' and
+        (i_color = 'chocolate' or i_color = 'black') and
+        (i_units = 'Box' or i_units = 'Dram') and
+        (i_size = 'economy' or i_size = 'petite')
+        ) or
+        (i_category = 'Men' and
+        (i_color = 'slate' or i_color = 'magenta') and
+        (i_units = 'Carton' or i_units = 'Bundle') and
+        (i_size = 'N/A' or i_size = 'small')
+        ) or
+        (i_category = 'Men' and
+        (i_color = 'cornflower' or i_color = 'firebrick') and
+        (i_units = 'Pound' or i_units = 'Oz') and
+        (i_size = 'medium' or i_size = 'large')
+        ))) or
+       (i_manufact = i1.i_manufact and
+        ((i_category = 'Women' and 
+        (i_color = 'almond' or i_color = 'steel') and 
+        (i_units = 'Tsp' or i_units = 'Case') and
+        (i_size = 'medium' or i_size = 'large')
+        ) or
+        (i_category = 'Women' and
+        (i_color = 'purple' or i_color = 'aquamarine') and
+        (i_units = 'Bunch' or i_units = 'Gram') and
+        (i_size = 'economy' or i_size = 'petite')
+        ) or
+        (i_category = 'Men' and
+        (i_color = 'lavender' or i_color = 'papaya') and
+        (i_units = 'Pallet' or i_units = 'Cup') and
+        (i_size = 'N/A' or i_size = 'small')
+        ) or
+        (i_category = 'Men' and
+        (i_color = 'maroon' or i_color = 'cyan') and
+        (i_units = 'Each' or i_units = 'N/A') and
+        (i_size = 'medium' or i_size = 'large')
+        )))) > 0
+ order by i_product_name
+ limit 100;
+
+-- end query 1 in stream 0 using template query41.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query42.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query42.sql
new file mode 100644 (file)
index 0000000..bbc0532
--- /dev/null
@@ -0,0 +1,22 @@
+-- start query 1 in stream 0 using template query42.tpl and seed 1819994127
+select  dt.d_year
+       ,item.i_category_id
+       ,item.i_category
+       ,sum(ss_ext_sales_price)
+ from  date_dim dt
+       ,store_sales
+       ,item
+ where dt.d_date_sk = store_sales.ss_sold_date_sk
+       and store_sales.ss_item_sk = item.i_item_sk
+       and item.i_manager_id = 1       
+       and dt.d_moy=12
+       and dt.d_year=1998
+ group by      dt.d_year
+               ,item.i_category_id
+               ,item.i_category
+ order by       sum(ss_ext_sales_price) desc,dt.d_year
+               ,item.i_category_id
+               ,item.i_category
+limit 100 ;
+
+-- end query 1 in stream 0 using template query42.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query43.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query43.sql
new file mode 100644 (file)
index 0000000..89843d1
--- /dev/null
@@ -0,0 +1,19 @@
+-- start query 1 in stream 0 using template query43.tpl and seed 1819994127
+select  s_store_name, s_store_id,
+        sum(case when (d_day_name='Sunday') then ss_sales_price else null end) sun_sales,
+        sum(case when (d_day_name='Monday') then ss_sales_price else null end) mon_sales,
+        sum(case when (d_day_name='Tuesday') then ss_sales_price else  null end) tue_sales,
+        sum(case when (d_day_name='Wednesday') then ss_sales_price else null end) wed_sales,
+        sum(case when (d_day_name='Thursday') then ss_sales_price else null end) thu_sales,
+        sum(case when (d_day_name='Friday') then ss_sales_price else null end) fri_sales,
+        sum(case when (d_day_name='Saturday') then ss_sales_price else null end) sat_sales
+ from date_dim, store_sales, store
+ where d_date_sk = ss_sold_date_sk and
+       s_store_sk = ss_store_sk and
+       s_gmt_offset = -6 and
+       d_year = 2001 
+ group by s_store_name, s_store_id
+ order by s_store_name, s_store_id,sun_sales,mon_sales,tue_sales,wed_sales,thu_sales,fri_sales,sat_sales
+ limit 100;
+
+-- end query 1 in stream 0 using template query43.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query44.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query44.sql
new file mode 100644 (file)
index 0000000..92d5e02
--- /dev/null
@@ -0,0 +1,35 @@
+-- start query 1 in stream 0 using template query44.tpl and seed 1819994127
+select  asceding.rnk, i1.i_product_name best_performing, i2.i_product_name worst_performing
+from(select *
+     from (select item_sk,rank() over (order by rank_col asc) rnk
+           from (select ss_item_sk item_sk,avg(ss_net_profit) rank_col 
+                 from store_sales ss1
+                 where ss_store_sk = 366
+                 group by ss_item_sk
+                 having avg(ss_net_profit) > 0.9*(select avg(ss_net_profit) rank_col
+                                                  from store_sales
+                                                  where ss_store_sk = 366
+                                                    and ss_cdemo_sk is null
+                                                  group by ss_store_sk))V1)V11
+     where rnk  < 11) asceding,
+    (select *
+     from (select item_sk,rank() over (order by rank_col desc) rnk
+           from (select ss_item_sk item_sk,avg(ss_net_profit) rank_col
+                 from store_sales ss1
+                 where ss_store_sk = 366
+                 group by ss_item_sk
+                 having avg(ss_net_profit) > 0.9*(select avg(ss_net_profit) rank_col
+                                                  from store_sales
+                                                  where ss_store_sk = 366
+                                                    and ss_cdemo_sk is null
+                                                  group by ss_store_sk))V2)V21
+     where rnk  < 11) descending,
+item i1,
+item i2
+where asceding.rnk = descending.rnk 
+  and i1.i_item_sk=asceding.item_sk
+  and i2.i_item_sk=descending.item_sk
+order by asceding.rnk
+limit 100;
+
+-- end query 1 in stream 0 using template query44.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query45.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query45.sql
new file mode 100644 (file)
index 0000000..16d5068
--- /dev/null
@@ -0,0 +1,20 @@
+-- start query 1 in stream 0 using template query45.tpl and seed 2031708268
+select  ca_zip, ca_county, sum(ws_sales_price)
+ from web_sales, customer, customer_address, date_dim, item
+ where ws_bill_customer_sk = c_customer_sk
+       and c_current_addr_sk = ca_address_sk 
+       and ws_item_sk = i_item_sk 
+       and ( substr(ca_zip,1,5) in ('85669', '86197','88274','83405','86475', '85392', '85460', '80348', '81792')
+             or 
+             i_item_id in (select i_item_id
+                             from item
+                             where i_item_sk in (2, 3, 5, 7, 11, 13, 17, 19, 23, 29)
+                             )
+           )
+       and ws_sold_date_sk = d_date_sk
+       and d_qoy = 1 and d_year = 1998
+ group by ca_zip, ca_county
+ order by ca_zip, ca_county
+ limit 100;
+
+-- end query 1 in stream 0 using template query45.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query46.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query46.sql
new file mode 100644 (file)
index 0000000..1adf55d
--- /dev/null
@@ -0,0 +1,35 @@
+-- start query 1 in stream 0 using template query46.tpl and seed 803547492
+select  c_last_name
+       ,c_first_name
+       ,ca_city
+       ,bought_city
+       ,ss_ticket_number
+       ,amt,profit 
+ from
+   (select ss_ticket_number
+          ,ss_customer_sk
+          ,ca_city bought_city
+          ,sum(ss_coupon_amt) amt
+          ,sum(ss_net_profit) profit
+    from store_sales,date_dim,store,household_demographics,customer_address 
+    where store_sales.ss_sold_date_sk = date_dim.d_date_sk
+    and store_sales.ss_store_sk = store.s_store_sk  
+    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
+    and store_sales.ss_addr_sk = customer_address.ca_address_sk
+    and (household_demographics.hd_dep_count = 0 or
+         household_demographics.hd_vehicle_count= 1)
+    and date_dim.d_dow in (6,0)
+    and date_dim.d_year in (2000,2000+1,2000+2) 
+    and store.s_city in ('Five Forks','Oakland','Fairview','Winchester','Farmington') 
+    group by ss_ticket_number,ss_customer_sk,ss_addr_sk,ca_city) dn,customer,customer_address current_addr
+    where ss_customer_sk = c_customer_sk
+      and customer.c_current_addr_sk = current_addr.ca_address_sk
+      and current_addr.ca_city <> bought_city
+  order by c_last_name
+          ,c_first_name
+          ,ca_city
+          ,bought_city
+          ,ss_ticket_number
+  limit 100;
+
+-- end query 1 in stream 0 using template query46.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query47.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query47.sql
new file mode 100644 (file)
index 0000000..8a1437a
--- /dev/null
@@ -0,0 +1,51 @@
+-- start query 1 in stream 0 using template query47.tpl and seed 2031708268
+with v1 as(
+ select i_category, i_brand,
+        s_store_name, s_company_name,
+        d_year, d_moy,
+        sum(ss_sales_price) sum_sales,
+        avg(sum(ss_sales_price)) over
+          (partition by i_category, i_brand,
+                     s_store_name, s_company_name, d_year)
+          avg_monthly_sales,
+        rank() over
+          (partition by i_category, i_brand,
+                     s_store_name, s_company_name
+           order by d_year, d_moy) rn
+ from item, store_sales, date_dim, store
+ where ss_item_sk = i_item_sk and
+       ss_sold_date_sk = d_date_sk and
+       ss_store_sk = s_store_sk and
+       (
+         d_year = 1999 or
+         ( d_year = 1999-1 and d_moy =12) or
+         ( d_year = 1999+1 and d_moy =1)
+       )
+ group by i_category, i_brand,
+          s_store_name, s_company_name,
+          d_year, d_moy),
+ v2 as(
+ select v1.s_store_name
+        ,v1.d_year, v1.d_moy
+        ,v1.avg_monthly_sales
+        ,v1.sum_sales, v1_lag.sum_sales psum, v1_lead.sum_sales nsum
+ from v1, v1 v1_lag, v1 v1_lead
+ where v1.i_category = v1_lag.i_category and
+       v1.i_category = v1_lead.i_category and
+       v1.i_brand = v1_lag.i_brand and
+       v1.i_brand = v1_lead.i_brand and
+       v1.s_store_name = v1_lag.s_store_name and
+       v1.s_store_name = v1_lead.s_store_name and
+       v1.s_company_name = v1_lag.s_company_name and
+       v1.s_company_name = v1_lead.s_company_name and
+       v1.rn = v1_lag.rn + 1 and
+       v1.rn = v1_lead.rn - 1)
+  select  *
+ from v2
+ where  d_year = 1999 and    
+        avg_monthly_sales > 0 and
+        case when avg_monthly_sales > 0 then abs(sum_sales - avg_monthly_sales) / avg_monthly_sales else null end > 0.1
+ order by sum_sales - avg_monthly_sales, sum_sales
+ limit 100;
+
+-- end query 1 in stream 0 using template query47.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query48.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query48.sql
new file mode 100644 (file)
index 0000000..da87862
--- /dev/null
@@ -0,0 +1,67 @@
+-- start query 1 in stream 0 using template query48.tpl and seed 622697896
+select sum (ss_quantity)
+ from store_sales, store, customer_demographics, customer_address, date_dim
+ where s_store_sk = ss_store_sk
+ and  ss_sold_date_sk = d_date_sk and d_year = 1998
+ and  
+ (
+  (
+   cd_demo_sk = ss_cdemo_sk
+   and 
+   cd_marital_status = 'M'
+   and 
+   cd_education_status = 'Unknown'
+   and 
+   ss_sales_price between 100.00 and 150.00  
+   )
+ or
+  (
+  cd_demo_sk = ss_cdemo_sk
+   and 
+   cd_marital_status = 'W'
+   and 
+   cd_education_status = 'College'
+   and 
+   ss_sales_price between 50.00 and 100.00   
+  )
+ or 
+ (
+  cd_demo_sk = ss_cdemo_sk
+  and 
+   cd_marital_status = 'D'
+   and 
+   cd_education_status = 'Primary'
+   and 
+   ss_sales_price between 150.00 and 200.00  
+ )
+ )
+ and
+ (
+  (
+  ss_addr_sk = ca_address_sk
+  and
+  ca_country = 'United States'
+  and
+  ca_state in ('MI', 'GA', 'NH')
+  and ss_net_profit between 0 and 2000  
+  )
+ or
+  (ss_addr_sk = ca_address_sk
+  and
+  ca_country = 'United States'
+  and
+  ca_state in ('TX', 'KY', 'SD')
+  and ss_net_profit between 150 and 3000 
+  )
+ or
+  (ss_addr_sk = ca_address_sk
+  and
+  ca_country = 'United States'
+  and
+  ca_state in ('NY', 'OH', 'FL')
+  and ss_net_profit between 50 and 25000 
+  )
+ )
+;
+
+-- end query 1 in stream 0 using template query48.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query49.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query49.sql
new file mode 100644 (file)
index 0000000..ac029bd
--- /dev/null
@@ -0,0 +1,129 @@
+-- start query 1 in stream 0 using template query49.tpl and seed 1819994127
+select  channel, item, return_ratio, return_rank, currency_rank from
+ (select
+ 'web' as channel
+ ,web.item as item
+ ,web.return_ratio as return_ratio
+ ,web.return_rank as return_rank
+ ,web.currency_rank as currency_rank
+ from (
+       select 
+        item
+       ,return_ratio
+       ,currency_ratio
+       ,rank() over (order by return_ratio) as return_rank
+       ,rank() over (order by currency_ratio) as currency_rank
+       from
+       (       select ws.ws_item_sk as item
+               ,(cast(sum(coalesce(wr.wr_return_quantity,0)) as decimal(15,4))/
+               cast(sum(coalesce(ws.ws_quantity,0)) as decimal(15,4) )) as return_ratio
+               ,(cast(sum(coalesce(wr.wr_return_amt,0)) as decimal(15,4))/
+               cast(sum(coalesce(ws.ws_net_paid,0)) as decimal(15,4) )) as currency_ratio
+               from 
+                web_sales ws left outer join web_returns wr 
+                       on (ws.ws_order_number = wr.wr_order_number and 
+                       ws.ws_item_sk = wr.wr_item_sk)
+                 ,date_dim
+               where 
+                       wr.wr_return_amt > 10000 
+                       and ws.ws_net_profit > 1
+                         and ws.ws_net_paid > 0
+                         and ws.ws_quantity > 0
+                         and ws_sold_date_sk = d_date_sk
+                         and d_year = 2000
+                         and d_moy = 12
+               group by ws.ws_item_sk
+       ) in_web
+ ) web
+ where 
+ (
+ web.return_rank <= 10
+ or
+ web.currency_rank <= 10
+ )
+ union
+ select 
+ 'catalog' as channel
+ ,catalog.item as item
+ ,catalog.return_ratio as return_ratio
+ ,catalog.return_rank as return_rank
+ ,catalog.currency_rank as currency_rank
+ from (
+       select 
+        item
+       ,return_ratio
+       ,currency_ratio
+       ,rank() over (order by return_ratio) as return_rank
+       ,rank() over (order by currency_ratio) as currency_rank
+       from
+       (       select 
+               cs.cs_item_sk as item
+               ,(cast(sum(coalesce(cr.cr_return_quantity,0)) as decimal(15,4))/
+               cast(sum(coalesce(cs.cs_quantity,0)) as decimal(15,4) )) as return_ratio
+               ,(cast(sum(coalesce(cr.cr_return_amount,0)) as decimal(15,4))/
+               cast(sum(coalesce(cs.cs_net_paid,0)) as decimal(15,4) )) as currency_ratio
+               from 
+               catalog_sales cs left outer join catalog_returns cr
+                       on (cs.cs_order_number = cr.cr_order_number and 
+                       cs.cs_item_sk = cr.cr_item_sk)
+                ,date_dim
+               where 
+                       cr.cr_return_amount > 10000 
+                       and cs.cs_net_profit > 1
+                         and cs.cs_net_paid > 0
+                         and cs.cs_quantity > 0
+                         and cs_sold_date_sk = d_date_sk
+                         and d_year = 2000
+                         and d_moy = 12
+                 group by cs.cs_item_sk
+       ) in_cat
+ ) catalog
+ where 
+ (
+ catalog.return_rank <= 10
+ or
+ catalog.currency_rank <=10
+ )
+ union
+ select 
+ 'store' as channel
+ ,store.item as item
+ ,store.return_ratio as return_ratio
+ ,store.return_rank as return_rank
+ ,store.currency_rank as currency_rank
+ from (
+       select 
+        item
+       ,return_ratio
+       ,currency_ratio
+       ,rank() over (order by return_ratio) as return_rank
+       ,rank() over (order by currency_ratio) as currency_rank
+       from
+       (       select sts.ss_item_sk as item
+               ,(cast(sum(coalesce(sr.sr_return_quantity,0)) as decimal(15,4))/cast(sum(coalesce(sts.ss_quantity,0)) as decimal(15,4) )) as return_ratio
+               ,(cast(sum(coalesce(sr.sr_return_amt,0)) as decimal(15,4))/cast(sum(coalesce(sts.ss_net_paid,0)) as decimal(15,4) )) as currency_ratio
+               from 
+               store_sales sts left outer join store_returns sr
+                       on (sts.ss_ticket_number = sr.sr_ticket_number and sts.ss_item_sk = sr.sr_item_sk)
+                ,date_dim
+               where 
+                       sr.sr_return_amt > 10000 
+                       and sts.ss_net_profit > 1
+                         and sts.ss_net_paid > 0 
+                         and sts.ss_quantity > 0
+                         and ss_sold_date_sk = d_date_sk
+                         and d_year = 2000
+                         and d_moy = 12
+               group by sts.ss_item_sk
+       ) in_store
+ ) store
+ where  (
+ store.return_rank <= 10
+ or 
+ store.currency_rank <= 10
+ )
+ ) y
+ order by 1,4,5,2
+ limit 100;
+
+-- end query 1 in stream 0 using template query49.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query5.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query5.sql
new file mode 100644 (file)
index 0000000..3400b67
--- /dev/null
@@ -0,0 +1,128 @@
+-- start query 1 in stream 0 using template query5.tpl and seed 1819994127
+with ssr as
+ (select s_store_id,
+        sum(sales_price) as sales,
+        sum(profit) as profit,
+        sum(return_amt) as returns,
+        sum(net_loss) as profit_loss
+ from
+  ( select  ss_store_sk as store_sk,
+            ss_sold_date_sk  as date_sk,
+            ss_ext_sales_price as sales_price,
+            ss_net_profit as profit,
+            cast(0 as decimal(7,2)) as return_amt,
+            cast(0 as decimal(7,2)) as net_loss
+    from store_sales
+    union all
+    select sr_store_sk as store_sk,
+           sr_returned_date_sk as date_sk,
+           cast(0 as decimal(7,2)) as sales_price,
+           cast(0 as decimal(7,2)) as profit,
+           sr_return_amt as return_amt,
+           sr_net_loss as net_loss
+    from store_returns
+   ) salesreturns,
+     date_dim,
+     store
+ where date_sk = d_date_sk
+       and d_date between cast('2000-08-19' as date) 
+                  and (cast('2000-08-19' as date) +  interval '14' day)
+       and store_sk = s_store_sk
+ group by s_store_id)
+ ,
+ csr as
+ (select cp_catalog_page_id,
+        sum(sales_price) as sales,
+        sum(profit) as profit,
+        sum(return_amt) as returns,
+        sum(net_loss) as profit_loss
+ from
+  ( select  cs_catalog_page_sk as page_sk,
+            cs_sold_date_sk  as date_sk,
+            cs_ext_sales_price as sales_price,
+            cs_net_profit as profit,
+            cast(0 as decimal(7,2)) as return_amt,
+            cast(0 as decimal(7,2)) as net_loss
+    from catalog_sales
+    union all
+    select cr_catalog_page_sk as page_sk,
+           cr_returned_date_sk as date_sk,
+           cast(0 as decimal(7,2)) as sales_price,
+           cast(0 as decimal(7,2)) as profit,
+           cr_return_amount as return_amt,
+           cr_net_loss as net_loss
+    from catalog_returns
+   ) salesreturns,
+     date_dim,
+     catalog_page
+ where date_sk = d_date_sk
+       and d_date between cast('2000-08-19' as date)
+                  and (cast('2000-08-19' as date) +  interval '14' day)
+       and page_sk = cp_catalog_page_sk
+ group by cp_catalog_page_id)
+ ,
+ wsr as
+ (select web_site_id,
+        sum(sales_price) as sales,
+        sum(profit) as profit,
+        sum(return_amt) as returns,
+        sum(net_loss) as profit_loss
+ from
+  ( select  ws_web_site_sk as wsr_web_site_sk,
+            ws_sold_date_sk  as date_sk,
+            ws_ext_sales_price as sales_price,
+            ws_net_profit as profit,
+            cast(0 as decimal(7,2)) as return_amt,
+            cast(0 as decimal(7,2)) as net_loss
+    from web_sales
+    union all
+    select ws_web_site_sk as wsr_web_site_sk,
+           wr_returned_date_sk as date_sk,
+           cast(0 as decimal(7,2)) as sales_price,
+           cast(0 as decimal(7,2)) as profit,
+           wr_return_amt as return_amt,
+           wr_net_loss as net_loss
+    from web_returns left outer join web_sales on
+         ( wr_item_sk = ws_item_sk
+           and wr_order_number = ws_order_number)
+   ) salesreturns,
+     date_dim,
+     web_site
+ where date_sk = d_date_sk
+       and d_date between cast('2000-08-19' as date)
+                  and (cast('2000-08-19' as date) +  interval '14' day)
+       and wsr_web_site_sk = web_site_sk
+ group by web_site_id)
+  select  channel
+        , id
+        , sum(sales) as sales
+        , sum(returns) as returns
+        , sum(profit) as profit
+ from 
+ (select 'store channel' as channel
+        , 'store' || s_store_id as id
+        , sales
+        , returns
+        , (profit - profit_loss) as profit
+ from   ssr
+ union all
+ select 'catalog channel' as channel
+        , 'catalog_page' || cp_catalog_page_id as id
+        , sales
+        , returns
+        , (profit - profit_loss) as profit
+ from  csr
+ union all
+ select 'web channel' as channel
+        , 'web_site' || web_site_id as id
+        , sales
+        , returns
+        , (profit - profit_loss) as profit
+ from   wsr
+ ) x
+ group by rollup (channel, id)
+ order by channel
+         ,id
+ limit 100;
+
+-- end query 1 in stream 0 using template query5.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query50.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query50.sql
new file mode 100644 (file)
index 0000000..206432b
--- /dev/null
@@ -0,0 +1,59 @@
+-- start query 1 in stream 0 using template query50.tpl and seed 1819994127
+select  
+   s_store_name
+  ,s_company_id
+  ,s_street_number
+  ,s_street_name
+  ,s_street_type
+  ,s_suite_number
+  ,s_city
+  ,s_county
+  ,s_state
+  ,s_zip
+  ,sum(case when (sr_returned_date_sk - ss_sold_date_sk <= 30 ) then 1 else 0 end)  as "30 days" 
+  ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 30) and 
+                 (sr_returned_date_sk - ss_sold_date_sk <= 60) then 1 else 0 end )  as "31-60 days" 
+  ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 60) and 
+                 (sr_returned_date_sk - ss_sold_date_sk <= 90) then 1 else 0 end)  as "61-90 days" 
+  ,sum(case when (sr_returned_date_sk - ss_sold_date_sk > 90) and
+                 (sr_returned_date_sk - ss_sold_date_sk <= 120) then 1 else 0 end)  as "91-120 days" 
+  ,sum(case when (sr_returned_date_sk - ss_sold_date_sk  > 120) then 1 else 0 end)  as ">120 days" 
+from
+   store_sales
+  ,store_returns
+  ,store
+  ,date_dim d1
+  ,date_dim d2
+where
+    d2.d_year = 1998
+and d2.d_moy  = 9
+and ss_ticket_number = sr_ticket_number
+and ss_item_sk = sr_item_sk
+and ss_sold_date_sk   = d1.d_date_sk
+and sr_returned_date_sk   = d2.d_date_sk
+and ss_customer_sk = sr_customer_sk
+and ss_store_sk = s_store_sk
+group by
+   s_store_name
+  ,s_company_id
+  ,s_street_number
+  ,s_street_name
+  ,s_street_type
+  ,s_suite_number
+  ,s_city
+  ,s_county
+  ,s_state
+  ,s_zip
+order by s_store_name
+        ,s_company_id
+        ,s_street_number
+        ,s_street_name
+        ,s_street_type
+        ,s_suite_number
+        ,s_city
+        ,s_county
+        ,s_state
+        ,s_zip
+limit 100;
+
+-- end query 1 in stream 0 using template query50.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query51.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query51.sql
new file mode 100644 (file)
index 0000000..dbf9807
--- /dev/null
@@ -0,0 +1,45 @@
+-- start query 1 in stream 0 using template query51.tpl and seed 1819994127
+WITH web_v1 as (
+select
+  ws_item_sk item_sk, d_date,
+  sum(sum(ws_sales_price))
+      over (partition by ws_item_sk order by d_date rows between unbounded preceding and current row) cume_sales
+from web_sales
+    ,date_dim
+where ws_sold_date_sk=d_date_sk
+  and d_month_seq between 1214 and 1214+11
+  and ws_item_sk is not NULL
+group by ws_item_sk, d_date),
+store_v1 as (
+select
+  ss_item_sk item_sk, d_date,
+  sum(sum(ss_sales_price))
+      over (partition by ss_item_sk order by d_date rows between unbounded preceding and current row) cume_sales
+from store_sales
+    ,date_dim
+where ss_sold_date_sk=d_date_sk
+  and d_month_seq between 1214 and 1214+11
+  and ss_item_sk is not NULL
+group by ss_item_sk, d_date)
+ select  *
+from (select item_sk
+     ,d_date
+     ,web_sales
+     ,store_sales
+     ,max(web_sales)
+         over (partition by item_sk order by d_date rows between unbounded preceding and current row) web_cumulative
+     ,max(store_sales)
+         over (partition by item_sk order by d_date rows between unbounded preceding and current row) store_cumulative
+     from (select case when web.item_sk is not null then web.item_sk else store.item_sk end item_sk
+                 ,case when web.d_date is not null then web.d_date else store.d_date end d_date
+                 ,web.cume_sales web_sales
+                 ,store.cume_sales store_sales
+           from web_v1 web full outer join store_v1 store on (web.item_sk = store.item_sk
+                                                          and web.d_date = store.d_date)
+          )x )y
+where web_cumulative > store_cumulative
+order by item_sk
+        ,d_date
+limit 100;
+
+-- end query 1 in stream 0 using template query51.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query52.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query52.sql
new file mode 100644 (file)
index 0000000..316e40e
--- /dev/null
@@ -0,0 +1,22 @@
+-- start query 1 in stream 0 using template query52.tpl and seed 1819994127
+select  dt.d_year
+       ,item.i_brand_id brand_id
+       ,item.i_brand brand
+       ,sum(ss_ext_sales_price) ext_price
+ from date_dim dt
+     ,store_sales
+     ,item
+ where dt.d_date_sk = store_sales.ss_sold_date_sk
+    and store_sales.ss_item_sk = item.i_item_sk
+    and item.i_manager_id = 1
+    and dt.d_moy=12
+    and dt.d_year=2000
+ group by dt.d_year
+       ,item.i_brand
+       ,item.i_brand_id
+ order by dt.d_year
+       ,ext_price desc
+       ,brand_id
+limit 100 ;
+
+-- end query 1 in stream 0 using template query52.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query53.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query53.sql
new file mode 100644 (file)
index 0000000..ab08dbd
--- /dev/null
@@ -0,0 +1,28 @@
+-- start query 1 in stream 0 using template query53.tpl and seed 1819994127
+select  * from 
+(select i_manufact_id,
+sum(ss_sales_price) sum_sales,
+avg(sum(ss_sales_price)) over (partition by i_manufact_id) avg_quarterly_sales
+from item, store_sales, date_dim, store
+where ss_item_sk = i_item_sk and
+ss_sold_date_sk = d_date_sk and
+ss_store_sk = s_store_sk and
+d_month_seq in (1212,1212+1,1212+2,1212+3,1212+4,1212+5,1212+6,1212+7,1212+8,1212+9,1212+10,1212+11) and
+((i_category in ('Books','Children','Electronics') and
+i_class in ('personal','portable','reference','self-help') and
+i_brand in ('scholaramalgamalg #14','scholaramalgamalg #7',
+               'exportiunivamalg #9','scholaramalgamalg #9'))
+or(i_category in ('Women','Music','Men') and
+i_class in ('accessories','classical','fragrances','pants') and
+i_brand in ('amalgimporto #1','edu packscholar #1','exportiimporto #1',
+               'importoamalg #1')))
+group by i_manufact_id, d_qoy ) tmp1
+where case when avg_quarterly_sales > 0 
+       then abs (sum_sales - avg_quarterly_sales)/ avg_quarterly_sales 
+       else null end > 0.1
+order by avg_quarterly_sales,
+        sum_sales,
+        i_manufact_id
+limit 100;
+
+-- end query 1 in stream 0 using template query53.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query54.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query54.sql
new file mode 100644 (file)
index 0000000..453c511
--- /dev/null
@@ -0,0 +1,56 @@
+-- start query 1 in stream 0 using template query54.tpl and seed 1930872976
+with my_customers as (
+ select distinct c_customer_sk
+        , c_current_addr_sk
+ from   
+        ( select cs_sold_date_sk sold_date_sk,
+                 cs_bill_customer_sk customer_sk,
+                 cs_item_sk item_sk
+          from   catalog_sales
+          union all
+          select ws_sold_date_sk sold_date_sk,
+                 ws_bill_customer_sk customer_sk,
+                 ws_item_sk item_sk
+          from   web_sales
+         ) cs_or_ws_sales,
+         item,
+         date_dim,
+         customer
+ where   sold_date_sk = d_date_sk
+         and item_sk = i_item_sk
+         and i_category = 'Books'
+         and i_class = 'business'
+         and c_customer_sk = cs_or_ws_sales.customer_sk
+         and d_moy = 2
+         and d_year = 2000
+ )
+ , my_revenue as (
+ select c_customer_sk,
+        sum(ss_ext_sales_price) as revenue
+ from   my_customers,
+        store_sales,
+        customer_address,
+        store,
+        date_dim
+ where  c_current_addr_sk = ca_address_sk
+        and ca_county = s_county
+        and ca_state = s_state
+        and ss_sold_date_sk = d_date_sk
+        and c_customer_sk = ss_customer_sk
+        and d_month_seq between (select distinct d_month_seq+1
+                                 from   date_dim where d_year = 2000 and d_moy = 2)
+                           and  (select distinct d_month_seq+3
+                                 from   date_dim where d_year = 2000 and d_moy = 2)
+ group by c_customer_sk
+ )
+ , segments as
+ (select cast((revenue/50) as int) as segment
+  from   my_revenue
+ )
+  select  segment, count(*) as num_customers, segment*50 as segment_base
+ from segments
+ group by segment
+ order by segment, num_customers
+ limit 100;
+
+-- end query 1 in stream 0 using template query54.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query55.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query55.sql
new file mode 100644 (file)
index 0000000..09f2b7c
--- /dev/null
@@ -0,0 +1,14 @@
+-- start query 1 in stream 0 using template query55.tpl and seed 2031708268
+select  i_brand_id brand_id, i_brand brand,
+       sum(ss_ext_sales_price) ext_price
+ from date_dim, store_sales, item
+ where d_date_sk = ss_sold_date_sk
+       and ss_item_sk = i_item_sk
+       and i_manager_id=13
+       and d_moy=11
+       and d_year=1999
+ group by i_brand, i_brand_id
+ order by ext_price desc, i_brand_id
+limit 100 ;
+
+-- end query 1 in stream 0 using template query55.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query56.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query56.sql
new file mode 100644 (file)
index 0000000..a0e245c
--- /dev/null
@@ -0,0 +1,69 @@
+-- start query 1 in stream 0 using template query56.tpl and seed 1951559352
+with ss as (
+ select i_item_id,sum(ss_ext_sales_price) total_sales
+ from
+       store_sales,
+       date_dim,
+         customer_address,
+         item
+ where i_item_id in (select
+     i_item_id
+from item
+where i_color in ('chiffon','smoke','lace'))
+ and     ss_item_sk              = i_item_sk
+ and     ss_sold_date_sk         = d_date_sk
+ and     d_year                  = 2001
+ and     d_moy                   = 5
+ and     ss_addr_sk              = ca_address_sk
+ and     ca_gmt_offset           = -6 
+ group by i_item_id),
+ cs as (
+ select i_item_id,sum(cs_ext_sales_price) total_sales
+ from
+       catalog_sales,
+       date_dim,
+         customer_address,
+         item
+ where
+         i_item_id               in (select
+  i_item_id
+from item
+where i_color in ('chiffon','smoke','lace'))
+ and     cs_item_sk              = i_item_sk
+ and     cs_sold_date_sk         = d_date_sk
+ and     d_year                  = 2001
+ and     d_moy                   = 5
+ and     cs_bill_addr_sk         = ca_address_sk
+ and     ca_gmt_offset           = -6 
+ group by i_item_id),
+ ws as (
+ select i_item_id,sum(ws_ext_sales_price) total_sales
+ from
+       web_sales,
+       date_dim,
+         customer_address,
+         item
+ where
+         i_item_id               in (select
+  i_item_id
+from item
+where i_color in ('chiffon','smoke','lace'))
+ and     ws_item_sk              = i_item_sk
+ and     ws_sold_date_sk         = d_date_sk
+ and     d_year                  = 2001
+ and     d_moy                   = 5
+ and     ws_bill_addr_sk         = ca_address_sk
+ and     ca_gmt_offset           = -6
+ group by i_item_id)
+  select  i_item_id ,sum(total_sales) total_sales
+ from  (select * from ss 
+        union all
+        select * from cs 
+        union all
+        select * from ws) tmp1
+ group by i_item_id
+ order by total_sales,
+          i_item_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query56.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query57.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query57.sql
new file mode 100644 (file)
index 0000000..10602da
--- /dev/null
@@ -0,0 +1,48 @@
+-- start query 1 in stream 0 using template query57.tpl and seed 2031708268
+with v1 as(
+ select i_category, i_brand,
+        cc_name,
+        d_year, d_moy,
+        sum(cs_sales_price) sum_sales,
+        avg(sum(cs_sales_price)) over
+          (partition by i_category, i_brand,
+                     cc_name, d_year)
+          avg_monthly_sales,
+        rank() over
+          (partition by i_category, i_brand,
+                     cc_name
+           order by d_year, d_moy) rn
+ from item, catalog_sales, date_dim, call_center
+ where cs_item_sk = i_item_sk and
+       cs_sold_date_sk = d_date_sk and
+       cc_call_center_sk= cs_call_center_sk and
+       (
+         d_year = 1999 or
+         ( d_year = 1999-1 and d_moy =12) or
+         ( d_year = 1999+1 and d_moy =1)
+       )
+ group by i_category, i_brand,
+          cc_name , d_year, d_moy),
+ v2 as(
+ select v1.i_category, v1.i_brand
+        ,v1.d_year, v1.d_moy
+        ,v1.avg_monthly_sales
+        ,v1.sum_sales, v1_lag.sum_sales psum, v1_lead.sum_sales nsum
+ from v1, v1 v1_lag, v1 v1_lead
+ where v1.i_category = v1_lag.i_category and
+       v1.i_category = v1_lead.i_category and
+       v1.i_brand = v1_lag.i_brand and
+       v1.i_brand = v1_lead.i_brand and
+       v1. cc_name = v1_lag. cc_name and
+       v1. cc_name = v1_lead. cc_name and
+       v1.rn = v1_lag.rn + 1 and
+       v1.rn = v1_lead.rn - 1)
+  select  *
+ from v2
+ where  d_year = 1999 and
+        avg_monthly_sales > 0 and
+        case when avg_monthly_sales > 0 then abs(sum_sales - avg_monthly_sales) / avg_monthly_sales else null end > 0.1
+ order by sum_sales - avg_monthly_sales, avg_monthly_sales
+ limit 100;
+
+-- end query 1 in stream 0 using template query57.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query58.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query58.sql
new file mode 100644 (file)
index 0000000..93ac076
--- /dev/null
@@ -0,0 +1,65 @@
+-- start query 1 in stream 0 using template query58.tpl and seed 1819994127
+with ss_items as
+ (select i_item_id item_id
+        ,sum(ss_ext_sales_price) ss_item_rev 
+ from store_sales
+     ,item
+     ,date_dim
+ where ss_item_sk = i_item_sk
+   and d_date in (select d_date
+                  from date_dim
+                  where d_week_seq = (select d_week_seq 
+                                      from date_dim
+                                      where d_date = cast('1998-02-21' as date)))
+   and ss_sold_date_sk   = d_date_sk
+ group by i_item_id),
+ cs_items as
+ (select i_item_id item_id
+        ,sum(cs_ext_sales_price) cs_item_rev
+  from catalog_sales
+      ,item
+      ,date_dim
+ where cs_item_sk = i_item_sk
+  and  d_date in (select d_date
+                  from date_dim
+                  where d_week_seq = (select d_week_seq 
+                                      from date_dim
+                                      where d_date = cast('1998-02-21' as date)))
+  and  cs_sold_date_sk = d_date_sk
+ group by i_item_id),
+ ws_items as
+ (select i_item_id item_id
+        ,sum(ws_ext_sales_price) ws_item_rev
+  from web_sales
+      ,item
+      ,date_dim
+ where ws_item_sk = i_item_sk
+  and  d_date in (select d_date
+                  from date_dim
+                  where d_week_seq =(select d_week_seq 
+                                     from date_dim
+                                     where d_date = cast('1998-02-21' as date)))
+  and ws_sold_date_sk   = d_date_sk
+ group by i_item_id)
+  select  ss_items.item_id
+       ,ss_item_rev
+       ,ss_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 ss_dev
+       ,cs_item_rev
+       ,cs_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 cs_dev
+       ,ws_item_rev
+       ,ws_item_rev/((ss_item_rev+cs_item_rev+ws_item_rev)/3) * 100 ws_dev
+       ,(ss_item_rev+cs_item_rev+ws_item_rev)/3 average
+ from ss_items,cs_items,ws_items
+ where ss_items.item_id=cs_items.item_id
+   and ss_items.item_id=ws_items.item_id 
+   and ss_item_rev between 0.9 * cs_item_rev and 1.1 * cs_item_rev
+   and ss_item_rev between 0.9 * ws_item_rev and 1.1 * ws_item_rev
+   and cs_item_rev between 0.9 * ss_item_rev and 1.1 * ss_item_rev
+   and cs_item_rev between 0.9 * ws_item_rev and 1.1 * ws_item_rev
+   and ws_item_rev between 0.9 * ss_item_rev and 1.1 * ss_item_rev
+   and ws_item_rev between 0.9 * cs_item_rev and 1.1 * cs_item_rev
+ order by item_id
+         ,ss_item_rev
+ limit 100;
+
+-- end query 1 in stream 0 using template query58.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query59.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query59.sql
new file mode 100644 (file)
index 0000000..9e74b19
--- /dev/null
@@ -0,0 +1,44 @@
+-- start query 1 in stream 0 using template query59.tpl and seed 1819994127
+with wss as 
+ (select d_week_seq,
+        ss_store_sk,
+        sum(case when (d_day_name='Sunday') then ss_sales_price else null end) sun_sales,
+        sum(case when (d_day_name='Monday') then ss_sales_price else null end) mon_sales,
+        sum(case when (d_day_name='Tuesday') then ss_sales_price else  null end) tue_sales,
+        sum(case when (d_day_name='Wednesday') then ss_sales_price else null end) wed_sales,
+        sum(case when (d_day_name='Thursday') then ss_sales_price else null end) thu_sales,
+        sum(case when (d_day_name='Friday') then ss_sales_price else null end) fri_sales,
+        sum(case when (d_day_name='Saturday') then ss_sales_price else null end) sat_sales
+ from store_sales,date_dim
+ where d_date_sk = ss_sold_date_sk
+ group by d_week_seq,ss_store_sk
+ )
+  select  s_store_name1,s_store_id1,d_week_seq1
+       ,sun_sales1/sun_sales2,mon_sales1/mon_sales2
+       ,tue_sales1/tue_sales2,wed_sales1/wed_sales2,thu_sales1/thu_sales2
+       ,fri_sales1/fri_sales2,sat_sales1/sat_sales2
+ from
+ (select s_store_name s_store_name1,wss.d_week_seq d_week_seq1
+        ,s_store_id s_store_id1,sun_sales sun_sales1
+        ,mon_sales mon_sales1,tue_sales tue_sales1
+        ,wed_sales wed_sales1,thu_sales thu_sales1
+        ,fri_sales fri_sales1,sat_sales sat_sales1
+  from wss,store,date_dim d
+  where d.d_week_seq = wss.d_week_seq and
+        ss_store_sk = s_store_sk and 
+        d_month_seq between 1205 and 1205 + 11) y,
+ (select s_store_name s_store_name2,wss.d_week_seq d_week_seq2
+        ,s_store_id s_store_id2,sun_sales sun_sales2
+        ,mon_sales mon_sales2,tue_sales tue_sales2
+        ,wed_sales wed_sales2,thu_sales thu_sales2
+        ,fri_sales fri_sales2,sat_sales sat_sales2
+  from wss,store,date_dim d
+  where d.d_week_seq = wss.d_week_seq and
+        ss_store_sk = s_store_sk and 
+        d_month_seq between 1205+ 12 and 1205 + 23) x
+ where s_store_id1=s_store_id2
+   and d_week_seq1=d_week_seq2-52
+ order by s_store_name1,s_store_id1,d_week_seq1
+limit 100;
+
+-- end query 1 in stream 0 using template query59.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query6.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query6.sql
new file mode 100644 (file)
index 0000000..21a8a61
--- /dev/null
@@ -0,0 +1,26 @@
+-- start query 1 in stream 0 using template query6.tpl and seed 1819994127
+select  a.ca_state state, count(*) cnt
+ from customer_address a
+     ,customer c
+     ,store_sales s
+     ,date_dim d
+     ,item i
+ where       a.ca_address_sk = c.c_current_addr_sk
+       and c.c_customer_sk = s.ss_customer_sk
+       and s.ss_sold_date_sk = d.d_date_sk
+       and s.ss_item_sk = i.i_item_sk
+       and d.d_month_seq = 
+            (select distinct (d_month_seq)
+             from date_dim
+               where d_year = 2002
+               and d_moy = 3 )
+       and i.i_current_price > 1.2 * 
+             (select avg(j.i_current_price) 
+            from item j 
+            where j.i_category = i.i_category)
+ group by a.ca_state
+ having count(*) >= 10
+ order by cnt, a.ca_state 
+ limit 100;
+
+-- end query 1 in stream 0 using template query6.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query60.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query60.sql
new file mode 100644 (file)
index 0000000..0f96b97
--- /dev/null
@@ -0,0 +1,78 @@
+-- start query 1 in stream 0 using template query60.tpl and seed 1930872976
+with ss as (
+ select
+          i_item_id,sum(ss_ext_sales_price) total_sales
+ from
+       store_sales,
+       date_dim,
+         customer_address,
+         item
+ where
+         i_item_id in (select
+  i_item_id
+from
+ item
+where i_category in ('Children'))
+ and     ss_item_sk              = i_item_sk
+ and     ss_sold_date_sk         = d_date_sk
+ and     d_year                  = 1998
+ and     d_moy                   = 10
+ and     ss_addr_sk              = ca_address_sk
+ and     ca_gmt_offset           = -5 
+ group by i_item_id),
+ cs as (
+ select
+          i_item_id,sum(cs_ext_sales_price) total_sales
+ from
+       catalog_sales,
+       date_dim,
+         customer_address,
+         item
+ where
+         i_item_id               in (select
+  i_item_id
+from
+ item
+where i_category in ('Children'))
+ and     cs_item_sk              = i_item_sk
+ and     cs_sold_date_sk         = d_date_sk
+ and     d_year                  = 1998
+ and     d_moy                   = 10
+ and     cs_bill_addr_sk         = ca_address_sk
+ and     ca_gmt_offset           = -5 
+ group by i_item_id),
+ ws as (
+ select
+          i_item_id,sum(ws_ext_sales_price) total_sales
+ from
+       web_sales,
+       date_dim,
+         customer_address,
+         item
+ where
+         i_item_id               in (select
+  i_item_id
+from
+ item
+where i_category in ('Children'))
+ and     ws_item_sk              = i_item_sk
+ and     ws_sold_date_sk         = d_date_sk
+ and     d_year                  = 1998
+ and     d_moy                   = 10
+ and     ws_bill_addr_sk         = ca_address_sk
+ and     ca_gmt_offset           = -5
+ group by i_item_id)
+  select   
+  i_item_id
+,sum(total_sales) total_sales
+ from  (select * from ss 
+        union all
+        select * from cs 
+        union all
+        select * from ws) tmp1
+ group by i_item_id
+ order by i_item_id
+      ,total_sales
+ limit 100;
+
+-- end query 1 in stream 0 using template query60.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query61.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query61.sql
new file mode 100644 (file)
index 0000000..4be7626
--- /dev/null
@@ -0,0 +1,44 @@
+-- start query 1 in stream 0 using template query61.tpl and seed 1930872976
+select  promotions,total,cast(promotions as decimal(15,4))/cast(total as decimal(15,4))*100
+from
+  (select sum(ss_ext_sales_price) promotions
+   from  store_sales
+        ,store
+        ,promotion
+        ,date_dim
+        ,customer
+        ,customer_address 
+        ,item
+   where ss_sold_date_sk = d_date_sk
+   and   ss_store_sk = s_store_sk
+   and   ss_promo_sk = p_promo_sk
+   and   ss_customer_sk= c_customer_sk
+   and   ca_address_sk = c_current_addr_sk
+   and   ss_item_sk = i_item_sk 
+   and   ca_gmt_offset = -6
+   and   i_category = 'Sports'
+   and   (p_channel_dmail = 'Y' or p_channel_email = 'Y' or p_channel_tv = 'Y')
+   and   s_gmt_offset = -6
+   and   d_year = 2001
+   and   d_moy  = 12) promotional_sales,
+  (select sum(ss_ext_sales_price) total
+   from  store_sales
+        ,store
+        ,date_dim
+        ,customer
+        ,customer_address
+        ,item
+   where ss_sold_date_sk = d_date_sk
+   and   ss_store_sk = s_store_sk
+   and   ss_customer_sk= c_customer_sk
+   and   ca_address_sk = c_current_addr_sk
+   and   ss_item_sk = i_item_sk
+   and   ca_gmt_offset = -6
+   and   i_category = 'Sports'
+   and   s_gmt_offset = -6
+   and   d_year = 2001
+   and   d_moy  = 12) all_sales
+order by promotions, total
+limit 100;
+
+-- end query 1 in stream 0 using template query61.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query62.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query62.sql
new file mode 100644 (file)
index 0000000..0f8c794
--- /dev/null
@@ -0,0 +1,35 @@
+-- start query 1 in stream 0 using template query62.tpl and seed 1819994127
+select  
+   substr(w_warehouse_name,1,20)
+  ,sm_type
+  ,web_name
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk <= 30 ) then 1 else 0 end)  as "30 days" 
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 30) and 
+                 (ws_ship_date_sk - ws_sold_date_sk <= 60) then 1 else 0 end )  as "31-60 days" 
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 60) and 
+                 (ws_ship_date_sk - ws_sold_date_sk <= 90) then 1 else 0 end)  as "61-90 days" 
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 90) and
+                 (ws_ship_date_sk - ws_sold_date_sk <= 120) then 1 else 0 end)  as "91-120 days" 
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk  > 120) then 1 else 0 end)  as ">120 days" 
+from
+   web_sales
+  ,warehouse
+  ,ship_mode
+  ,web_site
+  ,date_dim
+where
+    d_month_seq between 1215 and 1215 + 11
+and ws_ship_date_sk   = d_date_sk
+and ws_warehouse_sk   = w_warehouse_sk
+and ws_ship_mode_sk   = sm_ship_mode_sk
+and ws_web_site_sk    = web_site_sk
+group by
+   substr(w_warehouse_name,1,20)
+  ,sm_type
+  ,web_name
+order by substr(w_warehouse_name,1,20)
+        ,sm_type
+       ,web_name
+limit 100;
+
+-- end query 1 in stream 0 using template query62.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query63.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query63.sql
new file mode 100644 (file)
index 0000000..599a2d0
--- /dev/null
@@ -0,0 +1,29 @@
+-- start query 1 in stream 0 using template query63.tpl and seed 1819994127
+select  * 
+from (select i_manager_id
+             ,sum(ss_sales_price) sum_sales
+             ,avg(sum(ss_sales_price)) over (partition by i_manager_id) avg_monthly_sales
+      from item
+          ,store_sales
+          ,date_dim
+          ,store
+      where ss_item_sk = i_item_sk
+        and ss_sold_date_sk = d_date_sk
+        and ss_store_sk = s_store_sk
+        and d_month_seq in (1211,1211+1,1211+2,1211+3,1211+4,1211+5,1211+6,1211+7,1211+8,1211+9,1211+10,1211+11)
+        and ((    i_category in ('Books','Children','Electronics')
+              and i_class in ('personal','portable','reference','self-help')
+              and i_brand in ('scholaramalgamalg #14','scholaramalgamalg #7',
+                                 'exportiunivamalg #9','scholaramalgamalg #9'))
+           or(    i_category in ('Women','Music','Men')
+              and i_class in ('accessories','classical','fragrances','pants')
+              and i_brand in ('amalgimporto #1','edu packscholar #1','exportiimporto #1',
+                                'importoamalg #1')))
+group by i_manager_id, d_moy) tmp1
+where case when avg_monthly_sales > 0 then abs (sum_sales - avg_monthly_sales) / avg_monthly_sales else null end > 0.1
+order by i_manager_id
+        ,avg_monthly_sales
+        ,sum_sales
+limit 100;
+
+-- end query 1 in stream 0 using template query63.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query64.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query64.sql
new file mode 100644 (file)
index 0000000..e353b93
--- /dev/null
@@ -0,0 +1,121 @@
+-- start query 1 in stream 0 using template query64.tpl and seed 1220860970
+with cs_ui as
+ (select cs_item_sk
+        ,sum(cs_ext_list_price) as sale,sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit) as refund
+  from catalog_sales
+      ,catalog_returns
+  where cs_item_sk = cr_item_sk
+    and cs_order_number = cr_order_number
+  group by cs_item_sk
+  having sum(cs_ext_list_price)>2*sum(cr_refunded_cash+cr_reversed_charge+cr_store_credit)),
+cross_sales as
+ (select i_product_name product_name
+     ,i_item_sk item_sk
+     ,s_store_name store_name
+     ,s_zip store_zip
+     ,ad1.ca_street_number b_street_number
+     ,ad1.ca_street_name b_street_name
+     ,ad1.ca_city b_city
+     ,ad1.ca_zip b_zip
+     ,ad2.ca_street_number c_street_number
+     ,ad2.ca_street_name c_street_name
+     ,ad2.ca_city c_city
+     ,ad2.ca_zip c_zip
+     ,d1.d_year as syear
+     ,d2.d_year as fsyear
+     ,d3.d_year s2year
+     ,count(*) cnt
+     ,sum(ss_wholesale_cost) s1
+     ,sum(ss_list_price) s2
+     ,sum(ss_coupon_amt) s3
+  FROM   store_sales
+        ,store_returns
+        ,cs_ui
+        ,date_dim d1
+        ,date_dim d2
+        ,date_dim d3
+        ,store
+        ,customer
+        ,customer_demographics cd1
+        ,customer_demographics cd2
+        ,promotion
+        ,household_demographics hd1
+        ,household_demographics hd2
+        ,customer_address ad1
+        ,customer_address ad2
+        ,income_band ib1
+        ,income_band ib2
+        ,item
+  WHERE  ss_store_sk = s_store_sk AND
+         ss_sold_date_sk = d1.d_date_sk AND
+         ss_customer_sk = c_customer_sk AND
+         ss_cdemo_sk= cd1.cd_demo_sk AND
+         ss_hdemo_sk = hd1.hd_demo_sk AND
+         ss_addr_sk = ad1.ca_address_sk and
+         ss_item_sk = i_item_sk and
+         ss_item_sk = sr_item_sk and
+         ss_ticket_number = sr_ticket_number and
+         ss_item_sk = cs_ui.cs_item_sk and
+         c_current_cdemo_sk = cd2.cd_demo_sk AND
+         c_current_hdemo_sk = hd2.hd_demo_sk AND
+         c_current_addr_sk = ad2.ca_address_sk and
+         c_first_sales_date_sk = d2.d_date_sk and
+         c_first_shipto_date_sk = d3.d_date_sk and
+         ss_promo_sk = p_promo_sk and
+         hd1.hd_income_band_sk = ib1.ib_income_band_sk and
+         hd2.hd_income_band_sk = ib2.ib_income_band_sk and
+         cd1.cd_marital_status <> cd2.cd_marital_status and
+         i_color in ('azure','gainsboro','misty','blush','hot','lemon') and
+         i_current_price between 80 and 80 + 10 and
+         i_current_price between 80 + 1 and 80 + 15
+group by i_product_name
+       ,i_item_sk
+       ,s_store_name
+       ,s_zip
+       ,ad1.ca_street_number
+       ,ad1.ca_street_name
+       ,ad1.ca_city
+       ,ad1.ca_zip
+       ,ad2.ca_street_number
+       ,ad2.ca_street_name
+       ,ad2.ca_city
+       ,ad2.ca_zip
+       ,d1.d_year
+       ,d2.d_year
+       ,d3.d_year
+)
+select cs1.product_name
+     ,cs1.store_name
+     ,cs1.store_zip
+     ,cs1.b_street_number
+     ,cs1.b_street_name
+     ,cs1.b_city
+     ,cs1.b_zip
+     ,cs1.c_street_number
+     ,cs1.c_street_name
+     ,cs1.c_city
+     ,cs1.c_zip
+     ,cs1.syear
+     ,cs1.cnt
+     ,cs1.s1 as s11
+     ,cs1.s2 as s21
+     ,cs1.s3 as s31
+     ,cs2.s1 as s12
+     ,cs2.s2 as s22
+     ,cs2.s3 as s32
+     ,cs2.syear
+     ,cs2.cnt
+from cross_sales cs1,cross_sales cs2
+where cs1.item_sk=cs2.item_sk and
+     cs1.syear = 1999 and
+     cs2.syear = 1999 + 1 and
+     cs2.cnt <= cs1.cnt and
+     cs1.store_name = cs2.store_name and
+     cs1.store_zip = cs2.store_zip
+order by cs1.product_name
+       ,cs1.store_name
+       ,cs2.cnt
+       ,cs1.s1
+       ,cs2.s1;
+
+-- end query 1 in stream 0 using template query64.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query65.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query65.sql
new file mode 100644 (file)
index 0000000..826ecc6
--- /dev/null
@@ -0,0 +1,29 @@
+-- start query 1 in stream 0 using template query65.tpl and seed 1819994127
+select 
+       s_store_name,
+       i_item_desc,
+       sc.revenue,
+       i_current_price,
+       i_wholesale_cost,
+       i_brand
+ from store, item,
+     (select ss_store_sk, avg(revenue) as ave
+       from
+           (select  ss_store_sk, ss_item_sk, 
+                    sum(ss_sales_price) as revenue
+               from store_sales, date_dim
+               where ss_sold_date_sk = d_date_sk and d_month_seq between 1186 and 1186+11
+               group by ss_store_sk, ss_item_sk) sa
+       group by ss_store_sk) sb,
+     (select  ss_store_sk, ss_item_sk, sum(ss_sales_price) as revenue
+       from store_sales, date_dim
+       where ss_sold_date_sk = d_date_sk and d_month_seq between 1186 and 1186+11
+       group by ss_store_sk, ss_item_sk) sc
+ where sb.ss_store_sk = sc.ss_store_sk and 
+       sc.revenue <= 0.1 * sb.ave and
+       s_store_sk = sc.ss_store_sk and
+       i_item_sk = sc.ss_item_sk
+ order by s_store_name, i_item_desc
+limit 100;
+
+-- end query 1 in stream 0 using template query65.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query66.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query66.sql
new file mode 100644 (file)
index 0000000..987238b
--- /dev/null
@@ -0,0 +1,220 @@
+-- start query 1 in stream 0 using template query66.tpl and seed 2042478054
+select   
+         w_warehouse_name
+       ,w_warehouse_sq_ft
+       ,w_city
+       ,w_county
+       ,w_state
+       ,w_country
+        ,ship_carriers
+        ,year
+       ,sum(jan_sales) as jan_sales
+       ,sum(feb_sales) as feb_sales
+       ,sum(mar_sales) as mar_sales
+       ,sum(apr_sales) as apr_sales
+       ,sum(may_sales) as may_sales
+       ,sum(jun_sales) as jun_sales
+       ,sum(jul_sales) as jul_sales
+       ,sum(aug_sales) as aug_sales
+       ,sum(sep_sales) as sep_sales
+       ,sum(oct_sales) as oct_sales
+       ,sum(nov_sales) as nov_sales
+       ,sum(dec_sales) as dec_sales
+       ,sum(jan_sales/w_warehouse_sq_ft) as jan_sales_per_sq_foot
+       ,sum(feb_sales/w_warehouse_sq_ft) as feb_sales_per_sq_foot
+       ,sum(mar_sales/w_warehouse_sq_ft) as mar_sales_per_sq_foot
+       ,sum(apr_sales/w_warehouse_sq_ft) as apr_sales_per_sq_foot
+       ,sum(may_sales/w_warehouse_sq_ft) as may_sales_per_sq_foot
+       ,sum(jun_sales/w_warehouse_sq_ft) as jun_sales_per_sq_foot
+       ,sum(jul_sales/w_warehouse_sq_ft) as jul_sales_per_sq_foot
+       ,sum(aug_sales/w_warehouse_sq_ft) as aug_sales_per_sq_foot
+       ,sum(sep_sales/w_warehouse_sq_ft) as sep_sales_per_sq_foot
+       ,sum(oct_sales/w_warehouse_sq_ft) as oct_sales_per_sq_foot
+       ,sum(nov_sales/w_warehouse_sq_ft) as nov_sales_per_sq_foot
+       ,sum(dec_sales/w_warehouse_sq_ft) as dec_sales_per_sq_foot
+       ,sum(jan_net) as jan_net
+       ,sum(feb_net) as feb_net
+       ,sum(mar_net) as mar_net
+       ,sum(apr_net) as apr_net
+       ,sum(may_net) as may_net
+       ,sum(jun_net) as jun_net
+       ,sum(jul_net) as jul_net
+       ,sum(aug_net) as aug_net
+       ,sum(sep_net) as sep_net
+       ,sum(oct_net) as oct_net
+       ,sum(nov_net) as nov_net
+       ,sum(dec_net) as dec_net
+ from (
+     select 
+       w_warehouse_name
+       ,w_warehouse_sq_ft
+       ,w_city
+       ,w_county
+       ,w_state
+       ,w_country
+       ,'MSC' || ',' || 'GERMA' as ship_carriers
+       ,d_year as year
+       ,sum(case when d_moy = 1 
+               then ws_sales_price* ws_quantity else 0 end) as jan_sales
+       ,sum(case when d_moy = 2 
+               then ws_sales_price* ws_quantity else 0 end) as feb_sales
+       ,sum(case when d_moy = 3 
+               then ws_sales_price* ws_quantity else 0 end) as mar_sales
+       ,sum(case when d_moy = 4 
+               then ws_sales_price* ws_quantity else 0 end) as apr_sales
+       ,sum(case when d_moy = 5 
+               then ws_sales_price* ws_quantity else 0 end) as may_sales
+       ,sum(case when d_moy = 6 
+               then ws_sales_price* ws_quantity else 0 end) as jun_sales
+       ,sum(case when d_moy = 7 
+               then ws_sales_price* ws_quantity else 0 end) as jul_sales
+       ,sum(case when d_moy = 8 
+               then ws_sales_price* ws_quantity else 0 end) as aug_sales
+       ,sum(case when d_moy = 9 
+               then ws_sales_price* ws_quantity else 0 end) as sep_sales
+       ,sum(case when d_moy = 10 
+               then ws_sales_price* ws_quantity else 0 end) as oct_sales
+       ,sum(case when d_moy = 11
+               then ws_sales_price* ws_quantity else 0 end) as nov_sales
+       ,sum(case when d_moy = 12
+               then ws_sales_price* ws_quantity else 0 end) as dec_sales
+       ,sum(case when d_moy = 1 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as jan_net
+       ,sum(case when d_moy = 2
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as feb_net
+       ,sum(case when d_moy = 3 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as mar_net
+       ,sum(case when d_moy = 4 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as apr_net
+       ,sum(case when d_moy = 5 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as may_net
+       ,sum(case when d_moy = 6 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as jun_net
+       ,sum(case when d_moy = 7 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as jul_net
+       ,sum(case when d_moy = 8 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as aug_net
+       ,sum(case when d_moy = 9 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as sep_net
+       ,sum(case when d_moy = 10 
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as oct_net
+       ,sum(case when d_moy = 11
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as nov_net
+       ,sum(case when d_moy = 12
+               then ws_net_paid_inc_ship_tax * ws_quantity else 0 end) as dec_net
+     from
+          web_sales
+         ,warehouse
+         ,date_dim
+         ,time_dim
+         ,ship_mode
+     where
+            ws_warehouse_sk =  w_warehouse_sk
+        and ws_sold_date_sk = d_date_sk
+        and ws_sold_time_sk = t_time_sk
+       and ws_ship_mode_sk = sm_ship_mode_sk
+        and d_year = 2001
+       and t_time between 9453 and 9453+28800 
+       and sm_carrier in ('MSC','GERMA')
+     group by 
+        w_warehouse_name
+       ,w_warehouse_sq_ft
+       ,w_city
+       ,w_county
+       ,w_state
+       ,w_country
+       ,d_year
+ union all
+     select 
+       w_warehouse_name
+       ,w_warehouse_sq_ft
+       ,w_city
+       ,w_county
+       ,w_state
+       ,w_country
+       ,'MSC' || ',' || 'GERMA' as ship_carriers
+       ,d_year as year
+       ,sum(case when d_moy = 1 
+               then cs_ext_list_price* cs_quantity else 0 end) as jan_sales
+       ,sum(case when d_moy = 2 
+               then cs_ext_list_price* cs_quantity else 0 end) as feb_sales
+       ,sum(case when d_moy = 3 
+               then cs_ext_list_price* cs_quantity else 0 end) as mar_sales
+       ,sum(case when d_moy = 4 
+               then cs_ext_list_price* cs_quantity else 0 end) as apr_sales
+       ,sum(case when d_moy = 5 
+               then cs_ext_list_price* cs_quantity else 0 end) as may_sales
+       ,sum(case when d_moy = 6 
+               then cs_ext_list_price* cs_quantity else 0 end) as jun_sales
+       ,sum(case when d_moy = 7 
+               then cs_ext_list_price* cs_quantity else 0 end) as jul_sales
+       ,sum(case when d_moy = 8 
+               then cs_ext_list_price* cs_quantity else 0 end) as aug_sales
+       ,sum(case when d_moy = 9 
+               then cs_ext_list_price* cs_quantity else 0 end) as sep_sales
+       ,sum(case when d_moy = 10 
+               then cs_ext_list_price* cs_quantity else 0 end) as oct_sales
+       ,sum(case when d_moy = 11
+               then cs_ext_list_price* cs_quantity else 0 end) as nov_sales
+       ,sum(case when d_moy = 12
+               then cs_ext_list_price* cs_quantity else 0 end) as dec_sales
+       ,sum(case when d_moy = 1 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as jan_net
+       ,sum(case when d_moy = 2 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as feb_net
+       ,sum(case when d_moy = 3 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as mar_net
+       ,sum(case when d_moy = 4 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as apr_net
+       ,sum(case when d_moy = 5 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as may_net
+       ,sum(case when d_moy = 6 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as jun_net
+       ,sum(case when d_moy = 7 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as jul_net
+       ,sum(case when d_moy = 8 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as aug_net
+       ,sum(case when d_moy = 9 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as sep_net
+       ,sum(case when d_moy = 10 
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as oct_net
+       ,sum(case when d_moy = 11
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as nov_net
+       ,sum(case when d_moy = 12
+               then cs_net_paid_inc_ship * cs_quantity else 0 end) as dec_net
+     from
+          catalog_sales
+         ,warehouse
+         ,date_dim
+         ,time_dim
+        ,ship_mode
+     where
+            cs_warehouse_sk =  w_warehouse_sk
+        and cs_sold_date_sk = d_date_sk
+        and cs_sold_time_sk = t_time_sk
+       and cs_ship_mode_sk = sm_ship_mode_sk
+        and d_year = 2001
+       and t_time between 9453 AND 9453+28800 
+       and sm_carrier in ('MSC','GERMA')
+     group by 
+        w_warehouse_name
+       ,w_warehouse_sq_ft
+       ,w_city
+       ,w_county
+       ,w_state
+       ,w_country
+       ,d_year
+ ) x
+ group by 
+        w_warehouse_name
+       ,w_warehouse_sq_ft
+       ,w_city
+       ,w_county
+       ,w_state
+       ,w_country
+       ,ship_carriers
+       ,year
+ order by w_warehouse_name
+ limit 100;
+
+-- end query 1 in stream 0 using template query66.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query67.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query67.sql
new file mode 100644 (file)
index 0000000..df485b9
--- /dev/null
@@ -0,0 +1,44 @@
+-- start query 1 in stream 0 using template query67.tpl and seed 1819994127
+select  *
+from (select i_category
+            ,i_class
+            ,i_brand
+            ,i_product_name
+            ,d_year
+            ,d_qoy
+            ,d_moy
+            ,s_store_id
+            ,sumsales
+            ,rank() over (partition by i_category order by sumsales desc) rk
+      from (select i_category
+                  ,i_class
+                  ,i_brand
+                  ,i_product_name
+                  ,d_year
+                  ,d_qoy
+                  ,d_moy
+                  ,s_store_id
+                  ,sum(coalesce(ss_sales_price*ss_quantity,0)) sumsales
+            from store_sales
+                ,date_dim
+                ,store
+                ,item
+       where  ss_sold_date_sk=d_date_sk
+          and ss_item_sk=i_item_sk
+          and ss_store_sk = s_store_sk
+          and d_month_seq between 1185 and 1185+11
+       group by  rollup(i_category, i_class, i_brand, i_product_name, d_year, d_qoy, d_moy,s_store_id))dw1) dw2
+where rk <= 100
+order by i_category
+        ,i_class
+        ,i_brand
+        ,i_product_name
+        ,d_year
+        ,d_qoy
+        ,d_moy
+        ,s_store_id
+        ,sumsales
+        ,rk
+limit 100;
+
+-- end query 1 in stream 0 using template query67.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query68.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query68.sql
new file mode 100644 (file)
index 0000000..9c16a7e
--- /dev/null
@@ -0,0 +1,42 @@
+-- start query 1 in stream 0 using template query68.tpl and seed 803547492
+select  c_last_name
+       ,c_first_name
+       ,ca_city
+       ,bought_city
+       ,ss_ticket_number
+       ,extended_price
+       ,extended_tax
+       ,list_price
+ from (select ss_ticket_number
+             ,ss_customer_sk
+             ,ca_city bought_city
+             ,sum(ss_ext_sales_price) extended_price 
+             ,sum(ss_ext_list_price) list_price
+             ,sum(ss_ext_tax) extended_tax 
+       from store_sales
+           ,date_dim
+           ,store
+           ,household_demographics
+           ,customer_address 
+       where store_sales.ss_sold_date_sk = date_dim.d_date_sk
+         and store_sales.ss_store_sk = store.s_store_sk  
+        and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
+        and store_sales.ss_addr_sk = customer_address.ca_address_sk
+        and date_dim.d_dom between 1 and 2 
+        and (household_demographics.hd_dep_count = 4 or
+             household_demographics.hd_vehicle_count= 0)
+        and date_dim.d_year in (1999,1999+1,1999+2)
+        and store.s_city in ('Pleasant Hill','Bethel')
+       group by ss_ticket_number
+               ,ss_customer_sk
+               ,ss_addr_sk,ca_city) dn
+      ,customer
+      ,customer_address current_addr
+ where ss_customer_sk = c_customer_sk
+   and customer.c_current_addr_sk = current_addr.ca_address_sk
+   and current_addr.ca_city <> bought_city
+ order by c_last_name
+         ,ss_ticket_number
+ limit 100;
+
+-- end query 1 in stream 0 using template query68.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query69.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query69.sql
new file mode 100644 (file)
index 0000000..4410774
--- /dev/null
@@ -0,0 +1,47 @@
+-- start query 1 in stream 0 using template query69.tpl and seed 797269820
+select  
+  cd_gender,
+  cd_marital_status,
+  cd_education_status,
+  count(*) cnt1,
+  cd_purchase_estimate,
+  count(*) cnt2,
+  cd_credit_rating,
+  count(*) cnt3
+ from
+  customer c,customer_address ca,customer_demographics
+ where
+  c.c_current_addr_sk = ca.ca_address_sk and
+  ca_state in ('MO','MN','AZ') and
+  cd_demo_sk = c.c_current_cdemo_sk and 
+  exists (select *
+          from store_sales,date_dim
+          where c.c_customer_sk = ss_customer_sk and
+                ss_sold_date_sk = d_date_sk and
+                d_year = 2003 and
+                d_moy between 2 and 2+2) and
+   (not exists (select *
+            from web_sales,date_dim
+            where c.c_customer_sk = ws_bill_customer_sk and
+                  ws_sold_date_sk = d_date_sk and
+                  d_year = 2003 and
+                  d_moy between 2 and 2+2) and
+    not exists (select * 
+            from catalog_sales,date_dim
+            where c.c_customer_sk = cs_ship_customer_sk and
+                  cs_sold_date_sk = d_date_sk and
+                  d_year = 2003 and
+                  d_moy between 2 and 2+2))
+ group by cd_gender,
+          cd_marital_status,
+          cd_education_status,
+          cd_purchase_estimate,
+          cd_credit_rating
+ order by cd_gender,
+          cd_marital_status,
+          cd_education_status,
+          cd_purchase_estimate,
+          cd_credit_rating
+ limit 100;
+
+-- end query 1 in stream 0 using template query69.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query7.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query7.sql
new file mode 100644 (file)
index 0000000..f17231e
--- /dev/null
@@ -0,0 +1,21 @@
+-- start query 1 in stream 0 using template query7.tpl and seed 1930872976
+select  i_item_id, 
+        avg(ss_quantity) agg1,
+        avg(ss_list_price) agg2,
+        avg(ss_coupon_amt) agg3,
+        avg(ss_sales_price) agg4 
+ from store_sales, customer_demographics, date_dim, item, promotion
+ where ss_sold_date_sk = d_date_sk and
+       ss_item_sk = i_item_sk and
+       ss_cdemo_sk = cd_demo_sk and
+       ss_promo_sk = p_promo_sk and
+       cd_gender = 'F' and 
+       cd_marital_status = 'W' and
+       cd_education_status = 'College' and
+       (p_channel_email = 'N' or p_channel_event = 'N') and
+       d_year = 2001 
+ group by i_item_id
+ order by i_item_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query7.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query70.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query70.sql
new file mode 100644 (file)
index 0000000..1d44fbd
--- /dev/null
@@ -0,0 +1,38 @@
+-- start query 1 in stream 0 using template query70.tpl and seed 1819994127
+select  
+    sum(ss_net_profit) as total_sum
+   ,s_state
+   ,s_county
+   ,grouping(s_state)+grouping(s_county) as lochierarchy
+   ,rank() over (
+       partition by grouping(s_state)+grouping(s_county),
+       case when grouping(s_county) = 0 then s_state end 
+       order by sum(ss_net_profit) desc) as rank_within_parent
+ from
+    store_sales
+   ,date_dim       d1
+   ,store
+ where
+    d1.d_month_seq between 1218 and 1218+11
+ and d1.d_date_sk = ss_sold_date_sk
+ and s_store_sk  = ss_store_sk
+ and s_state in
+             ( select s_state
+               from  (select s_state as s_state,
+                           rank() over ( partition by s_state order by sum(ss_net_profit) desc) as ranking
+                      from   store_sales, store, date_dim
+                      where  d_month_seq between 1218 and 1218+11
+                           and d_date_sk = ss_sold_date_sk
+                           and s_store_sk  = ss_store_sk
+                      group by s_state
+                     ) tmp1 
+               where ranking <= 5
+             )
+ group by rollup(s_state,s_county)
+ order by
+   lochierarchy desc
+  ,case when lochierarchy = 0 then s_state end
+  ,rank_within_parent
+ limit 100;
+
+-- end query 1 in stream 0 using template query70.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query71.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query71.sql
new file mode 100644 (file)
index 0000000..eee496f
--- /dev/null
@@ -0,0 +1,40 @@
+-- start query 1 in stream 0 using template query71.tpl and seed 2031708268
+select i_brand_id brand_id, i_brand brand,t_hour,t_minute,
+       sum(ext_price) ext_price
+ from item, (select ws_ext_sales_price as ext_price, 
+                        ws_sold_date_sk as sold_date_sk,
+                        ws_item_sk as sold_item_sk,
+                        ws_sold_time_sk as time_sk  
+                 from web_sales,date_dim
+                 where d_date_sk = ws_sold_date_sk
+                   and d_moy=12
+                   and d_year=2000
+                 union all
+                 select cs_ext_sales_price as ext_price,
+                        cs_sold_date_sk as sold_date_sk,
+                        cs_item_sk as sold_item_sk,
+                        cs_sold_time_sk as time_sk
+                 from catalog_sales,date_dim
+                 where d_date_sk = cs_sold_date_sk
+                   and d_moy=12
+                   and d_year=2000
+                 union all
+                 select ss_ext_sales_price as ext_price,
+                        ss_sold_date_sk as sold_date_sk,
+                        ss_item_sk as sold_item_sk,
+                        ss_sold_time_sk as time_sk
+                 from store_sales,date_dim
+                 where d_date_sk = ss_sold_date_sk
+                   and d_moy=12
+                   and d_year=2000
+                 ) tmp,time_dim
+ where
+   sold_item_sk = i_item_sk
+   and i_manager_id=1
+   and time_sk = t_time_sk
+   and (t_meal_time = 'breakfast' or t_meal_time = 'dinner')
+ group by i_brand, i_brand_id,t_hour,t_minute
+ order by ext_price desc, i_brand_id
+ ;
+
+-- end query 1 in stream 0 using template query71.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query72.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query72.sql
new file mode 100644 (file)
index 0000000..9ac928d
--- /dev/null
@@ -0,0 +1,29 @@
+-- start query 1 in stream 0 using template query72.tpl and seed 2031708268
+select  i_item_desc
+      ,w_warehouse_name
+      ,d1.d_week_seq
+      ,sum(case when p_promo_sk is null then 1 else 0 end) no_promo
+      ,sum(case when p_promo_sk is not null then 1 else 0 end) promo
+      ,count(*) total_cnt
+from catalog_sales
+join inventory on (cs_item_sk = inv_item_sk)
+join warehouse on (w_warehouse_sk=inv_warehouse_sk)
+join item on (i_item_sk = cs_item_sk)
+join customer_demographics on (cs_bill_cdemo_sk = cd_demo_sk)
+join household_demographics on (cs_bill_hdemo_sk = hd_demo_sk)
+join date_dim d1 on (cs_sold_date_sk = d1.d_date_sk)
+join date_dim d2 on (inv_date_sk = d2.d_date_sk)
+join date_dim d3 on (cs_ship_date_sk = d3.d_date_sk)
+left outer join promotion on (cs_promo_sk=p_promo_sk)
+left outer join catalog_returns on (cr_item_sk = cs_item_sk and cr_order_number = cs_order_number)
+where d1.d_week_seq = d2.d_week_seq
+  and inv_quantity_on_hand < cs_quantity 
+  and d3.d_date > d1.d_date + INTERVAL '5' DAY 
+  and hd_buy_potential = '1001-5000'
+  and d1.d_year = 2000
+  and cd_marital_status = 'D'
+group by i_item_desc,w_warehouse_name,d1.d_week_seq
+order by total_cnt desc, i_item_desc, w_warehouse_name, d_week_seq
+limit 100;
+
+-- end query 1 in stream 0 using template query72.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query73.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query73.sql
new file mode 100644 (file)
index 0000000..2daa968
--- /dev/null
@@ -0,0 +1,28 @@
+-- start query 1 in stream 0 using template query73.tpl and seed 1971067816
+select c_last_name
+       ,c_first_name
+       ,c_salutation
+       ,c_preferred_cust_flag 
+       ,ss_ticket_number
+       ,cnt from
+   (select ss_ticket_number
+          ,ss_customer_sk
+          ,count(*) cnt
+    from store_sales,date_dim,store,household_demographics
+    where store_sales.ss_sold_date_sk = date_dim.d_date_sk
+    and store_sales.ss_store_sk = store.s_store_sk  
+    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
+    and date_dim.d_dom between 1 and 2 
+    and (household_demographics.hd_buy_potential = '>10000' or
+         household_demographics.hd_buy_potential = '5001-10000')
+    and household_demographics.hd_vehicle_count > 0
+    and case when household_demographics.hd_vehicle_count > 0 then 
+             household_demographics.hd_dep_count/ household_demographics.hd_vehicle_count else null end > 1
+    and date_dim.d_year in (2000,2000+1,2000+2)
+    and store.s_county in ('Lea County','Furnas County','Pennington County','Bronx County')
+    group by ss_ticket_number,ss_customer_sk) dj,customer
+    where ss_customer_sk = c_customer_sk
+      and cnt between 1 and 5
+    order by cnt desc, c_last_name asc;
+
+-- end query 1 in stream 0 using template query73.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query74.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query74.sql
new file mode 100644 (file)
index 0000000..d44235f
--- /dev/null
@@ -0,0 +1,61 @@
+-- start query 1 in stream 0 using template query74.tpl and seed 1556717815
+with year_total as (
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,d_year as year
+       ,sum(ss_net_paid) year_total
+       ,'s' sale_type
+ from customer
+     ,store_sales
+     ,date_dim
+ where c_customer_sk = ss_customer_sk
+   and ss_sold_date_sk = d_date_sk
+   and d_year in (1998,1998+1)
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,d_year
+ union all
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,d_year as year
+       ,sum(ws_net_paid) year_total
+       ,'w' sale_type
+ from customer
+     ,web_sales
+     ,date_dim
+ where c_customer_sk = ws_bill_customer_sk
+   and ws_sold_date_sk = d_date_sk
+   and d_year in (1998,1998+1)
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,d_year
+         )
+  select 
+        t_s_secyear.customer_id, t_s_secyear.customer_first_name, t_s_secyear.customer_last_name
+ from year_total t_s_firstyear
+     ,year_total t_s_secyear
+     ,year_total t_w_firstyear
+     ,year_total t_w_secyear
+ where t_s_secyear.customer_id = t_s_firstyear.customer_id
+         and t_s_firstyear.customer_id = t_w_secyear.customer_id
+         and t_s_firstyear.customer_id = t_w_firstyear.customer_id
+         and t_s_firstyear.sale_type = 's'
+         and t_w_firstyear.sale_type = 'w'
+         and t_s_secyear.sale_type = 's'
+         and t_w_secyear.sale_type = 'w'
+         and t_s_firstyear.year = 1998
+         and t_s_secyear.year = 1998+1
+         and t_w_firstyear.year = 1998
+         and t_w_secyear.year = 1998+1
+         and t_s_firstyear.year_total > 0
+         and t_w_firstyear.year_total > 0
+         and case when t_w_firstyear.year_total > 0 then t_w_secyear.year_total / t_w_firstyear.year_total else null end
+           > case when t_s_firstyear.year_total > 0 then t_s_secyear.year_total / t_s_firstyear.year_total else null end
+ order by 3,1,2
+limit 100;
+
+-- end query 1 in stream 0 using template query74.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query75.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query75.sql
new file mode 100644 (file)
index 0000000..50b507e
--- /dev/null
@@ -0,0 +1,70 @@
+-- start query 1 in stream 0 using template query75.tpl and seed 1819994127
+WITH all_sales AS (
+ SELECT d_year
+       ,i_brand_id
+       ,i_class_id
+       ,i_category_id
+       ,i_manufact_id
+       ,SUM(sales_cnt) AS sales_cnt
+       ,SUM(sales_amt) AS sales_amt
+ FROM (SELECT d_year
+             ,i_brand_id
+             ,i_class_id
+             ,i_category_id
+             ,i_manufact_id
+             ,cs_quantity - COALESCE(cr_return_quantity,0) AS sales_cnt
+             ,cs_ext_sales_price - COALESCE(cr_return_amount,0.0) AS sales_amt
+       FROM catalog_sales JOIN item ON i_item_sk=cs_item_sk
+                          JOIN date_dim ON d_date_sk=cs_sold_date_sk
+                          LEFT JOIN catalog_returns ON (cs_order_number=cr_order_number 
+                                                    AND cs_item_sk=cr_item_sk)
+       WHERE i_category='Sports'
+       UNION
+       SELECT d_year
+             ,i_brand_id
+             ,i_class_id
+             ,i_category_id
+             ,i_manufact_id
+             ,ss_quantity - COALESCE(sr_return_quantity,0) AS sales_cnt
+             ,ss_ext_sales_price - COALESCE(sr_return_amt,0.0) AS sales_amt
+       FROM store_sales JOIN item ON i_item_sk=ss_item_sk
+                        JOIN date_dim ON d_date_sk=ss_sold_date_sk
+                        LEFT JOIN store_returns ON (ss_ticket_number=sr_ticket_number 
+                                                AND ss_item_sk=sr_item_sk)
+       WHERE i_category='Sports'
+       UNION
+       SELECT d_year
+             ,i_brand_id
+             ,i_class_id
+             ,i_category_id
+             ,i_manufact_id
+             ,ws_quantity - COALESCE(wr_return_quantity,0) AS sales_cnt
+             ,ws_ext_sales_price - COALESCE(wr_return_amt,0.0) AS sales_amt
+       FROM web_sales JOIN item ON i_item_sk=ws_item_sk
+                      JOIN date_dim ON d_date_sk=ws_sold_date_sk
+                      LEFT JOIN web_returns ON (ws_order_number=wr_order_number 
+                                            AND ws_item_sk=wr_item_sk)
+       WHERE i_category='Sports') sales_detail
+ GROUP BY d_year, i_brand_id, i_class_id, i_category_id, i_manufact_id)
+ SELECT  prev_yr.d_year AS prev_year
+                          ,curr_yr.d_year AS year
+                          ,curr_yr.i_brand_id
+                          ,curr_yr.i_class_id
+                          ,curr_yr.i_category_id
+                          ,curr_yr.i_manufact_id
+                          ,prev_yr.sales_cnt AS prev_yr_cnt
+                          ,curr_yr.sales_cnt AS curr_yr_cnt
+                          ,curr_yr.sales_cnt-prev_yr.sales_cnt AS sales_cnt_diff
+                          ,curr_yr.sales_amt-prev_yr.sales_amt AS sales_amt_diff
+ FROM all_sales curr_yr, all_sales prev_yr
+ WHERE curr_yr.i_brand_id=prev_yr.i_brand_id
+   AND curr_yr.i_class_id=prev_yr.i_class_id
+   AND curr_yr.i_category_id=prev_yr.i_category_id
+   AND curr_yr.i_manufact_id=prev_yr.i_manufact_id
+   AND curr_yr.d_year=2001
+   AND prev_yr.d_year=2001-1
+   AND CAST(curr_yr.sales_cnt AS DECIMAL(17,2))/CAST(prev_yr.sales_cnt AS DECIMAL(17,2))<0.9
+ ORDER BY sales_cnt_diff,sales_amt_diff
+ limit 100;
+
+-- end query 1 in stream 0 using template query75.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query76.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query76.sql
new file mode 100644 (file)
index 0000000..eeb5d28
--- /dev/null
@@ -0,0 +1,24 @@
+-- start query 1 in stream 0 using template query76.tpl and seed 2031708268
+select  channel, col_name, d_year, d_qoy, i_category, COUNT(*) sales_cnt, SUM(ext_sales_price) sales_amt FROM (
+        SELECT 'store' as channel, 'ss_customer_sk' col_name, d_year, d_qoy, i_category, ss_ext_sales_price ext_sales_price
+         FROM store_sales, item, date_dim
+         WHERE ss_customer_sk IS NULL
+           AND ss_sold_date_sk=d_date_sk
+           AND ss_item_sk=i_item_sk
+        UNION ALL
+        SELECT 'web' as channel, 'ws_ship_addr_sk' col_name, d_year, d_qoy, i_category, ws_ext_sales_price ext_sales_price
+         FROM web_sales, item, date_dim
+         WHERE ws_ship_addr_sk IS NULL
+           AND ws_sold_date_sk=d_date_sk
+           AND ws_item_sk=i_item_sk
+        UNION ALL
+        SELECT 'catalog' as channel, 'cs_ship_mode_sk' col_name, d_year, d_qoy, i_category, cs_ext_sales_price ext_sales_price
+         FROM catalog_sales, item, date_dim
+         WHERE cs_ship_mode_sk IS NULL
+           AND cs_sold_date_sk=d_date_sk
+           AND cs_item_sk=i_item_sk) foo
+GROUP BY channel, col_name, d_year, d_qoy, i_category
+ORDER BY channel, col_name, d_year, d_qoy, i_category
+limit 100;
+
+-- end query 1 in stream 0 using template query76.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query77.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query77.sql
new file mode 100644 (file)
index 0000000..9da7766
--- /dev/null
@@ -0,0 +1,108 @@
+-- start query 1 in stream 0 using template query77.tpl and seed 1819994127
+with ss as
+ (select s_store_sk,
+         sum(ss_ext_sales_price) as sales,
+         sum(ss_net_profit) as profit
+ from store_sales,
+      date_dim,
+      store
+ where ss_sold_date_sk = d_date_sk
+       and d_date between cast('2000-08-16' as date) 
+                  and (cast('2000-08-16' as date) +  interval '30' day) 
+       and ss_store_sk = s_store_sk
+ group by s_store_sk)
+ ,
+ sr as
+ (select s_store_sk,
+         sum(sr_return_amt) as returns,
+         sum(sr_net_loss) as profit_loss
+ from store_returns,
+      date_dim,
+      store
+ where sr_returned_date_sk = d_date_sk
+       and d_date between cast('2000-08-16' as date)
+                  and (cast('2000-08-16' as date) +  interval '30' day)
+       and sr_store_sk = s_store_sk
+ group by s_store_sk), 
+ cs as
+ (select cs_call_center_sk,
+        sum(cs_ext_sales_price) as sales,
+        sum(cs_net_profit) as profit
+ from catalog_sales,
+      date_dim
+ where cs_sold_date_sk = d_date_sk
+       and d_date between cast('2000-08-16' as date)
+                  and (cast('2000-08-16' as date) +  interval '30' day)
+ group by cs_call_center_sk 
+ ), 
+ cr as
+ (select cr_call_center_sk,
+         sum(cr_return_amount) as returns,
+         sum(cr_net_loss) as profit_loss
+ from catalog_returns,
+      date_dim
+ where cr_returned_date_sk = d_date_sk
+       and d_date between cast('2000-08-16' as date)
+                  and (cast('2000-08-16' as date) +  interval '30' day)
+ group by cr_call_center_sk
+ ), 
+ ws as
+ ( select wp_web_page_sk,
+        sum(ws_ext_sales_price) as sales,
+        sum(ws_net_profit) as profit
+ from web_sales,
+      date_dim,
+      web_page
+ where ws_sold_date_sk = d_date_sk
+       and d_date between cast('2000-08-16' as date)
+                  and (cast('2000-08-16' as date) +  interval '30' day)
+       and ws_web_page_sk = wp_web_page_sk
+ group by wp_web_page_sk), 
+ wr as
+ (select wp_web_page_sk,
+        sum(wr_return_amt) as returns,
+        sum(wr_net_loss) as profit_loss
+ from web_returns,
+      date_dim,
+      web_page
+ where wr_returned_date_sk = d_date_sk
+       and d_date between cast('2000-08-16' as date)
+                  and (cast('2000-08-16' as date) +  interval '30' day)
+       and wr_web_page_sk = wp_web_page_sk
+ group by wp_web_page_sk)
+  select  channel
+        , id
+        , sum(sales) as sales
+        , sum(returns) as returns
+        , sum(profit) as profit
+ from 
+ (select 'store channel' as channel
+        , ss.s_store_sk as id
+        , sales
+        , coalesce(returns, 0) as returns
+        , (profit - coalesce(profit_loss,0)) as profit
+ from   ss left join sr
+        on  ss.s_store_sk = sr.s_store_sk
+ union all
+ select 'catalog channel' as channel
+        , cs_call_center_sk as id
+        , sales
+        , returns
+        , (profit - profit_loss) as profit
+ from  cs
+       , cr
+ union all
+ select 'web channel' as channel
+        , ws.wp_web_page_sk as id
+        , sales
+        , coalesce(returns, 0) returns
+        , (profit - coalesce(profit_loss,0)) as profit
+ from   ws left join wr
+        on  ws.wp_web_page_sk = wr.wp_web_page_sk
+ ) x
+ group by rollup (channel, id)
+ order by channel
+         ,id
+ limit 100;
+
+-- end query 1 in stream 0 using template query77.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query78.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query78.sql
new file mode 100644 (file)
index 0000000..51edefc
--- /dev/null
@@ -0,0 +1,58 @@
+-- start query 1 in stream 0 using template query78.tpl and seed 1819994127
+with ws as
+  (select d_year AS ws_sold_year, ws_item_sk,
+    ws_bill_customer_sk ws_customer_sk,
+    sum(ws_quantity) ws_qty,
+    sum(ws_wholesale_cost) ws_wc,
+    sum(ws_sales_price) ws_sp
+   from web_sales
+   left join web_returns on wr_order_number=ws_order_number and ws_item_sk=wr_item_sk
+   join date_dim on ws_sold_date_sk = d_date_sk
+   where wr_order_number is null
+   group by d_year, ws_item_sk, ws_bill_customer_sk
+   ),
+cs as
+  (select d_year AS cs_sold_year, cs_item_sk,
+    cs_bill_customer_sk cs_customer_sk,
+    sum(cs_quantity) cs_qty,
+    sum(cs_wholesale_cost) cs_wc,
+    sum(cs_sales_price) cs_sp
+   from catalog_sales
+   left join catalog_returns on cr_order_number=cs_order_number and cs_item_sk=cr_item_sk
+   join date_dim on cs_sold_date_sk = d_date_sk
+   where cr_order_number is null
+   group by d_year, cs_item_sk, cs_bill_customer_sk
+   ),
+ss as
+  (select d_year AS ss_sold_year, ss_item_sk,
+    ss_customer_sk,
+    sum(ss_quantity) ss_qty,
+    sum(ss_wholesale_cost) ss_wc,
+    sum(ss_sales_price) ss_sp
+   from store_sales
+   left join store_returns on sr_ticket_number=ss_ticket_number and ss_item_sk=sr_item_sk
+   join date_dim on ss_sold_date_sk = d_date_sk
+   where sr_ticket_number is null
+   group by d_year, ss_item_sk, ss_customer_sk
+   )
+ select 
+ss_customer_sk,
+round(ss_qty/(coalesce(ws_qty,0)+coalesce(cs_qty,0)),2) ratio,
+ss_qty store_qty, ss_wc store_wholesale_cost, ss_sp store_sales_price,
+coalesce(ws_qty,0)+coalesce(cs_qty,0) other_chan_qty,
+coalesce(ws_wc,0)+coalesce(cs_wc,0) other_chan_wholesale_cost,
+coalesce(ws_sp,0)+coalesce(cs_sp,0) other_chan_sales_price
+from ss
+left join ws on (ws_sold_year=ss_sold_year and ws_item_sk=ss_item_sk and ws_customer_sk=ss_customer_sk)
+left join cs on (cs_sold_year=ss_sold_year and cs_item_sk=ss_item_sk and cs_customer_sk=ss_customer_sk)
+where (coalesce(ws_qty,0)>0 or coalesce(cs_qty, 0)>0) and ss_sold_year=2001
+order by 
+  ss_customer_sk,
+  ss_qty desc, ss_wc desc, ss_sp desc,
+  other_chan_qty,
+  other_chan_wholesale_cost,
+  other_chan_sales_price,
+  ratio
+limit 100;
+
+-- end query 1 in stream 0 using template query78.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query79.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query79.sql
new file mode 100644 (file)
index 0000000..72ae60c
--- /dev/null
@@ -0,0 +1,23 @@
+-- start query 1 in stream 0 using template query79.tpl and seed 2031708268
+select 
+  c_last_name,c_first_name,substr(s_city,1,30),ss_ticket_number,amt,profit
+  from
+   (select ss_ticket_number
+          ,ss_customer_sk
+          ,store.s_city
+          ,sum(ss_coupon_amt) amt
+          ,sum(ss_net_profit) profit
+    from store_sales,date_dim,store,household_demographics
+    where store_sales.ss_sold_date_sk = date_dim.d_date_sk
+    and store_sales.ss_store_sk = store.s_store_sk  
+    and store_sales.ss_hdemo_sk = household_demographics.hd_demo_sk
+    and (household_demographics.hd_dep_count = 0 or household_demographics.hd_vehicle_count > 3)
+    and date_dim.d_dow = 1
+    and date_dim.d_year in (1998,1998+1,1998+2) 
+    and store.s_number_employees between 200 and 295
+    group by ss_ticket_number,ss_customer_sk,ss_addr_sk,store.s_city) ms,customer
+    where ss_customer_sk = c_customer_sk
+ order by c_last_name,c_first_name,substr(s_city,1,30), profit
+limit 100;
+
+-- end query 1 in stream 0 using template query79.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query8.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query8.sql
new file mode 100644 (file)
index 0000000..6faf5d8
--- /dev/null
@@ -0,0 +1,108 @@
+-- start query 1 in stream 0 using template query8.tpl and seed 1766988859
+select  s_store_name
+      ,sum(ss_net_profit)
+ from store_sales
+     ,date_dim
+     ,store,
+     (select ca_zip
+     from (
+      SELECT substr(ca_zip,1,5) ca_zip
+      FROM customer_address
+      WHERE substr(ca_zip,1,5) IN (
+                          '47602','16704','35863','28577','83910','36201',
+                          '58412','48162','28055','41419','80332',
+                          '38607','77817','24891','16226','18410',
+                          '21231','59345','13918','51089','20317',
+                          '17167','54585','67881','78366','47770',
+                          '18360','51717','73108','14440','21800',
+                          '89338','45859','65501','34948','25973',
+                          '73219','25333','17291','10374','18829',
+                          '60736','82620','41351','52094','19326',
+                          '25214','54207','40936','21814','79077',
+                          '25178','75742','77454','30621','89193',
+                          '27369','41232','48567','83041','71948',
+                          '37119','68341','14073','16891','62878',
+                          '49130','19833','24286','27700','40979',
+                          '50412','81504','94835','84844','71954',
+                          '39503','57649','18434','24987','12350',
+                          '86379','27413','44529','98569','16515',
+                          '27287','24255','21094','16005','56436',
+                          '91110','68293','56455','54558','10298',
+                          '83647','32754','27052','51766','19444',
+                          '13869','45645','94791','57631','20712',
+                          '37788','41807','46507','21727','71836',
+                          '81070','50632','88086','63991','20244',
+                          '31655','51782','29818','63792','68605',
+                          '94898','36430','57025','20601','82080',
+                          '33869','22728','35834','29086','92645',
+                          '98584','98072','11652','78093','57553',
+                          '43830','71144','53565','18700','90209',
+                          '71256','38353','54364','28571','96560',
+                          '57839','56355','50679','45266','84680',
+                          '34306','34972','48530','30106','15371',
+                          '92380','84247','92292','68852','13338',
+                          '34594','82602','70073','98069','85066',
+                          '47289','11686','98862','26217','47529',
+                          '63294','51793','35926','24227','14196',
+                          '24594','32489','99060','49472','43432',
+                          '49211','14312','88137','47369','56877',
+                          '20534','81755','15794','12318','21060',
+                          '73134','41255','63073','81003','73873',
+                          '66057','51184','51195','45676','92696',
+                          '70450','90669','98338','25264','38919',
+                          '59226','58581','60298','17895','19489',
+                          '52301','80846','95464','68770','51634',
+                          '19988','18367','18421','11618','67975',
+                          '25494','41352','95430','15734','62585',
+                          '97173','33773','10425','75675','53535',
+                          '17879','41967','12197','67998','79658',
+                          '59130','72592','14851','43933','68101',
+                          '50636','25717','71286','24660','58058',
+                          '72991','95042','15543','33122','69280',
+                          '11912','59386','27642','65177','17672',
+                          '33467','64592','36335','54010','18767',
+                          '63193','42361','49254','33113','33159',
+                          '36479','59080','11855','81963','31016',
+                          '49140','29392','41836','32958','53163',
+                          '13844','73146','23952','65148','93498',
+                          '14530','46131','58454','13376','13378',
+                          '83986','12320','17193','59852','46081',
+                          '98533','52389','13086','68843','31013',
+                          '13261','60560','13443','45533','83583',
+                          '11489','58218','19753','22911','25115',
+                          '86709','27156','32669','13123','51933',
+                          '39214','41331','66943','14155','69998',
+                          '49101','70070','35076','14242','73021',
+                          '59494','15782','29752','37914','74686',
+                          '83086','34473','15751','81084','49230',
+                          '91894','60624','17819','28810','63180',
+                          '56224','39459','55233','75752','43639',
+                          '55349','86057','62361','50788','31830',
+                          '58062','18218','85761','60083','45484',
+                          '21204','90229','70041','41162','35390',
+                          '16364','39500','68908','26689','52868',
+                          '81335','40146','11340','61527','61794',
+                          '71997','30415','59004','29450','58117',
+                          '69952','33562','83833','27385','61860',
+                          '96435','48333','23065','32961','84919',
+                          '61997','99132','22815','56600','68730',
+                          '48017','95694','32919','88217','27116',
+                          '28239','58032','18884','16791','21343',
+                          '97462','18569','75660','15475')
+     intersect
+      select ca_zip
+      from (SELECT substr(ca_zip,1,5) ca_zip,count(*) cnt
+            FROM customer_address, customer
+            WHERE ca_address_sk = c_current_addr_sk and
+                  c_preferred_cust_flag='Y'
+            group by ca_zip
+            having count(*) > 10)A1)A2) V1
+ where ss_store_sk = s_store_sk
+  and ss_sold_date_sk = d_date_sk
+  and d_qoy = 2 and d_year = 1998
+  and (substr(s_zip,1,2) = substr(V1.ca_zip,1,2))
+ group by s_store_name
+ order by s_store_name
+ limit 100;
+
+-- end query 1 in stream 0 using template query8.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query80.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query80.sql
new file mode 100644 (file)
index 0000000..4471a88
--- /dev/null
@@ -0,0 +1,96 @@
+-- start query 1 in stream 0 using template query80.tpl and seed 1819994127
+with ssr as
+ (select  s_store_id as store_id,
+          sum(ss_ext_sales_price) as sales,
+          sum(coalesce(sr_return_amt, 0)) as returns,
+          sum(ss_net_profit - coalesce(sr_net_loss, 0)) as profit
+  from store_sales left outer join store_returns on
+         (ss_item_sk = sr_item_sk and ss_ticket_number = sr_ticket_number),
+     date_dim,
+     store,
+     item,
+     promotion
+ where ss_sold_date_sk = d_date_sk
+       and d_date between cast('2002-08-06' as date) 
+                  and (cast('2002-08-06' as date) +  interval '30' day)
+       and ss_store_sk = s_store_sk
+       and ss_item_sk = i_item_sk
+       and i_current_price > 50
+       and ss_promo_sk = p_promo_sk
+       and p_channel_tv = 'N'
+ group by s_store_id)
+ ,
+ csr as
+ (select  cp_catalog_page_id as catalog_page_id,
+          sum(cs_ext_sales_price) as sales,
+          sum(coalesce(cr_return_amount, 0)) as returns,
+          sum(cs_net_profit - coalesce(cr_net_loss, 0)) as profit
+  from catalog_sales left outer join catalog_returns on
+         (cs_item_sk = cr_item_sk and cs_order_number = cr_order_number),
+     date_dim,
+     catalog_page,
+     item,
+     promotion
+ where cs_sold_date_sk = d_date_sk
+       and d_date between cast('2002-08-06' as date)
+                  and (cast('2002-08-06' as date) +  interval '30' day)
+        and cs_catalog_page_sk = cp_catalog_page_sk
+       and cs_item_sk = i_item_sk
+       and i_current_price > 50
+       and cs_promo_sk = p_promo_sk
+       and p_channel_tv = 'N'
+group by cp_catalog_page_id)
+ ,
+ wsr as
+ (select  web_site_id,
+          sum(ws_ext_sales_price) as sales,
+          sum(coalesce(wr_return_amt, 0)) as returns,
+          sum(ws_net_profit - coalesce(wr_net_loss, 0)) as profit
+  from web_sales left outer join web_returns on
+         (ws_item_sk = wr_item_sk and ws_order_number = wr_order_number),
+     date_dim,
+     web_site,
+     item,
+     promotion
+ where ws_sold_date_sk = d_date_sk
+       and d_date between cast('2002-08-06' as date)
+                  and (cast('2002-08-06' as date) +  interval '30' day)
+        and ws_web_site_sk = web_site_sk
+       and ws_item_sk = i_item_sk
+       and i_current_price > 50
+       and ws_promo_sk = p_promo_sk
+       and p_channel_tv = 'N'
+group by web_site_id)
+  select  channel
+        , id
+        , sum(sales) as sales
+        , sum(returns) as returns
+        , sum(profit) as profit
+ from 
+ (select 'store channel' as channel
+        , 'store' || store_id as id
+        , sales
+        , returns
+        , profit
+ from   ssr
+ union all
+ select 'catalog channel' as channel
+        , 'catalog_page' || catalog_page_id as id
+        , sales
+        , returns
+        , profit
+ from  csr
+ union all
+ select 'web channel' as channel
+        , 'web_site' || web_site_id as id
+        , sales
+        , returns
+        , profit
+ from   wsr
+ ) x
+ group by rollup (channel, id)
+ order by channel
+         ,id
+ limit 100;
+
+-- end query 1 in stream 0 using template query80.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query81.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query81.sql
new file mode 100644 (file)
index 0000000..3483ab7
--- /dev/null
@@ -0,0 +1,31 @@
+-- start query 1 in stream 0 using template query81.tpl and seed 1819994127
+with customer_total_return as
+ (select cr_returning_customer_sk as ctr_customer_sk
+        ,ca_state as ctr_state, 
+       sum(cr_return_amt_inc_tax) as ctr_total_return
+ from catalog_returns
+     ,date_dim
+     ,customer_address
+ where cr_returned_date_sk = d_date_sk 
+   and d_year =1998
+   and cr_returning_addr_sk = ca_address_sk 
+ group by cr_returning_customer_sk
+         ,ca_state )
+  select  c_customer_id,c_salutation,c_first_name,c_last_name,ca_street_number,ca_street_name
+                   ,ca_street_type,ca_suite_number,ca_city,ca_county,ca_state,ca_zip,ca_country,ca_gmt_offset
+                  ,ca_location_type,ctr_total_return
+ from customer_total_return ctr1
+     ,customer_address
+     ,customer
+ where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2
+                         from customer_total_return ctr2 
+                         where ctr1.ctr_state = ctr2.ctr_state)
+       and ca_address_sk = c_current_addr_sk
+       and ca_state = 'TX'
+       and ctr1.ctr_customer_sk = c_customer_sk
+ order by c_customer_id,c_salutation,c_first_name,c_last_name,ca_street_number,ca_street_name
+                   ,ca_street_type,ca_suite_number,ca_city,ca_county,ca_state,ca_zip,ca_country,ca_gmt_offset
+                  ,ca_location_type,ctr_total_return
+ limit 100;
+
+-- end query 1 in stream 0 using template query81.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query82.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query82.sql
new file mode 100644 (file)
index 0000000..fd89678
--- /dev/null
@@ -0,0 +1,17 @@
+-- start query 1 in stream 0 using template query82.tpl and seed 55585014
+select  i_item_id
+       ,i_item_desc
+       ,i_current_price
+ from item, inventory, date_dim, store_sales
+ where i_current_price between 49 and 49+30
+ and inv_item_sk = i_item_sk
+ and d_date_sk=inv_date_sk
+ and d_date between cast('2001-01-28' as date) and (cast('2001-01-28' as date) +  interval '60' day)
+ and i_manufact_id in (80,675,292,17)
+ and inv_quantity_on_hand between 100 and 500
+ and ss_item_sk = i_item_sk
+ group by i_item_id,i_item_desc,i_current_price
+ order by i_item_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query82.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query83.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query83.sql
new file mode 100644 (file)
index 0000000..d7bd1ad
--- /dev/null
@@ -0,0 +1,67 @@
+-- start query 1 in stream 0 using template query83.tpl and seed 1930872976
+with sr_items as
+ (select i_item_id item_id,
+        sum(sr_return_quantity) sr_item_qty
+ from store_returns,
+      item,
+      date_dim
+ where sr_item_sk = i_item_sk
+ and   d_date    in 
+       (select d_date
+       from date_dim
+       where d_week_seq in 
+               (select d_week_seq
+               from date_dim
+         where d_date in (cast('2000-06-17' as date),cast('2000-08-22' as date),cast('2000-11-17' as date))))
+ and   sr_returned_date_sk   = d_date_sk
+ group by i_item_id),
+ cr_items as
+ (select i_item_id item_id,
+        sum(cr_return_quantity) cr_item_qty
+ from catalog_returns,
+      item,
+      date_dim
+ where cr_item_sk = i_item_sk
+ and   d_date    in 
+       (select d_date
+       from date_dim
+       where d_week_seq in 
+               (select d_week_seq
+               from date_dim
+         where d_date in (cast('2000-06-17' as date),cast('2000-08-22' as date),cast('2000-11-17' as date))))
+ and   cr_returned_date_sk   = d_date_sk
+ group by i_item_id),
+ wr_items as
+ (select i_item_id item_id,
+        sum(wr_return_quantity) wr_item_qty
+ from web_returns,
+      item,
+      date_dim
+ where wr_item_sk = i_item_sk
+ and   d_date    in 
+       (select d_date
+       from date_dim
+       where d_week_seq in 
+               (select d_week_seq
+               from date_dim
+               where d_date in (cast('2000-06-17' as date),cast('2000-08-22' as date),cast('2000-11-17' as date))))
+ and   wr_returned_date_sk   = d_date_sk
+ group by i_item_id)
+  select  sr_items.item_id
+       ,sr_item_qty
+       ,sr_item_qty/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0 * 100 sr_dev
+       ,cr_item_qty
+       ,cr_item_qty/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0 * 100 cr_dev
+       ,wr_item_qty
+       ,wr_item_qty/(sr_item_qty+cr_item_qty+wr_item_qty)/3.0 * 100 wr_dev
+       ,(sr_item_qty+cr_item_qty+wr_item_qty)/3.0 average
+ from sr_items
+     ,cr_items
+     ,wr_items
+ where sr_items.item_id=cr_items.item_id
+   and sr_items.item_id=wr_items.item_id 
+ order by sr_items.item_id
+         ,sr_item_qty
+ limit 100;
+
+-- end query 1 in stream 0 using template query83.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query84.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query84.sql
new file mode 100644 (file)
index 0000000..ba83c5a
--- /dev/null
@@ -0,0 +1,21 @@
+-- start query 1 in stream 0 using template query84.tpl and seed 1819994127
+select  c_customer_id as customer_id
+       , coalesce(c_last_name,'') || ', ' || coalesce(c_first_name,'') as customername
+ from customer
+     ,customer_address
+     ,customer_demographics
+     ,household_demographics
+     ,income_band
+     ,store_returns
+ where ca_city         =  'Hopewell'
+   and c_current_addr_sk = ca_address_sk
+   and ib_lower_bound   >=  37855
+   and ib_upper_bound   <=  37855 + 50000
+   and ib_income_band_sk = hd_income_band_sk
+   and cd_demo_sk = c_current_cdemo_sk
+   and hd_demo_sk = c_current_hdemo_sk
+   and sr_cdemo_sk = cd_demo_sk
+ order by c_customer_id
+ limit 100;
+
+-- end query 1 in stream 0 using template query84.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query85.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query85.sql
new file mode 100644 (file)
index 0000000..dc7932a
--- /dev/null
@@ -0,0 +1,84 @@
+-- start query 1 in stream 0 using template query85.tpl and seed 622697896
+select  substr(r_reason_desc,1,20)
+       ,avg(ws_quantity)
+       ,avg(wr_refunded_cash)
+       ,avg(wr_fee)
+ from web_sales, web_returns, web_page, customer_demographics cd1,
+      customer_demographics cd2, customer_address, date_dim, reason 
+ where ws_web_page_sk = wp_web_page_sk
+   and ws_item_sk = wr_item_sk
+   and ws_order_number = wr_order_number
+   and ws_sold_date_sk = d_date_sk and d_year = 2001
+   and cd1.cd_demo_sk = wr_refunded_cdemo_sk 
+   and cd2.cd_demo_sk = wr_returning_cdemo_sk
+   and ca_address_sk = wr_refunded_addr_sk
+   and r_reason_sk = wr_reason_sk
+   and
+   (
+    (
+     cd1.cd_marital_status = 'M'
+     and
+     cd1.cd_marital_status = cd2.cd_marital_status
+     and
+     cd1.cd_education_status = '4 yr Degree'
+     and 
+     cd1.cd_education_status = cd2.cd_education_status
+     and
+     ws_sales_price between 100.00 and 150.00
+    )
+   or
+    (
+     cd1.cd_marital_status = 'S'
+     and
+     cd1.cd_marital_status = cd2.cd_marital_status
+     and
+     cd1.cd_education_status = 'College' 
+     and
+     cd1.cd_education_status = cd2.cd_education_status
+     and
+     ws_sales_price between 50.00 and 100.00
+    )
+   or
+    (
+     cd1.cd_marital_status = 'D'
+     and
+     cd1.cd_marital_status = cd2.cd_marital_status
+     and
+     cd1.cd_education_status = 'Secondary'
+     and
+     cd1.cd_education_status = cd2.cd_education_status
+     and
+     ws_sales_price between 150.00 and 200.00
+    )
+   )
+   and
+   (
+    (
+     ca_country = 'United States'
+     and
+     ca_state in ('TX', 'VA', 'CA')
+     and ws_net_profit between 100 and 200  
+    )
+    or
+    (
+     ca_country = 'United States'
+     and
+     ca_state in ('AR', 'NE', 'MO')
+     and ws_net_profit between 150 and 300  
+    )
+    or
+    (
+     ca_country = 'United States'
+     and
+     ca_state in ('IA', 'MS', 'WA')
+     and ws_net_profit between 50 and 250  
+    )
+   )
+group by r_reason_desc
+order by substr(r_reason_desc,1,20)
+        ,avg(ws_quantity)
+        ,avg(wr_refunded_cash)
+        ,avg(wr_fee)
+limit 100;
+
+-- end query 1 in stream 0 using template query85.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query86.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query86.sql
new file mode 100644 (file)
index 0000000..9b65cbd
--- /dev/null
@@ -0,0 +1,26 @@
+-- start query 1 in stream 0 using template query86.tpl and seed 1819994127
+select   
+    sum(ws_net_paid) as total_sum
+   ,i_category
+   ,i_class
+   ,grouping(i_category)+grouping(i_class) as lochierarchy
+   ,rank() over (
+       partition by grouping(i_category)+grouping(i_class),
+       case when grouping(i_class) = 0 then i_category end 
+       order by sum(ws_net_paid) desc) as rank_within_parent
+ from
+    web_sales
+   ,date_dim       d1
+   ,item
+ where
+    d1.d_month_seq between 1215 and 1215+11
+ and d1.d_date_sk = ws_sold_date_sk
+ and i_item_sk  = ws_item_sk
+ group by rollup(i_category,i_class)
+ order by
+   lochierarchy desc,
+   case when lochierarchy = 0 then i_category end,
+   rank_within_parent
+ limit 100;
+
+-- end query 1 in stream 0 using template query86.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query87.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query87.sql
new file mode 100644 (file)
index 0000000..161e464
--- /dev/null
@@ -0,0 +1,23 @@
+-- start query 1 in stream 0 using template query87.tpl and seed 1819994127
+select count(*) 
+from ((select distinct c_last_name, c_first_name, d_date
+       from store_sales, date_dim, customer
+       where store_sales.ss_sold_date_sk = date_dim.d_date_sk
+         and store_sales.ss_customer_sk = customer.c_customer_sk
+         and d_month_seq between 1221 and 1221+11)
+       except
+      (select distinct c_last_name, c_first_name, d_date
+       from catalog_sales, date_dim, customer
+       where catalog_sales.cs_sold_date_sk = date_dim.d_date_sk
+         and catalog_sales.cs_bill_customer_sk = customer.c_customer_sk
+         and d_month_seq between 1221 and 1221+11)
+       except
+      (select distinct c_last_name, c_first_name, d_date
+       from web_sales, date_dim, customer
+       where web_sales.ws_sold_date_sk = date_dim.d_date_sk
+         and web_sales.ws_bill_customer_sk = customer.c_customer_sk
+         and d_month_seq between 1221 and 1221+11)
+) cool_cust
+;
+
+-- end query 1 in stream 0 using template query87.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query88.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query88.sql
new file mode 100644 (file)
index 0000000..895fff5
--- /dev/null
@@ -0,0 +1,94 @@
+-- start query 1 in stream 0 using template query88.tpl and seed 318176889
+select  *
+from
+ (select count(*) h8_30_to_9
+ from store_sales, household_demographics , time_dim, store
+ where ss_sold_time_sk = time_dim.t_time_sk   
+     and ss_hdemo_sk = household_demographics.hd_demo_sk 
+     and ss_store_sk = s_store_sk
+     and time_dim.t_hour = 8
+     and time_dim.t_minute >= 30
+     and ((household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2) or
+          (household_demographics.hd_dep_count = 4 and household_demographics.hd_vehicle_count<=4+2) or
+          (household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2)) 
+     and store.s_store_name = 'ese') s1,
+ (select count(*) h9_to_9_30 
+ from store_sales, household_demographics , time_dim, store
+ where ss_sold_time_sk = time_dim.t_time_sk
+     and ss_hdemo_sk = household_demographics.hd_demo_sk
+     and ss_store_sk = s_store_sk 
+     and time_dim.t_hour = 9 
+     and time_dim.t_minute < 30
+     and ((household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2) or
+          (household_demographics.hd_dep_count = 4 and household_demographics.hd_vehicle_count<=4+2) or
+          (household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2))
+     and store.s_store_name = 'ese') s2,
+ (select count(*) h9_30_to_10 
+ from store_sales, household_demographics , time_dim, store
+ where ss_sold_time_sk = time_dim.t_time_sk
+     and ss_hdemo_sk = household_demographics.hd_demo_sk
+     and ss_store_sk = s_store_sk
+     and time_dim.t_hour = 9
+     and time_dim.t_minute >= 30
+     and ((household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2) or
+          (household_demographics.hd_dep_count = 4 and household_demographics.hd_vehicle_count<=4+2) or
+          (household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2))
+     and store.s_store_name = 'ese') s3,
+ (select count(*) h10_to_10_30
+ from store_sales, household_demographics , time_dim, store
+ where ss_sold_time_sk = time_dim.t_time_sk
+     and ss_hdemo_sk = household_demographics.hd_demo_sk
+     and ss_store_sk = s_store_sk
+     and time_dim.t_hour = 10 
+     and time_dim.t_minute < 30
+     and ((household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2) or
+          (household_demographics.hd_dep_count = 4 and household_demographics.hd_vehicle_count<=4+2) or
+          (household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2))
+     and store.s_store_name = 'ese') s4,
+ (select count(*) h10_30_to_11
+ from store_sales, household_demographics , time_dim, store
+ where ss_sold_time_sk = time_dim.t_time_sk
+     and ss_hdemo_sk = household_demographics.hd_demo_sk
+     and ss_store_sk = s_store_sk
+     and time_dim.t_hour = 10 
+     and time_dim.t_minute >= 30
+     and ((household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2) or
+          (household_demographics.hd_dep_count = 4 and household_demographics.hd_vehicle_count<=4+2) or
+          (household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2))
+     and store.s_store_name = 'ese') s5,
+ (select count(*) h11_to_11_30
+ from store_sales, household_demographics , time_dim, store
+ where ss_sold_time_sk = time_dim.t_time_sk
+     and ss_hdemo_sk = household_demographics.hd_demo_sk
+     and ss_store_sk = s_store_sk 
+     and time_dim.t_hour = 11
+     and time_dim.t_minute < 30
+     and ((household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2) or
+          (household_demographics.hd_dep_count = 4 and household_demographics.hd_vehicle_count<=4+2) or
+          (household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2))
+     and store.s_store_name = 'ese') s6,
+ (select count(*) h11_30_to_12
+ from store_sales, household_demographics , time_dim, store
+ where ss_sold_time_sk = time_dim.t_time_sk
+     and ss_hdemo_sk = household_demographics.hd_demo_sk
+     and ss_store_sk = s_store_sk
+     and time_dim.t_hour = 11
+     and time_dim.t_minute >= 30
+     and ((household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2) or
+          (household_demographics.hd_dep_count = 4 and household_demographics.hd_vehicle_count<=4+2) or
+          (household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2))
+     and store.s_store_name = 'ese') s7,
+ (select count(*) h12_to_12_30
+ from store_sales, household_demographics , time_dim, store
+ where ss_sold_time_sk = time_dim.t_time_sk
+     and ss_hdemo_sk = household_demographics.hd_demo_sk
+     and ss_store_sk = s_store_sk
+     and time_dim.t_hour = 12
+     and time_dim.t_minute < 30
+     and ((household_demographics.hd_dep_count = 2 and household_demographics.hd_vehicle_count<=2+2) or
+          (household_demographics.hd_dep_count = 4 and household_demographics.hd_vehicle_count<=4+2) or
+          (household_demographics.hd_dep_count = 3 and household_demographics.hd_vehicle_count<=3+2))
+     and store.s_store_name = 'ese') s8
+;
+
+-- end query 1 in stream 0 using template query88.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query89.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query89.sql
new file mode 100644 (file)
index 0000000..3a275d4
--- /dev/null
@@ -0,0 +1,28 @@
+-- start query 1 in stream 0 using template query89.tpl and seed 1719819282
+select  *
+from(
+select i_category, i_class, i_brand,
+       s_store_name, s_company_name,
+       d_moy,
+       sum(ss_sales_price) sum_sales,
+       avg(sum(ss_sales_price)) over
+         (partition by i_category, i_brand, s_store_name, s_company_name)
+         avg_monthly_sales
+from item, store_sales, date_dim, store
+where ss_item_sk = i_item_sk and
+      ss_sold_date_sk = d_date_sk and
+      ss_store_sk = s_store_sk and
+      d_year in (2000) and
+        ((i_category in ('Home','Music','Books') and
+          i_class in ('glassware','classical','fiction')
+         )
+      or (i_category in ('Jewelry','Sports','Women') and
+          i_class in ('semi-precious','baseball','dresses') 
+        ))
+group by i_category, i_class, i_brand,
+         s_store_name, s_company_name, d_moy) tmp1
+where case when (avg_monthly_sales <> 0) then (abs(sum_sales - avg_monthly_sales) / avg_monthly_sales) else null end > 0.1
+order by sum_sales - avg_monthly_sales, s_store_name
+limit 100;
+
+-- end query 1 in stream 0 using template query89.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query9.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query9.sql
new file mode 100644 (file)
index 0000000..059b9c5
--- /dev/null
@@ -0,0 +1,51 @@
+-- start query 1 in stream 0 using template query9.tpl and seed 1490436826
+select case when (select count(*) 
+                  from store_sales 
+                  where ss_quantity between 1 and 20) > 98972190
+            then (select avg(ss_ext_discount_amt) 
+                  from store_sales 
+                  where ss_quantity between 1 and 20) 
+            else (select avg(ss_net_profit)
+                  from store_sales
+                  where ss_quantity between 1 and 20) end bucket1 ,
+       case when (select count(*)
+                  from store_sales
+                  where ss_quantity between 21 and 40) > 160856845
+            then (select avg(ss_ext_discount_amt)
+                  from store_sales
+                  where ss_quantity between 21 and 40) 
+            else (select avg(ss_net_profit)
+                  from store_sales
+                  where ss_quantity between 21 and 40) end bucket2,
+       case when (select count(*)
+                  from store_sales
+                  where ss_quantity between 41 and 60) > 12733327
+            then (select avg(ss_ext_discount_amt)
+                  from store_sales
+                  where ss_quantity between 41 and 60)
+            else (select avg(ss_net_profit)
+                  from store_sales
+                  where ss_quantity between 41 and 60) end bucket3,
+       case when (select count(*)
+                  from store_sales
+                  where ss_quantity between 61 and 80) > 96251173
+            then (select avg(ss_ext_discount_amt)
+                  from store_sales
+                  where ss_quantity between 61 and 80)
+            else (select avg(ss_net_profit)
+                  from store_sales
+                  where ss_quantity between 61 and 80) end bucket4,
+       case when (select count(*)
+                  from store_sales
+                  where ss_quantity between 81 and 100) > 80049606
+            then (select avg(ss_ext_discount_amt)
+                  from store_sales
+                  where ss_quantity between 81 and 100)
+            else (select avg(ss_net_profit)
+                  from store_sales
+                  where ss_quantity between 81 and 100) end bucket5
+from reason
+where r_reason_sk = 1
+;
+
+-- end query 1 in stream 0 using template query9.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query90.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query90.sql
new file mode 100644 (file)
index 0000000..366f070
--- /dev/null
@@ -0,0 +1,22 @@
+-- start query 1 in stream 0 using template query90.tpl and seed 2031708268
+select  cast(amc as decimal(15,4))/cast(pmc as decimal(15,4)) am_pm_ratio
+ from ( select count(*) amc
+       from web_sales, household_demographics , time_dim, web_page
+       where ws_sold_time_sk = time_dim.t_time_sk
+         and ws_ship_hdemo_sk = household_demographics.hd_demo_sk
+         and ws_web_page_sk = web_page.wp_web_page_sk
+         and time_dim.t_hour between 9 and 9+1
+         and household_demographics.hd_dep_count = 3
+         and web_page.wp_char_count between 5000 and 5200) at,
+      ( select count(*) pmc
+       from web_sales, household_demographics , time_dim, web_page
+       where ws_sold_time_sk = time_dim.t_time_sk
+         and ws_ship_hdemo_sk = household_demographics.hd_demo_sk
+         and ws_web_page_sk = web_page.wp_web_page_sk
+         and time_dim.t_hour between 16 and 16+1
+         and household_demographics.hd_dep_count = 3
+         and web_page.wp_char_count between 5000 and 5200) pt
+ order by am_pm_ratio
+ limit 100;
+
+-- end query 1 in stream 0 using template query90.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query91.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query91.sql
new file mode 100644 (file)
index 0000000..057c76b
--- /dev/null
@@ -0,0 +1,31 @@
+-- start query 1 in stream 0 using template query91.tpl and seed 1930872976
+select  
+        cc_call_center_id Call_Center,
+        cc_name Call_Center_Name,
+        cc_manager Manager,
+        sum(cr_net_loss) Returns_Loss
+from
+        call_center,
+        catalog_returns,
+        date_dim,
+        customer,
+        customer_address,
+        customer_demographics,
+        household_demographics
+where
+        cr_call_center_sk       = cc_call_center_sk
+and     cr_returned_date_sk     = d_date_sk
+and     cr_returning_customer_sk= c_customer_sk
+and     cd_demo_sk              = c_current_cdemo_sk
+and     hd_demo_sk              = c_current_hdemo_sk
+and     ca_address_sk           = c_current_addr_sk
+and     d_year                  = 2000 
+and     d_moy                   = 12
+and     ( (cd_marital_status       = 'M' and cd_education_status     = 'Unknown')
+        or(cd_marital_status       = 'W' and cd_education_status     = 'Advanced Degree'))
+and     hd_buy_potential like 'Unknown%'
+and     ca_gmt_offset           = -7
+group by cc_call_center_id,cc_name,cc_manager,cd_marital_status,cd_education_status
+order by sum(cr_net_loss) desc;
+
+-- end query 1 in stream 0 using template query91.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query92.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query92.sql
new file mode 100644 (file)
index 0000000..547599f
--- /dev/null
@@ -0,0 +1,30 @@
+-- start query 1 in stream 0 using template query92.tpl and seed 2031708268
+select  
+   sum(ws_ext_discount_amt)  as "Excess Discount Amount" 
+from 
+    web_sales 
+   ,item 
+   ,date_dim
+where
+i_manufact_id = 356
+and i_item_sk = ws_item_sk 
+and d_date between cast('2001-03-12' as date) and 
+        (cast('2001-03-12' as date) + interval '90' day)
+and d_date_sk = ws_sold_date_sk 
+and ws_ext_discount_amt  
+     > ( 
+         SELECT 
+            1.3 * avg(ws_ext_discount_amt) 
+         FROM 
+            web_sales 
+           ,date_dim
+         WHERE 
+              ws_item_sk = i_item_sk 
+          and d_date between cast('2001-03-12' as date) and
+                             (cast('2001-03-12' as date) + interval '90' day)
+          and d_date_sk = ws_sold_date_sk 
+      ) 
+order by sum(ws_ext_discount_amt)
+limit 100;
+
+-- end query 1 in stream 0 using template query92.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query93.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query93.sql
new file mode 100644 (file)
index 0000000..ed0b427
--- /dev/null
@@ -0,0 +1,18 @@
+-- start query 1 in stream 0 using template query93.tpl and seed 1200409435
+select  ss_customer_sk
+            ,sum(act_sales) sumsales
+      from (select ss_item_sk
+                  ,ss_ticket_number
+                  ,ss_customer_sk
+                  ,case when sr_return_quantity is not null then (ss_quantity-sr_return_quantity)*ss_sales_price
+                                                            else (ss_quantity*ss_sales_price) end act_sales
+            from store_sales left outer join store_returns on (sr_item_sk = ss_item_sk
+                                                               and sr_ticket_number = ss_ticket_number)
+                ,reason
+            where sr_reason_sk = r_reason_sk
+              and r_reason_desc = 'reason 66') t
+      group by ss_customer_sk
+      order by sumsales, ss_customer_sk
+limit 100;
+
+-- end query 1 in stream 0 using template query93.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query94.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query94.sql
new file mode 100644 (file)
index 0000000..909281d
--- /dev/null
@@ -0,0 +1,29 @@
+-- start query 1 in stream 0 using template query94.tpl and seed 2031708268
+select  
+   count(distinct ws_order_number) as "order count"
+  ,sum(ws_ext_ship_cost) as "total shipping cost"
+  ,sum(ws_net_profit) as "total net profit"
+from
+   web_sales ws1
+  ,date_dim
+  ,customer_address
+  ,web_site
+where
+    d_date between cast('1999-4-01' as date) and 
+           (cast('1999-4-01' as date) + interval '60' day)
+and ws1.ws_ship_date_sk = d_date_sk
+and ws1.ws_ship_addr_sk = ca_address_sk
+and ca_state = 'NE'
+and ws1.ws_web_site_sk = web_site_sk
+and web_company_name = 'pri'
+and exists (select *
+            from web_sales ws2
+            where ws1.ws_order_number = ws2.ws_order_number
+              and ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk)
+and not exists(select *
+               from web_returns wr1
+               where ws1.ws_order_number = wr1.wr_order_number)
+order by count(distinct ws_order_number)
+limit 100;
+
+-- end query 1 in stream 0 using template query94.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query95.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query95.sql
new file mode 100644 (file)
index 0000000..e732034
--- /dev/null
@@ -0,0 +1,32 @@
+-- start query 1 in stream 0 using template query95.tpl and seed 2031708268
+with ws_wh as
+(select ws1.ws_order_number,ws1.ws_warehouse_sk wh1,ws2.ws_warehouse_sk wh2
+ from web_sales ws1,web_sales ws2
+ where ws1.ws_order_number = ws2.ws_order_number
+   and ws1.ws_warehouse_sk <> ws2.ws_warehouse_sk)
+ select  
+   count(distinct ws_order_number) as "order count"
+  ,sum(ws_ext_ship_cost) as "total shipping cost"
+  ,sum(ws_net_profit) as "total net profit"
+from
+   web_sales ws1
+  ,date_dim
+  ,customer_address
+  ,web_site
+where
+    d_date between cast('2002-4-01' as date) and 
+           (cast('2002-4-01' as date) + interval '60' day)
+and ws1.ws_ship_date_sk = d_date_sk
+and ws1.ws_ship_addr_sk = ca_address_sk
+and ca_state = 'AL'
+and ws1.ws_web_site_sk = web_site_sk
+and web_company_name = 'pri'
+and ws1.ws_order_number in (select ws_order_number
+                            from ws_wh)
+and ws1.ws_order_number in (select wr_order_number
+                            from web_returns,ws_wh
+                            where wr_order_number = ws_wh.ws_order_number)
+order by count(distinct ws_order_number)
+limit 100;
+
+-- end query 1 in stream 0 using template query95.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query96.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query96.sql
new file mode 100644 (file)
index 0000000..90be5df
--- /dev/null
@@ -0,0 +1,16 @@
+-- start query 1 in stream 0 using template query96.tpl and seed 1819994127
+select  count(*) 
+from store_sales
+    ,household_demographics 
+    ,time_dim, store
+where ss_sold_time_sk = time_dim.t_time_sk   
+    and ss_hdemo_sk = household_demographics.hd_demo_sk 
+    and ss_store_sk = s_store_sk
+    and time_dim.t_hour = 16
+    and time_dim.t_minute >= 30
+    and household_demographics.hd_dep_count = 6
+    and store.s_store_name = 'ese'
+order by count(*)
+limit 100;
+
+-- end query 1 in stream 0 using template query96.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query97.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query97.sql
new file mode 100644 (file)
index 0000000..a063214
--- /dev/null
@@ -0,0 +1,25 @@
+-- start query 1 in stream 0 using template query97.tpl and seed 1819994127
+with ssci as (
+select ss_customer_sk customer_sk
+      ,ss_item_sk item_sk
+from store_sales,date_dim
+where ss_sold_date_sk = d_date_sk
+  and d_month_seq between 1190 and 1190 + 11
+group by ss_customer_sk
+        ,ss_item_sk),
+csci as(
+ select cs_bill_customer_sk customer_sk
+      ,cs_item_sk item_sk
+from catalog_sales,date_dim
+where cs_sold_date_sk = d_date_sk
+  and d_month_seq between 1190 and 1190 + 11
+group by cs_bill_customer_sk
+        ,cs_item_sk)
+ select  sum(case when ssci.customer_sk is not null and csci.customer_sk is null then 1 else 0 end) store_only
+      ,sum(case when ssci.customer_sk is null and csci.customer_sk is not null then 1 else 0 end) catalog_only
+      ,sum(case when ssci.customer_sk is not null and csci.customer_sk is not null then 1 else 0 end) store_and_catalog
+from ssci full outer join csci on (ssci.customer_sk=csci.customer_sk
+                               and ssci.item_sk = csci.item_sk)
+limit 100;
+
+-- end query 1 in stream 0 using template query97.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query98.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query98.sql
new file mode 100644 (file)
index 0000000..ef40558
--- /dev/null
@@ -0,0 +1,33 @@
+-- start query 1 in stream 0 using template query98.tpl and seed 345591136
+select i_item_id
+      ,i_item_desc 
+      ,i_category 
+      ,i_class 
+      ,i_current_price
+      ,sum(ss_ext_sales_price) as itemrevenue 
+      ,sum(ss_ext_sales_price)*100/sum(sum(ss_ext_sales_price)) over
+          (partition by i_class) as revenueratio
+from   
+       store_sales
+       ,item 
+       ,date_dim
+where 
+       ss_item_sk = i_item_sk 
+       and i_category in ('Home', 'Sports', 'Men')
+       and ss_sold_date_sk = d_date_sk
+       and d_date between cast('2002-01-05' as date) 
+                               and (cast('2002-01-05' as date) + interval '30' day)
+group by 
+       i_item_id
+        ,i_item_desc 
+        ,i_category
+        ,i_class
+        ,i_current_price
+order by 
+       i_category
+        ,i_class
+        ,i_item_id
+        ,i_item_desc
+        ,revenueratio;
+
+-- end query 1 in stream 0 using template query98.tpl
diff --git a/ceph/src/s3select/TPCDS/sample-queries-tpcds/query99.sql b/ceph/src/s3select/TPCDS/sample-queries-tpcds/query99.sql
new file mode 100644 (file)
index 0000000..d6dfb4f
--- /dev/null
@@ -0,0 +1,35 @@
+-- start query 1 in stream 0 using template query99.tpl and seed 1819994127
+select  
+   substr(w_warehouse_name,1,20)
+  ,sm_type
+  ,cc_name
+  ,sum(case when (cs_ship_date_sk - cs_sold_date_sk <= 30 ) then 1 else 0 end)  as "30 days" 
+  ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 30) and 
+                 (cs_ship_date_sk - cs_sold_date_sk <= 60) then 1 else 0 end )  as "31-60 days" 
+  ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 60) and 
+                 (cs_ship_date_sk - cs_sold_date_sk <= 90) then 1 else 0 end)  as "61-90 days" 
+  ,sum(case when (cs_ship_date_sk - cs_sold_date_sk > 90) and
+                 (cs_ship_date_sk - cs_sold_date_sk <= 120) then 1 else 0 end)  as "91-120 days" 
+  ,sum(case when (cs_ship_date_sk - cs_sold_date_sk  > 120) then 1 else 0 end)  as ">120 days" 
+from
+   catalog_sales
+  ,warehouse
+  ,ship_mode
+  ,call_center
+  ,date_dim
+where
+    d_month_seq between 1178 and 1178 + 11
+and cs_ship_date_sk   = d_date_sk
+and cs_warehouse_sk   = w_warehouse_sk
+and cs_ship_mode_sk   = sm_ship_mode_sk
+and cs_call_center_sk = cc_call_center_sk
+group by
+   substr(w_warehouse_name,1,20)
+  ,sm_type
+  ,cc_name
+order by substr(w_warehouse_name,1,20)
+        ,sm_type
+        ,cc_name
+limit 100;
+
+-- end query 1 in stream 0 using template query99.tpl
diff --git a/ceph/src/s3select/TPCDS/tpcds_functions.bash b/ceph/src/s3select/TPCDS/tpcds_functions.bash
new file mode 100644 (file)
index 0000000..67a64ff
--- /dev/null
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+run_tpcds()
+{
+## END_POINT_IP=172.21.48.86 // RGW end point ip (local or remote)
+## SCALE (2-1000) the bigger the SCALE, the longer it takes, and also thee more space is taken.
+## the `sleep 20` is for the HADOOP. it needs some wait time, otherwise it may get into "safe mode" and will abort execution
+
+## the following command executed within a dedicated container, it will connect the HADOOP to a running RGW, it will boot HADOOP, and will run the TPCDS data-set generator.
+## the results reside on CEPH object storage.
+sudo docker run --name  tpcds_generate --rm --env SCALE=2 --env END_POINT_IP=172.21.48.86 -it galsl/hadoop:presto_hive_conn  sh -c \
+'/work/generate_key.bash;
+. /etc/bashrc;
+deploy_ceph_s3a_ip $END_POINT_IP;
+start_hadoop;
+sleep 20;
+start_tpcds;'
+
+}
+
+move_from_tpcds_bucket_to_hive_bucket()
+{
+## for the case it needs to move into different bucket(where trino is point at)
+## its is also possible to chage the `create table ... external_location = ...` statements
+
+aws s3 sync s3://tpcds2 s3://hive
+}
+
+trino_load_all_tpcds_tables_into_external()
+{
+## running create_tpcds_tables.sql, the "create_tpcds_tables.sql" should reside in trino container
+sudo docker exec -it trino /bin/bash -c 'time trino --catalog hive --schema cephs3 -f create_tpcds_tables.sql'
+}
+
+trino_show_tables()
+{
+## running any SQL statement in Trino client.
+sudo docker exec -it trino /bin/bash -c 'trino --catalog hive --schema cephs3 --execute "show tables;";'
+}
+
diff --git a/ceph/src/s3select/container/trino/hms_trino.yaml b/ceph/src/s3select/container/trino/hms_trino.yaml
new file mode 100644 (file)
index 0000000..42d22f8
--- /dev/null
@@ -0,0 +1,31 @@
+version: '3'
+services:
+  hms:
+    image: galsl/hms:dev
+    container_name: hms
+    environment:
+      # S3_ENDPOINT the CEPH/RGW end-point-url 
+      - S3_ENDPOINT=http://10.0.209.201:80
+      - S3_ACCESS_KEY=abc1
+      - S3_SECRET_KEY=abc1
+    # the container starts with booting the hive metastore
+    command: sh -c '. ~/.bashrc; start_hive_metastore'
+    ports:
+      - 9083:9083
+    networks:
+      - trino_hms
+
+  trino:
+    image: trinodb/trino
+    container_name: trino
+    volumes:
+      # the trino directory contains the necessary configuration
+      - ./trino:/etc/trino
+    ports:
+      - 8080:8080
+    networks:
+      - trino_hms
+
+networks:
+  trino_hms:
+
diff --git a/ceph/src/s3select/container/trino/run_trino_on_ceph.bash b/ceph/src/s3select/container/trino/run_trino_on_ceph.bash
new file mode 100644 (file)
index 0000000..a9b1583
--- /dev/null
@@ -0,0 +1,86 @@
+#!/bin/bash
+
+root_dir()
+{
+  cd $(git rev-parse --show-toplevel)
+}
+
+modify_end_point_on_hive_properties()
+{
+#not in use
+return;
+#TODO if ./trino/catalog/hive.properties exist
+
+  [ $# -lt 1 ] && echo type s3-endpoint-url && return
+  root_dir
+  export S3_ENDPOINT=$1
+  cat container/trino/trino/catalog/hive.properties  | awk -v x=${S3_ENDPOINT:-NO_SET} '{if(/hive.s3.endpoint/){print "hive.s3.endpoint="x"\n";} else {print $0;}}' > /tmp/hive.properties
+  cp /tmp/hive.properties container/trino/trino/catalog/hive.properties
+  cat ./container/trino/hms_trino.yaml | awk -v x=${S3_ENDPOINT:-NOT_SET} '{if(/[ *]- S3_ENDPOINT/){print "\t- S3_ENDPOINT="x"\n";} else {print $0;}}' > /tmp/hms_trino.yaml
+  cp /tmp/hms_trino.yaml ./container/trino/hms_trino.yaml
+  cd -
+}
+
+trino_exec_command()
+{
+## run SQL statement on trino 
+  sudo docker exec -it trino /bin/bash -c "time trino --catalog hive --schema cephs3 --execute \"$@\""
+}
+
+boot_trino_hms()
+{
+  root_dir
+  [ -z ${S3_ENDPOINT} ] && echo "missing end-variable S3_ENDPOINT (URL)" && return
+  [ -z ${S3_ACCESS_KEY} ] && echo missing end-variable S3_ACCESS_KEY && return
+  [ -z ${S3_SECRET_KEY} ] && echo missing end-variable S3_SECRET_KEY && return
+
+  # modify hms_trino.yaml according to user setup (environment variables)
+  cat ./container/trino/hms_trino.yaml | \
+  awk -v x=${S3_ENDPOINT:-NOT_SET} '{if(/- S3_ENDPOINT/){print "      - S3_ENDPOINT="x;} else {print $0;}}' | \
+  awk -v x=${S3_ACCESS_KEY:-NOT_SET} '{if(/- S3_ACCESS_KEY/){print "      - S3_ACCESS_KEY="x;} else {print $0;}}' | \
+  awk -v x=${S3_SECRET_KEY:-NOT_SET} '{if(/- S3_SECRET_KEY/){print "      - S3_SECRET_KEY="x;} else {print $0;}}' > /tmp/hms_trino.yaml
+  cp /tmp/hms_trino.yaml ./container/trino/hms_trino.yaml
+
+
+
+  # modify hive.properties according to user setup (environment variables)
+  cat container/trino/trino/catalog/hive.properties | \
+  awk -v x=${S3_ENDPOINT:-NO_SET} '{if(/hive.s3.endpoint/){print "hive.s3.endpoint="x"\n";} else {print $0;}}' | \
+  awk -v x=${S3_ACCESS_KEY:-NO_SET} '{if(/hive.s3.aws-access-key/){print "hive.s3.aws-access-key="x;} else {print $0;}}' | \
+  awk -v x=${S3_SECRET_KEY:-NO_SET} '{if(/hive.s3.aws-secret-key/){print "hive.s3.aws-secret-key="x;} else {print $0;}}' > /tmp/hive.properties
+  cp /tmp/hive.properties ./container/trino/trino/catalog/hive.properties
+
+  sudo docker compose -f ./container/trino/hms_trino.yaml up -d
+  cd -
+}
+
+shutdown_trino_hms()
+{
+  root_dir
+  sudo docker compose -f ./container/trino/hms_trino.yaml down
+  cd -
+}
+
+trino_create_table()
+{
+table_name=$1
+create_table_comm="create table hive.cephs3.${table_name}(c1 varchar,c2 varchar,c3 varchar,c4 varchar, c5 varchar,c6 varchar,c7 varchar,c8 varchar,c9 varchar,c10 varchar)
+ WITH ( external_location = 's3a://hive/warehouse/cephs3/${table_name}/',format = 'TEXTFILE',textfile_field_separator = ',');"
+sudo docker exec -it trino /bin/bash -c "trino --catalog hive --schema cephs3 --execute \"${create_table_comm}\""
+}
+
+tpcds_cli()
+{
+## a CLI example for generating TPCDS data
+sudo docker run --env S3_ENDPOINT=172.17.0.1:8000 --env S3_ACCESS_KEY=b2345678901234567890 --env S3_SECRET_KEY=b234567890123456789012345678901234567890 --env BUCKET_NAME=hive --env SCALE=2 -it galsl/hadoop:tpcds bash -c '/root/run_tpcds_with_scale'
+}
+
+update_table_external_location()
+{
+root_dir
+[ -z ${BUCKET_NAME} ] && echo need to define BUCKET_NAME && return
+[ -z ${SCALE} ] && echo need to define SCALE && return
+
+cat TPCDS/ddl/create_tpcds_tables.sql  | sed "s/tpcds2\/4/${BUCKET_NAME}\/SCALE_${SCALE}/"
+}
diff --git a/ceph/src/s3select/container/trino/trino/catalog/hive.properties b/ceph/src/s3select/container/trino/trino/catalog/hive.properties
new file mode 100644 (file)
index 0000000..645948f
--- /dev/null
@@ -0,0 +1,33 @@
+connector.name=hive
+hive.metastore.uri=thrift://hms:9083 
+
+#hive.metastore.warehouse.dir=s3a://hive/
+
+hive.allow-drop-table=true
+hive.allow-rename-table=true
+hive.allow-add-column=true
+hive.allow-drop-column=true
+hive.allow-rename-column=true
+
+hive.non-managed-table-writes-enabled=true
+hive.s3select-pushdown.enabled=true
+hive.s3.aws-access-key=abc1
+hive.s3.aws-secret-key=abc1
+
+# should modify per s3-endpoint-url
+hive.s3.endpoint=http://10.0.209.201:80
+
+
+
+
+
+
+
+
+#hive.s3.max-connections=1
+#hive.s3select-pushdown.max-connections=1
+
+hive.s3.connect-timeout=100s
+hive.s3.socket-timeout=100s
+hive.max-splits-per-second=10000
+hive.max-split-size=128MB
diff --git a/ceph/src/s3select/container/trino/trino/config.properties b/ceph/src/s3select/container/trino/trino/config.properties
new file mode 100644 (file)
index 0000000..a11cba3
--- /dev/null
@@ -0,0 +1,5 @@
+#single node install config
+coordinator=true
+node-scheduler.include-coordinator=true
+http-server.http.port=8080
+discovery.uri=http://localhost:8080
diff --git a/ceph/src/s3select/container/trino/trino/jvm.config b/ceph/src/s3select/container/trino/trino/jvm.config
new file mode 100644 (file)
index 0000000..47e9e31
--- /dev/null
@@ -0,0 +1,19 @@
+-server
+-agentpath:/usr/lib/trino/bin/libjvmkill.so
+-XX:InitialRAMPercentage=80
+-XX:MaxRAMPercentage=80
+-XX:G1HeapRegionSize=32M
+-XX:+ExplicitGCInvokesConcurrent
+-XX:+HeapDumpOnOutOfMemoryError
+-XX:+ExitOnOutOfMemoryError
+-XX:-OmitStackTraceInFastThrow
+-XX:ReservedCodeCacheSize=256M
+-XX:PerMethodRecompilationCutoff=10000
+-XX:PerBytecodeRecompilationCutoff=10000
+-Djdk.attach.allowAttachSelf=true
+-Djdk.nio.maxCachedBufferSize=2000000
+# Improve AES performance for S3, etc. on ARM64 (JDK-8271567)
+-XX:+UnlockDiagnosticVMOptions
+-XX:+UseAESCTRIntrinsics
+# Disable Preventive GC for performance reasons (JDK-8293861)
+-XX:-G1UsePreventiveGC
diff --git a/ceph/src/s3select/container/trino/trino/log.properties b/ceph/src/s3select/container/trino/trino/log.properties
new file mode 100644 (file)
index 0000000..abee45e
--- /dev/null
@@ -0,0 +1,2 @@
+# Enable verbose logging from Trino
+#io.trino=DEBUG
diff --git a/ceph/src/s3select/container/trino/trino/node.properties b/ceph/src/s3select/container/trino/trino/node.properties
new file mode 100644 (file)
index 0000000..5b02ff7
--- /dev/null
@@ -0,0 +1,2 @@
+node.environment=docker
+node.data-dir=/data/trino
index 3a4a559336a7bfbc661d70c56b846a57ba984063..71aff3d01a56c7a73770254e4acc5f05d39ee438 100644 (file)
@@ -385,11 +385,14 @@ int process_json_query(const char* input_query,const char* fname)
   std::string buff(BUFFER_SIZE,0);
   std::string result;
 
-  size_t read_sz = input_file_stream.readsome(buff.data(),BUFFER_SIZE);
 
+  size_t read_sz = input_file_stream.read(buff.data(),BUFFER_SIZE).gcount();
+  int chunk_count=0;
+  size_t bytes_read=0;
   while(read_sz)
   {
-    std::cout << "read next chunk " << read_sz << std::endl;
+    bytes_read += read_sz;
+    std::cout << "read next chunk " << chunk_count++ << ":" << read_sz << ":" << bytes_read << "\r";
     result.clear();
 
     try{
@@ -403,7 +406,10 @@ int process_json_query(const char* input_query,const char* fname)
       }
   }
 
-    std::cout << result << std::endl;
+    if(result.size())
+    {
+       std::cout << result << std::endl;
+    }
  
     if(status<0)
     {
@@ -415,7 +421,7 @@ int process_json_query(const char* input_query,const char* fname)
       std::cout << "json processing reached limit " << std::endl;
       break;
     }
-    read_sz = input_file_stream.readsome(buff.data(),BUFFER_SIZE);  
+    read_sz = input_file_stream.read(buff.data(),BUFFER_SIZE).gcount();  
   }
   try{
        result.clear();
@@ -430,7 +436,6 @@ int process_json_query(const char* input_query,const char* fname)
   }
 
   std::cout << result << std::endl;
-
   return 0;
 }
 
@@ -621,7 +626,7 @@ int run_on_single_query(const char* fname, const char* query)
   std::string buff(BUFFER_SIZE,0);
   while (1)
   {
-    size_t read_sz = input_file_stream.readsome(buff.data(),BUFFER_SIZE);
+    size_t read_sz = input_file_stream.read(buff.data(),BUFFER_SIZE).gcount();
 
     status = awscli->run_s3select(query, buff.data(), read_sz, file_sz);
     if(status<0)
index 2ff410f6aa05883880a2ab0b79754d2dfb7b2fc6..3ac11135130eabdac7ad96e5f9f8bfd1d2bb68a7 100644 (file)
@@ -227,6 +227,18 @@ struct push_cast_expr : public base_ast_builder
 };
 static push_cast_expr g_push_cast_expr;
 
+struct push_cast_decimal_expr : public base_ast_builder
+{
+  void builder(s3select* self, const char* a, const char* b) const;
+};
+static push_cast_decimal_expr g_push_cast_decimal_expr;
+
+struct push_decimal_operator : public base_ast_builder
+{
+  void builder(s3select* self, const char* a, const char* b) const;
+};
+static push_decimal_operator g_push_decimal_operator;
+
 struct push_data_type : public base_ast_builder
 {
   void builder(s3select* self, const char* a, const char* b) const;
@@ -430,6 +442,12 @@ struct push_time_to_string_dynamic : public base_ast_builder
 };
 static push_time_to_string_dynamic g_push_time_to_string_dynamic;
 
+struct push_string_to_time_constant : public base_ast_builder
+{
+  void builder(s3select* self, const char* a, const char* b) const;
+};
+static push_string_to_time_constant g_push_string_to_time_constant;
+
 struct push_array_number :  public base_ast_builder
 {
   void builder(s3select* self, const char* a, const char* b) const;
@@ -457,14 +475,25 @@ private:
   s3select_functions m_s3select_functions;
   std::string error_description;
   s3select_allocator m_s3select_allocator;
-  bool aggr_flow;
-  bool m_json_query;
+  bool aggr_flow = false;
+  bool m_json_query = false;
   std::set<base_statement*> m_ast_nodes_to_delete;
+  base_function* m_to_timestamp_for_clean = nullptr;
 
 #define BOOST_BIND_ACTION( push_name ) boost::bind( &push_name::operator(), g_ ## push_name, const_cast<s3select*>(&self), _1, _2)
 
 public:
 
+  std::set<base_statement*>& get_ast_nodes_to_delete()
+  {
+    return m_ast_nodes_to_delete;
+  }
+
+  base_function* & get_to_timestamp_for_clean()
+  {
+    return m_to_timestamp_for_clean;
+  }
+
   actionQ* getAction()
   {
     return &m_actionQ;
@@ -664,6 +693,10 @@ public:
        {//the json_variable_access object is allocated by S3SELECT_NEW. this object contains stl-vector that should be free 
                x.first->~json_variable_access();
        }
+  if(m_to_timestamp_for_clean)
+  { 
+    m_to_timestamp_for_clean->dtor();
+  }
   }
 
 #define JSON_ROOT_OBJECT "s3object[*]"
@@ -764,13 +797,20 @@ public:
 
       arithmetic_argument = (float_number)[BOOST_BIND_ACTION(push_float_number)] |  (number)[BOOST_BIND_ACTION(push_number)] | (json_variable_name)[BOOST_BIND_ACTION(push_json_variable)] |
                            (column_pos)[BOOST_BIND_ACTION(push_column_pos)] |
-                            (string)[BOOST_BIND_ACTION(push_string)] | (datediff) | (dateadd) | (extract) | (time_to_string_constant) | (time_to_string_dynamic) |
+                            (string)[BOOST_BIND_ACTION(push_string)] | (backtick_string) | (datediff) | (dateadd) | (extract) | (time_to_string_constant) | (time_to_string_dynamic) |
                             (cast) | (substr) | (trim) | (when_case_value_when) | (when_case_else_projection) |
                             (function) | (variable)[BOOST_BIND_ACTION(push_variable)]; //function is pushed by right-term
 
-      cast = (S3SELECT_KW("cast") >> '(' >> factor >> S3SELECT_KW("as") >> (data_type)[BOOST_BIND_ACTION(push_data_type)] >> ')') [BOOST_BIND_ACTION(push_cast_expr)];
+      cast = cast_as_data_type | cast_as_decimal_expr ;
+
+      cast_as_data_type = (S3SELECT_KW("cast") >> '(' >> factor >> S3SELECT_KW("as") >> (data_type) >> ')') [BOOST_BIND_ACTION(push_cast_expr)];
+
+      cast_as_decimal_expr = (S3SELECT_KW("cast") >> '(' >> factor >> S3SELECT_KW("as") >> decimal_operator >> ')') [BOOST_BIND_ACTION(push_cast_decimal_expr)];
 
-      data_type = (S3SELECT_KW("int") | S3SELECT_KW("float") | S3SELECT_KW("string") |  S3SELECT_KW("timestamp") | S3SELECT_KW("bool") );
+      decimal_operator = (S3SELECT_KW("decimal") >> '(' >> (number)[BOOST_BIND_ACTION(push_number)] >> ',' >> (number)[BOOST_BIND_ACTION(push_number)] >> ')')
+                                       [BOOST_BIND_ACTION(push_decimal_operator)];
+
+      data_type = (S3SELECT_KW("int") | S3SELECT_KW("float") | S3SELECT_KW("string") |  S3SELECT_KW("timestamp") | S3SELECT_KW("bool"))[BOOST_BIND_ACTION(push_data_type)];
      
       substr = (substr_from) | (substr_from_for);
       
@@ -808,7 +848,9 @@ public:
 
       float_number = bsc::real_p;
 
-      string = (bsc::str_p("\"") >> *( bsc::anychar_p - bsc::str_p("\"") ) >> bsc::str_p("\"")) | (bsc::str_p("\'") >> *( bsc::anychar_p - bsc::str_p("\'") ) >> bsc::str_p("\'")) ;
+      string = (bsc::str_p("\"") >> *( bsc::anychar_p - bsc::str_p("\"") ) >> bsc::str_p("\"")) | (bsc::str_p("\'") >> *( bsc::anychar_p - bsc::str_p("\'") ) >> bsc::str_p("\'"));
+
+      backtick_string = (bsc::str_p("`") >> *( bsc::anychar_p - bsc::str_p("`") ) >> bsc::str_p("`")) [BOOST_BIND_ACTION(push_string_to_time_constant)];
 
       column_pos = (variable_name >> "." >> column_pos_name) | column_pos_name; //TODO what about space
 
@@ -836,7 +878,8 @@ public:
     }
 
 
-    bsc::rule<ScannerT> cast, data_type, variable, json_variable_name, variable_name, select_expr, select_expr_base, select_expr_base_, s3_object, where_clause, limit_number, number, float_number, string, from_expression;
+    bsc::rule<ScannerT> cast, data_type, variable, json_variable_name, variable_name, select_expr, select_expr_base, select_expr_base_, s3_object, where_clause, limit_number;
+    bsc::rule<ScannerT> number, float_number, string, backtick_string, from_expression, cast_as_data_type, cast_as_decimal_expr, decimal_operator;
     bsc::rule<ScannerT> cmp_operand, arith_cmp, condition_expression, arithmetic_predicate, logical_predicate, factor; 
     bsc::rule<ScannerT> trim, trim_whitespace_both, trim_one_side_whitespace, trim_anychar_anyside, trim_type, trim_remove_type, substr, substr_from, substr_from_for;
     bsc::rule<ScannerT> datediff, dateadd, extract, date_part, date_part_extract, time_to_string_constant, time_to_string_dynamic;
@@ -1734,6 +1777,65 @@ void push_when_value_then::builder(s3select* self, const char* a, const char* b)
  self->getAction()->whenThenQ.push_back(func);
 }
 
+void push_decimal_operator::builder(s3select* self, const char* a, const char* b) const
+{//decimal(integer,integer)
+  std::string token(a, b);
+
+  base_statement* lhs = nullptr;
+  base_statement* rhs = nullptr;
+
+  //right side (decimal operator)
+  if (self->getAction()->exprQ.empty() == false)
+  {
+    rhs = self->getAction()->exprQ.back();
+    self->getAction()->exprQ.pop_back();
+  }
+
+  //left side (decimal operator)
+  if (self->getAction()->exprQ.empty() == false)
+  {
+    lhs = self->getAction()->exprQ.back();
+    self->getAction()->exprQ.pop_back();
+  }
+
+  __function* func = S3SELECT_NEW(self, __function, "#decimal_operator#", self->getS3F());
+
+  func->push_argument(rhs);
+  func->push_argument(lhs);
+
+  self->getAction()->exprQ.push_back(func);
+}
+
+void push_cast_decimal_expr::builder(s3select* self, const char* a, const char* b) const
+{
+  //cast(expression as decimal(x,y))
+  std::string token(a, b);
+
+  base_statement* lhs = nullptr;
+  base_statement* rhs = nullptr;
+
+  //right side (decimal operator)
+  if (self->getAction()->exprQ.empty() == false)
+  {
+    rhs = self->getAction()->exprQ.back();
+    self->getAction()->exprQ.pop_back();
+  }
+
+  //left side - expression
+  if (self->getAction()->exprQ.empty() == false)
+  {
+    lhs = self->getAction()->exprQ.back();
+    self->getAction()->exprQ.pop_back();
+  }
+
+  __function* func = S3SELECT_NEW(self, __function, "#cast_as_decimal#", self->getS3F());
+
+  func->push_argument(rhs);
+  func->push_argument(lhs);
+
+  self->getAction()->exprQ.push_back(func);
+}
+
 void push_cast_expr::builder(s3select* self, const char* a, const char* b) const
 {
   //cast(expression as int/float/string/timestamp) --> new function "int/float/string/timestamp" ( args = expression )
@@ -1757,7 +1859,7 @@ void push_data_type::builder(s3select* self, const char* a, const char* b) const
 {
   std::string token(a, b);
 
-  auto cast_operator = [&](const char *s){return strncmp(a,s,strlen(s))==0;};
+  auto cast_operator = [&](const char *s){return strncasecmp(a,s,strlen(s))==0;};
 
   if(cast_operator("int"))
   {
@@ -2003,6 +2105,41 @@ void push_time_to_string_dynamic::builder(s3select* self, const char* a, const c
   self->getAction()->exprQ.push_back(func);
 }
 
+void push_string_to_time_constant::builder(s3select* self, const char* a, const char* b) const
+{
+  //token could be a string or a timestamp, we need to check it
+  //upon it is a timestamp format, we need to push the variable as timestamp or else, it as a string
+  //the purpose is to use backticks to convert the string to timestamp in parsing time instead of processing time(Trino uses this approach)
+  
+  a++; //remove the first quote
+  b--;
+  std::string token(a, b);
+
+  _fn_to_timestamp* to_timestamp = S3SELECT_NEW(self, _fn_to_timestamp);//TODO the _fn_to_timestamp should release the memory (cleanup)
+  bs_stmt_vec_t args;
+
+  variable* var_string = S3SELECT_NEW(self, variable, token, variable::var_t::COLUMN_VALUE);
+  variable* timestamp = S3SELECT_NEW(self, variable, token, variable::var_t::COLUMN_VALUE);
+
+  (self->get_to_timestamp_for_clean()) = to_timestamp;
+  var_string->push_for_cleanup(self->get_ast_nodes_to_delete());
+  timestamp->push_for_cleanup(self->get_ast_nodes_to_delete());
+  
+  args.push_back(var_string);
+
+  try {
+    (*to_timestamp)(&args, timestamp);
+  }
+  catch(std::exception& e)
+  {
+    //it is not a timestamp, it is a string
+    self->getAction()->exprQ.push_back(var_string);
+    return;
+  }
+
+  self->getAction()->exprQ.push_back(timestamp);
+}
+
 struct s3select_csv_definitions //TODO 
 {
     char row_delimiter;
@@ -2240,6 +2377,8 @@ public:
     }
     else
     {
+      //save the where-clause evaluation result (performance perspective)
+      bool where_clause_result = false;
       do
       {
        row_fetch_data();
@@ -2256,9 +2395,14 @@ public:
           a.second->invalidate_cache_result();
         }
       }
-      while (multiple_row_processing() && m_where_clause && !m_where_clause->eval().is_true() && !(m_is_limit_on && m_processed_rows == m_limit));
+      while (multiple_row_processing() && m_where_clause && !(where_clause_result = m_where_clause->eval().is_true()) && !(m_is_limit_on && m_processed_rows == m_limit));
+
+       // in the of JSON it needs to evaluate the where-clause(for the first time)
+      if(!multiple_row_processing() && m_where_clause){
+       where_clause_result = m_where_clause->eval().is_true();
+      }
 
-      if(m_where_clause && !m_where_clause->eval().is_true() && m_is_limit_on && m_processed_rows == m_limit)
+      if(m_where_clause && ! where_clause_result && m_is_limit_on && m_processed_rows == m_limit)
       {
           return m_sql_processing_status = Status::LIMIT_REACHED;
       }
@@ -2267,7 +2411,7 @@ public:
 
       if(!multiple_row_processing())
       {
-               found = !m_where_clause || m_where_clause->eval().is_true();    
+               found = !m_where_clause || where_clause_result; 
       }
   
       if(found)
@@ -2291,7 +2435,7 @@ public:
 }; //base_s3object
 
 //TODO config / default-value
-#define CSV_INPUT_TYPE_RESPONSE_SIZE_LIMIT (4 * 1024)
+#define CSV_INPUT_TYPE_RESPONSE_SIZE_LIMIT (64 * 1024)
 class csv_object : public base_s3object
 {
 
@@ -2355,6 +2499,7 @@ private:
   std::string m_last_line;
   size_t m_processed_bytes;
   int64_t m_number_of_tokens;
+  size_t m_skip_x_first_bytes=0;
 
   std::function<int(std::string&)> fp_s3select_result_format=nullptr;
   std::function<int(std::string&)> fp_s3select_header_format=nullptr;
@@ -2507,6 +2652,7 @@ private:
       merge_line = m_last_line + tmp_buff + m_csv_defintion.row_delimiter;
       m_previous_line = false;
       m_skip_first_line = true;
+      m_skip_x_first_bytes = tmp_buff.size()+1;
 
       //processing the merged row (previous broken row)
       run_s3select_on_object(result, merge_line.c_str(), merge_line.length(), false, false, false);
@@ -2541,6 +2687,15 @@ public:
     m_is_to_aggregate = do_aggregate;
     m_skip_last_line = skip_last_line;
 
+    if(skip_first_line)
+    {
+      //the stream may start in the middle of a row (maybe in the middle of a quote).
+      //at this point the stream should skip the first row(broken row).
+      //the csv_parser should be init with the fixed stream position. 
+      m_stream += m_skip_x_first_bytes;
+      m_skip_x_first_bytes=0;
+    }
+
     CSVParser _csv_parser("csv", m_stream, m_end_stream);
     csv_parser = &_csv_parser;
     csv_parser->set_csv_def(   m_csv_defintion.row_delimiter, 
@@ -2556,12 +2711,6 @@ public:
     {
       extract_csv_header_info();
     }
-
-    if(skip_first_line)
-    {
-      csv_parser->next_line();
-    }
-
     do
     {
       m_sql_processing_status = Status::INITIAL_STAT;
@@ -2809,6 +2958,7 @@ public:
     if(m_init_json_processor_ind)
            return;
 
+    m_init_json_processor_ind = true;
     std::function<int(void)> f_sql = [this](void){auto res = sql_execution_on_row_cb();return res;};
     std::function<int(s3selectEngine::value&, int)> 
       f_push_to_scratch = [this](s3selectEngine::value& value,int json_var_idx){return push_into_scratch_area_cb(value,json_var_idx);};
@@ -2827,6 +2977,14 @@ public:
     //upon star-operation(in statemenet) the callback pushes the key-path and value into scratch-area
     JsonHandler.set_push_per_star_operation_callback(f_push_key_value_into_scratch_area_per_star_operation);
 
+    //the json-from-clause is unique and should exist. otherwise it's a failure. 
+    if(query->getAction()->json_from_clause.empty())
+    {
+       JsonHandler.m_fatal_initialization_ind = true;
+       JsonHandler.m_fatal_initialization_description = "the SQL statement is not align with the correct syntax of JSON statement. from-clause is missing.";
+       return;
+    }
+
     //setting the from clause path 
     if(query->getAction()->json_from_clause[0] == JSON_ROOT_OBJECT)
     {
@@ -2852,7 +3010,6 @@ public:
     }
 
     m_sa->set_parquet_type();//TODO json type
-    m_init_json_processor_ind = true;
   }
     
   json_object(s3select* query):base_s3object(query),m_processed_bytes(0),m_end_of_stream(false),m_row_count(0),star_operation_ind(false),m_init_json_processor_ind(false)
@@ -2944,6 +3101,11 @@ public:
     m_processed_bytes += stream_length;
     set_sql_result(result);
 
+    if(JsonHandler.is_fatal_initialization())
+    {
+      throw base_s3select_exception(JsonHandler.m_fatal_initialization_description, base_s3select_exception::s3select_exp_en_t::FATAL);
+    }
+
     if(!stream_length || !json_stream)//TODO m_processed_bytes(?)
     {//last processing cycle
       JsonHandler.process_json_buffer(0, 0, true);//TODO end-of-stream = end-of-row
index 5583e5536528499df7904fbfde7069eb38125d18..8c507fca1b9f5aa4231f13c58a59e027281f0aa7 100644 (file)
@@ -233,7 +233,10 @@ enum class s3select_func_En_t {ADD,
                                STRING,
                                TRIM,
                                LEADING,
-                               TRAILING
+                               TRAILING,
+                               DECIMAL_OPERATOR,
+                               CAST_TO_DECIMAL,
+                              ENGINE_VERSION
                               };
 
 
@@ -302,7 +305,11 @@ private:
     {"string", s3select_func_En_t::STRING},
     {"#trim#", s3select_func_En_t::TRIM},
     {"#leading#", s3select_func_En_t::LEADING},
-    {"#trailing#", s3select_func_En_t::TRAILING}
+    {"#trailing#", s3select_func_En_t::TRAILING},
+    {"#decimal_operator#", s3select_func_En_t::DECIMAL_OPERATOR},
+    {"#cast_as_decimal#", s3select_func_En_t::CAST_TO_DECIMAL},
+    {"engine_version", s3select_func_En_t::ENGINE_VERSION}
+
   };
 
 public:
@@ -365,7 +372,7 @@ private:
     }
     m_func_impl = f;
     m_is_aggregate_function= m_func_impl->is_aggregate();
-
+    f->set_function_name(name.c_str());
   }
 
 public:
@@ -414,8 +421,7 @@ public:
     return true;
   }
 
-  __function(const char* fname, s3select_functions* s3f) : name(fname), m_func_impl(nullptr), m_s3select_functions(s3f),m_is_aggregate_function(false) 
-  {}
+  __function(const char* fname, s3select_functions* s3f) : name(fname), m_func_impl(nullptr), m_s3select_functions(s3f),m_is_aggregate_function(false){set_operator_name(fname);}
 
   value& eval() override
   {
@@ -493,6 +499,8 @@ struct _fn_add : public base_function
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,2);
+
     auto iter = args->begin();
     base_statement* x =  *iter;
     iter++;
@@ -511,18 +519,25 @@ struct _fn_sum : public base_function
 
   value sum;
 
-  _fn_sum() : sum(0)
+  _fn_sum()
   {
     aggregate = true;
+    sum.setnull();
   }
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     auto iter = args->begin();
     base_statement* x = *iter;
 
     try
     {
+      if(sum.is_null())
+      {
+       sum = 0;
+      }
       sum = sum + x->eval();
     }
     catch (base_s3select_exception& e)
@@ -589,6 +604,8 @@ struct _fn_avg : public base_function
 
     bool operator()(bs_stmt_vec_t* args, variable *result) override
     {
+       check_args_size(args,1);
+
         auto iter = args->begin();
         base_statement *x = *iter;
 
@@ -608,7 +625,9 @@ struct _fn_avg : public base_function
     void get_aggregate_result(variable *result) override
     {
         if(count == static_cast<value>(0)) {
-            throw base_s3select_exception("count cannot be zero!");
+            value v_null;
+           v_null.setnull();
+            *result=v_null;
         } else {
             *result = sum/count ;
         }
@@ -620,17 +639,20 @@ struct _fn_min : public base_function
 
   value min;
 
-  _fn_min():min(__INT64_MAX__)
+  _fn_min()
   {
     aggregate=true;
+    min.setnull();
   }
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     auto iter = args->begin();
     base_statement* x =  *iter;
 
-    if(min > x->eval())
+    if(min.is_null() || min > x->eval())
     {
       min=x->eval();
     }
@@ -650,17 +672,20 @@ struct _fn_max : public base_function
 
   value max;
 
-  _fn_max():max(-__INT64_MAX__)
+  _fn_max()
   {
     aggregate=true;
+    max.setnull();
   }
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     auto iter = args->begin();
     base_statement* x =  *iter;
 
-    if(max < x->eval())
+    if(max.is_null() || max < x->eval())
     {
       max=x->eval();
     }
@@ -680,7 +705,9 @@ struct _fn_to_int : public base_function
   value var_result;
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
-  {
+  { 
+    check_args_size(args,1);
+
     value v = (*args->begin())->eval();
 
     switch (v.type) {
@@ -726,6 +753,8 @@ struct _fn_to_float : public base_function
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     value v = (*args->begin())->eval();
 
     switch (v.type) {
@@ -782,7 +811,7 @@ struct _fn_to_timestamp : public base_function
                                 >> (dig2[BOOST_BIND_ACTION_PARAM(push_2dig, &mo)]) >> *(date_separator)
                                 >> (dig2[BOOST_BIND_ACTION_PARAM(push_2dig, &dy)]) >> *(delimiter));
 
-  uint32_t hr = 0, mn = 0, sc = 0,  frac_sec = 0, tz_hr = 0, tz_mn = 0, sign, tm_zone = '0';
+  uint32_t hr = 0, mn = 0, sc = 0,  frac_sec = 0, tz_hr = 0, tz_mn = 0, sign = 0, tm_zone = '0';
 
   #if BOOST_DATE_TIME_POSIX_TIME_STD_CONFIG
     bsc::rule<> fdig9 = bsc::lexeme_d[bsc::digit_p >> bsc::digit_p >> bsc::digit_p >> bsc::digit_p >> bsc::digit_p >> bsc::digit_p >> bsc::digit_p >> bsc::digit_p >> bsc::digit_p];
@@ -1474,6 +1503,8 @@ struct _fn_isnull : public base_function
   
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     auto iter = args->begin();
     base_statement* expr = *iter;
     value expr_val = expr->eval();
@@ -1512,6 +1543,8 @@ struct _fn_in : public base_function
 
   bool operator()(bs_stmt_vec_t *args, variable *result) override
   {
+    check_args_size(args,1);
+
     int args_size = static_cast<int>(args->size()-1);
     base_statement *main_expr = (*args)[args_size];
     value main_expr_val = main_expr->eval();
@@ -1561,6 +1594,8 @@ struct _fn_like : public base_like
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,3);
+
     auto iter = args->begin();
 
     base_statement* escape_expr = *iter;
@@ -1719,6 +1754,8 @@ struct _fn_charlength : public base_function {
  
     bool operator()(bs_stmt_vec_t* args, variable* result) override
     {
+       check_args_size(args,1);
+
         auto iter = args->begin();
         base_statement* str =  *iter;
         v_str = str->eval();
@@ -1730,7 +1767,7 @@ struct _fn_charlength : public base_function {
             return true; 
             }
         }
-    };
+};
 
 struct _fn_lower : public base_function {
 
@@ -1739,6 +1776,8 @@ struct _fn_lower : public base_function {
 
     bool operator()(bs_stmt_vec_t* args, variable* result) override
     {
+       check_args_size(args,1);
+
         auto iter = args->begin();
         base_statement* str = *iter;
         v_str = str->eval();
@@ -1760,6 +1799,8 @@ struct _fn_upper : public base_function {
 
     bool operator()(bs_stmt_vec_t* args, variable* result) override
     {
+       check_args_size(args,1);
+
         auto iter = args->begin();
         base_statement* str = *iter;
         v_str = str->eval();
@@ -1824,6 +1865,8 @@ struct _fn_when_then : public base_function {
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,2);
+
     auto iter = args->begin();
 
     base_statement* then_expr = *iter;
@@ -1853,6 +1896,8 @@ struct _fn_when_value_then : public base_function {
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,3);
+
     auto iter = args->begin();
 
     base_statement* then_expr = *iter;
@@ -1866,7 +1911,7 @@ struct _fn_when_value_then : public base_function {
     when_value = when_expr->eval();
     case_value = case_expr->eval();
     then_value = then_expr->eval();
-    
+
     if (case_value == when_value)
     {
         *result = then_value;
@@ -1884,6 +1929,8 @@ struct _fn_case_when_else : public base_function {
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     base_statement* else_expr = *(args->begin());
 
     size_t args_size = args->size() -1;
@@ -1912,6 +1959,8 @@ struct _fn_coalesce : public base_function
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     auto iter_begin = args->begin();
     int args_size = args->size();
     while (args_size >= 1)
@@ -1937,6 +1986,8 @@ struct _fn_string : public base_function
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     auto iter = args->begin();
 
     base_statement* expr = *iter;
@@ -1953,6 +2004,8 @@ struct _fn_to_bool : public base_function
 
   bool operator()(bs_stmt_vec_t* args, variable* result) override
   {
+    check_args_size(args,1);
+
     int64_t i=0;
     func_arg = (*args->begin())->eval();
 
@@ -1993,6 +2046,8 @@ struct _fn_trim : public base_function {
 
     bool operator()(bs_stmt_vec_t* args, variable* result) override
     {
+       check_args_size(args,1);
+
        auto iter = args->begin();
        int args_size = args->size();
        base_statement* str = *iter;
@@ -2026,6 +2081,8 @@ struct _fn_leading : public base_function {
 
     bool operator()(bs_stmt_vec_t* args, variable* result) override
     {
+       check_args_size(args,1);
+
        auto iter = args->begin();
        int args_size = args->size();
        base_statement* str = *iter;
@@ -2058,6 +2115,8 @@ struct _fn_trailing : public base_function {
 
     bool operator()(bs_stmt_vec_t* args, variable* result) override
     {
+       check_args_size(args,1);
+
        auto iter = args->begin();
        int args_size = args->size();
        base_statement* str = *iter;
@@ -2077,6 +2136,89 @@ struct _fn_trailing : public base_function {
     }
 }; 
 
+struct _fn_cast_to_decimal : public base_function {
+
+  int32_t precision=-1;
+  int32_t scale=-1;
+
+  bool operator()(bs_stmt_vec_t* args, variable* result) override
+  {
+    //cast(expr as decimal(x,y))
+    check_args_size(args,2);
+
+    base_statement* expr = (*args)[1];
+    //expr_val should be float or integer
+    //dynamic value for the decimal operator to get the precision and scale
+    
+    _fn_to_float to_float;
+    bs_stmt_vec_t args_vec;
+    args_vec.push_back(expr);
+    to_float(&args_vec,result);   
+    
+    if (precision == -1 || scale == -1){
+      base_statement* decimal_expr = (*args)[0];
+      decimal_expr->eval().get_precision_scale(&precision,&scale);
+    }
+
+    result->set_precision_scale(&precision,&scale);
+
+    return true;
+  }
+};
+
+struct _fn_decimal_operator : public base_function {
+
+  int32_t precision=-1;
+  int32_t scale=-1;
+
+  bool operator()(bs_stmt_vec_t* args, variable* result) override
+  {
+    //decimal(x,y) operator
+    check_args_size(args,2);
+
+    auto iter = args->begin();
+    base_statement* expr_precision = *iter;
+    value expr_precision_val = expr_precision->eval();
+
+    iter++;
+    base_statement* expr_scale = *iter;
+    value expr_scale_val = expr_scale->eval();
+    
+    precision = expr_precision_val.i64();
+    scale = expr_scale_val.i64();
+
+    result->set_precision_scale(&precision,&scale);
+
+    return true;
+  }
+};
+
+struct _fn_engine_version : public base_function {
+
+  const char* version_description =R"(PR #137 : 
+the change handle the use cases where the JSON input starts with an anonymous array/object this may cause wrong search result per the user request(SQL statement) 
+
+handle the use-case where the user requests a json-key-path that may point to a non-discrete value. i.e. array or an object. 
+editorial changes.
+
+fix for CSV flow, in the case of a "broken row" (upon processing stream of data) 
+
+null results upon aggregation functions on an empty group (no match for where clause).
+)";
+
+
+  _fn_engine_version()
+  {
+    aggregate = true;
+  }
+
+  bool operator()(bs_stmt_vec_t* args, variable* result) override
+  {
+    result->set_value(version_description);
+    return true;
+  }
+};
+
 base_function* s3select_functions::create(std::string_view fn_name,const bs_stmt_vec_t &arguments)
 {
   const FunctionLibrary::const_iterator iter = m_functions_library.find(fn_name.data());
@@ -2306,6 +2448,18 @@ base_function* s3select_functions::create(std::string_view fn_name,const bs_stmt
     return S3SELECT_NEW(this,_fn_trailing);
     break;
 
+  case  s3select_func_En_t::DECIMAL_OPERATOR:
+    return S3SELECT_NEW(this,_fn_decimal_operator);
+    break;
+
+  case  s3select_func_En_t::CAST_TO_DECIMAL:
+    return S3SELECT_NEW(this,_fn_cast_to_decimal);
+    break;
+
+  case  s3select_func_En_t::ENGINE_VERSION:
+    return S3SELECT_NEW(this,_fn_engine_version);
+    break;
+
   default:
     throw base_s3select_exception("internal error while resolving function-name");
     break;
index 52504c36833764cd2e9ae7f22889faecb57920ad..aa06163f5a172db74060ea1a3d7d9fbd69faf06e 100644 (file)
@@ -165,11 +165,20 @@ private:
 // to set the following. 
 std::vector<std::string>* from_clause;
 std::vector<std::string>* key_path;
+//m_current_depth : trace the depth of the reader, including "anonymous"(meaning JSON may begin with array that has no name attached to it)
 int* m_current_depth;
+//m_current_depth_non_anonymous : trace the depth of the reader, NOT including "anonymous" array/object.
+//upon user request the following _1.a[12].b, the key-name{a} may reside on some array with no-name, 
+//the state machine that search for a[12].b, does NOT contain states for that "anonymous" array, 
+//thus, the state-machine will fail to trace the user request for that specific key.path
+int* m_current_depth_non_anonymous;
 std::function <int(s3selectEngine::value&,int)>* m_exact_match_cb;
 //  a state number : (_1).a.b.c[ 17 ].d.e (a.b)=1 (c[)=2  (17)=3 (.d.e)=4
 size_t current_state;//contain the current state of the state machine for searching-expression (each JSON variable in SQL statement has a searching expression)
 int nested_array_level;//in the case of array within array it contain the nesting level
+int m_json_index;
+s3selectEngine::value v_null;
+size_t m_from_clause_size;
 
 struct variable_state_md {
     std::vector<std::string> required_path;//set by the syntax-parser. in the case of array its empty
@@ -184,20 +193,26 @@ std::vector<struct variable_state_md> variable_states;//vector is populated upon
 
 public:
 
-json_variable_access():from_clause(nullptr),key_path(nullptr),m_current_depth(nullptr),m_exact_match_cb(nullptr),current_state(-1),nested_array_level(0)
+json_variable_access():from_clause(nullptr),key_path(nullptr),m_current_depth(nullptr),m_current_depth_non_anonymous(nullptr),m_exact_match_cb(nullptr),current_state(-1),nested_array_level(0),m_json_index(-1),v_null(nullptr),m_from_clause_size(0)
 {}
 
 void init(
          std::vector<std::string>* reader_from_clause,
          std::vector<std::string>* reader_key_path,
          int* reader_current_depth,
-         std::function <int(s3selectEngine::value&,int)>* excat_match_cb)
+         int* reader_m_current_depth_non_anonymous,
+         std::function <int(s3selectEngine::value&,int)>* excat_match_cb,
+         int json_index)
 {//this routine should be called before scanning the JSON input
   from_clause = reader_from_clause;
   key_path = reader_key_path;
   m_exact_match_cb = excat_match_cb;
+  //m_current_depth and m_current_depth_non_anonymous points to the JSON reader variables.
   m_current_depth = reader_current_depth;
+  m_current_depth_non_anonymous = reader_m_current_depth_non_anonymous;
   current_state = 0;
+  m_json_index = json_index;
+  m_from_clause_size = from_clause->size();
 
   //loop on variable_states compute required_depth_size
 }
@@ -249,28 +264,31 @@ void push_variable_state(std::vector<std::string>& required_path,int required_ar
 
 struct variable_state_md& reader_position_state()
 {
-       if (current_state>=variable_states.size())
-       {
-               const char* out_of_range = "\nJSON reader failed due to array-out-of-range\n";
-               throw s3selectEngine::base_s3select_exception(out_of_range,s3selectEngine::base_s3select_exception::s3select_exp_en_t::FATAL);
-       }
+  if (current_state>=variable_states.size())
+  {//in case the state-machine reached a "dead-end", should push a null for that JSON variable
+       //going back one state.
+       (*m_exact_match_cb)(v_null,m_json_index);
+       decrease_current_state();
+  }
 
   return variable_states[ current_state ];
 }
 
 bool is_array_state()
 {
-  return (reader_position_state().required_array_entry_no>=0);
+  return (reader_position_state().required_array_entry_no >= 0);
 }
 
 bool is_reader_located_on_required_depth()
 {
-  return (*m_current_depth == reader_position_state().required_depth_size);
+  //upon user request `select _1.a.b from s3object[*].c.d;` the c.d sould "cut off" from m_current_depth_non_anonymous
+  //to get the correct depth of the state-machine
+  return ((*m_current_depth_non_anonymous - static_cast<int>(m_from_clause_size)) == reader_position_state().required_depth_size);
 }
 
 bool is_on_final_state()
 {
-  return ((size_t)current_state == (variable_states.size()));  
+  return (current_state == (variable_states.size()));  
          //&& *m_current_depth == variable_states[ current_state -1 ].required_depth_size); 
          
          // NOTE: by ignoring the current-depth, the matcher gives precedence to key-path match, while not ignoring accessing using array
@@ -278,11 +296,6 @@ bool is_on_final_state()
          // user may request 'select _1.phonearray.num'; the reader will traverse `num` exist in `phonearray`
 }
 
-bool is_reader_reached_required_array_entry()
-{
- return (reader_position_state().actual_array_entry_no == reader_position_state().required_array_entry_no); 
-}
-
 bool is_reader_passed_required_array_entry()
 {
   return (reader_position_state().actual_array_entry_no > reader_position_state().required_array_entry_no);
@@ -295,7 +308,9 @@ bool is_reader_located_on_array_according_to_current_state()
 
 bool is_reader_position_depth_lower_than_required()
 {
-  return (*m_current_depth < reader_position_state().required_depth_size);
+  //upon user request `select _1.a.b from s3object[*].c.d;` the c.d sould "cut off" from m_current_depth_non_anonymous
+  //to have the correct depth of the state-machine
+  return ((*m_current_depth_non_anonymous - static_cast<int>(m_from_clause_size)) < reader_position_state().required_depth_size);
 }
 
 bool is_reader_located_on_array_entry_according_to_current_state()
@@ -307,7 +322,7 @@ void increase_current_state()
 {
   DBG
 
-  if((size_t)current_state >= (variable_states.size())) return;
+  if(current_state >= variable_states.size()) return;
   current_state ++;
 }
 
@@ -323,8 +338,8 @@ void key()
 {
   DBG
 
-  if(reader_position_state().required_path.size())//state has a key
-  {// key should match
+  if(reader_position_state().required_path.size())//current state is a key
+  {
     std::vector<std::string>* filter = &reader_position_state().required_path;
     auto required_key_depth_size = reader_position_state().required_key_depth_size;
     if(std::equal((*key_path).begin()+(*from_clause).size() + required_key_depth_size, //key-path-start-point + from-clause-depth-size + key-depth
@@ -332,7 +347,7 @@ void key()
                  (*filter).begin(),
                  (*filter).end(), iequal_predicate))
     {
-      increase_current_state();//key match, advancing to next
+      increase_current_state();//key match according to user request, advancing to the next state
     }
   }
 }
@@ -358,7 +373,7 @@ void dec_key()
 
   if(is_reader_located_on_required_depth() && is_array_state())//TODO && is_array_state().  is it necessary?; json_element_state.back() != ARRAY_STATE)
   {//key-path-depth matches, and it an array
-    if(is_reader_reached_required_array_entry())
+    if(is_reader_located_on_array_entry_according_to_current_state())
     {//we reached the required array entry
       increase_current_state();
     } 
@@ -369,14 +384,14 @@ void dec_key()
   }
 }
 
-void new_value(s3selectEngine::value& v,size_t json_index)
+void new_value(s3selectEngine::value& v)
 {
   DBG
 
   if(is_on_final_state())
   {
-    (*m_exact_match_cb)(v, json_index);
-    decrease_current_state();//TODO why decrease? the state-machine reached its final destination, and it should be only one result
+    (*m_exact_match_cb)(v, m_json_index);
+    decrease_current_state();//the state-machine reached its final destination, "going back" one state, upon another match condition the matched value will override the last one
   } 
   increase_array_index();//next-value in array
 }
@@ -432,16 +447,18 @@ class json_variables_operations {
                  std::vector <std::string>* from_clause,
                  std::vector<std::string>* key_path,
                  int* current_depth,
+                 int* current_depth_non_anonymous,
                  std::function <int(s3selectEngine::value&,int)>* exact_match_cb)
        {
          json_statement_variables = jsv;
-
+         int i=0;//the index per JSON variable
          for(auto& var : json_statement_variables)
          {
            var.first->init(from_clause,
                      key_path,
                      current_depth,
-                     exact_match_cb);
+                     current_depth_non_anonymous,
+                     exact_match_cb,i++);
          }
        }
 
@@ -484,7 +501,7 @@ class json_variables_operations {
        {
            for(auto& j : json_statement_variables)
            {
-             j.first->new_value(v,j.second);
+             j.first->new_value(v);
            }
        }
 };//json_variables_operations
@@ -513,10 +530,13 @@ class JsonParserHandler : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
     std::function<int(void)> m_s3select_processing;
     int m_start_row_depth;   
     int m_current_depth;
+    int m_current_depth_non_anonymous;
     bool m_star_operation;
     int m_sql_processing_status;
+    bool m_fatal_initialization_ind = false;
+    std::string m_fatal_initialization_description;
 
-    JsonParserHandler() : prefix_match(false),init_buffer_stream(false),m_start_row_depth(-1),m_current_depth(0),m_star_operation(false),m_sql_processing_status(0)
+    JsonParserHandler() : prefix_match(false),init_buffer_stream(false),m_start_row_depth(-1),m_current_depth(0),m_current_depth_non_anonymous(0),m_star_operation(false),m_sql_processing_status(0)
     {
     } 
 
@@ -613,7 +633,13 @@ class JsonParserHandler : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
 
     bool Key(const char* str, rapidjson::SizeType length, bool copy) {
       key_path.push_back(std::string(str));
-      
+     
+      if(!m_current_depth_non_anonymous){
+      //important: upon a key and m_current_depth_non_anonymous is ZERO
+      //it should advance by 1. to get the correct current depth(for non anonymous counter).
+       m_current_depth_non_anonymous++;
+      } 
+
       if(from_clause.size() == 0 || std::equal(key_path.begin(), key_path.end(), from_clause.begin(), from_clause.end(), iequal_predicate)) {
         prefix_match = true;
       }
@@ -631,9 +657,14 @@ class JsonParserHandler : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
        return false;
     }
 
-    bool StartObject() {      
+    bool StartObject() { 
        json_element_state.push_back(OBJECT_STATE);
        m_current_depth++;
+       if(key_path.size()){
+         //advancing the counter only upon there is a key.
+         m_current_depth_non_anonymous++;
+       }
+
         if (prefix_match && !is_already_row_started()) {
           state = row_state::OBJECT_START_ROW;
          m_start_row_depth = m_current_depth;
@@ -646,6 +677,7 @@ class JsonParserHandler : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
     bool EndObject(rapidjson::SizeType memberCount) {
       json_element_state.pop_back();
       m_current_depth --;
+      m_current_depth_non_anonymous --;
 
       variable_match_operations.end_object();
       
@@ -660,6 +692,11 @@ class JsonParserHandler : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
     bool StartArray() {
       json_element_state.push_back(ARRAY_STATE);
       m_current_depth++;
+      if(key_path.size()){
+         //advancing the counter only upon there is a key.
+         m_current_depth_non_anonymous++;
+      }
+
       if (prefix_match && !is_already_row_started()) {
           state = row_state::ARRAY_START_ROW;
          m_start_row_depth = m_current_depth;
@@ -673,6 +710,8 @@ class JsonParserHandler : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
     bool EndArray(rapidjson::SizeType elementCount) { 
       json_element_state.pop_back();
       m_current_depth--;
+      m_current_depth_non_anonymous--;
+
       dec_key_path();
 
       if (state == row_state::ARRAY_START_ROW && (m_start_row_depth > m_current_depth)) {
@@ -701,6 +740,7 @@ class JsonParserHandler : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
                          &from_clause,
                          &key_path,
                          &m_current_depth,
+                         &m_current_depth_non_anonymous,
                          &m_exact_match_cb);
     }
 
@@ -724,6 +764,11 @@ class JsonParserHandler : public rapidjson::BaseReaderHandler<rapidjson::UTF8<>,
       m_star_operation = true;
     }
 
+    bool is_fatal_initialization()
+    {
+      return m_fatal_initialization_ind;
+    }
+
     int process_json_buffer(char* json_buffer,size_t json_buffer_sz, bool end_of_stream=false)
     {//user keeps calling with buffers, the method is not aware of the object size.
 
index 3785384f0976cddf02546ad2887412e876e559db..89544fc1d8ff32497a4c45e94b6d07bf37767771 100644 (file)
@@ -116,7 +116,7 @@ class base_statement;
 //typedef std::vector<base_statement *> bs_stmt_vec_t; //without specific allocator
 
 //ChunkAllocator, prevent allocation from heap.
-typedef std::vector<base_statement*, ChunkAllocator<base_statement*, 256> > bs_stmt_vec_t;
+typedef std::vector<base_statement*, ChunkAllocator<base_statement*, 4096> > bs_stmt_vec_t;
 
 class base_s3select_exception : public std::exception
 {
@@ -147,7 +147,7 @@ public:
     _msg = n;
   }
 
-  virtual const char* what() const _GLIBCXX_NOTHROW
+  virtual const char* what() const noexcept
   {
     return _msg.c_str();
   }
@@ -436,6 +436,9 @@ private:
   std::string m_str_value;
   //std::basic_string<char,std::char_traits<char>,ChunkAllocator<char,256>> m_str_value;
 
+  int32_t m_precision=-1;
+  int32_t m_scale=-1;
+
 public:
   enum class value_En_t
   {
@@ -556,6 +559,18 @@ public:
     type = value_En_t::S3NULL;
   }
 
+  void set_precision_scale(int32_t* precision, int32_t* scale)
+  {
+    m_precision = *precision;
+    m_scale = *scale;
+  }
+
+  void get_precision_scale(int32_t* precision, int32_t* scale)
+  {
+    *precision = m_precision;
+    *scale = m_scale;
+  }
+
   void set_string_nocopy(char* str)
   {//purpose: value does not own the string
      __val.str = str;
@@ -591,7 +606,16 @@ public:
       }
       else if(type == value_En_t::FLOAT)
       {
-        m_to_string = boost::lexical_cast<std::string>(__val.dbl);
+        if(m_precision != -1 && m_scale != -1)
+        {
+          std::stringstream ss;
+          ss << std::fixed << std::setprecision(m_scale) << __val.dbl;
+          m_to_string = ss.str();
+        }
+        else
+        {
+          m_to_string.assign( boost::lexical_cast<std::string>(__val.dbl) );
+        }
       }
       else if (type == value_En_t::TIMESTAMP)
       {
@@ -941,8 +965,14 @@ public:
     if (lhs.is_nan() || rhs.is_nan())
     {
       return false;
-    }  
+    }
 
+//  in the case of NULL on right-side or NULL on left-side, the result is false.
+    if(lhs.is_null() || rhs.is_null())
+    {
+      return false;
+    }
+    
     throw base_s3select_exception("operands not of the same type(numeric , string), while comparision");
   }
   bool operator<=(const value& v)
@@ -1114,7 +1144,7 @@ public:
   json_star_op_cont_t m_json_star_operation;
 
   scratch_area():m_upper_bound(-1),parquet_type(false),buff_loc(0),max_json_idx(-1)
-  {//TODO it should resize dynamicly
+  {
     m_schema_values = new std::vector<value>(128,value(nullptr));
   }
 
@@ -1145,6 +1175,12 @@ public:
   void update(std::vector<char*>& tokens, size_t num_of_tokens)
   {
     size_t i=0;
+    //increase the Vector::m_schema_values capacity(it should happen few times)
+    if ((*m_schema_values).capacity() < tokens.size())
+    {
+         (*m_schema_values).resize( tokens.size() * 2 );
+    }
+
     for(auto s : tokens)
     {
       if (i>=num_of_tokens)
@@ -1179,12 +1215,22 @@ public:
   }
 
   void get_column_value(uint16_t column_pos, value &v)
-  {// TODO handle out of boundaries
+  {
+    if (column_pos > ((*m_schema_values).size()-1))
+    {
+      throw base_s3select_exception("accessing scratch buffer beyond its size");
+    }
+
     v = (*m_schema_values)[ column_pos ];
   }
 
   value* get_column_value(uint16_t column_pos)
   {
+    if (column_pos > ((*m_schema_values).size()-1))
+    {
+      throw base_s3select_exception("accessing scratch buffer beyond its size");
+    }
+
     return &(*m_schema_values)[ column_pos ];
   }
   
@@ -1199,6 +1245,13 @@ public:
     {
       max_json_idx = json_idx;
     }
+
+    //increase the Vector::m_schema_values capacity(it should happen few times)
+    if ((*m_schema_values).capacity() < static_cast<unsigned long long>(max_json_idx))
+    {
+         (*m_schema_values).resize(max_json_idx * 2);
+    }
+
     (*m_schema_values)[ json_idx ] = v;
 
     if(json_idx>m_upper_bound)
@@ -1221,6 +1274,17 @@ public:
     m_upper_bound =0;
     buff_loc=0;
 
+    //increase the Vector::m_schema_values capacity(it should happen few times)
+    if ((*m_schema_values).capacity() < parquet_row_value.size())
+    {
+         (*m_schema_values).resize(parquet_row_value.size() * 2);
+    }
+
+    if (*column_pos_iter > ((*m_schema_values).size()-1))
+    {
+      throw base_s3select_exception("accessing scratch buffer beyond its size");
+    }
+
     for(auto v : parquet_row_value)
     {
       //TODO (parquet_value_t) --> (value) , or better get it as value (i.e. parquet reader know class-value)
@@ -1294,13 +1358,25 @@ protected:
   value value_na;
   //JSON queries has different syntax from other data-sources(Parquet,CSV)
   bool m_json_statement;
+  uint64_t number_of_calls = 0;
+  std::string operator_name;
 
 public:
   base_statement():m_scratch(nullptr), is_last_call(false), m_is_cache_result(false),
   m_projection_alias(nullptr), m_eval_stack_depth(0), m_skip_non_aggregate_op(false),m_json_statement(false) {}
 
+  void set_operator_name(const char* op)
+  {
+#ifdef S3SELECT_PROF
+    operator_name = op;
+#endif
+  }
+
   virtual value& eval()
   {
+#ifdef S3SELECT_PROF
+    number_of_calls++;
+#endif
     //purpose: on aggregation flow to run only the correct subtree(aggregation subtree)
      
     if (m_skip_non_aggregate_op == false)
@@ -1460,7 +1536,12 @@ public:
     return m_eval_stack_depth;
   }
 
-  virtual ~base_statement() {}
+  virtual ~base_statement()  
+{
+#ifdef S3SELECT_PROF 
+std::cout<< operator_name << ":" << number_of_calls <<std::endl; 
+#endif
+}
 
   void dtor()
   {
@@ -1504,20 +1585,22 @@ private:
 
   const int undefined_column_pos = -1;
   const int column_alias = -2;
+  const char* this_operator_name = "variable";
 
 public:
-  variable():m_var_type(var_t::NA), _name(""), column_pos(-1), json_variable_idx(-1) {}
+  variable():m_var_type(var_t::NA), _name(""), column_pos(-1), json_variable_idx(-1){set_operator_name(this_operator_name);}
 
-  explicit variable(int64_t i) : m_var_type(var_t::COLUMN_VALUE), column_pos(-1), var_value(i), json_variable_idx(-1) {}
+  explicit variable(int64_t i) : m_var_type(var_t::COLUMN_VALUE), column_pos(-1), var_value(i), json_variable_idx(-1){set_operator_name(this_operator_name);}
 
-  explicit variable(double d) : m_var_type(var_t::COLUMN_VALUE), _name("#"), column_pos(-1), var_value(d), json_variable_idx(-1) {}
+  explicit variable(double d) : m_var_type(var_t::COLUMN_VALUE), _name("#"), column_pos(-1), var_value(d), json_variable_idx(-1){set_operator_name(this_operator_name);}
 
-  explicit variable(int i) : m_var_type(var_t::COLUMN_VALUE), column_pos(-1), var_value(i), json_variable_idx(-1) {}
+  explicit variable(int i) : m_var_type(var_t::COLUMN_VALUE), column_pos(-1), var_value(i), json_variable_idx(-1){set_operator_name(this_operator_name);}
 
-  explicit variable(const std::string& n) : m_var_type(var_t::VARIABLE_NAME), _name(n), column_pos(-1), json_variable_idx(-1) {}
+  explicit variable(const std::string& n) : m_var_type(var_t::VARIABLE_NAME), _name(n), column_pos(-1), json_variable_idx(-1){set_operator_name(this_operator_name);}
 
   explicit variable(const std::string& n, var_t tp, size_t json_idx) : m_var_type(var_t::NA)
   {//only upon JSON use case
+    set_operator_name(this_operator_name);
     if(tp == variable::var_t::JSON_VARIABLE)
     {
       m_var_type = variable::var_t::JSON_VARIABLE;
@@ -1528,6 +1611,7 @@ public:
 
   variable(const std::string& n,  var_t tp) : m_var_type(var_t::NA)
   {
+    set_operator_name(this_operator_name);
     if(tp == variable::var_t::POS)
     {
       _name = n;
@@ -1552,6 +1636,7 @@ public:
 
   explicit variable(s3select_reserved_word::reserve_word_en_t reserve_word)
   {
+    set_operator_name(this_operator_name);
     if (reserve_word == s3select_reserved_word::reserve_word_en_t::S3S_NULL)
     {
       m_var_type = variable::var_t::COLUMN_VALUE;
@@ -1620,6 +1705,11 @@ public:
     var_value.setnull();
   }
 
+  void set_precision_scale(int32_t* p, int32_t* s)
+  {
+    var_value.set_precision_scale(p, s);
+  }
+
   virtual ~variable() {}
 
   virtual bool is_column() const //is reference to column.
@@ -1752,8 +1842,9 @@ public:
     {
       m_scratch->get_column_value(column_pos,var_value);
       //in the case of successive column-delimiter {1,some_data,,3}=> third column is NULL 
-      if (var_value.is_string() && (var_value.str()== 0 || (var_value.str() && *var_value.str()==0)))
+      if (var_value.is_string() && (var_value.str()== 0 || (var_value.str() && *var_value.str()==0))){
           var_value.setnull();//TODO is it correct for Parquet
+      }
     }
 
     return var_value;
@@ -1813,10 +1904,13 @@ public:
 
   virtual value& eval_internal()
   {
-    if ((l->eval()).is_null()) {
+    value l_val = l->eval();
+    value r_val;
+    if (l_val.is_null()) {
         var_value.setnull();
         return var_value;
-      } else if((r->eval()).is_null()) {
+      } else {r_val = r->eval();}
+        if(r_val.is_null()) {
         var_value.setnull();
         return var_value;
       }
@@ -1824,27 +1918,27 @@ public:
     switch (_cmp)
     {
     case cmp_t::EQ:
-      return var_value =  bool( (l->eval() == r->eval()) ^ negation_result );
+      return var_value =  bool( (l_val == r_val) ^ negation_result );
       break;
 
     case cmp_t::LE:
-      return var_value = bool( (l->eval() <= r->eval()) ^ negation_result );
+      return var_value = bool( (l_val <= r_val) ^ negation_result );
       break;
 
     case cmp_t::GE:
-      return var_value = bool( (l->eval() >= r->eval()) ^ negation_result );
+      return var_value = bool( (l_val >= r_val) ^ negation_result );
       break;
 
     case cmp_t::NE:
-      return var_value = bool( (l->eval() != r->eval()) ^ negation_result );
+      return var_value = bool( (l_val != r_val) ^ negation_result );
       break;
 
     case cmp_t::GT:
-      return var_value = bool( (l->eval() > r->eval()) ^ negation_result );
+      return var_value = bool( (l_val > r_val) ^ negation_result );
       break;
 
     case cmp_t::LT:
-      return var_value = bool( (l->eval() < r->eval()) ^ negation_result );
+      return var_value = bool( (l_val < r_val) ^ negation_result );
       break;
 
     default:
@@ -1853,7 +1947,7 @@ public:
     }
   }
 
-  arithmetic_operand(base_statement* _l, cmp_t c, base_statement* _r):l(_l), r(_r), _cmp(c),negation_result(false) {}
+  arithmetic_operand(base_statement* _l, cmp_t c, base_statement* _r):l(_l), r(_r), _cmp(c),negation_result(false){set_operator_name("arithmetic_operand");}
   
   explicit arithmetic_operand(base_statement* p)//NOT operator 
   {
@@ -1898,7 +1992,7 @@ public:
     return true;
   }
 
-  logical_operand(base_statement* _l, oplog_t _o, base_statement* _r):l(_l), r(_r), _oplog(_o),negation_result(false) {}
+  logical_operand(base_statement* _l, oplog_t _o, base_statement* _r):l(_l), r(_r), _oplog(_o),negation_result(false){set_operator_name("logical_operand");}
 
   explicit logical_operand(base_statement * p)//NOT operator
   {
@@ -2035,7 +2129,7 @@ public:
     }
   }
 
-  mulldiv_operation(base_statement* _l, muldiv_t c, base_statement* _r):l(_l), r(_r), _mulldiv(c) {}
+  mulldiv_operation(base_statement* _l, muldiv_t c, base_statement* _r):l(_l), r(_r), _mulldiv(c){set_operator_name("mulldiv_operation");}
 
   virtual ~mulldiv_operation() {}
 };
@@ -2118,7 +2212,7 @@ class negate_function_operation : public base_statement
   
   public:
 
-  explicit negate_function_operation(base_statement *f):function_to_negate(f){}
+  explicit negate_function_operation(base_statement *f):function_to_negate(f){set_operator_name("negate_function_operation");}
 
   virtual std::string print(int ident)
   {
@@ -2166,6 +2260,7 @@ public:
   //TODO add semantic to base-function , it operate once on function creation
   // validate semantic on creation instead on run-time
   virtual bool operator()(bs_stmt_vec_t* args, variable* result) = 0;
+  std::string m_function_name;
   base_function() : aggregate(false) {}
   bool is_aggregate() const
   {
@@ -2180,6 +2275,27 @@ public:
     this->~base_function();
   }
 
+  void check_args_size(bs_stmt_vec_t* args, uint16_t required, const char* error_msg)
+  {//verify for atleast required parameters
+    if(args->size() < required)
+    {
+      throw base_s3select_exception(error_msg,base_s3select_exception::s3select_exp_en_t::FATAL);
+    }
+  }
+
+  void check_args_size(bs_stmt_vec_t* args,uint16_t required)
+  {
+    if(args->size() < required)
+    {
+      std::string error_msg = m_function_name + " requires for " + std::to_string(required) + " arguments";
+      throw base_s3select_exception(error_msg,base_s3select_exception::s3select_exp_en_t::FATAL);
+    }
+  }
+
+  void set_function_name(const char* name)
+  {
+    m_function_name.assign(name);
+  }
 };
 
 class base_date_extract : public base_function
index 5379026c7d442f5a2547cf48e1d8ed5bce34befb..7c372551ce138c7d2573d2e330d662223e3145d5 100644 (file)
@@ -734,6 +734,69 @@ TEST(TestS3selectFunctions, count)
   ASSERT_EQ(s3select_result_1,"128"); 
 }
 
+TEST(TestS3selectFunctions, no_args)
+{//note: engine throw an exception(and description), currently it is not catch in this test-app
+#if 0
+  std::string input;
+  size_t size = 128;
+  generate_columns_csv(input, size);
+  std::string input_query_1 = "select min() from stdin;";
+
+  std::string s3select_result_1 = run_s3select(input_query_1,input);
+
+  ASSERT_EQ(s3select_result_1,""); 
+
+  input_query_1 = "select max() from stdin;";
+
+  s3select_result_1 = run_s3select(input_query_1,input);
+
+  ASSERT_EQ(s3select_result_1,""); 
+
+  input_query_1 = "select avg() from stdin;";
+
+  s3select_result_1 = run_s3select(input_query_1,input);
+
+  ASSERT_EQ(s3select_result_1,""); 
+
+  input_query_1 = "select sum() from stdin;";
+
+  s3select_result_1 = run_s3select(input_query_1,input);
+
+  ASSERT_EQ(s3select_result_1,""); 
+#endif
+}
+
+TEST(TestS3selectFunctions, empty_group_upon_aggtegation)
+{
+
+  std::string input;
+  size_t size = 128;
+  generate_columns_csv(input, size);
+  std::string input_query_1 = "select min(cast(_1 as int)) from stdin where 1 = 0;";
+
+  std::string s3select_result_1 = run_s3select(input_query_1,input);
+
+  ASSERT_EQ(s3select_result_1,"null"); 
+
+  input_query_1 = "select max(cast(_1 as int)) from stdin where 1 = 0;";
+
+  s3select_result_1 = run_s3select(input_query_1,input);
+
+  ASSERT_EQ(s3select_result_1,"null"); 
+
+  input_query_1 = "select sum(cast(_1 as int)) from stdin where 1 = 0;";
+
+  s3select_result_1 = run_s3select(input_query_1,input);
+
+  ASSERT_EQ(s3select_result_1,"null"); 
+
+  input_query_1 = "select avg(cast(_1 as int)) from stdin where 1 = 0;";
+
+  s3select_result_1 = run_s3select(input_query_1,input);
+
+  ASSERT_EQ(s3select_result_1,"null"); 
+}
+
 TEST(TestS3selectFunctions, min)
 {
   std::string input;
@@ -988,8 +1051,8 @@ TEST(TestS3selectFunctions, avgzero)
         false, // dont skip last line
         true   // aggregate call
         ); 
-    ASSERT_EQ(status, -1);
-    ASSERT_EQ(s3select_result, std::string(""));
+    ASSERT_EQ(status, 0);
+    ASSERT_EQ(s3select_result, std::string("null"));
 }
 
 TEST(TestS3selectFunctions, floatavg)
@@ -1318,6 +1381,13 @@ TEST(TestS3selectFunctions, test_cast_expressions)
   std::string s3select_result_4 = run_s3select(input_query_4,input);
 
   ASSERT_EQ(s3select_result_3, s3select_result_4);
+
+  //testing the decimal operator for precision setting
+  const std::string input_query_5 = "select cast(1.123456789 as decimal(9,1)) from s3object limit 1;";
+
+  std::string s3select_result_5 = run_s3select(input_query_5,input);
+
+  ASSERT_EQ(s3select_result_5, "1.123456789\n");
 }
 
 TEST(TestS3selectFunctions, test_version)
@@ -1359,6 +1429,14 @@ TEST(TestS3selectFunctions, multirow_datetime_to_string_dynamic)
   EXPECT_EQ(s3select_result, expected_res);
 }
 
+TEST(TestS3selectFunctions, backtick_on_timestamp)
+{
+  const std::string input = "1994-11-21T11:49:23Z\n";
+  const std::string input_query = "select count(0) from s3object where cast(_1 as timestamp) = `1994-11-21T11:49:23Z`;";
+  std::string s3select_result = run_s3select(input_query, input);
+  EXPECT_EQ(s3select_result, "1");
+}
+
 TEST(TestS3selectFunctions, test_date_time_expressions)
 {
   std::string input;
@@ -2343,7 +2421,7 @@ test_single_column_single_row( "select cast(5.123 as int) from stdin ;" ,"5\n");
 
 TEST(TestS3selectFunctions, castfloat)
 {
-test_single_column_single_row( "select cast(1.234 as float) from stdin ;" ,"1.234\n");
+test_single_column_single_row( "select cast(1.234 as FLOAT) from stdin ;" ,"1.234\n");
 }
 
 TEST(TestS3selectFunctions, castfloatoperation)
@@ -3303,14 +3381,12 @@ std::string input_json_data = R"(
 }
 )";
 
-#if 0
-  //TODO error phoneNumbers[12][2][2] = null, to check what happen upon reaching the final state
-  expected_result=R"(post 3D
+  expected_result=R"(null
 )";
+  //phoneNumbers[12][2][2] is not a discrete value, should return null
   input_query = "select _1.phoneNumbers[12][2][2] from s3object[*];";
   run_json_query(input_query.c_str(), input_json_data, result);
   ASSERT_EQ(result,expected_result);
-#endif 
 
   //the following tests ia about accessing multi-dimension array
   expected_result=R"(55
@@ -3337,4 +3413,34 @@ std::string input_json_data = R"(
   input_query = "select _1.phoneNumbers[11] from s3object[*];";
   run_json_query(input_query.c_str(), input_json_data, result);
   ASSERT_EQ(result,expected_result);
+
+input_json_data = R"(
+[
+  {
+    "authors": [
+      {
+        "id": 2312688602
+      },
+      {
+        "id": 123
+      }
+    ],
+    "wrong" : {"id" : "it-is-wrong"}
+  }
+]
+)";
+
+  expected_result=R"(2312688602
+)";
+  input_query = "select _1.authors[0].id from s3object[*];";
+  run_json_query(input_query.c_str(), input_json_data, result);
+  ASSERT_EQ(result,expected_result);
+
+  expected_result=R"(123
+)";
+  input_query = "select _1.authors[1].id from s3object[*];";
+  run_json_query(input_query.c_str(), input_json_data, result);
+  ASSERT_EQ(result,expected_result);
+
+
  }
index 72b14c09c8359838c8583162beb57dde4e2e049d..828bebf0776f6cf3082ed600b6a98c567fb47550 100644 (file)
@@ -25,7 +25,9 @@
     bucket unlink              unlink bucket from specified user
     bucket stats               returns bucket statistics
     bucket rm                  remove bucket
-    bucket check               check bucket index
+    bucket check               check bucket index by verifying size and object count stats
+    bucket check olh           check for olh index entries and objects that are pending removal
+    bucket check unlinked      check for object versions that are not visible in a bucket listing 
     bucket chown               link bucket to specified user and update its object ACLs
     bucket reshard             reshard bucket
     bucket rewrite             rewrite all objects in the specified bucket
     script-package add         add a lua package to the scripts allowlist
     script-package rm          remove a lua package from the scripts allowlist
     script-package list        get the lua packages allowlist
+    notification list          list bucket notifications configuration
+    notification get           get a bucket notifications configuration
+    notification rm            remove a bucket notifications configuration
   options:
      --tenant=<tenant>         tenant name
      --user_ns=<namespace>     namespace of user (oidc in case of users authenticated with oidc provider)
   
   Bucket notifications options:
      --topic                   bucket notifications topic name
+     --notification-id         bucket notifications id
   
   Script options:
      --context                 context in which the script runs. one of: prerequest, postrequest, background, getdata, putdata
      --package                 name of the lua package that should be added/removed to/from the allowlist
      --allow-compilation       package is allowed to compile C code as part of its installation
   
+  Bucket check olh/unlinked options:
+     --min-age-hours           minimum age of unlinked objects to consider for bucket check unlinked (default: 1)
+     --dump-keys               when specified, all keys identified as problematic are printed to stdout
+     --hide-progress           when specified, per-shard progress details are not printed to stderr
+  
   radoslist options:
      --rgw-obj-fs              the field separator that will separate the rados
                                object name from the rgw object name;
     --setgroup GROUP  set gid to group or gid
     --version         show version and quit
   
-
-
index 6e39d338a4d34a342cde1c8f81adbd5731a10a52..b1851cca2c7eea0a2e1283e626c4fc209ade3730 100644 (file)
@@ -21,12 +21,12 @@ target_link_libraries(unittest-seastar-denc crimson GTest::Main)
 
 add_executable(unittest-seastar-socket test_socket.cc)
 add_ceph_unittest(unittest-seastar-socket
-  --memory 256M --smp 2)
+  --memory 256M --smp 4)
 target_link_libraries(unittest-seastar-socket crimson)
 
 add_executable(unittest-seastar-messenger test_messenger.cc)
 add_ceph_unittest(unittest-seastar-messenger
-  --memory 256M --smp 1)
+  --memory 256M --smp 4)
 target_link_libraries(unittest-seastar-messenger crimson)
 
 add_executable(test-seastar-messenger-peer test_messenger_peer.cc)
@@ -41,7 +41,8 @@ add_executable(test-async-echo
 target_link_libraries(test-async-echo ceph-common global)
 
 add_executable(unittest-seastar-alienstore-thread-pool
-  test_alienstore_thread_pool.cc)
+  test_alienstore_thread_pool.cc
+  ${PROJECT_SOURCE_DIR}/src/crimson/osd/lsan_suppressions.cc)
 add_ceph_unittest(unittest-seastar-alienstore-thread-pool
   --memory 256M --smp 1)
 target_link_libraries(unittest-seastar-alienstore-thread-pool
index 1f6ddb778d0e1559b79f5e135acff9e7f1ef1e55..5c6c2771ce1aa6b534f75d61d1d64f8108bba506 100644 (file)
@@ -40,7 +40,8 @@ target_link_libraries(
 
 add_executable(unittest-object-data-handler
   test_object_data_handler.cc
-  ../gtest_seastar.cc)
+  ../gtest_seastar.cc
+  ${PROJECT_SOURCE_DIR}/src/crimson/osd/lsan_suppressions.cc)
 add_ceph_unittest(unittest-object-data-handler
   --memory 256M --smp 1)
 target_link_libraries(
@@ -52,7 +53,8 @@ target_link_libraries(
 
 add_executable(unittest-collection-manager
   test_collection_manager.cc
-  ../gtest_seastar.cc)
+  ../gtest_seastar.cc
+  ${PROJECT_SOURCE_DIR}/src/crimson/osd/lsan_suppressions.cc)
 add_ceph_test(unittest-collection-manager
   unittest-collection-manager --memory 256M --smp 1)
 target_link_libraries(
index 14b241830749e3080ad90bd089c9a004e102e0a5..9c2f4c246b35e08ace39f14c43ef823689b75056 100644 (file)
@@ -57,7 +57,8 @@ TEST_F(nvdev_test_t, write_and_verify_test)
 {
   run_async([this] {
     device.reset(new random_block_device::nvme::NVMeBlockDevice(dev_path));
-    local_conf().set_val("seastore_cbjournal_size", "1000000").get();
+    local_conf().set_val("seastore_cbjournal_size", "1048576").get();
+    device->start().get();
     device->mkfs(
       device_config_t{
        true,
@@ -74,19 +75,20 @@ TEST_F(nvdev_test_t, write_and_verify_test)
     uint8_t value = generator();
     memset(original_data.data, value, BUF_SIZE);
     uint64_t bl_length = 0;
+    Device& d = device->get_sharded_device();
     {
       bufferlist bl;
       encode(original_data, bl);
       bl_length = bl.length();
       auto write_buf = ceph::bufferptr(buffer::create_page_aligned(BLK_SIZE));
       bl.begin().copy(bl_length, write_buf.c_str());
-      device->write(0, std::move(write_buf)).unsafe_get();
+      ((RBMDevice*)&d)->write(0, std::move(write_buf)).unsafe_get();
     }
 
     nvdev_test_block_t read_data;
     {
       auto read_buf = ceph::bufferptr(buffer::create_page_aligned(BLK_SIZE));
-      device->read(0, read_buf).unsafe_get();
+      ((RBMDevice*)&d)->read(0, read_buf).unsafe_get();
       bufferlist bl;
       bl.push_back(read_buf);
       auto bliter = bl.cbegin();
@@ -94,7 +96,8 @@ TEST_F(nvdev_test_t, write_and_verify_test)
     }
 
     int ret = memcmp(original_data.data, read_data.data, BUF_SIZE);
-    device->close().unsafe_get();
+    ((RBMDevice*)&d)->close().unsafe_get();
+    device->stop().get();
     ASSERT_TRUE(ret == 0);
     device.reset(nullptr);
   });
index 64afe1247caacb2ff04d1fb0708f831cd5885d73..1f661cdca596c1c34153815dc40524f309770014 100644 (file)
@@ -120,7 +120,11 @@ struct fltree_onode_manager_test_t
       }).unsafe_get0();
       std::invoke(f, t, *onode, p_kv->value);
       with_trans_intr(t, [&](auto &t) {
-        return manager->write_dirty(t, {onode});
+       if (onode->is_alive()) {
+         return manager->write_dirty(t, {onode});
+       } else {
+         return OnodeManager::write_dirty_iertr::now();
+       }
       }).unsafe_get0();
     });
   }
@@ -235,7 +239,7 @@ struct fltree_onode_manager_test_t
   fltree_onode_manager_test_t() {}
 };
 
-TEST_F(fltree_onode_manager_test_t, 1_single)
+TEST_P(fltree_onode_manager_test_t, 1_single)
 {
   run_async([this] {
     uint64_t block_size = tm->get_block_size();
@@ -263,7 +267,7 @@ TEST_F(fltree_onode_manager_test_t, 1_single)
   });
 }
 
-TEST_F(fltree_onode_manager_test_t, 2_synthetic)
+TEST_P(fltree_onode_manager_test_t, 2_synthetic)
 {
   run_async([this] {
     uint64_t block_size = tm->get_block_size();
@@ -315,3 +319,12 @@ TEST_F(fltree_onode_manager_test_t, 2_synthetic)
     validate_list_onodes(pool);
   });
 }
+
+INSTANTIATE_TEST_SUITE_P(
+  fltree_onode__manager_test,
+  fltree_onode_manager_test_t,
+  ::testing::Values (
+    "segmented",
+    "circularbounded"
+  )
+);
index 26461b87f0400dd5612dcc94cd13bc56285a3db5..7357b5ced1ed1a7b8be8e2ca42ba521fdefe83f3 100644 (file)
@@ -1572,7 +1572,7 @@ struct d_seastore_tm_test_t :
   }
 };
 
-TEST_F(d_seastore_tm_test_t, 6_random_tree_insert_erase)
+TEST_P(d_seastore_tm_test_t, 6_random_tree_insert_erase)
 {
   run_async([this] {
     constexpr bool TEST_SEASTORE = true;
@@ -1662,7 +1662,7 @@ TEST_F(d_seastore_tm_test_t, 6_random_tree_insert_erase)
   });
 }
 
-TEST_F(d_seastore_tm_test_t, 7_tree_insert_erase_eagain)
+TEST_P(d_seastore_tm_test_t, 7_tree_insert_erase_eagain)
 {
   run_async([this] {
     constexpr double EAGAIN_PROBABILITY = 0.1;
@@ -1781,3 +1781,12 @@ TEST_F(d_seastore_tm_test_t, 7_tree_insert_erase_eagain)
     tree.reset();
   });
 }
+
+INSTANTIATE_TEST_SUITE_P(
+  d_seastore_tm_test,
+  d_seastore_tm_test_t,
+  ::testing::Values (
+    "segmented",
+    "circularbounded"
+  )
+);
index 0635358463aa5ab118eba15e0714c06e5163c34f..f18c3ac670ad66b596bfdaf0056b1e89f6bf9467 100644 (file)
@@ -249,7 +249,7 @@ struct lba_btree_test : btree_test_base {
   }
 
   static auto get_map_val(extent_len_t len) {
-    return lba_map_val_t{0, P_ADDR_NULL, len, 0};
+    return lba_map_val_t{0, (pladdr_t)P_ADDR_NULL, len, 0};
   }
 
   device_off_t next_off = 0;
@@ -432,7 +432,7 @@ struct btree_lba_manager_test : btree_test_base {
            0,
            get_paddr());
        return lba_manager->alloc_extent(
-         t, hint, len, extent->get_paddr(), extent.get());
+         t, hint, len, extent->get_paddr(), *extent);
       }).unsafe_get0();
     logger().debug("alloc'd: {}", *ret);
     EXPECT_EQ(len, ret->get_length());
@@ -468,11 +468,13 @@ struct btree_lba_manager_test : btree_test_base {
       [=, this](auto &t) {
        return lba_manager->decref_extent(
          t,
-         target->first
+         target->first,
+         true
        ).si_then([this, &t, target](auto result) {
          EXPECT_EQ(result.refcount, target->second.refcount);
          if (result.refcount == 0) {
-           return cache->retire_extent_addr(t, result.addr, result.length);
+           return cache->retire_extent_addr(
+             t, result.addr.get_paddr(), result.length);
          }
          return Cache::retire_extent_iertr::now();
        });
index 05cd542230e21bb38d6bfcdc8c7298c427676df6..0bf2d41358bfc7fa19dba27cd4d47f8358873438 100644 (file)
@@ -63,9 +63,9 @@ std::optional<record_t> decode_record(
 struct entry_validator_t {
   bufferlist bl;
   int entries;
-  journal_seq_t last_seq;
   record_t record;
-  rbm_abs_addr addr = 0;
+  segment_nonce_t magic = 0;
+  journal_seq_t seq;
 
   template <typename... T>
   entry_validator_t(T&&... entry) : record(std::forward<T>(entry)...) {}
@@ -92,20 +92,35 @@ struct entry_validator_t {
       ++iter_delta;
     }
   }
-
   void validate(CircularBoundedJournal &cbj) {
     rbm_abs_addr offset = 0;
+    auto cursor = scan_valid_records_cursor(seq);
+    cbj.test_initialize_cursor(cursor);
     for (int i = 0; i < entries; i++) {
-      paddr_t paddr = convert_abs_addr_to_paddr(
-       addr + offset,
-       cbj.get_device_id());
-      auto [header, buf] = *(cbj.read_record(paddr, NULL_SEG_SEQ).unsafe_get0());
-      auto record = decode_record(buf);
+      paddr_t paddr = seq.offset.add_offset(offset);
+      cursor.seq.offset = paddr;
+      auto md = cbj.test_read_validate_record_metadata(
+       cursor, magic).unsafe_get0();
+      assert(md);
+      auto& [header, md_bl] = *md;
+      auto dbuf = cbj.read(
+       paddr.add_offset(header.mdlength),
+       header.dlength).unsafe_get0();
+
+      bufferlist bl;
+      bl.append(md_bl);
+      bl.append(dbuf);
+      auto record = decode_record(bl);
       validate(*record);
       offset += header.mdlength + header.dlength;
+      cursor.last_committed = header.committed_to;
     }
   }
 
+  rbm_abs_addr get_abs_addr() {
+    return convert_paddr_to_abs_addr(seq.offset);
+  }
+
   bool validate_delta(bufferlist bl) {
     for (auto &&block : record.deltas) {
       if (bl.begin().crc32c(bl.length(), 1) ==
@@ -164,11 +179,11 @@ struct cbjournal_test_t : public seastar_test_suite_t, JournalTrimmer
     auto [addr, w_result] = cbj->submit_record(
          std::move(record),
          handle).unsafe_get0();
-    entries.back().addr = 
-      convert_paddr_to_abs_addr(w_result.start_seq.offset);
+    entries.back().seq = w_result.start_seq;
     entries.back().entries = 1;
-    logger().debug("submit entry to addr {}", entries.back().addr);
-    return entries.back().addr;
+    entries.back().magic = cbj->get_cjs().get_cbj_header().magic;
+    logger().debug("submit entry to addr {}", entries.back().seq);
+    return convert_paddr_to_abs_addr(entries.back().seq.offset);
   }
 
   seastar::future<> tear_down_fut() final {
@@ -224,8 +239,8 @@ struct cbjournal_test_t : public seastar_test_suite_t, JournalTrimmer
       for (auto &i : entries) {
        paddr_t base = offsets.write_result.start_seq.offset; 
        rbm_abs_addr addr = convert_paddr_to_abs_addr(base);
-       if (addr == i.addr) {
-         logger().debug(" compare addr: {} and i.addr {} ", base, i.addr);
+       if (addr == i.get_abs_addr()) {
+         logger().debug(" compare addr: {} and i.addr {} ", base, i.get_abs_addr());
          found = i.validate_delta(e.bl);
          break;
        }
@@ -308,7 +323,10 @@ struct cbjournal_test_t : public seastar_test_suite_t, JournalTrimmer
     ).safe_then([this] {
       return replay(
       ).safe_then([this] {
-       return open();
+       return open(
+       ).safe_then([this] {
+         return replay();
+       });
       });
     }).handle_error(crimson::ct_error::assert_all{});
   }
@@ -367,7 +385,7 @@ TEST_F(cbjournal_test_t, submit_full_records)
        });
     }
 
-    update_journal_tail(entries.back().addr, record_total_size);
+    update_journal_tail(entries.back().get_abs_addr(), record_total_size);
     ASSERT_EQ(get_records_total_size(),
             get_records_available_size());
 
@@ -409,7 +427,7 @@ TEST_F(cbjournal_test_t, boudary_check_verify)
 
     uint64_t avail = get_records_available_size();
     // forward 2 recod size here because 1 block is reserved between head and tail
-    update_journal_tail(entries.front().addr, record_total_size * 2);
+    update_journal_tail(entries.front().get_abs_addr(), record_total_size * 2);
     entries.erase(entries.begin());
     entries.erase(entries.begin());
     ASSERT_EQ(avail + (record_total_size * 2), get_records_available_size());
@@ -437,7 +455,7 @@ TEST_F(cbjournal_test_t, update_header)
     auto record_total_size = r_size.get_encoded_length();
     submit_record(std::move(rec));
 
-    update_journal_tail(entries.front().addr, record_total_size);
+    update_journal_tail(entries.front().get_abs_addr(), record_total_size);
     cbj->get_cjs().write_header().unsafe_get0();
     auto [update_header, update_buf2] = *(cbj->get_cjs().read_header().unsafe_get0());
     cbj->close().unsafe_get0();
@@ -466,7 +484,7 @@ TEST_F(cbjournal_test_t, replay)
     }
     // will be appended at the begining of WAL
     uint64_t avail = get_records_available_size();
-    update_journal_tail(entries.front().addr, record_total_size * 2);
+    update_journal_tail(entries.front().get_abs_addr(), record_total_size * 2);
     entries.erase(entries.begin());
     entries.erase(entries.begin());
     ASSERT_EQ(avail + (record_total_size * 2), get_records_available_size());
@@ -513,3 +531,53 @@ TEST_F(cbjournal_test_t, replay_after_reset)
       get_records_used_size());
   });
 }
+
+TEST_F(cbjournal_test_t, multiple_submit_at_end)
+{
+  run_async([this] {
+    record_t rec {
+     { generate_extent(1), generate_extent(2) },
+     { generate_delta(20), generate_delta(21) }
+     };
+    auto r_size = record_group_size_t(rec.size, block_size);
+    auto record_total_size = r_size.get_encoded_length();
+    submit_record(std::move(rec));
+    while (is_available_size(record_total_size)) {
+    submit_record(
+      record_t {
+       { generate_extent(1), generate_extent(2) },
+       { generate_delta(20), generate_delta(21) }
+       });
+    }
+    update_journal_tail(entries.front().get_abs_addr(), record_total_size * 8);
+    for (int i = 0; i < 8; i++) {
+      entries.erase(entries.begin());
+    }
+    seastar::parallel_for_each(
+      boost::make_counting_iterator(0u),
+      boost::make_counting_iterator(4u),
+      [&](auto) {
+       return seastar::async([&] {
+         auto writes = 0;
+         while (writes < 2) {
+           record_t rec {
+            { generate_extent(1) },
+            { generate_delta(20) } };
+           submit_record(std::move(rec));
+           writes++;
+         }
+       });
+      }).get0();
+    auto old_written_to = get_written_to();
+    cbj->close().unsafe_get0();
+    cbj->replay(
+      [](const auto &offsets,
+            const auto &e,
+            auto &dirty_seq,
+            auto &alloc_seq,
+            auto last_modified) {
+      return Journal::replay_ertr::make_ready_future<bool>(true);
+    }).unsafe_get0();
+    assert(get_written_to() == old_written_to);
+  });
+}
index 00c5a6b87cfa25297782a5f3d9e346b122df873b..cedcc5e8f4418fddc83d472082e500a0132a334e 100644 (file)
@@ -100,7 +100,7 @@ struct collection_manager_test_t :
   }
 };
 
-TEST_F(collection_manager_test_t, basic)
+TEST_P(collection_manager_test_t, basic)
 {
   run_async([this] {
     coll_root_t coll_root = get_root();
@@ -137,7 +137,7 @@ TEST_F(collection_manager_test_t, basic)
   });
 }
 
-TEST_F(collection_manager_test_t, overflow)
+TEST_P(collection_manager_test_t, overflow)
 {
   run_async([this] {
     coll_root_t coll_root = get_root();
@@ -158,7 +158,7 @@ TEST_F(collection_manager_test_t, overflow)
   });
 }
 
-TEST_F(collection_manager_test_t, update)
+TEST_P(collection_manager_test_t, update)
 {
   run_async([this] {
     coll_root_t coll_root = get_root();
@@ -184,3 +184,12 @@ TEST_F(collection_manager_test_t, update)
     checking_mappings(coll_root);
   });
 }
+
+INSTANTIATE_TEST_SUITE_P(
+  collection_manager_test,
+  collection_manager_test_t,
+  ::testing::Values (
+    "segmented",
+    "circularbounded"
+  )
+);
index 11b9ed0e6cca7bbd5e66dffc09e429ac0dcde582..6510cb5d93fecb09386d26398cfa9a471b9843e0 100644 (file)
@@ -34,6 +34,9 @@ public:
     dirty = true;
     return layout;
   }
+  bool is_alive() const {
+    return true;
+  }
   bool is_dirty() const { return dirty; }
   laddr_t get_hint() const final {return L_ADDR_MIN; }
   ~TestOnode() final = default;
@@ -160,7 +163,7 @@ struct object_data_handler_test_t:
   }
 };
 
-TEST_F(object_data_handler_test_t, single_write)
+TEST_P(object_data_handler_test_t, single_write)
 {
   run_async([this] {
     write(1<<20, 8<<10, 'c');
@@ -170,7 +173,7 @@ TEST_F(object_data_handler_test_t, single_write)
   });
 }
 
-TEST_F(object_data_handler_test_t, multi_write)
+TEST_P(object_data_handler_test_t, multi_write)
 {
   run_async([this] {
     write((1<<20) - (4<<10), 4<<10, 'a');
@@ -185,7 +188,7 @@ TEST_F(object_data_handler_test_t, multi_write)
   });
 }
 
-TEST_F(object_data_handler_test_t, write_hole)
+TEST_P(object_data_handler_test_t, write_hole)
 {
   run_async([this] {
     write((1<<20) - (4<<10), 4<<10, 'a');
@@ -200,7 +203,7 @@ TEST_F(object_data_handler_test_t, write_hole)
   });
 }
 
-TEST_F(object_data_handler_test_t, overwrite_single)
+TEST_P(object_data_handler_test_t, overwrite_single)
 {
   run_async([this] {
     write((1<<20), 4<<10, 'a');
@@ -211,7 +214,7 @@ TEST_F(object_data_handler_test_t, overwrite_single)
   });
 }
 
-TEST_F(object_data_handler_test_t, overwrite_double)
+TEST_P(object_data_handler_test_t, overwrite_double)
 {
   run_async([this] {
     write((1<<20), 4<<10, 'a');
@@ -229,7 +232,7 @@ TEST_F(object_data_handler_test_t, overwrite_double)
   });
 }
 
-TEST_F(object_data_handler_test_t, overwrite_partial)
+TEST_P(object_data_handler_test_t, overwrite_partial)
 {
   run_async([this] {
     write((1<<20), 12<<10, 'a');
@@ -254,7 +257,7 @@ TEST_F(object_data_handler_test_t, overwrite_partial)
   });
 }
 
-TEST_F(object_data_handler_test_t, unaligned_write)
+TEST_P(object_data_handler_test_t, unaligned_write)
 {
   run_async([this] {
     objaddr_t base = 1<<20;
@@ -271,7 +274,7 @@ TEST_F(object_data_handler_test_t, unaligned_write)
   });
 }
 
-TEST_F(object_data_handler_test_t, unaligned_overwrite)
+TEST_P(object_data_handler_test_t, unaligned_overwrite)
 {
   run_async([this] {
     objaddr_t base = 1<<20;
@@ -292,7 +295,7 @@ TEST_F(object_data_handler_test_t, unaligned_overwrite)
   });
 }
 
-TEST_F(object_data_handler_test_t, truncate)
+TEST_P(object_data_handler_test_t, truncate)
 {
   run_async([this] {
     objaddr_t base = 1<<20;
@@ -314,7 +317,7 @@ TEST_F(object_data_handler_test_t, truncate)
   });
 }
 
-TEST_F(object_data_handler_test_t, no_split) {
+TEST_P(object_data_handler_test_t, no_split) {
   run_async([this] {
     write(0, 8<<10, 'x');
     write(0, 8<<10, 'a');
@@ -326,7 +329,7 @@ TEST_F(object_data_handler_test_t, no_split) {
   });
 }
 
-TEST_F(object_data_handler_test_t, split_left) {
+TEST_P(object_data_handler_test_t, split_left) {
   run_async([this] {
     write(0, 128<<10, 'x');
 
@@ -346,7 +349,7 @@ TEST_F(object_data_handler_test_t, split_left) {
   });
 }
 
-TEST_F(object_data_handler_test_t, split_right) {
+TEST_P(object_data_handler_test_t, split_right) {
   run_async([this] {
     write(0, 128<<10, 'x');
     write(4<<10, 60<<10, 'a');
@@ -364,7 +367,7 @@ TEST_F(object_data_handler_test_t, split_right) {
     read(0, 128<<10);
   });
 }
-TEST_F(object_data_handler_test_t, split_left_right) {
+TEST_P(object_data_handler_test_t, split_left_right) {
   run_async([this] {
     write(0, 128<<10, 'x');
     write(48<<10, 32<<10, 'a');
@@ -381,7 +384,7 @@ TEST_F(object_data_handler_test_t, split_left_right) {
     }
   });
 }
-TEST_F(object_data_handler_test_t, multiple_split) {
+TEST_P(object_data_handler_test_t, multiple_split) {
   run_async([this] {
     write(0, 128<<10, 'x');
 
@@ -415,3 +418,14 @@ TEST_F(object_data_handler_test_t, multiple_split) {
     read(0, 128<<10);
   });
 }
+
+INSTANTIATE_TEST_SUITE_P(
+  object_data_handler_test,
+  object_data_handler_test_t,
+  ::testing::Values (
+    "segmented",
+    "circularbounded"
+  )
+);
+
+
index 9973add40e9c1bb835c42f938f95d74afefc1549..ab2218565f8ac4d44da1d8eb5cbe5d6f7c7e7c6b 100644 (file)
@@ -280,7 +280,7 @@ struct omap_manager_test_t :
   }
 };
 
-TEST_F(omap_manager_test_t, basic)
+TEST_P(omap_manager_test_t, basic)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -312,7 +312,7 @@ TEST_F(omap_manager_test_t, basic)
   });
 }
 
-TEST_F(omap_manager_test_t, force_leafnode_split)
+TEST_P(omap_manager_test_t, force_leafnode_split)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -333,7 +333,7 @@ TEST_F(omap_manager_test_t, force_leafnode_split)
   });
 }
 
-TEST_F(omap_manager_test_t, force_leafnode_split_merge)
+TEST_P(omap_manager_test_t, force_leafnode_split_merge)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -376,7 +376,7 @@ TEST_F(omap_manager_test_t, force_leafnode_split_merge)
   });
 }
 
-TEST_F(omap_manager_test_t, force_leafnode_split_merge_fullandbalanced)
+TEST_P(omap_manager_test_t, force_leafnode_split_merge_fullandbalanced)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -423,7 +423,7 @@ TEST_F(omap_manager_test_t, force_leafnode_split_merge_fullandbalanced)
   });
 }
 
-TEST_F(omap_manager_test_t, force_split_listkeys_list_rmkey_range_clear)
+TEST_P(omap_manager_test_t, force_split_listkeys_list_rmkey_range_clear)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -511,7 +511,7 @@ TEST_F(omap_manager_test_t, force_split_listkeys_list_rmkey_range_clear)
   });
 }
 
-TEST_F(omap_manager_test_t, force_inner_node_split_list_rmkey_range)
+TEST_P(omap_manager_test_t, force_inner_node_split_list_rmkey_range)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -584,7 +584,7 @@ TEST_F(omap_manager_test_t, force_inner_node_split_list_rmkey_range)
 }
 
 
-TEST_F(omap_manager_test_t, internal_force_split)
+TEST_P(omap_manager_test_t, internal_force_split)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -606,7 +606,7 @@ TEST_F(omap_manager_test_t, internal_force_split)
   });
 }
 
-TEST_F(omap_manager_test_t, internal_force_merge_fullandbalanced)
+TEST_P(omap_manager_test_t, internal_force_merge_fullandbalanced)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -646,7 +646,7 @@ TEST_F(omap_manager_test_t, internal_force_merge_fullandbalanced)
   });
 }
 
-TEST_F(omap_manager_test_t, replay)
+TEST_P(omap_manager_test_t, replay)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -692,7 +692,7 @@ TEST_F(omap_manager_test_t, replay)
 }
 
 
-TEST_F(omap_manager_test_t, internal_force_split_to_root)
+TEST_P(omap_manager_test_t, internal_force_split_to_root)
 {
   run_async([this] {
     omap_root_t omap_root = initialize();
@@ -719,3 +719,12 @@ TEST_F(omap_manager_test_t, internal_force_split_to_root)
     check_mappings(omap_root);
   });
 }
+
+INSTANTIATE_TEST_SUITE_P(
+  omap_manager_test,
+  omap_manager_test_t,
+  ::testing::Values (
+    "segmented",
+    "circularbounded"
+  )
+);
index e5d23132dd5edb773bda13adebbaeab73649436e..63bf4c51f2a276676d2d4cd4270e1b9b0d9c2392 100644 (file)
@@ -56,8 +56,7 @@ ghobject_t make_temp_oid(int i) {
 
 struct seastore_test_t :
   public seastar_test_suite_t,
-  SeaStoreTestState,
-  ::testing::WithParamInterface<const char*> {
+  SeaStoreTestState {
 
   coll_t coll_name{spg_t{pg_t{0, 0}}};
   CollectionRef coll;
@@ -65,16 +64,7 @@ struct seastore_test_t :
   seastore_test_t() {}
 
   seastar::future<> set_up_fut() final {
-    std::string j_type = GetParam();
-    journal_type_t journal;
-    if (j_type == "segmented") {
-      journal = journal_type_t::SEGMENTED;
-    } else if (j_type == "circularbounded") {
-      journal = journal_type_t::RANDOM_BLOCK;
-    } else {
-      ceph_assert(0 == "no support");
-    }
-    return tm_setup(journal
+    return tm_setup(
     ).then([this] {
       return sharded_seastore->create_new_collection(coll_name);
     }).then([this](auto coll_ref) {
@@ -117,6 +107,8 @@ struct seastore_test_t :
     std::map<string, bufferlist> omap;
     bufferlist contents;
 
+    std::map<snapid_t, bufferlist> clone_contents;
+
     void touch(
       CTransaction &t) {
       t.touch(cid, oid);
@@ -244,6 +236,32 @@ struct seastore_test_t :
        coll,
        std::move(t)).get0();
     }
+
+    void clone(
+      SeaStoreShard &sharded_seastore,
+      snapid_t snap) {
+      ghobject_t coid = oid;
+      coid.hobj.snap = snap;
+      CTransaction t;
+      t.clone(cid, oid, coid);
+      sharded_seastore.do_transaction(
+       coll,
+       std::move(t)).get0();
+      clone_contents[snap].reserve(contents.length());
+      auto it = contents.begin();
+      it.copy_all(clone_contents[snap]);
+    }
+
+    object_state_t get_clone(snapid_t snap) {
+      auto coid = oid;
+      coid.hobj.snap = snap;
+      auto clone_obj = object_state_t{cid, coll, coid};
+      clone_obj.contents.reserve(clone_contents[snap].length());
+      auto it = clone_contents[snap].begin();
+      it.copy_all(clone_obj.contents);
+      return clone_obj;
+    }
+
     void write(
       SeaStoreShard &sharded_seastore,
       uint64_t offset,
@@ -308,10 +326,12 @@ struct seastore_test_t :
       uint64_t offset,
       uint64_t len) {
       bufferlist to_check;
-      to_check.substr_of(
-       contents,
-       offset,
-       len);
+      if (contents.length() >= offset) {
+       to_check.substr_of(
+         contents,
+         offset,
+         std::min(len, (uint64_t)contents.length()));
+      }
       auto ret = sharded_seastore.read(
        coll,
        oid,
@@ -767,6 +787,79 @@ TEST_P(seastore_test_t, omap_test_simple)
   });
 }
 
+TEST_P(seastore_test_t, clone_aligned_extents)
+{
+  run_async([this] {
+    auto &test_obj = get_object(make_oid(0));
+    test_obj.write(*sharded_seastore, 0, 4096, 'a');
+
+    test_obj.clone(*sharded_seastore, 10);
+    std::cout << "reading origin after clone10" << std::endl;
+    test_obj.read(*sharded_seastore, 0, 4096);
+    test_obj.write(*sharded_seastore, 0, 4096, 'b');
+    test_obj.write(*sharded_seastore, 4096, 4096, 'c');
+    std::cout << "reading origin after clone10 and write" << std::endl;
+    test_obj.read(*sharded_seastore, 0, 8192);
+    auto clone_obj10 = test_obj.get_clone(10);
+    std::cout << "reading clone after clone10 and write" << std::endl;
+    clone_obj10.read(*sharded_seastore, 0, 8192);
+
+    test_obj.clone(*sharded_seastore, 20);
+    std::cout << "reading origin after clone20" << std::endl;
+    test_obj.read(*sharded_seastore, 0, 4096);
+    test_obj.write(*sharded_seastore, 0, 4096, 'd');
+    test_obj.write(*sharded_seastore, 4096, 4096, 'e');
+    test_obj.write(*sharded_seastore, 8192, 4096, 'f');
+    std::cout << "reading origin after clone20 and write" << std::endl;
+    test_obj.read(*sharded_seastore, 0, 12288);
+    auto clone_obj20 = test_obj.get_clone(20);
+    std::cout << "reading clone after clone20 and write" << std::endl;
+    clone_obj10.read(*sharded_seastore, 0, 12288);
+    clone_obj20.read(*sharded_seastore, 0, 12288);
+  });
+}
+
+TEST_P(seastore_test_t, clone_unaligned_extents)
+{
+  run_async([this] {
+    auto &test_obj = get_object(make_oid(0));
+    test_obj.write(*sharded_seastore, 0, 8192, 'a');
+    test_obj.write(*sharded_seastore, 8192, 8192, 'b');
+    test_obj.write(*sharded_seastore, 16384, 8192, 'c');
+
+    test_obj.clone(*sharded_seastore, 10);
+    test_obj.write(*sharded_seastore, 4096, 12288, 'd');
+    std::cout << "reading origin after clone10 and write" << std::endl;
+    test_obj.read(*sharded_seastore, 0, 24576);
+
+    auto clone_obj10 = test_obj.get_clone(10);
+    std::cout << "reading clone after clone10 and write" << std::endl;
+    clone_obj10.read(*sharded_seastore, 0, 24576);
+
+    test_obj.clone(*sharded_seastore, 20);
+    test_obj.write(*sharded_seastore, 8192, 12288, 'e');
+    std::cout << "reading origin after clone20 and write" << std::endl;
+    test_obj.read(*sharded_seastore, 0, 24576);
+
+    auto clone_obj20 = test_obj.get_clone(20);
+    std::cout << "reading clone after clone20 and write" << std::endl;
+    clone_obj10.read(*sharded_seastore, 0, 24576);
+    clone_obj20.read(*sharded_seastore, 0, 24576);
+
+    test_obj.write(*sharded_seastore, 0, 24576, 'f');
+    test_obj.clone(*sharded_seastore, 30);
+    test_obj.write(*sharded_seastore, 8192, 4096, 'g');
+    std::cout << "reading origin after clone30 and write" << std::endl;
+    test_obj.read(*sharded_seastore, 0, 24576);
+
+    auto clone_obj30 = test_obj.get_clone(30);
+    std::cout << "reading clone after clone30 and write" << std::endl;
+    clone_obj10.read(*sharded_seastore, 0, 24576);
+    clone_obj20.read(*sharded_seastore, 0, 24576);
+    clone_obj30.read(*sharded_seastore, 0, 24576);
+  });
+}
+
 TEST_P(seastore_test_t, attr)
 {
   run_async([this] {
index d0bc2bd3f8f190ee9cfbbda88c1a519580ef284c..1148884a0c1939b5e6137dee533cd1e1ac930f6d 100644 (file)
@@ -56,8 +56,7 @@ struct fmt::formatter<test_extent_record_t> : fmt::formatter<std::string_view> {
 
 struct transaction_manager_test_t :
   public seastar_test_suite_t,
-  TMTestState,
-  ::testing::WithParamInterface<const char*> {
+  TMTestState {
 
   std::random_device rd;
   std::mt19937 gen;
@@ -76,14 +75,7 @@ struct transaction_manager_test_t :
   }
 
   seastar::future<> set_up_fut() final {
-    std::string j_type = GetParam();
-    if (j_type == "segmented") {
-      return tm_setup(journal_type_t::SEGMENTED);
-    } else if (j_type == "circularbounded") {
-      return tm_setup(journal_type_t::RANDOM_BLOCK);
-    } else {
-      ceph_assert(0 == "no support");
-    }
+    return tm_setup();
   }
 
   seastar::future<> tear_down_fut() final {
@@ -487,6 +479,33 @@ struct transaction_manager_test_t :
     return ext;
   }
 
+  TestBlockRef try_read_pin(
+    test_transaction_t &t,
+    LBAMappingRef &&pin) {
+    using ertr = with_trans_ertr<TransactionManager::base_iertr>;
+    using ret = ertr::future<TestBlockRef>;
+    auto addr = pin->get_key();
+    auto ext = with_trans_intr(*(t.t), [&](auto& trans) {
+      return tm->read_pin<TestBlock>(trans, std::move(pin));
+    }).safe_then([](auto ext) -> ret {
+      return ertr::make_ready_future<TestBlockRef>(ext);
+    }).handle_error(
+      [](const crimson::ct_error::eagain &e) {
+       return seastar::make_ready_future<TestBlockRef>();
+      },
+      crimson::ct_error::assert_all{
+       "read_pin got invalid error"
+      }
+    ).get0();
+    if (ext) {
+      EXPECT_EQ(addr, ext->get_laddr());
+    }
+    if (t.t->is_conflicted()) {
+      return nullptr;
+    }
+    return ext;
+  }
+
   test_block_mutator_t mutator;
   TestBlockRef mutate_extent(
     test_transaction_t &t,
@@ -514,6 +533,41 @@ struct transaction_manager_test_t :
     return ext;
   }
 
+  LBAMappingRef get_pin(
+    test_transaction_t &t,
+    laddr_t offset) {
+    ceph_assert(test_mappings.contains(offset, t.mapping_delta));
+    auto pin = with_trans_intr(*(t.t), [&](auto& trans) {
+      return tm->get_pin(trans, offset);
+    }).unsafe_get0();
+    EXPECT_EQ(offset, pin->get_key());
+    return pin;
+  }
+
+  LBAMappingRef try_get_pin(
+    test_transaction_t &t,
+    laddr_t offset) {
+    ceph_assert(test_mappings.contains(offset, t.mapping_delta));
+    using ertr = with_trans_ertr<TransactionManager::get_pin_iertr>;
+    using ret = ertr::future<LBAMappingRef>;
+    auto pin = with_trans_intr(*(t.t), [&](auto& trans) {
+      return tm->get_pin(trans, offset);
+    }).safe_then([](auto pin) -> ret {
+      return ertr::make_ready_future<LBAMappingRef>(std::move(pin));
+    }).handle_error(
+      [](const crimson::ct_error::eagain &e) {
+       return seastar::make_ready_future<LBAMappingRef>();
+      },
+      crimson::ct_error::assert_all{
+       "get_extent got invalid error"
+      }
+    ).get0();
+    if (pin) {
+      EXPECT_EQ(offset, pin->get_key());
+    }
+    return pin;
+  }
+
   void inc_ref(test_transaction_t &t, laddr_t offset) {
     ceph_assert(test_mappings.contains(offset, t.mapping_delta));
     ceph_assert(test_mappings.get(offset, t.mapping_delta).refcount > 0);
@@ -928,55 +982,343 @@ struct transaction_manager_test_t :
     });
   }
 
-  std::optional<TestBlockRef> map_existing_extent(
+  using remap_entry = TransactionManager::remap_entry;
+  LBAMappingRef remap_pin(
     test_transaction_t &t,
-    laddr_t hint,
-    paddr_t existing_paddr,
-    extent_len_t length) {
+    LBAMappingRef &&opin,
+    extent_len_t new_offset,
+    extent_len_t new_len) {
     if (t.t->is_conflicted()) {
-      return std::nullopt;
+      return nullptr;
     }
-    auto extent = with_trans_intr(*(t.t), [&](auto& trans) {
-      return tm->map_existing_extent<TestBlock>(trans, hint, existing_paddr, length);
+    auto o_laddr = opin->get_key();
+    auto pin = with_trans_intr(*(t.t), [&](auto& trans) {
+      return tm->remap_pin<TestBlock>(
+        trans, std::move(opin), std::array{
+          remap_entry(new_offset, new_len)}
+      ).si_then([](auto ret) {
+        return std::move(ret[0]);
+      });
     }).handle_error(crimson::ct_error::eagain::handle([] {
-      return TCachedExtentRef<TestBlock>(new TestBlock(0));
+      LBAMappingRef t = nullptr;
+      return t;
     }), crimson::ct_error::pass_further_all{}).unsafe_get0();
     if (t.t->is_conflicted()) {
-      return std::nullopt;
+      return nullptr;
     }
-    EXPECT_TRUE(extent->get_length() != 0);
-    EXPECT_FALSE(test_mappings.contains(extent->get_laddr(), t.mapping_delta));
-    EXPECT_EQ(length, extent->get_length());
-    test_mappings.alloced(hint, *extent, t.mapping_delta);
-    return std::make_optional(std::move(extent));
+    test_mappings.dec_ref(o_laddr, t.mapping_delta);
+    EXPECT_FALSE(test_mappings.contains(o_laddr, t.mapping_delta));
+    EXPECT_TRUE(pin);
+    EXPECT_EQ(pin->get_length(), new_len);
+    EXPECT_EQ(pin->get_key(), o_laddr + new_offset);
+
+    auto extent = try_read_pin(t, pin->duplicate());
+    if (extent) {
+      test_mappings.alloced(pin->get_key(), *extent, t.mapping_delta);
+      EXPECT_TRUE(extent->is_exist_clean());
+    } else {
+      ceph_assert(t.t->is_conflicted());
+      return nullptr;
+    }
+    return pin;
+  }
+
+  using _overwrite_pin_iertr = TransactionManager::get_pin_iertr;
+  using _overwrite_pin_ret = _overwrite_pin_iertr::future<
+    std::tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>>;
+  _overwrite_pin_ret _overwrite_pin(
+    Transaction &t,
+    LBAMappingRef &&opin,
+    extent_len_t new_offset,
+    extent_len_t new_len,
+    ceph::bufferlist &bl) {
+    auto o_laddr = opin->get_key();
+    auto o_len = opin->get_length();
+    if (new_offset != 0 && o_len != new_offset + new_len) {
+      return tm->remap_pin<TestBlock, 2>(
+        t,
+        std::move(opin),
+        std::array{
+          remap_entry(
+            0,
+            new_offset),
+          remap_entry(
+            new_offset + new_len,
+            o_len - new_offset - new_len)
+        }
+      ).si_then([this, new_offset, new_len, o_laddr, &t, &bl](auto ret) {
+        return tm->alloc_extent<TestBlock>(t, o_laddr + new_offset, new_len
+        ).si_then([this, ret = std::move(ret), new_len,
+                   new_offset, o_laddr, &t, &bl](auto ext) mutable {
+          ceph_assert(ret.size() == 2);
+          auto iter = bl.cbegin();
+          iter.copy(new_len, ext->get_bptr().c_str());
+          auto r_laddr = o_laddr + new_offset + new_len;
+          // old pins expired after alloc new extent, need to get it.
+          return tm->get_pin(t, o_laddr
+          ).si_then([this, &t, ext = std::move(ext), r_laddr](auto lpin) mutable {
+            return tm->get_pin(t, r_laddr
+            ).si_then([lpin = std::move(lpin), ext = std::move(ext)]
+            (auto rpin) mutable {
+              return _overwrite_pin_iertr::make_ready_future<
+                std::tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>>(
+                  std::make_tuple(
+                    std::move(lpin), std::move(ext), std::move(rpin)));
+            });
+          });
+        });
+      });
+    } else if (new_offset == 0 && o_len != new_offset + new_len) {
+      return tm->remap_pin<TestBlock, 1>(
+        t,
+        std::move(opin),
+        std::array{
+          remap_entry(
+            new_offset + new_len,
+            o_len - new_offset - new_len)
+        }
+      ).si_then([this, new_offset, new_len, o_laddr, &t, &bl](auto ret) {
+        return tm->alloc_extent<TestBlock>(t, o_laddr + new_offset, new_len
+        ).si_then([this, ret = std::move(ret), new_offset, new_len,
+                   o_laddr, &t, &bl](auto ext) mutable {
+          ceph_assert(ret.size() == 1);
+          auto iter = bl.cbegin();
+          iter.copy(new_len, ext->get_bptr().c_str());
+          auto r_laddr = o_laddr + new_offset + new_len;
+          return tm->get_pin(t, r_laddr
+          ).si_then([ext = std::move(ext)](auto rpin) mutable {
+            return _overwrite_pin_iertr::make_ready_future<
+              std::tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>>(
+                std::make_tuple(
+                  nullptr, std::move(ext), std::move(rpin)));
+          });
+        });
+      });
+    } else if (new_offset != 0 && o_len == new_offset + new_len) {
+      return tm->remap_pin<TestBlock, 1>(
+        t,
+        std::move(opin),
+        std::array{
+          remap_entry(
+            0,
+            new_offset)
+        }
+      ).si_then([this, new_offset, new_len, o_laddr, &t, &bl](auto ret) {
+        return tm->alloc_extent<TestBlock>(t, o_laddr + new_offset, new_len
+        ).si_then([this, ret = std::move(ret), new_len, o_laddr, &t, &bl]
+          (auto ext) mutable {
+          ceph_assert(ret.size() == 1);
+          auto iter = bl.cbegin();
+          iter.copy(new_len, ext->get_bptr().c_str());
+          return tm->get_pin(t, o_laddr
+          ).si_then([ext = std::move(ext)](auto lpin) mutable {
+            return _overwrite_pin_iertr::make_ready_future<
+              std::tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>>(
+                std::make_tuple(
+                  std::move(lpin), std::move(ext), nullptr));
+          });
+        });
+      });
+    } else {
+      ceph_abort("impossible");
+        return _overwrite_pin_iertr::make_ready_future<
+          std::tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>>(
+            std::make_tuple(nullptr, nullptr, nullptr));
+    }
+  }
+
+  using overwrite_pin_ret = std::tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>;
+  overwrite_pin_ret overwrite_pin(
+    test_transaction_t &t,
+    LBAMappingRef &&opin,
+    extent_len_t new_offset,
+    extent_len_t new_len,
+    ceph::bufferlist &bl) {
+    if (t.t->is_conflicted()) {
+      return std::make_tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>(
+        nullptr, nullptr, nullptr);
+    }
+    auto o_laddr = opin->get_key();
+    auto o_paddr = opin->get_val();
+    auto o_len = opin->get_length();
+    auto res = with_trans_intr(*(t.t), [&](auto& trans) {
+      return _overwrite_pin(
+        trans, std::move(opin), new_offset, new_len, bl);
+    }).handle_error(crimson::ct_error::eagain::handle([] {
+      return std::make_tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>(
+        nullptr, nullptr, nullptr);
+    }), crimson::ct_error::pass_further_all{}).unsafe_get0();
+    if (t.t->is_conflicted()) {
+      return std::make_tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>(
+        nullptr, nullptr, nullptr);
+    }
+    test_mappings.dec_ref(o_laddr, t.mapping_delta);
+    EXPECT_FALSE(test_mappings.contains(o_laddr, t.mapping_delta));
+    auto &[lpin, ext, rpin] = res;
+
+    EXPECT_TRUE(ext);
+    EXPECT_TRUE(lpin || rpin);
+    EXPECT_TRUE(o_len > ext->get_length());
+    if (lpin) {
+      EXPECT_EQ(lpin->get_key(), o_laddr);
+      EXPECT_EQ(lpin->get_val(), o_paddr);
+      EXPECT_EQ(lpin->get_length(), new_offset);
+      auto lext = try_read_pin(t, lpin->duplicate());
+      if (lext) {
+        test_mappings.alloced(lpin->get_key(), *lext, t.mapping_delta);
+        EXPECT_TRUE(lext->is_exist_clean());
+      } else {
+        ceph_assert(t.t->is_conflicted());
+        return std::make_tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>(
+          nullptr, nullptr, nullptr);
+      }
+    }
+    EXPECT_EQ(ext->get_laddr(), o_laddr + new_offset);
+    EXPECT_EQ(ext->get_length(), new_len);
+    test_mappings.alloced(ext->get_laddr(), *ext, t.mapping_delta);
+    if (rpin) {
+      EXPECT_EQ(rpin->get_key(), o_laddr + new_offset + new_len);
+      EXPECT_EQ(rpin->get_val(), o_paddr.add_offset(new_offset)
+        .add_offset(new_len));
+      EXPECT_EQ(rpin->get_length(), o_len - new_offset - new_len);
+      auto rext = try_read_pin(t, rpin->duplicate());
+      if (rext) {
+        test_mappings.alloced(rpin->get_key(), *rext, t.mapping_delta);
+        EXPECT_TRUE(rext->is_exist_clean());
+      } else {
+        ceph_assert(t.t->is_conflicted());
+        return std::make_tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>(
+          nullptr, nullptr, nullptr);
+      }
+    }
+    return std::make_tuple<LBAMappingRef, TestBlockRef, LBAMappingRef>(
+      std::move(lpin), std::move(ext), std::move(rpin));
   }
 
-  void test_map_existing_extent() {
+  void test_remap_pin() {
     run_async([this] {
-      constexpr size_t offset = 16 << 10;
-      constexpr size_t length = 16 << 10;
+      constexpr size_t l_offset = 32 << 10;
+      constexpr size_t l_len = 32 << 10;
+      constexpr size_t r_offset = 64 << 10;
+      constexpr size_t r_len = 32 << 10;
       {
        auto t = create_transaction();
-       auto extent = alloc_extent(t, offset, length);
+       auto lext = alloc_extent(t, l_offset, l_len);
+        lext->set_contents('l', 0, 16 << 10);
+        auto rext = alloc_extent(t, r_offset, r_len);
+        rext->set_contents('r', 16 << 10, 16 << 10);
+       submit_transaction(std::move(t));
+      }
+      {
+       auto t = create_transaction();
+        auto lpin = get_pin(t, l_offset);
+        auto rpin = get_pin(t, r_offset);
+        //split left
+        auto pin1 = remap_pin(t, std::move(lpin), 0, 16 << 10);
+        ASSERT_TRUE(pin1);
+        auto pin2 = remap_pin(t, std::move(pin1), 0, 8 << 10);  
+        ASSERT_TRUE(pin2);
+        auto pin3 = remap_pin(t, std::move(pin2), 0, 4 << 10);
+        ASSERT_TRUE(pin3);
+        auto lext = get_extent(t, pin3->get_key(), pin3->get_length());
+        EXPECT_EQ('l', lext->get_bptr().c_str()[0]);
+       auto mlext = mutate_extent(t, lext);
+       ASSERT_TRUE(mlext->is_exist_mutation_pending());
+       ASSERT_TRUE(mlext.get() == lext.get());
+
+        //split right
+        auto pin4 = remap_pin(t, std::move(rpin), 16 << 10, 16 << 10);
+        ASSERT_TRUE(pin4);
+        auto pin5 = remap_pin(t, std::move(pin4), 8 << 10, 8 << 10);  
+        ASSERT_TRUE(pin5);
+        auto pin6 = remap_pin(t, std::move(pin5), 4 << 10, 4 << 10);
+        ASSERT_TRUE(pin6);
+        auto rext = get_extent(t, pin6->get_key(), pin6->get_length());
+        EXPECT_EQ('r', rext->get_bptr().c_str()[0]);
+       auto mrext = mutate_extent(t, rext);
+       ASSERT_TRUE(mrext->is_exist_mutation_pending());
+       ASSERT_TRUE(mrext.get() == rext.get());
+
+       submit_transaction(std::move(t));
+       check();
+      }
+      replay();
+      check();
+    });
+  }
+
+  void test_overwrite_pin() {
+    run_async([this] {
+      constexpr size_t m_offset = 8 << 10;
+      constexpr size_t m_len = 56 << 10;
+      constexpr size_t l_offset = 64 << 10;
+      constexpr size_t l_len = 64 << 10;
+      constexpr size_t r_offset = 128 << 10;
+      constexpr size_t r_len = 64 << 10;
+      {
+       auto t = create_transaction();
+       auto m_ext = alloc_extent(t, m_offset, m_len);
+        m_ext->set_contents('a', 0 << 10, 8 << 10);
+        m_ext->set_contents('b', 16 << 10, 4 << 10);
+        m_ext->set_contents('c', 36 << 10, 4 << 10);
+        m_ext->set_contents('d', 52 << 10, 4 << 10);
+
+        auto l_ext = alloc_extent(t, l_offset, l_len);
+        auto r_ext = alloc_extent(t, r_offset, r_len);
        submit_transaction(std::move(t));
       }
       {
        auto t = create_transaction();
-       auto extent = get_extent(t, offset, length);
-       auto base_paddr = extent->get_paddr();
-       dec_ref(t, offset);
-       auto extent1 = map_existing_extent(t, offset, base_paddr, 4 << 10);
-       ASSERT_TRUE(extent1.has_value());
-       auto extent2 = map_existing_extent(t, offset + (4 << 10), base_paddr.add_offset(4 << 10), 4 << 10);
-       ASSERT_TRUE(extent2.has_value());
-       auto extent3 = map_existing_extent(t, offset + (8 << 10), base_paddr.add_offset(8 << 10), 8 << 10);
-       ASSERT_TRUE(extent3.has_value());
-       ASSERT_TRUE((*extent1)->is_exist_clean());
-       ASSERT_TRUE((*extent2)->is_exist_clean());
-       ASSERT_TRUE((*extent3)->is_exist_clean());
-       auto extent4 = mutate_extent(t, (*extent3));
-       ASSERT_TRUE(extent4->is_exist_mutation_pending());
-       ASSERT_TRUE((*extent3).get() == extent4.get());
+        auto mpin = get_pin(t, m_offset);
+        auto lpin = get_pin(t, l_offset);
+        auto rpin = get_pin(t, r_offset);
+
+        bufferlist mbl1, mbl2, mbl3;
+        mbl1.append(ceph::bufferptr(ceph::buffer::create(8 << 10, 0)));
+        mbl2.append(ceph::bufferptr(ceph::buffer::create(16 << 10, 0)));
+        mbl3.append(ceph::bufferptr(ceph::buffer::create(12 << 10, 0)));
+        auto [mlp1, mext1, mrp1] = overwrite_pin(
+          t, std::move(mpin), 8 << 10 , 8 << 10, mbl1);
+        auto [mlp2, mext2, mrp2] = overwrite_pin(
+          t, std::move(mrp1), 4 << 10 , 16 << 10, mbl2);
+        auto [mlpin3, me3, mrpin3] = overwrite_pin(
+          t, std::move(mrp2), 4 << 10 , 12 << 10, mbl3);
+        auto mlext1 = get_extent(t, mlp1->get_key(), mlp1->get_length());
+        auto mlext2 = get_extent(t, mlp2->get_key(), mlp2->get_length());
+        auto mlext3 = get_extent(t, mlpin3->get_key(), mlpin3->get_length());
+        auto mrext3 = get_extent(t, mrpin3->get_key(), mrpin3->get_length());
+        EXPECT_EQ('a', mlext1->get_bptr().c_str()[0]);
+        EXPECT_EQ('b', mlext2->get_bptr().c_str()[0]);
+        EXPECT_EQ('c', mlext3->get_bptr().c_str()[0]);
+        EXPECT_EQ('d', mrext3->get_bptr().c_str()[0]);
+        auto mutate_mlext1 = mutate_extent(t, mlext1);
+        auto mutate_mlext2 = mutate_extent(t, mlext2);
+        auto mutate_mlext3 = mutate_extent(t, mlext3);
+       auto mutate_mrext3 = mutate_extent(t, mrext3);
+        ASSERT_TRUE(mutate_mlext1->is_exist_mutation_pending());
+        ASSERT_TRUE(mutate_mlext2->is_exist_mutation_pending());
+       ASSERT_TRUE(mutate_mlext3->is_exist_mutation_pending());
+        ASSERT_TRUE(mutate_mrext3->is_exist_mutation_pending());
+        ASSERT_TRUE(mutate_mlext1.get() == mlext1.get());
+        ASSERT_TRUE(mutate_mlext2.get() == mlext2.get());
+       ASSERT_TRUE(mutate_mlext3.get() == mlext3.get());
+        ASSERT_TRUE(mutate_mrext3.get() == mrext3.get());
+
+        bufferlist lbl1, rbl1;
+        lbl1.append(ceph::bufferptr(ceph::buffer::create(32 << 10, 0)));
+        auto [llp1, lext1, lrp1] = overwrite_pin(
+          t, std::move(lpin), 0 , 32 << 10, lbl1);
+        EXPECT_FALSE(llp1);
+        EXPECT_TRUE(lrp1);
+        EXPECT_TRUE(lext1);
+
+        rbl1.append(ceph::bufferptr(ceph::buffer::create(32 << 10, 0)));
+        auto [rlp1, rext1, rrp1] = overwrite_pin(
+          t, std::move(rpin), 32 << 10 , 32 << 10, rbl1);
+        EXPECT_TRUE(rlp1);
+        EXPECT_TRUE(rext1);
+        EXPECT_FALSE(rrp1);
+
        submit_transaction(std::move(t));
        check();
       }
@@ -985,7 +1327,7 @@ struct transaction_manager_test_t :
     });
   }
 
-  void test_map_existing_extent_concurrent() {
+  void test_remap_pin_concurrent() {
     run_async([this] {
       constexpr unsigned REMAP_NUM = 32;
       constexpr size_t offset = 0;
@@ -1005,7 +1347,7 @@ struct transaction_manager_test_t :
        boost::make_counting_iterator(REMAP_NUM),
        [&](auto) {
          return seastar::async([&] {
-           uint32_t pieces = std::uniform_int_distribution<>(1, 31)(gen);
+           uint32_t pieces = std::uniform_int_distribution<>(6, 31)(gen);
            std::set<uint32_t> split_points;
            for (uint32_t i = 0; i < pieces; i++) {
              auto p = std::uniform_int_distribution<>(1, 256)(gen);
@@ -1013,52 +1355,155 @@ struct transaction_manager_test_t :
            }
 
            auto t = create_transaction();
-           auto ext0 = try_get_extent(t, offset);
-           if (!ext0 || ext0->get_length() != length) {
+            auto pin0 = try_get_pin(t, offset);
+           if (!pin0 || pin0->get_length() != length) {
              early_exit++;
              return;
            }
-           auto paddr = ext0->get_paddr();
-           dec_ref(t, offset);
 
-           auto base = 0;
+            auto last_pin = pin0->duplicate();
            ASSERT_TRUE(!split_points.empty());
            for (auto off : split_points) {
-             if (off == 0) {
+             if (off == 0 || off >= 255) {
                continue;
              }
-
-             auto ext_ = map_existing_extent(t, base << 10, paddr.add_offset(base << 10), (off - base) << 10);
-             if (!ext_) {
+              auto new_off = (off << 10) - last_pin->get_key();
+              auto new_len = last_pin->get_length() - new_off;
+              //always remap right extent at new split_point
+             auto pin = remap_pin(t, std::move(last_pin), new_off, new_len);
+              if (!pin) {
                conflicted++;
                return;
              }
-             auto ext = *ext_;
-             ASSERT_TRUE(ext->is_exist_clean());
-             if (get_random_contents() % 2 == 0) {
-               auto ext1 = mutate_extent(t, ext);
-               ASSERT_TRUE(ext1->is_exist_mutation_pending());
-             }
-             base = off;
+              last_pin = pin->duplicate();
+           }
+            auto last_ext = try_get_extent(t, last_pin->get_key());
+            if (last_ext) {
+             auto last_ext1 = mutate_extent(t, last_ext);
+             ASSERT_TRUE(last_ext1->is_exist_mutation_pending());
+            } else {
+             conflicted++;
+             return;
+            }
+
+           if (try_submit_transaction(std::move(t))) {
+             success++;
+             logger().info("transaction {} submit the transction",
+                static_cast<void*>(t.t.get()));
+           } else {
+             conflicted++;
+           }
+         });
+       }).handle_exception([](std::exception_ptr e) {
+         logger().info("{}", e);
+       }).get0();
+      logger().info("test_remap_pin_concurrent: "
+        "early_exit {} conflicted {} success {}",
+        early_exit, conflicted, success);
+      ASSERT_TRUE(success == 1);
+      ASSERT_EQ(success + conflicted + early_exit, REMAP_NUM);
+      replay();
+      check();
+    });
+  }
+
+  void test_overwrite_pin_concurrent() {
+    run_async([this] {
+      constexpr unsigned REMAP_NUM = 32;
+      constexpr size_t offset = 0;
+      constexpr size_t length = 256 << 10;
+      {
+       auto t = create_transaction();
+       auto extent = alloc_extent(t, offset, length);
+       ASSERT_EQ(length, extent->get_length());
+       submit_transaction(std::move(t));
+      }
+      int success = 0;
+      int early_exit = 0;
+      int conflicted = 0;
+
+      seastar::parallel_for_each(
+        boost::make_counting_iterator(0u),
+       boost::make_counting_iterator(REMAP_NUM),
+       [&](auto) {
+         return seastar::async([&] {
+           uint32_t pieces = std::uniform_int_distribution<>(6, 31)(gen);
+            if (pieces % 2 == 1) {
+              pieces++;
+            }
+           std::list<uint32_t> split_points;
+           for (uint32_t i = 0; i < pieces; i++) {
+             auto p = std::uniform_int_distribution<>(1, 120)(gen);
+             split_points.push_back(p - p % 4);
            }
+            split_points.sort();
 
-           base <<= 10;
-           if (base != length) {
-             auto ext_ = map_existing_extent(t, base, paddr.add_offset(base), length - base);
-             if (!ext_) {
+           auto t = create_transaction();
+            auto pin0 = try_get_pin(t, offset);
+           if (!pin0 || pin0->get_length() != length) {
+             early_exit++;
+             return;
+           }
+
+            auto empty_transaction = true;
+            auto last_rpin = pin0->duplicate();
+           ASSERT_TRUE(!split_points.empty());
+            while(!split_points.empty()) {
+              // new overwrite area: start_off ~ end_off
+              auto start_off = split_points.front();
+              split_points.pop_front();
+              auto end_off = split_points.front();
+              split_points.pop_front();
+              ASSERT_TRUE(start_off <= end_off);
+              if (((end_off << 10) == pin0->get_key() + pin0->get_length())
+                || (start_off == end_off)) {
+                if (split_points.empty() && empty_transaction) {
+                  early_exit++;
+                  return;
+                }
+                continue;
+              }
+              empty_transaction = false;
+              auto new_off = (start_off << 10) - last_rpin->get_key();
+              auto new_len = (end_off - start_off) << 10;
+              bufferlist bl;
+              bl.append(ceph::bufferptr(ceph::buffer::create(new_len, 0)));
+              auto [lpin, ext, rpin] = overwrite_pin(
+                t, last_rpin->duplicate(), new_off, new_len, bl);
+             if (!ext) {
                conflicted++;
                return;
              }
-             auto ext = *ext_;
-             ASSERT_TRUE(ext->is_exist_clean());
-             if (get_random_contents() % 2 == 0) {
-               auto ext1 = mutate_extent(t, ext);
-               ASSERT_TRUE(ext1->is_exist_mutation_pending());
-             }
+              // lpin is nullptr might not cause by confliction,
+              // it might just not exist.
+              if (lpin) {
+                auto lext = try_get_extent(t, lpin->get_key());
+                if (!lext) {
+                 conflicted++;
+                 return;
+                }
+                if (get_random_contents() % 2 == 0) {
+                 auto lext1 = mutate_extent(t, lext);
+                 ASSERT_TRUE(lext1->is_exist_mutation_pending());
+               }
+              }
+              ASSERT_TRUE(rpin);
+              last_rpin = rpin->duplicate();
            }
+            auto last_rext = try_get_extent(t, last_rpin->get_key());
+            if (!last_rext) {
+             conflicted++;
+             return;
+            }
+           if (get_random_contents() % 2 == 0) {
+              auto last_rext1 = mutate_extent(t, last_rext);
+              ASSERT_TRUE(last_rext1->is_exist_mutation_pending());
+           }
+
            if (try_submit_transaction(std::move(t))) {
              success++;
-             logger().info("transaction {} submit the transction", static_cast<void*>(t.t.get()));
+             logger().info("transaction {} submit the transction",
+                static_cast<void*>(t.t.get()));
            } else {
              conflicted++;
            }
@@ -1066,8 +1511,10 @@ struct transaction_manager_test_t :
        }).handle_exception([](std::exception_ptr e) {
          logger().info("{}", e);
        }).get0();
-      logger().info("test_map_existing_extent_concurrent: early_exit {} conflicted {} success {}", early_exit, conflicted, success);
-      ASSERT_TRUE(success == 1);
+      logger().info("test_overwrite_pin_concurrent: "
+        "early_exit {} conflicted {} success {}",
+        early_exit, conflicted, success);
+      ASSERT_TRUE(success == 1 || early_exit == REMAP_NUM);
       ASSERT_EQ(success + conflicted + early_exit, REMAP_NUM);
       replay();
       check();
@@ -1440,6 +1887,48 @@ TEST_P(tm_single_device_test_t, find_hole_assert_trigger)
   });
 }
 
+TEST_P(tm_single_device_test_t, remap_lazy_read) 
+{
+  constexpr laddr_t offset = 0;
+  constexpr size_t length = 256 << 10;
+   run_async([this, offset] {
+    {
+      auto t = create_transaction();
+      auto extent = alloc_extent(
+       t,
+       offset,
+       length,
+       'a');
+      ASSERT_EQ(offset, extent->get_laddr());
+      check_mappings(t);
+      submit_transaction(std::move(t));
+      check();
+    }
+    replay();
+    {
+      auto t = create_transaction();
+      auto pin = get_pin(t, offset);
+      auto rpin = remap_pin(t, std::move(pin), 0, 128 << 10);
+      check_mappings(t);
+      submit_transaction(std::move(t));
+      check();
+    }
+    replay();
+    {
+      auto t = create_transaction();
+      auto pin = get_pin(t, offset);
+      bufferlist bl;
+      bl.append(ceph::bufferptr(ceph::buffer::create(64 << 10, 0)));
+      auto [lpin, ext, rpin] = overwrite_pin(
+        t, std::move(pin), 4 << 10 , 64 << 10, bl);
+      check_mappings(t);
+      submit_transaction(std::move(t));
+      check();
+    }
+    replay();
+   });
+}
+
 TEST_P(tm_single_device_test_t, random_writes_concurrent)
 {
   test_random_writes_concurrent();
@@ -1460,14 +1949,26 @@ TEST_P(tm_single_device_test_t, parallel_extent_read)
   test_parallel_extent_read();
 }
 
-TEST_P(tm_single_device_test_t, test_map_existing_extent)
+TEST_P(tm_single_device_test_t, test_remap_pin)
 {
-  test_map_existing_extent();
+  test_remap_pin();
 }
-TEST_P(tm_single_device_test_t, test_map_existing_extent_concurrent)
+
+TEST_P(tm_single_device_test_t, test_overwrite_pin)
 {
-  test_map_existing_extent_concurrent();
+  test_overwrite_pin();
 }
+
+TEST_P(tm_single_device_test_t, test_remap_pin_concurrent)
+{
+  test_remap_pin_concurrent();
+}
+
+TEST_P(tm_single_device_test_t, test_overwrite_pin_concurrent)
+{
+  test_overwrite_pin_concurrent();
+}
+
 INSTANTIATE_TEST_SUITE_P(
   transaction_manager_test,
   tm_single_device_test_t,
index fadf17019c13f10db62f05302e9297cf84257154..81200b1db7d976ac1872a1f3f3b05c2bd0dfbed8 100644 (file)
@@ -18,6 +18,9 @@
 #include "crimson/os/seastore/random_block_manager/rbm_device.h"
 #include "crimson/os/seastore/journal/circular_bounded_journal.h"
 #include "crimson/os/seastore/random_block_manager/block_rb_manager.h"
+#ifdef UNIT_TESTS_BUILT
+#include "test/crimson/gtest_seastar.h"
+#endif
 
 using namespace crimson;
 using namespace crimson::os;
@@ -167,7 +170,12 @@ public:
   void set_primary_device_ref(DeviceRef) final;
 };
 
-class EphemeralTestState {
+class EphemeralTestState 
+#ifdef UNIT_TESTS_BUILT
+  : public ::testing::WithParamInterface<const char*> {
+#else 
+  {
+#endif
 protected:
   journal_type_t journal_type;
   size_t num_main_device_managers = 0;
@@ -209,20 +217,23 @@ protected:
     restart_fut().get0();
   }
 
-  seastar::future<> tm_setup(
-    journal_type_t type = journal_type_t::SEGMENTED) {
+  seastar::future<> tm_setup() {
     LOG_PREFIX(EphemeralTestState::tm_setup);
-    journal_type = type;
-    if (journal_type == journal_type_t::SEGMENTED) {
-      devices.reset(new
-        EphemeralSegmentedDevices(
-          num_main_device_managers, num_cold_device_managers));
-    } else {
-      assert(journal_type == journal_type_t::RANDOM_BLOCK);
+#ifdef UNIT_TESTS_BUILT
+    std::string j_type = GetParam();
+#else
+    std::string j_type = "segmented";
+#endif
+    if (j_type == "circularbounded") {
       //TODO: multiple devices
       ceph_assert(num_main_device_managers == 1);
       ceph_assert(num_cold_device_managers == 0);
       devices.reset(new EphemeralRandomBlockDevices(1));
+    } else {
+      // segmented by default
+      devices.reset(new
+        EphemeralSegmentedDevices(
+          num_main_device_managers, num_cold_device_managers));
     }
     SUBINFO(test, "begin with {} devices ...", devices->get_num_devices());
     return devices->setup(
index e75d3d03c59697c01add391f81bf5a68302be26f..8bef5e6517b03bb54ce0dce97ee8ac1096f9ea7e 100644 (file)
@@ -166,7 +166,7 @@ seastar_echo(const entity_addr_t addr, echo_role role, unsigned count)
   if (role == echo_role::as_server) {
     return seastar::do_with(
         seastar_pingpong::Server{crimson::net::Messenger::create(
-            entity_name_t::OSD(0), "server", addr.get_nonce())},
+            entity_name_t::OSD(0), "server", addr.get_nonce(), true)},
         [addr, count](auto& server) mutable {
       std::cout << "server listening at " << addr << std::endl;
       // bind the server
@@ -193,7 +193,7 @@ seastar_echo(const entity_addr_t addr, echo_role role, unsigned count)
   } else {
     return seastar::do_with(
         seastar_pingpong::Client{crimson::net::Messenger::create(
-            entity_name_t::OSD(1), "client", addr.get_nonce())},
+            entity_name_t::OSD(1), "client", addr.get_nonce(), true)},
         [addr, count](auto& client) {
       std::cout << "client sending to " << addr << std::endl;
       client.msgr->set_default_policy(crimson::net::SocketPolicy::lossy_client(0));
index 6fc9c1d7750c80e4527a5a7cf5525c5566c97bf6..a4257224658d18634d19bdc68d0917a21d420f84 100644 (file)
@@ -14,7 +14,6 @@
 #include "crimson/net/Dispatcher.h"
 #include "crimson/net/Messenger.h"
 #include "crimson/net/Interceptor.h"
-#include "crimson/net/SocketConnection.h"
 
 #include <map>
 #include <random>
@@ -24,6 +23,7 @@
 #include <seastar/core/app-template.hh>
 #include <seastar/core/do_with.hh>
 #include <seastar/core/future-util.hh>
+#include <seastar/core/gate.hh>
 #include <seastar/core/reactor.hh>
 #include <seastar/core/sleep.hh>
 #include <seastar/core/with_timeout.hh>
@@ -53,22 +53,91 @@ static entity_addr_t get_server_addr() {
   return saddr;
 }
 
+template <typename T, typename... Args>
+seastar::future<T*> create_sharded(Args... args) {
+  // we should only construct/stop shards on #0
+  return seastar::smp::submit_to(0, [=] {
+    auto sharded_obj = seastar::make_lw_shared<seastar::sharded<T>>();
+    return sharded_obj->start(args...
+    ).then([sharded_obj] {
+      seastar::engine().at_exit([sharded_obj] {
+        return sharded_obj->stop().then([sharded_obj] {});
+      });
+      return sharded_obj.get();
+    });
+  }).then([](seastar::sharded<T> *ptr_shard) {
+    return &ptr_shard->local();
+  });
+}
+
+class ShardedGates
+  : public seastar::peering_sharded_service<ShardedGates> {
+public:
+  ShardedGates() = default;
+  ~ShardedGates() {
+    assert(gate.is_closed());
+  }
+
+  template <typename Func>
+  void dispatch_in_background(const char *what, Func &&f) {
+    std::ignore = seastar::with_gate(
+      container().local().gate, std::forward<Func>(f)
+    ).handle_exception([what](std::exception_ptr eptr) {
+      try {
+        std::rethrow_exception(eptr);
+      } catch (std::exception &e) {
+        logger().error("ShardedGates::dispatch_in_background: "
+                       "{} got exxception {}", what, e.what());
+      }
+    });
+  }
+
+  seastar::future<> close() {
+    return container().invoke_on_all([](auto &local) {
+      return local.gate.close();
+    });
+  }
+
+  static seastar::future<ShardedGates*> create() {
+    return create_sharded<ShardedGates>();
+  }
+
+  // seastar::future<> stop() is intentially not implemented
+
+private:
+  seastar::gate gate;
+};
+
 static seastar::future<> test_echo(unsigned rounds,
                                    double keepalive_ratio)
 {
   struct test_state {
     struct Server final
         : public crimson::net::Dispatcher {
+      ShardedGates &gates;
       crimson::net::MessengerRef msgr;
       crimson::auth::DummyAuthClientServer dummy_auth;
 
+      Server(ShardedGates &gates) : gates{gates} {}
+
+      void ms_handle_accept(
+          crimson::net::ConnectionRef conn,
+          seastar::shard_id prv_shard,
+          bool is_replace) override {
+        logger().info("server accepted {}", *conn);
+        ceph_assert(prv_shard == seastar::this_shard_id());
+        ceph_assert(!is_replace);
+      }
+
       std::optional<seastar::future<>> ms_dispatch(
           crimson::net::ConnectionRef c, MessageRef m) override {
         if (verbose) {
           logger().info("server got {}", *m);
         }
         // reply with a pong
-        std::ignore = c->send(crimson::make_message<MPing>());
+        gates.dispatch_in_background("echo_send_pong", [c] {
+          return c->send(crimson::make_message<MPing>());
+        });
         return {seastar::now()};
       }
 
@@ -76,7 +145,8 @@ static seastar::future<> test_echo(unsigned rounds,
                              const std::string& lname,
                              const uint64_t nonce,
                              const entity_addr_t& addr) {
-        msgr = crimson::net::Messenger::create(name, lname, nonce);
+        msgr = crimson::net::Messenger::create(
+            name, lname, nonce, false);
         msgr->set_default_policy(crimson::net::SocketPolicy::stateless_server(0));
         msgr->set_auth_client(&dummy_auth);
         msgr->set_auth_server(&dummy_auth);
@@ -96,8 +166,73 @@ static seastar::future<> test_echo(unsigned rounds,
       }
     };
 
-    struct Client final
-        : public crimson::net::Dispatcher {
+    class Client final
+        : public crimson::net::Dispatcher,
+          public seastar::peering_sharded_service<Client> {
+    public:
+      Client(seastar::shard_id primary_sid,
+             unsigned rounds,
+             double keepalive_ratio,
+             ShardedGates *gates)
+        : primary_sid{primary_sid},
+          keepalive_dist(std::bernoulli_distribution{keepalive_ratio}),
+          rounds(rounds),
+          gates{*gates} {}
+
+      seastar::future<> init(const entity_name_t& name,
+                             const std::string& lname,
+                             const uint64_t nonce) {
+        assert(seastar::this_shard_id() == primary_sid);
+        msgr = crimson::net::Messenger::create(
+            name, lname, nonce, false);
+        msgr->set_default_policy(crimson::net::SocketPolicy::lossy_client(0));
+        msgr->set_auth_client(&dummy_auth);
+        msgr->set_auth_server(&dummy_auth);
+        return msgr->start({this});
+      }
+
+      seastar::future<> shutdown() {
+        assert(seastar::this_shard_id() == primary_sid);
+        ceph_assert(msgr);
+       msgr->stop();
+        return msgr->shutdown();
+      }
+
+      seastar::future<> dispatch_pingpong(const entity_addr_t& peer_addr) {
+        assert(seastar::this_shard_id() == primary_sid);
+        mono_time start_time = mono_clock::now();
+        auto conn = msgr->connect(peer_addr, entity_name_t::TYPE_OSD);
+        return seastar::futurize_invoke([this, conn] {
+          return do_dispatch_pingpong(conn);
+        }).then([] {
+          // 500ms should be enough to establish the connection
+          return seastar::sleep(500ms);
+        }).then([this, conn, start_time] {
+          return container().invoke_on(
+              conn->get_shard_id(),
+              [pconn=&*conn, start_time](auto &local) {
+            assert(pconn->is_connected());
+            auto session = local.find_session(pconn);
+            std::chrono::duration<double> dur_handshake = session->connected_time - start_time;
+            std::chrono::duration<double> dur_pingpong = session->finish_time - session->connected_time;
+            logger().info("{}: handshake {}, pingpong {}",
+                          *pconn, dur_handshake.count(), dur_pingpong.count());
+          }).then([conn] {});
+        });
+      }
+
+      static seastar::future<Client*> create(
+          unsigned rounds,
+          double keepalive_ratio,
+          ShardedGates *gates) {
+        return create_sharded<Client>(
+          seastar::this_shard_id(),
+          rounds,
+          keepalive_ratio,
+          gates);
+      }
+
+     private:
       struct PingSession : public seastar::enable_shared_from_this<PingSession> {
         unsigned count = 0u;
         mono_time connected_time;
@@ -105,83 +240,54 @@ static seastar::future<> test_echo(unsigned rounds,
       };
       using PingSessionRef = seastar::shared_ptr<PingSession>;
 
-      unsigned rounds;
-      std::bernoulli_distribution keepalive_dist;
-      crimson::net::MessengerRef msgr;
-      std::map<crimson::net::ConnectionRef, seastar::promise<>> pending_conns;
-      std::map<crimson::net::ConnectionRef, PingSessionRef> sessions;
-      crimson::auth::DummyAuthClientServer dummy_auth;
-
-      Client(unsigned rounds, double keepalive_ratio)
-        : rounds(rounds),
-          keepalive_dist(std::bernoulli_distribution{keepalive_ratio}) {}
-
-      PingSessionRef find_session(crimson::net::ConnectionRef c) {
-        auto found = sessions.find(c);
-        if (found == sessions.end()) {
-          ceph_assert(false);
-        }
-        return found->second;
-      }
-
-      void ms_handle_connect(crimson::net::ConnectionRef conn) override {
+      void ms_handle_connect(
+          crimson::net::ConnectionRef conn,
+          seastar::shard_id prv_shard) override {
+        auto &local = container().local();
+        assert(prv_shard == seastar::this_shard_id());
         auto session = seastar::make_shared<PingSession>();
-        auto [i, added] = sessions.emplace(conn, session);
+        auto [i, added] = local.sessions.emplace(&*conn, session);
         std::ignore = i;
         ceph_assert(added);
         session->connected_time = mono_clock::now();
       }
+
       std::optional<seastar::future<>> ms_dispatch(
           crimson::net::ConnectionRef c, MessageRef m) override {
-        auto session = find_session(c);
+        auto &local = container().local();
+        auto session = local.find_session(&*c);
         ++(session->count);
         if (verbose) {
           logger().info("client ms_dispatch {}", session->count);
         }
 
-        if (session->count == rounds) {
+        if (session->count > rounds) {
+          logger().error("{}: got {} pongs, more than expected {}", *c, session->count, rounds);
+          ceph_abort();
+        } else if (session->count == rounds) {
           logger().info("{}: finished receiving {} pongs", *c, session->count);
           session->finish_time = mono_clock::now();
-          auto found = pending_conns.find(c);
-          ceph_assert(found != pending_conns.end());
-          found->second.set_value();
+          gates.dispatch_in_background("echo_notify_done", [c, this] {
+            return container().invoke_on(primary_sid, [pconn=&*c](auto &local) {
+              auto found = local.pending_conns.find(pconn);
+              ceph_assert(found != local.pending_conns.end());
+              found->second.set_value();
+            }).then([c] {});
+          });
         }
         return {seastar::now()};
       }
 
-      seastar::future<> init(const entity_name_t& name,
-                             const std::string& lname,
-                             const uint64_t nonce) {
-        msgr = crimson::net::Messenger::create(name, lname, nonce);
-        msgr->set_default_policy(crimson::net::SocketPolicy::lossy_client(0));
-        msgr->set_auth_client(&dummy_auth);
-        msgr->set_auth_server(&dummy_auth);
-        return msgr->start({this});
-      }
-
-      seastar::future<> shutdown() {
-        ceph_assert(msgr);
-       msgr->stop();
-        return msgr->shutdown();
-      }
-
-      seastar::future<> dispatch_pingpong(const entity_addr_t& peer_addr) {
-        mono_time start_time = mono_clock::now();
-        auto conn = msgr->connect(peer_addr, entity_name_t::TYPE_OSD);
-        return seastar::futurize_invoke([this, conn] {
-          return do_dispatch_pingpong(conn);
-        }).then([this, conn, start_time] {
-          auto session = find_session(conn);
-          std::chrono::duration<double> dur_handshake = session->connected_time - start_time;
-          std::chrono::duration<double> dur_pingpong = session->finish_time - session->connected_time;
-          logger().info("{}: handshake {}, pingpong {}",
-                        *conn, dur_handshake.count(), dur_pingpong.count());
-        });
+      PingSessionRef find_session(crimson::net::Connection *c) {
+        auto found = sessions.find(c);
+        if (found == sessions.end()) {
+          ceph_assert(false);
+        }
+        return found->second;
       }
 
-     private:
       seastar::future<> do_dispatch_pingpong(crimson::net::ConnectionRef conn) {
-        auto [i, added] = pending_conns.emplace(conn, seastar::promise<>());
+        auto [i, added] = pending_conns.emplace(&*conn, seastar::promise<>());
         std::ignore = i;
         ceph_assert(added);
         return seastar::do_with(0u, 0u,
@@ -197,178 +303,96 @@ static seastar::future<> test_echo(unsigned rounds,
             },
             [this, conn, &count_ping, &count_keepalive] {
               return seastar::repeat([this, conn, &count_ping, &count_keepalive] {
-                  if (keepalive_dist(rng)) {
-                    return conn->send_keepalive()
-                      .then([&count_keepalive] {
-                        count_keepalive += 1;
-                        return seastar::make_ready_future<seastar::stop_iteration>(
-                          seastar::stop_iteration::no);
-                      });
-                  } else {
-                    return conn->send(crimson::make_message<MPing>())
-                      .then([&count_ping] {
-                        count_ping += 1;
-                        return seastar::make_ready_future<seastar::stop_iteration>(
-                          seastar::stop_iteration::yes);
-                      });
-                  }
-                });
+                if (keepalive_dist(rng)) {
+                  return conn->send_keepalive(
+                  ).then([&count_keepalive] {
+                    count_keepalive += 1;
+                    return seastar::make_ready_future<seastar::stop_iteration>(
+                      seastar::stop_iteration::no);
+                  });
+                } else {
+                  return conn->send(crimson::make_message<MPing>()
+                  ).then([&count_ping] {
+                    count_ping += 1;
+                    return seastar::make_ready_future<seastar::stop_iteration>(
+                      seastar::stop_iteration::yes);
+                  });
+                }
+              });
             }).then([this, conn] {
-              auto found = pending_conns.find(conn);
+              auto found = pending_conns.find(&*conn);
+              assert(found != pending_conns.end());
               return found->second.get_future();
             }
           );
         });
       }
+
+    private:
+      // primary shard only
+      const seastar::shard_id primary_sid;
+      std::bernoulli_distribution keepalive_dist;
+      crimson::net::MessengerRef msgr;
+      std::map<crimson::net::Connection*, seastar::promise<>> pending_conns;
+      crimson::auth::DummyAuthClientServer dummy_auth;
+
+      // per shard
+      const unsigned rounds;
+      std::map<crimson::net::Connection*, PingSessionRef> sessions;
+      ShardedGates &gates;
     };
   };
 
   logger().info("test_echo(rounds={}, keepalive_ratio={}):",
                 rounds, keepalive_ratio);
-  auto server1 = seastar::make_shared<test_state::Server>();
-  auto server2 = seastar::make_shared<test_state::Server>();
-  auto client1 = seastar::make_shared<test_state::Client>(rounds, keepalive_ratio);
-  auto client2 = seastar::make_shared<test_state::Client>(rounds, keepalive_ratio);
-  // start servers and clients
-  auto addr1 = get_server_addr();
-  auto addr2 = get_server_addr();
-  addr1.set_type(entity_addr_t::TYPE_MSGR2);
-  addr2.set_type(entity_addr_t::TYPE_MSGR2);
-  return seastar::when_all_succeed(
-      server1->init(entity_name_t::OSD(0), "server1", 1, addr1),
-      server2->init(entity_name_t::OSD(1), "server2", 2, addr2),
-      client1->init(entity_name_t::OSD(2), "client1", 3),
-      client2->init(entity_name_t::OSD(3), "client2", 4)
-  // dispatch pingpoing
-  ).then_unpack([client1, client2, server1, server2] {
+  return ShardedGates::create(
+  ).then([rounds, keepalive_ratio](auto *gates) {
     return seastar::when_all_succeed(
+      test_state::Client::create(rounds, keepalive_ratio, gates),
+      test_state::Client::create(rounds, keepalive_ratio, gates),
+      seastar::make_ready_future<ShardedGates*>(gates));
+  }).then_unpack([](auto *client1, auto *client2, auto *gates) {
+    auto server1 = seastar::make_shared<test_state::Server>(*gates);
+    auto server2 = seastar::make_shared<test_state::Server>(*gates);
+    // start servers and clients
+    auto addr1 = get_server_addr();
+    auto addr2 = get_server_addr();
+    addr1.set_type(entity_addr_t::TYPE_MSGR2);
+    addr2.set_type(entity_addr_t::TYPE_MSGR2);
+    return seastar::when_all_succeed(
+        server1->init(entity_name_t::OSD(0), "server1", 1, addr1),
+        server2->init(entity_name_t::OSD(1), "server2", 2, addr2),
+        client1->init(entity_name_t::OSD(2), "client1", 3),
+        client2->init(entity_name_t::OSD(3), "client2", 4)
+    // dispatch pingpoing
+    ).then_unpack([client1, client2, server1, server2] {
+      return seastar::when_all_succeed(
         // test connecting in parallel, accepting in parallel
+        client1->dispatch_pingpong(server1->msgr->get_myaddr()),
         client1->dispatch_pingpong(server2->msgr->get_myaddr()),
-        client2->dispatch_pingpong(server1->msgr->get_myaddr()));
-  // shutdown
-  }).then_unpack([] {
-    return seastar::now();
-  }).then([client1] {
-    logger().info("client1 shutdown...");
-    return client1->shutdown();
-  }).then([client2] {
-    logger().info("client2 shutdown...");
-    return client2->shutdown();
-  }).then([server1] {
-    logger().info("server1 shutdown...");
-    return server1->shutdown();
-  }).then([server2] {
-    logger().info("server2 shutdown...");
-    return server2->shutdown();
-  }).then([] {
-    logger().info("test_echo() done!\n");
-  }).handle_exception([server1, server2, client1, client2] (auto eptr) {
-    logger().error("test_echo() failed: got exception {}", eptr);
-    throw;
-  });
-}
-
-static seastar::future<> test_concurrent_dispatch()
-{
-  struct test_state {
-    struct Server final
-      : public crimson::net::Dispatcher {
-      crimson::net::MessengerRef msgr;
-      int count = 0;
-      seastar::promise<> on_second; // satisfied on second dispatch
-      seastar::promise<> on_done; // satisfied when first dispatch unblocks
-      crimson::auth::DummyAuthClientServer dummy_auth;
-
-      std::optional<seastar::future<>> ms_dispatch(
-          crimson::net::ConnectionRef, MessageRef m) override {
-        switch (++count) {
-        case 1:
-          // block on the first request until we reenter with the second
-          std::ignore = on_second.get_future().then([this] { on_done.set_value(); });
-          break;
-        case 2:
-          on_second.set_value();
-          break;
-        default:
-          throw std::runtime_error("unexpected count");
-        }
-        return {seastar::now()};
-      }
-
-      seastar::future<> wait() { return on_done.get_future(); }
-
-      seastar::future<> init(const entity_name_t& name,
-                             const std::string& lname,
-                             const uint64_t nonce,
-                             const entity_addr_t& addr) {
-        msgr = crimson::net::Messenger::create(name, lname, nonce);
-        msgr->set_default_policy(crimson::net::SocketPolicy::stateless_server(0));
-        msgr->set_auth_client(&dummy_auth);
-        msgr->set_auth_server(&dummy_auth);
-        return msgr->bind(entity_addrvec_t{addr}).safe_then([this] {
-          return msgr->start({this});
-        }, crimson::net::Messenger::bind_ertr::all_same_way(
-            [addr] (const std::error_code& e) {
-          logger().error("test_concurrent_dispatch(): "
-                         "there is another instance running at {}", addr);
-          ceph_abort();
-        }));
-      }
-    };
-
-    struct Client final
-      : public crimson::net::Dispatcher {
-      crimson::net::MessengerRef msgr;
-      crimson::auth::DummyAuthClientServer dummy_auth;
-
-      std::optional<seastar::future<>> ms_dispatch(
-          crimson::net::ConnectionRef, MessageRef m) override {
-        return {seastar::now()};
-      }
-
-      seastar::future<> init(const entity_name_t& name,
-                             const std::string& lname,
-                             const uint64_t nonce) {
-        msgr = crimson::net::Messenger::create(name, lname, nonce);
-        msgr->set_default_policy(crimson::net::SocketPolicy::lossy_client(0));
-        msgr->set_auth_client(&dummy_auth);
-        msgr->set_auth_server(&dummy_auth);
-        return msgr->start({this});
-      }
-    };
-  };
-
-  logger().info("test_concurrent_dispatch():");
-  auto server = seastar::make_shared<test_state::Server>();
-  auto client = seastar::make_shared<test_state::Client>();
-  auto addr = get_server_addr();
-  addr.set_type(entity_addr_t::TYPE_MSGR2);
-  addr.set_family(AF_INET);
-  return seastar::when_all_succeed(
-      server->init(entity_name_t::OSD(4), "server3", 5, addr),
-      client->init(entity_name_t::OSD(5), "client3", 6)
-  ).then_unpack([server, client] {
-    auto conn = client->msgr->connect(server->msgr->get_myaddr(),
-                                      entity_name_t::TYPE_OSD);
-    // send two messages
-    return conn->send(crimson::make_message<MPing>()).then([conn] {
-      return conn->send(crimson::make_message<MPing>());
+        client2->dispatch_pingpong(server1->msgr->get_myaddr()),
+        client2->dispatch_pingpong(server2->msgr->get_myaddr()));
+    // shutdown
+    }).then_unpack([client1] {
+      logger().info("client1 shutdown...");
+      return client1->shutdown();
+    }).then([client2] {
+      logger().info("client2 shutdown...");
+      return client2->shutdown();
+    }).then([server1] {
+      logger().info("server1 shutdown...");
+      return server1->shutdown();
+    }).then([server2] {
+      logger().info("server2 shutdown...");
+      return server2->shutdown();
+    }).then([] {
+      logger().info("test_echo() done!\n");
+    }).handle_exception([](auto eptr) {
+      logger().error("test_echo() failed: got exception {}", eptr);
+      throw;
+    }).finally([gates, server1, server2] {
+      return gates->close();
     });
-  }).then([server] {
-    return server->wait();
-  }).then([client] {
-    logger().info("client shutdown...");
-    client->msgr->stop();
-    return client->msgr->shutdown();
-  }).then([server] {
-    logger().info("server shutdown...");
-    server->msgr->stop();
-    return server->msgr->shutdown();
-  }).then([] {
-    logger().info("test_concurrent_dispatch() done!\n");
-  }).handle_exception([server, client] (auto eptr) {
-    logger().error("test_concurrent_dispatch() failed: got exception {}", eptr);
-    throw;
   });
 }
 
@@ -390,7 +414,8 @@ seastar::future<> test_preemptive_shutdown() {
                              const std::string& lname,
                              const uint64_t nonce,
                              const entity_addr_t& addr) {
-        msgr = crimson::net::Messenger::create(name, lname, nonce);
+        msgr = crimson::net::Messenger::create(
+            name, lname, nonce, true);
         msgr->set_default_policy(crimson::net::SocketPolicy::stateless_server(0));
         msgr->set_auth_client(&dummy_auth);
         msgr->set_auth_server(&dummy_auth);
@@ -429,7 +454,8 @@ seastar::future<> test_preemptive_shutdown() {
       seastar::future<> init(const entity_name_t& name,
                              const std::string& lname,
                              const uint64_t nonce) {
-        msgr = crimson::net::Messenger::create(name, lname, nonce);
+        msgr = crimson::net::Messenger::create(
+            name, lname, nonce, true);
         msgr->set_default_policy(crimson::net::SocketPolicy::lossy_client(0));
         msgr->set_auth_client(&dummy_auth);
         msgr->set_auth_server(&dummy_auth);
@@ -496,7 +522,6 @@ using crimson::net::Dispatcher;
 using crimson::net::Interceptor;
 using crimson::net::Messenger;
 using crimson::net::MessengerRef;
-using crimson::net::SocketConnection;
 using crimson::net::SocketPolicy;
 using crimson::net::tag_bp_t;
 using namespace ceph::net::test;
@@ -643,18 +668,21 @@ using ConnResults = std::vector<ConnResult>;
 struct TestInterceptor : public Interceptor {
   std::map<Breakpoint, std::map<unsigned, bp_action_t>> breakpoints;
   std::map<Breakpoint, counter_t> breakpoints_counter;
-  std::map<ConnectionRef, unsigned> conns;
+  std::map<Connection*, unsigned> conns;
   ConnResults results;
   std::optional<seastar::abort_source> signal;
+  const seastar::shard_id primary_sid;
+
+  TestInterceptor() : primary_sid{seastar::this_shard_id()} {}
 
-  TestInterceptor() = default;
   // only used for copy breakpoint configurations
-  TestInterceptor(const TestInterceptor& other) {
+  TestInterceptor(const TestInterceptor& other) : primary_sid{other.primary_sid} {
     assert(other.breakpoints_counter.empty());
     assert(other.conns.empty());
     assert(other.results.empty());
     breakpoints = other.breakpoints;
     assert(!other.signal);
+    assert(seastar::this_shard_id() == primary_sid);
   }
 
   void make_fault(Breakpoint bp, unsigned round = 1) {
@@ -672,7 +700,8 @@ struct TestInterceptor : public Interceptor {
     breakpoints[bp][round] = bp_action_t::STALL;
   }
 
-  ConnResult* find_result(ConnectionRef conn) {
+  ConnResult* find_result(Connection *conn) {
+    assert(seastar::this_shard_id() == primary_sid);
     auto it = conns.find(conn);
     if (it == conns.end()) {
       return nullptr;
@@ -682,6 +711,7 @@ struct TestInterceptor : public Interceptor {
   }
 
   seastar::future<> wait() {
+    assert(seastar::this_shard_id() == primary_sid);
     assert(!signal);
     signal = seastar::abort_source();
     return seastar::sleep_abortable(10s, *signal).then([] {
@@ -692,6 +722,7 @@ struct TestInterceptor : public Interceptor {
   }
 
   void notify() {
+    assert(seastar::this_shard_id() == primary_sid);
     if (signal) {
       signal->request_abort();
       signal = std::nullopt;
@@ -699,25 +730,24 @@ struct TestInterceptor : public Interceptor {
   }
 
  private:
-  void register_conn(SocketConnection& _conn) override {
-    auto conn = _conn.get_local_shared_foreign_from_this();
-    auto result = find_result(conn);
+  void register_conn(ConnectionRef conn) override {
+    auto result = find_result(&*conn);
     if (result != nullptr) {
       logger().error("The connection [{}] {} already exists when register {}",
-                     result->index, *result->conn, _conn);
+                     result->index, *result->conn, *conn);
       ceph_abort();
     }
     unsigned index = results.size();
     results.emplace_back(conn, index);
-    conns[conn] = index;
+    conns[&*conn] = index;
     notify();
-    logger().info("[{}] {} new connection registered", index, _conn);
+    logger().info("[{}] {} new connection registered", index, *conn);
   }
 
-  void register_conn_closed(SocketConnection& conn) override {
-    auto result = find_result(conn.get_local_shared_foreign_from_this());
+  void register_conn_closed(ConnectionRef conn) override {
+    auto result = find_result(&*conn);
     if (result == nullptr) {
-      logger().error("Untracked closed connection: {}", conn);
+      logger().error("Untracked closed connection: {}", *conn);
       ceph_abort();
     }
 
@@ -725,75 +755,97 @@ struct TestInterceptor : public Interceptor {
       result->state = conn_state_t::closed;
     }
     notify();
-    logger().info("[{}] {} closed({})", result->index, conn, result->state);
+    logger().info("[{}] {} closed({})", result->index, *conn, result->state);
   }
 
-  void register_conn_ready(SocketConnection& conn) override {
-    auto result = find_result(conn.get_local_shared_foreign_from_this());
+  void register_conn_ready(ConnectionRef conn) override {
+    auto result = find_result(&*conn);
     if (result == nullptr) {
-      logger().error("Untracked ready connection: {}", conn);
+      logger().error("Untracked ready connection: {}", *conn);
       ceph_abort();
     }
 
-    ceph_assert(conn.is_connected());
+    ceph_assert(conn->is_protocol_ready());
     notify();
-    logger().info("[{}] {} ready", result->index, conn);
+    logger().info("[{}] {} ready", result->index, *conn);
   }
 
-  void register_conn_replaced(SocketConnection& conn) override {
-    auto result = find_result(conn.get_local_shared_foreign_from_this());
+  void register_conn_replaced(ConnectionRef conn) override {
+    auto result = find_result(&*conn);
     if (result == nullptr) {
-      logger().error("Untracked replaced connection: {}", conn);
+      logger().error("Untracked replaced connection: {}", *conn);
       ceph_abort();
     }
 
     result->state = conn_state_t::replaced;
-    logger().info("[{}] {} {}", result->index, conn, result->state);
+    logger().info("[{}] {} {}", result->index, *conn, result->state);
   }
 
-  bp_action_t intercept(SocketConnection& conn, Breakpoint bp) override {
-    ++breakpoints_counter[bp].counter;
+  seastar::future<bp_action_t>
+  intercept(Connection &_conn, std::vector<Breakpoint> bps) override {
+    assert(bps.size() >= 1);
+    Connection *conn = &_conn;
 
-    auto result = find_result(conn.get_local_shared_foreign_from_this());
-    if (result == nullptr) {
-      logger().error("Untracked intercepted connection: {}, at breakpoint {}({})",
-                     conn, bp, breakpoints_counter[bp].counter);
-      ceph_abort();
-    }
+    return seastar::smp::submit_to(primary_sid, [conn, bps, this] {
+      std::vector<bp_action_t> actions;
+      for (const Breakpoint &bp : bps) {
+        ++breakpoints_counter[bp].counter;
 
-    if (bp == custom_bp_t::SOCKET_CONNECTING) {
-      ++result->connect_attempts;
-      logger().info("[Test] connect_attempts={}", result->connect_attempts);
-    } else if (bp == tag_bp_t{Tag::CLIENT_IDENT, bp_type_t::WRITE}) {
-      ++result->client_connect_attempts;
-      logger().info("[Test] client_connect_attempts={}", result->client_connect_attempts);
-    } else if (bp == tag_bp_t{Tag::SESSION_RECONNECT, bp_type_t::WRITE}) {
-      ++result->client_reconnect_attempts;
-      logger().info("[Test] client_reconnect_attempts={}", result->client_reconnect_attempts);
-    } else if (bp == custom_bp_t::SOCKET_ACCEPTED) {
-      ++result->accept_attempts;
-      logger().info("[Test] accept_attempts={}", result->accept_attempts);
-    } else if (bp == tag_bp_t{Tag::CLIENT_IDENT, bp_type_t::READ}) {
-      ++result->server_connect_attempts;
-      logger().info("[Test] server_connect_attemps={}", result->server_connect_attempts);
-    } else if (bp == tag_bp_t{Tag::SESSION_RECONNECT, bp_type_t::READ}) {
-      ++result->server_reconnect_attempts;
-      logger().info("[Test] server_reconnect_attempts={}", result->server_reconnect_attempts);
-    }
+        auto result = find_result(&*conn);
+        if (result == nullptr) {
+          logger().error("Untracked intercepted connection: {}, at breakpoint {}({})",
+                         *conn, bp, breakpoints_counter[bp].counter);
+          ceph_abort();
+        }
 
-    auto it_bp = breakpoints.find(bp);
-    if (it_bp != breakpoints.end()) {
-      auto it_cnt = it_bp->second.find(breakpoints_counter[bp].counter);
-      if (it_cnt != it_bp->second.end()) {
-        logger().info("[{}] {} intercepted {}({}) => {}",
-                      result->index, conn, bp,
-                      breakpoints_counter[bp].counter, it_cnt->second);
-        return it_cnt->second;
+        if (bp == custom_bp_t::SOCKET_CONNECTING) {
+          ++result->connect_attempts;
+          logger().info("[Test] connect_attempts={}", result->connect_attempts);
+        } else if (bp == tag_bp_t{Tag::CLIENT_IDENT, bp_type_t::WRITE}) {
+          ++result->client_connect_attempts;
+          logger().info("[Test] client_connect_attempts={}", result->client_connect_attempts);
+        } else if (bp == tag_bp_t{Tag::SESSION_RECONNECT, bp_type_t::WRITE}) {
+          ++result->client_reconnect_attempts;
+          logger().info("[Test] client_reconnect_attempts={}", result->client_reconnect_attempts);
+        } else if (bp == custom_bp_t::SOCKET_ACCEPTED) {
+          ++result->accept_attempts;
+          logger().info("[Test] accept_attempts={}", result->accept_attempts);
+        } else if (bp == tag_bp_t{Tag::CLIENT_IDENT, bp_type_t::READ}) {
+          ++result->server_connect_attempts;
+          logger().info("[Test] server_connect_attemps={}", result->server_connect_attempts);
+        } else if (bp == tag_bp_t{Tag::SESSION_RECONNECT, bp_type_t::READ}) {
+          ++result->server_reconnect_attempts;
+          logger().info("[Test] server_reconnect_attempts={}", result->server_reconnect_attempts);
+        }
+
+        auto it_bp = breakpoints.find(bp);
+        if (it_bp != breakpoints.end()) {
+          auto it_cnt = it_bp->second.find(breakpoints_counter[bp].counter);
+          if (it_cnt != it_bp->second.end()) {
+            logger().info("[{}] {} intercepted {}({}) => {}",
+                          result->index, *conn, bp,
+                          breakpoints_counter[bp].counter, it_cnt->second);
+            actions.emplace_back(it_cnt->second);
+            continue;
+          }
+        }
+        logger().info("[{}] {} intercepted {}({})",
+                      result->index, *conn, bp, breakpoints_counter[bp].counter);
+        actions.emplace_back(bp_action_t::CONTINUE);
       }
-    }
-    logger().info("[{}] {} intercepted {}({})",
-                  result->index, conn, bp, breakpoints_counter[bp].counter);
-    return bp_action_t::CONTINUE;
+
+      bp_action_t action = bp_action_t::CONTINUE;
+      for (bp_action_t &a : actions) {
+        if (a != bp_action_t::CONTINUE) {
+          if (action == bp_action_t::CONTINUE) {
+            action = a;
+          } else {
+            ceph_abort("got multiple incompatible actions");
+          }
+        }
+      }
+      return seastar::make_ready_future<bp_action_t>(action);
+    });
   }
 };
 
@@ -824,116 +876,163 @@ class FailoverSuite : public Dispatcher {
   TestInterceptor interceptor;
 
   unsigned tracked_index = 0;
-  ConnectionRef tracked_conn;
+  Connection *tracked_conn = nullptr;
   unsigned pending_send = 0;
   unsigned pending_peer_receive = 0;
   unsigned pending_receive = 0;
 
-  std::optional<seastar::future<>> ms_dispatch(ConnectionRef c, MessageRef m) override {
-    auto result = interceptor.find_result(c);
-    if (result == nullptr) {
-      logger().error("Untracked ms dispatched connection: {}", *c);
-      ceph_abort();
-    }
-
-    if (tracked_conn != c) {
-      logger().error("[{}] {} got op, but doesn't match tracked_conn [{}] {}",
-                     result->index, *c, tracked_index, *tracked_conn);
-      ceph_abort();
-    }
-    ceph_assert(result->index == tracked_index);
+  ShardedGates &gates;
+  const seastar::shard_id primary_sid;
 
+  std::optional<seastar::future<>> ms_dispatch(
+      ConnectionRef conn_ref, MessageRef m) override {
     ceph_assert(m->get_type() == CEPH_MSG_OSD_OP);
-    ceph_assert(pending_receive > 0);
-    --pending_receive;
-    if (pending_receive == 0) {
-      interceptor.notify();
-    }
-    logger().info("[Test] got op, left {} ops -- [{}] {}",
-                  pending_receive, result->index, *c);
+    Connection *conn = &*conn_ref;
+    gates.dispatch_in_background("TestSuite_ms_dispatch",
+        [this, conn, conn_ref] {
+      return seastar::smp::submit_to(primary_sid, [this, conn] {
+        auto result = interceptor.find_result(&*conn);
+        if (result == nullptr) {
+          logger().error("Untracked ms dispatched connection: {}", *conn);
+          ceph_abort();
+        }
+
+        if (tracked_conn != &*conn) {
+          logger().warn("[{}] {} got op, but doesn't match tracked_conn [{}] {}",
+                        result->index, *conn, tracked_index, *tracked_conn);
+        } else {
+          ceph_assert(result->index == tracked_index);
+        }
+
+        ceph_assert(pending_receive > 0);
+        --pending_receive;
+        if (pending_receive == 0) {
+          interceptor.notify();
+        }
+        logger().info("[Test] got op, left {} ops -- [{}] {}",
+                      pending_receive, result->index, *conn);
+      }).then([conn_ref] {});
+    });
     return {seastar::now()};
   }
 
-  void ms_handle_accept(ConnectionRef conn) override {
-    auto result = interceptor.find_result(conn);
-    if (result == nullptr) {
-      logger().error("Untracked accepted connection: {}", *conn);
-      ceph_abort();
-    }
+  void ms_handle_accept(
+      ConnectionRef conn_ref,
+      seastar::shard_id prv_shard,
+      bool is_replace) override {
+    Connection *conn = &*conn_ref;
+    gates.dispatch_in_background("TestSuite_ms_dispatch",
+        [this, conn, conn_ref] {
+      return seastar::smp::submit_to(primary_sid, [this, conn] {
+        auto result = interceptor.find_result(&*conn);
+        if (result == nullptr) {
+          logger().error("Untracked accepted connection: {}", *conn);
+          ceph_abort();
+        }
 
-    if (tracked_conn &&
-        !tracked_conn->is_closed() &&
-        tracked_conn != conn) {
-      logger().error("[{}] {} got accepted, but there's already traced_conn [{}] {}",
-                     result->index, *conn, tracked_index, *tracked_conn);
-      ceph_abort();
-    }
+        if (tracked_conn &&
+            !tracked_conn->is_protocol_closed() &&
+            tracked_conn != &*conn) {
+          logger().error("[{}] {} got accepted, but there's already a valid traced_conn [{}] {}",
+                         result->index, *conn, tracked_index, *tracked_conn);
+          ceph_abort();
+        }
 
-    tracked_index = result->index;
-    tracked_conn = conn;
-    ++result->cnt_accept_dispatched;
-    logger().info("[Test] got accept (cnt_accept_dispatched={}), track [{}] {}",
-                  result->cnt_accept_dispatched, result->index, *conn);
-    std::ignore = flush_pending_send();
+        tracked_index = result->index;
+        tracked_conn = &*conn;
+        ++result->cnt_accept_dispatched;
+        logger().info("[Test] got accept (cnt_accept_dispatched={}), track [{}] {}",
+                      result->cnt_accept_dispatched, result->index, *conn);
+        return flush_pending_send();
+      }).then([conn_ref] {});
+    });
   }
 
-  void ms_handle_connect(ConnectionRef conn) override {
-    auto result = interceptor.find_result(conn);
-    if (result == nullptr) {
-      logger().error("Untracked connected connection: {}", *conn);
-      ceph_abort();
-    }
+  void ms_handle_connect(
+      ConnectionRef conn_ref,
+      seastar::shard_id prv_shard) override {
+    Connection *conn = &*conn_ref;
+    gates.dispatch_in_background("TestSuite_ms_dispatch",
+        [this, conn, conn_ref] {
+      return seastar::smp::submit_to(primary_sid, [this, conn] {
+        auto result = interceptor.find_result(&*conn);
+        if (result == nullptr) {
+          logger().error("Untracked connected connection: {}", *conn);
+          ceph_abort();
+        }
 
-    if (tracked_conn != conn) {
-      logger().error("[{}] {} got connected, but doesn't match tracked_conn [{}] {}",
-                     result->index, *conn, tracked_index, *tracked_conn);
-      ceph_abort();
-    }
-    ceph_assert(result->index == tracked_index);
+        if (tracked_conn &&
+            !tracked_conn->is_protocol_closed() &&
+            tracked_conn != &*conn) {
+          logger().error("[{}] {} got connected, but there's already a avlid tracked_conn [{}] {}",
+                         result->index, *conn, tracked_index, *tracked_conn);
+          ceph_abort();
+        }
+
+        if (tracked_conn == &*conn) {
+          ceph_assert(result->index == tracked_index);
+        }
 
-    ++result->cnt_connect_dispatched;
-    logger().info("[Test] got connected (cnt_connect_dispatched={}) -- [{}] {}",
-                  result->cnt_connect_dispatched, result->index, *conn);
+        ++result->cnt_connect_dispatched;
+        logger().info("[Test] got connected (cnt_connect_dispatched={}) -- [{}] {}",
+                      result->cnt_connect_dispatched, result->index, *conn);
+      }).then([conn_ref] {});
+    });
   }
 
-  void ms_handle_reset(ConnectionRef conn, bool is_replace) override {
-    auto result = interceptor.find_result(conn);
-    if (result == nullptr) {
-      logger().error("Untracked reset connection: {}", *conn);
-      ceph_abort();
-    }
+  void ms_handle_reset(
+      ConnectionRef conn_ref,
+      bool is_replace) override {
+    Connection *conn = &*conn_ref;
+    gates.dispatch_in_background("TestSuite_ms_dispatch",
+        [this, conn, conn_ref] {
+      return seastar::smp::submit_to(primary_sid, [this, conn] {
+        auto result = interceptor.find_result(&*conn);
+        if (result == nullptr) {
+          logger().error("Untracked reset connection: {}", *conn);
+          ceph_abort();
+        }
 
-    if (tracked_conn != conn) {
-      logger().error("[{}] {} got reset, but doesn't match tracked_conn [{}] {}",
-                     result->index, *conn, tracked_index, *tracked_conn);
-      ceph_abort();
-    }
-    ceph_assert(result->index == tracked_index);
+        if (tracked_conn != &*conn) {
+          logger().warn("[{}] {} got reset, but doesn't match tracked_conn [{}] {}",
+                        result->index, *conn, tracked_index, *tracked_conn);
+        } else {
+          ceph_assert(result->index == tracked_index);
+          tracked_index = 0;
+          tracked_conn = nullptr;
+        }
 
-    tracked_index = 0;
-    tracked_conn = nullptr;
-    ++result->cnt_reset_dispatched;
-    logger().info("[Test] got reset (cnt_reset_dispatched={}), untrack [{}] {}",
-                  result->cnt_reset_dispatched, result->index, *conn);
+        ++result->cnt_reset_dispatched;
+        logger().info("[Test] got reset (cnt_reset_dispatched={}), untrack [{}] {}",
+                      result->cnt_reset_dispatched, result->index, *conn);
+      }).then([conn_ref] {});
+    });
   }
 
-  void ms_handle_remote_reset(ConnectionRef conn) override {
-    auto result = interceptor.find_result(conn);
-    if (result == nullptr) {
-      logger().error("Untracked remotely reset connection: {}", *conn);
-      ceph_abort();
-    }
+  void ms_handle_remote_reset(
+      ConnectionRef conn_ref) override {
+    Connection *conn = &*conn_ref;
+    gates.dispatch_in_background("TestSuite_ms_dispatch",
+        [this, conn, conn_ref] {
+      return seastar::smp::submit_to(primary_sid, [this, conn] {
+        auto result = interceptor.find_result(&*conn);
+        if (result == nullptr) {
+          logger().error("Untracked remotely reset connection: {}", *conn);
+          ceph_abort();
+        }
 
-    if (tracked_conn != conn) {
-      logger().error("[{}] {} got remotely reset, but doesn't match tracked_conn [{}] {}",
-                     result->index, *conn, tracked_index, *tracked_conn);
-      ceph_abort();
-    }
-    ceph_assert(result->index == tracked_index);
+        if (tracked_conn != &*conn) {
+          logger().warn("[{}] {} got remotely reset, but doesn't match tracked_conn [{}] {}",
+                        result->index, *conn, tracked_index, *tracked_conn);
+        } else {
+          ceph_assert(result->index == tracked_index);
+        }
 
-    ++result->cnt_remote_reset_dispatched;
-    logger().info("[Test] got remote reset (cnt_remote_reset_dispatched={}) -- [{}] {}",
-                  result->cnt_remote_reset_dispatched, result->index, *conn);
+        ++result->cnt_remote_reset_dispatched;
+        logger().info("[Test] got remote reset (cnt_remote_reset_dispatched={}) -- [{}] {}",
+                      result->cnt_remote_reset_dispatched, result->index, *conn);
+      }).then([conn_ref] {});
+    });
   }
 
  private:
@@ -953,6 +1052,7 @@ class FailoverSuite : public Dispatcher {
 
   seastar::future<> send_op(bool expect_reply=true) {
     ceph_assert(tracked_conn);
+    ceph_assert(!tracked_conn->is_protocol_closed());
     if (expect_reply) {
       ++pending_peer_receive;
     }
@@ -969,6 +1069,7 @@ class FailoverSuite : public Dispatcher {
       logger().info("[Test] flush sending {} ops", pending_send);
     }
     ceph_assert(tracked_conn);
+    ceph_assert(!tracked_conn->is_protocol_closed());
     return seastar::do_until(
         [this] { return pending_send == 0; },
         [this] {
@@ -980,21 +1081,16 @@ class FailoverSuite : public Dispatcher {
   seastar::future<> wait_ready(unsigned num_ready_conns,
                                unsigned num_replaced,
                                bool wait_received) {
+    assert(seastar::this_shard_id() == primary_sid);
     unsigned pending_conns = 0;
     unsigned pending_establish = 0;
     unsigned replaced_conns = 0;
     for (auto& result : interceptor.results) {
-      if (result.conn->is_closed_clean()) {
+      if (result.conn->is_protocol_closed_clean()) {
         if (result.state == conn_state_t::replaced) {
           ++replaced_conns;
         }
-      } else if (result.conn->is_connected()) {
-        if (tracked_conn != result.conn || tracked_index != result.index) {
-          throw std::runtime_error(fmt::format(
-                "The connected connection [{}] {} doesn't"
-                " match the tracked connection [{}] {}",
-                result.index, *result.conn, tracked_index, *tracked_conn));
-        }
+      } else if (result.conn->is_protocol_ready()) {
         if (pending_send == 0 && pending_peer_receive == 0 && pending_receive == 0) {
           result.state = conn_state_t::established;
         } else {
@@ -1018,15 +1114,22 @@ class FailoverSuite : public Dispatcher {
         do_wait = true;
       }
     }
-    if (wait_received &&
-        (pending_send || pending_peer_receive || pending_receive)) {
-      if (pending_conns || pending_establish) {
-        logger().info("[Test] wait_ready(): wait for pending_send={},"
-                      " pending_peer_receive={}, pending_receive={},"
-                      " pending {}/{} ready/establish connections ...",
-                      pending_send, pending_peer_receive, pending_receive,
-                      pending_conns, pending_establish);
-        do_wait = true;
+    if (wait_received) {
+      if (pending_send || pending_peer_receive || pending_receive) {
+        if (pending_conns || pending_establish) {
+          logger().info("[Test] wait_ready(): wait for pending_send={},"
+                        " pending_peer_receive={}, pending_receive={},"
+                        " pending {}/{} ready/establish connections ...",
+                        pending_send, pending_peer_receive, pending_receive,
+                        pending_conns, pending_establish);
+          do_wait = true;
+        } else {
+          // If there are pending messages, stop waiting if there are
+          // no longer pending connections.
+        }
+      } else {
+         // Stop waiting if there are no pending messages. Pending connections
+         // should not be important.
       }
     }
     if (num_replaced > 0) {
@@ -1058,10 +1161,13 @@ class FailoverSuite : public Dispatcher {
  public:
   FailoverSuite(MessengerRef test_msgr,
                 entity_addr_t test_peer_addr,
-                const TestInterceptor& interceptor)
+                const TestInterceptor& interceptor,
+                ShardedGates &gates)
     : test_msgr(test_msgr),
       test_peer_addr(test_peer_addr),
-      interceptor(interceptor) { }
+      interceptor(interceptor),
+      gates{gates},
+      primary_sid{seastar::this_shard_id()} { }
 
   entity_addr_t get_addr() const {
     return test_msgr->get_myaddr();
@@ -1112,10 +1218,17 @@ class FailoverSuite : public Dispatcher {
   create(entity_addr_t test_addr,
          SocketPolicy test_policy,
          entity_addr_t test_peer_addr,
-         const TestInterceptor& interceptor) {
+         const TestInterceptor& interceptor,
+         ShardedGates &gates) {
     auto suite = std::make_unique<FailoverSuite>(
-        Messenger::create(entity_name_t::OSD(TEST_OSD), "Test", TEST_NONCE),
-        test_peer_addr, interceptor);
+        Messenger::create(
+          entity_name_t::OSD(TEST_OSD),
+          "Test",
+          TEST_NONCE,
+          false),
+        test_peer_addr,
+        interceptor,
+        gates);
     return suite->init(test_addr, test_policy
     ).then([suite = std::move(suite)] () mutable {
       return std::move(suite);
@@ -1126,31 +1239,35 @@ class FailoverSuite : public Dispatcher {
  public:
   seastar::future<> connect_peer() {
     logger().info("[Test] connect_peer({})", test_peer_addr);
+    assert(seastar::this_shard_id() == primary_sid);
     auto conn = test_msgr->connect(test_peer_addr, entity_name_t::TYPE_OSD);
-    auto result = interceptor.find_result(conn);
+    auto result = interceptor.find_result(&*conn);
     ceph_assert(result != nullptr);
 
     if (tracked_conn) {
-      if (tracked_conn->is_closed()) {
-        ceph_assert(tracked_conn != conn);
-        logger().info("[Test] this is a new session replacing an closed one");
+      if (tracked_conn->is_protocol_closed()) {
+        logger().info("[Test] this is a new session"
+                      " replacing an closed one");
+        ceph_assert(tracked_conn != &*conn);
       } else {
-        ceph_assert(tracked_index == result->index);
-        ceph_assert(tracked_conn == conn);
         logger().info("[Test] this is not a new session");
+        ceph_assert(tracked_index == result->index);
+        ceph_assert(tracked_conn == &*conn);
       }
     } else {
       logger().info("[Test] this is a new session");
     }
     tracked_index = result->index;
-    tracked_conn = conn;
+    tracked_conn = &*conn;
 
     return flush_pending_send();
   }
 
   seastar::future<> send_peer() {
+    assert(seastar::this_shard_id() == primary_sid);
     if (tracked_conn) {
       logger().info("[Test] send_peer()");
+      ceph_assert(!tracked_conn->is_protocol_closed());
       ceph_assert(!pending_send);
       return send_op();
     } else {
@@ -1162,33 +1279,47 @@ class FailoverSuite : public Dispatcher {
 
   seastar::future<> keepalive_peer() {
     logger().info("[Test] keepalive_peer()");
+    assert(seastar::this_shard_id() == primary_sid);
     ceph_assert(tracked_conn);
+    ceph_assert(!tracked_conn->is_protocol_closed());
     return tracked_conn->send_keepalive();
   }
 
   seastar::future<> try_send_peer() {
     logger().info("[Test] try_send_peer()");
+    assert(seastar::this_shard_id() == primary_sid);
     ceph_assert(tracked_conn);
+    ceph_assert(!tracked_conn->is_protocol_closed());
     return send_op(false);
   }
 
   seastar::future<> markdown() {
     logger().info("[Test] markdown() in 100ms ...");
+    assert(seastar::this_shard_id() == primary_sid);
     ceph_assert(tracked_conn);
     // sleep to propagate potential remaining acks
-    return seastar::sleep(100ms
+    return seastar::sleep(50ms
     ).then([this] {
-      tracked_conn->mark_down();
+      return seastar::smp::submit_to(
+          tracked_conn->get_shard_id(), [tracked_conn=tracked_conn] {
+        assert(tracked_conn->get_shard_id() == seastar::this_shard_id());
+        tracked_conn->mark_down();
+      });
+    }).then([] {
+      // sleep to wait for markdown propagate to the primary sid
+      return seastar::sleep(100ms);
     });
   }
 
   seastar::future<> wait_blocked() {
     logger().info("[Test] wait_blocked() ...");
+    assert(seastar::this_shard_id() == primary_sid);
     return interceptor.blocker.wait_blocked();
   }
 
   void unblock() {
     logger().info("[Test] unblock()");
+    assert(seastar::this_shard_id() == primary_sid);
     return interceptor.blocker.unblock();
   }
 
@@ -1211,8 +1342,9 @@ class FailoverSuite : public Dispatcher {
   }
 
   bool is_standby() {
+    assert(seastar::this_shard_id() == primary_sid);
     ceph_assert(tracked_conn);
-    return !(tracked_conn->is_connected() || tracked_conn->is_closed());
+    return tracked_conn->is_protocol_standby();
   }
 };
 
@@ -1328,7 +1460,11 @@ class FailoverTest : public Dispatcher {
          entity_addr_t cmd_peer_addr,
          entity_addr_t test_peer_addr) {
     auto test = seastar::make_lw_shared<FailoverTest>(
-        Messenger::create(entity_name_t::OSD(CMD_CLI_OSD), "CmdCli", CMD_CLI_NONCE),
+        Messenger::create(
+          entity_name_t::OSD(CMD_CLI_OSD),
+          "CmdCli",
+          CMD_CLI_NONCE,
+          true),
         test_addr, test_peer_addr);
     return test->init(cmd_peer_addr).then([test] {
       logger().info("CmdCli ready");
@@ -1347,26 +1483,34 @@ class FailoverTest : public Dispatcher {
     logger().info("\n\n[{}]", name);
     ceph_assert(!test_suite);
     SocketPolicy test_policy_ = to_socket_policy(test_policy);
-    return FailoverSuite::create(
-        test_addr, test_policy_, test_peer_addr, interceptor
-    ).then([this, peer_policy, f = std::move(f)] (auto suite) mutable {
-      ceph_assert(suite->get_addr() == test_addr);
-      test_suite.swap(suite);
-      return start_peer(peer_policy).then([this, f = std::move(f)] {
-        return f(*test_suite);
-      }).then([this] {
-        test_suite->post_check();
-        logger().info("\n[SUCCESS]");
-      }).handle_exception([this] (auto eptr) {
-        logger().info("\n[FAIL: {}]", eptr);
-        test_suite->dump_results();
-        throw;
-      }).then([this] {
-        return stop_peer();
-      }).then([this] {
-        return test_suite->shutdown().then([this] {
-          test_suite.reset();
+    return ShardedGates::create(
+    ).then([this, test_policy_, peer_policy, interceptor,
+            f=std::move(f)](auto *gates) mutable {
+      return FailoverSuite::create(
+        test_addr, test_policy_, test_peer_addr, interceptor, *gates
+      ).then([this, peer_policy, f = std::move(f)](auto suite) mutable {
+        ceph_assert(suite->get_addr() == test_addr);
+        test_suite.swap(suite);
+        return start_peer(peer_policy
+        ).then([this, f = std::move(f)] {
+          return f(*test_suite);
+        }).then([this] {
+          test_suite->post_check();
+          logger().info("\n[SUCCESS]");
+        }).handle_exception([this](auto eptr) {
+          logger().info("\n[FAIL: {}]", eptr);
+          test_suite->dump_results();
+          throw;
+        }).then([this] {
+          return stop_peer();
+        }).then([this] {
+          return test_suite->shutdown(
+          ).then([this] {
+            test_suite.reset();
+          });
         });
+      }).then([gates] {
+        return gates->close();
       });
     });
   }
@@ -1427,27 +1571,32 @@ class FailoverSuitePeer : public Dispatcher {
   ConnectionRef tracked_conn;
   unsigned pending_send = 0;
 
-  std::optional<seastar::future<>> ms_dispatch(ConnectionRef c, MessageRef m) override {
+  std::optional<seastar::future<>> ms_dispatch(ConnectionRef conn, MessageRef m) override {
     logger().info("[TestPeer] got op from Test");
     ceph_assert(m->get_type() == CEPH_MSG_OSD_OP);
-    ceph_assert(tracked_conn == c);
     std::ignore = op_callback();
     return {seastar::now()};
   }
 
-  void ms_handle_accept(ConnectionRef conn) override {
+  void ms_handle_accept(
+      ConnectionRef conn,
+      seastar::shard_id prv_shard,
+      bool is_replace) override {
+    assert(prv_shard == seastar::this_shard_id());
     logger().info("[TestPeer] got accept from Test");
-    ceph_assert(!tracked_conn ||
-                tracked_conn->is_closed() ||
-                tracked_conn == conn);
+
+    if (tracked_conn &&
+        !tracked_conn->is_protocol_closed() &&
+        tracked_conn != conn) {
+      logger().error("[TestPeer] {} got accepted, but there's already a valid traced_conn {}",
+                     *conn, *tracked_conn);
+    }
     tracked_conn = conn;
     std::ignore = flush_pending_send();
   }
 
   void ms_handle_reset(ConnectionRef conn, bool is_replace) override {
     logger().info("[TestPeer] got reset from Test");
-    ceph_assert(tracked_conn == conn);
-    tracked_conn = nullptr;
   }
 
  private:
@@ -1466,6 +1615,11 @@ class FailoverSuitePeer : public Dispatcher {
 
   seastar::future<> send_op() {
     ceph_assert(tracked_conn);
+    if (tracked_conn->is_protocol_closed()) {
+      logger().error("[TestPeer] send op but the connection is closed -- {}",
+                     *tracked_conn);
+    }
+
     pg_t pgid;
     object_locator_t oloc;
     hobject_t hobj(object_t(), oloc.key, CEPH_NOSNAP, pgid.ps(),
@@ -1489,7 +1643,8 @@ class FailoverSuitePeer : public Dispatcher {
 
  public:
   FailoverSuitePeer(MessengerRef peer_msgr, cb_t op_callback)
-    : peer_msgr(peer_msgr), op_callback(op_callback) { }
+    : peer_msgr(peer_msgr),
+      op_callback(op_callback) { }
 
   seastar::future<> shutdown() {
     peer_msgr->stop();
@@ -1498,26 +1653,29 @@ class FailoverSuitePeer : public Dispatcher {
 
   seastar::future<> connect_peer(entity_addr_t test_addr_decoded) {
     logger().info("[TestPeer] connect_peer({})", test_addr_decoded);
-    auto new_tracked_conn = peer_msgr->connect(test_addr_decoded, entity_name_t::TYPE_OSD);
+    auto conn = peer_msgr->connect(test_addr_decoded, entity_name_t::TYPE_OSD);
+
     if (tracked_conn) {
-      if (tracked_conn->is_closed()) {
-        ceph_assert(tracked_conn != new_tracked_conn);
+      if (tracked_conn->is_protocol_closed()) {
         logger().info("[TestPeer] this is a new session"
                       " replacing an closed one");
+        ceph_assert(tracked_conn != conn);
       } else {
-        ceph_assert(tracked_conn == new_tracked_conn);
         logger().info("[TestPeer] this is not a new session");
+        ceph_assert(tracked_conn == conn);
       }
     } else {
       logger().info("[TestPeer] this is a new session");
     }
-    tracked_conn = new_tracked_conn;
+    tracked_conn = conn;
+
     return flush_pending_send();
   }
 
   seastar::future<> send_peer() {
     if (tracked_conn) {
       logger().info("[TestPeer] send_peer()");
+      ceph_assert(!pending_send);
       return send_op();
     } else {
       ++pending_send;
@@ -1545,7 +1703,8 @@ class FailoverSuitePeer : public Dispatcher {
       Messenger::create(
         entity_name_t::OSD(TEST_PEER_OSD),
         "TestPeer",
-        TEST_PEER_NONCE),
+        TEST_PEER_NONCE,
+        true),
       op_callback
     );
     return suite->init(test_peer_addr, policy
@@ -1590,7 +1749,11 @@ class FailoverTestPeer : public Dispatcher {
     return {seastar::now()};
   }
 
-  void ms_handle_accept(ConnectionRef conn) override {
+  void ms_handle_accept(
+      ConnectionRef conn,
+      seastar::shard_id prv_shard,
+      bool is_replace) override {
+    assert(prv_shard == seastar::this_shard_id());
     cmd_conn = conn;
   }
 
@@ -1667,7 +1830,11 @@ class FailoverTestPeer : public Dispatcher {
   static seastar::future<std::unique_ptr<FailoverTestPeer>>
   create(entity_addr_t cmd_peer_addr, entity_addr_t test_peer_addr) {
     auto test_peer = std::make_unique<FailoverTestPeer>(
-        Messenger::create(entity_name_t::OSD(CMD_SRV_OSD), "CmdSrv", CMD_SRV_NONCE),
+        Messenger::create(
+          entity_name_t::OSD(CMD_SRV_OSD),
+          "CmdSrv",
+          CMD_SRV_NONCE,
+          true),
         test_peer_addr);
     return test_peer->init(cmd_peer_addr
     ).then([test_peer = std::move(test_peer)] () mutable {
@@ -3617,8 +3784,11 @@ seastar::future<int> do_test(seastar::app_template& app)
                                               CEPH_ENTITY_TYPE_CLIENT,
                                               &cluster,
                                               &conf_file_list);
-  return crimson::common::sharded_conf().start(init_params.name, cluster)
-  .then([conf_file_list] {
+  return crimson::common::sharded_conf().start(
+    init_params.name, cluster
+  ).then([] {
+    return local_conf().start();
+  }).then([conf_file_list] {
     return local_conf().parse_config_files(conf_file_list);
   }).then([&app] {
     auto&& config = app.configuration();
@@ -3642,14 +3812,13 @@ seastar::future<int> do_test(seastar::app_template& app)
 
     logger().info("test configuration: verbose={}, rounds={}, keepalive_ratio={}, "
                   "test_addr={}, cmd_peer_addr={}, test_peer_addr={}, "
-                  "testpeer_islocal={}, peer_wins={}",
+                  "testpeer_islocal={}, peer_wins={}, smp={}",
                   verbose, rounds, keepalive_ratio,
                   test_addr, cmd_peer_addr, test_peer_addr,
-                  testpeer_islocal, peer_wins);
+                  testpeer_islocal, peer_wins,
+                  seastar::smp::count);
     return test_echo(rounds, keepalive_ratio
     ).then([] {
-      return test_concurrent_dispatch();
-    }).then([] {
       return test_preemptive_shutdown();
     }).then([test_addr, cmd_peer_addr, test_peer_addr, testpeer_islocal, peer_wins] {
       return test_v2_protocol(
index b3a1d910b5dba0828a6fc4347c4fbacc454b0062..f2b1828f1c5a715d896bccaa2695ec198a861b7c 100644 (file)
@@ -105,7 +105,7 @@ class SyntheticDispatcher final
   }
 
   std::optional<seastar::future<>> ms_dispatch(crimson::net::ConnectionRef con,
-                                               MessageRef m) {
+                                               MessageRef m) final {
     if (verbose) {
       logger().warn("{}: con = {}", __func__, *con);
     }
@@ -134,17 +134,24 @@ class SyntheticDispatcher final
     }
   }
 
-  void ms_handle_accept(crimson::net::ConnectionRef conn) {
+  void ms_handle_accept(
+      crimson::net::ConnectionRef conn,
+      seastar::shard_id prv_shard,
+      bool is_replace) final {
     logger().info("{} - Connection:{}", __func__, *conn);
+    assert(prv_shard == seastar::this_shard_id());
   }
 
-  void ms_handle_connect(crimson::net::ConnectionRef conn) {
+  void ms_handle_connect(
+      crimson::net::ConnectionRef conn,
+      seastar::shard_id prv_shard) final {
     logger().info("{} - Connection:{}", __func__, *conn);
+    assert(prv_shard == seastar::this_shard_id());
   }
 
-  void ms_handle_reset(crimson::net::ConnectionRef con, bool is_replace);
+  void ms_handle_reset(crimson::net::ConnectionRef con, bool is_replace) final;
 
-  void ms_handle_remote_reset(crimson::net::ConnectionRef con) {
+  void ms_handle_remote_reset(crimson::net::ConnectionRef con) final {
     clear_pending(con);
   }
 
@@ -348,7 +355,8 @@ class SyntheticWorkload {
                           const uint64_t nonce,
                           const entity_addr_t& addr) {
      crimson::net::MessengerRef msgr =
-       crimson::net::Messenger::create(name, lname, nonce);
+       crimson::net::Messenger::create(
+           name, lname, nonce, true);
      msgr->set_default_policy(server_policy);
      msgr->set_auth_client(&dummy_auth);
      msgr->set_auth_server(&dummy_auth);
@@ -369,7 +377,8 @@ class SyntheticWorkload {
                           const std::string& lname,
                           const uint64_t nonce) {
      crimson::net::MessengerRef msgr =
-       crimson::net::Messenger::create(name, lname, nonce);
+       crimson::net::Messenger::create(
+           name, lname, nonce, true);
      msgr->set_default_policy(client_policy);
      msgr->set_auth_client(&dummy_auth);
      msgr->set_auth_server(&dummy_auth);
@@ -623,8 +632,11 @@ seastar::future<int> do_test(seastar::app_template& app)
                                               CEPH_ENTITY_TYPE_CLIENT,
                                               &cluster,
                                               &conf_file_list);
-  return crimson::common::sharded_conf().start(init_params.name, cluster)
-  .then([conf_file_list] {
+  return crimson::common::sharded_conf().start(
+    init_params.name, cluster
+  ).then([] {
+    return local_conf().start();
+  }).then([conf_file_list] {
     return local_conf().parse_config_files(conf_file_list);
   }).then([&app] {
     auto&& config = app.configuration();
index 8723d20c6f060e7262c91a785fc9f4b7d1bfa225..e60df452576880c117d331f3ac13f2acedd5b11c 100644 (file)
@@ -41,7 +41,7 @@ static seastar::future<> test_monc()
   }).then([] {
     return crimson::common::sharded_perf_coll().start();
   }).then([]() mutable {
-    auto msgr = crimson::net::Messenger::create(entity_name_t::OSD(0), "monc", 0);
+    auto msgr = crimson::net::Messenger::create(entity_name_t::OSD(0), "monc", 0, true);
     return seastar::do_with(MonClient{*msgr, dummy_handler},
                             [msgr](auto& monc) mutable {
       return msgr->start({&monc}).then([&monc] {
index 5fd596a09282100141cd2013d403e6aa32ad728d..2b61196ead8dfd6ef364d97ea399af88f147c55a 100644 (file)
@@ -24,167 +24,190 @@ using namespace std::chrono_literals;
 using seastar::engine;
 using seastar::future;
 using crimson::net::error;
-using crimson::net::FixedCPUServerSocket;
 using crimson::net::listen_ertr;
+using crimson::net::ShardedServerSocket;
 using crimson::net::Socket;
 using crimson::net::SocketRef;
 using crimson::net::stop_t;
 
 using SocketFRef = seastar::foreign_ptr<SocketRef>;
 
-static seastar::logger logger{"crimsontest"};
-static entity_addr_t get_server_addr() {
-  static int port = 9020;
-  ++port;
-  ceph_assert(port < 9030 && "socket and messenger test ports should not overlap");
+seastar::logger &logger() {
+  return crimson::get_logger(ceph_subsys_test);
+}
+
+entity_addr_t get_server_addr() {
   entity_addr_t saddr;
   saddr.parse("127.0.0.1", nullptr);
-  saddr.set_port(port);
+  saddr.set_port(9020);
   return saddr;
 }
 
 future<SocketRef> socket_connect(const entity_addr_t& saddr) {
-  logger.debug("socket_connect() to {} ...", saddr);
-  return Socket::connect(saddr).then([] (auto socket) {
-    logger.debug("socket_connect() connected");
+  logger().debug("socket_connect() to {} ...", saddr);
+  return Socket::connect(saddr).then([](auto socket) {
+    logger().debug("socket_connect() connected");
     return socket;
   });
 }
 
 future<> test_refused() {
-  logger.info("test_refused()...");
+  logger().info("test_refused()...");
   auto saddr = get_server_addr();
   return socket_connect(saddr).discard_result().then([saddr] {
-    logger.error("test_refused(): connection to {} is not refused", saddr);
+    logger().error("test_refused(): connection to {} is not refused", saddr);
     ceph_abort();
-  }).handle_exception_type([] (const std::system_error& e) {
+  }).handle_exception_type([](const std::system_error& e) {
     if (e.code() != std::errc::connection_refused) {
-      logger.error("test_refused() got unexpeted error {}", e);
+      logger().error("test_refused() got unexpeted error {}", e);
       ceph_abort();
     } else {
-      logger.info("test_refused() ok\n");
+      logger().info("test_refused() ok\n");
     }
-  }).handle_exception([] (auto eptr) {
-    logger.error("test_refused() got unexpeted exception {}", eptr);
+  }).handle_exception([](auto eptr) {
+    logger().error("test_refused() got unexpeted exception {}", eptr);
     ceph_abort();
   });
 }
 
-future<> test_bind_same() {
-  logger.info("test_bind_same()...");
-  return FixedCPUServerSocket::create().then([] (auto pss1) {
+future<> test_bind_same(bool is_fixed_cpu) {
+  logger().info("test_bind_same()...");
+  return ShardedServerSocket::create(is_fixed_cpu
+  ).then([is_fixed_cpu](auto pss1) {
     auto saddr = get_server_addr();
-    return pss1->listen(saddr).safe_then([saddr] {
+    return pss1->listen(saddr).safe_then([saddr, is_fixed_cpu] {
       // try to bind the same address
-      return FixedCPUServerSocket::create().then([saddr] (auto pss2) {
+      return ShardedServerSocket::create(is_fixed_cpu
+      ).then([saddr](auto pss2) {
         return pss2->listen(saddr).safe_then([] {
-          logger.error("test_bind_same() should raise address_in_use");
+          logger().error("test_bind_same() should raise address_in_use");
           ceph_abort();
         }, listen_ertr::all_same_way(
-            [] (const std::error_code& e) {
+            [](const std::error_code& e) {
           if (e == std::errc::address_in_use) {
             // successful!
-            logger.info("test_bind_same() ok\n");
+            logger().info("test_bind_same() ok\n");
           } else {
-            logger.error("test_bind_same() got unexpected error {}", e);
+            logger().error("test_bind_same() got unexpected error {}", e);
             ceph_abort();
           }
           // Note: need to return a explicit ready future, or there will be a
           // runtime error: member access within null pointer of type 'struct promise_base'
           return seastar::now();
         })).then([pss2] {
-          return pss2->destroy();
+          return pss2->shutdown_destroy();
         });
       });
     }, listen_ertr::all_same_way(
-        [saddr] (const std::error_code& e) {
-      logger.error("test_bind_same(): there is another instance running at {}",
-                   saddr);
+        [saddr](const std::error_code& e) {
+      logger().error("test_bind_same(): there is another instance running at {}",
+                     saddr);
       ceph_abort();
     })).then([pss1] {
-      return pss1->destroy();
-    }).handle_exception([] (auto eptr) {
-      logger.error("test_bind_same() got unexpeted exception {}", eptr);
+      return pss1->shutdown_destroy();
+    }).handle_exception([](auto eptr) {
+      logger().error("test_bind_same() got unexpeted exception {}", eptr);
       ceph_abort();
     });
   });
 }
 
-future<> test_accept() {
-  logger.info("test_accept()");
-  return FixedCPUServerSocket::create().then([] (auto pss) {
+future<> test_accept(bool is_fixed_cpu) {
+  logger().info("test_accept()");
+  return ShardedServerSocket::create(is_fixed_cpu
+  ).then([](auto pss) {
     auto saddr = get_server_addr();
-    return pss->listen(saddr).safe_then([pss] {
-      return pss->accept([] (auto socket, auto paddr) {
+    return pss->listen(saddr
+    ).safe_then([pss] {
+      return pss->accept([](auto socket, auto paddr) {
+        logger().info("test_accept(): accepted at shard {}", seastar::this_shard_id());
         // simple accept
-        return seastar::sleep(100ms).then([socket = std::move(socket)] () mutable {
-          return socket->close().finally([cleanup = std::move(socket)] {});
+        return seastar::sleep(100ms
+        ).then([socket = std::move(socket)]() mutable {
+          return socket->close(
+          ).finally([cleanup = std::move(socket)] {});
         });
       });
     }, listen_ertr::all_same_way(
-        [saddr] (const std::error_code& e) {
-      logger.error("test_accept(): there is another instance running at {}",
-                   saddr);
+        [saddr](const std::error_code& e) {
+      logger().error("test_accept(): there is another instance running at {}",
+                     saddr);
       ceph_abort();
     })).then([saddr] {
       return seastar::when_all(
-        socket_connect(saddr).then([] (auto socket) {
+        socket_connect(saddr).then([](auto socket) {
           return socket->close().finally([cleanup = std::move(socket)] {}); }),
-        socket_connect(saddr).then([] (auto socket) {
+        socket_connect(saddr).then([](auto socket) {
           return socket->close().finally([cleanup = std::move(socket)] {}); }),
-        socket_connect(saddr).then([] (auto socket) {
+        socket_connect(saddr).then([](auto socket) {
           return socket->close().finally([cleanup = std::move(socket)] {}); })
       ).discard_result();
     }).then([] {
       // should be enough to be connected locally
       return seastar::sleep(50ms);
     }).then([] {
-      logger.info("test_accept() ok\n");
+      logger().info("test_accept() ok\n");
     }).then([pss] {
-      return pss->destroy();
-    }).handle_exception([] (auto eptr) {
-      logger.error("test_accept() got unexpeted exception {}", eptr);
+      return pss->shutdown_destroy();
+    }).handle_exception([](auto eptr) {
+      logger().error("test_accept() got unexpeted exception {}", eptr);
       ceph_abort();
     });
   });
 }
 
 class SocketFactory {
+  static constexpr seastar::shard_id CLIENT_CPU = 0u;
   SocketRef client_socket;
-  SocketFRef server_socket;
-  FixedCPUServerSocket *pss = nullptr;
   seastar::promise<> server_connected;
 
+  static constexpr seastar::shard_id SERVER_CPU = 1u;
+  ShardedServerSocket *pss = nullptr;
+
+  seastar::shard_id server_socket_CPU;
+  SocketFRef server_socket;
+
  public:
-  // cb_client() on CPU#0, cb_server() on CPU#1
   template <typename FuncC, typename FuncS>
-  static future<> dispatch_sockets(FuncC&& cb_client, FuncS&& cb_server) {
-    assert(seastar::this_shard_id() == 0u);
+  static future<> dispatch_sockets(
+      bool is_fixed_cpu,
+      FuncC&& cb_client,
+      FuncS&& cb_server) {
+    ceph_assert_always(seastar::this_shard_id() == CLIENT_CPU);
     auto owner = std::make_unique<SocketFactory>();
     auto psf = owner.get();
     auto saddr = get_server_addr();
-    return seastar::smp::submit_to(1u, [psf, saddr] {
-      return FixedCPUServerSocket::create().then([psf, saddr] (auto pss) {
+    return seastar::smp::submit_to(SERVER_CPU, [psf, saddr, is_fixed_cpu] {
+      return ShardedServerSocket::create(is_fixed_cpu
+      ).then([psf, saddr](auto pss) {
         psf->pss = pss;
         return pss->listen(saddr
-        ).safe_then([]{}, listen_ertr::all_same_way(
-            [saddr] (const std::error_code& e) {
-          logger.error("dispatch_sockets(): there is another instance running at {}",
-                       saddr);
+        ).safe_then([] {
+        }, listen_ertr::all_same_way([saddr](const std::error_code& e) {
+          logger().error("dispatch_sockets(): there is another instance running at {}",
+                         saddr);
           ceph_abort();
         }));
       });
     }).then([psf, saddr] {
       return seastar::when_all_succeed(
-        seastar::smp::submit_to(0u, [psf, saddr] {
-          return socket_connect(saddr).then([psf] (auto socket) {
+        seastar::smp::submit_to(CLIENT_CPU, [psf, saddr] {
+          return socket_connect(saddr).then([psf](auto socket) {
+            ceph_assert_always(seastar::this_shard_id() == CLIENT_CPU);
             psf->client_socket = std::move(socket);
           });
         }),
-        seastar::smp::submit_to(1u, [psf] {
-          return psf->pss->accept([psf] (auto socket, auto paddr) {
-            psf->server_socket = seastar::make_foreign(std::move(socket));
-            return seastar::smp::submit_to(0u, [psf] {
+        seastar::smp::submit_to(SERVER_CPU, [psf] {
+          return psf->pss->accept([psf](auto _socket, auto paddr) {
+            logger().info("dispatch_sockets(): accepted at shard {}",
+                          seastar::this_shard_id());
+            psf->server_socket_CPU = seastar::this_shard_id();
+            if (psf->pss->is_fixed_shard_dispatching()) {
+              ceph_assert_always(SERVER_CPU == seastar::this_shard_id());
+            }
+            SocketFRef socket = seastar::make_foreign(std::move(_socket));
+            psf->server_socket = std::move(socket);
+            return seastar::smp::submit_to(CLIENT_CPU, [psf] {
               psf->server_connected.set_value();
             });
           });
@@ -196,35 +219,35 @@ class SocketFactory {
       return psf->server_connected.get_future();
     }).then([psf] {
       if (psf->pss) {
-        return seastar::smp::submit_to(1u, [psf] {
-          return psf->pss->destroy();
+        return seastar::smp::submit_to(SERVER_CPU, [psf] {
+          return psf->pss->shutdown_destroy();
         });
       }
       return seastar::now();
     }).then([psf,
              cb_client = std::move(cb_client),
-             cb_server = std::move(cb_server)] () mutable {
-      logger.debug("dispatch_sockets(): client/server socket are ready");
+             cb_server = std::move(cb_server)]() mutable {
+      logger().debug("dispatch_sockets(): client/server socket are ready");
       return seastar::when_all_succeed(
-        seastar::smp::submit_to(0u, [socket = psf->client_socket.get(),
-                                     cb_client = std::move(cb_client)] {
+        seastar::smp::submit_to(CLIENT_CPU,
+            [socket = psf->client_socket.get(), cb_client = std::move(cb_client)] {
           return cb_client(socket).then([socket] {
-            logger.debug("closing client socket...");
+            logger().debug("closing client socket...");
             return socket->close();
-          }).handle_exception([] (auto eptr) {
-            logger.error("dispatch_sockets():"
-                " cb_client() got unexpeted exception {}", eptr);
+          }).handle_exception([](auto eptr) {
+            logger().error("dispatch_sockets():"
+                           " cb_client() got unexpeted exception {}", eptr);
             ceph_abort();
           });
         }),
-        seastar::smp::submit_to(1u, [socket = psf->server_socket.get(),
-                                     cb_server = std::move(cb_server)] {
+        seastar::smp::submit_to(psf->server_socket_CPU,
+            [socket = psf->server_socket.get(), cb_server = std::move(cb_server)] {
           return cb_server(socket).then([socket] {
-            logger.debug("closing server socket...");
+            logger().debug("closing server socket...");
             return socket->close();
-          }).handle_exception([] (auto eptr) {
-            logger.error("dispatch_sockets():"
-                " cb_server() got unexpeted exception {}", eptr);
+          }).handle_exception([](auto eptr) {
+            logger().error("dispatch_sockets():"
+                           " cb_server() got unexpeted exception {}", eptr);
             ceph_abort();
           });
         })
@@ -255,23 +278,25 @@ class Connection {
   }
 
   future<> dispatch_write(unsigned round = 0, bool force_shut = false) {
-    logger.debug("dispatch_write(round={}, force_shut={})...", round, force_shut);
+    logger().debug("dispatch_write(round={}, force_shut={})...", round, force_shut);
     return seastar::repeat([this, round, force_shut] {
       if (round != 0 && round <= write_count) {
         return seastar::futurize_invoke([this, force_shut] {
           if (force_shut) {
-            logger.debug("dispatch_write() done, force shutdown output");
+            logger().debug("dispatch_write() done, force shutdown output");
             socket->force_shutdown_out();
           } else {
-            logger.debug("dispatch_write() done");
+            logger().debug("dispatch_write() done");
           }
         }).then([] {
           return seastar::make_ready_future<stop_t>(stop_t::yes);
         });
       } else {
         data[0] = write_count;
-        return socket->write(seastar::net::packet(
-            reinterpret_cast<const char*>(&data), sizeof(data))
+        bufferlist bl;
+        bl.append(buffer::copy(
+          reinterpret_cast<const char*>(&data), sizeof(data)));
+        return socket->write(bl
         ).then([this] {
           return socket->flush();
         }).then([this] {
@@ -286,30 +311,30 @@ class Connection {
     return dispatch_write(
     ).then([] {
       ceph_abort();
-    }).handle_exception_type([this] (const std::system_error& e) {
+    }).handle_exception_type([this](const std::system_error& e) {
       if (e.code() != std::errc::broken_pipe &&
           e.code() != std::errc::connection_reset) {
-        logger.error("dispatch_write_unbounded(): "
-                     "unexpected error {}", e);
+        logger().error("dispatch_write_unbounded(): "
+                       "unexpected error {}", e);
         throw;
       }
       // successful
-      logger.debug("dispatch_write_unbounded(): "
-                   "expected error {}", e);
+      logger().debug("dispatch_write_unbounded(): "
+                     "expected error {}", e);
       shutdown();
     });
   }
 
   future<> dispatch_read(unsigned round = 0, bool force_shut = false) {
-    logger.debug("dispatch_read(round={}, force_shut={})...", round, force_shut);
+    logger().debug("dispatch_read(round={}, force_shut={})...", round, force_shut);
     return seastar::repeat([this, round, force_shut] {
       if (round != 0 && round <= read_count) {
         return seastar::futurize_invoke([this, force_shut] {
           if (force_shut) {
-            logger.debug("dispatch_read() done, force shutdown input");
+            logger().debug("dispatch_read() done, force shutdown input");
             socket->force_shutdown_in();
           } else {
-            logger.debug("dispatch_read() done");
+            logger().debug("dispatch_read() done");
           }
         }).then([] {
           return seastar::make_ready_future<stop_t>(stop_t::yes);
@@ -319,7 +344,7 @@ class Connection {
           // we want to test both Socket::read() and Socket::read_exactly()
           if (read_count % 2) {
             return socket->read(DATA_SIZE * sizeof(uint64_t)
-            ).then([this] (ceph::bufferlist bl) {
+            ).then([this](ceph::bufferlist bl) {
               uint64_t read_data[DATA_SIZE];
               auto p = bl.cbegin();
               ::ceph::decode_raw(read_data, p);
@@ -327,8 +352,9 @@ class Connection {
             });
           } else {
             return socket->read_exactly(DATA_SIZE * sizeof(uint64_t)
-            ).then([this] (auto buf) {
-              auto read_data = reinterpret_cast<const uint64_t*>(buf.get());
+            ).then([this](auto bptr) {
+              uint64_t read_data[DATA_SIZE];
+              std::memcpy(read_data, bptr.c_str(), DATA_SIZE * sizeof(uint64_t));
               verify_data_read(read_data);
             });
           }
@@ -344,16 +370,16 @@ class Connection {
     return dispatch_read(
     ).then([] {
       ceph_abort();
-    }).handle_exception_type([this] (const std::system_error& e) {
+    }).handle_exception_type([this](const std::system_error& e) {
       if (e.code() != error::read_eof
        && e.code() != std::errc::connection_reset) {
-        logger.error("dispatch_read_unbounded(): "
-                     "unexpected error {}", e);
+        logger().error("dispatch_read_unbounded(): "
+                       "unexpected error {}", e);
         throw;
       }
       // successful
-      logger.debug("dispatch_read_unbounded(): "
-                   "expected error {}", e);
+      logger().debug("dispatch_read_unbounded(): "
+                     "expected error {}", e);
       shutdown();
     });
   }
@@ -365,10 +391,10 @@ class Connection {
  public:
   static future<> dispatch_rw_bounded(Socket* socket, unsigned round,
                                       bool force_shut = false) {
-    logger.debug("dispatch_rw_bounded(round={}, force_shut={})...",
-                 round, force_shut);
+    logger().debug("dispatch_rw_bounded(round={}, force_shut={})...",
+                   round, force_shut);
     return seastar::do_with(Connection{socket},
-                            [round, force_shut] (auto& conn) {
+                            [round, force_shut](auto& conn) {
       ceph_assert(round != 0);
       return seastar::when_all_succeed(
         conn.dispatch_write(round, force_shut),
@@ -380,15 +406,15 @@ class Connection {
   }
 
   static future<> dispatch_rw_unbounded(Socket* socket, bool preemptive_shut = false) {
-    logger.debug("dispatch_rw_unbounded(preemptive_shut={})...", preemptive_shut);
-    return seastar::do_with(Connection{socket}, [preemptive_shut] (auto& conn) {
+    logger().debug("dispatch_rw_unbounded(preemptive_shut={})...", preemptive_shut);
+    return seastar::do_with(Connection{socket}, [preemptive_shut](auto& conn) {
       return seastar::when_all_succeed(
         conn.dispatch_write_unbounded(),
         conn.dispatch_read_unbounded(),
         seastar::futurize_invoke([&conn, preemptive_shut] {
           if (preemptive_shut) {
             return seastar::sleep(100ms).then([&conn] {
-              logger.debug("dispatch_rw_unbounded() shutdown socket preemptively(100ms)");
+              logger().debug("dispatch_rw_unbounded() shutdown socket preemptively(100ms)");
               conn.shutdown();
             });
           } else {
@@ -402,68 +428,87 @@ class Connection {
   }
 };
 
-future<> test_read_write() {
-  logger.info("test_read_write()...");
+future<> test_read_write(bool is_fixed_cpu) {
+  logger().info("test_read_write()...");
   return SocketFactory::dispatch_sockets(
-    [] (auto cs) { return Connection::dispatch_rw_bounded(cs, 128); },
-    [] (auto ss) { return Connection::dispatch_rw_bounded(ss, 128); }
+    is_fixed_cpu,
+    [](auto cs) { return Connection::dispatch_rw_bounded(cs, 128); },
+    [](auto ss) { return Connection::dispatch_rw_bounded(ss, 128); }
   ).then([] {
-    logger.info("test_read_write() ok\n");
-  }).handle_exception([] (auto eptr) {
-    logger.error("test_read_write() got unexpeted exception {}", eptr);
+    logger().info("test_read_write() ok\n");
+  }).handle_exception([](auto eptr) {
+    logger().error("test_read_write() got unexpeted exception {}", eptr);
     ceph_abort();
   });
 }
 
-future<> test_unexpected_down() {
-  logger.info("test_unexpected_down()...");
+future<> test_unexpected_down(bool is_fixed_cpu) {
+  logger().info("test_unexpected_down()...");
   return SocketFactory::dispatch_sockets(
-    [] (auto cs) { 
+    is_fixed_cpu,
+    [](auto cs) {
       return Connection::dispatch_rw_bounded(cs, 128, true
-        ).handle_exception_type([] (const std::system_error& e) {
-        logger.debug("test_unexpected_down(): client get error {}", e);
+        ).handle_exception_type([](const std::system_error& e) {
+        logger().debug("test_unexpected_down(): client get error {}", e);
         ceph_assert(e.code() == error::read_eof);
       });
     },
-    [] (auto ss) { return Connection::dispatch_rw_unbounded(ss); }
+    [](auto ss) { return Connection::dispatch_rw_unbounded(ss); }
   ).then([] {
-    logger.info("test_unexpected_down() ok\n");
-  }).handle_exception([] (auto eptr) {
-    logger.error("test_unexpected_down() got unexpeted exception {}", eptr);
+    logger().info("test_unexpected_down() ok\n");
+  }).handle_exception([](auto eptr) {
+    logger().error("test_unexpected_down() got unexpeted exception {}", eptr);
     ceph_abort();
   });
 }
 
-future<> test_shutdown_propagated() {
-  logger.info("test_shutdown_propagated()...");
+future<> test_shutdown_propagated(bool is_fixed_cpu) {
+  logger().info("test_shutdown_propagated()...");
   return SocketFactory::dispatch_sockets(
-    [] (auto cs) {
-      logger.debug("test_shutdown_propagated() shutdown client socket");
+    is_fixed_cpu,
+    [](auto cs) {
+      logger().debug("test_shutdown_propagated() shutdown client socket");
       cs->shutdown();
       return seastar::now();
     },
-    [] (auto ss) { return Connection::dispatch_rw_unbounded(ss); }
+    [](auto ss) { return Connection::dispatch_rw_unbounded(ss); }
   ).then([] {
-    logger.info("test_shutdown_propagated() ok\n");
-  }).handle_exception([] (auto eptr) {
-    logger.error("test_shutdown_propagated() got unexpeted exception {}", eptr);
+    logger().info("test_shutdown_propagated() ok\n");
+  }).handle_exception([](auto eptr) {
+    logger().error("test_shutdown_propagated() got unexpeted exception {}", eptr);
     ceph_abort();
   });
 }
 
-future<> test_preemptive_down() {
-  logger.info("test_preemptive_down()...");
+future<> test_preemptive_down(bool is_fixed_cpu) {
+  logger().info("test_preemptive_down()...");
   return SocketFactory::dispatch_sockets(
-    [] (auto cs) { return Connection::dispatch_rw_unbounded(cs, true); },
-    [] (auto ss) { return Connection::dispatch_rw_unbounded(ss); }
+    is_fixed_cpu,
+    [](auto cs) { return Connection::dispatch_rw_unbounded(cs, true); },
+    [](auto ss) { return Connection::dispatch_rw_unbounded(ss); }
   ).then([] {
-    logger.info("test_preemptive_down() ok\n");
-  }).handle_exception([] (auto eptr) {
-    logger.error("test_preemptive_down() got unexpeted exception {}", eptr);
+    logger().info("test_preemptive_down() ok\n");
+  }).handle_exception([](auto eptr) {
+    logger().error("test_preemptive_down() got unexpeted exception {}", eptr);
     ceph_abort();
   });
 }
 
+future<> do_test_with_type(bool is_fixed_cpu) {
+  return test_bind_same(is_fixed_cpu
+  ).then([is_fixed_cpu] {
+    return test_accept(is_fixed_cpu);
+  }).then([is_fixed_cpu] {
+    return test_read_write(is_fixed_cpu);
+  }).then([is_fixed_cpu] {
+    return test_unexpected_down(is_fixed_cpu);
+  }).then([is_fixed_cpu] {
+    return test_shutdown_propagated(is_fixed_cpu);
+  }).then([is_fixed_cpu] {
+    return test_preemptive_down(is_fixed_cpu);
+  });
+}
+
 }
 
 seastar::future<int> do_test(seastar::app_template& app)
@@ -475,37 +520,31 @@ seastar::future<int> do_test(seastar::app_template& app)
                                               CEPH_ENTITY_TYPE_CLIENT,
                                               &cluster,
                                               &conf_file_list);
-  return crimson::common::sharded_conf().start(init_params.name, cluster)
-  .then([conf_file_list] {
+  return crimson::common::sharded_conf().start(
+    init_params.name, cluster
+  ).then([] {
+    return local_conf().start();
+  }).then([conf_file_list] {
     return local_conf().parse_config_files(conf_file_list);
   }).then([] {
-      return local_conf().set_val("ms_inject_internal_delays", "0")
-    .then([] {
-      return test_refused();
-    }).then([] {
-      return test_bind_same();
-    }).then([] {
-      return test_accept();
-    }).then([] {
-      return test_read_write();
-    }).then([] {
-      return test_unexpected_down();
-    }).then([] {
-      return test_shutdown_propagated();
-    }).then([] {
-      return test_preemptive_down();
-    }).then([] {
-      logger.info("All tests succeeded");
-      // Seastar has bugs to have events undispatched during shutdown,
-      // which will result in memory leak and thus fail LeakSanitizer.
-      return seastar::sleep(100ms);
-    });
+    return local_conf().set_val("ms_inject_internal_delays", "0");
+  }).then([] {
+    return test_refused();
+  }).then([] {
+    return do_test_with_type(true);
+  }).then([] {
+    return do_test_with_type(false);
+  }).then([] {
+    logger().info("All tests succeeded");
+    // Seastar has bugs to have events undispatched during shutdown,
+    // which will result in memory leak and thus fail LeakSanitizer.
+    return seastar::sleep(100ms);
   }).then([] {
     return crimson::common::sharded_conf().stop();
   }).then([] {
     return 0;
-  }).handle_exception([] (auto eptr) {
-    logger.error("Test failed: got exception {}", eptr);
+  }).handle_exception([](auto eptr) {
+    logger().error("Test failed: got exception {}", eptr);
     return 1;
   });
 }
index 3a46618261ff44eef025d661b276fc6c0e1b3673..7ef5631f892a787920a31c910b0d5c715936fc43 100644 (file)
@@ -1,6 +1,7 @@
 add_executable(unittest_exporter
   test_exporter.cc
   "${CMAKE_SOURCE_DIR}/src/exporter/util.cc"
+  "${CMAKE_SOURCE_DIR}/src/exporter/DaemonMetricCollector.cc"
   )
 
 target_link_libraries(unittest_exporter
index 83750e0eaf1d353b1fda4aa6d46048b2abe7d701..b607d1afffbed4281a34f42d13a6ca358e0b1819 100644 (file)
@@ -1,10 +1,13 @@
 #include "gtest/gtest.h"
 #include "exporter/util.h"
+#include "exporter/DaemonMetricCollector.h"
 
 #include <string>
 #include <vector>
 #include <utility>
 
+typedef std::map<std::string, std::string> labels_t;
+
 // 17.2.6's memento mori:
 // This data was gathered from the python implementation of the promethize method
 // where we transform the path of a counter to a valid prometheus name.
@@ -662,3 +665,30 @@ TEST(Exporter, promethize) {
   }
 }
 
+TEST(Exporter, check_labels_and_metric_name) {
+  static std::vector<std::pair<std::string, std::string>> counters_data;
+  counters_data.emplace_back("ceph-osd.0", "ceph_osd_numpg");
+  counters_data.emplace_back("ceph-client.rgw.foo.ceph-node-00.hrgsea.2.94739968030880", "ceph_rgw_get");
+
+  static std::vector<labels_t> labels_vec;
+  labels_vec.emplace_back(labels_t{{"ceph_daemon", "\"osd.0\""}});
+  labels_vec.emplace_back(labels_t{{"instance_id", "\"hrgsea\""}});
+  auto counter_data_itr = counters_data.begin();
+  auto labels_vec_itr = labels_vec.begin();
+  for (; counter_data_itr != counters_data.end() && labels_vec_itr != labels_vec.end();
+         ++counter_data_itr, ++labels_vec_itr) {
+        std::string daemon_name = counter_data_itr->first;
+        std::string counter_name = counter_data_itr->second;
+        DaemonMetricCollector &collector = collector_instance();
+        labels_t result = collector.get_extra_labels(daemon_name);
+        ASSERT_EQ(result, *labels_vec_itr);
+  }
+  // test for fail case with daemon_name.size() < 4
+  std::string short_daemon_name = "ceph-client.rgw.foo";
+  std::string counter_name = "ceph_rgw_get";
+  DaemonMetricCollector &collector = collector_instance();
+  labels_t fail_result = collector.get_extra_labels(short_daemon_name);
+  // This is a special case, the daemon name is not of the required size for fetching instance_id.
+  // So no labels should be added.
+  ASSERT_TRUE(fail_result.empty());
+}
index 2e18c7c633035a3e3efd8102bf2eb3a24a1afd36..81680f102dd13cc10e4c701c21086757bec1f0c4 100644 (file)
@@ -271,7 +271,7 @@ public:
   bool ms_handle_refused(Connection *con) override {
     return false;
   }
-  int ms_handle_authentication(Connection *con) override {
+  int ms_handle_fast_authentication(Connection *con) override {
     return 1;
   }
 };
index f15aa8b440a1250d7e13c53d6e5702ee227a3a4a..672e6dd8f2ab14ee0eb37424a9ee7814a9c48544 100644 (file)
@@ -11,6 +11,7 @@ if(WITH_LIBCEPHFS)
     deleg.cc
     monconfig.cc
     vxattr.cc
+    snapdiff.cc
   )
   target_link_libraries(ceph_test_libcephfs
     ceph-common
index 73717b2756d80bdf4908108aa5a56ffebb7a6e87..c9fc038bc6a18a72cb10d3a94b2b6442e9b2e05e 100644 (file)
 #include "gtest/gtest.h"
 #include "include/compat.h"
 #include "include/cephfs/libcephfs.h"
+#include <dirent.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <dirent.h>
+#include <thread>
 #ifdef __linux__
 #include <sys/xattr.h>
 #endif
@@ -98,3 +99,82 @@ TEST(LibCephFS, MulticlientHoleEOF) {
   ceph_shutdown(ca);
   ceph_shutdown(cb);
 }
+
+static void write_func(bool *stop)
+{
+  struct ceph_mount_info *cmount;
+  ASSERT_EQ(ceph_create(&cmount, NULL), 0);
+  ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
+  ASSERT_EQ(0, ceph_conf_parse_env(cmount, NULL));
+  ASSERT_EQ(ceph_mount(cmount, "/"), 0);
+
+  char name[20];
+  snprintf(name, sizeof(name), "foo.%d", getpid());
+  int fd = ceph_open(cmount, name, O_CREAT|O_RDWR, 0644);
+  ASSERT_LE(0, fd);
+
+  int buf_size = 4096;
+  char *buf = (char *)malloc(buf_size);
+  if (!buf) {
+    *stop = true;
+    printf("write_func failed to allocate buffer!");
+    return;
+  }
+  memset(buf, 1, buf_size);
+
+  while (!(*stop)) {
+    int i;
+
+    // truncate the file size to 4096 will set the max_size to 4MB.
+    ASSERT_EQ(0, ceph_ftruncate(cmount, fd, 4096));
+
+    // write 4MB + extra 64KB data will make client to trigger to
+    // call check_cap() to report new size. And if MDS is revoking
+    // the Fsxrw caps and we are still holding the Fw caps and will
+    // trigger tracker#57244.
+    for (i = 0; i < 1040; i++) {
+      ASSERT_EQ(ceph_write(cmount, fd, buf, buf_size, 0), buf_size);
+    }
+  }
+
+  ceph_shutdown(cmount);
+}
+
+static void setattr_func(bool *stop)
+{
+  struct ceph_mount_info *cmount;
+  ASSERT_EQ(ceph_create(&cmount, NULL), 0);
+  ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0);
+  ASSERT_EQ(0, ceph_conf_parse_env(cmount, NULL));
+  ASSERT_EQ(ceph_mount(cmount, "/"), 0);
+
+  char name[20];
+  snprintf(name, sizeof(name), "foo.%d", getpid());
+  int fd = ceph_open(cmount, name, O_CREAT|O_RDWR, 0644);
+  ASSERT_LE(0, fd);
+
+  while (!(*stop)) {
+    // setattr will make the MDS to acquire xlock for the filelock and
+    // force to revoke caps from clients
+    struct ceph_statx stx = {.stx_size = 0};
+    ASSERT_EQ(ceph_fsetattrx(cmount, fd, &stx, CEPH_SETATTR_SIZE), 0);
+  }
+
+  ceph_shutdown(cmount);
+}
+
+TEST(LibCephFS, MulticlientRevokeCaps) {
+  std::thread thread1, thread2;
+  bool stop = false;
+  int wait = 60; // in second
+
+  thread1 = std::thread(write_func, &stop);
+  thread2 = std::thread(setattr_func, &stop);
+
+  printf(" Will run test for %d seconds!\n", wait);
+  sleep(wait);
+  stop = true;
+
+  thread1.join();
+  thread2.join();
+}
diff --git a/ceph/src/test/libcephfs/snapdiff.cc b/ceph/src/test/libcephfs/snapdiff.cc
new file mode 100644 (file)
index 0000000..2320bf5
--- /dev/null
@@ -0,0 +1,1684 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation.  See file COPYING.
+ *
+ */
+
+#include "gtest/gtest.h"
+#include "include/cephfs/libcephfs.h"
+#include "include/stat.h"
+#include "include/ceph_assert.h"
+#include "include/object.h"
+#include "include/stringify.h"
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <limits.h>
+#include <dirent.h>
+
+using namespace std;
+class TestMount {
+  ceph_mount_info* cmount = nullptr;
+  char dir_path[64];
+
+public:
+  TestMount( const char* root_dir_name = "dir0") {
+    ceph_create(&cmount, NULL);
+    ceph_conf_read_file(cmount, NULL);
+    ceph_conf_parse_env(cmount, NULL);
+    ceph_assert(0 == ceph_mount(cmount, NULL));
+
+    sprintf(dir_path, "/%s_%d", root_dir_name, getpid());
+    ceph_assert(0 == ceph_mkdir(cmount, dir_path, 0777));
+  }
+  ~TestMount()
+  {
+    if (cmount) {
+      ceph_assert(0 == purge_dir(""));
+    }
+    ceph_rmdir(cmount, dir_path);
+    ceph_shutdown(cmount);
+  }
+
+  int conf_get(const char *option, char *buf, size_t len) {
+    return ceph_conf_get(cmount, option, buf, len);
+  }
+
+  string make_file_path(const char* relpath) {
+    char path[PATH_MAX];
+    sprintf(path, "%s/%s", dir_path, relpath);
+    return path;
+  }
+
+  string make_snap_name(const char* name) {
+    char snap_name[64];
+    if (name && *name) {
+      sprintf(snap_name, "%s_%d", name, getpid());
+    } else {
+      // just simulate empty snapname
+      snap_name[0] = 0;
+    }
+    return snap_name;
+  }
+  string make_snap_path(const char* sname, const char* subdir = nullptr) {
+    char snap_path[PATH_MAX];
+    string snap_name = subdir ?
+      concat_path(make_snap_name(sname), subdir) :
+      make_snap_name(sname);
+    sprintf(snap_path, ".snap/%s", snap_name.c_str());
+    return snap_path;
+  }
+
+  int mksnap(const char* name) {
+    string snap_name = make_snap_name(name);
+    return ceph_mksnap(cmount, dir_path, snap_name.c_str(),
+      0755, nullptr, 0);
+  }
+  int rmsnap(const char* name) {
+    string snap_name = make_snap_name(name);
+    return ceph_rmsnap(cmount, dir_path, snap_name.c_str());
+  }
+  int get_snapid(const char* name, uint64_t* res)
+  {
+    ceph_assert(res);
+    snap_info snap_info;
+
+    char snap_path[PATH_MAX];
+    string snap_name = make_snap_name(name);
+    sprintf(snap_path, "%s/.snap/%s", dir_path, snap_name.c_str());
+    int r = ceph_get_snap_info(cmount, snap_path, &snap_info);
+    if (r >= 0) {
+      *res = snap_info.id;
+      r = 0;
+    }
+    return r;
+  }
+
+  int write_full(const char* relpath, const string& data)
+  {
+    auto file_path = make_file_path(relpath);
+    int fd = ceph_open(cmount, file_path.c_str(), O_WRONLY | O_CREAT, 0666);
+    if (fd < 0) {
+      return -EACCES;
+    }
+    int r = ceph_write(cmount, fd, data.c_str(), data.size(), 0);
+    if (r >= 0) {
+      ceph_truncate(cmount, file_path.c_str(), data.size());
+      ceph_fsync(cmount, fd, 0);
+    }
+    ceph_close(cmount, fd);
+    return r;
+  }
+  string concat_path(string_view path, string_view name) {
+    string s(path);
+    if (s.empty() || s.back() != '/') {
+      s += '/';
+    }
+    s += name;
+    return s;
+  }
+  int unlink(const char* relpath)
+  {
+    auto file_path = make_file_path(relpath);
+    return ceph_unlink(cmount, file_path.c_str());
+  }
+
+  int test_open(const char* relpath)
+  {
+    auto subdir_path = make_file_path(relpath);
+    struct ceph_dir_result* ls_dir;
+    int r = ceph_opendir(cmount, subdir_path.c_str(), &ls_dir);
+    if (r != 0) {
+      return r;
+    }
+    ceph_assert(0 == ceph_closedir(cmount, ls_dir));
+    return r;
+  }
+
+  int for_each_readdir(const char* relpath,
+    std::function<bool(const dirent*, const struct ceph_statx*)> fn)
+  {
+    auto subdir_path = make_file_path(relpath);
+    struct ceph_dir_result* ls_dir;
+    int r = ceph_opendir(cmount, subdir_path.c_str(), &ls_dir);
+    if (r != 0) {
+      return r;
+    }
+
+    while (1) {
+      struct dirent result;
+      struct ceph_statx stx;
+
+      r = ceph_readdirplus_r(
+        cmount, ls_dir, &result, &stx, CEPH_STATX_BASIC_STATS,
+        0,
+        NULL);
+      if (!r)
+        break;
+      if (r < 0) {
+        std::cerr << "ceph_readdirplus_r failed, error: "
+                  << r << std::endl;
+        return r;
+      }
+
+      if (strcmp(result.d_name, ".") == 0 ||
+          strcmp(result.d_name, "..") == 0) {
+        continue;
+      }
+      if (!fn(&result, &stx)) {
+        r = -EINTR;
+        break;
+      }
+    }
+    ceph_assert(0 == ceph_closedir(cmount, ls_dir));
+    return r;
+  }
+  int readdir_and_compare(const char* relpath,
+    const vector<string>& expected0)
+  {
+    vector<string> expected(expected0);
+    auto end = expected.end();
+    int r = for_each_readdir(relpath,
+      [&](const dirent* dire, const struct ceph_statx* stx) {
+
+        std::string name(dire->d_name);
+        auto it = std::find(expected.begin(), end, name);
+        if (it == end) {
+          std::cerr << "readdir_and_compare error: unexpected name:"
+                    << name << std::endl;
+          return false;
+        }
+        expected.erase(it);
+        return true;
+      });
+    if (r == 0 && !expected.empty()) {
+      std::cerr << __func__ << " error: left entries:" << std::endl;
+      for (auto& e : expected) {
+        std::cerr << e << std::endl;
+      }
+      std::cerr << __func__ << " ************" << std::endl;
+      r = -ENOTEMPTY;
+    }
+    return r;
+  }
+  int for_each_readdir_snapdiff(const char* relpath,
+    const char* snap1,
+    const char* snap2,
+    std::function<bool(const dirent*, uint64_t)> fn)
+  {
+    auto s1 = make_snap_name(snap1);
+    auto s2 = make_snap_name(snap2);
+    ceph_snapdiff_info info;
+    ceph_snapdiff_entry_t res_entry;
+    int r = ceph_open_snapdiff(cmount,
+                               dir_path,
+                               relpath,
+                               s1.c_str(),
+                               s2.c_str(),
+                               &info);
+    if (r != 0) {
+      std::cerr << " Failed to open snapdiff, ret:" << r << std::endl;
+      return r;
+    }
+    while (0 < (r = ceph_readdir_snapdiff(&info,
+                                          &res_entry))) {
+      if (strcmp(res_entry.dir_entry.d_name, ".") == 0 ||
+        strcmp(res_entry.dir_entry.d_name, "..") == 0) {
+        continue;
+      }
+      if (!fn(&res_entry.dir_entry, res_entry.snapid)) {
+        r = -EINTR;
+        break;
+      }
+    }
+    ceph_assert(0 == ceph_close_snapdiff(&info));
+    if (r != 0) {
+      std::cerr << " Failed to readdir snapdiff, ret:" << r
+                << " " << relpath << ", " << snap1 << " vs. " << snap2
+                << std::endl;
+    }
+    return r;
+  }
+  int readdir_snapdiff_and_compare(const char* relpath,
+    const char* snap1,
+    const char* snap2,
+    const vector<pair<string, uint64_t>>& expected0)
+  {
+    vector<pair<string, uint64_t>> expected(expected0);
+    auto end = expected.end();
+    int r = for_each_readdir_snapdiff(relpath, snap1, snap2,
+      [&](const dirent* dire, uint64_t snapid) {
+
+        pair<string, uint64_t> p = std::make_pair(dire->d_name, snapid);
+        auto it = std::find(expected.begin(), end, p);
+        if (it == end) {
+          std::cerr << "readdir_snapdiff_and_compare error: unexpected name:"
+            << dire->d_name << "/" << snapid << std::endl;
+          return false;
+        }
+        expected.erase(it);
+        return true;
+      });
+    if (r == 0 && !expected.empty()) {
+      std::cerr << __func__ << " error: left entries:" << std::endl;
+      for (auto& e : expected) {
+        std::cerr << e.first << "/" << e.second << std::endl;
+      }
+      std::cerr << __func__ << " ************" << std::endl;
+      r = -ENOTEMPTY;
+    }
+    return r;
+  }
+
+  int mkdir(const char* relpath)
+  {
+    auto path = make_file_path(relpath);
+    return ceph_mkdir(cmount, path.c_str(), 0777);
+  }
+  int rmdir(const char* relpath)
+  {
+    auto path = make_file_path(relpath);
+    return ceph_rmdir(cmount, path.c_str());
+  }
+  int purge_dir(const char* relpath0, bool inclusive = true)
+  {
+    int r =
+      for_each_readdir(relpath0,
+        [&](const dirent* dire, const struct ceph_statx* stx) {
+          string relpath = concat_path(relpath0, dire->d_name);
+         if (S_ISDIR(stx->stx_mode)) {
+            purge_dir(relpath.c_str());
+            rmdir(relpath.c_str());
+          } else {
+            unlink(relpath.c_str());
+          }
+          return true;
+        });
+    if (r != 0) {
+      return r;
+    }
+    if (*relpath0 != 0) {
+      r = rmdir(relpath0);
+    }
+    return r;
+  }
+
+  void remove_all() {
+    purge_dir("/", false);
+  }
+
+  ceph_mount_info* get_cmount() {
+    return cmount;
+  }
+
+  void verify_snap_diff(vector<pair<string, uint64_t>>& expected,
+                        const char* relpath,
+                        const char* snap1,
+                        const char* snap2);
+  void print_snap_diff(const char* relpath,
+                      const char* snap1,
+                       const char* snap2);
+
+  void prepareSnapDiffLib1Cases();
+  void prepareSnapDiffLib2Cases();
+  void prepareSnapDiffLib3Cases();
+  void prepareHugeSnapDiff(const std::string& name_prefix_start,
+                           const std::string& name_prefix_bulk,
+                           const std::string& name_prefix_end,
+                           size_t file_count,
+                           bool bulk_diff);
+};
+
+// Helper function to verify readdir_snapdiff returns expected results
+void TestMount::verify_snap_diff(vector<pair<string, uint64_t>>& expected,
+                                 const char* relpath,
+                                 const char* snap1,
+                                 const char* snap2)
+{
+  std::cout << "---------" << snap1 << " vs. " << snap2
+            << " diff listing verification for /" << (relpath ? relpath : "")
+            << std::endl;
+  ASSERT_EQ(0,
+    readdir_snapdiff_and_compare(relpath, snap1, snap2, expected));
+};
+
+// Helper function to print readdir_snapdiff results
+void TestMount::print_snap_diff(const char* relpath,
+                               const char* snap1,
+                                const char* snap2)
+{
+  std::cout << "---------" << snap1 << " vs. " << snap2
+            << " diff listing for /" << (relpath ? relpath : "")
+            << std::endl;
+  ASSERT_EQ(0, for_each_readdir_snapdiff(relpath, snap1, snap2,
+    [&](const dirent* dire, uint64_t snapid) {
+      std::cout << dire->d_name << " snap " << snapid << std::endl;
+      return true;
+    }));
+};
+
+
+/* The following method creates some files/folders/snapshots layout,
+   described in the sheet below.
+   We're to test SnapDiff readdir API against that structure.
+
+* where:
+  - xN denotes file 'x' version N.
+  - X denotes folder name
+  - * denotes no/removed file/folder
+
+#    snap1         snap2
+# fileA1      | fileA2      |
+# *           | fileB2      |
+# fileC1      | *           |
+# fileD1      | fileD1      |
+# dirA        | dirA        |
+# dirA/fileA1 | dirA/fileA2 |
+# *           | dirB        |
+# *           | dirB/fileb2 |
+# dirC        | *           |
+# dirC/filec1 | *           |
+# dirD        | dirD        |
+# dirD/fileD1 | dirD/fileD1 |
+*/
+void TestMount::prepareSnapDiffLib1Cases()
+{
+  //************ snap1 *************
+  ASSERT_LE(0, write_full("fileA", "hello world"));
+  ASSERT_LE(0, write_full("fileC", "hello world to be removed"));
+  ASSERT_LE(0, write_full("fileD", "hello world unmodified"));
+  ASSERT_EQ(0, mkdir("dirA"));
+  ASSERT_LE(0, write_full("dirA/fileA", "file 'A/a' v1"));
+  ASSERT_EQ(0, mkdir("dirC"));
+  ASSERT_LE(0, write_full("dirC/filec", "file 'C/c' v1"));
+  ASSERT_EQ(0, mkdir("dirD"));
+  ASSERT_LE(0, write_full("dirD/filed", "file 'D/d' v1"));
+
+  ASSERT_EQ(0, mksnap("snap1"));
+
+  //************ snap2 *************
+  ASSERT_LE(0, write_full("fileA", "hello world again in A"));
+  ASSERT_LE(0, write_full("fileB", "hello world in B"));
+  ASSERT_EQ(0, unlink("fileC"));
+
+  ASSERT_LE(0, write_full("dirA/fileA", "file 'A/a' v2"));
+  ASSERT_EQ(0, purge_dir("dirC"));
+  ASSERT_EQ(0, mkdir("dirB"));
+  ASSERT_LE(0, write_full("dirB/fileb", "file 'B/b' v2"));
+
+  ASSERT_EQ(0, mksnap("snap2"));
+}
+
+/*
+* Basic functionality testing for the SnapDiff readdir API
+*/
+TEST(LibCephFS, SnapDiffLib)
+{
+  TestMount test_mount;
+
+  // Create simple directory tree with a couple of snapshots
+  // to test against
+  test_mount.prepareSnapDiffLib1Cases();
+
+  uint64_t snapid1;
+  uint64_t snapid2;
+
+  // learn snapshot ids and do basic verification
+  ASSERT_EQ(0, test_mount.get_snapid("snap1", &snapid1));
+  ASSERT_EQ(0, test_mount.get_snapid("snap2", &snapid2));
+  ASSERT_GT(snapid1, 0);
+  ASSERT_GT(snapid2, 0);
+  ASSERT_GT(snapid2, snapid1);
+  std::cout << snapid1 << " vs. " << snapid2 << std::endl;
+
+  //
+  // Make sure root listing for snapshot snap1 is as expected
+  //
+  {
+    std::cout << "---------snap1 listing verification---------" << std::endl;
+    string snap_path = test_mount.make_snap_path("snap1");
+    vector<string> expected;
+    expected.push_back("fileA");
+    expected.push_back("fileC");
+    expected.push_back("fileD");
+    expected.push_back("dirA");
+    expected.push_back("dirC");
+    expected.push_back("dirD");
+    ASSERT_EQ(0,
+      test_mount.readdir_and_compare(snap_path.c_str(), expected));
+  }
+
+  //
+  // Make sure root listing for snapshot snap2 is as expected
+  //
+  {
+    std::cout << "---------snap2 listing verification---------" << std::endl;
+    string snap_path = test_mount.make_snap_path("snap2");
+    vector<string> expected;
+    expected.push_back("fileA");
+    expected.push_back("fileB");
+    expected.push_back("fileD");
+    expected.push_back("dirA");
+    expected.push_back("dirB");
+    expected.push_back("dirD");
+    ASSERT_EQ(0,
+      test_mount.readdir_and_compare(snap_path.c_str(), expected));
+  }
+
+  //
+  // Print snap1 vs. snap2 delta for the root
+  //
+  test_mount.print_snap_diff("", "snap1", "snap2");
+
+  //
+  // Make sure snap1 vs. snap2 delta for the root is as expected
+  //
+  {
+    vector<pair<string, uint64_t>> expected;
+    expected.emplace_back("fileA", snapid2);
+    expected.emplace_back("fileB", snapid2);
+    expected.emplace_back("fileC", snapid1);
+    expected.emplace_back("dirA", snapid2);
+    expected.emplace_back("dirB", snapid2);
+    expected.emplace_back("dirC", snapid1);
+    expected.emplace_back("dirD", snapid2);
+    test_mount.verify_snap_diff(expected, "", "snap1", "snap2");
+  }
+
+  //
+  // Make sure snap1 vs. snap2 delta for /dirA is as expected
+  //
+  {
+    vector<pair<string, uint64_t>> expected;
+    expected.emplace_back("fileA", snapid2);
+    test_mount.verify_snap_diff(expected, "dirA", "snap1", "snap2");
+  }
+
+  //
+  // Make sure snap1 vs. snap2 delta for /dirB is as expected
+  //
+  {
+    vector<pair<string, uint64_t>> expected;
+    expected.emplace_back("fileb", snapid2);
+    test_mount.verify_snap_diff(expected, "dirB", "snap1", "snap2");
+  }
+
+  //
+  // Make sure snap1 vs. snap2 delta for /dirC is as expected
+  //
+  {
+    vector<pair<string, uint64_t>> expected;
+    expected.emplace_back("filec", snapid1);
+    test_mount.verify_snap_diff(expected, "dirC", "snap2", "snap1");
+  }
+
+  //
+  // Make sure snap1 vs. snap2 delta for /dirD is as expected
+  //
+  {
+    vector<pair<string, uint64_t>> expected;
+    test_mount.verify_snap_diff(expected, "dirD", "snap1", "snap2");
+  }
+
+  // Make sure SnapDiff returns an error when provided with the same
+  // snapshot name for both parties A and B.
+  {
+    string snap_path = test_mount.make_snap_path("snap2");
+    string snap_other_path = snap_path;
+    std::cout << "---------invalid snapdiff params, the same snaps---------" << std::endl;
+    ASSERT_EQ(-EINVAL, test_mount.for_each_readdir_snapdiff(
+      "",
+      "snap2",
+      "snap2",
+      [&](const dirent* dire, uint64_t snapid) {
+        return true;
+      }));
+  }
+  // Make sure SnapDiff returns an error when provided with an empty
+  // snapshot name for one of the parties
+  {
+    std::cout << "---------invalid snapdiff params, no snap_other ---------" << std::endl;
+    string snap_path = test_mount.make_snap_path("snap2");
+    string snap_other_path;
+    ASSERT_EQ(-EINVAL, test_mount.for_each_readdir_snapdiff(
+      "",
+      "snap2",
+      "",
+      [&](const dirent* dire, uint64_t snapid) {
+        return true;
+      }));
+  }
+
+  std::cout << "------------- closing -------------" << std::endl;
+  ASSERT_EQ(0, test_mount.purge_dir(""));
+  ASSERT_EQ(0, test_mount.rmsnap("snap1"));
+  ASSERT_EQ(0, test_mount.rmsnap("snap2"));
+}
+
+/* The following method creates some files/folders/snapshots layout,
+   described in the sheet below.
+   We're to test SnapDiff readdir API against that structure.
+
+* where:
+  - xN denotes file 'x' version N.
+  - X denotes folder name
+  - * denotes no/removed file/folder
+
+#     snap1        snap2      snap3      head
+# fileA1      | fileA2      | fileA2
+# *           | fileB2      | fileB2
+# fileC1      | *           | fileC3
+# fileD1      | fileD1      | fileD3
+# *           | *           | fileE3
+# fileF1      | *           | *
+# fileG1      | fileG2      | *
+# dirA        | dirA        | *
+# dirA/fileA1 | dirA/fileA2 | *
+# *           | dirB        | *
+# *           | dirB/fileb2 | *
+# dirC        | *           | *
+# dirC/filec1 | *           | *
+# dirD        | dirD        | dirD
+# dirD/filed1 | dirD/filed1 | dirD/filed1
+*/
+void TestMount::prepareSnapDiffLib2Cases()
+{
+  //************ snap1 *************
+  ASSERT_LE(0, write_full("fileA", "hello world"));
+  ASSERT_LE(0, write_full("fileC", "hello world to be removed temporarily"));
+  ASSERT_LE(0, write_full("fileD", "hello world unmodified"));
+  ASSERT_LE(0, write_full("fileF", "hello world to be removed completely"));
+  ASSERT_LE(0, write_full("fileG", "hello world to be overwritten at snap2"));
+  ASSERT_EQ(0, mkdir("dirA"));
+  ASSERT_LE(0, write_full("dirA/fileA", "file 'A/a' v1"));
+  ASSERT_EQ(0, mkdir("dirC"));
+  ASSERT_LE(0, write_full("dirC/filec", "file 'C/c' v1"));
+  ASSERT_EQ(0, mkdir("dirD"));
+  ASSERT_LE(0, write_full("dirD/filed", "file 'D/d' v1"));
+
+  ASSERT_EQ(0, mksnap("snap1"));
+
+  //************ snap2 *************
+  ASSERT_LE(0, write_full("fileA", "hello world again in A"));
+  ASSERT_LE(0, write_full("fileB", "hello world in B"));
+  ASSERT_LE(0, write_full("fileG", "hello world to be removed at snap3"));
+  ASSERT_EQ(0, unlink("fileC"));
+  ASSERT_EQ(0, unlink("fileF"));
+
+  ASSERT_LE(0, write_full("dirA/fileA", "file 'A/a' v2"));
+  ASSERT_EQ(0, mkdir("dirB"));
+  ASSERT_LE(0, write_full("dirB/fileb", "file 'B/b' v2"));
+  ASSERT_EQ(0, purge_dir("dirC"));
+
+  ASSERT_EQ(0, mksnap("snap2"));
+
+  //************ snap3 *************
+  ASSERT_LE(0, write_full("fileC", "hello world in C recovered"));
+  ASSERT_LE(0, write_full("fileD", "hello world in D now modified"));
+  ASSERT_LE(0, write_full("fileE", "file 'E' created at snap3"));
+  ASSERT_EQ(0, unlink("fileG"));
+  ASSERT_EQ(0, purge_dir("dirA"));
+  ASSERT_EQ(0, purge_dir("dirB"));
+  ASSERT_EQ(0, mksnap("snap3"));
+}
+
+/* The following method creates a folder with tons of file
+   updated between two snapshots
+   We're to test SnapDiff readdir API against that structure.
+
+* where:
+  - xN denotes file 'x' version N.
+  - X denotes folder name
+  - * denotes no/removed file/folder
+
+#    snap1         snap2
+* aaaaA1     | aaaaA1    |
+* aaaaB1     |    *      |
+* *          | aaaaC2    |
+* aaaaD1     | aaaaD2    |
+# file<NNN>1 | file<NNN>2|
+* fileZ1     | fileA1    |
+* zzzzA1     | zzzzA1    |
+* zzzzB1     |    *      |
+* *          | zzzzC2    |
+* zzzzD1     | zzzzD2    |
+*/
+
+void TestMount::prepareHugeSnapDiff(const std::string& name_prefix_start,
+                                    const std::string& name_prefix_bulk,
+                                    const std::string& name_prefix_end,
+                                    size_t file_count,
+                                    bool bulk_diff)
+{
+  //************ snap1 *************
+  std::string startA = name_prefix_start + "A";
+  std::string startB = name_prefix_start + "B";
+  std::string startC = name_prefix_start + "C";
+  std::string startD = name_prefix_start + "D";
+  std::string endA = name_prefix_end + "A";
+  std::string endB = name_prefix_end + "B";
+  std::string endC = name_prefix_end + "C";
+  std::string endD = name_prefix_end + "D";
+
+  ASSERT_LE(0, write_full(startA.c_str(), "hello world"));
+  ASSERT_LE(0, write_full(startB.c_str(), "hello world"));
+  ASSERT_LE(0, write_full(startD.c_str(), "hello world"));
+  for(size_t i = 0; i < file_count; i++) {
+    auto s = name_prefix_bulk + stringify(i);
+    ASSERT_LE(0, write_full(s.c_str(), "hello world"));
+  }
+  ASSERT_LE(0, write_full(endA.c_str(), "hello world"));
+  ASSERT_LE(0, write_full(endB.c_str(), "hello world"));
+  ASSERT_LE(0, write_full(endD.c_str(), "hello world"));
+
+  ASSERT_EQ(0, mksnap("snap1"));
+
+  ASSERT_LE(0, unlink(startB.c_str()));
+  ASSERT_LE(0, write_full(startC.c_str(), "hello world2"));
+  ASSERT_LE(0, write_full(startD.c_str(), "hello world2"));
+  if (bulk_diff) {
+    for(size_t i = 0; i < file_count; i++) {
+      auto s = std::string(name_prefix_bulk) + stringify(i);
+      ASSERT_LE(0, write_full(s.c_str(), "hello world2"));
+    }
+  }
+  ASSERT_LE(0, unlink(endB.c_str()));
+  ASSERT_LE(0, write_full(endC.c_str(), "hello world2"));
+  ASSERT_LE(0, write_full(endD.c_str(), "hello world2"));
+  ASSERT_EQ(0, mksnap("snap2"));
+}
+
+/*
+* More versatile SnapDiff readdir API verification,
+* includes 3 different snapshots and interleaving/repetitive calls to make sure
+* the results aren't spoiled due to caching.
+*/
+TEST(LibCephFS, SnapDiffLib2)
+{
+  TestMount test_mount;
+
+  test_mount.prepareSnapDiffLib2Cases();
+
+  // Create simple directory tree with a couple of snapshots to test against
+  uint64_t snapid1;
+  uint64_t snapid2;
+  uint64_t snapid3;
+  ASSERT_EQ(0, test_mount.get_snapid("snap1", &snapid1));
+  ASSERT_EQ(0, test_mount.get_snapid("snap2", &snapid2));
+  ASSERT_EQ(0, test_mount.get_snapid("snap3", &snapid3));
+  std::cout << snapid1 << " vs. " << snapid2 << " vs. " << snapid3 << std::endl;
+  ASSERT_GT(snapid1, 0);
+  ASSERT_GT(snapid2, 0);
+  ASSERT_GT(snapid3, 0);
+  ASSERT_GT(snapid2, snapid1);
+  ASSERT_GT(snapid3, snapid2);
+
+  // define a labda which verifies snap1/snap2/snap3 listings
+  auto verify_snap_listing = [&]()
+  {
+    {
+      string snap_path = test_mount.make_snap_path("snap1");
+
+      std::cout << "---------snap1 listing verification---------" << std::endl;
+      vector<string> expected;
+      expected.push_back("fileA");
+      expected.push_back("fileC");
+      expected.push_back("fileD");
+      expected.push_back("fileF");
+      expected.push_back("fileG");
+      expected.push_back("dirA");
+      expected.push_back("dirC");
+      expected.push_back("dirD");
+      ASSERT_EQ(0,
+        test_mount.readdir_and_compare(snap_path.c_str(), expected));
+    }
+    {
+      std::cout << "---------snap2 listing verification---------" << std::endl;
+      string snap_path = test_mount.make_snap_path("snap2");
+      vector<string> expected;
+      expected.push_back("fileA");
+      expected.push_back("fileB");
+      expected.push_back("fileD");
+      expected.push_back("fileG");
+      expected.push_back("dirA");
+      expected.push_back("dirB");
+      expected.push_back("dirD");
+      ASSERT_EQ(0,
+        test_mount.readdir_and_compare(snap_path.c_str(), expected));
+    }
+    {
+      std::cout << "---------snap3 listing verification---------" << std::endl;
+      string snap_path = test_mount.make_snap_path("snap3");
+      vector<string> expected;
+      expected.push_back("fileA");
+      expected.push_back("fileB");
+      expected.push_back("fileC");
+      expected.push_back("fileD");
+      expected.push_back("fileE");
+      expected.push_back("dirD");
+      ASSERT_EQ(0,
+        test_mount.readdir_and_compare(snap_path.c_str(), expected));
+    }
+  };
+  // Prepare expected delta for snap1 vs. snap2
+  vector<pair<string, uint64_t>> snap1_2_diff_expected;
+  snap1_2_diff_expected.emplace_back("fileA", snapid2);
+  snap1_2_diff_expected.emplace_back("fileB", snapid2);
+  snap1_2_diff_expected.emplace_back("fileC", snapid1);
+  snap1_2_diff_expected.emplace_back("fileF", snapid1);
+  snap1_2_diff_expected.emplace_back("fileG", snapid2);
+  snap1_2_diff_expected.emplace_back("dirA", snapid2);
+  snap1_2_diff_expected.emplace_back("dirB", snapid2);
+  snap1_2_diff_expected.emplace_back("dirC", snapid1);
+  snap1_2_diff_expected.emplace_back("dirD", snapid2);
+
+  // Prepare expected delta for snap1 vs. snap3
+  vector<pair<string, uint64_t>> snap1_3_diff_expected;
+  snap1_3_diff_expected.emplace_back("fileA", snapid3);
+  snap1_3_diff_expected.emplace_back("fileB", snapid3);
+  snap1_3_diff_expected.emplace_back("fileC", snapid3);
+  snap1_3_diff_expected.emplace_back("fileD", snapid3);
+  snap1_3_diff_expected.emplace_back("fileE", snapid3);
+  snap1_3_diff_expected.emplace_back("fileF", snapid1);
+  snap1_3_diff_expected.emplace_back("fileG", snapid1);
+  snap1_3_diff_expected.emplace_back("dirA", snapid1);
+  snap1_3_diff_expected.emplace_back("dirC", snapid1);
+  snap1_3_diff_expected.emplace_back("dirD", snapid3);
+
+  // Prepare expected delta for snap2 vs. snap3
+  vector<pair<string, uint64_t>> snap2_3_diff_expected;
+  snap2_3_diff_expected.emplace_back("fileC", snapid3);
+  snap2_3_diff_expected.emplace_back("fileD", snapid3);
+  snap2_3_diff_expected.emplace_back("fileE", snapid3);
+  snap2_3_diff_expected.emplace_back("fileG", snapid2);
+  snap2_3_diff_expected.emplace_back("dirA", snapid2);
+  snap2_3_diff_expected.emplace_back("dirB", snapid2);
+  snap2_3_diff_expected.emplace_back("dirD", snapid3);
+
+  // Check snapshot listings on a cold cache
+  verify_snap_listing();
+
+  // Check snapshot listings on a warm cache
+  verify_snap_listing(); // served from cache
+
+  // Print snap1 vs. snap2 delta against the root folder
+  test_mount.print_snap_diff("", "snap1", "snap2");
+
+  // Verify snap1 vs. snap2 delta for the root
+  test_mount.verify_snap_diff(snap1_2_diff_expected, "", "snap1", "snap2");
+
+  // Check snapshot listings on a warm cache once again
+  // to make sure it wasn't spoiled by SnapDiff
+  verify_snap_listing(); // served from cache
+
+  // Verify snap2 vs. snap1 delta
+  test_mount.verify_snap_diff(snap1_2_diff_expected, "", "snap2", "snap1");
+
+  // Check snapshot listings on a warm cache once again
+  // to make sure it wasn't spoiled by SnapDiff
+  verify_snap_listing(); // served from cache
+
+  // Verify snap1 vs. snap3 delta for the root
+  test_mount.verify_snap_diff(snap1_3_diff_expected, "", "snap1", "snap3");
+
+  // Verify snap2 vs. snap3 delta for the root
+  test_mount.verify_snap_diff(snap2_3_diff_expected, "", "snap2", "snap3");
+
+  // Check snapshot listings on a warm cache once again
+  // to make sure it wasn't spoiled by SnapDiff
+  verify_snap_listing(); // served from cache
+
+  // Print snap1 vs. snap2 delta against /dirA folder
+  test_mount.print_snap_diff("dirA", "snap1", "snap2");
+
+  // Verify snap1 vs. snap2 delta for /dirA
+  {
+    vector<pair<string, uint64_t>> expected;
+    expected.emplace_back("fileA", snapid2);
+    test_mount.verify_snap_diff(expected, "dirA", "snap1", "snap2");
+  }
+
+  // Print snap1 vs. snap2 delta against /dirB folder
+  test_mount.print_snap_diff("dirB", "snap1", "snap2");
+
+  // Verify snap1 vs. snap2 delta for /dirB
+  {
+    vector<pair<string, uint64_t>> expected;
+    expected.emplace_back("fileb", snapid2);
+    test_mount.verify_snap_diff(expected, "dirB", "snap1", "snap2");
+  }
+
+  // Print snap1 vs. snap2 delta against /dirD folder
+  test_mount.print_snap_diff("dirD", "snap1", "snap2");
+
+  // Verify snap1 vs. snap2 delta for /dirD
+  {
+    vector<pair<string, uint64_t>> expected;
+    test_mount.verify_snap_diff(expected, "dirD", "snap1", "snap2");
+  }
+
+  // Check snapshot listings on a warm cache once again
+  // to make sure it wasn't spoiled by SnapDiff
+  verify_snap_listing(); // served from cache
+
+  // Verify snap1 vs. snap2 delta for the root once again
+  test_mount.verify_snap_diff(snap1_2_diff_expected, "", "snap1", "snap2");
+
+  // Verify snap2 vs. snap3 delta for the root once again
+  test_mount.verify_snap_diff(snap2_3_diff_expected, "", "snap3", "snap2");
+
+  // Verify snap1 vs. snap3 delta for the root once again
+  test_mount.verify_snap_diff(snap1_3_diff_expected, "", "snap1", "snap3");
+
+  std::cout << "------------- closing -------------" << std::endl;
+  ASSERT_EQ(0, test_mount.purge_dir(""));
+  ASSERT_EQ(0, test_mount.rmsnap("snap1"));
+  ASSERT_EQ(0, test_mount.rmsnap("snap2"));
+  ASSERT_EQ(0, test_mount.rmsnap("snap3"));
+}
+
+/* The following method creates some files/folders/snapshots layout,
+   described in the sheet below.
+   We're to test SnapDiff against that structure.
+
+* where:
+  - xN denotes file 'x' version N.
+  - X denotes folder name
+  - * denotes no/removed file/folder
+
+#     snap1        snap2      snap3      head
+# a1     |     a1     |    a3    |    a4
+# b1     |     b2     |    b3    |    b3
+# c1     |     *      |    *     |    *
+# *      |     d2     |    d3    |    d3
+# f1     |     f2     |    *     |    *
+# ff1    |     ff1    |    *     |    *
+# g1     |     *      |    g3    |    g3
+# *      |     *      |    *     |    h4
+# i1     |     i1     |    i1    |    i1
+# S      |     S      |    S     |    S
+# S/sa1  |     S/sa2  |    S/sa3 |    S/sa3
+# *      |     *      |    *     |    S/sh4
+# *      |     T      |    T     |    T
+# *      |     T/td2  |    T/td3 |    T/td3
+# C      |     *      |    *     |    *
+# C/cc1  |     *      |    *     |    *
+# C/C1   |     *      |    *     |    *
+# C/C1/c1|     *      |    *     |    *
+# G      |     *      |    G     |    G
+# G/gg1  |     *      |    G/gg3 |    G/gg3
+# *      |     k2     |    *     |    *
+# *      |     l2     |    l2    |    *
+# *      |     K      |    *     |    *
+# *      |     K/kk2  |    *     |    *
+# *      |     *      |    H     |    H
+# *      |     *      |    H/hh3 |    H/hh3
+# I      |     I      |    I     |    *
+# I/ii1  |     I/ii2  |    I/ii3 |    *
+# I/iii1 |     I/iii1 |    I/iii3|    *
+# *      |     *      |   I/iiii3|    *
+# *      |    I/J     |  I/J     |    *
+# *      |   I/J/i2   |  I/J/i3  |    *
+# *      |   I/J/j2   |  I/J/j2  |    *
+# *      |   I/J/k2   |    *     |    *
+# *      |     *      |  I/J/l3  |    *
+# L      |     L      |    L     |    L
+# L/ll1  |    L/ll1   |   L/ll3  |    L/ll3
+# L/LL   |    L/LL    |  L/LL    |    L/LL
+# *      |    L/LL/ll2|  L/LL/ll3|    L/LL/ll4
+# *      |    L/LM    |    *     |    *
+# *      |    L/LM/lm2|    *     |    *
+# *      |    L/LN    |    L/LN  |    *
+*/
+void TestMount::prepareSnapDiffLib3Cases()
+{
+  //************ snap1 *************
+  ASSERT_LE(0, write_full("a", "file 'a' v1"));
+  ASSERT_LE(0, write_full("b", "file 'b' v1"));
+  ASSERT_LE(0, write_full("c", "file 'c' v1"));
+  ASSERT_LE(0, write_full("e", "file 'e' v1"));
+  ASSERT_LE(0, write_full("~e", "file '~e' v1"));
+  ASSERT_LE(0, write_full("f", "file 'f' v1"));
+  ASSERT_LE(0, write_full("ff", "file 'ff' v1"));
+  ASSERT_LE(0, write_full("g", "file 'g' v1"));
+  ASSERT_LE(0, write_full("i", "file 'i' v1"));
+
+  ASSERT_EQ(0, mkdir("S"));
+  ASSERT_LE(0, write_full("S/sa", "file 'S/sa' v1"));
+
+  ASSERT_EQ(0, mkdir("C"));
+  ASSERT_LE(0, write_full("C/cc", "file 'C/cc' v1"));
+
+  ASSERT_EQ(0, mkdir("C/CC"));
+  ASSERT_LE(0, write_full("C/CC/c", "file 'C/CC/c' v1"));
+
+  ASSERT_EQ(0, mkdir("G"));
+  ASSERT_LE(0, write_full("G/gg", "file 'G/gg' v1"));
+
+  ASSERT_EQ(0, mkdir("I"));
+  ASSERT_LE(0, write_full("I/ii", "file 'I/ii' v1"));
+  ASSERT_LE(0, write_full("I/iii", "file 'I/iii' v1"));
+
+  ASSERT_EQ(0, mkdir("L"));
+  ASSERT_LE(0, write_full("L/ll", "file 'L/ll' v1"));
+  ASSERT_EQ(0, mkdir("L/LL"));
+
+  ASSERT_EQ(0, mksnap("snap1"));
+  //************ snap2 *************
+
+  ASSERT_LE(0, write_full("b", "file 'b' v2"));
+  ASSERT_EQ(0, unlink("c"));
+  ASSERT_LE(0, write_full("d", "file 'd' v2"));
+  ASSERT_LE(0, write_full("e", "file 'e' v2"));
+  ASSERT_LE(0, write_full("~e", "file '~e' v2"));
+  ASSERT_LE(0, write_full("f", "file 'f' v2"));
+  ASSERT_EQ(0, unlink("g"));
+
+  ASSERT_LE(0, write_full("S/sa", "file 'S/sa' v2"));
+
+  ASSERT_EQ(0, mkdir("T"));
+  ASSERT_LE(0, write_full("T/td", "file 'T/td' v2"));
+
+  ASSERT_EQ(0, purge_dir("C"));
+  ASSERT_EQ(0, purge_dir("G"));
+
+  ASSERT_LE(0, write_full("k", "file 'k' v2"));
+  ASSERT_LE(0, write_full("l", "file 'l' v2"));
+
+  ASSERT_EQ(0, mkdir("K"));
+  ASSERT_LE(0, write_full("K/kk", "file 'K/kk' v2"));
+
+  ASSERT_LE(0, write_full("I/ii", "file 'I/ii' v2"));
+
+  ASSERT_EQ(0, mkdir("I/J"));
+  ASSERT_LE(0, write_full("I/J/i", "file 'I/J/i' v2"));
+  ASSERT_LE(0, write_full("I/J/j", "file 'I/J/j' v2"));
+  ASSERT_LE(0, write_full("I/J/k", "file 'I/J/k' v2"));
+
+  ASSERT_LE(0, write_full("L/LL/ll", "file 'L/LL/ll' v2"));
+
+  ASSERT_EQ(0, mkdir("L/LM"));
+  ASSERT_LE(0, write_full("L/LM/lm", "file 'L/LM/lm' v2"));
+
+  ASSERT_EQ(0, mkdir("L/LN"));
+
+  ASSERT_EQ(0, mksnap("snap2"));
+    //************ snap3 *************
+
+  ASSERT_LE(0, write_full("a", "file 'a' v3"));
+  ASSERT_LE(0, write_full("b", "file 'b' v3"));
+  ASSERT_LE(0, write_full("d", "file 'd' v3"));
+  ASSERT_EQ(0, unlink("e"));
+  ASSERT_EQ(0, unlink("~e"));
+  ASSERT_EQ(0, unlink("f"));
+  ASSERT_EQ(0, unlink("ff"));
+  ASSERT_LE(0, write_full("g", "file 'g' v3"));
+
+  ASSERT_LE(0, write_full("S/sa", "file 'S/sa' v3"));
+
+  ASSERT_LE(0, write_full("T/td", "file 'T/td' v3"));
+
+  ASSERT_EQ(0, mkdir("G"));
+  ASSERT_LE(0, write_full("G/gg", "file 'G/gg' v3"));
+
+  ASSERT_EQ(0, unlink("k"));
+
+  ASSERT_EQ(0, purge_dir("K"));
+
+  ASSERT_EQ(0, mkdir("H"));
+  ASSERT_LE(0, write_full("H/hh", "file 'H/hh' v3"));
+
+  ASSERT_LE(0, write_full("I/ii", "file 'I/ii' v3"));
+  ASSERT_LE(0, write_full("I/iii", "file 'I/iii' v3"));
+  ASSERT_LE(0, write_full("I/iiii", "file 'I/iiii' v3"));
+
+  ASSERT_LE(0, write_full("I/J/i", "file 'I/J/i' v3"));
+  ASSERT_EQ(0, unlink("I/J/k"));
+  ASSERT_LE(0, write_full("I/J/l", "file 'I/J/l' v3"));
+
+  ASSERT_LE(0, write_full("L/ll", "file 'L/ll' v3"));
+
+  ASSERT_LE(0, write_full("L/LL/ll", "file 'L/LL/ll' v3"));
+
+  ASSERT_EQ(0, purge_dir("L/LM"));
+
+  ASSERT_EQ(0, mksnap("snap3"));
+  //************ head *************
+  ASSERT_LE(0, write_full("a", "file 'a' head"));
+
+  ASSERT_LE(0, write_full("h", "file 'h' head"));
+
+  ASSERT_LE(0, write_full("S/sh", "file 'S/sh' head"));
+
+  ASSERT_EQ(0, unlink("l"));
+
+  ASSERT_EQ(0, purge_dir("I"));
+
+  ASSERT_LE(0, write_full("L/LL/ll", "file 'L/LL/ll' head"));
+
+  ASSERT_EQ(0, purge_dir("L/LN"));
+}
+
+//
+// This case tests SnapDiff functionality for snap1/snap2 snapshot delta
+// It operates against FS layout created by prepareSnapDiffCases() method,
+// see relevant table before that function for FS state overview.
+//
+TEST(LibCephFS, SnapDiffCases1_2)
+{
+  TestMount test_mount;
+
+  // Create directory tree evolving through a bunch of snapshots
+  test_mount.prepareSnapDiffLib3Cases();
+
+  uint64_t snapid1;
+  uint64_t snapid2;
+  ASSERT_EQ(0, test_mount.get_snapid("snap1", &snapid1));
+  ASSERT_EQ(0, test_mount.get_snapid("snap2", &snapid2));
+  std::cout << snapid1 << " vs. " << snapid2 << std::endl;
+  ASSERT_GT(snapid1, 0);
+  ASSERT_GT(snapid2, 0);
+  ASSERT_GT(snapid2, snapid1);
+
+  // Print snapshot delta (snap1 vs. snap2) results for root in a
+  // human-readable form.
+  test_mount.print_snap_diff("", "snap1", "snap2");
+
+  {
+    // Make sure the root delta is as expected
+    // One should use columns snap1 and snap2 from
+    // the table preceeding prepareSnapDiffCases() function
+    // to learn which names to expect in the delta.
+    //
+    //  - file 'a' is unchanged hence not present in delta
+    //  - file 'ff' is unchanged hence not present in delta
+    //  - file 'i' is unchanged hence not present in delta
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("b", snapid2);  // file 'b' is updated in snap2
+    expected.emplace_back("c", snapid1);  // file 'c' is removed in snap2
+    expected.emplace_back("d", snapid2);  // file 'd' is created in snap2
+    expected.emplace_back("e", snapid2);  // file 'e' is updated in snap2
+    expected.emplace_back("~e", snapid2); // file '~e' is updated in snap2
+    expected.emplace_back("f", snapid2);  // file 'f' is updated in snap2
+    expected.emplace_back("g", snapid1);  // file 'g' is removed in snap2
+    expected.emplace_back("S", snapid2);  // folder 'S' is present in snap2 hence reported
+    expected.emplace_back("T", snapid2);  // folder 'T' is created in snap2
+    expected.emplace_back("C", snapid1);  // folder 'C' is removed in snap2
+    expected.emplace_back("G", snapid1);  // folder 'G' is removed in snap2
+    expected.emplace_back("k", snapid2);  // file 'k' is created in snap2
+    expected.emplace_back("l", snapid2);  // file 'l' is created in snap2
+    expected.emplace_back("K", snapid2);  // folder 'K' is created in snap2
+    expected.emplace_back("I", snapid2);  // folder 'I' is created in snap2
+    expected.emplace_back("L", snapid2);  // folder 'L' is present in snap2 but got more
+                                       // subfolders
+    test_mount.verify_snap_diff(expected, "", "snap1", "snap2");
+  }
+  {
+
+    //
+    // Make sure snapshot delta for /S (existed at both snap1 and snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("sa", snapid2);
+    test_mount.verify_snap_diff(expected, "S", "snap1", "snap2");
+  }
+  {
+    //
+    // Make sure snapshot delta for /T (created at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("td", snapid2);
+    test_mount.verify_snap_diff(expected, "T", "snap1", "snap2");
+  }
+  {
+    //
+    // Make sure snapshot delta for /C (removed at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("cc", snapid1);
+    expected.emplace_back("CC", snapid1);
+    test_mount.verify_snap_diff(expected, "C", "snap2", "snap1");
+  }
+  {
+    //
+    // Make sure snapshot delta for /C/CC (removed at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("c", snapid1);
+    test_mount.verify_snap_diff(expected, "C/CC", "snap2", "snap1");
+  }
+  {
+    //
+    // Make sure snapshot delta for /I (created at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("ii", snapid2);
+    expected.emplace_back("J", snapid2);
+    test_mount.verify_snap_diff(expected, "I", "snap1", "snap2");
+  }
+  {
+    //
+    // Make sure snapshot delta for /I/J (created at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("i", snapid2);
+    expected.emplace_back("j", snapid2);
+    expected.emplace_back("k", snapid2);
+    test_mount.verify_snap_diff(expected, "I/J", "snap1", "snap2");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L (extended at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("LL", snapid2);
+    expected.emplace_back("LM", snapid2);
+    expected.emplace_back("LN", snapid2);
+    test_mount.verify_snap_diff(expected, "L", "snap1", "snap2");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L/LL (updated at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("ll", snapid2);
+    test_mount.verify_snap_diff(expected, "L/LL", "snap1", "snap2");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L/LN (created empty at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    test_mount.verify_snap_diff(expected, "L/LN", "snap1", "snap2");
+  }
+
+  {
+    // Make sure snapshot delta for /L/LM (created at snap2)
+    // is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("lm", snapid2);
+    test_mount.verify_snap_diff(expected, "L/LM", "snap1", "snap2");
+  }
+  std::cout << "-------------" << std::endl;
+
+  test_mount.remove_all();
+  test_mount.rmsnap("snap1");
+  test_mount.rmsnap("snap2");
+  test_mount.rmsnap("snap3");
+}
+
+//
+// This case tests SnapDiff functionality for snap2/snap3 snapshot delta
+// retrieved through .snap path-based query API.
+// It operates against FS layout created by prepareSnapDiffCases() method,
+// see relevant table before that function for FS state overview.
+//
+TEST(LibCephFS, SnapDiffCases2_3)
+{
+  TestMount test_mount;
+
+  // Create directory tree evolving through a bunch of snapshots
+  test_mount.prepareSnapDiffLib3Cases();
+
+  uint64_t snapid2;
+  uint64_t snapid3;
+  ASSERT_EQ(0, test_mount.get_snapid("snap2", &snapid2));
+  ASSERT_EQ(0, test_mount.get_snapid("snap3", &snapid3));
+  std::cout << snapid2 << " vs. " << snapid3 << std::endl;
+  ASSERT_GT(snapid3, 0);
+  ASSERT_GT(snapid3, 0);
+  ASSERT_GT(snapid3, snapid2);
+
+  // Print snapshot delta (snap2 vs. snap3) results for root in a
+  // human-readable form.
+  test_mount.print_snap_diff("", "snap2", "snap3");
+
+  {
+    // Make sure the root delta is as expected
+    // One should use columns snap1 and snap2 from
+    // the table preceeding prepareSnapDiffCases() function
+    // to learn which names to expect in the delta.
+    //
+    //  - file 'c' is removed since snap1 hence not present in delta
+    //  - file 'l' is unchanged hence not present in delta
+    //  - file 'i' is unchanged hence not present in delta
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("a", snapid3);   // file 'a' is updated in snap3
+    expected.emplace_back("b", snapid3);   // file 'b' is updated in snap3
+    expected.emplace_back("d", snapid3);   // file 'd' is updated in snap3
+    expected.emplace_back("~e", snapid2);  // file '~e' is removed in snap3
+    expected.emplace_back("e", snapid2);   // file 'e' is removed in snap3
+    expected.emplace_back("f", snapid2);   // file 'f' is removed in snap3
+    expected.emplace_back("ff", snapid2);  // file 'ff' is removed in snap3
+    expected.emplace_back("g", snapid3);   // file 'g' re-appeared in snap3
+    expected.emplace_back("S", snapid3);   // folder 'S' is present in snap3 hence reported
+    expected.emplace_back("T", snapid3);   // folder 'T' is present in snap3 hence reported
+    expected.emplace_back("G", snapid3);   // folder 'G' re-appeared in snap3 hence reported
+    expected.emplace_back("k", snapid2);   // file 'k' is removed in snap3
+    expected.emplace_back("K", snapid2);   // folder 'K' is removed in snap3
+    expected.emplace_back("H", snapid3);   // folder 'H' is created in snap3 hence reported
+    expected.emplace_back("I", snapid3);   // folder 'I' is present in snap3 hence reported
+    expected.emplace_back("L", snapid3);   // folder 'L' is present in snap3 hence reported
+    test_mount.verify_snap_diff(expected, "", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /S (children updated) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("sa", snapid3);
+    test_mount.verify_snap_diff(expected, "S", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /T (children updated) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("td", snapid3);
+    test_mount.verify_snap_diff(expected, "T", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /G (re-appeared) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("gg", snapid3);
+    test_mount.verify_snap_diff(expected, "G", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /K (removed) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("kk", snapid2);
+    test_mount.verify_snap_diff(expected, "K", "snap3", "snap2");
+  }
+  {
+    //
+    // Make sure snapshot delta for /H (created) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("hh", snapid3);
+    test_mount.verify_snap_diff(expected, "H", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /I (children updated) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("ii", snapid3);
+    expected.emplace_back("iii", snapid3);
+    expected.emplace_back("iiii", snapid3);
+    expected.emplace_back("J", snapid3);
+    test_mount.verify_snap_diff(expected, "I", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /I/J (children updated/removed) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("i", snapid3);
+    expected.emplace_back("k", snapid2);
+        expected.emplace_back("l", snapid3);
+    test_mount.verify_snap_diff(expected, "I/J", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L (children updated/removed) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("ll", snapid3);
+    expected.emplace_back("LL", snapid3);
+    expected.emplace_back("LM", snapid2);
+    expected.emplace_back("LN", snapid3);
+    test_mount.verify_snap_diff(expected, "L", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L/LL (children updated) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("ll", snapid3);
+    test_mount.verify_snap_diff(expected, "L/LL", "snap2", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L/LM (removed) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("lm", snapid2);
+    test_mount.verify_snap_diff(expected, "L/LM", "snap3", "snap2");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L/LN (created empty) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    test_mount.verify_snap_diff(expected, "L/LN", "snap2", "snap3");
+  }
+  test_mount.remove_all();
+  test_mount.rmsnap("snap1");
+  test_mount.rmsnap("snap2");
+  test_mount.rmsnap("snap3");
+}
+
+//
+// This case tests SnapDiff functionality for snap1/snap3 snapshot delta
+// retrieved through .snap path-based query API.
+// It operates against FS layout created by prepareSnapDiffCases() method,
+// see relevant table before that function for FS state overview.
+//
+TEST(LibCephFS, SnapDiffCases1_3)
+{
+  TestMount test_mount;
+
+  // Create directory tree evolving through a bunch of snapshots
+  test_mount.prepareSnapDiffLib3Cases();
+
+  uint64_t snapid1;
+  uint64_t snapid3;
+  ASSERT_EQ(0, test_mount.get_snapid("snap1", &snapid1));
+  ASSERT_EQ(0, test_mount.get_snapid("snap3", &snapid3));
+  std::cout << snapid1 << " vs. " << snapid3 << std::endl;
+  ASSERT_GT(snapid3, 0);
+  ASSERT_GT(snapid3, 0);
+  ASSERT_GT(snapid3, snapid1);
+
+  // Print snapshot delta (snap2 vs. snap3) results for root in a
+  // human-readable form.
+  test_mount.print_snap_diff("", "snap1", "snap3");
+
+  {
+    // Make sure the root delta is as expected
+    // One should use columns snap1 and snap3 from
+    // the table preceeding prepareSnapDiffCases() function
+    // to learn which names to expect in the delta.
+    //
+    //  - file 'i' is unchanged hence not present in delta
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("a", snapid3);  // file 'a' is updated in snap3
+    expected.emplace_back("b", snapid3);  // file 'b' is updated in snap3
+    expected.emplace_back("c", snapid1); // file 'c' is removed in snap2
+    expected.emplace_back("d", snapid3);  // file 'd' is updated in snap3
+    expected.emplace_back("~e", snapid1); // file '~e' is removed in snap3
+    expected.emplace_back("e", snapid1);  // file 'e' is removed in snap3
+    expected.emplace_back("f", snapid1);  // file 'f' is removed in snap3
+    expected.emplace_back("ff", snapid1); // file 'ff' is removed in snap3
+    expected.emplace_back("g", snapid3);  // file 'g' removed in snap2 and
+                                          // re-appeared in snap3
+    expected.emplace_back("S", snapid3);  // folder 'S' is present in snap3 hence reported
+    expected.emplace_back("T", snapid3);  // folder 'T' is present in snap3 hence reported
+    expected.emplace_back("C", snapid1);  // folder 'C' is removed in snap2
+
+    // folder 'G' is removed in snap2 and re-appeared in snap3
+    // hence reporting it twice under different snapid
+    expected.emplace_back("G", snapid1);
+    expected.emplace_back("G", snapid3);
+
+    expected.emplace_back("l", snapid3);   // file 'l' is created in snap2
+    expected.emplace_back("H", snapid3);   // folder 'H' is created in snap3 hence reported
+    expected.emplace_back("I", snapid3);   // folder 'I' is created in snap3 hence reported
+    expected.emplace_back("L", snapid3);   // folder 'L' is created in snap3 hence reported
+    test_mount.verify_snap_diff(expected, "", "snap3", "snap1");
+  }
+  {
+    //
+    // Make sure snapshot delta for /S (children updated) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("sa", snapid3);
+    test_mount.verify_snap_diff(expected, "S", "snap3", "snap1");
+  }
+  {
+    //
+    // Make sure snapshot delta for /T (created and children updated) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("td", snapid3);
+    test_mount.verify_snap_diff(expected, "T", "snap3", "snap1");
+  }
+  {
+    //
+    // Make sure snapshot delta for /C (removed) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("cc", snapid1);
+    expected.emplace_back("CC", snapid1);
+    test_mount.verify_snap_diff(expected, "C", "snap3", "snap1");
+  }
+  {
+    //
+    // Make sure snapshot delta for /C/CC (removed) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("c", snapid1);
+    test_mount.verify_snap_diff(expected, "C/CC", "snap3", "snap1");
+  }
+  {
+    //
+    // Make sure snapshot delta for /G (removed) is as expected
+    // For this case (G@snap1 and G@snap3 are different entries)
+    // the order in which snapshot names are provided is crucial.
+    // Making  G@snap1 vs. snap3 delta returns everything from G@snap1
+    // but omits any entries from G/snap3 (since it's a different entry).
+    // And making  G@snap3 vs. snap1 delta returns everything from G@snap3
+    // but nothing from snap1,
+
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("gg", snapid1);
+    test_mount.verify_snap_diff(expected, "G", "snap1", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /G (re-created) is as expected
+    // The snapshot names order is important, see above.
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("gg", snapid3);
+    test_mount.verify_snap_diff(expected, "G", "snap3", "snap1");
+  }
+  {
+    //
+    // Make sure snapshot delta for /H (created) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("hh", snapid3);
+    test_mount.verify_snap_diff(expected, "H", "snap1", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /I (chinldren updated) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("ii", snapid3);
+    expected.emplace_back("iii", snapid3);
+    expected.emplace_back("iiii", snapid3);
+    expected.emplace_back("J", snapid3);
+    test_mount.verify_snap_diff(expected, "I", "snap1", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /I/J (created at snap2) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("i", snapid3);
+    expected.emplace_back("j", snapid3);
+    expected.emplace_back("l", snapid3);
+    test_mount.verify_snap_diff(expected, "I/J", "snap1", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("ll", snapid3);
+    expected.emplace_back("LL", snapid3);
+    expected.emplace_back("LN", snapid3);
+    test_mount.verify_snap_diff(expected, "L", "snap1", "snap3");
+  }
+  {
+    //
+    // Make sure snapshot delta for /L/LL (children updated) is as expected
+    //
+    vector<std::pair<string, uint64_t>> expected;
+    expected.emplace_back("ll", snapid3);
+    test_mount.verify_snap_diff(expected, "L/LL", "snap1", "snap3");
+  }
+  {
+    vector<std::pair<string, uint64_t>> expected;
+    test_mount.verify_snap_diff(expected, "L/LN", "snap1", "snap3");
+  }
+  std::cout << "-------------" << std::endl;
+
+  test_mount.remove_all();
+  test_mount.rmsnap("snap1");
+  test_mount.rmsnap("snap2");
+  test_mount.rmsnap("snap3");
+}
+
+/*
+* SnapDiff readdir API testing for huge dir
+* when delta is minor.
+*/
+TEST(LibCephFS, HugeSnapDiffSmallDelta)
+{
+  TestMount test_mount;
+
+  long int file_count = 10000;
+  printf("Seeding %ld files...\n", file_count);
+
+  // Create simple directory tree with a couple of snapshots
+  // to test against.
+  string name_prefix_start = "aaaa";
+  string name_prefix_bulk = "file";
+  string name_prefix_end = "zzzz";
+  test_mount.prepareHugeSnapDiff(name_prefix_start,
+                                 name_prefix_bulk,
+                                 name_prefix_end,
+                                 file_count,
+                                 false);
+
+  uint64_t snapid1;
+  uint64_t snapid2;
+
+  // learn snapshot ids and do basic verification
+  ASSERT_EQ(0, test_mount.get_snapid("snap1", &snapid1));
+  ASSERT_EQ(0, test_mount.get_snapid("snap2", &snapid2));
+  ASSERT_GT(snapid1, 0);
+  ASSERT_GT(snapid2, 0);
+  ASSERT_GT(snapid2, snapid1);
+  std::cout << snapid1 << " vs. " << snapid2 << std::endl;
+
+  //
+  // Make sure snap1 vs. snap2 delta for the root is as expected
+  //
+  {
+    vector<pair<string, uint64_t>> expected;
+    expected.emplace_back(name_prefix_start + "B", snapid1);
+    expected.emplace_back(name_prefix_start + "C", snapid2);
+    expected.emplace_back(name_prefix_start + "D", snapid2);
+
+    expected.emplace_back(name_prefix_end + "B", snapid1);
+    expected.emplace_back(name_prefix_end + "C", snapid2);
+    expected.emplace_back(name_prefix_end + "D", snapid2);
+    test_mount.verify_snap_diff(expected, "", "snap1", "snap2");
+  }
+
+  std::cout << "------------- closing -------------" << std::endl;
+  ASSERT_EQ(0, test_mount.purge_dir(""));
+  ASSERT_EQ(0, test_mount.rmsnap("snap1"));
+  ASSERT_EQ(0, test_mount.rmsnap("snap2"));
+}
+
+/*
+* SnapDiff readdir API testing for huge dir
+* when delta is large
+*/
+TEST(LibCephFS, HugeSnapDiffLargeDelta)
+{
+  TestMount test_mount;
+
+  // Calculate amount of files required to have multiple directory fragments
+  // using relevant config parameters.
+  // file_count = mds_bal_spli_size * mds_bal_fragment_fast_factor + 100
+  char buf[256];
+  int r = test_mount.conf_get("mds_bal_split_size", buf, sizeof(buf));
+  ASSERT_TRUE(r >= 0);
+  long int file_count = strtol(buf, nullptr, 10);
+  r = test_mount.conf_get("mds_bal_fragment_fast_factor ", buf, sizeof(buf));
+  ASSERT_TRUE(r >= 0);
+  double factor = strtod(buf, nullptr);
+  file_count *= factor;
+  file_count += 100;
+  printf("Seeding %ld files...\n", file_count);
+
+  // Create simple directory tree with a couple of snapshots
+  // to test against.
+
+  string name_prefix_start = "aaaa";
+  string name_prefix_bulk = "file";
+  string name_prefix_end = "zzzz";
+
+  test_mount.prepareHugeSnapDiff(name_prefix_start,
+                                 name_prefix_bulk,
+                                 name_prefix_end,
+                                 file_count,
+                                 true);
+  uint64_t snapid1;
+  uint64_t snapid2;
+
+  // learn snapshot ids and do basic verification
+  ASSERT_EQ(0, test_mount.get_snapid("snap1", &snapid1));
+  ASSERT_EQ(0, test_mount.get_snapid("snap2", &snapid2));
+  ASSERT_GT(snapid1, 0);
+  ASSERT_GT(snapid2, 0);
+  ASSERT_GT(snapid2, snapid1);
+  std::cout << snapid1 << " vs. " << snapid2 << std::endl;
+
+  //
+  // Make sure snap1 vs. snap2 delta for the root is as expected
+  //
+  {
+    vector<pair<string, uint64_t>> expected;
+    expected.emplace_back(name_prefix_start + "B", snapid1);
+    expected.emplace_back(name_prefix_start + "C", snapid2);
+    expected.emplace_back(name_prefix_start + "D", snapid2);
+    for (size_t i = 0; i < (size_t)file_count; i++) {
+      expected.emplace_back(name_prefix_bulk + stringify(i), snapid2);
+    }
+    expected.emplace_back(name_prefix_end + "B", snapid1);
+    expected.emplace_back(name_prefix_end + "C", snapid2);
+    expected.emplace_back(name_prefix_end + "D", snapid2);
+    test_mount.verify_snap_diff(expected, "", "snap1", "snap2");
+  }
+
+  std::cout << "------------- closing -------------" << std::endl;
+  ASSERT_EQ(0, test_mount.purge_dir(""));
+  ASSERT_EQ(0, test_mount.rmsnap("snap1"));
+  ASSERT_EQ(0, test_mount.rmsnap("snap2"));
+}
index e39e60f1488db04daef67ac56c9e797238efac1d..d9cb1c5b8b727010ee450db49b04075763e5d624 100644 (file)
@@ -58,27 +58,33 @@ TEST(LibRadosMiscConnectFailure, ConnectFailure) {
   ASSERT_EQ(0, rados_conf_read_file(cluster, NULL));
   ASSERT_EQ(0, rados_conf_parse_env(cluster, NULL));
 
-  ASSERT_EQ(0, rados_conf_set(cluster, "client_mount_timeout", "1s"));
-  ASSERT_EQ(0, rados_conf_set(cluster, "debug_monc", "20"));
-  ASSERT_EQ(0, rados_conf_set(cluster, "debug_ms", "1"));
-  ASSERT_EQ(0, rados_conf_set(cluster, "log_to_stderr", "true"));
-
   ASSERT_EQ(-ENOTCONN, rados_monitor_log(cluster, "error",
                                          test_rados_log_cb, NULL));
 
-  // try this a few times; sometimes we don't schedule fast enough for the
-  // cond to time out
-  int r;
-  for (unsigned i=0; i<16; ++i) {
-    cout << i << std::endl;
-    r = rados_connect(cluster);
-    if (r < 0)
-      break;  // yay, we timed out
-    // try again
-    rados_shutdown(cluster);
-    ASSERT_EQ(0, rados_create(&cluster, NULL));
-  }
-  ASSERT_NE(0, r);
+  ASSERT_EQ(0, rados_connect(cluster));
+  rados_shutdown(cluster);
+
+  ASSERT_EQ(0, rados_create(&cluster, NULL));
+  ASSERT_EQ(-ENOENT, rados_connect(cluster));
+  rados_shutdown(cluster);
+}
+
+TEST(LibRadosMiscConnectFailure, ConnectTimeout) {
+  rados_t cluster;
+
+  ASSERT_EQ(0, rados_create(&cluster, NULL));
+  ASSERT_EQ(0, rados_conf_set(cluster, "mon_host", "255.0.1.2:3456"));
+  ASSERT_EQ(0, rados_conf_set(cluster, "key",
+                              "AQAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA=="));
+  ASSERT_EQ(0, rados_conf_set(cluster, "client_mount_timeout", "2s"));
+
+  utime_t start = ceph_clock_now();
+  ASSERT_EQ(-ETIMEDOUT, rados_connect(cluster));
+  utime_t end = ceph_clock_now();
+
+  utime_t dur = end - start;
+  ASSERT_GE(dur, utime_t(2, 0));
+  ASSERT_LT(dur, utime_t(4, 0));
 
   rados_shutdown(cluster);
 }
index b8be4708e2d01c9b1c8f9dfb46770c4a11c6ade4..94c454bf3c16e4ba6429dfc8cdb256bbda8e35f4 100644 (file)
@@ -1149,6 +1149,8 @@ int
 krbd_resize(struct rbd_ctx *ctx, uint64_t size)
 {
        int ret;
+       int count = 0;
+       uint64_t effective_size;
 
        ceph_assert(size % truncbdy == 0);
 
@@ -1170,7 +1172,29 @@ krbd_resize(struct rbd_ctx *ctx, uint64_t size)
        if (ret < 0)
                return ret;
 
-       return __librbd_resize(ctx, size);
+       ret = __librbd_resize(ctx, size);
+       if (ret < 0)
+               return ret;
+
+       for (;;) {
+               ret = krbd_get_size(ctx, &effective_size);
+               if (ret < 0)
+                       return ret;
+
+               if (effective_size == size)
+                       break;
+
+               if (count++ >= 15) {
+                       prt("BLKGETSIZE64 size error: expected 0x%llx, actual 0x%llx\n",
+                           (unsigned long long)size,
+                           (unsigned long long)effective_size);
+                       return -EINVAL;
+               }
+
+               usleep(count * 250 * 1000);
+       }
+
+       return 0;
 }
 
 int
index 22692e15f28040fa0ca8d2caf770b8e488997d54..8bfdcdeb1d8ab46a98551b8e0cd6e68f1fd38e38 100644 (file)
@@ -233,6 +233,165 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, Success) {
   ASSERT_EQ(0, ctx.wait());
 }
 
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessPrimary) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {"uuid"}, "", CEPH_NOSNAP};
+  ns.complete = true;
+  snap_create(mock_image_ctx, ns, "mirror_snap");
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessPrimaryDemoted) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED, {"uuid"}, "", CEPH_NOSNAP};
+  ns.complete = true;
+  snap_create(mock_image_ctx, ns, "mirror_snap");
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessNonPrimaryDemoted) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY_DEMOTED, {"uuid"},
+    "mirror uuid", 123};
+  ns.complete = true;
+  snap_create(mock_image_ctx, ns, "mirror_snap");
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessPrimaryBelowMaxSnapshots) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  ictx->config.set_val("rbd_mirroring_max_mirroring_snapshots", "3");
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  for (int i = 0; i < 2; i++) {
+    cls::rbd::MirrorSnapshotNamespace ns{
+      cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {"uuid"}, "", CEPH_NOSNAP};
+    ns.complete = true;
+    snap_create(mock_image_ctx, ns, "mirror_snap");
+  }
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessPrimaryBelowMaxSnapshotsReset) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  ictx->config.set_val("rbd_mirroring_max_mirroring_snapshots", "3");
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  for (int i = 0; i < 6; i++) {
+    cls::rbd::MirrorSnapshotNamespace ns{
+      (i == 3 ? cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED :
+                cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY),
+      {"uuid"}, "", CEPH_NOSNAP};
+    ns.complete = true;
+    snap_create(mock_image_ctx, ns, "mirror_snap");
+  }
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
 TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, CanNotError) {
   REQUIRE_FORMAT_V2();
 
@@ -303,12 +462,152 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, CreateSnapshotError) {
   ASSERT_EQ(-EINVAL, ctx.wait());
 }
 
-TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkIncomplete) {
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPrimaryNoPeer) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {}, "", CEPH_NOSNAP};
+  ns.complete = true;
+  snap_create(mock_image_ctx, ns, "mirror_snap");
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+  MockUnlinkPeerRequest mock_unlink_peer_request;
+  auto it = mock_image_ctx.snap_info.rbegin();
+  auto snap_id = it->first;
+  expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
+                     false, true, true, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPrimaryDemotedNoPeer) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED, {}, "", CEPH_NOSNAP};
+  ns.complete = true;
+  snap_create(mock_image_ctx, ns, "mirror_snap");
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+  MockUnlinkPeerRequest mock_unlink_peer_request;
+  auto it = mock_image_ctx.snap_info.rbegin();
+  auto snap_id = it->first;
+  expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
+                     false, true, true, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkNonPrimaryDemotedNoPeer) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY_DEMOTED, {},
+    "mirror uuid", 123};
+  ns.complete = true;
+  snap_create(mock_image_ctx, ns, "mirror_snap");
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+  MockUnlinkPeerRequest mock_unlink_peer_request;
+  auto it = mock_image_ctx.snap_info.rbegin();
+  auto snap_id = it->first;
+  expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
+                     false, true, true, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkOrphanNoPeer) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "", CEPH_NOSNAP};
+  ns.complete = true;
+  snap_create(mock_image_ctx, ns, "mirror_snap");
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+  MockUnlinkPeerRequest mock_unlink_peer_request;
+  auto it = mock_image_ctx.snap_info.rbegin();
+  auto snap_id = it->first;
+  expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
+                     false, true, true, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPrimaryIncomplete) {
   REQUIRE_FORMAT_V2();
 
   librbd::ImageCtx *ictx;
   ASSERT_EQ(0, open_image(m_image_name, &ictx));
-  ictx->config.set_val("rbd_mirroring_max_mirroring_snapshots", "3");
 
   MockTestImageCtx mock_image_ctx(*ictx);
   cls::rbd::MirrorSnapshotNamespace ns{
@@ -331,6 +630,7 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkIncomplete) {
   auto snap_id = it->first;
   expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
                      true, false, true, 0);
+
   C_SaferCond ctx;
   auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
                                           0U, 0U, nullptr, &ctx);
@@ -338,7 +638,7 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkIncomplete) {
   ASSERT_EQ(0, ctx.wait());
 }
 
-TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPeer) {
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPrimaryMaxSnapshots) {
   REQUIRE_FORMAT_V2();
 
   librbd::ImageCtx *ictx;
@@ -368,6 +668,7 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPeer) {
   auto snap_id = it->first;
   expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
                      true, true, true, 0);
+
   C_SaferCond ctx;
   auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
                                           0U, 0U, nullptr, &ctx);
@@ -375,7 +676,7 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPeer) {
   ASSERT_EQ(0, ctx.wait());
 }
 
-TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkNoPeer) {
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPrimaryMaxSnapshotsReset) {
   REQUIRE_FORMAT_V2();
 
   librbd::ImageCtx *ictx;
@@ -383,10 +684,14 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkNoPeer) {
   ictx->config.set_val("rbd_mirroring_max_mirroring_snapshots", "3");
 
   MockTestImageCtx mock_image_ctx(*ictx);
-  cls::rbd::MirrorSnapshotNamespace ns{
-    cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {}, "", CEPH_NOSNAP};
-  ns.complete = true;
-  snap_create(mock_image_ctx, ns, "mirror_snap");
+  for (int i = 0; i < 7; i++) {
+    cls::rbd::MirrorSnapshotNamespace ns{
+      (i == 3 ? cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED :
+                cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY),
+      {"uuid"}, "", CEPH_NOSNAP};
+    ns.complete = true;
+    snap_create(mock_image_ctx, ns, "mirror_snap");
+  }
 
   InSequence seq;
 
@@ -402,7 +707,7 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkNoPeer) {
   auto it = mock_image_ctx.snap_info.rbegin();
   auto snap_id = it->first;
   expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
-                     false, true, true, 0);
+                     true, true, true, 0);
 
   C_SaferCond ctx;
   auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
@@ -446,6 +751,49 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkMultiplePeers) {
                      true, true, true, 0);
   expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid2",
                      true, true, true, 0);
+
+  C_SaferCond ctx;
+  auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
+                                          0U, 0U, nullptr, &ctx);
+  req->send();
+  ASSERT_EQ(0, ctx.wait());
+}
+
+TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkMultipleSnapshots) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+
+  MockTestImageCtx mock_image_ctx(*ictx);
+  cls::rbd::MirrorSnapshotNamespace ns1{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {}, "", CEPH_NOSNAP};
+  ns1.complete = true;
+  snap_create(mock_image_ctx, ns1, "mirror_snap");
+  cls::rbd::MirrorSnapshotNamespace ns2{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED, {}, "", CEPH_NOSNAP};
+  ns2.complete = true;
+  snap_create(mock_image_ctx, ns2, "mirror_snap");
+
+  InSequence seq;
+
+  expect_clone_md_ctx(mock_image_ctx);
+  MockUtils mock_utils;
+  expect_can_create_primary_snapshot(mock_utils, false, false, true);
+  expect_get_mirror_peers(mock_image_ctx,
+                          {{"uuid", cls::rbd::MIRROR_PEER_DIRECTION_TX, "ceph",
+                            "mirror", "mirror uuid"}}, 0);
+  expect_create_snapshot(mock_image_ctx, 0);
+  expect_refresh_image(mock_image_ctx, 0);
+  MockUnlinkPeerRequest mock_unlink_peer_request;
+  auto it = mock_image_ctx.snap_info.begin();
+  auto snap_id = it->first;
+  expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
+                     false, true, true, 0);
+  snap_id = (++it)->first;
+  expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid",
+                     false, true, true, 0);
+
   C_SaferCond ctx;
   auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP,
                                           0U, 0U, nullptr, &ctx);
index 1189f76fb4696704140e0c336e3bd0ed3182d907..4469cb80ddec948758d7c3ca64fafc56276e6687 100644 (file)
@@ -512,9 +512,10 @@ TEST_F(TestMockOperationSnapshotRemoveRequest, MirrorSnapshot) {
   expect_snapshot_trash_add(mock_image_ctx, 0);
 
   uint64_t snap_id = ictx->snap_info.rbegin()->first;
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "mirror uuid", 123};
   expect_snapshot_get(mock_image_ctx,
-                      {snap_id, {cls::rbd::MirrorSnapshotNamespace{}},
-                       "mirror", 123, {}, 0}, 0);
+                      {snap_id, {ns}, "mirror", 456, {}, 0}, 0);
 
   expect_get_parent_spec(mock_image_ctx, 0);
   expect_object_map_snap_remove(mock_image_ctx, 0);
@@ -526,8 +527,55 @@ TEST_F(TestMockOperationSnapshotRemoveRequest, MirrorSnapshot) {
 
   C_SaferCond cond_ctx;
   MockSnapshotRemoveRequest *req = new MockSnapshotRemoveRequest(
-    mock_image_ctx, &cond_ctx, cls::rbd::MirrorSnapshotNamespace(),
-    "mirror", snap_id);
+    mock_image_ctx, &cond_ctx, ns, "mirror", snap_id);
+  {
+    std::shared_lock owner_locker{mock_image_ctx.owner_lock};
+    req->send();
+  }
+  ASSERT_EQ(0, cond_ctx.wait());
+}
+
+TEST_F(TestMockOperationSnapshotRemoveRequest, MirrorSnapshotOrphan) {
+  REQUIRE_FORMAT_V2();
+
+  librbd::ImageCtx *ictx;
+  ASSERT_EQ(0, open_image(m_image_name, &ictx));
+  ASSERT_EQ(0, snap_create(*ictx, "snap1"));
+  ASSERT_EQ(0, ictx->state->refresh_if_required());
+
+  MockImageCtx mock_image_ctx(*ictx);
+
+  MockExclusiveLock mock_exclusive_lock;
+  if (ictx->test_features(RBD_FEATURE_EXCLUSIVE_LOCK)) {
+    mock_image_ctx.exclusive_lock = &mock_exclusive_lock;
+  }
+
+  MockObjectMap mock_object_map;
+  if (ictx->test_features(RBD_FEATURE_OBJECT_MAP)) {
+    mock_image_ctx.object_map = &mock_object_map;
+  }
+
+  expect_op_work_queue(mock_image_ctx);
+
+  ::testing::InSequence seq;
+  expect_snapshot_trash_add(mock_image_ctx, 0);
+
+  uint64_t snap_id = ictx->snap_info.rbegin()->first;
+  cls::rbd::MirrorSnapshotNamespace ns{
+    cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, "", CEPH_NOSNAP};
+  expect_snapshot_get(mock_image_ctx,
+                      {snap_id, {ns}, "mirror", 456, {}, 0}, 0);
+
+  expect_get_parent_spec(mock_image_ctx, 0);
+  expect_object_map_snap_remove(mock_image_ctx, 0);
+  MockRemoveImageStateRequest mock_remove_image_state_request;
+  expect_release_snap_id(mock_image_ctx);
+  expect_snap_remove(mock_image_ctx, 0);
+  expect_rm_snap(mock_image_ctx);
+
+  C_SaferCond cond_ctx;
+  MockSnapshotRemoveRequest *req = new MockSnapshotRemoveRequest(
+    mock_image_ctx, &cond_ctx, ns, "mirror", snap_id);
   {
     std::shared_lock owner_locker{mock_image_ctx.owner_lock};
     req->send();
index 4828032dbd6b51d5fdba113588a960f9945d2b93..a05f16027826c9de0c16a6618b16feb6322c8333 100644 (file)
@@ -58,7 +58,7 @@ TEST(MDSAuthCaps, ParseGood) {
     string str = parse_good[i];
     MDSAuthCaps cap;
     std::cout << "Testing good input: '" << str << "'" << std::endl;
-    ASSERT_TRUE(cap.parse(g_ceph_context, str, &cout));
+    ASSERT_TRUE(cap.parse(str, &cout));
   }
 }
 
@@ -97,7 +97,7 @@ TEST(MDSAuthCaps, ParseBad) {
     string str = parse_bad[i];
     MDSAuthCaps cap;
     std::cout << "Testing bad input: '" << str << "'" << std::endl;
-    ASSERT_FALSE(cap.parse(g_ceph_context, str, &cout));
+    ASSERT_FALSE(cap.parse(str, &cout));
   }
 }
 
@@ -105,26 +105,26 @@ TEST(MDSAuthCaps, AllowAll) {
   MDSAuthCaps cap;
   ASSERT_FALSE(cap.allow_all());
 
-  ASSERT_TRUE(cap.parse(g_ceph_context, "allow r", NULL));
+  ASSERT_TRUE(cap.parse("allow r", NULL));
   ASSERT_FALSE(cap.allow_all());
   cap = MDSAuthCaps();
 
-  ASSERT_TRUE(cap.parse(g_ceph_context, "allow rw", NULL));
+  ASSERT_TRUE(cap.parse("allow rw", NULL));
   ASSERT_FALSE(cap.allow_all());
   cap = MDSAuthCaps();
 
-  ASSERT_TRUE(cap.parse(g_ceph_context, "allow", NULL));
+  ASSERT_TRUE(cap.parse("allow", NULL));
   ASSERT_FALSE(cap.allow_all());
   cap = MDSAuthCaps();
 
-  ASSERT_TRUE(cap.parse(g_ceph_context, "allow *", NULL));
+  ASSERT_TRUE(cap.parse("allow *", NULL));
   ASSERT_TRUE(cap.allow_all());
   ASSERT_TRUE(cap.is_capable("foo/bar", 0, 0, 0777, 0, 0, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
 }
 
 TEST(MDSAuthCaps, AllowUid) {
-  MDSAuthCaps cap(g_ceph_context);
-  ASSERT_TRUE(cap.parse(g_ceph_context, "allow * uid=10", NULL));
+  MDSAuthCaps cap;
+  ASSERT_TRUE(cap.parse("allow * uid=10", NULL));
   ASSERT_FALSE(cap.allow_all());
 
   // uid/gid must be valid
@@ -136,8 +136,8 @@ TEST(MDSAuthCaps, AllowUid) {
 }
 
 TEST(MDSAuthCaps, AllowUidGid) {
-  MDSAuthCaps cap(g_ceph_context);
-  ASSERT_TRUE(cap.parse(g_ceph_context, "allow * uid=10 gids=10,11,12; allow * uid=12 gids=12,10", NULL));
+  MDSAuthCaps cap;
+  ASSERT_TRUE(cap.parse("allow * uid=10 gids=10,11,12; allow * uid=12 gids=12,10", NULL));
   ASSERT_FALSE(cap.allow_all());
 
   // uid/gid must be valid
@@ -207,7 +207,7 @@ TEST(MDSAuthCaps, AllowUidGid) {
 
 TEST(MDSAuthCaps, AllowPath) {
   MDSAuthCaps cap;
-  ASSERT_TRUE(cap.parse(g_ceph_context, "allow * path=/sandbox", NULL));
+  ASSERT_TRUE(cap.parse("allow * path=/sandbox", NULL));
   ASSERT_FALSE(cap.allow_all());
   ASSERT_TRUE(cap.is_capable("sandbox/foo", 0, 0, 0777, 0, 0, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
   ASSERT_TRUE(cap.is_capable("sandbox", 0, 0, 0777, 0, 0, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
@@ -217,7 +217,7 @@ TEST(MDSAuthCaps, AllowPath) {
 
 TEST(MDSAuthCaps, AllowPathChars) {
   MDSAuthCaps unquo_cap;
-  ASSERT_TRUE(unquo_cap.parse(g_ceph_context, "allow * path=/sandbox-._foo", NULL));
+  ASSERT_TRUE(unquo_cap.parse("allow * path=/sandbox-._foo", NULL));
   ASSERT_FALSE(unquo_cap.allow_all());
   ASSERT_TRUE(unquo_cap.is_capable("sandbox-._foo/foo", 0, 0, 0777, 0, 0, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
   ASSERT_FALSE(unquo_cap.is_capable("sandbox", 0, 0, 0777, 0, 0, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
@@ -228,7 +228,7 @@ TEST(MDSAuthCaps, AllowPathChars) {
 
 TEST(MDSAuthCaps, AllowPathCharsQuoted) {
   MDSAuthCaps quo_cap;
-  ASSERT_TRUE(quo_cap.parse(g_ceph_context, "allow * path=\"/sandbox-._foo\"", NULL));
+  ASSERT_TRUE(quo_cap.parse("allow * path=\"/sandbox-._foo\"", NULL));
   ASSERT_FALSE(quo_cap.allow_all());
   ASSERT_TRUE(quo_cap.is_capable("sandbox-._foo/foo", 0, 0, 0777, 0, 0, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
   ASSERT_FALSE(quo_cap.is_capable("sandbox", 0, 0, 0777, 0, 0, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
@@ -238,7 +238,7 @@ TEST(MDSAuthCaps, AllowPathCharsQuoted) {
 
 TEST(MDSAuthCaps, RootSquash) {
   MDSAuthCaps rs_cap;
-  ASSERT_TRUE(rs_cap.parse(g_ceph_context, "allow rw root_squash, allow rw path=/sandbox", NULL));
+  ASSERT_TRUE(rs_cap.parse("allow rw root_squash, allow rw path=/sandbox", NULL));
   ASSERT_TRUE(rs_cap.is_capable("foo", 0, 0, 0777, 0, 0, NULL, MAY_READ, 0, 0, addr));
   ASSERT_TRUE(rs_cap.is_capable("foo", 0, 0, 0777, 10, 10, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
   ASSERT_FALSE(rs_cap.is_capable("foo", 0, 0, 0777, 0, 0, NULL, MAY_READ | MAY_WRITE, 0, 0, addr));
@@ -292,7 +292,7 @@ TEST(MDSAuthCaps, OutputParsed) {
   for (size_t i = 0; i < num_tests; ++i) {
     MDSAuthCaps cap;
     std::cout << "Testing input '" << test_values[i].input << "'" << std::endl;
-    ASSERT_TRUE(cap.parse(g_ceph_context, test_values[i].input, &cout));
+    ASSERT_TRUE(cap.parse(test_values[i].input, &cout));
     ASSERT_EQ(test_values[i].output, stringify(cap));
   }
 }
@@ -304,7 +304,7 @@ TEST(MDSAuthCaps, network) {
   c.parse("192.167.2.3");
 
   MDSAuthCaps cap;
-  ASSERT_TRUE(cap.parse(g_ceph_context, "allow * network 192.168.0.0/16, allow * network 10.0.0.0/8", NULL));
+  ASSERT_TRUE(cap.parse("allow * network 192.168.0.0/16, allow * network 10.0.0.0/8", NULL));
 
   ASSERT_TRUE(cap.is_capable("foo", 0, 0, 0777, 0, 0, NULL, MAY_READ, 0, 0, a));
   ASSERT_TRUE(cap.is_capable("foo", 0, 0, 0777, 0, 0, NULL, MAY_READ, 0, 0, b));
index 20fff879bfdcdaf646f774bc4f6546f5a2cc8cb2..ffbfc1614fe737e0f5a3034664cfa07880538334 100644 (file)
@@ -57,7 +57,7 @@ class MessengerClient {
     bool ms_handle_reset(Connection *con) override { return true; }
     void ms_handle_remote_reset(Connection *con) override {}
     bool ms_handle_refused(Connection *con) override { return false; }
-    int ms_handle_authentication(Connection *con) override {
+    int ms_handle_fast_authentication(Connection *con) override {
       return 1;
     }
   };
index aec5923fcbfea36865355181580b97f6ecf09a2b..0c492ab174b7bfe2a0c707050090476a0d893fc5 100644 (file)
@@ -100,7 +100,7 @@ class ServerDispatcher : public Dispatcher {
     //cerr << __func__ << " reply message=" << m << std::endl;
     op_wq.queue(m);
   }
-  int ms_handle_authentication(Connection *con) override {
+  int ms_handle_fast_authentication(Connection *con) override {
     return 1;
   }
 };
index fd7b30fdc7f98b1e6145be630f7d603a602a4dba..f702cc288caedd5ab5e1c3750bca67d5b06c80f4 100644 (file)
@@ -220,7 +220,7 @@ class FakeDispatcher : public Dispatcher {
     cond.notify_all();
   }
 
-  int ms_handle_authentication(Connection *con) override {
+  int ms_handle_fast_authentication(Connection *con) override {
     return 1;
   }
 
@@ -1709,7 +1709,7 @@ class SyntheticDispatcher : public Dispatcher {
     }
   }
 
-  int ms_handle_authentication(Connection *con) override {
+  int ms_handle_fast_authentication(Connection *con) override {
     return 1;
   }
 
@@ -2322,7 +2322,7 @@ class MarkdownDispatcher : public Dispatcher {
   void ms_fast_dispatch(Message *m) override {
     ceph_abort();
   }
-  int ms_handle_authentication(Connection *con) override {
+  int ms_handle_fast_authentication(Connection *con) override {
     return 1;
   }
 };
index f1e3a04f4d259011086081b84a9bd12ffe207f67..b006500153c6e389a3d1c617cadfa2fd180f6008 100644 (file)
@@ -516,8 +516,7 @@ TEST_P(AllocTest, test_alloc_47883)
   PExtentVector extents;
   auto need = 0x3f980000;
   auto got = alloc->allocate(need, 0x10000, 0, (int64_t)0, &extents);
-  EXPECT_GT(got, 0);
-  EXPECT_EQ(got, 0x630000);
+  EXPECT_GE(got, 0x630000);
 }
 
 TEST_P(AllocTest, test_alloc_50656_best_fit)
index c59531985050db1a03559df69ffd63e81db0a59b..710b3798f7a6d25ec97abebc9e44ecfa15d6df04 100644 (file)
@@ -625,6 +625,8 @@ TEST(TestAllocatorLevel01, test_l2_contiguous_alignment)
     ASSERT_EQ(bins_overall[cbits(num_chunks / 2) - 1], 1u);
 
     {
+      // Original free space disposition (start chunk, count):
+      // <NC/2, NC/2>
       size_t to_release = 2 * _1m + 0x1000;
       // release 2M + 4K at the beginning
       interval_vector_t r;
@@ -637,6 +639,8 @@ TEST(TestAllocatorLevel01, test_l2_contiguous_alignment)
       ASSERT_EQ(bins_overall[cbits(num_chunks / 2) - 1], 1u);
     }
     {
+      // Original free space disposition (start chunk, count):
+      // <0, 513>, <NC / 2, NC / 2>
       // allocate 4K within the deallocated range
       uint64_t allocated4 = 0;
       interval_vector_t a4;
@@ -652,79 +656,91 @@ TEST(TestAllocatorLevel01, test_l2_contiguous_alignment)
       ASSERT_EQ(bins_overall[cbits(num_chunks / 2) - 1], 1u);
     }
     {
-      // allocate 1M - should go to the second 1M chunk
+      // Original free space disposition (start chunk, count):
+      // <1, 512>, <NC / 2, NC / 2>
+      // allocate 1M - should go to offset 4096
       uint64_t allocated4 = 0;
       interval_vector_t a4;
       al2.allocate_l2(_1m, _1m, &allocated4, &a4);
       ASSERT_EQ(a4.size(), 1u);
       ASSERT_EQ(allocated4, _1m);
-      ASSERT_EQ(a4[0].offset, _1m);
+      ASSERT_EQ(a4[0].offset, 4096);
       ASSERT_EQ(a4[0].length, _1m);
       bins_overall.clear();
       al2.collect_stats(bins_overall);
-      ASSERT_EQ(bins_overall.size(), 3u);
-      ASSERT_EQ(bins_overall[0], 1u);
-      ASSERT_EQ(bins_overall[cbits((_1m - 0x1000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall.size(), 2u);
+      ASSERT_EQ(bins_overall[cbits(_1m / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits(num_chunks / 2) - 1], 1u);
     }
     {
+      // Original free space disposition (start chunk, count):
+      // <257, 256>, <NC / 2, NC / 2>
       // and allocate yet another 8K within the deallocated range
       uint64_t allocated4 = 0;
       interval_vector_t a4;
       al2.allocate_l2(0x2000, 0x1000, &allocated4, &a4);
       ASSERT_EQ(a4.size(), 1u);
       ASSERT_EQ(allocated4, 0x2000u);
-      ASSERT_EQ(a4[0].offset, 0x1000u);
+      ASSERT_EQ(a4[0].offset, _1m + 0x1000u);
       ASSERT_EQ(a4[0].length, 0x2000u);
       bins_overall.clear();
       al2.collect_stats(bins_overall);
-      ASSERT_EQ(bins_overall[0], 1u);
-      ASSERT_EQ(bins_overall[cbits((_1m - 0x3000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall.size(), 2u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000) / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits(num_chunks / 2) - 1], 1u);
     }
     {
-      // release just allocated 1M
+      // Original free space disposition (start chunk, count):
+      // <259, 254>, <NC / 2, NC / 2>
+      // release 4K~1M
       interval_vector_t r;
-      r.emplace_back(_1m, _1m);
+      r.emplace_back(0x1000, _1m);
       al2.free_l2(r);
       bins_overall.clear();
       al2.collect_stats(bins_overall);
-      ASSERT_EQ(bins_overall.size(), 2u);
-      ASSERT_EQ(bins_overall[cbits((2 * _1m - 0x3000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall.size(), 3u);
+      //ASSERT_EQ(bins_overall[cbits((2 * _1m - 0x3000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits(_1m / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000) / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits(num_chunks / 2) - 1], 1u);
     }
     {
-      // allocate 3M - should go to the second 1M chunk and @capacity/2
+      // Original free space disposition (start chunk, count):
+      // <1, 257>, <259, 254>, <NC / 2, NC / 2>
+      // allocate 3M - should go to the first 1M chunk and @capacity/2
       uint64_t allocated4 = 0;
       interval_vector_t a4;
       al2.allocate_l2(3 * _1m, _1m, &allocated4, &a4);
       ASSERT_EQ(a4.size(), 2u);
       ASSERT_EQ(allocated4, 3 * _1m);
-      ASSERT_EQ(a4[0].offset, _1m);
+      ASSERT_EQ(a4[0].offset, 0x1000);
       ASSERT_EQ(a4[0].length, _1m);
       ASSERT_EQ(a4[1].offset, capacity / 2);
       ASSERT_EQ(a4[1].length, 2 * _1m);
       bins_overall.clear();
       al2.collect_stats(bins_overall);
-      ASSERT_EQ(bins_overall.size(), 3u);
-      ASSERT_EQ(bins_overall[0], 1u);
-      ASSERT_EQ(bins_overall[cbits((_1m - 0x3000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall.size(), 2u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000) / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits((num_chunks - 512) / 2) - 1], 1u);
     }
     {
-      // release allocated 1M in the second meg chunk except
+      // Original free space disposition (start chunk, count):
+      // <259, 254>, <NC / 2 - 512, NC / 2 - 512>
+      // release allocated 1M in the first meg chunk except
       // the first 4K chunk
       interval_vector_t r;
-      r.emplace_back(_1m + 0x1000, _1m);
+      r.emplace_back(0x1000, _1m);
       al2.free_l2(r);
       bins_overall.clear();
       al2.collect_stats(bins_overall);
       ASSERT_EQ(bins_overall.size(), 3u);
       ASSERT_EQ(bins_overall[cbits(_1m / 0x1000) - 1], 1u);
-      ASSERT_EQ(bins_overall[cbits((_1m - 0x3000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000) / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits((num_chunks - 512) / 2) - 1], 1u);
     }
     {
+      // Original free space disposition (start chunk, count):
+      // <1, 256>, <259, 254>, <NC / 2 - 512, NC / 2 - 512>
       // release 2M @(capacity / 2)
       interval_vector_t r;
       r.emplace_back(capacity / 2, 2 * _1m);
@@ -733,10 +749,12 @@ TEST(TestAllocatorLevel01, test_l2_contiguous_alignment)
       al2.collect_stats(bins_overall);
       ASSERT_EQ(bins_overall.size(), 3u);
       ASSERT_EQ(bins_overall[cbits(_1m / 0x1000) - 1], 1u);
-      ASSERT_EQ(bins_overall[cbits((_1m - 0x3000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000) / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits((num_chunks) / 2) - 1], 1u);
     }
     {
+      // Original free space disposition (start chunk, count):
+      // <1, 256>, <259, 254>, <NC / 2, NC / 2>
       // allocate 4x512K - should go to the second halves of
       // the first and second 1M chunks and @(capacity / 2)
       uint64_t allocated4 = 0;
@@ -744,51 +762,54 @@ TEST(TestAllocatorLevel01, test_l2_contiguous_alignment)
       al2.allocate_l2(2 * _1m, _1m / 2, &allocated4, &a4);
       ASSERT_EQ(a4.size(), 3u);
       ASSERT_EQ(allocated4, 2 * _1m);
-      ASSERT_EQ(a4[0].offset, _1m / 2);
+      ASSERT_EQ(a4[1].offset, 0x1000);
+      ASSERT_EQ(a4[1].length, _1m);
+      ASSERT_EQ(a4[0].offset, _1m + 0x3000);
       ASSERT_EQ(a4[0].length, _1m / 2);
-      ASSERT_EQ(a4[1].offset, _1m + _1m / 2);
-      ASSERT_EQ(a4[1].length, _1m / 2);
       ASSERT_EQ(a4[2].offset, capacity / 2);
-      ASSERT_EQ(a4[2].length, _1m);
+      ASSERT_EQ(a4[2].length, _1m / 2);
 
       bins_overall.clear();
       al2.collect_stats(bins_overall);
-      ASSERT_EQ(bins_overall.size(), 3u);
-      ASSERT_EQ(bins_overall[0], 1u);
-      // below we have 512K - 4K & 512K - 12K chunks which both fit into
-      // the same bin = 6
-      ASSERT_EQ(bins_overall[6], 2u);
+      ASSERT_EQ(bins_overall.size(), 2u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000 - 0x80000) / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits((num_chunks - 256) / 2) - 1], 1u);
 
     }
     {
-      // cleanup first 2M except except the last 4K chunk
+      // Original free space disposition (start chunk, count):
+      // <387, 126>, <NC / 2 + 128, NC / 2 - 128>
+      // cleanup first 1536K except the last 4K chunk
       interval_vector_t r;
-      r.emplace_back(0, 2 * _1m - 0x1000);
+      r.emplace_back(0, _1m + _1m / 2 - 0x1000);
       al2.free_l2(r);
       bins_overall.clear();
       al2.collect_stats(bins_overall);
 
       ASSERT_EQ(bins_overall.size(), 3u);
-      ASSERT_EQ(bins_overall[0], 1u);
-      ASSERT_EQ(bins_overall[cbits((_2m - 0x1000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits((_1m + _1m / 2 - 0x1000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000 - 0x80000) / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits((num_chunks - 256) / 2) - 1], 1u);
     }
     {
-      // release 2M @(capacity / 2)
+      // Original free space disposition (start chunk, count):
+      // <0, 383> <387, 126>, <NC / 2 + 128, NC / 2 - 128>
+      // release 512K @(capacity / 2)
       interval_vector_t r;
-      r.emplace_back(capacity / 2, 2 * _1m);
+      r.emplace_back(capacity / 2, _1m / 2);
       al2.free_l2(r);
       bins_overall.clear();
       al2.collect_stats(bins_overall);
 
       ASSERT_EQ(bins_overall.size(), 3u);
-      ASSERT_EQ(bins_overall[0], 1u);
-      ASSERT_EQ(bins_overall[cbits((_2m - 0x1000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits((_1m + _1m / 2 - 0x1000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000 - 0x80000) / 0x1000) - 1], 1u);
       ASSERT_EQ(bins_overall[cbits(num_chunks / 2) - 1], 1u);
     }
     {
-      // allocate 132M using 4M granularity should go to (capacity / 2)
+      // Original free space disposition (start chunk, count):
+      // <0, 383> <387, 126>, <NC / 2, NC / 2>
+      // allocate 132M (=33792*4096) = using 4M granularity should go to (capacity / 2)
       uint64_t allocated4 = 0;
       interval_vector_t a4;
       al2.allocate_l2(132 * _1m, 4 * _1m , &allocated4, &a4);
@@ -799,24 +820,40 @@ TEST(TestAllocatorLevel01, test_l2_contiguous_alignment)
       bins_overall.clear();
       al2.collect_stats(bins_overall);
       ASSERT_EQ(bins_overall.size(), 3u);
+      ASSERT_EQ(bins_overall[cbits((_1m + _1m / 2 - 0x1000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits((_1m - 0x2000 - 0x80000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits(num_chunks / 2 - 33792)  - 1], 1u);
     }
     {
-      // cleanup left 4K chunk in the first 2M
+      // Original free space disposition (start chunk, count):
+      // <0, 383> <387, 126>, <NC / 2 + 33792, NC / 2 - 33792>
+      // cleanup remaining 4*4K chunks in the first 2M
       interval_vector_t r;
-      r.emplace_back(2 * _1m - 0x1000, 0x1000);
+      r.emplace_back(383 * 4096, 4 * 0x1000);
       al2.free_l2(r);
       bins_overall.clear();
       al2.collect_stats(bins_overall);
 
       ASSERT_EQ(bins_overall.size(), 2u);
+      ASSERT_EQ(bins_overall[cbits((2 * _1m + 0x1000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits(num_chunks / 2 - 33792)  - 1], 1u);
     }
     {
+      // Original free space disposition (start chunk, count):
+      // <0, 513>, <NC / 2 + 33792, NC / 2 - 33792>
       // release 132M @(capacity / 2)
       interval_vector_t r;
       r.emplace_back(capacity / 2, 132 * _1m);
       al2.free_l2(r);
+      bins_overall.clear();
+      al2.collect_stats(bins_overall);
+      ASSERT_EQ(bins_overall.size(), 2u);
+      ASSERT_EQ(bins_overall[cbits((2 * _1m + 0x1000) / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits(num_chunks / 2)  - 1], 1u);
     }
     {
+      // Original free space disposition (start chunk, count):
+      // <0, 513>, <NC / 2, NC / 2>
       // allocate 132M using 2M granularity should go to the first chunk and to
       // (capacity / 2)
       uint64_t allocated4 = 0;
@@ -827,14 +864,31 @@ TEST(TestAllocatorLevel01, test_l2_contiguous_alignment)
       ASSERT_EQ(a4[0].length, 2 * _1m);
       ASSERT_EQ(a4[1].offset, capacity / 2);
       ASSERT_EQ(a4[1].length, 130 * _1m);
+
+      bins_overall.clear();
+      al2.collect_stats(bins_overall);
+
+      ASSERT_EQ(bins_overall.size(), 2u);
+      ASSERT_EQ(bins_overall[cbits(0)], 1u);
+      ASSERT_EQ(bins_overall[cbits(num_chunks / 2 - 33792)  - 1], 1u);
     }
     {
+      // Original free space disposition (start chunk, count):
+      //  <512, 1>, <NC / 2 + 33792, NC / 2 - 33792>
       // release 130M @(capacity / 2)
       interval_vector_t r;
       r.emplace_back(capacity / 2, 132 * _1m);
       al2.free_l2(r);
+      bins_overall.clear();
+      al2.collect_stats(bins_overall);
+
+      ASSERT_EQ(bins_overall.size(), 2u);
+      ASSERT_EQ(bins_overall[cbits(0)], 1u);
+      ASSERT_EQ(bins_overall[cbits(num_chunks / 2)  - 1], 1u);
     }
     {
+      // Original free space disposition (start chunk, count):
+      //  <512,1>, <NC / 2, NC / 2>
       // release 4K~16K
       // release 28K~32K
       // release 68K~24K
@@ -843,21 +897,46 @@ TEST(TestAllocatorLevel01, test_l2_contiguous_alignment)
       r.emplace_back(0x7000, 0x8000);
       r.emplace_back(0x11000, 0x6000);
       al2.free_l2(r);
+
+      bins_overall.clear();
+      al2.collect_stats(bins_overall);
+
+      ASSERT_EQ(bins_overall.size(), 4u);
+      ASSERT_EQ(bins_overall[cbits(0)], 1u);
+      ASSERT_EQ(bins_overall[cbits(0x4000 / 0x1000) - 1], 2u); // accounts both 0x4000 & 0x6000
+      ASSERT_EQ(bins_overall[cbits(0x8000 / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits(num_chunks / 2)  - 1], 1u);
     }
     {
-      // allocate 32K using 16K granularity - should bypass the first
-      // unaligned extent, use the second free extent partially given
-      // the 16K alignment and then fallback to capacity / 2
+      // Original free space disposition (start chunk, count):
+      //  <1, 4>, <7, 8>, <17, 6> <512,1>, <NC / 2, NC / 2>
+      // allocate 80K using 16K granularity
       uint64_t allocated4 = 0;
       interval_vector_t a4;
-      al2.allocate_l2(0x8000, 0x4000, &allocated4, &a4);
-      ASSERT_EQ(a4.size(), 2u);
-      ASSERT_EQ(a4[0].offset, 0x8000u);
-      ASSERT_EQ(a4[0].length, 0x4000u);
-      ASSERT_EQ(a4[1].offset, capacity / 2);
+      al2.allocate_l2(0x14000, 0x4000, &allocated4, &a4);
+
+      ASSERT_EQ(a4.size(), 4);
+      ASSERT_EQ(a4[1].offset, 0x1000u);
       ASSERT_EQ(a4[1].length, 0x4000u);
-    }
+      ASSERT_EQ(a4[0].offset, 0x7000u);
+      ASSERT_EQ(a4[0].length, 0x8000u);
+      ASSERT_EQ(a4[2].offset, 0x11000u);
+      ASSERT_EQ(a4[2].length, 0x4000u);
+      ASSERT_EQ(a4[3].offset, capacity / 2);
+      ASSERT_EQ(a4[3].length, 0x4000u);
+
+      bins_overall.clear();
+      al2.collect_stats(bins_overall);
 
+      ASSERT_EQ(bins_overall.size(), 3u);
+      ASSERT_EQ(bins_overall[cbits(0)], 1u);
+      ASSERT_EQ(bins_overall[cbits(0x2000 / 0x1000) - 1], 1u);
+      ASSERT_EQ(bins_overall[cbits(num_chunks / 2 - 1)  - 1], 1u);
+    }
+    {
+      // Original free space disposition (start chunk, count):
+      //  <21, 2> <512,1>, <NC / 2 + 1, NC / 2 - 1>
+    }
   }
   std::cout << "Done L2 cont aligned" << std::endl;
 }
@@ -913,7 +992,7 @@ TEST(TestAllocatorLevel01, test_4G_alloc_bug2)
     al2.allocate_l2(0x3e000000, _1m, &allocated4, &a4);
     ASSERT_EQ(a4.size(), 2u);
     ASSERT_EQ(allocated4, 0x3e000000u);
-    ASSERT_EQ(a4[0].offset, 0x5fed00000u);
+    ASSERT_EQ(a4[0].offset, 0x5fec30000u);
     ASSERT_EQ(a4[0].length, 0x1300000u);
     ASSERT_EQ(a4[1].offset, 0x628000000u);
     ASSERT_EQ(a4[1].length, 0x3cd00000u);
index 482d302830416b84a0887f29b39b71d21caa26a7..9edfebd6b9916d41040487bb5d620dcdec00e75b 100644 (file)
@@ -9524,9 +9524,9 @@ TEST_P(StoreTestSpecificAUSize, BluestoreRepairSharedBlobTest) {
     string key;
     _key_encode_u64(1, &key);
     bluestore_shared_blob_t sb(1);
-    sb.ref_map.get(0x2000, block_size);
-    sb.ref_map.get(0x4000, block_size);
-    sb.ref_map.get(0x4000, block_size);
+    sb.ref_map.get(0x822000, block_size);
+    sb.ref_map.get(0x824000, block_size);
+    sb.ref_map.get(0x824000, block_size);
     bufferlist bl;
     encode(sb, bl);
     bstore->inject_broken_shared_blob_key(key, bl);
index 9374ebd40da3933896a75620c452ed51ec430610..c3c8a153158fdbfc333412506ed368e2590ba504 100644 (file)
@@ -2349,7 +2349,9 @@ TEST_F(OSDMapTest, ReadBalanceScore1) {
         float fratio = 1. / (float)replica_count;
         for (int iter = 0 ; iter < 100 ; iter++) {  // run the test 100 times
           // Create random shuffle of OSDs
-          std::random_shuffle (osds.begin(), osds.end());
+          std::random_device seed;
+          std::default_random_engine generator(seed());
+          std::shuffle(osds.begin(), osds.end(), generator);
           for (uint i = 0 ; i < num_osds ; i++) {
             if ((float(i + 1) / float(num_osds)) < fratio) {
               ASSERT_TRUE(osds[i] < num_osds);
index 0991730706d63846b5c52e761c64b5362567ce70..d16807de97d8e4bbd9d9b6fed1fffdf31907c029 100644 (file)
@@ -1,5 +1,7 @@
 # vim: expandtab smarttab shiftwidth=4 softtabstop=4
 from assertions import assert_raises, assert_equal, assert_not_equal, assert_greater
+import collections
+collections.Callable = collections.abc.Callable
 import cephfs as libcephfs
 import fcntl
 import os
@@ -21,21 +23,37 @@ def teardown_module():
     global cephfs
     cephfs.shutdown()
 
-@pytest.fixture
-def testdir():
-    d = cephfs.opendir(b"/")
+def purge_dir(path, is_snap = False):
+    print(b"Purge " + path)
+    d = cephfs.opendir(path)
+    if (not path.endswith(b"/")):
+        path = path + b"/"
     dent = cephfs.readdir(d)
     while dent:
         if (dent.d_name not in [b".", b".."]):
+            print(path + dent.d_name)
             if dent.is_dir():
-                cephfs.rmdir(b"/" + dent.d_name)
+                if (not is_snap):
+                    try:
+                        snappath = path + dent.d_name + b"/.snap"
+                        cephfs.stat(snappath)
+                        purge_dir(snappath, True)
+                    except:
+                        pass
+                    purge_dir(path + dent.d_name, False)
+                    cephfs.rmdir(path + dent.d_name)
+                else:
+                    print("rmsnap on {} snap {}".format(path, dent.d_name))
+                    cephfs.rmsnap(path, dent.d_name);
             else:
-                cephfs.unlink(b"/" + dent.d_name)
-
+                cephfs.unlink(path + dent.d_name)
         dent = cephfs.readdir(d)
-
     cephfs.closedir(d)
 
+@pytest.fixture
+def testdir():
+    purge_dir(b"/")
+
     cephfs.chdir(b"/")
     _, ret_buf = cephfs.listxattr("/")
     print(f'ret_buf={ret_buf}')
@@ -854,3 +872,38 @@ def test_set_mount_timeout_lt0(testdir):
     cephfs.unmount()
     assert_raises(libcephfs.InvalidValue, cephfs.set_mount_timeout, -5)
     cephfs.mount()
+
+def test_snapdiff(testdir):
+    cephfs.mkdir("/snapdiff_test", 0o755)
+    fd = cephfs.open('/snapdiff_test/file-1', 'w', 0o755)
+    cephfs.write(fd, b"1111", 0)
+    cephfs.close(fd)
+    fd = cephfs.open('/snapdiff_test/file-2', 'w', 0o755)
+    cephfs.write(fd, b"2222", 0)
+    cephfs.close(fd)
+    cephfs.mksnap("/snapdiff_test", "snap1", 0o755)
+    fd = cephfs.open('/snapdiff_test/file-1', 'w', 0o755)
+    cephfs.write(fd, b"1222", 0)
+    cephfs.close(fd)
+    cephfs.unlink('/snapdiff_test/file-2')
+    cephfs.mksnap("/snapdiff_test", "snap2", 0o755)
+    snap1id = cephfs.snap_info(b"/snapdiff_test/.snap/snap1")['id']
+    snap2id = cephfs.snap_info(b"/snapdiff_test/.snap/snap2")['id']
+    diff = cephfs.opensnapdiff(b"/snapdiff_test", b"/", b"snap2", b"snap1")
+    cnt = 0
+    e = diff.readdir()
+    while e is not None:
+        if (e.d_name == b"file-1"):
+            cnt = cnt + 1
+            assert_equal(snap2id, e.d_snapid)
+        elif (e.d_name == b"file-2"):
+            cnt = cnt + 1
+            assert_equal(snap1id, e.d_snapid)
+        elif (e.d_name != b"." and e.d_name != b".."):
+            cnt = cnt + 1
+        e = diff.readdir()
+    assert_equal(cnt, 2)
+    diff.close()
+
+    # remove directory
+    purge_dir(b"/snapdiff_test");
index 8a66cecaed9b90d39dbb69f0965a004c4ce1fc50..d8d7ed2da5615c174682682adbfe4a5dd4a473fd 100644 (file)
@@ -636,6 +636,59 @@ TEST_F(TestMockImageReplayerBootstrapRequest, PrepareRemoteImageNotPrimaryLocalL
   ASSERT_EQ(0, ctx.wait());
 }
 
+TEST_F(TestMockImageReplayerBootstrapRequest, PrepareRemoteImageDNELocalLinked) {
+  InSequence seq;
+
+  // prepare local image
+  MockPrepareLocalImageRequest mock_prepare_local_image_request;
+  MockStateBuilder mock_state_builder;
+  expect_send(mock_prepare_local_image_request, mock_state_builder,
+              m_local_image_ctx->id, m_local_image_ctx->name, 0);
+
+  // prepare remote image
+  MockPrepareRemoteImageRequest mock_prepare_remote_image_request;
+  expect_send(mock_prepare_remote_image_request, mock_state_builder,
+              "remote mirror uuid", m_remote_image_ctx->id, -ENOENT);
+  expect_is_local_primary(mock_state_builder, false);
+  expect_is_linked(mock_state_builder, true);
+
+  C_SaferCond ctx;
+  MockThreads mock_threads(m_threads);
+  MockInstanceWatcher mock_instance_watcher;
+  MockBootstrapRequest *request = create_request(
+    &mock_threads, &mock_instance_watcher, "global image id",
+    "local mirror uuid", &ctx);
+  request->send();
+  ASSERT_EQ(-ENOLINK, ctx.wait());
+}
+
+TEST_F(TestMockImageReplayerBootstrapRequest, PrepareRemoteImageDNELocalLinkedCanceled) {
+  InSequence seq;
+
+  // prepare local image
+  MockPrepareLocalImageRequest mock_prepare_local_image_request;
+  MockStateBuilder mock_state_builder;
+  expect_send(mock_prepare_local_image_request, mock_state_builder,
+              m_local_image_ctx->id, m_local_image_ctx->name, 0);
+
+  // prepare remote image
+  MockPrepareRemoteImageRequest mock_prepare_remote_image_request;
+  expect_send(mock_prepare_remote_image_request, mock_state_builder,
+              "remote mirror uuid", m_remote_image_ctx->id, -ENOENT);
+  expect_is_local_primary(mock_state_builder, false);
+  expect_is_linked(mock_state_builder, true);
+
+  C_SaferCond ctx;
+  MockThreads mock_threads(m_threads);
+  MockInstanceWatcher mock_instance_watcher;
+  MockBootstrapRequest *request = create_request(
+    &mock_threads, &mock_instance_watcher, "global image id",
+    "local mirror uuid", &ctx);
+  request->cancel();
+  request->send();
+  ASSERT_EQ(-ENOLINK, ctx.wait());
+}
+
 TEST_F(TestMockImageReplayerBootstrapRequest, OpenLocalImageError) {
   InSequence seq;
 
index 177b71a158484989bbfec725180fa086f3613513..32a4f82b53b444e47fa62739cc0af557e3ac1e70 100644 (file)
@@ -620,6 +620,45 @@ TEST_F(TestMockImageReplayer, BootstrapCancel) {
   ASSERT_EQ(-ECANCELED, start_ctx.wait());
 }
 
+TEST_F(TestMockImageReplayer, BootstrapRemoteDeletedCancel) {
+  create_local_image();
+  librbd::MockTestImageCtx mock_local_image_ctx(*m_local_image_ctx);
+
+  MockThreads mock_threads(m_threads);
+  expect_work_queue_repeatedly(mock_threads);
+  expect_add_event_after_repeatedly(mock_threads);
+
+  MockImageDeleter mock_image_deleter;
+
+  expect_set_mirror_image_status_repeatedly();
+
+  InSequence seq;
+
+  MockBootstrapRequest mock_bootstrap_request;
+  MockStateBuilder mock_state_builder;
+  EXPECT_CALL(mock_bootstrap_request, send())
+    .WillOnce(Invoke([this, &mock_bootstrap_request, &mock_state_builder,
+                     &mock_local_image_ctx]() {
+       mock_state_builder.local_image_id = mock_local_image_ctx.id;
+       mock_state_builder.remote_image_id = "";
+       *mock_bootstrap_request.state_builder = &mock_state_builder;
+        m_image_replayer->stop(nullptr);
+        mock_bootstrap_request.on_finish->complete(-ENOLINK);
+      }));
+  EXPECT_CALL(mock_bootstrap_request, cancel());
+
+  expect_close(mock_state_builder, 0);
+
+  expect_trash_move(mock_image_deleter, "global image id", false, 0);
+  expect_mirror_image_status_exists(false);
+
+  create_image_replayer(mock_threads);
+
+  C_SaferCond start_ctx;
+  m_image_replayer->start(&start_ctx);
+  ASSERT_EQ(-ECANCELED, start_ctx.wait());
+}
+
 TEST_F(TestMockImageReplayer, StopError) {
   // START
 
index ae253107cb09e4c2035cb3e511564a3ec4bf83ea..87a2acb76a20c72830bb6b9cba4ec659997c331a 100644 (file)
@@ -345,6 +345,8 @@ def verify_events_by_elements(events, keys, exact_match=False, deletions=False):
             log.error(events)
             assert False, err
 
+META_PREFIX = 'x-amz-meta-'
+
 def verify_s3_records_by_elements(records, keys, exact_match=False, deletions=False, expected_sizes={}, etags=[]):
     """ verify there is at least one record per element """
     err = ''
@@ -363,6 +365,9 @@ def verify_s3_records_by_elements(records, keys, exact_match=False, deletions=Fa
                         #assert_equal(key.etag[1:-1], record['s3']['object']['eTag'])
                         if etags:
                             assert_in(key.etag[1:-1], etags)
+                        if len(record['s3']['object']['metadata']) > 0:
+                            for meta in record['s3']['object']['metadata']:
+                                assert(meta['key'].startswith(META_PREFIX))
                         if deletions and record['eventName'].startswith('ObjectRemoved'):
                             key_found = True
                             object_size = record['s3']['object']['size']
@@ -379,6 +384,9 @@ def verify_s3_records_by_elements(records, keys, exact_match=False, deletions=Fa
                     assert_equal(key.etag, record['s3']['object']['eTag'])
                     if etags:
                         assert_in(key.etag[1:-1], etags)
+                    if len(record['s3']['object']['metadata']) > 0:
+                        for meta in record['s3']['object']['metadata']:
+                            assert(meta['key'].startswith(META_PREFIX))
                     if deletions and record['eventName'].startswith('ObjectRemoved'):
                         key_found = True
                         object_size = record['s3']['object']['size']
@@ -685,6 +693,84 @@ def test_ps_s3_topic_admin_on_master():
     assert_equal(len(parsed_result['topics']), 0)
 
 
+@attr('basic_test')
+def test_ps_s3_notification_configuration_admin_on_master():
+    """ test s3 notification list/get/delete on master """
+    conn = connection()
+    zonegroup = 'default'
+    bucket_name = gen_bucket_name()
+    bucket = conn.create_bucket(bucket_name)
+    topic_name = bucket_name + TOPIC_SUFFIX
+
+    # create s3 topics
+    endpoint_address = 'amqp://127.0.0.1:7001/vhost_1'
+    endpoint_args = 'push-endpoint='+endpoint_address+'&amqp-exchange=amqp.direct&amqp-ack-level=none'
+    topic_conf = PSTopicS3(conn, topic_name+'_1', zonegroup, endpoint_args=endpoint_args)
+    # clean all topics
+    try:
+        result = topic_conf.get_list()[0]['ListTopicsResponse']['ListTopicsResult']['Topics']
+        topics = []
+        if result is not None:
+            topics = result['member']
+        for topic in topics:
+            topic_conf.del_config(topic_arn=topic['TopicArn'])
+    except Exception as err:
+        print('failed to do topic cleanup: ' + str(err))
+
+    topic_arn = topic_conf.set_config()
+    assert_equal(topic_arn,
+                 'arn:aws:sns:' + zonegroup + '::' + topic_name + '_1')
+    # create s3 notification
+    notification_name = bucket_name + NOTIFICATION_SUFFIX
+    topic_conf_list = [{'Id': notification_name+'_1',
+                        'TopicArn': topic_arn,
+                        'Events': ['s3:ObjectCreated:*']
+                        },
+                       {'Id': notification_name+'_2',
+                        'TopicArn': topic_arn,
+                        'Events': ['s3:ObjectRemoved:*']
+                        },
+                       {'Id': notification_name+'_3',
+                        'TopicArn': topic_arn,
+                        'Events': []
+                        }]
+    s3_notification_conf = PSNotificationS3(conn, bucket_name, topic_conf_list)
+    _, status = s3_notification_conf.set_config()
+    assert_equal(status/100, 2)
+
+    # list notification
+    result = admin(['notification', 'list', '--bucket', bucket_name])
+    parsed_result = json.loads(result[0])
+    assert_equal(len(parsed_result['notifications']), 3)
+    assert_equal(result[1], 0)
+
+    # get notification 1
+    result = admin(['notification', 'get', '--bucket', bucket_name, '--notification-id', notification_name+'_1'])
+    parsed_result = json.loads(result[0])
+    assert_equal(parsed_result['Id'], notification_name+'_1')
+    assert_equal(result[1], 0)
+
+    # remove notification 3
+    _, result = admin(['notification', 'rm', '--bucket', bucket_name, '--notification-id', notification_name+'_3'])
+    assert_equal(result, 0)
+
+    # list notification
+    result = admin(['notification', 'list', '--bucket', bucket_name])
+    parsed_result = json.loads(result[0])
+    assert_equal(len(parsed_result['notifications']), 2)
+    assert_equal(result[1], 0)
+
+    # delete notifications
+    _, result = admin(['notification', 'rm', '--bucket', bucket_name])
+    assert_equal(result, 0)
+
+    # list notification, make sure it is empty
+    result = admin(['notification', 'list', '--bucket', bucket_name])
+    parsed_result = json.loads(result[0])
+    assert_equal(len(parsed_result['notifications']), 0)
+    assert_equal(result[1], 0)
+
+
 @attr('modification_required')
 def test_ps_s3_topic_with_secret_on_master():
     """ test s3 topics with secret set/get/delete on master """
@@ -2349,8 +2435,6 @@ def test_ps_s3_multipart_on_master():
     # delete the bucket
     conn.delete_bucket(bucket_name)
 
-META_PREFIX = 'x-amz-meta-'
-
 @attr('amqp_test')
 def test_ps_s3_metadata_filter_on_master():
     """ test s3 notification of metadata on master """
@@ -2482,7 +2566,7 @@ def test_ps_s3_metadata_on_master():
     notification_name = bucket_name + NOTIFICATION_SUFFIX
     meta_key = 'meta1'
     meta_value = 'This is my metadata value'
-    meta_prefix = 'x-amz-meta-'
+    meta_prefix = META_PREFIX
     topic_conf_list = [{'Id': notification_name, 'TopicArn': topic_arn,
         'Events': ['s3:ObjectCreated:*', 's3:ObjectRemoved:*'],
     }]
index bf8671771d9eb72e4dc8739059236e9929080747..f49d309c78cefff203e770866ad43f9ac82e8998 100644 (file)
@@ -13,6 +13,7 @@ using namespace rgw;
 
 const std::chrono::milliseconds wait_time(10);
 const std::chrono::milliseconds long_wait_time = wait_time*50;
+const std::chrono::seconds idle_time(35);
 
 
 class CctCleaner {
@@ -34,7 +35,7 @@ CctCleaner cleaner(cct);
 
 class TestAMQP : public ::testing::Test {
 protected:
-  amqp::connection_ptr_t conn = nullptr;
+  amqp::connection_id_t conn_id;
   unsigned current_dequeued = 0U;
 
   void SetUp() override {
@@ -58,13 +59,54 @@ protected:
   }
 };
 
+std::atomic<bool> callback_invoked = false;
+
+std::atomic<int> callbacks_invoked = 0;
+
+// note: because these callback are shared among different "publish" calls
+// they should be used on different connections
+
+void my_callback_expect_ack(int rc) {
+  EXPECT_EQ(0, rc);
+  callback_invoked = true;
+}
+
+void my_callback_expect_nack(int rc) {
+  EXPECT_LT(rc, 0);
+  callback_invoked = true;
+}
+
+void my_callback_expect_multiple_acks(int rc) {
+  EXPECT_EQ(0, rc);
+  ++callbacks_invoked;
+}
+
+class dynamic_callback_wrapper {
+    dynamic_callback_wrapper() = default;
+public:
+    static dynamic_callback_wrapper* create() {
+        return new dynamic_callback_wrapper;
+    }
+    void callback(int rc) {
+      EXPECT_EQ(0, rc);
+      ++callbacks_invoked;
+      delete this;
+    }
+};
+
+void my_callback_expect_close_or_ack(int rc) {
+  // deleting the connection should trigger the callback with -4098
+  // but due to race conditions, some my get an ack
+  EXPECT_TRUE(-4098 == rc || 0 == rc);
+}
+
 TEST_F(TestAMQP, ConnectionOK)
 {
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("amqp://localhost", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  auto rc = amqp::connect(conn_id, "amqp://localhost", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn, "topic", "message");
+  rc = amqp::publish(conn_id, "topic", "message");
   EXPECT_EQ(rc, 0);
 }
 
@@ -73,10 +115,10 @@ TEST_F(TestAMQP, SSLConnectionOK)
   const int port = 5671;
   const auto connection_number = amqp::get_connection_count();
   amqp_mock::set_valid_port(port);
-  conn = amqp::connect("amqps://localhost", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  auto rc = amqp::connect(conn_id, "amqps://localhost", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn, "topic", "message");
+  rc = amqp::publish(conn_id, "topic", "message");
   EXPECT_EQ(rc, 0);
   amqp_mock::set_valid_port(5672);
 }
@@ -86,193 +128,197 @@ TEST_F(TestAMQP, PlainAndSSLConnectionsOK)
   const int port = 5671;
   const auto connection_number = amqp::get_connection_count();
   amqp_mock::set_valid_port(port);
-  amqp::connection_ptr_t conn1 = amqp::connect("amqps://localhost", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn1);
+  amqp::connection_id_t conn_id1;
+  auto rc = amqp::connect(conn_id1, "amqps://localhost", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn1, "topic", "message");
+  rc = amqp::publish(conn_id1, "topic", "message");
   EXPECT_EQ(rc, 0);
+  EXPECT_EQ(amqp::to_string(conn_id1), "amqps://localhost:5671/?exchange=ex1");
   amqp_mock::set_valid_port(5672);
-  amqp::connection_ptr_t conn2 = amqp::connect("amqp://localhost", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn2);
+  amqp::connection_id_t conn_id2;
+  rc = amqp::connect(conn_id2, "amqp://localhost", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
+  EXPECT_EQ(amqp::to_string(conn_id2), "amqp://localhost:5672/?exchange=ex1");
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 2);
-  rc = amqp::publish(conn2, "topic", "message");
+  rc = amqp::publish(conn_id2, "topic", "message");
   EXPECT_EQ(rc, 0);
 }
 
 TEST_F(TestAMQP, ConnectionReuse)
 {
-  amqp::connection_ptr_t conn1 = amqp::connect("amqp://localhost", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn1);
+  amqp::connection_id_t conn_id1;
+  auto rc = amqp::connect(conn_id1, "amqp://localhost", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   const auto connection_number = amqp::get_connection_count();
-  amqp::connection_ptr_t conn2 = amqp::connect("amqp://localhost", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn2);
+  amqp::connection_id_t conn_id2;
+  rc = amqp::connect(conn_id2, "amqp://localhost", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number);
-  auto rc = amqp::publish(conn1, "topic", "message");
+  rc = amqp::publish(conn_id1, "topic", "message");
   EXPECT_EQ(rc, 0);
 }
 
 TEST_F(TestAMQP, NameResolutionFail)
 {
+  callback_invoked = false;
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("amqp://kaboom", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://kaboom", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn, "topic", "message");
-  EXPECT_LT(rc, 0);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
 }
 
 TEST_F(TestAMQP, InvalidPort)
 {
+  callback_invoked = false;
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("amqp://localhost:1234", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://localhost:1234", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn, "topic", "message");
-  EXPECT_LT(rc, 0);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
 }
 
 TEST_F(TestAMQP, InvalidHost)
 {
+  callback_invoked = false;
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("amqp://0.0.0.1", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://0.0.0.1", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn, "topic", "message");
-  EXPECT_LT(rc, 0);
+  EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
 }
 
 TEST_F(TestAMQP, InvalidVhost)
 {
+  callback_invoked = false;
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("amqp://localhost/kaboom", "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://localhost/kaboom", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn, "topic", "message");
-  EXPECT_LT(rc, 0);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
 }
 
 TEST_F(TestAMQP, UserPassword)
 {
   amqp_mock::set_valid_host("127.0.0.1");
   {
+    callback_invoked = false;
     const auto connection_number = amqp::get_connection_count();
-    conn = amqp::connect("amqp://foo:bar@127.0.0.1", "ex1", false, false, boost::none);
-    EXPECT_TRUE(conn);
+    amqp::connection_id_t conn_id;
+    auto rc = amqp::connect(conn_id, "amqp://foo:bar@127.0.0.1", "ex1", false, false, boost::none);
+    EXPECT_TRUE(rc);
     EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-    auto rc = amqp::publish(conn, "topic", "message");
-    EXPECT_LT(rc, 0);
+    rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+    EXPECT_EQ(rc, 0);
+    wait_until_drained();
+    EXPECT_TRUE(callback_invoked);
   }
   // now try the same connection with default user/password
   amqp_mock::set_valid_host("127.0.0.2");
   {
+    callback_invoked = false;
     const auto connection_number = amqp::get_connection_count();
-    conn = amqp::connect("amqp://guest:guest@127.0.0.2", "ex1", false, false, boost::none);
-    EXPECT_TRUE(conn);
+    amqp::connection_id_t conn_id;
+    auto rc = amqp::connect(conn_id, "amqp://guest:guest@127.0.0.2", "ex1", false, false, boost::none);
+    EXPECT_TRUE(rc);
     EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-    auto rc = amqp::publish(conn, "topic", "message");
+    rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_ack);
     EXPECT_EQ(rc, 0);
+    wait_until_drained();
+    EXPECT_TRUE(callback_invoked);
   }
   amqp_mock::set_valid_host("localhost");
 }
 
 TEST_F(TestAMQP, URLParseError)
 {
+  callback_invoked = false;
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("http://localhost", "ex1", false, false, boost::none);
-  EXPECT_FALSE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "http://localhost", "ex1", false, false, boost::none);
+  EXPECT_FALSE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number);
-  auto rc = amqp::publish(conn, "topic", "message");
-  EXPECT_LT(rc, 0);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
 }
 
 TEST_F(TestAMQP, ExchangeMismatch)
 {
+  callback_invoked = false;
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("http://localhost", "ex2", false, false, boost::none);
-  EXPECT_FALSE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "http://localhost", "ex2", false, false, boost::none);
+  EXPECT_FALSE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number);
-  auto rc = amqp::publish(conn, "topic", "message");
-  EXPECT_LT(rc, 0);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
 }
 
 TEST_F(TestAMQP, MaxConnections)
 {
   // fill up all connections
-  std::vector<amqp::connection_ptr_t> connections;
+  std::vector<amqp::connection_id_t> connections;
   auto remaining_connections = amqp::get_max_connections() - amqp::get_connection_count();
   while (remaining_connections > 0) {
     const auto host = "127.10.0." + std::to_string(remaining_connections);
     amqp_mock::set_valid_host(host);
-    amqp::connection_ptr_t conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-    EXPECT_TRUE(conn);
-    auto rc = amqp::publish(conn, "topic", "message");
+    amqp::connection_id_t conn_id;
+    auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+    EXPECT_TRUE(rc);
+    rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_ack);
     EXPECT_EQ(rc, 0);
     --remaining_connections;
-    connections.push_back(conn);
+    connections.push_back(conn_id);
   }
   EXPECT_EQ(amqp::get_connection_count(), amqp::get_max_connections());
+  wait_until_drained();
   // try to add another connection
   {
     const std::string host = "toomany";
     amqp_mock::set_valid_host(host);
-    amqp::connection_ptr_t conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-    EXPECT_FALSE(conn);
-    auto rc = amqp::publish(conn, "topic", "message");
-    EXPECT_LT(rc, 0);
+    amqp::connection_id_t conn_id;
+    auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+    EXPECT_FALSE(rc);
+    rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+    EXPECT_EQ(rc, 0);
+    wait_until_drained();
   }
   EXPECT_EQ(amqp::get_connection_count(), amqp::get_max_connections());
   amqp_mock::set_valid_host("localhost");
 }
 
-std::atomic<bool> callback_invoked = false;
-
-std::atomic<int> callbacks_invoked = 0;
-
-// note: because these callback are shared among different "publish" calls
-// they should be used on different connections
-
-void my_callback_expect_ack(int rc) {
-  EXPECT_EQ(0, rc);
-  callback_invoked = true;
-}
-
-void my_callback_expect_nack(int rc) {
-  EXPECT_LT(rc, 0);
-  callback_invoked = true;
-}
-
-void my_callback_expect_multiple_acks(int rc) {
-  EXPECT_EQ(0, rc);
-  ++callbacks_invoked;
-}
-
-class dynamic_callback_wrapper {
-    dynamic_callback_wrapper() = default;
-public:
-    static dynamic_callback_wrapper* create() {
-        return new dynamic_callback_wrapper;
-    }
-    void callback(int rc) {
-      EXPECT_EQ(0, rc);
-      ++callbacks_invoked;
-      delete this;
-    }
-};
-
-void my_callback_expect_close_or_ack(int rc) {
-  // deleting the connection should trigger the callback with -4098
-  // but due to race conditions, some my get an ack
-  EXPECT_TRUE(-4098 == rc || 0 == rc);
-}
 
 TEST_F(TestAMQP, ReceiveAck)
 {
   callback_invoked = false;
   const std::string host("localhost1");
   amqp_mock::set_valid_host(host);
-  conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
-  auto rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_ack);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_ack);
   EXPECT_EQ(rc, 0);
   wait_until_drained();
   EXPECT_TRUE(callback_invoked);
@@ -284,16 +330,15 @@ TEST_F(TestAMQP, ImplicitConnectionClose)
   callback_invoked = false;
   const std::string host("localhost1");
   amqp_mock::set_valid_host(host);
-  conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   const auto NUMBER_OF_CALLS = 2000;
   for (auto i = 0; i < NUMBER_OF_CALLS; ++i) {
-    auto rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_close_or_ack);
+    auto rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_close_or_ack);
     EXPECT_EQ(rc, 0);
   }
   wait_until_drained();
-  // deleting the connection object should close the connection
-  conn.reset(nullptr);
   amqp_mock::set_valid_host("localhost");
 }
 
@@ -302,11 +347,12 @@ TEST_F(TestAMQP, ReceiveMultipleAck)
   callbacks_invoked = 0;
   const std::string host("localhost1");
   amqp_mock::set_valid_host(host);
-  conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   const auto NUMBER_OF_CALLS = 100;
   for (auto i=0; i < NUMBER_OF_CALLS; ++i) {
-    auto rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_multiple_acks);
+    auto rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_multiple_acks);
     EXPECT_EQ(rc, 0);
   }
   wait_until_drained();
@@ -320,12 +366,13 @@ TEST_F(TestAMQP, ReceiveAckForMultiple)
   callbacks_invoked = 0;
   const std::string host("localhost1");
   amqp_mock::set_valid_host(host);
-  conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   amqp_mock::set_multiple(59);
   const auto NUMBER_OF_CALLS = 100;
   for (auto i=0; i < NUMBER_OF_CALLS; ++i) {
-    auto rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_multiple_acks);
+    rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_multiple_acks);
     EXPECT_EQ(rc, 0);
   }
   wait_until_drained();
@@ -339,12 +386,13 @@ TEST_F(TestAMQP, DynamicCallback)
   callbacks_invoked = 0;
   const std::string host("localhost1");
   amqp_mock::set_valid_host(host);
-  conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   amqp_mock::set_multiple(59);
   const auto NUMBER_OF_CALLS = 100;
   for (auto i=0; i < NUMBER_OF_CALLS; ++i) {
-    auto rc = publish_with_confirm(conn, "topic", "message",
+    rc = publish_with_confirm(conn_id, "topic", "message",
             std::bind(&dynamic_callback_wrapper::callback, dynamic_callback_wrapper::create(), std::placeholders::_1));
     EXPECT_EQ(rc, 0);
   }
@@ -360,9 +408,10 @@ TEST_F(TestAMQP, ReceiveNack)
   amqp_mock::REPLY_ACK = false;
   const std::string host("localhost2");
   amqp_mock::set_valid_host(host);
-  conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
-  auto rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_nack);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
   EXPECT_EQ(rc, 0);
   wait_until_drained();
   EXPECT_TRUE(callback_invoked);
@@ -377,9 +426,10 @@ TEST_F(TestAMQP, FailWrite)
   amqp_mock::FAIL_NEXT_WRITE = true;
   const std::string host("localhost2");
   amqp_mock::set_valid_host(host);
-  conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
-  auto rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_nack);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
   EXPECT_EQ(rc, 0);
   wait_until_drained();
   EXPECT_TRUE(callback_invoked);
@@ -390,35 +440,49 @@ TEST_F(TestAMQP, FailWrite)
 
 TEST_F(TestAMQP, RetryInvalidHost)
 {
+  callback_invoked = false;
   const std::string host = "192.168.0.1";
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("amqp://"+host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://"+host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn, "topic", "message");
-  EXPECT_LT(rc, 0);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
   // now next retry should be ok
+  callback_invoked = false;
   amqp_mock::set_valid_host(host);
   std::this_thread::sleep_for(long_wait_time);
-  rc = amqp::publish(conn, "topic", "message");
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_ack);
   EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
   amqp_mock::set_valid_host("localhost");
 }
 
 TEST_F(TestAMQP, RetryInvalidPort)
 {
+  callback_invoked = false;
   const int port = 9999;
   const auto connection_number = amqp::get_connection_count();
-  conn = amqp::connect("amqp://localhost:" + std::to_string(port), "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://localhost:" + std::to_string(port), "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
   EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
-  auto rc = amqp::publish(conn, "topic", "message");
-  EXPECT_LT(rc, 0);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
   // now next retry should be ok
+  callback_invoked = false;
   amqp_mock::set_valid_port(port);
   std::this_thread::sleep_for(long_wait_time);
-  rc = amqp::publish(conn, "topic", "message");
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_ack);
   EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
   amqp_mock::set_valid_port(5672);
 }
 
@@ -426,34 +490,40 @@ TEST_F(TestAMQP, RetryFailWrite)
 {
   callback_invoked = false;
   amqp_mock::FAIL_NEXT_WRITE = true;
-  const std::string host("localhost4");
+  const std::string host("localhost2");
   amqp_mock::set_valid_host(host);
-  conn = amqp::connect("amqp://" + host, "ex1", false, false, boost::none);
-  EXPECT_TRUE(conn);
-  auto rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_nack);
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://" + host, "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
   EXPECT_EQ(rc, 0);
-  // set port to a different one, so that reconnect would fail
-  amqp_mock::set_valid_port(9999);
   wait_until_drained();
   EXPECT_TRUE(callback_invoked);
-  callback_invoked = false;
-  rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_nack);
-  EXPECT_LT(rc, 0);
-  // expect immediate failure, no callback called after sleep
-  std::this_thread::sleep_for(long_wait_time);
-  EXPECT_FALSE(callback_invoked);
-  // set port to the right one so that reconnect would succeed
-  amqp_mock::set_valid_port(5672);
-  callback_invoked = false;
+  // now next retry should be ok
   amqp_mock::FAIL_NEXT_WRITE = false;
-  // give time to reconnect
+  callback_invoked = false;
   std::this_thread::sleep_for(long_wait_time);
-  // retry to publish should succeed now
-  rc = publish_with_confirm(conn, "topic", "message", my_callback_expect_ack);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_ack);
   EXPECT_EQ(rc, 0);
   wait_until_drained();
   EXPECT_TRUE(callback_invoked);
-  callback_invoked = false;
   amqp_mock::set_valid_host("localhost");
 }
 
+TEST_F(TestAMQP, IdleConnection)
+{
+  // this test is skipped since it takes 30seconds
+  //GTEST_SKIP();
+  const auto connection_number = amqp::get_connection_count();
+  amqp::connection_id_t conn_id;
+  auto rc = amqp::connect(conn_id, "amqp://localhost", "ex1", false, false, boost::none);
+  EXPECT_TRUE(rc);
+  EXPECT_EQ(amqp::get_connection_count(), connection_number + 1);
+  std::this_thread::sleep_for(idle_time);
+  EXPECT_EQ(amqp::get_connection_count(), connection_number);
+  rc = publish_with_confirm(conn_id, "topic", "message", my_callback_expect_nack);
+  EXPECT_EQ(rc, 0);
+  wait_until_drained();
+  EXPECT_TRUE(callback_invoked);
+}
+
index 92df403fd09b860f29e3f7b9363fc6acac8db5eb..b85c78eb2908415542f62fcb8d6e72e527049047 100644 (file)
@@ -426,7 +426,7 @@ TEST(TestRGWCrypto, verify_RGWGetObj_BlockDecrypt_ranges)
     ut_get_sink get_sink;
     auto cbc = AES_256_CBC_create(&no_dpp, g_ceph_context, &key[0], 32);
     ASSERT_NE(cbc.get(), nullptr);
-    RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink, std::move(cbc));
+    RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink, std::move(cbc), {});
 
     //random ranges
     off_t begin = (r/3)*r*(r+13)*(r+23)*(r+53)*(r+71) % test_range;
@@ -472,7 +472,7 @@ TEST(TestRGWCrypto, verify_RGWGetObj_BlockDecrypt_chunks)
     ut_get_sink get_sink;
     auto cbc = AES_256_CBC_create(&no_dpp, g_ceph_context, &key[0], 32);
     ASSERT_NE(cbc.get(), nullptr);
-    RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink, std::move(cbc));
+    RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink, std::move(cbc), {});
 
     //random
     off_t begin = (r/3)*r*(r+13)*(r+23)*(r+53)*(r+71) % test_range;
@@ -518,7 +518,7 @@ TEST(TestRGWCrypto, check_RGWGetObj_BlockDecrypt_fixup)
   ut_get_sink get_sink;
   auto nonecrypt = std::unique_ptr<BlockCrypt>(new BlockCryptNone);
   RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
-                                 std::move(nonecrypt));
+                                 std::move(nonecrypt), {});
   ASSERT_EQ(fixup_range(&decrypt,0,0),     range_t(0,255));
   ASSERT_EQ(fixup_range(&decrypt,1,256),   range_t(0,511));
   ASSERT_EQ(fixup_range(&decrypt,0,255),   range_t(0,255));
@@ -527,16 +527,6 @@ TEST(TestRGWCrypto, check_RGWGetObj_BlockDecrypt_fixup)
   ASSERT_EQ(fixup_range(&decrypt,513,1024), range_t(512,1024+255));
 }
 
-using parts_len_t = std::vector<size_t>;
-
-class TestRGWGetObj_BlockDecrypt : public RGWGetObj_BlockDecrypt {
-  using RGWGetObj_BlockDecrypt::RGWGetObj_BlockDecrypt;
-public:
-  void set_parts_len(parts_len_t&& other) {
-    parts_len = std::move(other);
-  }
-};
-
 std::vector<size_t> create_mp_parts(size_t obj_size, size_t mp_part_len){
   std::vector<size_t> parts_len;
   size_t part_size;
@@ -559,9 +549,9 @@ TEST(TestRGWCrypto, check_RGWGetObj_BlockDecrypt_fixup_simple)
 
   ut_get_sink get_sink;
   auto nonecrypt = std::make_unique<BlockCryptNone>(4096);
-  TestRGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
-                                    std::move(nonecrypt));
-  decrypt.set_parts_len(create_mp_parts(obj_size, part_size));
+  RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
+                                std::move(nonecrypt),
+                                create_mp_parts(obj_size, part_size));
   ASSERT_EQ(fixup_range(&decrypt,0,0),     range_t(0,4095));
   ASSERT_EQ(fixup_range(&decrypt,1,4096),   range_t(0,8191));
   ASSERT_EQ(fixup_range(&decrypt,0,4095),   range_t(0,4095));
@@ -588,12 +578,13 @@ TEST(TestRGWCrypto, check_RGWGetObj_BlockDecrypt_fixup_non_aligned_obj_size)
 {
   const NoDoutPrefix no_dpp(g_ceph_context, dout_subsys);
 
+  const size_t na_obj_size = obj_size + 1;
+
   ut_get_sink get_sink;
   auto nonecrypt = std::make_unique<BlockCryptNone>(4096);
-  TestRGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
-                                    std::move(nonecrypt));
-  auto na_obj_size = obj_size + 1;
-  decrypt.set_parts_len(create_mp_parts(na_obj_size, part_size));
+  RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
+                                std::move(nonecrypt),
+                                create_mp_parts(na_obj_size, part_size));
 
   // these should be unaffected here
   ASSERT_EQ(fixup_range(&decrypt, 0, part_size - 2), range_t(0, part_size -1));
@@ -616,12 +607,13 @@ TEST(TestRGWCrypto, check_RGWGetObj_BlockDecrypt_fixup_non_aligned_part_size)
 {
   const NoDoutPrefix no_dpp(g_ceph_context, dout_subsys);
 
+  const size_t na_part_size = part_size + 1;
+
   ut_get_sink get_sink;
   auto nonecrypt = std::make_unique<BlockCryptNone>(4096);
-  TestRGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
-                                    std::move(nonecrypt));
-  auto na_part_size = part_size + 1;
-  decrypt.set_parts_len(create_mp_parts(obj_size, na_part_size));
+  RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
+                                std::move(nonecrypt),
+                                create_mp_parts(obj_size, na_part_size));
 
   // na_part_size -2, ie. part_size -1  is aligned to 4095 boundary
   ASSERT_EQ(fixup_range(&decrypt, 0, na_part_size - 2), range_t(0, na_part_size -2));
@@ -650,13 +642,14 @@ TEST(TestRGWCrypto, check_RGWGetObj_BlockDecrypt_fixup_non_aligned)
 {
   const NoDoutPrefix no_dpp(g_ceph_context, dout_subsys);
 
+  const size_t na_part_size = part_size + 1;
+  const size_t na_obj_size = obj_size + 7; // (6*(5MiB + 1) + 1) for the last 1B overflow
+
   ut_get_sink get_sink;
   auto nonecrypt = std::make_unique<BlockCryptNone>(4096);
-  TestRGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
-                                    std::move(nonecrypt));
-  auto na_part_size = part_size + 1;
-  auto na_obj_size = obj_size + 7; // (6*(5MiB + 1) + 1) for the last 1B overflow
-  decrypt.set_parts_len(create_mp_parts(na_obj_size, na_part_size));
+  RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
+                                std::move(nonecrypt),
+                                create_mp_parts(na_obj_size, na_part_size));
 
   // na_part_size -2, ie. part_size -1  is aligned to 4095 boundary
   ASSERT_EQ(fixup_range(&decrypt, 0, na_part_size - 2), range_t(0, na_part_size -2));
@@ -682,10 +675,10 @@ TEST(TestRGWCrypto, check_RGWGetObj_BlockDecrypt_fixup_invalid_ranges)
 
   ut_get_sink get_sink;
   auto nonecrypt = std::make_unique<BlockCryptNone>(4096);
-  TestRGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
-                                    std::move(nonecrypt));
+  RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
+                                std::move(nonecrypt),
+                                create_mp_parts(obj_size, part_size));
 
-  decrypt.set_parts_len(create_mp_parts(obj_size, part_size));
 
   // the ranges below would be mostly unreachable in current code as rgw
   // would've returned a 411 before reaching, but we're just doing this to make
@@ -795,7 +788,8 @@ TEST(TestRGWCrypto, verify_Encrypt_Decrypt)
 
     ut_get_sink get_sink;
     RGWGetObj_BlockDecrypt decrypt(&no_dpp, g_ceph_context, &get_sink,
-                                   AES_256_CBC_create(&no_dpp, g_ceph_context, &key[0], 32));
+                                   AES_256_CBC_create(&no_dpp, g_ceph_context, &key[0], 32),
+                                   {});
 
     off_t bl_ofs = 0;
     off_t bl_end = test_size - 1;
index d972f8341f6682b8de71ac27ad58c8071c225255..6bca9bb08167b960111efe2b2f727cffef15f950 100644 (file)
@@ -62,7 +62,7 @@ void JournalTool::usage()
     << "    <output>: [summary|list|binary|json] [--path <path>]\n"
     << "\n"
     << "General options:\n"
-    << "  --rank=filesystem:mds-rank|all Journal rank (mandatory)\n"
+    << "  --rank=filesystem:{mds-rank|all} journal rank or \"all\" ranks (mandatory)\n"
     << "  --journal=<mdlog|purge_queue>  Journal type (purge_queue means\n"
     << "                                 this journal is used to queue for purge operation,\n"
     << "                                 default is mdlog, and only mdlog support event mode)\n"
index d2c9c07782adc2007b806f0cab2c8c098f41efe8..a9c1fab1025d9f42ee29bba6289ba1f7df744f7c 100644 (file)
@@ -52,11 +52,35 @@ public:
            m_mirror_watcher->is_failed();
   }
 
+  utime_t get_failed_ts() {
+    std::scoped_lock locker(m_lock);
+    if (m_instance_watcher) {
+      return m_instance_watcher->get_failed_ts();
+    }
+    if (m_mirror_watcher) {
+      return m_mirror_watcher->get_failed_ts();
+    }
+
+    return utime_t();
+  }
+
   bool is_blocklisted() {
     std::scoped_lock locker(m_lock);
     return is_blocklisted(locker);
   }
 
+  utime_t get_blocklisted_ts() {
+    std::scoped_lock locker(m_lock);
+    if (m_instance_watcher) {
+      return m_instance_watcher->get_blocklisted_ts();
+    }
+    if (m_mirror_watcher) {
+      return m_mirror_watcher->get_blocklisted_ts();
+    }
+
+    return utime_t();
+  }
+
   Peers get_peers() {
     std::scoped_lock locker(m_lock);
     return m_all_peers;
index aeb474274fb4a755d06d1be93842359383f58639..b6a51a141aad19cd3b072b487765e12058d3e7e4 100644 (file)
@@ -116,12 +116,15 @@ void InstanceWatcher::handle_rewatch_complete(int r) {
     dout(0) << ": client blocklisted" <<dendl;
     std::scoped_lock locker(m_lock);
     m_blocklisted = true;
+    m_blocklisted_ts = ceph_clock_now();
   } else if (r == -ENOENT) {
     derr << ": mirroring object deleted" << dendl;
     m_failed = true;
+    m_failed_ts = ceph_clock_now();
   } else if (r < 0) {
     derr << ": rewatch error: " << cpp_strerror(r) << dendl;
     m_failed = true;
+    m_failed_ts = ceph_clock_now();
   }
 }
 
index dfe0cd05990e553dbc7122b93849d28af47efc5d..a0740009605e4ae62c9f67cd3bd7c213808b31fc 100644 (file)
@@ -49,11 +49,21 @@ public:
     return m_blocklisted;
   }
 
+  utime_t get_blocklisted_ts() {
+    std::scoped_lock locker(m_lock);
+    return m_blocklisted_ts;
+  }
+
   bool is_failed() {
     std::scoped_lock locker(m_lock);
     return m_failed;
   }
 
+  utime_t get_failed_ts() {
+    std::scoped_lock locker(m_lock);
+    return m_failed_ts;
+  }
+
 private:
   librados::IoCtx &m_ioctx;
   Listener &m_listener;
@@ -66,6 +76,9 @@ private:
   bool m_blocklisted = false;
   bool m_failed = false;
 
+  utime_t m_blocklisted_ts;
+  utime_t m_failed_ts;
+
   void create_instance();
   void handle_create_instance(int r);
 
index 890805764c048d86ecb26c817add6aaaf6e5d9af..edf903b921fb3a8d9fb2fcccb54d78effa385bcd 100644 (file)
@@ -179,6 +179,7 @@ struct Mirror::C_RestartMirroring : Context {
 
   void handle_enable_mirroring(int r) {
     mirror->handle_enable_mirroring(filesystem, peers, r);
+    mirror->_unset_restarting(filesystem);
     delete this;
   }
 
@@ -195,8 +196,6 @@ Mirror::Mirror(CephContext *cct, const std::vector<const char*> &args,
     m_monc(monc),
     m_msgr(msgr),
     m_listener(this),
-    m_last_blocklist_check(ceph_clock_now()),
-    m_last_failure_check(ceph_clock_now()),
     m_local(new librados::Rados()) {
   auto thread_pool = &(cct->lookup_or_create_singleton_object<ThreadPoolSingleton>(
                          "cephfs::mirror::thread_pool", false, cct));
@@ -497,47 +496,35 @@ void Mirror::update_fs_mirrors() {
   auto now = ceph_clock_now();
   double blocklist_interval = g_ceph_context->_conf.get_val<std::chrono::seconds>
     ("cephfs_mirror_restart_mirror_on_blocklist_interval").count();
-  bool check_blocklist = blocklist_interval > 0 && ((now - m_last_blocklist_check) >= blocklist_interval);
-
   double failed_interval = g_ceph_context->_conf.get_val<std::chrono::seconds>
     ("cephfs_mirror_restart_mirror_on_failure_interval").count();
-  bool check_failure = failed_interval > 0 && ((now - m_last_failure_check) >= failed_interval);
 
   {
     std::scoped_lock locker(m_lock);
     for (auto &[filesystem, mirror_action] : m_mirror_actions) {
-      auto failed = mirror_action.fs_mirror && mirror_action.fs_mirror->is_failed();
-      auto blocklisted = mirror_action.fs_mirror && mirror_action.fs_mirror->is_blocklisted();
-
-      if (check_failure && !mirror_action.action_in_progress && failed) {
-        // about to restart failed mirror instance -- nothing
-        // should interfere
-        dout(5) << ": filesystem=" << filesystem << " failed mirroring -- restarting" << dendl;
-        auto peers = mirror_action.fs_mirror->get_peers();
-        auto ctx =  new C_RestartMirroring(this, filesystem, mirror_action.pool_id, peers);
-        ctx->complete(0);
-      } else if (check_blocklist && !mirror_action.action_in_progress && blocklisted) {
-        // about to restart blocklisted mirror instance -- nothing
-        // should interfere
-        dout(5) << ": filesystem=" << filesystem << " is blocklisted -- restarting" << dendl;
-        auto peers = mirror_action.fs_mirror->get_peers();
-        auto ctx = new C_RestartMirroring(this, filesystem, mirror_action.pool_id, peers);
-        ctx->complete(0);
+      auto failed_restart = mirror_action.fs_mirror && mirror_action.fs_mirror->is_failed() &&
+       (failed_interval > 0 && (mirror_action.fs_mirror->get_failed_ts() - now) > failed_interval);
+      auto blocklisted_restart = mirror_action.fs_mirror && mirror_action.fs_mirror->is_blocklisted() &&
+       (blocklist_interval > 0 && (mirror_action.fs_mirror->get_blocklisted_ts() - now) > blocklist_interval);
+
+      if (!mirror_action.action_in_progress && !_is_restarting(filesystem)) {
+       if (failed_restart || blocklisted_restart) {
+         dout(5) << ": filesystem=" << filesystem << " failed mirroring (failed: "
+                 << failed_restart << ", blocklisted: " << blocklisted_restart << dendl;
+         _set_restarting(filesystem);
+         auto peers = mirror_action.fs_mirror->get_peers();
+         auto ctx =  new C_RestartMirroring(this, filesystem, mirror_action.pool_id, peers);
+         ctx->complete(0);
+       }
       }
-      if (!failed && !blocklisted && !mirror_action.action_ctxs.empty()
+
+      if (!failed_restart && !blocklisted_restart && !mirror_action.action_ctxs.empty()
           && !mirror_action.action_in_progress) {
         auto ctx = std::move(mirror_action.action_ctxs.front());
         mirror_action.action_ctxs.pop_front();
         ctx->complete(0);
       }
     }
-
-    if (check_blocklist) {
-      m_last_blocklist_check = now;
-    }
-    if (check_failure) {
-      m_last_failure_check = now;
-    }
   }
 
   schedule_mirror_update_task();
index f0ffdd51625625dfb41be76110254a5f973d2573..2081b5b53050f0e08f098aa1cf6f18a2b4f9f191 100644 (file)
@@ -77,6 +77,7 @@ private:
 
     uint64_t pool_id; // for restarting blocklisted mirror instance
     bool action_in_progress = false;
+    bool restarting = false;
     std::list<Context *> action_ctxs;
     std::unique_ptr<FSMirror> fs_mirror;
   };
@@ -100,9 +101,6 @@ private:
   std::unique_ptr<ClusterWatcher> m_cluster_watcher;
   std::map<Filesystem, MirrorAction> m_mirror_actions;
 
-  utime_t m_last_blocklist_check;
-  utime_t m_last_failure_check;
-
   RadosRef m_local;
   std::unique_ptr<ServiceDaemon> m_service_daemon;
 
@@ -132,6 +130,21 @@ private:
   void update_fs_mirrors();
 
   void reopen_logs();
+
+  void _set_restarting(const Filesystem &filesystem) {
+    auto &mirror_action = m_mirror_actions.at(filesystem);
+    mirror_action.restarting = true;
+  }
+
+  void _unset_restarting(const Filesystem &filesystem) {
+    auto &mirror_action = m_mirror_actions.at(filesystem);
+    mirror_action.restarting = false;
+  }
+
+  bool _is_restarting(const Filesystem &filesystem) {
+    auto &mirror_action = m_mirror_actions.at(filesystem);
+    return mirror_action.restarting;
+  }
 };
 
 } // namespace mirror
index 26b88d077e59809b8565eea6d29fe5f5b3906574..b3770d103ea3ef00371ee92de5b89a09d5802796 100644 (file)
@@ -93,12 +93,15 @@ void MirrorWatcher::handle_rewatch_complete(int r) {
     dout(0) << ": client blocklisted" <<dendl;
     std::scoped_lock locker(m_lock);
     m_blocklisted = true;
+    m_blocklisted_ts = ceph_clock_now();
   } else if (r == -ENOENT) {
     derr << ": mirroring object deleted" << dendl;
     m_failed = true;
+    m_failed_ts = ceph_clock_now();
   } else if (r < 0) {
     derr << ": rewatch error: " << cpp_strerror(r) << dendl;
     m_failed = true;
+    m_failed_ts = ceph_clock_now();
   }
 }
 
index c4d4f452294d8459d4c53ad7b6ed97fb8f03e732..54e185b95b04eed14b3f0dbc2dd36a09b1c98859 100644 (file)
@@ -47,11 +47,21 @@ public:
     return m_blocklisted;
   }
 
+  utime_t get_blocklisted_ts() {
+    std::scoped_lock locker(m_lock);
+    return m_blocklisted_ts;
+  }
+
   bool is_failed() {
     std::scoped_lock locker(m_lock);
     return m_failed;
   }
 
+  utime_t get_failed_ts() {
+    std::scoped_lock locker(m_lock);
+    return m_failed_ts;
+  }
+
 private:
   librados::IoCtx &m_ioctx;
   FSMirror *m_fs_mirror;
@@ -66,6 +76,9 @@ private:
   bool m_blocklisted = false;
   bool m_failed = false;
 
+  utime_t m_blocklisted_ts;
+  utime_t m_failed_ts;
+
   void register_watcher();
   void handle_register_watcher(int r);
 
index 66a141f8578d92dea954284996b381d9ee2da054..bd47046bb12184da66f2c9a74aeccf4bcd91f6f2 100644 (file)
@@ -1128,6 +1128,27 @@ int PeerReplayer::pre_sync_check_and_open_handles(
   return 0;
 }
 
+// sync the mode of the remote dir_root with that of the local dir_root
+int PeerReplayer::sync_perms(const std::string& path) {
+  int r = 0;
+  struct ceph_statx tstx;
+
+  r = ceph_statx(m_local_mount, path.c_str(), &tstx, CEPH_STATX_MODE,
+                AT_STATX_DONT_SYNC | AT_SYMLINK_NOFOLLOW);
+  if (r < 0) {
+    derr << ": failed to fetch stat for local path: "
+        << cpp_strerror(r) << dendl;
+    return r;
+  }
+  r = ceph_chmod(m_remote_mount, path.c_str(), tstx.stx_mode);
+  if (r < 0) {
+    derr << ": failed to set mode for remote path: "
+        << cpp_strerror(r) << dendl;
+    return r;
+  }
+  return 0;
+}
+
 void PeerReplayer::post_sync_close_handles(const FHandles &fh) {
   dout(20) << dendl;
 
@@ -1499,8 +1520,13 @@ void PeerReplayer::run(SnapshotReplayerThread *replayer) {
         dout(5) << ": picked dir_root=" << *dir_root << dendl;
         int r = register_directory(*dir_root, replayer);
         if (r == 0) {
-          sync_snaps(*dir_root, locker);
-          unregister_directory(*dir_root);
+         r = sync_perms(*dir_root);
+         if (r < 0) {
+           _inc_failed_count(*dir_root);
+         } else {
+           sync_snaps(*dir_root, locker);
+         }
+         unregister_directory(*dir_root);
         }
       }
 
index d45d3087e8d4a924c4041859e1c0b779d104a685..0511d154a759d068fcc87bd5a8db890b5c87bb7e 100644 (file)
@@ -311,6 +311,7 @@ private:
                      const FHandles &fh, bool need_data_sync, bool need_attr_sync);
   int copy_to_remote(const std::string &dir_root, const std::string &epath, const struct ceph_statx &stx,
                      const FHandles &fh);
+  int sync_perms(const std::string& path);
 };
 
 } // namespace mirror
index 2f6f9f1e1428c7bc0c5425372ffaf46c337d4346..3d602e749cdee9aec3625c6e3cfec0366b7fb8f9 100644 (file)
@@ -91,7 +91,7 @@ void usage(ostream& out)
 "   lspools                          list pools\n"
 "   cppool <pool-name> <dest-pool>   copy content of a pool\n"
 "   purge <pool-name> --yes-i-really-really-mean-it\n"
-"                                    remove all objects from pool <pool-name> without removing it\n"
+"                                    remove all objects from pool <pool-name> without removing the pool itself\n"
 "   df                               show per-pool and total usage\n"
 "   ls                               list objects in pool\n\n"
 "\n"
index 0f909b206ddbd1b7c10f7ebc488e4396d0d3155b..1e88c3262f16f0d72acb905829d2b906faca4eb7 100644 (file)
@@ -348,10 +348,6 @@ void ImageReplayer<I>::bootstrap() {
   ceph_assert(!m_peers.empty());
   m_remote_image_peer = *m_peers.begin();
 
-  if (on_start_interrupted(m_lock)) {
-    return;
-  }
-
   ceph_assert(m_state_builder == nullptr);
   auto ctx = create_context_callback<
       ImageReplayer, &ImageReplayer<I>::handle_bootstrap>(this);
@@ -364,6 +360,13 @@ void ImageReplayer<I>::bootstrap() {
 
   request->get();
   m_bootstrap_request = request;
+
+  // proceed even if stop was requested to allow for m_delete_requested
+  // to get set; cancel() would prevent BootstrapRequest from going into
+  // image sync
+  if (m_stop_requested) {
+    request->cancel();
+  }
   locker.unlock();
 
   update_mirror_image_status(false, boost::none);
@@ -379,6 +382,14 @@ void ImageReplayer<I>::handle_bootstrap(int r) {
     m_bootstrap_request = nullptr;
   }
 
+  // set m_delete_requested early to ensure that in case remote
+  // image no longer exists local image gets deleted even if start
+  // is interrupted
+  if (r == -ENOLINK) {
+    dout(5) << "remote image no longer exists" << dendl;
+    m_delete_requested = true;
+  }
+
   if (on_start_interrupted()) {
     return;
   } else if (r == -ENOMSG) {
@@ -393,7 +404,6 @@ void ImageReplayer<I>::handle_bootstrap(int r) {
     on_start_fail(r, "split-brain detected");
     return;
   } else if (r == -ENOLINK) {
-    m_delete_requested = true;
     on_start_fail(0, "remote image no longer exists");
     return;
   } else if (r == -ERESTART) {
index 3561f6fc699419ddb9b229e63e568f53066615b3..67eaa97779d7ef83cf374fa5d055ef634e393c4e 100644 (file)
@@ -542,6 +542,11 @@ void Replayer<I>::scan_local_mirror_snapshots(
     if (m_local_mirror_snap_ns.is_non_primary() &&
         m_local_mirror_snap_ns.primary_mirror_uuid !=
           m_state_builder->remote_mirror_uuid) {
+      if (m_local_mirror_snap_ns.is_orphan()) {
+        dout(5) << "local image being force promoted" << dendl;
+        handle_replay_complete(locker, 0, "orphan (force promoting)");
+        return;
+      }
       // TODO support multiple peers
       derr << "local image linked to unknown peer: "
            << m_local_mirror_snap_ns.primary_mirror_uuid << dendl;
index 3130e8bc750e28cf9147b0eedda132d66cac6e99..e348bd8fe4310e9cb97df5ccf63c89344d1d40c9 100644 (file)
@@ -738,7 +738,67 @@ private:
   bool use_netlink;
   librados::IoCtx &io_ctx;
   librbd::Image &image;
-  unsigned long size;
+  uint64_t size;
+  std::thread handle_notify_thread;
+  ceph::condition_variable cond;
+  ceph::mutex lock = ceph::make_mutex("NBDWatchCtx::Locker");
+  bool notify = false;
+  bool terminated = false;
+
+  bool wait_notify() {
+    dout(10) << __func__ << dendl;
+
+    std::unique_lock locker{lock};
+    cond.wait(locker, [this] { return notify || terminated; });
+
+    if (terminated) {
+      return false;
+    }
+
+    dout(10) << __func__ << ": got notify request" << dendl;
+    notify = false;
+    return true;
+  }
+
+  void handle_notify_entry() {
+    dout(10) << __func__ << dendl;
+
+    while (wait_notify()) {
+      uint64_t new_size;
+      int ret = image.size(&new_size);
+      if (ret < 0) {
+        derr << "getting image size failed: " << cpp_strerror(ret) << dendl;
+        continue;
+      }
+      if (new_size == size) {
+        continue;
+      }
+      dout(5) << "resize detected" << dendl;
+      if (ioctl(fd, BLKFLSBUF, NULL) < 0) {
+        derr << "invalidate page cache failed: " << cpp_strerror(errno)
+             << dendl;
+      }
+      if (use_netlink) {
+        ret = netlink_resize(nbd_index, new_size);
+      } else {
+        ret = ioctl(fd, NBD_SET_SIZE, new_size);
+        if (ret < 0) {
+          derr << "resize failed: " << cpp_strerror(errno) << dendl;
+        }
+      }
+      if (!ret) {
+        size = new_size;
+      }
+      if (ioctl(fd, BLKRRPART, NULL) < 0) {
+        derr << "rescan of partition table failed: " << cpp_strerror(errno)
+             << dendl;
+      }
+      if (image.invalidate_cache() < 0) {
+        derr << "invalidate rbd cache failed" << dendl;
+      }
+    }
+  }
+
 public:
   NBDWatchCtx(int _fd,
               int _nbd_index,
@@ -752,41 +812,31 @@ public:
     , io_ctx(_io_ctx)
     , image(_image)
     , size(_size)
-  { }
+  {
+    handle_notify_thread = make_named_thread("rbd_handle_notify",
+                                             &NBDWatchCtx::handle_notify_entry,
+                                             this);
+  }
 
-  ~NBDWatchCtx() override {}
+  ~NBDWatchCtx() override
+  {
+    dout(10) << __func__ << ": terminating" << dendl;
+    std::unique_lock locker{lock};
+    terminated = true;
+    cond.notify_all();
+    locker.unlock();
+
+    handle_notify_thread.join();
+    dout(10) << __func__ << ": finish" << dendl;
+  }
 
   void handle_notify() override
   {
-    librbd::image_info_t info;
-    if (image.stat(info, sizeof(info)) == 0) {
-      unsigned long new_size = info.size;
-      int ret;
-
-      if (new_size != size) {
-        dout(5) << "resize detected" << dendl;
-        if (ioctl(fd, BLKFLSBUF, NULL) < 0)
-          derr << "invalidate page cache failed: " << cpp_strerror(errno)
-               << dendl;
-       if (use_netlink) {
-         ret = netlink_resize(nbd_index, new_size);
-       } else {
-          ret = ioctl(fd, NBD_SET_SIZE, new_size);
-          if (ret < 0)
-            derr << "resize failed: " << cpp_strerror(errno) << dendl;
-       }
-
-        if (!ret)
-          size = new_size;
+    dout(10) << __func__ << dendl;
 
-        if (ioctl(fd, BLKRRPART, NULL) < 0) {
-          derr << "rescan of partition table failed: " << cpp_strerror(errno)
-               << dendl;
-        }
-        if (image.invalidate_cache() < 0)
-          derr << "invalidate rbd cache failed" << dendl;
-      }
-    }
+    std::unique_lock locker{lock};
+    notify = true;
+    cond.notify_all();
   }
 };
 
index 02d84cc7fcc3c110fd6048d1ebf7272ed47ea095..92da54e8785f6d209b50cfc506ee371226333055 100755 (executable)
@@ -253,6 +253,7 @@ options:
        --no-parallel: dont start all OSDs in parallel
        --no-restart: dont restart process when using ceph-run
        --jaeger: use jaegertracing for tracing
+       --seastore-device-size: set total size of seastore
        --seastore-devs: comma-separated list of blockdevs to use for seastore
        --seastore-secondary-devs: comma-separated list of secondary blockdevs to use for seastore
        --seastore-secondary-devs-type: device type of all secondary blockdevs. HDD, SSD(default), ZNS or RANDOM_BLOCK_SSD
@@ -501,6 +502,10 @@ case $1 in
     --with-restful)
         with_mgr_restful=true
         ;;
+    --seastore-device-size)
+        seastore_size="$2"
+        shift
+        ;;
     --seastore-devs)
         parse_block_devs --seastore-devs "$2"
         shift
@@ -784,6 +789,14 @@ EOF
         bdev ioring = true"
         fi
     fi
+
+    if [ "$objectstore" == "seastore" ]; then
+      if [[ ${seastore_size+x} ]]; then
+        SEASTORE_OPTS="
+        seastore device size = $seastore_size"
+      fi
+    fi
+
     wconf <<EOF
 [client]
 $CCLIENTDEBUG
@@ -835,6 +848,7 @@ $BLUESTORE_OPTS
         ; kstore
         kstore fsck on mount = true
         osd objectstore = $objectstore
+$SEASTORE_OPTS
 $COSDSHORT
         $(format_conf "${extra_conf}")
 [mon]